ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDQ5Mjk5ZWUuLjU5ZDM4MzIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTUsMTEgKzE1LDEzIEBACiBEb2MvdG9vbHMvcHlnbWVudHMvCiBEb2MvdG9vbHMvc3BoaW54LwogTGliL2xpYjJ0bzMvKi5waWNrbGUKK0xpYi90ZXN0L2RhdGEvKgogTGliL19zeXNjb25maWdkYXRhLnB5CiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwogTWFrZWZpbGUKIE1ha2VmaWxlLnByZQogTWlzYy9weXRob24ucGMKK01pc2MvcHl0aG9uLWNvbmZpZy5zaAogTW9kdWxlcy9TZXR1cAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKQEAgLTU3LDYgKzU5LDggQEAKIHB5YnVpbGRkaXIudHh0CiBweWNvbmZpZy5oCiBweXRob24KK3B5dGhvbi1jb25maWcKK3B5dGhvbi1jb25maWcucHkKIHB5dGhvbi5leGUKIHB5dGhvbi1nZGIucHkKIHB5dGhvbi5leGUtZ2RiLnB5CmRpZmYgLS1naXQgYS8uaGdpZ25vcmUgYi8uaGdpZ25vcmUKaW5kZXggYzQyZGQwMy4uZTI3OTcxYiAxMDA2NDQKLS0tIGEvLmhnaWdub3JlCisrKyBiLy5oZ2lnbm9yZQpAQCAtMTksNiArMTksOCBAQAogcHljb25maWcuaCQKIHB5dGhvbiQKIHB5dGhvbi5leGUkCitweXRob24tY29uZmlnJAorcHl0aG9uLWNvbmZpZy5weSQKIHJlZmxvZy50eHQkCiB0YWdzJAogTGliL3BsYXQtbWFjL2Vycm9ycy5yc3JjLmRmLnJzcmMKQEAgLTI4LDEyICszMCwxNCBAQAogRG9jL3Rvb2xzL2ppbmphMi8KIERvYy90b29scy9weWdtZW50cy8KIE1pc2MvcHl0aG9uLnBjCitNaXNjL3B5dGhvbi1jb25maWcuc2gkCiBNb2R1bGVzL1NldHVwJAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKIE1vZHVsZXMvY29uZmlnLmMKIE1vZHVsZXMvbGRfc29fYWl4JAogUGFyc2VyL3BnZW4kCitebGNvdi1yZXBvcnQvCiBeY29yZQogXnB5dGhvbi1nZGIucHkKIF5weXRob24uZXhlLWdkYi5weQpAQCAtODksMyArOTMsNyBAQAogLmNvdmVyYWdlCiBjb3ZlcmFnZS8KIGh0bWxjb3YvCisqLmdjZGEKKyouZ2NubworKi5nY292Citjb3ZlcmFnZS5pbmZvCmRpZmYgLS1naXQgYS8uaGd0YWdzIGIvLmhndGFncwppbmRleCA3OGIzMGRkLi5hMDJjNzc0IDEwMDY0NAotLS0gYS8uaGd0YWdzCisrKyBiLy5oZ3RhZ3MKQEAgLTExNiwzICsxMTYsNyBAQAogZDk4OTNkMTNjNjI4OWFhMDNkMzM1NTllYzY3Zjk3ZGNiZjVjOWUzYyB2My4zLjEKIGQwNDc5MjhhZTNmNjMxNGExM2I2MTM3MDUxMzE1NDUzZDBhZTg5YjYgdjMuMy4yCiBmZDUzYzUwMGY4YjgwZjU0ZjNlY2VkZWM5ZGEyZThjN2U1MmE2ODg4IHYzLjMuM3JjMQorNDY1MzVmNjVlN2YzYmNkY2YxNzZmMzZkMzRiYzFmZWQ3MTlmZmQyYiB2My40LjBhMQorOTI2NWEyMTY4ZTJjYjJhODQ3ODVkODcxNzc5MmFjYzY2MWU2YjY5MiB2My40LjBhMgorZGQ5Y2RmOTBhNTA3MzUxMDg3N2U5ZGQ1MTEyZjhlNmNmMjBkNWU4OSB2My40LjBhMworZTI0NWIwZDcyMDliYjZkMGUxOTMxNmUxZTJhZjFhYTljMjEzOTEwNCB2My40LjBhNApkaWZmIC0tZ2l0IGEvLmhndG91Y2ggYi8uaGd0b3VjaAppbmRleCAwYWY4YzE5Li43ZTNhNWU3IDEwMDY0NAotLS0gYS8uaGd0b3VjaAorKysgYi8uaGd0b3VjaApAQCAtNCw4ICs0LDggQEAKIAogUHl0aG9uL2ltcG9ydGxpYi5oOiBMaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCiAKLUluY2x1ZGUvYXN0Lmg6IFBhcnNlci9QeXRob24uYXNkbCBQYXJzZXIvYXNkbC5weSBQYXJzZXIvYXNkbF9jLnB5Ci1QeXRob24vUHl0aG9uLWFzdC5jOiBJbmNsdWRlL2FzdC5oCitJbmNsdWRlL1B5dGhvbi1hc3QuaDogUGFyc2VyL1B5dGhvbi5hc2RsIFBhcnNlci9hc2RsLnB5IFBhcnNlci9hc2RsX2MucHkKK1B5dGhvbi9QeXRob24tYXN0LmM6IEluY2x1ZGUvUHl0aG9uLWFzdC5oCiAKIFB5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oOiBQeXRob24vbWFrZW9wY29kZXRhcmdldHMucHkgTGliL29wY29kZS5weQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZGljdC5yc3QgYi9Eb2MvYy1hcGkvZGljdC5yc3QKaW5kZXggNmJhY2MzMi4uNWE5ZGNhMiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2RpY3QucnN0CisrKyBiL0RvYy9jLWFwaS9kaWN0LnJzdApAQCAtODQsNyArODQsNyBAQAogICAgb24gZmFpbHVyZS4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJlbW92ZSB0aGUgZW50cnkgaW4gZGljdGlvbmFyeSAqcCogd2hpY2ggaGFzIGEga2V5IHNwZWNpZmllZCBieSB0aGUgc3RyaW5nCiAgICAqa2V5Ki4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzIG9yIGBgLTFgYCBvbiBmYWlsdXJlLgpAQCAtMTEwLDYgKzExMCwxNSBAQAogICAgOmM6dHlwZTpgY2hhclwqYCwgcmF0aGVyIHRoYW4gYSA6Yzp0eXBlOmBQeU9iamVjdFwqYC4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9TZXREZWZhdWx0KFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdCkKKworICAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgUHl0aG9uLWxldmVsIDptZXRoOmBkaWN0LnNldGRlZmF1bHRgLiAgSWYgcHJlc2VudCwgaXQKKyAgIHJldHVybnMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gKmtleSogZnJvbSB0aGUgZGljdGlvbmFyeSAqcCouICBJZiB0aGUga2V5CisgICBpcyBub3QgaW4gdGhlIGRpY3QsIGl0IGlzIGluc2VydGVkIHdpdGggdmFsdWUgKmRlZmF1bHRvYmoqIGFuZCAqZGVmYXVsdG9iaioKKyAgIGlzIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgdGhlIGhhc2ggZnVuY3Rpb24gb2YgKmtleSogb25seSBvbmNlLAorICAgaW5zdGVhZCBvZiBldmFsdWF0aW5nIGl0IGluZGVwZW5kZW50bHkgZm9yIHRoZSBsb29rdXAgYW5kIHRoZSBpbnNlcnRpb24uCisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfSXRlbXMoUHlPYmplY3QgKnApCiAKICAgIFJldHVybiBhIDpjOnR5cGU6YFB5TGlzdE9iamVjdGAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKaW5kZXggYzNkOTc4Zi4uODY1OGE1OCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdApAQCAtMjM1LDcgKzIzNSw3IEBACiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0YCwgYnV0IHRoZSBmaWxlbmFtZQogICAgaXMgZ2l2ZW4gYXMgYSBDIHN0cmluZy4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCi0gICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKyAgICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCBpZXJyKQpAQCAtMjY3LDcgKzI2Nyw3IEBACiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RgLCBidXQgdGhlCiAgICBmaWxlbmFtZSBpcyBnaXZlbiBhcyBhIEMgc3RyaW5nLiAgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorICAgZW5jb2RpbmcgKDpmdW5jOmBvcy5mc2RlY29kZWApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyLCBQeU9iamVjdCAqZmlsZW5hbWUpCkBAIC0yOTMsMjAgKzI5MywyNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb25FeChjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCiAgICBTZXQgZmlsZSwgbGluZSwgYW5kIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiAgSWYgdGhlCiAgICBjdXJyZW50IGV4Y2VwdGlvbiBpcyBub3QgYSA6ZXhjOmBTeW50YXhFcnJvcmAsIHRoZW4gaXQgc2V0cyBhZGRpdGlvbmFsCiAgICBhdHRyaWJ1dGVzLCB3aGljaCBtYWtlIHRoZSBleGNlcHRpb24gcHJpbnRpbmcgc3Vic3lzdGVtIHRoaW5rIHRoZSBleGNlcHRpb24KLSAgIGlzIGEgOmV4YzpgU3ludGF4RXJyb3JgLiAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBpcyBhIDpleGM6YFN5bnRheEVycm9yYC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKKworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdGAsIGJ1dCAqZmlsZW5hbWUqIGlzIGEgYnl0ZSBzdHJpbmcKKyAgIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1N5bnRheExvY2F0aW9uKGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQogCi0gICBMaWtlIDpjOmZ1bmM6YFB5RXJyX1N5bnRheExvY2F0aW9uRXhjYCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbkV4YCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcwogICAgb21pdHRlZC4KIAogCkBAIC0zNTUsMTUgKzM2MiwyMiBAQAogICAgZG9jdW1lbnRhdGlvbi4gIFRoZXJlIGlzIG5vIEMgQVBJIGZvciB3YXJuaW5nIGNvbnRyb2wuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCBleHBsaWNpdCBjb250cm9sIG92ZXIgYWxsIHdhcm5pbmcgYXR0cmlidXRlcy4gIFRoaXMKICAgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgYXJvdW5kIHRoZSBQeXRob24gZnVuY3Rpb24KICAgIDpmdW5jOmB3YXJuaW5ncy53YXJuX2V4cGxpY2l0YCwgc2VlIHRoZXJlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhlICptb2R1bGUqCiAgICBhbmQgKnJlZ2lzdHJ5KiBhcmd1bWVudHMgbWF5IGJlIHNldCB0byAqTlVMTCogdG8gZ2V0IHRoZSBkZWZhdWx0IGVmZmVjdAotICAgZGVzY3JpYmVkIHRoZXJlLiAqbWVzc2FnZSogYW5kICptb2R1bGUqIGFyZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MsCi0gICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBkZXNjcmliZWQgdGhlcmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdGAgZXhjZXB0IHRoYXQgKm1lc3NhZ2UqIGFuZAorICAgKm1vZHVsZSogYXJlIFVURi04IGVuY29kZWQgc3RyaW5ncywgYW5kICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZQorICAgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlfc3NpemVfdCBzdGFja19sZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmlsZS5yc3QgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKaW5kZXggY2MxOTBjOS4uNmYyZWNlZSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ZpbGUucnN0CisrKyBiL0RvYy9jLWFwaS9maWxlLnJzdApAQCAtMTcsNyArMTcsNyBAQAogdGhlIDptb2Q6YGlvYCBBUElzIGluc3RlYWQuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5RmlsZV9Gcm9tRmQoaW50IGZkLCBjaGFyICpuYW1lLCBjaGFyICptb2RlLCBpbnQgYnVmZmVyaW5nLCBjaGFyICplbmNvZGluZywgY2hhciAqZXJyb3JzLCBjaGFyICpuZXdsaW5lLCBpbnQgY2xvc2VmZCkKKy4uIGM6ZnVuY3Rpb246OiBQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiAKICAgIENyZWF0ZSBhIFB5dGhvbiBmaWxlIG9iamVjdCBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gYWxyZWFkeQogICAgb3BlbmVkIGZpbGUgKmZkKi4gIFRoZSBhcmd1bWVudHMgKm5hbWUqLCAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdCBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CmluZGV4IDI3MDE1MmUuLjZjZDJiOGIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbXBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgIGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGNvbXBpbGUKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXNgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUpCiAKICAgIExpa2UgOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVgLCBidXQgdGhlIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mCiAgICB0aGUgbW9kdWxlIG9iamVjdCBpcyBzZXQgdG8gKnBhdGhuYW1lKiBpZiBpdCBpcyBub24tYGBOVUxMYGAuCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUsIGNoYXIgKmNwYXRobmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIAogICAgTGlrZSA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdGAsIGJ1dCAqbmFtZSosICpwYXRobmFtZSogYW5kCiAgICAqY3BhdGhuYW1lKiBhcmUgVVRGLTggZW5jb2RlZCBzdHJpbmdzLiBBdHRlbXB0cyBhcmUgYWxzbyBtYWRlIHRvIGZpZ3VyZSBvdXQKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY2hhciAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0YCwgYnV0IHRoZSBuYW1lIGlzIGEKICAgIFVURi04IGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbml0LnJzdCBiL0RvYy9jLWFwaS9pbml0LnJzdAppbmRleCA3MDU1MDlmLi42NDM5ZDdmIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW5pdC5yc3QKKysrIGIvRG9jL2MtYXBpL2luaXQucnN0CkBAIC04Niw2ICs4NiwzNiBAQAogPT09PT09PT09PT09PT09PT09PT09PT0KIAogCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoY2hhciAqZW5jb2RpbmcsIGNoYXIgKmVycm9ycykKKworICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBQeV9Jbml0aWFsaXplKCkKKyAgICAgIHNpbmdsZTogbWFpbigpCisgICAgICB0cmlwbGU6IHN0ZGluOyBzdGRvdXQ7IHNkdGVycgorCisgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLCBpZiBpdCBpcworICAgY2FsbGVkIGF0IGFsbC4gSXQgc3BlY2lmaWVzIHdoaWNoIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGluZyB0byB1c2UKKyAgIHdpdGggc3RhbmRhcmQgSU8sIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMgaW4gOmZ1bmM6YHN0ci5lbmNvZGVgLgorCisgICBJdCBvdmVycmlkZXMgOmVudnZhcjpgUFlUSE9OSU9FTkNPRElOR2AgdmFsdWVzLCBhbmQgYWxsb3dzIGVtYmVkZGluZyBjb2RlCisgICB0byBjb250cm9sIElPIGVuY29kaW5nIHdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGRvZXMgbm90IHdvcmsuCisKKyAgIGBgZW5jb2RpbmdgYCBhbmQvb3IgYGBlcnJvcnNgYCBtYXkgYmUgTlVMTCB0byB1c2UKKyAgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGFuZC9vciBkZWZhdWx0IHZhbHVlcyAoZGVwZW5kaW5nIG9uIG90aGVyCisgICBzZXR0aW5ncykuCisKKyAgIE5vdGUgdGhhdCA6ZGF0YTpgc3lzLnN0ZGVycmAgYWx3YXlzIHVzZXMgdGhlICJiYWNrc2xhc2hyZXBsYWNlIiBlcnJvcgorICAgaGFuZGxlciwgcmVnYXJkbGVzcyBvZiB0aGlzIChvciBhbnkgb3RoZXIpIHNldHRpbmcuCisKKyAgIElmIDpjOmZ1bmM6YFB5X0ZpbmFsaXplYCBpcyBjYWxsZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGNhbGxlZAorICAgYWdhaW4gaW4gb3JkZXIgdG8gYWZmZWN0IHN1YnNlcXVlbnQgY2FsbHMgdG8gOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCisKKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBhIG5vbnplcm8gdmFsdWUgb24gZXJyb3IgKGUuZy4gY2FsbGluZyBhZnRlciB0aGUKKyAgIGludGVycHJldGVyIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9TZXRQcm9ncmFtTmFtZSh3Y2hhcl90ICpuYW1lKQogCiAgICAuLiBpbmRleDo6CkBAIC0zMjksNyArMzU5LDExIEBACiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1NldEFyZ3YoaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQogCi0gICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gMS4KKyAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSA6YzpmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHdpdGggKnVwZGF0ZXBhdGgqIHNldAorICAgdG8gMSB1bmxlc3MgdGhlIDpwcm9ncmFtOmBweXRob25gIGludGVycHJldGVyIHdhcyBzdGFydGVkIHdpdGggdGhlCisgICA6b3B0aW9uOmAtSWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IFRoZSAqdXBkYXRlcGF0aCogdmFsdWUgZGVwZW5kcyBvbiA6b3B0aW9uOmAtSWAuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtNjU3LDYgKzY5MSwyMCBAQAogICAgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIG1haW5seSBhIGhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHSUxTdGF0ZV9DaGVjaygpCisKKyAgIFJldHVybiAxIGlmIHRoZSBjdXJyZW50IHRocmVhZCBpcyBob2xkaW5nIHRoZSBHSUwgYW5kIDAgb3RoZXJ3aXNlLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZCBhdCBhbnkgdGltZS4KKyAgIE9ubHkgaWYgaXQgaGFzIGhhZCBpdHMgUHl0aG9uIHRocmVhZCBzdGF0ZSBpbml0aWFsaXplZCBhbmQgY3VycmVudGx5IGlzCisgICBob2xkaW5nIHRoZSBHSUwgd2lsbCBpdCByZXR1cm4gMS4KKyAgIFRoaXMgaXMgbWFpbmx5IGEgaGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24uICBJdCBjYW4gYmUgdXNlZnVsCisgICBmb3IgZXhhbXBsZSBpbiBjYWxsYmFjayBjb250ZXh0cyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd2hlbgorICAga25vd2luZyB0aGF0IHRoZSBHSUwgaXMgbG9ja2VkIGNhbiBhbGxvdyB0aGUgY2FsbGVyIHRvIHBlcmZvcm0gc2Vuc2l0aXZlCisgICBhY3Rpb25zIG9yIG90aGVyd2lzZSBiZWhhdmUgZGlmZmVyZW50bHkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBub3JtYWxseSB1c2VkIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb247IGxvb2sgZm9yCiBleGFtcGxlIHVzYWdlIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2xvbmcucnN0IGIvRG9jL2MtYXBpL2xvbmcucnN0CmluZGV4IGQ1NDMwZmQuLmIzNDgwMTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9sb25nLnJzdAorKysgYi9Eb2MvYy1hcGkvbG9uZy5yc3QKQEAgLTgwLDcgKzgwLDcgQEAKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogCiAgICBSZXR1cm4gYSBuZXcgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBiYXNlZCBvbiB0aGUgc3RyaW5nIHZhbHVlIGluICpzdHIqLCB3aGljaAogICAgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSByYWRpeCBpbiAqYmFzZSouICBJZiAqcGVuZCogaXMgbm9uLSpOVUxMKiwKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tYXBwaW5nLnJzdCBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdAppbmRleCAwZWYyOTYxLi4yODAzZmQwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKKysrIGIvRG9jL2MtYXBpL21hcHBpbmcucnN0CkBAIC0yMiw3ICsyMiw3IEBACiAgICBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogCiAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCAqa2V5KiBmcm9tIHRoZSBvYmplY3QgKm8qLiBSZXR1cm4gYGAtMWBgIG9uCiAgICBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG9ba2V5XWBgLgpAQCAtNjcsMTMgKzY3LDEzIEBACiAgICB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8uaXRlbXMoKSlgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9ba2V5XWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2KQogCiAgICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqIGluIG9iamVjdCAqbyouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgb1trZXldID0gdmBgLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21lbW9yeS5yc3QgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdAppbmRleCA4YWZhNTZhLi5hODJlMWMyIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWVtb3J5LnJzdAorKysgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdApAQCAtODQsNiArODQsNDggQEAKIGZvciB0aGUgSS9PIGJ1ZmZlciBlc2NhcGVzIGNvbXBsZXRlbHkgdGhlIFB5dGhvbiBtZW1vcnkgbWFuYWdlci4KIAogCitSYXcgTWVtb3J5IEludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzZXRzIGFyZSB3cmFwcGVycyB0byB0aGUgc3lzdGVtIGFsbG9jYXRvci4gVGhlc2UKK2Z1bmN0aW9ucyBhcmUgdGhyZWFkLXNhZmUsIHRoZSA6dGVybTpgR0lMIDxnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaz5gIGRvZXMgbm90CituZWVkIHRvIGJlIGhlbGQuCisKK1RoZSBkZWZhdWx0IHJhdyBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fUmF3TWFsbG9jKHNpemVfdCBuKQorCisgICBBbGxvY2F0ZXMgKm4qIGJ5dGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvZiB0eXBlIDpjOnR5cGU6YHZvaWRcKmAgdG8gdGhlCisgICBhbGxvY2F0ZWQgbWVtb3J5LCBvciAqTlVMTCogaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFJlcXVlc3RpbmcgemVybyBieXRlcworICAgcmV0dXJucyBhIGRpc3RpbmN0IG5vbi0qTlVMTCogcG9pbnRlciBpZiBwb3NzaWJsZSwgYXMgaWYKKyAgIGBgUHlNZW1fUmF3TWFsbG9jKDEpYGAgaGFkIGJlZW4gY2FsbGVkIGluc3RlYWQuIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQorICAgYmVlbiBpbml0aWFsaXplZCBpbiBhbnkgd2F5LgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9SYXdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuKQorCisgICBSZXNpemVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCogdG8gKm4qIGJ5dGVzLiBUaGUgY29udGVudHMgd2lsbAorICAgYmUgdW5jaGFuZ2VkIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBvbGQgYW5kIHRoZSBuZXcgc2l6ZXMuIElmICpwKiBpcyAqTlVMTCosCisgICB0aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvIGBgUHlNZW1fUmF3TWFsbG9jKG4pYGA7IGVsc2UgaWYgKm4qIGlzIGVxdWFsIHRvCisgICB6ZXJvLCB0aGUgbWVtb3J5IGJsb2NrIGlzIHJlc2l6ZWQgYnV0IGlzIG5vdCBmcmVlZCwgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyCisgICBpcyBub24tKk5VTEwqLiBVbmxlc3MgKnAqIGlzICpOVUxMKiwgaXQgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYQorICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLiBJZgorICAgdGhlIHJlcXVlc3QgZmFpbHMsIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgIHJldHVybnMgKk5VTEwqIGFuZCAqcCogcmVtYWlucworICAgYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBtZW1vcnkgYXJlYS4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnApCisKKyAgIEZyZWVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCosIHdoaWNoIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEKKyAgIHByZXZpb3VzIGNhbGwgdG8gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYC4KKyAgIE90aGVyd2lzZSwgb3IgaWYgYGBQeU1lbV9GcmVlKHApYGAgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdW5kZWZpbmVkCisgICBiZWhhdmlvciBvY2N1cnMuIElmICpwKiBpcyAqTlVMTCosIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCisKKwogLi4gX21lbW9yeWludGVyZmFjZToKIAogTWVtb3J5IEludGVyZmFjZQpAQCAtOTEsOCArMTMzLDE2IEBACiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2V0cywgbW9kZWxlZCBhZnRlciB0aGUgQU5TSSBDIHN0YW5kYXJkLCBidXQgc3BlY2lmeWluZwogYmVoYXZpb3Igd2hlbiByZXF1ZXN0aW5nIHplcm8gYnl0ZXMsIGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpbmcgYW5kIHJlbGVhc2luZwotbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwOgorbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwLgogCitUaGUgZGVmYXVsdCBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHdhcm5pbmc6OgorCisgICBUaGUgOnRlcm06YEdJTCA8Z2xvYmFsIGludGVycHJldGVyIGxvY2s+YCBtdXN0IGJlIGhlbGQgd2hlbiB1c2luZyB0aGVzZQorICAgZnVuY3Rpb25zLgogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fTWFsbG9jKHNpemVfdCBuKQogCkBAIC0xNTUsNiArMjA1LDEyNSBAQAogOmM6ZnVuYzpgUHlNZW1fTkVXYCwgOmM6ZnVuYzpgUHlNZW1fUkVTSVpFYCwgOmM6ZnVuYzpgUHlNZW1fREVMYC4KIAogCitDdXN0b21pemUgTWVtb3J5IEFsbG9jYXRvcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3IKKworICAgU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yLiBUaGUgc3RydWN0dXJlIGhhcworICAgZm91ciBmaWVsZHM6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgYGB2b2lkICpjdHhgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiBtYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICAgICAgICAgfCBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiByZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpYGAgfCBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpYGAgICAgICAgICAgICAgICAgICAgICAgfCBmcmVlIGEgbWVtb3J5IGJsb2NrICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3JEb21haW4KKworICAgRW51bSB1c2VkIHRvIGlkZW50aWZ5IGFuIGFsbG9jYXRvciBkb21haW4uIERvbWFpbnM6CisKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX1JBV2A6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX01FTWA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX09CSmA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLgorCisgICBUaGUgbmV3IGFsbG9jYXRvciBtdXN0IHJldHVybiBhIGRpc3RpbmN0IG5vbi1OVUxMIHBvaW50ZXIgd2hlbiByZXF1ZXN0aW5nCisgICB6ZXJvIGJ5dGVzLgorCisgICBGb3IgdGhlIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9SQVdgIGRvbWFpbiwgdGhlIGFsbG9jYXRvciBtdXN0IGJlCisgICB0aHJlYWQtc2FmZTogdGhlIDp0ZXJtOmBHSUwgPGdsb2JhbCBpbnRlcnByZXRlciBsb2NrPmAgaXMgbm90IGhlbGQgd2hlbiB0aGUKKyAgIGFsbG9jYXRvciBpcyBjYWxsZWQuCisKKyAgIElmIHRoZSBuZXcgYWxsb2NhdG9yIGlzIG5vdCBhIGhvb2sgKGRvZXMgbm90IGNhbGwgdGhlIHByZXZpb3VzIGFsbG9jYXRvciksCisgICB0aGUgOmM6ZnVuYzpgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzYCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlCisgICBkZWJ1ZyBob29rcyBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCisKKyAgIFNldHVwIGhvb2tzIHRvIGRldGVjdCBidWdzIGluIHRoZSBmb2xsb3dpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0b3IKKyAgIGZ1bmN0aW9uczoKKworICAgLSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgIC0gOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgCisgICAtIDpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AsIDpjOmZ1bmM6YFB5T2JqZWN0X1JlYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9GcmVlYAorCisgICBOZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhDQmBgLCBmcmVlZCBtZW1vcnkgaXMKKyAgIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhEQmBgLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAgY2FsbGVkIG9uIGEgYnVmZmVyCisgICAgIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgCisgICAtIGRldGVjdCB3cml0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGJ1ZmZlciB1bmRlcmZsb3cpCisgICAtIGRldGVjdCB3cml0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGJ1ZmZlciBvdmVyZmxvdykKKworICAgVGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBQeXRob24gaXMgbm90IGNvbXBpbGVkIGlzIGRlYnVnIG1vZGUuCisKKworQ3VzdG9taXplIFB5T2JqZWN0IEFyZW5hIEFsbG9jYXRvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gaGFzIGEgKnB5bWFsbG9jKiBhbGxvY2F0b3IgZm9yIGFsbG9jYXRpb25zIHNtYWxsZXIgdGhhbiA1MTIgYnl0ZXMuIFRoaXMKK2FsbG9jYXRvciBpcyBvcHRpbWl6ZWQgZm9yIHNtYWxsIG9iamVjdHMgd2l0aCBhIHNob3J0IGxpZmV0aW1lLiBJdCB1c2VzIG1lbW9yeQorbWFwcGluZ3MgY2FsbGVkICJhcmVuYXMiIHdpdGggYSBmaXhlZCBzaXplIG9mIDI1NiBLQi4gSXQgZmFsbHMgYmFjayB0bworOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AgZm9yIGFsbG9jYXRpb25zIGxhcmdlcgordGhhbiA1MTIgYnl0ZXMuICAqcHltYWxsb2MqIGlzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB1c2VkIGJ5Cis6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLgorCitUaGUgZGVmYXVsdCBhcmVuYSBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworKiA6YzpmdW5jOmBWaXJ0dWFsQWxsb2NgIGFuZCA6YzpmdW5jOmBWaXJ0dWFsRnJlZWAgb24gV2luZG93cywKKyogOmM6ZnVuYzpgbW1hcGAgYW5kIDpjOmZ1bmM6YG11bm1hcGAgaWYgYXZhaWxhYmxlLAorKiA6YzpmdW5jOmBtYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOnR5cGU6OiBQeU9iamVjdEFyZW5hQWxsb2NhdG9yCisKKyAgIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGFuIGFyZW5hIGFsbG9jYXRvci4gVGhlIHN0cnVjdHVyZSBoYXMKKyAgIHRocmVlIGZpZWxkczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYHZvaWQgKmN0eGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCogYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICB8IGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSwgdm9pZCAqcHRyKWBgIHwgZnJlZSBhbiBhcmVuYSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4KKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuCisKKwogLi4gX21lbW9yeWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21vZHVsZS5yc3QgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdAppbmRleCBlODBlMGVhLi4yNmM0Mzg0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdApAQCAtMzUsMTMgKzM1LDIwIEBACiAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2RvY19fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2ZpbGVfXyAobW9kdWxlIGF0dHJpYnV0ZSkKKyAgICAgIHNpbmdsZTogX19wYWNrYWdlX18gKG1vZHVsZSBhdHRyaWJ1dGUpCisgICAgICBzaW5nbGU6IF9fbG9hZGVyX18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKICAgIFJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqbmFtZSouCi0gICBPbmx5IHRoZSBtb2R1bGUncyA6YXR0cjpgX19kb2NfX2AgYW5kIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlcyBhcmUgZmlsbGVkIGluOwotICAgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGEgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUuCisgICBUaGUgbW9kdWxlJ3MgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fZG9jX19gLCA6YXR0cjpgX19wYWNrYWdlX19gLCBhbmQKKyAgIDphdHRyOmBfX2xvYWRlcl9fYCBhdHRyaWJ1dGVzIGFyZSBmaWxsZWQgaW4gKGFsbCBidXQgOmF0dHI6YF9fbmFtZV9fYCBhcmUgc2V0CisgICB0byBgYE5vbmVgYCk7IHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBhIDphdHRyOmBfX2ZpbGVfX2AKKyAgIGF0dHJpYnV0ZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6YXR0cjpgX19wYWNrYWdlX19gIGFuZCA6YXR0cjpgX19sb2FkZXJfX2AgYXJlIHNldCB0byBgYE5vbmVgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX05ldyhjb25zdCBjaGFyICpuYW1lKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvb2JqZWN0LnJzdCBiL0RvYy9jLWFwaS9vYmplY3QucnN0CmluZGV4IDBhYmEzNjAuLmJlNmQ3OTggMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9vYmplY3QucnN0CisrKyBiL0RvYy9jLWFwaS9vYmplY3QucnN0CkBAIC0yNDAsNyArMjQwLDcgQEAKICAgIG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGNhbGxhYmxlX29iamVjdCgqYXJncylgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNoYXIgKmZvcm1hdCwgLi4uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIAogICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QgKmNhbGxhYmxlKiwgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBDIGFyZ3VtZW50cy4KICAgIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIHVzaW5nIGEgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgc3R5bGUgZm9ybWF0CkBAIC0yNTAsOCArMjUwLDExIEBACiAgICBwYXNzIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLCA6YzpmdW5jOmBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzYCBpcyBhCiAgICBmYXN0ZXIgYWx0ZXJuYXRpdmUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgdHlwZSBvZiAqZm9ybWF0KiB3YXMgY2hhbmdlZCBmcm9tIGBgY2hhciAqYGAuCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbWV0aG9kLCBjaGFyICpmb3JtYXQsIC4uLikKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBDYWxsIHRoZSBtZXRob2QgbmFtZWQgKm1ldGhvZCogb2Ygb2JqZWN0ICpvKiB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIEMKICAgIGFyZ3VtZW50cy4gIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIGJ5IGEgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgZm9ybWF0CkBAIC0yNjEsNiArMjY0LDkgQEAKICAgIE5vdGUgdGhhdCBpZiB5b3Ugb25seSBwYXNzIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLAogICAgOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3NgIGlzIGEgZmFzdGVyIGFsdGVybmF0aXZlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHR5cGVzIG9mICptZXRob2QqIGFuZCAqZm9ybWF0KiB3ZXJlIGNoYW5nZWQgZnJvbSBgYGNoYXIgKmBgLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsIC4uLiwgTlVMTCkKIApAQCAtMzQyLDYgKzM0OCwxNSBAQAogICAgcmV0dXJuZWQuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGxlbihvKWBgLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgZGVmYXVsdCkKKworICAgUmV0dXJuIGFuIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKm8qLiBGaXJzdCB0cnlpbmcgdG8gcmV0dXJuIGl0cworICAgYWN0dWFsIGxlbmd0aCwgdGhlbiBhbiBlc3RpbWF0ZSB1c2luZyBgYF9fbGVuZ3RoX2hpbnRfX2BgLCBhbmQgZmluYWxseQorICAgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IHZhbHVlLiBPbiBlcnJvciBgYC0xYGAgaXMgcmV0dXJuZWQuIFRoaXMgaXMgdGhlCisgICBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KG8sIGRlZmF1bHQpYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0dldEl0ZW0oUHlPYmplY3QgKm8sIFB5T2JqZWN0ICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdHlwZW9iai5yc3QgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKaW5kZXggYjJiODAzOC4uNDhiMTNlNSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0CisrKyBiL0RvYy9jLWFwaS90eXBlb2JqLnJzdApAQCAtNDY1LDYgKzQ2NSwxNCBAQAogICAgICAgOmNvbnN0OmBQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUdgLgogCiAKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUKKworICAgICAgVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgc2xvdCBpcyBwcmVzZW50IGluIHRoZQorICAgICAgdHlwZSBzdHJ1Y3R1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGM6bWVtYmVyOjogY2hhciogUHlUeXBlT2JqZWN0LnRwX2RvYwogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgTlVMLXRlcm1pbmF0ZWQgQyBzdHJpbmcgZ2l2aW5nIHRoZSBkb2NzdHJpbmcgZm9yIHRoaXMKQEAgLTk2OCw2ICs5NzYsNDcgQEAKICAgIFRoaXMgZmllbGQgaXMgbm90IGluaGVyaXRlZDsgaXQgaXMgY2FsY3VsYXRlZCBmcmVzaCBieSA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgLgogCiAKKy4uIGM6bWVtYmVyOjogZGVzdHJ1Y3RvciBQeVR5cGVPYmplY3QudHBfZmluYWxpemUKKworICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhbiBpbnN0YW5jZSBmaW5hbGl6YXRpb24gZnVuY3Rpb24uICBJdHMgc2lnbmF0dXJlIGlzCisgICA6Yzp0eXBlOmBkZXN0cnVjdG9yYDo6CisKKyAgICAgIHZvaWQgdHBfZmluYWxpemUoUHlPYmplY3QgKikKKworICAgSWYgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBpcyBzZXQsIHRoZSBpbnRlcnByZXRlciBjYWxscyBpdCBvbmNlIHdoZW4KKyAgIGZpbmFsaXppbmcgYW4gaW5zdGFuY2UuICBJdCBpcyBjYWxsZWQgZWl0aGVyIGZyb20gdGhlIGdhcmJhZ2UKKyAgIGNvbGxlY3RvciAoaWYgdGhlIGluc3RhbmNlIGlzIHBhcnQgb2YgYW4gaXNvbGF0ZWQgcmVmZXJlbmNlIGN5Y2xlKSBvcgorICAganVzdCBiZWZvcmUgdGhlIG9iamVjdCBpcyBkZWFsbG9jYXRlZC4gIEVpdGhlciB3YXksIGl0IGlzIGd1YXJhbnRlZWQKKyAgIHRvIGJlIGNhbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLCBlbnN1cmluZworICAgdGhhdCBpdCBmaW5kcyB0aGUgb2JqZWN0IGluIGEgc2FuZSBzdGF0ZS4KKworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBzaG91bGQgbm90IG11dGF0ZSB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhdHVzOworICAgdGhlcmVmb3JlLCBhIHJlY29tbWVuZGVkIHdheSB0byB3cml0ZSBhIG5vbi10cml2aWFsIGZpbmFsaXplciBpczo6CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBsb2NhbF9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKKyAgICAgIHsKKyAgICAgICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgICAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICAgICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgICAgICAgIC8qIC4uLiAqLworCisgICAgICAgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisgICAgICB9CisKKyAgIEZvciB0aGlzIGZpZWxkIHRvIGJlIHRha2VuIGludG8gYWNjb3VudCAoZXZlbiB0aHJvdWdoIGluaGVyaXRhbmNlKSwKKyAgIHlvdSBtdXN0IGFsc28gc2V0IHRoZSA6Y29uc3Q6YFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRWAgZmxhZ3MgYml0LgorCisgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIHNlZWFsc286OiAiU2FmZSBvYmplY3QgZmluYWxpemF0aW9uIiAoOnBlcDpgNDQyYCkKKworCiAuLiBjOm1lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfY2FjaGUKIAogICAgVW51c2VkLiAgTm90IGluaGVyaXRlZC4gIEludGVybmFsIHVzZSBvbmx5LgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3VuaWNvZGUucnN0IGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CmluZGV4IDM2NDljZmIuLmM3ZWQ1ZTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS91bmljb2RlLnJzdAorKysgYi9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKQEAgLTUyNiwxMiArNTI2LDIzIEBACiAgICAgICBUaGUgYCIlbGxkImAgYW5kIGAiJWxsdSJgIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBvbmx5IGF2YWlsYWJsZQogICAgICAgd2hlbiA6Y29uc3Q6YEhBVkVfTE9OR19MT05HYCBpcyBkZWZpbmVkLgogCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSB3aWR0aCBmb3JtYXR0ZXIgdW5pdCBpcyBudW1iZXIgb2YgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBieXRlcy4KKyAgICAgIFRoZSBwcmVjaXNpb24gZm9ybWF0dGVyIHVuaXQgaXMgbnVtYmVyIG9mIGJ5dGVzIGZvciBgYCIlcyJgYCBhbmQKKyAgICAgIGBgIiVWImBgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBOVUxMKSwgYW5kIGEgbnVtYmVyIG9mCisgICAgICBjaGFyYWN0ZXJzIGZvciBgYCIlQSJgYCwgYGAiJVUiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhbmQgYGAiJVYiYGAKKyAgICAgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBub3QgTlVMTCkuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBTdXBwb3J0IGZvciBgYCIlbGxkImBgIGFuZCBgYCIlbGx1ImBgIGFkZGVkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgU3VwcG9ydCBmb3IgYGAiJWxpImBgLCBgYCIlbGxpImBgIGFuZCBgYCIlemkiYGAgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTdXBwb3J0IHdpZHRoIGFuZCBwcmVjaXNpb24gZm9ybWF0dGVyIGZvciBgYCIlcyJgYCwgYGAiJUEiYGAsIGBgIiVVImBgLAorICAgICAgYGAiJVYiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhZGRlZC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CmluZGV4IDE0ZWY4ZGYuLjlmMjFiODkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKKysrIGIvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdApAQCAtMTQ0LDYgKzE0NCwzNyBAQAogICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuICBSZXR1cm5zIGBgMGBgIGF0IEVPRi4KIAogCisuLiBjOnZhcjo6IGludCAoKlB5T1NfSW5wdXRIb29rKSh2b2lkKQorCisgICBDYW4gYmUgc2V0IHRvIHBvaW50IHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdG90eXBlCisgICBgYGludCBmdW5jKHZvaWQpYGAuICBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBQeXRob24ncworICAgaW50ZXJwcmV0ZXIgcHJvbXB0IGlzIGFib3V0IHRvIGJlY29tZSBpZGxlIGFuZCB3YWl0IGZvciB1c2VyIGlucHV0CisgICBmcm9tIHRoZSB0ZXJtaW5hbC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4gIE92ZXJyaWRpbmcgdGhpcworICAgaG9vayBjYW4gYmUgdXNlZCB0byBpbnRlZ3JhdGUgdGhlIGludGVycHJldGVyJ3MgcHJvbXB0IHdpdGggb3RoZXIKKyAgIGV2ZW50IGxvb3BzLCBhcyBkb25lIGluIHRoZSA6ZmlsZTpgTW9kdWxlcy9fdGtpbnRlci5jYCBpbiB0aGUKKyAgIFB5dGhvbiBzb3VyY2UgY29kZS4KKworCisuLiBjOnZhcjo6IGNoYXIqICgqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKikKKworICAgQ2FuIGJlIHNldCB0byBwb2ludCB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIHByb3RvdHlwZQorICAgYGBjaGFyICpmdW5jKEZJTEUgKnN0ZGluLCBGSUxFICpzdGRvdXQsIGNoYXIgKnByb21wdClgYCwKKyAgIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgZnVuY3Rpb24gdXNlZCB0byByZWFkIGEgc2luZ2xlIGxpbmUgb2YgaW5wdXQKKyAgIGF0IHRoZSBpbnRlcnByZXRlcidzIHByb21wdC4gIFRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBvdXRwdXQKKyAgIHRoZSBzdHJpbmcgKnByb21wdCogaWYgaXQncyBub3QgKk5VTEwqLCBhbmQgdGhlbiByZWFkIGEgbGluZSBvZgorICAgaW5wdXQgZnJvbSB0aGUgcHJvdmlkZWQgc3RhbmRhcmQgaW5wdXQgZmlsZSwgcmV0dXJuaW5nIHRoZQorICAgcmVzdWx0aW5nIHN0cmluZy4gIEZvciBleGFtcGxlLCBUaGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSBzZXRzCisgICB0aGlzIGhvb2sgdG8gcHJvdmlkZSBsaW5lLWVkaXRpbmcgYW5kIHRhYi1jb21wbGV0aW9uIGZlYXR1cmVzLgorCisgICBUaGUgcmVzdWx0IG11c3QgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBvciAqTlVMTCogaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmVzdWx0IG11c3QgYmUgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgICAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBieQorICAgICAgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYC4KKworCiAuLiBjOmZ1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzdGFydCkKIAogICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvCkBAIC0yMzUsMTYgKzI2NiwxNSBAQAogICAgKm9wdGltaXplKiBzZXQgdG8gYGAtMWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQogCiAgICBQYXJzZSBhbmQgY29tcGlsZSB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlIGluICpzdHIqLCByZXR1cm5pbmcgdGhlIHJlc3VsdGluZyBjb2RlCiAgICBvYmplY3QuICBUaGUgc3RhcnQgdG9rZW4gaXMgZ2l2ZW4gYnkgKnN0YXJ0KjsgdGhpcyBjYW4gYmUgdXNlZCB0byBjb25zdHJhaW4gdGhlCiAgICBjb2RlIHdoaWNoIGNhbiBiZSBjb21waWxlZCBhbmQgc2hvdWxkIGJlIDpjb25zdDpgUHlfZXZhbF9pbnB1dGAsCiAgICA6Y29uc3Q6YFB5X2ZpbGVfaW5wdXRgLCBvciA6Y29uc3Q6YFB5X3NpbmdsZV9pbnB1dGAuICBUaGUgZmlsZW5hbWUgc3BlY2lmaWVkIGJ5CiAgICAqZmlsZW5hbWUqIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBjb2RlIG9iamVjdCBhbmQgbWF5IGFwcGVhciBpbiB0cmFjZWJhY2tzIG9yCi0gICA6ZXhjOmBTeW50YXhFcnJvcmAgZXhjZXB0aW9uIG1lc3NhZ2VzLCBpdCBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgVGhpcyByZXR1cm5zICpOVUxMKiBpZiB0aGUKLSAgIGNvZGUgY2Fubm90IGJlIHBhcnNlZCBvciBjb21waWxlZC4KKyAgIDpleGM6YFN5bnRheEVycm9yYCBleGNlcHRpb24gbWVzc2FnZXMuICBUaGlzIHJldHVybnMgKk5VTEwqIGlmIHRoZSBjb2RlCisgICBjYW5ub3QgYmUgcGFyc2VkIG9yIGNvbXBpbGVkLgogCiAgICBUaGUgaW50ZWdlciAqb3B0aW1pemUqIHNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIG9mIHRoZSBjb21waWxlcjsgYQogICAgdmFsdWUgb2YgYGAtMWBgIHNlbGVjdHMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUgaW50ZXJwcmV0ZXIgYXMgZ2l2ZW4gYnkKQEAgLTI1Miw5ICsyODIsMTYgQEAKICAgIGBgX19kZWJ1Z19fYGAgaXMgdHJ1ZSksIGBgMWBgIChhc3NlcnRzIGFyZSByZW1vdmVkLCBgYF9fZGVidWdfX2BgIGlzIGZhbHNlKQogICAgb3IgYGAyYGAgKGRvY3N0cmluZ3MgYXJlIHJlbW92ZWQgdG9vKS4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQorCisgICBMaWtlIDpjOmZ1bmM6YFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzYCwgYnV0ICpmaWxlbmFtZSogaXMgYSBieXRlIHN0cmluZworICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFdmFsX0V2YWxDb2RlKFB5T2JqZWN0ICpjbywgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMpCiAKICAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6YzpmdW5jOmBQeUV2YWxfRXZhbENvZGVFeGAsIHdpdGgganVzdApAQCAtMzM4LDQgKzM3NSwzIEBACiAKICAgIFRoaXMgYml0IGNhbiBiZSBzZXQgaW4gKmZsYWdzKiB0byBjYXVzZSBkaXZpc2lvbiBvcGVyYXRvciBgYC9gYCB0byBiZQogICAgaW50ZXJwcmV0ZWQgYXMgInRydWUgZGl2aXNpb24iIGFjY29yZGluZyB0byA6cGVwOmAyMzhgLgotCmRpZmYgLS1naXQgYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0IGIvRG9jL2RhdGEvcmVmY291bnRzLmRhdAppbmRleCBhNDI1ODRjLi44MTRjM2IwIDEwMDY0NAotLS0gYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CisrKyBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKQEAgLTIyMCw2ICsyMjAsMTEgQEAKIFB5RGljdF9HZXRJdGVtU3RyaW5nOlB5T2JqZWN0KjpwOjA6CiBQeURpY3RfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6OjA6CitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6cDowOgorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmtleTowOmNvbmRpdGlvbmFsbHkgKzEgaWYgaW5zZXJ0ZWQgaW50byB0aGUgZGljdAorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmRlZmF1bHQ6MDpjb25kaXRpb25hbGx5ICsxIGlmIGluc2VydGVkIGludG8gdGhlIGRpY3QKKwogUHlEaWN0X0l0ZW1zOlB5T2JqZWN0Kjo6KzE6CiBQeURpY3RfSXRlbXM6UHlPYmplY3QqOnA6MDoKIApAQCAtNTAzLDEzICs1MDgsMTMgQEAKIFB5SW1wb3J0X0NsZWFudXA6dm9pZDo6OgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpQeU9iamVjdCo6OisxOgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU6Y2hhcio6bmFtZTo6CitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOlB5T2JqZWN0KjpjbzowOgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OlB5T2JqZWN0Kjo6KzE6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOm5hbWU6OgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6UHlPYmplY3QqOmNvOjA6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOnBhdGhuYW1lOjoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y29uc3QgY2hhcio6cGF0aG5hbWU6OgogCiBQeUltcG9ydF9HZXRNYWdpY051bWJlcjpsb25nOjo6CiAKQEAgLTUxOSw3ICs1MjQsNyBAQAogUHlJbXBvcnRfSW1wb3J0OlB5T2JqZWN0KjpuYW1lOjA6CiAKIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTppbnQ6OjoKLVB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTpjaGFyKjo6OgorUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlOmNvbnN0IGNoYXIqOjo6CiAKIFB5SW1wb3J0X0ltcG9ydE1vZHVsZTpQeU9iamVjdCo6OisxOgogUHlJbXBvcnRfSW1wb3J0TW9kdWxlOmNvbnN0IGNoYXIqOm5hbWU6OgpAQCAtNjY4LDcgKzY3Myw3IEBACiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc6dW5zaWduZWQgbG9uZyBsb25nOnY6OgogCiBQeUxvbmdfRnJvbVN0cmluZzpQeU9iamVjdCo6OisxOgotUHlMb25nX0Zyb21TdHJpbmc6Y2hhcio6c3RyOjoKK1B5TG9uZ19Gcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cjo6CiBQeUxvbmdfRnJvbVN0cmluZzpjaGFyKio6cGVuZDo6CiBQeUxvbmdfRnJvbVN0cmluZzppbnQ6YmFzZTo6CiAKQEAgLTY5Niw3ICs3MDEsNyBAQAogCiBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc6UHlPYmplY3QqOm86MDoKLVB5TWFwcGluZ19HZXRJdGVtU3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCiBQeU1hcHBpbmdfSGFzS2V5OmludDo6OgogUHlNYXBwaW5nX0hhc0tleTpQeU9iamVjdCo6bzowOgpAQCAtNzA0LDcgKzcwOSw3IEBACiAKIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOlB5T2JqZWN0KjpvOjA6Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiAKIFB5TWFwcGluZ19JdGVtczpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0l0ZW1zOlB5T2JqZWN0KjpvOjA6CkBAIC03MTcsNyArNzIyLDcgQEAKIAogUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6bzowOgotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6Y2hhcio6a2V5OjoKK1B5TWFwcGluZ19TZXRJdGVtU3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6djorMToKIAogUHlNYXBwaW5nX1ZhbHVlczpQeU9iamVjdCo6OisxOgpAQCAtNzMwLDcgKzczNSw3IEBACiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlOkZJTEUqOmZpbGU6OgogCiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6UHlPYmplY3QqOjorMToKLVB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzpjaGFyKjpzdHJpbmc6OgorUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cmluZzo6CiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6aW50Omxlbjo6CiAKIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nOlB5T2JqZWN0Kjo6KzE6CkBAIC05MTIsNyArOTE3LDcgQEAKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOlB5T2JqZWN0Kjo6KzE6CiBQeU9iamVjdF9DYWxsRnVuY3Rpb246UHlPYmplY3QqOmNhbGxhYmxlX29iamVjdDowOgotUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsRnVuY3Rpb246Y29uc3QgY2hhcio6Zm9ybWF0OjoKIFB5T2JqZWN0X0NhbGxGdW5jdGlvbjo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJnczpQeU9iamVjdCo6OisxOgpAQCAtOTIxLDggKzkyNiw4IEBACiAKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOjorMToKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOm86MDoKLVB5T2JqZWN0X0NhbGxNZXRob2Q6Y2hhcio6bTo6Ci1QeU9iamVjdF9DYWxsTWV0aG9kOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsTWV0aG9kOmNvbnN0IGNoYXIqOm06OgorUHlPYmplY3RfQ2FsbE1ldGhvZDpjb25zdCBjaGFyKjpmb3JtYXQ6OgogUHlPYmplY3RfQ2FsbE1ldGhvZDo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3M6UHlPYmplY3QqOjorMToKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdAppbmRleCBiZDY2MDg2Li42Y2I2ODZhIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CkBAIC0yODUsMTQgKzI4NSwxNCBAQAogKiBgYHB5dGhvblguWS1jb25maWcgLS1jZmxhZ3NgYCB3aWxsIGdpdmUgeW91IHRoZSByZWNvbW1lbmRlZCBmbGFncyB3aGVuCiAgIGNvbXBpbGluZzo6CiAKLSAgICQgL29wdC9iaW4vcHl0aG9uMy4zLWNvbmZpZyAtLWNmbGFncwotICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy4zbSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjNtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKKyAgICQgL29wdC9iaW4vcHl0aG9uMy40LWNvbmZpZyAtLWNmbGFncworICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy40bSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjRtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKIAogKiBgYHB5dGhvblguWS1jb25maWcgLS1sZGZsYWdzYGAgd2lsbCBnaXZlIHlvdSB0aGUgcmVjb21tZW5kZWQgZmxhZ3Mgd2hlbgogICBsaW5raW5nOjoKIAotICAgJCAvb3B0L2Jpbi9weXRob24zLjMtY29uZmlnIC0tbGRmbGFncwotICAgLUwvb3B0L2xpYi9weXRob24zLjMvY29uZmlnLTMuM20gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbjMuM20gLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljCisgICAkIC9vcHQvYmluL3B5dGhvbjMuNC1jb25maWcgLS1sZGZsYWdzCisgICAtTC9vcHQvbGliL3B5dGhvbjMuNC9jb25maWctMy40bSAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uMy40bSAtWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMKIAogLi4gbm90ZTo6CiAgICBUbyBhdm9pZCBjb25mdXNpb24gYmV0d2VlbiBzZXZlcmFsIFB5dGhvbiBpbnN0YWxsYXRpb25zIChhbmQgZXNwZWNpYWxseQpkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9uZXd0eXBlcy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAppbmRleCBmNDg0YmE0Li40NWI1NzIxIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdApAQCAtMTU3LDcgKzE1Nyw4IEBACiAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAvKiB0cF9mbGFncyAqLwogCiBBbGwgdHlwZXMgc2hvdWxkIGluY2x1ZGUgdGhpcyBjb25zdGFudCBpbiB0aGVpciBmbGFncy4gIEl0IGVuYWJsZXMgYWxsIG9mIHRoZQotbWVtYmVycyBkZWZpbmVkIGJ5IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUHl0aG9uLgorbWVtYmVycyBkZWZpbmVkIHVudGlsIGF0IGxlYXN0IFB5dGhvbiAzLjMuICBJZiB5b3UgbmVlZCBmdXJ0aGVyIG1lbWJlcnMsCit5b3Ugd2lsbCBuZWVkIHRvIE9SIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzLgogCiBXZSBwcm92aWRlIGEgZG9jIHN0cmluZyBmb3IgdGhlIHR5cGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RvY2AuIDo6CiAKQEAgLTkyOCw4ICs5MjksOSBAQAogCiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGluc3RhbmNlIG9mIHlvdXIgdHlwZSBpcwogcmVkdWNlZCB0byB6ZXJvIGFuZCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhbnRzIHRvIHJlY2xhaW0gaXQuICBJZiB5b3VyIHR5cGUKLWhhcyBtZW1vcnkgdG8gZnJlZSBvciBvdGhlciBjbGVhbi11cCB0byBwZXJmb3JtLCBwdXQgaXQgaGVyZS4gIFRoZSBvYmplY3QgaXRzZWxmCi1uZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcyBmdW5jdGlvbjo6CitoYXMgbWVtb3J5IHRvIGZyZWUgb3Igb3RoZXIgY2xlYW4tdXAgdG8gcGVyZm9ybSwgeW91IGNhbiBwdXQgaXQgaGVyZS4gIFRoZQorb2JqZWN0IGl0c2VsZiBuZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcworZnVuY3Rpb246OgogCiAgICBzdGF0aWMgdm9pZAogICAgbmV3ZGF0YXR5cGVfZGVhbGxvYyhuZXdkYXRhdHlwZW9iamVjdCAqIG9iaikKQEAgLTk4MCw2ICs5ODIsMjIgQEAKICAgICAgICBQeV9UWVBFKG9iaiktPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKICAgIH0KIAorLi4gbm90ZTo6CisgICBUaGVyZSBhcmUgbGltaXRhdGlvbnMgdG8gd2hhdCB5b3UgY2FuIHNhZmVseSBkbyBpbiBhIGRlYWxsb2NhdG9yIGZ1bmN0aW9uLgorICAgRmlyc3QsIGlmIHlvdXIgdHlwZSBzdXBwb3J0cyBnYXJiYWdlIGNvbGxlY3Rpb24gKHVzaW5nIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF90cmF2ZXJzZWAKKyAgIGFuZC9vciA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfY2xlYXJgKSwgc29tZSBvZiB0aGUgb2JqZWN0J3MgbWVtYmVycyBjYW4gaGF2ZSBiZWVuCisgICBjbGVhcmVkIG9yIGZpbmFsaXplZCBieSB0aGUgdGltZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgaXMgY2FsbGVkLiAgU2Vjb25kLCBpbgorICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCB5b3VyIG9iamVjdCBpcyBpbiBhbiB1bnN0YWJsZSBzdGF0ZTogaXRzIHJlZmVyZW5jZQorICAgY291bnQgaXMgZXF1YWwgdG8gemVyby4gIEFueSBjYWxsIHRvIGEgbm9uLXRyaXZpYWwgb2JqZWN0IG9yIEFQSSAoYXMgaW4gdGhlCisgICBleGFtcGxlIGFib3ZlKSBtaWdodCBlbmQgdXAgY2FsbGluZyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgYWdhaW4sIGNhdXNpbmcgYQorICAgZG91YmxlIGZyZWUgYW5kIGEgY3Jhc2guCisKKyAgIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgaXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIHB1dCBhbnkgY29tcGxleAorICAgZmluYWxpemF0aW9uIGNvZGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCBhbmQgaW5zdGVhZCB1c2UgdGhlIG5ldworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCB0eXBlIG1ldGhvZC4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICA6cGVwOmA0NDJgIGV4cGxhaW5zIHRoZSBuZXcgZmluYWxpemF0aW9uIHNjaGVtZS4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBzdHJpbmc7IG9iamVjdCByZXByZXNlbnRhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9saWJyYXJ5LnJzdCBiL0RvYy9mYXEvbGlicmFyeS5yc3QKaW5kZXggYzhlZjllNy4uOGJkNzc0YiAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9saWJyYXJ5LnJzdAorKysgYi9Eb2MvZmFxL2xpYnJhcnkucnN0CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgYyA9IHN5cy5zdGRpbi5yZWFkKDEpCiAgICAgICAgICAgICAgICBwcmludCgiR290IGNoYXJhY3RlciIsIHJlcHIoYykpCi0gICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgIHBhc3MKICAgIGZpbmFsbHk6CiAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQUZMVVNILCBvbGR0ZXJtKQpAQCAtMjI0LDcgKzIyNCwxMSBAQAogICAgOmZ1bmM6YHRlcm1pb3MudGNzZXRhdHRyYCB0dXJucyBvZmYgc3RkaW4ncyBlY2hvaW5nIGFuZCBkaXNhYmxlcyBjYW5vbmljYWwKICAgIG1vZGUuICA6ZnVuYzpgZmNudGwuZm5jdGxgIGlzIHVzZWQgdG8gb2J0YWluIHN0ZGluJ3MgZmlsZSBkZXNjcmlwdG9yIGZsYWdzCiAgICBhbmQgbW9kaWZ5IHRoZW0gZm9yIG5vbi1ibG9ja2luZyBtb2RlLiAgU2luY2UgcmVhZGluZyBzdGRpbiB3aGVuIGl0IGlzIGVtcHR5Ci0gICByZXN1bHRzIGluIGFuIDpleGM6YElPRXJyb3JgLCB0aGlzIGVycm9yIGlzIGNhdWdodCBhbmQgaWdub3JlZC4KKyAgIHJlc3VsdHMgaW4gYW4gOmV4YzpgT1NFcnJvcmAsIHRoaXMgZXJyb3IgaXMgY2F1Z2h0IGFuZCBpZ25vcmVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgKnN5cy5zdGRpbi5yZWFkKiB1c2VkIHRvIHJhaXNlIDpleGM6YElPRXJyb3JgLiBTdGFydGluZyBmcm9tIFB5dGhvbiAzLjMKKyAgICAgIDpleGM6YElPRXJyb3JgIGlzIGFsaWFzIGZvciA6ZXhjOmBPU0Vycm9yYC4KIAogCiBUaHJlYWRzCmRpZmYgLS1naXQgYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdCBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CmluZGV4IDNmZDMxYjQuLjEyZjFhMmQgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CisrKyBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CkBAIC0xNzY1LDEyICsxNzY1LDEyIEBACiBGb3IgcmVhc29ucyBvZiBlZmZpY2llbmN5IGFzIHdlbGwgYXMgY29uc2lzdGVuY3ksIFB5dGhvbiBvbmx5IHJlYWRzIHRoZSBtb2R1bGUKIGZpbGUgb24gdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMgaW1wb3J0ZWQuICBJZiBpdCBkaWRuJ3QsIGluIGEgcHJvZ3JhbQogY29uc2lzdGluZyBvZiBtYW55IG1vZHVsZXMgd2hlcmUgZWFjaCBvbmUgaW1wb3J0cyB0aGUgc2FtZSBiYXNpYyBtb2R1bGUsIHRoZQotYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZXJlYWRpbmcgb2YgYQorYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZS1yZWFkaW5nIG9mIGEKIGNoYW5nZWQgbW9kdWxlLCBkbyB0aGlzOjoKIAotICAgaW1wb3J0IGltcAorICAgaW1wb3J0IGltcG9ydGxpYgogICAgaW1wb3J0IG1vZG5hbWUKLSAgIGltcC5yZWxvYWQobW9kbmFtZSkKKyAgIGltcG9ydGxpYi5yZWxvYWQobW9kbmFtZSkKIAogV2FybmluZzogdGhpcyB0ZWNobmlxdWUgaXMgbm90IDEwMCUgZm9vbC1wcm9vZi4gIEluIHBhcnRpY3VsYXIsIG1vZHVsZXMKIGNvbnRhaW5pbmcgc3RhdGVtZW50cyBsaWtlIDo6CkBAIC0xNzgyLDEwICsxNzgyLDEwIEBACiB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGNsYXNzIGRlZmluaXRpb24uICBUaGlzIGNhbiByZXN1bHQgaW4gdGhlIGZvbGxvd2luZwogcGFyYWRveGljYWwgYmVoYXZpb3VyOgogCi0gICA+Pj4gaW1wb3J0IGltcAorICAgPj4+IGltcG9ydCBpbXBvcnRsaWIKICAgID4+PiBpbXBvcnQgY2xzCiAgICA+Pj4gYyA9IGNscy5DKCkgICAgICAgICAgICAgICAgIyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQwotICAgPj4+IGltcC5yZWxvYWQoY2xzKQorICAgPj4+IGltcG9ydGxpYi5yZWxvYWQoY2xzKQogICAgPG1vZHVsZSAnY2xzJyBmcm9tICdjbHMucHknPgogICAgPj4+IGlzaW5zdGFuY2UoYywgY2xzLkMpICAgICAgICMgaXNpbnN0YW5jZSBpcyBmYWxzZT8hPwogICAgRmFsc2UKZGlmZiAtLWdpdCBhL0RvYy9nbG9zc2FyeS5yc3QgYi9Eb2MvZ2xvc3NhcnkucnN0CmluZGV4IGI0NDY1YWMuLjVmY2FhODUgMTAwNjQ0Ci0tLSBhL0RvYy9nbG9zc2FyeS5yc3QKKysrIGIvRG9jL2dsb3NzYXJ5LnJzdApAQCAtMzAyLDYgKzMwMiwxNSBAQAogICAgICAgICAgPj4+IHN1bShpKmkgZm9yIGkgaW4gcmFuZ2UoMTApKSAgICAgICAgICMgc3VtIG9mIHNxdWFyZXMgMCwgMSwgNCwgLi4uIDgxCiAgICAgICAgICAyODUKIAorICAgZ2VuZXJpYyBmdW5jdGlvbgorICAgICAgQSBmdW5jdGlvbiBjb21wb3NlZCBvZiBtdWx0aXBsZSBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBzYW1lIG9wZXJhdGlvbgorICAgICAgZm9yIGRpZmZlcmVudCB0eXBlcy4gV2hpY2ggaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIHVzZWQgZHVyaW5nIGEgY2FsbCBpcworICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgZGlzcGF0Y2ggYWxnb3JpdGhtLgorCisgICAgICBTZWUgYWxzbyB0aGUgOnRlcm06YHNpbmdsZSBkaXNwYXRjaGAgZ2xvc3NhcnkgZW50cnksIHRoZQorICAgICAgOmZ1bmM6YGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaGAgZGVjb3JhdG9yLCBhbmQgOnBlcDpgNDQzYC4KKworCiAgICBHSUwKICAgICAgIFNlZSA6dGVybTpgZ2xvYmFsIGludGVycHJldGVyIGxvY2tgLgogCkBAIC02NjEsMjAgKzY3MCwyNyBAQAogICAgcG9zaXRpb25hbCBhcmd1bWVudAogICAgICAgU2VlIDp0ZXJtOmBhcmd1bWVudGAuCiAKLSAgIHByb3Zpc2lvbmFsIHBhY2thZ2UKLSAgICAgIEEgcHJvdmlzaW9uYWwgcGFja2FnZSBpcyBvbmUgd2hpY2ggaGFzIGJlZW4gZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVkIGZyb20KKyAgIHByb3Zpc2lvbmFsIEFQSQorICAgICAgQSBwcm92aXNpb25hbCBBUEkgaXMgb25lIHdoaWNoIGhhcyBiZWVuIGRlbGliZXJhdGVseSBleGNsdWRlZCBmcm9tCiAgICAgICB0aGUgc3RhbmRhcmQgbGlicmFyeSdzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuICBXaGlsZSBtYWpvcgotICAgICAgY2hhbmdlcyB0byBzdWNoIHBhY2thZ2VzIGFyZSBub3QgZXhwZWN0ZWQsIGFzIGxvbmcgYXMgdGhleSBhcmUgbWFya2VkCisgICAgICBjaGFuZ2VzIHRvIHN1Y2ggaW50ZXJmYWNlcyBhcmUgbm90IGV4cGVjdGVkLCBhcyBsb25nIGFzIHRoZXkgYXJlIG1hcmtlZAogICAgICAgcHJvdmlzaW9uYWwsIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsCi0gICAgICBvZiB0aGUgcGFja2FnZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAorICAgICAgb2YgdGhlIGludGVyZmFjZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAogICAgICAgY2hhbmdlcyB3aWxsIG5vdCBiZSBtYWRlIGdyYXR1aXRvdXNseSAtLSB0aGV5IHdpbGwgb2NjdXIgb25seSBpZiBzZXJpb3VzCi0gICAgICBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbiBvZiB0aGUKLSAgICAgIHBhY2thZ2UuCisgICAgICBmdW5kYW1lbnRhbCBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbgorICAgICAgb2YgdGhlIEFQSS4KKworICAgICAgRXZlbiBmb3IgcHJvdmlzaW9uYWwgQVBJcywgYmFja3dhcmRzIGluY29tcGF0aWJsZSBjaGFuZ2VzIGFyZSBzZWVuIGFzCisgICAgICBhICJzb2x1dGlvbiBvZiBsYXN0IHJlc29ydCIgLSBldmVyeSBhdHRlbXB0IHdpbGwgc3RpbGwgYmUgbWFkZSB0byBmaW5kCisgICAgICBhIGJhY2t3YXJkcyBjb21wYXRpYmxlIHJlc29sdXRpb24gdG8gYW55IGlkZW50aWZpZWQgcHJvYmxlbXMuCiAKICAgICAgIFRoaXMgcHJvY2VzcyBhbGxvd3MgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdG8gY29udGludWUgdG8gZXZvbHZlIG92ZXIKICAgICAgIHRpbWUsIHdpdGhvdXQgbG9ja2luZyBpbiBwcm9ibGVtYXRpYyBkZXNpZ24gZXJyb3JzIGZvciBleHRlbmRlZCBwZXJpb2RzCiAgICAgICBvZiB0aW1lLiAgU2VlIDpwZXA6YDQxMWAgZm9yIG1vcmUgZGV0YWlscy4KIAorICAgcHJvdmlzaW9uYWwgcGFja2FnZQorICAgICAgU2VlIDp0ZXJtOmBwcm92aXNpb25hbCBBUElgLgorCiAgICBQeXRob24gMzAwMAogICAgICAgTmlja25hbWUgZm9yIHRoZSBQeXRob24gMy54IHJlbGVhc2UgbGluZSAoY29pbmVkIGxvbmcgYWdvIHdoZW4gdGhlCiAgICAgICByZWxlYXNlIG9mIHZlcnNpb24gMyB3YXMgc29tZXRoaW5nIGluIHRoZSBkaXN0YW50IGZ1dHVyZS4pICBUaGlzIGlzIGFsc28KQEAgLTc1Myw2ICs3NjksMTAgQEAKICAgICAgIG1hcHBpbmcgcmF0aGVyIHRoYW4gYSBzZXF1ZW5jZSBiZWNhdXNlIHRoZSBsb29rdXBzIHVzZSBhcmJpdHJhcnkKICAgICAgIDp0ZXJtOmBpbW11dGFibGVgIGtleXMgcmF0aGVyIHRoYW4gaW50ZWdlcnMuCiAKKyAgIHNpbmdsZSBkaXNwYXRjaAorICAgICAgQSBmb3JtIG9mIDp0ZXJtOmBnZW5lcmljIGZ1bmN0aW9uYCBkaXNwYXRjaCB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMKKyAgICAgIGNob3NlbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiBhIHNpbmdsZSBhcmd1bWVudC4KKwogICAgc2xpY2UKICAgICAgIEFuIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5pbmcgYSBwb3J0aW9uIG9mIGEgOnRlcm06YHNlcXVlbmNlYC4gIEEgc2xpY2UgaXMKICAgICAgIGNyZWF0ZWQgdXNpbmcgdGhlIHN1YnNjcmlwdCBub3RhdGlvbiwgYGBbXWBgIHdpdGggY29sb25zIGJldHdlZW4gbnVtYmVycwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0IGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CmluZGV4IGQyNDFmMWEuLjBmNGM0ZTQgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdAorKysgYi9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKQEAgLTMsNyArMyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiA6QXV0aG9yOiBBLiBNLiBLdWNobGluZwotOlJlbGVhc2U6IDAuMzEKKzpSZWxlYXNlOiAwLjMyCiAKIEluIHRoaXMgZG9jdW1lbnQsIHdlJ2xsIHRha2UgYSB0b3VyIG9mIFB5dGhvbidzIGZlYXR1cmVzIHN1aXRhYmxlIGZvcgogaW1wbGVtZW50aW5nIHByb2dyYW1zIGluIGEgZnVuY3Rpb25hbCBzdHlsZS4gIEFmdGVyIGFuIGludHJvZHVjdGlvbiB0byB0aGUKQEAgLTE1LDkgKzE1LDkgQEAKIEludHJvZHVjdGlvbgogPT09PT09PT09PT09CiAKLVRoaXMgc2VjdGlvbiBleHBsYWlucyB0aGUgYmFzaWMgY29uY2VwdCBvZiBmdW5jdGlvbmFsIHByb2dyYW1taW5nOyBpZiB5b3UncmUKLWp1c3QgaW50ZXJlc3RlZCBpbiBsZWFybmluZyBhYm91dCBQeXRob24gbGFuZ3VhZ2UgZmVhdHVyZXMsIHNraXAgdG8gdGhlIG5leHQKLXNlY3Rpb24uCitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGJhc2ljIGNvbmNlcHQgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZzsgaWYKK3lvdSdyZSBqdXN0IGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgYWJvdXQgUHl0aG9uIGxhbmd1YWdlIGZlYXR1cmVzLAorc2tpcCB0byB0aGUgbmV4dCBzZWN0aW9uIG9uIDpyZWY6YGZ1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzYC4KIAogUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIHN1cHBvcnQgZGVjb21wb3NpbmcgcHJvYmxlbXMgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgd2F5czoKIApAQCAtMTczLDYgKzE3Myw4IEBACiBhIGZldyBmdW5jdGlvbnMgc3BlY2lhbGl6ZWQgZm9yIHRoZSBjdXJyZW50IHRhc2suCiAKIAorLi4gX2Z1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzOgorCiBJdGVyYXRvcnMKID09PT09PT09PQogCkBAIC02NzAsNyArNjcyLDcgQEAKIAogOmZ1bmM6YHNvcnRlZChpdGVyYWJsZSwga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpIDxzb3J0ZWQ+YCBjb2xsZWN0cyBhbGwgdGhlCiBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUgaW50byBhIGxpc3QsIHNvcnRzIHRoZSBsaXN0LCBhbmQgcmV0dXJucyB0aGUgc29ydGVkCi1yZXN1bHQuICBUaGUgKmtleSosIGFuZCAqcmV2ZXJzZSogYXJndW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKK3Jlc3VsdC4gIFRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlCiBjb25zdHJ1Y3RlZCBsaXN0J3MgOm1ldGg6YH5saXN0LnNvcnRgIG1ldGhvZC4gOjoKIAogICAgID4+PiBpbXBvcnQgcmFuZG9tCkBAIC04MzYsNyArODM4LDggQEAKIHByZWRpY2F0ZS4KIAogOmZ1bmM6YGl0ZXJ0b29scy5maWx0ZXJmYWxzZShwcmVkaWNhdGUsIGl0ZXIpIDxpdGVydG9vbHMuZmlsdGVyZmFsc2U+YCBpcyB0aGUKLW9wcG9zaXRlLCByZXR1cm5pbmcgYWxsIGVsZW1lbnRzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgZmFsc2U6Ogorb3Bwb3NpdGUgb2YgOmZ1bmM6YGZpbHRlcmAsIHJldHVybmluZyBhbGwgZWxlbWVudHMgZm9yIHdoaWNoIHRoZSBwcmVkaWNhdGUKK3JldHVybnMgZmFsc2U6OgogCiAgICAgaXRlcnRvb2xzLmZpbHRlcmZhbHNlKGlzX2V2ZW4sIGl0ZXJ0b29scy5jb3VudCgpKSA9PgogICAgICAgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgLi4uCkBAIC04NjQsNiArODY3LDc3IEBACiAgICAgaXRlcnRvb2xzLmRyb3B3aGlsZShpc19ldmVuLCBpdGVydG9vbHMuY291bnQoKSkgPT4KICAgICAgIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAuLi4KIAorOmZ1bmM6YGl0ZXJ0b29scy5jb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpIDxpdGVydG9vbHMuY29tcHJlc3M+YCB0YWtlcyB0d28KK2l0ZXJhdG9ycyBhbmQgcmV0dXJucyBvbmx5IHRob3NlIGVsZW1lbnRzIG9mICpkYXRhKiBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcKK2VsZW1lbnQgb2YgKnNlbGVjdG9ycyogaXMgdHJ1ZSwgc3RvcHBpbmcgd2hlbmV2ZXIgZWl0aGVyIG9uZSBpcyBleGhhdXN0ZWQ6OgorCisgICAgaXRlcnRvb2xzLmNvbXByZXNzKFsxLDIsMyw0LDVdLCBbVHJ1ZSwgVHJ1ZSwgRmFsc2UsIEZhbHNlLCBUcnVlXSkgPT4KKyAgICAgICAxLCAyLCA1CisKKworQ29tYmluYXRvcmljIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoaXRlcmFibGUsIHIpIDxpdGVydG9vbHMuY29tYmluYXRpb25zPmAKK3JldHVybnMgYW4gaXRlcmF0b3IgZ2l2aW5nIGFsbCBwb3NzaWJsZSAqciotdHVwbGUgY29tYmluYXRpb25zIG9mIHRoZQorZWxlbWVudHMgY29udGFpbmVkIGluICppdGVyYWJsZSouICA6OgorCisgICAgaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhbMSwgMiwgMywgNCwgNV0sIDIpID0+CisgICAgICAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDQpLCAoMywgNSksCisgICAgICAoNCwgNSkKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAzKSA9PgorICAgICAgKDEsIDIsIDMpLCAoMSwgMiwgNCksICgxLCAyLCA1KSwgKDEsIDMsIDQpLCAoMSwgMywgNSksICgxLCA0LCA1KSwKKyAgICAgICgyLCAzLCA0KSwgKDIsIDMsIDUpLCAoMiwgNCwgNSksCisgICAgICAoMywgNCwgNSkKKworVGhlIGVsZW1lbnRzIHdpdGhpbiBlYWNoIHR1cGxlIHJlbWFpbiBpbiB0aGUgc2FtZSBvcmRlciBhcworKml0ZXJhYmxlKiByZXR1cm5lZCB0aGVtLiAgRm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgMSBpcyBhbHdheXMgYmVmb3JlCisyLCAzLCA0LCBvciA1IGluIHRoZSBleGFtcGxlcyBhYm92ZS4gIEEgc2ltaWxhciBmdW5jdGlvbiwKKzpmdW5jOmBpdGVydG9vbHMucGVybXV0YXRpb25zKGl0ZXJhYmxlLCByPU5vbmUpIDxpdGVydG9vbHMucGVybXV0YXRpb25zPmAsCityZW1vdmVzIHRoaXMgY29uc3RyYWludCBvbiB0aGUgb3JkZXIsIHJldHVybmluZyBhbGwgcG9zc2libGUKK2FycmFuZ2VtZW50cyBvZiBsZW5ndGggKnIqOjoKKworICAgIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDIpLCAoMSwgMyksICgxLCA0KSwgKDEsIDUpLAorICAgICAgKDIsIDEpLCAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDEpLCAoMywgMiksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDEpLCAoNCwgMiksICg0LCAzKSwgKDQsIDUpLAorICAgICAgKDUsIDEpLCAoNSwgMiksICg1LCAzKSwgKDUsIDQpCisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKFsxLCAyLCAzLCA0LCA1XSkgPT4KKyAgICAgICgxLCAyLCAzLCA0LCA1KSwgKDEsIDIsIDMsIDUsIDQpLCAoMSwgMiwgNCwgMywgNSksCisgICAgICAuLi4KKyAgICAgICg1LCA0LCAzLCAyLCAxKQorCitJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEgdmFsdWUgZm9yICpyKiB0aGUgbGVuZ3RoIG9mIHRoZSBpdGVyYWJsZSBpcyB1c2VkLAorbWVhbmluZyB0aGF0IGFsbCB0aGUgZWxlbWVudHMgYXJlIHBlcm11dGVkLgorCitOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHByb2R1Y2UgYWxsIG9mIHRoZSBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYnkKK3Bvc2l0aW9uIGFuZCBkb24ndCByZXF1aXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mICppdGVyYWJsZSogYXJlIHVuaXF1ZTo6CisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKCdhYmEnLCAzKSA9PgorICAgICAgKCdhJywgJ2InLCAnYScpLCAoJ2EnLCAnYScsICdiJyksICgnYicsICdhJywgJ2EnKSwKKyAgICAgICgnYicsICdhJywgJ2EnKSwgKCdhJywgJ2EnLCAnYicpLCAoJ2EnLCAnYicsICdhJykKKworVGhlIGlkZW50aWNhbCB0dXBsZSBgYCgnYScsICdhJywgJ2InKWBgIG9jY3VycyB0d2ljZSwgYnV0IHRoZSB0d28gJ2EnCitzdHJpbmdzIGNhbWUgZnJvbSBkaWZmZXJlbnQgcG9zaXRpb25zLgorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcikgPGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudD5gCitmdW5jdGlvbiByZWxheGVzIGEgZGlmZmVyZW50IGNvbnN0cmFpbnQ6IGVsZW1lbnRzIGNhbiBiZSByZXBlYXRlZAord2l0aGluIGEgc2luZ2xlIHR1cGxlLiAgQ29uY2VwdHVhbGx5IGFuIGVsZW1lbnQgaXMgc2VsZWN0ZWQgZm9yIHRoZQorZmlyc3QgcG9zaXRpb24gb2YgZWFjaCB0dXBsZSBhbmQgdGhlbiBpcyByZXBsYWNlZCBiZWZvcmUgdGhlIHNlY29uZAorZWxlbWVudCBpcyBzZWxlY3RlZC4gIDo6CisKKyAgICBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDEpLCAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMiksICgyLCAzKSwgKDIsIDQpLCAoMiwgNSksCisgICAgICAoMywgMyksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDQpLCAoNCwgNSksCisgICAgICAoNSwgNSkKKwogCiBHcm91cGluZyBlbGVtZW50cwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk4Niw2ICsxMDYwLDE3IEBACiAgICBmb3IgaSBpbiBbMSwyLDNdOgogICAgICAgIHByb2R1Y3QgKj0gaQogCitBIHJlbGF0ZWQgZnVuY3Rpb24gaXMgYGl0ZXJ0b29scy5hY2N1bXVsYXRlKGl0ZXJhYmxlLCBmdW5jPW9wZXJhdG9yLmFkZCkgPGl0ZXJ0b29scy5hY2N1bXVsYXRlYC4KK0l0IHBlcmZvcm1zIHRoZSBzYW1lIGNhbGN1bGF0aW9uLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgb25seSB0aGUKK2ZpbmFsIHJlc3VsdCwgOmZ1bmM6YGFjY3VtdWxhdGVgIHJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBhbHNvIHlpZWxkcworZWFjaCBwYXJ0aWFsIHJlc3VsdDo6CisKKyAgICBpdGVydG9vbHMuYWNjdW11bGF0ZShbMSwyLDMsNCw1XSkgPT4KKyAgICAgIDEsIDMsIDYsIDEwLCAxNQorCisgICAgaXRlcnRvb2xzLmFjY3VtdWxhdGUoWzEsMiwzLDQsNV0sIG9wZXJhdG9yLm11bCkgPT4KKyAgICAgIDEsIDIsIDYsIDI0LCAxMjAKKwogCiBUaGUgb3BlcmF0b3IgbW9kdWxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTU5LDUxICsxMjQ0LDYgQEAKIAogLi4gY29tbWVudAogCi0gICAgVG9waWNzIHRvIHBsYWNlCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIFhYWCBvcy53YWxrKCkKLQotICAgIFhYWCBOZWVkIGEgbGFyZ2UgZXhhbXBsZS4KLQotICAgIEJ1dCB3aWxsIGFuIGV4YW1wbGUgYWRkIG11Y2g/ICBJJ2xsIHBvc3QgYSBmaXJzdCBkcmFmdCBhbmQgc2VlCi0gICAgd2hhdCB0aGUgY29tbWVudHMgc2F5LgotCi0uLiBjb21tZW50Ci0KLSAgICBPcmlnaW5hbCBvdXRsaW5lOgotICAgIEludHJvZHVjdGlvbgotICAgICAgICAgICAgSWRlYSBvZiBGUAotICAgICAgICAgICAgICAgICAgICBQcm9ncmFtcyBidWlsdCBvdXQgb2YgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBhcmUgc3RyaWN0bHkgaW5wdXQtb3V0cHV0LCBubyBpbnRlcm5hbCBzdGF0ZQotICAgICAgICAgICAgT3Bwb3NlZCB0byBPTyBwcm9ncmFtbWluZywgd2hlcmUgb2JqZWN0cyBoYXZlIHN0YXRlCi0KLSAgICAgICAgICAgIFdoeSBGUD8KLSAgICAgICAgICAgICAgICAgICAgRm9ybWFsIHByb3ZhYmlsaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWdubWVudCBpcyBkaWZmaWN1bHQgdG8gcmVhc29uIGFib3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHZlcnkgcmVsZXZhbnQgdG8gUHl0aG9uCi0gICAgICAgICAgICAgICAgICAgIE1vZHVsYXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbWFsbCBmdW5jdGlvbnMgdGhhdCBkbyBvbmUgdGhpbmcKLSAgICAgICAgICAgICAgICAgICAgRGVidWdnYWJpbGl0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHRlc3QgZHVlIHRvIGxhY2sgb2Ygc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHZlcmlmeSBvdXRwdXQgZnJvbSBpbnRlcm1lZGlhdGUgc3RlcHMKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9zYWJpbGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhc3NlbWJsZSBhIHRvb2xib3ggb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIG1peGVkCi0KLSAgICBUYWNrbGluZyBhIHByb2JsZW0KLSAgICAgICAgICAgIE5lZWQgYSBzaWduaWZpY2FudCBleGFtcGxlCi0KLSAgICBJdGVyYXRvcnMKLSAgICBHZW5lcmF0b3JzCi0gICAgVGhlIGl0ZXJ0b29scyBtb2R1bGUKLSAgICBMaXN0IGNvbXByZWhlbnNpb25zCi0gICAgU21hbGwgZnVuY3Rpb25zIGFuZCB0aGUgbGFtYmRhIHN0YXRlbWVudAotICAgIEJ1aWx0LWluIGZ1bmN0aW9ucwotICAgICAgICAgICAgbWFwCi0gICAgICAgICAgICBmaWx0ZXIKLQotLi4gY29tbWVudAotCiAgICAgSGFuZHkgbGl0dGxlIGZ1bmN0aW9uIGZvciBwcmludGluZyBwYXJ0IG9mIGFuIGl0ZXJhdG9yIC0tIHVzZWQKICAgICB3aGlsZSB3cml0aW5nIHRoaXMgZG9jdW1lbnQuCiAKQEAgLTEyMTQsNSArMTI1NCwzIEBACiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdHIoZWxlbSkpCiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLCAnKQogICAgICAgICBwcmludChlbGVtWy0xXSkKLQotCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QKaW5kZXggODNiNDc5Yy4uMWFkM2MyNSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdApAQCAtNzA0LDkgKzcwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIocmVjb3JkLm5hbWUpCiAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShyZWNvcmQpICMgTm8gbGV2ZWwgb3IgZmlsdGVyIGxvZ2ljIGFwcGxpZWQgLSBqdXN0IGRvIGl0IQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cywgdHJhY2ViYWNrCiAgICAgICAgICAgICAgICAgcHJpbnQoJ1dob29wcyEgUHJvYmxlbTonLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRlcnIpCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKaW5kZXggMTY1NDg2YS4uYzdhODAyYSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmcucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLnJzdApAQCAtOTAwLDEwICs5MDAsMTAgQEAKICAgIGRpc2sgZmlsZXMsIHJvdGF0aW5nIHRoZSBsb2cgZmlsZSBhdCBjZXJ0YWluIHRpbWVkIGludGVydmFscy4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuU29ja2V0SGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gVENQL0lQCi0gICBzb2NrZXRzLgorICAgc29ja2V0cy4gU2luY2UgMy40LCBVbml4IGRvbWFpbiBzb2NrZXRzIGFyZSBhbHNvIHN1cHBvcnRlZC4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBVRFAKLSAgIHNvY2tldHMuCisgICBzb2NrZXRzLiBTaW5jZSAzLjQsIFVuaXggZG9tYWluIHNvY2tldHMgYXJlIGFsc28gc3VwcG9ydGVkLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5TTVRQSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYSBkZXNpZ25hdGVkCiAgICBlbWFpbCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3VybGxpYjIucnN0IGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CmluZGV4IDc0ZWVlZTAuLjdiMjE3ZWEgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by91cmxsaWIyLnJzdAorKysgYi9Eb2MvaG93dG8vdXJsbGliMi5yc3QKQEAgLTUwNyw3ICs1MDcsNyBAQAogICAgIC0tIGBgUHJveHlIYW5kbGVyYGAgKGlmIGEgcHJveHkgc2V0dGluZyBzdWNoIGFzIGFuIDplbnZ2YXI6YGh0dHBfcHJveHlgCiAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KSwgYGBVbmtub3duSGFuZGxlcmBgLCBgYEhUVFBIYW5kbGVyYGAsCiAgICAgYGBIVFRQRGVmYXVsdEVycm9ySGFuZGxlcmBgLCBgYEhUVFBSZWRpcmVjdEhhbmRsZXJgYCwgYGBGVFBIYW5kbGVyYGAsCi0gICAgYGBGaWxlSGFuZGxlcmBgLCBgYEhUVFBFcnJvclByb2Nlc3NvcmBgLgorICAgIGBgRmlsZUhhbmRsZXJgYCwgYGBEYXRhSGFuZGxlcmBgLCBgYEhUVFBFcnJvclByb2Nlc3NvcmBgLgogCiBgYHRvcF9sZXZlbF91cmxgYCBpcyBpbiBmYWN0ICplaXRoZXIqIGEgZnVsbCBVUkwgKGluY2x1ZGluZyB0aGUgJ2h0dHA6JyBzY2hlbWUKIGNvbXBvbmVudCBhbmQgdGhlIGhvc3RuYW1lIGFuZCBvcHRpb25hbGx5IHRoZSBwb3J0IG51bWJlcikKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5CmluZGV4IGNjNTUyOWUuLjNjN2M3NzAgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkKKysrIGIvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weQpAQCAtOCw3ICs4LDcgQEAKICMgRm9yIGd1ZXNzaW5nIE1JTUUgdHlwZSBiYXNlZCBvbiBmaWxlIG5hbWUgZXh0ZW5zaW9uCiBpbXBvcnQgbWltZXR5cGVzCiAKLWZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRQYXJzZXIKIAogZnJvbSBlbWFpbCBpbXBvcnQgZW5jb2RlcnMKIGZyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgTWVzc2FnZQpAQCAtMjIsNDQgKzIyLDM2IEBACiAKIAogZGVmIG1haW4oKToKLSAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9IiIiXAorICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlwKIFNlbmQgdGhlIGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5IGFzIGEgTUlNRSBtZXNzYWdlLgotCi1Vc2FnZTogJXByb2cgW29wdGlvbnNdCi0KIFVubGVzcyB0aGUgLW8gb3B0aW9uIGlzIGdpdmVuLCB0aGUgZW1haWwgaXMgc2VudCBieSBmb3J3YXJkaW5nIHRvIHlvdXIgbG9jYWwKIFNNVFAgc2VydmVyLCB3aGljaCB0aGVuIGRvZXMgdGhlIG5vcm1hbCBkZWxpdmVyeSBwcm9jZXNzLiAgWW91ciBsb2NhbCBtYWNoaW5lCiBtdXN0IGJlIHJ1bm5pbmcgYW4gU01UUCBzZXJ2ZXIuCiAiIiIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1kJywgJy0tZGlyZWN0b3J5JywKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J3N0b3JlJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIk1haWwgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT25seSB0aGUgcmVndWxhcgotICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgYXJlIHNlbnQsIGFuZCB3ZSBkb24ndCByZWN1cnNlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMuIiIiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctbycsICctLW91dHB1dCcsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsIG1ldGF2YXI9J0ZJTEUnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiUHJpbnQgdGhlIGNvbXBvc2VkIG1lc3NhZ2UgdG8gRklMRSBpbnN0ZWFkIG9mCi0gICAgICAgICAgICAgICAgICAgICAgc2VuZGluZyB0aGUgbWVzc2FnZSB0byB0aGUgU01UUCBzZXJ2ZXIuIiIiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNlbmRlcicsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsIG1ldGF2YXI9J1NFTkRFUicsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHZhbHVlIG9mIHRoZSBGcm9tOiBoZWFkZXIgKHJlcXVpcmVkKScpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1yJywgJy0tcmVjaXBpZW50JywKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J2FwcGVuZCcsIG1ldGF2YXI9J1JFQ0lQSUVOVCcsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bXSwgZGVzdD0ncmVjaXBpZW50cycsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nQSBUbzogaGVhZGVyIHZhbHVlIChhdCBsZWFzdCBvbmUgcmVxdWlyZWQpJykKLSAgICBvcHRzLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotICAgIGlmIG5vdCBvcHRzLnNlbmRlciBvciBub3Qgb3B0cy5yZWNpcGllbnRzOgotICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgIHN5cy5leGl0KDEpCi0gICAgZGlyZWN0b3J5ID0gb3B0cy5kaXJlY3RvcnkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRpcmVjdG9yeScsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIk1haWwgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBPbmx5IHRoZSByZWd1bGFyCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IGFyZSBzZW50LCBhbmQgd2UgZG9uJ3QgcmVjdXJzZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3JpZXMuIiIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0cHV0JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J0ZJTEUnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJQcmludCB0aGUgY29tcG9zZWQgbWVzc2FnZSB0byBGSUxFIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgdGhlIG1lc3NhZ2UgdG8gdGhlIFNNVFAgc2VydmVyLiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNlbmRlcicsIHJlcXVpcmVkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUaGUgdmFsdWUgb2YgdGhlIEZyb206IGhlYWRlciAocmVxdWlyZWQpJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcicsICctLXJlY2lwaWVudCcsIHJlcXVpcmVkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J2FwcGVuZCcsIG1ldGF2YXI9J1JFQ0lQSUVOVCcsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVtdLCBkZXN0PSdyZWNpcGllbnRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0EgVG86IGhlYWRlciB2YWx1ZSAoYXQgbGVhc3Qgb25lIHJlcXVpcmVkKScpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBkaXJlY3RvcnkgPSBhcmdzLmRpcmVjdG9yeQogICAgIGlmIG5vdCBkaXJlY3Rvcnk6CiAgICAgICAgIGRpcmVjdG9yeSA9ICcuJwogICAgICMgQ3JlYXRlIHRoZSBlbmNsb3NpbmcgKG91dGVyKSBtZXNzYWdlCiAgICAgb3V0ZXIgPSBNSU1FTXVsdGlwYXJ0KCkKICAgICBvdXRlclsnU3ViamVjdCddID0gJ0NvbnRlbnRzIG9mIGRpcmVjdG9yeSAlcycgJSBvcy5wYXRoLmFic3BhdGgoZGlyZWN0b3J5KQotICAgIG91dGVyWydUbyddID0gQ09NTUFTUEFDRS5qb2luKG9wdHMucmVjaXBpZW50cykKLSAgICBvdXRlclsnRnJvbSddID0gb3B0cy5zZW5kZXIKKyAgICBvdXRlclsnVG8nXSA9IENPTU1BU1BBQ0Uuam9pbihhcmdzLnJlY2lwaWVudHMpCisgICAgb3V0ZXJbJ0Zyb20nXSA9IGFyZ3Muc2VuZGVyCiAgICAgb3V0ZXIucHJlYW1ibGUgPSAnWW91IHdpbGwgbm90IHNlZSB0aGlzIGluIGEgTUlNRS1hd2FyZSBtYWlsIHJlYWRlci5cbicKIAogICAgIGZvciBmaWxlbmFtZSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CkBAIC03NiwyMyArNjgsMTkgQEAKICAgICAgICAgICAgIGN0eXBlID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScKICAgICAgICAgbWFpbnR5cGUsIHN1YnR5cGUgPSBjdHlwZS5zcGxpdCgnLycsIDEpCiAgICAgICAgIGlmIG1haW50eXBlID09ICd0ZXh0JzoKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoKQotICAgICAgICAgICAgIyBOb3RlOiB3ZSBzaG91bGQgaGFuZGxlIGNhbGN1bGF0aW5nIHRoZSBjaGFyc2V0Ci0gICAgICAgICAgICBtc2cgPSBNSU1FVGV4dChmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZnA6CisgICAgICAgICAgICAgICAgIyBOb3RlOiB3ZSBzaG91bGQgaGFuZGxlIGNhbGN1bGF0aW5nIHRoZSBjaGFyc2V0CisgICAgICAgICAgICAgICAgbXNnID0gTUlNRVRleHQoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQogICAgICAgICBlbGlmIG1haW50eXBlID09ICdpbWFnZSc6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCwgJ3JiJykKLSAgICAgICAgICAgIG1zZyA9IE1JTUVJbWFnZShmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbXNnID0gTUlNRUltYWdlKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKICAgICAgICAgZWxpZiBtYWludHlwZSA9PSAnYXVkaW8nOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FQXVkaW8oZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVBdWRpbyhmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCwgJ3JiJykKLSAgICAgICAgICAgIG1zZyA9IE1JTUVCYXNlKG1haW50eXBlLCBzdWJ0eXBlKQotICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKGZwLnJlYWQoKSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FQmFzZShtYWludHlwZSwgc3VidHlwZSkKKyAgICAgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoZnAucmVhZCgpKQogICAgICAgICAgICAgIyBFbmNvZGUgdGhlIHBheWxvYWQgdXNpbmcgQmFzZTY0CiAgICAgICAgICAgICBlbmNvZGVycy5lbmNvZGVfYmFzZTY0KG1zZykKICAgICAgICAgIyBTZXQgdGhlIGZpbGVuYW1lIHBhcmFtZXRlcgpAQCAtMTAwLDE0ICs4OCwxMiBAQAogICAgICAgICBvdXRlci5hdHRhY2gobXNnKQogICAgICMgTm93IHNlbmQgb3Igc3RvcmUgdGhlIG1lc3NhZ2UKICAgICBjb21wb3NlZCA9IG91dGVyLmFzX3N0cmluZygpCi0gICAgaWYgb3B0cy5vdXRwdXQ6Ci0gICAgICAgIGZwID0gb3BlbihvcHRzLm91dHB1dCwgJ3cnKQotICAgICAgICBmcC53cml0ZShjb21wb3NlZCkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgIGlmIGFyZ3Mub3V0cHV0OgorICAgICAgICB3aXRoIG9wZW4oYXJncy5vdXRwdXQsICd3JykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShjb21wb3NlZCkKICAgICBlbHNlOgotICAgICAgICBzID0gc210cGxpYi5TTVRQKCdsb2NhbGhvc3QnKQotICAgICAgICBzLnNlbmRtYWlsKG9wdHMuc2VuZGVyLCBvcHRzLnJlY2lwaWVudHMsIGNvbXBvc2VkKQotICAgICAgICBzLnF1aXQoKQorICAgICAgICB3aXRoIHNtdHBsaWIuU01UUCgnbG9jYWxob3N0JykgYXMgczoKKyAgICAgICAgICAgIHMuc2VuZG1haWwoYXJncy5zZW5kZXIsIGFyZ3MucmVjaXBpZW50cywgY29tcG9zZWQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5CmluZGV4IDM2NTM1NDMuLjU3NGEwYjYgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkKKysrIGIvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weQpAQCAtOCw0MSArOCwyNyBAQAogaW1wb3J0IGVycm5vCiBpbXBvcnQgbWltZXR5cGVzCiAKLWZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRQYXJzZXIKIAogCiBkZWYgbWFpbigpOgotICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT0iIiJcCisgICAgcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IiIiXAogVW5wYWNrIGEgTUlNRSBtZXNzYWdlIGludG8gYSBkaXJlY3Rvcnkgb2YgZmlsZXMuCi0KLVVzYWdlOiAlcHJvZyBbb3B0aW9uc10gbXNnZmlsZQogIiIiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWRpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJVbnBhY2sgdGhlIE1JTUUgbWVzc2FnZSBpbnRvIHRoZSBuYW1lZAotICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeQotICAgICAgICAgICAgICAgICAgICAgIGV4aXN0LiIiIikKLSAgICBvcHRzLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotICAgIGlmIG5vdCBvcHRzLmRpcmVjdG9yeToKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGlyZWN0b3J5JywgcmVxdWlyZWQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiVW5wYWNrIHRoZSBNSU1FIG1lc3NhZ2UgaW50byB0aGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QuIiIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ21zZ2ZpbGUnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICB3aXRoIG9wZW4oYXJncy5tc2dmaWxlKSBhcyBmcDoKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCiAKICAgICB0cnk6Ci0gICAgICAgIG1zZ2ZpbGUgPSBhcmdzWzBdCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIHRyeToKLSAgICAgICAgb3MubWtkaXIob3B0cy5kaXJlY3RvcnkpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgIyBJZ25vcmUgZGlyZWN0b3J5IGV4aXN0cyBlcnJvcgotICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0KLSAgICBmcCA9IG9wZW4obXNnZmlsZSkKLSAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCkKLSAgICBmcC5jbG9zZSgpCisgICAgICAgIG9zLm1rZGlyKGFyZ3MuZGlyZWN0b3J5KQorICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgIHBhc3MKIAogICAgIGNvdW50ZXIgPSAxCiAgICAgZm9yIHBhcnQgaW4gbXNnLndhbGsoKToKQEAgLTU5LDkgKzQ1LDggQEAKICAgICAgICAgICAgICAgICBleHQgPSAnLmJpbicKICAgICAgICAgICAgIGZpbGVuYW1lID0gJ3BhcnQtJTAzZCVzJyAlIChjb3VudGVyLCBleHQpCiAgICAgICAgIGNvdW50ZXIgKz0gMQotICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKG9wdHMuZGlyZWN0b3J5LCBmaWxlbmFtZSksICd3YicpCi0gICAgICAgIGZwLndyaXRlKHBhcnQuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oYXJncy5kaXJlY3RvcnksIGZpbGVuYW1lKSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShwYXJ0LmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkgYi9Eb2MvaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc2M2VhOS4uMDAwMDAwMAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi0jCi0jIFNpbXBsZSBiZW5jaG1hcmtzIGZvciB0aGUgbXVsdGlwcm9jZXNzaW5nIHBhY2thZ2UKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgdGltZQotaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHF1ZXVlCi1pbXBvcnQgZ2MKLQotX3RpbWVyID0gdGltZS5wZXJmX2NvdW50ZXIKLQotZGVsdGEgPSAxCi0KLQotIyMjIyBURVNUX1FVRVVFU1BFRUQKLQotZGVmIHF1ZXVlc3BlZWRfZnVuYyhxLCBjLCBpdGVyYXRpb25zKToKLSAgICBhID0gJzAnICogMjU2Ci0gICAgYy5hY3F1aXJlKCkKLSAgICBjLm5vdGlmeSgpCi0gICAgYy5yZWxlYXNlKCkKLQotICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICBxLnB1dChhKQotCi0gICAgcS5wdXQoJ1NUT1AnKQotCi1kZWYgdGVzdF9xdWV1ZXNwZWVkKFByb2Nlc3MsIHEsIGMpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgcCA9IFByb2Nlc3ModGFyZ2V0PXF1ZXVlc3BlZWRfZnVuYywgYXJncz0ocSwgYywgaXRlcmF0aW9ucykpCi0gICAgICAgIGMuYWNxdWlyZSgpCi0gICAgICAgIHAuc3RhcnQoKQotICAgICAgICBjLndhaXQoKQotICAgICAgICBjLnJlbGVhc2UoKQotCi0gICAgICAgIHJlc3VsdCA9IE5vbmUKLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgd2hpbGUgcmVzdWx0ICE9ICdTVE9QJzoKLSAgICAgICAgICAgIHJlc3VsdCA9IHEuZ2V0KCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdvYmplY3RzIHBhc3NlZCB0aHJvdWdoIHRoZSBxdWV1ZSBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfUElQRVNQRUVECi0KLWRlZiBwaXBlX2Z1bmMoYywgY29uZCwgaXRlcmF0aW9ucyk6Ci0gICAgYSA9ICcwJyAqIDI1NgotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgY29uZC5ub3RpZnkoKQotICAgIGNvbmQucmVsZWFzZSgpCi0KLSAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgYy5zZW5kKGEpCi0KLSAgICBjLnNlbmQoJ1NUT1AnKQotCi1kZWYgdGVzdF9waXBlc3BlZWQoKToKLSAgICBjLCBkID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoKQotICAgIGNvbmQgPSBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKCkKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9cGlwZV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oZCwgY29uZCwgaXRlcmF0aW9ucykpCi0gICAgICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgICAgIHAuc3RhcnQoKQotICAgICAgICBjb25kLndhaXQoKQotICAgICAgICBjb25kLnJlbGVhc2UoKQotCi0gICAgICAgIHJlc3VsdCA9IE5vbmUKLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgd2hpbGUgcmVzdWx0ICE9ICdTVE9QJzoKLSAgICAgICAgICAgIHJlc3VsdCA9IGMucmVjdigpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotICAgICAgICBwLmpvaW4oKQotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ29iamVjdHMgcGFzc2VkIHRocm91Z2ggY29ubmVjdGlvbiBpbicsZWxhcHNlZCwnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX1NFUVNQRUVECi0KLWRlZiB0ZXN0X3NlcXNwZWVkKHNlcSk6Ci0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgICAgIGEgPSBzZXFbNV0KLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICBwcmludChpdGVyYXRpb25zLCAnaXRlcmF0aW9ucyBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfTE9DSwotCi1kZWYgdGVzdF9sb2Nrc3BlZWQobCk6Ci0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgICAgIGwuYWNxdWlyZSgpCi0gICAgICAgICAgICBsLnJlbGVhc2UoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdpdGVyYXRpb25zIGluJywgZWxhcHNlZCwgJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9DT05ESVRJT04KLQotZGVmIGNvbmRpdGlvbnNwZWVkX2Z1bmMoYywgTik6Ci0gICAgYy5hY3F1aXJlKCkKLSAgICBjLm5vdGlmeSgpCi0KLSAgICBmb3IgaSBpbiByYW5nZShOKToKLSAgICAgICAgYy53YWl0KCkKLSAgICAgICAgYy5ub3RpZnkoKQotCi0gICAgYy5yZWxlYXNlKCkKLQotZGVmIHRlc3RfY29uZGl0aW9uc3BlZWQoUHJvY2VzcywgYyk6Ci0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICBjLmFjcXVpcmUoKQotICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9Y29uZGl0aW9uc3BlZWRfZnVuYywgYXJncz0oYywgaXRlcmF0aW9ucykpCi0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgICAgIGMud2FpdCgpCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBjLm5vdGlmeSgpCi0gICAgICAgICAgICBjLndhaXQoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLQotICAgICAgICBjLnJlbGVhc2UoKQotICAgICAgICBwLmpvaW4oKQotCi0gICAgcHJpbnQoaXRlcmF0aW9ucyAqIDIsICd3YWl0cyBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMgKiAyIC8gZWxhcHNlZCkKLQotIyMjIwotCi1kZWYgdGVzdCgpOgotICAgIG1hbmFnZXIgPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCi0KLSAgICBnYy5kaXNhYmxlKCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBRdWV1ZS5RdWV1ZVxuJykKLSAgICB0ZXN0X3F1ZXVlc3BlZWQodGhyZWFkaW5nLlRocmVhZCwgcXVldWUuUXVldWUoKSwKLSAgICAgICAgICAgICAgICAgICAgdGhyZWFkaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuUXVldWVcbicpCi0gICAgdGVzdF9xdWV1ZXNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKSwKLSAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBRdWV1ZSBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfcXVldWVzcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbWFuYWdlci5RdWV1ZSgpLAotICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuUGlwZVxuJykKLSAgICB0ZXN0X3BpcGVzcGVlZCgpCi0KLSAgICBwcmludCgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbGlzdFxuJykKLSAgICB0ZXN0X3NlcXNwZWVkKGxpc3QocmFuZ2UoMTApKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbGlzdCBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3Rfc2Vxc3BlZWQobWFuYWdlci5saXN0KGxpc3QocmFuZ2UoMTApKSkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIEFycmF5KCJpIiwgLi4uLCBsb2NrPUZhbHNlKVxuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG11bHRpcHJvY2Vzc2luZy5BcnJheSgnaScsIGxpc3QocmFuZ2UoMTApKSwgbG9jaz1GYWxzZSkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIEFycmF5KCJpIiwgLi4uLCBsb2NrPVRydWUpXG4nKQotICAgIHRlc3Rfc2Vxc3BlZWQobXVsdGlwcm9jZXNzaW5nLkFycmF5KCdpJywgbGlzdChyYW5nZSgxMCkpLCBsb2NrPVRydWUpKQotCi0gICAgcHJpbnQoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIHRocmVhZGluZy5Mb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKHRocmVhZGluZy5Mb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIHRocmVhZGluZy5STG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZCh0aHJlYWRpbmcuUkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQobXVsdGlwcm9jZXNzaW5nLkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlJMb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG11bHRpcHJvY2Vzc2luZy5STG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBsb2NrIG1hbmFnZWQgYnkgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQobWFuYWdlci5Mb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIHJsb2NrIG1hbmFnZWQgYnkgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQobWFuYWdlci5STG9jaygpKQotCi0gICAgcHJpbnQoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIHRocmVhZGluZy5Db25kaXRpb25cbicpCi0gICAgdGVzdF9jb25kaXRpb25zcGVlZCh0aHJlYWRpbmcuVGhyZWFkLCB0aHJlYWRpbmcuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb25cbicpCi0gICAgdGVzdF9jb25kaXRpb25zcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBjb25kaXRpb24gbWFuYWdlZCBieSBhIHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG1hbmFnZXIuQ29uZGl0aW9uKCkpCi0KLSAgICBnYy5lbmFibGUoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG11bHRpcHJvY2Vzc2luZy5mcmVlemVfc3VwcG9ydCgpCi0gICAgdGVzdCgpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weSBiL0RvYy9pbmNsdWRlcy9tcF9uZXd0eXBlLnB5CmluZGV4IDcyOTE3NDMuLjFjNzk2YTUgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF9uZXd0eXBlLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9tcF9uZXd0eXBlLnB5CkBAIC0xLDExICsxLDMgQEAKLSMKLSMgVGhpcyBtb2R1bGUgc2hvd3MgaG93IHRvIHVzZSBhcmJpdHJhcnkgY2FsbGFibGVzIHdpdGggYSBzdWJjbGFzcyBvZgotIyBgQmFzZU1hbmFnZXJgLgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBmcmVlemVfc3VwcG9ydAogZnJvbSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMgaW1wb3J0IEJhc2VNYW5hZ2VyLCBCYXNlUHJveHkKIGltcG9ydCBvcGVyYXRvcgpAQCAtMjcsMTIgKzE5LDEwIEBACiAKICMgUHJveHkgdHlwZSBmb3IgZ2VuZXJhdG9yIG9iamVjdHMKIGNsYXNzIEdlbmVyYXRvclByb3h5KEJhc2VQcm94eSk6Ci0gICAgX2V4cG9zZWRfID0gKCduZXh0JywgJ19fbmV4dF9fJykKKyAgICBfZXhwb3NlZF8gPSBbJ19fbmV4dF9fJ10KICAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCiAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fY2FsbG1ldGhvZCgnbmV4dCcpCi0gICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fY2FsbG1ldGhvZCgnX19uZXh0X18nKQogCiAjIEZ1bmN0aW9uIHRvIHJldHVybiB0aGUgb3BlcmF0b3IgbW9kdWxlCkBAIC05MCw4ICs4MCw2IEBACiAgICAgb3AgPSBtYW5hZ2VyLm9wZXJhdG9yKCkKICAgICBwcmludCgnb3AuYWRkKDIzLCA0NSkgPScsIG9wLmFkZCgyMywgNDUpKQogICAgIHByaW50KCdvcC5wb3coMiwgOTQpID0nLCBvcC5wb3coMiwgOTQpKQotICAgIHByaW50KCdvcC5nZXRzbGljZShyYW5nZSgxMCksIDIsIDYpID0nLCBvcC5nZXRzbGljZShsaXN0KHJhbmdlKDEwKSksIDIsIDYpKQotICAgIHByaW50KCdvcC5yZXBlYXQocmFuZ2UoNSksIDMpID0nLCBvcC5yZXBlYXQobGlzdChyYW5nZSg1KSksIDMpKQogICAgIHByaW50KCdvcC5fZXhwb3NlZF8gPScsIG9wLl9leHBvc2VkXykKIAogIyMKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5IGIvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkKaW5kZXggMTU3ODQ5OC4uMTExMDFlMSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkKKysrIGIvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkKQEAgLTEsMTAgKzEsMyBAQAotIwotIyBBIHRlc3Qgb2YgYG11bHRpcHJvY2Vzc2luZy5Qb29sYCBjbGFzcwotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgcmFuZG9tCkBAIC00NiwyNjkgKzM5LDExNSBAQAogIwogCiBkZWYgdGVzdCgpOgotICAgIHByaW50KCdjcHVfY291bnQoKSA9ICVkXG4nICUgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQotCi0gICAgIwotICAgICMgQ3JlYXRlIHBvb2wKLSAgICAjCi0KICAgICBQUk9DRVNTRVMgPSA0CiAgICAgcHJpbnQoJ0NyZWF0aW5nIHBvb2wgd2l0aCAlZCBwcm9jZXNzZXNcbicgJSBQUk9DRVNTRVMpCi0gICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKFBST0NFU1NFUykKLSAgICBwcmludCgncG9vbCA9ICVzJyAlIHBvb2wpCi0gICAgcHJpbnQoKQogCi0gICAgIwotICAgICMgVGVzdHMKLSAgICAjCisgICAgd2l0aCBtdWx0aXByb2Nlc3NpbmcuUG9vbChQUk9DRVNTRVMpIGFzIHBvb2w6CisgICAgICAgICMKKyAgICAgICAgIyBUZXN0cworICAgICAgICAjCiAKLSAgICBUQVNLUyA9IFsobXVsLCAoaSwgNykpIGZvciBpIGluIHJhbmdlKDEwKV0gKyBcCi0gICAgICAgICAgICBbKHBsdXMsIChpLCA4KSkgZm9yIGkgaW4gcmFuZ2UoMTApXQorICAgICAgICBUQVNLUyA9IFsobXVsLCAoaSwgNykpIGZvciBpIGluIHJhbmdlKDEwKV0gKyBcCisgICAgICAgICAgICAgICAgWyhwbHVzLCAoaSwgOCkpIGZvciBpIGluIHJhbmdlKDEwKV0KIAotICAgIHJlc3VsdHMgPSBbcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIHQpIGZvciB0IGluIFRBU0tTXQotICAgIGltYXBfaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCi0gICAgaW1hcF91bm9yZGVyZWRfaXQgPSBwb29sLmltYXBfdW5vcmRlcmVkKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQorICAgICAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCB0KSBmb3IgdCBpbiBUQVNLU10KKyAgICAgICAgaW1hcF9pdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKKyAgICAgICAgaW1hcF91bm9yZGVyZWRfaXQgPSBwb29sLmltYXBfdW5vcmRlcmVkKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQogCi0gICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmFwcGx5X2FzeW5jKCk6JykKLSAgICBmb3IgciBpbiByZXN1bHRzOgotICAgICAgICBwcmludCgnXHQnLCByLmdldCgpKQotICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmFwcGx5X2FzeW5jKCk6JykKKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHIuZ2V0KCkpCisgICAgICAgIHByaW50KCkKIAotICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwKCk6JykKLSAgICBmb3IgeCBpbiBpbWFwX2l0OgotICAgICAgICBwcmludCgnXHQnLCB4KQotICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXAoKTonKQorICAgICAgICBmb3IgeCBpbiBpbWFwX2l0OgorICAgICAgICAgICAgcHJpbnQoJ1x0JywgeCkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgcHJpbnQoJ1Vub3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcF91bm9yZGVyZWQoKTonKQotICAgIGZvciB4IGluIGltYXBfdW5vcmRlcmVkX2l0OgotICAgICAgICBwcmludCgnXHQnLCB4KQotICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoJ1Vub3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcF91bm9yZGVyZWQoKTonKQorICAgICAgICBmb3IgeCBpbiBpbWFwX3Vub3JkZXJlZF9pdDoKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5tYXAoKSAtLS0gd2lsbCBibG9jayB0aWxsIGNvbXBsZXRlOicpCi0gICAgZm9yIHggaW4gcG9vbC5tYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpOgotICAgICAgICBwcmludCgnXHQnLCB4KQotICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLm1hcCgpIC0tLSB3aWxsIGJsb2NrIHRpbGwgY29tcGxldGU6JykKKyAgICAgICAgZm9yIHggaW4gcG9vbC5tYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpOgorICAgICAgICAgICAgcHJpbnQoJ1x0JywgeCkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgIwotICAgICMgU2ltcGxlIGJlbmNobWFya3MKLSAgICAjCisgICAgICAgICMKKyAgICAgICAgIyBUZXN0IGVycm9yIGhhbmRsaW5nCisgICAgICAgICMKIAotICAgIE4gPSAxMDAwMDAKLSAgICBwcmludCgnZGVmIHBvdzMoeCk6IHJldHVybiB4KiozJykKKyAgICAgICAgcHJpbnQoJ1Rlc3RpbmcgZXJyb3IgaGFuZGxpbmc6JykKIAotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEEgPSBsaXN0KG1hcChwb3czLCByYW5nZShOKSkpCi0gICAgcHJpbnQoJ1x0bWFwKHBvdzMsIHJhbmdlKCVkKSk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKE4sIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBCID0gcG9vbC5tYXAocG93MywgcmFuZ2UoTikpCi0gICAgcHJpbnQoJ1x0cG9vbC5tYXAocG93MywgcmFuZ2UoJWQpKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAoTiwgdGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEMgPSBsaXN0KHBvb2wuaW1hcChwb3czLCByYW5nZShOKSwgY2h1bmtzaXplPU4vLzgpKQotICAgIHByaW50KCdcdGxpc3QocG9vbC5pbWFwKHBvdzMsIHJhbmdlKCVkKSwgY2h1bmtzaXplPSVkKSk6XG5cdFx0JXMnIFwKLSAgICAgICAgICAnIHNlY29uZHMnICUgKE4sIE4vLzgsIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICBhc3NlcnQgQSA9PSBCID09IEMsIChsZW4oQSksIGxlbihCKSwgbGVuKEMpKQotICAgIHByaW50KCkKLQotICAgIEwgPSBbTm9uZV0gKiAxMDAwMDAwCi0gICAgcHJpbnQoJ2RlZiBub29wKHgpOiBwYXNzJykKLSAgICBwcmludCgnTCA9IFtOb25lXSAqIDEwMDAwMDAnKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQSA9IGxpc3QobWFwKG5vb3AsIEwpKQotICAgIHByaW50KCdcdG1hcChub29wLCBMKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAodGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEIgPSBwb29sLm1hcChub29wLCBMKQotICAgIHByaW50KCdcdHBvb2wubWFwKG5vb3AsIEwpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgICh0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQyA9IGxpc3QocG9vbC5pbWFwKG5vb3AsIEwsIGNodW5rc2l6ZT1sZW4oTCkvLzgpKQotICAgIHByaW50KCdcdGxpc3QocG9vbC5pbWFwKG5vb3AsIEwsIGNodW5rc2l6ZT0lZCkpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgIChsZW4oTCkvLzgsIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICBhc3NlcnQgQSA9PSBCID09IEMsIChsZW4oQSksIGxlbihCKSwgbGVuKEMpKQotICAgIHByaW50KCkKLQotICAgIGRlbCBBLCBCLCBDLCBMCi0KLSAgICAjCi0gICAgIyBUZXN0IGVycm9yIGhhbmRsaW5nCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgZXJyb3IgaGFuZGxpbmc6JykKLQotICAgIHRyeToKLSAgICAgICAgcHJpbnQocG9vbC5hcHBseShmLCAoNSwpKSkKLSAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIHBvb2wuYXBwbHkoKScpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKLQotICAgIHRyeToKLSAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkKLSAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIHBvb2wubWFwKCknKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KGxpc3QocG9vbC5pbWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpKQotICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gbGlzdChwb29sLmltYXAoKSknKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCi0KLSAgICBpdCA9IHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpCi0gICAgZm9yIGkgaW4gcmFuZ2UoMTApOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB4ID0gbmV4dChpdCkKKyAgICAgICAgICAgIHByaW50KHBvb2wuYXBwbHkoZiwgKDUsKSkpCiAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGlmIGkgPT0gNToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIHBvb2wuYXBwbHkoKScpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBpID09IDU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICBhc3NlcnQgaSA9PSA5Ci0gICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gSU1hcEl0ZXJhdG9yLm5leHQoKScpCi0gICAgcHJpbnQoKQotCi0gICAgIwotICAgICMgVGVzdGluZyB0aW1lb3V0cwotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIEFwcGx5UmVzdWx0LmdldCgpIHdpdGggdGltZW91dDonLCBlbmQ9JyAnKQotICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCBUQVNLU1swXSkKLSAgICB3aGlsZSAxOgotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIHJlcy5nZXQoMC4wMikpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQotICAgIHByaW50KCkKLSAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChwb29sLm1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLm1hcCgpJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICBwcmludCgnVGVzdGluZyBJTWFwSXRlcmF0b3IubmV4dCgpIHdpdGggdGltZW91dDonLCBlbmQ9JyAnKQotICAgIGl0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcblx0JXMnICUgaXQubmV4dCgwLjAyKSkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQotICAgIHByaW50KCkKLSAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChsaXN0KHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gbGlzdChwb29sLmltYXAoKSknKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgICMKLSAgICAjIFRlc3RpbmcgY2FsbGJhY2sKLSAgICAjCisgICAgICAgIGl0ID0gcG9vbC5pbWFwKGYsIGxpc3QocmFuZ2UoMTApKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHggPSBuZXh0KGl0KQorICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaSA9PSA1OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgcHJpbnQoJ1Rlc3RpbmcgY2FsbGJhY2s6JykKKyAgICAgICAgYXNzZXJ0IGkgPT0gOQorICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBJTWFwSXRlcmF0b3IubmV4dCgpJykKKyAgICAgICAgcHJpbnQoKQogCi0gICAgQSA9IFtdCi0gICAgQiA9IFs1NiwgMCwgMSwgOCwgMjcsIDY0LCAxMjUsIDIxNiwgMzQzLCA1MTIsIDcyOV0KKyAgICAgICAgIworICAgICAgICAjIFRlc3RpbmcgdGltZW91dHMKKyAgICAgICAgIwogCi0gICAgciA9IHBvb2wuYXBwbHlfYXN5bmMobXVsLCAoNywgOCksIGNhbGxiYWNrPUEuYXBwZW5kKQotICAgIHIud2FpdCgpCisgICAgICAgIHByaW50KCdUZXN0aW5nIEFwcGx5UmVzdWx0LmdldCgpIHdpdGggdGltZW91dDonLCBlbmQ9JyAnKQorICAgICAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgVEFTS1NbMF0pCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcblx0JXMnICUgcmVzLmdldCgwLjAyKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgciA9IHBvb2wubWFwX2FzeW5jKHBvdzMsIGxpc3QocmFuZ2UoMTApKSwgY2FsbGJhY2s9QS5leHRlbmQpCi0gICAgci53YWl0KCkKLQotICAgIGlmIEEgPT0gQjoKLSAgICAgICAgcHJpbnQoJ1x0Y2FsbGJhY2tzIHN1Y2NlZWRlZFxuJykKLSAgICBlbHNlOgotICAgICAgICBwcmludCgnXHQqKiogY2FsbGJhY2tzIGZhaWxlZFxuXHRcdCVzICE9ICVzXG4nICUgKEEsIEIpKQotCi0gICAgIwotICAgICMgQ2hlY2sgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHRhc2tzCi0gICAgIwotCi0gICAgYXNzZXJ0IG5vdCBwb29sLl9jYWNoZSwgJ2NhY2hlID0gJXInICUgcG9vbC5fY2FjaGUKLQotICAgICMKLSAgICAjIENoZWNrIGNsb3NlKCkgbWV0aG9kcwotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGNsb3NlKCk6JykKLQotICAgIGZvciB3b3JrZXIgaW4gcG9vbC5fcG9vbDoKLSAgICAgICAgYXNzZXJ0IHdvcmtlci5pc19hbGl2ZSgpCi0KLSAgICByZXN1bHQgPSBwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFswLjVdKQotICAgIHBvb2wuY2xvc2UoKQotICAgIHBvb2wuam9pbigpCi0KLSAgICBhc3NlcnQgcmVzdWx0LmdldCgpIGlzIE5vbmUKLQotICAgIGZvciB3b3JrZXIgaW4gcG9vbC5fcG9vbDoKLSAgICAgICAgYXNzZXJ0IG5vdCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcHJpbnQoJ1x0Y2xvc2UoKSBzdWNjZWVkZWRcbicpCi0KLSAgICAjCi0gICAgIyBDaGVjayB0ZXJtaW5hdGUoKSBtZXRob2QKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyB0ZXJtaW5hdGUoKTonKQotCi0gICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpCi0gICAgREVMVEEgPSAwLjEKLSAgICBpZ25vcmUgPSBwb29sLmFwcGx5KHBvdzMsIFsyXSkKLSAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmModGltZS5zbGVlcCwgW0RFTFRBXSkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0KLSAgICBwb29sLnRlcm1pbmF0ZSgpCi0gICAgcG9vbC5qb2luKCkKLQotICAgIGZvciB3b3JrZXIgaW4gcG9vbC5fcG9vbDoKLSAgICAgICAgYXNzZXJ0IG5vdCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcHJpbnQoJ1x0dGVybWluYXRlKCkgc3VjY2VlZGVkXG4nKQotCi0gICAgIwotICAgICMgQ2hlY2sgZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uOicpCi0KLSAgICBwb29sID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woMikKLSAgICBERUxUQSA9IDAuMQotICAgIHByb2Nlc3NlcyA9IHBvb2wuX3Bvb2wKLSAgICBpZ25vcmUgPSBwb29sLmFwcGx5KHBvdzMsIFsyXSkKLSAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmModGltZS5zbGVlcCwgW0RFTFRBXSkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0KLQotICAgIHJlc3VsdHMgPSBwb29sID0gTm9uZQotCi0gICAgdGltZS5zbGVlcChERUxUQSAqIDIpCi0KLSAgICBmb3Igd29ya2VyIGluIHByb2Nlc3NlczoKLSAgICAgICAgYXNzZXJ0IG5vdCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcHJpbnQoJ1x0Z2FyYmFnZSBjb2xsZWN0aW9uIHN1Y2NlZWRlZFxuJykKKyAgICAgICAgcHJpbnQoJ1Rlc3RpbmcgSU1hcEl0ZXJhdG9yLm5leHQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKKyAgICAgICAgaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcblx0JXMnICUgaXQubmV4dCgwLjAyKSkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBwcmludCgpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotCi0gICAgYXNzZXJ0IGxlbihzeXMuYXJndikgaW4gKDEsIDIpCi0KLSAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDEgb3Igc3lzLmFyZ3ZbMV0gPT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgcHJvY2Vzc2VzICcuY2VudGVyKDc5LCAnLScpKQotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gJ3RocmVhZHMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHRocmVhZHMgJy5jZW50ZXIoNzksICctJykpCi0gICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcuZHVtbXkgYXMgbXVsdGlwcm9jZXNzaW5nCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ1VzYWdlOlxuXHQlcyBbcHJvY2Vzc2VzIHwgdGhyZWFkc10nICUgc3lzLmFyZ3ZbMF0pCi0gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMikKLQogICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5IGIvRG9jL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWRiYzM4Li4wMDAwMDAwCi0tLSBhL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0jCi0jIEEgdGVzdCBmaWxlIGZvciB0aGUgYG11bHRpcHJvY2Vzc2luZ2AgcGFja2FnZQotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KLWltcG9ydCB0aW1lCi1pbXBvcnQgc3lzCi1pbXBvcnQgcmFuZG9tCi1mcm9tIHF1ZXVlIGltcG9ydCBFbXB0eQotCi1pbXBvcnQgbXVsdGlwcm9jZXNzaW5nICAgICAgICAgICAgICAgIyBtYXkgZ2V0IG92ZXJ3cml0dGVuCi0KLQotIyMjIyBURVNUX1ZBTFVFCi0KLWRlZiB2YWx1ZV9mdW5jKHJ1bm5pbmcsIG11dGV4KToKLSAgICByYW5kb20uc2VlZCgpCi0gICAgdGltZS5zbGVlcChyYW5kb20ucmFuZG9tKCkqNCkKLQotICAgIG11dGV4LmFjcXVpcmUoKQotICAgIHByaW50KCdcblx0XHRcdCcgKyBzdHIobXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKSArICcgaGFzIGZpbmlzaGVkJykKLSAgICBydW5uaW5nLnZhbHVlIC09IDEKLSAgICBtdXRleC5yZWxlYXNlKCkKLQotZGVmIHRlc3RfdmFsdWUoKToKLSAgICBUQVNLUyA9IDEwCi0gICAgcnVubmluZyA9IG11bHRpcHJvY2Vzc2luZy5WYWx1ZSgnaScsIFRBU0tTKQotICAgIG11dGV4ID0gbXVsdGlwcm9jZXNzaW5nLkxvY2soKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoVEFTS1MpOgotICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXZhbHVlX2Z1bmMsIGFyZ3M9KHJ1bm5pbmcsIG11dGV4KSkKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICB3aGlsZSBydW5uaW5nLnZhbHVlID4gMDoKLSAgICAgICAgdGltZS5zbGVlcCgwLjA4KQotICAgICAgICBtdXRleC5hY3F1aXJlKCkKLSAgICAgICAgcHJpbnQocnVubmluZy52YWx1ZSwgZW5kPScgJykKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIG11dGV4LnJlbGVhc2UoKQotCi0gICAgcHJpbnQoKQotICAgIHByaW50KCdObyBtb3JlIHJ1bm5pbmcgcHJvY2Vzc2VzJykKLQotCi0jIyMjIFRFU1RfUVVFVUUKLQotZGVmIHF1ZXVlX2Z1bmMocXVldWUpOgotICAgIGZvciBpIGluIHJhbmdlKDMwKToKLSAgICAgICAgdGltZS5zbGVlcCgwLjUgKiByYW5kb20ucmFuZG9tKCkpCi0gICAgICAgIHF1ZXVlLnB1dChpKmkpCi0gICAgcXVldWUucHV0KCdTVE9QJykKLQotZGVmIHRlc3RfcXVldWUoKToKLSAgICBxID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKLQotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9cXVldWVfZnVuYywgYXJncz0ocSwpKQotICAgIHAuc3RhcnQoKQotCi0gICAgbyA9IE5vbmUKLSAgICB3aGlsZSBvICE9ICdTVE9QJzoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbyA9IHEuZ2V0KHRpbWVvdXQ9MC4zKQotICAgICAgICAgICAgcHJpbnQobywgZW5kPScgJykKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBleGNlcHQgRW1wdHk6Ci0gICAgICAgICAgICBwcmludCgnVElNRU9VVCcpCi0KLSAgICBwcmludCgpCi0KLQotIyMjIyBURVNUX0NPTkRJVElPTgotCi1kZWYgY29uZGl0aW9uX2Z1bmMoY29uZCk6Ci0gICAgY29uZC5hY3F1aXJlKCkKLSAgICBwcmludCgnXHQnICsgc3RyKGNvbmQpKQotICAgIHRpbWUuc2xlZXAoMikKLSAgICBwcmludCgnXHRjaGlsZCBpcyBub3RpZnlpbmcnKQotICAgIHByaW50KCdcdCcgKyBzdHIoY29uZCkpCi0gICAgY29uZC5ub3RpZnkoKQotICAgIGNvbmQucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X2NvbmRpdGlvbigpOgotICAgIGNvbmQgPSBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKCkKLQotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Y29uZGl0aW9uX2Z1bmMsIGFyZ3M9KGNvbmQsKSkKLSAgICBwcmludChjb25kKQotCi0gICAgY29uZC5hY3F1aXJlKCkKLSAgICBwcmludChjb25kKQotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoY29uZCkKLQotICAgIHAuc3RhcnQoKQotCi0gICAgcHJpbnQoJ21haW4gaXMgd2FpdGluZycpCi0gICAgY29uZC53YWl0KCkKLSAgICBwcmludCgnbWFpbiBoYXMgd29rZW4gdXAnKQotCi0gICAgcHJpbnQoY29uZCkKLSAgICBjb25kLnJlbGVhc2UoKQotICAgIHByaW50KGNvbmQpCi0gICAgY29uZC5yZWxlYXNlKCkKLQotICAgIHAuam9pbigpCi0gICAgcHJpbnQoY29uZCkKLQotCi0jIyMjIFRFU1RfU0VNQVBIT1JFCi0KLWRlZiBzZW1hcGhvcmVfZnVuYyhzZW1hLCBtdXRleCwgcnVubmluZyk6Ci0gICAgc2VtYS5hY3F1aXJlKCkKLQotICAgIG11dGV4LmFjcXVpcmUoKQotICAgIHJ1bm5pbmcudmFsdWUgKz0gMQotICAgIHByaW50KHJ1bm5pbmcudmFsdWUsICd0YXNrcyBhcmUgcnVubmluZycpCi0gICAgbXV0ZXgucmVsZWFzZSgpCi0KLSAgICByYW5kb20uc2VlZCgpCi0gICAgdGltZS5zbGVlcChyYW5kb20ucmFuZG9tKCkqMikKLQotICAgIG11dGV4LmFjcXVpcmUoKQotICAgIHJ1bm5pbmcudmFsdWUgLT0gMQotICAgIHByaW50KCclcyBoYXMgZmluaXNoZWQnICUgbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKQotICAgIG11dGV4LnJlbGVhc2UoKQotCi0gICAgc2VtYS5yZWxlYXNlKCkKLQotZGVmIHRlc3Rfc2VtYXBob3JlKCk6Ci0gICAgc2VtYSA9IG11bHRpcHJvY2Vzc2luZy5TZW1hcGhvcmUoMykKLSAgICBtdXRleCA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCi0gICAgcnVubmluZyA9IG11bHRpcHJvY2Vzc2luZy5WYWx1ZSgnaScsIDApCi0KLSAgICBwcm9jZXNzZXMgPSBbCi0gICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZW1hcGhvcmVfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oc2VtYSwgbXV0ZXgsIHJ1bm5pbmcpKQotICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCkKLSAgICAgICAgXQotCi0gICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgotICAgICAgICBwLnN0YXJ0KCkKLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5qb2luKCkKLQotCi0jIyMjIFRFU1RfSk9JTl9USU1FT1VUCi0KLWRlZiBqb2luX3RpbWVvdXRfZnVuYygpOgotICAgIHByaW50KCdcdGNoaWxkIHNsZWVwaW5nJykKLSAgICB0aW1lLnNsZWVwKDUuNSkKLSAgICBwcmludCgnXG5cdGNoaWxkIHRlcm1pbmF0aW5nJykKLQotZGVmIHRlc3Rfam9pbl90aW1lb3V0KCk6Ci0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1qb2luX3RpbWVvdXRfZnVuYykKLSAgICBwLnN0YXJ0KCkKLQotICAgIHByaW50KCd3YWl0aW5nIGZvciBwcm9jZXNzIHRvIGZpbmlzaCcpCi0KLSAgICB3aGlsZSAxOgotICAgICAgICBwLmpvaW4odGltZW91dD0xKQotICAgICAgICBpZiBub3QgcC5pc19hbGl2ZSgpOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgcHJpbnQoJy4nLCBlbmQ9JyAnKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLQotCi0jIyMjIFRFU1RfRVZFTlQKLQotZGVmIGV2ZW50X2Z1bmMoZXZlbnQpOgotICAgIHByaW50KCdcdCVyIGlzIHdhaXRpbmcnICUgbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKQotICAgIGV2ZW50LndhaXQoKQotICAgIHByaW50KCdcdCVyIGhhcyB3b2tlbiB1cCcgJSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkpCi0KLWRlZiB0ZXN0X2V2ZW50KCk6Ci0gICAgZXZlbnQgPSBtdWx0aXByb2Nlc3NpbmcuRXZlbnQoKQotCi0gICAgcHJvY2Vzc2VzID0gW211bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1ldmVudF9mdW5jLCBhcmdzPShldmVudCwpKQotICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KV0KLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICBwcmludCgnbWFpbiBpcyBzbGVlcGluZycpCi0gICAgdGltZS5zbGVlcCgyKQotCi0gICAgcHJpbnQoJ21haW4gaXMgc2V0dGluZyBldmVudCcpCi0gICAgZXZlbnQuc2V0KCkKLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5qb2luKCkKLQotCi0jIyMjIFRFU1RfU0hBUkVEVkFMVUVTCi0KLWRlZiBzaGFyZWR2YWx1ZXNfZnVuYyh2YWx1ZXMsIGFycmF5cywgc2hhcmVkX3ZhbHVlcywgc2hhcmVkX2FycmF5cyk6Ci0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKHZhbHVlcykpOgotICAgICAgICB2ID0gdmFsdWVzW2ldWzFdCi0gICAgICAgIHN2ID0gc2hhcmVkX3ZhbHVlc1tpXS52YWx1ZQotICAgICAgICBhc3NlcnQgdiA9PSBzdgotCi0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKHZhbHVlcykpOgotICAgICAgICBhID0gYXJyYXlzW2ldWzFdCi0gICAgICAgIHNhID0gbGlzdChzaGFyZWRfYXJyYXlzW2ldWzpdKQotICAgICAgICBhc3NlcnQgYSA9PSBzYQotCi0gICAgcHJpbnQoJ1Rlc3RzIHBhc3NlZCcpCi0KLWRlZiB0ZXN0X3NoYXJlZHZhbHVlcygpOgotICAgIHZhbHVlcyA9IFsKLSAgICAgICAgKCdpJywgMTApLAotICAgICAgICAoJ2gnLCAtMiksCi0gICAgICAgICgnZCcsIDEuMjUpCi0gICAgICAgIF0KLSAgICBhcnJheXMgPSBbCi0gICAgICAgICgnaScsIGxpc3QocmFuZ2UoMTAwKSkpLAotICAgICAgICAoJ2QnLCBbMC4yNSAqIGkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0pLAotICAgICAgICAoJ0gnLCBsaXN0KHJhbmdlKDEwMDApKSkKLSAgICAgICAgXQotCi0gICAgc2hhcmVkX3ZhbHVlcyA9IFttdWx0aXByb2Nlc3NpbmcuVmFsdWUoaWQsIHYpIGZvciBpZCwgdiBpbiB2YWx1ZXNdCi0gICAgc2hhcmVkX2FycmF5cyA9IFttdWx0aXByb2Nlc3NpbmcuQXJyYXkoaWQsIGEpIGZvciBpZCwgYSBpbiBhcnJheXNdCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MoCi0gICAgICAgIHRhcmdldD1zaGFyZWR2YWx1ZXNfZnVuYywKLSAgICAgICAgYXJncz0odmFsdWVzLCBhcnJheXMsIHNoYXJlZF92YWx1ZXMsIHNoYXJlZF9hcnJheXMpCi0gICAgICAgICkKLSAgICBwLnN0YXJ0KCkKLSAgICBwLmpvaW4oKQotCi0gICAgYXNzZXJ0IHAuZXhpdGNvZGUgPT0gMAotCi0KLSMjIyMKLQotZGVmIHRlc3QobmFtZXNwYWNlPW11bHRpcHJvY2Vzc2luZyk6Ci0gICAgZ2xvYmFsIG11bHRpcHJvY2Vzc2luZwotCi0gICAgbXVsdGlwcm9jZXNzaW5nID0gbmFtZXNwYWNlCi0KLSAgICBmb3IgZnVuYyBpbiBbdGVzdF92YWx1ZSwgdGVzdF9xdWV1ZSwgdGVzdF9jb25kaXRpb24sCi0gICAgICAgICAgICAgICAgIHRlc3Rfc2VtYXBob3JlLCB0ZXN0X2pvaW5fdGltZW91dCwgdGVzdF9ldmVudCwKLSAgICAgICAgICAgICAgICAgdGVzdF9zaGFyZWR2YWx1ZXNdOgotCi0gICAgICAgIHByaW50KCdcblx0IyMjIyMjIyMgJXNcbicgJSBmdW5jLl9fbmFtZV9fKQotICAgICAgICBmdW5jKCkKLQotICAgIGlnbm9yZSA9IG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4oKSAgICAgICMgY2xlYW51cCBhbnkgb2xkIHByb2Nlc3NlcwotICAgIGlmIGhhc2F0dHIobXVsdGlwcm9jZXNzaW5nLCAnX2RlYnVnX2luZm8nKToKLSAgICAgICAgaW5mbyA9IG11bHRpcHJvY2Vzc2luZy5fZGVidWdfaW5mbygpCi0gICAgICAgIGlmIGluZm86Ci0gICAgICAgICAgICBwcmludChpbmZvKQotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndGhlcmUgc2hvdWxkIGJlIG5vIHBvc2l0aXZlIHJlZmNvdW50cyBsZWZ0JykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG11bHRpcHJvY2Vzc2luZy5mcmVlemVfc3VwcG9ydCgpCi0KLSAgICBhc3NlcnQgbGVuKHN5cy5hcmd2KSBpbiAoMSwgMikKLQotICAgIGlmIGxlbihzeXMuYXJndikgPT0gMSBvciBzeXMuYXJndlsxXSA9PSAncHJvY2Vzc2VzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyBwcm9jZXNzZXMgJy5jZW50ZXIoNzksICctJykpCi0gICAgICAgIG5hbWVzcGFjZSA9IG11bHRpcHJvY2Vzc2luZwotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gJ21hbmFnZXInOgotICAgICAgICBwcmludCgnIFVzaW5nIHByb2Nlc3NlcyBhbmQgYSBtYW5hZ2VyICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBuYW1lc3BhY2UgPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCi0gICAgICAgIG5hbWVzcGFjZS5Qcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKLSAgICAgICAgbmFtZXNwYWNlLmN1cnJlbnRfcHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MKLSAgICAgICAgbmFtZXNwYWNlLmFjdGl2ZV9jaGlsZHJlbiA9IG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4KLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICd0aHJlYWRzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyB0aHJlYWRzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmR1bW15IGFzIG5hbWVzcGFjZQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCdVc2FnZTpcblx0JXMgW3Byb2Nlc3NlcyB8IG1hbmFnZXIgfCB0aHJlYWRzXScgJSBzeXMuYXJndlswXSkKLSAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgyKQotCi0gICAgdGVzdChuYW1lc3BhY2UpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5IGIvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxMDI0ZC4uMDAwMDAwMAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotIwotIyBFeGFtcGxlIHdoZXJlIGEgcG9vbCBvZiBodHRwIHNlcnZlcnMgc2hhcmUgYSBzaW5nbGUgbGlzdGVuaW5nIHNvY2tldAotIwotIyBPbiBXaW5kb3dzIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gdGhlIGFiaWxpdHkgdG8gcGlja2xlIGEgc29ja2V0Ci0jIG9iamVjdCBzbyB0aGF0IHRoZSB3b3JrZXIgcHJvY2Vzc2VzIGNhbiBpbmhlcml0IGEgY29weSBvZiB0aGUgc2VydmVyCi0jIG9iamVjdC4gIChXZSBpbXBvcnQgYG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb25gIHRvIGVuYWJsZSB0aGlzIHBpY2tsaW5nLikKLSMKLSMgTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHN5bmNocm9uaXplIGFjY2VzcyB0byBgc29ja2V0LmFjY2VwdCgpYCBtZXRob2QgYnkKLSMgdXNpbmcgYSBwcm9jZXNzLXNoYXJlZCBsb2NrIC0tIGRvZXMgbm90IHNlZW0gdG8gYmUgbmVjZXNzYXJ5LgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgY3VycmVudF9wcm9jZXNzLCBmcmVlemVfc3VwcG9ydAotZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgSFRUUFNlcnZlcgotZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCi0KLWlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uICAgICMgbWFrZSBzb2NrZXRzIHBpY2thYmxlL2luaGVyaXRhYmxlCi0KLQotZGVmIG5vdGUoZm9ybWF0LCAqYXJncyk6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSgnWyVzXVx0JXNcbicgJSAoY3VycmVudF9wcm9jZXNzKCkubmFtZSwgZm9ybWF0ICUgYXJncykpCi0KLQotY2xhc3MgUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKLSAgICAjIHdlIG92ZXJyaWRlIGxvZ19tZXNzYWdlKCkgdG8gc2hvdyB3aGljaCBwcm9jZXNzIGlzIGhhbmRsaW5nIHRoZSByZXF1ZXN0Ci0gICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgotICAgICAgICBub3RlKGZvcm1hdCwgKmFyZ3MpCi0KLWRlZiBzZXJ2ZV9mb3JldmVyKHNlcnZlcik6Ci0gICAgbm90ZSgnc3RhcnRpbmcgc2VydmVyJykKLSAgICB0cnk6Ci0gICAgICAgIHNlcnZlci5zZXJ2ZV9mb3JldmVyKCkKLSAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgIHBhc3MKLQotCi1kZWYgcnVucG9vbChhZGRyZXNzLCBudW1iZXJfb2ZfcHJvY2Vzc2VzKToKLSAgICAjIGNyZWF0ZSBhIHNpbmdsZSBzZXJ2ZXIgb2JqZWN0IC0tIGNoaWxkcmVuIHdpbGwgZWFjaCBpbmhlcml0IGEgY29weQotICAgIHNlcnZlciA9IEhUVFBTZXJ2ZXIoYWRkcmVzcywgUmVxdWVzdEhhbmRsZXIpCi0KLSAgICAjIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMgdG8gYWN0IGFzIHdvcmtlcnMKLSAgICBmb3IgaSBpbiByYW5nZShudW1iZXJfb2ZfcHJvY2Vzc2VzIC0gMSk6Ci0gICAgICAgIFByb2Nlc3ModGFyZ2V0PXNlcnZlX2ZvcmV2ZXIsIGFyZ3M9KHNlcnZlciwpKS5zdGFydCgpCi0KLSAgICAjIG1haW4gcHJvY2VzcyBhbHNvIGFjdHMgYXMgYSB3b3JrZXIKLSAgICBzZXJ2ZV9mb3JldmVyKHNlcnZlcikKLQotCi1kZWYgdGVzdCgpOgotICAgIERJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nKQotICAgIEFERFJFU1MgPSAoJ2xvY2FsaG9zdCcsIDgwMDApCi0gICAgTlVNQkVSX09GX1BST0NFU1NFUyA9IDQKLQotICAgIHByaW50KCdTZXJ2aW5nIGF0IGh0dHA6Ly8lczolZCB1c2luZyAlZCB3b3JrZXIgcHJvY2Vzc2VzJyAlIFwKLSAgICAgICAgICAoQUREUkVTU1swXSwgQUREUkVTU1sxXSwgTlVNQkVSX09GX1BST0NFU1NFUykpCi0gICAgcHJpbnQoJ1RvIGV4aXQgcHJlc3MgQ3RybC0nICsgWydDJywgJ0JyZWFrJ11bc3lzLnBsYXRmb3JtPT0nd2luMzInXSkKLQotICAgIG9zLmNoZGlyKERJUikKLSAgICBydW5wb29sKEFERFJFU1MsIE5VTUJFUl9PRl9QUk9DRVNTRVMpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBmcmVlemVfc3VwcG9ydCgpCi0gICAgdGVzdCgpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weSBiL0RvYy9pbmNsdWRlcy9tcF93b3JrZXJzLnB5CmluZGV4IGU2NmQ5N2IuLjNiOTIyNjkgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF93b3JrZXJzLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9tcF93b3JrZXJzLnB5CkBAIC0xLDE2ICsxLDMgQEAKLSMKLSMgU2ltcGxlIGV4YW1wbGUgd2hpY2ggdXNlcyBhIHBvb2wgb2Ygd29ya2VycyB0byBjYXJyeSBvdXQgc29tZSB0YXNrcy4KLSMKLSMgTm90aWNlIHRoYXQgdGhlIHJlc3VsdHMgd2lsbCBwcm9iYWJseSBub3QgY29tZSBvdXQgb2YgdGhlIG91dHB1dAotIyBxdWV1ZSBpbiB0aGUgc2FtZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgY29ycmVzcG9uZGluZyB0YXNrcyB3ZXJlCi0jIHB1dCBvbiB0aGUgaW5wdXQgcXVldWUuICBJZiBpdCBpcyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSByZXN1bHRzIGJhY2sKLSMgaW4gdGhlIG9yaWdpbmFsIG9yZGVyIHRoZW4gY29uc2lkZXIgdXNpbmcgYFBvb2wubWFwKClgIG9yCi0jIGBQb29sLmltYXAoKWAgKHdoaWNoIHdpbGwgc2F2ZSBvbiB0aGUgYW1vdW50IG9mIGNvZGUgbmVlZGVkIGFueXdheSkuCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQogaW1wb3J0IHRpbWUKIGltcG9ydCByYW5kb20KIApkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaCBiL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmgKaW5kZXggMzI2NDdjMC4uZmNiODQ2YSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaAorKysgYi9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oCkBAIC03MCw0ICs3MCwxMSBAQAogICAgIFB5T2JqZWN0ICp0cF9zdWJjbGFzc2VzOwogICAgIFB5T2JqZWN0ICp0cF93ZWFrbGlzdDsKIAorICAgIGRlc3RydWN0b3IgdHBfZGVsOworCisgICAgLyogVHlwZSBhdHRyaWJ1dGUgY2FjaGUgdmVyc2lvbiB0YWcuIEFkZGVkIGluIHZlcnNpb24gMi42ICovCisgICAgdW5zaWduZWQgaW50IHRwX3ZlcnNpb25fdGFnOworCisgICAgZGVzdHJ1Y3RvciB0cF9maW5hbGl6ZTsKKwogfSBQeVR5cGVPYmplY3Q7CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS8ydG8zLnJzdCBiL0RvYy9saWJyYXJ5LzJ0bzMucnN0CmluZGV4IDFlNWY0MmQuLmZkYTIxNGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5LzJ0bzMucnN0CisrKyBiL0RvYy9saWJyYXJ5LzJ0bzMucnN0CkBAIC0zNDIsNiArMzQyLDEwIEBACiAKICAgIEhhbmRsZXMgdGhlIG1vdmUgb2YgOmZ1bmM6YHJlZHVjZWAgdG8gOmZ1bmM6YGZ1bmN0b29scy5yZWR1Y2VgLgogCisuLiAydG8zZml4ZXI6OiByZWxvYWQKKworICAgQ29udmVydHMgOmZ1bmM6YHJlbG9hZGAgdG8gOmZ1bmM6YGltcC5yZWxvYWRgLgorCiAuLiAydG8zZml4ZXI6OiByZW5hbWVzCiAKICAgIENoYW5nZXMgOmRhdGE6YHN5cy5tYXhpbnRgIHRvIDpkYXRhOmBzeXMubWF4c2l6ZWAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hYmMucnN0IGIvRG9jL2xpYnJhcnkvYWJjLnJzdAppbmRleCA5Mjk5MTI0Li43ODUzZDMxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hYmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FiYy5yc3QKQEAgLTEyLDkgKzEyLDkgQEAKIC0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3IgZGVmaW5pbmcgOnRlcm06YGFic3RyYWN0IGJhc2UKLWNsYXNzZXMgPGFic3RyYWN0IGJhc2UgY2xhc3M+YCAoQUJDcykgaW4gUHl0aG9uLCBhcyBvdXRsaW5lZCBpbiA6cGVwOmAzMTE5YDsgc2VlIHRoZSBQRVAgZm9yIHdoeSB0aGlzCi13YXMgYWRkZWQgdG8gUHl0aG9uLiAoU2VlIGFsc28gOnBlcDpgMzE0MWAgYW5kIHRoZSA6bW9kOmBudW1iZXJzYCBtb2R1bGUKLXJlZ2FyZGluZyBhIHR5cGUgaGllcmFyY2h5IGZvciBudW1iZXJzIGJhc2VkIG9uIEFCQ3MuKQorY2xhc3NlcyA8YWJzdHJhY3QgYmFzZSBjbGFzcz5gIChBQkNzKSBpbiBQeXRob24sIGFzIG91dGxpbmVkIGluIDpwZXA6YDMxMTlgOworc2VlIHRoZSBQRVAgZm9yIHdoeSB0aGlzIHdhcyBhZGRlZCB0byBQeXRob24uIChTZWUgYWxzbyA6cGVwOmAzMTQxYCBhbmQgdGhlCis6bW9kOmBudW1iZXJzYCBtb2R1bGUgcmVnYXJkaW5nIGEgdHlwZSBoaWVyYXJjaHkgZm9yIG51bWJlcnMgYmFzZWQgb24gQUJDcy4pCiAKIFRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlIGhhcyBzb21lIGNvbmNyZXRlIGNsYXNzZXMgdGhhdCBkZXJpdmUgZnJvbQogQUJDczsgdGhlc2UgY2FuLCBvZiBjb3Vyc2UsIGJlIGZ1cnRoZXIgZGVyaXZlZC4gSW4gYWRkaXRpb24gdGhlCkBAIC0yMyw3ICsyMyw3IEBACiBoYXNoYWJsZSBvciBhIG1hcHBpbmcuCiAKIAotVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzczoKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKIAogLi4gY2xhc3M6OiBBQkNNZXRhCiAKQEAgLTU4LDYgKzU4LDEwIEBACiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgICAgUmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBzdWJjbGFzcywgdG8gYWxsb3cgdXNhZ2UgYXMgYSBjbGFzcyBkZWNvcmF0b3IuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBUbyBkZXRlY3QgY2FsbHMgdG8gOm1ldGg6YHJlZ2lzdGVyYCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICA6ZnVuYzpgZ2V0X2NhY2hlX3Rva2VuYCBmdW5jdGlvbi4KKwogICAgWW91IGNhbiBhbHNvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIGFuIGFic3RyYWN0IGJhc2UgY2xhc3M6CiAKICAgIC4uIG1ldGhvZDo6IF9fc3ViY2xhc3Nob29rX18oc3ViY2xhc3MpCkBAIC0xMjcsNiArMTMxLDE5IEBACiAgICBhdmFpbGFibGUgYXMgYSBtZXRob2Qgb2YgYGBGb29gYCwgc28gaXQgaXMgcHJvdmlkZWQgc2VwYXJhdGVseS4KIAogCisuLiBjbGFzczo6IEFCQworCisgICBBIGhlbHBlciBjbGFzcyB0aGF0IGhhcyA6Y2xhc3M6YEFCQ01ldGFgIGFzIGl0cyBtZXRhY2xhc3MuICBXaXRoIHRoaXMgY2xhc3MsCisgICBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGNhbiBiZSBjcmVhdGVkIGJ5IHNpbXBseSBkZXJpdmluZyBmcm9tIDpjbGFzczpgQUJDYCwKKyAgIGF2b2lkaW5nIHNvbWV0aW1lcyBjb25mdXNpbmcgbWV0YWNsYXNzIHVzYWdlLgorCisgICBOb3RlIHRoYXQgdGhlIHR5cGUgb2YgOmNsYXNzOmBBQkNgIGlzIHN0aWxsIDpjbGFzczpgQUJDTWV0YWAsIHRoZXJlZm9yZQorICAgaW5oZXJpdGluZyBmcm9tIDpjbGFzczpgQUJDYCByZXF1aXJlcyB0aGUgdXN1YWwgcHJlY2F1dGlvbnMgcmVnYXJkaW5nIG1ldGFjbGFzcworICAgdXNhZ2UsIGFzIG11bHRpcGxlIGluaGVyaXRhbmNlIG1heSBsZWFkIHRvIG1ldGFjbGFzcyBjb25mbGljdHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSA6bW9kOmBhYmNgIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZGVjb3JhdG9yczoKIAogLi4gZGVjb3JhdG9yOjogYWJzdHJhY3RtZXRob2QKQEAgLTI5NSw2ICszMTIsMTkgQEAKICAgICAgICA6ZnVuYzpgYWJzdHJhY3RtZXRob2RgLCBtYWtpbmcgdGhpcyBkZWNvcmF0b3IgcmVkdW5kYW50LgogCiAKK1RoZSA6bW9kOmBhYmNgIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCisuLiBmdW5jdGlvbjo6IGdldF9jYWNoZV90b2tlbigpCisKKyAgIFJldHVybnMgdGhlIGN1cnJlbnQgYWJzdHJhY3QgYmFzZSBjbGFzcyBjYWNoZSB0b2tlbi4KKworICAgVGhlIHRva2VuIGlzIGFuIG9wYXF1ZSBpbnRlZ2VyIGlkZW50aWZ5aW5nIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlCisgICBhYnN0cmFjdCBiYXNlIGNsYXNzIGNhY2hlIGZvciB2aXJ0dWFsIHN1YmNsYXNzZXMuIFRoaXMgbnVtYmVyIGNoYW5nZXMKKyAgIHdpdGggZXZlcnkgY2FsbCB0byA6bWV0aDpgQUJDTWV0YS5yZWdpc3RlcmAgb24gYW55IEFCQy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKIC4uIFsjXSBDKysgcHJvZ3JhbW1lcnMgc2hvdWxkIG5vdGUgdGhhdCBQeXRob24ncyB2aXJ0dWFsIGJhc2UgY2xhc3MKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FpZmMucnN0IGIvRG9jL2xpYnJhcnkvYWlmYy5yc3QKaW5kZXggOGEzNTQxYi4uNDhjM2VhOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYWlmYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWlmYy5yc3QKQEAgLTMwLDggKzMwLDggQEAKIHNhbXBsZWQuICBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIGluZGljYXRlIGlmIHRoZSBhdWRpbyBpcyBtb25vLCBzdGVyZW8sIG9yCiBxdWFkcm8uICBFYWNoIGZyYW1lIGNvbnNpc3RzIG9mIG9uZSBzYW1wbGUgcGVyIGNoYW5uZWwuICBUaGUgc2FtcGxlIHNpemUgaXMgdGhlCiBzaXplIGluIGJ5dGVzIG9mIGVhY2ggc2FtcGxlLiAgVGh1cyBhIGZyYW1lIGNvbnNpc3RzIG9mCi0qbmNoYW5uZWxzKlwqXCAqc2FtcGxlc2l6ZSogYnl0ZXMsIGFuZCBhIHNlY29uZCdzIHdvcnRoIG9mIGF1ZGlvIGNvbnNpc3RzIG9mCi0qbmNoYW5uZWxzKlwqXCAqc2FtcGxlc2l6ZSpcKlwgKmZyYW1lcmF0ZSogYnl0ZXMuCitgYG5jaGFubmVscyAqIHNhbXBsZXNpemVgYCBieXRlcywgYW5kIGEgc2Vjb25kJ3Mgd29ydGggb2YgYXVkaW8gY29uc2lzdHMgb2YKK2BgbmNoYW5uZWxzICogc2FtcGxlc2l6ZSAqIGZyYW1lcmF0ZWBgIGJ5dGVzLgogCiBGb3IgZXhhbXBsZSwgQ0QgcXVhbGl0eSBhdWRpbyBoYXMgYSBzYW1wbGUgc2l6ZSBvZiB0d28gYnl0ZXMgKDE2IGJpdHMpLCB1c2VzIHR3bwogY2hhbm5lbHMgKHN0ZXJlbykgYW5kIGhhcyBhIGZyYW1lIHJhdGUgb2YgNDQsMTAwIGZyYW1lcy9zZWNvbmQuICBUaGlzIGdpdmVzIGEKQEAgLTUxLDYgKzUxLDExIEBACiAgICB1c2VkIGZvciB3cml0aW5nLCB0aGUgZmlsZSBvYmplY3Qgc2hvdWxkIGJlIHNlZWthYmxlLCB1bmxlc3MgeW91IGtub3cgYWhlYWQgb2YKICAgIHRpbWUgaG93IG1hbnkgc2FtcGxlcyB5b3UgYXJlIGdvaW5nIHRvIHdyaXRlIGluIHRvdGFsIGFuZCB1c2UKICAgIDptZXRoOmB3cml0ZWZyYW1lc3Jhd2AgYW5kIDptZXRoOmBzZXRuZnJhbWVzYC4KKyAgIFRoZSA6ZnVuYzpgLm9wZW5gIGZ1bmN0aW9uIG1heSBiZSB1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gIFdoZW4KKyAgIHRoZSA6a2V5d29yZDpgd2l0aGAgYmxvY2sgY29tcGxldGVzLCB0aGUgOm1ldGg6YH5haWZjLmNsb3NlYCBtZXRob2QgaXMgY2FsbGVkLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgogCiBPYmplY3RzIHJldHVybmVkIGJ5IDpmdW5jOmAub3BlbmAgd2hlbiBhIGZpbGUgaXMgb3BlbmVkIGZvciByZWFkaW5nIGhhdmUgdGhlCiBmb2xsb3dpbmcgbWV0aG9kczoKQEAgLTkyLDcgKzk3LDkgQEAKIAogLi4gbWV0aG9kOjogYWlmYy5nZXRwYXJhbXMoKQogCi0gICBSZXR1cm4gYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUgYWJvdmUgdmFsdWVzIGluIHRoZSBhYm92ZSBvcmRlci4KKyAgIFJldHVybnMgYSA6ZnVuYzpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLAorICAgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZQorICAgOm1ldGg6YGdldFwqYCBtZXRob2RzLgogCiAKIC4uIG1ldGhvZDo6IGFpZmMuZ2V0bWFya2VycygpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKaW5kZXggMGIxOGM2ZC4uNWI3ZDAxNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdApAQCAtOTc3LDkgKzk3Nyw5IEBACiBgYHR5cGVgYCBhcmd1bWVudCBpcyBhcHBsaWVkIHRvIGRlZmF1bHQgYXJndW1lbnRzLgogCiBUbyBlYXNlIHRoZSB1c2Ugb2YgdmFyaW91cyB0eXBlcyBvZiBmaWxlcywgdGhlIGFyZ3BhcnNlIG1vZHVsZSBwcm92aWRlcyB0aGUKLWZhY3RvcnkgRmlsZVR5cGUgd2hpY2ggdGFrZXMgdGhlIGBgbW9kZT1gYCBhbmQgYGBidWZzaXplPWBgIGFyZ3VtZW50cyBvZiB0aGUKLTpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLCBgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYQotd3JpdGFibGUgZmlsZTo6CitmYWN0b3J5IEZpbGVUeXBlIHdoaWNoIHRha2VzIHRoZSBgYG1vZGU9YGAsIGBgYnVmc2l6ZT1gYCwgYGBlbmNvZGluZz1gYCBhbmQKK2BgZXJyb3JzPWBgIGFyZ3VtZW50cyBvZiB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsCitgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSB3cml0YWJsZSBmaWxlOjoKIAogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpCkBAIC0xNjQ2LDE3ICsxNjQ2LDE5IEBACiBGaWxlVHlwZSBvYmplY3RzCiBeXl5eXl5eXl5eXl5eXl5eCiAKLS4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9Tm9uZSkKKy4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKQogCiAgICBUaGUgOmNsYXNzOmBGaWxlVHlwZWAgZmFjdG9yeSBjcmVhdGVzIG9iamVjdHMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0eXBlCiAgICBhcmd1bWVudCBvZiA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEFyZ3VtZW50cyB0aGF0IGhhdmUKLSAgIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYXMgdGhlaXIgdHlwZSB3aWxsIG9wZW4gY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcyBmaWxlcwotICAgd2l0aCB0aGUgcmVxdWVzdGVkIG1vZGVzIGFuZCBidWZmZXIgc2l6ZXM6OgorICAgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhcyB0aGVpciB0eXBlIHdpbGwgb3BlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFzCisgICBmaWxlcyB3aXRoIHRoZSByZXF1ZXN0ZWQgbW9kZXMsIGJ1ZmZlciBzaXplcywgZW5jb2RpbmdzIGFuZCBlcnJvciBoYW5kbGluZworICAgKHNlZSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMpOjoKIAogICAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCi0gICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLW91dHB1dCcsICdvdXQnXSkKLSAgICAgIE5hbWVzcGFjZShvdXRwdXQ9PF9pby5CdWZmZXJlZFdyaXRlciBuYW1lPSdvdXQnPikKKyAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJhdycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCisgICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnb3V0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdVVEYtOCcpKQorICAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1yYXcnLCAncmF3LmRhdCcsICdmaWxlLnR4dCddKQorICAgICAgTmFtZXNwYWNlKG91dD08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nZmlsZS50eHQnIG1vZGU9J3cnIGVuY29kaW5nPSdVVEYtOCc+LCByYXc9PF9pby5GaWxlSU8gbmFtZT0ncmF3LmRhdCcgbW9kZT0nd2InPikKIAogICAgRmlsZVR5cGUgb2JqZWN0cyB1bmRlcnN0YW5kIHRoZSBwc2V1ZG8tYXJndW1lbnQgYGAnLSdgYCBhbmQgYXV0b21hdGljYWxseQogICAgY29udmVydCB0aGlzIGludG8gYGBzeXMuc3RkaW5gYCBmb3IgcmVhZGFibGUgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0IGIvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKaW5kZXggZWRiMzg3MC4uNTVjNThiMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKQEAgLTYsOSArNiwxMiBAQAogCiAKIFRoZSA6bW9kOmBhdWRpb29wYCBtb2R1bGUgY29udGFpbnMgc29tZSB1c2VmdWwgb3BlcmF0aW9ucyBvbiBzb3VuZCBmcmFnbWVudHMuCi1JdCBvcGVyYXRlcyBvbiBzb3VuZCBmcmFnbWVudHMgY29uc2lzdGluZyBvZiBzaWduZWQgaW50ZWdlciBzYW1wbGVzIDgsIDE2IG9yIDMyCi1iaXRzIHdpZGUsIHN0b3JlZCBpbiBieXRlcyBvYmplY3RzLiAgQWxsIHNjYWxhciBpdGVtcyBhcmUgaW50ZWdlcnMsIHVubGVzcwotc3BlY2lmaWVkIG90aGVyd2lzZS4KK0l0IG9wZXJhdGVzIG9uIHNvdW5kIGZyYWdtZW50cyBjb25zaXN0aW5nIG9mIHNpZ25lZCBpbnRlZ2VyIHNhbXBsZXMgOCwgMTYsIDI0CitvciAzMiBiaXRzIHdpZGUsIHN0b3JlZCBpbiBieXRlcyBvYmplY3RzLiAgQWxsIHNjYWxhciBpdGVtcyBhcmUgaW50ZWdlcnMsCit1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFN1cHBvcnQgZm9yIDI0LWJpdCBzYW1wbGVzIHdhcyBhZGRlZC4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBJbnRlbC9EVkkgQURQQ00KQEAgLTM1LDcgKzM4LDcgQEAKIC4uIGZ1bmN0aW9uOjogYWRkKGZyYWdtZW50MSwgZnJhZ21lbnQyLCB3aWR0aCkKIAogICAgUmV0dXJuIGEgZnJhZ21lbnQgd2hpY2ggaXMgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gc2FtcGxlcyBwYXNzZWQgYXMgcGFyYW1ldGVycy4KLSAgICp3aWR0aCogaXMgdGhlIHNhbXBsZSB3aWR0aCBpbiBieXRlcywgZWl0aGVyIGBgMWBgLCBgYDJgYCBvciBgYDRgYC4gIEJvdGgKKyAgICp3aWR0aCogaXMgdGhlIHNhbXBsZSB3aWR0aCBpbiBieXRlcywgZWl0aGVyIGBgMWBgLCBgYDJgYCwgYGAzYGAgb3IgYGA0YGAuICBCb3RoCiAgICBmcmFnbWVudHMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiAgU2FtcGxlcyBhcmUgdHJ1bmNhdGVkIGluIGNhc2Ugb2Ygb3ZlcmZsb3cuCiAKIApAQCAtMTMzLDE5ICsxMzYsMTkgQEAKIAogLi4gZnVuY3Rpb246OiBsaW4ybGluKGZyYWdtZW50LCB3aWR0aCwgbmV3d2lkdGgpCiAKLSAgIENvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSBhbmQgNC1ieXRlIGZvcm1hdHMuCisgICBDb252ZXJ0IHNhbXBsZXMgYmV0d2VlbiAxLSwgMi0sIDMtIGFuZCA0LWJ5dGUgZm9ybWF0cy4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIEluIHNvbWUgYXVkaW8gZm9ybWF0cywgc3VjaCBhcyAuV0FWIGZpbGVzLCAxNiBhbmQgMzIgYml0IHNhbXBsZXMgYXJlCisgICAgICBJbiBzb21lIGF1ZGlvIGZvcm1hdHMsIHN1Y2ggYXMgLldBViBmaWxlcywgMTYsIDI0IGFuZCAzMiBiaXQgc2FtcGxlcyBhcmUKICAgICAgIHNpZ25lZCwgYnV0IDggYml0IHNhbXBsZXMgYXJlIHVuc2lnbmVkLiAgU28gd2hlbiBjb252ZXJ0aW5nIHRvIDggYml0IHdpZGUKICAgICAgIHNhbXBsZXMgZm9yIHRoZXNlIGZvcm1hdHMsIHlvdSBuZWVkIHRvIGFsc28gYWRkIDEyOCB0byB0aGUgcmVzdWx0OjoKIAogICAgICAgICAgbmV3X2ZyYW1lcyA9IGF1ZGlvb3AubGluMmxpbihmcmFtZXMsIG9sZF93aWR0aCwgMSkKICAgICAgICAgIG5ld19mcmFtZXMgPSBhdWRpb29wLmJpYXMobmV3X2ZyYW1lcywgMSwgMTI4KQogCi0gICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiBvciAzMgotICAgICAgYml0IHdpZHRoIHNhbXBsZXMuCisgICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiwgMjQKKyAgICAgIG9yIDMyIGJpdCB3aWR0aCBzYW1wbGVzLgogCiAKIC4uIGZ1bmN0aW9uOjogbGluMnVsYXcoZnJhZ21lbnQsIHdpZHRoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdCBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKaW5kZXggM2IyM2U3OS4uZGU4NzQ0MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CkBAIC0yNyw2ICsyNywxMCBAQAogICAgQVNDSUktb25seSBVbmljb2RlIHN0cmluZ3MgYXJlIG5vdyBhY2NlcHRlZCBieSB0aGUgZGVjb2RpbmcgZnVuY3Rpb25zIG9mCiAgICB0aGUgbW9kZXJuIGludGVyZmFjZS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQgYnkgYWxsCisgICBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLgorCiBUaGUgbW9kZXJuIGludGVyZmFjZSBwcm92aWRlczoKIAogLi4gZnVuY3Rpb246OiBiNjRlbmNvZGUocywgYWx0Y2hhcnM9Tm9uZSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2J6Mi5yc3QgYi9Eb2MvbGlicmFyeS9iejIucnN0CmluZGV4IGQwNmEzOWEuLjQ0ZTEzMzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2J6Mi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYnoyLnJzdApAQCAtMzcsOCArMzcsOCBAQAogICAgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAncidgYCwgYGAncmInYGAsIGBgJ3cnYGAsIGBgJ3diJ2BgLAotICAgYGAnYSdgYCwgb3IgYGAnYWInYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwgYGAnd3QnYGAsIG9yIGBgJ2F0J2BgIGZvcgotICAgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KKyAgIGBgJ3gnYGAsIGBgJ3hiJ2BgLCBgYCdhJ2BgIG9yIGBgJ2FiJ2BgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAncnQnYGAsCisgICBgYCd3dCdgYCwgYGAneHQnYGAsIG9yIGBgJ2F0J2BgIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgogCiAgICBUaGUgKmNvbXByZXNzbGV2ZWwqIGFyZ3VtZW50IGlzIGFuIGludGVnZXIgZnJvbSAxIHRvIDksIGFzIGZvciB0aGUKICAgIDpjbGFzczpgQloyRmlsZWAgY29uc3RydWN0b3IuCkBAIC01NCw2ICs1NCw5IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgJ3gnYGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZSB3YXMgYWRkZWQuCisKIAogLi4gY2xhc3M6OiBCWjJGaWxlKGZpbGVuYW1lLCBtb2RlPSdyJywgYnVmZmVyaW5nPU5vbmUsIGNvbXByZXNzbGV2ZWw9OSkKIApAQCAtNjQsOCArNjcsOSBAQAogICAgYmUgdXNlZCB0byByZWFkIG9yIHdyaXRlIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgYCdyJ2BgIGZvciByZWFkaW5nIChkZWZhdWx0KSwgYGAndydgYCBmb3IKLSAgIG92ZXJ3cml0aW5nLCBvciBgYCdhJ2BgIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMKLSAgIGBgJ3JiJ2BgLCBgYCd3YidgYCwgYW5kIGBgJ2FiJ2BgIHJlc3BlY3RpdmVseS4KKyAgIG92ZXJ3cml0aW5nLCBgYCd4J2BgIGZvciBleGNsdXNpdmUgY3JlYXRpb24sIG9yIGBgJ2EnYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UKKyAgIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgYGAncmInYGAsIGBgJ3diJ2BgLCBgYCd4YidgYCBhbmQgYGAnYWInYGAKKyAgIHJlc3BlY3RpdmVseS4KIAogICAgSWYgKmZpbGVuYW1lKiBpcyBhIGZpbGUgb2JqZWN0IChyYXRoZXIgdGhhbiBhbiBhY3R1YWwgZmlsZSBuYW1lKSwgYSBtb2RlIG9mCiAgICBgYCd3J2BgIGRvZXMgbm90IHRydW5jYXRlIHRoZSBmaWxlLCBhbmQgaXMgaW5zdGVhZCBlcXVpdmFsZW50IHRvIGBgJ2EnYGAuCkBAIC0xMDgsNiArMTEyLDkgQEAKICAgICAgIFRoZSBgYCdhJ2BgIChhcHBlbmQpIG1vZGUgd2FzIGFkZGVkLCBhbG9uZyB3aXRoIHN1cHBvcnQgZm9yIHJlYWRpbmcKICAgICAgIG11bHRpLXN0cmVhbSBmaWxlcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYCd4J2BgIChleGNsdXNpdmUgY3JlYXRpb24pIG1vZGUgd2FzIGFkZGVkLgorCiAKIEluY3JlbWVudGFsIChkZSljb21wcmVzc2lvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2RlLnJzdCBiL0RvYy9saWJyYXJ5L2NvZGUucnN0CmluZGV4IGU4NjkwMDQuLjViNWQ3Y2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvZGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvZGUucnN0CkBAIC0xMzIsMTIgKzEzMiwxNSBAQAogCiAuLiBtZXRob2Q6OiBJbnRlcmFjdGl2ZUNvbnNvbGUuaW50ZXJhY3QoYmFubmVyPU5vbmUpCiAKLSAgIENsb3NlbHkgZW11bGF0ZSB0aGUgaW50ZXJhY3RpdmUgUHl0aG9uIGNvbnNvbGUuIFRoZSBvcHRpb25hbCBiYW5uZXIgYXJndW1lbnQKKyAgIENsb3NlbHkgZW11bGF0ZSB0aGUgaW50ZXJhY3RpdmUgUHl0aG9uIGNvbnNvbGUuIFRoZSBvcHRpb25hbCAqYmFubmVyKiBhcmd1bWVudAogICAgc3BlY2lmeSB0aGUgYmFubmVyIHRvIHByaW50IGJlZm9yZSB0aGUgZmlyc3QgaW50ZXJhY3Rpb247IGJ5IGRlZmF1bHQgaXQgcHJpbnRzIGEKICAgIGJhbm5lciBzaW1pbGFyIHRvIHRoZSBvbmUgcHJpbnRlZCBieSB0aGUgc3RhbmRhcmQgUHl0aG9uIGludGVycHJldGVyLCBmb2xsb3dlZAogICAgYnkgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGNvbnNvbGUgb2JqZWN0IGluIHBhcmVudGhlc2VzIChzbyBhcyBub3QgdG8gY29uZnVzZQogICAgdGhpcyB3aXRoIHRoZSByZWFsIGludGVycHJldGVyIC0tIHNpbmNlIGl0J3Mgc28gY2xvc2UhKS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRvIHN1cHByZXNzIHByaW50aW5nIGFueSBiYW5uZXIsIHBhc3MgYW4gZW1wdHkgc3RyaW5nLgorCiAKIC4uIG1ldGhvZDo6IEludGVyYWN0aXZlQ29uc29sZS5wdXNoKGxpbmUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CmluZGV4IDAwOWFlMjYuLjA5MjVlODIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29kZWNzLnJzdApAQCAtMTIyOSwzNiArMTIyOSw0MSBAQAogCiAuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8THwKIAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgQ29kZWMgICAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwgRW5jb2Rlci9kZWNvZGVyICAgICAgICAgICAgICB8Ci0rPT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCBiYXNlNjRfY29kZWMgWyNiNjRdXyB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgfCA6bWV0aDpgYmFzZTY0LmI2NGVuY29kZWAsICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlNjQgKHRoZSByZXN1bHQgYWx3YXlzIHwgOm1ldGg6YGJhc2U2NC5iNjRkZWNvZGVgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgaW5jbHVkZXMgYSB0cmFpbGluZyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGBgJ1xuJ2BgKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGJ6Ml9jb2RlYyAgICAgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICB8IDptZXRoOmBiejIuY29tcHJlc3NgLCAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHVzaW5nIGJ6MiAgICAgICAgICAgICAgICAgfCA6bWV0aDpgYnoyLmRlY29tcHJlc3NgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGhleF9jb2RlYyAgICAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZW5jb2RlYCwgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGhleGFkZWNpbWFsICAgICAgICAgICAgICAgfCA6bWV0aDpgYmFzZTY0LmIxNmRlY29kZWAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCByZXByZXNlbnRhdGlvbiwgd2l0aCB0d28gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgZGlnaXRzIHBlciBieXRlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgcXVvcHJpX2NvZGVjICAgICAgICAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gTUlNRSAgIHwgOm1ldGg6YHF1b3ByaS5lbmNvZGVzdHJpbmdgLCB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgcXVvdGVkIHByaW50YWJsZSAgICAgICAgICB8IDptZXRoOmBxdW9wcmkuZGVjb2Rlc3RyaW5nYCAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgdXVfY29kZWMgICAgICAgICAgICAgfCBDb252ZXJ0IHRoZSBvcGVyYW5kIHVzaW5nIHwgOm1ldGg6YHV1LmVuY29kZWAsICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgdXVlbmNvZGUgICAgICAgICAgICAgICAgICB8IDptZXRoOmB1dS5kZWNvZGVgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgemxpYl9jb2RlYyAgICAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgIHwgOm1ldGg6YHpsaWIuY29tcHJlc3NgLCAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgdXNpbmcgZ3ppcCAgICAgICAgICAgICAgICB8IDptZXRoOmB6bGliLmRlY29tcHJlc3NgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICAgIHwgUHVycG9zZSAgICAgICAgICAgICAgICAgICAgICB8IEVuY29kZXIgLyBkZWNvZGVyICAgICAgICAgICAgfAorKz09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgYmFzZTY0X2NvZGVjIFsjYjY0XV8gfCBDb252ZXJ0IG9wZXJhbmQgdG8gTUlNRSAgICAgIHwgOm1ldGg6YGJhc2U2NC5iNjRlbmNvZGVgIC8gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgYmFzZTY0ICh0aGUgcmVzdWx0IGFsd2F5cyAgICB8IDptZXRoOmBiYXNlNjQuYjY0ZGVjb2RlYCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IGluY2x1ZGVzIGEgdHJhaWxpbmcgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCBgYCdcbidgYCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IC4uIHZlcnNpb25jaGFuZ2VkOjogMy40ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICBhY2NlcHRzIGFueSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgIGFzIGlucHV0IGZvciBlbmNvZGluZyBhbmQgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICBkZWNvZGluZyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBiejJfY29kZWMgICAgICAgICAgICB8IENvbXByZXNzIHRoZSBvcGVyYW5kICAgICAgICAgfCA6bWV0aDpgYnoyLmNvbXByZXNzYCAvICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCB1c2luZyBiejIgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJ6Mi5kZWNvbXByZXNzYCAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBoZXhfY29kZWMgICAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byAgICAgICAgICAgfCA6bWV0aDpgYmFzZTY0LmIxNmVuY29kZWAgLyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCBoZXhhZGVjaW1hbCAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZkZWNvZGVgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgcmVwcmVzZW50YXRpb24sIHdpdGggdHdvICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IGRpZ2l0cyBwZXIgYnl0ZSAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHF1b3ByaV9jb2RlYyAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICAgICB8IDptZXRoOmBxdW9wcmkuZW5jb2Rlc3RyaW5nYCAvfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZCBwcmludGFibGUgICAgICAgICAgICAgfCA6bWV0aDpgcXVvcHJpLmRlY29kZXN0cmluZ2AgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHV1X2NvZGVjICAgICAgICAgICAgIHwgQ29udmVydCB0aGUgb3BlcmFuZCB1c2luZyAgICB8IDptZXRoOmB1dS5lbmNvZGVgIC8gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHV1ZW5jb2RlICAgICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgdXUuZGVjb2RlYCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHpsaWJfY29kZWMgICAgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmB6bGliLmNvbXByZXNzYCAvICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHVzaW5nIGd6aXAgICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgemxpYi5kZWNvbXByZXNzYCAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLS4uIFsjYjY0XSBSYXRoZXIgdGhhbiBhY2NlcHRpbmcgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAsCi0gICBgYCdiYXNlNjRfY29kZWMnYGAgYWNjZXB0cyBvbmx5IDpjbGFzczpgYnl0ZXNgIGFuZCA6Y2xhc3M6YGJ5dGVhcnJheWAgZm9yCi0gICBlbmNvZGluZyBhbmQgb25seSA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgLCBhbmQgQVNDSUktb25seQotICAgaW5zdGFuY2VzIG9mIDpjbGFzczpgc3RyYCBmb3IgZGVjb2RpbmcKKy4uIFsjYjY0XSBJbiBhZGRpdGlvbiB0byA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gLAorICAgYGAnYmFzZTY0X2NvZGVjJ2BgIGFsc28gYWNjZXB0cyBBU0NJSS1vbmx5IGluc3RhbmNlcyBvZiA6Y2xhc3M6YHN0cmAgZm9yCisgICBkZWNvZGluZwogCiAKIFRoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgOmNsYXNzOmBzdHJgIHRvIDpjbGFzczpgc3RyYCBtYXBwaW5ncy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0CmluZGV4IDRiMjE5MzIuLjM1NmY0NzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdApAQCAtMTUsNyArMTUsNyBAQAogICAgaW1wb3J0IGl0ZXJ0b29scwogICAgX19uYW1lX18gPSAnPGRvY3Rlc3Q+JwogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb2xsZWN0aW9ucy9hYmMucHlgCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9fY29sbGVjdGlvbnNfYWJjLnB5YAogCiAtLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKaW5kZXggNzY0NWYyYS4uODBjNmM3NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdApAQCAtNzYsMTQgKzc2LDE5IEBACiAgICAgICAgIGJlIG1vZGlmaWVkIHRvIGNoYW5nZSB3aGljaCBtYXBwaW5ncyBhcmUgc2VhcmNoZWQuICBUaGUgbGlzdCBzaG91bGQKICAgICAgICAgYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG1hcHBpbmcuCiAKLSAgICAuLiBtZXRob2Q6OiBuZXdfY2hpbGQoKQorICAgIC4uIG1ldGhvZDo6IG5ld19jaGlsZChtPU5vbmUpCiAKLSAgICAgICAgUmV0dXJucyBhIG5ldyA6Y2xhc3M6YENoYWluTWFwYCBjb250YWluaW5nIGEgbmV3IDpjbGFzczpgZGljdGAgZm9sbG93ZWQgYnkKLSAgICAgICAgYWxsIG9mIHRoZSBtYXBzIGluIHRoZSBjdXJyZW50IGluc3RhbmNlLiAgQSBjYWxsIHRvIGBgZC5uZXdfY2hpbGQoKWBgIGlzCi0gICAgICAgIGVxdWl2YWxlbnQgdG86IGBgQ2hhaW5NYXAoe30sICpkLm1hcHMpYGAuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvcgorICAgICAgICBSZXR1cm5zIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYSBuZXcgbWFwIGZvbGxvd2VkIGJ5CisgICAgICAgIGFsbCBvZiB0aGUgbWFwcyBpbiB0aGUgY3VycmVudCBpbnN0YW5jZS4gIElmIGBgbWBgIGlzIHNwZWNpZmllZCwKKyAgICAgICAgaXQgYmVjb21lcyB0aGUgbmV3IG1hcCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgb2YgbWFwcGluZ3M7IGlmIG5vdAorICAgICAgICBzcGVjaWZpZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZCwgc28gdGhhdCBhIGNhbGwgdG8gYGBkLm5ld19jaGlsZCgpYGAKKyAgICAgICAgaXMgZXF1aXZhbGVudCB0bzogYGBDaGFpbk1hcCh7fSwgKmQubWFwcylgYC4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yCiAgICAgICAgIGNyZWF0aW5nIHN1YmNvbnRleHRzIHRoYXQgY2FuIGJlIHVwZGF0ZWQgd2l0aG91dCBhbHRlcmluZyB2YWx1ZXMgaW4gYW55CiAgICAgICAgIG9mIHRoZSBwYXJlbnQgbWFwcGluZ3MuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgVGhlIG9wdGlvbmFsIGBgbWBgIHBhcmFtZXRlciB3YXMgYWRkZWQuCisKICAgICAuLiBhdHRyaWJ1dGU6OiBwYXJlbnRzCiAKICAgICAgICAgUHJvcGVydHkgcmV0dXJuaW5nIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBtYXBzIGluCkBAIC0zNjksMTAgKzM3NCw2IEBACiAKIC4uIHNlZWFsc286OgogCi0gICAgKiBgQ291bnRlciBjbGFzcyA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NjExLz5gXwotICAgICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNSBhbmQgYW4gZWFybHkgYEJhZyByZWNpcGUKLSAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNTkxNzQvPmBfIGZvciBQeXRob24gMi40LgotCiAgICAgKiBgQmFnIGNsYXNzIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc21hbGx0YWxrL21hbnVhbC1iYXNlL2h0bWxfbm9kZS9CYWcuaHRtbD5gXwogICAgICAgaW4gU21hbGx0YWxrLgogCkBAIC05MTUsMTEgKzkxNiw2IEBACiAgICAgPj4+IGNsYXNzIFN0YXR1czoKICAgICAgICAgb3BlbiwgcGVuZGluZywgY2xvc2VkID0gcmFuZ2UoMykKIAotLi4gc2VlYWxzbzo6Ci0KLSAgICAqIGBOYW1lZCB0dXBsZSByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUwMDI2MS8+YF8KLSAgICAgIGFkYXB0ZWQgZm9yIFB5dGhvbiAyLjQuCi0KICAgICAqIGBSZWNpcGUgZm9yIG5hbWVkIHR1cGxlIGFic3RyYWN0IGJhc2UgY2xhc3Mgd2l0aCBhIG1ldGFjbGFzcyBtaXgtaW4KICAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvPmBfCiAgICAgICBieSBKYW4gS2FsaXN6ZXdza2kuICBCZXNpZGVzIHByb3ZpZGluZyBhbiA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2AgZm9yCkBAIC05ODIsMTAgKzk3OCw2IEBACiBrZXl3b3JkIGFyZ3VtZW50cywgYnV0IHRoZWlyIG9yZGVyIGlzIGxvc3QgYmVjYXVzZSBQeXRob24ncyBmdW5jdGlvbiBjYWxsCiBzZW1hbnRpY3MgcGFzcy1pbiBrZXl3b3JkIGFyZ3VtZW50cyB1c2luZyBhIHJlZ3VsYXIgdW5vcmRlcmVkIGRpY3Rpb25hcnkuCiAKLS4uIHNlZWFsc286OgotCi0gICAgYEVxdWl2YWxlbnQgT3JkZXJlZERpY3QgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2OTMvPmBfCi0gICAgdGhhdCBydW5zIG9uIFB5dGhvbiAyLjQgb3IgbGF0ZXIuCiAKIDpjbGFzczpgT3JkZXJlZERpY3RgIEV4YW1wbGVzIGFuZCBSZWNpcGVzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0CmluZGV4IGYyYTUxMmYuLjJkNjkxMDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbmN5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW5jeS5yc3QKQEAgLTIxLDYgKzIxLDcgQEAKICAgIHNjaGVkLnJzdAogICAgcXVldWUucnN0CiAgICBzZWxlY3QucnN0CisgICBzZWxlY3RvcnMucnN0CiAKIAogVGhlIGZvbGxvd2luZyBhcmUgc3VwcG9ydCBtb2R1bGVzIGZvciBzb21lIG9mIHRoZSBhYm92ZSBzZXJ2aWNlczoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0CmluZGV4IGMyZjkyYjMuLjkzNTM4ZTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdApAQCAtMTY0LDYgKzE2NCw5IEBACiBhbGxvd3MgaXQgdG8gc2lkZS1zdGVwIHRoZSA6dGVybTpgR2xvYmFsIEludGVycHJldGVyIExvY2tgIGJ1dCBhbHNvIG1lYW5zIHRoYXQKIG9ubHkgcGlja2xhYmxlIG9iamVjdHMgY2FuIGJlIGV4ZWN1dGVkIGFuZCByZXR1cm5lZC4KIAorVGhlIGBgX19tYWluX19gYCBtb2R1bGUgbXVzdCBiZSBpbXBvcnRhYmxlIGJ5IHdvcmtlciBzdWJwcm9jZXNzZXMuIFRoaXMgbWVhbnMKK3RoYXQgOmNsYXNzOmBQcm9jZXNzUG9vbEV4ZWN1dG9yYCB3aWxsIG5vdCB3b3JrIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlci4KKwogQ2FsbGluZyA6Y2xhc3M6YEV4ZWN1dG9yYCBvciA6Y2xhc3M6YEZ1dHVyZWAgbWV0aG9kcyBmcm9tIGEgY2FsbGFibGUgc3VibWl0dGVkCiB0byBhIDpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgd2lsbCByZXN1bHQgaW4gZGVhZGxvY2suCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0IGIvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKaW5kZXggZmJhNDhmNC4uNGJiNTRjNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKQEAgLTk1LDYgKzk1LDgzIEBACiAgICBgYHBhZ2UuY2xvc2UoKWBgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBpcyBleGl0ZWQuCiAKIAorLi4gZnVuY3Rpb246OiBzdXBwcmVzcygqZXhjZXB0aW9ucykKKworICAgUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgc3VwcHJlc3NlcyBhbnkgb2YgdGhlIHNwZWNpZmllZCBleGNlcHRpb25zCisgICBpZiB0aGV5IG9jY3VyIGluIHRoZSBib2R5IG9mIGEgd2l0aCBzdGF0ZW1lbnQgYW5kIHRoZW4gcmVzdW1lcyBleGVjdXRpb24KKyAgIHdpdGggdGhlIGZpcnN0IHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgd2l0aCBzdGF0ZW1lbnQuCisKKyAgIEFzIHdpdGggYW55IG90aGVyIG1lY2hhbmlzbSB0aGF0IGNvbXBsZXRlbHkgc3VwcHJlc3NlcyBleGNlcHRpb25zLCB0aGlzCisgICBjb250ZXh0IG1hbmFnZXIgc2hvdWxkIGJlIHVzZWQgb25seSB0byBjb3ZlciB2ZXJ5IHNwZWNpZmljIGVycm9ycyB3aGVyZQorICAgc2lsZW50bHkgY29udGludWluZyB3aXRoIHByb2dyYW0gZXhlY3V0aW9uIGlzIGtub3duIHRvIGJlIHRoZSByaWdodAorICAgdGhpbmcgdG8gZG8uCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgIGZyb20gY29udGV4dGxpYiBpbXBvcnQgc3VwcHJlc3MKKworICAgICAgIHdpdGggc3VwcHJlc3MoRmlsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAgICBvcy5yZW1vdmUoJ3NvbWVmaWxlLnRtcCcpCisKKyAgICAgICB3aXRoIHN1cHByZXNzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lb3RoZXJmaWxlLnRtcCcpCisKKyAgIFRoaXMgY29kZSBpcyBlcXVpdmFsZW50IHRvOjoKKworICAgICAgIHRyeToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lZmlsZS50bXAnKQorICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgcGFzcworCisgICAgICAgdHJ5OgorICAgICAgICAgICBvcy5yZW1vdmUoJ3NvbWVvdGhlcmZpbGUudG1wJykKKyAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgVGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgOnJlZjpgcmVlbnRyYW50IDxyZWVudHJhbnQtY21zPmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogcmVkaXJlY3Rfc3Rkb3V0KG5ld190YXJnZXQpCisKKyAgIENvbnRleHQgbWFuYWdlciBmb3IgdGVtcG9yYXJpbHkgcmVkaXJlY3RpbmcgOmRhdGE6YHN5cy5zdGRvdXRgIHRvCisgICBhbm90aGVyIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdC4KKworICAgVGhpcyB0b29sIGFkZHMgZmxleGliaWxpdHkgdG8gZXhpc3RpbmcgZnVuY3Rpb25zIG9yIGNsYXNzZXMgd2hvc2Ugb3V0cHV0CisgICBpcyBoYXJkd2lyZWQgdG8gc3Rkb3V0LgorCisgICBGb3IgZXhhbXBsZSwgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgbm9ybWFsbHkgaXMgc2VudCB0byAqc3lzLnN0ZG91dCouCisgICBZb3UgY2FuIGNhcHR1cmUgdGhhdCBvdXRwdXQgaW4gYSBzdHJpbmcgYnkgcmVkaXJlY3RpbmcgdGhlIG91dHB1dCB0byBhCisgICA6Y2xhc3M6YGlvLlN0cmluZ0lPYCBvYmplY3Q6OgorCisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpOgorICAgICAgICAgICAgaGVscChwb3cpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKworICAgVG8gc2VuZCB0aGUgb3V0cHV0IG9mIDpmdW5jOmBoZWxwYCB0byBhIGZpbGUgb24gZGlzaywgcmVkaXJlY3QgdGhlIG91dHB1dAorICAgdG8gYSByZWd1bGFyIGZpbGU6OgorCisgICAgICAgIHdpdGggb3BlbignaGVscC50eHQnLCAndycpIGFzIGY6CisgICAgICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgICAgICBoZWxwKHBvdykKKworICAgVG8gc2VuZCB0aGUgb3V0cHV0IG9mIDpmdW5jOmBoZWxwYCB0byAqc3lzLnN0ZGVycio6OgorCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KHN5cy5zdGRlcnIpOgorICAgICAgICAgICAgaGVscChwb3cpCisKKyAgIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0IG9uIDpkYXRhOmBzeXMuc3Rkb3V0YCBtZWFucyB0aGF0IHRoaXMKKyAgIGNvbnRleHQgbWFuYWdlciBpcyBub3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBsaWJyYXJ5IGNvZGUgYW5kIG1vc3QgdGhyZWFkZWQKKyAgIGFwcGxpY2F0aW9ucy4gSXQgYWxzbyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBvdXRwdXQgb2Ygc3VicHJvY2Vzc2VzLgorICAgSG93ZXZlciwgaXQgaXMgc3RpbGwgYSB1c2VmdWwgYXBwcm9hY2ggZm9yIG1hbnkgdXRpbGl0eSBzY3JpcHRzLgorCisgICBUaGlzIGNvbnRleHQgbWFuYWdlciBpcyA6cmVmOmByZXVzYWJsZSBidXQgbm90IHJlZW50cmFudCA8cmV1c2FibGUtY21zPmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGNsYXNzOjogQ29udGV4dERlY29yYXRvcigpCiAKICAgIEEgYmFzZSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBjb250ZXh0IG1hbmFnZXIgdG8gYWxzbyBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yLgpAQCAtNTIwLDMgKzU5NywxMTYgQEAKICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gOmtleXdvcmQ6YHdpdGhgCiAgICAgICBzdGF0ZW1lbnQuCiAKKy4uIF9zaW5nbGUtdXNlLXJldXNhYmxlLWFuZC1yZWVudHJhbnQtY21zOgorCitTaW5nbGUgdXNlLCByZXVzYWJsZSBhbmQgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb3N0IGNvbnRleHQgbWFuYWdlcnMgYXJlIHdyaXR0ZW4gaW4gYSB3YXkgdGhhdCBtZWFucyB0aGV5IGNhbiBvbmx5IGJlCit1c2VkIGVmZmVjdGl2ZWx5IGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBvbmNlLiBUaGVzZSBzaW5nbGUgdXNlCitjb250ZXh0IG1hbmFnZXJzIG11c3QgYmUgY3JlYXRlZCBhZnJlc2ggZWFjaCB0aW1lIHRoZXkncmUgdXNlZCAtCithdHRlbXB0aW5nIHRvIHVzZSB0aGVtIGEgc2Vjb25kIHRpbWUgd2lsbCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbiBvcgorb3RoZXJ3aXNlIG5vdCB3b3JrIGNvcnJlY3RseS4KKworVGhpcyBjb21tb24gbGltaXRhdGlvbiBtZWFucyB0aGF0IGl0IGlzIGdlbmVyYWxseSBhZHZpc2FibGUgdG8gY3JlYXRlCitjb250ZXh0IG1hbmFnZXJzIGRpcmVjdGx5IGluIHRoZSBoZWFkZXIgb2YgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQKK3doZXJlIHRoZXkgYXJlIHVzZWQgKGFzIHNob3duIGluIGFsbCBvZiB0aGUgdXNhZ2UgZXhhbXBsZXMgYWJvdmUpLgorCitGaWxlcyBhcmUgYW4gZXhhbXBsZSBvZiBlZmZlY3RpdmVseSBzaW5nbGUgdXNlIGNvbnRleHQgbWFuYWdlcnMsIHNpbmNlCit0aGUgZmlyc3QgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3aWxsIGNsb3NlIHRoZSBmaWxlLCBwcmV2ZW50aW5nIGFueQorZnVydGhlciBJTyBvcGVyYXRpb25zIHVzaW5nIHRoYXQgZmlsZSBvYmplY3QuCisKK0NvbnRleHQgbWFuYWdlcnMgY3JlYXRlZCB1c2luZyA6ZnVuYzpgY29udGV4dG1hbmFnZXJgIGFyZSBhbHNvIHNpbmdsZSB1c2UKK2NvbnRleHQgbWFuYWdlcnMsIGFuZCB3aWxsIGNvbXBsYWluIGFib3V0IHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBmYWlsaW5nCit0byB5aWVsZCBpZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdXNlIHRoZW0gYSBzZWNvbmQgdGltZTo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorICAgID4+PiBAY29udGV4dG1hbmFnZXIKKyAgICAuLi4gZGVmIHNpbmdsZXVzZSgpOgorICAgIC4uLiAgICAgcHJpbnQoIkJlZm9yZSIpCisgICAgLi4uICAgICB5aWVsZAorICAgIC4uLiAgICAgcHJpbnQoIkFmdGVyIikKKyAgICAuLi4KKyAgICA+Pj4gY20gPSBzaW5nbGV1c2UoKQorICAgID4+PiB3aXRoIGNtOgorICAgIC4uLiAgICAgcGFzcworICAgIC4uLgorICAgIEJlZm9yZQorICAgIEFmdGVyCisgICAgPj4+IHdpdGggY206CisgICAgLi4uICAgIHBhc3MKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgIFJ1bnRpbWVFcnJvcjogZ2VuZXJhdG9yIGRpZG4ndCB5aWVsZAorCisKKy4uIF9yZWVudHJhbnQtY21zOgorCitSZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworTW9yZSBzb3BoaXN0aWNhdGVkIGNvbnRleHQgbWFuYWdlcnMgbWF5IGJlICJyZWVudHJhbnQiLiBUaGVzZSBjb250ZXh0CittYW5hZ2VycyBjYW4gbm90IG9ubHkgYmUgdXNlZCBpbiBtdWx0aXBsZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cywKK2J1dCBtYXkgYWxzbyBiZSB1c2VkICppbnNpZGUqIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0aGF0IGlzIGFscmVhZHkKK3VzaW5nIHRoZSBzYW1lIGNvbnRleHQgbWFuYWdlci4KKworOmNsYXNzOmB0aHJlYWRpbmcuUkxvY2tgIGlzIGFuIGV4YW1wbGUgb2YgYSByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VyLCBhcyBpcworOmZ1bmM6YHN1cHByZXNzYC4gSGVyZSdzIGEgdG95IGV4YW1wbGUgb2YgcmVlbnRyYW50IHVzZSAocmVhbCB3b3JsZAorZXhhbXBsZXMgb2YgcmVlbnRyYW5jeSBhcmUgbW9yZSBsaWtlbHkgdG8gb2NjdXIgd2l0aCBvYmplY3RzIGxpa2UgcmVjdXJzaXZlCitsb2NrcyBhbmQgYXJlIGxpa2VseSB0byBiZSBmYXIgbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoaXMgZXhhbXBsZSk6OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgc3VwcHJlc3MKKyAgICA+Pj4gaWdub3JlX3JhaXNlZF9leGNlcHRpb24gPSBzdXBwcmVzcyhaZXJvRGl2aXNpb25FcnJvcikKKyAgICA+Pj4gd2l0aCBpZ25vcmVfcmFpc2VkX2V4Y2VwdGlvbjoKKyAgICAuLi4gICAgIHdpdGggaWdub3JlX3JhaXNlZF9leGNlcHRpb246CisgICAgLi4uICAgICAgICAgMS8wCisgICAgLi4uICAgICBwcmludCgiVGhpcyBsaW5lIHJ1bnMiKQorICAgIC4uLiAgICAgMS8wCisgICAgLi4uICAgICBwcmludCgiVGhpcyBpcyBza2lwcGVkIikKKyAgICAuLi4KKyAgICBUaGlzIGxpbmUgcnVucworICAgID4+PiAjIFRoZSBzZWNvbmQgZXhjZXB0aW9uIGlzIGFsc28gc3VwcHJlc3NlZAorCisKKy4uIF9yZXVzYWJsZS1jbXM6CisKK1JldXNhYmxlIGNvbnRleHQgbWFuYWdlcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRGlzdGluY3QgZnJvbSBib3RoIHNpbmdsZSB1c2UgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzIGFyZSAicmV1c2FibGUiCitjb250ZXh0IG1hbmFnZXJzIChvciwgdG8gYmUgY29tcGxldGVseSBleHBsaWNpdCwgInJldXNhYmxlLCBidXQgbm90CityZWVudHJhbnQiIGNvbnRleHQgbWFuYWdlcnMsIHNpbmNlIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzIGFyZSBhbHNvCityZXVzYWJsZSkuIFRoZXNlIGNvbnRleHQgbWFuYWdlcnMgc3VwcG9ydCBiZWluZyB1c2VkIG11bHRpcGxlIHRpbWVzLCBidXQKK3dpbGwgZmFpbCAob3Igb3RoZXJ3aXNlIG5vdCB3b3JrIGNvcnJlY3RseSkgaWYgdGhlIHNwZWNpZmljIGNvbnRleHQgbWFuYWdlcgoraW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluIGEgY29udGFpbmluZyB3aXRoIHN0YXRlbWVudC4KKworQW4gZXhhbXBsZSBvZiBhIHJldXNhYmxlIGNvbnRleHQgbWFuYWdlciBpcyA6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YDo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCByZWRpcmVjdF9zdGRvdXQKKyAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKyAgICA+Pj4gZiA9IFN0cmluZ0lPKCkKKyAgICA+Pj4gY29sbGVjdF9vdXRwdXQgPSByZWRpcmVjdF9zdGRvdXQoZikKKyAgICA+Pj4gd2l0aCBjb2xsZWN0X291dHB1dDoKKyAgICAuLi4gICAgIHByaW50KCJDb2xsZWN0ZWQiKQorICAgIC4uLgorICAgID4+PiBwcmludCgiTm90IGNvbGxlY3RlZCIpCisgICAgTm90IGNvbGxlY3RlZAorICAgID4+PiB3aXRoIGNvbGxlY3Rfb3V0cHV0OgorICAgIC4uLiAgICAgcHJpbnQoIkFsc28gY29sbGVjdGVkIikKKyAgICAuLi4KKyAgICA+Pj4gcHJpbnQoZi5nZXR2YWx1ZSgpKQorICAgIENvbGxlY3RlZAorICAgIEFsc28gY29sbGVjdGVkCisKK0hvd2V2ZXIsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIG5vdCByZWVudHJhbnQsIHNvIGF0dGVtcHRpbmcgdG8gcmV1c2UgaXQKK3dpdGhpbiBhIGNvbnRhaW5pbmcgd2l0aCBzdGF0ZW1lbnQgZmFpbHM6CisKKyAgICA+Pj4gd2l0aCBjb2xsZWN0X291dHB1dDoKKyAgICAuLi4gICAgICMgTmVzdGVkIHJldXNlIGlzIG5vdCBwZXJtaXR0ZWQKKyAgICAuLi4gICAgIHdpdGggY29sbGVjdF9vdXRwdXQ6CisgICAgLi4uICAgICAgICAgcGFzcworICAgIC4uLgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFJ1bnRpbWVFcnJvcjogQ2Fubm90IHJlZW50ZXIgPC4uLj4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9kYXRhdHlwZXMucnN0CmluZGV4IGQwMzgyZTAuLjQ4YWYwODIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdApAQCAtMzAsMyArMzAsNCBAQAogICAgY29weS5yc3QKICAgIHBwcmludC5yc3QKICAgIHJlcHJsaWIucnN0CisgICBlbnVtLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0IGIvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CmluZGV4IDA2NWU4NTAuLmU0ZjFlYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKQEAgLTE3MCwxMCArMTcwLDEyIEBACiAgICAqIGBgMCA8PSBzZWNvbmRzIDwgMzYwMCoyNGBgICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgaW4gb25lIGRheSkKICAgICogYGAtOTk5OTk5OTk5IDw9IGRheXMgPD0gOTk5OTk5OTk5YGAKIAotICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywgdGhlIGZyYWN0aW9uYWwKLSAgIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZSBjb21iaW5lZCBhbmQgdGhlaXIgc3VtIGlzIHJvdW5kZWQKLSAgIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kLiAgSWYgbm8gYXJndW1lbnQgaXMgYSBmbG9hdCwgdGhlIGNvbnZlcnNpb24gYW5kCi0gICBub3JtYWxpemF0aW9uIHByb2Nlc3NlcyBhcmUgZXhhY3QgKG5vIGluZm9ybWF0aW9uIGlzIGxvc3QpLgorICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywKKyAgIHRoZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZQorICAgY29tYmluZWQgYW5kIHRoZWlyIHN1bSBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kIHVzaW5nCisgICByb3VuZC1oYWxmLXRvLWV2ZW4gdGllYnJlYWtlci4gIElmIG5vIGFyZ3VtZW50IGlzIGEgZmxvYXQsIHRoZQorICAgY29udmVyc2lvbiBhbmQgbm9ybWFsaXphdGlvbiBwcm9jZXNzZXMgYXJlIGV4YWN0IChubyBpbmZvcm1hdGlvbiBpcworICAgbG9zdCkuCiAKICAgIElmIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIGRheXMgbGllcyBvdXRzaWRlIHRoZSBpbmRpY2F0ZWQgcmFuZ2UsCiAgICA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBpcyByYWlzZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaXMucnN0IGIvRG9jL2xpYnJhcnkvZGlzLnJzdAppbmRleCBlYzcxMTJkLi40MGFhZWViIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kaXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKQEAgLTI2LDcgKzI2LDggQEAKICAgIGRlZiBteWZ1bmMoYWxpc3QpOgogICAgICAgIHJldHVybiBsZW4oYWxpc3QpCiAKLXRoZSBmb2xsb3dpbmcgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBnZXQgdGhlIGRpc2Fzc2VtYmx5IG9mIDpmdW5jOmBteWZ1bmNgOjoKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBkaXNhc3NlbWJseSBvZgorOmZ1bmM6YG15ZnVuY2A6OgogCiAgICA+Pj4gZGlzLmRpcyhteWZ1bmMpCiAgICAgIDIgICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKGxlbikKQEAgLTM2LDggKzM3LDYyIEBACiAKIChUaGUgIjIiIGlzIGEgbGluZSBudW1iZXIpLgogCi1UaGUgOm1vZDpgZGlzYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzOgorQnl0ZWNvZGUgYW5hbHlzaXMKKy0tLS0tLS0tLS0tLS0tLS0tCiAKK1RoZSBieXRlY29kZSBhbmFseXNpcyBBUEkgYWxsb3dzIHBpZWNlcyBvZiBQeXRob24gY29kZSB0byBiZSB3cmFwcGVkIGluIGEKKzpjbGFzczpgQnl0ZWNvZGVgIG9iamVjdCB0aGF0IHByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIGRldGFpbHMgb2YgdGhlCitjb21waWxlZCBjb2RlLgorCisuLiBjbGFzczo6IEJ5dGVjb2RlCisKKyAgIFRoZSBieXRlY29kZSBvcGVyYXRpb25zIG9mIGEgcGllY2Ugb2YgY29kZQorCisgICBUaGlzIGlzIGEgY29udmVuaWVudCB3cmFwcGVyIGFyb3VuZCBtYW55IG9mIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGJlbG93LgorICAgSW5zdGFudGlhdGUgaXQgd2l0aCBhIGZ1bmN0aW9uLCBtZXRob2QsIHN0cmluZyBvZiBjb2RlLCBvciBhIGNvZGUgb2JqZWN0CisgICAoYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGNvbXBpbGVgKS4KKworICAgSXRlcmF0aW5nIG92ZXIgdGhpcyB5aWVsZHMgdGhlIGJ5dGVjb2RlIG9wZXJhdGlvbnMgYXMgOmNsYXNzOmBJbnN0cnVjdGlvbmAKKyAgIGluc3RhbmNlcy4KKworICAgLi4gZGF0YTo6IGNvZGVvYmoKKworICAgICAgVGhlIGNvbXBpbGVkIGNvZGUgb2JqZWN0LgorCisgICAuLiBtZXRob2Q6OiBkaXNwbGF5X2NvZGUoKiwgZmlsZT1Ob25lKQorCisgICAgICBQcmludCBhIGZvcm1hdHRlZCB2aWV3IG9mIHRoZSBieXRlY29kZSBvcGVyYXRpb25zLCBsaWtlIDpmdW5jOmBkaXNgLgorCisgICAuLiBtZXRob2Q6OiBpbmZvKCkKKworICAgICAgUmV0dXJuIGEgZm9ybWF0dGVkIG11bHRpLWxpbmUgc3RyaW5nIHdpdGggZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICBjb2RlIG9iamVjdCwgbGlrZSA6ZnVuYzpgY29kZV9pbmZvYC4KKworICAgLi4gbWV0aG9kOjogc2hvd19pbmZvKCosIGZpbGU9Tm9uZSkKKworICAgICAgUHJpbnQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlIG9iamVjdCBhcyByZXR1cm5lZCBieSA6bWV0aDpgaW5mb2AuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitFeGFtcGxlOjoKKworICAgID4+PiBieXRlY29kZSA9IGRpcy5CeXRlY29kZShteWZ1bmMpCisgICAgPj4+IGZvciBpbnN0ciBpbiBieXRlY29kZToKKyAgICAuLi4gICAgIHByaW50KGluc3RyLm9wbmFtZSkKKyAgICAuLi4KKyAgICBMT0FEX0dMT0JBTAorICAgIExPQURfRkFTVAorICAgIENBTExfRlVOQ1RJT04KKyAgICBSRVRVUk5fVkFMVUUKKworCitBbmFseXNpcyBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgZGlzYCBtb2R1bGUgYWxzbyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgYW5hbHlzaXMgZnVuY3Rpb25zIHRoYXQKK2NvbnZlcnQgdGhlIGlucHV0IGRpcmVjdGx5IHRvIHRoZSBkZXNpcmVkIG91dHB1dC4gVGhleSBjYW4gYmUgdXNlZnVsIGlmCitvbmx5IGEgc2luZ2xlIG9wZXJhdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQsIHNvIHRoZSBpbnRlcm1lZGlhdGUgYW5hbHlzaXMKK29iamVjdCBpc24ndCB1c2VmdWw6CiAKIC4uIGZ1bmN0aW9uOjogY29kZV9pbmZvKHgpCiAKQEAgLTUxLDE3ICsxMDYsMjIgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKLS4uIGZ1bmN0aW9uOjogc2hvd19jb2RlKHgpCisuLiBmdW5jdGlvbjo6IHNob3dfY29kZSh4LCAqLCBmaWxlPU5vbmUpCiAKICAgIFByaW50IGRldGFpbGVkIGNvZGUgb2JqZWN0IGluZm9ybWF0aW9uIGZvciB0aGUgc3VwcGxpZWQgZnVuY3Rpb24sIG1ldGhvZCwKLSAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdCB0byBzdGRvdXQuCisgICBzb3VyY2UgY29kZSBzdHJpbmcgb3IgY29kZSBvYmplY3QgdG8gKmZpbGUqIChvciBgYHN5cy5zdGRvdXRgYCBpZiAqZmlsZSoKKyAgIGlzIG5vdCBzcGVjaWZpZWQpLgogCi0gICBUaGlzIGlzIGEgY29udmVuaWVudCBzaG9ydGhhbmQgZm9yIGBgcHJpbnQoY29kZV9pbmZvKHgpKWBgLCBpbnRlbmRlZCBmb3IKLSAgIGludGVyYWN0aXZlIGV4cGxvcmF0aW9uIGF0IHRoZSBpbnRlcnByZXRlciBwcm9tcHQuCisgICBUaGlzIGlzIGEgY29udmVuaWVudCBzaG9ydGhhbmQgZm9yIGBgcHJpbnQoY29kZV9pbmZvKHgpLCBmaWxlPWZpbGUpYGAsCisgICBpbnRlbmRlZCBmb3IgaW50ZXJhY3RpdmUgZXhwbG9yYXRpb24gYXQgdGhlIGludGVycHJldGVyIHByb21wdC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLS4uIGZ1bmN0aW9uOjogZGlzKHg9Tm9uZSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpcyh4PU5vbmUsICosIGZpbGU9Tm9uZSkKIAogICAgRGlzYXNzZW1ibGUgdGhlICp4KiBvYmplY3QuICAqeCogY2FuIGRlbm90ZSBlaXRoZXIgYSBtb2R1bGUsIGEgY2xhc3MsIGEKICAgIG1ldGhvZCwgYSBmdW5jdGlvbiwgYSBjb2RlIG9iamVjdCwgYSBzdHJpbmcgb2Ygc291cmNlIGNvZGUgb3IgYSBieXRlIHNlcXVlbmNlCkBAIC03MiwxNiArMTMyLDI4IEBACiAgICBkaXNhc3NlbWJsZWQuICBJZiBubyBvYmplY3QgaXMgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gZGlzYXNzZW1ibGVzIHRoZSBsYXN0CiAgICB0cmFjZWJhY2suCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgogCi0uLiBmdW5jdGlvbjo6IGRpc3RiKHRiPU5vbmUpCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgYGBmaWxlYGAgcGFyYW1ldGVyCisKKworLi4gZnVuY3Rpb246OiBkaXN0Yih0Yj1Ob25lLCAqLCBmaWxlPU5vbmUpCiAKICAgIERpc2Fzc2VtYmxlIHRoZSB0b3Atb2Ytc3RhY2sgZnVuY3Rpb24gb2YgYSB0cmFjZWJhY2ssIHVzaW5nIHRoZSBsYXN0CiAgICB0cmFjZWJhY2sgaWYgbm9uZSB3YXMgcGFzc2VkLiAgVGhlIGluc3RydWN0aW9uIGNhdXNpbmcgdGhlIGV4Y2VwdGlvbiBpcwogICAgaW5kaWNhdGVkLgogCisgICBUaGUgZGlzYXNzZW1ibHkgaXMgd3JpdHRlbiBhcyB0ZXh0IHRvIHRoZSBzdXBwbGllZCBgYGZpbGVgYCBhcmd1bWVudCBpZgorICAgcHJvdmlkZWQgYW5kIHRvIGBgc3lzLnN0ZG91dGBgIG90aGVyd2lzZS4KIAotLi4gZnVuY3Rpb246OiBkaXNhc3NlbWJsZShjb2RlLCBsYXN0aT0tMSkKLSAgICAgICAgICAgICAgZGlzY28oY29kZSwgbGFzdGk9LTEpCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgYGBmaWxlYGAgcGFyYW1ldGVyCisKKworLi4gZnVuY3Rpb246OiBkaXNhc3NlbWJsZShjb2RlLCBsYXN0aT0tMSwgKiwgZmlsZT1Ob25lKQorICAgICAgICAgICAgICBkaXNjbyhjb2RlLCBsYXN0aT0tMSwgKiwgZmlsZT1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LCBpbmRpY2F0aW5nIHRoZSBsYXN0IGluc3RydWN0aW9uIGlmICpsYXN0aSogd2FzCiAgICBwcm92aWRlZC4gIFRoZSBvdXRwdXQgaXMgZGl2aWRlZCBpbiB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CkBAIC05Nyw2ICsxNjksMjYgQEAKICAgIFRoZSBwYXJhbWV0ZXIgaW50ZXJwcmV0YXRpb24gcmVjb2duaXplcyBsb2NhbCBhbmQgZ2xvYmFsIHZhcmlhYmxlIG5hbWVzLAogICAgY29uc3RhbnQgdmFsdWVzLCBicmFuY2ggdGFyZ2V0cywgYW5kIGNvbXBhcmUgb3BlcmF0b3JzLgogCisgICBUaGUgZGlzYXNzZW1ibHkgaXMgd3JpdHRlbiBhcyB0ZXh0IHRvIHRoZSBzdXBwbGllZCBgYGZpbGVgYCBhcmd1bWVudCBpZgorICAgcHJvdmlkZWQgYW5kIHRvIGBgc3lzLnN0ZG91dGBgIG90aGVyd2lzZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIGBgZmlsZWBgIHBhcmFtZXRlcgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2luc3RydWN0aW9ucyh4LCAqLCBsaW5lX29mZnNldD0wKQorCisgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLAorICAgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0LgorCisgICBUaGUgaXRlcmF0b3IgZ2VuZXJhdGVzIGEgc2VyaWVzIG9mIDpjbGFzczpgSW5zdHJ1Y3Rpb25gIG5hbWVkIHR1cGxlcworICAgZ2l2aW5nIHRoZSBkZXRhaWxzIG9mIGVhY2ggb3BlcmF0aW9uIGluIHRoZSBzdXBwbGllZCBjb2RlLgorCisgICBUaGUgZ2l2ZW4gKmxpbmVfb2Zmc2V0KiBpcyBhZGRlZCB0byB0aGUgYGBzdGFydHNfbGluZWBgIGF0dHJpYnV0ZSBvZiBhbnkKKyAgIGluc3RydWN0aW9ucyB0aGF0IHN0YXJ0IGEgbmV3IGxpbmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogZmluZGxpbmVzdGFydHMoY29kZSkKIApAQCAtMTEwLDYyICsyMDIsNjEgQEAKICAgIERldGVjdCBhbGwgb2Zmc2V0cyBpbiB0aGUgY29kZSBvYmplY3QgKmNvZGUqIHdoaWNoIGFyZSBqdW1wIHRhcmdldHMsIGFuZAogICAgcmV0dXJuIGEgbGlzdCBvZiB0aGVzZSBvZmZzZXRzLgogCi0KLS4uIGRhdGE6OiBvcG5hbWUKLQotICAgU2VxdWVuY2Ugb2Ygb3BlcmF0aW9uIG5hbWVzLCBpbmRleGFibGUgdXNpbmcgdGhlIGJ5dGVjb2RlLgotCi0KLS4uIGRhdGE6OiBvcG1hcAotCi0gICBEaWN0aW9uYXJ5IG1hcHBpbmcgb3BlcmF0aW9uIG5hbWVzIHRvIGJ5dGVjb2Rlcy4KLQotCi0uLiBkYXRhOjogY21wX29wCi0KLSAgIFNlcXVlbmNlIG9mIGFsbCBjb21wYXJlIG9wZXJhdGlvbiBuYW1lcy4KLQotCi0uLiBkYXRhOjogaGFzY29uc3QKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhIGNvbnN0YW50IHBhcmFtZXRlci4KLQotCi0uLiBkYXRhOjogaGFzZnJlZQotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBmcmVlIHZhcmlhYmxlLgotCi0KLS4uIGRhdGE6OiBoYXNuYW1lCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhbiBhdHRyaWJ1dGUgYnkgbmFtZS4KLQotCi0uLiBkYXRhOjogaGFzanJlbAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgcmVsYXRpdmUganVtcCB0YXJnZXQuCi0KLQotLi4gZGF0YTo6IGhhc2phYnMKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhbiBhYnNvbHV0ZSBqdW1wIHRhcmdldC4KLQotCi0uLiBkYXRhOjogaGFzbG9jYWwKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGEgbG9jYWwgdmFyaWFibGUuCi0KLQotLi4gZGF0YTo6IGhhc2NvbXBhcmUKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIG9mIEJvb2xlYW4gb3BlcmF0aW9ucy4KLQotCiAuLiBfYnl0ZWNvZGVzOgogCiBQeXRob24gQnl0ZWNvZGUgSW5zdHJ1Y3Rpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1RoZSA6ZnVuYzpgZ2V0X2luc3RydWN0aW9uc2AgZnVuY3Rpb24gYW5kIDpjbGFzczpgQnl0ZWNvZGVgIGNsYXNzIHByb3ZpZGUKK2RldGFpbHMgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIGFzIDpjbGFzczpgSW5zdHJ1Y3Rpb25gIGluc3RhbmNlczoKKworLi4gY2xhc3M6OiBJbnN0cnVjdGlvbgorCisgICBEZXRhaWxzIGZvciBhIGJ5dGVjb2RlIG9wZXJhdGlvbgorCisgICAuLiBkYXRhOjogb3Bjb2RlCisKKyAgICAgIG51bWVyaWMgY29kZSBmb3Igb3BlcmF0aW9uLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcGNvZGUgdmFsdWVzIGxpc3RlZAorICAgICAgYmVsb3cgYW5kIHRoZSBieXRlY29kZSB2YWx1ZXMgaW4gdGhlIDpyZWY6YG9wY29kZV9jb2xsZWN0aW9uc2AuCisKKworICAgLi4gZGF0YTo6IG9wbmFtZQorCisgICAgICBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBvcGVyYXRpb24KKworCisgICAuLiBkYXRhOjogYXJnCisKKyAgICAgIG51bWVyaWMgYXJndW1lbnQgdG8gb3BlcmF0aW9uIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorCisKKyAgIC4uIGRhdGE6OiBhcmd2YWwKKworICAgICAgcmVzb2x2ZWQgYXJnIHZhbHVlIChpZiBrbm93biksIG90aGVyd2lzZSBzYW1lIGFzIGFyZworCisKKyAgIC4uIGRhdGE6OiBhcmdyZXByCisKKyAgICAgIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIG9wZXJhdGlvbiBhcmd1bWVudAorCisKKyAgIC4uIGRhdGE6OiBvZmZzZXQKKworICAgICAgc3RhcnQgaW5kZXggb2Ygb3BlcmF0aW9uIHdpdGhpbiBieXRlY29kZSBzZXF1ZW5jZQorCisKKyAgIC4uIGRhdGE6OiBzdGFydHNfbGluZQorCisgICAgICBsaW5lIHN0YXJ0ZWQgYnkgdGhpcyBvcGNvZGUgKGlmIGFueSksIG90aGVyd2lzZSBOb25lCisKKworICAgLi4gZGF0YTo6IGlzX2p1bXBfdGFyZ2V0CisKKyAgICAgIFRydWUgaWYgb3RoZXIgY29kZSBqdW1wcyB0byBoZXJlLCBvdGhlcndpc2UgRmFsc2UKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIFB5dGhvbiBjb21waWxlciBjdXJyZW50bHkgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogCiAKQEAgLTUwNiwxMiArNTk3LDYgQEAKICAgIC4uIFhYWCBleHBsYWluIHRoZSBXSFkgc3R1ZmYhCiAKIAotLi4gb3Bjb2RlOjogU1RPUkVfTE9DQUxTCi0KLSAgIFBvcHMgVE9TIGZyb20gdGhlIHN0YWNrIGFuZCBzdG9yZXMgaXQgYXMgdGhlIGN1cnJlbnQgZnJhbWUncyBgYGZfbG9jYWxzYGAuCi0gICBUaGlzIGlzIHVzZWQgaW4gY2xhc3MgY29uc3RydWN0aW9uLgotCi0KIEFsbCBvZiB0aGUgZm9sbG93aW5nIG9wY29kZXMgZXhwZWN0IGFyZ3VtZW50cy4gIEFuIGFyZ3VtZW50IGlzIHR3byBieXRlcywgd2l0aAogdGhlIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZSBsYXN0LgogCkBAIC03MjIsNiArODA3LDEzIEBACiAgICBQdXNoZXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB0aGUgY2VsbCBjb250YWlucyBvbiB0aGUgc3RhY2suCiAKIAorLi4gb3Bjb2RlOjogTE9BRF9DTEFTU0RFUkVGIChpKQorCisgICBNdWNoIGxpa2UgOm9wY29kZTpgTE9BRF9ERVJFRmAgYnV0IGZpcnN0IGNoZWNrcyB0aGUgbG9jYWxzIGRpY3Rpb25hcnkgYmVmb3JlCisgICBjb25zdWx0aW5nIHRoZSBjZWxsLiAgVGhpcyBpcyB1c2VkIGZvciBsb2FkaW5nIGZyZWUgdmFyaWFibGVzIGluIGNsYXNzCisgICBib2RpZXMuCisKKwogLi4gb3Bjb2RlOjogU1RPUkVfREVSRUYgKGkpCiAKICAgIFN0b3JlcyBUT1MgaW50byB0aGUgY2VsbCBjb250YWluZWQgaW4gc2xvdCAqaSogb2YgdGhlIGNlbGwgYW5kIGZyZWUgdmFyaWFibGUKQEAgLTgyMCwzICs5MTIsNjIgQEAKICAgIHdoaWNoIGRvbid0IHRha2UgYXJndW1lbnRzIGBgPCBIQVZFX0FSR1VNRU5UYGAgYW5kIHRob3NlIHdoaWNoIGRvIGBgPj0KICAgIEhBVkVfQVJHVU1FTlRgYC4KIAorLi4gX29wY29kZV9jb2xsZWN0aW9uczoKKworT3Bjb2RlIGNvbGxlY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29sbGVjdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBhdXRvbWF0aWMgaW50cm9zcGVjdGlvbiBvZiBieXRlY29kZQoraW5zdHJ1Y3Rpb25zOgorCisuLiBkYXRhOjogb3BuYW1lCisKKyAgIFNlcXVlbmNlIG9mIG9wZXJhdGlvbiBuYW1lcywgaW5kZXhhYmxlIHVzaW5nIHRoZSBieXRlY29kZS4KKworCisuLiBkYXRhOjogb3BtYXAKKworICAgRGljdGlvbmFyeSBtYXBwaW5nIG9wZXJhdGlvbiBuYW1lcyB0byBieXRlY29kZXMuCisKKworLi4gZGF0YTo6IGNtcF9vcAorCisgICBTZXF1ZW5jZSBvZiBhbGwgY29tcGFyZSBvcGVyYXRpb24gbmFtZXMuCisKKworLi4gZGF0YTo6IGhhc2NvbnN0CisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSBjb25zdGFudCBwYXJhbWV0ZXIuCisKKworLi4gZGF0YTo6IGhhc2ZyZWUKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGEgZnJlZSB2YXJpYWJsZSAobm90ZSB0aGF0ICdmcmVlJyBpbgorICAgdGhpcyBjb250ZXh0IHJlZmVycyB0byBuYW1lcyBpbiB0aGUgY3VycmVudCBzY29wZSB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5CisgICBpbm5lciBzY29wZXMgb3IgbmFtZXMgaW4gb3V0ZXIgc2NvcGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGlzIHNjb3BlLgorICAgSXQgZG9lcyAqbm90KiBpbmNsdWRlIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIG9yIGJ1aWx0aW4gc2NvcGVzKS4KKworCisuLiBkYXRhOjogaGFzbmFtZQorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYW4gYXR0cmlidXRlIGJ5IG5hbWUuCisKKworLi4gZGF0YTo6IGhhc2pyZWwKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhIHJlbGF0aXZlIGp1bXAgdGFyZ2V0LgorCisKKy4uIGRhdGE6OiBoYXNqYWJzCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYW4gYWJzb2x1dGUganVtcCB0YXJnZXQuCisKKworLi4gZGF0YTo6IGhhc2xvY2FsCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGxvY2FsIHZhcmlhYmxlLgorCisKKy4uIGRhdGE6OiBoYXNjb21wYXJlCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyBvZiBCb29sZWFuIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CmluZGV4IDIyMmM3MTkuLjYxMzhlMzAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CkBAIC00OTUsNyArNDk1LDEwIEBACiBBIG51bWJlciBvZiBvcHRpb24gZmxhZ3MgY29udHJvbCB2YXJpb3VzIGFzcGVjdHMgb2YgZG9jdGVzdCdzIGJlaGF2aW9yLgogU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFncyBhcmUgc3VwcGxpZWQgYXMgbW9kdWxlIGNvbnN0YW50cywgd2hpY2ggY2FuIGJlCiBvcidlZCB0b2dldGhlciBhbmQgcGFzc2VkIHRvIHZhcmlvdXMgZnVuY3Rpb25zLiAgVGhlIG5hbWVzIGNhbiBhbHNvIGJlIHVzZWQgaW4KLTpyZWY6YGRvY3Rlc3QgZGlyZWN0aXZlcyA8ZG9jdGVzdC1kaXJlY3RpdmVzPmAuCis6cmVmOmBkb2N0ZXN0IGRpcmVjdGl2ZXMgPGRvY3Rlc3QtZGlyZWN0aXZlcz5gLCBhbmQgbWF5IGJlIHBhc3NlZCB0byB0aGUKK2RvY3Rlc3QgY29tbWFuZCBsaW5lIGludGVyZmFjZSB2aWEgdGhlIGBgLW9gYCBvcHRpb24uCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNCB0aGUgYGAtb2BgIGNvbW1hbmQgbGluZSBvcHRpb24KIAogVGhlIGZpcnN0IGdyb3VwIG9mIG9wdGlvbnMgZGVmaW5lIHRlc3Qgc2VtYW50aWNzLCBjb250cm9sbGluZyBhc3BlY3RzIG9mIGhvdwogZG9jdGVzdCBkZWNpZGVzIHdoZXRoZXIgYWN0dWFsIG91dHB1dCBtYXRjaGVzIGFuIGV4YW1wbGUncyBleHBlY3RlZCBvdXRwdXQ6CkBAIC02MzMsNiArNjM2LDE5IEBACiAgICB0aGUgb3V0cHV0IGlzIHN1cHByZXNzZWQuCiAKIAorLi4gZGF0YTo6IEZBSUxfRkFTVAorCisgICBXaGVuIHNwZWNpZmllZCwgZXhpdCBhZnRlciB0aGUgZmlyc3QgZmFpbGluZyBleGFtcGxlIGFuZCBkb24ndCBhdHRlbXB0IHRvIHJ1bgorICAgdGhlIHJlbWFpbmluZyBleGFtcGxlcy4gVGh1cywgdGhlIG51bWJlciBvZiBmYWlsdXJlcyByZXBvcnRlZCB3aWxsIGJlIGF0IG1vc3QKKyAgIDEuICBUaGlzIGZsYWcgbWF5IGJlIHVzZWZ1bCBkdXJpbmcgZGVidWdnaW5nLCBzaW5jZSBleGFtcGxlcyBhZnRlciB0aGUgZmlyc3QKKyAgIGZhaWx1cmUgd29uJ3QgZXZlbiBwcm9kdWNlIGRlYnVnZ2luZyBvdXRwdXQuCisKKyAgIFRoZSBkb2N0ZXN0IGNvbW1hbmQgbGluZSBhY2NlcHRzIHRoZSBvcHRpb24gYGAtZmBgIGFzIGEgc2hvcnRoYW5kIGZvciBgYC1vCisgICBGQUlMX0ZBU1RgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZGF0YTo6IFJFUE9SVElOR19GTEFHUwogCiAgICBBIGJpdG1hc2sgb3InaW5nIHRvZ2V0aGVyIGFsbCB0aGUgcmVwb3J0aW5nIGZsYWdzIGFib3ZlLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYmE3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlci5yc3QKQEAgLTAsMCArMSw0MjcgQEAKKzptb2Q6YGVtYWlsLmNvbnRlbnRtYW5hZ2VyYDogTWFuYWdpbmcgTUlNRSBDb250ZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtb2R1bGU6OiBlbWFpbC5jb250ZW50bWFuYWdlcgorICAgOnN5bm9wc2lzOiBTdG9yaW5nIGFuZCBSZXRyaWV2aW5nIENvbnRlbnQgZnJvbSBNSU1FIFBhcnRzCisKKy4uIG1vZHVsZWF1dGhvcjo6IFIuIERhdmlkIE11cnJheSA8cmRtdXJyYXlAYml0ZGFuY2UuY29tPgorLi4gc2VjdGlvbmF1dGhvcjo6IFIuIERhdmlkIE11cnJheSA8cmRtdXJyYXlAYml0ZGFuY2UuY29tPgorCisKKy4uIG5vdGU6OgorCisgICBUaGUgY29udGVudG1hbmFnZXIgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uIGEKKyAgIDp0ZXJtOmBwcm92aXNpb25hbCBiYXNpcyA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLiBCYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIG1vZHVsZSkgbWF5IG9jY3VyIGlmIGRlZW1lZAorICAgbmVjZXNzYXJ5IGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgYXMgYSA6dGVybTpgcHJvdmlzaW9uYWwgbW9kdWxlIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuCisKK1RoZSA6bW9kOmB+ZW1haWwubWVzc2FnZWAgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgdGhhdCBjYW4gcmVwcmVzZW50IGFuCithcmJpdHJhcnkgZW1haWwgbWVzc2FnZS4gIFRoYXQgYmFzaWMgbWVzc2FnZSBtb2RlbCBoYXMgYSB1c2VmdWwgYW5kIGZsZXhpYmxlCitBUEksIGJ1dCBpdCBwcm92aWRlcyBvbmx5IGEgbG93ZXItbGV2ZWwgQVBJIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBnZW5lcmljCitwYXJ0cyBvZiBhIG1lc3NhZ2UgKHRoZSBoZWFkZXJzLCBnZW5lcmljIGhlYWRlciBwYXJhbWV0ZXJzLCBhbmQgdGhlIHBheWxvYWQsCit3aGljaCBtYXkgYmUgYSBsaXN0IG9mIHN1Yi1wYXJ0cykuICBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB0b29scwordGhhdCBwcm92aWRlIGFuIGVuaGFuY2VkIGFuZCBleHRlbnNpYmxlIEFQSSBmb3IgZGVhbGluZyB3aXRoIHZhcmlvdXMgc3BlY2lmaWMKK3R5cGVzIG9mIGNvbnRlbnQsIGluY2x1ZGluZyB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZSB0aGUgY29udGVudCBvZiB0aGUgbWVzc2FnZQorYXMgYSBzcGVjaWFsaXplZCBvYmplY3QgdHlwZSByYXRoZXIgdGhhbiBhcyBhIHNpbXBsZSBieXRlcyBvYmplY3QuICBUaGUgbW9kdWxlCithdXRvbWF0aWNhbGx5IHRha2VzIGNhcmUgb2YgdGhlIFJGQy1zcGVjaWZpZWQgTUlNRSBkZXRhaWxzIChyZXF1aXJlZCBoZWFkZXJzCithbmQgcGFyYW1ldGVycywgZXRjLikgZm9yIHRoZSBjZXJ0YWluIGNvbW1vbiBjb250ZW50IHR5cGVzIGNvbnRlbnQgcHJvcGVydGllcywKK2FuZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIHR5cGVzIGNhbiBiZSBhZGRlZCBieSBhbiBhcHBsaWNhdGlvbiB1c2luZyB0aGUKK2V4dGVuc2lvbiBtZWNoYW5pc21zLgorCitUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBlcG9ueW1vdXMgIkNvbnRlbnQgTWFuYWdlciIgY2xhc3Nlcy4gIFRoZSBiYXNlCis6Y2xhc3M6YC5Db250ZW50TWFuYWdlcmAgY2xhc3MgZGVmaW5lcyBhbiBBUEkgZm9yIHJlZ2lzdGVyaW5nIGNvbnRlbnQKK21hbmFnZW1lbnQgZnVuY3Rpb25zIHdoaWNoIGV4dHJhY3QgZGF0YSBmcm9tIGBgTWVzc2FnZWBgIG9iamVjdHMgb3IgaW5zZXJ0IGRhdGEKK2FuZCBoZWFkZXJzIGludG8gYGBNZXNzYWdlYGAgb2JqZWN0cywgdGh1cyBwcm92aWRpbmcgYSB3YXkgb2YgY29udmVydGluZworYmV0d2VlbiBgYE1lc3NhZ2VgYCBvYmplY3RzIGNvbnRhaW5pbmcgZGF0YSBhbmQgb3RoZXIgcmVwcmVzZW50YXRpb25zIG9mIHRoYXQKK2RhdGEgKFB5dGhvbiBkYXRhIHR5cGVzLCBzcGVjaWFsaXplZCBQeXRob24gb2JqZWN0cywgZXh0ZXJuYWwgZmlsZXMsIGV0YykuICBUaGUKK21vZHVsZSBhbHNvIGRlZmluZXMgb25lIGNvbmNyZXRlIGNvbnRlbnQgbWFuYWdlcjogOmRhdGE6YHJhd19kYXRhX21hbmFnZXJgCitjb252ZXJ0cyBiZXR3ZWVuIE1JTUUgY29udGVudCB0eXBlcyBhbmQgYGBzdHJgYCBvciBgYGJ5dGVzYGAgZGF0YS4gIEl0IGFsc28KK3Byb3ZpZGVzIGEgY29udmVuaWVudCBBUEkgZm9yIG1hbmFnaW5nIHRoZSBNSU1FIHBhcmFtZXRlcnMgd2hlbiBpbnNlcnRpbmcKK2NvbnRlbnQgaW50byBgYE1lc3NhZ2VgYFwgcy4gIEl0IGFsc28gaGFuZGxlcyBpbnNlcnRpbmcgYW5kIGV4dHJhY3RpbmcKK2BgTWVzc2FnZWBgIG9iamVjdHMgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGBgbWVzc2FnZS9yZmM4MjJgYCBjb250ZW50IHR5cGUuCisKK0Fub3RoZXIgcGFydCBvZiB0aGUgZW5oYW5jZWQgaW50ZXJmYWNlIGlzIHN1YmNsYXNzZXMgb2YKKzpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgdGhhdCBwcm92aWRlIG5ldyBjb252ZW5pZW5jZSBBUEkgZnVuY3Rpb25zLAoraW5jbHVkaW5nIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGNhbGxpbmcgdGhlIENvbnRlbnQgTWFuYWdlcnMgZGVyaXZlZCBmcm9tCit0aGlzIG1vZHVsZS4KKworLi4gbm90ZTo6CisKKyAgIEFsdGhvdWdoIDpjbGFzczpgLkVtYWlsTWVzc2FnZWAgYW5kIDpjbGFzczpgLk1JTUVQYXJ0YCBhcmUgY3VycmVudGx5CisgICBkb2N1bWVudGVkIGluIHRoaXMgbW9kdWxlIGJlY2F1c2Ugb2YgdGhlIHByb3Zpc2lvbmFsIG5hdHVyZSBvZiB0aGUgY29kZSwgdGhlCisgICBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiB0aGUgOm1vZDpgZW1haWwubWVzc2FnZWAgbW9kdWxlLgorCisKKy4uIGNsYXNzOjogRW1haWxNZXNzYWdlKHBvbGljeT1kZWZhdWx0KQorCisgICBJZiAqcG9saWN5KiBpcyBzcGVjaWZpZWQgKGl0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSA6bW9kOmB+ZW1haWwucG9saWN5YAorICAgY2xhc3MpIHVzZSB0aGUgcnVsZXMgaXQgc3BlY2lmaWVzIHRvIHVkcGF0ZSBhbmQgc2VyaWFsaXplIHRoZSByZXByZXNlbnRhdGlvbgorICAgb2YgdGhlIG1lc3NhZ2UuICBJZiAqcG9saWN5KiBpcyBub3Qgc2V0LCB1c2UgdGhlCisgICA6Y2xhc3M6YH5lbWFpbC5wb2xpY3kuZGVmYXVsdGAgcG9saWN5LCB3aGljaCBmb2xsb3dzIHRoZSBydWxlcyBvZiB0aGUgZW1haWwKKyAgIFJGQ3MgZXhjZXB0IGZvciBsaW5lIGVuZGluZ3MgKGluc3RlYWQgb2YgdGhlIFJGQyBtYW5kYXRlZCBgYFxyXG5gYCwgaXQgdXNlcworICAgdGhlIFB5dGhvbiBzdGFuZGFyZCBgYFxuYGAgbGluZSBlbmRpbmdzKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKKyAgIDptb2Q6YH5lbWFpbC5wb2xpY3lgIGRvY3VtZW50YXRpb24uCisKKyAgIFRoaXMgY2xhc3MgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgLiAgSXQgYWRkcworICAgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGlzX2F0dGFjaG1lbnQKKworICAgICAgU2V0IHRvIGBgVHJ1ZWBgIGlmIHRoZXJlIGlzIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlcgorICAgICAgYW5kIGl0cyAoY2FzZSBpbnNlbnNpdGl2ZSkgdmFsdWUgaXMgYGBhdHRhY2htZW50YGAsIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSkKKworICAgICAgUmV0dXJuIHRoZSBNSU1FIHBhcnQgdGhhdCBpcyB0aGUgYmVzdCBjYW5kaWRhdGUgdG8gYmUgdGhlICJib2R5IiBvZiB0aGUKKyAgICAgIG1lc3NhZ2UuCisKKyAgICAgICpwcmVmZXJlbmNlbGlzdCogbXVzdCBiZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3MgZnJvbSB0aGUgc2V0IGBgcmVsYXRlZGBgLAorICAgICAgYGBodG1sYGAsIGFuZCBgYHBsYWluYGAsIGFuZCBpbmRpY2F0ZXMgdGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgZm9yIHRoZQorICAgICAgY29udGVudCB0eXBlIG9mIHRoZSBwYXJ0IHJldHVybmVkLgorCisgICAgICBTdGFydCBsb29raW5nIGZvciBjYW5kaWRhdGUgbWF0Y2hlcyB3aXRoIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlCisgICAgICBgYGdldF9ib2R5YGAgbWV0aG9kIGlzIGNhbGxlZC4KKworICAgICAgSWYgYGByZWxhdGVkYGAgaXMgbm90IGluY2x1ZGVkIGluICpwcmVmZXJlbmNlbGlzdCosIGNvbnNpZGVyIHRoZSByb290CisgICAgICBwYXJ0IChvciBzdWJwYXJ0IG9mIHRoZSByb290IHBhcnQpIG9mIGFueSByZWxhdGVkIGVuY291bnRlcmVkIGFzIGEKKyAgICAgIGNhbmRpZGF0ZSBpZiB0aGUgKHN1Yi0pcGFydCBtYXRjaGVzIGEgcHJlZmVyZW5jZS4KKworICAgICAgV2hlbiBlbmNvdW50ZXJpbmcgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAsIGNoZWNrIHRoZSBgYHN0YXJ0YGAgcGFyYW1ldGVyCisgICAgICBhbmQgaWYgYSBwYXJ0IHdpdGggYSBtYXRjaGluZyA6bWFpbGhlYWRlcjpgQ29udGVudC1JRGAgaXMgZm91bmQsIGNvbnNpZGVyCisgICAgICBvbmx5IGl0IHdoZW4gbG9va2luZyBmb3IgY2FuZGlkYXRlIG1hdGNoZXMuICBPdGhlcndpc2UgY29uc2lkZXIgb25seSB0aGUKKyAgICAgIGZpcnN0IChkZWZhdWx0IHJvb3QpIHBhcnQgb2YgdGhlIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYC4KKworICAgICAgSWYgYSBwYXJ0IGhhcyBhIDptYWlsaGVhZGVyOmBgQ29udGVudC1EaXNwb3NpdGlvbmBgIGhlYWRlciwgb25seSBjb25zaWRlcgorICAgICAgdGhlIHBhcnQgYSBjYW5kaWRhdGUgbWF0Y2ggaWYgdGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIgaXMgYGBpbmxpbmVgYC4KKworICAgICAgSWYgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBtYXRjaGVzIGFueSBvZiB0aGUgcHJlZmVyZW5jZXMgaW4KKyAgICAgICpwcmVmZXJuZWNsaXN0KiwgcmV0dXJuIGBgTm9uZWBgLgorCisgICAgICBOb3RlczogKDEpIEZvciBtb3N0IGFwcGxpY2F0aW9ucyB0aGUgb25seSAqcHJlZmVyZW5jZWxpc3QqIGNvbWJpbmF0aW9ucworICAgICAgdGhhdCByZWFsbHkgbWFrZSBzZW5zZSBhcmUgYGAoJ3BsYWluJywpYGAsIGBgKCdodG1sJywgJ3BsYWluJylgYCwgYW5kIHRoZQorICAgICAgZGVmYXVsdCwgYGAoJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpYGAuICAoMikgQmVjYXVzZSBtYXRjaGluZyBzdGFydHMKKyAgICAgIHdpdGggdGhlIG9iamVjdCBvbiB3aGljaCBgYGdldF9ib2R5YGAgaXMgY2FsbGVkLCBjYWxsaW5nIGBgZ2V0X2JvZHlgYCBvbgorICAgICAgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgd2lsbCByZXR1cm4gdGhlIG9iamVjdCBpdHNlbGYgdW5sZXNzCisgICAgICAqcHJlZmVyZW5jZWxpc3QqIGhhcyBhIG5vbi1kZWZhdWx0IHZhbHVlLiAoMykgTWVzc2FnZXMgKG9yIG1lc3NhZ2UgcGFydHMpCisgICAgICB0aGF0IGRvIG5vdCBzcGVjaWZ5IGEgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgb3Igd2hvc2UKKyAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlciBpcyBpbnZhbGlkIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiB0aGV5CisgICAgICBhcmUgb2YgdHlwZSBgYHRleHQvcGxhaW5gYCwgd2hpY2ggbWF5IG9jY2FzaW9uYWxseSBjYXVzZSBgYGdldF9ib2R5YGAgdG8KKyAgICAgIHJldHVybiB1bmV4cGVjdGVkIHJlc3VsdHMuCisKKworICAgLi4gbWV0aG9kOjogaXRlcl9hdHRhY2htZW50cygpCisKKyAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBvZiB0aGUgcGFydHMgb2YgdGhlIG1lc3NhZ2UgdGhhdCBhcmUgbm90CisgICAgICBjYW5kaWRhdGUgImJvZHkiIHBhcnRzLiAgVGhhdCBpcywgc2tpcCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBlYWNoIG9mCisgICAgICBgYHRleHQvcGxhaW5gYCwgYGB0ZXh0L2h0bWxgYCwgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvcgorICAgICAgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCAodW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgbWFya2VkIGFzCisgICAgICBhdHRhY2htZW50cyB2aWEgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnRgKSwgYW5kCisgICAgICByZXR1cm4gYWxsIHJlbWFpbmluZyBwYXJ0cy4gIFdoZW4gYXBwbGllZCBkaXJlY3RseSB0byBhCisgICAgICBgYG11bHRpcGFydC9yZWxhdGVkYGAsIHJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBhbGwgdGhlIHJlbGF0ZWQgcGFydHMKKyAgICAgIGV4Y2VwdCB0aGUgcm9vdCBwYXJ0IChpZTogdGhlIHBhcnQgcG9pbnRlZCB0byBieSB0aGUgYGBzdGFydGBgIHBhcmFtZXRlciwKKyAgICAgIG9yIHRoZSBmaXJzdCBwYXJ0IGlmIHRoZXJlIGlzIG5vIGBgc3RhcnRgYCBwYXJhbWV0ZXIgb3IgdGhlIGBgc3RhcnRgYAorICAgICAgcGFyYW1ldGVyIGRvZXNuJ3QgbWF0Y2ggdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBvZiBhbnkgb2YgdGhlCisgICAgICBwYXJ0cykuICBXaGVuIGFwcGxpZWQgZGlyZWN0bHkgdG8gYSBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgIG9yIGEKKyAgICAgIG5vbi1gYG11bHRpcGFydGBgLCByZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IuCisKKworICAgLi4gbWV0aG9kOjogaXRlcl9wYXJ0cygpCisKKyAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBvZiB0aGUgaW1tZWRpYXRlIHN1Yi1wYXJ0cyBvZiB0aGUgbWVzc2FnZSwKKyAgICAgIHdoaWNoIHdpbGwgYmUgZW1wdHkgZm9yIGEgbm9uLWBgbXVsdGlwYXJ0YGAuICAoU2VlIGFsc28KKyAgICAgIDptZXRoOmBgfmVtYWlsLm1lc3NhZ2Uud2Fsa2BgLikKKworCisgICAuLiBtZXRob2Q6OiBnZXRfY29udGVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIENhbGwgdGhlIGBgZ2V0X2NvbnRlbnRgYCBtZXRob2Qgb2YgdGhlICpjb250ZW50X21hbmFnZXIqLCBwYXNzaW5nIHNlbGYKKyAgICAgIGFzIHRoZSBtZXNzYWdlIG9iamVjdCwgYW5kIHBhc3NpbmcgYWxvbmcgYW55IG90aGVyIGFyZ3VtZW50cyBvciBrZXl3b3JkcworICAgICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuICBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIENhbGwgdGhlIGBgc2V0X2NvbnRlbnRgYCBtZXRob2Qgb2YgdGhlICpjb250ZW50X21hbmFnZXIqLCBwYXNzaW5nIHNlbGYKKyAgICAgIGFzIHRoZSBtZXNzYWdlIG9iamVjdCwgYW5kIHBhc3NpbmcgYWxvbmcgYW55IG90aGVyIGFyZ3VtZW50cyBvciBrZXl3b3JkcworICAgICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuICBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBtYWtlX3JlbGF0ZWQoYm91bmRhcnk9Tm9uZSkKKworICAgICAgQ29udmVydCBhIG5vbi1gYG11bHRpcGFydGBgIG1lc3NhZ2UgaW50byBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCBtZXNzYWdlLAorICAgICAgbW92aW5nIGFueSBleGlzdGluZyA6bWFpbGhlYWRlcjpgQ29udGVudC1gIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhCisgICAgICAobmV3KSBmaXJzdCBwYXJ0IG9mIHRoZSBgYG11bHRpcGFydGBgLiAgSWYgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZQorICAgICAgaXQgYXMgdGhlIGJvdW5kYXJ5IHN0cmluZyBpbiB0aGUgbXVsdGlwYXJ0LCBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5CisgICAgICB0byBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2hlbiBpdCBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZQorICAgICAgbWVzc2FnZSBpcyBzZXJpYWxpemVkKS4KKworCisgICAuLiBtZXRob2Q6OiBtYWtlX2FsdGVybmF0aXZlKGJvdW5kYXJ5PU5vbmUpCisKKyAgICAgIENvbnZlcnQgYSBub24tYGBtdWx0aXBhcnRgYCBvciBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCBpbnRvIGEKKyAgICAgIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAsIG1vdmluZyBhbnkgZXhpc3RpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtYAorICAgICAgaGVhZGVycyBhbmQgcGF5bG9hZCBpbnRvIGEgKG5ldykgZmlyc3QgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnRgYC4gIElmCisgICAgICAqYm91bmRhcnkqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSBib3VuZGFyeSBzdHJpbmcgaW4gdGhlIG11bHRpcGFydCwKKyAgICAgIG90aGVyd2lzZSBsZWF2ZSB0aGUgYm91bmRhcnkgdG8gYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHdoZW4gaXQgaXMKKyAgICAgIG5lZWRlZCAoZm9yIGV4YW1wbGUsIHdoZW4gdGhlIG1lc3NhZ2UgaXMgc2VyaWFsaXplZCkuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9taXhlZChib3VuZGFyeT1Ob25lKQorCisgICAgICBDb252ZXJ0IGEgbm9uLWBgbXVsdGlwYXJ0YGAsIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvciBhCisgICAgICBgYG11bHRpcGFydC1hbHRlcm5hdGl2ZWBgIGludG8gYSBgYG11bHRpcGFydC9taXhlZGBgLCBtb3ZpbmcgYW55IGV4aXN0aW5nCisgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1gIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhIChuZXcpIGZpcnN0IHBhcnQgb2YgdGhlCisgICAgICBgYG11bHRpcGFydGBgLiAgSWYgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgYm91bmRhcnkgc3RyaW5nCisgICAgICBpbiB0aGUgbXVsdGlwYXJ0LCBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5IHRvIGJlIGF1dG9tYXRpY2FsbHkKKyAgICAgIGNyZWF0ZWQgd2hlbiBpdCBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZSBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQpLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9yZWxhdGVkKCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAsIGNyZWF0ZSBhIG5ldyBtZXNzYWdlCisgICAgICBvYmplY3QsIHBhc3MgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gaXRzIDptZXRoOmBzZXRfY29udGVudGAgbWV0aG9kLAorICAgICAgYW5kIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaGAgaXQgdG8gdGhlIGBgbXVsdGlwYXJ0YGAuICBJZgorICAgICAgdGhlIG1lc3NhZ2UgaXMgYSBub24tYGBtdWx0aXBhcnRgYCwgY2FsbCA6bWV0aDpgbWFrZV9yZWxhdGVkYCBhbmQgdGhlbgorICAgICAgcHJvY2VlZCBhcyBhYm92ZS4gIElmIHRoZSBtZXNzYWdlIGlzIGFueSBvdGhlciB0eXBlIG9mIGBgbXVsdGlwYXJ0YGAsCisgICAgICByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuIElmICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZQorICAgICAgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLgorICAgICAgSWYgdGhlIGFkZGVkIHBhcnQgaGFzIG5vIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIsCisgICAgICBhZGQgb25lIHdpdGggdGhlIHZhbHVlIGBgaW5saW5lYGAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX2FsdGVybmF0aXZlKCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBjcmVhdGUgYSBuZXcgbWVzc2FnZQorICAgICAgb2JqZWN0LCBwYXNzIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIGl0cyA6bWV0aDpgc2V0X2NvbnRlbnRgIG1ldGhvZCwgYW5kCisgICAgICA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hgIGl0IHRvIHRoZSBgYG11bHRpcGFydGBgLiAgSWYgdGhlCisgICAgICBtZXNzYWdlIGlzIGEgbm9uLWBgbXVsdGlwYXJ0YGAgb3IgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjYWxsCisgICAgICA6bWV0aDpgbWFrZV9hbHRlcm5hdGl2ZWAgYW5kIHRoZW4gcHJvY2VlZCBhcyBhYm92ZS4gIElmIHRoZSBtZXNzYWdlIGlzCisgICAgICBhbnkgb3RoZXIgdHlwZSBvZiBgYG11bHRpcGFydGBgLCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuIElmCisgICAgICAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkCisgICAgICBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfYXR0YWNobWVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvbWl4ZWRgYCwgY3JlYXRlIGEgbmV3IG1lc3NhZ2Ugb2JqZWN0LAorICAgICAgcGFzcyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBpdHMgOm1ldGg6YHNldF9jb250ZW50YCBtZXRob2QsIGFuZAorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNoYCBpdCB0byB0aGUgYGBtdWx0aXBhcnRgYC4gIElmIHRoZQorICAgICAgbWVzc2FnZSBpcyBhIG5vbi1gYG11bHRpcGFydGBgLCBgYG11bHRpcGFydC9yZWxhdGVkYGAsIG9yCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBjYWxsIDptZXRoOmBtYWtlX21peGVkYCBhbmQgdGhlbiBwcm9jZWVkIGFzCisgICAgICBhYm92ZS4gSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgCisgICAgICBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuICBJZiB0aGUgYWRkZWQgcGFydAorICAgICAgaGFzIG5vIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIsIGFkZCBvbmUgd2l0aCB0aGUgdmFsdWUKKyAgICAgIGBgYXR0YWNobWVudGBgLiAgVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgYm90aCBmb3IgZXhwbGljaXQgYXR0YWNobWVudHMKKyAgICAgICg6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGAgYW5kIGBgaW5saW5lYGAgYXR0YWNobWVudHMKKyAgICAgICg6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lYCksIGJ5IHBhc3NpbmcgYXBwcm9wcmlhdGUKKyAgICAgIG9wdGlvbnMgdG8gdGhlIGBgY29udGVudF9tYW5hZ2VyYGAuCisKKworICAgLi4gbWV0aG9kOjogY2xlYXIoKQorCisgICAgICBSZW1vdmUgdGhlIHBheWxvYWQgYW5kIGFsbCBvZiB0aGUgaGVhZGVycy4KKworCisgICAuLiBtZXRob2Q6OiBjbGVhcl9jb250ZW50KCkKKworICAgICAgUmVtb3ZlIHRoZSBwYXlsb2FkIGFuZCBhbGwgb2YgdGhlIDpleGM6YENvbnRlbnQtYCBoZWFkZXJzLCBsZWF2aW5nCisgICAgICBhbGwgb3RoZXIgaGVhZGVycyBpbnRhY3QgYW5kIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLgorCisKKy4uIGNsYXNzOjogQ29udGVudE1hbmFnZXIoKQorCisgICBCYXNlIGNsYXNzIGZvciBjb250ZW50IG1hbmFnZXJzLiAgUHJvdmlkZXMgdGhlIHN0YW5kYXJkIHJlZ2lzdHJ5IG1lY2hhbmlzbXMKKyAgIHRvIHJlZ2lzdGVyIGNvbnZlcnRlcnMgYmV0d2VlbiBNSU1FIGNvbnRlbnQgYW5kIG90aGVyIHJlcHJlc2VudGF0aW9ucywgYXMKKyAgIHdlbGwgYXMgdGhlIGBgZ2V0X2NvbnRlbnRgYCBhbmQgYGBzZXRfY29udGVudGBgIGRpc3BhdGNoIG1ldGhvZHMuCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQobXNnLCAqYXJncywgKiprdykKKworICAgICAgTG9vayB1cCBhIGhhbmRsZXIgZnVuY3Rpb24gYmFzZWQgb24gdGhlIGBgbWltZXR5cGVgYCBvZiAqbXNnKiAoc2VlIG5leHQKKyAgICAgIHBhcmFncmFwaCksIGNhbGwgaXQsIHBhc3NpbmcgdGhyb3VnaCBhbGwgYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQKKyAgICAgIG9mIHRoZSBjYWxsLiAgVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIGhhbmRsZXIgd2lsbCBleHRyYWN0IHRoZQorICAgICAgcGF5bG9hZCBmcm9tICptc2cqIGFuZCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgZW5jb2RlcyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgdGhlIGV4dHJhY3RlZCBkYXRhLgorCisgICAgICBUbyBmaW5kIHRoZSBoYW5kbGVyLCBsb29rIGZvciB0aGUgZm9sbG93aW5nIGtleXMgaW4gdGhlIHJlZ2lzdHJ5LAorICAgICAgc3RvcHBpbmcgd2l0aCB0aGUgZmlyc3Qgb25lIGZvdW5kOgorCisgICAgICAgICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmdWxsIE1JTUUgdHlwZSAoYGBtYWludHlwZS9zdWJ0eXBlYGApCisgICAgICAgICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBgYG1haW50eXBlYGAKKyAgICAgICAgICAgICogdGhlIGVtcHR5IHN0cmluZworCisgICAgICBJZiBub25lIG9mIHRoZXNlIGtleXMgcHJvZHVjZSBhIGhhbmRsZXIsIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGZvciB0aGUKKyAgICAgIGZ1bGwgTUlNRSB0eXBlLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldF9jb250ZW50KG1zZywgb2JqLCAqYXJncywgKiprdykKKworICAgICAgSWYgdGhlIGBgbWFpbnR5cGVgYCBpcyBgYG11bHRpcGFydGBgLCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmA7IG90aGVyd2lzZQorICAgICAgbG9vayB1cCBhIGhhbmRsZXIgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHR5cGUgb2YgKm9iaiogKHNlZSBuZXh0CisgICAgICBwYXJhZ3JhcGgpLCBjYWxsIDptZXRoOmB+ZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuY2xlYXJfY29udGVudGAgb24gdGhlCisgICAgICAqbXNnKiwgYW5kIGNhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb24sIHBhc3NpbmcgdGhyb3VnaCBhbGwgYXJndW1lbnRzLiAgVGhlCisgICAgICBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBoYW5kbGVyIHdpbGwgdHJhbnNmb3JtIGFuZCBzdG9yZSAqb2JqKiBpbnRvCisgICAgICAqbXNnKiwgcG9zc2libHkgbWFraW5nIG90aGVyIGNoYW5nZXMgdG8gKm1zZyogYXMgd2VsbCwgc3VjaCBhcyBhZGRpbmcKKyAgICAgIHZhcmlvdXMgTUlNRSBoZWFkZXJzIHRvIGVuY29kZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW50ZXJwcmV0IHRoZSBzdG9yZWQKKyAgICAgIGRhdGEuCisKKyAgICAgIFRvIGZpbmQgdGhlIGhhbmRsZXIsIG9idGFpbiB0aGUgdHlwZSBvZiAqb2JqKiAoYGB0eXAgPSB0eXBlKG9iailgYCksIGFuZAorICAgICAgbG9vayBmb3IgdGhlIGZvbGxvd2luZyBrZXlzIGluIHRoZSByZWdpc3RyeSwgc3RvcHBpbmcgd2l0aCB0aGUgZmlyc3Qgb25lCisgICAgICBmb3VuZDoKKworICAgICAgICAgICAqIHRoZSB0eXBlIGl0c2VsZiAoYGB0eXBgYCkKKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIGZ1bGx5IHF1YWxpZmllZCBuYW1lIChgYHR5cC5fX21vZHVsZV9fICsgJy4nICsKKyAgICAgICAgICAgICB0eXAuX19xdWFsbmFtZV9fYGApLgorICAgICAgICAgICAqIHRoZSB0eXBlJ3MgcXVhbG5hbWUgKGBgdHlwLl9fcXVhbG5hbWVfX2BgKQorICAgICAgICAgICAqIHRoZSB0eXBlJ3MgbmFtZSAoYGB0eXAuX19uYW1lX19gYCkuCisKKyAgICAgIElmIG5vbmUgb2YgdGhlIGFib3ZlIG1hdGNoLCByZXBlYXQgYWxsIG9mIHRoZSBjaGVja3MgYWJvdmUgZm9yIGVhY2ggb2YKKyAgICAgIHRoZSB0eXBlcyBpbiB0aGUgOnRlcm06YE1ST2AgKGBgdHlwLl9fbXJvX19gYCkuICBGaW5hbGx5LCBpZiBubyBvdGhlciBrZXkKKyAgICAgIHlpZWxkcyBhIGhhbmRsZXIsIGNoZWNrIGZvciBhIGhhbmRsZXIgZm9yIHRoZSBrZXkgYGBOb25lYGAuICBJZiB0aGVyZSBpcworICAgICAgbm8gaGFuZGxlciBmb3IgYGBOb25lYGAsIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGZvciB0aGUgZnVsbHkKKyAgICAgIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0eXBlLgorCisgICAgICBBbHNvIGFkZCBhIDptYWlsaGVhZGVyOmBNSU1FLVZlcnNpb25gIGhlYWRlciBpZiBvbmUgaXMgbm90IHByZXNlbnQgKHNlZQorICAgICAgYWxzbyA6Y2xhc3M6YC5NSU1FUGFydGApLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9nZXRfaGFuZGxlcihrZXksIGhhbmRsZXIpCisKKyAgICAgIFJlY29yZCB0aGUgZnVuY3Rpb24gKmhhbmRsZXIqIGFzIHRoZSBoYW5kbGVyIGZvciAqa2V5Ki4gIEZvciB0aGUgcG9zc2libGUKKyAgICAgIHZhbHVlcyBvZiAqa2V5Kiwgc2VlIDptZXRoOmBnZXRfY29udGVudGAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX3NldF9oYW5kbGVyKHR5cGVrZXksIGhhbmRsZXIpCisKKyAgICAgIFJlY29yZCAqaGFuZGxlciogYXMgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbiBvYmplY3Qgb2YgYSB0eXBlCisgICAgICBtYXRjaGluZyAqdHlwZWtleSogaXMgcGFzc2VkIHRvIDptZXRoOmBzZXRfY29udGVudGAuICBGb3IgdGhlIHBvc3NpYmxlCisgICAgICB2YWx1ZXMgb2YgKnR5cGVrZXkqLCBzZWUgOm1ldGg6YHNldF9jb250ZW50YC4KKworCisuLiBjbGFzczo6IE1JTUVQYXJ0KHBvbGljeT1kZWZhdWx0KQorCisgICAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc3VicGFydCBvZiBhIE1JTUUgbWVzc2FnZS4gIEl0IGlzIGlkZW50aWNhbCB0bworICAgIDpjbGFzczpgRW1haWxNZXNzYWdlYCwgZXhjZXB0IHRoYXQgbm8gOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVycyBhcmUKKyAgICBhZGRlZCB3aGVuIDptZXRoOmB+RW1haWxNZXNzYWdlLnNldF9jb250ZW50YCBpcyBjYWxsZWQsIHNpbmNlIHN1Yi1wYXJ0cyBkbworICAgIG5vdCBuZWVkIHRoZWlyIG93biA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzLgorCisKK0NvbnRlbnQgTWFuYWdlciBJbnN0YW5jZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQ3VycmVudGx5IHRoZSBlbWFpbCBwYWNrYWdlIHByb3ZpZGVzIG9ubHkgb25lIGNvbmNyZXRlIGNvbnRlbnQgbWFuYWdlciwKKzpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYCwgYWx0aG91Z2ggbW9yZSBtYXkgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KKzpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYCBpcyB0aGUKKzphdHRyOmB+ZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlcmAgcHJvdmlkZWQgYnkKKzphdHRyOmB+ZW1haWwucG9saWN5LkVtYWlsUG9saWN5YCBhbmQgaXRzIGRlcml2YXRpdmVzLgorCisKKy4uIGRhdGE6OiByYXdfZGF0YV9tYW5hZ2VyCisKKyAgIFRoaXMgY29udGVudCBtYW5hZ2VyIHByb3ZpZGVzIG9ubHkgYSBtaW5pbXVtIGludGVyZmFjZSBiZXlvbmQgdGhhdCBwcm92aWRlZAorICAgYnkgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpdHNlbGY6ICBpdCBkZWFscyBvbmx5IHdpdGggdGV4dCwgcmF3CisgICBieXRlIHN0cmluZ3MsIGFuZCA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdHMuICBOZXZlcnRoZWxlc3MsIGl0CisgICBwcm92aWRlcyBzaWduaWZpY2FudCBhZHZhbnRhZ2VzIGNvbXBhcmVkIHRvIHRoZSBiYXNlIEFQSTogYGBnZXRfY29udGVudGBgIG9uCisgICBhIHRleHQgcGFydCB3aWxsIHJldHVybiBhIHVuaWNvZGUgc3RyaW5nIHdpdGhvdXQgdGhlIGFwcGxpY2F0aW9uIG5lZWRpbmcgdG8KKyAgIG1hbnVhbGx5IGRlY29kZSBpdCwgYGBzZXRfY29udGVudGBgIHByb3ZpZGVzIGEgcmljaCBzZXQgb2Ygb3B0aW9ucyBmb3IKKyAgIGNvbnRyb2xsaW5nIHRoZSBoZWFkZXJzIGFkZGVkIHRvIGEgcGFydCBhbmQgY29udHJvbGxpbmcgdGhlIGNvbnRlbnQgdHJhbnNmZXIKKyAgIGVuY29kaW5nLCBhbmQgaXQgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSB2YXJpb3VzIGBgYWRkX2BgIG1ldGhvZHMsIHRoZXJlYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBjcmVhdGlvbiBvZiBtdWx0aXBhcnQgbWVzc2FnZXMuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9jb250ZW50KG1zZywgZXJyb3JzPSdyZXBsYWNlJykKKworICAgICAgUmV0dXJuIHRoZSBwYXlsb2FkIG9mIHRoZSBwYXJ0IGFzIGVpdGhlciBhIHN0cmluZyAoZm9yIGBgdGV4dGBgIHBhcnRzKSwgYQorICAgICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2VgIG9iamVjdCAoZm9yIGBgbWVzc2FnZS9yZmM4MjJgYAorICAgICAgcGFydHMpLCBvciBhIGBgYnl0ZXNgYCBvYmplY3QgKGZvciBhbGwgb3RoZXIgbm9uLW11bHRpcGFydCB0eXBlcykuICBSYWlzZQorICAgICAgYSA6ZXhjOmBLZXlFcnJvcmAgaWYgY2FsbGVkIG9uIGEgYGBtdWx0aXBhcnRgYC4gIElmIHRoZSBwYXJ0IGlzIGEKKyAgICAgIGBgdGV4dGBgIHBhcnQgYW5kICplcnJvcnMqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSBlcnJvciBoYW5kbGVyIHdoZW4KKyAgICAgIGRlY29kaW5nIHRoZSBwYXlsb2FkIHRvIHVuaWNvZGUuICBUaGUgZGVmYXVsdCBlcnJvciBoYW5kbGVyIGlzCisgICAgICBgYHJlcGxhY2VgYC4KKworICAgLi4gbWV0aG9kOjogc2V0X2NvbnRlbnQobXNnLCA8J3N0cic+LCBzdWJ0eXBlPSJwbGFpbiIsIGNoYXJzZXQ9J3V0Zi04JyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGU9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisgICAgICAgICAgICAgICBzZXRfY29udGVudChtc2csIDwnYnl0ZXMnPiwgbWFpbnR5cGUsIHN1YnR5cGUsIGN0ZT0iYmFzZTY0IiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisgICAgICAgICAgICAgICBzZXRfY29udGVudChtc2csIDwnTWVzc2FnZSc+LCBjdGU9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisgICAgICAgICAgICAgICBzZXRfY29udGVudChtc2csIDwnbGlzdCc+LCBzdWJ0eXBlPSdtaXhlZCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKQorCisgICAgICAgQWRkIGhlYWRlcnMgYW5kIHBheWxvYWQgdG8gKm1zZyo6CisKKyAgICAgICBBZGQgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIgd2l0aCBhIGBgbWFpbnR5cGUvc3VidHlwZWBgCisgICAgICAgdmFsdWUuCisKKyAgICAgICAgICAgKiBGb3IgYGBzdHJgYCwgc2V0IHRoZSBNSU1FIGBgbWFpbnR5cGVgYCB0byBgYHRleHRgYCwgYW5kIHNldCB0aGUKKyAgICAgICAgICAgICBzdWJ0eXBlIHRvICpzdWJ0eXBlKiBpZiBpdCBpcyBzcGVjaWZpZWQsIG9yIGBgcGxhaW5gYCBpZiBpdCBpcyBub3QuCisgICAgICAgICAgICogRm9yIGBgYnl0ZXNgYCwgdXNlIHRoZSBzcGVjaWZpZWQgKm1haW50eXBlKiBhbmQgKnN1YnR5cGUqLCBvcgorICAgICAgICAgICAgIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkLgorICAgICAgICAgICAqIEZvciA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdHMsIHNldCB0aGUgbWFpbnR5cGUgdG8KKyAgICAgICAgICAgICBgYG1lc3NhZ2VgYCwgYW5kIHNldCB0aGUgc3VidHlwZSB0byAqc3VidHlwZSogaWYgaXQgaXMgc3BlY2lmaWVkCisgICAgICAgICAgICAgb3IgYGByZmM4MjJgYCBpZiBpdCBpcyBub3QuICBJZiAqc3VidHlwZSogaXMgYGBwYXJ0aWFsYGAsIHJhaXNlIGFuCisgICAgICAgICAgICAgZXJyb3IgKGBgYnl0ZXNgYCBvYmplY3RzIG11c3QgYmUgdXNlZCB0byBjb25zdHJ1Y3QKKyAgICAgICAgICAgICBgYG1lc3NhZ2UvcGFydGlhbGBgIHBhcnRzKS4KKyAgICAgICAgICAgKiBGb3IgKjwnbGlzdCc+Kiwgd2hpY2ggc2hvdWxkIGJlIGEgbGlzdCBvZgorICAgICAgICAgICAgIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cywgc2V0IHRoZSBgYG1haW50eXBlYGAgdG8KKyAgICAgICAgICAgICBgYG11bHRpcGFydGBgLCBhbmQgdGhlIGBgc3VidHlwZWBgIHRvICpzdWJ0eXBlKiBpZiBpdCBpcworICAgICAgICAgICAgIHNwZWNpZmllZCwgYW5kIGBgbWl4ZWRgYCBpZiBpdCBpcyBub3QuICBJZiB0aGUgbWVzc2FnZSBwYXJ0cyBpbgorICAgICAgICAgICAgIHRoZSAqPCdsaXN0Jz4qIGhhdmUgOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVycywgcmVtb3ZlCisgICAgICAgICAgICAgdGhlbS4KKworICAgICAgIElmICpjaGFyc2V0KiBpcyBwcm92aWRlZCAod2hpY2ggaXMgdmFsaWQgb25seSBmb3IgYGBzdHJgYCksIGVuY29kZSB0aGUKKyAgICAgICBzdHJpbmcgdG8gYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgc2V0LiAgVGhlIGRlZmF1bHQgaXMKKyAgICAgICBgYHV0Zi04YGAuICBJZiB0aGUgc3BlY2lmaWVkICpjaGFyc2V0KiBpcyBhIGtub3duIGFsaWFzIGZvciBhIHN0YW5kYXJkCisgICAgICAgTUlNRSBjaGFyc2V0IG5hbWUsIHVzZSB0aGUgc3RhbmRhcmQgY2hhcnNldCBpbnN0ZWFkLgorCisgICAgICAgSWYgKmN0ZSogaXMgc2V0LCBlbmNvZGUgdGhlIHBheWxvYWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjb250ZW50IHRyYW5zZmVyCisgICAgICAgZW5jb2RpbmcsIGFuZCBzZXQgdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LVRyYW5zZmVyLUVuZGNvZGluZ2AgaGVhZGVyIHRvCisgICAgICAgdGhhdCB2YWx1ZS4gIEZvciBgYHN0cmBgIG9iamVjdHMsIGlmIGl0IGlzIG5vdCBzZXQgdXNlIGhldXJpc3RpY3MgdG8KKyAgICAgICBkZXRlcm1pbmUgdGhlIG1vc3QgY29tcGFjdCBlbmNvZGluZy4gIFBvc3NpYmxlIHZhbHVlcyBmb3IgKmN0ZSogYXJlCisgICAgICAgYGBxdW90ZWQtcHJpbnRhYmxlYGAsIGBgYmFzZTY0YGAsIGBgN2JpdGBgLCBgYDhiaXRgYCwgYW5kIGBgYmluYXJ5YGAuCisgICAgICAgSWYgdGhlIGlucHV0IGNhbm5vdCBiZSBlbmNvZGVkIGluIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgKGVnOiBgYDdiaXRgYCksCisgICAgICAgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYC4gIEZvciA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgLCBwZXIKKyAgICAgICA6cmZjOmAyMDQ2YCwgcmFpc2UgYW4gZXJyb3IgaWYgYSAqY3RlKiBvZiBgYHF1b3RlZC1wcmludGFibGVgYCBvcgorICAgICAgIGBgYmFzZTY0YGAgaXMgcmVxdWVzdGVkIGZvciAqc3VidHlwZSogYGByZmM4MjJgYCwgYW5kIGZvciBhbnkgKmN0ZSoKKyAgICAgICBvdGhlciB0aGFuIGBgN2JpdGBgIGZvciAqc3VidHlwZSogYGBleHRlcm5hbC1ib2R5YGAuICBGb3IKKyAgICAgICBgYG1lc3NhZ2UvcmZjODIyYGAsIHVzZSBgYDhiaXRgYCBpZiAqY3RlKiBpcyBub3Qgc3BlY2lmaWVkLiAgRm9yIGFsbAorICAgICAgIG90aGVyIHZhbHVlcyBvZiAqc3VidHlwZSosIHVzZSBgYDdiaXRgYC4KKworICAgICAgIC4uIG5vdGU6OiBBICpjdGUqIG9mIGBgYmluYXJ5YGAgZG9lcyBub3QgYWN0dWFsbHkgd29yayBjb3JyZWN0bHkgeWV0LgorICAgICAgICAgIFRoZSBgYE1lc3NhZ2VgYCBvYmplY3QgYXMgbW9kaWZpZWQgYnkgYGBzZXRfY29udGVudGBgIGlzIGNvcnJlY3QsIGJ1dAorICAgICAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAgZG9lcyBub3Qgc2VyaWFsaXplIGl0CisgICAgICAgICAgY29ycmVjdGx5LgorCisgICAgICAgSWYgKmRpc3Bvc2l0aW9uKiBpcyBzZXQsIHVzZSBpdCBhcyB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlci4gIElmIG5vdCBzcGVjaWZpZWQsIGFuZAorICAgICAgICpmaWxlbmFtZSogaXMgc3BlY2lmaWVkLCBhZGQgdGhlIGhlYWRlciB3aXRoIHRoZSB2YWx1ZSBgYGF0dGFjaG1lbnRgYC4KKyAgICAgICBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGFuZCAqZmlsZW5hbWUqIGlzIGFsc28gbm90IHNwZWNpZmllZCwgZG8gbm90IGFkZAorICAgICAgIHRoZSBoZWFkZXIuICBUaGUgb25seSB2YWxpZCB2YWx1ZXMgZm9yICpkaXNwb3NpdGlvbiogYXJlIGBgYXR0YWNobWVudGBgCisgICAgICAgYW5kIGBgaW5saW5lYGAuCisKKyAgICAgICBJZiAqZmlsZW5hbWUqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSB2YWx1ZSBvZiB0aGUgYGBmaWxlbmFtZWBgCisgICAgICAgcGFyYW1ldGVyIG9mIHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLiAgVGhlcmUgaXMgbm8KKyAgICAgICBkZWZhdWx0LgorCisgICAgICAgSWYgKmNpZCogaXMgc3BlY2lmaWVkLCBhZGQgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1JRGAgaGVhZGVyIHdpdGgKKyAgICAgICAqY2lkKiBhcyBpdHMgdmFsdWUuCisKKyAgICAgICBJZiAqcGFyYW1zKiBpcyBzcGVjaWZpZWQsIGl0ZXJhdGUgaXRzIGBgaXRlbXNgYCBtZXRob2QgYW5kIHVzZSB0aGUKKyAgICAgICByZXN1bHRpbmcgYGAoa2V5LCB2YWx1ZSlgYCBwYWlycyB0byBzZXQgYWRkaXRpb25hbCBwYXJhbXRlcnMgb24gdGhlCisgICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyLgorCisgICAgICAgSWYgKmhlYWRlcnMqIGlzIHNwZWNpZmllZCBhbmQgaXMgYSBsaXN0IG9mIHN0cmluZ3Mgb2YgdGhlIGZvcm0KKyAgICAgICBgYGhlYWRlcm5hbWU6IGhlYWRlcnZhbHVlYGAgb3IgYSBsaXN0IG9mIGBgaGVhZGVyYGAgb2JqZWN0cworICAgICAgIChkaXN0aW5ndWlzZWQgZnJvbSBzdHJpbmdzIGJ5IGhhdmluZyBhIGBgbmFtZWBgIGF0dHJpYnV0ZSksIGFkZCB0aGUKKyAgICAgICBoZWFkZXJzIHRvICptc2cqLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAppbmRleCA1NzY1MzFkLi5mMjc4YTBhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdApAQCAtMzMsMjMgKzMzLDMxIEBACiAKIC4uIGNsYXNzOjogTWVzc2FnZShwb2xpY3k9Y29tcGF0MzIpCiAKLSAgIFRoZSAqcG9saWN5KiBhcmd1bWVudCBkZXRlcm1pZW5zIHRoZSA6bW9kOmB+ZW1haWwucG9saWN5YCB0aGF0IHdpbGwgYmUgdXNlZAotICAgdG8gdXBkYXRlIHRoZSBtZXNzYWdlIG1vZGVsLiAgVGhlIGRlZmF1bHQgdmFsdWUsIDpjbGFzczpgY29tcGF0MzIKLSAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQotICAgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1ZHBhdGUgYW5kIHNlcmlhbGl6ZSB0aGUgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZSA6Y2xhc3NgY29tcGF0MzIKKyAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBwb2xpY3ksIHdoaWNoIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIHRoZSBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCiAgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMyBUaGUgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCB3YXMgYWRkZWQuCiAKIAotICAgLi4gbWV0aG9kOjogYXNfc3RyaW5nKHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCkKKyAgIC4uIG1ldGhvZDo6IGFzX3N0cmluZyh1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTAsIHBvbGljeT1Ob25lKQogCiAgICAgICBSZXR1cm4gdGhlIGVudGlyZSBtZXNzYWdlIGZsYXR0ZW5lZCBhcyBhIHN0cmluZy4gIFdoZW4gb3B0aW9uYWwgKnVuaXhmcm9tKgotICAgICAgaXMgYGBUcnVlYGAsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KLSAgICAgICp1bml4ZnJvbSogZGVmYXVsdHMgdG8gYGBGYWxzZWBgLiAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlcgotICAgICAgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZiBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0bwotICAgICAgY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heQotICAgICAgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KKyAgICAgIGlzIHRydWUsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KKyAgICAgICp1bml4ZnJvbSogZGVmYXVsdHMgdG8gYGBGYWxzZWBgLiAgRm9yIGJhY2t3YXJkIGNvbXBhYml0aWxpdHkgcmVhc29ucywKKyAgICAgICptYXhoZWFkZXJsZW4qIGRlZmF1bHRzIHRvIGBgMGBgLCBzbyBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCB2YWx1ZSB5b3UKKyAgICAgIG11c3Qgb3ZlcnJpZGUgaXQgZXhwbGljaXRseSAodGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgKm1heF9saW5lX2xlbmd0aCogaW4KKyAgICAgIHRoZSBwb2xpY3kgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoaXMgbWV0aG9kKS4gIFRoZSAqcG9saWN5KiBhcmd1bWVudCBtYXkgYmUKKyAgICAgIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9idGFpbmVkIGZyb20gdGhlIG1lc3NhZ2UgaW5zdGFuY2UuCisgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgc29tZSBvZiB0aGUgZm9ybWF0dGluZyBwcm9kdWNlZCBieSB0aGUKKyAgICAgIG1ldGhvZCwgc2luY2UgdGhlIHNwZWNpZmllZCAqcG9saWN5KiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYGBHZW5lcmF0b3JgYC4KKworICAgICAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlciBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlmCisgICAgICBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0byBjb21wbGV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gdG8gYSBzdHJpbmcKKyAgICAgIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heSBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQpLgogCiAgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBhbmQgbWF5IG5vdCBhbHdheXMKICAgICAgIGZvcm1hdCB0aGUgbWVzc2FnZSB0aGUgd2F5IHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQgaXQgZG9lcwpAQCAtNjUsMTAgKzczLDU4IEBACiAgICAgICAgICBnLmZsYXR0ZW4obXNnKQogICAgICAgICAgdGV4dCA9IGZwLmdldHZhbHVlKCkKIAorICAgICAgSWYgdGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5zIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90IGVuY29kZWQgYWNjb3JkaW5nCisgICAgICB0byBSRkMgc3RhbmRhcmRzLCB0aGUgbm9uLWNvbXBsaWFudCBkYXRhIHdpbGwgYmUgcmVwbGFjZWQgYnkgdW5pY29kZQorICAgICAgInVua25vd24gY2hhcmFjdGVyIiBjb2RlIHBvaW50cy4gIChTZWUgYWxzbyA6bWV0aDpgLmFzX2J5dGVzYCBhbmQKKyAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAuKQorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCB0aGUgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCB3YXMgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogX19zdHJfXygpCiAKLSAgICAgIEVxdWl2YWxlbnQgdG8gYGBhc19zdHJpbmcodW5peGZyb209VHJ1ZSlgYC4KKyAgICAgIEVxdWl2YWxlbnQgdG8gOm1ldGg6YC5hc19zdHJpbmcoKWAuICBBbGxvd3MgYGBzdHIobXNnKWBgIHRvIHByb2R1Y2UgYQorICAgICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBtZXNzYWdlLgorCisKKyAgIC4uIG1ldGhvZDo6IGFzX2J5dGVzKHVuaXhmcm9tPUZhbHNlLCBwb2xpY3k9Tm9uZSkKKworICAgICAgUmV0dXJuIHRoZSBlbnRpcmUgbWVzc2FnZSBmbGF0dGVuZWQgYXMgYSBieXRlcyBvYmplY3QuICBXaGVuIG9wdGlvbmFsCisgICAgICAqdW5peGZyb20qIGlzIHRydWUsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkCisgICAgICBzdHJpbmcuICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIFRoZSAqcG9saWN5KiBhcmd1bWVudCBtYXkgYmUKKyAgICAgIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9idGFpbmVkIGZyb20gdGhlIG1lc3NhZ2UgaW5zdGFuY2UuCisgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgc29tZSBvZiB0aGUgZm9ybWF0dGluZyBwcm9kdWNlZCBieSB0aGUKKyAgICAgIG1ldGhvZCwgc2luY2UgdGhlIHNwZWNpZmllZCAqcG9saWN5KiB3aWxsIGJlIHBhc3NlZCB0byB0aGUKKyAgICAgIGBgQnl0ZXNHZW5lcmF0b3JgYC4KKworICAgICAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlciBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlmCisgICAgICBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0byBjb21wbGV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gdG8gYSBzdHJpbmcKKyAgICAgIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heSBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQpLgorCisgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBhbmQgbWF5IG5vdCBhbHdheXMKKyAgICAgIGZvcm1hdCB0aGUgbWVzc2FnZSB0aGUgd2F5IHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQgaXQgZG9lcworICAgICAgbm90IGRvIHRoZSBtYW5nbGluZyBvZiBsaW5lcyB0aGF0IGJlZ2luIHdpdGggYGBGcm9tYGAgdGhhdCBpcworICAgICAgcmVxdWlyZWQgYnkgdGhlIHVuaXggbWJveCBmb3JtYXQuICBGb3IgbW9yZSBmbGV4aWJpbGl0eSwgaW5zdGFudGlhdGUgYQorICAgICAgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYCBpbnN0YW5jZSBhbmQgdXNlIGl0cworICAgICAgOm1ldGg6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3IuZmxhdHRlbmAgbWV0aG9kIGRpcmVjdGx5LgorICAgICAgRm9yIGV4YW1wbGU6OgorCisgICAgICAgICBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCisgICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgQnl0ZXNHZW5lcmF0b3IKKyAgICAgICAgIGZwID0gQnl0ZXNJTygpCisgICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1UcnVlLCBtYXhoZWFkZXJsZW49NjApCisgICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICAgdGV4dCA9IGZwLmdldHZhbHVlKCkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworICAgLi4gbWV0aG9kOjogX19ieXRlc19fKCkKKworICAgICAgRXF1aXZhbGVudCB0byA6bWV0aDpgLmFzX2J5dGVzKClgLiAgQWxsb3dzIGBgYnl0ZXMobXNnKWBgIHRvIHByb2R1Y2UgYQorICAgICAgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBtZXNzYWdlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCiAgICAuLiBtZXRob2Q6OiBpc19tdWx0aXBhcnQoKQpAQCAtNDEwLDcgKzQ2Niw4IEBACiAgICAgICB0byBgYEZhbHNlYGAuCiAKIAotICAgLi4gbWV0aG9kOjogc2V0X3BhcmFtKHBhcmFtLCB2YWx1ZSwgaGVhZGVyPSdDb250ZW50LVR5cGUnLCByZXF1b3RlPVRydWUsIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycpCisgICAuLiBtZXRob2Q6OiBzZXRfcGFyYW0ocGFyYW0sIHZhbHVlLCBoZWFkZXI9J0NvbnRlbnQtVHlwZScsIHJlcXVvdGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnLCByZXBsYWNlPUZhbHNlKQogCiAgICAgICBTZXQgYSBwYXJhbWV0ZXIgaW4gdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlci4gIElmIHRoZQogICAgICAgcGFyYW1ldGVyIGFscmVhZHkgZXhpc3RzIGluIHRoZSBoZWFkZXIsIGl0cyB2YWx1ZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGgKQEAgLTQyNyw2ICs0ODQsMTIgQEAKICAgICAgIGxhbmd1YWdlLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSBzdHJpbmcuICBCb3RoICpjaGFyc2V0KiBhbmQgKmxhbmd1YWdlKgogICAgICAgc2hvdWxkIGJlIHN0cmluZ3MuCiAKKyAgICAgIElmICpyZXBsYWNlKiBpcyBgYEZhbHNlYGAgKHRoZSBkZWZhdWx0KSB0aGUgaGVhZGVyIGlzIG1vdmVkIHRvIHRoZQorICAgICAgZW5kIG9mIHRoZSBsaXN0IG9mIGhlYWRlcnMuICBJZiAqcmVwbGFjZSogaXMgYGBUcnVlYGAsIHRoZSBoZWFkZXIKKyAgICAgIHdpbGwgYmUgdXBkYXRlZCBpbiBwbGFjZS4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6IDMuNCBgYHJlcGxhY2VgYCBrZXl3b3JkIHdhcyBhZGRlZC4KKwogCiAgICAuLiBtZXRob2Q6OiBkZWxfcGFyYW0ocGFyYW0sIGhlYWRlcj0nY29udGVudC10eXBlJywgcmVxdW90ZT1UcnVlKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdAppbmRleCBjYjIwMjNjLi5jMmY5ZTZhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QKQEAgLTk3LDYgKzk3LDE3IEBACiBgYHNlbmRtYWlsJ3NgYCBgYHN0ZGluYGAsIHdoZXJlIHRoZSBkZWZhdWx0IHBvbGljeSB3b3VsZCB1c2UgYGBcbmBgIGxpbmUKIHNlcGFyYXRvcnMuCiAKK1NvbWUgZW1haWwgcGFja2FnZSBtZXRob2RzIGFjY2VwdCBhICpwb2xpY3kqIGtleXdvcmQgYXJndW1lbnQsIGFsbG93aW5nIHRoZQorcG9saWN5IHRvIGJlIG92ZXJyaWRkZW4gZm9yIHRoYXQgbWV0aG9kLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSB1c2VzCit0aGUgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nYCBtZXRob2Qgb2YgdGhlICptc2cqIG9iamVjdCBmcm9tCit0aGUgcHJldmlvdXMgZXhhbXBsZSBhbmQgd3JpdGVzIHRoZSBtZXNzYWdlIHRvIGEgZmlsZSB1c2luZyB0aGUgbmF0aXZlIGxpbmUKK3NlcGFyYXRvcnMgZm9yIHRoZSBwbGF0Zm9ybSBvbiB3aGljaCBpdCBpcyBydW5uaW5nOjoKKworICAgPj4+IGltcG9ydCBvcworICAgPj4+IHdpdGggb3BlbignY29udmVydGVkLnR4dCcsICd3YicpIGFzIGY6CisgICAuLi4gICAgIGYud3JpdGUobXNnLmFzX2J5dGVzKHBvbGljeT1tc2cucG9saWN5LmNsb25lKGxpbmVzZXA9b3MubGluZXNlcCkpKQorICAgMTcKKwogUG9saWN5IG9iamVjdHMgY2FuIGFsc28gYmUgY29tYmluZWQgdXNpbmcgdGhlIGFkZGl0aW9uIG9wZXJhdG9yLCBwcm9kdWNpbmcgYQogcG9saWN5IG9iamVjdCB3aG9zZSBzZXR0aW5ncyBhcmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgbm9uLWRlZmF1bHQgdmFsdWVzIG9mIHRoZQogc3VtbWVkIG9iamVjdHM6OgpAQCAtMzYwLDcgKzM3MSw3IEBACiAgICB0bykgOnJmYzpgNTMyMmAsIDpyZmM6YDIwNDdgLCBhbmQgdGhlIGN1cnJlbnQgTUlNRSBSRkNzLgogCiAgICBUaGlzIHBvbGljeSBhZGRzIG5ldyBoZWFkZXIgcGFyc2luZyBhbmQgZm9sZGluZyBhbGdvcml0aG1zLiAgSW5zdGVhZCBvZgotICAgc2ltcGxlIHN0cmluZ3MsIGhlYWRlcnMgYXJlIGN1c3RvbSBvYmplY3RzIHdpdGggY3VzdG9tIGF0dHJpYnV0ZXMgZGVwZW5kaW5nCisgICBzaW1wbGUgc3RyaW5ncywgaGVhZGVycyBhcmUgYGBzdHJgYCBzdWJjbGFzc2VzIHdpdGggYXR0cmlidXRlcyB0aGF0IGRlcGVuZAogICAgb24gdGhlIHR5cGUgb2YgdGhlIGZpZWxkLiAgVGhlIHBhcnNpbmcgYW5kIGZvbGRpbmcgYWxnb3JpdGhtIGZ1bGx5IGltcGxlbWVudAogICAgOnJmYzpgMjA0N2AgYW5kIDpyZmM6YDUzMjJgLgogCkBAIC0zOTcsNiArNDA4LDIwIEBACiAgICAgICBmaWVsZHMgYXJlIHRyZWF0ZWQgYXMgdW5zdHJ1Y3R1cmVkLiAgVGhpcyBsaXN0IHdpbGwgYmUgY29tcGxldGVkIGJlZm9yZQogICAgICAgdGhlIGV4dGVuc2lvbiBpcyBtYXJrZWQgc3RhYmxlLikKIAorICAgLi4gYXR0cmlidXRlOjogY29udGVudF9tYW5hZ2VyCisKKyAgICAgIEFuIG9iamVjdCB3aXRoIGF0IGxlYXN0IHR3byBtZXRob2RzOiBnZXRfY29udGVudCBhbmQgc2V0X2NvbnRlbnQuICBXaGVuCisgICAgICB0aGUgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRgIG9yCisgICAgICA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfY29udGVudGAgbWV0aG9kIG9mIGEKKyAgICAgIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0IGlzIGNhbGxlZCwgaXQgY2FsbHMgdGhlCisgICAgICBjb3JyZXNwb25kaW5nIG1ldGhvZCBvZiB0aGlzIG9iamVjdCwgcGFzc2luZyBpdCB0aGUgbWVzc2FnZSBvYmplY3QgYXMgaXRzCisgICAgICBmaXJzdCBhcmd1bWVudCwgYW5kIGFueSBhcmd1bWVudHMgb3Iga2V5d29yZHMgdGhhdCB3ZXJlIHBhc3NlZCB0byBpdCBhcworICAgICAgYWRkaXRpb25hbCBhcmd1bWVudHMuICBCeSBkZWZhdWx0IGBgY29udGVudF9tYW5hZ2VyYGAgaXMgc2V0IHRvCisgICAgICA6ZGF0YTpgfmVtYWlsLmNvbnRlbnRtYW5hZ2VyLnJhd19kYXRhX21hbmFnZXJgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQgMy40CisKKwogICAgVGhlIGNsYXNzIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBhYnN0cmFjdAogICAgbWV0aG9kcyBvZiA6Y2xhc3M6YFBvbGljeWA6CiAKQEAgLTQxNiw3ICs0NDEsNyBAQAogICAgICAgVGhlIG5hbWUgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLiAgSWYgdGhlIGlucHV0IHZhbHVlIGhhcyBhIGBgbmFtZWBgCiAgICAgICBhdHRyaWJ1dGUgYW5kIGl0IG1hdGNoZXMgKm5hbWUqIGlnbm9yaW5nIGNhc2UsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZAogICAgICAgdW5jaGFuZ2VkLiAgT3RoZXJ3aXNlIHRoZSAqbmFtZSogYW5kICp2YWx1ZSogYXJlIHBhc3NlZCB0bwotICAgICAgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZyBjdXN0b20gaGVhZGVyIG9iamVjdCBpcyByZXR1cm5lZCBhcworICAgICAgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZyBoZWFkZXIgb2JqZWN0IGlzIHJldHVybmVkIGFzCiAgICAgICB0aGUgdmFsdWUuICBJbiB0aGlzIGNhc2UgYSBgYFZhbHVlRXJyb3JgYCBpcyByYWlzZWQgaWYgdGhlIGlucHV0IHZhbHVlCiAgICAgICBjb250YWlucyBDUiBvciBMRiBjaGFyYWN0ZXJzLgogCkBAIC00MjQsNyArNDQ5LDcgQEAKIAogICAgICAgSWYgdGhlIHZhbHVlIGhhcyBhIGBgbmFtZWBgIGF0dHJpYnV0ZSwgaXQgaXMgcmV0dXJuZWQgdG8gdW5tb2RpZmllZC4KICAgICAgIE90aGVyd2lzZSB0aGUgKm5hbWUqLCBhbmQgdGhlICp2YWx1ZSogd2l0aCBhbnkgQ1Igb3IgTEYgY2hhcmFjdGVycwotICAgICAgcmVtb3ZlZCwgYXJlIHBhc3NlZCB0byB0aGUgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZyBjdXN0b20KKyAgICAgIHJlbW92ZWQsIGFyZSBwYXNzZWQgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcKICAgICAgIGhlYWRlciBvYmplY3QgaXMgcmV0dXJuZWQuICBBbnkgc3Vycm9nYXRlZXNjYXBlZCBieXRlcyBnZXQgdHVybmVkIGludG8KICAgICAgIHRoZSB1bmljb2RlIHVua25vd24tY2hhcmFjdGVyIGdseXBoLgogCkBAIC00MzQsOSArNDU5LDkgQEAKICAgICAgIEEgdmFsdWUgaXMgY29uc2lkZXJlZCB0byBiZSBhICdzb3VyY2UgdmFsdWUnIGlmIGFuZCBvbmx5IGlmIGl0IGRvZXMgbm90CiAgICAgICBoYXZlIGEgYGBuYW1lYGAgYXR0cmlidXRlIChoYXZpbmcgYSBgYG5hbWVgYCBhdHRyaWJ1dGUgbWVhbnMgaXQgaXMgYQogICAgICAgaGVhZGVyIG9iamVjdCBvZiBzb21lIHNvcnQpLiAgSWYgYSBzb3VyY2UgdmFsdWUgbmVlZHMgdG8gYmUgcmVmb2xkZWQKLSAgICAgIGFjY29yZGluZyB0byB0aGUgcG9saWN5LCBpdCBpcyBjb252ZXJ0ZWQgaW50byBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGJ5CisgICAgICBhY2NvcmRpbmcgdG8gdGhlIHBvbGljeSwgaXQgaXMgY29udmVydGVkIGludG8gYSBoZWFkZXIgb2JqZWN0IGJ5CiAgICAgICBwYXNzaW5nIHRoZSAqbmFtZSogYW5kIHRoZSAqdmFsdWUqIHdpdGggYW55IENSIGFuZCBMRiBjaGFyYWN0ZXJzIHJlbW92ZWQKLSAgICAgIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAuICBGb2xkaW5nIG9mIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgaXMgZG9uZSBieQorICAgICAgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYC4gIEZvbGRpbmcgb2YgYSBoZWFkZXIgb2JqZWN0IGlzIGRvbmUgYnkKICAgICAgIGNhbGxpbmcgaXRzIGBgZm9sZGBgIG1ldGhvZCB3aXRoIHRoZSBjdXJyZW50IHBvbGljeS4KIAogICAgICAgU291cmNlIHZhbHVlcyBhcmUgc3BsaXQgaW50byBsaW5lcyB1c2luZyA6bWV0aDpgfnN0ci5zcGxpdGxpbmVzYC4gIElmCkBAIC00OTEsMjMgKzUxNiwyMyBAQAogdGhlIGVtYWlsIHBhY2thZ2UgaXMgY2hhbmdlZCBmcm9tIHRoZSBQeXRob24gMy4yIEFQSSBpbiB0aGUgZm9sbG93aW5nIHdheXM6CiAKICAgICogU2V0dGluZyBhIGhlYWRlciBvbiBhIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgcmVzdWx0cyBpbiB0aGF0Ci0gICAgIGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgY3JlYXRlZC4KKyAgICAgaGVhZGVyIGJlaW5nIHBhcnNlZCBhbmQgYSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQuCiAKICAgICogRmV0Y2hpbmcgYSBoZWFkZXIgdmFsdWUgZnJvbSBhIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgcmVzdWx0cwotICAgICBpbiB0aGF0IGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgY3JlYXRlZCBhbmQKKyAgICAgaW4gdGhhdCBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGhlYWRlciBvYmplY3QgY3JlYXRlZCBhbmQKICAgICAgcmV0dXJuZWQuCiAKLSAgICogQW55IGN1c3RvbSBoZWFkZXIgb2JqZWN0LCBvciBhbnkgaGVhZGVyIHRoYXQgaXMgcmVmb2xkZWQgZHVlIHRvIHRoZQorICAgKiBBbnkgaGVhZGVyIG9iamVjdCwgb3IgYW55IGhlYWRlciB0aGF0IGlzIHJlZm9sZGVkIGR1ZSB0byB0aGUKICAgICAgcG9saWN5IHNldHRpbmdzLCBpcyBmb2xkZWQgdXNpbmcgYW4gYWxnb3JpdGhtIHRoYXQgZnVsbHkgaW1wbGVtZW50cyB0aGUKICAgICAgUkZDIGZvbGRpbmcgYWxnb3JpdGhtcywgaW5jbHVkaW5nIGtub3dpbmcgd2hlcmUgZW5jb2RlZCB3b3JkcyBhcmUgcmVxdWlyZWQKICAgICAgYW5kIGFsbG93ZWQuCiAKIEZyb20gdGhlIGFwcGxpY2F0aW9uIHZpZXcsIHRoaXMgbWVhbnMgdGhhdCBhbnkgaGVhZGVyIG9idGFpbmVkIHRocm91Z2ggdGhlCi06Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGlzIGEgY3VzdG9tIGhlYWRlciBvYmplY3Qgd2l0aCBjdXN0b20KKzpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgaXMgYSBoZWFkZXIgb2JqZWN0IHdpdGggZXh0cmEKIGF0dHJpYnV0ZXMsIHdob3NlIHN0cmluZyB2YWx1ZSBpcyB0aGUgZnVsbHkgZGVjb2RlZCB1bmljb2RlIHZhbHVlIG9mIHRoZQogaGVhZGVyLiAgTGlrZXdpc2UsIGEgaGVhZGVyIG1heSBiZSBhc3NpZ25lZCBhIG5ldyB2YWx1ZSwgb3IgYSBuZXcgaGVhZGVyCiBjcmVhdGVkLCB1c2luZyBhIHVuaWNvZGUgc3RyaW5nLCBhbmQgdGhlIHBvbGljeSB3aWxsIHRha2UgY2FyZSBvZiBjb252ZXJ0aW5nCiB0aGUgdW5pY29kZSBzdHJpbmcgaW50byB0aGUgY29ycmVjdCBSRkMgZW5jb2RlZCBmb3JtLgogCi1UaGUgY3VzdG9tIGhlYWRlciBvYmplY3RzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIGFyZSBkZXNjcmliZWQgaW4KK1RoZSBoZWFkZXIgb2JqZWN0cyBhbmQgdGhlaXIgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGluCiA6bW9kOmB+ZW1haWwuaGVhZGVycmVnaXN0cnlgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwucnN0CmluZGV4IGE2Y2JiY2UuLjMzMWQyZWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKQEAgLTUzLDYgKzUzLDcgQEAKICAgIGVtYWlsLmdlbmVyYXRvci5yc3QKICAgIGVtYWlsLnBvbGljeS5yc3QKICAgIGVtYWlsLmhlYWRlcnJlZ2lzdHJ5LnJzdAorICAgZW1haWwuY29udGVudG1hbmFnZXIucnN0CiAgICBlbWFpbC5taW1lLnJzdAogICAgZW1haWwuaGVhZGVyLnJzdAogICAgZW1haWwuY2hhcnNldC5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VudW0ucnN0IGIvRG9jL2xpYnJhcnkvZW51bS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwMzBmYQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2VudW0ucnN0CkBAIC0wLDAgKzEsNjg4IEBACis6bW9kOmBlbnVtYCAtLS0gU3VwcG9ydCBmb3IgZW51bWVyYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGVudW0KKyAgIDpzeW5vcHNpczogSW1wbGVtZW50YXRpb24gb2YgYW4gZW51bWVyYXRpb24gY2xhc3MuCisKKy4uIDptb2R1bGVhdXRob3I6OiBFdGhhbiBGdXJtYW4gPGV0aGFuQHN0b25lbGVhZi51cz4KKy4uIDpzZWN0aW9uYXV0aG9yOjogQmFycnkgV2Fyc2F3IDxiYXJyeUBweXRob24ub3JnPiwKKy4uIDpzZWN0aW9uYXV0aG9yOjogRWxpIEJlbmRlcnNreSA8ZWxpYmVuQGdtYWlsLmNvbT4sCisuLiA6c2VjdGlvbmF1dGhvcjo6IEV0aGFuIEZ1cm1hbiA8ZXRoYW5Ac3RvbmVsZWFmLnVzPgorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbnVtLnB5YAorCistLS0tLS0tLS0tLS0tLS0tCisKK0FuIGVudW1lcmF0aW9uIGlzIGEgc2V0IG9mIHN5bWJvbGljIG5hbWVzIChtZW1iZXJzKSBib3VuZCB0byB1bmlxdWUsIGNvbnN0YW50Cit2YWx1ZXMuICBXaXRoaW4gYW4gZW51bWVyYXRpb24sIHRoZSBtZW1iZXJzIGNhbiBiZSBjb21wYXJlZCBieSBpZGVudGl0eSwgYW5kCit0aGUgZW51bWVyYXRpb24gaXRzZWxmIGNhbiBiZSBpdGVyYXRlZCBvdmVyLgorCitUaGlzIG1vZHVsZSBkZWZpbmVzIHR3byBlbnVtZXJhdGlvbiBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHVuaXF1ZQorc2V0cyBvZiBuYW1lcyBhbmQgdmFsdWVzOiA6Y2xhc3M6YEVudW1gIGFuZCA6Y2xhc3M6YEludEVudW1gLiAgSXQgYWxzbyBkZWZpbmVzCitvbmUgZGVjb3JhdG9yLCA6ZnVuYzpgdW5pcXVlYCwgdGhhdCBlbnN1cmVzIG9ubHkgdW5pcXVlIG1lbWJlciB2YWx1ZXMgYXJlCitwcmVzZW50IGluIGFuIGVudW1lcmF0aW9uLgorCisKK0NyZWF0aW5nIGFuIEVudW0KKy0tLS0tLS0tLS0tLS0tLS0KKworRW51bWVyYXRpb25zIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSA6a2V5d29yZDpgY2xhc3NgIHN5bnRheCwgd2hpY2ggbWFrZXMgdGhlbQorZWFzeSB0byByZWFkIGFuZCB3cml0ZS4gIEFuIGFsdGVybmF0aXZlIGNyZWF0aW9uIG1ldGhvZCBpcyBkZXNjcmliZWQgaW4KK2BGdW5jdGlvbmFsIEFQSWBfLiAgVG8gZGVmaW5lIGFuIGVudW1lcmF0aW9uLCBzdWJjbGFzcyA6Y2xhc3M6YEVudW1gIGFzCitmb2xsb3dzOjoKKworICAgID4+PiBmcm9tIGVudW0gaW1wb3J0IEVudW0KKyAgICA+Pj4gY2xhc3MgQ29sb3IoRW51bSk6CisgICAgLi4uICAgICByZWQgPSAxCisgICAgLi4uICAgICBncmVlbiA9IDIKKyAgICAuLi4gICAgIGJsdWUgPSAzCisgICAgLi4uCisKKy4uIG5vdGU6OiBOb21lbmNsYXR1cmUKKworICAtIFRoZSBjbGFzcyA6Y2xhc3M6YENvbG9yYCBpcyBhbiAqZW51bWVyYXRpb24qIChvciAqZW51bSopCisgIC0gVGhlIGF0dHJpYnV0ZXMgOmF0dHI6YENvbG9yLnJlZGAsIDphdHRyOmBDb2xvci5ncmVlbmAsIGV0Yy4sIGFyZQorICAgICplbnVtZXJhdGlvbiBtZW1iZXJzKiAob3IgKmVudW0gbWVtYmVycyopLgorICAtIFRoZSBlbnVtIG1lbWJlcnMgaGF2ZSAqbmFtZXMqIGFuZCAqdmFsdWVzKiAodGhlIG5hbWUgb2YKKyAgICA6YXR0cjpgQ29sb3IucmVkYCBpcyBgYHJlZGBgLCB0aGUgdmFsdWUgb2YgOmF0dHI6YENvbG9yLmJsdWVgIGlzCisgICAgYGAzYGAsIGV0Yy4pCisKKy4uIG5vdGU6OgorCisgICAgRXZlbiB0aG91Z2ggd2UgdXNlIHRoZSA6a2V5d29yZDpgY2xhc3NgIHN5bnRheCB0byBjcmVhdGUgRW51bXMsIEVudW1zCisgICAgYXJlIG5vdCBub3JtYWwgUHl0aG9uIGNsYXNzZXMuICBTZWUgYEhvdyBhcmUgRW51bXMgZGlmZmVyZW50P2BfIGZvcgorICAgIG1vcmUgZGV0YWlscy4KKworRW51bWVyYXRpb24gbWVtYmVycyBoYXZlIGh1bWFuIHJlYWRhYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbnM6OgorCisgICAgPj4+IHByaW50KENvbG9yLnJlZCkKKyAgICBDb2xvci5yZWQKKworLi4ud2hpbGUgdGhlaXIgYGByZXByYGAgaGFzIG1vcmUgaW5mb3JtYXRpb246OgorCisgICAgPj4+IHByaW50KHJlcHIoQ29sb3IucmVkKSkKKyAgICA8Q29sb3IucmVkOiAxPgorCitUaGUgKnR5cGUqIG9mIGFuIGVudW1lcmF0aW9uIG1lbWJlciBpcyB0aGUgZW51bWVyYXRpb24gaXQgYmVsb25ncyB0bzo6CisKKyAgICA+Pj4gdHlwZShDb2xvci5yZWQpCisgICAgPGVudW0gJ0NvbG9yJz4KKyAgICA+Pj4gaXNpbnN0YW5jZShDb2xvci5ncmVlbiwgQ29sb3IpCisgICAgVHJ1ZQorICAgID4+PgorCitFbnVtIG1lbWJlcnMgYWxzbyBoYXZlIGEgcHJvcGVydHkgdGhhdCBjb250YWlucyBqdXN0IHRoZWlyIGl0ZW0gbmFtZTo6CisKKyAgICA+Pj4gcHJpbnQoQ29sb3IucmVkLm5hbWUpCisgICAgcmVkCisKK0VudW1lcmF0aW9ucyBzdXBwb3J0IGl0ZXJhdGlvbiwgaW4gZGVmaW5pdGlvbiBvcmRlcjo6CisKKyAgICA+Pj4gY2xhc3MgU2hha2UoRW51bSk6CisgICAgLi4uICAgICB2YW5pbGxhID0gNworICAgIC4uLiAgICAgY2hvY29sYXRlID0gNAorICAgIC4uLiAgICAgY29va2llcyA9IDkKKyAgICAuLi4gICAgIG1pbnQgPSAzCisgICAgLi4uCisgICAgPj4+IGZvciBzaGFrZSBpbiBTaGFrZToKKyAgICAuLi4gICAgIHByaW50KHNoYWtlKQorICAgIC4uLgorICAgIFNoYWtlLnZhbmlsbGEKKyAgICBTaGFrZS5jaG9jb2xhdGUKKyAgICBTaGFrZS5jb29raWVzCisgICAgU2hha2UubWludAorCitFbnVtZXJhdGlvbiBtZW1iZXJzIGFyZSBoYXNoYWJsZSwgc28gdGhleSBjYW4gYmUgdXNlZCBpbiBkaWN0aW9uYXJpZXMgYW5kIHNldHM6OgorCisgICAgPj4+IGFwcGxlcyA9IHt9CisgICAgPj4+IGFwcGxlc1tDb2xvci5yZWRdID0gJ3JlZCBkZWxpY2lvdXMnCisgICAgPj4+IGFwcGxlc1tDb2xvci5ncmVlbl0gPSAnZ3Jhbm55IHNtaXRoJworICAgID4+PiBhcHBsZXMgPT0ge0NvbG9yLnJlZDogJ3JlZCBkZWxpY2lvdXMnLCBDb2xvci5ncmVlbjogJ2dyYW5ueSBzbWl0aCd9CisgICAgVHJ1ZQorCisKK1Byb2dyYW1tYXRpYyBhY2Nlc3MgdG8gZW51bWVyYXRpb24gbWVtYmVycyBhbmQgdGhlaXIgYXR0cmlidXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvbWV0aW1lcyBpdCdzIHVzZWZ1bCB0byBhY2Nlc3MgbWVtYmVycyBpbiBlbnVtZXJhdGlvbnMgcHJvZ3JhbW1hdGljYWxseSAoaS5lLgorc2l0dWF0aW9ucyB3aGVyZSBgYENvbG9yLnJlZGBgIHdvbid0IGRvIGJlY2F1c2UgdGhlIGV4YWN0IGNvbG9yIGlzIG5vdCBrbm93bgorYXQgcHJvZ3JhbS13cml0aW5nIHRpbWUpLiAgYGBFbnVtYGAgYWxsb3dzIHN1Y2ggYWNjZXNzOjoKKworICAgID4+PiBDb2xvcigxKQorICAgIDxDb2xvci5yZWQ6IDE+CisgICAgPj4+IENvbG9yKDMpCisgICAgPENvbG9yLmJsdWU6IDM+CisKK0lmIHlvdSB3YW50IHRvIGFjY2VzcyBlbnVtIG1lbWJlcnMgYnkgKm5hbWUqLCB1c2UgaXRlbSBhY2Nlc3M6OgorCisgICAgPj4+IENvbG9yWydyZWQnXQorICAgIDxDb2xvci5yZWQ6IDE+CisgICAgPj4+IENvbG9yWydncmVlbiddCisgICAgPENvbG9yLmdyZWVuOiAyPgorCitJZiBoYXZlIGFuIGVudW0gbWVtYmVyIGFuZCBuZWVkIGl0cyA6YXR0cjpgbmFtZWAgb3IgOmF0dHI6YHZhbHVlYDo6CisKKyAgICA+Pj4gbWVtYmVyID0gQ29sb3IucmVkCisgICAgPj4+IG1lbWJlci5uYW1lCisgICAgJ3JlZCcKKyAgICA+Pj4gbWVtYmVyLnZhbHVlCisgICAgMQorCisKK0R1cGxpY2F0aW5nIGVudW0gbWVtYmVycyBhbmQgdmFsdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIYXZpbmcgdHdvIGVudW0gbWVtYmVycyB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgaW52YWxpZDo6CisKKyAgICA+Pj4gY2xhc3MgU2hhcGUoRW51bSk6CisgICAgLi4uICAgICBzcXVhcmUgPSAyCisgICAgLi4uICAgICBzcXVhcmUgPSAzCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIHJldXNlIGtleTogJ3NxdWFyZScKKworSG93ZXZlciwgdHdvIGVudW0gbWVtYmVycyBhcmUgYWxsb3dlZCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlLiAgR2l2ZW4gdHdvIG1lbWJlcnMKK0EgYW5kIEIgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoYW5kIEEgZGVmaW5lZCBmaXJzdCksIEIgaXMgYW4gYWxpYXMgdG8gQS4gIEJ5LXZhbHVlCitsb29rdXAgb2YgdGhlIHZhbHVlIG9mIEEgYW5kIEIgd2lsbCByZXR1cm4gQS4gIEJ5LW5hbWUgbG9va3VwIG9mIEIgd2lsbCBhbHNvCityZXR1cm4gQTo6CisKKyAgICA+Pj4gY2xhc3MgU2hhcGUoRW51bSk6CisgICAgLi4uICAgICBzcXVhcmUgPSAyCisgICAgLi4uICAgICBkaWFtb25kID0gMQorICAgIC4uLiAgICAgY2lyY2xlID0gMworICAgIC4uLiAgICAgYWxpYXNfZm9yX3NxdWFyZSA9IDIKKyAgICAuLi4KKyAgICA+Pj4gU2hhcGUuc3F1YXJlCisgICAgPFNoYXBlLnNxdWFyZTogMj4KKyAgICA+Pj4gU2hhcGUuYWxpYXNfZm9yX3NxdWFyZQorICAgIDxTaGFwZS5zcXVhcmU6IDI+CisgICAgPj4+IFNoYXBlKDIpCisgICAgPFNoYXBlLnNxdWFyZTogMj4KKworLi4gbm90ZTo6CisKKyAgICBBdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIG1lbWJlciB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gYWxyZWFkeQorICAgIGRlZmluZWQgYXR0cmlidXRlIChhbm90aGVyIG1lbWJlciwgYSBtZXRob2QsIGV0Yy4pIG9yIGF0dGVtcHRpbmcgdG8gY3JlYXRlCisgICAgYW4gYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhIG1lbWJlciBpcyBub3QgYWxsb3dlZC4KKworCitFbnN1cmluZyB1bmlxdWUgZW51bWVyYXRpb24gdmFsdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGVudW1lcmF0aW9ucyBhbGxvdyBtdWx0aXBsZSBuYW1lcyBhcyBhbGlhc2VzIGZvciB0aGUgc2FtZSB2YWx1ZS4KK1doZW4gdGhpcyBiZWhhdmlvciBpc24ndCBkZXNpcmVkLCB0aGUgZm9sbG93aW5nIGRlY29yYXRvciBjYW4gYmUgdXNlZCB0bworZW5zdXJlIGVhY2ggdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgaW4gdGhlIGVudW1lcmF0aW9uOgorCisuLiBkZWNvcmF0b3I6OiB1bmlxdWUKKworQSA6a2V5d29yZDpgY2xhc3NgIGRlY29yYXRvciBzcGVjaWZpY2FsbHkgZm9yIGVudW1lcmF0aW9ucy4gIEl0IHNlYXJjaGVzIGFuCitlbnVtZXJhdGlvbidzIDphdHRyOmBfX21lbWJlcnNfX2AgZ2F0aGVyaW5nIGFueSBhbGlhc2VzIGl0IGZpbmRzOyBpZiBhbnkgYXJlCitmb3VuZCA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgd2l0aCB0aGUgZGV0YWlsczo6CisKKyAgICA+Pj4gZnJvbSBlbnVtIGltcG9ydCBFbnVtLCB1bmlxdWUKKyAgICA+Pj4gQHVuaXF1ZQorICAgIC4uLiBjbGFzcyBNaXN0YWtlKEVudW0pOgorICAgIC4uLiAgICAgb25lID0gMQorICAgIC4uLiAgICAgdHdvID0gMgorICAgIC4uLiAgICAgdGhyZWUgPSAzCisgICAgLi4uICAgICBmb3VyID0gMworICAgIC4uLgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBkdXBsaWNhdGUgdmFsdWVzIGZvdW5kIGluIDxlbnVtICdNaXN0YWtlJz46IGZvdXIgLT4gdGhyZWUKKworCitJdGVyYXRpb24KKy0tLS0tLS0tLQorCitJdGVyYXRpbmcgb3ZlciB0aGUgbWVtYmVycyBvZiBhbiBlbnVtIGRvZXMgbm90IHByb3ZpZGUgdGhlIGFsaWFzZXM6OgorCisgICAgPj4+IGxpc3QoU2hhcGUpCisgICAgWzxTaGFwZS5zcXVhcmU6IDI+LCA8U2hhcGUuZGlhbW9uZDogMT4sIDxTaGFwZS5jaXJjbGU6IDM+XQorCitUaGUgc3BlY2lhbCBhdHRyaWJ1dGUgYGBfX21lbWJlcnNfX2BgIGlzIGFuIG9yZGVyZWQgZGljdGlvbmFyeSBtYXBwaW5nIG5hbWVzCit0byBtZW1iZXJzLiAgSXQgaW5jbHVkZXMgYWxsIG5hbWVzIGRlZmluZWQgaW4gdGhlIGVudW1lcmF0aW9uLCBpbmNsdWRpbmcgdGhlCithbGlhc2VzOjoKKworICAgID4+PiBmb3IgbmFtZSwgbWVtYmVyIGluIFNoYXBlLl9fbWVtYmVyc19fLml0ZW1zKCk6CisgICAgLi4uICAgICBuYW1lLCBtZW1iZXIKKyAgICAuLi4KKyAgICAoJ3NxdWFyZScsIDxTaGFwZS5zcXVhcmU6IDI+KQorICAgICgnZGlhbW9uZCcsIDxTaGFwZS5kaWFtb25kOiAxPikKKyAgICAoJ2NpcmNsZScsIDxTaGFwZS5jaXJjbGU6IDM+KQorICAgICgnYWxpYXNfZm9yX3NxdWFyZScsIDxTaGFwZS5zcXVhcmU6IDI+KQorCitUaGUgYGBfX21lbWJlcnNfX2BgIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCBmb3IgZGV0YWlsZWQgcHJvZ3JhbW1hdGljIGFjY2VzcyB0bwordGhlIGVudW1lcmF0aW9uIG1lbWJlcnMuICBGb3IgZXhhbXBsZSwgZmluZGluZyBhbGwgdGhlIGFsaWFzZXM6OgorCisgICAgPj4+IFtuYW1lIGZvciBuYW1lLCBtZW1iZXIgaW4gU2hhcGUuX19tZW1iZXJzX18uaXRlbXMoKSBpZiBtZW1iZXIubmFtZSAhPSBuYW1lXQorICAgIFsnYWxpYXNfZm9yX3NxdWFyZSddCisKKworQ29tcGFyaXNvbnMKKy0tLS0tLS0tLS0tCisKK0VudW1lcmF0aW9uIG1lbWJlcnMgYXJlIGNvbXBhcmVkIGJ5IGlkZW50aXR5OjoKKworICAgID4+PiBDb2xvci5yZWQgaXMgQ29sb3IucmVkCisgICAgVHJ1ZQorICAgID4+PiBDb2xvci5yZWQgaXMgQ29sb3IuYmx1ZQorICAgIEZhbHNlCisgICAgPj4+IENvbG9yLnJlZCBpcyBub3QgQ29sb3IuYmx1ZQorICAgIFRydWUKKworT3JkZXJlZCBjb21wYXJpc29ucyBiZXR3ZWVuIGVudW1lcmF0aW9uIHZhbHVlcyBhcmUgKm5vdCogc3VwcG9ydGVkLiAgRW51bQorbWVtYmVycyBhcmUgbm90IGludGVnZXJzIChidXQgc2VlIGBJbnRFbnVtYF8gYmVsb3cpOjoKKworICAgID4+PiBDb2xvci5yZWQgPCBDb2xvci5ibHVlCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBUeXBlRXJyb3I6IHVub3JkZXJhYmxlIHR5cGVzOiBDb2xvcigpIDwgQ29sb3IoKQorCitFcXVhbGl0eSBjb21wYXJpc29ucyBhcmUgZGVmaW5lZCB0aG91Z2g6OgorCisgICAgPj4+IENvbG9yLmJsdWUgPT0gQ29sb3IucmVkCisgICAgRmFsc2UKKyAgICA+Pj4gQ29sb3IuYmx1ZSAhPSBDb2xvci5yZWQKKyAgICBUcnVlCisgICAgPj4+IENvbG9yLmJsdWUgPT0gQ29sb3IuYmx1ZQorICAgIFRydWUKKworQ29tcGFyaXNvbnMgYWdhaW5zdCBub24tZW51bWVyYXRpb24gdmFsdWVzIHdpbGwgYWx3YXlzIGNvbXBhcmUgbm90IGVxdWFsCisoYWdhaW4sIDpjbGFzczpgSW50RW51bWAgd2FzIGV4cGxpY2l0bHkgZGVzaWduZWQgdG8gYmVoYXZlIGRpZmZlcmVudGx5LCBzZWUKK2JlbG93KTo6CisKKyAgICA+Pj4gQ29sb3IuYmx1ZSA9PSAyCisgICAgRmFsc2UKKworCitBbGxvd2VkIG1lbWJlcnMgYW5kIGF0dHJpYnV0ZXMgb2YgZW51bWVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBleGFtcGxlcyBhYm92ZSB1c2UgaW50ZWdlcnMgZm9yIGVudW1lcmF0aW9uIHZhbHVlcy4gIFVzaW5nIGludGVnZXJzIGlzCitzaG9ydCBhbmQgaGFuZHkgKGFuZCBwcm92aWRlZCBieSBkZWZhdWx0IGJ5IHRoZSBgRnVuY3Rpb25hbCBBUElgXyksIGJ1dCBub3QKK3N0cmljdGx5IGVuZm9yY2VkLiAgSW4gdGhlIHZhc3QgbWFqb3JpdHkgb2YgdXNlLWNhc2VzLCBvbmUgZG9lc24ndCBjYXJlIHdoYXQKK3RoZSBhY3R1YWwgdmFsdWUgb2YgYW4gZW51bWVyYXRpb24gaXMuICBCdXQgaWYgdGhlIHZhbHVlICppcyogaW1wb3J0YW50LAorZW51bWVyYXRpb25zIGNhbiBoYXZlIGFyYml0cmFyeSB2YWx1ZXMuCisKK0VudW1lcmF0aW9ucyBhcmUgUHl0aG9uIGNsYXNzZXMsIGFuZCBjYW4gaGF2ZSBtZXRob2RzIGFuZCBzcGVjaWFsIG1ldGhvZHMgYXMKK3VzdWFsLiAgSWYgd2UgaGF2ZSB0aGlzIGVudW1lcmF0aW9uOjoKKworICAgID4+PiBjbGFzcyBNb29kKEVudW0pOgorICAgIC4uLiAgICAgZnVua3kgPSAxCisgICAgLi4uICAgICBoYXBweSA9IDMKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBkZXNjcmliZShzZWxmKToKKyAgICAuLi4gICAgICAgICAjIHNlbGYgaXMgdGhlIG1lbWJlciBoZXJlCisgICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYubmFtZSwgc2VsZi52YWx1ZQorICAgIC4uLgorICAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgLi4uICAgICAgICAgcmV0dXJuICdteSBjdXN0b20gc3RyISB7MH0nLmZvcm1hdChzZWxmLnZhbHVlKQorICAgIC4uLgorICAgIC4uLiAgICAgQGNsYXNzbWV0aG9kCisgICAgLi4uICAgICBkZWYgZmF2b3JpdGVfbW9vZChjbHMpOgorICAgIC4uLiAgICAgICAgICMgY2xzIGhlcmUgaXMgdGhlIGVudW1lcmF0aW9uCisgICAgLi4uICAgICAgICAgcmV0dXJuIGNscy5oYXBweQorICAgIC4uLgorCitUaGVuOjoKKworICAgID4+PiBNb29kLmZhdm9yaXRlX21vb2QoKQorICAgIDxNb29kLmhhcHB5OiAzPgorICAgID4+PiBNb29kLmhhcHB5LmRlc2NyaWJlKCkKKyAgICAoJ2hhcHB5JywgMykKKyAgICA+Pj4gc3RyKE1vb2QuZnVua3kpCisgICAgJ215IGN1c3RvbSBzdHIhIDEnCisKK1RoZSBydWxlcyBmb3Igd2hhdCBpcyBhbGxvd2VkIGFyZSBhcyBmb2xsb3dzOiBfc3VuZGVyXyBuYW1lcyAoc3RhcnRpbmcgYW5kCitlbmRpbmcgd2l0aCBhIHNpbmdsZSB1bmRlcnNjb3JlKSBhcmUgcmVzZXJ2ZWQgYnkgZW51bSBhbmQgY2Fubm90IGJlIHVzZWQ7CithbGwgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIHdpdGhpbiBhbiBlbnVtZXJhdGlvbiB3aWxsIGJlY29tZSBtZW1iZXJzIG9mIHRoaXMKK2VudW1lcmF0aW9uLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgKl9fZHVuZGVyX18qIG5hbWVzIGFuZCBkZXNjcmlwdG9ycyAobWV0aG9kcworYXJlIGFsc28gZGVzY3JpcHRvcnMpLgorCitOb3RlOiAgaWYgeW91ciBlbnVtZXJhdGlvbiBkZWZpbmVzIDptZXRoOmBfX25ld19fYCBhbmQvb3IgOm1ldGg6YF9faW5pdF9fYCB0aGVuCit3aGF0ZXZlciB2YWx1ZShzKSB3ZXJlIGdpdmVuIHRvIHRoZSBlbnVtIG1lbWJlciB3aWxsIGJlIHBhc3NlZCBpbnRvIHRob3NlCittZXRob2RzLiAgU2VlIGBQbGFuZXRgXyBmb3IgYW4gZXhhbXBsZS4KKworCitSZXN0cmljdGVkIHN1YmNsYXNzaW5nIG9mIGVudW1lcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3ViY2xhc3NpbmcgYW4gZW51bWVyYXRpb24gaXMgYWxsb3dlZCBvbmx5IGlmIHRoZSBlbnVtZXJhdGlvbiBkb2VzIG5vdCBkZWZpbmUKK2FueSBtZW1iZXJzLiAgU28gdGhpcyBpcyBmb3JiaWRkZW46OgorCisgICAgPj4+IGNsYXNzIE1vcmVDb2xvcihDb2xvcik6CisgICAgLi4uICAgICBwaW5rID0gMTcKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVHlwZUVycm9yOiBDYW5ub3QgZXh0ZW5kIGVudW1lcmF0aW9ucworCitCdXQgdGhpcyBpcyBhbGxvd2VkOjoKKworICAgID4+PiBjbGFzcyBGb28oRW51bSk6CisgICAgLi4uICAgICBkZWYgc29tZV9iZWhhdmlvcihzZWxmKToKKyAgICAuLi4gICAgICAgICBwYXNzCisgICAgLi4uCisgICAgPj4+IGNsYXNzIEJhcihGb28pOgorICAgIC4uLiAgICAgaGFwcHkgPSAxCisgICAgLi4uICAgICBzYWQgPSAyCisgICAgLi4uCisKK0FsbG93aW5nIHN1YmNsYXNzaW5nIG9mIGVudW1zIHRoYXQgZGVmaW5lIG1lbWJlcnMgd291bGQgbGVhZCB0byBhIHZpb2xhdGlvbiBvZgorc29tZSBpbXBvcnRhbnQgaW52YXJpYW50cyBvZiB0eXBlcyBhbmQgaW5zdGFuY2VzLiAgT24gdGhlIG90aGVyIGhhbmQsIGl0IG1ha2VzCitzZW5zZSB0byBhbGxvdyBzaGFyaW5nIHNvbWUgY29tbW9uIGJlaGF2aW9yIGJldHdlZW4gYSBncm91cCBvZiBlbnVtZXJhdGlvbnMuCisoU2VlIGBPcmRlcmVkRW51bWBfIGZvciBhbiBleGFtcGxlLikKKworCitQaWNrbGluZworLS0tLS0tLS0KKworRW51bWVyYXRpb25zIGNhbiBiZSBwaWNrbGVkIGFuZCB1bnBpY2tsZWQ6OgorCisgICAgPj4+IGZyb20gdGVzdC50ZXN0X2VudW0gaW1wb3J0IEZydWl0CisgICAgPj4+IGZyb20gcGlja2xlIGltcG9ydCBkdW1wcywgbG9hZHMKKyAgICA+Pj4gRnJ1aXQudG9tYXRvIGlzIGxvYWRzKGR1bXBzKEZydWl0LnRvbWF0bykpCisgICAgVHJ1ZQorCitUaGUgdXN1YWwgcmVzdHJpY3Rpb25zIGZvciBwaWNrbGluZyBhcHBseTogcGlja2xhYmxlIGVudW1zIG11c3QgYmUgZGVmaW5lZCBpbgordGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZSwgc2luY2UgdW5waWNrbGluZyByZXF1aXJlcyB0aGVtIHRvIGJlIGltcG9ydGFibGUKK2Zyb20gdGhhdCBtb2R1bGUuCisKKy4uIHdhcm5pbmc6OgorCisgICAgSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgc2luZ2xldG9uIG5hdHVyZSBvZiBlbnVtZXJhdGlvbiBtZW1iZXJzLCBwaWNrbGUKKyAgICBwcm90b2NvbCB2ZXJzaW9uIDIgb3IgaGlnaGVyIG11c3QgYmUgdXNlZC4KKworCitGdW5jdGlvbmFsIEFQSQorLS0tLS0tLS0tLS0tLS0KKworVGhlIDpjbGFzczpgRW51bWAgY2xhc3MgaXMgY2FsbGFibGUsIHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgQVBJOjoKKworICAgID4+PiBBbmltYWwgPSBFbnVtKCdBbmltYWwnLCAnYW50IGJlZSBjYXQgZG9nJykKKyAgICA+Pj4gQW5pbWFsCisgICAgPGVudW0gJ0FuaW1hbCc+CisgICAgPj4+IEFuaW1hbC5hbnQKKyAgICA8QW5pbWFsLmFudDogMT4KKyAgICA+Pj4gQW5pbWFsLmFudC52YWx1ZQorICAgIDEKKyAgICA+Pj4gbGlzdChBbmltYWwpCisgICAgWzxBbmltYWwuYW50OiAxPiwgPEFuaW1hbC5iZWU6IDI+LCA8QW5pbWFsLmNhdDogMz4sIDxBbmltYWwuZG9nOiA0Pl0KKworVGhlIHNlbWFudGljcyBvZiB0aGlzIEFQSSByZXNlbWJsZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYC4gVGhlIGZpcnN0Cithcmd1bWVudCBvZiB0aGUgY2FsbCB0byA6Y2xhc3M6YEVudW1gIGlzIHRoZSBuYW1lIG9mIHRoZSBlbnVtZXJhdGlvbi4KKworVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgKnNvdXJjZSogb2YgZW51bWVyYXRpb24gbWVtYmVyIG5hbWVzLiAgSXQgY2FuIGJlIGEKK3doaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZyBvZiBuYW1lcywgYSBzZXF1ZW5jZSBvZiBuYW1lcywgYSBzZXF1ZW5jZSBvZgorMi10dXBsZXMgd2l0aCBrZXkvdmFsdWUgcGFpcnMsIG9yIGEgbWFwcGluZyAoZS5nLiBkaWN0aW9uYXJ5KSBvZiBuYW1lcyB0bwordmFsdWVzLiAgVGhlIGxhc3QgdHdvIG9wdGlvbnMgZW5hYmxlIGFzc2lnbmluZyBhcmJpdHJhcnkgdmFsdWVzIHRvCitlbnVtZXJhdGlvbnM7IHRoZSBvdGhlcnMgYXV0by1hc3NpZ24gaW5jcmVhc2luZyBpbnRlZ2VycyBzdGFydGluZyB3aXRoIDEuICBBCituZXcgY2xhc3MgZGVyaXZlZCBmcm9tIDpjbGFzczpgRW51bWAgaXMgcmV0dXJuZWQuICBJbiBvdGhlciB3b3JkcywgdGhlIGFib3ZlCithc3NpZ25tZW50IHRvIDpjbGFzczpgQW5pbWFsYCBpcyBlcXVpdmFsZW50IHRvOjoKKworICAgID4+PiBjbGFzcyBBbmltYWxzKEVudW0pOgorICAgIC4uLiAgICAgYW50ID0gMQorICAgIC4uLiAgICAgYmVlID0gMgorICAgIC4uLiAgICAgY2F0ID0gMworICAgIC4uLiAgICAgZG9nID0gNAorICAgIC4uLgorCitUaGUgcmVhc29uIGZvciBkZWZhdWx0aW5nIHRvIGBgMWBgIGFzIHRoZSBzdGFydGluZyBudW1iZXIgYW5kIG5vdCBgYDBgYCBpcwordGhhdCBgYDBgYCBpcyBgYEZhbHNlYGAgaW4gYSBib29sZWFuIHNlbnNlLCBidXQgZW51bSBtZW1iZXJzIGFsbCBldmFsdWF0ZQordG8gYGBUcnVlYGAuCisKK1BpY2tsaW5nIGVudW1zIGNyZWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb25hbCBBUEkgY2FuIGJlIHRyaWNreSBhcyBmcmFtZSBzdGFjaworaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgdXNlZCB0byB0cnkgYW5kIGZpZ3VyZSBvdXQgd2hpY2ggbW9kdWxlIHRoZQorZW51bWVyYXRpb24gaXMgYmVpbmcgY3JlYXRlZCBpbiAoZS5nLiBpdCB3aWxsIGZhaWwgaWYgeW91IHVzZSBhIHV0aWxpdHkKK2Z1bmN0aW9uIGluIHNlcGFyYXRlIG1vZHVsZSwgYW5kIGFsc28gbWF5IG5vdCB3b3JrIG9uIElyb25QeXRob24gb3IgSnl0aG9uKS4KK1RoZSBzb2x1dGlvbiBpcyB0byBzcGVjaWZ5IHRoZSBtb2R1bGUgbmFtZSBleHBsaWNpdGx5IGFzIGZvbGxvd3M6OgorCisgICAgPj4+IEFuaW1hbHMgPSBFbnVtKCdBbmltYWxzJywgJ2FudCBiZWUgY2F0IGRvZycsIG1vZHVsZT1fX25hbWVfXykKKworRGVyaXZlZCBFbnVtZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ludEVudW0KK15eXl5eXl4KKworQSB2YXJpYXRpb24gb2YgOmNsYXNzOmBFbnVtYCBpcyBwcm92aWRlZCB3aGljaCBpcyBhbHNvIGEgc3ViY2xhc3Mgb2YKKzpjbGFzczpgaW50YC4gIE1lbWJlcnMgb2YgYW4gOmNsYXNzOmBJbnRFbnVtYCBjYW4gYmUgY29tcGFyZWQgdG8gaW50ZWdlcnM7CitieSBleHRlbnNpb24sIGludGVnZXIgZW51bWVyYXRpb25zIG9mIGRpZmZlcmVudCB0eXBlcyBjYW4gYWxzbyBiZSBjb21wYXJlZAordG8gZWFjaCBvdGhlcjo6CisKKyAgICA+Pj4gZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCisgICAgPj4+IGNsYXNzIFNoYXBlKEludEVudW0pOgorICAgIC4uLiAgICAgY2lyY2xlID0gMQorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLgorICAgID4+PiBjbGFzcyBSZXF1ZXN0KEludEVudW0pOgorICAgIC4uLiAgICAgcG9zdCA9IDEKKyAgICAuLi4gICAgIGdldCA9IDIKKyAgICAuLi4KKyAgICA+Pj4gU2hhcGUgPT0gMQorICAgIEZhbHNlCisgICAgPj4+IFNoYXBlLmNpcmNsZSA9PSAxCisgICAgVHJ1ZQorICAgID4+PiBTaGFwZS5jaXJjbGUgPT0gUmVxdWVzdC5wb3N0CisgICAgVHJ1ZQorCitIb3dldmVyLCB0aGV5IHN0aWxsIGNhbid0IGJlIGNvbXBhcmVkIHRvIHN0YW5kYXJkIDpjbGFzczpgRW51bWAgZW51bWVyYXRpb25zOjoKKworICAgID4+PiBjbGFzcyBTaGFwZShJbnRFbnVtKToKKyAgICAuLi4gICAgIGNpcmNsZSA9IDEKKyAgICAuLi4gICAgIHNxdWFyZSA9IDIKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQ29sb3IoRW51bSk6CisgICAgLi4uICAgICByZWQgPSAxCisgICAgLi4uICAgICBncmVlbiA9IDIKKyAgICAuLi4KKyAgICA+Pj4gU2hhcGUuY2lyY2xlID09IENvbG9yLnJlZAorICAgIEZhbHNlCisKKzpjbGFzczpgSW50RW51bWAgdmFsdWVzIGJlaGF2ZSBsaWtlIGludGVnZXJzIGluIG90aGVyIHdheXMgeW91J2QgZXhwZWN0OjoKKworICAgID4+PiBpbnQoU2hhcGUuY2lyY2xlKQorICAgIDEKKyAgICA+Pj4gWydhJywgJ2InLCAnYyddW1NoYXBlLmNpcmNsZV0KKyAgICAnYicKKyAgICA+Pj4gW2kgZm9yIGkgaW4gcmFuZ2UoU2hhcGUuc3F1YXJlKV0KKyAgICBbMCwgMV0KKworRm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNvZGUsIDpjbGFzczpgRW51bWAgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQsCitzaW5jZSA6Y2xhc3M6YEludEVudW1gIGJyZWFrcyBzb21lIHNlbWFudGljIHByb21pc2VzIG9mIGFuIGVudW1lcmF0aW9uIChieQorYmVpbmcgY29tcGFyYWJsZSB0byBpbnRlZ2VycywgYW5kIHRodXMgYnkgdHJhbnNpdGl2aXR5IHRvIG90aGVyCit1bnJlbGF0ZWQgZW51bWVyYXRpb25zKS4gIEl0IHNob3VsZCBiZSB1c2VkIG9ubHkgaW4gc3BlY2lhbCBjYXNlcyB3aGVyZQordGhlcmUncyBubyBvdGhlciBjaG9pY2U7IGZvciBleGFtcGxlLCB3aGVuIGludGVnZXIgY29uc3RhbnRzIGFyZQorcmVwbGFjZWQgd2l0aCBlbnVtZXJhdGlvbnMgYW5kIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkIHdpdGggY29kZQordGhhdCBzdGlsbCBleHBlY3RzIGludGVnZXJzLgorCisKK090aGVycworXl5eXl5eCisKK1doaWxlIDpjbGFzczpgSW50RW51bWAgaXMgcGFydCBvZiB0aGUgOm1vZDpgZW51bWAgbW9kdWxlLCBpdCB3b3VsZCBiZSB2ZXJ5CitzaW1wbGUgdG8gaW1wbGVtZW50IGluZGVwZW5kZW50bHk6OgorCisgICAgY2xhc3MgSW50RW51bShpbnQsIEVudW0pOgorICAgICAgICBwYXNzCisKK1RoaXMgZGVtb25zdHJhdGVzIGhvdyBzaW1pbGFyIGRlcml2ZWQgZW51bWVyYXRpb25zIGNhbiBiZSBkZWZpbmVkOyBmb3IgZXhhbXBsZQorYSA6Y2xhc3M6YFN0ckVudW1gIHRoYXQgbWl4ZXMgaW4gOmNsYXNzOmBzdHJgIGluc3RlYWQgb2YgOmNsYXNzOmBpbnRgLgorCitTb21lIHJ1bGVzOgorCisxLiBXaGVuIHN1YmNsYXNzaW5nIDpjbGFzczpgRW51bWAsIG1peC1pbiB0eXBlcyBtdXN0IGFwcGVhciBiZWZvcmUKKyAgIDpjbGFzczpgRW51bWAgaXRzZWxmIGluIHRoZSBzZXF1ZW5jZSBvZiBiYXNlcywgYXMgaW4gdGhlIDpjbGFzczpgSW50RW51bWAKKyAgIGV4YW1wbGUgYWJvdmUuCisyLiBXaGlsZSA6Y2xhc3M6YEVudW1gIGNhbiBoYXZlIG1lbWJlcnMgb2YgYW55IHR5cGUsIG9uY2UgeW91IG1peCBpbiBhbgorICAgYWRkaXRpb25hbCB0eXBlLCBhbGwgdGhlIG1lbWJlcnMgbXVzdCBoYXZlIHZhbHVlcyBvZiB0aGF0IHR5cGUsIGUuZy4KKyAgIDpjbGFzczpgaW50YCBhYm92ZS4gIFRoaXMgcmVzdHJpY3Rpb24gZG9lcyBub3QgYXBwbHkgdG8gbWl4LWlucyB3aGljaCBvbmx5CisgICBhZGQgbWV0aG9kcyBhbmQgZG9uJ3Qgc3BlY2lmeSBhbm90aGVyIGRhdGEgdHlwZSBzdWNoIGFzIDpjbGFzczpgaW50YCBvcgorICAgOmNsYXNzOmBzdHJgLgorMy4gV2hlbiBhbm90aGVyIGRhdGEgdHlwZSBpcyBtaXhlZCBpbiwgdGhlIDphdHRyOmB2YWx1ZWAgYXR0cmlidXRlIGlzICpub3QgdGhlCisgICBzYW1lKiBhcyB0aGUgZW51bSBtZW1iZXIgaXRzZWxmLCBhbHRob3VnaCBpdCBpcyBlcXVpdmFsYW50IGFuZCB3aWxsIGNvbXBhcmUKKyAgIGVxdWFsLgorNC4gJS1zdHlsZSBmb3JtYXR0aW5nOiAgYCVzYCBhbmQgYCVyYCBjYWxsIDpjbGFzczpgRW51bWAncyA6bWV0aDpgX19zdHJfX2AgYW5kCisgICA6bWV0aDpgX19yZXByX19gIHJlc3BlY3RpdmVseTsgb3RoZXIgY29kZXMgKHN1Y2ggYXMgYCVpYCBvciBgJWhgIGZvcgorICAgSW50RW51bSkgdHJlYXQgdGhlIGVudW0gbWVtYmVyIGFzIGl0cyBtaXhlZC1pbiB0eXBlLgorNS4gOm1ldGg6YHN0ci5fX2Zvcm1hdF9fYCAob3IgOmZ1bmM6YGZvcm1hdGApIHdpbGwgdXNlIHRoZSBtaXhlZC1pbgorICAgdHlwZSdzIDptZXRoOmBfX2Zvcm1hdF9fYC4gIElmIHRoZSA6Y2xhc3M6YEVudW1gJ3MgOmZ1bmM6YHN0cmAgb3IKKyAgIDpmdW5jOmByZXByYCBpcyBkZXNpcmVkIHVzZSB0aGUgYCFzYCBvciBgIXJgIDpjbGFzczpgc3RyYCBmb3JtYXQgY29kZXMuCisKKworSW50ZXJlc3RpbmcgZXhhbXBsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doaWxlIDpjbGFzczpgRW51bWAgYW5kIDpjbGFzczpgSW50RW51bWAgYXJlIGV4cGVjdGVkIHRvIGNvdmVyIHRoZSBtYWpvcml0eSBvZgordXNlLWNhc2VzLCB0aGV5IGNhbm5vdCBjb3ZlciB0aGVtIGFsbC4gIEhlcmUgYXJlIHJlY2lwZXMgZm9yIHNvbWUgZGlmZmVyZW50Cit0eXBlcyBvZiBlbnVtZXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBkaXJlY3RseSwgb3IgYXMgZXhhbXBsZXMgZm9yIGNyZWF0aW5nCitvbmUncyBvd24uCisKKworQXV0b051bWJlcgorXl5eXl5eXl5eXgorCitBdm9pZHMgaGF2aW5nIHRvIHNwZWNpZnkgdGhlIHZhbHVlIGZvciBlYWNoIGVudW1lcmF0aW9uIG1lbWJlcjo6CisKKyAgICA+Pj4gY2xhc3MgQXV0b051bWJlcihFbnVtKToKKyAgICAuLi4gICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgLi4uICAgICAgICAgdmFsdWUgPSBsZW4oY2xzLl9fbWVtYmVyc19fKSArIDEKKyAgICAuLi4gICAgICAgICBvYmogPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgLi4uICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBvYmoKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgLi4uICAgICByZWQgPSAoKQorICAgIC4uLiAgICAgZ3JlZW4gPSAoKQorICAgIC4uLiAgICAgYmx1ZSA9ICgpCisgICAgLi4uCisgICAgPj4+IENvbG9yLmdyZWVuLnZhbHVlID09IDIKKyAgICBUcnVlCisKKy4uIG5vdGU6OgorCisgICAgVGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QsIGlmIGRlZmluZWQsIGlzIHVzZWQgZHVyaW5nIGNyZWF0aW9uIG9mIHRoZSBFbnVtCisgICAgbWVtYmVyczsgaXQgaXMgdGhlbiByZXBsYWNlZCBieSBFbnVtJ3MgOm1ldGg6YF9fbmV3X19gIHdoaWNoIGlzIHVzZWQgYWZ0ZXIKKyAgICBjbGFzcyBjcmVhdGlvbiBmb3IgbG9va3VwIG9mIGV4aXN0aW5nIG1lbWJlcnMuICBEdWUgdG8gdGhlIHdheSBFbnVtcyBhcmUKKyAgICBzdXBwb3NlZCB0byBiZWhhdmUsIHRoZXJlIGlzIG5vIHdheSB0byBjdXN0b21pemUgRW51bSdzIDptZXRoOmBfX25ld19fYC4KKworCitPcmRlcmVkRW51bQorXl5eXl5eXl5eXl4KKworQW4gb3JkZXJlZCBlbnVtZXJhdGlvbiB0aGF0IGlzIG5vdCBiYXNlZCBvbiA6Y2xhc3M6YEludEVudW1gIGFuZCBzbyBtYWludGFpbnMKK3RoZSBub3JtYWwgOmNsYXNzOmBFbnVtYCBpbnZhcmlhbnRzIChzdWNoIGFzIG5vdCBiZWluZyBjb21wYXJhYmxlIHRvIG90aGVyCitlbnVtZXJhdGlvbnMpOjoKKworICAgID4+PiBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAuLi4gICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPj0gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPiBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLiAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8PSBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLiAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgLi4uCisgICAgPj4+IGNsYXNzIEdyYWRlKE9yZGVyZWRFbnVtKToKKyAgICAuLi4gICAgIEEgPSA1CisgICAgLi4uICAgICBCID0gNAorICAgIC4uLiAgICAgQyA9IDMKKyAgICAuLi4gICAgIEQgPSAyCisgICAgLi4uICAgICBGID0gMQorICAgIC4uLgorICAgID4+PiBHcmFkZS5DIDwgR3JhZGUuQQorICAgIFRydWUKKworCitEdXBsaWNhdGVGcmVlRW51bQorXl5eXl5eXl5eXl5eXl5eXl4KKworUmFpc2VzIGFuIGVycm9yIGlmIGEgZHVwbGljYXRlIG1lbWJlciBuYW1lIGlzIGZvdW5kIGluc3RlYWQgb2YgY3JlYXRpbmcgYW4KK2FsaWFzOjoKKworICAgID4+PiBjbGFzcyBEdXBsaWNhdGVGcmVlRW51bShFbnVtKToKKyAgICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgLi4uICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAuLi4gICAgICAgICBpZiBhbnkoc2VsZi52YWx1ZSA9PSBlLnZhbHVlIGZvciBlIGluIGNscyk6CisgICAgLi4uICAgICAgICAgICAgIGEgPSBzZWxmLm5hbWUKKyAgICAuLi4gICAgICAgICAgICAgZSA9IGNscyhzZWxmLnZhbHVlKS5uYW1lCisgICAgLi4uICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgLi4uICAgICAgICAgICAgICAgICAiYWxpYXNlcyBub3QgYWxsb3dlZCBpbiBEdXBsaWNhdGVGcmVlRW51bTogICVyIC0tPiAlciIKKyAgICAuLi4gICAgICAgICAgICAgICAgICUgKGEsIGUpKQorICAgIC4uLgorICAgID4+PiBjbGFzcyBDb2xvcihEdXBsaWNhdGVGcmVlRW51bSk6CisgICAgLi4uICAgICByZWQgPSAxCisgICAgLi4uICAgICBncmVlbiA9IDIKKyAgICAuLi4gICAgIGJsdWUgPSAzCisgICAgLi4uICAgICBncmVuZSA9IDIKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogYWxpYXNlcyBub3QgYWxsb3dlZCBpbiBEdXBsaWNhdGVGcmVlRW51bTogICdncmVuZScgLS0+ICdncmVlbicKKworLi4gbm90ZTo6CisKKyAgICBUaGlzIGlzIGEgdXNlZnVsIGV4YW1wbGUgZm9yIHN1YmNsYXNzaW5nIEVudW0gdG8gYWRkIG9yIGNoYW5nZSBvdGhlcgorICAgIGJlaGF2aW9ycyBhcyB3ZWxsIGFzIGRpc2FsbG93aW5nIGFsaWFzZXMuICBJZiB0aGUgb25seSBkZXNpcmVkIGNoYW5nZSBpcworICAgIGRpc2FsbG93aW5nIGFsaWFzZXMsIHRoZSA6ZnVuYzpgdW5pcXVlYCBkZWNvcmF0b3IgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworCitQbGFuZXQKK15eXl5eXgorCitJZiA6bWV0aDpgX19uZXdfX2Agb3IgOm1ldGg6YF9faW5pdF9fYCBpcyBkZWZpbmVkIHRoZSB2YWx1ZSBvZiB0aGUgZW51bSBtZW1iZXIKK3dpbGwgYmUgcGFzc2VkIHRvIHRob3NlIG1ldGhvZHM6OgorCisgICAgPj4+IGNsYXNzIFBsYW5ldChFbnVtKToKKyAgICAuLi4gICAgIE1FUkNVUlkgPSAoMy4zMDNlKzIzLCAyLjQzOTdlNikKKyAgICAuLi4gICAgIFZFTlVTICAgPSAoNC44NjllKzI0LCA2LjA1MThlNikKKyAgICAuLi4gICAgIEVBUlRIICAgPSAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpCisgICAgLi4uICAgICBNQVJTICAgID0gKDYuNDIxZSsyMywgMy4zOTcyZTYpCisgICAgLi4uICAgICBKVVBJVEVSID0gKDEuOWUrMjcsICAgNy4xNDkyZTcpCisgICAgLi4uICAgICBTQVRVUk4gID0gKDUuNjg4ZSsyNiwgNi4wMjY4ZTcpCisgICAgLi4uICAgICBVUkFOVVMgID0gKDguNjg2ZSsyNSwgMi41NTU5ZTcpCisgICAgLi4uICAgICBORVBUVU5FID0gKDEuMDI0ZSsyNiwgMi40NzQ2ZTcpCisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzcywgcmFkaXVzKToKKyAgICAuLi4gICAgICAgICBzZWxmLm1hc3MgPSBtYXNzICAgICAgICMgaW4ga2lsb2dyYW1zCisgICAgLi4uICAgICAgICAgc2VsZi5yYWRpdXMgPSByYWRpdXMgICAjIGluIG1ldGVycworICAgIC4uLiAgICAgQHByb3BlcnR5CisgICAgLi4uICAgICBkZWYgc3VyZmFjZV9ncmF2aXR5KHNlbGYpOgorICAgIC4uLiAgICAgICAgICMgdW5pdmVyc2FsIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgIChtMyBrZy0xIHMtMikKKyAgICAuLi4gICAgICAgICBHID0gNi42NzMwMEUtMTEKKyAgICAuLi4gICAgICAgICByZXR1cm4gRyAqIHNlbGYubWFzcyAvIChzZWxmLnJhZGl1cyAqIHNlbGYucmFkaXVzKQorICAgIC4uLgorICAgID4+PiBQbGFuZXQuRUFSVEgudmFsdWUKKyAgICAoNS45NzZlKzI0LCA2Mzc4MTQwLjApCisgICAgPj4+IFBsYW5ldC5FQVJUSC5zdXJmYWNlX2dyYXZpdHkKKyAgICA5LjgwMjY1Mjc0MzMzNzEyOQorCisKK0hvdyBhcmUgRW51bXMgZGlmZmVyZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VudW1zIGhhdmUgYSBjdXN0b20gbWV0YWNsYXNzIHRoYXQgYWZmZWN0cyBtYW55IGFzcGVjdHMgb2YgYm90aCBkZXJpdmVkIEVudW0KK2NsYXNzZXMgYW5kIHRoZWlyIGluc3RhbmNlcyAobWVtYmVycykuCisKKworRW51bSBDbGFzc2VzCiteXl5eXl5eXl5eXl4KKworVGhlIDpjbGFzczpgRW51bU1ldGFgIG1ldGFjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIHRoZQorOm1ldGg6YF9fY29udGFpbnNfX2AsIDptZXRoOmBfX2Rpcl9fYCwgOm1ldGg6YF9faXRlcl9fYCBhbmQgb3RoZXIgbWV0aG9kcyB0aGF0CithbGxvdyBvbmUgdG8gZG8gdGhpbmdzIHdpdGggYW4gOmNsYXNzOmBFbnVtYCBjbGFzcyB0aGF0IGZhaWwgb24gYSB0eXBpY2FsCitjbGFzcywgc3VjaCBhcyBgbGlzdChDb2xvcilgIG9yIGBzb21lX3ZhciBpbiBDb2xvcmAuICA6Y2xhc3M6YEVudW1NZXRhYCBpcworcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdmFyaW91cyBvdGhlciBtZXRob2RzIG9uIHRoZSBmaW5hbCA6Y2xhc3M6YEVudW1gCitjbGFzcyBhcmUgY29ycmVjdCAoc3VjaCBhcyA6bWV0aDpgX19uZXdfX2AsIDptZXRoOmBfX2dldG5ld2FyZ3NfX2AsCis6bWV0aDpgX19zdHJfX2AgYW5kIDptZXRoOmBfX3JlcHJfX2ApCisKKworRW51bSBNZW1iZXJzIChha2EgaW5zdGFuY2VzKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgbW9zdCBpbnRlcmVzdGluZyB0aGluZyBhYm91dCBFbnVtIG1lbWJlcnMgaXMgdGhhdCB0aGV5IGFyZSBzaW5nbGV0b25zLgorOmNsYXNzOmBFbnVtTWV0YWAgY3JlYXRlcyB0aGVtIGFsbCB3aGlsZSBpdCBpcyBjcmVhdGluZyB0aGUgOmNsYXNzOmBFbnVtYAorY2xhc3MgaXRzZWxmLCBhbmQgdGhlbiBwdXRzIGEgY3VzdG9tIDptZXRoOmBfX25ld19fYCBpbiBwbGFjZSB0byBlbnN1cmUKK3RoYXQgbm8gbmV3IG9uZXMgYXJlIGV2ZXIgaW5zdGFudGlhdGVkIGJ5IHJldHVybmluZyBvbmx5IHRoZSBleGlzdGluZworbWVtYmVyIGluc3RhbmNlcy4KKworCitGaW5lciBQb2ludHMKK15eXl5eXl5eXl5eXgorCitFbnVtIG1lbWJlcnMgYXJlIGluc3RhbmNlcyBvZiBhbiBFbnVtIGNsYXNzLCBhbmQgZXZlbiB0aG91Z2ggdGhleSBhcmUKK2FjY2Vzc2libGUgYXMgYEVudW1DbGFzcy5tZW1iZXJgLCB0aGV5IGFyZSBub3QgYWNjZXNzaWJsZSBkaXJlY3RseSBmcm9tCit0aGUgbWVtYmVyOjoKKworICAgID4+PiBDb2xvci5yZWQKKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvci5yZWQuYmx1ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBBdHRyaWJ1dGVFcnJvcjogJ0NvbG9yJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnYmx1ZScKKworTGlrZXdpc2UsIHRoZSA6YXR0cjpgX19tZW1iZXJzX19gIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBjbGFzcy4KKworSWYgeW91IGdpdmUgeW91ciA6Y2xhc3M6YEVudW1gIHN1YmNsYXNzIGV4dHJhIG1ldGhvZHMsIGxpa2UgdGhlIGBQbGFuZXRgXworY2xhc3MgYWJvdmUsIHRob3NlIG1ldGhvZHMgd2lsbCBzaG93IHVwIGluIGEgOmZ1bmM6YGRpcmAgb2YgdGhlIG1lbWJlciwKK2J1dCBub3Qgb2YgdGhlIGNsYXNzOjoKKworICAgID4+PiBkaXIoUGxhbmV0KQorICAgIFsnRUFSVEgnLCAnSlVQSVRFUicsICdNQVJTJywgJ01FUkNVUlknLCAnTkVQVFVORScsICdTQVRVUk4nLCAnVVJBTlVTJywgJ1ZFTlVTJywgJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbWVtYmVyc19fJywgJ19fbW9kdWxlX18nXQorICAgID4+PiBkaXIoUGxhbmV0LkVBUlRIKQorICAgIFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsICduYW1lJywgJ3N1cmZhY2VfZ3Jhdml0eScsICd2YWx1ZSddCisKK0EgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZQorOmNsYXNzOmBFbnVtYCBtZW1iZXJzIC0tIGFmdGVyIHRoYXQgaXQgaXMgcmVwbGFjZWQuICBUaGlzIG1lYW5zIGlmIHlvdSB3aXNoIHRvCitjaGFuZ2UgaG93IDpjbGFzczpgRW51bWAgbWVtYmVycyBhcmUgbG9va2VkIHVwIHlvdSBlaXRoZXIgaGF2ZSB0byB3cml0ZSBhCitoZWxwZXIgZnVuY3Rpb24gb3IgYSA6ZnVuYzpgY2xhc3NtZXRob2RgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdAppbmRleCAxODU0MzE4Li5iY2FlZDI0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdApAQCAtMjU5LDYgKzI1OSwxMiBAQAogICAgICAgOmV4YzpgVk1TRXJyb3JgLCA6ZXhjOmBzb2NrZXQuZXJyb3JgLCA6ZXhjOmBzZWxlY3QuZXJyb3JgIGFuZAogICAgICAgOmV4YzpgbW1hcC5lcnJvcmAgaGF2ZSBiZWVuIG1lcmdlZCBpbnRvIDpleGM6YE9TRXJyb3JgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorCisgICAgICBUaGUgOmF0dHI6YGZpbGVuYW1lYCBhdHRyaWJ1dGUgaXMgbm93IHRoZSBvcmlnaW5hbCBmaWxlIG5hbWUgcGFzc2VkIHRvCisgICAgICB0aGUgZnVuY3Rpb24sIGluc3RlYWQgb2YgdGhlIG5hbWUgZW5jb2RlZCB0byBvciBkZWNvZGVkIGZyb20gdGhlCisgICAgICBmaWxlc3lzdGVtIGVuY29kaW5nLgorCiAKIC4uIGV4Y2VwdGlvbjo6IE92ZXJmbG93RXJyb3IKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdCBiL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QKaW5kZXggM2MzMzYyMS4uNjFiYzUwMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0CkBAIC0yNyw2ICsyNyw3IEBACiAqIE9ubHkgdGhlIGZpbGVuYW1lLCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGFyZQogICBkaXNwbGF5ZWQuIChubyBzb3VyY2UgY29kZSkKICogSXQgaXMgbGltaXRlZCB0byAxMDAgZnJhbWVzIGFuZCAxMDAgdGhyZWFkcy4KKyogVGhlIG9yZGVyIGlzIHJldmVyc2VkOiB0aGUgbW9zdCByZWNlbnQgY2FsbCBpcyBzaG93biBmaXJzdC4KIAogQnkgZGVmYXVsdCwgdGhlIFB5dGhvbiB0cmFjZWJhY2sgaXMgd3JpdHRlbiB0byA6ZGF0YTpgc3lzLnN0ZGVycmAuIFRvIHNlZQogdHJhY2ViYWNrcywgYXBwbGljYXRpb25zIG11c3QgYmUgcnVuIGluIHRoZSB0ZXJtaW5hbC4gQSBsb2cgZmlsZSBjYW4KQEAgLTEyOSw3ICsxMzAsNyBAQAogICAgID4+PiBjdHlwZXMuc3RyaW5nX2F0KDApCiAgICAgRmF0YWwgUHl0aG9uIGVycm9yOiBTZWdtZW50YXRpb24gZmF1bHQKIAotICAgIEN1cnJlbnQgdGhyZWFkIDB4MDAwMDdmYjg5OWYzOTcwMDoKKyAgICBDdXJyZW50IHRocmVhZCAweDAwMDA3ZmI4OTlmMzk3MDAgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOgogICAgICAgRmlsZSAiL2hvbWUvcHl0aG9uL2NweXRob24vTGliL2N0eXBlcy9fX2luaXRfXy5weSIsIGxpbmUgNDg2IGluIHN0cmluZ19hdAogICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSBpbiA8bW9kdWxlPgogICAgIFNlZ21lbnRhdGlvbiBmYXVsdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAppbmRleCA4YTg4ZjhjLi44NDcxYTcyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdApAQCAtMjcsNiArMjcsMTAgQEAKICAgIE5vdGUgdGhhdCBubyBleHRlcm5hbCBwcm9ncmFtcyBhcmUgY2FsbGVkIGZyb20gdGhpcyBmdW5jdGlvbiwgZ2l2aW5nIGl0CiAgICBwb3J0YWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4KIAorICAgVGhpcyBmdW5jdGlvbiB1c2VzIGEgY2FjaGUgZm9yIHBhc3QgY29tcGFyaXNvbnMgYW5kIHRoZSByZXN1bHRzLAorICAgd2l0aCBhIGNhY2hlIGludmFsaWRhdGlvbiBtZWNoYW5pc20gcmVseWluZyBvbiBzdGFsZSBzaWduYXR1cmVzCisgICBvciBieSBleHBsaWNpdGx5IGNhbGxpbmcgOmZ1bmM6YGNsZWFyX2NhY2hlYC4KKwogCiAuLiBmdW5jdGlvbjo6IGNtcGZpbGVzKGRpcjEsIGRpcjIsIGNvbW1vbiwgc2hhbGxvdz1UcnVlKQogCkBAIC00OCw2ICs1MiwxNSBAQAogICAgb25lIG9mIHRoZSB0aHJlZSByZXR1cm5lZCBsaXN0cy4KIAogCisuLiBmdW5jdGlvbjo6IGNsZWFyX2NhY2hlKCkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIENsZWFyIHRoZSBmaWxlY21wIGNhY2hlLiBUaGlzIG1heSBiZSB1c2VmdWwgaWYgYSBmaWxlIGlzIGNvbXBhcmVkIHNvIHF1aWNrbHkKKyAgIGFmdGVyIGl0IGlzIG1vZGlmaWVkIHRoYXQgaXQgaXMgd2l0aGluIHRoZSBtdGltZSByZXNvbHV0aW9uIG9mCisgICB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtLgorCisKIC4uIF9kaXJjbXAtb2JqZWN0czoKIAogVGhlIDpjbGFzczpgZGlyY21wYCBjbGFzcwpAQCAtNTUsMjggKzY4LDI1IEBACiAKIC4uIGNsYXNzOjogZGlyY21wKGEsIGIsIGlnbm9yZT1Ob25lLCBoaWRlPU5vbmUpCiAKLSAgIENvbnN0cnVjdCBhIG5ldyBkaXJlY3RvcnkgY29tcGFyaXNvbiBvYmplY3QsIHRvIGNvbXBhcmUgdGhlIGRpcmVjdG9yaWVzICphKiBhbmQKLSAgICpiKi4gKmlnbm9yZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGlnbm9yZSwgYW5kIGRlZmF1bHRzIHRvIGBgWydSQ1MnLCAnQ1ZTJywKLSAgICd0YWdzJ11gYC4gKmhpZGUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBoaWRlLCBhbmQgZGVmYXVsdHMgdG8gYGBbb3MuY3VyZGlyLAotICAgb3MucGFyZGlyXWBgLgorICAgQ29uc3RydWN0IGEgbmV3IGRpcmVjdG9yeSBjb21wYXJpc29uIG9iamVjdCwgdG8gY29tcGFyZSB0aGUgZGlyZWN0b3JpZXMgKmEqCisgICBhbmQgKmIqLiAgKmlnbm9yZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGlnbm9yZSwgYW5kIGRlZmF1bHRzIHRvCisgICA6YXR0cjpgZmlsZWNtcC5ERUZBVUxUX0lHTk9SRVNgLiAgKmhpZGUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBoaWRlLCBhbmQKKyAgIGRlZmF1bHRzIHRvIGBgW29zLmN1cmRpciwgb3MucGFyZGlyXWBgLgogCiAgICBUaGUgOmNsYXNzOmBkaXJjbXBgIGNsYXNzIGNvbXBhcmVzIGZpbGVzIGJ5IGRvaW5nICpzaGFsbG93KiBjb21wYXJpc29ucwogICAgYXMgZGVzY3JpYmVkIGZvciA6ZnVuYzpgZmlsZWNtcC5jbXBgLgogCiAgICBUaGUgOmNsYXNzOmBkaXJjbXBgIGNsYXNzIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAotCiAgICAuLiBtZXRob2Q6OiByZXBvcnQoKQogCiAgICAgICBQcmludCAodG8gOmRhdGE6YHN5cy5zdGRvdXRgKSBhIGNvbXBhcmlzb24gYmV0d2VlbiAqYSogYW5kICpiKi4KIAotCiAgICAuLiBtZXRob2Q6OiByZXBvcnRfcGFydGlhbF9jbG9zdXJlKCkKIAogICAgICAgUHJpbnQgYSBjb21wYXJpc29uIGJldHdlZW4gKmEqIGFuZCAqYiogYW5kIGNvbW1vbiBpbW1lZGlhdGUKICAgICAgIHN1YmRpcmVjdG9yaWVzLgogCi0KICAgIC4uIG1ldGhvZDo6IHJlcG9ydF9mdWxsX2Nsb3N1cmUoKQogCiAgICAgICBQcmludCBhIGNvbXBhcmlzb24gYmV0d2VlbiAqYSogYW5kICpiKiBhbmQgY29tbW9uIHN1YmRpcmVjdG9yaWVzCkBAIC0xMzMsNyArMTQzLDcgQEAKIAogICAgLi4gYXR0cmlidXRlOjogY29tbW9uX2ZpbGVzCiAKLSAgICAgIEZpbGVzIGluIGJvdGggKmEqIGFuZCAqYioKKyAgICAgIEZpbGVzIGluIGJvdGggKmEqIGFuZCAqYiouCiAKIAogICAgLi4gYXR0cmlidXRlOjogY29tbW9uX2Z1bm55CkBAIC0xNjQsNiArMTc0LDEyIEBACiAgICAgICBBIGRpY3Rpb25hcnkgbWFwcGluZyBuYW1lcyBpbiA6YXR0cjpgY29tbW9uX2RpcnNgIHRvIDpjbGFzczpgZGlyY21wYAogICAgICAgb2JqZWN0cy4KIAorLi4gYXR0cmlidXRlOjogREVGQVVMVF9JR05PUkVTCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICBMaXN0IG9mIGRpcmVjdG9yaWVzIGlnbm9yZWQgYnkgOmNsYXNzOmBkaXJjbXBgIGJ5IGRlZmF1bHQuCisKIAogSGVyZSBpcyBhIHNpbXBsaWZpZWQgZXhhbXBsZSBvZiB1c2luZyB0aGUgYGBzdWJkaXJzYGAgYXR0cmlidXRlIHRvIHNlYXJjaAogcmVjdXJzaXZlbHkgdGhyb3VnaCB0d28gZGlyZWN0b3JpZXMgdG8gc2hvdyBjb21tb24gZGlmZmVyZW50IGZpbGVzOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QgYi9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0CmluZGV4IDg4YmUxMWMuLmJkYzllN2IgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdApAQCAtNCw2ICs0LDEwIEBACiAuLiBtb2R1bGU6OiBmb3JtYXR0ZXIKICAgIDpzeW5vcHNpczogR2VuZXJpYyBvdXRwdXQgZm9ybWF0dGVyIGFuZCBkZXZpY2UgaW50ZXJmYWNlLgogCisuLiBkZXByZWNhdGVkOjogMy40CisgICBEdWUgdG8gbGFjayBvZiB1c2FnZSwgdGhlIGZvcm1hdHRlciBtb2R1bGUgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgaXMgc2xhdGVkCisgICBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy42LgorCiAKIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHR3byBpbnRlcmZhY2UgZGVmaW5pdGlvbnMsIGVhY2ggd2l0aCBtdWx0aXBsZQogaW1wbGVtZW50YXRpb25zOiBUaGUgKmZvcm1hdHRlciogaW50ZXJmYWNlLCBhbmQgdGhlICp3cml0ZXIqIGludGVyZmFjZSB3aGljaCBpcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKaW5kZXggNGViZjNjYS4uZmZlZTA5ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CkBAIC01NDMsNiArNTQzLDEwIEBACiAgICA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQgaWYgdGhlIG1ldGhvZCBpcyBub3QgZm91bmQgb3IgaWYgZWl0aGVyCiAgICB0aGUgKmZvcm1hdF9zcGVjKiBvciB0aGUgcmV0dXJuIHZhbHVlIGFyZSBub3Qgc3RyaW5ncy4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBgYG9iamVjdCgpLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpYGAgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAKKyAgICAgIGlmICpmb3JtYXRfc3BlYyogaXMgbm90IGVtcHR5IHN0cmluZy4KKwogCiAuLiBfZnVuYy1mcm96ZW5zZXQ6CiAuLiBmdW5jdGlvbjo6IGZyb3plbnNldChbaXRlcmFibGVdKQpAQCAtNjY2LDYgKzY3MCwxMiBAQAogCiAgICBUaGUgaW50ZWdlciB0eXBlIGlzIGRlc2NyaWJlZCBpbiA6cmVmOmB0eXBlc251bWVyaWNgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgKmJhc2UqIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YGludGAgYW5kIHRoZSAqYmFzZSogb2JqZWN0IGhhcyBhCisgICAgICA6bWV0aDpgYmFzZS5fX2luZGV4X18gPG9iamVjdC5fX2luZGV4X18+YCBtZXRob2QsIHRoYXQgbWV0aG9kIGlzIGNhbGxlZAorICAgICAgdG8gb2J0YWluIGFuIGludGVnZXIgZm9yIHRoZSBiYXNlLiAgUHJldmlvdXMgdmVyc2lvbnMgdXNlZAorICAgICAgOm1ldGg6YGJhc2UuX19pbnRfXyA8b2JqZWN0Ll9faW50X18+YCBpbnN0ZWFkIG9mIDptZXRoOmBiYXNlLl9faW5kZXhfXworICAgICAgPG9iamVjdC5fX2luZGV4X18+YC4KIAogLi4gZnVuY3Rpb246OiBpc2luc3RhbmNlKG9iamVjdCwgY2xhc3NpbmZvKQogCkBAIC03NDgsMTkgKzc1OCwyMiBAQAogICAgYWxyZWFkeSBhcnJhbmdlZCBpbnRvIGFyZ3VtZW50IHR1cGxlcywgc2VlIDpmdW5jOmBpdGVydG9vbHMuc3Rhcm1hcGBcLgogCiAKLS4uIGZ1bmN0aW9uOjogbWF4KGl0ZXJhYmxlLCAqWywga2V5XSkKKy4uIGZ1bmN0aW9uOjogbWF4KGl0ZXJhYmxlLCAqWywgZGVmYXVsdCwga2V5XSkKICAgICAgICAgICAgICAgbWF4KGFyZzEsIGFyZzIsICphcmdzWywga2V5XSkKIAogICAgUmV0dXJuIHRoZSBsYXJnZXN0IGl0ZW0gaW4gYW4gaXRlcmFibGUgb3IgdGhlIGxhcmdlc3Qgb2YgdHdvIG9yIG1vcmUKICAgIGFyZ3VtZW50cy4KIAotICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsICppdGVyYWJsZSogbXVzdCBiZSBhIG5vbi1lbXB0eQotICAgaXRlcmFibGUgKHN1Y2ggYXMgYSBub24tZW1wdHkgc3RyaW5nLCB0dXBsZSBvciBsaXN0KS4gIFRoZSBsYXJnZXN0IGl0ZW0KLSAgIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZQotICAgcHJvdmlkZWQsIHRoZSBsYXJnZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcyByZXR1cm5lZC4KKyAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBpdCBzaG91bGQgYmUgYW4gOnRlcm06YGl0ZXJhYmxlYC4KKyAgIFRoZSBsYXJnZXN0IGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbAorICAgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIHNtYWxsZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcworICAgcmV0dXJuZWQuCiAKLSAgIFRoZSBvcHRpb25hbCBrZXl3b3JkLW9ubHkgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nCi0gICBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuCisgICBUaGVyZSBhcmUgdHdvIG9wdGlvbmFsIGtleXdvcmQtb25seSBhcmd1bWVudHMuIFRoZSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMKKyAgIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4gVGhlCisgICAqZGVmYXVsdCogYXJndW1lbnQgc3BlY2lmaWVzIGFuIG9iamVjdCB0byByZXR1cm4gaWYgdGhlIHByb3ZpZGVkIGl0ZXJhYmxlIGlzCisgICBlbXB0eS4gSWYgdGhlIGl0ZXJhYmxlIGlzIGVtcHR5IGFuZCAqZGVmYXVsdCogaXMgbm90IHByb3ZpZGVkLCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCiAKICAgIElmIG11bHRpcGxlIGl0ZW1zIGFyZSBtYXhpbWFsLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3Qgb25lCiAgICBlbmNvdW50ZXJlZC4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIHNvcnQtc3RhYmlsaXR5IHByZXNlcnZpbmcgdG9vbHMKQEAgLTc3NiwxOSArNzg5LDIyIEBACiAgICA6cmVmOmB0eXBlbWVtb3J5dmlld2AgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAotLi4gZnVuY3Rpb246OiBtaW4oaXRlcmFibGUsICpbLCBrZXldKQorLi4gZnVuY3Rpb246OiBtaW4oaXRlcmFibGUsICpbLCBkZWZhdWx0LCBrZXldKQogICAgICAgICAgICAgICBtaW4oYXJnMSwgYXJnMiwgKmFyZ3NbLCBrZXldKQogCiAgICBSZXR1cm4gdGhlIHNtYWxsZXN0IGl0ZW0gaW4gYW4gaXRlcmFibGUgb3IgdGhlIHNtYWxsZXN0IG9mIHR3byBvciBtb3JlCiAgICBhcmd1bWVudHMuCiAKLSAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCAqaXRlcmFibGUqIG11c3QgYmUgYSBub24tZW1wdHkKLSAgIGl0ZXJhYmxlIChzdWNoIGFzIGEgbm9uLWVtcHR5IHN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBUaGUgc21hbGxlc3QgaXRlbQotICAgaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlCi0gICBwcm92aWRlZCwgdGhlIHNtYWxsZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcyByZXR1cm5lZC4KKyAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBpdCBzaG91bGQgYmUgYW4gOnRlcm06YGl0ZXJhYmxlYC4KKyAgIFRoZSBzbWFsbGVzdCBpdGVtIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwKKyAgIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIHRoZSBzbWFsbGVzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMKKyAgIHJldHVybmVkLgogCi0gICBUaGUgb3B0aW9uYWwga2V5d29yZC1vbmx5ICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcyBhIG9uZS1hcmd1bWVudCBvcmRlcmluZwotICAgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLgorICAgVGhlcmUgYXJlIHR3byBvcHRpb25hbCBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiBUaGUgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzCisgICBhIG9uZS1hcmd1bWVudCBvcmRlcmluZyBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuIFRoZQorICAgKmRlZmF1bHQqIGFyZ3VtZW50IHNwZWNpZmllcyBhbiBvYmplY3QgdG8gcmV0dXJuIGlmIHRoZSBwcm92aWRlZCBpdGVyYWJsZSBpcworICAgZW1wdHkuIElmIHRoZSBpdGVyYWJsZSBpcyBlbXB0eSBhbmQgKmRlZmF1bHQqIGlzIG5vdCBwcm92aWRlZCwgYQorICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICBJZiBtdWx0aXBsZSBpdGVtcyBhcmUgbWluaW1hbCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IG9uZQogICAgZW5jb3VudGVyZWQuICBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzb3J0LXN0YWJpbGl0eSBwcmVzZXJ2aW5nIHRvb2xzCkBAIC05NjMsNiArOTc5LDggQEAKICAgIDptb2Q6YG9zLm9wZW5gIGFzICpvcGVuZXIqIHJlc3VsdHMgaW4gZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIHBhc3NpbmcKICAgIGBgTm9uZWBgKS4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIHRoZSA6cmVmOmBkaXJfZmQgPGRpcl9mZD5gIHBhcmFtZXRlciBvZiB0aGUKICAgIDpmdW5jOmBvcy5vcGVuYCBmdW5jdGlvbiB0byBvcGVuIGEgZmlsZSByZWxhdGl2ZSB0byBhIGdpdmVuIGRpcmVjdG9yeTo6CiAKQEAgLTk3NiwxMCArOTk0LDYgQEAKICAgICAgIC4uLgogICAgICAgPj4+IG9zLmNsb3NlKGRpcl9mZCkgICMgZG9uJ3QgbGVhayBhIGZpbGUgZGVzY3JpcHRvcgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgVGhlICpvcGVuZXIqIHBhcmFtZXRlciB3YXMgYWRkZWQuCi0gICAgICBUaGUgYGAneCdgYCBtb2RlIHdhcyBhZGRlZC4KLQogICAgVGhlIHR5cGUgb2YgOnRlcm06YGZpbGUgb2JqZWN0YCByZXR1cm5lZCBieSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uCiAgICBkZXBlbmRzIG9uIHRoZSBtb2RlLiAgV2hlbiA6ZnVuYzpgb3BlbmAgaXMgdXNlZCB0byBvcGVuIGEgZmlsZSBpbiBhIHRleHQKICAgIG1vZGUgKGBgJ3cnYGAsIGBgJ3InYGAsIGBgJ3d0J2BgLCBgYCdydCdgYCwgZXRjLiksIGl0IHJldHVybnMgYSBzdWJjbGFzcyBvZgpAQCAtMTAwNiwxMCArMTAyMCwxNSBAQAogICAgYW5kIDptb2Q6YHNodXRpbGAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgKm9wZW5lciogcGFyYW1ldGVyIHdhcyBhZGRlZC4KKyAgICAgIFRoZSBgYCd4J2BgIG1vZGUgd2FzIGFkZGVkLgogICAgICAgOmV4YzpgSU9FcnJvcmAgdXNlZCB0byBiZSByYWlzZWQsIGl0IGlzIG5vdyBhbiBhbGlhcyBvZiA6ZXhjOmBPU0Vycm9yYC4KICAgICAgIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaXMgbm93IHJhaXNlZCBpZiB0aGUgZmlsZSBvcGVuZWQgaW4gZXhjbHVzaXZlCiAgICAgICBjcmVhdGlvbiBtb2RlIChgYCd4J2BgKSBhbHJlYWR5IGV4aXN0cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmaWxlIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gWFhYIHdvcmtzIGZvciBieXRlcyB0b28sIGJ1dCBzaG91bGQgaXQ/CiAuLiBmdW5jdGlvbjo6IG9yZChjKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKaW5kZXggM2M5NDZlMy4uMTRlMTM1MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CkBAIC02LDYgKzYsNyBAQAogLi4gbW9kdWxlYXV0aG9yOjogUGV0ZXIgSGFycmlzIDxzY2F2QGJsdWV5b25kZXIuY28udWs+CiAuLiBtb2R1bGVhdXRob3I6OiBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+CiAuLiBtb2R1bGVhdXRob3I6OiBOaWNrIENvZ2hsYW4gPG5jb2dobGFuQGdtYWlsLmNvbT4KKy4uIG1vZHVsZWF1dGhvcjo6IMWBdWthc3ogTGFuZ2EgPGx1a2FzekBsYW5nYS5wbD4KIC4uIHNlY3Rpb25hdXRob3I6OiBQZXRlciBIYXJyaXMgPHNjYXZAYmx1ZXlvbmRlci5jby51az4KIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZnVuY3Rvb2xzLnB5YApAQCAtMTMzLDE1ICsxMzQsMzQgQEAKIAogICAgICAgIEB0b3RhbF9vcmRlcmluZwogICAgICAgIGNsYXNzIFN0dWRlbnQ6CisgICAgICAgICAgIGRlZiBfaXNfdmFsaWRfb3BlcmFuZChzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICByZXR1cm4gKGhhc2F0dHIob3RoZXIsICJsYXN0bmFtZSIpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG90aGVyLCAiZmlyc3RuYW1lIikpCiAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3ZhbGlkX29wZXJhbmQob3RoZXIpOgorICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA9PQogICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIubGFzdG5hbWUubG93ZXIoKSwgb3RoZXIuZmlyc3RuYW1lLmxvd2VyKCkpKQogICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9pc192YWxpZF9vcGVyYW5kKG90aGVyKToKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICAgICAgICAgICAgIHJldHVybiAoKHNlbGYubGFzdG5hbWUubG93ZXIoKSwgc2VsZi5maXJzdG5hbWUubG93ZXIoKSkgPAogICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIubGFzdG5hbWUubG93ZXIoKSwgb3RoZXIuZmlyc3RuYW1lLmxvd2VyKCkpKQogCisgICAuLiBub3RlOjoKKworICAgICAgV2hpbGUgdGhpcyBkZWNvcmF0b3IgbWFrZXMgaXQgZWFzeSB0byBjcmVhdGUgd2VsbCBiZWhhdmVkIHRvdGFsbHkKKyAgICAgIG9yZGVyZWQgdHlwZXMsIGl0ICpkb2VzKiBjb21lIGF0IHRoZSBjb3N0IG9mIHNsb3dlciBleGVjdXRpb24gYW5kCisgICAgICBtb3JlIGNvbXBsZXggc3RhY2sgdHJhY2VzIGZvciB0aGUgZGVyaXZlZCBjb21wYXJpc29uIG1ldGhvZHMuIElmCisgICAgICBwZXJmb3JtYW5jZSBiZW5jaG1hcmtpbmcgaW5kaWNhdGVzIHRoaXMgaXMgYSBib3R0bGVuZWNrIGZvciBhIGdpdmVuCisgICAgICBhcHBsaWNhdGlvbiwgaW1wbGVtZW50aW5nIGFsbCBzaXggcmljaCBjb21wYXJpc29uIG1ldGhvZHMgaW5zdGVhZCBpcworICAgICAgbGlrZWx5IHRvIHByb3ZpZGUgYW4gZWFzeSBzcGVlZCBib29zdC4KKwogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBSZXR1cm5pbmcgTm90SW1wbGVtZW50ZWQgZnJvbSB0aGUgdW5kZXJseWluZyBjb21wYXJpc29uIGZ1bmN0aW9uIGZvcgorICAgICAgdW5yZWNvZ25pc2VkIHR5cGVzIGlzIG5vdyBzdXBwb3J0ZWQuCiAKIC4uIGZ1bmN0aW9uOjogcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKIApAQCAtMTk4LDYgKzIxOCwxMTEgQEAKICAgICAgICAgICByZXR1cm4gdmFsdWUKIAogCisuLiBkZWNvcmF0b3I6OiBzaW5nbGVkaXNwYXRjaChkZWZhdWx0KQorCisgICBUcmFuc2Zvcm1zIGEgZnVuY3Rpb24gaW50byBhIDp0ZXJtOmBzaW5nbGUtZGlzcGF0Y2ggPHNpbmdsZQorICAgZGlzcGF0Y2g+YCA6dGVybTpgZ2VuZXJpYyBmdW5jdGlvbmAuCisKKyAgIFRvIGRlZmluZSBhIGdlbmVyaWMgZnVuY3Rpb24sIGRlY29yYXRlIGl0IHdpdGggdGhlIGBgQHNpbmdsZWRpc3BhdGNoYGAKKyAgIGRlY29yYXRvci4gTm90ZSB0aGF0IHRoZSBkaXNwYXRjaCBoYXBwZW5zIG9uIHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCwKKyAgIGNyZWF0ZSB5b3VyIGZ1bmN0aW9uIGFjY29yZGluZ2x5OjoKKworICAgICA+Pj4gZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHNpbmdsZWRpc3BhdGNoCisgICAgID4+PiBAc2luZ2xlZGlzcGF0Y2gKKyAgICAgLi4uIGRlZiBmdW4oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiTGV0IG1lIGp1c3Qgc2F5LCIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnKQorCisgICBUbyBhZGQgb3ZlcmxvYWRlZCBpbXBsZW1lbnRhdGlvbnMgdG8gdGhlIGZ1bmN0aW9uLCB1c2UgdGhlIDpmdW5jOmByZWdpc3RlcmAKKyAgIGF0dHJpYnV0ZSBvZiB0aGUgZ2VuZXJpYyBmdW5jdGlvbi4gIEl0IGlzIGEgZGVjb3JhdG9yLCB0YWtpbmcgYSB0eXBlCisgICBwYXJhbWV0ZXIgYW5kIGRlY29yYXRpbmcgYSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIG9wZXJhdGlvbiBmb3IgdGhhdAorICAgdHlwZTo6CisKKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIoaW50KQorICAgICAuLi4gZGVmIF8oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiU3RyZW5ndGggaW4gbnVtYmVycywgZWg/IiwgZW5kPSIgIikKKyAgICAgLi4uICAgICBwcmludChhcmcpCisgICAgIC4uLgorICAgICA+Pj4gQGZ1bi5yZWdpc3RlcihsaXN0KQorICAgICAuLi4gZGVmIF8oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiRW51bWVyYXRlIHRoaXM6IikKKyAgICAgLi4uICAgICBmb3IgaSwgZWxlbSBpbiBlbnVtZXJhdGUoYXJnKToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoaSwgZWxlbSkKKworICAgVG8gZW5hYmxlIHJlZ2lzdGVyaW5nIGxhbWJkYXMgYW5kIHByZS1leGlzdGluZyBmdW5jdGlvbnMsIHRoZQorICAgOmZ1bmM6YHJlZ2lzdGVyYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgaW4gYSBmdW5jdGlvbmFsIGZvcm06OgorCisgICAgID4+PiBkZWYgbm90aGluZyhhcmcsIHZlcmJvc2U9RmFsc2UpOgorICAgICAuLi4gICAgIHByaW50KCJOb3RoaW5nLiIpCisgICAgIC4uLgorICAgICA+Pj4gZnVuLnJlZ2lzdGVyKHR5cGUoTm9uZSksIG5vdGhpbmcpCisKKyAgIFRoZSA6ZnVuYzpgcmVnaXN0ZXJgIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSB1bmRlY29yYXRlZCBmdW5jdGlvbiB3aGljaAorICAgZW5hYmxlcyBkZWNvcmF0b3Igc3RhY2tpbmcsIHBpY2tsaW5nLCBhcyB3ZWxsIGFzIGNyZWF0aW5nIHVuaXQgdGVzdHMgZm9yCisgICBlYWNoIHZhcmlhbnQgaW5kZXBlbmRlbnRseTo6CisKKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIoZmxvYXQpCisgICAgIC4uLiBAZnVuLnJlZ2lzdGVyKERlY2ltYWwpCisgICAgIC4uLiBkZWYgZnVuX251bShhcmcsIHZlcmJvc2U9RmFsc2UpOgorICAgICAuLi4gICAgIGlmIHZlcmJvc2U6CisgICAgIC4uLiAgICAgICAgIHByaW50KCJIYWxmIG9mIHlvdXIgbnVtYmVyOiIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnIC8gMikKKyAgICAgLi4uCisgICAgID4+PiBmdW5fbnVtIGlzIGZ1bgorICAgICBGYWxzZQorCisgICBXaGVuIGNhbGxlZCwgdGhlIGdlbmVyaWMgZnVuY3Rpb24gZGlzcGF0Y2hlcyBvbiB0aGUgdHlwZSBvZiB0aGUgZmlyc3QKKyAgIGFyZ3VtZW50OjoKKworICAgICA+Pj4gZnVuKCJIZWxsbywgd29ybGQuIikKKyAgICAgSGVsbG8sIHdvcmxkLgorICAgICA+Pj4gZnVuKCJ0ZXN0LiIsIHZlcmJvc2U9VHJ1ZSkKKyAgICAgTGV0IG1lIGp1c3Qgc2F5LCB0ZXN0LgorICAgICA+Pj4gZnVuKDQyLCB2ZXJib3NlPVRydWUpCisgICAgIFN0cmVuZ3RoIGluIG51bWJlcnMsIGVoPyA0MgorICAgICA+Pj4gZnVuKFsnc3BhbScsICdzcGFtJywgJ2VnZ3MnLCAnc3BhbSddLCB2ZXJib3NlPVRydWUpCisgICAgIEVudW1lcmF0ZSB0aGlzOgorICAgICAwIHNwYW0KKyAgICAgMSBzcGFtCisgICAgIDIgZWdncworICAgICAzIHNwYW0KKyAgICAgPj4+IGZ1bihOb25lKQorICAgICBOb3RoaW5nLgorICAgICA+Pj4gZnVuKDEuMjMpCisgICAgIDAuNjE1CisKKyAgIFdoZXJlIHRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgdHlwZSwgaXRzCisgICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBpcyB1c2VkIHRvIGZpbmQgYSBtb3JlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uCisgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVjb3JhdGVkIHdpdGggYGBAc2luZ2xlZGlzcGF0Y2hgYCBpcyByZWdpc3RlcmVkCisgICBmb3IgdGhlIGJhc2UgYGBvYmplY3RgYCB0eXBlLCB3aGljaCBtZWFucyBpdCBpcyB1c2VkIGlmIG5vIGJldHRlcgorICAgaW1wbGVtZW50YXRpb24gaXMgZm91bmQuCisKKyAgIFRvIGNoZWNrIHdoaWNoIGltcGxlbWVudGF0aW9uIHdpbGwgdGhlIGdlbmVyaWMgZnVuY3Rpb24gY2hvb3NlIGZvcgorICAgYSBnaXZlbiB0eXBlLCB1c2UgdGhlIGBgZGlzcGF0Y2goKWBgIGF0dHJpYnV0ZTo6CisKKyAgICAgPj4+IGZ1bi5kaXNwYXRjaChmbG9hdCkKKyAgICAgPGZ1bmN0aW9uIGZ1bl9udW0gYXQgMHgxMDM1YTI4NDA+CisgICAgID4+PiBmdW4uZGlzcGF0Y2goZGljdCkgICAgIyBub3RlOiBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgIDxmdW5jdGlvbiBmdW4gYXQgMHgxMDNmZTAwMDA+CisKKyAgIFRvIGFjY2VzcyBhbGwgcmVnaXN0ZXJlZCBpbXBsZW1lbnRhdGlvbnMsIHVzZSB0aGUgcmVhZC1vbmx5IGBgcmVnaXN0cnlgYAorICAgYXR0cmlidXRlOjoKKworICAgID4+PiBmdW4ucmVnaXN0cnkua2V5cygpCisgICAgZGljdF9rZXlzKFs8Y2xhc3MgJ05vbmVUeXBlJz4sIDxjbGFzcyAnaW50Jz4sIDxjbGFzcyAnb2JqZWN0Jz4sCisgICAgICAgICAgICAgIDxjbGFzcyAnZGVjaW1hbC5EZWNpbWFsJz4sIDxjbGFzcyAnbGlzdCc+LAorICAgICAgICAgICAgICA8Y2xhc3MgJ2Zsb2F0Jz5dKQorICAgID4+PiBmdW4ucmVnaXN0cnlbZmxvYXRdCisgICAgPGZ1bmN0aW9uIGZ1bl9udW0gYXQgMHgxMDM1YTI4NDA+CisgICAgPj4+IGZ1bi5yZWdpc3RyeVtvYmplY3RdCisgICAgPGZ1bmN0aW9uIGZ1biBhdCAweDEwM2ZlMDAwMD4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCB3cmFwcGVkLCBhc3NpZ25lZD1XUkFQUEVSX0FTU0lHTk1FTlRTLCB1cGRhdGVkPVdSQVBQRVJfVVBEQVRFUykKIAogICAgVXBkYXRlIGEgKndyYXBwZXIqIGZ1bmN0aW9uIHRvIGxvb2sgbGlrZSB0aGUgKndyYXBwZWQqIGZ1bmN0aW9uLiBUaGUgb3B0aW9uYWwKQEAgLTIxMiw4ICszMzcsOCBAQAogCiAgICBUbyBhbGxvdyBhY2Nlc3MgdG8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGZvciBpbnRyb3NwZWN0aW9uIGFuZCBvdGhlciBwdXJwb3NlcwogICAgKGUuZy4gYnlwYXNzaW5nIGEgY2FjaGluZyBkZWNvcmF0b3Igc3VjaCBhcyA6ZnVuYzpgbHJ1X2NhY2hlYCksIHRoaXMgZnVuY3Rpb24KLSAgIGF1dG9tYXRpY2FsbHkgYWRkcyBhIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZSB0byB0aGUgd3JhcHBlciB0aGF0IHJlZmVycyB0bwotICAgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgorICAgYXV0b21hdGljYWxseSBhZGRzIGEgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSB0byB0aGUgd3JhcHBlciB0aGF0IHJlZmVycyB0bworICAgdGhlIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuCiAKICAgIFRoZSBtYWluIGludGVuZGVkIHVzZSBmb3IgdGhpcyBmdW5jdGlvbiBpcyBpbiA6dGVybTpgZGVjb3JhdG9yYCBmdW5jdGlvbnMgd2hpY2gKICAgIHdyYXAgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiBhbmQgcmV0dXJuIHRoZSB3cmFwcGVyLiBJZiB0aGUgd3JhcHBlciBmdW5jdGlvbiBpcwpAQCAtMjM2LDYgKzM2MSwxMSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIE1pc3NpbmcgYXR0cmlidXRlcyBubyBsb25nZXIgdHJpZ2dlciBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBub3cgYWx3YXlzIHJlZmVycyB0byB0aGUgd3JhcHBlZAorICAgICAgZnVuY3Rpb24sIGV2ZW4gaWYgdGhhdCBmdW5jdGlvbiBkZWZpbmVkIGEgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZS4KKyAgICAgIChzZWUgOmlzc3VlOmAxNzQ4MmApCisKIAogLi4gZGVjb3JhdG9yOjogd3JhcHMod3JhcHBlZCwgYXNzaWduZWQ9V1JBUFBFUl9BU1NJR05NRU5UUywgdXBkYXRlZD1XUkFQUEVSX1VQREFURVMpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2djLnJzdCBiL0RvYy9saWJyYXJ5L2djLnJzdAppbmRleCA1ODc4ZGE1Li44ZTNhNGJkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2MucnN0CkBAIC02Nyw2ICs2NywyNCBAQAogICAgcmV0dXJuZWQuCiAKIAorLi4gZnVuY3Rpb246OiBnZXRfc3RhdHMoKQorCisgICBSZXR1cm4gYSBsaXN0IG9mIDMgcGVyLWdlbmVyYXRpb24gZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgY29sbGVjdGlvbgorICAgc3RhdGlzdGljcyBzaW5jZSBpbnRlcnByZXRlciBzdGFydC4gIEF0IHRoaXMgbW9tZW50LCBlYWNoIGRpY3Rpb25hcnkgd2lsbAorICAgY29udGFpbiB0aGUgZm9sbG93aW5nIGl0ZW1zOgorCisgICAqIGBgY29sbGVjdGlvbnNgYCBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgZ2VuZXJhdGlvbiB3YXMgY29sbGVjdGVkOworCisgICAqIGBgY29sbGVjdGVkYGAgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGNvbGxlY3RlZCBpbnNpZGUgdGhpcworICAgICBnZW5lcmF0aW9uOworCisgICAqIGBgdW5jb2xsZWN0YWJsZWBgIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyB3aGljaCB3ZXJlIGZvdW5kCisgICAgIHRvIGJlIHVuY29sbGVjdGFibGUgKGFuZCB3ZXJlIHRoZXJlZm9yZSBtb3ZlZCB0byB0aGUgOmRhdGE6YGdhcmJhZ2VgCisgICAgIGxpc3QpIGluc2lkZSB0aGlzIGdlbmVyYXRpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogc2V0X3RocmVzaG9sZCh0aHJlc2hvbGQwWywgdGhyZXNob2xkMVssIHRocmVzaG9sZDJdXSkKIAogICAgU2V0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gdGhyZXNob2xkcyAodGhlIGNvbGxlY3Rpb24gZnJlcXVlbmN5KS4gU2V0dGluZwpAQCAtMTU4LDI0ICsxNzYsMTMgQEAKIAogLi4gZGF0YTo6IGdhcmJhZ2UKIAotICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQgbm90IGJlCi0gICBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBjb250YWlucyBvbmx5IG9iamVjdHMgd2l0aAotICAgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMuIE9iamVjdHMgdGhhdCBoYXZlIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFuZCBhcmUKLSAgIHBhcnQgb2YgYSByZWZlcmVuY2UgY3ljbGUgY2F1c2UgdGhlIGVudGlyZSByZWZlcmVuY2UgY3ljbGUgdG8gYmUgdW5jb2xsZWN0YWJsZSwKLSAgIGluY2x1ZGluZyBvYmplY3RzIG5vdCBuZWNlc3NhcmlseSBpbiB0aGUgY3ljbGUgYnV0IHJlYWNoYWJsZSBvbmx5IGZyb20gaXQuCi0gICBQeXRob24gZG9lc24ndCBjb2xsZWN0IHN1Y2ggY3ljbGVzIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSwgaW4gZ2VuZXJhbCwgaXQgaXNuJ3QKLSAgIHBvc3NpYmxlIGZvciBQeXRob24gdG8gZ3Vlc3MgYSBzYWZlIG9yZGVyIGluIHdoaWNoIHRvIHJ1biB0aGUgOm1ldGg6YF9fZGVsX19gCi0gICBtZXRob2RzLiAgSWYgeW91IGtub3cgYSBzYWZlIG9yZGVyLCB5b3UgY2FuIGZvcmNlIHRoZSBpc3N1ZSBieSBleGFtaW5pbmcgdGhlCi0gICAqZ2FyYmFnZSogbGlzdCwgYW5kIGV4cGxpY2l0bHkgYnJlYWtpbmcgY3ljbGVzIGR1ZSB0byB5b3VyIG9iamVjdHMgd2l0aGluIHRoZQotICAgbGlzdC4gIE5vdGUgdGhhdCB0aGVzZSBvYmplY3RzIGFyZSBrZXB0IGFsaXZlIGV2ZW4gc28gYnkgdmlydHVlIG9mIGJlaW5nIGluIHRoZQotICAgKmdhcmJhZ2UqIGxpc3QsIHNvIHRoZXkgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSAqZ2FyYmFnZSogdG9vLiAgRm9yIGV4YW1wbGUsCi0gICBhZnRlciBicmVha2luZyBjeWNsZXMsIGRvIGBgZGVsIGdjLmdhcmJhZ2VbOl1gYCB0byBlbXB0eSB0aGUgbGlzdC4gIEl0J3MKLSAgIGdlbmVyYWxseSBiZXR0ZXIgdG8gYXZvaWQgdGhlIGlzc3VlIGJ5IG5vdCBjcmVhdGluZyBjeWNsZXMgY29udGFpbmluZyBvYmplY3RzCi0gICB3aXRoIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzLCBhbmQgKmdhcmJhZ2UqIGNhbiBiZSBleGFtaW5lZCBpbiB0aGF0IGNhc2UgdG8KLSAgIHZlcmlmeSB0aGF0IG5vIHN1Y2ggY3ljbGVzIGFyZSBiZWluZyBjcmVhdGVkLgorICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQKKyAgIG5vdCBiZSBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgdGhpcworICAgbGlzdCBzaG91bGQgYmUgZW1wdHkgbW9zdCBvZiB0aGUgdGltZSwgZXhjZXB0IHdoZW4gdXNpbmcgaW5zdGFuY2VzIG9mCisgICBDIGV4dGVuc2lvbiB0eXBlcyB3aXRoIGEgbm9uLU5VTEwgYGB0cF9kZWxgYCBzbG90LgogCi0gICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlIGFkZGVkCi0gICB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCisgICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlCisgICBhZGRlZCB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBJZiB0aGlzIGxpc3QgaXMgbm9uLWVtcHR5IGF0IGludGVycHJldGVyIHNodXRkb3duLCBhCkBAIC0xODMsNiArMTkwLDEwIEBACiAgICAgICA6Y29uc3Q6YERFQlVHX1VOQ09MTEVDVEFCTEVgIGlzIHNldCwgaW4gYWRkaXRpb24gYWxsIHVuY29sbGVjdGFibGUgb2JqZWN0cwogICAgICAgYXJlIHByaW50ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBGb2xsb3dpbmcgOnBlcDpgNDQyYCwgb2JqZWN0cyB3aXRoIGEgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBkb24ndCBlbmQKKyAgICAgIHVwIGluIDphdHRyOmBnYy5nYXJiYWdlYCBhbnltb3JlLgorCiAuLiBkYXRhOjogY2FsbGJhY2tzCiAKICAgIEEgbGlzdCBvZiBjYWxsYmFja3MgdGhhdCB3aWxsIGJlIGludm9rZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGJlZm9yZSBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2d6aXAucnN0IGIvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKaW5kZXggZWMxNmY2YS4uZGU1MDYzYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ3ppcC5yc3QKQEAgLTM1LDggKzM1LDggQEAKICAgIDpjbGFzczpgYnl0ZXNgIG9iamVjdCksIG9yIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgJ3InYGAsIGBgJ3JiJ2BgLCBgYCdhJ2BgLCBgYCdhYidgYCwKLSAgIGBgJ3cnYGAsIG9yIGBgJ3diJ2BgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAncnQnYGAsIGBgJ2F0J2BgLCBvciBgYCd3dCdgYCBmb3IKLSAgIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCisgICBgYCd3J2BgLCBgYCd3YidgYCwgYGAneCdgYCBvciBgYCd4YidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLAorICAgYGAnYXQnYGAsIGBgJ3d0J2BgLCBvciBgYCd4dCdgYCBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KIAogICAgVGhlICpjb21wcmVzc2xldmVsKiBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMCB0byA5LCBhcyBmb3IgdGhlCiAgICA6Y2xhc3M6YEd6aXBGaWxlYCBjb25zdHJ1Y3Rvci4KQEAgLTUzLDYgKzUzLDkgQEAKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yICpmaWxlbmFtZSogYmVpbmcgYSBmaWxlIG9iamVjdCwgc3VwcG9ydCBmb3IgdGV4dCBtb2RlLAogICAgICAgYW5kIHRoZSAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqIGFyZ3VtZW50cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCd4J2BgLCBgYCd4YidgYCBhbmQgYGAneHQnYGAgbW9kZXMuCisKIAogLi4gY2xhc3M6OiBHemlwRmlsZShmaWxlbmFtZT1Ob25lLCBtb2RlPU5vbmUsIGNvbXByZXNzbGV2ZWw9OSwgZmlsZW9iaj1Ob25lLCBtdGltZT1Ob25lKQogCkBAIC03Myw4ICs3Niw5IEBACiAgICBvcmlnaW5hbCBmaWxlbmFtZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGhlYWRlci4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgJ3InYGAsIGBgJ3JiJ2BgLCBgYCdhJ2BgLCBgYCdhYidgYCwgYGAndydgYCwKLSAgIG9yIGBgJ3diJ2BgLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBkZWZhdWx0Ci0gICBpcyB0aGUgbW9kZSBvZiAqZmlsZW9iaiogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCisgICBgYCd3YidgYCwgYGAneCdgYCwgb3IgYGAneGInYGAsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaWxlIHdpbGwgYmUgcmVhZCBvcgorICAgd3JpdHRlbi4gIFRoZSBkZWZhdWx0IGlzIHRoZSBtb2RlIG9mICpmaWxlb2JqKiBpZiBkaXNjZXJuaWJsZTsgb3RoZXJ3aXNlLCB0aGUKKyAgIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIE5vdGUgdGhhdCB0aGUgZmlsZSBpcyBhbHdheXMgb3BlbmVkIGluIGJpbmFyeSBtb2RlLiBUbyBvcGVuIGEgY29tcHJlc3NlZCBmaWxlCiAgICBpbiB0ZXh0IG1vZGUsIHVzZSA6ZnVuYzpgLm9wZW5gIChvciB3cmFwIHlvdXIgOmNsYXNzOmBHemlwRmlsZWAgd2l0aCBhbgpAQCAtMTI1LDYgKzEyOSw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgVGhlIDptZXRoOmBpby5CdWZmZXJlZElPQmFzZS5yZWFkMWAgbWV0aG9kIGlzIG5vdyBpbXBsZW1lbnRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCd4J2BgIGFuZCBgYCd4YidgYCBtb2Rlcy4KKwogCiAuLiBmdW5jdGlvbjo6IGNvbXByZXNzKGRhdGEsIGNvbXByZXNzbGV2ZWw9OSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAppbmRleCA0OWZlZGVjLi5iMWRhYmExIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdApAQCAtMzIsNiArMzIsMTAgQEAKICAgIFNvbWUgYWxnb3JpdGhtcyBoYXZlIGtub3duIGhhc2ggY29sbGlzaW9uIHdlYWtuZXNzZXMsIHJlZmVyIHRvIHRoZSAiU2VlCiAgICBhbHNvIiBzZWN0aW9uIGF0IHRoZSBlbmQuCiAKKworSGFzaCBhbGdvcml0aG1zCistLS0tLS0tLS0tLS0tLS0KKwogVGhlcmUgaXMgb25lIGNvbnN0cnVjdG9yIG1ldGhvZCBuYW1lZCBmb3IgZWFjaCB0eXBlIG9mIDpkZm46YGhhc2hgLiAgQWxsIHJldHVybgogYSBoYXNoIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNpbXBsZSBpbnRlcmZhY2UuIEZvciBleGFtcGxlOiB1c2UgOmZ1bmM6YHNoYTFgIHRvCiBjcmVhdGUgYSBTSEExIGhhc2ggb2JqZWN0LiBZb3UgY2FuIG5vdyBmZWVkIHRoaXMgb2JqZWN0IHdpdGggOnRlcm06YGJ5dGVzLWxpa2UKQEAgLTUzLDkgKzU3LDEzIEBACiAuLiBpbmRleDo6IHNpbmdsZTogT3BlblNTTDsgKHVzZSBpbiBtb2R1bGUgaGFzaGxpYikKIAogQ29uc3RydWN0b3JzIGZvciBoYXNoIGFsZ29yaXRobXMgdGhhdCBhcmUgYWx3YXlzIHByZXNlbnQgaW4gdGhpcyBtb2R1bGUgYXJlCi06ZnVuYzpgbWQ1YCwgOmZ1bmM6YHNoYTFgLCA6ZnVuYzpgc2hhMjI0YCwgOmZ1bmM6YHNoYTI1NmAsIDpmdW5jOmBzaGEzODRgLCBhbmQKLTpmdW5jOmBzaGE1MTJgLiAgQWRkaXRpb25hbCBhbGdvcml0aG1zIG1heSBhbHNvIGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgdXBvbiB0aGUKLU9wZW5TU0wgbGlicmFyeSB0aGF0IFB5dGhvbiB1c2VzIG9uIHlvdXIgcGxhdGZvcm0uCis6ZnVuYzpgbWQ1YCwgOmZ1bmM6YHNoYTFgLCA6ZnVuYzpgc2hhMjI0YCwgOmZ1bmM6YHNoYTI1NmAsIDpmdW5jOmBzaGEzODRgLAorOmZ1bmM6YHNoYTUxMmAsIDpmdW5jOmBzaGEzXzIyNGAsIDpmdW5jOmBzaGEzXzI1NmAsIDpmdW5jOmBzaGEzXzM4NGAsIGFuZAorOmZ1bmM6YHNoYTNfNTEyYC4gQWRkaXRpb25hbCBhbGdvcml0aG1zIG1heSBhbHNvIGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgdXBvbgordGhlIE9wZW5TU0wgbGlicmFyeSB0aGF0IFB5dGhvbiB1c2VzIG9uIHlvdXIgcGxhdGZvcm0uCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGQgc2hhMyBmYW1pbHkgb2YgaGFzaCBhbGdvcml0aG1zLgogCiBGb3IgZXhhbXBsZSwgdG8gb2J0YWluIHRoZSBkaWdlc3Qgb2YgdGhlIGJ5dGUgc3RyaW5nIGBgYidOb2JvZHkgaW5zcGVjdHMgdGhlCiBzcGFtbWlzaCByZXBldGl0aW9uJ2BgOjoKQEAgLTEyMiw2ICsxMzAsMTggQEAKIAogICAgVGhlIGludGVybmFsIGJsb2NrIHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtIGluIGJ5dGVzLgogCitBIGhhc2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKy4uIGF0dHJpYnV0ZTo6IGhhc2gubmFtZQorCisgICBUaGUgY2Fub25pY2FsIG5hbWUgb2YgdGhpcyBoYXNoLCBhbHdheXMgbG93ZXJjYXNlIGFuZCBhbHdheXMgc3VpdGFibGUgYXMgYQorICAgcGFyYW1ldGVyIHRvIDpmdW5jOmBuZXdgIHRvIGNyZWF0ZSBhbm90aGVyIGhhc2ggb2YgdGhpcyB0eXBlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5hbWUgYXR0cmlidXRlIGhhcyBiZWVuIHByZXNlbnQgaW4gQ1B5dGhvbiBzaW5jZSBpdHMgaW5jZXB0aW9uLCBidXQKKyAgICAgIHVudGlsIFB5dGhvbiAzLjQgd2FzIG5vdCBmb3JtYWxseSBzcGVjaWZpZWQsIHNvIG1heSBub3QgZXhpc3Qgb24gc29tZQorICAgICAgcGxhdGZvcm1zLgorCiBBIGhhc2ggb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKIApAQCAtMTU4LDYgKzE3OCw0NSBAQAogICAgY29tcHV0ZSB0aGUgZGlnZXN0cyBvZiBkYXRhIHNoYXJpbmcgYSBjb21tb24gaW5pdGlhbCBzdWJzdHJpbmcuCiAKIAorS2V5IERlcml2YXRpb24gRnVuY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0tleSBkZXJpdmF0aW9uIGFuZCBrZXkgc3RyZXRjaGluZyBhbGdvcml0aG1zIGFyZSBkZXNpZ25lZCBmb3Igc2VjdXJlIHBhc3N3b3JkCitoYXNoaW5nLiBOYWl2ZSBhbGdvcml0aG1zIHN1Y2ggYXMgYGBzaGExKHBhc3N3b3JkKWBgIGFyZSBub3QgcmVzaXN0YW50CithZ2FpbnN0IGJydXRlLWZvcmNlIGF0dGFja3MuIEEgZ29vZCBwYXNzd29yZCBoYXNoaW5nIGZ1bmN0aW9uIG11c3QgYmUgdHVuYWJsZSwKK3Nsb3cgYW5kIGluY2x1ZGUgYSBzYWx0LgorCisKKy4uIGZ1bmN0aW9uOjogcGJrZGYyX2htYWMobmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW49Tm9uZSkKKworICAgVGhlIGZ1bmN0aW9uIHByb3ZpZGVzIFBLQ1MjNSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyLiBJdAorICAgdXNlcyBITUFDIGFzIHBzZXVkb3JhbmRvbSBmdW5jdGlvbi4KKworICAgVGhlIHN0cmluZyAqbmFtZSogaXMgdGhlIGRlc2lyZWQgbmFtZSBvZiB0aGUgaGFzaCBkaWdlc3QgYWxnb3JpdGhtIGZvcgorICAgSE1BQywgZS5nLiAnc2hhMScgb3IgJ3NoYTI1NicuICpwYXNzd29yZCogYW5kICpzYWx0KiBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgIGJ1ZmZlcnMgb2YgYnl0ZXMuIEFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHNob3VsZCBsaW1pdCAqcGFzc3dvcmQqIHRvCisgICBhIHNlbnNpYmxlIHZhbHVlIChlLmcuIDEwMjQpLiAqc2FsdCogc2hvdWxkIGJlIGFib3V0IDE2IG9yIG1vcmUgYnl0ZXMgZnJvbQorICAgYSBwcm9wZXIgc291cmNlLCBlLmcuIDpmdW5jOmBvcy51cmFuZG9tYC4KKworICAgVGhlIG51bWJlciBvZiAqcm91bmRzKiBzaG91bGQgYmUgY2hvc2VuIGJhc2VkIG9uIHRoZSBoYXNoIGFsZ29yaXRobSBhbmQKKyAgIGNvbXB1dGluZyBwb3dlci4gQXMgb2YgMjAxMyBhIHZhbHVlIG9mIGF0IGxlYXN0IDEwMCwwMDAgcm91bmRzIG9mIFNIQS0yNTYKKyAgIGhhdmUgYmVlbiBzdWdnZXN0ZWQuCisKKyAgICpka2xlbiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgZGVyaXZlZCBrZXkuIElmICpka2xlbiogaXMgYGBOb25lYGAgdGhlbiB0aGUKKyAgIGRpZ2VzdCBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSAqbmFtZSogaXMgdXNlZCwgZS5nLiA2NCBmb3IgU0hBLTUxMi4KKworICAgPj4+IGltcG9ydCBoYXNobGliLCBiaW5hc2NpaQorICAgPj4+IGRrID0gaGFzaGxpYi5wYmtkZjJfaG1hYygnc2hhMjU2JywgYidwYXNzd29yZCcsIGInc2FsdCcsIDEwMDAwMCkKKyAgID4+PiBiaW5hc2NpaS5oZXhsaWZ5KGRrKQorICAgYicwMzk0YTJlZGUzMzJjOWExM2ViODJlOWIyNDYzMTYwNGMzMWRmOTc4YjRlMmYwZmJkMmM1NDk5NDRmOWQ3OWE1JworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gbm90ZTo6IEEgZmFzdCBpbXBsZW1lbnRhdGlvbiBvZiAqcGJrZGYyX2htYWMqIGlzIGF2YWlsYWJsZSB3aXRoIE9wZW5TU0wuCisgICAgICBUaGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIHVzZXMgYW4gaW5saW5lIHZlcnNpb24gb2YgOm1vZDpgaG1hY2AuIEl0IGlzCisgICAgICBhYm91dCB0aHJlZSB0aW1lcyBzbG93ZXIgYW5kIGRvZXNuJ3QgcmVsZWFzZSB0aGUgR0lMLgorCisKIC4uIHNlZWFsc286OgogCiAgICBNb2R1bGUgOm1vZDpgaG1hY2AKQEAgLTE3MywzICsyMzIsNSBAQAogICAgICAgV2lraXBlZGlhIGFydGljbGUgd2l0aCBpbmZvcm1hdGlvbiBvbiB3aGljaCBhbGdvcml0aG1zIGhhdmUga25vd24gaXNzdWVzIGFuZAogICAgICAgd2hhdCB0aGF0IG1lYW5zIHJlZ2FyZGluZyB0aGVpciB1c2UuCiAKKyAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI4OTgudHh0CisgICAgICBQS0NTICM1OiBQYXNzd29yZC1CYXNlZCBDcnlwdG9ncmFwaHkgU3BlY2lmaWNhdGlvbiBWZXJzaW9uIDIuMApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaG1hYy5yc3QgYi9Eb2MvbGlicmFyeS9obWFjLnJzdAppbmRleCA5NTc1NjkzLi4xZDkyOGVhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9obWFjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9obWFjLnJzdApAQCAtMTYsMjAgKzE2LDI2IEBACiAKIC4uIGZ1bmN0aW9uOjogbmV3KGtleSwgbXNnPU5vbmUsIGRpZ2VzdG1vZD1Ob25lKQogCi0gICBSZXR1cm4gYSBuZXcgaG1hYyBvYmplY3QuICAqa2V5KiBpcyBhIGJ5dGVzIG9iamVjdCBnaXZpbmcgdGhlIHNlY3JldCBrZXkuICBJZgotICAgKm1zZyogaXMgcHJlc2VudCwgdGhlIG1ldGhvZCBjYWxsIGBgdXBkYXRlKG1zZylgYCBpcyBtYWRlLiAgKmRpZ2VzdG1vZCogaXMKLSAgIHRoZSBkaWdlc3QgY29uc3RydWN0b3Igb3IgbW9kdWxlIGZvciB0aGUgSE1BQyBvYmplY3QgdG8gdXNlLiBJdCBkZWZhdWx0cyB0bwotICAgdGhlIDpkYXRhOmBoYXNobGliLm1kNWAgY29uc3RydWN0b3IuCisgICBSZXR1cm4gYSBuZXcgaG1hYyBvYmplY3QuICAqa2V5KiBpcyBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QgZ2l2aW5nIHRoZQorICAgc2VjcmV0IGtleS4gIElmICptc2cqIGlzIHByZXNlbnQsIHRoZSBtZXRob2QgY2FsbCBgYHVwZGF0ZShtc2cpYGAgaXMgbWFkZS4KKyAgICpkaWdlc3Rtb2QqIGlzIHRoZSBkaWdlc3QgY29uc3RydWN0b3Igb3IgbW9kdWxlIGZvciB0aGUgSE1BQyBvYmplY3QgdG8gdXNlLgorICAgSXQgZGVmYXVsdHMgdG8gdGhlIDpkYXRhOmBoYXNobGliLm1kNWAgY29uc3RydWN0b3IuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBQYXJhbWV0ZXIgKmtleSogY2FuIGJlIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdC4gUGFyYW1ldGVyICptc2cqIGNhbgorICAgICAgYmUgb2YgYW55IHR5cGUgc3VwcG9ydGVkIGJ5IDptb2Q6YGhhc2hsaWJgLgogCiBBbiBITUFDIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAuLiBtZXRob2Q6OiBITUFDLnVwZGF0ZShtc2cpCiAKLSAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCB0aGUgYnl0ZXMgb2JqZWN0ICptc2cqLiAgUmVwZWF0ZWQgY2FsbHMgYXJlCi0gICBlcXVpdmFsZW50IHRvIGEgc2luZ2xlIGNhbGwgd2l0aCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGFyZ3VtZW50czoKKyAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCAqbXNnKi4gIFJlcGVhdGVkIGNhbGxzIGFyZSBlcXVpdmFsZW50IHRvIGEKKyAgIHNpbmdsZSBjYWxsIHdpdGggdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBhcmd1bWVudHM6CiAgICBgYG0udXBkYXRlKGEpOyBtLnVwZGF0ZShiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLnVwZGF0ZShhICsgYilgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFBhcmFtZXRlciAqbXNnKiBjYW4gYmUgb2YgYW55IHR5cGUgc3VwcG9ydGVkIGJ5IDptb2Q6YGhhc2hsaWJgLgorCiAKIC4uIG1ldGhvZDo6IEhNQUMuZGlnZXN0KCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CmluZGV4IDRkYWVlZWEuLjg5MmU2MmYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKQEAgLTI3LDcgKzI3LDcgQEAKIFRoZSBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAKLS4uIGNsYXNzOjogSFRUUENvbm5lY3Rpb24oaG9zdCwgcG9ydD1Ob25lWywgc3RyaWN0XVssIHRpbWVvdXRdLCBcCisuLiBjbGFzczo6IEhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZVssIHRpbWVvdXRdLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpCiAKICAgIEFuIDpjbGFzczpgSFRUUENvbm5lY3Rpb25gIGluc3RhbmNlIHJlcHJlc2VudHMgb25lIHRyYW5zYWN0aW9uIHdpdGggYW4gSFRUUApAQCAtNTEsMTMgKzUxLDEzIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgKnNvdXJjZV9hZGRyZXNzKiB3YXMgYWRkZWQuCiAKLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMiAzLjQKLSAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIgotICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgICpzdHJpY3QqIHBhcmFtZXRlciBpcyByZW1vdmVkLiBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBub3Qgc3VwcG9ydGVkLgogCiAKIC4uIGNsYXNzOjogSFRUUFNDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZSwga2V5X2ZpbGU9Tm9uZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9maWxlPU5vbmVbLCBzdHJpY3RdWywgdGltZW91dF0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfZmlsZT1Ob25lWywgdGltZW91dF0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUsICosIGNvbnRleHQ9Tm9uZSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9Tm9uZSkKIApAQCAtODksMTkgKzg5LDE5IEBACiAgICAgICBUaGlzIGNsYXNzIG5vdyBzdXBwb3J0cyBIVFRQUyB2aXJ0dWFsIGhvc3RzIGlmIHBvc3NpYmxlICh0aGF0IGlzLAogICAgICAgaWYgOmRhdGE6YHNzbC5IQVNfU05JYCBpcyB0cnVlKS4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgcmVtb3ZlZC4gSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiIGFyZQorICAgICAgbm90IHN1cHBvcnRlZCBhbnltb3JlLgogCiAKLS4uIGNsYXNzOjogSFRUUFJlc3BvbnNlKHNvY2ssIGRlYnVnbGV2ZWw9MFssIHN0cmljdF0sIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSkKKy4uIGNsYXNzOjogSFRUUFJlc3BvbnNlKHNvY2ssIGRlYnVnbGV2ZWw9MCwgbWV0aG9kPU5vbmUsIHVybD1Ob25lKQogCiAgICBDbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHJldHVybmVkIHVwb24gc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAgTm90CiAgICBpbnN0YW50aWF0ZWQgZGlyZWN0bHkgYnkgdXNlci4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgcmVtb3ZlZC4gSFRUUCAwLjkgc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiIGFyZQorICAgICAgbm90IHN1cHBvcnRlZCBhbnltb3JlLgogCiAKIFRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGFzIGFwcHJvcHJpYXRlOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CmluZGV4IDVhZWI3MTkuLjExM2FjNDQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKQEAgLTE3MCwxMiArMTcwLDE5IEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCi0gICAuLiBtZXRob2Q6OiBzZW5kX2Vycm9yKGNvZGUsIG1lc3NhZ2U9Tm9uZSkKKyAgIC4uIG1ldGhvZDo6IHNlbmRfZXJyb3IoY29kZSwgbWVzc2FnZT1Ob25lLCBleHBsYWluPU5vbmUpCiAKICAgICAgIFNlbmRzIGFuZCBsb2dzIGEgY29tcGxldGUgZXJyb3IgcmVwbHkgdG8gdGhlIGNsaWVudC4gVGhlIG51bWVyaWMgKmNvZGUqCi0gICAgICBzcGVjaWZpZXMgdGhlIEhUVFAgZXJyb3IgY29kZSwgd2l0aCAqbWVzc2FnZSogYXMgb3B0aW9uYWwsIG1vcmUgc3BlY2lmaWMgdGV4dC4gQQotICAgICAgY29tcGxldGUgc2V0IG9mIGhlYWRlcnMgaXMgc2VudCwgZm9sbG93ZWQgYnkgdGV4dCBjb21wb3NlZCB1c2luZyB0aGUKLSAgICAgIDphdHRyOmBlcnJvcl9tZXNzYWdlX2Zvcm1hdGAgY2xhc3MgdmFyaWFibGUuCisgICAgICBzcGVjaWZpZXMgdGhlIEhUVFAgZXJyb3IgY29kZSwgd2l0aCAqbWVzc2FnZSogYXMgb3B0aW9uYWwsIG1vcmUgc3BlY2lmaWMKKyAgICAgIHRleHQsIHVzdWFsbHkgcmVmZXJyaW5nIHRvIHNob3J0IG1lc3NhZ2UgcmVzcG9uc2UuICBUaGUgKmV4cGxhaW4qCisgICAgICBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBzZW5kIGEgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIGluCisgICAgICByZXNwb25zZSBjb250ZW50IGJvZHkuICBBIGNvbXBsZXRlIHNldCBvZiBoZWFkZXJzIGlzIHNlbnQsIGZvbGxvd2VkIGJ5CisgICAgICB0ZXh0IGNvbXBvc2VkIHVzaW5nIHRoZSA6YXR0cjpgZXJyb3JfbWVzc2FnZV9mb3JtYXRgIGNsYXNzIHZhcmlhYmxlLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgVGhlIGVycm9yIHJlc3BvbnNlIGluY2x1ZGVzIGEgQ29udGVudC1MZW5ndGggaGVhZGVyLgorICAgICAgICAgQWRkZWQgdGhlICpleHBsYWluKiBhcmd1bWVudC4KKwogCiAgICAuLiBtZXRob2Q6OiBzZW5kX3Jlc3BvbnNlKGNvZGUsIG1lc3NhZ2U9Tm9uZSkKIApAQCAtMzYxLDYgKzM2OCwxNSBAQAogCiAgICAgICAgIHB5dGhvbiAtbSBodHRwLnNlcnZlciA4MDAwCiAKK0J5IGRlZmF1bHQsIHNlcnZlciBiaW5kcyBpdHNlbGYgdG8gYWxsIGludGVyZmFjZXMuIFRvIHJlc3RyaWN0IGl0IHRvIGJpbmQgdG8gYQorcGFydGljdWxhciBpbnRlcmZhY2Ugb25seSwgYGAtLWJpbmQgQUREUkVTU2BgIGFyZ3VtZW50IGNhbiBiZSB1c2VkLiBGb3IgZS5nLCB0bworcmVzdHJpY3QgdGhlIHNlcnZlciB0byBiaW5kIG9ubHkgdG8gbG9jYWxob3N0LiA6OgorCisgICAgICAgIHB5dGhvbiAtbSBodHRwLnNlcnZlciA4MDAwIC0tYmluZCAxMjcuMC4wLjEKKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgYGAtLWJpbmRgYCBhcmd1bWVudCB3YXMgaW50cm9kdWNlZC4KKwogCiAuLiBjbGFzczo6IENHSUhUVFBSZXF1ZXN0SGFuZGxlcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pZGxlLnJzdCBiL0RvYy9saWJyYXJ5L2lkbGUucnN0CmluZGV4IDM2ZDc4YjAuLjI3MThjZWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lkbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lkbGUucnN0CkBAIC0xNiw3MCArMTYsODIgQEAKIAogKiBjb2RlZCBpbiAxMDAlIHB1cmUgUHl0aG9uLCB1c2luZyB0aGUgOm1vZDpgdGtpbnRlcmAgR1VJIHRvb2xraXQKIAotKiBjcm9zcy1wbGF0Zm9ybTogd29ya3Mgb24gV2luZG93cyBhbmQgVW5peAorKiBjcm9zcy1wbGF0Zm9ybTogd29ya3Mgb24gV2luZG93cywgVW5peCwgYW5kIE1hYyBPUyBYCiAKLSogbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcgYW5kIG1hbnkgb3RoZXIKLSAgZmVhdHVyZXMsIGUuZy4gc21hcnQgaW5kZW50IGFuZCBjYWxsIHRpcHMKKyogbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsCisgIHNtYXJ0IGluZGVudCwgY2FsbCB0aXBzLCBhbmQgbWFueSBvdGhlciBmZWF0dXJlcwogCiAqIFB5dGhvbiBzaGVsbCB3aW5kb3cgKGEuay5hLiBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikKIAotKiBkZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgIGFuZCBzdGVwKQorKiBkZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgYW5kIHN0ZXApCiAKIAogTWVudXMKIC0tLS0tCiAKK0lETEUgaGFzIHR3byB3aW5kb3cgdHlwZXMsIHRoZSBTaGVsbCB3aW5kb3cgYW5kIHRoZSBFZGl0b3Igd2luZG93LiBJdCBpcworcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBlZGl0b3Igd2luZG93cyBzaW11bHRhbmVvdXNseS4gSURMRSdzCittZW51cyBkeW5hbWljYWxseSBjaGFuZ2UgYmFzZWQgb24gd2hpY2ggd2luZG93IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gRWFjaCBtZW51Citkb2N1bWVudGVkIGJlbG93IGluZGljYXRlcyB3aGljaCB3aW5kb3cgdHlwZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIENsaWNrIG9uCit0aGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgdG8gInRlYXIgaXQgb2ZmIjogYSBzZXBhcmF0ZSB3aW5kb3cKK2NvbnRhaW5pbmcgdGhlIG1lbnUgaXMgY3JlYXRlZCAoZm9yIFVuaXggYW5kIFdpbmRvd3Mgb25seSkuCiAKLUZpbGUgbWVudQotXl5eXl5eXl5eCitGaWxlIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIE5ldyBmaWxlCi0gICBjcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdworICAgQ3JlYXRlIGEgbmV3IGZpbGUgZWRpdGluZyB3aW5kb3cKIAogT3Blbi4uLgotICAgb3BlbiBhbiBleGlzdGluZyBmaWxlCisgICBPcGVuIGFuIGV4aXN0aW5nIGZpbGUKIAogT3BlbiBtb2R1bGUuLi4KLSAgIG9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKyAgIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKworUmVjZW50IEZpbGVzCisgICBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKIAogQ2xhc3MgYnJvd3NlcgotICAgc2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQorICAgU2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQogCiBQYXRoIGJyb3dzZXIKLSAgIHNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMgYW5kIG1ldGhvZHMKKyAgIFNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMgYW5kIG1ldGhvZHMKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBDbGFzcyBicm93c2VyCiAgICBzaW5nbGU6IFBhdGggYnJvd3NlcgogCiBTYXZlCi0gICBzYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQgd2luZG93cyBoYXZlIGEgXCogYmVmb3JlIGFuZAotICAgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKKyAgIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZCB3aW5kb3dzIGhhdmUgYQorICAgXCogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQogCiBTYXZlIEFzLi4uCi0gICBzYXZlIGN1cnJlbnQgd2luZG93IHRvIG5ldyBmaWxlLCB3aGljaCBiZWNvbWVzIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gbmV3IGZpbGUsIHdoaWNoIGJlY29tZXMgdGhlIGFzc29jaWF0ZWQgZmlsZQogCiBTYXZlIENvcHkgQXMuLi4KLSAgIHNhdmUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQorCitQcmludCBXaW5kb3cKKyAgIFByaW50IHRoZSBjdXJyZW50IHdpbmRvdwogCiBDbG9zZQotICAgY2xvc2UgY3VycmVudCB3aW5kb3cgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQorICAgQ2xvc2UgY3VycmVudCB3aW5kb3cgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCiBFeGl0Ci0gICBjbG9zZSBhbGwgd2luZG93cyBhbmQgcXVpdCBJRExFIChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgIENsb3NlIGFsbCB3aW5kb3dzIGFuZCBxdWl0IElETEUgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCiAKLUVkaXQgbWVudQotXl5eXl5eXl5eCitFZGl0IG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIFVuZG8KLSAgIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cgKG1heCAxMDAwIGNoYW5nZXMpCisgICBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93IChhIG1heGltdW0gb2YgMTAwMCBjaGFuZ2VzIG1heSBiZSB1bmRvbmUpCiAKIFJlZG8KICAgIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93CiAKIEN1dAotICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHNlbGVjdGlvbgorICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KIAogQ29weQogICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKQEAgLTEwOCwxMSArMTIwLDMwIEBACiBHbyB0byBsaW5lCiAgICBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCiAKK0V4cGFuZCB3b3JkCisgICBFeHBhbmQgdGhlIHdvcmQgeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYW5vdGhlciB3b3JkIGluIHRoZSBzYW1lIGJ1ZmZlcjsKKyAgIHJlcGVhdCB0byBnZXQgYSBkaWZmZXJlbnQgZXhwYW5zaW9uCisKK1Nob3cgY2FsbCB0aXAKKyAgIEFmdGVyIGFuIHVuY2xvc2VkIHBhcmVudGhlc2lzIGZvciBhIGZ1bmN0aW9uLCBvcGVuIGEgc21hbGwgd2luZG93IHdpdGgKKyAgIGZ1bmN0aW9uIHBhcmFtZXRlciBoaW50cworCitTaG93IHN1cnJvdW5kaW5nIHBhcmVucworICAgSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcworCitTaG93IENvbXBsZXRpb25zCisgICBPcGVuIGEgc2Nyb2xsIHdpbmRvdyBhbGxvd2luZyBzZWxlY3Rpb24ga2V5d29yZHMgYW5kIGF0dHJpYnV0ZXMuIFNlZQorICAgQ29tcGxldGlvbnMgYmVsb3cuCisKKworRm9ybWF0IG1lbnUgKEVkaXRvciB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKIEluZGVudCByZWdpb24KLSAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IDQgc3BhY2VzCisgICBTaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCBieSB0aGUgaW5kZW50IHdpZHRoIChkZWZhdWx0IDQgc3BhY2VzKQogCiBEZWRlbnQgcmVnaW9uCi0gICBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IDQgc3BhY2VzCisgICBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IGJ5IHRoZSBpbmRlbnQgd2lkdGggKGRlZmF1bHQgNCBzcGFjZXMpCiAKIENvbW1lbnQgb3V0IHJlZ2lvbgogICAgSW5zZXJ0ICMjIGluIGZyb250IG9mIHNlbGVjdGVkIGxpbmVzCkBAIC0xMjEsNjcgKzE1MiwxMjEgQEAKICAgIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcwogCiBUYWJpZnkgcmVnaW9uCi0gICBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMKKyAgIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicy4gKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZworICAgNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLikKIAogVW50YWJpZnkgcmVnaW9uCi0gICBUdXJuICphbGwqIHRhYnMgaW50byB0aGUgcmlnaHQgbnVtYmVyIG9mIHNwYWNlcworICAgVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHNwYWNlcwogCi1FeHBhbmQgd29yZAotICAgRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdAotICAgdG8gZ2V0IGEgZGlmZmVyZW50IGV4cGFuc2lvbgorVG9nZ2xlIHRhYnMKKyAgIE9wZW4gYSBkaWFsb2cgdG8gc3dpdGNoIGJldHdlZW4gaW5kZW50aW5nIHdpdGggc3BhY2VzIGFuZCB0YWJzLgorCitOZXcgSW5kZW50IFdpZHRoCisgICBPcGVuIGEgZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGguIFRoZSBhY2NlcHRlZCBkZWZhdWx0IGJ5IHRoZSBQeXRob24KKyAgIGNvbW11bml0eSBpcyA0IHNwYWNlcy4KIAogRm9ybWF0IFBhcmFncmFwaAotICAgUmVmb3JtYXQgdGhlIGN1cnJlbnQgYmxhbmstbGluZS1zZXBhcmF0ZWQgcGFyYWdyYXBoCisgICBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZCBwYXJhZ3JhcGguIEFsbCBsaW5lcyBpbiB0aGUKKyAgIHBhcmFncmFwaCB3aWxsIGJlIGZvcm1hdHRlZCB0byBsZXNzIHRoYW4gODAgY29sdW1ucy4KIAotSW1wb3J0IG1vZHVsZQotICAgSW1wb3J0IG9yIHJlbG9hZCB0aGUgY3VycmVudCBtb2R1bGUKLQotUnVuIHNjcmlwdAotICAgRXhlY3V0ZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKK1N0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyAgIFJlbW92ZXMgYW55IHNwYWNlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGFzdCBub24tc3BhY2UgY2hhcmFjdGVyCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogSW1wb3J0IG1vZHVsZQogICAgc2luZ2xlOiBSdW4gc2NyaXB0CiAKIAotV2luZG93cyBtZW51Ci1eXl5eXl5eXl5eXl4KK1J1biBtZW51IChFZGl0b3Igd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1ab29tIEhlaWdodAotICAgdG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDI0eDgwKSBhbmQgbWF4aW11bSBoZWlnaHQuCitQeXRob24gU2hlbGwKKyAgIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdwogCi1UaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7IHNlbGVjdCBvbmUgdG8gYnJpbmcKLWl0IHRvIHRoZSBmb3JlZ3JvdW5kIChkZWljb25pZnlpbmcgaXQgaWYgbmVjZXNzYXJ5KS4KK0NoZWNrIG1vZHVsZQorICAgQ2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgbW9kdWxlIGN1cnJlbnRseSBvcGVuIGluIHRoZSBFZGl0b3Igd2luZG93LiBJZiB0aGUKKyAgIG1vZHVsZSBoYXMgbm90IGJlZW4gc2F2ZWQgSURMRSB3aWxsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZSBjb2RlLgogCitSdW4gbW9kdWxlCisgICBSZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUgZW52aXJvbm1lbnQsIHRoZW4gZXhlY3V0ZSB0aGUgY3VycmVudGx5CisgICBvcGVuIG1vZHVsZS4gIElmIHRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIHNhdmVkIElETEUgd2lsbCBwcm9tcHQgdGhlIHVzZXIKKyAgIHRvIHNhdmUgdGhlIGNvZGUuCiAKLURlYnVnIG1lbnUKLV5eXl5eXl5eXl4KK1NoZWxsIG1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLSogaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgb25seQorVmlldyBMYXN0IFJlc3RhcnQKKyAgU2Nyb2xsIHRoZSBzaGVsbCB3aW5kb3cgdG8gdGhlIGxhc3QgU2hlbGwgcmVzdGFydAorCitSZXN0YXJ0IFNoZWxsCisgIFJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZSBlbnZpcm9ubWVudAorCitEZWJ1ZyBtZW51IChTaGVsbCB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBHbyB0byBmaWxlL2xpbmUKICAgIExvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyLCBvcGVuIHRoZSBmaWxlLAogICAgYW5kIHNob3cgdGhlIGxpbmUuICBVc2VmdWwgdG8gdmlldyB0aGUgc291cmNlIGxpbmVzIHJlZmVyZW5jZWQgaW4gYW4KLSAgIGV4Y2VwdGlvbiB0cmFjZWJhY2suCisgICBleGNlcHRpb24gdHJhY2ViYWNrLiBBdmFpbGFibGUgaW4gdGhlIGNvbnRleHQgbWVudSBvZiB0aGUgU2hlbGwgd2luZG93LgogCi1EZWJ1Z2dlcgotICAgUnVuIGNvbW1hbmRzIGluIHRoZSBzaGVsbCB1bmRlciB0aGUgZGVidWdnZXIuCitEZWJ1Z2dlciAodG9nZ2xlKQorICAgVGhpcyBmZWF0dXJlIGlzIG5vdCBjb21wbGV0ZSBhbmQgY29uc2lkZXJlZCBleHBlcmltZW50YWwuIFJ1biBjb21tYW5kcyBpbgorICAgdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlcgogCiBTdGFjayB2aWV3ZXIKLSAgIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24uCisgICBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uCiAKIEF1dG8tb3BlbiBTdGFjayBWaWV3ZXIKLSAgIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjay4KKyAgIFRvZ2dsZSBhdXRvbWF0aWNhbGx5IG9wZW5pbmcgdGhlIHN0YWNrIHZpZXdlciBvbiB1bmhhbmRsZWQgZXhjZXB0aW9uCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogc3RhY2sgdmlld2VyCiAgICBzaW5nbGU6IGRlYnVnZ2VyCiAKK09wdGlvbnMgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotRWRpdCBjb250ZXh0IG1lbnUKLV5eXl5eXl5eXl5eXl5eXl5eCitDb25maWd1cmUgSURMRQorICAgT3BlbiBhIGNvbmZpZ3VyYXRpb24gZGlhbG9nLiAgRm9udHMsIGluZGVudGF0aW9uLCBrZXliaW5kaW5ncywgYW5kIGNvbG9yCisgICB0aGVtZXMgbWF5IGJlIGFsdGVyZWQuICBTdGFydHVwIFByZWZlcmVuY2VzIG1heSBiZSBzZXQsIGFuZCBhZGRpdGlvbmFsCisgICBoZWxwIHNvdXJjZXMgY2FuIGJlIHNwZWNpZmllZC4KIAotKiBSaWdodC1jbGljayBpbiBFZGl0IHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQorQ29kZSBDb250ZXh0ICh0b2dnbGUpKEVkaXRvciBXaW5kb3cgb25seSkKKyAgIE9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93IHdoaWNoIHNob3dzIHRoZSBibG9jayBjb250ZXh0CisgICBvZiB0aGUgc2VjdGlvbiBvZiBjb2RlIHdoaWNoIGlzIHNjcm9sbGluZyBvZmYgdGhlIHRvcCBvZiB0aGUgd2luZG93LgorCitXaW5kb3dzIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1pvb20gSGVpZ2h0CisgICBUb2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBub3JtYWwgc2l6ZSAoNDB4ODAgaW5pdGlhbCBzZXR0aW5nKSBhbmQgbWF4aW11bQorICAgaGVpZ2h0LiBUaGUgaW5pdGlhbCBzaXplIGlzIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cgdW5kZXIgdGhlIGdlbmVyYWwKKyAgIHRhYi4KKworVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOyBzZWxlY3Qgb25lIHRvIGJyaW5nCitpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmIG5lY2Vzc2FyeSkuCisKK0hlbHAgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworQWJvdXQgSURMRQorICAgVmVyc2lvbiwgY29weXJpZ2h0LCBsaWNlbnNlLCBjcmVkaXRzCisKK0lETEUgSGVscAorICAgRGlzcGxheSBhIGhlbHAgZmlsZSBmb3IgSURMRSBkZXRhaWxpbmcgdGhlIG1lbnUgb3B0aW9ucywgYmFzaWMgZWRpdGluZyBhbmQKKyAgIG5hdmlnYXRpb24sIGFuZCBvdGhlciB0aXBzLgorCitQeXRob24gRG9jcworICAgQWNjZXNzIGxvY2FsIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpZiBpbnN0YWxsZWQuIE9yIHdpbGwgc3RhcnQgYSB3ZWIgYnJvd3NlcgorICAgYW5kIG9wZW4gZG9jcy5weXRob24ub3JnIHNob3dpbmcgdGhlIGxhdGVzdCBQeXRob24gZG9jdW1lbnRhdGlvbi4KKworQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUgd2l0aCB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nIHVuZGVyCit0aGUgR2VuZXJhbCB0YWIuCisKK0VkaXRvciBXaW5kb3cgY29udGV4dCBtZW51CiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisqIFJpZ2h0LWNsaWNrIGluIEVkaXRvciB3aW5kb3cgKENvbnRyb2wtY2xpY2sgb24gT1MgWCkKIAogQ3V0CiAgICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgc2VsZWN0aW9uCkBAIC0yMDcsOCArMjkyLDggQEAKICAgIHNpbmdsZTogYnJlYWtwb2ludHMKIAogCi1TaGVsbCBjb250ZXh0IG1lbnUKLV5eXl5eXl5eXl5eXl5eXl5eXgorU2hlbGwgV2luZG93IGNvbnRleHQgbWVudQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiAqIFJpZ2h0LWNsaWNrIGluIFB5dGhvbiBTaGVsbCB3aW5kb3cgKENvbnRyb2wtY2xpY2sgb24gT1MgWCkKIApAQCAtMjI1LDE5ICszMTAsNDQgQEAKICAgIFNhbWUgYXMgaW4gRGVidWcgbWVudS4KIAogCi1CYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICogOmtiZDpgQmFja3NwYWNlYCBkZWxldGVzIHRvIHRoZSBsZWZ0OyA6a2JkOmBEZWxgIGRlbGV0ZXMgdG8gdGhlIHJpZ2h0CiAKKyogOmtiZDpgQy1CYWNrc3BhY2VgIGRlbGV0ZSB3b3JkIGxlZnQ7IDprYmQ6YEMtRGVsYCBkZWxldGUgd29yZCB0byB0aGUgcmlnaHQKKwogKiBBcnJvdyBrZXlzIGFuZCA6a2JkOmBQYWdlIFVwYC86a2JkOmBQYWdlIERvd25gIHRvIG1vdmUgYXJvdW5kCiAKKyogOmtiZDpgQy1MZWZ0QXJyb3dgIGFuZCA6a2JkOmBDLVJpZ2h0QXJyb3dgIG1vdmVzIGJ5IHdvcmRzCisKICogOmtiZDpgSG9tZWAvOmtiZDpgRW5kYCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZQogCiAqIDprYmQ6YEMtSG9tZWAvOmtiZDpgQy1FbmRgIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlCiAKLSogU29tZSA6cHJvZ3JhbTpgRW1hY3NgIGJpbmRpbmdzIG1heSBhbHNvIHdvcmssIGluY2x1ZGluZyA6a2JkOmBDLUJgLAotICA6a2JkOmBDLVBgLCA6a2JkOmBDLUFgLCA6a2JkOmBDLUVgLCA6a2JkOmBDLURgLCA6a2JkOmBDLUxgCisqIFNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6CisKKyAgICogOmtiZDpgQy1hYCBiZWdpbm5pbmcgb2YgbGluZQorCisgICAqIDprYmQ6YEMtZWAgZW5kIG9mIGxpbmUKKworICAgKiA6a2JkOmBDLWtgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKKworICAgKiA6a2JkOmBDLWxgIGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKKworICAgKiA6a2JkOmBDLWJgIGdvIGJhY2t3YXJkcyBvbmUgY2hhcmFjdGVyIHdpdGhvdXQgZGVsZXRpbmcgKHVzdWFsbHkgeW91IGNhbgorICAgICBhbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcykKKworICAgKiA6a2JkOmBDLWZgIGdvIGZvcndhcmQgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KKyAgICAgYWxzbyB1c2UgdGhlIGN1cnNvciBrZXkgZm9yIHRoaXMpCisKKyAgICogOmtiZDpgQy1wYCBnbyB1cCBvbmUgbGluZSAodXN1YWxseSB5b3UgY2FuIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvcgorICAgICB0aGlzKQorCisgICAqIDprYmQ6YEMtZGAgZGVsZXRlIG5leHQgY2hhcmFjdGVyCisKK1N0YW5kYXJkIGtleWJpbmRpbmdzIChsaWtlIDprYmQ6YEMtY2AgdG8gY29weSBhbmQgOmtiZDpgQy12YCB0byBwYXN0ZSkKK21heSB3b3JrLiAgS2V5YmluZGluZ3MgYXJlIHNlbGVjdGVkIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cuCiAKIAogQXV0b21hdGljIGluZGVudGF0aW9uCkBAIC0yNDYsMjcgKzM1Niw3NiBAQAogQWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcyAoaW4gdGhlCiBQeXRob24gU2hlbGwgd2luZG93IGJ5IG9uZSB0YWIpLiAgQWZ0ZXIgY2VydGFpbiBrZXl3b3JkcyAoYnJlYWssIHJldHVybiBldGMuKQogdGhlIG5leHQgbGluZSBpcyBkZWRlbnRlZC4gIEluIGxlYWRpbmcgaW5kZW50YXRpb24sIDprYmQ6YEJhY2tzcGFjZWAgZGVsZXRlcyB1cAotdG8gNCBzcGFjZXMgaWYgdGhleSBhcmUgdGhlcmUuIDprYmQ6YFRhYmAgaW5zZXJ0cyAxLTQgc3BhY2VzIChpbiB0aGUgUHl0aG9uCi1TaGVsbCB3aW5kb3cgb25lIHRhYikuIFNlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdAotbWVudS4KK3RvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiA6a2JkOmBUYWJgIGluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uCitTaGVsbCB3aW5kb3cgb25lIHRhYiksIG51bWJlciBkZXBlbmRzIG9uIEluZGVudCB3aWR0aC4gQ3VycmVudGx5IHRhYnMKK2FyZSByZXN0cmljdGVkIHRvIGZvdXIgc3BhY2VzIGR1ZSB0byBUY2wvVGsgbGltaXRhdGlvbnMuCiAKK1NlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdCBtZW51LgorCitDb21wbGV0aW9ucworXl5eXl5eXl5eXl4KKworQ29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mIGNsYXNzZXMsCitib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkIGZvcgorZmlsZW5hbWVzLgorCitUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkgKGRlZmF1bHQgaXMKK3R3byBzZWNvbmRzKSBhZnRlciBhICcuJyBvciAoaW4gYSBzdHJpbmcpIGFuIG9zLnNlcCBpcyB0eXBlZC4gSWYgYWZ0ZXIgb25lCitvZiB0aG9zZSBjaGFyYWN0ZXJzIChwbHVzIHplcm8gb3IgbW9yZSBvdGhlciBjaGFyYWN0ZXJzKSBhIHRhYiBpcyB0eXBlZAordGhlIEFDVyB3aWxsIG9wZW4gaW1tZWRpYXRlbHkgaWYgYSBwb3NzaWJsZSBjb250aW51YXRpb24gaXMgZm91bmQuCisKK0lmIHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIGNvbXBsZXRpb24gZm9yIHRoZSBjaGFyYWN0ZXJzIGVudGVyZWQsIGEKKzprYmQ6YFRhYmAgd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLgorCisnU2hvdyBDb21wbGV0aW9ucycgd2lsbCBmb3JjZSBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LCBieSBkZWZhdWx0IHRoZQorOmtiZDpgQy1zcGFjZWAgd2lsbCBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LiBJbiBhbiBlbXB0eQorc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiBPbiBhCitibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAorY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gSWYgc29tZQorY2hhcmFjdGVycyBoYXZlIGJlZW4gZW50ZXJlZCwgdGhlIEFDVyB3aWxsIGF0dGVtcHQgdG8gYmUgbW9yZSBzcGVjaWZpYy4KKworSWYgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQorZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuICBFbnRlcmluZyBhIDprYmQ6YHRhYmAgd2lsbAorY2F1c2UgdGhlIGxvbmdlc3Qgbm9uLWFtYmlndW91cyBtYXRjaCB0byBiZSBlbnRlcmVkIGluIHRoZSBFZGl0b3Igd2luZG93IG9yCitTaGVsbC4gIFR3byA6a2JkOmB0YWJgIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCit3aWxsIHJldHVybiBvciBhIGRvdWJsZSBjbGljay4gIEN1cnNvciBrZXlzLCBQYWdlIFVwL0Rvd24sIG1vdXNlIHNlbGVjdGlvbiwKK2FuZCB0aGUgc2Nyb2xsIHdoZWVsIGFsbCBvcGVyYXRlIG9uIHRoZSBBQ1cuCisKKyJIaWRkZW4iIGF0dHJpYnV0ZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHR5cGluZyB0aGUgYmVnaW5uaW5nIG9mIGhpZGRlbgorbmFtZSBhZnRlciBhICcuJywgZS5nLiAnXycuIFRoaXMgYWxsb3dzIGFjY2VzcyB0byBtb2R1bGVzIHdpdGgKK2BgX19hbGxfX2BgIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgorCitDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQorCitDb21wbGV0aW9ucyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gdGhvc2UgaW4gdGhlIG5hbWVzcGFjZXMuIE5hbWVzIGluCithbiBFZGl0b3Igd2luZG93IHdoaWNoIGFyZSBub3QgdmlhIGBgX19tYWluX19gYCBhbmQgOmRhdGE6YHN5cy5tb2R1bGVzYCB3aWxsCitub3QgYmUgZm91bmQuICBSdW4gdGhlIG1vZHVsZSBvbmNlIHdpdGggeW91ciBpbXBvcnRzIHRvIGNvcnJlY3QgdGhpcyBzaXR1YXRpb24uCitOb3RlIHRoYXQgSURMRSBpdHNlbGYgcGxhY2VzIHF1aXRlIGEgZmV3IG1vZHVsZXMgaW4gc3lzLm1vZHVsZXMsIHNvCittdWNoIGNhbiBiZSBmb3VuZCBieSBkZWZhdWx0LCBlLmcuIHRoZSByZSBtb2R1bGUuCisKK0lmIHlvdSBkb24ndCBsaWtlIHRoZSBBQ1cgcG9wcGluZyB1cCB1bmJpZGRlbiwgc2ltcGx5IG1ha2UgdGhlIGRlbGF5Citsb25nZXIgb3IgZGlzYWJsZSB0aGUgZXh0ZW5zaW9uLiAgT3IgYW5vdGhlciBvcHRpb24gaXMgdGhlIGRlbGF5IGNvdWxkCitiZSBzZXQgdG8gemVyby4gQW5vdGhlciBhbHRlcm5hdGl2ZSB0byBwcmV2ZW50aW5nIEFDVyBwb3B1cHMgaXMgdG8KK2Rpc2FibGUgdGhlIGNhbGwgdGlwcyBleHRlbnNpb24uCiAKIFB5dGhvbiBTaGVsbCB3aW5kb3cKIF5eXl5eXl5eXl5eXl5eXl5eXl4KIAotKiA6a2JkOmBDLUNgIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQKKyogOmtiZDpgQy1jYCBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kCiAKLSogOmtiZDpgQy1EYCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCBhIGBgPj4+YGAgcHJvbXB0CisqIDprYmQ6YEMtZGAgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgYSBgYD4+PmBgIHByb21wdAorICAodGhpcyBpcyA6a2JkOmBDLXpgIG9uIFdpbmRvd3MpLgogCi0qIDprYmQ6YEFsdC1wYCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkCisqIDprYmQ6YEFsdC0vYCAoRXhwYW5kIHdvcmQpIGlzIGFsc28gdXNlZnVsIHRvIHJlZHVjZSB0eXBpbmcKIAotKiA6a2JkOmBBbHQtbmAgcmV0cmlldmVzIG5leHQKKyAgQ29tbWFuZCBoaXN0b3J5CiAKLSogOmtiZDpgUmV0dXJuYCB3aGlsZSBvbiBhbnkgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kCisgICogOmtiZDpgQWx0LXBgIHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuIE9uCisgICAgT1MgWCB1c2UgOmtiZDpgQy1wYC4KIAotKiA6a2JkOmBBbHQtL2AgKEV4cGFuZCB3b3JkKSBpcyBhbHNvIHVzZWZ1bCBoZXJlCisgICogOmtiZDpgQWx0LW5gIHJldHJpZXZlcyBuZXh0LiBPbiBPUyBYIHVzZSA6a2JkOmBDLW5gLgogCi0uLiBpbmRleDo6IHNpbmdsZTogaW5kZW50YXRpb24KKyAgKiA6a2JkOmBSZXR1cm5gIHdoaWxlIG9uIGFueSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQKIAogCiBTeW50YXggY29sb3JzCkBAIC0zMDgsMTcgKzQ2NywxNyBAQAogCiBVcG9uIHN0YXJ0dXAgd2l0aCB0aGUgYGAtc2BgIG9wdGlvbiwgSURMRSB3aWxsIGV4ZWN1dGUgdGhlIGZpbGUgcmVmZXJlbmNlZCBieQogdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyA6ZW52dmFyOmBJRExFU1RBUlRVUGAgb3IgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAuCi1JZGxlIGZpcnN0IGNoZWNrcyBmb3IgYGBJRExFU1RBUlRVUGBgOyBpZiBgYElETEVTVEFSVFVQYGAgaXMgcHJlc2VudCB0aGUgZmlsZQotcmVmZXJlbmNlZCBpcyBydW4uICBJZiBgYElETEVTVEFSVFVQYGAgaXMgbm90IHByZXNlbnQsIElkbGUgY2hlY2tzIGZvcgorSURMRSBmaXJzdCBjaGVja3MgZm9yIGBgSURMRVNUQVJUVVBgYDsgaWYgYGBJRExFU1RBUlRVUGBgIGlzIHByZXNlbnQgdGhlIGZpbGUKK3JlZmVyZW5jZWQgaXMgcnVuLiAgSWYgYGBJRExFU1RBUlRVUGBgIGlzIG5vdCBwcmVzZW50LCBJRExFIGNoZWNrcyBmb3IKIGBgUFlUSE9OU1RBUlRVUGBgLiAgRmlsZXMgcmVmZXJlbmNlZCBieSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCi1jb252ZW5pZW50IHBsYWNlcyB0byBzdG9yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmcmVxdWVudGx5IGZyb20gdGhlIElkbGUKK2NvbnZlbmllbnQgcGxhY2VzIHRvIHN0b3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHkgZnJvbSB0aGUgSURMRQogc2hlbGwsIG9yIGZvciBleGVjdXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgdG8gaW1wb3J0IGNvbW1vbiBtb2R1bGVzLgogCiBJbiBhZGRpdGlvbiwgYGBUa2BgIGFsc28gbG9hZHMgYSBzdGFydHVwIGZpbGUgaWYgaXQgaXMgcHJlc2VudC4gIE5vdGUgdGhhdCB0aGUKIFRrIGZpbGUgaXMgbG9hZGVkIHVuY29uZGl0aW9uYWxseS4gIFRoaXMgYWRkaXRpb25hbCBmaWxlIGlzIGBgLklkbGUucHlgYCBhbmQgaXMKIGxvb2tlZCBmb3IgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFN0YXRlbWVudHMgaW4gdGhpcyBmaWxlIHdpbGwgYmUKIGV4ZWN1dGVkIGluIHRoZSBUayBuYW1lc3BhY2UsIHNvIHRoaXMgZmlsZSBpcyBub3QgdXNlZnVsIGZvciBpbXBvcnRpbmcgZnVuY3Rpb25zCi10byBiZSB1c2VkIGZyb20gSWRsZSdzIFB5dGhvbiBzaGVsbC4KK3RvIGJlIHVzZWQgZnJvbSBJRExFJ3MgUHl0aG9uIHNoZWxsLgogCiAKIENvbW1hbmQgbGluZSB1c2FnZQpAQCAtMzQ5LDMgKzUwOCw0NSBAQAogICAgdGhlIGFyZ3VtZW50cyBhcmUgc3RpbGwgYXZhaWxhYmxlIGluIGBgc3lzLmFyZ3ZgYC4KIAogCitBZGRpdGlvbmFsIGhlbHAgc291cmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSURMRSBpbmNsdWRlcyBhIGhlbHAgbWVudSBlbnRyeSBjYWxsZWQgIlB5dGhvbiBEb2NzIiB0aGF0IHdpbGwgb3BlbiB0aGUKK2V4dGVuc2l2ZSBzb3VyY2VzIG9mIGhlbHAsIGluY2x1ZGluZyB0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCBkb2NzLnB5dGhvbi5vcmcuCitTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIGhlbHAgbWVudSBhdCBhbnkgdGltZSB1c2luZyB0aGUKK0NvbmZpZ3VyZSBJRExFIGRpYWxvZy4gU2VlIHRoZSBJRExFIGhlbHAgb3B0aW9uIGluIHRoZSBoZWxwIG1lbnUgb2YgSURMRSBmb3IKK21vcmUgaW5mb3JtYXRpb24uCisKKworT3RoZXIgcHJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb250IHByZWZlcmVuY2VzLCBoaWdobGlnaHRpbmcsIGtleXMsIGFuZCBnZW5lcmFsIHByZWZlcmVuY2VzIGNhbiBiZQorY2hhbmdlZCB2aWEgdGhlIENvbmZpZ3VyZSBJRExFIG1lbnUgb3B0aW9uLiAgQmUgc3VyZSB0byBub3RlIHRoYXQKK2tleXMgY2FuIGJlIHVzZXIgZGVmaW5lZCwgSURMRSBzaGlwcyB3aXRoIGZvdXIgYnVpbHQgaW4ga2V5IHNldHMuIEluCithZGRpdGlvbiBhIHVzZXIgY2FuIGNyZWF0ZSBhIGN1c3RvbSBrZXkgc2V0IGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cKK3VuZGVyIHRoZSBrZXlzIHRhYi4KKworRXh0ZW5zaW9ucworLS0tLS0tLS0tLQorCitJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFNlZSB0aGUgYmVnaW5uaW5nIG9mCitjb25maWctZXh0ZW5zaW9ucy5kZWYgaW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiAgVGhlCitkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKKworKiBGb3JtYXRQYXJhZ3JhcGgKKworKiBBdXRvRXhwYW5kCisKKyogWm9vbUhlaWdodAorCisqIFNjcmlwdEJpbmRpbmcKKworKiBDYWxsVGlwcworCisqIFBhcmVuTWF0Y2gKKworKiBBdXRvQ29tcGxldGUKKworKiBDb2RlQ29udGV4dAorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbXAucnN0IGIvRG9jL2xpYnJhcnkvaW1wLnJzdAppbmRleCBlYmRiZDRkLi42NjQ3YjllIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltcC5yc3QKQEAgLTEsNiArMSw5IEBACiA6bW9kOmBpbXBgIC0tLSBBY2Nlc3MgdGhlIDpyZWY6YGltcG9ydCA8aW1wb3J0c3lzdGVtPmAgaW50ZXJuYWxzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgIFRoZSA6bW9kOmBpbXBgIHBhY2thZ2UgaXMgcGVuZGluZyBkZXByZWNhdGlvbiBpbiBmYXZvciBvZiA6bW9kOmBpbXBvcnRsaWJgLgorCiAuLiBtb2R1bGU6OiBpbXAKICAgIDpzeW5vcHNpczogQWNjZXNzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW1wb3J0IHN0YXRlbWVudC4KIApAQCAtMTEsMTAgKzE0LDYgQEAKIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4gIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYW5kIGZ1bmN0aW9uczoKIAogCi0uLiBub3RlOjoKLSAgIE5ldyBwcm9ncmFtcyBzaG91bGQgdXNlIDptb2Q6YGltcG9ydGxpYmAgcmF0aGVyIHRoYW4gdGhpcyBtb2R1bGUuCi0KLQogLi4gZnVuY3Rpb246OiBnZXRfbWFnaWMoKQogCiAgICAuLiBpbmRleDo6IHBhaXI6IGZpbGU7IGJ5dGUtY29kZQpAQCAtMjIsNiArMjEsOSBAQAogICAgUmV0dXJuIHRoZSBtYWdpYyBzdHJpbmcgdmFsdWUgdXNlZCB0byByZWNvZ25pemUgYnl0ZS1jb21waWxlZCBjb2RlIGZpbGVzCiAgICAoOmZpbGU6YC5weWNgIGZpbGVzKS4gIChUaGlzIHZhbHVlIG1heSBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggUHl0aG9uIHZlcnNpb24uKQogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgVXNlIDphdHRyOmBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVJgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBnZXRfc3VmZml4ZXMoKQogCkBAIC0xMDEsOCArMTAzLDEwIEBACiAgICB1c2luZyBhIDprZXl3b3JkOmB0cnlgIC4uLiA6a2V5d29yZDpgZmluYWxseWAgc3RhdGVtZW50LgogCiAgICAuLiBkZXByZWNhdGVkOjogMy4zCi0gICAgICBVbm5lZWRlZCBhcyBsb2FkZXJzIHNob3VsZCBiZSB1c2VkIHRvIGxvYWQgbW9kdWxlcyBhbmQKLSAgICAgIDpmdW5jOmBmaW5kX21vZHVsZWAgaXMgZGVwcmVjYXRlZC4KKyAgICAgIElmIHByZXZpb3VzbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIDpmdW5jOmBpbXAuZmluZF9tb2R1bGVgIHRoZW4KKyAgICAgIGNhbGwgYGBsb2FkX21vZHVsZSgpYGAgb24gdGhlIHJldHVybmVkIGxvYWRlci4gSWYgeW91IHdpc2ggdG8gbG9hZCBhCisgICAgICBtb2R1bGUgZnJvbSBhIHNwZWNpZmljIGZpbGUsIHRoZW4gdXNlIG9uZSBvZiB0aGUgZmlsZS1iYXNlZCBsb2FkZXJzIGZvdW5kCisgICAgICBpbiA6bW9kOmBpbXBvcnRsaWIubWFjaGluZXJ5YC4KIAogCiAuLiBmdW5jdGlvbjo6IG5ld19tb2R1bGUobmFtZSkKQEAgLTExMCw2ICsxMTQsOSBAQAogICAgUmV0dXJuIGEgbmV3IGVtcHR5IG1vZHVsZSBvYmplY3QgY2FsbGVkICpuYW1lKi4gIFRoaXMgb2JqZWN0IGlzICpub3QqIGluc2VydGVkCiAgICBpbiBgYHN5cy5tb2R1bGVzYGAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6Y2xhc3M6YHR5cGVzLk1vZHVsZVR5cGVgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiByZWxvYWQobW9kdWxlKQogCkBAIC0xNzYsNiArMTgzLDkgQEAKICAgICAgIFJlbGllcyBvbiBib3RoIGBgX19uYW1lX19gYCBhbmQgYGBfX2xvYWRlcl9fYGAgYmVpbmcgZGVmaW5lZCBvbiB0aGUgbW9kdWxlCiAgICAgICBiZWluZyByZWxvYWRlZCBpbnN0ZWFkIG9mIGp1c3QgYGBfX25hbWVfX2BgLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi5yZWxvYWRgIGluc3RlYWQuCisKIAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNvbnZlbmllbmNlcyBmb3IgaGFuZGxpbmcgOnBlcDpgMzE0N2AgYnl0ZS1jb21waWxlZAogZmlsZSBwYXRocy4KQEAgLTIwMSw2ICsyMTEsOSBAQAogICAgICAgSWYgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIGBgTm9uZWBgLCB0aGVuCiAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpcyByYWlzZWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2VgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBzb3VyY2VfZnJvbV9jYWNoZShwYXRoKQogCkBAIC0yMTYsMTQgKzIyOSwxNyBAQAogICAgICAgUmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2hlbgogICAgICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X3RhZygpCiAKICAgIFJldHVybiB0aGUgOnBlcDpgMzE0N2AgbWFnaWMgdGFnIHN0cmluZyBtYXRjaGluZyB0aGlzIHZlcnNpb24gb2YgUHl0aG9uJ3MKICAgIG1hZ2ljIG51bWJlciwgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9tYWdpY2AuCiAKLSAgIC4uIG5vdGU6OgotICAgICAgWW91IG1heSB1c2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCiAgICAgICBpbiBQeXRob24gMy4zLgogCiAKQEAgLTI1MSw2ICsyNjcsOCBAQAogICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCiAgICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogYWNxdWlyZV9sb2NrKCkKIApAQCAtMjY5LDYgKzI4Nyw4IEBACiAgICB0aGUgbW9zdCBwYXJ0LiAgQSBnbG9iYWwgaW1wb3J0IGxvY2sgaXMga2VwdCBmb3Igc29tZSBjcml0aWNhbCB0YXNrcywKICAgIHN1Y2ggYXMgaW5pdGlhbGl6aW5nIHRoZSBwZXItbW9kdWxlIGxvY2tzLgogCisuLiBkZXByZWNhdGVkOjogMy40CisKIAogLi4gZnVuY3Rpb246OiByZWxlYXNlX2xvY2soKQogCkBAIC0yODAsNiArMzAwLDggQEAKICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAogICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKwogCiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3aXRoIGludGVnZXIgdmFsdWVzLCBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLCBhcmUgdXNlZAogdG8gaW5kaWNhdGUgdGhlIHNlYXJjaCByZXN1bHQgb2YgOmZ1bmM6YGZpbmRfbW9kdWxlYC4KQEAgLTM0NSw2ICszNjcsOSBAQAogICAgICAgYGBOb25lYGAgaXMgaW5zZXJ0ZWQgaW50byBgYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYGAgaW5zdGVhZCBvZiBhbgogICAgICAgaW5zdGFuY2Ugb2YgOmNsYXNzOmBOdWxsSW1wb3J0ZXJgLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBJbnNlcnQgYGBOb25lYGAgaW50byBgYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYGAgaW5zdGVhZC4KKwogCiAuLiBfZXhhbXBsZXMtaW1wOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0IGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdAppbmRleCBlZmQwMjdiLi41MGM5N2IwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKQEAgLTkwLDcgKzkwLDcgQEAKIAogICAgRmluZCB0aGUgbG9hZGVyIGZvciBhIG1vZHVsZSwgb3B0aW9uYWxseSB3aXRoaW4gdGhlIHNwZWNpZmllZCAqcGF0aCouIElmIHRoZQogICAgbW9kdWxlIGlzIGluIDphdHRyOmBzeXMubW9kdWxlc2AsIHRoZW4gYGBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fYGAgaXMKLSAgIHJldHVybmVkICh1bmxlc3MgdGhlIGxvYWRlciB3b3VsZCBiZSBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZQorICAgcmV0dXJuZWQgKHVubGVzcyB0aGUgbG9hZGVyIHdvdWxkIGJlIGBgTm9uZWBgIG9yIGlzIG5vdCBzZXQsIGluIHdoaWNoIGNhc2UKICAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCkuIE90aGVyd2lzZSBhIHNlYXJjaCB1c2luZyA6YXR0cjpgc3lzLm1ldGFfcGF0aGAKICAgIGlzIGRvbmUuIGBgTm9uZWBgIGlzIHJldHVybmVkIGlmIG5vIGxvYWRlciBpcyBmb3VuZC4KIApAQCAtOTksNiArOTksMTIgQEAKICAgIHdpbGwgbmVlZCB0byBpbXBvcnQgYWxsIHBhcmVudCBwYWNrYWdlcyBvZiB0aGUgc3VibW9kdWxlIGFuZCB1c2UgdGhlIGNvcnJlY3QKICAgIGFyZ3VtZW50IHRvICpwYXRoKi4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiBgYF9fbG9hZGVyX19gYCBpcyBub3Qgc2V0LCByYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCwganVzdCBsaWtlIHdoZW4gdGhlCisgICAgICBhdHRyaWJ1dGUgaXMgc2V0IHRvIGBgTm9uZWBgLgorCiAuLiBmdW5jdGlvbjo6IGludmFsaWRhdGVfY2FjaGVzKCkKIAogICAgSW52YWxpZGF0ZSB0aGUgaW50ZXJuYWwgY2FjaGVzIG9mIGZpbmRlcnMgc3RvcmVkIGF0CkBAIC0xMDksNiArMTE1LDc0IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBmdW5jdGlvbjo6IHJlbG9hZChtb2R1bGUpCisKKyAgIFJlbG9hZCBhIHByZXZpb3VzbHkgaW1wb3J0ZWQgKm1vZHVsZSouICBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIG1vZHVsZSBvYmplY3QsCisgICBzbyBpdCBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgYmVmb3JlLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91CisgICBoYXZlIGVkaXRlZCB0aGUgbW9kdWxlIHNvdXJjZSBmaWxlIHVzaW5nIGFuIGV4dGVybmFsIGVkaXRvciBhbmQgd2FudCB0byB0cnkKKyAgIG91dCB0aGUgbmV3IHZlcnNpb24gd2l0aG91dCBsZWF2aW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBUaGUgcmV0dXJuIHZhbHVlCisgICBpcyB0aGUgbW9kdWxlIG9iamVjdCAod2hpY2ggY2FuIGJlIGRpZmZlcmVudCBpZiByZS1pbXBvcnRpbmcgY2F1c2VzIGEKKyAgIGRpZmZlcmVudCBvYmplY3QgdG8gYmUgcGxhY2VkIGluIDpkYXRhOmBzeXMubW9kdWxlc2ApLgorCisgICBXaGVuIDpmdW5jOmByZWxvYWRgIGlzIGV4ZWN1dGVkOgorCisgICAqIFB5dGhvbiBtb2R1bGVzJyBjb2RlIGlzIHJlY29tcGlsZWQgYW5kIHRoZSBtb2R1bGUtbGV2ZWwgY29kZSByZS1leGVjdXRlZCwKKyAgICAgZGVmaW5pbmcgYSBuZXcgc2V0IG9mIG9iamVjdHMgd2hpY2ggYXJlIGJvdW5kIHRvIG5hbWVzIGluIHRoZSBtb2R1bGUncworICAgICBkaWN0aW9uYXJ5IGJ5IHJldXNpbmcgdGhlIDp0ZXJtOmBsb2FkZXJgIHdoaWNoIG9yaWdpbmFsbHkgbG9hZGVkIHRoZQorICAgICBtb2R1bGUuICBUaGUgYGBpbml0YGAgZnVuY3Rpb24gb2YgZXh0ZW5zaW9uIG1vZHVsZXMgaXMgbm90IGNhbGxlZCBhIHNlY29uZAorICAgICB0aW1lLgorCisgICAqIEFzIHdpdGggYWxsIG90aGVyIG9iamVjdHMgaW4gUHl0aG9uIHRoZSBvbGQgb2JqZWN0cyBhcmUgb25seSByZWNsYWltZWQKKyAgICAgYWZ0ZXIgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkcm9wIHRvIHplcm8uCisKKyAgICogVGhlIG5hbWVzIGluIHRoZSBtb2R1bGUgbmFtZXNwYWNlIGFyZSB1cGRhdGVkIHRvIHBvaW50IHRvIGFueSBuZXcgb3IKKyAgICAgY2hhbmdlZCBvYmplY3RzLgorCisgICAqIE90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBvYmplY3RzIChzdWNoIGFzIG5hbWVzIGV4dGVybmFsIHRvIHRoZSBtb2R1bGUpIGFyZQorICAgICBub3QgcmVib3VuZCB0byByZWZlciB0byB0aGUgbmV3IG9iamVjdHMgYW5kIG11c3QgYmUgdXBkYXRlZCBpbiBlYWNoIG5hbWVzcGFjZQorICAgICB3aGVyZSB0aGV5IG9jY3VyIGlmIHRoYXQgaXMgZGVzaXJlZC4KKworICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG90aGVyIGNhdmVhdHM6CisKKyAgIElmIGEgbW9kdWxlIGlzIHN5bnRhY3RpY2FsbHkgY29ycmVjdCBidXQgaXRzIGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGUgZmlyc3QKKyAgIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudCBmb3IgaXQgZG9lcyBub3QgYmluZCBpdHMgbmFtZSBsb2NhbGx5LCBidXQgZG9lcworICAgc3RvcmUgYSAocGFydGlhbGx5IGluaXRpYWxpemVkKSBtb2R1bGUgb2JqZWN0IGluIGBgc3lzLm1vZHVsZXNgYC4gIFRvIHJlbG9hZAorICAgdGhlIG1vZHVsZSB5b3UgbXVzdCBmaXJzdCA6a2V5d29yZDpgaW1wb3J0YCBpdCBhZ2FpbiAodGhpcyB3aWxsIGJpbmQgdGhlIG5hbWUKKyAgIHRvIHRoZSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgbW9kdWxlIG9iamVjdCkgYmVmb3JlIHlvdSBjYW4gOmZ1bmM6YHJlbG9hZGAgaXQuCisKKyAgIFdoZW4gYSBtb2R1bGUgaXMgcmVsb2FkZWQsIGl0cyBkaWN0aW9uYXJ5IChjb250YWluaW5nIHRoZSBtb2R1bGUncyBnbG9iYWwKKyAgIHZhcmlhYmxlcykgaXMgcmV0YWluZWQuICBSZWRlZmluaXRpb25zIG9mIG5hbWVzIHdpbGwgb3ZlcnJpZGUgdGhlIG9sZAorICAgZGVmaW5pdGlvbnMsIHNvIHRoaXMgaXMgZ2VuZXJhbGx5IG5vdCBhIHByb2JsZW0uICBJZiB0aGUgbmV3IHZlcnNpb24gb2YgYQorICAgbW9kdWxlIGRvZXMgbm90IGRlZmluZSBhIG5hbWUgdGhhdCB3YXMgZGVmaW5lZCBieSB0aGUgb2xkIHZlcnNpb24sIHRoZSBvbGQKKyAgIGRlZmluaXRpb24gcmVtYWlucy4gIFRoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZCB0byB0aGUgbW9kdWxlJ3MgYWR2YW50YWdlIGlmIGl0CisgICBtYWludGFpbnMgYSBnbG9iYWwgdGFibGUgb3IgY2FjaGUgb2Ygb2JqZWN0cyAtLS0gd2l0aCBhIDprZXl3b3JkOmB0cnlgCisgICBzdGF0ZW1lbnQgaXQgY2FuIHRlc3QgZm9yIHRoZSB0YWJsZSdzIHByZXNlbmNlIGFuZCBza2lwIGl0cyBpbml0aWFsaXphdGlvbiBpZgorICAgZGVzaXJlZDo6CisKKyAgICAgIHRyeToKKyAgICAgICAgICBjYWNoZQorICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICBjYWNoZSA9IHt9CisKKyAgIEl0IGlzIGxlZ2FsIHRob3VnaCBnZW5lcmFsbHkgbm90IHZlcnkgdXNlZnVsIHRvIHJlbG9hZCBidWlsdC1pbiBvcgorICAgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgKHRoaXMgaXMgbm90IHRydWUgZm9yIGUuZy4gOm1vZDpgc3lzYCwKKyAgIDptb2Q6YF9fbWFpbl9fYCwgOm1vZDpgYnVpbHRpbnNgIGFuZCBvdGhlciBrZXkgbW9kdWxlcyB3aGVyZSByZWxvYWRpbmcgaXMKKyAgIGZyb3duZWQgdXBvbikuIEluIG1hbnkgY2FzZXMsIGhvd2V2ZXIsIGV4dGVuc2lvbiBtb2R1bGVzIGFyZSBub3QgZGVzaWduZWQgdG8KKyAgIGJlIGluaXRpYWxpemVkIG1vcmUgdGhhbiBvbmNlLCBhbmQgbWF5IGZhaWwgaW4gYXJiaXRyYXJ5IHdheXMgd2hlbiByZWxvYWRlZC4KKworICAgSWYgYSBtb2R1bGUgaW1wb3J0cyBvYmplY3RzIGZyb20gYW5vdGhlciBtb2R1bGUgdXNpbmcgOmtleXdvcmQ6YGZyb21gIC4uLgorICAgOmtleXdvcmQ6YGltcG9ydGAgLi4uLCBjYWxsaW5nIDpmdW5jOmByZWxvYWRgIGZvciB0aGUgb3RoZXIgbW9kdWxlIGRvZXMgbm90CisgICByZWRlZmluZSB0aGUgb2JqZWN0cyBpbXBvcnRlZCBmcm9tIGl0IC0tLSBvbmUgd2F5IGFyb3VuZCB0aGlzIGlzIHRvCisgICByZS1leGVjdXRlIHRoZSA6a2V5d29yZDpgZnJvbWAgc3RhdGVtZW50LCBhbm90aGVyIGlzIHRvIHVzZSA6a2V5d29yZDpgaW1wb3J0YAorICAgYW5kIHF1YWxpZmllZCBuYW1lcyAoKm1vZHVsZS5uYW1lKikgaW5zdGVhZC4KKworICAgSWYgYSBtb2R1bGUgaW5zdGFudGlhdGVzIGluc3RhbmNlcyBvZiBhIGNsYXNzLCByZWxvYWRpbmcgdGhlIG1vZHVsZSB0aGF0CisgICBkZWZpbmVzIHRoZSBjbGFzcyBkb2VzIG5vdCBhZmZlY3QgdGhlIG1ldGhvZCBkZWZpbml0aW9ucyBvZiB0aGUgaW5zdGFuY2VzIC0tLQorICAgdGhleSBjb250aW51ZSB0byB1c2UgdGhlIG9sZCBjbGFzcyBkZWZpbml0aW9uLiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgZGVyaXZlZAorICAgY2xhc3Nlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogOm1vZDpgaW1wb3J0bGliLmFiY2AgLS0gQWJzdHJhY3QgYmFzZSBjbGFzc2VzIHJlbGF0ZWQgdG8gaW1wb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzMiw4ICsyMDYsNiBAQAogICAgICAgICAgICAgICAgKy0tIEV4ZWN1dGlvbkxvYWRlciAtLSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0gRmlsZUxvYWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBTb3VyY2VMb2FkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBQeUxvYWRlciAoZGVwcmVjYXRlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBQeVB5Y0xvYWRlciAoZGVwcmVjYXRlZCkKIAogCiAuLiBjbGFzczo6IEZpbmRlcgpAQCAtMTQ5LDYgKzIyMSwxMCBAQAogICAgICAgbW9kdWxlLiAgT3JpZ2luYWxseSBzcGVjaWZpZWQgaW4gOnBlcDpgMzAyYCwgdGhpcyBtZXRob2Qgd2FzIG1lYW50CiAgICAgICBmb3IgdXNlIGluIDpkYXRhOmBzeXMubWV0YV9wYXRoYCBhbmQgaW4gdGhlIHBhdGgtYmFzZWQgaW1wb3J0IHN1YnN5c3RlbS4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBOb25lYGAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogCiAuLiBjbGFzczo6IE1ldGFQYXRoRmluZGVyCiAKQEAgLTE2NSwxMiArMjQxLDE5IEBACiAgICAgICB3aWxsIGJlIHRoZSB2YWx1ZSBvZiA6YXR0cjpgX19wYXRoX19gIGZyb20gdGhlIHBhcmVudAogICAgICAgcGFja2FnZS4gSWYgYSBsb2FkZXIgY2Fubm90IGJlIGZvdW5kLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBOb25lYGAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogICAgLi4gbWV0aG9kOjogaW52YWxpZGF0ZV9jYWNoZXMoKQogCiAgICAgICBBbiBvcHRpb25hbCBtZXRob2Qgd2hpY2gsIHdoZW4gY2FsbGVkLCBzaG91bGQgaW52YWxpZGF0ZSBhbnkgaW50ZXJuYWwKICAgICAgIGNhY2hlIHVzZWQgYnkgdGhlIGZpbmRlci4gVXNlZCBieSA6ZnVuYzpgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzYAogICAgICAgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNhY2hlcyBvZiBhbGwgZmluZGVycyBvbiA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgTm9uZWBgIHdoZW4gY2FsbGVkIGluc3RlYWQgb2YgYGBOb3RJbXBsZW1lbnRlZGBgLgorCiAKIC4uIGNsYXNzOjogUGF0aEVudHJ5RmluZGVyCiAKQEAgLTE3OCw3ICsyNjEsNyBAQAogICAgaXQgYmVhcnMgc29tZSBzaW1pbGFyaXRpZXMgdG8gOmNsYXNzOmBNZXRhUGF0aEZpbmRlcmAsIGBgUGF0aEVudHJ5RmluZGVyYGAKICAgIGlzIG1lYW50IGZvciB1c2Ugb25seSB3aXRoaW4gdGhlIHBhdGgtYmFzZWQgaW1wb3J0IHN1YnN5c3RlbSBwcm92aWRlZAogICAgYnkgOmNsYXNzOmBQYXRoRmluZGVyYC4gVGhpcyBBQkMgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YEZpbmRlcmAgZm9yCi0gICBjb21wYXRpYmlsaXR5LgorICAgY29tcGF0aWJpbGl0eSByZWFzb25zIG9ubHkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCkBAIC0xOTAsOSArMjczLDEyIEBACiAgICAgICBwYWNrYWdlLiBUaGUgbG9hZGVyIG1heSBiZSBgYE5vbmVgYCB3aGlsZSBzcGVjaWZ5aW5nIGBgcG9ydGlvbmBgIHRvCiAgICAgICBzaWduaWZ5IHRoZSBjb250cmlidXRpb24gb2YgdGhlIGZpbGUgc3lzdGVtIGxvY2F0aW9ucyB0byBhIG5hbWVzcGFjZQogICAgICAgcGFja2FnZS4gQW4gZW1wdHkgbGlzdCBjYW4gYmUgdXNlZCBmb3IgYGBwb3J0aW9uYGAgdG8gc2lnbmlmeSB0aGUgbG9hZGVyCi0gICAgICBpcyBub3QgcGFydCBvZiBhIHBhY2thZ2UuIElmIGBgbG9hZGVyYGAgaXMgYGBOb25lYGAgYW5kIGBgcG9ydGlvbmBgIGlzCi0gICAgICB0aGUgZW1wdHkgbGlzdCB0aGVuIG5vIGxvYWRlciBvciBsb2NhdGlvbiBmb3IgYSBuYW1lc3BhY2UgcGFja2FnZSB3ZXJlCi0gICAgICBmb3VuZCAoaS5lLiBmYWlsdXJlIHRvIGZpbmQgYW55dGhpbmcgZm9yIHRoZSBtb2R1bGUpLgorICAgICAgaXMgbm90IHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4gSWYgYGBsb2FkZXJgYCBpcyBgYE5vbmVgYCBhbmQKKyAgICAgIGBgcG9ydGlvbmBgIGlzIHRoZSBlbXB0eSBsaXN0IHRoZW4gbm8gbG9hZGVyIG9yIGxvY2F0aW9uIGZvciBhIG5hbWVzcGFjZQorICAgICAgcGFja2FnZSB3ZXJlIGZvdW5kIChpLmUuIGZhaWx1cmUgdG8gZmluZCBhbnl0aGluZyBmb3IgdGhlIG1vZHVsZSkuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgKE5vbmUsIFtdKWBgIGluc3RlYWQgb2YgcmFpc2luZyA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KIAogICAgLi4gbWV0aG9kOjogZmluZF9tb2R1bGUoZnVsbG5hbWUpCiAKQEAgLTIyNCwxMiArMzEwLDExIEBACiAgICAgICAgIGZyb20gdGhlIGltcG9ydC4gSWYgdGhlIGxvYWRlciBpbnNlcnRlZCBhIG1vZHVsZSBhbmQgdGhlIGxvYWQgZmFpbHMsIGl0CiAgICAgICAgIG11c3QgYmUgcmVtb3ZlZCBieSB0aGUgbG9hZGVyIGZyb20gOmRhdGE6YHN5cy5tb2R1bGVzYDsgbW9kdWxlcyBhbHJlYWR5CiAgICAgICAgIGluIDpkYXRhOmBzeXMubW9kdWxlc2AgYmVmb3JlIHRoZSBsb2FkZXIgYmVnYW4gZXhlY3V0aW9uIHNob3VsZCBiZSBsZWZ0Ci0gICAgICAgIGFsb25lLiBUaGUgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCBkZWNvcmF0b3IgaGFuZGxlcwotICAgICAgICBhbGwgb2YgdGhlc2UgZGV0YWlscy4KKyAgICAgICAgYWxvbmUgKHNlZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX3RvX2xvYWRgKS4KIAogICAgICAgICBUaGUgbG9hZGVyIHNob3VsZCBzZXQgc2V2ZXJhbCBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUuCiAgICAgICAgIChOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGNhbiBjaGFuZ2Ugd2hlbiBhIG1vZHVsZSBpcwotICAgICAgICByZWxvYWRlZC4pCisgICAgICAgIHJlbG9hZGVkOyBzZWUgOm1ldGg6YGluaXRfbW9kdWxlX2F0dHJzYCk6CiAKICAgICAgICAgLSA6YXR0cjpgX19uYW1lX19gCiAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLgpAQCAtMjQ5LDIwICszMzQsMzkgQEAKICAgICAgICAgLSA6YXR0cjpgX19wYWNrYWdlX19gCiAgICAgICAgICAgICBUaGUgcGFyZW50IHBhY2thZ2UgZm9yIHRoZSBtb2R1bGUvcGFja2FnZS4gSWYgdGhlIG1vZHVsZSBpcwogICAgICAgICAgICAgdG9wLWxldmVsIHRoZW4gaXQgaGFzIGEgdmFsdWUgb2YgdGhlIGVtcHR5IHN0cmluZy4gVGhlCi0gICAgICAgICAgICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuc2V0X3BhY2thZ2VgIGRlY29yYXRvciBjYW4gaGFuZGxlIHRoZSBkZXRhaWxzCi0gICAgICAgICAgICBmb3IgOmF0dHI6YF9fcGFja2FnZV9fYC4KKyAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICAgICBkZXRhaWxzIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgogCiAgICAgICAgIC0gOmF0dHI6YF9fbG9hZGVyX19gCi0gICAgICAgICAgICBUaGUgbG9hZGVyIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLgotICAgICAgICAgICAgKFRoaXMgaXMgbm90IHNldCBieSB0aGUgYnVpbHQtaW4gaW1wb3J0IG1hY2hpbmVyeSwKLSAgICAgICAgICAgIGJ1dCBpdCBzaG91bGQgYmUgc2V0IHdoZW5ldmVyIGEgOnRlcm06YGxvYWRlcmAgaXMgdXNlZC4pCisgICAgICAgICAgICBUaGUgbG9hZGVyIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLiBUaGUKKyAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICAgICBkZXRhaWxzIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgorCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlIDpleGM6YEltcG9ydEVycm9yYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mCisgICAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCiAgICAgLi4gbWV0aG9kOjogbW9kdWxlX3JlcHIobW9kdWxlKQogCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlCi0gICAgICAgIGdpdmVuIG1vZHVsZSdzIHJlcHIsIGFzIGEgc3RyaW5nLgorICAgICAgICBBbiBvcHRpb25hbCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZQorICAgICAgICBnaXZlbiBtb2R1bGUncyByZXByLCBhcyBhIHN0cmluZy4gVGhlIG1vZHVsZSB0eXBlJ3MgZGVmYXVsdCByZXByKCkgd2lsbAorICAgICAgICB1c2UgdGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCBhcyBhcHByb3ByaWF0ZS4KIAotICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6IDMuMworICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBNYWRlIG9wdGlvbmFsIGluc3RlYWQgb2YgYW4gYWJzdHJhY3RtZXRob2QuCisKKyAgICAuLiBtZXRob2Q6OiBpbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgU2V0IHRoZSA6YXR0cjpgX19sb2FkZXJfX2AgYXR0cmlidXRlIG9uIHRoZSBtb2R1bGUuCisKKyAgICAgICAgU3ViY2xhc3NlcyBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIHNob3VsZCBzZXQgd2hhdGV2ZXIgYXBwcm9wcmlhdGUKKyAgICAgICAgYXR0cmlidXRlcyBpdCBjYW4sIGdldHRpbmcgdGhlIG1vZHVsZSdzIG5hbWUgZnJvbSA6YXR0cjpgX19uYW1lX19gIHdoZW4KKyAgICAgICAgbmVlZGVkLiBBbGwgdmFsdWVzIHNob3VsZCBhbHNvIGJlIG92ZXJyaWRkZW4gc28gdGhhdCByZWxvYWRpbmcgd29ya3MgYXMKKyAgICAgICAgZXhwZWN0ZWQuCisKKyAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIAogLi4gY2xhc3M6OiBSZXNvdXJjZUxvYWRlcgpAQCAtMjgxLDYgKzM4NSw5IEBACiAgICAgICAgIGJlIGZvdW5kLiBUaGUgKnBhdGgqIGlzIGV4cGVjdGVkIHRvIGJlIGNvbnN0cnVjdGVkIHVzaW5nIGEgbW9kdWxlJ3MKICAgICAgICAgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUgb3IgYW4gaXRlbSBmcm9tIGEgcGFja2FnZSdzIDphdHRyOmBfX3BhdGhfX2AuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YElPRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKIAogLi4gY2xhc3M6OiBJbnNwZWN0TG9hZGVyCiAKQEAgLTI4OSwxNCArMzk2LDIxIEBACiAKICAgICAuLiBtZXRob2Q6OiBnZXRfY29kZShmdWxsbmFtZSkKIAotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdG8gcmV0dXJuIHRoZSA6Y2xhc3M6YGNvZGVgIG9iamVjdCBmb3IgYSBtb2R1bGUuCi0gICAgICAgIGBgTm9uZWBgIGlzIHJldHVybmVkIGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgaGF2ZSBhIGNvZGUgb2JqZWN0CisgICAgICAgIFJldHVybiB0aGUgY29kZSBvYmplY3QgZm9yIGEgbW9kdWxlLgorICAgICAgICBgYE5vbmVgYCBzaG91bGQgYmUgcmV0dXJuZWQgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBoYXZlIGEgY29kZSBvYmplY3QKICAgICAgICAgKGUuZy4gYnVpbHQtaW4gbW9kdWxlKS4gIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQgaWYgbG9hZGVyIGNhbm5vdAogICAgICAgICBmaW5kIHRoZSByZXF1ZXN0ZWQgbW9kdWxlLgogCisgICAgICAgIC4uIG5vdGU6OgorICAgICAgICAgICBXaGlsZSB0aGUgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGl0IGlzIHN1Z2dlc3RlZCB0aGF0CisgICAgICAgICAgIGl0IGJlIG92ZXJyaWRkZW4gaWYgcG9zc2libGUgZm9yIHBlcmZvcm1hbmNlLgorCiAgICAgICAgIC4uIGluZGV4OjoKICAgICAgICAgICAgc2luZ2xlOiB1bml2ZXJzYWwgbmV3bGluZXM7IGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfc291cmNlIG1ldGhvZAogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIE5vIGxvbmdlciBhYnN0cmFjdCBhbmQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZC4KKwogICAgIC4uIG1ldGhvZDo6IGdldF9zb3VyY2UoZnVsbG5hbWUpCiAKICAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRvIHJldHVybiB0aGUgc291cmNlIG9mIGEgbW9kdWxlLiBJdCBpcyByZXR1cm5lZCBhcwpAQCAtMzA1LDEyICs0MTksNDEgQEAKICAgICAgICAgaWYgbm8gc291cmNlIGlzIGF2YWlsYWJsZSAoZS5nLiBhIGJ1aWx0LWluIG1vZHVsZSkuIFJhaXNlcwogICAgICAgICA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBjYW5ub3QgZmluZCB0aGUgbW9kdWxlIHNwZWNpZmllZC4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKICAgICAuLiBtZXRob2Q6OiBpc19wYWNrYWdlKGZ1bGxuYW1lKQogCiAgICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gYSB0cnVlIHZhbHVlIGlmIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBhCiAgICAgICAgIGZhbHNlIHZhbHVlIG90aGVyd2lzZS4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUKICAgICAgICAgOnRlcm06YGxvYWRlcmAgY2Fubm90IGZpbmQgdGhlIG1vZHVsZS4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKKyAgICAuLiBtZXRob2Q6OiBzb3VyY2VfdG9fY29kZShkYXRhLCBwYXRoPSc8c3RyaW5nPicpCisKKyAgICAgICAgQ3JlYXRlIGEgY29kZSBvYmplY3QgZnJvbSBQeXRob24gc291cmNlLgorCisgICAgICAgIFRoZSAqZGF0YSogYXJndW1lbnQgY2FuIGJlIHdoYXRldmVyIHRoZSA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24KKyAgICAgICAgc3VwcG9ydHMgKGkuZS4gc3RyaW5nIG9yIGJ5dGVzKS4gVGhlICpwYXRoKiBhcmd1bWVudCBzaG91bGQgYmUKKyAgICAgICAgdGhlICJwYXRoIiB0byB3aGVyZSB0aGUgc291cmNlIGNvZGUgb3JpZ2luYXRlZCBmcm9tLCB3aGljaCBjYW4gYmUgYW4KKyAgICAgICAgYWJzdHJhY3QgY29uY2VwdCAoZS5nLiBsb2NhdGlvbiBpbiBhIHppcCBmaWxlKS4KKworICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgIC4uIG1ldGhvZDo6IGluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBTZXQgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYXR0cmlidXRlIGFuZCA6YXR0cjpgX19wYXRoX19gIGF0dHJpYnV0ZSB0bworICAgICAgICB0aGUgZW1wdHkgbGlzdCBpZiBhcHByb3ByaWF0ZSBhbG9uZyB3aXRoIHdoYXQKKyAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzYCBzZXRzLgorCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5sb2FkX21vZHVsZWAuCisKIAogLi4gY2xhc3M6OiBFeGVjdXRpb25Mb2FkZXIKIApAQCAtMzI4LDYgKzQ3MSwxOCBAQAogICAgICAgICB0aGUgc291cmNlIGZpbGUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIGJ5dGVjb2RlIHdhcyB1c2VkIHRvIGxvYWQgdGhlCiAgICAgICAgIG1vZHVsZS4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKKyAgICAuLiBtZXRob2Q6OiBpbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgU2V0IDphdHRyOmBfX2ZpbGVfX2AgYW5kIGlmIGluaXRpYWxpemluZyBhIHBhY2thZ2UgdGhlbiBzZXQKKyAgICAgICAgOmF0dHI6YF9fcGF0aF9fYCB0byBgYFtvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pXWBgIGFsb25nIHdpdGgKKyAgICAgICAgYWxsIGF0dHJpYnV0ZXMgc2V0IGJ5CisgICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuaW5pdF9tb2R1bGVfYXR0cnNgLgorCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGNsYXNzOjogRmlsZUxvYWRlcihmdWxsbmFtZSwgcGF0aCkKIApAQCAtMzU4LDcgKzUxMyw3IEBACiAKICAgIC4uIG1ldGhvZDo6IGdldF9kYXRhKHBhdGgpCiAKLSAgICAgIFJldHVybnMgdGhlIG9wZW4sIGJpbmFyeSBmaWxlIGZvciAqcGF0aCouCisgICAgICBSZWFkcyAqcGF0aCogYXMgYSBiaW5hcnkgZmlsZSBhbmQgcmV0dXJucyB0aGUgYnl0ZXMgZnJvbSBpdC4KIAogCiAuLiBjbGFzczo6IFNvdXJjZUxvYWRlcgpAQCAtMzczLDcgKzUyOCw4IEBACiAgICAgICAgICAgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkLgogCiAgICAgVGhlIGFic3RyYWN0IG1ldGhvZHMgZGVmaW5lZCBieSB0aGlzIGNsYXNzIGFyZSB0byBhZGQgb3B0aW9uYWwgYnl0ZWNvZGUKLSAgICBmaWxlIHN1cHBvcnQuIE5vdCBpbXBsZW1lbnRpbmcgdGhlc2Ugb3B0aW9uYWwgbWV0aG9kcyBjYXVzZXMgdGhlIGxvYWRlciB0bworICAgIGZpbGUgc3VwcG9ydC4gTm90IGltcGxlbWVudGluZyB0aGVzZSBvcHRpb25hbCBtZXRob2RzIChvciBjYXVzaW5nIHRoZW0gdG8KKyAgICByYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCkgY2F1c2VzIHRoZSBsb2FkZXIgdG8KICAgICBvbmx5IHdvcmsgd2l0aCBzb3VyY2UgY29kZS4gSW1wbGVtZW50aW5nIHRoZSBtZXRob2RzIGFsbG93cyB0aGUgbG9hZGVyIHRvCiAgICAgd29yayB3aXRoIHNvdXJjZSAqYW5kKiBieXRlY29kZSBmaWxlczsgaXQgZG9lcyBub3QgYWxsb3cgZm9yICpzb3VyY2VsZXNzKgogICAgIGxvYWRpbmcgd2hlcmUgb25seSBieXRlY29kZSBpcyBwcm92aWRlZC4gIEJ5dGVjb2RlIGZpbGVzIGFyZSBhbgpAQCAtMzkwLDEwICs1NDYsMTMgQEAKICAgICAgICAgLSBgYCdzaXplJ2BgIChvcHRpb25hbCk6IHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KIAogICAgICAgICBBbnkgb3RoZXIga2V5cyBpbiB0aGUgZGljdGlvbmFyeSBhcmUgaWdub3JlZCwgdG8gYWxsb3cgZm9yIGZ1dHVyZQotICAgICAgICBleHRlbnNpb25zLgorICAgICAgICBleHRlbnNpb25zLiBJZiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZCwgOmV4YzpgSU9FcnJvcmAgaXMgcmFpc2VkLgogCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlIDpleGM6YElPRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKICAgICAuLiBtZXRob2Q6OiBwYXRoX210aW1lKHBhdGgpCiAKICAgICAgICAgT3B0aW9uYWwgYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUKQEAgLTQwMiw3ICs1NjEsMTAgQEAKICAgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuMwogICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiA6bWV0aDpgcGF0aF9zdGF0c2AuICBZb3UgZG9uJ3QKICAgICAgICAgICAgaGF2ZSB0byBpbXBsZW1lbnQgaXQsIGJ1dCBpdCBpcyBzdGlsbCBhdmFpbGFibGUgZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgICAgcHVycG9zZXMuCisgICAgICAgICAgIHB1cnBvc2VzLiBSYWlzZSA6ZXhjOmBJT0Vycm9yYCBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KKworICAgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgICAgUmFpc2UgOmV4YzpgSU9FcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KIAogICAgIC4uIG1ldGhvZDo6IHNldF9kYXRhKHBhdGgsIGRhdGEpCiAKQEAgLTQxNCw2ICs1NzYsOSBAQAogICAgICAgICAoOmF0dHI6YGVycm5vLkVBQ0NFU2AvOmV4YzpgUGVybWlzc2lvbkVycm9yYCksIGRvIG5vdCBwcm9wYWdhdGUgdGhlCiAgICAgICAgIGV4Y2VwdGlvbi4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBObyBsb25nZXIgcmFpc2VzIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHdoZW4gY2FsbGVkLgorCiAgICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCiAKICAgICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YEluc3BlY3RMb2FkZXIuZ2V0X2NvZGVgLgpAQCAtNDM0LDE0MSArNTk5LDEzIEBACiAgICAgICAgIGBgX19pbml0X19gYCB3aGVuIHRoZSBmaWxlIGV4dGVuc2lvbiBpcyByZW1vdmVkICoqYW5kKiogdGhlIG1vZHVsZSBuYW1lCiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBlbmQgaW4gYGBfX2luaXRfX2BgLgogCisgICAgLi4gbWV0aG9kOjogaW5pdF9tb2R1bGVfYXR0cihtb2R1bGUpCiAKLS4uIGNsYXNzOjogUHlMb2FkZXIKKyAgICAgICAgU2V0IDphdHRyOmBfX2NhY2hlZF9fYCB1c2luZyA6ZnVuYzpgaW1wLmNhY2hlX2Zyb21fc291cmNlYC4gT3RoZXIKKyAgICAgICAgYXR0cmlidXRlcyBzZXQgYnkKKyAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuRXhlY3V0aW9uTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzYC4KIAotICAgIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgaW5oZXJpdGluZyBmcm9tCi0gICAgOmNsYXNzOmBFeGVjdXRpb25Mb2FkZXJgIGFuZAotICAgIDpjbGFzczpgUmVzb3VyY2VMb2FkZXJgIGRlc2lnbmVkIHRvIGVhc2UgdGhlIGxvYWRpbmcgb2YKLSAgICBQeXRob24gc291cmNlIG1vZHVsZXMgKGJ5dGVjb2RlIGlzIG5vdCBoYW5kbGVkOyBzZWUKLSAgICA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgZm9yIGEgc291cmNlL2J5dGVjb2RlIEFCQykuIEEgc3ViY2xhc3MKLSAgICBpbXBsZW1lbnRpbmcgdGhpcyBBQkMgd2lsbCBvbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgZXhwb3NpbmcgaG93IHRoZSBzb3VyY2UKLSAgICBjb2RlIGlzIHN0b3JlZDsgYWxsIG90aGVyIGRldGFpbHMgZm9yIGxvYWRpbmcgUHl0aG9uIHNvdXJjZSBjb2RlIHdpbGwgYmUKLSAgICBoYW5kbGVkIGJ5IHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgb2Yga2V5IG1ldGhvZHMuCi0KLSAgICAuLiBkZXByZWNhdGVkOjogMy4yCi0gICAgICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIGlzCi0gICAgICAgIHNsYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy40LiBTZWUgYmVsb3cgZm9yIGhvdyB0byBjcmVhdGUgYQotICAgICAgICBzdWJjbGFzcyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHMuCi0KLSAgICBJZiBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMSBpcyByZXF1aXJlZCwgdGhlbiB1c2UgdGhlIGZvbGxvd2luZyBpZGlvbQotICAgIHRvIGltcGxlbWVudCBhIHN1YmNsYXNzIHRoYXQgd2lsbCB3b3JrIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzIChtYWtlIHN1cmUKLSAgICB0byBpbXBsZW1lbnQgOm1ldGg6YEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWVgKTo6Ci0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBTb3VyY2VMb2FkZXIKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBQeUxvYWRlciBhcyBTb3VyY2VMb2FkZXIKLQotCi0gICAgICAgIGNsYXNzIEN1c3RvbUxvYWRlcihTb3VyY2VMb2FkZXIpOgotICAgICAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZS4iIiIKLSAgICAgICAgICAgICAgICAjIEltcGxlbWVudCAuLi4KLQotICAgICAgICAgICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAiIiJJbXBsZW1lbnQgc291cmNlX3BhdGggaW4gdGVybXMgb2YgZ2V0X2ZpbGVuYW1lLiIiIgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICIiIkltcGxlbWVudCBpc19wYWNrYWdlIGJ5IGxvb2tpbmcgZm9yIGFuIF9faW5pdF9fIGZpbGUKLSAgICAgICAgICAgICAgICBuYW1lIGFzIHJldHVybmVkIGJ5IGdldF9maWxlbmFtZS4iIiIKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCi0KLQotICAgIC4uIG1ldGhvZDo6IHNvdXJjZV9wYXRoKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBjb2RlIGZvciBhCi0gICAgICAgIG1vZHVsZS4gU2hvdWxkIHJldHVybiBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBzb3VyY2UgY29kZS4KLSAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGtub3dzIGl0IGNhbm5vdCBoYW5kbGUgdGhlCi0gICAgICAgIG1vZHVsZS4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWVgIHRoYXQKLSAgICAgICAgcmVsaWVzIG9uIDptZXRoOmBzb3VyY2VfcGF0aGAuIElmIDptZXRoOmBzb3VyY2VfcGF0aGAgcmV0dXJucwotICAgICAgICBgYE5vbmVgYCwgdGhlbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLgotCi0gICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgCi0gICAgICAgIHRoYXQgbG9hZHMgUHl0aG9uIHNvdXJjZSBjb2RlLiBBbGwgbmVlZGVkIGluZm9ybWF0aW9uIGNvbWVzIGZyb20gdGhlCi0gICAgICAgIGFic3RyYWN0IG1ldGhvZHMgcmVxdWlyZWQgYnkgdGhpcyBBQkMuIFRoZSBvbmx5IHBlcnRpbmVudCBhc3N1bXB0aW9uCi0gICAgICAgIG1hZGUgYnkgdGhpcyBtZXRob2QgaXMgdGhhdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlCi0gICAgICAgIDphdHRyOmBfX3BhdGhfX2AgaXMgc2V0IHRvIGBgW29zLnBhdGguZGlybmFtZShfX2ZpbGVfXyldYGAuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfY29kZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGVgIHRoYXQgY3JlYXRlcyBjb2RlIG9iamVjdHMKLSAgICAgICAgZnJvbSBQeXRob24gc291cmNlIGNvZGUsIGJ5IHJlcXVlc3RpbmcgdGhlIHNvdXJjZSBjb2RlICh1c2luZwotICAgICAgICA6bWV0aDpgc291cmNlX3BhdGhgIGFuZCA6bWV0aDpgZ2V0X2RhdGFgKSBhbmQgY29tcGlsaW5nIGl0IHdpdGggdGhlCi0gICAgICAgIGJ1aWx0LWluIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbi4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9zb3VyY2UoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2VgLiBVc2VzCi0gICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlJlc291cmNlTG9hZGVyLmdldF9kYXRhYCBhbmQgOm1ldGg6YHNvdXJjZV9wYXRoYAotICAgICAgICB0byBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgSXQgdHJpZXMgdG8gZ3Vlc3MgdGhlIHNvdXJjZSBlbmNvZGluZyB1c2luZwotICAgICAgICA6ZnVuYzpgdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nYC4KLQotCi0uLiBjbGFzczo6IFB5UHljTG9hZGVyCi0KLSAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGluaGVyaXRpbmcgZnJvbSA6Y2xhc3M6YFB5TG9hZGVyYC4KLSAgICBUaGlzIEFCQyBpcyBtZWFudCB0byBoZWxwIGluIGNyZWF0aW5nIGxvYWRlcnMgdGhhdCBzdXBwb3J0IGJvdGggUHl0aG9uCi0gICAgc291cmNlIGFuZCBieXRlY29kZS4KLQotICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKLSAgICAgICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIDpjbGFzczpgU291cmNlTG9hZGVyYCBhbmQgdG8KLSAgICAgICAgcHJvcGVybHkgc3VwcG9ydCA6cGVwOmAzMTQ3YC4gSWYgY29tcGF0aWJpbGl0eSBpcyByZXF1aXJlZCB3aXRoCi0gICAgICAgIFB5dGhvbiAzLjEsIGltcGxlbWVudCBib3RoIDpjbGFzczpgU291cmNlTG9hZGVyYCBhbmQgOmNsYXNzOmBQeUxvYWRlcmA7Ci0gICAgICAgIGluc3RydWN0aW9ucyBvbiBob3cgdG8gZG8gc28gYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvcgotICAgICAgICA6Y2xhc3M6YFB5TG9hZGVyYC4gRG8gbm90ZSB0aGF0IHRoaXMgc29sdXRpb24gd2lsbCBub3Qgc3VwcG9ydAotICAgICAgICBzb3VyY2VsZXNzL2J5dGVjb2RlLW9ubHkgbG9hZGluZzsgb25seSBzb3VyY2UgKmFuZCogYnl0ZWNvZGUgbG9hZGluZy4KLQotICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICAgVXBkYXRlZCB0byBwYXJzZSAoYnV0IG5vdCB1c2UpIHRoZSBuZXcgc291cmNlIHNpemUgZmllbGQgaW4gYnl0ZWNvZGUKLSAgICAgICBmaWxlcyB3aGVuIHJlYWRpbmcgYW5kIHRvIHdyaXRlIG91dCB0aGUgZmllbGQgcHJvcGVybHkgd2hlbiB3cml0aW5nLgotCi0gICAgLi4gbWV0aG9kOjogc291cmNlX210aW1lKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHNvdXJjZQotICAgICAgICBjb2RlIG9mIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgc2hvdWxkIGJlIGFuCi0gICAgICAgIGludGVnZXIuIElmIHRoZXJlIGlzIG5vIHNvdXJjZSBjb2RlLCByZXR1cm4gYGBOb25lYGAuIElmIHRoZQotICAgICAgICBtb2R1bGUgY2Fubm90IGJlIGZvdW5kIHRoZW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IGJ5dGVjb2RlX3BhdGgoZnVsbG5hbWUpCi0KLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIHBhdGggdG8gdGhlIGJ5dGVjb2RlIGZvciB0aGUKLSAgICAgICAgc3BlY2lmaWVkIG1vZHVsZSwgaWYgaXQgZXhpc3RzLiBJdCByZXR1cm5zIGBgTm9uZWBgCi0gICAgICAgIGlmIG5vIGJ5dGVjb2RlIGV4aXN0cyAoeWV0KS4KLSAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGtub3dzIGl0IGNhbm5vdCBoYW5kbGUgdGhlCi0gICAgICAgIG1vZHVsZS4KLQotICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKLQotICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCi0gICAgICAgIDptZXRoOmBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCB0aGF0IHJlbGllcyBvbgotICAgICAgICA6bWV0aDpgUHlMb2FkZXIuc291cmNlX3BhdGhgIGFuZCA6bWV0aDpgYnl0ZWNvZGVfcGF0aGAuCi0gICAgICAgIElmIDptZXRoOmBzb3VyY2VfcGF0aGAgcmV0dXJucyBhIHBhdGgsIHRoZW4gdGhhdCB2YWx1ZSBpcyByZXR1cm5lZC4KLSAgICAgICAgRWxzZSBpZiA6bWV0aDpgYnl0ZWNvZGVfcGF0aGAgcmV0dXJucyBhIHBhdGgsIHRoYXQgcGF0aCB3aWxsIGJlCi0gICAgICAgIHJldHVybmVkLiBJZiBhIHBhdGggaXMgbm90IGF2YWlsYWJsZSBmcm9tIGJvdGggbWV0aG9kcywKLSAgICAgICAgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IHdyaXRlX2J5dGVjb2RlKGZ1bGxuYW1lLCBieXRlY29kZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggaGFzIHRoZSBsb2FkZXIgd3JpdGUgKmJ5dGVjb2RlKiBmb3IgZnV0dXJlCi0gICAgICAgIHVzZS4gSWYgdGhlIGJ5dGVjb2RlIGlzIHdyaXR0ZW4sIHJldHVybiBgYFRydWVgYC4gUmV0dXJuCi0gICAgICAgIGBgRmFsc2VgYCBpZiB0aGUgYnl0ZWNvZGUgY291bGQgbm90IGJlIHdyaXR0ZW4uIFRoaXMgbWV0aG9kCi0gICAgICAgIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIDpkYXRhOmBzeXMuZG9udF93cml0ZV9ieXRlY29kZWAgaXMgdHJ1ZS4KLSAgICAgICAgVGhlICpieXRlY29kZSogYXJndW1lbnQgc2hvdWxkIGJlIGEgYnl0ZXMgc3RyaW5nIG9yIGJ5dGVzIGFycmF5LgorICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCiA6bW9kOmBpbXBvcnRsaWIubWFjaGluZXJ5YCAtLSBJbXBvcnRlcnMgYW5kIHBhdGggaG9va3MKQEAgLTY4Niw2ICs3MjMsMTAgQEAKICAgICAgQ2FsbHMgOm1ldGg6YGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmludmFsaWRhdGVfY2FjaGVzYCBvbiBhbGwKICAgICAgZmluZGVycyBzdG9yZWQgaW4gOmF0dHI6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYC4KIAorICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICBDYWxscyBvYmplY3RzIGluIDpkYXRhOmBzeXMucGF0aF9ob29rc2Agd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICAgICBmb3IgYGAnJ2BgIChpLmUuIHRoZSBlbXB0eSBzdHJpbmcpLgorCiAKIC4uIGNsYXNzOjogRmlsZUZpbmRlcihwYXRoLCBcKmxvYWRlcl9kZXRhaWxzKQogCkBAIC04MDAsNyArODQxLDcgQEAKIAogLi4gY2xhc3M6OiBFeHRlbnNpb25GaWxlTG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQogCi0gICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyYCBmb3IKKyAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlcmAgZm9yCiAgICBleHRlbnNpb24gbW9kdWxlcy4KIAogICAgVGhlICpmdWxsbmFtZSogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGxvYWRlciBpcyB0bwpAQCAtODM0LDYgKzg3NSwxMiBAQAogCiAgICAgICBSZXR1cm5zIGBgTm9uZWBgIGFzIGV4dGVuc2lvbiBtb2R1bGVzIGRvIG5vdCBoYXZlIHNvdXJjZSBjb2RlLgogCisgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisKKyAgICAgIFJldHVybnMgOmF0dHI6YHBhdGhgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiA6bW9kOmBpbXBvcnRsaWIudXRpbGAgLS0gVXRpbGl0eSBjb2RlIGZvciBpbXBvcnRlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODQ0LDYgKzg5MSw1MSBAQAogVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIHZhcmlvdXMgb2JqZWN0cyB0aGF0IGhlbHAgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZgogYW4gOnRlcm06YGltcG9ydGVyYC4KIAorLi4gYXR0cmlidXRlOjogTUFHSUNfTlVNQkVSCisKKyAgIFRoZSBieXRlcyB3aGljaCByZXByZXNlbnQgdGhlIGJ5dGVjb2RlIHZlcnNpb24gbnVtYmVyLiBJZiB5b3UgbmVlZCBoZWxwIHdpdGgKKyAgIGxvYWRpbmcvd3JpdGluZyBieXRlY29kZSB0aGVuIGNvbnNpZGVyIDpjbGFzczpgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBjYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZT1Ob25lKQorCisgICBSZXR1cm4gdGhlIDpwZXA6YDMxNDdgIHBhdGggdG8gdGhlIGJ5dGUtY29tcGlsZWQgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICBzb3VyY2UgKnBhdGgqLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcyBgYC9mb28vYmFyL2Jhei5weWBgIHRoZSByZXR1cm4KKyAgIHZhbHVlIHdvdWxkIGJlIGBgL2Zvby9iYXIvX19weWNhY2hlX18vYmF6LmNweXRob24tMzIucHljYGAgZm9yIFB5dGhvbiAzLjIuCisgICBUaGUgYGBjcHl0aG9uLTMyYGAgc3RyaW5nIGNvbWVzIGZyb20gdGhlIGN1cnJlbnQgbWFnaWMgdGFnIChzZWUKKyAgIDpmdW5jOmBnZXRfdGFnYDsgaWYgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkIHRoZW4KKyAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHdpbGwgYmUgcmFpc2VkKS4gIFRoZSByZXR1cm5lZCBwYXRoIHdpbGwgZW5kIGluCisgICBgYC5weWNgYCB3aGVuIGBgX19kZWJ1Z19fYGAgaXMgVHJ1ZSBvciBgYC5weW9gYCBmb3IgYW4gb3B0aW1pemVkIFB5dGhvbgorICAgKGkuZS4gYGBfX2RlYnVnX19gYCBpcyBGYWxzZSkuICBCeSBwYXNzaW5nIGluIFRydWUgb3IgRmFsc2UgZm9yCisgICAqZGVidWdfb3ZlcnJpZGUqIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIHN5c3RlbSdzIHZhbHVlIGZvciBgYF9fZGVidWdfX2BgIGZvcgorICAgZXh0ZW5zaW9uIHNlbGVjdGlvbi4KKworICAgKnBhdGgqIG5lZWQgbm90IGV4aXN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgIEdpdmVuIHRoZSAqcGF0aCogdG8gYSA6cGVwOmAzMTQ3YCBmaWxlIG5hbWUsIHJldHVybiB0aGUgYXNzb2NpYXRlZCBzb3VyY2UgY29kZQorICAgZmlsZSBwYXRoLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcworICAgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCB0aGUgcmV0dXJuZWQgcGF0aCB3b3VsZCBiZQorICAgYGAvZm9vL2Jhci9iYXoucHlgYC4gICpwYXRoKiBuZWVkIG5vdCBleGlzdCwgaG93ZXZlciBpZiBpdCBkb2VzIG5vdCBjb25mb3JtCisgICB0byA6cGVwOmAzMTQ3YCBmb3JtYXQsIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkLiBJZgorICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLAorICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaXMgcmFpc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcykKKworICAgRGVjb2RlIHRoZSBnaXZlbiBieXRlcyByZXByZXNlbnRpbmcgc291cmNlIGNvZGUgYW5kIHJldHVybiBpdCBhcyBhIHN0cmluZworICAgd2l0aCB1bml2ZXJzYWwgbmV3bGluZXMgKGFzIHJlcXVpcmVkIGJ5CisgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2VgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpCiAKICAgIFJlc29sdmUgYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSB0byBhbiBhYnNvbHV0ZSBvbmUuCkBAIC04NjAsOSArOTUyLDIzIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBmdW5jdGlvbjo6IG1vZHVsZV90b19sb2FkKG5hbWUsICosIHJlc2V0X25hbWU9VHJ1ZSkKKworICAgIFJldHVybnMgYSA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCB3aGljaCBwcm92aWRlcyB0aGUgbW9kdWxlIHRvIGxvYWQuIFRoZQorICAgIG1vZHVsZSB3aWxsIGVpdGhlciBjb21lIGZyb20gOmF0dHI6YHN5cy5tb2R1bGVzYCBpbiB0aGUgY2FzZSBvZiByZWxvYWRpbmcgb3IKKyAgICBhIGZyZXNoIG1vZHVsZSBpZiBsb2FkaW5nIGEgbmV3IG1vZHVsZS4gUHJvcGVyIGNsZWFudXAgb2YKKyAgICA6YXR0cjpgc3lzLm1vZHVsZXNgIG9jY3VycyBpZiB0aGUgbW9kdWxlIHdhcyBuZXcgYW5kIGFuIGV4Y2VwdGlvbiB3YXMKKyAgICByYWlzZWQuCisKKyAgICBJZiAqKnJlc2V0X25hbWUqKiBpcyB0cnVlIGFuZCB0aGUgbW9kdWxlIHJlcXVlc3RlZCBpcyBiZWluZyByZWxvYWRlZCB0aGVuCisgICAgdGhlIG1vZHVsZSdzIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHdpbGwKKyAgICBiZSByZXNldCB0byAqKm5hbWUqKiwgZWxzZSBpdCB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLgorCisgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGRlY29yYXRvcjo6IG1vZHVsZV9mb3JfbG9hZGVyCiAKLSAgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciBhIDp0ZXJtOmBsb2FkZXJgIG1ldGhvZCwKKyAgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgCiAgICAgdG8gaGFuZGxlIHNlbGVjdGluZyB0aGUgcHJvcGVyCiAgICAgbW9kdWxlIG9iamVjdCB0byBsb2FkIHdpdGguIFRoZSBkZWNvcmF0ZWQgbWV0aG9kIGlzIGV4cGVjdGVkIHRvIGhhdmUgYSBjYWxsCiAgICAgc2lnbmF0dXJlIHRha2luZyB0d28gcG9zaXRpb25hbCBhcmd1bWVudHMKQEAgLTg3Myw1NSArOTc5LDU0IEBACiAKICAgICBUaGUgZGVjb3JhdGVkIG1ldGhvZCB3aWxsIHRha2UgaW4gdGhlICoqbmFtZSoqIG9mIHRoZSBtb2R1bGUgdG8gYmUgbG9hZGVkCiAgICAgYXMgZXhwZWN0ZWQgZm9yIGEgOnRlcm06YGxvYWRlcmAuIElmIHRoZSBtb2R1bGUgaXMgbm90IGZvdW5kIGluCi0gICAgOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGEgbmV3IG9uZSBpcyBjb25zdHJ1Y3RlZCB3aXRoIGl0cwotICAgIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqKm5hbWUqKiwgOmF0dHI6YF9fbG9hZGVyX19gIHNldCB0bwotICAgICoqc2VsZioqLCBhbmQgOmF0dHI6YF9fcGFja2FnZV9fYCBzZXQgaWYKLSAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2VgIGlzIGRlZmluZWQgZm9yICoqc2VsZioqIGFuZAotICAgIGRvZXMgbm90IHJhaXNlIDpleGM6YEltcG9ydEVycm9yYCBmb3IgKipuYW1lKiouIElmIGEgbmV3IG1vZHVsZSBpcyBub3QKLSAgICBuZWVkZWQgdGhlbiB0aGUgbW9kdWxlIGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2Agd2lsbCBiZSBwYXNzZWQgaW50byB0aGUKLSAgICBtZXRob2QuCisgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGEgbmV3IG9uZSBpcyBjb25zdHJ1Y3RlZC4gUmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUKKyAgICBtb2R1bGUgY2FtZSBmcm9tLCA6YXR0cjpgX19sb2FkZXJfX2Agc2V0IHRvICoqc2VsZioqIGFuZCA6YXR0cjpgX19wYWNrYWdlX19gCisgICAgaXMgc2V0IGJhc2VkIG9uIHdoYXQgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5pc19wYWNrYWdlYCByZXR1cm5zCisgICAgKGlmIGF2YWlsYWJsZSkuIFRoZXNlIGF0dHJpYnV0ZXMgYXJlIHNldCB1bmNvbmRpdGlvbmFsbHkgdG8gc3VwcG9ydAorICAgIHJlbG9hZGluZy4KIAogICAgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYnkgdGhlIGRlY29yYXRlZCBtZXRob2QgYW5kIGEgbW9kdWxlIHdhcyBhZGRlZCB0bwotICAgIDpkYXRhOmBzeXMubW9kdWxlc2AgaXQgd2lsbCBiZSByZW1vdmVkIHRvIHByZXZlbnQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQKLSAgICBtb2R1bGUgZnJvbSBiZWluZyBpbiBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuIElmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkKLSAgICBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gaXQgaXMgbGVmdCBhbG9uZS4KLQotICAgIFVzZSBvZiB0aGlzIGRlY29yYXRvciBoYW5kbGVzIGFsbCB0aGUgZGV0YWlscyBvZiB3aGljaCBtb2R1bGUgb2JqZWN0IGEKLSAgICBsb2FkZXIgc2hvdWxkIGluaXRpYWxpemUgYXMgc3BlY2lmaWVkIGJ5IDpwZXA6YDMwMmAgYXMgYmVzdCBhcyBwb3NzaWJsZS4KKyAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGVuIHRoZSBtb2R1bGUgd2lsbCBiZSByZW1vdmVkIHRvIHByZXZlbnQgYSBwYXJ0aWFsbHkKKyAgICBpbml0aWFsaXplZCBtb2R1bGUgZnJvbSBiZWluZyBpbiBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuIElmIHRoZSBtb2R1bGUKKyAgICB3YXMgYWxyZWFkeSBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gaXQgaXMgbGVmdCBhbG9uZS4KIAogICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgOmF0dHI6YF9fbG9hZGVyX19gIGFuZCA6YXR0cjpgX19wYWNrYWdlX19gIGFyZSBhdXRvbWF0aWNhbGx5IHNldAogICAgICAgICh3aGVuIHBvc3NpYmxlKS4KIAorICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgU2V0IDphdHRyOmBfX25hbWVfX2AsIDphdHRyOmBfX2xvYWRlcl9fYCA6YXR0cjpgX19wYWNrYWdlX19gCisgICAgICAgdW5jb25kaXRpb25hbGx5IHRvIHN1cHBvcnQgcmVsb2FkaW5nLgorCisgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICBGb3IgdGhlIGJlbmVmaXQgb2YgOnRlcm06YGxvYWRlcmAgc3ViY2xhc3NlcywgcGxlYXNlIHVzZQorICAgICAgICA6ZnVuYzpgbW9kdWxlX3RvX2xvYWRgIGFuZAorICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIuaW5pdF9tb2R1bGVfYXR0cnNgIGluc3RlYWQuCisKIC4uIGRlY29yYXRvcjo6IHNldF9sb2FkZXIKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAotICAgIHRvIHNldCB0aGUgOmF0dHI6YF9fbG9hZGVyX19gCi0gICAgYXR0cmlidXRlIG9uIGxvYWRlZCBtb2R1bGVzLiBJZiB0aGUgYXR0cmlidXRlIGlzIGFscmVhZHkgc2V0IHRoZSBkZWNvcmF0b3IKLSAgICBkb2VzIG5vdGhpbmcuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudCB0byB0aGUKLSAgICB3cmFwcGVkIG1ldGhvZCAoaS5lLiBgYHNlbGZgYCkgaXMgd2hhdCA6YXR0cjpgX19sb2FkZXJfX2Agc2hvdWxkIGJlIHNldCB0by4KKyAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKKyAgIHRvIHNldCB0aGUgOmF0dHI6YF9fbG9hZGVyX19gCisgICBhdHRyaWJ1dGUgb24gdGhlIHJldHVybmVkIG1vZHVsZS4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHJlYWR5IHNldCB0aGUKKyAgIGRlY29yYXRvciBkb2VzIG5vdGhpbmcuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudCB0bworICAgdGhlIHdyYXBwZWQgbWV0aG9kIChpLmUuIGBgc2VsZmBgKSBpcyB3aGF0IDphdHRyOmBfX2xvYWRlcl9fYCBzaG91bGQgYmUgc2V0CisgICB0by4KIAogICAgLi4gbm90ZTo6CisgICAgICBBcyB0aGlzIGRlY29yYXRvciBzZXRzIDphdHRyOmBfX2xvYWRlcl9fYCBhZnRlciBsb2FkaW5nIHRoZSBtb2R1bGUsIGl0IGlzCisgICAgICByZWNvbW1lbmRlZCB0byB1c2UgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzYCBpbnN0ZWFkCisgICAgICB3aGVuIGFwcHJvcHJpYXRlLgogCi0gICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IDpmdW5jOmBtb2R1bGVfZm9yX2xvYWRlcmAgYmUgdXNlZCBvdmVyIHRoaXMKLSAgICAgIGRlY29yYXRvciBhcyBpdCBzdWJzdW1lcyB0aGlzIGZ1bmN0aW9uYWxpdHkuCi0KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTZXQgYGBfX2xvYWRlcl9fYGAgaWYgc2V0IHRvIGBgTm9uZWBgLCBhcyBpZiB0aGUgYXR0cmlidXRlIGRvZXMgbm90CisgICAgICBleGlzdC4KIAogLi4gZGVjb3JhdG9yOjogc2V0X3BhY2thZ2UKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgdG8gc2V0IHRoZSA6YXR0cjpgX19wYWNrYWdlX19gCi0gICAgYXR0cmlidXRlIG9uIHRoZSBtb2R1bGUgcmV0dXJuZWQgYnkgdGhlIGxvYWRlci4gSWYgOmF0dHI6YF9fcGFja2FnZV9fYCBpcwotICAgIHNldCBhbmQgaGFzIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5vbmVgYCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkLgotICAgIE5vdGUgdGhhdCB0aGUgbW9kdWxlIHJldHVybmVkIGJ5IHRoZSBsb2FkZXIgaXMgd2hhdCBoYXMgdGhlIGF0dHJpYnV0ZQotICAgIHNldCBvbiBhbmQgbm90IHRoZSBtb2R1bGUgZm91bmQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4KLQotICAgIFJlbGlhbmNlIG9uIHRoaXMgZGVjb3JhdG9yIGlzIGRpc2NvdXJhZ2VkIHdoZW4gaXQgaXMgcG9zc2libGUgdG8gc2V0Ci0gICAgOmF0dHI6YF9fcGFja2FnZV9fYCBiZWZvcmUgaW1wb3J0aW5nLiBCeQotICAgIHNldHRpbmcgaXQgYmVmb3JlaGFuZCB0aGUgY29kZSBmb3IgdGhlIG1vZHVsZSBpcyBleGVjdXRlZCB3aXRoIHRoZQotICAgIGF0dHJpYnV0ZSBzZXQgYW5kIHRodXMgY2FuIGJlIHVzZWQgYnkgZ2xvYmFsIGxldmVsIGNvZGUgZHVyaW5nCi0gICAgaW5pdGlhbGl6YXRpb24uCisgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIHRvIHNldCB0aGUgOmF0dHI6YF9fcGFja2FnZV9fYCBhdHRyaWJ1dGUgb24gdGhlIHJldHVybmVkIG1vZHVsZS4gSWYgOmF0dHI6YF9fcGFja2FnZV9fYAorICAgaXMgc2V0IGFuZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuIGBgTm9uZWBgIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuCiAKICAgIC4uIG5vdGU6OgotCi0gICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IDpmdW5jOmBtb2R1bGVfZm9yX2xvYWRlcmAgYmUgdXNlZCBvdmVyIHRoaXMKLSAgICAgIGRlY29yYXRvciBhcyBpdCBzdWJzdW1lcyB0aGlzIGZ1bmN0aW9uYWxpdHkuCisgICAgICBBcyB0aGlzIGRlY29yYXRvciBzZXRzIDphdHRyOmBfX3BhY2thZ2VfX2AgYWZ0ZXIgbG9hZGluZyB0aGUgbW9kdWxlLCBpdCBpcworICAgICAgcmVjb21tZW5kZWQgdG8gdXNlIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5pbml0X21vZHVsZV9hdHRyc2AgaW5zdGVhZAorICAgICAgd2hlbiBhcHByb3ByaWF0ZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0IGIvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKaW5kZXggNjI1ZWE2ZS4uNDFjNjFiNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKQEAgLTE3Myw4ICsxNzMsOSBAQAogCiAgICAuLiBub3RlOjoKIAotICAgICAgOmZ1bmM6YGdldG1lbWJlcnNgIGRvZXMgbm90IHJldHVybiBtZXRhY2xhc3MgYXR0cmlidXRlcyB3aGVuIHRoZSBhcmd1bWVudAotICAgICAgaXMgYSBjbGFzcyAodGhpcyBiZWhhdmlvciBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgOmZ1bmM6YGRpcmAgZnVuY3Rpb24pLgorICAgICAgOmZ1bmM6YGdldG1lbWJlcnNgIHdpbGwgb25seSByZXR1cm4gY2xhc3MgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZQorICAgICAgbWV0YWNsYXNzIHdoZW4gdGhlIGFyZ3VtZW50IGlzIGEgY2xhc3MgYW5kIHRob3NlIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuCisgICAgICBsaXN0ZWQgaW4gdGhlIG1ldGFjbGFzcycgY3VzdG9tIDptZXRoOmBfX2Rpcl9fYC4KIAogCiAuLiBmdW5jdGlvbjo6IGdldG1vZHVsZWluZm8ocGF0aCkKQEAgLTc5Nyw2ICs3OTgsMjMgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKKy4uIGZ1bmN0aW9uOjogdW53cmFwKGZ1bmMsICosIHN0b3A9Tm9uZSkKKworICAgR2V0IHRoZSBvYmplY3Qgd3JhcHBlZCBieSAqZnVuYyouIEl0IGZvbGxvd3MgdGhlIGNoYWluIG9mIDphdHRyOmBfX3dyYXBwZWRfX2AKKyAgIGF0dHJpYnV0ZXMgcmV0dXJuaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgY2hhaW4uCisKKyAgICpzdG9wKiBpcyBhbiBvcHRpb25hbCBjYWxsYmFjayBhY2NlcHRpbmcgYW4gb2JqZWN0IGluIHRoZSB3cmFwcGVyIGNoYWluCisgICBhcyBpdHMgc29sZSBhcmd1bWVudCB0aGF0IGFsbG93cyB0aGUgdW53cmFwcGluZyB0byBiZSB0ZXJtaW5hdGVkIGVhcmx5IGlmCisgICB0aGUgY2FsbGJhY2sgcmV0dXJucyBhIHRydWUgdmFsdWUuIElmIHRoZSBjYWxsYmFjayBuZXZlciByZXR1cm5zIGEgdHJ1ZQorICAgdmFsdWUsIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgY2hhaW4gaXMgcmV0dXJuZWQgYXMgdXN1YWwuIEZvciBleGFtcGxlLAorICAgOmZ1bmM6YHNpZ25hdHVyZWAgdXNlcyB0aGlzIHRvIHN0b3AgdW53cmFwcGluZyBpZiBhbnkgb2JqZWN0IGluIHRoZQorICAgY2hhaW4gaGFzIGEgYGBfX3NpZ25hdHVyZV9fYGAgYXR0cmlidXRlIGRlZmluZWQuCisKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZiBhIGN5Y2xlIGlzIGVuY291bnRlcmVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBfaW5zcGVjdC1zdGFjazoKIAogVGhlIGludGVycHJldGVyIHN0YWNrCkBAIC04MjksNiArODQ3LDEwIEBACiAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgZGVsIGZyYW1lCiAKKyAgIElmIHlvdSB3YW50IHRvIGtlZXAgdGhlIGZyYW1lIGFyb3VuZCAoZm9yIGV4YW1wbGUgdG8gcHJpbnQgYSB0cmFjZWJhY2sKKyAgIGxhdGVyKSwgeW91IGNhbiBhbHNvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgYnkgdXNpbmcgdGhlCisgICA6bWV0aDpgZnJhbWUuY2xlYXJgIG1ldGhvZC4KKwogVGhlIG9wdGlvbmFsICpjb250ZXh0KiBhcmd1bWVudCBzdXBwb3J0ZWQgYnkgbW9zdCBvZiB0aGVzZSBmdW5jdGlvbnMgc3BlY2lmaWVzCiB0aGUgbnVtYmVyIG9mIGxpbmVzIG9mIGNvbnRleHQgdG8gcmV0dXJuLCB3aGljaCBhcmUgY2VudGVyZWQgYXJvdW5kIHRoZSBjdXJyZW50CiBsaW5lLgpAQCAtOTg1LDMgKzEwMDcsMjIgQEAKICAgICAgIHJldHVybiBhbiBlbXB0eSBkaWN0aW9uYXJ5LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworCisuLiBfaW5zcGVjdC1tb2R1bGUtY2xpOgorCitDb21tYW5kIExpbmUgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBpbnNwZWN0YCBtb2R1bGUgYWxzbyBwcm92aWRlcyBhIGJhc2ljIGludHJvc3BlY3Rpb24gY2FwYWJpbGl0eQorZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisuLiBwcm9ncmFtOjogaW5zcGVjdAorCitCeSBkZWZhdWx0LCBhY2NlcHRzIHRoZSBuYW1lIG9mIGEgbW9kdWxlIGFuZCBwcmludHMgdGhlIHNvdXJjZSBvZiB0aGF0Cittb2R1bGUuIEEgY2xhc3Mgb3IgZnVuY3Rpb24gd2l0aGluIHRoZSBtb2R1bGUgY2FuIGJlIHByaW50ZWQgaW5zdGVhZCBieQorYXBwZW5kZWQgYSBjb2xvbiBhbmQgdGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0LgorCisuLiBjbWRvcHRpb246OiAtLWRldGFpbHMKKworICAgUHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHNvdXJjZSBjb2RlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pby5yc3QgYi9Eb2MvbGlicmFyeS9pby5yc3QKaW5kZXggNzMyODhmOC4uNzkyNWUzMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW8ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lvLnJzdApAQCAtMjgzLDEwICsyODMsMTAgQEAKICAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyZWFtIGNhbiBiZSByZWFkIGZyb20uICBJZiBGYWxzZSwgOm1ldGg6YHJlYWRgCiAgICAgICB3aWxsIHJhaXNlIDpleGM6YE9TRXJyb3JgLgogCi0gICAuLiBtZXRob2Q6OiByZWFkbGluZShsaW1pdD0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiBvbmUgbGluZSBmcm9tIHRoZSBzdHJlYW0uICBJZiAqbGltaXQqIGlzIHNwZWNpZmllZCwgYXQKLSAgICAgIG1vc3QgKmxpbWl0KiBieXRlcyB3aWxsIGJlIHJlYWQuCisgICAgICBSZWFkIGFuZCByZXR1cm4gb25lIGxpbmUgZnJvbSB0aGUgc3RyZWFtLiAgSWYgKnNpemUqIGlzIHNwZWNpZmllZCwgYXQKKyAgICAgIG1vc3QgKnNpemUqIGJ5dGVzIHdpbGwgYmUgcmVhZC4KIAogICAgICAgVGhlIGxpbmUgdGVybWluYXRvciBpcyBhbHdheXMgYGBiJ1xuJ2BgIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0IGZpbGVzLAogICAgICAgdGhlICpuZXdsaW5lcyogYXJndW1lbnQgdG8gOmZ1bmM6YG9wZW5gIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZQpAQCAtMzY2LDE0ICszNjYsMTQgQEAKICAgIEluIGFkZGl0aW9uIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIGZyb20gOmNsYXNzOmBJT0Jhc2VgLAogICAgOmNsYXNzOmBSYXdJT0Jhc2VgIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAotICAgLi4gbWV0aG9kOjogcmVhZChuPS0xKQorICAgLi4gbWV0aG9kOjogcmVhZChzaXplPS0xKQogCi0gICAgICBSZWFkIHVwIHRvICpuKiBieXRlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybiB0aGVtLiAgQXMgYSBjb252ZW5pZW5jZSwKLSAgICAgIGlmICpuKiBpcyB1bnNwZWNpZmllZCBvciAtMSwgOm1ldGg6YHJlYWRhbGxgIGlzIGNhbGxlZC4gIE90aGVyd2lzZSwKLSAgICAgIG9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIGV2ZXIgbWFkZS4gIEZld2VyIHRoYW4gKm4qIGJ5dGVzIG1heSBiZQotICAgICAgcmV0dXJuZWQgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FsbCByZXR1cm5zIGZld2VyIHRoYW4gKm4qIGJ5dGVzLgorICAgICAgUmVhZCB1cCB0byAqc2l6ZSogYnl0ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm4gdGhlbS4gIEFzIGEgY29udmVuaWVuY2UsCisgICAgICBpZiAqc2l6ZSogaXMgdW5zcGVjaWZpZWQgb3IgLTEsIDptZXRoOmByZWFkYWxsYCBpcyBjYWxsZWQuICBPdGhlcndpc2UsCisgICAgICBvbmx5IG9uZSBzeXN0ZW0gY2FsbCBpcyBldmVyIG1hZGUuICBGZXdlciB0aGFuICpzaXplKiBieXRlcyBtYXkgYmUKKyAgICAgIHJldHVybmVkIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbGwgcmV0dXJucyBmZXdlciB0aGFuICpzaXplKiBieXRlcy4KIAotICAgICAgSWYgMCBieXRlcyBhcmUgcmV0dXJuZWQsIGFuZCAqbiogd2FzIG5vdCAwLCB0aGlzIGluZGljYXRlcyBlbmQgb2YgZmlsZS4KKyAgICAgIElmIDAgYnl0ZXMgYXJlIHJldHVybmVkLCBhbmQgKnNpemUqIHdhcyBub3QgMCwgdGhpcyBpbmRpY2F0ZXMgZW5kIG9mIGZpbGUuCiAgICAgICBJZiB0aGUgb2JqZWN0IGlzIGluIG5vbi1ibG9ja2luZyBtb2RlIGFuZCBubyBieXRlcyBhcmUgYXZhaWxhYmxlLAogICAgICAgYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKQEAgLTQ0MiwxMCArNDQyLDEwIEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCi0gICAuLiBtZXRob2Q6OiByZWFkKG49LTEpCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqbiogYnl0ZXMuICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgYGBOb25lYGAsIG9yCi0gICAgICBuZWdhdGl2ZSwgZGF0YSBpcyByZWFkIGFuZCByZXR1cm5lZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIEFuIGVtcHR5CisgICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKnNpemUqIGJ5dGVzLiAgSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGBgTm9uZWBgLAorICAgICAgb3IgbmVnYXRpdmUsIGRhdGEgaXMgcmVhZCBhbmQgcmV0dXJuZWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuICBBbiBlbXB0eQogICAgICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0IGlzIHJldHVybmVkIGlmIHRoZSBzdHJlYW0gaXMgYWxyZWFkeSBhdCBFT0YuCiAKICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBwb3NpdGl2ZSwgYW5kIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgbm90CkBAIC00NTcsOSArNDU3LDkgQEAKICAgICAgIEEgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBpbgogICAgICAgbm9uIGJsb2NraW5nLW1vZGUsIGFuZCBoYXMgbm8gZGF0YSBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC4KIAotICAgLi4gbWV0aG9kOjogcmVhZDEobj0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQxKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqbiogYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgY2FsbCB0byB0aGUgdW5kZXJseWluZworICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpzaXplKiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nCiAgICAgICByYXcgc3RyZWFtJ3MgOm1ldGg6YH5SYXdJT0Jhc2UucmVhZGAgbWV0aG9kLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdQogICAgICAgYXJlIGltcGxlbWVudGluZyB5b3VyIG93biBidWZmZXJpbmcgb24gdG9wIG9mIGEgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAKICAgICAgIG9iamVjdC4KQEAgLTUyMiw2ICs1MjIsOCBAQAogICAgOm1vZDpgb3Mub3BlbmAgYXMgKm9wZW5lciogcmVzdWx0cyBpbiBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gcGFzc2luZwogICAgYGBOb25lYGApLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKwogICAgU2VlIHRoZSA6ZnVuYzpgb3BlbmAgYnVpbHQtaW4gZnVuY3Rpb24gZm9yIGV4YW1wbGVzIG9uIHVzaW5nIHRoZSAqb3BlbmVyKgogICAgcGFyYW1ldGVyLgogCkBAIC01MjksNiArNTMxLDkgQEAKICAgICAgIFRoZSAqb3BlbmVyKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgogICAgICAgVGhlIGBgJ3gnYGAgbW9kZSB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgZmlsZSBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAgICBJbiBhZGRpdGlvbiB0byB0aGUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcyBmcm9tIDpjbGFzczpgSU9CYXNlYCBhbmQKICAgIDpjbGFzczpgUmF3SU9CYXNlYCwgOmNsYXNzOmBGaWxlSU9gIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZGF0YQogICAgYXR0cmlidXRlczoKQEAgLTYwMSwyMSArNjA2LDIxIEBACiAgICA6Y2xhc3M6YEJ1ZmZlcmVkUmVhZGVyYCBwcm92aWRlcyBvciBvdmVycmlkZXMgdGhlc2UgbWV0aG9kcyBpbiBhZGRpdGlvbiB0bwogICAgdGhvc2UgZnJvbSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYCBhbmQgOmNsYXNzOmBJT0Jhc2VgOgogCi0gICAuLiBtZXRob2Q6OiBwZWVrKFtuXSkKKyAgIC4uIG1ldGhvZDo6IHBlZWsoW3NpemVdKQogCiAgICAgICBSZXR1cm4gYnl0ZXMgZnJvbSB0aGUgc3RyZWFtIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbi4gIEF0IG1vc3Qgb25lCiAgICAgICBzaW5nbGUgcmVhZCBvbiB0aGUgcmF3IHN0cmVhbSBpcyBkb25lIHRvIHNhdGlzZnkgdGhlIGNhbGwuIFRoZSBudW1iZXIgb2YKICAgICAgIGJ5dGVzIHJldHVybmVkIG1heSBiZSBsZXNzIG9yIG1vcmUgdGhhbiByZXF1ZXN0ZWQuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQoW25dKQorICAgLi4gbWV0aG9kOjogcmVhZChbc2l6ZV0pCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiAqbiogYnl0ZXMsIG9yIGlmICpuKiBpcyBub3QgZ2l2ZW4gb3IgbmVnYXRpdmUsIHVudGlsIEVPRgotICAgICAgb3IgaWYgdGhlIHJlYWQgY2FsbCB3b3VsZCBibG9jayBpbiBub24tYmxvY2tpbmcgbW9kZS4KKyAgICAgIFJlYWQgYW5kIHJldHVybiAqc2l6ZSogYnl0ZXMsIG9yIGlmICpzaXplKiBpcyBub3QgZ2l2ZW4gb3IgbmVnYXRpdmUsIHVudGlsCisgICAgICBFT0Ygb3IgaWYgdGhlIHJlYWQgY2FsbCB3b3VsZCBibG9jayBpbiBub24tYmxvY2tpbmcgbW9kZS4KIAotICAgLi4gbWV0aG9kOjogcmVhZDEobikKKyAgIC4uIG1ldGhvZDo6IHJlYWQxKHNpemUpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqbiogYnl0ZXMgd2l0aCBvbmx5IG9uZSBjYWxsIG9uIHRoZSByYXcgc3RyZWFtLiAgSWYKLSAgICAgIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCBvbmx5IGJ1ZmZlcmVkIGJ5dGVzIGFyZSByZXR1cm5lZC4KKyAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqc2l6ZSogYnl0ZXMgd2l0aCBvbmx5IG9uZSBjYWxsIG9uIHRoZSByYXcgc3RyZWFtLgorICAgICAgSWYgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIG9ubHkgYnVmZmVyZWQgYnl0ZXMgYXJlIHJldHVybmVkLgogICAgICAgT3RoZXJ3aXNlLCBvbmUgcmF3IHN0cmVhbSByZWFkIGNhbGwgaXMgbWFkZS4KIAogCkBAIC03MzQsMTcgKzczOSwxNyBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAotICAgLi4gbWV0aG9kOjogcmVhZChuKQorICAgLi4gbWV0aG9kOjogcmVhZChzaXplKQogCi0gICAgICBSZWFkIGFuZCByZXR1cm4gYXQgbW9zdCAqbiogY2hhcmFjdGVycyBmcm9tIHRoZSBzdHJlYW0gYXMgYSBzaW5nbGUKLSAgICAgIDpjbGFzczpgc3RyYC4gIElmICpuKiBpcyBuZWdhdGl2ZSBvciBgYE5vbmVgYCwgcmVhZHMgdW50aWwgRU9GLgorICAgICAgUmVhZCBhbmQgcmV0dXJuIGF0IG1vc3QgKnNpemUqIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RyZWFtIGFzIGEgc2luZ2xlCisgICAgICA6Y2xhc3M6YHN0cmAuICBJZiAqc2l6ZSogaXMgbmVnYXRpdmUgb3IgYGBOb25lYGAsIHJlYWRzIHVudGlsIEVPRi4KIAotICAgLi4gbWV0aG9kOjogcmVhZGxpbmUobGltaXQ9LTEpCisgICAuLiBtZXRob2Q6OiByZWFkbGluZShzaXplPS0xKQogCiAgICAgICBSZWFkIHVudGlsIG5ld2xpbmUgb3IgRU9GIGFuZCByZXR1cm4gYSBzaW5nbGUgYGBzdHJgYC4gIElmIHRoZSBzdHJlYW0gaXMKICAgICAgIGFscmVhZHkgYXQgRU9GLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAKLSAgICAgIElmICpsaW1pdCogaXMgc3BlY2lmaWVkLCBhdCBtb3N0ICpsaW1pdCogY2hhcmFjdGVycyB3aWxsIGJlIHJlYWQuCisgICAgICBJZiAqc2l6ZSogaXMgc3BlY2lmaWVkLCBhdCBtb3N0ICpzaXplKiBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVhZC4KIAogICAgLi4gbWV0aG9kOjogc2VlayhvZmZzZXQsIHdoZW5jZT1TRUVLX1NFVCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdCBiL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QKaW5kZXggNzY5YWY3Mi4uODI2ZTRhYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0CkBAIC0xNjEsNyArMTYxLDE2IEBACiAgICAuLiBhdHRyaWJ1dGU6OiBpc19wcml2YXRlCiAKICAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHJpdmF0ZSBuZXR3b3Jrcy4gIFNlZQotICAgICAgOlJGQzpgMTkxOGAgKGZvciBJUHY0KSBvciA6UkZDOmA0MTkzYCAoZm9yIElQdjYpLgorICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkgKGZvciBJUHY0KSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeQorICAgICAgKGZvciBJUHY2KS4KKworICAgLi4gYXR0cmlidXRlOjogaXNfZ2xvYmFsCisKKyAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLiAgU2VlCisgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSAoZm9yIElQdjQpIG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5CisgICAgICAoZm9yIElQdjYpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogICAgLi4gYXR0cmlidXRlOjogaXNfdW5zcGVjaWZpZWQKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvanNvbi5yc3QgYi9Eb2MvbGlicmFyeS9qc29uLnJzdAppbmRleCBmNjUyMDM5Li41ZDk3ZWU4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9qc29uLnJzdAorKysgYi9Eb2MvbGlicmFyeS9qc29uLnJzdApAQCAtNDIsOCArNDIsNyBAQAogUHJldHR5IHByaW50aW5nOjoKIAogICAgID4+PiBpbXBvcnQganNvbgotICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLAotICAgIC4uLiAgICAgICAgICAgICAgICAgIGluZGVudD00LCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKSkKKyAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpKQogICAgIHsKICAgICAgICAgIjQiOiA1LAogICAgICAgICAiNiI6IDcKQEAgLTE1OCwxNSArMTU3LDEzIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQWxsb3cgc3RyaW5ncyBmb3IgKmluZGVudCogaW4gYWRkaXRpb24gdG8gaW50ZWdlcnMuCiAKLSAgIC4uIG5vdGU6OgorICAgSWYgc3BlY2lmaWVkLCAqc2VwYXJhdG9ycyogc2hvdWxkIGJlIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKWBgCisgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAotICAgICAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUgb3V0cHV0IG1pZ2h0IGluY2x1ZGUKLSAgICAgIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2hlbiAqaW5kZW50KiBpcyBzcGVjaWZpZWQuICBZb3UgY2FuIHVzZQotICAgICAgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KLQotICAgSWYgKnNlcGFyYXRvcnMqIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZSwgdGhlbiBpdAotICAgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLiAgYGAoJywnLAotICAgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBVc2UgYGAoJywnLCAnOiAnKWBgIGFzIGRlZmF1bHQgaWYgKmluZGVudCogaXMgbm90IGBgTm9uZWBgLgogCiAgICAqZGVmYXVsdChvYmopKiBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uIG9mCiAgICAqb2JqKiBvciByYWlzZSA6ZXhjOmBUeXBlRXJyb3JgLiAgVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgLgpAQCAtMjQ4LDYgKzI0NSw4IEBACiAgICBrd2FyZzsgb3RoZXJ3aXNlIDpjbGFzczpgSlNPTkRlY29kZXJgIGlzIHVzZWQuICBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzCiAgICB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3Igb2YgdGhlIGNsYXNzLgogCisgICBJZiB0aGUgZGF0YSBiZWluZyBkZXNlcmlhbGl6ZWQgaXMgbm90IGEgdmFsaWQgSlNPTiBkb2N1bWVudCwgYQorICAgOmV4YzpgVmFsdWVFcnJvcmAgd2lsbCBiZSByYWlzZWQuCiAKIC4uIGZ1bmN0aW9uOjogbG9hZHMocywgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsIHBhcnNlX2Zsb2F0PU5vbmUsIHBhcnNlX2ludD1Ob25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCBvYmplY3RfcGFpcnNfaG9vaz1Ob25lLCAqKmt3KQogCkBAIC0yNTcsNiArMjU2LDggQEAKICAgIFRoZSBvdGhlciBhcmd1bWVudHMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBsb2FkYCwgZXhjZXB0CiAgICAqZW5jb2RpbmcqIHdoaWNoIGlzIGlnbm9yZWQgYW5kIGRlcHJlY2F0ZWQuCiAKKyAgIElmIHRoZSBkYXRhIGJlaW5nIGRlc2VyaWFsaXplZCBpcyBub3QgYSB2YWxpZCBKU09OIGRvY3VtZW50LCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogRW5jb2RlcnMgYW5kIERlY29kZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM1NCwyMyArMzU1LDI2IEBACiAKICAgIC4uIF9weS10by1qc29uLXRhYmxlOgogCi0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IFB5dGhvbiAgICAgICAgICAgIHwgSlNPTiAgICAgICAgICB8Ci0gICArPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCi0gICB8IGRpY3QgICAgICAgICAgICAgIHwgb2JqZWN0ICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IGxpc3QsIHR1cGxlICAgICAgIHwgYXJyYXkgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IHN0ciAgICAgICAgICAgICAgIHwgc3RyaW5nICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IGludCwgZmxvYXQgICAgICAgIHwgbnVtYmVyICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IFRydWUgICAgICAgICAgICAgIHwgdHJ1ZSAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IEZhbHNlICAgICAgICAgICAgIHwgZmFsc2UgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICB8IE5vbmUgICAgICAgICAgICAgIHwgbnVsbCAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IFB5dGhvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSlNPTiAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCisgICB8IGRpY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb2JqZWN0ICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IGxpc3QsIHR1cGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJyYXkgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IHN0ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IGludCwgZmxvYXQsIGludC0gJiBmbG9hdC1kZXJpdmVkIEVudW1zIHwgbnVtYmVyICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IFRydWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJ1ZSAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IEZhbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmFsc2UgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICB8IE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbnVsbCAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciBpbnQtIGFuZCBmbG9hdC1kZXJpdmVkIEVudW0gY2xhc3Nlcy4KIAogICAgVG8gZXh0ZW5kIHRoaXMgdG8gcmVjb2duaXplIG90aGVyIG9iamVjdHMsIHN1YmNsYXNzIGFuZCBpbXBsZW1lbnQgYQogICAgOm1ldGg6YGRlZmF1bHRgIG1ldGhvZCB3aXRoIGFub3RoZXIgbWV0aG9kIHRoYXQgcmV0dXJucyBhIHNlcmlhbGl6YWJsZSBvYmplY3QKQEAgLTQxMCwxNSArNDE0LDEzIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQWxsb3cgc3RyaW5ncyBmb3IgKmluZGVudCogaW4gYWRkaXRpb24gdG8gaW50ZWdlcnMuCiAKLSAgIC4uIG5vdGU6OgotCi0gICAgICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZQotICAgICAgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuICppbmRlbnQqIGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgotCiAgICBJZiBzcGVjaWZpZWQsICpzZXBhcmF0b3JzKiBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKLSAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYC4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04KLSAgIHJlcHJlc2VudGF0aW9uLCB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCisgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFVzZSBgYCgnLCcsICc6ICcpYGAgYXMgZGVmYXVsdCBpZiAqaW5kZW50KiBpcyBub3QgYGBOb25lYGAuCiAKICAgIElmIHNwZWNpZmllZCwgKmRlZmF1bHQqIGlzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IGNhbid0CiAgICBvdGhlcndpc2UgYmUgc2VyaWFsaXplZC4gIEl0IHNob3VsZCByZXR1cm4gYSBKU09OIGVuY29kYWJsZSB2ZXJzaW9uIG9mIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0IGIvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0CmluZGV4IGMwMGI1MzIuLjhjMTVlZTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKQEAgLTgwLDExICs4MCwyMyBAQAogCiAuLiBmdW5jdGlvbjo6IGZpbGVDb25maWcoZm5hbWUsIGRlZmF1bHRzPU5vbmUsIGRpc2FibGVfZXhpc3RpbmdfbG9nZ2Vycz1UcnVlKQogCi0gICBSZWFkcyB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGZyb20gYSA6bW9kOmBjb25maWdwYXJzZXJgXC1mb3JtYXQgZmlsZQotICAgbmFtZWQgKmZuYW1lKi4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgZnJvbSBhbgotICAgYXBwbGljYXRpb24sIGFsbG93aW5nIGFuIGVuZCB1c2VyIHRvIHNlbGVjdCBmcm9tIHZhcmlvdXMgcHJlLWNhbm5lZAotICAgY29uZmlndXJhdGlvbnMgKGlmIHRoZSBkZXZlbG9wZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gcHJlc2VudCB0aGUgY2hvaWNlcwotICAgYW5kIGxvYWQgdGhlIGNob3NlbiBjb25maWd1cmF0aW9uKS4KKyAgIFJlYWRzIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIDptb2Q6YGNvbmZpZ3BhcnNlcmBcLWZvcm1hdCBmaWxlLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgZnJvbSBhbiBhcHBsaWNhdGlvbiwgYWxsb3dpbmcgYW4KKyAgIGVuZCB1c2VyIHRvIHNlbGVjdCBmcm9tIHZhcmlvdXMgcHJlLWNhbm5lZCBjb25maWd1cmF0aW9ucyAoaWYgdGhlIGRldmVsb3BlcgorICAgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gcHJlc2VudCB0aGUgY2hvaWNlcyBhbmQgbG9hZCB0aGUgY2hvc2VuCisgICBjb25maWd1cmF0aW9uKS4KKworICAgOnBhcmFtIGZuYW1lOiBBIGZpbGVuYW1lLCBvciBhIGZpbGUtbGlrZSBvYmplY3QsIG9yIGFuIGluc3RhbmNlIGRlcml2ZWQKKyAgICAgICAgICAgICAgICAgZnJvbSA6Y2xhc3M6YH5jb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VyYC4gSWYgYQorICAgICAgICAgICAgICAgICBgYFJhd0NvbmZpZ1BhcnNlcmBgLWRlcml2ZWQgaW5zdGFuY2UgaXMgcGFzc2VkLCBpdCBpcyB1c2VkIGFzCisgICAgICAgICAgICAgICAgIGlzLiBPdGhlcndpc2UsIGEgOmNsYXNzOmB+Y29uZmlncGFyc2VyLkNvbmZpZ3BhcnNlcmAgaXMKKyAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVhZCBieSBpdCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkIGluIGBgZm5hbWVgYC4gSWYgdGhhdCBoYXMgYSA6bWV0aDpgcmVhZGxpbmVgCisgICAgICAgICAgICAgICAgIG1ldGhvZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBhIGZpbGUtbGlrZSBvYmplY3QgYW5kIHJlYWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgOm1ldGg6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRfZmlsZWA7IG90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgaXQgaXMgYXNzdW1lZCB0byBiZSBhIGZpbGVuYW1lIGFuZCBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgOm1ldGg6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRgLgorCiAKICAgIDpwYXJhbSBkZWZhdWx0czogRGVmYXVsdHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDb25maWdQYXJzZXIgY2FuIGJlIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGFyZ3VtZW50LgpAQCAtOTgsOCArMTEwLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciBhbmNlc3RvcnMgYXJlIGV4cGxpY2l0bHkgbmFtZWQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIDpjbGFzczpgfmNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgIGlzCisgICAgICBub3cgYWNjZXB0ZWQgYXMgYSB2YWx1ZSBmb3IgYGBmbmFtZWBgLiBUaGlzIGZhY2lsaXRhdGVzOgogCi0uLiBmdW5jdGlvbjo6IGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCkKKyAgICAgICogVXNlIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlIHdoZXJlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBpcyBqdXN0IHBhcnQKKyAgICAgICAgb2YgdGhlIG92ZXJhbGwgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi4KKyAgICAgICogVXNlIG9mIGEgY29uZmlndXJhdGlvbiByZWFkIGZyb20gYSBmaWxlLCBhbmQgdGhlbiBtb2RpZmllZCBieSB0aGUgdXNpbmcKKyAgICAgICAgYXBwbGljYXRpb24gKGUuZy4gYmFzZWQgb24gY29tbWFuZC1saW5lIHBhcmFtZXRlcnMgb3Igb3RoZXIgYXNwZWN0cworICAgICAgICBvZiB0aGUgcnVudGltZSBlbnZpcm9ubWVudCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgYGZpbGVDb25maWdgYC4KKworLi4gZnVuY3Rpb246OiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQsIHZlcmlmeT1Ob25lKQogCiAgICBTdGFydHMgdXAgYSBzb2NrZXQgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCwgYW5kIGxpc3RlbnMgZm9yIG5ldwogICAgY29uZmlndXJhdGlvbnMuIElmIG5vIHBvcnQgaXMgc3BlY2lmaWVkLCB0aGUgbW9kdWxlJ3MgZGVmYXVsdApAQCAtMTEwLDYgKzEzMSwxNyBAQAogICAgOm1ldGg6YH50aHJlYWRpbmcuVGhyZWFkLmpvaW5gIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwKICAgIGNhbGwgOmZ1bmM6YHN0b3BMaXN0ZW5pbmdgLgogCisgICBUaGUgYGB2ZXJpZnlgYCBhcmd1bWVudCwgaWYgc3BlY2lmaWVkLCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCBzaG91bGQKKyAgIHZlcmlmeSB3aGV0aGVyIGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgc29ja2V0IGFyZSB2YWxpZCBhbmQgc2hvdWxkIGJlCisgICBwcm9jZXNzZWQuIFRoaXMgY291bGQgYmUgZG9uZSBieSBlbmNyeXB0aW5nIGFuZC9vciBzaWduaW5nIHdoYXQgaXMgc2VudAorICAgYWNyb3NzIHRoZSBzb2NrZXQsIHN1Y2ggdGhhdCB0aGUgYGB2ZXJpZnlgYCBjYWxsYWJsZSBjYW4gcGVyZm9ybQorICAgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBhbmQvb3IgZGVjcnlwdGlvbi4gVGhlIGBgdmVyaWZ5YGAgY2FsbGFibGUgaXMgY2FsbGVkCisgICB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgc29ja2V0IC0gYW5kIHNob3VsZAorICAgcmV0dXJuIHRoZSBieXRlcyB0byBiZSBwcm9jZXNzZWQsIG9yIE5vbmUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYnl0ZXMgc2hvdWxkCisgICBiZSBkaXNjYXJkZWQuIFRoZSByZXR1cm5lZCBieXRlcyBjb3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcGFzc2VkIGluIGJ5dGVzCisgICAoZS5nLiB3aGVuIG9ubHkgdmVyaWZpY2F0aW9uIGlzIGRvbmUpLCBvciB0aGV5IGNvdWxkIGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50CisgICAocGVyaGFwcyBpZiBkZWNyeXB0aW9uIHdlcmUgcGVyZm9ybWVkKS4KKwogICAgVG8gc2VuZCBhIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHNvY2tldCwgcmVhZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZAogICAgc2VuZCBpdCB0byB0aGUgc29ja2V0IGFzIGEgc3RyaW5nIG9mIGJ5dGVzIHByZWNlZGVkIGJ5IGEgZm91ci1ieXRlIGxlbmd0aAogICAgc3RyaW5nIHBhY2tlZCBpbiBiaW5hcnkgdXNpbmcgYGBzdHJ1Y3QucGFjaygnPkwnLCBuKWBgLgpAQCAtMTI2LDcgKzE1OCwxMiBAQAogICAgICAgOmZ1bmM6YGxpc3RlbmAgc29ja2V0IGFuZCBzZW5kaW5nIGEgY29uZmlndXJhdGlvbiB3aGljaCBydW5zIHdoYXRldmVyCiAgICAgICBjb2RlIHRoZSBhdHRhY2tlciB3YW50cyB0byBoYXZlIGV4ZWN1dGVkIGluIHRoZSB2aWN0aW0ncyBwcm9jZXNzLiBUaGlzIGlzCiAgICAgICBlc3BlY2lhbGx5IGVhc3kgdG8gZG8gaWYgdGhlIGRlZmF1bHQgcG9ydCBpcyB1c2VkLCBidXQgbm90IGhhcmQgZXZlbiBpZiBhCi0gICAgICBkaWZmZXJlbnQgcG9ydCBpcyB1c2VkKS4KKyAgICAgIGRpZmZlcmVudCBwb3J0IGlzIHVzZWQpLiBUbyBhdm9pZCB0aGUgcmlzayBvZiB0aGlzIGhhcHBlbmluZywgdXNlIHRoZQorICAgICAgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byA6ZnVuYzpgbGlzdGVuYCB0byBwcmV2ZW50IHVucmVjb2duaXNlZAorICAgICAgY29uZmlndXJhdGlvbnMgZnJvbSBiZWluZyBhcHBsaWVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4KKyAgICAgIFRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50IHdhcyBhZGRlZC4KIAogLi4gZnVuY3Rpb246OiBzdG9wTGlzdGVuaW5nKCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdAppbmRleCA4MWFkZGIzLi5mNTIwNjBhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdApAQCAtMzAwLDcgKzMwMCw3IEBACiB0aW1lZCBpbnRlcnZhbHMuCiAKIAotLi4gY2xhc3M6OiBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIoZmlsZW5hbWUsIHdoZW49J2gnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCBlbmNvZGluZz1Ob25lLCBkZWxheT1GYWxzZSwgdXRjPUZhbHNlKQorLi4gY2xhc3M6OiBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIoZmlsZW5hbWUsIHdoZW49J2gnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCBlbmNvZGluZz1Ob25lLCBkZWxheT1GYWxzZSwgdXRjPUZhbHNlLCBhdFRpbWU9Tm9uZSkKIAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJgIGNsYXNzLiBUaGUKICAgIHNwZWNpZmllZCBmaWxlIGlzIG9wZW5lZCBhbmQgdXNlZCBhcyB0aGUgc3RyZWFtIGZvciBsb2dnaW5nLiBPbiByb3RhdGluZyBpdCBhbHNvCkBAIC0zNTAsNiArMzUwLDEyIEBACiAgICBJZiAqZGVsYXkqIGlzIHRydWUsIHRoZW4gZmlsZSBvcGVuaW5nIGlzIGRlZmVycmVkIHVudGlsIHRoZSBmaXJzdCBjYWxsIHRvCiAgICA6bWV0aDpgZW1pdGAuCiAKKyAgIElmICphdFRpbWUqIGlzIG5vdCBgYE5vbmVgYCwgaXQgbXVzdCBiZSBhIGBgZGF0ZXRpbWUudGltZWBgIGluc3RhbmNlIHdoaWNoCisgICBzcGVjaWZpZXMgdGhlIHRpbWUgb2YgZGF5IHdoZW4gcm9sbG92ZXIgb2NjdXJzLCBmb3IgdGhlIGNhc2VzIHdoZXJlIHJvbGxvdmVyCisgICBpcyBzZXQgdG8gaGFwcGVuICJhdCBtaWRuaWdodCIgb3IgIm9uIGEgcGFydGljdWxhciB3ZWVrZGF5Ii4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICphdFRpbWUqIHBhcmFtZXRlciB3YXMgYWRkZWQuCiAKICAgIC4uIG1ldGhvZDo6IGRvUm9sbG92ZXIoKQogCkBAIC0zNzUsNiArMzgxLDkgQEAKICAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgU29ja2V0SGFuZGxlcmAgY2xhc3MgaW50ZW5kZWQgdG8KICAgIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgbWFjaGluZSB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuIGJ5ICpob3N0KiBhbmQgKnBvcnQqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgYGBwb3J0YGAgaXMgc3BlY2lmaWVkIGFzIGBgTm9uZWBgLCBhIFVuaXggZG9tYWluIHNvY2tldCBpcyBjcmVhdGVkCisgICAgICB1c2luZyB0aGUgdmFsdWUgaW4gYGBob3N0YGAgLSBvdGhlcndpc2UsIGEgVENQIHNvY2tldCBpcyBjcmVhdGVkLgogCiAgICAuLiBtZXRob2Q6OiBjbG9zZSgpCiAKQEAgLTQ2MCw2ICs0NjksOSBAQAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBEYXRhZ3JhbUhhbmRsZXJgIGNsYXNzIGludGVuZGVkIHRvCiAgICBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIG1hY2hpbmUgd2hvc2UgYWRkcmVzcyBpcyBnaXZlbiBieSAqaG9zdCogYW5kICpwb3J0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmIGBgcG9ydGBgIGlzIHNwZWNpZmllZCBhcyBgYE5vbmVgYCwgYSBVbml4IGRvbWFpbiBzb2NrZXQgaXMgY3JlYXRlZAorICAgICAgdXNpbmcgdGhlIHZhbHVlIGluIGBgaG9zdGBgIC0gb3RoZXJ3aXNlLCBhIFRDUCBzb2NrZXQgaXMgY3JlYXRlZC4KIAogICAgLi4gbWV0aG9kOjogZW1pdCgpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2x6bWEucnN0IGIvRG9jL2xpYnJhcnkvbHptYS5yc3QKaW5kZXggNWZkNTAzOS4uYjIwMTIwNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbHptYS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbHptYS5yc3QKQEAgLTM5LDggKzM5LDggQEAKICAgIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgInIiYGAsIGBgInJiImBgLCBgYCJ3ImBgLCBgYCJ3YiJgYCwKLSAgIGBgImEiYGAgb3IgYGAiYWIiYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCJydCJgYCwgYGAid3QiYGAsIG9yIGBgImF0ImBgIGZvcgotICAgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCJyYiJgYC4KKyAgIGBgIngiYGAsIGBgInhiImBgLCBgYCJhImBgIG9yIGBgImFiImBgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAicnQiYGAsCisgICBgYCJ3dCJgYCwgYGAieHQiYGAsIG9yIGBgImF0ImBgIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgInJiImBgLgogCiAgICBXaGVuIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkaW5nLCB0aGUgKmZvcm1hdCogYW5kICpmaWx0ZXJzKiBhcmd1bWVudHMgaGF2ZQogICAgdGhlIHNhbWUgbWVhbmluZ3MgYXMgZm9yIDpjbGFzczpgTFpNQURlY29tcHJlc3NvcmAuIEluIHRoaXMgY2FzZSwgdGhlICpjaGVjayoKQEAgLTU3LDYgKzU3LDkgQEAKICAgIDpjbGFzczpgaW8uVGV4dElPV3JhcHBlcmAgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvcgogICAgaGFuZGxpbmcgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCJ4ImBgLCBgYCJ4YiJgYCBhbmQgYGAieHQiYGAgbW9kZXMuCisKIAogLi4gY2xhc3M6OiBMWk1BRmlsZShmaWxlbmFtZT1Ob25lLCBtb2RlPSJyIiwgXCosIGZvcm1hdD1Ob25lLCBjaGVjaz0tMSwgcHJlc2V0PU5vbmUsIGZpbHRlcnM9Tm9uZSkKIApAQCAtNjksOCArNzIsOSBAQAogICAgZmlsZSB3aWxsIG5vdCBiZSBjbG9zZWQgd2hlbiB0aGUgOmNsYXNzOmBMWk1BRmlsZWAgaXMgY2xvc2VkLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYGAiciJgYCBmb3IgcmVhZGluZyAoZGVmYXVsdCksIGBgInciYGAgZm9yCi0gICBvdmVyd3JpdGluZywgb3IgYGAiYSJgYCBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzCi0gICBgYCJyYiJgYCwgYGAid2IiYGAsIGFuZCBgYCJhYiJgYCByZXNwZWN0aXZlbHkuCisgICBvdmVyd3JpdGluZywgYGAieCJgYCBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uLCBvciBgYCJhImBgIGZvciBhcHBlbmRpbmcuIFRoZXNlCisgICBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzIGBgInJiImBgLCBgYCJ3YiJgYCwgYGAieGIiYGAgYW5kIGBgImFiImBgCisgICByZXNwZWN0aXZlbHkuCiAKICAgIElmICpmaWxlbmFtZSogaXMgYSBmaWxlIG9iamVjdCAocmF0aGVyIHRoYW4gYW4gYWN0dWFsIGZpbGUgbmFtZSksIGEgbW9kZSBvZgogICAgYGAidyJgYCBkb2VzIG5vdCB0cnVuY2F0ZSB0aGUgZmlsZSwgYW5kIGlzIGluc3RlYWQgZXF1aXZhbGVudCB0byBgYCJhImBgLgpAQCAtOTgsNiArMTAyLDkgQEAKICAgICAgIGJ5dGUgb2YgZGF0YSB3aWxsIGJlIHJldHVybmVkLCB1bmxlc3MgRU9GIGhhcyBiZWVuIHJlYWNoZWQuIFRoZSBleGFjdAogICAgICAgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIGlzIHVuc3BlY2lmaWVkICh0aGUgKnNpemUqIGFyZ3VtZW50IGlzIGlnbm9yZWQpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgIngiYGAgYW5kIGBgInhiImBgIG1vZGVzLgorCiAKIENvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nIGRhdGEgaW4gbWVtb3J5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFyc2hhbC5yc3QgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAppbmRleCAzYjllM2QyLi4xMjRlYjYxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdApAQCAtNDAsMTAgKzQwLDExIEBACiBwb2ludCBudW1iZXJzLCBjb21wbGV4IG51bWJlcnMsIHN0cmluZ3MsIGJ5dGVzLCBieXRlYXJyYXlzLCB0dXBsZXMsIGxpc3RzLCBzZXRzLAogZnJvemVuc2V0cywgZGljdGlvbmFyaWVzLCBhbmQgY29kZSBvYmplY3RzLCB3aGVyZSBpdCBzaG91bGQgYmUgdW5kZXJzdG9vZCB0aGF0CiB0dXBsZXMsIGxpc3RzLCBzZXRzLCBmcm96ZW5zZXRzIGFuZCBkaWN0aW9uYXJpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGFzIGxvbmcgYXMKLXRoZSB2YWx1ZXMgY29udGFpbmVkIHRoZXJlaW4gYXJlIHRoZW1zZWx2ZXMgc3VwcG9ydGVkOyBhbmQgcmVjdXJzaXZlIGxpc3RzLCBzZXRzCi1hbmQgZGljdGlvbmFyaWVzIHNob3VsZCBub3QgYmUgd3JpdHRlbiAodGhleSB3aWxsIGNhdXNlIGluZmluaXRlIGxvb3BzKS4gIFRoZQordGhlIHZhbHVlcyBjb250YWluZWQgdGhlcmVpbiBhcmUgdGhlbXNlbHZlcyBzdXBwb3J0ZWQuCiBzaW5nbGV0b25zIDpjb25zdDpgTm9uZWAsIDpjb25zdDpgRWxsaXBzaXNgIGFuZCA6ZXhjOmBTdG9wSXRlcmF0aW9uYCBjYW4gYWxzbyBiZQogbWFyc2hhbGxlZCBhbmQgdW5tYXJzaGFsbGVkLgorRm9yIGZvcm1hdCAqdmVyc2lvbiogbG93ZXIgdGhhbiAzLCByZWN1cnNpdmUgbGlzdHMsIHNldHMgYW5kIGRpY3Rpb25hcmllcyBjYW5ub3QKK2JlIHdyaXR0ZW4gKHNlZSBiZWxvdykuCiAKIFRoZXJlIGFyZSBmdW5jdGlvbnMgdGhhdCByZWFkL3dyaXRlIGZpbGVzIGFzIHdlbGwgYXMgZnVuY3Rpb25zIG9wZXJhdGluZyBvbgogc3RyaW5ncy4KQEAgLTEwMyw3ICsxMDQsOSBAQAogCiAgICBJbmRpY2F0ZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2R1bGUgdXNlcy4gVmVyc2lvbiAwIGlzIHRoZSBoaXN0b3JpY2FsCiAgICBmb3JtYXQsIHZlcnNpb24gMSBzaGFyZXMgaW50ZXJuZWQgc3RyaW5ncyBhbmQgdmVyc2lvbiAyIHVzZXMgYSBiaW5hcnkgZm9ybWF0Ci0gICBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyAyLgorICAgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCisgICBWZXJzaW9uIDMgYWRkcyBzdXBwb3J0IGZvciBvYmplY3QgaW5zdGFuY2luZyBhbmQgcmVjdXJzaW9uLgorICAgVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyAzLgogCiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdCBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKaW5kZXggYjJlZDU0NC4uZjMxOTdlYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CkBAIC05MywxMSArOTMsMTA4IEBACiAgICAgICAgIHAuc3RhcnQoKQogICAgICAgICBwLmpvaW4oKQogCi1Gb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IChvbiBXaW5kb3dzKSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgcGFydCBpcworRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgcGFydCBpcwogbmVjZXNzYXJ5LCBzZWUgOnJlZjpgbXVsdGlwcm9jZXNzaW5nLXByb2dyYW1taW5nYC4KIAogCiAKK0NvbnRleHRzIGFuZCBzdGFydCBtZXRob2RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIHN1cHBvcnRzIHRocmVlIHdheXMKK3RvIHN0YXJ0IGEgcHJvY2Vzcy4gIFRoZXNlICpzdGFydCBtZXRob2RzKiBhcmUKKworICAqc3Bhd24qCisgICAgVGhlIHBhcmVudCBwcm9jZXNzIHN0YXJ0cyBhIGZyZXNoIHB5dGhvbiBpbnRlcnByZXRlciBwcm9jZXNzLiAgVGhlCisgICAgY2hpbGQgcHJvY2VzcyB3aWxsIG9ubHkgaW5oZXJpdCB0aG9zZSByZXNvdXJjZXMgbmVjZXNzYXJ5IHRvIHJ1bgorICAgIHRoZSBwcm9jZXNzIG9iamVjdHMgOm1ldGg6YH5Qcm9jZXNzLnJ1bmAgbWV0aG9kLiAgSW4gcGFydGljdWxhciwKKyAgICB1bm5lY2Vzc2FyeSBmaWxlIGRlc2NyaXB0b3JzIGFuZCBoYW5kbGVzIGZyb20gdGhlIHBhcmVudCBwcm9jZXNzCisgICAgd2lsbCBub3QgYmUgaW5oZXJpdGVkLiAgU3RhcnRpbmcgYSBwcm9jZXNzIHVzaW5nIHRoaXMgbWV0aG9kIGlzCisgICAgcmF0aGVyIHNsb3cgY29tcGFyZWQgdG8gdXNpbmcgKmZvcmsqIG9yICpmb3Jrc2VydmVyKi4KKworICAgIEF2YWlsYWJsZSBvbiBVbml4IGFuZCBXaW5kb3dzLiAgVGhlIGRlZmF1bHQgb24gV2luZG93cy4KKworICAqZm9yayoKKyAgICBUaGUgcGFyZW50IHByb2Nlc3MgdXNlcyA6ZnVuYzpgb3MuZm9ya2AgdG8gZm9yayB0aGUgUHl0aG9uCisgICAgaW50ZXJwcmV0ZXIuICBUaGUgY2hpbGQgcHJvY2Vzcywgd2hlbiBpdCBiZWdpbnMsIGlzIGVmZmVjdGl2ZWx5CisgICAgaWRlbnRpY2FsIHRvIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIEFsbCByZXNvdXJjZXMgb2YgdGhlIHBhcmVudCBhcmUKKyAgICBpbmhlcml0ZWQgYnkgdGhlIGNoaWxkIHByb2Nlc3MuICBOb3RlIHRoYXQgc2FmZWx5IGZvcmtpbmcgYQorICAgIG11bHRpdGhyZWFkZWQgcHJvY2VzcyBpcyBwcm9ibGVtYXRpYy4KKworICAgIEF2YWlsYWJsZSBvbiBVbml4IG9ubHkuICBUaGUgZGVmYXVsdCBvbiBVbml4LgorCisgICpmb3Jrc2VydmVyKgorICAgIFdoZW4gdGhlIHByb2dyYW0gc3RhcnRzIGFuZCBzZWxlY3RzIHRoZSAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kLAorICAgIGEgc2VydmVyIHByb2Nlc3MgaXMgc3RhcnRlZC4gIEZyb20gdGhlbiBvbiwgd2hlbmV2ZXIgYSBuZXcgcHJvY2VzcworICAgIGlzIG5lZWRlZCwgdGhlIHBhcmVudCBwcm9jZXNzIGNvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgYW5kIHJlcXVlc3RzCisgICAgdGhhdCBpdCBmb3JrIGEgbmV3IHByb2Nlc3MuICBUaGUgZm9yayBzZXJ2ZXIgcHJvY2VzcyBpcyBzaW5nbGUKKyAgICB0aHJlYWRlZCBzbyBpdCBpcyBzYWZlIGZvciBpdCB0byB1c2UgOmZ1bmM6YG9zLmZvcmtgLiAgTm8KKyAgICB1bm5lY2Vzc2FyeSByZXNvdXJjZXMgYXJlIGluaGVyaXRlZC4KKworICAgIEF2YWlsYWJsZSBvbiBVbml4IHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycworICAgIG92ZXIgVW5peCBwaXBlcy4KKworQmVmb3JlIFB5dGhvbiAzLjQgKmZvcmsqIHdhcyB0aGUgb25seSBvcHRpb24gYXZhaWxhYmxlIG9uIFVuaXguICBBbHNvLAorcHJpb3IgdG8gUHl0aG9uIDMuNCwgY2hpbGQgcHJvY2Vzc2VzIHdvdWxkIGluaGVyaXQgYWxsIHRoZSBwYXJlbnRzCitpbmhlcml0YWJsZSBoYW5kbGVzIG9uIFdpbmRvd3MuCisKK09uIFVuaXggdXNpbmcgdGhlICpzcGF3biogb3IgKmZvcmtzZXJ2ZXIqIHN0YXJ0IG1ldGhvZHMgd2lsbCBhbHNvCitzdGFydCBhICpzZW1hcGhvcmUgdHJhY2tlciogcHJvY2VzcyB3aGljaCB0cmFja3MgdGhlIHVubGlua2VkIG5hbWVkCitzZW1hcGhvcmVzIGNyZWF0ZWQgYnkgcHJvY2Vzc2VzIG9mIHRoZSBwcm9ncmFtLiAgV2hlbiBhbGwgcHJvY2Vzc2VzCitoYXZlIGV4aXRlZCB0aGUgc2VtYXBob3JlIHRyYWNrZXIgdW5saW5rcyBhbnkgcmVtYWluaW5nIHNlbWFwaG9yZXMuCitVc3VhbGx5IHRoZXJlIHNob3VsZCBiZSBub25lLCBidXQgaWYgYSBwcm9jZXNzIHdhcyBraWxsZWQgYnkgYSBzaWduYWwKK3RoZXJlIG1heSBzb21lICJsZWFrZWQiIHNlbWFwaG9yZXMuICAoVW5saW5raW5nIHRoZSBuYW1lZCBzZW1hcGhvcmVzCitpcyBhIHNlcmlvdXMgbWF0dGVyIHNpbmNlIHRoZSBzeXN0ZW0gYWxsb3dzIG9ubHkgYSBsaW1pdGVkIG51bWJlciwgYW5kCit0aGV5IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgdW5saW5rZWQgdW50aWwgdGhlIG5leHQgcmVib290LikKKworVG8gc2VsZWN0IHRoZSBhIHN0YXJ0IG1ldGhvZCB5b3UgdXNlIHRoZSA6ZnVuYzpgc2V0X3N0YXJ0X21ldGhvZGAgaW4KK3RoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBjbGF1c2Ugb2YgdGhlIG1haW4gbW9kdWxlLiAgRm9yCitleGFtcGxlOjoKKworICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgYXMgbXAKKworICAgICAgIGRlZiBmb28ocSk6CisgICAgICAgICAgIHEucHV0KCdoZWxsbycpCisKKyAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICBtcC5zZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCisgICAgICAgICAgIHEgPSBtcC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBtcC5Qcm9jZXNzKHRhcmdldD1mb28sIGFyZ3M9KHEsKSkKKyAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgIHByaW50KHEuZ2V0KCkpCisgICAgICAgICAgIHAuam9pbigpCisKKzpmdW5jOmBzZXRfc3RhcnRfbWV0aG9kYCBzaG91bGQgbm90IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlCitwcm9ncmFtLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSA6ZnVuYzpgZ2V0X2NvbnRleHRgIHRvIG9idGFpbiBhIGNvbnRleHQKK29iamVjdC4gIENvbnRleHQgb2JqZWN0cyBoYXZlIHRoZSBzYW1lIEFQSSBhcyB0aGUgbXVsdGlwcm9jZXNzaW5nCittb2R1bGUsIGFuZCBhbGxvdyBvbmUgdG8gdXNlIG11bHRpcGxlIHN0YXJ0IG1ldGhvZHMgaW4gdGhlIHNhbWUKK3Byb2dyYW0uIDo6CisKKyAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wCisKKyAgICAgICBkZWYgZm9vKHEpOgorICAgICAgICAgICBxLnB1dCgnaGVsbG8nKQorCisgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgY3R4ID0gbXAuZ2V0X2NvbnRleHQoJ3NwYXduJykKKyAgICAgICAgICAgcSA9IGN0eC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBjdHguUHJvY2Vzcyh0YXJnZXQ9Zm9vLCBhcmdzPShxLCkpCisgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICBwcmludChxLmdldCgpKQorICAgICAgICAgICBwLmpvaW4oKQorCitOb3RlIHRoYXQgb2JqZWN0cyByZWxhdGVkIHRvIG9uZSBjb250ZXh0IG1heSBub3QgYmUgY29tcGF0aWJsZSB3aXRoCitwcm9jZXNzZXMgZm9yIGEgZGlmZmVyZW50IGNvbnRleHQuICBJbiBwYXJ0aWN1bGFyLCBsb2NrcyBjcmVhdGVkIHVzaW5nCit0aGUgKmZvcmsqIGNvbnRleHQgY2Fubm90IGJlIHBhc3NlZCB0byBhIHByb2Nlc3NlcyBzdGFydGVkIHVzaW5nIHRoZQorKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcy4KKworQSBsaWJyYXJ5IHdoaWNoIHdhbnRzIHRvIHVzZSBhIHBhcnRpY3VsYXIgc3RhcnQgbWV0aG9kIHNob3VsZCBwcm9iYWJseQordXNlIDpmdW5jOmBnZXRfY29udGV4dGAgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgY2hvaWNlIG9mIHRoZQorbGlicmFyeSB1c2VyLgorCisKIEV4Y2hhbmdpbmcgb2JqZWN0cyBiZXR3ZWVuIHByb2Nlc3Nlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTI3NCwxNSArMzcxLDMxIEBACiBGb3IgZXhhbXBsZTo6CiAKICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCisgICBmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCiAKICAgIGRlZiBmKHgpOgogICAgICAgIHJldHVybiB4KngKIAogICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAgICB3aXRoIFBvb2wocHJvY2Vzc2VzPTQpIGFzIHBvb2w6ICAgICAgICAjIHN0YXJ0IDQgd29ya2VyIHByb2Nlc3NlcwotICAgICAgICAgICByZXN1bHQgPSBwb29sLmFwcGx5X2FzeW5jKGYsIFsxMF0pICMgZXZhbHVhdGUgImYoMTApIiBhc3luY2hyb25vdXNseQotICAgICAgICAgICBwcmludChyZXN1bHQuZ2V0KHRpbWVvdXQ9MSkpICAgICAgICMgcHJpbnRzICIxMDAiIHVubGVzcyB5b3VyIGNvbXB1dGVyIGlzICp2ZXJ5KiBzbG93Ci0gICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIHJhbmdlKDEwKSkpICAgICAgIyBwcmludHMgIlswLCAxLCA0LC4uLiwgODFdIgorICAgICAgICMgc3RhcnQgNCB3b3JrZXIgcHJvY2Vzc2VzCisgICAgICAgd2l0aCBQb29sKHByb2Nlc3Nlcz00KSBhcyBwb29sOgorCisgICAgICAgICAgICMgcHJpbnQgIlswLCAxLCA0LC4uLiwgODFdIgorICAgICAgICAgICBwcmludChwb29sLm1hcChmLCByYW5nZSgxMCkpKQorCisgICAgICAgICAgICMgcHJpbnQgc2FtZSBudW1iZXJzIGluIGFyYml0cmFyeSBvcmRlcgorICAgICAgICAgICBmb3IgaSBpbiBwb29sLmltYXBfdW5vcmRlcmVkKGYsIHJhbmdlKDEwKSk6CisgICAgICAgICAgICAgICBwcmludChpKQorCisgICAgICAgICAgICMgZXZhbHVhdGUgImYoMTApIiBhc3luY2hyb25vdXNseQorICAgICAgICAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGYsIFsxMF0pCisgICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyBwcmludHMgIjEwMCIKKworICAgICAgICAgICAjIG1ha2Ugd29ya2VyIHNsZWVwIGZvciAxMCBzZWNzCisgICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoc2xlZXAsIDEwKQorICAgICAgICAgICBwcmludChyZXMuZ2V0KHRpbWVvdXQ9MSkpICAgICAgICAgICAgICMgcmFpc2VzIG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3IKKworICAgICAgICMgZXhpdGluZyB0aGUgJ3dpdGgnLWJsb2NrIGhhcyBzdG9wcGVkIHRoZSBwb29sCiAKIE5vdGUgdGhhdCB0aGUgbWV0aG9kcyBvZiBhIHBvb2wgc2hvdWxkIG9ubHkgZXZlciBiZSB1c2VkIGJ5IHRoZQogcHJvY2VzcyB3aGljaCBjcmVhdGVkIGl0LgpAQCAtNzMxLDYgKzg0NCw5IEBACiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uICBNYXkgcmFpc2UKICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCisgICAuLiBzZWVhbHNvOjoKKyAgICAgIDpmdW5jOmBvcy5jcHVfY291bnRgCisKIC4uIGZ1bmN0aW9uOjogY3VycmVudF9wcm9jZXNzKCkKIAogICAgUmV0dXJuIHRoZSA6Y2xhc3M6YFByb2Nlc3NgIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuCkBAIC03NjEsNiArODc3LDQzIEBACiAgICBJZiB0aGUgbW9kdWxlIGlzIGJlaW5nIHJ1biBub3JtYWxseSBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIHRoZW4KICAgIDpmdW5jOmBmcmVlemVfc3VwcG9ydGAgaGFzIG5vIGVmZmVjdC4KIAorLi4gZnVuY3Rpb246OiBnZXRfYWxsX3N0YXJ0X21ldGhvZHMoKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIHN0YXJ0IG1ldGhvZHMsIHRoZSBmaXJzdCBvZiB3aGljaAorICAgaXMgdGhlIGRlZmF1bHQuICBUaGUgcG9zc2libGUgc3RhcnQgbWV0aG9kcyBhcmUgYGAnZm9yaydgYCwKKyAgIGBgJ3NwYXduJ2BgIGFuZCBgYCdmb3Jrc2VydmVyJ2BgLiAgT24gV2luZG93cyBvbmx5IGBgJ3NwYXduJ2BgIGlzCisgICBhdmFpbGFibGUuICBPbiBVbml4IGBgJ2ZvcmsnYGAgYW5kIGBgJ3NwYXduJ2BgIGFyZSBhbHdheXMKKyAgIHN1cHBvcnRlZCwgd2l0aCBgYCdmb3JrJ2BgIGJlaW5nIHRoZSBkZWZhdWx0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfY29udGV4dChtZXRob2Q9Tm9uZSkKKworICAgUmV0dXJuIGEgY29udGV4dCBvYmplY3Qgd2hpY2ggaGFzIHRoZSBzYW1lIGF0dHJpYnV0ZXMgYXMgdGhlCisgICA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZS4KKworICAgSWYgKm1ldGhvZCogaXMgKk5vbmUqIHRoZW4gdGhlIGRlZmF1bHQgY29udGV4dCBpcyByZXR1cm5lZC4KKyAgIE90aGVyd2lzZSAqbWV0aG9kKiBzaG91bGQgYmUgYGAnZm9yaydgYCwgYGAnc3Bhd24nYGAsCisgICBgYCdmb3Jrc2VydmVyJ2BgLiAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQKKyAgIHN0YXJ0IG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfc3RhcnRfbWV0aG9kKGFsbG93X25vbmU9RmFsc2UpCisKKyAgIFJldHVybiB0aGUgbmFtZSBvZiBzdGFydCBtZXRob2QgdXNlZCBmb3Igc3RhcnRpbmcgcHJvY2Vzc2VzLgorCisgICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqIGlzIGZhbHNlLAorICAgdGhlbiB0aGUgc3RhcnQgbWV0aG9kIGlzIGZpeGVkIHRvIHRoZSBkZWZhdWx0IGFuZCB0aGUgbmFtZSBpcworICAgcmV0dXJuZWQuICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqCisgICBpcyB0cnVlIHRoZW4gKk5vbmUqIGlzIHJldHVybmVkLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCwgYGAnZm9ya3NlcnZlcidgYAorICAgb3IgKk5vbmUqLiAgYGAnZm9yaydgYCBpcyB0aGUgZGVmYXVsdCBvbiBVbml4LCB3aGlsZSBgYCdzcGF3bidgYCBpcworICAgdGhlIGRlZmF1bHQgb24gV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogc2V0X2V4ZWN1dGFibGUoKQogCiAgICBTZXRzIHRoZSBwYXRoIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gdXNlIHdoZW4gc3RhcnRpbmcgYSBjaGlsZCBwcm9jZXNzLgpAQCAtNzY5LDggKzkyMiwyMSBAQAogCiAgICAgICBzZXRfZXhlY3V0YWJsZShvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9udy5leGUnKSkKIAotICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuICAoV2luZG93cyBvbmx5KQorICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBOb3cgc3VwcG9ydGVkIG9uIFVuaXggd2hlbiB0aGUgYGAnc3Bhd24nYGAgc3RhcnQgbWV0aG9kIGlzIHVzZWQuCisKKy4uIGZ1bmN0aW9uOjogc2V0X3N0YXJ0X21ldGhvZChtZXRob2QpCisKKyAgIFNldCB0aGUgbWV0aG9kIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvIHN0YXJ0IGNoaWxkIHByb2Nlc3Nlcy4KKyAgICptZXRob2QqIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCBvciBgYCdmb3Jrc2VydmVyJ2BgLgorCisgICBOb3RlIHRoYXQgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSwgYW5kIGl0IHNob3VsZCBiZQorICAgcHJvdGVjdGVkIGluc2lkZSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgY2xhdXNlIG9mIHRoZQorICAgbWFpbiBtb2R1bGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBub3RlOjoKIApAQCAtMTY2NiwxNCArMTgzMiwxNCBAQAogT25lIGNhbiBjcmVhdGUgYSBwb29sIG9mIHByb2Nlc3NlcyB3aGljaCB3aWxsIGNhcnJ5IG91dCB0YXNrcyBzdWJtaXR0ZWQgdG8gaXQKIHdpdGggdGhlIDpjbGFzczpgUG9vbGAgY2xhc3MuCiAKLS4uIGNsYXNzOjogUG9vbChbcHJvY2Vzc2VzWywgaW5pdGlhbGl6ZXJbLCBpbml0YXJnc1ssIG1heHRhc2tzcGVyY2hpbGRdXV1dKQorLi4gY2xhc3M6OiBQb29sKFtwcm9jZXNzZXNbLCBpbml0aWFsaXplclssIGluaXRhcmdzWywgbWF4dGFza3NwZXJjaGlsZCBbLCBjb250ZXh0XV1dXV0pCiAKICAgIEEgcHJvY2VzcyBwb29sIG9iamVjdCB3aGljaCBjb250cm9scyBhIHBvb2wgb2Ygd29ya2VyIHByb2Nlc3NlcyB0byB3aGljaCBqb2JzCiAgICBjYW4gYmUgc3VibWl0dGVkLiAgSXQgc3VwcG9ydHMgYXN5bmNocm9ub3VzIHJlc3VsdHMgd2l0aCB0aW1lb3V0cyBhbmQKICAgIGNhbGxiYWNrcyBhbmQgaGFzIGEgcGFyYWxsZWwgbWFwIGltcGxlbWVudGF0aW9uLgogCiAgICAqcHJvY2Vzc2VzKiBpcyB0aGUgbnVtYmVyIG9mIHdvcmtlciBwcm9jZXNzZXMgdG8gdXNlLiAgSWYgKnByb2Nlc3NlcyogaXMKLSAgIGBgTm9uZWBgIHRoZW4gdGhlIG51bWJlciByZXR1cm5lZCBieSA6ZnVuYzpgY3B1X2NvdW50YCBpcyB1c2VkLiAgSWYKKyAgIGBgTm9uZWBgIHRoZW4gdGhlIG51bWJlciByZXR1cm5lZCBieSA6ZnVuYzpgb3MuY3B1X2NvdW50YCBpcyB1c2VkLiAgSWYKICAgICppbml0aWFsaXplciogaXMgbm90IGBgTm9uZWBgIHRoZW4gZWFjaCB3b3JrZXIgcHJvY2VzcyB3aWxsIGNhbGwKICAgIGBgaW5pdGlhbGl6ZXIoKmluaXRhcmdzKWBgIHdoZW4gaXQgc3RhcnRzLgogCkBAIC0xNjg2LDYgKzE4NTIsMTMgQEAKICAgICAgIHVudXNlZCByZXNvdXJjZXMgdG8gYmUgZnJlZWQuIFRoZSBkZWZhdWx0ICptYXh0YXNrc3BlcmNoaWxkKiBpcyBOb25lLCB3aGljaAogICAgICAgbWVhbnMgd29ya2VyIHByb2Nlc3NlcyB3aWxsIGxpdmUgYXMgbG9uZyBhcyB0aGUgcG9vbC4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAqY29udGV4dCogY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29udGV4dCB1c2VkIGZvciBzdGFydGluZworICAgICAgdGhlIHdvcmtlciBwcm9jZXNzZXMuICBVc3VhbGx5IGEgcG9vbCBpcyBjcmVhdGVkIHVzaW5nIHRoZQorICAgICAgZnVuY3Rpb24gOmZ1bmM6YG11bHRpcHJvY2Vzc2luZy5Qb29sYCBvciB0aGUgOm1ldGg6YFBvb2xgIG1ldGhvZAorICAgICAgb2YgYSBjb250ZXh0IG9iamVjdC4gIEluIGJvdGggY2FzZXMgKmNvbnRleHQqIGlzIHNldAorICAgICAgYXBwcm9wcmlhdGVseS4KKwogICAgLi4gbm90ZTo6CiAKICAgICAgIFdvcmtlciBwcm9jZXNzZXMgd2l0aGluIGEgOmNsYXNzOmBQb29sYCB0eXBpY2FsbHkgbGl2ZSBmb3IgdGhlIGNvbXBsZXRlCkBAIC0yMTc3LDQzICsyMzUwLDggQEAKICAgICBbSU5GTy9NYWluUHJvY2Vzc10gc2VuZGluZyBzaHV0ZG93biBtZXNzYWdlIHRvIG1hbmFnZXIKICAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgZXhpdGluZyB3aXRoIGV4aXRjb2RlIDAKIAotSW4gYWRkaXRpb24gdG8gaGF2aW5nIHRoZXNlIHR3byBsb2dnaW5nIGZ1bmN0aW9ucywgdGhlIG11bHRpcHJvY2Vzc2luZyBhbHNvCi1leHBvc2VzIHR3byBhZGRpdGlvbmFsIGxvZ2dpbmcgbGV2ZWwgYXR0cmlidXRlcy4gVGhlc2UgYXJlICA6Y29uc3Q6YFNVQldBUk5JTkdgCi1hbmQgOmNvbnN0OmBTVUJERUJVR2AuIFRoZSB0YWJsZSBiZWxvdyBpbGx1c3RyYXRlcyB3aGVyZSB0aGVzZXMgZml0IGluIHRoZQotbm9ybWFsIGxldmVsIGhpZXJhcmNoeS4KLQotKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLXwgTGV2ZWwgICAgICAgICAgfCBOdW1lcmljIHZhbHVlICB8Ci0rPT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09KwotfCBgYFNVQldBUk5JTkdgYCB8IDI1ICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi18IGBgU1VCREVCVUdgYCAgIHwgNSAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLQogRm9yIGEgZnVsbCB0YWJsZSBvZiBsb2dnaW5nIGxldmVscywgc2VlIHRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUuCiAKLVRoZXNlIGFkZGl0aW9uYWwgbG9nZ2luZyBsZXZlbHMgYXJlIHVzZWQgcHJpbWFyaWx5IGZvciBjZXJ0YWluIGRlYnVnIG1lc3NhZ2VzCi13aXRoaW4gdGhlIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUuIEJlbG93IGlzIHRoZSBzYW1lIGV4YW1wbGUgYXMgYWJvdmUsIGV4Y2VwdAotd2l0aCA6Y29uc3Q6YFNVQkRFQlVHYCBlbmFibGVkOjoKLQotICAgID4+PiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLCBsb2dnaW5nCi0gICAgPj4+IGxvZ2dlciA9IG11bHRpcHJvY2Vzc2luZy5sb2dfdG9fc3RkZXJyKCkKLSAgICA+Pj4gbG9nZ2VyLnNldExldmVsKG11bHRpcHJvY2Vzc2luZy5TVUJERUJVRykKLSAgICA+Pj4gbG9nZ2VyLndhcm5pbmcoJ2Rvb21lZCcpCi0gICAgW1dBUk5JTkcvTWFpblByb2Nlc3NdIGRvb21lZAotICAgID4+PiBtID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gY2hpbGQgcHJvY2VzcyBjYWxsaW5nIHNlbGYucnVuKCkKLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIGNyZWF0ZWQgdGVtcCBkaXJlY3RvcnkgLy4uLi9weW1wLS4uLgotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciBzZXJ2aW5nIGF0ICcvLi4uL3B5bXAtZGpHQlhOL2xpc3RlbmVyLS4uLicKLSAgICA+Pj4gZGVsIG0KLSAgICBbU1VCREVCVUcvTWFpblByb2Nlc3NdIGZpbmFsaXplciBjYWxsaW5nIC4uLgotICAgIFtJTkZPL01haW5Qcm9jZXNzXSBzZW5kaW5nIHNodXRkb3duIG1lc3NhZ2UgdG8gbWFuYWdlcgotICAgIFtERUJVRy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgcmVjZWl2ZWQgc2h1dGRvd24gbWVzc2FnZQotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGNhbGxpbmcgPEZpbmFsaXplIG9iamVjdCwgY2FsbGJhY2s9dW5saW5rLCAuLi4KLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBmaW5hbGl6ZXIgY2FsbGluZyA8YnVpbHQtaW4gZnVuY3Rpb24gdW5saW5rPiAuLi4KLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBjYWxsaW5nIDxGaW5hbGl6ZSBvYmplY3QsIGRlYWQ+Ci0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gZmluYWxpemVyIGNhbGxpbmcgPGZ1bmN0aW9uIHJtdHJlZSBhdCAweDVhYTczMD4gLi4uCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIGV4aXRpbmcgd2l0aCBleGl0Y29kZSAwCiAKIFRoZSA6bW9kOmBtdWx0aXByb2Nlc3NpbmcuZHVtbXlgIG1vZHVsZQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0yMjM0LDggKzIzNzIsMTAgQEAKIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AuCiAKIAotQWxsIHBsYXRmb3Jtcwotfn5+fn5+fn5+fn5+fgorQWxsIHN0YXJ0IG1ldGhvZHMKK35+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBmb2xsb3dpbmcgYXBwbGllcyB0byBhbGwgc3RhcnQgbWV0aG9kcy4KIAogQXZvaWQgc2hhcmVkIHN0YXRlCiAKQEAgLTIyNjksMTEgKzI0MDksMTMgQEAKIAogQmV0dGVyIHRvIGluaGVyaXQgdGhhbiBwaWNrbGUvdW5waWNrbGUKIAotICAgIE9uIFdpbmRvd3MgbWFueSB0eXBlcyBmcm9tIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbmVlZCB0byBiZSBwaWNrbGFibGUgc28KLSAgICB0aGF0IGNoaWxkIHByb2Nlc3NlcyBjYW4gdXNlIHRoZW0uICBIb3dldmVyLCBvbmUgc2hvdWxkIGdlbmVyYWxseSBhdm9pZAotICAgIHNlbmRpbmcgc2hhcmVkIG9iamVjdHMgdG8gb3RoZXIgcHJvY2Vzc2VzIHVzaW5nIHBpcGVzIG9yIHF1ZXVlcy4gIEluc3RlYWQKLSAgICB5b3Ugc2hvdWxkIGFycmFuZ2UgdGhlIHByb2dyYW0gc28gdGhhdCBhIHByb2Nlc3Mgd2hpY2ggbmVlZHMgYWNjZXNzIHRvIGEKLSAgICBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBlbHNld2hlcmUgY2FuIGluaGVyaXQgaXQgZnJvbSBhbiBhbmNlc3RvciBwcm9jZXNzLgorICAgIFdoZW4gdXNpbmcgdGhlICpzcGF3biogb3IgKmZvcmtzZXJ2ZXIqIHN0YXJ0IG1ldGhvZHMgbWFueSB0eXBlcworICAgIGZyb20gOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBuZWVkIHRvIGJlIHBpY2tsYWJsZSBzbyB0aGF0IGNoaWxkCisgICAgcHJvY2Vzc2VzIGNhbiB1c2UgdGhlbS4gIEhvd2V2ZXIsIG9uZSBzaG91bGQgZ2VuZXJhbGx5IGF2b2lkCisgICAgc2VuZGluZyBzaGFyZWQgb2JqZWN0cyB0byBvdGhlciBwcm9jZXNzZXMgdXNpbmcgcGlwZXMgb3IgcXVldWVzLgorICAgIEluc3RlYWQgeW91IHNob3VsZCBhcnJhbmdlIHRoZSBwcm9ncmFtIHNvIHRoYXQgYSBwcm9jZXNzIHdoaWNoCisgICAgbmVlZHMgYWNjZXNzIHRvIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgZWxzZXdoZXJlIGNhbiBpbmhlcml0IGl0CisgICAgZnJvbSBhbiBhbmNlc3RvciBwcm9jZXNzLgogCiBBdm9pZCB0ZXJtaW5hdGluZyBwcm9jZXNzZXMKIApAQCAtMjMyMCwxNSArMjQ2MiwxNyBAQAogCiBFeHBsaWNpdGx5IHBhc3MgcmVzb3VyY2VzIHRvIGNoaWxkIHByb2Nlc3NlcwogCi0gICAgT24gVW5peCBhIGNoaWxkIHByb2Nlc3MgY2FuIG1ha2UgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYQotICAgIHBhcmVudCBwcm9jZXNzIHVzaW5nIGEgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlCi0gICAgb2JqZWN0IGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCisgICAgT24gVW5peCB1c2luZyB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCwgYSBjaGlsZCBwcm9jZXNzIGNhbiBtYWtlCisgICAgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYSBwYXJlbnQgcHJvY2VzcyB1c2luZyBhCisgICAgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlIG9iamVjdCBhcyBhbgorICAgIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCiAKLSAgICBBcGFydCBmcm9tIG1ha2luZyB0aGUgY29kZSAocG90ZW50aWFsbHkpIGNvbXBhdGlibGUgd2l0aCBXaW5kb3dzIHRoaXMgYWxzbwotICAgIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZSBjaGlsZCBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlIHRoZSBvYmplY3Qgd2lsbCBub3QKLSAgICBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICBUaGlzIG1pZ2h0IGJlIGltcG9ydGFudCBpZiBzb21lCi0gICAgcmVzb3VyY2UgaXMgZnJlZWQgd2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQKLSAgICBwcm9jZXNzLgorICAgIEFwYXJ0IGZyb20gbWFraW5nIHRoZSBjb2RlIChwb3RlbnRpYWxseSkgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MKKyAgICBhbmQgdGhlIG90aGVyIHN0YXJ0IG1ldGhvZHMgdGhpcyBhbHNvIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZQorICAgIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBnYXJiYWdlCisgICAgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFRoaXMgbWlnaHQgYmUgaW1wb3J0YW50IGlmIHNvbWUKKyAgICByZXNvdXJjZSBpcyBmcmVlZCB3aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgaW4gdGhlCisgICAgcGFyZW50IHByb2Nlc3MuCiAKICAgICBTbyBmb3IgaW5zdGFuY2UgOjoKIApAQCAtMjM4NywxNyArMjUzMSwxOSBAQAogCiAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA6aXNzdWU6YDUxNTVgLCA6aXNzdWU6YDUzMTNgIGFuZCA6aXNzdWU6YDUzMzFgCiAKLVdpbmRvd3MKLX5+fn5+fn4KK1RoZSAqc3Bhd24qIGFuZCAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVNpbmNlIFdpbmRvd3MgbGFja3MgOmZ1bmM6YG9zLmZvcmtgIGl0IGhhcyBhIGZldyBleHRyYSByZXN0cmljdGlvbnM6CitUaGVyZSBhcmUgYSBmZXcgZXh0cmEgcmVzdHJpY3Rpb24gd2hpY2ggZG9uJ3QgYXBwbHkgdG8gdGhlICpmb3JrKgorc3RhcnQgbWV0aG9kLgogCiBNb3JlIHBpY2tsYWJpbGl0eQogCi0gICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlIHBpY2tsYWJsZS4gIFRoaXMKLSAgICBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kIG1ldGhvZHMgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkKLSAgICBhcyB0aGUgYGB0YXJnZXRgYCBhcmd1bWVudCBvbiBXaW5kb3dzIC0tLSBqdXN0IGRlZmluZSBhIGZ1bmN0aW9uIGFuZCB1c2UKLSAgICB0aGF0IGluc3RlYWQuCisgICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlCisgICAgcGlja2xhYmxlLiAgVGhpcyBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kCisgICAgbWV0aG9kcyBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBhcyB0aGUgYGB0YXJnZXRgYCAodW5sZXNzIHlvdSB1c2UKKyAgICB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCkgLS0tIGp1c3QgZGVmaW5lIGEgZnVuY3Rpb24gYW5kIHVzZSB0aGF0CisgICAgaW5zdGVhZC4KIAogICAgIEFsc28sIGlmIHlvdSBzdWJjbGFzcyA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2AgdGhlbiBtYWtlIHN1cmUgdGhhdAogICAgIGluc3RhbmNlcyB3aWxsIGJlIHBpY2tsYWJsZSB3aGVuIHRoZSA6bWV0aDpgUHJvY2Vzcy5zdGFydApAQCAtMjQxOSw3ICsyNTY1LDggQEAKICAgICBpbnRlcnByZXRlciB3aXRob3V0IGNhdXNpbmcgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYSBzdGFydGluZyBhIG5ldwogICAgIHByb2Nlc3MpLgogCi0gICAgRm9yIGV4YW1wbGUsIHVuZGVyIFdpbmRvd3MgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQorICAgIEZvciBleGFtcGxlLCB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kCisgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQogICAgIDpleGM6YFJ1bnRpbWVFcnJvcmA6OgogCiAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzCkBAIC0yNDMzLDEzICsyNTgwLDE0IEBACiAgICAgSW5zdGVhZCBvbmUgc2hvdWxkIHByb3RlY3QgdGhlICJlbnRyeSBwb2ludCIgb2YgdGhlIHByb2dyYW0gYnkgdXNpbmcgYGBpZgogICAgIF9fbmFtZV9fID09ICdfX21haW5fXyc6YGAgYXMgZm9sbG93czo6CiAKLSAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQKKyAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQsIHNldF9zdGFydF9tZXRob2QKIAogICAgICAgIGRlZiBmb28oKToKICAgICAgICAgICAgcHJpbnQoJ2hlbGxvJykKIAogICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKyAgICAgICAgICAgc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQogICAgICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9Zm9vKQogICAgICAgICAgICBwLnN0YXJ0KCkKIApAQCAtMjQ3MCwyNiArMjYxOCw3IEBACiAgICA6bGFuZ3VhZ2U6IHB5dGhvbjMKIAogCi1TeW5jaHJvbml6YXRpb24gdHlwZXMgbGlrZSBsb2NrcywgY29uZGl0aW9ucyBhbmQgcXVldWVzOgotCi0uLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5Ci0gICA6bGFuZ3VhZ2U6IHB5dGhvbjMKLQotCiBBbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSBxdWV1ZXMgdG8gZmVlZCB0YXNrcyB0byBhIGNvbGxlY3Rpb24gb2Ygd29ya2VyCiBwcm9jZXNzZXMgYW5kIGNvbGxlY3QgdGhlIHJlc3VsdHM6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd29ya2Vycy5weQotCi0KLUFuIGV4YW1wbGUgb2YgaG93IGEgcG9vbCBvZiB3b3JrZXIgcHJvY2Vzc2VzIGNhbiBlYWNoIHJ1biBhCi06Y2xhc3M6YH5odHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgIGluc3RhbmNlIHdoaWxlIHNoYXJpbmcgYSBzaW5nbGUKLWxpc3RlbmluZyBzb2NrZXQuCi0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5Ci0KLQotU29tZSBzaW1wbGUgYmVuY2htYXJrcyBjb21wYXJpbmcgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCB3aXRoIDptb2Q6YHRocmVhZGluZ2A6Ci0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weQotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9uZXRyYy5yc3QgYi9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKaW5kZXggNTY0ZjEwMS4uMjNmZmVkNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbmV0cmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L25ldHJjLnJzdApAQCAtMjksNyArMjksNyBAQAogICAgVGhpcyBpbXBsZW1lbnRzIHNlY3VyaXR5IGJlaGF2aW9yIGVxdWl2YWxlbnQgdG8gdGhhdCBvZiBmdHAgYW5kIG90aGVyCiAgICBwcm9ncmFtcyB0aGF0IHVzZSA6ZmlsZTpgLm5ldHJjYC4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMuMyBBZGRlZCB0aGUgUE9TSVggcGVybWlzc2lvbiBjaGVjay4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IEFkZGVkIHRoZSBQT1NJWCBwZXJtaXNzaW9uIGNoZWNrLgogCiAKIC4uIGV4Y2VwdGlvbjo6IE5ldHJjUGFyc2VFcnJvcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAppbmRleCA3NTlkM2I3Li45YWIyYzk0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgbm50cGxpYmAgLS0tIE5OVFAgcHJvdG9jb2wgY2xpZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNzEsNyArNzAsNyBAQAogICAgcmVhZGVyLXNwZWNpZmljIGNvbW1hbmRzLCBzdWNoIGFzIGBgZ3JvdXBgYC4gIElmIHlvdSBnZXQgdW5leHBlY3RlZAogICAgOmV4YzpgTk5UUFBlcm1hbmVudEVycm9yYFwgcywgeW91IG1pZ2h0IG5lZWQgdG8gc2V0ICpyZWFkZXJtb2RlKi4KICAgIDpjbGFzczpgTk5UUGAgY2xhc3Mgc3VwcG9ydHMgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdG8KLSAgIHVuY29uZGl0aW9uYWxseSBjb25zdW1lIDpleGM6YHNvY2tldC5lcnJvcmAgZXhjZXB0aW9ucyBhbmQgdG8gY2xvc2UgdGhlIE5OVFAKKyAgIHVuY29uZGl0aW9uYWxseSBjb25zdW1lIDpleGM6YE9TRXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBOTlRQCiAgICBjb25uZWN0aW9uIHdoZW4gZG9uZS4gSGVyZSBpcyBhIHNhbXBsZSBvbiBob3cgdXNpbmcgaXQ6CiAKICAgICA+Pj4gZnJvbSBubnRwbGliIGltcG9ydCBOTlRQCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9udW1lcmljLnJzdCBiL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CmluZGV4IDI3MzJhODQuLjdjNzZhNDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CisrKyBiL0RvYy9saWJyYXJ5L251bWVyaWMucnN0CkBAIC0yMywzICsyMyw0IEBACiAgICBkZWNpbWFsLnJzdAogICAgZnJhY3Rpb25zLnJzdAogICAgcmFuZG9tLnJzdAorICAgc3RhdGlzdGljcy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdCBiL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdAppbmRleCAwMzU0N2NhLi44MGJhZDcxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CkBAIC0xMSw2ICsxMSw5IEBACiAgICBpbXBvcnQgb3BlcmF0b3IKICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIsIGlhZGQKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvb3BlcmF0b3IucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgZWZmaWNpZW50IGZ1bmN0aW9ucyBjb3JyZXNwb25kaW5nIHRvCiB0aGUgaW50cmluc2ljIG9wZXJhdG9ycyBvZiBQeXRob24uICBGb3IgZXhhbXBsZSwgYGBvcGVyYXRvci5hZGQoeCwgeSlgYCBpcwpAQCAtMjM1LDYgKzIzOCwxNCBAQAogCiAuLiBYWFg6IGZpbmQgYSBiZXR0ZXIsIHJlYWRhYmxlLCBleGFtcGxlCiAKKy4uIGZ1bmN0aW9uOjogbGVuZ3RoX2hpbnQob2JqLCBkZWZhdWx0PTApCisKKyAgIFJldHVybiBhbiBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICpvKi4gRmlyc3QgdHJ5aW5nIHRvIHJldHVybiBpdHMKKyAgIGFjdHVhbCBsZW5ndGgsIHRoZW4gYW4gZXN0aW1hdGUgdXNpbmcgOm1ldGg6YG9iamVjdC5fX2xlbmd0aF9oaW50X19gLCBhbmQKKyAgIGZpbmFsbHkgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IHZhbHVlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogVGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgYWxzbyBkZWZpbmVzIHRvb2xzIGZvciBnZW5lcmFsaXplZCBhdHRyaWJ1dGUgYW5kIGl0ZW0KIGxvb2t1cHMuICBUaGVzZSBhcmUgdXNlZnVsIGZvciBtYWtpbmcgZmFzdCBmaWVsZCBleHRyYWN0b3JzIGFzIGFyZ3VtZW50cyBmb3IKIDpmdW5jOmBtYXBgLCA6ZnVuYzpgc29ydGVkYCwgOm1ldGg6YGl0ZXJ0b29scy5ncm91cGJ5YCwgb3Igb3RoZXIgZnVuY3Rpb25zIHRoYXQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0IGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKaW5kZXggMzZmMmQxNC4uMjVjYWU2YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKQEAgLTQyLDcgKzQyLDYgQEAKICAgICogOm1vZDpgcG9zaXhwYXRoYCBmb3IgVU5JWC1zdHlsZSBwYXRocwogICAgKiA6bW9kOmBudHBhdGhgIGZvciBXaW5kb3dzIHBhdGhzCiAgICAqIDptb2Q6YG1hY3BhdGhgIGZvciBvbGQtc3R5bGUgTWFjT1MgcGF0aHMKLSAgICogOm1vZDpgb3MyZW14cGF0aGAgZm9yIE9TLzIgRU1YIHBhdGhzCiAKIAogLi4gZnVuY3Rpb246OiBhYnNwYXRoKHBhdGgpCkBAIC0yNTAsMTUgKzI0OSwxNCBAQAogICAgT24gVW5peCwgdGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBpLW5vZGUgbnVtYmVyIGFuZCByYWlzZXMgYW4KICAgIGV4Y2VwdGlvbiBpZiBhIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KIAotICAgT24gV2luZG93cywgdHdvIGZpbGVzIGFyZSB0aGUgc2FtZSBpZiB0aGV5IHJlc29sdmUgdG8gdGhlIHNhbWUgZmluYWwgcGF0aAotICAgbmFtZSB1c2luZyB0aGUgV2luZG93cyBBUEkgY2FsbCBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuIFRoaXMgZnVuY3Rpb24KLSAgIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgaGFuZGxlcyBjYW5ub3QgYmUgb2J0YWluZWQgdG8gZWl0aGVyIGZpbGUuCi0KICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFdpbmRvd3Mgbm93IHVzZXMgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgYWxsIG90aGVyIHBsYXRmb3Jtcy4KKwogCiAuLiBmdW5jdGlvbjo6IHNhbWVvcGVuZmlsZShmcDEsIGZwMikKIApAQCAtMjc3LDcgKzI3NSwxMCBAQAogICAgOmZ1bmM6YG9zLmxzdGF0YCwgb3IgOmZ1bmM6YG9zLnN0YXRgLiAgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZQogICAgdW5kZXJseWluZyBjb21wYXJpc29uIHVzZWQgYnkgOmZ1bmM6YHNhbWVmaWxlYCBhbmQgOmZ1bmM6YHNhbWVvcGVuZmlsZWAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAogCiAuLiBmdW5jdGlvbjo6IHNwbGl0KHBhdGgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcy5yc3QgYi9Eb2MvbGlicmFyeS9vcy5yc3QKaW5kZXggMmMzMzM2Ni4uZjhiMTAyNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zLnJzdApAQCAtNTQsNyArNTQsNyBAQAogCiAgICBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQgbW9kdWxlIGltcG9ydGVkLiAgVGhlIGZvbGxvd2luZwogICAgbmFtZXMgaGF2ZSBjdXJyZW50bHkgYmVlbiByZWdpc3RlcmVkOiBgYCdwb3NpeCdgYCwgYGAnbnQnYGAsIGBgJ21hYydgYCwKLSAgIGBgJ29zMidgYCwgYGAnY2UnYGAsIGBgJ2phdmEnYGAuCisgICBgYCdjZSdgYCwgYGAnamF2YSdgYC4KIAogICAgLi4gc2VlYWxzbzo6CiAgICAgICA6YXR0cjpgc3lzLnBsYXRmb3JtYCBoYXMgYSBmaW5lciBncmFudWxhcml0eS4gIDpmdW5jOmBvcy51bmFtZWAgZ2l2ZXMKQEAgLTY4NSwxNyArNjg1LDMwIEBACiAKIC4uIGZ1bmN0aW9uOjogZHVwKGZkKQogCi0gICBSZXR1cm4gYSBkdXBsaWNhdGUgb2YgZmlsZSBkZXNjcmlwdG9yICpmZCouCisgICBSZXR1cm4gYSBkdXBsaWNhdGUgb2YgZmlsZSBkZXNjcmlwdG9yICpmZCouIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzCisgICA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIE9uIFdpbmRvd3MsIHdoZW4gZHVwbGljYXRpbmcgYSBzdGFuZGFyZCBzdHJlYW0gKDA6IHN0ZGluLCAxOiBzdGRvdXQsCisgICAyOiBzdGRlcnIpLCB0aGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBpbmhlcml0YWJsZQorICAgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCiAKLS4uIGZ1bmN0aW9uOjogZHVwMihmZCwgZmQyKQorCisuLiBmdW5jdGlvbjo6IGR1cDIoZmQsIGZkMiwgaW5oZXJpdGFibGU9VHJ1ZSkKIAogICAgRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvciAqZmQqIHRvICpmZDIqLCBjbG9zaW5nIHRoZSBsYXR0ZXIgZmlyc3QgaWYgbmVjZXNzYXJ5LgorICAgVGhlIGZpbGUgZGVzY3JpcHRvciAqZmQyKiBpcyA6cmVmOmBpbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YCBieSBkZWZhdWx0LAorICAgb3Igbm9uLWluaGVyaXRhYmxlIGlmICppbmhlcml0YWJsZSogaXMgYGBGYWxzZWBgLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGQgdGhlIG9wdGlvbmFsICppbmhlcml0YWJsZSogcGFyYW1ldGVyLgorCiAKIC4uIGZ1bmN0aW9uOjogZmNobW9kKGZkLCBtb2RlKQogCkBAIC04NDYsMTcgKzg1OSwyMSBAQAogICAgT3BlbiB0aGUgZmlsZSAqZmlsZSogYW5kIHNldCB2YXJpb3VzIGZsYWdzIGFjY29yZGluZyB0byAqZmxhZ3MqIGFuZCBwb3NzaWJseQogICAgaXRzIG1vZGUgYWNjb3JkaW5nIHRvICptb2RlKi4gIFdoZW4gY29tcHV0aW5nICptb2RlKiwgdGhlIGN1cnJlbnQgdW1hc2sgdmFsdWUKICAgIGlzIGZpcnN0IG1hc2tlZCBvdXQuICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIG5ld2x5IG9wZW5lZCBmaWxlLgorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmxhZyBhbmQgbW9kZSB2YWx1ZXMsIHNlZSB0aGUgQyBydW4tdGltZSBkb2N1bWVudGF0aW9uOwogICAgZmxhZyBjb25zdGFudHMgKGxpa2UgOmNvbnN0OmBPX1JET05MWWAgYW5kIDpjb25zdDpgT19XUk9OTFlgKSBhcmUgZGVmaW5lZCBpbgotICAgdGhpcyBtb2R1bGUgdG9vIChzZWUgOnJlZjpgb3Blbi1jb25zdGFudHNgKS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCisgICB0aGUgOm1vZDpgb3NgIG1vZHVsZS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCiAgICA6Y29uc3Q6YE9fQklOQVJZYCBpcyBuZWVkZWQgdG8gb3BlbiBmaWxlcyBpbiBiaW5hcnkgbW9kZS4KIAogICAgVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCA6cmVmOmBwYXRocyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZGVzY3JpcHRvcnMKLSAgIDxkaXJfZmQ+YC4KKyAgIDxkaXJfZmQ+YCB3aXRoIHRoZSAqZGlyX2ZkKiBwYXJhbWV0ZXIuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBsb3ctbGV2ZWwgSS9PLiAgRm9yIG5vcm1hbCB1c2FnZSwgdXNlIHRoZQpAQCAtODY3LDI1ICs4ODQsOTIgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCitUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgb3B0aW9ucyBmb3IgdGhlICpmbGFncyogcGFyYW1ldGVyIHRvIHRoZQorOmZ1bmM6YH5vcy5vcGVuYCBmdW5jdGlvbi4gIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBiaXR3aXNlIE9SIG9wZXJhdG9yCitgYHxgYC4gIFNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAgRm9yIGRlc2NyaXB0aW9ucyBvZgordGhlaXIgYXZhaWxhYmlsaXR5IGFuZCB1c2UsIGNvbnN1bHQgdGhlIDptYW5wYWdlOmBvcGVuKDIpYCBtYW51YWwgcGFnZSBvbiBVbml4CitvciBgdGhlIE1TRE4gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fUkRPTkxZCisgICAgICAgICAgT19XUk9OTFkKKyAgICAgICAgICBPX1JEV1IKKyAgICAgICAgICBPX0FQUEVORAorICAgICAgICAgIE9fQ1JFQVQKKyAgICAgICAgICBPX0VYQ0wKKyAgICAgICAgICBPX1RSVU5DCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fRFNZTkMKKyAgICAgICAgICBPX1JTWU5DCisgICAgICAgICAgT19TWU5DCisgICAgICAgICAgT19OREVMQVkKKyAgICAgICAgICBPX05PTkJMT0NLCisgICAgICAgICAgT19OT0NUVFkKKyAgICAgICAgICBPX1NITE9DSworICAgICAgICAgIE9fRVhMT0NLCisgICAgICAgICAgT19DTE9FWEVDCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gVW5peC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFkZCA6ZGF0YTpgT19DTE9FWEVDYCBjb25zdGFudC4KKworLi4gZGF0YTo6IE9fQklOQVJZCisgICAgICAgICAgT19OT0lOSEVSSVQKKyAgICAgICAgICBPX1NIT1JUX0xJVkVECisgICAgICAgICAgT19URU1QT1JBUlkKKyAgICAgICAgICBPX1JBTkRPTQorICAgICAgICAgIE9fU0VRVUVOVElBTAorICAgICAgICAgIE9fVEVYVAorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fQVNZTkMKKyAgICAgICAgICBPX0RJUkVDVAorICAgICAgICAgIE9fRElSRUNUT1JZCisgICAgICAgICAgT19OT0ZPTExPVworICAgICAgICAgIE9fTk9BVElNRQorICAgICAgICAgIE9fUEFUSAorICAgICAgICAgIE9fVE1QRklMRQorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIEdOVSBleHRlbnNpb25zIGFuZCBub3QgcHJlc2VudCBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBieQorICAgdGhlIEMgbGlicmFyeS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZCA6ZGF0YTpgT19UTVBGSUxFYCBjb25zdGFudC4gSXQncyBvbmx5IGF2YWlsYWJsZSBvbiBMaW51eCBLZXJuZWwgMy4xMQorICAgICAgb3IgbmV3ZXIuCisKIAogLi4gZnVuY3Rpb246OiBvcGVucHR5KCkKIAogICAgLi4gaW5kZXg6OiBtb2R1bGU6IHB0eQogCi0gICBPcGVuIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBwYWlyLiBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAobWFzdGVyLAotICAgc2xhdmUpYGAgZm9yIHRoZSBwdHkgYW5kIHRoZSB0dHksIHJlc3BlY3RpdmVseS4gRm9yIGEgKHNsaWdodGx5KSBtb3JlIHBvcnRhYmxlCi0gICBhcHByb2FjaCwgdXNlIHRoZSA6bW9kOmBwdHlgIG1vZHVsZS4KKyAgIE9wZW4gYSBuZXcgcHNldWRvLXRlcm1pbmFsIHBhaXIuIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycworICAgYGAobWFzdGVyLCBzbGF2ZSlgYCBmb3IgdGhlIHB0eSBhbmQgdGhlIHR0eSwgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGZpbGUKKyAgIGRlc2NyaXB0b3JzIGFyZSA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuIEZvciBhIChzbGlnaHRseSkgbW9yZQorICAgcG9ydGFibGUgYXBwcm9hY2gsIHVzZSB0aGUgOm1vZDpgcHR5YCBtb2R1bGUuCiAKICAgIEF2YWlsYWJpbGl0eTogc29tZSBmbGF2b3JzIG9mIFVuaXguCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwaXBlKCkKIAotICAgQ3JlYXRlIGEgcGlwZS4gIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycyBgYChyLCB3KWBgIHVzYWJsZSBmb3IgcmVhZGluZwotICAgYW5kIHdyaXRpbmcsIHJlc3BlY3RpdmVseS4KKyAgIENyZWF0ZSBhIHBpcGUuICBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAociwgdylgYCB1c2FibGUgZm9yCisgICByZWFkaW5nIGFuZCB3cml0aW5nLCByZXNwZWN0aXZlbHkuIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGFyZQorICAgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwaXBlMihmbGFncykKIApAQCAtMTA4MCw3OCArMTE2NCw2IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBfb3Blbi1jb25zdGFudHM6Ci0KLWBgb3BlbigpYGAgZmxhZyBjb25zdGFudHMKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIG9wdGlvbnMgZm9yIHRoZSAqZmxhZ3MqIHBhcmFtZXRlciB0byB0aGUKLTpmdW5jOmB+b3Mub3BlbmAgZnVuY3Rpb24uICBUaGV5IGNhbiBiZSBjb21iaW5lZCB1c2luZyB0aGUgYml0d2lzZSBPUiBvcGVyYXRvcgotYGB8YGAuICBTb21lIG9mIHRoZW0gYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4gIEZvciBkZXNjcmlwdGlvbnMgb2YKLXRoZWlyIGF2YWlsYWJpbGl0eSBhbmQgdXNlLCBjb25zdWx0IHRoZSA6bWFucGFnZTpgb3BlbigyKWAgbWFudWFsIHBhZ2Ugb24gVW5peAotb3IgYHRoZSBNU0ROIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvejBrYzhlM3ouYXNweD5gXyBvbiBXaW5kb3dzLgotCi0KLS4uIGRhdGE6OiBPX1JET05MWQotICAgICAgICAgIE9fV1JPTkxZCi0gICAgICAgICAgT19SRFdSCi0gICAgICAgICAgT19BUFBFTkQKLSAgICAgICAgICBPX0NSRUFUCi0gICAgICAgICAgT19FWENMCi0gICAgICAgICAgT19UUlVOQwotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIGF2YWlsYWJsZSBvbiBVbml4IGFuZCBXaW5kb3dzLgotCi0KLS4uIGRhdGE6OiBPX0RTWU5DCi0gICAgICAgICAgT19SU1lOQwotICAgICAgICAgIE9fU1lOQwotICAgICAgICAgIE9fTkRFTEFZCi0gICAgICAgICAgT19OT05CTE9DSwotICAgICAgICAgIE9fTk9DVFRZCi0gICAgICAgICAgT19TSExPQ0sKLSAgICAgICAgICBPX0VYTE9DSwotICAgICAgICAgIE9fQ0xPRVhFQwotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFVuaXguCi0KLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICBBZGQgOmRhdGE6YE9fQ0xPRVhFQ2AgY29uc3RhbnQuCi0KLS4uIGRhdGE6OiBPX0JJTkFSWQotICAgICAgICAgIE9fTk9JTkhFUklUCi0gICAgICAgICAgT19TSE9SVF9MSVZFRAotICAgICAgICAgIE9fVEVNUE9SQVJZCi0gICAgICAgICAgT19SQU5ET00KLSAgICAgICAgICBPX1NFUVVFTlRJQUwKLSAgICAgICAgICBPX1RFWFQKLQotICAgVGhlc2UgY29uc3RhbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgotCi0KLS4uIGRhdGE6OiBPX0FTWU5DCi0gICAgICAgICAgT19ESVJFQ1QKLSAgICAgICAgICBPX0RJUkVDVE9SWQotICAgICAgICAgIE9fTk9GT0xMT1cKLSAgICAgICAgICBPX05PQVRJTUUKLQotICAgVGhlc2UgY29uc3RhbnRzIGFyZSBHTlUgZXh0ZW5zaW9ucyBhbmQgbm90IHByZXNlbnQgaWYgdGhleSBhcmUgbm90IGRlZmluZWQgYnkKLSAgIHRoZSBDIGxpYnJhcnkuCi0KLQotLi4gZGF0YTo6IFJUTERfTEFaWQotICAgICAgICAgIFJUTERfTk9XCi0gICAgICAgICAgUlRMRF9HTE9CQUwKLSAgICAgICAgICBSVExEX0xPQ0FMCi0gICAgICAgICAgUlRMRF9OT0RFTEVURQotICAgICAgICAgIFJUTERfTk9MT0FECi0gICAgICAgICAgUlRMRF9ERUVQQklORAotCi0gICBTZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UgOm1hbnBhZ2U6YGRsb3BlbigzKWAuCi0KLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotCi0KIC4uIF90ZXJtaW5hbC1zaXplOgogCiBRdWVyeWluZyB0aGUgc2l6ZSBvZiBhIHRlcm1pbmFsCkBAIC0xMTg5LDYgKzEyMDEsNDkgQEAKICAgICAgIEhlaWdodCBvZiB0aGUgdGVybWluYWwgd2luZG93IGluIGNoYXJhY3RlcnMuCiAKIAorLi4gX2ZkX2luaGVyaXRhbmNlOgorCitJbmhlcml0YW5jZSBvZiBGaWxlIERlc2NyaXB0b3JzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitBIGZpbGUgZGVzY3JpcHRvciBoYXMgYW4gImluaGVyaXRhYmxlIiBmbGFnIHdoaWNoIGluZGljYXRlcyBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yCitjYW4gYmUgaW5oZXJpdGVkIGJ5IGNoaWxkIHByb2Nlc3Nlcy4gIFNpbmNlIFB5dGhvbiAzLjQsIGZpbGUgZGVzY3JpcHRvcnMKK2NyZWF0ZWQgYnkgUHl0aG9uIGFyZSBub24taW5oZXJpdGFibGUgYnkgZGVmYXVsdC4KKworT24gVU5JWCwgbm9uLWluaGVyaXRhYmxlIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpbiBjaGlsZCBwcm9jZXNzZXMgYXQgdGhlCitleGVjdXRpb24gb2YgYSBuZXcgcHJvZ3JhbSwgb3RoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgaW5oZXJpdGVkLgorCitPbiBXaW5kb3dzLCBub24taW5oZXJpdGFibGUgaGFuZGxlcyBhbmQgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGluIGNoaWxkCitwcm9jZXNzZXMsIGV4Y2VwdCBmb3Igc3RhbmRhcmQgc3RyZWFtcyAoZmlsZSBkZXNjcmlwdG9ycyAwLCAxIGFuZCAyOiBzdGRpbiwgc3Rkb3V0CithbmQgc3RkZXJyKSwgd2hpY2ggYXJlIGFsd2F5cyBpbmhlcml0ZWQuICBVc2luZyA6ZnVuYzpgc3Bhd25cKiA8c3Bhd25sPmAgZnVuY3Rpb25zLAorYWxsIGluaGVyaXRhYmxlIGhhbmRsZXMgYW5kIGFsbCBpbmhlcml0YWJsZSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBpbmhlcml0ZWQuCitVc2luZyB0aGUgOm1vZDpgc3VicHJvY2Vzc2AgbW9kdWxlLCBhbGwgZmlsZSBkZXNjcmlwdG9ycyBleGNlcHQgc3RhbmRhcmQKK3N0cmVhbXMgYXJlIGNsb3NlZCwgYW5kIGluaGVyaXRhYmxlIGhhbmRsZXMgYXJlIG9ubHkgaW5oZXJpdGVkIGlmIHRoZQorKmNsb3NlX2ZkcyogcGFyYW1ldGVyIGlzIGBgRmFsc2VgYC4KKworLi4gZnVuY3Rpb246OiBnZXRfaW5oZXJpdGFibGUoZmQpCisKKyAgIEdldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yIChhIGJvb2xlYW4pLgorCisuLiBmdW5jdGlvbjo6IHNldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUpCisKKyAgIFNldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLgorCisuLiBmdW5jdGlvbjo6IGdldF9oYW5kbGVfaW5oZXJpdGFibGUoaGFuZGxlKQorCisgICBHZXQgdGhlICJpbmhlcml0YWJsZSIgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZSAoYSBib29sZWFuKS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisuLiBmdW5jdGlvbjo6IHNldF9oYW5kbGVfaW5oZXJpdGFibGUoaGFuZGxlLCBpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBoYW5kbGUuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworCiAuLiBfb3MtZmlsZS1kaXI6CiAKIEZpbGVzIGFuZCBEaXJlY3RvcmllcwpAQCAtMzA0Nyw3ICszMTAyLDcgQEAKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLVRoZSBmb2xsb3dpbmcgc2NoZWR1bGluZyBwb2xpY2llcyBhcmUgZXhwb3NlZCBpZiB0aGV5IGFyZSBhIHN1cHBvcnRlZCBieSB0aGUKK1RoZSBmb2xsb3dpbmcgc2NoZWR1bGluZyBwb2xpY2llcyBhcmUgZXhwb3NlZCBpZiB0aGV5IGFyZSBzdXBwb3J0ZWQgYnkgdGhlCiBvcGVyYXRpbmcgc3lzdGVtLgogCiAuLiBkYXRhOjogU0NIRURfT1RIRVIKQEAgLTMxNTYsMTAgKzMyMTEsNiBAQAogICAgUmV0dXJuIHRoZSBzZXQgb2YgQ1BVcyB0aGUgcHJvY2VzcyB3aXRoIFBJRCAqcGlkKiAob3IgdGhlIGN1cnJlbnQgcHJvY2VzcwogICAgaWYgemVybykgaXMgcmVzdHJpY3RlZCB0by4KIAotICAgLi4gc2VlYWxzbzo6Ci0gICAgICA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudGAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlCi0gICAgICBzeXN0ZW0uCi0KIAogLi4gX29zLXBhdGg6CiAKQEAgLTMxOTcsNiArMzI0OCwxMyBAQAogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKKy4uIGZ1bmN0aW9uOjogY3B1X2NvdW50KCkKKworICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLiBSZXR1cm5zIE5vbmUgaWYgdW5kZXRlcm1pbmVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IGdldGxvYWRhdmcoKQogCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBwcm9jZXNzZXMgaW4gdGhlIHN5c3RlbSBydW4gcXVldWUgYXZlcmFnZWQgb3ZlciB0aGUgbGFzdApAQCAtMzI5NSw2ICszMzUzLDE5IEBACiAgICBUaGUgZmlsZSBwYXRoIG9mIHRoZSBudWxsIGRldmljZS4gRm9yIGV4YW1wbGU6IGBgJy9kZXYvbnVsbCdgYCBmb3IKICAgIFBPU0lYLCBgYCdudWwnYGAgZm9yIFdpbmRvd3MuICBBbHNvIGF2YWlsYWJsZSB2aWEgOm1vZDpgb3MucGF0aGAuCiAKKy4uIGRhdGE6OiBSVExEX0xBWlkKKyAgICAgICAgICBSVExEX05PVworICAgICAgICAgIFJUTERfR0xPQkFMCisgICAgICAgICAgUlRMRF9MT0NBTAorICAgICAgICAgIFJUTERfTk9ERUxFVEUKKyAgICAgICAgICBSVExEX05PTE9BRAorICAgICAgICAgIFJUTERfREVFUEJJTkQKKworICAgRmxhZ3MgZm9yIHVzZSB3aXRoIHRoZSA6ZnVuYzpgfnN5cy5zZXRkbG9wZW5mbGFnc2AgYW5kCisgICA6ZnVuYzpgfnN5cy5nZXRkbG9wZW5mbGFnc2AgZnVuY3Rpb25zLiAgU2VlIHRoZSBVbml4IG1hbnVhbCBwYWdlCisgICA6bWFucGFnZTpgZGxvcGVuKDMpYCBmb3Igd2hhdCB0aGUgZGlmZmVyZW50IGZsYWdzIG1lYW4uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAuLiBfb3MtbWlzY2Z1bmM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BkYi5yc3QgYi9Eb2MvbGlicmFyeS9wZGIucnN0CmluZGV4IGY0ZTM3YWMuLjQ4YThhNmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BkYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGRiLnJzdApAQCAtNDEsNyArNDEsNyBAQAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgIFRhYi1jb21wbGV0aW9uIHZpYSB0aGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSBpcyBhdmFpbGFibGUgZm9yIGNvbW1hbmRzIGFuZAogICAgY29tbWFuZCBhcmd1bWVudHMsIGUuZy4gdGhlIGN1cnJlbnQgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lcyBhcmUgb2ZmZXJlZCBhcwotICAgYXJndW1lbnRzIG9mIHRoZSBgYHByaW50YGAgY29tbWFuZC4KKyAgIGFyZ3VtZW50cyBvZiB0aGUgYGBwYGAgY29tbWFuZC4KIAogOmZpbGU6YHBkYi5weWAgY2FuIGFsc28gYmUgaW52b2tlZCBhcyBhIHNjcmlwdCB0byBkZWJ1ZyBvdGhlciBzY3JpcHRzLiAgRm9yCiBleGFtcGxlOjoKQEAgLTMwOSw3ICszMDksNyBAQAogICAgYGBlbmRgYCB0byB0ZXJtaW5hdGUgdGhlIGNvbW1hbmRzLiBBbiBleGFtcGxlOjoKIAogICAgICAgKFBkYikgY29tbWFuZHMgMQotICAgICAgKGNvbSkgcHJpbnQgc29tZV92YXJpYWJsZQorICAgICAgKGNvbSkgcCBzb21lX3ZhcmlhYmxlCiAgICAgICAoY29tKSBlbmQKICAgICAgIChQZGIpCiAKQEAgLTQwMywxMyArNDAzLDE5IEBACiAKICAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgogCi0uLiBwZGJjb21tYW5kOjogcChyaW50KSBleHByZXNzaW9uCisuLiBwZGJjb21tYW5kOjogcCBleHByZXNzaW9uCiAKICAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzIHZhbHVlLgogCisgICAuLiBub3RlOjoKKworICAgICAgYGBwcmludCgpYGAgY2FuIGFsc28gYmUgdXNlZCwgYnV0IGlzIG5vdCBhIGRlYnVnZ2VyIGNvbW1hbmQgLS0tIHRoaXMgZXhlY3V0ZXMgdGhlCisgICAgICBQeXRob24gOmZ1bmM6YHByaW50YCBmdW5jdGlvbi4KKworCiAuLiBwZGJjb21tYW5kOjogcHAgZXhwcmVzc2lvbgogCi0gICBMaWtlIHRoZSA6cGRiY21kOmBwcmludGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcworICAgTGlrZSB0aGUgOnBkYmNtZDpgcGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcwogICAgcHJldHR5LXByaW50ZWQgdXNpbmcgdGhlIDptb2Q6YHBwcmludGAgbW9kdWxlLgogCiAuLiBwZGJjb21tYW5kOjogd2hhdGlzIGV4cHJlc3Npb24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QgYi9Eb2MvbGlicmFyeS9waWNrbGUucnN0CmluZGV4IDAzNTRhMzAuLjNiZGJjZjkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGlja2xlLnJzdApAQCAtMzg0LDcgKzM4NCw4IEBACiAKICogdHVwbGVzLCBsaXN0cywgc2V0cywgYW5kIGRpY3Rpb25hcmllcyBjb250YWluaW5nIG9ubHkgcGlja2xhYmxlIG9iamVjdHMKIAotKiBmdW5jdGlvbnMgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlCisqIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUgKHVzaW5nIDprZXl3b3JkOmBkZWZgLCBub3QKKyAgOmtleXdvcmQ6YGxhbWJkYWApCiAKICogYnVpbHQtaW4gZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZQogCkBAIC00MDIsNyArNDAzLDcgQEAKIDpmdW5jOmBzeXMuc2V0cmVjdXJzaW9ubGltaXRgLgogCiBOb3RlIHRoYXQgZnVuY3Rpb25zIChidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkKSBhcmUgcGlja2xlZCBieSAiZnVsbHkgcXVhbGlmaWVkIgotbmFtZSByZWZlcmVuY2UsIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWVhbnMgdGhhdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lIGlzCituYW1lIHJlZmVyZW5jZSwgbm90IGJ5IHZhbHVlLiBbI11fICBUaGlzIG1lYW5zIHRoYXQgb25seSB0aGUgZnVuY3Rpb24gbmFtZSBpcwogcGlja2xlZCwgYWxvbmcgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGluLiAgTmVpdGhlcgogdGhlIGZ1bmN0aW9uJ3MgY29kZSwgbm9yIGFueSBvZiBpdHMgZnVuY3Rpb24gYXR0cmlidXRlcyBhcmUgcGlja2xlZC4gIFRodXMgdGhlCiBkZWZpbmluZyBtb2R1bGUgbXVzdCBiZSBpbXBvcnRhYmxlIGluIHRoZSB1bnBpY2tsaW5nIGVudmlyb25tZW50LCBhbmQgdGhlIG1vZHVsZQpAQCAtODUwLDYgKzg1MSw5IEBACiAKIC4uIFsjXSBEb24ndCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgOm1vZDpgbWFyc2hhbGAgbW9kdWxlCiAKKy4uIFsjXSBUaGlzIGlzIHdoeSA6a2V5d29yZDpgbGFtYmRhYCBmdW5jdGlvbnMgY2Fubm90IGJlIHBpY2tsZWQ6ICBhbGwKKyAgICA6a2V5d29yZDpgbGFtYmRhYCBmdW5jdGlvbnMgc2hhcmUgdGhlIHNhbWUgbmFtZTogIGBgPGxhbWJkYT5gYC4KKwogLi4gWyNdIFRoZSBleGNlcHRpb24gcmFpc2VkIHdpbGwgbGlrZWx5IGJlIGFuIDpleGM6YEltcG9ydEVycm9yYCBvciBhbgogICAgOmV4YzpgQXR0cmlidXRlRXJyb3JgIGJ1dCBpdCBjb3VsZCBiZSBzb21ldGhpbmcgZWxzZS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcG9wbGliLnJzdCBiL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKaW5kZXggYjQwODBkNi4uZTI0OGQ2YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcG9wbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CkBAIC0xMyw4ICsxMywxMSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGNsYXNzLCA6Y2xhc3M6YFBPUDNgLCB3aGljaCBlbmNhcHN1bGF0ZXMgYSBjb25uZWN0aW9uIHRvIGEKLVBPUDMgc2VydmVyIGFuZCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBhcyBkZWZpbmVkIGluIDpyZmM6YDE3MjVgLiAgVGhlCi06Y2xhc3M6YFBPUDNgIGNsYXNzIHN1cHBvcnRzIGJvdGggdGhlIG1pbmltYWwgYW5kIG9wdGlvbmFsIGNvbW1hbmQgc2V0cy4KK1BPUDMgc2VydmVyIGFuZCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBhcyBkZWZpbmVkIGluIDpyZmM6YDE5MzlgLiBUaGUKKzpjbGFzczpgUE9QM2AgY2xhc3Mgc3VwcG9ydHMgYm90aCB0aGUgbWluaW1hbCBhbmQgb3B0aW9uYWwgY29tbWFuZCBzZXRzIGZyb20KKzpyZmM6YDE5MzlgLiBUaGUgOmNsYXNzOmBQT1AzYCBjbGFzcyBhbHNvIHN1cHBvcnRzIHRoZSBgU1RMU2AgY29tbWFuZCBpbnRyb2R1Y2VkCitpbiA6cmZjOmAyNTk1YCB0byBlbmFibGUgZW5jcnlwdGVkIGNvbW11bmljYXRpb24gb24gYW4gYWxyZWFkeSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uLgorCiBBZGRpdGlvbmFsbHksIHRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgOmNsYXNzOmBQT1AzX1NTTGAsIHdoaWNoIHByb3ZpZGVzCiBzdXBwb3J0IGZvciBjb25uZWN0aW5nIHRvIFBPUDMgc2VydmVycyB0aGF0IHVzZSBTU0wgYXMgYW4gdW5kZXJseWluZyBwcm90b2NvbAogbGF5ZXIuCkBAIC05Nyw2ICsxMDAsMTQgQEAKICAgIFJldHVybnMgdGhlIGdyZWV0aW5nIHN0cmluZyBzZW50IGJ5IHRoZSBQT1AzIHNlcnZlci4KIAogCisuLiBtZXRob2Q6OiBQT1AzLmNhcGEoKQorCisgICBRdWVyeSB0aGUgc2VydmVyJ3MgY2FwYWJpbGl0aWVzIGFzIHNwZWNpZmllZCBpbiA6cmZjOmAyNDQ5YC4KKyAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IGluIHRoZSBmb3JtIGBgeyduYW1lJzogWydwYXJhbScuLi5dfWBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBQT1AzLnVzZXIodXNlcm5hbWUpCiAKICAgIFNlbmQgdXNlciBjb21tYW5kLCByZXNwb25zZSBzaG91bGQgaW5kaWNhdGUgdGhhdCBhIHBhc3N3b3JkIGlzIHJlcXVpcmVkLgpAQCAtMTc2LDYgKzE4NywxOCBAQAogICAgdGhlIHVuaXF1ZSBpZCBmb3IgdGhhdCBtZXNzYWdlIGluIHRoZSBmb3JtIGBgJ3Jlc3BvbnNlIG1lc2dudW0gdWlkYGAsIG90aGVyd2lzZQogICAgcmVzdWx0IGlzIGxpc3QgYGAocmVzcG9uc2UsIFsnbWVzZ251bSB1aWQnLCAuLi5dLCBvY3RldHMpYGAuCiAKKy4uIG1ldGhvZDo6IFBPUDMuc3Rscyhjb250ZXh0PU5vbmUpCisKKyAgIFN0YXJ0IGEgVExTIHNlc3Npb24gb24gdGhlIGFjdGl2ZSBjb25uZWN0aW9uIGFzIHNwZWNpZmllZCBpbiA6cmZjOmAyNTk1YC4KKyAgIFRoaXMgaXMgb25seSBhbGxvd2VkIGJlZm9yZSB1c2VyIGF1dGhlbnRpY2F0aW9uCisKKyAgICpjb250ZXh0KiBwYXJhbWV0ZXIgaXMgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzCisgICBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbiBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvCisgICBhIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkgc3RydWN0dXJlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBJbnN0YW5jZXMgb2YgOmNsYXNzOmBQT1AzX1NTTGAgaGF2ZSBubyBhZGRpdGlvbmFsIG1ldGhvZHMuIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcwogc3ViY2xhc3MgaXMgaWRlbnRpY2FsIHRvIGl0cyBwYXJlbnQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QgYi9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CmluZGV4IDNhODYzMzEuLjQ0N2Y4ZjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdApAQCAtMTQsOCArMTQsOCBAQAogUHl0aG9uIGRhdGEgc3RydWN0dXJlcyBpbiBhIGZvcm0gd2hpY2ggY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gdGhlIGludGVycHJldGVyLgogSWYgdGhlIGZvcm1hdHRlZCBzdHJ1Y3R1cmVzIGluY2x1ZGUgb2JqZWN0cyB3aGljaCBhcmUgbm90IGZ1bmRhbWVudGFsIFB5dGhvbgogdHlwZXMsIHRoZSByZXByZXNlbnRhdGlvbiBtYXkgbm90IGJlIGxvYWRhYmxlLiAgVGhpcyBtYXkgYmUgdGhlIGNhc2UgaWYgb2JqZWN0cwotc3VjaCBhcyBmaWxlcywgc29ja2V0cywgY2xhc3Nlcywgb3IgaW5zdGFuY2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55Ci1vdGhlciBidWlsdC1pbiBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gY29uc3RhbnRzLgorc3VjaCBhcyBmaWxlcywgc29ja2V0cyBvciBjbGFzc2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55IG90aGVyCitvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gbGl0ZXJhbHMuCiAKIFRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24ga2VlcHMgb2JqZWN0cyBvbiBhIHNpbmdsZSBsaW5lIGlmIGl0IGNhbiwgYW5kCiBicmVha3MgdGhlbSBvbnRvIG11bHRpcGxlIGxpbmVzIGlmIHRoZXkgZG9uJ3QgZml0IHdpdGhpbiB0aGUgYWxsb3dlZCB3aWR0aC4KQEAgLTI5LDE0ICsyOSwxNCBAQAogLi4gRmlyc3QgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzOgogCiAKLS4uIGNsYXNzOjogUHJldHR5UHJpbnRlcihpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lKQorLi4gY2xhc3M6OiBQcmV0dHlQcmludGVyKGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKQogCiAgICBDb25zdHJ1Y3QgYSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGluc3RhbmNlLiAgVGhpcyBjb25zdHJ1Y3RvciB1bmRlcnN0YW5kcwogICAgc2V2ZXJhbCBrZXl3b3JkIHBhcmFtZXRlcnMuICBBbiBvdXRwdXQgc3RyZWFtIG1heSBiZSBzZXQgdXNpbmcgdGhlICpzdHJlYW0qCiAgICBrZXl3b3JkOyB0aGUgb25seSBtZXRob2QgdXNlZCBvbiB0aGUgc3RyZWFtIG9iamVjdCBpcyB0aGUgZmlsZSBwcm90b2NvbCdzCiAgICA6bWV0aDpgd3JpdGVgIG1ldGhvZC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGFkb3B0cwotICAgYGBzeXMuc3Rkb3V0YGAuICBUaHJlZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgbWF5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUKLSAgIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbi4gIFRoZSBrZXl3b3JkcyBhcmUgKmluZGVudCosICpkZXB0aCosIGFuZCAqd2lkdGgqLiAgVGhlCisgICBgYHN5cy5zdGRvdXRgYC4gIFRoZQogICAgYW1vdW50IG9mIGluZGVudGF0aW9uIGFkZGVkIGZvciBlYWNoIHJlY3Vyc2l2ZSBsZXZlbCBpcyBzcGVjaWZpZWQgYnkgKmluZGVudCo7CiAgICB0aGUgZGVmYXVsdCBpcyBvbmUuICBPdGhlciB2YWx1ZXMgY2FuIGNhdXNlIG91dHB1dCB0byBsb29rIGEgbGl0dGxlIG9kZCwgYnV0IGNhbgogICAgbWFrZSBuZXN0aW5nIGVhc2llciB0byBzcG90LiAgVGhlIG51bWJlciBvZiBsZXZlbHMgd2hpY2ggbWF5IGJlIHByaW50ZWQgaXMKQEAgLTQ1LDcgKzQ1LDEyIEBACiAgICB0aGUgZGVwdGggb2YgdGhlIG9iamVjdHMgYmVpbmcgZm9ybWF0dGVkLiAgVGhlIGRlc2lyZWQgb3V0cHV0IHdpZHRoIGlzCiAgICBjb25zdHJhaW5lZCB1c2luZyB0aGUgKndpZHRoKiBwYXJhbWV0ZXI7IHRoZSBkZWZhdWx0IGlzIDgwIGNoYXJhY3RlcnMuICBJZiBhCiAgICBzdHJ1Y3R1cmUgY2Fubm90IGJlIGZvcm1hdHRlZCB3aXRoaW4gdGhlIGNvbnN0cmFpbmVkIHdpZHRoLCBhIGJlc3QgZWZmb3J0IHdpbGwKLSAgIGJlIG1hZGUuCisgICBiZSBtYWRlLiAgSWYgKmNvbXBhY3QqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgZWFjaCBpdGVtIG9mIGEgbG9uZyBzZXF1ZW5jZQorICAgd2lsbCBiZSBmb3JtYXR0ZWQgb24gYSBzZXBhcmF0ZSBsaW5lLiAgSWYgKmNvbXBhY3QqIGlzIHRydWUsIGFzIG1hbnkgaXRlbXMKKyAgIGFzIHdpbGwgZml0IHdpdGhpbiB0aGUgKndpZHRoKiB3aWxsIGJlIGZvcm1hdHRlZCBvbiBlYWNoIG91dHB1dCBsaW5lLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpjb21wYWN0KiBwYXJhbWV0ZXIuCiAKICAgICAgID4+PiBpbXBvcnQgcHByaW50CiAgICAgICA+Pj4gc3R1ZmYgPSBbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywgJ2tuaWdodHMnLCAnbmknXQpAQCAtNTgsNiArNjMsMTIgQEAKICAgICAgICAgICAnbHVtYmVyamFjaycsCiAgICAgICAgICAgJ2tuaWdodHMnLAogICAgICAgICAgICduaSddCisgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcih3aWR0aD00MSwgY29tcGFjdD1UcnVlKQorICAgICAgPj4+IHBwLnBwcmludChzdHVmZikKKyAgICAgIFtbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywKKyAgICAgICAgJ2tuaWdodHMnLCAnbmknXSwKKyAgICAgICAnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsCisgICAgICAgJ25pJ10KICAgICAgID4+PiB0dXAgPSAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywKICAgICAgIC4uLiAoJ3BhcnJvdCcsICgnZnJlc2ggZnJ1aXQnLCkpKSkpKSkpCiAgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcihkZXB0aD02KQpAQCAtNjUsMjMgKzc2LDMwIEBACiAgICAgICAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywgKC4uLikpKSkpKSkKIAogCi1UaGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjbGFzcyBzdXBwb3J0cyBzZXZlcmFsIGRlcml2YXRpdmUgZnVuY3Rpb25zOgorVGhlIDptb2Q6YHBwcmludGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgc2V2ZXJhbCBzaG9ydGN1dCBmdW5jdGlvbnM6CiAKLS4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgY29tcGFjdD1GYWxzZSkKIAotICAgUmV0dXJuIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogYXMgYSBzdHJpbmcuICAqaW5kZW50KiwgKndpZHRoKgotICAgYW5kICpkZXB0aCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgY29uc3RydWN0b3IgYXMKLSAgIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKyAgIFJldHVybiB0aGUgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmplY3QqIGFzIGEgc3RyaW5nLiAgKmluZGVudCosCisgICAqd2lkdGgqLCAqZGVwdGgqIGFuZCAqY29tcGFjdCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAKKyAgIGNvbnN0cnVjdG9yIGFzIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqY29tcGFjdCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1GYWxzZSkKIAogICAgUHJpbnRzIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogb24gKnN0cmVhbSosIGZvbGxvd2VkIGJ5IGEKICAgIG5ld2xpbmUuICBJZiAqc3RyZWFtKiBpcyBgYE5vbmVgYCwgYGBzeXMuc3Rkb3V0YGAgaXMgdXNlZC4gIFRoaXMgbWF5IGJlIHVzZWQKICAgIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBpbnN0ZWFkIG9mIHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uIGZvcgogICAgaW5zcGVjdGluZyB2YWx1ZXMgKHlvdSBjYW4gZXZlbiByZWFzc2lnbiBgYHByaW50ID0gcHByaW50LnBwcmludGBgIGZvciB1c2UKLSAgIHdpdGhpbiBhIHNjb3BlKS4gICppbmRlbnQqLCAqd2lkdGgqIGFuZCAqZGVwdGgqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQotICAgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisgICB3aXRoaW4gYSBzY29wZSkuICAqaW5kZW50KiwgKndpZHRoKiwgKmRlcHRoKiBhbmQgKmNvbXBhY3QqIHdpbGwgYmUgcGFzc2VkCisgICB0byB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmNvbXBhY3QqIHBhcmFtZXRlci4KIAogICAgICAgPj4+IGltcG9ydCBwcHJpbnQKICAgICAgID4+PiBzdHVmZiA9IFsnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsICduaSddCkBAIC0xOTMsMTAxICsyMTEsMTQxIEBACiAtLS0tLS0tCiAKIFRvIGRlbW9uc3RyYXRlIHNldmVyYWwgdXNlcyBvZiB0aGUgOmZ1bmM6YHBwcmludGAgZnVuY3Rpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLAotbGV0J3MgZmV0Y2ggaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9qZWN0IGZyb20gUHlQSTo6CitsZXQncyBmZXRjaCBpbmZvcm1hdGlvbiBhYm91dCBhIHByb2plY3QgZnJvbSBgUHlQSSA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmc+YF86OgogCiAgICA+Pj4gaW1wb3J0IGpzb24KICAgID4+PiBpbXBvcnQgcHByaW50CiAgICA+Pj4gZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgotICAgPj4+IHdpdGggdXJsb3BlbignaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci9qc29uJykgYXMgdXJsOgorICAgPj4+IHdpdGggdXJsb3BlbignaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQvanNvbicpIGFzIHVybDoKICAgIC4uLiAgICAgaHR0cF9pbmZvID0gdXJsLmluZm8oKQogICAgLi4uICAgICByYXdfZGF0YSA9IHVybC5yZWFkKCkuZGVjb2RlKGh0dHBfaW5mby5nZXRfY29udGVudF9jaGFyc2V0KCkpCiAgICA+Pj4gcHJvamVjdF9pbmZvID0ganNvbi5sb2FkcyhyYXdfZGF0YSkKLSAgID4+PiByZXN1bHQgPSB7J2hlYWRlcnMnOiBodHRwX2luZm8uaXRlbXMoKSwgJ2JvZHknOiBwcm9qZWN0X2luZm99CiAKIEluIGl0cyBiYXNpYyBmb3JtLCA6ZnVuYzpgcHByaW50YCBzaG93cyB0aGUgd2hvbGUgb2JqZWN0OjoKIAotICAgPj4+IHBwcmludC5wcHJpbnQocmVzdWx0KQotICAgeydib2R5JzogeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMiwKLSAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgOjogRW5nbGlzaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBQeXRob24gTW9kdWxlcyddLAotICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCi0gICAgICAgICAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogJ2NvbmZpZ3BhcnNlciBpbmkgcGFyc2luZyBjb25mIGNmZyBjb25maWd1cmF0aW9uIGZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ2FueScsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXIvMy4yLjByMycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3VtbWFyeSc6ICdUaGlzIGxpYnJhcnkgYnJpbmdzIHRoZSB1cGRhdGVkIGNvbmZpZ3BhcnNlciBmcm9tIFB5dGhvbiAzLjIrIHRvIFB5dGhvbiAyLjYtMi43LicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMy4yLjByMyd9LAotICAgICAgICAgICAndXJscyc6IFt7J2NvbW1lbnRfdGV4dCc6ICcnLAotICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2Fkcyc6IDQ3LAotICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ2NvbmZpZ3BhcnNlci0zLjIuMHIzLnRhci5neicsCi0gICAgICAgICAgICAgICAgICAgICAnaGFzX3NpZyc6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgJ21kNV9kaWdlc3QnOiAnODUwMGZkODdjNjFhYzBkZTMyOGZjOTk2ZmNlNjliOTYnLAotICAgICAgICAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ3NkaXN0JywKLSAgICAgICAgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICdzb3VyY2UnLAotICAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiAzMjI4MSwKLSAgICAgICAgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDExLTA1LTEwVDE2OjI4OjUwJywKLSAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvYy9jb25maWdwYXJzZXIvY29uZmlncGFyc2VyLTMuMi4wcjMudGFyLmd6J31dfSwKLSAgICdoZWFkZXJzJzogWygnRGF0ZScsICdTYXQsIDE0IE1heSAyMDExIDEyOjQ4OjUyIEdNVCcpLAotICAgICAgICAgICAgICAgKCdTZXJ2ZXInLCAnQXBhY2hlLzIuMi4xNiAoRGViaWFuKScpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2lubGluZScpLAotICAgICAgICAgICAgICAgKCdDb25uZWN0aW9uJywgJ2Nsb3NlJyksCi0gICAgICAgICAgICAgICAoJ1RyYW5zZmVyLUVuY29kaW5nJywgJ2NodW5rZWQnKSwKLSAgICAgICAgICAgICAgICgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9IlVURi04IicpXX0KKyAgID4+PiBwcHJpbnQucHByaW50KHByb2plY3RfaW5mbykKKyAgIHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTI1LAorICAgICAgICAgICAgICdhdXRob3InOiAnR2x5cGggTGVma293aXR6JywKKyAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ2dseXBoQHR3aXN0ZWRtYXRyaXguY29tJywKKyAgICAgICAgICAgICAnYnVndHJhY2tfdXJsJzogJycsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfY29kZV9rd2FsaXRlZV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfZG9jdW1lbnRhdGlvbl9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyIDo6IE9ubHknXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSBmcmFtZXdvcmsgZm9yIFB5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCBuZXR3b3JrIHByb2dyYW1taW5nIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcHJvdG9jb2wgaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgbmV0d29ya2luZyBmcmFtZXdvcmsgd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3snY29tbWVudF90ZXh0JzogJycsCisgICAgICAgICAgICAgICdkb3dubG9hZHMnOiA3MTg0NCwKKyAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ1R3aXN0ZWQtMTIuMy4wLnRhci5iejInLAorICAgICAgICAgICAgICAnaGFzX3NpZyc6IEZhbHNlLAorICAgICAgICAgICAgICAnbWQ1X2RpZ2VzdCc6ICc2ZTI4OTgyNWYzYmY1NTkxY2ZkNjcwODc0Y2MwODYyZCcsCisgICAgICAgICAgICAgICdwYWNrYWdldHlwZSc6ICdzZGlzdCcsCisgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICdzb3VyY2UnLAorICAgICAgICAgICAgICAnc2l6ZSc6IDI2MTU3MzMsCisgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDEyLTEyLTI2VDEyOjQ3OjAzJywKKyAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvVC9Ud2lzdGVkL1R3aXN0ZWQtMTIuMy4wLnRhci5iejInfSwKKyAgICAgICAgICAgICB7J2NvbW1lbnRfdGV4dCc6ICcnLAorICAgICAgICAgICAgICAnZG93bmxvYWRzJzogNTIyNCwKKyAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ1R3aXN0ZWQtMTIuMy4wLndpbjMyLXB5Mi43Lm1zaScsCisgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCisgICAgICAgICAgICAgICdtZDVfZGlnZXN0JzogJzZiNzc4ZjUyMDFiNjIyYTU1MTlhMmFjYTFhMmZlNTEyJywKKyAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ2JkaXN0X21zaScsCisgICAgICAgICAgICAgICdweXRob25fdmVyc2lvbic6ICcyLjcnLAorICAgICAgICAgICAgICAnc2l6ZSc6IDI5MTYzNTIsCisgICAgICAgICAgICAgICd1cGxvYWRfdGltZSc6ICcyMDEyLTEyLTI2VDEyOjQ4OjE1JywKKyAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy8yLjcvVC9Ud2lzdGVkL1R3aXN0ZWQtMTIuMy4wLndpbjMyLXB5Mi43Lm1zaSd9XX0KIAogVGhlIHJlc3VsdCBjYW4gYmUgbGltaXRlZCB0byBhIGNlcnRhaW4gKmRlcHRoKiAoZWxsaXBzaXMgaXMgdXNlZCBmb3IgZGVlcGVyCiBjb250ZW50cyk6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHQsIGRlcHRoPTMpCi0gICB7J2JvZHknOiB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAotICAgICAgICAgICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCi0gICAgICAgICAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogJ2NvbmZpZ3BhcnNlciBpbmkgcGFyc2luZyBjb25mIGNmZyBjb25maWd1cmF0aW9uIGZpbGUnLAotICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ2FueScsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb25maWdwYXJzZXIvMy4yLjByMycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3VtbWFyeSc6ICdUaGlzIGxpYnJhcnkgYnJpbmdzIHRoZSB1cGRhdGVkIGNvbmZpZ3BhcnNlciBmcm9tIFB5dGhvbiAzLjIrIHRvIFB5dGhvbiAyLjYtMi43LicsCi0gICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMy4yLjByMyd9LAotICAgICAgICAgICAndXJscyc6IFt7Li4ufV19LAotICAgJ2hlYWRlcnMnOiBbKCdEYXRlJywgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgICAgICAgICAgICAoJ1NlcnZlcicsICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnaW5saW5lJyksCi0gICAgICAgICAgICAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAgICAgICAgICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLCAnY2h1bmtlZCcpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0iVVRGLTgiJyldfQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvLCBkZXB0aD0yKQorICAgeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMjUsCisgICAgICAgICAgICAgJ2F1dGhvcic6ICdHbHlwaCBMZWZrb3dpdHonLAorICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAnZ2x5cGhAdHdpc3RlZG1hdHJpeC5jb20nLAorICAgICAgICAgICAgICdidWd0cmFja191cmwnOiAnJywKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9jb2RlX2t3YWxpdGVlX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9kb2N1bWVudGF0aW9uX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9pbnN0YWxsYWJpbGl0eV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWy4uLl0sCisgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0FuIGV4dGVuc2libGUgZnJhbWV3b3JrIGZvciBQeXRob24gcHJvZ3JhbW1pbmcsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCBzcGVjaWFsIGZvY3VzXHJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24gZXZlbnQtYmFzZWQgbmV0d29yayBwcm9ncmFtbWluZyBhbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXByb3RvY29sIGludGVncmF0aW9uLicsCisgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCisgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8nLAorICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAorICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCisgICAgICAgICAgICAgJ21haW50YWluZXInOiAnJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcl9lbWFpbCc6ICcnLAorICAgICAgICAgICAgICduYW1lJzogJ1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAorICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAorICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzIG5ldHdvcmtpbmcgZnJhbWV3b3JrIHdyaXR0ZW4gaW4gUHl0aG9uJywKKyAgICAgICAgICAgICAndmVyc2lvbic6ICcxMi4zLjAnfSwKKyAgICAndXJscyc6IFt7Li4ufSwgey4uLn1dfQogCi1BZGRpdGlvbmFsbHksIG1heGltdW0gKndpZHRoKiBjYW4gYmUgc3VnZ2VzdGVkLiBJZiBhIGxvbmcgb2JqZWN0IGNhbm5vdCBiZQotc3BsaXQsIHRoZSBzcGVjaWZpZWQgd2lkdGggd2lsbCBiZSBleGNlZWRlZDo6CitBZGRpdGlvbmFsbHksIG1heGltdW0gY2hhcmFjdGVyICp3aWR0aCogY2FuIGJlIHN1Z2dlc3RlZC4gSWYgYSBsb25nIG9iamVjdAorY2Fubm90IGJlIHNwbGl0LCB0aGUgc3BlY2lmaWVkIHdpZHRoIHdpbGwgYmUgZXhjZWVkZWQ6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHRbJ2hlYWRlcnMnXSwgd2lkdGg9MzApCi0gICBbKCdEYXRlJywKLSAgICAgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgKCdTZXJ2ZXInLAotICAgICAnQXBhY2hlLzIuMi4xNiAoRGViaWFuKScpLAotICAgICgnQ29udGVudC1EaXNwb3NpdGlvbicsCi0gICAgICdpbmxpbmUnKSwKLSAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAoJ1RyYW5zZmVyLUVuY29kaW5nJywKLSAgICAgJ2NodW5rZWQnKSwKLSAgICAoJ0NvbnRlbnQtVHlwZScsCi0gICAgICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSJVVEYtOCInKV0KKyAgID4+PiBwcHJpbnQucHByaW50KHByb2plY3RfaW5mbywgZGVwdGg9Miwgd2lkdGg9NTApCisgICB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyNSwKKyAgICAgICAgICAgICAnYXV0aG9yJzogJ0dseXBoIExlZmtvd2l0eicsCisgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICdnbHlwaEB0d2lzdGVkbWF0cml4LmNvbScsCisgICAgICAgICAgICAgJ2J1Z3RyYWNrX3VybCc6ICcnLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2NvZGVfa3dhbGl0ZWVfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2RvY3VtZW50YXRpb25faWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2luc3RhbGxhYmlsaXR5X2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbLi4uXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyYW1ld29yayBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQeXRob24gcHJvZ3JhbW1pbmcsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCBzcGVjaWFsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmsgcHJvZ3JhbW1pbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgbXVsdGlwcm90b2NvbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludGVncmF0aW9uLicsCisgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCisgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8nLAorICAgICAgICAgICAgICdrZXl3b3Jkcyc6ICcnLAorICAgICAgICAgICAgICdsaWNlbnNlJzogJ01JVCcsCisgICAgICAgICAgICAgJ21haW50YWluZXInOiAnJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcl9lbWFpbCc6ICcnLAorICAgICAgICAgICAgICduYW1lJzogJ1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BsYXRmb3JtJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAorICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAorICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICduZXR3b3JraW5nIGZyYW1ld29yayAnCisgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3suLi59LCB7Li4ufV19CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wdHkucnN0IGIvRG9jL2xpYnJhcnkvcHR5LnJzdAppbmRleCAyYjkzODViLi45MGJhZWM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wdHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B0eS5yc3QKQEAgLTQ1LDYgKzQ1LDkgQEAKICAgIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgZGVmYXVsdHMgdHJ5IHRvIHJlYWQgMTAyNCBieXRlcyBlYWNoIHRpbWUgdGhleSBhcmUKICAgIGNhbGxlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIDpmdW5jOmBzcGF3bmAgbm93IHJldHVybnMgdGhlIHN0YXR1cyB2YWx1ZSBmcm9tIDpmdW5jOmBvcy53YWl0cGlkYAorICAgICAgb24gdGhlIGNoaWxkIHByb2Nlc3MuCiAKIEV4YW1wbGUKIC0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0IGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKaW5kZXggMDdkZGMyNS4uYmFlODQ1MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKQEAgLTI4LDcgKzI4LDcgQEAKIAogLi4gZnVuY3Rpb246OiBjb21waWxlKGZpbGUsIGNmaWxlPU5vbmUsIGRmaWxlPU5vbmUsIGRvcmFpc2U9RmFsc2UsIG9wdGltaXplPS0xKQogCi0gICBDb21waWxlIGEgc291cmNlIGZpbGUgdG8gYnl0ZS1jb2RlIGFuZCB3cml0ZSBvdXQgdGhlIGJ5dGUtY29kZSBjYWNoZSAgZmlsZS4KKyAgIENvbXBpbGUgYSBzb3VyY2UgZmlsZSB0byBieXRlLWNvZGUgYW5kIHdyaXRlIG91dCB0aGUgYnl0ZS1jb2RlIGNhY2hlIGZpbGUuCiAgICBUaGUgc291cmNlIGNvZGUgaXMgbG9hZGVkIGZyb20gdGhlIGZpbGUgbmFtZSAqZmlsZSouICBUaGUgIGJ5dGUtY29kZSBpcwogICAgd3JpdHRlbiB0byAqY2ZpbGUqLCB3aGljaCBkZWZhdWx0cyB0byB0aGUgOlBFUDpgMzE0N2AgcGF0aCwgZW5kaW5nIGluCiAgICBgYC5weWNgYCAoYGAucHlvYGAgaWYgb3B0aW1pemF0aW9uIGlzIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIpLgpAQCAtNDEsNiArNDEsMTMgQEAKICAgIGlzIHJhaXNlZC4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcGF0aCB0byBieXRlLWNvbXBpbGVkIGZpbGUsIGkuZS4KICAgIHdoYXRldmVyICpjZmlsZSogdmFsdWUgd2FzIHVzZWQuCiAKKyAgIElmIHRoZSBwYXRoIHRoYXQgKmNmaWxlKiBiZWNvbWVzIChlaXRoZXIgZXhwbGljaXRseSBzcGVjaWZpZWQgb3IgY29tcHV0ZWQpCisgICBpcyBhIHN5bWxpbmsgb3Igbm9uLXJlZ3VsYXIgZmlsZSwgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCB3aWxsIGJlIHJhaXNlZC4KKyAgIFRoaXMgaXMgdG8gYWN0IGFzIGEgd2FybmluZyB0aGF0IGltcG9ydCB3aWxsIHR1cm4gdGhvc2UgcGF0aHMgaW50byByZWd1bGFyCisgICBmaWxlcyBpZiBpdCBpcyBhbGxvd2VkIHRvIHdyaXRlIGJ5dGUtY29tcGlsZWQgZmlsZXMgdG8gdGhvc2UgcGF0aHMuIFRoaXMgaXMKKyAgIGEgc2lkZS1lZmZlY3Qgb2YgaW1wb3J0IHVzaW5nIGZpbGUgcmVuYW1pbmcgdG8gcGxhY2UgdGhlIGZpbmFsIGJ5dGUtY29tcGlsZWQKKyAgIGZpbGUgaW50byBwbGFjZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgZmlsZSB3cml0aW5nIGlzc3Vlcy4KKwogICAgKm9wdGltaXplKiBjb250cm9scyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIGFuZCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWx0LWluCiAgICA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uICBUaGUgZGVmYXVsdCBvZiBgYC0xYGAgc2VsZWN0cyB0aGUgb3B0aW1pemF0aW9uCiAgICBsZXZlbCBvZiB0aGUgY3VycmVudCBpbnRlcnByZXRlci4KQEAgLTUwLDYgKzU3LDEzIEBACiAgICAgICBkZWZhdWx0IHdhcyAqZmlsZSogKyBgYCdjJ2BgIChgYCdvJ2BgIGlmIG9wdGltaXphdGlvbiB3YXMgZW5hYmxlZCkuCiAgICAgICBBbHNvIGFkZGVkIHRoZSAqb3B0aW1pemUqIHBhcmFtZXRlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIENoYW5nZWQgY29kZSB0byB1c2UgOm1vZDpgaW1wb3J0bGliYCBmb3IgdGhlIGJ5dGUtY29kZSBjYWNoZSBmaWxlIHdyaXRpbmcuCisgICAgICBUaGlzIG1lYW5zIGZpbGUgY3JlYXRpb24vd3JpdGluZyBzZW1hbnRpY3Mgbm93IG1hdGNoIHdoYXQgOm1vZDpgaW1wb3J0bGliYAorICAgICAgZG9lcywgZS5nLiBwZXJtaXNzaW9ucywgd3JpdGUtYW5kLW1vdmUgc2VtYW50aWNzLCBldGMuIEFsc28gYWRkZWQgdGhlCisgICAgICBjYXZlYXQgdGhhdCA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlzIHJhaXNlZCBpZiAqY2ZpbGUqIGlzIGEgc3ltbGluayBvcgorICAgICAgbm9uLXJlZ3VsYXIgZmlsZS4KKwogCiAuLiBmdW5jdGlvbjo6IG1haW4oYXJncz1Ob25lKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKaW5kZXggMTEzNDYxOS4uNjkyMzEwYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdApAQCAtMTkwLDI4ICsxOTAsMzIgQEAKIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlcyBob3cgdG8gdXNlIHRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlJ3MKIGhpc3RvcnkgcmVhZGluZyBhbmQgd3JpdGluZyBmdW5jdGlvbnMgdG8gYXV0b21hdGljYWxseSBsb2FkIGFuZCBzYXZlIGEgaGlzdG9yeQotZmlsZSBuYW1lZCA6ZmlsZTpgLnB5aGlzdGAgZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAgVGhlIGNvZGUgYmVsb3cgd291bGQKLW5vcm1hbGx5IGJlIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nIGludGVyYWN0aXZlIHNlc3Npb25zIGZyb20gdGhlIHVzZXIncwotOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZS4gOjoKK2ZpbGUgbmFtZWQgOmZpbGU6YC5weXRob25faGlzdG9yeWAgZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAgVGhlIGNvZGUKK2JlbG93IHdvdWxkIG5vcm1hbGx5IGJlIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgZHVyaW5nIGludGVyYWN0aXZlIHNlc3Npb25zCitmcm9tIHRoZSB1c2VyJ3MgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZS4gOjoKIAorICAgaW1wb3J0IGF0ZXhpdAogICAgaW1wb3J0IG9zCiAgICBpbXBvcnQgcmVhZGxpbmUKLSAgIGhpc3RmaWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcigifiIpLCAiLnB5aGlzdCIpCisKKyAgIGhpc3RmaWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcigifiIpLCAiLnB5dGhvbl9oaXN0b3J5IikKICAgIHRyeToKICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZShoaXN0ZmlsZSkKICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKICAgICAgICBwYXNzCi0gICBpbXBvcnQgYXRleGl0CisKICAgIGF0ZXhpdC5yZWdpc3RlcihyZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUsIGhpc3RmaWxlKQotICAgZGVsIG9zLCBoaXN0ZmlsZQorCitUaGlzIGNvZGUgaXMgYWN0dWFsbHkgYXV0b21hdGljYWxseSBydW4gd2hlbiBQeXRob24gaXMgcnVuIGluCis6cmVmOmBpbnRlcmFjdGl2ZSBtb2RlIDx0dXQtaW50ZXJhY3RpdmU+YCAoc2VlIDpyZWY6YHJsY29tcGxldGVyLWNvbmZpZ2ApLgogCiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZXh0ZW5kcyB0aGUgOmNsYXNzOmBjb2RlLkludGVyYWN0aXZlQ29uc29sZWAgY2xhc3MgdG8KIHN1cHBvcnQgaGlzdG9yeSBzYXZlL3Jlc3RvcmUuIDo6CiAKLSAgIGltcG9ydCBjb2RlCi0gICBpbXBvcnQgcmVhZGxpbmUKICAgIGltcG9ydCBhdGV4aXQKKyAgIGltcG9ydCBjb2RlCiAgICBpbXBvcnQgb3MKKyAgIGltcG9ydCByZWFkbGluZQogCiAgICBjbGFzcyBIaXN0b3J5Q29uc29sZShjb2RlLkludGVyYWN0aXZlQ29uc29sZSk6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2Fscz1Ob25lLCBmaWxlbmFtZT0iPGNvbnNvbGU+IiwKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdCBiL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdAppbmRleCBlZDg1ODUwLi45YmI1ODQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CkBAIC03NCw2ICs3NCwyNyBAQAogICAgYGBzZXRybGltaXRgYCBtYXkgYWxzbyByYWlzZSA6ZXhjOmBlcnJvcmAgaWYgdGhlIHVuZGVybHlpbmcgc3lzdGVtIGNhbGwKICAgIGZhaWxzLgogCisuLiBmdW5jdGlvbjo6IHBybGltaXQocGlkLCByZXNvdXJjZVssIGxpbWl0c10pCisKKyAgIENvbWJpbmVzIDpmdW5jOmBzZXRybGltaXRgIGFuZCA6ZnVuYzpgZ2V0cmxpbWl0YCBpbiBvbmUgZnVuY3Rpb24gYW5kCisgICBzdXBwb3J0cyB0byBnZXQgYW5kIHNldCB0aGUgcmVzb3VyY2VzIGxpbWl0cyBvZiBhbiBhcmJpdHJhcnkgcHJvY2Vzcy4gSWYKKyAgICpwaWQqIGlzIDAsIHRoZW4gdGhlIGNhbGwgYXBwbGllcyB0byB0aGUgY3VycmVudCBwcm9jZXNzLiAqcmVzb3VyY2UqIGFuZAorICAgKmxpbWl0cyogaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBzZXRybGltaXRgLCBleGNlcHQgdGhhdAorICAgKmxpbWl0cyogaXMgb3B0aW9uYWwuCisKKyAgIFdoZW4gKmxpbWl0cyogaXMgbm90IGdpdmVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSAqcmVzb3VyY2UqIGxpbWl0IG9mIHRoZQorICAgcHJvY2VzcyAqcGlkKi4gV2hlbiAqbGltaXRzKiBpcyBnaXZlbiB0aGUgKnJlc291cmNlKiBsaW1pdCBvZiB0aGUgcHJvY2VzcyBpcworICAgc2V0IGFuZCB0aGUgZm9ybWVyIHJlc291cmNlIGxpbWl0IGlzIHJldHVybmVkLgorCisgICBSYWlzZXMgOmV4YzpgUHJvY2Vzc0xvb2t1cEVycm9yYCB3aGVuICpwaWQqIGNhbid0IGJlIGZvdW5kIGFuZAorICAgOmV4YzpgUGVybWlzc2lvbkVycm9yYCB3aGVuIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBgYENBUF9TWVNfUkVTT1VSQ0VgYCBmb3IKKyAgIHRoZSBwcm9jZXNzLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4zNiBvciBsYXRlciB3aXRoIGdsaWJjIDIuMTMgb3IgbGF0ZXIKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlc2Ugc3ltYm9scyBkZWZpbmUgcmVzb3VyY2VzIHdob3NlIGNvbnN1bXB0aW9uIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIHRoZQogOmZ1bmM6YHNldHJsaW1pdGAgYW5kIDpmdW5jOmBnZXRybGltaXRgIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3cuIFRoZSB2YWx1ZXMgb2YKIHRoZXNlIHN5bWJvbHMgYXJlIGV4YWN0bHkgdGhlIGNvbnN0YW50cyB1c2VkIGJ5IEMgcHJvZ3JhbXMuCkBAIC0xNTEsNiArMTcyLDUyIEBACiAgICBUaGUgbWF4aW11bSBhcmVhIChpbiBieXRlcykgb2YgYWRkcmVzcyBzcGFjZSB3aGljaCBtYXkgYmUgdGFrZW4gYnkgdGhlIHByb2Nlc3MuCiAKIAorLi4gZGF0YTo6IFJMSU1JVF9NU0dRVUVVRQorCisgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCBmb3IgUE9TSVggbWVzc2FnZSBxdWV1ZXMuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42Ljggb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfTklDRQorCisgICBUaGUgY2VpbGluZyBmb3IgdGhlIHByb2Nlc3MncyBuaWNlIGxldmVsIChjYWxjdWxhdGVkIGFzIDIwIC0gcmxpbV9jdXIpLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4xMiBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9SVFBSSU8KKworICAgVGhlIGNlaWxpbmcgb2YgdGhlIHJlYWwtdGltZSBwcmlvcml0eS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMTIgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfUlRUSU1FCisKKyAgIFRoZSB0aW1lIGxpbWl0IChpbiBtaWNyb3NlY29uZHMpIG9uIENQVSB0aW1lIHRoYXQgYSBwcm9jZXNzIGNhbiBzcGVuZAorICAgdW5kZXIgcmVhbC10aW1lIHNjaGVkdWxpbmcgd2l0aG91dCBtYWtpbmcgYSBibG9ja2luZyBzeXNjYWxsLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4yNSBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9TSUdQRU5ESU5HCisKKyAgIFRoZSBudW1iZXIgb2Ygc2lnbmFscyB3aGljaCB0aGUgcHJvY2VzcyBtYXkgcXVldWUuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42Ljggb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFJlc291cmNlIFVzYWdlCiAtLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QgYi9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKaW5kZXggNjMzMDg4ZC4uOWVkMDFjNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdApAQCAtMjcsMTggKzI3LDEwIEBACiAgICByZWFkbGluZS5fX25hbWVfXyAgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKAogICAgPj4+IHJlYWRsaW5lLgogCi1UaGUgOm1vZDpgcmxjb21wbGV0ZXJgIG1vZHVsZSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggUHl0aG9uJ3MgaW50ZXJhY3RpdmUKLW1vZGUuICBBIHVzZXIgY2FuIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIGhpcyBvciBoZXIgaW5pdGlhbGl6YXRpb24gZmlsZQotKGlkZW50aWZpZWQgYnkgdGhlIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGVudmlyb25tZW50IHZhcmlhYmxlKSB0byBnZXQKLWF1dG9tYXRpYyA6a2JkOmBUYWJgIGNvbXBsZXRpb246OgotCi0gICB0cnk6Ci0gICAgICAgaW1wb3J0IHJlYWRsaW5lCi0gICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgcHJpbnQoIk1vZHVsZSByZWFkbGluZSBub3QgYXZhaWxhYmxlLiIpCi0gICBlbHNlOgotICAgICAgIGltcG9ydCBybGNvbXBsZXRlcgotICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCJ0YWI6IGNvbXBsZXRlIikKK1RoZSA6bW9kOmBybGNvbXBsZXRlcmAgbW9kdWxlIGlzIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBQeXRob24ncworOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAuICBVbmxlc3MgUHl0aG9uIGlzIHJ1biB3aXRoIHRoZQorOm9wdGlvbjpgLVNgIG9wdGlvbiwgdGhlIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGltcG9ydGVkIGFuZCBjb25maWd1cmVkCisoc2VlIDpyZWY6YHJsY29tcGxldGVyLWNvbmZpZ2ApLgogCiBPbiBwbGF0Zm9ybXMgd2l0aG91dCA6bW9kOmByZWFkbGluZWAsIHRoZSA6Y2xhc3M6YENvbXBsZXRlcmAgY2xhc3MgZGVmaW5lZCBieQogdGhpcyBtb2R1bGUgY2FuIHN0aWxsIGJlIHVzZWQgZm9yIGN1c3RvbSBwdXJwb3Nlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CmluZGV4IGIxZmQzYTguLjUyNGU0MTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdApAQCAtMTQsNiArMTQsMTQgQEAKIEl0IGNhbm5vdCBiZSB1c2VkIG9uIHJlZ3VsYXIgZmlsZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIGhhcyBncm93biBzaW5jZQogaXQgd2FzIGxhc3QgcmVhZC4KIAorLi4gbm90ZTo6CisKKyAgIFRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSBhbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTworICAgbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZSA6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLiBVc2VycyBhcmUKKyAgIGVuY291cmFnZWQgdG8gdXNlIHRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSBpbnN0ZWFkLCB1bmxlc3MgdGhleSB3YW50CisgICBwcmVjaXNlIGNvbnRyb2wgb3ZlciB0aGUgT1MtbGV2ZWwgcHJpbWl0aXZlcyB1c2VkLgorCisKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nOgogCiAKQEAgLTM3LDggKzQ1LDEzIEBACiAgICBpbmNyZWFzZXMgdGhpcyB2YWx1ZSwgOmM6ZnVuYzpgZGV2cG9sbGAgbWF5IHJldHVybiBhbgogICAgaW5jb21wbGV0ZSBsaXN0IG9mIGFjdGl2ZSBmaWxlIGRlc2NyaXB0b3JzLgogCisgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogLi4gZnVuY3Rpb246OiBlcG9sbChzaXplaGludD0tMSwgZmxhZ3M9MCkKIAogICAgKE9ubHkgc3VwcG9ydGVkIG9uIExpbnV4IDIuNS40NCBhbmQgbmV3ZXIuKSBSZXR1cm4gYW4gZWRnZSBwb2xsaW5nIG9iamVjdCwKQEAgLTQ3LDExICs2MCwxNyBAQAogICAgdG8gOmNvbnN0OmBFUE9MTF9DTE9FWEVDYCwgd2hpY2ggY2F1c2VzIHRoZSBlcG9sbCBkZXNjcmlwdG9yIHRvIGJlIGNsb3NlZAogICAgYXV0b21hdGljYWxseSB3aGVuIDpmdW5jOmBvcy5leGVjdmVgIGlzIGNhbGxlZC4gU2VlIHNlY3Rpb24KICAgIDpyZWY6YGVwb2xsLW9iamVjdHNgIGJlbG93IGZvciB0aGUgbWV0aG9kcyBzdXBwb3J0ZWQgYnkgZXBvbGxpbmcgb2JqZWN0cy4KKyAgIFRoZXkgYWxzbyBzdXBwb3J0IHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LgogCisgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBBZGRlZCB0aGUgKmZsYWdzKiBwYXJhbWV0ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogcG9sbCgpCiAKQEAgLTY2LDYgKzg1LDExIEBACiAgICAoT25seSBzdXBwb3J0ZWQgb24gQlNELikgIFJldHVybnMgYSBrZXJuZWwgcXVldWUgb2JqZWN0OyBzZWUgc2VjdGlvbgogICAgOnJlZjpga3F1ZXVlLW9iamVjdHNgIGJlbG93IGZvciB0aGUgbWV0aG9kcyBzdXBwb3J0ZWQgYnkga3F1ZXVlIG9iamVjdHMuCiAKKyAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBrZXZlbnQoaWRlbnQsIGZpbHRlcj1LUV9GSUxURVJfUkVBRCwgZmxhZ3M9S1FfRVZfQURELCBmZmxhZ3M9MCwgZGF0YT0wLCB1ZGF0YT0wKQogCkBAIC0xNDQsNiArMTY4LDI3IEBACiBvYmplY3QuCiAKIAorLi4gbWV0aG9kOjogZGV2cG9sbC5jbG9zZSgpCisKKyAgIENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHBvbGxpbmcgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBhdHRyaWJ1dGU6OiBkZXZwb2xsLmNsb3NlZAorCisgICBgYFRydWVgYCBpZiB0aGUgcG9sbGluZyBvYmplY3QgaXMgY2xvc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBtZXRob2Q6OiBkZXZwb2xsLmZpbGVubygpCisKKyAgIFJldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBvZiB0aGUgcG9sbGluZyBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IGRldnBvbGwucmVnaXN0ZXIoZmRbLCBldmVudG1hc2tdKQogCiAgICBSZWdpc3RlciBhIGZpbGUgZGVzY3JpcHRvciB3aXRoIHRoZSBwb2xsaW5nIG9iamVjdC4gIEZ1dHVyZSBjYWxscyB0byB0aGUKQEAgLTI0MSw2ICsyODYsMTEgQEAKICAgIENsb3NlIHRoZSBjb250cm9sIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXBvbGwgb2JqZWN0LgogCiAKKy4uIGF0dHJpYnV0ZTo6IGVwb2xsLmNsb3NlZAorCisgICBgYFRydWVgYCBpZiB0aGUgZXBvbGwgb2JqZWN0IGlzIGNsb3NlZC4KKworCiAuLiBtZXRob2Q6OiBlcG9sbC5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIGNvbnRyb2wgZmQuCkBAIC0zNjAsNiArNDEwLDExIEBACiAgICBDbG9zZSB0aGUgY29udHJvbCBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGtxdWV1ZSBvYmplY3QuCiAKIAorLi4gYXR0cmlidXRlOjoga3F1ZXVlLmNsb3NlZAorCisgICBgYFRydWVgYCBpZiB0aGUga3F1ZXVlIG9iamVjdCBpcyBjbG9zZWQuCisKKwogLi4gbWV0aG9kOjoga3F1ZXVlLmZpbGVubygpCiAKICAgIFJldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBvZiB0aGUgY29udHJvbCBmZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NlbGVjdG9ycy5yc3QgYi9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZWJkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0CkBAIC0wLDAgKzEsMjM5IEBACis6bW9kOmBzZWxlY3RvcnNgIC0tIEhpZ2gtbGV2ZWwgSS9PIG11bHRpcGxleGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogc2VsZWN0b3JzCisgICA6c3lub3BzaXM6IEhpZ2gtbGV2ZWwgSS9PIG11bHRpcGxleGluZy4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgYWxsb3dzIGhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZQorOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIHRoaXMgbW9kdWxlCitpbnN0ZWFkLCB1bmxlc3MgdGhleSB3YW50IHByZWNpc2UgY29udHJvbCBvdmVyIHRoZSBPUy1sZXZlbCBwcmltaXRpdmVzIHVzZWQuCisKK0l0IGRlZmluZXMgYSA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAgYWJzdHJhY3QgYmFzZSBjbGFzcywgYWxvbmcgd2l0aCBzZXZlcmFsCitjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgKDpjbGFzczpgS3F1ZXVlU2VsZWN0b3JgLCA6Y2xhc3M6YEVwb2xsU2VsZWN0b3JgLi4uKSwKK3RoYXQgY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IgSS9PIHJlYWRpbmVzcyBub3RpZmljYXRpb24gb24gbXVsdGlwbGUgZmlsZQorb2JqZWN0cy4gSW4gdGhlIGZvbGxvd2luZywgImZpbGUgb2JqZWN0IiByZWZlcnMgdG8gYW55IG9iamVjdCB3aXRoIGEKKzptZXRoOmBmaWxlbm8oKWAgbWV0aG9kLCBvciBhIHJhdyBmaWxlIGRlc2NyaXB0b3IuIFNlZSA6dGVybTpgZmlsZSBvYmplY3RgLgorCis6Y2xhc3M6YERlZmF1bHRTZWxlY3RvcmAgaXMgYW4gYWxpYXMgdG8gdGhlIG1vc3QgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uCithdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm06IHRoaXMgc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGNob2ljZSBmb3IgbW9zdAordXNlcnMuCisKKy4uIG5vdGU6OgorICAgVGhlIHR5cGUgb2YgZmlsZSBvYmplY3RzIHN1cHBvcnRlZCBkZXBlbmRzIG9uIHRoZSBwbGF0Zm9ybTogb24gV2luZG93cywKKyAgIHNvY2tldHMgYXJlIHN1cHBvcnRlZCwgYnV0IG5vdCBwaXBlcywgd2hlcmVhcyBvbiBVbml4LCBib3RoIGFyZSBzdXBwb3J0ZWQKKyAgIChzb21lIG90aGVyIHR5cGVzIG1heSBiZSBzdXBwb3J0ZWQgYXMgd2VsbCwgc3VjaCBhcyBmaWZvcyBvciBzcGVjaWFsIGZpbGUKKyAgIGRldmljZXMpLgorCisuLiBzZWVhbHNvOjoKKworICAgOm1vZDpgc2VsZWN0YAorICAgICAgTG93LWxldmVsIEkvTyBtdWx0aXBsZXhpbmcgbW9kdWxlLgorCisKK0NsYXNzZXMKKy0tLS0tLS0KKworQ2xhc3NlcyBoaWVyYXJjaHk6OgorCisgICBCYXNlU2VsZWN0b3IKKyAgICstLSBTZWxlY3RTZWxlY3RvcgorICAgKy0tIFBvbGxTZWxlY3RvcgorICAgKy0tIEVwb2xsU2VsZWN0b3IKKyAgICstLSBLcXVldWVTZWxlY3RvcgorCisKK0luIHRoZSBmb2xsb3dpbmcsICpldmVudHMqIGlzIGEgYml0d2lzZSBtYXNrIGluZGljYXRpbmcgd2hpY2ggSS9PIGV2ZW50cyBzaG91bGQKK2JlIHdhaXRlZCBmb3Igb24gYSBnaXZlbiBmaWxlIG9iamVjdC4gSXQgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGNvbnN0YW50cworYmVsb3c6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgQ29uc3RhbnQgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgOmNvbnN0OmBFVkVOVF9SRUFEYCAgIHwgQXZhaWxhYmxlIGZvciByZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBFVkVOVF9XUklURWAgIHwgQXZhaWxhYmxlIGZvciB3cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCisuLiBjbGFzczo6IFNlbGVjdG9yS2V5CisKKyAgIEEgOmNsYXNzOmBTZWxlY3RvcktleWAgaXMgYSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCB1c2VkIHRvCisgICBhc3NvY2lhdGUgYSBmaWxlIG9iamVjdCB0byBpdHMgdW5kZXJseWluZyBmaWxlIGRlY3JpcHRvciwgc2VsZWN0ZWQgZXZlbnQKKyAgIG1hc2sgYW5kIGF0dGFjaGVkIGRhdGEuIEl0IGlzIHJldHVybmVkIGJ5IHNldmVyYWwgOmNsYXNzOmBCYXNlU2VsZWN0b3JgCisgICBtZXRob2RzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmaWxlb2JqCisKKyAgICAgIEZpbGUgb2JqZWN0IHJlZ2lzdGVyZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZkCisKKyAgICAgIFVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLgorCisgICAuLiBhdHRyaWJ1dGU6OiBldmVudHMKKworICAgICAgRXZlbnRzIHRoYXQgbXVzdCBiZSB3YWl0ZWQgZm9yIHRoaXMgZmlsZSBvYmplY3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGRhdGEKKworICAgICAgT3B0aW9uYWwgb3BhcXVlIGRhdGEgYXNzb2NpYXRlZCB0byB0aGlzIGZpbGUgb2JqZWN0OiBmb3IgZXhhbXBsZSwgdGhpcworICAgICAgY291bGQgYmUgdXNlZCB0byBzdG9yZSBwZXItY2xpZW50IHNlc3Npb24uCisKKworLi4gY2xhc3M6OiBCYXNlU2VsZWN0b3IKKworICAgQSA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAgaXMgdXNlZCB0byB3YWl0IGZvciBJL08gZXZlbnQgcmVhZGluZXNzIG9uIG11bHRpcGxlCisgICBmaWxlIG9iamVjdHMuIEl0IHN1cHBvcnRzIGZpbGUgc3RyZWFtIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBhCisgICBtZXRob2QgdG8gd2FpdCBmb3IgSS9PIGV2ZW50cyBvbiB0aG9zZSBzdHJlYW1zLCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQuCisgICBJdCdzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MsIHNvIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuIFVzZQorICAgOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGluc3RlYWQsIG9yIG9uZSBvZiA6Y2xhc3M6YFNlbGVjdFNlbGVjdG9yYCwKKyAgIDpjbGFzczpgS3F1ZXVlU2VsZWN0b3JgIGV0Yy4gaWYgeW91IHdhbnQgdG8gc3BlY2lmaWNhbGx5IHVzZSBhbgorICAgaW1wbGVtZW50YXRpb24sIGFuZCB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIGl0LgorICAgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFuZCBpdHMgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgdGhlCisgICA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBwcm90b2NvbC4KKworICAgLi4gbWV0aG9kOjogcmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpCisKKyAgICAgIFJlZ2lzdGVyIGEgZmlsZSBvYmplY3QgZm9yIHNlbGVjdGlvbiwgbW9uaXRvcmluZyBpdCBmb3IgSS9PIGV2ZW50cy4KKworICAgICAgKmZpbGVvYmoqIGlzIHRoZSBmaWxlIG9iamVjdCB0byBtb25pdG9yLgorICAgICAgKmV2ZW50cyogaXMgYSBiaXR3aXNlIG1hc2sgb2YgZXZlbnRzIHRvIG1vbml0b3IuCisgICAgICAqZGF0YSogaXMgYW4gb3BhcXVlIG9iamVjdC4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaW4gY2FzZSBvZiBpbnZhbGlkIGV2ZW50IG1hc2sgb3IgZmlsZSBkZXNjcmlwdG9yLCBvcgorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IHVucmVnaXN0ZXIoZmlsZW9iaikKKworICAgICAgVW5yZWdpc3RlciBhIGZpbGUgb2JqZWN0IGZyb20gc2VsZWN0aW9uLCByZW1vdmluZyBpdCBmcm9tIG1vbml0b3JpbmcuIEEKKyAgICAgIGZpbGUgb2JqZWN0IHNoYWxsIGJlIHVucmVnaXN0ZXJlZCBwcmlvciB0byBiZWluZyBjbG9zZWQuCisKKyAgICAgICpmaWxlb2JqKiBtdXN0IGJlIGEgZmlsZSBvYmplY3QgcHJldmlvdXNseSByZWdpc3RlcmVkLgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBtb2RpZnkoZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpCisKKyAgICAgIENoYW5nZSBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QgbW9uaXRvcmVkIGV2ZW50cyBvciBhdHRhY2hlZCBkYXRhLgorCisgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gOm1ldGg6YEJhc2VTZWxlY3Rvci51bnJlZ2lzdGVyKGZpbGVvYmopYCBmb2xsb3dlZAorICAgICAgYnkgOm1ldGg6YEJhc2VTZWxlY3Rvci5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpYCwgZXhjZXB0IHRoYXQgaXQKKyAgICAgIGNhbiBiZSBpbXBsZW1lbnRlZCBtb3JlIGVmZmljaWVudGx5LgorCisgICAgICBUaGlzIHJldHVybnMgYSBuZXcgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpbiBjYXNlIG9mIGludmFsaWQgZXZlbnQgbWFzayBvciBmaWxlIGRlc2NyaXB0b3IsIG9yCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBzZWxlY3QodGltZW91dD1Ob25lKQorCisgICAgICBXYWl0IHVudGlsIHNvbWUgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdHMgYmVjb21lIHJlYWR5LCBvciB0aGUgdGltZW91dAorICAgICAgZXhwaXJlcy4KKworICAgICAgSWYgYGB0aW1lb3V0ID4gMGBgLCB0aGlzIHNwZWNpZmllcyB0aGUgbWF4aW11bSB3YWl0IHRpbWUsIGluIHNlY29uZHMuCisgICAgICBJZiBgYHRpbWVvdXQgPD0gMGBgLCB0aGUgY2FsbCB3b24ndCBibG9jaywgYW5kIHdpbGwgcmVwb3J0IHRoZSBjdXJyZW50bHkKKyAgICAgIHJlYWR5IGZpbGUgb2JqZWN0cy4KKyAgICAgIElmICp0aW1lb3V0KiBpcyBgYE5vbmVgYCwgdGhlIGNhbGwgd2lsbCBibG9jayB1bnRpbCBhIG1vbml0b3JlZCBmaWxlIG9iamVjdAorICAgICAgYmVjb21lcyByZWFkeS4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbGlzdCBvZiBgYChrZXksIGV2ZW50cylgYCB0dXBsZSwgb25lIGZvciBlYWNoIHJlYWR5IGZpbGUKKyAgICAgIG9iamVjdC4KKworICAgICAgKmtleSogaXMgdGhlIDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gYSByZWFkeSBmaWxlCisgICAgICBvYmplY3QuCisgICAgICAqZXZlbnRzKiBpcyBhIGJpdG1hc2sgb2YgZXZlbnRzIHJlYWR5IG9uIHRoaXMgZmlsZSBvYmplY3QuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQ2xvc2UgdGhlIHNlbGVjdG9yLgorCisgICAgICBUaGlzIG11c3QgYmUgY2FsbGVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSB1bmRlcmx5aW5nIHJlc291cmNlIGlzIGZyZWVkLgorICAgICAgVGhlIHNlbGVjdG9yIHNoYWxsIG5vdCBiZSB1c2VkIG9uY2UgaXQgaGFzIGJlZW4gY2xvc2VkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfa2V5KGZpbGVvYmopCisKKyAgICAgIFJldHVybiB0aGUga2V5IGFzc29jaWF0ZWQgdG8gYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0LgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlCisgICAgICBvYmplY3QsIG9yIHJhaXNlcyA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfbWFwKCkKKworICAgICAgUmV0dXJuIGEgbWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4KKworICAgICAgVGhpcyByZXR1cm5zIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMuYWJjLk1hcHBpbmdgIGluc3RhbmNlIG1hcHBpbmcKKyAgICAgIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3RzIHRvIHRoZWlyIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAKKyAgICAgIGluc3RhbmNlLgorCisKKy4uIGNsYXNzOjogRGVmYXVsdFNlbGVjdG9yKCkKKworICAgVGhlIGRlZmF1bHQgc2VsZWN0b3IgY2xhc3MsIHVzaW5nIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorICAgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBUaGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yCisgICBtb3N0IHVzZXJzLgorCisKKy4uIGNsYXNzOjogU2VsZWN0U2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnNlbGVjdGAtYmFzZWQgc2VsZWN0b3IuCisKKworLi4gY2xhc3M6OiBQb2xsU2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisKKy4uIGNsYXNzOjogRXBvbGxTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3QuZXBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisgICAuLiBtZXRob2Q6OiBmaWxlbm8oKQorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nCisgICAgICA6ZnVuYzpgc2VsZWN0LmVwb2xsYCBvYmplY3QuCisKKworLi4gY2xhc3M6OiBLcXVldWVTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3Qua3F1ZXVlYC1iYXNlZCBzZWxlY3Rvci4KKworICAgLi4gbWV0aG9kOjogZmlsZW5vKCkKKworICAgICAgVGhpcyByZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBieSB0aGUgdW5kZXJseWluZworICAgICAgOmZ1bmM6YHNlbGVjdC5rcXVldWVgIG9iamVjdC4KKworCitFeGFtcGxlcyBvZiBzZWxlY3RvciB1c2FnZTo6CisKKyAgID4+PiBpbXBvcnQgc2VsZWN0b3JzCisgICA+Pj4gaW1wb3J0IHNvY2tldAorICAgPj4+CisgICA+Pj4gcyA9IHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IoKQorICAgPj4+IHIsIHcgPSBzb2NrZXQuc29ja2V0cGFpcigpCisgICA+Pj4KKyAgID4+PiBzLnJlZ2lzdGVyKHIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgU2VsZWN0b3JLZXkoZmlsZW9iaj08c29ja2V0LnNvY2tldCBmZD00LCBmYW1pbHk9MSwgdHlwZT0xLCBwcm90bz0wPiwgZmQ9NCwgZXZlbnRzPTEsIGRhdGE9Tm9uZSkKKyAgID4+PiBzLnJlZ2lzdGVyKHcsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgIFNlbGVjdG9yS2V5KGZpbGVvYmo9PHNvY2tldC5zb2NrZXQgZmQ9NSwgZmFtaWx5PTEsIHR5cGU9MSwgcHJvdG89MD4sIGZkPTUsIGV2ZW50cz0yLCBkYXRhPU5vbmUpCisgICA+Pj4KKyAgID4+PiBwcmludChzLnNlbGVjdCgpKQorICAgWyhTZWxlY3RvcktleShmaWxlb2JqPTxzb2NrZXQuc29ja2V0IGZkPTUsIGZhbWlseT0xLCB0eXBlPTEsIHByb3RvPTA+LCBmZD01LCBldmVudHM9MiwgZGF0YT1Ob25lKSwgMildCisgICA+Pj4KKyAgID4+PiBmb3Iga2V5LCBldmVudHMgaW4gcy5zZWxlY3QoKToKKyAgIC4uLiAgICAgaWYgZXZlbnRzICYgc2VsZWN0b3JzLkVWRU5UX1dSSVRFOgorICAgLi4uICAgICAgICAga2V5LmZpbGVvYmouc2VuZChiJ3NwYW0nKQorICAgLi4uCisgICA0CisgICA+Pj4gZm9yIGtleSwgZXZlbnRzIGluIHMuc2VsZWN0KCk6CisgICAuLi4gICAgIGlmIGV2ZW50cyAmIHNlbGVjdG9ycy5FVkVOVF9SRUFEOgorICAgLi4uICAgICAgICAgcHJpbnQoa2V5LmZpbGVvYmoucmVjdigxMDI0KSkKKyAgIC4uLgorICAgYidzcGFtJworICAgPj4+IHMuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdCBiL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKaW5kZXggMDQ4ZjgwYS4uNGJhOWRkYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CkBAIC00NCw4ICs0NCwxMSBAQAogICAgLi4gbm90ZTo6CiAKICAgICAgIERvIG5vdCByZWx5IG9uIHRoZSBzaGVsZiBiZWluZyBjbG9zZWQgYXV0b21hdGljYWxseTsgYWx3YXlzIGNhbGwKLSAgICAgIDptZXRoOmBjbG9zZWAgZXhwbGljaXRseSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLCBvciB1c2UgYQotICAgICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3aXRoIDpmdW5jOmBjb250ZXh0bGliLmNsb3NpbmdgLgorICAgICAgOm1ldGg6YH5TaGVsZi5jbG9zZWAgZXhwbGljaXRseSB3aGVuIHlvdSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLCBvcgorICAgICAgdXNlIDpmdW5jOmBzaGVsdmUub3BlbmAgYXMgYSBjb250ZXh0IG1hbmFnZXI6OgorCisgICAgICAgICAgd2l0aCBzaGVsdmUub3Blbignc3BhbScpIGFzIGRiOgorICAgICAgICAgICAgICBkYlsnZWdncyddID0gJ2VnZ3MnCiAKIC4uIHdhcm5pbmc6OgogCkBAIC0xMTgsMTAgKzEyMSwxNSBAQAogICAgVGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyIGlzIHRoZSBlbmNvZGluZyB1c2VkIHRvIGVuY29kZSBrZXlzIGJlZm9yZSB0aGV5CiAgICBhcmUgdXNlZCB3aXRoIHRoZSB1bmRlcmx5aW5nIGRpY3QuCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgotICAgICAgVGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyOyBwcmV2aW91c2x5LCBrZXlzIHdlcmUgYWx3YXlzIGVuY29kZWQgaW4KKyAgIDpjbGFzczpgU2hlbGZgIG9iamVjdHMgY2FuIGFsc28gYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXJzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgdGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyOyBwcmV2aW91c2x5LCBrZXlzIHdlcmUgYWx3YXlzIGVuY29kZWQgaW4KICAgICAgIFVURi04LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgY29udGV4dCBtYW5hZ2VyIHN1cHBvcnQuCisKIAogLi4gY2xhc3M6OiBCc2REYlNoZWxmKGRpY3QsIHByb3RvY29sPU5vbmUsIHdyaXRlYmFjaz1GYWxzZSwga2V5ZW5jb2Rpbmc9J3V0Zi04JykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdCBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKaW5kZXggYTE0NTdkMC4uZTRmMzQ4YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CkBAIC01Myw3ICs1Myw3IEBACiAgICAqZHN0KiBhbmQgcmV0dXJuICpkc3QqLiAgKnNyYyogYW5kICpkc3QqIGFyZSBwYXRoIG5hbWVzIGdpdmVuIGFzIHN0cmluZ3MuCiAgICAqZHN0KiBtdXN0IGJlIHRoZSBjb21wbGV0ZSB0YXJnZXQgZmlsZSBuYW1lOyBsb29rIGF0IDpmdW5jOmBzaHV0aWwuY29weWAKICAgIGZvciBhIGNvcHkgdGhhdCBhY2NlcHRzIGEgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoLiAgSWYgKnNyYyogYW5kICpkc3QqCi0gICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YEVycm9yYCBpcyByYWlzZWQuCisgICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YFNhbWVGaWxlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgVGhlIGRlc3RpbmF0aW9uIGxvY2F0aW9uIG11c3QgYmUgd3JpdGFibGU7IG90aGVyd2lzZSwgYW4gOmV4YzpgT1NFcnJvcmAKICAgIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC4gSWYgKmRzdCogYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmVwbGFjZWQuCkBAIC02OSw2ICs2OSwxOSBAQAogICAgICAgQWRkZWQgKmZvbGxvd19zeW1saW5rcyogYXJndW1lbnQuCiAgICAgICBOb3cgcmV0dXJucyAqZHN0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJhaXNlIDpleGM6YFNhbWVGaWxlRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgRXJyb3JgLiAgU2luY2UgdGhlIGZvcm1lciBpcworICAgICAgYSBzdWJjbGFzcyBvZiB0aGUgbGF0dGVyLCB0aGlzIGNoYW5nZSBpcyBiYWNrd2FyZCBjb21wYXRpYmxlLgorCisKKy4uIGV4Y2VwdGlvbjo6IFNhbWVGaWxlRXJyb3IKKworICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW4gOmZ1bmM6YGNvcHlmaWxlYAorICAgYXJlIHRoZSBzYW1lIGZpbGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY29weW1vZGUoc3JjLCBkc3QsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKQogCiAgICBDb3B5IHRoZSBwZXJtaXNzaW9uIGJpdHMgZnJvbSAqc3JjKiB0byAqZHN0Ki4gIFRoZSBmaWxlIGNvbnRlbnRzLCBvd25lciwgYW5kCkBAIC0zODAsMTEgKzM5MywxMCBAQAogICAgICAgICAgICAgICAgZXJyb3JzLmV4dGVuZChlcnIuYXJnc1swXSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGNvcHlzdGF0KHNyYywgZHN0KQotICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6Ci0gICAgICAgICAgICMgY2FuJ3QgY29weSBmaWxlIGFjY2VzcyB0aW1lcyBvbiBXaW5kb3dzCi0gICAgICAgICAgIHBhc3MKICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6Ci0gICAgICAgICAgIGVycm9ycy5leHRlbmQoKHNyYywgZHN0LCBzdHIod2h5KSkpCisgICAgICAgICAgICMgY2FuJ3QgY29weSBmaWxlIGFjY2VzcyB0aW1lcyBvbiBXaW5kb3dzCisgICAgICAgICAgIGlmIHdoeS53aW5lcnJvciBpcyBOb25lOgorICAgICAgICAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKICAgICAgICBpZiBlcnJvcnM6CiAgICAgICAgICAgIHJhaXNlIEVycm9yKGVycm9ycykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2l0ZS5yc3QgYi9Eb2MvbGlicmFyeS9zaXRlLnJzdAppbmRleCAzNmI4MGMzLi5kOTNlOTM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaXRlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaXRlLnJzdApAQCAtMzgsNiArMzgsOSBAQAogaWYgaXQgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgYW5kIGlmIHNvLCBhZGRzIGl0IHRvIGBgc3lzLnBhdGhgYCBhbmQKIGFsc28gaW5zcGVjdHMgdGhlIG5ld2x5IGFkZGVkIHBhdGggZm9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgIFN1cHBvcnQgZm9yIHRoZSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB3aWxsIGJlIHJlbW92ZWQgaW4gMy41LgorCiBJZiBhIGZpbGUgbmFtZWQgInB5dmVudi5jZmciIGV4aXN0cyBvbmUgZGlyZWN0b3J5IGFib3ZlIHN5cy5leGVjdXRhYmxlLAogc3lzLnByZWZpeCBhbmQgc3lzLmV4ZWNfcHJlZml4IGFyZSBzZXQgdG8gdGhhdCBkaXJlY3RvcnkgYW5kCiBpdCBpcyBhbHNvIGNoZWNrZWQgZm9yIHNpdGUtcGFja2FnZXMgYW5kIHNpdGUtcHl0aG9uIChzeXMuYmFzZV9wcmVmaXggYW5kCkBAIC0xMTEsNiArMTE0LDIzIEBACiA6bW9kOmBzaXRlY3VzdG9taXplYCBhbmQgOm1vZDpgdXNlcmN1c3RvbWl6ZWAgaXMgc3RpbGwgYXR0ZW1wdGVkLgogCiAKKy4uIF9ybGNvbXBsZXRlci1jb25maWc6CisKK1JlYWRsaW5lIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgOm1vZDpgcmVhZGxpbmVgLCB0aGlzIG1vZHVsZSB3aWxsIGFsc28gaW1wb3J0IGFuZAorY29uZmlndXJlIHRoZSA6bW9kOmBybGNvbXBsZXRlcmAgbW9kdWxlLCBpZiBQeXRob24gaXMgc3RhcnRlZCBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgYW5kIHdpdGhvdXQgdGhlIDpvcHRpb246YC1TYCBvcHRpb24uCitUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBlbmFibGUgdGFiLWNvbXBsZXRpb24gYW5kIHRvIHVzZQorOmZpbGU6YH4vLnB5dGhvbl9oaXN0b3J5YCBhcyB0aGUgaGlzdG9yeSBzYXZlIGZpbGUuICBUbyBkaXNhYmxlIGl0LCBvdmVycmlkZQordGhlIDpkYXRhOmBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX2AgYXR0cmlidXRlIGluIHlvdXIgOm1vZDpgc2l0ZWN1c3RvbWl6ZWAKK29yIDptb2Q6YHVzZXJjdXN0b21pemVgIG1vZHVsZSBvciB5b3VyIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuCisKKworTW9kdWxlIGNvbnRlbnRzCistLS0tLS0tLS0tLS0tLS0KKwogLi4gZGF0YTo6IFBSRUZJWEVTCiAKICAgIEEgbGlzdCBvZiBwcmVmaXhlcyBmb3Igc2l0ZS1wYWNrYWdlcyBkaXJlY3Rvcmllcy4KQEAgLTE1Myw4ICsxNzMsNyBAQAogCiAgICBBZGRzIGFsbCB0aGUgc3RhbmRhcmQgc2l0ZS1zcGVjaWZpYyBkaXJlY3RvcmllcyB0byB0aGUgbW9kdWxlIHNlYXJjaAogICAgcGF0aC4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGlzIG1vZHVsZSBpcyBpbXBvcnRlZCwKLSAgIHVubGVzcyB0aGUgOnByb2dyYW06YHB5dGhvbmAgaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgOm9wdGlvbjpgLVNgCi0gICBmbGFnLgorICAgdW5sZXNzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgOm9wdGlvbjpgLVNgIGZsYWcuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gYmUgY2FsbGVkIHVuY29uZGl0aW9ubmFsbHkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zbXRwZC5yc3QgYi9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKaW5kZXggMmNhNzFmZi4uZmU3MjU4YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc210cGQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NtdHBkLnJzdApAQCAtMjcsNyArMjcsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAotLi4gY2xhc3M6OiBTTVRQU2VydmVyKGxvY2FsYWRkciwgcmVtb3RlYWRkciwgZGF0YV9zaXplX2xpbWl0PTMzNTU0NDMyKQorLi4gY2xhc3M6OiBTTVRQU2VydmVyKGxvY2FsYWRkciwgcmVtb3RlYWRkciwgZGF0YV9zaXplX2xpbWl0PTMzNTU0NDMyLFwKKyAgICAgICAgICAgICAgICAgICAgICBtYXA9Tm9uZSkKIAogICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU01UUFNlcnZlcmAgb2JqZWN0LCB3aGljaCBiaW5kcyB0byBsb2NhbCBhZGRyZXNzCiAgICAqbG9jYWxhZGRyKi4gIEl0IHdpbGwgdHJlYXQgKnJlbW90ZWFkZHIqIGFzIGFuIHVwc3RyZWFtIFNNVFAgcmVsYXllci4gIEl0CkBAIC0zOCw2ICszOSw4IEBACiAgICBhY2NlcHRlZCBpbiBhIGBgREFUQWBgIGNvbW1hbmQuICBBIHZhbHVlIG9mIGBgTm9uZWBgIG9yIGBgMGBgIG1lYW5zIG5vCiAgICBsaW1pdC4KIAorICAgQSBkaWN0aW9uYXJ5IGNhbiBiZSBzcGVjaWZpZWQgaW4gKm1hcCogdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgc29ja2V0IG1hcC4KKwogICAgLi4gbWV0aG9kOjogcHJvY2Vzc19tZXNzYWdlKHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKQogCiAgICAgICBSYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBleGNlcHRpb24uIE92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0bwpAQCAtNTMsNiArNTYsOSBAQAogICAgICAgT3ZlcnJpZGUgdGhpcyBpbiBzdWJjbGFzc2VzIHRvIHVzZSBhIGN1c3RvbSA6Y2xhc3M6YFNNVFBDaGFubmVsYCBmb3IKICAgICAgIG1hbmFnaW5nIFNNVFAgY2xpZW50cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqbWFwKiBhcmd1bWVudCB3YXMgYWRkZWQuCisKIAogRGVidWdnaW5nU2VydmVyIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MCwxMSArOTYsMjAgQEAKIFNNVFBDaGFubmVsIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLi4gY2xhc3M6OiBTTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIpCisuLiBjbGFzczo6IFNNVFBDaGFubmVsKHNlcnZlciwgY29ubiwgYWRkciwgZGF0YV9zaXplX2xpbWl0PTMzNTU0NDMyLFwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFwPU5vbmUpKQogCiAgICBDcmVhdGUgYSBuZXcgOmNsYXNzOmBTTVRQQ2hhbm5lbGAgb2JqZWN0IHdoaWNoIG1hbmFnZXMgdGhlIGNvbW11bmljYXRpb24KICAgIGJldHdlZW4gdGhlIHNlcnZlciBhbmQgYSBzaW5nbGUgU01UUCBjbGllbnQuCiAKKyAgICpjb25uKiBhbmQgKmFkZHIqIGFyZSBhcyBwZXIgdGhlIGluc3RhbmNlIHZhcmlhYmxlcyBkZXNjcmliZWQgYmVsb3cuCisKKyAgICpkYXRhX3NpemVfbGltaXQqIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGJlCisgICBhY2NlcHRlZCBpbiBhIGBgREFUQWBgIGNvbW1hbmQuICBBIHZhbHVlIG9mIGBgTm9uZWBgIG9yIGBgMGBgIG1lYW5zIG5vCisgICBsaW1pdC4KKworICAgQSBkaWN0aW9uYXJ5IGNhbiBiZSBzcGVjaWZpZWQgaW4gKm1hcCogdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgc29ja2V0IG1hcC4KKwogICAgVG8gdXNlIGEgY3VzdG9tIFNNVFBDaGFubmVsIGltcGxlbWVudGF0aW9uIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHRoZQogICAgOmF0dHI6YFNNVFBTZXJ2ZXIuY2hhbm5lbF9jbGFzc2Agb2YgeW91ciA6Y2xhc3M6YFNNVFBTZXJ2ZXJgLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CmluZGV4IGFkZGM2YmUuLmE3ZDE1MzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0CkBAIC0xMTAsOCArMTEwLDggQEAKIAogLi4gZXhjZXB0aW9uOjogU01UUEV4Y2VwdGlvbgogCi0gICBUaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgZm9yIGFsbCB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzCi0gICBtb2R1bGUuCisgICBTdWJjbGFzcyBvZiA6ZXhjOmBPU0Vycm9yYCB0aGF0IGlzIHRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBmb3IgYWxsCisgICB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzIG1vZHVsZS4KIAogCiAuLiBleGNlcHRpb246OiBTTVRQU2VydmVyRGlzY29ubmVjdGVkCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zb2NrZXQucnN0IGIvRG9jL2xpYnJhcnkvc29ja2V0LnJzdAppbmRleCBhYTE4YWU0Li42NThiOGM5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKQEAgLTEwNyw4ICsxMDcsOCBAQAogCiAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCi0tIENlcnRhaW4gb3RoZXIgYWRkcmVzcyBmYW1pbGllcyAoOmNvbnN0OmBBRl9CTFVFVE9PVEhgLCA6Y29uc3Q6YEFGX1BBQ0tFVGApCi0gIHN1cHBvcnQgc3BlY2lmaWMgcmVwcmVzZW50YXRpb25zLgorLSBDZXJ0YWluIG90aGVyIGFkZHJlc3MgZmFtaWxpZXMgKDpjb25zdDpgQUZfQkxVRVRPT1RIYCwgOmNvbnN0OmBBRl9QQUNLRVRgLAorICA6Y29uc3Q6YEFGX0NBTmApIHN1cHBvcnQgc3BlY2lmaWMgcmVwcmVzZW50YXRpb25zLgogCiAgIC4uIFhYWCBkb2N1bWVudCB0aGVtIQogCkBAIC0yNTcsNiArMjU3LDE2IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBkYXRhOjogQ0FOX0JDTQorICAgICAgICAgIENBTl9CQ01fKgorCisgICBDQU5fQkNNLCBpbiB0aGUgQ0FOIHByb3RvY29sIGZhbWlseSwgaXMgdGhlIGJyb2FkY2FzdCBtYW5hZ2VyIChCQ00pIHByb3RvY29sLgorICAgQnJvYWRjYXN0IG1hbmFnZXIgY29uc3RhbnRzLCBkb2N1bWVudGVkIGluIHRoZSBMaW51eCBkb2N1bWVudGF0aW9uLCBhcmUgYWxzbworICAgZGVmaW5lZCBpbiB0aGUgc29ja2V0IG1vZHVsZS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCA+PSAyLjYuMjUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBkYXRhOjogQUZfUkRTCiAgICAgICAgICAgUEZfUkRTCkBAIC0yODMsNiArMjkzLDExIEBACiAgICBUSVBDIHJlbGF0ZWQgY29uc3RhbnRzLCBtYXRjaGluZyB0aGUgb25lcyBleHBvcnRlZCBieSB0aGUgQyBzb2NrZXQgQVBJLiBTZWUKICAgIHRoZSBUSVBDIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKKy4uIGRhdGE6OiBBRl9MSU5LCisKKyAgQXZhaWxhYmlsaXR5OiBCU0QsIE9TWC4KKworICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gZGF0YTo6IGhhc19pcHY2CiAKQEAgLTQ0NSwyMCArNDYwLDI5IEBACiAgICBgYCd1ZHAnYGAsIG90aGVyd2lzZSBhbnkgcHJvdG9jb2wgd2lsbCBtYXRjaC4KIAogCi0uLiBmdW5jdGlvbjo6IHNvY2tldChbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKQorLi4gZnVuY3Rpb246OiBzb2NrZXQoZmFtaWx5PUFGX0lORVQsIHR5cGU9U09DS19TVFJFQU0sIHByb3RvPTAsIGZpbGVubz1Ob25lKQogCiAgICBDcmVhdGUgYSBuZXcgc29ja2V0IHVzaW5nIHRoZSBnaXZlbiBhZGRyZXNzIGZhbWlseSwgc29ja2V0IHR5cGUgYW5kIHByb3RvY29sCiAgICBudW1iZXIuICBUaGUgYWRkcmVzcyBmYW1pbHkgc2hvdWxkIGJlIDpjb25zdDpgQUZfSU5FVGAgKHRoZSBkZWZhdWx0KSwKICAgIDpjb25zdDpgQUZfSU5FVDZgLCA6Y29uc3Q6YEFGX1VOSVhgLCA6Y29uc3Q6YEFGX0NBTmAgb3IgOmNvbnN0OmBBRl9SRFNgLiBUaGUKICAgIHNvY2tldCB0eXBlIHNob3VsZCBiZSA6Y29uc3Q6YFNPQ0tfU1RSRUFNYCAodGhlIGRlZmF1bHQpLAogICAgOmNvbnN0OmBTT0NLX0RHUkFNYCwgOmNvbnN0OmBTT0NLX1JBV2Agb3IgcGVyaGFwcyBvbmUgb2YgdGhlIG90aGVyIGBgU09DS19gYAotICAgY29uc3RhbnRzLiBUaGUgcHJvdG9jb2wgbnVtYmVyIGlzIHVzdWFsbHkgemVybyBhbmQgbWF5IGJlIG9taXR0ZWQgaW4gdGhhdAotICAgY2FzZSBvciA6Y29uc3Q6YENBTl9SQVdgIGluIGNhc2UgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIDpjb25zdDpgQUZfQ0FOYC4KKyAgIGNvbnN0YW50cy4gVGhlIHByb3RvY29sIG51bWJlciBpcyB1c3VhbGx5IHplcm8gYW5kIG1heSBiZSBvbWl0dGVkIG9yIGluIHRoZQorICAgY2FzZSB3aGVyZSB0aGUgYWRkcmVzcyBmYW1pbHkgaXMgOmNvbnN0OmBBRl9DQU5gIHRoZSBwcm90b2NvbCBzaG91bGQgYmUgb25lCisgICBvZiA6Y29uc3Q6YENBTl9SQVdgIG9yIDpjb25zdDpgQ0FOX0JDTWAuCisKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldCBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBUaGUgQUZfQ0FOIGZhbWlseSB3YXMgYWRkZWQuCiAgICAgICBUaGUgQUZfUkRTIGZhbWlseSB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgVGhlIENBTl9CQ00gcHJvdG9jb2wgd2FzIGFkZGVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogc29ja2V0cGFpcihbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKQogCkBAIC00NjgsMTIgKzQ5MiwxNyBAQAogICAgaWYgZGVmaW5lZCBvbiB0aGUgcGxhdGZvcm07IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgOmNvbnN0OmBBRl9JTkVUYC4KICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0cyBhcmUgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgVGhlIHJldHVybmVkIHNvY2tldCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSB3aG9sZSBzb2NrZXQgQVBJLCByYXRoZXIKICAgICAgIHRoYW4gYSBzdWJzZXQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgc29ja2V0cyBhcmUgbm93IG5vbi1pbmhlcml0YWJsZS4KIAotLi4gZnVuY3Rpb246OiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZVssIHByb3RvXSkKKworLi4gZnVuY3Rpb246OiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG89MCkKIAogICAgRHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3IgKmZkKiAoYW4gaW50ZWdlciBhcyByZXR1cm5lZCBieSBhIGZpbGUgb2JqZWN0J3MKICAgIDptZXRoOmBmaWxlbm9gIG1ldGhvZCkgYW5kIGJ1aWxkIGEgc29ja2V0IG9iamVjdCBmcm9tIHRoZSByZXN1bHQuICBBZGRyZXNzCkBAIC00ODQsNiArNTEzLDExIEBACiAgICBhIHNvY2tldCBwYXNzZWQgdG8gYSBwcm9ncmFtIGFzIHN0YW5kYXJkIGlucHV0IG9yIG91dHB1dCAoc3VjaCBhcyBhIHNlcnZlcgogICAgc3RhcnRlZCBieSB0aGUgVW5peCBpbmV0IGRhZW1vbikuICBUaGUgc29ja2V0IGlzIGFzc3VtZWQgdG8gYmUgaW4gYmxvY2tpbmcgbW9kZS4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IG50b2hsKHgpCiAKQEAgLTcxMiw2ICs3NDYsMTEgQEAKICAgICpuZXcqIHNvY2tldCBvYmplY3QgdXNhYmxlIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvbiB0aGUgY29ubmVjdGlvbiwgYW5kCiAgICAqYWRkcmVzcyogaXMgdGhlIGFkZHJlc3MgYm91bmQgdG8gdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIG1ldGhvZDo6IHNvY2tldC5iaW5kKGFkZHJlc3MpCiAKQEAgLTc1Nyw2ICs3OTYsMTYgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKKy4uIG1ldGhvZDo6IHNvY2tldC5kdXAoKQorCisgICBEdXBsaWNhdGUgdGhlIHNvY2tldC4KKworICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuZmlsZW5vKCkKIAogICAgUmV0dXJuIHRoZSBzb2NrZXQncyBmaWxlIGRlc2NyaXB0b3IgKGEgc21hbGwgaW50ZWdlcikuICBUaGlzIGlzIHVzZWZ1bCB3aXRoCkBAIC03NjcsNiArODE2LDE1IEBACiAgICB0aGlzIGxpbWl0YXRpb24uCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LmdldF9pbmhlcml0YWJsZSgpCisKKyAgIEdldCB0aGUgOnJlZjpgaW5oZXJpdGFibGUgZmxhZyA8ZmRfaW5oZXJpdGFuY2U+YCBvZiB0aGUgc29ja2V0J3MgZmlsZQorICAgZGVzY3JpcHRvciBvciBzb2NrZXQncyBoYW5kbGU6IGBgVHJ1ZWBgIGlmIHRoZSBzb2NrZXQgY2FuIGJlIGluaGVyaXRlZCBpbgorICAgY2hpbGQgcHJvY2Vzc2VzLCBgYEZhbHNlYGAgaWYgaXQgY2Fubm90LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuZ2V0cGVlcm5hbWUoKQogCiAgICBSZXR1cm4gdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkLiAgVGhpcyBpcyB1c2VmdWwgdG8KQEAgLTEwNTAsNiArMTEwOCwxNCBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LnNldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogc29ja2V0LnNldGJsb2NraW5nKGZsYWcpCiAKICAgIFNldCBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBvZiB0aGUgc29ja2V0OiBpZiAqZmxhZyogaXMgZmFsc2UsIHRoZQpAQCAtMTMzMSw3ICsxMzk3LDE2IEBACiAgICBzLmlvY3RsKHNvY2tldC5TSU9fUkNWQUxMLCBzb2NrZXQuUkNWQUxMX09GRikKIAogVGhlIGxhc3QgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIHRoZSBzb2NrZXQgaW50ZXJmYWNlIHRvIGNvbW11bmljYXRlIHRvIGEgQ0FOCi1uZXR3b3JrLiBUaGlzIGV4YW1wbGUgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHByaXZpbGVkZ2U6OgorbmV0d29yayB1c2luZyB0aGUgcmF3IHNvY2tldCBwcm90b2NvbC4gVG8gdXNlIENBTiB3aXRoIHRoZSBicm9hZGNhc3QKK21hbmFnZXIgcHJvdG9jb2wgaW5zdGVhZCwgb3BlbiBhIHNvY2tldCB3aXRoOjoKKworICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0NBTiwgc29ja2V0LlNPQ0tfREdSQU0sIHNvY2tldC5DQU5fQkNNKQorCitBZnRlciBiaW5kaW5nICg6Y29uc3Q6YENBTl9SQVdgKSBvciBjb25uZWN0aW5nICg6Y29uc3Q6YENBTl9CQ01gKSB0aGUgc29ja2V0LCB5b3UKK2NhbiB1c2UgdGhlIDptZXRoOmBzb2NrZXQuc2VuZGAsIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5yZWN2YCBvcGVyYXRpb25zIChhbmQKK3RoZWlyIGNvdW50ZXJwYXJ0cykgb24gdGhlIHNvY2tldCBvYmplY3QgYXMgdXN1YWwuCisKK1RoaXMgZXhhbXBsZSBtaWdodCByZXF1aXJlIHNwZWNpYWwgcHJpdmlsZWRnZTo6CiAKICAgIGltcG9ydCBzb2NrZXQKICAgIGltcG9ydCBzdHJ1Y3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0IGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKaW5kZXggYTJiZDQ4Yy4uNmQxZjc2YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgZmlyc3QgYmxhbmsgZm9yIHRoZSBjb2x1bW4gbmFtZTogdGhlIGNvbHVtbiBuYW1lIHdvdWxkIHNpbXBseSBiZSAieCIuCiAKIAotLi4gZnVuY3Rpb246OiBjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50c10pCisuLiBmdW5jdGlvbjo6IGNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCwgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzLCB1cmldKQogCiAgICBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlICpkYXRhYmFzZSouIFlvdSBjYW4gdXNlCiAgICBgYCI6bWVtb3J5OiJgYCB0byBvcGVuIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIHRoYXQgcmVzaWRlcyBpbiBSQU0KQEAgLTE5NSw2ICsxOTUsMTggQEAKICAgIGZvciB0aGUgY29ubmVjdGlvbiwgeW91IGNhbiBzZXQgdGhlICpjYWNoZWRfc3RhdGVtZW50cyogcGFyYW1ldGVyLiBUaGUgY3VycmVudGx5CiAgICBpbXBsZW1lbnRlZCBkZWZhdWx0IGlzIHRvIGNhY2hlIDEwMCBzdGF0ZW1lbnRzLgogCisgICBJZiAqdXJpKiBpcyB0cnVlLCAqZGF0YWJhc2UqIGlzIGludGVycHJldGVkIGFzIGEgVVJJLiBUaGlzIGFsbG93cyB5b3UKKyAgIHRvIHNwZWNpZnkgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHRvIG9wZW4gYSBkYXRhYmFzZSBpbiByZWFkLW9ubHkgbW9kZQorICAgeW91IGNhbiB1c2U6OgorCisgICAgICAgZGIgPSBzcWxpdGUzLmNvbm5lY3QoJ2ZpbGU6cGF0aC90by9kYXRhYmFzZT9tb2RlPXJvJywgdXJpPVRydWUpCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmZWF0dXJlLCBpbmNsdWRpbmcgYSBsaXN0IG9mIHJlY29nbml6ZWQgb3B0aW9ucywgY2FuCisgICBiZSBmb3VuZCBpbiB0aGUgYFNRTGl0ZSBVUkkgZG9jdW1lbnRhdGlvbiA8aHR0cDovL3d3dy5zcWxpdGUub3JnL3VyaS5odG1sPmBfLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICp1cmkqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyX2NvbnZlcnRlcih0eXBlbmFtZSwgY2FsbGFibGUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NzbC5yc3QgYi9Eb2MvbGlicmFyeS9zc2wucnN0CmluZGV4IDFjNWMzNTUuLjVhZjU2ZjkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NzbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3NsLnJzdApAQCAtMjYsNyArMjYsOCBAQAogCiAgICBTb21lIGJlaGF2aW9yIG1heSBiZSBwbGF0Zm9ybSBkZXBlbmRlbnQsIHNpbmNlIGNhbGxzIGFyZSBtYWRlIHRvIHRoZQogICAgb3BlcmF0aW5nIHN5c3RlbSBzb2NrZXQgQVBJcy4gIFRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBPcGVuU1NMIG1heSBhbHNvCi0gICBjYXVzZSB2YXJpYXRpb25zIGluIGJlaGF2aW9yLgorICAgY2F1c2UgdmFyaWF0aW9ucyBpbiBiZWhhdmlvci4gRm9yIGV4YW1wbGUsIFRMU3YxLjEgYW5kIFRMU3YxLjIgY29tZSB3aXRoCisgICBvcGVuc3NsIHZlcnNpb24gMS4wLjEuCiAKIC4uIHdhcm5pbmc6OgogCkBAIC0xODUsMTQgKzE4NiwxNiBAQAogCiAgICAgIC4uIHRhYmxlOjoKIAotICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQotICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKgotICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLQotICAgICAgICAqU1NMdjIqICAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8KLSAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vCi0gICAgICAgICpTU0x2MjMqICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubwotICAgICAgICAqVExTdjEqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgeWVzCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09CisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT0KKyAgICAgICAgKmNsaWVudCogLyAqKnNlcnZlcioqICAgICoqU1NMdjIqKiAgKipTU0x2MyoqICAqKlNTTHYyMyoqICAqKlRMU3YxKiogICoqVExTdjEuMSoqICAqKlRMU3YxLjIqKgorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCisgICAgICAgICpTU0x2MiogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqU1NMdjIzKiAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIG5vCisgICAgICAgICpUTFN2MSogICAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlRMU3YxLjEqICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICBubworICAgICAgICAqVExTdjEuMiogICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcworICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PT0gID09PT09PT09PT09CiAKICAgIC4uIG5vdGU6OgogCkBAIC0zNTUsNiArMzU4LDM3IEBACiAgICBHaXZlbiBhIGNlcnRpZmljYXRlIGFzIGFuIEFTQ0lJIFBFTSBzdHJpbmcsIHJldHVybnMgYSBERVItZW5jb2RlZCBzZXF1ZW5jZSBvZgogICAgYnl0ZXMgZm9yIHRoYXQgc2FtZSBjZXJ0aWZpY2F0ZS4KIAorLi4gZnVuY3Rpb246OiBnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorCisgICBSZXR1cm5zIGEgbmFtZWQgdHVwbGUgd2l0aCBwYXRocyB0byBPcGVuU1NMJ3MgZGVmYXVsdCBjYWZpbGUgYW5kIGNhcGF0aC4KKyAgIFRoZSBwYXRocyBhcmUgdGhlIHNhbWUgYXMgdXNlZCBieQorICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYC4gVGhlIHJldHVybiB2YWx1ZSBpcyBhCisgICA6dGVybTpgbmFtZWQgdHVwbGVgIGBgRGVmYXVsdFZlcmlmeVBhdGhzYGA6CisKKyAgICogOmF0dHI6YGNhZmlsZWAgLSByZXNvbHZlZCBwYXRoIHRvIGNhZmlsZSBvciBOb25lIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsCisgICAqIDphdHRyOmBjYXBhdGhgIC0gcmVzb2x2ZWQgcGF0aCB0byBjYXBhdGggb3IgTm9uZSBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhZmlsZV9lbnZgIC0gT3BlblNTTCdzIGVudmlyb25tZW50IGtleSB0aGF0IHBvaW50cyB0byBhIGNhZmlsZSwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FmaWxlYCAtIGhhcmQgY29kZWQgcGF0aCB0byBhIGNhZmlsZSwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FwYXRoX2VudmAgLSBPcGVuU1NMJ3MgZW52aXJvbm1lbnQga2V5IHRoYXQgcG9pbnRzIHRvIGEgY2FwYXRoLAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYXBhdGhgIC0gaGFyZCBjb2RlZCBwYXRoIHRvIGEgY2FwYXRoIGRpcmVjdG9yeQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBlbnVtX2NlcnRfc3RvcmUoc3RvcmVfbmFtZSwgY2VydF90eXBlPSdjZXJ0aWZpY2F0ZScpCisKKyAgIFJldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3MnIHN5c3RlbSBjZXJ0IHN0b3JlLiAqc3RvcmVfbmFtZSogbWF5IGJlCisgICBvbmUgb2YgYGBDQWBgLCBgYFJPT1RgYCBvciBgYE1ZYGAuIFdpbmRvd3MgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBjZXJ0CisgICBzdG9yZXMsIHRvby4gKmNlcnRfdHlwZSogaXMgZWl0aGVyIGBgY2VydGlmaWNhdGVgYCBmb3IgWC41MDkgY2VydGlmaWNhdGVzCisgICBvciBgYGNybGBgIGZvciBYLjUwOSBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzLgorCisgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGJ5dGVzLCBlbmNvZGluZ190eXBlKSB0dXBsZXMuIFRoZQorICAgZW5jb2RpbmdfdHlwZSBmbGFnIGNhbiBiZSBpbnRlcnByZXRlZCB3aXRoIDpjb25zdDpgWDUwOV9BU05fRU5DT0RJTkdgIG9yCisgICA6Y29uc3Q6YFBLQ1NfN19BU05fRU5DT0RJTkdgLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBDb25zdGFudHMKIF5eXl5eXl5eXgogCkBAIC00MTYsOSArNDUwLDI1IEBACiAKIC4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MQogCi0gICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gIFRoaXMgaXMgdGhlIG1vc3QKKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4wIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCisKKy4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MV8xCisKKworICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxLjEgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4KKyAgIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MV8yCisKKworICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxLjIgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gVGhpcyBpcyB0aGUgbW9zdAogICAgbW9kZXJuIHZlcnNpb24sIGFuZCBwcm9iYWJseSB0aGUgYmVzdCBjaG9pY2UgZm9yIG1heGltdW0gcHJvdGVjdGlvbiwgaWYgYm90aAogICAgc2lkZXMgY2FuIHNwZWFrIGl0LgorICAgQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gZGF0YTo6IE9QX0FMTAogCkBAIC00NTIsNiArNTAyLDIyIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogT1BfTk9fVExTdjFfMQorCisgICBQcmV2ZW50cyBhIFRMU3YxLjEgY29ubmVjdGlvbi4gVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIGluIGNvbmp1bmN0aW9uCisgICB3aXRoIDpjb25zdDpgUFJPVE9DT0xfU1NMdjIzYC4gSXQgcHJldmVudHMgdGhlIHBlZXJzIGZyb20gY2hvb3NpbmcgVExTdjEuMSBhcworICAgdGhlIHByb3RvY29sIHZlcnNpb24uIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBPUF9OT19UTFN2MV8yCisKKyAgIFByZXZlbnRzIGEgVExTdjEuMiBjb25uZWN0aW9uLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgaW4gY29uanVuY3Rpb24KKyAgIHdpdGggOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgLiBJdCBwcmV2ZW50cyB0aGUgcGVlcnMgZnJvbSBjaG9vc2luZyBUTFN2MS4yIGFzCisgICB0aGUgcHJvdG9jb2wgdmVyc2lvbi4gQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZGF0YTo6IE9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRQogCiAgICBVc2UgdGhlIHNlcnZlcidzIGNpcGhlciBvcmRlcmluZyBwcmVmZXJlbmNlLCByYXRoZXIgdGhhbiB0aGUgY2xpZW50J3MuCkBAIC01NDgsNiArNjE0LDI4IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkUKKyAgICAgICAgICBBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorICAgICAgICAgIEFMRVJUX0RFU0NSSVBUSU9OXyoKKworICAgQWxlcnQgRGVzY3JpcHRpb25zIGZyb20gOnJmYzpgNTI0NmAgYW5kIG90aGVycy4gVGhlIGBJQU5BIFRMUyBBbGVydCBSZWdpc3RyeQorICAgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTY+YF8KKyAgIGNvbnRhaW5zIHRoaXMgbGlzdCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgUkZDcyB3aGVyZSB0aGVpciBtZWFuaW5nIGlzIGRlZmluZWQuCisKKyAgIFVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBYNTA5X0FTTl9FTkNPRElORworICAgICAgICAgIFBLQ1NfN19BU05fRU5DT0RJTkcKKworICAgRW5jb2RpbmcgZmxhZ3MgZm9yIDpmdW5jOmBlbnVtX2NlcnRfc3RvcmVgLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIFNTTCBTb2NrZXRzCiAtLS0tLS0tLS0tLQpAQCAtNTg2LDcgKzY3NCw4IEBACiAuLiBtZXRob2Q6OiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoYmluYXJ5X2Zvcm09RmFsc2UpCiAKICAgIElmIHRoZXJlIGlzIG5vIGNlcnRpZmljYXRlIGZvciB0aGUgcGVlciBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLAotICAgcmV0dXJucyBgYE5vbmVgYC4KKyAgIHJldHVybiBgYE5vbmVgYC4gIElmIHRoZSBTU0wgaGFuZHNoYWtlIGhhc24ndCBiZWVuIGRvbmUgeWV0LCByYWlzZQorICAgOmV4YzpgVmFsdWVFcnJvcmAuCiAKICAgIElmIHRoZSBgYGJpbmFyeV9mb3JtYGAgcGFyYW1ldGVyIGlzIDpjb25zdDpgRmFsc2VgLCBhbmQgYSBjZXJ0aWZpY2F0ZSB3YXMKICAgIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIsIHRoaXMgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YGRpY3RgIGluc3RhbmNlLiAgSWYgdGhlCkBAIC02NDMsNiArNzMyLDkgQEAKICAgICAgIFRoZSByZXR1cm5lZCBkaWN0aW9uYXJ5IGluY2x1ZGVzIGFkZGl0aW9uYWwgaXRlbXMgc3VjaCBhcyBgYGlzc3VlcmBgCiAgICAgICBhbmQgYGBub3RCZWZvcmVgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCB3aGVuIHRoZSBoYW5kc2hha2UgaXNuJ3QgZG9uZS4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmNpcGhlcigpCiAKICAgIFJldHVybnMgYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgYmVpbmcgdXNlZCwgdGhlCkBAIC03MTgsNiArODEwLDE5IEBACiAKIDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbmQgYXR0cmlidXRlczoKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKworICAgR2V0IHN0YXRpc3RpY3MgYWJvdXQgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLCBjb3VudCBvZgorICAgWC41MDkgY2VydGlmaWNhdGVzIGZsYWdnZWQgYXMgQ0EgY2VydGlmaWNhdGVzIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uCisgICBsaXN0cyBhcyBkaWN0aW9uYXJ5LgorCisgICBFeGFtcGxlIGZvciBhIGNvbnRleHQgd2l0aCBvbmUgQ0EgY2VydCBhbmQgb25lIG90aGVyIGNlcnQ6OgorCisgICAgICA+Pj4gY29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKyAgICAgIHsnY3JsJzogMCwgJ3g1MDlfY2EnOiAxLCAneDUwOSc6IDJ9CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZT1Ob25lLCBwYXNzd29yZD1Ob25lKQogCiAgICBMb2FkIGEgcHJpdmF0ZSBrZXkgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNlcnRpZmljYXRlLiAgVGhlICpjZXJ0ZmlsZSoKQEAgLTc2NCw2ICs4NjksMTcgQEAKICAgIGZvbGxvd2luZyBhbiBgT3BlblNTTCBzcGVjaWZpYyBsYXlvdXQKICAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3Mvc3NsL1NTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zLmh0bWw+YF8uCiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKQorCisgICBHZXQgYSBsaXN0IG9mIGxvYWRlZCAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzLiBJZiB0aGUKKyAgIGBgYmluYXJ5X2Zvcm1gYCBwYXJhbWV0ZXIgaXMgOmNvbnN0OmBGYWxzZWAgZWFjaCBsaXN0CisgICBlbnRyeSBpcyBhIGRpY3QgbGlrZSB0aGUgb3V0cHV0IG9mIDptZXRoOmBTU0xTb2NrZXQuZ2V0cGVlcmNlcnRgLiBPdGhlcndpc2UKKyAgIHRoZSBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgREVSLWVuY29kZWQgY2VydGlmaWNhdGVzLiBUaGUgcmV0dXJuZWQgbGlzdAorICAgZG9lcyBub3QgY29udGFpbiBjZXJ0aWZpY2F0ZXMgZnJvbSAqY2FwYXRoKiB1bmxlc3MgYSBjZXJ0aWZpY2F0ZSB3YXMKKyAgIHJlcXVlc3RlZCBhbmQgbG9hZGVkIGJ5IGEgU1NMIGNvbm5lY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBtZXRob2Q6OiBTU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCiAKICAgIExvYWQgYSBzZXQgb2YgZGVmYXVsdCAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIGZyb20KQEAgLTgwMSw2ICs5MTcsNTYgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VydmVyX25hbWVfY2FsbGJhY2spCisKKyAgIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgVExTIENsaWVudCBIZWxsbworICAgaGFuZHNoYWtlIG1lc3NhZ2UgaGFzIGJlZW4gcmVjZWl2ZWQgYnkgdGhlIFNTTC9UTFMgc2VydmVyIHdoZW4gdGhlIFRMUyBjbGllbnQKKyAgIHNwZWNpZmllcyBhIHNlcnZlciBuYW1lIGluZGljYXRpb24uIFRoZSBzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uIG1lY2hhbmlzbQorICAgaXMgc3BlY2lmaWVkIGluIDpyZmM6YDYwNjZgIHNlY3Rpb24gMyAtIFNlcnZlciBOYW1lIEluZGljYXRpb24uCisKKyAgIE9ubHkgb25lIGNhbGxiYWNrIGNhbiBiZSBzZXQgcGVyIGBgU1NMQ29udGV4dGBgLiAgSWYgKnNlcnZlcl9uYW1lX2NhbGxiYWNrKgorICAgaXMgYGBOb25lYGAgdGhlbiB0aGUgY2FsbGJhY2sgaXMgZGlzYWJsZWQuIENhbGxpbmcgdGhpcyBmdW5jdGlvbiBhCisgICBzdWJzZXF1ZW50IHRpbWUgd2lsbCBkaXNhYmxlIHRoZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2FsbGJhY2suCisKKyAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiwgKnNlcnZlcl9uYW1lX2NhbGxiYWNrKiwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aHJlZQorICAgYXJndW1lbnRzOyB0aGUgZmlyc3QgYmVpbmcgdGhlIDpjbGFzczpgc3NsLlNTTFNvY2tldGAsIHRoZSBzZWNvbmQgaXMgYSBzdHJpbmcKKyAgIHRoYXQgcmVwcmVzZW50cyB0aGUgc2VydmVyIG5hbWUgdGhhdCB0aGUgY2xpZW50IGlzIGludGVuZGluZyB0byBjb21tdW5pY2F0ZQorICAgKG9yIDpjb25zdDpgTm9uZWAgaWYgdGhlIFRMUyBDbGllbnQgSGVsbG8gZG9lcyBub3QgY29udGFpbiBhIHNlcnZlciBuYW1lKQorICAgYW5kIHRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgb3JpZ2luYWwgOmNsYXNzOmBTU0xDb250ZXh0YC4gVGhlIHNlcnZlciBuYW1lCisgICBhcmd1bWVudCBpcyB0aGUgSUROQSBkZWNvZGVkIHNlcnZlciBuYW1lLgorCisgICBBIHR5cGljYWwgdXNlIG9mIHRoaXMgY2FsbGJhY2sgaXMgdG8gY2hhbmdlIHRoZSA6Y2xhc3M6YHNzbC5TU0xTb2NrZXRgJ3MKKyAgIDphdHRyOmBTU0xTb2NrZXQuY29udGV4dGAgYXR0cmlidXRlIHRvIGEgbmV3IG9iamVjdCBvZiB0eXBlCisgICA6Y2xhc3M6YFNTTENvbnRleHRgIHJlcHJlc2VudGluZyBhIGNlcnRpZmljYXRlIGNoYWluIHRoYXQgbWF0Y2hlcyB0aGUgc2VydmVyCisgICBuYW1lLgorCisgICBEdWUgdG8gdGhlIGVhcmx5IG5lZ290aWF0aW9uIHBoYXNlIG9mIHRoZSBUTFMgY29ubmVjdGlvbiwgb25seSBsaW1pdGVkCisgICBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzIGFyZSB1c2FibGUgbGlrZQorICAgOm1ldGg6YFNTTFNvY2tldC5zZWxlY3RlZF9ucG5fcHJvdG9jb2xgIGFuZCA6YXR0cjpgU1NMU29ja2V0LmNvbnRleHRgLgorICAgOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGAsIDptZXRoOmBTU0xTb2NrZXQuZ2V0cGVlcmNlcnRgLAorICAgOm1ldGg6YFNTTFNvY2tldC5jaXBoZXJgIGFuZCA6bWV0aDpgU1NMU29ja2V0LmNvbXByZXNzYCBtZXRob2RzIHJlcXVpcmUgdGhhdAorICAgdGhlIFRMUyBjb25uZWN0aW9uIGhhcyBwcm9ncmVzc2VkIGJleW9uZCB0aGUgVExTIENsaWVudCBIZWxsbyBhbmQgdGhlcmVmb3JlCisgICB3aWxsIG5vdCBjb250YWluIHJldHVybiBtZWFuaW5nZnVsIHZhbHVlcyBub3IgY2FuIHRoZXkgYmUgY2FsbGVkIHNhZmVseS4KKworICAgVGhlICpzZXJ2ZXJfbmFtZV9jYWxsYmFjayogZnVuY3Rpb24gbXVzdCByZXR1cm4gYGBOb25lYGAgdG8gYWxsb3cgdGhlCisgICBUTFMgbmVnb3RpYXRpb24gdG8gY29udGludWUuICBJZiBhIFRMUyBmYWlsdXJlIGlzIHJlcXVpcmVkLCBhIGNvbnN0YW50CisgICA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OXyogPEFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SPmAgY2FuIGJlCisgICByZXR1cm5lZC4gIE90aGVyIHJldHVybiB2YWx1ZXMgd2lsbCByZXN1bHQgaW4gYSBUTFMgZmF0YWwgZXJyb3Igd2l0aAorICAgOmNvbnN0OmBBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUmAuCisKKyAgIElmIHRoZXJlIGlzIGEgSUROQSBkZWNvZGluZyBlcnJvciBvbiB0aGUgc2VydmVyIG5hbWUsIHRoZSBUTFMgY29ubmVjdGlvbgorICAgd2lsbCB0ZXJtaW5hdGUgd2l0aCBhbiA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SYCBmYXRhbCBUTFMKKyAgIGFsZXJ0IG1lc3NhZ2UgdG8gdGhlIGNsaWVudC4KKworICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBmcm9tIHRoZSAqc2VydmVyX25hbWVfY2FsbGJhY2sqIGZ1bmN0aW9uIHRoZSBUTFMKKyAgIGNvbm5lY3Rpb24gd2lsbCB0ZXJtaW5hdGUgd2l0aCBhIGZhdGFsIFRMUyBhbGVydCBtZXNzYWdlCisgICA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0hBTkRTSEFLRV9GQUlMVVJFYC4KKworICAgVGhpcyBtZXRob2Qgd2lsbCByYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpZiB0aGUgT3BlblNTTCBsaWJyYXJ5CisgICBoYWQgT1BFTlNTTF9OT19UTFNFWFQgZGVmaW5lZCB3aGVuIGl0IHdhcyBidWlsdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoZGhmaWxlKQogCiAgICBMb2FkIHRoZSBrZXkgZ2VuZXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBEaWZmaWUtSGVsbWFuIChESCkga2V5IGV4Y2hhbmdlLgpAQCAtMTMzNCwzICsxNTAwLDEyIEBACiAKICAgIGBSRkMgNDM2NjogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIEV4dGVuc2lvbnMgPGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQzNjY+YF8KICAgICAgICBCbGFrZS1XaWxzb24gZXQuIGFsLgorCisgICBgUkZDIDUyNDY6IFRoZSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgUHJvdG9jb2wgVmVyc2lvbiAxLjIgPGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzUyNDY+YF8KKyAgICAgICBULiBEaWVya3MgZXQuIGFsLgorCisgICBgUkZDIDYwNjY6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBFeHRlbnNpb25zIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM2MDY2PmBfCisgICAgICAgRC4gRWFzdGxha2UKKworICAgYElBTkEgVExTOiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgUGFyYW1ldGVycyA8aHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWw+YF8KKyAgICAgICBJQU5BCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdGF0LnJzdCBiL0RvYy9saWJyYXJ5L3N0YXQucnN0CmluZGV4IDZjMjBhYTIuLjI0NzY5ZjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0YXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0YXQucnN0CkBAIC02LDcgKzYsOCBAQAogICAgICAgICAgICAgICBvcy5sc3RhdCgpIGFuZCBvcy5mc3RhdCgpLgogLi4gc2VjdGlvbmF1dGhvcjo6IFNraXAgTW9udGFuYXJvIDxza2lwQGF1dG9tYXRyaXguY29tPgogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zdGF0LnB5YAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBNb2R1bGVzL19zdGF0LmNgCisgICAgICAgICAgICAgICAgIDpzb3VyY2U6YExpYi9zdGF0LnB5YAogCiAtLS0tLS0tLS0tLS0tLQogCkBAIC0xNSw2ICsxNiw5IEBACiBleGlzdCkuICBGb3IgY29tcGxldGUgZGV0YWlscyBhYm91dCB0aGUgOmM6ZnVuYzpgc3RhdGAsIDpjOmZ1bmM6YGZzdGF0YCBhbmQKIDpjOmZ1bmM6YGxzdGF0YCBjYWxscywgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBzeXN0ZW0uCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgc3RhdCBtb2R1bGUgaXMgYmFja2VkIGJ5IGEgQyBpbXBsZW1lbnRhdGlvbi4KKwogVGhlIDptb2Q6YHN0YXRgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIHRlc3QgZm9yIHNwZWNpZmljIGZpbGUKIHR5cGVzOgogCkBAIC01Myw2ICs1NywyNCBAQAogCiAgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhIHNvY2tldC4KIAorLi4gZnVuY3Rpb246OiBTX0lTRE9PUihtb2RlKQorCisgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhIGRvb3IuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IFNfSVNQT1JUKG1vZGUpCisKKyAgIFJldHVybiBub24temVybyBpZiB0aGUgbW9kZSBpcyBmcm9tIGFuIGV2ZW50IHBvcnQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IFNfSVNXSFQobW9kZSkKKworICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSB3aGl0ZW91dC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFR3byBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBmb3IgbW9yZSBnZW5lcmFsIG1hbmlwdWxhdGlvbiBvZiB0aGUgZmlsZSdzCiBtb2RlOgogCkBAIC0xMTMsNiArMTM1LDEwIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIDpkYXRhOmBTX0lGRE9PUmAsIDpkYXRhOmBTX0lGUE9SVGAgYW5kCisgICAgICA6ZGF0YTpgU19JRldIVGAuCisKIAogQWxsIHRoZSB2YXJpYWJsZXMgYmVsb3cgYXJlIHNpbXBseSBzeW1ib2xpYyBpbmRleGVzIGludG8gdGhlIDEwLXR1cGxlIHJldHVybmVkCiBieSA6ZnVuYzpgb3Muc3RhdGAsIDpmdW5jOmBvcy5mc3RhdGAgb3IgOmZ1bmM6YG9zLmxzdGF0YC4KQEAgLTIxMCw2ICsyMzYsMjkgQEAKIAogICAgRklGTy4KIAorLi4gZGF0YTo6IFNfSUZET09SCisKKyAgIERvb3IuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogU19JRlBPUlQKKworICAgRXZlbnQgcG9ydC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBTX0lGV0hUCisKKyAgIFdoaXRlb3V0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gbm90ZTo6CisKKyAgIDpkYXRhOmBTX0lGRE9PUmAsIDpkYXRhOmBTX0lGUE9SVGAgb3IgOmRhdGE6YFNfSUZXSFRgIGFyZSBkZWZpbmVkIGFzCisgICAwIHdoZW4gdGhlIHBsYXRmb3JtIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgdGhlIGZpbGUgdHlwZXMuCisKIFRoZSBmb2xsb3dpbmcgZmxhZ3MgY2FuIGFsc28gYmUgdXNlZCBpbiB0aGUgKm1vZGUqIGFyZ3VtZW50IG9mIDpmdW5jOmBvcy5jaG1vZGA6CiAKIC4uIGRhdGE6OiBTX0lTVUlECmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdCBiL0RvYy9saWJyYXJ5L3N0YXRpc3RpY3MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMTI4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdApAQCAtMCwwICsxLDQwNSBAQAorOm1vZDpgc3RhdGlzdGljc2AgLS0tIE1hdGhlbWF0aWNhbCBzdGF0aXN0aWNzIGZ1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBzdGF0aXN0aWNzCisgICA6c3lub3BzaXM6IG1hdGhlbWF0aWNhbCBzdGF0aXN0aWNzIGZ1bmN0aW9ucworLi4gbW9kdWxlYXV0aG9yOjogU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4KKy4uIHNlY3Rpb25hdXRob3I6OiBTdGV2ZW4gRCdBcHJhbm8gPHN0ZXZlK3B5dGhvbkBwZWFyd29vZC5pbmZvPgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gdGVzdHNldHVwOjogKgorCisgICBmcm9tIHN0YXRpc3RpY3MgaW1wb3J0ICoKKyAgIF9fbmFtZV9fID0gJzxkb2N0ZXN0PicKKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3RhdGlzdGljcy5weWAKKworLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyBtYXRoZW1hdGljYWwgc3RhdGlzdGljcyBvZgorbnVtZXJpYyAoOmNsYXNzOmBSZWFsYC12YWx1ZWQpIGRhdGEuCisKK0F2ZXJhZ2VzIGFuZCBtZWFzdXJlcyBvZiBjZW50cmFsIGxvY2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBmdW5jdGlvbnMgY2FsY3VsYXRlIGFuIGF2ZXJhZ2Ugb3IgdHlwaWNhbCB2YWx1ZSBmcm9tIGEgcG9wdWxhdGlvbgorb3Igc2FtcGxlLgorCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6ZnVuYzpgbWVhbmAgICAgICAgICAgICAgQXJpdGhtZXRpYyBtZWFuICgiYXZlcmFnZSIpIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuYCAgICAgICAgICAgTWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuX2xvd2AgICAgICAgTG93IG1lZGlhbiBvZiBkYXRhLgorOmZ1bmM6YG1lZGlhbl9oaWdoYCAgICAgIEhpZ2ggbWVkaWFuIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuX2dyb3VwZWRgICAgTWVkaWFuLCBvciA1MHRoIHBlcmNlbnRpbGUsIG9mIGdyb3VwZWQgZGF0YS4KKzpmdW5jOmBtb2RlYCAgICAgICAgICAgICBNb2RlIChtb3N0IGNvbW1vbiB2YWx1ZSkgb2YgZGlzY3JldGUgZGF0YS4KKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWVhc3VyZXMgb2Ygc3ByZWFkCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgZnVuY3Rpb25zIGNhbGN1bGF0ZSBhIG1lYXN1cmUgb2YgaG93IG11Y2ggdGhlIHBvcHVsYXRpb24gb3Igc2FtcGxlCit0ZW5kcyB0byBkZXZpYXRlIGZyb20gdGhlIHR5cGljYWwgb3IgYXZlcmFnZSB2YWx1ZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpmdW5jOmBwc3RkZXZgICAgICAgICAgICBQb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorOmZ1bmM6YHB2YXJpYW5jZWAgICAgICAgIFBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgZGF0YS4KKzpmdW5jOmBzdGRldmAgICAgICAgICAgICBTYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCis6ZnVuYzpgdmFyaWFuY2VgICAgICAgICAgU2FtcGxlIHZhcmlhbmNlIG9mIGRhdGEuCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworRnVuY3Rpb24gZGV0YWlscworLS0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IG1lYW4oZGF0YSkKKworICAgUmV0dXJuIHRoZSBzYW1wbGUgYXJpdGhtZXRpYyBtZWFuIG9mICpkYXRhKiwgYSBzZXF1ZW5jZSBvciBpdGVyYXRvciBvZgorICAgcmVhbC12YWx1ZWQgbnVtYmVycy4KKworICAgVGhlIGFyaXRobWV0aWMgbWVhbiBpcyB0aGUgc3VtIG9mIHRoZSBkYXRhIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZiBkYXRhCisgICBwb2ludHMuICBJdCBpcyBjb21tb25seSBjYWxsZWQgInRoZSBhdmVyYWdlIiwgYWx0aG91Z2ggaXQgaXMgb25seSBvbmUgb2YgbWFueQorICAgZGlmZmVyZW50IG1hdGhlbWF0aWNhbCBhdmVyYWdlcy4gIEl0IGlzIGEgbWVhc3VyZSBvZiB0aGUgY2VudHJhbCBsb2NhdGlvbiBvZgorICAgdGhlIGRhdGEuCisKKyAgIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCB3aWxsIGJlIHJhaXNlZC4KKworICAgU29tZSBleGFtcGxlcyBvZiB1c2U6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+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+IHZhcmlhbmNlKFtGKDEsIDYpLCBGKDEsIDIpLCBGKDUsIDMpXSkKKyAgICAgIEZyYWN0aW9uKDY3LCAxMDgpCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGlzIGlzIHRoZSBzYW1wbGUgdmFyaWFuY2Ugc8KyIHdpdGggQmVzc2VsJ3MgY29ycmVjdGlvbiwgYWxzbyBrbm93biBhcworICAgICAgdmFyaWFuY2Ugd2l0aCBOLTEgZGVncmVlcyBvZiBmcmVlZG9tLiAgUHJvdmlkZWQgdGhhdCB0aGUgZGF0YSBwb2ludHMgYXJlCisgICAgICByZXByZXNlbnRhdGl2ZSAoZS5nLiBpbmRlcGVuZGVudCBhbmQgaWRlbnRpY2FsbHkgZGlzdHJpYnV0ZWQpLCB0aGUgcmVzdWx0CisgICAgICBzaG91bGQgYmUgYW4gdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHRydWUgcG9wdWxhdGlvbiB2YXJpYW5jZS4KKworICAgICAgSWYgeW91IHNvbWVob3cga25vdyB0aGUgYWN0dWFsIHBvcHVsYXRpb24gbWVhbiDOvCB5b3Ugc2hvdWxkIHBhc3MgaXQgdG8gdGhlCisgICAgICA6ZnVuYzpgcHZhcmlhbmNlYCBmdW5jdGlvbiBhcyB0aGUgKm11KiBwYXJhbWV0ZXIgdG8gZ2V0IHRoZSB2YXJpYW5jZSBvZiBhCisgICAgICBzYW1wbGUuCisKK0V4Y2VwdGlvbnMKKy0tLS0tLS0tLS0KKworQSBzaW5nbGUgZXhjZXB0aW9uIGlzIGRlZmluZWQ6CisKKy4uIGV4Y2VwdGlvbjo6IFN0YXRpc3RpY3NFcnJvcgorCisgICBTdWJjbGFzcyBvZiA6ZXhjOmBWYWx1ZUVycm9yYCBmb3Igc3RhdGlzdGljcy1yZWxhdGVkIGV4Y2VwdGlvbnMuCisKKy4uCisgICAjIFRoaXMgbW9kZWxpbmVzIG11c3QgYXBwZWFyIHdpdGhpbiB0aGUgbGFzdCB0ZW4gbGluZXMgb2YgdGhlIGZpbGUuCisgICBrYXRlOiBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRhYnMgb247IGVuY29kaW5nIHV0Zi04OwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CmluZGV4IGZhNThhMGQuLjA0ZDAxZjQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKQEAgLTI0NTksNiArMjQ1OSwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIE9uZS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cyB3aXRoIGZvcm1hdHMgJ0InLCAnYicgb3IgJ2MnIGFyZSBub3cgaGFzaGFibGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBtZW1vcnl2aWV3IGlzIG5vdyByZWdpc3RlcmVkIGF1dG9tYXRpY2FsbHkgd2l0aAorICAgICAgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgCisKICAgIDpjbGFzczpgbWVtb3J5dmlld2AgaGFzIHNldmVyYWwgbWV0aG9kczoKIAogICAgLi4gbWV0aG9kOjogX19lcV9fKGV4cG9ydGVyKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RydWN0LnJzdCBiL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKaW5kZXggOTk0NTA2Yy4uZjJlYTM2MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3RydWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CkBAIC02Niw2ICs2NiwxOSBAQAogICAgZm9ybWF0IChgYGxlbihidWZmZXJbb2Zmc2V0Ol0pYGAgbXVzdCBiZSBhdCBsZWFzdCBgYGNhbGNzaXplKGZtdClgYCkuCiAKIAorLi4gZnVuY3Rpb246OiBpdGVyX3VucGFjayhmbXQsIGJ1ZmZlcikKKworICAgSXRlcmF0aXZlbHkgdW5wYWNrIGZyb20gdGhlIGJ1ZmZlciAqYnVmZmVyKiBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdAorICAgc3RyaW5nICpmbXQqLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGl0ZXJhdG9yIHdoaWNoIHdpbGwgcmVhZAorICAgZXF1YWxseS1zaXplZCBjaHVua3MgZnJvbSB0aGUgYnVmZmVyIHVudGlsIGFsbCBpdHMgY29udGVudHMgaGF2ZSBiZWVuCisgICBjb25zdW1lZC4gIFRoZSBidWZmZXIncyBzaXplIGluIGJ5dGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYW1vdW50CisgICBvZiBkYXRhIHJlcXVpcmVkIGJ5IHRoZSBmb3JtYXQsIGFzIHJlZmxlY3RlZCBieSA6ZnVuYzpgY2FsY3NpemVgLgorCisgICBFYWNoIGl0ZXJhdGlvbiB5aWVsZHMgYSB0dXBsZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGZvcm1hdCBzdHJpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY2FsY3NpemUoZm10KQogCiAgICBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHN0cnVjdCAoYW5kIGhlbmNlIG9mIHRoZSBieXRlcyBvYmplY3QgcHJvZHVjZWQgYnkKQEAgLTM4OCw2ICs0MDEsMTMgQEAKICAgICAgIChgYGxlbihidWZmZXJbb2Zmc2V0Ol0pYGAgbXVzdCBiZSBhdCBsZWFzdCA6YXR0cjpgc2VsZi5zaXplYCkuCiAKIAorICAgLi4gbWV0aG9kOjogaXRlcl91bnBhY2soYnVmZmVyKQorCisgICAgICBJZGVudGljYWwgdG8gdGhlIDpmdW5jOmBpdGVyX3VucGFja2AgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBmb3JtYXQuCisgICAgICAoYGBsZW4oYnVmZmVyKWBgIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA6YXR0cjpgc2VsZi5zaXplYCkuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBhdHRyaWJ1dGU6OiBmb3JtYXQKIAogICAgICAgVGhlIGZvcm1hdCBzdHJpbmcgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyBTdHJ1Y3Qgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAppbmRleCBmMTE1NjM0Li4yMDhlZGQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdApAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgogCiAKLS4uIGZ1bmN0aW9uOjogY2hlY2tfb3V0cHV0KGFyZ3MsICosIHN0ZGluPU5vbmUsIHN0ZGVycj1Ob25lLCBzaGVsbD1GYWxzZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0aW1lb3V0PU5vbmUpCisuLiBmdW5jdGlvbjo6IGNoZWNrX291dHB1dChhcmdzLCAqLCBpbnB1dD1Ob25lLCBzdGRpbj1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdGltZW91dD1Ob25lKQogCiAgICBSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuCiAKQEAgLTEyOSwxNSArMTI5LDIxIEBACiAgICBpbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCAoaGVuY2UgdGhlIHVzZSBvZiBrZXl3b3JkLW9ubHkgbm90YXRpb24KICAgIGluIHRoZSBhYmJyZXZpYXRlZCBzaWduYXR1cmUpLiBUaGUgZnVsbCBmdW5jdGlvbiBzaWduYXR1cmUgaXMgbGFyZ2VseSB0aGUKICAgIHNhbWUgYXMgdGhhdCBvZiB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IgLSB0aGlzIGZ1bmN0aW9ucyBwYXNzZXMgYWxsCi0gICBzdXBwbGllZCBhcmd1bWVudHMgb3RoZXIgdGhhbiAqdGltZW91dCogZGlyZWN0bHkgdGhyb3VnaCB0byB0aGF0IGludGVyZmFjZS4KLSAgIEluIGFkZGl0aW9uLCAqc3Rkb3V0KiBpcyBub3QgcGVybWl0dGVkIGFzIGFuIGFyZ3VtZW50LCBhcyBpdCBpcyB1c2VkCi0gICBpbnRlcm5hbGx5IHRvIGNvbGxlY3QgdGhlIG91dHB1dCBmcm9tIHRoZSBzdWJwcm9jZXNzLgorICAgc3VwcGxpZWQgYXJndW1lbnRzIG90aGVyIHRoYW4gKmlucHV0KiBhbmQgKnRpbWVvdXQqIGRpcmVjdGx5IHRocm91Z2ggdG8KKyAgIHRoYXQgaW50ZXJmYWNlLiAgSW4gYWRkaXRpb24sICpzdGRvdXQqIGlzIG5vdCBwZXJtaXR0ZWQgYXMgYW4gYXJndW1lbnQsIGFzCisgICBpdCBpcyB1c2VkIGludGVybmFsbHkgdG8gY29sbGVjdCB0aGUgb3V0cHV0IGZyb20gdGhlIHN1YnByb2Nlc3MuCiAKICAgIFRoZSAqdGltZW91dCogYXJndW1lbnQgaXMgcGFzc2VkIHRvIDptZXRoOmBQb3Blbi53YWl0YC4gSWYgdGhlIHRpbWVvdXQKICAgIGV4cGlyZXMsIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmUga2lsbGVkIGFuZCB0aGVuIHdhaXRlZCBmb3IgYWdhaW4uICBUaGUKICAgIDpleGM6YFRpbWVvdXRFeHBpcmVkYCBleGNlcHRpb24gd2lsbCBiZSByZS1yYWlzZWQgYWZ0ZXIgdGhlIGNoaWxkIHByb2Nlc3MKICAgIGhhcyB0ZXJtaW5hdGVkLgogCisgICBUaGUgKmlucHV0KiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gOm1ldGg6YFBvcGVuLmNvbW11bmljYXRlYCBhbmQgdGh1cyB0byB0aGUKKyAgIHN1YnByb2Nlc3MncyBzdGRpbi4gIElmIHVzZWQgaXQgbXVzdCBiZSBhIGJ5dGUgc2VxdWVuY2UsIG9yIGEgc3RyaW5nIGlmCisgICBgYHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlYGAuICBXaGVuIHVzZWQsIHRoZSBpbnRlcm5hbCA6Y2xhc3M6YFBvcGVuYCBvYmplY3QKKyAgIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aXRoIGBgc3RkaW49UElQRWBgLCBhbmQgdGhlICpzdGRpbiogYXJndW1lbnQgbWF5CisgICBub3QgYmUgdXNlZCBhcyB3ZWxsLgorCiAgICBFeGFtcGxlczo6CiAKICAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImVjaG8iLCAiSGVsbG8gV29ybGQhIl0pCkBAIC0xNDYsNiArMTUyLDEwIEBACiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJlY2hvIiwgIkhlbGxvIFdvcmxkISJdLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKICAgICAgICdIZWxsbyBXb3JsZCFcbicKIAorICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsic2VkIiwgIi1lIiwgInMvZm9vL2Jhci8iXSwKKyAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dD1iIndoZW4gaW4gdGhlIGNvdXJzZSBvZiBmb29tYW4gZXZlbnRzXG4iKQorICAgICAgYid3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgYmFybWFuIGV2ZW50c1xuJworCiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImV4aXQgMSIsIHNoZWxsPVRydWUpCiAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgICAuLi4KQEAgLTE2NywxMCArMTc3LDYgQEAKICAgICAgIC4uLiAgICAgc2hlbGw9VHJ1ZSkKICAgICAgICdsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCi0KLSAgIC4uCi0KICAgIC4uIHdhcm5pbmc6OgogCiAgICAgICBJbnZva2luZyB0aGUgc3lzdGVtIHNoZWxsIHdpdGggYGBzaGVsbD1UcnVlYGAgY2FuIGJlIGEgc2VjdXJpdHkgaGF6YXJkCkBAIC0xODMsOSArMTg5LDEzIEBACiAgICAgICByZWFkIGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHRoZSBjaGlsZCBwcm9jZXNzIG1heSBibG9jayBpZiBpdAogICAgICAgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gdGhlIHBpcGUgdG8gZmlsbCB1cCB0aGUgT1MgcGlwZSBidWZmZXIuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICppbnB1dCogd2FzIGFkZGVkLgogCiAuLiBkYXRhOjogREVWTlVMTAogCkBAIC04MzQsOCArODQ0LDYgQEAKICAgIFRoZSBuZXcgcHJvY2VzcyBoYXMgYSBuZXcgY29uc29sZSwgaW5zdGVhZCBvZiBpbmhlcml0aW5nIGl0cyBwYXJlbnQncwogICAgY29uc29sZSAodGhlIGRlZmF1bHQpLgogCi0gICBUaGlzIGZsYWcgaXMgYWx3YXlzIHNldCB3aGVuIDpjbGFzczpgUG9wZW5gIGlzIGNyZWF0ZWQgd2l0aCBgYHNoZWxsPVRydWVgYC4KLQogLi4gZGF0YTo6IENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUAogCiAgICBBIDpjbGFzczpgUG9wZW5gIGBgY3JlYXRpb25mbGFnc2BgIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoYXQgYSBuZXcgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3VuYXUucnN0IGIvRG9jL2xpYnJhcnkvc3VuYXUucnN0CmluZGV4IDRiZGI5OWIuLmVhZTcxMGQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N1bmF1LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKQEAgLTE1MCw4ICsxNTAsOSBAQAogCiAuLiBtZXRob2Q6OiBBVV9yZWFkLmdldHBhcmFtcygpCiAKLSAgIFJldHVybnMgYSB0dXBsZSBgYChuY2hhbm5lbHMsIHNhbXB3aWR0aCwgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwKLSAgIGNvbXBuYW1lKWBgLCBlcXVpdmFsZW50IHRvIG91dHB1dCBvZiB0aGUgOm1ldGg6YGdldFwqYCBtZXRob2RzLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogQVVfcmVhZC5yZWFkZnJhbWVzKG4pCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXMucnN0IGIvRG9jL2xpYnJhcnkvc3lzLnJzdAppbmRleCBiYzFkOWZlLi4zNDE3NjRhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5cy5yc3QKQEAgLTM4MCw2ICszODAsMjEgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKKy4uIGZ1bmN0aW9uOjogZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKworICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBjdXJyZW50bHkgYWxsb2NhdGVkIGJ5IHRoZSBpbnRlcnByZXRlciwKKyAgIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgc2l6ZS4gIFRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IHVzZWZ1bCBmb3IgdHJhY2tpbmcKKyAgIGFuZCBkZWJ1Z2dpbmcgbWVtb3J5IGxlYWtzLiAgQmVjYXVzZSBvZiB0aGUgaW50ZXJwcmV0ZXIncyBpbnRlcm5hbAorICAgY2FjaGVzLCB0aGUgcmVzdWx0IGNhbiB2YXJ5IGZyb20gY2FsbCB0byBjYWxsOyB5b3UgbWF5IGhhdmUgdG8gY2FsbAorICAgOmZ1bmM6YF9jbGVhcl90eXBlX2NhY2hlKClgIGFuZCA6ZnVuYzpgZ2MuY29sbGVjdCgpYCB0byBnZXQgbW9yZQorICAgcHJlZGljdGFibGUgcmVzdWx0cy4KKworICAgSWYgYSBQeXRob24gYnVpbGQgb3IgaW1wbGVtZW50YXRpb24gY2Fubm90IHJlYXNvbmFibHkgY29tcHV0ZSB0aGlzCisgICBpbmZvcm1hdGlvbiwgOmZ1bmM6YGdldGFsbG9jYXRlZGJsb2NrcygpYCBpcyBhbGxvd2VkIHRvIHJldHVybiAwIGluc3RlYWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogZ2V0Y2hlY2tpbnRlcnZhbCgpCiAKICAgIFJldHVybiB0aGUgaW50ZXJwcmV0ZXIncyAiY2hlY2sgaW50ZXJ2YWwiOyBzZWUgOmZ1bmM6YHNldGNoZWNraW50ZXJ2YWxgLgpAQCAtMzk2LDkgKzQxMSwxMCBAQAogCiAuLiBmdW5jdGlvbjo6IGdldGRsb3BlbmZsYWdzKCkKIAotICAgUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciA6YzpmdW5jOmBkbG9wZW5gIGNhbGxzLgotICAgVGhlIGZsYWcgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHRoZSA6bW9kOmBjdHlwZXNgIGFuZCA6bW9kOmBETEZDTmAgbW9kdWxlcy4KLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IKKyAgIDpjOmZ1bmM6YGRsb3BlbmAgY2FsbHMuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgdmFsdWVzIGNhbiBiZQorICAgZm91bmQgaW4gdGhlIDptb2Q6YG9zYCBtb2R1bGUgKGBgUlRMRF94eHhgYCBjb25zdGFudHMsIGUuZy4KKyAgIDpkYXRhOmBvcy5SVExEX0xBWllgKS4gIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCiAuLiBmdW5jdGlvbjo6IGdldGZpbGVzeXN0ZW1lbmNvZGluZygpCkBAIC02NjQsNiArNjgwLDE2IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCisuLiBkYXRhOjogX19pbnRlcmFjdGl2ZWhvb2tfXworCisgICBXaGVuIHByZXNlbnQsIHRoaXMgZnVuY3Rpb24gaXMgYXV0b21hdGljYWxseSBjYWxsZWQgKHdpdGggbm8gYXJndW1lbnRzKQorICAgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgaXMgbGF1bmNoZWQgaW4gOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAuCisgICBUaGlzIGlzIGRvbmUgYWZ0ZXIgdGhlIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUgaXMgcmVhZCwgc28gdGhhdCB5b3UKKyAgIGNhbiBzZXQgdGhpcyBob29rIHRoZXJlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IGludGVybihzdHJpbmcpCiAKICAgIEVudGVyICpzdHJpbmcqIGluIHRoZSB0YWJsZSBvZiAiaW50ZXJuZWQiIHN0cmluZ3MgYW5kIHJldHVybiB0aGUgaW50ZXJuZWQgc3RyaW5nCkBAIC04MTEsOCArODM3LDYgQEAKICAgIFdpbmRvd3MgICAgICAgICAgYGAnd2luMzInYGAKICAgIFdpbmRvd3MvQ3lnd2luICAgYGAnY3lnd2luJ2BgCiAgICBNYWMgT1MgWCAgICAgICAgIGBgJ2RhcndpbidgYAotICAgT1MvMiAgICAgICAgICAgICBgYCdvczInYGAKLSAgIE9TLzIgRU1YICAgICAgICAgYGAnb3MyZW14J2BgCiAgICA9PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwpAQCAtODgzLDcgKzkwNyw3IEBACiAgICB0aGUgaW50ZXJwcmV0ZXIgbG9hZHMgZXh0ZW5zaW9uIG1vZHVsZXMuICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgd2lsbCBlbmFibGUgYQogICAgbGF6eSByZXNvbHZpbmcgb2Ygc3ltYm9scyB3aGVuIGltcG9ydGluZyBhIG1vZHVsZSwgaWYgY2FsbGVkIGFzCiAgICBgYHN5cy5zZXRkbG9wZW5mbGFncygwKWBgLiAgVG8gc2hhcmUgc3ltYm9scyBhY3Jvc3MgZXh0ZW5zaW9uIG1vZHVsZXMsIGNhbGwgYXMKLSAgIGBgc3lzLnNldGRsb3BlbmZsYWdzKG9zLlJUTERfR0xPQkFMKWBgLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXMKKyAgIGBgc3lzLnNldGRsb3BlbmZsYWdzKG9zLlJUTERfR0xPQkFMKWBgLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIHZhbHVlcwogICAgY2FuIGJlIGZvdW5kIGluIHRoZSA6bW9kOmBvc2AgbW9kdWxlIChgYFJUTERfeHh4YGAgY29uc3RhbnRzLCBlLmcuCiAgICA6ZGF0YTpgb3MuUlRMRF9MQVpZYCkuCiAKQEAgLTEwOTMsNyArMTExNyw2IEBACiAgICB8IDpjb25zdDpgbmFtZWAgICAgfCBOYW1lIG9mIHRoZSB0aHJlYWQgaW1wbGVtZW50YXRpb246ICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAnbnQnYGA6IFdpbmRvd3MgdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdvczInYGA6IE9TLzIgdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ3B0aHJlYWQnYGA6IFBPU0lYIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAnc29sYXJpcydgYDogU29sYXJpcyB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CmluZGV4IGM0N2RjY2UuLjUzNWFjNTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdApAQCAtODMsOCArODMsNiBAQAogICBsb2NhdGVkIHVuZGVyIHRoZSB1c2VyIGhvbWUgZGlyZWN0b3J5LgogLSAqbnQqOiBzY2hlbWUgZm9yIE5UIHBsYXRmb3JtcyBsaWtlIFdpbmRvd3MuCiAtICpudF91c2VyKjogc2NoZW1lIGZvciBOVCBwbGF0Zm9ybXMsIHdoZW4gdGhlICp1c2VyKiBvcHRpb24gaXMgdXNlZC4KLS0gKm9zMio6IHNjaGVtZSBmb3IgT1MvMiBwbGF0Zm9ybXMuCi0tICpvczJfaG9tZSo6IHNjaGVtZSBmb3IgT1MvMiBwYXRmb3Jtcywgd2hlbiB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLgogCiBFYWNoIHNjaGVtZSBpcyBpdHNlbGYgY29tcG9zZWQgb2YgYSBzZXJpZXMgb2YgcGF0aHMgYW5kIGVhY2ggcGF0aCBoYXMgYSB1bmlxdWUKIGlkZW50aWZpZXIuICBQeXRob24gY3VycmVudGx5IHVzZXMgZWlnaHQgcGF0aHM6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CmluZGV4IGMxMjcwZjQuLjJjNTE1NDkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CkBAIC00NDIsMTMgKzQ0Miw2IEBACiAgICBBIGRlY29yYXRvciBmb3IgcnVubmluZyB0ZXN0cyB0aGF0IHJlcXVpcmUgc3VwcG9ydCBmb3Igc3ltYm9saWMgbGlua3MuCiAKIAotLi4gZnVuY3Rpb246OiBzdXBwcmVzc19jcmFzaF9wb3B1cCgpCi0KLSAgIEEgY29udGV4dCBtYW5hZ2VyIHRoYXQgZGlzYWJsZXMgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZwotICAgYFNldEVycm9yTW9kZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMSUyOHY9dnMuODUlMjkuYXNweD5gXy4KLSAgIE9uIG90aGVyIHBsYXRmb3JtcyBpdCdzIGEgbm8tb3AuCi0KLQogLi4gZGVjb3JhdG9yOjogYW50aWNpcGF0ZV9mYWlsdXJlKGNvbmRpdGlvbikKIAogICAgQSBkZWNvcmF0b3IgdG8gY29uZGl0aW9uYWxseSBtYXJrIHRlc3RzIHdpdGgKQEAgLTU5Myw2ICs1ODYsMjEgQEAKICAgIFRlbXBvcmFyaWx5IHVuc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYGVudnZhcmBgLgogCiAKKy4uIGNsYXNzOjogU3VwcHJlc3NDcmFzaFJlcG9ydCgpCisKKyAgIEEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gdHJ5IHRvIHByZXZlbnQgY3Jhc2ggZGlhbG9nIHBvcHVwcyBvbiB0ZXN0cyB0aGF0CisgICBhcmUgZXhwZWN0ZWQgdG8gY3Jhc2ggYSBzdWJwcm9jZXNzLgorCisgICBPbiBXaW5kb3dzLCBpdCBkaXNhYmxlcyBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nCisgICBgU2V0RXJyb3JNb2RlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxLmFzcHg+YF8uCisKKyAgIE9uIFVOSVgsIDpmdW5jOmByZXNvdXJjZS5zZXRybGltaXRgIGlzIHVzZWQgdG8gc2V0CisgICA6YXR0cjpgcmVzb3VyY2UuUkxJTUlUX0NPUkVgJ3Mgc29mdCBsaW1pdCB0byAwIHRvIHByZXZlbnQgY29yZWR1bXAgZmlsZQorICAgY3JlYXRpb24uCisKKyAgIE9uIGJvdGggcGxhdGZvcm1zLCB0aGUgb2xkIHZhbHVlIGlzIHJlc3RvcmVkIGJ5IDptZXRoOmBfX2V4aXRfX2AuCisKKwogLi4gY2xhc3M6OiBXYXJuaW5nc1JlY29yZGVyKCkKIAogICAgQ2xhc3MgdXNlZCB0byByZWNvcmQgd2FybmluZ3MgZm9yIHVuaXQgdGVzdHMuIFNlZSBkb2N1bWVudGF0aW9uIG9mCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QgYi9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKaW5kZXggYzYyNTI1NC4uMWJhNDJhMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdApAQCAtMTAsMTEgKzEwLDExIEBACiAKIC0tLS0tLS0tLS0tLS0tCiAKLVRoZSA6bW9kOmB0ZXh0d3JhcGAgbW9kdWxlIHByb3ZpZGVzIHR3byBjb252ZW5pZW5jZSBmdW5jdGlvbnMsIDpmdW5jOmB3cmFwYCBhbmQKLTpmdW5jOmBmaWxsYCwgYXMgd2VsbCBhcyA6Y2xhc3M6YFRleHRXcmFwcGVyYCwgdGhlIGNsYXNzIHRoYXQgZG9lcyBhbGwgdGhlIHdvcmssCi1hbmQgdHdvIHV0aWxpdHkgZnVuY3Rpb25zLCA6ZnVuYzpgZGVkZW50YCBhbmQgOmZ1bmM6YGluZGVudGAuICBJZiB5b3UncmUganVzdCB3cmFwcGluZyBvciBmaWxsaW5nIG9uZQotb3IgdHdvICB0ZXh0IHN0cmluZ3MsIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGdvb2QgZW5vdWdoOwotb3RoZXJ3aXNlLCAgeW91IHNob3VsZCB1c2UgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBUZXh0V3JhcHBlcmAgZm9yIGVmZmljaWVuY3kuCitUaGUgOm1vZDpgdGV4dHdyYXBgIG1vZHVsZSBwcm92aWRlcyBzb21lIGNvbnZlbmllbmNlIGZ1bmN0aW9ucywKK2FzIHdlbGwgYXMgOmNsYXNzOmBUZXh0V3JhcHBlcmAsIHRoZSBjbGFzcyB0aGF0IGRvZXMgYWxsIHRoZSB3b3JrLgorSWYgeW91J3JlIGp1c3Qgd3JhcHBpbmcgb3IgZmlsbGluZyBvbmUgb3IgdHdvIHRleHQgc3RyaW5ncywgdGhlIGNvbnZlbmllbmNlCitmdW5jdGlvbnMgc2hvdWxkIGJlIGdvb2QgZW5vdWdoOyBvdGhlcndpc2UsIHlvdSBzaG91bGQgdXNlIGFuIGluc3RhbmNlIG9mCis6Y2xhc3M6YFRleHRXcmFwcGVyYCBmb3IgZWZmaWNpZW5jeS4KIAogLi4gZnVuY3Rpb246OiB3cmFwKHRleHQsIHdpZHRoPTcwLCAqKmt3YXJncykKIApAQCAtMzksMTkgKzM5LDI0IEBACiAgICBJbiBwYXJ0aWN1bGFyLCA6ZnVuYzpgZmlsbGAgYWNjZXB0cyBleGFjdGx5IHRoZSBzYW1lIGtleXdvcmQgYXJndW1lbnRzIGFzCiAgICA6ZnVuYzpgd3JhcGAuCiAKLUJvdGggOmZ1bmM6YHdyYXBgIGFuZCA6ZnVuYzpgZmlsbGAgd29yayBieSBjcmVhdGluZyBhIDpjbGFzczpgVGV4dFdyYXBwZXJgCi1pbnN0YW5jZSBhbmQgY2FsbGluZyBhIHNpbmdsZSBtZXRob2Qgb24gaXQuICBUaGF0IGluc3RhbmNlIGlzIG5vdCByZXVzZWQsIHNvIGZvcgotYXBwbGljYXRpb25zIHRoYXQgd3JhcC9maWxsIG1hbnkgdGV4dCBzdHJpbmdzLCBpdCB3aWxsIGJlIG1vcmUgZWZmaWNpZW50IGZvciB5b3UKLXRvIGNyZWF0ZSB5b3VyIG93biA6Y2xhc3M6YFRleHRXcmFwcGVyYCBvYmplY3QuCiAKLVRleHQgaXMgcHJlZmVyYWJseSB3cmFwcGVkIG9uIHdoaXRlc3BhY2VzIGFuZCByaWdodCBhZnRlciB0aGUgaHlwaGVucyBpbgotaHlwaGVuYXRlZCB3b3Jkczsgb25seSB0aGVuIHdpbGwgbG9uZyB3b3JkcyBiZSBicm9rZW4gaWYgbmVjZXNzYXJ5LCB1bmxlc3MKLTphdHRyOmBUZXh0V3JhcHBlci5icmVha19sb25nX3dvcmRzYCBpcyBzZXQgdG8gZmFsc2UuCisuLiBmdW5jdGlvbjo6IHNob3J0ZW4odGV4dCwgd2lkdGg9NzAsICosIHBsYWNlaG9sZGVyPSIgWy4uLl0iKQogCi1Ud28gYWRkaXRpb25hbCB1dGlsaXR5IGZ1bmN0aW9uLCA6ZnVuYzpgZGVkZW50YCBhbmQgOmZ1bmM6YGluZGVudGAsIGFyZQotcHJvdmlkZWQgdG8gcmVtb3ZlIGluZGVudGF0aW9uIGZyb20gc3RyaW5ncyB0aGF0IGhhdmUgdW53YW50ZWQgd2hpdGVzcGFjZQotdG8gdGhlIGxlZnQgb2YgdGhlIHRleHQgYW5kIHRvIGFkZCBhbiBhcmJpdHJhcnkgcHJlZml4IHRvIHNlbGVjdGVkIGxpbmVzCi1pbiBhIGJsb2NrIG9mIHRleHQuCisgICBDb2xsYXBzZSBhbmQgdHJ1bmNhdGUgdGhlIGdpdmVuIHRleHQgdG8gZml0IGluIHRoZSBnaXZlbiB3aWR0aC4KKworICAgVGhlIHRleHQgZmlyc3QgaGFzIGl0cyB3aGl0ZXNwYWNlIGNvbGxhcHNlZC4gIElmIGl0IHRoZW4gZml0cyBpbgorICAgdGhlICp3aWR0aCosIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC4gIE90aGVyd2lzZSwgYXMgbWFueSB3b3JkcworICAgYXMgcG9zc2libGUgYXJlIGpvaW5lZCBhbmQgdGhlbiB0aGUgKnBsYWNlaG9sZGVyKiBpcyBhcHBlbmRlZDo6CisKKyAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyAgd29ybGQhIiwgd2lkdGg9MTIpCisgICAgICAnSGVsbG8gd29ybGQhJworICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMSkKKyAgICAgICdIZWxsbyBbLi4uXScKKyAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyB3b3JsZCIsIHdpZHRoPTEwLCBwbGFjZWhvbGRlcj0iLi4uIikKKyAgICAgICdIZWxsby4uLicKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogLi4gZnVuY3Rpb246OiBkZWRlbnQodGV4dCkKIApAQCAtMTAyLDYgKzEwNywxNiBAQAogICAgICAgKyB3b3JsZAogCiAKKzpmdW5jOmB3cmFwYCwgOmZ1bmM6YGZpbGxgIGFuZCA6ZnVuYzpgc2hvcnRlbmAgd29yayBieSBjcmVhdGluZyBhCis6Y2xhc3M6YFRleHRXcmFwcGVyYCBpbnN0YW5jZSBhbmQgY2FsbGluZyBhIHNpbmdsZSBtZXRob2Qgb24gaXQuICBUaGF0CitpbnN0YW5jZSBpcyBub3QgcmV1c2VkLCBzbyBmb3IgYXBwbGljYXRpb25zIHRoYXQgcHJvY2VzcyBtYW55IHRleHQKK3N0cmluZ3MsIGl0IG1heSBiZSBtb3JlIGVmZmljaWVudCB0byBjcmVhdGUgeW91ciBvd24KKzpjbGFzczpgVGV4dFdyYXBwZXJgIG9iamVjdC4KKworVGV4dCBpcyBwcmVmZXJhYmx5IHdyYXBwZWQgb24gd2hpdGVzcGFjZXMgYW5kIHJpZ2h0IGFmdGVyIHRoZSBoeXBoZW5zIGluCitoeXBoZW5hdGVkIHdvcmRzOyBvbmx5IHRoZW4gd2lsbCBsb25nIHdvcmRzIGJlIGJyb2tlbiBpZiBuZWNlc3NhcnksIHVubGVzcworOmF0dHI6YFRleHRXcmFwcGVyLmJyZWFrX2xvbmdfd29yZHNgIGlzIHNldCB0byBmYWxzZS4KKwogLi4gY2xhc3M6OiBUZXh0V3JhcHBlcigqKmt3YXJncykKIAogICAgVGhlIDpjbGFzczpgVGV4dFdyYXBwZXJgIGNvbnN0cnVjdG9yIGFjY2VwdHMgYSBudW1iZXIgb2Ygb3B0aW9uYWwga2V5d29yZApAQCAtMjM1LDcgKzI1MCwyMyBAQAogICAgICAgd2FzIHRvIGFsd2F5cyBhbGxvdyBicmVha2luZyBoeXBoZW5hdGVkIHdvcmRzLgogCiAKLSAgIDpjbGFzczpgVGV4dFdyYXBwZXJgIGFsc28gcHJvdmlkZXMgdHdvIHB1YmxpYyBtZXRob2RzLCBhbmFsb2dvdXMgdG8gdGhlCisgICAuLiBhdHRyaWJ1dGU6OiBtYXhfbGluZXMKKworICAgICAgKGRlZmF1bHQ6IGBgTm9uZWBgKSBJZiBub3QgYGBOb25lYGAsIHRoZW4gdGhlIHRleHQgYmUgd2lsbCB0cnVuY2F0ZWQgdG8KKyAgICAgICptYXhfbGluZXMqIGxpbmVzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisgICAuLiBhdHRyaWJ1dGU6OiBwbGFjZWhvbGRlcgorCisgICAgICAoZGVmYXVsdDogYGAnIFsuLi5dJ2BgKSBTdHJpbmcgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBsYXN0IGxpbmUgb2YKKyAgICAgIHRleHQgaWYgaXQgd2lsbCBiZSB0cnVuY2F0ZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKyAgIDpjbGFzczpgVGV4dFdyYXBwZXJgIGFsc28gcHJvdmlkZXMgc29tZSBwdWJsaWMgbWV0aG9kcywgYW5hbG9nb3VzIHRvIHRoZQogICAgbW9kdWxlLWxldmVsIGNvbnZlbmllbmNlIGZ1bmN0aW9uczoKIAogICAgLi4gbWV0aG9kOjogd3JhcCh0ZXh0KQpAQCAtMjUxLDQgKzI4MiwzIEBACiAKICAgICAgIFdyYXBzIHRoZSBzaW5nbGUgcGFyYWdyYXBoIGluICp0ZXh0KiwgYW5kIHJldHVybnMgYSBzaW5nbGUgc3RyaW5nCiAgICAgICBjb250YWluaW5nIHRoZSB3cmFwcGVkIHBhcmFncmFwaC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdCBiL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKaW5kZXggN2MzMjZkMS4uNGEzYjNlYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CkBAIC01Nyw2ICs1NywxNSBAQAogICAgYW5kIHRocmVhZHMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBzdGFydGVkLgogCiAKKy4uIGZ1bmN0aW9uOjogbWFpbl90aHJlYWQoKQorCisgICBSZXR1cm4gdGhlIG1haW4gOmNsYXNzOmBUaHJlYWRgIG9iamVjdC4gIEluIG5vcm1hbCBjb25kaXRpb25zLCB0aGUKKyAgIG1haW4gdGhyZWFkIGlzIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhcworICAgc3RhcnRlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzZXR0cmFjZShmdW5jKQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogdHJhY2UgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CmluZGV4IGE0ODc5MTcuLjBjYzE1ODYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGltZWl0LnJzdApAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgICB0ID0gVGltZXIoLi4uKSAgICAgICAjIG91dHNpZGUgdGhlIHRyeS9leGNlcHQKICAgICAgICAgIHRyeToKICAgICAgICAgICAgICB0LnRpbWVpdCguLi4pICAgICMgb3IgdC5yZXBlYXQoLi4uKQotICAgICAgICAgZXhjZXB0OgorICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICB0LnByaW50X2V4YygpCiAKICAgICAgIFRoZSBhZHZhbnRhZ2Ugb3ZlciB0aGUgc3RhbmRhcmQgdHJhY2ViYWNrIGlzIHRoYXQgc291cmNlIGxpbmVzIGluIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QgYi9Eb2MvbGlicmFyeS90a2ludGVyLnJzdAppbmRleCBhZDM3YTdiLi44M2YwZWQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90a2ludGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS90a2ludGVyLnJzdApAQCAtNzQ3LDMyICs3NDcsNiBAQAogICAgZGlzcGxheWVkLiAgWW91IGNhbiB1c2UgdGhlc2UgOm1vZDpgdGtpbnRlcmAgZnVuY3Rpb25zIHRvIGFjY2VzcyB0aGVzZSBzcGVjaWFsCiAgICBwb2ludHMgaW4gdGV4dCB3aWRnZXRzOgogCi0uLiBmdW5jdGlvbjo6IEF0RW5kKCkKLSAgICAgIHJlZmVycyB0byB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgdGV4dAotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXRJbnNlcnQoKQotICAgICAgcmVmZXJzIHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgdGV4dCBjdXJzb3IgaXMKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0U2VsRmlyc3QoKQotICAgICAgaW5kaWNhdGVzIHRoZSBiZWdpbm5pbmcgcG9pbnQgb2YgdGhlIHNlbGVjdGVkIHRleHQKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0U2VsTGFzdCgpCi0gICAgICBkZW5vdGVzIHRoZSBsYXN0IHBvaW50IG9mIHRoZSBzZWxlY3RlZCB0ZXh0IGFuZCBmaW5hbGx5Ci0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdCh4WywgeV0pCi0gICAgICByZWZlcnMgdG8gdGhlIGNoYXJhY3RlciBhdCBwaXhlbCBsb2NhdGlvbiAqeCosICp5KiAod2l0aCAqeSogbm90IHVzZWQgaW4gdGhlCi0gICAgICBjYXNlIG9mIGEgdGV4dCBlbnRyeSB3aWRnZXQsIHdoaWNoIGNvbnRhaW5zIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCkuCi0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQogVGV4dCB3aWRnZXQgaW5kZXhlcwogICAgVGhlIGluZGV4IG5vdGF0aW9uIGZvciBUZXh0IHdpZGdldHMgaXMgdmVyeSByaWNoIGFuZCBpcyBiZXN0IGRlc2NyaWJlZCBpbiB0aGUgVGsKICAgIG1hbiBwYWdlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QgYi9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0CmluZGV4IDMyZTU3MzMuLmI2OGE4ZjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdApAQCAtMTI5LDYgKzEyOSwxMyBAQAogCiAgICBBIHNob3J0aGFuZCBmb3IgYGBmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSlgYC4KIAorLi4gZnVuY3Rpb246OiBjbGVhcl9mcmFtZXModGIpCisKKyAgIENsZWFycyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIGFsbCB0aGUgc3RhY2sgZnJhbWVzIGluIGEgdHJhY2ViYWNrICp0YioKKyAgIGJ5IGNhbGxpbmcgdGhlIDptZXRoOmBjbGVhcmAgbWV0aG9kIG9mIGVhY2ggZnJhbWUgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiAuLiBfdHJhY2ViYWNrLWV4YW1wbGU6CiAKQEAgLTE0Niw3ICsxNTMsNyBAQAogICAgICAgIHNvdXJjZSA9IGlucHV0KCI+Pj4gIikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGV4ZWMoc291cmNlLCBlbnZkaXIpCi0gICAgICAgZXhjZXB0OgorICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIHByaW50KCJFeGNlcHRpb24gaW4gdXNlciBjb2RlOiIpCiAgICAgICAgICAgIHByaW50KCItIio2MCkKICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRvdXQpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS90eXBlcy5yc3QKaW5kZXggNjk1NDgwZi4uYzRmNTdlNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3R5cGVzLnJzdApAQCAtMTA3LDkgKzEwNywzNSBAQAogICAgQyIuKQogCiAKLS4uIGRhdGE6OiBNb2R1bGVUeXBlCisuLiBjbGFzczo6IE1vZHVsZVR5cGUobmFtZSwgZG9jPU5vbmUpCiAKLSAgIFRoZSB0eXBlIG9mIG1vZHVsZXMuCisgICBUaGUgdHlwZSBvZiA6dGVybTpgbW9kdWxlcyA8bW9kdWxlPmAuIENvbnN0cnVjdG9yIHRha2VzIHRoZSBuYW1lIG9mIHRoZQorICAgbW9kdWxlIHRvIGJlIGNyZWF0ZWQgYW5kIG9wdGlvbmFsbHkgaXRzIDp0ZXJtOmBkb2NzdHJpbmdgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX2RvY19fCisKKyAgICAgIFRoZSA6dGVybTpgZG9jc3RyaW5nYCBvZiB0aGUgbW9kdWxlLiBEZWZhdWx0cyB0byBgYE5vbmVgYC4KKworICAgLi4gYXR0cmlidXRlOjogX19sb2FkZXJfXworCisgICAgICBUaGUgOnRlcm06YGxvYWRlcmAgd2hpY2ggbG9hZGVkIHRoZSBtb2R1bGUuIERlZmF1bHRzIHRvIGBgTm9uZWBgLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgRGVmYXVsdHMgdG8gYGBOb25lYGAuIFByZXZpb3VzbHkgdGhlIGF0dHJpYnV0ZSB3YXMgb3B0aW9uYWwuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fbmFtZV9fCisKKyAgICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fcGFja2FnZV9fCisKKyAgICAgIFdoaWNoIDp0ZXJtOmBwYWNrYWdlYCBhIG1vZHVsZSBiZWxvbmdzIHRvLiBJZiB0aGUgbW9kdWxlIGlzIHRvcC1sZXZlbAorICAgICAgKGkuZS4gbm90IGEgcGFydCBvZiBhbnkgc3BlY2lmaWMgcGFja2FnZSkgdGhlbiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQKKyAgICAgIHRvIGBgJydgYCwgZWxzZSBpdCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlICh3aGljaCBjYW4gYmUKKyAgICAgIDphdHRyOmBfX25hbWVfX2AgaWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UgaXRzZWxmKS4gRGVmYXVsdHMgdG8gYGBOb25lYGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBEZWZhdWx0cyB0byBgYE5vbmVgYC4gUHJldmlvdXNseSB0aGUgYXR0cmlidXRlIHdhcyBvcHRpb25hbC4KIAogCiAuLiBkYXRhOjogVHJhY2ViYWNrVHlwZQpAQCAtMjEyLDYgKzIzOCw4IEBACiAgICAgICAgICAgICAgICBrZXlzID0gc29ydGVkKHNlbGYuX19kaWN0X18pCiAgICAgICAgICAgICAgICBpdGVtcyA9ICgie309eyFyfSIuZm9ybWF0KGssIHNlbGYuX19kaWN0X19ba10pIGZvciBrIGluIGtleXMpCiAgICAgICAgICAgICAgICByZXR1cm4gInt9KHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sICIsICIuam9pbihpdGVtcykpCisgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KIAogICAgYGBTaW1wbGVOYW1lc3BhY2VgYCBtYXkgYmUgdXNlZnVsIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGBgY2xhc3MgTlM6IHBhc3NgYC4KICAgIEhvd2V2ZXIsIGZvciBhIHN0cnVjdHVyZWQgcmVjb3JkIHR5cGUgdXNlIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdCBiL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAppbmRleCBhZDcwZGQ5Li4zYjNkM2EwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CkBAIC0xNSw4ICsxNSw4IEBACiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgKFVDRCkgd2hpY2gKIGRlZmluZXMgY2hhcmFjdGVyIHByb3BlcnRpZXMgZm9yIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMuIFRoZSBkYXRhIGNvbnRhaW5lZCBpbgotdGhpcyBkYXRhYmFzZSBpcyBjb21waWxlZCBmcm9tIHRoZSBgVUNEIHZlcnNpb24gNi4xLjAKLTxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjEuMC91Y2Q+YF8uCit0aGlzIGRhdGFiYXNlIGlzIGNvbXBpbGVkIGZyb20gdGhlIGBVQ0QgdmVyc2lvbiA2LjMuMAorPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZD5gXy4KIAogVGhlIG1vZHVsZSB1c2VzIHRoZSBzYW1lIG5hbWVzIGFuZCBzeW1ib2xzIGFzIGRlZmluZWQgYnkgVW5pY29kZQogU3RhbmRhcmQgQW5uZXggIzQ0LCBgIlVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIgpAQCAtMTY2LDYgKzE2Niw2IEBACiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCi0uLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvdWNkL05hbWVBbGlhc2VzLnR4dAorLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9OYW1lQWxpYXNlcy50eHQKIAotLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMS4wL3VjZC9OYW1lZFNlcXVlbmNlcy50eHQKKy4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2QvTmFtZWRTZXF1ZW5jZXMudHh0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CmluZGV4IGQ3ZDY5N2QuLjQ0NGMyMDggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CkBAIC0yNzcsNiArMjc3LDIwIEBACiAgICAgICAgLi4uCiAgICAgQXR0cmlidXRlRXJyb3I6IG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdvbGRfbWV0aG9kJwogCitVc2luZyBhIHNwZWNpZmljYXRpb24gYWxzbyBlbmFibGVzIGEgc21hcnRlciBtYXRjaGluZyBvZiBjYWxscyBtYWRlIHRvIHRoZQorbW9jaywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHNvbWUgcGFyYW1ldGVycyB3ZXJlIHBhc3NlZCBhcyBwb3NpdGlvbmFsIG9yCituYW1lZCBhcmd1bWVudHM6OgorCisgICA+Pj4gZGVmIGYoYSwgYiwgYyk6IHBhc3MKKyAgIC4uLgorICAgPj4+IG1vY2sgPSBNb2NrKHNwZWM9ZikKKyAgID4+PiBtb2NrKDEsIDIsIDMpCisgICA8TW9jayBuYW1lPSdtb2NrKCknIGlkPScxNDAxNjE1ODA0NTY1NzYnPgorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisKK0lmIHlvdSB3YW50IHRoaXMgc21hcnRlciBtYXRjaGluZyB0byBhbHNvIHdvcmsgd2l0aCBtZXRob2QgY2FsbHMgb24gdGhlIG1vY2ssCit5b3UgY2FuIHVzZSA6cmVmOmBhdXRvLXNwZWNjaW5nIDxhdXRvLXNwZWNjaW5nPmAuCisKIElmIHlvdSB3YW50IGEgc3Ryb25nZXIgZm9ybSBvZiBzcGVjaWZpY2F0aW9uIHRoYXQgcHJldmVudHMgdGhlIHNldHRpbmcKIG9mIGFyYml0cmFyeSBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgdGhlIGdldHRpbmcgb2YgdGhlbSB0aGVuIHlvdSBjYW4gdXNlCiBgc3BlY19zZXRgIGluc3RlYWQgb2YgYHNwZWNgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay5yc3QgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdAppbmRleCA5NDk0ODYxLi5kN2VmY2Y0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdApAQCAtMjY0LDcgKzI2NCw2IEBACiAgICAgICAgICAgICA8TW9jayBuYW1lPSdtb2NrLm1ldGhvZCgpJyBpZD0nLi4uJz4KICAgICAgICAgICAgID4+PiBtb2NrLm1ldGhvZC5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMywgdGVzdD0nd293JykKIAotCiAgICAgLi4gbWV0aG9kOjogYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgICAgQXNzZXJ0IHRoYXQgdGhlIG1vY2sgd2FzIGNhbGxlZCBleGFjdGx5IG9uY2UgYW5kIHdpdGggdGhlIHNwZWNpZmllZApAQCAtNjg1LDYgKzY4NCwyNyBAQAogICAgICAgLi4uCiAgICAgS2V5RXJyb3IKIAorQSBjYWxsYWJsZSBtb2NrIHdoaWNoIHdhcyBjcmVhdGVkIHdpdGggYSAqc3BlYyogKG9yIGEgKnNwZWNfc2V0Kikgd2lsbAoraW50cm9zcGVjdCB0aGUgc3BlY2lmaWNhdGlvbiBvYmplY3QncyBzaWduYXR1cmUgd2hlbiBtYXRjaGluZyBjYWxscyB0bwordGhlIG1vY2suICBUaGVyZWZvcmUsIGl0IGNhbiBtYXRjaCB0aGUgYWN0dWFsIGNhbGwncyBhcmd1bWVudHMgcmVnYXJkbGVzcworb2Ygd2hldGhlciB0aGV5IHdlcmUgcGFzc2VkIHBvc2l0aW9uYWxseSBvciBieSBuYW1lOjoKKworICAgPj4+IGRlZiBmKGEsIGIsIGMpOiBwYXNzCisgICAuLi4KKyAgID4+PiBtb2NrID0gTW9jayhzcGVjPWYpCisgICA+Pj4gbW9jaygxLCAyLCBjPTMpCisgICA8TW9jayBuYW1lPSdtb2NrKCknIGlkPScxNDAxNjE1ODA0NTY1NzYnPgorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMpCisgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKworVGhpcyBhcHBsaWVzIHRvIDptZXRoOmB+TW9jay5hc3NlcnRfY2FsbGVkX3dpdGhgLAorOm1ldGg6YH5Nb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoYCwgOm1ldGg6YH5Nb2NrLmFzc2VydF9oYXNfY2FsbHNgIGFuZAorOm1ldGg6YH5Nb2NrLmFzc2VydF9hbnlfY2FsbGAuICBXaGVuIDpyZWY6YGF1dG8tc3BlY2NpbmdgLCBpdCB3aWxsIGFsc28KK2FwcGx5IHRvIG1ldGhvZCBjYWxscyBvbiB0aGUgbW9jayBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzaWduYXR1cmUgaW50cm9zcGVjdGlvbiBvbiBzcGVjY2VkIGFuZCBhdXRvc3BlY2NlZCBtb2NrIG9iamVjdHMuCisKIAogLi4gY2xhc3M6OiBQcm9wZXJ0eU1vY2soKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0xOTY5LDggKzE5ODksMTMgQEAKICAgICBkZWZhdWx0KSB0aGVuIGEgYE1hZ2ljTW9ja2Agd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UsIHdpdGggdGhlIEFQSSBsaW1pdGVkCiAgICAgdG8gbWV0aG9kcyBvciBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBvbiBzdGFuZGFyZCBmaWxlIGhhbmRsZXMuCiAKLSAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIGB+aW8uSU9CYXNlLnJlYWRgIG1ldGhvZCBvZiB0aGUgZmlsZSBoYW5kbGUKLSAgICB0byByZXR1cm4uICBUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgorICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGAsCisgICAgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVgLCBhbmQgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVzYCBtZXRob2RzCisgICAgb2YgdGhlIGZpbGUgaGFuZGxlIHRvIHJldHVybi4gIENhbGxzIHRvIHRob3NlIG1ldGhvZHMgd2lsbCB0YWtlIGRhdGEgZnJvbQorICAgIGByZWFkX2RhdGFgIHVudGlsIGl0IGlzIGRlcGxldGVkLiAgVGhlIG1vY2sgb2YgdGhlc2UgbWV0aG9kcyBpcyBwcmV0dHkKKyAgICBzaW1wbGlzdGljLiAgSWYgeW91IG5lZWQgbW9yZSBjb250cm9sIG92ZXIgdGhlIGRhdGEgdGhhdCB5b3UgYXJlIGZlZWRpbmcgdG8KKyAgICB0aGUgdGVzdGVkIGNvZGUgeW91IHdpbGwgbmVlZCB0byBjdXN0b21pemUgdGhpcyBtb2NrIGZvciB5b3Vyc2VsZi4KKyAgICBgcmVhZF9kYXRhYCBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4KIAogVXNpbmcgYG9wZW5gIGFzIGEgY29udGV4dCBtYW5hZ2VyIGlzIGEgZ3JlYXQgd2F5IHRvIGVuc3VyZSB5b3VyIGZpbGUgaGFuZGxlcwogYXJlIGNsb3NlZCBwcm9wZXJseSBhbmQgaXMgYmVjb21pbmcgY29tbW9uOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdAppbmRleCA1MTU3YjI2Li5jMTNmOWNhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CkBAIC01NjMsNiArNTYzLDY4IEBACiBTa2lwcGVkIGNsYXNzZXMgd2lsbCBub3QgaGF2ZSA6bWV0aDpgc2V0VXBDbGFzc2Agb3IgOm1ldGg6YHRlYXJEb3duQ2xhc3NgIHJ1bi4KIAogCisuLiBfc3VidGVzdHM6CisKK0Rpc3Rpbmd1aXNoaW5nIHRlc3QgaXRlcmF0aW9ucyB1c2luZyBzdWJ0ZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitXaGVuIHNvbWUgb2YgeW91ciB0ZXN0cyBkaWZmZXIgb25seSBieSBhIHNvbWUgdmVyeSBzbWFsbCBkaWZmZXJlbmNlcywgZm9yCitpbnN0YW5jZSBzb21lIHBhcmFtZXRlcnMsIHVuaXR0ZXN0IGFsbG93cyB5b3UgdG8gZGlzdGluZ3Vpc2ggdGhlbSBpbnNpZGUKK3RoZSBib2R5IG9mIGEgdGVzdCBtZXRob2QgdXNpbmcgdGhlIDptZXRoOmB+VGVzdENhc2Uuc3ViVGVzdGAgY29udGV4dCBtYW5hZ2VyLgorCitGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0ZXN0OjoKKworICAgY2xhc3MgTnVtYmVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgZGVmIHRlc3RfZXZlbihzZWxmKToKKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIFRlc3QgdGhhdCBudW1iZXJzIGJldHdlZW4gMCBhbmQgNSBhcmUgYWxsIGV2ZW4uCisgICAgICAgICAgICIiIgorICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCA2KToKKyAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9aSk6CisgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKword2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjoKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkgKGk9MSkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KSAoaT0zKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpIChpPTUpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworV2l0aG91dCB1c2luZyBhIHN1YnRlc3QsIGV4ZWN1dGlvbiB3b3VsZCBzdG9wIGFmdGVyIHRoZSBmaXJzdCBmYWlsdXJlLAorYW5kIHRoZSBlcnJvciB3b3VsZCBiZSBsZXNzIGVhc3kgdG8gZGlhZ25vc2UgYmVjYXVzZSB0aGUgdmFsdWUgb2YgYGBpYGAKK3dvdWxkbid0IGJlIGRpc3BsYXllZDo6CisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworCiAuLiBfdW5pdHRlc3QtY29udGVudHM6CiAKIENsYXNzZXMgYW5kIGZ1bmN0aW9ucwpAQCAtNjc2LDYgKzczOCwyMSBAQAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorICAgLi4gbWV0aG9kOjogc3ViVGVzdChtc2c9Tm9uZSwgKipwYXJhbXMpCisKKyAgICAgIFJldHVybiBhIGNvbnRleHQgbWFuYWdlciB3aGljaCBleGVjdXRlcyB0aGUgZW5jbG9zZWQgY29kZSBibG9jayBhcyBhCisgICAgICBzdWJ0ZXN0LiAgKm1zZyogYW5kICpwYXJhbXMqIGFyZSBvcHRpb25hbCwgYXJiaXRyYXJ5IHZhbHVlcyB3aGljaCBhcmUKKyAgICAgIGRpc3BsYXllZCB3aGVuZXZlciBhIHN1YnRlc3QgZmFpbHMsIGFsbG93aW5nIHlvdSB0byBpZGVudGlmeSB0aGVtCisgICAgICBjbGVhcmx5LgorCisgICAgICBBIHRlc3QgY2FzZSBjYW4gY29udGFpbiBhbnkgbnVtYmVyIG9mIHN1YnRlc3QgZGVjbGFyYXRpb25zLCBhbmQKKyAgICAgIHRoZXkgY2FuIGJlIGFyYml0cmFyaWx5IG5lc3RlZC4KKworICAgICAgU2VlIDpyZWY6YHN1YnRlc3RzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogICAgLi4gbWV0aG9kOjogZGVidWcoKQogCiAgICAgICBSdW4gdGhlIHRlc3Qgd2l0aG91dCBjb2xsZWN0aW5nIHRoZSByZXN1bHQuICBUaGlzIGFsbG93cyBleGNlcHRpb25zIHJhaXNlZApAQCAtODA2LDggKzg4Myw4IEBACiAKIAogCi0gICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoZWNrIHRoYXQgZXhjZXB0aW9ucyBhbmQgd2FybmluZ3MgYXJlIHJhaXNlZCB1c2luZwotICAgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGVjayB0aGUgcHJvZHVjdGlvbiBvZiBleGNlcHRpb25zLCB3YXJuaW5ncyBhbmQKKyAgIGxvZyBtZXNzYWdlcyB1c2luZyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogICAgfCBNZXRob2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2hlY2tzIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmV3IGluICAgICB8CkBAIC04MjQsNiArOTAxLDkgQEAKICAgIHwgOm1ldGg6YGFzc2VydFdhcm5zUmVnZXgod2FybiwgciwgZnVuLCAqYXJncywgKiprd2RzKSAgICB8IGBgZnVuKCphcmdzLCAqKmt3ZHMpYGAgcmFpc2VzICp3YXJuKiB8IDMuMiAgICAgICAgfAogICAgfCA8VGVzdENhc2UuYXNzZXJ0V2FybnNSZWdleD5gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5kIHRoZSBtZXNzYWdlIG1hdGNoZXMgcmVnZXggKnIqICAgIHwgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgIHwgOm1ldGg6YGFzc2VydExvZ3MobG9nZ2VyLCBsZXZlbClgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSBgYHdpdGhgYCBibG9jayBsb2dzIG9uICpsb2dnZXIqICB8IDMuNCAgICAgICAgfAorICAgfCA8VGVzdENhc2UuYXNzZXJ0V2FybnM+YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2l0aCBtaW5pbXVtICpsZXZlbCogICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKIAogICAgLi4gbWV0aG9kOjogYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbiwgY2FsbGFibGUsICphcmdzLCAqKmt3ZHMpCiAgICAgICAgICAgICAgICBhc3NlcnRSYWlzZXMoZXhjZXB0aW9uLCBtc2c9Tm9uZSkKQEAgLTk1NCw2ICsxMDM0LDQ3IEBACiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgICAgQWRkZWQgdGhlICptc2cqIGtleXdvcmQgYXJndW1lbnQgd2hlbiB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLgogCisgICAuLiBtZXRob2Q6OiBhc3NlcnRMb2dzKGxvZ2dlcj1Ob25lLCBsZXZlbD1Ob25lKQorCisgICAgICBBIGNvbnRleHQgbWFuYWdlciB0byB0ZXN0IHRoYXQgYXQgbGVhc3Qgb25lIG1lc3NhZ2UgaXMgbG9nZ2VkIG9uCisgICAgICB0aGUgKmxvZ2dlciogb3Igb25lIG9mIGl0cyBjaGlsZHJlbiwgd2l0aCBhdCBsZWFzdCB0aGUgZ2l2ZW4KKyAgICAgICpsZXZlbCouCisKKyAgICAgIElmIGdpdmVuLCAqbG9nZ2VyKiBzaG91bGQgYmUgYSA6Y2xhc3M6YGxvZ2dpbmcuTG9nZ2VyYCBvYmplY3Qgb3IgYQorICAgICAgOmNsYXNzOmBzdHJgIGdpdmluZyB0aGUgbmFtZSBvZiBhIGxvZ2dlci4gIFRoZSBkZWZhdWx0IGlzIHRoZSByb290CisgICAgICBsb2dnZXIsIHdoaWNoIHdpbGwgY2F0Y2ggYWxsIG1lc3NhZ2VzLgorCisgICAgICBJZiBnaXZlbiwgKmxldmVsKiBzaG91bGQgYmUgZWl0aGVyIGEgbnVtZXJpYyBsb2dnaW5nIGxldmVsIG9yCisgICAgICBpdHMgc3RyaW5nIGVxdWl2YWxlbnQgKGZvciBleGFtcGxlIGVpdGhlciBgYCJFUlJPUiJgYCBvcgorICAgICAgOmF0dHI6YGxvZ2dpbmcuRVJST1JgKS4gIFRoZSBkZWZhdWx0IGlzIDphdHRyOmBsb2dnaW5nLklORk9gLgorCisgICAgICBUaGUgdGVzdCBwYXNzZXMgaWYgYXQgbGVhc3Qgb25lIG1lc3NhZ2UgZW1pdHRlZCBpbnNpZGUgdGhlIGBgd2l0aGBgCisgICAgICBibG9jayBtYXRjaGVzIHRoZSAqbG9nZ2VyKiBhbmQgKmxldmVsKiBjb25kaXRpb25zLCBvdGhlcndpc2UgaXQgZmFpbHMuCisKKyAgICAgIFRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGNvbnRleHQgbWFuYWdlciBpcyBhIHJlY29yZGluZyBoZWxwZXIKKyAgICAgIHdoaWNoIGtlZXBzIHRyYWNrcyBvZiB0aGUgbWF0Y2hpbmcgbG9nIG1lc3NhZ2VzLiAgSXQgaGFzIHR3bworICAgICAgYXR0cmlidXRlczoKKworICAgICAgLi4gYXR0cmlidXRlOjogcmVjb3JkcworCisgICAgICAgICBBIGxpc3Qgb2YgOmNsYXNzOmBsb2dnaW5nLkxvZ1JlY29yZGAgb2JqZWN0cyBvZiB0aGUgbWF0Y2hpbmcKKyAgICAgICAgIGxvZyBtZXNzYWdlcy4KKworICAgICAgLi4gYXR0cmlidXRlOjogb3V0cHV0CisKKyAgICAgICAgIEEgbGlzdCBvZiA6Y2xhc3M6YHN0cmAgb2JqZWN0cyB3aXRoIHRoZSBmb3JtYXR0ZWQgb3V0cHV0IG9mCisgICAgICAgICBtYXRjaGluZyBtZXNzYWdlcy4KKworICAgICAgRXhhbXBsZTo6CisKKyAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdmb28nLCBsZXZlbD0nSU5GTycpIGFzIGNtOgorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpLmluZm8oJ2ZpcnN0IG1lc3NhZ2UnKQorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKS5lcnJvcignc2Vjb25kIG1lc3NhZ2UnKQorICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKICAgIFRoZXJlIGFyZSBhbHNvIG90aGVyIG1ldGhvZHMgdXNlZCB0byBwZXJmb3JtIG1vcmUgc3BlY2lmaWMgY2hlY2tzLCBzdWNoIGFzOgogCkBAIC0xMzkzLDE1ICsxNTE0LDI0IEBACiAKICAgICAgIFRlc3RzIGdyb3VwZWQgYnkgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgYXJlIGFsd2F5cyBhY2Nlc3NlZCBieSBpdGVyYXRpb24uCiAgICAgICBTdWJjbGFzc2VzIGNhbiBsYXppbHkgcHJvdmlkZSB0ZXN0cyBieSBvdmVycmlkaW5nIDptZXRoOmBfX2l0ZXJfX2AuIE5vdGUKLSAgICAgIHRoYXQgdGhpcyBtZXRob2QgbWF5YmUgY2FsbGVkIHNldmVyYWwgdGltZXMgb24gYSBzaW5nbGUgc3VpdGUKLSAgICAgIChmb3IgZXhhbXBsZSB3aGVuIGNvdW50aW5nIHRlc3RzIG9yIGNvbXBhcmluZyBmb3IgZXF1YWxpdHkpCi0gICAgICBzbyB0aGUgdGVzdHMgcmV0dXJuZWQgbXVzdCBiZSB0aGUgc2FtZSBmb3IgcmVwZWF0ZWQgaXRlcmF0aW9ucy4KKyAgICAgIHRoYXQgdGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIG9uIGEgc2luZ2xlIHN1aXRlIChmb3IKKyAgICAgIGV4YW1wbGUgd2hlbiBjb3VudGluZyB0ZXN0cyBvciBjb21wYXJpbmcgZm9yIGVxdWFsaXR5KSBzbyB0aGUgdGVzdHMKKyAgICAgIHJldHVybmVkIGJ5IHJlcGVhdGVkIGl0ZXJhdGlvbnMgYmVmb3JlIDptZXRoOmBUZXN0U3VpdGUucnVuYCBtdXN0IGJlIHRoZQorICAgICAgc2FtZSBmb3IgZWFjaCBjYWxsIGl0ZXJhdGlvbi4gQWZ0ZXIgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gLCBjYWxsZXJzIHNob3VsZAorICAgICAgbm90IHJlbHkgb24gdGhlIHRlc3RzIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kIHVubGVzcyB0aGUgY2FsbGVyIHVzZXMgYQorICAgICAgc3ViY2xhc3MgdGhhdCBvdmVycmlkZXMgOm1ldGg6YFRlc3RTdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXhgIHRvIHByZXNlcnZlCisgICAgICB0ZXN0IHJlZmVyZW5jZXMuCiAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAgICBJbiBlYXJsaWVyIHZlcnNpb25zIHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAgYWNjZXNzZWQgdGVzdHMgZGlyZWN0bHkgcmF0aGVyCiAgICAgICAgICB0aGFuIHRocm91Z2ggaXRlcmF0aW9uLCBzbyBvdmVycmlkaW5nIDptZXRoOmBfX2l0ZXJfX2Agd2Fzbid0IHN1ZmZpY2llbnQKICAgICAgICAgIGZvciBwcm92aWRpbmcgdGVzdHMuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBJbiBlYXJsaWVyIHZlcnNpb25zIHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAgaGVsZCByZWZlcmVuY2VzIHRvIGVhY2gKKyAgICAgICAgIDpjbGFzczpgVGVzdENhc2VgIGFmdGVyIDptZXRoOmBUZXN0U3VpdGUucnVuYC4gU3ViY2xhc3NlcyBjYW4gcmVzdG9yZQorICAgICAgICAgdGhhdCBiZWhhdmlvciBieSBvdmVycmlkaW5nIDptZXRoOmBUZXN0U3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4YC4KKwogICAgSW4gdGhlIHR5cGljYWwgdXNhZ2Ugb2YgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgb2JqZWN0LCB0aGUgOm1ldGg6YHJ1bmAgbWV0aG9kCiAgICBpcyBpbnZva2VkIGJ5IGEgOmNsYXNzOmBUZXN0UnVubmVyYCByYXRoZXIgdGhhbiBieSB0aGUgZW5kLXVzZXIgdGVzdCBoYXJuZXNzLgogCkBAIC0xNTAwLDcgKzE2MzAsOSBAQAogICAgICAgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkuCiAKICAgICAgIElmIGltcG9ydGluZyBhIG1vZHVsZSBmYWlscywgZm9yIGV4YW1wbGUgZHVlIHRvIGEgc3ludGF4IGVycm9yLCB0aGVuIHRoaXMKLSAgICAgIHdpbGwgYmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgZXJyb3IgYW5kIGRpc2NvdmVyeSB3aWxsIGNvbnRpbnVlLgorICAgICAgd2lsbCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBlcnJvciBhbmQgZGlzY292ZXJ5IHdpbGwgY29udGludWUuICBJZiB0aGUKKyAgICAgIGltcG9ydCBmYWlsdXJlIGlzIGR1ZSB0byA6ZXhjOmBTa2lwVGVzdGAgYmVpbmcgcmFpc2VkLCBpdCB3aWxsIGJlIHJlY29yZGVkCisgICAgICBhcyBhIHNraXAgaW5zdGVhZCBvZiBhbiBlcnJvci4KIAogICAgICAgSWYgYSB0ZXN0IHBhY2thZ2UgbmFtZSAoZGlyZWN0b3J5IHdpdGggOmZpbGU6YF9faW5pdF9fLnB5YCkgbWF0Y2hlcyB0aGUKICAgICAgIHBhdHRlcm4gdGhlbiB0aGUgcGFja2FnZSB3aWxsIGJlIGNoZWNrZWQgZm9yIGEgYGBsb2FkX3Rlc3RzYGAKQEAgLTE1MTksNiArMTY1MSwxNSBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIE1vZHVsZXMgdGhhdCByYWlzZSA6ZXhjOmBTa2lwVGVzdGAgb24gaW1wb3J0IGFyZSByZWNvcmRlZCBhcyBza2lwcywKKyAgICAgICAgIG5vdCBlcnJvcnMuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBQYXRocyBhcmUgc29ydGVkIGJlZm9yZSBiZWluZyBpbXBvcnRlZCB0byBlbnN1cmUgZXhlY3V0aW9uIG9yZGVyIGZvciBhCisgICAgICAgICBnaXZlbiB0ZXN0IHN1aXRlIGlzIHRoZSBzYW1lIGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0ncyBvcmRlcmluZworICAgICAgICAgaXMgbm90IGRlcGVuZGVudCBvbiBmaWxlIG5hbWUgbGlrZSBpbiBleHQzLzQuCisKIAogICAgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG9mIGEgOmNsYXNzOmBUZXN0TG9hZGVyYCBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgYnkKICAgIHN1YmNsYXNzaW5nIG9yIGFzc2lnbm1lbnQgb24gYW4gaW5zdGFuY2U6CkBAIC0xNzI4LDYgKzE4NjksMjIgQEAKICAgICAgIDphdHRyOmB1bmV4cGVjdGVkU3VjY2Vzc2VzYCBhdHRyaWJ1dGUuCiAKIAorICAgLi4gbWV0aG9kOjogYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBvdXRjb21lKQorCisgICAgICBDYWxsZWQgd2hlbiBhIHN1YnRlc3QgZmluaXNoZXMuICAqdGVzdCogaXMgdGhlIHRlc3QgY2FzZQorICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgdGVzdCBtZXRob2QuICAqc3VidGVzdCogaXMgYSBjdXN0b20KKyAgICAgIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIHN1YnRlc3QuCisKKyAgICAgIElmICpvdXRjb21lKiBpcyA6Y29uc3Q6YE5vbmVgLCB0aGUgc3VidGVzdCBzdWNjZWVkZWQuICBPdGhlcndpc2UsCisgICAgICBpdCBmYWlsZWQgd2l0aCBhbiBleGNlcHRpb24gd2hlcmUgKm91dGNvbWUqIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0KKyAgICAgIHJldHVybmVkIGJ5IDpmdW5jOmBzeXMuZXhjX2luZm9gOiBgYCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKWBgLgorCisgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgd2hlbiB0aGUgb3V0Y29tZSBpcyBhCisgICAgICBzdWNjZXNzLCBhbmQgcmVjb3JkcyBzdWJ0ZXN0IGZhaWx1cmVzIGFzIG5vcm1hbCBmYWlsdXJlcy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gY2xhc3M6OiBUZXh0VGVzdFJlc3VsdChzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5KQogCiAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgVGVzdFJlc3VsdGAgdXNlZCBieSB0aGUKQEAgLTE4MzcsNiArMTk5NCwxMCBAQAogICAgICAgVGhlICp2ZXJib3NpdHkqLCAqZmFpbGZhc3QqLCAqY2F0Y2hicmVhayosICpidWZmZXIqCiAgICAgICBhbmQgKndhcm5pbmdzKiBwYXJhbWV0ZXJzIHdlcmUgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgKmRlZmF1bHRUZXN0KiBwYXJhbWV0ZXIgd2FzIGNoYW5nZWQgdG8gYWxzbyBhY2NlcHQgYW4gaXRlcmFibGUgb2YKKyAgICAgIHRlc3QgbmFtZXMuCisKIAogbG9hZF90ZXN0cyBQcm90b2NvbAogIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QKaW5kZXggMjVjMTNiZC4uOWZiNThmNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0CkBAIC00Niw2ICs0NiwxMyBAQAogCiAgICAgICBUaGlzIGlzIHVzdWFsbHkgYSBzdHJpbmcgZXhwbGFpbmluZyB0aGUgcmVhc29uIGZvciB0aGlzIGVycm9yLgogCisgICAuLiBhdHRyaWJ1dGU6OiBoZWFkZXJzCisKKyAgICAgIFRoZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgZm9yIHRoZSBIVFRQIHJlcXVlc3QgdGhhdCBjYXVzZSB0aGUKKyAgICAgIDpleGM6YEhUVFBFcnJvcmAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBleGNlcHRpb246OiBDb250ZW50VG9vU2hvcnRFcnJvcihtc2csIGNvbnRlbnQpCiAKICAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIHRoZSA6ZnVuYzpgfnVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CmluZGV4IGVhYzIyMmYuLjYxYjc3MzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKQEAgLTIyMCwxMCArMjIwLDE1IEBACiAgICAqbWV0aG9kKiBzaG91bGQgYmUgYSBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgdGhhdAogICAgd2lsbCBiZSB1c2VkIChlLmcuIGBgJ0hFQUQnYGApLiAgSXRzIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUKICAgIDphdHRyOmB+UmVxdWVzdC5tZXRob2RgIGF0dHJpYnV0ZSBhbmQgaXMgdXNlZCBieSA6bWV0aDpgZ2V0X21ldGhvZCgpYC4KKyAgIFN1YmNsYXNzZXMgbWF5IGluZGljYXRlIGEgZGVmYXVsdCBtZXRob2QgYnkgc2V0dGluZyB0aGUKKyAgIDphdHRyOmB+UmVxdWVzdC5tZXRob2RgIGF0dHJpYnV0ZSBpbiB0aGUgY2xhc3MgaXRzZWxmLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgOmF0dHI6YFJlcXVlc3QubWV0aG9kYCBhcmd1bWVudCBpcyBhZGRlZCB0byB0aGUgUmVxdWVzdCBjbGFzcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIERlZmF1bHQgOmF0dHI6YFJlcXVlc3QubWV0aG9kYCBtYXkgYmUgaW5kaWNhdGVkIGF0IHRoZSBjbGFzcyBsZXZlbC4KKwogCiAuLiBjbGFzczo6IE9wZW5lckRpcmVjdG9yKCkKIApAQCAtMzU2LDYgKzM2MSwxMSBAQAogCiAgICBPcGVuIGxvY2FsIGZpbGVzLgogCisuLiBjbGFzczo6IERhdGFIYW5kbGVyKCkKKworICAgT3BlbiBkYXRhIFVSTHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBjbGFzczo6IEZUUEhhbmRsZXIoKQogCkBAIC0zOTEsNiArNDAxLDEyIEBACiAKICAgIFRoZSBvcmlnaW5hbCBVUkwgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKworICAgUmVxdWVzdC5mdWxsX3VybCBpcyBhIHByb3BlcnR5IHdpdGggc2V0dGVyLCBnZXR0ZXIgYW5kIGEgZGVsZXRlci4gR2V0dGluZworICAgOmF0dHI6YH5SZXF1ZXN0LmZ1bGxfdXJsYCByZXR1cm5zIHRoZSBvcmlnaW5hbCByZXF1ZXN0IFVSTCB3aXRoIHRoZQorICAgZnJhZ21lbnQsIGlmIGl0IHdhcyBwcmVzZW50LgorCiAuLiBhdHRyaWJ1dGU6OiBSZXF1ZXN0LnR5cGUKIAogICAgVGhlIFVSSSBzY2hlbWUuCkBAIC00MTMsNiArNDI5LDEwIEBACiAKICAgIFRoZSBlbnRpdHkgYm9keSBmb3IgdGhlIHJlcXVlc3QsIG9yIE5vbmUgaWYgbm90IHNwZWNpZmllZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIENoYW5naW5nIHZhbHVlIG9mIDphdHRyOmBSZXF1ZXN0LmRhdGFgIG5vdyBkZWxldGVzICJDb250ZW50LUxlbmd0aCIKKyAgICAgIGhlYWRlciBpZiBpdCB3YXMgcHJldmlvdXNseSBzZXQgb3IgY2FsY3VsYXRlZC4KKwogLi4gYXR0cmlidXRlOjogUmVxdWVzdC51bnZlcmlmaWFibGUKIAogICAgYm9vbGVhbiwgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgdW52ZXJpZmlhYmxlIGFzIGRlZmluZWQKQEAgLTQ2MSwxMCArNDgxLDIyIEBACiAgICB1bnJlZGlyZWN0ZWQpLgogCiAKKy4uIG1ldGhvZDo6IFJlcXVlc3QucmVtb3ZlX2hlYWRlcihoZWFkZXIpCisKKyAgIFJlbW92ZSBuYW1lZCBoZWFkZXIgZnJvbSB0aGUgcmVxdWVzdCBpbnN0YW5jZSAoYm90aCBmcm9tIHJlZ3VsYXIgYW5kCisgICB1bnJlZGlyZWN0ZWQgaGVhZGVycykuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2Z1bGxfdXJsKCkKIAogICAgUmV0dXJuIHRoZSBVUkwgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorCisgICBSZXR1cm5zIDphdHRyOmBSZXF1ZXN0LmZ1bGxfdXJsYAorCiAKIC4uIG1ldGhvZDo6IFJlcXVlc3Quc2V0X3Byb3h5KGhvc3QsIHR5cGUpCiAKQEAgLTQ3Myw1NCArNTA1LDYgQEAKICAgIFVSTCBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3IuCiAKIAotLi4gbWV0aG9kOjogUmVxdWVzdC5hZGRfZGF0YShkYXRhKQotCi0gICBTZXQgdGhlIDpjbGFzczpgUmVxdWVzdGAgZGF0YSB0byAqZGF0YSouICBUaGlzIGlzIGlnbm9yZWQgYnkgYWxsIGhhbmRsZXJzIGV4Y2VwdAotICAgSFRUUCBoYW5kbGVycyAtLS0gYW5kIHRoZXJlIGl0IHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nLCBhbmQgd2lsbCBjaGFuZ2UgdGhlCi0gICByZXF1ZXN0IHRvIGJlIGBgUE9TVGBgIHJhdGhlciB0aGFuIGBgR0VUYGAuICBEZXByZWNhdGVkIGluIDMuMywgdXNlCi0gICA6YXR0cjpgUmVxdWVzdC5kYXRhYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuaGFzX2RhdGEoKQotCi0gICBSZXR1cm4gd2hldGhlciB0aGUgaW5zdGFuY2UgaGFzIGEgbm9uLVwgYGBOb25lYGAgZGF0YS4gRGVwcmVjYXRlZCBpbiAzLjMsCi0gICB1c2UgOmF0dHI6YFJlcXVlc3QuZGF0YWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9kYXRhKCkKLQotICAgUmV0dXJuIHRoZSBpbnN0YW5jZSdzIGRhdGEuICBEZXByZWNhdGVkIGluIDMuMywgdXNlIDphdHRyOmBSZXF1ZXN0LmRhdGFgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfdHlwZSgpCi0KLSAgIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgVVJMIC0tLSBhbHNvIGtub3duIGFzIHRoZSBzY2hlbWUuICBEZXByZWNhdGVkIGluIDMuMywKLSAgIHVzZSA6YXR0cjpgUmVxdWVzdC50eXBlYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2hvc3QoKQotCi0gICBSZXR1cm4gdGhlIGhvc3QgdG8gd2hpY2ggYSBjb25uZWN0aW9uIHdpbGwgYmUgbWFkZS4gRGVwcmVjYXRlZCBpbiAzLjMsIHVzZQotICAgOmF0dHI6YFJlcXVlc3QuaG9zdGAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9zZWxlY3RvcigpCi0KLSAgIFJldHVybiB0aGUgc2VsZWN0b3IgLS0tIHRoZSBwYXJ0IG9mIHRoZSBVUkwgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuCi0gICBEZXByZWNhdGVkIGluIDMuMywgdXNlIDphdHRyOmBSZXF1ZXN0LnNlbGVjdG9yYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCiAuLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9oZWFkZXIoaGVhZGVyX25hbWUsIGRlZmF1bHQ9Tm9uZSkKIAogICAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gaGVhZGVyLiBJZiB0aGUgaGVhZGVyIGlzIG5vdCBwcmVzZW50LCByZXR1cm4KQEAgLTUzMSwyNiArNTE1LDEwIEBACiAKICAgIFJldHVybiBhIGxpc3Qgb2YgdHVwbGVzIChoZWFkZXJfbmFtZSwgaGVhZGVyX3ZhbHVlKSBvZiB0aGUgUmVxdWVzdCBoZWFkZXJzLgogCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3Quc2V0X3Byb3h5KGhvc3QsIHR5cGUpCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X29yaWdpbl9yZXFfaG9zdCgpCi0KLSAgIFJldHVybiB0aGUgcmVxdWVzdC1ob3N0IG9mIHRoZSBvcmlnaW4gdHJhbnNhY3Rpb24sIGFzIGRlZmluZWQgYnkKLSAgIDpyZmM6YDI5NjVgLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBjb25zdHJ1Y3Rvci4KLSAgIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UgOmF0dHI6YFJlcXVlc3Qub3JpZ2luX3JlcV9ob3N0YC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuaXNfdW52ZXJpZmlhYmxlKCkKLQotICAgUmV0dXJuIHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgdW52ZXJpZmlhYmxlLCBhcyBkZWZpbmVkIGJ5IFJGQyAyOTY1LiBTZWUgdGhlCi0gICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBjb25zdHJ1Y3Rvci4gIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UKLSAgIDphdHRyOmBSZXF1ZXN0LnVudmVyaWZpYWJsZWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgUmVxdWVzdCBtZXRob2RzIGFkZF9kYXRhLCBoYXNfZGF0YSwgZ2V0X2RhdGEsIGdldF90eXBlLCBnZXRfaG9zdCwKKyAgZ2V0X3NlbGVjdG9yLCBnZXRfb3JpZ2luX3JlcV9ob3N0IGFuZCBpc191bnZlcmlmaWFibGUgZGVwcmVjYXRlZCBzaW5jZSAzLjMKKyAgaGF2ZSBiZWVuIHJlbW92ZWQuCiAKIC4uIF9vcGVuZXItZGlyZWN0b3Itb2JqZWN0czoKIApAQCAtOTgzLDYgKzk1MSwyMSBAQAogICAgICAgaG9zdG5hbWUgaXMgZ2l2ZW4sIGFuIDpleGM6YH51cmxsaWIuZXJyb3IuVVJMRXJyb3JgIGlzIHJhaXNlZC4KIAogCisuLiBfZGF0YS1oYW5kbGVyLW9iamVjdHM6CisKK0RhdGFIYW5kbGVyIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogRGF0YUhhbmRsZXIuZGF0YV9vcGVuKHJlcSkKKworICAgUmVhZCBhIGRhdGEgVVJMLiBUaGlzIGtpbmQgb2YgVVJMIGNvbnRhaW5zIHRoZSBjb250ZW50IGVuY29kZWQgaW4gdGhlIFVSTAorICAgaXRzZWxmLiBUaGUgZGF0YSBVUkwgc3ludGF4IGlzIHNwZWNpZmllZCBpbiA6cmZjOmAyMzk3YC4gVGhpcyBpbXBsZW1lbnRhdGlvbgorICAgaWdub3JlcyB3aGl0ZSBzcGFjZXMgaW4gYmFzZTY0IGVuY29kZWQgZGF0YSBVUkxzIHNvIHRoZSBVUkwgbWF5IGJlIHdyYXBwZWQKKyAgIGluIHdoYXRldmVyIHNvdXJjZSBmaWxlIGl0IGNvbWVzIGZyb20uIEJ1dCBldmVuIHRob3VnaCBzb21lIGJyb3dzZXJzIGRvbid0CisgICBtaW5kIGFib3V0IGEgbWlzc2luZyBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgYSBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTCwgdGhpcworICAgaW1wbGVtZW50YXRpb24gd2lsbCByYWlzZSBhbiA6ZXhjOmBWYWx1ZUVycm9yYCBpbiB0aGF0IGNhc2UuCisKKwogLi4gX2Z0cC1oYW5kbGVyLW9iamVjdHM6CiAKIEZUUEhhbmRsZXIgT2JqZWN0cwpAQCAtMTM5OCw3ICsxMzgxLDkgQEAKICAgICAgcGFpcjogRlRQOyBwcm90b2NvbAogCiAqIEN1cnJlbnRseSwgb25seSB0aGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBIVFRQICh2ZXJzaW9ucyAwLjkgYW5kCi0gIDEuMCksIEZUUCwgYW5kIGxvY2FsIGZpbGVzLgorICAxLjApLCBGVFAsIGxvY2FsIGZpbGVzLCBhbmQgZGF0YSBVUkxzLgorCisgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IEFkZGVkIHN1cHBvcnQgZm9yIGRhdGEgVVJMcy4KIAogKiBUaGUgY2FjaGluZyBmZWF0dXJlIG9mIDpmdW5jOmB1cmxyZXRyaWV2ZWAgaGFzIGJlZW4gZGlzYWJsZWQgdW50aWwgc29tZW9uZQogICBmaW5kcyB0aGUgdGltZSB0byBoYWNrIHByb3BlciBwcm9jZXNzaW5nIG9mIEV4cGlyYXRpb24gdGltZSBoZWFkZXJzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdmVudi5yc3QgYi9Eb2MvbGlicmFyeS92ZW52LnJzdAppbmRleCAyZGQyMWU1Li4wNDJlZDhlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS92ZW52LnJzdAorKysgYi9Eb2MvbGlicmFyeS92ZW52LnJzdApAQCAtOTMsOCArOTMsOCBAQAogICAgICogYGBzeXN0ZW1fc2l0ZV9wYWNrYWdlc2BgIC0tIGEgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHN5c3RlbSBQeXRob24KICAgICAgIHNpdGUtcGFja2FnZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSB0byB0aGUgZW52aXJvbm1lbnQgKGRlZmF1bHRzIHRvIGBgRmFsc2VgYCkuCiAKLSAgICAqIGBgY2xlYXJgYCAtLSBhIEJvb2xlYW4gdmFsdWUgd2hpY2gsIGlmIFRydWUsIHdpbGwgZGVsZXRlIGFueSBleGlzdGluZyB0YXJnZXQKLSAgICAgIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXhjZXB0aW9uIChkZWZhdWx0cyB0byBgYEZhbHNlYGApLgorICAgICogYGBjbGVhcmBgIC0tIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCwgaWYgVHJ1ZSwgd2lsbCBkZWxldGUgdGhlIGNvbnRlbnRzIG9mCisgICAgICBhbnkgZXhpc3RpbmcgdGFyZ2V0IGRpcmVjdG9yeSwgYmVmb3JlIGNyZWF0aW5nIHRoZSBlbnZpcm9ubWVudC4KIAogICAgICogYGBzeW1saW5rc2BgIC0tIGEgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXR0ZW1wdCB0byBzeW1saW5rIHRoZQogICAgICAgUHl0aG9uIGJpbmFyeSAoYW5kIGFueSBuZWNlc3NhcnkgRExMcyBvciBvdGhlciBiaW5hcmllcywKQEAgLTEwNiw3ICsxMDYsNiBAQAogICAgICAgdXBncmFkZWQgaW4tcGxhY2UgKGRlZmF1bHRzIHRvIGBgRmFsc2VgYCkuCiAKIAotCiAgICAgQ3JlYXRvcnMgb2YgdGhpcmQtcGFydHkgdmlydHVhbCBlbnZpcm9ubWVudCB0b29scyB3aWxsIGJlIGZyZWUgdG8gdXNlIHRoZQogICAgIHByb3ZpZGVkIGBgRW52QnVpbGRlcmBgIGNsYXNzIGFzIGEgYmFzZSBjbGFzcy4KIApAQCAtMTg4LDYgKzE4Nyw5IEBACiAgICAgICAgICogYGBfX1ZFTlZfTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQgbmFtZSAoZmluYWwgcGF0aAogICAgICAgICAgIHNlZ21lbnQgb2YgZW52aXJvbm1lbnQgZGlyZWN0b3J5KS4KIAorICAgICAgICAqIGBgX19WRU5WX1BST01QVF9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcHJvbXB0ICh0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICBuYW1lIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgYW5kIHdpdGggYSBmb2xsb3dpbmcgc3BhY2UpCisKICAgICAgICAgKiBgYF9fVkVOVl9CSU5fTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgYmluIGRpcmVjdG9yeQogICAgICAgICAgIChlaXRoZXIgYGBiaW5gYCBvciBgYFNjcmlwdHNgYCkuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dhdmUucnN0IGIvRG9jL2xpYnJhcnkvd2F2ZS5yc3QKaW5kZXggYWZhZmI0NS4uOWQxMjQ1NSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2F2ZS5yc3QKQEAgLTE5LDI2ICsxOSwzMCBAQAogLi4gZnVuY3Rpb246OiBvcGVuKGZpbGUsIG1vZGU9Tm9uZSkKIAogICAgSWYgKmZpbGUqIGlzIGEgc3RyaW5nLCBvcGVuIHRoZSBmaWxlIGJ5IHRoYXQgbmFtZSwgb3RoZXJ3aXNlIHRyZWF0IGl0IGFzIGEKLSAgIHNlZWthYmxlIGZpbGUtbGlrZSBvYmplY3QuICAqbW9kZSogY2FuIGJlIGFueSBvZgorICAgc2Vla2FibGUgZmlsZS1saWtlIG9iamVjdC4gICptb2RlKiBjYW4gYmU6CiAKLSAgIGBgJ3InYGAsIGBgJ3JiJ2BgCisgICBgYCdyYidgYAogICAgICAgUmVhZCBvbmx5IG1vZGUuCiAKLSAgIGBgJ3cnYGAsIGBgJ3diJ2BgCisgICBgYCd3YidgYAogICAgICAgV3JpdGUgb25seSBtb2RlLgogCiAgICBOb3RlIHRoYXQgaXQgZG9lcyBub3QgYWxsb3cgcmVhZC93cml0ZSBXQVYgZmlsZXMuCiAKLSAgIEEgKm1vZGUqIG9mIGBgJ3InYGAgb3IgYGAncmInYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV9yZWFkYCBvYmplY3QsIHdoaWxlIGEKLSAgICptb2RlKiBvZiBgYCd3J2BgIG9yIGBgJ3diJ2BgIHJldHVybnMgYSA6Y2xhc3M6YFdhdmVfd3JpdGVgIG9iamVjdC4gIElmCi0gICAqbW9kZSogaXMgb21pdHRlZCBhbmQgYSBmaWxlLWxpa2Ugb2JqZWN0IGlzIHBhc3NlZCBhcyAqZmlsZSosIGBgZmlsZS5tb2RlYGAKLSAgIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yICptb2RlKiAodGhlIGBgJ2InYGAgZmxhZyBpcyBzdGlsbCBhZGRlZCBpZgotICAgbmVjZXNzYXJ5KS4KKyAgIEEgKm1vZGUqIG9mIGBgJ3JiJ2BgIHJldHVybnMgYSA6Y2xhc3M6YFdhdmVfcmVhZGAgb2JqZWN0LCB3aGlsZSBhICptb2RlKiBvZgorICAgYGAnd2InYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV93cml0ZWAgb2JqZWN0LiAgSWYgKm1vZGUqIGlzIG9taXR0ZWQgYW5kIGEKKyAgIGZpbGUtbGlrZSBvYmplY3QgaXMgcGFzc2VkIGFzICpmaWxlKiwgYGBmaWxlLm1vZGVgYCBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0CisgICB2YWx1ZSBmb3IgKm1vZGUqLgogCiAgICBJZiB5b3UgcGFzcyBpbiBhIGZpbGUtbGlrZSBvYmplY3QsIHRoZSB3YXZlIG9iamVjdCB3aWxsIG5vdCBjbG9zZSBpdCB3aGVuIGl0cwogICAgOm1ldGg6YGNsb3NlYCBtZXRob2QgaXMgY2FsbGVkOyBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gY2xvc2UKICAgIHRoZSBmaWxlIG9iamVjdC4KIAorICAgVGhlIDpmdW5jOmAub3BlbmAgZnVuY3Rpb24gbWF5IGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgV2hlbgorICAgdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBjb21wbGV0ZXMsIHRoZSA6bWV0aDpgV2F2ZV9yZWFkLmNsb3NlKCkKKyAgIDx3YXZlLldhdmVfcmVhZC5jbG9zZT5gIG9yIDptZXRoOmBXYXZlX3dyaXRlLmNsb3NlKCkKKyAgIDx3YXZlLldhdmVfd3JpdGUuY2xvc2UoKT5gIG1ldGhvZCBpcyBjYWxsZWQuCisKIAogLi4gZnVuY3Rpb246OiBvcGVuZnAoZmlsZSwgbW9kZSkKIApAQCAtOTgsOCArMTAyLDkgQEAKIAogLi4gbWV0aG9kOjogV2F2ZV9yZWFkLmdldHBhcmFtcygpCiAKLSAgIFJldHVybnMgYSB0dXBsZSBgYChuY2hhbm5lbHMsIHNhbXB3aWR0aCwgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwKLSAgIGNvbXBuYW1lKWBgLCBlcXVpdmFsZW50IHRvIG91dHB1dCBvZiB0aGUgOm1ldGg6YGdldFwqYCBtZXRob2RzLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogV2F2ZV9yZWFkLnJlYWRmcmFtZXMobikKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0IGIvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKaW5kZXggMjI0ZjQ0Mi4uZTg0YWMyYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKQEAgLTUxLDEwICs1MSwxNiBAQAogYnV0IGtlZXBzIHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgZWxlbWVudHMsIGp1c3QgbGlrZSBhCiA6Y2xhc3M6YFdlYWtLZXlEaWN0aW9uYXJ5YCBkb2VzLgogCi1Nb3N0IHByb2dyYW1zIHNob3VsZCBmaW5kIHRoYXQgdXNpbmcgb25lIG9mIHRoZXNlIHdlYWsgY29udGFpbmVyIHR5cGVzIGlzIGFsbAotdGhleSBuZWVkIC0tIGl0J3Mgbm90IHVzdWFsbHkgbmVjZXNzYXJ5IHRvIGNyZWF0ZSB5b3VyIG93biB3ZWFrIHJlZmVyZW5jZXMKLWRpcmVjdGx5LiAgVGhlIGxvdy1sZXZlbCBtYWNoaW5lcnkgdXNlZCBieSB0aGUgd2VhayBkaWN0aW9uYXJ5IGltcGxlbWVudGF0aW9ucwotaXMgZXhwb3NlZCBieSB0aGUgOm1vZDpgd2Vha3JlZmAgbW9kdWxlIGZvciB0aGUgYmVuZWZpdCBvZiBhZHZhbmNlZCB1c2VzLgorOmNsYXNzOmBmaW5hbGl6ZWAgcHJvdmlkZXMgYSBzdHJhaWdodCBmb3J3YXJkIHdheSB0byByZWdpc3RlciBhCitjbGVhbnVwIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KK1RoaXMgaXMgc2ltcGxlciB0byB1c2UgdGhhbiBzZXR0aW5nIHVwIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gYSByYXcKK3dlYWsgcmVmZXJlbmNlLCBzaW5jZSB0aGUgbW9kdWxlIGF1dG9tYXRpY2FsbHkgZW5zdXJlcyB0aGF0IHRoZSBmaW5hbGl6ZXIKK3JlbWFpbnMgYWxpdmUgdW50aWwgdGhlIG9iamVjdCBpcyBjb2xsZWN0ZWQuCisKK01vc3QgcHJvZ3JhbXMgc2hvdWxkIGZpbmQgdGhhdCB1c2luZyBvbmUgb2YgdGhlc2Ugd2VhayBjb250YWluZXIgdHlwZXMKK29yIDpjbGFzczpgZmluYWxpemVgIGlzIGFsbCB0aGV5IG5lZWQgLS0gaXQncyBub3QgdXN1YWxseSBuZWNlc3NhcnkgdG8KK2NyZWF0ZSB5b3VyIG93biB3ZWFrIHJlZmVyZW5jZXMgZGlyZWN0bHkuICBUaGUgbG93LWxldmVsIG1hY2hpbmVyeSBpcworZXhwb3NlZCBieSB0aGUgOm1vZDpgd2Vha3JlZmAgbW9kdWxlIGZvciB0aGUgYmVuZWZpdCBvZiBhZHZhbmNlZCB1c2VzLgogCiBOb3QgYWxsIG9iamVjdHMgY2FuIGJlIHdlYWtseSByZWZlcmVuY2VkOyB0aG9zZSBvYmplY3RzIHdoaWNoIGNhbiBpbmNsdWRlIGNsYXNzCiBpbnN0YW5jZXMsIGZ1bmN0aW9ucyB3cml0dGVuIGluIFB5dGhvbiAoYnV0IG5vdCBpbiBDKSwgaW5zdGFuY2UgbWV0aG9kcywgc2V0cywKQEAgLTExMSw2ICsxMTcsMjQgQEAKIAogICAgVGhpcyBpcyBhIHN1YmNsYXNzYWJsZSB0eXBlIHJhdGhlciB0aGFuIGEgZmFjdG9yeSBmdW5jdGlvbi4KIAorICAgLi4gYXR0cmlidXRlOjogX19jYWxsYmFja19fCisKKyAgICAgIFRoaXMgcmVhZC1vbmx5IGF0dHJpYnV0ZSByZXR1cm5zIHRoZSBjYWxsYmFjayBjdXJyZW50bHkgYXNzb2NpYXRlZCB0byB0aGUKKyAgICAgIHdlYWtyZWYuICBJZiB0aGVyZSBpcyBubyBjYWxsYmFjayBvciBpZiB0aGUgcmVmZXJlbnQgb2YgdGhlIHdlYWtyZWYgaXMKKyAgICAgIG5vIGxvbmdlciBhbGl2ZSB0aGVuIHRoaXMgYXR0cmlidXRlIHdpbGwgaGF2ZSB2YWx1ZSBgYE5vbmVgYC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIExpa2UgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIHdlYWsgcmVmZXJlbmNlIGNhbGxiYWNrcyBjYW4gYmUKKyAgICAgIGNhbGxlZCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24gd2hlbiBtb2R1bGUgZ2xvYmFscyBoYXZlIGJlZW4KKyAgICAgIG92ZXJ3cml0dGVuIHdpdGggOmNvbnN0OmBOb25lYC4gIFRoaXMgY2FuIG1ha2Ugd3JpdGluZyByb2J1c3QKKyAgICAgIHdlYWsgcmVmZXJlbmNlIGNhbGxiYWNrcyBhIGNoYWxsZW5nZS4gIENhbGxiYWNrcyByZWdpc3RlcmVkCisgICAgICB1c2luZyA6Y2xhc3M6YGZpbmFsaXplYCBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIGlzc3VlCisgICAgICBiZWNhdXNlIHRoZXkgd2lsbCBub3QgYmUgcnVuIGFmdGVyIG1vZHVsZSB0ZWFyZG93biBoYXMgYmVndW4uCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgOmF0dHI6YF9fY2FsbGJhY2tfX2AgYXR0cmlidXRlLgorCiAKIC4uIGZ1bmN0aW9uOjogcHJveHkob2JqZWN0WywgY2FsbGJhY2tdKQogCkBAIC0xOTIsNiArMjE2LDk4IEBACiAgICBkaXNjYXJkZWQgd2hlbiBubyBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0IGV4aXN0cyBhbnkgbW9yZS4KIAogCisuLiBjbGFzczo6IFdlYWtNZXRob2QobWV0aG9kKQorCisgICBBIGN1c3RvbSA6Y2xhc3M6YHJlZmAgc3ViY2xhc3Mgd2hpY2ggc2ltdWxhdGVzIGEgd2VhayByZWZlcmVuY2UgdG8gYSBib3VuZAorICAgbWV0aG9kIChpLmUuLCBhIG1ldGhvZCBkZWZpbmVkIG9uIGEgY2xhc3MgYW5kIGxvb2tlZCB1cCBvbiBhbiBpbnN0YW5jZSkuCisgICBTaW5jZSBhIGJvdW5kIG1ldGhvZCBpcyBlcGhlbWVyYWwsIGEgc3RhbmRhcmQgd2VhayByZWZlcmVuY2UgY2Fubm90IGtlZXAKKyAgIGhvbGQgb2YgaXQuICA6Y2xhc3M6YFdlYWtNZXRob2RgIGhhcyBzcGVjaWFsIGNvZGUgdG8gcmVjcmVhdGUgdGhlIGJvdW5kCisgICBtZXRob2QgdW50aWwgZWl0aGVyIHRoZSBvYmplY3Qgb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRpZXM6OgorCisgICAgICA+Pj4gY2xhc3MgQzoKKyAgICAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmKToKKyAgICAgIC4uLiAgICAgICAgIHByaW50KCJtZXRob2QgY2FsbGVkISIpCisgICAgICAuLi4KKyAgICAgID4+PiBjID0gQygpCisgICAgICA+Pj4gciA9IHdlYWtyZWYucmVmKGMubWV0aG9kKQorICAgICAgPj4+IHIoKQorICAgICAgPj4+IHIgPSB3ZWFrcmVmLldlYWtNZXRob2QoYy5tZXRob2QpCisgICAgICA+Pj4gcigpCisgICAgICA8Ym91bmQgbWV0aG9kIEMubWV0aG9kIG9mIDxfX21haW5fXy5DIG9iamVjdCBhdCAweDdmYzg1OTgzMDIyMD4+CisgICAgICA+Pj4gcigpKCkKKyAgICAgIG1ldGhvZCBjYWxsZWQhCisgICAgICA+Pj4gZGVsIGMKKyAgICAgID4+PiBnYy5jb2xsZWN0KCkKKyAgICAgIDAKKyAgICAgID4+PiByKCkKKyAgICAgID4+PgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gY2xhc3M6OiBmaW5hbGl6ZShvYmosIGZ1bmMsICphcmdzLCAqKmt3YXJncykKKworICAgUmV0dXJuIGEgY2FsbGFibGUgZmluYWxpemVyIG9iamVjdCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuICpvYmoqCisgICBpcyBnYXJiYWdlIGNvbGxlY3RlZC4gVW5saWtlIGFuIG9yZGluYXJ5IHdlYWsgcmVmZXJlbmNlLCBhIGZpbmFsaXplciBpcworICAgd2lsbCBhbHdheXMgc3Vydml2ZSB1bnRpbCB0aGUgcmVmZXJlbmNlIG9iamVjdCBpcyBjb2xsZWN0ZWQsIGdyZWF0bHkKKyAgIHNpbXBsaWZ5aW5nIGxpZmVjeWNsZSBtYW5hZ2VtZW50LgorCisgICBBIGZpbmFsaXplciBpcyBjb25zaWRlcmVkICphbGl2ZSogdW50aWwgaXQgaXMgY2FsbGVkIChlaXRoZXIgZXhwbGljaXRseQorICAgb3IgYXQgZ2FyYmFnZSBjb2xsZWN0aW9uKSwgYW5kIGFmdGVyIHRoYXQgaXQgaXMgKmRlYWQqLiAgQ2FsbGluZyBhIGxpdmUKKyAgIGZpbmFsaXplciByZXR1cm5zIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBgYGZ1bmMoKmFyZywgKiprd2FyZ3MpYGAsCisgICB3aGVyZWFzIGNhbGxpbmcgYSBkZWFkIGZpbmFsaXplciByZXR1cm5zIDpjb25zdDpgTm9uZWAuCisKKyAgIEV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGZpbmFsaXplciBjYWxsYmFja3MgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgd2lsbCBiZSBzaG93biBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0LCBidXQgY2Fubm90IGJlCisgICBwcm9wYWdhdGVkLiAgVGhleSBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZXhjZXB0aW9ucyByYWlzZWQKKyAgIGZyb20gYW4gb2JqZWN0J3MgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBvciBhIHdlYWsgcmVmZXJlbmNlJ3MKKyAgIGNhbGxiYWNrLgorCisgICBXaGVuIHRoZSBwcm9ncmFtIGV4aXRzLCBlYWNoIHJlbWFpbmluZyBsaXZlIGZpbmFsaXplciBpcyBjYWxsZWQKKyAgIHVubGVzcyBpdHMgOmF0dHI6YGF0ZXhpdGAgYXR0cmlidXRlIGhhcyBiZWVuIHNldCB0byBmYWxzZS4gIFRoZXkKKyAgIGFyZSBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBjcmVhdGlvbi4KKworICAgQSBmaW5hbGl6ZXIgd2lsbCBuZXZlciBpbnZva2UgaXRzIGNhbGxiYWNrIGR1cmluZyB0aGUgbGF0ZXIgcGFydCBvZgorICAgdGhlIGludGVycHJldGVyIHNodXRkb3duIHdoZW4gbW9kdWxlIGdsb2JhbHMgYXJlIGxpYWJsZSB0byBoYXZlCisgICBiZWVuIHJlcGxhY2VkIGJ5IDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIG1ldGhvZDo6IF9fY2FsbF9fKCkKKworICAgICAgSWYgKnNlbGYqIGlzIGFsaXZlIHRoZW4gbWFyayBpdCBhcyBkZWFkIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgY2FsbGluZyBgYGZ1bmMoKmFyZ3MsICoqa3dhcmdzKWBgLiAgSWYgKnNlbGYqIGlzIGRlYWQgdGhlbiByZXR1cm4KKyAgICAgIDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIG1ldGhvZDo6IGRldGFjaCgpCisKKyAgICAgIElmICpzZWxmKiBpcyBhbGl2ZSB0aGVuIG1hcmsgaXQgYXMgZGVhZCBhbmQgcmV0dXJuIHRoZSB0dXBsZQorICAgICAgYGAob2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MpYGAuICBJZiAqc2VsZiogaXMgZGVhZCB0aGVuIHJldHVybgorICAgICAgOmNvbnN0OmBOb25lYC4KKworICAgLi4gbWV0aG9kOjogcGVlaygpCisKKyAgICAgIElmICpzZWxmKiBpcyBhbGl2ZSB0aGVuIHJldHVybiB0aGUgdHVwbGUgYGAob2JqLCBmdW5jLCBhcmdzLAorICAgICAga3dhcmdzKWBgLiAgSWYgKnNlbGYqIGlzIGRlYWQgdGhlbiByZXR1cm4gOmNvbnN0OmBOb25lYC4KKworICAgLi4gYXR0cmlidXRlOjogYWxpdmUKKworICAgICAgUHJvcGVydHkgd2hpY2ggaXMgdHJ1ZSBpZiB0aGUgZmluYWxpemVyIGlzIGFsaXZlLCBmYWxzZSBvdGhlcndpc2UuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGF0ZXhpdAorCisgICAgICBBIHdyaXRhYmxlIGJvb2xlYW4gcHJvcGVydHkgd2hpY2ggYnkgZGVmYXVsdCBpcyB0cnVlLiAgV2hlbiB0aGUKKyAgICAgIHByb2dyYW0gZXhpdHMsIGl0IGNhbGxzIGFsbCByZW1haW5pbmcgbGl2ZSBmaW5hbGl6ZXJzIGZvciB3aGljaAorICAgICAgOmF0dHI6YC5hdGV4aXRgIGlzIHRydWUuICBUaGV5IGFyZSBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciBvZgorICAgICAgY3JlYXRpb24uCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgKmZ1bmMqLCAqYXJncyogYW5kICprd2FyZ3MqIGRvCisgICAgICBub3Qgb3duIGFueSByZWZlcmVuY2VzIHRvICpvYmoqLCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKKyAgICAgIHNpbmNlIG90aGVyd2lzZSAqb2JqKiB3aWxsIG5ldmVyIGJlIGdhcmJhZ2UgY29sbGVjdGVkLiAgSW4KKyAgICAgIHBhcnRpY3VsYXIsICpmdW5jKiBzaG91bGQgbm90IGJlIGEgYm91bmQgbWV0aG9kIG9mICpvYmoqLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBkYXRhOjogUmVmZXJlbmNlVHlwZQogCiAgICBUaGUgdHlwZSBvYmplY3QgZm9yIHdlYWsgcmVmZXJlbmNlcyBvYmplY3RzLgpAQCAtMjMyLDggKzM0OCw5IEBACiBXZWFrIFJlZmVyZW5jZSBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdlYWsgcmVmZXJlbmNlIG9iamVjdHMgaGF2ZSBubyBhdHRyaWJ1dGVzIG9yIG1ldGhvZHMsIGJ1dCBkbyBhbGxvdyB0aGUgcmVmZXJlbnQKLXRvIGJlIG9idGFpbmVkLCBpZiBpdCBzdGlsbCBleGlzdHMsIGJ5IGNhbGxpbmcgaXQ6CitXZWFrIHJlZmVyZW5jZSBvYmplY3RzIGhhdmUgbm8gbWV0aG9kcyBhbmQgbm8gYXR0cmlidXRlcyBiZXNpZGVzCis6YXR0cjpgcmVmLl9fY2FsbGJhY2tfX2AuIEEgd2VhayByZWZlcmVuY2Ugb2JqZWN0IGFsbG93cyB0aGUgcmVmZXJlbnQgdG8gYmUKK29idGFpbmVkLCBpZiBpdCBzdGlsbCBleGlzdHMsIGJ5IGNhbGxpbmcgaXQ6CiAKICAgID4+PiBpbXBvcnQgd2Vha3JlZgogICAgPj4+IGNsYXNzIE9iamVjdDoKQEAgLTMyNiwzICs0NDMsMTQwIEBACiAgICBkZWYgaWQyb2JqKG9pZCk6CiAgICAgICAgcmV0dXJuIF9pZDJvYmpfZGljdFtvaWRdCiAKKworLi4gX2ZpbmFsaXplLWV4YW1wbGVzOgorCitGaW5hbGl6ZXIgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1haW4gYmVuZWZpdCBvZiB1c2luZyA6Y2xhc3M6YGZpbmFsaXplYCBpcyB0aGF0IGl0IG1ha2VzIGl0IHNpbXBsZQordG8gcmVnaXN0ZXIgYSBjYWxsYmFjayB3aXRob3V0IG5lZWRpbmcgdG8gcHJlc2VydmUgdGhlIHJldHVybmVkIGZpbmFsaXplcgorb2JqZWN0LiAgRm9yIGluc3RhbmNlCisKKyAgICA+Pj4gaW1wb3J0IHdlYWtyZWYKKyAgICA+Pj4gY2xhc3MgT2JqZWN0OgorICAgIC4uLiAgICAgcGFzcworICAgIC4uLgorICAgID4+PiBrZW5ueSA9IE9iamVjdCgpCisgICAgPj4+IHdlYWtyZWYuZmluYWxpemUoa2VubnksIHByaW50LCAiWW91IGtpbGxlZCBLZW5ueSEiKSAgI2RvY3Rlc3Q6K0VMTElQU0lTCisgICAgPGZpbmFsaXplIG9iamVjdCBhdCAuLi47IGZvciAnT2JqZWN0JyBhdCAuLi4+CisgICAgPj4+IGRlbCBrZW5ueQorICAgIFlvdSBraWxsZWQgS2VubnkhCisKK1RoZSBmaW5hbGl6ZXIgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSBhcyB3ZWxsLiAgSG93ZXZlciB0aGUgZmluYWxpemVyCit3aWxsIGludm9rZSB0aGUgY2FsbGJhY2sgYXQgbW9zdCBvbmNlLgorCisgICAgPj4+IGRlZiBjYWxsYmFjayh4LCB5LCB6KToKKyAgICAuLi4gICAgIHByaW50KCJDQUxMQkFDSyIpCisgICAgLi4uICAgICByZXR1cm4geCArIHkgKyB6CisgICAgLi4uCisgICAgPj4+IG9iaiA9IE9iamVjdCgpCisgICAgPj4+IGYgPSB3ZWFrcmVmLmZpbmFsaXplKG9iaiwgY2FsbGJhY2ssIDEsIDIsIHo9MykKKyAgICA+Pj4gYXNzZXJ0IGYuYWxpdmUKKyAgICA+Pj4gYXNzZXJ0IGYoKSA9PSA2CisgICAgQ0FMTEJBQ0sKKyAgICA+Pj4gYXNzZXJ0IG5vdCBmLmFsaXZlCisgICAgPj4+IGYoKSAgICAgICAgICAgICAgICAgICAgICMgY2FsbGJhY2sgbm90IGNhbGxlZCBiZWNhdXNlIGZpbmFsaXplciBkZWFkCisgICAgPj4+IGRlbCBvYmogICAgICAgICAgICAgICAgICMgY2FsbGJhY2sgbm90IGNhbGxlZCBiZWNhdXNlIGZpbmFsaXplciBkZWFkCisKK1lvdSBjYW4gdW5yZWdpc3RlciBhIGZpbmFsaXplciB1c2luZyBpdHMgOm1ldGg6YH5maW5hbGl6ZS5kZXRhY2hgCittZXRob2QuICBUaGlzIGtpbGxzIHRoZSBmaW5hbGl6ZXIgYW5kIHJldHVybnMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8KK3RoZSBjb25zdHJ1Y3RvciB3aGVuIGl0IHdhcyBjcmVhdGVkLgorCisgICAgPj4+IG9iaiA9IE9iamVjdCgpCisgICAgPj4+IGYgPSB3ZWFrcmVmLmZpbmFsaXplKG9iaiwgY2FsbGJhY2ssIDEsIDIsIHo9MykKKyAgICA+Pj4gZi5kZXRhY2goKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZG9jdGVzdDorRUxMSVBTSVMKKyAgICAoPF9fbWFpbl9fLk9iamVjdCBvYmplY3QgLi4uPiwgPGZ1bmN0aW9uIGNhbGxiYWNrIC4uLj4sICgxLCAyKSwgeyd6JzogM30pCisgICAgPj4+IG5ld29iaiwgZnVuYywgYXJncywga3dhcmdzID0gXworICAgID4+PiBhc3NlcnQgbm90IGYuYWxpdmUKKyAgICA+Pj4gYXNzZXJ0IG5ld29iaiBpcyBvYmoKKyAgICA+Pj4gYXNzZXJ0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSA9PSA2CisgICAgQ0FMTEJBQ0sKKworVW5sZXNzIHlvdSBzZXQgdGhlIDphdHRyOmB+ZmluYWxpemUuYXRleGl0YCBhdHRyaWJ1dGUgdG8KKzpjb25zdDpgRmFsc2VgLCBhIGZpbmFsaXplciB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBwcm9ncmFtIGV4aXRzIGlmIGl0CitpcyBzdGlsbCBhbGl2ZS4gIEZvciBpbnN0YW5jZQorCisgICAgPj4+IG9iaiA9IE9iamVjdCgpCisgICAgPj4+IHdlYWtyZWYuZmluYWxpemUob2JqLCBwcmludCwgIm9iaiBkZWFkIG9yIGV4aXRpbmciKSAgI2RvY3Rlc3Q6K0VMTElQU0lTCisgICAgPGZpbmFsaXplIG9iamVjdCBhdCAuLi47IGZvciAnT2JqZWN0JyBhdCAuLi4+CisgICAgPj4+IGV4aXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RvY3Rlc3Q6K1NLSVAKKyAgICBvYmogZGVhZCBvciBleGl0aW5nCisKKworQ29tcGFyaW5nIGZpbmFsaXplcnMgd2l0aCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3NlIHdlIHdhbnQgdG8gY3JlYXRlIGEgY2xhc3Mgd2hvc2UgaW5zdGFuY2VzIHJlcHJlc2VudCB0ZW1wb3JhcnkKK2RpcmVjdG9yaWVzLiAgVGhlIGRpcmVjdG9yaWVzIHNob3VsZCBiZSBkZWxldGVkIHdpdGggdGhlaXIgY29udGVudHMKK3doZW4gdGhlIGZpcnN0IG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzIG9jY3VyczoKKworKiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLAorKiB0aGUgb2JqZWN0J3MgOm1ldGg6YHJlbW92ZWAgbWV0aG9kIGlzIGNhbGxlZCwgb3IKKyogdGhlIHByb2dyYW0gZXhpdHMuCisKK1dlIG1pZ2h0IHRyeSB0byBpbXBsZW1lbnQgdGhlIGNsYXNzIHVzaW5nIGEgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBhcworZm9sbG93czo6CisKKyAgICBjbGFzcyBUZW1wRGlyOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgICAgICBkZWYgcmVtb3ZlKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIHJlbW92ZWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lIGlzIE5vbmUKKworICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlKCkKKworU3RhcnRpbmcgd2l0aCBQeXRob24gMy40LCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBubyBsb25nZXIgcHJldmVudAorcmVmZXJlbmNlIGN5Y2xlcyBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgbW9kdWxlIGdsb2JhbHMgYXJlCitubyBsb25nZXIgZm9yY2VkIHRvIDpjb25zdDpgTm9uZWAgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duLiBTbyB0aGlzCitjb2RlIHNob3VsZCB3b3JrIHdpdGhvdXQgYW55IGlzc3VlcyBvbiBDUHl0aG9uLgorCitIb3dldmVyLCBoYW5kbGluZyBvZiA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBpcyBub3RvcmlvdXNseSBpbXBsZW1lbnRhdGlvbgorc3BlY2lmaWMsIHNpbmNlIGl0IGRlcGVuZHMgb24gaW50ZXJuYWwgZGV0YWlscyBvZiB0aGUgaW50ZXJwcmV0ZXIncyBnYXJiYWdlCitjb2xsZWN0b3IgaW1wbGVtZW50YXRpb24uCisKK0EgbW9yZSByb2J1c3QgYWx0ZXJuYXRpdmUgY2FuIGJlIHRvIGRlZmluZSBhIGZpbmFsaXplciB3aGljaCBvbmx5IHJlZmVyZW5jZXMKK3RoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYW5kIG9iamVjdHMgdGhhdCBpdCBuZWVkcywgcmF0aGVyIHRoYW4gaGF2aW5nIGFjY2VzcwordG8gdGhlIGZ1bGwgc3RhdGUgb2YgdGhlIG9iamVjdDo6CisKKyAgICBjbGFzcyBUZW1wRGlyOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplciA9IHdlYWtyZWYuZmluYWxpemUoc2VsZiwgc2h1dGlsLnJtdHJlZSwgc2VsZi5uYW1lKQorCisgICAgICAgIGRlZiByZW1vdmUoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZXIoKQorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgcmVtb3ZlZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZmluYWxpemVyLmFsaXZlCisKK0RlZmluZWQgbGlrZSB0aGlzLCBvdXIgZmluYWxpemVyIG9ubHkgcmVjZWl2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGRldGFpbHMKK2l0IG5lZWRzIHRvIGNsZWFuIHVwIHRoZSBkaXJlY3RvcnkgYXBwcm9wcmlhdGVseS4gSWYgdGhlIG9iamVjdCBuZXZlciBnZXRzCitnYXJiYWdlIGNvbGxlY3RlZCB0aGUgZmluYWxpemVyIHdpbGwgc3RpbGwgYmUgY2FsbGVkIGF0IGV4aXQuCisKK1RoZSBvdGhlciBhZHZhbnRhZ2Ugb2Ygd2Vha3JlZiBiYXNlZCBmaW5hbGl6ZXJzIGlzIHRoYXQgdGhleSBjYW4gYmUgdXNlZCB0bworcmVnaXN0ZXIgZmluYWxpemVycyBmb3IgY2xhc3NlcyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyBjb250cm9sbGVkIGJ5IGEKK3RoaXJkIHBhcnR5LCBzdWNoIGFzIHJ1bm5pbmcgY29kZSB3aGVuIGEgbW9kdWxlIGlzIHVubG9hZGVkOjoKKworICAgIGltcG9ydCB3ZWFrcmVmLCBzeXMKKyAgICBkZWYgdW5sb2FkaW5nX21vZHVsZSgpOgorICAgICAgICAjIGltcGxpY2l0IHJlZmVyZW5jZSB0byB0aGUgbW9kdWxlIGdsb2JhbHMgZnJvbSB0aGUgZnVuY3Rpb24gYm9keQorICAgIHdlYWtyZWYuZmluYWxpemUoc3lzLm1vZHVsZXNbX19uYW1lX19dLCB1bmxvYWRpbmdfbW9kdWxlKQorCisKKy4uIG5vdGU6OgorCisgICBJZiB5b3UgY3JlYXRlIGEgZmluYWxpemVyIG9iamVjdCBpbiBhIGRhZW1vbmljIHRocmVhZCBqdXN0IGFzIHRoZQorICAgdGhlIHByb2dyYW0gZXhpdHMgdGhlbiB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgZmluYWxpemVyCisgICBkb2VzIG5vdCBnZXQgY2FsbGVkIGF0IGV4aXQuICBIb3dldmVyLCBpbiBhIGRhZW1vbmljIHRocmVhZAorICAgOmZ1bmM6YGF0ZXhpdC5yZWdpc3RlcmAsIGBgdHJ5OiAuLi4gZmluYWxseTogLi4uYGAgYW5kIGBgd2l0aDogLi4uYGAKKyAgIGRvIG5vdCBndWFyYW50ZWUgdGhhdCBjbGVhbnVwIG9jY3VycyBlaXRoZXIuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0IGIvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdAppbmRleCBjZjY1MjE5Li40Yzg5ZGMzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKQEAgLTEwNSw2ICsxMDUsNDMgQEAKICAgID4+PiByb290WzBdWzFdLnRleHQKICAgICcyMDA4JwogCitQdWxsIEFQSSBmb3Igbm9uLWJsb2NraW5nIHBhcnNpbmcKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitNb3N0IHBhcnNpbmcgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlIHJlcXVpcmUgdG8gcmVhZCB0aGUgd2hvbGUKK2RvY3VtZW50IGF0IG9uY2UgYmVmb3JlIHJldHVybmluZyBhbnkgcmVzdWx0LiAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGEKKzpjbGFzczpgWE1MUGFyc2VyYCBhbmQgZmVlZCBkYXRhIGludG8gaXQgaW5jcmVtZW50YWxseSwgYnV0IGl0J3MgYSBwdXNoIEFQSSB0aGF0CitjYWxscyBtZXRob2RzIG9uIGEgY2FsbGJhY2sgdGFyZ2V0LCB3aGljaCBpcyB0b28gbG93LWxldmVsIGFuZCBpbmNvbnZlbmllbnQgZm9yCittb3N0IG5lZWRzLiAgU29tZXRpbWVzIHdoYXQgdGhlIHVzZXIgcmVhbGx5IHdhbnRzIGlzIHRvIGJlIGFibGUgdG8gcGFyc2UgWE1MCitpbmNyZW1lbnRhbGx5LCB3aXRob3V0IGJsb2NraW5nIG9wZXJhdGlvbnMsIHdoaWxlIGVuam95aW5nIHRoZSBjb252ZW5pZW5jZSBvZgorZnVsbHkgY29uc3RydWN0ZWQgOmNsYXNzOmBFbGVtZW50YCBvYmplY3RzLgorCitUaGUgbW9zdCBwb3dlcmZ1bCB0b29sIGZvciBkb2luZyB0aGlzIGlzIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAuICBJdCBkb2VzIG5vdAorcmVxdWlyZSBhIGJsb2NraW5nIHJlYWQgdG8gb2J0YWluIHRoZSBYTUwgZGF0YSwgYW5kIGlzIGluc3RlYWQgZmVkIHdpdGggZGF0YQoraW5jcmVtZW50YWxseSB3aXRoIDptZXRoOmBYTUxQdWxsUGFyc2VyLmZlZWRgIGNhbGxzLiAgVG8gZ2V0IHRoZSBwYXJzZWQgWE1MCitlbGVtZW50cywgY2FsbCA6bWV0aDpgWE1MUHVsbFBhcnNlci5yZWFkX2V2ZW50c2AuICBIZXJlJ3MgYW4gZXhhbXBsZTo6CisKKyAgID4+PiBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKFsnc3RhcnQnLCAnZW5kJ10pCisgICA+Pj4gcGFyc2VyLmZlZWQoJzxteXRhZz5zb21ldGV4dCcpCisgICA+Pj4gbGlzdChwYXJzZXIucmVhZF9ldmVudHMoKSkKKyAgIFsoJ3N0YXJ0JywgPEVsZW1lbnQgJ215dGFnJyBhdCAweDdmYTY2ZGIyYmU1OD4pXQorICAgPj4+IHBhcnNlci5mZWVkKCcgbW9yZSB0ZXh0PC9teXRhZz4nKQorICAgPj4+IGZvciBldmVudCwgZWxlbSBpbiBwYXJzZXIucmVhZF9ldmVudHMoKToKKyAgIC4uLiAgIHByaW50KGV2ZW50KQorICAgLi4uICAgcHJpbnQoZWxlbS50YWcsICd0ZXh0PScsIGVsZW0udGV4dCkKKyAgIC4uLgorICAgZW5kCisKK1RoZSBvYnZpb3VzIHVzZSBjYXNlIGlzIGFwcGxpY2F0aW9ucyB0aGF0IG9wZXJhdGUgaW4gYSBub24tYmxvY2tpbmcgZmFzaGlvbgord2hlcmUgdGhlIFhNTCBkYXRhIGlzIGJlaW5nIHJlY2VpdmVkIGZyb20gYSBzb2NrZXQgb3IgcmVhZCBpbmNyZW1lbnRhbGx5IGZyb20KK3NvbWUgc3RvcmFnZSBkZXZpY2UuICBJbiBzdWNoIGNhc2VzLCBibG9ja2luZyByZWFkcyBhcmUgdW5hY2NlcHRhYmxlLgorCitCZWNhdXNlIGl0J3Mgc28gZmxleGlibGUsIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAgY2FuIGJlIGluY29udmVuaWVudCB0byB1c2UgZm9yCitzaW1wbGVyIHVzZS1jYXNlcy4gIElmIHlvdSBkb24ndCBtaW5kIHlvdXIgYXBwbGljYXRpb24gYmxvY2tpbmcgb24gcmVhZGluZyBYTUwKK2RhdGEgYnV0IHdvdWxkIHN0aWxsIGxpa2UgdG8gaGF2ZSBpbmNyZW1lbnRhbCBwYXJzaW5nIGNhcGFiaWxpdGllcywgdGFrZSBhIGxvb2sKK2F0IDpmdW5jOmBpdGVycGFyc2VgLiAgSXQgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSdyZSByZWFkaW5nIGEgbGFyZ2UgWE1MIGRvY3VtZW50CithbmQgZG9uJ3Qgd2FudCB0byBob2xkIGl0IHdob2xseSBpbiBtZW1vcnkuCisKIEZpbmRpbmcgaW50ZXJlc3RpbmcgZWxlbWVudHMKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMzc5LDI1ICs0MTYsMzIgQEAKIAogICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHksIGFuZCByZXBvcnRzIHdoYXQncwogICAgZ29pbmcgb24gdG8gdGhlIHVzZXIuICAqc291cmNlKiBpcyBhIGZpbGVuYW1lIG9yIDp0ZXJtOmBmaWxlIG9iamVjdGAKLSAgIGNvbnRhaW5pbmcgWE1MIGRhdGEuICAqZXZlbnRzKiBpcyBhIHR1cGxlIG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIFRoZQotICAgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgYGAic3RhcnQiYGAsIGBgImVuZCJgYCwgYGAic3RhcnQtbnMiYGAKLSAgIGFuZCBgYCJlbmQtbnMiYGAgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQgbmFtZXNwYWNlCisgICBjb250YWluaW5nIFhNTCBkYXRhLiAgKmV2ZW50cyogaXMgYSBzZXF1ZW5jZSBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBUaGUKKyAgIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzIGBgInN0YXJ0ImBgLCBgYCJlbmQiYGAsIGBgInN0YXJ0LW5zImBgIGFuZAorICAgYGAiZW5kLW5zImBgICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkIG5hbWVzcGFjZQogICAgaW5mb3JtYXRpb24pLiAgSWYgKmV2ZW50cyogaXMgb21pdHRlZCwgb25seSBgYCJlbmQiYGAgZXZlbnRzIGFyZSByZXBvcnRlZC4KICAgICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlIHN0YW5kYXJkCi0gICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICAqcGFyc2VyKiBjYW4gb25seSB1c2UgdGhlIGRlZmF1bHQKLSAgIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGFzIGEgdGFyZ2V0LiAgUmV0dXJucyBhbiA6dGVybTpgaXRlcmF0b3JgIHByb3ZpZGluZwotICAgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCisgICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICAqcGFyc2VyKiBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YKKyAgIDpjbGFzczpgWE1MUGFyc2VyYCBhbmQgY2FuIG9ubHkgdXNlIHRoZSBkZWZhdWx0IDpjbGFzczpgVHJlZUJ1aWxkZXJgIGFzIGEKKyAgIHRhcmdldC4gIFJldHVybnMgYW4gOnRlcm06YGl0ZXJhdG9yYCBwcm92aWRpbmcgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCisKKyAgIE5vdGUgdGhhdCB3aGlsZSA6ZnVuYzpgaXRlcnBhcnNlYCBidWlsZHMgdGhlIHRyZWUgaW5jcmVtZW50YWxseSwgaXQgaXNzdWVzCisgICBibG9ja2luZyByZWFkcyBvbiAqc291cmNlKiAob3IgdGhlIGZpbGUgaXQgbmFtZXMpLiAgQXMgc3VjaCwgaXQncyB1bnN1aXRhYmxlCisgICBmb3IgYXBwbGljYXRpb25zIHdoZXJlIGJsb2NraW5nIHJlYWRzIGNhbid0IGJlIG1hZGUuICBGb3IgZnVsbHkgbm9uLWJsb2NraW5nCisgICBwYXJzaW5nLCBzZWUgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYC4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIDpmdW5jOmBpdGVycGFyc2VgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IGl0IGhhcyBzZWVuIHRoZSAiPiIKLSAgICAgIGNoYXJhY3RlciBvZiBhIHN0YXJ0aW5nIHRhZyB3aGVuIGl0IGVtaXRzIGEgInN0YXJ0IiBldmVudCwgc28gdGhlCi0gICAgICBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLCBidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMKLSAgICAgIGFyZSB1bmRlZmluZWQgYXQgdGhhdCBwb2ludC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgY2hpbGRyZW47Ci0gICAgICB0aGV5IG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQuCisgICAgICA6ZnVuYzpgaXRlcnBhcnNlYCBvbmx5IGd1YXJhbnRlZXMgdGhhdCBpdCBoYXMgc2VlbiB0aGUgIj4iIGNoYXJhY3RlciBvZiBhCisgICAgICBzdGFydGluZyB0YWcgd2hlbiBpdCBlbWl0cyBhICJzdGFydCIgZXZlbnQsIHNvIHRoZSBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLAorICAgICAgYnV0IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIGFyZSB1bmRlZmluZWQgYXQgdGhhdAorICAgICAgcG9pbnQuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBlbGVtZW50IGNoaWxkcmVuOyB0aGV5IG1heSBvciBtYXkgbm90IGJlCisgICAgICBwcmVzZW50LgogCiAgICAgICBJZiB5b3UgbmVlZCBhIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50LCBsb29rIGZvciAiZW5kIiBldmVudHMgaW5zdGVhZC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVGhlICpwYXJzZXIqIGFyZ3VtZW50LgogCiAuLiBmdW5jdGlvbjo6IHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpCiAKQEAgLTQzOCwyOSArNDgyLDM5IEBACiAgICBhcmd1bWVudHMuICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAKIAotLi4gZnVuY3Rpb246OiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIpCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIiwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKICAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKICAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgVXNlIGBgZW5jb2Rpbmc9InVuaWNvZGUiYGAgdG8KICAgIGdlbmVyYXRlIGEgVW5pY29kZSBzdHJpbmcgKG90aGVyd2lzZSwgYSBieXRlc3RyaW5nIGlzIGdlbmVyYXRlZCkuICAqbWV0aG9kKgogICAgaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuCisgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDptZXRoOmBFbGVtZW50VHJlZS53cml0ZWAuCiAgICBSZXR1cm5zIGFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIuCiAKLS4uIGZ1bmN0aW9uOjogdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIikKKworLi4gZnVuY3Rpb246OiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKICAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKICAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgVXNlIGBgZW5jb2Rpbmc9InVuaWNvZGUiYGAgdG8KICAgIGdlbmVyYXRlIGEgVW5pY29kZSBzdHJpbmcgKG90aGVyd2lzZSwgYSBieXRlc3RyaW5nIGlzIGdlbmVyYXRlZCkuICAqbWV0aG9kKgogICAgaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuCisgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDptZXRoOmBFbGVtZW50VHJlZS53cml0ZWAuCiAgICBSZXR1cm5zIGEgbGlzdCBvZiAob3B0aW9uYWxseSkgZW5jb2RlZCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgogICAgSXQgZG9lcyBub3QgZ3VhcmFudGVlIGFueSBzcGVjaWZpYyBzZXF1ZW5jZSwgZXhjZXB0IHRoYXQKICAgIGBgIiIuam9pbih0b3N0cmluZ2xpc3QoZWxlbWVudCkpID09IHRvc3RyaW5nKGVsZW1lbnQpYGAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IFhNTCh0ZXh0LCBwYXJzZXI9Tm9uZSkKIApAQCAtNzUzLDcgKzgwNyw4IEBACiAKIAogICAgLi4gbWV0aG9kOjogd3JpdGUoZmlsZSwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgeG1sX2RlY2xhcmF0aW9uPU5vbmUsIFwKLSAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfbmFtZXNwYWNlPU5vbmUsIG1ldGhvZD0ieG1sIikKKyAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfbmFtZXNwYWNlPU5vbmUsIG1ldGhvZD0ieG1sIiwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSkKIAogICAgICAgV3JpdGVzIHRoZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlLCBhcyBYTUwuICAqZmlsZSogaXMgYSBmaWxlIG5hbWUsIG9yIGEKICAgICAgIDp0ZXJtOmBmaWxlIG9iamVjdGAgb3BlbmVkIGZvciB3cml0aW5nLiAgKmVuY29kaW5nKiBbMV1fIGlzIHRoZSBvdXRwdXQKQEAgLTc2NCw2ICs4MTksMTAgQEAKICAgICAgICpkZWZhdWx0X25hbWVzcGFjZSogc2V0cyB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIChmb3IgInhtbG5zIikuCiAgICAgICAqbWV0aG9kKiBpcyBlaXRoZXIgYGAieG1sImBgLCBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMKICAgICAgIGBgInhtbCJgYCkuCisgICAgICBUaGUga2V5d29yZC1vbmx5ICpzaG9ydF9lbXB0eV9lbGVtZW50cyogcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBmb3JtYXR0aW5nCisgICAgICBvZiBlbGVtZW50cyB0aGF0IGNvbnRhaW4gbm8gY29udGVudC4gIElmICpUcnVlKiAodGhlIGRlZmF1bHQpLCB0aGV5IGFyZQorICAgICAgZW1pdHRlZCBhcyBhIHNpbmdsZSBzZWxmLWNsb3NlZCB0YWcsIG90aGVyd2lzZSB0aGV5IGFyZSBlbWl0dGVkIGFzIGEgcGFpcgorICAgICAgb2Ygc3RhcnQvZW5kIHRhZ3MuCiAKICAgICAgIFRoZSBvdXRwdXQgaXMgZWl0aGVyIGEgc3RyaW5nICg6Y2xhc3M6YHN0cmApIG9yIGJpbmFyeSAoOmNsYXNzOmBieXRlc2ApLgogICAgICAgVGhpcyBpcyBjb250cm9sbGVkIGJ5IHRoZSAqZW5jb2RpbmcqIGFyZ3VtZW50LiAgSWYgKmVuY29kaW5nKiBpcwpAQCAtNzcyLDYgKzgzMSw5IEBACiAgICAgICA6dGVybTpgZmlsZSBvYmplY3RgOyBtYWtlIHN1cmUgeW91IGRvIG5vdCB0cnkgdG8gd3JpdGUgYSBzdHJpbmcgdG8gYQogICAgICAgYmluYXJ5IHN0cmVhbSBhbmQgdmljZSB2ZXJzYS4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIuCisKIAogVGhpcyBpcyB0aGUgWE1MIGZpbGUgdGhhdCBpcyBnb2luZyB0byBiZSBtYW5pcHVsYXRlZDo6CiAKQEAgLTgxNyw2ICs4NzksNyBAQAogICAgOmNsYXNzOmBRTmFtZWAgaW5zdGFuY2VzIGFyZSBvcGFxdWUuCiAKIAorCiAuLiBfZWxlbWVudHRyZWUtdHJlZWJ1aWxkZXItb2JqZWN0czoKIAogVHJlZUJ1aWxkZXIgT2JqZWN0cwpAQCAtODc2LDEzICs5MzksMTcgQEAKIAogLi4gY2xhc3M6OiBYTUxQYXJzZXIoaHRtbD0wLCB0YXJnZXQ9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSkKIAotICAgOmNsYXNzOmBFbGVtZW50YCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhLCBiYXNlZCBvbiB0aGUgZXhwYXQKLSAgIHBhcnNlci4gICpodG1sKiBhcmUgcHJlZGVmaW5lZCBIVE1MIGVudGl0aWVzLiAgVGhpcyBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkKLSAgIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiAgKnRhcmdldCogaXMgdGhlIHRhcmdldCBvYmplY3QuICBJZiBvbWl0dGVkLCB0aGUKLSAgIGJ1aWxkZXIgdXNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgY2xhc3MuCi0gICAqZW5jb2RpbmcqIFsxXV8gaXMgb3B0aW9uYWwuICBJZiBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcKKyAgIFRoaXMgY2xhc3MgaXMgdGhlIGxvdy1sZXZlbCBidWlsZGluZyBibG9jayBvZiB0aGUgbW9kdWxlLiAgSXQgdXNlcworICAgOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgIGZvciBlZmZpY2llbnQsIGV2ZW50LWJhc2VkIHBhcnNpbmcgb2YgWE1MLiAgSXQgY2FuCisgICBiZSBmZWQgWE1MIGRhdGEgaW5jcmVtZW50YWxsIHdpdGggdGhlIDptZXRoOmBmZWVkYCBtZXRob2QsIGFuZCBwYXJzaW5nIGV2ZW50cworICAgYXJlIHRyYW5zbGF0ZWQgdG8gYSBwdXNoIEFQSSAtIGJ5IGludm9raW5nIGNhbGxiYWNrcyBvbiB0aGUgKnRhcmdldCogb2JqZWN0LgorICAgSWYgKnRhcmdldCogaXMgb21pdHRlZCwgdGhlIHN0YW5kYXJkIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGlzIHVzZWQuICBUaGUKKyAgICpodG1sKiBhcmd1bWVudCB3YXMgaGlzdG9yaWNhbGx5IHVzZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBpcyBub3cKKyAgIGRlcHJlY2F0ZWQuICBJZiAqZW5jb2RpbmcqIFsxXV8gaXMgZ2l2ZW4sIHRoZSB2YWx1ZSBvdmVycmlkZXMgdGhlIGVuY29kaW5nCiAgICBzcGVjaWZpZWQgaW4gdGhlIFhNTCBmaWxlLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBUaGUgKmh0bWwqIGFyZ3VtZW50LgogCiAgICAuLiBtZXRob2Q6OiBjbG9zZSgpCiAKQEAgLTkwMiwxMiArOTY5LDEyIEBACiAKICAgICAgIEZlZWRzIGRhdGEgdG8gdGhlIHBhcnNlci4gICpkYXRhKiBpcyBlbmNvZGVkIGRhdGEuCiAKLSAgIDptZXRoOmBYTUxQYXJzZXIuZmVlZGAgY2FsbHMgKnRhcmdldCpcJ3MgYGBzdGFydCgpYGAgbWV0aG9kCi0gICBmb3IgZWFjaCBvcGVuaW5nIHRhZywgaXRzIGBgZW5kKClgYCBtZXRob2QgZm9yIGVhY2ggY2xvc2luZyB0YWcsCi0gICBhbmQgZGF0YSBpcyBwcm9jZXNzZWQgYnkgbWV0aG9kIGBgZGF0YSgpYGAuICA6bWV0aDpgWE1MUGFyc2VyLmNsb3NlYAotICAgY2FsbHMgKnRhcmdldCpcJ3MgbWV0aG9kIGBgY2xvc2UoKWBgLgotICAgOmNsYXNzOmBYTUxQYXJzZXJgIGNhbiBiZSB1c2VkIG5vdCBvbmx5IGZvciBidWlsZGluZyBhIHRyZWUgc3RydWN0dXJlLgotICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGNvdW50aW5nIHRoZSBtYXhpbXVtIGRlcHRoIG9mIGFuIFhNTCBmaWxlOjoKKyAgIDptZXRoOmBYTUxQYXJzZXIuZmVlZGAgY2FsbHMgKnRhcmdldCpcJ3MgYGBzdGFydCh0YWcsIGF0dHJzX2RpY3QpYGAgbWV0aG9kCisgICBmb3IgZWFjaCBvcGVuaW5nIHRhZywgaXRzIGBgZW5kKHRhZylgYCBtZXRob2QgZm9yIGVhY2ggY2xvc2luZyB0YWcsIGFuZCBkYXRhCisgICBpcyBwcm9jZXNzZWQgYnkgbWV0aG9kIGBgZGF0YShkYXRhKWBgLiAgOm1ldGg6YFhNTFBhcnNlci5jbG9zZWAgY2FsbHMKKyAgICp0YXJnZXQqXCdzIG1ldGhvZCBgYGNsb3NlKClgYC4gOmNsYXNzOmBYTUxQYXJzZXJgIGNhbiBiZSB1c2VkIG5vdCBvbmx5IGZvcgorICAgYnVpbGRpbmcgYSB0cmVlIHN0cnVjdHVyZS4gVGhpcyBpcyBhbiBleGFtcGxlIG9mIGNvdW50aW5nIHRoZSBtYXhpbXVtIGRlcHRoCisgICBvZiBhbiBYTUwgZmlsZTo6CiAKICAgICA+Pj4gZnJvbSB4bWwuZXRyZWUuRWxlbWVudFRyZWUgaW1wb3J0IFhNTFBhcnNlcgogICAgID4+PiBjbGFzcyBNYXhEZXB0aDogICAgICAgICAgICAgICAgICAgICAjIFRoZSB0YXJnZXQgb2JqZWN0IG9mIHRoZSBwYXJzZXIKQEAgLTk0MSw2ICsxMDA4LDU4IEBACiAgICAgPj4+IHBhcnNlci5jbG9zZSgpCiAgICAgNAogCisKKy4uIF9lbGVtZW50dHJlZS14bWxwdWxscGFyc2VyLW9iamVjdHM6CisKK1hNTFB1bGxQYXJzZXIgT2JqZWN0cworXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogWE1MUHVsbFBhcnNlcihldmVudHM9Tm9uZSkKKworICAgQSBwdWxsIHBhcnNlciBzdWl0YWJsZSBmb3Igbm9uLWJsb2NraW5nIGFwcGxpY2F0aW9ucy4gIEl0cyBpbnB1dC1zaWRlIEFQSSBpcworICAgc2ltaWxhciB0byB0aGF0IG9mIDpjbGFzczpgWE1MUGFyc2VyYCwgYnV0IGluc3RlYWQgb2YgcHVzaGluZyBjYWxscyB0byBhCisgICBjYWxsYmFjayB0YXJnZXQsIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAgY29sbGVjdHMgYW4gaW50ZXJuYWwgbGlzdCBvZiBwYXJzaW5nCisgICBldmVudHMgYW5kIGxldHMgdGhlIHVzZXIgcmVhZCBmcm9tIGl0LiAqZXZlbnRzKiBpcyBhIHNlcXVlbmNlIG9mIGV2ZW50cyB0bworICAgcmVwb3J0IGJhY2suICBUaGUgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgYGAic3RhcnQiYGAsIGBgImVuZCJgYCwKKyAgIGBgInN0YXJ0LW5zImBgIGFuZCBgYCJlbmQtbnMiYGAgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQKKyAgIG5hbWVzcGFjZSBpbmZvcm1hdGlvbikuICBJZiAqZXZlbnRzKiBpcyBvbWl0dGVkLCBvbmx5IGBgImVuZCJgYCBldmVudHMgYXJlCisgICByZXBvcnRlZC4KKworICAgLi4gbWV0aG9kOjogZmVlZChkYXRhKQorCisgICAgICBGZWVkIHRoZSBnaXZlbiBieXRlcyBkYXRhIHRvIHRoZSBwYXJzZXIuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgU2lnbmFsIHRoZSBwYXJzZXIgdGhhdCB0aGUgZGF0YSBzdHJlYW0gaXMgdGVybWluYXRlZC4gVW5saWtlCisgICAgICA6bWV0aDpgWE1MUGFyc2VyLmNsb3NlYCwgdGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgOmNvbnN0OmBOb25lYC4KKyAgICAgIEFueSBldmVudHMgbm90IHlldCByZXRyaWV2ZWQgd2hlbiB0aGUgcGFyc2VyIGlzIGNsb3NlZCBjYW4gc3RpbGwgYmUKKyAgICAgIHJlYWQgd2l0aCA6bWV0aDpgcmVhZF9ldmVudHNgLgorCisgICAuLiBtZXRob2Q6OiByZWFkX2V2ZW50cygpCisKKyAgICAgIEl0ZXJhdGUgb3ZlciB0aGUgZXZlbnRzIHdoaWNoIGhhdmUgYmVlbiBlbmNvdW50ZXJlZCBpbiB0aGUgZGF0YSBmZWQgdG8gdGhlCisgICAgICBwYXJzZXIuICBUaGlzIG1ldGhvZCB5aWVsZHMgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMsIHdoZXJlICpldmVudCogaXMgYQorICAgICAgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiBldmVudCAoZS5nLiBgYCJlbmQiYGApIGFuZCAqZWxlbSogaXMgdGhlCisgICAgICBlbmNvdW50ZXJlZCA6Y2xhc3M6YEVsZW1lbnRgIG9iamVjdC4KKworICAgICAgRXZlbnRzIHByb3ZpZGVkIGluIGEgcHJldmlvdXMgY2FsbCB0byA6bWV0aDpgcmVhZF9ldmVudHNgIHdpbGwgbm90IGJlCisgICAgICB5aWVsZGVkIGFnYWluLiBBcyBldmVudHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGludGVybmFsIHF1ZXVlIG9ubHkgYXMKKyAgICAgIHRoZXkgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBpdGVyYXRvciwgbXVsdGlwbGUgcmVhZGVycyBjYWxsaW5nCisgICAgICA6bWV0aDpgcmVhZF9ldmVudHNgIGluIHBhcmFsbGVsIHdpbGwgaGF2ZSB1bnByZWRpY3RhYmxlIHJlc3VsdHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IGl0IGhhcyBzZWVuIHRoZSAiPiIKKyAgICAgIGNoYXJhY3RlciBvZiBhIHN0YXJ0aW5nIHRhZyB3aGVuIGl0IGVtaXRzIGEgInN0YXJ0IiBldmVudCwgc28gdGhlCisgICAgICBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLCBidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMKKyAgICAgIGFyZSB1bmRlZmluZWQgYXQgdGhhdCBwb2ludC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgY2hpbGRyZW47CisgICAgICB0aGV5IG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQuCisKKyAgICAgIElmIHlvdSBuZWVkIGEgZnVsbHkgcG9wdWxhdGVkIGVsZW1lbnQsIGxvb2sgZm9yICJlbmQiIGV2ZW50cyBpbnN0ZWFkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogRXhjZXB0aW9ucwogXl5eXl5eXl5eXgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CmluZGV4IDdhNjQ4MmIuLmY3MzAzZWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgIGFuZCBzaG91bGQgYmUgOmNvbnN0OmBaSVBfU1RPUkVEYCwgOmNvbnN0OmBaSVBfREVGTEFURURgLAogICAgOmNvbnN0OmBaSVBfQlpJUDJgIG9yIDpjb25zdDpgWklQX0xaTUFgOyB1bnJlY29nbml6ZWQKICAgIHZhbHVlcyB3aWxsIGNhdXNlIDpleGM6YFJ1bnRpbWVFcnJvcmAgdG8gYmUgcmFpc2VkLiAgSWYgOmNvbnN0OmBaSVBfREVGTEFURURgLAotICAgOmNvbnN0OmBaSVBfQlpJUDJgIG9yIDpjb25zdDpgWklQX0xaTUFgIGlzIHNwZWNpZmllZCBidXQgdGhlIGNvcnJlc3BvbmRlZCBtb2R1bGUKKyAgIDpjb25zdDpgWklQX0JaSVAyYCBvciA6Y29uc3Q6YFpJUF9MWk1BYCBpcyBzcGVjaWZpZWQgYnV0IHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZQogICAgKDptb2Q6YHpsaWJgLCA6bW9kOmBiejJgIG9yIDptb2Q6YGx6bWFgKSBpcyBub3QgYXZhaWxhYmxlLCA6ZXhjOmBSdW50aW1lRXJyb3JgCiAgICBpcyBhbHNvIHJhaXNlZC4gVGhlIGRlZmF1bHQgaXMgOmNvbnN0OmBaSVBfU1RPUkVEYC4gIElmICphbGxvd1ppcDY0KiBpcwogICAgYGBUcnVlYGAgemlwZmlsZSB3aWxsIGNyZWF0ZSBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIFpJUDY0IGV4dGVuc2lvbnMgd2hlbgpAQCAtMjY2LDEwICsyNjYsOCBAQAogICAgICAgTmV2ZXIgZXh0cmFjdCBhcmNoaXZlcyBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzIHdpdGhvdXQgcHJpb3IgaW5zcGVjdGlvbi4KICAgICAgIEl0IGlzIHBvc3NpYmxlIHRoYXQgZmlsZXMgYXJlIGNyZWF0ZWQgb3V0c2lkZSBvZiAqcGF0aCosIGUuZy4gbWVtYmVycwogICAgICAgdGhhdCBoYXZlIGFic29sdXRlIGZpbGVuYW1lcyBzdGFydGluZyB3aXRoIGBgIi8iYGAgb3IgZmlsZW5hbWVzIHdpdGggdHdvCi0gICAgICBkb3RzIGBgIi4uImBgLgotCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy4xCi0gICAgICBUaGUgemlwZmlsZSBtb2R1bGUgYXR0ZW1wdHMgdG8gcHJldmVudCB0aGF0LiAgU2VlIDptZXRoOmBleHRyYWN0YCBub3RlLgorICAgICAgZG90cyBgYCIuLiJgYC4gIFRoaXMgbW9kdWxlIGF0dGVtcHRzIHRvIHByZXZlbnQgdGhhdC4KKyAgICAgIFNlZSA6bWV0aDpgZXh0cmFjdGAgbm90ZS4KIAogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLnByaW50ZGlyKCkKQEAgLTM4NCw3ICszODIsNyBAQAogCiAgICBJbnN0YW5jZXMgaGF2ZSBvbmUgbWV0aG9kIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mIDpjbGFzczpgWmlwRmlsZWAgb2JqZWN0czoKIAotICAgLi4gbWV0aG9kOjogUHlaaXBGaWxlLndyaXRlcHkocGF0aG5hbWUsIGJhc2VuYW1lPScnKQorICAgLi4gbWV0aG9kOjogUHlaaXBGaWxlLndyaXRlcHkocGF0aG5hbWUsIGJhc2VuYW1lPScnLCBmaWx0ZXJmdW5jPU5vbmUpCiAKICAgICAgIFNlYXJjaCBmb3IgZmlsZXMgOmZpbGU6YFwqLnB5YCBhbmQgYWRkIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgdG8gdGhlCiAgICAgICBhcmNoaXZlLgpAQCAtNDA2LDcgKzQwNCwxMCBAQAogICAgICAgcGFja2FnZSBkaXJlY3RvcnksIHRoZW4gYWxsIDpmaWxlOmBcKi5weVtjb11gIGFyZSBhZGRlZCB1bmRlciB0aGUgcGFja2FnZQogICAgICAgbmFtZSBhcyBhIGZpbGUgcGF0aCwgYW5kIGlmIGFueSBzdWJkaXJlY3RvcmllcyBhcmUgcGFja2FnZSBkaXJlY3RvcmllcywKICAgICAgIGFsbCBvZiB0aGVzZSBhcmUgYWRkZWQgcmVjdXJzaXZlbHkuICAqYmFzZW5hbWUqIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbAotICAgICAgdXNlIG9ubHkuICBUaGUgOm1ldGg6YHdyaXRlcHlgIG1ldGhvZCBtYWtlcyBhcmNoaXZlcyB3aXRoIGZpbGUgbmFtZXMgbGlrZQorICAgICAgdXNlIG9ubHkuICBXaGVuICpmaWx0ZXJmdW5jKHBhdGhuYW1lKSogaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgY2FsbGVkIGZvciBldmVyeQorICAgICAgaW52b2NhdGlvbi4gV2hlbiBpdCByZXR1cm5zIGEgRmFsc2UgdmFsdWUsIHRoYXQgcGF0aCBhbmQgaXRzIHN1YnBhdGhzIHdpbGwKKyAgICAgIGJlIGlnbm9yZWQuCisgICAgICBUaGUgOm1ldGg6YHdyaXRlcHlgIG1ldGhvZCBtYWtlcyBhcmNoaXZlcyB3aXRoIGZpbGUgbmFtZXMgbGlrZQogICAgICAgdGhpczo6CiAKICAgICAgICAgIHN0cmluZy5weWMgICAgICAgICAgICAgICAgICAgIyBUb3AgbGV2ZWwgbmFtZQpAQCAtNDE1LDYgKzQxNiw5IEBACiAgICAgICAgICB0ZXN0L2JvZ3VzL19faW5pdF9fLnB5YyAgICAgICMgU3VicGFja2FnZSBkaXJlY3RvcnkKICAgICAgICAgIHRlc3QvYm9ndXMvbXlmaWxlLnB5YyAgICAgICAgIyBTdWJtb2R1bGUgdGVzdC5ib2d1cy5teWZpbGUKIAorICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAgICBUaGUgKmZpbHRlcmZ1bmMqIHBhcmFtZXRlci4KKwogCiAuLiBfemlwaW5mby1vYmplY3RzOgogCmRpZmYgLS1naXQgYS9Eb2MvbGljZW5zZS5yc3QgYi9Eb2MvbGljZW5zZS5yc3QKaW5kZXggM2U5M2EyNi4uNTk4YmE4NiAxMDA2NDQKLS0tIGEvRG9jL2xpY2Vuc2UucnN0CisrKyBiL0RvYy9saWNlbnNlLnJzdApAQCAtNTkwLDYgKzU5MCwyNSBAQAogICBTVUNIIERBTUFHRS4KIAogCitTSEEtMworLS0tLS0KKworVGhlIG1vZHVsZSA6bW9kOmBfc2hhM2AgYW5kIDptb2Q6YGhhc2hsaWJgIGFyZSB1c2luZyB0aGUgcmVmZXJlbmNlCitpbXBsZW1lbnRhdGlvbiBvZiBLZWNjYWsuIFRoZSBmaWxlcyBhdCA6ZmlsZTpgTW9kdWxlcy9fc2hhMy9rZWNjYWsvYCBjb250YWluCit0aGUgZm9sbG93aW5nIG5vdGU6OgorCisgIFRoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKKyAgTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorICBxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworICBJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAorICBoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorICBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworCisKIHN0cnRvZCBhbmQgZHRvYQogLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0IGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKaW5kZXggOGFmYzY5ZS4uZTM1YWE5ZiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKQEAgLTQ5MywxNCArNDkzLDE1IEBACiB2YWx1ZSwgYWxsIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdAogdmFsdWUgLS0tIHRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLgogCi0qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMKLWV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24KLWlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMKLWlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZQotb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0Ci0oZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuCi1UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAKLWFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46OgorKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGUgZnVuY3Rpb24KK2RlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuCit0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaAorY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYQorbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZQorb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdAorbW9kaWZpZWQuICBUaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UKK2BgTm9uZWBgIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sCitlLmcuOjoKIAogICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOgogICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZToKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdCBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdAppbmRleCAyMTI4ZmZjLi4wYzZhMGFiIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CkBAIC05MzQsNiArOTM0LDIwIEBACiAgICAgICBmcmFtZSkuICBBIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpCiAgICAgICBieSB3cml0aW5nIHRvIGZfbGluZW5vLgogCisgICAgICBGcmFtZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDoKKworICAgICAgLi4gbWV0aG9kOjogZnJhbWUuY2xlYXIoKQorCisgICAgICAgICBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGhlbGQgYnkgdGhlCisgICAgICAgICBmcmFtZS4gIEFsc28sIGlmIHRoZSBmcmFtZSBiZWxvbmdlZCB0byBhIGdlbmVyYXRvciwgdGhlIGdlbmVyYXRvcgorICAgICAgICAgaXMgZmluYWxpemVkLiAgVGhpcyBoZWxwcyBicmVhayByZWZlcmVuY2UgY3ljbGVzIGludm9sdmluZyBmcmFtZQorICAgICAgICAgb2JqZWN0cyAoZm9yIGV4YW1wbGUgd2hlbiBjYXRjaGluZyBhbiBleGNlcHRpb24gYW5kIHN0b3JpbmcgaXRzCisgICAgICAgICB0cmFjZWJhY2sgZm9yIGxhdGVyIHVzZSkuCisKKyAgICAgICAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLgorCisgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgVHJhY2ViYWNrIG9iamVjdHMKICAgICAgIC4uIGluZGV4OjoKICAgICAgICAgIG9iamVjdDogdHJhY2ViYWNrCkBAIC0xMTIxLDEyICsxMTM1LDEwIEBACiAgICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3Qgc2l0dWF0aW9uCiAgICAgICBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7IHRoZSBsYXR0ZXIgdHdvCiAgICAgICBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuCi0gICAgICBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUKLSAgICAgIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0J3Mgb24gYnkgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmCi0gICAgICB0aGVyZSBhcmUgbm8gUHl0aG9uLSBsZXZlbCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1vZDpgZ2NgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cKLSAgICAgIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5Ci0gICAgICB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgIHZhbHVlLgorICAgICAgQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbgorICAgICAgdGhlIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3RvciBpcyBlbmFibGVkIChpdCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlciB0byB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6bW9kOmBnY2AgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMKKyAgICAgIHRvcGljLgogCiAgICAuLiB3YXJuaW5nOjoKIApAQCAtMTgzMCw2ICsxODQyLDE1IEBACiAgICBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LgogCiAKKy4uIG1ldGhvZDo6IG9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZikKKworICAgQ2FsbGVkIHRvIGltcGxlbWVudCA6ZnVuYzpgb3BlcmF0b3IubGVuZ3RoX2hpbnRgLiBTaG91bGQgcmV0dXJuIGFuIGVzdGltYXRlZAorICAgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICh3aGljaCBtYXkgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW4gdGhlIGFjdHVhbCBsZW5ndGgpLgorICAgVGhlIGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIgYGA+PWBgIDAuIFRoaXMgbWV0aG9kIGlzIHB1cmVseSBhbgorICAgb3B0aW1pemF0aW9uIGFuZCBpcyBuZXZlciByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBub3RlOjoKIAogICAgU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLiAgQSBjYWxsIGxpa2UgOjoKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdCBiL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdAppbmRleCBlYjQ5N2ExLi5iNTg3ZmM5IDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0CkBAIC0zNzMsMTYgKzM3MywxOCBAQAogICogVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0IGxvYWRlZAogICAgdGhlIG1vZHVsZS4gIFRoaXMgaXMgbW9zdGx5IGZvciBpbnRyb3NwZWN0aW9uIGFuZCByZWxvYWRpbmcsIGJ1dCBjYW4gYmUKICAgIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGZvciBleGFtcGxlIGdldHRpbmcKLSAgIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorICAgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBsb2FkZXIuIElmIHRoZSBhdHRyaWJ1dGUgaXMgbWlzc2luZyBvciBzZXQgdG8gYGBOb25lYGAKKyAgIHRoZW4gdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCBpdCAqKmFmdGVyKiogdGhlIG1vZHVsZSBoYXMKKyAgIGJlZW4gaW1wb3J0ZWQuCiAKLSAqIFRoZSBtb2R1bGUncyBgYF9fcGFja2FnZV9fYGAgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQuICBJdHMgdmFsdWUgbXVzdCBiZSBhCisgKiBUaGUgbW9kdWxlJ3MgYGBfX3BhY2thZ2VfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldC4gIEl0cyB2YWx1ZSBtdXN0IGJlIGEKICAgIHN0cmluZywgYnV0IGl0IGNhbiBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBpdHMgYGBfX25hbWVfX2BgLiAgSWYgdGhlIGF0dHJpYnV0ZQogICAgaXMgc2V0IHRvIGBgTm9uZWBgIG9yIGlzIG1pc3NpbmcsIHRoZSBpbXBvcnQgc3lzdGVtIHdpbGwgZmlsbCBpdCBpbiB3aXRoIGEKLSAgIG1vcmUgYXBwcm9wcmlhdGUgdmFsdWUuICBXaGVuIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBpdHMgYGBfX3BhY2thZ2VfX2BgCi0gICB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIGl0cyBgYF9fbmFtZV9fYGAuICBXaGVuIHRoZSBtb2R1bGUgaXMgbm90IGEgcGFja2FnZSwKLSAgIGBgX19wYWNrYWdlX19gYCBzaG91bGQgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgZm9yIHRvcC1sZXZlbCBtb2R1bGVzLCBvcgotICAgZm9yIHN1Ym1vZHVsZXMsIHRvIHRoZSBwYXJlbnQgcGFja2FnZSdzIG5hbWUuICBTZWUgOnBlcDpgMzY2YCBmb3IgZnVydGhlcgotICAgZGV0YWlscy4KKyAgIG1vcmUgYXBwcm9wcmlhdGUgdmFsdWUgKiphZnRlcioqIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW1wb3J0ZWQuCisgICBXaGVuIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBpdHMgYGBfX3BhY2thZ2VfX2BgIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gaXRzCisgICBgYF9fbmFtZV9fYGAuICBXaGVuIHRoZSBtb2R1bGUgaXMgbm90IGEgcGFja2FnZSwgYGBfX3BhY2thZ2VfX2BgIHNob3VsZCBiZQorICAgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgZm9yIHRvcC1sZXZlbCBtb2R1bGVzLCBvciBmb3Igc3VibW9kdWxlcywgdG8gdGhlCisgICBwYXJlbnQgcGFja2FnZSdzIG5hbWUuICBTZWUgOnBlcDpgMzY2YCBmb3IgZnVydGhlciBkZXRhaWxzLgogCiAgICBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGluc3RlYWQgb2YgYGBfX25hbWVfX2BgIHRvIGNhbGN1bGF0ZSBleHBsaWNpdAogICAgcmVsYXRpdmUgaW1wb3J0cyBmb3IgbWFpbiBtb2R1bGVzLCBhcyBkZWZpbmVkIGluIDpwZXA6YDM2NmAuCkBAIC00MjUsOCArNDI3LDggQEAKICAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSwgdGhpcyBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlCiAgICBtb2R1bGUncyByZXByLgogCi0gKiBJZiB0aGUgbW9kdWxlIGhhcyBubyBgYF9fZmlsZV9fYGAgYnV0IGRvZXMgaGF2ZSBhIGBgX19sb2FkZXJfX2BgLCB0aGVuIHRoZQotICAgbG9hZGVyJ3MgcmVwciBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIG1vZHVsZSdzIHJlcHIuCisgKiBJZiB0aGUgbW9kdWxlIGhhcyBubyBgYF9fZmlsZV9fYGAgYnV0IGRvZXMgaGF2ZSBhIGBgX19sb2FkZXJfX2BgIHRoYXQgaXMgbm90CisgICBgYE5vbmVgYCwgdGhlbiB0aGUgbG9hZGVyJ3MgcmVwciBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIG1vZHVsZSdzIHJlcHIuCiAKICAqIE90aGVyd2lzZSwganVzdCB1c2UgdGhlIG1vZHVsZSdzIGBgX19uYW1lX19gYCBpbiB0aGUgcmVwci4KIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbCBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKaW5kZXggYTBlYzMyZi4uZWQ1ZGEwYyAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbAorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCkBAIC0zLDcgKzMsNyBAQAogCSAgICA8aDM+RG9jcyBmb3Igb3RoZXIgdmVyc2lvbnM8L2gzPgogCSAgICA8dWw+CiAJICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi43LyI+UHl0aG9uIDIuNyAoc3RhYmxlKTwvYT48L2xpPgotCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC8iPlB5dGhvbiAzLjQgKGluIGRldmVsb3BtZW50KTwvYT48L2xpPgorCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy8iPlB5dGhvbiAzLjMgKHN0YWJsZSk8L2E+PC9saT4KICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvdmVyc2lvbnMvIj5PbGQgdmVyc2lvbnM8L2E+PC9saT4KICAgICAgICAgICAgIDwvdWw+CiAKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weSBiL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQppbmRleCAzODhmZTNhLi4yYjVkZTE0IDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CkBAIC0xMCw3ICsxMCw3IEBACiAiIiIKIAogSVNTVUVfVVJJID0gJ2h0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUlcycKLVNPVVJDRV9VUkkgPSAnaHR0cDovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlLzMuMy8lcycKK1NPVVJDRV9VUkkgPSAnaHR0cDovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlL2RlZmF1bHQvJXMnCiAKIGZyb20gZG9jdXRpbHMgaW1wb3J0IG5vZGVzLCB1dGlscwogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKaW5kZXggZjEyNGZmMi4uNTdiMWYxZSAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2CisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgpAQCAtMTYxLDE3ICsxNjEsOSBAQAogbGlicmFyeS9wZGIsLDpsaW5lbm8sZmlsZW5hbWU6bGluZW5vCiBsaWJyYXJ5L3BpY2tsZSwsOm1lbW9yeSwiY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgiIjptZW1vcnk6IiIpIgogbGlicmFyeS9wb3NpeCwsYCwiQ0ZMQUdTPSIiYGdldGNvbmYgTEZTX0NGTEFHU2AiIiBPUFQ9IiItZyAtTzIgJENGTEFHUyIiIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInY2xhc3NpZmllcnMnOiBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ05hdHVyYWwgTGFuZ3VhZ2UgOjogRW5nbGlzaCcsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMicsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMgOjogUHl0aG9uIE1vZHVsZXMnXSwiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMiA6OiBPbmx5J10sIgorbGlicmFyeS9wcHJpbnQsLDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsIgorbGlicmFyeS9wcHJpbnQsLDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsIgogbGlicmFyeS9wcm9maWxlLCw6bGluZW5vLGZpbGVuYW1lOmxpbmVubyhmdW5jdGlvbikKIGxpYnJhcnkvcHlleHBhdCwsOmVsZW0xLDxweTplbGVtMSAvPgogbGlicmFyeS9weWV4cGF0LCw6cHksInhtbG5zOnB5ID0gIiJodHRwOi8vd3d3LnB5dGhvbi5vcmcvbnMvIiI+IgpAQCAtMTgzLDYgKzE3NSw3IEBACiBsaWJyYXJ5L3NxbGl0ZTMsLDphZ2UsImN1ci5leGVjdXRlKCIic2VsZWN0ICogZnJvbSBwZW9wbGUgd2hlcmUgbmFtZV9sYXN0PTp3aG8gYW5kIGFnZT06YWdlIiIsIHsiIndobyIiOiB3aG8sICIiYWdlIiI6IGFnZX0pIgogbGlicmFyeS9zcWxpdGUzLCw6bWVtb3J5LAogbGlicmFyeS9zcWxpdGUzLCw6d2hvLCJjdXIuZXhlY3V0ZSgiInNlbGVjdCAqIGZyb20gcGVvcGxlIHdoZXJlIG5hbWVfbGFzdD06d2hvIGFuZCBhZ2U9OmFnZSIiLCB7IiJ3aG8iIjogd2hvLCAiImFnZSIiOiBhZ2V9KSIKK2xpYnJhcnkvc3FsaXRlMywsOnBhdGgsImRiID0gc3FsaXRlMy5jb25uZWN0KCdmaWxlOnBhdGgvdG8vZGF0YWJhc2U/bW9kZT1ybycsIHVyaT1UcnVlKSIKIGxpYnJhcnkvc3NsLCw6TXksIk9yZ2FuaXphdGlvbmFsIFVuaXQgTmFtZSAoZWcsIHNlY3Rpb24pIFtdOk15IEdyb3VwIgogbGlicmFyeS9zc2wsLDpNeSwiT3JnYW5pemF0aW9uIE5hbWUgKGVnLCBjb21wYW55KSBbSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkXTpNeSBPcmdhbml6YXRpb24sIEluYy4iCiBsaWJyYXJ5L3NzbCwsOm15c2VydmVyLCJDb21tb24gTmFtZSAoZWcsIFlPVVIgbmFtZSkgW106bXlzZXJ2ZXIubXlncm91cC5teW9yZ2FuaXphdGlvbi5jb20iCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdAppbmRleCAzNmFjYjA2Li5hYmYzMGYwIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QKQEAgLTcsMTQwICs3LDI3IEBACiBTb21lIHZlcnNpb25zIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgc3VwcG9ydCBlZGl0aW5nIG9mIHRoZSBjdXJyZW50IGlucHV0CiBsaW5lIGFuZCBoaXN0b3J5IHN1YnN0aXR1dGlvbiwgc2ltaWxhciB0byBmYWNpbGl0aWVzIGZvdW5kIGluIHRoZSBLb3JuIHNoZWxsIGFuZAogdGhlIEdOVSBCYXNoIHNoZWxsLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgYEdOVSBSZWFkbGluZWBfIGxpYnJhcnksCi13aGljaCBzdXBwb3J0cyBFbWFjcy1zdHlsZSBhbmQgdmktc3R5bGUgZWRpdGluZy4gIFRoaXMgbGlicmFyeSBoYXMgaXRzIG93bgotZG9jdW1lbnRhdGlvbiB3aGljaCBJIHdvbid0IGR1cGxpY2F0ZSBoZXJlOyBob3dldmVyLCB0aGUgYmFzaWNzIGFyZSBlYXNpbHkKLWV4cGxhaW5lZC4gIFRoZSBpbnRlcmFjdGl2ZSBlZGl0aW5nIGFuZCBoaXN0b3J5IGRlc2NyaWJlZCBoZXJlIGFyZSBvcHRpb25hbGx5Ci1hdmFpbGFibGUgaW4gdGhlIFVuaXggYW5kIEN5Z3dpbiB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuCi0KLVRoaXMgY2hhcHRlciBkb2VzICpub3QqIGRvY3VtZW50IHRoZSBlZGl0aW5nIGZhY2lsaXRpZXMgb2YgTWFyayBIYW1tb25kJ3MKLVB5dGhvbldpbiBwYWNrYWdlIG9yIHRoZSBUay1iYXNlZCBlbnZpcm9ubWVudCwgSURMRSwgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24uCi1UaGUgY29tbWFuZCBsaW5lIGhpc3RvcnkgcmVjYWxsIHdoaWNoIG9wZXJhdGVzIHdpdGhpbiBET1MgYm94ZXMgb24gTlQgYW5kIHNvbWUKLW90aGVyIERPUyBhbmQgV2luZG93cyBmbGF2b3JzICBpcyB5ZXQgYW5vdGhlciBiZWFzdC4KLQotCi0uLiBfdHV0LWxpbmVlZGl0aW5nOgotCi1MaW5lIEVkaXRpbmcKLT09PT09PT09PT09PQotCi1JZiBzdXBwb3J0ZWQsIGlucHV0IGxpbmUgZWRpdGluZyBpcyBhY3RpdmUgd2hlbmV2ZXIgdGhlIGludGVycHJldGVyIHByaW50cyBhCi1wcmltYXJ5IG9yIHNlY29uZGFyeSBwcm9tcHQuICBUaGUgY3VycmVudCBsaW5lIGNhbiBiZSBlZGl0ZWQgdXNpbmcgdGhlCi1jb252ZW50aW9uYWwgRW1hY3MgY29udHJvbCBjaGFyYWN0ZXJzLiAgVGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGFyZToKLTprYmQ6YEMtQWAgKENvbnRyb2wtQSkgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLCA6a2JkOmBDLUVgCi10byB0aGUgZW5kLCA6a2JkOmBDLUJgIG1vdmVzIGl0IG9uZSBwb3NpdGlvbiB0byB0aGUgbGVmdCwgOmtiZDpgQy1GYCB0byB0aGUKLXJpZ2h0LiAgQmFja3NwYWNlIGVyYXNlcyB0aGUgY2hhcmFjdGVyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJzb3IsIDprYmQ6YEMtRGAgdGhlCi1jaGFyYWN0ZXIgdG8gaXRzIHJpZ2h0LiA6a2JkOmBDLUtgIGtpbGxzIChlcmFzZXMpIHRoZSByZXN0IG9mIHRoZSBsaW5lIHRvIHRoZQotcmlnaHQgb2YgdGhlIGN1cnNvciwgOmtiZDpgQy1ZYCB5YW5rcyBiYWNrIHRoZSBsYXN0IGtpbGxlZCBzdHJpbmcuCi06a2JkOmBDLXVuZGVyc2NvcmVgIHVuZG9lcyB0aGUgbGFzdCBjaGFuZ2UgeW91IG1hZGU7IGl0IGNhbiBiZSByZXBlYXRlZCBmb3IKLWN1bXVsYXRpdmUgZWZmZWN0LgotCi0KLS4uIF90dXQtaGlzdG9yeToKLQotSGlzdG9yeSBTdWJzdGl0dXRpb24KLT09PT09PT09PT09PT09PT09PT09Ci0KLUhpc3Rvcnkgc3Vic3RpdHV0aW9uIHdvcmtzIGFzIGZvbGxvd3MuICBBbGwgbm9uLWVtcHR5IGlucHV0IGxpbmVzIGlzc3VlZCBhcmUKLXNhdmVkIGluIGEgaGlzdG9yeSBidWZmZXIsIGFuZCB3aGVuIGEgbmV3IHByb21wdCBpcyBnaXZlbiB5b3UgYXJlIHBvc2l0aW9uZWQgb24KLWEgbmV3IGxpbmUgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGJ1ZmZlci4gOmtiZDpgQy1QYCBtb3ZlcyBvbmUgbGluZSB1cCAoYmFjaykgaW4KLXRoZSBoaXN0b3J5IGJ1ZmZlciwgOmtiZDpgQy1OYCBtb3ZlcyBvbmUgZG93bi4gIEFueSBsaW5lIGluIHRoZSBoaXN0b3J5IGJ1ZmZlcgotY2FuIGJlIGVkaXRlZDsgYW4gYXN0ZXJpc2sgYXBwZWFycyBpbiBmcm9udCBvZiB0aGUgcHJvbXB0IHRvIG1hcmsgYSBsaW5lIGFzCi1tb2RpZmllZC4gIFByZXNzaW5nIHRoZSA6a2JkOmBSZXR1cm5gIGtleSBwYXNzZXMgdGhlIGN1cnJlbnQgbGluZSB0byB0aGUKLWludGVycHJldGVyLiAgOmtiZDpgQy1SYCBzdGFydHMgYW4gaW5jcmVtZW50YWwgcmV2ZXJzZSBzZWFyY2g7IDprYmQ6YEMtU2Agc3RhcnRzCi1hIGZvcndhcmQgc2VhcmNoLgord2hpY2ggc3VwcG9ydHMgdmFyaW91cyBzdHlsZXMgb2YgZWRpdGluZy4gIFRoaXMgbGlicmFyeSBoYXMgaXRzIG93bgorZG9jdW1lbnRhdGlvbiB3aGljaCB3ZSB3b24ndCBkdXBsaWNhdGUgaGVyZS4KIAogCiAuLiBfdHV0LWtleWJpbmRpbmdzOgogCi1LZXkgQmluZGluZ3MKLT09PT09PT09PT09PQorVGFiIENvbXBsZXRpb24gYW5kIEhpc3RvcnkgRWRpdGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUga2V5IGJpbmRpbmdzIGFuZCBzb21lIG90aGVyIHBhcmFtZXRlcnMgb2YgdGhlIFJlYWRsaW5lIGxpYnJhcnkgY2FuIGJlCi1jdXN0b21pemVkIGJ5IHBsYWNpbmcgY29tbWFuZHMgaW4gYW4gaW5pdGlhbGl6YXRpb24gZmlsZSBjYWxsZWQKLTpmaWxlOmB+Ly5pbnB1dHJjYC4gIEtleSBiaW5kaW5ncyBoYXZlIHRoZSBmb3JtIDo6Ci0KLSAgIGtleS1uYW1lOiBmdW5jdGlvbi1uYW1lCi0KLW9yIDo6Ci0KLSAgICJzdHJpbmciOiBmdW5jdGlvbi1uYW1lCi0KLWFuZCBvcHRpb25zIGNhbiBiZSBzZXQgd2l0aCA6OgotCi0gICBzZXQgb3B0aW9uLW5hbWUgdmFsdWUKLQotRm9yIGV4YW1wbGU6OgotCi0gICAjIEkgcHJlZmVyIHZpLXN0eWxlIGVkaXRpbmc6Ci0gICBzZXQgZWRpdGluZy1tb2RlIHZpCi0KLSAgICMgRWRpdCB1c2luZyBhIHNpbmdsZSBsaW5lOgotICAgc2V0IGhvcml6b250YWwtc2Nyb2xsLW1vZGUgT24KLQotICAgIyBSZWJpbmQgc29tZSBrZXlzOgotICAgTWV0YS1oOiBiYWNrd2FyZC1raWxsLXdvcmQKLSAgICJcQy11IjogdW5pdmVyc2FsLWFyZ3VtZW50Ci0gICAiXEMteFxDLXIiOiByZS1yZWFkLWluaXQtZmlsZQotCi1Ob3RlIHRoYXQgdGhlIGRlZmF1bHQgYmluZGluZyBmb3IgOmtiZDpgVGFiYCBpbiBQeXRob24gaXMgdG8gaW5zZXJ0IGEgOmtiZDpgVGFiYAotY2hhcmFjdGVyIGluc3RlYWQgb2YgUmVhZGxpbmUncyBkZWZhdWx0IGZpbGVuYW1lIGNvbXBsZXRpb24gZnVuY3Rpb24uICBJZiB5b3UKLWluc2lzdCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5IHB1dHRpbmcgOjoKLQotICAgVGFiOiBjb21wbGV0ZQotCi1pbiB5b3VyIDpmaWxlOmB+Ly5pbnB1dHJjYC4gIChPZiBjb3Vyc2UsIHRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIHR5cGUgaW5kZW50ZWQKLWNvbnRpbnVhdGlvbiBsaW5lcyBpZiB5b3UncmUgYWNjdXN0b21lZCB0byB1c2luZyA6a2JkOmBUYWJgIGZvciB0aGF0IHB1cnBvc2UuKQotCi0uLiBpbmRleDo6Ci0gICBtb2R1bGU6IHJsY29tcGxldGVyCi0gICBtb2R1bGU6IHJlYWRsaW5lCi0KLUF1dG9tYXRpYyBjb21wbGV0aW9uIG9mIHZhcmlhYmxlIGFuZCBtb2R1bGUgbmFtZXMgaXMgb3B0aW9uYWxseSBhdmFpbGFibGUuICBUbwotZW5hYmxlIGl0IGluIHRoZSBpbnRlcnByZXRlcidzIGludGVyYWN0aXZlIG1vZGUsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIKLXN0YXJ0dXAgZmlsZTogWyNdXyAgOjoKLQotICAgaW1wb3J0IHJsY29tcGxldGVyLCByZWFkbGluZQotICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ3RhYjogY29tcGxldGUnKQotCi1UaGlzIGJpbmRzIHRoZSA6a2JkOmBUYWJgIGtleSB0byB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiwgc28gaGl0dGluZyB0aGUKLTprYmQ6YFRhYmAga2V5IHR3aWNlIHN1Z2dlc3RzIGNvbXBsZXRpb25zOyBpdCBsb29rcyBhdCBQeXRob24gc3RhdGVtZW50IG5hbWVzLAotdGhlIGN1cnJlbnQgbG9jYWwgdmFyaWFibGVzLCBhbmQgdGhlIGF2YWlsYWJsZSBtb2R1bGUgbmFtZXMuICBGb3IgZG90dGVkCi1leHByZXNzaW9ucyBzdWNoIGFzIGBgc3RyaW5nLmFgYCwgaXQgd2lsbCBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiB1cCB0byB0aGUKLWZpbmFsIGBgJy4nYGAgYW5kIHRoZW4gc3VnZ2VzdCBjb21wbGV0aW9ucyBmcm9tIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZXN1bHRpbmcKLW9iamVjdC4gIE5vdGUgdGhhdCB0aGlzIG1heSBleGVjdXRlIGFwcGxpY2F0aW9uLWRlZmluZWQgY29kZSBpZiBhbiBvYmplY3Qgd2l0aCBhCi06bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uLgotCi1BIG1vcmUgY2FwYWJsZSBzdGFydHVwIGZpbGUgbWlnaHQgbG9vayBsaWtlIHRoaXMgZXhhbXBsZS4gIE5vdGUgdGhhdCB0aGlzCi1kZWxldGVzIHRoZSBuYW1lcyBpdCBjcmVhdGVzIG9uY2UgdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZDsgdGhpcyBpcyBkb25lIHNpbmNlCi10aGUgc3RhcnR1cCBmaWxlIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZHMsCi1hbmQgcmVtb3ZpbmcgdGhlIG5hbWVzIGF2b2lkcyBjcmVhdGluZyBzaWRlIGVmZmVjdHMgaW4gdGhlIGludGVyYWN0aXZlCi1lbnZpcm9ubWVudC4gIFlvdSBtYXkgZmluZCBpdCBjb252ZW5pZW50IHRvIGtlZXAgc29tZSBvZiB0aGUgaW1wb3J0ZWQgbW9kdWxlcywKLXN1Y2ggYXMgOm1vZDpgb3NgLCB3aGljaCB0dXJuIG91dCB0byBiZSBuZWVkZWQgaW4gbW9zdCBzZXNzaW9ucyB3aXRoIHRoZQotaW50ZXJwcmV0ZXIuIDo6Ci0KLSAgICMgQWRkIGF1dG8tY29tcGxldGlvbiBhbmQgYSBzdG9yZWQgaGlzdG9yeSBmaWxlIG9mIGNvbW1hbmRzIHRvIHlvdXIgUHl0aG9uCi0gICAjIGludGVyYWN0aXZlIGludGVycHJldGVyLiBSZXF1aXJlcyBQeXRob24gMi4wKywgcmVhZGxpbmUuIEF1dG9jb21wbGV0ZSBpcwotICAgIyBib3VuZCB0byB0aGUgRXNjIGtleSBieSBkZWZhdWx0ICh5b3UgY2FuIGNoYW5nZSBpdCAtIHNlZSByZWFkbGluZSBkb2NzKS4KLSAgICMKLSAgICMgU3RvcmUgdGhlIGZpbGUgaW4gfi8ucHlzdGFydHVwLCBhbmQgc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHBvaW50Ci0gICAjIHRvIGl0OiAgImV4cG9ydCBQWVRIT05TVEFSVFVQPX4vLnB5c3RhcnR1cCIgaW4gYmFzaC4KLQotICAgaW1wb3J0IGF0ZXhpdAotICAgaW1wb3J0IG9zCi0gICBpbXBvcnQgcmVhZGxpbmUKLSAgIGltcG9ydCBybGNvbXBsZXRlcgotCi0gICBoaXN0b3J5UGF0aCA9IG9zLnBhdGguZXhwYW5kdXNlcigifi8ucHloaXN0b3J5IikKLQotICAgZGVmIHNhdmVfaGlzdG9yeShoaXN0b3J5UGF0aD1oaXN0b3J5UGF0aCk6Ci0gICAgICAgaW1wb3J0IHJlYWRsaW5lCi0gICAgICAgcmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlKGhpc3RvcnlQYXRoKQotCi0gICBpZiBvcy5wYXRoLmV4aXN0cyhoaXN0b3J5UGF0aCk6Ci0gICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdG9yeVBhdGgpCi0KLSAgIGF0ZXhpdC5yZWdpc3RlcihzYXZlX2hpc3RvcnkpCi0gICBkZWwgb3MsIGF0ZXhpdCwgcmVhZGxpbmUsIHJsY29tcGxldGVyLCBzYXZlX2hpc3RvcnksIGhpc3RvcnlQYXRoCitDb21wbGV0aW9uIG9mIHZhcmlhYmxlIGFuZCBtb2R1bGUgbmFtZXMgaXMKKzpyZWY6YGF1dG9tYXRpY2FsbHkgZW5hYmxlZCA8cmxjb21wbGV0ZXItY29uZmlnPmAgYXQgaW50ZXJwcmV0ZXIgc3RhcnR1cCBzbwordGhhdCB0aGUgOmtiZDpgVGFiYCBrZXkgaW52b2tlcyB0aGUgY29tcGxldGlvbiBmdW5jdGlvbjsgaXQgbG9va3MgYXQKK1B5dGhvbiBzdGF0ZW1lbnQgbmFtZXMsIHRoZSBjdXJyZW50IGxvY2FsIHZhcmlhYmxlcywgYW5kIHRoZSBhdmFpbGFibGUKK21vZHVsZSBuYW1lcy4gIEZvciBkb3R0ZWQgZXhwcmVzc2lvbnMgc3VjaCBhcyBgYHN0cmluZy5hYGAsIGl0IHdpbGwgZXZhbHVhdGUKK3RoZSBleHByZXNzaW9uIHVwIHRvIHRoZSBmaW5hbCBgYCcuJ2BgIGFuZCB0aGVuIHN1Z2dlc3QgY29tcGxldGlvbnMgZnJvbQordGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc3VsdGluZyBvYmplY3QuICBOb3RlIHRoYXQgdGhpcyBtYXkgZXhlY3V0ZQorYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGlmIGFuIG9iamVjdCB3aXRoIGEgOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QKK2lzIHBhcnQgb2YgdGhlIGV4cHJlc3Npb24uICBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGFsc28gc2F2ZXMgeW91cgoraGlzdG9yeSBpbnRvIGEgZmlsZSBuYW1lZCA6ZmlsZTpgLnB5dGhvbl9oaXN0b3J5YCBpbiB5b3VyIHVzZXIgZGlyZWN0b3J5LgorVGhlIGhpc3Rvcnkgd2lsbCBiZSBhdmFpbGFibGUgYWdhaW4gZHVyaW5nIHRoZSBuZXh0IGludGVyYWN0aXZlIGludGVycHJldGVyCitzZXNzaW9uLgogCiAKIC4uIF90dXQtY29tbWVudGFyeToKQEAgLTE2MiwxNCArNDksNiBAQAogYnB5dGhvbl8uCiAKIAotLi4gcnVicmljOjogRm9vdG5vdGVzCi0KLS4uIFsjXSBQeXRob24gd2lsbCBleGVjdXRlIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgaWRlbnRpZmllZCBieSB0aGUKLSAgIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4geW91IHN0YXJ0IGFuIGludGVyYWN0aXZlCi0gICBpbnRlcnByZXRlci4gIFRvIGN1c3RvbWl6ZSBQeXRob24gZXZlbiBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUsIHNlZQotICAgOnJlZjpgdHV0LWN1c3RvbWl6ZWAuCi0KLQogLi4gX0dOVSBSZWFkbGluZTogaHR0cDovL3Rpc3d3dy5jYXNlLmVkdS9waHAvY2hldC9yZWFkbGluZS9ybHRvcC5odG1sCiAuLiBfSVB5dGhvbjogaHR0cDovL2lweXRob24uc2NpcHkub3JnLwogLi4gX2JweXRob246IGh0dHA6Ly93d3cuYnB5dGhvbi1pbnRlcnByZXRlci5vcmcvCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAppbmRleCBjZGMyYmYyLi5jMTgyNTExIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKQEAgLTEwLDEzICsxMCwxMyBAQAogSW52b2tpbmcgdGhlIEludGVycHJldGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy4zYAorVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy40YAogb24gdGhvc2UgbWFjaGluZXMgd2hlcmUgaXQgaXMgYXZhaWxhYmxlOyBwdXR0aW5nIDpmaWxlOmAvdXNyL2xvY2FsL2JpbmAgaW4geW91cgogVW5peCBzaGVsbCdzIHNlYXJjaCBwYXRoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN0YXJ0IGl0IGJ5IHR5cGluZyB0aGUgY29tbWFuZDoKIAogLi4gY29kZS1ibG9jazo6IHRleHQKIAotICAgcHl0aG9uMy4zCisgICBweXRob24zLjQKIAogdG8gdGhlIHNoZWxsLiBbI11fIFNpbmNlIHRoZSBjaG9pY2Ugb2YgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgaW50ZXJwcmV0ZXIgbGl2ZXMKIGlzIGFuIGluc3RhbGxhdGlvbiBvcHRpb24sIG90aGVyIHBsYWNlcyBhcmUgcG9zc2libGU7IGNoZWNrIHdpdGggeW91ciBsb2NhbApAQCAtMjQsMTEgKzI0LDExIEBACiBwb3B1bGFyIGFsdGVybmF0aXZlIGxvY2F0aW9uLikKIAogT24gV2luZG93cyBtYWNoaW5lcywgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gaXMgdXN1YWxseSBwbGFjZWQgaW4KLTpmaWxlOmBDOlxcUHl0aG9uMzNgLCB0aG91Z2ggeW91IGNhbiBjaGFuZ2UgdGhpcyB3aGVuIHlvdSdyZSBydW5uaW5nIHRoZQorOmZpbGU6YEM6XFxQeXRob24zNGAsIHRob3VnaCB5b3UgY2FuIGNoYW5nZSB0aGlzIHdoZW4geW91J3JlIHJ1bm5pbmcgdGhlCiBpbnN0YWxsZXIuICBUbyBhZGQgdGhpcyBkaXJlY3RvcnkgdG8geW91ciBwYXRoLCAgeW91IGNhbiB0eXBlIHRoZSBmb2xsb3dpbmcKIGNvbW1hbmQgaW50byB0aGUgY29tbWFuZCBwcm9tcHQgaW4gYSBET1MgYm94OjoKIAotICAgc2V0IHBhdGg9JXBhdGglO0M6XHB5dGhvbjMzCisgICBzZXQgcGF0aD0lcGF0aCU7QzpccHl0aG9uMzQKIAogVHlwaW5nIGFuIGVuZC1vZi1maWxlIGNoYXJhY3RlciAoOmtiZDpgQ29udHJvbC1EYCBvbiBVbml4LCA6a2JkOmBDb250cm9sLVpgIG9uCiBXaW5kb3dzKSBhdCB0aGUgcHJpbWFyeSBwcm9tcHQgY2F1c2VzIHRoZSBpbnRlcnByZXRlciB0byBleGl0IHdpdGggYSB6ZXJvIGV4aXQKQEAgLTk1LDggKzk1LDggQEAKIHByaW50cyBhIHdlbGNvbWUgbWVzc2FnZSBzdGF0aW5nIGl0cyB2ZXJzaW9uIG51bWJlciBhbmQgYSBjb3B5cmlnaHQgbm90aWNlCiBiZWZvcmUgcHJpbnRpbmcgdGhlIGZpcnN0IHByb21wdDo6CiAKLSAgICQgcHl0aG9uMy4zCi0gICBQeXRob24gMy4zIChkZWZhdWx0LCBTZXAgMjQgMjAxMiwgMDk6MjU6MDQpCisgICAkIHB5dGhvbjMuNAorICAgUHl0aG9uIDMuNCAoZGVmYXVsdCwgU2VwIDI0IDIwMTIsIDA5OjI1OjA0KQogICAgW0dDQyA0LjYuM10gb24gbGludXgyCiAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICA+Pj4KQEAgLTE0OSw3ICsxNDksNyBAQAogT24gQlNEJ2lzaCBVbml4IHN5c3RlbXMsIFB5dGhvbiBzY3JpcHRzIGNhbiBiZSBtYWRlIGRpcmVjdGx5IGV4ZWN1dGFibGUsIGxpa2UKIHNoZWxsIHNjcmlwdHMsIGJ5IHB1dHRpbmcgdGhlIGxpbmUgOjoKIAotICAgIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMuMworICAgIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMuNAogCiAoYXNzdW1pbmcgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgb24gdGhlIHVzZXIncyA6ZW52dmFyOmBQQVRIYCkgYXQgdGhlIGJlZ2lubmluZwogb2YgdGhlIHNjcmlwdCBhbmQgZ2l2aW5nIHRoZSBmaWxlIGFuIGV4ZWN1dGFibGUgbW9kZS4gIFRoZSBgYCMhYGAgbXVzdCBiZSB0aGUKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdCBiL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdAppbmRleCAxOTAyOTY0Li45NGE2NmFjIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CkBAIC0yNzgsMjQgKzI3OCwyMyBAQAogICAgPj4+IGRpcihmaWJvKQogICAgWydfX25hbWVfXycsICdmaWInLCAnZmliMiddCiAgICA+Pj4gZGlyKHN5cykgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCi0gICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZWdnaW5zZXJ0JywgJ19fZXhjZXB0aG9va19fJywKLSAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BsZW4nLCAnX19zdGRlcnJfXycsCi0gICAgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywgJ19jbGVhcl90eXBlX2NhY2hlJywgJ19jdXJyZW50X2ZyYW1lcycsCi0gICAgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsICdfaG9tZScsICdfbWVyY3VyaWFsJywgJ194b3B0aW9ucycsCi0gICAgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLCAnYmFzZV9leGVjX3ByZWZpeCcsICdiYXNlX3ByZWZpeCcsCi0gICAgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsICdjYWxsX3RyYWNpbmcnLCAnY2FsbHN0YXRzJywKLSAgICAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywgJ2RvbnRfd3JpdGVfYnl0ZWNvZGUnLCAnZXhjX2luZm8nLAotICAgICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywgJ2V4ZWN1dGFibGUnLCAnZXhpdCcsICdmbGFncycsICdmbG9hdF9pbmZvJywKLSAgICAnZmxvYXRfcmVwcl9zdHlsZScsICdnZXRjaGVja2ludGVydmFsJywgJ2dldGRlZmF1bHRlbmNvZGluZycsCi0gICAgJ2dldGRsb3BlbmZsYWdzJywgJ2dldGZpbGVzeXN0ZW1lbmNvZGluZycsICdnZXRvYmplY3RzJywgJ2dldHByb2ZpbGUnLAotICAgICdnZXRyZWN1cnNpb25saW1pdCcsICdnZXRyZWZjb3VudCcsICdnZXRzaXplb2YnLCAnZ2V0c3dpdGNoaW50ZXJ2YWwnLAotICAgICdnZXR0b3RhbHJlZmNvdW50JywgJ2dldHRyYWNlJywgJ2hhc2hfaW5mbycsICdoZXh2ZXJzaW9uJywKLSAgICAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLCAnaW50ZXJuJywgJ21heHNpemUnLCAnbWF4dW5pY29kZScsCi0gICAgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLCAncGF0aF9ob29rcycsICdwYXRoX2ltcG9ydGVyX2NhY2hlJywKLSAgICAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsICdzZXRjaGVja2ludGVydmFsJywgJ3NldGRsb3BlbmZsYWdzJywKLSAgICAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsICdzZXRzd2l0Y2hpbnRlcnZhbCcsICdzZXR0cmFjZScsCi0gICAgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLCAndGhyZWFkX2luZm8nLCAndmVyc2lvbicsICd2ZXJzaW9uX2luZm8nLAotICAgICd3YXJub3B0aW9ucyddCisgICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZXhjZXB0aG9va19fJywgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAorICAgICdfX3BhY2thZ2VfXycsICdfX3N0ZGVycl9fJywgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywKKyAgICAnX2NsZWFyX3R5cGVfY2FjaGUnLCAnX2N1cnJlbnRfZnJhbWVzJywgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsCisgICAgJ19ob21lJywgJ19tZXJjdXJpYWwnLCAnX3hvcHRpb25zJywgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLAorICAgICdiYXNlX2V4ZWNfcHJlZml4JywgJ2Jhc2VfcHJlZml4JywgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsCisgICAgJ2NhbGxfdHJhY2luZycsICdjYWxsc3RhdHMnLCAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywKKyAgICAnZG9udF93cml0ZV9ieXRlY29kZScsICdleGNfaW5mbycsICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywKKyAgICAnZXhlY3V0YWJsZScsICdleGl0JywgJ2ZsYWdzJywgJ2Zsb2F0X2luZm8nLCAnZmxvYXRfcmVwcl9zdHlsZScsCisgICAgJ2dldGNoZWNraW50ZXJ2YWwnLCAnZ2V0ZGVmYXVsdGVuY29kaW5nJywgJ2dldGRsb3BlbmZsYWdzJywKKyAgICAnZ2V0ZmlsZXN5c3RlbWVuY29kaW5nJywgJ2dldG9iamVjdHMnLCAnZ2V0cHJvZmlsZScsICdnZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ2dldHJlZmNvdW50JywgJ2dldHNpemVvZicsICdnZXRzd2l0Y2hpbnRlcnZhbCcsICdnZXR0b3RhbHJlZmNvdW50JywKKyAgICAnZ2V0dHJhY2UnLCAnaGFzaF9pbmZvJywgJ2hleHZlcnNpb24nLCAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLAorICAgICdpbnRlcm4nLCAnbWF4c2l6ZScsICdtYXh1bmljb2RlJywgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLAorICAgICdwYXRoX2hvb2tzJywgJ3BhdGhfaW1wb3J0ZXJfY2FjaGUnLCAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsCisgICAgJ3NldGNoZWNraW50ZXJ2YWwnLCAnc2V0ZGxvcGVuZmxhZ3MnLCAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ3NldHN3aXRjaGludGVydmFsJywgJ3NldHRyYWNlJywgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLAorICAgICd0aHJlYWRfaW5mbycsICd2ZXJzaW9uJywgJ3ZlcnNpb25faW5mbycsICd3YXJub3B0aW9ucyddCiAKIFdpdGhvdXQgYXJndW1lbnRzLCA6ZnVuYzpgZGlyYCBsaXN0cyB0aGUgbmFtZXMgeW91IGhhdmUgZGVmaW5lZCBjdXJyZW50bHk6OgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdCBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CmluZGV4IDdlN2ExNTQuLjJlM2VkMTggMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CkBAIC0xNSw3ICsxNSw3IEBACiAKICAgID4+PiBpbXBvcnQgb3MKICAgID4+PiBvcy5nZXRjd2QoKSAgICAgICMgUmV0dXJuIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Ci0gICAnQzpcXFB5dGhvbjMzJworICAgJ0M6XFxQeXRob24zNCcKICAgID4+PiBvcy5jaGRpcignL3NlcnZlci9hY2Nlc3Nsb2dzJykgICAjIENoYW5nZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICA+Pj4gb3Muc3lzdGVtKCdta2RpciB0b2RheScpICAgIyBSdW4gdGhlIGNvbW1hbmQgbWtkaXIgaW4gdGhlIHN5c3RlbSBzaGVsbAogICAgMApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0IGIvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CmluZGV4IGMxZGQ2OWEuLmMwMTk3ZWEgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgogICAgICAgIGRbJ3ByaW1hcnknXSAgICAgICAgICAgICAgICAjIGVudHJ5IHdhcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQKLSAgICAgRmlsZSAiQzovcHl0aG9uMzMvbGliL3dlYWtyZWYucHkiLCBsaW5lIDQ2LCBpbiBfX2dldGl0ZW1fXworICAgICBGaWxlICJDOi9weXRob24zNC9saWIvd2Vha3JlZi5weSIsIGxpbmUgNDYsIGluIF9fZ2V0aXRlbV9fCiAgICAgICAgbyA9IHNlbGYuZGF0YVtrZXldKCkKICAgIEtleUVycm9yOiAncHJpbWFyeScKIApkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL2NtZGxpbmUucnN0IGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CmluZGV4IDRlNzE2OGYuLmU4YTMyOWUgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy9jbWRsaW5lLnJzdAorKysgYi9Eb2MvdXNpbmcvY21kbGluZS5yc3QKQEAgLTI0LDcgKzI0LDcgQEAKIAogV2hlbiBpbnZva2luZyBQeXRob24sIHlvdSBtYXkgc3BlY2lmeSBhbnkgb2YgdGhlc2Ugb3B0aW9uczo6CiAKLSAgICBweXRob24gWy1iQmRFaGlPcXNTdXZWV3g/XSBbLWMgY29tbWFuZCB8IC1tIG1vZHVsZS1uYW1lIHwgc2NyaXB0IHwgLSBdIFthcmdzXQorICAgIHB5dGhvbiBbLWJCZEVoaUlPcXNTdXZWV3g/XSBbLWMgY29tbWFuZCB8IC1tIG1vZHVsZS1uYW1lIHwgc2NyaXB0IHwgLSBdIFthcmdzXQogCiBUaGUgbW9zdCBjb21tb24gdXNlIGNhc2UgaXMsIG9mIGNvdXJzZSwgYSBzaW1wbGUgaW52b2NhdGlvbiBvZiBhIHNjcmlwdDo6CiAKQEAgLTE0Nyw3ICsxNDcsMTIgQEAKIAogSWYgbm8gaW50ZXJmYWNlIG9wdGlvbiBpcyBnaXZlbiwgOm9wdGlvbjpgLWlgIGlzIGltcGxpZWQsIGBgc3lzLmFyZ3ZbMF1gYCBpcwogYW4gZW1wdHkgc3RyaW5nIChgYCIiYGApIGFuZCB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBhZGRlZCB0byB0aGUKLXN0YXJ0IG9mIDpkYXRhOmBzeXMucGF0aGAuCitzdGFydCBvZiA6ZGF0YTpgc3lzLnBhdGhgLiAgQWxzbywgdGFiLWNvbXBsZXRpb24gYW5kIGhpc3RvcnkgZWRpdGluZyBpcworYXV0b21hdGljYWxseSBlbmFibGVkLCBpZiBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybSAoc2VlCis6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEF1dG9tYXRpYyBlbmFibGluZyBvZiB0YWItY29tcGxldGlvbiBhbmQgaGlzdG9yeSBlZGl0aW5nLgogCiAuLiBzZWVhbHNvOjogIDpyZWY6YHR1dC1pbnZva2luZ2AKIApAQCAtMTcwLDYgKzE3NSw4IEBACiAgICAgICAgUHl0aG9uIDMuMAogCiAKKy4uIF91c2luZy1vbi1taXNjLW9wdGlvbnM6CisKIE1pc2NlbGxhbmVvdXMgb3B0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTIwOCw2ICsyMTUsMTcgQEAKICAgIHJhaXNlcyBhbiBleGNlcHRpb24uICBTZWUgYWxzbyA6ZW52dmFyOmBQWVRIT05JTlNQRUNUYC4KIAogCisuLiBjbWRvcHRpb246OiAtSQorCisgICBSdW4gUHl0aG9uIGluIGlzb2xhdGVkIG1vZGUuIFRoaXMgYWxzbyBpbXBsaWVzIC1FIGFuZCAtcy4KKyAgIEluIGlzb2xhdGVkIG1vZGUgOmRhdGE6YHN5cy5wYXRoYCBjb250YWlucyBuZWl0aGVyIHRoZSBzY3JpcHQncyBkaXJlY3Rvcnkgbm9yCisgICB0aGUgdXNlcidzIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5LiBBbGwgOmVudnZhcjpgUFlUSE9OKmAgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlcyBhcmUgaWdub3JlZCwgdG9vLiBGdXJ0aGVyIHJlc3RyaWN0aW9ucyBtYXkgYmUgaW1wb3NlZCB0byBwcmV2ZW50CisgICB0aGUgdXNlciBmcm9tIGluamVjdGluZyBtYWxpY2lvdXMgY29kZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gY21kb3B0aW9uOjogLU8KIAogICAgVHVybiBvbiBiYXNpYyBvcHRpbWl6YXRpb25zLiAgVGhpcyBjaGFuZ2VzIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gZm9yCkBAIC0zNTgsOSArMzc2LDE0IEBACiAuLiBjbWRvcHRpb246OiAtWAogCiAgICBSZXNlcnZlZCBmb3IgdmFyaW91cyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBvcHRpb25zLiAgQ1B5dGhvbiBjdXJyZW50bHkKLSAgIGRlZmluZXMganVzdCBvbmUsIHlvdSBjYW4gdXNlIGBgLVggZmF1bHRoYW5kbGVyYGAgdG8gZW5hYmxlCi0gICA6bW9kOmBmYXVsdGhhbmRsZXJgLiBJdCBhbHNvIGFsbG93cyB0byBwYXNzIGFyYml0cmFyeSB2YWx1ZXMgYW5kIHJldHJpZXZlCi0gICB0aGVtIHRocm91Z2ggdGhlIDpkYXRhOmBzeXMuX3hvcHRpb25zYCBkaWN0aW9uYXJ5LgorICAgZGVmaW5lcyB0d28gcG9zc2libGUgdmFsdWVzOgorCisgICAqIGBgLVggZmF1bHRoYW5kbGVyYGAgdG8gZW5hYmxlIDptb2Q6YGZhdWx0aGFuZGxlcmA7CisgICAqIGBgLVggc2hvd3JlZmNvdW50YGAgdG8gZW5hYmxlIHRoZSBvdXRwdXQgb2YgdGhlIHRvdGFsIHJlZmVyZW5jZSBjb3VudAorICAgICBhbmQgbWVtb3J5IGJsb2NrcyAob25seSB3b3JrcyBvbiBkZWJ1ZyBidWlsZHMpOworCisgICBJdCBhbHNvIGFsbG93cyB0byBwYXNzIGFyYml0cmFyeSB2YWx1ZXMgYW5kIHJldHJpZXZlIHRoZW0gdGhyb3VnaCB0aGUKKyAgIDpkYXRhOmBzeXMuX3hvcHRpb25zYCBkaWN0aW9uYXJ5LgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgSXQgaXMgbm93IGFsbG93ZWQgdG8gcGFzcyA6b3B0aW9uOmAtWGAgd2l0aCBDUHl0aG9uLgpAQCAtMzY4LDYgKzM5MSw5IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFRoZSBgYC1YIGZhdWx0aGFuZGxlcmBgIG9wdGlvbi4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgYGAtWCBzaG93cmVmY291bnRgYCBvcHRpb24uCisKIAogT3B0aW9ucyB5b3Ugc2hvdWxkbid0IHVzZQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMzg1LDcgKzQxMSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluZmx1ZW5jZSBQeXRob24ncyBiZWhhdmlvciwgdGhleSBhcmUgcHJvY2Vzc2VkCi1iZWZvcmUgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdGhlciB0aGFuIC1FLiAgSXQgaXMgY3VzdG9tYXJ5IHRoYXQKK2JlZm9yZSB0aGUgY29tbWFuZC1saW5lIHN3aXRjaGVzIG90aGVyIHRoYW4gLUUgb3IgLUkuICBJdCBpcyBjdXN0b21hcnkgdGhhdAogY29tbWFuZC1saW5lIHN3aXRjaGVzIG92ZXJyaWRlIGVudmlyb25tZW50YWwgdmFyaWFibGVzIHdoZXJlIHRoZXJlIGlzIGEKIGNvbmZsaWN0LgogCkBAIC00MzAsNyArNDU2LDcgQEAKICAgIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG5hbWVzcGFjZSB3aGVyZSBpbnRlcmFjdGl2ZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQgc28KICAgIHRoYXQgb2JqZWN0cyBkZWZpbmVkIG9yIGltcG9ydGVkIGluIGl0IGNhbiBiZSB1c2VkIHdpdGhvdXQgcXVhbGlmaWNhdGlvbiBpbgogICAgdGhlIGludGVyYWN0aXZlIHNlc3Npb24uICBZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBwcm9tcHRzIDpkYXRhOmBzeXMucHMxYCBhbmQKLSAgIDpkYXRhOmBzeXMucHMyYCBpbiB0aGlzIGZpbGUuCisgICA6ZGF0YTpgc3lzLnBzMmAgYW5kIHRoZSBob29rIDpkYXRhOmBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX2AgaW4gdGhpcyBmaWxlLgogCiAKIC4uIGVudnZhcjo6IFBZVEhPTlkySwpAQCAtNDg1LDkgKzUxMSw5IEBACiAKIC4uIGVudnZhcjo6IFBZVEhPTkRPTlRXUklURUJZVEVDT0RFCiAKLSAgIElmIHRoaXMgaXMgc2V0LCBQeXRob24gd29uJ3QgdHJ5IHRvIHdyaXRlIGBgLnB5Y2BgIG9yIGBgLnB5b2BgIGZpbGVzIG9uIHRoZQotICAgaW1wb3J0IG9mIHNvdXJjZSBtb2R1bGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgdGhlIDpvcHRpb246YC1CYAotICAgb3B0aW9uLgorICAgSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLCBQeXRob24gd29uJ3QgdHJ5IHRvIHdyaXRlIGBgLnB5Y2BgIG9yCisgICBgYC5weW9gYCBmaWxlcyBvbiB0aGUgaW1wb3J0IG9mIHNvdXJjZSBtb2R1bGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICBzcGVjaWZ5aW5nIHRoZSA6b3B0aW9uOmAtQmAgb3B0aW9uLgogCiAKIC4uIGVudnZhcjo6IFBZVEhPTkhBU0hTRUVECkBAIC01MTIsMTMgKzUzOCwxNiBAQAogLi4gZW52dmFyOjogUFlUSE9OSU9FTkNPRElORwogCiAgICBJZiB0aGlzIGlzIHNldCBiZWZvcmUgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIsIGl0IG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcgdXNlZAotICAgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIsIGluIHRoZSBzeW50YXggYGBlbmNvZGluZ25hbWU6ZXJyb3JoYW5kbGVyYGAuIFRoZQotICAgYGA6ZXJyb3JoYW5kbGVyYGAgcGFydCBpcyBvcHRpb25hbCBhbmQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KLSAgIDpmdW5jOmBzdHIuZW5jb2RlYC4KKyAgIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4IGBgZW5jb2RpbmduYW1lOmVycm9yaGFuZGxlcmBgLiAgQm90aAorICAgdGhlIGBgZW5jb2RpbmduYW1lYGAgYW5kIHRoZSBgYDplcnJvcmhhbmRsZXJgYCBwYXJ0cyBhcmUgb3B0aW9uYWwgYW5kIGhhdmUKKyAgIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmZ1bmM6YHN0ci5lbmNvZGVgLgogCiAgICBGb3Igc3RkZXJyLCB0aGUgYGA6ZXJyb3JoYW5kbGVyYGAgcGFydCBpcyBpZ25vcmVkOyB0aGUgaGFuZGxlciB3aWxsIGFsd2F5cyBiZQogICAgYGAnYmFja3NsYXNocmVwbGFjZSdgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYGVuY29kaW5nbmFtZWBgIHBhcnQgaXMgbm93IG9wdGlvbmFsLgorCiAKIC4uIGVudnZhcjo6IFBZVEhPTk5PVVNFUlNJVEUKIApAQCAtNTU2LDExICs1ODUsMTEgQEAKIAogLi4gZW52dmFyOjogUFlUSE9ORkFVTFRIQU5ETEVSCiAKLSAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCA6ZnVuYzpgZmF1bHRoYW5kbGVyLmVuYWJsZWAgaXMgY2FsbGVkCi0gICBhdCBzdGFydHVwOiBpbnN0YWxsIGEgaGFuZGxlciBmb3IgOmNvbnN0OmBTSUdTRUdWYCwgOmNvbnN0OmBTSUdGUEVgLAotICAgOmNvbnN0OmBTSUdBQlJUYCwgOmNvbnN0OmBTSUdCVVNgIGFuZCA6Y29uc3Q6YFNJR0lMTGAgc2lnbmFscyB0byBkdW1wIHRoZQotICAgUHl0aG9uIHRyYWNlYmFjay4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byA6b3B0aW9uOmAtWGAgYGBmYXVsdGhhbmRsZXJgYAotICAgb3B0aW9uLgorICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLAorICAgOmZ1bmM6YGZhdWx0aGFuZGxlci5lbmFibGVgIGlzIGNhbGxlZCBhdCBzdGFydHVwOiBpbnN0YWxsIGEgaGFuZGxlciBmb3IKKyAgIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwgOmNvbnN0OmBTSUdBQlJUYCwgOmNvbnN0OmBTSUdCVVNgIGFuZAorICAgOmNvbnN0OmBTSUdJTExgIHNpZ25hbHMgdG8gZHVtcCB0aGUgUHl0aG9uIHRyYWNlYmFjay4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgOm9wdGlvbjpgLVhgIGBgZmF1bHRoYW5kbGVyYGAgb3B0aW9uLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL21hYy5yc3QgYi9Eb2MvdXNpbmcvbWFjLnJzdAppbmRleCAzZTFiNzRkLi41YmU0MzlmIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvbWFjLnJzdAorKysgYi9Eb2MvdXNpbmcvbWFjLnJzdApAQCAtMjUsNyArMjUsNyBAQAogCiBXaGF0IHlvdSBnZXQgYWZ0ZXIgaW5zdGFsbGluZyBpcyBhIG51bWJlciBvZiB0aGluZ3M6CiAKLSogQSA6ZmlsZTpgTWFjUHl0aG9uIDMuM2AgZm9sZGVyIGluIHlvdXIgOmZpbGU6YEFwcGxpY2F0aW9uc2AgZm9sZGVyLiBJbiBoZXJlCisqIEEgOmZpbGU6YE1hY1B5dGhvbiAzLjRgIGZvbGRlciBpbiB5b3VyIDpmaWxlOmBBcHBsaWNhdGlvbnNgIGZvbGRlci4gSW4gaGVyZQogICB5b3UgZmluZCBJRExFLCB0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgdGhhdCBpcyBhIHN0YW5kYXJkIHBhcnQgb2Ygb2ZmaWNpYWwKICAgUHl0aG9uIGRpc3RyaWJ1dGlvbnM7IFB5dGhvbkxhdW5jaGVyLCB3aGljaCBoYW5kbGVzIGRvdWJsZS1jbGlja2luZyBQeXRob24KICAgc2NyaXB0cyBmcm9tIHRoZSBGaW5kZXI7IGFuZCB0aGUgIkJ1aWxkIEFwcGxldCIgdG9vbCwgd2hpY2ggYWxsb3dzIHlvdSB0bwpAQCAtOTMsNyArOTMsNyBAQAogYW55dGhpbmcgdGhhdCBoYXMgYSBHVUkpIG5lZWQgdG8gYmUgcnVuIGluIGEgc3BlY2lhbCB3YXkuIFVzZSA6cHJvZ3JhbTpgcHl0aG9ud2AKIGluc3RlYWQgb2YgOnByb2dyYW06YHB5dGhvbmAgdG8gc3RhcnQgc3VjaCBzY3JpcHRzLgogCi1XaXRoIFB5dGhvbiAzLjMsIHlvdSBjYW4gdXNlIGVpdGhlciA6cHJvZ3JhbTpgcHl0aG9uYCBvciA6cHJvZ3JhbTpgcHl0aG9ud2AuCitXaXRoIFB5dGhvbiAzLjQsIHlvdSBjYW4gdXNlIGVpdGhlciA6cHJvZ3JhbTpgcHl0aG9uYCBvciA6cHJvZ3JhbTpgcHl0aG9ud2AuCiAKIAogQ29uZmlndXJhdGlvbgpAQCAtMTU4LDcgKzE1OCw3IEBACiBEaXN0cmlidXRpbmcgUHl0aG9uIEFwcGxpY2F0aW9ucyBvbiB0aGUgTWFjCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSAiQnVpbGQgQXBwbGV0IiB0b29sIHRoYXQgaXMgcGxhY2VkIGluIHRoZSBNYWNQeXRob24gMy4zIGZvbGRlciBpcyBmaW5lIGZvcgorVGhlICJCdWlsZCBBcHBsZXQiIHRvb2wgdGhhdCBpcyBwbGFjZWQgaW4gdGhlIE1hY1B5dGhvbiAzLjQgZm9sZGVyIGlzIGZpbmUgZm9yCiBwYWNrYWdpbmcgc21hbGwgUHl0aG9uIHNjcmlwdHMgb24geW91ciBvd24gbWFjaGluZSB0byBydW4gYXMgYSBzdGFuZGFyZCBNYWMKIGFwcGxpY2F0aW9uLiBUaGlzIHRvb2wsIGhvd2V2ZXIsIGlzIG5vdCByb2J1c3QgZW5vdWdoIHRvIGRpc3RyaWJ1dGUgUHl0aG9uCiBhcHBsaWNhdGlvbnMgdG8gb3RoZXIgdXNlcnMuCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jIGIvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYwppbmRleCA1ZmRiYzliLi43MDZhYzVkIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jCisrKyBiL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMKQEAgLTU2LDIwICs1NiwyMSBAQAogcHJvdmlkZWQgcGF0aC4KIAogT25jZSBhIHZlbnYgaGFzIGJlZW4gY3JlYXRlZCwgaXQgY2FuIGJlICJhY3RpdmF0ZWQiIHVzaW5nIGEgc2NyaXB0IGluIHRoZQotdmVudidzIGJpbmFyeSBkaXJlY3RvcnkuIFRoZSBpbnZvY2F0aW9uIG9mIHRoZSBzY3JpcHQgaXMgcGxhdGZvcm0tc3BlY2lmaWM6IG9uCi1hIFBvc2l4IHBsYXRmb3JtLCB5b3Ugd291bGQgdHlwaWNhbGx5IGRvOjoKK3ZlbnYncyBiaW5hcnkgZGlyZWN0b3J5LiBUaGUgaW52b2NhdGlvbiBvZiB0aGUgc2NyaXB0IGlzIHBsYXRmb3JtLXNwZWNpZmljOgogCi0gICAgJCBzb3VyY2UgPHZlbnY+L2Jpbi9hY3RpdmF0ZQotCi13aGVyZWFzIG9uIFdpbmRvd3MsIHlvdSBtaWdodCBkbzo6Ci0KLSAgICBDOlw+IDx2ZW52Pi9TY3JpcHRzL2FjdGl2YXRlCi0KLWlmIHlvdSBhcmUgdXNpbmcgdGhlIGBgY21kLmV4ZWBgIHNoZWxsLCBvciBwZXJoYXBzOjoKLQotICAgIFBTIEM6XD4gPHZlbnY+L1NjcmlwdHMvQWN0aXZhdGUucHMxCi0KLWlmIHlvdSB1c2UgUG93ZXJTaGVsbC4KKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBQbGF0Zm9ybSAgICB8IFNoZWxsICAgICAgICAgICB8IENvbW1hbmQgdG8gYWN0aXZhdGUgdmlydHVhbCBlbnZpcm9ubWVudCB8CisrPT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgUG9zaXggICAgICAgfCBiYXNoL3pzaCAgICAgICAgfCAkIHNvdXJjZSA8dmVudj4vYmluL2FjdGl2YXRlICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgIHwgZmlzaCAgICAgICAgICAgIHwgJCAuIDx2ZW52Pi9iaW4vYWN0aXZhdGUuZmlzaCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICB8IGNzaC90Y3NoICAgICAgICB8ICQgc291cmNlIDx2ZW52Pi9iaW4vYWN0aXZhdGUuY3NoICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgV2luZG93cyAgICAgfCBjbWQuZXhlICAgICAgICAgfCBDOlw+IDx2ZW52Pi9TY3JpcHRzL2FjdGl2YXRlLmJhdCAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgIHwgUG93ZXJTaGVsbCAgICAgIHwgUFMgQzpcPiA8dmVudj4vU2NyaXB0cy9BY3RpdmF0ZS5wczEgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiBZb3UgZG9uJ3Qgc3BlY2lmaWNhbGx5ICpuZWVkKiB0byBhY3RpdmF0ZSBhbiBlbnZpcm9ubWVudDsgYWN0aXZhdGlvbiBqdXN0CiBwcmVwZW5kcyB0aGUgdmVudidzIGJpbmFyeSBkaXJlY3RvcnkgdG8geW91ciBwYXRoLCBzbyB0aGF0ICJweXRob24iIGludm9rZXMgdGhlCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy40LnJzdCBiL0RvYy93aGF0c25ldy8zLjQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzBhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2Mvd2hhdHNuZXcvMy40LnJzdApAQCAtMCwwICsxLDgxNCBAQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBXaGF0J3MgTmV3IEluIFB5dGhvbiAzLjQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLi4gOkF1dGhvcjogU29tZW9uZSA8ZW1haWw+CisgICAodW5jb21tZW50IGlmIHRoZXJlIGlzIGEgcHJpbmNpcGFsIGF1dGhvcikKKworLi4gUnVsZXMgZm9yIG1haW50ZW5hbmNlOgorCisgICAqIEFueW9uZSBjYW4gYWRkIHRleHQgdG8gdGhpcyBkb2N1bWVudCwgYnV0IHRoZSBtYWludGFpbmVyIHJlc2VydmVzIHRoZQorICAgcmlnaHQgdG8gcmV3cml0ZSBhbnkgYWRkaXRpb25zLiBJbiBwYXJ0aWN1bGFyLCBmb3Igb2JzY3VyZSBvciBlc290ZXJpYworICAgZmVhdHVyZXMsIHRoZSBtYWludGFpbmVyIG1heSByZWR1Y2UgYW55IGFkZGl0aW9uIHRvIGEgc2ltcGxlIHJlZmVyZW5jZSB0bworICAgdGhlIG5ldyBkb2N1bWVudGF0aW9uIHJhdGhlciB0aGFuIGV4cGxhaW5pbmcgdGhlIGZlYXR1cmUgaW5saW5lLgorCisgICAqIFdoaWxlIHRoZSBtYWludGFpbmVyIHdpbGwgcGVyaW9kaWNhbGx5IGdvIHRocm91Z2ggTWlzYy9ORVdTCisgICBhbmQgYWRkIGNoYW5nZXMsIGl0J3MgYmVzdCBub3QgdG8gcmVseSBvbiB0aGlzLiBXZSBrbm93IGZyb20gZXhwZXJpZW5jZQorICAgdGhhdCBhbnkgY2hhbmdlcyB0aGF0IGFyZW4ndCBpbiB0aGUgV2hhdCdzIE5ldyBkb2N1bWVudGF0aW9uIGFyb3VuZCB0aGUKKyAgIHRpbWUgb2YgdGhlIG9yaWdpbmFsIHJlbGVhc2Ugd2lsbCByZW1haW4gbGFyZ2VseSB1bmtub3duIHRvIHRoZSBjb21tdW5pdHkKKyAgIGZvciB5ZWFycywgZXZlbiBpZiB0aGV5J3JlIGFkZGVkIGxhdGVyLiBXZSBhbHNvIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQKKyAgIG90aGVyIHByaW9yaXRpZXMgY2FuIGFyaXNlLCBhbmQgdGhlIG1haW50YWluZXIgd2lsbCBydW4gb3V0IG9mIHRpbWUgdG8gZG8KKyAgIHVwZGF0ZXMgLSBpbiBzdWNoIGNhc2VzLCBlbmQgdXNlcnMgd2lsbCBiZSBtdWNoIGJldHRlciBzZXJ2ZWQgYnkgcGFydGlhbAorICAgbm90aWZpY2F0aW9ucyB0aGF0IGF0IGxlYXN0IGdpdmUgYSBoaW50IGFib3V0IG5ldyBmZWF0dXJlcyB0bworICAgaW52ZXN0aWdhdGUuCisKKyAgICogVGhpcyBpcyBub3QgYSBjb21wbGV0ZSBsaXN0IG9mIGV2ZXJ5IHNpbmdsZSBjaGFuZ2U7IGNvbXBsZXRlbmVzcworICAgaXMgdGhlIHB1cnBvc2Ugb2YgTWlzYy9ORVdTLiBUaGUgV2hhdCdzIE5ldyBzaG91bGQgZm9jdXMgb24gY2hhbmdlcyB0aGF0CisgICBhcmUgdmlzaWJsZSB0byBQeXRob24gKnVzZXJzKiBhbmQgdGhhdCAqcmVxdWlyZSogYSBmZWF0dXJlIHJlbGVhc2UgKGkuZS4KKyAgIG1vc3QgYnVnIGZpeGVzIHNob3VsZCBvbmx5IGJlIHJlY29yZGVkIGluIE1pc2MvTkVXUykKKworICAgKiBQRVBzIHNob3VsZCBub3QgYmUgbWFya2VkIEZpbmFsIHVudGlsIHRoZXkgaGF2ZSBhbiBlbnRyeSBpbiBXaGF0J3MgTmV3LgorICAgQSBwbGFjZWhvbGRlciBlbnRyeSB0aGF0IGlzIGp1c3QgYSBzZWN0aW9uIGhlYWRlciBhbmQgYSBsaW5rIHRvIHRoZSBQRVAKKyAgIChlLmcgIjpwZXA6YDM5N2AgaGFzIGJlZW4gaW1wbGVtZW50ZWQiKSBpcyBhY2NlcHRhYmxlLiBJZiBhIFBFUCBoYXMgYmVlbgorICAgaW1wbGVtZW50ZWQgYW5kIG5vdGVkIGluIFdoYXQncyBOZXcsIGRvbid0IGZvcmdldCB0byBtYXJrIGl0IGFzIEZpbmFsIQorCisgICAqIElmIHlvdSB3YW50IHRvIGRyYXcgeW91ciBuZXcgdGV4dCB0byB0aGUgYXR0ZW50aW9uIG9mIHRoZQorICAgbWFpbnRhaW5lciwgYWRkICdYWFgnIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcmFncmFwaCBvcgorICAgc2VjdGlvbi4KKworICAgKiBJdCdzIE9LIHRvIGFkZCBqdXN0IGEgdmVyeSBicmllZiBub3RlIGFib3V0IGEgY2hhbmdlLiAgRm9yCisgICBleGFtcGxlOiAiVGhlIDpyZWY6YH5zb2NrZXQudHJhbnNtb2dyaWZ5KClgIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byB0aGUKKyAgIDptb2Q6YHNvY2tldGAgbW9kdWxlLiIgIFRoZSBtYWludGFpbmVyIHdpbGwgcmVzZWFyY2ggdGhlIGNoYW5nZSBhbmQKKyAgIHdyaXRlIHRoZSBuZWNlc3NhcnkgdGV4dCAoaWYgYXBwcm9wcmlhdGUpLiBUaGUgYWR2YW50YWdlIG9mIGRvaW5nIHRoaXMKKyAgIGlzIHRoYXQgZXZlbiBpZiBubyBtb3JlIGRlc2NyaXB0aXZlIHRleHQgaXMgZXZlciBhZGRlZCwgcmVhZGVycyB3aWxsIGF0CisgICBsZWFzdCBoYXZlIGEgbm90aWZpY2F0aW9uIHRoYXQgdGhlIG5ldyBmZWF0dXJlIGV4aXN0cyBhbmQgYSBsaW5rIHRvIHRoZQorICAgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi4KKworICAgKiBZb3UgY2FuIGNvbW1lbnQgb3V0IHlvdXIgYWRkaXRpb25zIGlmIHlvdSBsaWtlLCBidXQgaXQncyBub3QKKyAgIG5lY2Vzc2FyeSAoZXNwZWNpYWxseSB3aGVuIGEgZmluYWwgcmVsZWFzZSBpcyBzb21lIG1vbnRocyBhd2F5KS4KKworICAgKiBDcmVkaXQgdGhlIGF1dGhvciBvZiBhIHBhdGNoIG9yIGJ1Z2ZpeC4gICBKdXN0IHRoZSBuYW1lIGlzCisgICBzdWZmaWNpZW50OyB0aGUgZS1tYWlsIGFkZHJlc3MgaXNuJ3QgbmVjZXNzYXJ5LgorCisgICAqIEl0J3MgaGVscGZ1bCB0byBhZGQgdGhlIGJ1Zy9wYXRjaCBudW1iZXIgYXMgYSBjb21tZW50OgorCisgICBUaGUgOnJlZjpgfnNvY2tldC50cmFuc21vZ3JpZnkoKWAgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIHRoZQorICAgOm1vZDpgc29ja2V0YCBtb2R1bGUuIChDb250cmlidXRlZCBieSBQLlkuIERldmVsb3BlciBpbiA6aXNzdWU6YDEyMzQ1YC4pCisKKyAgIFRoaXMgc2F2ZXMgdGhlIG1haW50YWluZXIgdGhlIGVmZm9ydCBvZiBnb2luZyB0aHJvdWdoIHRoZSBNZXJjdXJpYWwgbG9nCisgICB3aGVuIHJlc2VhcmNoaW5nIGEgY2hhbmdlLgorCisgICAqIENyb3NzIHJlZmVyZW5jaW5nIHRpcDogOnJlZjpgbW9kLmF0dHJgIHdpbGwgZGlzcGxheSBhcyBgYG1vZC5hdHRyYGAsCisgICB3aGlsZSA6cmVmOmB+bW9kLmF0dHJgIHdpbGwgZGlzcGxheSBhcyBgYGF0dHJgYC4KKworVGhpcyBhcnRpY2xlIGV4cGxhaW5zIHRoZSBuZXcgZmVhdHVyZXMgaW4gUHl0aG9uIDMuNCwgY29tcGFyZWQgdG8gMy4zLgorCisuLiBQeXRob24gMy40IHdhcyByZWxlYXNlZCBvbiBUQkQuCisKK0ZvciBmdWxsIGRldGFpbHMsIHNlZSB0aGUKK2BjaGFuZ2Vsb2cgPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L3doYXRzbmV3L2NoYW5nZWxvZy5odG1sPmBfLgorCisuLiBub3RlOjogUHJlcmVsZWFzZSB1c2VycyBzaG91bGQgYmUgYXdhcmUgdGhhdCB0aGlzIGRvY3VtZW50IGlzIGN1cnJlbnRseSBpbgorICAgZHJhZnQgZm9ybS4gSXQgd2lsbCBiZSB1cGRhdGVkIHN1YnN0YW50aWFsbHkgYXMgUHl0aG9uIDMuNCBtb3ZlcyB0b3dhcmRzCisgICByZWxlYXNlLCBzbyBpdCdzIHdvcnRoIGNoZWNraW5nIGJhY2sgZXZlbiBhZnRlciByZWFkaW5nIGVhcmxpZXIgdmVyc2lvbnMuCisKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQyOWAgLSBQeXRob24gMy40IFJlbGVhc2UgU2NoZWR1bGUKKworCitTdW1tYXJ5IC0tIFJlbGVhc2UgaGlnaGxpZ2h0cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gVGhpcyBzZWN0aW9uIHNpbmdsZXMgb3V0IHRoZSBtb3N0IGltcG9ydGFudCBjaGFuZ2VzIGluIFB5dGhvbiAzLjQuCisgICBCcmV2aXR5IGlzIGtleS4KKworTmV3IHN5bnRheCBmZWF0dXJlczoKKworKiBObyBuZXcgc3ludGF4IGZlYXR1cmVzIGFyZSBwbGFubmVkIGZvciBQeXRob24gMy40LgorCitOZXcgbGlicmFyeSBtb2R1bGVzOgorCisqIDptb2Q6YGFzeW5jaW9gOiBOZXcgcHJvdmlzb25hbCBBUEkgZm9yIGFzeW5jaHJvbm91cyBJTyAoOnBlcDpgMzE1NmApLgorKiA6bW9kOmBlbnVtYDogU3VwcG9ydCBmb3IgZW51bWVyYXRpb24gdHlwZXMgKDpwZXA6YDQzNWApLgorKiA6bW9kOmBzZWxlY3RvcnNgOiBIaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKKyAgOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4KKyogOm1vZDpgc3RhdGlzdGljc2A6IEEgYmFzaWMgbnVtZXJpY2FsbHkgc3RhYmxlIHN0YXRpc3RpY3MgbGlicmFyeSAoOnBlcDpgNDUwYCkuCisKK05ldyBleHBlY3RlZCBmZWF0dXJlcyBmb3IgUHl0aG9uIGltcGxlbWVudGF0aW9uczoKKworKiA6cmVmOmBQRVAgNDQ2OiBNYWtlIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyBub24taW5oZXJpdGFibGUgPHBlcC00NDY+YC4KKyogY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgOnJlZjpgaXNvbGF0ZWQgbW9kZSA8dXNpbmctb24tbWlzYy1vcHRpb25zPmAsCisgICg6aXNzdWU6YDE2NDk5YCkuCisKK1NpZ25pZmljYW50bHkgSW1wcm92ZWQgTGlicmFyeSBNb2R1bGVzOgorCisqIFNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyBpbiA6bW9kOmBmdW5jdG9vb2xzYCAoOnBlcDpgNDQzYCkKKyogU0hBLTMgKEtlY2Nhaykgc3VwcG9ydCBmb3IgOm1vZDpgaGFzaGxpYmAuCisqIFRMU3YxLjEgYW5kIFRMU3YxLjIgc3VwcG9ydCBmb3IgOm1vZDpgc3NsYC4KKyogOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBub3cgaGFzIG9wdGlvbiB0byBhdm9pZCB1c2luZyA6ZnVuYzpgb3MuZm9ya2AKKyAgb24gVW5peCAoOmlzc3VlOmA4NzEzYCkuCisKK0NQeXRob24gaW1wbGVtZW50YXRpb24gaW1wcm92ZW1lbnRzOgorCisqIDpyZWY6YFBFUCA0NDI6IFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbiA8cGVwLTQ0Mj5gCisqIDpyZWY6YFBFUCA0NDU6IENvbmZpZ3VyYWJsZSBtZW1vcnkgYWxsb2NhdG9ycyA8cGVwLTQ0NT5gCisqIEltcHJvdmUgZmluYWxpemF0aW9uIG9mIFB5dGhvbiBtb2R1bGVzIHRvIGF2b2lkIHNldHRpbmcgdGhlaXIgZ2xvYmFscworICB0byBOb25lLCBpbiBtb3N0IGNhc2VzICg6aXNzdWU6YDE4MjE0YCkuCisqIEEgbW9yZSBlZmZpY2llbnQgOm1vZDpgbWFyc2hhbGAgZm9ybWF0ICg6aXNzdWU6YDE2NDc1YCkuCisqICJBcmd1bWVudCBDbGluaWMiLCBhbiBpbml0aWFsIHN0ZXAgdG93YXJkcyBwcm92aWRpbmcgaW1wcm92ZWQgaW50cm9zcGVjdGlvbgorICBzdXBwb3J0IGZvciBidWlsdGluIGFuZCBzdGFuZGFyZCBsaWJyYXJ5IGV4dGVuc2lvbiB0eXBlcyBpbXBsZW1lbnRlZCBpbiBDCisgICg6cGVwOmA0MzZgKQorCitQbGVhc2UgcmVhZCBvbiBmb3IgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdXNlci1mYWNpbmcgY2hhbmdlcy4KKworLi4gX3BlcC00NDY6CisKK1BFUCA0NDY6IE1ha2UgbmV3bHkgY3JlYXRlZCBmaWxlIGRlc2NyaXB0b3JzIG5vbi1pbmhlcml0YWJsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzpwZXA6YDQ0NmAgbWFrZXMgbmV3bHkgY3JlYXRlZCBmaWxlIGRlc2NyaXB0b3JzIDpyZWY6YG5vbi1pbmhlcml0YWJsZQorPGZkX2luaGVyaXRhbmNlPmAuICBOZXcgZnVuY3Rpb25zIGFuZCBtZXRob2RzOgorCisqIDpmdW5jOmBvcy5nZXRfaW5oZXJpdGFibGVgLCA6ZnVuYzpgb3Muc2V0X2luaGVyaXRhYmxlYAorKiA6ZnVuYzpgb3MuZ2V0X2hhbmRsZV9pbmhlcml0YWJsZWAsIDpmdW5jOmBvcy5zZXRfaGFuZGxlX2luaGVyaXRhYmxlYAorKiA6bWV0aDpgc29ja2V0LnNvY2tldC5nZXRfaW5oZXJpdGFibGVgLCA6bWV0aDpgc29ja2V0LnNvY2tldC5zZXRfaW5oZXJpdGFibGVgCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDZgIC0gTWFrZSBuZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgbm9uLWluaGVyaXRhYmxlCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgVmljdG9yIFN0aW5uZXIuCisKKworT3RoZXIgTGFuZ3VhZ2UgQ2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PQorCitTb21lIHNtYWxsZXIgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb3JlIFB5dGhvbiBsYW5ndWFnZSBhcmU6CisKKyogVW5pY29kZSBkYXRhYmFzZSB1cGRhdGVkIHRvIFVDRCB2ZXJzaW9uIDYuMy4KKworKiA6ZnVuYzpgbWluYCBhbmQgOmZ1bmM6YG1heGAgbm93IGFjY2VwdCBhICpkZWZhdWx0KiBhcmd1bWVudCB0aGF0IGNhbiBiZSB1c2VkCisgIHRvIHNwZWNpZnkgdGhlIHZhbHVlIHRoZXkgcmV0dXJuIGlmIHRoZSBpdGVyYWJsZSB0aGV5IGFyZSBldmFsdWF0aW5nIGhhcyBubworICBlbGVtZW50cy4gIENvbnRyaWJ1dGVkIGJ5IEp1bGlhbiBCZXJtYW4gaW4gOmlzc3VlOmAxODExMWAuCisKKyogTW9kdWxlIG9iamVjdHMgYXJlIG5vdyA6bW9kOmB3ZWFrcmVmYCdhYmxlLgorCisqIE1vZHVsZSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlcyAoYW5kIHJlbGF0ZWQgdmFsdWVzKSBzaG91bGQgbm93IGFsd2F5cworICBjb250YWluIGFic29sdXRlIHBhdGhzIGJ5IGRlZmF1bHQsIHdpdGggdGhlIHNvbGUgZXhjZXB0aW9uIG9mCisgIGBgX19tYWluX18uX19maWxlX19gYCB3aGVuIGEgc2NyaXB0IGhhcyBiZWVuIGV4ZWN1dGVkIGRpcmVjdGx5IHVzaW5nCisgIGEgcmVsYXRpdmUgcGF0aCAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTg0MTZgKS4KKworCitOZXcgTW9kdWxlcworPT09PT09PT09PT0KKworCithc3luY2lvCistLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgYXN5bmNpb2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDMxNTZgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitwbHVnZ2FibGUgZXZlbnQgbG9vcCBtb2RlbCBmb3IgUHl0aG9uLCBwcm92aWRpbmcgc29saWQgYXN5bmNocm9ub3VzIElPCitzdXBwb3J0IGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCBhbmQgbWFraW5nIGl0IGVhc2llciBmb3Igb3RoZXIgZXZlbnQgbG9vcAoraW1wbGVtZW50YXRpb25zIHRvIGludGVyb3BlcmF0ZSB3aXRoIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBlYWNoIG90aGVyLgorCitGb3IgUHl0aG9uIDMuNCwgdGhpcyBtb2R1bGUgaXMgY29uc2lkZXJlZCBhIDp0ZXJtOmBwcm92aXNpb25hbCBBUElgLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzE1NmAgLSBBc3luY2hyb25vdXMgSU8gU3VwcG9ydCBSZWJvb3RlZDogdGhlICJhc3luY2lvIiBNb2R1bGUKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRhdGlvbiBsZWQgYnkgR3VpZG8gdmFuIFJvc3N1bS4KKworZW51bQorLS0tLQorCitUaGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0MzVgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitpbXBsZW1lbnRhdGlvbiBvZiBlbnVtZXJhdGlvbiB0eXBlcywgYWxsb3dpbmcgb3RoZXIgbW9kdWxlcyAoc3VjaCBhcworOm1vZDpgc29ja2V0YCkgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VzIGFuZCBiZXR0ZXIKK2RlYnVnZ2luZyBzdXBwb3J0IGJ5IHJlcGxhY2luZyBvcGFxdWUgaW50ZWdlciBjb25zdGFudHMgd2l0aCBiYWNrd2FyZHMKK2NvbXBhdGlibGUgZW51bWVyYXRpb24gdmFsdWVzLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDM1YCAtIEFkZGluZyBhbiBFbnVtIHR5cGUgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5CisgICAgICBQRVAgd3JpdHRlbiBieSBCYXJyeSBXYXJzYXcsIEVsaSBCZW5kZXJza3kgYW5kIEV0aGFuIEZ1cm1hbiwKKyAgICAgIGltcGxlbWVudGVkIGJ5IEV0aGFuIEZ1cm1hbi4KKworCitzZWxlY3RvcnMKKy0tLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YHNlbGVjdG9yc2AgbW9kdWxlIChjcmVhdGVkIGFzIHBhcnQgb2YgaW1wbGVtZW50aW5nIDpwZXA6YDMxNTZgKQorYWxsb3dzIGhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZQorOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4KKworCitzdGF0aXN0aWNzCistLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgc3RhdGlzdGljc2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQ1MGApIG9mZmVycyBzb21lIGNvcmUKK3N0YXRpc3RpY3MgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4gVGhpcyBtb2R1bGUKK3N1cHBvcnRzIGNhbGN1bGF0aW9uIG9mIHRoZSBtZWFuLCBtZWRpYW4sIG1vZGUsIHZhcmlhbmNlIGFuZCBzdGFuZGFyZAorZGV2aWF0aW9uIG9mIGEgZGF0YSBzZXJpZXMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTBgIC0gQWRkaW5nIEEgU3RhdGlzdGljcyBNb2R1bGUgVG8gVGhlIFN0YW5kYXJkIExpYnJhcnkKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBTdGV2ZW4gRCdBcHJhbm8KKworCitJbXByb3ZlZCBNb2R1bGVzCis9PT09PT09PT09PT09PT09CisKK2FpZmMKKy0tLS0KKworVGhlIDptZXRoOmB+YWlmYy5nZXRwYXJhbXNgIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4gYQorcGxhaW4gdHVwbGUuICAoQ29udHJpYnV0ZWQgYnkgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTc4MThgLikKKworCithdWRpb29wCistLS0tLS0tCisKK0FkZGVkIHN1cHBvcnQgZm9yIDI0LWJpdCBzYW1wbGVzICg6aXNzdWU6YDEyODY2YCkuCisKKworY29kZWNzCistLS0tLS0KKworVGhlIDptZXRoOmBjb2RlY3MuZW5jb2RlYCBhbmQgOm1ldGg6YGNvZGVjcy5kZWNvZGVgIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBhcmUKK25vdyBwcm9wZXJseSBkb2N1bWVudGVkLiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBleGlzdGVkIGluIHRoZSA6bW9kOmBjb2RlY3NgCittb2R1bGUgc2luY2UgfjIwMDQsIGJ1dCB3ZXJlIHByZXZpb3VzbHkgb25seSBkaXNjb3ZlcmFibGUgdGhyb3VnaCBydW50aW1lCitpbnRyb3NwZWN0aW9uLgorCitVbmxpa2UgdGhlIGNvbnZlbmllbmNlIG1ldGhvZHMgb24gOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGJ5dGVzYCBhbmQKKzpjbGFzczpgYnl0ZWFycmF5YCwgdGhlc2UgY29udmVuaWVuY2UgZnVuY3Rpb25zIHN1cHBvcnQgYXJiaXRyYXJ5IGNvZGVjcywKK3JhdGhlciB0aGFuIGJlaW5nIGxpbWl0ZWQgdG8gVW5pY29kZSB0ZXh0IGVuY29kaW5ncy4KKworCitjb2xvcnN5cworLS0tLS0tLS0KKworVGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGNvZWZmaWNpZW50cyBmb3IgdGhlIFJHQiAtLS0gWUlRIGNvbnZlcnNpb25zIGhhdmUKK2JlZW4gZXhwYW5kZWQgc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBGQ0MgTlRTQyB2ZXJzaW9ucy4gIFRoZSBjaGFuZ2UgaW4KK3Jlc3VsdHMgc2hvdWxkIGJlIGxlc3MgdGhhbiAxJSBhbmQgbWF5IGJldHRlciBtYXRjaCByZXN1bHRzIGZvdW5kIGVsc2V3aGVyZS4KKworCitjb250ZXh0bGliCistLS0tLS0tLS0tCisKK1RoZSBuZXcgOmNsYXNzOmBjb250ZXh0bGliLnN1cHByZXNzYCBjb250ZXh0IG1hbmFnZXIgaGVscHMgdG8gY2xhcmlmeSB0aGUKK2ludGVudCBvZiBjb2RlIHRoYXQgZGVsaWJlcmF0ZWx5IHN1cHByZXNzZXMgZXhjZXB0aW9ucyBmcm9tIGEgc2luZ2xlCitzdGF0ZW1lbnQuIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbiA6aXNzdWU6YDE1ODA2YCBhbmQKK1plcm8gUGlyYWV1cyBpbiA6aXNzdWU6YDE5MjY2YCkKKworVGhlIG5ldyA6ZnVuYzpgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXRgIGNvbnRleHQgbWFuYWdlciBtYWtlcyBpdCBlYXNpZXIKK2ZvciB1dGlsaXR5IHNjcmlwdHMgdG8gaGFuZGxlIGluZmxleGlibGUgQVBJcyB0aGF0IGRvbid0IHByb3ZpZGUgYW55CitvcHRpb25zIHRvIHJldHJpZXZlIHRoZWlyIG91dHB1dCBhcyBhIHN0cmluZyBvciBkaXJlY3QgaXQgdG8gc29tZXdoZXJlCitvdGhlciB0aGFuIDpkYXRhOmBzeXMuc3Rkb3V0YC4gSW4gY29uanVuY3Rpb24gd2l0aCA6Y2xhc3M6YGlvLlN0cmluZ0lPYCwKK3RoaXMgY29udGV4dCBtYW5hZ2VyIGlzIGFsc28gdXNlZnVsIGZvciBjaGVja2luZyBleHBlY3RlZCBvdXRwdXQgZnJvbQorY29tbWFuZCBsaW5lIHV0aWxpdGllcy4gKENvbnRyaWJ1dGUgYnkgUmF5bW9uZCBIZXR0aW5nZXIgaW4gOmlzc3VlOmAxNTgwNWApCisKK1RoZSA6bW9kOmBjb250ZXh0bGliYCBkb2N1bWVudGF0aW9uIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBpbmNsdWRlIGEKKzpyZWY6YGRpc2N1c3Npb24gPHNpbmdsZS11c2UtcmV1c2FibGUtYW5kLXJlZW50cmFudC1jbXM+YCBvZiB0aGUKK2RpZmZlcmVuY2VzIGJldHdlZW4gc2luZ2xlIHVzZSwgcmV1c2FibGUgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzLgorCisKK2RpcworLS0tCisKK1RoZSA6bW9kOmBkaXNgIG1vZHVsZSBpcyBub3cgYnVpbHQgYXJvdW5kIGFuIDpjbGFzczpgfmRpcy5JbnN0cnVjdGlvbmAgY2xhc3MKK3RoYXQgcHJvdmlkZXMgZGV0YWlscyBvZiBpbmRpdmlkdWFsIGJ5dGVjb2RlIG9wZXJhdGlvbnMgYW5kIGEKKzpmdW5jOmB+ZGlzLmdldF9pbnN0cnVjdGlvbnNgIGl0ZXJhdG9yIHRoYXQgZW1pdHMgdGhlIEluc3RydWN0aW9uIHN0cmVhbSBmb3IgYQorZ2l2ZW4gcGllY2Ugb2YgUHl0aG9uIGNvZGUuIFRoZSB2YXJpb3VzIGRpc3BsYXkgdG9vbHMgaW4gdGhlIDptb2Q6YGRpc2AKK21vZHVsZSBoYXZlIGJlZW4gdXBkYXRlZCB0byBiZSBiYXNlZCBvbiB0aGVzZSBuZXcgY29tcG9uZW50cy4KKworVGhlIG5ldyA6Y2xhc3M6YGRpcy5CeXRlY29kZWAgY2xhc3MgcHJvdmlkZXMgYW4gb2JqZWN0LW9yaWVudGVkIEFQSSBmb3IKK2luc3BlY3RpbmcgYnl0ZWNvZGUsIGJvdGggaW4gaHVtYW4tcmVhZGFibGUgZm9ybSBhbmQgZm9yIGl0ZXJhdGluZyBvdmVyCitpbnN0cnVjdGlvbnMuCisKKyhDb250cmlidXRlZCBieSBOaWNrIENvZ2hsYW4sIFJ5YW4gS2VsbHkgYW5kIFRob21hcyBLbHV5dmVyIGluIDppc3N1ZTpgMTE4MTZgKQorCisKK2RvY3Rlc3QKKy0tLS0tLS0KKworQWRkZWQgOmRhdGE6YH5kb2N0ZXN0LkZBSUxfRkFTVGAgZmxhZyB0byBoYWx0IHRlc3QgcnVubmluZyBhcyBzb29uIGFzIHRoZSBmaXJzdAorZmFpbHVyZSBpcyBkZXRlY3RlZC4gIChDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgYW5kIERhbmllbCBVcmJhbiBpbgorOmlzc3VlOmAxNjUyMmAuKQorCitVcGRhdGVkIHRoZSBkb2N0ZXN0IGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gdXNlIDptb2Q6YGFyZ3BhcnNlYCwgYW5kIGFkZGVkCitgYC1vYGAgYW5kIGBgLWZgYCBvcHRpb25zIHRvIHRoZSBpbnRlcmZhY2UuICBgYC1vYGAgYWxsb3dzIGRvY3Rlc3Qgb3B0aW9ucyB0bworYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBgYC1mYGAgaXMgYSBzaG9ydGhhbmQgZm9yIGBgLW8KK0ZBSUxfRkFTVGBgICh0byBwYXJhbGxlbCB0aGUgc2ltaWxhciBvcHRpb24gc3VwcG9ydGVkIGJ5IHRoZSA6bW9kOmB1bml0dGVzdGAKK0NMSSkuICAoQ29udHJpYnV0ZWQgYnkgUi4gRGF2aWQgTXVycmF5IGluIDppc3N1ZTpgMTEzOTBgLikKKworCitlbWFpbAorLS0tLS0KKworOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nYCBub3cgYWNjZXB0cyBhICpwb2xpY3kqIGFyZ3VtZW50IHRvCitvdmVycmlkZSB0aGUgZGVmYXVsdCBwb2xpY3kgb2YgdGhlIG1lc3NhZ2Ugd2hlbiBnZW5lcmF0aW5nIGEgc3RyaW5nCityZXByZXNlbnRhdGlvbiBvZiBpdC4gIFRoaXMgbWVhbnMgdGhhdCBgYGFzX3N0cmluZ2BgIGNhbiBub3cgYmUgdXNlZCBpbiBtb3JlCitjaXJjdW1zdGFuY2VzLCBpbnN0ZWFkIG9mIGhhdmluZyB0byBjcmVhdGUgYW5kIHVzZSBhIDptb2Q6YH5lbWFpbC5nZW5lcmF0b3JgIGluCitvcmRlciB0byBwYXNzIGZvcm1hdHRpbmcgcGFyYW1ldGVycyB0byBpdHMgYGBmbGF0dGVuYGAgbWV0aG9kLgorCitOZXcgbWV0aG9kIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX2J5dGVzYCBhZGRlZCB0byBwcm9kdWNlIGEgYnl0ZXMKK3JlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlIGluIGEgZmFzaGlvbiBzaW1pbGFyIHRvIGhvdyBgYGFzX3N0cmluZ2BgCitwcm9kdWNlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gIEl0IGRvZXMgbm90IGFjY2VwdCB0aGUgKm1heGhlYWRlcmxlbioKK2FyZ3VtZW50LCBidXQgZG9lcyBhY2NlcHQgdGhlICp1bml4ZnJvbSogYW5kICpwb2xpY3kqIGFyZ3VtZW50cy4gVGhlCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fYnl0ZXNfX2AgbWV0aG9kCitjYWxscyBpdCwgbWVhbmluZyB0aGF0IGBgYnl0ZXMobXltc2cpYGAgd2lsbCBub3cgcHJvZHVjZSB0aGUgaW50dWl0aXZlCityZXN1bHQ6ICBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBmdWxseSBmb3JtYXR0ZWQgbWVzc2FnZS4KKworKENvbnRyaWJ1dGVkIGJ5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDE4NjAwYC4pCisKK0EgcGFpciBvZiBuZXcgc3ViY2xhc3NlcyBvZiA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGhhdmUgYmVlbiBhZGRlZCwKK2Fsb25nIHdpdGggYSBuZXcgc3ViLW1vZHVsZSwgOm1vZDpgfmVtYWlsLmNvbnRlbnRtYW5hZ2VyYC4gIEFsbCBkb2N1bWVudGF0aW9uCitpcyBjdXJyZW50bHkgaW4gdGhlIG5ldyBtb2R1bGUsIHdoaWNoIGlzIGJlaW5nIGFkZGVkIGFzIHBhcnQgb2YgdGhlIG5ldworOnRlcm06YHByb3Zpc2lvbmFsIDxwcm92aXNpb25hbCBwYWNrYWdlPmAgZW1haWwgQVBJLiAgVGhlc2UgY2xhc3NlcyBwcm92aWRlIGEKK251bWJlciBvZiBuZXcgbWV0aG9kcyB0aGF0IG1ha2UgZXh0cmFjdGluZyBjb250ZW50IGZyb20gYW5kIGluc2VydGluZyBjb250ZW50CitpbnRvIGVtYWlsIG1lc3NhZ2VzIG11Y2ggZWFzaWVyLiAgU2VlIHRoZSA6bW9kOmB+ZW1haWwuY29udGVudG1hbmFnZXJgCitkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCitUaGVzZSBBUEkgYWRkaXRpb25zIGNvbXBsZXRlIHRoZSBidWxrIG9mIHRoZSB3b3JrIHRoYXQgd2FzIHBsYW5uZWQgYXMgcGFydCBvZgordGhlIGVtYWlsNiBwcm9qZWN0LiAgVGhlIGN1cnJlbnRseSBwcm92aXNpb25hbCBBUEkgaXMgc2NoZWR1bGVkIHRvIGJlY29tZSBmaW5hbAoraW4gUHl0aG9uIDMuNSAocG9zc2libHkgd2l0aCBhIGZldyBtaW5vciBhZGRpdGlvbnMgaW4gdGhlIGFyZWEgb2YgZXJyb3IKK2hhbmRsaW5nKS4KKworKENvbnRyaWJ1dGVkIGJ5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDE4ODkxYC4pCisKKworZnVuY3Rvb2xzCistLS0tLS0tLS0KKworTmV3IDpmdW5jOmBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2hgIGRlY29yYXRvcjogc2VlIHRoZSA6cGVwOmA0NDNgLgorCisKK2hhc2hsaWIKKy0tLS0tLS0KKworTmV3IDpmdW5jOmBoYXNobGliLnBia2RmMl9obWFjYCBmdW5jdGlvbi4KKworKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODU4MmApCisKKworaW5zcGVjdAorLS0tLS0tLQorCisKK1RoZSBpbnNwZWN0IG1vZHVsZSBub3cgb2ZmZXJzIGEgYmFzaWMgOnJlZjpgY29tbWFuZCBsaW5lIGludGVyZmFjZQorPGluc3BlY3QtbW9kdWxlLWNsaT5gIHRvIHF1aWNrbHkgZGlzcGxheSBzb3VyY2UgY29kZSBhbmQgb3RoZXIKK2luZm9ybWF0aW9uIGZvciBtb2R1bGVzLCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEKK2FuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxODYyNmApCisKKzpmdW5jOmB+aW5zcGVjdC51bndyYXBgIG1ha2VzIGl0IGVhc3kgdG8gdW5yYXZlbCB3cmFwcGVyIGZ1bmN0aW9uIGNoYWlucworY3JlYXRlZCBieSA6ZnVuYzpgZnVuY3Rvb2xzLndyYXBzYCAoYW5kIGFueSBvdGhlciBBUEkgdGhhdCBzZXRzIHRoZQorYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBvbiBhIHdyYXBwZXIgZnVuY3Rpb24pLiAoQ29udHJpYnV0ZWQgYnkKK0RhbmllbCBVcmJhbiwgQWFyb24gSWxlcyBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTMyNjZgKQorCitBcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZSwgdGhlCis6bW9kOmBpbnNwZWN0YCBtb2R1bGUgbm93IGhhcyBzdWJzdGFudGlhbGx5IGJldHRlciBzdXBwb3J0IGZvciBjdXN0b20KK2BgX19kaXJfX2BgIG1ldGhvZHMgYW5kIGR5bmFtaWMgY2xhc3MgYXR0cmlidXRlcyBwcm92aWRlZCB0aHJvdWdoCittZXRhY2xhc3NlcyAoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMTg5MjlgIGFuZAorOmlzc3VlOmAxOTAzMGApCisKKworbW1hcAorLS0tLQorCittbWFwIG9iamVjdHMgY2FuIG5vdyBiZSB3ZWFrcmVmJ2VkLgorCisoQ29udHJpYnV0ZWQgYnkgVmFsZXJpZSBMYW1iZXJ0IGluIDppc3N1ZTpgNDg4NWAuKQorCisKK211bHRpcHJvY2Vzc2luZworLS0tLS0tLS0tLS0tLS0tCisKK09uIFVuaXggdHdvIG5ldyAqc3RhcnQgbWV0aG9kcyogaGF2ZSBiZWVuIGFkZGVkIGZvciBzdGFydGluZyBwcm9jZXNzZXMKK3VzaW5nIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AuICBUaGVzZSBtYWtlIHRoZSBtaXhpbmcgb2YgcHJvY2Vzc2VzIHdpdGgKK3RocmVhZHMgbW9yZSByb2J1c3QuICBTZWUgOmlzc3VlOmA4NzEzYC4KKworQWxzbywgZXhjZXB0IHdoZW4gdXNpbmcgdGhlIG9sZCAqZm9yayogc3RhcnQgbWV0aG9kLCBjaGlsZCBwcm9jZXNzZXMKK3dpbGwgbm8gbG9uZ2VyIGluaGVyaXQgdW5uZWVkZWQgaGFuZGxlcy9maWxlIGRlc2NyaXB0b3JzIGZyb20gdGhlaXIgcGFyZW50cy4KKworCitvcworLS0KKworTmV3IGZ1bmN0aW9ucyB0byBnZXQgYW5kIHNldCB0aGUgOnJlZjpgaW5oZXJpdGFibGUgZmxhZyA8ZmRfaW5oZXJpdGFuY2U+YCBvZiBhIGZpbGUKK2Rlc2NyaXB0b3JzIG9yIGEgV2luZG93cyBoYW5kbGU6CisKKyogOmZ1bmM6YG9zLmdldF9pbmhlcml0YWJsZWAsIDpmdW5jOmBvcy5zZXRfaW5oZXJpdGFibGVgCisqIDpmdW5jOmBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGVgCisKKworcGRiCistLS0KKworVGhlIGBgcHJpbnRgYCBjb21tYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSA6bW9kOmBwZGJgLCByZXN0b3JpbmcgYWNjZXNzIHRvIHRoZQorYGBwcmludGBgIGZ1bmN0aW9uLgorCitSYXRpb25hbGU6IFB5dGhvbjIncyBgYHBkYmBgIGRpZCBub3QgaGF2ZSBhIGBgcHJpbnRgYCBjb21tYW5kOyBpbnN0ZWFkLAorZW50ZXJpbmcgYGBwcmludGBgIGV4ZWN1dGVkIHRoZSBgYHByaW50YGAgc3RhdGVtZW50LiAgSW4gUHl0aG9uMyBgYHByaW50YGAgd2FzCittaXN0YWtlbmx5IG1hZGUgYW4gYWxpYXMgZm9yIHRoZSBwZGIgOnBkYmNtZDpgcGAgY29tbWFuZC4gIGBgcGBgLCBob3dldmVyLAorcHJpbnRzIHRoZSBgYHJlcHJgYCBvZiBpdHMgYXJndW1lbnQsIG5vdCB0aGUgYGBzdHJgYCBsaWtlIHRoZSBQeXRob24yIGBgcHJpbnRgYAorY29tbWFuZCBkaWQuICBXb3JzZSwgdGhlIFB5dGhvbjMgYGBwZGIgcHJpbnRgYCBjb21tYW5kIHNoYWRvd2VkIHRoZSBQeXRob24zCitgYHByaW50YGAgZnVuY3Rpb24sIG1ha2luZyBpdCBpbmFjY2Vzc2libGUgYXQgdGhlIGBgcGRiYGAgcHJvbXB0LgorCisoQ29udHJpYnV0ZWQgYnkgQ29ubm9yIE9zYm9ybiBpbiA6aXNzdWU6YDE4NzY0YC4pCisKKworcG9wbGliCistLS0tLS0KKworTmV3IDptZXRoOmB+cG9wbGliLlBPUDMuc3Rsc2AgbWV0aG9kIHRvIHN3aXRjaCBhIGNsZWFyLXRleHQgUE9QMyBzZXNzaW9uIGludG8KK2FuIGVuY3J5cHRlZCBQT1AzIHNlc3Npb24uCisKK05ldyA6bWV0aDpgfnBvcGxpYi5QT1AzLmNhcGFgIG1ldGhvZCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQgYnkgdGhlCitQT1AzIHNlcnZlci4KKworKENvbnRyaWJ1dGVkIGJ5IExvcmVuem8gQ2F0dWNjaSBpbiA6aXNzdWU6YDQ0NzNgLikKKworCitwcHJpbnQKKy0tLS0tLQorCitUaGUgOm1vZDpgcHByaW50YCBtb2R1bGUgbm93IHN1cHBvcnRzICpjb21wYWN0KiBtb2RlIGZvciBmb3JtYXR0aW5nIGxvbmcKK3NlcXVlbmNlcyAoOmlzc3VlOmAxOTEzMmApLgorCisKK3B5ZG9jCistLS0tLQorCitXaGlsZSBzaWduaWZpY2FudCBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gbWFkZSB0byA6bW9kOmBweWRvY2AgZGlyZWN0bHksCitpdHMgaGFuZGxpbmcgb2YgY3VzdG9tIGBgX19kaXJfX2BgIG1ldGhvZHMgYW5kIHZhcmlvdXMgZGVzY3JpcHRvcgorYmVoYXZpb3VycyBoYXMgYmVlbiBpbXByb3ZlZCBzdWJzdGFudGlhbGx5IGJ5IHRoZSB1bmRlcmx5aW5nIGNoYW5nZXMgaW4KK3RoZSA6bW9kOmBpbnNwZWN0YCBtb2R1bGUuCisKKworcmVzb3VyY2UKKy0tLS0tLS0tCisKK05ldyA6ZnVuYzpgcmVzb3VyY2UucHJsaW1pdGAgZnVuY3Rpb24gYW5kIExpbnV4IHNwZWNpZmljIGNvbnN0YW50cy4KKyhDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTY1OTVgIGFuZCA6aXNzdWU6YDE5MzI0YC4pCisKK3NtdHBsaWIKKy0tLS0tLS0KKworOmV4YzpgfnNtdHBsaWIuU01UUEV4Y2VwdGlvbmAgaXMgbm93IGEgc3ViY2xhc3Mgb2YgOmV4YzpgT1NFcnJvcmAsIHdoaWNoIGFsbG93cworYm90aCBzb2NrZXQgbGV2ZWwgZXJyb3JzIGFuZCBTTVRQIHByb3RvY29sIGxldmVsIGVycm9ycyB0byBiZSBjYXVnaHQgaW4gb25lCit0cnkvZXhjZXB0IHN0YXRlbWVudCBieSBjb2RlIHRoYXQgb25seSBjYXJlcyB3aGV0aGVyIG9yIG5vdCBhbiBlcnJvciBvY2N1cnJlZC4KKyg6aXNzdWU6YDIxMThgKS4KKworCitzb2NrZXQKKy0tLS0tLQorCitTb2NrZXQgb2JqZWN0cyBoYXZlIG5ldyBtZXRob2RzIHRvIGdldCBvciBzZXQgdGhlaXIgOnJlZjpgaW5oZXJpdGFibGUgZmxhZworPGZkX2luaGVyaXRhbmNlPmA6CisKKyogOm1ldGg6YHNvY2tldC5zb2NrZXQuZ2V0X2luaGVyaXRhYmxlYCwgOm1ldGg6YHNvY2tldC5zb2NrZXQuc2V0X2luaGVyaXRhYmxlYAorCitUaGUgYGBzb2NrZXQuQUZfKmBgIGFuZCBgYHNvY2tldC5TT0NLXypgYCBjb25zdGFudHMgYXJlIGVudW1lcmF0aW9uIHZhbHVlcywKK3VzaW5nIHRoZSBuZXcgOm1vZDpgZW51bWAgbW9kdWxlLiBUaGlzIGFsbG93cyBkZXNjcmlwdGl2ZSByZXBvcnRpbmcgZHVyaW5nCitkZWJ1Z2dpbmcsIGluc3RlYWQgb2Ygc2VlaW5nIGludGVnZXIgIm1hZ2ljIG51bWJlcnMiLgorCitzc2wKKy0tLQorCitUTFN2MS4xIGFuZCBUTFN2MS4yIHN1cHBvcnQuCisKKyhDb250cmlidXRlZCBieSBNaWNoZWxlIE9ycsO5IGFuZCBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE2NjkyYCkKKworKiBOZXcgZGlhZ25vc3RpYyBmdW5jdGlvbnMgOmZ1bmM6YH5zc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYCwKKyAgOm1ldGg6YH5zc2wuU1NMQ29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzYCBhbmQKKyAgOm1ldGg6YH5zc2wuU1NMQ29udGV4dC5nZXRfY2FfY2VydHNgCisKKyogQWRkIDpmdW5jOmBzc2wuZW51bV9jZXJ0X3N0b3JlYCB0byByZXRyaWV2ZSBjZXJ0aWZpY2F0ZXMgYW5kIENSTCBmcm9tIFdpbmRvd3MnCisgIGNlcnQgc3RvcmUuCisKKyhDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTgxNDNgLCA6aXNzdWU6YDE4MTQ3YCBhbmQKKyA6aXNzdWU6YDE3MTM0YC4pCisKK1N1cHBvcnQgZm9yIHNlcnZlci1zaWRlIFNOSSB1c2luZyB0aGUgbmV3Cis6bWV0aDpgc3NsLlNTTENvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tgIG1ldGhvZC4KKworKENvbnRyaWJ1dGVkIGJ5IERhbmllbCBCbGFjayBpbiA6aXNzdWU6YDgxMDlgLikKKworCitzdGF0CistLS0tCisKK1RoZSA6bW9kOmBzdGF0YCBtb2R1bGUgaXMgbm93IGJhY2tlZCBieSBhIEMgaW1wbGVtZW50YXRpb24gaW4gOm1vZDpgX3N0YXRgLiBBIEMKK2ltcGxlbWVudGF0aW9uIGlzIHJlcXVpcmVkIGFzIG1vc3Qgb2YgdGhlIHZhbHVlcyBhcmVuJ3Qgc3RhbmRhcmRpemVkIGFuZAorcGxhdGZvcm0tZGVwZW5kZW50LiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxMTAxNmAuKQorCitUaGUgbW9kdWxlIHN1cHBvcnRzIG5ldyBmaWxlIHR5cGVzOiBkb29yLCBldmVudCBwb3J0IGFuZCB3aGl0ZW91dC4KKworCitzdHJ1Y3QKKy0tLS0tLQorCitTdHJlYW1pbmcgc3RydWN0IHVucGFja2luZyB1c2luZyA6ZnVuYzpgc3RydWN0Lml0ZXJfdW5wYWNrYC4KKworKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTc4MDRgLikKKworCitzdW5hdQorLS0tLS0KKworVGhlIDptZXRoOmB+c3VuYXUuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE4OTAxYC4pCisKKzptZXRoOmBzdW5hdS5vcGVuYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCAoOmlzc3VlOmAxODg3OGApLgorCisKK3RyYWNlYmFjaworLS0tLS0tLS0tCisKK0EgbmV3IDpmdW5jOmB0cmFjZWJhY2suY2xlYXJfZnJhbWVzYCBmdW5jdGlvbiB0YWtlcyBhIHRyYWNlYmFjayBvYmplY3QKK2FuZCBjbGVhcnMgdGhlIGxvY2FsIHZhcmlhYmxlcyBpbiBhbGwgb2YgdGhlIGZyYW1lcyBpdCByZWZlcmVuY2VzLAorcmVkdWNpbmcgdGhlIGFtb3VudCBvZiBtZW1vcnkgY29uc3VtZWQgKDppc3N1ZTpgMTU2NTUyNWApLgorCisKK3VybGxpYgorLS0tLS0tCisKK0FkZCBzdXBwb3J0LmZvciBgYGRhdGE6YGAgVVJMcyBpbiA6bW9kOmB1cmxsaWIucmVxdWVzdGAuCisKKyhDb250cmlidXRlZCBieSBNYXRoaWFzIFBhbnplbmLDtmNrIGluIDppc3N1ZTpgMTY0MjNgLikKKworCit1bml0dGVzdAorLS0tLS0tLS0KKworU3VwcG9ydCBmb3IgZWFzeSBkeW5hbWljYWxseS1nZW5lcmF0ZWQgc3VidGVzdHMgdXNpbmcgdGhlCis6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLnN1YlRlc3RgIGNvbnRleHQgbWFuYWdlci4KKworKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTY5OTdgLikKKworCit3YXZlCistLS0tCisKK1RoZSA6bWV0aDpgfndhdmUuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3NDg3YC4pCisKKzptZXRoOmB3YXZlLm9wZW5gIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLiAgKENvbnRyaWJ1dGVkCitieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzYxNmAuKQorCisKK3dlYWtyZWYKKy0tLS0tLS0KKworTmV3IDpjbGFzczpgfndlYWtyZWYuV2Vha01ldGhvZGAgY2xhc3Mgc2ltdWxhdGVzIHdlYWsgcmVmZXJlbmNlcyB0byBib3VuZAorbWV0aG9kcy4gKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTQ2MzFgLikKKworTmV3IDpjbGFzczpgfndlYWtyZWYuZmluYWxpemVgIGNsYXNzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sKK3RvIGJlIGludm9rZWQgd2hlbiBhbiBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQsIHdpdGhvdXQgbmVlZGluZyB0bworY2FyZWZ1bGx5IG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9mIHRoZSB3ZWFrIHJlZmVyZW5jZSBpdHNlbGYuIChDb250cmlidXRlZCBieQorUmljaGFyZCBPdWRrZXJrIGluIDppc3N1ZTpgMTU1MjhgKQorCisKK3htbC5ldHJlZQorLS0tLS0tLS0tCisKK0FkZCBhbiBldmVudC1kcml2ZW4gcGFyc2VyIGZvciBub24tYmxvY2tpbmcgYXBwbGljYXRpb25zLAorOmNsYXNzOmB+eG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFB1bGxQYXJzZXJgLgorCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNzc0MWAuKQorCisKK3ppcGZpbGUuUHlaaXBmaWxlCistLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgYSBmaWx0ZXIgZnVuY3Rpb24gdG8gaWdub3JlIHNvbWUgcGFja2FnZXMgKHRlc3RzIGZvciBpbnN0YW5jZSksCis6bWV0aDpgfnppcGZpbGUuUHlaaXBGaWxlLndyaXRlcHlgLgorCisoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIFRpc21lciBpbiA6aXNzdWU6YDE5Mjc0YC4pCisKKworT3RoZXIgaW1wcm92ZW1lbnRzCis9PT09PT09PT09PT09PT09PT0KKworVGFiLWNvbXBsZXRpb24gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCisKKyhDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBhbmQgw4lyaWMgQXJhdWpvIGluIDppc3N1ZTpgNTg0NWAuKQorCitQeXRob24gaW52b2NhdGlvbiBjaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludm9raW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCBgYC0tdmVyc2lvbmBgIG5vdyBvdXRwdXRzIHRoZSB2ZXJzaW9uIHRvCitzdGFuZGFyZCBvdXRwdXQgaW5zdGVhZCBvZiBzdGFuZGFyZCBlcnJvciAoOmlzc3VlOmAxODMzOGApLiBTaW1pbGFyIGNoYW5nZXMKK3dlcmUgbWFkZSB0byA6bW9kOmBhcmdwYXJzZWAgKDppc3N1ZTpgMTg5MjBgKSBhbmQgb3RoZXIgbW9kdWxlcyB0aGF0IGhhdmUKK3NjcmlwdC1saWtlIGludm9jYXRpb24gY2FwYWJpbGl0aWVzICg6aXNzdWU6YDE4OTIyYCkuCisKK09wdGltaXphdGlvbnMKKz09PT09PT09PT09PT0KKworTWFqb3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIGhhdmUgYmVlbiBhZGRlZDoKKworKiBUaGUgVVRGLTMyIGRlY29kZXIgaXMgbm93IDN4IHRvIDR4IGZhc3Rlci4KKworKiBUaGUgY29zdCBvZiBoYXNoIGNvbGxpc2lvbnMgZm9yIHNldHMgaXMgbm93IHJlZHVjZWQuICBFYWNoIGhhc2ggdGFibGUKKyAgcHJvYmUgbm93IGNoZWNrcyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZSwgYWRqYWNlbnQga2V5L2hhc2ggcGFpcnMgYmVmb3JlCisgIGNvbnRpbnVpbmcgdG8gbWFrZSByYW5kb20gcHJvYmVzIHRocm91Z2ggdGhlIGhhc2ggdGFibGUuICBUaGlzIGV4cGxvaXRzCisgIGNhY2hlIGxvY2FsaXR5IHRvIG1ha2UgY29sbGlzaW9uIHJlc29sdXRpb24gbGVzcyBleHBlbnNpdmUuCisKKyAgVGhlIGNvbGxpc2lvbiByZXNvbHV0aW9uIHNjaGVtZSBjYW4gYmUgZGVzY3JpYmVkIGFzIGEgaHlicmlkIG9mIGxpbmVhcgorICBwcm9iaW5nIGFuZCBvcGVuIGFkZHJlc3NpbmcuICBUaGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgbGluZWFyIHByb2JlcworICBkZWZhdWx0cyB0byBuaW5lLiAgVGhpcyBjYW4gYmUgY2hhbmdlZCBhdCBjb21waWxlLXRpbWUgYnkgZGVmaW5pbmcKKyAgTElORUFSX1BST0JFUyB0byBiZSBhbnkgdmFsdWUuICBTZXQgTElORUFSX1BST0JFUz0wIHRvIHR1cm4tb2ZmCisgIGxpbmVhciBwcm9iaW5nIGVudGlyZWx5LgorCisgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbiA6aXNzdWU6YDE4NzcxYC4pCisKKyogVGhlIGludGVycHJldGVyIHN0YXJ0cyBhYm91dCAzMCUgZmFzdGVyLiBBIGNvdXBsZSBvZiBtZWFzdXJlcyBsZWFkIHRvIHRoZQorICBzcGVlZHVwLiBUaGUgaW50ZXJwcmV0ZXIgbG9hZHMgZmV3ZXIgbW9kdWxlcyBvbiBzdGFydHVwLCBlLmcuIHRoZSA6bW9kOmByZWAsCisgIDptb2Q6YGNvbGxlY3Rpb25zYCBhbmQgOm1vZDpgbG9jYWxlYCBtb2R1bGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIG5vCisgIGxvbmdlciBpbXBvcnRlZCBieSBkZWZhdWx0LiBUaGUgbWFyc2hhbCBtb2R1bGUgaGFzIGJlZW4gaW1wcm92ZWQgdG8gbG9hZAorICBjb21waWxlZCBQeXRob24gY29kZSBmYXN0ZXIuCisKKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91LCBDaHJpc3RpYW4gSGVpbWVzIGFuZCBWaWN0b3IgU3Rpbm5lciBpbgorICA6aXNzdWU6YDE5MjE5YCwgOmlzc3VlOmAxOTIxOGAsIDppc3N1ZTpgMTkyMDlgLCA6aXNzdWU6YDE5MjA1YCBhbmQKKyAgOmlzc3VlOmA5NTQ4YCkKKworCitDUHl0aG9uIEltcGxlbWVudGF0aW9uIENoYW5nZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKy4uIF9wZXAtNDQ1OgorCitQRVAgNDQ1OiBDdXN0b21pemF0aW9uIG9mIENQeXRob24gbWVtb3J5IGFsbG9jYXRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NDVgIGFkZHMgbmV3IEMgbGV2ZWwgaW50ZXJmYWNlcyB0byBjdXN0b21pemUgbWVtb3J5IGFsbG9jYXRpb24gaW4KK3RoZSBDUHl0aG9uIGludGVycHJldGVyLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQ1YCAtIEFkZCBuZXcgQVBJcyB0byBjdXN0b21pemUgUHl0aG9uIG1lbW9yeSBhbGxvY2F0b3JzCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgVmljdG9yIFN0aW5uZXIuCisKKworLi4gX3BlcC00NDI6CisKK1BFUCA0NDI6IFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpwZXA6YDQ0MmAgcmVtb3ZlcyB0aGUgY3VycmVudCBsaW1pdGF0aW9ucyBhbmQgcXVpcmtzIG9mIG9iamVjdCBmaW5hbGl6YXRpb24KK2luIENQeXRob24uIFdpdGggaXQsIG9iamVjdHMgd2l0aCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcywgYXMgd2VsbCBhcworZ2VuZXJhdG9ycyB3aXRoIDprZXl3b3JkOmBmaW5hbGx5YCBjbGF1c2VzLCBjYW4gYmUgZmluYWxpemVkIHdoZW4gdGhleSBhcmUKK3BhcnQgb2YgYSByZWZlcmVuY2UgY3ljbGUuCisKK0FzIHBhcnQgb2YgdGhpcyBjaGFuZ2UsIG1vZHVsZSBnbG9iYWxzIGFyZSBubyBsb25nZXIgZm9yY2libHkgc2V0IHRvCis6Y29uc3Q6YE5vbmVgIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93biBpbiBtb3N0IGNhc2VzLCBpbnN0ZWFkIHJlbHlpbmcKK29uIHRoZSBub3JtYWwgb3BlcmF0aW9uIG9mIHRoZSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDJgIC0gU2FmZSBvYmplY3QgZmluYWxpemF0aW9uCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgQW50b2luZSBQaXRyb3UuCisKKworT3RoZXIgYnVpbGQgYW5kIEMgQVBJIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXMgdG8gUHl0aG9uJ3MgYnVpbGQgcHJvY2VzcyBhbmQgdG8gdGhlIEMgQVBJIGluY2x1ZGU6CisKKyogVGhlIG5ldyA6YzpmdW5jOmBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nYCBwcmUtaW5pdGlhbGl6YXRpb24gQVBJCisgIGFsbG93cyBhcHBsaWNhdGlvbnMgZW1iZWRkaW5nIHRoZSBDUHl0aG9uIGludGVycHJldGVyIHRvIHJlbGlhYmx5IGZvcmNlCisgIGEgcGFydGljdWxhciBlbmNvZGluZyBhbmQgZXJyb3IgaGFuZGxlciBmb3IgdGhlIHN0YW5kYXJkIHN0cmVhbXMKKyAgKENvbnRyaWJ1dGVkIGJ5IEJhc3RpZW4gTW9udGFnbmUgYW5kIE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDE2MTI5YCkKKworKiBNb3N0IFB5dGhvbiBDIEFQSXMgdGhhdCBkb24ndCBtdXRhdGUgc3RyaW5nIGFyZ3VtZW50cyBhcmUgbm93IGNvcnJlY3RseQorICBtYXJrZWQgYXMgYWNjZXB0aW5nIGBgY29uc3QgY2hhciAqYGAgcmF0aGVyIHRoYW4gYGBjaGFyICpgYCAoQ29udHJpYnV0ZWQKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE3NzI2NzNgKS4KKworKiAiQXJndW1lbnQgQ2xpbmljIiAoOnBlcDpgNDM2YCkgaXMgbm93IHBhcnQgb2YgdGhlIENQeXRob24gYnVpbGQgcHJvY2VzcworICBhbmQgY2FuIGJlIHVzZWQgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgZGVmaW5pbmcgYW5kIG1haW50YWluaW5nCisgIGFjY3VyYXRlIHNpZ25hdHVyZXMgZm9yIGJ1aWx0aW5zIGFuZCBzdGFuZGFyZCBsaWJyYXJ5IGV4dGVuc2lvbiBtb2R1bGVzCisgIGltcGxlbWVudGVkIGluIEMuCisKKyAgLi4gbm90ZTo6CisgICAgIFRoZSBBcmd1bWVudCBDbGluaWMgUEVQIGlzIG5vdCBmdWxseSB1cCB0byBkYXRlIHdpdGggdGhlIHN0YXRlIG9mIHRoZQorICAgICBpbXBsZW1lbnRhdGlvbi4gVGhpcyBoYXMgYmVlbiBkZWVtZWQgYWNjZXB0YWJsZSBieSB0aGUgcmVsZWFzZSBtYW5hZ2VyCisgICAgIGFuZCBjb3JlIGRldmVsb3BtZW50IHRlYW0gaW4gdGhpcyBjYXNlLCBhcyBBcmd1bWVudCBDbGluaWMgd2lsbCBub3QKKyAgICAgYmUgbWFkZSBhdmFpbGFibGUgYXMgYSBwdWJsaWMgQVBJIGZvciB0aGlyZCBwYXJ0eSB1c2UgaW4gUHl0aG9uIDMuNC4KKworCitEZXByZWNhdGVkCis9PT09PT09PT09CisKK1Vuc3VwcG9ydGVkIE9wZXJhdGluZyBTeXN0ZW1zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIE9TLzIKKyogV2luZG93cyAyMDAwCisKKworRGVwcmVjYXRlZCBQeXRob24gbW9kdWxlcywgZnVuY3Rpb25zIGFuZCBtZXRob2RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiA6bWV0aDpgZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuaXNianVua2AgYW5kCisgIDptZXRoOmBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5pc2Jwb3B1bGFyYCB3ZXJlIHJlbW92ZWQ6IHVzZSBgYHggaW4gc20uYmp1bmtgYCBhbmQKKyAgYGB4IGluIHNtLmJwb3B1bGFyYGAsIHdoZXJlICpzbSogaXMgYSA6Y2xhc3M6YH5kaWZmbGliLlNlcXVlbmNlTWF0Y2hlcmAgb2JqZWN0LgorCisqIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4gVXNpbmcKKyAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV90b19sb2FkYCBhbmQKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzYCBhbGxvd3Mgc3ViY2xhc3NlcyBvZiBhIGxvYWRlcgorICB0byBtb3JlIGVhc2lseSBjdXN0b21pemUgbW9kdWxlIGxvYWRpbmcuCisKKyogVGhlIDptb2Q6YGltcGAgbW9kdWxlIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24uIFRvIGtlZXAgY29tcGF0aWJpbGl0eSB3aXRoCisgIFB5dGhvbiAyLzMgY29kZSBiYXNlcywgdGhlIG1vZHVsZSdzIHJlbW92YWwgaXMgY3VycmVudGx5IG5vdCBzY2hlZHVsZWQuCisKKyogVGhlIDptb2Q6YGZvcm1hdHRlcmAgbW9kdWxlIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24gYW5kIGlzIHNsYXRlZCBmb3IgcmVtb3ZhbAorICBpbiBQeXRob24gMy42LgorCisKK0RlcHJlY2F0ZWQgZnVuY3Rpb25zIGFuZCB0eXBlcyBvZiB0aGUgQyBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgYGBQeVRocmVhZFN0YXRlLnRpY2tfY291bnRlcmBgIGZpZWxkIGhhcyBiZWVuIHJlbW92ZWQ6IGl0cyB2YWx1ZSB3YXMKKyAgbWVhbmluZ2xlc3Mgc2luY2UgUHl0aG9uIDMuMiAoIm5ldyBHSUwiKS4KKworCitEZXByZWNhdGVkIGZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIHNpdGUgbW9kdWxlIGFkZGluZyBhICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHRvIHN5cy5wYXRoLCBpZiBpdAorICBleGlzdHMsIGlzIGRlcHJlY2F0ZWQgKDppc3N1ZTpgMTkzNzVgKS4KKworCitQb3J0aW5nIHRvIFB5dGhvbiAzLjQKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gbGlzdHMgcHJldmlvdXNseSBkZXNjcmliZWQgY2hhbmdlcyBhbmQgb3RoZXIgYnVnZml4ZXMKK3RoYXQgbWF5IHJlcXVpcmUgY2hhbmdlcyB0byB5b3VyIGNvZGUuCisKKyogVGhlIEFCQ3MgZGVmaW5lZCBpbiA6bW9kOmBpbXBvcnRsaWIuYWJjYCBub3cgZWl0aGVyIHJhaXNlIHRoZSBhcHByb3ByaWF0ZQorICBleGNlcHRpb24gb3IgcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgYmxpbmRseS4gVGhpcyB3aWxsIG9ubHkgYWZmZWN0IGNvZGUgY2FsbGluZworICA6ZnVuYzpgc3VwZXJgIGFuZCBmYWxsaW5nIHRocm91Z2ggYWxsIHRoZSB3YXkgdG8gdGhlIEFCQ3MuIEZvciBjb21wYXRpYmlsaXR5LAorICBjYXRjaCBib3RoIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIG9yIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gYXMgbmVlZGVkLgorCisqIFRoZSBtb2R1bGUgdHlwZSBub3cgaW5pdGlhbGl6ZXMgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYW5kIDphdHRyOmBfX2xvYWRlcl9fYAorICBhdHRyaWJ1dGVzIHRvIGBgTm9uZWBgIGJ5IGRlZmF1bHQuIFRvIGRldGVybWluZSBpZiB0aGVzZSBhdHRyaWJ1dGVzIHdlcmUgc2V0CisgIGluIGEgYmFja3dhcmRzLWNvbXBhdGlibGUgZmFzaGlvbiwgdXNlIGUuZy4KKyAgYGBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZWBgLgorCisqIDptZXRoOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgbm93IHNldHMgYGBfX2xvYWRlcl9fYGAgYW5kCisgIGBgX19wYWNrYWdlX19gYCB1bmNvbmRpdGlvbmFsbHkgdG8gcHJvcGVybHkgc3VwcG9ydCByZWxvYWRpbmcuIElmIHRoaXMgaXMgbm90CisgIGRlc2lyZWQgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIHNldCB0aGVzZSBhdHRyaWJ1dGVzIG1hbnVhbGx5LiBZb3UgY2FuIHVzZQorICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX3RvX2xvYWRgIGZvciBtb2R1bGUgbWFuYWdlbWVudC4KKworKiBJbXBvcnQgbm93IHJlc2V0cyByZWxldmFudCBhdHRyaWJ1dGVzIChlLmcuIGBgX19uYW1lX19gYCwgYGBfX2xvYWRlcl9fYGAsCisgIGBgX19wYWNrYWdlX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCkgdW5jb25kaXRpb25hbGx5IHdoZW4gcmVsb2FkaW5nLgorCisqIEZyb3plbiBwYWNrYWdlcyBubyBsb25nZXIgc2V0IGBgX19wYXRoX19gYCB0byBhIGxpc3QgY29udGFpbmluZyB0aGUgcGFja2FnZQorICBuYW1lIGJ1dCBhbiBlbXB0eSBsaXN0IGluc3RlYWQuIERldGVybWluZyBpZiBhIG1vZHVsZSBpcyBhIHBhY2thZ2Ugc2hvdWxkIGJlCisgIGRvbmUgdXNpbmcgYGBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJylgYC4KKworKiA6YzpmdW5jOmBQeUVycl9TZXRJbXBvcnRFcnJvcmAgbm93IHNldHMgOmV4YzpgVHlwZUVycm9yYCB3aGVuIGl0cyAqKm1zZyoqCisgIGFyZ3VtZW50IGlzIG5vdCBzZXQuIFByZXZpb3VzbHkgb25seSBgYE5VTExgYCB3YXMgcmV0dXJuZWQgd2l0aCBubyBleGNlcHRpb24KKyAgc2V0LgorCisqIDpmdW5jOmBweV9jb21waWxlLmNvbXBpbGVgIG5vdyByYWlzZXMgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpZiB0aGUgZmlsZSBwYXRoCisgIGl0IHdvdWxkIHdyaXRlIHRvIGlzIGEgc3ltbGluayBvciBhIG5vbi1yZWd1bGFyIGZpbGUuIFRoaXMgaXMgdG8gYWN0IGFzIGEKKyAgd2FybmluZyB0aGF0IGltcG9ydCB3aWxsIG92ZXJ3cml0ZSB0aG9zZSBmaWxlcyB3aXRoIGEgcmVndWxhciBmaWxlIHJlZ2FyZGxlc3MKKyAgb2Ygd2hhdCB0eXBlIG9mIGZpbGUgcGF0aCB0aGV5IHdlcmUgb3JpZ2luYWxseS4KKworKiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZWAgbm8gbG9uZ2VyIHJhaXNlcworICA6ZXhjOmBJbXBvcnRFcnJvcmAgd2hlbiB0aGUgc291cmNlIGNvZGUgYmVpbmcgbG9hZGVkIHRyaWdnZXJzIGEKKyAgOmV4YzpgU3ludGF4RXJyb3JgIG9yIDpleGM6YFVuaWNvZGVEZWNvZGVFcnJvcmAuIEFzIDpleGM6YEltcG9ydEVycm9yYCBpcworICBtZWFudCB0byBiZSByYWlzZWQgb25seSB3aGVuIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSBmb3VuZCBidXQgaXQgc2hvdWxkLCBpdCB3YXMKKyAgZmVsdCB0byBiZSBvdmVyLXJlYWNoaW5nL292ZXJsb2FkaW5nIG9mIHRoYXQgbWVhbmluZyB3aGVuIHRoZSBzb3VyY2UgY29kZSBpcworICBmb3VuZCBidXQgaW1wcm9wZXJseSBzdHJ1Y3R1cmVkLiBJZiB5b3Ugd2VyZSBjYXRjaGluZyBJbXBvcnRFcnJvciBiZWZvcmUgYW5kCisgIHdpc2ggdG8gY29udGludWUgdG8gaWdub3JlIHN5bnRheCBvciBkZWNvZGluZyBpc3N1ZXMsIGNhdGNoIGFsbCB0aHJlZQorICBleGNlcHRpb25zIG5vdy4KKworKiA6ZnVuYzpgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyYCBhbmQgOmZ1bmM6YGZ1bmN0b29scy53cmFwc2Agbm93IGNvcnJlY3RseQorICBzZXQgdGhlIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgdG8gdGhlIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZXIsIGV2ZW4gaWYKKyAgdGhhdCBmdW5jdGlvbiBhbHNvIGhhZCBpdHMgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBzZXQuIFRoaXMgbWVhbnMKKyAgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZXMgbm93IGNvcnJlY3RseSBsaW5rIGEgc3RhY2sgb2YgZGVjb3JhdGVkCisgIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBldmVyeSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIGluIHRoZSBjaGFpbgorICByZWZlcnJpbmcgdG8gdGhlIGlubmVybW9zdCBmdW5jdGlvbi4gSW50cm9zcGVjdGlvbiBsaWJyYXJpZXMgdGhhdAorICBhc3N1bWVkIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgd2FzIGludGVudGlvbmFsIGNhbiB1c2UKKyAgOmZ1bmM6YGluc3BlY3QudW53cmFwYCB0byBhY2Nlc3MgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBjaGFpbiB0aGF0IGhhcworICBubyBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlLgorCisqIChDIEFQSSkgVGhlIHJlc3VsdCBvZiB0aGUgOmM6ZGF0YTpgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcmAgY2FsbGJhY2sgbXVzdAorICBub3cgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIG9yICpOVUxMKiBpZiBhbiBlcnJvciBvY2N1cnJlZCwgaW5zdGVhZCBvZiBhCisgIHN0cmluZyBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYC4KKworKiA6Y2xhc3M6YGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlcmAgbm93IHBhc3NlcyBvbiB0aGUgY3VycmVudCB3b3JraW5nCisgIGRpcmVjdG9yeSB0byBvYmplY3RzIGluIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgZm9yIHRoZSBlbXB0eSBzdHJpbmcuIFRoaXMKKyAgcmVzdWx0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIG5ldmVyIGNvbnRhaW5pbmcgYGAnJ2BgLCB0aHVzCisgIGl0ZXJhdGluZyB0aHJvdWdoIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYmFzZWQgb24gOmRhdGE6YHN5cy5wYXRoYAorICB3aWxsIG5vdCBmaW5kIGFsbCBrZXlzLiBBIG1vZHVsZSdzIGBgX19maWxlX19gYCB3aGVuIGltcG9ydGVkIGluIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYWxzbyBub3cgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoLCBpbmNsdWRpbmcgd2hlbiB1c2luZworICBgYC1tYGAgd2l0aCB0aGUgaW50ZXJwcmV0ZXIgKHRoaXMgZG9lcyBub3QgaW5mbHVlbmNlIHdoZW4gdGhlIHBhdGggdG8gYSBmaWxlCisgIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lKS4KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QgYi9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CmluZGV4IGJjMTIwNmIuLjI5OTAyZTQgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QKKysrIGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdApAQCAtMTEsNiArMTEsNyBAQAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKIAorICAgMy40LnJzdAogICAgMy4zLnJzdAogICAgMy4yLnJzdAogICAgMy4xLnJzdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24tYXN0LmggYi9JbmNsdWRlL1B5dGhvbi1hc3QuaAppbmRleCAwMGU5MmQwLi42N2Q2NzdiIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi1hc3QuaAorKysgYi9JbmNsdWRlL1B5dGhvbi1hc3QuaApAQCAtMTgyLDggKzE4Miw5IEBACiAgICAgICAgICAgICAgICAgICBTZXRDb21wX2tpbmQ9OSwgRGljdENvbXBfa2luZD0xMCwgR2VuZXJhdG9yRXhwX2tpbmQ9MTEsCiAgICAgICAgICAgICAgICAgICBZaWVsZF9raW5kPTEyLCBZaWVsZEZyb21fa2luZD0xMywgQ29tcGFyZV9raW5kPTE0LAogICAgICAgICAgICAgICAgICAgQ2FsbF9raW5kPTE1LCBOdW1fa2luZD0xNiwgU3RyX2tpbmQ9MTcsIEJ5dGVzX2tpbmQ9MTgsCi0gICAgICAgICAgICAgICAgICBFbGxpcHNpc19raW5kPTE5LCBBdHRyaWJ1dGVfa2luZD0yMCwgU3Vic2NyaXB0X2tpbmQ9MjEsCi0gICAgICAgICAgICAgICAgICBTdGFycmVkX2tpbmQ9MjIsIE5hbWVfa2luZD0yMywgTGlzdF9raW5kPTI0LCBUdXBsZV9raW5kPTI1fTsKKyAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9raW5kPTE5LCBFbGxpcHNpc19raW5kPTIwLCBBdHRyaWJ1dGVfa2luZD0yMSwKKyAgICAgICAgICAgICAgICAgIFN1YnNjcmlwdF9raW5kPTIyLCBTdGFycmVkX2tpbmQ9MjMsIE5hbWVfa2luZD0yNCwKKyAgICAgICAgICAgICAgICAgIExpc3Rfa2luZD0yNSwgVHVwbGVfa2luZD0yNn07CiBzdHJ1Y3QgX2V4cHIgewogICAgIGVudW0gX2V4cHJfa2luZCBraW5kOwogICAgIHVuaW9uIHsKQEAgLTI3OSw2ICsyODAsMTAgQEAKICAgICAgICAgfSBCeXRlczsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzaW5nbGV0b24gdmFsdWU7CisgICAgICAgIH0gTmFtZUNvbnN0YW50OworICAgICAgICAKKyAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAgICAgICAgICAgICBpZGVudGlmaWVyIGF0dHI7CiAgICAgICAgICAgICBleHByX2NvbnRleHRfdHkgY3R4OwpAQCAtMzU5LDE4ICszNjQsMTggQEAKIAogc3RydWN0IF9hcmd1bWVudHMgewogICAgIGFzZGxfc2VxICphcmdzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbjsKKyAgICBhcmdfdHkgdmFyYXJnOwogICAgIGFzZGxfc2VxICprd29ubHlhcmdzOwotICAgIGlkZW50aWZpZXIga3dhcmc7Ci0gICAgZXhwcl90eSBrd2FyZ2Fubm90YXRpb247Ci0gICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogICAgIGFzZGxfc2VxICprd19kZWZhdWx0czsKKyAgICBhcmdfdHkga3dhcmc7CisgICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogfTsKIAogc3RydWN0IF9hcmcgewogICAgIGlkZW50aWZpZXIgYXJnOwogICAgIGV4cHJfdHkgYW5ub3RhdGlvbjsKKyAgICBpbnQgbGluZW5vOworICAgIGludCBjb2xfb2Zmc2V0OwogfTsKIAogc3RydWN0IF9rZXl3b3JkIHsKQEAgLTUwOSw2ICs1MTQsOSBAQAogZXhwcl90eSBfUHlfU3RyKHN0cmluZyBzLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBCeXRlcyhhMCwgYTEsIGEyLCBhMykgX1B5X0J5dGVzKGEwLCBhMSwgYTIsIGEzKQogZXhwcl90eSBfUHlfQnl0ZXMoYnl0ZXMgcywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKSBfUHlfTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKQorZXhwcl90eSBfUHlfTmFtZUNvbnN0YW50KHNpbmdsZXRvbiB2YWx1ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwogI2RlZmluZSBFbGxpcHNpcyhhMCwgYTEsIGEyKSBfUHlfRWxsaXBzaXMoYTAsIGExLCBhMikKIGV4cHJfdHkgX1B5X0VsbGlwc2lzKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CiAjZGVmaW5lIEF0dHJpYnV0ZShhMCwgYTEsIGEyLCBhMywgYTQsIGE1KSBfUHlfQXR0cmlidXRlKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpCkBAIC01NDIsMTEgKzU1MCwxMCBAQAogZXhjZXB0aGFuZGxlcl90eSBfUHlfRXhjZXB0SGFuZGxlcihleHByX3R5IHR5cGUsIGlkZW50aWZpZXIgbmFtZSwgYXNkbF9zZXEgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwotI2RlZmluZSBhcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KQotYXJndW1lbnRzX3R5IF9QeV9hcmd1bWVudHMoYXNkbF9zZXEgKiBhcmdzLCBpZGVudGlmaWVyIHZhcmFyZywgZXhwcl90eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiwgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBpZGVudGlmaWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywgZXhwcl90eSBrd2FyZ2Fubm90YXRpb24sIGFzZGxfc2VxICogZGVmYXVsdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqIGt3X2RlZmF1bHRzLCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIGFyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikKK2FyZ3VtZW50c190eSBfUHlfYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncywgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgYXJnX3R5IGt3YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBhcmcoYTAsIGExLCBhMikgX1B5X2FyZyhhMCwgYTEsIGEyKQogYXJnX3R5IF9QeV9hcmcoaWRlbnRpZmllciBhcmcsIGV4cHJfdHkgYW5ub3RhdGlvbiwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBrZXl3b3JkKGEwLCBhMSwgYTIpIF9QeV9rZXl3b3JkKGEwLCBhMSwgYTIpCmRpZmYgLS1naXQgYS9JbmNsdWRlL2Fic3RyYWN0LmggYi9JbmNsdWRlL2Fic3RyYWN0LmgKaW5kZXggYzk2MjRmMy4uZDI1OGFkNSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hYnN0cmFjdC5oCisrKyBiL0luY2x1ZGUvYWJzdHJhY3QuaApAQCAtMTQ0LDcgKzE0NCw3IEBACiAKICAgICAgLyogSW1wbGVtZW50ZWQgZWxzZXdoZXJlOgogCi0gICAgIGludCBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUpOworICAgICBpbnQgUHlPYmplY3RfSGFzQXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKTsKIAogICAgICBSZXR1cm5zIDEgaWYgbyBoYXMgdGhlIGF0dHJpYnV0ZSBhdHRyX25hbWUsIGFuZCAwIG90aGVyd2lzZS4KICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbjoKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAgICAgIC8qIEltcGxlbWVudGVkIGVsc2V3aGVyZToKIAotICAgICBQeU9iamVjdCogUHlPYmplY3RfR2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lKTsKKyAgICAgUHlPYmplY3QqIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSk7CiAKICAgICAgUmV0cmlldmUgYW4gYXR0cmlidXRlZCBuYW1lZCBhdHRyX25hbWUgZm9ybSBvYmplY3Qgby4KICAgICAgUmV0dXJucyB0aGUgYXR0cmlidXRlIHZhbHVlIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS4KQEAgLTE4OSw3ICsxODksNyBAQAogCiAgICAgIC8qIEltcGxlbWVudGVkIGVsc2V3aGVyZToKIAotICAgICBpbnQgUHlPYmplY3RfU2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lLCBQeU9iamVjdCAqdik7CisgICAgIGludCBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUsIFB5T2JqZWN0ICp2KTsKIAogICAgICBTZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYXR0cl9uYW1lLCBmb3Igb2JqZWN0IG8sCiAgICAgIHRvIHRoZSB2YWx1ZSwgdi4gUmV0dXJucyAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKICAgICAgLyogaW1wbGVtZW50ZWQgYXMgYSBtYWNybzoKIAotICAgICBpbnQgUHlPYmplY3RfRGVsQXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lKTsKKyAgICAgaW50IFB5T2JqZWN0X0RlbEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSk7CiAKICAgICAgRGVsZXRlIGF0dHJpYnV0ZSBuYW1lZCBhdHRyX25hbWUsIGZvciBvYmplY3Qgby4gUmV0dXJucwogICAgICAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uCkBAIC0yODQsNyArMjg0LDcgQEAKICAgICAgICAqLwogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZV9vYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiAgICAgICAgLyoKICAgICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QsIGNhbGxhYmxlX29iamVjdCwgd2l0aCBhCkBAIC0yOTYsOCArMjk2LDkgQEAKICAgICAgICAqLwogCiAKLSAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjaGFyICptZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogICAgICAgIC8qCiAgICAgIENhbGwgdGhlIG1ldGhvZCBuYW1lZCBtIG9mIG9iamVjdCBvIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YKQEAgLTMwOCw4ICszMDksOSBAQAogICAgICBQeXRob24gZXhwcmVzc2lvbjogby5tZXRob2QoYXJncykuCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICptZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X0lkZW50aWZpZXIgKm1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogICAgICAgIC8qCiAgICAgICAgICBMaWtlIFB5T2JqZWN0X0NhbGxNZXRob2QsIGJ1dCBleHBlY3QgYSBfUHlfSWRlbnRpZmllciogYXMgdGhlCkBAIC0zMTcsMTMgKzMxOSwxNiBAQAogICAgICAgICovCiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUKFB5T2JqZWN0ICpjYWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQoUHlPYmplY3QgKm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9JZGVudGlmaWVyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoUHlPYmplY3QgKmNhbGxhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKQEAgLTMzOSwxMSArMzQ0LDEwIEBACiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhQeU9iamVjdCAqbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWV0aG9kLCAuLi4pOwotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKFB5T2JqZWN0ICpvLAorICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKFB5T2JqZWN0ICpvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX1B5X0lkZW50aWZpZXIgKm1ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKIAotCiAgICAgICAgLyoKICAgICAgQ2FsbCB0aGUgbWV0aG9kIG5hbWVkIG0gb2Ygb2JqZWN0IG8gd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZgogICAgICBDIGFyZ3VtZW50cy4gIFRoZSBDIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgYXMgUHlPYmplY3QgKgpAQCAtNDA0LDggKzQwOCw5IEBACiAjZGVmaW5lIFB5T2JqZWN0X0xlbmd0aCBQeU9iamVjdF9TaXplCiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLSAgICAgUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCk7CisgICAgIFB5QVBJX0ZVTkMoaW50KSBfUHlPYmplY3RfSGFzTGVuKFB5T2JqZWN0ICpvKTsKICNlbmRpZgorUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90KTsKIAogICAgICAgIC8qCiAgICAgIEd1ZXNzIHRoZSBzaXplIG9mIG9iamVjdCBvIHVzaW5nIGxlbihvKSBvciBvLl9fbGVuZ3RoX2hpbnRfXygpLgpAQCAtNDI5LDcgKzQzNCw3IEBACiAgICAgIHN0YXRlbWVudDogb1trZXldPXYuCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KTsKKyAgICAgUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgICAvKgogICAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCwga2V5LCBmcm9tIHRoZSBvYmplY3QgKm8uCkBAIC0xMTUxLDcgKzExNTYsNyBAQAogCiAgICAgIC8qIGltcGxlbWVudGVkIGFzIGEgbWFjcm86CiAKLSAgICAgaW50IFB5TWFwcGluZ19EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgUmVtb3ZlIHRoZSBtYXBwaW5nIGZvciBvYmplY3QsIGtleSwgZnJvbSB0aGUgb2JqZWN0ICpvLgogICAgICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KQEAgLTExNjksNyArMTE3NCw3IEBACiAgICAgICAgKi8KICNkZWZpbmUgUHlNYXBwaW5nX0RlbEl0ZW0oTyxLKSBQeU9iamVjdF9EZWxJdGVtKChPKSwoSykpCiAKLSAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSk7CisgICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpOwogCiAgICAgICAgLyoKICAgICAgT24gc3VjY2VzcywgcmV0dXJuIDEgaWYgdGhlIG1hcHBpbmcgb2JqZWN0IGhhcyB0aGUga2V5LCBrZXksCkBAIC0xMjEzLDcgKzEyMTgsOCBAQAogCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgICAvKgogICAgICBSZXR1cm4gZWxlbWVudCBvZiBvIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCwga2V5LCBvciBOVUxMCkBAIC0xMjIxLDcgKzEyMjcsNyBAQAogICAgICBvW2tleV0uCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwKKyAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSk7CiAKICAgICAgICAvKgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9hc2RsLmggYi9JbmNsdWRlL2FzZGwuaAppbmRleCA2YmY2MThmLi43YzNiNmQxIDEwMDY0NAotLS0gYS9JbmNsdWRlL2FzZGwuaAorKysgYi9JbmNsdWRlL2FzZGwuaApAQCAtNSw2ICs1LDcgQEAKIHR5cGVkZWYgUHlPYmplY3QgKiBzdHJpbmc7CiB0eXBlZGVmIFB5T2JqZWN0ICogYnl0ZXM7CiB0eXBlZGVmIFB5T2JqZWN0ICogb2JqZWN0OwordHlwZWRlZiBQeU9iamVjdCAqIHNpbmdsZXRvbjsKIAogLyogSXQgd291bGQgYmUgbmljZSBpZiB0aGUgY29kZSBnZW5lcmF0ZWQgYnkgYXNkbF9jLnB5IHdhcyBjb21wbGV0ZWx5CiAgICBpbmRlcGVuZGVudCBvZiBQeXRob24sIGJ1dCBpdCBpcyBhIGdvYWwgdGhlIHJlcXVpcmVzIHRvbyBtdWNoIHdvcmsKQEAgLTI0LDggKzI1LDggQEAKICAgICBpbnQgZWxlbWVudHNbMV07CiB9IGFzZGxfaW50X3NlcTsKIAotYXNkbF9zZXEgKmFzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKLWFzZGxfaW50X3NlcSAqYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKK2FzZGxfc2VxICpfUHlfYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOworYXNkbF9pbnRfc2VxICpfUHlfYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKIAogI2RlZmluZSBhc2RsX3NlcV9HRVQoUywgSSkgKFMpLT5lbGVtZW50c1soSSldCiAjZGVmaW5lIGFzZGxfc2VxX0xFTihTKSAoKFMpID09IE5VTEwgPyAwIDogKFMpLT5zaXplKQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9hc3QuaCBiL0luY2x1ZGUvYXN0LmgKaW5kZXggMDU1ZThkYy4uNmE4YzgxNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hc3QuaAorKysgYi9JbmNsdWRlL2FzdC5oCkBAIC0xMCw2ICsxMCwxMSBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMobW9kX3R5KSBQeUFTVF9Gcm9tTm9kZU9iamVjdCgKKyAgICBjb25zdCBub2RlICpuLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oIGIvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaAppbmRleCBlY2NkNDRjLi5hNzU3Yjg4IDEwMDY0NAotLS0gYS9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oCisrKyBiL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmgKQEAgLTIyLDEwICsyMiwxMSBAQAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X1ZBUl9IRUFECisgICAgUHlfc3NpemVfdCBvYl9hbGxvYzsgLyogSG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkIGluIG9iX2J5dGVzICovCisgICAgY2hhciAqb2JfYnl0ZXM7ICAgICAgLyogUGh5c2ljYWwgYmFja2luZyBidWZmZXIgKi8KKyAgICBjaGFyICpvYl9zdGFydDsgICAgICAvKiBMb2dpY2FsIHN0YXJ0IGluc2lkZSBvYl9ieXRlcyAqLwogICAgIC8qIFhYWChubm9yd2l0eik6IHNob3VsZCBvYl9leHBvcnRzIGJlIFB5X3NzaXplX3Q/ICovCi0gICAgaW50IG9iX2V4cG9ydHM7IC8qIGhvdyBtYW55IGJ1ZmZlciBleHBvcnRzICovCi0gICAgUHlfc3NpemVfdCBvYl9hbGxvYzsgLyogSG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkICovCi0gICAgY2hhciAqb2JfYnl0ZXM7CisgICAgaW50IG9iX2V4cG9ydHM7ICAgICAgLyogSG93IG1hbnkgYnVmZmVyIGV4cG9ydHMgKi8KIH0gUHlCeXRlQXJyYXlPYmplY3Q7CiAjZW5kaWYKIApAQCAtNDksOCArNTAsOCBAQAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgXAogICAgIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLCBcCi0gICAgIFB5X1NJWkUoc2VsZikgPyAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopKHNlbGYpKS0+b2JfYnl0ZXMgOiBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nKQotI2RlZmluZSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAgKGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSksUHlfU0laRShzZWxmKSkKKyAgICAgUHlfU0laRShzZWxmKSA/ICgoUHlCeXRlQXJyYXlPYmplY3QgKikoc2VsZikpLT5vYl9zdGFydCA6IF9QeUJ5dGVBcnJheV9lbXB0eV9zdHJpbmcpCisjZGVmaW5lIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLCBQeV9TSVpFKHNlbGYpKQogCiBQeUFQSV9EQVRBKGNoYXIpIF9QeUJ5dGVBcnJheV9lbXB0eV9zdHJpbmdbXTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ieXRlc29iamVjdC5oIGIvSW5jbHVkZS9ieXRlc29iamVjdC5oCmluZGV4IGQ3YzdmZmQuLjBlZThkMzYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYnl0ZXNvYmplY3QuaAorKysgYi9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKQEAgLTg2LDExICs4NiwxMSBAQAogICAgMC10ZXJtaW5hdGVkIChwYXNzaW5nIGEgc3RyaW5nIHdpdGggZW1iZWRkZWQgTlVMTCBjaGFyYWN0ZXJzIHdpbGwKICAgIGNhdXNlIGFuIGV4Y2VwdGlvbikuICAqLwogUHlBUElfRlVOQyhpbnQpIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCS8qIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKipzLAkJLyogcG9pbnRlciB0byBidWZmZXIgdmFyaWFibGUgKi8KLSAgICByZWdpc3RlciBQeV9zc2l6ZV90ICpsZW4JLyogcG9pbnRlciB0byBsZW5ndGggdmFyaWFibGUgb3IgTlVMTAotCQkJCSAgIChvbmx5IHBvc3NpYmxlIGZvciAwLXRlcm1pbmF0ZWQKLQkJCQkgICBzdHJpbmdzKSAqLworICAgIFB5T2JqZWN0ICpvYmosICAgICAgLyogc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0ICovCisgICAgY2hhciAqKnMsICAgICAgICAgICAvKiBwb2ludGVyIHRvIGJ1ZmZlciB2YXJpYWJsZSAqLworICAgIFB5X3NzaXplX3QgKmxlbiAgICAgLyogcG9pbnRlciB0byBsZW5ndGggdmFyaWFibGUgb3IgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgcG9zc2libGUgZm9yIDAtdGVybWluYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncykgKi8KICAgICApOwogCiAvKiBVc2luZyB0aGUgY3VycmVudCBsb2NhbGUsIGluc2VydCB0aGUgdGhvdXNhbmRzIGdyb3VwaW5nCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NvbXBpbGUuaCBiL0luY2x1ZGUvY29tcGlsZS5oCmluZGV4IGFjMjYzNmQuLjEyZDc1ZDMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29tcGlsZS5oCisrKyBiL0luY2x1ZGUvY29tcGlsZS5oCkBAIC0zNiw3ICszNiwyMCBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgaW50IG9wdGltaXplLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKLVB5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKHN0cnVjdCBfbW9kICosIGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5Q29kZU9iamVjdCAqKSBQeUFTVF9Db21waWxlT2JqZWN0KAorICAgIHN0cnVjdCBfbW9kICptb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50IG9wdGltaXplLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKAorICAgIHN0cnVjdCBfbW9kICogbW9kLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICApOworUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1RPYmplY3QoCisgICAgc3RydWN0IF9tb2QgKiBtb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lCisgICAgKTsKIAogLyogX1B5X01hbmdsZSBpcyBkZWZpbmVkIGluIGNvbXBpbGUuYyAqLwogUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeV9NYW5nbGUoUHlPYmplY3QgKnAsIFB5T2JqZWN0ICpuYW1lKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZGljdG9iamVjdC5oIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKaW5kZXggZDg5YWFjOC4uMTZiZDFkNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9kaWN0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKQEAgLTUzLDYgKzUzLDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5RGljdF9HZXRJdGVtSWRXaXRoRXJyb3IoUHlPYmplY3QgKmRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX1B5X0lkZW50aWZpZXIgKmtleSk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGljdF9TZXREZWZhdWx0KAorICAgIFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKmRlZmF1bHRvYmopOwogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9TZXRJdGVtKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKml0ZW0pOwogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9EZWxJdGVtKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RGljdF9DbGVhcihQeU9iamVjdCAqbXApOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9maWxlb2JqZWN0LmggYi9JbmNsdWRlL2ZpbGVvYmplY3QuaAppbmRleCBhOTljOTRkLi4wOTM5NzQ0IDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZpbGVvYmplY3QuaAorKysgYi9JbmNsdWRlL2ZpbGVvYmplY3QuaApAQCAtOCw4ICs4LDkgQEAKIAogI2RlZmluZSBQWV9TVERJT1RFWFRNT0RFICJiIgogCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RmlsZV9Gcm9tRmQoaW50LCBjaGFyICosIGNoYXIgKiwgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkgICAgIGNoYXIgKiwgaW50KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlGaWxlX0Zyb21GZChpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZpbGVfR2V0TGluZShQeU9iamVjdCAqLCBpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5RmlsZV9Xcml0ZU9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5RmlsZV9Xcml0ZVN0cmluZyhjb25zdCBjaGFyICosIFB5T2JqZWN0ICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9maWxldXRpbHMuaCBiL0luY2x1ZGUvZmlsZXV0aWxzLmgKaW5kZXggN2MxOGNmMi4uNTQ2NmUzYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9maWxldXRpbHMuaAorKysgYi9JbmNsdWRlL2ZpbGV1dGlscy5oCkBAIC0yNywxMSArMjcsMTkgQEAKICAgICBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1Zik7CiAjZW5kaWYKIAorUHlBUElfRlVOQyhpbnQpIF9QeV9vcGVuKAorICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgIGludCBmbGFncyk7CisKIFB5QVBJX0ZVTkMoRklMRSAqKSBfUHlfd2ZvcGVuKAogICAgIGNvbnN0IHdjaGFyX3QgKnBhdGgsCiAgICAgY29uc3Qgd2NoYXJfdCAqbW9kZSk7CiAKIFB5QVBJX0ZVTkMoRklMRSopIF9QeV9mb3BlbigKKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICBjb25zdCBjaGFyICptb2RlKTsKKworUHlBUElfRlVOQyhGSUxFKikgX1B5X2ZvcGVuX29iaigKICAgICBQeU9iamVjdCAqcGF0aCwKICAgICBjb25zdCBjaGFyICptb2RlKTsKIApAQCAtNTMsNiArNjEsMTMgQEAKICAgICB3Y2hhcl90ICpidWYsCiAgICAgc2l6ZV90IHNpemUpOwogCitQeUFQSV9GVU5DKGludCkgX1B5X2dldF9pbmhlcml0YWJsZShpbnQgZmQpOworCitQeUFQSV9GVU5DKGludCkgX1B5X3NldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCBpbmhlcml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MpOworCitQeUFQSV9GVU5DKGludCkgX1B5X2R1cChpbnQgZmQpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9mcmFtZW9iamVjdC5oIGIvSW5jbHVkZS9mcmFtZW9iamVjdC5oCmluZGV4IDMzZjczYWYuLmI0MWJlYTYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZnJhbWVvYmplY3QuaAorKysgYi9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKQEAgLTM2LDYgKzM2LDggQEAKICAgICAgICAgICAgbm9uLWdlbmVyYXRvciBmcmFtZXMuIFNlZSB0aGUgc2F2ZV9leGNfc3RhdGUgYW5kIHN3YXBfZXhjX3N0YXRlCiAgICAgICAgICAgIGZ1bmN0aW9ucyBpbiBjZXZhbC5jIGZvciBkZXRhaWxzIG9mIHRoZWlyIHVzZS4gKi8KICAgICBQeU9iamVjdCAqZl9leGNfdHlwZSwgKmZfZXhjX3ZhbHVlLCAqZl9leGNfdHJhY2ViYWNrOworICAgIC8qIEJvcnJvd2VkIHJlZmVyZW5jZSB0byBhIGdlbmVyYXRvciwgb3IgTlVMTCAqLworICAgIFB5T2JqZWN0ICpmX2dlbjsKIAogICAgIFB5VGhyZWFkU3RhdGUgKmZfdHN0YXRlOwogICAgIGludCBmX2xhc3RpOyAgICAgICAgICAgICAgICAvKiBMYXN0IGluc3RydWN0aW9uIGlmIGNhbGxlZCAqLwpAQCAtNDYsNiArNDgsNyBAQAogICAgICAgIGJ5dGVjb2RlIGluZGV4LiAqLwogICAgIGludCBmX2xpbmVubzsgICAgICAgICAgICAgICAvKiBDdXJyZW50IGxpbmUgbnVtYmVyICovCiAgICAgaW50IGZfaWJsb2NrOyAgICAgICAgICAgICAgIC8qIGluZGV4IGluIGZfYmxvY2tzdGFjayAqLworICAgIGNoYXIgZl9leGVjdXRpbmc7ICAgICAgICAgICAvKiB3aGV0aGVyIHRoZSBmcmFtZSBpcyBzdGlsbCBleGVjdXRpbmcgKi8KICAgICBQeVRyeUJsb2NrIGZfYmxvY2tzdGFja1tDT19NQVhCTE9DS1NdOyAvKiBmb3IgdHJ5IGFuZCBsb29wIGJsb2NrcyAqLwogICAgIFB5T2JqZWN0ICpmX2xvY2Fsc3BsdXNbMV07ICAvKiBsb2NhbHMrc3RhY2ssIGR5bmFtaWNhbGx5IHNpemVkICovCiB9IFB5RnJhbWVPYmplY3Q7CkBAIC03NSw2ICs3OCw4IEBACiAvKiBDb252ZXJzaW9ucyBiZXR3ZWVuICJmYXN0IGxvY2FscyIgYW5kIGxvY2FscyBpbiBkaWN0aW9uYXJ5ICovCiAKIFB5QVBJX0ZVTkModm9pZCkgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QoUHlGcmFtZU9iamVjdCAqLCBpbnQpOworCitQeUFQSV9GVU5DKGludCkgUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoUHlGcmFtZU9iamVjdCAqZik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RnJhbWVfRmFzdFRvTG9jYWxzKFB5RnJhbWVPYmplY3QgKik7CiAKIFB5QVBJX0ZVTkMoaW50KSBQeUZyYW1lX0NsZWFyRnJlZUxpc3Qodm9pZCk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2dlbm9iamVjdC5oIGIvSW5jbHVkZS9nZW5vYmplY3QuaAppbmRleCBlZDQ1MWJhLi42NWYxZWNmIDEwMDY0NAotLS0gYS9JbmNsdWRlL2dlbm9iamVjdC5oCisrKyBiL0luY2x1ZGUvZ2Vub2JqZWN0LmgKQEAgLTM2LDYgKzM2LDggQEAKIFB5QVBJX0ZVTkMoaW50KSBQeUdlbl9OZWVkc0ZpbmFsaXppbmcoUHlHZW5PYmplY3QgKik7CiBQeUFQSV9GVU5DKGludCkgX1B5R2VuX0ZldGNoU3RvcEl0ZXJhdGlvblZhbHVlKFB5T2JqZWN0ICoqKTsKIFB5T2JqZWN0ICpfUHlHZW5fU2VuZChQeUdlbk9iamVjdCAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5R2VuX0ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKTsKKwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvZ3JhbW1hci5oIGIvSW5jbHVkZS9ncmFtbWFyLmgKaW5kZXggODQyNmRhMy4uYmE3ZDE5ZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ncmFtbWFyLmgKKysrIGIvSW5jbHVkZS9ncmFtbWFyLmgKQEAgLTY5LDE0ICs2OSwxNCBAQAogLyogRlVOQ1RJT05TICovCiAKIGdyYW1tYXIgKm5ld2dyYW1tYXIoaW50IHN0YXJ0KTsKLWRmYSAqYWRkZGZhKGdyYW1tYXIgKmcsIGludCB0eXBlLCBjaGFyICpuYW1lKTsKK2RmYSAqYWRkZGZhKGdyYW1tYXIgKmcsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lKTsKIGludCBhZGRzdGF0ZShkZmEgKmQpOwogdm9pZCBhZGRhcmMoZGZhICpkLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgbGJsKTsKIGRmYSAqUHlHcmFtbWFyX0ZpbmRERkEoZ3JhbW1hciAqZywgaW50IHR5cGUpOwogCi1pbnQgYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cik7Ci1pbnQgZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjaGFyICpzdHIpOwotY2hhciAqUHlHcmFtbWFyX0xhYmVsUmVwcihsYWJlbCAqbGIpOworaW50IGFkZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpOworaW50IGZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKTsKK2NvbnN0IGNoYXIgKlB5R3JhbW1hcl9MYWJlbFJlcHIobGFiZWwgKmxiKTsKIHZvaWQgdHJhbnNsYXRlbGFiZWxzKGdyYW1tYXIgKmcpOwogCiB2b2lkIGFkZGZpcnN0c2V0cyhncmFtbWFyICpnKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvaW1wb3J0LmggYi9JbmNsdWRlL2ltcG9ydC5oCmluZGV4IGZkYzI3MzMuLjRhNTE1ZDUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvaW1wb3J0LmgKKysrIGIvSW5jbHVkZS9pbXBvcnQuaApAQCAtMTMsMTkgKzEzLDE5IEBACiBQeUFQSV9GVU5DKGxvbmcpIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyKHZvaWQpOwogUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5SW1wb3J0X0dldE1hZ2ljVGFnKHZvaWQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZSgKLSAgICBjaGFyICpuYW1lLCAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqY28KICAgICApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbywKLSAgICBjaGFyICpwYXRobmFtZSAgICAgICAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgY29uc3QgY2hhciAqcGF0aG5hbWUgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgICk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygKLSAgICBjaGFyICpuYW1lLCAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqY28sCi0gICAgY2hhciAqcGF0aG5hbWUsICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwotICAgIGNoYXIgKmNwYXRobmFtZSAgICAgICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgY29uc3QgY2hhciAqY3BhdGhuYW1lICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgICk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0KAogICAgIFB5T2JqZWN0ICpuYW1lLApAQCAtNzIsNyArNzIsNyBAQAogICAgIFB5T2JqZWN0ICpuYW1lCiAgICAgKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoCi0gICAgY2hhciAqbmFtZSAgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgKTsKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQpAQCAtOTIsMTIgKzkyLDEyIEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGludClfUHlJbXBvcnRfRml4dXBCdWlsdGluKAogICAgIFB5T2JqZWN0ICptb2QsCi0gICAgY2hhciAqbmFtZSAgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoaW50KV9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogCiBzdHJ1Y3QgX2luaXR0YWIgewotICAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAvKiBBU0NJSSBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgICAgICAvKiBBU0NJSSBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0KiAoKmluaXRmdW5jKSh2b2lkKTsKIH07CiBQeUFQSV9EQVRBKHN0cnVjdCBfaW5pdHRhYiAqKSBQeUltcG9ydF9Jbml0dGFiOwpAQCAtMTEzLDE1ICsxMTMsMTUgQEAKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogc3RydWN0IF9mcm96ZW4gewotICAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAvKiBBU0NJSSBlbmNvZGVkIHN0cmluZyAqLwotICAgIHVuc2lnbmVkIGNoYXIgKmNvZGU7CisgICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29kZTsKICAgICBpbnQgc2l6ZTsKIH07CiAKIC8qIEVtYmVkZGluZyBhcHBzIG1heSBjaGFuZ2UgdGhpcyBwb2ludGVyIHRvIHBvaW50IHRvIHRoZWlyIGZhdm9yaXRlCiAgICBjb2xsZWN0aW9uIG9mIGZyb3plbiBtb2R1bGVzOiAqLwogCi1QeUFQSV9EQVRBKHN0cnVjdCBfZnJvemVuICopIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CitQeUFQSV9EQVRBKGNvbnN0IHN0cnVjdCBfZnJvemVuICopIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL2xvbmdvYmplY3QuaCBiL0luY2x1ZGUvbG9uZ29iamVjdC5oCmluZGV4IGZiZTczOGMuLjdjM2Y2ZDAgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbG9uZ29iamVjdC5oCisrKyBiL0luY2x1ZGUvbG9uZ29iamVjdC5oCkBAIC01Miw2ICs1MiwxOSBAQAogI2Vycm9yICJzaXplb2YocGlkX3QpIGlzIG5laXRoZXIgc2l6ZW9mKGludCksIHNpemVvZihsb25nKSBvciBzaXplb2YobG9uZyBsb25nKSIKICNlbmRpZiAvKiBTSVpFT0ZfUElEX1QgKi8KIAorI2lmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0lOVAorIyAgZGVmaW5lIF9QeV9QQVJTRV9JTlRQVFIgImkiCisjICBkZWZpbmUgX1B5X1BBUlNFX1VJTlRQVFIgIkkiCisjZWxpZiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9MT05HCisjICBkZWZpbmUgX1B5X1BBUlNFX0lOVFBUUiAibCIKKyMgIGRlZmluZSBfUHlfUEFSU0VfVUlOVFBUUiAiayIKKyNlbGlmIGRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykgJiYgU0laRU9GX1ZPSURfUCA9PSBTSVpFT0ZfTE9OR19MT05HCisjICBkZWZpbmUgX1B5X1BBUlNFX0lOVFBUUiAiTCIKKyMgIGRlZmluZSBfUHlfUEFSU0VfVUlOVFBUUiAiSyIKKyNlbHNlCisjICBlcnJvciAidm9pZCogZGlmZmVyZW50IGluIHNpemUgZnJvbSBpbnQsIGxvbmcgYW5kIGxvbmcgbG9uZyIKKyNlbmRpZiAvKiBTSVpFT0ZfVk9JRF9QICovCisKIC8qIFVzZWQgYnkgUHl0aG9uL215c3RydG91bC5jLiAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfREFUQSh1bnNpZ25lZCBjaGFyKSBfUHlMb25nX0RpZ2l0VmFsdWVbMjU2XTsKQEAgLTgwLDcgKzkzLDcgQEAKIFB5QVBJX0ZVTkMoUFlfTE9OR19MT05HKSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICosIGludCAqKTsKICNlbmRpZiAvKiBIQVZFX0xPTkdfTE9ORyAqLwogCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tU3RyaW5nKGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVVuaWNvZGUoUHlfVU5JQ09ERSosIFB5X3NzaXplX3QsIGludCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tVW5pY29kZU9iamVjdChQeU9iamVjdCAqdSwgaW50IGJhc2UpOwpAQCAtMTc2LDggKzE4OSw4IEBACiAvKiBUaGVzZSBhcmVuJ3QgcmVhbGx5IHBhcnQgb2YgdGhlIGludCBvYmplY3QsIGJ1dCB0aGV5J3JlIGhhbmR5LiBUaGUKICAgIGZ1bmN0aW9ucyBhcmUgaW4gUHl0aG9uL215c3RydG91bC5jLgogICovCi1QeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5T1Nfc3RydG91bChjaGFyICosIGNoYXIgKiosIGludCk7Ci1QeUFQSV9GVU5DKGxvbmcpIFB5T1Nfc3RydG9sKGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK1B5QVBJX0ZVTkModW5zaWduZWQgbG9uZykgUHlPU19zdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK1B5QVBJX0ZVTkMobG9uZykgUHlPU19zdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvbWFyc2hhbC5oIGIvSW5jbHVkZS9tYXJzaGFsLmgKaW5kZXggZTk2ZDA2Mi4uMDlkOTMzNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tYXJzaGFsLmgKKysrIGIvSW5jbHVkZS9tYXJzaGFsLmgKQEAgLTcsNyArNyw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIFB5X01BUlNIQUxfVkVSU0lPTiAyCisjZGVmaW5lIFB5X01BUlNIQUxfVkVSU0lPTiA0CiAKIFB5QVBJX0ZVTkModm9pZCkgUHlNYXJzaGFsX1dyaXRlTG9uZ1RvRmlsZShsb25nLCBGSUxFICosIGludCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZShQeU9iamVjdCAqLCBGSUxFICosIGludCk7CkBAIC0xOSw3ICsxOSw4IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUoRklMRSAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGUoRklMRSAqKTsKICNlbmRpZgotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY2hhciAqLCBQeV9zc2l6ZV90KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvbW9kc3VwcG9ydC5oIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKaW5kZXggZWNmMWRjYy4uYWI3MjVmNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2RzdXBwb3J0LmgKKysrIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIC8qIER1ZSB0byBhIGdsaXRjaCBpbiAzLjIsIHRoZSBfU2l6ZVQgdmVyc2lvbnMgd2VyZW4ndCBleHBvcnRlZCBmcm9tIHRoZSBETEwuICovCiAjaWYgIWRlZmluZWQoUFlfU1NJWkVfVF9DTEVBTikgfHwgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpIHx8IFB5X0xJTUlURURfQVBJKzAgPj0gMHgwMzAzMDAwMAogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKLVB5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKSBQeV9GT1JNQVRfUEFSU0VUVVBMRShQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKTsKK1B5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjaGFyICoqLCAuLi4pOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cyhQeU9iamVjdCAqKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvb2JqZWN0LmggYi9JbmNsdWRlL29iamVjdC5oCmluZGV4IDIwYzQ3ODAuLmVmNDU4MzggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9vYmplY3QuaApAQCAtMzYyLDcgKzM2Miw3IEBACiAgICAgUHlCdWZmZXJQcm9jcyAqdHBfYXNfYnVmZmVyOwogCiAgICAgLyogRmxhZ3MgdG8gZGVmaW5lIHByZXNlbmNlIG9mIG9wdGlvbmFsL2V4cGFuZGVkIGZlYXR1cmVzICovCi0gICAgbG9uZyB0cF9mbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIHRwX2ZsYWdzOwogCiAgICAgY29uc3QgY2hhciAqdHBfZG9jOyAvKiBEb2N1bWVudGF0aW9uIHN0cmluZyAqLwogCkBAIC00MDgsNiArNDA4LDggQEAKICAgICAvKiBUeXBlIGF0dHJpYnV0ZSBjYWNoZSB2ZXJzaW9uIHRhZy4gQWRkZWQgaW4gdmVyc2lvbiAyLjYgKi8KICAgICB1bnNpZ25lZCBpbnQgdHBfdmVyc2lvbl90YWc7CiAKKyAgICBkZXN0cnVjdG9yIHRwX2ZpbmFsaXplOworCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgLyogdGhlc2UgbXVzdCBiZSBsYXN0IGFuZCBuZXZlciBleHBsaWNpdGx5IGluaXRpYWxpemVkICovCiAgICAgUHlfc3NpemVfdCB0cF9hbGxvY3M7CkBAIC00MjgsNyArNDMwLDcgQEAKICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgIGludCBiYXNpY3NpemU7CiAgICAgaW50IGl0ZW1zaXplOwotICAgIGludCBmbGFnczsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgICAgUHlUeXBlX1Nsb3QgKnNsb3RzOyAvKiB0ZXJtaW5hdGVkIGJ5IHNsb3Q9PTAuICovCiB9IFB5VHlwZV9TcGVjOwogCkBAIC00NzAsNyArNDcyLDcgQEAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUJhc2VPYmplY3RfVHlwZTsgLyogYnVpbHQtaW4gJ29iamVjdCcgKi8KIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVN1cGVyX1R5cGU7IC8qIGJ1aWx0LWluICdzdXBlcicgKi8KIAotUHlBUElfRlVOQyhsb25nKSBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0Kik7CitQeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QqKTsKIAogI2RlZmluZSBQeVR5cGVfQ2hlY2sob3ApIFwKICAgICBQeVR5cGVfRmFzdFN1YmNsYXNzKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MpCkBAIC01MzAsNiArNTMyLDggQEAKIFB5QVBJX0ZVTkMoaW50KSBQeUNhbGxhYmxlX0NoZWNrKFB5T2JqZWN0ICopOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXIoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKFB5T2JqZWN0ICopOwogCiAvKiBTYW1lIGFzIFB5T2JqZWN0X0dlbmVyaWN7R2V0LFNldH1BdHRyLCBidXQgcGFzc2luZyB0aGUgYXR0cmlidXRlcwogICAgZGljdCBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuICovCkBAIC02MDQsNTAgKzYwOCw1NSBAQAogKi8KIAogLyogU2V0IGlmIHRoZSB0eXBlIG9iamVjdCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19IRUFQVFlQRSAoMUw8PDkpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEVBUFRZUEUgKDFVTCA8PCA5KQogCiAvKiBTZXQgaWYgdGhlIHR5cGUgYWxsb3dzIHN1YmNsYXNzaW5nICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfQkFTRVRZUEUgKDFMPDwxMCkKKyNkZWZpbmUgUHlfVFBGTEFHU19CQVNFVFlQRSAoMVVMIDw8IDEwKQogCiAvKiBTZXQgaWYgdGhlIHR5cGUgaXMgJ3JlYWR5JyAtLSBmdWxseSBpbml0aWFsaXplZCAqLwotI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZICgxTDw8MTIpCisjZGVmaW5lIFB5X1RQRkxBR1NfUkVBRFkgKDFVTCA8PCAxMikKIAogLyogU2V0IHdoaWxlIHRoZSB0eXBlIGlzIGJlaW5nICdyZWFkaWVkJywgdG8gcHJldmVudCByZWN1cnNpdmUgcmVhZHkgY2FsbHMgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWUlORyAoMUw8PDEzKQorI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZSU5HICgxVUwgPDwgMTMpCiAKIC8qIE9iamVjdHMgc3VwcG9ydCBnYXJiYWdlIGNvbGxlY3Rpb24gKHNlZSBvYmppbXAuaCkgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX0dDICgxTDw8MTQpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9HQyAoMVVMIDw8IDE0KQogCiAvKiBUaGVzZSB0d28gYml0cyBhcmUgcHJlc2VydmVkIGZvciBTdGFja2xlc3MgUHl0aG9uLCBuZXh0IGFmdGVyIHRoaXMgaXMgMTcgKi8KICNpZmRlZiBTVEFDS0xFU1MKLSNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gKDNMPDwxNSkKKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gKDNVTCA8PCAxNSkKICNlbHNlCiAjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OIDAKICNlbmRpZgogCiAvKiBPYmplY3RzIHN1cHBvcnQgdHlwZSBhdHRyaWJ1dGUgY2FjaGUgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHICAgKDFMPDwxOCkKLSNkZWZpbmUgUHlfVFBGTEFHU19WQUxJRF9WRVJTSU9OX1RBRyAgKDFMPDwxOSkKKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHICAgKDFVTCA8PCAxOCkKKyNkZWZpbmUgUHlfVFBGTEFHU19WQUxJRF9WRVJTSU9OX1RBRyAgKDFVTCA8PCAxOSkKIAogLyogVHlwZSBpcyBhYnN0cmFjdCBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUICgxTDw8MjApCisjZGVmaW5lIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QgKDFVTCA8PCAyMCkKIAogLyogVGhlc2UgZmxhZ3MgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgdHlwZSBpcyBhIHN1YmNsYXNzLiAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0lOVF9TVUJDTEFTUyAgICAgICAgICgxTDw8MjMpCi0jZGVmaW5lIFB5X1RQRkxBR1NfTE9OR19TVUJDTEFTUyAgICAgICAgKDFMPDwyNCkKLSNkZWZpbmUgUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTICAgICAgICAoMUw8PDI1KQotI2RlZmluZSBQeV9UUEZMQUdTX1RVUExFX1NVQkNMQVNTICAgICAgICgxTDw8MjYpCi0jZGVmaW5lIFB5X1RQRkxBR1NfQllURVNfU1VCQ0xBU1MgICAgICAgKDFMPDwyNykKLSNkZWZpbmUgUHlfVFBGTEFHU19VTklDT0RFX1NVQkNMQVNTICAgICAoMUw8PDI4KQotI2RlZmluZSBQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1MgICAgICAgICgxTDw8MjkpCi0jZGVmaW5lIFB5X1RQRkxBR1NfQkFTRV9FWENfU1VCQ0xBU1MgICAgKDFMPDwzMCkKLSNkZWZpbmUgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTICAgICAgICAoMUw8PDMxKQorI2RlZmluZSBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMjQpCisjZGVmaW5lIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAyNSkKKyNkZWZpbmUgUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUyAgICAgICAoMVVMIDw8IDI2KQorI2RlZmluZSBQeV9UUEZMQUdTX0JZVEVTX1NVQkNMQVNTICAgICAgICgxVUwgPDwgMjcpCisjZGVmaW5lIFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUyAgICAgKDFVTCA8PCAyOCkKKyNkZWZpbmUgUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTICAgICAgICAoMVVMIDw8IDI5KQorI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTICAgICgxVUwgPDwgMzApCisjZGVmaW5lIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAzMSkKIAogI2RlZmluZSBQeV9UUEZMQUdTX0RFRkFVTFQgICggXAogICAgICAgICAgICAgICAgICBQeV9UUEZMQUdTX0hBVkVfU1RBQ0tMRVNTX0VYVEVOU0lPTiB8IFwKICAgICAgICAgICAgICAgICAgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHIHwgXAogICAgICAgICAgICAgICAgIDApCiAKKy8qIE5PVEU6IFRoZSBmb2xsb3dpbmcgZmxhZ3MgcmV1c2UgbG93ZXIgYml0cyAocmVtb3ZlZCBhcyBwYXJ0IG9mIHRoZQorICogUHl0aG9uIDMuMCB0cmFuc2l0aW9uKS4gKi8KKworLyogVHlwZSBzdHJ1Y3R1cmUgaGFzIHRwX2ZpbmFsaXplIG1lbWJlciAoMy40KSAqLworI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUgKDFVTCA8PCAwKQorCiAjaWZkZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlUeXBlX0hhc0ZlYXR1cmUodCxmKSAgKChQeVR5cGVfR2V0RmxhZ3ModCkgJiAoZikpICE9IDApCiAjZWxzZQpAQCAtNjgyLDEyICs2OTEsNiBAQAogY29tcGxpY2F0aW9ucyBpbiB0aGUgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uLiAgKFRoaXMgaXMgYWN0dWFsbHkgYQogZGVjaXNpb24gdGhhdCdzIHVwIHRvIHRoZSBpbXBsZW1lbnRlciBvZiBlYWNoIG5ldyB0eXBlIHNvIGlmIHlvdSB3YW50LAogeW91IGNhbiBjb3VudCBzdWNoIHJlZmVyZW5jZXMgdG8gdGhlIHR5cGUgb2JqZWN0LikKLQotKioqIFdBUk5JTkcqKiogVGhlIFB5X0RFQ1JFRiBtYWNybyBtdXN0IGhhdmUgYSBzaWRlLWVmZmVjdC1mcmVlIGFyZ3VtZW50Ci1zaW5jZSBpdCBtYXkgZXZhbHVhdGUgaXRzIGFyZ3VtZW50IG11bHRpcGxlIHRpbWVzLiAgKFRoZSBhbHRlcm5hdGl2ZQotd291bGQgYmUgdG8gbWFjZSBpdCBhIHByb3BlciBmdW5jdGlvbiBvciBhc3NpZ24gaXQgdG8gYSBnbG9iYWwgdGVtcG9yYXJ5Ci12YXJpYWJsZSBmaXJzdCwgYm90aCBvZiB3aGljaCBhcmUgc2xvd2VyOyBhbmQgaW4gYSBtdWx0aS10aHJlYWRlZAotZW52aXJvbm1lbnQgdGhlIGdsb2JhbCB2YXJpYWJsZSB0cmljayBpcyBub3Qgc2FmZS4pCiAqLwogCiAvKiBGaXJzdCBkZWZpbmUgYSBwaWxlIG9mIHNpbXBsZSBoZWxwZXIgbWFjcm9zLCBvbmUgc2V0IHBlciBzcGVjaWFsCkBAIC03MDQsNyArNzA3LDYgQEAKIFB5QVBJX0ZVTkModm9pZCkgX1B5X05lZ2F0aXZlUmVmY291bnQoY29uc3QgY2hhciAqZm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8sIFB5T2JqZWN0ICpvcCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RfRHVtbXkodm9pZCk7Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVNldF9EdW1teSh2b2lkKTsKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5X0dldFJlZlRvdGFsKHZvaWQpOwogI2RlZmluZSBfUHlfSU5DX1JFRlRPVEFMICAgICAgICBfUHlfUmVmVG90YWwrKwogI2RlZmluZSBfUHlfREVDX1JFRlRPVEFMICAgICAgICBfUHlfUmVmVG90YWwtLQpAQCAtNzY2LDE1ICs3NjgsMTYgQEAKIAogI2RlZmluZSBQeV9JTkNSRUYob3ApICggICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIF9QeV9JTkNfUkVGVE9UQUwgIF9QeV9SRUZfREVCVUdfQ09NTUEgICAgICAgXAotICAgICgoUHlPYmplY3QqKShvcCkpLT5vYl9yZWZjbnQrKykKKyAgICAoKFB5T2JqZWN0ICopKG9wKSktPm9iX3JlZmNudCsrKQogCiAjZGVmaW5lIFB5X0RFQ1JFRihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X2RlY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyAgICBcCiAgICAgICAgIGlmIChfUHlfREVDX1JFRlRPVEFMICBfUHlfUkVGX0RFQlVHX0NPTU1BICAgICAgIFwKLSAgICAgICAgLS0oKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250ICE9IDApICAgICAgICAgICAgXAotICAgICAgICAgICAgX1B5X0NIRUNLX1JFRkNOVChvcCkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tKF9weV9kZWNyZWZfdG1wKS0+b2JfcmVmY250ICE9IDApICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9QeV9DSEVDS19SRUZDTlQoX3B5X2RlY3JlZl90bXApICAgICAgICAgICAgXAogICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9QeV9EZWFsbG9jKChQeU9iamVjdCAqKShvcCkpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX1B5X0RlYWxsb2MoX3B5X2RlY3JlZl90bXApOyAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKIC8qIFNhZmVseSBkZWNyZWYgYG9wYCBhbmQgc2V0IGBvcGAgdG8gTlVMTCwgZXNwZWNpYWxseSB1c2VmdWwgaW4gdHBfY2xlYXIKQEAgLTgxMywxNiArODE2LDI3IEBACiAgKi8KICNkZWZpbmUgUHlfQ0xFQVIob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKG9wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFB5T2JqZWN0ICpfcHlfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgICBcCisgICAgICAgIGlmIChfcHlfdG1wICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAob3ApID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBQeV9ERUNSRUYoX3B5X3RtcCk7ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAogLyogTWFjcm9zIHRvIHVzZSBpbiBjYXNlIHRoZSBvYmplY3QgcG9pbnRlciBtYXkgYmUgTlVMTDogKi8KLSNkZWZpbmUgUHlfWElOQ1JFRihvcCkgZG8geyBpZiAoKG9wKSA9PSBOVUxMKSA7IGVsc2UgUHlfSU5DUkVGKG9wKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUHlfWERFQ1JFRihvcCkgZG8geyBpZiAoKG9wKSA9PSBOVUxMKSA7IGVsc2UgUHlfREVDUkVGKG9wKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUHlfWElOQ1JFRihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKl9weV94aW5jcmVmX3RtcCA9IChQeU9iamVjdCAqKShvcCk7IFwKKyAgICAgICAgaWYgKF9weV94aW5jcmVmX3RtcCAhPSBOVUxMKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFB5X0lOQ1JFRihfcHlfeGluY3JlZl90bXApOyAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisjZGVmaW5lIFB5X1hERUNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfeGRlY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyBcCisgICAgICAgIGlmIChfcHlfeGRlY3JlZl90bXAgIT0gTlVMTCkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeV9ERUNSRUYoX3B5X3hkZWNyZWZfdG1wKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAogLyoKIFRoZXNlIGFyZSBwcm92aWRlZCBhcyBjb252ZW5pZW5jZXMgdG8gUHl0aG9uIHJ1bnRpbWUgZW1iZWRkZXJzLCBzbyB0aGF0CmRpZmYgLS1naXQgYS9JbmNsdWRlL29iamltcGwuaCBiL0luY2x1ZGUvb2JqaW1wbC5oCmluZGV4IGM2YjdkZjQuLjlhMjdlYzMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb2JqaW1wbC5oCisrKyBiL0luY2x1ZGUvb2JqaW1wbC5oCkBAIC05NCw1MSArOTQsMjcgQEAKICAgIHRoZSBvYmplY3QgZ2V0cyBpbml0aWFsaXplZCB2aWEgUHlPYmplY3Rfe0luaXQsIEluaXRWYXJ9IGFmdGVyIG9idGFpbmluZwogICAgdGhlIHJhdyBtZW1vcnkuCiAqLwotUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X01hbGxvYyhzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X1JlYWxsb2Modm9pZCAqLCBzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9GcmVlKHZvaWQgKik7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlPYmplY3RfTWFsbG9jKHNpemVfdCBzaXplKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfRnJlZSh2b2lkICpwdHIpOwogCisvKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcywgcmVnYXJkbGVzcyBvZiBzaXplICovCitQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeV9HZXRBbGxvY2F0ZWRCbG9ja3Modm9pZCk7CiAKIC8qIE1hY3JvcyAqLwogI2lmZGVmIFdJVEhfUFlNQUxMT0MKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KTsKICNlbmRpZiAvKiAjaWZuZGVmIFB5X0xJTUlURURfQVBJICovCi0jaWZkZWYgUFlNQUxMT0NfREVCVUcgICAvKiBXSVRIX1BZTUFMTE9DICYmIFBZTUFMTE9DX0RFQlVHICovCi1QeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0ZyZWUodm9pZCAqcCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0R1bXBBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3MoY29uc3Qgdm9pZCAqcCk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKGNoYXIgYXBpLCBzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKGNoYXIgYXBpLCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShjaGFyIGFwaSwgdm9pZCAqcCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShjaGFyIGFwaSwgY29uc3Qgdm9pZCAqcCk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5TWVtX0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU1lbV9EZWJ1Z0ZyZWUodm9pZCAqcCk7Ci0jZGVmaW5lIFB5T2JqZWN0X01BTExPQyAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z01hbGxvYwotI2RlZmluZSBQeU9iamVjdF9NYWxsb2MgICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfUkVBTExPQyAgICAgICAgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYwotI2RlZmluZSBQeU9iamVjdF9SZWFsbG9jICAgICAgICBfUHlPYmplY3RfRGVidWdSZWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X0ZSRUUgICAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWUKLSNkZWZpbmUgUHlPYmplY3RfRnJlZSAgICAgICAgICAgX1B5T2JqZWN0X0RlYnVnRnJlZQorI2VuZGlmCiAKLSNlbHNlICAgLyogV0lUSF9QWU1BTExPQyAmJiAhIFBZTUFMTE9DX0RFQlVHICovCisvKiBNYWNyb3MgKi8KICNkZWZpbmUgUHlPYmplY3RfTUFMTE9DICAgICAgICAgUHlPYmplY3RfTWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIFB5T2JqZWN0X1JlYWxsb2MKICNkZWZpbmUgUHlPYmplY3RfRlJFRSAgICAgICAgICAgUHlPYmplY3RfRnJlZQotI2VuZGlmCi0KLSNlbHNlICAgLyogISBXSVRIX1BZTUFMTE9DICovCi0jZGVmaW5lIFB5T2JqZWN0X01BTExPQyAgICAgICAgIFB5TWVtX01BTExPQwotI2RlZmluZSBQeU9iamVjdF9SRUFMTE9DICAgICAgICBQeU1lbV9SRUFMTE9DCi0jZGVmaW5lIFB5T2JqZWN0X0ZSRUUgICAgICAgICAgIFB5TWVtX0ZSRUUKLQotI2VuZGlmICAvKiBXSVRIX1BZTUFMTE9DICovCi0KICNkZWZpbmUgUHlPYmplY3RfRGVsICAgICAgICAgICAgUHlPYmplY3RfRnJlZQotI2RlZmluZSBQeU9iamVjdF9ERUwgICAgICAgICAgICBQeU9iamVjdF9GUkVFCisjZGVmaW5lIFB5T2JqZWN0X0RFTCAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKKwogCiAvKgogICogR2VuZXJpYyBvYmplY3QgYWxsb2NhdG9yIGludGVyZmFjZQpAQCAtMjIyLDYgKzE5OCwyNiBAQAogICAgY29uc3RydWN0b3IgeW91IHdvdWxkIHN0YXJ0IGRpcmVjdGx5IHdpdGggUHlPYmplY3RfSW5pdC9Jbml0VmFyCiAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogdXNlciBjb250ZXh0IHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIDIgZnVuY3Rpb25zICovCisgICAgdm9pZCAqY3R4OworCisgICAgLyogYWxsb2NhdGUgYW4gYXJlbmEgb2Ygc2l6ZSBieXRlcyAqLworICAgIHZvaWQqICgqYWxsb2MpICh2b2lkICpjdHgsIHNpemVfdCBzaXplKTsKKworICAgIC8qIGZyZWUgYW4gYXJlbmEgKi8KKyAgICB2b2lkICgqZnJlZSkgKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7Cit9IFB5T2JqZWN0QXJlbmFBbGxvY2F0b3I7CisKKy8qIEdldCB0aGUgYXJlbmEgYWxsb2NhdG9yLiAqLworUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9HZXRBcmVuYUFsbG9jYXRvcihQeU9iamVjdEFyZW5hQWxsb2NhdG9yICphbGxvY2F0b3IpOworCisvKiBTZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfU2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKyNlbmRpZgorCisKIC8qCiAgKiBHYXJiYWdlIENvbGxlY3Rpb24gU3VwcG9ydAogICogPT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIzMCw2ICsyMjYsMTAgQEAKIC8qIEMgZXF1aXZhbGVudCBvZiBnYy5jb2xsZWN0KCkuICovCiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIFB5R0NfQ29sbGVjdCh2b2lkKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlHQ19Db2xsZWN0Tm9GYWlsKHZvaWQpOworI2VuZGlmCisKIC8qIFRlc3QgaWYgYSB0eXBlIGhhcyBhIEdDIGhlYWQgKi8KICNkZWZpbmUgUHlUeXBlX0lTX0dDKHQpIFB5VHlwZV9IYXNGZWF0dXJlKCh0KSwgUHlfVFBGTEFHU19IQVZFX0dDKQogCkBAIC0yNDksMTMgKzI0OSwzNyBAQAogICAgICAgICB1bmlvbiBfZ2NfaGVhZCAqZ2NfcHJldjsKICAgICAgICAgUHlfc3NpemVfdCBnY19yZWZzOwogICAgIH0gZ2M7Ci0gICAgbG9uZyBkb3VibGUgZHVtbXk7ICAvKiBmb3JjZSB3b3JzdC1jYXNlIGFsaWdubWVudCAqLworICAgIGRvdWJsZSBkdW1teTsgIC8qIGZvcmNlIHdvcnN0LWNhc2UgYWxpZ25tZW50ICovCiB9IFB5R0NfSGVhZDsKIAogZXh0ZXJuIFB5R0NfSGVhZCAqX1B5R0NfZ2VuZXJhdGlvbjA7CiAKICNkZWZpbmUgX1B5X0FTX0dDKG8pICgoUHlHQ19IZWFkICopKG8pLTEpCiAKKy8qIEJpdCAwIGlzIHNldCB3aGVuIHRwX2ZpbmFsaXplIGlzIGNhbGxlZCAqLworI2RlZmluZSBfUHlHQ19SRUZTX01BU0tfRklOQUxJWkVEICAoMSA8PCAwKQorLyogVGhlIChOLTEpIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBjb250YWluIHRoZSBnYyBzdGF0ZSAvIHJlZmNvdW50ICovCisjZGVmaW5lIF9QeUdDX1JFRlNfU0hJRlQgICAgICAgICAgICgxKQorI2RlZmluZSBfUHlHQ19SRUZTX01BU0sgICAgICAgICAgICAoKChzaXplX3QpIC0xKSA8PCBfUHlHQ19SRUZTX1NISUZUKQorCisjZGVmaW5lIF9QeUdDSGVhZF9SRUZTKGcpICgoZyktPmdjLmdjX3JlZnMgPj4gX1B5R0NfUkVGU19TSElGVCkKKyNkZWZpbmUgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIHYpIGRvIHsgXAorICAgIChnKS0+Z2MuZ2NfcmVmcyA9ICgoZyktPmdjLmdjX3JlZnMgJiB+X1B5R0NfUkVGU19NQVNLKSBcCisgICAgICAgIHwgKHYgPDwgX1B5R0NfUkVGU19TSElGVCk7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBfUHlHQ0hlYWRfREVDUkVGKGcpICgoZyktPmdjLmdjX3JlZnMgLT0gMSA8PCBfUHlHQ19SRUZTX1NISUZUKQorCisjZGVmaW5lIF9QeUdDSGVhZF9GSU5BTElaRUQoZykgKCgoZyktPmdjLmdjX3JlZnMgJiBfUHlHQ19SRUZTX01BU0tfRklOQUxJWkVEKSAhPSAwKQorI2RlZmluZSBfUHlHQ0hlYWRfU0VUX0ZJTkFMSVpFRChnLCB2KSBkbyB7ICBcCisgICAgKGcpLT5nYy5nY19yZWZzID0gKChnKS0+Z2MuZ2NfcmVmcyAmIH5fUHlHQ19SRUZTX01BU0tfRklOQUxJWkVEKSBcCisgICAgICAgIHwgKHYgIT0gMCk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9QeUdDX0ZJTkFMSVpFRChvKSBfUHlHQ0hlYWRfRklOQUxJWkVEKF9QeV9BU19HQyhvKSkKKyNkZWZpbmUgX1B5R0NfU0VUX0ZJTkFMSVpFRChvLCB2KSBfUHlHQ0hlYWRfU0VUX0ZJTkFMSVpFRChfUHlfQVNfR0MobyksIHYpCisKKyNkZWZpbmUgX1B5R0NfUkVGUyhvKSBfUHlHQ0hlYWRfUkVGUyhfUHlfQVNfR0MobykpCisKICNkZWZpbmUgX1B5R0NfUkVGU19VTlRSQUNLRUQgICAgICAgICAgICAgICAgICAgICgtMikKICNkZWZpbmUgX1B5R0NfUkVGU19SRUFDSEFCTEUgICAgICAgICAgICAgICAgICAgICgtMykKICNkZWZpbmUgX1B5R0NfUkVGU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSAgICAgICgtNCkKQEAgLTI2NCw5ICsyODgsOSBAQAogICogY29sbGVjdG9yIGl0IG11c3QgYmUgc2FmZSB0byBjYWxsIHRoZSBvYl90cmF2ZXJzZSBtZXRob2QuICovCiAjZGVmaW5lIF9QeU9iamVjdF9HQ19UUkFDSyhvKSBkbyB7IFwKICAgICBQeUdDX0hlYWQgKmcgPSBfUHlfQVNfR0Mobyk7IFwKLSAgICBpZiAoZy0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCkgXAorICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnKSAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCkgXAogICAgICAgICBQeV9GYXRhbEVycm9yKCJHQyBvYmplY3QgYWxyZWFkeSB0cmFja2VkIik7IFwKLSAgICBnLT5nYy5nY19yZWZzID0gX1B5R0NfUkVGU19SRUFDSEFCTEU7IFwKKyAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZywgX1B5R0NfUkVGU19SRUFDSEFCTEUpOyBcCiAgICAgZy0+Z2MuZ2NfbmV4dCA9IF9QeUdDX2dlbmVyYXRpb24wOyBcCiAgICAgZy0+Z2MuZ2NfcHJldiA9IF9QeUdDX2dlbmVyYXRpb24wLT5nYy5nY19wcmV2OyBcCiAgICAgZy0+Z2MuZ2NfcHJldi0+Z2MuZ2NfbmV4dCA9IGc7IFwKQEAgLTI3OSw4ICszMDMsOCBAQAogICovCiAjZGVmaW5lIF9QeU9iamVjdF9HQ19VTlRSQUNLKG8pIGRvIHsgXAogICAgIFB5R0NfSGVhZCAqZyA9IF9QeV9BU19HQyhvKTsgXAotICAgIGFzc2VydChnLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsgXAotICAgIGctPmdjLmdjX3JlZnMgPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRDsgXAorICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnKSAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7IFwKKyAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZywgX1B5R0NfUkVGU19VTlRSQUNLRUQpOyBcCiAgICAgZy0+Z2MuZ2NfcHJldi0+Z2MuZ2NfbmV4dCA9IGctPmdjLmdjX25leHQ7IFwKICAgICBnLT5nYy5nY19uZXh0LT5nYy5nY19wcmV2ID0gZy0+Z2MuZ2NfcHJldjsgXAogICAgIGctPmdjLmdjX25leHQgPSBOVUxMOyBcCkBAIC0yODgsNyArMzEyLDcgQEAKIAogLyogVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGN1cnJlbnRseSB0cmFja2VkIGJ5IHRoZSBHQy4gKi8KICNkZWZpbmUgX1B5T2JqZWN0X0dDX0lTX1RSQUNLRUQobykgXAotICAgICgoX1B5X0FTX0dDKG8pKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCkKKyAgICAoX1B5R0NfUkVGUyhvKSAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCkKIAogLyogVHJ1ZSBpZiB0aGUgb2JqZWN0IG1heSBiZSB0cmFja2VkIGJ5IHRoZSBHQyBpbiB0aGUgZnV0dXJlLCBvciBhbHJlYWR5IGlzLgogICAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGltcGxlbWVudCBzb21lIG9wdGltaXphdGlvbnMuICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL29wY29kZS5oIGIvSW5jbHVkZS9vcGNvZGUuaAppbmRleCBhOTAxODRkLi4wOTM2ZjJkIDEwMDY0NAotLS0gYS9JbmNsdWRlL29wY29kZS5oCisrKyBiL0luY2x1ZGUvb3Bjb2RlLmgKQEAgLTQ5LDcgKzQ5LDYgQEAKICNkZWZpbmUgQklOQVJZX09SICAgICAgIDY2CiAjZGVmaW5lIElOUExBQ0VfUE9XRVIgICA2NwogI2RlZmluZSBHRVRfSVRFUiAgICAgICAgNjgKLSNkZWZpbmUgU1RPUkVfTE9DQUxTICAgIDY5CiAjZGVmaW5lIFBSSU5UX0VYUFIgICAgICA3MAogI2RlZmluZSBMT0FEX0JVSUxEX0NMQVNTIDcxCiAjZGVmaW5lIFlJRUxEX0ZST00gICAgICA3MgpAQCAtMTQwLDYgKzEzOSw3IEBACiAjZGVmaW5lIFNFVF9BREQgICAgICAgICAxNDYKICNkZWZpbmUgTUFQX0FERCAgICAgICAgIDE0NwogCisjZGVmaW5lIExPQURfQ0xBU1NERVJFRiAgIDE0OAogCiAvKiBFWENFUFRfSEFORExFUiBpcyBhIHNwZWNpYWwsIGltcGxpY2l0IGJsb2NrIHR5cGUgd2hpY2ggaXMgY3JlYXRlZCB3aGVuCiAgICBlbnRlcmluZyBhbiBleGNlcHQgaGFuZGxlci4gSXQgaXMgbm90IGFuIG9wY29kZSBidXQgd2UgZGVmaW5lIGl0IGhlcmUKZGlmZiAtLWdpdCBhL0luY2x1ZGUvb3NkZWZzLmggYi9JbmNsdWRlL29zZGVmcy5oCmluZGV4IDA1YzBjOGUuLjBjMmUzNGIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb3NkZWZzLmgKKysrIGIvSW5jbHVkZS9vc2RlZnMuaApAQCAtOSwxNiArOSwxMCBAQAogCiAvKiBNb2QgYnkgY2hyaXNoOiBRTlggaGFzIFdBVENPTSwgYnV0IGlzbid0IERPUyAqLwogI2lmICFkZWZpbmVkKF9fUU5YX18pCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX1dBVENPTUNfXykgfHwgZGVmaW5lZChfX0RKR1BQX18pIHx8IGRlZmluZWQoUFlPU19PUzIpCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTUFYUEFUSExFTiAyNjAKLSNkZWZpbmUgU0VQIEwnLycKLSNkZWZpbmUgQUxUU0VQIEwnXFwnCi0jZWxzZQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19ESkdQUF9fKQogI2RlZmluZSBTRVAgTCdcXCcKICNkZWZpbmUgQUxUU0VQIEwnLycKICNkZWZpbmUgTUFYUEFUSExFTiAyNTYKLSNlbmRpZgogI2RlZmluZSBERUxJTSBMJzsnCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9wYXJzZXRvay5oIGIvSW5jbHVkZS9wYXJzZXRvay5oCmluZGV4IDkxMWRmYzEuLjJhY2I4NTQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcGFyc2V0b2suaAorKysgYi9JbmNsdWRlL3BhcnNldG9rLmgKQEAgLTM4LDI5ICszOCw0OSBAQAogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nKGNvbnN0IGNoYXIgKiwgZ3JhbW1hciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGUgKEZJTEUgKiwgY29uc3QgY2hhciAqLCBncmFtbWFyICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqLCBwZXJyZGV0YWlsICopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICopOwogCiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFncyhjb25zdCBjaGFyICosIGdyYW1tYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKiwgaW50KTsKLVB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhGSUxFICosIGNvbnN0IGNoYXIgKiwKLQkJCQkJICAgY29uc3QgY2hhciosIGdyYW1tYXIgKiwKLQkJCQkJCSBpbnQsIGNoYXIgKiwgY2hhciAqLAotCQkJCQkJIHBlcnJkZXRhaWwgKiwgaW50KTsKK1B5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncygKKyAgICBGSUxFICpmcCwKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgY29uc3QgY2hhciAqZW5jLAorICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIGNvbnN0IGNoYXIgKnBzMSwKKyAgICBjb25zdCBjaGFyICpwczIsCisgICAgcGVycmRldGFpbCAqZXJyX3JldCwKKyAgICBpbnQgZmxhZ3MpOwogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoCiAgICAgRklMRSAqZnAsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIGNvbnN0IGNoYXIgKmVuYywKICAgICBncmFtbWFyICpnLAogICAgIGludCBzdGFydCwKLSAgICBjaGFyICpwczEsCi0gICAgY2hhciAqcHMyLAorICAgIGNvbnN0IGNoYXIgKnBzMSwKKyAgICBjb25zdCBjaGFyICpwczIsCisgICAgcGVycmRldGFpbCAqZXJyX3JldCwKKyAgICBpbnQgKmZsYWdzKTsKK1B5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoCisgICAgRklMRSAqZnAsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGNvbnN0IGNoYXIgKmVuYywKKyAgICBncmFtbWFyICpnLAorICAgIGludCBzdGFydCwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAogICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCiAgICAgaW50ICpmbGFncyk7CiAKLVB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWUoY29uc3QgY2hhciAqLAotCQkJCQkgICAgICBjb25zdCBjaGFyICosCi0JCQkJCSAgICAgIGdyYW1tYXIgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKiwgaW50KTsKK1B5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWUoCisgICAgY29uc3QgY2hhciAqcywKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgcGVycmRldGFpbCAqZXJyX3JldCwKKyAgICBpbnQgZmxhZ3MpOwogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KAogICAgIGNvbnN0IGNoYXIgKnMsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwpAQCAtNjgsNiArODgsMTMgQEAKICAgICBpbnQgc3RhcnQsCiAgICAgcGVycmRldGFpbCAqZXJyX3JldCwKICAgICBpbnQgKmZsYWdzKTsKK1B5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdCgKKyAgICBjb25zdCBjaGFyICpzLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBncmFtbWFyICpnLAorICAgIGludCBzdGFydCwKKyAgICBwZXJyZGV0YWlsICplcnJfcmV0LAorICAgIGludCAqZmxhZ3MpOwogCiAvKiBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gcHl0aG9ucnVuLmMsCiAgICBub3QgaW4gcGFyc2V0b2suYyAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9wYXRjaGxldmVsLmggYi9JbmNsdWRlL3BhdGNobGV2ZWwuaAppbmRleCA2NThmMGY1Li43ODgwZDIwIDEwMDY0NAotLS0gYS9JbmNsdWRlL3BhdGNobGV2ZWwuaAorKysgYi9JbmNsdWRlL3BhdGNobGV2ZWwuaApAQCAtMTcsMTMgKzE3LDEzIEBACiAvKiBWZXJzaW9uIHBhcnNlZCBvdXQgaW50byBudW1lcmljIHZhbHVlcyAqLwogLyotLXN0YXJ0IGNvbnN0YW50cy0tKi8KICNkZWZpbmUgUFlfTUFKT1JfVkVSU0lPTgkzCi0jZGVmaW5lIFBZX01JTk9SX1ZFUlNJT04JMwotI2RlZmluZSBQWV9NSUNST19WRVJTSU9OCTMKLSNkZWZpbmUgUFlfUkVMRUFTRV9MRVZFTAlQWV9SRUxFQVNFX0xFVkVMX0dBTU1BCi0jZGVmaW5lIFBZX1JFTEVBU0VfU0VSSUFMCTEKKyNkZWZpbmUgUFlfTUlOT1JfVkVSU0lPTgk0CisjZGVmaW5lIFBZX01JQ1JPX1ZFUlNJT04JMAorI2RlZmluZSBQWV9SRUxFQVNFX0xFVkVMCVBZX1JFTEVBU0VfTEVWRUxfQUxQSEEKKyNkZWZpbmUgUFlfUkVMRUFTRV9TRVJJQUwJNAogCiAvKiBWZXJzaW9uIGFzIGEgc3RyaW5nICovCi0jZGVmaW5lIFBZX1ZFUlNJT04gICAgICAJIjMuMy4zcmMxIgorI2RlZmluZSBQWV9WRVJTSU9OICAgICAgCSIzLjQuMGE0KyIKIC8qLS1lbmQgY29uc3RhbnRzLS0qLwogCiAvKiBWZXJzaW9uIGFzIGEgc2luZ2xlIDQtYnl0ZSBoZXggbnVtYmVyLCBlLmcuIDB4MDEwNTAyQjIgPT0gMS41LjJiMi4KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlkZWJ1Zy5oIGIvSW5jbHVkZS9weWRlYnVnLmgKaW5kZXggOTdjMmY4Yy4uOGZlOTgxOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWRlYnVnLmgKKysrIGIvSW5jbHVkZS9weWRlYnVnLmgKQEAgLTIwLDYgKzIwLDcgQEAKIFB5QVBJX0RBVEEoaW50KSBQeV9Ob1VzZXJTaXRlRGlyZWN0b3J5OwogUHlBUElfREFUQShpbnQpIFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWc7CiBQeUFQSV9EQVRBKGludCkgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnOworUHlBUElfREFUQShpbnQpIFB5X0lzb2xhdGVkRmxhZzsKIAogLyogdGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGdldGVudigpIHRoYXQgcGF5cyBhdHRlbnRpb24gdG8KICAgIFB5X0lnbm9yZUVudmlyb25tZW50RmxhZy4gIEl0IHNob3VsZCBiZSB1c2VkIGZvciBnZXR0aW5nIHZhcmlhYmxlcyBsaWtlCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5ZXJyb3JzLmggYi9JbmNsdWRlL3B5ZXJyb3JzLmgKaW5kZXggZTM4NTEyMy4uMjI0NTY3YiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWVycm9ycy5oCisrKyBiL0luY2x1ZGUvcHllcnJvcnMuaApAQCAtNzUsNiArNzUsNyBAQAogCiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldE5vbmUoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldE9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5RXJyX1NldEtleUVycm9yKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRTdHJpbmcoCiAgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwKICAgICBjb25zdCBjaGFyICpzdHJpbmcgICAvKiBkZWNvZGVkIGZyb20gdXRmLTggKi8KQEAgLTMwMSw5ICszMDIsMTYgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgaW50IGxpbmVubywKICAgICBpbnQgY29sX29mZnNldCk7CitQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgbGluZW5vLAorICAgIGludCBjb2xfb2Zmc2V0KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfUHJvZ3JhbVRleHQoCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIGludCBsaW5lbm8pOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdCgKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubyk7CiAKIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbW9kaWZ5IHVuaWNvZGUKICAgIGV4Y2VwdGlvbnMgZnJvbSBDICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWVtLmggYi9JbmNsdWRlL3B5bWVtLmgKaW5kZXggMTBiNWJlYS4uODNmMTUzNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1lbS5oCisrKyBiL0luY2x1ZGUvcHltZW0uaApAQCAtMTEsNiArMTEsMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cik7CisKKwogLyogQkVXQVJFOgogCiAgICBFYWNoIGludGVyZmFjZSBleHBvcnRzIGJvdGggZnVuY3Rpb25zIGFuZCBtYWNyb3MuICBFeHRlbnNpb24gbW9kdWxlcyBzaG91bGQKQEAgLTQ5LDIxICs1NCwxNCBAQAogICAgcGVyZm9ybWVkIG9uIGZhaWx1cmUgKG5vIGV4Y2VwdGlvbiBpcyBzZXQsIG5vIHdhcm5pbmcgaXMgcHJpbnRlZCwgZXRjKS4KICovCiAKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9NYWxsb2Moc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCkgUHlNZW1fRnJlZSh2b2lkICopOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX01hbGxvYyhzaXplX3Qgc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5TWVtX0ZyZWUodm9pZCAqcHRyKTsKIAotLyogU3RhcnRpbmcgZnJvbSBQeXRob24gMS42LCB0aGUgd3JhcHBlcnMgUHlfe01hbGxvYyxSZWFsbG9jLEZyZWV9IGFyZQotICAgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVGhleSB1c2VkIHRvIGNhbGwgUHlFcnJfTm9NZW1vcnkoKSBvbiBmYWlsdXJlLiAqLworUHlBUElfRlVOQyhjaGFyICopIF9QeU1lbV9SYXdTdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKK1B5QVBJX0ZVTkMoY2hhciAqKSBfUHlNZW1fU3RyZHVwKGNvbnN0IGNoYXIgKnN0cik7CiAKIC8qIE1hY3Jvcy4gKi8KLSNpZmRlZiBQWU1BTExPQ19ERUJVRwotLyogUmVkaXJlY3QgYWxsIG1lbW9yeSBvcGVyYXRpb25zIHRvIFB5dGhvbidzIGRlYnVnZ2luZyBhbGxvY2F0b3IuICovCi0jZGVmaW5lIFB5TWVtX01BTExPQwkJX1B5TWVtX0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MJCV9QeU1lbV9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlNZW1fRlJFRQkJX1B5TWVtX0RlYnVnRnJlZQotCi0jZWxzZQkvKiAhIFBZTUFMTE9DX0RFQlVHICovCiAKIC8qIFB5TWVtX01BTExPQygwKSBtZWFucyBtYWxsb2MoMSkuIFNvbWUgc3lzdGVtcyB3b3VsZCByZXR1cm4gTlVMTAogICAgZm9yIG1hbGxvYygwKSwgd2hpY2ggd291bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gU29tZSBwbGF0Zm9ybXMKQEAgLTcxLDEzICs2OSw5IEBACiAgICBweW1hbGxvYy4gVG8gc29sdmUgdGhlc2UgcHJvYmxlbXMsIGFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUuICovCiAvKiBSZXR1cm5zIE5VTEwgdG8gaW5kaWNhdGUgZXJyb3IgaWYgYSBuZWdhdGl2ZSBzaXplIG9yIHNpemUgbGFyZ2VyIHRoYW4KICAgIFB5X3NzaXplX3QgY2FuIHJlcHJlc2VudCBpcyBzdXBwbGllZC4gIEhlbHBzIHByZXZlbnRzIHNlY3VyaXR5IGhvbGVzLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MobikJCSgoc2l6ZV90KShuKSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggPyBOVUxMIFwKLQkJCQk6IG1hbGxvYygobikgPyAobikgOiAxKSkKLSNkZWZpbmUgUHlNZW1fUkVBTExPQyhwLCBuKQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYICA/IE5VTEwgXAotCQkJCTogcmVhbGxvYygocCksIChuKSA/IChuKSA6IDEpKQotI2RlZmluZSBQeU1lbV9GUkVFCQlmcmVlCi0KLSNlbmRpZgkvKiBQWU1BTExPQ19ERUJVRyAqLworI2RlZmluZSBQeU1lbV9NQUxMT0MobikgICAgICAgICBQeU1lbV9NYWxsb2MobikKKyNkZWZpbmUgUHlNZW1fUkVBTExPQyhwLCBuKSAgICAgUHlNZW1fUmVhbGxvYyhwLCBuKQorI2RlZmluZSBQeU1lbV9GUkVFKHApICAgICAgICAgICBQeU1lbV9GcmVlKHApCiAKIC8qCiAgKiBUeXBlLW9yaWVudGVkIG1lbW9yeSBpbnRlcmZhY2UKQEAgLTExNSw2ICsxMDksNjkgQEAKICNkZWZpbmUgUHlNZW1fRGVsCQlQeU1lbV9GcmVlCiAjZGVmaW5lIFB5TWVtX0RFTAkJUHlNZW1fRlJFRQogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIGVudW0geworICAgIC8qIFB5TWVtX1Jhd01hbGxvYygpLCBQeU1lbV9SYXdSZWFsbG9jKCkgYW5kIFB5TWVtX1Jhd0ZyZWUoKSAqLworICAgIFBZTUVNX0RPTUFJTl9SQVcsCisKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSwgUHlNZW1fUmVhbGxvYygpIGFuZCBQeU1lbV9GcmVlKCkgKi8KKyAgICBQWU1FTV9ET01BSU5fTUVNLAorCisgICAgLyogUHlPYmplY3RfTWFsbG9jKCksIFB5T2JqZWN0X1JlYWxsb2MoKSBhbmQgUHlPYmplY3RfRnJlZSgpICovCisgICAgUFlNRU1fRE9NQUlOX09CSgorfSBQeU1lbUFsbG9jYXRvckRvbWFpbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZXIgY29udGV4dCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSAzIGZ1bmN0aW9ucyAqLworICAgIHZvaWQgKmN0eDsKKworICAgIC8qIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrICovCisgICAgdm9pZCogKCptYWxsb2MpICh2b2lkICpjdHgsIHNpemVfdCBzaXplKTsKKworICAgIC8qIGFsbG9jYXRlIG9yIHJlc2l6ZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQqICgqcmVhbGxvYykgKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworCisgICAgLyogcmVsZWFzZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQgKCpmcmVlKSAodm9pZCAqY3R4LCB2b2lkICpwdHIpOworfSBQeU1lbUFsbG9jYXRvcjsKKworLyogR2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLiAqLworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcik7CisKKy8qIFNldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4KKworICAgVGhlIG5ldyBhbGxvY2F0b3IgbXVzdCByZXR1cm4gYSBkaXN0aW5jdCBub24tTlVMTCBwb2ludGVyIHdoZW4gcmVxdWVzdGluZworICAgemVybyBieXRlcy4KKworICAgRm9yIHRoZSBQWU1FTV9ET01BSU5fUkFXIGRvbWFpbiwgdGhlIGFsbG9jYXRvciBtdXN0IGJlIHRocmVhZC1zYWZlOiB0aGUgR0lMCisgICBpcyBub3QgaGVsZCB3aGVuIHRoZSBhbGxvY2F0b3IgaXMgY2FsbGVkLgorCisgICBJZiB0aGUgbmV3IGFsbG9jYXRvciBpcyBub3QgYSBob29rIChkb24ndCBjYWxsIHRoZSBwcmV2aW91cyBhbGxvY2F0b3IpLCB0aGUKKyAgIFB5TWVtX1NldHVwRGVidWdIb29rcygpIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHRvIHJlaW5zdGFsbCB0aGUgZGVidWcgaG9va3MKKyAgIG9uIHRvcCBvbiB0aGUgbmV3IGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpOworCisvKiBTZXR1cCBob29rcyB0byBkZXRlY3QgYnVncyBpbiB0aGUgZm9sbG93aW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9yCisgICBmdW5jdGlvbnM6CisKKyAgIC0gUHlNZW1fUmF3TWFsbG9jKCksIFB5TWVtX1Jhd1JlYWxsb2MoKSwgUHlNZW1fUmF3RnJlZSgpCisgICAtIFB5TWVtX01hbGxvYygpLCBQeU1lbV9SZWFsbG9jKCksIFB5TWVtX0ZyZWUoKQorICAgLSBQeU9iamVjdF9NYWxsb2MoKSwgUHlPYmplY3RfUmVhbGxvYygpIGFuZCBQeU9iamVjdF9GcmVlKCkKKworICAgTmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmaWxsZWQgd2l0aCB0aGUgYnl0ZSAweENCLCBmcmVlZCBtZW1vcnkgaXMgZmlsbGVkCisgICB3aXRoIHRoZSBieXRlIDB4REIuIEFkZGl0aW9ubmFsIGNoZWNrczoKKworICAgLSBkZXRlY3QgQVBJIHZpb2xhdGlvbnMsIGV4OiBQeU9iamVjdF9GcmVlKCkgY2FsbGVkIG9uIGEgYnVmZmVyIGFsbG9jYXRlZAorICAgICBieSBQeU1lbV9NYWxsb2MoKQorICAgLSBkZXRlY3Qgd3JpdGUgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIChidWZmZXIgdW5kZXJmbG93KQorICAgLSBkZXRlY3Qgd3JpdGUgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChidWZmZXIgb3ZlcmZsb3cpCisKKyAgIFRoZSBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgaWYgUHl0aG9uIGlzIG5vdCBjb21waWxlZCBpcyBkZWJ1ZyBtb2RlLiAqLworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9TZXR1cERlYnVnSG9va3Modm9pZCk7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlwb3J0LmggYi9JbmNsdWRlL3B5cG9ydC5oCmluZGV4IGE1ZWRlYTkuLmNhMjBiMjIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlwb3J0LmgKKysrIGIvSW5jbHVkZS9weXBvcnQuaApAQCAtMjE5LDEwICsyMTksNiBAQAogLyogU21hbGxlc3QgbmVnYXRpdmUgdmFsdWUgb2YgdHlwZSBQeV9zc2l6ZV90LiAqLwogI2RlZmluZSBQWV9TU0laRV9UX01JTiAoLVBZX1NTSVpFX1RfTUFYLTEpCiAKLSNpZiBTSVpFT0ZfUElEX1QgPiBTSVpFT0ZfTE9ORwotIyAgIGVycm9yICJQeXRob24gZG9lc24ndCBzdXBwb3J0IHNpemVvZihwaWRfdCkgPiBzaXplb2YobG9uZykiCi0jZW5kaWYKLQogLyogUFlfRk9STUFUX1NJWkVfVCBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIG1vZGlmaWVyIGZvciB1c2UgaW4gYSBwcmludGYKICAqIGZvcm1hdCB0byBjb252ZXJ0IGFuIGFyZ3VtZW50IHdpdGggdGhlIHdpZHRoIG9mIGEgc2l6ZV90IG9yIFB5X3NzaXplX3QuCiAgKiBDOTkgaW50cm9kdWNlZCAieiIgZm9yIHRoaXMgcHVycG9zZSwgYnV0IG5vdCBhbGwgcGxhdGZvcm1zIHN1cHBvcnQgdGhhdDsKQEAgLTI2Nyw3ICsyNjMsNyBAQAogICovCiAjaWZkZWYgSEFWRV9MT05HX0xPTkcKICMgICBpZm5kZWYgUFlfRk9STUFUX0xPTkdfTE9ORwotIyAgICAgICBpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjICAgICAgIGlmZGVmIE1TX1dJTkRPV1MKICMgICAgICAgICAgIGRlZmluZSBQWV9GT1JNQVRfTE9OR19MT05HICJJNjQiCiAjICAgICAgIGVsc2UKICMgICAgICAgICAgIGVycm9yICJUaGlzIHBsYXRmb3JtJ3MgcHljb25maWcuaCBuZWVkcyB0byBkZWZpbmUgUFlfRk9STUFUX0xPTkdfTE9ORyIKQEAgLTM5MiwxNyArMzg4LDIwIEBACiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2VsaWYgZGVmaW5lZChIQVZFX1NUQVRfSCkKICNpbmNsdWRlIDxzdGF0Lmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkKKyNpZm5kZWYgU19JRk1UCiAvKiBWaXN1YWxBZ2UgQy9DKysgRmFpbGVkIHRvIERlZmluZSBNb3VudFR5cGUgRmllbGQgaW4gc3lzL3N0YXQuaCAqLwotI2RlZmluZSBTX0lGTVQgKFNfSUZESVJ8U19JRkNIUnxTX0lGUkVHKQorI2RlZmluZSBTX0lGTVQgMDE3MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRkxOSworLyogV2luZG93cyBkb2Vzbid0IGRlZmluZSBTX0lGTE5LIGJ1dCBwb3NpeG1vZHVsZS5jIG1hcHMKKyAqIElPX1JFUEFSU0VfVEFHX1NZTUxJTksgdG8gU19JRkxOSyAqLworIyAgZGVmaW5lIFNfSUZMTksgMDEyMDAwMAogI2VuZGlmCiAKICNpZm5kZWYgU19JU1JFRwpAQCAtNDEzLDYgKzQxMiw5IEBACiAjZGVmaW5lIFNfSVNESVIoeCkgKCgoeCkgJiBTX0lGTVQpID09IFNfSUZESVIpCiAjZW5kaWYKIAorI2lmbmRlZiBTX0lTQ0hSCisjZGVmaW5lIFNfSVNDSFIoeCkgKCgoeCkgJiBTX0lGTVQpID09IFNfSUZDSFIpCisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiAvKiBNb3ZlIHRoaXMgZG93biBoZXJlIHNpbmNlIHNvbWUgQysrICNpbmNsdWRlJ3MgZG9uJ3QgbGlrZSB0byBiZSBpbmNsdWRlZApAQCAtODM1LDE1ICs4MzcsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBBZGQgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQgd2hlcmUgYXZhaWxhYmxlLgotICovCi0jaWZkZWYgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUKLSNkZWZpbmUgUHlfRk9STUFUX1BBUlNFVFVQTEUoZnVuYyxwMSxwMikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KGZ1bmMscDEscDIpKSkKLSNlbHNlCi0jZGVmaW5lIFB5X0ZPUk1BVF9QQVJTRVRVUExFKGZ1bmMscDEscDIpCi0jZW5kaWYKLQotLyoKICAqIFNwZWNpZnkgYWxpZ25tZW50IG9uIGNvbXBpbGVycyB0aGF0IHN1cHBvcnQgaXQuCiAgKi8KICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCkBAIC04ODEsNCArODc0LDE4IEBACiAjZW5kaWYKICNlbmRpZgogCisvKgorICogQ29udmVuaWVudCBtYWNyb3MgdG8gZGVhbCB3aXRoIGVuZGlhbm5lc3Mgb2YgdGhlIHBsYXRmb3JtLiBXT1JEU19CSUdFTkRJQU4gaXMKKyAqIGRldGVjdGVkIGJ5IGNvbmZpZ3VyZSBhbmQgZGVmaW5lZCBpbiBweWNvbmZpZy5oLiBUaGUgY29kZSBpbiBweWNvbmZpZy5oCisgKiBhbHNvIHRha2VzIGNhcmUgb2YgQXBwbGUncyB1bml2ZXJzYWwgYnVpbGRzLgorICovCisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgUFlfQklHX0VORElBTiAxCisjZGVmaW5lIFBZX0xJVFRMRV9FTkRJQU4gMAorI2Vsc2UKKyNkZWZpbmUgUFlfQklHX0VORElBTiAwCisjZGVmaW5lIFBZX0xJVFRMRV9FTkRJQU4gMQorI2VuZGlmCisKICNlbmRpZiAvKiBQeV9QWVBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXN0YXRlLmggYi9JbmNsdWRlL3B5c3RhdGUuaAppbmRleCAyMDE3YjAyLi4wNmFmODA4IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5c3RhdGUuaAorKysgYi9JbmNsdWRlL3B5c3RhdGUuaApAQCAtNjksNiArNjksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX3RzIHsKICAgICAvKiBTZWUgUHl0aG9uL2NldmFsLmMgZm9yIGNvbW1lbnRzIGV4cGxhaW5pbmcgbW9zdCBmaWVsZHMgKi8KIAorICAgIHN0cnVjdCBfdHMgKnByZXY7CiAgICAgc3RydWN0IF90cyAqbmV4dDsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycDsKIApAQCAtOTksMTYgKzEwMCw2IEBACiAKICAgICBQeU9iamVjdCAqZGljdDsgIC8qIFN0b3JlcyBwZXItdGhyZWFkIHN0YXRlICovCiAKLSAgICAvKiBYWFggZG9lc24ndCBtZWFuIGFueXRoaW5nIGFueW1vcmUgKHRoZSBjb21tZW50IGJlbG93IGlzIG9ic29sZXRlKQotICAgICAgID0+IGRlcHJlY2F0ZSBvciByZW1vdmU/ICovCi0gICAgLyogdGlja19jb3VudGVyIGlzIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBjaGVja19pbnRlcnZhbCB0aWNrZXIKLSAgICAgKiByZWFjaGVzIHplcm8uIFRoZSBwdXJwb3NlIGlzIHRvIGdpdmUgYSB1c2VmdWwgbWVhc3VyZSBvZiB0aGUgbnVtYmVyCi0gICAgICogb2YgaW50ZXJwcmV0ZWQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIGluIGEgZ2l2ZW4gdGhyZWFkLiAgVGhpcwotICAgICAqIGV4dHJlbWVseSBsaWdodHdlaWdodCBzdGF0aXN0aWMgY29sbGVjdG9yIG1heSBiZSBvZiBpbnRlcmVzdCB0bwotICAgICAqIHByb2ZpbGVycyAobGlrZSBwc3ljby5qaXQoKSksIGFsdGhvdWdoIG5vdGhpbmcgaW4gdGhlIGNvcmUgdXNlcyBpdC4KLSAgICAgKi8KLSAgICBpbnQgdGlja19jb3VudGVyOwotCiAgICAgaW50IGdpbHN0YXRlX2NvdW50ZXI7CiAKICAgICBQeU9iamVjdCAqYXN5bmNfZXhjOyAvKiBBc3luY2hyb25vdXMgZXhjZXB0aW9uIHRvIHJhaXNlICovCkBAIC0xMTcsNiArMTA4LDMyIEBACiAgICAgaW50IHRyYXNoX2RlbGV0ZV9uZXN0aW5nOwogICAgIFB5T2JqZWN0ICp0cmFzaF9kZWxldGVfbGF0ZXI7CiAKKyAgICAvKiBDYWxsZWQgd2hlbiBhIHRocmVhZCBzdGF0ZSBpcyBkZWxldGVkIG5vcm1hbGx5LCBidXQgbm90IHdoZW4gaXQKKyAgICAgKiBpcyBkZXN0cm95ZWQgYWZ0ZXIgZm9yaygpLgorICAgICAqIFBhaW46ICB0byBwcmV2ZW50IHJhcmUgYnV0IGZhdGFsIHNodXRkb3duIGVycm9ycyAoaXNzdWUgMTg4MDgpLAorICAgICAqIFRocmVhZC5qb2luKCkgbXVzdCB3YWl0IGZvciB0aGUgam9pbidlZCB0aHJlYWQncyB0c3RhdGUgdG8gYmUgdW5saW5rZWQKKyAgICAgKiBmcm9tIHRoZSB0c3RhdGUgY2hhaW4uICBUaGF0IGhhcHBlbnMgYXQgdGhlIGVuZCBvZiBhIHRocmVhZCdzIGxpZmUsCisgICAgICogaW4gcHlzdGF0ZS5jLgorICAgICAqIFRoZSBvYnZpb3VzIHdheSBkb2Vzbid0IHF1aXRlIHdvcms6ICBjcmVhdGUgYSBsb2NrIHdoaWNoIHRoZSB0c3RhdGUKKyAgICAgKiB1bmxpbmtpbmcgY29kZSByZWxlYXNlcywgYW5kIGhhdmUgVGhyZWFkLmpvaW4oKSB3YWl0IHRvIGFjcXVpcmUgdGhhdAorICAgICAqIGxvY2suICBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIF9hcmVfIGF0IHRoZSBlbmQgb2YgdGhlIHRocmVhZCdzIGxpZmU6CisgICAgICogaWYgdGhlIHRocmVhZCBob2xkcyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGxvY2ssIGRlY3JlZidpbmcgdGhlCisgICAgICogbG9jayB3aWxsIGRlbGV0ZSB0aGUgbG9jaywgYW5kIHRoYXQgbWF5IHRyaWdnZXIgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlCisgICAgICogaWYgdGhlcmUncyBhIHdlYWtyZWYsIHdpdGggYSBjYWxsYmFjaywgdG8gdGhlIGxvY2suICBCdXQgYnkgdGhpcyB0aW1lCisgICAgICogX1B5VGhyZWFkU3RhdGVfQ3VycmVudCBpcyBhbHJlYWR5IE5VTEwsIHNvIG9ubHkgdGhlIHNpbXBsZXN0IG9mIEMgY29kZQorICAgICAqIGNhbiBiZSBhbGxvd2VkIHRvIHJ1biAoaW4gcGFydGljdWxhciBpdCBtdXN0IG5vdCBiZSBwb3NzaWJsZSB0bworICAgICAqIHJlbGVhc2UgdGhlIEdJTCkuCisgICAgICogU28gaW5zdGVhZCBvZiBob2xkaW5nIHRoZSBsb2NrIGRpcmVjdGx5LCB0aGUgdHN0YXRlIGhvbGRzIGEgd2Vha3JlZiB0bworICAgICAqIHRoZSBsb2NrOiAgdGhhdCdzIHRoZSB2YWx1ZSBvZiBvbl9kZWxldGVfZGF0YSBiZWxvdy4gIERlY3JlZidpbmcgYQorICAgICAqIHdlYWtyZWYgaXMgaGFybWxlc3MuCisgICAgICogb25fZGVsZXRlIHBvaW50cyB0byBfdGhyZWFkbW9kdWxlLmMncyBzdGF0aWMgcmVsZWFzZV9zZW50aW5lbCgpIGZ1bmN0aW9uLgorICAgICAqIEFmdGVyIHRoZSB0c3RhdGUgaXMgdW5saW5rZWQsIHJlbGVhc2Vfc2VudGluZWwgaXMgY2FsbGVkIHdpdGggdGhlCisgICAgICogd2Vha3JlZi10by1sb2NrIChvbl9kZWxldGVfZGF0YSkgYXJndW1lbnQsIGFuZCByZWxlYXNlX3NlbnRpbmVsIHJlbGVhc2VzCisgICAgICogdGhlIGluZGlyZWN0bHkgaGVsZCBsb2NrLgorICAgICAqLworICAgIHZvaWQgKCpvbl9kZWxldGUpKHZvaWQgKik7CisgICAgdm9pZCAqb25fZGVsZXRlX2RhdGE7CisKICAgICAvKiBYWFggc2lnbmFsIGhhbmRsZXJzIHNob3VsZCBhbHNvIGJlIGhlcmUgKi8KIAogfSBQeVRocmVhZFN0YXRlOwpAQCAtMTMzLDEyICsxNTAsMTYgQEAKIFB5QVBJX0ZVTkMoaW50KSBQeVN0YXRlX1JlbW92ZU1vZHVsZShzdHJ1Y3QgUHlNb2R1bGVEZWYqKTsKICNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5U3RhdGVfRmluZE1vZHVsZShzdHJ1Y3QgUHlNb2R1bGVEZWYqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCkgX1B5U3RhdGVfQ2xlYXJNb2R1bGVzKHZvaWQpOworI2VuZGlmCiAKIFB5QVBJX0ZVTkMoUHlUaHJlYWRTdGF0ZSAqKSBQeVRocmVhZFN0YXRlX05ldyhQeUludGVycHJldGVyU3RhdGUgKik7CiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2MoUHlJbnRlcnByZXRlclN0YXRlICopOwogUHlBUElfRlVOQyh2b2lkKSBfUHlUaHJlYWRTdGF0ZV9Jbml0KFB5VGhyZWFkU3RhdGUgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfQ2xlYXIoUHlUaHJlYWRTdGF0ZSAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRTdGF0ZV9EZWxldGUoUHlUaHJlYWRTdGF0ZSAqKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5VGhyZWFkU3RhdGVfRGVsZXRlRXhjZXB0KFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSk7CiAjaWZkZWYgV0lUSF9USFJFQUQKIFB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlHSUxTdGF0ZV9SZWluaXQodm9pZCk7CkBAIC0yMTIsNiArMjMzLDExIEBACiAqLwogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKHZvaWQpOwogCisvKiBIZWxwZXIvZGlhZ25vc3RpYyBmdW5jdGlvbiAtIHJldHVybiAxIGlmIHRoZSBjdXJyZW50IHRocmVhZAorICogY3VycmVudGx5IGhvbGRzIHRoZSBHSUwsIDAgb3RoZXJ3aXNlCisgKi8KK1B5QVBJX0ZVTkMoaW50KSBQeUdJTFN0YXRlX0NoZWNrKHZvaWQpOworCiAjZW5kaWYgICAvKiAjaWZkZWYgV0lUSF9USFJFQUQgKi8KIAogLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIHN5cy5fY3VycmVudF9mcmFtZXMoKSAgUmV0dXJucyBhIGRpY3QgbWFwcGluZwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXRob25ydW4uaCBiL0luY2x1ZGUvcHl0aG9ucnVuLmgKaW5kZXggZThhNTgyZC4uZWMwNTY1ZSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXRob25ydW4uaAorKysgYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCkBAIC0yOCw2ICsyOCwxNCBAQAogUHlBUElfRlVOQyh2b2lkKSBQeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKik7CiBQeUFQSV9GVU5DKHdjaGFyX3QgKikgUHlfR2V0UHl0aG9uSG9tZSh2b2lkKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorLyogT25seSB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IGVtYmVkIHRoZSBpbnRlcnByZXRlciBhbmQgbmVlZCB0bworICogb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGVuY29kaW5nIGRldGVybWluYXRpb24gbWVjaGFuaXNtCisgKi8KK1B5QVBJX0ZVTkMoaW50KSBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKyNlbmRpZgorCiBQeUFQSV9GVU5DKHZvaWQpIFB5X0luaXRpYWxpemUodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5X0luaXRpYWxpemVFeChpbnQpOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQpAQCAtNjYsNiArNzQsMTIgQEAKICAgICBpbnQgc3RhcnQsCiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBQeUFyZW5hICphcmVuYSk7CitQeUFQSV9GVU5DKHN0cnVjdCBfbW9kICopIFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqcywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IHN0YXJ0LAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgUHlBcmVuYSAqYXJlbmEpOwogUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tRmlsZSgKICAgICBGSUxFICpmcCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCkBAIC03Niw2ICs5MCwxNiBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgaW50ICplcnJjb2RlLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoc3RydWN0IF9tb2QgKikgUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoCisgICAgRklMRSAqZnAsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGNvbnN0IGNoYXIqIGVuYywKKyAgICBpbnQgc3RhcnQsCisgICAgY2hhciAqcHMxLAorICAgIGNoYXIgKnBzMiwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIGludCAqZXJyY29kZSwKKyAgICBQeUFyZW5hICphcmVuYSk7CiAjZW5kaWYKIAogI2lmbmRlZiBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZwpAQCAtMTE3LDExICsxNDEsMjAgQEAKICAgICBpbnQgc3RhcnQsCiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBpbnQgb3B0aW1pemUpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeV9Db21waWxlU3RyaW5nT2JqZWN0KAorICAgIGNvbnN0IGNoYXIgKnN0ciwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIGludCBvcHRpbWl6ZSk7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoc3RydWN0IHN5bXRhYmxlICopIFB5X1N5bXRhYmxlU3RyaW5nKAogICAgIGNvbnN0IGNoYXIgKnN0ciwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgaW50IHN0YXJ0KTsKK1B5QVBJX0ZVTkMoc3RydWN0IHN5bXRhYmxlICopIFB5X1N5bXRhYmxlU3RyaW5nT2JqZWN0KAorICAgIGNvbnN0IGNoYXIgKnN0ciwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IHN0YXJ0KTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9QcmludCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfUHJpbnRFeChpbnQpOwpAQCAtMTk3LDcgKzIzMCw3IEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeUV4Y19Jbml0KFB5T2JqZWN0ICogYmx0aW5tb2QpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlJbXBvcnRIb29rc19Jbml0KHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIF9QeUZyYW1lX0luaXQodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeUZsb2F0X0luaXQodm9pZCk7CitQeUFQSV9GVU5DKGludCkgX1B5RmxvYXRfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUJ5dGVBcnJheV9Jbml0KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlSYW5kb21fSW5pdCh2b2lkKTsKICNlbmRpZgpAQCAtMjE3LDE5ICsyNTAsMjEgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlCeXRlQXJyYXlfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlGbG9hdF9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeU9TX0ZpbmlJbnRlcnJ1cHRzKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlHQ19EdW1wU2h1dGRvd25TdGF0cyh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5R0NfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTbGljZV9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlUeXBlX0Zpbmkodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVJhbmRvbV9GaW5pKHZvaWQpOwogCiBQeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUgKikgX1B5X0ZpbmFsaXppbmc7CiAjZW5kaWYKIAogLyogU3R1ZmYgd2l0aCBubyBwcm9wZXIgaG9tZSAoeWV0KSAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotUHlBUElfRlVOQyhjaGFyICopIFB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitQeUFQSV9GVU5DKGNoYXIgKikgUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKTsKICNlbmRpZgogUHlBUElfREFUQShpbnQpICgqUHlPU19JbnB1dEhvb2spKHZvaWQpOwotUHlBUElfREFUQShjaGFyKSAqKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK1B5QVBJX0RBVEEoY2hhcikgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUqKSBfUHlPU19SZWFkbGluZVRTdGF0ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zZXRvYmplY3QuaCBiL0luY2x1ZGUvc2V0b2JqZWN0LmgKaW5kZXggYTE0ODc0Yi4uYWUzZjU1NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zZXRvYmplY3QuaAorKysgYi9JbmNsdWRlL3NldG9iamVjdC5oCkBAIC0yMyw4ICsyMyw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICAvKiBDYWNoZWQgaGFzaCBjb2RlIG9mIHRoZSBrZXkuICovCi0gICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeV9oYXNoX3QgaGFzaDsKIH0gc2V0ZW50cnk7CiAKIApAQCAtNTEsOSArNTEsOSBAQAogICAgICAqLwogICAgIHNldGVudHJ5ICp0YWJsZTsKICAgICBzZXRlbnRyeSAqKCpsb29rdXApKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpOworICAgIFB5X2hhc2hfdCBoYXNoOyAgICAgICAgICAgICAvKiBvbmx5IHVzZWQgYnkgZnJvemVuc2V0IG9iamVjdHMgKi8KICAgICBzZXRlbnRyeSBzbWFsbHRhYmxlW1B5U2V0X01JTlNJWkVdOwogCi0gICAgUHlfaGFzaF90IGhhc2g7ICAgICAgICAgICAgICAgICAgLyogb25seSB1c2VkIGJ5IGZyb3plbnNldCBvYmplY3RzICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAgICAgIC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCiB9OwogI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCkBAIC02MSw2ICs2MSwxMCBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U2V0X1R5cGU7CiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlGcm96ZW5TZXRfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVNldEl0ZXJfVHlwZTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0RBVEEoUHlPYmplY3QgKikgX1B5U2V0X0R1bW15OworI2VuZGlmCisKIAogLyogSW52YXJpYW50cyBmb3IgZnJvemVuc2V0czoKICAqICAgICBkYXRhIGlzIGltbXV0YWJsZS4KQEAgLTEwMSw3ICsxMDUsNiBAQAogUHlBUElfRlVOQyhpbnQpIF9QeVNldF9VcGRhdGUoUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKml0ZXJhYmxlKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5U2V0X0NsZWFyRnJlZUxpc3Qodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeVNldF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL3NsaWNlb2JqZWN0LmggYi9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKaW5kZXggOGJlYzE3OS4uZjdlZTkwYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zbGljZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvc2xpY2VvYmplY3QuaApAQCAtMzQsNiArMzQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBzdGVwKTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U2xpY2VfRnJvbUluZGljZXMoUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBzdG9wKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhQeVNsaWNlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydF9wdHIsIFB5T2JqZWN0ICoqc3RvcF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0ZXBfcHRyKTsKICNlbmRpZgogUHlBUElfRlVOQyhpbnQpIFB5U2xpY2VfR2V0SW5kaWNlcyhQeU9iamVjdCAqciwgUHlfc3NpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIFB5X3NzaXplX3QgKnN0ZXApOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zdHJ1Y3RzZXEuaCBiL0luY2x1ZGUvc3RydWN0c2VxLmgKaW5kZXggMzBjNTJhYy4uYWYyMjcxNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zdHJ1Y3RzZXEuaAorKysgYi9JbmNsdWRlL3N0cnVjdHNlcS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CitQeUFQSV9GVU5DKGludCkgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoUHlUeXBlT2JqZWN0ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoUHlUeXBlT2JqZWN0KikgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlKFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3ltdGFibGUuaCBiL0luY2x1ZGUvc3ltdGFibGUuaAppbmRleCA2ZWQzYTJiLi4xY2ZkODg0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3N5bXRhYmxlLmgKKysrIGIvSW5jbHVkZS9zeW10YWJsZS5oCkBAIC0xNiw3ICsxNiw3IEBACiBzdHJ1Y3QgX3N5bXRhYmxlX2VudHJ5OwogCiBzdHJ1Y3Qgc3ltdGFibGUgewotICAgIGNvbnN0IGNoYXIgKnN0X2ZpbGVuYW1lOyAgICAgICAgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGNvbXBpbGVkLAorICAgIFB5T2JqZWN0ICpzdF9maWxlbmFtZTsgICAgICAgICAgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGNvbXBpbGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgc3RydWN0IF9zeW10YWJsZV9lbnRyeSAqc3RfY3VyOyAvKiBjdXJyZW50IHN5bWJvbCB0YWJsZSBlbnRyeSAqLwogICAgIHN0cnVjdCBfc3ltdGFibGVfZW50cnkgKnN0X3RvcDsgLyogc3ltYm9sIHRhYmxlIGVudHJ5IGZvciBtb2R1bGUgKi8KQEAgLTQxLDYgKzQxLDcgQEAKICAgICBQeU9iamVjdCAqc3RlX25hbWU7ICAgICAgLyogc3RyaW5nOiBuYW1lIG9mIGN1cnJlbnQgYmxvY2sgKi8KICAgICBQeU9iamVjdCAqc3RlX3Zhcm5hbWVzOyAgLyogbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzICovCiAgICAgUHlPYmplY3QgKnN0ZV9jaGlsZHJlbjsgIC8qIGxpc3Qgb2YgY2hpbGQgYmxvY2tzICovCisgICAgUHlPYmplY3QgKnN0ZV9kaXJlY3RpdmVzOy8qIGxvY2F0aW9ucyBvZiBnbG9iYWwgYW5kIG5vbmxvY2FsIHN0YXRlbWVudHMgKi8KICAgICBfUHlfYmxvY2tfdHkgc3RlX3R5cGU7ICAgLyogbW9kdWxlLCBjbGFzcywgb3IgZnVuY3Rpb24gKi8KICAgICBpbnQgc3RlX3Vub3B0aW1pemVkOyAgICAgLyogZmFsc2UgaWYgbmFtZXNwYWNlIGlzIG9wdGltaXplZCAqLwogICAgIGludCBzdGVfbmVzdGVkOyAgICAgIC8qIHRydWUgaWYgYmxvY2sgaXMgbmVzdGVkICovCkBAIC01Miw2ICs1Myw5IEBACiAgICAgdW5zaWduZWQgc3RlX3ZhcmtleXdvcmRzIDogMTsgLyogdHJ1ZSBpZiBibG9jayBoYXMgdmFya2V5d29yZHMgKi8KICAgICB1bnNpZ25lZCBzdGVfcmV0dXJuc192YWx1ZSA6IDE7ICAvKiB0cnVlIGlmIG5hbWVzcGFjZSB1c2VzIHJldHVybiB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXJndW1lbnQgKi8KKyAgICB1bnNpZ25lZCBzdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA6IDE7IC8qIGZvciBjbGFzcyBzY29wZXMsIHRydWUgaWYgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc3VyZSBvdmVyIF9fY2xhc3NfXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGNyZWF0ZWQgKi8KICAgICBpbnQgc3RlX2xpbmVubzsgICAgICAgICAgLyogZmlyc3QgbGluZSBvZiBibG9jayAqLwogICAgIGludCBzdGVfY29sX29mZnNldDsgICAgICAvKiBvZmZzZXQgb2YgZmlyc3QgbGluZSBvZiBibG9jayAqLwogICAgIGludCBzdGVfb3B0X2xpbmVubzsgICAgICAvKiBsaW5lbm8gb2YgbGFzdCBleGVjIG9yIGltcG9ydCAqICovCkBAIC03MCw2ICs3NCwxMCBAQAogICAgIG1vZF90eSBtb2QsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSk7CitQeUFQSV9GVU5DKHN0cnVjdCBzeW10YWJsZSAqKSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KAorICAgIG1vZF90eSBtb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSk7CiBQeUFQSV9GVU5DKFB5U1RFbnRyeU9iamVjdCAqKSBQeVN5bXRhYmxlX0xvb2t1cChzdHJ1Y3Qgc3ltdGFibGUgKiwgdm9pZCAqKTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeVN5bXRhYmxlX0ZyZWUoc3RydWN0IHN5bXRhYmxlICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS90b2tlbi5oIGIvSW5jbHVkZS90b2tlbi5oCmluZGV4IGY3ZjY1MDQuLjkwNTAyMmIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdG9rZW4uaAorKysgYi9JbmNsdWRlL3Rva2VuLmgKQEAgLTc1LDcgKzc1LDcgQEAKICNkZWZpbmUgSVNFT0YoeCkJCSgoeCkgPT0gRU5ETUFSS0VSKQogCiAKLVB5QVBJX0RBVEEoY2hhciAqKSBfUHlQYXJzZXJfVG9rZW5OYW1lc1tdOyAvKiBUb2tlbiBuYW1lcyAqLworUHlBUElfREFUQShjb25zdCBjaGFyICopIF9QeVBhcnNlcl9Ub2tlbk5hbWVzW107IC8qIFRva2VuIG5hbWVzICovCiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9PbmVDaGFyKGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9Ud29DaGFycyhpbnQsIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9UaHJlZUNoYXJzKGludCwgaW50LCBpbnQpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmggYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAppbmRleCBhOGY1YjVkLi42ZDgzMGMwIDEwMDY0NAotLS0gYS9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAorKysgYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaApAQCAtMTgwLDkgKzE4MCw5IEBACiAgICAgfSB3aGlsZSAoMCkKIAogLyogbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzICovCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IGNoICYmIGNoIDw9IDB4REZGRikKLSNkZWZpbmUgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURShjaCkgKDB4RDgwMCA8PSBjaCAmJiBjaCA8PSAweERCRkYpCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURShjaCkgKDB4REMwMCA8PSBjaCAmJiBjaCA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfSElHSF9TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gKGNoKSAmJiAoY2gpIDw9IDB4REJGRikKKyNkZWZpbmUgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFKGNoKSAoMHhEQzAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCiAvKiBKb2luIHR3byBzdXJyb2dhdGUgY2hhcmFjdGVycyBhbmQgcmV0dXJuIGEgc2luZ2xlIFB5X1VDUzQgdmFsdWUuICovCiAjZGVmaW5lIFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTKGhpZ2gsIGxvdykgIFwKICAgICAoKCgoKFB5X1VDUzQpKGhpZ2gpICYgMHgwM0ZGKSA8PCAxMCkgfCAgICAgIFwKQEAgLTg1OSw3ICs4NTksNyBAQAogKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCgKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqLCAgICAgLyogT2JqZWN0ICovCisgICAgUHlPYmplY3QgKm9iaiwgICAgICAgICAgICAgIC8qIE9iamVjdCAqLwogICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCAgICAgICAvKiBlbmNvZGluZyAqLwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CkBAIC04NzgsNyArODc4LDcgQEAKICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRnJvbU9iamVjdCgKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqICAgICAgLyogT2JqZWN0ICovCisgICAgUHlPYmplY3QgKm9iaiAgICAgIC8qIE9iamVjdCAqLwogICAgICk7CiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKApAQCAtODk4LDIyICs4OTgsMjggQEAKICAgICBQeV9VQ1M0IG1heGNoYXI7CiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIFB5X3NzaXplX3QgcG9zOwotICAgIC8qIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSBidWZmZXIgd2hlbiBvdmVyYWxsb2NhdGlvbiBpcyBlbmFibGVkLAotICAgICAgIHNlZSBfUHlVbmljb2RlV3JpdGVyX0luaXQoKSAqLworCisgICAgLyogbWluaW11bSBudW1iZXIgb2YgYWxsb2NhdGVkIGNoYXJhY3RlcnMgKGRlZmF1bHQ6IDApICovCiAgICAgUHlfc3NpemVfdCBtaW5fbGVuZ3RoOworCisgICAgLyogbWluaW11bSBjaGFyYWN0ZXIgKGRlZmF1bHQ6IDEyNywgQVNDSUkpICovCisgICAgUHlfVUNTNCBtaW5fY2hhcjsKKworICAgIC8qIElmIG5vbi16ZXJvLCBvdmVyYWxsb2NhdGUgdGhlIGJ1ZmZlciBieSAyNSUgKGRlZmF1bHQ6IDApLiAqLwogICAgIHVuc2lnbmVkIGNoYXIgb3ZlcmFsbG9jYXRlOworCiAgICAgLyogSWYgcmVhZG9ubHkgaXMgMSwgYnVmZmVyIGlzIGEgc2hhcmVkIHN0cmluZyAoY2Fubm90IGJlIG1vZGlmaWVkKQogICAgICAgIGFuZCBzaXplIGlzIHNldCB0byAwLiAqLwogICAgIHVuc2lnbmVkIGNoYXIgcmVhZG9ubHk7CiB9IF9QeVVuaWNvZGVXcml0ZXIgOwogCiAvKiBJbml0aWFsaXplIGEgVW5pY29kZSB3cml0ZXIuCi0KLSAgIElmIG1pbl9sZW5ndGggaXMgZ3JlYXRlciB0aGFuIHplcm8sIF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgpCi0gICBvdmVyYWxsb2NhdGVzIHRoZSBidWZmZXIgYW5kIG1pbl9sZW5ndGggaXMgdGhlIG1pbmltdW0gbGVuZ3RoIGluIGNoYXJhY3RlcnMKLSAgIG9mIHRoZSBidWZmZXIuICovCisgKgorICogQnkgZGVmYXVsdCwgdGhlIG1pbmltdW0gYnVmZmVyIHNpemUgaXMgMCBjaGFyYWN0ZXIgYW5kIG92ZXJhbGxvY2F0aW9uIGlzCisgKiBkaXNhYmxlZC4gU2V0IG1pbl9sZW5ndGgsIG1pbl9jaGFyIGFuZCBvdmVyYWxsb2NhdGUgYXR0cmlidXRlcyB0byBjb250cm9sCisgKiB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYnVmZmVyLiAqLwogUHlBUElfRlVOQyh2b2lkKQotX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfc3NpemVfdCBtaW5fbGVuZ3RoKTsKK19QeVVuaWNvZGVXcml0ZXJfSW5pdChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpOwogCiAvKiBQcmVwYXJlIHRoZSBidWZmZXIgdG8gd3JpdGUgJ2xlbmd0aCcgY2hhcmFjdGVycwogICAgd2l0aCB0aGUgc3BlY2lmaWVkIG1heGltdW0gY2hhcmFjdGVyLgpAQCAtOTMzLDEyICs5MzksNDQgQEAKIF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZUludGVybmFsKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuZ3RoLCBQeV9VQ1M0IG1heGNoYXIpOwogCisvKiBBcHBlbmQgYSBVbmljb2RlIGNoYXJhY3Rlci4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogUHlBUElfRlVOQyhpbnQpCi1fUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlPYmplY3QgKnN0cik7CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlfVUNTNCBjaAorICAgICk7CiAKKy8qIEFwcGVuZCBhIFVuaWNvZGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIFB5T2JqZWN0ICpzdHIgICAgICAgICAgICAgICAvKiBVbmljb2RlIHN0cmluZyAqLworICAgICk7CisKKy8qIEFwcGVuZCBhIHN1YnN0cmluZyBvZiBhIFVuaWNvZGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIFB5T2JqZWN0ICpzdHIsICAgICAgICAgICAgICAvKiBVbmljb2RlIHN0cmluZyAqLworICAgIFB5X3NzaXplX3Qgc3RhcnQsCisgICAgUHlfc3NpemVfdCBlbmQKKyAgICApOworCisvKiBBcHBlbmQgYSBsYXRpbjEtZW5jb2RlZCBieXRlIHN0cmluZy4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworUHlBUElfRlVOQyhpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ3N0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgY29uc3QgY2hhciAqc3RyLCAgICAgICAgICAgIC8qIGxhdGluMS1lbmNvZGVkIGJ5dGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBsZW4gICAgICAgICAgICAgIC8qIGxlbmd0aCBpbiBieXRlcyAqLworICAgICk7CisKKy8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIHdyaXRlciBhcyBhbiBVbmljb2RlIHN0cmluZy4gQ2xlYXIgdGhlCisgICBidWZmZXIgb2YgdGhlIHdyaXRlci4gUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gTlVMTAorICAgb24gZXJyb3IuICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopCiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpOwogCisvKiBEZWFsbG9jYXRlIG1lbW9yeSBvZiBhIHdyaXRlciAoY2xlYXIgaXRzIGludGVybmFsIGJ1ZmZlcikuICovCiBQeUFQSV9GVU5DKHZvaWQpCiBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKTsKICNlbmRpZgpAQCAtOTc3LDcgKzEwMTUsNyBAQAogICAgVGhlIGJ1ZmZlciBpcyBjb3BpZWQgaW50byB0aGUgbmV3IG9iamVjdC4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoCi0gICAgcmVnaXN0ZXIgY29uc3Qgd2NoYXJfdCAqdywgIC8qIHdjaGFyX3QgYnVmZmVyICovCisgICAgY29uc3Qgd2NoYXJfdCAqdywgICAgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCiAgICAgUHlfc3NpemVfdCBzaXplICAgICAgICAgICAgIC8qIHNpemUgb2YgYnVmZmVyICovCiAgICAgKTsKIApAQCAtOTk1LDcgKzEwMzMsNyBAQAogCiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIFB5VW5pY29kZV9Bc1dpZGVDaGFyKAogICAgIFB5T2JqZWN0ICp1bmljb2RlLCAgICAgICAgICAvKiBVbmljb2RlIG9iamVjdCAqLwotICAgIHJlZ2lzdGVyIHdjaGFyX3QgKncsICAgICAgICAvKiB3Y2hhcl90IGJ1ZmZlciAqLworICAgIHdjaGFyX3QgKncsICAgICAgICAgICAgICAgICAvKiB3Y2hhcl90IGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3Qgc2l6ZSAgICAgICAgICAgICAvKiBzaXplIG9mIGJ1ZmZlciAqLwogICAgICk7CiAKQEAgLTE3MjYsNyArMTc2NCw3IEBACiAvKiBFbmNvZGUgYSBVbmljb2RlIG9iamVjdCB0byB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcuIFRoZSBlbmNvZGVyIGlzCiAgICBzdHJpY3QgaXMgKnN1cnJvZ2F0ZWVzY2FwZSogaXMgZXF1YWwgdG8gemVybywgb3RoZXJ3aXNlIHRoZQogICAgInN1cnJvZ2F0ZWVzY2FwZSIgZXJyb3IgaGFuZGxlciBpcyB1c2VkLiBSZXR1cm4gYSBieXRlcyBvYmplY3QuIFRoZSBzdHJpbmcKLSAgIGNhbm5vdCBjb250YWluIGVtYmVkZGVkIG51bGwgY2hhcmFjdGVycy4uICovCisgICBjYW5ub3QgY29udGFpbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRW5jb2RlTG9jYWxlKAogICAgIFB5T2JqZWN0ICp1bmljb2RlLApAQCAtMTk1MCw3ICsxOTg4LDggQEAKICAgICApOwogCiAvKiBDb21wYXJlIHR3byBzdHJpbmdzIGFuZCByZXR1cm4gLTEsIDAsIDEgZm9yIGxlc3MgdGhhbiwgZXF1YWwsCi0gICBncmVhdGVyIHRoYW4gcmVzcC4gKi8KKyAgIGdyZWF0ZXIgdGhhbiByZXNwLgorICAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiAKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfQ29tcGFyZSgKICAgICBQeU9iamVjdCAqbGVmdCwgICAgICAgICAgICAgLyogTGVmdCBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvd2FybmluZ3MuaCBiL0luY2x1ZGUvd2FybmluZ3MuaAppbmRleCBiN2RiNjgxLi4yMTdjMDZhIDEwMDY0NAotLS0gYS9JbmNsdWRlL3dhcm5pbmdzLmgKKysrIGIvSW5jbHVkZS93YXJuaW5ncy5oCkBAIC0xNyw2ICsxNywxMyBAQAogICAgIFB5X3NzaXplX3Qgc3RhY2tfbGV2ZWwsCiAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAgICAgICAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICAqLwogICAgIC4uLik7CitQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KAorICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICBQeU9iamVjdCAqbWVzc2FnZSwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubywKKyAgICBQeU9iamVjdCAqbW9kdWxlLAorICAgIFB5T2JqZWN0ICpyZWdpc3RyeSk7CiBQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0KAogICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKICAgICBjb25zdCBjaGFyICptZXNzYWdlLCAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KQEAgLTI1LDYgKzMyLDEyIEBACiAgICAgY29uc3QgY2hhciAqbW9kdWxlLCAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKnJlZ2lzdHJ5KTsKIAorUHlBUElfRlVOQyhpbnQpCitQeUVycl9XYXJuRXhwbGljaXRGb3JtYXQoUHlPYmplY3QgKmNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKwogLyogREVQUkVDQVRFRDogVXNlIFB5RXJyX1dhcm5FeCgpIGluc3RlYWQuICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5RXJyX1dhcm4oY2F0ZWdvcnksIG1zZykgUHlFcnJfV2FybkV4KGNhdGVnb3J5LCBtc2csIDEpCmRpZmYgLS1naXQgYS9MaWIvX2Jvb3Rsb2NhbGUucHkgYi9MaWIvX2Jvb3Rsb2NhbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjY2FjMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9fYm9vdGxvY2FsZS5weQpAQCAtMCwwICsxLDM0IEBACisiIiJBIG1pbmltYWwgc3Vic2V0IG9mIHRoZSBsb2NhbGUgbW9kdWxlIHVzZWQgYXQgaW50ZXJwcmV0ZXIgc3RhcnR1cAorKGltcG9ydGVkIGJ5IHRoZSBfaW8gbW9kdWxlKSwgaW4gb3JkZXIgdG8gcmVkdWNlIHN0YXJ0dXAgdGltZS4KKworRG9uJ3QgaW1wb3J0IGRpcmVjdGx5IGZyb20gdGhpcmQtcGFydHkgY29kZTsgdXNlIHRoZSBgbG9jYWxlYCBtb2R1bGUgaW5zdGVhZCEKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgX2xvY2FsZQorCitpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgcmV0dXJuIF9sb2NhbGUuX2dldGRlZmF1bHRsb2NhbGUoKVsxXQorZWxzZToKKyAgICB0cnk6CisgICAgICAgIF9sb2NhbGUuQ09ERVNFVAorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgICAgICMgVGhpcyBwYXRoIGZvciBsZWdhY3kgc3lzdGVtcyBuZWVkcyB0aGUgbW9yZSBjb21wbGV4CisgICAgICAgICAgICAjIGdldGRlZmF1bHRsb2NhbGUoKSBmdW5jdGlvbiwgaW1wb3J0IHRoZSBmdWxsIGxvY2FsZSBtb2R1bGUuCisgICAgICAgICAgICBpbXBvcnQgbG9jYWxlCisgICAgICAgICAgICByZXR1cm4gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZSkKKyAgICBlbHNlOgorICAgICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlPVRydWUpOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBkb19zZXRsb2NhbGUKKyAgICAgICAgICAgIHJlc3VsdCA9IF9sb2NhbGUubmxfbGFuZ2luZm8oX2xvY2FsZS5DT0RFU0VUKQorICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICAgICMgbmxfbGFuZ2luZm8gY2FuIHJldHVybiBhbiBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgICAgICAjIHdoZW4gdGhlIHNldHRpbmcgaGFzIGFuIGludmFsaWQgdmFsdWUuCisgICAgICAgICAgICAgICAgIyBEZWZhdWx0IHRvIFVURi04IGluIHRoYXQgY2FzZSBiZWNhdXNlCisgICAgICAgICAgICAgICAgIyBVVEYtOCBpcyB0aGUgZGVmYXVsdCBjaGFyc2V0IG9uIE9TWCBhbmQKKyAgICAgICAgICAgICAgICAjIHJldHVybmluZyBub3RoaW5nIHdpbGwgY3Jhc2ggdGhlCisgICAgICAgICAgICAgICAgIyBpbnRlcnByZXRlci4KKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnVVRGLTgnCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weSBiL0xpYi9fY29sbGVjdGlvbnNfYWJjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTFmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQpAQCAtMCwwICsxLDczNCBAQAorIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorCisiIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGZvciBjb2xsZWN0aW9ucywgYWNjb3JkaW5nIHRvIFBFUCAzMTE5LgorCitVbml0IHRlc3RzIGFyZSBpbiB0ZXN0X2NvbGxlY3Rpb25zLgorIiIiCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAoraW1wb3J0IHN5cworCitfX2FsbF9fID0gWyJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsCisgICAgICAgICAgICJTaXplZCIsICJDb250YWluZXIiLCAiQ2FsbGFibGUiLAorICAgICAgICAgICAiU2V0IiwgIk11dGFibGVTZXQiLAorICAgICAgICAgICAiTWFwcGluZyIsICJNdXRhYmxlTWFwcGluZyIsCisgICAgICAgICAgICJNYXBwaW5nVmlldyIsICJLZXlzVmlldyIsICJJdGVtc1ZpZXciLCAiVmFsdWVzVmlldyIsCisgICAgICAgICAgICJTZXF1ZW5jZSIsICJNdXRhYmxlU2VxdWVuY2UiLAorICAgICAgICAgICAiQnl0ZVN0cmluZyIsCisgICAgICAgICAgIF0KKworIyBUaGlzIG1vZHVsZSBoYXMgYmVlbiByZW5hbWVkIGZyb20gY29sbGVjdGlvbnMuYWJjIHRvIF9jb2xsZWN0aW9uc19hYmMgdG8KKyMgc3BlZWQgdXAgaW50ZXJwcmV0ZXIgc3RhcnR1cC4gU29tZSBvZiB0aGUgdHlwZXMgc3VjaCBhcyBNdXRhYmxlTWFwcGluZyBhcmUKKyMgcmVxdWlyZWQgZWFybHkgYnV0IGNvbGxlY3Rpb25zIG1vZHVsZSBpbXBvcnRzIGEgbG90IG9mIG90aGVyIG1vZHVsZXMuCisjIFNlZSBpc3N1ZSAjMTkyMTgKK19fbmFtZV9fID0gImNvbGxlY3Rpb25zLmFiYyIKKworIyBQcml2YXRlIGxpc3Qgb2YgdHlwZXMgdGhhdCB3ZSB3YW50IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHZhcmlvdXMgQUJDcworIyBzbyB0aGF0IHRoZXkgd2lsbCBwYXNzIHRlc3RzIGxpa2U6CisjICAgICAgIGl0ID0gaXRlcihzb21lYnl0ZWFycmF5KQorIyAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpdCwgSXRlcmFibGUpCisjIE5vdGU6ICBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRoZXNlIHR5cGVzIG1hbnkgbm90IGJlIGRpc3RpbmN0CisjIGFuZCB0aGV5IG1ha2UgaGF2ZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdHlwZXMgdGhhdAorIyBhcmUgbm90IGluY2x1ZGVkIG9uIHRoaXMgbGlzdC4KK2J5dGVzX2l0ZXJhdG9yID0gdHlwZShpdGVyKGInJykpCitieXRlYXJyYXlfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYnl0ZWFycmF5KCkpKQorI2NhbGxhYmxlX2l0ZXJhdG9yID0gPz8/CitkaWN0X2tleWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LmtleXMoKSkpCitkaWN0X3ZhbHVlaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30udmFsdWVzKCkpKQorZGljdF9pdGVtaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30uaXRlbXMoKSkpCitsaXN0X2l0ZXJhdG9yID0gdHlwZShpdGVyKFtdKSkKK2xpc3RfcmV2ZXJzZWl0ZXJhdG9yID0gdHlwZShpdGVyKHJldmVyc2VkKFtdKSkpCityYW5nZV9pdGVyYXRvciA9IHR5cGUoaXRlcihyYW5nZSgwKSkpCitzZXRfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoc2V0KCkpKQorc3RyX2l0ZXJhdG9yID0gdHlwZShpdGVyKCIiKSkKK3R1cGxlX2l0ZXJhdG9yID0gdHlwZShpdGVyKCgpKSkKK3ppcF9pdGVyYXRvciA9IHR5cGUoaXRlcih6aXAoKSkpCisjIyB2aWV3cyAjIworZGljdF9rZXlzID0gdHlwZSh7fS5rZXlzKCkpCitkaWN0X3ZhbHVlcyA9IHR5cGUoe30udmFsdWVzKCkpCitkaWN0X2l0ZW1zID0gdHlwZSh7fS5pdGVtcygpKQorIyMgbWlzYyAjIworbWFwcGluZ3Byb3h5ID0gdHlwZSh0eXBlLl9fZGljdF9fKQorCisKKyMjIyBPTkUtVFJJQ0sgUE9OSUVTICMjIworCitjbGFzcyBIYXNoYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIEhhc2hhYmxlOgorICAgICAgICAgICAgZm9yIEIgaW4gQy5fX21yb19fOgorICAgICAgICAgICAgICAgIGlmICJfX2hhc2hfXyIgaW4gQi5fX2RpY3RfXzoKKyAgICAgICAgICAgICAgICAgICAgaWYgQi5fX2RpY3RfX1siX19oYXNoX18iXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIEl0ZXJhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHdoaWxlIEZhbHNlOgorICAgICAgICAgICAgeWllbGQgTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIEl0ZXJhYmxlOgorICAgICAgICAgICAgaWYgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIEl0ZXJhdG9yKEl0ZXJhYmxlKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgICdSZXR1cm4gdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvci4gV2hlbiBleGhhdXN0ZWQsIHJhaXNlIFN0b3BJdGVyYXRpb24nCisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBJdGVyYXRvcjoKKyAgICAgICAgICAgIGlmIChhbnkoIl9fbmV4dF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykgYW5kCisgICAgICAgICAgICAgICAgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZXNfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihieXRlYXJyYXlfaXRlcmF0b3IpCisjSXRlcmF0b3IucmVnaXN0ZXIoY2FsbGFibGVfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihkaWN0X2tleWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF92YWx1ZWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9pdGVtaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihsaXN0X2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9yZXZlcnNlaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihyYW5nZV9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHNldF9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHN0cl9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHR1cGxlX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoemlwX2l0ZXJhdG9yKQorCitjbGFzcyBTaXplZChtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiAwCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgU2l6ZWQ6CisgICAgICAgICAgICBpZiBhbnkoIl9fbGVuX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBDb250YWluZXIobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIENvbnRhaW5lcjoKKyAgICAgICAgICAgIGlmIGFueSgiX19jb250YWluc19fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQ2FsbGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgQ2FsbGFibGU6CisgICAgICAgICAgICBpZiBhbnkoIl9fY2FsbF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworIyMjIFNFVFMgIyMjCisKKworY2xhc3MgU2V0KFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKKworICAgICIiIkEgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fIGFuZCBfX2xlbl9fLgorCisgICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCisgICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCisgICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGlmIGxlbihzZWxmKSA+IGxlbihvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIGVsZW0gaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIGVsZW0gbm90IGluIG90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gb3RoZXIuX19sdF9fKHNlbGYpCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIG90aGVyLl9fbGVfXyhzZWxmKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPT0gbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbV9pdGVyYWJsZShjbHMsIGl0KToKKyAgICAgICAgJycnQ29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmcm9tIGFueSBpdGVyYWJsZSBpbnB1dC4KKworICAgICAgICBNdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUKKyAgICAgICAgZG9lcyBub3QgYWNjZXB0IGFuIGl0ZXJhYmxlIGZvciBhbiBpbnB1dC4KKyAgICAgICAgJycnCisgICAgICAgIHJldHVybiBjbHMoaXQpCisKKyAgICBkZWYgX19hbmRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIG90aGVyIGlmIHZhbHVlIGluIHNlbGYpCisKKyAgICBkZWYgaXNkaXNqb2ludChzZWxmLCBvdGhlcik6CisgICAgICAgICdSZXR1cm4gVHJ1ZSBpZiB0d28gc2V0cyBoYXZlIGEgbnVsbCBpbnRlcnNlY3Rpb24uJworICAgICAgICBmb3IgdmFsdWUgaW4gb3RoZXI6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgY2hhaW4gPSAoZSBmb3IgcyBpbiAoc2VsZiwgb3RoZXIpIGZvciBlIGluIHMpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKGNoYWluKQorCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBvdGhlcikKKworICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQorICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQorCisgICAgZGVmIF9oYXNoKHNlbGYpOgorICAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIHZhbHVlIG9mIGEgc2V0LgorCisgICAgICAgIE5vdGUgdGhhdCB3ZSBkb24ndCBkZWZpbmUgX19oYXNoX186IG5vdCBhbGwgc2V0cyBhcmUgaGFzaGFibGUuCisgICAgICAgIEJ1dCBpZiB5b3UgZGVmaW5lIGEgaGFzaGFibGUgc2V0IHR5cGUsIGl0cyBfX2hhc2hfXyBzaG91bGQKKyAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uLgorCisgICAgICAgIFRoaXMgbXVzdCBiZSBjb21wYXRpYmxlIF9fZXFfXy4KKworICAgICAgICBBbGwgc2V0cyBvdWdodCB0byBjb21wYXJlIGVxdWFsIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZQorICAgICAgICBlbGVtZW50cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZAorICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHM7IHNvIHRoZXJlJ3Mgbm90IG11Y2gKKyAgICAgICAgZnJlZWRvbSBmb3IgX19lcV9fIG9yIF9faGFzaF9fLiAgV2UgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkCisgICAgICAgIGJ5IHRoZSBidWlsdC1pbiBmcm96ZW5zZXQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIE1BWCA9IHN5cy5tYXhzaXplCisgICAgICAgIE1BU0sgPSAyICogTUFYICsgMQorICAgICAgICBuID0gbGVuKHNlbGYpCisgICAgICAgIGggPSAxOTI3ODY4MjM3ICogKG4gKyAxKQorICAgICAgICBoICY9IE1BU0sKKyAgICAgICAgZm9yIHggaW4gc2VsZjoKKyAgICAgICAgICAgIGh4ID0gaGFzaCh4KQorICAgICAgICAgICAgaCBePSAoaHggXiAoaHggPDwgMTYpIF4gODk4Njk3NDcpICAqIDM2NDQ3OTgxNjcKKyAgICAgICAgICAgIGggJj0gTUFTSworICAgICAgICBoID0gaCAqIDY5MDY5ICsgOTA3MTMzOTIzCisgICAgICAgIGggJj0gTUFTSworICAgICAgICBpZiBoID4gTUFYOgorICAgICAgICAgICAgaCAtPSBNQVNLICsgMQorICAgICAgICBpZiBoID09IC0xOgorICAgICAgICAgICAgaCA9IDU5MDkyMzcxMworICAgICAgICByZXR1cm4gaAorCitTZXQucmVnaXN0ZXIoZnJvemVuc2V0KQorCisKK2NsYXNzIE11dGFibGVTZXQoU2V0KToKKyAgICAiIiJBIG11dGFibGUgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fLCBfX2xlbl9fLAorICAgIGFkZCgpLCBhbmQgZGlzY2FyZCgpLgorCisgICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCisgICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCisgICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIkFkZCBhbiBlbGVtZW50LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZGlzY2FyZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiAgRG8gbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBhYnNlbnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gSWYgbm90IGEgbWVtYmVyLCByYWlzZSBhIEtleUVycm9yLiIiIgorICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKHZhbHVlKQorICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisKKyAgICBkZWYgcG9wKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHBvcHBlZCB2YWx1ZS4gIFJhaXNlIEtleUVycm9yIGlmIGVtcHR5LiIiIgorICAgICAgICBpdCA9IGl0ZXIoc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlRoaXMgaXMgc2xvdyAoY3JlYXRlcyBOIG5ldyBpdGVyYXRvcnMhKSBidXQgZWZmZWN0aXZlLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF9faW9yX18oc2VsZiwgaXQpOgorICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2lhbmRfXyhzZWxmLCBpdCk6CisgICAgICAgIGZvciB2YWx1ZSBpbiAoc2VsZiAtIGl0KToKKyAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBpdCk6CisgICAgICAgIGlmIGl0IGlzIHNlbGY6CisgICAgICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgorICAgICAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19pc3ViX18oc2VsZiwgaXQpOgorICAgICAgICBpZiBpdCBpcyBzZWxmOgorICAgICAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCitNdXRhYmxlU2V0LnJlZ2lzdGVyKHNldCkKKworCisjIyMgTUFQUElOR1MgIyMjCisKKworY2xhc3MgTWFwcGluZyhTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgIiIiQSBNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nIGtleS92YWx1ZQorICAgIHBhaXJzLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KKworICAgICIiIgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJhaXNlIEtleUVycm9yCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgJ0QuZ2V0KGtbLGRdKSAtPiBEW2tdIGlmIGsgaW4gRCwgZWxzZSBkLiAgZCBkZWZhdWx0cyB0byBOb25lLicKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICJELmtleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBrZXlzIgorICAgICAgICByZXR1cm4gS2V5c1ZpZXcoc2VsZikKKworICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgIkQuaXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBpdGVtcyIKKyAgICAgICAgcmV0dXJuIEl0ZW1zVmlldyhzZWxmKQorCisgICAgZGVmIHZhbHVlcyhzZWxmKToKKyAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIKKyAgICAgICAgcmV0dXJuIFZhbHVlc1ZpZXcoc2VsZikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZi5pdGVtcygpKSA9PSBkaWN0KG90aGVyLml0ZW1zKCkpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKKworTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCisKKworY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgorICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCisKKworY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9tYXBwaW5nCisKK0tleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKKworCitjbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKKyAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKKyAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKKworSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCisKKworY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6CisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgorICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6CisgICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KKworVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKKworCitjbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCisgICAga2V5L3ZhbHVlIHBhaXJzLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKKyAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgX19tYXJrZXIgPSBvYmplY3QoKQorCisgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgorICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KKyAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgcG9waXRlbShzZWxmKToKKyAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCisgICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCisgICAgICAgICcnJworICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKKyAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCisgICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KKyAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2CisgICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgorICAgICAgICAnJycKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAyIHBvc2l0aW9uYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKHt9IGdpdmVuKSIuZm9ybWF0KGxlbihhcmdzKSkpCisgICAgICAgIGVsaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIikKKyAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKKworICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQorICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6CisgICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyLmtleXMoKToKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlcjoKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2RzLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorCisgICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAnRC5zZXRkZWZhdWx0KGtbLGRdKSAtPiBELmdldChrLGQpLCBhbHNvIHNldCBEW2tdPWQgaWYgayBub3QgaW4gRCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmW2tleV0gPSBkZWZhdWx0CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKK011dGFibGVNYXBwaW5nLnJlZ2lzdGVyKGRpY3QpCisKKworIyMjIFNFUVVFTkNFUyAjIyMKKworCitjbGFzcyBTZXF1ZW5jZShTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLW9ubHkgc2VxdWVuY2UuCisKKyAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgX19uZXdfXyBvciBfX2luaXRfXywKKyAgICBfX2dldGl0ZW1fXywgYW5kIF9fbGVuX18uCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBpID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHYgPSBzZWxmW2ldCisgICAgICAgICAgICAgICAgeWllbGQgdgorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIGZvciB2IGluIHNlbGY6CisgICAgICAgICAgICBpZiB2ID09IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYpKSk6CisgICAgICAgICAgICB5aWVsZCBzZWxmW2ldCisKKyAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUpOgorICAgICAgICAnJydTLmluZGV4KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZS4KKyAgICAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgorICAgICAgICAnJycKKyAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHNlbGYpOgorICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisKKyAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgorICAgICAgICAnUy5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlJworICAgICAgICByZXR1cm4gc3VtKDEgZm9yIHYgaW4gc2VsZiBpZiB2ID09IHZhbHVlKQorCitTZXF1ZW5jZS5yZWdpc3Rlcih0dXBsZSkKK1NlcXVlbmNlLnJlZ2lzdGVyKHN0cikKK1NlcXVlbmNlLnJlZ2lzdGVyKHJhbmdlKQorU2VxdWVuY2UucmVnaXN0ZXIobWVtb3J5dmlldykKKworCitjbGFzcyBCeXRlU3RyaW5nKFNlcXVlbmNlKToKKworICAgICIiIlRoaXMgdW5pZmllcyBieXRlcyBhbmQgYnl0ZWFycmF5LgorCisgICAgWFhYIFNob3VsZCBhZGQgYWxsIHRoZWlyIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCitCeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVzKQorQnl0ZVN0cmluZy5yZWdpc3RlcihieXRlYXJyYXkpCisKKworY2xhc3MgTXV0YWJsZVNlcXVlbmNlKFNlcXVlbmNlKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLXdyaXRlIHNlcXVlbmNlLgorCisgICAgQ29uY3JldGUgc3ViY2xhc3NlcyBtdXN0IHByb3ZpZGUgX19uZXdfXyBvciBfX2luaXRfXywKKyAgICBfX2dldGl0ZW1fXywgX19zZXRpdGVtX18sIF9fZGVsaXRlbV9fLCBfX2xlbl9fLCBhbmQgaW5zZXJ0KCkuCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgdmFsdWUpOgorICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCB2YWx1ZSk6CisgICAgICAgICdTLmluc2VydChpbmRleCwgdmFsdWUpIC0tIGluc2VydCB2YWx1ZSBiZWZvcmUgaW5kZXgnCisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgdmFsdWUpOgorICAgICAgICAnUy5hcHBlbmQodmFsdWUpIC0tIGFwcGVuZCB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZScKKyAgICAgICAgc2VsZi5pbnNlcnQobGVuKHNlbGYpLCB2YWx1ZSkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgJ1MuY2xlYXIoKSAtPiBOb25lIC0tIHJlbW92ZSBhbGwgaXRlbXMgZnJvbSBTJworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgcmV2ZXJzZShzZWxmKToKKyAgICAgICAgJ1MucmV2ZXJzZSgpIC0tIHJldmVyc2UgKklOIFBMQUNFKicKKyAgICAgICAgbiA9IGxlbihzZWxmKQorICAgICAgICBmb3IgaSBpbiByYW5nZShuLy8yKToKKyAgICAgICAgICAgIHNlbGZbaV0sIHNlbGZbbi1pLTFdID0gc2VsZltuLWktMV0sIHNlbGZbaV0KKworICAgIGRlZiBleHRlbmQoc2VsZiwgdmFsdWVzKToKKyAgICAgICAgJ1MuZXh0ZW5kKGl0ZXJhYmxlKSAtLSBleHRlbmQgc2VxdWVuY2UgYnkgYXBwZW5kaW5nIGVsZW1lbnRzIGZyb20gdGhlIGl0ZXJhYmxlJworICAgICAgICBmb3IgdiBpbiB2YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFwcGVuZCh2KQorCisgICAgZGVmIHBvcChzZWxmLCBpbmRleD0tMSk6CisgICAgICAgICcnJ1MucG9wKFtpbmRleF0pIC0+IGl0ZW0gLS0gcmVtb3ZlIGFuZCByZXR1cm4gaXRlbSBhdCBpbmRleCAoZGVmYXVsdCBsYXN0KS4KKyAgICAgICAgICAgUmFpc2UgSW5kZXhFcnJvciBpZiBsaXN0IGlzIGVtcHR5IG9yIGluZGV4IGlzIG91dCBvZiByYW5nZS4KKyAgICAgICAgJycnCisgICAgICAgIHYgPSBzZWxmW2luZGV4XQorICAgICAgICBkZWwgc2VsZltpbmRleF0KKyAgICAgICAgcmV0dXJuIHYKKworICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgorICAgICAgICAnJydTLnJlbW92ZSh2YWx1ZSkgLS0gcmVtb3ZlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdmFsdWUuCisgICAgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgorICAgICAgICAnJycKKyAgICAgICAgZGVsIHNlbGZbc2VsZi5pbmRleCh2YWx1ZSldCisKKyAgICBkZWYgX19pYWRkX18oc2VsZiwgdmFsdWVzKToKKyAgICAgICAgc2VsZi5leHRlbmQodmFsdWVzKQorICAgICAgICByZXR1cm4gc2VsZgorCitNdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIobGlzdCkKK011dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihieXRlYXJyYXkpICAjIE11bHRpcGx5IGluaGVyaXRpbmcsIHNlZSBCeXRlU3RyaW5nCmRpZmYgLS1naXQgYS9MaWIvX2R1bW15X3RocmVhZC5weSBiL0xpYi9fZHVtbXlfdGhyZWFkLnB5CmluZGV4IDEzYjFmMjYuLmI2N2NmYjkgMTAwNjQ0Ci0tLSBhL0xpYi9fZHVtbXlfdGhyZWFkLnB5CisrKyBiL0xpYi9fZHVtbXlfdGhyZWFkLnB5CkBAIC04MSw2ICs4MSwxMCBAQAogICAgICAgICByYWlzZSBlcnJvcigic2V0dGluZyB0aHJlYWQgc3RhY2sgc2l6ZSBub3Qgc3VwcG9ydGVkIikKICAgICByZXR1cm4gMAogCitkZWYgX3NldF9zZW50aW5lbCgpOgorICAgICIiIkR1bW15IGltcGxlbWVudGF0aW9uIG9mIF90aHJlYWQuX3NldF9zZW50aW5lbCgpLiIiIgorICAgIHJldHVybiBMb2NrVHlwZSgpCisKIGNsYXNzIExvY2tUeXBlKG9iamVjdCk6CiAgICAgIiIiQ2xhc3MgaW1wbGVtZW50aW5nIGR1bW15IGltcGxlbWVudGF0aW9uIG9mIF90aHJlYWQuTG9ja1R5cGUuCiAKZGlmZiAtLWdpdCBhL0xpYi9fb3N4X3N1cHBvcnQucHkgYi9MaWIvX29zeF9zdXBwb3J0LnB5CmluZGV4IDUwYjJkMTcuLjQwZmM3OGIgMTAwNjQ0Ci0tLSBhL0xpYi9fb3N4X3N1cHBvcnQucHkKKysrIGIvTGliL19vc3hfc3VwcG9ydC5weQpAQCAtMzgsNyArMzgsNyBAQAogICAgIHBhdGhzID0gcGF0aC5zcGxpdChvcy5wYXRoc2VwKQogICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZXhlY3V0YWJsZSkKIAotICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBvcy5uYW1lID09ICdvczInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgorICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJykgYW5kIChleHQgIT0gJy5leGUnKToKICAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUgKyAnLmV4ZScKIAogICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShleGVjdXRhYmxlKToKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgX1NZU1RFTV9WRVJTSU9OID0gJycKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oJy9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCcpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgV2UncmUgb24gYSBwbGFpbiBkYXJ3aW4gYm94LCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgICAgICAgICMgYmVoYXZpb3VyLgogICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL19weWlvLnB5IGIvTGliL19weWlvLnB5CmluZGV4IGFhYjYwZGIuLjc4YzZkZmIgMTAwNjQ0Ci0tLSBhL0xpYi9fcHlpby5weQorKysgYi9MaWIvX3B5aW8ucHkKQEAgLTM0LDcgKzM0LDcgQEAKIGRlZiBvcGVuKGZpbGUsIG1vZGU9InIiLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLAogICAgICAgICAgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUsIG9wZW5lcj1Ob25lKToKIAotICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIElPRXJyb3IgdXBvbiBmYWlsdXJlLgorICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIE9TRXJyb3IgdXBvbiBmYWlsdXJlLgogCiAgICAgZmlsZSBpcyBlaXRoZXIgYSB0ZXh0IG9yIGJ5dGUgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoCiAgICAgaWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvCkBAIC0xMjksNiArMTI5LDggQEAKICAgICBiZSBrZXB0IG9wZW4gd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzCiAgICAgZ2l2ZW4gYW5kIG11c3QgYmUgVHJ1ZSBpbiB0aGF0IGNhc2UuCiAKKyAgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG5vbi1pbmhlcml0YWJsZS4KKwogICAgIEEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGEgY2FsbGFibGUgYXMgKm9wZW5lciouIFRoZQogICAgIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZSBvYmplY3QgaXMgdGhlbiBvYnRhaW5lZCBieSBjYWxsaW5nCiAgICAgKm9wZW5lciogd2l0aCAoKmZpbGUqLCAqZmxhZ3MqKS4gKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlbiBmaWxlCkBAIC0yMDAsNyArMjAyLDcgQEAKICAgICAgICAgYnVmZmVyaW5nID0gREVGQVVMVF9CVUZGRVJfU0laRQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBicyA9IG9zLmZzdGF0KHJhdy5maWxlbm8oKSkuc3RfYmxrc2l6ZQotICAgICAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgYnMgPiAxOgpAQCAtMjU0LDcgKzI1Niw3IEBACiB0cnk6CiAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uKFZhbHVlRXJyb3IsIElPRXJyb3IpOgorICAgIGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uKFZhbHVlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICBwYXNzCiAKIApAQCAtMjc4LDcgKzI4MCw3IEBACiAgICAgcmVhZGludG8pIG5lZWRlZC4gVGV4dCBJL08gY2xhc3NlcyB3b3JrIHdpdGggc3RyIGRhdGEuCiAKICAgICBOb3RlIHRoYXQgY2FsbGluZyBhbnkgbWV0aG9kIChldmVuIGlucXVpcmllcykgb24gYSBjbG9zZWQgc3RyZWFtIGlzCi0gICAgdW5kZWZpbmVkLiBJbXBsZW1lbnRhdGlvbnMgbWF5IHJhaXNlIElPRXJyb3IgaW4gdGhpcyBjYXNlLgorICAgIHVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBPU0Vycm9yIGluIHRoaXMgY2FzZS4KIAogICAgIElPQmFzZSAoYW5kIGl0cyBzdWJjbGFzc2VzKSBzdXBwb3J0IHRoZSBpdGVyYXRvciBwcm90b2NvbCwgbWVhbmluZwogICAgIHRoYXQgYW4gSU9CYXNlIG9iamVjdCBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB5aWVsZGluZyB0aGUgbGluZXMgaW4gYQpAQCAtMjk0LDcgKzI5Niw3IEBACiAgICAgIyMjIEludGVybmFsICMjIwogCiAgICAgZGVmIF91bnN1cHBvcnRlZChzZWxmLCBuYW1lKToKLSAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIElPRXJyb3IgZXhjZXB0aW9uIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLiIiIgorICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gT1NFcnJvciBleGNlcHRpb24gZm9yIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMuIiIiCiAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCIlcy4lcygpIG5vdCBzdXBwb3J0ZWQiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBuYW1lKSkKIApAQCAtNDQxLDcgKzQ0Myw3IEBACiAgICAgZGVmIGZpbGVubyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciAoYW4gaW50KSBpZiBvbmUgZXhpc3RzLgogCi0gICAgICAgIEFuIElPRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBJTyBvYmplY3QgZG9lcyBub3QgdXNlIGEgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICBBbiBPU0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgSU8gb2JqZWN0IGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvci4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJmaWxlbm8iKQogCkBAIC00NTUsMTEgKzQ1NywxMSBAQAogCiAgICAgIyMjIFJlYWRsaW5lW3NdIGFuZCB3cml0ZWxpbmVzICMjIwogCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxpbWl0PS0xKToKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgIHIiIiJSZWFkIGFuZCByZXR1cm4gYSBsaW5lIG9mIGJ5dGVzIGZyb20gdGhlIHN0cmVhbS4KIAotICAgICAgICBJZiBsaW1pdCBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgbGltaXQgYnl0ZXMgd2lsbCBiZSByZWFkLgotICAgICAgICBMaW1pdCBzaG91bGQgYmUgYW4gaW50LgorICAgICAgICBJZiBzaXplIGlzIHNwZWNpZmllZCwgYXQgbW9zdCBzaXplIGJ5dGVzIHdpbGwgYmUgcmVhZC4KKyAgICAgICAgU2l6ZSBzaG91bGQgYmUgYW4gaW50LgogCiAgICAgICAgIFRoZSBsaW5lIHRlcm1pbmF0b3IgaXMgYWx3YXlzIGInXG4nIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0CiAgICAgICAgIGZpbGVzLCB0aGUgbmV3bGluZXMgYXJndW1lbnQgdG8gb3BlbiBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIGxpbmUKQEAgLTQ3MiwxOCArNDc0LDE4IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRhaGVhZDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgICAgICAgICBuID0gKHJlYWRhaGVhZC5maW5kKGIiXG4iKSArIDEpIG9yIGxlbihyZWFkYWhlYWQpCi0gICAgICAgICAgICAgICAgaWYgbGltaXQgPj0gMDoKLSAgICAgICAgICAgICAgICAgICAgbiA9IG1pbihuLCBsaW1pdCkKKyAgICAgICAgICAgICAgICBpZiBzaXplID49IDA6CisgICAgICAgICAgICAgICAgICAgIG4gPSBtaW4obiwgc2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGVmIG5yZWFkYWhlYWQoKToKICAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzaXplLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAgICAgICAgIHJlcyA9IGJ5dGVhcnJheSgpCi0gICAgICAgIHdoaWxlIGxpbWl0IDwgMCBvciBsZW4ocmVzKSA8IGxpbWl0OgorICAgICAgICB3aGlsZSBzaXplIDwgMCBvciBsZW4ocmVzKSA8IHNpemU6CiAgICAgICAgICAgICBiID0gc2VsZi5yZWFkKG5yZWFkYWhlYWQoKSkKICAgICAgICAgICAgIGlmIG5vdCBiOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC01NDIsMTcgKzU0NCwxNyBAQAogICAgICMgcHJpbWl0aXZlIG9wZXJhdGlvbiwgYnV0IHRoYXQgd291bGQgbGVhZCB0byBuYXN0eSByZWN1cnNpb24gaW4gY2FzZQogICAgICMgYSBzdWJjbGFzcyBkb2Vzbid0IGltcGxlbWVudCBlaXRoZXIuKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6Ci0gICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLCB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIHNpemUgYnl0ZXMsIHdoZXJlIHNpemUgaXMgYW4gaW50LgogCiAgICAgICAgIFJldHVybnMgYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IG9uIEVPRiwgb3IgTm9uZSBpZiB0aGUgb2JqZWN0IGlzCiAgICAgICAgIHNldCBub3QgdG8gYmxvY2sgYW5kIGhhcyBubyBkYXRhIHRvIHJlYWQuCiAgICAgICAgICIiIgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQorICAgICAgICBpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJlYWRhbGwoKQotICAgICAgICBiID0gYnl0ZWFycmF5KG4uX19pbmRleF9fKCkpCisgICAgICAgIGIgPSBieXRlYXJyYXkoc2l6ZS5fX2luZGV4X18oKSkKICAgICAgICAgbiA9IHNlbGYucmVhZGludG8oYikKICAgICAgICAgaWYgbiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTYxMCw4ICs2MTIsOCBAQAogICAgIGltcGxlbWVudGF0aW9uLCBidXQgd3JhcCBvbmUuCiAgICAgIiIiCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcywgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIHNpemUgYnl0ZXMsIHdoZXJlIHNpemUgaXMgYW4gaW50LgogCiAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBOb25lLCBvciBuZWdhdGl2ZSwgcmVhZHMgYW5kCiAgICAgICAgIHJldHVybnMgYWxsIGRhdGEgdW50aWwgRU9GLgpAQCAtNjMwLDkgKzYzMiw5IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZCIpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiUmVhZCB1cCB0byBuIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLAotICAgICAgICB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCB1cCB0byBzaXplIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLAorICAgICAgICB3aGVyZSBzaXplIGlzIGFuIGludC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJyZWFkMSIpCiAKQEAgLTY5OSwxMyArNzAxLDEzIEBACiAgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6CiAgICAgICAgIG5ld19wb3NpdGlvbiA9IHNlbGYucmF3LnNlZWsocG9zLCB3aGVuY2UpCiAgICAgICAgIGlmIG5ld19wb3NpdGlvbiA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBuZXdfcG9zaXRpb24KIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICBwb3MgPSBzZWxmLnJhdy50ZWxsKCkKICAgICAgICAgaWYgcG9zIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGwoKSByZXR1cm5lZCBhbiBpbnZhbGlkIHBvc2l0aW9uIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInRlbGwoKSByZXR1cm5lZCBhbiBpbnZhbGlkIHBvc2l0aW9uIikKICAgICAgICAgcmV0dXJuIHBvcwogCiAgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKQEAgLTgyMCwyNCArODIyLDI0IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gbWVtb3J5dmlldyhzZWxmLl9idWZmZXIpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVhZCBmcm9tIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIGlmIG4gPCAwOgotICAgICAgICAgICAgbiA9IGxlbihzZWxmLl9idWZmZXIpCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQorICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgIHNpemUgPSBsZW4oc2VsZi5fYnVmZmVyKQogICAgICAgICBpZiBsZW4oc2VsZi5fYnVmZmVyKSA8PSBzZWxmLl9wb3M6CiAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIG5ld3BvcyA9IG1pbihsZW4oc2VsZi5fYnVmZmVyKSwgc2VsZi5fcG9zICsgbikKKyAgICAgICAgbmV3cG9zID0gbWluKGxlbihzZWxmLl9idWZmZXIpLCBzZWxmLl9wb3MgKyBzaXplKQogICAgICAgICBiID0gc2VsZi5fYnVmZmVyW3NlbGYuX3BvcyA6IG5ld3Bvc10KICAgICAgICAgc2VsZi5fcG9zID0gbmV3cG9zCiAgICAgICAgIHJldHVybiBieXRlcyhiKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKICAgICAgICAgIiIiVGhpcyBpcyB0aGUgc2FtZSBhcyByZWFkLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZChuKQorICAgICAgICByZXR1cm4gc2VsZi5yZWFkKHNpemUpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgpAQCAtOTI3LDcgKzkyOSw3IEBACiAgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBidWZmZXJlZCByZWFkZXIgdXNpbmcgdGhlIGdpdmVuIHJlYWRhYmxlIHJhdyBJTyBvYmplY3QuCiAgICAgICAgICIiIgogICAgICAgICBpZiBub3QgcmF3LnJlYWRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcicmF3IiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcicmF3IiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCiAKICAgICAgICAgX0J1ZmZlcmVkSU9NaXhpbi5fX2luaXRfXyhzZWxmLCByYXcpCiAgICAgICAgIGlmIGJ1ZmZlcl9zaXplIDw9IDA6CkBAIC05NDAsMTggKzk0MiwxOCBAQAogICAgICAgICBzZWxmLl9yZWFkX2J1ZiA9IGIiIgogICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgbiBieXRlcy4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICAiIiJSZWFkIHNpemUgYnl0ZXMuCiAKLSAgICAgICAgUmV0dXJucyBleGFjdGx5IG4gYnl0ZXMgb2YgZGF0YSB1bmxlc3MgdGhlIHVuZGVybHlpbmcgcmF3IElPCisgICAgICAgIFJldHVybnMgZXhhY3RseSBzaXplIGJ5dGVzIG9mIGRhdGEgdW5sZXNzIHRoZSB1bmRlcmx5aW5nIHJhdyBJTwogICAgICAgICBzdHJlYW0gcmVhY2hlcyBFT0Ygb3IgaWYgdGhlIGNhbGwgd291bGQgYmxvY2sgaW4gbm9uLWJsb2NraW5nCi0gICAgICAgIG1vZGUuIElmIG4gaXMgbmVnYXRpdmUsIHJlYWQgdW50aWwgRU9GIG9yIHVudGlsIHJlYWQoKSB3b3VsZAorICAgICAgICBtb2RlLiBJZiBzaXplIGlzIG5lZ2F0aXZlLCByZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQKICAgICAgICAgYmxvY2suCiAgICAgICAgICIiIgotICAgICAgICBpZiBuIGlzIG5vdCBOb25lIGFuZCBuIDwgLTE6CisgICAgICAgIGlmIHNpemUgaXMgbm90IE5vbmUgYW5kIHNpemUgPCAtMToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQiKQogICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VubG9ja2VkKG4pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZChzaXplKQogCiAgICAgZGVmIF9yZWFkX3VubG9ja2VkKHNlbGYsIG49Tm9uZSk6CiAgICAgICAgIG5vZGF0YV92YWwgPSBiIiIKQEAgLTEwMTEsNyArMTAxMyw3IEBACiAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAogICAgICAgICByZXR1cm4gb3V0WzpuXSBpZiBvdXQgZWxzZSBub2RhdGFfdmFsCiAKLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgorICAgIGRlZiBwZWVrKHNlbGYsIHNpemU9MCk6CiAgICAgICAgICIiIlJldHVybnMgYnVmZmVyZWQgYnl0ZXMgd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLgogCiAgICAgICAgIFRoZSBhcmd1bWVudCBpbmRpY2F0ZXMgYSBkZXNpcmVkIG1pbmltYWwgbnVtYmVyIG9mIGJ5dGVzOyB3ZQpAQCAtMTAxOSw3ICsxMDIxLDcgQEAKICAgICAgICAgdGhhbiBzZWxmLmJ1ZmZlcl9zaXplLgogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcGVla191bmxvY2tlZChuKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BlZWtfdW5sb2NrZWQoc2l6ZSkKIAogICAgIGRlZiBfcGVla191bmxvY2tlZChzZWxmLCBuPTApOgogICAgICAgICB3YW50ID0gbWluKG4sIHNlbGYuYnVmZmVyX3NpemUpCkBAIC0xMDM3LDE4ICsxMDM5LDE4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCiAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2J1ZltzZWxmLl9yZWFkX3BvczpdCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgICIiIlJlYWRzIHVwIHRvIG4gYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgotICAgICAgICAjIFJldHVybnMgdXAgdG8gbiBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKKyAgICAgICAgIiIiUmVhZHMgdXAgdG8gc2l6ZSBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSByZWFkKCkgc3lzdGVtIGNhbGwuIiIiCisgICAgICAgICMgUmV0dXJucyB1cCB0byBzaXplIGJ5dGVzLiAgSWYgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIHdlCiAgICAgICAgICMgb25seSByZXR1cm4gYnVmZmVyZWQgYnl0ZXMuICBPdGhlcndpc2UsIHdlIGRvIG9uZSByYXcgcmVhZC4KLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgbXVzdCBiZSBwb3NpdGl2ZSIpCi0gICAgICAgIGlmIG4gPT0gMDoKKyAgICAgICAgaWYgc2l6ZSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIGIiIgogICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKICAgICAgICAgICAgIHNlbGYuX3BlZWtfdW5sb2NrZWQoMSkKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VubG9ja2VkKAotICAgICAgICAgICAgICAgIG1pbihuLCBsZW4oc2VsZi5fcmVhZF9idWYpIC0gc2VsZi5fcmVhZF9wb3MpKQorICAgICAgICAgICAgICAgIG1pbihzaXplLCBsZW4oc2VsZi5fcmVhZF9idWYpIC0gc2VsZi5fcmVhZF9wb3MpKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBfQnVmZmVyZWRJT01peGluLnRlbGwoc2VsZikgLSBsZW4oc2VsZi5fcmVhZF9idWYpICsgc2VsZi5fcmVhZF9wb3MKQEAgLTEwNzQsNyArMTA3Niw3IEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKToKICAgICAgICAgaWYgbm90IHJhdy53cml0YWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQogCiAgICAgICAgIF9CdWZmZXJlZElPTWl4aW4uX19pbml0X18oc2VsZiwgcmF3KQogICAgICAgICBpZiBidWZmZXJfc2l6ZSA8PSAwOgpAQCAtMTEzOCw3ICsxMTQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZXJybm8uRUFHQUlOLAogICAgICAgICAgICAgICAgICAgICAid3JpdGUgY291bGQgbm90IGNvbXBsZXRlIHdpdGhvdXQgYmxvY2tpbmciLCAwKQogICAgICAgICAgICAgaWYgbiA+IGxlbihzZWxmLl93cml0ZV9idWYpIG9yIG4gPCAwOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIndyaXRlKCkgcmV0dXJuZWQgaW5jb3JyZWN0IG51bWJlciBvZiBieXRlcyIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigid3JpdGUoKSByZXR1cm5lZCBpbmNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzIikKICAgICAgICAgICAgIGRlbCBzZWxmLl93cml0ZV9idWZbOm5dCiAKICAgICBkZWYgdGVsbChzZWxmKToKQEAgLTExNzQsMTggKzExNzYsMTggQEAKICAgICAgICAgVGhlIGFyZ3VtZW50cyBhcmUgdHdvIFJhd0lPIGluc3RhbmNlcy4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCByZWFkZXIucmVhZGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyZWFkZXIiIGFyZ3VtZW50IG11c3QgYmUgcmVhZGFibGUuJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJyJyZWFkZXIiIGFyZ3VtZW50IG11c3QgYmUgcmVhZGFibGUuJykKIAogICAgICAgICBpZiBub3Qgd3JpdGVyLndyaXRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcid3JpdGVyIiBhcmd1bWVudCBtdXN0IGJlIHdyaXRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcid3JpdGVyIiBhcmd1bWVudCBtdXN0IGJlIHdyaXRhYmxlLicpCiAKICAgICAgICAgc2VsZi5yZWFkZXIgPSBCdWZmZXJlZFJlYWRlcihyZWFkZXIsIGJ1ZmZlcl9zaXplKQogICAgICAgICBzZWxmLndyaXRlciA9IEJ1ZmZlcmVkV3JpdGVyKHdyaXRlciwgYnVmZmVyX3NpemUpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQobikKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQoc2l6ZSkKIAogICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRpbnRvKGIpCkBAIC0xMTkzLDExICsxMTk1LDExIEBACiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICByZXR1cm4gc2VsZi53cml0ZXIud3JpdGUoYikKIAotICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5wZWVrKG4pCisgICAgZGVmIHBlZWsoc2VsZiwgc2l6ZT0wKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnBlZWsoc2l6ZSkKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQxKG4pCisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZDEoc2l6ZSkKIAogICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRhYmxlKCkKQEAgLTEyNDgsNyArMTI1MCw3IEBACiAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgogICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQogICAgICAgICBpZiBwb3MgPCAwOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic2VlaygpIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic2VlaygpIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24iKQogICAgICAgICByZXR1cm4gcG9zCiAKICAgICBkZWYgdGVsbChzZWxmKToKQEAgLTEyNjMsMjMgKzEyNjUsMjMgQEAKICAgICAgICAgIyBVc2Ugc2VlayB0byBmbHVzaCB0aGUgcmVhZCBidWZmZXIuCiAgICAgICAgIHJldHVybiBCdWZmZXJlZFdyaXRlci50cnVuY2F0ZShzZWxmLCBwb3MpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkKHNlbGYsIG4pCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkKHNlbGYsIHNpemUpCiAKICAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6CiAgICAgICAgIHNlbGYuZmx1c2goKQogICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZGludG8oc2VsZiwgYikKIAotICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6CisgICAgZGVmIHBlZWsoc2VsZiwgc2l6ZT0wKToKICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5wZWVrKHNlbGYsIG4pCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5wZWVrKHNlbGYsIHNpemUpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6CisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemUpOgogICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKHNlbGYsIG4pCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkMShzZWxmLCBzaXplKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICBpZiBzZWxmLl9yZWFkX2J1ZjoKQEAgLTEyOTksMTEgKzEzMDEsMTEgQEAKICAgICBhcmUgaW1tdXRhYmxlLiBUaGVyZSBpcyBubyBwdWJsaWMgY29uc3RydWN0b3IuCiAgICAgIiIiCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKLSAgICAgICAgIiIiUmVhZCBhdCBtb3N0IG4gY2hhcmFjdGVycyBmcm9tIHN0cmVhbSwgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWQgYXQgbW9zdCBzaXplIGNoYXJhY3RlcnMgZnJvbSBzdHJlYW0sIHdoZXJlIHNpemUgaXMgYW4gaW50LgogCi0gICAgICAgIFJlYWQgZnJvbSB1bmRlcmx5aW5nIGJ1ZmZlciB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyBvciB3ZSBoaXQgRU9GLgotICAgICAgICBJZiBuIGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GLgorICAgICAgICBSZWFkIGZyb20gdW5kZXJseWluZyBidWZmZXIgdW50aWwgd2UgaGF2ZSBzaXplIGNoYXJhY3RlcnMgb3Igd2UgaGl0IEVPRi4KKyAgICAgICAgSWYgc2l6ZSBpcyBuZWdhdGl2ZSBvciBvbWl0dGVkLCByZWFkIHVudGlsIEVPRi4KIAogICAgICAgICBSZXR1cm5zIGEgc3RyaW5nLgogICAgICAgICAiIiIKQEAgLTE3MjcsNyArMTcyOSw3IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9zZWVrYWJsZToKICAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5fdGVsbGluZzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigidGVsbGluZyBwb3NpdGlvbiBkaXNhYmxlZCBieSBuZXh0KCkgY2FsbCIpCiAgICAgICAgIHNlbGYuZmx1c2goKQogICAgICAgICBwb3NpdGlvbiA9IHNlbGYuYnVmZmVyLnRlbGwoKQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlcgpAQCAtMTgxNCw3ICsxODE2LDcgQEAKICAgICAgICAgICAgICAgICBjaGFyc19kZWNvZGVkICs9IGxlbihkZWNvZGVyLmRlY29kZShiJycsIGZpbmFsPVRydWUpKQogICAgICAgICAgICAgICAgIG5lZWRfZW9mID0gMQogICAgICAgICAgICAgICAgIGlmIGNoYXJzX2RlY29kZWQgPCBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQogCiAgICAgICAgICAgICAjIFRoZSByZXR1cm5lZCBjb29raWUgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3Qgc2FmZSBzdGFydCBwb2ludC4KICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYWNrX2Nvb2tpZSgKQEAgLTE4OTEsNyArMTg5Myw3IEBACiAKICAgICAgICAgICAgICMgU2tpcCBjaGFyc190b19za2lwIG9mIHRoZSBkZWNvZGVkIGNoYXJhY3RlcnMuCiAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZGVjb2RlZF9jaGFycykgPCBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IHJlc3RvcmUgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW4ndCByZXN0b3JlIGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpCiAgICAgICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgPSBjaGFyc190b19za2lwCiAKICAgICAgICAgIyBGaW5hbGx5LCByZXNldCB0aGUgZW5jb2RlciAobWVyZWx5IHVzZWZ1bCBmb3IgcHJvcGVyIEJPTSBoYW5kbGluZykKQEAgLTE5MDcsMTYgKzE5MDksMTYgQEAKICAgICAgICAgICAgICAgICBlbmNvZGVyLnJlc2V0KCkKICAgICAgICAgcmV0dXJuIGNvb2tpZQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlciBvciBzZWxmLl9nZXRfZGVjb2RlcigpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG4uX19pbmRleF9fCisgICAgICAgICAgICBzaXplLl9faW5kZXhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikgZnJvbSBlcnIKLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgIyBSZWFkIGV2ZXJ5dGhpbmcuCiAgICAgICAgICAgICByZXN1bHQgPSAoc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKSArCiAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5kZWNvZGUoc2VsZi5idWZmZXIucmVhZCgpLCBmaW5hbD1UcnVlKSkKQEAgLTE5MjQsMTIgKzE5MjYsMTIgQEAKICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBLZWVwIHJlYWRpbmcgY2h1bmtzIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgICMgS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIHNpemUgY2hhcmFjdGVycyB0byByZXR1cm4uCiAgICAgICAgICAgICBlb2YgPSBGYWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobikKLSAgICAgICAgICAgIHdoaWxlIGxlbihyZXN1bHQpIDwgbiBhbmQgbm90IGVvZjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUpCisgICAgICAgICAgICB3aGlsZSBsZW4ocmVzdWx0KSA8IHNpemUgYW5kIG5vdCBlb2Y6CiAgICAgICAgICAgICAgICAgZW9mID0gbm90IHNlbGYuX3JlYWRfY2h1bmsoKQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhuIC0gbGVuKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUgLSBsZW4ocmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKQEAgLTE5NDEsMTMgKzE5NDMsMTMgQEAKICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgICAgICAgcmV0dXJuIGxpbmUKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD1Ob25lKToKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lKToKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzaXplLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAKICAgICAgICAgIyBHcmFiIGFsbCB0aGUgZGVjb2RlZCB0ZXh0ICh3ZSB3aWxsIHJld2luZCBhbnkgZXh0cmEgYml0cyBsYXRlcikuCiAgICAgICAgIGxpbmUgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycygpCkBAIC0yMDA2LDggKzIwMDgsOCBAQAogICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBwb3MgKyBsZW4oc2VsZi5fcmVhZG5sKQogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBsZW4obGluZSkgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgcmVhY2hlZCBsZW5ndGggbGltaXQKKyAgICAgICAgICAgIGlmIHNpemUgPj0gMCBhbmQgbGVuKGxpbmUpID49IHNpemU6CisgICAgICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyByZWFjaGVkIGxlbmd0aCBzaXplCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgIyBObyBsaW5lIGVuZGluZyBzZWVuIHlldCAtIGdldCBtb3JlIGRhdGEnCkBAIC0yMDIyLDggKzIwMjQsOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCiAKLSAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgZW5kcG9zID4gbGltaXQ6Ci0gICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyBkb24ndCBleGNlZWQgbGltaXQKKyAgICAgICAgaWYgc2l6ZSA+PSAwIGFuZCBlbmRwb3MgPiBzaXplOgorICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyBkb24ndCBleGNlZWQgc2l6ZQogCiAgICAgICAgICMgUmV3aW5kIF9kZWNvZGVkX2NoYXJzIHRvIGp1c3QgYWZ0ZXIgdGhlIGxpbmUgZW5kaW5nIHdlIGZvdW5kLgogICAgICAgICBzZWxmLl9yZXdpbmRfZGVjb2RlZF9jaGFycyhsZW4obGluZSkgLSBlbmRwb3MpCkBAIC0yMDU0LDcgKzIwNTYsNiBAQAogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5pdGlhbF92YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluaXRpYWxfdmFsdWUgbXVzdCBiZSBzdHIgb3IgTm9uZSwgbm90IHswfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0eXBlKGluaXRpYWxfdmFsdWUpLl9fbmFtZV9fKSkKLSAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gc3RyKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLndyaXRlKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLnNlZWsoMCkKIApkaWZmIC0tZ2l0IGEvTGliL19zaXRlYnVpbHRpbnMucHkgYi9MaWIvX3NpdGVidWlsdGlucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjIxMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL19zaXRlYnVpbHRpbnMucHkKQEAgLTAsMCArMSw5OSBAQAorIiIiCitUaGUgb2JqZWN0cyB1c2VkIGJ5IHRoZSBzaXRlIG1vZHVsZSB0byBhZGQgY3VzdG9tIGJ1aWx0aW5zLgorIiIiCisKKyMgVGhvc2Ugb2JqZWN0cyBhcmUgYWxtb3N0IGltbW9ydGFsIGFuZCB0aGV5IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlaXIgbW9kdWxlCisjIGdsb2JhbHMuICBEZWZpbmluZyB0aGVtIGluIHRoZSBzaXRlIG1vZHVsZSB3b3VsZCBrZWVwIHRvbyBtYW55IHJlZmVyZW5jZXMKKyMgYWxpdmUuCisjIE5vdGUgdGhpcyBtZWFucyB0aGlzIG1vZHVsZSBzaG91bGQgYWxzbyBhdm9pZCBrZWVwIHRoaW5ncyBhbGl2ZSBpbiBpdHMKKyMgZ2xvYmFscy4KKworaW1wb3J0IHN5cworCitjbGFzcyBRdWl0dGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGVvZik6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5lb2YgPSBlb2YKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnVXNlICVzKCkgb3IgJXMgdG8gZXhpdCcgJSAoc2VsZi5uYW1lLCBzZWxmLmVvZikKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgY29kZT1Ob25lKToKKyAgICAgICAgIyBTaGVsbHMgbGlrZSBJRExFIGNhdGNoIHRoZSBTeXN0ZW1FeGl0LCBidXQgbGlzdGVuIHdoZW4gdGhlaXIKKyAgICAgICAgIyBzdGRpbiB3cmFwcGVyIGlzIGNsb3NlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGNvZGUpCisKKworY2xhc3MgX1ByaW50ZXIob2JqZWN0KToKKyAgICAiIiJpbnRlcmFjdGl2ZSBwcm9tcHQgb2JqZWN0cyBmb3IgcHJpbnRpbmcgdGhlIGxpY2Vuc2UgdGV4dCwgYSBsaXN0IG9mCisgICAgY29udHJpYnV0b3JzIGFuZCB0aGUgY29weXJpZ2h0IG5vdGljZS4iIiIKKworICAgIE1BWExJTkVTID0gMjMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkYXRhLCBmaWxlcz0oKSwgZGlycz0oKSk6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fX2RhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuX19saW5lcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fX2ZpbGVuYW1lcyA9IFtvcy5wYXRoLmpvaW4oZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXNdCisKKyAgICBkZWYgX19zZXR1cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX2xpbmVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLl9fZmlsZW5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInIiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX19kYXRhCisgICAgICAgIHNlbGYuX19saW5lcyA9IGRhdGEuc3BsaXQoJ1xuJykKKyAgICAgICAgc2VsZi5fX2xpbmVjbnQgPSBsZW4oc2VsZi5fX2xpbmVzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9fc2V0dXAoKQorICAgICAgICBpZiBsZW4oc2VsZi5fX2xpbmVzKSA8PSBzZWxmLk1BWExJTkVTOgorICAgICAgICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLl9fbGluZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlR5cGUgJXMoKSB0byBzZWUgdGhlIGZ1bGwgJXMgdGV4dCIgJSAoKHNlbGYuX19uYW1lLCkqMikKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fX3NldHVwKCkKKyAgICAgICAgcHJvbXB0ID0gJ0hpdCBSZXR1cm4gZm9yIG1vcmUsIG9yIHEgKGFuZCBSZXR1cm4pIHRvIHF1aXQ6ICcKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxpbmVubywgbGluZW5vICsgc2VsZi5NQVhMSU5FUyk6CisgICAgICAgICAgICAgICAgICAgIHByaW50KHNlbGYuX19saW5lc1tpXSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmVubyArPSBzZWxmLk1BWExJTkVTCisgICAgICAgICAgICAgICAga2V5ID0gTm9uZQorICAgICAgICAgICAgICAgIHdoaWxlIGtleSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBpbnB1dChwcm9tcHQpCisgICAgICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gKCcnLCAncScpOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAncSc6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKworY2xhc3MgX0hlbHBlcihvYmplY3QpOgorICAgICIiIkRlZmluZSB0aGUgYnVpbHRpbiAnaGVscCcuCisgICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHB5ZG9jLmhlbHAgKHdpdGggYSB0d2lzdCkuCisKKyAgICAiIiIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUeXBlIGhlbHAoKSBmb3IgaW50ZXJhY3RpdmUgaGVscCwgIiBcCisgICAgICAgICAgICAgICAib3IgaGVscChvYmplY3QpIGZvciBoZWxwIGFib3V0IG9iamVjdC4iCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICBpbXBvcnQgcHlkb2MKKyAgICAgICAgcmV0dXJuIHB5ZG9jLmhlbHAoKmFyZ3MsICoqa3dkcykKZGlmZiAtLWdpdCBhL0xpYi9fc3RycHRpbWUucHkgYi9MaWIvX3N0cnB0aW1lLnB5CmluZGV4IDI2NGQ0ZmEuLjM4ODRhNjcgMTAwNjQ0Ci0tLSBhL0xpYi9fc3RycHRpbWUucHkKKysrIGIvTGliL19zdHJwdGltZS5weQpAQCAtMjEsNyArMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIGFzIGRhdGV0aW1lX3RpbWV6b25lKQogdHJ5OgogICAgIGZyb20gX3RocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBfdGhyZWFkX2FsbG9jYXRlX2xvY2sKLWV4Y2VwdDoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmcm9tIF9kdW1teV90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgX3RocmVhZF9hbGxvY2F0ZV9sb2NrCiAKIF9fYWxsX18gPSBbXQpkaWZmIC0tZ2l0IGEvTGliL2FiYy5weSBiL0xpYi9hYmMucHkKaW5kZXggMDk3NzhlOC4uMjY0YzYwYyAxMDA2NDQKLS0tIGEvTGliL2FiYy5weQorKysgYi9MaWIvYWJjLnB5CkBAIC01LDYgKzUsNyBAQAogCiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0CiAKKwogZGVmIGFic3RyYWN0bWV0aG9kKGZ1bmNvYmopOgogICAgICIiIkEgZGVjb3JhdG9yIGluZGljYXRpbmcgYWJzdHJhY3QgbWV0aG9kcy4KIApAQCAtMTI0LDYgKzEyNSw4IEBACiAgICAgIyBBIGdsb2JhbCBjb3VudGVyIHRoYXQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEgY2xhc3MgaXMKICAgICAjIHJlZ2lzdGVyZWQgYXMgYSB2aXJ0dWFsIHN1YmNsYXNzIG9mIGFueXRoaW5nLiAgSXQgZm9yY2VzIHRoZQogICAgICMgbmVnYXRpdmUgY2FjaGUgdG8gYmUgY2xlYXJlZCBiZWZvcmUgaXRzIG5leHQgdXNlLgorICAgICMgTm90ZTogdGhpcyBjb3VudGVyIGlzIHByaXZhdGUuIFVzZSBgYWJjLmdldF9jYWNoZV90b2tlbigpYCBmb3IKKyAgICAjICAgICAgIGV4dGVybmFsIGNvZGUuCiAgICAgX2FiY19pbnZhbGlkYXRpb25fY291bnRlciA9IDAKIAogICAgIGRlZiBfX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpOgpAQCAtMjI2LDMgKzIyOSwyMCBAQAogICAgICAgICAjIE5vIGRpY2U7IHVwZGF0ZSBuZWdhdGl2ZSBjYWNoZQogICAgICAgICBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZS5hZGQoc3ViY2xhc3MpCiAgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIEFCQyhtZXRhY2xhc3M9QUJDTWV0YSk6CisgICAgIiIiSGVscGVyIGNsYXNzIHRoYXQgcHJvdmlkZXMgYSBzdGFuZGFyZCB3YXkgdG8gY3JlYXRlIGFuIEFCQyB1c2luZworICAgIGluaGVyaXRhbmNlLgorICAgICIiIgorICAgIHBhc3MKKworCitkZWYgZ2V0X2NhY2hlX3Rva2VuKCk6CisgICAgIiIiUmV0dXJucyB0aGUgY3VycmVudCBBQkMgY2FjaGUgdG9rZW4uCisKKyAgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIGludGVnZXIgaWRlbnRpZnlpbmcgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZgorICAgIHRoZSBBQkMgY2FjaGUgZm9yIHZpcnR1YWwgc3ViY2xhc3Nlcy4gVGhpcyBudW1iZXIgY2hhbmdlcyB3aXRoCisgICAgZXZlcnkgY2FsbCB0byBgYHJlZ2lzdGVyKClgYCBvbiBhbnkgQUJDLgorICAgICIiIgorICAgIHJldHVybiBBQkNNZXRhLl9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXIKZGlmZiAtLWdpdCBhL0xpYi9haWZjLnB5IGIvTGliL2FpZmMucHkKaW5kZXggODZhNWVkYy4uMThmMjM2ZCAxMDA2NDQKLS0tIGEvTGliL2FpZmMucHkKKysrIGIvTGliL2FpZmMucHkKQEAgLTY5LDcgKzY5LDcgQEAKICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIGZvciBBSUZGIGZpbGVzKQogICBnZXRjb21wbmFtZSgpICAgLS0gcmV0dXJucyBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mCiAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSAoJ25vdCBjb21wcmVzc2VkJyBmb3IgQUlGRiBmaWxlcykKLSAgZ2V0cGFyYW1zKCkgLS0gcmV0dXJucyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQorICBnZXRwYXJhbXMoKSAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgZ2V0bWFya2VycygpICAgIC0tIGdldCB0aGUgbGlzdCBvZiBtYXJrcyBpbiB0aGUgYXVkaW8gZmlsZSBvciBOb25lCiAgICAgICAgICAgICAgaWYgdGhlcmUgYXJlIG5vIG1hcmtzCkBAIC0yNTIsNiArMjUyLDExIEBACiAgICAgX3dyaXRlX3Vsb25nKGYsIGxvbWFudCkKIAogZnJvbSBjaHVuayBpbXBvcnQgQ2h1bmsKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKworX2FpZmNfcGFyYW1zID0gbmFtZWR0dXBsZSgnX2FpZmNfcGFyYW1zJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQorCiAKIGNsYXNzIEFpZmNfcmVhZDoKICAgICAjIFZhcmlhYmxlcyB1c2VkIGluIHRoaXMgY2xhc3M6CkBAIC0zMzQsNiArMzM5LDEyIEBACiAgICAgICAgICMgZWxzZSwgYXNzdW1lIGl0IGlzIGFuIG9wZW4gZmlsZSBvYmplY3QgYWxyZWFkeQogICAgICAgICBzZWxmLmluaXRmcChmKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtMzcyLDkgKzM4Myw5IEBACiAjIyAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgaWYgbGVuKHNlbGYuX21hcmtlcnMpID09IDA6CkBAIC01NTEsNiArNTYyLDEyIEBACiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtNjQ0LDggKzY2MSw4IEBACiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX25jaGFubmVscyBvciBub3Qgc2VsZi5fc2FtcHdpZHRoIG9yIG5vdCBzZWxmLl9mcmFtZXJhdGU6CiAgICAgICAgICAgICByYWlzZSBFcnJvcignbm90IGFsbCBwYXJhbWV0ZXJzIHNldCcpCi0gICAgICAgIHJldHVybiBzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLCBcCi0gICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuX25jaGFubmVscywgc2VsZi5fc2FtcHdpZHRoLCBzZWxmLl9mcmFtZXJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lKQogCiAgICAgZGVmIHNldG1hcmsoc2VsZiwgaWQsIHBvcywgbmFtZSk6CiAgICAgICAgIGlmIGlkIDw9IDA6CkBAIC04NzMsOCArODkwLDcgQEAKICAgICBpZiBub3Qgc3lzLmFyZ3ZbMTpdOgogICAgICAgICBzeXMuYXJndi5hcHBlbmQoJy91c3IvZGVtb3MvZGF0YS9hdWRpby9iYWNoLmFpZmYnKQogICAgIGZuID0gc3lzLmFyZ3ZbMV0KLSAgICBmID0gb3BlbihmbiwgJ3InKQotICAgIHRyeToKKyAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKICAgICAgICAgcHJpbnQoIlJlYWRpbmciLCBmbikKICAgICAgICAgcHJpbnQoIm5jaGFubmVscyA9IiwgZi5nZXRuY2hhbm5lbHMoKSkKICAgICAgICAgcHJpbnQoIm5mcmFtZXMgICA9IiwgZi5nZXRuZnJhbWVzKCkpCkBAIC04ODUsMTYgKzkwMSwxMSBAQAogICAgICAgICBpZiBzeXMuYXJndlsyOl06CiAgICAgICAgICAgICBnbiA9IHN5cy5hcmd2WzJdCiAgICAgICAgICAgICBwcmludCgiV3JpdGluZyIsIGduKQotICAgICAgICAgICAgZyA9IG9wZW4oZ24sICd3JykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihnbiwgJ3cnKSBhcyBnOgogICAgICAgICAgICAgICAgIGcuc2V0cGFyYW1zKGYuZ2V0cGFyYW1zKCkpCiAgICAgICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZGZyYW1lcygxMDI0KQogICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGcud3JpdGVmcmFtZXMoZGF0YSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZy5jbG9zZSgpCiAgICAgICAgICAgICBwcmludCgiRG9uZS4iKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2FyZ3BhcnNlLnB5IGIvTGliL2FyZ3BhcnNlLnB5CmluZGV4IGYyNWIxYjYuLjk1MjBlMGUgMTAwNjQ0Ci0tLSBhL0xpYi9hcmdwYXJzZS5weQorKysgYi9MaWIvYXJncGFyc2UucHkKQEAgLTYwNiw4ICs2MDYsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5faW5kZW50KCkKLSAgICAgICAgICAgIGZvciBzdWJhY3Rpb24gaW4gZ2V0X3N1YmFjdGlvbnMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdWJhY3Rpb24KKyAgICAgICAgICAgIHlpZWxkIGZyb20gZ2V0X3N1YmFjdGlvbnMoKQogICAgICAgICAgICAgc2VsZi5fZGVkZW50KCkKIAogICAgIGRlZiBfc3BsaXRfbGluZXMoc2VsZiwgdGV4dCwgd2lkdGgpOgpAQCAtMTAzOCw3ICsxMDM3LDggQEAKICAgICAgICAgICAgIHZlcnNpb24gPSBwYXJzZXIudmVyc2lvbgogICAgICAgICBmb3JtYXR0ZXIgPSBwYXJzZXIuX2dldF9mb3JtYXR0ZXIoKQogICAgICAgICBmb3JtYXR0ZXIuYWRkX3RleHQodmVyc2lvbikKLSAgICAgICAgcGFyc2VyLmV4aXQobWVzc2FnZT1mb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKSkKKyAgICAgICAgcGFyc2VyLl9wcmludF9tZXNzYWdlKGZvcm1hdHRlci5mb3JtYXRfaGVscCgpLCBfc3lzLnN0ZG91dCkKKyAgICAgICAgcGFyc2VyLmV4aXQoKQogCiAKIGNsYXNzIF9TdWJQYXJzZXJzQWN0aW9uKEFjdGlvbik6CkBAIC0xMTQxLDExICsxMTQxLDE3IEBACiAgICAgICAgICAgICBzYW1lIHZhbHVlcyBhcyB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCiAgICAgICAgIC0gYnVmc2l6ZSAtLSBUaGUgZmlsZSdzIGRlc2lyZWQgYnVmZmVyIHNpemUuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWVzIGFzCiAgICAgICAgICAgICB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCisgICAgICAgIC0gZW5jb2RpbmcgLS0gVGhlIGZpbGUncyBlbmNvZGluZy4gQWNjZXB0cyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlCisgICAgICAgICAgICBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KKyAgICAgICAgLSBlcnJvcnMgLS0gQSBzdHJpbmcgaW5kaWNhdGluZyBob3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGVycm9ycyBhcmUgdG8KKyAgICAgICAgICAgIGJlIGhhbmRsZWQuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGU9J3InLCBidWZzaXplPS0xKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKToKICAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUKICAgICAgICAgc2VsZi5fYnVmc2l6ZSA9IGJ1ZnNpemUKKyAgICAgICAgc2VsZi5fZW5jb2RpbmcgPSBlbmNvZGluZworICAgICAgICBzZWxmLl9lcnJvcnMgPSBlcnJvcnMKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzdHJpbmcpOgogICAgICAgICAjIHRoZSBzcGVjaWFsIGFyZ3VtZW50ICItIiBtZWFucyBzeXMuc3Rke2luLG91dH0KQEAgLTExNjAsMTQgKzExNjYsMTggQEAKIAogICAgICAgICAjIGFsbCBvdGhlciBhcmd1bWVudHMgYXJlIHVzZWQgYXMgZmlsZSBuYW1lcwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gb3BlbihzdHJpbmcsIHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICByZXR1cm4gb3BlbihzdHJpbmcsIHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUsIHNlbGYuX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3JzKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgbWVzc2FnZSA9IF8oImNhbid0IG9wZW4gJyVzJzogJXMiKQogICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRUeXBlRXJyb3IobWVzc2FnZSAlIChzdHJpbmcsIGUpKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBhcmdzID0gc2VsZi5fbW9kZSwgc2VsZi5fYnVmc2l6ZQotICAgICAgICBhcmdzX3N0ciA9ICcsICcuam9pbihyZXByKGFyZykgZm9yIGFyZyBpbiBhcmdzIGlmIGFyZyAhPSAtMSkKKyAgICAgICAga3dhcmdzID0gWygnZW5jb2RpbmcnLCBzZWxmLl9lbmNvZGluZyksICgnZXJyb3JzJywgc2VsZi5fZXJyb3JzKV0KKyAgICAgICAgYXJnc19zdHIgPSAnLCAnLmpvaW4oW3JlcHIoYXJnKSBmb3IgYXJnIGluIGFyZ3MgaWYgYXJnICE9IC0xXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJXM9JXInICUgKGt3LCBhcmcpIGZvciBrdywgYXJnIGluIGt3YXJncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXJnIGlzIG5vdCBOb25lXSkKICAgICAgICAgcmV0dXJuICclcyglcyknICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGFyZ3Nfc3RyKQogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjAwMSwxNyArMjAxMSwxNCBAQAogICAgICAgICAgICAgIyByZXBsYWNlIGFyZ3VtZW50cyByZWZlcmVuY2luZyBmaWxlcyB3aXRoIHRoZSBmaWxlIGNvbnRlbnQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBhcmdzX2ZpbGUgPSBvcGVuKGFyZ19zdHJpbmdbMTpdKQotICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbihhcmdfc3RyaW5nWzE6XSkgYXMgYXJnc19maWxlOgogICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3N0cmluZ3MgPSBbXQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ19saW5lIGluIGFyZ3NfZmlsZS5yZWFkKCkuc3BsaXRsaW5lcygpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gc2VsZi5jb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3MoYXJnX2xpbmUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5ncy5hcHBlbmQoYXJnKQogICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3N0cmluZ3MgPSBzZWxmLl9yZWFkX2FyZ3NfZnJvbV9maWxlcyhhcmdfc3RyaW5ncykKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19hcmdfc3RyaW5ncy5leHRlbmQoYXJnX3N0cmluZ3MpCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmdzX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBlcnIgPSBfc3lzLmV4Y19pbmZvKClbMV0KICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcihzdHIoZXJyKSkKIApkaWZmIC0tZ2l0IGEvTGliL2FzdC5weSBiL0xpYi9hc3QucHkKaW5kZXggMTNmNTlmOS4uMDJjM2IyOCAxMDA2NDQKLS0tIGEvTGliL2FzdC5weQorKysgYi9MaWIvYXN0LnB5CkBAIC00Miw3ICs0Miw2IEBACiAgICAgUHl0aG9uIGxpdGVyYWwgc3RydWN0dXJlczogc3RyaW5ncywgYnl0ZXMsIG51bWJlcnMsIHR1cGxlcywgbGlzdHMsIGRpY3RzLAogICAgIHNldHMsIGJvb2xlYW5zLCBhbmQgTm9uZS4KICAgICAiIiIKLSAgICBfc2FmZV9uYW1lcyA9IHsnTm9uZSc6IE5vbmUsICdUcnVlJzogVHJ1ZSwgJ0ZhbHNlJzogRmFsc2V9CiAgICAgaWYgaXNpbnN0YW5jZShub2RlX29yX3N0cmluZywgc3RyKToKICAgICAgICAgbm9kZV9vcl9zdHJpbmcgPSBwYXJzZShub2RlX29yX3N0cmluZywgbW9kZT0nZXZhbCcpCiAgICAgaWYgaXNpbnN0YW5jZShub2RlX29yX3N0cmluZywgRXhwcmVzc2lvbik6CkBAIC02MSw5ICs2MCw4IEBACiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBEaWN0KToKICAgICAgICAgICAgIHJldHVybiBkaWN0KChfY29udmVydChrKSwgX2NvbnZlcnQodikpIGZvciBrLCB2CiAgICAgICAgICAgICAgICAgICAgICAgICBpbiB6aXAobm9kZS5rZXlzLCBub2RlLnZhbHVlcykpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBOYW1lKToKLSAgICAgICAgICAgIGlmIG5vZGUuaWQgaW4gX3NhZmVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zYWZlX25hbWVzW25vZGUuaWRdCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBOYW1lQ29uc3RhbnQpOgorICAgICAgICAgICAgcmV0dXJuIG5vZGUudmFsdWUKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIFVuYXJ5T3ApIGFuZCBcCiAgICAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLm9wLCAoVUFkZCwgVVN1YikpIGFuZCBcCiAgICAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLm9wZXJhbmQsIChOdW0sIFVuYXJ5T3AsIEJpbk9wKSk6CmRpZmYgLS1naXQgYS9MaWIvYXN5bmNoYXQucHkgYi9MaWIvYXN5bmNoYXQucHkKaW5kZXggZWVhMzQxOC4uMDM3OGZhNyAxMDA2NDQKLS0tIGEvTGliL2FzeW5jaGF0LnB5CisrKyBiL0xpYi9hc3luY2hhdC5weQpAQCAtNTYsOCArNTYsOCBAQAogCiAgICAgIyB0aGVzZSBhcmUgb3ZlcnJpZGFibGUgZGVmYXVsdHMKIAotICAgIGFjX2luX2J1ZmZlcl9zaXplICAgICAgID0gNDA5NgotICAgIGFjX291dF9idWZmZXJfc2l6ZSAgICAgID0gNDA5NgorICAgIGFjX2luX2J1ZmZlcl9zaXplICAgICAgID0gNjU1MzYKKyAgICBhY19vdXRfYnVmZmVyX3NpemUgICAgICA9IDY1NTM2CiAKICAgICAjIHdlIGRvbid0IHdhbnQgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgZW5jb2RpbmcgYnkgZGVmYXVsdCwgYmVjYXVzZSB0aGF0IGlzIGEKICAgICAjIHNpZ24gb2YgYW4gYXBwbGljYXRpb24gYnVnIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBwYXNzIHNpbGVudGx5CkBAIC0xMTEsNyArMTExLDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWN2IChzZWxmLmFjX2luX2J1ZmZlcl9zaXplKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IoKQogICAgICAgICAgICAgcmV0dXJuCiAKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgICAgICAgIyBzZW5kIHRoZSBkYXRhCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbnVtX3NlbnQgPSBzZWxmLnNlbmQoZGF0YSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcigpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL19faW5pdF9fLnB5IGIvTGliL2FzeW5jaW8vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyODhkNQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyIiIlRoZSBhc3luY2lvIHBhY2thZ2UsIHRyYWNraW5nIFBFUCAzMTU2LiIiIgorCitpbXBvcnQgc3lzCisKKyMgVGhlIHNlbGVjdG9ycyBtb2R1bGUgaXMgaW4gdGhlIHN0ZGxpYiBpbiBQeXRob24gMy40IGJ1dCBub3QgaW4gMy4zLgorIyBEbyB0aGlzIGZpcnN0LCBzbyB0aGUgb3RoZXIgc3VibW9kdWxlcyBjYW4gdXNlICJmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycyIuCisjIFByZWZlciBhc3luY2lvL3NlbGVjdG9ycy5weSBvdmVyIHRoZSBzdGRsaWIgb25lLCBhcyBvdXJzIG1heSBiZSBuZXdlci4KK3RyeToKKyAgICBmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBzZWxlY3RvcnMgICMgV2lsbCBhbHNvIGJlIGV4cG9ydGVkLgorCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAjIFNpbWlsYXIgdGhpbmcgZm9yIF9vdmVybGFwcGVkLgorICAgIHRyeToKKyAgICAgICAgZnJvbSAuIGltcG9ydCBfb3ZlcmxhcHBlZAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgaW1wb3J0IF9vdmVybGFwcGVkICAjIFdpbGwgYWxzbyBiZSBleHBvcnRlZC4KKworIyBUaGlzIHJlbGllcyBvbiBlYWNoIG9mIHRoZSBzdWJtb2R1bGVzIGhhdmluZyBhbiBfX2FsbF9fIHZhcmlhYmxlLgorZnJvbSAuZnV0dXJlcyBpbXBvcnQgKgorZnJvbSAuZXZlbnRzIGltcG9ydCAqCitmcm9tIC5sb2NrcyBpbXBvcnQgKgorZnJvbSAudHJhbnNwb3J0cyBpbXBvcnQgKgorZnJvbSAucHJvdG9jb2xzIGltcG9ydCAqCitmcm9tIC5zdHJlYW1zIGltcG9ydCAqCitmcm9tIC50YXNrcyBpbXBvcnQgKgorCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfZXZlbnRzIGltcG9ydCAqCitlbHNlOgorICAgIGZyb20gLnVuaXhfZXZlbnRzIGltcG9ydCAqICAjIHByYWdtYTogbm8gY292ZXIKKworCitfX2FsbF9fID0gKGZ1dHVyZXMuX19hbGxfXyArCisgICAgICAgICAgIGV2ZW50cy5fX2FsbF9fICsKKyAgICAgICAgICAgbG9ja3MuX19hbGxfXyArCisgICAgICAgICAgIHRyYW5zcG9ydHMuX19hbGxfXyArCisgICAgICAgICAgIHByb3RvY29scy5fX2FsbF9fICsKKyAgICAgICAgICAgc3RyZWFtcy5fX2FsbF9fICsKKyAgICAgICAgICAgdGFza3MuX19hbGxfXykKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJkMTE3YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNjQ0IEBACisiIiJCYXNlIGltcGxlbWVudGF0aW9uIG9mIGV2ZW50IGxvb3AuCisKK1RoZSBldmVudCBsb29wIGNhbiBiZSBicm9rZW4gdXAgaW50byBhIG11bHRpcGxleGVyICh0aGUgcGFydAorcmVzcG9uc2libGUgZm9yIG5vdGlmeWluZyB1cyBvZiBJTyBldmVudHMpIGFuZCB0aGUgZXZlbnQgbG9vcCBwcm9wZXIsCit3aGljaCB3cmFwcyBhIG11bHRpcGxleGVyIHdpdGggZnVuY3Rpb25hbGl0eSBmb3Igc2NoZWR1bGluZyBjYWxsYmFja3MsCitpbW1lZGlhdGVseSBvciBhdCBhIGdpdmVuIHRpbWUgaW4gdGhlIGZ1dHVyZS4KKworV2hlbmV2ZXIgYSBwdWJsaWMgQVBJIHRha2VzIGEgY2FsbGJhY2ssIHN1YnNlcXVlbnQgcG9zaXRpb25hbAorYXJndW1lbnRzIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBpZi93aGVuIGl0IGlzIGNhbGxlZC4gIFRoaXMKK2F2b2lkcyB0aGUgcHJvbGlmZXJhdGlvbiBvZiB0cml2aWFsIGxhbWJkYXMgaW1wbGVtZW50aW5nIGNsb3N1cmVzLgorS2V5d29yZCBhcmd1bWVudHMgZm9yIHRoZSBjYWxsYmFjayBhcmUgbm90IHN1cHBvcnRlZDsgdGhpcyBpcyBhCitjb25zY2lvdXMgZGVzaWduIGRlY2lzaW9uLCBsZWF2aW5nIHRoZSBkb29yIG9wZW4gZm9yIGtleXdvcmQgYXJndW1lbnRzCit0byBtb2RpZnkgdGhlIG1lYW5pbmcgb2YgdGhlIEFQSSBjYWxsIGl0c2VsZi4KKyIiIgorCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcworaW1wb3J0IGhlYXBxCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCB0YXNrcworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitfX2FsbF9fID0gWydCYXNlRXZlbnRMb29wJywgJ1NlcnZlciddCisKKworIyBBcmd1bWVudCBmb3IgZGVmYXVsdCB0aHJlYWQgcG9vbCBleGVjdXRvciBjcmVhdGlvbi4KK19NQVhfV09SS0VSUyA9IDUKKworCitjbGFzcyBfU3RvcEVycm9yKEJhc2VFeGNlcHRpb24pOgorICAgICIiIlJhaXNlZCB0byBzdG9wIHRoZSBldmVudCBsb29wLiIiIgorCisKK2RlZiBfcmFpc2Vfc3RvcF9lcnJvcigqYXJncyk6CisgICAgcmFpc2UgX1N0b3BFcnJvcgorCisKK2NsYXNzIFNlcnZlcihldmVudHMuQWJzdHJhY3RTZXJ2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2tldHMpOgorICAgICAgICBzZWxmLmxvb3AgPSBsb29wCisgICAgICAgIHNlbGYuc29ja2V0cyA9IHNvY2tldHMKKyAgICAgICAgc2VsZi5hY3RpdmVfY291bnQgPSAwCisgICAgICAgIHNlbGYud2FpdGVycyA9IFtdCisKKyAgICBkZWYgYXR0YWNoKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIGFzc2VydCBzZWxmLnNvY2tldHMgaXMgbm90IE5vbmUKKyAgICAgICAgc2VsZi5hY3RpdmVfY291bnQgKz0gMQorCisgICAgZGVmIGRldGFjaChzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBhc3NlcnQgc2VsZi5hY3RpdmVfY291bnQgPiAwCisgICAgICAgIHNlbGYuYWN0aXZlX2NvdW50IC09IDEKKyAgICAgICAgaWYgc2VsZi5hY3RpdmVfY291bnQgPT0gMCBhbmQgc2VsZi5zb2NrZXRzIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWtldXAoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzb2NrZXRzID0gc2VsZi5zb2NrZXRzCisgICAgICAgIGlmIHNvY2tldHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnNvY2tldHMgPSBOb25lCisgICAgICAgICAgICBmb3Igc29jayBpbiBzb2NrZXRzOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5fc3RvcF9zZXJ2aW5nKHNvY2spCisgICAgICAgICAgICBpZiBzZWxmLmFjdGl2ZV9jb3VudCA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuX3dha2V1cCgpCisKKyAgICBkZWYgX3dha2V1cChzZWxmKToKKyAgICAgICAgd2FpdGVycyA9IHNlbGYud2FpdGVycworICAgICAgICBzZWxmLndhaXRlcnMgPSBOb25lCisgICAgICAgIGZvciB3YWl0ZXIgaW4gd2FpdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KHdhaXRlcikKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgd2FpdF9jbG9zZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc29ja2V0cyBpcyBOb25lIG9yIHNlbGYud2FpdGVycyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLndhaXRlcnMuYXBwZW5kKHdhaXRlcikKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKworCitjbGFzcyBCYXNlRXZlbnRMb29wKGV2ZW50cy5BYnN0cmFjdEV2ZW50TG9vcCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX3JlYWR5ID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl9zY2hlZHVsZWQgPSBbXQorICAgICAgICBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yID0gTm9uZQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgPSAwCisgICAgICAgIHNlbGYuX3J1bm5pbmcgPSBGYWxzZQorCisgICAgZGVmIF9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIHNvY2tldCB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV9zc2xfdHJhbnNwb3J0KHNlbGYsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIFNTTCB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgZGF0YWdyYW0gdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSByZWFkIHBpcGUgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIHdyaXRlIHBpcGUgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIF9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNyZWF0ZSBzdWJwcm9jZXNzIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9yZWFkX2Zyb21fc2VsZihzZWxmKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfcHJvY2Vzc19ldmVudHMoc2VsZiwgZXZlbnRfbGlzdCk6CisgICAgICAgICIiIlByb2Nlc3Mgc2VsZWN0b3IgZXZlbnRzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgICIiIlJ1biB1bnRpbCBzdG9wKCkgaXMgY2FsbGVkLiIiIgorICAgICAgICBpZiBzZWxmLl9ydW5uaW5nOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFdmVudCBsb29wIGlzIHJ1bm5pbmcuJykKKyAgICAgICAgc2VsZi5fcnVubmluZyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3J1bl9vbmNlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgX1N0b3BFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3J1bm5pbmcgPSBGYWxzZQorCisgICAgZGVmIHJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLCBmdXR1cmUpOgorICAgICAgICAiIiJSdW4gdW50aWwgdGhlIEZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvcm91dGluZSwgaXQgaXMgd3JhcHBlZCBpbiBhIFRhc2suCisKKyAgICAgICAgWFhYIFRCRDogSXQgd291bGQgYmUgZGlzYXN0cm91cyB0byBjYWxsIHJ1bl91bnRpbF9jb21wbGV0ZSgpCisgICAgICAgIHdpdGggdGhlIHNhbWUgY29yb3V0aW5lIHR3aWNlIC0tIGl0IHdvdWxkIHdyYXAgaXQgaW4gdHdvCisgICAgICAgIGRpZmZlcmVudCBUYXNrcyBhbmQgdGhhdCBjYW4ndCBiZSBnb29kLgorCisgICAgICAgIFJldHVybiB0aGUgRnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZSBpdHMgZXhjZXB0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgZnV0dXJlID0gdGFza3MuYXN5bmMoZnV0dXJlLCBsb29wPXNlbGYpCisgICAgICAgIGZ1dHVyZS5hZGRfZG9uZV9jYWxsYmFjayhfcmFpc2Vfc3RvcF9lcnJvcikKKyAgICAgICAgc2VsZi5ydW5fZm9yZXZlcigpCisgICAgICAgIGZ1dHVyZS5yZW1vdmVfZG9uZV9jYWxsYmFjayhfcmFpc2Vfc3RvcF9lcnJvcikKKyAgICAgICAgaWYgbm90IGZ1dHVyZS5kb25lKCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V2ZW50IGxvb3Agc3RvcHBlZCBiZWZvcmUgRnV0dXJlIGNvbXBsZXRlZC4nKQorCisgICAgICAgIHJldHVybiBmdXR1cmUucmVzdWx0KCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHJ1bm5pbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgRXZlcnkgY2FsbGJhY2sgc2NoZWR1bGVkIGJlZm9yZSBzdG9wKCkgaXMgY2FsbGVkIHdpbGwgcnVuLgorICAgICAgICBDYWxsYmFjayBzY2hlZHVsZWQgYWZ0ZXIgc3RvcCgpIGlzIGNhbGxlZCB3b24ndC4gIEhvd2V2ZXIsCisgICAgICAgIHRob3NlIGNhbGxiYWNrcyB3aWxsIHJ1biBpZiBydW4oKSBpcyBjYWxsZWQgYWdhaW4gbGF0ZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmNhbGxfc29vbihfcmFpc2Vfc3RvcF9lcnJvcikKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgVGhpcyBjbGVhcnMgdGhlIHF1ZXVlcyBhbmQgc2h1dHMgZG93biB0aGUgZXhlY3V0b3IsCisgICAgICAgIGJ1dCBkb2VzIG5vdCB3YWl0IGZvciB0aGUgZXhlY3V0b3IgdG8gZmluaXNoLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVhZHkuY2xlYXIoKQorICAgICAgICBzZWxmLl9zY2hlZHVsZWQuY2xlYXIoKQorICAgICAgICBleGVjdXRvciA9IHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IKKyAgICAgICAgaWYgZXhlY3V0b3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yID0gTm9uZQorICAgICAgICAgICAgZXhlY3V0b3Iuc2h1dGRvd24od2FpdD1GYWxzZSkKKworICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHJ1bm5pbmcgc3RhdHVzIG9mIGV2ZW50IGxvb3AuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5uaW5nCisKKyAgICBkZWYgdGltZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIGFjY29yZGluZyB0byB0aGUgZXZlbnQgbG9vcCdzIGNsb2NrLiIiIgorICAgICAgICByZXR1cm4gdGltZS5tb25vdG9uaWMoKQorCisgICAgZGVmIGNhbGxfbGF0ZXIoc2VsZiwgZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFycmFuZ2UgZm9yIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGF0IGEgZ2l2ZW4gdGltZS4KKworICAgICAgICBSZXR1cm4gYSBIYW5kbGU6IGFuIG9wYXF1ZSBvYmplY3Qgd2l0aCBhIGNhbmNlbCgpIG1ldGhvZCB0aGF0CisgICAgICAgIGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgY2FsbC4KKworICAgICAgICBUaGUgZGVsYXkgY2FuIGJlIGFuIGludCBvciBmbG9hdCwgZXhwcmVzc2VkIGluIHNlY29uZHMuICBJdCBpcworICAgICAgICBhbHdheXMgYSByZWxhdGl2ZSB0aW1lLgorCisgICAgICAgIEVhY2ggY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLiAgSWYgdHdvIGNhbGxiYWNrcworICAgICAgICBhcmUgc2NoZWR1bGVkIGZvciBleGFjdGx5IHRoZSBzYW1lIHRpbWUsIGl0IHVuZGVmaW5lZCB3aGljaAorICAgICAgICB3aWxsIGJlIGNhbGxlZCBmaXJzdC4KKworICAgICAgICBBbnkgcG9zaXRpb25hbCBhcmd1bWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdpbGwgYmUgcGFzc2VkIHRvCisgICAgICAgIHRoZSBjYWxsYmFjayB3aGVuIGl0IGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmNhbGxfYXQoc2VsZi50aW1lKCkgKyBkZWxheSwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIGNhbGxfYXQoc2VsZiwgd2hlbiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiTGlrZSBjYWxsX2xhdGVyKCksIGJ1dCB1c2VzIGFuIGFic29sdXRlIHRpbWUuIiIiCisgICAgICAgIHRpbWVyID0gZXZlbnRzLlRpbWVySGFuZGxlKHdoZW4sIGNhbGxiYWNrLCBhcmdzKQorICAgICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9zY2hlZHVsZWQsIHRpbWVyKQorICAgICAgICByZXR1cm4gdGltZXIKKworICAgIGRlZiBjYWxsX3Nvb24oc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQXJyYW5nZSBmb3IgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKworICAgICAgICBUaGlzIG9wZXJhdGVzIGFzIGEgRklGTyBxdWV1ZSwgY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4gdGhlCisgICAgICAgIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHJlZ2lzdGVyZWQuICBFYWNoIGNhbGxiYWNrIHdpbGwgYmUKKyAgICAgICAgY2FsbGVkIGV4YWN0bHkgb25jZS4KKworICAgICAgICBBbnkgcG9zaXRpb25hbCBhcmd1bWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdpbGwgYmUgcGFzc2VkIHRvCisgICAgICAgIHRoZSBjYWxsYmFjayB3aGVuIGl0IGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGhhbmRsZSA9IGV2ZW50cy5tYWtlX2hhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5fcmVhZHkuYXBwZW5kKGhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgZGVmIGNhbGxfc29vbl90aHJlYWRzYWZlKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICBoYW5kbGUgPSBzZWxmLmNhbGxfc29vbihjYWxsYmFjaywgKmFyZ3MpCisgICAgICAgIHNlbGYuX3dyaXRlX3RvX3NlbGYoKQorICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICBkZWYgcnVuX2luX2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGNhbGxiYWNrLCBldmVudHMuSGFuZGxlKToKKyAgICAgICAgICAgIGFzc2VydCBub3QgYXJncworICAgICAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKGNhbGxiYWNrLCBldmVudHMuVGltZXJIYW5kbGUpCisgICAgICAgICAgICBpZiBjYWxsYmFjay5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgICAgICAgICAgZi5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgICAgIGNhbGxiYWNrLCBhcmdzID0gY2FsbGJhY2suX2NhbGxiYWNrLCBjYWxsYmFjay5fYXJncworICAgICAgICBpZiBleGVjdXRvciBpcyBOb25lOgorICAgICAgICAgICAgZXhlY3V0b3IgPSBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yCisgICAgICAgICAgICBpZiBleGVjdXRvciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGV4ZWN1dG9yID0gY29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcihfTUFYX1dPUktFUlMpCisgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IGV4ZWN1dG9yCisgICAgICAgIHJldHVybiBmdXR1cmVzLndyYXBfZnV0dXJlKGV4ZWN1dG9yLnN1Ym1pdChjYWxsYmFjaywgKmFyZ3MpLCBsb29wPXNlbGYpCisKKyAgICBkZWYgc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yID0gZXhlY3V0b3IKKworICAgIGRlZiBnZXRhZGRyaW5mbyhzZWxmLCBob3N0LCBwb3J0LCAqLAorICAgICAgICAgICAgICAgICAgICBmYW1pbHk9MCwgdHlwZT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX2luX2V4ZWN1dG9yKE5vbmUsIHNvY2tldC5nZXRhZGRyaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZsYWdzKQorCisgICAgZGVmIGdldG5hbWVpbmZvKHNlbGYsIHNvY2thZGRyLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuX2luX2V4ZWN1dG9yKE5vbmUsIHNvY2tldC5nZXRuYW1laW5mbywgc29ja2FkZHIsIGZsYWdzKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wLCBzb2NrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgaWYgc2VydmVyX2hvc3RuYW1lIGlzIG5vdCBOb25lIGFuZCBub3Qgc3NsOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2VydmVyX2hvc3RuYW1lIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aXRoIHNzbCcpCisKKyAgICAgICAgaWYgc2VydmVyX2hvc3RuYW1lIGlzIE5vbmUgYW5kIHNzbDoKKyAgICAgICAgICAgICMgVXNlIGhvc3QgYXMgZGVmYXVsdCBmb3Igc2VydmVyX2hvc3RuYW1lLiAgSXQgaXMgYW4gZXJyb3IKKyAgICAgICAgICAgICMgaWYgaG9zdCBpcyBlbXB0eSBvciBub3Qgc2V0LCBlLmcuIHdoZW4gYW4KKyAgICAgICAgICAgICMgYWxyZWFkeS1jb25uZWN0ZWQgc29ja2V0IHdhcyBwYXNzZWQgb3Igd2hlbiBvbmx5IGEgcG9ydAorICAgICAgICAgICAgIyBpcyBnaXZlbi4gIFRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBjYW4gcGFzcworICAgICAgICAgICAgIyBzZXJ2ZXJfaG9zdG5hbWU9JycgLS0gdGhpcyB3aWxsIGJ5cGFzcyB0aGUgaG9zdG5hbWUKKyAgICAgICAgICAgICMgY2hlY2suICAoVGhpcyBhbHNvIG1lYW5zIHRoYXQgaWYgaG9zdCBpcyBhIG51bWVyaWMKKyAgICAgICAgICAgICMgSVAvSVB2NiBhZGRyZXNzLCB3ZSB3aWxsIGF0dGVtcHQgdG8gdmVyaWZ5IHRoYXQgZXhhY3QKKyAgICAgICAgICAgICMgYWRkcmVzczsgdGhpcyB3aWxsIHByb2JhYmx5IGZhaWwsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0bworICAgICAgICAgICAgIyBjcmVhdGUgYSBjZXJ0aWZpY2F0ZSBmb3IgYSBzcGVjaWZpYyBJUCBhZGRyZXNzLCBzbyB3ZQorICAgICAgICAgICAgIyBkb24ndCBqdWRnZSBpdCBoZXJlLikKKyAgICAgICAgICAgIGlmIG5vdCBob3N0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1lvdSBtdXN0IHNldCBzZXJ2ZXJfaG9zdG5hbWUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doZW4gdXNpbmcgc3NsIHdpdGhvdXQgYSBob3N0JykKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IGhvc3QKKworICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lIG9yIHBvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdob3N0L3BvcnQgYW5kIHNvY2sgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZScpCisKKyAgICAgICAgICAgIGYxID0gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz1wcm90bywgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICBmcyA9IFtmMV0KKyAgICAgICAgICAgIGlmIGxvY2FsX2FkZHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZjIgPSBzZWxmLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgICAgICAqbG9jYWxfYWRkciwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPXByb3RvLCBmbGFncz1mbGFncykKKyAgICAgICAgICAgICAgICBmcy5hcHBlbmQoZjIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYyID0gTm9uZQorCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLndhaXQoZnMsIGxvb3A9c2VsZikKKworICAgICAgICAgICAgaW5mb3MgPSBmMS5yZXN1bHQoKQorICAgICAgICAgICAgaWYgbm90IGluZm9zOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKCkgcmV0dXJuZWQgZW1wdHkgbGlzdCcpCisgICAgICAgICAgICBpZiBmMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBsYWRkcl9pbmZvcyA9IGYyLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxhZGRyX2luZm9zOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorCisgICAgICAgICAgICBleGNlcHRpb25zID0gW10KKyAgICAgICAgICAgIGZvciBmYW1pbHksIHR5cGUsIHByb3RvLCBjbmFtZSwgYWRkcmVzcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGYyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIF8sIF8sIF8sIF8sIGxhZGRyIGluIGxhZGRyX2luZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5iaW5kKGxhZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjID0gT1NFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy5lcnJubywgJ2Vycm9yIHdoaWxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdHRlbXB0aW5nIHRvIGJpbmQgb24gYWRkcmVzcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyFyfToge30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWRkciwgZXhjLnN0cmVycm9yLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGVuKGV4Y2VwdGlvbnMpID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnNbMF0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIElmIHRoZXkgYWxsIGhhdmUgdGhlIHNhbWUgc3RyKCksIHJhaXNlIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSBzdHIoZXhjZXB0aW9uc1swXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgYWxsKHN0cihleGMpID09IG1vZGVsIGZvciBleGMgaW4gZXhjZXB0aW9ucyk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zWzBdCisgICAgICAgICAgICAgICAgICAgICMgUmFpc2UgYSBjb21iaW5lZCBleGNlcHRpb24gc28gdGhlIHVzZXIgY2FuIHNlZSBhbGwKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgdmFyaW91cyBlcnJvciBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTXVsdGlwbGUgZXhjZXB0aW9uczoge30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcsICcuam9pbihzdHIoZXhjKSBmb3IgZXhjIGluIGV4Y2VwdGlvbnMpKSkKKworICAgICAgICBlbGlmIHNvY2sgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ2hvc3QgYW5kIHBvcnQgd2FzIG5vdCBzcGVjaWZpZWQgYW5kIG5vIHNvY2sgc3BlY2lmaWVkJykKKworICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgaWYgc3NsOgorICAgICAgICAgICAgc3NsY29udGV4dCA9IE5vbmUgaWYgaXNpbnN0YW5jZShzc2wsIGJvb2wpIGVsc2Ugc3NsCisgICAgICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3NzbF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgc29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzb2NrLCBwcm90b2NvbCwgd2FpdGVyKQorCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCByZW1vdGVfYWRkcj1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICAgICAiIiJDcmVhdGUgZGF0YWdyYW0gY29ubmVjdGlvbi4iIiIKKyAgICAgICAgaWYgbm90IChsb2NhbF9hZGRyIG9yIHJlbW90ZV9hZGRyKToKKyAgICAgICAgICAgIGlmIGZhbWlseSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VuZXhwZWN0ZWQgYWRkcmVzcyBmYW1pbHknKQorICAgICAgICAgICAgYWRkcl9wYWlyc19pbmZvID0gKCgoZmFtaWx5LCBwcm90byksIChOb25lLCBOb25lKSksKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBqb2luIGFkZHJlc3NzIGJ5IChmYW1pbHksIHByb3RvY29sKQorICAgICAgICAgICAgYWRkcl9pbmZvcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgICAgIGZvciBpZHgsIGFkZHIgaW4gKCgwLCBsb2NhbF9hZGRyKSwgKDEsIHJlbW90ZV9hZGRyKSk6CisgICAgICAgICAgICAgICAgaWYgYWRkciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYWRkciwgdHVwbGUpIGFuZCBsZW4oYWRkcikgPT0gMiwgKAorICAgICAgICAgICAgICAgICAgICAgICAgJzItdHVwbGUgaXMgZXhwZWN0ZWQnKQorCisgICAgICAgICAgICAgICAgICAgIGluZm9zID0geWllbGQgZnJvbSBzZWxmLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgKmFkZHIsIGZhbWlseT1mYW1pbHksIHR5cGU9c29ja2V0LlNPQ0tfREdSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90bz1wcm90bywgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKCkgcmV0dXJuZWQgZW1wdHkgbGlzdCcpCisKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZhbSwgXywgcHJvLCBfLCBhZGRyZXNzIGluIGluZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gKGZhbSwgcHJvKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBhZGRyX2luZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfaW5mb3Nba2V5XSA9IFtOb25lLCBOb25lXQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9pbmZvc1trZXldW2lkeF0gPSBhZGRyZXNzCisKKyAgICAgICAgICAgICMgZWFjaCBhZGRyIGhhcyB0byBoYXZlIGluZm8gZm9yIGVhY2ggKGZhbWlseSwgcHJvdG8pIHBhaXIKKyAgICAgICAgICAgIGFkZHJfcGFpcnNfaW5mbyA9IFsKKyAgICAgICAgICAgICAgICAoa2V5LCBhZGRyX3BhaXIpIGZvciBrZXksIGFkZHJfcGFpciBpbiBhZGRyX2luZm9zLml0ZW1zKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgKChsb2NhbF9hZGRyIGFuZCBhZGRyX3BhaXJbMF0gaXMgTm9uZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdGVfYWRkciBhbmQgYWRkcl9wYWlyWzFdIGlzIE5vbmUpKV0KKworICAgICAgICAgICAgaWYgbm90IGFkZHJfcGFpcnNfaW5mbzoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW4gbm90IGdldCBhZGRyZXNzIGluZm9ybWF0aW9uJykKKworICAgICAgICBleGNlcHRpb25zID0gW10KKworICAgICAgICBmb3IgKChmYW1pbHksIHByb3RvKSwKKyAgICAgICAgICAgICAobG9jYWxfYWRkcmVzcywgcmVtb3RlX2FkZHJlc3MpKSBpbiBhZGRyX3BhaXJzX2luZm86CisgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgcl9hZGRyID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KAorICAgICAgICAgICAgICAgICAgICBmYW1pbHk9ZmFtaWx5LCB0eXBlPXNvY2tldC5TT0NLX0RHUkFNLCBwcm90bz1wcm90bykKKyAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKworICAgICAgICAgICAgICAgIGlmIGxvY2FsX2FkZHI6CisgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChsb2NhbF9hZGRyZXNzKQorICAgICAgICAgICAgICAgIGlmIHJlbW90ZV9hZGRyOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuc29ja19jb25uZWN0KHNvY2ssIHJlbW90ZV9hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICByX2FkZHIgPSByZW1vdGVfYWRkcmVzcworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuYXBwZW5kKGV4YykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnNbMF0KKworICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX2RhdGFncmFtX3RyYW5zcG9ydChzb2NrLCBwcm90b2NvbCwgcl9hZGRyKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfc2VydmVyKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICosCisgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PXNvY2tldC5BRl9VTlNQRUMsCisgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9c29ja2V0LkFJX1BBU1NJVkUsCisgICAgICAgICAgICAgICAgICAgICAgc29jaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGJhY2tsb2c9MTAwLAorICAgICAgICAgICAgICAgICAgICAgIHNzbD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIHJldXNlX2FkZHJlc3M9Tm9uZSk6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKHNzbCwgYm9vbCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3NzbCBhcmd1bWVudCBtdXN0IGJlIGFuIFNTTENvbnRleHQgb3IgTm9uZScpCisgICAgICAgIGlmIGhvc3QgaXMgbm90IE5vbmUgb3IgcG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ2hvc3QvcG9ydCBhbmQgc29jayBjYW4gbm90IGJlIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lJykKKworICAgICAgICAgICAgQUZfSU5FVDYgPSBnZXRhdHRyKHNvY2tldCwgJ0FGX0lORVQ2JywgMCkKKyAgICAgICAgICAgIGlmIHJldXNlX2FkZHJlc3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzID0gb3MubmFtZSA9PSAncG9zaXgnIGFuZCBzeXMucGxhdGZvcm0gIT0gJ2N5Z3dpbicKKyAgICAgICAgICAgIHNvY2tldHMgPSBbXQorICAgICAgICAgICAgaWYgaG9zdCA9PSAnJzoKKyAgICAgICAgICAgICAgICBob3N0ID0gTm9uZQorCisgICAgICAgICAgICBpbmZvcyA9IHlpZWxkIGZyb20gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmbGFncz1mbGFncykKKyAgICAgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorCisgICAgICAgICAgICBjb21wbGV0ZWQgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciByZXMgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgICAgIGFmLCBzb2NrdHlwZSwgcHJvdG8sIGNhbm9ubmFtZSwgc2EgPSByZXMKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoYWYsIHNvY2t0eXBlLCBwcm90bykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQXNzdW1lIGl0J3MgYSBiYWQgZmFtaWx5L3R5cGUvcHJvdG9jb2wgY29tYmluYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBzb2NrZXRzLmFwcGVuZChzb2NrKQorICAgICAgICAgICAgICAgICAgICBpZiByZXVzZV9hZGRyZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAgICAgICAgICAgICMgRGlzYWJsZSBJUHY0L0lQdjYgZHVhbCBzdGFjayBzdXBwb3J0IChlbmFibGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICMgZGVmYXVsdCBvbiBMaW51eCkgd2hpY2ggbWFrZXMgYSBzaW5nbGUgc29ja2V0CisgICAgICAgICAgICAgICAgICAgICMgbGlzdGVuIG9uIGJvdGggYWRkcmVzcyBmYW1pbGllcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgYWYgPT0gQUZfSU5FVDYgYW5kIGhhc2F0dHIoc29ja2V0LCAnSVBQUk9UT19JUFY2Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBWNl9WNk9OTFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5iaW5kKHNhKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyci5lcnJubywgJ2Vycm9yIHdoaWxlIGF0dGVtcHRpbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gYmluZCBvbiBhZGRyZXNzICVyOiAlcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2EsIGVyci5zdHJlcnJvci5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSBUcnVlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBjb21wbGV0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGZvciBzb2NrIGluIHNvY2tldHM6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNvY2sgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnaG9zdCBhbmQgcG9ydCB3YXMgbm90IHNwZWNpZmllZCBhbmQgbm8gc29jayBzcGVjaWZpZWQnKQorICAgICAgICAgICAgc29ja2V0cyA9IFtzb2NrXQorCisgICAgICAgIHNlcnZlciA9IFNlcnZlcihzZWxmLCBzb2NrZXRzKQorICAgICAgICBmb3Igc29jayBpbiBzb2NrZXRzOgorICAgICAgICAgICAgc29jay5saXN0ZW4oYmFja2xvZykKKyAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICBzZWxmLl9zdGFydF9zZXJ2aW5nKHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbCwgc2VydmVyKQorICAgICAgICByZXR1cm4gc2VydmVyCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGNvbm5lY3RfcmVhZF9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydChwaXBlLCBwcm90b2NvbCwgd2FpdGVyKQorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjb25uZWN0X3dyaXRlX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGlwZSk6CisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydChwaXBlLCBwcm90b2NvbCwgd2FpdGVyKQorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBzdWJwcm9jZXNzX3NoZWxsKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGNtZCwgKiwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCBzaGVsbD1UcnVlLCBidWZzaXplPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICBhc3NlcnQgbm90IHVuaXZlcnNhbF9uZXdsaW5lcywgInVuaXZlcnNhbF9uZXdsaW5lcyBtdXN0IGJlIEZhbHNlIgorICAgICAgICBhc3NlcnQgc2hlbGwsICJzaGVsbCBtdXN0IGJlIFRydWUiCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNtZCwgc3RyKSwgY21kCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHRyYW5zcG9ydCA9IHlpZWxkIGZyb20gc2VsZi5fbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydCgKKyAgICAgICAgICAgIHByb3RvY29sLCBjbWQsIFRydWUsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHN1YnByb2Nlc3NfZXhlYyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCAqYXJncywgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgc2hlbGw9RmFsc2UsIGJ1ZnNpemU9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgYXNzZXJ0IG5vdCB1bml2ZXJzYWxfbmV3bGluZXMsICJ1bml2ZXJzYWxfbmV3bGluZXMgbXVzdCBiZSBGYWxzZSIKKyAgICAgICAgYXNzZXJ0IG5vdCBzaGVsbCwgInNoZWxsIG11c3QgYmUgRmFsc2UiCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHRyYW5zcG9ydCA9IHlpZWxkIGZyb20gc2VsZi5fbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydCgKKyAgICAgICAgICAgIHByb3RvY29sLCBhcmdzLCBGYWxzZSwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIGRlZiBfYWRkX2NhbGxiYWNrKHNlbGYsIGhhbmRsZSk6CisgICAgICAgICIiIkFkZCBhIEhhbmRsZSB0byByZWFkeSBvciBzY2hlZHVsZWQuIiIiCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGhhbmRsZSwgZXZlbnRzLkhhbmRsZSksICdBIEhhbmRsZSBpcyByZXF1aXJlZCBoZXJlJworICAgICAgICBpZiBoYW5kbGUuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBpc2luc3RhbmNlKGhhbmRsZSwgZXZlbnRzLlRpbWVySGFuZGxlKToKKyAgICAgICAgICAgIGhlYXBxLmhlYXBwdXNoKHNlbGYuX3NjaGVkdWxlZCwgaGFuZGxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcmVhZHkuYXBwZW5kKGhhbmRsZSkKKworICAgIGRlZiBfYWRkX2NhbGxiYWNrX3NpZ25hbHNhZmUoc2VsZiwgaGFuZGxlKToKKyAgICAgICAgIiIiTGlrZSBfYWRkX2NhbGxiYWNrKCkgYnV0IGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIiIiCisgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFjayhoYW5kbGUpCisgICAgICAgIHNlbGYuX3dyaXRlX3RvX3NlbGYoKQorCisgICAgZGVmIF9ydW5fb25jZShzZWxmKToKKyAgICAgICAgIiIiUnVuIG9uZSBmdWxsIGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBUaGlzIGNhbGxzIGFsbCBjdXJyZW50bHkgcmVhZHkgY2FsbGJhY2tzLCBwb2xscyBmb3IgSS9PLAorICAgICAgICBzY2hlZHVsZXMgdGhlIHJlc3VsdGluZyBjYWxsYmFja3MsIGFuZCBmaW5hbGx5IHNjaGVkdWxlcworICAgICAgICAnY2FsbF9sYXRlcicgY2FsbGJhY2tzLgorICAgICAgICAiIiIKKyAgICAgICAgIyBSZW1vdmUgZGVsYXllZCBjYWxscyB0aGF0IHdlcmUgY2FuY2VsbGVkIGZyb20gaGVhZCBvZiBxdWV1ZS4KKyAgICAgICAgd2hpbGUgc2VsZi5fc2NoZWR1bGVkIGFuZCBzZWxmLl9zY2hlZHVsZWRbMF0uX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIGhlYXBxLmhlYXBwb3Aoc2VsZi5fc2NoZWR1bGVkKQorCisgICAgICAgIHRpbWVvdXQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3JlYWR5OgorICAgICAgICAgICAgdGltZW91dCA9IDAKKyAgICAgICAgZWxpZiBzZWxmLl9zY2hlZHVsZWQ6CisgICAgICAgICAgICAjIENvbXB1dGUgdGhlIGRlc2lyZWQgdGltZW91dC4KKyAgICAgICAgICAgIHdoZW4gPSBzZWxmLl9zY2hlZHVsZWRbMF0uX3doZW4KKyAgICAgICAgICAgIGRlYWRsaW5lID0gbWF4KDAsIHdoZW4gLSBzZWxmLnRpbWUoKSkKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IG1pbih0aW1lb3V0LCBkZWFkbGluZSkKKworICAgICAgICAjIFRPRE86IEluc3RydW1lbnRhdGlvbiBvbmx5IGluIGRlYnVnIG1vZGU/CisgICAgICAgIHQwID0gc2VsZi50aW1lKCkKKyAgICAgICAgZXZlbnRfbGlzdCA9IHNlbGYuX3NlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICB0MSA9IHNlbGYudGltZSgpCisgICAgICAgIGFyZ3N0ciA9ICcnIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlICd7Oi4zZn0nLmZvcm1hdCh0aW1lb3V0KQorICAgICAgICBpZiB0MS10MCA+PSAxOgorICAgICAgICAgICAgbGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxldmVsID0gbG9nZ2luZy5ERUJVRworICAgICAgICBsb2dnZXIubG9nKGxldmVsLCAncG9sbCVzIHRvb2sgJS4zZiBzZWNvbmRzJywgYXJnc3RyLCB0MS10MCkKKyAgICAgICAgc2VsZi5fcHJvY2Vzc19ldmVudHMoZXZlbnRfbGlzdCkKKworICAgICAgICAjIEhhbmRsZSAnbGF0ZXInIGNhbGxiYWNrcyB0aGF0IGFyZSByZWFkeS4KKyAgICAgICAgbm93ID0gc2VsZi50aW1lKCkKKyAgICAgICAgd2hpbGUgc2VsZi5fc2NoZWR1bGVkOgorICAgICAgICAgICAgaGFuZGxlID0gc2VsZi5fc2NoZWR1bGVkWzBdCisgICAgICAgICAgICBpZiBoYW5kbGUuX3doZW4gPiBub3c6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGhhbmRsZSA9IGhlYXBxLmhlYXBwb3Aoc2VsZi5fc2NoZWR1bGVkKQorICAgICAgICAgICAgc2VsZi5fcmVhZHkuYXBwZW5kKGhhbmRsZSkKKworICAgICAgICAjIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2hlcmUgY2FsbGJhY2tzIGFyZSBhY3R1YWxseSAqY2FsbGVkKi4KKyAgICAgICAgIyBBbGwgb3RoZXIgcGxhY2VzIGp1c3QgYWRkIHRoZW0gdG8gcmVhZHkuCisgICAgICAgICMgTm90ZTogV2UgcnVuIGFsbCBjdXJyZW50bHkgc2NoZWR1bGVkIGNhbGxiYWNrcywgYnV0IG5vdCBhbnkKKyAgICAgICAgIyBjYWxsYmFja3Mgc2NoZWR1bGVkIGJ5IGNhbGxiYWNrcyBydW4gdGhpcyB0aW1lIGFyb3VuZCAtLQorICAgICAgICAjIHRoZXkgd2lsbCBiZSBydW4gdGhlIG5leHQgdGltZSAoYWZ0ZXIgYW5vdGhlciBJL08gcG9sbCkuCisgICAgICAgICMgVXNlIGFuIGlkaW9tIHRoYXQgaXMgdGhyZWFkc2FmZSB3aXRob3V0IHVzaW5nIGxvY2tzLgorICAgICAgICBudG9kbyA9IGxlbihzZWxmLl9yZWFkeSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnRvZG8pOgorICAgICAgICAgICAgaGFuZGxlID0gc2VsZi5fcmVhZHkucG9wbGVmdCgpCisgICAgICAgICAgICBpZiBub3QgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgaGFuZGxlLl9ydW4oKQorICAgICAgICBoYW5kbGUgPSBOb25lICAjIE5lZWRlZCB0byBicmVhayBjeWNsZXMgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNWZiMTUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9iYXNlX3N1YnByb2Nlc3MucHkKQEAgLTAsMCArMSwxNjYgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworCisKK1NURElOID0gMAorU1RET1VUID0gMQorU1RERVJSID0gMgorCisKK2NsYXNzIEJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0KHRyYW5zcG9ydHMuU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorCisgICAgICAgIHNlbGYuX3BpcGVzID0ge30KKyAgICAgICAgaWYgc3RkaW4gPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgc2VsZi5fcGlwZXNbU1RESU5dID0gTm9uZQorICAgICAgICBpZiBzdGRvdXQgPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgc2VsZi5fcGlwZXNbU1RET1VUXSA9IE5vbmUKKyAgICAgICAgaWYgc3RkZXJyID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgIHNlbGYuX3BpcGVzW1NUREVSUl0gPSBOb25lCisgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcmV0dXJuY29kZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3RhcnQoYXJncz1hcmdzLCBzaGVsbD1zaGVsbCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdGRlcnIsIGJ1ZnNpemU9YnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX2V4dHJhWydzdWJwcm9jZXNzJ10gPSBzZWxmLl9wcm9jCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIGFyZ3MsIHNoZWxsLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dyaXRlX3N1YnByb2Nlc3NfcGlwZV9wcm90byhzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV9yZWFkX3N1YnByb2Nlc3NfcGlwZV9wcm90byhzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgZm9yIHByb3RvIGluIHNlbGYuX3BpcGVzLnZhbHVlcygpOgorICAgICAgICAgICAgcHJvdG8ucGlwZS5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYudGVybWluYXRlKCkKKworICAgIGRlZiBnZXRfcGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5waWQKKworICAgIGRlZiBnZXRfcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JldHVybmNvZGUKKworICAgIGRlZiBnZXRfcGlwZV90cmFuc3BvcnQoc2VsZiwgZmQpOgorICAgICAgICBpZiBmZCBpbiBzZWxmLl9waXBlczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9waXBlc1tmZF0ucGlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWduYWwpOgorICAgICAgICBzZWxmLl9wcm9jLnNlbmRfc2lnbmFsKHNpZ25hbCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Byb2MudGVybWluYXRlKCkKKworICAgIGRlZiBraWxsKHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9jLmtpbGwoKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfcG9zdF9pbml0KHNlbGYpOgorICAgICAgICBwcm9jID0gc2VsZi5fcHJvYworICAgICAgICBsb29wID0gc2VsZi5fbG9vcAorICAgICAgICBpZiBwcm9jLnN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gbG9vcC5jb25uZWN0X3dyaXRlX3BpcGUoCisgICAgICAgICAgICAgICAgbGFtYmRhOiBXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgU1RESU4pLAorICAgICAgICAgICAgICAgIHByb2Muc3RkaW4pCisgICAgICAgIGlmIHByb2Muc3Rkb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gbG9vcC5jb25uZWN0X3JlYWRfcGlwZSgKKyAgICAgICAgICAgICAgICBsYW1iZGE6IFJlYWRTdWJwcm9jZXNzUGlwZVByb3RvKHNlbGYsIFNURE9VVCksCisgICAgICAgICAgICAgICAgcHJvYy5zdGRvdXQpCisgICAgICAgIGlmIHByb2Muc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gbG9vcC5jb25uZWN0X3JlYWRfcGlwZSgKKyAgICAgICAgICAgICAgICBsYW1iZGE6IFJlYWRTdWJwcm9jZXNzUGlwZVByb3RvKHNlbGYsIFNUREVSUiksCisgICAgICAgICAgICAgICAgcHJvYy5zdGRlcnIpCisgICAgICAgIGlmIG5vdCBzZWxmLl9waXBlczoKKyAgICAgICAgICAgIHNlbGYuX3RyeV9jb25uZWN0ZWQoKQorCisgICAgZGVmIF9jYWxsKHNlbGYsIGNiLCAqZGF0YSk6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfY2FsbHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9wZW5kaW5nX2NhbGxzLmFwcGVuZCgoY2IsIGRhdGEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oY2IsICpkYXRhKQorCisgICAgZGVmIF90cnlfY29ubmVjdGVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5fcGVuZGluZ19jYWxscyBpcyBub3QgTm9uZQorICAgICAgICBpZiBhbGwocCBpcyBub3QgTm9uZSBhbmQgcC5jb25uZWN0ZWQgZm9yIHAgaW4gc2VsZi5fcGlwZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICAgICAgZm9yIGNhbGxiYWNrLCBkYXRhIGluIHNlbGYuX3BlbmRpbmdfY2FsbHM6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICpkYXRhKQorICAgICAgICAgICAgc2VsZi5fcGVuZGluZ19jYWxscyA9IE5vbmUKKworICAgIGRlZiBfcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZmQsIGV4Yyk6CisgICAgICAgIHNlbGYuX2NhbGwoc2VsZi5fcHJvdG9jb2wucGlwZV9jb25uZWN0aW9uX2xvc3QsIGZkLCBleGMpCisgICAgICAgIHNlbGYuX3RyeV9maW5pc2goKQorCisgICAgZGVmIF9waXBlX2RhdGFfcmVjZWl2ZWQoc2VsZiwgZmQsIGRhdGEpOgorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnBpcGVfZGF0YV9yZWNlaXZlZCwgZmQsIGRhdGEpCisKKyAgICBkZWYgX3Byb2Nlc3NfZXhpdGVkKHNlbGYsIHJldHVybmNvZGUpOgorICAgICAgICBhc3NlcnQgcmV0dXJuY29kZSBpcyBub3QgTm9uZSwgcmV0dXJuY29kZQorICAgICAgICBhc3NlcnQgc2VsZi5fcmV0dXJuY29kZSBpcyBOb25lLCBzZWxmLl9yZXR1cm5jb2RlCisgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSByZXR1cm5jb2RlCisgICAgICAgIHNlbGYuX2xvb3AuX3N1YnByb2Nlc3NfY2xvc2VkKHNlbGYpCisgICAgICAgIHNlbGYuX2NhbGwoc2VsZi5fcHJvdG9jb2wucHJvY2Vzc19leGl0ZWQpCisgICAgICAgIHNlbGYuX3RyeV9maW5pc2goKQorCisgICAgZGVmIF90cnlfZmluaXNoKHNlbGYpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2ZpbmlzaGVkCisgICAgICAgIGlmIHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBhbGwocCBpcyBub3QgTm9uZSBhbmQgcC5kaXNjb25uZWN0ZWQKKyAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuX3BpcGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbmlzaGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisKK2NsYXNzIFdyaXRlU3VicHJvY2Vzc1BpcGVQcm90byhwcm90b2NvbHMuQmFzZVByb3RvY29sKToKKyAgICBwaXBlID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2MsIGZkKToKKyAgICAgICAgc2VsZi5wcm9jID0gcHJvYworICAgICAgICBzZWxmLmZkID0gZmQKKyAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmRpc2Nvbm5lY3RlZCA9IEZhbHNlCisgICAgICAgIHByb2MuX3BpcGVzW2ZkXSA9IHNlbGYKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIHNlbGYucGlwZSA9IHRyYW5zcG9ydAorICAgICAgICBzZWxmLnByb2MuX3RyeV9jb25uZWN0ZWQoKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBzZWxmLmRpc2Nvbm5lY3RlZCA9IFRydWUKKyAgICAgICAgc2VsZi5wcm9jLl9waXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLmZkLCBleGMpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oV3JpdGVTdWJwcm9jZXNzUGlwZVByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xzLlByb3RvY29sKToKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnByb2MuX3BpcGVfZGF0YV9yZWNlaXZlZChzZWxmLmZkLCBkYXRhKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5IGIvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTEyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9jb25zdGFudHMucHkKQEAgLTAsMCArMSw3IEBACisiIiJDb25zdGFudHMuIiIiCisKKyMgQWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgbG9zdCwgbG9nIHdhcm5pbmdzIGFmdGVyIHRoaXMgbWFueSB3cml0ZSgpcy4KK0xPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUyA9IDUKKworIyBTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGFjY2VwdCgpLgorQUNDRVBUX1JFVFJZX0RFTEFZID0gMQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYmMzY2IKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9ldmVudHMucHkKQEAgLTAsMCArMSw0MDYgQEAKKyIiIkV2ZW50IGxvb3AgYW5kIGV2ZW50IGxvb3AgcG9saWN5LiIiIgorCitfX2FsbF9fID0gWydBYnN0cmFjdEV2ZW50TG9vcFBvbGljeScsICdEZWZhdWx0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgJ0Fic3RyYWN0RXZlbnRMb29wJywgJ0Fic3RyYWN0U2VydmVyJywKKyAgICAgICAgICAgJ0hhbmRsZScsICdUaW1lckhhbmRsZScsCisgICAgICAgICAgICdnZXRfZXZlbnRfbG9vcF9wb2xpY3knLCAnc2V0X2V2ZW50X2xvb3BfcG9saWN5JywKKyAgICAgICAgICAgJ2dldF9ldmVudF9sb29wJywgJ3NldF9ldmVudF9sb29wJywgJ25ld19ldmVudF9sb29wJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHNvY2tldAorCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2NsYXNzIEhhbmRsZToKKyAgICAiIiJPYmplY3QgcmV0dXJuZWQgYnkgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FsbGJhY2ssIGFyZ3MpOgorICAgICAgICBzZWxmLl9jYWxsYmFjayA9IGNhbGxiYWNrCisgICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IEZhbHNlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9ICdIYW5kbGUoe30sIHt9KScuZm9ybWF0KHNlbGYuX2NhbGxiYWNrLCBzZWxmLl9hcmdzKQorICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICByZXMgKz0gJzxjYW5jZWxsZWQ+JworICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBUcnVlCisKKyAgICBkZWYgX3J1bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2soKnNlbGYuX2FyZ3MpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdFeGNlcHRpb24gaW4gY2FsbGJhY2sgJXMgJXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFjaywgc2VsZi5fYXJncykKKyAgICAgICAgc2VsZiA9IE5vbmUgICMgTmVlZGVkIHRvIGJyZWFrIGN5Y2xlcyB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCisKKworZGVmIG1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKToKKyAgICAjIFRPRE86IElubGluZSB0aGlzPyAgT3IgbWFrZSBpdCBhIHByaXZhdGUgRXZlbnRMb29wIG1ldGhvZD8KKyAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2UoY2FsbGJhY2ssIEhhbmRsZSksICdBIEhhbmRsZSBpcyBub3QgYSBjYWxsYmFjaycKKyAgICByZXR1cm4gSGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorCisKK2NsYXNzIFRpbWVySGFuZGxlKEhhbmRsZSk6CisgICAgIiIiT2JqZWN0IHJldHVybmVkIGJ5IHRpbWVkIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBtZXRob2RzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdoZW4sIGNhbGxiYWNrLCBhcmdzKToKKyAgICAgICAgYXNzZXJ0IHdoZW4gaXMgbm90IE5vbmUKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhjYWxsYmFjaywgYXJncykKKworICAgICAgICBzZWxmLl93aGVuID0gd2hlbgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSAnVGltZXJIYW5kbGUoe30sIHt9LCB7fSknLmZvcm1hdChzZWxmLl93aGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXJncykKKyAgICAgICAgaWYgc2VsZi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgcmVzICs9ICc8Y2FuY2VsbGVkPicKKworICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX3doZW4pCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3doZW4gPCBvdGhlci5fd2hlbgorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3doZW4gPCBvdGhlci5fd2hlbjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fd2hlbiA+IG90aGVyLl93aGVuCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fd2hlbiA+IG90aGVyLl93aGVuOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX19lcV9fKG90aGVyKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRpbWVySGFuZGxlKToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5fd2hlbiA9PSBvdGhlci5fd2hlbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2sgPT0gb3RoZXIuX2NhbGxiYWNrIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID09IG90aGVyLl9hcmdzIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPT0gb3RoZXIuX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgZXF1YWwgPSBzZWxmLl9fZXFfXyhvdGhlcikKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkIGlmIGVxdWFsIGlzIE5vdEltcGxlbWVudGVkIGVsc2Ugbm90IGVxdWFsCisKKworY2xhc3MgQWJzdHJhY3RTZXJ2ZXI6CisgICAgIiIiQWJzdHJhY3Qgc2VydmVyIHJldHVybmVkIGJ5IGNyZWF0ZV9zZXJ2aWNlKCkuIiIiCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIlN0b3Agc2VydmluZy4gIFRoaXMgbGVhdmVzIGV4aXN0aW5nIGNvbm5lY3Rpb25zIG9wZW4uIiIiCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIHdhaXRfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJDb3JvdXRpbmUgdG8gd2FpdCB1bnRpbCBzZXJ2aWNlIGlzIGNsb3NlZC4iIiIKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQWJzdHJhY3RFdmVudExvb3A6CisgICAgIiIiQWJzdHJhY3QgZXZlbnQgbG9vcC4iIiIKKworICAgICMgUnVubmluZyBhbmQgc3RvcHBpbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICBkZWYgcnVuX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgZXZlbnQgbG9vcCB1bnRpbCBzdG9wKCkgaXMgY2FsbGVkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgICIiIlJ1biB0aGUgZXZlbnQgbG9vcCB1bnRpbCBhIEZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIFJldHVybiB0aGUgRnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZSBpdHMgZXhjZXB0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgdGhlIGV2ZW50IGxvb3AgYXMgc29vbiBhcyByZWFzb25hYmxlLgorCisgICAgICAgIEV4YWN0bHkgaG93IHNvb24gdGhhdCBpcyBtYXkgZGVwZW5kIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0CisgICAgICAgIG5vIG1vcmUgSS9PIGNhbGxiYWNrcyBzaG91bGQgYmUgc2NoZWR1bGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBldmVudCBsb29wIGlzIGN1cnJlbnRseSBydW5uaW5nLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSBsb29wLgorCisgICAgICAgIFRoZSBsb29wIHNob3VsZCBub3QgYmUgcnVubmluZy4KKworICAgICAgICBUaGlzIGlzIGlkZW1wb3RlbnQgYW5kIGlycmV2ZXJzaWJsZS4KKworICAgICAgICBObyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBvbmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZHMgc2NoZWR1bGluZyBjYWxsYmFja3MuICBBbGwgdGhlc2UgcmV0dXJuIEhhbmRsZXMuCisKKyAgICBkZWYgY2FsbF9zb29uKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxfbGF0ZXIoMCwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIGNhbGxfbGF0ZXIoc2VsZiwgZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYWxsX2F0KHNlbGYsIHdoZW4sIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB0aW1lKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhyZWFkcy4KKworICAgIGRlZiBjYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX2luX2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE5ldHdvcmsgSS9PIG1ldGhvZHMgcmV0dXJuaW5nIEZ1dHVyZXMuCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRuYW1laW5mbyhzZWxmLCBzb2NrYWRkciwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wLCBzb2NrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY3JlYXRlX3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQywgZmxhZ3M9c29ja2V0LkFJX1BBU1NJVkUsCisgICAgICAgICAgICAgICAgICAgICAgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUsIHJldXNlX2FkZHJlc3M9Tm9uZSk6CisgICAgICAgICIiIkEgY29yb3V0aW5lIHdoaWNoIGNyZWF0ZXMgYSBUQ1Agc2VydmVyIGJvdW5kIHRvIGhvc3QgYW5kIHBvcnQuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIFNlcnZlciBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcAorICAgICAgICB0aGUgc2VydmljZS4KKworICAgICAgICBJZiBob3N0IGlzIGFuIGVtcHR5IHN0cmluZyBvciBOb25lIGFsbCBpbnRlcmZhY2VzIGFyZSBhc3N1bWVkCisgICAgICAgIGFuZCBhIGxpc3Qgb2YgbXVsdGlwbGUgc29ja2V0cyB3aWxsIGJlIHJldHVybmVkIChtb3N0IGxpa2VseQorICAgICAgICBvbmUgZm9yIElQdjQgYW5kIGFub3RoZXIgb25lIGZvciBJUHY2KS4KKworICAgICAgICBmYW1pbHkgY2FuIGJlIHNldCB0byBlaXRoZXIgQUZfSU5FVCBvciBBRl9JTkVUNiB0byBmb3JjZSB0aGUKKyAgICAgICAgc29ja2V0IHRvIHVzZSBJUHY0IG9yIElQdjYuIElmIG5vdCBzZXQgaXQgd2lsbCBiZSBkZXRlcm1pbmVkCisgICAgICAgIGZyb20gaG9zdCAoZGVmYXVsdHMgdG8gQUZfVU5TUEVDKS4KKworICAgICAgICBmbGFncyBpcyBhIGJpdG1hc2sgZm9yIGdldGFkZHJpbmZvKCkuCisKKyAgICAgICAgc29jayBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8gdXNlIGEgcHJlZXhpc3RpbmcKKyAgICAgICAgc29ja2V0IG9iamVjdC4KKworICAgICAgICBiYWNrbG9nIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29ubmVjdGlvbnMgcGFzc2VkIHRvCisgICAgICAgIGxpc3RlbigpIChkZWZhdWx0cyB0byAxMDApLgorCisgICAgICAgIHNzbCBjYW4gYmUgc2V0IHRvIGFuIFNTTENvbnRleHQgdG8gZW5hYmxlIFNTTCBvdmVyIHRoZQorICAgICAgICBhY2NlcHRlZCBjb25uZWN0aW9ucy4KKworICAgICAgICByZXVzZV9hZGRyZXNzIHRlbGxzIHRoZSBrZXJuZWwgdG8gcmV1c2UgYSBsb2NhbCBzb2NrZXQgaW4KKyAgICAgICAgVElNRV9XQUlUIHN0YXRlLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBuYXR1cmFsIHRpbWVvdXQgdG8KKyAgICAgICAgZXhwaXJlLiBJZiBub3Qgc3BlY2lmaWVkIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gVHJ1ZSBvbgorICAgICAgICBVTklYLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCByZW1vdGVfYWRkcj1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFBpcGVzIGFuZCBzdWJwcm9jZXNzZXMuCisKKyAgICBkZWYgY29ubmVjdF9yZWFkX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGlwZSk6CisgICAgICAgICIiIlJlZ2lzdGVyIHJlYWQgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggUHJvdG9jb2wgaW50ZXJmYWNlLgorICAgICAgICBwaXBlIGlzIGZpbGUtbGlrZSBvYmplY3QgYWxyZWFkeSBzd2l0Y2hlZCB0byBub25ibG9ja2luZy4KKyAgICAgICAgUmV0dXJuIHBhaXIgKHRyYW5zcG9ydCwgcHJvdG9jb2wpLCB3aGVyZSB0cmFuc3BvcnQgc3VwcG9ydAorICAgICAgICBSZWFkVHJhbnNwb3J0IEFCQyIiIgorICAgICAgICAjIFRoZSByZWFzb24gdG8gYWNjZXB0IGZpbGUtbGlrZSBvYmplY3QgaW5zdGVhZCBvZiBqdXN0IGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAjIGlzOiB3ZSBuZWVkIHRvIG93biBwaXBlIGFuZCBjbG9zZSBpdCBhdCB0cmFuc3BvcnQgZmluaXNoaW5nCisgICAgICAgICMgQ2FuIGdvdCBjb21wbGljYXRlZCBlcnJvcnMgaWYgcGFzcyBmLmZpbGVubygpLAorICAgICAgICAjIGNsb3NlIGZkIGluIHBpcGUgdHJhbnNwb3J0IHRoZW4gY2xvc2UgZiBhbmQgdmlzZSB2ZXJzYS4KKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNvbm5lY3Rfd3JpdGVfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgd3JpdGUgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggQmFzZVByb3RvY29sIGludGVyZmFjZS4KKyAgICAgICAgUGlwZSBpcyBmaWxlLWxpa2Ugb2JqZWN0IGFscmVhZHkgc3dpdGNoZWQgdG8gbm9uYmxvY2tpbmcuCisgICAgICAgIFJldHVybiBwYWlyICh0cmFuc3BvcnQsIHByb3RvY29sKSwgd2hlcmUgdHJhbnNwb3J0IHN1cHBvcnQKKyAgICAgICAgV3JpdGVUcmFuc3BvcnQgQUJDIiIiCisgICAgICAgICMgVGhlIHJlYXNvbiB0byBhY2NlcHQgZmlsZS1saWtlIG9iamVjdCBpbnN0ZWFkIG9mIGp1c3QgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICMgaXM6IHdlIG5lZWQgdG8gb3duIHBpcGUgYW5kIGNsb3NlIGl0IGF0IHRyYW5zcG9ydCBmaW5pc2hpbmcKKyAgICAgICAgIyBDYW4gZ290IGNvbXBsaWNhdGVkIGVycm9ycyBpZiBwYXNzIGYuZmlsZW5vKCksCisgICAgICAgICMgY2xvc2UgZmQgaW4gcGlwZSB0cmFuc3BvcnQgdGhlbiBjbG9zZSBmIGFuZCB2aXNlIHZlcnNhLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc3VicHJvY2Vzc19zaGVsbChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBjbWQsICosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHN1YnByb2Nlc3NfZXhlYyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCAqYXJncywgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBSZWFkeS1iYXNlZCBjYWxsYmFjayByZWdpc3RyYXRpb24gbWV0aG9kcy4KKyAgICAjIFRoZSBhZGRfKigpIG1ldGhvZHMgcmV0dXJuIE5vbmUuCisgICAgIyBUaGUgcmVtb3ZlXyooKSBtZXRob2RzIHJldHVybiBUcnVlIGlmIHNvbWV0aGluZyB3YXMgcmVtb3ZlZCwKKyAgICAjIEZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRlbGV0ZS4KKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBhZGRfd3JpdGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgQ29tcGxldGlvbiBiYXNlZCBJL08gbWV0aG9kcyByZXR1cm5pbmcgRnV0dXJlcy4KKworICAgIGRlZiBzb2NrX3JlY3Yoc2VsZiwgc29jaywgbmJ5dGVzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfc2VuZGFsbChzZWxmLCBzb2NrLCBkYXRhKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfY29ubmVjdChzZWxmLCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFNpZ25hbCBoYW5kbGluZy4KKworICAgIGRlZiBhZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeToKKyAgICAiIiJBYnN0cmFjdCBwb2xpY3kgZm9yIGFjY2Vzc2luZyB0aGUgZXZlbnQgbG9vcC4iIiIKKworICAgIGRlZiBnZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZXRfZXZlbnRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBuZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBEZWZhdWx0RXZlbnRMb29wUG9saWN5KHRocmVhZGluZy5sb2NhbCwgQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpOgorICAgICIiIkRlZmF1bHQgcG9saWN5IGltcGxlbWVudGF0aW9uIGZvciBhY2Nlc3NpbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICBJbiB0aGlzIHBvbGljeSwgZWFjaCB0aHJlYWQgaGFzIGl0cyBvd24gZXZlbnQgbG9vcC4gIEhvd2V2ZXIsIHdlCisgICAgb25seSBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhbiBldmVudCBsb29wIGJ5IGRlZmF1bHQgZm9yIHRoZSBtYWluCisgICAgdGhyZWFkOyBvdGhlciB0aHJlYWRzIGJ5IGRlZmF1bHQgaGF2ZSBubyBldmVudCBsb29wLgorCisgICAgT3RoZXIgcG9saWNpZXMgbWF5IGhhdmUgZGlmZmVyZW50IHJ1bGVzIChlLmcuIGEgc2luZ2xlIGdsb2JhbAorICAgIGV2ZW50IGxvb3AsIG9yIGF1dG9tYXRpY2FsbHkgY3JlYXRpbmcgYW4gZXZlbnQgbG9vcCBwZXIgdGhyZWFkLCBvcgorICAgIHVzaW5nIHNvbWUgb3RoZXIgbm90aW9uIG9mIGNvbnRleHQgdG8gd2hpY2ggYW4gZXZlbnQgbG9vcCBpcworICAgIGFzc29jaWF0ZWQpLgorICAgICIiIgorCisgICAgX2xvb3AgPSBOb25lCisgICAgX3NldF9jYWxsZWQgPSBGYWxzZQorCisgICAgZGVmIGdldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJHZXQgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgVGhpcyBtYXkgYmUgTm9uZSBvciBhbiBpbnN0YW5jZSBvZiBFdmVudExvb3AuCisgICAgICAgICIiIgorICAgICAgICBpZiAoc2VsZi5fbG9vcCBpcyBOb25lIGFuZAorICAgICAgICAgICAgbm90IHNlbGYuX3NldF9jYWxsZWQgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCB0aHJlYWRpbmcuX01haW5UaHJlYWQpKToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBzZWxmLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2xvb3AgaXMgbm90IE5vbmUsIFwKKyAgICAgICAgICAgICAgICgnVGhlcmUgaXMgbm8gY3VycmVudCBldmVudCBsb29wIGluIHRocmVhZCAlci4nICUKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbG9vcAorCisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJTZXQgdGhlIGV2ZW50IGxvb3AuIiIiCisgICAgICAgIHNlbGYuX3NldF9jYWxsZWQgPSBUcnVlCisgICAgICAgIGFzc2VydCBsb29wIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShsb29wLCBBYnN0cmFjdEV2ZW50TG9vcCkKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBuZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGV2ZW50IGxvb3AuCisKKyAgICAgICAgWW91IG11c3QgY2FsbCBzZXRfZXZlbnRfbG9vcCgpIHRvIG1ha2UgdGhpcyB0aGUgY3VycmVudCBldmVudAorICAgICAgICBsb29wLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgd2luZG93c19ldmVudHMKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3dzX2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGVsc2U6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgdW5peF9ldmVudHMKKyAgICAgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcCgpCisKKworIyBFdmVudCBsb29wIHBvbGljeS4gIFRoZSBwb2xpY3kgaXRzZWxmIGlzIGFsd2F5cyBnbG9iYWwsIGV2ZW4gaWYgdGhlCisjIHBvbGljeSdzIHJ1bGVzIHNheSB0aGF0IHRoZXJlIGlzIGFuIGV2ZW50IGxvb3AgcGVyIHRocmVhZCAob3Igb3RoZXIKKyMgbm90aW9uIG9mIGNvbnRleHQpLiAgVGhlIGRlZmF1bHQgcG9saWN5IGlzIGluc3RhbGxlZCBieSB0aGUgZmlyc3QKKyMgY2FsbCB0byBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS4KK19ldmVudF9sb29wX3BvbGljeSA9IE5vbmUKKworCitkZWYgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCk6CisgICAgIiIiWFhYIiIiCisgICAgZ2xvYmFsIF9ldmVudF9sb29wX3BvbGljeQorICAgIGlmIF9ldmVudF9sb29wX3BvbGljeSBpcyBOb25lOgorICAgICAgICBfZXZlbnRfbG9vcF9wb2xpY3kgPSBEZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKyAgICByZXR1cm4gX2V2ZW50X2xvb3BfcG9saWN5CisKKworZGVmIHNldF9ldmVudF9sb29wX3BvbGljeShwb2xpY3kpOgorICAgICIiIlhYWCIiIgorICAgIGdsb2JhbCBfZXZlbnRfbG9vcF9wb2xpY3kKKyAgICBhc3NlcnQgcG9saWN5IGlzIE5vbmUgb3IgaXNpbnN0YW5jZShwb2xpY3ksIEFic3RyYWN0RXZlbnRMb29wUG9saWN5KQorICAgIF9ldmVudF9sb29wX3BvbGljeSA9IHBvbGljeQorCisKK2RlZiBnZXRfZXZlbnRfbG9vcCgpOgorICAgICIiIlhYWCIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5nZXRfZXZlbnRfbG9vcCgpCisKKworZGVmIHNldF9ldmVudF9sb29wKGxvb3ApOgorICAgICIiIlhYWCIiIgorICAgIGdldF9ldmVudF9sb29wX3BvbGljeSgpLnNldF9ldmVudF9sb29wKGxvb3ApCisKKworZGVmIG5ld19ldmVudF9sb29wKCk6CisgICAgIiIiWFhYIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLm5ld19ldmVudF9sb29wKCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Z1dHVyZXMucHkgYi9MaWIvYXN5bmNpby9mdXR1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjc4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9mdXR1cmVzLnB5CkBAIC0wLDAgKzEsMzM4IEBACisiIiJBIEZ1dHVyZSBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgaW4gUEVQIDMxNDguIiIiCisKK19fYWxsX18gPSBbJ0NhbmNlbGxlZEVycm9yJywgJ1RpbWVvdXRFcnJvcicsCisgICAgICAgICAgICdJbnZhbGlkU3RhdGVFcnJvcicsCisgICAgICAgICAgICdGdXR1cmUnLCAnd3JhcF9mdXR1cmUnLAorICAgICAgICAgICBdCisKK2ltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdHJhY2ViYWNrCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisjIFN0YXRlcyBmb3IgRnV0dXJlLgorX1BFTkRJTkcgPSAnUEVORElORycKK19DQU5DRUxMRUQgPSAnQ0FOQ0VMTEVEJworX0ZJTklTSEVEID0gJ0ZJTklTSEVEJworCisjIFRPRE86IERvIHdlIHJlYWxseSB3YW50IHRvIGRlcGVuZCBvbiBjb25jdXJyZW50LmZ1dHVyZXMgaW50ZXJuYWxzPworRXJyb3IgPSBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UuRXJyb3IKK0NhbmNlbGxlZEVycm9yID0gY29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yCitUaW1lb3V0RXJyb3IgPSBjb25jdXJyZW50LmZ1dHVyZXMuVGltZW91dEVycm9yCisKK1NUQUNLX0RFQlVHID0gbG9nZ2luZy5ERUJVRyAtIDEgICMgaGVhdnktZHV0eSBkZWJ1Z2dpbmcKKworCitjbGFzcyBJbnZhbGlkU3RhdGVFcnJvcihFcnJvcik6CisgICAgIiIiVGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHN0YXRlLiIiIgorICAgICMgVE9ETzogU2hvdyB0aGUgZnV0dXJlLCBpdHMgc3RhdGUsIHRoZSBtZXRob2QsIGFuZCB0aGUgcmVxdWlyZWQgc3RhdGUuCisKKworY2xhc3MgX1RyYWNlYmFja0xvZ2dlcjoKKyAgICAiIiJIZWxwZXIgdG8gbG9nIGEgdHJhY2ViYWNrIHVwb24gZGVzdHJ1Y3Rpb24gaWYgbm90IGNsZWFyZWQuCisKKyAgICBUaGlzIHNvbHZlcyBhIG5hc3R5IHByb2JsZW0gd2l0aCBGdXR1cmVzIGFuZCBUYXNrcyB0aGF0IGhhdmUgYW4KKyAgICBleGNlcHRpb24gc2V0OiBpZiBub2JvZHkgYXNrcyBmb3IgdGhlIGV4Y2VwdGlvbiwgdGhlIGV4Y2VwdGlvbiBpcworICAgIG5ldmVyIGxvZ2dlZC4gIFRoaXMgdmlvbGF0ZXMgdGhlIFplbiBvZiBQeXRob246ICdFcnJvcnMgc2hvdWxkCisgICAgbmV2ZXIgcGFzcyBzaWxlbnRseS4gIFVubGVzcyBleHBsaWNpdGx5IHNpbGVuY2VkLicKKworICAgIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQgdG8gbG9nIHRoZSBleGNlcHRpb24gYXMgc29vbiBhcworICAgIHNldF9leGNlcHRpb24oKSBpcyBjYWxsZWQ6IGlmIHRoZSBjYWxsaW5nIGNvZGUgaXMgd3JpdHRlbgorICAgIHByb3Blcmx5LCBpdCB3aWxsIGdldCB0aGUgZXhjZXB0aW9uIGFuZCBoYW5kbGUgaXQgcHJvcGVybHkuICBCdXQKKyAgICB3ZSAqZG8qIHdhbnQgdG8gbG9nIGl0IGlmIHJlc3VsdCgpIG9yIGV4Y2VwdGlvbigpIHdhcyBuZXZlciBjYWxsZWQKKyAgICAtLSBvdGhlcndpc2UgZGV2ZWxvcGVycyB3YXN0ZSBhIGxvdCBvZiB0aW1lIHdvbmRlcmluZyB3aHkgdGhlaXIKKyAgICBidWdneSBjb2RlIGZhaWxzIHNpbGVudGx5LgorCisgICAgQW4gZWFybGllciBhdHRlbXB0IGFkZGVkIGEgX19kZWxfXygpIG1ldGhvZCB0byB0aGUgRnV0dXJlIGNsYXNzCisgICAgaXRzZWxmLCBidXQgdGhpcyBiYWNrZmlyZWQgYmVjYXVzZSB0aGUgcHJlc2VuY2Ugb2YgX19kZWxfXygpCisgICAgcHJldmVudHMgZ2FyYmFnZSBjb2xsZWN0aW9uIGZyb20gYnJlYWtpbmcgY3ljbGVzLiAgQSB3YXkgb3V0IG9mCisgICAgdGhpcyBjYXRjaC0yMiBpcyB0byBhdm9pZCBoYXZpbmcgYSBfX2RlbF9fKCkgbWV0aG9kIG9uIHRoZSBGdXR1cmUKKyAgICBjbGFzcyBpdHNlbGYsIGJ1dCBpbnN0ZWFkIHRvIGhhdmUgYSByZWZlcmVuY2UgdG8gYSBoZWxwZXIgb2JqZWN0CisgICAgd2l0aCBhIF9fZGVsX18oKSBtZXRob2QgdGhhdCBsb2dzIHRoZSB0cmFjZWJhY2ssIHdoZXJlIHdlIGVuc3VyZQorICAgIHRoYXQgdGhlIGhlbHBlciBvYmplY3QgZG9lc24ndCBwYXJ0aWNpcGF0ZSBpbiBjeWNsZXMsIGFuZCBvbmx5IHRoZQorICAgIEZ1dHVyZSBoYXMgYSByZWZlcmVuY2UgdG8gaXQuCisKKyAgICBUaGUgaGVscGVyIG9iamVjdCBpcyBhZGRlZCB3aGVuIHNldF9leGNlcHRpb24oKSBpcyBjYWxsZWQuICBXaGVuCisgICAgdGhlIEZ1dHVyZSBpcyBjb2xsZWN0ZWQsIGFuZCB0aGUgaGVscGVyIGlzIHByZXNlbnQsIHRoZSBoZWxwZXIKKyAgICBvYmplY3QgaXMgYWxzbyBjb2xsZWN0ZWQsIGFuZCBpdHMgX19kZWxfXygpIG1ldGhvZCB3aWxsIGxvZyB0aGUKKyAgICB0cmFjZWJhY2suICBXaGVuIHRoZSBGdXR1cmUncyByZXN1bHQoKSBvciBleGNlcHRpb24oKSBtZXRob2QgaXMKKyAgICBjYWxsZWQgKGFuZCBhIGhlbHBlciBvYmplY3QgaXMgcHJlc2VudCksIGl0IHJlbW92ZXMgdGhlIHRoZSBoZWxwZXIKKyAgICBvYmplY3QsIGFmdGVyIGNhbGxpbmcgaXRzIGNsZWFyKCkgbWV0aG9kIHRvIHByZXZlbnQgaXQgZnJvbQorICAgIGxvZ2dpbmcuCisKKyAgICBPbmUgZG93bnNpZGUgaXMgdGhhdCB3ZSBkbyBhIGZhaXIgYW1vdW50IG9mIHdvcmsgdG8gZXh0cmFjdCB0aGUKKyAgICB0cmFjZWJhY2sgZnJvbSB0aGUgZXhjZXB0aW9uLCBldmVuIHdoZW4gaXQgaXMgbmV2ZXIgbG9nZ2VkLiAgSXQKKyAgICB3b3VsZCBzZWVtIGNoZWFwZXIgdG8ganVzdCBzdG9yZSB0aGUgZXhjZXB0aW9uIG9iamVjdCwgYnV0IHRoYXQKKyAgICByZWZlcmVuY2VzIHRoZSB0cmFjZWJhY2ssIHdoaWNoIHJlZmVyZW5jZXMgc3RhY2sgZnJhbWVzLCB3aGljaCBtYXkKKyAgICByZWZlcmVuY2UgdGhlIEZ1dHVyZSwgd2hpY2ggcmVmZXJlbmNlcyB0aGUgX1RyYWNlYmFja0xvZ2dlciwgYW5kCisgICAgdGhlbiB0aGUgX1RyYWNlYmFja0xvZ2dlciB3b3VsZCBiZSBpbmNsdWRlZCBpbiBhIGN5Y2xlLCB3aGljaCBpcworICAgIHdoYXQgd2UncmUgdHJ5aW5nIHRvIGF2b2lkISAgQXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBkb24ndAorICAgIGltbWVkaWF0ZWx5IGZvcm1hdCB0aGUgZXhjZXB0aW9uOyB3ZSBvbmx5IGRvIHRoZSB3b3JrIHdoZW4KKyAgICBhY3RpdmF0ZSgpIGlzIGNhbGxlZCwgd2hpY2ggY2FsbCBpcyBkZWxheWVkIHVudGlsIGFmdGVyIGFsbCB0aGUKKyAgICBGdXR1cmUncyBjYWxsYmFja3MgaGF2ZSBydW4uICBTaW5jZSB1c3VhbGx5IGEgRnV0dXJlIGhhcyBhdCBsZWFzdAorICAgIG9uZSBjYWxsYmFjayAodHlwaWNhbGx5IHNldCBieSAneWllbGQgZnJvbScpIGFuZCB1c3VhbGx5IHRoYXQKKyAgICBjYWxsYmFjayBleHRyYWN0cyB0aGUgY2FsbGJhY2ssIHRoZXJlYnkgcmVtb3ZpbmcgdGhlIG5lZWQgdG8KKyAgICBmb3JtYXQgdGhlIGV4Y2VwdGlvbi4KKworICAgIFBTLiBJIGRvbid0IGNsYWltIGNyZWRpdCBmb3IgdGhpcyBzb2x1dGlvbi4gIEkgZmlyc3QgaGVhcmQgb2YgaXQKKyAgICBpbiBhIGRpc2N1c3Npb24gYWJvdXQgY2xvc2luZyBmaWxlcyB3aGVuIHRoZXkgYXJlIGNvbGxlY3RlZC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9IFsnZXhjJywgJ3RiJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGMpOgorICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBzZWxmLnRiID0gTm9uZQorCisgICAgZGVmIGFjdGl2YXRlKHNlbGYpOgorICAgICAgICBleGMgPSBzZWxmLmV4YworICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmV4YyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYudGIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGMuX19jbGFzc19fLCBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLl9fdHJhY2ViYWNrX18pCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuZXhjID0gTm9uZQorICAgICAgICBzZWxmLnRiID0gTm9uZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudGI6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Z1dHVyZS9UYXNrIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkOlxuJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4oc2VsZi50YikpCisKKworY2xhc3MgRnV0dXJlOgorICAgICIiIlRoaXMgY2xhc3MgaXMgKmFsbW9zdCogY29tcGF0aWJsZSB3aXRoIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuCisKKyAgICBEaWZmZXJlbmNlczoKKworICAgIC0gcmVzdWx0KCkgYW5kIGV4Y2VwdGlvbigpIGRvIG5vdCB0YWtlIGEgdGltZW91dCBhcmd1bWVudCBhbmQKKyAgICAgIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBmdXR1cmUgaXNuJ3QgZG9uZSB5ZXQuCisKKyAgICAtIENhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggYWRkX2RvbmVfY2FsbGJhY2soKSBhcmUgYWx3YXlzIGNhbGxlZAorICAgICAgdmlhIHRoZSBldmVudCBsb29wJ3MgY2FsbF9zb29uX3RocmVhZHNhZmUoKS4KKworICAgIC0gVGhpcyBjbGFzcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSB3YWl0KCkgYW5kIGFzX2NvbXBsZXRlZCgpCisgICAgICBtZXRob2RzIGluIHRoZSBjb25jdXJyZW50LmZ1dHVyZXMgcGFja2FnZS4KKworICAgIChJbiBQeXRob24gMy40IG9yIGxhdGVyIHdlIG1heSBiZSBhYmxlIHRvIHVuaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbnMuKQorICAgICIiIgorCisgICAgIyBDbGFzcyB2YXJpYWJsZXMgc2VydmluZyBhcyBkZWZhdWx0cyBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLgorICAgIF9zdGF0ZSA9IF9QRU5ESU5HCisgICAgX3Jlc3VsdCA9IE5vbmUKKyAgICBfZXhjZXB0aW9uID0gTm9uZQorICAgIF9sb29wID0gTm9uZQorCisgICAgX2Jsb2NraW5nID0gRmFsc2UgICMgcHJvcGVyIHVzZSBvZiBmdXR1cmUgKHlpZWxkIHZzIHlpZWxkIGZyb20pCisKKyAgICBfdGJfbG9nZ2VyID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgICIiIkluaXRpYWxpemUgdGhlIGZ1dHVyZS4KKworICAgICAgICBUaGUgb3B0aW9uYWwgZXZlbnRfbG9vcCBhcmd1bWVudCBhbGxvd3MgdG8gZXhwbGljaXRseSBzZXQgdGhlIGV2ZW50CisgICAgICAgIGxvb3Agb2JqZWN0IHVzZWQgYnkgdGhlIGZ1dHVyZS4gSWYgaXQncyBub3QgcHJvdmlkZWQsIHRoZSBmdXR1cmUgdXNlcworICAgICAgICB0aGUgZGVmYXVsdCBldmVudCBsb29wLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfRklOSVNIRUQ6CisgICAgICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzICs9ICc8ZXhjZXB0aW9uPXshcn0+Jy5mb3JtYXQoc2VsZi5fZXhjZXB0aW9uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgKz0gJzxyZXN1bHQ9eyFyfT4nLmZvcm1hdChzZWxmLl9yZXN1bHQpCisgICAgICAgIGVsaWYgc2VsZi5fY2FsbGJhY2tzOgorICAgICAgICAgICAgc2l6ZSA9IGxlbihzZWxmLl9jYWxsYmFja3MpCisgICAgICAgICAgICBpZiBzaXplID4gMjoKKyAgICAgICAgICAgICAgICByZXMgKz0gJzx7fSwgW3t9LCA8e30gbW9yZT4sIHt9XT4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhdGUsIHNlbGYuX2NhbGxiYWNrc1swXSwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZS0yLCBzZWxmLl9jYWxsYmFja3NbLTFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgKz0gJzx7fSwge30+Jy5mb3JtYXQoc2VsZi5fc3RhdGUsIHNlbGYuX2NhbGxiYWNrcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyArPSAnPHt9PicuZm9ybWF0KHNlbGYuX3N0YXRlKQorICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJDYW5jZWwgdGhlIGZ1dHVyZSBhbmQgc2NoZWR1bGUgY2FsbGJhY2tzLgorCisgICAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIG9yIGNhbmNlbGxlZCwgcmV0dXJuIEZhbHNlLiAgT3RoZXJ3aXNlLAorICAgICAgICBjaGFuZ2UgdGhlIGZ1dHVyZSdzIHN0YXRlIHRvIGNhbmNlbGxlZCwgc2NoZWR1bGUgdGhlIGNhbGxiYWNrcyBhbmQKKyAgICAgICAgcmV0dXJuIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9DQU5DRUxMRUQKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVfY2FsbGJhY2tzKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfc2NoZWR1bGVfY2FsbGJhY2tzKHNlbGYpOgorICAgICAgICAiIiJJbnRlcm5hbDogQXNrIHRoZSBldmVudCBsb29wIHRvIGNhbGwgYWxsIGNhbGxiYWNrcy4KKworICAgICAgICBUaGUgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgdG8gYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUuIEFsc28KKyAgICAgICAgY2xlYXJzIHRoZSBjYWxsYmFjayBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgY2FsbGJhY2tzID0gc2VsZi5fY2FsbGJhY2tzWzpdCisgICAgICAgIGlmIG5vdCBjYWxsYmFja3M6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9jYWxsYmFja3NbOl0gPSBbXQorICAgICAgICBmb3IgY2FsbGJhY2sgaW4gY2FsbGJhY2tzOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssIHNlbGYpCisKKyAgICBkZWYgY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZnV0dXJlIHdhcyBjYW5jZWxsZWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PSBfQ0FOQ0VMTEVECisKKyAgICAjIERvbid0IGltcGxlbWVudCBydW5uaW5nKCk7IHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTg2OTkKKworICAgIGRlZiBkb25lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZnV0dXJlIGlzIGRvbmUuCisKKyAgICAgICAgRG9uZSBtZWFucyBlaXRoZXIgdGhhdCBhIHJlc3VsdCAvIGV4Y2VwdGlvbiBhcmUgYXZhaWxhYmxlLCBvciB0aGF0IHRoZQorICAgICAgICBmdXR1cmUgd2FzIGNhbmNlbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORworCisgICAgZGVmIHJlc3VsdChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZXN1bHQgdGhpcyBmdXR1cmUgcmVwcmVzZW50cy4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmFpc2VzIENhbmNlbGxlZEVycm9yLiAgSWYgdGhlCisgICAgICAgIGZ1dHVyZSdzIHJlc3VsdCBpc24ndCB5ZXQgYXZhaWxhYmxlLCByYWlzZXMgSW52YWxpZFN0YXRlRXJyb3IuICBJZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUgYW5kIGhhcyBhbiBleGNlcHRpb24gc2V0LCB0aGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfQ0FOQ0VMTEVEOgorICAgICAgICAgICAgcmFpc2UgQ2FuY2VsbGVkRXJyb3IKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX0ZJTklTSEVEOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ1Jlc3VsdCBpcyBub3QgcmVhZHkuJykKKyAgICAgICAgaWYgc2VsZi5fdGJfbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlciA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisgICAgICAgIHJldHVybiBzZWxmLl9yZXN1bHQKKworICAgIGRlZiBleGNlcHRpb24oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgZXhjZXB0aW9uIHRoYXQgd2FzIHNldCBvbiB0aGlzIGZ1dHVyZS4KKworICAgICAgICBUaGUgZXhjZXB0aW9uIChvciBOb25lIGlmIG5vIGV4Y2VwdGlvbiB3YXMgc2V0KSBpcyByZXR1cm5lZCBvbmx5IGlmCisgICAgICAgIHRoZSBmdXR1cmUgaXMgZG9uZS4gIElmIHRoZSBmdXR1cmUgaGFzIGJlZW4gY2FuY2VsbGVkLCByYWlzZXMKKyAgICAgICAgQ2FuY2VsbGVkRXJyb3IuICBJZiB0aGUgZnV0dXJlIGlzbid0IGRvbmUgeWV0LCByYWlzZXMKKyAgICAgICAgSW52YWxpZFN0YXRlRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfQ0FOQ0VMTEVEOgorICAgICAgICAgICAgcmFpc2UgQ2FuY2VsbGVkRXJyb3IKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX0ZJTklTSEVEOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ0V4Y2VwdGlvbiBpcyBub3Qgc2V0LicpCisgICAgICAgIGlmIHNlbGYuX3RiX2xvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb24KKworICAgIGRlZiBhZGRfZG9uZV9jYWxsYmFjayhzZWxmLCBmbik6CisgICAgICAgICIiIkFkZCBhIGNhbGxiYWNrIHRvIGJlIHJ1biB3aGVuIHRoZSBmdXR1cmUgYmVjb21lcyBkb25lLgorCisgICAgICAgIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBmdXR1cmUgb2JqZWN0LiBJZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgaXMgY2FsbGVkLCB0aGUgY2FsbGJhY2sgaXMKKyAgICAgICAgc2NoZWR1bGVkIHdpdGggY2FsbF9zb29uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihmbiwgc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrcy5hcHBlbmQoZm4pCisKKyAgICAjIE5ldyBtZXRob2Qgbm90IGluIFBFUCAzMTQ4LgorCisgICAgZGVmIHJlbW92ZV9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgIiIiUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSBjYWxsYmFjayBmcm9tIHRoZSAiY2FsbCB3aGVuIGRvbmUiIGxpc3QuCisKKyAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhbGxiYWNrcyByZW1vdmVkLgorICAgICAgICAiIiIKKyAgICAgICAgZmlsdGVyZWRfY2FsbGJhY2tzID0gW2YgZm9yIGYgaW4gc2VsZi5fY2FsbGJhY2tzIGlmIGYgIT0gZm5dCisgICAgICAgIHJlbW92ZWRfY291bnQgPSBsZW4oc2VsZi5fY2FsbGJhY2tzKSAtIGxlbihmaWx0ZXJlZF9jYWxsYmFja3MpCisgICAgICAgIGlmIHJlbW92ZWRfY291bnQ6CisgICAgICAgICAgICBzZWxmLl9jYWxsYmFja3NbOl0gPSBmaWx0ZXJlZF9jYWxsYmFja3MKKyAgICAgICAgcmV0dXJuIHJlbW92ZWRfY291bnQKKworICAgICMgU28tY2FsbGVkIGludGVybmFsIG1ldGhvZHMgKG5vdGU6IG5vIHNldF9ydW5uaW5nX29yX25vdGlmeV9jYW5jZWwoKSkuCisKKyAgICBkZWYgc2V0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICAiIiJNYXJrIHRoZSBmdXR1cmUgZG9uZSBhbmQgc2V0IGl0cyByZXN1bHQuCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgICBJbnZhbGlkU3RhdGVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9QRU5ESU5HOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ3t9OiB7IXJ9Jy5mb3JtYXQoc2VsZi5fc3RhdGUsIHNlbGYpKQorICAgICAgICBzZWxmLl9yZXN1bHQgPSByZXN1bHQKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfRklOSVNIRUQKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVfY2FsbGJhY2tzKCkKKworICAgIGRlZiBzZXRfZXhjZXB0aW9uKHNlbGYsIGV4Y2VwdGlvbik6CisgICAgICAgICIiIk1hcmsgdGhlIGZ1dHVyZSBkb25lIGFuZCBzZXQgYW4gZXhjZXB0aW9uLgorCisgICAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCByYWlzZXMKKyAgICAgICAgSW52YWxpZFN0YXRlRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCd7fTogeyFyfScuZm9ybWF0KHNlbGYuX3N0YXRlLCBzZWxmKSkKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuX3RiX2xvZ2dlciA9IF9UcmFjZWJhY2tMb2dnZXIoZXhjZXB0aW9uKQorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9GSU5JU0hFRAorICAgICAgICBzZWxmLl9zY2hlZHVsZV9jYWxsYmFja3MoKQorICAgICAgICAjIEFycmFuZ2UgZm9yIHRoZSBsb2dnZXIgdG8gYmUgYWN0aXZhdGVkIGFmdGVyIGFsbCBjYWxsYmFja3MKKyAgICAgICAgIyBoYXZlIGhhZCBhIGNoYW5jZSB0byBjYWxsIHJlc3VsdCgpIG9yIGV4Y2VwdGlvbigpLgorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl90Yl9sb2dnZXIuYWN0aXZhdGUpCisKKyAgICAjIFRydWx5IGludGVybmFsIG1ldGhvZHMuCisKKyAgICBkZWYgX2NvcHlfc3RhdGUoc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJJbnRlcm5hbCBoZWxwZXIgdG8gY29weSBzdGF0ZSBmcm9tIGFub3RoZXIgRnV0dXJlLgorCisgICAgICAgIFRoZSBvdGhlciBGdXR1cmUgbWF5IGJlIGEgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCBvdGhlci5kb25lKCkKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmRvbmUoKQorICAgICAgICBpZiBvdGhlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHNlbGYuY2FuY2VsKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IG90aGVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICBpZiBleGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb3RoZXIucmVzdWx0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXN1bHQocmVzdWx0KQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5kb25lKCk6CisgICAgICAgICAgICBzZWxmLl9ibG9ja2luZyA9IFRydWUKKyAgICAgICAgICAgIHlpZWxkIHNlbGYgICMgVGhpcyB0ZWxscyBUYXNrIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24uCisgICAgICAgIGFzc2VydCBzZWxmLmRvbmUoKSwgInlpZWxkIGZyb20gd2Fzbid0IHVzZWQgd2l0aCBmdXR1cmUiCisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdCgpICAjIE1heSByYWlzZSB0b28uCisKKworZGVmIHdyYXBfZnV0dXJlKGZ1dCwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXcmFwIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUgb2JqZWN0LiIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnV0LCBGdXR1cmUpOgorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShmdXQsIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUpLCBcCisgICAgICAgICdjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlIGlzIGV4cGVjdGVkLCBnb3QgeyFyfScuZm9ybWF0KGZ1dCkKKworICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBuZXdfZnV0dXJlID0gRnV0dXJlKGxvb3A9bG9vcCkKKyAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soCisgICAgICAgIGxhbWJkYSBmdXR1cmU6IGxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoCisgICAgICAgICAgICBuZXdfZnV0dXJlLl9jb3B5X3N0YXRlLCBmdXQpKQorICAgIHJldHVybiBuZXdfZnV0dXJlCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9sb2Nrcy5weSBiL0xpYi9hc3luY2lvL2xvY2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZWRiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9sb2Nrcy5weQpAQCAtMCwwICsxLDQwMSBAQAorIiIiU3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIiIiCisKK19fYWxsX18gPSBbJ0xvY2snLCAnRXZlbnQnLCAnQ29uZGl0aW9uJywgJ1NlbWFwaG9yZSddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRhc2tzCisKKworY2xhc3MgTG9jazoKKyAgICAiIiJQcmltaXRpdmUgbG9jayBvYmplY3RzLgorCisgICAgQSBwcmltaXRpdmUgbG9jayBpcyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgdGhhdCBpcyBub3Qgb3duZWQKKyAgICBieSBhIHBhcnRpY3VsYXIgY29yb3V0aW5lIHdoZW4gbG9ja2VkLiAgQSBwcmltaXRpdmUgbG9jayBpcyBpbiBvbmUKKyAgICBvZiB0d28gc3RhdGVzLCAnbG9ja2VkJyBvciAndW5sb2NrZWQnLgorCisgICAgSXQgaXMgY3JlYXRlZCBpbiB0aGUgdW5sb2NrZWQgc3RhdGUuICBJdCBoYXMgdHdvIGJhc2ljIG1ldGhvZHMsCisgICAgYWNxdWlyZSgpIGFuZCByZWxlYXNlKCkuICBXaGVuIHRoZSBzdGF0ZSBpcyB1bmxvY2tlZCwgYWNxdWlyZSgpCisgICAgY2hhbmdlcyB0aGUgc3RhdGUgdG8gbG9ja2VkIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUKKyAgICBzdGF0ZSBpcyBsb2NrZWQsIGFjcXVpcmUoKSBibG9ja3MgdW50aWwgYSBjYWxsIHRvIHJlbGVhc2UoKSBpbgorICAgIGFub3RoZXIgY29yb3V0aW5lIGNoYW5nZXMgaXQgdG8gdW5sb2NrZWQsIHRoZW4gdGhlIGFjcXVpcmUoKSBjYWxsCisgICAgcmVzZXRzIGl0IHRvIGxvY2tlZCBhbmQgcmV0dXJucy4gIFRoZSByZWxlYXNlKCkgbWV0aG9kIHNob3VsZCBvbmx5CisgICAgYmUgY2FsbGVkIGluIHRoZSBsb2NrZWQgc3RhdGU7IGl0IGNoYW5nZXMgdGhlIHN0YXRlIHRvIHVubG9ja2VkCisgICAgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVsZWFzZSBhbgorICAgIHVubG9ja2VkIGxvY2ssIGEgUnVudGltZUVycm9yIHdpbGwgYmUgcmFpc2VkLgorCisgICAgV2hlbiBtb3JlIHRoYW4gb25lIGNvcm91dGluZSBpcyBibG9ja2VkIGluIGFjcXVpcmUoKSB3YWl0aW5nIGZvcgorICAgIHRoZSBzdGF0ZSB0byB0dXJuIHRvIHVubG9ja2VkLCBvbmx5IG9uZSBjb3JvdXRpbmUgcHJvY2VlZHMgd2hlbiBhCisgICAgcmVsZWFzZSgpIGNhbGwgcmVzZXRzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZDsgZmlyc3QgY29yb3V0aW5lIHdoaWNoCisgICAgaXMgYmxvY2tlZCBpbiBhY3F1aXJlKCkgaXMgYmVpbmcgcHJvY2Vzc2VkLgorCisgICAgYWNxdWlyZSgpIGlzIGEgY29yb3V0aW5lIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggJ3lpZWxkIGZyb20nLgorCisgICAgTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuICAnKHlpZWxkIGZyb20gbG9jayknCisgICAgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCisKKyAgICBVc2FnZToKKworICAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgIC4uLgorICAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgLi4uCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgQ29udGV4dCBtYW5hZ2VyIHVzYWdlOgorCisgICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAgLi4uCisgICAgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICAgICAgLi4uCisKKyAgICBMb2NrIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3IgbG9ja2luZyBzdGF0ZToKKworICAgICAgICBpZiBub3QgbG9jay5sb2NrZWQoKToKKyAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICMgbG9jayBpcyBhY3F1aXJlZAorICAgICAgICAgICAuLi4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2xvY2tlZCA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYuX2xvY2tlZCBlbHNlICd1bmxvY2tlZCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBkZWYgbG9ja2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiBsb2NrIGlzIGFjcXVpcmVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbG9ja2VkCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGFjcXVpcmUoc2VsZik6CisgICAgICAgICIiIkFjcXVpcmUgYSBsb2NrLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgbG9jayBpcyB1bmxvY2tlZCwgdGhlbiBzZXRzIGl0IHRvCisgICAgICAgIGxvY2tlZCBhbmQgcmV0dXJucyBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3dhaXRlcnMgYW5kIG5vdCBzZWxmLl9sb2NrZWQ6CisgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICAiIiJSZWxlYXNlIGEgbG9jay4KKworICAgICAgICBXaGVuIHRoZSBsb2NrIGlzIGxvY2tlZCwgcmVzZXQgaXQgdG8gdW5sb2NrZWQsIGFuZCByZXR1cm4uCisgICAgICAgIElmIGFueSBvdGhlciBjb3JvdXRpbmVzIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZQorICAgICAgICB1bmxvY2tlZCwgYWxsb3cgZXhhY3RseSBvbmUgb2YgdGhlbSB0byBwcm9jZWVkLgorCisgICAgICAgIFdoZW4gaW52b2tlZCBvbiBhbiB1bmxvY2tlZCBsb2NrLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gRmFsc2UKKyAgICAgICAgICAgICMgV2FrZSB1cCB0aGUgZmlyc3Qgd2FpdGVyIHdobyBpc24ndCBjYW5jZWxsZWQuCisgICAgICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0xvY2sgaXMgbm90IGFjcXVpcmVkLicpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5yZWxlYXNlKCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICByZXR1cm4gc2VsZgorCisKK2NsYXNzIEV2ZW50OgorICAgICIiIkFuIEV2ZW50IGltcGxlbWVudGF0aW9uLCBvdXIgZXF1aXZhbGVudCB0byB0aHJlYWRpbmcuRXZlbnQuCisKKyAgICBDbGFzcyBpbXBsZW1lbnRpbmcgZXZlbnQgb2JqZWN0cy4gQW4gZXZlbnQgbWFuYWdlcyBhIGZsYWcgdGhhdCBjYW4gYmUgc2V0CisgICAgdG8gdHJ1ZSB3aXRoIHRoZSBzZXQoKSBtZXRob2QgYW5kIHJlc2V0IHRvIGZhbHNlIHdpdGggdGhlIGNsZWFyKCkgbWV0aG9kLgorICAgIFRoZSB3YWl0KCkgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgZmxhZyBpcyB0cnVlLiBUaGUgZmxhZyBpcyBpbml0aWFsbHkKKyAgICBmYWxzZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl92YWx1ZSA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICMgVE9ETzogYWRkIHdhaXRlcnM6TiBpZiA+IDAuCisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgJ3NldCcgaWYgc2VsZi5fdmFsdWUgZWxzZSAndW5zZXQnKQorCisgICAgZGVmIGlzX3NldChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlCisKKyAgICBkZWYgc2V0KHNlbGYpOgorICAgICAgICAiIiJTZXQgdGhlIGludGVybmFsIGZsYWcgdG8gdHJ1ZS4gQWxsIGNvcm91dGluZXMgd2FpdGluZyBmb3IgaXQgdG8KKyAgICAgICAgYmVjb21lIHRydWUgYXJlIGF3YWtlbmVkLiBDb3JvdXRpbmUgdGhhdCBjYWxsIHdhaXQoKSBvbmNlIHRoZSBmbGFnIGlzCisgICAgICAgIHRydWUgd2lsbCBub3QgYmxvY2sgYXQgYWxsLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3ZhbHVlOgorICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBUcnVlCisKKyAgICAgICAgICAgIGZvciBmdXQgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgICAgICBpZiBub3QgZnV0LmRvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoVHJ1ZSkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgIiIiUmVzZXQgdGhlIGludGVybmFsIGZsYWcgdG8gZmFsc2UuIFN1YnNlcXVlbnRseSwgY29yb3V0aW5lcyBjYWxsaW5nCisgICAgICAgIHdhaXQoKSB3aWxsIGJsb2NrIHVudGlsIHNldCgpIGlzIGNhbGxlZCB0byBzZXQgdGhlIGludGVybmFsIGZsYWcKKyAgICAgICAgdG8gdHJ1ZSBhZ2Fpbi4iIiIKKyAgICAgICAgc2VsZi5fdmFsdWUgPSBGYWxzZQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICAiIiJCbG9jayB1bnRpbCB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlLgorCisgICAgICAgIElmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUgb24gZW50cnksIHJldHVybiBUcnVlCisgICAgICAgIGltbWVkaWF0ZWx5LiAgT3RoZXJ3aXNlLCBibG9jayB1bnRpbCBhbm90aGVyIGNvcm91dGluZSBjYWxscworICAgICAgICBzZXQoKSB0byBzZXQgdGhlIGZsYWcgdG8gdHJ1ZSwgdGhlbiByZXR1cm4gVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3ZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKworIyBUT0RPOiBXaHkgaXMgdGhpcyBhIExvY2sgc3ViY2xhc3M/ICB0aHJlYWRpbmcuQ29uZGl0aW9uICpoYXMqIGEgbG9jay4KK2NsYXNzIENvbmRpdGlvbihMb2NrKToKKyAgICAiIiJBIENvbmRpdGlvbiBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBjb25kaXRpb24gdmFyaWFibGUgb2JqZWN0cy4gQSBjb25kaXRpb24gdmFyaWFibGUKKyAgICBhbGxvd3Mgb25lIG9yIG1vcmUgY29yb3V0aW5lcyB0byB3YWl0IHVudGlsIHRoZXkgYXJlIG5vdGlmaWVkIGJ5IGFub3RoZXIKKyAgICBjb3JvdXRpbmUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX2NvbmRpdGlvbl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorCisgICAgIyBUT0RPOiBBZGQgX19yZXByX18oKSB3aXRoIGxlbihfY29uZGl0aW9uX3dhaXRlcnMpLgorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICAiIiJXYWl0IHVudGlsIG5vdGlmaWVkLgorCisgICAgICAgIElmIHRoZSBjYWxsaW5nIGNvcm91dGluZSBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcworICAgICAgICBtZXRob2QgaXMgY2FsbGVkLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgcmVsZWFzZXMgdGhlIHVuZGVybHlpbmcgbG9jaywgYW5kIHRoZW4gYmxvY2tzCisgICAgICAgIHVudGlsIGl0IGlzIGF3YWtlbmVkIGJ5IGEgbm90aWZ5KCkgb3Igbm90aWZ5X2FsbCgpIGNhbGwgZm9yCisgICAgICAgIHRoZSBzYW1lIGNvbmRpdGlvbiB2YXJpYWJsZSBpbiBhbm90aGVyIGNvcm91dGluZS4gIE9uY2UKKyAgICAgICAgYXdha2VuZWQsIGl0IHJlLWFjcXVpcmVzIHRoZSBsb2NrIGFuZCByZXR1cm5zIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3Qgd2FpdCBvbiB1bi1hY3F1aXJlZCBsb2NrJykKKworICAgICAgICBrZWVwX2xvY2sgPSBUcnVlCisgICAgICAgIHNlbGYucmVsZWFzZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHNlbGYuX2NvbmRpdGlvbl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25kaXRpb25fd2FpdGVycy5yZW1vdmUoZnV0KQorCisgICAgICAgIGV4Y2VwdCBHZW5lcmF0b3JFeGl0OgorICAgICAgICAgICAga2VlcF9sb2NrID0gRmFsc2UgICMgUHJldmVudCB5aWVsZCBpbiBmaW5hbGx5IGNsYXVzZS4KKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBrZWVwX2xvY2s6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiB3YWl0X2ZvcihzZWxmLCBwcmVkaWNhdGUpOgorICAgICAgICAiIiJXYWl0IHVudGlsIGEgcHJlZGljYXRlIGJlY29tZXMgdHJ1ZS4KKworICAgICAgICBUaGUgcHJlZGljYXRlIHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIHJlc3VsdCB3aWxsIGJlCisgICAgICAgIGludGVycHJldGVkIGFzIGEgYm9vbGVhbiB2YWx1ZS4gIFRoZSBmaW5hbCBwcmVkaWNhdGUgdmFsdWUgaXMKKyAgICAgICAgdGhlIHJldHVybiB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IHByZWRpY2F0ZSgpCisgICAgICAgIHdoaWxlIG5vdCByZXN1bHQ6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYud2FpdCgpCisgICAgICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUoKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgbm90aWZ5KHNlbGYsIG49MSk6CisgICAgICAgICIiIkJ5IGRlZmF1bHQsIHdha2UgdXAgb25lIGNvcm91dGluZSB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLCBpZiBhbnkuCisgICAgICAgIElmIHRoZSBjYWxsaW5nIGNvcm91dGluZSBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcyBtZXRob2QKKyAgICAgICAgaXMgY2FsbGVkLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhpcyBtZXRob2Qgd2FrZXMgdXAgYXQgbW9zdCBuIG9mIHRoZSBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIHRoZQorICAgICAgICBjb25kaXRpb24gdmFyaWFibGU7IGl0IGlzIGEgbm8tb3AgaWYgbm8gY29yb3V0aW5lcyBhcmUgd2FpdGluZy4KKworICAgICAgICBOb3RlOiBhbiBhd2FrZW5lZCBjb3JvdXRpbmUgZG9lcyBub3QgYWN0dWFsbHkgcmV0dXJuIGZyb20gaXRzCisgICAgICAgIHdhaXQoKSBjYWxsIHVudGlsIGl0IGNhbiByZWFjcXVpcmUgdGhlIGxvY2suIFNpbmNlIG5vdGlmeSgpIGRvZXMKKyAgICAgICAgbm90IHJlbGVhc2UgdGhlIGxvY2ssIGl0cyBjYWxsZXIgc2hvdWxkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2xvY2tlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IG5vdGlmeSBvbiB1bi1hY3F1aXJlZCBsb2NrJykKKworICAgICAgICBpZHggPSAwCisgICAgICAgIGZvciBmdXQgaW4gc2VsZi5fY29uZGl0aW9uX3dhaXRlcnM6CisgICAgICAgICAgICBpZiBpZHggPj0gbjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3QgZnV0LmRvbmUoKToKKyAgICAgICAgICAgICAgICBpZHggKz0gMQorICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KEZhbHNlKQorCisgICAgZGVmIG5vdGlmeV9hbGwoc2VsZik6CisgICAgICAgICIiIldha2UgdXAgYWxsIHRocmVhZHMgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gVGhpcyBtZXRob2QgYWN0cworICAgICAgICBsaWtlIG5vdGlmeSgpLCBidXQgd2FrZXMgdXAgYWxsIHdhaXRpbmcgdGhyZWFkcyBpbnN0ZWFkIG9mIG9uZS4gSWYgdGhlCisgICAgICAgIGNhbGxpbmcgdGhyZWFkIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsCisgICAgICAgIGEgUnVudGltZUVycm9yIGlzIHJhaXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubm90aWZ5KGxlbihzZWxmLl9jb25kaXRpb25fd2FpdGVycykpCisKKworY2xhc3MgU2VtYXBob3JlOgorICAgICIiIkEgU2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgorCisgICAgQSBzZW1hcGhvcmUgbWFuYWdlcyBhbiBpbnRlcm5hbCBjb3VudGVyIHdoaWNoIGlzIGRlY3JlbWVudGVkIGJ5IGVhY2gKKyAgICBhY3F1aXJlKCkgY2FsbCBhbmQgaW5jcmVtZW50ZWQgYnkgZWFjaCByZWxlYXNlKCkgY2FsbC4gVGhlIGNvdW50ZXIKKyAgICBjYW4gbmV2ZXIgZ28gYmVsb3cgemVybzsgd2hlbiBhY3F1aXJlKCkgZmluZHMgdGhhdCBpdCBpcyB6ZXJvLCBpdCBibG9ja3MsCisgICAgd2FpdGluZyB1bnRpbCBzb21lIG90aGVyIHRocmVhZCBjYWxscyByZWxlYXNlKCkuCisKKyAgICBTZW1hcGhvcmVzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLgorCisgICAgVGhlIGZpcnN0IG9wdGlvbmFsIGFyZ3VtZW50IGdpdmVzIHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgaW50ZXJuYWwKKyAgICBjb3VudGVyOyBpdCBkZWZhdWx0cyB0byAxLiBJZiB0aGUgdmFsdWUgZ2l2ZW4gaXMgbGVzcyB0aGFuIDAsCisgICAgVmFsdWVFcnJvciBpcyByYWlzZWQuCisKKyAgICBUaGUgc2Vjb25kIG9wdGlvbmFsIGFyZ3VtZW50IGRldGVybWlucyBjYW4gc2Vtb3Bob3JlIGJlIHJlbGVhc2VkIG1vcmUgdGhhbgorICAgIGluaXRpYWwgaW50ZXJuYWwgY291bnRlciB2YWx1ZTsgaXQgZGVmYXVsdHMgdG8gRmFsc2UuIElmIHRoZSB2YWx1ZSBnaXZlbgorICAgIGlzIFRydWUgYW5kIG51bWJlciBvZiByZWxlYXNlKCkgaXMgbW9yZSB0aGFuIG51bWJlciBvZiBzdWNjZXNzZnVsbAorICAgIGFjcXVpcmUoKSBjYWxscyBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCBib3VuZD1GYWxzZSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgdmFsdWUgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU2VtYXBob3JlIGluaXRpYWwgdmFsdWUgbXVzdCBiZSA+IDAiKQorICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuX2JvdW5kID0gYm91bmQKKyAgICAgICAgc2VsZi5fYm91bmRfdmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl9sb2NrZWQgPSBGYWxzZQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAjIFRPRE86IGFkZCB3YWl0ZXJzOk4gaWYgPiAwLgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgcmV0dXJuICc8e30gW3t9XT4nLmZvcm1hdCgKKyAgICAgICAgICAgIHJlc1sxOi0xXSwKKyAgICAgICAgICAgICdsb2NrZWQnIGlmIHNlbGYuX2xvY2tlZCBlbHNlICd1bmxvY2tlZCx2YWx1ZTp7fScuZm9ybWF0KAorICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlKSkKKworICAgIGRlZiBsb2NrZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiBzZW1hcGhvcmUgY2FuIG5vdCBiZSBhY3F1aXJlZCBpbW1lZGlhdGVseS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2tlZAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBhY3F1aXJlKHNlbGYpOgorICAgICAgICAiIiJBY3F1aXJlIGEgc2VtYXBob3JlLgorCisgICAgICAgIElmIHRoZSBpbnRlcm5hbCBjb3VudGVyIGlzIGxhcmdlciB0aGFuIHplcm8gb24gZW50cnksCisgICAgICAgIGRlY3JlbWVudCBpdCBieSBvbmUgYW5kIHJldHVybiBUcnVlIGltbWVkaWF0ZWx5LiAgSWYgaXQgaXMKKyAgICAgICAgemVybyBvbiBlbnRyeSwgYmxvY2ssIHdhaXRpbmcgdW50aWwgc29tZSBvdGhlciBjb3JvdXRpbmUgaGFzCisgICAgICAgIGNhbGxlZCByZWxlYXNlKCkgdG8gbWFrZSBpdCBsYXJnZXIgdGhhbiAwLCBhbmQgdGhlbiByZXR1cm4KKyAgICAgICAgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl93YWl0ZXJzIGFuZCBzZWxmLl92YWx1ZSA+IDA6CisgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLl92YWx1ZSA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgIiIiUmVsZWFzZSBhIHNlbWFwaG9yZSwgaW5jcmVtZW50aW5nIHRoZSBpbnRlcm5hbCBjb3VudGVyIGJ5IG9uZS4KKyAgICAgICAgV2hlbiBpdCB3YXMgemVybyBvbiBlbnRyeSBhbmQgYW5vdGhlciBjb3JvdXRpbmUgaXMgd2FpdGluZyBmb3IgaXQgdG8KKyAgICAgICAgYmVjb21lIGxhcmdlciB0aGFuIHplcm8gYWdhaW4sIHdha2UgdXAgdGhhdCBjb3JvdXRpbmUuCisKKyAgICAgICAgSWYgU2VtYXBob3JlIGlzIGNyZWF0ZSB3aXRoICJib3VuZCIgcGFyYW10ZXIgZXF1YWxzIHRydWUsIHRoZW4KKyAgICAgICAgcmVsZWFzZSgpIG1ldGhvZCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0cyBjdXJyZW50IHZhbHVlIGRvZXNuJ3QgZXhjZWVkCisgICAgICAgIGl0cyBpbml0aWFsIHZhbHVlLiBJZiBpdCBkb2VzLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2JvdW5kIGFuZCBzZWxmLl92YWx1ZSA+PSBzZWxmLl9ib3VuZF92YWx1ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlbWFwaG9yZSByZWxlYXNlZCB0b28gbWFueSB0aW1lcycpCisKKyAgICAgICAgc2VsZi5fdmFsdWUgKz0gMQorICAgICAgICBzZWxmLl9sb2NrZWQgPSBGYWxzZQorCisgICAgICAgIGZvciB3YWl0ZXIgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICMgVE9ETzogVGhpcyBpcyBxdWVzdGlvbmFibGUuICBIb3cgZG8gd2Uga25vdyB0aGUgdXNlciBhY3R1YWxseQorICAgICAgICAjIHdyb3RlICJ3aXRoICh5aWVsZCBmcm9tIHNlbWEpIiBpbnN0ZWFkIG9mICJ3aXRoIHNlbWEiPworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5yZWxlYXNlKCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICByZXR1cm4gc2VsZgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vbG9nLnB5IGIvTGliL2FzeW5jaW8vbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTcwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9sb2cucHkKQEAgLTAsMCArMSw3IEBACisiIiJMb2dnaW5nIGNvbmZpZ3VyYXRpb24uIiIiCisKK2ltcG9ydCBsb2dnaW5nCisKKworIyBOYW1lIHRoZSBsb2dnZXIgYWZ0ZXIgdGhlIHBhY2thZ2UuCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX3BhY2thZ2VfXykKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTIyNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vcHJvYWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMzYwIEBACisiIiJFdmVudCBsb29wIHVzaW5nIGEgcHJvYWN0b3IgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KKworQSBwcm9hY3RvciBpcyBhICJub3RpZnktb24tY29tcGxldGlvbiIgbXVsdGlwbGV4ZXIuICBDdXJyZW50bHkgYQorcHJvYWN0b3IgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBXaW5kb3dzIHdpdGggSU9DUC4KKyIiIgorCitpbXBvcnQgc29ja2V0CisKK2Zyb20gLiBpbXBvcnQgYmFzZV9ldmVudHMKK2Zyb20gLiBpbXBvcnQgY29uc3RhbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitjbGFzcyBfUHJvYWN0b3JCYXNlUGlwZVRyYW5zcG9ydCh0cmFuc3BvcnRzLkJhc2VUcmFuc3BvcnQpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIHBpcGUgYW5kIHNvY2tldCB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9zZXRfZXh0cmEoc29jaykKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fc29jayA9IHNvY2sKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBjYWxsZWQuCisgICAgICAgIHNlbGYuX2VvZl93cml0dGVuID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyLmF0dGFjaChzZWxmKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIF9zZXRfZXh0cmEoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYuX2V4dHJhWydwaXBlJ10gPSBzb2NrCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlciBhbmQgc2VsZi5fd3JpdGVfZnV0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9mdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dC5jYW5jZWwoKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMpOgorICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYXRhbCBlcnJvciBmb3IgJXMnLCBzZWxmKQorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisKKyAgICBkZWYgX2ZvcmNlX2Nsb3NlKHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0OgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0LmNhbmNlbCgpCisgICAgICAgIGlmIHNlbGYuX3JlYWRfZnV0OgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIFhYWCBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgb3ZlcmxhcHBlZCByZWFkIG9uIHRoZSBvdGhlcgorICAgICAgICAgICAgIyBlbmQgdGhlbiBpdCBtYXkgZmFpbCB3aXRoIEVSUk9SX05FVE5BTUVfREVMRVRFRCBpZiB3ZQorICAgICAgICAgICAgIyBqdXN0IGNsb3NlIG91ciBlbmQuICBGaXJzdCBjYWxsaW5nIHNodXRkb3duKCkgc2VlbXMgdG8KKyAgICAgICAgICAgICMgY3VyZSBpdCwgYnV0IG1heWJlIHVzaW5nIERpc2Nvbm5lY3RFeCgpIHdvdWxkIGJlIGJldHRlci4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fc29jaywgJ3NodXRkb3duJyk6CisgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLl9zZXJ2ZXIKKyAgICAgICAgICAgIGlmIHNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuZGV0YWNoKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyID0gTm9uZQorCisKK2NsYXNzIF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0KF9Qcm9hY3RvckJhc2VQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5SZWFkVHJhbnNwb3J0KToKKyAgICAiIiJUcmFuc3BvcnQgZm9yIHJlYWQgcGlwZXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcCwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEsIHNlcnZlcikKKyAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2xvb3BfcmVhZGluZykKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2Nsb3NpbmcsICdDYW5ub3QgcGF1c2VfcmVhZGluZygpIHdoZW4gY2xvc2luZycKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXVzZWQsICdBbHJlYWR5IHBhdXNlZCcKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5fcGF1c2VkLCAnTm90IHBhdXNlZCcKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9sb29wX3JlYWRpbmcsIHNlbGYuX3JlYWRfZnV0KQorCisgICAgZGVmIF9sb29wX3JlYWRpbmcoc2VsZiwgZnV0PU5vbmUpOgorICAgICAgICBpZiBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGF0YSA9IE5vbmUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBmdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3JlYWRfZnV0IGlzIGZ1dCBvciAoc2VsZi5fcmVhZF9mdXQgaXMgTm9uZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jbG9zaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICAgICAgICAgIGRhdGEgPSBmdXQucmVzdWx0KCkgICMgZGVsaXZlciBkYXRhIGxhdGVyIGluICJmaW5hbGx5IiBjbGF1c2UKKworICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICAjIHNpbmNlIGNsb3NlKCkgaGFzIGJlZW4gY2FsbGVkIHdlIGlnbm9yZSBhbnkgcmVhZCBkYXRhCisgICAgICAgICAgICAgICAgZGF0YSA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgaWYgZGF0YSA9PSBiJyc6CisgICAgICAgICAgICAgICAgIyB3ZSBnb3QgZW5kLW9mLWZpbGUgc28gbm8gbmVlZCB0byByZXNjaGVkdWxlIGEgbmV3IHJlYWQKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgIyByZXNjaGVkdWxlIGEgbmV3IHJlYWQKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gc2VsZi5fbG9vcC5fcHJvYWN0b3IucmVjdihzZWxmLl9zb2NrLCA0MDk2KQorICAgICAgICBleGNlcHQgQ29ubmVjdGlvbkFib3J0ZWRFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uUmVzZXRFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF9yZWFkaW5nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEpCisgICAgICAgICAgICBlbGlmIGRhdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAga2VlcF9vcGVuID0gc2VsZi5fcHJvdG9jb2wuZW9mX3JlY2VpdmVkKCkKKyAgICAgICAgICAgICAgICBpZiBub3Qga2VlcF9vcGVuOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworCitjbGFzcyBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQoX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5Xcml0ZVRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciB3cml0ZSBwaXBlcy4iIiIKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpLCByZXByKGRhdGEpCisgICAgICAgIGlmIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignd3JpdGVfZW9mKCkgYWxyZWFkeSBjYWxsZWQnKQorCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcF93cml0aW5nKCkKKworICAgIGRlZiBfbG9vcF93cml0aW5nKHNlbGYsIGY9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzc2VydCBmIGlzIHNlbGYuX3dyaXRlX2Z1dAorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gTm9uZQorICAgICAgICAgICAgaWYgZjoKKyAgICAgICAgICAgICAgICBmLnJlc3VsdCgpCisgICAgICAgICAgICBkYXRhID0gYicnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gc2VsZi5fbG9vcC5fcHJvYWN0b3Iuc2VuZChzZWxmLl9zb2NrLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX2xvb3Bfd3JpdGluZykKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25SZXNldEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKGV4YykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoTm9uZSkKKworCitjbGFzcyBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKyAgICAiIiJUcmFuc3BvcnQgZm9yIGR1cGxleCBwaXBlcy4iIiIKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoX1Byb2FjdG9yUmVhZFBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKyAgICAiIiJUcmFuc3BvcnQgZm9yIGNvbm5lY3RlZCBzb2NrZXRzLiIiIgorCisgICAgZGVmIF9zZXRfZXh0cmEoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrZXQnXSA9IHNvY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3NvY2tuYW1lJ10gPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgJ3BlZXJuYW1lJyBub3QgaW4gc2VsZi5fZXh0cmE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3BlZXJuYW1lJ10gPSBzb2NrLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nIG9yIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2VvZl93cml0dGVuID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKworY2xhc3MgQmFzZVByb2FjdG9yRXZlbnRMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2FjdG9yKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgcHJvYWN0b3I6ICVzJywgcHJvYWN0b3IuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBzZWxmLl9wcm9hY3RvciA9IHByb2FjdG9yCisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gcHJvYWN0b3IgICAjIGNvbnZlbmllbnQgYWxpYXMKKyAgICAgICAgcHJvYWN0b3Iuc2V0X2xvb3Aoc2VsZikKKyAgICAgICAgc2VsZi5fbWFrZV9zZWxmX3BpcGUoKQorCisgICAgZGVmIF9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICBkZWYgX21ha2VfZHVwbGV4X3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgY2hlY2tfZm9yX2hhbmd1cD1UcnVlKToKKyAgICAgICAgaWYgY2hlY2tfZm9yX2hhbmd1cDoKKyAgICAgICAgICAgICMgV2Ugd2FudCBjb25uZWN0aW9uX2xvc3QoKSB0byBiZSBjYWxsZWQgd2hlbiBvdGhlciBlbmQgY2xvc2VzCisgICAgICAgICAgICByZXR1cm4gX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaywgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIG90aGVyIGVuZCBjbG9zZXMgd2UgbWF5IG5vdCBub3RpY2UgZm9yIGEgbG9uZyB0aW1lCisgICAgICAgICAgICByZXR1cm4gX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9hY3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9hY3Rvci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9hY3RvciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gTm9uZQorICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgc29ja19yZWN2KHNlbGYsIHNvY2ssIG4pOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IucmVjdihzb2NrLCBuKQorCisgICAgZGVmIHNvY2tfc2VuZGFsbChzZWxmLCBzb2NrLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLnNlbmQoc29jaywgZGF0YSkKKworICAgIGRlZiBzb2NrX2Nvbm5lY3Qoc2VsZiwgc29jaywgYWRkcmVzcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5jb25uZWN0KHNvY2ssIGFkZHJlc3MpCisKKyAgICBkZWYgc29ja19hY2NlcHQoc2VsZiwgc29jayk6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5hY2NlcHQoc29jaykKKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9jbG9zZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fc3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fY3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyAtPSAxCisKKyAgICBkZWYgX21ha2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICAjIEEgc2VsZi1zb2NrZXQsIHJlYWxseS4gOi0pCisgICAgICAgIHNlbGYuX3Nzb2NrLCBzZWxmLl9jc29jayA9IHNlbGYuX3NvY2tldHBhaXIoKQorICAgICAgICBzZWxmLl9zc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5fY3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyArPSAxCisgICAgICAgIHNlbGYuY2FsbF9zb29uKHNlbGYuX2xvb3Bfc2VsZl9yZWFkaW5nKQorCisgICAgZGVmIF9sb29wX3NlbGZfcmVhZGluZyhzZWxmLCBmPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGYucmVzdWx0KCkgICMgbWF5IHJhaXNlCisgICAgICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IucmVjdihzZWxmLl9zc29jaywgNDA5NikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgc2VsZi5fY3NvY2suc2VuZChiJ3gnKQorCisgICAgZGVmIF9zdGFydF9zZXJ2aW5nKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbD1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIGFzc2VydCBub3Qgc3NsLCAnSW9jcEV2ZW50TG9vcCBpcyBpbmNvbXBhdGlibGUgd2l0aCBTU0wuJworCisgICAgICAgIGRlZiBsb29wKGY9Tm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29ubiwgYWRkciA9IGYucmVzdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgICAgICAgICAgY29ubiwgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT17J3BlZXJuYW1lJzogYWRkcn0sIHNlcnZlcj1zZXJ2ZXIpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLmFjY2VwdChzb2NrKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgc29jay5maWxlbm8oKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignQWNjZXB0IGZhaWxlZCcpCisgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2sobG9vcCkKKworICAgICAgICBzZWxmLmNhbGxfc29vbihsb29wKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgcGFzcyAgICAjIFhYWCBoYXJkIHdvcmsgY3VycmVudGx5IGRvbmUgaW4gcG9sbAorCisgICAgZGVmIF9zdG9wX3NlcnZpbmcoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYuX3Byb2FjdG9yLl9zdG9wX3NlcnZpbmcoc29jaykKKyAgICAgICAgc29jay5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9wcm90b2NvbHMucHkgYi9MaWIvYXN5bmNpby9wcm90b2NvbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhODY4NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Byb3RvY29scy5weQpAQCAtMCwwICsxLDEyNiBAQAorIiIiQWJzdHJhY3QgUHJvdG9jb2wgY2xhc3MuIiIiCisKK19fYWxsX18gPSBbJ1Byb3RvY29sJywgJ0RhdGFncmFtUHJvdG9jb2wnXQorCisKK2NsYXNzIEJhc2VQcm90b2NvbDoKKyAgICAiIiJBQkMgZm9yIGJhc2UgcHJvdG9jb2wgY2xhc3MuCisKKyAgICBVc3VhbGx5IHVzZXIgaW1wbGVtZW50cyBwcm90b2NvbHMgdGhhdCBkZXJpdmVkIGZyb20gQmFzZVByb3RvY29sCisgICAgbGlrZSBQcm90b2NvbCBvciBQcm9jZXNzUHJvdG9jb2wuCisKKyAgICBUaGUgb25seSBjYXNlIHdoZW4gQmFzZVByb3RvY29sIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseSBpcworICAgIHdyaXRlLW9ubHkgdHJhbnNwb3J0IGxpa2Ugd3JpdGUgcGlwZQorICAgICIiIgorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gaXMgbWFkZS4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgdGhlIHRyYW5zcG9ydCByZXByZXNlbnRpbmcgdGhlIHBpcGUgY29ubmVjdGlvbi4KKyAgICAgICAgVG8gcmVjZWl2ZSBkYXRhLCB3YWl0IGZvciBkYXRhX3JlY2VpdmVkKCkgY2FsbHMuCisgICAgICAgIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLCBjb25uZWN0aW9uX2xvc3QoKSBpcyBjYWxsZWQuCisgICAgICAgICIiIgorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0IG9yIGNsb3NlZC4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYW4gZXhjZXB0aW9uIG9iamVjdCBvciBOb25lICh0aGUgbGF0dGVyCisgICAgICAgIG1lYW5pbmcgYSByZWd1bGFyIEVPRiBpcyByZWNlaXZlZCBvciB0aGUgY29ubmVjdGlvbiB3YXMKKyAgICAgICAgYWJvcnRlZCBvciBjbG9zZWQpLgorICAgICAgICAiIiIKKworICAgIGRlZiBwYXVzZV93cml0aW5nKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGdvZXMgb3ZlciB0aGUgaGlnaC13YXRlciBtYXJrLgorCisgICAgICAgIFBhdXNlIGFuZCByZXN1bWUgY2FsbHMgYXJlIHBhaXJlZCAtLSBwYXVzZV93cml0aW5nKCkgaXMgY2FsbGVkCisgICAgICAgIG9uY2Ugd2hlbiB0aGUgYnVmZmVyIGdvZXMgc3RyaWN0bHkgb3ZlciB0aGUgaGlnaC13YXRlciBtYXJrCisgICAgICAgIChldmVuIGlmIHN1YnNlcXVlbnQgd3JpdGVzIGluY3JlYXNlcyB0aGUgYnVmZmVyIHNpemUgZXZlbgorICAgICAgICBtb3JlKSwgYW5kIGV2ZW50dWFsbHkgcmVzdW1lX3dyaXRpbmcoKSBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZQorICAgICAgICBidWZmZXIgc2l6ZSByZWFjaGVzIHRoZSBsb3ctd2F0ZXIgbWFyay4KKworICAgICAgICBOb3RlIHRoYXQgaWYgdGhlIGJ1ZmZlciBzaXplIGVxdWFscyB0aGUgaGlnaC13YXRlciBtYXJrLAorICAgICAgICBwYXVzZV93cml0aW5nKCkgaXMgbm90IGNhbGxlZCAtLSBpdCBtdXN0IGdvIHN0cmljdGx5IG92ZXIuCisgICAgICAgIENvbnZlcnNlbHksIHJlc3VtZV93cml0aW5nKCkgaXMgY2FsbGVkIHdoZW4gdGhlIGJ1ZmZlciBzaXplIGlzCisgICAgICAgIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhlIGxvdy13YXRlciBtYXJrLiAgVGhlc2UgZW5kIGNvbmRpdGlvbnMKKyAgICAgICAgYXJlIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGluZ3MgZ28gYXMgZXhwZWN0ZWQgd2hlbiBlaXRoZXIKKyAgICAgICAgbWFyayBpcyB6ZXJvLgorCisgICAgICAgIE5PVEU6IFRoaXMgaXMgdGhlIG9ubHkgUHJvdG9jb2wgY2FsbGJhY2sgdGhhdCBpcyBub3QgY2FsbGVkCisgICAgICAgIHRocm91Z2ggRXZlbnRMb29wLmNhbGxfc29vbigpIC0tIGlmIGl0IHdlcmUsIGl0IHdvdWxkIGhhdmUgbm8KKyAgICAgICAgZWZmZWN0IHdoZW4gaXQncyBtb3N0IG5lZWRlZCAod2hlbiB0aGUgYXBwIGtlZXBzIHdyaXRpbmcKKyAgICAgICAgd2l0aG91dCB5aWVsZGluZyB1bnRpbCBwYXVzZV93cml0aW5nKCkgaXMgY2FsbGVkKS4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcmVzdW1lX3dyaXRpbmcoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSB0cmFuc3BvcnQncyBidWZmZXIgZHJhaW5zIGJlbG93IHRoZSBsb3ctd2F0ZXIgbWFyay4KKworICAgICAgICBTZWUgcGF1c2Vfd3JpdGluZygpIGZvciBkZXRhaWxzLgorICAgICAgICAiIiIKKworCitjbGFzcyBQcm90b2NvbChCYXNlUHJvdG9jb2wpOgorICAgICIiIkFCQyByZXByZXNlbnRpbmcgYSBwcm90b2NvbC4KKworICAgIFRoZSB1c2VyIHNob3VsZCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuICBUaGV5IGNhbiBpbmhlcml0IGZyb20KKyAgICB0aGlzIGNsYXNzIGJ1dCBkb24ndCBuZWVkIHRvLiAgVGhlIGltcGxlbWVudGF0aW9ucyBoZXJlIGRvCisgICAgbm90aGluZyAodGhleSBkb24ndCByYWlzZSBleGNlcHRpb25zKS4KKworICAgIFdoZW4gdGhlIHVzZXIgd2FudHMgdG8gcmVxdWVzdHMgYSB0cmFuc3BvcnQsIHRoZXkgcGFzcyBhIHByb3RvY29sCisgICAgZmFjdG9yeSB0byBhIHV0aWxpdHkgZnVuY3Rpb24gKGUuZy4sIEV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbigpKS4KKworICAgIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbWFkZSBzdWNjZXNzZnVsbHksIGNvbm5lY3Rpb25fbWFkZSgpIGlzCisgICAgY2FsbGVkIHdpdGggYSBzdWl0YWJsZSB0cmFuc3BvcnQgb2JqZWN0LiAgVGhlbiBkYXRhX3JlY2VpdmVkKCkKKyAgICB3aWxsIGJlIGNhbGxlZCAwIG9yIG1vcmUgdGltZXMgd2l0aCBkYXRhIChieXRlcykgcmVjZWl2ZWQgZnJvbSB0aGUKKyAgICB0cmFuc3BvcnQ7IGZpbmFsbHksIGNvbm5lY3Rpb25fbG9zdCgpIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZQorICAgIHdpdGggZWl0aGVyIGFuIGV4Y2VwdGlvbiBvYmplY3Qgb3IgTm9uZSBhcyBhbiBhcmd1bWVudC4KKworICAgIFN0YXRlIG1hY2hpbmUgb2YgY2FsbHM6CisKKyAgICAgIHN0YXJ0IC0+IENNIFstPiBEUipdIFstPiBFUj9dIC0+IENMIC0+IGVuZAorICAgICIiIgorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHNvbWUgZGF0YSBpcyByZWNlaXZlZC4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYSBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIG90aGVyIGVuZCBjYWxscyB3cml0ZV9lb2YoKSBvciBlcXVpdmFsZW50LgorCisgICAgICAgIElmIHRoaXMgcmV0dXJucyBhIGZhbHNlIHZhbHVlIChpbmNsdWRpbmcgTm9uZSksIHRoZSB0cmFuc3BvcnQKKyAgICAgICAgd2lsbCBjbG9zZSBpdHNlbGYuICBJZiBpdCByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgY2xvc2luZyB0aGUKKyAgICAgICAgdHJhbnNwb3J0IGlzIHVwIHRvIHRoZSBwcm90b2NvbC4KKyAgICAgICAgIiIiCisKKworY2xhc3MgRGF0YWdyYW1Qcm90b2NvbChCYXNlUHJvdG9jb2wpOgorICAgICIiIkFCQyByZXByZXNlbnRpbmcgYSBkYXRhZ3JhbSBwcm90b2NvbC4iIiIKKworICAgIGRlZiBkYXRhZ3JhbV9yZWNlaXZlZChzZWxmLCBkYXRhLCBhZGRyKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gc29tZSBkYXRhZ3JhbSBpcyByZWNlaXZlZC4iIiIKKworICAgIGRlZiBjb25uZWN0aW9uX3JlZnVzZWQoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiQ29ubmVjdGlvbiBpcyByZWZ1c2VkLiIiIgorCisKK2NsYXNzIFN1YnByb2Nlc3NQcm90b2NvbChCYXNlUHJvdG9jb2wpOgorICAgICIiIkFCQyByZXByZXNlbnRpbmcgYSBwcm90b2NvbCBmb3Igc3VicHJvY2VzcyBjYWxscy4iIiIKKworICAgIGRlZiBwaXBlX2RhdGFfcmVjZWl2ZWQoc2VsZiwgZmQsIGRhdGEpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzdWJwcm9jZXNzIHdyaXRlIGEgZGF0YSBpbnRvIHN0ZG91dC9zdGRlcnIgcGlwZXMuCisKKyAgICAgICAgZmQgaXMgaW50IGZpbGUgZGFzY3JpcHRvci4KKyAgICAgICAgZGF0YSBpcyBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorCisgICAgZGVmIHBpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGNoaWxkIHByb2Nlc3MgaXMKKyAgICAgICAgY2xvc2VkLgorCisgICAgICAgIGZkIGlzIHRoZSBpbnQgZmlsZSBkZXNjcmlwdG9yIHRoYXQgd2FzIGNsb3NlZC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcHJvY2Vzc19leGl0ZWQoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHN1YnByb2Nlc3MgaGFzIGV4aXRlZC4KKyAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9xdWV1ZXMucHkgYi9MaWIvYXN5bmNpby9xdWV1ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM2ZGUxYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3F1ZXVlcy5weQpAQCAtMCwwICsxLDI4NCBAQAorIiIiUXVldWVzIiIiCisKK19fYWxsX18gPSBbJ1F1ZXVlJywgJ1ByaW9yaXR5UXVldWUnLCAnTGlmb1F1ZXVlJywgJ0pvaW5hYmxlUXVldWUnLAorICAgICAgICAgICAnRnVsbCcsICdFbXB0eSddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGhlYXBxCitpbXBvcnQgcXVldWUKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBsb2NrcworZnJvbSAudGFza3MgaW1wb3J0IGNvcm91dGluZQorCisKKyMgUmUtZXhwb3J0IHF1ZXVlLkZ1bGwgYW5kIC5FbXB0eSBleGNlcHRpb25zLgorRnVsbCA9IHF1ZXVlLkZ1bGwKK0VtcHR5ID0gcXVldWUuRW1wdHkKKworCitjbGFzcyBRdWV1ZToKKyAgICAiIiJBIHF1ZXVlLCB1c2VmdWwgZm9yIGNvb3JkaW5hdGluZyBwcm9kdWNlciBhbmQgY29uc3VtZXIgY29yb3V0aW5lcy4KKworICAgIElmIG1heHNpemUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIHRoZSBxdWV1ZSBzaXplIGlzIGluZmluaXRlLiBJZiBpdAorICAgIGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAsIHRoZW4gInlpZWxkIGZyb20gcHV0KCkiIHdpbGwgYmxvY2sgd2hlbiB0aGUKKyAgICBxdWV1ZSByZWFjaGVzIG1heHNpemUsIHVudGlsIGFuIGl0ZW0gaXMgcmVtb3ZlZCBieSBnZXQoKS4KKworICAgIFVubGlrZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBRdWV1ZSwgeW91IGNhbiByZWxpYWJseSBrbm93IHRoaXMgUXVldWUncyBzaXplCisgICAgd2l0aCBxc2l6ZSgpLCBzaW5jZSB5b3VyIHNpbmdsZS10aHJlYWRlZCBUdWxpcCBhcHBsaWNhdGlvbiB3b24ndCBiZQorICAgIGludGVycnVwdGVkIGJldHdlZW4gY2FsbGluZyBxc2l6ZSgpIGFuZCBkb2luZyBhbiBvcGVyYXRpb24gb24gdGhlIFF1ZXVlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9tYXhzaXplID0gbWF4c2l6ZQorCisgICAgICAgICMgRnV0dXJlcy4KKyAgICAgICAgc2VsZi5fZ2V0dGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgIyBQYWlycyBvZiAoaXRlbSwgRnV0dXJlKS4KKyAgICAgICAgc2VsZi5fcHV0dGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5faW5pdChtYXhzaXplKQorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIGRlZiBfZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcXVldWUucG9wbGVmdCgpCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5fcXVldWUuYXBwZW5kKGl0ZW0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IGF0IHs6I3h9IHt9PicuZm9ybWF0KAorICAgICAgICAgICAgdHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZiksIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IHt9PicuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9mb3JtYXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9ICdtYXhzaXplPXshcn0nLmZvcm1hdChzZWxmLl9tYXhzaXplKQorICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfcXVldWUnLCBOb25lKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIF9xdWV1ZT17IXJ9Jy5mb3JtYXQobGlzdChzZWxmLl9xdWV1ZSkpCisgICAgICAgIGlmIHNlbGYuX2dldHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfZ2V0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fZ2V0dGVycykpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfcHV0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fcHV0dGVycykpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfY29uc3VtZV9kb25lX2dldHRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIHdhaXRlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIGdldCgpIHF1ZXVlIHdobyd2ZSB0aW1lZCBvdXQuCisgICAgICAgIHdoaWxlIHNlbGYuX2dldHRlcnMgYW5kIHNlbGYuX2dldHRlcnNbMF0uZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fZ2V0dGVycy5wb3BsZWZ0KCkKKworICAgIGRlZiBfY29uc3VtZV9kb25lX3B1dHRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIHdhaXRlcnMgYXQgdGhlIGhlYWQgb2YgdGhlIHB1dCgpIHF1ZXVlIHdobyd2ZSB0aW1lZCBvdXQuCisgICAgICAgIHdoaWxlIHNlbGYuX3B1dHRlcnMgYW5kIHNlbGYuX3B1dHRlcnNbMF1bMV0uZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fcHV0dGVycy5wb3BsZWZ0KCkKKworICAgIGRlZiBxc2l6ZShzZWxmKToKKyAgICAgICAgIiIiTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBxdWV1ZS4iIiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9xdWV1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYXhzaXplKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2YgaXRlbXMgYWxsb3dlZCBpbiB0aGUgcXVldWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tYXhzaXplCisKKyAgICBkZWYgZW1wdHkoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX3F1ZXVlCisKKyAgICBkZWYgZnVsbChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlcmUgYXJlIG1heHNpemUgaXRlbXMgaW4gdGhlIHF1ZXVlLgorCisgICAgICAgIE5vdGU6IGlmIHRoZSBRdWV1ZSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBtYXhzaXplPTAgKHRoZSBkZWZhdWx0KSwKKyAgICAgICAgdGhlbiBmdWxsKCkgaXMgbmV2ZXIgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX21heHNpemUgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucXNpemUoKSA9PSBzZWxmLl9tYXhzaXplCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHB1dChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUuCisKKyAgICAgICAgSWYgeW91IHlpZWxkIGZyb20gcHV0KCksIHdhaXQgdW50aWwgYSBmcmVlIHNsb3QgaXMgYXZhaWxhYmxlCisgICAgICAgIGJlZm9yZSBhZGRpbmcgaXRlbS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvbnN1bWVfZG9uZV9nZXR0ZXJzKCkKKyAgICAgICAgaWYgc2VsZi5fZ2V0dGVyczoKKyAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcXVldWUsICgKKyAgICAgICAgICAgICAgICAncXVldWUgbm9uLWVtcHR5LCB3aHkgYXJlIGdldHRlcnMgd2FpdGluZz8nKQorCisgICAgICAgICAgICBnZXR0ZXIgPSBzZWxmLl9nZXR0ZXJzLnBvcGxlZnQoKQorCisgICAgICAgICAgICAjIFVzZSBfcHV0IGFuZCBfZ2V0IGluc3RlYWQgb2YgcGFzc2luZyBpdGVtIHN0cmFpZ2h0IHRvIGdldHRlciwgaW4KKyAgICAgICAgICAgICMgY2FzZSBhIHN1YmNsYXNzIGhhcyBsb2dpYyB0aGF0IG11c3QgcnVuIChlLmcuIEpvaW5hYmxlUXVldWUpLgorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisgICAgICAgICAgICBnZXR0ZXIuc2V0X3Jlc3VsdChzZWxmLl9nZXQoKSkKKworICAgICAgICBlbGlmIHNlbGYuX21heHNpemUgPiAwIGFuZCBzZWxmLl9tYXhzaXplID09IHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKworICAgICAgICAgICAgc2VsZi5fcHV0dGVycy5hcHBlbmQoKGl0ZW0sIHdhaXRlcikpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgIGRlZiBwdXRfbm93YWl0KHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiJQdXQgYW4gaXRlbSBpbnRvIHRoZSBxdWV1ZSB3aXRob3V0IGJsb2NraW5nLgorCisgICAgICAgIElmIG5vIGZyZWUgc2xvdCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIHJhaXNlIEZ1bGwuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb25zdW1lX2RvbmVfZ2V0dGVycygpCisgICAgICAgIGlmIHNlbGYuX2dldHRlcnM6CisgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3F1ZXVlLCAoCisgICAgICAgICAgICAgICAgJ3F1ZXVlIG5vbi1lbXB0eSwgd2h5IGFyZSBnZXR0ZXJzIHdhaXRpbmc/JykKKworICAgICAgICAgICAgZ2V0dGVyID0gc2VsZi5fZ2V0dGVycy5wb3BsZWZ0KCkKKworICAgICAgICAgICAgIyBVc2UgX3B1dCBhbmQgX2dldCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXRlbSBzdHJhaWdodCB0byBnZXR0ZXIsIGluCisgICAgICAgICAgICAjIGNhc2UgYSBzdWJjbGFzcyBoYXMgbG9naWMgdGhhdCBtdXN0IHJ1biAoZS5nLiBKb2luYWJsZVF1ZXVlKS4KKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorICAgICAgICAgICAgZ2V0dGVyLnNldF9yZXN1bHQoc2VsZi5fZ2V0KCkpCisKKyAgICAgICAgZWxpZiBzZWxmLl9tYXhzaXplID4gMCBhbmQgc2VsZi5fbWF4c2l6ZSA9PSBzZWxmLnFzaXplKCk6CisgICAgICAgICAgICByYWlzZSBGdWxsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICAgIElmIHlvdSB5aWVsZCBmcm9tIGdldCgpLCB3YWl0IHVudGlsIGEgaXRlbSBpcyBhdmFpbGFibGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb25zdW1lX2RvbmVfcHV0dGVycygpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5mdWxsKCksICdxdWV1ZSBub3QgZnVsbCwgd2h5IGFyZSBwdXR0ZXJzIHdhaXRpbmc/JworICAgICAgICAgICAgaXRlbSwgcHV0dGVyID0gc2VsZi5fcHV0dGVycy5wb3BsZWZ0KCkKKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorCisgICAgICAgICAgICAjIFdoZW4gYSBnZXR0ZXIgcnVucyBhbmQgZnJlZXMgdXAgYSBzbG90IHNvIHRoaXMgcHV0dGVyIGNhbgorICAgICAgICAgICAgIyBydW4sIHdlIG5lZWQgdG8gZGVmZXIgdGhlIHB1dCBmb3IgYSB0aWNrIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAjIGdldHRlcnMgYW5kIHB1dHRlcnMgYWx0ZXJuYXRlIHBlcmZlY3RseS4gU2VlCisgICAgICAgICAgICAjIENoYW5uZWxUZXN0LnRlc3Rfd2FpdC4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHB1dHRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCkKKworICAgICAgICBlbGlmIHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorCisgICAgICAgICAgICBzZWxmLl9nZXR0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gd2FpdGVyKQorCisgICAgZGVmIGdldF9ub3dhaXQoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZW0gaWYgb25lIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgZWxzZSByYWlzZSBGdWxsLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY29uc3VtZV9kb25lX3B1dHRlcnMoKQorICAgICAgICBpZiBzZWxmLl9wdXR0ZXJzOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuZnVsbCgpLCAncXVldWUgbm90IGZ1bGwsIHdoeSBhcmUgcHV0dGVycyB3YWl0aW5nPycKKyAgICAgICAgICAgIGl0ZW0sIHB1dHRlciA9IHNlbGYuX3B1dHRlcnMucG9wbGVmdCgpCisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKyAgICAgICAgICAgICMgV2FrZSBwdXR0ZXIgb24gbmV4dCB0aWNrLgorICAgICAgICAgICAgcHV0dGVyLnNldF9yZXN1bHQoTm9uZSkKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgpCisKKyAgICAgICAgZWxpZiBzZWxmLnFzaXplKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEVtcHR5CisKKworY2xhc3MgUHJpb3JpdHlRdWV1ZShRdWV1ZSk6CisgICAgIiIiQSBzdWJjbGFzcyBvZiBRdWV1ZTsgcmV0cmlldmVzIGVudHJpZXMgaW4gcHJpb3JpdHkgb3JkZXIgKGxvd2VzdCBmaXJzdCkuCisKKyAgICBFbnRyaWVzIGFyZSB0eXBpY2FsbHkgdHVwbGVzIG9mIHRoZSBmb3JtOiAocHJpb3JpdHkgbnVtYmVyLCBkYXRhKS4KKyAgICAiIiIKKworICAgIGRlZiBfaW5pdChzZWxmLCBtYXhzaXplKToKKyAgICAgICAgc2VsZi5fcXVldWUgPSBbXQorCisgICAgZGVmIF9wdXQoc2VsZiwgaXRlbSwgaGVhcHB1c2g9aGVhcHEuaGVhcHB1c2gpOgorICAgICAgICBoZWFwcHVzaChzZWxmLl9xdWV1ZSwgaXRlbSkKKworICAgIGRlZiBfZ2V0KHNlbGYsIGhlYXBwb3A9aGVhcHEuaGVhcHBvcCk6CisgICAgICAgIHJldHVybiBoZWFwcG9wKHNlbGYuX3F1ZXVlKQorCisKK2NsYXNzIExpZm9RdWV1ZShRdWV1ZSk6CisgICAgIiIiQSBzdWJjbGFzcyBvZiBRdWV1ZSB0aGF0IHJldHJpZXZlcyBtb3N0IHJlY2VudGx5IGFkZGVkIGVudHJpZXMgZmlyc3QuIiIiCisKKyAgICBkZWYgX2luaXQoc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIHNlbGYuX3F1ZXVlID0gW10KKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0pOgorICAgICAgICBzZWxmLl9xdWV1ZS5hcHBlbmQoaXRlbSkKKworICAgIGRlZiBfZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcXVldWUucG9wKCkKKworCitjbGFzcyBKb2luYWJsZVF1ZXVlKFF1ZXVlKToKKyAgICAiIiJBIHN1YmNsYXNzIG9mIFF1ZXVlIHdpdGggdGFza19kb25lKCkgYW5kIGpvaW4oKSBtZXRob2RzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhtYXhzaXplPW1heHNpemUsIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IDAKKyAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkLnNldCgpCisKKyAgICBkZWYgX2Zvcm1hdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gUXVldWUuX2Zvcm1hdChzZWxmKQorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgdGFza3M9e30nLmZvcm1hdChzZWxmLl91bmZpbmlzaGVkX3Rhc2tzKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc3VwZXIoKS5fcHV0KGl0ZW0pCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgKz0gMQorICAgICAgICBzZWxmLl9maW5pc2hlZC5jbGVhcigpCisKKyAgICBkZWYgdGFza19kb25lKHNlbGYpOgorICAgICAgICAiIiJJbmRpY2F0ZSB0aGF0IGEgZm9ybWVybHkgZW5xdWV1ZWQgdGFzayBpcyBjb21wbGV0ZS4KKworICAgICAgICBVc2VkIGJ5IHF1ZXVlIGNvbnN1bWVycy4gRm9yIGVhY2ggZ2V0KCkgdXNlZCB0byBmZXRjaCBhIHRhc2ssCisgICAgICAgIGEgc3Vic2VxdWVudCBjYWxsIHRvIHRhc2tfZG9uZSgpIHRlbGxzIHRoZSBxdWV1ZSB0aGF0IHRoZSBwcm9jZXNzaW5nCisgICAgICAgIG9uIHRoZSB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICAgIElmIGEgam9pbigpIGlzIGN1cnJlbnRseSBibG9ja2luZywgaXQgd2lsbCByZXN1bWUgd2hlbiBhbGwgaXRlbXMgaGF2ZQorICAgICAgICBiZWVuIHByb2Nlc3NlZCAobWVhbmluZyB0aGF0IGEgdGFza19kb25lKCkgY2FsbCB3YXMgcmVjZWl2ZWQgZm9yIGV2ZXJ5CisgICAgICAgIGl0ZW0gdGhhdCBoYWQgYmVlbiBwdXQoKSBpbnRvIHRoZSBxdWV1ZSkuCisKKyAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgY2FsbGVkIG1vcmUgdGltZXMgdGhhbiB0aGVyZSB3ZXJlIGl0ZW1zIHBsYWNlZCBpbgorICAgICAgICB0aGUgcXVldWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzIDw9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0YXNrX2RvbmUoKSBjYWxsZWQgdG9vIG1hbnkgdGltZXMnKQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzIC09IDEKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9PSAwOgorICAgICAgICAgICAgc2VsZi5fZmluaXNoZWQuc2V0KCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgam9pbihzZWxmKToKKyAgICAgICAgIiIiQmxvY2sgdW50aWwgYWxsIGl0ZW1zIGluIHRoZSBxdWV1ZSBoYXZlIGJlZW4gZ290dGVuIGFuZCBwcm9jZXNzZWQuCisKKyAgICAgICAgVGhlIGNvdW50IG9mIHVuZmluaXNoZWQgdGFza3MgZ29lcyB1cCB3aGVuZXZlciBhbiBpdGVtIGlzIGFkZGVkIHRvIHRoZQorICAgICAgICBxdWV1ZS4gVGhlIGNvdW50IGdvZXMgZG93biB3aGVuZXZlciBhIGNvbnN1bWVyIHRocmVhZCBjYWxscyB0YXNrX2RvbmUoKQorICAgICAgICB0byBpbmRpY2F0ZSB0aGF0IHRoZSBpdGVtIHdhcyByZXRyaWV2ZWQgYW5kIGFsbCB3b3JrIG9uIGl0IGlzIGNvbXBsZXRlLgorICAgICAgICBXaGVuIHRoZSBjb3VudCBvZiB1bmZpbmlzaGVkIHRhc2tzIGRyb3BzIHRvIHplcm8sIGpvaW4oKSB1bmJsb2Nrcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPiAwOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5pc2hlZC53YWl0KCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFkMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsODQyIEBACisiIiJFdmVudCBsb29wIHVzaW5nIGEgc2VsZWN0b3IgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KKworQSBzZWxlY3RvciBpcyBhICJub3RpZnktd2hlbi1yZWFkeSIgbXVsdGlwbGV4ZXIuICBGb3IgYSBzdWJjbGFzcyB3aGljaAorYWxzbyBpbmNsdWRlcyBzdXBwb3J0IGZvciBzaWduYWwgaGFuZGxpbmcsIHNlZSB0aGUgdW5peF9ldmVudHMgc3ViLW1vZHVsZS4KKyIiIgorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBlcnJubworaW1wb3J0IHNvY2tldAordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHNzbCA9IE5vbmUKKworZnJvbSAuIGltcG9ydCBiYXNlX2V2ZW50cworZnJvbSAuIGltcG9ydCBjb25zdGFudHMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgc2VsZWN0b3JzCitmcm9tIC4gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworY2xhc3MgQmFzZVNlbGVjdG9yRXZlbnRMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorICAgICIiIlNlbGVjdG9yIGV2ZW50IGxvb3AuCisKKyAgICBTZWUgZXZlbnRzLkV2ZW50TG9vcCBmb3IgQVBJIHNwZWNpZmljYXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VsZWN0b3I9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorCisgICAgICAgIGlmIHNlbGVjdG9yIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IoKQorICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHNlbGVjdG9yOiAlcycsIHNlbGVjdG9yLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBzZWxlY3RvcgorICAgICAgICBzZWxmLl9tYWtlX3NlbGZfcGlwZSgpCisKKyAgICBkZWYgX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICByZXR1cm4gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEsIHNlcnZlcikKKworICAgIGRlZiBfbWFrZV9zc2xfdHJhbnNwb3J0KHNlbGYsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9TZWxlY3RvclNzbFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZSwgc2VydmVyX2hvc3RuYW1lLCBleHRyYSwgc2VydmVyKQorCisgICAgZGVmIF9tYWtlX2RhdGFncmFtX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgYWRkcmVzcywgZXh0cmEpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3NlbGVjdG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY2xvc2Vfc2VsZl9waXBlKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gTm9uZQorICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc2VsZi5fc3NvY2suZmlsZW5vKCkpCisgICAgICAgIHNlbGYuX3Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fc3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fY3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyAtPSAxCisKKyAgICBkZWYgX21ha2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICAjIEEgc2VsZi1zb2NrZXQsIHJlYWxseS4gOi0pCisgICAgICAgIHNlbGYuX3Nzb2NrLCBzZWxmLl9jc29jayA9IHNlbGYuX3NvY2tldHBhaXIoKQorICAgICAgICBzZWxmLl9zc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5fY3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyArPSAxCisgICAgICAgIHNlbGYuYWRkX3JlYWRlcihzZWxmLl9zc29jay5maWxlbm8oKSwgc2VsZi5fcmVhZF9mcm9tX3NlbGYpCisKKyAgICBkZWYgX3JlYWRfZnJvbV9zZWxmKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zc29jay5yZWN2KDEpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fY3NvY2suc2VuZChiJ3gnKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX3N0YXJ0X3NlcnZpbmcoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dD1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuYWRkX3JlYWRlcihzb2NrLmZpbGVubygpLCBzZWxmLl9hY2NlcHRfY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbGNvbnRleHQsIHNlcnZlcikKKworICAgIGRlZiBfYWNjZXB0X2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQ9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQorICAgICAgICAgICAgY29ubi5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IsIENvbm5lY3Rpb25BYm9ydGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcyAgIyBGYWxzZSBhbGFybS4KKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgIyBUaGVyZSdzIG5vd2hlcmUgdG8gc2VuZCB0aGUgZXJyb3IsIHNvIGp1c3QgbG9nIGl0LgorICAgICAgICAgICAgIyBUT0RPOiBTb21lb25lIHdpbGwgd2FudCBhbiBlcnJvciBoYW5kbGVyIGZvciB0aGlzLgorICAgICAgICAgICAgaWYgZXhjLmVycm5vIGluIChlcnJuby5FTUZJTEUsIGVycm5vLkVORklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PQlVGUywgZXJybm8uRU5PTUVNKToKKyAgICAgICAgICAgICAgICAjIFNvbWUgcGxhdGZvcm1zIChlLmcuIExpbnV4IGtlZXAgcmVwb3J0aW5nIHRoZSBGRCBhcworICAgICAgICAgICAgICAgICMgcmVhZHksIHNvIHdlIHJlbW92ZSB0aGUgcmVhZCBoYW5kbGVyIHRlbXBvcmFyaWx5LgorICAgICAgICAgICAgICAgICMgV2UnbGwgdHJ5IGFnYWluIGluIGEgd2hpbGUuCisgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignQWNjZXB0IG91dCBvZiBzeXN0ZW0gcmVzb3VyY2UgKCVzKScsIGV4YykKKyAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc29jay5maWxlbm8oKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxfbGF0ZXIoY29uc3RhbnRzLkFDQ0VQVF9SRVRSWV9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywgc3NsY29udGV4dCwgc2VydmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSAgIyBUaGUgZXZlbnQgbG9vcCB3aWxsIGNhdGNoLCBsb2cgYW5kIGlnbm9yZSBpdC4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNzbGNvbnRleHQ6CisgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9zc2xfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgICAgICBjb25uLCBwcm90b2NvbF9mYWN0b3J5KCksIHNzbGNvbnRleHQsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsIGV4dHJhPXsncGVlcm5hbWUnOiBhZGRyfSwgc2VydmVyPXNlcnZlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgICAgICBjb25uLCBwcm90b2NvbF9mYWN0b3J5KCksIGV4dHJhPXsncGVlcm5hbWUnOiBhZGRyfSwKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyPXNlcnZlcikKKyAgICAgICAgIyBJdCdzIG5vdyB1cCB0byB0aGUgcHJvdG9jb2wgdG8gaGFuZGxlIHRoZSBjb25uZWN0aW9uLgorCisgICAgZGVmIGFkZF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFkZCBhIHJlYWRlciBjYWxsYmFjay4iIiIKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLm1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5yZWdpc3RlcihmZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlLCBOb25lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2ssIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZXZlbnRzLCBrZXkuZGF0YQorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IubW9kaWZ5KGZkLCBtYXNrIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZSwgd3JpdGVyKSkKKyAgICAgICAgICAgIGlmIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZWFkZXIuY2FuY2VsKCkKKworICAgIGRlZiByZW1vdmVfcmVhZGVyKHNlbGYsIGZkKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgcmVhZGVyIGNhbGxiYWNrLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2ssIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZXZlbnRzLCBrZXkuZGF0YQorICAgICAgICAgICAgbWFzayAmPSB+c2VsZWN0b3JzLkVWRU5UX1JFQUQKKyAgICAgICAgICAgIGlmIG5vdCBtYXNrOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLnVucmVnaXN0ZXIoZmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzaywgKE5vbmUsIHdyaXRlcikpCisKKyAgICAgICAgICAgIGlmIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZWFkZXIuY2FuY2VsKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBhZGRfd3JpdGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBZGQgYSB3cml0ZXIgY2FsbGJhY2suLiIiIgorICAgICAgICBoYW5kbGUgPSBldmVudHMubWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX3NlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLnJlZ2lzdGVyKGZkLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgaGFuZGxlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2ssIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZXZlbnRzLCBrZXkuZGF0YQorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IubW9kaWZ5KGZkLCBtYXNrIHwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkZXIsIGhhbmRsZSkpCisgICAgICAgICAgICBpZiB3cml0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgd3JpdGVyLmNhbmNlbCgpCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgICIiIlJlbW92ZSBhIHdyaXRlciBjYWxsYmFjay4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgICMgUmVtb3ZlIGJvdGggd3JpdGVyIGFuZCBjb25uZWN0b3IuCisgICAgICAgICAgICBtYXNrICY9IH5zZWxlY3RvcnMuRVZFTlRfV1JJVEUKKyAgICAgICAgICAgIGlmIG5vdCBtYXNrOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLnVucmVnaXN0ZXIoZmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzaywgKHJlYWRlciwgTm9uZSkpCisKKyAgICAgICAgICAgIGlmIHdyaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3cml0ZXIuY2FuY2VsKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzb2NrX3JlY3Yoc2VsZiwgc29jaywgbik6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHNlbGYuX3NvY2tfcmVjdihmdXQsIEZhbHNlLCBzb2NrLCBuKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfcmVjdihzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2ssIG4pOgorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgaWYgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBjYWxsYmFjayBlYXJseS4gIEl0IHNob3VsZCBiZSByYXJlIHRoYXQgdGhlCisgICAgICAgICAgICAjIHNlbGVjdG9yIHNheXMgdGhlIGZkIGlzIHJlYWR5IGJ1dCB0aGUgY2FsbCBzdGlsbCByZXR1cm5zCisgICAgICAgICAgICAjIEVBR0FJTiwgYW5kIEkgYW0gd2lsbGluZyB0byB0YWtlIGEgaGl0IGluIHRoYXQgY2FzZSBpbgorICAgICAgICAgICAgIyBvcmRlciB0byBzaW1wbGlmeSB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoZmQpCisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc29jay5yZWN2KG4pCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYWRkX3JlYWRlcihmZCwgc2VsZi5fc29ja19yZWN2LCBmdXQsIFRydWUsIHNvY2ssIG4pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoZGF0YSkKKworICAgIGRlZiBzb2NrX3NlbmRhbGwoc2VsZiwgc29jaywgZGF0YSk6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBzZWxmLl9zb2NrX3NlbmRhbGwoZnV0LCBGYWxzZSwgc29jaywgZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19zZW5kYWxsKHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jaywgZGF0YSk6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXIoZmQpCisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4gPSBzb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBuOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgc2VsZi5hZGRfd3JpdGVyKGZkLCBzZWxmLl9zb2NrX3NlbmRhbGwsIGZ1dCwgVHJ1ZSwgc29jaywgZGF0YSkKKworICAgIGRlZiBzb2NrX2Nvbm5lY3Qoc2VsZiwgc29jaywgYWRkcmVzcyk6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICAjIFRoYXQgYWRkcmVzcyBiZXR0ZXIgbm90IHJlcXVpcmUgYSBsb29rdXAhICBXZSdyZSBub3QgY2FsbGluZworICAgICAgICAjIHNlbGYuZ2V0YWRkcmluZm8oKSBmb3IgeW91IGhlcmUuICBCdXQgdmVyaWZ5aW5nIHRoaXMgaXMKKyAgICAgICAgIyBjb21wbGljYXRlZDsgdGhlIHNvY2tldCBtb2R1bGUgZG9lc24ndCBoYXZlIGEgcGF0dGVybiBmb3IKKyAgICAgICAgIyBJUHY2IGFkZHJlc3NlcyAodGhlcmUgYXJlIHRvbyBtYW55IGZvcm1zLCBhcHBhcmVudGx5KS4KKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBzZWxmLl9zb2NrX2Nvbm5lY3QoZnV0LCBGYWxzZSwgc29jaywgYWRkcmVzcykKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9zb2NrX2Nvbm5lY3Qoc2VsZiwgZnV0LCByZWdpc3RlcmVkLCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgIyBUT0RPOiBVc2UgZ2V0YWRkcmluZm8oKSB0byBsb29rIHVwIHRoZSBhZGRyZXNzLCB0byBhdm9pZCB0aGUKKyAgICAgICAgIyB0cmFwIG9mIGhhbmdpbmcgdGhlIGVudGlyZSBldmVudCBsb29wIHdoZW4gdGhlIGFkZHJlc3MKKyAgICAgICAgIyByZXF1aXJlcyBkb2luZyBhIEROUyBsb29rdXAuICAoT1RPSCwgdGhlIGNhbGxlciBzaG91bGQKKyAgICAgICAgIyBhbHJlYWR5IGhhdmUgZG9uZSB0aGlzLCBzbyBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkCisgICAgICAgICMgZWFzaWx5IHRlbGwgd2hldGhlciB0aGUgYWRkcmVzcyBuZWVkcyBsb29raW5nIHVwIG9yIG5vdC4gIEkKKyAgICAgICAgIyBrbm93IGhvdyB0byBkbyB0aGlzIGZvciBJUHY0LCBidXQgSVB2NiBhZGRyZXNzZXMgaGF2ZSBtYW55CisgICAgICAgICMgc3ludGF4ZXMuKQorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgaWYgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcihmZCkKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCByZWdpc3RlcmVkOgorICAgICAgICAgICAgICAgICMgRmlyc3QgdGltZSBhcm91bmQuCisgICAgICAgICAgICAgICAgc29jay5jb25uZWN0KGFkZHJlc3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVyciA9IHNvY2suZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0VSUk9SKQorICAgICAgICAgICAgICAgIGlmIGVyciAhPSAwOgorICAgICAgICAgICAgICAgICAgICAjIEp1bXAgdG8gdGhlIGV4Y2VwdCBjbGF1c2UgYmVsb3cuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLCAnQ29ubmVjdCBjYWxsIGZhaWxlZCAlcycgJSAoYWRkcmVzcywpKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFkZF93cml0ZXIoZmQsIHNlbGYuX3NvY2tfY29ubmVjdCwgZnV0LCBUcnVlLCBzb2NrLCBhZGRyZXNzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgc29ja19hY2NlcHQoc2VsZiwgc29jayk6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHNlbGYuX3NvY2tfYWNjZXB0KGZ1dCwgRmFsc2UsIHNvY2spCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19hY2NlcHQoc2VsZiwgZnV0LCByZWdpc3RlcmVkLCBzb2NrKToKKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoZmQpCisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uLCBhZGRyZXNzID0gc29jay5hY2NlcHQoKQorICAgICAgICAgICAgY29ubi5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hZGRfcmVhZGVyKGZkLCBzZWxmLl9zb2NrX2FjY2VwdCwgZnV0LCBUcnVlLCBzb2NrKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KChjb25uLCBhZGRyZXNzKSkKKworICAgIGRlZiBfcHJvY2Vzc19ldmVudHMoc2VsZiwgZXZlbnRfbGlzdCk6CisgICAgICAgIGZvciBrZXksIG1hc2sgaW4gZXZlbnRfbGlzdDoKKyAgICAgICAgICAgIGZpbGVvYmosIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZmlsZW9iaiwga2V5LmRhdGEKKyAgICAgICAgICAgIGlmIG1hc2sgJiBzZWxlY3RvcnMuRVZFTlRfUkVBRCBhbmQgcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHJlYWRlci5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoZmlsZW9iaikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRfY2FsbGJhY2socmVhZGVyKQorICAgICAgICAgICAgaWYgbWFzayAmIHNlbGVjdG9ycy5FVkVOVF9XUklURSBhbmQgd3JpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHdyaXRlci5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRfY2FsbGJhY2sod3JpdGVyKQorCisgICAgZGVmIF9zdG9wX3NlcnZpbmcoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihzb2NrLmZpbGVubygpKQorICAgICAgICBzb2NrLmNsb3NlKCkKKworCitjbGFzcyBfU2VsZWN0b3JUcmFuc3BvcnQodHJhbnNwb3J0cy5UcmFuc3BvcnQpOgorCisgICAgbWF4X3NpemUgPSAyNTYgKiAxMDI0ICAjIEJ1ZmZlciBzaXplIHBhc3NlZCB0byByZWN2KCkuCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIGV4dHJhLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZXh0cmEpCisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrZXQnXSA9IHNvY2sKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3NvY2tuYW1lJ10gPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgaWYgJ3BlZXJuYW1lJyBub3QgaW4gc2VsZi5fZXh0cmE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3BlZXJuYW1lJ10gPSBzb2NrLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3BlZXJuYW1lJ10gPSBOb25lCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX3NvY2sgPSBzb2NrCisgICAgICAgIHNlbGYuX3NvY2tfZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fc2VydmVyID0gc2VydmVyCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMCAgIyBTZXQgd2hlbiBjYWxsIHRvIGNvbm5lY3Rpb25fbG9zdCBzY2hlZHVsZWQuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBGYWxzZSAgIyBTZXQgd2hlbiBjbG9zZSgpIGNhbGxlZC4KKyAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpCisgICAgICAgIGlmIHNlbGYuX3NlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlci5hdHRhY2goc2VsZikKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjKToKKyAgICAgICAgIyBTaG91bGQgYmUgY2FsbGVkIGZyb20gZXhjZXB0aW9uIGhhbmRsZXIgb25seS4KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvcikpOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmF0YWwgZXJyb3IgZm9yICVzJywgc2VsZikKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorCisgICAgZGVmIF9mb3JjZV9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIGV4YykKKworICAgIGRlZiBfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fc29jayA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgICAgIHNlcnZlciA9IHNlbGYuX3NlcnZlcgorICAgICAgICAgICAgaWYgc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlcnZlci5kZXRhY2goc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgX21heWJlX3BhdXNlX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBzaXplID0gc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKQorICAgICAgICBpZiBzaXplIDw9IHNlbGYuX2hpZ2hfd2F0ZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb3RvY29sX3BhdXNlZDoKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sX3BhdXNlZCA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5wYXVzZV93cml0aW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbigncGF1c2Vfd3JpdGluZygpIGZhaWxlZCcpCisKKyAgICBkZWYgX21heWJlX3Jlc3VtZV9wcm90b2NvbChzZWxmKToKKyAgICAgICAgaWYgKHNlbGYuX3Byb3RvY29sX3BhdXNlZCBhbmQKKyAgICAgICAgICAgIHNlbGYuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkgPD0gc2VsZi5fbG93X3dhdGVyKToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sX3BhdXNlZCA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wucmVzdW1lX3dyaXRpbmcoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdyZXN1bWVfd3JpdGluZygpIGZhaWxlZCcpCisKKyAgICBkZWYgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgIGlmIGhpZ2ggaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGxvdyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGhpZ2ggPSA2NCoxMDI0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhpZ2ggPSA0KmxvdworICAgICAgICBpZiBsb3cgaXMgTm9uZToKKyAgICAgICAgICAgIGxvdyA9IGhpZ2ggLy8gNAorICAgICAgICBhc3NlcnQgMCA8PSBsb3cgPD0gaGlnaCwgcmVwcigobG93LCBoaWdoKSkKKyAgICAgICAgc2VsZi5faGlnaF93YXRlciA9IGhpZ2gKKyAgICAgICAgc2VsZi5fbG93X3dhdGVyID0gbG93CisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc3VtKGxlbihkYXRhKSBmb3IgZGF0YSBpbiBzZWxmLl9idWZmZXIpCisKKworY2xhc3MgX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KF9TZWxlY3RvclRyYW5zcG9ydCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcCwgc29jaywgcHJvdG9jb2wsIGV4dHJhLCBzZXJ2ZXIpCisgICAgICAgIHNlbGYuX2VvZiA9IEZhbHNlCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24od2FpdGVyLnNldF9yZXN1bHQsIE5vbmUpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9jbG9zaW5nLCAnQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcGF1c2VkLCAnQWxyZWFkeSBwYXVzZWQnCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9wYXVzZWQsICdOb3QgcGF1c2VkJworICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fc29jay5yZWN2KHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga2VlcF9vcGVuID0gc2VsZi5fcHJvdG9jb2wuZW9mX3JlY2VpdmVkKCkKKyAgICAgICAgICAgICAgICBpZiBrZWVwX29wZW46CisgICAgICAgICAgICAgICAgICAgICMgV2UncmUga2VlcGluZyB0aGUgY29ubmVjdGlvbiBvcGVuIHNvIHRoZQorICAgICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGNhbiB3cml0ZSBtb3JlLCBidXQgd2Ugc3RpbGwgY2FuJ3QKKyAgICAgICAgICAgICAgICAgICAgIyByZWNlaXZlIG1vcmUsIHNvIHJlbW92ZSB0aGUgcmVhZGVyIGNhbGxiYWNrLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpLCByZXByKHR5cGUoZGF0YSkpCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fZW9mLCAnQ2Fubm90IGNhbGwgd3JpdGUoKSBhZnRlciB3cml0ZV9lb2YoKScKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICMgT3B0aW1pemF0aW9uOiB0cnkgdG8gc2VuZCBub3cuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IHNlbGYuX3NvY2suc2VuZChkYXRhKQorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIyBOb3QgYWxsIHdhcyB3cml0dGVuOyByZWdpc3RlciB3cml0ZSBoYW5kbGVyLgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorCisgICAgICAgICMgQWRkIGl0IHRvIHRoZSBidWZmZXIuCisgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIF93cml0ZV9yZWFkeShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInJy5qb2luKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgYXNzZXJ0IGRhdGEsICdEYXRhIHNob3VsZCBub3QgYmUgZW1wdHknCisKKyAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkgICMgT3B0aW1pc3RpY2FsbHk7IG1heSBoYXZlIHRvIHB1dCBpdCBiYWNrIGxhdGVyLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkgICMgU3RpbGwgbmVlZCB0byB3cml0ZSB0aGlzLgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkgICMgU3RpbGwgbmVlZCB0byB3cml0ZSB0aGlzLgorICAgICAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9lb2Y6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9lb2Y6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fZW9mID0gVHJ1ZQorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIF9TZWxlY3RvclNzbFRyYW5zcG9ydChfU2VsZWN0b3JUcmFuc3BvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzdGRsaWIgc3NsIG1vZHVsZSBub3QgYXZhaWxhYmxlJykKKworICAgICAgICBpZiBzZXJ2ZXJfc2lkZToKKyAgICAgICAgICAgIGlmIG5vdCBzc2xjb250ZXh0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlcnZlciBzaWRlIHNzbCBuZWVkcyBhIHZhbGlkIFNTTENvbnRleHQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IHNzbGNvbnRleHQ6CisgICAgICAgICAgICAgICAgIyBDbGllbnQgc2lkZSBtYXkgcGFzcyBzc2w9VHJ1ZSB0byB1c2UgYSBkZWZhdWx0CisgICAgICAgICAgICAgICAgIyBjb250ZXh0OyBpbiB0aGF0IGNhc2UgdGhlIHNzbGNvbnRleHQgcGFzc2VkIGlzIE5vbmUuCisgICAgICAgICAgICAgICAgIyBUaGUgZGVmYXVsdCBpcyB0aGUgc2FtZSBhcyB1c2VkIGJ5IHVybGxpYiB3aXRoCisgICAgICAgICAgICAgICAgIyBjYWRlZmF1bHQ9VHJ1ZS4KKyAgICAgICAgICAgICAgICBzc2xjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgICAgICBzc2xjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgICAgICAgICAgc3NsY29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorICAgICAgICAgICAgICAgIHNzbGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorCisgICAgICAgIHdyYXBfa3dhcmdzID0geworICAgICAgICAgICAgJ3NlcnZlcl9zaWRlJzogc2VydmVyX3NpZGUsCisgICAgICAgICAgICAnZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QnOiBGYWxzZSwKKyAgICAgICAgfQorICAgICAgICBpZiBzZXJ2ZXJfaG9zdG5hbWUgYW5kIG5vdCBzZXJ2ZXJfc2lkZSBhbmQgc3NsLkhBU19TTkk6CisgICAgICAgICAgICB3cmFwX2t3YXJnc1snc2VydmVyX2hvc3RuYW1lJ10gPSBzZXJ2ZXJfaG9zdG5hbWUKKyAgICAgICAgc3Nsc29jayA9IHNzbGNvbnRleHQud3JhcF9zb2NrZXQocmF3c29jaywgKip3cmFwX2t3YXJncykKKworICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNzbHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyKQorCisgICAgICAgIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSA9IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBzZWxmLl93YWl0ZXIgPSB3YWl0ZXIKKyAgICAgICAgc2VsZi5fcmF3c29jayA9IHJhd3NvY2sKKyAgICAgICAgc2VsZi5fc3NsY29udGV4dCA9IHNzbGNvbnRleHQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKworICAgICAgICAjIFNTTC1zcGVjaWZpYyBleHRyYSBpbmZvLiAgKHBlZXJjZXJ0IGlzIHNldCBsYXRlcikKKyAgICAgICAgc2VsZi5fZXh0cmEudXBkYXRlKHNzbGNvbnRleHQ9c3NsY29udGV4dCkKKworICAgICAgICBzZWxmLl9vbl9oYW5kc2hha2UoKQorCisgICAgZGVmIF9vbl9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suZG9faGFuZHNoYWtlKCkKKyAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50UmVhZEVycm9yOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX29uX2hhbmRzaGFrZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRXcml0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX29uX2hhbmRzaGFrZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorCisgICAgICAgICMgVmVyaWZ5IGhvc3RuYW1lIGlmIHJlcXVlc3RlZC4KKyAgICAgICAgcGVlcmNlcnQgPSBzZWxmLl9zb2NrLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgaWYgKHNlbGYuX3NlcnZlcl9ob3N0bmFtZSBhbmQKKyAgICAgICAgICAgIHNlbGYuX3NzbGNvbnRleHQudmVyaWZ5X21vZGUgIT0gc3NsLkNFUlRfTk9ORSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3NsLm1hdGNoX2hvc3RuYW1lKHBlZXJjZXJ0LCBzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEFkZCBleHRyYSBpbmZvIHRoYXQgYmVjb21lcyBhdmFpbGFibGUgYWZ0ZXIgaGFuZHNoYWtlLgorICAgICAgICBzZWxmLl9leHRyYS51cGRhdGUocGVlcmNlcnQ9cGVlcmNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXI9c2VsZi5fc29jay5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uPXNlbGYuX3NvY2suY29tcHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gRmFsc2UKKyAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3dhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgICMgWFhYIFRoaXMgaXMgYSBiaXQgaWNreSwgZ2l2ZW4gdGhlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgorICAgICAgICAjIF9yZWFkX3JlYWR5KCkuICBJcyBpdCBwb3NzaWJsZSB0byBldm9rZSBhIGRlYWRsb2NrPyAgSSBkb24ndAorICAgICAgICAjIGtub3csIGFsdGhvdWdoIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0OyB3cml0ZSgpIHdpbGwgc3RpbGwKKyAgICAgICAgIyBhY2NlcHQgbW9yZSBkYXRhIGZvciB0aGUgYnVmZmVyIGFuZCBldmVudHVhbGx5IHRoZSBhcHAgd2lsbAorICAgICAgICAjIGNhbGwgcmVzdW1lX3JlYWRpbmcoKSBhZ2FpbiwgYW5kIHRoaW5ncyB3aWxsIGZsb3cgYWdhaW4uCisKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9jbG9zaW5nLCAnQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fcGF1c2VkLCAnQWxyZWFkeSBwYXVzZWQnCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9wYXVzZWQsICdOb3QgcGF1c2VkJworICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl93cml0ZV93YW50c19yZWFkOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl93cml0ZV9yZWFkeSgpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3NvY2sucmVjdihzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwgc3NsLlNTTFdhbnRSZWFkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRXcml0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fcmVhZF93YW50c193cml0ZSA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdyZXR1cm5pbmcgdHJ1ZSBmcm9tIGVvZl9yZWNlaXZlZCgpICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXMgbm8gZWZmZWN0IHdoZW4gdXNpbmcgc3NsJykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3JlYWRfd2FudHNfd3JpdGU6CisgICAgICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfcmVhZHkoKQorCisgICAgICAgICAgICBpZiBub3QgKHNlbGYuX3BhdXNlZCBvciBzZWxmLl9jbG9zaW5nKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBkYXRhID0gYicnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgc3NsLlNTTFdhbnRXcml0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50UmVhZEVycm9yOgorICAgICAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgaWYgbiA8IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGFbbjpdKQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpLCByZXByKHR5cGUoZGF0YSkpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgIyBBZGQgaXQgdG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgYWRkcmVzcz1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzb2NrLCBwcm90b2NvbCwgZXh0cmEpCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBhZGRyZXNzCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc3VtKGxlbihkYXRhKSBmb3IgZGF0YSwgXyBpbiBzZWxmLl9idWZmZXIpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEsIGFkZHIgPSBzZWxmLl9zb2NrLnJlY3Zmcm9tKHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhZ3JhbV9yZWNlaXZlZChkYXRhLCBhZGRyKQorCisgICAgZGVmIHNlbmR0byhzZWxmLCBkYXRhLCBhZGRyPU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhLCBieXRlcyksIHJlcHIodHlwZShkYXRhKSkKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgYXNzZXJ0IGFkZHIgaW4gKE5vbmUsIHNlbGYuX2FkZHJlc3MpCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0IGFuZCBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAjIEF0dGVtcHQgdG8gc2VuZCBpdCByaWdodCBhd2F5IGZpcnN0LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZChkYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZHRvKGRhdGEsIGFkZHIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uUmVmdXNlZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZCgoZGF0YSwgYWRkcikpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfc2VuZHRvX3JlYWR5KHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBkYXRhLCBhZGRyID0gc2VsZi5fYnVmZmVyLnBvcGxlZnQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZChkYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZHRvKGRhdGEsIGFkZHIpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZGxlZnQoKGRhdGEsIGFkZHIpKSAgIyBUcnkgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uUmVmdXNlZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKworICAgIGRlZiBfZm9yY2VfY2xvc2Uoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBhbmQgaXNpbnN0YW5jZShleGMsIENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9yZWZ1c2VkKGV4YykKKyAgICAgICAgc3VwZXIoKS5fZm9yY2VfY2xvc2UoZXhjKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vc3RyZWFtcy5weSBiL0xpYi9hc3luY2lvL3N0cmVhbXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5NTM2OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3N0cmVhbXMucHkKQEAgLTAsMCArMSwzNDkgQEAKKyIiIlN0cmVhbS1yZWxhdGVkIHRoaW5ncy4iIiIKKworX19hbGxfXyA9IFsnU3RyZWFtUmVhZGVyJywgJ1N0cmVhbVJlYWRlclByb3RvY29sJywgJ29wZW5fY29ubmVjdGlvbiddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHByb3RvY29scworZnJvbSAuIGltcG9ydCB0YXNrcworCisKK19ERUZBVUxUX0xJTUlUID0gMioqMTYKKworCitAdGFza3MuY29yb3V0aW5lCitkZWYgb3Blbl9jb25uZWN0aW9uKGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICBsb29wPU5vbmUsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgICIiIkEgd3JhcHBlciBmb3IgY3JlYXRlX2Nvbm5lY3Rpb24oKSByZXR1cm5pbmcgYSAocmVhZGVyLCB3cml0ZXIpIHBhaXIuCisKKyAgICBUaGUgcmVhZGVyIHJldHVybmVkIGlzIGEgU3RyZWFtUmVhZGVyIGluc3RhbmNlOyB0aGUgd3JpdGVyIGlzIGEKKyAgICBUcmFuc3BvcnQuCisKKyAgICBUaGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0byBjcmVhdGVfY29ubmVjdGlvbigpCisgICAgZXhjZXB0IHByb3RvY29sX2ZhY3Rvcnk7IG1vc3QgY29tbW9uIGFyZSBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsCisgICAgd2l0aCB2YXJpb3VzIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGZvbGxvd2luZy4KKworICAgIEFkZGl0aW9uYWwgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlIGxvb3AgKHRvIHNldCB0aGUgZXZlbnQgbG9vcAorICAgIGluc3RhbmNlIHRvIHVzZSkgYW5kIGxpbWl0ICh0byBzZXQgdGhlIGJ1ZmZlciBsaW1pdCBwYXNzZWQgdG8gdGhlCisgICAgU3RyZWFtUmVhZGVyKS4KKworICAgIChJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIFN0cmVhbVJlYWRlciBhbmQvb3IKKyAgICBTdHJlYW1SZWFkZXJQcm90b2NvbCBjbGFzc2VzLCBqdXN0IGNvcHkgdGhlIGNvZGUgLS0gdGhlcmUncworICAgIHJlYWxseSBub3RoaW5nIHNwZWNpYWwgaGVyZSBleGNlcHQgc29tZSBjb252ZW5pZW5jZS4pCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICByZWFkZXIgPSBTdHJlYW1SZWFkZXIobGltaXQ9bGltaXQsIGxvb3A9bG9vcCkKKyAgICBwcm90b2NvbCA9IFN0cmVhbVJlYWRlclByb3RvY29sKHJlYWRlcikKKyAgICB0cmFuc3BvcnQsIF8gPSB5aWVsZCBmcm9tIGxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgIGxhbWJkYTogcHJvdG9jb2wsIGhvc3QsIHBvcnQsICoqa3dkcykKKyAgICB3cml0ZXIgPSBTdHJlYW1Xcml0ZXIodHJhbnNwb3J0LCBwcm90b2NvbCwgcmVhZGVyLCBsb29wKQorICAgIHJldHVybiByZWFkZXIsIHdyaXRlcgorCisKK2NsYXNzIFN0cmVhbVJlYWRlclByb3RvY29sKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgIiIiVHJpdmlhbCBoZWxwZXIgY2xhc3MgdG8gYWRhcHQgYmV0d2VlbiBQcm90b2NvbCBhbmQgU3RyZWFtUmVhZGVyLgorCisgICAgKFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgaW5zdGVhZCBvZiBtYWtpbmcgU3RyZWFtUmVhZGVyIGl0c2VsZiBhCisgICAgUHJvdG9jb2wgc3ViY2xhc3MsIGJlY2F1c2UgdGhlIFN0cmVhbVJlYWRlciBoYXMgb3RoZXIgcG90ZW50aWFsCisgICAgdXNlcywgYW5kIHRvIHByZXZlbnQgdGhlIHVzZXIgb2YgdGhlIFN0cmVhbVJlYWRlciB0byBhY2NpZGVudGFsbHkKKyAgICBjYWxsIGluYXBwcm9wcmlhdGUgbWV0aG9kcyBvZiB0aGUgcHJvdG9jb2wuKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbV9yZWFkZXIpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyID0gc3RyZWFtX3JlYWRlcgorICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2VvZigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAjIEFsc28gd2FrZSB1cCB0aGUgd3JpdGluZyBzaWRlLgorICAgICAgICBpZiBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICB3YWl0ZXIgPSBzZWxmLl9kcmFpbl93YWl0ZXIKKyAgICAgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZGF0YShkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2VvZigpCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXVzZWQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorCisgICAgZGVmIHJlc3VtZV93cml0aW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5fcGF1c2VkCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIFN0cmVhbVdyaXRlcjoKKyAgICAiIiJXcmFwcyBhIFRyYW5zcG9ydC4KKworICAgIFRoaXMgZXhwb3NlcyB3cml0ZSgpLCB3cml0ZWxpbmVzKCksIFtjYW5fXXdyaXRlX2VvZigpLAorICAgIGdldF9leHRyYV9pbmZvKCkgYW5kIGNsb3NlKCkuICBJdCBhZGRzIGRyYWluKCkgd2hpY2ggcmV0dXJucyBhbgorICAgIG9wdGlvbmFsIEZ1dHVyZSBvbiB3aGljaCB5b3UgY2FuIHdhaXQgZm9yIGZsb3cgY29udHJvbC4gIEl0IGFsc28KKyAgICBhZGRzIGEgdHJhbnNwb3J0IGF0dHJpYnV0ZSB3aGljaCByZWZlcmVuY2VzIHRoZSBUcmFuc3BvcnQKKyAgICBkaXJlY3RseS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFuc3BvcnQsIHByb3RvY29sLCByZWFkZXIsIGxvb3ApOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9yZWFkZXIgPSByZWFkZXIKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0LndyaXRlbGluZXMoZGF0YSkKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQud3JpdGVfZW9mKCkKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmNhbl93cml0ZV9lb2YoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmNsb3NlKCkKKworICAgIGRlZiBnZXRfZXh0cmFfaW5mbyhzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKG5hbWUsIGRlZmF1bHQpCisKKyAgICBkZWYgZHJhaW4oc2VsZik6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIGhhcyBhbiB1bnVzdWFsIHJldHVybiB2YWx1ZS4KKworICAgICAgICBUaGUgaW50ZW5kZWQgdXNlIGlzIHRvIHdyaXRlCisKKyAgICAgICAgICB3LndyaXRlKGRhdGEpCisgICAgICAgICAgeWllbGQgZnJvbSB3LmRyYWluKCkKKworICAgICAgICBXaGVuIHRoZXJlJ3Mgbm90aGluZyB0byB3YWl0IGZvciwgZHJhaW4oKSByZXR1cm5zICgpLCBhbmQgdGhlCisgICAgICAgIHlpZWxkLWZyb20gY29udGludWVzIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUgdHJhbnNwb3J0IGJ1ZmZlcgorICAgICAgICBpcyBmdWxsICh0aGUgcHJvdG9jb2wgaXMgcGF1c2VkKSwgZHJhaW4oKSBjcmVhdGVzIGFuZCByZXR1cm5zCisgICAgICAgIGEgRnV0dXJlIGFuZCB0aGUgeWllbGQtZnJvbSB3aWxsIGJsb2NrIHVudGlsIHRoYXQgRnV0dXJlIGlzCisgICAgICAgIGNvbXBsZXRlZCwgd2hpY2ggd2lsbCBoYXBwZW4gd2hlbiB0aGUgYnVmZmVyIGlzIChwYXJ0aWFsbHkpCisgICAgICAgIGRyYWluZWQgYW5kIHRoZSBwcm90b2NvbCBpcyByZXN1bWVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fcmVhZGVyLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl93cml0ZXIuX2V4Y2VwdGlvbgorICAgICAgICBpZiBzZWxmLl90cmFuc3BvcnQuX2Nvbm5fbG9zdDogICMgVXNlcyBwcml2YXRlIHZhcmlhYmxlLgorICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvblJlc2V0RXJyb3IoJ0Nvbm5lY3Rpb24gbG9zdCcpCisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm90b2NvbC5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuICgpCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3Byb3RvY29sLl9kcmFpbl93YWl0ZXIKKyAgICAgICAgYXNzZXJ0IHdhaXRlciBpcyBOb25lIG9yIHdhaXRlci5jYW5jZWxsZWQoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX3Byb3RvY29sLl9kcmFpbl93YWl0ZXIgPSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHdhaXRlcgorCisKK2NsYXNzIFN0cmVhbVJlYWRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgbG9vcD1Ob25lKToKKyAgICAgICAgIyBUaGUgbGluZSBsZW5ndGggbGltaXQgaXMgIGEgc2VjdXJpdHkgZmVhdHVyZTsKKyAgICAgICAgIyBpdCBhbHNvIGRvdWJsZXMgYXMgaGFsZiB0aGUgYnVmZmVyIGxpbWl0LgorICAgICAgICBzZWxmLl9saW1pdCA9IGxpbWl0CisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9idWZmZXIgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpICAjIERlcXVlIG9mIGJ5dGVzIG9iamVjdHMuCisgICAgICAgIHNlbGYuX2J5dGVfY291bnQgPSAwICAjIEJ5dGVzIGluIGJ1ZmZlci4KKyAgICAgICAgc2VsZi5fZW9mID0gRmFsc2UgICMgV2hldGhlciB3ZSdyZSBkb25lLgorICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lICAjIEEgZnV0dXJlLgorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBOb25lCisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKworICAgIGRlZiBleGNlcHRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb24KKworICAgIGRlZiBzZXRfZXhjZXB0aW9uKHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4YworCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgIGRlZiBzZXRfdHJhbnNwb3J0KHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIGFzc2VydCBzZWxmLl90cmFuc3BvcnQgaXMgTm9uZSwgJ1RyYW5zcG9ydCBhbHJlYWR5IHNldCcKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICBkZWYgX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3BhdXNlZCBhbmQgc2VsZi5fYnl0ZV9jb3VudCA8PSBzZWxmLl9saW1pdDoKKyAgICAgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcoKQorCisgICAgZGVmIGZlZWRfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLl9lb2YgPSBUcnVlCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KFRydWUpCisKKyAgICBkZWYgZmVlZF9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCArPSBsZW4oZGF0YSkKKworICAgICAgICB3YWl0ZXIgPSBzZWxmLl93YWl0ZXIKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChGYWxzZSkKKworICAgICAgICBpZiAoc2VsZi5fdHJhbnNwb3J0IGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgbm90IHNlbGYuX3BhdXNlZCBhbmQKKyAgICAgICAgICAgIHNlbGYuX2J5dGVfY291bnQgPiAyKnNlbGYuX2xpbWl0KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucGF1c2VfcmVhZGluZygpCisgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoZSB0cmFuc3BvcnQgY2FuJ3QgYmUgcGF1c2VkLgorICAgICAgICAgICAgICAgICMgV2UnbGwganVzdCBoYXZlIHRvIGJ1ZmZlciBhbGwgZGF0YS4KKyAgICAgICAgICAgICAgICAjIEZvcmdldCB0aGUgdHJhbnNwb3J0IHNvIHdlIGRvbid0IGtlZXAgdHJ5aW5nLgorICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBwYXJ0c19zaXplID0gMAorICAgICAgICBub3RfZW5vdWdoID0gVHJ1ZQorCisgICAgICAgIHdoaWxlIG5vdF9lbm91Z2g6CisgICAgICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXIgYW5kIG5vdF9lbm91Z2g6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlci5wb3BsZWZ0KCkKKyAgICAgICAgICAgICAgICBpY2hhciA9IGRhdGEuZmluZChiJ1xuJykKKyAgICAgICAgICAgICAgICBpZiBpY2hhciA8IDA6CisgICAgICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgICAgICAgICBwYXJ0c19zaXplICs9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGljaGFyICs9IDEKKyAgICAgICAgICAgICAgICAgICAgaGVhZCwgdGFpbCA9IGRhdGFbOmljaGFyXSwgZGF0YVtpY2hhcjpdCisgICAgICAgICAgICAgICAgICAgIGlmIHRhaWw6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kbGVmdCh0YWlsKQorICAgICAgICAgICAgICAgICAgICBub3RfZW5vdWdoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKGhlYWQpCisgICAgICAgICAgICAgICAgICAgIHBhcnRzX3NpemUgKz0gbGVuKGhlYWQpCisKKyAgICAgICAgICAgICAgICBpZiBwYXJ0c19zaXplID4gc2VsZi5fbGltaXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J5dGVfY291bnQgLT0gcGFydHNfc2l6ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfdHJhbnNwb3J0KCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTGluZSBpcyB0b28gbG9uZycpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3RfZW5vdWdoOgorICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl93YWl0ZXIgaXMgTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgICAgIGxpbmUgPSBiJycuam9pbihwYXJ0cykKKyAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCAtPSBwYXJ0c19zaXplCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6CisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgICAgIGlmIG5vdCBuOgorICAgICAgICAgICAgcmV0dXJuIGInJworCisgICAgICAgIGlmIG4gPCAwOgorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J5dGVfY291bnQgYW5kIG5vdCBzZWxmLl9lb2Y6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl93YWl0ZXIKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKworICAgICAgICBpZiBuIDwgMCBvciBzZWxmLl9ieXRlX2NvdW50IDw9IG46CisgICAgICAgICAgICBkYXRhID0gYicnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX2J5dGVfY291bnQgPSAwCisgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfdHJhbnNwb3J0KCkKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBwYXJ0c19ieXRlcyA9IDAKKyAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyIGFuZCBwYXJ0c19ieXRlcyA8IG46CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyLnBvcGxlZnQoKQorICAgICAgICAgICAgZGF0YV9ieXRlcyA9IGxlbihkYXRhKQorICAgICAgICAgICAgaWYgbiA8IHBhcnRzX2J5dGVzICsgZGF0YV9ieXRlczoKKyAgICAgICAgICAgICAgICBkYXRhX2J5dGVzID0gbiAtIHBhcnRzX2J5dGVzCisgICAgICAgICAgICAgICAgZGF0YSwgcmVzdCA9IGRhdGFbOmRhdGFfYnl0ZXNdLCBkYXRhW2RhdGFfYnl0ZXM6XQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmRsZWZ0KHJlc3QpCisKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgcGFydHNfYnl0ZXMgKz0gZGF0YV9ieXRlcworICAgICAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCAtPSBkYXRhX2J5dGVzCisgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfdHJhbnNwb3J0KCkKKworICAgICAgICByZXR1cm4gYicnLmpvaW4ocGFydHMpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHJlYWRleGFjdGx5KHNlbGYsIG4pOgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKworICAgICAgICBpZiBuIDw9IDA6CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgd2hpbGUgc2VsZi5fYnl0ZV9jb3VudCA8IG4gYW5kIG5vdCBzZWxmLl9lb2Y6CisgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKworICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gc2VsZi5yZWFkKG4pKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGFza3MucHkgYi9MaWIvYXN5bmNpby90YXNrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTIxYTRiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vdGFza3MucHkKQEAgLTAsMCArMSw2MzcgQEAKKyIiIlN1cHBvcnQgZm9yIHRhc2tzLCBjb3JvdXRpbmVzIGFuZCB0aGUgc2NoZWR1bGVyLiIiIgorCitfX2FsbF9fID0gWydjb3JvdXRpbmUnLCAnVGFzaycsCisgICAgICAgICAgICdGSVJTVF9DT01QTEVURUQnLCAnRklSU1RfRVhDRVBUSU9OJywgJ0FMTF9DT01QTEVURUQnLAorICAgICAgICAgICAnd2FpdCcsICd3YWl0X2ZvcicsICdhc19jb21wbGV0ZWQnLCAnc2xlZXAnLCAnYXN5bmMnLAorICAgICAgICAgICAnZ2F0aGVyJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgd2Vha3JlZgorCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisjIElmIHlvdSBzZXQgX0RFQlVHIHRvIHRydWUsIEBjb3JvdXRpbmUgd2lsbCB3cmFwIHRoZSByZXN1bHRpbmcKKyMgZ2VuZXJhdG9yIG9iamVjdHMgaW4gYSBDb3JvV3JhcHBlciBpbnN0YW5jZSAoZGVmaW5lZCBiZWxvdykuICBUaGF0CisjIGluc3RhbmNlIHdpbGwgbG9nIGEgbWVzc2FnZSB3aGVuIHRoZSBnZW5lcmF0b3IgaXMgbmV2ZXIgaXRlcmF0ZWQKKyMgb3Zlciwgd2hpY2ggbWF5IGhhcHBlbiB3aGVuIHlvdSBmb3JnZXQgdG8gdXNlICJ5aWVsZCBmcm9tIiB3aXRoIGEKKyMgY29yb3V0aW5lIGNhbGwuICBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBfREVCVUcgZmxhZyBpcyB0YWtlbgorIyB3aGVuIHRoZSBkZWNvcmF0b3IgaXMgdXNlZCwgc28gdG8gYmUgb2YgYW55IHVzZSBpdCBtdXN0IGJlIHNldAorIyBiZWZvcmUgeW91IGRlZmluZSB5b3VyIGNvcm91dGluZXMuICBBIGRvd25zaWRlIG9mIHVzaW5nIHRoaXMgZmVhdHVyZQorIyBpcyB0aGF0IHRyYWNlYmFja3Mgc2hvdyBlbnRyaWVzIGZvciB0aGUgQ29yb1dyYXBwZXIuX19uZXh0X18gbWV0aG9kCisjIHdoZW4gX0RFQlVHIGlzIHRydWUuCitfREVCVUcgPSBGYWxzZQorCisKK2NsYXNzIENvcm9XcmFwcGVyOgorICAgICIiIldyYXBwZXIgZm9yIGNvcm91dGluZSBpbiBfREVCVUcgbW9kZS4iIiIKKworICAgIF9fc2xvdF9fID0gWydnZW4nLCAnZnVuYyddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuLCBmdW5jKToKKyAgICAgICAgYXNzZXJ0IGluc3BlY3QuaXNnZW5lcmF0b3IoZ2VuKSwgZ2VuCisgICAgICAgIHNlbGYuZ2VuID0gZ2VuCisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG5leHQoc2VsZi5nZW4pCisKKyAgICBkZWYgc2VuZChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5zZW5kKHZhbHVlKQorCisgICAgZGVmIHRocm93KHNlbGYsIGV4Yyk6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi50aHJvdyhleGMpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5jbG9zZSgpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgZnJhbWUgPSBzZWxmLmdlbi5naV9mcmFtZQorICAgICAgICBpZiBmcmFtZSBpcyBub3QgTm9uZSBhbmQgZnJhbWUuZl9sYXN0aSA9PSAtMToKKyAgICAgICAgICAgIGZ1bmMgPSBzZWxmLmZ1bmMKKyAgICAgICAgICAgIGNvZGUgPSBmdW5jLl9fY29kZV9fCisgICAgICAgICAgICBmaWxlbmFtZSA9IGNvZGUuY29fZmlsZW5hbWUKKyAgICAgICAgICAgIGxpbmVubyA9IGNvZGUuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigKKyAgICAgICAgICAgICAgICAnQ29yb3V0aW5lICVyIGRlZmluZWQgYXQgJXM6JXMgd2FzIG5ldmVyIHlpZWxkZWQgZnJvbScsCisgICAgICAgICAgICAgICAgZnVuYy5fX25hbWVfXywgZmlsZW5hbWUsIGxpbmVubykKKworCitkZWYgY29yb3V0aW5lKGZ1bmMpOgorICAgICIiIkRlY29yYXRvciB0byBtYXJrIGNvcm91dGluZXMuCisKKyAgICBJZiB0aGUgY29yb3V0aW5lIGlzIG5vdCB5aWVsZGVkIGZyb20gYmVmb3JlIGl0IGlzIGRlc3Ryb3llZCwKKyAgICBhbiBlcnJvciBtZXNzYWdlIGlzIGxvZ2dlZC4KKyAgICAiIiIKKyAgICBpZiBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24oZnVuYyk6CisgICAgICAgIGNvcm8gPSBmdW5jCisgICAgZWxzZToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgY29ybygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXMgPSBmdW5jKCphcmdzLCAqKmt3KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXMsIGZ1dHVyZXMuRnV0dXJlKSBvciBpbnNwZWN0LmlzZ2VuZXJhdG9yKHJlcyk6CisgICAgICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSByZXMKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgIGlmIG5vdCBfREVCVUc6CisgICAgICAgIHdyYXBwZXIgPSBjb3JvCisgICAgZWxzZToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHcgPSBDb3JvV3JhcHBlcihjb3JvKCphcmdzLCAqKmt3ZHMpLCBmdW5jKQorICAgICAgICAgICAgdy5fX25hbWVfXyA9IGNvcm8uX19uYW1lX18KKyAgICAgICAgICAgIHcuX19kb2NfXyA9IGNvcm8uX19kb2NfXworICAgICAgICAgICAgcmV0dXJuIHcKKworICAgIHdyYXBwZXIuX2lzX2Nvcm91dGluZSA9IFRydWUgICMgRm9yIGlzY29yb3V0aW5lZnVuY3Rpb24oKS4KKyAgICByZXR1cm4gd3JhcHBlcgorCisKK2RlZiBpc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIGZ1bmMgaXMgYSBkZWNvcmF0ZWQgY29yb3V0aW5lIGZ1bmN0aW9uLiIiIgorICAgIHJldHVybiBnZXRhdHRyKGZ1bmMsICdfaXNfY29yb3V0aW5lJywgRmFsc2UpCisKKworZGVmIGlzY29yb3V0aW5lKG9iaik6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgb2JqIGlzIGEgY29yb3V0aW5lIG9iamVjdC4iIiIKKyAgICByZXR1cm4gaXNpbnN0YW5jZShvYmosIENvcm9XcmFwcGVyKSBvciBpbnNwZWN0LmlzZ2VuZXJhdG9yKG9iaikKKworCitjbGFzcyBUYXNrKGZ1dHVyZXMuRnV0dXJlKToKKyAgICAiIiJBIGNvcm91dGluZSB3cmFwcGVkIGluIGEgRnV0dXJlLiIiIgorCisgICAgIyBBbiBpbXBvcnRhbnQgaW52YXJpYW50IG1haW50YWluZWQgd2hpbGUgYSBUYXNrIG5vdCBkb25lOgorICAgICMKKyAgICAjIC0gRWl0aGVyIF9mdXRfd2FpdGVyIGlzIE5vbmUsIGFuZCBfc3RlcCgpIGlzIHNjaGVkdWxlZDsKKyAgICAjIC0gb3IgX2Z1dF93YWl0ZXIgaXMgc29tZSBGdXR1cmUsIGFuZCBfc3RlcCgpIGlzICpub3QqIHNjaGVkdWxlZC4KKyAgICAjCisgICAgIyBUaGUgb25seSB0cmFuc2l0aW9uIGZyb20gdGhlIGxhdHRlciB0byB0aGUgZm9ybWVyIGlzIHRocm91Z2gKKyAgICAjIF93YWtldXAoKS4gIFdoZW4gX2Z1dF93YWl0ZXIgaXMgbm90IE5vbmUsIG9uZSBvZiBpdHMgY2FsbGJhY2tzCisgICAgIyBtdXN0IGJlIF93YWtldXAoKS4KKworICAgICMgV2VhayBzZXQgY29udGFpbmluZyBhbGwgdGFza3MgYWxpdmUuCisgICAgX2FsbF90YXNrcyA9IHdlYWtyZWYuV2Vha1NldCgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgYWxsX3Rhc2tzKGNscywgbG9vcD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc2V0IG9mIGFsbCB0YXNrcyBmb3IgYW4gZXZlbnQgbG9vcC4KKworICAgICAgICBCeSBkZWZhdWx0IGFsbCB0YXNrcyBmb3IgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBhcmUgcmV0dXJuZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgcmV0dXJuIHt0IGZvciB0IGluIGNscy5fYWxsX3Rhc2tzIGlmIHQuX2xvb3AgaXMgbG9vcH0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb3JvLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNjb3JvdXRpbmUoY29ybyksIHJlcHIoY29ybykgICMgTm90IGEgY29yb3V0aW5lIGZ1bmN0aW9uIQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fY29ybyA9IGl0ZXIoY29ybykgICMgVXNlIHRoZSBpdGVyYXRvciBqdXN0IGluIGNhc2UuCisgICAgICAgIHNlbGYuX2Z1dF93YWl0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fc3RlcCkKKyAgICAgICAgc2VsZi5fX2NsYXNzX18uX2FsbF90YXNrcy5hZGQoc2VsZikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGlmIChzZWxmLl9tdXN0X2NhbmNlbCBhbmQKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID09IGZ1dHVyZXMuX1BFTkRJTkcgYW5kCisgICAgICAgICAgICAnPFBFTkRJTkcnIGluIHJlcyk6CisgICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgnPFBFTkRJTkcnLCAnPENBTkNFTExJTkcnLCAxKQorICAgICAgICBpID0gcmVzLmZpbmQoJzwnKQorICAgICAgICBpZiBpIDwgMDoKKyAgICAgICAgICAgIGkgPSBsZW4ocmVzKQorICAgICAgICByZXMgPSByZXNbOmldICsgJyg8e30+KScuZm9ybWF0KHNlbGYuX2Nvcm8uX19uYW1lX18pICsgcmVzW2k6XQorICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgZ2V0X3N0YWNrKHNlbGYsICosIGxpbWl0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2Ygc3RhY2sgZnJhbWVzIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgICAgSWYgdGhlIGNvcm91dGluZSBpcyBhY3RpdmUsIHRoaXMgcmV0dXJucyB0aGUgc3RhY2sgd2hlcmUgaXQgaXMKKyAgICAgICAgc3VzcGVuZGVkLiAgSWYgdGhlIGNvcm91dGluZSBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciB3YXMKKyAgICAgICAgY2FuY2VsbGVkLCB0aGlzIHJldHVybnMgYW4gZW1wdHkgbGlzdC4gIElmIHRoZSBjb3JvdXRpbmUgd2FzCisgICAgICAgIHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLCB0aGlzIHJldHVybnMgdGhlIGxpc3Qgb2YgdHJhY2ViYWNrCisgICAgICAgIGZyYW1lcy4KKworICAgICAgICBUaGUgZnJhbWVzIGFyZSBhbHdheXMgb3JkZXJlZCBmcm9tIG9sZGVzdCB0byBuZXdlc3QuCisKKyAgICAgICAgVGhlIG9wdGlvbmFsIGxpbWl0IGdpdmVzIHRoZSBtYXhpbXVtIG51bW1iZXIgb2YgZnJhbWVzIHRvCisgICAgICAgIHJldHVybjsgYnkgZGVmYXVsdCBhbGwgYXZhaWxhYmxlIGZyYW1lcyBhcmUgcmV0dXJuZWQuICBJdHMKKyAgICAgICAgbWVhbmluZyBkaWZmZXJzIGRlcGVuZGluZyBvbiB3aGV0aGVyIGEgc3RhY2sgb3IgYSB0cmFjZWJhY2sgaXMKKyAgICAgICAgcmV0dXJuZWQ6IHRoZSBuZXdlc3QgZnJhbWVzIG9mIGEgc3RhY2sgYXJlIHJldHVybmVkLCBidXQgdGhlCisgICAgICAgIG9sZGVzdCBmcmFtZXMgb2YgYSB0cmFjZWJhY2sgYXJlIHJldHVybmVkLiAgKFRoaXMgbWF0Y2hlcyB0aGUKKyAgICAgICAgYmVoYXZpb3Igb2YgdGhlIHRyYWNlYmFjayBtb2R1bGUuKQorCisgICAgICAgIEZvciByZWFzb25zIGJleW9uZCBvdXIgY29udHJvbCwgb25seSBvbmUgc3RhY2sgZnJhbWUgaXMKKyAgICAgICAgcmV0dXJuZWQgZm9yIGEgc3VzcGVuZGVkIGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIGZyYW1lcyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9jb3JvLmdpX2ZyYW1lCisgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3aGlsZSBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCA8PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgbGltaXQgLT0gMQorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICBmID0gZi5mX2JhY2sKKyAgICAgICAgICAgIGZyYW1lcy5yZXZlcnNlKCkKKyAgICAgICAgZWxpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YiA9IHNlbGYuX2V4Y2VwdGlvbi5fX3RyYWNlYmFja19fCisgICAgICAgICAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGltaXQgPD0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGxpbWl0IC09IDEKKyAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKHRiLnRiX2ZyYW1lKQorICAgICAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorICAgICAgICByZXR1cm4gZnJhbWVzCisKKyAgICBkZWYgcHJpbnRfc3RhY2soc2VsZiwgKiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKToKKyAgICAgICAgIiIiUHJpbnQgdGhlIHN0YWNrIG9yIHRyYWNlYmFjayBmb3IgdGhpcyB0YXNrJ3MgY29yb3V0aW5lLgorCisgICAgICAgIFRoaXMgcHJvZHVjZXMgb3V0cHV0IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZSwKKyAgICAgICAgZm9yIHRoZSBmcmFtZXMgcmV0cmlldmVkIGJ5IGdldF9zdGFjaygpLiAgVGhlIGxpbWl0IGFyZ3VtZW50CisgICAgICAgIGlzIHBhc3NlZCB0byBnZXRfc3RhY2soKS4gIFRoZSBmaWxlIGFyZ3VtZW50IGlzIGFuIEkvTyBzdHJlYW0KKyAgICAgICAgdG8gd2hpY2ggdGhlIG91dHB1dCBnb2VzOyBieSBkZWZhdWx0IGl0IGdvZXMgdG8gc3lzLnN0ZGVyci4KKyAgICAgICAgIiIiCisgICAgICAgIGV4dHJhY3RlZF9saXN0ID0gW10KKyAgICAgICAgY2hlY2tlZCA9IHNldCgpCisgICAgICAgIGZvciBmIGluIHNlbGYuZ2V0X3N0YWNrKGxpbWl0PWxpbWl0KToKKyAgICAgICAgICAgIGxpbmVubyA9IGYuZl9saW5lbm8KKyAgICAgICAgICAgIGNvID0gZi5mX2NvZGUKKyAgICAgICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBjby5jb19uYW1lCisgICAgICAgICAgICBpZiBmaWxlbmFtZSBub3QgaW4gY2hlY2tlZDoKKyAgICAgICAgICAgICAgICBjaGVja2VkLmFkZChmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKKyAgICAgICAgICAgIGV4dHJhY3RlZF9saXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCisgICAgICAgIGV4YyA9IHNlbGYuX2V4Y2VwdGlvbgorICAgICAgICBpZiBub3QgZXh0cmFjdGVkX2xpc3Q6CisgICAgICAgICAgICBwcmludCgnTm8gc3RhY2sgZm9yICVyJyAlIHNlbGYsIGZpbGU9ZmlsZSkKKyAgICAgICAgZWxpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcmludCgnVHJhY2ViYWNrIGZvciAlciAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonICUgc2VsZiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9ZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCdTdGFjayBmb3IgJXIgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6JyAlIHNlbGYsCisgICAgICAgICAgICAgICAgICBmaWxlPWZpbGUpCisgICAgICAgIHRyYWNlYmFjay5wcmludF9saXN0KGV4dHJhY3RlZF9saXN0LCBmaWxlPWZpbGUpCisgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjLl9fY2xhc3NfXywgZXhjKToKKyAgICAgICAgICAgICAgICBwcmludChsaW5lLCBmaWxlPWZpbGUsIGVuZD0nJykKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Z1dF93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9mdXRfd2FpdGVyLmNhbmNlbCgpOgorICAgICAgICAgICAgICAgICMgTGVhdmUgc2VsZi5fZnV0X3dhaXRlcjsgaXQgbWF5IGJlIGEgVGFzayB0aGF0CisgICAgICAgICAgICAgICAgIyBjYXRjaGVzIGFuZCBpZ25vcmVzIHRoZSBjYW5jZWxsYXRpb24gc28gd2UgbWF5IGhhdmUKKyAgICAgICAgICAgICAgICAjIHRvIGNhbmNlbCBpdCBhZ2FpbiBsYXRlci4KKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIEl0IG11c3QgYmUgdGhlIGNhc2UgdGhhdCBzZWxmLl9zdGVwIGlzIGFscmVhZHkgc2NoZWR1bGVkLgorICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IFRydWUKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfc3RlcChzZWxmLCB2YWx1ZT1Ob25lLCBleGM9Tm9uZSk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5kb25lKCksIFwKKyAgICAgICAgICAgICdfc3RlcCgpOiBhbHJlYWR5IGRvbmU6IHshcn0sIHshcn0sIHshcn0nLmZvcm1hdChzZWxmLCB2YWx1ZSwgZXhjKQorICAgICAgICBpZiBzZWxmLl9tdXN0X2NhbmNlbDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICAgICAgZXhjID0gZnV0dXJlcy5DYW5jZWxsZWRFcnJvcigpCisgICAgICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IEZhbHNlCisgICAgICAgIGNvcm8gPSBzZWxmLl9jb3JvCisgICAgICAgIHNlbGYuX2Z1dF93YWl0ZXIgPSBOb25lCisgICAgICAgICMgQ2FsbCBlaXRoZXIgY29yby50aHJvdyhleGMpIG9yIGNvcm8uc2VuZCh2YWx1ZSkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JvLnRocm93KGV4YykKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yby5zZW5kKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXh0KGNvcm8pCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuc2V0X3Jlc3VsdChleGMudmFsdWUpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHN1cGVyKCkuY2FuY2VsKCkgICMgSS5lLiwgRnV0dXJlLmNhbmNlbChzZWxmKS4KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBmdXR1cmVzLkZ1dHVyZSk6CisgICAgICAgICAgICAgICAgIyBZaWVsZGVkIEZ1dHVyZSBtdXN0IGNvbWUgZnJvbSBGdXR1cmUuX19pdGVyX18oKS4KKyAgICAgICAgICAgICAgICBpZiByZXN1bHQuX2Jsb2NraW5nOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuX2Jsb2NraW5nID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX3dha2V1cCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IHJlc3VsdAorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9tdXN0X2NhbmNlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Z1dF93YWl0ZXIuY2FuY2VsKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbXVzdF9jYW5jZWwgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RlcCwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAneWllbGQgd2FzIHVzZWQgaW5zdGVhZCBvZiB5aWVsZCBmcm9tICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGFzayB7IXJ9IHdpdGggeyFyfScuZm9ybWF0KHNlbGYsIHJlc3VsdCkpKQorICAgICAgICAgICAgZWxpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIEJhcmUgeWllbGQgcmVsaW5xdWlzaGVzIGNvbnRyb2wgZm9yIG9uZSBldmVudCBsb29wIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9zdGVwKQorICAgICAgICAgICAgZWxpZiBpbnNwZWN0LmlzZ2VuZXJhdG9yKHJlc3VsdCk6CisgICAgICAgICAgICAgICAgIyBZaWVsZGluZyBhIGdlbmVyYXRvciBpcyBqdXN0IHdyb25nLgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGVwLCBOb25lLAorICAgICAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAneWllbGQgd2FzIHVzZWQgaW5zdGVhZCBvZiB5aWVsZCBmcm9tIGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAnZ2VuZXJhdG9yIGluIHRhc2sgeyFyfSB3aXRoIHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgcmVzdWx0KSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgWWllbGRpbmcgc29tZXRoaW5nIGVsc2UgaXMgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZXAsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICdUYXNrIGdvdCBiYWQgeWllbGQ6IHshcn0nLmZvcm1hdChyZXN1bHQpKSkKKyAgICAgICAgc2VsZiA9IE5vbmUKKworICAgIGRlZiBfd2FrZXVwKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZnV0dXJlLnJlc3VsdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgIyBUaGlzIG1heSBhbHNvIGJlIGEgY2FuY2VsbGF0aW9uLgorICAgICAgICAgICAgc2VsZi5fc3RlcChOb25lLCBleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdGVwKHZhbHVlLCBOb25lKQorICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworCisjIHdhaXQoKSBhbmQgYXNfY29tcGxldGVkKCkgc2ltaWxhciB0byB0aG9zZSBpbiBQRVAgMzE0OC4KKworRklSU1RfQ09NUExFVEVEID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0NPTVBMRVRFRAorRklSU1RfRVhDRVBUSU9OID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0VYQ0VQVElPTgorQUxMX0NPTVBMRVRFRCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5BTExfQ09NUExFVEVECisKKworQGNvcm91dGluZQorZGVmIHdhaXQoZnMsICosIGxvb3A9Tm9uZSwgdGltZW91dD1Ob25lLCByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKToKKyAgICAiIiJXYWl0IGZvciB0aGUgRnV0dXJlcyBhbmQgY29yb3V0aW5lcyBnaXZlbiBieSBmcyB0byBjb21wbGV0ZS4KKworICAgIENvcm91dGluZXMgd2lsbCBiZSB3cmFwcGVkIGluIFRhc2tzLgorCisgICAgUmV0dXJucyB0d28gc2V0cyBvZiBGdXR1cmU6IChkb25lLCBwZW5kaW5nKS4KKworICAgIFVzYWdlOgorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChmcykKKworICAgIE5vdGU6IFRoaXMgZG9lcyBub3QgcmFpc2UgVGltZW91dEVycm9yISBGdXR1cmVzIHRoYXQgYXJlbid0IGRvbmUKKyAgICB3aGVuIHRoZSB0aW1lb3V0IG9jY3VycyBhcmUgcmV0dXJuZWQgaW4gdGhlIHNlY29uZCBzZXQuCisgICAgIiIiCisgICAgaWYgbm90IGZzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXQgb2YgY29yb3V0aW5lcy9GdXR1cmVzIGlzIGVtcHR5LicpCisKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZnMgPSBzZXQoYXN5bmMoZiwgbG9vcD1sb29wKSBmb3IgZiBpbiBmcykKKworICAgIGlmIHJldHVybl93aGVuIG5vdCBpbiAoRklSU1RfQ09NUExFVEVELCBGSVJTVF9FWENFUFRJT04sIEFMTF9DT01QTEVURUQpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHJldHVybl93aGVuIHZhbHVlOiB7fScuZm9ybWF0KHJldHVybl93aGVuKSkKKyAgICByZXR1cm4gKHlpZWxkIGZyb20gX3dhaXQoZnMsIHRpbWVvdXQsIHJldHVybl93aGVuLCBsb29wKSkKKworCitkZWYgX3JlbGVhc2Vfd2FpdGVyKHdhaXRlciwgdmFsdWU9VHJ1ZSwgKmFyZ3MpOgorICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdCh2YWx1ZSkKKworCitAY29yb3V0aW5lCitkZWYgd2FpdF9mb3IoZnV0LCB0aW1lb3V0LCAqLCBsb29wPU5vbmUpOgorICAgICIiIldhaXQgZm9yIHRoZSBzaW5nbGUgRnV0dXJlIG9yIGNvcm91dGluZSB0byBjb21wbGV0ZSwgd2l0aCB0aW1lb3V0LgorCisgICAgQ29yb3V0aW5lIHdpbGwgYmUgd3JhcHBlZCBpbiBUYXNrLgorCisgICAgUmV0dXJucyByZXN1bHQgb2YgdGhlIEZ1dHVyZSBvciBjb3JvdXRpbmUuICBSYWlzZXMgVGltZW91dEVycm9yIHdoZW4KKyAgICB0aW1lb3V0IG9jY3Vycy4KKworICAgIFVzYWdlOgorCisgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0X2ZvcihmdXQsIDEwLjApCisKKyAgICAiIiIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgIHRpbWVvdXRfaGFuZGxlID0gbG9vcC5jYWxsX2xhdGVyKHRpbWVvdXQsIF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyLCBGYWxzZSkKKyAgICBjYiA9IGZ1bmN0b29scy5wYXJ0aWFsKF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyLCBUcnVlKQorCisgICAgZnV0ID0gYXN5bmMoZnV0LCBsb29wPWxvb3ApCisgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorCisgICAgdHJ5OgorICAgICAgICBpZiAoeWllbGQgZnJvbSB3YWl0ZXIpOgorICAgICAgICAgICAgcmV0dXJuIGZ1dC5yZXN1bHQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IoKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbWVvdXRfaGFuZGxlLmNhbmNlbCgpCisKKworQGNvcm91dGluZQorZGVmIF93YWl0KGZzLCB0aW1lb3V0LCByZXR1cm5fd2hlbiwgbG9vcCk6CisgICAgIiIiSW50ZXJuYWwgaGVscGVyIGZvciB3YWl0KCkgYW5kIF93YWl0X2ZvcigpLgorCisgICAgVGhlIGZzIGFyZ3VtZW50IG11c3QgYmUgYSBjb2xsZWN0aW9uIG9mIEZ1dHVyZXMuCisgICAgIiIiCisgICAgYXNzZXJ0IGZzLCAnU2V0IG9mIEZ1dHVyZXMgaXMgZW1wdHkuJworICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICB0aW1lb3V0X2hhbmRsZSA9IE5vbmUKKyAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICB0aW1lb3V0X2hhbmRsZSA9IGxvb3AuY2FsbF9sYXRlcih0aW1lb3V0LCBfcmVsZWFzZV93YWl0ZXIsIHdhaXRlcikKKyAgICBjb3VudGVyID0gbGVuKGZzKQorCisgICAgZGVmIF9vbl9jb21wbGV0aW9uKGYpOgorICAgICAgICBub25sb2NhbCBjb3VudGVyCisgICAgICAgIGNvdW50ZXIgLT0gMQorICAgICAgICBpZiAoY291bnRlciA8PSAwIG9yCisgICAgICAgICAgICByZXR1cm5fd2hlbiA9PSBGSVJTVF9DT01QTEVURUQgb3IKKyAgICAgICAgICAgIHJldHVybl93aGVuID09IEZJUlNUX0VYQ0VQVElPTiBhbmQgKG5vdCBmLmNhbmNlbGxlZCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5leGNlcHRpb24oKSBpcyBub3QgTm9uZSkpOgorICAgICAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KEZhbHNlKQorCisgICAgZm9yIGYgaW4gZnM6CisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soX29uX2NvbXBsZXRpb24pCisKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aW1lb3V0X2hhbmRsZS5jYW5jZWwoKQorCisgICAgZG9uZSwgcGVuZGluZyA9IHNldCgpLCBzZXQoKQorICAgIGZvciBmIGluIGZzOgorICAgICAgICBmLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorICAgICAgICBpZiBmLmRvbmUoKToKKyAgICAgICAgICAgIGRvbmUuYWRkKGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwZW5kaW5nLmFkZChmKQorICAgIHJldHVybiBkb25lLCBwZW5kaW5nCisKKworIyBUaGlzIGlzICpub3QqIGEgQGNvcm91dGluZSEgIEl0IGlzIGp1c3QgYW4gaXRlcmF0b3IgKHlpZWxkaW5nIEZ1dHVyZXMpLgorZGVmIGFzX2NvbXBsZXRlZChmcywgKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUpOgorICAgICIiIlJldHVybiBhbiBpdGVyYXRvciB3aG9zZSB2YWx1ZXMsIHdoZW4gd2FpdGVkIGZvciwgYXJlIEZ1dHVyZXMuCisKKyAgICBUaGlzIGRpZmZlcnMgZnJvbSBQRVAgMzE0ODsgdGhlIHByb3BlciB3YXkgdG8gdXNlIHRoaXMgaXM6CisKKyAgICAgICAgZm9yIGYgaW4gYXNfY29tcGxldGVkKGZzKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZiAgIyBUaGUgJ3lpZWxkIGZyb20nIG1heSByYWlzZS4KKyAgICAgICAgICAgICMgVXNlIHJlc3VsdC4KKworICAgIFJhaXNlcyBUaW1lb3V0RXJyb3IgaWYgdGhlIHRpbWVvdXQgb2NjdXJzIGJlZm9yZSBhbGwgRnV0dXJlcyBhcmUKKyAgICBkb25lLgorCisgICAgTm90ZTogVGhlIGZ1dHVyZXMgJ2YnIGFyZSBub3QgbmVjZXNzYXJpbHkgbWVtYmVycyBvZiBmcy4KKyAgICAiIiIKKyAgICBsb29wID0gbG9vcCBpZiBsb29wIGlzIG5vdCBOb25lIGVsc2UgZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICBkZWFkbGluZSA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbG9vcC50aW1lKCkgKyB0aW1lb3V0CisgICAgdG9kbyA9IHNldChhc3luYyhmLCBsb29wPWxvb3ApIGZvciBmIGluIGZzKQorICAgIGNvbXBsZXRlZCA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX3dhaXRfZm9yX29uZSgpOgorICAgICAgICB3aGlsZSBub3QgY29tcGxldGVkOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIGRlYWRsaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIGxvb3AudGltZSgpCisgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGZ1dHVyZXMuVGltZW91dEVycm9yKCkKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIF93YWl0KAorICAgICAgICAgICAgICAgIHRvZG8sIHRpbWVvdXQsIEZJUlNUX0NPTVBMRVRFRCwgbG9vcCkKKyAgICAgICAgICAgICMgTXVsdGlwbGUgY2FsbGVycyBtaWdodCBiZSB3YWl0aW5nIGZvciB0aGUgc2FtZSBldmVudHMKKyAgICAgICAgICAgICMgYW5kIGdldHRpbmcgdGhlIHNhbWUgb3V0Y29tZS4gIERlZHVwZSBieSB1cGRhdGluZyB0b2RvLgorICAgICAgICAgICAgZm9yIGYgaW4gZG9uZToKKyAgICAgICAgICAgICAgICBpZiBmIGluIHRvZG86CisgICAgICAgICAgICAgICAgICAgIHRvZG8ucmVtb3ZlKGYpCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZC5hcHBlbmQoZikKKyAgICAgICAgZiA9IGNvbXBsZXRlZC5wb3BsZWZ0KCkKKyAgICAgICAgcmV0dXJuIGYucmVzdWx0KCkgICMgTWF5IHJhaXNlLgorCisgICAgZm9yIF8gaW4gcmFuZ2UobGVuKHRvZG8pKToKKyAgICAgICAgeWllbGQgX3dhaXRfZm9yX29uZSgpCisKKworQGNvcm91dGluZQorZGVmIHNsZWVwKGRlbGF5LCByZXN1bHQ9Tm9uZSwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJDb3JvdXRpbmUgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgYSBnaXZlbiB0aW1lIChpbiBzZWNvbmRzKS4iIiIKKyAgICBmdXR1cmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgaCA9IGZ1dHVyZS5fbG9vcC5jYWxsX2xhdGVyKGRlbGF5LCBmdXR1cmUuc2V0X3Jlc3VsdCwgcmVzdWx0KQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dHVyZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBoLmNhbmNlbCgpCisKKworZGVmIGFzeW5jKGNvcm9fb3JfZnV0dXJlLCAqLCBsb29wPU5vbmUpOgorICAgICIiIldyYXAgYSBjb3JvdXRpbmUgaW4gYSBmdXR1cmUuCisKKyAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBGdXR1cmUsIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5LgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoY29yb19vcl9mdXR1cmUsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZSBhbmQgbG9vcCBpcyBub3QgY29yb19vcl9mdXR1cmUuX2xvb3A6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsb29wIGFyZ3VtZW50IG11c3QgYWdyZWUgd2l0aCBGdXR1cmUnKQorICAgICAgICByZXR1cm4gY29yb19vcl9mdXR1cmUKKyAgICBlbGlmIGlzY29yb3V0aW5lKGNvcm9fb3JfZnV0dXJlKToKKyAgICAgICAgcmV0dXJuIFRhc2soY29yb19vcl9mdXR1cmUsIGxvb3A9bG9vcCkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgRnV0dXJlIG9yIGNvcm91dGluZSBpcyByZXF1aXJlZCcpCisKKworY2xhc3MgX0dhdGhlcmluZ0Z1dHVyZShmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiSGVscGVyIGZvciBnYXRoZXIoKS4KKworICAgIFRoaXMgb3ZlcnJpZGVzIGNhbmNlbCgpIHRvIGNhbmNlbCBhbGwgdGhlIGNoaWxkcmVuIGFuZCBhY3QgbW9yZQorICAgIGxpa2UgVGFzay5jYW5jZWwoKSwgd2hpY2ggZG9lc24ndCBpbW1lZGlhdGVseSBtYXJrIGl0c2VsZiBhcworICAgIGNhbmNlbGxlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGlsZHJlbiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gY2hpbGRyZW4KKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLl9jaGlsZHJlbjoKKyAgICAgICAgICAgIGNoaWxkLmNhbmNlbCgpCisgICAgICAgIHJldHVybiBUcnVlCisKKworZGVmIGdhdGhlcigqY29yb3Nfb3JfZnV0dXJlcywgbG9vcD1Ob25lLCByZXR1cm5fZXhjZXB0aW9ucz1GYWxzZSk6CisgICAgIiIiUmV0dXJuIGEgZnV0dXJlIGFnZ3JlZ2F0aW5nIHJlc3VsdHMgZnJvbSB0aGUgZ2l2ZW4gY29yb3V0aW5lcworICAgIG9yIGZ1dHVyZXMuCisKKyAgICBBbGwgZnV0dXJlcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGV2ZW50IGxvb3AuICBJZiBhbGwgdGhlIHRhc2tzIGFyZQorICAgIGRvbmUgc3VjY2Vzc2Z1bGx5LCB0aGUgcmV0dXJuZWQgZnV0dXJlJ3MgcmVzdWx0IGlzIHRoZSBsaXN0IG9mCisgICAgcmVzdWx0cyAoaW4gdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSwgbm90IG5lY2Vzc2FyaWx5CisgICAgdGhlIG9yZGVyIG9mIHJlc3VsdHMgYXJyaXZhbCkuICBJZiAqcmVzdWx0X2V4Y2VwdGlvbiogaXMgVHJ1ZSwKKyAgICBleGNlcHRpb25zIGluIHRoZSB0YXNrcyBhcmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBzdWNjZXNzZnVsCisgICAgcmVzdWx0cywgYW5kIGdhdGhlcmVkIGluIHRoZSByZXN1bHQgbGlzdDsgb3RoZXJ3aXNlLCB0aGUgZmlyc3QKKyAgICByYWlzZWQgZXhjZXB0aW9uIHdpbGwgYmUgaW1tZWRpYXRlbHkgcHJvcGFnYXRlZCB0byB0aGUgcmV0dXJuZWQKKyAgICBmdXR1cmUuCisKKyAgICBDYW5jZWxsYXRpb246IGlmIHRoZSBvdXRlciBGdXR1cmUgaXMgY2FuY2VsbGVkLCBhbGwgY2hpbGRyZW4gKHRoYXQKKyAgICBoYXZlIG5vdCBjb21wbGV0ZWQgeWV0KSBhcmUgYWxzbyBjYW5jZWxsZWQuICBJZiBhbnkgY2hpbGQgaXMKKyAgICBjYW5jZWxsZWQsIHRoaXMgaXMgdHJlYXRlZCBhcyBpZiBpdCByYWlzZWQgQ2FuY2VsbGVkRXJyb3IgLS0KKyAgICB0aGUgb3V0ZXIgRnV0dXJlIGlzICpub3QqIGNhbmNlbGxlZCBpbiB0aGlzIGNhc2UuICAoVGhpcyBpcyB0bworICAgIHByZXZlbnQgdGhlIGNhbmNlbGxhdGlvbiBvZiBvbmUgY2hpbGQgdG8gY2F1c2Ugb3RoZXIgY2hpbGRyZW4gdG8KKyAgICBiZSBjYW5jZWxsZWQuKQorICAgICIiIgorICAgIGNoaWxkcmVuID0gW2FzeW5jKGZ1dCwgbG9vcD1sb29wKSBmb3IgZnV0IGluIGNvcm9zX29yX2Z1dHVyZXNdCisgICAgbiA9IGxlbihjaGlsZHJlbikKKyAgICBpZiBuID09IDA6CisgICAgICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBvdXRlci5zZXRfcmVzdWx0KFtdKQorICAgICAgICByZXR1cm4gb3V0ZXIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBjaGlsZHJlblswXS5fbG9vcAorICAgIGZvciBmdXQgaW4gY2hpbGRyZW46CisgICAgICAgIGlmIGZ1dC5fbG9vcCBpcyBub3QgbG9vcDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZ1dHVyZXMgYXJlIHRpZWQgdG8gZGlmZmVyZW50IGV2ZW50IGxvb3BzIikKKyAgICBvdXRlciA9IF9HYXRoZXJpbmdGdXR1cmUoY2hpbGRyZW4sIGxvb3A9bG9vcCkKKyAgICBuZmluaXNoZWQgPSAwCisgICAgcmVzdWx0cyA9IFtOb25lXSAqIG4KKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpLCBmdXQpOgorICAgICAgICBub25sb2NhbCBuZmluaXNoZWQKKyAgICAgICAgaWYgb3V0ZXIuX3N0YXRlICE9IGZ1dHVyZXMuX1BFTkRJTkc6CisgICAgICAgICAgICBpZiBmdXQuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgICAgICBmdXQuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBmdXQuX3N0YXRlID09IGZ1dHVyZXMuX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJlcyA9IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IoKQorICAgICAgICAgICAgaWYgbm90IHJldHVybl9leGNlcHRpb25zOgorICAgICAgICAgICAgICAgIG91dGVyLnNldF9leGNlcHRpb24ocmVzKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmIGZ1dC5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzID0gZnV0LmV4Y2VwdGlvbigpICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlmIG5vdCByZXR1cm5fZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyA9IGZ1dC5fcmVzdWx0CisgICAgICAgIHJlc3VsdHNbaV0gPSByZXMKKyAgICAgICAgbmZpbmlzaGVkICs9IDEKKyAgICAgICAgaWYgbmZpbmlzaGVkID09IG46CisgICAgICAgICAgICBvdXRlci5zZXRfcmVzdWx0KHJlc3VsdHMpCisKKyAgICBmb3IgaSwgZnV0IGluIGVudW1lcmF0ZShjaGlsZHJlbik6CisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhmdW5jdG9vbHMucGFydGlhbChfZG9uZV9jYWxsYmFjaywgaSkpCisgICAgcmV0dXJuIG91dGVyCisKKworZGVmIHNoaWVsZChhcmcsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV2FpdCBmb3IgYSBmdXR1cmUsIHNoaWVsZGluZyBpdCBmcm9tIGNhbmNlbGxhdGlvbi4KKworICAgIFRoZSBzdGF0ZW1lbnQKKworICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKworICAgIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgc3RhdGVtZW50CisKKyAgICAgICAgcmVzID0geWllbGQgZnJvbSBzb21ldGhpbmcoKQorCisgICAgKmV4Y2VwdCogdGhhdCBpZiB0aGUgY29yb3V0aW5lIGNvbnRhaW5pbmcgaXQgaXMgY2FuY2VsbGVkLCB0aGUKKyAgICB0YXNrIHJ1bm5pbmcgaW4gc29tZXRoaW5nKCkgaXMgbm90IGNhbmNlbGxlZC4gIEZyb20gdGhlIFBPViBvZgorICAgIHNvbWV0aGluZygpLCB0aGUgY2FuY2VsbGF0aW9uIGRpZCBub3QgaGFwcGVuLiAgQnV0IGl0cyBjYWxsZXIgaXMKKyAgICBzdGlsbCBjYW5jZWxsZWQsIHNvIHRoZSB5aWVsZC1mcm9tIGV4cHJlc3Npb24gc3RpbGwgcmFpc2VzCisgICAgQ2FuY2VsbGVkRXJyb3IuICBOb3RlOiBJZiBzb21ldGhpbmcoKSBpcyBjYW5jZWxsZWQgYnkgb3RoZXIgbWVhbnMKKyAgICB0aGlzIHdpbGwgc3RpbGwgY2FuY2VsIHNoaWVsZCgpLgorCisgICAgSWYgeW91IHdhbnQgdG8gY29tcGxldGVseSBpZ25vcmUgY2FuY2VsbGF0aW9uIChub3QgcmVjb21tZW5kZWQpCisgICAgeW91IGNhbiBjb21iaW5lIHNoaWVsZCgpIHdpdGggYSB0cnkvZXhjZXB0IGNsYXVzZSwgYXMgZm9sbG93czoKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKyAgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICIiIgorICAgIGlubmVyID0gYXN5bmMoYXJnLCBsb29wPWxvb3ApCisgICAgaWYgaW5uZXIuZG9uZSgpOgorICAgICAgICAjIFNob3J0Y3V0LgorICAgICAgICByZXR1cm4gaW5uZXIKKyAgICBsb29wID0gaW5uZXIuX2xvb3AKKyAgICBvdXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpbm5lcik6CisgICAgICAgIGlmIG91dGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgIyBNYXJrIGlubmVyJ3MgcmVzdWx0IGFzIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlubmVyLmNhbmNlbGxlZCgpIG9yIGlubmVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaW5uZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBvdXRlci5jYW5jZWwoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhjID0gaW5uZXIuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0ZXIuc2V0X3Jlc3VsdChpbm5lci5yZXN1bHQoKSkKKworICAgIGlubmVyLmFkZF9kb25lX2NhbGxiYWNrKF9kb25lX2NhbGxiYWNrKQorICAgIHJldHVybiBvdXRlcgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGVzdF91dGlscy5weSBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3OGRkMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKQEAgLTAsMCArMSwyNjIgQEAKKyIiIlV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMuIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbworaW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2Zyb20gd3NnaXJlZi5zaW1wbGVfc2VydmVyIGltcG9ydCBtYWtlX3NlcnZlciwgV1NHSVJlcXVlc3RIYW5kbGVyLCBXU0dJU2VydmVyCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKKworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfdXRpbHMgaW1wb3J0IHNvY2tldHBhaXIKK2Vsc2U6CisgICAgZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldHBhaXIgICMgcHJhZ21hOiBubyBjb3ZlcgorCisKK2RlZiBkdW1teV9zc2xfY29udGV4dCgpOgorICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorCisKK2RlZiBydW5fYnJpZWZseShsb29wKToKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIG9uY2UoKToKKyAgICAgICAgcGFzcworICAgIGdlbiA9IG9uY2UoKQorICAgIHQgPSB0YXNrcy5UYXNrKGdlbiwgbG9vcD1sb29wKQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICBmaW5hbGx5OgorICAgICAgICBnZW4uY2xvc2UoKQorCisKK2RlZiBydW5fdW50aWwobG9vcCwgcHJlZCwgdGltZW91dD1Ob25lKToKKyAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorICAgIHdoaWxlIG5vdCBwcmVkKCk6CisgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Muc2xlZXAodGltZW91dCwgbG9vcD1sb29wKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJ1bl9icmllZmx5KGxvb3ApCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgcnVuX29uY2UobG9vcCk6CisgICAgIiIibG9vcC5zdG9wKCkgc2NoZWR1bGVzIF9yYWlzZV9zdG9wX2Vycm9yKCkKKyAgICBhbmQgcnVuX2ZvcmV2ZXIoKSBydW5zIHVudGlsIF9yYWlzZV9zdG9wX2Vycm9yKCkgY2FsbGJhY2suCisgICAgdGhpcyB3b250IHdvcmsgaWYgdGVzdCB3YWl0cyBmb3Igc29tZSBJTyBldmVudHMsIGJlY2F1c2UKKyAgICBfcmFpc2Vfc3RvcF9lcnJvcigpIHJ1bnMgYmVmb3JlIGFueSBvZiBpbyBldmVudHMgY2FsbGJhY2tzLgorICAgICIiIgorICAgIGxvb3Auc3RvcCgpCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBydW5fdGVzdF9zZXJ2ZXIoKiwgaG9zdD0nMTI3LjAuMC4xJywgcG9ydD0wLCB1c2Vfc3NsPUZhbHNlKToKKworICAgIGNsYXNzIFNpbGVudFdTR0lSZXF1ZXN0SGFuZGxlcihXU0dJUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBkZWYgZ2V0X3N0ZGVycihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBpby5TdHJpbmdJTygpCisKKyAgICAgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICAgICAgcGFzcworCisgICAgY2xhc3MgU2lsZW50V1NHSVNlcnZlcihXU0dJU2VydmVyKToKKyAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBTU0xXU0dJU2VydmVyKFNpbGVudFdTR0lTZXJ2ZXIpOgorICAgICAgICBkZWYgZmluaXNoX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAgICAgIyBUaGUgcmVsYXRpdmUgbG9jYXRpb24gb2Ygb3VyIHRlc3QgZGlyZWN0b3J5ICh3aGljaAorICAgICAgICAgICAgIyBjb250YWlucyB0aGUgc2FtcGxlIGtleSBhbmQgY2VydGlmaWNhdGUgZmlsZXMpIGRpZmZlcnMKKyAgICAgICAgICAgICMgYmV0d2VlbiB0aGUgc3RkbGliIGFuZCBzdGFuZC1hbG9uZSBUdWxpcC9hc3luY2lvLgorICAgICAgICAgICAgIyBQcmVmZXIgb3VyIG93biBpZiB3ZSBjYW4gZmluZCBpdC4KKyAgICAgICAgICAgIGhlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJ3Rlc3RzJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGhlcmUpOgorICAgICAgICAgICAgICAgIGhlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0JywgJ3Rlc3RfYXN5bmNpbycpCisgICAgICAgICAgICBrZXlmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzYW1wbGUua2V5JykKKyAgICAgICAgICAgIGNlcnRmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzYW1wbGUuY3J0JykKKyAgICAgICAgICAgIHNzb2NrID0gc3NsLndyYXBfc29ja2V0KHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5SZXF1ZXN0SGFuZGxlckNsYXNzKHNzb2NrLCBjbGllbnRfYWRkcmVzcywgc2VsZikKKyAgICAgICAgICAgICAgICBzc29jay5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIG1heWJlIHNvY2tldCBoYXMgYmVlbiBjbG9zZWQgYnkgcGVlcgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBhcHAoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgorICAgICAgICBzdGF0dXMgPSAnMjAwIE9LJworICAgICAgICBoZWFkZXJzID0gWygnQ29udGVudC10eXBlJywgJ3RleHQvcGxhaW4nKV0KKyAgICAgICAgc3RhcnRfcmVzcG9uc2Uoc3RhdHVzLCBoZWFkZXJzKQorICAgICAgICByZXR1cm4gW2InVGVzdCBtZXNzYWdlJ10KKworICAgICMgUnVuIHRoZSB0ZXN0IFdTR0kgc2VydmVyIGluIGEgc2VwYXJhdGUgdGhyZWFkIGluIG9yZGVyIG5vdCB0bworICAgICMgaW50ZXJmZXJlIHdpdGggZXZlbnQgaGFuZGxpbmcgaW4gdGhlIG1haW4gdGhyZWFkCisgICAgc2VydmVyX2NsYXNzID0gU1NMV1NHSVNlcnZlciBpZiB1c2Vfc3NsIGVsc2UgU2lsZW50V1NHSVNlcnZlcgorICAgIGh0dHBkID0gbWFrZV9zZXJ2ZXIoaG9zdCwgcG9ydCwgYXBwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2NsYXNzLCBTaWxlbnRXU0dJUmVxdWVzdEhhbmRsZXIpCisgICAgaHR0cGQuYWRkcmVzcyA9IGh0dHBkLnNlcnZlcl9hZGRyZXNzCisgICAgc2VydmVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWh0dHBkLnNlcnZlX2ZvcmV2ZXIpCisgICAgc2VydmVyX3RocmVhZC5zdGFydCgpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBodHRwZAorICAgIGZpbmFsbHk6CisgICAgICAgIGh0dHBkLnNodXRkb3duKCkKKyAgICAgICAgaHR0cGQuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgc2VydmVyX3RocmVhZC5qb2luKCkKKworCitkZWYgbWFrZV90ZXN0X3Byb3RvY29sKGJhc2UpOgorICAgIGRjdCA9IHt9CisgICAgZm9yIG5hbWUgaW4gZGlyKGJhc2UpOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ19fJykgYW5kIG5hbWUuZW5kc3dpdGgoJ19fJyk6CisgICAgICAgICAgICAjIHNraXAgbWFnaWMgbmFtZXMKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGRjdFtuYW1lXSA9IHVuaXR0ZXN0Lm1vY2suTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkKKyAgICByZXR1cm4gdHlwZSgnVGVzdFByb3RvY29sJywgKGJhc2UsKSArIGJhc2UuX19iYXNlc19fLCBkY3QpKCkKKworCitjbGFzcyBUZXN0U2VsZWN0b3Ioc2VsZWN0b3JzLkJhc2VTZWxlY3Rvcik6CisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICByZXR1cm4gW10KKworCitjbGFzcyBUZXN0TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKyAgICAiIiJMb29wIGZvciB1bml0dGVzdHMuCisKKyAgICBJdCBtYW5hZ2VzIHNlbGYgdGltZSBkaXJlY3RseS4KKyAgICBJZiBzb21ldGhpbmcgc2NoZWR1bGVkIHRvIGJlIGV4ZWN1dGVkIGxhdGVyIHRoZW4KKyAgICBvbiBuZXh0IGxvb3AgaXRlcmF0aW9uIGFmdGVyIGFsbCByZWFkeSBoYW5kbGVycyBkb25lCisgICAgZ2VuZXJhdG9yIHBhc3NlZCB0byBfX2luaXRfXyBpcyBjYWxsaW5nLgorCisgICAgR2VuZXJhdG9yIHNob3VsZCBiZSBsaWtlIHRoaXM6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgLi4uCisgICAgICAgICAgICB3aGVuID0geWllbGQgLi4uCisgICAgICAgICAgICAuLi4gPSB5aWVsZCB0aW1lX2FkdmFuY2UKKworICAgIFZhbHVlIHJldHVuZWQgYnkgeWllbGQgaXMgYWJzb2x1dGUgdGltZSBvZiBuZXh0IHNjaGVkdWxlZCBoYW5kbGVyLgorICAgIFZhbHVlIHBhc3NlZCB0byB5aWVsZCBpcyB0aW1lIGFkdmFuY2UgdG8gbW92ZSBsb29wJ3MgdGltZSBmb3J3YXJkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAgICAgICAgaWYgZ2VuIGlzIE5vbmU6CisgICAgICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gVHJ1ZQorCisgICAgICAgIHNlbGYuX2dlbiA9IGdlbigpCisgICAgICAgIG5leHQoc2VsZi5fZ2VuKQorICAgICAgICBzZWxmLl90aW1lID0gMAorICAgICAgICBzZWxmLl90aW1lcnMgPSBbXQorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IFRlc3RTZWxlY3RvcigpCisKKyAgICAgICAgc2VsZi5yZWFkZXJzID0ge30KKyAgICAgICAgc2VsZi53cml0ZXJzID0ge30KKyAgICAgICAgc2VsZi5yZXNldF9jb3VudGVycygpCisKKyAgICBkZWYgdGltZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWUKKworICAgIGRlZiBhZHZhbmNlX3RpbWUoc2VsZiwgYWR2YW5jZSk6CisgICAgICAgICIiIk1vdmUgdGVzdCB0aW1lIGZvcndhcmQuIiIiCisgICAgICAgIGlmIGFkdmFuY2U6CisgICAgICAgICAgICBzZWxmLl90aW1lICs9IGFkdmFuY2UKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2hlY2tfb25fY2xvc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZ2VuLnNlbmQoMCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVGltZSBnZW5lcmF0b3IgaXMgbm90IGZpbmlzaGVkIikKKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLnJlYWRlcnNbZmRdID0gZXZlbnRzLm1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorCisgICAgZGVmIHJlbW92ZV9yZWFkZXIoc2VsZiwgZmQpOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXJfY291bnRbZmRdICs9IDEKKyAgICAgICAgaWYgZmQgaW4gc2VsZi5yZWFkZXJzOgorICAgICAgICAgICAgZGVsIHNlbGYucmVhZGVyc1tmZF0KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBhc3NlcnRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBhc3NlcnQgZmQgaW4gc2VsZi5yZWFkZXJzLCAnZmQge30gaXMgbm90IHJlZ2lzdGVyZWQnLmZvcm1hdChmZCkKKyAgICAgICAgaGFuZGxlID0gc2VsZi5yZWFkZXJzW2ZkXQorICAgICAgICBhc3NlcnQgaGFuZGxlLl9jYWxsYmFjayA9PSBjYWxsYmFjaywgJ3shcn0gIT0geyFyfScuZm9ybWF0KAorICAgICAgICAgICAgaGFuZGxlLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2FyZ3MgPT0gYXJncywgJ3shcn0gIT0geyFyfScuZm9ybWF0KAorICAgICAgICAgICAgaGFuZGxlLl9hcmdzLCBhcmdzKQorCisgICAgZGVmIGFkZF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYud3JpdGVyc1tmZF0gPSBldmVudHMubWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcl9jb3VudFtmZF0gKz0gMQorICAgICAgICBpZiBmZCBpbiBzZWxmLndyaXRlcnM6CisgICAgICAgICAgICBkZWwgc2VsZi53cml0ZXJzW2ZkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFzc2VydF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBmZCBpbiBzZWxmLndyaXRlcnMsICdmZCB7fSBpcyBub3QgcmVnaXN0ZXJlZCcuZm9ybWF0KGZkKQorICAgICAgICBoYW5kbGUgPSBzZWxmLndyaXRlcnNbZmRdCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2NhbGxiYWNrID09IGNhbGxiYWNrLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fYXJncyA9PSBhcmdzLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgcmVzZXRfY291bnRlcnMoc2VsZik6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcl9jb3VudCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyX2NvdW50ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50KQorCisgICAgZGVmIF9ydW5fb25jZShzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fcnVuX29uY2UoKQorICAgICAgICBmb3Igd2hlbiBpbiBzZWxmLl90aW1lcnM6CisgICAgICAgICAgICBhZHZhbmNlID0gc2VsZi5fZ2VuLnNlbmQod2hlbikKKyAgICAgICAgICAgIHNlbGYuYWR2YW5jZV90aW1lKGFkdmFuY2UpCisgICAgICAgIHNlbGYuX3RpbWVycyA9IFtdCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLl90aW1lcnMuYXBwZW5kKHdoZW4pCisgICAgICAgIHJldHVybiBzdXBlcigpLmNhbGxfYXQod2hlbiwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkgYi9MaWIvYXN5bmNpby90cmFuc3BvcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNmIxODkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby90cmFuc3BvcnRzLnB5CkBAIC0wLDAgKzEsMjExIEBACisiIiJBYnN0cmFjdCBUcmFuc3BvcnQgY2xhc3MuIiIiCisKK19fYWxsX18gPSBbJ1JlYWRUcmFuc3BvcnQnLCAnV3JpdGVUcmFuc3BvcnQnLCAnVHJhbnNwb3J0J10KKworCitjbGFzcyBCYXNlVHJhbnNwb3J0OgorICAgICIiIkJhc2UgQUJDIGZvciB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dHJhPU5vbmUpOgorICAgICAgICBpZiBleHRyYSBpcyBOb25lOgorICAgICAgICAgICAgZXh0cmEgPSB7fQorICAgICAgICBzZWxmLl9leHRyYSA9IGV4dHJhCisKKyAgICBkZWYgZ2V0X2V4dHJhX2luZm8oc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiR2V0IG9wdGlvbmFsIHRyYW5zcG9ydCBpbmZvcm1hdGlvbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4dHJhLmdldChuYW1lLCBkZWZhdWx0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZXMgdGhlIHRyYW5zcG9ydC4KKworICAgICAgICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgZmx1c2hlZCBhc3luY2hyb25vdXNseS4gIE5vIG1vcmUgZGF0YQorICAgICAgICB3aWxsIGJlIHJlY2VpdmVkLiAgQWZ0ZXIgYWxsIGJ1ZmZlcmVkIGRhdGEgaXMgZmx1c2hlZCwgdGhlCisgICAgICAgIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGNhbGxlZAorICAgICAgICB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFJlYWRUcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiQUJDIGZvciByZWFkLW9ubHkgdHJhbnNwb3J0cy4iIiIKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICAiIiJQYXVzZSB0aGUgcmVjZWl2aW5nIGVuZC4KKworICAgICAgICBObyBkYXRhIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBwcm90b2NvbCdzIGRhdGFfcmVjZWl2ZWQoKQorICAgICAgICBtZXRob2QgdW50aWwgcmVzdW1lX3JlYWRpbmcoKSBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgICIiIlJlc3VtZSB0aGUgcmVjZWl2aW5nIGVuZC4KKworICAgICAgICBEYXRhIHJlY2VpdmVkIHdpbGwgb25jZSBhZ2FpbiBiZSBwYXNzZWQgdG8gdGhlIHByb3RvY29sJ3MKKyAgICAgICAgZGF0YV9yZWNlaXZlZCgpIG1ldGhvZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBXcml0ZVRyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKyAgICAiIiJBQkMgZm9yIHdyaXRlLW9ubHkgdHJhbnNwb3J0cy4iIiIKKworICAgIGRlZiBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhzZWxmLCBoaWdoPU5vbmUsIGxvdz1Ob25lKToKKyAgICAgICAgIiIiU2V0IHRoZSBoaWdoLSBhbmQgbG93LXdhdGVyIGxpbWl0cyBmb3Igd3JpdGUgZmxvdyBjb250cm9sLgorCisgICAgICAgIFRoZXNlIHR3byB2YWx1ZXMgY29udHJvbCB3aGVuIHRvIGNhbGwgdGhlIHByb3RvY29sJ3MKKyAgICAgICAgcGF1c2Vfd3JpdGluZygpIGFuZCByZXN1bWVfd3JpdGluZygpIG1ldGhvZHMuICBJZiBzcGVjaWZpZWQsCisgICAgICAgIHRoZSBsb3ctd2F0ZXIgbGltaXQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICAgICAgIGhpZ2gtd2F0ZXIgbGltaXQuICBOZWl0aGVyIHZhbHVlIGNhbiBiZSBuZWdhdGl2ZS4KKworICAgICAgICBUaGUgZGVmYXVsdHMgYXJlIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgSWYgb25seSB0aGUKKyAgICAgICAgaGlnaC13YXRlciBsaW1pdCBpcyBnaXZlbiwgdGhlIGxvdy13YXRlciBsaW1pdCBkZWZhdWx0cyB0byBhCisgICAgICAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgICAgaGlnaC13YXRlciBsaW1pdC4gIFNldHRpbmcgaGlnaCB0byB6ZXJvIGZvcmNlcyBsb3cgdG8gemVybyBhcworICAgICAgICB3ZWxsLCBhbmQgY2F1c2VzIHBhdXNlX3dyaXRpbmcoKSB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlCisgICAgICAgIGJ1ZmZlciBiZWNvbWVzIG5vbi1lbXB0eS4gIFNldHRpbmcgbG93IHRvIHplcm8gY2F1c2VzCisgICAgICAgIHJlc3VtZV93cml0aW5nKCkgdG8gYmUgY2FsbGVkIG9ubHkgb25jZSB0aGUgYnVmZmVyIGlzIGVtcHR5LgorICAgICAgICBVc2Ugb2YgemVybyBmb3IgZWl0aGVyIGxpbWl0IGlzIGdlbmVyYWxseSBzdWItb3B0aW1hbCBhcyBpdAorICAgICAgICByZWR1Y2VzIG9wcG9ydHVuaXRpZXMgZm9yIGRvaW5nIEkvTyBhbmQgY29tcHV0YXRpb24KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIHdyaXRlIGJ1ZmZlci4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJXcml0ZSBzb21lIGRhdGEgYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydC4KKworICAgICAgICBUaGlzIGRvZXMgbm90IGJsb2NrOyBpdCBidWZmZXJzIHRoZSBkYXRhIGFuZCBhcnJhbmdlcyBmb3IgaXQKKyAgICAgICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBsaXN0X29mX2RhdGEpOgorICAgICAgICAiIiJXcml0ZSBhIGxpc3QgKG9yIGFueSBpdGVyYWJsZSkgb2YgZGF0YSBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgY2FsbHMgd3JpdGUoKSBmb3IgZWFjaCBpdGVtIGluCisgICAgICAgIHRoZSBsaXN0L2l0ZXJhYmxlLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGRhdGEgaW4gbGlzdF9vZl9kYXRhOgorICAgICAgICAgICAgc2VsZi53cml0ZShkYXRhKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgIiIiQ2xvc2VzIHRoZSB3cml0ZSBlbmQgYWZ0ZXIgZmx1c2hpbmcgYnVmZmVyZWQgZGF0YS4KKworICAgICAgICAoVGhpcyBpcyBsaWtlIHR5cGluZyBeRCBpbnRvIGEgVU5JWCBwcm9ncmFtIHJlYWRpbmcgZnJvbSBzdGRpbi4pCisKKyAgICAgICAgRGF0YSBtYXkgc3RpbGwgYmUgcmVjZWl2ZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhpcyBwcm90b2NvbCBzdXBwb3J0cyB3cml0ZV9lb2YoKSwgRmFsc2UgaWYgbm90LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgICIiIkNsb3NlcyB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LgorCisgICAgICAgIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBsb3N0LiAgTm8gbW9yZSBkYXRhIHdpbGwgYmUgcmVjZWl2ZWQuCisgICAgICAgIFRoZSBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBiZQorICAgICAgICBjYWxsZWQgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBUcmFuc3BvcnQoUmVhZFRyYW5zcG9ydCwgV3JpdGVUcmFuc3BvcnQpOgorICAgICIiIkFCQyByZXByZXNlbnRpbmcgYSBiaWRpcmVjdGlvbmFsIHRyYW5zcG9ydC4KKworICAgIFRoZXJlIG1heSBiZSBzZXZlcmFsIGltcGxlbWVudGF0aW9ucywgYnV0IHR5cGljYWxseSwgdGhlIHVzZXIgZG9lcworICAgIG5vdCBpbXBsZW1lbnQgbmV3IHRyYW5zcG9ydHM7IHJhdGhlciwgdGhlIHBsYXRmb3JtIHByb3ZpZGVzIHNvbWUKKyAgICB1c2VmdWwgdHJhbnNwb3J0cyB0aGF0IGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUgcGxhdGZvcm0ncyBiZXN0CisgICAgcHJhY3RpY2VzLgorCisgICAgVGhlIHVzZXIgbmV2ZXIgaW5zdGFudGlhdGVzIGEgdHJhbnNwb3J0IGRpcmVjdGx5OyB0aGV5IGNhbGwgYQorICAgIHV0aWxpdHkgZnVuY3Rpb24sIHBhc3NpbmcgaXQgYSBwcm90b2NvbCBmYWN0b3J5IGFuZCBvdGhlcgorICAgIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBjcmVhdGUgdGhlIHRyYW5zcG9ydCBhbmQgcHJvdG9jb2wuICAoRS5nLgorICAgIEV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbigpIG9yIEV2ZW50TG9vcC5jcmVhdGVfc2VydmVyKCkuKQorCisgICAgVGhlIHV0aWxpdHkgZnVuY3Rpb24gd2lsbCBhc3luY2hyb25vdXNseSBjcmVhdGUgYSB0cmFuc3BvcnQgYW5kIGEKKyAgICBwcm90b2NvbCBhbmQgaG9vayB0aGVtIHVwIGJ5IGNhbGxpbmcgdGhlIHByb3RvY29sJ3MKKyAgICBjb25uZWN0aW9uX21hZGUoKSBtZXRob2QsIHBhc3NpbmcgaXQgdGhlIHRyYW5zcG9ydC4KKworICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIHJhaXNlcyBOb3RJbXBsZW1lbnRlZCBmb3IgZXZlcnkgbWV0aG9kCisgICAgZXhjZXB0IHdyaXRlbGluZXMoKSwgd2hpY2ggY2FsbHMgd3JpdGUoKSBpbiBhIGxvb3AuCisgICAgIiIiCisKKworY2xhc3MgRGF0YWdyYW1UcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiQUJDIGZvciBkYXRhZ3JhbSAoVURQKSB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIHNlbmR0byhzZWxmLCBkYXRhLCBhZGRyPU5vbmUpOgorICAgICAgICAiIiJTZW5kIGRhdGEgdG8gdGhlIHRyYW5zcG9ydC4KKworICAgICAgICBUaGlzIGRvZXMgbm90IGJsb2NrOyBpdCBidWZmZXJzIHRoZSBkYXRhIGFuZCBhcnJhbmdlcyBmb3IgaXQKKyAgICAgICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIGFkZHIgaXMgdGFyZ2V0IHNvY2tldCBhZGRyZXNzLgorICAgICAgICBJZiBhZGRyIGlzIE5vbmUgdXNlIHRhcmdldCBhZGRyZXNzIHBvaW50ZWQgb24gdHJhbnNwb3J0IGNyZWF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICAiIiJDbG9zZXMgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseS4KKworICAgICAgICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgICAgICBUaGUgcHJvdG9jb2wncyBjb25uZWN0aW9uX2xvc3QoKSBtZXRob2Qgd2lsbCAoZXZlbnR1YWxseSkgYmUKKyAgICAgICAgY2FsbGVkIHdpdGggTm9uZSBhcyBpdHMgYXJndW1lbnQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgU3VicHJvY2Vzc1RyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKworICAgIGRlZiBnZXRfcGlkKHNlbGYpOgorICAgICAgICAiIiJHZXQgc3VicHJvY2VzcyBpZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF9yZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICAiIiJHZXQgc3VicHJvY2VzcyByZXR1cm5jb2RlLgorCisgICAgICAgIFNlZSBhbHNvCisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi5yZXR1cm5jb2RlCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3BpcGVfdHJhbnNwb3J0KHNlbGYsIGZkKToKKyAgICAgICAgIiIiR2V0IHRyYW5zcG9ydCBmb3IgcGlwZSB3aXRoIG51bWJlciBmZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNlbmRfc2lnbmFsKHNlbGYsIHNpZ25hbCk6CisgICAgICAgICIiIlNlbmQgc2lnbmFsIHRvIHN1YnByb2Nlc3MuCisKKyAgICAgICAgU2VlIGFsc286CisgICAgICAgIGRvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2VzcyNzdWJwcm9jZXNzLlBvcGVuLnNlbmRfc2lnbmFsCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHRoZSBzdWJwcm9jZXNzLgorCisgICAgICAgIEFsaWFzIGZvciBjbG9zZSgpIG1ldGhvZC4KKworICAgICAgICBPbiBQb3NpeCBPU3MgdGhlIG1ldGhvZCBzZW5kcyBTSUdURVJNIHRvIHRoZSBzdWJwcm9jZXNzLgorICAgICAgICBPbiBXaW5kb3dzIHRoZSBXaW4zMiBBUEkgZnVuY3Rpb24gVGVybWluYXRlUHJvY2VzcygpCisgICAgICAgICBpcyBjYWxsZWQgdG8gc3RvcCB0aGUgc3VicHJvY2Vzcy4KKworICAgICAgICBTZWUgYWxzbzoKKyAgICAgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2VzcyNzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgICIiIktpbGwgdGhlIHN1YnByb2Nlc3MuCisKKyAgICAgICAgT24gUG9zaXggT1NzIHRoZSBmdW5jdGlvbiBzZW5kcyBTSUdLSUxMIHRvIHRoZSBzdWJwcm9jZXNzLgorICAgICAgICBPbiBXaW5kb3dzIGtpbGwoKSBpcyBhbiBhbGlhcyBmb3IgdGVybWluYXRlKCkuCisKKyAgICAgICAgU2VlIGFsc286CisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi5raWxsCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3VuaXhfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NWFkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weQpAQCAtMCwwICsxLDQyNSBAQAorIiIiU2VsZWN0b3IgZXZlbnRsb29wIGZvciBVbml4IHdpdGggc2lnbmFsIGhhbmRsaW5nLiIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBmY250bAoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RhdAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworCitmcm9tIC4gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSAuIGltcG9ydCBjb25zdGFudHMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IHByb3RvY29scworZnJvbSAuIGltcG9ydCBzZWxlY3Rvcl9ldmVudHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitfX2FsbF9fID0gWydTZWxlY3RvckV2ZW50TG9vcCcsICdTVERJTicsICdTVERPVVQnLCAnU1RERVJSJ10KKworU1RESU4gPSAwCitTVERPVVQgPSAxCitTVERFUlIgPSAyCisKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICByYWlzZSBJbXBvcnRFcnJvcignU2lnbmFscyBhcmUgbm90IHJlYWxseSBzdXBwb3J0ZWQgb24gV2luZG93cycpCisKKworY2xhc3MgU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JfZXZlbnRzLkJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisgICAgIiIiVW5peCBldmVudCBsb29wCisKKyAgICBBZGRzIHNpZ25hbCBoYW5kbGluZyB0byBTZWxlY3RvckV2ZW50TG9vcAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlbGVjdG9yPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNlbGVjdG9yKQorICAgICAgICBzZWxmLl9zaWduYWxfaGFuZGxlcnMgPSB7fQorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzZXMgPSB7fQorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByZXR1cm4gc29ja2V0LnNvY2tldHBhaXIoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBoYW5kbGVyID0gc2VsZi5fc2lnbmFsX2hhbmRsZXJzLmdldChzaWduYWwuU0lHQ0hMRCkKKyAgICAgICAgaWYgaGFuZGxlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdDSExEKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBhZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBZGQgYSBoYW5kbGVyIGZvciBhIHNpZ25hbC4gIFVOSVggb25seS4KKworICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICAgICAgIFJhaXNlIFJ1bnRpbWVFcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX3NpZ25hbChzaWcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc2V0X3dha2V1cF9mZCgpIHJhaXNlcyBWYWx1ZUVycm9yIGlmIHRoaXMgaXMgbm90IHRoZQorICAgICAgICAgICAgIyBtYWluIHRocmVhZC4gIEJ5IGNhbGxpbmcgaXQgZWFybHkgd2UgZW5zdXJlIHRoYXQgYW4KKyAgICAgICAgICAgICMgZXZlbnQgbG9vcCBydW5uaW5nIGluIGFub3RoZXIgdGhyZWFkIGNhbm5vdCBhZGQgYSBzaWduYWwKKyAgICAgICAgICAgICMgaGFuZGxlci4KKyAgICAgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHNlbGYuX2Nzb2NrLmZpbGVubygpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Ioc3RyKGV4YykpCisKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLm1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorICAgICAgICBzZWxmLl9zaWduYWxfaGFuZGxlcnNbc2lnXSA9IGhhbmRsZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnLCBzZWxmLl9oYW5kbGVfc2lnbmFsKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBkZWwgc2VsZi5fc2lnbmFsX2hhbmRsZXJzW3NpZ10KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9zaWduYWxfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCgtMSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBuZXhjOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnc2V0X3dha2V1cF9mZCgtMSkgZmFpbGVkOiAlcycsIG5leGMpCisKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FSU5WQUw6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzaWcge30gY2Fubm90IGJlIGNhdWdodCcuZm9ybWF0KHNpZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgX2hhbmRsZV9zaWduYWwoc2VsZiwgc2lnLCBhcmcpOgorICAgICAgICAiIiJJbnRlcm5hbCBoZWxwZXIgdGhhdCBpcyB0aGUgYWN0dWFsIHNpZ25hbCBoYW5kbGVyLiIiIgorICAgICAgICBoYW5kbGUgPSBzZWxmLl9zaWduYWxfaGFuZGxlcnMuZ2V0KHNpZykKKyAgICAgICAgaWYgaGFuZGxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gICMgQXNzdW1lIGl0J3Mgc29tZSByYWNlIGNvbmRpdGlvbi4KKyAgICAgICAgaWYgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWcpICAjIFJlbW92ZSBpdCBwcm9wZXJseS4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFja19zaWduYWxzYWZlKGhhbmRsZSkKKworICAgIGRlZiByZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgaGFuZGxlciBmb3IgYSBzaWduYWwuICBVTklYIG9ubHkuCisKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgYSBzaWduYWwgaGFuZGxlciB3YXMgcmVtb3ZlZCwgRmFsc2UgaWYgbm90LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfc2lnbmFsKHNpZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuX3NpZ25hbF9oYW5kbGVyc1tzaWddCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHNpZyA9PSBzaWduYWwuU0lHSU5UOgorICAgICAgICAgICAgaGFuZGxlciA9IHNpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoYW5kbGVyID0gc2lnbmFsLlNJR19ERkwKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZywgaGFuZGxlcikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3NpZyB7fSBjYW5ub3QgYmUgY2F1Z2h0Jy5mb3JtYXQoc2lnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBub3Qgc2VsZi5fc2lnbmFsX2hhbmRsZXJzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKC0xKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdzZXRfd2FrZXVwX2ZkKC0xKSBmYWlsZWQ6ICVzJywgZXhjKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2NoZWNrX3NpZ25hbChzZWxmLCBzaWcpOgorICAgICAgICAiIiJJbnRlcm5hbCBoZWxwZXIgdG8gdmFsaWRhdGUgYSBzaWduYWwuCisKKyAgICAgICAgUmFpc2UgVmFsdWVFcnJvciBpZiB0aGUgc2lnbmFsIG51bWJlciBpcyBpbnZhbGlkIG9yIHVuY2F0Y2hhYmxlLgorICAgICAgICBSYWlzZSBSdW50aW1lRXJyb3IgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHNldHRpbmcgdXAgdGhlIGhhbmRsZXIuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzaWcsIGludCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3NpZyBtdXN0IGJlIGFuIGludCwgbm90IHshcn0nLmZvcm1hdChzaWcpKQorCisgICAgICAgIGlmIG5vdCAoMSA8PSBzaWcgPCBzaWduYWwuTlNJRyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICdzaWcge30gb3V0IG9mIHJhbmdlKDEsIHt9KScuZm9ybWF0KHNpZywgc2lnbmFsLk5TSUcpKQorCisgICAgZGVmIF9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1VuaXhSZWFkUGlwZVRyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIGRlZiBfbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIF9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX3JlZ19zaWdjaGxkKCkKKyAgICAgICAgdHJhbnNwID0gX1VuaXhTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzZXNbdHJhbnNwLmdldF9waWQoKV0gPSB0cmFuc3AKKyAgICAgICAgeWllbGQgZnJvbSB0cmFuc3AuX3Bvc3RfaW5pdCgpCisgICAgICAgIHJldHVybiB0cmFuc3AKKworICAgIGRlZiBfcmVnX3NpZ2NobGQoc2VsZik6CisgICAgICAgIGlmIHNpZ25hbC5TSUdDSExEIG5vdCBpbiBzZWxmLl9zaWduYWxfaGFuZGxlcnM6CisgICAgICAgICAgICBzZWxmLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCwgc2VsZi5fc2lnX2NobGQpCisKKyAgICBkZWYgX3NpZ19jaGxkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEJlY2F1c2Ugb2Ygc2lnbmFsIGNvYWxlc2NpbmcsIHdlIG11c3Qga2VlcCBjYWxsaW5nIHdhaXRwaWQoKSBhcworICAgICAgICAgICAgIyBsb25nIGFzIHdlJ3JlIGFibGUgdG8gcmVhcCBhIGNoaWxkLgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZCgtMSwgb3MuV05PSEFORykKKyAgICAgICAgICAgICAgICBleGNlcHQgQ2hpbGRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrICAjIE5vIG1vcmUgY2hpbGQgcHJvY2Vzc2VzIGV4aXN0LgorICAgICAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBicmVhayAgIyBBbGwgcmVtYWluaW5nIGNoaWxkIHByb2Nlc3NlcyBhcmUgc3RpbGwgYWxpdmUuCisgICAgICAgICAgICAgICAgZWxpZiBvcy5XSUZTSUdOQUxFRChzdGF0dXMpOgorICAgICAgICAgICAgICAgICAgICAjIEEgY2hpbGQgcHJvY2VzcyBkaWVkIGJlY2F1c2Ugb2YgYSBzaWduYWwuCisgICAgICAgICAgICAgICAgICAgIHJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RhdHVzKQorICAgICAgICAgICAgICAgIGVsaWYgb3MuV0lGRVhJVEVEKHN0YXR1cyk6CisgICAgICAgICAgICAgICAgICAgICMgQSBjaGlsZCBwcm9jZXNzIGV4aXRlZCAoZS5nLiBzeXMuZXhpdCgpKS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZSA9IG9zLldFWElUU1RBVFVTKHN0YXR1cykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEEgY2hpbGQgZXhpdGVkLCBidXQgd2UgZG9uJ3QgdW5kZXJzdGFuZCBpdHMgc3RhdHVzLgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIGxldCdzIGp1c3QKKyAgICAgICAgICAgICAgICAgICAgIyByZXR1cm4gdGhhdCBzdGF0dXM7IHBlcmhhcHMgdGhhdCBoZWxwcyBkZWJ1ZyBpdC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuY29kZSA9IHN0YXR1cworICAgICAgICAgICAgICAgIHRyYW5zcCA9IHNlbGYuX3N1YnByb2Nlc3Nlcy5nZXQocGlkKQorICAgICAgICAgICAgICAgIGlmIHRyYW5zcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNwLl9wcm9jZXNzX2V4aXRlZChyZXR1cm5jb2RlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVW5rbm93biBleGNlcHRpb24gaW4gU0lHQ0hMRCBoYW5kbGVyJykKKworICAgIGRlZiBfc3VicHJvY2Vzc19jbG9zZWQoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgcGlkID0gdHJhbnNwb3J0LmdldF9waWQoKQorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzZXMucG9wKHBpZCwgTm9uZSkKKworCitkZWYgX3NldF9ub25ibG9ja2luZyhmZCk6CisgICAgZmxhZ3MgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICBmbGFncyA9IGZsYWdzIHwgb3MuT19OT05CTE9DSworICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbGFncykKKworCitjbGFzcyBfVW5peFJlYWRQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuUmVhZFRyYW5zcG9ydCk6CisKKyAgICBtYXhfc2l6ZSA9IDI1NiAqIDEwMjQgICMgbWF4IGJ5dGVzIHdlIHJlYWQgaW4gb25lIGV2ZW50bG9vcCBpdGVyYXRpb24KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gcGlwZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9waXBlID0gcGlwZQorICAgICAgICBzZWxmLl9maWxlbm8gPSBwaXBlLmZpbGVubygpCisgICAgICAgIG1vZGUgPSBvcy5mc3RhdChzZWxmLl9maWxlbm8pLnN0X21vZGUKKyAgICAgICAgaWYgbm90IChzdGF0LlNfSVNGSUZPKG1vZGUpIG9yIHN0YXQuU19JU1NPQ0sobW9kZSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGlwZSB0cmFuc3BvcnQgaXMgZm9yIHBpcGVzL3NvY2tldHMgb25seS4iKQorICAgICAgICBfc2V0X25vbmJsb2NraW5nKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbih3YWl0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoc2VsZi5fZmlsZW5vLCBzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuZW9mX3JlY2VpdmVkKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9maWxlbm8sIHNlbGYuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgc2VsZi5fY2xvc2UoTm9uZSkKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjKToKKyAgICAgICAgIyBzaG91bGQgYmUgY2FsbGVkIGJ5IGV4Y2VwdGlvbiBoYW5kbGVyIG9ubHkKKyAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmF0YWwgZXJyb3IgZm9yICVzJywgc2VsZikKKyAgICAgICAgc2VsZi5fY2xvc2UoZXhjKQorCisgICAgZGVmIF9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisKK2NsYXNzIF9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuV3JpdGVUcmFuc3BvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZXh0cmEpCisgICAgICAgIHNlbGYuX2V4dHJhWydwaXBlJ10gPSBwaXBlCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX3BpcGUgPSBwaXBlCisgICAgICAgIHNlbGYuX2ZpbGVubyA9IHBpcGUuZmlsZW5vKCkKKyAgICAgICAgbW9kZSA9IG9zLmZzdGF0KHNlbGYuX2ZpbGVubykuc3RfbW9kZQorICAgICAgICBpc19zb2NrZXQgPSBzdGF0LlNfSVNTT0NLKG1vZGUpCisgICAgICAgIGlzX3BpcGUgPSBzdGF0LlNfSVNGSUZPKG1vZGUpCisgICAgICAgIGlmIG5vdCAoaXNfc29ja2V0IG9yIGlzX3BpcGUpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGlwZSB0cmFuc3BvcnQgaXMgZm9yIHBpcGVzL3NvY2tldHMgb25seS4iKQorICAgICAgICBfc2V0X25vbmJsb2NraW5nKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQorICAgICAgICBzZWxmLl9jb25uX2xvc3QgPSAwCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBGYWxzZSAgIyBTZXQgd2hlbiBjbG9zZSgpIG9yIHdyaXRlX2VvZigpIGNhbGxlZC4KKworICAgICAgICAjIE9uIEFJWCwgdGhlIHJlYWRlciB0cmljayBvbmx5IHdvcmtzIGZvciBzb2NrZXRzLgorICAgICAgICAjIE9uIG90aGVyIHBsYXRmb3JtcyBpdCB3b3JrcyBmb3IgcGlwZXMgYW5kIHNvY2tldHMuCisgICAgICAgICMgKEV4Y2VwdGlvbjogT1MgWCAxMC40PyAgSXNzdWUgIzE5Mjk0LikKKyAgICAgICAgaWYgaXNfc29ja2V0IG9yIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYWl4Iik6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24od2FpdGVyLnNldF9yZXN1bHQsIE5vbmUpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgICMgUGlwZSB3YXMgY2xvc2VkIGJ5IHBlZXIuCisgICAgICAgIHNlbGYuX2Nsb3NlKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpLCByZXByKGRhdGEpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0IG9yIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygncGlwZSBjbG9zZWQgYnkgcGVlciBvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29zLndyaXRlKHBpcGUsIGRhdGEpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgIyBBdHRlbXB0IHRvIHNlbmQgaXQgcmlnaHQgYXdheSBmaXJzdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuID0gb3Mud3JpdGUoc2VsZi5fZmlsZW5vLCBkYXRhKQorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIG4gPT0gbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxpZiBuID4gMDoKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtuOl0KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9maWxlbm8sIHNlbGYuX3dyaXRlX3JlYWR5KQorCisgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgIGFzc2VydCBkYXRhLCAnRGF0YSBzaG91bGQgbm90IGJlIGVtcHR5JworCisgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4gPSBvcy53cml0ZShzZWxmLl9maWxlbm8sIGRhdGEpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgIyBSZW1vdmUgd3JpdGVyIGhlcmUsIF9mYXRhbF9lcnJvcigpIGRvZXNuJ3QgaXQKKyAgICAgICAgICAgICMgYmVjYXVzZSBfYnVmZmVyIGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG4gPT0gbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgbiA+IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkgICMgVHJ5IGFnYWluIGxhdGVyLgorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIFRPRE86IE1ha2UgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB3cml0ZV9lb2YoKSwgY2xvc2UoKSwKKyAgICAjIGFib3J0KCksIF9mYXRhbF9lcnJvcigpIGFuZCBfY2xvc2UoKSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4KKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXNzZXJ0IHNlbGYuX3BpcGUKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAjIHdyaXRlX2VvZiBpcyBhbGwgd2hhdCB3ZSBuZWVkZWQgdG8gY2xvc2UgdGhlIHdyaXRlIHBpcGUKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZW9mKCkKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgc2VsZi5fY2xvc2UoTm9uZSkKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjKToKKyAgICAgICAgIyBzaG91bGQgYmUgY2FsbGVkIGJ5IGV4Y2VwdGlvbiBoYW5kbGVyIG9ubHkKKyAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignRmF0YWwgZXJyb3IgZm9yICVzJywgc2VsZikKKyAgICAgICAgc2VsZi5fY2xvc2UoZXhjKQorCisgICAgZGVmIF9jbG9zZShzZWxmLCBleGM9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisKKworY2xhc3MgX1VuaXhTdWJwcm9jZXNzVHJhbnNwb3J0KGJhc2Vfc3VicHJvY2Vzcy5CYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIGFyZ3MsIHNoZWxsLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKToKKyAgICAgICAgc3RkaW5fdyA9IE5vbmUKKyAgICAgICAgaWYgc3RkaW4gPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgIyBVc2UgYSBzb2NrZXQgcGFpciBmb3Igc3RkaW4sIHNpbmNlIG5vdCBhbGwgcGxhdGZvcm1zCisgICAgICAgICAgICAjIHN1cHBvcnQgc2VsZWN0aW5nIHJlYWQgZXZlbnRzIG9uIHRoZSB3cml0ZSBlbmQgb2YgYQorICAgICAgICAgICAgIyBzb2NrZXQgKHdoaWNoIHdlIHVzZSBpbiBvcmRlciB0byBkZXRlY3QgY2xvc2luZyBvZiB0aGUKKyAgICAgICAgICAgICMgb3RoZXIgZW5kKS4gIE5vdGFibHkgdGhpcyBpcyBuZWVkZWQgb24gQUlYLCBhbmQgd29ya3MKKyAgICAgICAgICAgICMganVzdCBmaW5lIG9uIG90aGVyIHBsYXRmb3Jtcy4KKyAgICAgICAgICAgIHN0ZGluLCBzdGRpbl93ID0gc2VsZi5fbG9vcC5fc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgYXJncywgc2hlbGw9c2hlbGwsIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyLAorICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICBpZiBzdGRpbl93IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbiA9IG9wZW4oc3RkaW5fdy5kZXRhY2goKSwgJ3JiJywgYnVmZmVyaW5nPWJ1ZnNpemUpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3dpbmRvd3NfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDQ0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQpAQCAtMCwwICsxLDQ1NSBAQAorIiIiU2VsZWN0b3IgYW5kIHByb2FjdG9yIGV2ZW50bG9vcHMgZm9yIFdpbmRvd3MuIiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgc3RydWN0CitpbXBvcnQgX3dpbmFwaQorCitmcm9tIC4gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHByb2FjdG9yX2V2ZW50cworZnJvbSAuIGltcG9ydCBzZWxlY3Rvcl9ldmVudHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgd2luZG93c191dGlscworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKK2Zyb20gLiBpbXBvcnQgX292ZXJsYXBwZWQKKworCitfX2FsbF9fID0gWydTZWxlY3RvckV2ZW50TG9vcCcsICdQcm9hY3RvckV2ZW50TG9vcCcsICdJb2NwUHJvYWN0b3InXQorCisKK05VTEwgPSAwCitJTkZJTklURSA9IDB4ZmZmZmZmZmYKK0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCA9IDEyMjUKK0VSUk9SX0NPTk5FQ1RJT05fQUJPUlRFRCA9IDEyMzYKKworCitjbGFzcyBfT3ZlcmxhcHBlZEZ1dHVyZShmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiU3ViY2xhc3Mgb2YgRnV0dXJlIHdoaWNoIHJlcHJlc2VudHMgYW4gb3ZlcmxhcHBlZCBvcGVyYXRpb24uCisKKyAgICBDYW5jZWxsaW5nIGl0IHdpbGwgaW1tZWRpYXRlbHkgY2FuY2VsIHRoZSBvdmVybGFwcGVkIG9wZXJhdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYub3YgPSBvdgorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5vdi5jYW5jZWwoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuY2FuY2VsKCkKKworCitjbGFzcyBfV2FpdEhhbmRsZUZ1dHVyZShmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiU3ViY2xhc3Mgb2YgRnV0dXJlIHdoaWNoIHJlcHJlc2VudHMgYSB3YWl0IGhhbmRsZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YWl0X2hhbmRsZSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX3dhaXRfaGFuZGxlID0gd2FpdF9oYW5kbGUKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHN1cGVyKCkuY2FuY2VsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuVW5yZWdpc3RlcldhaXQoc2VsZi5fd2FpdF9oYW5kbGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLndpbmVycm9yICE9IF9vdmVybGFwcGVkLkVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICAgICAgcmFpc2UKKworCitjbGFzcyBQaXBlU2VydmVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgcmVwcmVzZW50aW5nIGEgcGlwZSBzZXJ2ZXIuCisKKyAgICBUaGlzIGlzIG11Y2ggbGlrZSBhIGJvdW5kLCBsaXN0ZW5pbmcgc29ja2V0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MKKyAgICAgICAgc2VsZi5fZnJlZV9pbnN0YW5jZXMgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICBzZWxmLl9waXBlID0gc2VsZi5fc2VydmVyX3BpcGVfaGFuZGxlKFRydWUpCisKKyAgICBkZWYgX2dldF91bmNvbm5lY3RlZF9waXBlKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBuZXcgaW5zdGFuY2UgYW5kIHJldHVybiBwcmV2aW91cyBvbmUuICBUaGlzIGVuc3VyZXMKKyAgICAgICAgIyB0aGF0ICh1bnRpbCB0aGUgc2VydmVyIGlzIGNsb3NlZCkgdGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0CisgICAgICAgICMgb25lIHBpcGUgaGFuZGxlIGZvciBhZGRyZXNzLiAgVGhlcmVmb3JlIGlmIGEgY2xpZW50IGF0dGVtcHQKKyAgICAgICAgIyB0byBjb25uZWN0IGl0IHdpbGwgbm90IGZhaWwgd2l0aCBGaWxlTm90Rm91bmRFcnJvci4KKyAgICAgICAgdG1wLCBzZWxmLl9waXBlID0gc2VsZi5fcGlwZSwgc2VsZi5fc2VydmVyX3BpcGVfaGFuZGxlKEZhbHNlKQorICAgICAgICByZXR1cm4gdG1wCisKKyAgICBkZWYgX3NlcnZlcl9waXBlX2hhbmRsZShzZWxmLCBmaXJzdCk6CisgICAgICAgICMgUmV0dXJuIGEgd3JhcHBlciBmb3IgYSBuZXcgcGlwZSBoYW5kbGUuCisgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZsYWdzID0gX3dpbmFwaS5QSVBFX0FDQ0VTU19EVVBMRVggfCBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVECisgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgZmxhZ3MgfD0gX3dpbmFwaS5GSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRQorICAgICAgICBoID0gX3dpbmFwaS5DcmVhdGVOYW1lZFBpcGUoCisgICAgICAgICAgICBzZWxmLl9hZGRyZXNzLCBmbGFncywKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9UWVBFX01FU1NBR0UgfCBfd2luYXBpLlBJUEVfUkVBRE1PREVfTUVTU0FHRSB8CisgICAgICAgICAgICBfd2luYXBpLlBJUEVfV0FJVCwKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9VTkxJTUlURURfSU5TVEFOQ0VTLAorICAgICAgICAgICAgd2luZG93c191dGlscy5CVUZTSVpFLCB3aW5kb3dzX3V0aWxzLkJVRlNJWkUsCisgICAgICAgICAgICBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLCBfd2luYXBpLk5VTEwpCisgICAgICAgIHBpcGUgPSB3aW5kb3dzX3V0aWxzLlBpcGVIYW5kbGUoaCkKKyAgICAgICAgc2VsZi5fZnJlZV9pbnN0YW5jZXMuYWRkKHBpcGUpCisgICAgICAgIHJldHVybiBwaXBlCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICMgQ2xvc2UgYWxsIGluc3RhbmNlcyB3aGljaCBoYXZlIG5vdCBiZWVuIGNvbm5lY3RlZCB0byBieSBhIGNsaWVudC4KKyAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBwaXBlIGluIHNlbGYuX2ZyZWVfaW5zdGFuY2VzOgorICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9mcmVlX2luc3RhbmNlcy5jbGVhcigpCisKKyAgICBfX2RlbF9fID0gY2xvc2UKKworCitjbGFzcyBTZWxlY3RvckV2ZW50TG9vcChzZWxlY3Rvcl9ldmVudHMuQmFzZVNlbGVjdG9yRXZlbnRMb29wKToKKyAgICAiIiJXaW5kb3dzIHZlcnNpb24gb2Ygc2VsZWN0b3IgZXZlbnQgbG9vcC4iIiIKKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcigpCisKKworY2xhc3MgUHJvYWN0b3JFdmVudExvb3AocHJvYWN0b3JfZXZlbnRzLkJhc2VQcm9hY3RvckV2ZW50TG9vcCk6CisgICAgIiIiV2luZG93cyB2ZXJzaW9uIG9mIHByb2FjdG9yIGV2ZW50IGxvb3AgdXNpbmcgSU9DUC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9hY3Rvcj1Ob25lKToKKyAgICAgICAgaWYgcHJvYWN0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIHByb2FjdG9yID0gSW9jcFByb2FjdG9yKCkKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwcm9hY3RvcikKKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcigpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgYWRkcmVzcyk6CisgICAgICAgIGYgPSBzZWxmLl9wcm9hY3Rvci5jb25uZWN0X3BpcGUoYWRkcmVzcykKKyAgICAgICAgcGlwZSA9IHlpZWxkIGZyb20gZgorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB0cmFucyA9IHNlbGYuX21ha2VfZHVwbGV4X3BpcGVfdHJhbnNwb3J0KHBpcGUsIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPXsnYWRkcic6IGFkZHJlc3N9KQorICAgICAgICByZXR1cm4gdHJhbnMsIHByb3RvY29sCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHN0YXJ0X3NlcnZpbmdfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBhZGRyZXNzKToKKyAgICAgICAgc2VydmVyID0gUGlwZVNlcnZlcihhZGRyZXNzKQorCisgICAgICAgIGRlZiBsb29wKGY9Tm9uZSk6CisgICAgICAgICAgICBwaXBlID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgICAgIHBpcGUgPSBmLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgICAgIHNlcnZlci5fZnJlZV9pbnN0YW5jZXMuZGlzY2FyZChwaXBlKQorICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX2R1cGxleF9waXBlX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUsIHByb3RvY29sLCBleHRyYT17J2FkZHInOiBhZGRyZXNzfSkKKyAgICAgICAgICAgICAgICBwaXBlID0gc2VydmVyLl9nZXRfdW5jb25uZWN0ZWRfcGlwZSgpCisgICAgICAgICAgICAgICAgaWYgcGlwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IuYWNjZXB0X3BpcGUocGlwZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHBpcGUgYW5kIHBpcGUuZmlsZW5vKCkgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ1BpcGUgYWNjZXB0IGZhaWxlZCcpCisgICAgICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgcGlwZToKKyAgICAgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2sobG9vcCkKKworICAgICAgICBzZWxmLmNhbGxfc29vbihsb29wKQorICAgICAgICByZXR1cm4gW3NlcnZlcl0KKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIHNlcnZlcik6CisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIF9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHRyYW5zcCA9IF9XaW5kb3dzU3VicHJvY2Vzc1RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncykKKyAgICAgICAgeWllbGQgZnJvbSB0cmFuc3AuX3Bvc3RfaW5pdCgpCisgICAgICAgIHJldHVybiB0cmFuc3AKKworICAgIGRlZiBfc3VicHJvY2Vzc19jbG9zZWQoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIElvY3BQcm9hY3RvcjoKKyAgICAiIiJQcm9hY3RvciBpbXBsZW1lbnRhdGlvbiB1c2luZyBJT0NQLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmN1cnJlbmN5PTB4ZmZmZmZmZmYpOgorICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorICAgICAgICBzZWxmLl9yZXN1bHRzID0gW10KKyAgICAgICAgc2VsZi5faW9jcCA9IF9vdmVybGFwcGVkLkNyZWF0ZUlvQ29tcGxldGlvblBvcnQoCisgICAgICAgICAgICBfb3ZlcmxhcHBlZC5JTlZBTElEX0hBTkRMRV9WQUxVRSwgTlVMTCwgMCwgY29uY3VycmVuY3kpCisgICAgICAgIHNlbGYuX2NhY2hlID0ge30KKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJlZCA9IHdlYWtyZWYuV2Vha1NldCgpCisgICAgICAgIHNlbGYuX3N0b3BwZWRfc2VydmluZyA9IHdlYWtyZWYuV2Vha1NldCgpCisKKyAgICBkZWYgc2V0X2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9yZXN1bHRzOgorICAgICAgICAgICAgc2VsZi5fcG9sbCh0aW1lb3V0KQorICAgICAgICB0bXAgPSBzZWxmLl9yZXN1bHRzCisgICAgICAgIHNlbGYuX3Jlc3VsdHMgPSBbXQorICAgICAgICByZXR1cm4gdG1wCisKKyAgICBkZWYgcmVjdihzZWxmLCBjb25uLCBuYnl0ZXMsIGZsYWdzPTApOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AoY29ubikKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc29ja2V0LnNvY2tldCk6CisgICAgICAgICAgICBvdi5XU0FSZWN2KGNvbm4uZmlsZW5vKCksIG5ieXRlcywgZmxhZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdi5SZWFkRmlsZShjb25uLmZpbGVubygpLCBuYnl0ZXMpCisKKyAgICAgICAgZGVmIGZpbmlzaCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG92LmdldHJlc3VsdCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgZXhjLndpbmVycm9yID09IF9vdmVybGFwcGVkLkVSUk9SX05FVE5BTUVfREVMRVRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvblJlc2V0RXJyb3IoKmV4Yy5hcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBjb25uLCBmaW5pc2gpCisKKyAgICBkZWYgc2VuZChzZWxmLCBjb25uLCBidWYsIGZsYWdzPTApOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AoY29ubikKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc29ja2V0LnNvY2tldCk6CisgICAgICAgICAgICBvdi5XU0FTZW5kKGNvbm4uZmlsZW5vKCksIGJ1ZiwgZmxhZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdi5Xcml0ZUZpbGUoY29ubi5maWxlbm8oKSwgYnVmKQorCisgICAgICAgIGRlZiBmaW5pc2godHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciA9PSBfb3ZlcmxhcHBlZC5FUlJPUl9ORVROQU1FX0RFTEVURUQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZXNldEVycm9yKCpleGMuYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoKQorCisgICAgZGVmIGFjY2VwdChzZWxmLCBsaXN0ZW5lcik6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChsaXN0ZW5lcikKKyAgICAgICAgY29ubiA9IHNlbGYuX2dldF9hY2NlcHRfc29ja2V0KGxpc3RlbmVyLmZhbWlseSkKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LkFjY2VwdEV4KGxpc3RlbmVyLmZpbGVubygpLCBjb25uLmZpbGVubygpKQorCisgICAgICAgIGRlZiBmaW5pc2hfYWNjZXB0KHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIG92LmdldHJlc3VsdCgpCisgICAgICAgICAgICAjIFVzZSBTT19VUERBVEVfQUNDRVBUX0NPTlRFWFQgc28gZ2V0c29ja25hbWUoKSBldGMgd29yay4KKyAgICAgICAgICAgIGJ1ZiA9IHN0cnVjdC5wYWNrKCdAUCcsIGxpc3RlbmVyLmZpbGVubygpKQorICAgICAgICAgICAgY29ubi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vdmVybGFwcGVkLlNPX1VQREFURV9BQ0NFUFRfQ09OVEVYVCwgYnVmKQorICAgICAgICAgICAgY29ubi5zZXR0aW1lb3V0KGxpc3RlbmVyLmdldHRpbWVvdXQoKSkKKyAgICAgICAgICAgIHJldHVybiBjb25uLCBjb25uLmdldHBlZXJuYW1lKCkKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIGxpc3RlbmVyLCBmaW5pc2hfYWNjZXB0KQorCisgICAgZGVmIGNvbm5lY3Qoc2VsZiwgY29ubiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChjb25uKQorICAgICAgICAjIFRoZSBzb2NrZXQgbmVlZHMgdG8gYmUgbG9jYWxseSBib3VuZCBiZWZvcmUgd2UgY2FsbCBDb25uZWN0RXgoKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuQmluZExvY2FsKGNvbm4uZmlsZW5vKCksIGNvbm4uZmFtaWx5KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS53aW5lcnJvciAhPSBlcnJuby5XU0FFSU5WQUw6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUHJvYmFibHkgYWxyZWFkeSBsb2NhbGx5IGJvdW5kOyBjaGVjayB1c2luZyBnZXRzb2NrbmFtZSgpLgorICAgICAgICAgICAgaWYgY29ubi5nZXRzb2NrbmFtZSgpWzFdID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LkNvbm5lY3RFeChjb25uLmZpbGVubygpLCBhZGRyZXNzKQorCisgICAgICAgIGRlZiBmaW5pc2hfY29ubmVjdCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgIyBVc2UgU09fVVBEQVRFX0NPTk5FQ1RfQ09OVEVYVCBzbyBnZXRzb2NrbmFtZSgpIGV0YyB3b3JrLgorICAgICAgICAgICAgY29ubi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vdmVybGFwcGVkLlNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQsIDApCisgICAgICAgICAgICByZXR1cm4gY29ubgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoX2Nvbm5lY3QpCisKKyAgICBkZWYgYWNjZXB0X3BpcGUoc2VsZiwgcGlwZSk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChwaXBlKQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgb3YuQ29ubmVjdE5hbWVkUGlwZShwaXBlLmZpbGVubygpKQorCisgICAgICAgIGRlZiBmaW5pc2godHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIHJldHVybiBwaXBlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBwaXBlLCBmaW5pc2gpCisKKyAgICBkZWYgY29ubmVjdF9waXBlKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgb3YuV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QoYWRkcmVzcywgc2VsZi5faW9jcCwgb3YuYWRkcmVzcykKKworICAgICAgICBkZWYgZmluaXNoKGVyciwgaGFuZGxlLCBvdik6CisgICAgICAgICAgICAjIGVyciwgaGFuZGxlIHdlcmUgYXJndW1lbnRzIHBhc3NlZCB0byBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cygpCisgICAgICAgICAgICAjIGluIGEgZnVuY3Rpb24gcnVuIGluIGEgdGhyZWFkIHBvb2wuCisgICAgICAgICAgICBpZiBlcnIgPT0gX292ZXJsYXBwZWQuRVJST1JfU0VNX1RJTUVPVVQ6CisgICAgICAgICAgICAgICAgIyBDb25uZWN0aW9uIGRpZCBub3Qgc3VjY2VlZCB3aXRoaW4gdGltZSBsaW1pdC4KKyAgICAgICAgICAgICAgICBtc2cgPSBfb3ZlcmxhcHBlZC5Gb3JtYXRNZXNzYWdlKGVycikKKyAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVmdXNlZEVycm9yKDAsIG1zZywgTm9uZSwgZXJyKQorICAgICAgICAgICAgZWxpZiBlcnIgIT0gMDoKKyAgICAgICAgICAgICAgICBtc2cgPSBfb3ZlcmxhcHBlZC5Gb3JtYXRNZXNzYWdlKGVycikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKDAsIG1zZywgTm9uZSwgZXJyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5QaXBlSGFuZGxlKGhhbmRsZSkKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIE5vbmUsIGZpbmlzaCwgd2FpdF9mb3JfcG9zdD1UcnVlKQorCisgICAgZGVmIHdhaXRfZm9yX2hhbmRsZShzZWxmLCBoYW5kbGUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIG1zID0gX3dpbmFwaS5JTkZJTklURQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXMgPSBpbnQodGltZW91dCAqIDEwMDAgKyAwLjUpCisKKyAgICAgICAgIyBXZSBvbmx5IGNyZWF0ZSBvdiBzbyB3ZSBjYW4gdXNlIG92LmFkZHJlc3MgYXMgYSBrZXkgZm9yIHRoZSBjYWNoZS4KKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIHdoID0gX292ZXJsYXBwZWQuUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlKAorICAgICAgICAgICAgaGFuZGxlLCBzZWxmLl9pb2NwLCBvdi5hZGRyZXNzLCBtcykKKyAgICAgICAgZiA9IF9XYWl0SGFuZGxlRnV0dXJlKHdoLCBsb29wPXNlbGYuX2xvb3ApCisKKyAgICAgICAgZGVmIGZpbmlzaCh0aW1lZF9vdXQsIF8sIG92KToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgX292ZXJsYXBwZWQuVW5yZWdpc3RlcldhaXQod2gpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciAhPSBfb3ZlcmxhcHBlZC5FUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHJldHVybiBub3QgdGltZWRfb3V0CisKKyAgICAgICAgc2VsZi5fY2FjaGVbb3YuYWRkcmVzc10gPSAoZiwgb3YsIE5vbmUsIGZpbmlzaCkKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiBfcmVnaXN0ZXJfd2l0aF9pb2NwKHNlbGYsIG9iaik6CisgICAgICAgICMgVG8gZ2V0IG5vdGlmaWNhdGlvbnMgb2YgZmluaXNoZWQgb3BzIG9uIHRoaXMgb2JqZWN0cyBzZW50IHRvIHRoZQorICAgICAgICAjIGNvbXBsZXRpb24gcG9ydCwgd2VyZSBtdXN0IHJlZ2lzdGVyIHRoZSBoYW5kbGUuCisgICAgICAgIGlmIG9iaiBub3QgaW4gc2VsZi5fcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQuYWRkKG9iaikKKyAgICAgICAgICAgIF9vdmVybGFwcGVkLkNyZWF0ZUlvQ29tcGxldGlvblBvcnQob2JqLmZpbGVubygpLCBzZWxmLl9pb2NwLCAwLCAwKQorICAgICAgICAgICAgIyBYWFggV2UgY291bGQgYWxzbyB1c2UgU2V0RmlsZUNvbXBsZXRpb25Ob3RpZmljYXRpb25Nb2RlcygpCisgICAgICAgICAgICAjIHRvIGF2b2lkIHNlbmRpbmcgbm90aWZpY2F0aW9ucyB0byBjb21wbGV0aW9uIHBvcnQgb2Ygb3BzCisgICAgICAgICAgICAjIHRoYXQgc3VjY2VlZCBpbW1lZGlhdGVseS4KKworICAgIGRlZiBfcmVnaXN0ZXIoc2VsZiwgb3YsIG9iaiwgY2FsbGJhY2ssIHdhaXRfZm9yX3Bvc3Q9RmFsc2UpOgorICAgICAgICAjIFJldHVybiBhIGZ1dHVyZSB3aGljaCB3aWxsIGJlIHNldCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlCisgICAgICAgICMgb3BlcmF0aW9uIHdoZW4gaXQgY29tcGxldGVzLiAgVGhlIGZ1dHVyZSdzIHZhbHVlIGlzIGFjdHVhbGx5CisgICAgICAgICMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGNhbGxiYWNrKCkuCisgICAgICAgIGYgPSBfT3ZlcmxhcHBlZEZ1dHVyZShvdiwgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICBpZiBvdi5wZW5kaW5nIG9yIHdhaXRfZm9yX3Bvc3Q6CisgICAgICAgICAgICAjIFJlZ2lzdGVyIHRoZSBvdmVybGFwcGVkIG9wZXJhdGlvbiBmb3IgbGF0ZXIuICBOb3RlIHRoYXQKKyAgICAgICAgICAgICMgd2Ugb25seSBzdG9yZSBvYmogdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGdhcmJhZ2UKKyAgICAgICAgICAgICMgY29sbGVjdGVkIHRvbyBlYXJseS4KKyAgICAgICAgICAgIHNlbGYuX2NhY2hlW292LmFkZHJlc3NdID0gKGYsIG92LCBvYmosIGNhbGxiYWNrKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQsIHNvIG5vIG5lZWQgdG8gcG9zdHBvbmUgdGhlCisgICAgICAgICAgICAjIHdvcmsuICBXZSBjYW5ub3QgdGFrZSB0aGlzIHNob3J0IGN1dCBpZiB3ZSBuZWVkIHRoZQorICAgICAgICAgICAgIyBOdW1iZXJPZkJ5dGVzLCBDb21wbGV0aW9uS2V5IHZhbHVlcyByZXR1cm5lZCBieQorICAgICAgICAgICAgIyBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cygpLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soTm9uZSwgTm9uZSwgb3YpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLnNldF9yZXN1bHQodmFsdWUpCisgICAgICAgIHJldHVybiBmCisKKyAgICBkZWYgX2dldF9hY2NlcHRfc29ja2V0KHNlbGYsIGZhbWlseSk6CisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KGZhbWlseSkKKyAgICAgICAgcy5zZXR0aW1lb3V0KDApCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgX3BvbGwoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgbXMgPSBJTkZJTklURQorICAgICAgICBlbGlmIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgdGltZW91dCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtcyA9IGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkKKyAgICAgICAgICAgIGlmIG1zID49IElORklOSVRFOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRpbWVvdXQgdG9vIGJpZyIpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdGF0dXMgPSBfb3ZlcmxhcHBlZC5HZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHNlbGYuX2lvY3AsIG1zKQorICAgICAgICAgICAgaWYgc3RhdHVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlcnIsIHRyYW5zZmVycmVkLCBrZXksIGFkZHJlc3MgPSBzdGF0dXMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLCBvdiwgb2JqLCBjYWxsYmFjayA9IHNlbGYuX2NhY2hlLnBvcChhZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICMga2V5IGlzIGVpdGhlciB6ZXJvLCBvciBpdCBpcyB1c2VkIHRvIHJldHVybiBhIHBpcGUKKyAgICAgICAgICAgICAgICAjIGhhbmRsZSB3aGljaCBzaG91bGQgYmUgY2xvc2VkIHRvIGF2b2lkIGEgbGVhay4KKyAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgwLCBfb3ZlcmxhcHBlZC5JTlZBTElEX0hBTkRMRV9WQUxVRSk6CisgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoa2V5KQorICAgICAgICAgICAgICAgIG1zID0gMAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBvYmogaW4gc2VsZi5fc3RvcHBlZF9zZXJ2aW5nOgorICAgICAgICAgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgICAgIGVsaWYgbm90IGYuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKHRyYW5zZmVycmVkLCBrZXksIG92KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRzLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0cy5hcHBlbmQoZikKKyAgICAgICAgICAgIG1zID0gMAorCisgICAgZGVmIF9zdG9wX3NlcnZpbmcoc2VsZiwgb2JqKToKKyAgICAgICAgIyBvYmogaXMgYSBzb2NrZXQgb3IgcGlwZSBoYW5kbGUuICBJdCB3aWxsIGJlIGNsb3NlZCBpbgorICAgICAgICAjIEJhc2VQcm9hY3RvckV2ZW50TG9vcC5fc3RvcF9zZXJ2aW5nKCkgd2hpY2ggd2lsbCBtYWtlIGFueQorICAgICAgICAjIHBlbmRpbmcgb3BlcmF0aW9ucyBmYWlsIHF1aWNrbHkuCisgICAgICAgIHNlbGYuX3N0b3BwZWRfc2VydmluZy5hZGQob2JqKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAjIENhbmNlbCByZW1haW5pbmcgcmVnaXN0ZXJlZCBvcGVyYXRpb25zLgorICAgICAgICBmb3IgYWRkcmVzcywgKGYsIG92LCBvYmosIGNhbGxiYWNrKSBpbiBsaXN0KHNlbGYuX2NhY2hlLml0ZW1zKCkpOgorICAgICAgICAgICAgaWYgb2JqIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBUaGUgb3BlcmF0aW9uIHdhcyBzdGFydGVkIHdpdGggY29ubmVjdF9waXBlKCkgd2hpY2gKKyAgICAgICAgICAgICAgICAjIHF1ZXVlcyBhIHRhc2sgdG8gV2luZG93cycgdGhyZWFkIHBvb2wuICBUaGlzIGNhbm5vdAorICAgICAgICAgICAgICAgICMgYmUgY2FuY2VsbGVkLCBzbyBqdXN0IGZvcmdldCBpdC4KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fY2FjaGVbYWRkcmVzc10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvdi5jYW5jZWwoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2hpbGUgc2VsZi5fY2FjaGU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcG9sbCgxKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3Rha2luZyBsb25nIHRpbWUgdG8gY2xvc2UgcHJvYWN0b3InKQorCisgICAgICAgIHNlbGYuX3Jlc3VsdHMgPSBbXQorICAgICAgICBpZiBzZWxmLl9pb2NwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShzZWxmLl9pb2NwKQorICAgICAgICAgICAgc2VsZi5faW9jcCA9IE5vbmUKKworCitjbGFzcyBfV2luZG93c1N1YnByb2Nlc3NUcmFuc3BvcnQoYmFzZV9zdWJwcm9jZXNzLkJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0KToKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgYXJncywgc2hlbGwsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9wcm9jID0gd2luZG93c191dGlscy5Qb3BlbigKKyAgICAgICAgICAgIGFyZ3MsIHNoZWxsPXNoZWxsLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKKyAgICAgICAgICAgIGJ1ZnNpemU9YnVmc2l6ZSwgKiprd2FyZ3MpCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGYpOgorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX3Byb2MucG9sbCgpCisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzX2V4aXRlZChyZXR1cm5jb2RlKQorCisgICAgICAgIGYgPSBzZWxmLl9sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoaW50KHNlbGYuX3Byb2MuX2hhbmRsZSkpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2FsbGJhY2spCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5IGIvTGliL2FzeW5jaW8vd2luZG93c191dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFjMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vd2luZG93c191dGlscy5weQpAQCAtMCwwICsxLDE5MiBAQAorIiIiCitWYXJpb3VzIFdpbmRvd3Mgc3BlY2lmaWMgYml0cyBhbmQgcGllY2VzCisiIiIKKworaW1wb3J0IHN5cworCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHJhaXNlIEltcG9ydEVycm9yKCd3aW4zMiBvbmx5JykKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1zdmNydAoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgX3dpbmFwaQorCisKK19fYWxsX18gPSBbJ3NvY2tldHBhaXInLCAncGlwZScsICdQb3BlbicsICdQSVBFJywgJ1BpcGVIYW5kbGUnXQorCisKKyMgQ29uc3RhbnRzL2dsb2JhbHMKKworCitCVUZTSVpFID0gODE5MgorUElQRSA9IHN1YnByb2Nlc3MuUElQRQorU1RET1VUID0gc3VicHJvY2Vzcy5TVERPVVQKK19tbWFwX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIHNvY2tldC5zb2NrZXRwYWlyKCkKKworCitkZWYgc29ja2V0cGFpcihmYW1pbHk9c29ja2V0LkFGX0lORVQsIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz0wKToKKyAgICAiIiJBIHNvY2tldCBwYWlyIHVzYWJsZSBhcyBhIHNlbGYtcGlwZSwgZm9yIFdpbmRvd3MuCisKKyAgICBPcmlnaW46IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzQzMjU3ODMsIGJ5IEdlZXJ0IEphbnNlbi4gIFB1YmxpYyBkb21haW4uCisgICAgIiIiCisgICAgIyBXZSBjcmVhdGUgYSBjb25uZWN0ZWQgVENQIHNvY2tldC4gTm90ZSB0aGUgdHJpY2sgd2l0aCBzZXRibG9ja2luZygwKQorICAgICMgdGhhdCBwcmV2ZW50cyB1cyBmcm9tIGhhdmluZyB0byBjcmVhdGUgYSB0aHJlYWQuCisgICAgbHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgbHNvY2suYmluZCgoJ2xvY2FsaG9zdCcsIDApKQorICAgIGxzb2NrLmxpc3RlbigxKQorICAgIGFkZHIsIHBvcnQgPSBsc29jay5nZXRzb2NrbmFtZSgpCisgICAgY3NvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgY3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgdHJ5OgorICAgICAgICBjc29jay5jb25uZWN0KChhZGRyLCBwb3J0KSkKKyAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgIHBhc3MKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBsc29jay5jbG9zZSgpCisgICAgICAgIGNzb2NrLmNsb3NlKCkKKyAgICAgICAgcmFpc2UKKyAgICBzc29jaywgXyA9IGxzb2NrLmFjY2VwdCgpCisgICAgY3NvY2suc2V0YmxvY2tpbmcoVHJ1ZSkKKyAgICBsc29jay5jbG9zZSgpCisgICAgcmV0dXJuIChzc29jaywgY3NvY2spCisKKworIyBSZXBsYWNlbWVudCBmb3Igb3MucGlwZSgpIHVzaW5nIGhhbmRsZXMgaW5zdGVhZCBvZiBmZHMKKworCitkZWYgcGlwZSgqLCBkdXBsZXg9RmFsc2UsIG92ZXJsYXBwZWQ9KFRydWUsIFRydWUpLCBidWZzaXplPUJVRlNJWkUpOgorICAgICIiIkxpa2Ugb3MucGlwZSgpIGJ1dCB3aXRoIG92ZXJsYXBwZWQgc3VwcG9ydCBhbmQgdXNpbmcgaGFuZGxlcyBub3QgZmRzLiIiIgorICAgIGFkZHJlc3MgPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PXInXFwuXHBpcGVccHl0aG9uLXBpcGUtJWQtJWQtJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3MuZ2V0cGlkKCksIG5leHQoX21tYXBfY291bnRlcikpKQorCisgICAgaWYgZHVwbGV4OgorICAgICAgICBvcGVubW9kZSA9IF93aW5hcGkuUElQRV9BQ0NFU1NfRFVQTEVYCisgICAgICAgIGFjY2VzcyA9IF93aW5hcGkuR0VORVJJQ19SRUFEIHwgX3dpbmFwaS5HRU5FUklDX1dSSVRFCisgICAgICAgIG9ic2l6ZSwgaWJzaXplID0gYnVmc2l6ZSwgYnVmc2l6ZQorICAgIGVsc2U6CisgICAgICAgIG9wZW5tb2RlID0gX3dpbmFwaS5QSVBFX0FDQ0VTU19JTkJPVU5ECisgICAgICAgIGFjY2VzcyA9IF93aW5hcGkuR0VORVJJQ19XUklURQorICAgICAgICBvYnNpemUsIGlic2l6ZSA9IDAsIGJ1ZnNpemUKKworICAgIG9wZW5tb2RlIHw9IF93aW5hcGkuRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UKKworICAgIGlmIG92ZXJsYXBwZWRbMF06CisgICAgICAgIG9wZW5tb2RlIHw9IF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQKKworICAgIGlmIG92ZXJsYXBwZWRbMV06CisgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJzID0gX3dpbmFwaS5GSUxFX0ZMQUdfT1ZFUkxBUFBFRAorICAgIGVsc2U6CisgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJzID0gMAorCisgICAgaDEgPSBoMiA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGgxID0gX3dpbmFwaS5DcmVhdGVOYW1lZFBpcGUoCisgICAgICAgICAgICBhZGRyZXNzLCBvcGVubW9kZSwgX3dpbmFwaS5QSVBFX1dBSVQsCisgICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwgX3dpbmFwaS5OVUxMKQorCisgICAgICAgIGgyID0gX3dpbmFwaS5DcmVhdGVGaWxlKAorICAgICAgICAgICAgYWRkcmVzcywgYWNjZXNzLCAwLCBfd2luYXBpLk5VTEwsIF93aW5hcGkuT1BFTl9FWElTVElORywKKyAgICAgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJzLCBfd2luYXBpLk5VTEwpCisKKyAgICAgICAgb3YgPSBfd2luYXBpLkNvbm5lY3ROYW1lZFBpcGUoaDEsIG92ZXJsYXBwZWQ9VHJ1ZSkKKyAgICAgICAgb3YuR2V0T3ZlcmxhcHBlZFJlc3VsdChUcnVlKQorICAgICAgICByZXR1cm4gaDEsIGgyCisgICAgZXhjZXB0OgorICAgICAgICBpZiBoMSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDEpCisgICAgICAgIGlmIGgyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoMikKKyAgICAgICAgcmFpc2UKKworCisjIFdyYXBwZXIgZm9yIGEgcGlwZSBoYW5kbGUKKworCitjbGFzcyBQaXBlSGFuZGxlOgorICAgICIiIldyYXBwZXIgZm9yIGFuIG92ZXJsYXBwZWQgcGlwZSBoYW5kbGUgd2hpY2ggaXMgdmFndWVseSBmaWxlLW9iamVjdCBsaWtlLgorCisgICAgVGhlIElPQ1AgZXZlbnQgbG9vcCBjYW4gdXNlIHRoZXNlIGluc3RlYWQgb2Ygc29ja2V0IG9iamVjdHMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZSk6CisgICAgICAgIHNlbGYuX2hhbmRsZSA9IGhhbmRsZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGhhbmRsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZQorCisgICAgZGVmIGNsb3NlKHNlbGYsICosIENsb3NlSGFuZGxlPV93aW5hcGkuQ2xvc2VIYW5kbGUpOgorICAgICAgICBpZiBzZWxmLl9oYW5kbGUgIT0gLTE6CisgICAgICAgICAgICBDbG9zZUhhbmRsZShzZWxmLl9oYW5kbGUpCisgICAgICAgICAgICBzZWxmLl9oYW5kbGUgPSAtMQorCisgICAgX19kZWxfXyA9IGNsb3NlCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHQsIHYsIHRiKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKworIyBSZXBsYWNlbWVudCBmb3Igc3VicHJvY2Vzcy5Qb3BlbiB1c2luZyBvdmVybGFwcGVkIHBpcGUgaGFuZGxlcworCisKK2NsYXNzIFBvcGVuKHN1YnByb2Nlc3MuUG9wZW4pOgorICAgICIiIlJlcGxhY2VtZW50IGZvciBzdWJwcm9jZXNzLlBvcGVuIHVzaW5nIG92ZXJsYXBwZWQgcGlwZSBoYW5kbGVzLgorCisgICAgVGhlIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciBhcmUgTm9uZSBvciBpbnN0YW5jZXMgb2YgUGlwZUhhbmRsZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCAqKmt3ZHMpOgorICAgICAgICBhc3NlcnQgbm90IGt3ZHMuZ2V0KCd1bml2ZXJzYWxfbmV3bGluZXMnKQorICAgICAgICBhc3NlcnQga3dkcy5nZXQoJ2J1ZnNpemUnLCAwKSA9PSAwCisgICAgICAgIHN0ZGluX3JmZCA9IHN0ZG91dF93ZmQgPSBzdGRlcnJfd2ZkID0gTm9uZQorICAgICAgICBzdGRpbl93aCA9IHN0ZG91dF9yaCA9IHN0ZGVycl9yaCA9IE5vbmUKKyAgICAgICAgaWYgc3RkaW4gPT0gUElQRToKKyAgICAgICAgICAgIHN0ZGluX3JoLCBzdGRpbl93aCA9IHBpcGUob3ZlcmxhcHBlZD0oRmFsc2UsIFRydWUpLCBkdXBsZXg9VHJ1ZSkKKyAgICAgICAgICAgIHN0ZGluX3JmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShzdGRpbl9yaCwgb3MuT19SRE9OTFkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRpbl9yZmQgPSBzdGRpbgorICAgICAgICBpZiBzdGRvdXQgPT0gUElQRToKKyAgICAgICAgICAgIHN0ZG91dF9yaCwgc3Rkb3V0X3doID0gcGlwZShvdmVybGFwcGVkPShUcnVlLCBGYWxzZSkpCisgICAgICAgICAgICBzdGRvdXRfd2ZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHN0ZG91dF93aCwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZG91dF93ZmQgPSBzdGRvdXQKKyAgICAgICAgaWYgc3RkZXJyID09IFBJUEU6CisgICAgICAgICAgICBzdGRlcnJfcmgsIHN0ZGVycl93aCA9IHBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgRmFsc2UpKQorICAgICAgICAgICAgc3RkZXJyX3dmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShzdGRlcnJfd2gsIDApCisgICAgICAgIGVsaWYgc3RkZXJyID09IFNURE9VVDoKKyAgICAgICAgICAgIHN0ZGVycl93ZmQgPSBzdGRvdXRfd2ZkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRlcnJfd2ZkID0gc3RkZXJyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oYXJncywgc3RkaW49c3RkaW5fcmZkLCBzdGRvdXQ9c3Rkb3V0X3dmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVycl93ZmQsICoqa3dkcykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZm9yIGggaW4gKHN0ZGluX3doLCBzdGRvdXRfcmgsIHN0ZGVycl9yaCk6CisgICAgICAgICAgICAgICAgaWYgaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN0ZGluX3doIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4gPSBQaXBlSGFuZGxlKHN0ZGluX3doKQorICAgICAgICAgICAgaWYgc3Rkb3V0X3JoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gUGlwZUhhbmRsZShzdGRvdXRfcmgpCisgICAgICAgICAgICBpZiBzdGRlcnJfcmggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBQaXBlSGFuZGxlKHN0ZGVycl9yaCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHN0ZGluID09IFBJUEU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc3RkaW5fcmZkKQorICAgICAgICAgICAgaWYgc3Rkb3V0ID09IFBJUEU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc3Rkb3V0X3dmZCkKKyAgICAgICAgICAgIGlmIHN0ZGVyciA9PSBQSVBFOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHN0ZGVycl93ZmQpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNvcmUucHkgYi9MaWIvYXN5bmNvcmUucHkKaW5kZXggOTA5ZDlmNi4uNzU0ODFkZCAxMDA2NDQKLS0tIGEvTGliL2FzeW5jb3JlLnB5CisrKyBiL0xpYi9hc3luY29yZS5weQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICBvYmouaGFuZGxlX2V4cHRfZXZlbnQoKQogICAgICAgICBpZiBmbGFncyAmIChzZWxlY3QuUE9MTEhVUCB8IHNlbGVjdC5QT0xMRVJSIHwgc2VsZWN0LlBPTExOVkFMKToKICAgICAgICAgICAgIG9iai5oYW5kbGVfY2xvc2UoKQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBpZiBlLmFyZ3NbMF0gbm90IGluIF9ESVNDT05ORUNURUQ6CiAgICAgICAgICAgICBvYmouaGFuZGxlX2Vycm9yKCkKICAgICAgICAgZWxzZToKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgICAgICAgIyBwYXNzZWQgYmUgY29ubmVjdGVkLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuYWRkciA9IHNvY2suZ2V0cGVlcm5hbWUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKEVOT1RDT05OLCBFSU5WQUwpOgogICAgICAgICAgICAgICAgICAgICAjIFRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBnb3QgYW4gdW5jb25uZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgIyBzb2NrZXQuCkBAIC0zMDQsNyArMzA0LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPX1JFVVNFQUREUikgfCAxCiAgICAgICAgICAgICAgICAgKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM0NSw3ICszNDUsNyBAQAogICAgICAgICAgICAgc2VsZi5hZGRyID0gYWRkcmVzcwogICAgICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVjdF9ldmVudCgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJyLCBlcnJvcmNvZGVbZXJyXSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLCBlcnJvcmNvZGVbZXJyXSkKIAogICAgIGRlZiBhY2NlcHQoc2VsZik6CiAgICAgICAgICMgWFhYIGNhbiByZXR1cm4gZWl0aGVyIGFuIGFkZHJlc3MgcGFpciBvciBOb25lCkBAIC0zNTMsNyArMzUzLDcgQEAKICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIGluIChFV09VTERCTE9DSywgRUNPTk5BQk9SVEVELCBFQUdBSU4pOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzY1LDcgKzM2NSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuc29ja2V0LnNlbmQoZGF0YSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdID09IEVXT1VMREJMT0NLOgogICAgICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgICAgICBlbGlmIHdoeS5hcmdzWzBdIGluIF9ESVNDT05ORUNURUQ6CkBAIC0zODQsNyArMzg0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gYicnCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAjIHdpbnNvY2sgc29tZXRpbWVzIHJhaXNlcyBFTk9UQ09OTgogICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gaW4gX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jbG9zZSgpCkBAIC0zOTcsMTEgKzM5NywxMiBAQAogICAgICAgICBzZWxmLmFjY2VwdGluZyA9IEZhbHNlCiAgICAgICAgIHNlbGYuY29ubmVjdGluZyA9IEZhbHNlCiAgICAgICAgIHNlbGYuZGVsX2NoYW5uZWwoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgotICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gbm90IGluIChFTk9UQ09OTiwgRUJBREYpOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHNlbGYuc29ja2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBub3QgaW4gKEVOT1RDT05OLCBFQkFERik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAjIGNoZWFwIGluaGVyaXRhbmNlLCB1c2VkIHRvIHBhc3MgYWxsIG90aGVyIGF0dHJpYnV0ZQogICAgICMgcmVmZXJlbmNlcyB0byB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgpAQCAtNDQzLDcgKzQ0NCw3IEBACiAgICAgZGVmIGhhbmRsZV9jb25uZWN0X2V2ZW50KHNlbGYpOgogICAgICAgICBlcnIgPSBzZWxmLnNvY2tldC5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fRVJST1IpCiAgICAgICAgIGlmIGVyciAhPSAwOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVyciwgX3N0cmVycm9yKGVycikpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyciwgX3N0cmVycm9yKGVycikpCiAgICAgICAgIHNlbGYuaGFuZGxlX2Nvbm5lY3QoKQogICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IFRydWUKICAgICAgICAgc2VsZi5jb25uZWN0aW5nID0gRmFsc2UKQEAgLTUzMiw3ICs1MzMsNyBAQAogCiAgICAgZGVmIGluaXRpYXRlX3NlbmQoc2VsZik6CiAgICAgICAgIG51bV9zZW50ID0gMAotICAgICAgICBudW1fc2VudCA9IGRpc3BhdGNoZXIuc2VuZChzZWxmLCBzZWxmLm91dF9idWZmZXJbOjUxMl0pCisgICAgICAgIG51bV9zZW50ID0gZGlzcGF0Y2hlci5zZW5kKHNlbGYsIHNlbGYub3V0X2J1ZmZlcls6NjU1MzZdKQogICAgICAgICBzZWxmLm91dF9idWZmZXIgPSBzZWxmLm91dF9idWZmZXJbbnVtX3NlbnQ6XQogCiAgICAgZGVmIGhhbmRsZV93cml0ZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9iYXNlNjQucHkgYi9MaWIvYmFzZTY0LnB5CmluZGV4IGI2ZTgyYjYuLjBhOTNmMmUgMTAwNzU1Ci0tLSBhL0xpYi9iYXNlNjQucHkKKysrIGIvTGliL2Jhc2U2NC5weQpAQCAtMzUsMTEgKzM1LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gcy5lbmNvZGUoJ2FzY2lpJykKICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0cmluZyBhcmd1bWVudCBzaG91bGQgY29udGFpbiBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMnKQotICAgIGVsaWYgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6CisgICAgaWYgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6CiAgICAgICAgIHJldHVybiBzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYnl0ZXMgb3IgQVNDSUkgc3RyaW5nLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCi0KKyAgICB0cnk6CisgICAgICAgIHJldHVybiBtZW1vcnl2aWV3KHMpLnRvYnl0ZXMoKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgYnl0ZXMtbGlrZSBvYmplY3Qgb3IgQVNDSUkgIgorICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgbm90ICVyIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKSBmcm9tIE5vbmUKIAogCiAjIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB1c2VzIGJpbmFzY2lpCkBAIC01NCwxNCArNTYsOSBAQAogCiAgICAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgIyBTdHJpcCBvZmYgdGhlIHRyYWlsaW5nIG5ld2xpbmUKICAgICBlbmNvZGVkID0gYmluYXNjaWkuYjJhX2Jhc2U2NChzKVs6LTFdCiAgICAgaWYgYWx0Y2hhcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFsdGNoYXJzLCBieXRlc190eXBlcyk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhbHRjaGFycy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgIGFzc2VydCBsZW4oYWx0Y2hhcnMpID09IDIsIHJlcHIoYWx0Y2hhcnMpCiAgICAgICAgIHJldHVybiBlbmNvZGVkLnRyYW5zbGF0ZShieXRlcy5tYWtldHJhbnMoYicrLycsIGFsdGNoYXJzKSkKICAgICByZXR1cm4gZW5jb2RlZApAQCAtMTM4LDIxICsxMzUsMTAgQEAKIAogCiAjIEJhc2UzMiBlbmNvZGluZy9kZWNvZGluZyBtdXN0IGJlIGRvbmUgaW4gUHl0aG9uCi1fYjMyYWxwaGFiZXQgPSB7Ci0gICAgMDogYidBJywgIDk6IGInSicsIDE4OiBiJ1MnLCAyNzogYiczJywKLSAgICAxOiBiJ0InLCAxMDogYidLJywgMTk6IGInVCcsIDI4OiBiJzQnLAotICAgIDI6IGInQycsIDExOiBiJ0wnLCAyMDogYidVJywgMjk6IGInNScsCi0gICAgMzogYidEJywgMTI6IGInTScsIDIxOiBiJ1YnLCAzMDogYic2JywKLSAgICA0OiBiJ0UnLCAxMzogYidOJywgMjI6IGInVycsIDMxOiBiJzcnLAotICAgIDU6IGInRicsIDE0OiBiJ08nLCAyMzogYidYJywKLSAgICA2OiBiJ0cnLCAxNTogYidQJywgMjQ6IGInWScsCi0gICAgNzogYidIJywgMTY6IGInUScsIDI1OiBiJ1onLAotICAgIDg6IGInSScsIDE3OiBiJ1InLCAyNjogYicyJywKLSAgICB9Ci0KLV9iMzJ0YWIgPSBbdlswXSBmb3IgaywgdiBpbiBzb3J0ZWQoX2IzMmFscGhhYmV0Lml0ZW1zKCkpXQotX2IzMnJldiA9IGRpY3QoWyh2WzBdLCBrKSBmb3IgaywgdiBpbiBfYjMyYWxwaGFiZXQuaXRlbXMoKV0pCi0KK19iMzJhbHBoYWJldCA9IGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnCitfYjMydGFiID0gW2J5dGVzKFtpXSkgZm9yIGkgaW4gX2IzMmFscGhhYmV0XQorX2IzMnRhYjIgPSBbYSArIGIgZm9yIGEgaW4gX2IzMnRhYiBmb3IgYiBpbiBfYjMydGFiXQorX2IzMnJldiA9IHt2OiBrIGZvciBrLCB2IGluIGVudW1lcmF0ZShfYjMyYWxwaGFiZXQpfQogCiBkZWYgYjMyZW5jb2RlKHMpOgogICAgICIiIkVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEJhc2UzMi4KQEAgLTE2MCwzMSArMTQ2LDIxIEBACiAgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCiAgICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCi0gICAgcXVhbnRhLCBsZWZ0b3ZlciA9IGRpdm1vZChsZW4ocyksIDUpCisgICAgICAgIHMgPSBtZW1vcnl2aWV3KHMpLnRvYnl0ZXMoKQorICAgIGxlZnRvdmVyID0gbGVuKHMpICUgNQogICAgICMgUGFkIHRoZSBsYXN0IHF1YW50dW0gd2l0aCB6ZXJvIGJpdHMgaWYgbmVjZXNzYXJ5CiAgICAgaWYgbGVmdG92ZXI6CiAgICAgICAgIHMgPSBzICsgYnl0ZXMoNSAtIGxlZnRvdmVyKSAgIyBEb24ndCB1c2UgKz0gIQotICAgICAgICBxdWFudGEgKz0gMQogICAgIGVuY29kZWQgPSBieXRlYXJyYXkoKQotICAgIGZvciBpIGluIHJhbmdlKHF1YW50YSk6Ci0gICAgICAgICMgYzEgYW5kIGMyIGFyZSAxNiBiaXRzIHdpZGUsIGMzIGlzIDggYml0cyB3aWRlLiAgVGhlIGludGVudCBvZiB0aGlzCi0gICAgICAgICMgY29kZSBpcyB0byBwcm9jZXNzIHRoZSA0MCBiaXRzIGluIHVuaXRzIG9mIDUgYml0cy4gIFNvIHdlIHRha2UgdGhlIDEKLSAgICAgICAgIyBsZWZ0b3ZlciBiaXQgb2YgYzEgYW5kIHRhY2sgaXQgb250byBjMi4gIFRoZW4gd2UgdGFrZSB0aGUgMiBsZWZ0b3ZlcgotICAgICAgICAjIGJpdHMgb2YgYzIgYW5kIHRhY2sgdGhlbSBvbnRvIGMzLiAgVGhlIHNoaWZ0cyBhbmQgbWFza3MgYXJlIGludGVuZGVkCi0gICAgICAgICMgdG8gZ2l2ZSB1cyB2YWx1ZXMgb2YgZXhhY3RseSA1IGJpdHMgaW4gd2lkdGguCi0gICAgICAgIGMxLCBjMiwgYzMgPSBzdHJ1Y3QudW5wYWNrKCchSEhCJywgc1tpKjU6KGkrMSkqNV0pCi0gICAgICAgIGMyICs9IChjMSAmIDEpIDw8IDE2ICMgMTcgYml0cyB3aWRlCi0gICAgICAgIGMzICs9IChjMiAmIDMpIDw8IDggICMgMTAgYml0cyB3aWRlCi0gICAgICAgIGVuY29kZWQgKz0gYnl0ZXMoW19iMzJ0YWJbYzEgPj4gMTFdLCAgICAgICAgICMgYml0cyAxIC0gNQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMSA+PiA2KSAmIDB4MWZdLCAjIGJpdHMgNiAtIDEwCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMxID4+IDEpICYgMHgxZl0sICMgYml0cyAxMSAtIDE1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbYzIgPj4gMTJdLCAgICAgICAgICMgYml0cyAxNiAtIDIwICgxIC0gNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzIgPj4gNykgJiAweDFmXSwgIyBiaXRzIDIxIC0gMjUgKDYgLSAxMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzIgPj4gMikgJiAweDFmXSwgIyBiaXRzIDI2IC0gMzAgKDExIC0gMTUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbYzMgPj4gNV0sICAgICAgICAgICMgYml0cyAzMSAtIDM1ICgxIC0gNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMyAmIDB4MWZdLCAgICAgICAgIyBiaXRzIDM2IC0gNDAgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorICAgIGZyb21fYnl0ZXMgPSBpbnQuZnJvbV9ieXRlcworICAgIGIzMnRhYjIgPSBfYjMydGFiMgorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgNSk6CisgICAgICAgIGMgPSBmcm9tX2J5dGVzKHNbaTogaSArIDVdLCAnYmlnJykKKyAgICAgICAgZW5jb2RlZCArPSAoYjMydGFiMltjID4+IDMwXSArICAgICAgICAgICAjIGJpdHMgMSAtIDEwCisgICAgICAgICAgICAgICAgICAgIGIzMnRhYjJbKGMgPj4gMjApICYgMHgzZmZdICsgIyBiaXRzIDExIC0gMjAKKyAgICAgICAgICAgICAgICAgICAgYjMydGFiMlsoYyA+PiAxMCkgJiAweDNmZl0gKyAjIGJpdHMgMjEgLSAzMAorICAgICAgICAgICAgICAgICAgICBiMzJ0YWIyW2MgJiAweDNmZl0gICAgICAgICAgICMgYml0cyAzMSAtIDQwCisgICAgICAgICAgICAgICAgICAgKQogICAgICMgQWRqdXN0IGZvciBhbnkgbGVmdG92ZXIgcGFydGlhbCBxdWFudGEKICAgICBpZiBsZWZ0b3ZlciA9PSAxOgogICAgICAgICBlbmNvZGVkWy02Ol0gPSBiJz09PT09PScKQEAgLTE5Niw3ICsxNzIsNiBAQAogICAgICAgICBlbmNvZGVkWy0xOl0gPSBiJz0nCiAgICAgcmV0dXJuIGJ5dGVzKGVuY29kZWQpCiAKLQogZGVmIGIzMmRlY29kZShzLCBjYXNlZm9sZD1GYWxzZSwgbWFwMDE9Tm9uZSk6CiAgICAgIiIiRGVjb2RlIGEgQmFzZTMyIGVuY29kZWQgYnl0ZSBzdHJpbmcuCiAKQEAgLTIxNyw4ICsxOTIsNyBAQAogICAgIGNoYXJhY3RlcnMgcHJlc2VudCBpbiB0aGUgaW5wdXQuCiAgICAgIiIiCiAgICAgcyA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKHMpCi0gICAgcXVhbnRhLCBsZWZ0b3ZlciA9IGRpdm1vZChsZW4ocyksIDgpCi0gICAgaWYgbGVmdG92ZXI6CisgICAgaWYgbGVuKHMpICUgODoKICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ0luY29ycmVjdCBwYWRkaW5nJykKICAgICAjIEhhbmRsZSBzZWN0aW9uIDIuNCB6ZXJvIGFuZCBvbmUgbWFwcGluZy4gIFRoZSBmbGFnIG1hcDAxIHdpbGwgYmUgZWl0aGVyCiAgICAgIyBGYWxzZSwgb3IgdGhlIGNoYXJhY3RlciB0byBtYXAgdGhlIGRpZ2l0IDEgKG9uZSkgdG8uICBJdCBzaG91bGQgYmUKQEAgLTIzMiw0MiArMjA2LDM2IEBACiAgICAgIyBTdHJpcCBvZmYgcGFkIGNoYXJhY3RlcnMgZnJvbSB0aGUgcmlnaHQuICBXZSBuZWVkIHRvIGNvdW50IHRoZSBwYWQKICAgICAjIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGlzIHdpbGwgdGVsbCB1cyBob3cgbWFueSBudWxsIGJ5dGVzIHRvIHJlbW92ZSBmcm9tCiAgICAgIyB0aGUgZW5kIG9mIHRoZSBkZWNvZGVkIHN0cmluZy4KLSAgICBwYWRjaGFycyA9IDAKLSAgICBtbyA9IHJlLnNlYXJjaChiJyg/UDxwYWQ+Wz1dKikkJywgcykKLSAgICBpZiBtbzoKLSAgICAgICAgcGFkY2hhcnMgPSBsZW4obW8uZ3JvdXAoJ3BhZCcpKQotICAgICAgICBpZiBwYWRjaGFycyA+IDA6Ci0gICAgICAgICAgICBzID0gc1s6LXBhZGNoYXJzXQorICAgIGwgPSBsZW4ocykKKyAgICBzID0gcy5yc3RyaXAoYic9JykKKyAgICBwYWRjaGFycyA9IGwgLSBsZW4ocykKICAgICAjIE5vdyBkZWNvZGUgdGhlIGZ1bGwgcXVhbnRhCi0gICAgcGFydHMgPSBbXQotICAgIGFjYyA9IDAKLSAgICBzaGlmdCA9IDM1Ci0gICAgZm9yIGMgaW4gczoKLSAgICAgICAgdmFsID0gX2IzMnJldi5nZXQoYykKLSAgICAgICAgaWYgdmFsIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignTm9uLWJhc2UzMiBkaWdpdCBmb3VuZCcpCi0gICAgICAgIGFjYyArPSBfYjMycmV2W2NdIDw8IHNoaWZ0Ci0gICAgICAgIHNoaWZ0IC09IDUKLSAgICAgICAgaWYgc2hpZnQgPCAwOgotICAgICAgICAgICAgcGFydHMuYXBwZW5kKGJpbmFzY2lpLnVuaGV4bGlmeShieXRlcygnJTAxMHgnICUgYWNjLCAiYXNjaWkiKSkpCi0gICAgICAgICAgICBhY2MgPSAwCi0gICAgICAgICAgICBzaGlmdCA9IDM1CisgICAgZGVjb2RlZCA9IGJ5dGVhcnJheSgpCisgICAgYjMycmV2ID0gX2IzMnJldgorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgOCk6CisgICAgICAgIHF1YW50YSA9IHNbaTogaSArIDhdCisgICAgICAgIGFjYyA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGMgaW4gcXVhbnRhOgorICAgICAgICAgICAgICAgIGFjYyA9IChhY2MgPDwgNSkgKyBiMzJyZXZbY10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ05vbi1iYXNlMzIgZGlnaXQgZm91bmQnKSBmcm9tIE5vbmUKKyAgICAgICAgZGVjb2RlZCArPSBhY2MudG9fYnl0ZXMoNSwgJ2JpZycpCiAgICAgIyBQcm9jZXNzIHRoZSBsYXN0LCBwYXJ0aWFsIHF1YW50YQotICAgIGxhc3QgPSBiaW5hc2NpaS51bmhleGxpZnkoYnl0ZXMoJyUwMTB4JyAlIGFjYywgImFzY2lpIikpCi0gICAgaWYgcGFkY2hhcnMgPT0gMDoKLSAgICAgICAgbGFzdCA9IGInJyAgICAgICAgICAgICAgICAgICAgICAjIE5vIGNoYXJhY3RlcnMKLSAgICBlbGlmIHBhZGNoYXJzID09IDE6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotMV0KLSAgICBlbGlmIHBhZGNoYXJzID09IDM6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotMl0KLSAgICBlbGlmIHBhZGNoYXJzID09IDQ6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotM10KLSAgICBlbGlmIHBhZGNoYXJzID09IDY6Ci0gICAgICAgIGxhc3QgPSBsYXN0WzotNF0KLSAgICBlbHNlOgotICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignSW5jb3JyZWN0IHBhZGRpbmcnKQotICAgIHBhcnRzLmFwcGVuZChsYXN0KQotICAgIHJldHVybiBiJycuam9pbihwYXJ0cykKKyAgICBpZiBwYWRjaGFyczoKKyAgICAgICAgYWNjIDw8PSA1ICogcGFkY2hhcnMKKyAgICAgICAgbGFzdCA9IGFjYy50b19ieXRlcyg1LCAnYmlnJykKKyAgICAgICAgaWYgcGFkY2hhcnMgPT0gMToKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi0xXQorICAgICAgICBlbGlmIHBhZGNoYXJzID09IDM6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotMl0KKyAgICAgICAgZWxpZiBwYWRjaGFycyA9PSA0OgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTNdCisgICAgICAgIGVsaWYgcGFkY2hhcnMgPT0gNjoKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi00XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ0luY29ycmVjdCBwYWRkaW5nJykKKyAgICByZXR1cm4gYnl0ZXMoZGVjb2RlZCkKIAogCiAKQEAgLTI3OSw4ICsyNDcsNiBAQAogCiAgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgcmV0dXJuIGJpbmFzY2lpLmhleGxpZnkocykudXBwZXIoKQogCiAKQEAgLTMzNSwxMiArMzAxLDI2IEBACiAgICAgICAgIHMgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGxpbmUpCiAgICAgICAgIG91dHB1dC53cml0ZShzKQogCitkZWYgX2lucHV0X3R5cGVfY2hlY2socyk6CisgICAgdHJ5OgorICAgICAgICBtID0gbWVtb3J5dmlldyhzKQorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgorICAgICAgICBtc2cgPSAiZXhwZWN0ZWQgYnl0ZXMtbGlrZSBvYmplY3QsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKSBmcm9tIGVycgorICAgIGlmIG0uZm9ybWF0IG5vdCBpbiAoJ2MnLCAnYicsICdCJyk6CisgICAgICAgIG1zZyA9ICgiZXhwZWN0ZWQgc2luZ2xlIGJ5dGUgZWxlbWVudHMsIG5vdCAlciBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5mb3JtYXQsIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiBtLm5kaW0gIT0gMToKKyAgICAgICAgbXNnID0gKCJleHBlY3RlZCAxLUQgZGF0YSwgbm90ICVkLUQgZGF0YSBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5uZGltLCBzLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKIAogZGVmIGVuY29kZWJ5dGVzKHMpOgogICAgICIiIkVuY29kZSBhIGJ5dGVzdHJpbmcgaW50byBhIGJ5dGVzdHJpbmcgY29udGFpbmluZyBtdWx0aXBsZSBsaW5lcwogICAgIG9mIGJhc2UtNjQgZGF0YS4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHBpZWNlcyA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBNQVhCSU5TSVpFKToKICAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgTUFYQklOU0laRV0KQEAgLTM1Nyw4ICszMzcsNyBAQAogCiBkZWYgZGVjb2RlYnl0ZXMocyk6CiAgICAgIiIiRGVjb2RlIGEgYnl0ZXN0cmluZyBvZiBiYXNlLTY0IGRhdGEgaW50byBhIGJ5dGVzdHJpbmcuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCisgICAgX2lucHV0X3R5cGVfY2hlY2socykKICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQogCiBkZWYgZGVjb2Rlc3RyaW5nKHMpOgpkaWZmIC0tZ2l0IGEvTGliL2J6Mi5weSBiL0xpYi9iejIucHkKaW5kZXggYzMwNzUwNy4uNmJjNjExZSAxMDA2NDQKLS0tIGEvTGliL2J6Mi5weQorKysgYi9MaWIvYnoyLnB5CkBAIC05LDcgKzksNiBAQAogCiBfX2F1dGhvcl9fID0gIk5hZGVlbSBWYXdkYSA8bmFkZWVtLnZhd2RhQGdtYWlsLmNvbT4iCiAKLWltcG9ydCBidWlsdGlucwogaW1wb3J0IGlvCiBpbXBvcnQgd2FybmluZ3MKIApAQCAtMjgsNiArMjcsOCBAQAogCiBfQlVGRkVSX1NJWkUgPSA4MTkyCiAKK19idWlsdGluX29wZW4gPSBvcGVuCisKIAogY2xhc3MgQloyRmlsZShpby5CdWZmZXJlZElPQmFzZSk6CiAKQEAgLTQzLDE2ICs0NCwxNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbW9kZT0iciIsIGJ1ZmZlcmluZz1Ob25lLCBjb21wcmVzc2xldmVsPTkpOgogICAgICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlLgogCi0gICAgICAgIElmIGZpbGVuYW1lIGlzIGEgc3RyIG9yIGJ5dGVzIG9iamVjdCwgaXMgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8KLSAgICAgICAgYmUgb3BlbmVkLiBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGZpbGUgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHVzZWQgdG8KLSAgICAgICAgcmVhZCBvciB3cml0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgICAgICBJZiBmaWxlbmFtZSBpcyBhIHN0ciBvciBieXRlcyBvYmplY3QsIGl0IGdpdmVzIHRoZSBuYW1lCisgICAgICAgIG9mIHRoZSBmaWxlIHRvIGJlIG9wZW5lZC4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBmaWxlIG9iamVjdCwKKyAgICAgICAgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAotICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsIG9yICdhJyBmb3IKLSAgICAgICAgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsIGFuZCAnYWInLgorICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICd4JyBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICdhJyBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsICd4YicsIGFuZCAnYWInLgogCiAgICAgICAgIGJ1ZmZlcmluZyBpcyBpZ25vcmVkLiBJdHMgdXNlIGlzIGRlcHJlY2F0ZWQuCiAKLSAgICAgICAgSWYgbW9kZSBpcyAndycgb3IgJ2EnLCBjb21wcmVzc2xldmVsIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDEKKyAgICAgICAgSWYgbW9kZSBpcyAndycsICd4JyBvciAnYScsIGNvbXByZXNzbGV2ZWwgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMQogICAgICAgICBhbmQgOSBzcGVjaWZ5aW5nIHRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbjogMSBwcm9kdWNlcyB0aGUgbGVhc3QKICAgICAgICAgY29tcHJlc3Npb24sIGFuZCA5IChkZWZhdWx0KSBwcm9kdWNlcyB0aGUgbW9zdCBjb21wcmVzc2lvbi4KIApAQCAtODUsMTUgKzg3LDE5IEBACiAgICAgICAgICAgICBtb2RlID0gIndiIgogICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWwpCisgICAgICAgIGVsaWYgbW9kZSBpbiAoIngiLCAieGIiKToKKyAgICAgICAgICAgIG1vZGUgPSAieGIiCisgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQorICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NvciA9IEJaMkNvbXByZXNzb3IoY29tcHJlc3NsZXZlbCkKICAgICAgICAgZWxpZiBtb2RlIGluICgiYSIsICJhYiIpOgogICAgICAgICAgICAgbW9kZSA9ICJhYiIKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCiAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtb2RlOiB7IXJ9Ii5mb3JtYXQobW9kZSkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1vZGU6ICVyIiAlIChtb2RlLCkpCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgKHN0ciwgYnl0ZXMpKToKLSAgICAgICAgICAgIHNlbGYuX2ZwID0gYnVpbHRpbnMub3BlbihmaWxlbmFtZSwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuX2ZwID0gX2J1aWx0aW5fb3BlbihmaWxlbmFtZSwgbW9kZSkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZnAgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9tb2RlID0gbW9kZV9jb2RlCiAgICAgICAgIGVsaWYgaGFzYXR0cihmaWxlbmFtZSwgInJlYWQiKSBvciBoYXNhdHRyKGZpbGVuYW1lLCAid3JpdGUiKToKQEAgLTE4OSwxNSArMTk1LDE3IEBACiAKICAgICAgICAgICAgIGlmIG5vdCByYXdibG9jazoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICAgICAjIEVuZC1vZi1zdHJlYW0gbWFya2VyIGFuZCBlbmQgb2YgZmlsZS4gV2UncmUgZ29vZC4KICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQURfRU9GCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NpemUgPSBzZWxmLl9wb3MKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBQcm9ibGVtIC0gd2Ugd2VyZSBleHBlY3RpbmcgbW9yZSBjb21wcmVzc2VkIGRhdGEuCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCiAKLSAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gQloyRGVjb21wcmVzc29yKCkKIAogICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MocmF3YmxvY2spCkBAIC00MTIsNyArNDIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9hbGwocmV0dXJuX2RhdGE9RmFsc2UpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5fc2l6ZSArIG9mZnNldAogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciB3aGVuY2U6IHt9Ii5mb3JtYXQod2hlbmNlKSkKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciB3aGVuY2U6ICVzIiAlICh3aGVuY2UsKSkKIAogICAgICAgICAgICAgIyBNYWtlIGl0IHNvIHRoYXQgb2Zmc2V0IGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCBmb3J3YXJkLgogICAgICAgICAgICAgaWYgb2Zmc2V0IDwgc2VsZi5fcG9zOgpAQCAtNDM2LDIwICs0NDQsMjAgQEAKICAgICAgICAgIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpOgogICAgICIiIk9wZW4gYSBiemlwMi1jb21wcmVzc2VkIGZpbGUgaW4gYmluYXJ5IG9yIHRleHQgbW9kZS4KIAotICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBjYW4gYmUgYW4gYWN0dWFsIGZpbGVuYW1lIChhIHN0ciBvciBieXRlcyBvYmplY3QpLCBvcgotICAgIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KKyAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgY2FuIGJlIGFuIGFjdHVhbCBmaWxlbmFtZSAoYSBzdHIgb3IgYnl0ZXMKKyAgICBvYmplY3QpLCBvciBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKLSAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJhIiBvciAiYWIiIGZvciBiaW5hcnkgbW9kZSwKLSAgICBvciAicnQiLCAid3QiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgbW9kZSBpcyAicmIiLCBhbmQgdGhlCi0gICAgZGVmYXVsdCBjb21wcmVzc2xldmVsIGlzIDkuCisgICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiwgInciLCAid2IiLCAieCIsICJ4YiIsICJhIiBvcgorICAgICJhYiIgZm9yIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiLCAieHQiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4KKyAgICBUaGUgZGVmYXVsdCBtb2RlIGlzICJyYiIsIGFuZCB0aGUgZGVmYXVsdCBjb21wcmVzc2xldmVsIGlzIDkuCiAKLSAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgQloyRmlsZSBjb25zdHJ1Y3RvcjoKLSAgICBCWjJGaWxlKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2xldmVsKS4gSW4gdGhpcyBjYXNlLCB0aGUgZW5jb2RpbmcsIGVycm9ycwotICAgIGFuZCBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KKyAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgQloyRmlsZQorICAgIGNvbnN0cnVjdG9yOiBCWjJGaWxlKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2xldmVsKS4gSW4gdGhpcyBjYXNlLAorICAgIHRoZSBlbmNvZGluZywgZXJyb3JzIGFuZCBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KIAogICAgIEZvciB0ZXh0IG1vZGUsIGEgQloyRmlsZSBvYmplY3QgaXMgY3JlYXRlZCwgYW5kIHdyYXBwZWQgaW4gYW4KLSAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IgaGFuZGxpbmcKLSAgICBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgorICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvcgorICAgIGhhbmRsaW5nIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCiAKICAgICAiIiIKICAgICBpZiAidCIgaW4gbW9kZToKZGlmZiAtLWdpdCBhL0xpYi9jUHJvZmlsZS5weSBiL0xpYi9jUHJvZmlsZS5weQppbmRleCBjMjRkNDViLi4xMTg0Mzg1IDEwMDc1NQotLS0gYS9MaWIvY1Byb2ZpbGUucHkKKysrIGIvTGliL2NQcm9maWxlLnB5CkBAIC03LDU0ICs3LDIwIEBACiBfX2FsbF9fID0gWyJydW4iLCAicnVuY3R4IiwgIlByb2ZpbGUiXQogCiBpbXBvcnQgX2xzcHJvZgoraW1wb3J0IHByb2ZpbGUgYXMgX3B5cHJvZmlsZQogCiAjIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogIyBTaW1wbGUgaW50ZXJmYWNlCiAKIGRlZiBydW4oc3RhdGVtZW50LCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKLSAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyIG9wdGlvbmFsbHkgc2F2aW5nIHJlc3VsdHMgaW4gZmlsZW5hbWUKLQotICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZQotICAgICJleGVjIiBzdGF0ZW1lbnQsIGFuZCBhbiBvcHRpb25hbCBmaWxlIG5hbWUuICBJbiBhbGwgY2FzZXMgdGhpcwotICAgIHJvdXRpbmUgYXR0ZW1wdHMgdG8gImV4ZWMiIGl0cyBmaXJzdCBhcmd1bWVudCBhbmQgZ2F0aGVyIHByb2ZpbGluZwotICAgIHN0YXRpc3RpY3MgZnJvbSB0aGUgZXhlY3V0aW9uLiBJZiBubyBmaWxlIG5hbWUgaXMgcHJlc2VudCwgdGhlbiB0aGlzCi0gICAgZnVuY3Rpb24gYXV0b21hdGljYWxseSBwcmludHMgYSBzaW1wbGUgcHJvZmlsaW5nIHJlcG9ydCwgc29ydGVkIGJ5IHRoZQotICAgIHN0YW5kYXJkIG5hbWUgc3RyaW5nIChmaWxlL2xpbmUvZnVuY3Rpb24tbmFtZSkgdGhhdCBpcyBwcmVzZW50ZWQgaW4KLSAgICBlYWNoIGxpbmUuCi0gICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHJlc3VsdCA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHByb2YgPSBwcm9mLnJ1bihzdGF0ZW1lbnQpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICAgICAgcGFzcwotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gcHJvZi5wcmludF9zdGF0cyhzb3J0KQotICAgIHJldHVybiByZXN1bHQKKyAgICByZXR1cm4gX3B5cHJvZmlsZS5fVXRpbHMoUHJvZmlsZSkucnVuKHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvcnQpCiAKIGRlZiBydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lPU5vbmUsIHNvcnQ9LTEpOgotICAgICIiIlJ1biBzdGF0ZW1lbnQgdW5kZXIgcHJvZmlsZXIsIHN1cHBseWluZyB5b3VyIG93biBnbG9iYWxzIGFuZCBsb2NhbHMsCi0gICAgb3B0aW9uYWxseSBzYXZpbmcgcmVzdWx0cyBpbiBmaWxlbmFtZS4KKyAgICByZXR1cm4gX3B5cHJvZmlsZS5fVXRpbHMoUHJvZmlsZSkucnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIHNvcnQpCiAKLSAgICBzdGF0ZW1lbnQgYW5kIGZpbGVuYW1lIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHByb2ZpbGUucnVuCi0gICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHJlc3VsdCA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHByb2YgPSBwcm9mLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscykKLSAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgICAgICBwYXNzCi0gICAgZmluYWxseToKLSAgICAgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXN1bHQgPSBwcm9mLnByaW50X3N0YXRzKHNvcnQpCi0gICAgcmV0dXJuIHJlc3VsdAorcnVuLl9fZG9jX18gPSBfcHlwcm9maWxlLnJ1bi5fX2RvY19fCitydW5jdHguX19kb2NfXyA9IF9weXByb2ZpbGUucnVuY3R4Ll9fZG9jX18KIAogIyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIApAQCAtNzcsMTAgKzQzLDkgQEAKIAogICAgIGRlZiBkdW1wX3N0YXRzKHNlbGYsIGZpbGUpOgogICAgICAgICBpbXBvcnQgbWFyc2hhbAotICAgICAgICBmID0gb3BlbihmaWxlLCAnd2InKQotICAgICAgICBzZWxmLmNyZWF0ZV9zdGF0cygpCi0gICAgICAgIG1hcnNoYWwuZHVtcChzZWxmLnN0YXRzLCBmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zdGF0cygpCisgICAgICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKIAogICAgIGRlZiBjcmVhdGVfc3RhdHMoc2VsZik6CiAgICAgICAgIHNlbGYuZGlzYWJsZSgpCmRpZmYgLS1naXQgYS9MaWIvY2dpLnB5IGIvTGliL2NnaS5weQppbmRleCAwNmUwM2I1Li4xZDgwNDBjIDEwMDc1NQotLS0gYS9MaWIvY2dpLnB5CisrKyBiL0xpYi9jZ2kucHkKQEAgLTgwLDcgKzgwLDcgQEAKICAgICBpZiBsb2dmaWxlIGFuZCBub3QgbG9nZnA6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxvZ2ZwID0gb3Blbihsb2dmaWxlLCAiYSIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICBpZiBub3QgbG9nZnA6CiAgICAgICAgIGxvZyA9IG5vbG9nCkBAIC01NTIsNiArNTUyLDEyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnJlYWRfc2luZ2xlKCkKIAorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHByaW50YWJsZSByZXByZXNlbnRhdGlvbi4iIiIKICAgICAgICAgcmV0dXJuICJGaWVsZFN0b3JhZ2UoJXIsICVyLCAlcikiICUgKApAQCAtNjcwLDcgKzY3Niw2IEBACiAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZywgZXJyb3JzPXNlbGYuZXJyb3JzKQogICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gcXVlcnk6CiAgICAgICAgICAgICAgICAgc2VsZi5saXN0LmFwcGVuZChNaW5pRmllbGRTdG9yYWdlKGtleSwgdmFsdWUpKQotICAgICAgICAgICAgRmllbGRTdG9yYWdlQ2xhc3MgPSBOb25lCiAKICAgICAgICAga2xhc3MgPSBzZWxmLkZpZWxkU3RvcmFnZUNsYXNzIG9yIHNlbGYuX19jbGFzc19fCiAgICAgICAgIGZpcnN0X2xpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKCkgIyBieXRlcwpAQCAtOTU4LDggKzk2Myw4IEBACiAgICAgcHJpbnQoIjxIMz5DdXJyZW50IFdvcmtpbmcgRGlyZWN0b3J5OjwvSDM+IikKICAgICB0cnk6CiAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKLSAgICAgICAgcHJpbnQoIm9zLmVycm9yOiIsIGh0bWwuZXNjYXBlKHN0cihtc2cpKSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CisgICAgICAgIHByaW50KCJPU0Vycm9yOiIsIGh0bWwuZXNjYXBlKHN0cihtc2cpKSkKICAgICBlbHNlOgogICAgICAgICBwcmludChodG1sLmVzY2FwZShwd2QpKQogICAgIHByaW50KCkKZGlmZiAtLWdpdCBhL0xpYi9jaHVuay5weSBiL0xpYi9jaHVuay5weQppbmRleCA1ODYzZWQwLi5kYzkwYTc1IDEwMDY0NAotLS0gYS9MaWIvY2h1bmsucHkKKysrIGIvTGliL2NodW5rLnB5CkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIHNlbGYuc2l6ZV9yZWFkID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLm9mZnNldCA9IHNlbGYuZmlsZS50ZWxsKCkKLSAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgSU9FcnJvcik6CisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5zZWVrYWJsZSA9IEZhbHNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnNlZWthYmxlID0gVHJ1ZQpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZSIpCiAgICAgICAgIGlmIG5vdCBzZWxmLnNlZWthYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2Fubm90IHNlZWsiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2Fubm90IHNlZWsiKQogICAgICAgICBpZiB3aGVuY2UgPT0gMToKICAgICAgICAgICAgIHBvcyA9IHBvcyArIHNlbGYuc2l6ZV9yZWFkCiAgICAgICAgIGVsaWYgd2hlbmNlID09IDI6CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZpbGUuc2VlayhuLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuc2l6ZV9yZWFkID0gc2VsZi5zaXplX3JlYWQgKyBuCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2hpbGUgc2VsZi5zaXplX3JlYWQgPCBzZWxmLmNodW5rc2l6ZToKICAgICAgICAgICAgIG4gPSBtaW4oODE5Miwgc2VsZi5jaHVua3NpemUgLSBzZWxmLnNpemVfcmVhZCkKZGlmZiAtLWdpdCBhL0xpYi9jb2RlLnB5IGIvTGliL2NvZGUucHkKaW5kZXggOTAyMGFhYi4uZjgxODRiNiAxMDA2NDQKLS0tIGEvTGliL2NvZGUucHkKKysrIGIvTGliL2NvZGUucHkKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZSgiUHl0aG9uICVzIG9uICVzXG4lc1xuKCVzKVxuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgIChzeXMudmVyc2lvbiwgc3lzLnBsYXRmb3JtLCBjcHJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pKQotICAgICAgICBlbHNlOgorICAgICAgICBlbGlmIGJhbm5lcjoKICAgICAgICAgICAgIHNlbGYud3JpdGUoIiVzXG4iICUgc3RyKGJhbm5lcikpCiAgICAgICAgIG1vcmUgPSAwCiAgICAgICAgIHdoaWxlIDE6CmRpZmYgLS1naXQgYS9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkgYi9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkKaW5kZXggZDczNzI5NS4uMDJiZGM1NyAxMDA2NDQKLS0tIGEvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5CisrKyBiL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weQpAQCAtMywxNiArMywxNiBAQAogCiAjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgY29udGludWUgdG8gbWFrZSB0aGUgY29sbGVjdGlvbnMgQUJDcwogIyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgY29sbGVjdGlvbnMgbW9kdWxlLgotZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0ICoKLWltcG9ydCBjb2xsZWN0aW9ucy5hYmMKLV9fYWxsX18gKz0gY29sbGVjdGlvbnMuYWJjLl9fYWxsX18KK2Zyb20gX2NvbGxlY3Rpb25zX2FiYyBpbXBvcnQgKgoraW1wb3J0IF9jb2xsZWN0aW9uc19hYmMKK19fYWxsX18gKz0gX2NvbGxlY3Rpb25zX2FiYy5fX2FsbF9fCiAKIGZyb20gX2NvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSwgZGVmYXVsdGRpY3QKIGZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIgYXMgX2l0ZW1nZXR0ZXIsIGVxIGFzIF9lcQogZnJvbSBrZXl3b3JkIGltcG9ydCBpc2tleXdvcmQgYXMgX2lza2V5d29yZAogaW1wb3J0IHN5cyBhcyBfc3lzCiBpbXBvcnQgaGVhcHEgYXMgX2hlYXBxCi1mcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5IGFzIF9wcm94eQorZnJvbSBfd2Vha3JlZiBpbXBvcnQgcHJveHkgYXMgX3Byb3h5CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcmVwZWF0IGFzIF9yZXBlYXQsIGNoYWluIGFzIF9jaGFpbiwgc3Rhcm1hcCBhcyBfc3Rhcm1hcAogZnJvbSByZXBybGliIGltcG9ydCByZWN1cnNpdmVfcmVwciBhcyBfcmVjdXJzaXZlX3JlcHIKIApAQCAtMTk5LDEzICsxOTksMTAgQEAKIAogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICAnUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZycKLSAgICAgICAgaXRlbXMgPSBbW2ssIHNlbGZba11dIGZvciBrIGluIHNlbGZdCiAgICAgICAgIGluc3RfZGljdCA9IHZhcnMoc2VsZikuY29weSgpCiAgICAgICAgIGZvciBrIGluIHZhcnMoT3JkZXJlZERpY3QoKSk6CiAgICAgICAgICAgICBpbnN0X2RpY3QucG9wKGssIE5vbmUpCi0gICAgICAgIGlmIGluc3RfZGljdDoKLSAgICAgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIChpdGVtcywpLCBpbnN0X2RpY3QpCi0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKGl0ZW1zLCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCAoKSwgaW5zdF9kaWN0IG9yIE5vbmUsIE5vbmUsIGl0ZXIoc2VsZi5pdGVtcygpKQogCiAgICAgZGVmIGNvcHkoc2VsZik6CiAgICAgICAgICdvZC5jb3B5KCkgLT4gYSBzaGFsbG93IGNvcHkgb2Ygb2QnCkBAIC04MjIsOSArODE5LDE0IEBACiAKICAgICBfX2NvcHlfXyA9IGNvcHkKIAotICAgIGRlZiBuZXdfY2hpbGQoc2VsZik6ICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucHVzaCgpCi0gICAgICAgICdOZXcgQ2hhaW5NYXAgd2l0aCBhIG5ldyBkaWN0IGZvbGxvd2VkIGJ5IGFsbCBwcmV2aW91cyBtYXBzLicKLSAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHt9LCAqc2VsZi5tYXBzKQorICAgIGRlZiBuZXdfY2hpbGQoc2VsZiwgbT1Ob25lKTogICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucHVzaCgpCisgICAgICAgICcnJworICAgICAgICBOZXcgQ2hhaW5NYXAgd2l0aCBhIG5ldyBtYXAgZm9sbG93ZWQgYnkgYWxsIHByZXZpb3VzIG1hcHMuIElmIG5vCisgICAgICAgIG1hcCBpcyBwcm92aWRlZCwgYW4gZW1wdHkgZGljdCBpcyB1c2VkLgorICAgICAgICAnJycKKyAgICAgICAgaWYgbSBpcyBOb25lOgorICAgICAgICAgICAgbSA9IHt9CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhtLCAqc2VsZi5tYXBzKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIHBhcmVudHMoc2VsZik6ICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpa2UgRGphbmdvJ3MgQ29udGV4dC5wb3AoKQpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zL2FiYy5weSBiL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkKaW5kZXggNzkzOTI2OC4uODkxNjAwZCAxMDA2NDQKLS0tIGEvTGliL2NvbGxlY3Rpb25zL2FiYy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMvYWJjLnB5CkBAIC0xLDcyOCArMSwyIEBACi0jIENvcHlyaWdodCAyMDA3IEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCi0KLSIiIkFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgZm9yIGNvbGxlY3Rpb25zLCBhY2NvcmRpbmcgdG8gUEVQIDMxMTkuCi0KLVVuaXQgdGVzdHMgYXJlIGluIHRlc3RfY29sbGVjdGlvbnMuCi0iIiIKLQotZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCi1pbXBvcnQgc3lzCi0KLV9fYWxsX18gPSBbIkhhc2hhYmxlIiwgIkl0ZXJhYmxlIiwgIkl0ZXJhdG9yIiwKLSAgICAgICAgICAgIlNpemVkIiwgIkNvbnRhaW5lciIsICJDYWxsYWJsZSIsCi0gICAgICAgICAgICJTZXQiLCAiTXV0YWJsZVNldCIsCi0gICAgICAgICAgICJNYXBwaW5nIiwgIk11dGFibGVNYXBwaW5nIiwKLSAgICAgICAgICAgIk1hcHBpbmdWaWV3IiwgIktleXNWaWV3IiwgIkl0ZW1zVmlldyIsICJWYWx1ZXNWaWV3IiwKLSAgICAgICAgICAgIlNlcXVlbmNlIiwgIk11dGFibGVTZXF1ZW5jZSIsCi0gICAgICAgICAgICJCeXRlU3RyaW5nIiwKLSAgICAgICAgICAgXQotCi0jIFByaXZhdGUgbGlzdCBvZiB0eXBlcyB0aGF0IHdlIHdhbnQgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgdmFyaW91cyBBQkNzCi0jIHNvIHRoYXQgdGhleSB3aWxsIHBhc3MgdGVzdHMgbGlrZToKLSMgICAgICAgaXQgPSBpdGVyKHNvbWVieXRlYXJyYXkpCi0jICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGl0LCBJdGVyYWJsZSkKLSMgTm90ZTogIGluIG90aGVyIGltcGxlbWVudGF0aW9ucywgdGhlc2UgdHlwZXMgbWFueSBub3QgYmUgZGlzdGluY3QKLSMgYW5kIHRoZXkgbWFrZSBoYXZlIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyB0eXBlcyB0aGF0Ci0jIGFyZSBub3QgaW5jbHVkZWQgb24gdGhpcyBsaXN0LgotYnl0ZXNfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYicnKSkKLWJ5dGVhcnJheV9pdGVyYXRvciA9IHR5cGUoaXRlcihieXRlYXJyYXkoKSkpCi0jY2FsbGFibGVfaXRlcmF0b3IgPSA/Pz8KLWRpY3Rfa2V5aXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30ua2V5cygpKSkKLWRpY3RfdmFsdWVpdGVyYXRvciA9IHR5cGUoaXRlcih7fS52YWx1ZXMoKSkpCi1kaWN0X2l0ZW1pdGVyYXRvciA9IHR5cGUoaXRlcih7fS5pdGVtcygpKSkKLWxpc3RfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoW10pKQotbGlzdF9yZXZlcnNlaXRlcmF0b3IgPSB0eXBlKGl0ZXIocmV2ZXJzZWQoW10pKSkKLXJhbmdlX2l0ZXJhdG9yID0gdHlwZShpdGVyKHJhbmdlKDApKSkKLXNldF9pdGVyYXRvciA9IHR5cGUoaXRlcihzZXQoKSkpCi1zdHJfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoIiIpKQotdHVwbGVfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoKCkpKQotemlwX2l0ZXJhdG9yID0gdHlwZShpdGVyKHppcCgpKSkKLSMjIHZpZXdzICMjCi1kaWN0X2tleXMgPSB0eXBlKHt9LmtleXMoKSkKLWRpY3RfdmFsdWVzID0gdHlwZSh7fS52YWx1ZXMoKSkKLWRpY3RfaXRlbXMgPSB0eXBlKHt9Lml0ZW1zKCkpCi0jIyBtaXNjICMjCi1tYXBwaW5ncHJveHkgPSB0eXBlKHR5cGUuX19kaWN0X18pCi0KLQotIyMjIE9ORS1UUklDSyBQT05JRVMgIyMjCi0KLWNsYXNzIEhhc2hhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgSGFzaGFibGU6Ci0gICAgICAgICAgICBmb3IgQiBpbiBDLl9fbXJvX186Ci0gICAgICAgICAgICAgICAgaWYgIl9faGFzaF9fIiBpbiBCLl9fZGljdF9fOgotICAgICAgICAgICAgICAgICAgICBpZiBCLl9fZGljdF9fWyJfX2hhc2hfXyJdOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgSXRlcmFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgd2hpbGUgRmFsc2U6Ci0gICAgICAgICAgICB5aWVsZCBOb25lCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgSXRlcmFibGU6Ci0gICAgICAgICAgICBpZiBhbnkoIl9faXRlcl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgSXRlcmF0b3IoSXRlcmFibGUpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgJ1JldHVybiB0aGUgbmV4dCBpdGVtIGZyb20gdGhlIGl0ZXJhdG9yLiBXaGVuIGV4aGF1c3RlZCwgcmFpc2UgU3RvcEl0ZXJhdGlvbicKLSAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEl0ZXJhdG9yOgotICAgICAgICAgICAgaWYgKGFueSgiX19uZXh0X18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKSBhbmQKLSAgICAgICAgICAgICAgICBhbnkoIl9faXRlcl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykpOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi1JdGVyYXRvci5yZWdpc3RlcihieXRlc19pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKGJ5dGVhcnJheV9pdGVyYXRvcikKLSNJdGVyYXRvci5yZWdpc3RlcihjYWxsYWJsZV9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKGRpY3Rfa2V5aXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihkaWN0X3ZhbHVlaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihkaWN0X2l0ZW1pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKGxpc3RfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihsaXN0X3JldmVyc2VpdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHJhbmdlX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoc2V0X2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoc3RyX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIodHVwbGVfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3Rlcih6aXBfaXRlcmF0b3IpCi0KLWNsYXNzIFNpemVkKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDAKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBTaXplZDoKLSAgICAgICAgICAgIGlmIGFueSgiX19sZW5fXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIENvbnRhaW5lcihtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgQ29udGFpbmVyOgotICAgICAgICAgICAgaWYgYW55KCJfX2NvbnRhaW5zX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi1jbGFzcyBDYWxsYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBDYWxsYWJsZToKLSAgICAgICAgICAgIGlmIGFueSgiX19jYWxsX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi0jIyMgU0VUUyAjIyMKLQotCi1jbGFzcyBTZXQoU2l6ZWQsIEl0ZXJhYmxlLCBDb250YWluZXIpOgotCi0gICAgIiIiQSBzZXQgaXMgYSBmaW5pdGUsIGl0ZXJhYmxlIGNvbnRhaW5lci4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCi0gICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fY29udGFpbnNfXywgX19pdGVyX18gYW5kIF9fbGVuX18uCi0KLSAgICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKLSAgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJlZGVmaW5lIF9fbGVfXyBhbmQKLSAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgaWYgbGVuKHNlbGYpID4gbGVuKG90aGVyKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBmb3IgZWxlbSBpbiBzZWxmOgotICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gb3RoZXI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA8IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQotCi0gICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBvdGhlci5fX2x0X18oc2VsZikKLQotICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gb3RoZXIuX19sZV9fKHNlbGYpCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA9PSBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVyKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9mcm9tX2l0ZXJhYmxlKGNscywgaXQpOgotICAgICAgICAnJydDb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGZyb20gYW55IGl0ZXJhYmxlIGlucHV0LgotCi0gICAgICAgIE11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhlIGNsYXNzIGNvbnN0cnVjdG9yIHNpZ25hdHVyZQotICAgICAgICBkb2VzIG5vdCBhY2NlcHQgYW4gaXRlcmFibGUgZm9yIGFuIGlucHV0LgotICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIGNscyhpdCkKLQotICAgIGRlZiBfX2FuZF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZSh2YWx1ZSBmb3IgdmFsdWUgaW4gb3RoZXIgaWYgdmFsdWUgaW4gc2VsZikKLQotICAgIGRlZiBpc2Rpc2pvaW50KHNlbGYsIG90aGVyKToKLSAgICAgICAgJ1JldHVybiBUcnVlIGlmIHR3byBzZXRzIGhhdmUgYSBudWxsIGludGVyc2VjdGlvbi4nCi0gICAgICAgIGZvciB2YWx1ZSBpbiBvdGhlcjoKLSAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX19vcl9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICBjaGFpbiA9IChlIGZvciBzIGluIChzZWxmLCBvdGhlcikgZm9yIGUgaW4gcykKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUoY2hhaW4pCi0KLSAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgICAgIG90aGVyID0gc2VsZi5fZnJvbV9pdGVyYWJsZShvdGhlcikKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIHNlbGYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgbm90IGluIG90aGVyKQotCi0gICAgZGVmIF9feG9yX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCi0gICAgICAgIHJldHVybiAoc2VsZiAtIG90aGVyKSB8IChvdGhlciAtIHNlbGYpCi0KLSAgICBkZWYgX2hhc2goc2VsZik6Ci0gICAgICAgICIiIkNvbXB1dGUgdGhlIGhhc2ggdmFsdWUgb2YgYSBzZXQuCi0KLSAgICAgICAgTm90ZSB0aGF0IHdlIGRvbid0IGRlZmluZSBfX2hhc2hfXzogbm90IGFsbCBzZXRzIGFyZSBoYXNoYWJsZS4KLSAgICAgICAgQnV0IGlmIHlvdSBkZWZpbmUgYSBoYXNoYWJsZSBzZXQgdHlwZSwgaXRzIF9faGFzaF9fIHNob3VsZAotICAgICAgICBjYWxsIHRoaXMgZnVuY3Rpb24uCi0KLSAgICAgICAgVGhpcyBtdXN0IGJlIGNvbXBhdGlibGUgX19lcV9fLgotCi0gICAgICAgIEFsbCBzZXRzIG91Z2h0IHRvIGNvbXBhcmUgZXF1YWwgaWYgdGhleSBjb250YWluIHRoZSBzYW1lCi0gICAgICAgIGVsZW1lbnRzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCwgYW5kCi0gICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50czsgc28gdGhlcmUncyBub3QgbXVjaAotICAgICAgICBmcmVlZG9tIGZvciBfX2VxX18gb3IgX19oYXNoX18uICBXZSBtYXRjaCB0aGUgYWxnb3JpdGhtIHVzZWQKLSAgICAgICAgYnkgdGhlIGJ1aWx0LWluIGZyb3plbnNldCB0eXBlLgotICAgICAgICAiIiIKLSAgICAgICAgTUFYID0gc3lzLm1heHNpemUKLSAgICAgICAgTUFTSyA9IDIgKiBNQVggKyAxCi0gICAgICAgIG4gPSBsZW4oc2VsZikKLSAgICAgICAgaCA9IDE5Mjc4NjgyMzcgKiAobiArIDEpCi0gICAgICAgIGggJj0gTUFTSwotICAgICAgICBmb3IgeCBpbiBzZWxmOgotICAgICAgICAgICAgaHggPSBoYXNoKHgpCi0gICAgICAgICAgICBoIF49IChoeCBeIChoeCA8PCAxNikgXiA4OTg2OTc0NykgICogMzY0NDc5ODE2NwotICAgICAgICAgICAgaCAmPSBNQVNLCi0gICAgICAgIGggPSBoICogNjkwNjkgKyA5MDcxMzM5MjMKLSAgICAgICAgaCAmPSBNQVNLCi0gICAgICAgIGlmIGggPiBNQVg6Ci0gICAgICAgICAgICBoIC09IE1BU0sgKyAxCi0gICAgICAgIGlmIGggPT0gLTE6Ci0gICAgICAgICAgICBoID0gNTkwOTIzNzEzCi0gICAgICAgIHJldHVybiBoCi0KLVNldC5yZWdpc3Rlcihmcm96ZW5zZXQpCi0KLQotY2xhc3MgTXV0YWJsZVNldChTZXQpOgotICAgICIiIkEgbXV0YWJsZSBzZXQgaXMgYSBmaW5pdGUsIGl0ZXJhYmxlIGNvbnRhaW5lci4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCi0gICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fY29udGFpbnNfXywgX19pdGVyX18sIF9fbGVuX18sCi0gICAgYWRkKCksIGFuZCBkaXNjYXJkKCkuCi0KLSAgICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKLSAgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJlZGVmaW5lIF9fbGVfXyBhbmQKLSAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgYWRkKHNlbGYsIHZhbHVlKToKLSAgICAgICAgIiIiQWRkIGFuIGVsZW1lbnQuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBkaXNjYXJkKHNlbGYsIHZhbHVlKToKLSAgICAgICAgIiIiUmVtb3ZlIGFuIGVsZW1lbnQuICBEbyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGFic2VudC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiBJZiBub3QgYSBtZW1iZXIsIHJhaXNlIGEgS2V5RXJyb3IuIiIiCi0gICAgICAgIGlmIHZhbHVlIG5vdCBpbiBzZWxmOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IodmFsdWUpCi0gICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLQotICAgIGRlZiBwb3Aoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgcG9wcGVkIHZhbHVlLiAgUmFpc2UgS2V5RXJyb3IgaWYgZW1wdHkuIiIiCi0gICAgICAgIGl0ID0gaXRlcihzZWxmKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2YWx1ZSA9IG5leHQoaXQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICByZXR1cm4gdmFsdWUKLQotICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgIiIiVGhpcyBpcyBzbG93IChjcmVhdGVzIE4gbmV3IGl0ZXJhdG9ycyEpIGJ1dCBlZmZlY3RpdmUuIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5wb3AoKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgX19pb3JfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKLSAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9faWFuZF9fKHNlbGYsIGl0KToKLSAgICAgICAgZm9yIHZhbHVlIGluIChzZWxmIC0gaXQpOgotICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9faXhvcl9fKHNlbGYsIGl0KToKLSAgICAgICAgaWYgaXQgaXMgc2VsZjoKLSAgICAgICAgICAgIHNlbGYuY2xlYXIoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaXQsIFNldCk6Ci0gICAgICAgICAgICAgICAgaXQgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKGl0KQotICAgICAgICAgICAgZm9yIHZhbHVlIGluIGl0OgotICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2lzdWJfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGlmIGl0IGlzIHNlbGY6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKLSAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLU11dGFibGVTZXQucmVnaXN0ZXIoc2V0KQotCi0KLSMjIyBNQVBQSU5HUyAjIyMKLQotCi1jbGFzcyBNYXBwaW5nKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICAiIiJBIE1hcHBpbmcgaXMgYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYXNzb2NpYXRpbmcga2V5L3ZhbHVlCi0gICAgcGFpcnMuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2dldGl0ZW1fXywgX19pdGVyX18sIGFuZCBfX2xlbl9fLgotCi0gICAgIiIiCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLQotICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAnRC5nZXQoa1ssZF0pIC0+IERba10gaWYgayBpbiBELCBlbHNlIGQuICBkIGRlZmF1bHRzIHRvIE5vbmUuJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYga2V5cyhzZWxmKToKLSAgICAgICAgIkQua2V5cygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGtleXMiCi0gICAgICAgIHJldHVybiBLZXlzVmlldyhzZWxmKQotCi0gICAgZGVmIGl0ZW1zKHNlbGYpOgotICAgICAgICAiRC5pdGVtcygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGl0ZW1zIgotICAgICAgICByZXR1cm4gSXRlbXNWaWV3KHNlbGYpCi0KLSAgICBkZWYgdmFsdWVzKHNlbGYpOgotICAgICAgICAiRC52YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIgotICAgICAgICByZXR1cm4gVmFsdWVzVmlldyhzZWxmKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gZGljdChzZWxmLml0ZW1zKCkpID09IGRpY3Qob3RoZXIuaXRlbXMoKSkKLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVyKQotCi1NYXBwaW5nLnJlZ2lzdGVyKG1hcHBpbmdwcm94eSkKLQotCi1jbGFzcyBNYXBwaW5nVmlldyhTaXplZCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFwcGluZyk6Ci0gICAgICAgIHNlbGYuX21hcHBpbmcgPSBtYXBwaW5nCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9tYXBwaW5nKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJ3swLl9fY2xhc3NfXy5fX25hbWVfX30oezAuX21hcHBpbmchcn0pJy5mb3JtYXQoc2VsZikKLQotCi1jbGFzcyBLZXlzVmlldyhNYXBwaW5nVmlldywgU2V0KToKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZnJvbV9pdGVyYWJsZShzZWxmLCBpdCk6Ci0gICAgICAgIHJldHVybiBzZXQoaXQpCi0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fbWFwcGluZwotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICB5aWVsZCBrZXkKLQotS2V5c1ZpZXcucmVnaXN0ZXIoZGljdF9rZXlzKQotCi0KLWNsYXNzIEl0ZW1zVmlldyhNYXBwaW5nVmlldywgU2V0KToKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZnJvbV9pdGVyYWJsZShzZWxmLCBpdCk6Ci0gICAgICAgIHJldHVybiBzZXQoaXQpCi0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgotICAgICAgICBrZXksIHZhbHVlID0gaXRlbQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2ID0gc2VsZi5fbWFwcGluZ1trZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHYgPT0gdmFsdWUKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgeWllbGQgKGtleSwgc2VsZi5fbWFwcGluZ1trZXldKQotCi1JdGVtc1ZpZXcucmVnaXN0ZXIoZGljdF9pdGVtcykKLQotCi1jbGFzcyBWYWx1ZXNWaWV3KE1hcHBpbmdWaWV3KToKLQotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICBpZiB2YWx1ZSA9PSBzZWxmLl9tYXBwaW5nW2tleV06Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKLSAgICAgICAgICAgIHlpZWxkIHNlbGYuX21hcHBpbmdba2V5XQotCi1WYWx1ZXNWaWV3LnJlZ2lzdGVyKGRpY3RfdmFsdWVzKQotCi0KLWNsYXNzIE11dGFibGVNYXBwaW5nKE1hcHBpbmcpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgICIiIkEgTXV0YWJsZU1hcHBpbmcgaXMgYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYXNzb2NpYXRpbmcKLSAgICBrZXkvdmFsdWUgcGFpcnMuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2dldGl0ZW1fXywgX19zZXRpdGVtX18sIF9fZGVsaXRlbV9fLAotICAgIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KLQotICAgICIiIgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0KLSAgICBfX21hcmtlciA9IG9iamVjdCgpCi0KLSAgICBkZWYgcG9wKHNlbGYsIGtleSwgZGVmYXVsdD1fX21hcmtlcik6Ci0gICAgICAgICcnJ0QucG9wKGtbLGRdKSAtPiB2LCByZW1vdmUgc3BlY2lmaWVkIGtleSBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlLgotICAgICAgICAgIElmIGtleSBpcyBub3QgZm91bmQsIGQgaXMgcmV0dXJuZWQgaWYgZ2l2ZW4sIG90aGVyd2lzZSBLZXlFcnJvciBpcyByYWlzZWQuCi0gICAgICAgICcnJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBpZiBkZWZhdWx0IGlzIHNlbGYuX19tYXJrZXI6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWwgc2VsZltrZXldCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUKLQotICAgIGRlZiBwb3BpdGVtKHNlbGYpOgotICAgICAgICAnJydELnBvcGl0ZW0oKSAtPiAoaywgdiksIHJlbW92ZSBhbmQgcmV0dXJuIHNvbWUgKGtleSwgdmFsdWUpIHBhaXIKLSAgICAgICAgICAgYXMgYSAyLXR1cGxlOyBidXQgcmFpc2UgS2V5RXJyb3IgaWYgRCBpcyBlbXB0eS4KLSAgICAgICAgJycnCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGtleSA9IG5leHQoaXRlcihzZWxmKSkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcgotICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQotICAgICAgICBkZWwgc2VsZltrZXldCi0gICAgICAgIHJldHVybiBrZXksIHZhbHVlCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICdELmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBELicKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBzZWxmLnBvcGl0ZW0oKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgdXBkYXRlKCphcmdzLCAqKmt3ZHMpOgotICAgICAgICAnJycgRC51cGRhdGUoW0UsIF0qKkYpIC0+IE5vbmUuICBVcGRhdGUgRCBmcm9tIG1hcHBpbmcvaXRlcmFibGUgRSBhbmQgRi4KLSAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgaGFzIGEgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgayBpbiBFOiBEW2tdID0gRVtrXQotICAgICAgICAgICAgSWYgRSBwcmVzZW50IGFuZCBsYWNrcyAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciAoaywgdikgaW4gRTogRFtrXSA9IHYKLSAgICAgICAgICAgIEluIGVpdGhlciBjYXNlLCB0aGlzIGlzIGZvbGxvd2VkIGJ5OiBmb3IgaywgdiBpbiBGLml0ZW1zKCk6IERba10gPSB2Ci0gICAgICAgICcnJwotICAgICAgICBpZiBsZW4oYXJncykgPiAyOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1cGRhdGUoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50cyAoe30gZ2l2ZW4pIi5mb3JtYXQobGVuKGFyZ3MpKSkKLSAgICAgICAgZWxpZiBub3QgYXJnczoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudCAoMCBnaXZlbikiKQotICAgICAgICBzZWxmID0gYXJnc1swXQotICAgICAgICBvdGhlciA9IGFyZ3NbMV0gaWYgbGVuKGFyZ3MpID49IDIgZWxzZSAoKQotCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIE1hcHBpbmcpOgotICAgICAgICAgICAgZm9yIGtleSBpbiBvdGhlcjoKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCi0gICAgICAgIGVsaWYgaGFzYXR0cihvdGhlciwgImtleXMiKToKLSAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXIua2V5cygpOgotICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IG90aGVyW2tleV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIG90aGVyOgotICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCi0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3ZHMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCi0KLSAgICBkZWYgc2V0ZGVmYXVsdChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgICAgICdELnNldGRlZmF1bHQoa1ssZF0pIC0+IEQuZ2V0KGssZCksIGFsc28gc2V0IERba109ZCBpZiBrIG5vdCBpbiBEJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IGRlZmF1bHQKLSAgICAgICAgcmV0dXJuIGRlZmF1bHQKLQotTXV0YWJsZU1hcHBpbmcucmVnaXN0ZXIoZGljdCkKLQotCi0jIyMgU0VRVUVOQ0VTICMjIwotCi0KLWNsYXNzIFNlcXVlbmNlKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKLQotICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KLQotICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSBfX25ld19fIG9yIF9faW5pdF9fLAotICAgIF9fZ2V0aXRlbV9fLCBhbmQgX19sZW5fXy4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGkgPSAwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdiA9IHNlbGZbaV0KLSAgICAgICAgICAgICAgICB5aWVsZCB2Ci0gICAgICAgICAgICAgICAgaSArPSAxCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKLSAgICAgICAgZm9yIHYgaW4gc2VsZjoKLSAgICAgICAgICAgIGlmIHYgPT0gdmFsdWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX19yZXZlcnNlZF9fKHNlbGYpOgotICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShsZW4oc2VsZikpKToKLSAgICAgICAgICAgIHlpZWxkIHNlbGZbaV0KLQotICAgIGRlZiBpbmRleChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICcnJ1MuaW5kZXgodmFsdWUpIC0+IGludGVnZXIgLS0gcmV0dXJuIGZpcnN0IGluZGV4IG9mIHZhbHVlLgotICAgICAgICAgICBSYWlzZXMgVmFsdWVFcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQuCi0gICAgICAgICcnJwotICAgICAgICBmb3IgaSwgdiBpbiBlbnVtZXJhdGUoc2VsZik6Ci0gICAgICAgICAgICBpZiB2ID09IHZhbHVlOgotICAgICAgICAgICAgICAgIHJldHVybiBpCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKLQotICAgIGRlZiBjb3VudChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICdTLmNvdW50KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdmFsdWUnCi0gICAgICAgIHJldHVybiBzdW0oMSBmb3IgdiBpbiBzZWxmIGlmIHYgPT0gdmFsdWUpCi0KLVNlcXVlbmNlLnJlZ2lzdGVyKHR1cGxlKQotU2VxdWVuY2UucmVnaXN0ZXIoc3RyKQotU2VxdWVuY2UucmVnaXN0ZXIocmFuZ2UpCi0KLQotY2xhc3MgQnl0ZVN0cmluZyhTZXF1ZW5jZSk6Ci0KLSAgICAiIiJUaGlzIHVuaWZpZXMgYnl0ZXMgYW5kIGJ5dGVhcnJheS4KLQotICAgIFhYWCBTaG91bGQgYWRkIGFsbCB0aGVpciBtZXRob2RzLgotICAgICIiIgotCi0gICAgX19zbG90c19fID0gKCkKLQotQnl0ZVN0cmluZy5yZWdpc3RlcihieXRlcykKLUJ5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZWFycmF5KQotCi0KLWNsYXNzIE11dGFibGVTZXF1ZW5jZShTZXF1ZW5jZSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgIiIiQWxsIHRoZSBvcGVyYXRpb25zIG9uIGEgcmVhZC1vbmx5IHNlcXVlbmNlLgotCi0gICAgQ29uY3JldGUgc3ViY2xhc3NlcyBtdXN0IHByb3ZpZGUgX19uZXdfXyBvciBfX2luaXRfXywKLSAgICBfX2dldGl0ZW1fXywgX19zZXRpdGVtX18sIF9fZGVsaXRlbV9fLCBfX2xlbl9fLCBhbmQgaW5zZXJ0KCkuCi0KLSAgICAiIiIKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgdmFsdWUpOgotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgaW5kZXgpOgotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCB2YWx1ZSk6Ci0gICAgICAgICdTLmluc2VydChpbmRleCwgdmFsdWUpIC0tIGluc2VydCB2YWx1ZSBiZWZvcmUgaW5kZXgnCi0gICAgICAgIHJhaXNlIEluZGV4RXJyb3IKLQotICAgIGRlZiBhcHBlbmQoc2VsZiwgdmFsdWUpOgotICAgICAgICAnUy5hcHBlbmQodmFsdWUpIC0tIGFwcGVuZCB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZScKLSAgICAgICAgc2VsZi5pbnNlcnQobGVuKHNlbGYpLCB2YWx1ZSkKLQotICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgJ1MuY2xlYXIoKSAtPiBOb25lIC0tIHJlbW92ZSBhbGwgaXRlbXMgZnJvbSBTJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgcmV2ZXJzZShzZWxmKToKLSAgICAgICAgJ1MucmV2ZXJzZSgpIC0tIHJldmVyc2UgKklOIFBMQUNFKicKLSAgICAgICAgbiA9IGxlbihzZWxmKQotICAgICAgICBmb3IgaSBpbiByYW5nZShuLy8yKToKLSAgICAgICAgICAgIHNlbGZbaV0sIHNlbGZbbi1pLTFdID0gc2VsZltuLWktMV0sIHNlbGZbaV0KLQotICAgIGRlZiBleHRlbmQoc2VsZiwgdmFsdWVzKToKLSAgICAgICAgJ1MuZXh0ZW5kKGl0ZXJhYmxlKSAtLSBleHRlbmQgc2VxdWVuY2UgYnkgYXBwZW5kaW5nIGVsZW1lbnRzIGZyb20gdGhlIGl0ZXJhYmxlJwotICAgICAgICBmb3IgdiBpbiB2YWx1ZXM6Ci0gICAgICAgICAgICBzZWxmLmFwcGVuZCh2KQotCi0gICAgZGVmIHBvcChzZWxmLCBpbmRleD0tMSk6Ci0gICAgICAgICcnJ1MucG9wKFtpbmRleF0pIC0+IGl0ZW0gLS0gcmVtb3ZlIGFuZCByZXR1cm4gaXRlbSBhdCBpbmRleCAoZGVmYXVsdCBsYXN0KS4KLSAgICAgICAgICAgUmFpc2UgSW5kZXhFcnJvciBpZiBsaXN0IGlzIGVtcHR5IG9yIGluZGV4IGlzIG91dCBvZiByYW5nZS4KLSAgICAgICAgJycnCi0gICAgICAgIHYgPSBzZWxmW2luZGV4XQotICAgICAgICBkZWwgc2VsZltpbmRleF0KLSAgICAgICAgcmV0dXJuIHYKLQotICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgotICAgICAgICAnJydTLnJlbW92ZSh2YWx1ZSkgLS0gcmVtb3ZlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdmFsdWUuCi0gICAgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgotICAgICAgICAnJycKLSAgICAgICAgZGVsIHNlbGZbc2VsZi5pbmRleCh2YWx1ZSldCi0KLSAgICBkZWYgX19pYWRkX18oc2VsZiwgdmFsdWVzKToKLSAgICAgICAgc2VsZi5leHRlbmQodmFsdWVzKQotICAgICAgICByZXR1cm4gc2VsZgotCi1NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIobGlzdCkKLU11dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihieXRlYXJyYXkpICAjIE11bHRpcGx5IGluaGVyaXRpbmcsIHNlZSBCeXRlU3RyaW5nCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0ICoKK2Zyb20gX2NvbGxlY3Rpb25zX2FiYyBpbXBvcnQgX19hbGxfXwpkaWZmIC0tZ2l0IGEvTGliL2NvbG9yc3lzLnB5IGIvTGliL2NvbG9yc3lzLnB5CmluZGV4IGE2YzBjZjYuLmI5M2UzODQgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xvcnN5cy5weQorKysgYi9MaWIvY29sb3JzeXMucHkKQEAgLTMzLDE3ICszMywyNSBAQAogIyBZSVE6IHVzZWQgYnkgY29tcG9zaXRlIHZpZGVvIHNpZ25hbHMgKGxpbmVhciBjb21iaW5hdGlvbnMgb2YgUkdCKQogIyBZOiBwZXJjZWl2ZWQgZ3JleSBsZXZlbCAoMC4wID09IGJsYWNrLCAxLjAgPT0gd2hpdGUpCiAjIEksIFE6IGNvbG9yIGNvbXBvbmVudHMKKyMKKyMgVGhlcmUgYXJlIGEgZ3JlYXQgbWFueSB2ZXJzaW9ucyBvZiB0aGUgY29uc3RhbnRzIHVzZWQgaW4gdGhlc2UgZm9ybXVsYWUuCisjIFRoZSBvbmVzIGluIHRoaXMgbGlicmFyeSB1c2VzIGNvbnN0YW50cyBmcm9tIHRoZSBGQ0MgdmVyc2lvbiBvZiBOVFNDLgogCiBkZWYgcmdiX3RvX3lpcShyLCBnLCBiKToKICAgICB5ID0gMC4zMCpyICsgMC41OSpnICsgMC4xMSpiCi0gICAgaSA9IDAuNjAqciAtIDAuMjgqZyAtIDAuMzIqYgotICAgIHEgPSAwLjIxKnIgLSAwLjUyKmcgKyAwLjMxKmIKKyAgICBpID0gMC43NCooci15KSAtIDAuMjcqKGIteSkKKyAgICBxID0gMC40OCooci15KSArIDAuNDEqKGIteSkKICAgICByZXR1cm4gKHksIGksIHEpCiAKIGRlZiB5aXFfdG9fcmdiKHksIGksIHEpOgotICAgIHIgPSB5ICsgMC45NDgyNjIqaSArIDAuNjI0MDEzKnEKLSAgICBnID0geSAtIDAuMjc2MDY2KmkgLSAwLjYzOTgxMCpxCi0gICAgYiA9IHkgLSAxLjEwNTQ1MCppICsgMS43Mjk4NjAqcQorICAgICMgciA9IHkgKyAoMC4yNypxICsgMC40MSppKSAvICgwLjc0KjAuNDEgKyAwLjI3KjAuNDgpCisgICAgIyBiID0geSArICgwLjc0KnEgLSAwLjQ4KmkpIC8gKDAuNzQqMC40MSArIDAuMjcqMC40OCkKKyAgICAjIGcgPSB5IC0gKDAuMzAqKHIteSkgKyAwLjExKihiLXkpKSAvIDAuNTkKKworICAgIHIgPSB5ICsgMC45NDY4ODIyMTcwOTAwNjkzKmkgKyAwLjYyMzU1NjU4MTk4NjE0MzMqcQorICAgIGcgPSB5IC0gMC4yNzQ3ODc2NDYyOTg5NzgzNCppIC0gMC42MzU2OTEwNzkxODczODAxKnEKKyAgICBiID0geSAtIDEuMTA4NTQ1MDM0NjQyMDMyMippICsgMS43MDkwMDY5Mjg0MDY0NjY2KnEKKwogICAgIGlmIHIgPCAwLjA6CiAgICAgICAgIHIgPSAwLjAKICAgICBpZiBnIDwgMC4wOgpkaWZmIC0tZ2l0IGEvTGliL2NvbXBpbGVhbGwucHkgYi9MaWIvY29tcGlsZWFsbC5weQppbmRleCBkM2NmZjZhLi40NzVkYzFjIDEwMDY0NAotLS0gYS9MaWIvY29tcGlsZWFsbC5weQorKysgYi9MaWIvY29tcGlsZWFsbC5weQpAQCAtMTMsNyArMTMsNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzdHJ1Y3QKIApAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICBwcmludCgnTGlzdGluZyB7IXJ9Li4uJy5mb3JtYXQoZGlyKSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwcmludCgiQ2FuJ3QgbGlzdCB7IXJ9Ii5mb3JtYXQoZGlyKSkKICAgICAgICAgbmFtZXMgPSBbXQogICAgIG5hbWVzLnNvcnQoKQpAQCAtOTEsMjIgKzkxLDIzIEBACiAgICAgICAgICAgICBjZmlsZSA9IGZ1bGxuYW1lICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBvcHRpbWl6ZSA+PSAwOgotICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZ1bGxuYW1lKQogICAgICAgICAgICAgY2FjaGVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGNmaWxlKQogICAgICAgICBoZWFkLCB0YWlsID0gbmFtZVs6LTNdLCBuYW1lWy0zOl0KICAgICAgICAgaWYgdGFpbCA9PSAnLnB5JzoKICAgICAgICAgICAgIGlmIG5vdCBmb3JjZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG10aW1lID0gaW50KG9zLnN0YXQoZnVsbG5hbWUpLnN0X210aW1lKQotICAgICAgICAgICAgICAgICAgICBleHBlY3QgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgbXRpbWUpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZSkKICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNmaWxlLCAncmInKSBhcyBjaGFuZGxlOgogICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gY2hhbmRsZS5yZWFkKDgpCiAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdCA9PSBhY3R1YWw6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcwotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ0NvbXBpbGluZyB7IXJ9Li4uJy5mb3JtYXQoZnVsbG5hbWUpKQpAQCAtMTI0LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgbXNnID0gbXNnLmRlY29kZShzeXMuc3Rkb3V0LmVuY29kaW5nKQogICAgICAgICAgICAgICAgIHByaW50KG1zZykKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAotICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIHF1aWV0OgogICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIEVycm9yIGNvbXBpbGluZyB7IXJ9Li4uJy5mb3JtYXQoZnVsbG5hbWUpKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yMDksNyArMjEwLDcgQEAKICAgICAgICAgICAgIHdpdGggKHN5cy5zdGRpbiBpZiBhcmdzLmZsaXN0PT0nLScgZWxzZSBvcGVuKGFyZ3MuZmxpc3QpKSBhcyBmOgogICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVfZGVzdHMuYXBwZW5kKGxpbmUuc3RyaXAoKSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJlYWRpbmcgZmlsZSBsaXN0IHt9Ii5mb3JtYXQoYXJncy5mbGlzdCkpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIApkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weSBiL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkKaW5kZXggY2EzYWViZC4uM2QwMzI4MCAxMDA2NDQKLS0tIGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CkBAIC0xOTgsOCArMTk4LDcgQEAKICAgICAgICAgd2FpdGVyID0gX2NyZWF0ZV9hbmRfaW5zdGFsbF93YWl0ZXJzKGZzLCBfQVNfQ09NUExFVEVEKQogCiAgICAgdHJ5OgotICAgICAgICBmb3IgZnV0dXJlIGluIGZpbmlzaGVkOgotICAgICAgICAgICAgeWllbGQgZnV0dXJlCisgICAgICAgIHlpZWxkIGZyb20gZmluaXNoZWQKIAogICAgICAgICB3aGlsZSBwZW5kaW5nOgogICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5CmluZGV4IGFkZjJhYjQuLjA3YjUyMjUgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKQEAgLTQwLDcgKzQwLDcgQEAKIAogUHJvY2VzcyAjMS4ubjoKIC0gcmVhZHMgX0NhbGxJdGVtcyBmcm9tICJDYWxsIFEiLCBleGVjdXRlcyB0aGUgY2FsbHMsIGFuZCBwdXRzIHRoZSByZXN1bHRpbmcKLSAgX1Jlc3VsdEl0ZW1zIGluICJSZXF1ZXN0IFEiCisgIF9SZXN1bHRJdGVtcyBpbiAiUmVzdWx0IFEiCiAiIiIKIAogX19hdXRob3JfXyA9ICdCcmlhbiBRdWlubGFuIChicmlhbkBzd2VldGFwcC5jb20pJwpAQCAtNDksOCArNDksOSBAQAogaW1wb3J0IG9zCiBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgX2Jhc2UKIGltcG9ydCBxdWV1ZQorZnJvbSBxdWV1ZSBpbXBvcnQgRnVsbAogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZSwgRnVsbAorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNpbXBsZVF1ZXVlCiBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCB3YWl0CiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgd2Vha3JlZgpAQCAtMjQwLDYgKzI0MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAidGVybWluYXRlZCBhYnJ1cHRseSB3aGlsZSB0aGUgZnV0dXJlIHdhcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicnVubmluZyBvciBwZW5kaW5nLiIKICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICBwZW5kaW5nX3dvcmtfaXRlbXMuY2xlYXIoKQogICAgICAgICAgICAgIyBUZXJtaW5hdGUgcmVtYWluaW5nIHdvcmtlcnMgZm9yY2libHk6IHRoZSBxdWV1ZXMgb3IgdGhlaXIKICAgICAgICAgICAgICMgbG9ja3MgbWF5IGJlIGluIGEgZGlydHkgc3RhdGUgYW5kIGJsb2NrIGZvcmV2ZXIuCkBAIC0yNjQsNiArMjY3LDggQEAKICAgICAgICAgICAgICAgICAgICAgd29ya19pdGVtLmZ1dHVyZS5zZXRfZXhjZXB0aW9uKHJlc3VsdF9pdGVtLmV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0uZnV0dXJlLnNldF9yZXN1bHQocmVzdWx0X2l0ZW0ucmVzdWx0KQorICAgICAgICAgICAgICAgICMgRGVsZXRlIHJlZmVyZW5jZXMgdG8gb2JqZWN0LiBTZWUgaXNzdWUxNjI4NAorICAgICAgICAgICAgICAgIGRlbCB3b3JrX2l0ZW0KICAgICAgICAgIyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBzdGFydCBzaHV0dGluZyBkb3duLgogICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9yX3JlZmVyZW5jZSgpCiAgICAgICAgICMgTm8gbW9yZSB3b3JrIGl0ZW1zIGNhbiBiZSBhZGRlZCBpZjoKQEAgLTMyNyw3ICszMzIsNyBAQAogICAgICAgICBfY2hlY2tfc3lzdGVtX2xpbWl0cygpCiAKICAgICAgICAgaWYgbWF4X3dvcmtlcnMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbWF4X3dvcmtlcnMKIApkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQppbmRleCA5NWJiNjgyLi5mOWJlYjBmIDEwMDY0NAotLS0gYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQpAQCAtNjMsNiArNjMsOCBAQAogICAgICAgICAgICAgd29ya19pdGVtID0gd29ya19xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSkKICAgICAgICAgICAgIGlmIHdvcmtfaXRlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0ucnVuKCkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGV4ZWN1dG9yID0gZXhlY3V0b3JfcmVmZXJlbmNlKCkKICAgICAgICAgICAgICMgRXhpdCBpZjoKZGlmZiAtLWdpdCBhL0xpYi9jb25maWdwYXJzZXIucHkgYi9MaWIvY29uZmlncGFyc2VyLnB5CmluZGV4IGZkZTFjMTIuLjc5NGY4NTcgMTAwNjQ0Ci0tLSBhL0xpYi9jb25maWdwYXJzZXIucHkKKysrIGIvTGliL2NvbmZpZ3BhcnNlci5weQpAQCAtNjg3LDcgKzY4Nyw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoZnAsIGZpbGVuYW1lKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmVhZF9vay5hcHBlbmQoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiByZWFkX29rCmRpZmYgLS1naXQgYS9MaWIvY29udGV4dGxpYi5weSBiL0xpYi9jb250ZXh0bGliLnB5CmluZGV4IGY4ZTAyNmIuLmZiODkxMTggMTAwNjQ0Ci0tLSBhL0xpYi9jb250ZXh0bGliLnB5CisrKyBiL0xpYi9jb250ZXh0bGliLnB5CkBAIC00LDcgKzQsOCBAQAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIGZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogCi1fX2FsbF9fID0gWyJjb250ZXh0bWFuYWdlciIsICJjbG9zaW5nIiwgIkNvbnRleHREZWNvcmF0b3IiLCAiRXhpdFN0YWNrIl0KK19fYWxsX18gPSBbImNvbnRleHRtYW5hZ2VyIiwgImNsb3NpbmciLCAiQ29udGV4dERlY29yYXRvciIsICJFeGl0U3RhY2siLAorICAgICAgICAgICAicmVkaXJlY3Rfc3Rkb3V0IiwgInN1cHByZXNzIl0KIAogCiBjbGFzcyBDb250ZXh0RGVjb3JhdG9yKG9iamVjdCk6CkBAIC0zNiw2ICszNywxNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCAqYXJncywgKiprd2RzKToKICAgICAgICAgc2VsZi5nZW4gPSBmdW5jKCphcmdzLCAqKmt3ZHMpCiAgICAgICAgIHNlbGYuZnVuYywgc2VsZi5hcmdzLCBzZWxmLmt3ZHMgPSBmdW5jLCBhcmdzLCBrd2RzCisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGRvYyA9IGdldGF0dHIoZnVuYywgIl9fZG9jX18iLCBOb25lKQorICAgICAgICBpZiBkb2MgaXMgTm9uZToKKyAgICAgICAgICAgIGRvYyA9IHR5cGUoc2VsZikuX19kb2NfXworICAgICAgICBzZWxmLl9fZG9jX18gPSBkb2MKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGlzIHN0aWxsIGRvZXNuJ3QgcHJvdmlkZSBnb29kIGhlbHAgb3V0cHV0IHdoZW4KKyAgICAgICAgIyBpbnNwZWN0aW5nIHRoZSBjcmVhdGVkIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMsIHNpbmNlIHB5ZG9jCisgICAgICAgICMgY3VycmVudGx5IGJ5cGFzc2VzIHRoZSBpbnN0YW5jZSBkb2NzdHJpbmcgYW5kIHNob3dzIHRoZSBkb2NzdHJpbmcKKyAgICAgICAgIyBmb3IgdGhlIGNsYXNzIGluc3RlYWQuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTQwNCBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICAgZGVmIF9yZWNyZWF0ZV9jbShzZWxmKToKICAgICAgICAgIyBfR0NNIGluc3RhbmNlcyBhcmUgb25lLXNob3QgY29udGV4dCBtYW5hZ2Vycywgc28gdGhlCkBAIC00Nyw3ICs1OCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBuZXh0KHNlbGYuZ2VuKQogICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZ2VuZXJhdG9yIGRpZG4ndCB5aWVsZCIpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImdlbmVyYXRvciBkaWRuJ3QgeWllbGQiKSBmcm9tIE5vbmUKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgICAgaWYgdHlwZSBpcyBOb25lOgpAQCAtMTQwLDYgKzE1MSw2NiBAQAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgogICAgICAgICBzZWxmLnRoaW5nLmNsb3NlKCkKIAorY2xhc3MgcmVkaXJlY3Rfc3Rkb3V0OgorICAgICIiIkNvbnRleHQgbWFuYWdlciBmb3IgdGVtcG9yYXJpbHkgcmVkaXJlY3Rpbmcgc3Rkb3V0IHRvIGFub3RoZXIgZmlsZQorCisgICAgICAgICMgSG93IHRvIHNlbmQgaGVscCgpIHRvIHN0ZGVycgorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIGhlbHAoZGlyKQorCisgICAgICAgICMgSG93IHRvIHdyaXRlIGhlbHAoKSB0byBhIGZpbGUKKyAgICAgICAgd2l0aCBvcGVuKCdoZWxwLnR4dCcsICd3JykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpOgorICAgICAgICAgICAgICAgIGhlbHAocG93KQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld190YXJnZXQpOgorICAgICAgICBzZWxmLl9uZXdfdGFyZ2V0ID0gbmV3X3RhcmdldAorICAgICAgICBzZWxmLl9vbGRfdGFyZ2V0ID0gc2VsZi5fc2VudGluZWwgPSBvYmplY3QoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fb2xkX3RhcmdldCBpcyBub3Qgc2VsZi5fc2VudGluZWw6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCByZWVudGVyIHshcn0iLmZvcm1hdChzZWxmKSkKKyAgICAgICAgc2VsZi5fb2xkX3RhcmdldCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX25ld190YXJnZXQKKyAgICAgICAgcmV0dXJuIHNlbGYuX25ld190YXJnZXQKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGN0eXBlLCBleGNpbnN0LCBleGN0Yik6CisgICAgICAgIHJlc3RvcmVfc3Rkb3V0ID0gc2VsZi5fb2xkX3RhcmdldAorICAgICAgICBzZWxmLl9vbGRfdGFyZ2V0ID0gc2VsZi5fc2VudGluZWwKKyAgICAgICAgc3lzLnN0ZG91dCA9IHJlc3RvcmVfc3Rkb3V0CisKKworCitjbGFzcyBzdXBwcmVzczoKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gc3VwcHJlc3Mgc3BlY2lmaWVkIGV4Y2VwdGlvbnMKKworICAgIEFmdGVyIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgZXhlY3V0aW9uIHByb2NlZWRzIHdpdGggdGhlIG5leHQKKyAgICBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSB3aXRoIHN0YXRlbWVudC4KKworICAgICAgICAgd2l0aCBzdXBwcmVzcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICAgb3MucmVtb3ZlKHNvbWVmaWxlKQorICAgICAgICAgIyBFeGVjdXRpb24gc3RpbGwgcmVzdW1lcyBoZXJlIGlmIHRoZSBmaWxlIHdhcyBhbHJlYWR5IHJlbW92ZWQKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqZXhjZXB0aW9ucyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbnMgPSBleGNlcHRpb25zCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjdHlwZSwgZXhjaW5zdCwgZXhjdGIpOgorICAgICAgICAjIFVubGlrZSBpc2luc3RhbmNlIGFuZCBpc3N1YmNsYXNzLCBDUHl0aG9uIGV4Y2VwdGlvbiBoYW5kbGluZworICAgICAgICAjIGN1cnJlbnRseSBvbmx5IGxvb2tzIGF0IHRoZSBjb25jcmV0ZSB0eXBlIGhpZXJhcmNoeSAoaWdub3JpbmcKKyAgICAgICAgIyB0aGUgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNraW5nIGhvb2tzKS4gV2hpbGUgR3VpZG8gY29uc2lkZXJzCisgICAgICAgICMgdGhhdCBhIGJ1ZyByYXRoZXIgdGhhbiBhIGZlYXR1cmUsIGl0J3MgYSBmYWlybHkgaGFyZCBvbmUgdG8gZml4CisgICAgICAgICMgZHVlIHRvIHZhcmlvdXMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gc3VwcHJlc3MgcHJvdmlkZXMKKyAgICAgICAgIyB0aGUgc2ltcGxlciBpc3N1YmNsYXNzIGJhc2VkIHNlbWFudGljcywgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisgICAgICAgICMgZXhhY3RseSByZXByb2R1Y2UgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBDUHl0aG9uIGludGVycHJldGVyLgorICAgICAgICAjCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjAyOSBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgIHJldHVybiBleGN0eXBlIGlzIG5vdCBOb25lIGFuZCBpc3N1YmNsYXNzKGV4Y3R5cGUsIHNlbGYuX2V4Y2VwdGlvbnMpCisKIAogIyBJbnNwaXJlZCBieSBkaXNjdXNzaW9ucyBvbiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTM1ODUKIGNsYXNzIEV4aXRTdGFjayhvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy9fX2luaXRfXy5weSBiL0xpYi9jdHlwZXMvX19pbml0X18ucHkKaW5kZXggYzkyZTEzMC4uZTM0YzY0NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CkBAIC0zNCwxNyArMzQsMTUgQEAKICAgICAgRlVOQ0ZMQUdfVVNFX0VSUk5PIGFzIF9GVU5DRkxBR19VU0VfRVJSTk8sIFwKICAgICAgRlVOQ0ZMQUdfVVNFX0xBU1RFUlJPUiBhcyBfRlVOQ0ZMQUdfVVNFX0xBU1RFUlJPUgogCi0iIiIKLVdJTk9MRUFQSSAtPiBIUkVTVUxUCi1XSU5PTEVBUElfKHR5cGUpCi0KLVNURE1FVEhPRENBTExUWVBFCi0KLVNURE1FVEhPRChuYW1lKQotU1RETUVUSE9EXyh0eXBlLCBuYW1lKQotCi1TVERBUElDQUxMVFlQRQotIiIiCisjIFdJTk9MRUFQSSAtPiBIUkVTVUxUCisjIFdJTk9MRUFQSV8odHlwZSkKKyMKKyMgU1RETUVUSE9EQ0FMTFRZUEUKKyMKKyMgU1RETUVUSE9EKG5hbWUpCisjIFNURE1FVEhPRF8odHlwZSwgbmFtZSkKKyMKKyMgU1REQVBJQ0FMTFRZUEUKIAogZGVmIGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGluaXQsIHNpemU9Tm9uZSk6CiAgICAgIiIiY3JlYXRlX3N0cmluZ19idWZmZXIoYUJ5dGVzKSAtPiBjaGFyYWN0ZXIgYXJyYXkKQEAgLTM5NSw3ICszOTMsNyBAQAogICAgICAgICBfdHlwZV8gPSAibCIKICAgICAgICAgIyBfY2hlY2tfcmV0dmFsXyBpcyBjYWxsZWQgd2l0aCB0aGUgZnVuY3Rpb24ncyByZXN1bHQgd2hlbiBpdAogICAgICAgICAjIGlzIHVzZWQgYXMgcmVzdHlwZS4gIEl0IGNoZWNrcyBmb3IgdGhlIEZBSUxFRCBiaXQsIGFuZAotICAgICAgICAjIHJhaXNlcyBhIFdpbmRvd3NFcnJvciBpZiBpdCBpcyBzZXQuCisgICAgICAgICMgcmFpc2VzIGFuIE9TRXJyb3IgaWYgaXQgaXMgc2V0LgogICAgICAgICAjCiAgICAgICAgICMgVGhlIF9jaGVja19yZXR2YWxfIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBpbiBDLCBzbyB0aGF0IHRoZQogICAgICAgICAjIG1ldGhvZCBkZWZpbml0aW9uIGl0c2VsZiBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHRyYWNlYmFjawpAQCAtNDA3LDcgKzQwNSw3IEBACiAgICAgY2xhc3MgT2xlRExMKENETEwpOgogICAgICAgICAiIiJUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBkbGwgZXhwb3J0aW5nIGZ1bmN0aW9ucyB1c2luZyB0aGUKICAgICAgICAgV2luZG93cyBzdGRjYWxsIGNhbGxpbmcgY29udmVudGlvbiwgYW5kIHJldHVybmluZyBIUkVTVUxULgotICAgICAgICBIUkVTVUxUIGVycm9yIHZhbHVlcyBhcmUgYXV0b21hdGljYWxseSByYWlzZWQgYXMgV2luZG93c0Vycm9yCisgICAgICAgIEhSRVNVTFQgZXJyb3IgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHJhaXNlZCBhcyBPU0Vycm9yCiAgICAgICAgIGV4Y2VwdGlvbnMuCiAgICAgICAgICIiIgogICAgICAgICBfZnVuY19mbGFnc18gPSBfRlVOQ0ZMQUdfU1REQ0FMTApAQCAtNDU2LDcgKzQ1NCw3IEBACiAgICAgICAgICAgICBjb2RlID0gR2V0TGFzdEVycm9yKCkKICAgICAgICAgaWYgZGVzY3IgaXMgTm9uZToKICAgICAgICAgICAgIGRlc2NyID0gRm9ybWF0RXJyb3IoY29kZSkuc3RyaXAoKQotICAgICAgICByZXR1cm4gV2luZG93c0Vycm9yKE5vbmUsIGRlc2NyLCBOb25lLCBjb2RlKQorICAgICAgICByZXR1cm4gT1NFcnJvcihOb25lLCBkZXNjciwgTm9uZSwgY29kZSkKIAogaWYgc2l6ZW9mKGNfdWludCkgPT0gc2l6ZW9mKGNfdm9pZF9wKToKICAgICBjX3NpemVfdCA9IGNfdWludApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CmluZGV4IGNjNWZlMDIuLjdjNzIyMTAgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKQEAgLTM3LDcgKzM3LDcgQEAKIAogZGVmIGZpbmRfcGFja2FnZV9tb2R1bGVzKHBhY2thZ2UsIG1hc2spOgogICAgIGltcG9ydCBmbm1hdGNoCi0gICAgaWYgKGhhc2F0dHIocGFja2FnZSwgIl9fbG9hZGVyX18iKSBhbmQKKyAgICBpZiAocGFja2FnZS5fX2xvYWRlcl9fIGlzIG5vdCBOb25lIGFuZAogICAgICAgICAgICAgaGFzYXR0cihwYWNrYWdlLl9fbG9hZGVyX18sICdfZmlsZXMnKSk6CiAgICAgICAgIHBhdGggPSBwYWNrYWdlLl9fbmFtZV9fLnJlcGxhY2UoIi4iLCBvcy5wYXRoLnNlcCkKICAgICAgICAgbWFzayA9IG9zLnBhdGguam9pbihwYXRoLCBtYXNrKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQppbmRleCAwMWNjYzU3Li4xOWJiODEzIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBwYXNzCiAgICAgZWxzZToKICAgICAgICAgZGVmIHRlc3Rfb2xlZGxsKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGVkbGwub2xlYXV0MzIuQ3JlYXRlVHlwZUxpYjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTm9uZSwgTm9uZSkKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CmluZGV4IGNiZjJlMDUuLjI3MWUzZjUgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKQEAgLTUsMTcgKzUsMTQgQEAKIAogIyBYWFggVGhpcyB0ZXN0IG11c3QgYmUgcmV2aWV3ZWQgZm9yIGNvcnJlY3RuZXNzISEhCiAKLSIiIgotY3R5cGVzJyB0eXBlcyBhcmUgY29udGFpbmVyIHR5cGVzLgotCi1UaGV5IGhhdmUgYW4gaW50ZXJuYWwgbWVtb3J5IGJsb2NrLCB3aGljaCBvbmx5IGNvbnNpc3RzIG9mIHNvbWUgYnl0ZXMsCi1idXQgaXQgaGFzIHRvIGtlZXAgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGFzIHdlbGwuIFRoaXMgaXMgbm90Ci1yZWFsbHkgbmVlZGVkIGZvciB0cml2aWFsIEMgdHlwZXMgbGlrZSBpbnQgb3IgY2hhciwgYnV0IGl0IGlzIGltcG9ydGFudAotZm9yIGFnZ3JlZ2F0ZSB0eXBlcyBsaWtlIHN0cmluZ3Mgb3IgcG9pbnRlcnMgaW4gcGFydGljdWxhci4KLQotV2hhdCBhYm91dCBwb2ludGVycz8KLQotIiIiCisjIGN0eXBlcycgdHlwZXMgYXJlIGNvbnRhaW5lciB0eXBlcy4KKyMKKyMgVGhleSBoYXZlIGFuIGludGVybmFsIG1lbW9yeSBibG9jaywgd2hpY2ggb25seSBjb25zaXN0cyBvZiBzb21lIGJ5dGVzLAorIyBidXQgaXQgaGFzIHRvIGtlZXAgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGFzIHdlbGwuIFRoaXMgaXMgbm90CisjIHJlYWxseSBuZWVkZWQgZm9yIHRyaXZpYWwgQyB0eXBlcyBsaWtlIGludCBvciBjaGFyLCBidXQgaXQgaXMgaW1wb3J0YW50CisjIGZvciBhZ2dyZWdhdGUgdHlwZXMgbGlrZSBzdHJpbmdzIG9yIHBvaW50ZXJzIGluIHBhcnRpY3VsYXIuCisjCisjIFdoYXQgYWJvdXQgcG9pbnRlcnM/CiAKIGNsYXNzIE9iamVjdHNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGFzc2VydFNhbWUoc2VsZiwgYSwgYik6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5CmluZGV4IGVkYTg0NmQuLmZkMjY4MzcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5CkBAIC0zLDM1ICszLDMzIEBACiBpbXBvcnQgdW5pdHRlc3QKIAogIyBCb2IgSXBwb2xpdG86Ci0iIiIKLU9rLi4gdGhlIGNvZGUgdG8gZmluZCB0aGUgZmlsZW5hbWUgZm9yIF9fZ2V0YXR0cl9fIHNob3VsZCBsb29rCi1zb21ldGhpbmcgbGlrZToKLQotaW1wb3J0IG9zCi1mcm9tIG1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAotCi1kZWYgZmluZF9saWIobmFtZSk6Ci0gICAgIHBvc3NpYmxlID0gWydsaWInK25hbWUrJy5keWxpYicsIG5hbWUrJy5keWxpYicsCi0gICAgIG5hbWUrJy5mcmFtZXdvcmsvJytuYW1lXQotICAgICBmb3IgZHlsaWIgaW4gcG9zc2libGU6Ci0gICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoZHlsZF9maW5kKGR5bGliKSkKLSAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgIHBhc3MKLSAgICAgcmFpc2UgVmFsdWVFcnJvciwgIiVzIG5vdCBmb3VuZCIgJSAobmFtZSwpCi0KLUl0J2xsIGhhdmUgb3V0cHV0IGxpa2UgdGhpczoKLQotID4+PiBmaW5kX2xpYigncHRocmVhZCcpCi0nL3Vzci9saWIvbGliU3lzdGVtLkIuZHlsaWInCi0gPj4+IGZpbmRfbGliKCd6JykKLScvdXNyL2xpYi9saWJ6LjEuZHlsaWInCi0gPj4+IGZpbmRfbGliKCdJT0tpdCcpCi0nL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU9LaXQnCi0KLS1ib2IKLQotIiIiCisjCisjIE9rLi4gdGhlIGNvZGUgdG8gZmluZCB0aGUgZmlsZW5hbWUgZm9yIF9fZ2V0YXR0cl9fIHNob3VsZCBsb29rCisjIHNvbWV0aGluZyBsaWtlOgorIworIyBpbXBvcnQgb3MKKyMgZnJvbSBtYWNob2xpYi5keWxkIGltcG9ydCBkeWxkX2ZpbmQKKyMKKyMgZGVmIGZpbmRfbGliKG5hbWUpOgorIyAgICAgIHBvc3NpYmxlID0gWydsaWInK25hbWUrJy5keWxpYicsIG5hbWUrJy5keWxpYicsCisjICAgICAgbmFtZSsnLmZyYW1ld29yay8nK25hbWVdCisjICAgICAgZm9yIGR5bGliIGluIHBvc3NpYmxlOgorIyAgICAgICAgICB0cnk6CisjICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5yZWFscGF0aChkeWxkX2ZpbmQoZHlsaWIpKQorIyAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyMgICAgICAgICAgICAgIHBhc3MKKyMgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiJXMgbm90IGZvdW5kIiAlIChuYW1lLCkKKyMKKyMgSXQnbGwgaGF2ZSBvdXRwdXQgbGlrZSB0aGlzOgorIworIyAgPj4+IGZpbmRfbGliKCdwdGhyZWFkJykKKyMgJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJworIyAgPj4+IGZpbmRfbGliKCd6JykKKyMgJy91c3IvbGliL2xpYnouMS5keWxpYicKKyMgID4+PiBmaW5kX2xpYignSU9LaXQnKQorIyAnL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU9LaXQnCisjCisjIC1ib2IKIAogZnJvbSBjdHlwZXMubWFjaG9saWIuZHlsZCBpbXBvcnQgZHlsZF9maW5kCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKaW5kZXggZGEyMTMzNi4uOTFhZDMxNCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICAjIENhbGwgZnVuY3Rpb25zIHdpdGggaW52YWxpZCBhcmd1bWVudHMsIGFuZCBtYWtlIHN1cmUKICAgICAgICAgICAgICAgICAjIHRoYXQgYWNjZXNzIHZpb2xhdGlvbnMgYXJlIHRyYXBwZWQgYW5kIHJhaXNlIGFuCiAgICAgICAgICAgICAgICAgIyBleGNlcHRpb24uCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlQSwgMzIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQogCiAgICAgICAgIGRlZiB0ZXN0X25vYXJncyhzZWxmKToKICAgICAgICAgICAgICMgVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBvbiB3aW4zMiB4NjQKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdXRpbC5weSBiL0xpYi9jdHlwZXMvdXRpbC5weQppbmRleCAwNTRjNTExLi5kMmMwNGQyIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3V0aWwucHkKKysrIGIvTGliL2N0eXBlcy91dGlsLnB5CkBAIC0xMDIsOSArMTAyLDggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoY2NvdXQpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgcnYgPT0gMTA6CiAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnY2Mgb3IgY2MgY29tbWFuZCBub3QgZm91bmQnKQogICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwgdHJhY2UpCmRpZmYgLS1naXQgYS9MaWIvZGF0ZXRpbWUucHkgYi9MaWIvZGF0ZXRpbWUucHkKaW5kZXggZDFmMzUzYi4uMTc4OTcxNCAxMDA2NDQKLS0tIGEvTGliL2RhdGV0aW1lLnB5CisrKyBiL0xpYi9kYXRldGltZS5weQpAQCAtMjMsOSArMjMsMTAgQEAKICMgZm9yIGFsbCBjb21wdXRhdGlvbnMuICBTZWUgdGhlIGJvb2sgZm9yIGFsZ29yaXRobXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbgogIyBwcm9sZXB0aWMgR3JlZ29yaWFuIG9yZGluYWxzIGFuZCBtYW55IG90aGVyIGNhbGVuZGFyIHN5c3RlbXMuCiAKLV9EQVlTX0lOX01PTlRIID0gW05vbmUsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCisjIC0xIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGluZGV4aW5nIHB1cnBvc2VzLgorX0RBWVNfSU5fTU9OVEggPSBbLTEsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCiAKLV9EQVlTX0JFRk9SRV9NT05USCA9IFtOb25lXQorX0RBWVNfQkVGT1JFX01PTlRIID0gWy0xXSAjIC0xIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGluZGV4aW5nIHB1cnBvc2VzLgogZGJtID0gMAogZm9yIGRpbSBpbiBfREFZU19JTl9NT05USFsxOl06CiAgICAgX0RBWVNfQkVGT1JFX01PTlRILmFwcGVuZChkYm0pCkBAIC0xOTE3LDIwMyArMTkxOCwyMDMgQEAKIHRpbWV6b25lLm1pbiA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21pbm9mZnNldCkKIHRpbWV6b25lLm1heCA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21heG9mZnNldCkKIF9FUE9DSCA9IGRhdGV0aW1lKDE5NzAsIDEsIDEsIHR6aW5mbz10aW1lem9uZS51dGMpCi0iIiIKLVNvbWUgdGltZSB6b25lIGFsZ2VicmEuICBGb3IgYSBkYXRldGltZSB4LCBsZXQKLSAgICB4Lm4gPSB4IHN0cmlwcGVkIG9mIGl0cyB0aW1lem9uZSAtLSBpdHMgbmFpdmUgdGltZS4KLSAgICB4Lm8gPSB4LnV0Y29mZnNldCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgotICAgICAgICAgIHJldHVybiBOb25lCi0gICAgeC5kID0geC5kc3QoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKLSAgICAgICAgICByZXR1cm4gTm9uZQotICAgIHgucyA9IHgncyBzdGFuZGFyZCBvZmZzZXQsIHgubyAtIHguZAogCi1Ob3cgc29tZSBkZXJpdmVkIHJ1bGVzLCB3aGVyZSBrIGlzIGEgZHVyYXRpb24gKHRpbWVkZWx0YSkuCisjIFNvbWUgdGltZSB6b25lIGFsZ2VicmEuICBGb3IgYSBkYXRldGltZSB4LCBsZXQKKyMgICAgIHgubiA9IHggc3RyaXBwZWQgb2YgaXRzIHRpbWV6b25lIC0tIGl0cyBuYWl2ZSB0aW1lLgorIyAgICAgeC5vID0geC51dGNvZmZzZXQoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKKyMgICAgICAgICAgIHJldHVybiBOb25lCisjICAgICB4LmQgPSB4LmRzdCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgorIyAgICAgICAgICAgcmV0dXJuIE5vbmUKKyMgICAgIHgucyA9IHgncyBzdGFuZGFyZCBvZmZzZXQsIHgubyAtIHguZAorIworIyBOb3cgc29tZSBkZXJpdmVkIHJ1bGVzLCB3aGVyZSBrIGlzIGEgZHVyYXRpb24gKHRpbWVkZWx0YSkuCisjCisjIDEuIHgubyA9IHgucyArIHguZAorIyAgICBUaGlzIGZvbGxvd3MgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB4LnMuCisjCisjIDIuIElmIHggYW5kIHkgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLCB4LnMgPSB5LnMuCisjICAgIFRoaXMgaXMgYWN0dWFsbHkgYSByZXF1aXJlbWVudCwgYW4gYXNzdW1wdGlvbiB3ZSBuZWVkIHRvIG1ha2UgYWJvdXQKKyMgICAgc2FuZSB0emluZm8gY2xhc3Nlcy4KKyMKKyMgMy4gVGhlIG5haXZlIFVUQyB0aW1lIGNvcnJlc3BvbmRpbmcgdG8geCBpcyB4Lm4gLSB4Lm8uCisjICAgIFRoaXMgaXMgYWdhaW4gYSByZXF1aXJlbWVudCBmb3IgYSBzYW5lIHR6aW5mbyBjbGFzcy4KKyMKKyMgNC4gKHgraykucyA9IHgucworIyAgICBUaGlzIGZvbGxvd3MgZnJvbSAjMiwgYW5kIHRoYXQgZGF0aW1ldGltZXR6K3RpbWVkZWx0YSBwcmVzZXJ2ZXMgdHppbmZvLgorIworIyA1LiAoeCtrKS5uID0geC5uICsgaworIyAgICBBZ2FpbiBmb2xsb3dzIGZyb20gaG93IGFyaXRobWV0aWMgaXMgZGVmaW5lZC4KKyMKKyMgTm93IHdlIGNhbiBleHBsYWluIHR6LmZyb211dGMoeCkuICBMZXQncyBhc3N1bWUgaXQncyBhbiBpbnRlcmVzdGluZyBjYXNlCisjIChtZWFuaW5nIHRoYXQgdGhlIHZhcmlvdXMgdHppbmZvIG1ldGhvZHMgZXhpc3QsIGFuZCBkb24ndCBibG93IHVwIG9yIHJldHVybgorIyBOb25lIHdoZW4gY2FsbGVkKS4KKyMKKyMgVGhlIGZ1bmN0aW9uIHdhbnRzIHRvIHJldHVybiBhIGRhdGV0aW1lIHkgd2l0aCB0aW1lem9uZSB0eiwgZXF1aXZhbGVudCB0byB4LgorIyB4IGlzIGFscmVhZHkgaW4gVVRDLgorIworIyBCeSAjMywgd2Ugd2FudAorIworIyAgICAgeS5uIC0geS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0KKyMKKyMgVGhlIGFsZ29yaXRobSBzdGFydHMgYnkgYXR0YWNoaW5nIHR6IHRvIHgubiwgYW5kIGNhbGxpbmcgdGhhdCB5LiAgU28KKyMgeC5uID0geS5uIGF0IHRoZSBzdGFydC4gIFRoZW4gaXQgd2FudHMgdG8gYWRkIGEgZHVyYXRpb24gayB0byB5LCBzbyB0aGF0IFsxXQorIyBiZWNvbWVzIHRydWU7IGluIGVmZmVjdCwgd2Ugd2FudCB0byBzb2x2ZSBbMl0gZm9yIGs6CisjCisjICAgICh5K2spLm4gLSAoeStrKS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgIFsyXQorIworIyBCeSAjMSwgdGhpcyBpcyB0aGUgc2FtZSBhcworIworIyAgICAoeStrKS5uIC0gKCh5K2spLnMgKyAoeStrKS5kKSA9IHgubiAgICAgICAgICBbM10KKyMKKyMgQnkgIzUsICh5K2spLm4gPSB5Lm4gKyBrLCB3aGljaCBlcXVhbHMgeC5uICsgayBiZWNhdXNlIHgubj15Lm4gYXQgdGhlIHN0YXJ0LgorIyBTdWJzdGl0dXRpbmcgdGhhdCBpbnRvIFszXSwKKyMKKyMgICAgeC5uICsgayAtICh5K2spLnMgLSAoeStrKS5kID0geC5uOyB0aGUgeC5uIHRlcm1zIGNhbmNlbCwgbGVhdmluZworIyAgICBrIC0gKHkraykucyAtICh5K2spLmQgPSAwOyByZWFycmFuZ2luZywKKyMgICAgayA9ICh5K2spLnMgLSAoeStrKS5kOyBieSAjNCwgKHkraykucyA9PSB5LnMsIHNvCisjICAgIGsgPSB5LnMgLSAoeStrKS5kCisjCisjIE9uIHRoZSBSSFMsICh5K2spLmQgY2FuJ3QgYmUgY29tcHV0ZWQgZGlyZWN0bHksIGJ1dCB5LnMgY2FuIGJlLCBhbmQgd2UKKyMgYXBwcm94aW1hdGUgayBieSBpZ25vcmluZyB0aGUgKHkraykuZCB0ZXJtIGF0IGZpcnN0LiAgTm90ZSB0aGF0IGsgY2FuJ3QgYmUKKyMgdmVyeSBsYXJnZSwgc2luY2UgYWxsIG9mZnNldC1yZXR1cm5pbmcgbWV0aG9kcyByZXR1cm4gYSBkdXJhdGlvbiBvZiBtYWduaXR1ZGUKKyMgbGVzcyB0aGFuIDI0IGhvdXJzLiAgRm9yIHRoYXQgcmVhc29uLCBpZiB5IGlzIGZpcm1seSBpbiBzdGQgdGltZSwgKHkraykuZCBtdXN0CisjIGJlIDAsIHNvIGlnbm9yaW5nIGl0IGhhcyBubyBjb25zZXF1ZW5jZSB0aGVuLgorIworIyBJbiBhbnkgY2FzZSwgdGhlIG5ldyB2YWx1ZSBpcworIworIyAgICAgeiA9IHkgKyB5LnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF0KKyMKKyMgSXQncyBoZWxwZnVsIHRvIHN0ZXAgYmFjayBhdCBsb29rIGF0IFs0XSBmcm9tIGEgaGlnaGVyIGxldmVsOiAgaXQncyBzaW1wbHkKKyMgbWFwcGluZyBmcm9tIFVUQyB0byB0eidzIHN0YW5kYXJkIHRpbWUuCisjCisjIEF0IHRoaXMgcG9pbnQsIGlmCisjCisjICAgICB6Lm4gLSB6Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs1XQorIworIyB3ZSBoYXZlIGFuIGVxdWl2YWxlbnQgdGltZSwgYW5kIGFyZSBhbG1vc3QgZG9uZS4gIFRoZSBpbnNlY3VyaXR5IGhlcmUgaXMKKyMgYXQgdGhlIHN0YXJ0IG9mIGRheWxpZ2h0IHRpbWUuICBQaWN0dXJlIFVTIEVhc3Rlcm4gZm9yIGNvbmNyZXRlbmVzcy4gIFRoZSB3YWxsCisjIHRpbWUganVtcHMgZnJvbSAxOjU5IHRvIDM6MDAsIGFuZCB3YWxsIGhvdXJzIG9mIHRoZSBmb3JtIDI6TU0gZG9uJ3QgbWFrZSBnb29kCisjIHNlbnNlIHRoZW4uICBUaGUgZG9jcyBhc2sgdGhhdCBhbiBFYXN0ZXJuIHR6aW5mbyBjbGFzcyBjb25zaWRlciBzdWNoIGEgdGltZSB0bworIyBiZSBFRFQgKGJlY2F1c2UgaXQncyAiYWZ0ZXIgMiIpLCB3aGljaCBpcyBhIHJlZHVuZGFudCBzcGVsbGluZyBvZiAxOk1NIEVTVAorIyBvbiB0aGUgZGF5IERTVCBzdGFydHMuICBXZSB3YW50IHRvIHJldHVybiB0aGUgMTpNTSBFU1Qgc3BlbGxpbmcgYmVjYXVzZSB0aGF0J3MKKyMgdGhlIG9ubHkgc3BlbGxpbmcgdGhhdCBtYWtlcyBzZW5zZSBvbiB0aGUgbG9jYWwgd2FsbCBjbG9jay4KKyMKKyMgSW4gZmFjdCwgaWYgWzVdIGhvbGRzIGF0IHRoaXMgcG9pbnQsIHdlIGRvIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUgc3BlbGxpbmcsCisjIGJ1dCB0aGF0IHRha2VzIGEgYml0IG9mIHByb29mLiAgV2UgZmlyc3QgcHJvdmUgYSBzdHJvbmdlciByZXN1bHQuICBXaGF0J3MgdGhlCisjIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzVdPyAgTGV0CisjCisjICAgICBkaWZmID0geC5uIC0gKHoubiAtIHoubykgICAgICAgICAgICAgICAgICAgIFs2XQorIworIyBOb3cKKyMgICAgIHoubiA9ICAgICAgICAgICAgICAgICAgICAgICBieSBbNF0KKyMgICAgICh5ICsgeS5zKS5uID0gICAgICAgICAgICAgICBieSAjNQorIyAgICAgeS5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHkubiA9IHgubgorIyAgICAgeC5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHogYW5kIHkgYXJlIGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeS5zID0gei5zIGJ5ICMyCisjICAgICB4Lm4gKyB6LnMKKyMKKyMgUGx1Z2dpbmcgdGhhdCBiYWNrIGludG8gWzZdIGdpdmVzCisjCisjICAgICBkaWZmID0KKyMgICAgIHgubiAtICgoeC5uICsgei5zKSAtIHoubykgPSAgICAgZXhwYW5kaW5nCisjICAgICB4Lm4gLSB4Lm4gLSB6LnMgKyB6Lm8gPSAgICAgICAgIGNhbmNlbGxpbmcKKyMgICAgIC0gei5zICsgei5vID0gICAgICAgICAgICAgICAgICAgYnkgIzIKKyMgICAgIHouZAorIworIyBTbyBkaWZmID0gei5kLgorIworIyBJZiBbNV0gaXMgdHJ1ZSBub3csIGRpZmYgPSAwLCBzbyB6LmQgPSAwIHRvbywgYW5kIHdlIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUKKyMgc3BlbGxpbmcgd2Ugd2FudGVkIGluIHRoZSBlbmRjYXNlIGRlc2NyaWJlZCBhYm92ZS4gIFdlJ3JlIGRvbmUuICBDb250cmFyaWx5LAorIyBpZiB6LmQgPSAwLCB0aGVuIHdlIGhhdmUgYSBVVEMgZXF1aXZhbGVudCwgYW5kIGFyZSBhbHNvIGRvbmUuCisjCisjIElmIFs1XSBpcyBub3QgdHJ1ZSBub3csIGRpZmYgPSB6LmQgIT0gMCwgYW5kIHouZCBpcyB0aGUgb2Zmc2V0IHdlIG5lZWQgdG8KKyMgYWRkIHRvIHogKGluIGVmZmVjdCwgeiBpcyBpbiB0eidzIHN0YW5kYXJkIHRpbWUsIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IHRoZQorIyBsb2NhbCBjbG9jayBpbnRvIHR6J3MgZGF5bGlnaHQgdGltZSkuCisjCisjIExldAorIworIyAgICAgeicgPSB6ICsgei5kID0geiArIGRpZmYgICAgICAgICAgICAgICAgICAgICBbN10KKyMKKyMgYW5kIHdlIGNhbiBhZ2FpbiBhc2sgd2hldGhlcgorIworIyAgICAgeicubiAtIHonLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICBbOF0KKyMKKyMgSWYgc28sIHdlJ3JlIGRvbmUuICBJZiBub3QsIHRoZSB0emluZm8gY2xhc3MgaXMgaW5zYW5lLCBhY2NvcmRpbmcgdG8gdGhlCisjIGFzc3VtcHRpb25zIHdlJ3ZlIG1hZGUuICBUaGlzIGFsc28gcmVxdWlyZXMgYSBiaXQgb2YgcHJvb2YuICBBcyBiZWZvcmUsIGxldCdzCisjIGNvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzhdIChhbmQgc2tpcHBpbmcgc29tZSBvZgorIyB0aGUganVzdGlmaWNhdGlvbnMgZm9yIHRoZSBraW5kcyBvZiBzdWJzdGl0dXRpb25zIHdlJ3ZlIGRvbmUgc2V2ZXJhbCB0aW1lcworIyBhbHJlYWR5KToKKyMKKyMgICAgIGRpZmYnID0geC5uIC0gKHonLm4gLSB6Jy5vKSA9ICAgICAgICAgICByZXBsYWNpbmcgeicubiB2aWEgWzddCisjICAgICAgICAgICAgIHgubiAgLSAoei5uICsgZGlmZiAtIHonLm8pID0gICAgcmVwbGFjaW5nIGRpZmYgdmlhIFs2XQorIyAgICAgICAgICAgICB4Lm4gLSAoei5uICsgeC5uIC0gKHoubiAtIHoubykgLSB6Jy5vKSA9CisjICAgICAgICAgICAgIHgubiAtIHoubiAtIHgubiArIHoubiAtIHoubyArIHonLm8gPSAgICBjYW5jZWwgeC5uCisjICAgICAgICAgICAgIC0gei5uICsgei5uIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICBjYW5jZWwgei5uCisjICAgICAgICAgICAgIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICAgICAgICAgICMxIHR3aWNlCisjICAgICAgICAgICAgIC16LnMgLSB6LmQgKyB6Jy5zICsgeicuZCA9ICAgICAgICAgIHogYW5kIHonIGhhdmUgc2FtZSB0emluZm8KKyMgICAgICAgICAgICAgeicuZCAtIHouZAorIworIyBTbyB6JyBpcyBVVEMtZXF1aXZhbGVudCB0byB4IGlmZiB6Jy5kID0gei5kIGF0IHRoaXMgcG9pbnQuICBJZiB0aGV5IGFyZSBlcXVhbCwKKyMgd2UndmUgZm91bmQgdGhlIFVUQy1lcXVpdmFsZW50IHNvIGFyZSBkb25lLiAgSW4gZmFjdCwgd2Ugc3RvcCB3aXRoIFs3XSBhbmQKKyMgcmV0dXJuIHonLCBub3QgYm90aGVyaW5nIHRvIGNvbXB1dGUgeicuZC4KKyMKKyMgSG93IGNvdWxkIHouZCBhbmQgeidkIGRpZmZlcj8gIHonID0geiArIHouZCBbN10sIHNvIG1lcmVseSBtb3ZpbmcgeicgYnkKKyMgYSBkc3QoKSBvZmZzZXQsIGFuZCBzdGFydGluZyAqZnJvbSogYSB0aW1lIGFscmVhZHkgaW4gRFNUICh3ZSBrbm93IHouZCAhPSAwKSwKKyMgd291bGQgaGF2ZSB0byBjaGFuZ2UgdGhlIHJlc3VsdCBkc3QoKSByZXR1cm5zOiAgd2Ugc3RhcnQgaW4gRFNULCBhbmQgbW92aW5nCisjIGEgbGl0dGxlIGZ1cnRoZXIgaW50byBpdCB0YWtlcyB1cyBvdXQgb2YgRFNULgorIworIyBUaGVyZSBpc24ndCBhIHNhbmUgY2FzZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4uICBUaGUgY2xvc2VzdCBpdCBnZXRzIGlzIGF0CisjIHRoZSBlbmQgb2YgRFNULCB3aGVyZSB0aGVyZSdzIGFuIGhvdXIgaW4gVVRDIHdpdGggbm8gc3BlbGxpbmcgaW4gYSBoeWJyaWQKKyMgdHppbmZvIGNsYXNzLiAgSW4gVVMgRWFzdGVybiwgdGhhdCdzIDU6TU0gVVRDID0gMDpNTSBFU1QgPSAxOk1NIEVEVC4gIER1cmluZworIyB0aGF0IGhvdXIsIG9uIGFuIEVhc3Rlcm4gY2xvY2sgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lICg2Ok1NCisjIFVUQykgYmVjYXVzZSB0aGUgZG9jcyBpbnNpc3Qgb24gdGhhdCwgYnV0IDA6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gZGF5bGlnaHQKKyMgdGltZSAoNDpNTSBVVEMpLiAgVGhlcmUgaXMgbm8gbG9jYWwgdGltZSBtYXBwaW5nIHRvIDU6TU0gVVRDLiAgVGhlIGxvY2FsCisjIGNsb2NrIGp1bXBzIGZyb20gMTo1OSBiYWNrIHRvIDE6MDAgYWdhaW4sIGFuZCByZXBlYXRzIHRoZSAxOk1NIGhvdXIgaW4KKyMgc3RhbmRhcmQgdGltZS4gIFNpbmNlIHRoYXQncyB3aGF0IHRoZSBsb2NhbCBjbG9jayAqZG9lcyosIHdlIHdhbnQgdG8gbWFwIGJvdGgKKyMgVVRDIGhvdXJzIDU6TU0gYW5kIDY6TU0gdG8gMTpNTSBFYXN0ZXJuLiAgVGhlIHJlc3VsdCBpcyBhbWJpZ3VvdXMKKyMgaW4gbG9jYWwgdGltZSwgYnV0IHNvIGl0IGdvZXMgLS0gaXQncyB0aGUgd2F5IHRoZSBsb2NhbCBjbG9jayB3b3Jrcy4KKyMKKyMgV2hlbiB4ID0gNTpNTSBVVEMgaXMgdGhlIGlucHV0IHRvIHRoaXMgYWxnb3JpdGhtLCB4Lm89MCwgeS5vPS01IGFuZCB5LmQ9MCwKKyMgc28gej0wOk1NLiAgei5kPTYwIChtaW51dGVzKSB0aGVuLCBzbyBbNV0gZG9lc24ndCBob2xkIGFuZCB3ZSBrZWVwIGdvaW5nLgorIyB6JyA9IHogKyB6LmQgPSAxOk1NIHRoZW4sIGFuZCB6Jy5kPTAsIGFuZCB6Jy5kIC0gei5kID0gLTYwICE9IDAgc28gWzhdCisjIChjb3JyZWN0bHkpIGNvbmNsdWRlcyB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCB0byB4LgorIworIyBCZWNhdXNlIHdlIGtub3cgei5kIHNhaWQgeiB3YXMgaW4gZGF5bGlnaHQgdGltZSAoZWxzZSBbNV0gd291bGQgaGF2ZSBoZWxkIGFuZAorIyB3ZSB3b3VsZCBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB3ZSBrbm93IHouZCAhPSB6Jy5kIChlbHNlIFs4XSB3b3VsZCBoYXZlIGhlbGQKKyMgYW5kIHdlIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHRoZXJlIGFyZSBvbmx5IDIgcG9zc2libGUgdmFsdWVzIGRzdCgpIGNhbgorIyByZXR1cm4gaW4gRWFzdGVybiwgaXQgZm9sbG93cyB0aGF0IHonLmQgbXVzdCBiZSAwICh3aGljaCBpdCBpcyBpbiB0aGUgZXhhbXBsZSwKKyMgYnV0IHRoZSByZWFzb25pbmcgZG9lc24ndCBkZXBlbmQgb24gdGhlIGV4YW1wbGUgLS0gaXQgZGVwZW5kcyBvbiB0aGVyZSBiZWluZworIyB0d28gcG9zc2libGUgZHN0KCkgb3V0Y29tZXMsIG9uZSB6ZXJvIGFuZCB0aGUgb3RoZXIgbm9uLXplcm8pLiAgVGhlcmVmb3JlCisjIHonIG11c3QgYmUgaW4gc3RhbmRhcmQgdGltZSwgYW5kIGlzIHRoZSBzcGVsbGluZyB3ZSB3YW50IGluIHRoaXMgY2FzZS4KKyMKKyMgTm90ZSBhZ2FpbiB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCBhcyBmYXIgYXMgdGhlIGh5YnJpZCB0emluZm8gY2xhc3MgaXMKKyMgY29uY2VybmVkIChiZWNhdXNlIGl0IHRha2VzIHonIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgcmF0aGVyIHRoYW4gdGhlCisjIGRheWxpZ2h0IHRpbWUgd2UgaW50ZW5kIGhlcmUpLCBidXQgcmV0dXJuaW5nIGl0IGdpdmVzIHRoZSByZWFsLWxpZmUgImxvY2FsCisjIGNsb2NrIHJlcGVhdHMgYW4gaG91ciIgYmVoYXZpb3Igd2hlbiBtYXBwaW5nIHRoZSAidW5zcGVsbGFibGUiIFVUQyBob3VyIGludG8KKyMgdHouCisjCisjIFdoZW4gdGhlIGlucHV0IGlzIDY6TU0sIHo9MTpNTSBhbmQgei5kPTAsIGFuZCB3ZSBzdG9wIGF0IG9uY2UsIGFnYWluIHdpdGgKKyMgdGhlIDE6TU0gc3RhbmRhcmQgdGltZSBzcGVsbGluZyB3ZSB3YW50LgorIworIyBTbyBob3cgY2FuIHRoaXMgYnJlYWs/ICBPbmUgb2YgdGhlIGFzc3VtcHRpb25zIG11c3QgYmUgdmlvbGF0ZWQuICBUd28KKyMgcG9zc2liaWxpdGllczoKKyMKKyMgMSkgWzJdIGVmZmVjdGl2ZWx5IHNheXMgdGhhdCB5LnMgaXMgaW52YXJpYW50IGFjcm9zcyBhbGwgeSBiZWxvbmcgdG8gYSBnaXZlbgorIyAgICB0aW1lIHpvbmUuICBUaGlzIGlzbid0IHRydWUgaWYsIGZvciBwb2xpdGljYWwgcmVhc29ucyBvciBjb250aW5lbnRhbCBkcmlmdCwKKyMgICAgYSByZWdpb24gZGVjaWRlcyB0byBjaGFuZ2UgaXRzIGJhc2Ugb2Zmc2V0IGZyb20gVVRDLgorIworIyAyKSBUaGVyZSBtYXkgYmUgdmVyc2lvbnMgb2YgImRvdWJsZSBkYXlsaWdodCIgdGltZSB3aGVyZSB0aGUgdGFpbCBlbmQgb2YKKyMgICAgdGhlIGFuYWx5c2lzIGdpdmVzIHVwIGEgc3RlcCB0b28gZWFybHkuICBJIGhhdmVuJ3QgdGhvdWdodCBhYm91dCB0aGF0CisjICAgIGVub3VnaCB0byBzYXkuCisjCisjIEluIGFueSBjYXNlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGRlZmF1bHQgZnJvbXV0YygpIGlzIHN0cm9uZyBlbm91Z2ggdG8gaGFuZGxlCisjICJhbG1vc3QgYWxsIiB0aW1lIHpvbmVzOiAgc28gbG9uZyBhcyB0aGUgc3RhbmRhcmQgb2Zmc2V0IGlzIGludmFyaWFudCwgaXQKKyMgZG9lc24ndCBtYXR0ZXIgaWYgZGF5bGlnaHQgdGltZSB0cmFuc2l0aW9uIHBvaW50cyBjaGFuZ2UgZnJvbSB5ZWFyIHRvIHllYXIsIG9yCisjIGlmIGRheWxpZ2h0IHRpbWUgaXMgc2tpcHBlZCBpbiBzb21lIHllYXJzOyBpdCBkb2Vzbid0IG1hdHRlciBob3cgbGFyZ2Ugb3IKKyMgc21hbGwgZHN0KCkgbWF5IGdldCB3aXRoaW4gaXRzIGJvdW5kczsgYW5kIGl0IGRvZXNuJ3QgZXZlbiBtYXR0ZXIgaWYgc29tZQorIyBwZXJ2ZXJzZSB0aW1lIHpvbmUgcmV0dXJucyBhIG5lZ2F0aXZlIGRzdCgpKS4gIFNvIGEgYnJlYWtpbmcgY2FzZSBtdXN0IGJlCisjIHByZXR0eSBiaXphcnJlLCBhbmQgYSB0emluZm8gc3ViY2xhc3MgY2FuIG92ZXJyaWRlIGZyb211dGMoKSBpZiBpdCBpcy4KIAotMS4geC5vID0geC5zICsgeC5kCi0gICBUaGlzIGZvbGxvd3MgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB4LnMuCi0KLTIuIElmIHggYW5kIHkgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLCB4LnMgPSB5LnMuCi0gICBUaGlzIGlzIGFjdHVhbGx5IGEgcmVxdWlyZW1lbnQsIGFuIGFzc3VtcHRpb24gd2UgbmVlZCB0byBtYWtlIGFib3V0Ci0gICBzYW5lIHR6aW5mbyBjbGFzc2VzLgotCi0zLiBUaGUgbmFpdmUgVVRDIHRpbWUgY29ycmVzcG9uZGluZyB0byB4IGlzIHgubiAtIHguby4KLSAgIFRoaXMgaXMgYWdhaW4gYSByZXF1aXJlbWVudCBmb3IgYSBzYW5lIHR6aW5mbyBjbGFzcy4KLQotNC4gKHgraykucyA9IHgucwotICAgVGhpcyBmb2xsb3dzIGZyb20gIzIsIGFuZCB0aGF0IGRhdGltZXRpbWV0eit0aW1lZGVsdGEgcHJlc2VydmVzIHR6aW5mby4KLQotNS4gKHgraykubiA9IHgubiArIGsKLSAgIEFnYWluIGZvbGxvd3MgZnJvbSBob3cgYXJpdGhtZXRpYyBpcyBkZWZpbmVkLgotCi1Ob3cgd2UgY2FuIGV4cGxhaW4gdHouZnJvbXV0Yyh4KS4gIExldCdzIGFzc3VtZSBpdCdzIGFuIGludGVyZXN0aW5nIGNhc2UKLShtZWFuaW5nIHRoYXQgdGhlIHZhcmlvdXMgdHppbmZvIG1ldGhvZHMgZXhpc3QsIGFuZCBkb24ndCBibG93IHVwIG9yIHJldHVybgotTm9uZSB3aGVuIGNhbGxlZCkuCi0KLVRoZSBmdW5jdGlvbiB3YW50cyB0byByZXR1cm4gYSBkYXRldGltZSB5IHdpdGggdGltZXpvbmUgdHosIGVxdWl2YWxlbnQgdG8geC4KLXggaXMgYWxyZWFkeSBpbiBVVEMuCi0KLUJ5ICMzLCB3ZSB3YW50Ci0KLSAgICB5Lm4gLSB5Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXQotCi1UaGUgYWxnb3JpdGhtIHN0YXJ0cyBieSBhdHRhY2hpbmcgdHogdG8geC5uLCBhbmQgY2FsbGluZyB0aGF0IHkuICBTbwoteC5uID0geS5uIGF0IHRoZSBzdGFydC4gIFRoZW4gaXQgd2FudHMgdG8gYWRkIGEgZHVyYXRpb24gayB0byB5LCBzbyB0aGF0IFsxXQotYmVjb21lcyB0cnVlOyBpbiBlZmZlY3QsIHdlIHdhbnQgdG8gc29sdmUgWzJdIGZvciBrOgotCi0gICAoeStrKS5uIC0gKHkraykubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICBbMl0KLQotQnkgIzEsIHRoaXMgaXMgdGhlIHNhbWUgYXMKLQotICAgKHkraykubiAtICgoeStrKS5zICsgKHkraykuZCkgPSB4Lm4gICAgICAgICAgWzNdCi0KLUJ5ICM1LCAoeStrKS5uID0geS5uICsgaywgd2hpY2ggZXF1YWxzIHgubiArIGsgYmVjYXVzZSB4Lm49eS5uIGF0IHRoZSBzdGFydC4KLVN1YnN0aXR1dGluZyB0aGF0IGludG8gWzNdLAotCi0gICB4Lm4gKyBrIC0gKHkraykucyAtICh5K2spLmQgPSB4Lm47IHRoZSB4Lm4gdGVybXMgY2FuY2VsLCBsZWF2aW5nCi0gICBrIC0gKHkraykucyAtICh5K2spLmQgPSAwOyByZWFycmFuZ2luZywKLSAgIGsgPSAoeStrKS5zIC0gKHkraykuZDsgYnkgIzQsICh5K2spLnMgPT0geS5zLCBzbwotICAgayA9IHkucyAtICh5K2spLmQKLQotT24gdGhlIFJIUywgKHkraykuZCBjYW4ndCBiZSBjb21wdXRlZCBkaXJlY3RseSwgYnV0IHkucyBjYW4gYmUsIGFuZCB3ZQotYXBwcm94aW1hdGUgayBieSBpZ25vcmluZyB0aGUgKHkraykuZCB0ZXJtIGF0IGZpcnN0LiAgTm90ZSB0aGF0IGsgY2FuJ3QgYmUKLXZlcnkgbGFyZ2UsIHNpbmNlIGFsbCBvZmZzZXQtcmV0dXJuaW5nIG1ldGhvZHMgcmV0dXJuIGEgZHVyYXRpb24gb2YgbWFnbml0dWRlCi1sZXNzIHRoYW4gMjQgaG91cnMuICBGb3IgdGhhdCByZWFzb24sIGlmIHkgaXMgZmlybWx5IGluIHN0ZCB0aW1lLCAoeStrKS5kIG11c3QKLWJlIDAsIHNvIGlnbm9yaW5nIGl0IGhhcyBubyBjb25zZXF1ZW5jZSB0aGVuLgotCi1JbiBhbnkgY2FzZSwgdGhlIG5ldyB2YWx1ZSBpcwotCi0gICAgeiA9IHkgKyB5LnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF0KLQotSXQncyBoZWxwZnVsIHRvIHN0ZXAgYmFjayBhdCBsb29rIGF0IFs0XSBmcm9tIGEgaGlnaGVyIGxldmVsOiAgaXQncyBzaW1wbHkKLW1hcHBpbmcgZnJvbSBVVEMgdG8gdHoncyBzdGFuZGFyZCB0aW1lLgotCi1BdCB0aGlzIHBvaW50LCBpZgotCi0gICAgei5uIC0gei5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNV0KLQotd2UgaGF2ZSBhbiBlcXVpdmFsZW50IHRpbWUsIGFuZCBhcmUgYWxtb3N0IGRvbmUuICBUaGUgaW5zZWN1cml0eSBoZXJlIGlzCi1hdCB0aGUgc3RhcnQgb2YgZGF5bGlnaHQgdGltZS4gIFBpY3R1cmUgVVMgRWFzdGVybiBmb3IgY29uY3JldGVuZXNzLiAgVGhlIHdhbGwKLXRpbWUganVtcHMgZnJvbSAxOjU5IHRvIDM6MDAsIGFuZCB3YWxsIGhvdXJzIG9mIHRoZSBmb3JtIDI6TU0gZG9uJ3QgbWFrZSBnb29kCi1zZW5zZSB0aGVuLiAgVGhlIGRvY3MgYXNrIHRoYXQgYW4gRWFzdGVybiB0emluZm8gY2xhc3MgY29uc2lkZXIgc3VjaCBhIHRpbWUgdG8KLWJlIEVEVCAoYmVjYXVzZSBpdCdzICJhZnRlciAyIiksIHdoaWNoIGlzIGEgcmVkdW5kYW50IHNwZWxsaW5nIG9mIDE6TU0gRVNUCi1vbiB0aGUgZGF5IERTVCBzdGFydHMuICBXZSB3YW50IHRvIHJldHVybiB0aGUgMTpNTSBFU1Qgc3BlbGxpbmcgYmVjYXVzZSB0aGF0J3MKLXRoZSBvbmx5IHNwZWxsaW5nIHRoYXQgbWFrZXMgc2Vuc2Ugb24gdGhlIGxvY2FsIHdhbGwgY2xvY2suCi0KLUluIGZhY3QsIGlmIFs1XSBob2xkcyBhdCB0aGlzIHBvaW50LCB3ZSBkbyBoYXZlIHRoZSBzdGFuZGFyZC10aW1lIHNwZWxsaW5nLAotYnV0IHRoYXQgdGFrZXMgYSBiaXQgb2YgcHJvb2YuICBXZSBmaXJzdCBwcm92ZSBhIHN0cm9uZ2VyIHJlc3VsdC4gIFdoYXQncyB0aGUKLWRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzVdPyAgTGV0Ci0KLSAgICBkaWZmID0geC5uIC0gKHoubiAtIHoubykgICAgICAgICAgICAgICAgICAgIFs2XQotCi1Ob3cKLSAgICB6Lm4gPSAgICAgICAgICAgICAgICAgICAgICAgYnkgWzRdCi0gICAgKHkgKyB5LnMpLm4gPSAgICAgICAgICAgICAgIGJ5ICM1Ci0gICAgeS5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHkubiA9IHgubgotICAgIHgubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB6IGFuZCB5IGFyZSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LnMgPSB6LnMgYnkgIzIKLSAgICB4Lm4gKyB6LnMKLQotUGx1Z2dpbmcgdGhhdCBiYWNrIGludG8gWzZdIGdpdmVzCi0KLSAgICBkaWZmID0KLSAgICB4Lm4gLSAoKHgubiArIHoucykgLSB6Lm8pID0gICAgIGV4cGFuZGluZwotICAgIHgubiAtIHgubiAtIHoucyArIHoubyA9ICAgICAgICAgY2FuY2VsbGluZwotICAgIC0gei5zICsgei5vID0gICAgICAgICAgICAgICAgICAgYnkgIzIKLSAgICB6LmQKLQotU28gZGlmZiA9IHouZC4KLQotSWYgWzVdIGlzIHRydWUgbm93LCBkaWZmID0gMCwgc28gei5kID0gMCB0b28sIGFuZCB3ZSBoYXZlIHRoZSBzdGFuZGFyZC10aW1lCi1zcGVsbGluZyB3ZSB3YW50ZWQgaW4gdGhlIGVuZGNhc2UgZGVzY3JpYmVkIGFib3ZlLiAgV2UncmUgZG9uZS4gIENvbnRyYXJpbHksCi1pZiB6LmQgPSAwLCB0aGVuIHdlIGhhdmUgYSBVVEMgZXF1aXZhbGVudCwgYW5kIGFyZSBhbHNvIGRvbmUuCi0KLUlmIFs1XSBpcyBub3QgdHJ1ZSBub3csIGRpZmYgPSB6LmQgIT0gMCwgYW5kIHouZCBpcyB0aGUgb2Zmc2V0IHdlIG5lZWQgdG8KLWFkZCB0byB6IChpbiBlZmZlY3QsIHogaXMgaW4gdHoncyBzdGFuZGFyZCB0aW1lLCBhbmQgd2UgbmVlZCB0byBzaGlmdCB0aGUKLWxvY2FsIGNsb2NrIGludG8gdHoncyBkYXlsaWdodCB0aW1lKS4KLQotTGV0Ci0KLSAgICB6JyA9IHogKyB6LmQgPSB6ICsgZGlmZiAgICAgICAgICAgICAgICAgICAgIFs3XQotCi1hbmQgd2UgY2FuIGFnYWluIGFzayB3aGV0aGVyCi0KLSAgICB6Jy5uIC0geicubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4XQotCi1JZiBzbywgd2UncmUgZG9uZS4gIElmIG5vdCwgdGhlIHR6aW5mbyBjbGFzcyBpcyBpbnNhbmUsIGFjY29yZGluZyB0byB0aGUKLWFzc3VtcHRpb25zIHdlJ3ZlIG1hZGUuICBUaGlzIGFsc28gcmVxdWlyZXMgYSBiaXQgb2YgcHJvb2YuICBBcyBiZWZvcmUsIGxldCdzCi1jb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs4XSAoYW5kIHNraXBwaW5nIHNvbWUgb2YKLXRoZSBqdXN0aWZpY2F0aW9ucyBmb3IgdGhlIGtpbmRzIG9mIHN1YnN0aXR1dGlvbnMgd2UndmUgZG9uZSBzZXZlcmFsIHRpbWVzCi1hbHJlYWR5KToKLQotICAgIGRpZmYnID0geC5uIC0gKHonLm4gLSB6Jy5vKSA9ICAgICAgICAgICByZXBsYWNpbmcgeicubiB2aWEgWzddCi0gICAgICAgICAgICB4Lm4gIC0gKHoubiArIGRpZmYgLSB6Jy5vKSA9ICAgIHJlcGxhY2luZyBkaWZmIHZpYSBbNl0KLSAgICAgICAgICAgIHgubiAtICh6Lm4gKyB4Lm4gLSAoei5uIC0gei5vKSAtIHonLm8pID0KLSAgICAgICAgICAgIHgubiAtIHoubiAtIHgubiArIHoubiAtIHoubyArIHonLm8gPSAgICBjYW5jZWwgeC5uCi0gICAgICAgICAgICAtIHoubiArIHoubiAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgY2FuY2VsIHoubgotICAgICAgICAgICAgLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgICAgICAgICAgIzEgdHdpY2UKLSAgICAgICAgICAgIC16LnMgLSB6LmQgKyB6Jy5zICsgeicuZCA9ICAgICAgICAgIHogYW5kIHonIGhhdmUgc2FtZSB0emluZm8KLSAgICAgICAgICAgIHonLmQgLSB6LmQKLQotU28geicgaXMgVVRDLWVxdWl2YWxlbnQgdG8geCBpZmYgeicuZCA9IHouZCBhdCB0aGlzIHBvaW50LiAgSWYgdGhleSBhcmUgZXF1YWwsCi13ZSd2ZSBmb3VuZCB0aGUgVVRDLWVxdWl2YWxlbnQgc28gYXJlIGRvbmUuICBJbiBmYWN0LCB3ZSBzdG9wIHdpdGggWzddIGFuZAotcmV0dXJuIHonLCBub3QgYm90aGVyaW5nIHRvIGNvbXB1dGUgeicuZC4KLQotSG93IGNvdWxkIHouZCBhbmQgeidkIGRpZmZlcj8gIHonID0geiArIHouZCBbN10sIHNvIG1lcmVseSBtb3ZpbmcgeicgYnkKLWEgZHN0KCkgb2Zmc2V0LCBhbmQgc3RhcnRpbmcgKmZyb20qIGEgdGltZSBhbHJlYWR5IGluIERTVCAod2Uga25vdyB6LmQgIT0gMCksCi13b3VsZCBoYXZlIHRvIGNoYW5nZSB0aGUgcmVzdWx0IGRzdCgpIHJldHVybnM6ICB3ZSBzdGFydCBpbiBEU1QsIGFuZCBtb3ZpbmcKLWEgbGl0dGxlIGZ1cnRoZXIgaW50byBpdCB0YWtlcyB1cyBvdXQgb2YgRFNULgotCi1UaGVyZSBpc24ndCBhIHNhbmUgY2FzZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4uICBUaGUgY2xvc2VzdCBpdCBnZXRzIGlzIGF0Ci10aGUgZW5kIG9mIERTVCwgd2hlcmUgdGhlcmUncyBhbiBob3VyIGluIFVUQyB3aXRoIG5vIHNwZWxsaW5nIGluIGEgaHlicmlkCi10emluZm8gY2xhc3MuICBJbiBVUyBFYXN0ZXJuLCB0aGF0J3MgNTpNTSBVVEMgPSAwOk1NIEVTVCA9IDE6TU0gRURULiAgRHVyaW5nCi10aGF0IGhvdXIsIG9uIGFuIEVhc3Rlcm4gY2xvY2sgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lICg2Ok1NCi1VVEMpIGJlY2F1c2UgdGhlIGRvY3MgaW5zaXN0IG9uIHRoYXQsIGJ1dCAwOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIGRheWxpZ2h0Ci10aW1lICg0Ok1NIFVUQykuICBUaGVyZSBpcyBubyBsb2NhbCB0aW1lIG1hcHBpbmcgdG8gNTpNTSBVVEMuICBUaGUgbG9jYWwKLWNsb2NrIGp1bXBzIGZyb20gMTo1OSBiYWNrIHRvIDE6MDAgYWdhaW4sIGFuZCByZXBlYXRzIHRoZSAxOk1NIGhvdXIgaW4KLXN0YW5kYXJkIHRpbWUuICBTaW5jZSB0aGF0J3Mgd2hhdCB0aGUgbG9jYWwgY2xvY2sgKmRvZXMqLCB3ZSB3YW50IHRvIG1hcCBib3RoCi1VVEMgaG91cnMgNTpNTSBhbmQgNjpNTSB0byAxOk1NIEVhc3Rlcm4uICBUaGUgcmVzdWx0IGlzIGFtYmlndW91cwotaW4gbG9jYWwgdGltZSwgYnV0IHNvIGl0IGdvZXMgLS0gaXQncyB0aGUgd2F5IHRoZSBsb2NhbCBjbG9jayB3b3Jrcy4KLQotV2hlbiB4ID0gNTpNTSBVVEMgaXMgdGhlIGlucHV0IHRvIHRoaXMgYWxnb3JpdGhtLCB4Lm89MCwgeS5vPS01IGFuZCB5LmQ9MCwKLXNvIHo9MDpNTS4gIHouZD02MCAobWludXRlcykgdGhlbiwgc28gWzVdIGRvZXNuJ3QgaG9sZCBhbmQgd2Uga2VlcCBnb2luZy4KLXonID0geiArIHouZCA9IDE6TU0gdGhlbiwgYW5kIHonLmQ9MCwgYW5kIHonLmQgLSB6LmQgPSAtNjAgIT0gMCBzbyBbOF0KLShjb3JyZWN0bHkpIGNvbmNsdWRlcyB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCB0byB4LgotCi1CZWNhdXNlIHdlIGtub3cgei5kIHNhaWQgeiB3YXMgaW4gZGF5bGlnaHQgdGltZSAoZWxzZSBbNV0gd291bGQgaGF2ZSBoZWxkIGFuZAotd2Ugd291bGQgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgd2Uga25vdyB6LmQgIT0geicuZCAoZWxzZSBbOF0gd291bGQgaGF2ZSBoZWxkCi1hbmQgd2UgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgdGhlcmUgYXJlIG9ubHkgMiBwb3NzaWJsZSB2YWx1ZXMgZHN0KCkgY2FuCi1yZXR1cm4gaW4gRWFzdGVybiwgaXQgZm9sbG93cyB0aGF0IHonLmQgbXVzdCBiZSAwICh3aGljaCBpdCBpcyBpbiB0aGUgZXhhbXBsZSwKLWJ1dCB0aGUgcmVhc29uaW5nIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBleGFtcGxlIC0tIGl0IGRlcGVuZHMgb24gdGhlcmUgYmVpbmcKLXR3byBwb3NzaWJsZSBkc3QoKSBvdXRjb21lcywgb25lIHplcm8gYW5kIHRoZSBvdGhlciBub24temVybykuICBUaGVyZWZvcmUKLXonIG11c3QgYmUgaW4gc3RhbmRhcmQgdGltZSwgYW5kIGlzIHRoZSBzcGVsbGluZyB3ZSB3YW50IGluIHRoaXMgY2FzZS4KLQotTm90ZSBhZ2FpbiB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCBhcyBmYXIgYXMgdGhlIGh5YnJpZCB0emluZm8gY2xhc3MgaXMKLWNvbmNlcm5lZCAoYmVjYXVzZSBpdCB0YWtlcyB6JyBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lIHJhdGhlciB0aGFuIHRoZQotZGF5bGlnaHQgdGltZSB3ZSBpbnRlbmQgaGVyZSksIGJ1dCByZXR1cm5pbmcgaXQgZ2l2ZXMgdGhlIHJlYWwtbGlmZSAibG9jYWwKLWNsb2NrIHJlcGVhdHMgYW4gaG91ciIgYmVoYXZpb3Igd2hlbiBtYXBwaW5nIHRoZSAidW5zcGVsbGFibGUiIFVUQyBob3VyIGludG8KLXR6LgotCi1XaGVuIHRoZSBpbnB1dCBpcyA2Ok1NLCB6PTE6TU0gYW5kIHouZD0wLCBhbmQgd2Ugc3RvcCBhdCBvbmNlLCBhZ2FpbiB3aXRoCi10aGUgMTpNTSBzdGFuZGFyZCB0aW1lIHNwZWxsaW5nIHdlIHdhbnQuCi0KLVNvIGhvdyBjYW4gdGhpcyBicmVhaz8gIE9uZSBvZiB0aGUgYXNzdW1wdGlvbnMgbXVzdCBiZSB2aW9sYXRlZC4gIFR3bwotcG9zc2liaWxpdGllczoKLQotMSkgWzJdIGVmZmVjdGl2ZWx5IHNheXMgdGhhdCB5LnMgaXMgaW52YXJpYW50IGFjcm9zcyBhbGwgeSBiZWxvbmcgdG8gYSBnaXZlbgotICAgdGltZSB6b25lLiAgVGhpcyBpc24ndCB0cnVlIGlmLCBmb3IgcG9saXRpY2FsIHJlYXNvbnMgb3IgY29udGluZW50YWwgZHJpZnQsCi0gICBhIHJlZ2lvbiBkZWNpZGVzIHRvIGNoYW5nZSBpdHMgYmFzZSBvZmZzZXQgZnJvbSBVVEMuCi0KLTIpIFRoZXJlIG1heSBiZSB2ZXJzaW9ucyBvZiAiZG91YmxlIGRheWxpZ2h0IiB0aW1lIHdoZXJlIHRoZSB0YWlsIGVuZCBvZgotICAgdGhlIGFuYWx5c2lzIGdpdmVzIHVwIGEgc3RlcCB0b28gZWFybHkuICBJIGhhdmVuJ3QgdGhvdWdodCBhYm91dCB0aGF0Ci0gICBlbm91Z2ggdG8gc2F5LgotCi1JbiBhbnkgY2FzZSwgaXQncyBjbGVhciB0aGF0IHRoZSBkZWZhdWx0IGZyb211dGMoKSBpcyBzdHJvbmcgZW5vdWdoIHRvIGhhbmRsZQotImFsbW9zdCBhbGwiIHRpbWUgem9uZXM6ICBzbyBsb25nIGFzIHRoZSBzdGFuZGFyZCBvZmZzZXQgaXMgaW52YXJpYW50LCBpdAotZG9lc24ndCBtYXR0ZXIgaWYgZGF5bGlnaHQgdGltZSB0cmFuc2l0aW9uIHBvaW50cyBjaGFuZ2UgZnJvbSB5ZWFyIHRvIHllYXIsIG9yCi1pZiBkYXlsaWdodCB0aW1lIGlzIHNraXBwZWQgaW4gc29tZSB5ZWFyczsgaXQgZG9lc24ndCBtYXR0ZXIgaG93IGxhcmdlIG9yCi1zbWFsbCBkc3QoKSBtYXkgZ2V0IHdpdGhpbiBpdHMgYm91bmRzOyBhbmQgaXQgZG9lc24ndCBldmVuIG1hdHRlciBpZiBzb21lCi1wZXJ2ZXJzZSB0aW1lIHpvbmUgcmV0dXJucyBhIG5lZ2F0aXZlIGRzdCgpKS4gIFNvIGEgYnJlYWtpbmcgY2FzZSBtdXN0IGJlCi1wcmV0dHkgYml6YXJyZSwgYW5kIGEgdHppbmZvIHN1YmNsYXNzIGNhbiBvdmVycmlkZSBmcm9tdXRjKCkgaWYgaXQgaXMuCi0iIiIKIHRyeToKICAgICBmcm9tIF9kYXRldGltZSBpbXBvcnQgKgogZXhjZXB0IEltcG9ydEVycm9yOgpkaWZmIC0tZ2l0IGEvTGliL2RibS9fX2luaXRfXy5weSBiL0xpYi9kYm0vX19pbml0X18ucHkKaW5kZXggYTc4M2ZkZS4uNWY0NjY0YSAxMDA2NDQKLS0tIGEvTGliL2RibS9fX2luaXRfXy5weQorKysgYi9MaWIvZGJtL19faW5pdF9fLnB5CkBAIC00Miw3ICs0Miw3IEBACiBfZGVmYXVsdG1vZCA9IE5vbmUKIF9tb2R1bGVzID0ge30KIAotZXJyb3IgPSAoZXJyb3IsIElPRXJyb3IpCitlcnJvciA9IChlcnJvciwgT1NFcnJvcikKIAogdHJ5OgogICAgIGZyb20gZGJtIGltcG9ydCBuZGJtCkBAIC0xMTEsMTIgKzExMSwxMCBAQAogICAgIHRyeToKICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLnBhZyIsICJyYiIpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAjIGRibSBsaW5rZWQgd2l0aCBnZGJtIG9uIE9TLzIgZG9lc24ndCBoYXZlIC5kaXIgZmlsZQotICAgICAgICBpZiBub3QgKG5kYm0ubGlicmFyeSA9PSAiR05VIGdkYm0iIGFuZCBzeXMucGxhdGZvcm0gPT0gIm9zMmVteCIpOgotICAgICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLmRpciIsICJyYiIpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLmRpciIsICJyYiIpCisgICAgICAgIGYuY2xvc2UoKQogICAgICAgICByZXR1cm4gImRibS5uZGJtIgotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIHNvbWUgZGJtIGVtdWxhdGlvbnMgYmFzZWQgb24gQmVya2VsZXkgREIgZ2VuZXJhdGUgYSAuZGIgZmlsZQogICAgICAgICAjIHNvbWUgZG8gbm90LCBidXQgdGhleSBzaG91bGQgYmUgY2F1Z2h0IGJ5IHRoZSBic2QgY2hlY2tzCiAgICAgICAgIHRyeToKQEAgLTEyOSw3ICsxMjcsNyBAQAogICAgICAgICAgICAgICAgIGQgPSBuZGJtLm9wZW4oZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuICJkYm0ubmRibSIKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgIyBDaGVjayBmb3IgZHVtYmRibSBuZXh0IC0tIHRoaXMgaGFzIGEgLmRpciBhbmQgYSAuZGF0IGZpbGUKQEAgLTE0NiwxMyArMTQ0LDEzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICJkYm0uZHVtYiIKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKIAogICAgICMgU2VlIGlmIHRoZSBmaWxlIGV4aXN0cywgcmV0dXJuIE5vbmUgaWYgbm90CiAgICAgdHJ5OgogICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSwgInJiIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgICMgUmVhZCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgLS0gdGhlIG1hZ2ljIG51bWJlcgpkaWZmIC0tZ2l0IGEvTGliL2RibS9kdW1iLnB5IGIvTGliL2RibS9kdW1iLnB5CmluZGV4IGNmYjkxMjMuLjlhYzc4NTIgMTAwNjQ0Ci0tLSBhL0xpYi9kYm0vZHVtYi5weQorKysgYi9MaWIvZGJtL2R1bWIucHkKQEAgLTI5LDcgKzI5LDcgQEAKIAogX0JMT0NLU0laRSA9IDUxMgogCi1lcnJvciA9IElPRXJyb3IKK2Vycm9yID0gT1NFcnJvcgogCiBjbGFzcyBfRGF0YWJhc2UoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgogCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICMgTW9kIGJ5IEphY2s6IGNyZWF0ZSBkYXRhIGZpbGUgaWYgbmVlZGVkCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfaW8ub3BlbihzZWxmLl9kYXRmaWxlLCAncicsIGVuY29kaW5nPSJMYXRpbi0xIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQogICAgICAgICAgICAgc2VsZi5fY2htb2Qoc2VsZi5fZGF0ZmlsZSkKICAgICAgICAgZi5jbG9zZSgpCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIHNlbGYuX2luZGV4ID0ge30KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RpcmZpbGUsICdyJywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgpAQCAtMTAwLDEyICsxMDAsMTIgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9vcy51bmxpbmsoc2VsZi5fYmFrZmlsZSkKLSAgICAgICAgZXhjZXB0IHNlbGYuX29zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9vcy5yZW5hbWUoc2VsZi5fZGlyZmlsZSwgc2VsZi5fYmFrZmlsZSkKLSAgICAgICAgZXhjZXB0IHNlbGYuX29zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBmID0gc2VsZi5faW8ub3BlbihzZWxmLl9kaXJmaWxlLCAndycsIGVuY29kaW5nPSJMYXRpbi0xIikKZGlmZiAtLWdpdCBhL0xpYi9kZWNpbWFsLnB5IGIvTGliL2RlY2ltYWwucHkKaW5kZXggOTZkOWRmNC4uZmM5NWFlOSAxMDA2NDQKLS0tIGEvTGliL2RlY2ltYWwucHkKKysrIGIvTGliL2RlY2ltYWwucHkKQEAgLTcwMyw4ICs3MDMsNyBAQAogCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgJXIgdG8gRGVjaW1hbCIgJSB2YWx1ZSkKIAotICAgICMgQGNsYXNzbWV0aG9kLCBidXQgQGRlY29yYXRvciBpcyBub3QgdmFsaWQgUHl0aG9uIDIuMyBzeW50YXgsIHNvCi0gICAgIyBkb24ndCB1c2UgaXQgKHNlZSBub3RlcyBvbiBQeTIuMyBjb21wYXRpYmlsaXR5IGF0IHRvcCBvZiBmaWxlKQorICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tX2Zsb2F0KGNscywgZik6CiAgICAgICAgICIiIkNvbnZlcnRzIGEgZmxvYXQgdG8gYSBkZWNpbWFsIG51bWJlciwgZXhhY3RseS4KIApAQCAtNzQzLDcgKzc0Miw2IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gY2xzKHJlc3VsdCkKLSAgICBmcm9tX2Zsb2F0ID0gY2xhc3NtZXRob2QoZnJvbV9mbG9hdCkKIAogICAgIGRlZiBfaXNuYW4oc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgbnVtYmVyIGlzIG5vdCBhY3R1YWxseSBvbmUuCmRpZmYgLS1naXQgYS9MaWIvZGlmZmxpYi5weSBiL0xpYi9kaWZmbGliLnB5CmluZGV4IGZlOTRjYzQuLjE1OWNiZTQgMTAwNjQ0Ci0tLSBhL0xpYi9kaWZmbGliLnB5CisrKyBiL0xpYi9kaWZmbGliLnB5CkBAIC0zMzYsMjAgKzMzNiw2IEBACiAgICAgICAgICAgICBmb3IgZWx0IGluIHBvcHVsYXI6ICMgZGl0dG87IGFzIGZhc3QgZm9yIDElIGRlbGV0aW9uCiAgICAgICAgICAgICAgICAgZGVsIGIyaltlbHRdCiAKLSAgICBkZWYgaXNianVuayhzZWxmLCBpdGVtKToKLSAgICAgICAgIkRlcHJlY2F0ZWQ7IHVzZSAnaXRlbSBpbiBTZXF1ZW5jZU1hdGNoZXIoKS5ianVuaycuIgotICAgICAgICB3YXJuaW5ncy53YXJuKCInU2VxdWVuY2VNYXRjaGVyKCkuaXNianVuayhpdGVtKScgaXMgZGVwcmVjYXRlZDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAidXNlICdpdGVtIGluIFNNaW5zdGFuY2UuYmp1bmsnIGluc3RlYWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCi0gICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuYmp1bmsKLQotICAgIGRlZiBpc2Jwb3B1bGFyKHNlbGYsIGl0ZW0pOgotICAgICAgICAiRGVwcmVjYXRlZDsgdXNlICdpdGVtIGluIFNlcXVlbmNlTWF0Y2hlcigpLmJwb3B1bGFyJy4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4oIidTZXF1ZW5jZU1hdGNoZXIoKS5pc2Jwb3B1bGFyKGl0ZW0pJyBpcyBkZXByZWNhdGVkO1xuIgotICAgICAgICAgICAgICAgICAgICAgICJ1c2UgJ2l0ZW0gaW4gU01pbnN0YW5jZS5icG9wdWxhcicgaW5zdGVhZC4iLAotICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5icG9wdWxhcgotCiAgICAgZGVmIGZpbmRfbG9uZ2VzdF9tYXRjaChzZWxmLCBhbG8sIGFoaSwgYmxvLCBiaGkpOgogICAgICAgICAiIiJGaW5kIGxvbmdlc3QgbWF0Y2hpbmcgYmxvY2sgaW4gYVthbG86YWhpXSBhbmQgYltibG86YmhpXS4KIApAQCAtOTIyLDggKzkwOCw3IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vua25vd24gdGFnICVyJyAlICh0YWcsKSkKIAotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZzoKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIGcKIAogICAgIGRlZiBfZHVtcChzZWxmLCB0YWcsIHgsIGxvLCBoaSk6CiAgICAgICAgICIiIkdlbmVyYXRlIGNvbXBhcmlzb24gcmVzdWx0cyBmb3IgYSBzYW1lLXRhZ2dlZCByYW5nZS4iIiIKQEAgLTk0Miw4ICs5MjcsNyBAQAogICAgICAgICAgICAgc2Vjb25kID0gc2VsZi5fZHVtcCgnKycsIGIsIGJsbywgYmhpKQogCiAgICAgICAgIGZvciBnIGluIGZpcnN0LCBzZWNvbmQ6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBnOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9mYW5jeV9yZXBsYWNlKHNlbGYsIGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6CiAgICAgICAgIHIiIiIKQEAgLTk5Nyw4ICs5ODEsNyBAQAogICAgICAgICAgICAgIyBubyBub24taWRlbnRpY2FsICJwcmV0dHkgY2xvc2UiIHBhaXIKICAgICAgICAgICAgIGlmIGVxaSBpcyBOb25lOgogICAgICAgICAgICAgICAgICMgbm8gaWRlbnRpY2FsIHBhaXIgZWl0aGVyIC0tIHRyZWF0IGl0IGFzIGEgc3RyYWlnaHQgcmVwbGFjZQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX3BsYWluX3JlcGxhY2UoYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fcGxhaW5fcmVwbGFjZShhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAjIG5vIGNsb3NlIHBhaXIsIGJ1dCBhbiBpZGVudGljYWwgcGFpciAtLSBzeW5jaCB1cCBvbiB0aGF0CiAgICAgICAgICAgICBiZXN0X2ksIGJlc3RfaiwgYmVzdF9yYXRpbyA9IGVxaSwgZXFqLCAxLjAKQEAgLTEwMTAsOCArOTkzLDcgQEAKICAgICAgICAgIyBpZGVudGljYWwKIAogICAgICAgICAjIHB1bXAgb3V0IGRpZmZzIGZyb20gYmVmb3JlIHRoZSBzeW5jaCBwb2ludAotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYWxvLCBiZXN0X2ksIGIsIGJsbywgYmVzdF9qKToKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYWxvLCBiZXN0X2ksIGIsIGJsbywgYmVzdF9qKQogCiAgICAgICAgICMgZG8gaW50cmFsaW5lIG1hcmtpbmcgb24gdGhlIHN5bmNoIHBhaXIKICAgICAgICAgYWVsdCwgYmVsdCA9IGFbYmVzdF9pXSwgYltiZXN0X2pdCkBAIC0xMDMzLDE1ICsxMDE1LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGJ0YWdzICs9ICcgJyAqIGxiCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5rbm93biB0YWcgJXInICUgKHRhZywpKQotICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fcWZvcm1hdChhZWx0LCBiZWx0LCBhdGFncywgYnRhZ3MpOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fcWZvcm1hdChhZWx0LCBiZWx0LCBhdGFncywgYnRhZ3MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIHRoZSBzeW5jaCBwYWlyIGlzIGlkZW50aWNhbAogICAgICAgICAgICAgeWllbGQgJyAgJyArIGFlbHQKIAogICAgICAgICAjIHB1bXAgb3V0IGRpZmZzIGZyb20gYWZ0ZXIgdGhlIHN5bmNoIHBvaW50Ci0gICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBiZXN0X2krMSwgYWhpLCBiLCBiZXN0X2orMSwgYmhpKToKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYmVzdF9pKzEsIGFoaSwgYiwgYmVzdF9qKzEsIGJoaSkKIAogICAgIGRlZiBfZmFuY3lfaGVscGVyKHNlbGYsIGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6CiAgICAgICAgIGcgPSBbXQpAQCAtMTA1Myw4ICsxMDMzLDcgQEAKICAgICAgICAgZWxpZiBibG8gPCBiaGk6CiAgICAgICAgICAgICBnID0gc2VsZi5fZHVtcCgnKycsIGIsIGJsbywgYmhpKQogCi0gICAgICAgIGZvciBsaW5lIGluIGc6Ci0gICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9xZm9ybWF0KHNlbGYsIGFsaW5lLCBibGluZSwgYXRhZ3MsIGJ0YWdzKToKICAgICAgICAgciIiIgpkaWZmIC0tZ2l0IGEvTGliL2Rpcy5weSBiL0xpYi9kaXMucHkKaW5kZXggNTQzZmRjNy4uMjYzMWY0NiAxMDA2NDQKLS0tIGEvTGliL2Rpcy5weQorKysgYi9MaWIvZGlzLnB5CkBAIC0yLDEyICsyLDE0IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcworaW1wb3J0IGNvbGxlY3Rpb25zCiAKIGZyb20gb3Bjb2RlIGltcG9ydCAqCiBmcm9tIG9wY29kZSBpbXBvcnQgX19hbGxfXyBhcyBfb3Bjb2Rlc19hbGwKIAogX19hbGxfXyA9IFsiY29kZV9pbmZvIiwgImRpcyIsICJkaXNhc3NlbWJsZSIsICJkaXN0YiIsICJkaXNjbyIsCi0gICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSJdICsgX29wY29kZXNfYWxsCisgICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSIsCisgICAgICAgICAgICJnZXRfaW5zdHJ1Y3Rpb25zIiwgIkluc3RydWN0aW9uIiwgIkJ5dGVjb2RlIl0gKyBfb3Bjb2Rlc19hbGwKIGRlbCBfb3Bjb2Rlc19hbGwKIAogX2hhdmVfY29kZSA9ICh0eXBlcy5NZXRob2RUeXBlLCB0eXBlcy5GdW5jdGlvblR5cGUsIHR5cGVzLkNvZGVUeXBlLCB0eXBlKQpAQCAtMjUsNyArMjcsNyBAQAogICAgICAgICBjID0gY29tcGlsZShzb3VyY2UsIG5hbWUsICdleGVjJykKICAgICByZXR1cm4gYwogCi1kZWYgZGlzKHg9Tm9uZSk6CitkZWYgZGlzKHg9Tm9uZSwgKiwgZmlsZT1Ob25lKToKICAgICAiIiJEaXNhc3NlbWJsZSBjbGFzc2VzLCBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuCiAKICAgICBXaXRoIG5vIGFyZ3VtZW50LCBkaXNhc3NlbWJsZSB0aGUgbGFzdCB0cmFjZWJhY2suCkBAIC00MiwyMyArNDQsMjMgQEAKICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoeC5fX2RpY3RfXy5pdGVtcygpKQogICAgICAgICBmb3IgbmFtZSwgeDEgaW4gaXRlbXM6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHgxLCBfaGF2ZV9jb2RlKToKLSAgICAgICAgICAgICAgICBwcmludCgiRGlzYXNzZW1ibHkgb2YgJXM6IiAlIG5hbWUpCisgICAgICAgICAgICAgICAgcHJpbnQoIkRpc2Fzc2VtYmx5IG9mICVzOiIgJSBuYW1lLCBmaWxlPWZpbGUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkaXMoeDEpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCJTb3JyeToiLCBtc2cpCi0gICAgICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgICAgICBwcmludCgiU29ycnk6IiwgbXNnLCBmaWxlPWZpbGUpCisgICAgICAgICAgICAgICAgcHJpbnQoZmlsZT1maWxlKQogICAgIGVsaWYgaGFzYXR0cih4LCAnY29fY29kZScpOiAjIENvZGUgb2JqZWN0Ci0gICAgICAgIGRpc2Fzc2VtYmxlKHgpCisgICAgICAgIGRpc2Fzc2VtYmxlKHgsIGZpbGU9ZmlsZSkKICAgICBlbGlmIGlzaW5zdGFuY2UoeCwgKGJ5dGVzLCBieXRlYXJyYXkpKTogIyBSYXcgYnl0ZWNvZGUKLSAgICAgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKHgpCisgICAgICAgIF9kaXNhc3NlbWJsZV9ieXRlcyh4LCBmaWxlPWZpbGUpCiAgICAgZWxpZiBpc2luc3RhbmNlKHgsIHN0cik6ICAgICMgU291cmNlIGNvZGUKLSAgICAgICAgX2Rpc2Fzc2VtYmxlX3N0cih4KQorICAgICAgICBfZGlzYXNzZW1ibGVfc3RyKHgsIGZpbGU9ZmlsZSkKICAgICBlbHNlOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICVzIG9iamVjdHMiICUKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoeCkuX19uYW1lX18pCiAKLWRlZiBkaXN0Yih0Yj1Ob25lKToKK2RlZiBkaXN0Yih0Yj1Ob25lLCAqLCBmaWxlPU5vbmUpOgogICAgICIiIkRpc2Fzc2VtYmxlIGEgdHJhY2ViYWNrIChkZWZhdWx0OiBsYXN0IHRyYWNlYmFjaykuIiIiCiAgICAgaWYgdGIgaXMgTm9uZToKICAgICAgICAgdHJ5OgpAQCAtNjYsNyArNjgsNyBAQAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIm5vIGxhc3QgdHJhY2ViYWNrIHRvIGRpc2Fzc2VtYmxlIikKICAgICAgICAgd2hpbGUgdGIudGJfbmV4dDogdGIgPSB0Yi50Yl9uZXh0Ci0gICAgZGlzYXNzZW1ibGUodGIudGJfZnJhbWUuZl9jb2RlLCB0Yi50Yl9sYXN0aSkKKyAgICBkaXNhc3NlbWJsZSh0Yi50Yl9mcmFtZS5mX2NvZGUsIHRiLnRiX2xhc3RpLCBmaWxlPWZpbGUpCiAKICMgVGhlIGluc3BlY3QgbW9kdWxlIGludGVycm9nYXRlcyB0aGlzIGRpY3Rpb25hcnkgdG8gYnVpbGQgaXRzCiAjIGxpc3Qgb2YgQ09fKiBjb25zdGFudHMuIEl0IGlzIGFsc28gdXNlZCBieSBwcmV0dHlfZmxhZ3MgdG8KQEAgLTk1LDE5ICs5NywyMiBAQAogICAgICAgICBuYW1lcy5hcHBlbmQoaGV4KGZsYWdzKSkKICAgICByZXR1cm4gIiwgIi5qb2luKG5hbWVzKQogCi1kZWYgY29kZV9pbmZvKHgpOgotICAgICIiIkZvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4iIiIKK2RlZiBfZ2V0X2NvZGVfb2JqZWN0KHgpOgorICAgICIiIkhlbHBlciB0byBoYW5kbGUgbWV0aG9kcywgZnVuY3Rpb25zLCBzdHJpbmdzIGFuZCByYXcgY29kZSBvYmplY3RzIiIiCiAgICAgaWYgaGFzYXR0cih4LCAnX19mdW5jX18nKTogIyBNZXRob2QKICAgICAgICAgeCA9IHguX19mdW5jX18KICAgICBpZiBoYXNhdHRyKHgsICdfX2NvZGVfXycpOiAjIEZ1bmN0aW9uCiAgICAgICAgIHggPSB4Ll9fY29kZV9fCiAgICAgaWYgaXNpbnN0YW5jZSh4LCBzdHIpOiAgICAgIyBTb3VyY2UgY29kZQotICAgICAgICB4ID0gX3RyeV9jb21waWxlKHgsICI8Y29kZV9pbmZvPiIpCisgICAgICAgIHggPSBfdHJ5X2NvbXBpbGUoeCwgIjxkaXNhc3NlbWJseT4iKQogICAgIGlmIGhhc2F0dHIoeCwgJ2NvX2NvZGUnKTogICMgQ29kZSBvYmplY3QKLSAgICAgICAgcmV0dXJuIF9mb3JtYXRfY29kZV9pbmZvKHgpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBkaXNhc3NlbWJsZSAlcyBvYmplY3RzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHgpLl9fbmFtZV9fKQorICAgICAgICByZXR1cm4geAorICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJXMgb2JqZWN0cyIgJQorICAgICAgICAgICAgICAgICAgICB0eXBlKHgpLl9fbmFtZV9fKQorCitkZWYgY29kZV9pbmZvKHgpOgorICAgICIiIkZvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4iIiIKKyAgICByZXR1cm4gX2Zvcm1hdF9jb2RlX2luZm8oX2dldF9jb2RlX29iamVjdCh4KSkKIAogZGVmIF9mb3JtYXRfY29kZV9pbmZvKGNvKToKICAgICBsaW5lcyA9IFtdCkBAIC0xNDAsMTA2ICsxNDUsMTk5IEBACiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiU0ZDogJXMiICUgaV9uKQogICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCiAKLWRlZiBzaG93X2NvZGUoY28pOgotICAgICIiIlByaW50IGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlIHRvIHN0ZG91dC4iIiIKLSAgICBwcmludChjb2RlX2luZm8oY28pKQorZGVmIHNob3dfY29kZShjbywgKiwgZmlsZT1Ob25lKToKKyAgICAiIiJQcmludCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZSB0byAqZmlsZSouCiAKLWRlZiBkaXNhc3NlbWJsZShjbywgbGFzdGk9LTEpOgotICAgICIiIkRpc2Fzc2VtYmxlIGEgY29kZSBvYmplY3QuIiIiCi0gICAgY29kZSA9IGNvLmNvX2NvZGUKLSAgICBsYWJlbHMgPSBmaW5kbGFiZWxzKGNvZGUpCisgICAgSWYgKmZpbGUqIGlzIG5vdCBwcm92aWRlZCwgdGhlIG91dHB1dCBpcyBwcmludGVkIG9uIHN0ZG91dC4KKyAgICAiIiIKKyAgICBwcmludChjb2RlX2luZm8oY28pLCBmaWxlPWZpbGUpCisKK19JbnN0cnVjdGlvbiA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIl9JbnN0cnVjdGlvbiIsCisgICAgICJvcG5hbWUgb3Bjb2RlIGFyZyBhcmd2YWwgYXJncmVwciBvZmZzZXQgc3RhcnRzX2xpbmUgaXNfanVtcF90YXJnZXQiKQorCitjbGFzcyBJbnN0cnVjdGlvbihfSW5zdHJ1Y3Rpb24pOgorICAgICIiIkRldGFpbHMgZm9yIGEgYnl0ZWNvZGUgb3BlcmF0aW9uCisKKyAgICAgICBEZWZpbmVkIGZpZWxkczoKKyAgICAgICAgIG9wbmFtZSAtIGh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIG9wZXJhdGlvbgorICAgICAgICAgb3Bjb2RlIC0gbnVtZXJpYyBjb2RlIGZvciBvcGVyYXRpb24KKyAgICAgICAgIGFyZyAtIG51bWVyaWMgYXJndW1lbnQgdG8gb3BlcmF0aW9uIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorICAgICAgICAgYXJndmFsIC0gcmVzb2x2ZWQgYXJnIHZhbHVlIChpZiBrbm93biksIG90aGVyd2lzZSBzYW1lIGFzIGFyZworICAgICAgICAgYXJncmVwciAtIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIG9wZXJhdGlvbiBhcmd1bWVudAorICAgICAgICAgb2Zmc2V0IC0gc3RhcnQgaW5kZXggb2Ygb3BlcmF0aW9uIHdpdGhpbiBieXRlY29kZSBzZXF1ZW5jZQorICAgICAgICAgc3RhcnRzX2xpbmUgLSBsaW5lIHN0YXJ0ZWQgYnkgdGhpcyBvcGNvZGUgKGlmIGFueSksIG90aGVyd2lzZSBOb25lCisgICAgICAgICBpc19qdW1wX3RhcmdldCAtIFRydWUgaWYgb3RoZXIgY29kZSBqdW1wcyB0byBoZXJlLCBvdGhlcndpc2UgRmFsc2UKKyAgICAiIiIKKworICAgIGRlZiBfZGlzYXNzZW1ibGUoc2VsZiwgbGluZW5vX3dpZHRoPTMsIG1hcmtfYXNfY3VycmVudD1GYWxzZSk6CisgICAgICAgICIiIkZvcm1hdCBpbnN0cnVjdGlvbiBkZXRhaWxzIGZvciBpbmNsdXNpb24gaW4gZGlzYXNzZW1ibHkgb3V0cHV0CisKKyAgICAgICAgKmxpbmVub193aWR0aCogc2V0cyB0aGUgd2lkdGggb2YgdGhlIGxpbmUgbnVtYmVyIGZpZWxkICgwIG9taXRzIGl0KQorICAgICAgICAqbWFya19hc19jdXJyZW50KiBpbnNlcnRzIGEgJy0tPicgbWFya2VyIGFycm93IGFzIHBhcnQgb2YgdGhlIGxpbmUKKyAgICAgICAgIiIiCisgICAgICAgIGZpZWxkcyA9IFtdCisgICAgICAgICMgQ29sdW1uOiBTb3VyY2UgY29kZSBsaW5lIG51bWJlcgorICAgICAgICBpZiBsaW5lbm9fd2lkdGg6CisgICAgICAgICAgICBpZiBzZWxmLnN0YXJ0c19saW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxpbmVub19mbXQgPSAiJSUlZGQiICUgbGluZW5vX3dpZHRoCisgICAgICAgICAgICAgICAgZmllbGRzLmFwcGVuZChsaW5lbm9fZm10ICUgc2VsZi5zdGFydHNfbGluZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgnICcgKiBsaW5lbm9fd2lkdGgpCisgICAgICAgICMgQ29sdW1uOiBDdXJyZW50IGluc3RydWN0aW9uIGluZGljYXRvcgorICAgICAgICBpZiBtYXJrX2FzX2N1cnJlbnQ6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCctLT4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgnICAgJykKKyAgICAgICAgIyBDb2x1bW46IEp1bXAgdGFyZ2V0IG1hcmtlcgorICAgICAgICBpZiBzZWxmLmlzX2p1bXBfdGFyZ2V0OgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgnPj4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgnICAnKQorICAgICAgICAjIENvbHVtbjogSW5zdHJ1Y3Rpb24gb2Zmc2V0IGZyb20gc3RhcnQgb2YgY29kZSBzZXF1ZW5jZQorICAgICAgICBmaWVsZHMuYXBwZW5kKHJlcHIoc2VsZi5vZmZzZXQpLnJqdXN0KDQpKQorICAgICAgICAjIENvbHVtbjogT3Bjb2RlIG5hbWUKKyAgICAgICAgZmllbGRzLmFwcGVuZChzZWxmLm9wbmFtZS5sanVzdCgyMCkpCisgICAgICAgICMgQ29sdW1uOiBPcGNvZGUgYXJndW1lbnQKKyAgICAgICAgaWYgc2VsZi5hcmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKHJlcHIoc2VsZi5hcmcpLnJqdXN0KDUpKQorICAgICAgICAgICAgIyBDb2x1bW46IE9wY29kZSBhcmd1bWVudCBkZXRhaWxzCisgICAgICAgICAgICBpZiBzZWxmLmFyZ3JlcHI6CisgICAgICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgnKCcgKyBzZWxmLmFyZ3JlcHIgKyAnKScpCisgICAgICAgIHJldHVybiAnICcuam9pbihmaWVsZHMpCisKKworZGVmIGdldF9pbnN0cnVjdGlvbnMoeCwgKiwgbGluZV9vZmZzZXQ9MCk6CisgICAgIiIiSXRlcmF0b3IgZm9yIHRoZSBvcGNvZGVzIGluIG1ldGhvZHMsIGZ1bmN0aW9ucyBvciBjb2RlCisKKyAgICBHZW5lcmF0ZXMgYSBzZXJpZXMgb2YgSW5zdHJ1Y3Rpb24gbmFtZWQgdHVwbGVzIGdpdmluZyB0aGUgZGV0YWlscyBvZgorICAgIGVhY2ggb3BlcmF0aW9ucyBpbiB0aGUgc3VwcGxpZWQgY29kZS4KKworICAgIFRoZSBnaXZlbiBsaW5lIG9mZnNldCBpcyBhZGRlZCB0byB0aGUgJ3N0YXJ0c19saW5lJyBhdHRyaWJ1dGUgb2YgYW55CisgICAgaW5zdHJ1Y3Rpb25zIHRoYXQgc3RhcnQgYSBuZXcgbGluZS4KKyAgICAiIiIKKyAgICBjbyA9IF9nZXRfY29kZV9vYmplY3QoeCkKKyAgICBjZWxsX25hbWVzID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycwogICAgIGxpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICByZXR1cm4gX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY28uY29fY29kZSwgY28uY29fdmFybmFtZXMsIGNvLmNvX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb19jb25zdHMsIGNlbGxfbmFtZXMsIGxpbmVzdGFydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfb2Zmc2V0KQorCitkZWYgX2dldF9jb25zdF9pbmZvKGNvbnN0X2luZGV4LCBjb25zdF9saXN0KToKKyAgICAiIiJIZWxwZXIgdG8gZ2V0IG9wdGlvbmFsIGRldGFpbHMgYWJvdXQgY29uc3QgcmVmZXJlbmNlcworCisgICAgICAgUmV0dXJucyB0aGUgZGVyZWZlcmVuY2VkIGNvbnN0YW50IGFuZCBpdHMgcmVwciBpZiB0aGUgY29uc3RhbnQKKyAgICAgICBsaXN0IGlzIGRlZmluZWQuCisgICAgICAgT3RoZXJ3aXNlIHJldHVybnMgdGhlIGNvbnN0YW50IGluZGV4IGFuZCBpdHMgcmVwcigpLgorICAgICIiIgorICAgIGFyZ3ZhbCA9IGNvbnN0X2luZGV4CisgICAgaWYgY29uc3RfbGlzdCBpcyBub3QgTm9uZToKKyAgICAgICAgYXJndmFsID0gY29uc3RfbGlzdFtjb25zdF9pbmRleF0KKyAgICByZXR1cm4gYXJndmFsLCByZXByKGFyZ3ZhbCkKKworZGVmIF9nZXRfbmFtZV9pbmZvKG5hbWVfaW5kZXgsIG5hbWVfbGlzdCk6CisgICAgIiIiSGVscGVyIHRvIGdldCBvcHRpb25hbCBkZXRhaWxzIGFib3V0IG5hbWVkIHJlZmVyZW5jZXMKKworICAgICAgIFJldHVybnMgdGhlIGRlcmVmZXJlbmNlZCBuYW1lIGFzIGJvdGggdmFsdWUgYW5kIHJlcHIgaWYgdGhlIG5hbWUKKyAgICAgICBsaXN0IGlzIGRlZmluZWQuCisgICAgICAgT3RoZXJ3aXNlIHJldHVybnMgdGhlIG5hbWUgaW5kZXggYW5kIGl0cyByZXByKCkuCisgICAgIiIiCisgICAgYXJndmFsID0gbmFtZV9pbmRleAorICAgIGlmIG5hbWVfbGlzdCBpcyBub3QgTm9uZToKKyAgICAgICAgYXJndmFsID0gbmFtZV9saXN0W25hbWVfaW5kZXhdCisgICAgICAgIGFyZ3JlcHIgPSBhcmd2YWwKKyAgICBlbHNlOgorICAgICAgICBhcmdyZXByID0gcmVwcihhcmd2YWwpCisgICAgcmV0dXJuIGFyZ3ZhbCwgYXJncmVwcgorCisKK2RlZiBfZ2V0X2luc3RydWN0aW9uc19ieXRlcyhjb2RlLCB2YXJuYW1lcz1Ob25lLCBuYW1lcz1Ob25lLCBjb25zdGFudHM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBjZWxscz1Ob25lLCBsaW5lc3RhcnRzPU5vbmUsIGxpbmVfb2Zmc2V0PTApOgorICAgICIiIkl0ZXJhdGUgb3ZlciB0aGUgaW5zdHJ1Y3Rpb25zIGluIGEgYnl0ZWNvZGUgc3RyaW5nLgorCisgICAgR2VuZXJhdGVzIGEgc2VxdWVuY2Ugb2YgSW5zdHJ1Y3Rpb24gbmFtZWR0dXBsZXMgZ2l2aW5nIHRoZSBkZXRhaWxzIG9mIGVhY2gKKyAgICBvcGNvZGUuICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlJ3MgcnVudGltZSBlbnZpcm9ubWVudAorICAgIChlLmcuIHZhcmlhYmxlIG5hbWVzLCBjb25zdGFudHMpIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgb3B0aW9uYWwKKyAgICBhcmd1bWVudHMuCisKKyAgICAiIiIKKyAgICBsYWJlbHMgPSBmaW5kbGFiZWxzKGNvZGUpCisgICAgZXh0ZW5kZWRfYXJnID0gMAorICAgIHN0YXJ0c19saW5lID0gTm9uZQorICAgIGZyZWUgPSBOb25lCisgICAgIyBlbnVtZXJhdGUoKSBpcyBub3QgYW4gb3B0aW9uLCBzaW5jZSB3ZSBzb21ldGltZXMgcHJvY2VzcworICAgICMgbXVsdGlwbGUgZWxlbWVudHMgb24gYSBzaW5nbGUgcGFzcyB0aHJvdWdoIHRoZSBsb29wCiAgICAgbiA9IGxlbihjb2RlKQogICAgIGkgPSAwCi0gICAgZXh0ZW5kZWRfYXJnID0gMAotICAgIGZyZWUgPSBOb25lCiAgICAgd2hpbGUgaSA8IG46CiAgICAgICAgIG9wID0gY29kZVtpXQotICAgICAgICBpZiBpIGluIGxpbmVzdGFydHM6Ci0gICAgICAgICAgICBpZiBpID4gMDoKLSAgICAgICAgICAgICAgICBwcmludCgpCi0gICAgICAgICAgICBwcmludCgiJTNkIiAlIGxpbmVzdGFydHNbaV0sIGVuZD0nICcpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgnICAgJywgZW5kPScgJykKLQotICAgICAgICBpZiBpID09IGxhc3RpOiBwcmludCgnLS0+JywgZW5kPScgJykKLSAgICAgICAgZWxzZTogcHJpbnQoJyAgICcsIGVuZD0nICcpCi0gICAgICAgIGlmIGkgaW4gbGFiZWxzOiBwcmludCgnPj4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAnLCBlbmQ9JyAnKQotICAgICAgICBwcmludChyZXByKGkpLnJqdXN0KDQpLCBlbmQ9JyAnKQotICAgICAgICBwcmludChvcG5hbWVbb3BdLmxqdXN0KDIwKSwgZW5kPScgJykKKyAgICAgICAgb2Zmc2V0ID0gaQorICAgICAgICBpZiBsaW5lc3RhcnRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RhcnRzX2xpbmUgPSBsaW5lc3RhcnRzLmdldChpLCBOb25lKQorICAgICAgICAgICAgaWYgc3RhcnRzX2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhcnRzX2xpbmUgKz0gbGluZV9vZmZzZXQKKyAgICAgICAgaXNfanVtcF90YXJnZXQgPSBpIGluIGxhYmVscwogICAgICAgICBpID0gaSsxCisgICAgICAgIGFyZyA9IE5vbmUKKyAgICAgICAgYXJndmFsID0gTm9uZQorICAgICAgICBhcmdyZXByID0gJycKICAgICAgICAgaWYgb3AgPj0gSEFWRV9BUkdVTUVOVDoKLSAgICAgICAgICAgIG9wYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYgKyBleHRlbmRlZF9hcmcKKyAgICAgICAgICAgIGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2ICsgZXh0ZW5kZWRfYXJnCiAgICAgICAgICAgICBleHRlbmRlZF9hcmcgPSAwCiAgICAgICAgICAgICBpID0gaSsyCiAgICAgICAgICAgICBpZiBvcCA9PSBFWFRFTkRFRF9BUkc6Ci0gICAgICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gb3BhcmcqNjU1MzYKLSAgICAgICAgICAgIHByaW50KHJlcHIob3BhcmcpLnJqdXN0KDUpLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGV4dGVuZGVkX2FyZyA9IGFyZyo2NTUzNgorICAgICAgICAgICAgIyAgU2V0IGFyZ3ZhbCB0byB0aGUgZGVyZWZlcmVuY2VkIHZhbHVlIG9mIHRoZSBhcmd1bWVudCB3aGVuCisgICAgICAgICAgICAjICBhdmFpbGFiZSwgYW5kIGFyZ3JlcHIgdG8gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhcmd2YWwuCisgICAgICAgICAgICAjICAgIF9kaXNhc3NlbWJsZV9ieXRlcyBuZWVkcyB0aGUgc3RyaW5nIHJlcHIgb2YgdGhlCisgICAgICAgICAgICAjICAgIHJhdyBuYW1lIGluZGV4IGZvciBMT0FEX0dMT0JBTCwgTE9BRF9DT05TVCwgZXRjLgorICAgICAgICAgICAgYXJndmFsID0gYXJnCiAgICAgICAgICAgICBpZiBvcCBpbiBoYXNjb25zdDoKLSAgICAgICAgICAgICAgICBwcmludCgnKCcgKyByZXByKGNvLmNvX2NvbnN0c1tvcGFyZ10pICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfY29uc3RfaW5mbyhhcmcsIGNvbnN0YW50cykKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbmFtZToKLSAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBjby5jb19uYW1lc1tvcGFyZ10gKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9uYW1lX2luZm8oYXJnLCBuYW1lcykKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzanJlbDoKLSAgICAgICAgICAgICAgICBwcmludCgnKHRvICcgKyByZXByKGkgKyBvcGFyZykgKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsID0gaSArIGFyZworICAgICAgICAgICAgICAgIGFyZ3JlcHIgPSAidG8gIiArIHJlcHIoYXJndmFsKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNsb2NhbDoKLSAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBjby5jb192YXJuYW1lc1tvcGFyZ10gKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9uYW1lX2luZm8oYXJnLCB2YXJuYW1lcykKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzY29tcGFyZToKLSAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBjbXBfb3Bbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCA9IGNtcF9vcFthcmddCisgICAgICAgICAgICAgICAgYXJncmVwciA9IGFyZ3ZhbAogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNmcmVlOgotICAgICAgICAgICAgICAgIGlmIGZyZWUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZnJlZSA9IGNvLmNvX2NlbGx2YXJzICsgY28uY29fZnJlZXZhcnMKLSAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBmcmVlW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X25hbWVfaW5mbyhhcmcsIGNlbGxzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYXJnczoKLSAgICAgICAgICAgICAgICBwcmludCgnKCVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciknCi0gICAgICAgICAgICAgICAgICAgICAgJSAoY29kZVtpLTJdLCBjb2RlW2ktMV0pLCBlbmQ9JyAnKQotICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgYXJncmVwciA9ICIlZCBwb3NpdGlvbmFsLCAlZCBrZXl3b3JkIHBhaXIiICUgKGNvZGVbaS0yXSwgY29kZVtpLTFdKQorICAgICAgICB5aWVsZCBJbnN0cnVjdGlvbihvcG5hbWVbb3BdLCBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLCBhcmd2YWwsIGFyZ3JlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgc3RhcnRzX2xpbmUsIGlzX2p1bXBfdGFyZ2V0KQorCitkZWYgZGlzYXNzZW1ibGUoY28sIGxhc3RpPS0xLCAqLCBmaWxlPU5vbmUpOgorICAgICIiIkRpc2Fzc2VtYmxlIGEgY29kZSBvYmplY3QuIiIiCisgICAgY2VsbF9uYW1lcyA9IGNvLmNvX2NlbGx2YXJzICsgY28uY29fZnJlZXZhcnMKKyAgICBsaW5lc3RhcnRzID0gZGljdChmaW5kbGluZXN0YXJ0cyhjbykpCisgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKGNvLmNvX2NvZGUsIGxhc3RpLCBjby5jb192YXJuYW1lcywgY28uY29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgY2VsbF9uYW1lcywgbGluZXN0YXJ0cywgZmlsZT1maWxlKQogCiBkZWYgX2Rpc2Fzc2VtYmxlX2J5dGVzKGNvZGUsIGxhc3RpPS0xLCB2YXJuYW1lcz1Ob25lLCBuYW1lcz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHM9Tm9uZSk6Ci0gICAgbGFiZWxzID0gZmluZGxhYmVscyhjb2RlKQotICAgIG4gPSBsZW4oY29kZSkKLSAgICBpID0gMAotICAgIHdoaWxlIGkgPCBuOgotICAgICAgICBvcCA9IGNvZGVbaV0KLSAgICAgICAgaWYgaSA9PSBsYXN0aTogcHJpbnQoJy0tPicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICAnLCBlbmQ9JyAnKQotICAgICAgICBpZiBpIGluIGxhYmVsczogcHJpbnQoJz4+JywgZW5kPScgJykKLSAgICAgICAgZWxzZTogcHJpbnQoJyAgJywgZW5kPScgJykKLSAgICAgICAgcHJpbnQocmVwcihpKS5yanVzdCg0KSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQob3BuYW1lW29wXS5sanVzdCgxNSksIGVuZD0nICcpCi0gICAgICAgIGkgPSBpKzEKLSAgICAgICAgaWYgb3AgPj0gSEFWRV9BUkdVTUVOVDoKLSAgICAgICAgICAgIG9wYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYKLSAgICAgICAgICAgIGkgPSBpKzIKLSAgICAgICAgICAgIHByaW50KHJlcHIob3BhcmcpLnJqdXN0KDUpLCBlbmQ9JyAnKQotICAgICAgICAgICAgaWYgb3AgaW4gaGFzY29uc3Q6Ci0gICAgICAgICAgICAgICAgaWYgY29uc3RhbnRzOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCcgKyByZXByKGNvbnN0YW50c1tvcGFyZ10pICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJWQpJyVvcGFyZywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbmFtZToKLSAgICAgICAgICAgICAgICBpZiBuYW1lcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJygnICsgbmFtZXNbb3BhcmddICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJWQpJyVvcGFyZywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzanJlbDoKLSAgICAgICAgICAgICAgICBwcmludCgnKHRvICcgKyByZXByKGkgKyBvcGFyZykgKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc2xvY2FsOgotICAgICAgICAgICAgICAgIGlmIHZhcm5hbWVzOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCcgKyB2YXJuYW1lc1tvcGFyZ10gKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyglZCknICUgb3BhcmcsIGVuZD0nICcpCi0gICAgICAgICAgICBlbGlmIG9wIGluIGhhc2NvbXBhcmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJygnICsgY21wX29wW29wYXJnXSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbmFyZ3M6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJyglZCBwb3NpdGlvbmFsLCAlZCBrZXl3b3JkIHBhaXIpJwotICAgICAgICAgICAgICAgICAgICAgICUgKGNvZGVbaS0yXSwgY29kZVtpLTFdKSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHM9Tm9uZSwgY2VsbHM9Tm9uZSwgbGluZXN0YXJ0cz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAqLCBmaWxlPU5vbmUpOgorICAgICMgT21pdCB0aGUgbGluZSBudW1iZXIgY29sdW1uIGVudGlyZWx5IGlmIHdlIGhhdmUgbm8gbGluZSBudW1iZXIgaW5mbworICAgIHNob3dfbGluZW5vID0gbGluZXN0YXJ0cyBpcyBub3QgTm9uZQorICAgICMgVE9ETz86IEFkanVzdCB3aWR0aCB1cHdhcmRzIGlmIG1heChsaW5lc3RhcnRzLnZhbHVlcygpKSA+PSAxMDAwPworICAgIGxpbmVub193aWR0aCA9IDMgaWYgc2hvd19saW5lbm8gZWxzZSAwCisgICAgZm9yIGluc3RyIGluIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvZGUsIHZhcm5hbWVzLCBuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRzLCBjZWxscywgbGluZXN0YXJ0cyk6CisgICAgICAgIG5ld19zb3VyY2VfbGluZSA9IChzaG93X2xpbmVubyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyLnN0YXJ0c19saW5lIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHIub2Zmc2V0ID4gMCkKKyAgICAgICAgaWYgbmV3X3NvdXJjZV9saW5lOgorICAgICAgICAgICAgcHJpbnQoZmlsZT1maWxlKQorICAgICAgICBpc19jdXJyZW50X2luc3RyID0gaW5zdHIub2Zmc2V0ID09IGxhc3RpCisgICAgICAgIHByaW50KGluc3RyLl9kaXNhc3NlbWJsZShsaW5lbm9fd2lkdGgsIGlzX2N1cnJlbnRfaW5zdHIpLCBmaWxlPWZpbGUpCiAKLWRlZiBfZGlzYXNzZW1ibGVfc3RyKHNvdXJjZSk6CitkZWYgX2Rpc2Fzc2VtYmxlX3N0cihzb3VyY2UsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiQ29tcGlsZSB0aGUgc291cmNlIHN0cmluZywgdGhlbiBkaXNhc3NlbWJsZSB0aGUgY29kZSBvYmplY3QuIiIiCi0gICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JykpCisgICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JyksIGZpbGU9ZmlsZSkKIAogZGlzY28gPSBkaXNhc3NlbWJsZSAgICAgICAgICAgICAgICAgICAgICMgWFhYIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogCkBAIC0yNTAsMTkgKzM0OCwyMSBAQAogCiAgICAgIiIiCiAgICAgbGFiZWxzID0gW10KKyAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCisgICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKICAgICBuID0gbGVuKGNvZGUpCiAgICAgaSA9IDAKICAgICB3aGlsZSBpIDwgbjoKICAgICAgICAgb3AgPSBjb2RlW2ldCiAgICAgICAgIGkgPSBpKzEKICAgICAgICAgaWYgb3AgPj0gSEFWRV9BUkdVTUVOVDoKLSAgICAgICAgICAgIG9wYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYKKyAgICAgICAgICAgIGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2CiAgICAgICAgICAgICBpID0gaSsyCiAgICAgICAgICAgICBsYWJlbCA9IC0xCiAgICAgICAgICAgICBpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIGxhYmVsID0gaStvcGFyZworICAgICAgICAgICAgICAgIGxhYmVsID0gaSthcmcKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzamFiczoKLSAgICAgICAgICAgICAgICBsYWJlbCA9IG9wYXJnCisgICAgICAgICAgICAgICAgbGFiZWwgPSBhcmcKICAgICAgICAgICAgIGlmIGxhYmVsID49IDA6CiAgICAgICAgICAgICAgICAgaWYgbGFiZWwgbm90IGluIGxhYmVsczoKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCkKQEAgLTI5MCwyNyArMzkwLDYwIEBACiAgICAgaWYgbGluZW5vICE9IGxhc3RsaW5lbm86CiAgICAgICAgIHlpZWxkIChhZGRyLCBsaW5lbm8pCiAKK2NsYXNzIEJ5dGVjb2RlOgorICAgICIiIlRoZSBieXRlY29kZSBvcGVyYXRpb25zIG9mIGEgcGllY2Ugb2YgY29kZQorCisgICAgSW5zdGFudGlhdGUgdGhpcyB3aXRoIGEgZnVuY3Rpb24sIG1ldGhvZCwgc3RyaW5nIG9mIGNvZGUsIG9yIGEgY29kZSBvYmplY3QKKyAgICAoYXMgcmV0dXJuZWQgYnkgY29tcGlsZSgpKS4KKworICAgIEl0ZXJhdGluZyBvdmVyIHRoaXMgeWllbGRzIHRoZSBieXRlY29kZSBvcGVyYXRpb25zIGFzIEluc3RydWN0aW9uIGluc3RhbmNlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgIHNlbGYuY29kZW9iaiA9IF9nZXRfY29kZV9vYmplY3QoeCkKKyAgICAgICAgc2VsZi5jZWxsX25hbWVzID0gc2VsZi5jb2Rlb2JqLmNvX2NlbGx2YXJzICsgc2VsZi5jb2Rlb2JqLmNvX2ZyZWV2YXJzCisgICAgICAgIHNlbGYubGluZXN0YXJ0cyA9IGRpY3QoZmluZGxpbmVzdGFydHMoc2VsZi5jb2Rlb2JqKSkKKyAgICAgICAgc2VsZi5saW5lX29mZnNldCA9IDAKKyAgICAgICAgc2VsZi5vcmlnaW5hbF9vYmplY3QgPSB4CisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGNvID0gc2VsZi5jb2Rlb2JqCisgICAgICAgIHJldHVybiBfZ2V0X2luc3RydWN0aW9uc19ieXRlcyhjby5jb19jb2RlLCBjby5jb192YXJuYW1lcywgY28uY29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgc2VsZi5jZWxsX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVzdGFydHMsIHNlbGYubGluZV9vZmZzZXQpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAie30oeyFyfSkiLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5vcmlnaW5hbF9vYmplY3QpCisKKyAgICBkZWYgaW5mbyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGZvcm1hdHRlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29kZSBvYmplY3QuIiIiCisgICAgICAgIHJldHVybiBfZm9ybWF0X2NvZGVfaW5mbyhzZWxmLmNvZGVvYmopCisKKyAgICBkZWYgc2hvd19pbmZvKHNlbGYsICosIGZpbGU9Tm9uZSk6CisgICAgICAgICIiIlByaW50IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29kZSBvYmplY3QgYXMgcmV0dXJuZWQgYnkgaW5mbygpLiIiIgorICAgICAgICBwcmludChzZWxmLmluZm8oKSwgZmlsZT1maWxlKQorCisgICAgZGVmIGRpc3BsYXlfY29kZShzZWxmLCAqLCBmaWxlPU5vbmUpOgorICAgICAgICAiIiJQcmludCBhIGZvcm1hdHRlZCB2aWV3IG9mIHRoZSBieXRlY29kZSBvcGVyYXRpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgY28gPSBzZWxmLmNvZGVvYmoKKyAgICAgICAgcmV0dXJuIF9kaXNhc3NlbWJsZV9ieXRlcyhjby5jb19jb2RlLCB2YXJuYW1lcz1jby5jb192YXJuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcz1jby5jb19uYW1lcywgY29uc3RhbnRzPWNvLmNvX2NvbnN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxscz1zZWxmLmNlbGxfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXN0YXJ0cz1zZWxmLmxpbmVzdGFydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKwogZGVmIF90ZXN0KCk6CiAgICAgIiIiU2ltcGxlIHRlc3QgcHJvZ3JhbSB0byBkaXNhc3NlbWJsZSBhIGZpbGUuIiIiCi0gICAgaWYgc3lzLmFyZ3ZbMTpdOgotICAgICAgICBpZiBzeXMuYXJndlsyOl06Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ1c2FnZTogcHl0aG9uIGRpcy5weSBbLXxmaWxlXVxuIikKLSAgICAgICAgICAgIHN5cy5leGl0KDIpCi0gICAgICAgIGZuID0gc3lzLmFyZ3ZbMV0KLSAgICAgICAgaWYgbm90IGZuIG9yIGZuID09ICItIjoKLSAgICAgICAgICAgIGZuID0gTm9uZQotICAgIGVsc2U6Ci0gICAgICAgIGZuID0gTm9uZQotICAgIGlmIGZuIGlzIE5vbmU6Ci0gICAgICAgIGYgPSBzeXMuc3RkaW4KLSAgICBlbHNlOgotICAgICAgICBmID0gb3BlbihmbikKLSAgICBzb3VyY2UgPSBmLnJlYWQoKQotICAgIGlmIGZuIGlzIG5vdCBOb25lOgotICAgICAgICBmLmNsb3NlKCkKLSAgICBlbHNlOgotICAgICAgICBmbiA9ICI8c3RkaW4+IgotICAgIGNvZGUgPSBjb21waWxlKHNvdXJjZSwgZm4sICJleGVjIikKKyAgICBpbXBvcnQgYXJncGFyc2UKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdpbmZpbGUnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCksIG5hcmdzPSc/JywgZGVmYXVsdD0nLScpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICB3aXRoIGFyZ3MuaW5maWxlIGFzIGluZmlsZToKKyAgICAgICAgc291cmNlID0gaW5maWxlLnJlYWQoKQorICAgIGNvZGUgPSBjb21waWxlKHNvdXJjZSwgYXJncy5pbmZpbGUubmFtZSwgImV4ZWMiKQogICAgIGRpcyhjb2RlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weSBiL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkKaW5kZXggODEyZDhmMy4uMzU1NTQyZSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weQorKysgYi9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5CkBAIC0xMyw1ICsxMyw1IEBACiAjIFVwZGF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgUHl0aG9uIHJlbGVhc2UgcHJvY2Vzcy4KICMKICMtLXN0YXJ0IGNvbnN0YW50cy0tCi1fX3ZlcnNpb25fXyA9ICIzLjMuM3JjMSIKK19fdmVyc2lvbl9fID0gIjMuNC4wYTQiCiAjLS1lbmQgY29uc3RhbnRzLS0KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9jY29tcGlsZXIucHkKaW5kZXggYzc5NWM5NS4uOTExZTg0ZCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jY29tcGlsZXIucHkKQEAgLTM1MSw3ICszNTEsNyBAQAogICAgICAgICByZXR1cm4gbWFjcm9zLCBvYmplY3RzLCBleHRyYSwgcHBfb3B0cywgYnVpbGQKIAogICAgIGRlZiBfZ2V0X2NjX2FyZ3Moc2VsZiwgcHBfb3B0cywgZGVidWcsIGJlZm9yZSk6Ci0gICAgICAgICMgd29ya3MgZm9yIHVuaXhjY29tcGlsZXIsIGVteGNjb21waWxlciwgY3lnd2luY2NvbXBpbGVyCisgICAgICAgICMgd29ya3MgZm9yIHVuaXhjY29tcGlsZXIsIGN5Z3dpbmNjb21waWxlcgogICAgICAgICBjY19hcmdzID0gcHBfb3B0cyArIFsnLWMnXQogICAgICAgICBpZiBkZWJ1ZzoKICAgICAgICAgICAgIGNjX2FyZ3NbOjBdID0gWyctZyddCkBAIC05MjYsNyArOTI2LDYgQEAKICAgICAjIG9uIGEgY3lnd2luIGJ1aWx0IHB5dGhvbiB3ZSBjYW4gdXNlIGdjYyBsaWtlIGFuIG9yZGluYXJ5IFVOSVhpc2gKICAgICAjIGNvbXBpbGVyCiAgICAgKCdjeWd3aW4uKicsICd1bml4JyksCi0gICAgKCdvczJlbXgnLCAnZW14JyksCiAKICAgICAjIE9TIG5hbWUgbWFwcGluZ3MKICAgICAoJ3Bvc2l4JywgJ3VuaXgnKSwKQEAgLTk2OCw4ICs5NjcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaW5ndzMyIHBvcnQgb2YgR05VIEMgQ29tcGlsZXIgZm9yIFdpbjMyIiksCiAgICAgICAgICAgICAgICAgICAgJ2JjcHAnOiAgICAoJ2JjcHBjb21waWxlcicsICdCQ1BQQ29tcGlsZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCb3JsYW5kIEMrKyBDb21waWxlciIpLAotICAgICAgICAgICAgICAgICAgICdlbXgnOiAgICAgKCdlbXhjY29tcGlsZXInLCAnRU1YQ0NvbXBpbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1YIHBvcnQgb2YgR05VIEMgQ29tcGlsZXIgZm9yIE9TLzIiKSwKICAgICAgICAgICAgICAgICAgfQogCiBkZWYgc2hvd19jb21waWxlcnMoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQppbmRleCBjNTE4OGViLi4zOGIxNjlhIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CkBAIC01Miw4ICs1Miw3IEBACiAgICAgIyBUaGlzIHdvbid0IGRvIGluIHJlYWxpdHk6IHdpbGwgbmVlZCB0byBkaXN0aW5ndWlzaCBSUE0taXNoIExpbnV4LAogICAgICMgRGViaWFuLWlzaCBMaW51eCwgU29sYXJpcywgRnJlZUJTRCwgLi4uLCBXaW5kb3dzLCBNYWMgT1MuCiAgICAgZGVmYXVsdF9mb3JtYXQgPSB7J3Bvc2l4JzogJ2d6dGFyJywKLSAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJywKLSAgICAgICAgICAgICAgICAgICAgICAnb3MyJzogJ3ppcCd9CisgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCd9CiAKICAgICAjIEVzdGFibGlzaCB0aGUgcHJlZmVycmVkIG9yZGVyIChmb3IgdGhlIC0taGVscC1mb3JtYXRzIG9wdGlvbikuCiAgICAgZm9ybWF0X2NvbW1hbmRzID0gWydycG0nLCAnZ3p0YXInLCAnYnp0YXInLCAnenRhcicsICd0YXInLApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQppbmRleCAxYWIwOWQxLi5lZWZkZmVhIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQpAQCAtMzgsOCArMzgsNyBAQAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsna2VlcC10ZW1wJywgJ3NraXAtYnVpbGQnLCAncmVsYXRpdmUnXQogCiAgICAgZGVmYXVsdF9mb3JtYXQgPSB7ICdwb3NpeCc6ICdnenRhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnLAotICAgICAgICAgICAgICAgICAgICAgICAnb3MyJzogJ3ppcCcgfQorICAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJyB9CiAKICAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLmJkaXN0X2RpciA9IE5vbmUKQEAgLTg1LDExICs4NCw2IEBACiAgICAgICAgIGFyY2hpdmVfYmFzZW5hbWUgPSAiJXMuJXMiICUgKHNlbGYuZGlzdHJpYnV0aW9uLmdldF9mdWxsbmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsYXRfbmFtZSkKIAotICAgICAgICAjIE9TLzIgb2JqZWN0cyB0byBhbnkgIjoiIGNoYXJhY3RlcnMgaW4gYSBmaWxlbmFtZSAoc3VjaCBhcyB3aGVuCi0gICAgICAgICMgYSB0aW1lc3RhbXAgaXMgdXNlZCBpbiBhIHZlcnNpb24pIHNvIGNoYW5nZSB0aGVtIHRvIGh5cGhlbnMuCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgICAgICBhcmNoaXZlX2Jhc2VuYW1lID0gYXJjaGl2ZV9iYXNlbmFtZS5yZXBsYWNlKCI6IiwgIi0iKQotCiAgICAgICAgIHBzZXVkb2luc3RhbGxfcm9vdCA9IG9zLnBhdGguam9pbihzZWxmLmRpc3RfZGlyLCBhcmNoaXZlX2Jhc2VuYW1lKQogICAgICAgICBpZiBub3Qgc2VsZi5yZWxhdGl2ZToKICAgICAgICAgICAgIGFyY2hpdmVfcm9vdCA9IHNlbGYuYmRpc3RfZGlyCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQppbmRleCBiYzZhMjNmLi44MDY4OWI2IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKQEAgLTIzMCwxMSArMjMwLDYgQEAKICAgICAgICAgICAgICAgICBzZWxmLmxpYnJhcnlfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BDJywgJ1ZDNicpKQogCi0gICAgICAgICMgT1MvMiAoRU1YKSBkb2Vzbid0IHN1cHBvcnQgRGVidWcgdnMgUmVsZWFzZSBidWlsZHMsIGJ1dCBoYXMgdGhlCi0gICAgICAgICMgaW1wb3J0IGxpYnJhcmllcyBpbiBpdHMgIkNvbmZpZyIgc3ViZGlyZWN0b3J5Ci0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgICAgICBzZWxmLmxpYnJhcnlfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgJ0NvbmZpZycpKQotCiAgICAgICAgICMgZm9yIGV4dGVuc2lvbnMgdW5kZXIgQ3lnd2luIGFuZCBBdGhlT1MgUHl0aG9uJ3MgbGlicmFyeSBkaXJlY3RvcnkgbXVzdCBiZQogICAgICAgICAjIGFwcGVuZGVkIHRvIGxpYnJhcnlfZGlycwogICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjZdID09ICdjeWd3aW4nIG9yIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gJ2F0aGVvcyc6CkBAIC02MTksOSArNjE0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiAic3dpZy5leGUiCi0gICAgICAgIGVsaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgICAgICMgYXNzdW1lIHN3aWcgYXZhaWxhYmxlIGluIHRoZSBQQVRILgotICAgICAgICAgICAgcmV0dXJuICJzd2lnLmV4ZSIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiSSBkb24ndCBrbm93IGhvdyB0byBmaW5kIChtdWNoIGxlc3MgcnVuKSBTV0lHICIKQEAgLTY3Miw5ICs2NjQsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCBnZXRfY29uZmlnX3ZhcgogICAgICAgICBleHRfcGF0aCA9IGV4dF9uYW1lLnNwbGl0KCcuJykKLSAgICAgICAgIyBPUy8yIGhhcyBhbiA4IGNoYXJhY3RlciBtb2R1bGUgKGV4dGVuc2lvbikgbGltaXQgOi0oCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgICAgICBleHRfcGF0aFtsZW4oZXh0X3BhdGgpIC0gMV0gPSBleHRfcGF0aFtsZW4oZXh0X3BhdGgpIC0gMV1bOjhdCiAgICAgICAgICMgZXh0ZW5zaW9ucyBpbiBkZWJ1Z19tb2RlIGFyZSBuYW1lZCAnbW9kdWxlX2QucHlkJyB1bmRlciB3aW5kb3dzCiAgICAgICAgIGV4dF9zdWZmaXggPSBnZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JyBhbmQgc2VsZi5kZWJ1ZzoKQEAgLTY5NSw3ICs2ODQsNyBAQAogICAgIGRlZiBnZXRfbGlicmFyaWVzKHNlbGYsIGV4dCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgdG8gbGluayBhZ2FpbnN0IHdoZW4gYnVpbGRpbmcgYQogICAgICAgICBzaGFyZWQgZXh0ZW5zaW9uLiAgT24gbW9zdCBwbGF0Zm9ybXMsIHRoaXMgaXMganVzdCAnZXh0LmxpYnJhcmllcyc7Ci0gICAgICAgIG9uIFdpbmRvd3MgYW5kIE9TLzIsIHdlIGFkZCB0aGUgUHl0aG9uIGxpYnJhcnkgKGVnLiBweXRob24yMC5kbGwpLgorICAgICAgICBvbiBXaW5kb3dzLCB3ZSBhZGQgdGhlIFB5dGhvbiBsaWJyYXJ5IChlZy4gcHl0aG9uMjAuZGxsKS4KICAgICAgICAgIiIiCiAgICAgICAgICMgVGhlIHB5dGhvbiBsaWJyYXJ5IGlzIGFsd2F5cyBuZWVkZWQgb24gV2luZG93cy4gIEZvciBNU1ZDLCB0aGlzCiAgICAgICAgICMgaXMgcmVkdW5kYW50LCBzaW5jZSB0aGUgbGlicmFyeSBpcyBtZW50aW9uZWQgaW4gYSBwcmFnbWEgaW4KQEAgLTcxNSwxOSArNzA0LDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZXh0LmxpYnJhcmllcyArIFtweXRob25saWJdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzCi0gICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJvczJlbXgiOgotICAgICAgICAgICAgIyBFTVgvR0NDIHJlcXVpcmVzIHRoZSBweXRob24gbGlicmFyeSBleHBsaWNpdGx5LCBhbmQgSQotICAgICAgICAgICAgIyBiZWxpZXZlIFZBQ1BQIGRvZXMgYXMgd2VsbCAodGhvdWdoIG5vdCBjb25maXJtZWQpIC0gQUlNIEFwcjAxCi0gICAgICAgICAgICB0ZW1wbGF0ZSA9ICJweXRob24lZCVkIgotICAgICAgICAgICAgIyBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGUgbWFpbiBETEwgYXJlbid0IHN1cHBvcnRlZCwgYXQgbGVhc3QKLSAgICAgICAgICAgICMgbm90IGF0IHRoaXMgdGltZSAtIEFJTSBBcHIwMQotICAgICAgICAgICAgI2lmIHNlbGYuZGVidWc6Ci0gICAgICAgICAgICAjICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgKyAnX2QnCi0gICAgICAgICAgICBweXRob25saWIgPSAodGVtcGxhdGUgJQotICAgICAgICAgICAgICAgICAgIChzeXMuaGV4dmVyc2lvbiA+PiAyNCwgKHN5cy5oZXh2ZXJzaW9uID4+IDE2KSAmIDB4ZmYpKQotICAgICAgICAgICAgIyBkb24ndCBleHRlbmQgZXh0LmxpYnJhcmllcywgaXQgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyCi0gICAgICAgICAgICAjIGV4dGVuc2lvbnMsIGl0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBsaXN0Ci0gICAgICAgICAgICByZXR1cm4gZXh0LmxpYnJhcmllcyArIFtweXRob25saWJdCiAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAiY3lnd2luIjoKICAgICAgICAgICAgIHRlbXBsYXRlID0gInB5dGhvbiVkLiVkIgogICAgICAgICAgICAgcHl0aG9ubGliID0gKHRlbXBsYXRlICUKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQppbmRleCAxMzcxYjNkLi42Nzc3MjNmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CkBAIC0zLDcgKzMsNyBAQAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdidWlsZF9weScgY29tbWFuZC4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgogCkBAIC0zMTIsMTEgKzMxMiwxMSBAQAogICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoZmlsZW5hbWUpCiAgICAgICAgICAgICBpZiBpbmNsdWRlX2J5dGVjb2RlOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZToKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGRlYnVnX292ZXJyaWRlPVRydWUpKQogICAgICAgICAgICAgICAgIGlmIHNlbGYub3B0aW1pemUgPiAwOgotICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKIAogICAgICAgICBvdXRwdXRzICs9IFsKICAgICAgICAgICAgIG9zLnBhdGguam9pbihidWlsZF9kaXIsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQppbmRleCA0YjViMjJlLi45MGE4MzgwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgIyBzY3JpcHQuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2NyaXB0LCAicmIiKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcnlfcnVuOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGYgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CmluZGV4IDNjNjc1ZDEuLjQ1NjUxMWMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5CkBAIC01OCwxMyArNTgsNiBAQAogICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCiAgICAgICAgIH0sCiAgICAgJ250JzogV0lORE9XU19TQ0hFTUUsCi0gICAgJ29zMic6IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi0gICAgICAgIH0sCiAgICAgfQogCiAjIHVzZXIgc2l0ZSBzY2hlbWVzCkBAIC04NiwxNCArNzksNiBAQAogICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAogICAgICAgICB9CiAKLSAgICBJTlNUQUxMX1NDSEVNRVNbJ29zMl9ob21lJ10gPSB7Ci0gICAgICAgICdwdXJlbGliJzogJyR1c2Vyc2l0ZScsCi0gICAgICAgICdwbGF0bGliJzogJyR1c2Vyc2l0ZScsCi0gICAgICAgICdoZWFkZXJzJzogJyR1c2VyYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0LyRkaXN0X25hbWUnLAotICAgICAgICAnc2NyaXB0cyc6ICckdXNlcmJhc2UvYmluJywKLSAgICAgICAgJ2RhdGEnICAgOiAnJHVzZXJiYXNlJywKLSAgICAgICAgfQotCiAjIFRoZSBrZXlzIHRvIGFuIGluc3RhbGxhdGlvbiBzY2hlbWU7IGlmIGFueSBuZXcgdHlwZXMgb2YgZmlsZXMgYXJlIHRvIGJlCiAjIGluc3RhbGxlZCwgYmUgc3VyZSB0byBhZGQgYW4gZW50cnkgdG8gZXZlcnkgaW5zdGFsbGF0aW9uIHNjaGVtZSBhYm92ZSwKICMgYW5kIHRvIFNDSEVNRV9LRVlTIGhlcmUuCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKaW5kZXggMTVjMDhmMS4uMjE1ODEzYiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQpAQCAtNCw3ICs0LDcgQEAKIChpbnN0YWxsIGFsbCBQeXRob24gbW9kdWxlcykuIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiAKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKQEAgLTE2NSwxMCArMTY1LDEwIEBACiAgICAgICAgICAgICBpZiBleHQgIT0gUFlUSE9OX1NPVVJDRV9FWFRFTlNJT046CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZToKLSAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlcy5hcHBlbmQoaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgcHlfZmlsZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCiAgICAgICAgICAgICBpZiBzZWxmLm9wdGltaXplID4gMDoKLSAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlcy5hcHBlbmQoaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgcHlfZmlsZSwgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQogCiAgICAgICAgIHJldHVybiBieXRlY29kZV9maWxlcwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKaW5kZXggOGIzNjg1MS4uODg5OTBiMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgIGh0dHAucHV0aGVhZGVyKCdBdXRob3JpemF0aW9uJywgYXV0aCkKICAgICAgICAgICAgIGh0dHAuZW5kaGVhZGVycygpCiAgICAgICAgICAgICBodHRwLnNlbmQoYm9keSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShzdHIoZSksIGxvZy5FUlJPUikKICAgICAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5CmluZGV4IDFmZDUzMzQuLjc0MzlhODMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5CkBAIC0yMSw3ICsyMSw3IEBACiBjbGFzcyBQeVBJUkNDb21tYW5kKENvbW1hbmQpOgogICAgICIiIkJhc2UgY29tbWFuZCB0aGF0IGtub3dzIGhvdyB0byBoYW5kbGUgdGhlIC5weXBpcmMgZmlsZQogICAgICIiIgotICAgIERFRkFVTFRfUkVQT1NJVE9SWSA9ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknCisgICAgREVGQVVMVF9SRVBPU0lUT1JZID0gJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGknCiAgICAgREVGQVVMVF9SRUFMTSA9ICdweXBpJwogICAgIHJlcG9zaXRvcnkgPSBOb25lCiAgICAgcmVhbG0gPSBOb25lCkBAIC04Myw2ICs4MywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IGNvbmZpZy5nZXQoc2VydmVyLCBrZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IGRlZmF1bHQKKworICAgICAgICAgICAgICAgICAgICAjIHdvcmsgYXJvdW5kIHBlb3BsZSBoYXZpbmcgInJlcG9zaXRvcnkiIGZvciB0aGUgInB5cGkiCisgICAgICAgICAgICAgICAgICAgICMgc2VjdGlvbiBvZiB0aGVpciBjb25maWcgc2V0IHRvIHRoZSBIVFRQIChyYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICAjIEhUVFBTKSBVUkwKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZlciA9PSAncHlwaScgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGluIChzZWxmLkRFRkFVTFRfUkVQT1NJVE9SWSwgJ3B5cGknKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50WydyZXBvc2l0b3J5J10gPSBzZWxmLkRFRkFVTFRfUkVQT1NJVE9SWQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQKKwogICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFsnc2VydmVyJ10gPT0gcmVwb3NpdG9yeSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFsncmVwb3NpdG9yeSddID09IHJlcG9zaXRvcnkpOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29yZS5weSBiL0xpYi9kaXN0dXRpbHMvY29yZS5weQppbmRleCAyNjAzMzJhLi45MWU1MTMyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvcmUucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb3JlLnB5CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgICAgIGRpc3QucnVuX2NvbW1hbmRzKCkKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiaW50ZXJydXB0ZWQiKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSBhcyBleGM6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKICAgICAgICAgICAgIGVycm9yID0gZ3Jva19lbnZpcm9ubWVudF9lcnJvcihleGMpCiAKICAgICAgICAgICAgIGlmIERFQlVHOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQppbmRleCBlMDA3NGExLi5kMjhiMWIzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weQpAQCAtNTQsNyArNTQsOCBAQAogZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLCBnZW5fbGliX29wdGlvbnMKIGZyb20gZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgaW1wb3J0IFVuaXhDQ29tcGlsZXIKIGZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgd3JpdGVfZmlsZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IsIENvbXBpbGVFcnJvciwgVW5rbm93bkZpbGVFcnJvcgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzRXhlY0Vycm9yLCBDQ29tcGlsZXJFcnJvciwKKyAgICAgICAgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yKQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCkBAIC0yOTQsMTggKzI5NSwxNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZW50cnlfcG9pbnQgPSAnJwogCi0gICAgICAgIGlmIHNlbGYuZ2NjX3ZlcnNpb24gPCAnNCcgb3IgaXNfY3lnd2luZ2NjKCk6Ci0gICAgICAgICAgICBub19jeWd3aW4gPSAnIC1tbm8tY3lnd2luJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm9fY3lnd2luID0gJycKKyAgICAgICAgaWYgaXNfY3lnd2luZ2NjKCk6CisgICAgICAgICAgICByYWlzZSBDQ29tcGlsZXJFcnJvcigKKyAgICAgICAgICAgICAgICAnQ3lnd2luIGdjYyBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tY29tcGlsZXI9bWluZ3czMicpCiAKLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyVzIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyVzIC1tZGxsIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKyslcyAtTyAtV2FsbCcgJSBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYyVzJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX3NvPSclcyVzICVzICVzJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5saW5rZXJfZGxsLCBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfb3B0aW9uLCBlbnRyeV9wb2ludCkpCisgICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGVzKGNvbXBpbGVyPSdnY2MgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9zbz0nZ2NjIC1tZGxsIC1PIC1XYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKysgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfZXhlPSdnY2MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289JyVzICVzICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYubGlua2VyX2RsbCwgc2hhcmVkX29wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9wb2ludCkpCiAgICAgICAgICMgTWF5YmUgd2Ugc2hvdWxkIGFsc28gYXBwZW5kIC1tdGhyZWFkcywgYnV0IHRoZW4gdGhlIGZpbmlzaGVkCiAgICAgICAgICMgZGxscyBuZWVkIGFub3RoZXIgZGxsIChtaW5nd20xMC5kbGwgc2VlIE1pbmd3MzIgZG9jcykKICAgICAgICAgIyAoLW10aHJlYWRzOiBTdXBwb3J0IHRocmVhZC1zYWZlIGV4Y2VwdGlvbiBoYW5kbGluZyBvbiBgTWluZ3czMicpCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gQ09ORklHX0hfTk9UT0ssICInJXMnIGRvZXMgbm90IG1lbnRpb24gJ19fR05VQ19fJyIgJSBmbgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29uZmlnX2guY2xvc2UoKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgIHJldHVybiAoQ09ORklHX0hfVU5DRVJUQUlOLAogICAgICAgICAgICAgICAgICJjb3VsZG4ndCByZWFkICclcyc6ICVzIiAlIChmbiwgZXhjLnN0cmVycm9yKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKaW5kZXggMjgyNmZmOC4uMmIzNWFhMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICAgICAgImNhbm5vdCBjb3B5IHRyZWUgJyVzJzogbm90IGEgZGlyZWN0b3J5IiAlIHNyYykKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzcmMpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgKGVycm5vLCBlcnJzdHIpID0gZQogICAgICAgICBpZiBkcnlfcnVuOgogICAgICAgICAgICAgbmFtZXMgPSBbXQpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgICAgICAgICBhYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKGNtZFsxXSkKICAgICAgICAgICAgIGlmIGFic3BhdGggaW4gX3BhdGhfY3JlYXRlZDoKICAgICAgICAgICAgICAgICBkZWwgX3BhdGhfY3JlYXRlZFthYnNwYXRoXQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgbG9nLndhcm4oZ3Jva19lbnZpcm9ubWVudF9lcnJvcigKICAgICAgICAgICAgICAgICAgICAgZXhjLCAiZXJyb3IgcmVtb3ZpbmcgJXM6ICIgJSBkaXJlY3RvcnkpKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjc1ZjhkLi4wMDAwMDAwCi0tLSBhL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLSIiImRpc3R1dGlscy5lbXhjY29tcGlsZXIKLQotUHJvdmlkZXMgdGhlIEVNWENDb21waWxlciBjbGFzcywgYSBzdWJjbGFzcyBvZiBVbml4Q0NvbXBpbGVyIHRoYXQKLWhhbmRsZXMgdGhlIEVNWCBwb3J0IG9mIHRoZSBHTlUgQyBjb21waWxlciB0byBPUy8yLgotIiIiCi0KLSMgaXNzdWVzOgotIwotIyAqIE9TLzIgaW5zaXN0cyB0aGF0IERMTHMgY2FuIGhhdmUgbmFtZXMgbm8gbG9uZ2VyIHRoYW4gOCBjaGFyYWN0ZXJzCi0jICAgV2UgcHV0IGV4cG9ydF9zeW1ib2xzIGluIGEgZGVmLWZpbGUsIGFzIHRob3VnaCB0aGUgRExMIGNhbiBoYXZlCi0jICAgYW4gYXJiaXRyYXJ5IGxlbmd0aCBuYW1lLCBidXQgdHJ1bmNhdGUgdGhlIG91dHB1dCBmaWxlbmFtZS4KLSMKLSMgKiBvbmx5IHVzZSBPTUYgb2JqZWN0cyBhbmQgdXNlIExJTkszODYgYXMgdGhlIGxpbmtlciAoLVpvbWYpCi0jCi0jICogYWx3YXlzIGJ1aWxkIGZvciBtdWx0aXRocmVhZGluZyAoLVptdCkgYXMgdGhlIGFjY29tcGFueWluZyBPUy8yIHBvcnQKLSMgICBvZiBQeXRob24gaXMgb25seSBkaXN0cmlidXRlZCB3aXRoIHRocmVhZHMgZW5hYmxlZC4KLSMKLSMgdGVzdGVkIGNvbmZpZ3VyYXRpb25zOgotIwotIyAqIEVNWCBnY2MgMi44MS9FTVggMC45ZCBmaXgwMwotCi1pbXBvcnQgb3Msc3lzLGNvcHkKLWZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucywgZ2VuX2xpYl9vcHRpb25zCi1mcm9tIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyIGltcG9ydCBVbml4Q0NvbXBpbGVyCi1mcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IHdyaXRlX2ZpbGUKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yLCBDb21waWxlRXJyb3IsIFVua25vd25GaWxlRXJyb3IKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLQotY2xhc3MgRU1YQ0NvbXBpbGVyIChVbml4Q0NvbXBpbGVyKToKLQotICAgIGNvbXBpbGVyX3R5cGUgPSAnZW14JwotICAgIG9ial9leHRlbnNpb24gPSAiLm9iaiIKLSAgICBzdGF0aWNfbGliX2V4dGVuc2lvbiA9ICIubGliIgotICAgIHNoYXJlZF9saWJfZXh0ZW5zaW9uID0gIi5kbGwiCi0gICAgc3RhdGljX2xpYl9mb3JtYXQgPSAiJXMlcyIKLSAgICBzaGFyZWRfbGliX2Zvcm1hdCA9ICIlcyVzIgotICAgIHJlc19leHRlbnNpb24gPSAiLnJlcyIgICAgICAjIGNvbXBpbGVkIHJlc291cmNlIGZpbGUKLSAgICBleGVfZXh0ZW5zaW9uID0gIi5leGUiCi0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsCi0gICAgICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsCi0gICAgICAgICAgICAgICAgICBmb3JjZT0wKToKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLl9faW5pdF9fIChzZWxmLCB2ZXJib3NlLCBkcnlfcnVuLCBmb3JjZSkKLQotICAgICAgICAoc3RhdHVzLCBkZXRhaWxzKSA9IGNoZWNrX2NvbmZpZ19oKCkKLSAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiUHl0aG9uJ3MgR0NDIHN0YXR1czogJXMgKGRldGFpbHM6ICVzKSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIGRldGFpbHMpKQotICAgICAgICBpZiBzdGF0dXMgaXMgbm90IENPTkZJR19IX09LOgotICAgICAgICAgICAgc2VsZi53YXJuKAotICAgICAgICAgICAgICAgICJQeXRob24ncyBweWNvbmZpZy5oIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHlvdXIgY29tcGlsZXIuICAiICsKLSAgICAgICAgICAgICAgICAoIlJlYXNvbjogJXMuIiAlIGRldGFpbHMpICsKLSAgICAgICAgICAgICAgICAiQ29tcGlsaW5nIG1heSBmYWlsIGJlY2F1c2Ugb2YgdW5kZWZpbmVkIHByZXByb2Nlc3NvciBtYWNyb3MuIikKLQotICAgICAgICAoc2VsZi5nY2NfdmVyc2lvbiwgc2VsZi5sZF92ZXJzaW9uKSA9IFwKLSAgICAgICAgICAgIGdldF92ZXJzaW9ucygpCi0gICAgICAgIHNlbGYuZGVidWdfcHJpbnQoc2VsZi5jb21waWxlcl90eXBlICsgIjogZ2NjICVzLCBsZCAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZ2NjX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGRfdmVyc2lvbikgKQotCi0gICAgICAgICMgSGFyZC1jb2RlIEdDQyBiZWNhdXNlIHRoYXQncyB3aGF0IHRoaXMgaXMgYWxsIGFib3V0LgotICAgICAgICAjIFhYWCBvcHRpbWl6YXRpb24sIHdhcm5pbmdzIGV0Yy4gc2hvdWxkIGJlIGN1c3RvbWl6YWJsZS4KLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX2V4ZT0nZ2NjIC1ab21mIC1abXQgLVpjcnRkbGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289J2djYyAtWm9tZiAtWm10IC1aY3J0ZGxsIC1aZGxsJykKLQotICAgICAgICAjIHdhbnQgdGhlIGdjYyBsaWJyYXJ5IHN0YXRpY2FsbHkgbGlua2VkIChzbyB0aGF0IHdlIGRvbid0IGhhdmUKLSAgICAgICAgIyB0byBkaXN0cmlidXRlIGEgdmVyc2lvbiBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyIHdlIGhhdmUpCi0gICAgICAgIHNlbGYuZGxsX2xpYnJhcmllcz1bImdjYyJdCi0KLSAgICAjIF9faW5pdF9fICgpCi0KLSAgICBkZWYgX2NvbXBpbGUoc2VsZiwgb2JqLCBzcmMsIGV4dCwgY2NfYXJncywgZXh0cmFfcG9zdGFyZ3MsIHBwX29wdHMpOgotICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAjIGdjYyByZXF1aXJlcyAnLnJjJyBjb21waWxlZCB0byBiaW5hcnkgKCcucmVzJykgZmlsZXMgISEhCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbInJjIiwgIi1yIiwgc3JjXSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcihtc2cpCi0gICAgICAgIGVsc2U6ICMgZm9yIG90aGVyIGZpbGVzIHVzZSB0aGUgQy1jb21waWxlcgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oc2VsZi5jb21waWxlcl9zbyArIGNjX2FyZ3MgKyBbc3JjLCAnLW8nLCBvYmpdICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKLQotICAgIGRlZiBsaW5rIChzZWxmLAotICAgICAgICAgICAgICB0YXJnZXRfZGVzYywKLSAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLAotICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwKLSAgICAgICAgICAgICAgZGVidWc9MCwKLSAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAotICAgICAgICAgICAgICBidWlsZF90ZW1wPU5vbmUsCi0gICAgICAgICAgICAgIHRhcmdldF9sYW5nPU5vbmUpOgotCi0gICAgICAgICMgdXNlIHNlcGFyYXRlIGNvcGllcywgc28gd2UgY2FuIG1vZGlmeSB0aGUgbGlzdHMKLSAgICAgICAgZXh0cmFfcHJlYXJncyA9IGNvcHkuY29weShleHRyYV9wcmVhcmdzIG9yIFtdKQotICAgICAgICBsaWJyYXJpZXMgPSBjb3B5LmNvcHkobGlicmFyaWVzIG9yIFtdKQotICAgICAgICBvYmplY3RzID0gY29weS5jb3B5KG9iamVjdHMgb3IgW10pCi0KLSAgICAgICAgIyBBZGRpdGlvbmFsIGxpYnJhcmllcwotICAgICAgICBsaWJyYXJpZXMuZXh0ZW5kKHNlbGYuZGxsX2xpYnJhcmllcykKLQotICAgICAgICAjIGhhbmRsZSBleHBvcnQgc3ltYm9scyBieSBjcmVhdGluZyBhIGRlZi1maWxlCi0gICAgICAgICMgd2l0aCBleGVjdXRhYmxlcyB0aGlzIG9ubHkgd29ya3Mgd2l0aCBnY2MvbGQgYXMgbGlua2VyCi0gICAgICAgIGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAgICAgKHRhcmdldF9kZXNjICE9IHNlbGYuRVhFQ1VUQUJMRSkpOgotICAgICAgICAgICAgIyAoVGhlIGxpbmtlciBkb2Vzbid0IGRvIGFueXRoaW5nIGlmIG91dHB1dCBpcyB1cC10by1kYXRlLgotICAgICAgICAgICAgIyBTbyBpdCB3b3VsZCBwcm9iYWJseSBiZXR0ZXIgdG8gY2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdGhpcywKLSAgICAgICAgICAgICMgYnV0IGZvciB0aGlzIHdlIGhhZCB0byBpbnNlcnQgc29tZSB1bmNoYW5nZWQgcGFydHMgb2YKLSAgICAgICAgICAgICMgVW5peENDb21waWxlciwgYW5kIHRoaXMgaXMgbm90IHdoYXQgd2Ugd2FudC4pCi0KLSAgICAgICAgICAgICMgd2Ugd2FudCB0byBwdXQgc29tZSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCi0gICAgICAgICAgICAjIG9iamVjdCBmaWxlcyBhcmUsIGJ1aWxkX3RlbXAgZG9lc24ndCBoZWxwIG11Y2gKLSAgICAgICAgICAgICMgd2hlcmUgYXJlIHRoZSBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIHRlbXBfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9iamVjdHNbMF0pCi0gICAgICAgICAgICAjIG5hbWUgb2YgZGxsIHRvIGdpdmUgdGhlIGhlbHBlciBmaWxlcyB0aGUgc2FtZSBiYXNlIG5hbWUKLSAgICAgICAgICAgIChkbGxfbmFtZSwgZGxsX2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KAotICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUob3V0cHV0X2ZpbGVuYW1lKSkKLQotICAgICAgICAgICAgIyBnZW5lcmF0ZSB0aGUgZmlsZW5hbWVzIGZvciB0aGVzZSBmaWxlcwotICAgICAgICAgICAgZGVmX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcF9kaXIsIGRsbF9uYW1lICsgIi5kZWYiKQotCi0gICAgICAgICAgICAjIEdlbmVyYXRlIC5kZWYgZmlsZQotICAgICAgICAgICAgY29udGVudHMgPSBbCi0gICAgICAgICAgICAgICAgIkxJQlJBUlkgJXMgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgJSBcCi0gICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG91dHB1dF9maWxlbmFtZSkpWzBdLAotICAgICAgICAgICAgICAgICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIsCi0gICAgICAgICAgICAgICAgIkVYUE9SVFMiXQotICAgICAgICAgICAgZm9yIHN5bSBpbiBleHBvcnRfc3ltYm9sczoKLSAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoJyAgIiVzIicgJSBzeW0pCi0gICAgICAgICAgICBzZWxmLmV4ZWN1dGUod3JpdGVfZmlsZSwgKGRlZl9maWxlLCBjb250ZW50cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRpbmcgJXMiICUgZGVmX2ZpbGUpCi0KLSAgICAgICAgICAgICMgbmV4dCBhZGQgb3B0aW9ucyBmb3IgZGVmLWZpbGUgYW5kIHRvIGNyZWF0aW5nIGltcG9ydCBsaWJyYXJpZXMKLSAgICAgICAgICAgICMgZm9yIGdjYy9sZCB0aGUgZGVmLWZpbGUgaXMgc3BlY2lmaWVkIGFzIGFueSBvdGhlciBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKGRlZl9maWxlKQotCi0gICAgICAgICNlbmQ6IGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAjICAgICAgICAodGFyZ2V0X2Rlc2MgIT0gc2VsZi5FWEVDVVRBQkxFIG9yIHNlbGYubGlua2VyX2RsbCA9PSAiZ2NjIikpOgotCi0gICAgICAgICMgd2hvIHdhbnRzIHN5bWJvbHMgYW5kIGEgbWFueSB0aW1lcyBsYXJnZXIgb3V0cHV0IGZpbGUKLSAgICAgICAgIyBzaG91bGQgZXhwbGljaXRseSBzd2l0Y2ggdGhlIGRlYnVnIG1vZGUgb24KLSAgICAgICAgIyBvdGhlcndpc2Ugd2UgbGV0IGRsbHdyYXAvbGQgc3RyaXAgdGhlIG91dHB1dCBmaWxlCi0gICAgICAgICMgKE9uIG15IG1hY2hpbmU6IDEwS0IgPCBzdHJpcHBlZF9maWxlIDwgPz8xMDBLQgotICAgICAgICAjICAgdW5zdHJpcHBlZF9maWxlID0gc3RyaXBwZWRfZmlsZSArIFhYWCBLQgotICAgICAgICAjICAoIFhYWD0yNTQgZm9yIGEgdHlwaWNhbCBweXRob24gZXh0ZW5zaW9uKSkKLSAgICAgICAgaWYgbm90IGRlYnVnOgotICAgICAgICAgICAgZXh0cmFfcHJlYXJncy5hcHBlbmQoIi1zIikKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLmxpbmsoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsICMgZXhwb3J0X3N5bWJvbHMsIHdlIGRvIHRoaXMgaW4gb3VyIGRlZi1maWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3RlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbGFuZykKLQotICAgICMgbGluayAoKQotCi0gICAgIyAtLSBNaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICMgb3ZlcnJpZGUgdGhlIG9iamVjdF9maWxlbmFtZXMgbWV0aG9kIGZyb20gQ0NvbXBpbGVyIHRvCi0gICAgIyBzdXBwb3J0IHJjIGFuZCByZXMtZmlsZXMKLSAgICBkZWYgb2JqZWN0X2ZpbGVuYW1lcyAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2ZpbGVuYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfZGlyPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9JycpOgotICAgICAgICBpZiBvdXRwdXRfZGlyIGlzIE5vbmU6IG91dHB1dF9kaXIgPSAnJwotICAgICAgICBvYmpfbmFtZXMgPSBbXQotICAgICAgICBmb3Igc3JjX25hbWUgaW4gc291cmNlX2ZpbGVuYW1lczoKLSAgICAgICAgICAgICMgdXNlIG5vcm1jYXNlIHRvIG1ha2Ugc3VyZSAnLnJjJyBpcyByZWFsbHkgJy5yYycgYW5kIG5vdCAnLlJDJwotICAgICAgICAgICAgKGJhc2UsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0IChvcy5wYXRoLm5vcm1jYXNlKHNyY19uYW1lKSkKLSAgICAgICAgICAgIGlmIGV4dCBub3QgaW4gKHNlbGYuc3JjX2V4dGVuc2lvbnMgKyBbJy5yYyddKToKLSAgICAgICAgICAgICAgICByYWlzZSBVbmtub3duRmlsZUVycm9yKCJ1bmtub3duIGZpbGUgdHlwZSAnJXMnIChmcm9tICclcycpIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAoZXh0LCBzcmNfbmFtZSkpCi0gICAgICAgICAgICBpZiBzdHJpcF9kaXI6Ci0gICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUgKGJhc2UpCi0gICAgICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAgICAgIyB0aGVzZSBuZWVkIHRvIGJlIGNvbXBpbGVkIHRvIG9iamVjdCBmaWxlcwotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYucmVzX2V4dGVuc2lvbikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYub2JqX2V4dGVuc2lvbikpCi0gICAgICAgIHJldHVybiBvYmpfbmFtZXMKLQotICAgICMgb2JqZWN0X2ZpbGVuYW1lcyAoKQotCi0gICAgIyBvdmVycmlkZSB0aGUgZmluZF9saWJyYXJ5X2ZpbGUgbWV0aG9kIGZyb20gVW5peENDb21waWxlcgotICAgICMgdG8gZGVhbCB3aXRoIGZpbGUgbmFtaW5nL3NlYXJjaGluZyBkaWZmZXJlbmNlcwotICAgIGRlZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCBkaXJzLCBsaWIsIGRlYnVnPTApOgotICAgICAgICBzaG9ydGxpYiA9ICclcy5saWInICUgbGliCi0gICAgICAgIGxvbmdsaWIgPSAnbGliJXMubGliJyAlIGxpYiAgICAjIHRoaXMgZm9ybSB2ZXJ5IHJhcmUKLQotICAgICAgICAjIGdldCBFTVgncyBkZWZhdWx0IGxpYnJhcnkgZGlyZWN0b3J5IHNlYXJjaCBwYXRoCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVteF9kaXJzID0gb3MuZW52aXJvblsnTElCUkFSWV9QQVRIJ10uc3BsaXQoJzsnKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBlbXhfZGlycyA9IFtdCi0KLSAgICAgICAgZm9yIGRpciBpbiBkaXJzICsgZW14X2RpcnM6Ci0gICAgICAgICAgICBzaG9ydGxpYnAgPSBvcy5wYXRoLmpvaW4oZGlyLCBzaG9ydGxpYikKLSAgICAgICAgICAgIGxvbmdsaWJwID0gb3MucGF0aC5qb2luKGRpciwgbG9uZ2xpYikKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNob3J0bGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3J0bGlicAotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhsb25nbGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvbmdsaWJwCi0KLSAgICAgICAgIyBPb3BzLCBkaWRuJ3QgZmluZCBpdCBpbiAqYW55KiBvZiAnZGlycycKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotIyBjbGFzcyBFTVhDQ29tcGlsZXIKLQotCi0jIEJlY2F1c2UgdGhlc2UgY29tcGlsZXJzIGFyZW4ndCBjb25maWd1cmVkIGluIFB5dGhvbidzIHB5Y29uZmlnLmggZmlsZSBieQotIyBkZWZhdWx0LCB3ZSBzaG91bGQgYXQgbGVhc3Qgd2FybiB0aGUgdXNlciBpZiBoZSBpcyB1c2luZyBhIHVubW9kaWZpZWQKLSMgdmVyc2lvbi4KLQotQ09ORklHX0hfT0sgPSAib2siCi1DT05GSUdfSF9OT1RPSyA9ICJub3Qgb2siCi1DT05GSUdfSF9VTkNFUlRBSU4gPSAidW5jZXJ0YWluIgotCi1kZWYgY2hlY2tfY29uZmlnX2goKToKLQotICAgICIiIkNoZWNrIGlmIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gKHNwZWNpZmljYWxseSwgcHljb25maWcuaCkKLSAgICBhcHBlYXJzIGFtZW5hYmxlIHRvIGJ1aWxkaW5nIGV4dGVuc2lvbnMgd2l0aCBHQ0MuICBSZXR1cm5zIGEgdHVwbGUKLSAgICAoc3RhdHVzLCBkZXRhaWxzKSwgd2hlcmUgJ3N0YXR1cycgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgotICAgICAgQ09ORklHX0hfT0sKLSAgICAgICAgYWxsIGlzIHdlbGwsIGdvIGFoZWFkIGFuZCBjb21waWxlCi0gICAgICBDT05GSUdfSF9OT1RPSwotICAgICAgICBkb2Vzbid0IGxvb2sgZ29vZAotICAgICAgQ09ORklHX0hfVU5DRVJUQUlOCi0gICAgICAgIG5vdCBzdXJlIC0tIHVuYWJsZSB0byByZWFkIHB5Y29uZmlnLmgKLSAgICAnZGV0YWlscycgaXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZXhwbGFpbmluZyB0aGUgc2l0dWF0aW9uLgotCi0gICAgTm90ZSB0aGVyZSBhcmUgdHdvIHdheXMgdG8gY29uY2x1ZGUgIk9LIjogZWl0aGVyICdzeXMudmVyc2lvbicgY29udGFpbnMKLSAgICB0aGUgc3RyaW5nICJHQ0MiIChpbXBseWluZyB0aGF0IHRoaXMgUHl0aG9uIHdhcyBidWlsdCB3aXRoIEdDQyksIG9yIHRoZQotICAgIGluc3RhbGxlZCAicHljb25maWcuaCIgY29udGFpbnMgdGhlIHN0cmluZyAiX19HTlVDX18iLgotICAgICIiIgotCi0gICAgIyBYWFggc2luY2UgdGhpcyBmdW5jdGlvbiBhbHNvIGNoZWNrcyBzeXMudmVyc2lvbiwgaXQncyBub3Qgc3RyaWN0bHkgYQotICAgICMgInB5Y29uZmlnLmgiIGNoZWNrIC0tIHNob3VsZCBwcm9iYWJseSBiZSByZW5hbWVkLi4uCi0KLSAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi0gICAgIyBpZiBzeXMudmVyc2lvbiBjb250YWlucyBHQ0MgdGhlbiBweXRob24gd2FzIGNvbXBpbGVkIHdpdGgKLSAgICAjIEdDQywgYW5kIHRoZSBweWNvbmZpZy5oIGZpbGUgc2hvdWxkIGJlIE9LCi0gICAgaWYgc3lzLnZlcnNpb24uZmluZCgiR0NDIikgPj0gMDoKLSAgICAgICAgcmV0dXJuIChDT05GSUdfSF9PSywgInN5cy52ZXJzaW9uIG1lbnRpb25zICdHQ0MnIikKLQotICAgIGZuID0gc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZSgpCi0gICAgdHJ5OgotICAgICAgICAjIEl0IHdvdWxkIHByb2JhYmx5IGJldHRlciB0byByZWFkIHNpbmdsZSBsaW5lcyB0byBzZWFyY2guCi0gICAgICAgICMgQnV0IHdlIGRvIHRoaXMgb25seSBvbmNlLCBhbmQgaXQgaXMgZmFzdCBlbm91Z2gKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMgPSBmLnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICBleGNlcHQgSU9FcnJvciBhcyBleGM6Ci0gICAgICAgICMgaWYgd2UgY2FuJ3QgcmVhZCB0aGlzIGZpbGUsIHdlIGNhbm5vdCBzYXkgaXQgaXMgd3JvbmcKLSAgICAgICAgIyB0aGUgY29tcGlsZXIgd2lsbCBjb21wbGFpbiBsYXRlciBhYm91dCB0aGlzIGZpbGUgYXMgbWlzc2luZwotICAgICAgICByZXR1cm4gKENPTkZJR19IX1VOQ0VSVEFJTiwKLSAgICAgICAgICAgICAgICAiY291bGRuJ3QgcmVhZCAnJXMnOiAlcyIgJSAoZm4sIGV4Yy5zdHJlcnJvcikpCi0KLSAgICBlbHNlOgotICAgICAgICAjICJweWNvbmZpZy5oIiBjb250YWlucyBhbiAiI2lmZGVmIF9fR05VQ19fIiBvciBzb21ldGhpbmcgc2ltaWxhcgotICAgICAgICBpZiBzLmZpbmQoIl9fR05VQ19fIikgPj0gMDoKLSAgICAgICAgICAgIHJldHVybiAoQ09ORklHX0hfT0ssICInJXMnIG1lbnRpb25zICdfX0dOVUNfXyciICUgZm4pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gKENPTkZJR19IX05PVE9LLCAiJyVzJyBkb2VzIG5vdCBtZW50aW9uICdfX0dOVUNfXyciICUgZm4pCi0KLQotZGVmIGdldF92ZXJzaW9ucygpOgotICAgICIiIiBUcnkgdG8gZmluZCBvdXQgdGhlIHZlcnNpb25zIG9mIGdjYyBhbmQgbGQuCi0gICAgICAgIElmIG5vdCBwb3NzaWJsZSBpdCByZXR1cm5zIE5vbmUgZm9yIGl0LgotICAgICIiIgotICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IFN0cmljdFZlcnNpb24KLSAgICBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCi0gICAgaW1wb3J0IHJlCi0KLSAgICBnY2NfZXhlID0gZmluZF9leGVjdXRhYmxlKCdnY2MnKQotICAgIGlmIGdjY19leGU6Ci0gICAgICAgIG91dCA9IG9zLnBvcGVuKGdjY19leGUgKyAnIC1kdW1wdmVyc2lvbicsJ3InKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRfc3RyaW5nID0gb3V0LnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3V0LmNsb3NlKCkKLSAgICAgICAgcmVzdWx0ID0gcmUuc2VhcmNoKCcoXGQrXC5cZCtcLlxkKyknLCBvdXRfc3RyaW5nLCByZS5BU0NJSSkKLSAgICAgICAgaWYgcmVzdWx0OgotICAgICAgICAgICAgZ2NjX3ZlcnNpb24gPSBTdHJpY3RWZXJzaW9uKHJlc3VsdC5ncm91cCgxKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgIGVsc2U6Ci0gICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgICMgRU1YIGxkIGhhcyBubyB3YXkgb2YgcmVwb3J0aW5nIHZlcnNpb24gbnVtYmVyLCBhbmQgd2UgdXNlIEdDQwotICAgICMgYW55d2F5IC0gc28gd2UgY2FuIGxpbmsgT01GIERMTHMKLSAgICBsZF92ZXJzaW9uID0gTm9uZQotICAgIHJldHVybiAoZ2NjX3ZlcnNpb24sIGxkX3ZlcnNpb24pCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weSBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CmluZGV4IGViMTNjOTguLjhiOTMwNTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CkBAIC0zNSw4ICszNSw4IEBACiAKIGNsYXNzIERpc3R1dGlsc0ZpbGVFcnJvciAoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkFueSBwcm9ibGVtcyBpbiB0aGUgZmlsZXN5c3RlbTogZXhwZWN0ZWQgZmlsZSBub3QgZm91bmQsIGV0Yy4KLSAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIElPRXJyb3Igb3IKLSAgICBPU0Vycm9yIGNvdWxkIGJlIHJhaXNlZC4iIiIKKyAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIE9TRXJyb3IKKyAgICBjb3VsZCBiZSByYWlzZWQuIiIiCiAgICAgcGFzcwogCiBjbGFzcyBEaXN0dXRpbHNPcHRpb25FcnJvciAoRGlzdHV0aWxzRXJyb3IpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQppbmRleCA5YmRkMTRlLi5mNmVkMjkwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQpAQCAtMjcsMjYgKzI3LDI2IEBACiAgICAgdHJ5OgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmc3JjID0gb3BlbihzcmMsICdyYicpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKCJjb3VsZCBub3Qgb3BlbiAnJXMnOiAlcyIgJSAoc3JjLCBlLnN0cmVycm9yKSkKIAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhkc3QpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGVsZXRlICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZkc3QgPSBvcGVuKGRzdCwgJ3diJykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlLnN0cmVycm9yKSkKIAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJ1ZiA9IGZzcmMucmVhZChidWZmZXJfc2l6ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZWFkIGZyb20gJyVzJzogJXMiICUgKHNyYywgZS5zdHJlcnJvcikpCiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZkc3Qud3JpdGUoYnVmKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHdyaXRlIHRvICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogICAgIGZpbmFsbHk6CkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICBjb3B5X2l0ID0gRmFsc2UKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRzdCkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAobnVtLCBtc2cpID0gZQogICAgICAgICBpZiBudW0gPT0gZXJybm8uRVhERVY6CiAgICAgICAgICAgICBjb3B5X2l0ID0gVHJ1ZQpAQCAtMjA1LDExICsyMDUsMTEgQEAKICAgICAgICAgY29weV9maWxlKHNyYywgZHN0LCB2ZXJib3NlPXZlcmJvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgKG51bSwgbXNnKSA9IGUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZHN0KQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgImNvdWxkbid0IG1vdmUgJyVzJyB0byAnJXMnIGJ5IGNvcHkvZGVsZXRlOiAiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKaW5kZXggYjNmNmNlMS4uOTY4OGYyMCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQpAQCAtNzI5LDcgKzcyOSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hbmlmZXN0X2ZpbGUKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgbWFuaWZlc3RfZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICMgLS0gTWlzY2VsbGFuZW91cyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3NwYXduLnB5IGIvTGliL2Rpc3R1dGlscy9zcGF3bi5weQppbmRleCBmNThjNTVmLi5iMWM1YTQ0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKQEAgLTMyLDggKzMyLDYgQEAKICAgICAgICAgX3NwYXduX3Bvc2l4KGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49ZHJ5X3J1bikKICAgICBlbGlmIG9zLm5hbWUgPT0gJ250JzoKICAgICAgICAgX3NwYXduX250KGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49ZHJ5X3J1bikKLSAgICBlbGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgIF9zcGF3bl9vczIoY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1kcnlfcnVuKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAgICJkb24ndCBrbm93IGhvdyB0byBzcGF3biBwcm9ncmFtcyBvbiBwbGF0Zm9ybSAnJXMnIiAlIG9zLm5hbWUpCkBAIC03NCwyNiArNzIsNiBAQAogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAogICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kWzBdLCByYykpCiAKLWRlZiBfc3Bhd25fb3MyKGNtZCwgc2VhcmNoX3BhdGg9MSwgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgotICAgIGV4ZWN1dGFibGUgPSBjbWRbMF0KLSAgICBpZiBzZWFyY2hfcGF0aDoKLSAgICAgICAgIyBlaXRoZXIgd2UgZmluZCBvbmUgb3IgaXQgc3RheXMgdGhlIHNhbWUKLSAgICAgICAgZXhlY3V0YWJsZSA9IGZpbmRfZXhlY3V0YWJsZShleGVjdXRhYmxlKSBvciBleGVjdXRhYmxlCi0gICAgbG9nLmluZm8oJyAnLmpvaW4oW2V4ZWN1dGFibGVdICsgY21kWzE6XSkpCi0gICAgaWYgbm90IGRyeV9ydW46Ci0gICAgICAgICMgc3Bhd252IGZvciBPUy8yIEVNWCByZXF1aXJlcyBhIGZ1bGwgcGF0aCB0byB0aGUgLmV4ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYyA9IG9zLnNwYXdudihvcy5QX1dBSVQsIGV4ZWN1dGFibGUsIGNtZCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgIyB0aGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuIHRoZSBjb21tYW5kIGlzbid0IGZvdW5kCi0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiY29tbWFuZCAnJXMnIGZhaWxlZDogJXMiICUgKGNtZFswXSwgZXhjLmFyZ3NbLTFdKSkKLSAgICAgICAgaWYgcmMgIT0gMDoKLSAgICAgICAgICAgICMgYW5kIHRoaXMgcmVmbGVjdHMgdGhlIGNvbW1hbmQgcnVubmluZyBidXQgZmFpbGluZwotICAgICAgICAgICAgbG9nLmRlYnVnKCJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZFswXSwgcmMpKQotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAotICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kWzBdLCByYykpCi0KIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiAgICAgX2NmZ190YXJnZXQgPSBOb25lCkBAIC0xODAsNyArMTU4LDcgQEAKICAgICBwYXRocyA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4ZWN1dGFibGUpCiAKLSAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3Igb3MubmFtZSA9PSAnb3MyJykgYW5kIChleHQgIT0gJy5leGUnKToKKyAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CiAgICAgICAgIGV4ZWN1dGFibGUgPSBleGVjdXRhYmxlICsgJy5leGUnCiAKICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZXhlY3V0YWJsZSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CmluZGV4IGI5NDc5ODguLmQ5YzlkNjUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CkBAIC0xMTQsOCArMTE0LDYgQEAKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJpbmNsdWRlIiwgcHl0aG9uX2RpcikKICAgICBlbGlmIG9zLm5hbWUgPT0gIm50IjoKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJpbmNsdWRlIikKLSAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiSW5jbHVkZSIpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKICAgICAgICAgICAgICJJIGRvbid0IGtub3cgd2hlcmUgUHl0aG9uIGluc3RhbGxzIGl0cyBDIGhlYWRlciBmaWxlcyAiCkBAIC0xNTcsMTEgKzE1NSw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikKLSAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAiSSBkb24ndCBrbm93IHdoZXJlIFB5dGhvbiBpbnN0YWxscyBpdHMgbGlicmFyeSAiCkBAIC00NDIsNyArNDM1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGZpbGVuYW1lID0gZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkKICAgICAgICAgcGFyc2VfbWFrZWZpbGUoZmlsZW5hbWUsIGcpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKICAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgpAQCAtNDU0LDcgKzQ0Nyw3IEBACiAgICAgICAgIGZpbGVuYW1lID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmaWxlOgogICAgICAgICAgICAgcGFyc2VfY29uZmlnX2goZmlsZSwgZykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQogICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CiAgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCkBAIC00OTIsNyArNDg1LDYgQEAKICAgICAjIFhYWCBobW1tLi4gYSBub3JtYWwgaW5zdGFsbCBwdXRzIGluY2x1ZGUgZmlsZXMgaGVyZQogICAgIGdbJ0lOQ0xVREVQWSddID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wKQogCi0gICAgZ1snU08nXSA9ICcucHlkJwogICAgIGdbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJwogICAgIGdbJ0VYRSddID0gIi5leGUiCiAgICAgZ1snVkVSU0lPTiddID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkucmVwbGFjZSgiLiIsICIiKQpAQCAtNTAyLDI0ICs0OTQsNiBAQAogICAgIF9jb25maWdfdmFycyA9IGcKIAogCi1kZWYgX2luaXRfb3MyKCk6Ci0gICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBPUy8yIiIiCi0gICAgZyA9IHt9Ci0gICAgIyBzZXQgYmFzaWMgaW5zdGFsbCBkaXJlY3RvcmllcwotICAgIGdbJ0xJQkRFU1QnXSA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTEpCi0gICAgZ1snQklOTElCREVTVCddID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0xLCBzdGFuZGFyZF9saWI9MSkKLQotICAgICMgWFhYIGhtbW0uLiBhIG5vcm1hbCBpbnN0YWxsIHB1dHMgaW5jbHVkZSBmaWxlcyBoZXJlCi0gICAgZ1snSU5DTFVERVBZJ10gPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTApCi0KLSAgICBnWydTTyddID0gJy5weWQnCi0gICAgZ1snRVhUX1NVRkZJWCddID0gJy5weWQnCi0gICAgZ1snRVhFJ10gPSAiLmV4ZSIKLQotICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKLSAgICBfY29uZmlnX3ZhcnMgPSBnCi0KLQogZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CiAgICAgIiIiV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgYWxsIGNvbmZpZ3VyYXRpb24KICAgICB2YXJpYWJsZXMgcmVsZXZhbnQgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLiAgR2VuZXJhbGx5IHRoaXMgaW5jbHVkZXMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKaW5kZXggMGFkMzJkNC4uYzhjY2RjMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKQEAgLTEsNyArMSw2IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfZHVtYi4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgemlwZmlsZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC03NSw4ICs3NCw2IEBACiAgICAgICAgICMgc2VlIHdoYXQgd2UgaGF2ZQogICAgICAgICBkaXN0X2NyZWF0ZWQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcpKQogICAgICAgICBiYXNlID0gIiVzLiVzLnppcCIgJSAoZGlzdC5nZXRfZnVsbG5hbWUoKSwgY21kLnBsYXRfbmFtZSkKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2UoJzonLCAnLScpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0X2NyZWF0ZWQsIFtiYXNlXSkKIApAQCAtOTAsNyArODcsNyBAQAogICAgICAgICBjb250ZW50cyA9IHNvcnRlZChvcy5wYXRoLmJhc2VuYW1lKGZuKSBmb3IgZm4gaW4gY29udGVudHMpCiAgICAgICAgIHdhbnRlZCA9IFsnZm9vLTAuMS1weSVzLiVzLmVnZy1pbmZvJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLCAnZm9vLnB5J10KICAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgotICAgICAgICAgICAgd2FudGVkLmFwcGVuZCgnZm9vLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpKQorICAgICAgICAgICAgd2FudGVkLmFwcGVuZCgnZm9vLiVzLnB5YycgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBzb3J0ZWQod2FudGVkKSkKIAogZGVmIHRlc3Rfc3VpdGUoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQppbmRleCBlNDE2ZWRkLi4xYjQxMGMzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CkBAIC0yLDcgKzIsNiBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5IGltcG9ydCBidWlsZF9weQpAQCAtNjMsNyArNjIsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhweWNhY2hlX2RpcikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBweWNfZmlsZXMgPSBvcy5saXN0ZGlyKHB5Y2FjaGVfZGlyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiX19pbml0X18uJXMucHljIiAlIGltcC5nZXRfdGFnKCksIHB5Y19maWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9faW5pdF9fLiVzLnB5YyIgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBweWNfZmlsZXMpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9wYWNrYWdlX2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgYnVncyAjMTY2ODU5Ni8jMTcyMDg5NwpAQCAtMTAyLDcgKzEwMiw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBbJ2JvaWxlZGVnZ3MuJXMucHljJyAlIGltcC5nZXRfdGFnKCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYm9pbGVkZWdncy4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ10pCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAnYnl0ZS1jb21waWxlIGRpc2FibGVkJykKICAgICBkZWYgdGVzdF9ieXRlX2NvbXBpbGVfb3B0aW1pemVkKHNlbGYpOgpAQCAtMTE5LDcgKzEyMCw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnYm9pbGVkZWdncy4lcy5weW8nICUgaW1wLmdldF90YWcoKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZvdW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JvaWxlZGVnZ3MuJXMucHlvJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWddKQogCiAgICAgZGVmIHRlc3RfZG9udF93cml0ZV9ieXRlY29kZShzZWxmKToKICAgICAgICAgIyBtYWtlcyBzdXJlIGJ5dGVfY29tcGlsZSBpcyBub3QgdXNlZApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkKaW5kZXggNTI1YmVlOS4uMTI1OTM2MSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAKICAgICAgICAgY29uZmlnID0gbGlzdChzb3J0ZWQoY29uZmlnLml0ZW1zKCkpKQogICAgICAgICB3YWl0ZWQgPSBbKCdwYXNzd29yZCcsICdzZWNyZXQnKSwgKCdyZWFsbScsICdweXBpJyksCi0gICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJyksCisgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAogICAgICAgICAgICAgICAgICAgKCdzZXJ2ZXInLCAnc2VydmVyMScpLCAoJ3VzZXJuYW1lJywgJ21lJyldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uZmlnLCB3YWl0ZWQpCiAKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgY29uZmlnID0gY21kLl9yZWFkX3B5cGlyYygpCiAgICAgICAgIGNvbmZpZyA9IGxpc3Qoc29ydGVkKGNvbmZpZy5pdGVtcygpKSkKICAgICAgICAgd2FpdGVkID0gWygncGFzc3dvcmQnLCAnc2VjcmV0JyksICgncmVhbG0nLCAncHlwaScpLAotICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAorICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGknKSwKICAgICAgICAgICAgICAgICAgICgnc2VydmVyJywgJ3NlcnZlci1sb2dpbicpLCAoJ3VzZXJuYW1lJywgJ3RhcmVrJyldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uZmlnLCB3YWl0ZWQpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkKaW5kZXggYjE5MDEyNy4uNDJiZDI2OSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkKQEAgLTEsNyArMSw2IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbC4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzaXRlCkBAIC05NCw3ICs5Myw3IEBACiAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCiAKLSAgICAgICAgZm9yIGtleSBpbiAoJ250X3VzZXInLCAndW5peF91c2VyJywgJ29zMl9ob21lJyk6CisgICAgICAgIGZvciBrZXkgaW4gKCdudF91c2VyJywgJ3VuaXhfdXNlcicpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIElOU1RBTExfU0NIRU1FUykKIAogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCd9KQpAQCAtMTkzLDcgKzE5Miw4IEBACiAgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICBmb3VuZCA9IFtvcy5wYXRoLmJhc2VuYW1lKGxpbmUpIGZvciBsaW5lIGluIGNvbnRlbnQuc3BsaXRsaW5lcygpXQotICAgICAgICBleHBlY3RlZCA9IFsnaGVsbG8ucHknLCAnaGVsbG8uJXMucHljJyAlIGltcC5nZXRfdGFnKCksICdzYXloaScsCisgICAgICAgIGV4cGVjdGVkID0gWydoZWxsby5weScsICdoZWxsby4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZywKKyAgICAgICAgICAgICAgICAgICAgJ3NheWhpJywKICAgICAgICAgICAgICAgICAgICAgJ1VOS05PV04tMC4wLjAtcHklcy4lcy5lZ2ctaW5mbycgJSBzeXMudmVyc2lvbl9pbmZvWzoyXV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgZXhwZWN0ZWQpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQppbmRleCAyYmQ0ZGM2Li5kYmIzZTlhIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CkBAIC0xLDcgKzEsNyBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZGF0YS4iIiIKIGltcG9ydCBzeXMKIGltcG9ydCBvcwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2xpYiBpbXBvcnQgaW5zdGFsbF9saWIKQEAgLTQ0LDggKzQ0LDEwIEBACiAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocHJvamVjdF9kaXIsICdmb28ucHknKQogICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZiwgJyMgcHl0aG9uIGZpbGUnKQogICAgICAgICBjbWQuYnl0ZV9jb21waWxlKFtmXSkKLSAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsIGRlYnVnX292ZXJyaWRlPVRydWUpCi0gICAgICAgIHB5b19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkKKyAgICAgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1UcnVlKQorICAgICAgICBweW9fZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHljX2ZpbGUpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHlvX2ZpbGUpKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQppbmRleCA0YzY0NjRhLi40YTcxY2E0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKQEAgLTcyLDEyICs3MiwxMiBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcih1cGxvYWRUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQotICAgICAgICBzZWxmLm9sZF9jbGFzcyA9IGh0dHBjbGllbnQuSFRUUENvbm5lY3Rpb24KLSAgICAgICAgc2VsZi5jb25uID0gaHR0cGNsaWVudC5IVFRQQ29ubmVjdGlvbiA9IEZha2VDb25uZWN0aW9uKCkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaHR0cGNsaWVudC5IVFRQQ29ubmVjdGlvbiA9IHNlbGYub2xkX2NsYXNzCi0gICAgICAgIHN1cGVyKHVwbG9hZFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCisgICAgICAgIGlmIGhhc2F0dHIoaHR0cGNsaWVudCwgJ0hUVFBTQ29ubmVjdGlvbicpOgorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNldGF0dHIsIGh0dHBjbGllbnQsICdIVFRQU0Nvbm5lY3Rpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBjbGllbnQuSFRUUFNDb25uZWN0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGRlbGF0dHIsIGh0dHBjbGllbnQsICdIVFRQU0Nvbm5lY3Rpb24nKQorICAgICAgICBzZWxmLmNvbm4gPSBodHRwY2xpZW50LkhUVFBTQ29ubmVjdGlvbiA9IEZha2VDb25uZWN0aW9uKCkKIAogICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQogICAgICAgICBmb3IgYXR0ciwgd2FpdGVkIGluICgoJ3VzZXJuYW1lJywgJ21lJyksICgncGFzc3dvcmQnLCAnc2VjcmV0JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncmVhbG0nLCAncHlwaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihjbWQsIGF0dHIpLCB3YWl0ZWQpCiAKICAgICBkZWYgdGVzdF9zYXZlZF9wYXNzd29yZChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKaW5kZXggZWFjOWI1MS4uYjczY2ZlOSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKQEAgLTIzNiw3ICsyMzYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vfcm9vdCwgJ2M6XFxyb290JywgJ2l0c1xcaGVyZScpCiAKLSAgICAgICAgIyBYWFggcGxhdGZvcm1zIHRvIGJlIGNvdmVyZWQ6IG9zMiwgbWFjCisgICAgICAgICMgWFhYIHBsYXRmb3JtcyB0byBiZSBjb3ZlcmVkOiBtYWMKIAogICAgIGRlZiB0ZXN0X2NoZWNrX2Vudmlyb24oc2VsZik6CiAgICAgICAgIHV0aWwuX2Vudmlyb25fY2hlY2tlZCA9IDAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdXRpbC5weQppbmRleCA2N2Q4MTY2Li5lZmIzODM0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CkBAIC02LDcgKzYsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCByZQotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3RyaW5nCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKQEAgLTE1NCwxMiArMTU0LDYgQEAKICAgICAgICAgICAgIHBhdGggPSBwYXRoWzE6XQogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG5ld19yb290LCBwYXRoKQogCi0gICAgZWxpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAoZHJpdmUsIHBhdGgpID0gb3MucGF0aC5zcGxpdGRyaXZlKHBhdGhuYW1lKQotICAgICAgICBpZiBwYXRoWzBdID09IG9zLnNlcDoKLSAgICAgICAgICAgIHBhdGggPSBwYXRoWzE6XQotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG5ld19yb290LCBwYXRoKQotCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigibm90aGluZyBrbm93biBhYm91dCBwbGF0Zm9ybSAnJXMnIiAlIG9zLm5hbWUpCiAKQEAgLTIxMyw4ICsyMDcsOCBAQAogCiAKIGRlZiBncm9rX2Vudmlyb25tZW50X2Vycm9yIChleGMsIHByZWZpeD0iZXJyb3I6ICIpOgotICAgICIiIkdlbmVyYXRlIGEgdXNlZnVsIGVycm9yIG1lc3NhZ2UgZnJvbSBhbiBFbnZpcm9ubWVudEVycm9yIChJT0Vycm9yIG9yCi0gICAgT1NFcnJvcikgZXhjZXB0aW9uIG9iamVjdC4gIEhhbmRsZXMgUHl0aG9uIDEuNS4xIGFuZCAxLjUuMiBzdHlsZXMsIGFuZAorICAgICIiIkdlbmVyYXRlIGEgdXNlZnVsIGVycm9yIG1lc3NhZ2UgZnJvbSBhbiBPU0Vycm9yCisgICAgZXhjZXB0aW9uIG9iamVjdC4gIEhhbmRsZXMgUHl0aG9uIDEuNS4xIGFuZCAxLjUuMiBzdHlsZXMsIGFuZAogICAgIGRvZXMgd2hhdCBpdCBjYW4gdG8gZGVhbCB3aXRoIGV4Y2VwdGlvbiBvYmplY3RzIHRoYXQgZG9uJ3QgaGF2ZSBhCiAgICAgZmlsZW5hbWUgKHdoaWNoIGhhcHBlbnMgd2hlbiB0aGUgZXJyb3IgaXMgZHVlIHRvIGEgdHdvLWZpbGUgb3BlcmF0aW9uLAogICAgIHN1Y2ggYXMgJ3JlbmFtZSgpJyBvciAnbGluaygpJy4gIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgYXMgYSBzdHJpbmcKQEAgLTQ1OSw5ICs0NTMsMTAgQEAKICAgICAgICAgICAgICMgICBjZmlsZSAtIGJ5dGUtY29tcGlsZWQgZmlsZQogICAgICAgICAgICAgIyAgIGRmaWxlIC0gcHVycG9ydGVkIHNvdXJjZSBmaWxlbmFtZSAoc2FtZSBhcyAnZmlsZScgYnkgZGVmYXVsdCkKICAgICAgICAgICAgIGlmIG9wdGltaXplID49IDA6Ci0gICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgIGZpbGUsIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGUpCiAgICAgICAgICAgICBkZmlsZSA9IGZpbGUKICAgICAgICAgICAgIGlmIHByZWZpeDoKICAgICAgICAgICAgICAgICBpZiBmaWxlWzpsZW4ocHJlZml4KV0gIT0gcHJlZml4OgpkaWZmIC0tZ2l0IGEvTGliL2RvY3Rlc3QucHkgYi9MaWIvZG9jdGVzdC5weQppbmRleCAwYjQ4NWYxLi43ODM2ZmQyIDEwMDY0NAotLS0gYS9MaWIvZG9jdGVzdC5weQorKysgYi9MaWIvZG9jdGVzdC5weQpAQCAtNjIsNiArNjIsNyBAQAogICAgICdSRVBPUlRfTkRJRkYnLAogICAgICdSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFJywKICAgICAnUkVQT1JUSU5HX0ZMQUdTJywKKyAgICAnRkFJTF9GQVNUJywKICAgICAjIDEuIFV0aWxpdHkgRnVuY3Rpb25zCiAgICAgIyAyLiBFeGFtcGxlICYgRG9jVGVzdAogICAgICdFeGFtcGxlJywKQEAgLTkyLDYgKzkzLDcgQEAKIF0KIAogaW1wb3J0IF9fZnV0dXJlX18KK2ltcG9ydCBhcmdwYXJzZQogaW1wb3J0IGRpZmZsaWIKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgbGluZWNhY2hlCkBAIC0xNTAsMTEgKzE1MiwxMyBAQAogUkVQT1JUX0NESUZGID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnUkVQT1JUX0NESUZGJykKIFJFUE9SVF9ORElGRiA9IHJlZ2lzdGVyX29wdGlvbmZsYWcoJ1JFUE9SVF9ORElGRicpCiBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRScpCitGQUlMX0ZBU1QgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdGQUlMX0ZBU1QnKQogCiBSRVBPUlRJTkdfRkxBR1MgPSAoUkVQT1JUX1VESUZGIHwKICAgICAgICAgICAgICAgICAgICBSRVBPUlRfQ0RJRkYgfAogICAgICAgICAgICAgICAgICAgIFJFUE9SVF9ORElGRiB8Ci0gICAgICAgICAgICAgICAgICAgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSkKKyAgICAgICAgICAgICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIHwKKyAgICAgICAgICAgICAgICAgICBGQUlMX0ZBU1QpCiAKICMgU3BlY2lhbCBzdHJpbmcgbWFya2VycyBmb3IgdXNlIGluIGB3YW50YCBzdHJpbmdzOgogQkxBTktMSU5FX01BUktFUiA9ICc8QkxBTktMSU5FPicKQEAgLTIxMiw3ICsyMTYsNyBAQAogICAgIGlmIG1vZHVsZV9yZWxhdGl2ZToKICAgICAgICAgcGFja2FnZSA9IF9ub3JtYWxpemVfbW9kdWxlKHBhY2thZ2UsIDMpCiAgICAgICAgIGZpbGVuYW1lID0gX21vZHVsZV9yZWxhdGl2ZV9wYXRoKHBhY2thZ2UsIGZpbGVuYW1lKQotICAgICAgICBpZiBoYXNhdHRyKHBhY2thZ2UsICdfX2xvYWRlcl9fJyk6CisgICAgICAgIGlmIGdldGF0dHIocGFja2FnZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGlmIGhhc2F0dHIocGFja2FnZS5fX2xvYWRlcl9fLCAnZ2V0X2RhdGEnKToKICAgICAgICAgICAgICAgICBmaWxlX2NvbnRlbnRzID0gcGFja2FnZS5fX2xvYWRlcl9fLmdldF9kYXRhKGZpbGVuYW1lKQogICAgICAgICAgICAgICAgIGZpbGVfY29udGVudHMgPSBmaWxlX2NvbnRlbnRzLmRlY29kZShlbmNvZGluZykKQEAgLTEzNDIsNiArMTM0Niw5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgKCJ1bmtub3duIG91dGNvbWUiLCBvdXRjb21lKQogCisgICAgICAgICAgICBpZiBmYWlsdXJlcyBhbmQgc2VsZi5vcHRpb25mbGFncyAmIEZBSUxfRkFTVDoKKyAgICAgICAgICAgICAgICBicmVhaworCiAgICAgICAgICMgUmVzdG9yZSB0aGUgb3B0aW9uIGZsYWdzIChpbiBjYXNlIHRoZXkgd2VyZSBtb2RpZmllZCkKICAgICAgICAgc2VsZi5vcHRpb25mbGFncyA9IG9yaWdpbmFsX29wdGlvbmZsYWdzCiAKQEAgLTIyODMsNiArMjI5MCwxMiBAQAogICAgIF9fc3RyX18gPSBzaG9ydERlc2NyaXB0aW9uCiAKIAorY2xhc3MgX0RvY1Rlc3RTdWl0ZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorCisgICAgZGVmIF9yZW1vdmVUZXN0QXRJbmRleChzZWxmLCBpbmRleCk6CisgICAgICAgIHBhc3MKKworCiBkZWYgRG9jVGVzdFN1aXRlKG1vZHVsZT1Ob25lLCBnbG9icz1Ob25lLCBleHRyYWdsb2JzPU5vbmUsIHRlc3RfZmluZGVyPU5vbmUsCiAgICAgICAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgIiIiCkBAIC0yMzI4LDcgKzIzNDEsNyBAQAogCiAgICAgaWYgbm90IHRlc3RzIGFuZCBzeXMuZmxhZ3Mub3B0aW1pemUgPj0yOgogICAgICAgICAjIFNraXAgZG9jdGVzdHMgd2hlbiBydW5uaW5nIHdpdGggLU8yCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKICAgICAgICAgc3VpdGUuYWRkVGVzdChTa2lwRG9jVGVzdENhc2UobW9kdWxlKSkKICAgICAgICAgcmV0dXJuIHN1aXRlCiAgICAgZWxpZiBub3QgdGVzdHM6CkBAIC0yMzQyLDcgKzIzNTUsNyBAQAogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1vZHVsZSwgImhhcyBubyBkb2NzdHJpbmdzIikKIAogICAgIHRlc3RzLnNvcnQoKQotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZSA9IF9Eb2NUZXN0U3VpdGUoKQogCiAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CiAgICAgICAgIGlmIGxlbih0ZXN0LmV4YW1wbGVzKSA9PSAwOgpAQCAtMjQ1Miw3ICsyNDY1LDcgQEAKICAgICBlbmNvZGluZwogICAgICAgQW4gZW5jb2RpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29udmVydCB0aGUgZmlsZXMgdG8gdW5pY29kZS4KICAgICAiIiIKLSAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKIAogICAgICMgV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgX25vcm1hbGl6ZV9tb2R1bGUgaXMgY2FsbGVkIGF0IHRoZSByaWdodAogICAgICMgbGV2ZWwuICBJZiBpdCB3ZXJlIGNhbGxlZCBpbiBEb2NGaWxlVGVzdCwgdGhlbiB0aGlzIGZ1bmN0aW9uCkBAIC0yNzAyLDEzICsyNzE1LDMwIEBACiAKIAogZGVmIF90ZXN0KCk6Ci0gICAgdGVzdGZpbGVzID0gW2FyZyBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XSBpZiBhcmcgYW5kIGFyZ1swXSAhPSAnLSddCi0gICAgaWYgbm90IHRlc3RmaWxlczoKLSAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCi0gICAgICAgIGlmICdfX2xvYWRlcl9fJyBpbiBnbG9iYWxzKCk6ICAgICAgICAgICMgcHl0aG9uIC1tCi0gICAgICAgICAgICBuYW1lLCBfID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQotICAgICAgICBwcmludCgidXNhZ2U6IHswfSBbLXZdIGZpbGUgLi4uIi5mb3JtYXQobmFtZSkpCi0gICAgICAgIHJldHVybiAyCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ImRvY3Rlc3QgcnVubmVyIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgdmVyeSB2ZXJib3NlIG91dHB1dCBmb3IgYWxsIHRlc3RzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW9wdGlvbicsIGFjdGlvbj0nYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9T1BUSU9ORkxBR1NfQllfTkFNRS5rZXlzKCksIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnc3BlY2lmeSBhIGRvY3Rlc3Qgb3B0aW9uIGZsYWcgdG8gYXBwbHknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHRvIHRoZSB0ZXN0IHJ1bjsgbWF5IGJlIHNwZWNpZmllZCBtb3JlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB0aGFuIG9uY2UgdG8gYXBwbHkgbXVsdGlwbGUgb3B0aW9ucycpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmFpbC1mYXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdzdG9wIHJ1bm5pbmcgdGVzdHMgYWZ0ZXIgZmlyc3QgZmFpbHVyZSAodGhpcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaXMgYSBzaG9ydGhhbmQgZm9yIC1vIEZBSUxfRkFTVCwgYW5kIGlzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgLW8gb3B0aW9ucyknKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaWxlJywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZmlsZSBjb250YWluaW5nIHRoZSB0ZXN0cyB0byBydW4nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgdGVzdGZpbGVzID0gYXJncy5maWxlCisgICAgIyBWZXJib3NlIHVzZWQgdG8gYmUgaGFuZGxlZCBieSB0aGUgImluc3BlY3QgYXJndiIgbWFnaWMgaW4gRG9jVGVzdFJ1bm5lciwKKyAgICAjIGJ1dCBzaW5jZSB3ZSBhcmUgdXNpbmcgYXJncGFyc2Ugd2UgYXJlIHBhc3NpbmcgaXQgbWFudWFsbHkgbm93LgorICAgIHZlcmJvc2UgPSBhcmdzLnZlcmJvc2UKKyAgICBvcHRpb25zID0gMAorICAgIGZvciBvcHRpb24gaW4gYXJncy5vcHRpb246CisgICAgICAgIG9wdGlvbnMgfD0gT1BUSU9ORkxBR1NfQllfTkFNRVtvcHRpb25dCisgICAgaWYgYXJncy5mYWlsX2Zhc3Q6CisgICAgICAgIG9wdGlvbnMgfD0gRkFJTF9GQVNUCiAgICAgZm9yIGZpbGVuYW1lIGluIHRlc3RmaWxlczoKICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOgogICAgICAgICAgICAgIyBJdCBpcyBhIG1vZHVsZSAtLSBpbnNlcnQgaXRzIGRpciBpbnRvIHN5cy5wYXRoIGFuZCB0cnkgdG8KQEAgLTI3MTgsOSArMjc0OCwxMCBAQAogICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGRpcm5hbWUpCiAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhmaWxlbmFtZVs6LTNdKQogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3Rtb2QobSkKKyAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdG1vZChtLCB2ZXJib3NlPXZlcmJvc2UsIG9wdGlvbmZsYWdzPW9wdGlvbnMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCisgICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT12ZXJib3NlLCBvcHRpb25mbGFncz1vcHRpb25zKQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weSBiL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQppbmRleCAyOTE0MzdjLi4wMzkyMzc5IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CkBAIC0zNjgsOCArMzY4LDcgQEAKICAgICAgICAgICAgICAgICB5aWVsZCAoaW5kZW50ICsgJyAgICAhISBpbnZhbGlkIGVsZW1lbnQgaW4gdG9rZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaXN0OiB7IXJ9Jy5mb3JtYXQodG9rZW4pKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB0b2tlbi5fcHAoaW5kZW50KycgICAgJyk6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHRva2VuLl9wcChpbmRlbnQrJyAgICAnKQogICAgICAgICBpZiBzZWxmLmRlZmVjdHM6CiAgICAgICAgICAgICBleHRyYSA9ICcgRGVmZWN0czoge30nLmZvcm1hdChzZWxmLmRlZmVjdHMpCiAgICAgICAgIGVsc2U6CkBAIC0xMzE1LDI0ICsxMzE0LDIyIEBACiAjIFBhcnNlcgogIwogCi0iIiJQYXJzZSBzdHJpbmdzIGFjY29yZGluZyB0byBSRkM4MjIvMjA0Ny8yODIyLzUzMjIgcnVsZXMuCi0KLVRoaXMgaXMgYSBzdGF0ZWxlc3MgcGFyc2VyLiAgRWFjaCBnZXRfWFhYIGZ1bmN0aW9uIGFjY2VwdHMgYSBzdHJpbmcgYW5kCi1yZXR1cm5zIGVpdGhlciBhIFRlcm1pbmFsIG9yIGEgVG9rZW5MaXN0IHJlcHJlc2VudGluZyB0aGUgUkZDIG9iamVjdCBuYW1lZAotYnkgdGhlIG1ldGhvZCBhbmQgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIHVucGFyc2VkIGNoYXJhY3RlcnMKLWZyb20gdGhlIGlucHV0LiAgVGh1cyBhIHBhcnNlciBtZXRob2QgY29uc3VtZXMgdGhlIG5leHQgc3ludGFjdGljIGNvbnN0cnVjdAotb2YgYSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjb25zdHJ1Y3QgcGx1cyB0aGUKLXVucGFyc2VkIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQgc3RyaW5nLgotCi1Gb3IgZXhhbXBsZSwgaWYgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmVkIGhlYWRlciBpcyBhICdwaHJhc2UnLAotdGhlbjoKLQotICAgIHBocmFzZSwgdmFsdWUgPSBnZXRfcGhyYXNlKHZhbHVlKQotCi1yZXR1cm5zIHRoZSBjb21wbGV0ZSBwaHJhc2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyB2YWx1ZSwgcGx1cyBhbnkKLWNoYXJhY3RlcnMgbGVmdCBpbiB0aGUgc3RyaW5nIGFmdGVyIHRoZSBwaHJhc2UgaXMgcmVtb3ZlZC4KLQotIiIiCisjIFBhcnNlIHN0cmluZ3MgYWNjb3JkaW5nIHRvIFJGQzgyMi8yMDQ3LzI4MjIvNTMyMiBydWxlcy4KKyMKKyMgVGhpcyBpcyBhIHN0YXRlbGVzcyBwYXJzZXIuICBFYWNoIGdldF9YWFggZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBhbmQKKyMgcmV0dXJucyBlaXRoZXIgYSBUZXJtaW5hbCBvciBhIFRva2VuTGlzdCByZXByZXNlbnRpbmcgdGhlIFJGQyBvYmplY3QgbmFtZWQKKyMgYnkgdGhlIG1ldGhvZCBhbmQgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIHVucGFyc2VkIGNoYXJhY3RlcnMKKyMgZnJvbSB0aGUgaW5wdXQuICBUaHVzIGEgcGFyc2VyIG1ldGhvZCBjb25zdW1lcyB0aGUgbmV4dCBzeW50YWN0aWMgY29uc3RydWN0CisjIG9mIGEgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgY29uc3RydWN0IHBsdXMgdGhlCisjIHVucGFyc2VkIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQgc3RyaW5nLgorIworIyBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmVkIGhlYWRlciBpcyBhICdwaHJhc2UnLAorIyB0aGVuOgorIworIyAgICAgcGhyYXNlLCB2YWx1ZSA9IGdldF9waHJhc2UodmFsdWUpCisjCisjIHJldHVybnMgdGhlIGNvbXBsZXRlIHBocmFzZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHZhbHVlLCBwbHVzIGFueQorIyBjaGFyYWN0ZXJzIGxlZnQgaW4gdGhlIHN0cmluZyBhZnRlciB0aGUgcGhyYXNlIGlzIHJlbW92ZWQuCiAKIF93c3Bfc3BsaXR0ZXIgPSByZS5jb21waWxlKHInKFt7fV0rKScuZm9ybWF0KCcnLmpvaW4oV1NQKSkpLnNwbGl0CiBfbm9uX2F0b21fZW5kX21hdGNoZXIgPSByZS5jb21waWxlKHIiW157fV0rIi5mb3JtYXQoCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkgYi9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2MzY1MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbWFpbC9jb250ZW50bWFuYWdlci5weQpAQCAtMCwwICsxLDI0OSBAQAoraW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgZW1haWwuY2hhcnNldAoraW1wb3J0IGVtYWlsLm1lc3NhZ2UKK2ltcG9ydCBlbWFpbC5lcnJvcnMKK2Zyb20gZW1haWwgaW1wb3J0IHF1b3ByaW1pbWUKKworY2xhc3MgQ29udGVudE1hbmFnZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X2hhbmRsZXJzID0ge30KKyAgICAgICAgc2VsZi5zZXRfaGFuZGxlcnMgPSB7fQorCisgICAgZGVmIGFkZF9nZXRfaGFuZGxlcihzZWxmLCBrZXksIGhhbmRsZXIpOgorICAgICAgICBzZWxmLmdldF9oYW5kbGVyc1trZXldID0gaGFuZGxlcgorCisgICAgZGVmIGdldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICBjb250ZW50X3R5cGUgPSBtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpCisgICAgICAgIGlmIGNvbnRlbnRfdHlwZSBpbiBzZWxmLmdldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oYW5kbGVyc1tjb250ZW50X3R5cGVdKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIG1haW50eXBlID0gbXNnLmdldF9jb250ZW50X21haW50eXBlKCkKKyAgICAgICAgaWYgbWFpbnR5cGUgaW4gc2VsZi5nZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfaGFuZGxlcnNbbWFpbnR5cGVdKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIGlmICcnIGluIHNlbGYuZ2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2hhbmRsZXJzWycnXShtc2csICphcmdzLCAqKmt3KQorICAgICAgICByYWlzZSBLZXlFcnJvcihjb250ZW50X3R5cGUpCisKKyAgICBkZWYgYWRkX3NldF9oYW5kbGVyKHNlbGYsIHR5cGVrZXksIGhhbmRsZXIpOgorICAgICAgICBzZWxmLnNldF9oYW5kbGVyc1t0eXBla2V5XSA9IGhhbmRsZXIKKworICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csIG9iaiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBpZiBtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgICMgWFhYOiBpcyB0aGlzIGVycm9yIGEgZ29vZCBpZGVhIG9yIG5vdD8gIFdlIGNhbiByZW1vdmUgaXQgbGF0ZXIsCisgICAgICAgICAgICAjIGJ1dCB3ZSBjYW4ndCBhZGQgaXQgbGF0ZXIsIHNvIGRvIGl0IGZvciBub3cuCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNldF9jb250ZW50IG5vdCB2YWxpZCBvbiBtdWx0aXBhcnQiKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5fZmluZF9zZXRfaGFuZGxlcihtc2csIG9iaikKKyAgICAgICAgbXNnLmNsZWFyX2NvbnRlbnQoKQorICAgICAgICBoYW5kbGVyKG1zZywgb2JqLCAqYXJncywgKiprdykKKworICAgIGRlZiBfZmluZF9zZXRfaGFuZGxlcihzZWxmLCBtc2csIG9iaik6CisgICAgICAgIGZ1bGxfcGF0aF9mb3JfZXJyb3IgPSBOb25lCisgICAgICAgIGZvciB0eXAgaW4gdHlwZShvYmopLl9fbXJvX186CisgICAgICAgICAgICBpZiB0eXAgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW3R5cF0KKyAgICAgICAgICAgIHFuYW1lID0gdHlwLl9fcXVhbG5hbWVfXworICAgICAgICAgICAgbW9kbmFtZSA9IGdldGF0dHIodHlwLCAnX19tb2R1bGVfXycsICcnKQorICAgICAgICAgICAgZnVsbF9wYXRoID0gJy4nLmpvaW4oKG1vZG5hbWUsIHFuYW1lKSkgaWYgbW9kbmFtZSBlbHNlIHFuYW1lCisgICAgICAgICAgICBpZiBmdWxsX3BhdGhfZm9yX2Vycm9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoX2Zvcl9lcnJvciA9IGZ1bGxfcGF0aAorICAgICAgICAgICAgaWYgZnVsbF9wYXRoIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tmdWxsX3BhdGhdCisgICAgICAgICAgICBpZiBxbmFtZSBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbcW5hbWVdCisgICAgICAgICAgICBuYW1lID0gdHlwLl9fbmFtZV9fCisgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tuYW1lXQorICAgICAgICBpZiBOb25lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW05vbmVdCisgICAgICAgIHJhaXNlIEtleUVycm9yKGZ1bGxfcGF0aF9mb3JfZXJyb3IpCisKKworcmF3X2RhdGFfbWFuYWdlciA9IENvbnRlbnRNYW5hZ2VyKCkKKworCitkZWYgZ2V0X3RleHRfY29udGVudChtc2csIGVycm9ycz0ncmVwbGFjZScpOgorICAgIGNvbnRlbnQgPSBtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpCisgICAgY2hhcnNldCA9IG1zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnLCAnQVNDSUknKQorICAgIHJldHVybiBjb250ZW50LmRlY29kZShjaGFyc2V0LCBlcnJvcnM9ZXJyb3JzKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ3RleHQnLCBnZXRfdGV4dF9jb250ZW50KQorCisKK2RlZiBnZXRfbm9uX3RleHRfY29udGVudChtc2cpOgorICAgIHJldHVybiBtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpCitmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKG1haW50eXBlLCBnZXRfbm9uX3RleHRfY29udGVudCkKKworCitkZWYgZ2V0X21lc3NhZ2VfY29udGVudChtc2cpOgorICAgIHJldHVybiBtc2cuZ2V0X3BheWxvYWQoMCkKK2ZvciBzdWJ0eXBlIGluICdyZmM4MjIgZXh0ZXJuYWwtYm9keScuc3BsaXQoKToKKyAgICByYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcignbWVzc2FnZS8nK3N1YnR5cGUsIGdldF9tZXNzYWdlX2NvbnRlbnQpCisKKworZGVmIGdldF9hbmRfZml4dXBfdW5rbm93bl9tZXNzYWdlX2NvbnRlbnQobXNnKToKKyAgICAjIElmIHdlIGRvbid0IHVuZGVyc3RhbmQgYSBtZXNzYWdlIHN1YnR5cGUsIHdlIGFyZSBzdXBwb3NlZCB0byB0cmVhdCBpdCBhcworICAgICMgaWYgaXQgd2VyZSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0sIHBlcgorICAgICMgdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjQuICBGZWVkcGFyc2VyIGRvZXNuJ3QgZG8gdGhhdCwKKyAgICAjIHNvIGRvIG91ciBiZXN0IHRvIGZpeCB0aGluZ3MgdXAuICBOb3RlIHRoYXQgaXQgaXMgKm5vdCogYXBwcm9wcmlhdGUgdG8KKyAgICAjIG1vZGVsIG1lc3NhZ2UvcGFydGlhbCBjb250ZW50IGFzIE1lc3NhZ2Ugb2JqZWN0cywgc28gdGhleSBhcmUgaGFuZGxlZAorICAgICMgaGVyZSBhcyB3ZWxsLiAgKEhvdyB0byByZWFzc2VtYmxlIHRoZW0gaXMgb3V0IG9mIHNjb3BlIGZvciB0aGlzIGNvbW1lbnQgOikKKyAgICByZXR1cm4gYnl0ZXMobXNnLmdldF9wYXlsb2FkKDApKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ21lc3NhZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2FuZF9maXh1cF91bmtub3duX21lc3NhZ2VfY29udGVudCkKKworCitkZWYgX3ByZXBhcmVfc2V0KG1zZywgbWFpbnR5cGUsIHN1YnR5cGUsIGhlYWRlcnMpOgorICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAnLycuam9pbigobWFpbnR5cGUsIHN1YnR5cGUpKQorICAgIGlmIGhlYWRlcnM6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGhlYWRlcnNbMF0sICduYW1lJyk6CisgICAgICAgICAgICBtcCA9IG1zZy5wb2xpY3kKKyAgICAgICAgICAgIGhlYWRlcnMgPSBbbXAuaGVhZGVyX2ZhY3RvcnkoKm1wLmhlYWRlcl9zb3VyY2VfcGFyc2UoW2hlYWRlcl0pKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgaGVhZGVyIGluIGhlYWRlcnNdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBoZWFkZXIgaW4gaGVhZGVyczoKKyAgICAgICAgICAgICAgICBpZiBoZWFkZXIuZGVmZWN0czoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgaGVhZGVyLmRlZmVjdHNbMF0KKyAgICAgICAgICAgICAgICBtc2dbaGVhZGVyLm5hbWVdID0gaGVhZGVyCisgICAgICAgIGV4Y2VwdCBlbWFpbC5lcnJvcnMuSGVhZGVyRGVmZWN0IGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgaGVhZGVyOiB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZm9sZChwb2xpY3k9bXNnLnBvbGljeSkpKSBmcm9tIGV4YworCisKK2RlZiBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcyk6CisgICAgaWYgZGlzcG9zaXRpb24gaXMgTm9uZSBhbmQgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGRpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnCisgICAgaWYgZGlzcG9zaXRpb24gaXMgbm90IE5vbmU6CisgICAgICAgIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddID0gZGlzcG9zaXRpb24KKyAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnLnNldF9wYXJhbSgnZmlsZW5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nQ29udGVudC1EaXNwb3NpdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZT1UcnVlKQorICAgIGlmIGNpZCBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnWydDb250ZW50LUlEJ10gPSBjaWQKKyAgICBpZiBwYXJhbXMgaXMgbm90IE5vbmU6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHBhcmFtcy5pdGVtcygpOgorICAgICAgICAgICAgbXNnLnNldF9wYXJhbShrZXksIHZhbHVlKQorCisKKyMgWFhYOiBUaGlzIGlzIGEgY2xlYW5lZC11cCB2ZXJzaW9uIG9mIGJhc2U2NG1pbWUuYm9keV9lbmNvZGUuICBJdCB3b3VsZAorIyBiZSBuaWNlIHRvIGRyb3AgYm90aCB0aGlzIGFuZCBxdW9wcmltaW1lLmJvZHlfZW5jb2RlIGluIGZhdm9yIG9mCisjIGVuaGFuY2VkIGJpbmFzY2lpIHJvdXRpbmVzIHRoYXQgYWNjZXB0ZWQgYSBtYXhfbGluZV9sZW5ndGggcGFyYW1ldGVyLgorZGVmIF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heF9saW5lX2xlbmd0aCk6CisgICAgZW5jb2RlZF9saW5lcyA9IFtdCisgICAgdW5lbmNvZGVkX2J5dGVzX3Blcl9saW5lID0gbWF4X2xpbmVfbGVuZ3RoICogMyAvLyA0CisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCB1bmVuY29kZWRfYnl0ZXNfcGVyX2xpbmUpOgorICAgICAgICB0aGlzbGluZSA9IGRhdGFbaTppK3VuZW5jb2RlZF9ieXRlc19wZXJfbGluZV0KKyAgICAgICAgZW5jb2RlZF9saW5lcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NCh0aGlzbGluZSkuZGVjb2RlKCdhc2NpaScpKQorICAgIHJldHVybiAnJy5qb2luKGVuY29kZWRfbGluZXMpCisKKworZGVmIF9lbmNvZGVfdGV4dChzdHJpbmcsIGNoYXJzZXQsIGN0ZSwgcG9saWN5KToKKyAgICBsaW5lcyA9IHN0cmluZy5lbmNvZGUoY2hhcnNldCkuc3BsaXRsaW5lcygpCisgICAgbGluZXNlcCA9IHBvbGljeS5saW5lc2VwLmVuY29kZSgnYXNjaWknKQorICAgIGRlZiBlbWJlZGVkX2JvZHkobGluZXMpOiByZXR1cm4gbGluZXNlcC5qb2luKGxpbmVzKSArIGxpbmVzZXAKKyAgICBkZWYgbm9ybWFsX2JvZHkobGluZXMpOiByZXR1cm4gYidcbicuam9pbihsaW5lcykgKyBiJ1xuJworICAgIGlmIGN0ZT09Tm9uZToKKyAgICAgICAgIyBVc2UgaGV1cmlzdGljcyB0byBkZWNpZGUgb24gdGhlICJiZXN0IiBlbmNvZGluZy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuICc3Yml0Jywgbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiAocG9saWN5LmN0ZV90eXBlID09ICc4Yml0JyBhbmQKKyAgICAgICAgICAgICAgICBtYXgobGVuKHgpIGZvciB4IGluIGxpbmVzKSA8PSBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKToKKyAgICAgICAgICAgIHJldHVybiAnOGJpdCcsIG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgIHNuaWZmID0gZW1iZWRlZF9ib2R5KGxpbmVzWzoxMF0pCisgICAgICAgIHNuaWZmX3FwID0gcXVvcHJpbWltZS5ib2R5X2VuY29kZShzbmlmZi5kZWNvZGUoJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgICAgIHNuaWZmX2Jhc2U2NCA9IGJpbmFzY2lpLmIyYV9iYXNlNjQoc25pZmYpCisgICAgICAgICMgVGhpcyBpcyBhIGxpdHRsZSB1bmZhaXIgdG8gcXA7IGl0IGluY2x1ZGVzIGxpbmVzZXBzLCBiYXNlNjQgZG9lc24ndC4KKyAgICAgICAgaWYgbGVuKHNuaWZmX3FwKSA+IGxlbihzbmlmZl9iYXNlNjQpOgorICAgICAgICAgICAgY3RlID0gJ2Jhc2U2NCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN0ZSA9ICdxdW90ZWQtcHJpbnRhYmxlJworICAgICAgICAgICAgaWYgbGVuKGxpbmVzKSA8PSAxMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3RlLCBzbmlmZl9xcAorICAgIGlmIGN0ZSA9PSAnN2JpdCc6CisgICAgICAgIGRhdGEgPSBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgPT0gJzhiaXQnOgorICAgICAgICBkYXRhID0gbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICBlbGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6CisgICAgICAgIGRhdGEgPSBxdW9wcmltaW1lLmJvZHlfZW5jb2RlKG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbGlmIGN0ZSA9PSAnYmFzZTY0JzoKKyAgICAgICAgZGF0YSA9IF9lbmNvZGVfYmFzZTY0KGVtYmVkZWRfYm9keShsaW5lcyksIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBjb250ZW50IHRyYW5zZmVyIGVuY29kaW5nIHt9Ii5mb3JtYXQoY3RlKSkKKyAgICByZXR1cm4gY3RlLCBkYXRhCisKKworZGVmIHNldF90ZXh0X2NvbnRlbnQobXNnLCBzdHJpbmcsIHN1YnR5cGU9InBsYWluIiwgY2hhcnNldD0ndXRmLTgnLCBjdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgX3ByZXBhcmVfc2V0KG1zZywgJ3RleHQnLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIGN0ZSwgcGF5bG9hZCA9IF9lbmNvZGVfdGV4dChzdHJpbmcsIGNoYXJzZXQsIGN0ZSwgbXNnLnBvbGljeSkKKyAgICBtc2cuc2V0X3BheWxvYWQocGF5bG9hZCkKKyAgICBtc2cuc2V0X3BhcmFtKCdjaGFyc2V0JywKKyAgICAgICAgICAgICAgICAgIGVtYWlsLmNoYXJzZXQuQUxJQVNFUy5nZXQoY2hhcnNldCwgY2hhcnNldCksCisgICAgICAgICAgICAgICAgICByZXBsYWNlPVRydWUpCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK3Jhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKHN0ciwgc2V0X3RleHRfY29udGVudCkKKworCitkZWYgc2V0X21lc3NhZ2VfY29udGVudChtc2csIG1lc3NhZ2UsIHN1YnR5cGU9InJmYzgyMiIsIGN0ZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgaWYgc3VidHlwZSA9PSAncGFydGlhbCc6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1lc3NhZ2UvcGFydGlhbCBpcyBub3Qgc3VwcG9ydGVkIGZvciBNZXNzYWdlIG9iamVjdHMiKQorICAgIGlmIHN1YnR5cGUgPT0gJ3JmYzgyMic6CisgICAgICAgIGlmIGN0ZSBub3QgaW4gKE5vbmUsICc3Yml0JywgJzhiaXQnLCAnYmluYXJ5Jyk6CisgICAgICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuMSBtYW5kYXRlLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAibWVzc2FnZS9yZmM4MjIgcGFydHMgZG8gbm90IHN1cHBvcnQgY3RlPXt9Ii5mb3JtYXQoY3RlKSkKKyAgICAgICAgIyA4Yml0IHdpbGwgZ2V0IGNvZXJjZWQgb24gc2VyaWFsaXphdGlvbiBpZiBwb2xpY3kuY3RlX3R5cGU9JzdiaXQnLiAgV2UKKyAgICAgICAgIyBtYXkgZW5kIHVwIGNsYWltaW5nIDhiaXQgd2hlbiBpdCBpc24ndCBuZWVkZWQsIGJ1dCB0aGUgb25seSBuZWdhdGl2ZQorICAgICAgICAjIHJlc3VsdCBvZiB0aGF0IHNob3VsZCBiZSBhIGdhdGV3YXkgdGhhdCBuZWVkcyB0byBjb2VyY2UgdG8gN2JpdAorICAgICAgICAjIGhhdmluZyB0byBsb29rIHRocm91Z2ggdGhlIHdob2xlIGVtYmVkZGVkIG1lc3NhZ2UgdG8gZGlzY292ZXIgd2hldGhlcgorICAgICAgICAjIG9yIG5vdCBpdCBhY3R1YWxseSBoYXMgdG8gZG8gYW55dGhpbmcuCisgICAgICAgIGN0ZSA9ICc4Yml0JyBpZiBjdGUgaXMgTm9uZSBlbHNlIGN0ZQorICAgIGVsaWYgc3VidHlwZSA9PSAnZXh0ZXJuYWwtYm9keSc6CisgICAgICAgIGlmIGN0ZSBub3QgaW4gKE5vbmUsICc3Yml0Jyk6CisgICAgICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuMyBtYW5kYXRlLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAibWVzc2FnZS9leHRlcm5hbC1ib2R5IHBhcnRzIGRvIG5vdCBzdXBwb3J0IGN0ZT17fSIuZm9ybWF0KGN0ZSkpCisgICAgICAgIGN0ZSA9ICc3Yml0JworICAgIGVsaWYgY3RlIGlzIE5vbmU6CisgICAgICAgICMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi40IHNheXMgYWxsIGZ1dHVyZQorICAgICAgICAjIHN1YnR5cGVzIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIDdiaXQsIHNvIGFzc3VtZSB0aGF0LgorICAgICAgICBjdGUgPSAnN2JpdCcKKyAgICBfcHJlcGFyZV9zZXQobXNnLCAnbWVzc2FnZScsIHN1YnR5cGUsIGhlYWRlcnMpCisgICAgbXNnLnNldF9wYXlsb2FkKFttZXNzYWdlXSkKKyAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9IGN0ZQorICAgIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfc2V0X2hhbmRsZXIoZW1haWwubWVzc2FnZS5NZXNzYWdlLCBzZXRfbWVzc2FnZV9jb250ZW50KQorCisKK2RlZiBzZXRfYnl0ZXNfY29udGVudChtc2csIGRhdGEsIG1haW50eXBlLCBzdWJ0eXBlLCBjdGU9J2Jhc2U2NCcsCisgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIF9wcmVwYXJlX3NldChtc2csIG1haW50eXBlLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIGlmIGN0ZSA9PSAnYmFzZTY0JzoKKyAgICAgICAgZGF0YSA9IF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heF9saW5lX2xlbmd0aD1tc2cucG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6CisgICAgICAgICMgWFhYOiBxdW9wcmltaW1lLmJvZHlfZW5jb2RlIHdvbid0IGVuY29kZSBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gZGF0YSwKKyAgICAgICAgIyBzbyB3ZSBjYW4ndCB1c2UgaXQuICBUaGlzIG1lYW5zIG1heF9saW5lX2xlbmd0aCBpcyBpZ25vcmVkLiAgQW5vdGhlcgorICAgICAgICAjIGJ1ZyB0byBmaXggbGF0ZXIuICAoTm90ZTogZW5jb2RlcnMucXVvcHJpIGlzIGJyb2tlbiBvbiBsaW5lIGVuZHMuKQorICAgICAgICBkYXRhID0gYmluYXNjaWkuYjJhX3FwKGRhdGEsIGlzdGV4dD1GYWxzZSwgaGVhZGVyPUZhbHNlLCBxdW90ZXRhYnM9VHJ1ZSkKKyAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgPT0gJzdiaXQnOgorICAgICAgICAjIE1ha2Ugc3VyZSBpdCByZWFsbHkgaXMgb25seSBBU0NJSS4gIFRoZSBlYXJseSB3YXJuaW5nIGhlcmUgc2VlbXMKKyAgICAgICAgIyB3b3J0aCB0aGUgb3ZlcmhlYWQuLi5pZiB5b3UgY2FyZSB3cml0ZSB5b3VyIG93biBjb250ZW50IG1hbmFnZXIgOikuCisgICAgICAgIGRhdGEuZW5jb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgaW4gKCc4Yml0JywgJ2JpbmFyeScpOgorICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgbXNnLnNldF9wYXlsb2FkKGRhdGEpCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK2ZvciB0eXAgaW4gKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKHR5cCwgc2V0X2J5dGVzX2NvbnRlbnQpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZmVlZHBhcnNlci5weSBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CmluZGV4IGVhNDFlOTUuLmViNzVmZTMgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CkBAIC05OCwyNCArOTgsMTUgQEAKICAgICAgICAgIiIiUHVzaCBzb21lIG5ldyBkYXRhIGludG8gdGhpcyBvYmplY3QuIiIiCiAgICAgICAgICMgSGFuZGxlIGFueSBwcmV2aW91cyBsZWZ0b3ZlcnMKICAgICAgICAgZGF0YSwgc2VsZi5fcGFydGlhbCA9IHNlbGYuX3BhcnRpYWwgKyBkYXRhLCAnJwotICAgICAgICAjIENyYWNrIGludG8gbGluZXMsIGJ1dCBwcmVzZXJ2ZSB0aGUgbmV3bGluZXMgb24gdGhlIGVuZCBvZiBlYWNoCi0gICAgICAgIHBhcnRzID0gTkxDUkVfY3JhY2suc3BsaXQoZGF0YSkKLSAgICAgICAgIyBUaGUgKmFoZW0qIGludGVyZXN0aW5nIGJlaGF2aW91ciBvZiByZS5zcGxpdCB3aGVuIHN1cHBsaWVkIGdyb3VwaW5nCi0gICAgICAgICMgcGFyZW50aGVzZXMgaXMgdGhhdCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSByZXN1bHRpbmcgbGlzdCBpcyB0aGUKLSAgICAgICAgIyBkYXRhIGFmdGVyIHRoZSBmaW5hbCBSRS4gIEluIHRoZSBjYXNlIG9mIGEgTkwvQ1IgdGVybWluYXRlZCBzdHJpbmcsCi0gICAgICAgICMgdGhpcyBpcyB0aGUgZW1wdHkgc3RyaW5nLgotICAgICAgICBzZWxmLl9wYXJ0aWFsID0gcGFydHMucG9wKCkKLSAgICAgICAgI0dBTiAyOU1hcjA5ICBidWdzIDE1NTU1NzAsIDE3MjE4NjIgIENvbmZ1c2lvbiBhdCA4SyBib3VuZGFyeSBlbmRpbmcgd2l0aCBccjoKLSAgICAgICAgIyBpcyB0aGVyZSBhIFxuIHRvIGZvbGxvdyBsYXRlcj8KLSAgICAgICAgaWYgbm90IHNlbGYuX3BhcnRpYWwgYW5kIHBhcnRzIGFuZCBwYXJ0c1stMV0uZW5kc3dpdGgoJ1xyJyk6Ci0gICAgICAgICAgICBzZWxmLl9wYXJ0aWFsID0gcGFydHMucG9wKC0yKStwYXJ0cy5wb3AoKQotICAgICAgICAjIHBhcnRzIGlzIGEgbGlzdCBvZiBzdHJpbmdzLCBhbHRlcm5hdGluZyBiZXR3ZWVuIHRoZSBsaW5lIGNvbnRlbnRzCi0gICAgICAgICMgYW5kIHRoZSBlb2wgY2hhcmFjdGVyKHMpLiAgR2F0aGVyIHVwIGEgbGlzdCBvZiBsaW5lcyBhZnRlcgotICAgICAgICAjIHJlLWF0dGFjaGluZyB0aGUgbmV3bGluZXMuCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBhcnRzKSAvLyAyKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChwYXJ0c1tpKjJdICsgcGFydHNbaSoyKzFdKQotICAgICAgICBzZWxmLnB1c2hsaW5lcyhsaW5lcykKKyAgICAgICAgIyBDcmFjayBpbnRvIGxpbmVzLCBidXQgcHJlc2VydmUgdGhlIGxpbmVzZXAgY2hhcmFjdGVycyBvbiB0aGUgZW5kIG9mIGVhY2gKKyAgICAgICAgcGFydHMgPSBkYXRhLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsaXN0IGRvZXMgbm90IGVuZCBpbiBhIG5ld2xpbmUsIHRoZW4gdHJlYXQKKyAgICAgICAgIyBpdCBhcyBhIHBhcnRpYWwgbGluZS4gIFdlIG9ubHkgY2hlY2sgZm9yICdcbicgaGVyZSBiZWNhdXNlIGEgbGluZQorICAgICAgICAjIGVuZGluZyB3aXRoICdccicgbWlnaHQgYmUgYSBsaW5lIHRoYXQgd2FzIHNwbGl0IGluIHRoZSBtaWRkbGUgb2YgYQorICAgICAgICAjICdcclxuJyBzZXF1ZW5jZSAoc2VlIGJ1Z3MgMTU1NTU3MCBhbmQgMTcyMTg2MikuCisgICAgICAgIGlmIHBhcnRzIGFuZCBub3QgcGFydHNbLTFdLmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgc2VsZi5fcGFydGlhbCA9IHBhcnRzLnBvcCgpCisgICAgICAgIHNlbGYucHVzaGxpbmVzKHBhcnRzKQogCiAgICAgZGVmIHB1c2hsaW5lcyhzZWxmLCBsaW5lcyk6CiAgICAgICAgICMgUmV2ZXJzZSBhbmQgaW5zZXJ0IGF0IHRoZSBmcm9udCBvZiB0aGUgbGluZXMuCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvaXRlcmF0b3JzLnB5IGIvTGliL2VtYWlsL2l0ZXJhdG9ycy5weQppbmRleCAzYWRjNGEwLi5iNTUwMmVlIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvaXRlcmF0b3JzLnB5CisrKyBiL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkKQEAgLTI2LDggKzI2LDcgQEAKICAgICB5aWVsZCBzZWxmCiAgICAgaWYgc2VsZi5pc19tdWx0aXBhcnQoKToKICAgICAgICAgZm9yIHN1YnBhcnQgaW4gc2VsZi5nZXRfcGF5bG9hZCgpOgotICAgICAgICAgICAgZm9yIHN1YnN1YnBhcnQgaW4gc3VicGFydC53YWxrKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3Vic3VicGFydAorICAgICAgICAgICAgeWllbGQgZnJvbSBzdWJwYXJ0LndhbGsoKQogCiAKIAwKQEAgLTQwLDggKzM5LDcgQEAKICAgICBmb3Igc3VicGFydCBpbiBtc2cud2FsaygpOgogICAgICAgICBwYXlsb2FkID0gc3VicGFydC5nZXRfcGF5bG9hZChkZWNvZGU9ZGVjb2RlKQogICAgICAgICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIHN0cik6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBTdHJpbmdJTyhwYXlsb2FkKToKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIFN0cmluZ0lPKHBheWxvYWQpCiAKIAogZGVmIHR5cGVkX3N1YnBhcnRfaXRlcmF0b3IobXNnLCBtYWludHlwZT0ndGV4dCcsIHN1YnR5cGU9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvbWVzc2FnZS5weSBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CmluZGV4IDUwMjBhMDMuLmNiMmJlMjEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9tZXNzYWdlLnB5CisrKyBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CkBAIC04LDggKzgsNiBAQAogCiBpbXBvcnQgcmUKIGltcG9ydCB1dQotaW1wb3J0IGJhc2U2NAotaW1wb3J0IGJpbmFzY2lpCiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPLCBTdHJpbmdJTwogCiAjIEludHJhcGFja2FnZSBpbXBvcnRzCkBAIC0xMzIsMjIgKzEzMCw1MCBAQAogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgZW50aXJlIGZvcm1hdHRlZCBtZXNzYWdlIGFzIGEgc3RyaW5nLgotICAgICAgICBUaGlzIGluY2x1ZGVzIHRoZSBoZWFkZXJzLCBib2R5LCBhbmQgZW52ZWxvcGUgaGVhZGVyLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXNfc3RyaW5nKCkKIAotICAgIGRlZiBhc19zdHJpbmcoc2VsZiwgdW5peGZyb209RmFsc2UsIG1heGhlYWRlcmxlbj0wKToKKyAgICBkZWYgYXNfc3RyaW5nKHNlbGYsIHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCwgcG9saWN5PU5vbmUpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIHN0cmluZy4KLSAgICAgICAgT3B0aW9uYWwgYHVuaXhmcm9tJyB3aGVuIFRydWUsIG1lYW5zIGluY2x1ZGUgdGhlIFVuaXggRnJvbV8gZW52ZWxvcGUKLSAgICAgICAgaGVhZGVyLgogCi0gICAgICAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgYW5kIG1heSBub3QgZ2VuZXJhdGUgdGhlIG1lc3NhZ2UgZXhhY3RseQotICAgICAgICBhcyB5b3UgaW50ZW5kLiAgRm9yIG1vcmUgZmxleGliaWxpdHksIHVzZSB0aGUgZmxhdHRlbigpIG1ldGhvZCBvZiBhCi0gICAgICAgIEdlbmVyYXRvciBpbnN0YW5jZS4KKyAgICAgICAgT3B0aW9uYWwgJ3VuaXhmcm9tJywgd2hlbiB0cnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCisgICAgICAgIGhlYWRlci4gIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIGlmIG1heGhlYWRlcmxlbiBpcworICAgICAgICBub3Qgc3BlY2lmaWVkIGl0IGRlZmF1bHRzIHRvIDAsIHNvIHlvdSBtdXN0IG92ZXJyaWRlIGl0IGV4cGxpY2l0bHkKKyAgICAgICAgaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgbWF4aGVhZGVybGVuLiAgJ3BvbGljeScgaXMgcGFzc2VkIHRvIHRoZQorICAgICAgICBHZW5lcmF0b3IgaW5zdGFuY2UgdXNlZCB0byBzZXJpYWxpemUgdGhlIG1lc2FzZ2U7IGlmIGl0IGlzIG5vdAorICAgICAgICBzcGVjaWZpZWQgdGhlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UgaW5zdGFuY2UgaXMgdXNlZC4KKworICAgICAgICBJZiB0aGUgbWVzc2FnZSBvYmplY3QgY29udGFpbnMgYmluYXJ5IGRhdGEgdGhhdCBpcyBub3QgZW5jb2RlZAorICAgICAgICBhY2NvcmRpbmcgdG8gUkZDIHN0YW5kYXJkcywgdGhlIG5vbi1jb21wbGlhbnQgZGF0YSB3aWxsIGJlIHJlcGxhY2VkIGJ5CisgICAgICAgIHVuaWNvZGUgInVua25vd24gY2hhcmFjdGVyIiBjb2RlIHBvaW50cy4KICAgICAgICAgIiIiCiAgICAgICAgIGZyb20gZW1haWwuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKKyAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kgaWYgcG9saWN5IGlzIE5vbmUgZWxzZSBwb2xpY3kKICAgICAgICAgZnAgPSBTdHJpbmdJTygpCi0gICAgICAgIGcgPSBHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1GYWxzZSwgbWF4aGVhZGVybGVuPW1heGhlYWRlcmxlbikKKyAgICAgICAgZyA9IEdlbmVyYXRvcihmcCwKKyAgICAgICAgICAgICAgICAgICAgICBtYW5nbGVfZnJvbV89RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgbWF4aGVhZGVybGVuPW1heGhlYWRlcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBwb2xpY3k9cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4oc2VsZiwgdW5peGZyb209dW5peGZyb20pCisgICAgICAgIHJldHVybiBmcC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIGJ5dGVzIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmFzX2J5dGVzKCkKKworICAgIGRlZiBhc19ieXRlcyhzZWxmLCB1bml4ZnJvbT1GYWxzZSwgcG9saWN5PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIGJ5dGVzIG9iamVjdC4KKworICAgICAgICBPcHRpb25hbCAndW5peGZyb20nLCB3aGVuIHRydWUsIG1lYW5zIGluY2x1ZGUgdGhlIFVuaXggRnJvbV8gZW52ZWxvcGUKKyAgICAgICAgaGVhZGVyLiAgJ3BvbGljeScgaXMgcGFzc2VkIHRvIHRoZSBCeXRlc0dlbmVyYXRvciBpbnN0YW5jZSB1c2VkIHRvCisgICAgICAgIHNlcmlhbGl6ZSB0aGUgbWVzc2FnZTsgaWYgbm90IHNwZWNpZmllZCB0aGUgcG9saWN5IGFzc29jaWF0ZWQgd2l0aAorICAgICAgICB0aGUgbWVzc2FnZSBpbnN0YW5jZSBpcyB1c2VkLgorICAgICAgICAiIiIKKyAgICAgICAgZnJvbSBlbWFpbC5nZW5lcmF0b3IgaW1wb3J0IEJ5dGVzR2VuZXJhdG9yCisgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5IGlmIHBvbGljeSBpcyBOb25lIGVsc2UgcG9saWN5CisgICAgICAgIGZwID0gQnl0ZXNJTygpCisgICAgICAgIGcgPSBCeXRlc0dlbmVyYXRvcihmcCwgbWFuZ2xlX2Zyb21fPUZhbHNlLCBwb2xpY3k9cG9saWN5KQogICAgICAgICBnLmZsYXR0ZW4oc2VsZiwgdW5peGZyb209dW5peGZyb20pCiAgICAgICAgIHJldHVybiBmcC5nZXR2YWx1ZSgpCiAKQEAgLTY1MSw3ICs2NzcsNyBAQAogICAgICAgICByZXR1cm4gZmFpbG9iagogCiAgICAgZGVmIHNldF9wYXJhbShzZWxmLCBwYXJhbSwgdmFsdWUsIGhlYWRlcj0nQ29udGVudC1UeXBlJywgcmVxdW90ZT1UcnVlLAotICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJyk6CisgICAgICAgICAgICAgICAgICBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnLCByZXBsYWNlPUZhbHNlKToKICAgICAgICAgIiIiU2V0IGEgcGFyYW1ldGVyIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgogCiAgICAgICAgIElmIHRoZSBwYXJhbWV0ZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGhlYWRlciwgaXRzIHZhbHVlIHdpbGwgYmUKQEAgLTY5NSw4ICs3MjEsMTEgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjdHlwZSA9IFNFTUlTUEFDRS5qb2luKFtjdHlwZSwgYXBwZW5kX3BhcmFtXSkKICAgICAgICAgaWYgY3R5cGUgIT0gc2VsZi5nZXQoaGVhZGVyKToKLSAgICAgICAgICAgIGRlbCBzZWxmW2hlYWRlcl0KLSAgICAgICAgICAgIHNlbGZbaGVhZGVyXSA9IGN0eXBlCisgICAgICAgICAgICBpZiByZXBsYWNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVwbGFjZV9oZWFkZXIoaGVhZGVyLCBjdHlwZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsIHNlbGZbaGVhZGVyXQorICAgICAgICAgICAgICAgIHNlbGZbaGVhZGVyXSA9IGN0eXBlCiAKICAgICBkZWYgZGVsX3BhcmFtKHNlbGYsIHBhcmFtLCBoZWFkZXI9J2NvbnRlbnQtdHlwZScsIHJlcXVvdGU9VHJ1ZSk6CiAgICAgICAgICIiIlJlbW92ZSB0aGUgZ2l2ZW4gcGFyYW1ldGVyIGNvbXBsZXRlbHkgZnJvbSB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KQEAgLTg3NywzICs5MDYsMjA4IEBACiAKICAgICAjIEkuZS4gZGVmIHdhbGsoc2VsZik6IC4uLgogICAgIGZyb20gZW1haWwuaXRlcmF0b3JzIGltcG9ydCB3YWxrCisKKworY2xhc3MgTUlNRVBhcnQoTWVzc2FnZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9saWN5PU5vbmUpOgorICAgICAgICBpZiBwb2xpY3kgaXMgTm9uZToKKyAgICAgICAgICAgIGZyb20gZW1haWwucG9saWN5IGltcG9ydCBkZWZhdWx0CisgICAgICAgICAgICBwb2xpY3kgPSBkZWZhdWx0CisgICAgICAgIE1lc3NhZ2UuX19pbml0X18oc2VsZiwgcG9saWN5KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2F0dGFjaG1lbnQoc2VsZik6CisgICAgICAgIGNfZCA9IHNlbGYuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJykKKyAgICAgICAgaWYgY19kIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGNfZC5sb3dlcigpID09ICdhdHRhY2htZW50JworCisgICAgZGVmIF9maW5kX2JvZHkoc2VsZiwgcGFydCwgcHJlZmVyZW5jZWxpc3QpOgorICAgICAgICBpZiBwYXJ0LmlzX2F0dGFjaG1lbnQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbWFpbnR5cGUsIHN1YnR5cGUgPSBwYXJ0LmdldF9jb250ZW50X3R5cGUoKS5zcGxpdCgnLycpCisgICAgICAgIGlmIG1haW50eXBlID09ICd0ZXh0JzoKKyAgICAgICAgICAgIGlmIHN1YnR5cGUgaW4gcHJlZmVyZW5jZWxpc3Q6CisgICAgICAgICAgICAgICAgeWllbGQgKHByZWZlcmVuY2VsaXN0LmluZGV4KHN1YnR5cGUpLCBwYXJ0KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG1haW50eXBlICE9ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHN1YnR5cGUgIT0gJ3JlbGF0ZWQnOgorICAgICAgICAgICAgZm9yIHN1YnBhcnQgaW4gcGFydC5pdGVyX3BhcnRzKCk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX2JvZHkoc3VicGFydCwgcHJlZmVyZW5jZWxpc3QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgJ3JlbGF0ZWQnIGluIHByZWZlcmVuY2VsaXN0OgorICAgICAgICAgICAgeWllbGQgKHByZWZlcmVuY2VsaXN0LmluZGV4KCdyZWxhdGVkJyksIHBhcnQpCisgICAgICAgIGNhbmRpZGF0ZSA9IE5vbmUKKyAgICAgICAgc3RhcnQgPSBwYXJ0LmdldF9wYXJhbSgnc3RhcnQnKQorICAgICAgICBpZiBzdGFydDoKKyAgICAgICAgICAgIGZvciBzdWJwYXJ0IGluIHBhcnQuaXRlcl9wYXJ0cygpOgorICAgICAgICAgICAgICAgIGlmIHN1YnBhcnRbJ2NvbnRlbnQtaWQnXSA9PSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gc3VicGFydAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBjYW5kaWRhdGUgaXMgTm9uZToKKyAgICAgICAgICAgIHN1YnBhcnRzID0gcGFydC5nZXRfcGF5bG9hZCgpCisgICAgICAgICAgICBjYW5kaWRhdGUgPSBzdWJwYXJ0c1swXSBpZiBzdWJwYXJ0cyBlbHNlIE5vbmUKKyAgICAgICAgaWYgY2FuZGlkYXRlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX2JvZHkoY2FuZGlkYXRlLCBwcmVmZXJlbmNlbGlzdCkKKworICAgIGRlZiBnZXRfYm9keShzZWxmLCBwcmVmZXJlbmNlbGlzdD0oJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpKToKKyAgICAgICAgIiIiUmV0dXJuIGJlc3QgY2FuZGlkYXRlIG1pbWUgcGFydCBmb3IgZGlzcGxheSBhcyAnYm9keScgb2YgbWVzc2FnZS4KKworICAgICAgICBEbyBhIGRlcHRoIGZpcnN0IHNlYXJjaCwgc3RhcnRpbmcgd2l0aCBzZWxmLCBsb29raW5nIGZvciB0aGUgZmlyc3QgcGFydAorICAgICAgICBtYXRjaGluZyBlYWNoIG9mIHRoZSBpdGVtcyBpbiBwcmVmZXJlbmNlbGlzdCwgYW5kIHJldHVybiB0aGUgcGFydAorICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBpdGVtIHRoYXQgaGFzIGEgbWF0Y2gsIG9yIE5vbmUgaWYgbm8gaXRlbXMKKyAgICAgICAgaGF2ZSBhIG1hdGNoLiAgSWYgJ3JlbGF0ZWQnIGlzIG5vdCBpbmNsdWRlZCBpbiBwcmVmZXJlbmNlbGlzdCwgY29uc2lkZXIKKyAgICAgICAgdGhlIHJvb3QgcGFydCBvZiBhbnkgbXVsdGlwYXJ0L3JlbGF0ZWQgZW5jb3VudGVyZWQgYXMgYSBjYW5kaWRhdGUKKyAgICAgICAgbWF0Y2guICBJZ25vcmUgcGFydHMgd2l0aCAnQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudCcuCisgICAgICAgICIiIgorICAgICAgICBiZXN0X3ByaW8gPSBsZW4ocHJlZmVyZW5jZWxpc3QpCisgICAgICAgIGJvZHkgPSBOb25lCisgICAgICAgIGZvciBwcmlvLCBwYXJ0IGluIHNlbGYuX2ZpbmRfYm9keShzZWxmLCBwcmVmZXJlbmNlbGlzdCk6CisgICAgICAgICAgICBpZiBwcmlvIDwgYmVzdF9wcmlvOgorICAgICAgICAgICAgICAgIGJlc3RfcHJpbyA9IHByaW8KKyAgICAgICAgICAgICAgICBib2R5ID0gcGFydAorICAgICAgICAgICAgICAgIGlmIHByaW8gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGJvZHkKKworICAgIF9ib2R5X3R5cGVzID0geygndGV4dCcsICdwbGFpbicpLAorICAgICAgICAgICAgICAgICAgICgndGV4dCcsICdodG1sJyksCisgICAgICAgICAgICAgICAgICAgKCdtdWx0aXBhcnQnLCAncmVsYXRlZCcpLAorICAgICAgICAgICAgICAgICAgICgnbXVsdGlwYXJ0JywgJ2FsdGVybmF0aXZlJyl9CisgICAgZGVmIGl0ZXJfYXR0YWNobWVudHMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBub24tbWFpbiBwYXJ0cyBvZiBhIG11bHRpcGFydC4KKworICAgICAgICBTa2lwIHRoZSBmaXJzdCBvZiBlYWNoIG9jY3VycmVuY2Ugb2YgdGV4dC9wbGFpbiwgdGV4dC9odG1sLAorICAgICAgICBtdWx0aXBhcnQvcmVsYXRlZCwgb3IgbXVsdGlwYXJ0L2FsdGVybmF0aXZlIGluIHRoZSBtdWx0aXBhcnQgKHVubGVzcworICAgICAgICB0aGV5IGhhdmUgYSAnQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudCcgaGVhZGVyKSBhbmQgaW5jbHVkZSBhbGwKKyAgICAgICAgcmVtYWluaW5nIHN1YnBhcnRzIGluIHRoZSByZXR1cm5lZCBpdGVyYXRvci4gIFdoZW4gYXBwbGllZCB0byBhCisgICAgICAgIG11bHRpcGFydC9yZWxhdGVkLCByZXR1cm4gYWxsIHBhcnRzIGV4Y2VwdCB0aGUgcm9vdCBwYXJ0LiAgUmV0dXJuIGFuCisgICAgICAgIGVtcHR5IGl0ZXJhdG9yIHdoZW4gYXBwbGllZCB0byBhIG11bHRpcGFydC9hbHRlcm5hdGl2ZSBvciBhCisgICAgICAgIG5vbi1tdWx0aXBhcnQuCisgICAgICAgICIiIgorICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IHNlbGYuZ2V0X2NvbnRlbnRfdHlwZSgpLnNwbGl0KCcvJykKKyAgICAgICAgaWYgbWFpbnR5cGUgIT0gJ211bHRpcGFydCcgb3Igc3VidHlwZSA9PSAnYWx0ZXJuYXRpdmUnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBhcnRzID0gc2VsZi5nZXRfcGF5bG9hZCgpCisgICAgICAgIGlmIG1haW50eXBlID09ICdtdWx0aXBhcnQnIGFuZCBzdWJ0eXBlID09ICdyZWxhdGVkJzoKKyAgICAgICAgICAgICMgRm9yIHJlbGF0ZWQsIHdlIHRyZWF0IGV2ZXJ5dGhpbmcgYnV0IHRoZSByb290IGFzIGFuIGF0dGFjaG1lbnQuCisgICAgICAgICAgICAjIFRoZSByb290IG1heSBiZSBpbmRpY2F0ZWQgYnkgJ3N0YXJ0JzsgaWYgdGhlcmUncyBubyBzdGFydCBvciB3ZQorICAgICAgICAgICAgIyBjYW4ndCBmaW5kIHRoZSBuYW1lZCBzdGFydCwgdHJlYXQgdGhlIGZpcnN0IHN1YnBhcnQgYXMgdGhlIHJvb3QuCisgICAgICAgICAgICBzdGFydCA9IHNlbGYuZ2V0X3BhcmFtKCdzdGFydCcpCisgICAgICAgICAgICBpZiBzdGFydDoKKyAgICAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgYXR0YWNobWVudHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0LmdldCgnY29udGVudC1pZCcpID09IHN0YXJ0OgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQocGFydCkKKyAgICAgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBhdHRhY2htZW50cworICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBhcnRzLnBvcCgwKQorICAgICAgICAgICAgeWllbGQgZnJvbSBwYXJ0cworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgT3RoZXJ3aXNlIHdlIG1vcmUgb3IgbGVzcyBpbnZlcnQgdGhlIHJlbWFpbmluZyBsb2dpYyBpbiBnZXRfYm9keS4KKyAgICAgICAgIyBUaGlzIG9ubHkgcmVhbGx5IHdvcmtzIGluIGVkZ2UgY2FzZXMgKGV4OiBub24tdGV4dCByZWxhdGVkcyBvcgorICAgICAgICAjIGFsdGVybmF0aXZlcykgaWYgdGhlIHNlbmRpbmcgYWdlbnQgc2V0cyBjb250ZW50LWRpc3Bvc2l0aW9uLgorICAgICAgICBzZWVuID0gW10gICAjIE9ubHkgc2tpcCB0aGUgZmlyc3QgZXhhbXBsZSBvZiBlYWNoIGNhbmRpZGF0ZSB0eXBlLgorICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gcGFydC5nZXRfY29udGVudF90eXBlKCkuc3BsaXQoJy8nKQorICAgICAgICAgICAgaWYgKChtYWludHlwZSwgc3VidHlwZSkgaW4gc2VsZi5fYm9keV90eXBlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgbm90IHBhcnQuaXNfYXR0YWNobWVudCBhbmQgc3VidHlwZSBub3QgaW4gc2Vlbik6CisgICAgICAgICAgICAgICAgc2Vlbi5hcHBlbmQoc3VidHlwZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgeWllbGQgcGFydAorCisgICAgZGVmIGl0ZXJfcGFydHMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBpbW1lZGlhdGUgc3VicGFydHMgb2YgYSBtdWx0aXBhcnQuCisKKyAgICAgICAgUmV0dXJuIGFuIGVtcHR5IGl0ZXJhdG9yIGZvciBhIG5vbi1tdWx0aXBhcnQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuZ2V0X3BheWxvYWQoKQorCisgICAgZGVmIGdldF9jb250ZW50KHNlbGYsICphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdyk6CisgICAgICAgIGlmIGNvbnRlbnRfbWFuYWdlciBpcyBOb25lOgorICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyID0gc2VsZi5wb2xpY3kuY29udGVudF9tYW5hZ2VyCisgICAgICAgIHJldHVybiBjb250ZW50X21hbmFnZXIuZ2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgaWYgY29udGVudF9tYW5hZ2VyIGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZW50X21hbmFnZXIgPSBzZWxmLnBvbGljeS5jb250ZW50X21hbmFnZXIKKyAgICAgICAgY29udGVudF9tYW5hZ2VyLnNldF9jb250ZW50KHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgZGVmIF9tYWtlX211bHRpcGFydChzZWxmLCBzdWJ0eXBlLCBkaXNhbGxvd2VkX3N1YnR5cGVzLCBib3VuZGFyeSk6CisgICAgICAgIGlmIHNlbGYuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgIGV4aXN0aW5nX3N1YnR5cGUgPSBzZWxmLmdldF9jb250ZW50X3N1YnR5cGUoKQorICAgICAgICAgICAgZGlzYWxsb3dlZF9zdWJ0eXBlcyA9IGRpc2FsbG93ZWRfc3VidHlwZXMgKyAoc3VidHlwZSwpCisgICAgICAgICAgICBpZiBleGlzdGluZ19zdWJ0eXBlIGluIGRpc2FsbG93ZWRfc3VidHlwZXM6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IGNvbnZlcnQge30gdG8ge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgZXhpc3Rpbmdfc3VidHlwZSwgc3VidHlwZSkpCisgICAgICAgIGtlZXBfaGVhZGVycyA9IFtdCisgICAgICAgIHBhcnRfaGVhZGVycyA9IFtdCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLl9oZWFkZXJzOgorICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyk6CisgICAgICAgICAgICAgICAgcGFydF9oZWFkZXJzLmFwcGVuZCgobmFtZSwgdmFsdWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBrZWVwX2hlYWRlcnMuYXBwZW5kKChuYW1lLCB2YWx1ZSkpCisgICAgICAgIGlmIHBhcnRfaGVhZGVyczoKKyAgICAgICAgICAgICMgVGhlcmUgaXMgZXhpc3RpbmcgY29udGVudCwgbW92ZSBpdCB0byB0aGUgZmlyc3Qgc3VicGFydC4KKyAgICAgICAgICAgIHBhcnQgPSB0eXBlKHNlbGYpKHBvbGljeT1zZWxmLnBvbGljeSkKKyAgICAgICAgICAgIHBhcnQuX2hlYWRlcnMgPSBwYXJ0X2hlYWRlcnMKKyAgICAgICAgICAgIHBhcnQuX3BheWxvYWQgPSBzZWxmLl9wYXlsb2FkCisgICAgICAgICAgICBzZWxmLl9wYXlsb2FkID0gW3BhcnRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wYXlsb2FkID0gW10KKyAgICAgICAgc2VsZi5faGVhZGVycyA9IGtlZXBfaGVhZGVycworICAgICAgICBzZWxmWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvJyArIHN1YnR5cGUKKyAgICAgICAgaWYgYm91bmRhcnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnNldF9wYXJhbSgnYm91bmRhcnknLCBib3VuZGFyeSkKKworICAgIGRlZiBtYWtlX3JlbGF0ZWQoc2VsZiwgYm91bmRhcnk9Tm9uZSk6CisgICAgICAgIHNlbGYuX21ha2VfbXVsdGlwYXJ0KCdyZWxhdGVkJywgKCdhbHRlcm5hdGl2ZScsICdtaXhlZCcpLCBib3VuZGFyeSkKKworICAgIGRlZiBtYWtlX2FsdGVybmF0aXZlKHNlbGYsIGJvdW5kYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLl9tYWtlX211bHRpcGFydCgnYWx0ZXJuYXRpdmUnLCAoJ21peGVkJywpLCBib3VuZGFyeSkKKworICAgIGRlZiBtYWtlX21peGVkKHNlbGYsIGJvdW5kYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLl9tYWtlX211bHRpcGFydCgnbWl4ZWQnLCAoKSwgYm91bmRhcnkpCisKKyAgICBkZWYgX2FkZF9tdWx0aXBhcnQoc2VsZiwgX3N1YnR5cGUsICphcmdzLCBfZGlzcD1Ob25lLCAqKmt3KToKKyAgICAgICAgaWYgKHNlbGYuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSAhPSAnbXVsdGlwYXJ0JyBvcgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X2NvbnRlbnRfc3VidHlwZSgpICE9IF9zdWJ0eXBlKToKKyAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgJ21ha2VfJyArIF9zdWJ0eXBlKSgpCisgICAgICAgIHBhcnQgPSB0eXBlKHNlbGYpKHBvbGljeT1zZWxmLnBvbGljeSkKKyAgICAgICAgcGFydC5zZXRfY29udGVudCgqYXJncywgKiprdykKKyAgICAgICAgaWYgX2Rpc3AgYW5kICdjb250ZW50LWRpc3Bvc2l0aW9uJyBub3QgaW4gcGFydDoKKyAgICAgICAgICAgIHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9IF9kaXNwCisgICAgICAgIHNlbGYuYXR0YWNoKHBhcnQpCisKKyAgICBkZWYgYWRkX3JlbGF0ZWQoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9hZGRfbXVsdGlwYXJ0KCdyZWxhdGVkJywgKmFyZ3MsIF9kaXNwPSdpbmxpbmUnLCAqKmt3KQorCisgICAgZGVmIGFkZF9hbHRlcm5hdGl2ZShzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX2FkZF9tdWx0aXBhcnQoJ2FsdGVybmF0aXZlJywgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgYWRkX2F0dGFjaG1lbnQoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9hZGRfbXVsdGlwYXJ0KCdtaXhlZCcsICphcmdzLCBfZGlzcD0nYXR0YWNobWVudCcsICoqa3cpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBbXQorICAgICAgICBzZWxmLl9wYXlsb2FkID0gTm9uZQorCisgICAgZGVmIGNsZWFyX2NvbnRlbnQoc2VsZik6CisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBbKG4sIHYpIGZvciBuLCB2IGluIHNlbGYuX2hlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgbi5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyldCisgICAgICAgIHNlbGYuX3BheWxvYWQgPSBOb25lCisKKworY2xhc3MgRW1haWxNZXNzYWdlKE1JTUVQYXJ0KToKKworICAgIGRlZiBzZXRfY29udGVudChzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHN1cGVyKCkuc2V0X2NvbnRlbnQoKmFyZ3MsICoqa3cpCisgICAgICAgIGlmICdNSU1FLVZlcnNpb24nIG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgc2VsZlsnTUlNRS1WZXJzaW9uJ10gPSAnMS4wJwpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3BhcnNlci5weSBiL0xpYi9lbWFpbC9wYXJzZXIucHkKaW5kZXggNzUyYmYzNS4uZjQ5ZDMxZCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3BhcnNlci5weQorKysgYi9MaWIvZW1haWwvcGFyc2VyLnB5CkBAIC00LDcgKzQsOCBAQAogCiAiIiJBIHBhcnNlciBvZiBSRkMgMjgyMiBhbmQgTUlNRSBlbWFpbCBtZXNzYWdlcy4iIiIKIAotX19hbGxfXyA9IFsnUGFyc2VyJywgJ0hlYWRlclBhcnNlcicsICdCeXRlc1BhcnNlcicsICdCeXRlc0hlYWRlclBhcnNlciddCitfX2FsbF9fID0gWydQYXJzZXInLCAnSGVhZGVyUGFyc2VyJywgJ0J5dGVzUGFyc2VyJywgJ0J5dGVzSGVhZGVyUGFyc2VyJywKKyAgICAgICAgICAgJ0ZlZWRQYXJzZXInLCAnQnl0ZXNGZWVkUGFyc2VyJ10KIAogaW1wb3J0IHdhcm5pbmdzCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTywgVGV4dElPV3JhcHBlcgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3BvbGljeS5weSBiL0xpYi9lbWFpbC9wb2xpY3kucHkKaW5kZXggMzhlODhhZi4uZjBiMjBmNCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3BvbGljeS5weQorKysgYi9MaWIvZW1haWwvcG9saWN5LnB5CkBAIC01LDYgKzUsNyBAQAogZnJvbSBlbWFpbC5fcG9saWN5YmFzZSBpbXBvcnQgUG9saWN5LCBDb21wYXQzMiwgY29tcGF0MzIsIF9leHRlbmRfZG9jc3RyaW5ncwogZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgX2hhc19zdXJyb2dhdGVzCiBmcm9tIGVtYWlsLmhlYWRlcnJlZ2lzdHJ5IGltcG9ydCBIZWFkZXJSZWdpc3RyeSBhcyBIZWFkZXJSZWdpc3RyeQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgcmF3X2RhdGFfbWFuYWdlcgogCiBfX2FsbF9fID0gWwogICAgICdDb21wYXQzMicsCkBAIC01OCwxMCArNTksMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgdHJlYXRtZW50LCB3aGlsZSBhbGwgb3RoZXIgZmllbGRzIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlYXRlZCBhcyB1bnN0cnVjdHVyZWQuICBUaGlzIGxpc3Qgd2lsbCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkIGJlZm9yZSB0aGUgZXh0ZW5zaW9uIGlzIG1hcmtlZCBzdGFibGUuKQorCisgICAgY29udGVudF9tYW5hZ2VyICAgICAtLSBhbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCB0d28gbWV0aG9kczogZ2V0X2NvbnRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZXRfY29udGVudC4gIFdoZW4gdGhlIGdldF9jb250ZW50IG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfY29udGVudCBtZXRob2Qgb2YgYSBNZXNzYWdlIG9iamVjdCBpcyBjYWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBjYWxscyB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhpcyBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGl0IHRoZSBtZXNzYWdlIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IGFyZ3VtZW50cyBvciBrZXl3b3JkcyB0aGF0IHdlcmUgcGFzc2VkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gIFRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X21hbmFnZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhOmB+ZW1haWwuY29udGVudG1hbmFnZXIucmF3X2RhdGFfbWFuYWdlcmAuCisKICAgICAiIiIKIAogICAgIHJlZm9sZF9zb3VyY2UgPSAnbG9uZycKICAgICBoZWFkZXJfZmFjdG9yeSA9IEhlYWRlclJlZ2lzdHJ5KCkKKyAgICBjb250ZW50X21hbmFnZXIgPSByYXdfZGF0YV9tYW5hZ2VyCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprdyk6CiAgICAgICAgICMgRW5zdXJlIHRoYXQgZWFjaCBuZXcgaW5zdGFuY2UgZ2V0cyBhIHVuaXF1ZSBoZWFkZXIgZmFjdG9yeQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3V0aWxzLnB5IGIvTGliL2VtYWlsL3V0aWxzLnB5CmluZGV4IDkzYTYyNWMuLjI1YjBkNTYgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC91dGlscy5weQorKysgYi9MaWIvZW1haWwvdXRpbHMucHkKQEAgLTU0LDE3ICs1NCwyNyBAQAogc3BlY2lhbHNyZSA9IHJlLmNvbXBpbGUocidbXVtcXCgpPD5ALDo7Ii5dJykKIGVzY2FwZXNyZSA9IHJlLmNvbXBpbGUocidbXFwiXScpCiAKLSMgSG93IHRvIGZpZ3VyZSBvdXQgaWYgd2UgYXJlIHByb2Nlc3Npbmcgc3RyaW5ncyB0aGF0IGNvbWUgZnJvbSBhIGJ5dGUKLSMgc291cmNlIHdpdGggdW5kZWNvZGFibGUgY2hhcmFjdGVycy4KLV9oYXNfc3Vycm9nYXRlcyA9IHJlLmNvbXBpbGUoCi0gICAgJyhbXlx1ZDgwMC1cdWRiZmZdfFxBKVtcdWRjMDAtXHVkZmZmXShbXlx1ZGMwMC1cdWRmZmZdfFxaKScpLnNlYXJjaAorZGVmIF9oYXNfc3Vycm9nYXRlcyhzKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzIGNvbnRhaW5zIHN1cnJvZ2F0ZS1lc2NhcGVkIGJpbmFyeSBkYXRhLiIiIgorICAgICMgVGhpcyBjaGVjayBpcyBiYXNlZCBvbiB0aGUgZmFjdCB0aGF0IHVubGVzcyB0aGVyZSBhcmUgc3Vycm9nYXRlcywgdXRmOAorICAgICMgKFB5dGhvbidzIGRlZmF1bHQgZW5jb2RpbmcpIGNhbiBlbmNvZGUgYW55IHN0cmluZy4gIFRoaXMgaXMgdGhlIGZhc3Rlc3QKKyAgICAjIHdheSB0byBjaGVjayBmb3Igc3Vycm9nYXRlcywgc2VlIGlzc3VlIDExNDU0IGZvciB0aW1pbmdzLgorICAgIHRyeToKKyAgICAgICAgcy5lbmNvZGUoKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICByZXR1cm4gVHJ1ZQogCiAjIEhvdyB0byBkZWFsIHdpdGggYSBzdHJpbmcgY29udGFpbmluZyBieXRlcyBiZWZvcmUgaGFuZGluZyBpdCB0byB0aGUKICMgYXBwbGljYXRpb24gdGhyb3VnaCB0aGUgJ25vcm1hbCcgaW50ZXJmYWNlLgogZGVmIF9zYW5pdGl6ZShzdHJpbmcpOgotICAgICMgVHVybiBhbnkgZXNjYXBlZCBieXRlcyBpbnRvIHVuaWNvZGUgJ3Vua25vd24nIGNoYXIuCi0gICAgb3JpZ2luYWxfYnl0ZXMgPSBzdHJpbmcuZW5jb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQotICAgIHJldHVybiBvcmlnaW5hbF9ieXRlcy5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKQorICAgICMgVHVybiBhbnkgZXNjYXBlZCBieXRlcyBpbnRvIHVuaWNvZGUgJ3Vua25vd24nIGNoYXIuICBJZiB0aGUgZXNjYXBlZAorICAgICMgYnl0ZXMgaGFwcGVuIHRvIGJlIHV0Zi04IHRoZXkgd2lsbCBpbnN0ZWFkIGdldCBkZWNvZGVkLCBldmVuIGlmIHRoZXkKKyAgICAjIHdlcmUgaW52YWxpZCBpbiB0aGUgY2hhcnNldCB0aGUgc291cmNlIHdhcyBzdXBwb3NlZCB0byBiZSBpbi4gIFRoaXMKKyAgICAjIHNlZW1zIGxpa2UgaXQgaXMgbm90IGEgYmFkIHRoaW5nOyBhIGRlZmVjdCB3YXMgc3RpbGwgcmVnaXN0ZXJlZC4KKyAgICBvcmlnaW5hbF9ieXRlcyA9IHN0cmluZy5lbmNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgcmV0dXJuIG9yaWdpbmFsX2J5dGVzLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpCisKIAogCiAjIEhlbHBlcnMKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkgYi9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5CmluZGV4IGJmZTJjMWUuLjRlZGQ3MDggMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkKKysrIGIvTGliL2VuY29kaW5ncy9jcDAzNy5weQpAQCAtMzAxLDcgKzMwMSw2IEBACiAgICAgJ1x4ZDknICAgICAjICAweEZEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQogICAgICdceGRhJyAgICAgIyAgMHhGRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKICAgICAnXHg5ZicgICAgICMgIDB4RkYgLT4gQ09OVFJPTAotICAgICdcdWZmZmUnICAgIyMgV2lkZW4gdG8gVUNTMiBmb3Igb3B0aW1pemF0aW9uCiApCiAKICMjIyBFbmNvZGluZyB0YWJsZQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDUwMC5weSBiL0xpYi9lbmNvZGluZ3MvY3A1MDAucHkKaW5kZXggYTk3NWJlNy4uNWY2MTUzNSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9jcDUwMC5weQorKysgYi9MaWIvZW5jb2RpbmdzL2NwNTAwLnB5CkBAIC0zMDEsNyArMzAxLDYgQEAKICAgICAnXHhkOScgICAgICMgIDB4RkQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCiAgICAgJ1x4ZGEnICAgICAjICAweEZFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQogICAgICdceDlmJyAgICAgIyAgMHhGRiAtPiBDT05UUk9MCi0gICAgJ1x1ZmZmZScgICAjIyBXaWRlbiB0byBVQ1MyIGZvciBvcHRpbWl6YXRpb24KICkKIAogIyMjIEVuY29kaW5nIHRhYmxlCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2lzbzg4NTlfMS5weSBiL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5CmluZGV4IGQ5Y2M1MTYuLjhjZmMwMWYgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5CkBAIC0zMDEsNyArMzAxLDYgQEAKICAgICAnXHhmZCcgICAgICMgIDB4RkQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQogICAgICdceGZlJyAgICAgIyAgMHhGRSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKICAgICAnXHhmZicgICAgICMgIDB4RkYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKLSAgICAnXHVmZmZlJyAgICMjIFdpZGVuIHRvIFVDUzIgZm9yIG9wdGltaXphdGlvbgogKQogCiAjIyMgRW5jb2RpbmcgdGFibGUKZGlmZiAtLWdpdCBhL0xpYi9lbnVtLnB5IGIvTGliL2VudW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhODUwMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnVtLnB5CkBAIC0wLDAgKzEsNTA5IEBACitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSB0eXBlcyBpbXBvcnQgTWFwcGluZ1Byb3h5VHlwZSwgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK19fYWxsX18gPSBbJ0VudW0nLCAnSW50RW51bScsICd1bmlxdWUnXQorCisKK2RlZiBfaXNfZGVzY3JpcHRvcihvYmopOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBvYmogaXMgYSBkZXNjcmlwdG9yLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuICgKKyAgICAgICAgICAgIGhhc2F0dHIob2JqLCAnX19nZXRfXycpIG9yCisgICAgICAgICAgICBoYXNhdHRyKG9iaiwgJ19fc2V0X18nKSBvcgorICAgICAgICAgICAgaGFzYXR0cihvYmosICdfX2RlbGV0ZV9fJykpCisKKworZGVmIF9pc19kdW5kZXIobmFtZSk6CisgICAgIiIiUmV0dXJucyBUcnVlIGlmIGEgX19kdW5kZXJfXyBuYW1lLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuIChuYW1lWzoyXSA9PSBuYW1lWy0yOl0gPT0gJ19fJyBhbmQKKyAgICAgICAgICAgIG5hbWVbMjozXSAhPSAnXycgYW5kCisgICAgICAgICAgICBuYW1lWy0zOi0yXSAhPSAnXycgYW5kCisgICAgICAgICAgICBsZW4obmFtZSkgPiA0KQorCisKK2RlZiBfaXNfc3VuZGVyKG5hbWUpOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBhIF9zdW5kZXJfIG5hbWUsIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICByZXR1cm4gKG5hbWVbMF0gPT0gbmFtZVstMV0gPT0gJ18nIGFuZAorICAgICAgICAgICAgbmFtZVsxOjJdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIG5hbWVbLTI6LTFdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIGxlbihuYW1lKSA+IDIpCisKKworZGVmIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGNscyk6CisgICAgIiIiTWFrZSB0aGUgZ2l2ZW4gY2xhc3MgdW4tcGlja2xhYmxlLiIiIgorICAgIGRlZiBfYnJlYWtfb25fY2FsbF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXIgY2Fubm90IGJlIHBpY2tsZWQnICUgc2VsZikKKyAgICBjbHMuX19yZWR1Y2VfXyA9IF9icmVha19vbl9jYWxsX3JlZHVjZQorICAgIGNscy5fX21vZHVsZV9fID0gJzx1bmtub3duPicKKworCitjbGFzcyBfRW51bURpY3QoZGljdCk6CisgICAgIiIiVHJhY2sgZW51bSBtZW1iZXIgb3JkZXIgYW5kIGVuc3VyZSBtZW1iZXIgbmFtZXMgYXJlIG5vdCByZXVzZWQuCisKKyAgICBFbnVtTWV0YSB3aWxsIHVzZSB0aGUgbmFtZXMgZm91bmQgaW4gc2VsZi5fbWVtYmVyX25hbWVzIGFzIHRoZQorICAgIGVudW1lcmF0aW9uIG1lbWJlciBuYW1lcy4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX21lbWJlcl9uYW1lcyA9IFtdCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIkNoYW5nZXMgYW55dGhpbmcgbm90IGR1bmRlcmVkIG9yIG5vdCBhIGRlc2NyaXB0b3IuCisKKyAgICAgICAgSWYgYW4gZW51bSBtZW1iZXIgbmFtZSBpcyB1c2VkIHR3aWNlLCBhbiBlcnJvciBpcyByYWlzZWQ7IGR1cGxpY2F0ZQorICAgICAgICB2YWx1ZXMgYXJlIG5vdCBjaGVja2VkIGZvci4KKworICAgICAgICBTaW5nbGUgdW5kZXJzY29yZSAoc3VuZGVyKSBuYW1lcyBhcmUgcmVzZXJ2ZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIF9pc19zdW5kZXIoa2V5KToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ19uYW1lc18gYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgRW51bSB1c2UnKQorICAgICAgICBlbGlmIF9pc19kdW5kZXIoa2V5KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBrZXkgaW4gc2VsZi5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgIyBkZXNjcmlwdG9yIG92ZXJ3cml0aW5nIGFuIGVudW0/CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byByZXVzZSBrZXk6ICVyJyAlIGtleSkKKyAgICAgICAgZWxpZiBub3QgX2lzX2Rlc2NyaXB0b3IodmFsdWUpOgorICAgICAgICAgICAgaWYga2V5IGluIHNlbGY6CisgICAgICAgICAgICAgICAgIyBlbnVtIG92ZXJ3cml0aW5nIGEgZGVzY3JpcHRvcj8KKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0tleSBhbHJlYWR5IGRlZmluZWQgYXM6ICVyJyAlIHNlbGZba2V5XSkKKyAgICAgICAgICAgIHNlbGYuX21lbWJlcl9uYW1lcy5hcHBlbmQoa2V5KQorICAgICAgICBzdXBlcigpLl9fc2V0aXRlbV9fKGtleSwgdmFsdWUpCisKKworCisjIER1bW15IHZhbHVlIGZvciBFbnVtIGFzIEVudW1NZXRhIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBpdCwgYnV0IG9mIGNvdXJzZQorIyB1bnRpbCBFbnVtTWV0YSBmaW5pc2hlcyBydW5uaW5nIHRoZSBmaXJzdCB0aW1lIHRoZSBFbnVtIGNsYXNzIGRvZXNuJ3QgZXhpc3QuCisjIFRoaXMgaXMgYWxzbyB3aHkgdGhlcmUgYXJlIGNoZWNrcyBpbiBFbnVtTWV0YSBsaWtlIGBpZiBFbnVtIGlzIG5vdCBOb25lYAorRW51bSA9IE5vbmUKKworCitjbGFzcyBFbnVtTWV0YSh0eXBlKToKKyAgICAiIiJNZXRhY2xhc3MgZm9yIEVudW0iIiIKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgY2xzLCBiYXNlcyk6CisgICAgICAgIHJldHVybiBfRW51bURpY3QoKQorCisgICAgZGVmIF9fbmV3X18obWV0YWNscywgY2xzLCBiYXNlcywgY2xhc3NkaWN0KToKKyAgICAgICAgIyBhbiBFbnVtIGNsYXNzIGlzIGZpbmFsIG9uY2UgZW51bWVyYXRpb24gaXRlbXMgaGF2ZSBiZWVuIGRlZmluZWQ7IGl0CisgICAgICAgICMgY2Fubm90IGJlIG1peGVkIHdpdGggb3RoZXIgdHlwZXMgKGludCwgZmxvYXQsIGV0Yy4pIGlmIGl0IGhhcyBhbgorICAgICAgICAjIGluaGVyaXRlZCBfX25ld19fIHVubGVzcyBhIG5ldyBfX25ld19fIGlzIGRlZmluZWQgKG9yIHRoZSByZXN1bHRpbmcKKyAgICAgICAgIyBjbGFzcyB3aWxsIGZhaWwpLgorICAgICAgICBtZW1iZXJfdHlwZSwgZmlyc3RfZW51bSA9IG1ldGFjbHMuX2dldF9taXhpbnNfKGJhc2VzKQorICAgICAgICBfX25ld19fLCBzYXZlX25ldywgdXNlX2FyZ3MgPSBtZXRhY2xzLl9maW5kX25ld18oY2xhc3NkaWN0LCBtZW1iZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZW51bSkKKworICAgICAgICAjIHNhdmUgZW51bSBpdGVtcyBpbnRvIHNlcGFyYXRlIG1hcHBpbmcgc28gdGhleSBkb24ndCBnZXQgYmFrZWQgaW50bworICAgICAgICAjIHRoZSBuZXcgY2xhc3MKKyAgICAgICAgbWVtYmVycyA9IHtrOiBjbGFzc2RpY3Rba10gZm9yIGsgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXN9CisgICAgICAgIGZvciBuYW1lIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgZGVsIGNsYXNzZGljdFtuYW1lXQorCisgICAgICAgICMgY2hlY2sgZm9yIGlsbGVnYWwgZW51bSBuYW1lcyAoYW55IG90aGVycz8pCisgICAgICAgIGludmFsaWRfbmFtZXMgPSBzZXQobWVtYmVycykgJiB7J21ybycsIH0KKyAgICAgICAgaWYgaW52YWxpZF9uYW1lczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgZW51bSBtZW1iZXIgbmFtZTogezB9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgJywnLmpvaW4oaW52YWxpZF9uYW1lcykpKQorCisgICAgICAgICMgY3JlYXRlIG91ciBuZXcgRW51bSB0eXBlCisgICAgICAgIGVudW1fY2xhc3MgPSBzdXBlcigpLl9fbmV3X18obWV0YWNscywgY2xzLCBiYXNlcywgY2xhc3NkaWN0KQorICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbmFtZXNfID0gW10gICAgICAgICAgICAgICAjIG5hbWVzIGluIGRlZmluaXRpb24gb3JkZXIKKyAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX21hcF8gPSBPcmRlcmVkRGljdCgpICAgICAgIyBuYW1lLT52YWx1ZSBtYXAKKyAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX3R5cGVfID0gbWVtYmVyX3R5cGUKKworICAgICAgICAjIFJldmVyc2UgdmFsdWUtPm5hbWUgbWFwIGZvciBoYXNoYWJsZSB2YWx1ZXMuCisgICAgICAgIGVudW1fY2xhc3MuX3ZhbHVlMm1lbWJlcl9tYXBfID0ge30KKworICAgICAgICAjIGNoZWNrIGZvciBhIF9fZ2V0bmV3YXJnc19fLCBhbmQgaWYgbm90IHByZXNlbnQgc2Fib3RhZ2UKKyAgICAgICAgIyBwaWNrbGluZywgc2luY2UgaXQgd29uJ3Qgd29yayBhbnl3YXkKKyAgICAgICAgaWYgKG1lbWJlcl90eXBlIGlzIG5vdCBvYmplY3QgYW5kCisgICAgICAgICAgICBtZW1iZXJfdHlwZS5fX2RpY3RfXy5nZXQoJ19fZ2V0bmV3YXJnc19fJykgaXMgTm9uZQorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGVudW1fY2xhc3MpCisKKyAgICAgICAgIyBpbnN0YW50aWF0ZSB0aGVtLCBjaGVja2luZyBmb3IgZHVwbGljYXRlcyBhcyB3ZSBnbworICAgICAgICAjIHdlIGluc3RhbnRpYXRlIGZpcnN0IGluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIGR1cGxpY2F0ZXMgZmlyc3QgaW4gY2FzZQorICAgICAgICAjIGEgY3VzdG9tIF9fbmV3X18gaXMgZG9pbmcgc29tZXRoaW5nIGZ1bmt5IHdpdGggdGhlIHZhbHVlcyAtLSBzdWNoIGFzCisgICAgICAgICMgYXV0by1udW1iZXJpbmcgOykKKyAgICAgICAgZm9yIG1lbWJlcl9uYW1lIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgdmFsdWUgPSBtZW1iZXJzW21lbWJlcl9uYW1lXQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKToKKyAgICAgICAgICAgICAgICBhcmdzID0gKHZhbHVlLCApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ3MgPSB2YWx1ZQorICAgICAgICAgICAgaWYgbWVtYmVyX3R5cGUgaXMgdHVwbGU6ICAgIyBzcGVjaWFsIGNhc2UgZm9yIHR1cGxlIGVudW1zCisgICAgICAgICAgICAgICAgYXJncyA9IChhcmdzLCApICAgICAjIHdyYXAgaXQgb25lIG1vcmUgdGltZQorICAgICAgICAgICAgaWYgbm90IHVzZV9hcmdzOgorICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyID0gX19uZXdfXyhlbnVtX2NsYXNzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBfX25ld19fKGVudW1fY2xhc3MsICphcmdzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gbWVtYmVyX3R5cGUoKmFyZ3MpCisgICAgICAgICAgICB2YWx1ZSA9IGVudW1fbWVtYmVyLl92YWx1ZV8KKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9uYW1lXyA9IG1lbWJlcl9uYW1lCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX29iamNsYXNzX18gPSBlbnVtX2NsYXNzCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX2luaXRfXygqYXJncykKKyAgICAgICAgICAgICMgSWYgYW5vdGhlciBtZW1iZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZSB3YXMgYWxyZWFkeSBkZWZpbmVkLCB0aGUKKyAgICAgICAgICAgICMgbmV3IG1lbWJlciBiZWNvbWVzIGFuIGFsaWFzIHRvIHRoZSBleGlzdGluZyBvbmUuCisgICAgICAgICAgICBmb3IgbmFtZSwgY2Fub25pY2FsX21lbWJlciBpbiBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwXy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGNhbm9uaWNhbF9tZW1iZXIudmFsdWUgPT0gZW51bV9tZW1iZXIuX3ZhbHVlXzoKKyAgICAgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBjYW5vbmljYWxfbWVtYmVyCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQWxpYXNlcyBkb24ndCBhcHBlYXIgaW4gbWVtYmVyIG5hbWVzIChvbmx5IGluIF9fbWVtYmVyc19fKS4KKyAgICAgICAgICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbmFtZXNfLmFwcGVuZChtZW1iZXJfbmFtZSkKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9tYXBfW21lbWJlcl9uYW1lXSA9IGVudW1fbWVtYmVyCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBUaGlzIG1heSBmYWlsIGlmIHZhbHVlIGlzIG5vdCBoYXNoYWJsZS4gV2UgY2FuJ3QgYWRkIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICMgdG8gdGhlIG1hcCwgYW5kIGJ5LXZhbHVlIGxvb2t1cHMgZm9yIHRoaXMgdmFsdWUgd2lsbCBiZQorICAgICAgICAgICAgICAgICMgbGluZWFyLgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX3ZhbHVlMm1lbWJlcl9tYXBfW3ZhbHVlXSA9IGVudW1fbWVtYmVyCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIGRvdWJsZSBjaGVjayB0aGF0IHJlcHIgYW5kIGZyaWVuZHMgYXJlIG5vdCB0aGUgbWl4aW4ncyBvciB2YXJpb3VzCisgICAgICAgICMgdGhpbmdzIGJyZWFrIChzdWNoIGFzIHBpY2tsZSkKKyAgICAgICAgZm9yIG5hbWUgaW4gKCdfX3JlcHJfXycsICdfX3N0cl9fJywgJ19fZm9ybWF0X18nLCAnX19nZXRuZXdhcmdzX18nKToKKyAgICAgICAgICAgIGNsYXNzX21ldGhvZCA9IGdldGF0dHIoZW51bV9jbGFzcywgbmFtZSkKKyAgICAgICAgICAgIG9ial9tZXRob2QgPSBnZXRhdHRyKG1lbWJlcl90eXBlLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgZW51bV9tZXRob2QgPSBnZXRhdHRyKGZpcnN0X2VudW0sIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBpZiBvYmpfbWV0aG9kIGlzIG5vdCBOb25lIGFuZCBvYmpfbWV0aG9kIGlzIGNsYXNzX21ldGhvZDoKKyAgICAgICAgICAgICAgICBzZXRhdHRyKGVudW1fY2xhc3MsIG5hbWUsIGVudW1fbWV0aG9kKQorCisgICAgICAgICMgcmVwbGFjZSBhbnkgb3RoZXIgX19uZXdfXyB3aXRoIG91ciBvd24gKGFzIGxvbmcgYXMgRW51bSBpcyBub3QgTm9uZSwKKyAgICAgICAgIyBhbnl3YXkpIC0tIGFnYWluLCB0aGlzIGlzIHRvIHN1cHBvcnQgcGlja2xlCisgICAgICAgIGlmIEVudW0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGlmIHRoZSB1c2VyIGRlZmluZWQgdGhlaXIgb3duIF9fbmV3X18sIHNhdmUgaXQgYmVmb3JlIGl0IGdldHMKKyAgICAgICAgICAgICMgY2xvYmJlcmVkIGluIGNhc2UgdGhleSBzdWJjbGFzcyBsYXRlcgorICAgICAgICAgICAgaWYgc2F2ZV9uZXc6CisgICAgICAgICAgICAgICAgZW51bV9jbGFzcy5fX25ld19tZW1iZXJfXyA9IF9fbmV3X18KKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19uZXdfXyA9IEVudW0uX19uZXdfXworICAgICAgICByZXR1cm4gZW51bV9jbGFzcworCisgICAgZGVmIF9fY2FsbF9fKGNscywgdmFsdWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgICAgICAiIiJFaXRoZXIgcmV0dXJucyBhbiBleGlzdGluZyBtZW1iZXIsIG9yIGNyZWF0ZXMgYSBuZXcgZW51bSBjbGFzcy4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJvdGggd2hlbiBhbiBlbnVtIGNsYXNzIGlzIGdpdmVuIGEgdmFsdWUgdG8gbWF0Y2gKKyAgICAgICAgdG8gYW4gZW51bWVyYXRpb24gbWVtYmVyIChpLmUuIENvbG9yKDMpKSBhbmQgZm9yIHRoZSBmdW5jdGlvbmFsIEFQSQorICAgICAgICAoaS5lLiBDb2xvciA9IEVudW0oJ0NvbG9yJywgbmFtZXM9J3JlZCBncmVlbiBibHVlJykpLgorCisgICAgICAgIFdoZW4gdXNlZCBmb3IgdGhlIGZ1bmN0aW9uYWwgQVBJOiBgbW9kdWxlYCwgaWYgc2V0LCB3aWxsIGJlIHN0b3JlZCBpbgorICAgICAgICB0aGUgbmV3IGNsYXNzJyBfX21vZHVsZV9fIGF0dHJpYnV0ZTsgYHR5cGVgLCBpZiBzZXQsIHdpbGwgYmUgbWl4ZWQgaW4KKyAgICAgICAgYXMgdGhlIGZpcnN0IGJhc2UgY2xhc3MuCisKKyAgICAgICAgTm90ZTogaWYgYG1vZHVsZWAgaXMgbm90IHNldCB0aGlzIHJvdXRpbmUgd2lsbCBhdHRlbXB0IHRvIGRpc2NvdmVyIHRoZQorICAgICAgICBjYWxsaW5nIG1vZHVsZSBieSB3YWxraW5nIHRoZSBmcmFtZSBzdGFjazsgaWYgdGhpcyBpcyB1bnN1Y2Nlc3NmdWwKKyAgICAgICAgdGhlIHJlc3VsdGluZyBjbGFzcyB3aWxsIG5vdCBiZSBwaWNrbGVhYmxlLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBuYW1lcyBpcyBOb25lOiAgIyBzaW1wbGUgdmFsdWUgbG9va3VwCisgICAgICAgICAgICByZXR1cm4gY2xzLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgIyBvdGhlcndpc2UsIGZ1bmN0aW9uYWwgQVBJOiB3ZSdyZSBjcmVhdGluZyBhIG5ldyBFbnVtIHR5cGUKKyAgICAgICAgcmV0dXJuIGNscy5fY3JlYXRlXyh2YWx1ZSwgbmFtZXMsIG1vZHVsZT1tb2R1bGUsIHR5cGU9dHlwZSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oY2xzLCBtZW1iZXIpOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShtZW1iZXIsIGNscykgYW5kIG1lbWJlci5uYW1lIGluIGNscy5fbWVtYmVyX21hcF8KKworICAgIGRlZiBfX2RlbGF0dHJfXyhjbHMsIGF0dHIpOgorICAgICAgICAjIG5pY2VyIGVycm9yIG1lc3NhZ2Ugd2hlbiBzb21lb25lIHRyaWVzIHRvIGRlbGV0ZSBhbiBhdHRyaWJ1dGUKKyAgICAgICAgIyAoc2VlIGlzc3VlMTkwMjUpLgorICAgICAgICBpZiBhdHRyIGluIGNscy5fbWVtYmVyX21hcF86CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIiVzOiBjYW5ub3QgZGVsZXRlIEVudW0gbWVtYmVyLiIgJSBjbHMuX19uYW1lX18pCisgICAgICAgIHN1cGVyKCkuX19kZWxhdHRyX18oYXR0cikKKworICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXyddICsKKyAgICAgICAgICAgICAgICBzZWxmLl9tZW1iZXJfbmFtZXNfKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKGNscywgbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgZW51bSBtZW1iZXIgbWF0Y2hpbmcgYG5hbWVgCisKKyAgICAgICAgV2UgdXNlIF9fZ2V0YXR0cl9fIGluc3RlYWQgb2YgZGVzY3JpcHRvcnMgb3IgaW5zZXJ0aW5nIGludG8gdGhlIGVudW0KKyAgICAgICAgY2xhc3MnIF9fZGljdF9fIGluIG9yZGVyIHRvIHN1cHBvcnQgYG5hbWVgIGFuZCBgdmFsdWVgIGJlaW5nIGJvdGgKKyAgICAgICAgcHJvcGVydGllcyBmb3IgZW51bSBtZW1iZXJzICh3aGljaCBsaXZlIGluIHRoZSBjbGFzcycgX19kaWN0X18pIGFuZAorICAgICAgICBlbnVtIG1lbWJlcnMgdGhlbXNlbHZlcy4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgX2lzX2R1bmRlcihuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpIGZyb20gTm9uZQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKGNscywgbmFtZSk6CisgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisKKyAgICBkZWYgX19pdGVyX18oY2xzKToKKyAgICAgICAgcmV0dXJuIChjbHMuX21lbWJlcl9tYXBfW25hbWVdIGZvciBuYW1lIGluIGNscy5fbWVtYmVyX25hbWVzXykKKworICAgIGRlZiBfX2xlbl9fKGNscyk6CisgICAgICAgIHJldHVybiBsZW4oY2xzLl9tZW1iZXJfbmFtZXNfKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9fbWVtYmVyc19fKGNscyk6CisgICAgICAgICIiIlJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKworICAgICAgICBUaGlzIG1hcHBpbmcgbGlzdHMgYWxsIGVudW0gbWVtYmVycywgaW5jbHVkaW5nIGFsaWFzZXMuIE5vdGUgdGhhdCB0aGlzCisgICAgICAgIGlzIGEgcmVhZC1vbmx5IHZpZXcgb2YgdGhlIGludGVybmFsIG1hcHBpbmcuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBNYXBwaW5nUHJveHlUeXBlKGNscy5fbWVtYmVyX21hcF8pCisKKyAgICBkZWYgX19yZXByX18oY2xzKToKKyAgICAgICAgcmV0dXJuICI8ZW51bSAlcj4iICUgY2xzLl9fbmFtZV9fCisKKyAgICBkZWYgX19yZXZlcnNlZF9fKGNscyk6CisgICAgICAgIHJldHVybiAoY2xzLl9tZW1iZXJfbWFwX1tuYW1lXSBmb3IgbmFtZSBpbiByZXZlcnNlZChjbHMuX21lbWJlcl9uYW1lc18pKQorCisgICAgZGVmIF9fc2V0YXR0cl9fKGNscywgbmFtZSwgdmFsdWUpOgorICAgICAgICAiIiJCbG9jayBhdHRlbXB0cyB0byByZWFzc2lnbiBFbnVtIG1lbWJlcnMuCisKKyAgICAgICAgQSBzaW1wbGUgYXNzaWdubWVudCB0byB0aGUgY2xhc3MgbmFtZXNwYWNlIG9ubHkgY2hhbmdlcyBvbmUgb2YgdGhlCisgICAgICAgIHNldmVyYWwgcG9zc2libGUgd2F5cyB0byBnZXQgYW4gRW51bSBtZW1iZXIgZnJvbSB0aGUgRW51bSBjbGFzcywKKyAgICAgICAgcmVzdWx0aW5nIGluIGFuIGluY29uc2lzdGVudCBFbnVtZXJhdGlvbi4KKworICAgICAgICAiIiIKKyAgICAgICAgbWVtYmVyX21hcCA9IGNscy5fX2RpY3RfXy5nZXQoJ19tZW1iZXJfbWFwXycsIHt9KQorICAgICAgICBpZiBuYW1lIGluIG1lbWJlcl9tYXA6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignQ2Fubm90IHJlYXNzaWduIG1lbWJlcnMuJykKKyAgICAgICAgc3VwZXIoKS5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBfY3JlYXRlXyhjbHMsIGNsYXNzX25hbWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgICAgICAiIiJDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IEVudW0gY2xhc3MuCisKKyAgICAgICAgYG5hbWVzYCBjYW4gYmU6CisKKyAgICAgICAgKiBBIHN0cmluZyBjb250YWluaW5nIG1lbWJlciBuYW1lcywgc2VwYXJhdGVkIGVpdGhlciB3aXRoIHNwYWNlcyBvcgorICAgICAgICAgIGNvbW1hcy4gIFZhbHVlcyBhcmUgYXV0by1udW1iZXJlZCBmcm9tIDEuCisgICAgICAgICogQW4gaXRlcmFibGUgb2YgbWVtYmVyIG5hbWVzLiAgVmFsdWVzIGFyZSBhdXRvLW51bWJlcmVkIGZyb20gMS4KKyAgICAgICAgKiBBbiBpdGVyYWJsZSBvZiAobWVtYmVyIG5hbWUsIHZhbHVlKSBwYWlycy4KKyAgICAgICAgKiBBIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUgLT4gdmFsdWUuCisKKyAgICAgICAgIiIiCisgICAgICAgIG1ldGFjbHMgPSBjbHMuX19jbGFzc19fCisgICAgICAgIGJhc2VzID0gKGNscywgKSBpZiB0eXBlIGlzIE5vbmUgZWxzZSAodHlwZSwgY2xzKQorICAgICAgICBjbGFzc2RpY3QgPSBtZXRhY2xzLl9fcHJlcGFyZV9fKGNsYXNzX25hbWUsIGJhc2VzKQorCisgICAgICAgICMgc3BlY2lhbCBwcm9jZXNzaW5nIG5lZWRlZCBmb3IgbmFtZXM/CisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZXMsIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IG5hbWVzLnJlcGxhY2UoJywnLCAnICcpLnNwbGl0KCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lcywgKHR1cGxlLCBsaXN0KSkgYW5kIGlzaW5zdGFuY2UobmFtZXNbMF0sIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IFsoZSwgaSkgZm9yIChpLCBlKSBpbiBlbnVtZXJhdGUobmFtZXMsIDEpXQorCisgICAgICAgICMgSGVyZSwgbmFtZXMgaXMgZWl0aGVyIGFuIGl0ZXJhYmxlIG9mIChuYW1lLCB2YWx1ZSkgb3IgYSBtYXBwaW5nLgorICAgICAgICBmb3IgaXRlbSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgc3RyKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSwgbWVtYmVyX3ZhbHVlID0gaXRlbSwgbmFtZXNbaXRlbV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX25hbWUsIG1lbWJlcl92YWx1ZSA9IGl0ZW0KKyAgICAgICAgICAgIGNsYXNzZGljdFttZW1iZXJfbmFtZV0gPSBtZW1iZXJfdmFsdWUKKyAgICAgICAgZW51bV9jbGFzcyA9IG1ldGFjbHMuX19uZXdfXyhtZXRhY2xzLCBjbGFzc19uYW1lLCBiYXNlcywgY2xhc3NkaWN0KQorCisgICAgICAgICMgVE9ETzogcmVwbGFjZSB0aGUgZnJhbWUgaGFjayBpZiBhIGJsZXNzZWQgd2F5IHRvIGtub3cgdGhlIGNhbGxpbmcKKyAgICAgICAgIyBtb2R1bGUgaXMgZXZlciBkZXZlbG9wZWQKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc3lzLl9nZXRmcmFtZSgyKS5mX2dsb2JhbHNbJ19fbmFtZV9fJ10KKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgX21ha2VfY2xhc3NfdW5waWNrbGFibGUoZW51bV9jbGFzcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19tb2R1bGVfXyA9IG1vZHVsZQorCisgICAgICAgIHJldHVybiBlbnVtX2NsYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfbWl4aW5zXyhiYXNlcyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHR5cGUgZm9yIGNyZWF0aW5nIGVudW0gbWVtYmVycywgYW5kIHRoZSBmaXJzdCBpbmhlcml0ZWQKKyAgICAgICAgZW51bSBjbGFzcy4KKworICAgICAgICBiYXNlczogdGhlIHR1cGxlIG9mIGJhc2VzIHRoYXQgd2FzIGdpdmVuIHRvIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJhc2VzOgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdCwgRW51bQorCisgICAgICAgICMgZG91YmxlIGNoZWNrIHRoYXQgd2UgYXJlIG5vdCBzdWJjbGFzc2luZyBhIGNsYXNzIHdpdGggZXhpc3RpbmcKKyAgICAgICAgIyBlbnVtZXJhdGlvbiBtZW1iZXJzOyB3aGlsZSB3ZSdyZSBhdCBpdCwgc2VlIGlmIGFueSBvdGhlciBkYXRhCisgICAgICAgICMgdHlwZSBoYXMgYmVlbiBtaXhlZCBpbiBzbyB3ZSBjYW4gdXNlIHRoZSBjb3JyZWN0IF9fbmV3X18KKyAgICAgICAgbWVtYmVyX3R5cGUgPSBmaXJzdF9lbnVtID0gTm9uZQorICAgICAgICBmb3IgYmFzZSBpbiBiYXNlczoKKyAgICAgICAgICAgIGlmICAoYmFzZSBpcyBub3QgRW51bSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgYmFzZS5fbWVtYmVyX25hbWVzXyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgZXh0ZW5kIGVudW1lcmF0aW9ucyIpCisgICAgICAgICMgYmFzZSBpcyBub3cgdGhlIGxhc3QgYmFzZSBpbiBiYXNlcworICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmV3IGVudW1lcmF0aW9ucyBtdXN0IGJlIGNyZWF0ZWQgYXMgIgorICAgICAgICAgICAgICAgICAgICAiYENsYXNzTmFtZShbbWl4aW5fdHlwZSxdIGVudW1fdHlwZSlgIikKKworICAgICAgICAjIGdldCBjb3JyZWN0IG1peC1pbiB0eXBlIChlaXRoZXIgbWl4LWluIHR5cGUgb2YgRW51bSBzdWJjbGFzcywgb3IKKyAgICAgICAgIyBmaXJzdCBiYXNlIGlmIGxhc3QgYmFzZSBpcyBFbnVtKQorICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlc1swXSwgRW51bSk6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2VzWzBdICAgICAjIGZpcnN0IGRhdGEgdHlwZQorICAgICAgICAgICAgZmlyc3RfZW51bSA9IGJhc2VzWy0xXSAgIyBlbnVtIHR5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBiYXNlIGluIGJhc2VzWzBdLl9fbXJvX186CisgICAgICAgICAgICAgICAgIyBtb3N0IGNvbW1vbjogKEludEVudW0sIGludCwgRW51bSwgb2JqZWN0KQorICAgICAgICAgICAgICAgICMgcG9zc2libGU6ICAgICg8RW51bSAnQXV0b0ludEVudW0nPiwgPEVudW0gJ0ludEVudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdpbnQnPiwgPEVudW0gJ0VudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdvYmplY3QnPikKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGJhc2UsIEVudW0pOgorICAgICAgICAgICAgICAgICAgICBpZiBmaXJzdF9lbnVtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9lbnVtID0gYmFzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG1lbWJlcl90eXBlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2UKKworICAgICAgICByZXR1cm4gbWVtYmVyX3R5cGUsIGZpcnN0X2VudW0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2ZpbmRfbmV3XyhjbGFzc2RpY3QsIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgX19uZXdfXyB0byBiZSB1c2VkIGZvciBjcmVhdGluZyB0aGUgZW51bSBtZW1iZXJzLgorCisgICAgICAgIGNsYXNzZGljdDogdGhlIGNsYXNzIGRpY3Rpb25hcnkgZ2l2ZW4gdG8gX19uZXdfXworICAgICAgICBtZW1iZXJfdHlwZTogdGhlIGRhdGEgdHlwZSB3aG9zZSBfX25ld19fIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0CisgICAgICAgIGZpcnN0X2VudW06IGVudW1lcmF0aW9uIHRvIGNoZWNrIGZvciBhbiBvdmVycmlkaW5nIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgIyBub3cgZmluZCB0aGUgY29ycmVjdCBfX25ld19fLCBjaGVja2luZyB0byBzZWUgb2Ygb25lIHdhcyBkZWZpbmVkCisgICAgICAgICMgYnkgdGhlIHVzZXI7IGFsc28gY2hlY2sgZWFybGllciBlbnVtIGNsYXNzZXMgaW4gY2FzZSBhIF9fbmV3X18gd2FzCisgICAgICAgICMgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18KKyAgICAgICAgX19uZXdfXyA9IGNsYXNzZGljdC5nZXQoJ19fbmV3X18nLCBOb25lKQorCisgICAgICAgICMgc2hvdWxkIF9fbmV3X18gYmUgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18gbGF0ZXI/CisgICAgICAgIHNhdmVfbmV3ID0gX19uZXdfXyBpcyBub3QgTm9uZQorCisgICAgICAgIGlmIF9fbmV3X18gaXMgTm9uZToKKyAgICAgICAgICAgICMgY2hlY2sgYWxsIHBvc3NpYmxlcyBmb3IgX19uZXdfbWVtYmVyX18gYmVmb3JlIGZhbGxpbmcgYmFjayB0bworICAgICAgICAgICAgIyBfX25ld19fCisgICAgICAgICAgICBmb3IgbWV0aG9kIGluICgnX19uZXdfbWVtYmVyX18nLCAnX19uZXdfXycpOgorICAgICAgICAgICAgICAgIGZvciBwb3NzaWJsZSBpbiAobWVtYmVyX3R5cGUsIGZpcnN0X2VudW0pOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBnZXRhdHRyKHBvc3NpYmxlLCBtZXRob2QsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldCBub3QgaW4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZS5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW0uX19uZXdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OgorICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfXyA9IHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBfX25ld19fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfX25ld19fID0gb2JqZWN0Ll9fbmV3X18KKworICAgICAgICAjIGlmIGEgbm9uLW9iamVjdC5fX25ld19fIGlzIHVzZWQgdGhlbiB3aGF0ZXZlciB2YWx1ZS90dXBsZSB3YXMKKyAgICAgICAgIyBhc3NpZ25lZCB0byB0aGUgZW51bSBtZW1iZXIgbmFtZSB3aWxsIGJlIHBhc3NlZCB0byBfX25ld19fIGFuZCB0byB0aGUKKyAgICAgICAgIyBuZXcgZW51bSBtZW1iZXIncyBfX2luaXRfXworICAgICAgICBpZiBfX25ld19fIGlzIG9iamVjdC5fX25ld19fOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIF9fbmV3X18sIHNhdmVfbmV3LCB1c2VfYXJncworCisKK2NsYXNzIEVudW0obWV0YWNsYXNzPUVudW1NZXRhKToKKyAgICAiIiJHZW5lcmljIGVudW1lcmF0aW9uLgorCisgICAgRGVyaXZlIGZyb20gdGhpcyBjbGFzcyB0byBkZWZpbmUgbmV3IGVudW1lcmF0aW9ucy4KKworICAgICIiIgorICAgIGRlZiBfX25ld19fKGNscywgdmFsdWUpOgorICAgICAgICAjIGFsbCBlbnVtIGluc3RhbmNlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZCBkdXJpbmcgY2xhc3MgY29uc3RydWN0aW9uCisgICAgICAgICMgd2l0aG91dCBjYWxsaW5nIHRoaXMgbWV0aG9kOyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIG1ldGFjbGFzcycKKyAgICAgICAgIyBfX2NhbGxfXyAoaS5lLiBDb2xvcigzKSApLCBhbmQgYnkgcGlja2xlCisgICAgICAgIGlmIHR5cGUodmFsdWUpIGlzIGNsczoKKyAgICAgICAgICAgICMgRm9yIGxvb2t1cHMgbGlrZSBDb2xvcihDb2xvci5yZWQpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgIyBieS12YWx1ZSBzZWFyY2ggZm9yIGEgbWF0Y2hpbmcgZW51bSBtZW1iZXIKKyAgICAgICAgIyBzZWUgaWYgaXQncyBpbiB0aGUgcmV2ZXJzZSBtYXBwaW5nIChmb3IgaGFzaGFibGUgdmFsdWVzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfW3ZhbHVlXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBub3QgdGhlcmUsIG5vdyBkbyBsb25nIHNlYXJjaCAtLSBPKG4pIGJlaGF2aW9yCisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGNscy5fbWVtYmVyX21hcF8udmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgbWVtYmVyLnZhbHVlID09IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtYmVyCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGlzIG5vdCBhIHZhbGlkICVzIiAlICh2YWx1ZSwgY2xzLl9fbmFtZV9fKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXM6ICVyPiIgJSAoCisgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfLCBzZWxmLl92YWx1ZV8pCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfKQorCisgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgIGFkZGVkX2JlaGF2aW9yID0gW20gZm9yIG0gaW4gc2VsZi5fX2NsYXNzX18uX19kaWN0X18gaWYgbVswXSAhPSAnXyddCisgICAgICAgIHJldHVybiAoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSArCisgICAgICAgICAgICAgICAgYWRkZWRfYmVoYXZpb3IpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgdHlwZShvdGhlcikgaXMgc2VsZi5fX2NsYXNzX186CisgICAgICAgICAgICByZXR1cm4gc2VsZiBpcyBvdGhlcgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgIyBtaXhlZC1pbiBFbnVtcyBzaG91bGQgdXNlIHRoZSBtaXhlZC1pbiB0eXBlJ3MgX19mb3JtYXRfXywgb3RoZXJ3aXNlCisgICAgICAgICMgd2UgY2FuIGdldCBzdHJhbmdlIHJlc3VsdHMgd2l0aCB0aGUgRW51bSBuYW1lIHNob3dpbmcgdXAgaW5zdGVhZCBvZgorICAgICAgICAjIHRoZSB2YWx1ZQorCisgICAgICAgICMgcHVyZSBFbnVtIGJyYW5jaAorICAgICAgICBpZiBzZWxmLl9tZW1iZXJfdHlwZV8gaXMgb2JqZWN0OgorICAgICAgICAgICAgY2xzID0gc3RyCisgICAgICAgICAgICB2YWwgPSBzdHIoc2VsZikKKyAgICAgICAgIyBtaXgtaW4gYnJhbmNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbHMgPSBzZWxmLl9tZW1iZXJfdHlwZV8KKyAgICAgICAgICAgIHZhbCA9IHNlbGYudmFsdWUKKyAgICAgICAgcmV0dXJuIGNscy5fX2Zvcm1hdF9fKHZhbCwgZm9ybWF0X3NwZWMpCisKKyAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fdmFsdWVfLCApCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX25hbWVfKQorCisgICAgIyBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgaXMgdXNlZCB0byBwcm92aWRlIGFjY2VzcyB0byB0aGUgYG5hbWVgIGFuZAorICAgICMgYHZhbHVlYCBwcm9wZXJ0aWVzIG9mIGVudW0gbWVtYmVycyB3aGlsZSBrZWVwaW5nIHNvbWUgbWVhc3VyZSBvZgorICAgICMgcHJvdGVjdGlvbiBmcm9tIG1vZGlmaWNhdGlvbiwgd2hpbGUgc3RpbGwgYWxsb3dpbmcgZm9yIGFuIGVudW1lcmF0aW9uCisgICAgIyB0byBoYXZlIG1lbWJlcnMgbmFtZWQgYG5hbWVgIGFuZCBgdmFsdWVgLiAgVGhpcyB3b3JrcyBiZWNhdXNlIGVudW1lcmF0aW9uCisgICAgIyBtZW1iZXJzIGFyZSBub3Qgc2V0IGRpcmVjdGx5IG9uIHRoZSBlbnVtIGNsYXNzIC0tIF9fZ2V0YXR0cl9fIGlzCisgICAgIyB1c2VkIHRvIGxvb2sgdGhlbSB1cC4KKworICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgIiIiVGhlIG5hbWUgb2YgdGhlIEVudW0gbWVtYmVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZV8KKworICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgdmFsdWUoc2VsZik6CisgICAgICAgICIiIlRoZSB2YWx1ZSBvZiB0aGUgRW51bSBtZW1iZXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8KKworCitjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgIiIiRW51bSB3aGVyZSBtZW1iZXJzIGFyZSBhbHNvIChhbmQgbXVzdCBiZSkgaW50cyIiIgorCisKK2RlZiB1bmlxdWUoZW51bWVyYXRpb24pOgorICAgICIiIkNsYXNzIGRlY29yYXRvciBmb3IgZW51bWVyYXRpb25zIGVuc3VyaW5nIHVuaXF1ZSBtZW1iZXIgdmFsdWVzLiIiIgorICAgIGR1cGxpY2F0ZXMgPSBbXQorICAgIGZvciBuYW1lLCBtZW1iZXIgaW4gZW51bWVyYXRpb24uX19tZW1iZXJzX18uaXRlbXMoKToKKyAgICAgICAgaWYgbmFtZSAhPSBtZW1iZXIubmFtZToKKyAgICAgICAgICAgIGR1cGxpY2F0ZXMuYXBwZW5kKChuYW1lLCBtZW1iZXIubmFtZSkpCisgICAgaWYgZHVwbGljYXRlczoKKyAgICAgICAgYWxpYXNfZGV0YWlscyA9ICcsICcuam9pbigKKyAgICAgICAgICAgICAgICBbIiVzIC0+ICVzIiAlIChhbGlhcywgbmFtZSkgZm9yIChhbGlhcywgbmFtZSkgaW4gZHVwbGljYXRlc10pCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2R1cGxpY2F0ZSB2YWx1ZXMgZm91bmQgaW4gJXI6ICVzJyAlCisgICAgICAgICAgICAgICAgKGVudW1lcmF0aW9uLCBhbGlhc19kZXRhaWxzKSkKKyAgICByZXR1cm4gZW51bWVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi9maWxlY21wLnB5IGIvTGliL2ZpbGVjbXAucHkKaW5kZXggZjVjZWExZC4uMzI4NTI4OCAxMDA2NDQKLS0tIGEvTGliL2ZpbGVjbXAucHkKKysrIGIvTGliL2ZpbGVjbXAucHkKQEAgLTYsNiArNiw3IEBACiBGdW5jdGlvbnM6CiAgICAgY21wKGYxLCBmMiwgc2hhbGxvdz1UcnVlKSAtPiBpbnQKICAgICBjbXBmaWxlcyhhLCBiLCBjb21tb24pIC0+IChbXSwgW10sIFtdKQorICAgIGNsZWFyX2NhY2hlKCkKIAogIiIiCiAKQEAgLTEzLDExICsxNCwxOCBAQAogaW1wb3J0IHN0YXQKIGZyb20gaXRlcnRvb2xzIGltcG9ydCBmaWx0ZXJmYWxzZQogCi1fX2FsbF9fID0gWyJjbXAiLCAiZGlyY21wIiwgImNtcGZpbGVzIl0KK19fYWxsX18gPSBbJ2NsZWFyX2NhY2hlJywgJ2NtcCcsICdkaXJjbXAnLCAnY21wZmlsZXMnLCAnREVGQVVMVF9JR05PUkVTJ10KIAogX2NhY2hlID0ge30KIEJVRlNJWkUgPSA4KjEwMjQKIAorREVGQVVMVF9JR05PUkVTID0gWworICAgICdSQ1MnLCAnQ1ZTJywgJ3RhZ3MnLCAnLmdpdCcsICcuaGcnLCAnLmJ6cicsICdfZGFyY3MnLCAnX19weWNhY2hlX18nXQorCitkZWYgY2xlYXJfY2FjaGUoKToKKyAgICAiIiJDbGVhciB0aGUgZmlsZWNtcCBjYWNoZS4iIiIKKyAgICBfY2FjaGUuY2xlYXIoKQorCiBkZWYgY21wKGYxLCBmMiwgc2hhbGxvdz1UcnVlKToKICAgICAiIiJDb21wYXJlIHR3byBmaWxlcy4KIApAQCAtMzUsNyArNDMsOCBAQAogICAgIFRydWUgaWYgdGhlIGZpbGVzIGFyZSB0aGUgc2FtZSwgRmFsc2Ugb3RoZXJ3aXNlLgogCiAgICAgVGhpcyBmdW5jdGlvbiB1c2VzIGEgY2FjaGUgZm9yIHBhc3QgY29tcGFyaXNvbnMgYW5kIHRoZSByZXN1bHRzLAotICAgIHdpdGggYSBjYWNoZSBpbnZhbGlkYXRpb24gbWVjaGFuaXNtIHJlbHlpbmcgb24gc3RhbGUgc2lnbmF0dXJlcy4KKyAgICB3aXRoIGEgY2FjaGUgaW52YWxpZGF0aW9uIG1lY2hhbmlzbSByZWx5aW5nIG9uIHN0YWxlIHNpZ25hdHVyZXMKKyAgICBvciBieSBleHBsaWNpdGx5IGNhbGxpbmcgY2xlYXJfY2FjaGUoKS4KIAogICAgICIiIgogCkBAIC01Miw3ICs2MSw3IEBACiAgICAgaWYgb3V0Y29tZSBpcyBOb25lOgogICAgICAgICBvdXRjb21lID0gX2RvX2NtcChmMSwgZjIpCiAgICAgICAgIGlmIGxlbihfY2FjaGUpID4gMTAwOiAgICAgICMgbGltaXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgY2FjaGUKLSAgICAgICAgICAgIF9jYWNoZS5jbGVhcigpCisgICAgICAgICAgICBjbGVhcl9jYWNoZSgpCiAgICAgICAgIF9jYWNoZVtmMSwgZjIsIHMxLCBzMl0gPSBvdXRjb21lCiAgICAgcmV0dXJuIG91dGNvbWUKIApAQCAtODAsNyArODksNyBAQAogICAgIGRpcmNtcChhLCBiLCBpZ25vcmU9Tm9uZSwgaGlkZT1Ob25lKQogICAgICAgQSBhbmQgQiBhcmUgZGlyZWN0b3JpZXMuCiAgICAgICBJR05PUkUgaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGlnbm9yZSwKLSAgICAgICAgZGVmYXVsdHMgdG8gWydSQ1MnLCAnQ1ZTJywgJ3RhZ3MnXS4KKyAgICAgICAgZGVmYXVsdHMgdG8gREVGQVVMVF9JR05PUkVTLgogICAgICAgSElERSBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwKICAgICAgICAgZGVmYXVsdHMgdG8gW29zLmN1cmRpciwgb3MucGFyZGlyXS4KIApAQCAtMTE2LDcgKzEyNSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmhpZGUgPSBoaWRlCiAgICAgICAgIGlmIGlnbm9yZSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBbJ1JDUycsICdDVlMnLCAndGFncyddICMgTmFtZXMgaWdub3JlZCBpbiBjb21wYXJpc29uCisgICAgICAgICAgICBzZWxmLmlnbm9yZSA9IERFRkFVTFRfSUdOT1JFUwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBpZ25vcmUKIApAQCAtMTQ3LDEyICsxNTYsMTIgQEAKICAgICAgICAgICAgIG9rID0gMQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGFfc3RhdCA9IG9zLnN0YXQoYV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIHdoeToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICAgICAjIHByaW50KCdDYW5cJ3Qgc3RhdCcsIGFfcGF0aCwgJzonLCB3aHkuYXJnc1sxXSkKICAgICAgICAgICAgICAgICBvayA9IDAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBiX3N0YXQgPSBvcy5zdGF0KGJfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgIyBwcmludCgnQ2FuXCd0IHN0YXQnLCBiX3BhdGgsICc6Jywgd2h5LmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgb2sgPSAwCiAKQEAgLTI2OCw3ICsyNzcsNyBAQAogZGVmIF9jbXAoYSwgYiwgc2gsIGFicz1hYnMsIGNtcD1jbXApOgogICAgIHRyeToKICAgICAgICAgcmV0dXJuIG5vdCBhYnMoY21wKGEsIGIsIHNoKSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiAyCiAKIApkaWZmIC0tZ2l0IGEvTGliL2ZpbGVpbnB1dC5weSBiL0xpYi9maWxlaW5wdXQucHkKaW5kZXggODc5YTBmZC4uMzIxNTE1NCAxMDA2NDQKLS0tIGEvTGliL2ZpbGVpbnB1dC5weQorKysgYi9MaWIvZmlsZWlucHV0LnB5CkBAIC0zMCw3ICszMCw3IEBACiAKIEFsbCBmaWxlcyBhcmUgb3BlbmVkIGluIHRleHQgbW9kZSBieSBkZWZhdWx0LCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkKIHNldHRpbmcgdGhlIG1vZGUgcGFyYW1ldGVyIHRvIGlucHV0KCkgb3IgRmlsZUlucHV0Ll9faW5pdF9fKCkuCi1JZiBhbiBJL08gZXJyb3Igb2NjdXJzIGR1cmluZyBvcGVuaW5nIG9yIHJlYWRpbmcgYSBmaWxlLCB0aGUgSU9FcnJvcgorSWYgYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgb3BlbmluZyBvciByZWFkaW5nIGEgZmlsZSwgdGhlIE9TRXJyb3IKIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIElmIHN5cy5zdGRpbiBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlLCB0aGUgc2Vjb25kIGFuZCBmdXJ0aGVyIHVzZSB3aWxsCkBAIC0zMjIsOSArMzIyLDExIEBACiAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wbGFjZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSArIChzZWxmLl9iYWNrdXAgb3IgIi5iYWsiKSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjogcGFzcwotICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgT1NFcnJvcgogICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5fZmlsZW5hbWUsIHNlbGYuX2JhY2t1cGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9iYWNrdXBmaWxlbmFtZSwgc2VsZi5fbW9kZSkKICAgICAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMzQ2LDcgKzM0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vdXRwdXQKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1heSByYWlzZSBPU0Vycm9yCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wZW5ob29rOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHNlbGYuX29wZW5ob29rKHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2Zvcm1hdHRlci5weSBiL0xpYi9mb3JtYXR0ZXIucHkKaW5kZXggNjBlNjBmMS4uZDhjY2E1MiAxMDA2NDQKLS0tIGEvTGliL2Zvcm1hdHRlci5weQorKysgYi9MaWIvZm9ybWF0dGVyLnB5CkBAIC0xOSw2ICsxOSw5IEBACiAiIiIKIAogaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy53YXJuKCd0aGUgZm9ybWF0dGVyIG1vZHVsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJworICAgICAgICAgICAgICAnUHl0aG9uIDMuNicsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKIAogQVNfSVMgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvZnJhY3Rpb25zLnB5IGIvTGliL2ZyYWN0aW9ucy5weQppbmRleCA4YmU1MmQyLi43OWU4M2ZmIDEwMDY0NAotLS0gYS9MaWIvZnJhY3Rpb25zLnB5CisrKyBiL0xpYi9mcmFjdGlvbnMucHkKQEAgLTE4Miw4ICsxODIsMTAgQEAKICAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShmLCBmbG9hdCk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzLmZyb21fZmxvYXQoKSBvbmx5IHRha2VzIGZsb2F0cywgbm90ICVyICglcykiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xzLl9fbmFtZV9fLCBmLCB0eXBlKGYpLl9fbmFtZV9fKSkKLSAgICAgICAgaWYgbWF0aC5pc25hbihmKSBvciBtYXRoLmlzaW5mKGYpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIG1hdGguaXNuYW4oZik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIG1hdGguaXNpbmYoZik6CisgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCiAgICAgICAgIHJldHVybiBjbHMoKmYuYXNfaW50ZWdlcl9yYXRpbygpKQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0xOTYsOSArMTk4LDExIEBACiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgIiVzLmZyb21fZGVjaW1hbCgpIG9ubHkgdGFrZXMgRGVjaW1hbHMsIG5vdCAlciAoJXMpIiAlCiAgICAgICAgICAgICAgICAgKGNscy5fX25hbWVfXywgZGVjLCB0eXBlKGRlYykuX19uYW1lX18pKQotICAgICAgICBpZiBub3QgZGVjLmlzX2Zpbml0ZSgpOgotICAgICAgICAgICAgIyBDYXRjaGVzIGluZmluaXRpZXMgYW5kIG5hbnMuCi0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQorICAgICAgICBpZiBkZWMuaXNfaW5maW5pdGUoKToKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoCisgICAgICAgICAgICAgICAgIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQorICAgICAgICBpZiBkZWMuaXNfbmFuKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCAlcyB0byAlcy4iICUgKGRlYywgY2xzLl9fbmFtZV9fKSkKICAgICAgICAgc2lnbiwgZGlnaXRzLCBleHAgPSBkZWMuYXNfdHVwbGUoKQogICAgICAgICBkaWdpdHMgPSBpbnQoJycuam9pbihtYXAoc3RyLCBkaWdpdHMpKSkKICAgICAgICAgaWYgc2lnbjoKZGlmZiAtLWdpdCBhL0xpYi9mdHBsaWIucHkgYi9MaWIvZnRwbGliLnB5CmluZGV4IDVlNzVlNmQuLjk1MzhmZWMgMTAwNjQ0Ci0tLSBhL0xpYi9mdHBsaWIucHkKKysrIGIvTGliL2Z0cGxpYi5weQpAQCAtMzksOSArMzksMTAgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHNvY2tldAoraW1wb3J0IHdhcm5pbmdzCiBmcm9tIHNvY2tldCBpbXBvcnQgX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQKIAotX19hbGxfXyA9IFsiRlRQIiwiTmV0cmMiXQorX19hbGxfXyA9IFsiRlRQIiwgIk5ldHJjIl0KIAogIyBNYWdpYyBudW1iZXIgZnJvbSA8c29ja2V0Lmg+CiBNU0dfT09CID0gMHgxICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm9jZXNzIGRhdGEgb3V0IG9mIGJhbmQKQEAgLTYzLDcgKzY0LDcgQEAKIAogIyBBbGwgZXhjZXB0aW9ucyAoaG9wZWZ1bGx5KSB0aGF0IG1heSBiZSByYWlzZWQgaGVyZSBhbmQgdGhhdCBhcmVuJ3QKICMgKGFsd2F5cykgcHJvZ3JhbW1pbmcgZXJyb3JzIG9uIG91ciBzaWRlCi1hbGxfZXJyb3JzID0gKEVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvcikKK2FsbF9lcnJvcnMgPSAoRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yKQogCiAKICMgTGluZSB0ZXJtaW5hdG9ycyAod2UgYWx3YXlzIG91dHB1dCBDUkxGLCBidXQgYWNjZXB0IGFueSBvZiBDUkxGLCBDUiwgTEYpCkBAIC0xMjYsNyArMTI3LDcgQEAKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYucXVpdCgpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNvY2sgaXMgbm90IE5vbmU6CkBAIC0xMzYsNiArMTM3LDcgQEAKICAgICAgICAgJycnQ29ubmVjdCB0byBob3N0LiAgQXJndW1lbnRzIGFyZToKICAgICAgICAgIC0gaG9zdDogaG9zdG5hbWUgdG8gY29ubmVjdCB0byAoc3RyaW5nLCBkZWZhdWx0IHByZXZpb3VzIGhvc3QpCiAgICAgICAgICAtIHBvcnQ6IHBvcnQgdG8gY29ubmVjdCB0byAoaW50ZWdlciwgZGVmYXVsdCBwcmV2aW91cyBwb3J0KQorICAgICAgICAgLSB0aW1lb3V0OiB0aGUgdGltZW91dCB0byBzZXQgYWdhaW5zdCB0aGUgZnRwIHNvY2tldChzKQogICAgICAgICAgLSBzb3VyY2VfYWRkcmVzczogYSAyLXR1cGxlIChob3N0LCBwb3J0KSBmb3IgdGhlIHNvY2tldCB0byBiaW5kCiAgICAgICAgICAgIHRvIGFzIGl0cyBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdGluZy4KICAgICAgICAgJycnCkBAIC0xODYsNyArMTg4LDggQEAKICAgICAjIEludGVybmFsOiBzZW5kIG9uZSBsaW5lIHRvIHRoZSBzZXJ2ZXIsIGFwcGVuZGluZyBDUkxGCiAgICAgZGVmIHB1dGxpbmUoc2VsZiwgbGluZSk6CiAgICAgICAgIGxpbmUgPSBsaW5lICsgQ1JMRgotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6IHByaW50KCcqcHV0KicsIHNlbGYuc2FuaXRpemUobGluZSkpCisgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMToKKyAgICAgICAgICAgIHByaW50KCcqcHV0KicsIHNlbGYuc2FuaXRpemUobGluZSkpCiAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGxpbmUuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQogCiAgICAgIyBJbnRlcm5hbDogc2VuZCBvbmUgY29tbWFuZCB0byB0aGUgc2VydmVyICh0aHJvdWdoIHB1dGxpbmUoKSkKQEAgLTIwMiw5ICsyMDUsMTIgQEAKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgogICAgICAgICAgICAgcHJpbnQoJypnZXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKLSAgICAgICAgaWYgbm90IGxpbmU6IHJhaXNlIEVPRkVycm9yCi0gICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOiBsaW5lID0gbGluZVs6LTJdCi0gICAgICAgIGVsaWYgbGluZVstMTpdIGluIENSTEY6IGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgorICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KKyAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KICAgICAgICAgcmV0dXJuIGxpbmUKIAogICAgICMgSW50ZXJuYWw6IGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciwgd2hpY2ggbWF5IHBvc3NpYmx5CkBAIC0yMjcsNyArMjMzLDggQEAKICAgICAjIFJhaXNlIHZhcmlvdXMgZXJyb3JzIGlmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgYW4gZXJyb3IKICAgICBkZWYgZ2V0cmVzcChzZWxmKToKICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0bXVsdGlsaW5lKCkKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmc6IHByaW50KCcqcmVzcConLCBzZWxmLnNhbml0aXplKHJlc3ApKQorICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzoKKyAgICAgICAgICAgIHByaW50KCcqcmVzcConLCBzZWxmLnNhbml0aXplKHJlc3ApKQogICAgICAgICBzZWxmLmxhc3RyZXNwID0gcmVzcFs6M10KICAgICAgICAgYyA9IHJlc3BbOjFdCiAgICAgICAgIGlmIGMgaW4geycxJywgJzInLCAnMyd9OgpAQCAtMjUxLDcgKzI1OCw4IEBACiAgICAgICAgIElQIGFuZCBTeW5jaDsgdGhhdCBkb2Vzbid0IHNlZW0gdG8gd29yayB3aXRoIHRoZSBzZXJ2ZXJzIEkndmUKICAgICAgICAgdHJpZWQuICBJbnN0ZWFkLCBqdXN0IHNlbmQgdGhlIEFCT1IgY29tbWFuZCBhcyBPT0IgZGF0YS4nJycKICAgICAgICAgbGluZSA9IGInQUJPUicgKyBCX0NSTEYKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOiBwcmludCgnKnB1dCB1cmdlbnQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgorICAgICAgICAgICAgcHJpbnQoJypwdXQgdXJnZW50KicsIHNlbGYuc2FuaXRpemUobGluZSkpCiAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGxpbmUsIE1TR19PT0IpCiAgICAgICAgIHJlc3AgPSBzZWxmLmdldG11bHRpbGluZSgpCiAgICAgICAgIGlmIHJlc3BbOjNdIG5vdCBpbiB7JzQyNicsICcyMjUnLCAnMjI2J306CkBAIC0zMDAsNyArMzA4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQogICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgXzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIF86CiAgICAgICAgICAgICAgICAgZXJyID0gXwogICAgICAgICAgICAgICAgIGlmIHNvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQpAQCAtMzExLDggKzMxOSw4IEBACiAgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihtc2cpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IobXNnKQogICAgICAgICBzb2NrLmxpc3RlbigxKQogICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdICMgR2V0IHByb3BlciBwb3J0CiAgICAgICAgIGhvc3QgPSBzZWxmLnNvY2suZ2V0c29ja25hbWUoKVswXSAjIEdldCBwcm9wZXIgaG9zdApAQCAtMzkyLDkgKzQwMCwxMiBAQAogCiAgICAgZGVmIGxvZ2luKHNlbGYsIHVzZXIgPSAnJywgcGFzc3dkID0gJycsIGFjY3QgPSAnJyk6CiAgICAgICAgICcnJ0xvZ2luLCBkZWZhdWx0IGFub255bW91cy4nJycKLSAgICAgICAgaWYgbm90IHVzZXI6IHVzZXIgPSAnYW5vbnltb3VzJwotICAgICAgICBpZiBub3QgcGFzc3dkOiBwYXNzd2QgPSAnJwotICAgICAgICBpZiBub3QgYWNjdDogYWNjdCA9ICcnCisgICAgICAgIGlmIG5vdCB1c2VyOgorICAgICAgICAgICAgdXNlciA9ICdhbm9ueW1vdXMnCisgICAgICAgIGlmIG5vdCBwYXNzd2Q6CisgICAgICAgICAgICBwYXNzd2QgPSAnJworICAgICAgICBpZiBub3QgYWNjdDoKKyAgICAgICAgICAgIGFjY3QgPSAnJwogICAgICAgICBpZiB1c2VyID09ICdhbm9ueW1vdXMnIGFuZCBwYXNzd2QgaW4geycnLCAnLSd9OgogICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBhbm9ueW1vdXMgZnRwIHBhc3N3b3JkIHNwZWNpZmllZAogICAgICAgICAgICAgIyB0aGVuIHdlJ2xsIGp1c3QgdXNlIGFub255bW91c0AKQEAgLTQwNSw4ICs0MTYsMTAgQEAKICAgICAgICAgICAgICMgICBob3N0IG9yIGNvdW50cnkuCiAgICAgICAgICAgICBwYXNzd2QgPSBwYXNzd2QgKyAnYW5vbnltb3VzQCcKICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVVNFUiAnICsgdXNlcikKLSAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6IHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1BBU1MgJyArIHBhc3N3ZCkKLSAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6IHJlc3AgPSBzZWxmLnNlbmRjbWQoJ0FDQ1QgJyArIGFjY3QpCisgICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnUEFTUyAnICsgcGFzc3dkKQorICAgICAgICBpZiByZXNwWzBdID09ICczJzoKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ0FDQ1QgJyArIGFjY3QpCiAgICAgICAgIGlmIHJlc3BbMF0gIT0gJzInOgogICAgICAgICAgICAgcmFpc2UgZXJyb3JfcmVwbHkocmVzcCkKICAgICAgICAgcmV0dXJuIHJlc3AKQEAgLTQzMiw2ICs0NDUsOSBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpCisgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgaWYgX1NTTFNvY2tldCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShjb25uLCBfU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAogICAgIGRlZiByZXRybGluZXMoc2VsZiwgY21kLCBjYWxsYmFjayA9IE5vbmUpOgpAQCAtNDQ2LDcgKzQ2Miw4IEBACiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgVGhlIHJlc3BvbnNlIGNvZGUuCiAgICAgICAgICIiIgotICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOiBjYWxsYmFjayA9IHByaW50X2xpbmUKKyAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZToKKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJpbnRfbGluZQogICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdUWVBFIEEnKQogICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kKSBhcyBjb25uLCBcCiAgICAgICAgICAgICAgICAgIGNvbm4ubWFrZWZpbGUoJ3InLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKSBhcyBmcDoKQEAgLTQ1NCw3ICs0NzEsOCBAQAogICAgICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQogICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IHNlbGYubWF4bGluZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMjogcHJpbnQoJypyZXRyKicsIHJlcHIobGluZSkpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnKnJldHIqJywgcmVwcihsaW5lKSkKICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKQEAgLTQ2Miw2ICs0ODAsOSBAQAogICAgICAgICAgICAgICAgIGVsaWYgbGluZVstMTpdID09ICdcbic6CiAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KICAgICAgICAgICAgICAgICBjYWxsYmFjayhsaW5lKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgc3RvcmJpbmFyeShzZWxmLCBjbWQsIGZwLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSwgcmVzdD1Ob25lKToKQEAgLTQ4Myw5ICs1MDQsMTQgQEAKICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZChibG9ja3NpemUpCi0gICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgpAQCAtNTA2LDEyICs1MzIsMTcgQEAKICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQogICAgICAgICAgICAgICAgIGlmIGxlbihidWYpID4gc2VsZi5tYXhsaW5lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiZ290IG1vcmUgdGhhbiAlZCBieXRlcyIgJSBzZWxmLm1heGxpbmUpCi0gICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGlmIGJ1ZlstMjpdICE9IEJfQ1JMRjoKICAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0xXSBpbiBCX0NSTEY6IGJ1ZiA9IGJ1Zls6LTFdCiAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZiArIEJfQ1JMRgogICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgYWNjdChzZWxmLCBwYXNzd29yZCk6CkBAIC02NDYsOCArNjc3LDEwIEBACiB0cnk6CiAgICAgaW1wb3J0IHNzbAogZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKKyAgICBfU1NMU29ja2V0ID0gTm9uZQogZWxzZToKKyAgICBfU1NMU29ja2V0ID0gc3NsLlNTTFNvY2tldAorCiAgICAgY2xhc3MgRlRQX1RMUyhGVFApOgogICAgICAgICAnJydBIEZUUCBzdWJjbGFzcyB3aGljaCBhZGRzIFRMUyBzdXBwb3J0IHRvIEZUUCBhcyBkZXNjcmliZWQKICAgICAgICAgaW4gUkZDLTQyMTcuCkBAIC03NjIsNzMgKzc5NSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zc2xfdmVyc2lvbikKICAgICAgICAgICAgIHJldHVybiBjb25uLCBzaXplCiAKLSAgICAgICAgZGVmIHJldHJiaW5hcnkoc2VsZiwgY21kLCBjYWxsYmFjaywgYmxvY2tzaXplPTgxOTIsIHJlc3Q9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgSScpCi0gICAgICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KSBhcyBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoYmxvY2tzaXplKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KLSAgICAgICAgZGVmIHJldHJsaW5lcyhzZWxmLCBjbWQsIGNhbGxiYWNrID0gTm9uZSk6Ci0gICAgICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOiBjYWxsYmFjayA9IHByaW50X2xpbmUKLSAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1RZUEUgQScpCi0gICAgICAgICAgICBjb25uID0gc2VsZi50cmFuc2ZlcmNtZChjbWQpCi0gICAgICAgICAgICBmcCA9IGNvbm4ubWFrZWZpbGUoJ3InLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQotICAgICAgICAgICAgd2l0aCBmcCwgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gc2VsZi5tYXhsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6IHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQotICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmVbLTE6XSA9PSAnXG4nOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhsaW5lKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCi0gICAgICAgIGRlZiBzdG9yYmluYXJ5KHNlbGYsIGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lLCByZXN0PU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkKGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQotICAgICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEEnKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYnVmKSA+IHNlbGYubWF4bGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0yOl0gIT0gQl9DUkxGOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0xXSBpbiBCX0NSTEY6IGJ1ZiA9IGJ1Zls6LTFdCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgKyBCX0NSTEYKLSAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQogICAgICAgICBkZWYgYWJvcnQoc2VsZik6CiAgICAgICAgICAgICAjIG92ZXJyaWRkZW4gYXMgd2UgY2FuJ3QgcGFzcyBNU0dfT09CIGZsYWcgdG8gc2VuZGFsbCgpCiAgICAgICAgICAgICBsaW5lID0gYidBQk9SJyArIEJfQ1JMRgpAQCAtODM5LDcgKzgwNSw3IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzcAogCiAgICAgX19hbGxfXy5hcHBlbmQoJ0ZUUF9UTFMnKQotICAgIGFsbF9lcnJvcnMgPSAoRXJyb3IsIElPRXJyb3IsIEVPRkVycm9yLCBzc2wuU1NMRXJyb3IpCisgICAgYWxsX2Vycm9ycyA9IChFcnJvciwgT1NFcnJvciwgRU9GRXJyb3IsIHNzbC5TU0xFcnJvcikKIAogCiBfMTUwX3JlID0gTm9uZQpAQCAtOTM2LDcgKzkwMiw4IEBACiAKIGRlZiBmdHBjcChzb3VyY2UsIHNvdXJjZW5hbWUsIHRhcmdldCwgdGFyZ2V0bmFtZSA9ICcnLCB0eXBlID0gJ0knKToKICAgICAnJydDb3B5IGZpbGUgZnJvbSBvbmUgRlRQLWluc3RhbmNlIHRvIGFub3RoZXIuJycnCi0gICAgaWYgbm90IHRhcmdldG5hbWU6IHRhcmdldG5hbWUgPSBzb3VyY2VuYW1lCisgICAgaWYgbm90IHRhcmdldG5hbWU6CisgICAgICAgIHRhcmdldG5hbWUgPSBzb3VyY2VuYW1lCiAgICAgdHlwZSA9ICdUWVBFICcgKyB0eXBlCiAgICAgc291cmNlLnZvaWRjbWQodHlwZSkKICAgICB0YXJnZXQudm9pZGNtZCh0eXBlKQpAQCAtOTQ2LDkgKzkxMywxMSBAQAogICAgICMgdHJhbnNmZXIgcmVxdWVzdC4KICAgICAjIFNvOiBTVE9SIGJlZm9yZSBSRVRSLCBiZWNhdXNlIGhlcmUgdGhlIHRhcmdldCBpcyBhICJ1c2VyIi4KICAgICB0cmVwbHkgPSB0YXJnZXQuc2VuZGNtZCgnU1RPUiAnICsgdGFyZ2V0bmFtZSkKLSAgICBpZiB0cmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfTogcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQorICAgIGlmIHRyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OgorICAgICAgICByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CiAgICAgc3JlcGx5ID0gc291cmNlLnNlbmRjbWQoJ1JFVFIgJyArIHNvdXJjZW5hbWUpCi0gICAgaWYgc3JlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306IHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKKyAgICBpZiBzcmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfToKKyAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQogICAgIHNvdXJjZS52b2lkcmVzcCgpCiAgICAgdGFyZ2V0LnZvaWRyZXNwKCkKIApAQCAtOTY2LDE5ICs5MzUsMjIgQEAKICAgICBfX2RlZmFjY3QgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWU9Tm9uZSk6CisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCwgdXNlIHRoZSBuZXRyYyBtb2R1bGUgaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBpZiBmaWxlbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgaWYgIkhPTUUiIGluIG9zLmVudmlyb246CiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsiSE9NRSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIubmV0cmMiKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJzcGVjaWZ5IGZpbGUgdG8gbG9hZCBvciBzZXQgJEhPTUUiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInNwZWNpZnkgZmlsZSB0byBsb2FkIG9yIHNldCAkSE9NRSIpCiAgICAgICAgIHNlbGYuX19ob3N0cyA9IHt9CiAgICAgICAgIHNlbGYuX19tYWNyb3MgPSB7fQogICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICJyIikKICAgICAgICAgaW5fbWFjcm8gPSAwCiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgaWYgaW5fbWFjcm8gYW5kIGxpbmUuc3RyaXAoKToKICAgICAgICAgICAgICAgICBtYWNyb19saW5lcy5hcHBlbmQobGluZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtMTA4Nyw3ICsxMDU5LDcgQEAKICAgICB1c2VyaWQgPSBwYXNzd2QgPSBhY2N0ID0gJycKICAgICB0cnk6CiAgICAgICAgIG5ldHJjID0gTmV0cmMocmNmaWxlKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiByY2ZpbGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDb3VsZCBub3Qgb3BlbiBhY2NvdW50IGZpbGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLS0gdXNpbmcgYW5vbnltb3VzIGxvZ2luLiIpCmRpZmYgLS1naXQgYS9MaWIvZnVuY3Rvb2xzLnB5IGIvTGliL2Z1bmN0b29scy5weQppbmRleCAwNTNlNDRlLi42YTY5NzRmIDEwMDY0NAotLS0gYS9MaWIvZnVuY3Rvb2xzLnB5CisrKyBiL0xpYi9mdW5jdG9vbHMucHkKQEAgLTMsMTYgKzMsMjQgQEAKICMgUHl0aG9uIG1vZHVsZSB3cmFwcGVyIGZvciBfZnVuY3Rvb2xzIEMgbW9kdWxlCiAjIHRvIGFsbG93IHV0aWxpdGllcyB3cml0dGVuIGluIFB5dGhvbiB0byBiZSBhZGRlZAogIyB0byB0aGUgZnVuY3Rvb2xzIG1vZHVsZS4KLSMgV3JpdHRlbiBieSBOaWNrIENvZ2hsYW4gPG5jb2dobGFuIGF0IGdtYWlsLmNvbT4KLSMgYW5kIFJheW1vbmQgSGV0dGluZ2VyIDxweXRob24gYXQgcmNuLmNvbT4KLSMgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KKyMgV3JpdHRlbiBieSBOaWNrIENvZ2hsYW4gPG5jb2dobGFuIGF0IGdtYWlsLmNvbT4sCisjIFJheW1vbmQgSGV0dGluZ2VyIDxweXRob24gYXQgcmNuLmNvbT4sCisjIGFuZCDFgXVrYXN6IExhbmdhIDxsdWthc3ogYXQgbGFuZ2EucGw+LgorIyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogIyBTZWUgQyBzb3VyY2UgY29kZSBmb3IgX2Z1bmN0b29scyBjcmVkaXRzL2NvcHlyaWdodAogCiBfX2FsbF9fID0gWyd1cGRhdGVfd3JhcHBlcicsICd3cmFwcycsICdXUkFQUEVSX0FTU0lHTk1FTlRTJywgJ1dSQVBQRVJfVVBEQVRFUycsCi0gICAgICAgICAgICd0b3RhbF9vcmRlcmluZycsICdjbXBfdG9fa2V5JywgJ2xydV9jYWNoZScsICdyZWR1Y2UnLCAncGFydGlhbCddCisgICAgICAgICAgICd0b3RhbF9vcmRlcmluZycsICdjbXBfdG9fa2V5JywgJ2xydV9jYWNoZScsICdyZWR1Y2UnLCAncGFydGlhbCcsCisgICAgICAgICAgICdzaW5nbGVkaXNwYXRjaCddCiAKLWZyb20gX2Z1bmN0b29scyBpbXBvcnQgcGFydGlhbCwgcmVkdWNlCit0cnk6CisgICAgZnJvbSBfZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitmcm9tIGFiYyBpbXBvcnQgZ2V0X2NhY2hlX3Rva2VuCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCitmcm9tIHR5cGVzIGltcG9ydCBNYXBwaW5nUHJveHlUeXBlCitmcm9tIHdlYWtyZWYgaW1wb3J0IFdlYWtLZXlEaWN0aW9uYXJ5CiB0cnk6CiAgICAgZnJvbSBfdGhyZWFkIGltcG9ydCBSTG9jawogZXhjZXB0OgpAQCAtNDcsNyArNTUsNiBAQAogICAgICAgIGFyZSB1cGRhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZyb20gdGhlIHdyYXBwZWQKICAgICAgICBmdW5jdGlvbiAoZGVmYXVsdHMgdG8gZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUykKICAgICAiIiIKLSAgICB3cmFwcGVyLl9fd3JhcHBlZF9fID0gd3JhcHBlZAogICAgIGZvciBhdHRyIGluIGFzc2lnbmVkOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIod3JhcHBlZCwgYXR0cikKQEAgLTU3LDYgKzY0LDkgQEAKICAgICAgICAgICAgIHNldGF0dHIod3JhcHBlciwgYXR0ciwgdmFsdWUpCiAgICAgZm9yIGF0dHIgaW4gdXBkYXRlZDoKICAgICAgICAgZ2V0YXR0cih3cmFwcGVyLCBhdHRyKS51cGRhdGUoZ2V0YXR0cih3cmFwcGVkLCBhdHRyLCB7fSkpCisgICAgIyBJc3N1ZSAjMTc0ODI6IHNldCBfX3dyYXBwZWRfXyBsYXN0IHNvIHdlIGRvbid0IGluYWR2ZXJ0ZW50bHkgY29weSBpdAorICAgICMgZnJvbSB0aGUgd3JhcHBlZCBmdW5jdGlvbiB3aGVuIHVwZGF0aW5nIF9fZGljdF9fCisgICAgd3JhcHBlci5fX3dyYXBwZWRfXyA9IHdyYXBwZWQKICAgICAjIFJldHVybiB0aGUgd3JhcHBlciBzbyB0aGlzIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHZpYSBwYXJ0aWFsKCkKICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC03OSwyMSArODksOTEgQEAKICMjIyB0b3RhbF9vcmRlcmluZyBjbGFzcyBkZWNvcmF0b3IKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKKyMgVGhlIGNvcnJlY3Qgd2F5IHRvIGluZGljYXRlIHRoYXQgYSBjb21wYXJpc29uIG9wZXJhdGlvbiBkb2Vzbid0CisjIHJlY29nbmlzZSB0aGUgb3RoZXIgdHlwZSBpcyB0byByZXR1cm4gTm90SW1wbGVtZW50ZWQgYW5kIGxldCB0aGUKKyMgaW50ZXJwcmV0ZXIgaGFuZGxlIHJhaXNpbmcgVHlwZUVycm9yIGlmIGJvdGggb3BlcmFuZHMgcmV0dXJuCisjIE5vdEltcGxlbWVudGVkIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBjb21wYXJpc29uIG1ldGhvZHMKKyMKKyMgVGhpcyBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdG90YWxfb3JkZXJpbmcgbW9yZSBjb21wbGljYXRlZCwgc2luY2UKKyMgd2UgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmlnZ2VyIGluZmluaXRlIHJlY3Vyc2lvbiB3aGVuIHR3bworIyBkaWZmZXJlbnQgdHlwZXMgdGhhdCBib3RoIHVzZSB0aGlzIGRlY29yYXRvciBlbmNvdW50ZXIgZWFjaCBvdGhlci4KKyMKKyMgRm9yIGV4YW1wbGUsIGlmIGEgdHlwZSBpbXBsZW1lbnRzIF9fbHRfXywgaXQncyBuYXR1cmFsIHRvIGRlZmluZQorIyBfX2d0X18gYXMgc29tZXRoaW5nIGxpa2U6CisjCisjICAgIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPCBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIKKyMKKyMgSG93ZXZlciwgdXNpbmcgdGhlIG9wZXJhdG9yIHN5bnRheCBsaWtlIHRoYXQgZW5kcyB1cCBpbnZva2luZyB0aGUgZnVsbAorIyB0eXBlIGNoZWNraW5nIG1hY2hpbmVyeSBhZ2FpbiBhbmQgbWVhbnMgd2UgY2FuIGVuZCB1cCBib3VuY2luZyBiYWNrIGFuZAorIyBmb3J0aCBiZXR3ZWVuIHRoZSB0d28gb3BlcmFuZHMgdW50aWwgd2UgcnVuIG91dCBvZiBzdGFjayBzcGFjZS4KKyMKKyMgVGhlIHNvbHV0aW9uIGlzIHRvIGRlZmluZSBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgaW52b2tlIHRoZSBhcHByb3ByaWF0ZQorIyBtYWdpYyBtZXRob2RzIGRpcmVjdGx5LCBlbnN1cmluZyB3ZSBvbmx5IHRyeSBlYWNoIG9wZXJhbmQgb25jZSwgYW5kCisjIHJldHVybiBOb3RJbXBsZW1lbnRlZCBpbW1lZGlhdGVseSBpZiBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZQorIyB1bmRlcmx5aW5nIHVzZXIgcHJvdmlkZWQgbWV0aG9kLiBVc2luZyB0aGlzIHNjaGVtZSwgdGhlIF9fZ3RfXyBkZXJpdmVkCisjIGZyb20gYSB1c2VyIHByb3ZpZGVkIF9fbHRfXyBiZWNvbWVzOgorIworIyAgICBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3BfYW5kX25vdF9lcShzZWxmLl9fbHRfXywgc2VsZiwgb3RoZXIpKQorCitkZWYgX25vdF9vcChvcCwgb3RoZXIpOgorICAgICMgIm5vdCBhIDwgYiIgaGFuZGxlcyAiYSA+PSBiIgorICAgICMgIm5vdCBhIDw9IGIiIGhhbmRsZXMgImEgPiBiIgorICAgICMgIm5vdCBhID49IGIiIGhhbmRsZXMgImEgPCBiIgorICAgICMgIm5vdCBhID4gYiIgaGFuZGxlcyAiYSA8PSBiIgorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQKKworZGVmIF9vcF9vcl9lcShvcCwgc2VsZiwgb3RoZXIpOgorICAgICMgImEgPCBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA8PSBiIgorICAgICMgImEgPiBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA+PSBiIgorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG9wX3Jlc3VsdCBvciBzZWxmID09IG90aGVyCisKK2RlZiBfbm90X29wX2FuZF9ub3RfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJub3QgKGEgPCBiIG9yIGEgPT0gYikiIGhhbmRsZXMgImEgPiBiIgorICAgICMgIm5vdCBhIDwgYiBhbmQgYSAhPSBiIiBpcyBlcXVpdmFsZW50CisgICAgIyAibm90IChhID4gYiBvciBhID09IGIpIiBoYW5kbGVzICJhIDwgYiIKKyAgICAjICJub3QgYSA+IGIgYW5kIGEgIT0gYiIgaXMgZXF1aXZhbGVudAorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQgYW5kIHNlbGYgIT0gb3RoZXIKKworZGVmIF9ub3Rfb3Bfb3JfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJub3QgYSA8PSBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA+PSBiIgorICAgICMgIm5vdCBhID49IGIgb3IgYSA9PSBiIiBoYW5kbGVzICJhIDw9IGIiCisgICAgb3BfcmVzdWx0ID0gb3Aob3RoZXIpCisgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICByZXR1cm4gbm90IG9wX3Jlc3VsdCBvciBzZWxmID09IG90aGVyCisKK2RlZiBfb3BfYW5kX25vdF9lcShvcCwgc2VsZiwgb3RoZXIpOgorICAgICMgImEgPD0gYiBhbmQgbm90IGEgPT0gYiIgaGFuZGxlcyAiYSA8IGIiCisgICAgIyAiYSA+PSBiIGFuZCBub3QgYSA9PSBiIiBoYW5kbGVzICJhID4gYiIKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBvcF9yZXN1bHQgYW5kIHNlbGYgIT0gb3RoZXIKKwogZGVmIHRvdGFsX29yZGVyaW5nKGNscyk6CiAgICAgIiIiQ2xhc3MgZGVjb3JhdG9yIHRoYXQgZmlsbHMgaW4gbWlzc2luZyBvcmRlcmluZyBtZXRob2RzIiIiCiAgICAgY29udmVydCA9IHsKLSAgICAgICAgJ19fbHRfXyc6IFsoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDwgb3RoZXIpXSwKLSAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPD0gb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIpXSwKLSAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmID4gb3RoZXIpXSwKLSAgICAgICAgJ19fZ2VfXyc6IFsoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogKG5vdCBzZWxmID49IG90aGVyKSBvciBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA+PSBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+PSBvdGhlcildCisgICAgICAgICdfX2x0X18nOiBbKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3BfYW5kX25vdF9lcShzZWxmLl9fbHRfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX29wX29yX2VxKHNlbGYuX19sdF9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wKHNlbGYuX19sdF9fLCBvdGhlcikpXSwKKyAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcF9vcl9lcShzZWxmLl9fbGVfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX29wX2FuZF9ub3RfZXEoc2VsZi5fX2xlX18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Aoc2VsZi5fX2xlX18sIG90aGVyKSldLAorICAgICAgICAnX19ndF9fJzogWygnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX2FuZF9ub3RfZXEoc2VsZi5fX2d0X18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9vcl9lcShzZWxmLl9fZ3RfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcChzZWxmLl9fZ3RfXywgb3RoZXIpKV0sCisgICAgICAgICdfX2dlX18nOiBbKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Bfb3JfZXEoc2VsZi5fX2dlX18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9hbmRfbm90X2VxKHNlbGYuX19nZV9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wKHNlbGYuX19nZV9fLCBvdGhlcikpXQogICAgIH0KICAgICAjIEZpbmQgdXNlci1kZWZpbmVkIGNvbXBhcmlzb25zIChub3QgdGhvc2UgaW5oZXJpdGVkIGZyb20gb2JqZWN0KS4KICAgICByb290cyA9IFtvcCBmb3Igb3AgaW4gY29udmVydCBpZiBnZXRhdHRyKGNscywgb3AsIE5vbmUpIGlzIG5vdCBnZXRhdHRyKG9iamVjdCwgb3AsIE5vbmUpXQpAQCAtMTQwLDYgKzIyMCwyOSBAQAogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgcGFydGlhbCgpIGFyZ3VtZW50IGFwcGxpY2F0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3Jkcyk6CisgICAgIiIibmV3IGZ1bmN0aW9uIHdpdGggcGFydGlhbCBhcHBsaWNhdGlvbiBvZiB0aGUgZ2l2ZW4gYXJndW1lbnRzCisgICAgYW5kIGtleXdvcmRzLgorICAgICIiIgorICAgIGRlZiBuZXdmdW5jKCpmYXJncywgKipma2V5d29yZHMpOgorICAgICAgICBuZXdrZXl3b3JkcyA9IGtleXdvcmRzLmNvcHkoKQorICAgICAgICBuZXdrZXl3b3Jkcy51cGRhdGUoZmtleXdvcmRzKQorICAgICAgICByZXR1cm4gZnVuYygqKGFyZ3MgKyBmYXJncyksICoqbmV3a2V5d29yZHMpCisgICAgbmV3ZnVuYy5mdW5jID0gZnVuYworICAgIG5ld2Z1bmMuYXJncyA9IGFyZ3MKKyAgICBuZXdmdW5jLmtleXdvcmRzID0ga2V5d29yZHMKKyAgICByZXR1cm4gbmV3ZnVuYworCit0cnk6CisgICAgZnJvbSBfZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgTFJVIENhY2hlIGZ1bmN0aW9uIGRlY29yYXRvcgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMjIwLDcgKzMyMyw2IEBACiAgICAgUFJFViwgTkVYVCwgS0VZLCBSRVNVTFQgPSAwLCAxLCAyLCAzICAgIyBuYW1lcyBmb3IgdGhlIGxpbmsgZmllbGRzCiAKICAgICBkZWYgZGVjb3JhdGluZ19mdW5jdGlvbih1c2VyX2Z1bmN0aW9uKToKLQogICAgICAgICBjYWNoZSA9IHt9CiAgICAgICAgIGhpdHMgPSBtaXNzZXMgPSAwCiAgICAgICAgIGZ1bGwgPSBGYWxzZQpAQCAtMzI5LDMgKzQzMSwyMTAgQEAKICAgICAgICAgcmV0dXJuIHVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIHVzZXJfZnVuY3Rpb24pCiAKICAgICByZXR1cm4gZGVjb3JhdGluZ19mdW5jdGlvbgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgc2luZ2xlZGlzcGF0Y2goKSAtIHNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9uIGRlY29yYXRvcgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIF9jM19tZXJnZShzZXF1ZW5jZXMpOgorICAgICIiIk1lcmdlcyBNUk9zIGluICpzZXF1ZW5jZXMqIHRvIGEgc2luZ2xlIE1STyB1c2luZyB0aGUgQzMgYWxnb3JpdGhtLgorCisgICAgQWRhcHRlZCBmcm9tIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy4KKworICAgICIiIgorICAgIHJlc3VsdCA9IFtdCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgc2VxdWVuY2VzID0gW3MgZm9yIHMgaW4gc2VxdWVuY2VzIGlmIHNdICAgIyBwdXJnZSBlbXB0eSBzZXF1ZW5jZXMKKyAgICAgICAgaWYgbm90IHNlcXVlbmNlczoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgZm9yIHMxIGluIHNlcXVlbmNlczogICAjIGZpbmQgbWVyZ2UgY2FuZGlkYXRlcyBhbW9uZyBzZXEgaGVhZHMKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHMxWzBdCisgICAgICAgICAgICBmb3IgczIgaW4gc2VxdWVuY2VzOgorICAgICAgICAgICAgICAgIGlmIGNhbmRpZGF0ZSBpbiBzMlsxOl06CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgICAgICAjIHJlamVjdCB0aGUgY3VycmVudCBoZWFkLCBpdCBhcHBlYXJzIGxhdGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBjYW5kaWRhdGU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkluY29uc2lzdGVudCBoaWVyYXJjaHkiKQorICAgICAgICByZXN1bHQuYXBwZW5kKGNhbmRpZGF0ZSkKKyAgICAgICAgIyByZW1vdmUgdGhlIGNob3NlbiBjYW5kaWRhdGUKKyAgICAgICAgZm9yIHNlcSBpbiBzZXF1ZW5jZXM6CisgICAgICAgICAgICBpZiBzZXFbMF0gPT0gY2FuZGlkYXRlOgorICAgICAgICAgICAgICAgIGRlbCBzZXFbMF0KKworZGVmIF9jM19tcm8oY2xzLCBhYmNzPU5vbmUpOgorICAgICIiIkNvbXB1dGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciB1c2luZyBleHRlbmRlZCBDMyBsaW5lYXJpemF0aW9uLgorCisgICAgSWYgbm8gKmFiY3MqIGFyZSBnaXZlbiwgdGhlIGFsZ29yaXRobSB3b3JrcyBleGFjdGx5IGxpa2UgdGhlIGJ1aWx0LWluIEMzCisgICAgbGluZWFyaXphdGlvbiB1c2VkIGZvciBtZXRob2QgcmVzb2x1dGlvbi4KKworICAgIElmIGdpdmVuLCAqYWJjcyogaXMgYSBsaXN0IG9mIGFic3RyYWN0IGJhc2UgY2xhc3NlcyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZAorICAgIGludG8gdGhlIHJlc3VsdGluZyBNUk8uIFVucmVsYXRlZCBBQkNzIGFyZSBpZ25vcmVkIGFuZCBkb24ndCBlbmQgdXAgaW4gdGhlCisgICAgcmVzdWx0LiBUaGUgYWxnb3JpdGhtIGluc2VydHMgQUJDcyB3aGVyZSB0aGVpciBmdW5jdGlvbmFsaXR5IGlzIGludHJvZHVjZWQsCisgICAgaS5lLiBpc3N1YmNsYXNzKGNscywgYWJjKSByZXR1cm5zIFRydWUgZm9yIHRoZSBjbGFzcyBpdHNlbGYgYnV0IHJldHVybnMKKyAgICBGYWxzZSBmb3IgYWxsIGl0cyBkaXJlY3QgYmFzZSBjbGFzc2VzLiBJbXBsaWNpdCBBQkNzIGZvciBhIGdpdmVuIGNsYXNzCisgICAgKGVpdGhlciByZWdpc3RlcmVkIG9yIGluZmVycmVkIGZyb20gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lhbCBtZXRob2QgbGlrZQorICAgIF9fbGVuX18pIGFyZSBpbnNlcnRlZCBkaXJlY3RseSBhZnRlciB0aGUgbGFzdCBBQkMgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhlCisgICAgTVJPIG9mIHNhaWQgY2xhc3MuIElmIHR3byBpbXBsaWNpdCBBQkNzIGVuZCB1cCBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gdGhlCisgICAgcmVzdWx0aW5nIE1STywgdGhlaXIgb3JkZXJpbmcgZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgdHlwZXMgaW4gKmFiY3MqLgorCisgICAgIiIiCisgICAgZm9yIGksIGJhc2UgaW4gZW51bWVyYXRlKHJldmVyc2VkKGNscy5fX2Jhc2VzX18pKToKKyAgICAgICAgaWYgaGFzYXR0cihiYXNlLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgYm91bmRhcnkgPSBsZW4oY2xzLl9fYmFzZXNfXykgLSBpCisgICAgICAgICAgICBicmVhayAgICMgQmFzZXMgdXAgdG8gdGhlIGxhc3QgZXhwbGljaXQgQUJDIGFyZSBjb25zaWRlcmVkIGZpcnN0LgorICAgIGVsc2U6CisgICAgICAgIGJvdW5kYXJ5ID0gMAorICAgIGFiY3MgPSBsaXN0KGFiY3MpIGlmIGFiY3MgZWxzZSBbXQorICAgIGV4cGxpY2l0X2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fWzpib3VuZGFyeV0pCisgICAgYWJzdHJhY3RfYmFzZXMgPSBbXQorICAgIG90aGVyX2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fW2JvdW5kYXJ5Ol0pCisgICAgZm9yIGJhc2UgaW4gYWJjczoKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhjbHMsIGJhc2UpIGFuZCBub3QgYW55KAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoYiwgYmFzZSkgZm9yIGIgaW4gY2xzLl9fYmFzZXNfXworICAgICAgICAgICAgKToKKyAgICAgICAgICAgICMgSWYgKmNscyogaXMgdGhlIGNsYXNzIHRoYXQgaW50cm9kdWNlcyBiZWhhdmlvdXIgZGVzY3JpYmVkIGJ5CisgICAgICAgICAgICAjIGFuIEFCQyAqYmFzZSosIGluc2VydCBzYWlkIEFCQyB0byBpdHMgTVJPLgorICAgICAgICAgICAgYWJzdHJhY3RfYmFzZXMuYXBwZW5kKGJhc2UpCisgICAgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXM6CisgICAgICAgIGFiY3MucmVtb3ZlKGJhc2UpCisgICAgZXhwbGljaXRfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gZXhwbGljaXRfYmFzZXNdCisgICAgYWJzdHJhY3RfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXNdCisgICAgb3RoZXJfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gb3RoZXJfYmFzZXNdCisgICAgcmV0dXJuIF9jM19tZXJnZSgKKyAgICAgICAgW1tjbHNdXSArCisgICAgICAgIGV4cGxpY2l0X2MzX21yb3MgKyBhYnN0cmFjdF9jM19tcm9zICsgb3RoZXJfYzNfbXJvcyArCisgICAgICAgIFtleHBsaWNpdF9iYXNlc10gKyBbYWJzdHJhY3RfYmFzZXNdICsgW290aGVyX2Jhc2VzXQorICAgICkKKworZGVmIF9jb21wb3NlX21ybyhjbHMsIHR5cGVzKToKKyAgICAiIiJDYWxjdWxhdGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgYSBnaXZlbiBjbGFzcyAqY2xzKi4KKworICAgIEluY2x1ZGVzIHJlbGV2YW50IGFic3RyYWN0IGJhc2UgY2xhc3NlcyAod2l0aCB0aGVpciByZXNwZWN0aXZlIGJhc2VzKSBmcm9tCisgICAgdGhlICp0eXBlcyogaXRlcmFibGUuIFVzZXMgYSBtb2RpZmllZCBDMyBsaW5lYXJpemF0aW9uIGFsZ29yaXRobS4KKworICAgICIiIgorICAgIGJhc2VzID0gc2V0KGNscy5fX21yb19fKQorICAgICMgUmVtb3ZlIGVudHJpZXMgd2hpY2ggYXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgX19tcm9fXyBvciB1bnJlbGF0ZWQuCisgICAgZGVmIGlzX3JlbGF0ZWQodHlwKToKKyAgICAgICAgcmV0dXJuICh0eXAgbm90IGluIGJhc2VzIGFuZCBoYXNhdHRyKHR5cCwgJ19fbXJvX18nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGlzc3ViY2xhc3MoY2xzLCB0eXApKQorICAgIHR5cGVzID0gW24gZm9yIG4gaW4gdHlwZXMgaWYgaXNfcmVsYXRlZChuKV0KKyAgICAjIFJlbW92ZSBlbnRyaWVzIHdoaWNoIGFyZSBzdHJpY3QgYmFzZXMgb2Ygb3RoZXIgZW50cmllcyAodGhleSB3aWxsIGVuZCB1cAorICAgICMgaW4gdGhlIE1STyBhbnl3YXkuCisgICAgZGVmIGlzX3N0cmljdF9iYXNlKHR5cCk6CisgICAgICAgIGZvciBvdGhlciBpbiB0eXBlczoKKyAgICAgICAgICAgIGlmIHR5cCAhPSBvdGhlciBhbmQgdHlwIGluIG90aGVyLl9fbXJvX186CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgdHlwZXMgPSBbbiBmb3IgbiBpbiB0eXBlcyBpZiBub3QgaXNfc3RyaWN0X2Jhc2UobildCisgICAgIyBTdWJjbGFzc2VzIG9mIHRoZSBBQkNzIGluICp0eXBlcyogd2hpY2ggYXJlIGFsc28gaW1wbGVtZW50ZWQgYnkKKyAgICAjICpjbHMqIGNhbiBiZSB1c2VkIHRvIHN0YWJpbGl6ZSBBQkMgb3JkZXJpbmcuCisgICAgdHlwZV9zZXQgPSBzZXQodHlwZXMpCisgICAgbXJvID0gW10KKyAgICBmb3IgdHlwIGluIHR5cGVzOgorICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgIGZvciBzdWIgaW4gdHlwLl9fc3ViY2xhc3Nlc19fKCk6CisgICAgICAgICAgICBpZiBzdWIgbm90IGluIGJhc2VzIGFuZCBpc3N1YmNsYXNzKGNscywgc3ViKToKKyAgICAgICAgICAgICAgICBmb3VuZC5hcHBlbmQoW3MgZm9yIHMgaW4gc3ViLl9fbXJvX18gaWYgcyBpbiB0eXBlX3NldF0pCisgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIG1yby5hcHBlbmQodHlwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBGYXZvciBzdWJjbGFzc2VzIHdpdGggdGhlIGJpZ2dlc3QgbnVtYmVyIG9mIHVzZWZ1bCBiYXNlcworICAgICAgICBmb3VuZC5zb3J0KGtleT1sZW4sIHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgZm9yIHN1YiBpbiBmb3VuZDoKKyAgICAgICAgICAgIGZvciBzdWJjbHMgaW4gc3ViOgorICAgICAgICAgICAgICAgIGlmIHN1YmNscyBub3QgaW4gbXJvOgorICAgICAgICAgICAgICAgICAgICBtcm8uYXBwZW5kKHN1YmNscykKKyAgICByZXR1cm4gX2MzX21ybyhjbHMsIGFiY3M9bXJvKQorCitkZWYgX2ZpbmRfaW1wbChjbHMsIHJlZ2lzdHJ5KToKKyAgICAiIiJSZXR1cm5zIHRoZSBiZXN0IG1hdGNoaW5nIGltcGxlbWVudGF0aW9uIGZyb20gKnJlZ2lzdHJ5KiBmb3IgdHlwZSAqY2xzKi4KKworICAgIFdoZXJlIHRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgdHlwZSwgaXRzIG1ldGhvZAorICAgIHJlc29sdXRpb24gb3JkZXIgaXMgdXNlZCB0byBmaW5kIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgorCisgICAgTm90ZTogaWYgKnJlZ2lzdHJ5KiBkb2VzIG5vdCBjb250YWluIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGUgYmFzZQorICAgICpvYmplY3QqIHR5cGUsIHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBOb25lLgorCisgICAgIiIiCisgICAgbXJvID0gX2NvbXBvc2VfbXJvKGNscywgcmVnaXN0cnkua2V5cygpKQorICAgIG1hdGNoID0gTm9uZQorICAgIGZvciB0IGluIG1ybzoKKyAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIElmICptYXRjaCogaXMgYW4gaW1wbGljaXQgQUJDIGJ1dCB0aGVyZSBpcyBhbm90aGVyIHVucmVsYXRlZCwKKyAgICAgICAgICAgICMgZXF1YWxseSBtYXRjaGluZyBpbXBsaWNpdCBBQkMsIHJlZnVzZSB0aGUgdGVtcHRhdGlvbiB0byBndWVzcy4KKyAgICAgICAgICAgIGlmICh0IGluIHJlZ2lzdHJ5IGFuZCB0IG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1hdGNoIG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBpc3N1YmNsYXNzKG1hdGNoLCB0KSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IHt9IG9yIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIG1hdGNoLCB0KSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHQgaW4gcmVnaXN0cnk6CisgICAgICAgICAgICBtYXRjaCA9IHQKKyAgICByZXR1cm4gcmVnaXN0cnkuZ2V0KG1hdGNoKQorCitkZWYgc2luZ2xlZGlzcGF0Y2goZnVuYyk6CisgICAgIiIiU2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb24gZGVjb3JhdG9yLgorCisgICAgVHJhbnNmb3JtcyBhIGZ1bmN0aW9uIGludG8gYSBnZW5lcmljIGZ1bmN0aW9uLCB3aGljaCBjYW4gaGF2ZSBkaWZmZXJlbnQKKyAgICBiZWhhdmlvdXJzIGRlcGVuZGluZyB1cG9uIHRoZSB0eXBlIG9mIGl0cyBmaXJzdCBhcmd1bWVudC4gVGhlIGRlY29yYXRlZAorICAgIGZ1bmN0aW9uIGFjdHMgYXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFuZCBhZGRpdGlvbmFsCisgICAgaW1wbGVtZW50YXRpb25zIGNhbiBiZSByZWdpc3RlcmVkIHVzaW5nIHRoZSByZWdpc3RlcigpIGF0dHJpYnV0ZSBvZiB0aGUKKyAgICBnZW5lcmljIGZ1bmN0aW9uLgorCisgICAgIiIiCisgICAgcmVnaXN0cnkgPSB7fQorICAgIGRpc3BhdGNoX2NhY2hlID0gV2Vha0tleURpY3Rpb25hcnkoKQorICAgIGNhY2hlX3Rva2VuID0gTm9uZQorCisgICAgZGVmIGRpc3BhdGNoKGNscyk6CisgICAgICAgICIiImdlbmVyaWNfZnVuYy5kaXNwYXRjaChjbHMpIC0+IDxmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbj4KKworICAgICAgICBSdW5zIHRoZSBkaXNwYXRjaCBhbGdvcml0aG0gdG8gcmV0dXJuIHRoZSBiZXN0IGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBmb3IgdGhlIGdpdmVuICpjbHMqIHJlZ2lzdGVyZWQgb24gKmdlbmVyaWNfZnVuYyouCisKKyAgICAgICAgIiIiCisgICAgICAgIG5vbmxvY2FsIGNhY2hlX3Rva2VuCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY3VycmVudF90b2tlbiA9IGdldF9jYWNoZV90b2tlbigpCisgICAgICAgICAgICBpZiBjYWNoZV90b2tlbiAhPSBjdXJyZW50X3Rva2VuOgorICAgICAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBjYWNoZV90b2tlbiA9IGN1cnJlbnRfdG9rZW4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wbCA9IGRpc3BhdGNoX2NhY2hlW2Nsc10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcGwgPSByZWdpc3RyeVtjbHNdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgaW1wbCA9IF9maW5kX2ltcGwoY2xzLCByZWdpc3RyeSkKKyAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlW2Nsc10gPSBpbXBsCisgICAgICAgIHJldHVybiBpbXBsCisKKyAgICBkZWYgcmVnaXN0ZXIoY2xzLCBmdW5jPU5vbmUpOgorICAgICAgICAiIiJnZW5lcmljX2Z1bmMucmVnaXN0ZXIoY2xzLCBmdW5jKSAtPiBmdW5jCisKKyAgICAgICAgUmVnaXN0ZXJzIGEgbmV3IGltcGxlbWVudGF0aW9uIGZvciB0aGUgZ2l2ZW4gKmNscyogb24gYSAqZ2VuZXJpY19mdW5jKi4KKworICAgICAgICAiIiIKKyAgICAgICAgbm9ubG9jYWwgY2FjaGVfdG9rZW4KKyAgICAgICAgaWYgZnVuYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmOiByZWdpc3RlcihjbHMsIGYpCisgICAgICAgIHJlZ2lzdHJ5W2Nsc10gPSBmdW5jCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIE5vbmUgYW5kIGhhc2F0dHIoY2xzLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgY2FjaGVfdG9rZW4gPSBnZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICBkaXNwYXRjaF9jYWNoZS5jbGVhcigpCisgICAgICAgIHJldHVybiBmdW5jCisKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6CisgICAgICAgIHJldHVybiBkaXNwYXRjaChhcmdzWzBdLl9fY2xhc3NfXykoKmFyZ3MsICoqa3cpCisKKyAgICByZWdpc3RyeVtvYmplY3RdID0gZnVuYworICAgIHdyYXBwZXIucmVnaXN0ZXIgPSByZWdpc3RlcgorICAgIHdyYXBwZXIuZGlzcGF0Y2ggPSBkaXNwYXRjaAorICAgIHdyYXBwZXIucmVnaXN0cnkgPSBNYXBwaW5nUHJveHlUeXBlKHJlZ2lzdHJ5KQorICAgIHdyYXBwZXIuX2NsZWFyX2NhY2hlID0gZGlzcGF0Y2hfY2FjaGUuY2xlYXIKKyAgICB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmdW5jKQorICAgIHJldHVybiB3cmFwcGVyCmRpZmYgLS1naXQgYS9MaWIvZ2VuZXJpY3BhdGgucHkgYi9MaWIvZ2VuZXJpY3BhdGgucHkKaW5kZXggMzQwYzAwNC4uY2E0YTUxMCAxMDA2NDQKLS0tIGEvTGliL2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi9nZW5lcmljcGF0aC5weQpAQCAtNyw3ICs3LDggQEAKIGltcG9ydCBzdGF0CiAKIF9fYWxsX18gPSBbJ2NvbW1vbnByZWZpeCcsICdleGlzdHMnLCAnZ2V0YXRpbWUnLCAnZ2V0Y3RpbWUnLCAnZ2V0bXRpbWUnLAotICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnXQorICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnLCAnc2FtZWZpbGUnLCAnc2FtZW9wZW5maWxlJywKKyAgICAgICAgICAgJ3NhbWVzdGF0J10KIAogCiAjIERvZXMgYSBwYXRoIGV4aXN0PwpAQCAtMTYsNyArMTcsNyBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBGYWxzZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCkBAIC0yNyw3ICsyOCw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTUkVHKHN0LnN0X21vZGUpCiAKQEAgLTM5LDcgKzQwLDcgQEAKICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3Muc3RhdChzKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0RJUihzdC5zdF9tb2RlKQogCkBAIC03NSw2ICs3NiwzMSBAQAogICAgICAgICAgICAgcmV0dXJuIHMxWzppXQogICAgIHJldHVybiBzMQogCisjIEFyZSB0d28gc3RhdCBidWZmZXJzIChvYnRhaW5lZCBmcm9tIHN0YXQsIGZzdGF0IG9yIGxzdGF0KQorIyBkZXNjcmliaW5nIHRoZSBzYW1lIGZpbGU/CitkZWYgc2FtZXN0YXQoczEsIHMyKToKKyAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHJldHVybiAoczEuc3RfaW5vID09IHMyLnN0X2lubyBhbmQKKyAgICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYpCisKKworIyBBcmUgdHdvIGZpbGVuYW1lcyByZWFsbHkgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZmlsZT8KK2RlZiBzYW1lZmlsZShmMSwgZjIpOgorICAgICIiIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIiIgorICAgIHMxID0gb3Muc3RhdChmMSkKKyAgICBzMiA9IG9zLnN0YXQoZjIpCisgICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKKworCisjIEFyZSB0d28gb3BlbiBmaWxlcyByZWFsbHkgcmVmZXJlbmNpbmcgdGhlIHNhbWUgZmlsZT8KKyMgKE5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IhKQorZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6CisgICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHMxID0gb3MuZnN0YXQoZnAxKQorICAgIHMyID0gb3MuZnN0YXQoZnAyKQorICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCisKKwogIyBTcGxpdCBhIHBhdGggaW4gcm9vdCBhbmQgZXh0ZW5zaW9uLgogIyBUaGUgZXh0ZW5zaW9uIGlzIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgYXQgdGhlIGxhc3QgZG90IGluIHRoZSBsYXN0CiAjIHBhdGhuYW1lIGNvbXBvbmVudDsgdGhlIHJvb3QgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhhdC4KZGlmZiAtLWdpdCBhL0xpYi9nZXRwYXNzLnB5IGIvTGliL2dldHBhc3MucHkKaW5kZXggMDA0NDc0Mi4uNTNjMzhiOCAxMDA2NDQKLS0tIGEvTGliL2dldHBhc3MucHkKKysrIGIvTGliL2dldHBhc3MucHkKQEAgLTE1LDcgKzE1LDExIEBACiAjICAgICAgICAgIEd1aWRvIHZhbiBSb3NzdW0gKFdpbmRvd3Mgc3VwcG9ydCBhbmQgY2xlYW51cCkKICMgICAgICAgICAgR3JlZ29yeSBQLiBTbWl0aCAodHR5IHN1cHBvcnQgJiBHZXRQYXNzV2FybmluZykKIAotaW1wb3J0IG9zLCBzeXMsIHdhcm5pbmdzCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncwogCiBfX2FsbF9fID0gWyJnZXRwYXNzIiwiZ2V0dXNlciIsIkdldFBhc3NXYXJuaW5nIl0KIApAQCAtMzgsNTIgKzQyLDU3IEBACiAKICAgICBBbHdheXMgcmVzdG9yZXMgdGVybWluYWwgc2V0dGluZ3MgYmVmb3JlIHJldHVybmluZy4KICAgICAiIiIKLSAgICBmZCA9IE5vbmUKLSAgICB0dHkgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICAjIEFsd2F5cyB0cnkgcmVhZGluZyBhbmQgd3JpdGluZyBkaXJlY3RseSBvbiB0aGUgdHR5IGZpcnN0LgotICAgICAgICBmZCA9IG9zLm9wZW4oJy9kZXYvdHR5Jywgb3MuT19SRFdSfG9zLk9fTk9DVFRZKQotICAgICAgICB0dHkgPSBvcy5mZG9wZW4oZmQsICd3KycsIDEpCi0gICAgICAgIGlucHV0ID0gdHR5Ci0gICAgICAgIGlmIG5vdCBzdHJlYW06Ci0gICAgICAgICAgICBzdHJlYW0gPSB0dHkKLSAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgotICAgICAgICAjIElmIHRoYXQgZmFpbHMsIHNlZSBpZiBzdGRpbiBjYW4gYmUgY29udHJvbGxlZC4KKyAgICBwYXNzd2QgPSBOb25lCisgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmZCA9IHN5cy5zdGRpbi5maWxlbm8oKQotICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCi0gICAgICAgIGlucHV0ID0gc3lzLnN0ZGluCi0gICAgICAgIGlmIG5vdCBzdHJlYW06Ci0gICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3RkZXJyCi0KLSAgICBpZiBmZCBpcyBub3QgTm9uZToKLSAgICAgICAgcGFzc3dkID0gTm9uZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvbGQgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkgICAgICMgYSBjb3B5IHRvIHNhdmUKLSAgICAgICAgICAgIG5ldyA9IG9sZFs6XQotICAgICAgICAgICAgbmV3WzNdICY9IH50ZXJtaW9zLkVDSE8gICMgMyA9PSAnbGZsYWdzJwotICAgICAgICAgICAgdGNzZXRhdHRyX2ZsYWdzID0gdGVybWlvcy5UQ1NBRkxVU0gKLSAgICAgICAgICAgIGlmIGhhc2F0dHIodGVybWlvcywgJ1RDU0FTT0ZUJyk6Ci0gICAgICAgICAgICAgICAgdGNzZXRhdHRyX2ZsYWdzIHw9IHRlcm1pb3MuVENTQVNPRlQKKyAgICAgICAgICAgICMgQWx3YXlzIHRyeSByZWFkaW5nIGFuZCB3cml0aW5nIGRpcmVjdGx5IG9uIHRoZSB0dHkgZmlyc3QuCisgICAgICAgICAgICBmZCA9IG9zLm9wZW4oJy9kZXYvdHR5Jywgb3MuT19SRFdSfG9zLk9fTk9DVFRZKQorICAgICAgICAgICAgdHR5ID0gaW8uRmlsZUlPKGZkLCAndysnKQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dCh0dHkpCisgICAgICAgICAgICBpbnB1dCA9IGlvLlRleHRJT1dyYXBwZXIodHR5KQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChpbnB1dCkKKyAgICAgICAgICAgIGlmIG5vdCBzdHJlYW06CisgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5wdXQKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICMgSWYgdGhhdCBmYWlscywgc2VlIGlmIHN0ZGluIGNhbiBiZSBjb250cm9sbGVkLgorICAgICAgICAgICAgc3RhY2suY2xvc2UoKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0Y3NldGF0dHJfZmxhZ3MsIG5ldykKLSAgICAgICAgICAgICAgICBwYXNzd2QgPSBfcmF3X2lucHV0KHByb21wdCwgc3RyZWFtLCBpbnB1dD1pbnB1dCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRjc2V0YXR0cl9mbGFncywgb2xkKQotICAgICAgICAgICAgICAgIHN0cmVhbS5mbHVzaCgpICAjIGlzc3VlNzIwOAotICAgICAgICBleGNlcHQgdGVybWlvcy5lcnJvcjoKLSAgICAgICAgICAgIGlmIHBhc3N3ZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAjIF9yYXdfaW5wdXQgc3VjY2VlZGVkLiAgVGhlIGZpbmFsIHRjc2V0YXR0ciBmYWlsZWQuICBSZXJhaXNlCi0gICAgICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHRlcm1pbmFsIGluIGFuIHVua25vd24gc3RhdGUuCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICMgV2UgY2FuJ3QgY29udHJvbCB0aGUgdHR5IG9yIHN0ZGluLiAgR2l2ZSB1cCBhbmQgdXNlIG5vcm1hbCBJTy4KLSAgICAgICAgICAgICMgZmFsbGJhY2tfZ2V0cGFzcygpIHJhaXNlcyBhbiBhcHByb3ByaWF0ZSB3YXJuaW5nLgotICAgICAgICAgICAgZGVsIGlucHV0LCB0dHkgICMgY2xlYW4gdXAgdW51c2VkIGZpbGUgb2JqZWN0cyBiZWZvcmUgYmxvY2tpbmcKLSAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCisgICAgICAgICAgICAgICAgZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGZkID0gTm9uZQorICAgICAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCisgICAgICAgICAgICBpbnB1dCA9IHN5cy5zdGRpbgorICAgICAgICAgICAgaWYgbm90IHN0cmVhbToKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3RkZXJyCiAKLSAgICBzdHJlYW0ud3JpdGUoJ1xuJykKLSAgICByZXR1cm4gcGFzc3dkCisgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9sZCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKSAgICAgIyBhIGNvcHkgdG8gc2F2ZQorICAgICAgICAgICAgICAgIG5ldyA9IG9sZFs6XQorICAgICAgICAgICAgICAgIG5ld1szXSAmPSB+dGVybWlvcy5FQ0hPICAjIDMgPT0gJ2xmbGFncycKKyAgICAgICAgICAgICAgICB0Y3NldGF0dHJfZmxhZ3MgPSB0ZXJtaW9zLlRDU0FGTFVTSAorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIodGVybWlvcywgJ1RDU0FTT0ZUJyk6CisgICAgICAgICAgICAgICAgICAgIHRjc2V0YXR0cl9mbGFncyB8PSB0ZXJtaW9zLlRDU0FTT0ZUCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGNzZXRhdHRyX2ZsYWdzLCBuZXcpCisgICAgICAgICAgICAgICAgICAgIHBhc3N3ZCA9IF9yYXdfaW5wdXQocHJvbXB0LCBzdHJlYW0sIGlucHV0PWlucHV0KQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0Y3NldGF0dHJfZmxhZ3MsIG9sZCkKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmZsdXNoKCkgICMgaXNzdWU3MjA4CisgICAgICAgICAgICBleGNlcHQgdGVybWlvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBwYXNzd2QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgX3Jhd19pbnB1dCBzdWNjZWVkZWQuICBUaGUgZmluYWwgdGNzZXRhdHRyIGZhaWxlZC4gIFJlcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHRlcm1pbmFsIGluIGFuIHVua25vd24gc3RhdGUuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIyBXZSBjYW4ndCBjb250cm9sIHRoZSB0dHkgb3Igc3RkaW4uICBHaXZlIHVwIGFuZCB1c2Ugbm9ybWFsIElPLgorICAgICAgICAgICAgICAgICMgZmFsbGJhY2tfZ2V0cGFzcygpIHJhaXNlcyBhbiBhcHByb3ByaWF0ZSB3YXJuaW5nLgorICAgICAgICAgICAgICAgIGlmIHN0cmVhbSBpcyBub3QgaW5wdXQ6CisgICAgICAgICAgICAgICAgICAgICMgY2xlYW4gdXAgdW51c2VkIGZpbGUgb2JqZWN0cyBiZWZvcmUgYmxvY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCisKKyAgICAgICAgc3RyZWFtLndyaXRlKCdcbicpCisgICAgICAgIHJldHVybiBwYXNzd2QKIAogCiBkZWYgd2luX2dldHBhc3MocHJvbXB0PSdQYXNzd29yZDogJywgc3RyZWFtPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL2dldHRleHQucHkgYi9MaWIvZ2V0dGV4dC5weQppbmRleCBlNDNmMDQ0Li4wNWQ5YzFlIDEwMDY0NAotLS0gYS9MaWIvZ2V0dGV4dC5weQorKysgYi9MaWIvZ2V0dGV4dC5weQpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgICAgICAgICAgICB2ZXJzaW9uLCBtc2djb3VudCwgbWFzdGVyaWR4LCB0cmFuc2lkeCA9IHVucGFjaygnPjRJJywgYnVmWzQ6MjBdKQogICAgICAgICAgICAgaWkgPSAnPklJJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQogICAgICAgICAjIE5vdyBwdXQgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIC5tbyBmaWxlIGJ1ZmZlciBpbnRvIHRoZSBjYXRhbG9nCiAgICAgICAgICMgZGljdGlvbmFyeS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbXNnY291bnQpOgpAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgICAgICAgICAgICAgbXNnID0gYnVmW21vZmY6bWVuZF0KICAgICAgICAgICAgICAgICB0bXNnID0gYnVmW3RvZmY6dGVuZF0KICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRmlsZSBpcyBjb3JydXB0JywgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnRmlsZSBpcyBjb3JydXB0JywgZmlsZW5hbWUpCiAgICAgICAgICAgICAjIFNlZSBpZiB3ZSdyZSBsb29raW5nIGF0IEdOVSAubW8gY29udmVudGlvbnMgZm9yIG1ldGFkYXRhCiAgICAgICAgICAgICBpZiBtbGVuID09IDA6CiAgICAgICAgICAgICAgICAgIyBDYXRhbG9nIGRlc2NyaXB0aW9uCkBAIC0zOTgsNyArMzk4LDcgQEAKICAgICBpZiBub3QgbW9maWxlczoKICAgICAgICAgaWYgZmFsbGJhY2s6CiAgICAgICAgICAgICByZXR1cm4gTnVsbFRyYW5zbGF0aW9ucygpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoRU5PRU5ULCAnTm8gdHJhbnNsYXRpb24gZmlsZSBmb3VuZCBmb3IgZG9tYWluJywgZG9tYWluKQorICAgICAgICByYWlzZSBPU0Vycm9yKEVOT0VOVCwgJ05vIHRyYW5zbGF0aW9uIGZpbGUgZm91bmQgZm9yIGRvbWFpbicsIGRvbWFpbikKICAgICAjIEF2b2lkIG9wZW5pbmcsIHJlYWRpbmcsIGFuZCBwYXJzaW5nIHRoZSAubW8gZmlsZSBhZnRlciBpdCdzIGJlZW4gZG9uZQogICAgICMgb25jZS4KICAgICByZXN1bHQgPSBOb25lCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQuZ2V0dGV4dChtZXNzYWdlKQogCkBAIC00NjgsNyArNDY4LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQubGdldHRleHQobWVzc2FnZSkKIApAQCAtNDc2LDcgKzQ3Niw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiBuID09IDE6CiAgICAgICAgICAgICByZXR1cm4gbXNnaWQxCiAgICAgICAgIGVsc2U6CkBAIC00ODcsNyArNDg3LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIG4gPT0gMToKICAgICAgICAgICAgIHJldHVybiBtc2dpZDEKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9nbG9iLnB5IGIvTGliL2dsb2IucHkKaW5kZXggMWY2MDI2NS4uMWEyNjhhMyAxMDA2NDQKLS0tIGEvTGliL2dsb2IucHkKKysrIGIvTGliL2dsb2IucHkKQEAgLTMyLDggKzMyLDcgQEAKICAgICAgICAgcmV0dXJuCiAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGhuYW1lKQogICAgIGlmIG5vdCBkaXJuYW1lOgotICAgICAgICBmb3IgbmFtZSBpbiBnbG9iMShOb25lLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICB5aWVsZCBuYW1lCisgICAgICAgIHlpZWxkIGZyb20gZ2xvYjEoTm9uZSwgYmFzZW5hbWUpCiAgICAgICAgIHJldHVybgogICAgICMgYG9zLnBhdGguc3BsaXQoKWAgcmV0dXJucyB0aGUgYXJndW1lbnQgaXRzZWxmIGFzIGEgZGlybmFtZSBpZiBpdCBpcyBhCiAgICAgIyBkcml2ZSBvciBVTkMgcGF0aC4gIFByZXZlbnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGlmIGEgZHJpdmUgb3IgVU5DIHBhdGgKQEAgLTYyLDcgKzYxLDcgQEAKICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbm90IF9pc2hpZGRlbihwYXR0ZXJuKToKICAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBuYW1lcyBpZiBub3QgX2lzaGlkZGVuKHgpXQpkaWZmIC0tZ2l0IGEvTGliL2d6aXAucHkgYi9MaWIvZ3ppcC5weQppbmRleCAyZmQwM2ZhLi44ZDIxZmU0IDEwMDY0NAotLS0gYS9MaWIvZ3ppcC5weQorKysgYi9MaWIvZ3ppcC5weQpAQCAtMjMsOSArMjMsOSBAQAogICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBjYW4gYmUgYW4gYWN0dWFsIGZpbGVuYW1lIChhIHN0ciBvciBieXRlcyBvYmplY3QpLCBvcgogICAgIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAotICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgImEiIG9yICJhYiIgZm9yIGJpbmFyeSBtb2RlLAotICAgIG9yICJydCIsICJ3dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzICJyYiIsIGFuZCB0aGUKLSAgICBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJ4IiwgInhiIiwgImEiIG9yICJhYiIgZm9yCisgICAgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIsICJ4dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzCisgICAgInJiIiwgYW5kIHRoZSBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KIAogICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBHemlwRmlsZSBjb25zdHJ1Y3RvcjoKICAgICBHemlwRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKQEAgLTY1LDkgKzY1LDYgQEAKICAgICAjIG9yIHVuc2lnbmVkLgogICAgIG91dHB1dC53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCB2YWx1ZSkpCiAKLWRlZiByZWFkMzIoaW5wdXQpOgotICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCI8SSIsIGlucHV0LnJlYWQoNCkpWzBdCi0KIGNsYXNzIF9QYWRkZWRGaWxlOgogICAgICIiIk1pbmltYWwgcmVhZC1vbmx5IGZpbGUgb2JqZWN0IHRoYXQgcHJlcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGNvbnRlbnRzCiAgICAgb2YgYW4gYWN0dWFsIGZpbGUuIFNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2YgZ3ppcC5weSwgYXMgaXQgbGFja3MKQEAgLTE1NCwxMSArMTUxLDExIEBACiAgICAgICAgIGZpbGVvYmosIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIGl0IGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmcsCiAgICAgICAgIGFuZCBpbiB0aGlzIGNhc2UgdGhlIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgaGVhZGVyLgogCi0gICAgICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgJ3InLCAncmInLCAnYScsICdhYicsICd3Jywgb3IgJ3diJywKLSAgICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAorICAgICAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgYW55IG9mICdyJywgJ3JiJywgJ2EnLCAnYWInLCAndycsICd3YicsICd4Jywgb3IKKyAgICAgICAgJ3hiJyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBkZWZhdWx0CiAgICAgICAgIGlzIHRoZSBtb2RlIG9mIGZpbGVvYmogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgJ3JiJy4KICAgICAgICAgQSBtb2RlIG9mICdyJyBpcyBlcXVpdmFsZW50IHRvIG9uZSBvZiAncmInLCBhbmQgc2ltaWxhcmx5IGZvciAndycgYW5kCi0gICAgICAgICd3YicsIGFuZCAnYScgYW5kICdhYicuCisgICAgICAgICd3YicsICdhJyBhbmQgJ2FiJywgYW5kICd4JyBhbmQgJ3hiJy4KIAogICAgICAgICBUaGUgY29tcHJlc3NsZXZlbCBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMCB0byA5IGNvbnRyb2xsaW5nIHRoZQogICAgICAgICBsZXZlbCBvZiBjb21wcmVzc2lvbjsgMSBpcyBmYXN0ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbGVhc3QgY29tcHJlc3Npb24sCkBAIC0yMDQsNyArMjAxLDcgQEAKICAgICAgICAgICAgIHNlbGYubWluX3JlYWRzaXplID0gMTAwCiAgICAgICAgICAgICBmaWxlb2JqID0gX1BhZGRlZEZpbGUoZmlsZW9iaikKIAotICAgICAgICBlbGlmIG1vZGUuc3RhcnRzd2l0aCgoJ3cnLCAnYScpKToKKyAgICAgICAgZWxpZiBtb2RlLnN0YXJ0c3dpdGgoKCd3JywgJ2EnLCAneCcpKToKICAgICAgICAgICAgIHNlbGYubW9kZSA9IFdSSVRFCiAgICAgICAgICAgICBzZWxmLl9pbml0X3dyaXRlKGZpbGVuYW1lKQogICAgICAgICAgICAgc2VsZi5jb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooY29tcHJlc3NsZXZlbCwKQEAgLTI4MSwyOCArMjc4LDMyIEBACiAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihiIiIpICYgMHhmZmZmZmZmZgogICAgICAgICBzZWxmLnNpemUgPSAwCiAKKyAgICBkZWYgX3JlYWRfZXhhY3Qoc2VsZiwgbik6CisgICAgICAgIGRhdGEgPSBzZWxmLmZpbGVvYmoucmVhZChuKQorICAgICAgICB3aGlsZSBsZW4oZGF0YSkgPCBuOgorICAgICAgICAgICAgYiA9IHNlbGYuZmlsZW9iai5yZWFkKG4gLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBpZiBub3QgYjoKKyAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCisgICAgICAgICAgICBkYXRhICs9IGIKKyAgICAgICAgcmV0dXJuIGRhdGEKKwogICAgIGRlZiBfcmVhZF9nemlwX2hlYWRlcihzZWxmKToKICAgICAgICAgbWFnaWMgPSBzZWxmLmZpbGVvYmoucmVhZCgyKQogICAgICAgICBpZiBtYWdpYyA9PSBiJyc6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgbWFnaWMgIT0gYidcMDM3XDIxMyc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOb3QgYSBnemlwcGVkIGZpbGUnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTm90IGEgZ3ppcHBlZCBmaWxlJykKIAotICAgICAgICBtZXRob2QgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKKyAgICAgICAgbWV0aG9kLCBmbGFnLCBzZWxmLm10aW1lID0gc3RydWN0LnVucGFjaygiPEJCSXh4Iiwgc2VsZi5fcmVhZF9leGFjdCg4KSkKICAgICAgICAgaWYgbWV0aG9kICE9IDg6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCi0gICAgICAgIGZsYWcgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKLSAgICAgICAgc2VsZi5tdGltZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopCi0gICAgICAgICMgZXh0cmFmbGFnID0gc2VsZi5maWxlb2JqLnJlYWQoMSkKLSAgICAgICAgIyBvcyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCiAKICAgICAgICAgaWYgZmxhZyAmIEZFWFRSQToKICAgICAgICAgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIGV4dHJhIGZpZWxkLCBpZiBwcmVzZW50Ci0gICAgICAgICAgICB4bGVuID0gb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgeGxlbiA9IHhsZW4gKyAyNTYqb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoeGxlbikKKyAgICAgICAgICAgIGV4dHJhX2xlbiwgPSBzdHJ1Y3QudW5wYWNrKCI8SCIsIHNlbGYuX3JlYWRfZXhhY3QoMikpCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KGV4dHJhX2xlbikKICAgICAgICAgaWYgZmxhZyAmIEZOQU1FOgogICAgICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTMxNiwxOCArMzE3LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHMgb3Igcz09YidcMDAwJzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgZmxhZyAmIEZIQ1JDOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KDIpICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSAxNi1iaXQgaGVhZGVyIENSQwogCiAgICAgICAgIHVudXNlZCA9IHNlbGYuZmlsZW9iai51bnVzZWQoKQogICAgICAgICBpZiB1bnVzZWQ6CiAgICAgICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmRlY29tcHJlc3ModW51c2VkKQogICAgICAgICAgICAgc2VsZi5fYWRkX3JlYWRfZGF0YSh1bmNvbXByZXNzKQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHdyaXRlKHNlbGYsZGF0YSk6CiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBXUklURToKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAid3JpdGUoKSBvbiByZWFkLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlKCkgb24gY2xvc2VkIEd6aXBGaWxlIG9iamVjdCIpCkBAIC0zNDgsMjcgKzM1MCwyMyBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZCgpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBiJycKIAogICAgICAgICByZWFkc2l6ZSA9IDEwMjQKICAgICAgICAgaWYgc2l6ZSA8IDA6ICAgICAgICAjIGdldCB0aGUgd2hvbGUgdGhpbmcKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKHJlYWRzaXplKQotICAgICAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCi0gICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzZWxmLl9yZWFkKHJlYWRzaXplKToKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCisgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAjIGp1c3QgZ2V0IHNvbWUgbW9yZSBvZiBpdAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdoaWxlIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChyZWFkc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIGlmIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWQocmVhZHNpemUpOgorICAgICAgICAgICAgICAgICAgICBpZiBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCiAKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmW29mZnNldDogb2Zmc2V0ICsgc2l6ZV0KQEAgLTM4MSwxNyArMzc5LDE0IEBACiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPD0gMCBhbmQgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gYicnCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGb3IgY2VydGFpbiBpbnB1dCBkYXRhLCBhIHNpbmdsZSBjYWxsIHRvIF9yZWFkKCkgbWF5IG5vdCByZXR1cm4KLSAgICAgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCi0gICAgICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA8PSAwOgotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoKQotICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICMgRm9yIGNlcnRhaW4gaW5wdXQgZGF0YSwgYSBzaW5nbGUgY2FsbCB0byBfcmVhZCgpIG1heSBub3QgcmV0dXJuCisgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCisgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplIDw9IDAgYW5kIHNlbGYuX3JlYWQoKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgc2l6ZSA8IDAgb3Igc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgogICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCkBAIC00MDUsNyArNDAwLDcgQEAKICAgICBkZWYgcGVlayhzZWxmLCBuKToKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJwZWVrKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInBlZWsoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgIyBEbyBub3QgcmV0dXJuIHJpZGljdWxvdXNseSBzbWFsbCBidWZmZXJzLCBmb3Igb25lIGNvbW1vbiBpZGlvbQogICAgICAgICAjIGlzIHRvIGNhbGwgcGVlaygxKSBhbmQgZXhwZWN0IG1vcmUgYnl0ZXMgaW4gcmV0dXJuLgpAQCAtNDE0LDEyICs0MDksOSBAQAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA9PSAwOgogICAgICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGIiIiBpZiB3ZSBoYXZlbid0IHJlYWNoZWQgRU9GLgotICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgMTAyNCBpcyB0aGUgc2FtZSBidWZmZXJpbmcgaGV1cmlzdGljIHVzZWQgaW4gcmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQobWF4KG4sIDEwMjQpKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBkb24ndCByZXR1cm4gYiIiIGlmIHdlIGhhdmVuJ3QgcmVhY2hlZCBFT0YuCisgICAgICAgICAgICAjIDEwMjQgaXMgdGhlIHNhbWUgYnVmZmVyaW5nIGhldXJpc3RpYyB1c2VkIGluIHJlYWQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5leHRyYXNpemUgPT0gMCBhbmQgc2VsZi5fcmVhZChtYXgobiwgMTAyNCkpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgcmVtYWluaW5nID0gc2VsZi5leHRyYXNpemUKQEAgLTQzMiwxMyArNDI0LDE0IEBACiAKICAgICBkZWYgX3JlYWQoc2VsZiwgc2l6ZT0xMDI0KToKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgc2VsZi5fbmV3X21lbWJlcjoKICAgICAgICAgICAgICMgSWYgdGhlIF9uZXdfbWVtYmVyIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAjIGp1bXAgdG8gdGhlIG5leHQgbWVtYmVyLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgICAgICAgICBzZWxmLl9pbml0X3JlYWQoKQotICAgICAgICAgICAgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgc2VsZi5kZWNvbXByZXNzID0gemxpYi5kZWNvbXByZXNzb2JqKC16bGliLk1BWF9XQklUUykKICAgICAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBGYWxzZQogCkBAIC00NTUsNyArNDQ4LDcgQEAKICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5wcmVwZW5kKHNlbGYuZGVjb21wcmVzcy51bnVzZWRfZGF0YSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfZW9mKCkKICAgICAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ1JlYWNoZWQgRU9GJykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLmRlY29tcHJlc3MuZGVjb21wcmVzcyhidWYpCiAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQpAQCAtNDcxLDYgKzQ2NCw3IEBACiAgICAgICAgICAgICAjIGEgbmV3IG1lbWJlciBvbiB0aGUgbmV4dCBjYWxsCiAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCiAgICAgICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9hZGRfcmVhZF9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoZGF0YSwgc2VsZi5jcmMpICYgMHhmZmZmZmZmZgpAQCAtNDg1LDEzICs0NzksMTIgQEAKICAgICAgICAgIyBXZSBjaGVjayB0aGUgdGhhdCB0aGUgY29tcHV0ZWQgQ1JDIGFuZCBzaXplIG9mIHRoZQogICAgICAgICAjIHVuY29tcHJlc3NlZCBkYXRhIG1hdGNoZXMgdGhlIHN0b3JlZCB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlIHNpemUKICAgICAgICAgIyBzdG9yZWQgaXMgdGhlIHRydWUgZmlsZSBzaXplIG1vZCAyKiozMi4KLSAgICAgICAgY3JjMzIgPSByZWFkMzIoc2VsZi5maWxlb2JqKQotICAgICAgICBpc2l6ZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopICAjIG1heSBleGNlZWQgMkdCCisgICAgICAgIGNyYzMyLCBpc2l6ZSA9IHN0cnVjdC51bnBhY2soIjxJSSIsIHNlbGYuX3JlYWRfZXhhY3QoOCkpCiAgICAgICAgIGlmIGNyYzMyICE9IHNlbGYuY3JjOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ1JDIGNoZWNrIGZhaWxlZCAlcyAhPSAlcyIgJSAoaGV4KGNyYzMyKSwKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNSQyBjaGVjayBmYWlsZWQgJXMgIT0gJXMiICUgKGhleChjcmMzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXgoc2VsZi5jcmMpKSkKICAgICAgICAgZWxpZiBpc2l6ZSAhPSAoc2VsZi5zaXplICYgMHhmZmZmZmZmZik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJJbmNvcnJlY3QgbGVuZ3RoIG9mIGRhdGEgcHJvZHVjZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKIAogICAgICAgICAjIEd6aXAgZmlsZXMgY2FuIGJlIHBhZGRlZCB3aXRoIHplcm9lcyBhbmQgc3RpbGwgaGF2ZSBhcmNoaXZlcy4KICAgICAgICAgIyBDb25zdW1lIGFsbCB6ZXJvIGJ5dGVzIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0CkBAIC01NDAsNyArNTMzLDcgQEAKICAgICAgICAgJycnUmV0dXJuIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtIGZpbGUgcG9zaXRpb24gaW5kaWNhdG9yIHRvIHRoZQogICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIGZpbGUnJycKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDYW4ndCByZXdpbmQgaW4gd3JpdGUgbW9kZSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDYW4ndCByZXdpbmQgaW4gd3JpdGUgbW9kZSIpCiAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKDApCiAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBUcnVlCiAgICAgICAgIHNlbGYuZXh0cmFidWYgPSBiIiIKQEAgLTU2NSw3ICs1NTgsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlZWsgZnJvbSBlbmQgbm90IHN1cHBvcnRlZCcpCiAgICAgICAgIGlmIHNlbGYubW9kZSA9PSBXUklURToKICAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYub2Zmc2V0OgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ05lZ2F0aXZlIHNlZWsgaW4gd3JpdGUgbW9kZScpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTmVnYXRpdmUgc2VlayBpbiB3cml0ZSBtb2RlJykKICAgICAgICAgICAgIGNvdW50ID0gb2Zmc2V0IC0gc2VsZi5vZmZzZXQKICAgICAgICAgICAgIGNodW5rID0gYnl0ZXMoMTAyNCkKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGNvdW50IC8vIDEwMjQpOgpkaWZmIC0tZ2l0IGEvTGliL2hhc2hsaWIucHkgYi9MaWIvaGFzaGxpYi5weQppbmRleCAyMTQ1NGM3Li43NzY3M2YwIDEwMDY0NAotLS0gYS9MaWIvaGFzaGxpYi5weQorKysgYi9MaWIvaGFzaGxpYi5weQpAQCAtMSw0ICsxLDQgQEAKLSMgIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQorIy4gIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQogIyAgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCkBAIC01NCw0MCArNTQsNTIgQEAKIAogIyBUaGlzIHR1cGxlIGFuZCBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCkgbXVzdCBiZSBtb2RpZmllZCBpZiBhIG5ldwogIyBhbHdheXMgYXZhaWxhYmxlIGFsZ29yaXRobSBpcyBhZGRlZC4KLV9fYWx3YXlzX3N1cHBvcnRlZCA9ICgnbWQ1JywgJ3NoYTEnLCAnc2hhMjI0JywgJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJykKK19fYWx3YXlzX3N1cHBvcnRlZCA9ICgnbWQ1JywgJ3NoYTEnLCAnc2hhMjI0JywgJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJywKKyAgICAgICAgICAgICAgICAgICAgICAnc2hhM18yMjQnLCAnc2hhM18yNTYnLCAnc2hhM18zODQnLCAnc2hhM181MTInKQogCiBhbGdvcml0aG1zX2d1YXJhbnRlZWQgPSBzZXQoX19hbHdheXNfc3VwcG9ydGVkKQogYWxnb3JpdGhtc19hdmFpbGFibGUgPSBzZXQoX19hbHdheXNfc3VwcG9ydGVkKQogCiBfX2FsbF9fID0gX19hbHdheXNfc3VwcG9ydGVkICsgKCduZXcnLCAnYWxnb3JpdGhtc19ndWFyYW50ZWVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZ29yaXRobXNfYXZhaWxhYmxlJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZ29yaXRobXNfYXZhaWxhYmxlJywgJ3Bia2RmMl9obWFjJykKIAogCitfX2J1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUgPSB7fQorCiBkZWYgX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihuYW1lKToKKyAgICBjYWNoZSA9IF9fYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZQorICAgIGNvbnN0cnVjdG9yID0gY2FjaGUuZ2V0KG5hbWUpCisgICAgaWYgY29uc3RydWN0b3IgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcgogICAgIHRyeToKICAgICAgICAgaWYgbmFtZSBpbiAoJ1NIQTEnLCAnc2hhMScpOgogICAgICAgICAgICAgaW1wb3J0IF9zaGExCi0gICAgICAgICAgICByZXR1cm4gX3NoYTEuc2hhMQorICAgICAgICAgICAgY2FjaGVbJ1NIQTEnXSA9IGNhY2hlWydzaGExJ10gPSBfc2hhMS5zaGExCiAgICAgICAgIGVsaWYgbmFtZSBpbiAoJ01ENScsICdtZDUnKToKICAgICAgICAgICAgIGltcG9ydCBfbWQ1Ci0gICAgICAgICAgICByZXR1cm4gX21kNS5tZDUKKyAgICAgICAgICAgIGNhY2hlWydNRDUnXSA9IGNhY2hlWydtZDUnXSA9IF9tZDUubWQ1CiAgICAgICAgIGVsaWYgbmFtZSBpbiAoJ1NIQTI1NicsICdzaGEyNTYnLCAnU0hBMjI0JywgJ3NoYTIyNCcpOgogICAgICAgICAgICAgaW1wb3J0IF9zaGEyNTYKLSAgICAgICAgICAgIGJzID0gbmFtZVszOl0KLSAgICAgICAgICAgIGlmIGJzID09ICcyNTYnOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhMjU2LnNoYTI1NgotICAgICAgICAgICAgZWxpZiBicyA9PSAnMjI0JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTI1Ni5zaGEyMjQKKyAgICAgICAgICAgIGNhY2hlWydTSEEyMjQnXSA9IGNhY2hlWydzaGEyMjQnXSA9IF9zaGEyNTYuc2hhMjI0CisgICAgICAgICAgICBjYWNoZVsnU0hBMjU2J10gPSBjYWNoZVsnc2hhMjU2J10gPSBfc2hhMjU2LnNoYTI1NgogICAgICAgICBlbGlmIG5hbWUgaW4gKCdTSEE1MTInLCAnc2hhNTEyJywgJ1NIQTM4NCcsICdzaGEzODQnKToKICAgICAgICAgICAgIGltcG9ydCBfc2hhNTEyCi0gICAgICAgICAgICBicyA9IG5hbWVbMzpdCi0gICAgICAgICAgICBpZiBicyA9PSAnNTEyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTUxMi5zaGE1MTIKLSAgICAgICAgICAgIGVsaWYgYnMgPT0gJzM4NCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGE1MTIuc2hhMzg0CisgICAgICAgICAgICBjYWNoZVsnU0hBMzg0J10gPSBjYWNoZVsnc2hhMzg0J10gPSBfc2hhNTEyLnNoYTM4NAorICAgICAgICAgICAgY2FjaGVbJ1NIQTUxMiddID0gY2FjaGVbJ3NoYTUxMiddID0gX3NoYTUxMi5zaGE1MTIKKyAgICAgICAgZWxpZiBuYW1lIGluIHsnc2hhM18yMjQnLCAnc2hhM18yNTYnLCAnc2hhM18zODQnLCAnc2hhM181MTInLAorICAgICAgICAgICAgICAgICAgICAgICdTSEEzXzIyNCcsICdTSEEzXzI1NicsICdTSEEzXzM4NCcsICdTSEEzXzUxMid9OgorICAgICAgICAgICAgaW1wb3J0IF9zaGEzCisgICAgICAgICAgICBjYWNoZVsnU0hBM18yMjQnXSA9IGNhY2hlWydzaGEzXzIyNCddID0gX3NoYTMuc2hhM18yMjQKKyAgICAgICAgICAgIGNhY2hlWydTSEEzXzI1NiddID0gY2FjaGVbJ3NoYTNfMjU2J10gPSBfc2hhMy5zaGEzXzI1NgorICAgICAgICAgICAgY2FjaGVbJ1NIQTNfMzg0J10gPSBjYWNoZVsnc2hhM18zODQnXSA9IF9zaGEzLnNoYTNfMzg0CisgICAgICAgICAgICBjYWNoZVsnU0hBM181MTInXSA9IGNhY2hlWydzaGEzXzUxMiddID0gX3NoYTMuc2hhM181MTIKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHBhc3MgICMgbm8gZXh0ZW5zaW9uIG1vZHVsZSwgdGhpcyBoYXNoIGlzIHVuc3VwcG9ydGVkLgogCisgICAgY29uc3RydWN0b3IgPSBjYWNoZS5nZXQobmFtZSkKKyAgICBpZiBjb25zdHJ1Y3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yCisKICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnN1cHBvcnRlZCBoYXNoIHR5cGUgJyArIG5hbWUpCiAKIApAQCAtMTM0LDYgKzE0Niw3MSBAQAogICAgIG5ldyA9IF9fcHlfbmV3CiAgICAgX19nZXRfaGFzaCA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IKIAordHJ5OgorICAgICMgT3BlblNTTCdzIFBLQ1M1X1BCS0RGMl9ITUFDIHJlcXVpcmVzIE9wZW5TU0wgMS4wKyB3aXRoIEhNQUMgYW5kIFNIQQorICAgIGZyb20gX2hhc2hsaWIgaW1wb3J0IHBia2RmMl9obWFjCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3RyYW5zXzVDID0gYnl0ZXMoKHggXiAweDVDKSBmb3IgeCBpbiByYW5nZSgyNTYpKQorICAgIF90cmFuc18zNiA9IGJ5dGVzKCh4IF4gMHgzNikgZm9yIHggaW4gcmFuZ2UoMjU2KSkKKworICAgIGRlZiBwYmtkZjJfaG1hYyhoYXNoX25hbWUsIHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBka2xlbj1Ob25lKToKKyAgICAgICAgIiIiUGFzc3dvcmQgYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gMiAoUEtDUyAjNSB2Mi4wKQorCisgICAgICAgIFRoaXMgUHl0aG9uIGltcGxlbWVudGF0aW9ucyBiYXNlZCBvbiB0aGUgaG1hYyBtb2R1bGUgYWJvdXQgYXMgZmFzdAorICAgICAgICBhcyBPcGVuU1NMJ3MgUEtDUzVfUEJLREYyX0hNQUMgZm9yIHNob3J0IHBhc3N3b3JkcyBhbmQgbXVjaCBmYXN0ZXIKKyAgICAgICAgZm9yIGxvbmcgcGFzc3dvcmRzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaGFzaF9uYW1lLCBzdHIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKGhhc2hfbmFtZSkKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXNzd29yZCwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHBhc3N3b3JkID0gYnl0ZXMobWVtb3J5dmlldyhwYXNzd29yZCkpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNhbHQsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBzYWx0ID0gYnl0ZXMobWVtb3J5dmlldyhzYWx0KSkKKworICAgICAgICAjIEZhc3QgaW5saW5lIEhNQUMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaW5uZXIgPSBuZXcoaGFzaF9uYW1lKQorICAgICAgICBvdXRlciA9IG5ldyhoYXNoX25hbWUpCisgICAgICAgIGJsb2Nrc2l6ZSA9IGdldGF0dHIoaW5uZXIsICdibG9ja19zaXplJywgNjQpCisgICAgICAgIGlmIGxlbihwYXNzd29yZCkgPiBibG9ja3NpemU6CisgICAgICAgICAgICBwYXNzd29yZCA9IG5ldyhoYXNoX25hbWUsIHBhc3N3b3JkKS5kaWdlc3QoKQorICAgICAgICBwYXNzd29yZCA9IHBhc3N3b3JkICsgYidceDAwJyAqIChibG9ja3NpemUgLSBsZW4ocGFzc3dvcmQpKQorICAgICAgICBpbm5lci51cGRhdGUocGFzc3dvcmQudHJhbnNsYXRlKF90cmFuc18zNikpCisgICAgICAgIG91dGVyLnVwZGF0ZShwYXNzd29yZC50cmFuc2xhdGUoX3RyYW5zXzVDKSkKKworICAgICAgICBkZWYgcHJmKG1zZywgaW5uZXI9aW5uZXIsIG91dGVyPW91dGVyKToKKyAgICAgICAgICAgICMgUEJLREYyX0hNQUMgdXNlcyB0aGUgcGFzc3dvcmQgYXMga2V5LiBXZSBjYW4gcmUtdXNlIHRoZSBzYW1lCisgICAgICAgICAgICAjIGRpZ2VzdCBvYmplY3RzIGFuZCBhbmQganVzdCB1cGRhdGUgY29waWVzIHRvIHNraXAgaW5pdGlhbGl6YXRpb24uCisgICAgICAgICAgICBpY3B5ID0gaW5uZXIuY29weSgpCisgICAgICAgICAgICBvY3B5ID0gb3V0ZXIuY29weSgpCisgICAgICAgICAgICBpY3B5LnVwZGF0ZShtc2cpCisgICAgICAgICAgICBvY3B5LnVwZGF0ZShpY3B5LmRpZ2VzdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9jcHkuZGlnZXN0KCkKKworICAgICAgICBpZiBpdGVyYXRpb25zIDwgMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoaXRlcmF0aW9ucykKKyAgICAgICAgaWYgZGtsZW4gaXMgTm9uZToKKyAgICAgICAgICAgIGRrbGVuID0gb3V0ZXIuZGlnZXN0X3NpemUKKyAgICAgICAgaWYgZGtsZW4gPCAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihka2xlbikKKworICAgICAgICBka2V5ID0gYicnCisgICAgICAgIGxvb3AgPSAxCisgICAgICAgIGZyb21fYnl0ZXMgPSBpbnQuZnJvbV9ieXRlcworICAgICAgICB3aGlsZSBsZW4oZGtleSkgPCBka2xlbjoKKyAgICAgICAgICAgIHByZXYgPSBwcmYoc2FsdCArIGxvb3AudG9fYnl0ZXMoNCwgJ2JpZycpKQorICAgICAgICAgICAgIyBlbmRpYW5lc3MgZG9lc24ndCBtYXR0ZXIgaGVyZSBhcyBsb25nIHRvIC8gZnJvbSB1c2UgdGhlIHNhbWUKKyAgICAgICAgICAgIHJrZXkgPSBpbnQuZnJvbV9ieXRlcyhwcmV2LCAnYmlnJykKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMgLSAxKToKKyAgICAgICAgICAgICAgICBwcmV2ID0gcHJmKHByZXYpCisgICAgICAgICAgICAgICAgIyBya2V5ID0gcmtleSBeIHByZXYKKyAgICAgICAgICAgICAgICBya2V5IF49IGZyb21fYnl0ZXMocHJldiwgJ2JpZycpCisgICAgICAgICAgICBsb29wICs9IDEKKyAgICAgICAgICAgIGRrZXkgKz0gcmtleS50b19ieXRlcyhpbm5lci5kaWdlc3Rfc2l6ZSwgJ2JpZycpCisKKyAgICAgICAgcmV0dXJuIGRrZXlbOmRrbGVuXQorCisKIGZvciBfX2Z1bmNfbmFtZSBpbiBfX2Fsd2F5c19zdXBwb3J0ZWQ6CiAgICAgIyB0cnkgdGhlbSBhbGwsIHNvbWUgbWF5IG5vdCB3b3JrIGR1ZSB0byB0aGUgT3BlblNTTAogICAgICMgdmVyc2lvbiBub3Qgc3VwcG9ydGluZyB0aGF0IGFsZ29yaXRobS4KZGlmZiAtLWdpdCBhL0xpYi9obWFjLnB5IGIvTGliL2htYWMucHkKaW5kZXggNDI5N2E3MS4uZDEzYjIwNSAxMDA2NDQKLS0tIGEvTGliL2htYWMucHkKKysrIGIvTGliL2htYWMucHkKQEAgLTQsNyArNCw3IEBACiAiIiIKIAogaW1wb3J0IHdhcm5pbmdzIGFzIF93YXJuaW5ncwotZnJvbSBvcGVyYXRvciBpbXBvcnQgX2NvbXBhcmVfZGlnZXN0IGFzIGNvbXBhcmVfZGlnZXN0Citmcm9tIF9vcGVyYXRvciBpbXBvcnQgX2NvbXBhcmVfZGlnZXN0IGFzIGNvbXBhcmVfZGlnZXN0CiAKIHRyYW5zXzVDID0gYnl0ZXMoKHggXiAweDVDKSBmb3IgeCBpbiByYW5nZSgyNTYpKQogdHJhbnNfMzYgPSBieXRlcygoeCBeIDB4MzYpIGZvciB4IGluIHJhbmdlKDI1NikpCkBAIC0zMSwxMSArMzEsMTEgQEAKICAgICAgICAgICAgICAgICAgICBBIGhhc2hsaWIgY29uc3RydWN0b3IgcmV0dXJuaW5nIGEgbmV3IGhhc2ggb2JqZWN0LgogICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGhhc2hsaWIubWQ1LgogCi0gICAgICAgIE5vdGU6IGtleSBhbmQgbXNnIG11c3QgYmUgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgTm90ZToga2V5IGFuZCBtc2cgbXVzdCBiZSBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3RzLgogICAgICAgICAiIiIKIAotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGJ5dGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcywgYnV0IGdvdCAlciIgJSB0eXBlKGtleSkuX19uYW1lX18pCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcyBvciBieXRlYXJyYXksIGJ1dCBnb3QgJXIiICUgdHlwZShrZXkpLl9fbmFtZV9fKQogCiAgICAgICAgIGlmIGRpZ2VzdG1vZCBpcyBOb25lOgogICAgICAgICAgICAgaW1wb3J0IGhhc2hsaWIKQEAgLTc1LDggKzc1LDYgQEAKICAgICBkZWYgdXBkYXRlKHNlbGYsIG1zZyk6CiAgICAgICAgICIiIlVwZGF0ZSB0aGlzIGhhc2hpbmcgb2JqZWN0IHdpdGggdGhlIHN0cmluZyBtc2cuCiAgICAgICAgICIiIgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtc2csIGJ5dGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIGJ1dCBnb3QgJXIiICUgdHlwZShtc2cpLl9fbmFtZV9fKQogICAgICAgICBzZWxmLmlubmVyLnVwZGF0ZShtc2cpCiAKICAgICBkZWYgY29weShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9odG1sL19faW5pdF9fLnB5IGIvTGliL2h0bWwvX19pbml0X18ucHkKaW5kZXggMDI2NTJlZi4uMmFkMTY3ZiAxMDA2NDQKLS0tIGEvTGliL2h0bWwvX19pbml0X18ucHkKKysrIGIvTGliL2h0bWwvX19pbml0X18ucHkKQEAgLTIsMTEgKzIsNiBAQAogR2VuZXJhbCBmdW5jdGlvbnMgZm9yIEhUTUwgbWFuaXB1bGF0aW9uLgogIiIiCiAKLQotX2VzY2FwZV9tYXAgPSB7b3JkKCcmJyk6ICcmYW1wOycsIG9yZCgnPCcpOiAnJmx0OycsIG9yZCgnPicpOiAnJmd0Oyd9Ci1fZXNjYXBlX21hcF9mdWxsID0ge29yZCgnJicpOiAnJmFtcDsnLCBvcmQoJzwnKTogJyZsdDsnLCBvcmQoJz4nKTogJyZndDsnLAotICAgICAgICAgICAgICAgICAgICBvcmQoJyInKTogJyZxdW90OycsIG9yZCgnXCcnKTogJyYjeDI3Oyd9Ci0KICMgTkI6IHRoaXMgaXMgYSBjYW5kaWRhdGUgZm9yIGEgYnl0ZXMvc3RyaW5nIHBvbHltb3JwaGljIGludGVyZmFjZQogCiBkZWYgZXNjYXBlKHMsIHF1b3RlPVRydWUpOgpAQCAtMTYsNiArMTEsMTAgQEAKICAgICBjaGFyYWN0ZXJzLCBib3RoIGRvdWJsZSBxdW90ZSAoIikgYW5kIHNpbmdsZSBxdW90ZSAoJykgY2hhcmFjdGVycyBhcmUgYWxzbwogICAgIHRyYW5zbGF0ZWQuCiAgICAgIiIiCisgICAgcyA9IHMucmVwbGFjZSgiJiIsICImYW1wOyIpICMgTXVzdCBiZSBkb25lIGZpcnN0IQorICAgIHMgPSBzLnJlcGxhY2UoIjwiLCAiJmx0OyIpCisgICAgcyA9IHMucmVwbGFjZSgiPiIsICImZ3Q7IikKICAgICBpZiBxdW90ZToKLSAgICAgICAgcmV0dXJuIHMudHJhbnNsYXRlKF9lc2NhcGVfbWFwX2Z1bGwpCi0gICAgcmV0dXJuIHMudHJhbnNsYXRlKF9lc2NhcGVfbWFwKQorICAgICAgICBzID0gcy5yZXBsYWNlKCciJywgIiZxdW90OyIpCisgICAgICAgIHMgPSBzLnJlcGxhY2UoJ1wnJywgIiYjeDI3OyIpCisgICAgcmV0dXJuIHMKZGlmZiAtLWdpdCBhL0xpYi9odG1sL3BhcnNlci5weSBiL0xpYi9odG1sL3BhcnNlci5weQppbmRleCA2MGEzMjJhLi4xOGYzMTE1IDEwMDY0NAotLS0gYS9MaWIvaHRtbC9wYXJzZXIucHkKKysrIGIvTGliL2h0bWwvcGFyc2VyLnB5CkBAIC0xMiw2ICsxMiw4IEBACiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncwogCitfX2FsbF9fID0gWydIVE1MUGFyc2VyJ10KKwogIyBSZWd1bGFyIGV4cHJlc3Npb25zIHVzZWQgZm9yIHBhcnNpbmcKIAogaW50ZXJlc3Rpbmdfbm9ybWFsID0gcmUuY29tcGlsZSgnWyY8XScpCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9jbGllbnQucHkgYi9MaWIvaHR0cC9jbGllbnQucHkKaW5kZXggY2M0NTJlMi4uNmUzMmM3YiAxMDA2NDQKLS0tIGEvTGliL2h0dHAvY2xpZW50LnB5CisrKyBiL0xpYi9odHRwL2NsaWVudC5weQpAQCAtMjcxLDggKzI3MSw2IEBACiAgICAgcmV0dXJuIGVtYWlsLnBhcnNlci5QYXJzZXIoX2NsYXNzPV9jbGFzcykucGFyc2VzdHIoaHN0cmluZykKIAogCi1fc3RyaWN0X3NlbnRpbmVsID0gb2JqZWN0KCkKLQogY2xhc3MgSFRUUFJlc3BvbnNlKGlvLlJhd0lPQmFzZSk6CiAKICAgICAjIFNlZSBSRkMgMjYxNiBzZWMgMTkuNiBhbmQgUkZDIDE5NDUgc2VjIDYgZm9yIGRldGFpbHMuCkBAIC0yODIsNyArMjgwLDcgQEAKICAgICAjIHRleHQgZm9sbG93aW5nIFJGQyAyMDQ3LiAgVGhlIGJhc2ljIHN0YXR1cyBsaW5lIHBhcnNpbmcgb25seQogICAgICMgYWNjZXB0cyBpc28tODg1OS0xLgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2ssIGRlYnVnbGV2ZWw9MCwgc3RyaWN0PV9zdHJpY3Rfc2VudGluZWwsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2ssIGRlYnVnbGV2ZWw9MCwgbWV0aG9kPU5vbmUsIHVybD1Ob25lKToKICAgICAgICAgIyBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSBjb250ZW50LWxlbmd0aCBoZWFkZXIsIHdlIG5lZWQgdG8KICAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgY2xpZW50IGRvZXNuJ3QgcmVhZCBtb3JlIHRoYW4gdGhlCiAgICAgICAgICMgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcy4gIElmIGl0IGRvZXMsIGl0IHdpbGwgYmxvY2sgdW50aWwKQEAgLTI5MiwxMCArMjkwLDYgQEAKICAgICAgICAgIyBjbGllbnRzIHVubGVzcyB0aGV5IGtub3cgd2hhdCB0aGV5IGFyZSBkb2luZy4KICAgICAgICAgc2VsZi5mcCA9IHNvY2subWFrZWZpbGUoInJiIikKICAgICAgICAgc2VsZi5kZWJ1Z2xldmVsID0gZGVidWdsZXZlbAotICAgICAgICBpZiBzdHJpY3QgaXMgbm90IF9zdHJpY3Rfc2VudGluZWw6Ci0gICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ0aGUgJ3N0cmljdCcgYXJndW1lbnQgaXNuJ3Qgc3VwcG9ydGVkIGFueW1vcmU7ICIKLSAgICAgICAgICAgICAgICAiaHR0cC5jbGllbnQgbm93IGFsd2F5cyBhc3N1bWVzIEhUVFAvMS54IGNvbXBsaWFudCBzZXJ2ZXJzLiIsCi0gICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzZWxmLl9tZXRob2QgPSBtZXRob2QKIAogICAgICAgICAjIFRoZSBIVFRQUmVzcG9uc2Ugb2JqZWN0IGlzIHJldHVybmVkIHZpYSB1cmxsaWIuICBUaGUgY2xpZW50cwpAQCAtNzMyLDEzICs3MjYsMTcgQEAKICAgICBkZWZhdWx0X3BvcnQgPSBIVFRQX1BPUlQKICAgICBhdXRvX29wZW4gPSAxCiAgICAgZGVidWdsZXZlbCA9IDAKKyAgICAjIFRDUCBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBUQ1Agc3RhY2sgb24KKyAgICAjIGEgcGVyLWNvbm5lY3Rpb24gYmFzaXMuICBUaGVyZSBpcyBubyBzaW1wbGUgYW5kIGVmZmljaWVudAorICAgICMgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWVjaGFuaXNtIGZvciBkZXRlcm1pbmluZyB0aGUgTVNTLCBzbworICAgICMgaW5zdGVhZCBhIHJlYXNvbmFibGUgZXN0aW1hdGUgaXMgY2hvc2VuLiAgVGhlIGdldHNvY2tvcHQoKQorICAgICMgaW50ZXJmYWNlIHVzaW5nIHRoZSBUQ1BfTUFYU0VHIHBhcmFtZXRlciBtYXkgYmUgYSBzdWl0YWJsZQorICAgICMgYXBwcm9hY2ggb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4gQSB2YWx1ZSBvZiAxNktpQiBpcyBjaG9zZW4KKyAgICAjIGFzIGEgcmVhc29uYWJsZSBlc3RpbWF0ZSBvZiB0aGUgbWF4aW11bSBNU1MuCisgICAgbXNzID0gMTYzODQKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLAotICAgICAgICAgICAgICAgICB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwgc291cmNlX2FkZHJlc3M9Tm9uZSk6Ci0gICAgICAgIGlmIHN0cmljdCBpcyBub3QgX3N0cmljdF9zZW50aW5lbDoKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInRoZSAnc3RyaWN0JyBhcmd1bWVudCBpc24ndCBzdXBwb3J0ZWQgYW55bW9yZTsgIgotICAgICAgICAgICAgICAgICJodHRwLmNsaWVudCBub3cgYWx3YXlzIGFzc3VtZXMgSFRUUC8xLnggY29tcGxpYW50IHNlcnZlcnMuIiwKLSAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgogICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CiAgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MgPSBzb3VyY2VfYWRkcmVzcwogICAgICAgICBzZWxmLnNvY2sgPSBOb25lCkBAIC04MDQsOCArODAyLDggQEAKIAogICAgICAgICBpZiBjb2RlICE9IDIwMDoKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKCJUdW5uZWwgY29ubmVjdGlvbiBmYWlsZWQ6ICVkICVzIiAlIChjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0cmlwKCkpKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiVHVubmVsIGNvbm5lY3Rpb24gZmFpbGVkOiAlZCAlcyIgJSAoY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RyaXAoKSkpCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBsaW5lID0gcmVzcG9uc2UuZnAucmVhZGxpbmUoX01BWExJTkUgKyAxKQogICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gX01BWExJTkU6CkBAIC04OTksOCArODk3LDExIEBACiAgICAgICAgIGRlbCBzZWxmLl9idWZmZXJbOl0KICAgICAgICAgIyBJZiBtc2cgYW5kIG1lc3NhZ2VfYm9keSBhcmUgc2VudCBpbiBhIHNpbmdsZSBzZW5kKCkgY2FsbCwKICAgICAgICAgIyBpdCB3aWxsIGF2b2lkIHBlcmZvcm1hbmNlIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgaW50ZXJhY3Rpb24KLSAgICAgICAgIyBiZXR3ZWVuIGRlbGF5ZWQgYWNrIGFuZCB0aGUgTmFnbGUgYWxnb3JpdGhtLgotICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2VfYm9keSwgYnl0ZXMpOgorICAgICAgICAjIGJldHdlZW4gZGVsYXllZCBhY2sgYW5kIHRoZSBOYWdsZSBhbGdvcml0aG0uIEhvd2V2ZXIsCisgICAgICAgICMgdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2UgZ2FpbiBpZiB0aGUgbWVzc2FnZSBpcyBsYXJnZXIKKyAgICAgICAgIyB0aGFuIE1TUyAoYW5kIHRoZXJlIGlzIGEgbWVtb3J5IHBlbmFsdHkgZm9yIHRoZSBtZXNzYWdlCisgICAgICAgICMgY29weSkuCisgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZV9ib2R5LCBieXRlcykgYW5kIGxlbihtZXNzYWdlX2JvZHkpIDwgc2VsZi5tc3M6CiAgICAgICAgICAgICBtc2cgKz0gbWVzc2FnZV9ib2R5CiAgICAgICAgICAgICBtZXNzYWdlX2JvZHkgPSBOb25lCiAgICAgICAgIHNlbGYuc2VuZChtc2cpCkBAIC0xMTcwLDkgKzExNzEsMTAgQEAKICAgICAgICAgIyBYWFggU2hvdWxkIGtleV9maWxlIGFuZCBjZXJ0X2ZpbGUgYmUgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgY29udGV4dD8KIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBrZXlfZmlsZT1Ob25lLCBjZXJ0X2ZpbGU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLCB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKLSAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUsICosIGNvbnRleHQ9Tm9uZSwgY2hlY2tfaG9zdG5hbWU9Tm9uZSk6Ci0gICAgICAgICAgICBzdXBlcihIVFRQU0Nvbm5lY3Rpb24sIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnQsIHN0cmljdCwgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSwgKiwgY29udGV4dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgICAgICBzdXBlcihIVFRQU0Nvbm5lY3Rpb24sIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnQsIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzKQogICAgICAgICAgICAgc2VsZi5rZXlfZmlsZSA9IGtleV9maWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRfZmlsZSA9IGNlcnRfZmlsZQpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvY29va2llamFyLnB5IGIvTGliL2h0dHAvY29va2llamFyLnB5CmluZGV4IGRkYjc5YzUuLmJlODI4ZWIgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL2Nvb2tpZWphci5weQorKysgYi9MaWIvaHR0cC9jb29raWVqYXIucHkKQEAgLTExOTMsOCArMTE5Myw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtYXBwaW5nID0gVHJ1ZQotICAgICAgICAgICAgZm9yIHN1Ym9iaiBpbiBkZWVwdmFsdWVzKG9iaik6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3Vib2JqCisgICAgICAgICAgICB5aWVsZCBmcm9tIGRlZXB2YWx1ZXMob2JqKQogICAgICAgICBpZiBub3QgbWFwcGluZzoKICAgICAgICAgICAgIHlpZWxkIG9iagogCkBAIC0xNzMxLDggKzE3MzAsOCBAQAogICAgICAgICByZXR1cm4gIjwlc1slc10+IiAlIChzZWxmLl9fY2xhc3NfXywgIiwgIi5qb2luKHIpKQogCiAKLSMgZGVyaXZlcyBmcm9tIElPRXJyb3IgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNC4wCi1jbGFzcyBMb2FkRXJyb3IoSU9FcnJvcik6IHBhc3MKKyMgZGVyaXZlcyBmcm9tIE9TRXJyb3IgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNC4wCitjbGFzcyBMb2FkRXJyb3IoT1NFcnJvcik6IHBhc3MKIAogY2xhc3MgRmlsZUNvb2tpZUphcihDb29raWVKYXIpOgogICAgICIiIkNvb2tpZUphciB0aGF0IGNhbiBiZSBsb2FkZWQgZnJvbSBhbmQgc2F2ZWQgdG8gYSBmaWxlLiIiIgpAQCAtMTc2MiwxNyArMTc2MSwxNCBAQAogICAgICAgICAgICAgaWYgc2VsZi5maWxlbmFtZSBpcyBub3QgTm9uZTogZmlsZW5hbWUgPSBzZWxmLmZpbGVuYW1lCiAgICAgICAgICAgICBlbHNlOiByYWlzZSBWYWx1ZUVycm9yKE1JU1NJTkdfRklMRU5BTUVfVEVYVCkKIAotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLl9yZWFsbHlfbG9hZChmLCBmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgcmV2ZXJ0KHNlbGYsIGZpbGVuYW1lPU5vbmUsCiAgICAgICAgICAgICAgICBpZ25vcmVfZGlzY2FyZD1GYWxzZSwgaWdub3JlX2V4cGlyZXM9RmFsc2UpOgogICAgICAgICAiIiJDbGVhciBhbGwgY29va2llcyBhbmQgcmVsb2FkIGNvb2tpZXMgZnJvbSBhIHNhdmVkIGZpbGUuCiAKLSAgICAgICAgUmFpc2VzIExvYWRFcnJvciAob3IgSU9FcnJvcikgaWYgcmV2ZXJzaW9uIGlzIG5vdCBzdWNjZXNzZnVsOyB0aGUKKyAgICAgICAgUmFpc2VzIExvYWRFcnJvciAob3IgT1NFcnJvcikgaWYgcmV2ZXJzaW9uIGlzIG5vdCBzdWNjZXNzZnVsOyB0aGUKICAgICAgICAgb2JqZWN0J3Mgc3RhdGUgd2lsbCBub3QgYmUgYWx0ZXJlZCBpZiB0aGlzIGhhcHBlbnMuCiAKICAgICAgICAgIiIiCkBAIC0xNzg3LDcgKzE3ODMsNyBAQAogICAgICAgICAgICAgc2VsZi5fY29va2llcyA9IHt9CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2FkKGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpCi0gICAgICAgICAgICBleGNlcHQgKExvYWRFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLl9jb29raWVzID0gb2xkX3N0YXRlCiAgICAgICAgICAgICAgICAgcmFpc2UKIApAQCAtMTg1NywxNSArMTg1MywxMiBAQAogICAgICAgICAgICAgaWYgc2VsZi5maWxlbmFtZSBpcyBub3QgTm9uZTogZmlsZW5hbWUgPSBzZWxmLmZpbGVuYW1lCiAgICAgICAgICAgICBlbHNlOiByYWlzZSBWYWx1ZUVycm9yKE1JU1NJTkdfRklMRU5BTUVfVEVYVCkKIAotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBmOgogICAgICAgICAgICAgIyBUaGVyZSByZWFsbHkgaXNuJ3QgYW4gTFdQIENvb2tpZXMgMi4wIGZvcm1hdCwgYnV0IHRoaXMgaW5kaWNhdGVzCiAgICAgICAgICAgICAjIHRoYXQgdGhlcmUgaXMgZXh0cmEgaW5mb3JtYXRpb24gaW4gaGVyZSAoZG9tYWluX2RvdCBhbmQKICAgICAgICAgICAgICMgcG9ydF9zcGVjKSB3aGlsZSBzdGlsbCBiZWluZyBjb21wYXRpYmxlIHdpdGggbGlid3d3LXBlcmwsIEkgaG9wZS4KICAgICAgICAgICAgIGYud3JpdGUoIiNMV1AtQ29va2llcy0yLjBcbiIpCiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuYXNfbHdwX3N0cihpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgX3JlYWxseV9sb2FkKHNlbGYsIGYsIGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpOgogICAgICAgICBtYWdpYyA9IGYucmVhZGxpbmUoKQpAQCAtMTkzOCw4ICsxOTMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlnbm9yZV9leHBpcmVzIGFuZCBjLmlzX2V4cGlyZWQobm93KToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0X2Nvb2tpZShjKQotCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBfd2Fybl91bmhhbmRsZWRfZXhjZXB0aW9uKCkKQEAgLTIwNDUsNyArMjAzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgc2VsZi5zZXRfY29va2llKGMpCiAKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIF93YXJuX3VuaGFuZGxlZF9leGNlcHRpb24oKQpAQCAtMjA1Nyw4ICsyMDQ5LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmU6IGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZQogICAgICAgICAgICAgZWxzZTogcmFpc2UgVmFsdWVFcnJvcihNSVNTSU5HX0ZJTEVOQU1FX1RFWFQpCiAKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5oZWFkZXIpCiAgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgZm9yIGNvb2tpZSBpbiBzZWxmOgpAQCAtMjA4Nyw1ICsyMDc4LDMgQEAKICAgICAgICAgICAgICAgICAgICAgIlx0Ii5qb2luKFtjb29raWUuZG9tYWluLCBpbml0aWFsX2RvdCwgY29va2llLnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJlLCBleHBpcmVzLCBuYW1lLCB2YWx1ZV0pKwogICAgICAgICAgICAgICAgICAgICAiXG4iKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9zZXJ2ZXIucHkgYi9MaWIvaHR0cC9zZXJ2ZXIucHkKaW5kZXggMmJmZGExMi4uN2I1NzdiNCAxMDA2NDQKLS0tIGEvTGliL2h0dHAvc2VydmVyLnB5CisrKyBiL0xpYi9odHRwL3NlcnZlci5weQpAQCAtNDAxLDEyICs0MDEsMTcgQEAKICAgICAgICAgd2hpbGUgbm90IHNlbGYuY2xvc2VfY29ubmVjdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX29uZV9yZXF1ZXN0KCkKIAotICAgIGRlZiBzZW5kX2Vycm9yKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSk6CisgICAgZGVmIHNlbmRfZXJyb3Ioc2VsZiwgY29kZSwgbWVzc2FnZT1Ob25lLCBleHBsYWluPU5vbmUpOgogICAgICAgICAiIiJTZW5kIGFuZCBsb2cgYW4gZXJyb3IgcmVwbHkuCiAKLSAgICAgICAgQXJndW1lbnRzIGFyZSB0aGUgZXJyb3IgY29kZSwgYW5kIGEgZGV0YWlsZWQgbWVzc2FnZS4KLSAgICAgICAgVGhlIGRldGFpbGVkIG1lc3NhZ2UgZGVmYXVsdHMgdG8gdGhlIHNob3J0IGVudHJ5IG1hdGNoaW5nIHRoZQotICAgICAgICByZXNwb25zZSBjb2RlLgorICAgICAgICBBcmd1bWVudHMgYXJlCisgICAgICAgICogY29kZTogICAgYW4gSFRUUCBlcnJvciBjb2RlCisgICAgICAgICAgICAgICAgICAgMyBkaWdpdHMKKyAgICAgICAgKiBtZXNzYWdlOiBhIHNpbXBsZSBvcHRpb25hbCAxIGxpbmUgcmVhc29uIHBocmFzZS4KKyAgICAgICAgICAgICAgICAgICAqKCBIVEFCIC8gU1AgLyBWQ0hBUiAvICV4ODAtRkYgKQorICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHNob3J0IGVudHJ5IG1hdGNoaW5nIHRoZSByZXNwb25zZSBjb2RlCisgICAgICAgICogZXhwbGFpbjogYSBkZXRhaWxlZCBtZXNzYWdlIGRlZmF1bHRzIHRvIHRoZSBsb25nIGVudHJ5CisgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgdGhlIHJlc3BvbnNlIGNvZGUuCiAKICAgICAgICAgVGhpcyBzZW5kcyBhbiBlcnJvciByZXNwb25zZSAoc28gaXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueQogICAgICAgICBvdXRwdXQgaGFzIGJlZW4gZ2VuZXJhdGVkKSwgbG9ncyB0aGUgZXJyb3IsIGFuZCBmaW5hbGx5IHNlbmRzCkBAIC00MjAsMTcgKzQyNSwyMCBAQAogICAgICAgICAgICAgc2hvcnRtc2csIGxvbmdtc2cgPSAnPz8/JywgJz8/PycKICAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgogICAgICAgICAgICAgbWVzc2FnZSA9IHNob3J0bXNnCi0gICAgICAgIGV4cGxhaW4gPSBsb25nbXNnCisgICAgICAgIGlmIGV4cGxhaW4gaXMgTm9uZToKKyAgICAgICAgICAgIGV4cGxhaW4gPSBsb25nbXNnCiAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJjb2RlICVkLCBtZXNzYWdlICVzIiwgY29kZSwgbWVzc2FnZSkKICAgICAgICAgIyB1c2luZyBfcXVvdGVfaHRtbCB0byBwcmV2ZW50IENyb3NzIFNpdGUgU2NyaXB0aW5nIGF0dGFja3MgKHNlZSBidWcgIzExMDAyMDEpCiAgICAgICAgIGNvbnRlbnQgPSAoc2VsZi5lcnJvcl9tZXNzYWdlX2Zvcm1hdCAlCi0gICAgICAgICAgICAgICAgICAgeydjb2RlJzogY29kZSwgJ21lc3NhZ2UnOiBfcXVvdGVfaHRtbChtZXNzYWdlKSwgJ2V4cGxhaW4nOiBleHBsYWlufSkKKyAgICAgICAgICAgICAgICAgICB7J2NvZGUnOiBjb2RlLCAnbWVzc2FnZSc6IF9xdW90ZV9odG1sKG1lc3NhZ2UpLCAnZXhwbGFpbic6IF9xdW90ZV9odG1sKGV4cGxhaW4pfSkKKyAgICAgICAgYm9keSA9IGNvbnRlbnQuZW5jb2RlKCdVVEYtOCcsICdyZXBsYWNlJykKICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKGNvZGUsIG1lc3NhZ2UpCiAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtVHlwZSIsIHNlbGYuZXJyb3JfY29udGVudF90eXBlKQogICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb25uZWN0aW9uJywgJ2Nsb3NlJykKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1MZW5ndGgnLCBpbnQobGVuKGJvZHkpKSkKICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgIGlmIHNlbGYuY29tbWFuZCAhPSAnSEVBRCcgYW5kIGNvZGUgPj0gMjAwIGFuZCBjb2RlIG5vdCBpbiAoMjA0LCAzMDQpOgotICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShjb250ZW50LmVuY29kZSgnVVRGLTgnLCAncmVwbGFjZScpKQorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KQogCiAgICAgZGVmIHNlbmRfcmVzcG9uc2Uoc2VsZiwgY29kZSwgbWVzc2FnZT1Ob25lKToKICAgICAgICAgIiIiQWRkIHRoZSByZXNwb25zZSBoZWFkZXIgdG8gdGhlIGhlYWRlcnMgYnVmZmVyIGFuZCBsb2cgdGhlCkBAIC03MDksNyArNzE3LDcgQEAKICAgICAgICAgY3R5cGUgPSBzZWxmLmd1ZXNzX3R5cGUocGF0aCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIkZpbGUgbm90IGZvdW5kIikKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCkBAIC03MzAsNyArNzM4LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpc3QgPSBvcy5saXN0ZGlyKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAiTm8gcGVybWlzc2lvbiB0byBsaXN0IGRpcmVjdG9yeSIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBsaXN0LnNvcnQoa2V5PWxhbWJkYSBhOiBhLmxvd2VyKCkpCkBAIC0xMTI0LDcgKzExMzIsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Muc2V0dWlkKG5vYm9keSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBvcy5kdXAyKHNlbGYucmZpbGUuZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICAgb3MuZHVwMihzZWxmLndmaWxlLmZpbGVubygpLCAxKQpAQCAtMTE3NywxNSArMTE4NSwxNSBAQAogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNHSSBzY3JpcHQgZXhpdGVkIE9LIikKIAogCi1kZWYgdGVzdChIYW5kbGVyQ2xhc3MgPSBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLAotICAgICAgICAgU2VydmVyQ2xhc3MgPSBIVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDApOgorZGVmIHRlc3QoSGFuZGxlckNsYXNzPUJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICBTZXJ2ZXJDbGFzcz1IVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDAsIGJpbmQ9IiIpOgogICAgICIiIlRlc3QgdGhlIEhUVFAgcmVxdWVzdCBoYW5kbGVyIGNsYXNzLgogCiAgICAgVGhpcyBydW5zIGFuIEhUVFAgc2VydmVyIG9uIHBvcnQgODAwMCAob3IgdGhlIGZpcnN0IGNvbW1hbmQgbGluZQogICAgIGFyZ3VtZW50KS4KIAogICAgICIiIgotICAgIHNlcnZlcl9hZGRyZXNzID0gKCcnLCBwb3J0KQorICAgIHNlcnZlcl9hZGRyZXNzID0gKGJpbmQsIHBvcnQpCiAKICAgICBIYW5kbGVyQ2xhc3MucHJvdG9jb2xfdmVyc2lvbiA9IHByb3RvY29sCiAgICAgaHR0cGQgPSBTZXJ2ZXJDbGFzcyhzZXJ2ZXJfYWRkcmVzcywgSGFuZGxlckNsYXNzKQpAQCAtMTIwMywxMiArMTIxMSwxNiBAQAogICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNnaScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBhcyBDR0kgU2VydmVyJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJpbmQnLCAnLWInLCBkZWZhdWx0PScnLCBtZXRhdmFyPSdBRERSRVNTJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NwZWNpZnkgYWx0ZXJuYXRlIGJpbmQgYWRkcmVzcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbZGVmYXVsdDogYWxsIGludGVyZmFjZXNdJykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwb3J0JywgYWN0aW9uPSdzdG9yZScsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTgwMDAsIHR5cGU9aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9Jz8nLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmeSBhbHRlcm5hdGUgcG9ydCBbZGVmYXVsdDogODAwMF0nKQogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICAgaWYgYXJncy5jZ2k6Ci0gICAgICAgIHRlc3QoSGFuZGxlckNsYXNzPUNHSUhUVFBSZXF1ZXN0SGFuZGxlciwgcG9ydD1hcmdzLnBvcnQpCisgICAgICAgIGhhbmRsZXJfY2xhc3MgPSBDR0lIVFRQUmVxdWVzdEhhbmRsZXIKICAgICBlbHNlOgotICAgICAgICB0ZXN0KEhhbmRsZXJDbGFzcz1TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIsIHBvcnQ9YXJncy5wb3J0KQorICAgICAgICBoYW5kbGVyX2NsYXNzID0gU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCisgICAgdGVzdChIYW5kbGVyQ2xhc3M9aGFuZGxlcl9jbGFzcywgcG9ydD1hcmdzLnBvcnQsIGJpbmQ9YXJncy5iaW5kKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5IGIvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CmluZGV4IGM5YWQzNjQuLmVhZjY4Y2IgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKQEAgLTU0OCw3ICs1NDgsNyBAQAogICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShzZWxmLmhlbHBfdXJsKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZT0nRG9jdW1lbnQgU3RhcnQgRmFpbHVyZScsCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9c3RyKHdoeSksIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgIGVsc2U6CkBAIC04NzEsNyArODcxLDcgQEAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUoaGVscGZpbGUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdEb2N1bWVudCBTdGFydCBGYWlsdXJlJywKICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9c3RyKHdoeSksIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkgYi9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQppbmRleCAzN2EzMzdlLi5hOTk4OWE4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQorKysgYi9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZpbGVuYW1lKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwd2QsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weSBiL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkKaW5kZXggMmUwNzMxMi4uYzAwNzRlMiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5CkBAIC0xMjUsNCArMTI1LDMgQEAKICAgICAjIEhlbmNlIElkbGUgbXVzdCBiZSByZXN0YXJ0ZWQgYWZ0ZXIgZWRpdGluZyB0aGlzIGZpbGUgZm9yIGEgbGl2ZSB0ZXN0LgogICAgIGltcG9ydCB1bml0dGVzdAogICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfZ3JlcCcsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQotCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkgYi9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKaW5kZXggY2JhODA0OC4uNzU4OWFiOCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CisrKyBiL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQpAQCAtNTAzLDcgKzUwMyw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHB3ZCA9ICIiCiAgICAgICAgICAgICByZXR1cm4gcHdkLCAiIgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ORVdTLnR4dCBiL0xpYi9pZGxlbGliL05FV1MudHh0CmluZGV4IDU0NTA3MDEuLjQ3OGMxODMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL05FV1MudHh0CisrKyBiL0xpYi9pZGxlbGliL05FV1MudHh0CkBAIC0xLDEyICsxLDEwIEBACi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjI/CitXaGF0J3MgTmV3IGluIElETEUgMy40LjA/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC0gSXNzdWUgIzE3MzkwOiBEaXNwbGF5IFB5dGhvbiB2ZXJzaW9uIG9uIElkbGUgdGl0bGUgYmFyLgogICBJbml0aWFsIHBhdGNoIGJ5IEVkbW9uZCBCdXJuZXR0LgogCi0KLVdoYXQncyBOZXcgaW4gSURMRSAzLjMuMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gSXNzdWUgIzUwNjY6IFVwZGF0ZSBJRExFIGRvY3MuIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgogCiAtIElzc3VlICMxNzYyNTogQ2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKaW5kZXggYmE0MDcxOS4uNWU1YzZiZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKKysrIGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBkZWYgR2V0U3ViTGlzdChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNlbGYuZGlyIG9yIG9zLmN1cmRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICBwYWNrYWdlcyA9IFtdCiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUHlTaGVsbC5weSBiL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKaW5kZXggYjJhMWY1OC4uMzZhZmY5MiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUHlTaGVsbC5weQorKysgYi9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CkBAIC00MTksNyArNDE5LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnJwY2NsdCA9IE15UlBDQ2xpZW50KGFkZHIpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZGlzcGxheV9wb3J0X2JpbmRpbmdfZXJyb3IoKQpAQCAtMTAzNCw3ICsxMDM0LDEwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBub3N1YiA9ICI9PT09IE5vIFN1YnByb2Nlc3MgPT09PSIKKyAgICAgICAgICAgIG5vc3ViID0gKCI9PT09IE5vIFN1YnByb2Nlc3MgPT09PVxuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6IFJ1bm5pbmcgSURMRSB3aXRob3V0IGEgU3VicHJvY2VzcyBpcyBkZXByZWNhdGVkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBsYXRlciB2ZXJzaW9uLiBTZWUgSGVscC9JRExFIEhlbHBcbiIgKworICAgICAgICAgICAgICAgICAgICAiZm9yIGRldGFpbHMuXG5cbiIpCiAgICAgICAgICAgICBzeXMuZGlzcGxheWhvb2sgPSBycGMuZGlzcGxheWhvb2sKIAogICAgICAgICBzZWxmLndyaXRlKCJQeXRob24gJXMgb24gJXNcbiVzXG4lcyIgJQpAQCAtMTM5Miw3ICsxMzk1LDggQEAKICAgICAgICBpZGxlICBbLWRuc10gWy10IHRpdGxlXSAtIFthcmddKgogCiAgIC1oICAgICAgICAgcHJpbnQgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKLSAgLW4gICAgICAgICBydW4gSURMRSB3aXRob3V0IGEgc3VicHJvY2VzcyAoc2VlIEhlbHAvSURMRSBIZWxwIGZvciBkZXRhaWxzKQorICAtbiAgICAgICAgIHJ1biBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIChERVBSRUNBVEVELAorICAgICAgICAgICAgIHNlZSBIZWxwL0lETEUgSGVscCBmb3IgZGV0YWlscykKIAogVGhlIGZvbGxvd2luZyBvcHRpb25zIHdpbGwgb3ZlcnJpZGUgdGhlIElETEUgJ3NldHRpbmdzJyBjb25maWd1cmF0aW9uOgogCkBAIC0xNDcwLDYgKzE0NzQsOCBAQAogICAgICAgICBpZiBvID09ICctaSc6CiAgICAgICAgICAgICBlbmFibGVfc2hlbGwgPSBUcnVlCiAgICAgICAgIGlmIG8gPT0gJy1uJzoKKyAgICAgICAgICAgIHByaW50KCIgV2FybmluZzogcnVubmluZyBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHVzZV9zdWJwcm9jZXNzID0gRmFsc2UKICAgICAgICAgaWYgbyA9PSAnLXInOgogICAgICAgICAgICAgc2NyaXB0ID0gYQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weSBiL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKaW5kZXggMjViYWU0OC4uMWY0ODU0ZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQorKysgYi9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CkBAIC0zODEsNyArMzgxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKHNlbGYucGF0aCwgbmV3cGF0aCkKICAgICAgICAgICAgIHNlbGYucGF0aCA9IG5ld3BhdGgKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBHZXRJY29uTmFtZShzZWxmKToKQEAgLTM5NCw3ICszOTQsNyBAQAogICAgIGRlZiBHZXRTdWJMaXN0KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc2VsZi5wYXRoKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIG5hbWVzLnNvcnQoa2V5ID0gb3MucGF0aC5ub3JtY2FzZSkKICAgICAgICAgc3VibGlzdCA9IFtdCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5IGIvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQppbmRleCBhOTc0ZDU0Li5lYTIwMTBlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKQEAgLTI3MSw4ICsyNzEsMTAgQEAKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKwogICAgIGRlZiBTZXRPcHRpb24oc2VsZiwgY29uZmlnVHlwZSwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CiAgICAgICAgICIiIkluIHVzZXIncyBjb25maWcgZmlsZSwgc2V0IHNlY3Rpb24ncyBvcHRpb24gdG8gdmFsdWUuCisKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYudXNlckNmZ1tjb25maWdUeXBlXS5TZXRPcHRpb24oc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKIApAQCAtNjM4LDggKzY0MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIGtleUJpbmRpbmdzCisKICAgICBkZWYgR2V0RXh0cmFIZWxwU291cmNlTGlzdChzZWxmLGNvbmZpZ1NldCk6CiAgICAgICAgICIiIkZldGNoIGxpc3Qgb2YgZXh0cmEgaGVscCBzb3VyY2VzIGZyb20gYSBnaXZlbiBjb25maWdTZXQuCisKICAgICAgICAgVmFsaWQgY29uZmlnU2V0cyBhcmUgJ3VzZXInIG9yICdkZWZhdWx0Jy4gIFJldHVybiBhIGxpc3Qgb2YgdHVwbGVzIG9mCiAgICAgICAgIHRoZSBmb3JtIChtZW51X2l0ZW0gLCBwYXRoX3RvX2hlbHBfZmlsZSAsIG9wdGlvbiksIG9yIHJldHVybiB0aGUgZW1wdHkKICAgICAgICAgbGlzdC4gICdvcHRpb24nIGlzIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGhlbHAgcmVzb3VyY2UuICAnb3B0aW9uJwpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaGVscC50eHQgYi9MaWIvaWRsZWxpYi9oZWxwLnR4dAppbmRleCBmZjc4NmM1Li42Mzc4YTJlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9oZWxwLnR4dAorKysgYi9MaWIvaWRsZWxpYi9oZWxwLnR4dApAQCAtMSwxNDIgKzEsMTg1IEBACiBbU2VlIHRoZSBlbmQgb2YgdGhpcyBmaWxlIGZvciAqKiBUSVBTICoqIG9uIHVzaW5nIElETEUgISFdCiAKLUNsaWNrIG9uIHRoZSBkb3R0ZWQgbGluZSBhdCB0aGUgdG9wIG9mIGEgbWVudSB0byAidGVhciBpdCBvZmYiOiBhCi1zZXBhcmF0ZSB3aW5kb3cgY29udGFpbmluZyB0aGUgbWVudSBpcyBjcmVhdGVkLgorSURMRSBpcyB0aGUgUHl0aG9uIElERSBidWlsdCB3aXRoIHRoZSB0a2ludGVyIEdVSSB0b29sa2l0LgogCi1GaWxlIE1lbnU6CitJRExFIGhhcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgorLWNvZGVkIGluIDEwMCUgcHVyZSBQeXRob24sIHVzaW5nIHRoZSB0a2ludGVyIEdVSSB0b29sa2l0CistY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MsIFVuaXgsIGFuZCBPUyBYCistbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsIHNtYXJ0IGluZGVudCwKK2NhbGwgdGlwcywgYW5kIG1hbnkgb3RoZXIgZmVhdHVyZXMKKy1QeXRob24gc2hlbGwgd2luZG93IChhLmsuYSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikKKy1kZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgYW5kIHN0ZXApCiAKLQlOZXcgRmlsZSAgICAgICAgIC0tIENyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93Ci0JT3Blbi4uLiAgICAgICAgICAtLSBPcGVuIGFuIGV4aXN0aW5nIGZpbGUKLQlSZWNlbnQgRmlsZXMuLi4gIC0tIE9wZW4gYSBsaXN0IG9mIHJlY2VudCBmaWxlcwotCU9wZW4gTW9kdWxlLi4uICAgLS0gT3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQotCUNsYXNzIEJyb3dzZXIgICAgLS0gU2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQotCVBhdGggQnJvd3NlciAgICAgLS0gU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcworTWVudXM6CisKK0lETEUgaGFzIHR3byB3aW5kb3cgdHlwZXMgdGhlIFNoZWxsIHdpbmRvdyBhbmQgdGhlIEVkaXRvciB3aW5kb3cuIEl0IGlzCitwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGVkaXRvciB3aW5kb3dzIHNpbXVsdGFuZW91c2x5LiBJRExFJ3MKK21lbnVzIGR5bmFtaWNhbGx5IGNoYW5nZSBiYXNlZCBvbiB3aGljaCB3aW5kb3cgaXMgY3VycmVudGx5IHNlbGVjdGVkLiBFYWNoIG1lbnUKK2RvY3VtZW50ZWQgYmVsb3cgaW5kaWNhdGVzIHdoaWNoIHdpbmRvdyB0eXBlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gQ2xpY2sgb24KK3RoZSBkb3R0ZWQgbGluZSBhdCB0aGUgdG9wIG9mIGEgbWVudSB0byAidGVhciBpdCBvZmYiOiBhIHNlcGFyYXRlIHdpbmRvdworY29udGFpbmluZyB0aGUgbWVudSBpcyBjcmVhdGVkIChmb3IgVW5peCBhbmQgV2luZG93cyBvbmx5KS4KKworRmlsZSBNZW51IChTaGVsbCBhbmQgRWRpdG9yKToKKworICAgICAgICBOZXcgRmlsZSAgICAgICAgIC0tIENyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93CisgICAgICAgIE9wZW4uLi4gICAgICAgICAgLS0gT3BlbiBhbiBleGlzdGluZyBmaWxlCisgICAgICAgIE9wZW4gTW9kdWxlLi4uICAgLS0gT3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQorICAgICAgICBSZWNlbnQgRmlsZXMuLi4gIC0tIE9wZW4gYSBsaXN0IG9mIHJlY2VudCBmaWxlcworICAgICAgICBDbGFzcyBCcm93c2VyICAgIC0tIFNob3cgY2xhc3NlcyBhbmQgbWV0aG9kcyBpbiBjdXJyZW50IGZpbGUKKyAgICAgICAgUGF0aCBCcm93c2VyICAgICAtLSBTaG93IHN5cy5wYXRoIGRpcmVjdG9yaWVzLCBtb2R1bGVzLCBjbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtZXRob2RzCi0JLS0tCi0JU2F2ZSAgICAgICAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQKLQkJICAgICAgICAgICAgd2luZG93cyBoYXZlIGEgKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSB3aW5kb3cgdGl0bGUpCisgICAgICAgIC0tLQorICAgICAgICBTYXZlICAgICAgICAgICAgIC0tIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MgaGF2ZSBhICogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQogCi0JU2F2ZSBBcy4uLiAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIG5ldyBmaWxlLCB3aGljaCBiZWNvbWVzCi0JCSAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGZpbGUKLQlTYXZlIENvcHkgQXMuLi4gIC0tIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUKLQkJICAgICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCi0JLS0tCi0JUHJpbnQgV2luZG93ICAgICAtLSBQcmludCB0aGUgY3VycmVudCB3aW5kb3cKLQktLS0KLQlDbG9zZSAgICAgICAgICAgIC0tIENsb3NlIGN1cnJlbnQgd2luZG93IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKLQlFeGl0ICAgICAgICAgICAgIC0tIENsb3NlIGFsbCB3aW5kb3dzLCBxdWl0IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgICAgICAgU2F2ZSBBcy4uLiAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIG5ldyBmaWxlLCB3aGljaCBiZWNvbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZmlsZQorICAgICAgICBTYXZlIENvcHkgQXMuLi4gIC0tIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGNoYW5naW5nIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgICAgICAgLS0tCisgICAgICAgIFByaW50IFdpbmRvdyAgICAgLS0gUHJpbnQgdGhlIGN1cnJlbnQgd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBDbG9zZSAgICAgICAgICAgIC0tIENsb3NlIGN1cnJlbnQgd2luZG93IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgICAgICAgRXhpdCAgICAgICAgICAgICAtLSBDbG9zZSBhbGwgd2luZG93cywgcXVpdCAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCiAKLUVkaXQgTWVudToKK0VkaXQgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CiAKLQlVbmRvICAgICAgICAgICAgIC0tIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkgYmUgdW5kb25lKQotCVJlZG8gICAgICAgICAgICAgLS0gUmVkbyBsYXN0IHVuZG9uZSBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKLQktLS0KLQlDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCisgICAgICAgIFVuZG8gICAgICAgICAgICAgLS0gVW5kbyBsYXN0IGNoYW5nZSB0byBjdXJyZW50IHdpbmRvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhIG1heGltdW0gb2YgMTAwMCBjaGFuZ2VzIG1heSBiZSB1bmRvbmUpCisgICAgICAgIFJlZG8gICAgICAgICAgICAgLS0gUmVkbyBsYXN0IHVuZG9uZSBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKKyAgICAgICAgLS0tCisgICAgICAgIEN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIGRlbGV0ZSB0aGUgc2VsZWN0aW9uCi0JQ29weSAgICAgICAgICAgICAtLSBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAotCVBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdwotCVNlbGVjdCBBbGwgICAgICAgLS0gU2VsZWN0IHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGVkaXQgYnVmZmVyCi0JLS0tCi0JRmluZC4uLiAgICAgICAgICAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggd2l0aCBtYW55IG9wdGlvbnMKLQlGaW5kIEFnYWluICAgICAgIC0tIFJlcGVhdCBsYXN0IHNlYXJjaAotCUZpbmQgU2VsZWN0aW9uICAgLS0gU2VhcmNoIGZvciB0aGUgc3RyaW5nIGluIHRoZSBzZWxlY3Rpb24KLQlGaW5kIGluIEZpbGVzLi4uIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCBmb3Igc2VhcmNoaW5nIGZpbGVzCi0JUmVwbGFjZS4uLiAgICAgICAtLSBPcGVuIGEgc2VhcmNoLWFuZC1yZXBsYWNlIGRpYWxvZyBib3gKLQlHbyB0byBMaW5lICAgICAgIC0tIEFzayBmb3IgYSBsaW5lIG51bWJlciBhbmQgc2hvdyB0aGF0IGxpbmUKLQlTaG93IENhbGx0aXAgICAgIC0tIE9wZW4gYSBzbWFsbCB3aW5kb3cgd2l0aCBmdW5jdGlvbiBwYXJhbSBoaW50cwotCVNob3cgQ29tcGxldGlvbnMgLS0gT3BlbiBhIHNjcm9sbCB3aW5kb3cgYWxsb3dpbmcgc2VsZWN0aW9uIGtleXdvcmRzCi0JCQkgICAgYW5kIGF0dHJpYnV0ZXMuIChzZWUgJypUSVBTKicsIGJlbG93KQotCVNob3cgUGFyZW5zCSAtLSBIaWdobGlnaHQgdGhlIHN1cnJvdW5kaW5nIHBhcmVudGhlc2lzCi0JRXhwYW5kIFdvcmQgICAgICAtLSBFeHBhbmQgdGhlIHdvcmQgeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYW5vdGhlcgotCQkgICAgICAgICAgICB3b3JkIGluIHRoZSBzYW1lIGJ1ZmZlcjsgcmVwZWF0IHRvIGdldCBhCisgICAgICAgIENvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKKyAgICAgICAgUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93CisgICAgICAgIFNlbGVjdCBBbGwgICAgICAgLS0gU2VsZWN0IHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGVkaXQgYnVmZmVyCisgICAgICAgIC0tLQorICAgICAgICBGaW5kLi4uICAgICAgICAgIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCB3aXRoIG1hbnkgb3B0aW9ucworICAgICAgICBGaW5kIEFnYWluICAgICAgIC0tIFJlcGVhdCBsYXN0IHNlYXJjaAorICAgICAgICBGaW5kIFNlbGVjdGlvbiAgIC0tIFNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgc2VsZWN0aW9uCisgICAgICAgIEZpbmQgaW4gRmlsZXMuLi4gLS0gT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IGZvciBzZWFyY2hpbmcgZmlsZXMKKyAgICAgICAgUmVwbGFjZS4uLiAgICAgICAtLSBPcGVuIGEgc2VhcmNoLWFuZC1yZXBsYWNlIGRpYWxvZyBib3gKKyAgICAgICAgR28gdG8gTGluZSAgICAgICAtLSBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCisgICAgICAgIEV4cGFuZCBXb3JkICAgICAgLS0gRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkIGluIHRoZSBzYW1lIGJ1ZmZlcjsgcmVwZWF0IHRvIGdldCBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGV4cGFuc2lvbgorICAgICAgICBTaG93IENhbGx0aXAgICAgIC0tIEFmdGVyIGFuIHVuY2xvc2VkIHBhcmVudGhlc2lzIGZvciBhIGZ1bmN0aW9uLCBvcGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzbWFsbCB3aW5kb3cgd2l0aCBmdW5jdGlvbiBwYXJhbWV0ZXIgaGludHMKKyAgICAgICAgU2hvdyBQYXJlbnMgICAgICAtLSBIaWdobGlnaHQgdGhlIHN1cnJvdW5kaW5nIHBhcmVudGhlc2lzCisgICAgICAgIFNob3cgQ29tcGxldGlvbnMgLS0gT3BlbiBhIHNjcm9sbCB3aW5kb3cgYWxsb3dpbmcgc2VsZWN0aW9uIGtleXdvcmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGF0dHJpYnV0ZXMuIChzZWUgJypUSVBTKicsIGJlbG93KQogCi1Gb3JtYXQgTWVudSAob25seSBpbiBFZGl0IHdpbmRvdyk6CitGb3JtYXQgTWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KToKIAotCUluZGVudCBSZWdpb24gICAgICAgLS0gU2hpZnQgc2VsZWN0ZWQgbGluZXMgcmlnaHQgNCBzcGFjZXMKLQlEZWRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgNCBzcGFjZXMKLQlDb21tZW50IE91dCBSZWdpb24gIC0tIEluc2VydCAjIyBpbiBmcm9udCBvZiBzZWxlY3RlZCBsaW5lcwotCVVuY29tbWVudCBSZWdpb24gICAgLS0gUmVtb3ZlIGxlYWRpbmcgIyBvciAjIyBmcm9tIHNlbGVjdGVkIGxpbmVzCi0JVGFiaWZ5IFJlZ2lvbiAgICAgICAtLSBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMKLQkJKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZyA0IHNwYWNlIGJsb2NrcyB0byBpbmRlbnQgUHl0aG9uIGNvZGUuKQotCVVudGFiaWZ5IFJlZ2lvbiAgICAgLS0gVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIHJpZ2h0IG51bWJlciBvZiBzcGFjZXMKLQlOZXcgSW5kZW50IFdpZHRoLi4uIC0tIE9wZW4gZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGgKLQlGb3JtYXQgUGFyYWdyYXBoICAgIC0tIFJlZm9ybWF0IHRoZSBjdXJyZW50IGJsYW5rLWxpbmUtc2VwYXJhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoCisgICAgICAgIEluZGVudCBSZWdpb24gICAgICAgLS0gU2hpZnQgc2VsZWN0ZWQgbGluZXMgcmlnaHQgYnkgdGhlIGluZGVudCB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDQgc3BhY2VzKQorICAgICAgICBEZWRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgYnkgdGhlIGluZGVudCB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDQgc3BhY2VzKQorICAgICAgICBDb21tZW50IE91dCBSZWdpb24gIC0tIEluc2VydCAjIyBpbiBmcm9udCBvZiBzZWxlY3RlZCBsaW5lcworICAgICAgICBVbmNvbW1lbnQgUmVnaW9uICAgIC0tIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcworICAgICAgICBUYWJpZnkgUmVnaW9uICAgICAgIC0tIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicy4KKyAgICAgICAgICAgICAgICAoTm90ZTogV2UgcmVjb21tZW5kIHVzaW5nIDQgc3BhY2UgYmxvY2tzIHRvIGluZGVudCBQeXRob24gY29kZS4pCisgICAgICAgIFVudGFiaWZ5IFJlZ2lvbiAgICAgLS0gVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIGNvcnJlbnQgbnVtYmVyIG9mIHNwYWNlcworICAgICAgICBUb2dnbGUgdGFicyAgICAgICAgIC0tIE9wZW4gYSBkaWFsb2cgdG8gc3dpdGNoIGJldHdlZW4gaW5kZW50aW5nIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZXMgYW5kIHRhYnMuCisgICAgICAgIE5ldyBJbmRlbnQgV2lkdGguLi4gLS0gT3BlbiBhIGRpYWxvZyB0byBjaGFuZ2UgaW5kZW50IHdpZHRoLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgZGVmYXVsdCBieSB0aGUgUHl0aG9uIGNvbW11bml0eSBpcyA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzLgorICAgICAgICBGb3JtYXQgUGFyYWdyYXBoICAgIC0tIFJlZm9ybWF0IHRoZSBjdXJyZW50IGJsYW5rLWxpbmUtc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoLiBBbGwgbGluZXMgaW4gdGhlIHBhcmFncmFwaCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIHRvIGxlc3MgdGhhbiA4MCBjb2x1bW5zLgorICAgICAgICAtLS0KKyAgICAgICAgU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZSAtLSBSZW1vdmVkIGFueSBzcGFjZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbGFzdCBub24tc3BhY2UgY2hhcmFjdGVyCiAKLVJ1biBNZW51IChvbmx5IGluIEVkaXQgd2luZG93KToKK1J1biBNZW51IChFZGl0b3Igd2luZG93IG9ubHkpOgogCi0JUHl0aG9uIFNoZWxsIC0tIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIHNoZWxsIHdpbmRvdwotCS0tLQotCUNoZWNrIE1vZHVsZSAtLSBSdW4gYSBzeW50YXggY2hlY2sgb24gdGhlIG1vZHVsZQotCVJ1biBNb2R1bGUgICAtLSBFeGVjdXRlIHRoZSBjdXJyZW50IGZpbGUgaW4gdGhlIF9fbWFpbl9fIG5hbWVzcGFjZQorICAgICAgICBQeXRob24gU2hlbGwgLS0gT3BlbiBvciB3YWtlIHVwIHRoZSBQeXRob24gc2hlbGwgd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBDaGVjayBNb2R1bGUgLS0gQ2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgbW9kdWxlIGN1cnJlbnRseSBvcGVuIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yIHdpbmRvdy4gIElmIHRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIHNhdmVkIElETEUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgdGhlIGNvZGUuCisgICAgICAgIFJ1biBNb2R1bGUgICAtLSBSZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUgZW52aXJvbm1lbnQsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGUgdGhlIGN1cnJlbnRseSBvcGVuIG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBiZWVuIHNhdmVkIElETEUgd2lsbCBwcm9tcHQgdGhlIHVzZXIgdG8gc2F2ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuCiAKLVNoZWxsIE1lbnUgKG9ubHkgaW4gU2hlbGwgd2luZG93KToKK1NoZWxsIE1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KToKIAotCVZpZXcgTGFzdCBSZXN0YXJ0IC0tIFNjcm9sbCB0aGUgc2hlbGwgd2luZG93IHRvIHRoZSBsYXN0IHJlc3RhcnQKLQlSZXN0YXJ0IFNoZWxsICAgICAtLSBSZXN0YXJ0IHRoZSBpbnRlcnByZXRlciB3aXRoIGEgZnJlc2ggZW52aXJvbm1lbnQKKyAgICAgICAgVmlldyBMYXN0IFJlc3RhcnQgLS0gU2Nyb2xsIHRoZSBzaGVsbCB3aW5kb3cgdG8gdGhlIGxhc3QgU2hlbGwgcmVzdGFydAorICAgICAgICBSZXN0YXJ0IFNoZWxsICAgICAtLSBSZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUgZW52aXJvbm1lbnQKIAotRGVidWcgTWVudSAob25seSBpbiBTaGVsbCB3aW5kb3cpOgorRGVidWcgTWVudSAoU2hlbGwgd2luZG93IG9ubHkpOgogCi0JR28gdG8gRmlsZS9MaW5lICAgLS0gbG9vayBhcm91bmQgdGhlIGluc2VydCBwb2ludCBmb3IgYSBmaWxlbmFtZQotCQkgICAgICAgICAgICAgYW5kIGxpbmUgbnVtYmVyLCBvcGVuIHRoZSBmaWxlLCBhbmQgc2hvdyB0aGUgbGluZQotCURlYnVnZ2VyICh0b2dnbGUpIC0tIFJ1biBjb21tYW5kcyBpbiB0aGUgc2hlbGwgdW5kZXIgdGhlIGRlYnVnZ2VyCi0JU3RhY2sgVmlld2VyICAgICAgLS0gU2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbgotCUF1dG8tb3BlbiBTdGFjayBWaWV3ZXIgKHRvZ2dsZSkgLS0gT3BlbiBzdGFjayB2aWV3ZXIgb24gdHJhY2ViYWNrCisgICAgICAgIEdvIHRvIEZpbGUvTGluZSAgIC0tIExvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxpbmUgbnVtYmVyLCBvcGVuIHRoZSBmaWxlLCBhbmQgc2hvdyB0aGUgbGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIHRvIHZpZXcgdGhlIHNvdXJjZSBsaW5lcyByZWZlcmVuY2VkIGluIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiB0cmFjZWJhY2suICBBdmFpbGFibGUgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudSBvZiB0aGUgU2hlbGwgd2luZG93LgorICAgICAgICBEZWJ1Z2dlciAodG9nZ2xlKSAtLSBUaGlzIGZlYXR1cmUgaXMgbm90IGNvbXBsZXRlIGFuZCBjb25zaWRlcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhbC4gUnVuIGNvbW1hbmRzIGluIHRoZSBzaGVsbCB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnZXIuCisgICAgICAgIFN0YWNrIFZpZXdlciAgICAgIC0tIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24KKyAgICAgICAgQXV0by1vcGVuIFN0YWNrIFZpZXdlciAodG9nZ2xlKSAtLSBUb2dnbGUgYXV0b21hdGljYWxseSBvcGVuaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIHZpZXdlciBvbiB1bmhhbmRsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24KIAotT3B0aW9ucyBNZW51OgorT3B0aW9ucyBNZW51IChTaGVsbCBhbmQgRWRpdG9yKToKIAotCUNvbmZpZ3VyZSBJRExFIC0tIE9wZW4gYSBjb25maWd1cmF0aW9uIGRpYWxvZy4gIEZvbnRzLCBpbmRlbnRhdGlvbiwKKyAgICAgICAgQ29uZmlndXJlIElETEUgLS0gT3BlbiBhIGNvbmZpZ3VyYXRpb24gZGlhbG9nLiAgRm9udHMsIGluZGVudGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaW5kaW5ncywgYW5kIGNvbG9yIHRoZW1lcyBtYXkgYmUgYWx0ZXJlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnR1cCBQcmVmZXJlbmNlcyBtYXkgYmUgc2V0LCBhbmQgQWRkaXRpb25hbCBIZWxwCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZXMgY2FuIGJlIHNwZWNpZmllZC4KLQkJCSAgCi0JCQkgIE9uIE9TIFggdGhpcyBtZW51IGlzIG5vdCBwcmVzZW50LCB1c2UKLQkJCSAgbWVudSAnSURMRSAtPiBQcmVmZXJlbmNlcy4uLicgaW5zdGVhZC4KLQktLS0KLQlDb2RlIENvbnRleHQgLS0JICBPcGVuIGEgcGFuZSBhdCB0aGUgdG9wIG9mIHRoZSBlZGl0IHdpbmRvdyB3aGljaAotCQkJICBzaG93cyB0aGUgYmxvY2sgY29udGV4dCBvZiB0aGUgc2VjdGlvbiBvZiBjb2RlCi0JCQkgIHdoaWNoIGlzIHNjcm9sbGluZyBvZmYgdGhlIHRvcCBvciB0aGUgd2luZG93LgotCQkJICAoTm90IHByZXNlbnQgaW4gU2hlbGwgd2luZG93LikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnR1cCBQcmVmZXJlbmNlcyBtYXkgYmUgc2V0LCBhbmQgYWRkaXRpb25hbCBIZWxwCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMgY2FuIGJlIHNwZWNpZmllZC4KIAotV2luZG93cyBNZW51OgorICAgICAgICAtLS0KKyAgICAgICAgQ29kZSBDb250ZXh0ICh0b2dnbGUpIC0tIE9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBzaG93cyB0aGUgYmxvY2sgY29udGV4dCBvZiB0aGUgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgY29kZSB3aGljaCBpcyBzY3JvbGxpbmcgb2ZmIHRoZSB0b3Agb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuIFRoaXMgaXMgbm90IHByZXNlbnQgaW4gdGhlIFNoZWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cgb25seSB0aGUgRWRpdG9yIHdpbmRvdy4KIAotCVpvb20gSGVpZ2h0IC0tIHRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIGNvbmZpZ3VyZWQgc2l6ZQotCWFuZCBtYXhpbXVtIGhlaWdodC4KLQktLS0KLQlUaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7Ci0Jc2VsZWN0IG9uZSB0byBicmluZyBpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmCi0JbmVjZXNzYXJ5KS4KK1dpbmRvd3MgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CisKKyAgICAgICAgWm9vbSBIZWlnaHQgLS0gVG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDQweDgwIGluaXRpYWwKKyAgICAgICAgc2V0dGluZykgYW5kIG1heGltdW0gaGVpZ2h0LiAgVGhlIGluaXRpYWwgc2l6ZSBpcyBpbiB0aGUgQ29uZmlndXJlCisgICAgICAgIElETEUgZGlhbG9nIHVuZGVyIHRoZSBnZW5lcmFsIHRhYi4KKyAgICAgICAgLS0tCisgICAgICAgIFRoZSByZXN0IG9mIHRoaXMgbWVudSBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIG9wZW4gd2luZG93czsKKyAgICAgICAgc2VsZWN0IG9uZSB0byBicmluZyBpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmCisgICAgICAgIG5lY2Vzc2FyeSkuCiAKIEhlbHAgTWVudToKIAotCUFib3V0IElETEUgIC0tIFZlcnNpb24sIGNvcHlyaWdodCwgbGljZW5zZSwgY3JlZGl0cwotCUlETEUgUmVhZG1lIC0tIEJhY2tncm91bmQgZGlzY3Vzc2lvbiBhbmQgY2hhbmdlIGRldGFpbHMKLQktLS0KLQlJRExFIEhlbHAgICAtLSBEaXNwbGF5IHRoaXMgZmlsZQotCVB5dGhvbiBEb2NzIC0tIEFjY2VzcyBsb2NhbCBQeXRob24gZG9jdW1lbnRhdGlvbiwgaWYKLQkJICAgICAgIGluc3RhbGxlZC4gIE90aGVyd2lzZSwgYWNjZXNzIHd3dy5weXRob24ub3JnLgotCS0tLQotCShBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSkKKyAgICAgICAgQWJvdXQgSURMRSAgLS0gVmVyc2lvbiwgY29weXJpZ2h0LCBsaWNlbnNlLCBjcmVkaXRzCisgICAgICAgIC0tLQorICAgICAgICBJRExFIEhlbHAgICAtLSBEaXNwbGF5IHRoaXMgZmlsZSB3aGljaCBpcyBhIGhlbHAgZmlsZSBmb3IgSURMRQorICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxpbmcgdGhlIG1lbnUgb3B0aW9ucywgYmFzaWMgZWRpdGluZyBhbmQgbmF2aWdhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIHRpcHMuCisgICAgICAgIFB5dGhvbiBEb2NzIC0tIEFjY2VzcyBsb2NhbCBQeXRob24gZG9jdW1lbnRhdGlvbiwgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLiAgT3Igd2lsbCBzdGFydCBhIHdlYiBicm93c2VyIGFuZCBvcGVuCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3MucHl0aG9uLm9yZyBzaG93aW5nIHRoZSBsYXRlc3QgUHl0aG9uIGRvY3VtZW50YXRpb24uCisgICAgICAgIC0tLQorICAgICAgICBBZGRpdGlvbmFsIGhlbHAgc291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSB3aXRoIHRoZSBDb25maWd1cmUgSURMRQorICAgICAgICBkaWFsb2cgdW5kZXIgdGhlIEdlbmVyYWwgdGFiLgogCi1FZGl0IGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gRWRpdCB3aW5kb3cpOgorRWRpdG9yIGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gRWRpdCB3aW5kb3cpOgogCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQlTZXQgQnJlYWtwb2ludCAgIC0tIFNldHMgYSBicmVha3BvaW50ICh3aGVuIGRlYnVnZ2VyIG9wZW4pCi0JQ2xlYXIgQnJlYWtwb2ludCAtLSBDbGVhcnMgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lCisgICAgICAgIENvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKKyAgICAgICAgUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93CisgICAgICAgIFNldCBCcmVha3BvaW50ICAgLS0gU2V0cyBhIGJyZWFrcG9pbnQuIEJyZWFrcG9pbnRzIGFyZSBvbmx5IGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBvcGVuLgorICAgICAgICBDbGVhciBCcmVha3BvaW50IC0tIENsZWFycyB0aGUgYnJlYWtwb2ludCBvbiB0aGF0IGxpbmUKIAogU2hlbGwgY29udGV4dCBtZW51IChSaWdodC1jbGljayAvIENvbnRyb2wtY2xpY2sgb24gT1MgWCBpbiBTaGVsbCB3aW5kb3cpOgogCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQktLS0KLQlHbyB0byBmaWxlL2xpbmUgIC0tIFNhbWUgYXMgaW4gRGVidWcgbWVudQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgR28gdG8gZmlsZS9saW5lICAtLSBTYW1lIGFzIGluIERlYnVnIG1lbnUKIAogCiAqKiBUSVBTICoqCkBAIC0xNDQsMTU5ICsxODcsMTgyIEBACiAKIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzOgogCi0JV2luZG93cyB1c2VycyBjYW4gR29vZ2xlIG9uIHpvcGVzaGVsZi5jaG0gdG8gYWNjZXNzIFpvcGUgaGVscCBmaWxlcyBpbgotCXRoZSBXaW5kb3dzIGhlbHAgZm9ybWF0LiAgVGhlIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzIGZlYXR1cmUgb2YgdGhlCi0JY29uZmlndXJhdGlvbiBHVUkgc3VwcG9ydHMgLmNobSwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXR5cGVzCi0Jc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4gIFN1cHBseSBhIE1lbnUgSXRlbSB0aXRsZSwgYW5kIGVudGVyIHRoZQotCWxvY2F0aW9uIGluIHRoZSBIZWxwIEZpbGUgUGF0aCBzbG90IG9mIHRoZSBOZXcgSGVscCBTb3VyY2UgZGlhbG9nLiAgVXNlCi0JaHR0cDovLyBhbmQvb3Igd3d3LiB0byBpZGVudGlmeSBleHRlcm5hbCBVUkxzLCBvciBkb3dubG9hZCB0aGUgZmlsZSBhbmQKLQlicm93c2UgZm9yIGl0cyBwYXRoIG9uIHlvdXIgbWFjaGluZSB1c2luZyB0aGUgQnJvd3NlIGJ1dHRvbi4KKyAgICAgICAgV2luZG93cyB1c2VycyBjYW4gR29vZ2xlIG9uIHpvcGVzaGVsZi5jaG0gdG8gYWNjZXNzIFpvcGUgaGVscCBmaWxlcyBpbgorICAgICAgICB0aGUgV2luZG93cyBoZWxwIGZvcm1hdC4gIFRoZSBBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBmZWF0dXJlIG9mIHRoZQorICAgICAgICBjb25maWd1cmF0aW9uIEdVSSBzdXBwb3J0cyAuY2htLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxldHlwZXMKKyAgICAgICAgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4gIFN1cHBseSBhIE1lbnUgSXRlbSB0aXRsZSwgYW5kIGVudGVyIHRoZQorICAgICAgICBsb2NhdGlvbiBpbiB0aGUgSGVscCBGaWxlIFBhdGggc2xvdCBvZiB0aGUgTmV3IEhlbHAgU291cmNlIGRpYWxvZy4gIFVzZQorICAgICAgICBodHRwOi8vIGFuZC9vciB3d3cuIHRvIGlkZW50aWZ5IGV4dGVybmFsIFVSTHMsIG9yIGRvd25sb2FkIHRoZSBmaWxlIGFuZAorICAgICAgICBicm93c2UgZm9yIGl0cyBwYXRoIG9uIHlvdXIgbWFjaGluZSB1c2luZyB0aGUgQnJvd3NlIGJ1dHRvbi4KIAotCUFsbCB1c2VycyBjYW4gYWNjZXNzIHRoZSBleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcKLQl0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCB3d3cucHl0aG9uLm9yZy9kb2MuICBTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZAotCW9yIHJlbW92ZWQgZnJvbSB0aGUgSGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIENvbmZpZ3VyZSBJRExFLgorICAgICAgICBBbGwgdXNlcnMgY2FuIGFjY2VzcyB0aGUgZXh0ZW5zaXZlIHNvdXJjZXMgb2YgaGVscCwgaW5jbHVkaW5nCisgICAgICAgIHR1dG9yaWFscywgYXZhaWxhYmxlIGF0IGRvY3MucHl0aG9uLm9yZy4gIFNlbGVjdGVkIFVSTHMgY2FuIGJlIGFkZGVkCisgICAgICAgIG9yIHJlbW92ZWQgZnJvbSB0aGUgSGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIENvbmZpZ3VyZSBJRExFLgogCiBCYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uOgogCi0JQmFja3NwYWNlIGRlbGV0ZXMgY2hhciB0byB0aGUgbGVmdDsgREVMIGRlbGV0ZXMgY2hhciB0byB0aGUgcmlnaHQuCi0JQ29udHJvbC1iYWNrc3BhY2UgZGVsZXRlcyB3b3JkIGxlZnQsIENvbnRyb2wtREVMIGRlbGV0ZXMgd29yZCByaWdodC4KLQlBcnJvdyBrZXlzIGFuZCBQYWdlIFVwL0Rvd24gbW92ZSBhcm91bmQuCi0JQ29udHJvbC1sZWZ0L3JpZ2h0IEFycm93IG1vdmVzIGJ5IHdvcmRzIGluIGEgc3RyYW5nZSBidXQgdXNlZnVsIHdheS4KLQlIb21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZS4KLQlDb250cm9sLUhvbWUvRW5kIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlLgotCVNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6Ci0JCUNvbnRyb2wtYSAgICAgYmVnaW5uaW5nIG9mIGxpbmUKLQkJQ29udHJvbC1lICAgICBlbmQgb2YgbGluZQotCQlDb250cm9sLWsgICAgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKLQkJQ29udHJvbC1sICAgICBjZW50ZXIgd2luZG93IGFyb3VuZCB0aGUgaW5zZXJ0aW9uIHBvaW50Ci0JU3RhbmRhcmQgV2luZG93cyBiaW5kaW5ncyBtYXkgd29yayBvbiB0aGF0IHBsYXRmb3JtLgotCUtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgU2V0dGluZ3MgRGlhbG9nLCBsb29rIHRoZXJlLgorICAgICAgICBCYWNrc3BhY2UgZGVsZXRlcyBjaGFyIHRvIHRoZSBsZWZ0OyBERUwgZGVsZXRlcyBjaGFyIHRvIHRoZSByaWdodC4KKyAgICAgICAgQ29udHJvbC1iYWNrc3BhY2UgZGVsZXRlcyB3b3JkIGxlZnQsIENvbnRyb2wtREVMIGRlbGV0ZXMgd29yZCByaWdodC4KKyAgICAgICAgQXJyb3cga2V5cyBhbmQgUGFnZSBVcC9Eb3duIG1vdmUgYXJvdW5kLgorICAgICAgICBDb250cm9sLWxlZnQvcmlnaHQgQXJyb3cgbW92ZXMgYnkgd29yZHMgaW4gYSBzdHJhbmdlIGJ1dCB1c2VmdWwgd2F5LgorICAgICAgICBIb21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZS4KKyAgICAgICAgQ29udHJvbC1Ib21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgZmlsZS4KKyAgICAgICAgU29tZSB1c2VmdWwgRW1hY3MgYmluZGluZ3MgYXJlIGluaGVyaXRlZCBmcm9tIFRjbC9UazoKKyAgICAgICAgICAgICAgICBDb250cm9sLWEgICAgIGJlZ2lubmluZyBvZiBsaW5lCisgICAgICAgICAgICAgICAgQ29udHJvbC1lICAgICBlbmQgb2YgbGluZQorICAgICAgICAgICAgICAgIENvbnRyb2wtayAgICAga2lsbCBsaW5lIChidXQgZG9lc24ndCBwdXQgaXQgaW4gY2xpcGJvYXJkKQorICAgICAgICAgICAgICAgIENvbnRyb2wtbCAgICAgY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludAorICAgICAgICBTdGFuZGFyZCBrZXliaW5kaW5ncyAobGlrZSBDb250cm9sLWMgdG8gY29weSBhbmQgQ29udHJvbC12IHRvCisgICAgICAgIHBhc3RlKSBtYXkgd29yay4gIEtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nLgogCiBBdXRvbWF0aWMgaW5kZW50YXRpb246CiAKLQlBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzCi0JKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IGJ5IG9uZSB0YWIpLiAgQWZ0ZXIgY2VydGFpbiBrZXl3b3JkcwotCShicmVhaywgcmV0dXJuIGV0Yy4pIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nCi0JaW5kZW50YXRpb24sIEJhY2tzcGFjZSBkZWxldGVzIHVwIHRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiAgVGFiCi0JaW5zZXJ0cyBzcGFjZXMgKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IG9uZSB0YWIpLCBudW1iZXIgZGVwZW5kcyBvbgotCUluZGVudCBXaWR0aC4gIChOLkIuIEN1cnJlbnRseSB0YWJzIGFyZSByZXN0cmljdGVkIHRvIGZvdXIgc3BhY2VzIGR1ZQotCXRvIFRjbC9UayBpc3N1ZXMuKQorICAgICAgICBBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzCisgICAgICAgIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMKKyAgICAgICAgKGJyZWFrLCByZXR1cm4gZXRjLikgdGhlIG5leHQgbGluZSBpcyBkZWRlbnRlZC4gIEluIGxlYWRpbmcKKyAgICAgICAgaW5kZW50YXRpb24sIEJhY2tzcGFjZSBkZWxldGVzIHVwIHRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiAgVGFiCisgICAgICAgIGluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24KKyAgICAgICAgSW5kZW50IFdpZHRoLiBDdXJyZW50bHkgdGFicyBhcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUKKyAgICAgICAgdG8gVGNsL1RrIGxpbWl0YXRpb25zLgogCiAgICAgICAgIFNlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdCBtZW51LgogCiBDb21wbGV0aW9uczoKIAotCUNvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZgotCWNsYXNzZXMsIGJvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkCi0JZm9yIGZpbGVuYW1lcy4KKyAgICAgICAgQ29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mCisgICAgICAgIGNsYXNzZXMsIGJvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkCisgICAgICAgIGZvciBmaWxlbmFtZXMuCiAKLQlUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkKLQkoZGVmYXVsdCBpcyB0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMKLQl0eXBlZC4gIElmIGFmdGVyIG9uZSBvZiB0aG9zZSBjaGFyYWN0ZXJzIChwbHVzIHplcm8gb3IgbW9yZSBvdGhlcgotCWNoYXJhY3RlcnMpIHlvdSB0eXBlIGEgVGFiIHRoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUKLQljb250aW51YXRpb24gaXMgZm91bmQuCisgICAgICAgIFRoZSBBdXRvQ29tcGxldGVXaW5kb3cgKEFDVykgd2lsbCBvcGVuIGFmdGVyIGEgcHJlZGVmaW5lZCBkZWxheQorICAgICAgICAoZGVmYXVsdCBpcyB0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMKKyAgICAgICAgdHlwZWQuICBJZiBhZnRlciBvbmUgb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIKKyAgICAgICAgY2hhcmFjdGVycykgYSB0YWIgaXMgdHlwZWQgdGhlIEFDVyB3aWxsIG9wZW4gaW1tZWRpYXRlbHkgaWYgYSBwb3NzaWJsZQorICAgICAgICBjb250aW51YXRpb24gaXMgZm91bmQuCiAKLQlJZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCi0JVGFiIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KKyAgICAgICAgSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQorICAgICAgICB0YWIgd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLgogCi0JJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gIEluIGFuIGVtcHR5Ci0Jc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT24gYQotCWJsYW5rIGxpbmUsIGl0IHdpbGwgY29udGFpbiB0aGUgYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kCi0JY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gIElmIHNvbWUKLQljaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgorICAgICAgICAnU2hvdyBDb21wbGV0aW9ucycgd2lsbCBmb3JjZSBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LCBieSBkZWZhdWx0IHRoZQorICAgICAgICBDb250cm9sLXNwYWNlIGtleXMgd2lsbCBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LiAgSW4gYW4gZW1wdHkKKyAgICAgICAgc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT24gYQorICAgICAgICBibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAorICAgICAgICBjbGFzc2VzIGluIHRoZSBjdXJyZW50IG5hbWUgc3BhY2VzLCBwbHVzIGFueSBtb2R1bGVzIGltcG9ydGVkLiAgSWYgc29tZQorICAgICAgICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgogCi0JSWYgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKLQllbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gRW50ZXJpbmcgYSBUYWIgd2lsbCBjYXVzZQotCXRoZSBsb25nZXN0IG5vbi1hbWJpZ3VvdXMgbWF0Y2ggdG8gYmUgZW50ZXJlZCBpbiB0aGUgRWRpdCB3aW5kb3cgb3IKLQlTaGVsbC4gIFR3byBUYWJzIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCi0Jd2lsbCBSZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZQotCXNlbGVjdGlvbiwgYW5kIHRoZSBzY3JvbGx3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgorICAgICAgICBJZiBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQorICAgICAgICBlbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gRW50ZXJpbmcgYSB0YWIgd2lsbCBjYXVzZQorICAgICAgICB0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXQgd2luZG93IG9yCisgICAgICAgIFNoZWxsLiAgVHdvIHRhYnMgaW4gYSByb3cgd2lsbCBzdXBwbHkgdGhlIGN1cnJlbnQgQUNXIHNlbGVjdGlvbiwgYXMKKyAgICAgICAgd2lsbCByZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZQorICAgICAgICBzZWxlY3Rpb24sIGFuZCB0aGUgc2Nyb2xsIHdoZWVsIGFsbCBvcGVyYXRlIG9uIHRoZSBBQ1cuCiAKLQknSGlkZGVuJyBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KLQluYW1lIGFmdGVyIGEgJy4nLiAgZS5nLiAnXycuICBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gbW9kdWxlcyB3aXRoCi0JJ19fYWxsX18nIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgorICAgICAgICAiSGlkZGVuIiBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KKyAgICAgICAgbmFtZSBhZnRlciBhICcuJywgIGUuZy4gJ18nLiAgVGhpcyBhbGxvd3MgYWNjZXNzIHRvIG1vZHVsZXMgd2l0aAorICAgICAgICAnX19hbGxfXycgc2V0LCBvciB0byBjbGFzcy1wcml2YXRlIGF0dHJpYnV0ZXMuCiAKLQlDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQorICAgICAgICBDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQogCi0JQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiAgTmFtZXMgaW4KLQlhbiBFZGl0IHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBfX21haW5fXyBvciBzeXMubW9kdWxlcyB3aWxsIG5vdCBiZQotCWZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMKLQlzaXR1YXRpb24uICBOb3RlIHRoYXQgSURMRSBpdHNlbGYgcGxhY2VzIHF1aXRlIGEgZmV3IG1vZHVsZXMgaW4KLQlzeXMubW9kdWxlcywgc28gbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgorICAgICAgICBDb21wbGV0aW9ucyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gdGhvc2UgaW4gdGhlIG5hbWVzcGFjZXMuICBOYW1lcyBpbgorICAgICAgICBhbiBFZGl0b3Igd2luZG93IHdoaWNoIGFyZSBub3QgdmlhIF9fbWFpbl9fIG9yIHN5cy5tb2R1bGVzIHdpbGwgbm90IGJlCisgICAgICAgIGZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMKKyAgICAgICAgc2l0dWF0aW9uLiAgTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluCisgICAgICAgIHN5cy5tb2R1bGVzLCBzbyBtdWNoIGNhbiBiZSBmb3VuZCBieSBkZWZhdWx0LCBlLmcuIHRoZSByZSBtb2R1bGUuCiAKLQlJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQotCWxvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPVE9ILCB5b3UgY291bGQgbWFrZSB0aGUgZGVsYXkgemVyby4KLQotCVlvdSBjb3VsZCBhbHNvIHN3aXRjaCBvZmYgdGhlIENhbGxUaXBzIGV4dGVuc2lvbi4gIChXZSB3aWxsIGJlIGFkZGluZwotCWEgZGVsYXkgdG8gdGhlIGNhbGwgdGlwIHdpbmRvdy4pCisgICAgICAgIElmIHlvdSBkb24ndCBsaWtlIHRoZSBBQ1cgcG9wcGluZyB1cCB1bmJpZGRlbiwgc2ltcGx5IG1ha2UgdGhlIGRlbGF5CisgICAgICAgIGxvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPciBhbm90aGVyIG9wdGlvbiBpcyB0aGUgZGVsYXkgY291bGQKKyAgICAgICAgYmUgc2V0IHRvIHplcm8uIEFub3RoZXIgYWx0ZXJuYXRpdmUgdG8gcHJldmVudGluZyBBQ1cgcG9wdXBzIGlzIHRvCisgICAgICAgIGRpc2FibGUgdGhlIGNhbGwgdGlwcyBleHRlbnNpb24uCiAKIFB5dGhvbiBTaGVsbCB3aW5kb3c6CiAKLQlDb250cm9sLWMgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZC4KLQlDb250cm9sLWQgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgPj4+IHByb21wdC4KKyAgICAgICAgQ29udHJvbC1jIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQuCisgICAgICAgIENvbnRyb2wtZCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCA+Pj4gcHJvbXB0LgorICAgICAgICBBbHQtLyBleHBhbmQgd29yZCBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nLgogCiAgICAgQ29tbWFuZCBoaXN0b3J5OgogCi0JQWx0LXAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4KLQlBbHQtbiByZXRyaWV2ZXMgbmV4dC4KLQkgICAgICAoVGhlc2UgYXJlIENvbnRyb2wtcCwgQ29udHJvbC1uIG9uIE9TIFgpCi0JUmV0dXJuIHdoaWxlIGN1cnNvciBpcyBvbiBhIHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZC4KLQlFeHBhbmQgd29yZCBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nLgorICAgICAgICBBbHQtcCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkLiBPbiBPUyBYCisgICAgICAgIHVzZSBDb250cm9sLXAuCisgICAgICAgIEFsdC1uIHJldHJpZXZlcyBuZXh0LiBPbiBPUyBYIHVzZSBDb250cm9sLW4uCisgICAgICAgIFJldHVybiB3aGlsZSBjdXJzb3IgaXMgb24gYSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQuCiAKICAgICBTeW50YXggY29sb3JzOgogCi0JVGhlIGNvbG9yaW5nIGlzIGFwcGxpZWQgaW4gYSBiYWNrZ3JvdW5kICJ0aHJlYWQiLCBzbyB5b3UgbWF5Ci0Jb2NjYXNpb25hbGx5IHNlZSB1bmNvbG9yaXplZCB0ZXh0LiAgVG8gY2hhbmdlIHRoZSBjb2xvcgotCXNjaGVtZSwgdXNlIHRoZSBDb25maWd1cmUgSURMRSAvIEhpZ2hsaWdodGluZyBkaWFsb2cuCisgICAgICAgIFRoZSBjb2xvcmluZyBpcyBhcHBsaWVkIGluIGEgYmFja2dyb3VuZCAidGhyZWFkIiwgc28geW91IG1heQorICAgICAgICBvY2Nhc2lvbmFsbHkgc2VlIHVuY29sb3JpemVkIHRleHQuICBUbyBjaGFuZ2UgdGhlIGNvbG9yCisgICAgICAgIHNjaGVtZSwgdXNlIHRoZSBDb25maWd1cmUgSURMRSAvIEhpZ2hsaWdodGluZyBkaWFsb2cuCiAKICAgICBQeXRob24gZGVmYXVsdCBzeW50YXggY29sb3JzOgogCi0JS2V5d29yZHMJb3JhbmdlCi0JQnVpbHRpbnMJcm95YWwgcHVycGxlCi0JU3RyaW5ncwkJZ3JlZW4KLQlDb21tZW50cwlyZWQKLQlEZWZpbml0aW9ucwlibHVlCisgICAgICAgIEtleXdvcmRzICAgICAgICBvcmFuZ2UKKyAgICAgICAgQnVpbHRpbnMgICAgICAgIHJveWFsIHB1cnBsZQorICAgICAgICBTdHJpbmdzICAgICAgICAgZ3JlZW4KKyAgICAgICAgQ29tbWVudHMgICAgICAgIHJlZAorICAgICAgICBEZWZpbml0aW9ucyAgICAgYmx1ZQogCiAgICAgU2hlbGwgZGVmYXVsdCBjb2xvcnM6CiAKLQlDb25zb2xlIG91dHB1dAlicm93bgotCXN0ZG91dAkJYmx1ZQotCXN0ZGVycgkJcmVkCi0Jc3RkaW4JCWJsYWNrCisgICAgICAgIENvbnNvbGUgb3V0cHV0ICBicm93bgorICAgICAgICBzdGRvdXQgICAgICAgICAgYmx1ZQorICAgICAgICBzdGRlcnIgICAgICAgICAgcmVkCisgICAgICAgIHN0ZGluICAgICAgICAgICBibGFjawogCiBPdGhlciBwcmVmZXJlbmNlczoKIAotCVRoZSBmb250IHByZWZlcmVuY2VzLCBrZXliaW5kaW5nLCBhbmQgc3RhcnR1cCBwcmVmZXJlbmNlcyBjYW4KLQliZSBjaGFuZ2VkIHVzaW5nIHRoZSBTZXR0aW5ncyBkaWFsb2cuCisgICAgICAgIFRoZSBmb250IHByZWZlcmVuY2VzLCBoaWdobGlnaHRpbmcsIGtleXMsIGFuZCBnZW5lcmFsIHByZWZlcmVuY2VzIGNhbgorICAgICAgICBiZSBjaGFuZ2VkIHZpYSB0aGUgQ29uZmlndXJlIElETEUgbWVudSBvcHRpb24uICBCZSBzdXJlIHRvIG5vdGUgdGhhdAorICAgICAgICBrZXlzIGNhbiBiZSB1c2VyIGRlZmluZWQsIElETEUgc2hpcHMgd2l0aCBmb3VyIGJ1aWx0IGluIGtleSBzZXRzLiBJbgorICAgICAgICBhZGRpdGlvbiBhIHVzZXIgY2FuIGNyZWF0ZSBhIGN1c3RvbSBrZXkgc2V0IGluIHRoZSBDb25maWd1cmUgSURMRQorICAgICAgICBkaWFsb2cgdW5kZXIgdGhlIGtleXMgdGFiLgogCiBDb21tYW5kIGxpbmUgdXNhZ2U6CiAKLQlFbnRlciBpZGxlIC1oIGF0IHRoZSBjb21tYW5kIHByb21wdCB0byBnZXQgYSB1c2FnZSBtZXNzYWdlLgorICAgICAgICBFbnRlciBpZGxlIC1oIGF0IHRoZSBjb21tYW5kIHByb21wdCB0byBnZXQgYSB1c2FnZSBtZXNzYWdlLgogCi1SdW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzOgorICAgICAgICBpZGxlLnB5IFstYyBjb21tYW5kXSBbLWRdIFstZV0gWy1zXSBbLXQgdGl0bGVdIFthcmddIC4uLgogCi0JSWYgSURMRSBpcyBzdGFydGVkIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXQgd2lsbCBydW4gaW4gYQotCXNpbmdsZSBwcm9jZXNzIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlIHN1YnByb2Nlc3Mgd2hpY2ggcnVucyB0aGUgUlBDCi0JUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgUHl0aG9uIGNhbm5vdCBjcmVhdGUKLQl0aGUgc3VicHJvY2VzcyBvciB0aGUgUlBDIHNvY2tldCBpbnRlcmZhY2Ugb24geW91ciBwbGF0Zm9ybS4gIEhvd2V2ZXIsCi0JaW4gdGhpcyBtb2RlIHVzZXIgY29kZSBpcyBub3QgaXNvbGF0ZWQgZnJvbSBJRExFIGl0c2VsZi4gIEFsc28sIHRoZQotCWVudmlyb25tZW50IGlzIG5vdCByZXN0YXJ0ZWQgd2hlbiBSdW4vUnVuIE1vZHVsZSAoRjUpIGlzIHNlbGVjdGVkLiAgSWYKLQl5b3VyIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQsIHlvdSBtdXN0IHJlbG9hZCgpIHRoZSBhZmZlY3RlZCBtb2R1bGVzIGFuZAotCXJlLWltcG9ydCBhbnkgc3BlY2lmaWMgaXRlbXMgKGUuZy4gZnJvbSBmb28gaW1wb3J0IGJheikgaWYgdGhlIGNoYW5nZXMKLQlhcmUgdG8gdGFrZSBlZmZlY3QuICBGb3IgdGhlc2UgcmVhc29ucywgaXQgaXMgcHJlZmVyYWJsZSB0byBydW4gSURMRQotCXdpdGggdGhlIGRlZmF1bHQgc3VicHJvY2VzcyBpZiBhdCBhbGwgcG9zc2libGUuCisgICAgICAgIC1jIGNvbW1hbmQgIHJ1biB0aGlzIGNvbW1hbmQKKyAgICAgICAgLWQgICAgICAgICAgZW5hYmxlIGRlYnVnZ2VyCisgICAgICAgIC1lICAgICAgICAgIGVkaXQgbW9kZTsgYXJndW1lbnRzIGFyZSBmaWxlcyB0byBiZSBlZGl0ZWQKKyAgICAgICAgLXMgICAgICAgICAgcnVuICRJRExFU1RBUlRVUCBvciAkUFlUSE9OU1RBUlRVUCBmaXJzdAorICAgICAgICAtdCB0aXRsZSAgICBzZXQgdGl0bGUgb2Ygc2hlbGwgd2luZG93CisKKyAgICAgICAgSWYgdGhlcmUgYXJlIGFyZ3VtZW50czoKKyAgICAgICAgMS4gSWYgLWUgaXMgdXNlZCwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kIHN5cy5hcmd2CisgICAgICAgICAgIHJlZmxlY3RzIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIElETEUgaXRzZWxmLgorICAgICAgICAyLiBPdGhlcndpc2UsIGlmIC1jIGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgorICAgICAgICAgICBzeXMuYXJndlsxOi4uLl0sIHdpdGggc3lzLmFyZ3ZbMF0gc2V0IHRvIC1jLgorICAgICAgICAzLiBPdGhlcndpc2UsIGlmIG5laXRoZXIgLWUgbm9yIC1jIGlzIHVzZWQsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhCisgICAgICAgICAgIHNjcmlwdCB3aGljaCBpcyBleGVjdXRlZCB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIGluCisgICAgICAgICAgIHN5cy5hcmd2WzE6Li4uXSAgYW5kIHN5cy5hcmd2WzBdIHNldCB0byB0aGUgc2NyaXB0IG5hbWUuICBJZiB0aGUKKyAgICAgICAgICAgc2NyaXB0IG5hbWUgaXMgLSwgbm8gc2NyaXB0IGlzIGV4ZWN1dGVkIGJ1dCBhbiBpbnRlcmFjdGl2ZSBQeXRob24KKyAgICAgICAgICAgc2Vzc2lvbiBpcyBzdGFydGVkOyB0aGUgYXJndW1lbnRzIGFyZSBzdGlsbCBhdmFpbGFibGUgaW4gc3lzLmFyZ3YuCisKK1J1bm5pbmcgd2l0aG91dCBhIHN1YnByb2Nlc3M6IChERVBSRUNBVEVEIGluIFB5dGhvbiAzLjQgc2VlIElzc3VlIDE2MTIzKQorCisgICAgICAgIElmIElETEUgaXMgc3RhcnRlZCB3aXRoIHRoZSAtbiBjb21tYW5kIGxpbmUgc3dpdGNoIGl0IHdpbGwgcnVuIGluIGEKKyAgICAgICAgc2luZ2xlIHByb2Nlc3MgYW5kIHdpbGwgbm90IGNyZWF0ZSB0aGUgc3VicHJvY2VzcyB3aGljaCBydW5zIHRoZSBSUEMKKyAgICAgICAgUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgUHl0aG9uIGNhbm5vdCBjcmVhdGUKKyAgICAgICAgdGhlIHN1YnByb2Nlc3Mgb3IgdGhlIFJQQyBzb2NrZXQgaW50ZXJmYWNlIG9uIHlvdXIgcGxhdGZvcm0uICBIb3dldmVyLAorICAgICAgICBpbiB0aGlzIG1vZGUgdXNlciBjb2RlIGlzIG5vdCBpc29sYXRlZCBmcm9tIElETEUgaXRzZWxmLiAgQWxzbywgdGhlCisgICAgICAgIGVudmlyb25tZW50IGlzIG5vdCByZXN0YXJ0ZWQgd2hlbiBSdW4vUnVuIE1vZHVsZSAoRjUpIGlzIHNlbGVjdGVkLiAgSWYKKyAgICAgICAgeW91ciBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkLCB5b3UgbXVzdCByZWxvYWQoKSB0aGUgYWZmZWN0ZWQgbW9kdWxlcyBhbmQKKyAgICAgICAgcmUtaW1wb3J0IGFueSBzcGVjaWZpYyBpdGVtcyAoZS5nLiBmcm9tIGZvbyBpbXBvcnQgYmF6KSBpZiB0aGUgY2hhbmdlcworICAgICAgICBhcmUgdG8gdGFrZSBlZmZlY3QuICBGb3IgdGhlc2UgcmVhc29ucywgaXQgaXMgcHJlZmVyYWJsZSB0byBydW4gSURMRQorICAgICAgICB3aXRoIHRoZSBkZWZhdWx0IHN1YnByb2Nlc3MgaWYgYXQgYWxsIHBvc3NpYmxlLgogCiBFeHRlbnNpb25zOgogCi0JSURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBTZWUgdGhlIGJlZ2lubmluZyBvZgotCWNvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCi0JVGhlIGRlZmF1bHQgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5OgorICAgICAgICBJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFNlZSB0aGUgYmVnaW5uaW5nIG9mCisgICAgICAgIGNvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisgICAgICAgIFRoZSBkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKIAotCQlGb3JtYXRQYXJhZ3JhcGgKLQkJQXV0b0V4cGFuZAotCQlab29tSGVpZ2h0Ci0JCVNjcmlwdEJpbmRpbmcKLQkJQ2FsbFRpcHMKLQkJUGFyZW5NYXRjaAotCQlBdXRvQ29tcGxldGUKLQkJQ29kZUNvbnRleHQKKyAgICAgICAgICAgICAgICBGb3JtYXRQYXJhZ3JhcGgKKyAgICAgICAgICAgICAgICBBdXRvRXhwYW5kCisgICAgICAgICAgICAgICAgWm9vbUhlaWdodAorICAgICAgICAgICAgICAgIFNjcmlwdEJpbmRpbmcKKyAgICAgICAgICAgICAgICBDYWxsVGlwcworICAgICAgICAgICAgICAgIFBhcmVuTWF0Y2gKKyAgICAgICAgICAgICAgICBBdXRvQ29tcGxldGUKKyAgICAgICAgICAgICAgICBDb2RlQ29udGV4dApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZXZlci5weSBiL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKaW5kZXggNjQwZTAwOC4uZmVkOTc3OSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZXZlci5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CkBAIC0xICsxIEBACi1JRExFX1ZFUlNJT04gPSAiMy4zLjNyYzEiCitJRExFX1ZFUlNJT04gPSAiMy40LjBhNCIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3JwYy5weSBiL0xpYi9pZGxlbGliL3JwYy5weQppbmRleCBkZGNlNmU5Li45YzUxYjhmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ycGMucHkKKysrIGIvTGliL2lkbGVsaWIvcnBjLnB5CkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgIHJldHVybiAoIkNBTExFWEMiLCBleCkKQEAgLTM0MCw3ICszNDAsNyBAQAogICAgICAgICAgICAgICAgIG4gPSBzZWxmLnNvY2suc2VuZChzWzpCVUZTSVpFXSkKICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic29ja2V0IG5vIGxvbmdlciBleGlzdHMiKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHMgPSBzW246XQpAQCAtMzU3LDcgKzM1Nyw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzID0gc2VsZi5zb2NrLnJlY3YoQlVGU0laRSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgogICAgICAgICAgICAgaWYgbGVuKHMpID09IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKQEAgLTUzNyw3ICs1MzcsNyBAQAogICAgICAgICAgICAgU29ja2V0SU8uX19pbml0X18oc2VsZiwgd29ya2luZ19zb2NrKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcHJpbnQoIioqIEludmFsaWQgaG9zdDogIiwgYWRkcmVzcywgZmlsZT1zeXMuX19zdGRlcnJfXykKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogCiAgICAgZGVmIGdldF9yZW1vdGVfcHJveHkoc2VsZiwgb2lkKToKICAgICAgICAgcmV0dXJuIFJQQ1Byb3h5KHNlbGYsIG9pZCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3J1bi5weSBiL0xpYi9pZGxlbGliL3J1bi5weQppbmRleCBjMTg1OWI2Li4xM2NlYzYyIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ydW4ucHkKKysrIGIvTGliL2lkbGVsaWIvcnVuLnB5CkBAIC0xNTAsOCArMTUwLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VydmVyID0gTXlSUENTZXJ2ZXIoYWRkcmVzcywgTXlIYW5kbGVyKQogICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBwcmludCgiSURMRSBTdWJwcm9jZXNzOiBzb2NrZXQgZXJyb3I6ICIgKyBlcnIuYXJnc1sxXSArCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHByaW50KCJJRExFIFN1YnByb2Nlc3M6IE9TRXJyb3I6ICIgKyBlcnIuYXJnc1sxXSArCiAgICAgICAgICAgICAgICAgICAiLCByZXRyeWluZy4uLi4iLCBmaWxlPXN5cy5fX3N0ZGVycl9fKQogICAgICAgICAgICAgc29ja2V0X2Vycm9yID0gZXJyCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9pbWFwbGliLnB5IGIvTGliL2ltYXBsaWIucHkKaW5kZXggM2Y2NjU2YS4uMDk5NGYyYiAxMDA2NDQKLS0tIGEvTGliL2ltYXBsaWIucHkKKysrIGIvTGliL2ltYXBsaWIucHkKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTI4MSw3ICsyODEsNyBAQAogICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBUaGUgc2VydmVyIG1pZ2h0IGFscmVhZHkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46CiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTkxNSw3ICs5MTUsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc2VuZChkYXRhICsgQ1JMRikKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIE9TRXJyb3IpIGFzIHZhbDoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiAlcycgJSB2YWwpCiAKICAgICAgICAgaWYgbGl0ZXJhbCBpcyBOb25lOgpAQCAtOTQwLDcgKzk0MCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kKGxpdGVyYWwpCiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kKENSTEYpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgT1NFcnJvcikgYXMgdmFsOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgdmFsOgogICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogJXMnICUgdmFsKQogCiAgICAgICAgICAgICBpZiBub3QgbGl0ZXJhdG9yOgpAQCAtMTA4NSw3ICsxMDg1LDcgQEAKIAogICAgICAgICAjIFByb3RvY29sIG1hbmRhdGVzIGFsbCBsaW5lcyB0ZXJtaW5hdGVkIGJ5IENSTEYKICAgICAgICAgaWYgbm90IGxpbmUuZW5kc3dpdGgoYidcclxuJyk6Ci0gICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6IHVudGVybWluYXRlZCBsaW5lJykKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogdW50ZXJtaW5hdGVkIGxpbmU6ICVyJyAlIGxpbmUpCiAKICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQogICAgICAgICBpZiBfX2RlYnVnX186CmRpZmYgLS1naXQgYS9MaWIvaW1naGRyLnB5IGIvTGliL2ltZ2hkci5weQppbmRleCA2ZWU0NWRhLi4wY2JhMDYzIDEwMDY0NAotLS0gYS9MaWIvaW1naGRyLnB5CisrKyBiL0xpYi9pbWdoZHIucHkKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHJpbnQod2hhdChmaWxlbmFtZSkpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHByaW50KCcqKiogbm90IGZvdW5kICoqKicpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvaW1wLnB5IGIvTGliL2ltcC5weQppbmRleCA0MDg4MzgzLi5lZTZjZmUyIDEwMDY0NAotLS0gYS9MaWIvaW1wLnB5CisrKyBiL0xpYi9pbXAucHkKQEAgLTE2LDE4ICsxNiwyMCBAQAogICAgICMgUGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IGR5bmFtaWMgbG9hZGluZy4KICAgICBsb2FkX2R5bmFtaWMgPSBOb25lCiAKLSMgRGlyZWN0bHkgZXhwb3NlZCBieSB0aGlzIG1vZHVsZQotZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBpbXBvcnQgbmV3X21vZHVsZQotZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBpbXBvcnQgY2FjaGVfZnJvbV9zb3VyY2UsIHNvdXJjZV9mcm9tX2NhY2hlCitmcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBTb3VyY2VsZXNzRmlsZUxvYWRlciwgX0VSUl9NU0cKIAotCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKK2ltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHRva2VuaXplCitpbXBvcnQgdHlwZXMKIGltcG9ydCB3YXJuaW5ncwogCit3YXJuaW5ncy53YXJuKCJ0aGUgaW1wIG1vZHVsZSBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBpbXBvcnRsaWI7ICIKKyAgICAgICAgICAgICAgInNlZSB0aGUgbW9kdWxlJ3MgZG9jdW1lbnRhdGlvbiBmb3IgYWx0ZXJuYXRpdmUgdXNlcyIsCisgICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKICMgREVQUkVDQVRFRAogU0VBUkNIX0VSUk9SID0gMApAQCAtNDIsOSArNDQsMjMgQEAKIElNUF9IT09LID0gOQogCiAKK2RlZiBuZXdfbW9kdWxlKG5hbWUpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBDcmVhdGUgYSBuZXcgbW9kdWxlLgorCisgICAgVGhlIG1vZHVsZSBpcyBub3QgZW50ZXJlZCBpbnRvIHN5cy5tb2R1bGVzLgorCisgICAgIiIiCisgICAgcmV0dXJuIHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKworCiBkZWYgZ2V0X21hZ2ljKCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBtYWdpYyBudW1iZXIgZm9yIC5weWMgb3IgLnB5byBmaWxlcy4iIiIKLSAgICByZXR1cm4gX2Jvb3RzdHJhcC5fTUFHSUNfQllURVMKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgUmV0dXJuIHRoZSBtYWdpYyBudW1iZXIgZm9yIC5weWMgb3IgLnB5byBmaWxlcy4KKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5NQUdJQ19OVU1CRVIKIAogCiBkZWYgZ2V0X3RhZygpOgpAQCAtNTIsMTAgKzY4LDQwIEBACiAgICAgcmV0dXJuIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKIAogCitkZWYgY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGU9Tm9uZSk6CisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5Yy8ucHlvIGZpbGUuCisKKyAgICBUaGUgLnB5IGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdDsgdGhpcyBzaW1wbHkgcmV0dXJucyB0aGUgcGF0aCB0byB0aGUKKyAgICAucHljLy5weW8gZmlsZSBjYWxjdWxhdGVkIGFzIGlmIHRoZSAucHkgZmlsZSB3ZXJlIGltcG9ydGVkLiAgVGhlIGV4dGVuc2lvbgorICAgIHdpbGwgYmUgLnB5YyB1bmxlc3Mgc3lzLmZsYWdzLm9wdGltaXplIGlzIG5vbi16ZXJvLCB0aGVuIGl0IHdpbGwgYmUgLnB5by4KKworICAgIElmIGRlYnVnX292ZXJyaWRlIGlzIG5vdCBOb25lLCB0aGVuIGl0IG11c3QgYmUgYSBib29sZWFuIGFuZCBpcyB1c2VkIGluCisgICAgcGxhY2Ugb2Ygc3lzLmZsYWdzLm9wdGltaXplLgorCisgICAgSWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lIHRoZW4gTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCisKKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZSkKKworCitkZWYgc291cmNlX2Zyb21fY2FjaGUocGF0aCk6CisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5Yy4vLnB5byBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weSBmaWxlLgorCisgICAgVGhlIC5weWMvLnB5byBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8KKyAgICB0aGUgLnB5IGZpbGUgY2FsY3VsYXRlZCB0byBjb3JyZXNwb25kIHRvIHRoZSAucHljLy5weW8gZmlsZS4gIElmIHBhdGggZG9lcworICAgIG5vdCBjb25mb3JtIHRvIFBFUCAzMTQ3IGZvcm1hdCwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4gSWYKKyAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUgdGhlbiBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZC4KKworICAgICIiIgorICAgIHJldHVybiB1dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKwogZGVmIGdldF9zdWZmaXhlcygpOgotICAgIHdhcm5pbmdzLndhcm4oJ2ltcC5nZXRfc3VmZml4ZXMoKSBpcyBkZXByZWNhdGVkOyB1c2UgdGhlIGNvbnN0YW50cyAnCi0gICAgICAgICAgICAgICAgICAnZGVmaW5lZCBvbiBpbXBvcnRsaWIubWFjaGluZXJ5IGluc3RlYWQnLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCiAgICAgZXh0ZW5zaW9ucyA9IFsocywgJ3JiJywgQ19FWFRFTlNJT04pIGZvciBzIGluIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVNdCiAgICAgc291cmNlID0gWyhzLCAnVScsIFBZX1NPVVJDRSkgZm9yIHMgaW4gbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU10KICAgICBieXRlY29kZSA9IFsocywgJ3JiJywgUFlfQ09NUElMRUQpIGZvciBzIGluIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU10KQEAgLTY1LDcgKzExMSwxMSBAQAogCiBjbGFzcyBOdWxsSW1wb3J0ZXI6CiAKLSAgICAiIiJOdWxsIGltcG9ydCBvYmplY3QuIiIiCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIE51bGwgaW1wb3J0IG9iamVjdC4KKworICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgogICAgICAgICBpZiBwYXRoID09ICcnOgpAQCAtMTA2LDQ4ICsxNTYsMzcgQEAKICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCiAKIAotY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIpOgorY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcik6CiAKICAgICAiIiJDb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBsb2FkX3NvdXJjZSgpLiIiIgogCiAKIGRlZiBsb2FkX3NvdXJjZShuYW1lLCBwYXRobmFtZSwgZmlsZT1Ob25lKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3NvdXJjZSgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnCi0gICAgICAgICAgICdpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpLmxvYWRfbW9kdWxlKCknCi0gICAgICAgICAgICcgaW5zdGVhZCcpCi0gICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KICAgICAjIFRvIGFsbG93IHJlbG9hZGluZyB0byBwb3RlbnRpYWxseSB3b3JrLCB1c2UgYSBub24taGFja2VkIGxvYWRlciB3aGljaAogICAgICMgd29uJ3QgcmVseSBvbiBhIG5vdy1jbG9zZWQgZmlsZSBvYmplY3QuCi0gICAgbW9kdWxlLl9fbG9hZGVyX18gPSBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKICAgICByZXR1cm4gbW9kdWxlCiAKIAotY2xhc3MgX0xvYWRDb21waWxlZENvbXBhdGliaWxpdHkoX0hhY2tlZEdldERhdGEsCi0gICAgICAgIF9ib290c3RyYXAuU291cmNlbGVzc0ZpbGVMb2FkZXIpOgorY2xhc3MgX0xvYWRDb21waWxlZENvbXBhdGliaWxpdHkoX0hhY2tlZEdldERhdGEsIFNvdXJjZWxlc3NGaWxlTG9hZGVyKToKIAogICAgICIiIkNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgaW1wbGVtZW50aW5nIGxvYWRfY29tcGlsZWQoKS4iIiIKIAogCiBkZWYgbG9hZF9jb21waWxlZChuYW1lLCBwYXRobmFtZSwgZmlsZT1Ob25lKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX2NvbXBpbGVkKCkgaXMgZGVwcmVjYXRlZDsgdXNlICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpLicKLSAgICAgICAgICAgJ2xvYWRfbW9kdWxlKCkgaW5zdGVhZCAnKQotICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgIiIiKipERVBSRUNBVEVEKioiIiIKICAgICBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkubG9hZF9tb2R1bGUobmFtZSkKICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KLSAgICBtb2R1bGUuX19sb2FkZXJfXyA9IF9ib290c3RyYXAuU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBTb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKICAgICByZXR1cm4gbW9kdWxlCiAKIAogZGVmIGxvYWRfcGFja2FnZShuYW1lLCBwYXRoKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3BhY2thZ2UoKSBpcyBkZXByZWNhdGVkOyB1c2UgZWl0aGVyICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcigpIG9yICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIoKSBpbnN0ZWFkJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCiAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgZXh0ZW5zaW9ucyA9IChtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTWzpdICsKICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVNbOl0pCkBAIC0xNTcsNyArMTk2LDcgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneyFyfSBpcyBub3QgYSBwYWNrYWdlJy5mb3JtYXQocGF0aCkpCi0gICAgcmV0dXJuIF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKS5sb2FkX21vZHVsZShuYW1lKQorICAgIHJldHVybiBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKS5sb2FkX21vZHVsZShuYW1lKQogCiAKIGRlZiBsb2FkX21vZHVsZShuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZGV0YWlscyk6CkBAIC0xNjksMzIgKzIwOCwzMCBAQAogCiAgICAgIiIiCiAgICAgc3VmZml4LCBtb2RlLCB0eXBlXyA9IGRldGFpbHMKLSAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJykKLSAgICAgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBmaWxlIG9wZW4gbW9kZSB7IXJ9Jy5mb3JtYXQobW9kZSkpCi0gICAgICAgIGVsaWYgZmlsZSBpcyBOb25lIGFuZCB0eXBlXyBpbiB7UFlfU09VUkNFLCBQWV9DT01QSUxFRH06Ci0gICAgICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfU09VUkNFOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQotICAgICAgICBlbGlmIHR5cGVfID09IFBZX0NPTVBJTEVEOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfY29tcGlsZWQobmFtZSwgZmlsZW5hbWUsIGZpbGUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIG9wZW5lZF9maWxlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRfZHluYW1pYyhuYW1lLCBmaWxlbmFtZSwgZmlsZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfcGFja2FnZShuYW1lLCBmaWxlbmFtZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBDX0JVSUxUSU46Ci0gICAgICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfRlJPWkVOOgotICAgICAgICAgICAgcmV0dXJuIGluaXRfZnJvemVuKG5hbWUpCisgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgb3BlbiBtb2RlIHshcn0nLmZvcm1hdChtb2RlKSkKKyAgICBlbGlmIGZpbGUgaXMgTm9uZSBhbmQgdHlwZV8gaW4ge1BZX1NPVVJDRSwgUFlfQ09NUElMRUR9OgorICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICBlbGlmIHR5cGVfID09IFBZX1NPVVJDRToKKyAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gUFlfQ09NUElMRUQ6CisgICAgICAgIHJldHVybiBsb2FkX2NvbXBpbGVkKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBvcGVuZWRfZmlsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgorICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlKG5hbWUsIGZpbGVuYW1lKQorICAgIGVsaWYgdHlwZV8gPT0gQ19CVUlMVElOOgorICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCisgICAgZWxpZiB0eXBlXyA9PSBQWV9GUk9aRU46CisgICAgICAgIHJldHVybiBpbml0X2Zyb3plbihuYW1lKQorICAgIGVsc2U6CisgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQogCiAKIGRlZiBmaW5kX21vZHVsZShuYW1lLCBwYXRoPU5vbmUpOgpAQCAtMjMwLDE4ICsyNjcsMTYgQEAKICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihwYWNrYWdlX2RpcmVjdG9yeSwgcGFja2FnZV9maWxlX25hbWUpCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBwYWNrYWdlX2RpcmVjdG9yeSwgKCcnLCAnJywgUEtHX0RJUkVDVE9SWSkKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQotICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbW9kZSwgdHlwZV8gaW4gZ2V0X3N1ZmZpeGVzKCk6Ci0gICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gbmFtZSArIHN1ZmZpeAotICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBicmVhayAgIyBCcmVhayBvdXQgb2Ygb3V0ZXIgbG9vcCB3aGVuIGJyZWFraW5nIG91dCBvZiBpbm5lciBsb29wLgorICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCB0eXBlXyBpbiBnZXRfc3VmZml4ZXMoKToKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IG5hbWUgKyBzdWZmaXgKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYnJlYWsgICMgQnJlYWsgb3V0IG9mIG91dGVyIGxvb3Agd2hlbiBicmVha2luZyBvdXQgb2YgaW5uZXIgbG9vcC4KICAgICBlbHNlOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfYm9vdHN0cmFwLl9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfRVJSX01TRy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKIAogICAgIGVuY29kaW5nID0gTm9uZQogICAgIGlmIG1vZGUgPT0gJ1UnOgpAQCAtMjUxLDMzICsyODYsMTIgQEAKICAgICByZXR1cm4gZmlsZSwgZmlsZV9wYXRoLCAoc3VmZml4LCBtb2RlLCB0eXBlXykKIAogCi1fUkVMT0FESU5HID0ge30KLQogZGVmIHJlbG9hZChtb2R1bGUpOgotICAgICIiIlJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIFJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCiAKICAgICBUaGUgbW9kdWxlIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuCiAKICAgICAiIiIKLSAgICBpZiBub3QgbW9kdWxlIG9yIHR5cGUobW9kdWxlKSAhPSB0eXBlKHN5cyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsb2FkKCkgYXJndW1lbnQgbXVzdCBiZSBtb2R1bGUiKQotICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KLSAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgbXNnID0gIm1vZHVsZSB7fSBub3QgaW4gc3lzLm1vZHVsZXMiCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKLSAgICBpZiBuYW1lIGluIF9SRUxPQURJTkc6Ci0gICAgICAgIHJldHVybiBfUkVMT0FESU5HW25hbWVdCi0gICAgX1JFTE9BRElOR1tuYW1lXSA9IG1vZHVsZQotICAgIHRyeToKLSAgICAgICAgcGFyZW50X25hbWUgPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBpZiBwYXJlbnRfbmFtZSBhbmQgcGFyZW50X25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQocGFyZW50X25hbWUpLCBuYW1lPXBhcmVudF9uYW1lKQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXy5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAjIFRoZSBtb2R1bGUgbWF5IGhhdmUgcmVwbGFjZWQgaXRzZWxmIGluIHN5cy5tb2R1bGVzIQotICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBfUkVMT0FESU5HW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gaW1wb3J0bGliLnJlbG9hZChtb2R1bGUpCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5IGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQppbmRleCAyMmM5MGYyLi5lNTZlOWMzIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKQEAgLTEsNSArMSw1IEBACiAiIiJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGltcG9ydC4iIiIKLV9fYWxsX18gPSBbJ19faW1wb3J0X18nLCAnaW1wb3J0X21vZHVsZScsICdpbnZhbGlkYXRlX2NhY2hlcyddCitfX2FsbF9fID0gWydfX2ltcG9ydF9fJywgJ2ltcG9ydF9tb2R1bGUnLCAnaW52YWxpZGF0ZV9jYWNoZXMnLCAncmVsb2FkJ10KIAogIyBCb290c3RyYXAgaGVscCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0xMSw2ICsxMSw3IEBACiAjIGluaXRpYWxpc2VkIGJlbG93IGlmIHRoZSBmcm96ZW4gb25lIGlzIG5vdCBhdmFpbGFibGUpLgogaW1wb3J0IF9pbXAgICMgSnVzdCB0aGUgYnVpbHRpbiBjb21wb25lbnQsIE5PVCB0aGUgZnVsbCBQeXRob24gbW9kdWxlCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIAogdHJ5OgogICAgIGltcG9ydCBfZnJvemVuX2ltcG9ydGxpYiBhcyBfYm9vdHN0cmFwCkBAIC02OCw2ICs2OSw4IEBACiAgICAgICAgICAgICByZXR1cm4gbG9hZGVyCiAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICBwYXNzCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX2xvYWRlcl9fIGlzIG5vdCBzZXQnLmZvcm1hdChuYW1lKSkKICAgICByZXR1cm4gX2Jvb3RzdHJhcC5fZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKIAogCkBAIC04Miw5ICs4NSw0OCBAQAogICAgIGxldmVsID0gMAogICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnLicpOgogICAgICAgICBpZiBub3QgcGFja2FnZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsYXRpdmUgaW1wb3J0cyByZXF1aXJlIHRoZSAncGFja2FnZScgYXJndW1lbnQiKQorICAgICAgICAgICAgbXNnID0gKCJ0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHRvIHBlcmZvcm0gYSByZWxhdGl2ZSAiCisgICAgICAgICAgICAgICAgICAgImltcG9ydCBmb3IgeyFyfSIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnLmZvcm1hdChuYW1lKSkKICAgICAgICAgZm9yIGNoYXJhY3RlciBpbiBuYW1lOgogICAgICAgICAgICAgaWYgY2hhcmFjdGVyICE9ICcuJzoKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgbGV2ZWwgKz0gMQogICAgIHJldHVybiBfYm9vdHN0cmFwLl9nY2RfaW1wb3J0KG5hbWVbbGV2ZWw6XSwgcGFja2FnZSwgbGV2ZWwpCisKKworX1JFTE9BRElORyA9IHt9CisKKworZGVmIHJlbG9hZChtb2R1bGUpOgorICAgICIiIlJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCisKKyAgICBUaGUgbW9kdWxlIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuCisKKyAgICAiIiIKKyAgICBpZiBub3QgbW9kdWxlIG9yIG5vdCBpc2luc3RhbmNlKG1vZHVsZSwgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsb2FkKCkgYXJndW1lbnQgbXVzdCBiZSBtb2R1bGUiKQorICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KKyAgICBpZiBzeXMubW9kdWxlcy5nZXQobmFtZSkgaXMgbm90IG1vZHVsZToKKyAgICAgICAgbXNnID0gIm1vZHVsZSB7fSBub3QgaW4gc3lzLm1vZHVsZXMiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKKyAgICBpZiBuYW1lIGluIF9SRUxPQURJTkc6CisgICAgICAgIHJldHVybiBfUkVMT0FESU5HW25hbWVdCisgICAgX1JFTE9BRElOR1tuYW1lXSA9IG1vZHVsZQorICAgIHRyeToKKyAgICAgICAgcGFyZW50X25hbWUgPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICBpZiBwYXJlbnRfbmFtZSBhbmQgcGFyZW50X25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQocGFyZW50X25hbWUpLCBuYW1lPXBhcmVudF9uYW1lKQorICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9maW5kX21vZHVsZShuYW1lLCBOb25lKQorICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9ib290c3RyYXAuX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgICAgICAjIFRoZSBtb2R1bGUgbWF5IGhhdmUgcmVwbGFjZWQgaXRzZWxmIGluIHN5cy5tb2R1bGVzIQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXQorICAgIGZpbmFsbHk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBfUkVMT0FESU5HW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weSBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQppbmRleCBlNDBlYzkyLi43N2ZhZTBhIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKKysrIGIvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CkBAIC05LDcgKzksNyBAQAogIwogIyBJTVBPUlRBTlQ6IFdoZW5ldmVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoaXMgbW9kdWxlLCBiZSBzdXJlIHRvIHJ1bgogIyBhIHRvcC1sZXZlbCBtYWtlIGluIG9yZGVyIHRvIGdldCB0aGUgZnJvemVuIHZlcnNpb24gb2YgdGhlIG1vZHVsZQotIyB1cGRhdGUuIE5vdCBkb2luZyBzbywgd2lsbCByZXN1bHQgaW4gdGhlIE1ha2VmaWxlIHRvIGZhaWwgZm9yCisjIHVwZGF0ZS4gTm90IGRvaW5nIHNvIHdpbGwgcmVzdWx0IGluIHRoZSBNYWtlZmlsZSB0byBmYWlsIGZvcgogIyBhbGwgb3RoZXJzIHdobyBkb24ndCBoYXZlIGEgLi9weXRob24gYXJvdW5kIHRvIGZyZWV6ZSB0aGUgbW9kdWxlCiAjIGluIHRoZSBlYXJseSBzdGFnZXMgb2YgY29tcGlsYXRpb24uCiAjCkBAIC0yMCwxMCArMjAsNiBAQAogIyByZWZlcmVuY2UgYW55IGluamVjdGVkIG9iamVjdHMhIFRoaXMgaW5jbHVkZXMgbm90IG9ubHkgZ2xvYmFsIGNvZGUgYnV0IGFsc28KICMgYW55dGhpbmcgc3BlY2lmaWVkIGF0IHRoZSBjbGFzcyBsZXZlbC4KIAotIyBYWFggTWFrZSBzdXJlIGFsbCBwdWJsaWMgbmFtZXMgaGF2ZSBubyBzaW5nbGUgbGVhZGluZyB1bmRlcnNjb3JlIGFuZCBhbGwKLSMgICAgIG90aGVycyBkby4KLQotCiAjIEJvb3RzdHJhcC1yZWxhdGVkIGNvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIF9DQVNFX0lOU0VOU0lUSVZFX1BMQVRGT1JNUyA9ICd3aW4nLCAnY3lnd2luJywgJ2RhcndpbicKQEAgLTQxLDY0ICszNyw0OCBAQAogICAgIHJldHVybiBfcmVsYXhfY2FzZQogCiAKLSMgVE9ETzogRXhwb3NlIGZyb20gbWFyc2hhbAogZGVmIF93X2xvbmcoeCk6Ci0gICAgIiIiQ29udmVydCBhIDMyLWJpdCBpbnRlZ2VyIHRvIGxpdHRsZS1lbmRpYW4uCi0KLSAgICBYWFggVGVtcG9yYXJ5IHVudGlsIG1hcnNoYWwncyBsb25nIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZC4KLQotICAgICIiIgotICAgIHggPSBpbnQoeCkKLSAgICBpbnRfYnl0ZXMgPSBbXQotICAgIGludF9ieXRlcy5hcHBlbmQoeCAmIDB4RkYpCi0gICAgaW50X2J5dGVzLmFwcGVuZCgoeCA+PiA4KSAmIDB4RkYpCi0gICAgaW50X2J5dGVzLmFwcGVuZCgoeCA+PiAxNikgJiAweEZGKQotICAgIGludF9ieXRlcy5hcHBlbmQoKHggPj4gMjQpICYgMHhGRikKLSAgICByZXR1cm4gYnl0ZWFycmF5KGludF9ieXRlcykKKyAgICAiIiJDb252ZXJ0IGEgMzItYml0IGludGVnZXIgdG8gbGl0dGxlLWVuZGlhbi4iIiIKKyAgICByZXR1cm4gKGludCh4KSAmIDB4RkZGRkZGRkYpLnRvX2J5dGVzKDQsICdsaXR0bGUnKQogCiAKLSMgVE9ETzogRXhwb3NlIGZyb20gbWFyc2hhbAogZGVmIF9yX2xvbmcoaW50X2J5dGVzKToKLSAgICAiIiJDb252ZXJ0IDQgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiB0byBhbiBpbnRlZ2VyLgotCi0gICAgWFhYIFRlbXBvcmFyeSB1bnRpbCBtYXJzaGFsJ3MgbG9uZyBmdW5jdGlvbiBhcmUgZXhwb3NlZC4KLQotICAgICIiIgotICAgIHggPSBpbnRfYnl0ZXNbMF0KLSAgICB4IHw9IGludF9ieXRlc1sxXSA8PCA4Ci0gICAgeCB8PSBpbnRfYnl0ZXNbMl0gPDwgMTYKLSAgICB4IHw9IGludF9ieXRlc1szXSA8PCAyNAotICAgIHJldHVybiB4CisgICAgIiIiQ29udmVydCA0IGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gdG8gYW4gaW50ZWdlci4iIiIKKyAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoaW50X2J5dGVzLCAnbGl0dGxlJykKIAogCiBkZWYgX3BhdGhfam9pbigqcGF0aF9wYXJ0cyk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguam9pbigpLiIiIgotICAgIG5ld19wYXJ0cyA9IFtdCi0gICAgZm9yIHBhcnQgaW4gcGF0aF9wYXJ0czoKLSAgICAgICAgaWYgbm90IHBhcnQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBuZXdfcGFydHMuYXBwZW5kKHBhcnQpCi0gICAgICAgIGlmIHBhcnRbLTFdIG5vdCBpbiBwYXRoX3NlcGFyYXRvcnM6Ci0gICAgICAgICAgICBuZXdfcGFydHMuYXBwZW5kKHBhdGhfc2VwKQotICAgIHJldHVybiAnJy5qb2luKG5ld19wYXJ0c1s6LTFdKSAgIyBEcm9wIHN1cGVyZmx1b3VzIHBhdGggc2VwYXJhdG9yLgorICAgIHJldHVybiBwYXRoX3NlcC5qb2luKFtwYXJ0LnJzdHJpcChwYXRoX3NlcGFyYXRvcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIHBhdGhfcGFydHMgaWYgcGFydF0pCiAKIAogZGVmIF9wYXRoX3NwbGl0KHBhdGgpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLnNwbGl0KCkuIiIiCisgICAgaWYgbGVuKHBhdGhfc2VwYXJhdG9ycykgPT0gMToKKyAgICAgICAgZnJvbnQsIF8sIHRhaWwgPSBwYXRoLnJwYXJ0aXRpb24ocGF0aF9zZXApCisgICAgICAgIHJldHVybiBmcm9udCwgdGFpbAogICAgIGZvciB4IGluIHJldmVyc2VkKHBhdGgpOgogICAgICAgICBpZiB4IGluIHBhdGhfc2VwYXJhdG9yczoKLSAgICAgICAgICAgIHNlcCA9IHgKLSAgICAgICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgICAgc2VwID0gcGF0aF9zZXAKLSAgICBmcm9udCwgXywgdGFpbCA9IHBhdGgucnBhcnRpdGlvbihzZXApCi0gICAgcmV0dXJuIGZyb250LCB0YWlsCisgICAgICAgICAgICBmcm9udCwgdGFpbCA9IHBhdGgucnNwbGl0KHgsIG1heHNwbGl0PTEpCisgICAgICAgICAgICByZXR1cm4gZnJvbnQsIHRhaWwKKyAgICByZXR1cm4gJycsIHBhdGgKKworCitkZWYgX3BhdGhfc3RhdChwYXRoKToKKyAgICAiIiJTdGF0IHRoZSBwYXRoLgorCisgICAgTWFkZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIG1ha2UgaXQgZWFzaWVyIHRvIG92ZXJyaWRlIGluIGV4cGVyaW1lbnRzCisgICAgKGUuZy4gY2FjaGUgc3RhdCByZXN1bHRzKS4KKworICAgICIiIgorICAgIHJldHVybiBfb3Muc3RhdChwYXRoKQogCiAKIGRlZiBfcGF0aF9pc19tb2RlX3R5cGUocGF0aCwgbW9kZSk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIHRoZSBwYXRoIGlzIHRoZSBzcGVjaWZpZWQgbW9kZSB0eXBlLiIiIgogICAgIHRyeToKLSAgICAgICAgc3RhdF9pbmZvID0gX29zLnN0YXQocGF0aCkKKyAgICAgICAgc3RhdF9pbmZvID0gX3BhdGhfc3RhdChwYXRoKQogICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gKHN0YXRfaW5mby5zdF9tb2RlICYgMG8xNzAwMDApID09IG1vZGUKQEAgLTE1MSwxNSArMTMxLDYgQEAKIF9jb2RlX3R5cGUgPSB0eXBlKF93cmFwLl9fY29kZV9fKQogCiAKLWRlZiBuZXdfbW9kdWxlKG5hbWUpOgotICAgICIiIkNyZWF0ZSBhIG5ldyBtb2R1bGUuCi0KLSAgICBUaGUgbW9kdWxlIGlzIG5vdCBlbnRlcmVkIGludG8gc3lzLm1vZHVsZXMuCi0KLSAgICAiIiIKLSAgICByZXR1cm4gdHlwZShfaW8pKG5hbWUpCi0KLQogIyBNb2R1bGUtbGV2ZWwgbG9ja2luZyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjIEEgZGljdCBtYXBwaW5nIG1vZHVsZSBuYW1lcyB0byB3ZWFrcmVmcyBvZiBfTW9kdWxlTG9jayBpbnN0YW5jZXMKQEAgLTIxNCw3ICsxODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCArPSAxCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmhhc19kZWFkbG9jaygpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgX0RlYWRsb2NrRXJyb3IoImRlYWRsb2NrIGRldGVjdGVkIGJ5ICVyIiAlIHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBfRGVhZGxvY2tFcnJvcignZGVhZGxvY2sgZGV0ZWN0ZWQgYnkgJXInICUgc2VsZikKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi53YWtldXAuYWNxdWlyZShGYWxzZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndhaXRlcnMgKz0gMQogICAgICAgICAgICAgICAgICMgV2FpdCBmb3IgYSByZWxlYXNlKCkgY2FsbApAQCAtMjI3LDcgKzE5OCw3IEBACiAgICAgICAgIHRpZCA9IF90aHJlYWQuZ2V0X2lkZW50KCkKICAgICAgICAgd2l0aCBzZWxmLmxvY2s6CiAgICAgICAgICAgICBpZiBzZWxmLm93bmVyICE9IHRpZDoKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2siKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jaycpCiAgICAgICAgICAgICBhc3NlcnQgc2VsZi5jb3VudCA+IDAKICAgICAgICAgICAgIHNlbGYuY291bnQgLT0gMQogICAgICAgICAgICAgaWYgc2VsZi5jb3VudCA9PSAwOgpAQCAtMjM3LDcgKzIwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYud2FrZXVwLnJlbGVhc2UoKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIl9Nb2R1bGVMb2NrKCVyKSBhdCAlZCIgJSAoc2VsZi5uYW1lLCBpZChzZWxmKSkKKyAgICAgICAgcmV0dXJuICdfTW9kdWxlTG9jayh7IXJ9KSBhdCB7fScuZm9ybWF0KHNlbGYubmFtZSwgaWQoc2VsZikpCiAKIAogY2xhc3MgX0R1bW15TW9kdWxlTG9jazoKQEAgLTI1NCwxMSArMjI1LDExIEBACiAKICAgICBkZWYgcmVsZWFzZShzZWxmKToKICAgICAgICAgaWYgc2VsZi5jb3VudCA9PSAwOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrIikKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jaycpCiAgICAgICAgIHNlbGYuY291bnQgLT0gMQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIl9EdW1teU1vZHVsZUxvY2soJXIpIGF0ICVkIiAlIChzZWxmLm5hbWUsIGlkKHNlbGYpKQorICAgICAgICByZXR1cm4gJ19EdW1teU1vZHVsZUxvY2soeyFyfSkgYXQge30nLmZvcm1hdChzZWxmLm5hbWUsIGlkKHNlbGYpKQogCiAKICMgVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBmb3IgY29uc3VtcHRpb24gYnkgUHl0aG9uL2ltcG9ydC5jLgpAQCAtMzE1LDk1ICsyODYsMTA4IEBACiAKICMgRmluZGVyL2xvYWRlciB1dGlsaXR5IGNvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotIiIiTWFnaWMgd29yZCB0byByZWplY3QgLnB5YyBmaWxlcyBnZW5lcmF0ZWQgYnkgb3RoZXIgUHl0aG9uIHZlcnNpb25zLgotSXQgc2hvdWxkIGNoYW5nZSBmb3IgZWFjaCBpbmNvbXBhdGlibGUgY2hhbmdlIHRvIHRoZSBieXRlY29kZS4KKyMgTWFnaWMgd29yZCB0byByZWplY3QgLnB5YyBmaWxlcyBnZW5lcmF0ZWQgYnkgb3RoZXIgUHl0aG9uIHZlcnNpb25zLgorIyBJdCBzaG91bGQgY2hhbmdlIGZvciBlYWNoIGluY29tcGF0aWJsZSBjaGFuZ2UgdG8gdGhlIGJ5dGVjb2RlLgorIworIyBUaGUgdmFsdWUgb2YgQ1IgYW5kIExGIGlzIGluY29ycG9yYXRlZCBzbyBpZiB5b3UgZXZlciByZWFkIG9yIHdyaXRlCisjIGEgLnB5YyBmaWxlIGluIHRleHQgbW9kZSB0aGUgbWFnaWMgbnVtYmVyIHdpbGwgYmUgd3Jvbmc7IGFsc28sIHRoZQorIyBBcHBsZSBNUFcgY29tcGlsZXIgc3dhcHMgdGhlaXIgdmFsdWVzLCBib3RjaGluZyBzdHJpbmcgY29uc3RhbnRzLgorIworIyBUaGUgbWFnaWMgbnVtYmVycyBtdXN0IGJlIHNwYWNlZCBhcGFydCBhdCBsZWFzdCAyIHZhbHVlcywgYXMgdGhlCisjIC1VIGludGVycGV0ZXIgZmxhZyB3aWxsIGNhdXNlIE1BR0lDKzEgYmVpbmcgdXNlZC4gVGhleSBoYXZlIGJlZW4KKyMgb2RkIG51bWJlcnMgZm9yIHNvbWUgdGltZSBub3cuCisjCisjIFRoZXJlIHdlcmUgYSB2YXJpZXR5IG9mIG9sZCBzY2hlbWVzIGZvciBzZXR0aW5nIHRoZSBtYWdpYyBudW1iZXIuCisjIFRoZSBjdXJyZW50IHdvcmtpbmcgc2NoZW1lIGlzIHRvIGluY3JlbWVudCB0aGUgcHJldmlvdXMgdmFsdWUgYnkKKyMgMTAuCisjCisjIFN0YXJ0aW5nIHdpdGggdGhlIGFkb3B0aW9uIG9mIFBFUCAzMTQ3IGluIFB5dGhvbiAzLjIsIGV2ZXJ5IGJ1bXAgaW4gbWFnaWMKKyMgbnVtYmVyIGFsc28gaW5jbHVkZXMgYSBuZXcgIm1hZ2ljIHRhZyIsIGkuZS4gYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdXNlZAorIyB0byByZXByZXNlbnQgdGhlIG1hZ2ljIG51bWJlciBpbiBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllcy4gIFdoZW4geW91IGNoYW5nZQorIyB0aGUgbWFnaWMgbnVtYmVyLCB5b3UgbXVzdCBhbHNvIHNldCBhIG5ldyB1bmlxdWUgbWFnaWMgdGFnLiAgR2VuZXJhbGx5IHRoaXMKKyMgY2FuIGJlIG5hbWVkIGFmdGVyIHRoZSBQeXRob24gbWFqb3IgdmVyc2lvbiBvZiB0aGUgbWFnaWMgbnVtYmVyIGJ1bXAsIGJ1dAorIyBpdCBjYW4gcmVhbGx5IGJlIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3MgZGlmZmVyZW50IHRoYW4gYW55dGhpbmcgZWxzZQorIyB0aGF0J3MgY29tZSBiZWZvcmUuICBUaGUgdGFncyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgc3RhcnRpbmcKKyMgd2l0aCBQeXRob24gMy4yYTAuCisjCisjIEtub3duIHZhbHVlczoKKyMgIFB5dGhvbiAxLjU6ICAgMjAxMjEKKyMgIFB5dGhvbiAxLjUuMTogMjAxMjEKKyMgICAgIFB5dGhvbiAxLjUuMjogMjAxMjEKKyMgICAgIFB5dGhvbiAxLjY6ICAgNTA0MjgKKyMgICAgIFB5dGhvbiAyLjA6ICAgNTA4MjMKKyMgICAgIFB5dGhvbiAyLjAuMTogNTA4MjMKKyMgICAgIFB5dGhvbiAyLjE6ICAgNjAyMDIKKyMgICAgIFB5dGhvbiAyLjEuMTogNjAyMDIKKyMgICAgIFB5dGhvbiAyLjEuMjogNjAyMDIKKyMgICAgIFB5dGhvbiAyLjI6ICAgNjA3MTcKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMTEKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMjEKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMTEgKCEpCisjICAgICBQeXRob24gMi40YTA6IDYyMDQxCisjICAgICBQeXRob24gMi40YTM6IDYyMDUxCisjICAgICBQeXRob24gMi40YjE6IDYyMDYxCisjICAgICBQeXRob24gMi41YTA6IDYyMDcxCisjICAgICBQeXRob24gMi41YTA6IDYyMDgxIChhc3QtYnJhbmNoKQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA5MSAod2l0aCkKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwOTIgKGNoYW5nZWQgV0lUSF9DTEVBTlVQIG9wY29kZSkKKyMgICAgIFB5dGhvbiAyLjViMzogNjIxMDEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uKQorIyAgICAgUHl0aG9uIDIuNWIzOiA2MjExMSAoZml4IHdyb25nIGNvZGU6IHggKz0geWllbGQpCisjICAgICBQeXRob24gMi41YzE6IDYyMTIxIChmaXggd3JvbmcgbG5vdGFiIHdpdGggZm9yIGxvb3BzIGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmluZyBjb25zdGFudHMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQpCisjICAgICBQeXRob24gMi41YzI6IDYyMTMxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLiBpbiBsaXN0Y29tcC9nZW5leHApCisjICAgICBQeXRob24gMi42YTA6IDYyMTUxIChwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGFuZCBTVE9SRV9NQVAgb3Bjb2RlKQorIyAgICAgUHl0aG9uIDIuNmExOiA2MjE2MSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikKKyMgICAgIFB5dGhvbiAyLjdhMDogNjIxNzEgKG9wdGltaXplIGxpc3QgY29tcHJlaGVuc2lvbnMvY2hhbmdlIExJU1RfQVBQRU5EKQorIyAgICAgUHl0aG9uIDIuN2EwOiA2MjE4MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6CisjICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCisjICAgICBQeXRob24gMi43YTAgIDYyMTkxIChpbnRyb2R1Y2UgU0VUVVBfV0lUSCkKKyMgICAgIFB5dGhvbiAyLjdhMCAgNjIyMDEgKGludHJvZHVjZSBCVUlMRF9TRVQpCisjICAgICBQeXRob24gMi43YTAgIDYyMjExIChpbnRyb2R1Y2UgTUFQX0FERCBhbmQgU0VUX0FERCkKKyMgICAgIFB5dGhvbiAzMDAwOiAgIDMwMDAKKyMgICAgICAgICAgICAgICAgICAgIDMwMTAgKHJlbW92ZWQgVU5BUllfQ09OVkVSVCkKKyMgICAgICAgICAgICAgICAgICAgIDMwMjAgKGFkZGVkIEJVSUxEX1NFVCkKKyMgICAgICAgICAgICAgICAgICAgIDMwMzAgKGFkZGVkIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzKQorIyAgICAgICAgICAgICAgICAgICAgMzA0MCAoYWRkZWQgc2lnbmF0dXJlIGFubm90YXRpb25zKQorIyAgICAgICAgICAgICAgICAgICAgMzA1MCAocHJpbnQgYmVjb21lcyBhIGZ1bmN0aW9uKQorIyAgICAgICAgICAgICAgICAgICAgMzA2MCAoUEVQIDMxMTUgbWV0YWNsYXNzIHN5bnRheCkKKyMgICAgICAgICAgICAgICAgICAgIDMwNjEgKHN0cmluZyBsaXRlcmFscyBiZWNvbWUgdW5pY29kZSkKKyMgICAgICAgICAgICAgICAgICAgIDMwNzEgKFBFUCAzMTA5IHJhaXNlIGNoYW5nZXMpCisjICAgICAgICAgICAgICAgICAgICAzMDgxIChQRVAgMzEzNyBtYWtlIF9fZmlsZV9fIGFuZCBfX25hbWVfXyB1bmljb2RlKQorIyAgICAgICAgICAgICAgICAgICAgMzA5MSAoa2lsbCBzdHI4IGludGVybmluZykKKyMgICAgICAgICAgICAgICAgICAgIDMxMDEgKG1lcmdlIGZyb20gMi42YTAsIHNlZSA2MjE1MSkKKyMgICAgICAgICAgICAgICAgICAgIDMxMDMgKF9fZmlsZV9fIHBvaW50cyB0byBzb3VyY2UgZmlsZSkKKyMgICAgIFB5dGhvbiAzLjBhNDogMzExMSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikuCisjICAgICBQeXRob24gMy4wYTU6IDMxMzEgKGxleGljYWwgZXhjZXB0aW9uIHN0YWNraW5nLCBpbmNsdWRpbmcgUE9QX0VYQ0VQVCkKKyMgICAgIFB5dGhvbiAzLjFhMDogMzE0MSAob3B0aW1pemUgbGlzdCwgc2V0IGFuZCBkaWN0IGNvbXByZWhlbnNpb25zOgorIyAgICAgICAgICAgICBjaGFuZ2UgTElTVF9BUFBFTkQgYW5kIFNFVF9BREQsIGFkZCBNQVBfQUREKQorIyAgICAgUHl0aG9uIDMuMWEwOiAzMTUxIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKKyMgICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQorIyAgICAgUHl0aG9uIDMuMmEwOiAzMTYwIChhZGQgU0VUVVBfV0lUSCkKKyMgICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCisjICAgICBQeXRob24gMy4yYTE6IDMxNzAgKGFkZCBEVVBfVE9QX1RXTywgcmVtb3ZlIERVUF9UT1BYIGFuZCBST1RfRk9VUikKKyMgICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCisjICAgICBQeXRob24gMy4yYTIgIDMxODAgKGFkZCBERUxFVEVfREVSRUYpCisjICAgICBQeXRob24gMy4zYTAgIDMxOTAgX19jbGFzc19fIHN1cGVyIGNsb3N1cmUgY2hhbmdlZAorIyAgICAgUHl0aG9uIDMuM2EwICAzMjAwIChfX3F1YWxuYW1lX18gYWRkZWQpCisjICAgICAgICAgICAgICAgICAgICAgIDMyMTAgKGFkZGVkIHNpemUgbW9kdWxvIDIqKjMyIHRvIHRoZSBweWMgaGVhZGVyKQorIyAgICAgUHl0aG9uIDMuM2ExICAzMjIwIChjaGFuZ2VkIFBFUCAzODAgaW1wbGVtZW50YXRpb24pCisjICAgICBQeXRob24gMy4zYTQgIDMyMzAgKHJldmVydCBjaGFuZ2VzIHRvIGltcGxpY2l0IF9fY2xhc3NfXyBjbG9zdXJlKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjUwIChldmFsdWF0ZSBwb3NpdGlvbmFsIGRlZmF1bHQgYXJndW1lbnRzIGJlZm9yZQorIyAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQtb25seSBkZWZhdWx0cykKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI2MCAoYWRkIExPQURfQ0xBU1NERVJFRjsgYWxsb3cgbG9jYWxzIG9mIGNsYXNzIHRvIG92ZXJyaWRlCisjICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSB2YXJzKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjcwICh2YXJpb3VzIHR3ZWFrcyB0byB0aGUgX19jbGFzc19fIGNsb3N1cmUpCisjICAgICBQeXRob24gMy40YTEgIDMyODAgKHJlbW92ZSBpbXBsaWNpdCBjbGFzcyBhcmd1bWVudCkKKyMgICAgIFB5dGhvbiAzLjRhNCAgMzI5MCAoY2hhbmdlcyB0byBfX3F1YWxuYW1lX18gY29tcHV0YXRpb24pCisjICAgICBQeXRob24gMy40YTQgIDMzMDAgKG1vcmUgY2hhbmdlcyB0byBfX3F1YWxuYW1lX18gY29tcHV0YXRpb24pCisjCisjIE1BR0lDIG11c3QgY2hhbmdlIHdoZW5ldmVyIHRoZSBieXRlY29kZSBlbWl0dGVkIGJ5IHRoZSBjb21waWxlciBtYXkgbm8KKyMgbG9uZ2VyIGJlIHVuZGVyc3Rvb2QgYnkgb2xkZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBldmFsIGxvb3AgKHVzdWFsbHkKKyMgZHVlIHRvIHRoZSBhZGRpdGlvbiBvZiBuZXcgb3Bjb2RlcykuCiAKLVRoZSB2YWx1ZSBvZiBDUiBhbmQgTEYgaXMgaW5jb3Jwb3JhdGVkIHNvIGlmIHlvdSBldmVyIHJlYWQgb3Igd3JpdGUKLWEgLnB5YyBmaWxlIGluIHRleHQgbW9kZSB0aGUgbWFnaWMgbnVtYmVyIHdpbGwgYmUgd3Jvbmc7IGFsc28sIHRoZQotQXBwbGUgTVBXIGNvbXBpbGVyIHN3YXBzIHRoZWlyIHZhbHVlcywgYm90Y2hpbmcgc3RyaW5nIGNvbnN0YW50cy4KLQotVGhlIG1hZ2ljIG51bWJlcnMgbXVzdCBiZSBzcGFjZWQgYXBhcnQgYXQgbGVhc3QgMiB2YWx1ZXMsIGFzIHRoZQotLVUgaW50ZXJwZXRlciBmbGFnIHdpbGwgY2F1c2UgTUFHSUMrMSBiZWluZyB1c2VkLiBUaGV5IGhhdmUgYmVlbgotb2RkIG51bWJlcnMgZm9yIHNvbWUgdGltZSBub3cuCi0KLVRoZXJlIHdlcmUgYSB2YXJpZXR5IG9mIG9sZCBzY2hlbWVzIGZvciBzZXR0aW5nIHRoZSBtYWdpYyBudW1iZXIuCi1UaGUgY3VycmVudCB3b3JraW5nIHNjaGVtZSBpcyB0byBpbmNyZW1lbnQgdGhlIHByZXZpb3VzIHZhbHVlIGJ5Ci0xMC4KLQotU3RhcnRpbmcgd2l0aCB0aGUgYWRvcHRpb24gb2YgUEVQIDMxNDcgaW4gUHl0aG9uIDMuMiwgZXZlcnkgYnVtcCBpbiBtYWdpYwotbnVtYmVyIGFsc28gaW5jbHVkZXMgYSBuZXcgIm1hZ2ljIHRhZyIsIGkuZS4gYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdXNlZAotdG8gcmVwcmVzZW50IHRoZSBtYWdpYyBudW1iZXIgaW4gX19weWNhY2hlX18gZGlyZWN0b3JpZXMuICBXaGVuIHlvdSBjaGFuZ2UKLXRoZSBtYWdpYyBudW1iZXIsIHlvdSBtdXN0IGFsc28gc2V0IGEgbmV3IHVuaXF1ZSBtYWdpYyB0YWcuICBHZW5lcmFsbHkgdGhpcwotY2FuIGJlIG5hbWVkIGFmdGVyIHRoZSBQeXRob24gbWFqb3IgdmVyc2lvbiBvZiB0aGUgbWFnaWMgbnVtYmVyIGJ1bXAsIGJ1dAotaXQgY2FuIHJlYWxseSBiZSBhbnl0aGluZywgYXMgbG9uZyBhcyBpdCdzIGRpZmZlcmVudCB0aGFuIGFueXRoaW5nIGVsc2UKLXRoYXQncyBjb21lIGJlZm9yZS4gIFRoZSB0YWdzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlLCBzdGFydGluZwotd2l0aCBQeXRob24gMy4yYTAuCi0KLUtub3duIHZhbHVlczoKLSBQeXRob24gMS41OiAgIDIwMTIxCi0gUHl0aG9uIDEuNS4xOiAyMDEyMQotICAgIFB5dGhvbiAxLjUuMjogMjAxMjEKLSAgICBQeXRob24gMS42OiAgIDUwNDI4Ci0gICAgUHl0aG9uIDIuMDogICA1MDgyMwotICAgIFB5dGhvbiAyLjAuMTogNTA4MjMKLSAgICBQeXRob24gMi4xOiAgIDYwMjAyCi0gICAgUHl0aG9uIDIuMS4xOiA2MDIwMgotICAgIFB5dGhvbiAyLjEuMjogNjAyMDIKLSAgICBQeXRob24gMi4yOiAgIDYwNzE3Ci0gICAgUHl0aG9uIDIuM2EwOiA2MjAxMQotICAgIFB5dGhvbiAyLjNhMDogNjIwMjEKLSAgICBQeXRob24gMi4zYTA6IDYyMDExICghKQotICAgIFB5dGhvbiAyLjRhMDogNjIwNDEKLSAgICBQeXRob24gMi40YTM6IDYyMDUxCi0gICAgUHl0aG9uIDIuNGIxOiA2MjA2MQotICAgIFB5dGhvbiAyLjVhMDogNjIwNzEKLSAgICBQeXRob24gMi41YTA6IDYyMDgxIChhc3QtYnJhbmNoKQotICAgIFB5dGhvbiAyLjVhMDogNjIwOTEgKHdpdGgpCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA5MiAoY2hhbmdlZCBXSVRIX0NMRUFOVVAgb3Bjb2RlKQotICAgIFB5dGhvbiAyLjViMzogNjIxMDEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uKQotICAgIFB5dGhvbiAyLjViMzogNjIxMTEgKGZpeCB3cm9uZyBjb2RlOiB4ICs9IHlpZWxkKQotICAgIFB5dGhvbiAyLjVjMTogNjIxMjEgKGZpeCB3cm9uZyBsbm90YWIgd2l0aCBmb3IgbG9vcHMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmluZyBjb25zdGFudHMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQpCi0gICAgUHl0aG9uIDIuNWMyOiA2MjEzMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4gaW4gbGlzdGNvbXAvZ2VuZXhwKQotICAgIFB5dGhvbiAyLjZhMDogNjIxNTEgKHBlZXBob2xlIG9wdGltaXphdGlvbnMgYW5kIFNUT1JFX01BUCBvcGNvZGUpCi0gICAgUHl0aG9uIDIuNmExOiA2MjE2MSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikKLSAgICBQeXRob24gMzAwMDogICAzMDAwCi0gICAgICAgICAgICAgICAgICAgMzAxMCAocmVtb3ZlZCBVTkFSWV9DT05WRVJUKQotICAgICAgICAgICAgICAgICAgIDMwMjAgKGFkZGVkIEJVSUxEX1NFVCkKLSAgICAgICAgICAgICAgICAgICAzMDMwIChhZGRlZCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycykKLSAgICAgICAgICAgICAgICAgICAzMDQwIChhZGRlZCBzaWduYXR1cmUgYW5ub3RhdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgMzA1MCAocHJpbnQgYmVjb21lcyBhIGZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAgIDMwNjAgKFBFUCAzMTE1IG1ldGFjbGFzcyBzeW50YXgpCi0gICAgICAgICAgICAgICAgICAgMzA2MSAoc3RyaW5nIGxpdGVyYWxzIGJlY29tZSB1bmljb2RlKQotICAgICAgICAgICAgICAgICAgIDMwNzEgKFBFUCAzMTA5IHJhaXNlIGNoYW5nZXMpCi0gICAgICAgICAgICAgICAgICAgMzA4MSAoUEVQIDMxMzcgbWFrZSBfX2ZpbGVfXyBhbmQgX19uYW1lX18gdW5pY29kZSkKLSAgICAgICAgICAgICAgICAgICAzMDkxIChraWxsIHN0cjggaW50ZXJuaW5nKQotICAgICAgICAgICAgICAgICAgIDMxMDEgKG1lcmdlIGZyb20gMi42YTAsIHNlZSA2MjE1MSkKLSAgICAgICAgICAgICAgICAgICAzMTAzIChfX2ZpbGVfXyBwb2ludHMgdG8gc291cmNlIGZpbGUpCi0gICAgUHl0aG9uIDMuMGE0OiAzMTExIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKS4KLSAgICBQeXRob24gMy4wYTU6IDMxMzEgKGxleGljYWwgZXhjZXB0aW9uIHN0YWNraW5nLCBpbmNsdWRpbmcgUE9QX0VYQ0VQVCkKLSAgICBQeXRob24gMy4xYTA6IDMxNDEgKG9wdGltaXplIGxpc3QsIHNldCBhbmQgZGljdCBjb21wcmVoZW5zaW9uczoKLSAgICAgICAgICAgIGNoYW5nZSBMSVNUX0FQUEVORCBhbmQgU0VUX0FERCwgYWRkIE1BUF9BREQpCi0gICAgUHl0aG9uIDMuMWEwOiAzMTUxIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKLSAgICAgICAgICAgIGludHJvZHVjZSBQT1BfSlVNUF9JRl9GQUxTRSBhbmQgUE9QX0pVTVBfSUZfVFJVRSkKLSAgICBQeXRob24gMy4yYTA6IDMxNjAgKGFkZCBTRVRVUF9XSVRIKQotICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCi0gICAgUHl0aG9uIDMuMmExOiAzMTcwIChhZGQgRFVQX1RPUF9UV08sIHJlbW92ZSBEVVBfVE9QWCBhbmQgUk9UX0ZPVVIpCi0gICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKLSAgICBQeXRob24gMy4yYTIgIDMxODAgKGFkZCBERUxFVEVfREVSRUYpCi0gICAgUHl0aG9uIDMuM2EwICAzMTkwIF9fY2xhc3NfXyBzdXBlciBjbG9zdXJlIGNoYW5nZWQKLSAgICBQeXRob24gMy4zYTAgIDMyMDAgKF9fcXVhbG5hbWVfXyBhZGRlZCkKLSAgICAgICAgICAgICAgICAgICAgIDMyMTAgKGFkZGVkIHNpemUgbW9kdWxvIDIqKjMyIHRvIHRoZSBweWMgaGVhZGVyKQotICAgIFB5dGhvbiAzLjNhMSAgMzIyMCAoY2hhbmdlZCBQRVAgMzgwIGltcGxlbWVudGF0aW9uKQotICAgIFB5dGhvbiAzLjNhNCAgMzIzMCAocmV2ZXJ0IGNoYW5nZXMgdG8gaW1wbGljaXQgX19jbGFzc19fIGNsb3N1cmUpCi0KLU1BR0lDIG11c3QgY2hhbmdlIHdoZW5ldmVyIHRoZSBieXRlY29kZSBlbWl0dGVkIGJ5IHRoZSBjb21waWxlciBtYXkgbm8KLWxvbmdlciBiZSB1bmRlcnN0b29kIGJ5IG9sZGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZXZhbCBsb29wICh1c3VhbGx5Ci1kdWUgdG8gdGhlIGFkZGl0aW9uIG9mIG5ldyBvcGNvZGVzKS4KLQotIiIiCi1fUkFXX01BR0lDX05VTUJFUiA9IDMyMzAgfCBvcmQoJ1xyJykgPDwgMTYgfCBvcmQoJ1xuJykgPDwgMjQKLV9NQUdJQ19CWVRFUyA9IGJ5dGVzKF9SQVdfTUFHSUNfTlVNQkVSID4+IG4gJiAweGZmIGZvciBuIGluIHJhbmdlKDAsIDI1LCA4KSkKK01BR0lDX05VTUJFUiA9ICgzMzAwKS50b19ieXRlcygyLCAnbGl0dGxlJykgKyBiJ1xyXG4nCitfUkFXX01BR0lDX05VTUJFUiA9IGludC5mcm9tX2J5dGVzKE1BR0lDX05VTUJFUiwgJ2xpdHRsZScpICAjIEZvciBpbXBvcnQuYwogCiBfUFlDQUNIRSA9ICdfX3B5Y2FjaGVfXycKIApAQCAtNDgxLDYgKzQ2NSwxOCBAQAogICAgIHJldHVybiBzb3VyY2VfcGF0aCBpZiBfcGF0aF9pc2ZpbGUoc291cmNlX3BhdGgpIGVsc2UgYnl0ZWNvZGVfcGF0aAogCiAKK2RlZiBfY2FsY19tb2RlKHBhdGgpOgorICAgICIiIkNhbGN1bGF0ZSB0aGUgbW9kZSBwZXJtaXNzaW9ucyBmb3IgYSBieXRlY29kZSBmaWxlLiIiIgorICAgIHRyeToKKyAgICAgICAgbW9kZSA9IF9wYXRoX3N0YXQocGF0aCkuc3RfbW9kZQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBtb2RlID0gMG82NjYKKyAgICAjIFdlIGFsd2F5cyBlbnN1cmUgd3JpdGUgYWNjZXNzIHNvIHdlIGNhbiB1cGRhdGUgY2FjaGVkIGZpbGVzCisgICAgIyBsYXRlciBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MgKCM2MDc0KQorICAgIG1vZGUgfD0gMG8yMDAKKyAgICByZXR1cm4gbW9kZQorCisKIGRlZiBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UsICphcmdzLCB2ZXJib3NpdHk9MSk6CiAgICAgIiIiUHJpbnQgdGhlIG1lc3NhZ2UgdG8gc3RkZXJyIGlmIC12L1BZVEhPTlZFUkJPU0UgaXMgdHVybmVkIG9uLiIiIgogICAgIGlmIHN5cy5mbGFncy52ZXJib3NlID49IHZlcmJvc2l0eToKQEAgLTQ4OSw2ICs0ODUsMTAwIEBACiAgICAgICAgIHByaW50KG1lc3NhZ2UuZm9ybWF0KCphcmdzKSwgZmlsZT1zeXMuc3RkZXJyKQogCiAKK2NsYXNzIF9NYW5hZ2VSZWxvYWQ6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9pc19yZWxvYWQgPSBzZWxmLl9uYW1lIGluIHN5cy5tb2R1bGVzCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBpZiBhbnkoYXJnIGlzIG5vdCBOb25lIGZvciBhcmcgaW4gYXJncykgYW5kIG5vdCBzZWxmLl9pc19yZWxvYWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NlbGYuX25hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisKKyMgV3JpdHRlbiBhcyBhIGNsYXNzIG9ubHkgYmVjYXVzZSBjb250ZXh0bGliIGlzIG5vdCBhdmFpbGFibGUuCitjbGFzcyBfTW9kdWxlTWFuYWdlcihfTWFuYWdlUmVsb2FkKToKKworICAgICIiIkNvbnRleHQgbWFuYWdlciB3aGljaCByZXR1cm5zIHRoZSBtb2R1bGUgdG8gYmUgbG9hZGVkLgorCisgICAgRG9lcyB0aGUgcHJvcGVyIHVubG9hZGluZyBmcm9tIHN5cy5tb2R1bGVzIHVwb24gZmFpbHVyZS4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsICosIHJlc2V0X25hbWU9VHJ1ZSk6CisgICAgICAgICIiIlByZXBhcmUgdGhlIGNvbnRleHQgbWFuYWdlci4KKworICAgICAgICBUaGUgcmVzZXRfbmFtZSBhcmd1bWVudCBzcGVjaWZpZXMgd2hldGhlciB0byB1bmNvbmRpdGlvbmFsbHkgcmVzZXQKKyAgICAgICAgdGhlIF9fbmFtZV9fIGF0dHJpYnV0ZSBpZiB0aGUgbW9kdWxlIGlzIGZvdW5kIHRvIGJlIGEgcmVsb2FkLgorICAgICAgICAiIiIKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhuYW1lKQorICAgICAgICBzZWxmLl9yZXNldF9uYW1lID0gcmVzZXRfbmFtZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fX2VudGVyX18oKQorICAgICAgICBzZWxmLl9tb2R1bGUgPSBzeXMubW9kdWxlcy5nZXQoc2VsZi5fbmFtZSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2lzX3JlbG9hZDoKKyAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIG9wZW4oKSBpcyBjYWxsZWQgYXMgdGhlICdpbycgbW9kdWxlCisgICAgICAgICAgICAjIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlIHRyaWdnZXIgYW4KKyAgICAgICAgICAgICMgaW5maW5pdGUgbG9vcC4KKyAgICAgICAgICAgIHNlbGYuX21vZHVsZSA9IHR5cGUoX2lvKShzZWxmLl9uYW1lKQorICAgICAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcHV0dGluZyB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzCisgICAgICAgICAgICAjIChvdGhlcndpc2UgYW4gb3B0aW1pemF0aW9uIHNob3J0Y3V0IGluIGltcG9ydC5jIGJlY29tZXMgd3JvbmcpCisgICAgICAgICAgICBzZWxmLl9tb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IFRydWUKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYuX25hbWVdID0gc2VsZi5fbW9kdWxlCisgICAgICAgIGVsaWYgc2VsZi5fcmVzZXRfbmFtZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9tb2R1bGUuX19uYW1lX18gPSBzZWxmLl9uYW1lCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gc2VsZi5fbW9kdWxlCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9tb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IEZhbHNlCisgICAgICAgIGRlbCBzZWxmLl9tb2R1bGUKKyAgICAgICAgc3VwZXIoKS5fX2V4aXRfXygqYXJncykKKworCitkZWYgbW9kdWxlX3RvX2xvYWQobmFtZSwgKiwgcmVzZXRfbmFtZT1UcnVlKToKKyAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgd2hpY2ggcHJvdmlkZXMgdGhlIG1vZHVsZSBvYmplY3QgdG8gbG9hZC4KKworICAgIElmIHJlc2V0X25hbWUgaXMgdHJ1ZSwgcmVzZXQgdGhlIG1vZHVsZSdzIF9fbmFtZV9fIHRvICduYW1lJy4KKyAgICAiIiIKKyAgICAjIEhpZGluZyBfTW9kdWxlTWFuYWdlciBiZWhpbmQgYSBmdW5jdGlvbiBmb3IgYmV0dGVyIG5hbWluZy4KKyAgICByZXR1cm4gX01vZHVsZU1hbmFnZXIobmFtZSwgcmVzZXRfbmFtZT1yZXNldF9uYW1lKQorCisKK2RlZiBfaW5pdF9wYWNrYWdlX2F0dHJzKGxvYWRlciwgbW9kdWxlKToKKyAgICAiIiJTZXQgX19wYWNrYWdlX18gYW5kIF9fcGF0aF9fIGJhc2VkIG9uIHdoYXQgbG9hZGVyLmlzX3BhY2thZ2UoKSBzYXlzLiIiIgorICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KKyAgICB0cnk6CisgICAgICAgIGlzX3BhY2thZ2UgPSBsb2FkZXIuaXNfcGFja2FnZShuYW1lKQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIGlzX3BhY2thZ2U6CisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBuYW1lCisgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKworCitkZWYgX2luaXRfZmlsZV9hdHRycyhsb2FkZXIsIG1vZHVsZSk6CisgICAgIiIiU2V0IF9fZmlsZV9fIGFuZCBfX3BhdGhfXyBiYXNlZCBvbiBsb2FkZXIuZ2V0X2ZpbGVuYW1lKCkuIiIiCisgICAgdHJ5OgorICAgICAgICBtb2R1bGUuX19maWxlX18gPSBsb2FkZXIuZ2V0X2ZpbGVuYW1lKG1vZHVsZS5fX25hbWVfXykKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBpZiBtb2R1bGUuX19uYW1lX18gPT0gbW9kdWxlLl9fcGFja2FnZV9fOgorICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fLmFwcGVuZChfcGF0aF9zcGxpdChtb2R1bGUuX19maWxlX18pWzBdKQorCisKIGRlZiBzZXRfcGFja2FnZShmeG4pOgogICAgICIiIlNldCBfX3BhY2thZ2VfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiIiIgogICAgIGRlZiBzZXRfcGFja2FnZV93cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CkBAIC01MDYsNjggKzU5NiwxMyBAQAogICAgICIiIlNldCBfX2xvYWRlcl9fIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIiIiCiAgICAgZGVmIHNldF9sb2FkZXJfd3JhcHBlcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBtb2R1bGUgPSBmeG4oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyk6CisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CiAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKICAgICAgICAgcmV0dXJuIG1vZHVsZQogICAgIF93cmFwKHNldF9sb2FkZXJfd3JhcHBlciwgZnhuKQogICAgIHJldHVybiBzZXRfbG9hZGVyX3dyYXBwZXIKIAogCi1kZWYgbW9kdWxlX2Zvcl9sb2FkZXIoZnhuKToKLSAgICAiIiJEZWNvcmF0b3IgdG8gaGFuZGxlIHNlbGVjdGluZyB0aGUgcHJvcGVyIG1vZHVsZSBmb3IgbG9hZGVycy4KLQotICAgIFRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBtb2R1bGUgdG8gdXNlIGluc3RlYWQgb2YgdGhlIG1vZHVsZQotICAgIG5hbWUuIFRoZSBtb2R1bGUgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgZnJvbSBzeXMubW9kdWxlcyBpZgotICAgIGl0IGFscmVhZHkgZXhpc3RzIG9yIGlzIGEgbmV3IG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBpcyBuZXcsIHRoZW4gX19uYW1lX18KLSAgICBpcyBzZXQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBtZXRob2QsIF9fbG9hZGVyX18gaXMgc2V0IHRvIHNlbGYsIGFuZAotICAgIF9fcGFja2FnZV9fIGlzIHNldCBhY2NvcmRpbmdseSAoaWYgc2VsZi5pc19wYWNrYWdlKCkgaXMgZGVmaW5lZCkgd2lsbCBiZSBzZXQKLSAgICBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gKGlmIHNlbGYuaXNfcGFja2FnZSgpIGRvZXMKLSAgICBub3Qgd29yayBmb3IgdGhlIG1vZHVsZSBpdCB3aWxsIGJlIHNldCBwb3N0LWxvYWQpLgotCi0gICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlIGRlY29yYXRvciBjcmVhdGVkIHRoZSBtb2R1bGUgaXQgaXMKLSAgICBzdWJzZXF1ZW50bHkgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLgotCi0gICAgVGhlIGRlY29yYXRvciBhc3N1bWVzIHRoYXQgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiB0YWtlcyB0aGUgbW9kdWxlIG5hbWUgYXMKLSAgICB0aGUgc2Vjb25kIGFyZ3VtZW50LgotCi0gICAgIiIiCi0gICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzLmdldChmdWxsbmFtZSkKLSAgICAgICAgaXNfcmVsb2FkID0gbW9kdWxlIGlzIG5vdCBOb25lCi0gICAgICAgIGlmIG5vdCBpc19yZWxvYWQ6Ci0gICAgICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBvcGVuKCkgaXMgY2FsbGVkIGFzIHRoZSAnaW8nIG1vZHVsZQotICAgICAgICAgICAgIyBpbXBsaWNpdGx5IGltcG9ydHMgJ2xvY2FsZScgYW5kIHdvdWxkIG90aGVyd2lzZSB0cmlnZ2VyIGFuCi0gICAgICAgICAgICAjIGluZmluaXRlIGxvb3AuCi0gICAgICAgICAgICBtb2R1bGUgPSBuZXdfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcHV0dGluZyB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzCi0gICAgICAgICAgICAjIChvdGhlcndpc2UgYW4gb3B0aW1pemF0aW9uIHNob3J0Y3V0IGluIGltcG9ydC5jIGJlY29tZXMgd3JvbmcpCi0gICAgICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IFRydWUKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IHNlbGYuaXNfcGFja2FnZShmdWxsbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIGlzX3BhY2thZ2U6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IFRydWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBJZiBfX3BhY2thZ2VfXyB3YXMgbm90IHNldCBhYm92ZSwgX19pbXBvcnRfXygpIHdpbGwgZG8gaXQgbGF0ZXIuCi0gICAgICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG1vZHVsZSwgKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IEZhbHNlCi0gICAgX3dyYXAobW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlciwgZnhuKQotICAgIHJldHVybiBtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyCi0KLQogZGVmIF9jaGVja19uYW1lKG1ldGhvZCk6CiAgICAgIiIiRGVjb3JhdG9yIHRvIHZlcmlmeSB0aGF0IHRoZSBtb2R1bGUgYmVpbmcgcmVxdWVzdGVkIG1hdGNoZXMgdGhlIG9uZSB0aGUKICAgICBsb2FkZXIgY2FuIGhhbmRsZS4KQEAgLTU4MCw3ICs2MTUsNyBAQAogICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBuYW1lID0gc2VsZi5uYW1lCiAgICAgICAgIGVsaWYgc2VsZi5uYW1lICE9IG5hbWU6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigibG9hZGVyIGNhbm5vdCBoYW5kbGUgJXMiICUgbmFtZSwgbmFtZT1uYW1lKQorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2xvYWRlciBjYW5ub3QgaGFuZGxlICVzJyAlIG5hbWUsIG5hbWU9bmFtZSkKICAgICAgICAgcmV0dXJuIG1ldGhvZChzZWxmLCBuYW1lLCAqYXJncywgKiprd2FyZ3MpCiAgICAgX3dyYXAoX2NoZWNrX25hbWVfd3JhcHBlciwgbWV0aG9kKQogICAgIHJldHVybiBfY2hlY2tfbmFtZV93cmFwcGVyCkBAIC01OTAsNyArNjI1LDcgQEAKICAgICAiIiJEZWNvcmF0b3IgdG8gdmVyaWZ5IHRoZSBuYW1lZCBtb2R1bGUgaXMgYnVpbHQtaW4uIiIiCiAgICAgZGVmIF9yZXF1aXJlc19idWlsdGluX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICBpZiBmdWxsbmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoInt9IGlzIG5vdCBhIGJ1aWx0LWluIG1vZHVsZSIuZm9ybWF0KGZ1bGxuYW1lKSwKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7fSBpcyBub3QgYSBidWlsdC1pbiBtb2R1bGUnLmZvcm1hdChmdWxsbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIGZ1bGxuYW1lKQogICAgIF93cmFwKF9yZXF1aXJlc19idWlsdGluX3dyYXBwZXIsIGZ4bikKQEAgLTYwMSw3ICs2MzYsNyBAQAogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhlIG5hbWVkIG1vZHVsZSBpcyBmcm96ZW4uIiIiCiAgICAgZGVmIF9yZXF1aXJlc19mcm96ZW5fd3JhcHBlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIGlmIG5vdCBfaW1wLmlzX2Zyb3plbihmdWxsbmFtZSk6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigie30gaXMgbm90IGEgZnJvemVuIG1vZHVsZSIuZm9ybWF0KGZ1bGxuYW1lKSwKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7fSBpcyBub3QgYSBmcm96ZW4gbW9kdWxlJy5mb3JtYXQoZnVsbG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkKICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBmdWxsbmFtZSkKICAgICBfd3JhcChfcmVxdWlyZXNfZnJvemVuX3dyYXBwZXIsIGZ4bikKQEAgLTYxNiwxMSArNjUxLDk4IEBACiAgICAgIyByZXR1cm4gTm9uZS4KICAgICBsb2FkZXIsIHBvcnRpb25zID0gc2VsZi5maW5kX2xvYWRlcihmdWxsbmFtZSkKICAgICBpZiBsb2FkZXIgaXMgTm9uZSBhbmQgbGVuKHBvcnRpb25zKToKLSAgICAgICAgbXNnID0gIk5vdCBpbXBvcnRpbmcgZGlyZWN0b3J5IHt9OiBtaXNzaW5nIF9faW5pdF9fIgorICAgICAgICBtc2cgPSAnTm90IGltcG9ydGluZyBkaXJlY3Rvcnkge306IG1pc3NpbmcgX19pbml0X18nCiAgICAgICAgIF93YXJuaW5ncy53YXJuKG1zZy5mb3JtYXQocG9ydGlvbnNbMF0pLCBJbXBvcnRXYXJuaW5nKQogICAgIHJldHVybiBsb2FkZXIKIAogCitkZWYgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLCBzb3VyY2Vfc3RhdHM9Tm9uZSwgbmFtZT1Ob25lLCBwYXRoPU5vbmUpOgorICAgICIiIlZhbGlkYXRlIHRoZSBoZWFkZXIgb2YgdGhlIHBhc3NlZC1pbiBieXRlY29kZSBhZ2FpbnN0IHNvdXJjZV9zdGF0cyAoaWYKKyAgICBnaXZlbikgYW5kIHJldHVybmluZyB0aGUgYnl0ZWNvZGUgdGhhdCBjYW4gYmUgY29tcGlsZWQgYnkgY29tcGlsZSgpLgorCisgICAgQWxsIG90aGVyIGFyZ3VtZW50cyBhcmUgdXNlZCB0byBlbmhhbmNlIGVycm9yIHJlcG9ydGluZy4KKworICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZSBtYWdpYyBudW1iZXIgaXMgaW5jb3JyZWN0IG9yIHRoZSBieXRlY29kZSBpcworICAgIGZvdW5kIHRvIGJlIHN0YWxlLiBFT0ZFcnJvciBpcyByYWlzZWQgd2hlbiB0aGUgZGF0YSBpcyBmb3VuZCB0byBiZQorICAgIHRydW5jYXRlZC4KKworICAgICIiIgorICAgIGV4Y19kZXRhaWxzID0ge30KKyAgICBpZiBuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1snbmFtZSddID0gbmFtZQorICAgIGVsc2U6CisgICAgICAgICMgVG8gcHJldmVudCBoYXZpbmcgdG8gbWFrZSBhbGwgbWVzc2FnZXMgaGF2ZSBhIGNvbmRpdGlvbmFsIG5hbWUuCisgICAgICAgIG5hbWUgPSAnPGJ5dGVjb2RlPicKKyAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1sncGF0aCddID0gcGF0aAorICAgIG1hZ2ljID0gZGF0YVs6NF0KKyAgICByYXdfdGltZXN0YW1wID0gZGF0YVs0OjhdCisgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCisgICAgaWYgbWFnaWMgIT0gTUFHSUNfTlVNQkVSOgorICAgICAgICBtZXNzYWdlID0gJ2JhZCBtYWdpYyBudW1iZXIgaW4geyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG1hZ2ljKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsICoqZXhjX2RldGFpbHMpCisgICAgZWxpZiBsZW4ocmF3X3RpbWVzdGFtcCkgIT0gNDoKKyAgICAgICAgbWVzc2FnZSA9ICdyZWFjaGVkIEVPRiB3aGlsZSByZWFkaW5nIHRpbWVzdGFtcCBpbiB7IXJ9Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQorICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQorICAgIGVsaWYgbGVuKHJhd19zaXplKSAhPSA0OgorICAgICAgICBtZXNzYWdlID0gJ3JlYWNoZWQgRU9GIHdoaWxlIHJlYWRpbmcgc2l6ZSBvZiBzb3VyY2UgaW4geyFyfScuZm9ybWF0KG5hbWUpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKKyAgICBpZiBzb3VyY2Vfc3RhdHMgaXMgbm90IE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IGludChzb3VyY2Vfc3RhdHNbJ210aW1lJ10pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3RpbWVzdGFtcCkgIT0gc291cmNlX210aW1lOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCAqKmV4Y19kZXRhaWxzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2Vfc2l6ZSA9IHNvdXJjZV9zdGF0c1snc2l6ZSddICYgMHhGRkZGRkZGRgorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmV4Y19kZXRhaWxzKQorICAgIHJldHVybiBkYXRhWzEyOl0KKworCitkZWYgX2NvbXBpbGVfYnl0ZWNvZGUoZGF0YSwgbmFtZT1Ob25lLCBieXRlY29kZV9wYXRoPU5vbmUsIHNvdXJjZV9wYXRoPU5vbmUpOgorICAgICIiIkNvbXBpbGUgYnl0ZWNvZGUgYXMgcmV0dXJuZWQgYnkgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcigpLiIiIgorICAgIGNvZGUgPSBtYXJzaGFsLmxvYWRzKGRhdGEpCisgICAgaWYgaXNpbnN0YW5jZShjb2RlLCBfY29kZV90eXBlKToKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7IXJ9JywgYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgaWYgc291cmNlX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfaW1wLl9maXhfY29fZmlsZW5hbWUoY29kZSwgc291cmNlX3BhdGgpCisgICAgICAgIHJldHVybiBjb2RlCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ05vbi1jb2RlIG9iamVjdCBpbiB7IXJ9Jy5mb3JtYXQoYnl0ZWNvZGVfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQorCitkZWYgX2NvZGVfdG9fYnl0ZWNvZGUoY29kZSwgbXRpbWU9MCwgc291cmNlX3NpemU9MCk6CisgICAgIiIiQ29tcGlsZSBhIGNvZGUgb2JqZWN0IGludG8gYnl0ZWNvZGUgZm9yIHdyaXRpbmcgb3V0IHRvIGEgYnl0ZS1jb21waWxlZAorICAgIGZpbGUuIiIiCisgICAgZGF0YSA9IGJ5dGVhcnJheShNQUdJQ19OVU1CRVIpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhtdGltZSkpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2Vfc2l6ZSkpCisgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlKSkKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyk6CisgICAgIiIiRGVjb2RlIGJ5dGVzIHJlcHJlc2VudGluZyBzb3VyY2UgY29kZSBhbmQgcmV0dXJuIHRoZSBzdHJpbmcuCisKKyAgICBVbml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IGlzIHVzZWQgaW4gdGhlIGRlY29kaW5nLgorICAgICIiIgorICAgIGltcG9ydCB0b2tlbml6ZSAgIyBUbyBhdm9pZCBib290c3RyYXAgaXNzdWVzLgorICAgIHNvdXJjZV9ieXRlc19yZWFkbGluZSA9IF9pby5CeXRlc0lPKHNvdXJjZV9ieXRlcykucmVhZGxpbmUKKyAgICBlbmNvZGluZyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhzb3VyY2VfYnl0ZXNfcmVhZGxpbmUpCisgICAgbmV3bGluZV9kZWNvZGVyID0gX2lvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkKKyAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKIAogCiAjIExvYWRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC02MzYsNyArNzU4LDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChidWlsdC1pbik+Ii5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoYnVpbHQtaW4pPicuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgpAQCAtNjU1LDEzICs3NzcsOCBAQAogICAgIEBfcmVxdWlyZXNfYnVpbHRpbgogICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIGJ1aWx0LWluIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIF9NYW5hZ2VSZWxvYWQoZnVsbG5hbWUpOgogICAgICAgICAgICAgcmV0dXJuIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2J1aWx0aW4sIGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgQF9yZXF1aXJlc19idWlsdGluCkBAIC02OTMsNyArODEwLDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG0pOgotICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAoZnJvemVuKT4iLmZvcm1hdChtLl9fbmFtZV9fKQorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoZnJvemVuKT4nLmZvcm1hdChtLl9fbmFtZV9fKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC03MDYsMTYgKzgyMywxMSBAQAogICAgIEBfcmVxdWlyZXNfZnJvemVuCiAgICAgZGVmIGxvYWRfbW9kdWxlKGNscywgZnVsbG5hbWUpOgogICAgICAgICAiIiJMb2FkIGEgZnJvemVuIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIF9NYW5hZ2VSZWxvYWQoZnVsbG5hbWUpOgogICAgICAgICAgICAgbSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2Zyb3plbiwgZnVsbG5hbWUpCiAgICAgICAgICAgICAjIExldCBvdXIgb3duIG1vZHVsZV9yZXByKCkgbWV0aG9kIHByb2R1Y2UgYSBzdWl0YWJsZSByZXByLgogICAgICAgICAgICAgZGVsIG0uX19maWxlX18KICAgICAgICAgICAgIHJldHVybiBtCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQgYW5kIGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIHJhaXNlCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBAX3JlcXVpcmVzX2Zyb3plbgpAQCAtNzQyLDE4ICs4NTQsMTggQEAKICAgICAiIiIKIAogICAgIFJFR0lTVFJZX0tFWSA9ICgKLSAgICAgICAgIlNvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXHtzeXNfdmVyc2lvbn0iCi0gICAgICAgICJcXE1vZHVsZXNcXHtmdWxsbmFtZX0iKQorICAgICAgICAnU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufScKKyAgICAgICAgJ1xcTW9kdWxlc1xce2Z1bGxuYW1lfScpCiAgICAgUkVHSVNUUllfS0VZX0RFQlVHID0gKAotICAgICAgICAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufSIKLSAgICAgICAgIlxcTW9kdWxlc1xce2Z1bGxuYW1lfVxcRGVidWciKQorICAgICAgICAnU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufScKKyAgICAgICAgJ1xcTW9kdWxlc1xce2Z1bGxuYW1lfVxcRGVidWcnKQogICAgIERFQlVHX0JVSUxEID0gRmFsc2UgICMgQ2hhbmdlZCBpbiBfc2V0dXAoKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9vcGVuX3JlZ2lzdHJ5KGNscywga2V5KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIF93aW5yZWcuT3BlbktleShfd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSLCBrZXkpCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIF93aW5yZWcuT3BlbktleShfd2lucmVnLkhLRVlfTE9DQUxfTUFDSElORSwga2V5KQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC03NjYsOCArODc4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfdmVyc2lvbj1zeXMudmVyc2lvbls6M10pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggY2xzLl9vcGVuX3JlZ2lzdHJ5KGtleSkgYXMgaGtleToKLSAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IF93aW5yZWcuUXVlcnlWYWx1ZShoa2V5LCAiIikKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IF93aW5yZWcuUXVlcnlWYWx1ZShoa2V5LCAnJykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4gZmlsZXBhdGgKIApAQCAtNzc4LDcgKzg5MCw3IEBACiAgICAgICAgIGlmIGZpbGVwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfb3Muc3RhdChmaWxlcGF0aCkKKyAgICAgICAgICAgIF9wYXRoX3N0YXQoZmlsZXBhdGgpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgZm9yIGxvYWRlciwgc3VmZml4ZXMgaW4gX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCk6CkBAIC03OTksNzQgKzkxMSwzMiBAQAogICAgICAgICB0YWlsX25hbWUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMl0KICAgICAgICAgcmV0dXJuIGZpbGVuYW1lX2Jhc2UgPT0gJ19faW5pdF9fJyBhbmQgdGFpbF9uYW1lICE9ICdfX2luaXRfXycKIAotICAgIGRlZiBfYnl0ZXNfZnJvbV9ieXRlY29kZShzZWxmLCBmdWxsbmFtZSwgZGF0YSwgYnl0ZWNvZGVfcGF0aCwgc291cmNlX3N0YXRzKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBtYXJzaGFsbGVkIGJ5dGVzIGZyb20gYnl0ZWNvZGUsIHZlcmlmeWluZyB0aGUgbWFnaWMKLSAgICAgICAgbnVtYmVyLCB0aW1lc3RhbXAgYW5kIHNvdXJjZSBzaXplIGFsb25nIHRoZSB3YXkuCisgICAgZGVmIGluaXRfbW9kdWxlX2F0dHJzKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICIiIlNldCB2YXJpb3VzIGF0dHJpYnV0ZXMgb24gdGhlIG1vZHVsZS4KIAotICAgICAgICBJZiBzb3VyY2Vfc3RhdHMgaXMgTm9uZSB0aGVuIHNraXAgdGhlIHRpbWVzdGFtcCBjaGVjay4KLQorICAgICAgICBFeGVjdXRpb25Mb2FkZXIuaW5pdF9tb2R1bGVfYXR0cnMoKSBpcyB1c2VkIHRvIHNldCBfX2xvYWRlcl9fLAorICAgICAgICBfX3BhY2thZ2VfXywgX19maWxlX18sIGFuZCBvcHRpb25hbGx5IF9fcGF0aF9fLiBUaGUgX19jYWNoZWRfXyBhdHRyaWJ1dGUKKyAgICAgICAgaXMgc2V0IHVzaW5nIGltcC5jYWNoZV9mcm9tX3NvdXJjZSgpIGFuZCBfX2ZpbGVfXy4KICAgICAgICAgIiIiCi0gICAgICAgIG1hZ2ljID0gZGF0YVs6NF0KLSAgICAgICAgcmF3X3RpbWVzdGFtcCA9IGRhdGFbNDo4XQotICAgICAgICByYXdfc2l6ZSA9IGRhdGFbODoxMl0KLSAgICAgICAgaWYgbWFnaWMgIT0gX01BR0lDX0JZVEVTOgotICAgICAgICAgICAgbXNnID0gJ2JhZCBtYWdpYyBudW1iZXIgaW4geyFyfTogeyFyfScuZm9ybWF0KGZ1bGxuYW1lLCBtYWdpYykKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobXNnKQotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgIGVsaWYgbGVuKHJhd190aW1lc3RhbXApICE9IDQ6Ci0gICAgICAgICAgICBtZXNzYWdlID0gJ2JhZCB0aW1lc3RhbXAgaW4ge30nLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCi0gICAgICAgIGVsaWYgbGVuKHJhd19zaXplKSAhPSA0OgotICAgICAgICAgICAgbWVzc2FnZSA9ICdiYWQgc2l6ZSBpbiB7fScuZm9ybWF0KGZ1bGxuYW1lKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKLSAgICAgICAgaWYgc291cmNlX3N0YXRzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IGludChzb3VyY2Vfc3RhdHNbJ210aW1lJ10pCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBfcl9sb25nKHJhd190aW1lc3RhbXApICE9IHNvdXJjZV9tdGltZToKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICdieXRlY29kZSBpcyBzdGFsZSBmb3Ige30nLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCBuYW1lPWZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc291cmNlX3NpemUgPSBzb3VyY2Vfc3RhdHNbJ3NpemUnXSAmIDB4RkZGRkZGRkYKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3NpemUpICE9IHNvdXJjZV9zaXplOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJieXRlY29kZSBpcyBzdGFsZSBmb3Ige30iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICMgQ2FuJ3QgcmV0dXJuIHRoZSBjb2RlIG9iamVjdCBhcyBlcnJvcnMgZnJvbSBtYXJzaGFsIGxvYWRpbmcgbmVlZCB0bwotICAgICAgICAjIHByb3BhZ2F0ZSBldmVuIHdoZW4gc291cmNlIGlzIGF2YWlsYWJsZS4KLSAgICAgICAgcmV0dXJuIGRhdGFbMTI6XQotCi0gICAgQG1vZHVsZV9mb3JfbG9hZGVyCi0gICAgZGVmIF9sb2FkX21vZHVsZShzZWxmLCBtb2R1bGUsICosIHNvdXJjZWxlc3M9RmFsc2UpOgotICAgICAgICAiIiJIZWxwZXIgZm9yIGxvYWRfbW9kdWxlIGFibGUgdG8gaGFuZGxlIGVpdGhlciBzb3VyY2Ugb3Igc291cmNlbGVzcwotICAgICAgICBsb2FkaW5nLiIiIgotICAgICAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5nZXRfY29kZShuYW1lKQotICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzZWxmLmdldF9maWxlbmFtZShuYW1lKQotICAgICAgICBpZiBub3Qgc291cmNlbGVzczoKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmICAjIExvYWRlcgorICAgICAgICBfaW5pdF9wYWNrYWdlX2F0dHJzKHNlbGYsIG1vZHVsZSkgICMgSW5zcGVjdExvYWRlcgorICAgICAgICBfaW5pdF9maWxlX2F0dHJzKHNlbGYsIG1vZHVsZSkgICMgRXhlY3V0aW9uTG9hZGVyCisgICAgICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKTogICMgU291cmNlTG9hZGVyCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBjYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pCiAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IG1vZHVsZS5fX2ZpbGVfXwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBtb2R1bGUuX19maWxlX18KLSAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbmFtZQotICAgICAgICBpZiBzZWxmLmlzX3BhY2thZ2UobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQobW9kdWxlLl9fZmlsZV9fKVswXV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIkxvYWQgdGhlIHNwZWNpZmllZCBtb2R1bGUgaW50byBzeXMubW9kdWxlcyBhbmQgcmV0dXJuIGl0LiIiIgorICAgICAgICB3aXRoIG1vZHVsZV90b19sb2FkKGZ1bGxuYW1lKSBhcyBtb2R1bGU6CisgICAgICAgICAgICBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKyAgICAgICAgICAgIGNvZGUgPSBzZWxmLmdldF9jb2RlKGZ1bGxuYW1lKQorICAgICAgICAgICAgaWYgY29kZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdjYW5ub3QgbG9hZCBtb2R1bGUgeyFyfSB3aGVuIGdldF9jb2RlKCkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5zIE5vbmUnLmZvcm1hdChmdWxsbmFtZSkpCisgICAgICAgICAgICBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKGV4ZWMsIGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUKIAogCiBjbGFzcyBTb3VyY2VMb2FkZXIoX0xvYWRlckJhc2ljcyk6CkBAIC04NzQsOCArOTQ0LDEwIEBACiAgICAgZGVmIHBhdGhfbXRpbWUoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIChhbiBpbnQpIGZvciB0aGUKICAgICAgICAgc3BlY2lmaWVkIHBhdGgsIHdoZXJlIHBhdGggaXMgYSBzdHIuCisKKyAgICAgICAgUmFpc2VzIElPRXJyb3Igd2hlbiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgcmFpc2UgSU9FcnJvcgogCiAgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCByZXR1cm5pbmcgYSBtZXRhZGF0YSBkaWN0IGZvciB0aGUgc3BlY2lmaWVkIHBhdGgKQEAgLTg4Niw2ICs5NTgsNyBAQAogICAgICAgICAtICdzaXplJyAob3B0aW9uYWwpIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KIAogICAgICAgICBJbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QgYWxsb3dzIHRoZSBsb2FkZXIgdG8gcmVhZCBieXRlY29kZSBmaWxlcy4KKyAgICAgICAgUmFpc2VzIElPRXJyb3Igd2hlbiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5wYXRoX210aW1lKHBhdGgpfQogCkBAIC05MDMsMzIgKzk3NiwyNiBAQAogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2Qgd2hpY2ggd3JpdGVzIGRhdGEgKGJ5dGVzKSB0byBhIGZpbGUgcGF0aCAoYSBzdHIpLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgZm9yIHRoZSB3cml0aW5nIG9mIGJ5dGVjb2RlIGZpbGVzLgotCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdExvYWRlci5nZXRfc291cmNlLiIiIgotICAgICAgICBpbXBvcnQgdG9rZW5pemUKICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJzb3VyY2Ugbm90IGF2YWlsYWJsZSB0aHJvdWdoIGdldF9kYXRhKCkiLAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc291cmNlIG5vdCBhdmFpbGFibGUgdGhyb3VnaCBnZXRfZGF0YSgpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpIGZyb20gZXhjCi0gICAgICAgIHJlYWRzb3VyY2UgPSBfaW8uQnl0ZXNJTyhzb3VyY2VfYnl0ZXMpLnJlYWRsaW5lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKHJlYWRzb3VyY2UpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRldGVjdCBlbmNvZGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YwotICAgICAgICBuZXdsaW5lX2RlY29kZXIgPSBfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihOb25lLCBUcnVlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKLSAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRlY29kZSBzb3VyY2UgZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YworICAgICAgICByZXR1cm4gZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpCisKKyAgICBkZWYgc291cmNlX3RvX2NvZGUoc2VsZiwgZGF0YSwgcGF0aCwgKiwgX29wdGltaXplPS0xKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb2RlIG9iamVjdCBjb21waWxlZCBmcm9tIHNvdXJjZS4KKworICAgICAgICBUaGUgJ2RhdGEnIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2JqZWN0IHR5cGUgdGhhdCBjb21waWxlKCkgc3VwcG9ydHMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLCBkYXRhLCBwYXRoLCAnZXhlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUsIG9wdGltaXplPV9vcHRpbWl6ZSkKIAogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X2NvZGUuCkBAIC05NDYsNDUgKzEwMTMsMzQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdCA9IHNlbGYucGF0aF9zdGF0cyhzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc3RbJ210aW1lJ10pCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlc19kYXRhID0gX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Vfc3RhdHM9c3QsIG5hbWU9ZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30gbWF0Y2hlcyB7fScsIGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm91bmQsIF9jb2RlX3R5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbXAuX2ZpeF9jb19maWxlbmFtZShmb3VuZCwgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJOb24tY29kZSBvYmplY3QgaW4ge30iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChieXRlY29kZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoPWJ5dGVjb2RlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGg9c291cmNlX3BhdGgpCiAgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuZ2V0X2RhdGEoc291cmNlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMsIHNvdXJjZV9wYXRoLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlX2J5dGVzLCBzb3VyY2VfcGF0aCkKICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsIHNvdXJjZV9wYXRoKQogICAgICAgICBpZiAobm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGFuZCBieXRlY29kZV9wYXRoIGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgc291cmNlX210aW1lIGlzIG5vdCBOb25lKToKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoX01BR0lDX0JZVEVTKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhsZW4oc291cmNlX2J5dGVzKSkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKKyAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgZGF0YSA9IF9jb2RlX3RvX2J5dGVjb2RlKGNvZGVfb2JqZWN0LCBzb3VyY2VfbXRpbWUsCisgICAgICAgICAgICAgICAgICAgIGxlbihzb3VyY2VfYnl0ZXMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX2J5dGVjb2RlKHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKQogICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3dyb3RlIHshcn0nLCBieXRlY29kZV9wYXRoKQpAQCAtOTkyLDE2ICsxMDQ4LDYgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAogCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgTG9hZGVyLmxvYWRfbW9kdWxlLgotCi0gICAgICAgIFJlcXVpcmVzIEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWUgYW5kIFJlc291cmNlTG9hZGVyLmdldF9kYXRhIHRvIGJlCi0gICAgICAgIGltcGxlbWVudGVkIHRvIGxvYWQgc291cmNlIGNvZGUuIFVzZSBvZiBieXRlY29kZSBpcyBkaWN0YXRlZCBieSB3aGV0aGVyCi0gICAgICAgIGdldF9jb2RlIHVzZXMvd3JpdGVzIGJ5dGVjb2RlLgotCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUpCi0KIAogY2xhc3MgRmlsZUxvYWRlcjoKIApAQCAtMTAzOCwxOCArMTA4NCwxMiBAQAogCiAgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgbWV0YWRhdGEgZm9yIHRoZSBwYXRoLiIiIgotICAgICAgICBzdCA9IF9vcy5zdGF0KHBhdGgpCisgICAgICAgIHN0ID0gX3BhdGhfc3RhdChwYXRoKQogICAgICAgICByZXR1cm4geydtdGltZSc6IHN0LnN0X210aW1lLCAnc2l6ZSc6IHN0LnN0X3NpemV9CiAKICAgICBkZWYgX2NhY2hlX2J5dGVjb2RlKHNlbGYsIHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKToKICAgICAgICAgIyBBZGFwdCBiZXR3ZWVuIHRoZSB0d28gQVBJcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2RlID0gX29zLnN0YXQoc291cmNlX3BhdGgpLnN0X21vZGUKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBtb2RlID0gMG82NjYKLSAgICAgICAgIyBXZSBhbHdheXMgZW5zdXJlIHdyaXRlIGFjY2VzcyBzbyB3ZSBjYW4gdXBkYXRlIGNhY2hlZCBmaWxlcwotICAgICAgICAjIGxhdGVyIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSByZWFkLW9ubHkgb24gV2luZG93cyAoIzYwNzQpCi0gICAgICAgIG1vZGUgfD0gMG8yMDAKKyAgICAgICAgbW9kZSA9IF9jYWxjX21vZGUoc291cmNlX3BhdGgpCiAgICAgICAgIHJldHVybiBzZWxmLnNldF9kYXRhKGJ5dGVjb2RlX3BhdGgsIGRhdGEsIF9tb2RlPW1vZGUpCiAKICAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSwgKiwgX21vZGU9MG82NjYpOgpAQCAtMTA4NSwyMCArMTEyNSwxNSBAQAogCiAgICAgIiIiTG9hZGVyIHdoaWNoIGhhbmRsZXMgc291cmNlbGVzcyBmaWxlIGltcG9ydHMuIiIiCiAKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUsIHNvdXJjZWxlc3M9VHJ1ZSkKKyAgICBkZWYgaW5pdF9tb2R1bGVfYXR0cnMoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgc3VwZXIoKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gbW9kdWxlLl9fZmlsZV9fCiAKICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICBwYXRoID0gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCiAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGJ5dGVzX2RhdGEgPSBzZWxmLl9ieXRlc19mcm9tX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhLCBwYXRoLCBOb25lKQotICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShmb3VuZCwgX2NvZGVfdHlwZSk6Ci0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdjb2RlIG9iamVjdCBmcm9tIHshcn0nLCBwYXRoKQotICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm9uLWNvZGUgb2JqZWN0IGluIHt9Ii5mb3JtYXQocGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPXBhdGgpCisgICAgICAgIGJ5dGVzX2RhdGEgPSBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGRhdGEsIG5hbWU9ZnVsbG5hbWUsIHBhdGg9cGF0aCkKKyAgICAgICAgcmV0dXJuIF9jb21waWxlX2J5dGVjb2RlKGJ5dGVzX2RhdGEsIG5hbWU9ZnVsbG5hbWUsIGJ5dGVjb2RlX3BhdGg9cGF0aCkKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIE5vbmUgYXMgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuIiIiCkBAIC0xMTI2LDE4ICsxMTYxLDEzIEBACiAgICAgQHNldF9sb2FkZXIKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJMb2FkIGFuIGV4dGVuc2lvbiBtb2R1bGUuIiIiCi0gICAgICAgIGlzX3JlbG9hZCA9IGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBfTWFuYWdlUmVsb2FkKGZ1bGxuYW1lKToKICAgICAgICAgICAgIG1vZHVsZSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5sb2FkX2R5bmFtaWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lLCBzZWxmLnBhdGgpCiAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdleHRlbnNpb24gbW9kdWxlIGxvYWRlZCBmcm9tIHshcn0nLCBzZWxmLnBhdGgpCiAgICAgICAgICAgICBpZiBzZWxmLmlzX3BhY2thZ2UoZnVsbG5hbWUpIGFuZCBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgogICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtfcGF0aF9zcGxpdChzZWxmLnBhdGgpWzBdXQogICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpcyBhIHBhY2thZ2UuIiIiCkBAIC0xMTUzLDYgKzExODMsMTEgQEAKICAgICAgICAgIiIiUmV0dXJuIE5vbmUgYXMgZXh0ZW5zaW9uIG1vZHVsZXMgaGF2ZSBubyBzb3VyY2UgY29kZS4iIiIKICAgICAgICAgcmV0dXJuIE5vbmUKIAorICAgIEBfY2hlY2tfbmFtZQorICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlIGFzIGZvdW5kIGJ5IHRoZSBmaW5kZXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKwogCiBjbGFzcyBfTmFtZXNwYWNlUGF0aDoKICAgICAiIiJSZXByZXNlbnRzIGEgbmFtZXNwYWNlIHBhY2thZ2UncyBwYXRoLiAgSXQgdXNlcyB0aGUgbW9kdWxlIG5hbWUKQEAgLTEyMDAsNyArMTIzNSw3IEBACiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcmVjYWxjdWxhdGUoKSkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJfTmFtZXNwYWNlUGF0aCh7IXJ9KSIuZm9ybWF0KHNlbGYuX3BhdGgpCisgICAgICAgIHJldHVybiAnX05hbWVzcGFjZVBhdGgoeyFyfSknLmZvcm1hdChzZWxmLl9wYXRoKQogCiAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKICAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5fcmVjYWxjdWxhdGUoKQpAQCAtMTIxNSwxNCArMTI1MCwyOCBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIG1vZHVsZV9yZXByKGNscywgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuICI8bW9kdWxlICd7fScgKG5hbWVzcGFjZSk+Ii5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAobmFtZXNwYWNlKT4nLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCiAKLSAgICBAbW9kdWxlX2Zvcl9sb2FkZXIKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUoJycsICc8c3RyaW5nPicsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCisKKyAgICBkZWYgaW5pdF9tb2R1bGVfYXR0cnMoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXworCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIG5hbWVzcGFjZSBtb2R1bGUuIiIiCiAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ25hbWVzcGFjZSBtb2R1bGUgbG9hZGVkIHdpdGggcGF0aCB7IXJ9Jywgc2VsZi5fcGF0aCkKLSAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gc2VsZi5fcGF0aAotICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIHdpdGggbW9kdWxlX3RvX2xvYWQoZnVsbG5hbWUpIGFzIG1vZHVsZToKKyAgICAgICAgICAgIHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gc2VsZi5fcGF0aAorICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQogCiAKICMgRmluZGVycyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTEyNjUsNyArMTMxNCw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHBhdGggPT0gJyc6Ci0gICAgICAgICAgICBwYXRoID0gJy4nCisgICAgICAgICAgICBwYXRoID0gX29zLmdldGN3ZCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZpbmRlciA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTEzNTMsNyArMTQwMiw3IEBACiAgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCiAgICAgICAgIHRhaWxfbW9kdWxlID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzJdCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG10aW1lID0gX29zLnN0YXQoc2VsZi5wYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgbXRpbWUgPSBfcGF0aF9zdGF0KHNlbGYucGF0aCBvciBfb3MuZ2V0Y3dkKCkpLnN0X210aW1lCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbXRpbWUgPSAtMQogICAgICAgICBpZiBtdGltZSAhPSBzZWxmLl9wYXRoX210aW1lOgpAQCAtMTM2OSwxNiArMTQxOCwxNSBAQAogICAgICAgICAjIENoZWNrIGlmIHRoZSBtb2R1bGUgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgKGFuZCB0aHVzIGEgcGFja2FnZSkuCiAgICAgICAgIGlmIGNhY2hlX21vZHVsZSBpbiBjYWNoZToKICAgICAgICAgICAgIGJhc2VfcGF0aCA9IF9wYXRoX2pvaW4oc2VsZi5wYXRoLCB0YWlsX21vZHVsZSkKLSAgICAgICAgICAgIGlmIF9wYXRoX2lzZGlyKGJhc2VfcGF0aCk6Ci0gICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGluaXRfZmlsZW5hbWUgPSAnX19pbml0X18nICsgc3VmZml4Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IF9wYXRoX2pvaW4oYmFzZV9wYXRoLCBpbml0X2ZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpLCBbYmFzZV9wYXRoXSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIEEgbmFtZXNwYWNlIHBhY2thZ2UsIHJldHVybiB0aGUgcGF0aCBpZiB3ZSBkb24ndCBhbHNvCi0gICAgICAgICAgICAgICAgICAgICMgIGZpbmQgYSBtb2R1bGUgaW4gdGhlIG5leHQgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gVHJ1ZQorICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6CisgICAgICAgICAgICAgICAgaW5pdF9maWxlbmFtZSA9ICdfX2luaXRfXycgKyBzdWZmaXgKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKGJhc2VfcGF0aCwgaW5pdF9maWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChsb2FkZXIoZnVsbG5hbWUsIGZ1bGxfcGF0aCksIFtiYXNlX3BhdGhdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIElmIGEgbmFtZXNwYWNlIHBhY2thZ2UsIHJldHVybiB0aGUgcGF0aCBpZiB3ZSBkb24ndAorICAgICAgICAgICAgICAgICMgIGZpbmQgYSBtb2R1bGUgaW4gdGhlIG5leHQgc2VjdGlvbi4KKyAgICAgICAgICAgICAgICBpc19uYW1lc3BhY2UgPSBfcGF0aF9pc2RpcihiYXNlX3BhdGgpCiAgICAgICAgICMgQ2hlY2sgZm9yIGEgZmlsZSB3LyBhIHByb3BlciBzdWZmaXggZXhpc3RzLgogICAgICAgICBmb3Igc3VmZml4LCBsb2FkZXIgaW4gc2VsZi5fbG9hZGVyczoKICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IF9wYXRoX2pvaW4oc2VsZi5wYXRoLCB0YWlsX21vZHVsZSArIHN1ZmZpeCkKQEAgLTEzOTUsNyArMTQ0Myw3IEBACiAgICAgICAgICIiIkZpbGwgdGhlIGNhY2hlIG9mIHBvdGVudGlhbCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBmb3IgdGhpcyBkaXJlY3RvcnkuIiIiCiAgICAgICAgIHBhdGggPSBzZWxmLnBhdGgKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29udGVudHMgPSBfb3MubGlzdGRpcihwYXRoKQorICAgICAgICAgICAgY29udGVudHMgPSBfb3MubGlzdGRpcihwYXRoIG9yIF9vcy5nZXRjd2QoKSkKICAgICAgICAgZXhjZXB0IChGaWxlTm90Rm91bmRFcnJvciwgUGVybWlzc2lvbkVycm9yLCBOb3RBRGlyZWN0b3J5RXJyb3IpOgogICAgICAgICAgICAgIyBEaXJlY3RvcnkgaGFzIGVpdGhlciBiZWVuIHJlbW92ZWQsIHR1cm5lZCBpbnRvIGEgZmlsZSwgb3IgbWFkZQogICAgICAgICAgICAgIyB1bnJlYWRhYmxlLgpAQCAtMTQyMCw3ICsxNDY4LDcgQEAKICAgICAgICAgICAgICAgICBsb3dlcl9zdWZmaXhfY29udGVudHMuYWRkKG5ld19uYW1lKQogICAgICAgICAgICAgc2VsZi5fcGF0aF9jYWNoZSA9IGxvd2VyX3N1ZmZpeF9jb250ZW50cwogICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVMpOgotICAgICAgICAgICAgc2VsZi5fcmVsYXhlZF9wYXRoX2NhY2hlID0gc2V0KGZuLmxvd2VyKCkgZm9yIGZuIGluIGNvbnRlbnRzKQorICAgICAgICAgICAgc2VsZi5fcmVsYXhlZF9wYXRoX2NhY2hlID0ge2ZuLmxvd2VyKCkgZm9yIGZuIGluIGNvbnRlbnRzfQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHBhdGhfaG9vayhjbHMsICpsb2FkZXJfZGV0YWlscyk6CkBAIC0xNDM1LDEzICsxNDgzLDEzIEBACiAgICAgICAgIGRlZiBwYXRoX2hvb2tfZm9yX0ZpbGVGaW5kZXIocGF0aCk6CiAgICAgICAgICAgICAiIiJQYXRoIGhvb2sgZm9yIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci4iIiIKICAgICAgICAgICAgIGlmIG5vdCBfcGF0aF9pc2RpcihwYXRoKToKLSAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigib25seSBkaXJlY3RvcmllcyBhcmUgc3VwcG9ydGVkIiwgcGF0aD1wYXRoKQorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdvbmx5IGRpcmVjdG9yaWVzIGFyZSBzdXBwb3J0ZWQnLCBwYXRoPXBhdGgpCiAgICAgICAgICAgICByZXR1cm4gY2xzKHBhdGgsICpsb2FkZXJfZGV0YWlscykKIAogICAgICAgICByZXR1cm4gcGF0aF9ob29rX2Zvcl9GaWxlRmluZGVyCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiRmlsZUZpbmRlciglcikiICUgKHNlbGYucGF0aCwpCisgICAgICAgIHJldHVybiAnRmlsZUZpbmRlcih7IXJ9KScuZm9ybWF0KHNlbGYucGF0aCkKIAogCiAjIEltcG9ydCBpdHNlbGYgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xNDcyLDE1ICsxNTIwLDE5IEBACiAgICAgIiIiRmluZCBhIG1vZHVsZSdzIGxvYWRlci4iIiIKICAgICBpZiBub3Qgc3lzLm1ldGFfcGF0aDoKICAgICAgICAgX3dhcm5pbmdzLndhcm4oJ3N5cy5tZXRhX3BhdGggaXMgZW1wdHknLCBJbXBvcnRXYXJuaW5nKQorICAgIGlzX3JlbG9hZCA9IG5hbWUgaW4gc3lzLm1vZHVsZXMKICAgICBmb3IgZmluZGVyIGluIHN5cy5tZXRhX3BhdGg6CiAgICAgICAgIHdpdGggX0ltcG9ydExvY2tDb250ZXh0KCk6CiAgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKICAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgIyBUaGUgcGFyZW50IGltcG9ydCBtYXkgaGF2ZSBhbHJlYWR5IGltcG9ydGVkIHRoaXMgbW9kdWxlLgotICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICBpZiBpc19yZWxvYWQgb3IgbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0uX19sb2FkZXJfXworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gTm9uZQogCkBAIC0xNDg4LDIxICsxNTQwLDIyIEBACiBkZWYgX3Nhbml0eV9jaGVjayhuYW1lLCBwYWNrYWdlLCBsZXZlbCk6CiAgICAgIiIiVmVyaWZ5IGFyZ3VtZW50cyBhcmUgInNhbmUiLiIiIgogICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIHN0cik6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigibW9kdWxlIG5hbWUgbXVzdCBiZSBzdHIsIG5vdCB7fSIuZm9ybWF0KHR5cGUobmFtZSkpKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ21vZHVsZSBuYW1lIG11c3QgYmUgc3RyLCBub3Qge30nLmZvcm1hdCh0eXBlKG5hbWUpKSkKICAgICBpZiBsZXZlbCA8IDA6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2xldmVsIG11c3QgYmUgPj0gMCcpCiAgICAgaWYgcGFja2FnZToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGFja2FnZSwgc3RyKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiX19wYWNrYWdlX18gbm90IHNldCB0byBhIHN0cmluZyIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ19fcGFja2FnZV9fIG5vdCBzZXQgdG8gYSBzdHJpbmcnKQogICAgICAgICBlbGlmIHBhY2thZ2Ugbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgbXNnID0gKCJQYXJlbnQgbW9kdWxlIHshcn0gbm90IGxvYWRlZCwgY2Fubm90IHBlcmZvcm0gcmVsYXRpdmUgIgotICAgICAgICAgICAgICAgICAgICJpbXBvcnQiKQorICAgICAgICAgICAgbXNnID0gKCdQYXJlbnQgbW9kdWxlIHshcn0gbm90IGxvYWRlZCwgY2Fubm90IHBlcmZvcm0gcmVsYXRpdmUgJworICAgICAgICAgICAgICAgICAgICdpbXBvcnQnKQogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXJyb3IobXNnLmZvcm1hdChwYWNrYWdlKSkKICAgICBpZiBub3QgbmFtZSBhbmQgbGV2ZWwgPT0gMDoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRW1wdHkgbW9kdWxlIG5hbWUiKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFbXB0eSBtb2R1bGUgbmFtZScpCiAKIAotX0VSUl9NU0cgPSAnTm8gbW9kdWxlIG5hbWVkIHshcn0nCitfRVJSX01TR19QUkVGSVggPSAnTm8gbW9kdWxlIG5hbWVkICcKK19FUlJfTVNHID0gX0VSUl9NU0dfUFJFRklYICsgJ3shcn0nCiAKIGRlZiBfZmluZF9hbmRfbG9hZF91bmxvY2tlZChuYW1lLCBpbXBvcnRfKToKICAgICBwYXRoID0gTm9uZQpAQCAtMTUyMiwxMSArMTU3NSw3IEBACiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKICAgICBsb2FkZXIgPSBfZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKICAgICBpZiBsb2FkZXIgaXMgTm9uZToKLSAgICAgICAgZXhjID0gSW1wb3J0RXJyb3IoX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCi0gICAgICAgICMgVE9ETyhicmV0dCk6IHN3aXRjaCB0byBhIHByb3BlciBNb2R1bGVOb3RGb3VuZCBleGNlcHRpb24gaW4gUHl0aG9uCi0gICAgICAgICMgMy40LgotICAgICAgICBleGMuX25vdF9mb3VuZCA9IFRydWUKLSAgICAgICAgcmFpc2UgZXhjCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQogICAgIGVsaWYgbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgICMgVGhlIHBhcmVudCBpbXBvcnQgbWF5IGhhdmUgYWxyZWFkeSBpbXBvcnRlZCB0aGlzIG1vZHVsZS4KICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCkBAIC0xNTQ2LDcgKzE1OTUsNyBAQAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgIyBTZXQgbG9hZGVyIGlmIG5lZWQgYmUuCi0gICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpOgorICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKQEAgLTE1ODUsOCArMTYzNCw4IEBACiAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KICAgICBpZiBtb2R1bGUgaXMgTm9uZToKICAgICAgICAgX2ltcC5yZWxlYXNlX2xvY2soKQotICAgICAgICBtZXNzYWdlID0gKCJpbXBvcnQgb2Yge30gaGFsdGVkOyAiCi0gICAgICAgICAgICAgICAgICAgICJOb25lIGluIHN5cy5tb2R1bGVzIi5mb3JtYXQobmFtZSkpCisgICAgICAgIG1lc3NhZ2UgPSAoJ2ltcG9ydCBvZiB7fSBoYWx0ZWQ7ICcKKyAgICAgICAgICAgICAgICAgICAnTm9uZSBpbiBzeXMubW9kdWxlcycuZm9ybWF0KG5hbWUpKQogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCBuYW1lPW5hbWUpCiAgICAgX2xvY2tfdW5sb2NrX21vZHVsZShuYW1lKQogICAgIHJldHVybiBtb2R1bGUKQEAgLTE2MTYsOSArMTY2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZGljdGF0ZXMgd2UgaWdub3JlIGZhaWxlZAogICAgICAgICAgICAgICAgICAgICAjIGltcG9ydHMgdHJpZ2dlcmVkIGJ5IGZyb21saXN0IGZvciBtb2R1bGVzIHRoYXQgZG9uJ3QKICAgICAgICAgICAgICAgICAgICAgIyBleGlzdC4KLSAgICAgICAgICAgICAgICAgICAgIyBUT0RPKGJyZXR0KTogSW4gUHl0aG9uIDMuNCwgaGF2ZSBpbXBvcnQgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgIyAgIE1vZHVsZU5vdEZvdW5kIGFuZCBjYXRjaCB0aGF0LgotICAgICAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKGV4YywgJ19ub3RfZm91bmQnLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIHN0cihleGMpLnN0YXJ0c3dpdGgoX0VSUl9NU0dfUFJFRklYKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4Yy5uYW1lID09IGZyb21fbmFtZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICByYWlzZQpAQCAtMTcwNyw3ICsxNzU0LDcgQEAKICAgICBtb2R1bGVfdHlwZSA9IHR5cGUoc3lzKQogICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIG1vZHVsZV90eXBlKToKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKToKKyAgICAgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CiAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gQnVpbHRpbkltcG9ydGVyCiAgICAgICAgICAgICAgICAgZWxpZiBfaW1wLmlzX2Zyb3plbihuYW1lKToKQEAgLTE3MjEsNyArMTc2OCw3IEBACiAgICAgICAgICAgICBidWlsdGluX21vZHVsZSA9IHN5cy5tb2R1bGVzW2J1aWx0aW5fbmFtZV0KICAgICAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgYnVpbHRpbl9uYW1lLCBidWlsdGluX21vZHVsZSkKIAotICAgIG9zX2RldGFpbHMgPSAoJ3Bvc2l4JywgWycvJ10pLCAoJ250JywgWydcXCcsICcvJ10pLCAoJ29zMicsIFsnXFwnLCAnLyddKQorICAgIG9zX2RldGFpbHMgPSAoJ3Bvc2l4JywgWycvJ10pLCAoJ250JywgWydcXCcsICcvJ10pCiAgICAgZm9yIGJ1aWx0aW5fb3MsIHBhdGhfc2VwYXJhdG9ycyBpbiBvc19kZXRhaWxzOgogICAgICAgICAjIEFzc3VtcHRpb24gbWFkZSBpbiBfcGF0aF9qb2luKCkKICAgICAgICAgYXNzZXJ0IGFsbChsZW4oc2VwKSA9PSAxIGZvciBzZXAgaW4gcGF0aF9zZXBhcmF0b3JzKQpAQCAtMTczMiw5ICsxNzc5LDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvc19tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoYnVpbHRpbl9vcykKLSAgICAgICAgICAgICAgICAjIFRPRE86IHJpcCBvdXQgb3MyIGNvZGUgYWZ0ZXIgMy4zIGlzIHJlbGVhc2VkIGFzIHBlciBQRVAgMTEKLSAgICAgICAgICAgICAgICBpZiBidWlsdGluX29zID09ICdvczInIGFuZCAnRU1YIEdDQycgaW4gc3lzLnZlcnNpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhdGhfc2VwID0gcGF0aF9zZXBhcmF0b3JzWzFdCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtMTc1Niw3ICsxODAwLDcgQEAKICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3RocmVhZCcsIHRocmVhZF9tb2R1bGUpCiAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193ZWFrcmVmJywgd2Vha3JlZl9tb2R1bGUpCiAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsIHNldChwYXRoX3NlcGFyYXRvcnMpKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdwYXRoX3NlcGFyYXRvcnMnLCAnJy5qb2luKHBhdGhfc2VwYXJhdG9ycykpCiAgICAgIyBDb25zdGFudHMKICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3JlbGF4X2Nhc2UnLCBfbWFrZV9yZWxheF9jYXNlKCkpCiAgICAgRVhURU5TSU9OX1NVRkZJWEVTLmV4dGVuZChfaW1wLmV4dGVuc2lvbl9zdWZmaXhlcygpKQpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9hYmMucHkgYi9MaWIvaW1wb3J0bGliL2FiYy5weQppbmRleCAzODc1NjdhLi4wMWRlNjdkIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL2FiYy5weQorKysgYi9MaWIvaW1wb3J0bGliL2FiYy5weQpAQCAtOCwxMSArOCw2IEBACiAgICAgICAgIHJhaXNlCiAgICAgX2Zyb3plbl9pbXBvcnRsaWIgPSBOb25lCiBpbXBvcnQgYWJjCi1pbXBvcnQgaW1wCi1pbXBvcnQgbWFyc2hhbAotaW1wb3J0IHN5cwotaW1wb3J0IHRva2VuaXplCi1pbXBvcnQgd2FybmluZ3MKIAogCiBkZWYgX3JlZ2lzdGVyKGFic3RyYWN0X2NscywgKmNsYXNzZXMpOgpAQCAtMzcsOSArMzIsOCBAQAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKICAgICAgICAgIiIiQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgc2hvdWxkIGZpbmQgYSBtb2R1bGUuCiAgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQgdGhlIG9wdGlvbmFsIHBhdGggaXMgYSBzdHIgb3IgTm9uZS4KLSAgICAgICAgUmV0dXJucyBhIExvYWRlciBvYmplY3QuCisgICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0IG9yIE5vbmUuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogY2xhc3MgTWV0YVBhdGhGaW5kZXIoRmluZGVyKToKQEAgLTQ5LDE2ICs0MywxNCBAQAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2gsIHdoZW4gaW1wbGVtZW50ZWQsIHNob3VsZCBmaW5kIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIgYW5kIHRoZSBwYXRoIGlzIGEgc3RyIG9yIE5vbmUuCi0gICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0LgorICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIgYW5kIHRoZSBwYXRoIGlzIGEgbGlzdCBvZiBzdHJpbmdzIG9yIE5vbmUuCisgICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0IG9yIE5vbmUuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKICAgICBkZWYgaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CiAgICAgICAgICIiIkFuIG9wdGlvbmFsIG1ldGhvZCBmb3IgY2xlYXJpbmcgdGhlIGZpbmRlcidzIGNhY2hlLCBpZiBhbnkuCiAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogX3JlZ2lzdGVyKE1ldGFQYXRoRmluZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgbWFjaGluZXJ5LlBhdGhGaW5kZXIsIG1hY2hpbmVyeS5XaW5kb3dzUmVnaXN0cnlGaW5kZXIpCkBAIC03MCwxMyArNjIsMTQgQEAKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2gsIHdoZW4gaW1wbGVtZW50ZWQsIHJldHVybnMgYSBtb2R1bGUgbG9hZGVyLgorICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2gsIHdoZW4gaW1wbGVtZW50ZWQsIHJldHVybnMgYSBtb2R1bGUgbG9hZGVyIG9yCisgICAgICAgIGEgcG9zc2libGUgcGFydCBvZiBhIG5hbWVzcGFjZS4KICAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIDItdHVwbGUgb2YgKExvYWRlciwgcG9ydGlvbikgd2hlcmUKICAgICAgICAgcG9ydGlvbiBpcyBhIHNlcXVlbmNlIG9mIGZpbGUgc3lzdGVtIGxvY2F0aW9ucyBjb250cmlidXRpbmcgdG8gcGFydCBvZgotICAgICAgICBhIG5hbWVzcGFjZSBwYWNrYWdlLiAgVGhlIHNlcXVlbmNlIG1heSBiZSBlbXB0eSBhbmQgdGhlIGxvYWRlciBtYXkgYmUKKyAgICAgICAgYSBuYW1lc3BhY2UgcGFja2FnZS4gVGhlIHNlcXVlbmNlIG1heSBiZSBlbXB0eSBhbmQgdGhlIGxvYWRlciBtYXkgYmUKICAgICAgICAgTm9uZS4KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgcmV0dXJuIE5vbmUsIFtdCiAKICAgICBmaW5kX21vZHVsZSA9IF9ib290c3RyYXAuX2ZpbmRfbW9kdWxlX3NoaW0KIApAQCAtODQsMjYgKzc3LDQwIEBACiAgICAgICAgICIiIkFuIG9wdGlvbmFsIG1ldGhvZCBmb3IgY2xlYXJpbmcgdGhlIGZpbmRlcidzIGNhY2hlLCBpZiBhbnkuCiAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgUGF0aEZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKIF9yZWdpc3RlcihQYXRoRW50cnlGaW5kZXIsIG1hY2hpbmVyeS5GaWxlRmluZGVyKQogCiAKIGNsYXNzIExvYWRlcihtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgogCi0gICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgaW1wb3J0IGxvYWRlcnMuIiIiCisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgaW1wb3J0IGxvYWRlcnMuCisKKyAgICBUaGUgb3B0aW9uYWwgbWV0aG9kIG1vZHVsZV9yZXByKG1vZHVsZSkgbWF5IGJlIGRlZmluZWQgdG8gcHJvdmlkZSBhCisgICAgcmVwciBmb3IgYSBtb2R1bGUgd2hlbiBhcHByb3ByaWF0ZSAoc2VlIFBFUCA0MjApLiBUaGUgX19yZXByX18oKSBtZXRob2Qgb24KKyAgICB0aGUgbW9kdWxlIHR5cGUgd2lsbCB1c2UgdGhlIG1ldGhvZCBhcyBhcHByb3ByaWF0ZS4KKworICAgICIiIgogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCBsb2FkIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuIiIiCisgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4KKworICAgICAgICBJbXBvcnRFcnJvciBpcyByYWlzZWQgb24gZmFpbHVyZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbW9kdWxlJ3MgcmVwci4KKworICAgICAgICBVc2VkIGJ5IHRoZSBtb2R1bGUgdHlwZSB3aGVuIHRoZSBtZXRob2QgZG9lcyBub3QgcmFpc2UKKyAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvci4KKyAgICAgICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKLSAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwci4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgIGRlZiBpbml0X21vZHVsZV9hdHRycyhzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJTZXQgdGhlIG1vZHVsZSdzIF9fbG9hZGVyX18gYXR0cmlidXRlLiIiIgorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKIAogCiBjbGFzcyBSZXNvdXJjZUxvYWRlcihMb2FkZXIpOgpAQCAtMTE5LDcgKzEyNiw3IEBACiAgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHRoZSBieXRlcyBmb3IKICAgICAgICAgdGhlIHNwZWNpZmllZCBwYXRoLiAgVGhlIHBhdGggbXVzdCBiZSBhIHN0ci4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICByYWlzZSBJT0Vycm9yCiAKIAogY2xhc3MgSW5zcGVjdExvYWRlcihMb2FkZXIpOgpAQCAtMTM0LDIzICsxNDEsNTQgQEAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHdoZXRoZXIgdGhlCi0gICAgICAgIG1vZHVsZSBpcyBhIHBhY2thZ2UuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgYm9vbC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBtb2R1bGUgaXMgYSBwYWNrYWdlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIGJvb2wuCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgIFJhaXNlcyBJbXBvcnRFcnJvciBpcyB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHRoZSBjb2RlIG9iamVjdAotICAgICAgICBmb3IgdGhlIG1vZHVsZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSB0eXBlcy5Db2RlVHlwZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAiIiJNZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgY29kZSBvYmplY3QgZm9yIHRoZSBtb2R1bGUuCisKKyAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHR5cGVzLkNvZGVUeXBlIGlmIHBvc3NpYmxlLCBlbHNlCisgICAgICAgIHJldHVybnMgTm9uZSBpZiBhIGNvZGUgb2JqZWN0IGRvZXMgbm90IG1ha2Ugc2Vuc2UKKyAgICAgICAgKGUuZy4gYnVpbHQtaW4gbW9kdWxlKS4gUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlCisgICAgICAgIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgc291cmNlID0gc2VsZi5nZXRfc291cmNlKGZ1bGxuYW1lKQorICAgICAgICBpZiBzb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZV90b19jb2RlKHNvdXJjZSkKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCBzaG91bGQgcmV0dXJuIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlCi0gICAgICAgIG1vZHVsZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBzdHIuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgbW9kdWxlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHN0ci4KKworICAgICAgICBSYWlzZXMgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorCisgICAgZGVmIHNvdXJjZV90b19jb2RlKHNlbGYsIGRhdGEsIHBhdGg9JzxzdHJpbmc+Jyk6CisgICAgICAgICIiIkNvbXBpbGUgJ2RhdGEnIGludG8gYSBjb2RlIG9iamVjdC4KKworICAgICAgICBUaGUgJ2RhdGEnIGFyZ3VtZW50IGNhbiBiZSBhbnl0aGluZyB0aGF0IGNvbXBpbGUoKSBjYW4gaGFuZGxlLiBUaGUncGF0aCcKKyAgICAgICAgYXJndW1lbnQgc2hvdWxkIGJlIHdoZXJlIHRoZSBkYXRhIHdhcyByZXRyaWV2ZWQgKHdoZW4gYXBwbGljYWJsZSkuIiIiCisgICAgICAgIHJldHVybiBjb21waWxlKGRhdGEsIHBhdGgsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCisKKyAgICBkZWYgaW5pdF9tb2R1bGVfYXR0cnMoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgX19sb2FkZXJfXyBhbmQgX19wYWNrYWdlX18gYXR0cmlidXRlcyBvZiB0aGUgbW9kdWxlLgorCisgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgaXMgZ2xlYW5lZCBmcm9tIG1vZHVsZS5fX25hbWVfXy4gVGhlIF9fcGFja2FnZV9fCisgICAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgYmFzZWQgb24gc2VsZi5pc19wYWNrYWdlKCkuCisgICAgICAgICIiIgorICAgICAgICBzdXBlcigpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKyAgICAgICAgX2Jvb3RzdHJhcC5faW5pdF9wYWNrYWdlX2F0dHJzKHNlbGYsIG1vZHVsZSkKKworICAgIGxvYWRfbW9kdWxlID0gX2Jvb3RzdHJhcC5fTG9hZGVyQmFzaWNzLmxvYWRfbW9kdWxlCiAKIF9yZWdpc3RlcihJbnNwZWN0TG9hZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKKyAgICAgICAgICBfYm9vdHN0cmFwLk5hbWVzcGFjZUxvYWRlcikKIAogCiBjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5zcGVjdExvYWRlcik6CkBAIC0xNjUsOCArMjAzLDQxIEBACiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgdGhhdCBfX2ZpbGVfXyBpcyB0byBiZQotICAgICAgICBzZXQgdG8uIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgc2V0IHRvLgorCisgICAgICAgIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJNZXRob2QgdG8gcmV0dXJuIHRoZSBjb2RlIG9iamVjdCBmb3IgZnVsbG5hbWUuCisKKyAgICAgICAgU2hvdWxkIHJldHVybiBOb25lIGlmIG5vdCBhcHBsaWNhYmxlIChlLmcuIGJ1aWx0LWluIG1vZHVsZSkuCisgICAgICAgIFJhaXNlIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgc291cmNlID0gc2VsZi5nZXRfc291cmNlKGZ1bGxuYW1lKQorICAgICAgICBpZiBzb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlLCBwYXRoKQorCisgICAgZGVmIGluaXRfbW9kdWxlX2F0dHJzKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSdzIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBtb2R1bGUncyBuYW1lIGhhcyBiZWVuIHNldCBvbiBtb2R1bGUuX19uYW1lX18uCisgICAgICAgIEl0IGlzIGFsc28gYXNzdW1lZCB0aGF0IGFueSBwYXRoIHJldHVybmVkIGJ5IHNlbGYuZ2V0X2ZpbGVuYW1lKCkgdXNlcworICAgICAgICAob25lIG9mKSB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHBhdGggc2VwYXJhdG9yKHMpIHRvIHNlcGFyYXRlIGZpbGVuYW1lcworICAgICAgICBmcm9tIGRpcmVjdG9yaWVzIGluIG9yZGVyIHRvIHNldCBfX3BhdGhfXyBpbnRlbGxpZ2VudGx5LgorICAgICAgICBJbnNwZWN0TG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzKCkgc2V0cyBfX2xvYWRlcl9fIGFuZCBfX3BhY2thZ2VfXy4KKyAgICAgICAgIiIiCisgICAgICAgIHN1cGVyKCkuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorICAgICAgICBfYm9vdHN0cmFwLl9pbml0X2ZpbGVfYXR0cnMoc2VsZiwgbW9kdWxlKQorCitfcmVnaXN0ZXIoRXhlY3V0aW9uTG9hZGVyLCBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKIAogCiBjbGFzcyBGaWxlTG9hZGVyKF9ib290c3RyYXAuRmlsZUxvYWRlciwgUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlcik6CkBAIC0xOTgsNyArMjY5LDcgQEAKICAgICBkZWYgcGF0aF9tdGltZShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSAoaW50KSBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHBhdGggKHN0cikuIiIiCiAgICAgICAgIGlmIHNlbGYucGF0aF9zdGF0cy5fX2Z1bmNfXyBpcyBTb3VyY2VMb2FkZXIucGF0aF9zdGF0czoKLSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKICAgICAgICAgcmV0dXJuIGludChzZWxmLnBhdGhfc3RhdHMocGF0aClbJ210aW1lJ10pCiAKICAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKQEAgLTIwOSw3ICsyODAsNyBAQAogICAgICAgICAtICdzaXplJyAob3B0aW9uYWwpIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYucGF0aF9tdGltZS5fX2Z1bmNfXyBpcyBTb3VyY2VMb2FkZXIucGF0aF9tdGltZToKLSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnBhdGhfbXRpbWUocGF0aCl9CiAKICAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6CkBAIC0yMjAsMTg1ICsyOTEsNiBAQAogICAgICAgICBBbnkgbmVlZGVkIGludGVybWVkaWFyeSBkaXJlY3RvcmllcyBhcmUgdG8gYmUgY3JlYXRlZC4gSWYgZm9yIHNvbWUKICAgICAgICAgcmVhc29uIHRoZSBmaWxlIGNhbm5vdCBiZSB3cml0dGVuIGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMsIGZhaWwKICAgICAgICAgc2lsZW50bHkuCi0KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogX3JlZ2lzdGVyKFNvdXJjZUxvYWRlciwgbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCi0KLWNsYXNzIFB5TG9hZGVyKFNvdXJjZUxvYWRlcik6Ci0KLSAgICAiIiJJbXBsZW1lbnQgdGhlIGRlcHJlY2F0ZWQgUHlMb2FkZXIgQUJDIGluIHRlcm1zIG9mIFNvdXJjZUxvYWRlci4KLQotICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCEgSXQgaXMgc2xhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjQuCi0gICAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjEgaXMgbm90IG5lZWRlZCB0aGVuIGltcGxlbWVudCB0aGUKLSAgICBTb3VyY2VMb2FkZXIgQUJDIGluc3RlYWQgb2YgdGhpcyBjbGFzcy4gSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzCi0gICAgbmVlZGVkLCB0aGVuIHVzZSB0aGUgZm9sbG93aW5nIGlkaW9tIHRvIGhhdmUgYSBzaW5nbGUgY2xhc3MgdGhhdCBpcwotICAgIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHM6OgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgU291cmNlTG9hZGVyCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgUHlMb2FkZXIgYXMgU291cmNlTG9hZGVyCi0KLQotICAgICAgICBjbGFzcyBDdXN0b21Mb2FkZXIoU291cmNlTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICMgSW1wbGVtZW50IC4uLgotCi0gICAgICAgICAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICcnJ0ltcGxlbWVudCBzb3VyY2VfcGF0aCBpbiB0ZXJtcyBvZiBnZXRfZmlsZW5hbWUuJycnCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJwotCi0gICAgIiIiCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiAgQWNjZXB0cyBhIHN0ciBtb2R1bGUgbmFtZSBhbmQgcmV0dXJucyB0aGUgcGF0aCB0bwotICAgICAgICB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBtb2R1bGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJJbXBsZW1lbnQgZ2V0X2ZpbGVuYW1lIGluIHRlcm1zIG9mIHNvdXJjZV9wYXRoLgotCi0gICAgICAgIEFzIGdldF9maWxlbmFtZSBzaG91bGQgb25seSByZXR1cm4gYSBzb3VyY2UgZmlsZSBwYXRoIHRoZXJlIGlzIG5vCi0gICAgICAgIGNoYW5jZSBvZiB0aGUgcGF0aCBub3QgZXhpc3RpbmcgYnV0IGxvYWRpbmcgc3RpbGwgYmVpbmcgcG9zc2libGUsIHNvCi0gICAgICAgIEltcG9ydEVycm9yIHNob3VsZCBwcm9wYWdhdGUgaW5zdGVhZCBvZiBiZWluZyB0dXJuZWQgaW50byByZXR1cm5pbmcKLSAgICAgICAgTm9uZS4KLQotICAgICAgICAiIiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiaW1wb3J0bGliLmFiYy5QeUxvYWRlciBpcyBkZXByZWNhdGVkIGFuZCBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy40OyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBTb3VyY2VMb2FkZXIgaW5zdGVhZC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWUgdGhlIGltcG9ydGxpYiBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byBiZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG5hbWU9ZnVsbG5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aAotCi0KLWNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyKToKLQotICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgdG8gYXNzaXN0IGluIGxvYWRpbmcgc291cmNlIGFuZCBieXRlY29kZSBieQotICAgIHJlcXVpcmluZyBvbmx5IGJhY2stZW5kIHN0b3JhZ2UgbWV0aG9kcyB0byBiZSBpbXBsZW1lbnRlZC4KLQotICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCEgUmVtb3ZhbCBpcyBzbGF0ZWQgZm9yIFB5dGhvbiAzLjQuIEltcGxlbWVudAotICAgIHRoZSBTb3VyY2VMb2FkZXIgQUJDIGluc3RlYWQuIElmIFB5dGhvbiAzLjEgY29tcGF0aWJpbGl0eSBpcyBuZWVkZWQsIHNlZQotICAgIFB5TG9hZGVyLgotCi0gICAgVGhlIG1ldGhvZHMgZ2V0X2NvZGUsIGdldF9zb3VyY2UsIGFuZCBsb2FkX21vZHVsZSBhcmUgaW1wbGVtZW50ZWQgZm9yIHRoZQotICAgIHVzZXIuCi0KLSAgICAiIiIKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHNvdXJjZSBvciBieXRlY29kZSBmaWxlIHBhdGguIiIiCi0gICAgICAgIHBhdGggPSBzZWxmLnNvdXJjZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLSAgICAgICAgcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJubyBzb3VyY2Ugb3IgYnl0ZWNvZGUgcGF0aCBhdmFpbGFibGUgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiezAhcn0iLmZvcm1hdChmdWxsbmFtZSksIG5hbWU9ZnVsbG5hbWUpCi0KLSAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJHZXQgYSBjb2RlIG9iamVjdCBmcm9tIHNvdXJjZSBvciBieXRlY29kZS4iIiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBpcyBkZXByZWNhdGVkIGFuZCBzbGF0ZWQgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZhbCBpbiBQeXRob24gMy40OyB1c2UgU291cmNlTG9hZGVyIGluc3RlYWQuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkLCBzZWUgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF0ZXN0IGRvY3VtZW50YXRpb24gZm9yIFB5TG9hZGVyLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBzZWxmLnNvdXJjZV9tdGltZShmdWxsbmFtZSkKLSAgICAgICAgIyBUcnkgdG8gdXNlIGJ5dGVjb2RlIGlmIGl0IGlzIGF2YWlsYWJsZS4KLSAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgYnl0ZWNvZGVfcGF0aDoKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWFnaWMgPSBkYXRhWzo0XQotICAgICAgICAgICAgICAgIGlmIGxlbihtYWdpYykgPCA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbWFnaWMgbnVtYmVyIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICAgICAgICAgICAgICBpZiBsZW4ocmF3X3RpbWVzdGFtcCkgPCA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiYmFkIHRpbWVzdGFtcCBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICBweWNfdGltZXN0YW1wID0gX2Jvb3RzdHJhcC5fcl9sb25nKHJhd190aW1lc3RhbXApCi0gICAgICAgICAgICAgICAgcmF3X3NvdXJjZV9zaXplID0gZGF0YVs4OjEyXQotICAgICAgICAgICAgICAgIGlmIGxlbihyYXdfc291cmNlX3NpemUpICE9IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJiYWQgZmlsZSBzaXplIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgICMgU291cmNlIHNpemUgaXMgdW51c2VkIGFzIHRoZSBBQkMgZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0bwotICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzaXplIG9mIHRoZSBzb3VyY2UgYWhlYWQgb2YgcmVhZGluZyBpdC4KLSAgICAgICAgICAgICAgICBieXRlY29kZSA9IGRhdGFbMTI6XQotICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIG1hZ2ljIG51bWJlciBpcyB2YWxpZC4KLSAgICAgICAgICAgICAgICBpZiBpbXAuZ2V0X21hZ2ljKCkgIT0gbWFnaWM6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBtYWdpYyBudW1iZXIgaW4ge30iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgYnl0ZWNvZGUgaXMgbm90IHN0YWxlIChvbmx5IG1hdHRlcnMgd2hlbgotICAgICAgICAgICAgICAgICMgdGhlcmUgaXMgc291cmNlIHRvIGZhbGwgYmFjayBvbi4KLSAgICAgICAgICAgICAgICBpZiBzb3VyY2VfdGltZXN0YW1wOgotICAgICAgICAgICAgICAgICAgICBpZiBweWNfdGltZXN0YW1wIDwgc291cmNlX3RpbWVzdGFtcDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJieXRlY29kZSBpcyBzdGFsZSIsIG5hbWU9ZnVsbG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgIyBJZiBzb3VyY2UgaXMgYXZhaWxhYmxlIGdpdmUgaXQgYSBzaG90LgotICAgICAgICAgICAgICAgIGlmIHNvdXJjZV90aW1lc3RhbXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIEJ5dGVjb2RlIHNlZW1zIGZpbmUsIHNvIHRyeSB0byB1c2UgaXQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWwubG9hZHMoYnl0ZWNvZGUpCi0gICAgICAgIGVsaWYgc291cmNlX3RpbWVzdGFtcCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm5vIHNvdXJjZSBvciBieXRlY29kZSBhdmFpbGFibGUgdG8gY3JlYXRlIGNvZGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBmb3IgezAhcn0iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQotICAgICAgICAjIFVzZSB0aGUgc291cmNlLgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHNvdXJjZV9wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImEgc291cmNlIHBhdGggbXVzdCBleGlzdCB0byBsb2FkIHswfSIuZm9ybWF0KGZ1bGxuYW1lKQotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1mdWxsbmFtZSkKLSAgICAgICAgc291cmNlID0gc2VsZi5nZXRfZGF0YShzb3VyY2VfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNvdXJjZSwgc291cmNlX3BhdGgsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCi0gICAgICAgICMgR2VuZXJhdGUgYnl0ZWNvZGUgYW5kIHdyaXRlIGl0IG91dC4KLSAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfYm9vdHN0cmFwLl93X2xvbmcoc291cmNlX3RpbWVzdGFtcCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfYm9vdHN0cmFwLl93X2xvbmcobGVuKHNvdXJjZSkgJiAweEZGRkZGRkZGKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICAgICAgc2VsZi53cml0ZV9ieXRlY29kZShmdWxsbmFtZSwgZGF0YSkKLSAgICAgICAgcmV0dXJuIGNvZGVfb2JqZWN0Ci0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHNvdXJjZV9tdGltZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gQWNjZXB0cyBhIHN0ciBmaWxlbmFtZSBhbmQgcmV0dXJucyBhbiBpbnQKLSAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBzb3VyY2Ugb2YgdGhlIG1vZHVsZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBieXRlY29kZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiBBY2NlcHRzIGEgc3RyIGZpbGVuYW1lIGFuZCByZXR1cm5zIHRoZSBzdHIgcGF0aG5hbWUKLSAgICAgICAgdG8gdGhlIGJ5dGVjb2RlIGZvciB0aGUgbW9kdWxlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHdyaXRlX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBieXRlY29kZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIGJ5dGVzIG9iamVjdAotICAgICAgICByZXByZXNlbnRpbmcgdGhlIGJ5dGVjb2RlIGZvciB0aGUgbW9kdWxlLiAgUmV0dXJucyBhIGJvb2xlYW4KLSAgICAgICAgcmVwcmVzZW50aW5nIHdoZXRoZXIgdGhlIGJ5dGVjb2RlIHdhcyB3cml0dGVuIG9yIG5vdC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi91dGlsLnB5IGIvTGliL2ltcG9ydGxpYi91dGlsLnB5CmluZGV4IDEzMTY0MzcuLjc3MjdmOWQgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdXRpbC5weQorKysgYi9MaWIvaW1wb3J0bGliL3V0aWwucHkKQEAgLTEsMTAgKzEsMTcgQEAKICIiIlV0aWxpdHkgY29kZSBmb3IgY29uc3RydWN0aW5nIGltcG9ydGVycywgZXRjLiIiIgogCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBtb2R1bGVfZm9yX2xvYWRlcgorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgTUFHSUNfTlVNQkVSCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgZGVjb2RlX3NvdXJjZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgbW9kdWxlX3RvX2xvYWQKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IHNldF9sb2FkZXIKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IHNldF9wYWNrYWdlCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgX3Jlc29sdmVfbmFtZQogCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgd2FybmluZ3MKKwogCiBkZWYgcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpOgogICAgICIiIlJlc29sdmUgYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSB0byBhbiBhYnNvbHV0ZSBvbmUuIiIiCkBAIC0xOSwzICsyNiw0NCBAQAogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgbGV2ZWwgKz0gMQogICAgIHJldHVybiBfcmVzb2x2ZV9uYW1lKG5hbWVbbGV2ZWw6XSwgcGFja2FnZSwgbGV2ZWwpCisKKworZGVmIG1vZHVsZV9mb3JfbG9hZGVyKGZ4bik6CisgICAgIiIiRGVjb3JhdG9yIHRvIGhhbmRsZSBzZWxlY3RpbmcgdGhlIHByb3BlciBtb2R1bGUgZm9yIGxvYWRlcnMuCisKKyAgICBUaGUgZGVjb3JhdGVkIGZ1bmN0aW9uIGlzIHBhc3NlZCB0aGUgbW9kdWxlIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBtb2R1bGUKKyAgICBuYW1lLiBUaGUgbW9kdWxlIHBhc3NlZCBpbiB0byB0aGUgZnVuY3Rpb24gaXMgZWl0aGVyIGZyb20gc3lzLm1vZHVsZXMgaWYKKyAgICBpdCBhbHJlYWR5IGV4aXN0cyBvciBpcyBhIG5ldyBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaXMgbmV3LCB0aGVuIF9fbmFtZV9fCisgICAgaXMgc2V0IHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgbWV0aG9kLCBfX2xvYWRlcl9fIGlzIHNldCB0byBzZWxmLCBhbmQKKyAgICBfX3BhY2thZ2VfXyBpcyBzZXQgYWNjb3JkaW5nbHkgKGlmIHNlbGYuaXNfcGFja2FnZSgpIGlzIGRlZmluZWQpIHdpbGwgYmUgc2V0CisgICAgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIChpZiBzZWxmLmlzX3BhY2thZ2UoKSBkb2VzCisgICAgbm90IHdvcmsgZm9yIHRoZSBtb2R1bGUgaXQgd2lsbCBiZSBzZXQgcG9zdC1sb2FkKS4KKworICAgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZSBkZWNvcmF0b3IgY3JlYXRlZCB0aGUgbW9kdWxlIGl0IGlzCisgICAgc3Vic2VxdWVudGx5IHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcy4KKworICAgIFRoZSBkZWNvcmF0b3IgYXNzdW1lcyB0aGF0IHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gdGFrZXMgdGhlIG1vZHVsZSBuYW1lIGFzCisgICAgdGhlIHNlY29uZCBhcmd1bWVudC4KKworICAgICIiIgorICAgIHdhcm5pbmdzLndhcm4oJ1RvIG1ha2UgaXQgZWFzaWVyIGZvciBzdWJjbGFzc2VzLCBwbGVhc2UgdXNlICcKKyAgICAgICAgICAgICAgICAgICdpbXBvcnRsaWIudXRpbC5tb2R1bGVfdG9fbG9hZCgpIGFuZCAnCisgICAgICAgICAgICAgICAgICAnaW1wb3J0bGliLmFiYy5Mb2FkZXIuaW5pdF9tb2R1bGVfYXR0cnMoKScsCisgICAgICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgQGZ1bmN0b29scy53cmFwcyhmeG4pCisgICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdpdGggbW9kdWxlX3RvX2xvYWQoZnVsbG5hbWUpIGFzIG1vZHVsZToKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBzZWxmLmlzX3BhY2thZ2UoZnVsbG5hbWUpCisgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICAgICAgIyBJZiBfX3BhY2thZ2VfXyB3YXMgbm90IHNldCBhYm92ZSwgX19pbXBvcnRfXygpIHdpbGwgZG8gaXQgbGF0ZXIuCisgICAgICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG1vZHVsZSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgcmV0dXJuIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIKZGlmZiAtLWdpdCBhL0xpYi9pbnNwZWN0LnB5IGIvTGliL2luc3BlY3QucHkKaW5kZXggOTMzN2JkNS4uZWRiZjkyNyAxMDA2NDQKLS0tIGEvTGliL2luc3BlY3QucHkKKysrIGIvTGliL2luc3BlY3QucHkKQEAgLTMxLDcgKzMxLDYgQEAKIF9fYXV0aG9yX18gPSAoJ0thLVBpbmcgWWVlIDxwaW5nQGxmdy5vcmc+JywKICAgICAgICAgICAgICAgJ1l1cnkgU2VsaXZhbm92IDx5c2VsaXZhbm92QHNwcnltaXguY29tPicpCiAKLWltcG9ydCBpbXAKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbGluZWNhY2hlCkBAIC0yNjgsMjEgKzI2Nyw0MCBAQAogICAgIGVsc2U6CiAgICAgICAgIG1ybyA9ICgpCiAgICAgcmVzdWx0cyA9IFtdCi0gICAgZm9yIGtleSBpbiBkaXIob2JqZWN0KToKLSAgICAgICAgIyBGaXJzdCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSB2aWEgX19kaWN0X18uIFNvbWUgZGVzY3JpcHRvcnMgZG9uJ3QKLSAgICAgICAgIyBsaWtlIGNhbGxpbmcgdGhlaXIgX19nZXRfXyAoc2VlIGJ1ZyAjMTc4NSkuCi0gICAgICAgIGZvciBiYXNlIGluIG1ybzoKLSAgICAgICAgICAgIGlmIGtleSBpbiBiYXNlLl9fZGljdF9fOgotICAgICAgICAgICAgICAgIHZhbHVlID0gYmFzZS5fX2RpY3RfX1trZXldCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob2JqZWN0LCBrZXkpCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgcHJvY2Vzc2VkID0gc2V0KCkKKyAgICBuYW1lcyA9IGRpcihvYmplY3QpCisgICAgIyA6ZGQgYW55IER5bmFtaWNDbGFzc0F0dHJpYnV0ZXMgdG8gdGhlIGxpc3Qgb2YgbmFtZXMgaWYgb2JqZWN0IGlzIGEgY2xhc3M7CisgICAgIyB0aGlzIG1heSByZXN1bHQgaW4gZHVwbGljYXRlIGVudHJpZXMgaWYsIGZvciBleGFtcGxlLCBhIHZpcnR1YWwKKyAgICAjIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZXhpc3RzCisgICAgdHJ5OgorICAgICAgICBmb3IgYmFzZSBpbiBvYmplY3QuX19iYXNlc19fOgorICAgICAgICAgICAgZm9yIGssIHYgaW4gYmFzZS5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGspCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZm9yIGtleSBpbiBuYW1lczoKKyAgICAgICAgIyBGaXJzdCB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSB2aWEgZ2V0YXR0ci4gIFNvbWUgZGVzY3JpcHRvcnMgZG9uJ3QKKyAgICAgICAgIyBsaWtlIGNhbGxpbmcgdGhlaXIgX19nZXRfXyAoc2VlIGJ1ZyAjMTc4NSksIHNvIGZhbGwgYmFjayB0bworICAgICAgICAjIGxvb2tpbmcgaW4gdGhlIF9fZGljdF9fLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIob2JqZWN0LCBrZXkpCisgICAgICAgICAgICAjIGhhbmRsZSB0aGUgZHVwbGljYXRlIGtleQorICAgICAgICAgICAgaWYga2V5IGluIHByb2Nlc3NlZDoKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBmb3IgYmFzZSBpbiBtcm86CisgICAgICAgICAgICAgICAgaWYga2V5IGluIGJhc2UuX19kaWN0X186CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYmFzZS5fX2RpY3RfX1trZXldCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgY291bGQgYmUgYSAoY3VycmVudGx5KSBtaXNzaW5nIHNsb3QgbWVtYmVyLCBvciBhIGJ1Z2d5CisgICAgICAgICAgICAgICAgIyBfX2Rpcl9fOyBkaXNjYXJkIGFuZCBtb3ZlIG9uCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgbm90IHByZWRpY2F0ZSBvciBwcmVkaWNhdGUodmFsdWUpOgogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKGtleSwgdmFsdWUpKQotICAgIHJlc3VsdHMuc29ydCgpCisgICAgICAgIHByb2Nlc3NlZC5hZGQoa2V5KQorICAgIHJlc3VsdHMuc29ydChrZXk9bGFtYmRhIHBhaXI6IHBhaXJbMF0pCiAgICAgcmV0dXJuIHJlc3VsdHMKIAogQXR0cmlidXRlID0gbmFtZWR0dXBsZSgnQXR0cmlidXRlJywgJ25hbWUga2luZCBkZWZpbmluZ19jbGFzcyBvYmplY3QnKQpAQCAtMjk5LDYwICszMTcsMTA2IEBACiAgICAgICAgICAgICAgICAnY2xhc3MgbWV0aG9kJyAgICBjcmVhdGVkIHZpYSBjbGFzc21ldGhvZCgpCiAgICAgICAgICAgICAgICAnc3RhdGljIG1ldGhvZCcgICBjcmVhdGVkIHZpYSBzdGF0aWNtZXRob2QoKQogICAgICAgICAgICAgICAgJ3Byb3BlcnR5JyAgICAgICAgY3JlYXRlZCB2aWEgcHJvcGVydHkoKQotICAgICAgICAgICAgICAgJ21ldGhvZCcgICAgICAgICAgYW55IG90aGVyIGZsYXZvciBvZiBtZXRob2QKKyAgICAgICAgICAgICAgICdtZXRob2QnICAgICAgICAgIGFueSBvdGhlciBmbGF2b3Igb2YgbWV0aG9kIG9yIGRlc2NyaXB0b3IKICAgICAgICAgICAgICAgICdkYXRhJyAgICAgICAgICAgIG5vdCBhIG1ldGhvZAogCiAgICAgICAgIDIuIFRoZSBjbGFzcyB3aGljaCBkZWZpbmVkIHRoaXMgYXR0cmlidXRlIChhIGNsYXNzKS4KIAotICAgICAgICAzLiBUaGUgb2JqZWN0IGFzIG9idGFpbmVkIGRpcmVjdGx5IGZyb20gdGhlIGRlZmluaW5nIGNsYXNzJ3MKLSAgICAgICAgICAgX19kaWN0X18sIG5vdCB2aWEgZ2V0YXR0ci4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yCi0gICAgICAgICAgIGRhdGEgYXR0cmlidXRlczogIEMuZGF0YSBpcyBqdXN0IGEgZGF0YSBvYmplY3QsIGJ1dAotICAgICAgICAgICBDLl9fZGljdF9fWydkYXRhJ10gbWF5IGJlIGEgZGF0YSBkZXNjcmlwdG9yIHdpdGggYWRkaXRpb25hbAotICAgICAgICAgICBpbmZvLCBsaWtlIGEgX19kb2NfXyBzdHJpbmcuCisgICAgICAgIDMuIFRoZSBvYmplY3QgYXMgb2J0YWluZWQgYnkgY2FsbGluZyBnZXRhdHRyOyBpZiB0aGlzIGZhaWxzLCBvciBpZiB0aGUKKyAgICAgICAgICAgcmVzdWx0aW5nIG9iamVjdCBkb2VzIG5vdCBsaXZlIGFueXdoZXJlIGluIHRoZSBjbGFzcycgbXJvIChpbmNsdWRpbmcKKyAgICAgICAgICAgbWV0YWNsYXNzZXMpIHRoZW4gdGhlIG9iamVjdCBpcyBsb29rZWQgdXAgaW4gdGhlIGRlZmluaW5nIGNsYXNzJ3MKKyAgICAgICAgICAgZGljdCAoZm91bmQgYnkgd2Fsa2luZyB0aGUgbXJvKS4KKworICAgIElmIG9uZSBvZiB0aGUgaXRlbXMgaW4gZGlyKGNscykgaXMgc3RvcmVkIGluIHRoZSBtZXRhY2xhc3MgaXQgd2lsbCBub3cKKyAgICBiZSBkaXNjb3ZlcmVkIGFuZCBub3QgaGF2ZSBOb25lIGJlIGxpc3RlZCBhcyB0aGUgY2xhc3MgaW4gd2hpY2ggaXQgd2FzCisgICAgZGVmaW5lZC4gIEFueSBpdGVtcyB3aG9zZSBob21lIGNsYXNzIGNhbm5vdCBiZSBkaXNjb3ZlcmVkIGFyZSBza2lwcGVkLgogICAgICIiIgogCiAgICAgbXJvID0gZ2V0bXJvKGNscykKKyAgICBtZXRhbXJvID0gZ2V0bXJvKHR5cGUoY2xzKSkgIyBmb3IgYXR0cmlidXRlcyBzdG9yZWQgaW4gdGhlIG1ldGFjbGFzcworICAgIG1ldGFtcm8gPSB0dXBsZShbY2xzIGZvciBjbHMgaW4gbWV0YW1ybyBpZiBjbHMgbm90IGluICh0eXBlLCBvYmplY3QpXSkKKyAgICBjbGFzc19iYXNlcyA9IChjbHMsKSArIG1ybworICAgIGFsbF9iYXNlcyA9IGNsYXNzX2Jhc2VzICsgbWV0YW1ybwogICAgIG5hbWVzID0gZGlyKGNscykKKyAgICAjIDpkZCBhbnkgRHluYW1pY0NsYXNzQXR0cmlidXRlcyB0byB0aGUgbGlzdCBvZiBuYW1lczsKKyAgICAjIHRoaXMgbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGUgZW50cmllcyBpZiwgZm9yIGV4YW1wbGUsIGEgdmlydHVhbAorICAgICMgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBleGlzdHMuCisgICAgZm9yIGJhc2UgaW4gbXJvOgorICAgICAgICBmb3IgaywgdiBpbiBiYXNlLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGspCiAgICAgcmVzdWx0ID0gW10KKyAgICBwcm9jZXNzZWQgPSBzZXQoKQorCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgICMgR2V0IHRoZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lLCBhbmQgd2hlcmUgaXQgd2FzIGRlZmluZWQuCisgICAgICAgICMgTm9ybWFsIG9iamVjdHMgd2lsbCBiZSBsb29rZWQgdXAgd2l0aCBib3RoIGdldGF0dHIgYW5kIGRpcmVjdGx5IGluCisgICAgICAgICMgaXRzIGNsYXNzJyBkaWN0IChpbiBjYXNlIGdldGF0dHIgZmFpbHMgW2J1ZyAjMTc4NV0sIGFuZCBhbHNvIHRvIGxvb2sKKyAgICAgICAgIyBmb3IgYSBkb2NzdHJpbmcpLgorICAgICAgICAjIEZvciBEeW5hbWljQ2xhc3NBdHRyaWJ1dGVzIG9uIHRoZSBzZWNvbmQgcGFzcyB3ZSBvbmx5IGxvb2sgaW4gdGhlCisgICAgICAgICMgY2xhc3MncyBkaWN0LgorICAgICAgICAjCiAgICAgICAgICMgR2V0dGluZyBhbiBvYmogZnJvbSB0aGUgX19kaWN0X18gc29tZXRpbWVzIHJldmVhbHMgbW9yZSB0aGFuCiAgICAgICAgICMgdXNpbmcgZ2V0YXR0ci4gIFN0YXRpYyBhbmQgY2xhc3MgbWV0aG9kcyBhcmUgZHJhbWF0aWMgZXhhbXBsZXMuCi0gICAgICAgICMgRnVydGhlcm1vcmUsIHNvbWUgb2JqZWN0cyBtYXkgcmFpc2UgYW4gRXhjZXB0aW9uIHdoZW4gZmV0Y2hlZCB3aXRoCi0gICAgICAgICMgZ2V0YXR0cigpLiBUaGlzIGlzIHRoZSBjYXNlIHdpdGggc29tZSBkZXNjcmlwdG9ycyAoYnVnICMxNzg1KS4KLSAgICAgICAgIyBUaHVzLCB3ZSBvbmx5IHVzZSBnZXRhdHRyKCkgYXMgYSBsYXN0IHJlc29ydC4KICAgICAgICAgaG9tZWNscyA9IE5vbmUKLSAgICAgICAgZm9yIGJhc2UgaW4gKGNscywpICsgbXJvOgotICAgICAgICAgICAgaWYgbmFtZSBpbiBiYXNlLl9fZGljdF9fOgotICAgICAgICAgICAgICAgIG9iaiA9IGJhc2UuX19kaWN0X19bbmFtZV0KLSAgICAgICAgICAgICAgICBob21lY2xzID0gYmFzZQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvYmogPSBnZXRhdHRyKGNscywgbmFtZSkKLSAgICAgICAgICAgIGhvbWVjbHMgPSBnZXRhdHRyKG9iaiwgIl9fb2JqY2xhc3NfXyIsIGhvbWVjbHMpCi0KLSAgICAgICAgIyBDbGFzc2lmeSB0aGUgb2JqZWN0LgotICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgc3RhdGljbWV0aG9kKToKLSAgICAgICAgICAgIGtpbmQgPSAic3RhdGljIG1ldGhvZCIKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgY2xhc3NtZXRob2QpOgotICAgICAgICAgICAga2luZCA9ICJjbGFzcyBtZXRob2QiCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHByb3BlcnR5KToKLSAgICAgICAgICAgIGtpbmQgPSAicHJvcGVydHkiCi0gICAgICAgIGVsaWYgaXNtZXRob2RkZXNjcmlwdG9yKG9iaik6Ci0gICAgICAgICAgICBraW5kID0gIm1ldGhvZCIKLSAgICAgICAgZWxpZiBpc2RhdGFkZXNjcmlwdG9yKG9iaik6Ci0gICAgICAgICAgICBraW5kID0gImRhdGEiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvYmpfdmlhX2dldGF0dHIgPSBnZXRhdHRyKGNscywgbmFtZSkKLSAgICAgICAgICAgIGlmIChpc2Z1bmN0aW9uKG9ial92aWFfZ2V0YXR0cikgb3IKLSAgICAgICAgICAgICAgICBpc21ldGhvZGRlc2NyaXB0b3Iob2JqX3ZpYV9nZXRhdHRyKSk6Ci0gICAgICAgICAgICAgICAga2luZCA9ICJtZXRob2QiCisgICAgICAgIGdldF9vYmogPSBOb25lCisgICAgICAgIGRpY3Rfb2JqID0gTm9uZQorICAgICAgICBpZiBuYW1lIG5vdCBpbiBwcm9jZXNzZWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnX19kaWN0X18nOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIl9fZGljdF9fIGlzIHNwZWNpYWwsIGRvbid0IHdhbnQgdGhlIHByb3h5IikKKyAgICAgICAgICAgICAgICBnZXRfb2JqID0gZ2V0YXR0cihjbHMsIG5hbWUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGtpbmQgPSAiZGF0YSIKLSAgICAgICAgICAgIG9iaiA9IG9ial92aWFfZ2V0YXR0cgotCisgICAgICAgICAgICAgICAgaG9tZWNscyA9IGdldGF0dHIoZ2V0X29iaiwgIl9fb2JqY2xhc3NfXyIsIGhvbWVjbHMpCisgICAgICAgICAgICAgICAgaWYgaG9tZWNscyBub3QgaW4gY2xhc3NfYmFzZXM6CisgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlIHJlc3VsdGluZyBvYmplY3QgZG9lcyBub3QgbGl2ZSBzb21ld2hlcmUgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICMgbXJvLCBkcm9wIGl0IGFuZCBzZWFyY2ggdGhlIG1ybyBtYW51YWxseQorICAgICAgICAgICAgICAgICAgICBob21lY2xzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBsYXN0X2NscyA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBsb29rIGluIHRoZSBjbGFzc2VzCisgICAgICAgICAgICAgICAgICAgIGZvciBzcmNoX2NscyBpbiBjbGFzc19iYXNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY2hfb2JqID0gZ2V0YXR0cihzcmNoX2NscywgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNyY2hfb2JqID09IGdldF9vYmo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jbHMgPSBzcmNoX2NscworICAgICAgICAgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhlIG1ldGFjbGFzc2VzCisgICAgICAgICAgICAgICAgICAgIGZvciBzcmNoX2NscyBpbiBtZXRhbXJvOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2hfb2JqID0gc3JjaF9jbHMuX19nZXRhdHRyX18oY2xzLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcmNoX29iaiA9PSBnZXRfb2JqOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfY2xzID0gc3JjaF9jbHMKKyAgICAgICAgICAgICAgICAgICAgaWYgbGFzdF9jbHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBob21lY2xzID0gbGFzdF9jbHMKKyAgICAgICAgZm9yIGJhc2UgaW4gYWxsX2Jhc2VzOgorICAgICAgICAgICAgaWYgbmFtZSBpbiBiYXNlLl9fZGljdF9fOgorICAgICAgICAgICAgICAgIGRpY3Rfb2JqID0gYmFzZS5fX2RpY3RfX1tuYW1lXQorICAgICAgICAgICAgICAgIGlmIGhvbWVjbHMgbm90IGluIG1ldGFtcm86CisgICAgICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBiYXNlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgaG9tZWNscyBpcyBOb25lOgorICAgICAgICAgICAgIyB1bmFibGUgdG8gbG9jYXRlIHRoZSBhdHRyaWJ1dGUgYW55d2hlcmUsIG1vc3QgbGlrZWx5IGR1ZSB0bworICAgICAgICAgICAgIyBidWdneSBjdXN0b20gX19kaXJfXzsgZGlzY2FyZCBhbmQgbW92ZSBvbgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgb2JqID0gZ2V0X29iaiBvciBkaWN0X29iagorICAgICAgICAjIENsYXNzaWZ5IHRoZSBvYmplY3Qgb3IgaXRzIGRlc2NyaXB0b3IuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIHN0YXRpY21ldGhvZCk6CisgICAgICAgICAgICBraW5kID0gInN0YXRpYyBtZXRob2QiCisgICAgICAgICAgICBvYmogPSBkaWN0X29iagorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIGNsYXNzbWV0aG9kKToKKyAgICAgICAgICAgIGtpbmQgPSAiY2xhc3MgbWV0aG9kIgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRpY3Rfb2JqLCBwcm9wZXJ0eSk6CisgICAgICAgICAgICBraW5kID0gInByb3BlcnR5IgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc2Z1bmN0aW9uKG9iaikgb3IgaXNtZXRob2RkZXNjcmlwdG9yKG9iaik6CisgICAgICAgICAgICBraW5kID0gIm1ldGhvZCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtpbmQgPSAiZGF0YSIKICAgICAgICAgcmVzdWx0LmFwcGVuZChBdHRyaWJ1dGUobmFtZSwga2luZCwgaG9tZWNscywgb2JqKSkKLQorICAgICAgICBwcm9jZXNzZWQuYWRkKG5hbWUpCiAgICAgcmV0dXJuIHJlc3VsdAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNsYXNzIGhlbHBlcnMKQEAgLTM2MSw2ICs0MjUsNDAgQEAKICAgICAiUmV0dXJuIHR1cGxlIG9mIGJhc2UgY2xhc3NlcyAoaW5jbHVkaW5nIGNscykgaW4gbWV0aG9kIHJlc29sdXRpb24gb3JkZXIuIgogICAgIHJldHVybiBjbHMuX19tcm9fXwogCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZ1bmN0aW9uIGhlbHBlcnMKKworZGVmIHVud3JhcChmdW5jLCAqLCBzdG9wPU5vbmUpOgorICAgICIiIkdldCB0aGUgb2JqZWN0IHdyYXBwZWQgYnkgKmZ1bmMqLgorCisgICBGb2xsb3dzIHRoZSBjaGFpbiBvZiA6YXR0cjpgX193cmFwcGVkX19gIGF0dHJpYnV0ZXMgcmV0dXJuaW5nIHRoZSBsYXN0CisgICBvYmplY3QgaW4gdGhlIGNoYWluLgorCisgICAqc3RvcCogaXMgYW4gb3B0aW9uYWwgY2FsbGJhY2sgYWNjZXB0aW5nIGFuIG9iamVjdCBpbiB0aGUgd3JhcHBlciBjaGFpbgorICAgYXMgaXRzIHNvbGUgYXJndW1lbnQgdGhhdCBhbGxvd3MgdGhlIHVud3JhcHBpbmcgdG8gYmUgdGVybWluYXRlZCBlYXJseSBpZgorICAgdGhlIGNhbGxiYWNrIHJldHVybnMgYSB0cnVlIHZhbHVlLiBJZiB0aGUgY2FsbGJhY2sgbmV2ZXIgcmV0dXJucyBhIHRydWUKKyAgIHZhbHVlLCB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluIGlzIHJldHVybmVkIGFzIHVzdWFsLiBGb3IgZXhhbXBsZSwKKyAgIDpmdW5jOmBzaWduYXR1cmVgIHVzZXMgdGhpcyB0byBzdG9wIHVud3JhcHBpbmcgaWYgYW55IG9iamVjdCBpbiB0aGUKKyAgIGNoYWluIGhhcyBhIGBgX19zaWduYXR1cmVfX2BgIGF0dHJpYnV0ZSBkZWZpbmVkLgorCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgYSBjeWNsZSBpcyBlbmNvdW50ZXJlZC4KKworICAgICIiIgorICAgIGlmIHN0b3AgaXMgTm9uZToKKyAgICAgICAgZGVmIF9pc193cmFwcGVyKGYpOgorICAgICAgICAgICAgcmV0dXJuIGhhc2F0dHIoZiwgJ19fd3JhcHBlZF9fJykKKyAgICBlbHNlOgorICAgICAgICBkZWYgX2lzX3dyYXBwZXIoZik6CisgICAgICAgICAgICByZXR1cm4gaGFzYXR0cihmLCAnX193cmFwcGVkX18nKSBhbmQgbm90IHN0b3AoZikKKyAgICBmID0gZnVuYyAgIyByZW1lbWJlciB0aGUgb3JpZ2luYWwgZnVuYyBmb3IgZXJyb3IgcmVwb3J0aW5nCisgICAgbWVtbyA9IHtpZChmKX0gIyBNZW1vaXNlIGJ5IGlkIHRvIHRvbGVyYXRlIG5vbi1oYXNoYWJsZSBvYmplY3RzCisgICAgd2hpbGUgX2lzX3dyYXBwZXIoZnVuYyk6CisgICAgICAgIGZ1bmMgPSBmdW5jLl9fd3JhcHBlZF9fCisgICAgICAgIGlkX2Z1bmMgPSBpZChmdW5jKQorICAgICAgICBpZiBpZF9mdW5jIGluIG1lbW86CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd3cmFwcGVyIGxvb3Agd2hlbiB1bndyYXBwaW5nIHshcn0nLmZvcm1hdChmKSkKKyAgICAgICAgbWVtby5hZGQoaWRfZnVuYykKKyAgICByZXR1cm4gZnVuYworCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNvdXJjZSBjb2RlIGV4dHJhY3Rpb24KIGRlZiBpbmRlbnRzaXplKGxpbmUpOgogICAgICIiIlJldHVybiB0aGUgaW5kZW50IHNpemUsIGluIHNwYWNlcywgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBvZiB0ZXh0LiIiIgpAQCAtNDQwLDYgKzUzOCw5IEBACiAgICAgIiIiR2V0IHRoZSBtb2R1bGUgbmFtZSwgc3VmZml4LCBtb2RlLCBhbmQgbW9kdWxlIHR5cGUgZm9yIGEgZ2l2ZW4gZmlsZS4iIiIKICAgICB3YXJuaW5ncy53YXJuKCdpbnNwZWN0LmdldG1vZHVsZWluZm8oKSBpcyBkZXByZWNhdGVkJywgRGVwcmVjYXRpb25XYXJuaW5nLAogICAgICAgICAgICAgICAgICAgMikKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgaW1wb3J0IGltcAogICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQogICAgIHN1ZmZpeGVzID0gWygtbGVuKHN1ZmZpeCksIHN1ZmZpeCwgbW9kZSwgbXR5cGUpCiAgICAgICAgICAgICAgICAgICAgIGZvciBzdWZmaXgsIG1vZGUsIG10eXBlIGluIGltcC5nZXRfc3VmZml4ZXMoKV0KQEAgLTQ3Niw3ICs1NzcsNyBAQAogICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCiAgICAgIyBvbmx5IHJldHVybiBhIG5vbi1leGlzdGVudCBmaWxlbmFtZSBpZiB0aGUgbW9kdWxlIGhhcyBhIFBFUCAzMDIgbG9hZGVyCi0gICAgaWYgaGFzYXR0cihnZXRtb2R1bGUob2JqZWN0LCBmaWxlbmFtZSksICdfX2xvYWRlcl9fJyk6CisgICAgaWYgZ2V0YXR0cihnZXRtb2R1bGUob2JqZWN0LCBmaWxlbmFtZSksICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgbm90IE5vbmU6CiAgICAgICAgIHJldHVybiBmaWxlbmFtZQogICAgICMgb3IgaXQgaXMgaW4gdGhlIGxpbmVjYWNoZQogICAgIGlmIGZpbGVuYW1lIGluIGxpbmVjYWNoZS5jYWNoZToKQEAgLTU0NSwxMyArNjQ2LDEzIEBACiAKICAgICBUaGUgYXJndW1lbnQgbWF5IGJlIGEgbW9kdWxlLCBjbGFzcywgbWV0aG9kLCBmdW5jdGlvbiwgdHJhY2ViYWNrLCBmcmFtZSwKICAgICBvciBjb2RlIG9iamVjdC4gIFRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIGxpc3Qgb2YgYWxsIHRoZSBsaW5lcwotICAgIGluIHRoZSBmaWxlIGFuZCB0aGUgbGluZSBudW1iZXIgaW5kZXhlcyBhIGxpbmUgaW4gdGhhdCBsaXN0LiAgQW4gSU9FcnJvcgorICAgIGluIHRoZSBmaWxlIGFuZCB0aGUgbGluZSBudW1iZXIgaW5kZXhlcyBhIGxpbmUgaW4gdGhhdCBsaXN0LiAgQW4gT1NFcnJvcgogICAgIGlzIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKIAogICAgIGZpbGUgPSBnZXRmaWxlKG9iamVjdCkKICAgICBzb3VyY2VmaWxlID0gZ2V0c291cmNlZmlsZShvYmplY3QpCiAgICAgaWYgbm90IHNvdXJjZWZpbGUgYW5kIGZpbGVbOjFdICsgZmlsZVstMTpdICE9ICc8Pic6Ci0gICAgICAgIHJhaXNlIElPRXJyb3IoJ3NvdXJjZSBjb2RlIG5vdCBhdmFpbGFibGUnKQorICAgICAgICByYWlzZSBPU0Vycm9yKCdzb3VyY2UgY29kZSBub3QgYXZhaWxhYmxlJykKICAgICBmaWxlID0gc291cmNlZmlsZSBpZiBzb3VyY2VmaWxlIGVsc2UgZmlsZQogCiAgICAgbW9kdWxlID0gZ2V0bW9kdWxlKG9iamVjdCwgZmlsZSkKQEAgLTU2MCw3ICs2NjEsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzKGZpbGUpCiAgICAgaWYgbm90IGxpbmVzOgotICAgICAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZ2V0IHNvdXJjZSBjb2RlJykKKyAgICAgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGdldCBzb3VyY2UgY29kZScpCiAKICAgICBpZiBpc21vZHVsZShvYmplY3QpOgogICAgICAgICByZXR1cm4gbGluZXMsIDAKQEAgLTU4Niw3ICs2ODcsNyBAQAogICAgICAgICAgICAgY2FuZGlkYXRlcy5zb3J0KCkKICAgICAgICAgICAgIHJldHVybiBsaW5lcywgY2FuZGlkYXRlc1swXVsxXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGZpbmQgY2xhc3MgZGVmaW5pdGlvbicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZmluZCBjbGFzcyBkZWZpbml0aW9uJykKIAogICAgIGlmIGlzbWV0aG9kKG9iamVjdCk6CiAgICAgICAgIG9iamVjdCA9IG9iamVjdC5fX2Z1bmNfXwpAQCAtNTk4LDE0ICs2OTksMTQgQEAKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0LmZfY29kZQogICAgIGlmIGlzY29kZShvYmplY3QpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihvYmplY3QsICdjb19maXJzdGxpbmVubycpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGZpbmQgZnVuY3Rpb24gZGVmaW5pdGlvbicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZmluZCBmdW5jdGlvbiBkZWZpbml0aW9uJykKICAgICAgICAgbG51bSA9IG9iamVjdC5jb19maXJzdGxpbmVubyAtIDEKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZShyJ14oXHMqZGVmXHMpfCguKig/PCFcdylsYW1iZGEoOnxccykpfF4oXHMqQCknKQogICAgICAgICB3aGlsZSBsbnVtID4gMDoKICAgICAgICAgICAgIGlmIHBhdC5tYXRjaChsaW5lc1tsbnVtXSk6IGJyZWFrCiAgICAgICAgICAgICBsbnVtID0gbG51bSAtIDEKICAgICAgICAgcmV0dXJuIGxpbmVzLCBsbnVtCi0gICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGZpbmQgY29kZSBvYmplY3QnKQorICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNvZGUgb2JqZWN0JykKIAogZGVmIGdldGNvbW1lbnRzKG9iamVjdCk6CiAgICAgIiIiR2V0IGxpbmVzIG9mIGNvbW1lbnRzIGltbWVkaWF0ZWx5IHByZWNlZGluZyBhbiBvYmplY3QncyBzb3VyY2UgY29kZS4KQEAgLTYxNCw3ICs3MTUsNyBAQAogICAgICIiIgogICAgIHRyeToKICAgICAgICAgbGluZXMsIGxudW0gPSBmaW5kc291cmNlKG9iamVjdCkKLSAgICBleGNlcHQgKElPRXJyb3IsIFR5cGVFcnJvcik6CisgICAgZXhjZXB0IChPU0Vycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgaWYgaXNtb2R1bGUob2JqZWN0KToKQEAgLTcxMCw3ICs4MTEsNyBAQAogICAgIFRoZSBhcmd1bWVudCBtYXkgYmUgYSBtb2R1bGUsIGNsYXNzLCBtZXRob2QsIGZ1bmN0aW9uLCB0cmFjZWJhY2ssIGZyYW1lLAogICAgIG9yIGNvZGUgb2JqZWN0LiAgVGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgbGlzdCBvZiB0aGUgbGluZXMKICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRpY2F0ZXMgd2hlcmUgaW4gdGhlCi0gICAgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhlIGZpcnN0IGxpbmUgb2YgY29kZSB3YXMgZm91bmQuICBBbiBJT0Vycm9yIGlzCisgICAgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhlIGZpcnN0IGxpbmUgb2YgY29kZSB3YXMgZm91bmQuICBBbiBPU0Vycm9yIGlzCiAgICAgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgogICAgIGxpbmVzLCBsbnVtID0gZmluZHNvdXJjZShvYmplY3QpCiAKQEAgLTcyMiw3ICs4MjMsNyBAQAogCiAgICAgVGhlIGFyZ3VtZW50IG1heSBiZSBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsCiAgICAgb3IgY29kZSBvYmplY3QuICBUaGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBzaW5nbGUgc3RyaW5nLiAgQW4KLSAgICBJT0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKKyAgICBPU0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKICAgICBsaW5lcywgbG51bSA9IGdldHNvdXJjZWxpbmVzKG9iamVjdCkKICAgICByZXR1cm4gJycuam9pbihsaW5lcykKIApAQCAtMTEyMyw3ICsxMjI0LDcgQEAKICAgICAgICAgc3RhcnQgPSBsaW5lbm8gLSAxIC0gY29udGV4dC8vMgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2UoZnJhbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGxpbmVzID0gaW5kZXggPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdGFydCA9IG1heChzdGFydCwgMSkKQEAgLTEzNDUsNiArMTQ0Niw5IEBACiAgICAgICAgIHNpZyA9IHNpZ25hdHVyZShvYmouX19mdW5jX18pCiAgICAgICAgIHJldHVybiBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPXR1cGxlKHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKVsxOl0pCiAKKyAgICAjIFdhcyB0aGlzIGZ1bmN0aW9uIHdyYXBwZWQgYnkgYSBkZWNvcmF0b3I/CisgICAgb2JqID0gdW53cmFwKG9iaiwgc3RvcD0obGFtYmRhIGY6IGhhc2F0dHIoZiwgIl9fc2lnbmF0dXJlX18iKSkpCisKICAgICB0cnk6CiAgICAgICAgIHNpZyA9IG9iai5fX3NpZ25hdHVyZV9fCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgpAQCAtMTM1MywxMyArMTQ1Nyw2IEBACiAgICAgICAgIGlmIHNpZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybiBzaWcKIAotICAgIHRyeToKLSAgICAgICAgIyBXYXMgdGhpcyBmdW5jdGlvbiB3cmFwcGVkIGJ5IGEgZGVjb3JhdG9yPwotICAgICAgICB3cmFwcGVkID0gb2JqLl9fd3JhcHBlZF9fCi0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHNpZ25hdHVyZSh3cmFwcGVkKQogCiAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLkZ1bmN0aW9uVHlwZSk6CiAgICAgICAgIHJldHVybiBTaWduYXR1cmUuZnJvbV9mdW5jdGlvbihvYmopCkBAIC0yMDcyLDMgKzIxNjksNjQgQEAKICAgICAgICAgICAgIHJlbmRlcmVkICs9ICcgLT4ge30nLmZvcm1hdChhbm5vKQogCiAgICAgICAgIHJldHVybiByZW5kZXJlZAorCitkZWYgX21haW4oKToKKyAgICAiIiIgTG9naWMgZm9yIGluc3BlY3RpbmcgYW4gb2JqZWN0IGdpdmVuIGF0IGNvbW1hbmQgbGluZSAiIiIKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBpbXBvcnQgaW1wb3J0bGliCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJ29iamVjdCcsCisgICAgICAgICBoZWxwPSJUaGUgb2JqZWN0IHRvIGJlIGFuYWx5c2VkLiAiCisgICAgICAgICAgICAgICJJdCBzdXBwb3J0cyB0aGUgJ21vZHVsZTpxdWFsbmFtZScgc3ludGF4IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnLWQnLCAnLS1kZXRhaWxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgaGVscD0nRGlzcGxheSBpbmZvIGFib3V0IHRoZSBtb2R1bGUgcmF0aGVyIHRoYW4gaXRzIHNvdXJjZSBjb2RlJykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICB0YXJnZXQgPSBhcmdzLm9iamVjdAorICAgIG1vZF9uYW1lLCBoYXNfYXR0cnMsIGF0dHJzID0gdGFyZ2V0LnBhcnRpdGlvbigiOiIpCisgICAgdHJ5OgorICAgICAgICBvYmogPSBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2RfbmFtZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgbXNnID0gIkZhaWxlZCB0byBpbXBvcnQge30gKHt9OiB7fSkiLmZvcm1hdChtb2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGV4YykuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjKQorICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZXhpdCgyKQorCisgICAgaWYgaGFzX2F0dHJzOgorICAgICAgICBwYXJ0cyA9IGF0dHJzLnNwbGl0KCIuIikKKyAgICAgICAgb2JqID0gbW9kdWxlCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIHBhcnQpCisKKyAgICBpZiBtb2R1bGUuX19uYW1lX18gaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICBwcmludCgiQ2FuJ3QgZ2V0IGluZm8gZm9yIGJ1aWx0aW4gbW9kdWxlcy4iLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGV4aXQoMSkKKworICAgIGlmIGFyZ3MuZGV0YWlsczoKKyAgICAgICAgcHJpbnQoJ1RhcmdldDoge30nLmZvcm1hdCh0YXJnZXQpKQorICAgICAgICBwcmludCgnT3JpZ2luOiB7fScuZm9ybWF0KGdldHNvdXJjZWZpbGUobW9kdWxlKSkpCisgICAgICAgIHByaW50KCdDYWNoZWQ6IHt9Jy5mb3JtYXQobW9kdWxlLl9fY2FjaGVkX18pKQorICAgICAgICBpZiBvYmogaXMgbW9kdWxlOgorICAgICAgICAgICAgcHJpbnQoJ0xvYWRlcjoge30nLmZvcm1hdChyZXByKG1vZHVsZS5fX2xvYWRlcl9fKSkpCisgICAgICAgICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1N1Ym1vZHVsZSBzZWFyY2ggcGF0aDoge30nLmZvcm1hdChtb2R1bGUuX19wYXRoX18pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9fLCBsaW5lbm8gPSBmaW5kc291cmNlKG9iaikKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCgnTGluZToge30nLmZvcm1hdChsaW5lbm8pKQorCisgICAgICAgIHByaW50KCdcbicpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoZ2V0c291cmNlKG9iaikpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaW8ucHkgYi9MaWIvaW8ucHkKaW5kZXggYmRhNGRlZi4uMzk4NzhiOCAxMDA2NDQKLS0tIGEvTGliL2lvLnB5CisrKyBiL0xpYi9pby5weQpAQCAtNCw3ICs0LDcgQEAKIEF0IHRoZSB0b3Agb2YgdGhlIEkvTyBoaWVyYXJjaHkgaXMgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgSU9CYXNlLiBJdAogZGVmaW5lcyB0aGUgYmFzaWMgaW50ZXJmYWNlIHRvIGEgc3RyZWFtLiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZXJlIGlzIG5vCiBzZXBhcmF0aW9uIGJldHdlZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBzdHJlYW1zOyBpbXBsZW1lbnRhdGlvbnMgYXJlCi1hbGxvd2VkIHRvIHJhaXNlIGFuIElPRXJyb3IgaWYgdGhleSBkbyBub3Qgc3VwcG9ydCBhIGdpdmVuIG9wZXJhdGlvbi4KK2FsbG93ZWQgdG8gcmFpc2UgYW4gT1NFcnJvciBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IGEgZ2l2ZW4gb3BlcmF0aW9uLgogCiBFeHRlbmRpbmcgSU9CYXNlIGlzIFJhd0lPQmFzZSB3aGljaCBkZWFscyBzaW1wbHkgd2l0aCB0aGUgcmVhZGluZyBhbmQKIHdyaXRpbmcgb2YgcmF3IGJ5dGVzIHRvIGEgc3RyZWFtLiBGaWxlSU8gc3ViY2xhc3NlcyBSYXdJT0Jhc2UgdG8gcHJvdmlkZQpkaWZmIC0tZ2l0IGEvTGliL2lwYWRkcmVzcy5weSBiL0xpYi9pcGFkZHJlc3MucHkKaW5kZXggZWFiZmQ2Zi4uOTdmZjEzZCAxMDA2NDQKLS0tIGEvTGliL2lwYWRkcmVzcy5weQorKysgYi9MaWIvaXBhZGRyZXNzLnB5CkBAIC05NzUsMTMgKzk3NSwyNSBAQAogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDQxOTMuCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIChzZWxmLm5ldHdvcmtfYWRkcmVzcy5pc19wcml2YXRlIGFuZAogICAgICAgICAgICAgICAgIHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MuaXNfcHJpdmF0ZSkKIAogICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgbm90IHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkgb3IgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5pc19wcml2YXRlCisKKyAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfdW5zcGVjaWZpZWQoc2VsZik6CiAgICAgICAgICIiIlRlc3QgaWYgdGhlIGFkZHJlc3MgaXMgdW5zcGVjaWZpZWQuCiAKQEAgLTEyMjEsMTkgKzEyMzMsMzAgQEAKICAgICAgICAgcmV0dXJuIHNlbGYgaW4gcmVzZXJ2ZWRfbmV0d29yawogCiAgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQogICAgIGRlZiBpc19wcml2YXRlKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDE5MTguCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKLSAgICAgICAgcHJpdmF0ZV8xMCA9IElQdjROZXR3b3JrKCcxMC4wLjAuMC84JykKLSAgICAgICAgcHJpdmF0ZV8xNzIgPSBJUHY0TmV0d29yaygnMTcyLjE2LjAuMC8xMicpCi0gICAgICAgIHByaXZhdGVfMTkyID0gSVB2NE5ldHdvcmsoJzE5Mi4xNjguMC4wLzE2JykKLSAgICAgICAgcmV0dXJuIChzZWxmIGluIHByaXZhdGVfMTAgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIHByaXZhdGVfMTcyIG9yCi0gICAgICAgICAgICAgICAgc2VsZiBpbiBwcml2YXRlXzE5MikKKyAgICAgICAgcmV0dXJuIChzZWxmIGluIElQdjROZXR3b3JrKCcwLjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzEwLjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzEyNy4wLjAuMC84Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxNjkuMjU0LjAuMC8xNicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTcyLjE2LjAuMC8xMicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMC4wLzI5Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4wLjE3MC8zMScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMi4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMTY4LjAuMC8xNicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTk4LjE4LjAuMC8xNScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTk4LjUxLjEwMC4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcyMDMuMC4xMTMuMC8yNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMjQwLjAuMC4wLzQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzI1NS4yNTUuMjU1LjI1NS8zMicpKQorCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfbXVsdGljYXN0KHNlbGYpOgpAQCAtMTQ2Niw2ICsxNDg5LDIxIEBACiAgICAgICAgIGlmIHNlbGYuX3ByZWZpeGxlbiA9PSAoc2VsZi5fbWF4X3ByZWZpeGxlbiAtIDEpOgogICAgICAgICAgICAgc2VsZi5ob3N0cyA9IHNlbGYuX19pdGVyX18KIAorICAgIEBwcm9wZXJ0eQorICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gKG5vdCAoc2VsZi5uZXR3b3JrX2FkZHJlc3MgaW4gSVB2NE5ldHdvcmsoJzEwMC42NC4wLjAvMTAnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5icm9hZGNhc3RfYWRkcmVzcyBpbiBJUHY0TmV0d29yaygnMTAwLjY0LjAuMC8xMCcpKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5pc19wcml2YXRlKQorCisKIAogY2xhc3MgX0Jhc2VWNjoKIApAQCAtMTgyMiwxNSArMTg2MCwzNiBAQAogICAgICAgICByZXR1cm4gc2VsZiBpbiBzaXRlbG9jYWxfbmV0d29yawogCiAgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQogICAgIGRlZiBpc19wcml2YXRlKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDQxOTMuCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKLSAgICAgICAgcHJpdmF0ZV9uZXR3b3JrID0gSVB2Nk5ldHdvcmsoJ2ZjMDA6Oi83JykKLSAgICAgICAgcmV0dXJuIHNlbGYgaW4gcHJpdmF0ZV9uZXR3b3JrCisgICAgICAgIHJldHVybiAoc2VsZiBpbiBJUHY2TmV0d29yaygnOjoxLzEyOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnOjovMTI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCc6OmZmZmY6MDowLzk2Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcxMDA6Oi82NCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMTo6LzIzJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjI6Oi80OCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMTpkYjg6Oi8zMicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMToxMDo6LzI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCdmYzAwOjovNycpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnZmU4MDo6LzEwJykpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCB0cnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuaXNfcHJpdmF0ZQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX3Vuc3BlY2lmaWVkKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vX19pbml0X18ucHkgYi9MaWIvanNvbi9fX2luaXRfXy5weQppbmRleCA0OGE0ZjhmLi5hNDU5Zjc3IDEwMDY0NAotLS0gYS9MaWIvanNvbi9fX2luaXRfXy5weQorKysgYi9MaWIvanNvbi9fX2luaXRfXy5weQpAQCAtMzksOCArMzksNyBAQAogUHJldHR5IHByaW50aW5nOjoKIAogICAgID4+PiBpbXBvcnQganNvbgotICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLAotICAgIC4uLiAgICAgICAgICAgICAgICAgIGluZGVudD00LCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKSkKKyAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpKQogICAgIHsKICAgICAgICAgIjQiOiA1LAogICAgICAgICAiNiI6IDcKQEAgLTE0NiwxMyArMTQ1LDEyIEBACiAgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kCiAgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQKICAgICBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QKLSAgICByZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlCi0gICAgb3V0cHV0IG1pZ2h0IGluY2x1ZGUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuIGBgaW5kZW50YGAgaXMgc3BlY2lmaWVkLgotICAgIFlvdSBjYW4gdXNlIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCisgICAgcmVwcmVzZW50YXRpb24uCiAKLSAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKLSAgICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4KLSAgICBgYCgnLCcsICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCisgICAgSWYgc3BlY2lmaWVkLCBgYHNlcGFyYXRvcnNgYCBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCiAgICAgYGBkZWZhdWx0KG9iailgYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uCiAgICAgb2Ygb2JqIG9yIHJhaXNlIFR5cGVFcnJvci4gVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyBUeXBlRXJyb3IuCkBAIC0yMDksMTMgKzIwNywxMiBAQAogICAgIElmIGBgaW5kZW50YGAgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFuZAogICAgIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGluZGVudCBsZXZlbC4gQW4gaW5kZW50CiAgICAgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgYE5vbmVgYCBpcyB0aGUgbW9zdCBjb21wYWN0Ci0gICAgcmVwcmVzZW50YXRpb24uICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZQotICAgIG91dHB1dCBtaWdodCBpbmNsdWRlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugd2hlbiBgYGluZGVudGBgIGlzIHNwZWNpZmllZC4KLSAgICBZb3UgY2FuIHVzZSBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgorICAgIHJlcHJlc2VudGF0aW9uLgogCi0gICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlCi0gICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCi0gICAgYGAoJywnLCAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorICAgIElmIHNwZWNpZmllZCwgYGBzZXBhcmF0b3JzYGAgc2hvdWxkIGJlIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKWBgCisgICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAogICAgIGBgZGVmYXVsdChvYmopYGAgaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCByZXR1cm4gYSBzZXJpYWxpemFibGUgdmVyc2lvbgogICAgIG9mIG9iaiBvciByYWlzZSBUeXBlRXJyb3IuIFRoZSBkZWZhdWx0IHNpbXBseSByYWlzZXMgVHlwZUVycm9yLgpAQCAtMzEzLDYgKzMxMCwxMSBAQAogICAgIFRoZSBgYGVuY29kaW5nYGAgYXJndW1lbnQgaXMgaWdub3JlZCBhbmQgZGVwcmVjYXRlZC4KIAogICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIHN0cik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigndGhlIEpTT04gb2JqZWN0IG11c3QgYmUgc3RyLCBub3QgeyFyfScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICBpZiBzLnN0YXJ0c3dpdGgodSdcdWZlZmYnKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5leHBlY3RlZCBVVEYtOCBCT00gKGRlY29kZSB1c2luZyB1dGYtOC1zaWcpIikKICAgICBpZiAoY2xzIGlzIE5vbmUgYW5kIG9iamVjdF9ob29rIGlzIE5vbmUgYW5kCiAgICAgICAgICAgICBwYXJzZV9pbnQgaXMgTm9uZSBhbmQgcGFyc2VfZmxvYXQgaXMgTm9uZSBhbmQKICAgICAgICAgICAgIHBhcnNlX2NvbnN0YW50IGlzIE5vbmUgYW5kIG9iamVjdF9wYWlyc19ob29rIGlzIE5vbmUgYW5kIG5vdCBrdyk6CmRpZmYgLS1naXQgYS9MaWIvanNvbi9kZWNvZGVyLnB5IGIvTGliL2pzb24vZGVjb2Rlci5weQppbmRleCA1MWMzYWE3Li5kYTdlZjljIDEwMDY0NAotLS0gYS9MaWIvanNvbi9kZWNvZGVyLnB5CisrKyBiL0xpYi9qc29uL2RlY29kZXIucHkKQEAgLTEsOSArMSw2IEBACiAiIiJJbXBsZW1lbnRhdGlvbiBvZiBKU09ORGVjb2RlcgogIiIiCi1pbXBvcnQgYmluYXNjaWkKIGltcG9ydCByZQotaW1wb3J0IHN5cwotaW1wb3J0IHN0cnVjdAogCiBmcm9tIGpzb24gaW1wb3J0IHNjYW5uZXIKIHRyeToKQEAgLTE1LDE0ICsxMiw5IEBACiAKIEZMQUdTID0gcmUuVkVSQk9TRSB8IHJlLk1VTFRJTElORSB8IHJlLkRPVEFMTAogCi1kZWYgX2Zsb2F0Y29uc3RhbnRzKCk6Ci0gICAgX0JZVEVTID0gYmluYXNjaWkudW5oZXhsaWZ5KGInN0ZGODAwMDAwMDAwMDAwMDdGRjAwMDAwMDAwMDAwMDAnKQotICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIF9CWVRFUyA9IF9CWVRFU1s6OF1bOjotMV0gKyBfQllURVNbODpdWzo6LTFdCi0gICAgbmFuLCBpbmYgPSBzdHJ1Y3QudW5wYWNrKCdkZCcsIF9CWVRFUykKLSAgICByZXR1cm4gbmFuLCBpbmYsIC1pbmYKLQotTmFOLCBQb3NJbmYsIE5lZ0luZiA9IF9mbG9hdGNvbnN0YW50cygpCitOYU4gPSBmbG9hdCgnbmFuJykKK1Bvc0luZiA9IGZsb2F0KCdpbmYnKQorTmVnSW5mID0gZmxvYXQoJy1pbmYnKQogCiAKIGRlZiBsaW5lY29sKGRvYywgcG9zKToKQEAgLTE5Niw4ICsxODgsOCBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBzY2FuX29uY2UocywgZW5kKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICBwYWlyc19hcHBlbmQoKGtleSwgdmFsdWUpKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0Y2hhciA9IHNbZW5kXQpAQCAtMjQwLDggKzIzMiw4IEBACiAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShzLCBlbmQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHZhbHVlIiwgcywgZXJyLnZhbHVlKSkgZnJvbSBOb25lCiAgICAgICAgIF9hcHBlbmQodmFsdWUpCiAgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KICAgICAgICAgaWYgbmV4dGNoYXIgaW4gX3dzOgpAQCAtMjUxLDcgKzI0Myw3IEBACiAgICAgICAgIGlmIG5leHRjaGFyID09ICddJzoKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJywnOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcywgZW5kKSkKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHMsIGVuZCAtIDEpKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzW2VuZF0gaW4gX3dzOgogICAgICAgICAgICAgICAgIGVuZCArPSAxCkBAIC0zNjYsNiArMzU4LDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9iaiwgZW5kID0gc2VsZi5zY2FuX29uY2UocywgaWR4KQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk5vIEpTT04gb2JqZWN0IGNvdWxkIGJlIGRlY29kZWQiKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHZhbHVlIiwgcywgZXJyLnZhbHVlKSkgZnJvbSBOb25lCiAgICAgICAgIHJldHVybiBvYmosIGVuZApkaWZmIC0tZ2l0IGEvTGliL2pzb24vZW5jb2Rlci5weSBiL0xpYi9qc29uL2VuY29kZXIucHkKaW5kZXggMWQ4YjIwYy4uMDUxMzgzOCAxMDA2NDQKLS0tIGEvTGliL2pzb24vZW5jb2Rlci5weQorKysgYi9MaWIvanNvbi9lbmNvZGVyLnB5CkBAIC0xMjUsMTQgKzEyNSwxMiBAQAogICAgICAgICBJZiBpbmRlbnQgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5CiAgICAgICAgIGVsZW1lbnRzIGFuZCBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdAogICAgICAgICBpbmRlbnQgbGV2ZWwuICBBbiBpbmRlbnQgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLgotICAgICAgICBOb25lIGlzIHRoZSBtb3N0IGNvbXBhY3QgcmVwcmVzZW50YXRpb24uICBTaW5jZSB0aGUgZGVmYXVsdAotICAgICAgICBpdGVtIHNlcGFyYXRvciBpcyAnLCAnLCAgdGhlIG91dHB1dCBtaWdodCBpbmNsdWRlIHRyYWlsaW5nCi0gICAgICAgIHdoaXRlc3BhY2Ugd2hlbiBpbmRlbnQgaXMgc3BlY2lmaWVkLiAgWW91IGNhbiB1c2UKLSAgICAgICAgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSB0byBhdm9pZCB0aGlzLgorICAgICAgICBOb25lIGlzIHRoZSBtb3N0IGNvbXBhY3QgcmVwcmVzZW50YXRpb24uCiAKLSAgICAgICAgSWYgc3BlY2lmaWVkLCBzZXBhcmF0b3JzIHNob3VsZCBiZSBhIChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcikKLSAgICAgICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyAoJywgJywgJzogJykuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OCi0gICAgICAgIHJlcHJlc2VudGF0aW9uIHlvdSBzaG91bGQgc3BlY2lmeSAoJywnLCAnOicpIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorICAgICAgICBJZiBzcGVjaWZpZWQsIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGFuIChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcikKKyAgICAgICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyAoJywgJywgJzogJykgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICAgICAgICgnLCcsICc6ICcpIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICAgICAgIHlvdSBzaG91bGQgc3BlY2lmeSAoJywnLCAnOicpIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCiAgICAgICAgIElmIHNwZWNpZmllZCwgZGVmYXVsdCBpcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIG9iamVjdHMKICAgICAgICAgdGhhdCBjYW4ndCBvdGhlcndpc2UgYmUgc2VyaWFsaXplZC4gIEl0IHNob3VsZCByZXR1cm4gYSBKU09OIGVuY29kYWJsZQpAQCAtMTQ4LDYgKzE0Niw4IEBACiAgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CiAgICAgICAgIGlmIHNlcGFyYXRvcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJhdG9yLCBzZWxmLmtleV9zZXBhcmF0b3IgPSBzZXBhcmF0b3JzCisgICAgICAgIGVsaWYgaW5kZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5pdGVtX3NlcGFyYXRvciA9ICcsJwogICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5kZWZhdWx0ID0gZGVmYXVsdAogCkBAIC0xNzUsNiArMTc1LDcgQEAKICAgICBkZWYgZW5jb2RlKHNlbGYsIG8pOgogICAgICAgICAiIiJSZXR1cm4gYSBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBkYXRhIHN0cnVjdHVyZS4KIAorICAgICAgICA+Pj4gZnJvbSBqc29uLmVuY29kZXIgaW1wb3J0IEpTT05FbmNvZGVyCiAgICAgICAgID4+PiBKU09ORW5jb2RlcigpLmVuY29kZSh7ImZvbyI6IFsiYmFyIiwgImJheiJdfSkKICAgICAgICAgJ3siZm9vIjogWyJiYXIiLCAiYmF6Il19JwogCkBAIC0yOTgsOSArMjk5LDEzIEBACiAgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArICdmYWxzZScKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBTdWJjbGFzc2VzIG9mIGludC9mbG9hdCBtYXkgb3ZlcnJpZGUgX19zdHJfXywgYnV0IHdlIHN0aWxsCisgICAgICAgICAgICAgICAgIyB3YW50IHRvIGVuY29kZSB0aGVtIGFzIGludGVnZXJzL2Zsb2F0cyBpbiBKU09OLiBPbmUgZXhhbXBsZQorICAgICAgICAgICAgICAgICMgd2l0aGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGlzIEludEVudW0uCisgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgc3RyKGludCh2YWx1ZSkpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBfZmxvYXRzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm92ZSBmb3IgaW50CisgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgX2Zsb2F0c3RyKGZsb2F0KHZhbHVlKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgeWllbGQgYnVmCiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CkBAIC0zMDksOCArMzE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfZGljdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlKHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGNodW5rcwogICAgICAgICBpZiBuZXdsaW5lX2luZGVudCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCAtPSAxCiAgICAgICAgICAgICB5aWVsZCAnXG4nICsgX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbApAQCAtMzQ3LDcgKzM1MSw4IEBACiAgICAgICAgICAgICAjIEphdmFTY3JpcHQgaXMgd2Vha2x5IHR5cGVkIGZvciB0aGVzZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8KICAgICAgICAgICAgICMgYWxzbyBhbGxvdyB0aGVtLiAgTWFueSBlbmNvZGVycyBzZWVtIHRvIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMuCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAga2V5ID0gX2Zsb2F0c3RyKGtleSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIGtleSA9IF9mbG9hdHN0cihmbG9hdChrZXkpKQogICAgICAgICAgICAgZWxpZiBrZXkgaXMgVHJ1ZToKICAgICAgICAgICAgICAgICBrZXkgPSAndHJ1ZScKICAgICAgICAgICAgIGVsaWYga2V5IGlzIEZhbHNlOgpAQCAtMzU1LDcgKzM2MCw4IEBACiAgICAgICAgICAgICBlbGlmIGtleSBpcyBOb25lOgogICAgICAgICAgICAgICAgIGtleSA9ICdudWxsJwogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgaW50KToKLSAgICAgICAgICAgICAgICBrZXkgPSBzdHIoa2V5KQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAga2V5ID0gc3RyKGludChrZXkpKQogICAgICAgICAgICAgZWxpZiBfc2tpcGtleXM6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNzUsOSArMzgxLDExIEBACiAgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkICdmYWxzZScKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICB5aWVsZCBzdHIoaW50KHZhbHVlKSkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cih2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cihmbG9hdCh2YWx1ZSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9saXN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCkBAIC0zODUsOCArMzkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfZGljdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlKHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCi0gICAgICAgICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGNodW5rcwogICAgICAgICBpZiBuZXdsaW5lX2luZGVudCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIF9jdXJyZW50X2luZGVudF9sZXZlbCAtPSAxCiAgICAgICAgICAgICB5aWVsZCAnXG4nICsgX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbApAQCAtNDA0LDE1ICs0MTEsMTUgQEAKICAgICAgICAgZWxpZiBvIGlzIEZhbHNlOgogICAgICAgICAgICAgeWllbGQgJ2ZhbHNlJwogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgaW50KToKLSAgICAgICAgICAgIHlpZWxkIHN0cihvKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgIHlpZWxkIHN0cihpbnQobykpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBmbG9hdCk6Ci0gICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIobykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIoZmxvYXQobykpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZV9saXN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBkaWN0KToKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZV9kaWN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2l0ZXJlbmNvZGVfZGljdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobykKQEAgLTQyMCw4ICs0MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQogICAgICAgICAgICAgICAgIG1hcmtlcnNbbWFya2VyaWRdID0gbwogICAgICAgICAgICAgbyA9IF9kZWZhdWx0KG8pCi0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGUobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgeWllbGQgZnJvbSBfaXRlcmVuY29kZShvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQogICAgIHJldHVybiBfaXRlcmVuY29kZQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vc2Nhbm5lci5weSBiL0xpYi9qc29uL3NjYW5uZXIucHkKaW5kZXggMjNlZWY2MS4uODY0MjZjZCAxMDA2NDQKLS0tIGEvTGliL2pzb24vc2Nhbm5lci5weQorKysgYi9MaWIvanNvbi9zY2FubmVyLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5leHRjaGFyID0gc3RyaW5nW2lkeF0KICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKGlkeCkKIAogICAgICAgICBpZiBuZXh0Y2hhciA9PSAnIic6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2Vfc3RyaW5nKHN0cmluZywgaWR4ICsgMSwgc3RyaWN0KQpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBlbGlmIG5leHRjaGFyID09ICctJyBhbmQgc3RyaW5nW2lkeDppZHggKyA5XSA9PSAnLUluZmluaXR5JzoKICAgICAgICAgICAgIHJldHVybiBwYXJzZV9jb25zdGFudCgnLUluZmluaXR5JyksIGlkeCArIDkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oaWR4KQogCiAgICAgZGVmIHNjYW5fb25jZShzdHJpbmcsIGlkeCk6CiAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rvb2wucHkgYi9MaWIvanNvbi90b29sLnB5CmluZGV4IGVjZjljNDcuLjdkYjQ1MjggMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rvb2wucHkKKysrIGIvTGliL2pzb24vdG9vbC5weQpAQCAtMzEsOCArMzEsNyBAQAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChlKQogICAgIHdpdGggb3V0ZmlsZToKLSAgICAgICAganNvbi5kdW1wKG9iaiwgb3V0ZmlsZSwgc29ydF9rZXlzPVRydWUsCi0gICAgICAgICAgICAgICAgICBpbmRlbnQ9NCwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkKKyAgICAgICAganNvbi5kdW1wKG9iaiwgb3V0ZmlsZSwgc29ydF9rZXlzPVRydWUsIGluZGVudD00KQogICAgICAgICBvdXRmaWxlLndyaXRlKCdcbicpCiAKIApkaWZmIC0tZ2l0IGEvTGliL2tleXdvcmQucHkgYi9MaWIva2V5d29yZC5weQppbmRleCBkYWQzOWNjLi42ZTFlODgyIDEwMDc1NQotLS0gYS9MaWIva2V5d29yZC5weQorKysgYi9MaWIva2V5d29yZC5weQpAQCAtNjAsNiArNjAsMTIgQEAKICAgICBpZiBsZW4oYXJncykgPiAxOiBvcHRmaWxlID0gYXJnc1sxXQogICAgIGVsc2U6IG9wdGZpbGUgPSAiTGliL2tleXdvcmQucHkiCiAKKyAgICAjIGxvYWQgdGhlIG91dHB1dCBza2VsZXRvbiBmcm9tIHRoZSB0YXJnZXQsIHRha2luZyBjYXJlIHRvIHByZXNlcnZlIGl0cworICAgICMgbmV3bGluZSBjb252ZW50aW9uLgorICAgIHdpdGggb3BlbihvcHRmaWxlLCBuZXdsaW5lPScnKSBhcyBmcDoKKyAgICAgICAgZm9ybWF0ID0gZnAucmVhZGxpbmVzKCkKKyAgICBubCA9IGZvcm1hdFswXVtsZW4oZm9ybWF0WzBdLnN0cmlwKCkpOl0gaWYgZm9ybWF0IGVsc2UgJ1xuJworCiAgICAgIyBzY2FuIHRoZSBzb3VyY2UgZmlsZSBmb3Iga2V5d29yZHMKICAgICB3aXRoIG9wZW4oaXB0ZmlsZSkgYXMgZnA6CiAgICAgICAgIHN0cnByb2cgPSByZS5jb21waWxlKCciKFteIl0rKSInKQpAQCAtNjgsMjYgKzc0LDIxIEBACiAgICAgICAgICAgICBpZiAnezEsICInIGluIGxpbmU6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBzdHJwcm9nLnNlYXJjaChsaW5lKQogICAgICAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICAgICAgJyIgKyBtYXRjaC5ncm91cCgxKSArICInLFxuIikKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgICAgICciICsgbWF0Y2guZ3JvdXAoMSkgKyAiJywiICsgbmwpCiAgICAgbGluZXMuc29ydCgpCiAKLSAgICAjIGxvYWQgdGhlIG91dHB1dCBza2VsZXRvbiBmcm9tIHRoZSB0YXJnZXQKLSAgICB3aXRoIG9wZW4ob3B0ZmlsZSkgYXMgZnA6Ci0gICAgICAgIGZvcm1hdCA9IGZwLnJlYWRsaW5lcygpCi0KLSAgICAjIGluc2VydCB0aGUgbGluZXMgb2Yga2V5d29yZHMKKyAgICAjIGluc2VydCB0aGUgbGluZXMgb2Yga2V5d29yZHMgaW50byB0aGUgc2tlbGV0b24KICAgICB0cnk6Ci0gICAgICAgIHN0YXJ0ID0gZm9ybWF0LmluZGV4KCIjLS1zdGFydCBrZXl3b3Jkcy0tXG4iKSArIDEKLSAgICAgICAgZW5kID0gZm9ybWF0LmluZGV4KCIjLS1lbmQga2V5d29yZHMtLVxuIikKKyAgICAgICAgc3RhcnQgPSBmb3JtYXQuaW5kZXgoIiMtLXN0YXJ0IGtleXdvcmRzLS0iICsgbmwpICsgMQorICAgICAgICBlbmQgPSBmb3JtYXQuaW5kZXgoIiMtLWVuZCBrZXl3b3Jkcy0tIiArIG5sKQogICAgICAgICBmb3JtYXRbc3RhcnQ6ZW5kXSA9IGxpbmVzCiAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInRhcmdldCBkb2VzIG5vdCBjb250YWluIGZvcm1hdCBtYXJrZXJzXG4iKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAgICAgIyB3cml0ZSB0aGUgb3V0cHV0IGZpbGUKLSAgICBmcCA9IG9wZW4ob3B0ZmlsZSwgJ3cnKQotICAgIGZwLndyaXRlKCcnLmpvaW4oZm9ybWF0KSkKLSAgICBmcC5jbG9zZSgpCisgICAgd2l0aCBvcGVuKG9wdGZpbGUsICd3JywgbmV3bGluZT0nJykgYXMgZnA6CisgICAgICAgIGZwLndyaXRlbGluZXMoZm9ybWF0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5IGIvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CmluZGV4IDIyNzZkYzkuLjMzOTc1MGUgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2J0bV91dGlscy5weQorKysgYi9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKQEAgLTk2LDggKzk2LDcgQEAKICAgICBkZWYgbGVhdmVzKHNlbGYpOgogICAgICAgICAiR2VuZXJhdG9yIHRoYXQgcmV0dXJucyB0aGUgbGVhdmVzIG9mIHRoZSB0cmVlIgogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciB4IGluIGNoaWxkLmxlYXZlcygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQubGVhdmVzKCkKICAgICAgICAgaWYgbm90IHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgICB5aWVsZCBzZWxmCiAKQEAgLTI3Nyw3ICsyNzYsNiBAQAogICAgIHN1Yi1pdGVyYWJsZXMiIiIKICAgICBmb3IgeCBpbiBzZXF1ZW5jZToKICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAgIGZvciB5IGluIHJlY190ZXN0KHgsIHRlc3RfZnVuYyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeQorICAgICAgICAgICAgeWllbGQgZnJvbSByZWNfdGVzdCh4LCB0ZXN0X2Z1bmMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB5aWVsZCB0ZXN0X2Z1bmMoeCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkgYi9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CmluZGV4IDYwZDIxOWYuLjZlMjU5YzUgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQpAQCAtMTI5LDYgKzEyOSwyOSBAQAogICAgIGltcCA9IE5vZGUoc3ltcy5pbXBvcnRfZnJvbSwgY2hpbGRyZW4pCiAgICAgcmV0dXJuIGltcAogCitkZWYgSW1wb3J0QW5kQ2FsbChub2RlLCByZXN1bHRzLCBuYW1lcyk6CisgICAgIiIiUmV0dXJucyBhbiBpbXBvcnQgc3RhdGVtZW50IGFuZCBjYWxscyBhIG1ldGhvZAorICAgIG9mIHRoZSBtb2R1bGU6CisKKyAgICBpbXBvcnQgbW9kdWxlCisgICAgbW9kdWxlLm5hbWUoKSIiIgorICAgIG9iaiA9IHJlc3VsdHNbIm9iaiJdLmNsb25lKCkKKyAgICBpZiBvYmoudHlwZSA9PSBzeW1zLmFyZ2xpc3Q6CisgICAgICAgIG5ld2FyZ2xpc3QgPSBvYmouY2xvbmUoKQorICAgIGVsc2U6CisgICAgICAgIG5ld2FyZ2xpc3QgPSBOb2RlKHN5bXMuYXJnbGlzdCwgW29iai5jbG9uZSgpXSkKKyAgICBhZnRlciA9IHJlc3VsdHNbImFmdGVyIl0KKyAgICBpZiBhZnRlcjoKKyAgICAgICAgYWZ0ZXIgPSBbbi5jbG9uZSgpIGZvciBuIGluIGFmdGVyXQorICAgIG5ldyA9IE5vZGUoc3ltcy5wb3dlciwKKyAgICAgICAgICAgICAgIEF0dHIoTmFtZShuYW1lc1swXSksIE5hbWUobmFtZXNbMV0pKSArCisgICAgICAgICAgICAgICBbTm9kZShzeW1zLnRyYWlsZXIsCisgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0c1sibHBhciJdLmNsb25lKCksCisgICAgICAgICAgICAgICAgICAgICAgbmV3YXJnbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJycGFyIl0uY2xvbmUoKV0pXSArIGFmdGVyKQorICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAorICAgIHJldHVybiBuZXcKKwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIERldGVybWluZSB3aGV0aGVyIGEgbm9kZSByZXByZXNlbnRzIGEgZ2l2ZW4gbGl0ZXJhbApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKaW5kZXggNmJlMTFjZC4uZmIyOTczYyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CkBAIC02LDkgKzYsOCBAQAogaW50ZXJuKHMpIC0+IHN5cy5pbnRlcm4ocykiIiIKIAogIyBMb2NhbCBpbXBvcnRzCi1mcm9tIC4uIGltcG9ydCBweXRyZWUKIGZyb20gLi4gaW1wb3J0IGZpeGVyX2Jhc2UKLWZyb20gLi5maXhlcl91dGlsIGltcG9ydCBOYW1lLCBBdHRyLCB0b3VjaF9pbXBvcnQKK2Zyb20gLi5maXhlcl91dGlsIGltcG9ydCBJbXBvcnRBbmRDYWxsLCB0b3VjaF9pbXBvcnQKIAogCiBjbGFzcyBGaXhJbnRlcm4oZml4ZXJfYmFzZS5CYXNlRml4KToKQEAgLTI2LDIxICsyNSw3IEBACiAgICAgIiIiCiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgotICAgICAgICBzeW1zID0gc2VsZi5zeW1zCi0gICAgICAgIG9iaiA9IHJlc3VsdHNbIm9iaiJdLmNsb25lKCkKLSAgICAgICAgaWYgb2JqLnR5cGUgPT0gc3ltcy5hcmdsaXN0OgotICAgICAgICAgICAgbmV3YXJnbGlzdCA9IG9iai5jbG9uZSgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuZXdhcmdsaXN0ID0gcHl0cmVlLk5vZGUoc3ltcy5hcmdsaXN0LCBbb2JqLmNsb25lKCldKQotICAgICAgICBhZnRlciA9IHJlc3VsdHNbImFmdGVyIl0KLSAgICAgICAgaWYgYWZ0ZXI6Ci0gICAgICAgICAgICBhZnRlciA9IFtuLmNsb25lKCkgZm9yIG4gaW4gYWZ0ZXJdCi0gICAgICAgIG5ldyA9IHB5dHJlZS5Ob2RlKHN5bXMucG93ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIoTmFtZSgic3lzIiksIE5hbWUoImludGVybiIpKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFtweXRyZWUuTm9kZShzeW1zLnRyYWlsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0c1sibHBhciJdLmNsb25lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3YXJnbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJycGFyIl0uY2xvbmUoKV0pXSArIGFmdGVyKQotICAgICAgICBuZXcucHJlZml4ID0gbm9kZS5wcmVmaXgKKyAgICAgICAgbmFtZXMgPSAoJ3N5cycsICdpbnRlcm4nKQorICAgICAgICBuZXcgPSBJbXBvcnRBbmRDYWxsKG5vZGUsIHJlc3VsdHMsIG5hbWVzKQogICAgICAgICB0b3VjaF9pbXBvcnQoTm9uZSwgJ3N5cycsIG5vZGUpCiAgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTUzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5CkBAIC0wLDAgKzEsMjggQEAKKyIiIkZpeGVyIGZvciByZWxvYWQoKS4KKworcmVsb2FkKHMpIC0+IGltcC5yZWxvYWQocykiIiIKKworIyBMb2NhbCBpbXBvcnRzCitmcm9tIC4uIGltcG9ydCBmaXhlcl9iYXNlCitmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgSW1wb3J0QW5kQ2FsbCwgdG91Y2hfaW1wb3J0CisKKworY2xhc3MgRml4UmVsb2FkKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKyAgICBvcmRlciA9ICJwcmUiCisKKyAgICBQQVRURVJOID0gIiIiCisgICAgcG93ZXI8ICdyZWxvYWQnCisgICAgICAgICAgIHRyYWlsZXI8IGxwYXI9JygnCisgICAgICAgICAgICAgICAgICAgICggbm90KGFyZ2xpc3QgfCBhcmd1bWVudDxhbnkgJz0nIGFueT4pIG9iaj1hbnkKKyAgICAgICAgICAgICAgICAgICAgICB8IG9iaj1hcmdsaXN0PChub3QgYXJndW1lbnQ8YW55ICc9JyBhbnk+KSBhbnkgJywnPiApCisgICAgICAgICAgICAgICAgICAgIHJwYXI9JyknID4KKyAgICAgICAgICAgYWZ0ZXI9YW55KgorICAgID4KKyAgICAiIiIKKworICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG5hbWVzID0gKCdpbXAnLCAncmVsb2FkJykKKyAgICAgICAgbmV3ID0gSW1wb3J0QW5kQ2FsbChub2RlLCByZXN1bHRzLCBuYW1lcykKKyAgICAgICAgdG91Y2hfaW1wb3J0KE5vbmUsICdpbXAnLCBub2RlKQorICAgICAgICByZXR1cm4gbmV3CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9tYWluLnB5IGIvTGliL2xpYjJ0bzMvbWFpbi5weQppbmRleCBmOWNjMThiLi45M2JhZTkwIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9tYWluLnB5CisrKyBiL0xpYi9saWIydG8zL21haW4ucHkKQEAgLTkwLDExICs5MCwxMSBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGJhY2t1cCk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoYmFja3VwKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJDYW4ndCByZW1vdmUgYmFja3VwICVzIiwgYmFja3VwKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgYmFja3VwKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJDYW4ndCByZW5hbWUgJXMgdG8gJXMiLCBmaWxlbmFtZSwgYmFja3VwKQogICAgICAgICAjIEFjdHVhbGx5IHdyaXRlIHRoZSBuZXcgZmlsZQogICAgICAgICB3cml0ZSA9IHN1cGVyKFN0ZG91dFJlZmFjdG9yaW5nVG9vbCwgc2VsZikud3JpdGVfZmlsZQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weSBiL0xpYi9saWIydG8zL3BnZW4yL2NvbnYucHkKaW5kZXggYmY0OTc2Mi4uZWQwY2FjNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgb3BlbiAlczogJXMiICUgKGZpbGVuYW1lLCBlcnIpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHNlbGYuc3ltYm9sMm51bWJlciA9IHt9CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCBvcGVuICVzOiAlcyIgJSAoZmlsZW5hbWUsIGVycikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBUaGUgY29kZSBiZWxvdyBlc3NlbnRpYWxseSB1c2VzIGYncyBpdGVyYXRvci1uZXNzIQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CmluZGV4IDRjNjExYzYuLjNjY2M2OWQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIldyaXRpbmcgZ3JhbW1hciB0YWJsZXMgdG8gJXMiLCBncCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBnLmR1bXAoZ3ApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiV3JpdGluZyBmYWlsZWQ6IitzdHIoZSkpCiAgICAgZWxzZToKICAgICAgICAgZyA9IGdyYW1tYXIuR3JhbW1hcigpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZ3JhbW1hci5weQppbmRleCAxNGM1ZjcwLi43ZjFjNTY0IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkKQEAgLTg2LDE1ICs4NiwxMyBAQAogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJEdW1wIHRoZSBncmFtbWFyIHRhYmxlcyB0byBhIHBpY2tsZSBmaWxlLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgIndiIikKLSAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5fX2RpY3RfXywgZiwgMikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYuX19kaWN0X18sIGYsIDIpCiAKICAgICBkZWYgbG9hZChzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkxvYWQgdGhlIGdyYW1tYXIgdGFibGVzIGZyb20gYSBwaWNrbGUgZmlsZS4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgICAgIGQgPSBwaWNrbGUubG9hZChmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZCA9IHBpY2tsZS5sb2FkKGYpCiAgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGQpCiAKICAgICBkZWYgY29weShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3B5dHJlZS5weSBiL0xpYi9saWIydG8zL3B5dHJlZS5weQppbmRleCAxN2NiZjBhLi5jNGExYmUzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9weXRyZWUucHkKKysrIGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CkBAIC0xOTQsOCArMTk0LDcgQEAKIAogICAgIGRlZiBsZWF2ZXMoc2VsZik6CiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIHggaW4gY2hpbGQubGVhdmVzKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeAorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5sZWF2ZXMoKQogCiAgICAgZGVmIGRlcHRoKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBOb25lOgpAQCAtMjc0LDE2ICsyNzMsMTQgQEAKICAgICBkZWYgcG9zdF9vcmRlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcG9zdC1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIG5vZGUgaW4gY2hpbGQucG9zdF9vcmRlcigpOgotICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQucG9zdF9vcmRlcigpCiAgICAgICAgIHlpZWxkIHNlbGYKIAogICAgIGRlZiBwcmVfb3JkZXIoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHByZS1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCiAgICAgICAgIHlpZWxkIHNlbGYKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wcmVfb3JkZXIoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBub2RlCisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLnByZV9vcmRlcigpCiAKICAgICBkZWYgX3ByZWZpeF9nZXR0ZXIoc2VsZik6CiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQppbmRleCAyMDFlMTkzLi44MTAwMzE3IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQorKysgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlczogJXMiLCBmaWxlbmFtZSwgZXJyKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKICAgICAgICAgdHJ5OgpAQCAtNTM0LDEyICs1MzQsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfb3Blbl93aXRoX2VuY29kaW5nKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3QgY3JlYXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShfdG9fc3lzdGVtX25ld2xpbmVzKG5ld190ZXh0KSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNhbid0IHdyaXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQppbmRleCBhMDJiYmZlLi43MzFjNDAzIDEwMDc1NQotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CkBAIC01Myw3ICs1Myw3IEBACiAgICAgZm9yIGRpciBpbiBzeXMucGF0aDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHByaW50KCJTY2FubmluZyIsIGRpciwgIi4uLiIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CmluZGV4IDI0NjQ0NDYuLjViMTZiYzMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CkBAIC0yODIsNiArMjgyLDY1IEBACiAgICAgICAgIGIgPSAiIiJmKCphcmdzLCAqKmt3ZHMpIiIiCiAgICAgICAgIHNlbGYuY2hlY2soYSwgYikKIAorY2xhc3MgVGVzdF9yZWxvYWQoRml4ZXJUZXN0Q2FzZSk6CisgICAgZml4ZXIgPSAicmVsb2FkIgorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoYSkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoYSkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfY29tbWVudChzZWxmKToKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSApICMgY29tbWVudCIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApICMgY29tbWVudCIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgIyBQRVAgOCBjb21tZW50cworICAgICAgICBiID0gIiIicmVsb2FkKCBhICkgICMgY29tbWVudCIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApICAjIGNvbW1lbnQiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3Rfc3BhY2Uoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEgKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICBiID0gIiIicmVsb2FkKCBhKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAiIiJyZWxvYWQoYSApIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKGEgKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6CisgICAgICAgIHMgPSAiIiJyZWxvYWQoYT0xKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgZykiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICpoKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgKmgsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCpoLCAqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgqaCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKwogY2xhc3MgVGVzdF9pbnRlcm4oRml4ZXJUZXN0Q2FzZSk6CiAgICAgZml4ZXIgPSAiaW50ZXJuIgogCmRpZmYgLS1naXQgYS9MaWIvbGluZWNhY2hlLnB5IGIvTGliL2xpbmVjYWNoZS5weQppbmRleCBjM2YyYzNmLi4wMmE5ZWI1IDEwMDY0NAotLS0gYS9MaWIvbGluZWNhY2hlLnB5CisrKyBiL0xpYi9saW5lY2FjaGUucHkKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlICAgIyBuby1vcCBmb3IgZmlsZXMgbG9hZGVkIHZpYSBhIF9fbG9hZGVyX18KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3RhdCA9IG9zLnN0YXQoZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBkZWwgY2FjaGVbZmlsZW5hbWVdCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBzaXplICE9IHN0YXQuc3Rfc2l6ZSBvciBtdGltZSAhPSBzdGF0LnN0X210aW1lOgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgaWYgbmFtZSBhbmQgZ2V0X3NvdXJjZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRfc291cmNlKG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CkBAIC0xMTgsMTQgKzExOCwxNCBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0YXQgPSBvcy5zdGF0KGZ1bGxuYW1lKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICB0cnk6CiAgICAgICAgIHdpdGggdG9rZW5pemUub3BlbihmdWxsbmFtZSkgYXMgZnA6CiAgICAgICAgICAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBbXQogICAgIGlmIGxpbmVzIGFuZCBub3QgbGluZXNbLTFdLmVuZHN3aXRoKCdcbicpOgogICAgICAgICBsaW5lc1stMV0gKz0gJ1xuJwpkaWZmIC0tZ2l0IGEvTGliL2xvY2FsZS5weSBiL0xpYi9sb2NhbGUucHkKaW5kZXggZDJhODg1ZC4uMmU4MmM5NSAxMDA2NDQKLS0tIGEvTGliL2xvY2FsZS5weQorKysgYi9MaWIvbG9jYWxlLnB5CkBAIC01NTQsOCArNTU0LDggQEAKICAgICAjIE9uIFdpbjMyLCB0aGlzIHdpbGwgcmV0dXJuIHRoZSBBTlNJIGNvZGUgcGFnZQogICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUgPSBUcnVlKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjaGFyc2V0IHRoYXQgdGhlIHVzZXIgaXMgbGlrZWx5IHVzaW5nLiIiIgotICAgICAgICBpbXBvcnQgX2xvY2FsZQotICAgICAgICByZXR1cm4gX2xvY2FsZS5fZ2V0ZGVmYXVsdGxvY2FsZSgpWzFdCisgICAgICAgIGltcG9ydCBfYm9vdGxvY2FsZQorICAgICAgICByZXR1cm4gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCiBlbHNlOgogICAgICMgT24gVW5peCwgaWYgQ09ERVNFVCBpcyBhdmFpbGFibGUsIHVzZSB0aGF0LgogICAgIHRyeToKQEAgLTU3NCwyNyArNTc0LDE2IEBACiAgICAgICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUgPSBUcnVlKToKICAgICAgICAgICAgICIiIlJldHVybiB0aGUgY2hhcnNldCB0aGF0IHRoZSB1c2VyIGlzIGxpa2VseSB1c2luZywKICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIiIiCisgICAgICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUKICAgICAgICAgICAgIGlmIGRvX3NldGxvY2FsZToKICAgICAgICAgICAgICAgICBvbGRsb2MgPSBzZXRsb2NhbGUoTENfQ1RZUEUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfQ1RZUEUsICIiKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5sX2xhbmdpbmZvKENPREVTRVQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgICAgICAjIG5sX2xhbmdpbmZvIGNhbiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICMgd2hlbiB0aGUgc2V0dGluZyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgIyBEZWZhdWx0IHRvIFVURi04IGluIHRoYXQgY2FzZSBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICAgICMgVVRGLTggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBvbiBPU1ggYW5kCi0gICAgICAgICAgICAgICAgICAgICMgcmV0dXJuaW5nIG5vdGhpbmcgd2lsbCBjcmFzaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBpbnRlcnByZXRlci4KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JworICAgICAgICAgICAgcmVzdWx0ID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCisgICAgICAgICAgICBpZiBkb19zZXRsb2NhbGU6CiAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX0NUWVBFLCBvbGRsb2MpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5sX2xhbmdpbmZvKENPREVTRVQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgICAgICAjIFNlZSBhYm92ZSBmb3IgZXhwbGFuYXRpb24KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5IGIvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKaW5kZXggNGNlZjY2Zi4uOTM1OWFmYiAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKKysrIGIvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIHRoZSBmcmFtZSBvYmplY3QgZm9yIHRoZSBjYWxsZXIncyBzdGFjayBmcmFtZS4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKIAogIyBfc3JjZmlsZSBpcyBvbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzeXMuX2dldGZyYW1lKCkuCkBAIC0xMjMsMjAgKzEyMywyMiBAQAogREVCVUcgPSAxMAogTk9UU0VUID0gMAogCi1fbGV2ZWxOYW1lcyA9IHsKLSAgICBDUklUSUNBTCA6ICdDUklUSUNBTCcsCi0gICAgRVJST1IgOiAnRVJST1InLAotICAgIFdBUk5JTkcgOiAnV0FSTklORycsCi0gICAgSU5GTyA6ICdJTkZPJywKLSAgICBERUJVRyA6ICdERUJVRycsCi0gICAgTk9UU0VUIDogJ05PVFNFVCcsCi0gICAgJ0NSSVRJQ0FMJyA6IENSSVRJQ0FMLAotICAgICdFUlJPUicgOiBFUlJPUiwKLSAgICAnV0FSTicgOiBXQVJOSU5HLAotICAgICdXQVJOSU5HJyA6IFdBUk5JTkcsCi0gICAgJ0lORk8nIDogSU5GTywKLSAgICAnREVCVUcnIDogREVCVUcsCi0gICAgJ05PVFNFVCcgOiBOT1RTRVQsCitfbGV2ZWxUb05hbWUgPSB7CisgICAgQ1JJVElDQUw6ICdDUklUSUNBTCcsCisgICAgRVJST1I6ICdFUlJPUicsCisgICAgV0FSTklORzogJ1dBUk5JTkcnLAorICAgIElORk86ICdJTkZPJywKKyAgICBERUJVRzogJ0RFQlVHJywKKyAgICBOT1RTRVQ6ICdOT1RTRVQnLAorfQorX25hbWVUb0xldmVsID0geworICAgICdDUklUSUNBTCc6IENSSVRJQ0FMLAorICAgICdFUlJPUic6IEVSUk9SLAorICAgICdXQVJOJzogV0FSTklORywKKyAgICAnV0FSTklORyc6IFdBUk5JTkcsCisgICAgJ0lORk8nOiBJTkZPLAorICAgICdERUJVRyc6IERFQlVHLAorICAgICdOT1RTRVQnOiBOT1RTRVQsCiB9CiAKIGRlZiBnZXRMZXZlbE5hbWUobGV2ZWwpOgpAQCAtMTUzLDcgKzE1NSw3IEBACiAKICAgICBPdGhlcndpc2UsIHRoZSBzdHJpbmcgIkxldmVsICVzIiAlIGxldmVsIGlzIHJldHVybmVkLgogICAgICIiIgotICAgIHJldHVybiBfbGV2ZWxOYW1lcy5nZXQobGV2ZWwsICgiTGV2ZWwgJXMiICUgbGV2ZWwpKQorICAgIHJldHVybiBfbGV2ZWxUb05hbWUuZ2V0KGxldmVsLCAoIkxldmVsICVzIiAlIGxldmVsKSkKIAogZGVmIGFkZExldmVsTmFtZShsZXZlbCwgbGV2ZWxOYW1lKToKICAgICAiIiIKQEAgLTE2Myw4ICsxNjUsOCBAQAogICAgICIiIgogICAgIF9hY3F1aXJlTG9jaygpCiAgICAgdHJ5OiAgICAjdW5saWtlbHkgdG8gY2F1c2UgYW4gZXhjZXB0aW9uLCBidXQgeW91IG5ldmVyIGtub3cuLi4KLSAgICAgICAgX2xldmVsTmFtZXNbbGV2ZWxdID0gbGV2ZWxOYW1lCi0gICAgICAgIF9sZXZlbE5hbWVzW2xldmVsTmFtZV0gPSBsZXZlbAorICAgICAgICBfbGV2ZWxUb05hbWVbbGV2ZWxdID0gbGV2ZWxOYW1lCisgICAgICAgIF9uYW1lVG9MZXZlbFtsZXZlbE5hbWVdID0gbGV2ZWwKICAgICBmaW5hbGx5OgogICAgICAgICBfcmVsZWFzZUxvY2soKQogCkBAIC0xNzIsOSArMTc0LDkgQEAKICAgICBpZiBpc2luc3RhbmNlKGxldmVsLCBpbnQpOgogICAgICAgICBydiA9IGxldmVsCiAgICAgZWxpZiBzdHIobGV2ZWwpID09IGxldmVsOgotICAgICAgICBpZiBsZXZlbCBub3QgaW4gX2xldmVsTmFtZXM6CisgICAgICAgIGlmIGxldmVsIG5vdCBpbiBfbmFtZVRvTGV2ZWw6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGxldmVsOiAlciIgJSBsZXZlbCkKLSAgICAgICAgcnYgPSBfbGV2ZWxOYW1lc1tsZXZlbF0KKyAgICAgICAgcnYgPSBfbmFtZVRvTGV2ZWxbbGV2ZWxdCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJMZXZlbCBub3QgYW4gaW50ZWdlciBvciBhIHZhbGlkIHN0cmluZzogJXIiICUgbGV2ZWwpCiAgICAgcmV0dXJuIHJ2CkBAIC04ODAsMTYgKzg4MiwzMCBAQAogICAgICAgICBUaGUgcmVjb3JkIHdoaWNoIHdhcyBiZWluZyBwcm9jZXNzZWQgaXMgcGFzc2VkIGluIHRvIHRoaXMgbWV0aG9kLgogICAgICAgICAiIiIKICAgICAgICAgaWYgcmFpc2VFeGNlcHRpb25zIGFuZCBzeXMuc3RkZXJyOiAgIyBzZWUgaXNzdWUgMTM4MDcKLSAgICAgICAgICAgIGVpID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIHQsIHYsIHRiID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKGVpWzBdLCBlaVsxXSwgZWlbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBzeXMuc3RkZXJyKQotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0xvZ2dlZCBmcm9tIGZpbGUgJXMsIGxpbmUgJXNcbicgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuZmlsZW5hbWUsIHJlY29yZC5saW5lbm8pKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6ICNwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tIExvZ2dpbmcgZXJyb3IgLS0tXG4nKQorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24odCwgdiwgdGIsIE5vbmUsIHN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQ2FsbCBzdGFjazpcbicpCisgICAgICAgICAgICAgICAgIyBXYWxrIHRoZSBzdGFjayBmcmFtZSB1cCB1bnRpbCB3ZSdyZSBvdXQgb2YgbG9nZ2luZywKKyAgICAgICAgICAgICAgICAjIHNvIGFzIHRvIHByaW50IHRoZSBjYWxsaW5nIGNvbnRleHQuCisgICAgICAgICAgICAgICAgZnJhbWUgPSB0Yi50Yl9mcmFtZQorICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZSBhbmQgb3MucGF0aC5kaXJuYW1lKGZyYW1lLmZfY29kZS5jb19maWxlbmFtZSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgX19wYXRoX19bMF0pOgorICAgICAgICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLmZfYmFjaworICAgICAgICAgICAgICAgIGlmIGZyYW1lOgorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2soZnJhbWUsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGNvdWxkbid0IGZpbmQgdGhlIHJpZ2h0IHN0YWNrIGZyYW1lLCBmb3Igc29tZSByZWFzb24KKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnTG9nZ2VkIGZyb20gZmlsZSAlcywgbGluZSAlc1xuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuZmlsZW5hbWUsIHJlY29yZC5saW5lbm8pKQorICAgICAgICAgICAgICAgICMgSXNzdWUgMTg2NzE6IG91dHB1dCBsb2dnaW5nIG1lc3NhZ2UgYW5kIGFyZ3VtZW50cworICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ01lc3NhZ2U6ICVyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJndW1lbnRzOiAlc1xuJyAlIChyZWNvcmQubXNnLCByZWNvcmQuYXJncykpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBwYXNzICAgICMgc2VlIGlzc3VlIDU5NzEKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZGVsIGVpCisgICAgICAgICAgICAgICAgZGVsIHQsIHYsIHRiCiAKIGNsYXNzIFN0cmVhbUhhbmRsZXIoSGFuZGxlcik6CiAgICAgIiIiCkBAIC05MzksOSArOTU1LDcgQEAKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShtc2cpCiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoc2VsZi50ZXJtaW5hdG9yKQogICAgICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIEZpbGVIYW5kbGVyKFN0cmVhbUhhbmRsZXIpOgpAQCAtMTgzMSw3ICsxODQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaC5hY3F1aXJlKCkKICAgICAgICAgICAgICAgICAgICAgaC5mbHVzaCgpCiAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgZXJyb3JzIHdoaWNoIG1pZ2h0IGJlIGNhdXNlZAogICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaGFuZGxlcnMgaGF2ZSBiZWVuIGNsb3NlZCBidXQKICAgICAgICAgICAgICAgICAgICAgIyByZWZlcmVuY2VzIHRvIHRoZW0gYXJlIHN0aWxsIGFyb3VuZCBhdApAQCAtMTgzOSw3ICsxODUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIGgucmVsZWFzZSgpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0OiAjIGlnbm9yZSBldmVyeXRoaW5nLCBhcyB3ZSdyZSBzaHV0dGluZyBkb3duCiAgICAgICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICNlbHNlLCBzd2FsbG93CmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9jb25maWcucHkgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKaW5kZXggMTg4MDYxNC4uYjg4MmE2MiAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5CisrKyBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQpAQCAtNjEsMTEgKzYxLDE0IEBACiAgICAgIiIiCiAgICAgaW1wb3J0IGNvbmZpZ3BhcnNlcgogCi0gICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKGRlZmF1bHRzKQotICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgotICAgICAgICBjcC5yZWFkX2ZpbGUoZm5hbWUpCisgICAgaWYgaXNpbnN0YW5jZShmbmFtZSwgY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcik6CisgICAgICAgIGNwID0gZm5hbWUKICAgICBlbHNlOgotICAgICAgICBjcC5yZWFkKGZuYW1lKQorICAgICAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoZGVmYXVsdHMpCisgICAgICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgorICAgICAgICAgICAgY3AucmVhZF9maWxlKGZuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3AucmVhZChmbmFtZSkKIAogICAgIGZvcm1hdHRlcnMgPSBfY3JlYXRlX2Zvcm1hdHRlcnMoY3ApCiAKQEAgLTE0MSw3ICsxNDQsNyBAQAogICAgICAgICBoID0ga2xhc3MoKmFyZ3MpCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgaC5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgICAgIGguc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgIGlmIGxlbihmbXQpOgogICAgICAgICAgICAgaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyc1tmbXRdKQogICAgICAgICBpZiBpc3N1YmNsYXNzKGtsYXNzLCBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIpOgpAQCAtMTg4LDcgKzE5MSw3IEBACiAgICAgbG9nID0gcm9vdAogICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgbG9nLnNldExldmVsKGxldmVsKQogICAgIGZvciBoIGluIHJvb3QuaGFuZGxlcnNbOl06CiAgICAgICAgIHJvb3QucmVtb3ZlSGFuZGxlcihoKQogICAgIGhsaXN0ID0gc2VjdGlvblsiaGFuZGxlcnMiXQpAQCAtMjM0LDcgKzIzNyw3IEBACiAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmUocW4pCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxldmVsKQogICAgICAgICBmb3IgaCBpbiBsb2dnZXIuaGFuZGxlcnNbOl06CiAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQogICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gcHJvcGFnYXRlCkBAIC03MjksNiArNzMyLDcgQEAKICAgICAgICAgICAgICAgICAnYWRkcmVzcycgaW4gY29uZmlnOgogICAgICAgICAgICAgICAgIGNvbmZpZ1snYWRkcmVzcyddID0gc2VsZi5hc190dXBsZShjb25maWdbJ2FkZHJlc3MnXSkKICAgICAgICAgICAgIGZhY3RvcnkgPSBrbGFzcworICAgICAgICBwcm9wcyA9IGNvbmZpZy5wb3AoJy4nLCBOb25lKQogICAgICAgICBrd2FyZ3MgPSBkaWN0KFsoaywgY29uZmlnW2tdKSBmb3IgayBpbiBjb25maWcgaWYgdmFsaWRfaWRlbnQoayldKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5KCoqa3dhcmdzKQpAQCAtNzQ3LDYgKzc1MSw5IEBACiAgICAgICAgICAgICByZXN1bHQuc2V0TGV2ZWwobG9nZ2luZy5fY2hlY2tMZXZlbChsZXZlbCkpCiAgICAgICAgIGlmIGZpbHRlcnM6CiAgICAgICAgICAgICBzZWxmLmFkZF9maWx0ZXJzKHJlc3VsdCwgZmlsdGVycykKKyAgICAgICAgaWYgcHJvcHM6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcHJvcHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwgbmFtZSwgdmFsdWUpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBhZGRfaGFuZGxlcnMoc2VsZiwgbG9nZ2VyLCBoYW5kbGVycyk6CkBAIC03OTUsNyArODAyLDcgQEAKICAgICBkaWN0Q29uZmlnQ2xhc3MoY29uZmlnKS5jb25maWd1cmUoKQogCiAKLWRlZiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQpOgorZGVmIGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpOgogICAgICIiIgogICAgIFN0YXJ0IHVwIGEgc29ja2V0IHNlcnZlciBvbiB0aGUgc3BlY2lmaWVkIHBvcnQsIGFuZCBsaXN0ZW4gZm9yIG5ldwogICAgIGNvbmZpZ3VyYXRpb25zLgpAQCAtODA0LDYgKzgxMSwxNSBAQAogICAgIFJldHVybnMgYSBUaHJlYWQgb2JqZWN0IG9uIHdoaWNoIHlvdSBjYW4gY2FsbCBzdGFydCgpIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIsCiAgICAgYW5kIHdoaWNoIHlvdSBjYW4gam9pbigpIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwgY2FsbAogICAgIHN0b3BMaXN0ZW5pbmcoKS4KKworICAgIFVzZSB0aGUgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byB2ZXJpZnkgYW55IGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgd2lyZQorICAgIGZyb20gYSBjbGllbnQuIElmIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVjZWl2ZXMgYQorICAgIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBieXRlcyBvZiBjb25maWd1cmF0aW9uIGRhdGEgcmVjZWl2ZWQgYWNyb3NzIHRoZQorICAgIG5ldHdvcmsgLSBhbmQgaXQgc2hvdWxkIHJldHVybiBlaXRoZXIgYGBOb25lYGAsIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgcGFzc2VkIGluIGJ5dGVzIGNvdWxkIG5vdCBiZSB2ZXJpZmllZCBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZCwgb3IgYQorICAgIGJ5dGUgc3RyaW5nIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIG1hY2hpbmVyeSBhcworICAgIG5vcm1hbC4gTm90ZSB0aGF0IHlvdSBjYW4gcmV0dXJuIHRyYW5zZm9ybWVkIGJ5dGVzLCBlLmcuIGJ5IGRlY3J5cHRpbmcKKyAgICB0aGUgYnl0ZXMgcGFzc2VkIGluLgogICAgICIiIgogICAgIGlmIG5vdCB0aHJlYWQ6ICNwcmFnbWE6IG5vIGNvdmVyCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImxpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrIikKQEAgLTgzMSwyNSArODQ3LDI2IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5jb25uZWN0aW9uLnJlY3Yoc2xlbikKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGVuKGNodW5rKSA8IHNsZW46CiAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rICsgY29ubi5yZWN2KHNsZW4gLSBsZW4oY2h1bmspKQotICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLmRlY29kZSgidXRmLTgiKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9anNvbi5sb2FkcyhjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGQsIGRpY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKGNodW5rKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci52ZXJpZnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuc2VydmVyLnZlcmlmeShjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgaWYgY2h1bmsgaXMgbm90IE5vbmU6ICAgIyB2ZXJpZmllZCwgY2FuIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZyhmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPWpzb24ubG9hZHMoY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyhjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIucmVhZHk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5yZWFkeS5zZXQoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLmFyZ3MsIHR1cGxlKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtODY1LDEzICs4ODIsMTQgQEAKICAgICAgICAgYWxsb3dfcmV1c2VfYWRkcmVzcyA9IDEKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD0nbG9jYWxob3N0JywgcG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQsCi0gICAgICAgICAgICAgICAgICAgICBoYW5kbGVyPU5vbmUsIHJlYWR5PU5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Ob25lLCByZWFkeT1Ob25lLCB2ZXJpZnk9Tm9uZSk6CiAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIuX19pbml0X18oc2VsZiwgKGhvc3QsIHBvcnQpLCBoYW5kbGVyKQogICAgICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICAgICAgc2VsZi5hYm9ydCA9IDAKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKICAgICAgICAgICAgIHNlbGYudGltZW91dCA9IDEKICAgICAgICAgICAgIHNlbGYucmVhZHkgPSByZWFkeQorICAgICAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKIAogICAgICAgICBkZWYgc2VydmVfdW50aWxfc3RvcHBlZChzZWxmKToKICAgICAgICAgICAgIGltcG9ydCBzZWxlY3QKQEAgLTg4OSwxNiArOTA3LDE4IEBACiAKICAgICBjbGFzcyBTZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6CiAKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJjdnIsIGhkbHIsIHBvcnQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmN2ciwgaGRsciwgcG9ydCwgdmVyaWZ5KToKICAgICAgICAgICAgIHN1cGVyKFNlcnZlciwgc2VsZikuX19pbml0X18oKQogICAgICAgICAgICAgc2VsZi5yY3ZyID0gcmN2cgogICAgICAgICAgICAgc2VsZi5oZGxyID0gaGRscgogICAgICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKICAgICAgICAgICAgIHNlbGYucmVhZHkgPSB0aHJlYWRpbmcuRXZlbnQoKQogCiAgICAgICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLnJjdnIocG9ydD1zZWxmLnBvcnQsIGhhbmRsZXI9c2VsZi5oZGxyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5PXNlbGYucmVhZHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk9c2VsZi5yZWFkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZnk9c2VsZi52ZXJpZnkpCiAgICAgICAgICAgICBpZiBzZWxmLnBvcnQgPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMV0KICAgICAgICAgICAgIHNlbGYucmVhZHkuc2V0KCkKQEAgLTkwOCw3ICs5MjgsNyBAQAogICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQogICAgICAgICAgICAgc2VydmVyLnNlcnZlX3VudGlsX3N0b3BwZWQoKQogCi0gICAgcmV0dXJuIFNlcnZlcihDb25maWdTb2NrZXRSZWNlaXZlciwgQ29uZmlnU3RyZWFtSGFuZGxlciwgcG9ydCkKKyAgICByZXR1cm4gU2VydmVyKENvbmZpZ1NvY2tldFJlY2VpdmVyLCBDb25maWdTdHJlYW1IYW5kbGVyLCBwb3J0LCB2ZXJpZnkpCiAKIGRlZiBzdG9wTGlzdGVuaW5nKCk6CiAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weSBiL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CmluZGV4IGRkZWM3ZGQuLmIyZTdkNDQgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CisrKyBiL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CkBAIC03Miw5ICs3Miw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLnNob3VsZFJvbGxvdmVyKHJlY29yZCk6CiAgICAgICAgICAgICAgICAgc2VsZi5kb1JvbGxvdmVyKCkKICAgICAgICAgICAgIGxvZ2dpbmcuRmlsZUhhbmRsZXIuZW1pdChzZWxmLCByZWNvcmQpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKICAgICBkZWYgcm90YXRpb25fZmlsZW5hbWUoc2VsZiwgZGVmYXVsdF9uYW1lKToKQEAgLTIwMSwxMSArMTk5LDEyIEBACiAgICAgSWYgYmFja3VwQ291bnQgaXMgPiAwLCB3aGVuIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXBDb3VudAogICAgIGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkLgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UsIGF0VGltZT1Ob25lKToKICAgICAgICAgQmFzZVJvdGF0aW5nSGFuZGxlci5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgJ2EnLCBlbmNvZGluZywgZGVsYXkpCiAgICAgICAgIHNlbGYud2hlbiA9IHdoZW4udXBwZXIoKQogICAgICAgICBzZWxmLmJhY2t1cENvdW50ID0gYmFja3VwQ291bnQKICAgICAgICAgc2VsZi51dGMgPSB1dGMKKyAgICAgICAgc2VsZi5hdFRpbWUgPSBhdFRpbWUKICAgICAgICAgIyBDYWxjdWxhdGUgdGhlIHJlYWwgcm9sbG92ZXIgaW50ZXJ2YWwsIHdoaWNoIGlzIGp1c3QgdGhlIG51bWJlciBvZgogICAgICAgICAjIHNlY29uZHMgYmV0d2VlbiByb2xsb3ZlcnMuICBBbHNvIHNldCB0aGUgZmlsZW5hbWUgc3VmZml4IHVzZWQgd2hlbgogICAgICAgICAjIGEgcm9sbG92ZXIgb2NjdXJzLiAgQ3VycmVudCAnd2hlbicgZXZlbnRzIHN1cHBvcnRlZDoKQEAgLTI3NSw5ICsyNzQsMjIgQEAKICAgICAgICAgICAgIGN1cnJlbnRIb3VyID0gdFszXQogICAgICAgICAgICAgY3VycmVudE1pbnV0ZSA9IHRbNF0KICAgICAgICAgICAgIGN1cnJlbnRTZWNvbmQgPSB0WzVdCi0gICAgICAgICAgICAjIHIgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxlZnQgYmV0d2VlbiBub3cgYW5kIG1pZG5pZ2h0Ci0gICAgICAgICAgICByID0gX01JRE5JR0hUIC0gKChjdXJyZW50SG91ciAqIDYwICsgY3VycmVudE1pbnV0ZSkgKiA2MCArCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWNvbmQpCisgICAgICAgICAgICBjdXJyZW50RGF5ID0gdFs2XQorICAgICAgICAgICAgIyByIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBsZWZ0IGJldHdlZW4gbm93IGFuZCB0aGUgbmV4dCByb3RhdGlvbgorICAgICAgICAgICAgaWYgc2VsZi5hdFRpbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByb3RhdGVfdHMgPSBfTUlETklHSFQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcm90YXRlX3RzID0gKChzZWxmLmF0VGltZS5ob3VyICogNjAgKyBzZWxmLmF0VGltZS5taW51dGUpKjYwICsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hdFRpbWUuc2Vjb25kKQorCisgICAgICAgICAgICByID0gcm90YXRlX3RzIC0gKChjdXJyZW50SG91ciAqIDYwICsgY3VycmVudE1pbnV0ZSkgKiA2MCArCisgICAgICAgICAgICAgICAgY3VycmVudFNlY29uZCkKKyAgICAgICAgICAgIGlmIHIgPCAwOgorICAgICAgICAgICAgICAgICMgUm90YXRlIHRpbWUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHRpbWUgKGZvciBleGFtcGxlIHdoZW4KKyAgICAgICAgICAgICAgICAjIHNlbGYucm90YXRlQXQgaXMgMTM6NDUgYW5kIGl0IG5vdyAxNDoxNSksIHJvdGF0aW9uIGlzCisgICAgICAgICAgICAgICAgIyB0b21vcnJvdy4KKyAgICAgICAgICAgICAgICByICs9IF9NSUROSUdIVAorICAgICAgICAgICAgICAgIGN1cnJlbnREYXkgPSAoY3VycmVudERheSArIDEpICUgNwogICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudFRpbWUgKyByCiAgICAgICAgICAgICAjIElmIHdlIGFyZSByb2xsaW5nIG92ZXIgb24gYSBjZXJ0YWluIGRheSwgYWRkIGluIHRoZSBudW1iZXIgb2YgZGF5cyB1bnRpbAogICAgICAgICAgICAgIyB0aGUgbmV4dCByb2xsb3ZlciwgYnV0IG9mZnNldCBieSAxIHNpbmNlIHdlIGp1c3QgY2FsY3VsYXRlZCB0aGUgdGltZQpAQCAtMjk1LDcgKzMwNyw3IEBACiAgICAgICAgICAgICAjIFRoaXMgaXMgYmVjYXVzZSB0aGUgYWJvdmUgdGltZSBjYWxjdWxhdGlvbiB0YWtlcyB1cyB0byBtaWRuaWdodCBvbiB0aGlzCiAgICAgICAgICAgICAjIGRheSwgaS5lLiB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZGF5LgogICAgICAgICAgICAgaWYgc2VsZi53aGVuLnN0YXJ0c3dpdGgoJ1cnKToKLSAgICAgICAgICAgICAgICBkYXkgPSB0WzZdICMgMCBpcyBNb25kYXkKKyAgICAgICAgICAgICAgICBkYXkgPSBjdXJyZW50RGF5ICMgMCBpcyBNb25kYXkKICAgICAgICAgICAgICAgICBpZiBkYXkgIT0gc2VsZi5kYXlPZldlZWs6CiAgICAgICAgICAgICAgICAgICAgIGlmIGRheSA8IHNlbGYuZGF5T2ZXZWVrOgogICAgICAgICAgICAgICAgICAgICAgICAgZGF5c1RvV2FpdCA9IHNlbGYuZGF5T2ZXZWVrIC0gZGF5CkBAIC00NDQsMTEgKzQ1Niw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgc3RhdCB0aGUgZmlsZSBieSBwYXRoLCBjaGVja2luZyBmb3IgZXhpc3RlbmNlCiAgICAgICAgICAgICBzcmVzID0gb3Muc3RhdChzZWxmLmJhc2VGaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICBzcmVzID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBzcmVzID0gTm9uZQogICAgICAgICAjIGNvbXBhcmUgZmlsZSBzeXN0ZW0gc3RhdCB3aXRoIHRoYXQgb2Ygb3VyIHN0cmVhbSBmaWxlIGhhbmRsZQogICAgICAgICBpZiBub3Qgc3JlcyBvciBzcmVzW1NUX0RFVl0gIT0gc2VsZi5kZXYgb3Igc3Jlc1tTVF9JTk9dICE9IHNlbGYuaW5vOgogICAgICAgICAgICAgaWYgc2VsZi5zdHJlYW0gaXMgbm90IE5vbmU6CkBAIC00ODUsNiArNDk0LDEwIEBACiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgaWYgcG9ydCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gaG9zdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gKGhvc3QsIHBvcnQpCiAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgc2VsZi5jbG9zZU9uRXJyb3IgPSBGYWxzZQogICAgICAgICBzZWxmLnJldHJ5VGltZSA9IE5vbmUKQEAgLTUwMCwxNSArNTEzLDE3IEBACiAgICAgICAgIEEgZmFjdG9yeSBtZXRob2Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzZXMgdG8gZGVmaW5lIHRoZSBwcmVjaXNlCiAgICAgICAgIHR5cGUgb2Ygc29ja2V0IHRoZXkgd2FudC4KICAgICAgICAgIiIiCi0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIGlmIGhhc2F0dHIocywgJ3NldHRpbWVvdXQnKToKLSAgICAgICAgICAgIHMuc2V0dGltZW91dCh0aW1lb3V0KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzLmNvbm5lY3QoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKLSAgICAgICAgICAgIHJldHVybiBzCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6Ci0gICAgICAgICAgICBzLmNsb3NlKCkKLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHNlbGYucG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihzZWxmLmFkZHJlc3MsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXR0aW1lb3V0KHRpbWVvdXQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvbm5lY3Qoc2VsZi5hZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNsb3NlKCkgICMgSXNzdWUgMTkxODIKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgY3JlYXRlU29ja2V0KHNlbGYpOgogICAgICAgICAiIiIKQEAgLTUyOCw3ICs1NDMsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYubWFrZVNvY2tldCgpCiAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVRpbWUgPSBOb25lICMgbmV4dCB0aW1lLCBubyBkZWxheSBiZWZvcmUgdHJ5aW5nCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgI0NyZWF0aW9uIGZhaWxlZCwgc28gc2V0IHRoZSByZXRyeSB0aW1lIGFuZCByZXR1cm4uCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXRyeVRpbWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVBlcmlvZCA9IHNlbGYucmV0cnlTdGFydApAQCAtNTUyLDE2ICs1NjcsOCBAQAogICAgICAgICAjYnV0IGFyZSBzdGlsbCB1bmFibGUgdG8gY29ubmVjdC4KICAgICAgICAgaWYgc2VsZi5zb2NrOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5zb2NrLCAic2VuZGFsbCIpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChzKQotICAgICAgICAgICAgICAgIGVsc2U6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgIHNlbnRzb2ZhciA9IDAKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlbihzKQotICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZWZ0ID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQgPSBzZWxmLnNvY2suc2VuZChzW3NlbnRzb2ZhcjpdKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VudHNvZmFyID0gc2VudHNvZmFyICsgc2VudAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQgLSBzZW50Ci0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUgICMgc28gd2UgY2FuIGNhbGwgY3JlYXRlU29ja2V0IG5leHQgdGltZQogCkBAIC02MTEsOSArNjE4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNlbGYubWFrZVBpY2tsZShyZWNvcmQpCiAgICAgICAgICAgICBzZWxmLnNlbmQocykKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTY1Miw3ICs2NTcsMTEgQEAKICAgICAgICAgVGhlIGZhY3RvcnkgbWV0aG9kIG9mIFNvY2tldEhhbmRsZXIgaXMgaGVyZSBvdmVycmlkZGVuIHRvIGNyZWF0ZQogICAgICAgICBhIFVEUCBzb2NrZXQgKFNPQ0tfREdSQU0pLgogICAgICAgICAiIiIKLSAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBpZiBzZWxmLnBvcnQgaXMgTm9uZToKKyAgICAgICAgICAgIGZhbWlseSA9IHNvY2tldC5BRl9VTklYCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYW1pbHkgPSBzb2NrZXQuQUZfSU5FVAorICAgICAgICBzID0gc29ja2V0LnNvY2tldChmYW1pbHksIHNvY2tldC5TT0NLX0RHUkFNKQogICAgICAgICByZXR1cm4gcwogCiAgICAgZGVmIHNlbmQoc2VsZiwgcyk6CkBAIC02NjUsNyArNjc0LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuc29jayBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5jcmVhdGVTb2NrZXQoKQotICAgICAgICBzZWxmLnNvY2suc2VuZHRvKHMsIChzZWxmLmhvc3QsIHNlbGYucG9ydCkpCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8ocywgc2VsZi5hZGRyZXNzKQogCiBjbGFzcyBTeXNMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgIiIiCkBAIC03NzcsNyArNzg2LDExIEBACiAKICAgICAgICAgSWYgYWRkcmVzcyBpcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcsIGEgVU5JWCBzb2NrZXQgaXMgdXNlZC4gVG8gbG9nIHRvIGEKICAgICAgICAgbG9jYWwgc3lzbG9nZCwgIlN5c0xvZ0hhbmRsZXIoYWRkcmVzcz0iL2Rldi9sb2ciKSIgY2FuIGJlIHVzZWQuCi0gICAgICAgIElmIGZhY2lsaXR5IGlzIG5vdCBzcGVjaWZpZWQsIExPR19VU0VSIGlzIHVzZWQuCisgICAgICAgIElmIGZhY2lsaXR5IGlzIG5vdCBzcGVjaWZpZWQsIExPR19VU0VSIGlzIHVzZWQuIElmIHNvY2t0eXBlIGlzCisgICAgICAgIHNwZWNpZmllZCBhcyBzb2NrZXQuU09DS19ER1JBTSBvciBzb2NrZXQuU09DS19TVFJFQU0sIHRoYXQgc3BlY2lmaWMKKyAgICAgICAgc29ja2V0IHR5cGUgd2lsbCBiZSB1c2VkLiBGb3IgVW5peCBzb2NrZXRzLCB5b3UgY2FuIGFsc28gc3BlY2lmeSBhCisgICAgICAgIHNvY2t0eXBlIG9mIE5vbmUsIGluIHdoaWNoIGNhc2Ugc29ja2V0LlNPQ0tfREdSQU0gd2lsbCBiZSB1c2VkLCBmYWxsaW5nCisgICAgICAgIGJhY2sgdG8gc29ja2V0LlNPQ0tfU1RSRUFNLgogICAgICAgICAiIiIKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCiAKQEAgLTgwNyw3ICs4MjAsNyBAQAogICAgICAgICAgICAgc2VsZi5zb2NrZXQuY29ubmVjdChhZGRyZXNzKQogICAgICAgICAgICAgIyBpdCB3b3JrZWQsIHNvIHNldCBzZWxmLnNvY2t0eXBlIHRvIHRoZSB1c2VkIHR5cGUKICAgICAgICAgICAgIHNlbGYuc29ja3R5cGUgPSB1c2Vfc29ja3R5cGUKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCiAgICAgICAgICAgICBpZiBzZWxmLnNvY2t0eXBlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICMgdXNlciBkaWRuJ3Qgc3BlY2lmeSBmYWxsaW5nIGJhY2ssIHNvIGZhaWwKQEAgLTgxOCw3ICs4MzEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNvbm5lY3QoYWRkcmVzcykKICAgICAgICAgICAgICAgICAjIGl0IHdvcmtlZCwgc28gc2V0IHNlbGYuc29ja3R5cGUgdG8gdGhlIHVzZWQgdHlwZQogICAgICAgICAgICAgICAgIHNlbGYuc29ja3R5cGUgPSB1c2Vfc29ja3R5cGUKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UKIApAQCAtODcxLDEwICs4ODQsOSBAQAogICAgICAgICAgICAgbXNnID0gc2VsZi5pZGVudCArIG1zZwogICAgICAgICBpZiBzZWxmLmFwcGVuZF9udWw6CiAgICAgICAgICAgICBtc2cgKz0gJ1wwMDAnCi0gICAgICAgICIiIgotICAgICAgICBXZSBuZWVkIHRvIGNvbnZlcnQgcmVjb3JkIGxldmVsIHRvIGxvd2VyY2FzZSwgbWF5YmUgdGhpcyB3aWxsCi0gICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgotICAgICAgICAiIiIKKworICAgICAgICAjIFdlIG5lZWQgdG8gY29udmVydCByZWNvcmQgbGV2ZWwgdG8gbG93ZXJjYXNlLCBtYXliZSB0aGlzIHdpbGwKKyAgICAgICAgIyBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICAgICAgICAgcHJpbyA9ICc8JWQ+JyAlIHNlbGYuZW5jb2RlUHJpb3JpdHkoc2VsZi5mYWNpbGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXBQcmlvcml0eShyZWNvcmQubGV2ZWxuYW1lKSkKICAgICAgICAgcHJpbyA9IHByaW8uZW5jb2RlKCd1dGYtOCcpCkBAIC04ODUsNyArODk3LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYudW5peHNvY2tldDoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmQobXNnKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdF91bml4c29ja2V0KHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCkBAIC04OTMsOSArOTA1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kdG8obXNnLCBzZWxmLmFkZHJlc3MpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmRhbGwobXNnKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBjbGFzcyBTTVRQSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgpAQCAtOTczLDkgKzk4Myw3IEBACiAgICAgICAgICAgICAgICAgc210cC5sb2dpbihzZWxmLnVzZXJuYW1lLCBzZWxmLnBhc3N3b3JkKQogICAgICAgICAgICAgc210cC5zZW5kbWFpbChzZWxmLmZyb21hZGRyLCBzZWxmLnRvYWRkcnMsIG1zZykKICAgICAgICAgICAgIHNtdHAucXVpdCgpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIE5URXZlbnRMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC0xMDYwLDkgKzEwNjgsNyBAQAogICAgICAgICAgICAgICAgIHR5cGUgPSBzZWxmLmdldEV2ZW50VHlwZShyZWNvcmQpCiAgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQogICAgICAgICAgICAgICAgIHNlbGYuX3dlbHUuUmVwb3J0RXZlbnQoc2VsZi5hcHBuYW1lLCBpZCwgY2F0LCB0eXBlLCBbbXNnXSkKLSAgICAgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtMTE0Nyw5ICsxMTUzLDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYubWV0aG9kID09ICJQT1NUIjoKICAgICAgICAgICAgICAgICBoLnNlbmQoZGF0YS5lbmNvZGUoJ3V0Zi04JykpCiAgICAgICAgICAgICBoLmdldHJlc3BvbnNlKCkgICAgI2Nhbid0IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdAotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBjbGFzcyBCdWZmZXJpbmdIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC0xMzI5LDkgKzEzMzMsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5lbnF1ZXVlKHNlbGYucHJlcGFyZShyZWNvcmQpKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBpZiB0aHJlYWRpbmc6CmRpZmYgLS1naXQgYS9MaWIvbHptYS5weSBiL0xpYi9sem1hLnB5CmluZGV4IDFhMWIwNjUuLjAxMWFkMjcgMTAwNjQ0Ci0tLSBhL0xpYi9sem1hLnB5CisrKyBiL0xpYi9sem1hLnB5CkBAIC01NCw5ICs1NCw5IEBACiAgICAgICAgIGJ5dGVzIG9iamVjdCksIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIGZpbGUgaXMgb3BlbmVkLCBvciBpdCBjYW4KICAgICAgICAgYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgICAgIG1vZGUgY2FuIGJlICJyIiBmb3IgcmVhZGluZyAoZGVmYXVsdCksICJ3IiBmb3IgKG92ZXIpd3JpdGluZywgb3IKLSAgICAgICAgImEiIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgInJiIiwgIndiIiwKLSAgICAgICAgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgorICAgICAgICBtb2RlIGNhbiBiZSAiciIgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAidyIgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICJ4IiBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICJhIiBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICJyYiIsICJ3YiIsICJ4YiIgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgogCiAgICAgICAgIGZvcm1hdCBzcGVjaWZpZXMgdGhlIGNvbnRhaW5lciBmb3JtYXQgdG8gdXNlIGZvciB0aGUgZmlsZS4KICAgICAgICAgSWYgbW9kZSBpcyAiciIsIHRoaXMgZGVmYXVsdHMgdG8gRk9STUFUX0FVVE8uIE90aGVyd2lzZSwgdGhlCkBAIC0xMTAsOCArMTEwLDkgQEAKICAgICAgICAgICAgICMgc3RyZWFtIHdpbGwgbmVlZCBhIHNlcGFyYXRlIGRlY29tcHJlc3NvciBvYmplY3QuCiAgICAgICAgICAgICBzZWxmLl9pbml0X2FyZ3MgPSB7ImZvcm1hdCI6Zm9ybWF0LCAiZmlsdGVycyI6ZmlsdGVyc30KICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IExaTUFEZWNvbXByZXNzb3IoKipzZWxmLl9pbml0X2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCi0gICAgICAgIGVsaWYgbW9kZSBpbiAoInciLCAid2IiLCAiYSIsICJhYiIpOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorICAgICAgICBlbGlmIG1vZGUgaW4gKCJ3IiwgIndiIiwgImEiLCAiYWIiLCAieCIsICJ4YiIpOgogICAgICAgICAgICAgaWYgZm9ybWF0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRk9STUFUX1haCiAgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQpAQCAtMTQzLDcgKzE0NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX21vZGUgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKICAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICAgICAgZWxpZiBzZWxmLl9tb2RlID09IF9NT0RFX1dSSVRFOgogICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHNlbGYuX2NvbXByZXNzb3IuZmx1c2goKSkKICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gTm9uZQpAQCAtMTg3LDE1ICsxODgsMTggQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogCiAgICAgZGVmIF9jaGVja19jYW5fcmVhZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgbm90IG9wZW4gZm9yIHJlYWRpbmciKQogCiAgICAgZGVmIF9jaGVja19jYW5fd3JpdGUoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLndyaXRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgIT0gX01PREVfV1JJVEU6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJGaWxlIG5vdCBvcGVuIGZvciB3cml0aW5nIikKIAogICAgIGRlZiBfY2hlY2tfY2FuX3NlZWsoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnJlYWRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgbm90IGluIChfTU9ERV9SRUFELCBfTU9ERV9SRUFEX0VPRik6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJTZWVraW5nIGlzIG9ubHkgc3VwcG9ydGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBmaWxlcyBvcGVuIGZvciByZWFkaW5nIikKICAgICAgICAgaWYgbm90IHNlbGYuX2ZwLnNlZWthYmxlKCk6CkBAIC0yMDQsMTYgKzIwOCwxMyBAQAogCiAgICAgIyBGaWxsIHRoZSByZWFkYWhlYWQgYnVmZmVyIGlmIGl0IGlzIGVtcHR5LiBSZXR1cm5zIEZhbHNlIG9uIEVPRi4KICAgICBkZWYgX2ZpbGxfYnVmZmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICMgRGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBkYXRhLCBvdXIgY2FsbCB0byB0aGUgZGVjb21wcmVzc29yIG1heSBub3QKICAgICAgICAgIyByZXR1cm4gYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgdHJ5IGFnYWluIGFmdGVyIHJlYWRpbmcgYW5vdGhlciBibG9jay4KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGE6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9mcC5yZWFkKF9CVUZGRVJfU0laRSkKKyAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgIHJhd2Jsb2NrID0gKHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAucmVhZChfQlVGRkVSX1NJWkUpKQogCiAgICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKQEAgLTIyOSwzMCArMjMwLDQ4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKIAogICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MocmF3YmxvY2spCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgIyBSZWFkIGRhdGEgdW50aWwgRU9GLgogICAgICMgSWYgcmV0dXJuX2RhdGEgaXMgZmFsc2UsIGNvbnN1bWUgdGhlIGRhdGEgd2l0aG91dCByZXR1cm5pbmcgaXQuCiAgICAgZGVmIF9yZWFkX2FsbChzZWxmLCByZXR1cm5fZGF0YT1UcnVlKToKKyAgICAgICAgIyBUaGUgbG9vcCBhc3N1bWVzIHRoYXQgX2J1ZmZlcl9vZmZzZXQgaXMgMC4gRW5zdXJlIHRoYXQgdGhpcyBpcyB0cnVlLgorICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCisgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisKICAgICAgICAgYmxvY2tzID0gW10KICAgICAgICAgd2hpbGUgc2VsZi5fZmlsbF9idWZmZXIoKToKICAgICAgICAgICAgIGlmIHJldHVybl9kYXRhOgogICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoc2VsZi5fYnVmZmVyKQogICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihzZWxmLl9idWZmZXIpCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKICAgICAgICAgaWYgcmV0dXJuX2RhdGE6CiAgICAgICAgICAgICByZXR1cm4gYiIiLmpvaW4oYmxvY2tzKQogCiAgICAgIyBSZWFkIGEgYmxvY2sgb2YgdXAgdG8gbiBieXRlcy4KICAgICAjIElmIHJldHVybl9kYXRhIGlzIGZhbHNlLCBjb25zdW1lIHRoZSBkYXRhIHdpdGhvdXQgcmV0dXJuaW5nIGl0LgogICAgIGRlZiBfcmVhZF9ibG9jayhzZWxmLCBuLCByZXR1cm5fZGF0YT1UcnVlKToKKyAgICAgICAgIyBJZiB3ZSBoYXZlIGVub3VnaCBkYXRhIGJ1ZmZlcmVkLCByZXR1cm4gaW1tZWRpYXRlbHkuCisgICAgICAgIGVuZCA9IHNlbGYuX2J1ZmZlcl9vZmZzZXQgKyBuCisgICAgICAgIGlmIGVuZCA8PSBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6IGVuZF0KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSBlbmQKKyAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBkYXRhIGlmIHJldHVybl9kYXRhIGVsc2UgTm9uZQorCisgICAgICAgICMgVGhlIGxvb3AgYXNzdW1lcyB0aGF0IF9idWZmZXJfb2Zmc2V0IGlzIDAuIEVuc3VyZSB0aGF0IHRoaXMgaXMgdHJ1ZS4KKyAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQorICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorCiAgICAgICAgIGJsb2NrcyA9IFtdCiAgICAgICAgIHdoaWxlIG4gPiAwIGFuZCBzZWxmLl9maWxsX2J1ZmZlcigpOgogICAgICAgICAgICAgaWYgbiA8IGxlbihzZWxmLl9idWZmZXIpOgogICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbOm5dCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW246XQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSBuCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXIKLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCiAgICAgICAgICAgICBpZiByZXR1cm5fZGF0YToKICAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGRhdGEpCiAgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGRhdGEpCkBAIC0yNjcsOSArMjg2LDkgQEAKICAgICAgICAgVGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyByZXR1cm5lZCBpcyB1bnNwZWNpZmllZC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvciBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCk6CiAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KIAogICAgIGRlZiByZWFkKHNlbGYsIHNpemU9LTEpOgogICAgICAgICAiIiJSZWFkIHVwIHRvIHNpemUgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGZpbGUuCkBAIC0yNzgsNyArMjk3LDcgQEAKICAgICAgICAgUmV0dXJucyBiIiIgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBhdCBFT0YuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRF9FT0Ygb3Igc2l6ZSA9PSAwOgorICAgICAgICBpZiBzaXplID09IDA6CiAgICAgICAgICAgICByZXR1cm4gYiIiCiAgICAgICAgIGVsaWYgc2l6ZSA8IDA6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9hbGwoKQpAQCAtMjk1LDE4ICszMTQsNDAgQEAKICAgICAgICAgIyB0aGlzIGRvZXMgbm90IGdpdmUgZW5vdWdoIGRhdGEgZm9yIHRoZSBkZWNvbXByZXNzb3IgdG8gbWFrZSBwcm9ncmVzcy4KICAgICAgICAgIyBJbiB0aGlzIGNhc2Ugd2UgbWFrZSBtdWx0aXBsZSByZWFkcywgdG8gYXZvaWQgcmV0dXJuaW5nIGIiIi4KICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICBpZiAoc2l6ZSA9PSAwIG9yIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRF9FT0Ygb3IKLSAgICAgICAgICAgIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpKToKKyAgICAgICAgaWYgKHNpemUgPT0gMCBvcgorICAgICAgICAgICAgIyBPbmx5IGNhbGwgX2ZpbGxfYnVmZmVyKCkgaWYgdGhlIGJ1ZmZlciBpcyBhY3R1YWxseSBlbXB0eS4KKyAgICAgICAgICAgICMgVGhpcyBnaXZlcyBhIHNpZ25pZmljYW50IHNwZWVkdXAgaWYgKnNpemUqIGlzIHNtYWxsLgorICAgICAgICAgICAgKHNlbGYuX2J1ZmZlcl9vZmZzZXQgPT0gbGVuKHNlbGYuX2J1ZmZlcikgYW5kIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpKSk6CiAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIGlmIDAgPCBzaXplIDwgbGVuKHNlbGYuX2J1ZmZlcik6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyWzpzaXplXQotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW3NpemU6XQorICAgICAgICBpZiBzaXplID4gMDoKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgKyBzaXplXQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCArPSBsZW4oZGF0YSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXIKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCiAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKICAgICAgICAgcmV0dXJuIGRhdGEKIAorICAgIGRlZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIiUmVhZCBhIGxpbmUgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGZpbGUuCisKKyAgICAgICAgVGhlIHRlcm1pbmF0aW5nIG5ld2xpbmUgKGlmIHByZXNlbnQpIGlzIHJldGFpbmVkLiBJZiBzaXplIGlzCisgICAgICAgIG5vbi1uZWdhdGl2ZSwgbm8gbW9yZSB0aGFuIHNpemUgYnl0ZXMgd2lsbCBiZSByZWFkIChpbiB3aGljaAorICAgICAgICBjYXNlIHRoZSBsaW5lIG1heSBiZSBpbmNvbXBsZXRlKS4gUmV0dXJucyBiJycgaWYgYWxyZWFkeSBhdCBFT0YuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCisgICAgICAgICMgU2hvcnRjdXQgZm9yIHRoZSBjb21tb24gY2FzZSAtIHRoZSB3aG9sZSBsaW5lIGlzIGluIHRoZSBidWZmZXIuCisgICAgICAgIGlmIHNpemUgPCAwOgorICAgICAgICAgICAgZW5kID0gc2VsZi5fYnVmZmVyLmZpbmQoYiJcbiIsIHNlbGYuX2J1ZmZlcl9vZmZzZXQpICsgMQorICAgICAgICAgICAgaWYgZW5kID4gMDoKKyAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQgOiBlbmRdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IGVuZAorICAgICAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4obGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICByZXR1cm4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGxpbmUoc2VsZiwgc2l6ZSkKKwogICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKICAgICAgICAgIiIiV3JpdGUgYSBieXRlcyBvYmplY3QgdG8gdGhlIGZpbGUuCiAKQEAgLTMyNiw3ICszNjcsOCBAQAogICAgICAgICBzZWxmLl9tb2RlID0gX01PREVfUkVBRAogICAgICAgICBzZWxmLl9wb3MgPSAwCiAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IExaTUFEZWNvbXByZXNzb3IoKipzZWxmLl9pbml0X2FyZ3MpCi0gICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCisgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCiAKICAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT0wKToKICAgICAgICAgIiIiQ2hhbmdlIHRoZSBmaWxlIHBvc2l0aW9uLgpAQCAtMzY1LDggKzQwNyw3IEBACiAgICAgICAgICAgICBvZmZzZXQgLT0gc2VsZi5fcG9zCiAKICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGRhdGEgdW50aWwgd2UgcmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uCi0gICAgICAgIGlmIHNlbGYuX21vZGUgIT0gX01PREVfUkVBRF9FT0Y6Ci0gICAgICAgICAgICBzZWxmLl9yZWFkX2Jsb2NrKG9mZnNldCwgcmV0dXJuX2RhdGE9RmFsc2UpCisgICAgICAgIHNlbGYuX3JlYWRfYmxvY2sob2Zmc2V0LCByZXR1cm5fZGF0YT1GYWxzZSkKIAogICAgICAgICByZXR1cm4gc2VsZi5fcG9zCiAKQEAgLTM4MSwyMyArNDIyLDI1IEBACiAgICAgICAgICBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKToKICAgICAiIiJPcGVuIGFuIExaTUEtY29tcHJlc3NlZCBmaWxlIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUuCiAKLSAgICBmaWxlbmFtZSBjYW4gYmUgZWl0aGVyIGFuIGFjdHVhbCBmaWxlIG5hbWUgKGdpdmVuIGFzIGEgc3RyIG9yIGJ5dGVzIG9iamVjdCksCi0gICAgaW4gd2hpY2ggY2FzZSB0aGUgbmFtZWQgZmlsZSBpcyBvcGVuZWQsIG9yIGl0IGNhbiBiZSBhbiBleGlzdGluZyBmaWxlIG9iamVjdAotICAgIHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KKyAgICBmaWxlbmFtZSBjYW4gYmUgZWl0aGVyIGFuIGFjdHVhbCBmaWxlIG5hbWUgKGdpdmVuIGFzIGEgc3RyIG9yIGJ5dGVzCisgICAgb2JqZWN0KSwgaW4gd2hpY2ggY2FzZSB0aGUgbmFtZWQgZmlsZSBpcyBvcGVuZWQsIG9yIGl0IGNhbiBiZSBhbgorICAgIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAotICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIgKGRlZmF1bHQpLCAidyIsICJ3YiIsICJhIiwgb3IgImFiIiBmb3IKLSAgICBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuCisgICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiAoZGVmYXVsdCksICJ3IiwgIndiIiwgIngiLCAieGIiLAorICAgICJhIiwgb3IgImFiIiBmb3IgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIsICJ4dCIsIG9yICJhdCIgZm9yIHRleHQKKyAgICBtb2RlLgogCi0gICAgVGhlIGZvcm1hdCwgY2hlY2ssIHByZXNldCBhbmQgZmlsdGVycyBhcmd1bWVudHMgc3BlY2lmeSB0aGUgY29tcHJlc3Npb24KLSAgICBzZXR0aW5ncywgYXMgZm9yIExaTUFDb21wcmVzc29yLCBMWk1BRGVjb21wcmVzc29yIGFuZCBMWk1BRmlsZS4KKyAgICBUaGUgZm9ybWF0LCBjaGVjaywgcHJlc2V0IGFuZCBmaWx0ZXJzIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZQorICAgIGNvbXByZXNzaW9uIHNldHRpbmdzLCBhcyBmb3IgTFpNQUNvbXByZXNzb3IsIExaTUFEZWNvbXByZXNzb3IgYW5kCisgICAgTFpNQUZpbGUuCiAKLSAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgTFpNQUZpbGUgY29uc3RydWN0b3I6Ci0gICAgTFpNQUZpbGUoZmlsZW5hbWUsIG1vZGUsIC4uLikuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMgYW5kCi0gICAgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCisgICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIExaTUFGaWxlCisgICAgY29uc3RydWN0b3I6IExaTUFGaWxlKGZpbGVuYW1lLCBtb2RlLCAuLi4pLiBJbiB0aGlzIGNhc2UsIHRoZQorICAgIGVuY29kaW5nLCBlcnJvcnMgYW5kIG5ld2xpbmUgYXJndW1lbnRzIG11c3Qgbm90IGJlIHByb3ZpZGVkLgogCiAgICAgRm9yIHRleHQgbW9kZSwgYSBMWk1BRmlsZSBvYmplY3QgaXMgY3JlYXRlZCwgYW5kIHdyYXBwZWQgaW4gYW4KLSAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IgaGFuZGxpbmcKLSAgICBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgorICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvcgorICAgIGhhbmRsaW5nIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCiAKICAgICAiIiIKICAgICBpZiAidCIgaW4gbW9kZToKQEAgLTQyNyw3ICs0NzAsNyBAQAogICAgIFJlZmVyIHRvIExaTUFDb21wcmVzc29yJ3MgZG9jc3RyaW5nIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQogICAgIG9wdGlvbmFsIGFyZ3VtZW50cyAqZm9ybWF0KiwgKmNoZWNrKiwgKnByZXNldCogYW5kICpmaWx0ZXJzKi4KIAotICAgIEZvciBpbmNyZW1lbnRhbCBjb21wcmVzc2lvbiwgdXNlIGFuIExaTUFDb21wcmVzc29yIG9iamVjdCBpbnN0ZWFkLgorICAgIEZvciBpbmNyZW1lbnRhbCBjb21wcmVzc2lvbiwgdXNlIGFuIExaTUFDb21wcmVzc29yIGluc3RlYWQuCiAgICAgIiIiCiAgICAgY29tcCA9IExaTUFDb21wcmVzc29yKGZvcm1hdCwgY2hlY2ssIHByZXNldCwgZmlsdGVycykKICAgICByZXR1cm4gY29tcC5jb21wcmVzcyhkYXRhKSArIGNvbXAuZmx1c2goKQpAQCAtNDM5LDcgKzQ4Miw3IEBACiAgICAgUmVmZXIgdG8gTFpNQURlY29tcHJlc3NvcidzIGRvY3N0cmluZyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKICAgICBvcHRpb25hbCBhcmd1bWVudHMgKmZvcm1hdCosICpjaGVjayogYW5kICpmaWx0ZXJzKi4KIAotICAgIEZvciBpbmNyZW1lbnRhbCBkZWNvbXByZXNzaW9uLCB1c2UgYSBMWk1BRGVjb21wcmVzc29yIG9iamVjdCBpbnN0ZWFkLgorICAgIEZvciBpbmNyZW1lbnRhbCBkZWNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQURlY29tcHJlc3NvciBpbnN0ZWFkLgogICAgICIiIgogICAgIHJlc3VsdHMgPSBbXQogICAgIHdoaWxlIFRydWU6CmRpZmYgLS1naXQgYS9MaWIvbWFjcGF0aC5weSBiL0xpYi9tYWNwYXRoLnB5CmluZGV4IDE2MTVkOTEuLmQzNGY5ZTk0IDEwMDY0NAotLS0gYS9MaWIvbWFjcGF0aC5weQorKysgYi9MaWIvbWFjcGF0aC5weQpAQCAtMTI3LDcgKzEyNyw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKZGlmZiAtLWdpdCBhL0xpYi9tYWlsYm94LnB5IGIvTGliL21haWxib3gucHkKaW5kZXggZDU5ZGFlOC4uNWY1OTFiYyAxMDA2NDQKLS0tIGEvTGliL21haWxib3gucHkKKysrIGIvTGliL21haWxib3gucHkKQEAgLTIyLDkgKzIyLDYgQEAKIGltcG9ydCBpbwogaW1wb3J0IGNvbnRleHRsaWIKIHRyeToKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ29zMmVteCc6Ci0gICAgICAgICMgT1MvMiBFTVggZmNudGwoKSBub3QgYWRlcXVhdGUKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKICAgICBpbXBvcnQgZmNudGwKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmY250bCA9IE5vbmUKQEAgLTM0MSwxMSArMzM4LDggQEAKICAgICAgICAgIyBUaGlzIG92ZXJyaWRlcyBhbiBpbmFwcGxpY2FibGUgaW1wbGVtZW50YXRpb24gaW4gdGhlIHN1cGVyY2xhc3MuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucmVtb3ZlKGtleSkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBleGNlcHQgKEtleUVycm9yLCBGaWxlTm90Rm91bmRFcnJvcik6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgbWVzc2FnZSk6CiAgICAgICAgICIiIlJlcGxhY2UgdGhlIGtleWVkIG1lc3NhZ2U7IHJhaXNlIEtleUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3QuIiIiCkBAIC0zNzcsMTQgKzM3MSwxMSBAQAogICAgIGRlZiBnZXRfbWVzc2FnZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBNZXNzYWdlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCiAgICAgICAgIHN1YnBhdGggPSBzZWxmLl9sb29rdXAoa2V5KQotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3VicGF0aCksICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJwYXRoKSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgIGlmIHNlbGYuX2ZhY3Rvcnk6CiAgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5fZmFjdG9yeShmKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBtc2cgPSBNYWlsZGlyTWVzc2FnZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHN1YmRpciwgbmFtZSA9IG9zLnBhdGguc3BsaXQoc3VicGF0aCkKICAgICAgICAgbXNnLnNldF9zdWJkaXIoc3ViZGlyKQogICAgICAgICBpZiBzZWxmLmNvbG9uIGluIG5hbWU6CkBAIC0zOTQsMTEgKzM4NSw4IEBACiAKICAgICBkZWYgZ2V0X2J5dGVzKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGJ5dGVzIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCi0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9sb29rdXAoa2V5KSksICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9sb29rdXAoa2V5KSksICdyYicpIGFzIGY6CiAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkucmVwbGFjZShsaW5lc2VwLCBiJ1xuJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgpAQCAtNTEwLDE2ICs0OTgsMTIgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAndG1wJywgdW5pcSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Muc3RhdChwYXRoKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICAgICAgTWFpbGRpci5fY291bnQgKz0gMQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVfY2FyZWZ1bGx5KHBhdGgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBNYWlsZGlyLl9jb3VudCArPSAxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVfY2FyZWZ1bGx5KHBhdGgpCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAjIEZhbGwgdGhyb3VnaCB0byBoZXJlIGlmIHN0YXQgc3VjY2VlZGVkIG9yIG9wZW4gcmFpc2VkIEVFWElTVC4KICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdOYW1lIGNsYXNoIHByZXZlbnRlZCBmaWxlIGNyZWF0aW9uOiAlcycgJQpAQCAtNTk2LDcgKzU4MCw3IEBACiAgICAgICAgIE1haWxib3guX19pbml0X18oc2VsZiwgcGF0aCwgZmFjdG9yeSwgY3JlYXRlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAncmIrJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIGlmIGNyZWF0ZToKICAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3diKycpCkBAIC02MzksOCArNjIzLDcgQEAKICAgICBkZWYgaXRlcmtleXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGtleXMuIiIiCiAgICAgICAgIHNlbGYuX2xvb2t1cCgpCi0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fdG9jLmtleXMoKToKLSAgICAgICAgICAgIHlpZWxkIGtleQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3RvYy5rZXlzKCkKIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGtleWVkIG1lc3NhZ2UgZXhpc3RzLCBGYWxzZSBvdGhlcndpc2UuIiIiCkBAIC03MTgsMTMgKzcwMSw5IEBACiAgICAgICAgIG9zLmNobW9kKG5ld19maWxlLm5hbWUsIG1vZGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJlbmFtZShuZXdfZmlsZS5uYW1lLCBzZWxmLl9wYXRoKQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FRVhJU1Qgb3IgXAotICAgICAgICAgICAgICAob3MubmFtZSA9PSAnb3MyJyBhbmQgZS5lcnJubyA9PSBlcnJuby5FQUNDRVMpOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLl9wYXRoKQotICAgICAgICAgICAgICAgIG9zLnJlbmFtZShuZXdfZmlsZS5uYW1lLCBzZWxmLl9wYXRoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX3BhdGgpCisgICAgICAgICAgICBvcy5yZW5hbWUobmV3X2ZpbGUubmFtZSwgc2VsZi5fcGF0aCkKICAgICAgICAgc2VsZi5fZmlsZSA9IG9wZW4oc2VsZi5fcGF0aCwgJ3JiKycpCiAgICAgICAgIHNlbGYuX3RvYyA9IG5ld190b2MKICAgICAgICAgc2VsZi5fcGVuZGluZyA9IEZhbHNlCkBAIC0xMDAxLDcgKzk4MCw3IEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDE1LDcgKzk5NCw3IEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDQxLDEyICsxMDIwLDEyIEBACiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiKycpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggZjoKICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICBfbG9ja19maWxlKGYpCiAgICAgICAgICAgICB0cnk6CkBAIC0xMDU0LDggKzEwMzMsNiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGZvciBuYW1lLCBrZXlfbGlzdCBpbiBzZWxmLmdldF9zZXF1ZW5jZXMoKS5pdGVtcygpOgogICAgICAgICAgICAgaWYga2V5IGluIGtleV9saXN0OgogICAgICAgICAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UobmFtZSkKQEAgLTEwNjgsMTIgKzEwNDUsMTIgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmIrJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKICAgICAgICAgICAgIHRyeToKQEAgLTEwODEsMTQgKzEwNTgsMTIgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0yMDgxLDcgKzIwNTYsNyBAQAogICAgICAgICBpZiBmY250bDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYIHwgZmNudGwuTE9DS19OQikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBR0FJTiwgZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignbG9ja2Y6IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCkBAIC0yMDkxLDcgKzIwNjYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByZV9sb2NrID0gX2NyZWF0ZV90ZW1wb3JhcnkoZi5uYW1lICsgJy5sb2NrJykKICAgICAgICAgICAgICAgICBwcmVfbG9jay5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAjIFdpdGhvdXQgd3JpdGUgYWNjZXNzLCBqdXN0IHNraXAgZG90bG9ja2luZy4KICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjEwNCwxNCArMjA3OSwxMCBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShwcmVfbG9jay5uYW1lLCBmLm5hbWUgKyAnLmxvY2snKQogICAgICAgICAgICAgICAgICAgICBkb3Rsb2NrX2RvbmUgPSBUcnVlCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUVYSVNUIG9yIFwKLSAgICAgICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ2RvdCBsb2NrIHVuYXZhaWxhYmxlOiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5uYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignZG90IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKICAgICBleGNlcHQ6CiAgICAgICAgIGlmIGZjbnRsOgogICAgICAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19VTikKZGlmZiAtLWdpdCBhL0xpYi9tYWlsY2FwLnB5IGIvTGliL21haWxjYXAucHkKaW5kZXggOTlmNDk1OC4uYmQ2MWIwYiAxMDA2NDQKLS0tIGEvTGliL21haWxjYXAucHkKKysrIGIvTGliL21haWxjYXAucHkKQEAgLTIwLDcgKzIwLDcgQEAKICAgICBmb3IgbWFpbGNhcCBpbiBsaXN0bWFpbGNhcGZpbGVzKCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gb3BlbihtYWlsY2FwLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIG1vcmVjYXBzID0gcmVhZG1haWxjYXBmaWxlKGZwKQogICAgICAgICBmcC5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvbWltZXR5cGVzLnB5IGIvTGliL21pbWV0eXBlcy5weQppbmRleCAzZTc0MmE3Li5kNzE2MWY4IDEwMDY0NAotLS0gYS9MaWIvbWltZXR5cGVzLnB5CisrKyBiL0xpYi9taW1ldHlwZXMucHkKQEAgLTM2MSw3ICszNjEsNyBAQAogZGVmIHJlYWRfbWltZV90eXBlcyhmaWxlKToKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgZGIgPSBNaW1lVHlwZXMoKQogICAgIGRiLnJlYWRmcChmLCBUcnVlKQpkaWZmIC0tZ2l0IGEvTGliL21vZHVsZWZpbmRlci5weSBiL0xpYi9tb2R1bGVmaW5kZXIucHkKaW5kZXggYTE5N2EwZC4uZWJkMDY4YSAxMDA2NDQKLS0tIGEvTGliL21vZHVsZWZpbmRlci5weQorKysgYi9MaWIvbW9kdWxlZmluZGVyLnB5CkBAIC0xLDEzICsxLDE2IEBACiAiIiJGaW5kIG1vZHVsZXMgdXNlZCBieSBhIHNjcmlwdCwgdXNpbmcgaW50cm9zcGVjdGlvbi4iIiIKIAogaW1wb3J0IGRpcwotaW1wb3J0IGltcAogaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHN0cnVjdAoraW1wb3J0IHdhcm5pbmdzCit3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIGltcG9ydCBpbXAKIAogIyBYWFggQ2xlYW4gdXAgb25jZSBzdHI4J3MgY3N0b3IgbWF0Y2hlcyBieXRlcy4KIExPQURfQ09OU1QgPSBieXRlcyhbZGlzLm9wbmFtZS5pbmRleCgnTE9BRF9DT05TVCcpXSkKQEAgLTIyOSw3ICsyMzIsNyBAQAogICAgICAgICBmb3IgZGlyIGluIG0uX19wYXRoX186CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYubXNnKDIsICJjYW4ndCBsaXN0IGRpcmVjdG9yeSIsIGRpcikKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQppbmRleCAxZjNlNjdjLi44NmRmNjM4IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKQEAgLTgsMjYwICs4LDMxIEBACiAjIHN1YnBhY2thZ2UgJ211bHRpcHJvY2Vzc2luZy5kdW1teScgaGFzIHRoZSBzYW1lIEFQSSBidXQgaXMgYSBzaW1wbGUKICMgd3JhcHBlciBmb3IgJ3RocmVhZGluZycuCiAjCi0jIFRyeSBjYWxsaW5nIGBtdWx0aXByb2Nlc3NpbmcuZG9jLm1haW4oKWAgdG8gcmVhZCB0aGUgaHRtbAotIyBkb2N1bWVudGF0aW9uIGluIGEgd2ViYnJvd3Nlci4KLSMKLSMKICMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKLV9fdmVyc2lvbl9fID0gJzAuNzBhMScKLQotX19hbGxfXyA9IFsKLSAgICAnUHJvY2VzcycsICdjdXJyZW50X3Byb2Nlc3MnLCAnYWN0aXZlX2NoaWxkcmVuJywgJ2ZyZWV6ZV9zdXBwb3J0JywKLSAgICAnTWFuYWdlcicsICdQaXBlJywgJ2NwdV9jb3VudCcsICdsb2dfdG9fc3RkZXJyJywgJ2dldF9sb2dnZXInLAotICAgICdhbGxvd19jb25uZWN0aW9uX3BpY2tsaW5nJywgJ0J1ZmZlclRvb1Nob3J0JywgJ1RpbWVvdXRFcnJvcicsCi0gICAgJ0xvY2snLCAnUkxvY2snLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnLCAnQ29uZGl0aW9uJywKLSAgICAnRXZlbnQnLCAnQmFycmllcicsICdRdWV1ZScsICdTaW1wbGVRdWV1ZScsICdKb2luYWJsZVF1ZXVlJywgJ1Bvb2wnLAotICAgICdWYWx1ZScsICdBcnJheScsICdSYXdWYWx1ZScsICdSYXdBcnJheScsICdTVUJERUJVRycsICdTVUJXQVJOSU5HJywKLSAgICBdCi0KLV9fYXV0aG9yX18gPSAnUi4gT3Vka2VyayAoci5tLm91ZGtlcmtAZ21haWwuY29tKScKLQotIwotIyBJbXBvcnRzCi0jCi0KLWltcG9ydCBvcwogaW1wb3J0IHN5cwotCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbgotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgU1VCREVCVUcsIFNVQldBUk5JTkcKK2Zyb20gLiBpbXBvcnQgY29udGV4dAogCiAjCi0jIEV4Y2VwdGlvbnMKKyMgQ29weSBzdHVmZiBmcm9tIGRlZmF1bHQgY29udGV4dAogIwogCi1jbGFzcyBQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKLSAgICBwYXNzCi0KLWNsYXNzIEJ1ZmZlclRvb1Nob3J0KFByb2Nlc3NFcnJvcik6Ci0gICAgcGFzcwotCi1jbGFzcyBUaW1lb3V0RXJyb3IoUHJvY2Vzc0Vycm9yKToKLSAgICBwYXNzCi0KLWNsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IoUHJvY2Vzc0Vycm9yKToKLSAgICBwYXNzCi0KLWltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCitnbG9iYWxzKCkudXBkYXRlKChuYW1lLCBnZXRhdHRyKGNvbnRleHQuX2RlZmF1bHRfY29udGV4dCwgbmFtZSkpCisgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGNvbnRleHQuX2RlZmF1bHRfY29udGV4dC5fX2FsbF9fKQorX19hbGxfXyA9IGNvbnRleHQuX2RlZmF1bHRfY29udGV4dC5fX2FsbF9fCiAKICMKLSMgRGVmaW5pdGlvbnMgbm90IGRlcGVuZGluZyBvbiBuYXRpdmUgc2VtYXBob3JlcworIyBYWFggVGhlc2Ugc2hvdWxkIG5vdCByZWFsbHkgYmUgZG9jdW1lbnRlZCBvciBwdWJsaWMuCiAjCiAKLWRlZiBNYW5hZ2VyKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIG1hbmFnZXIgYXNzb2NpYXRlZCB3aXRoIGEgcnVubmluZyBzZXJ2ZXIgcHJvY2VzcwotCi0gICAgVGhlIG1hbmFnZXJzIG1ldGhvZHMgc3VjaCBhcyBgTG9jaygpYCwgYENvbmRpdGlvbigpYCBhbmQgYFF1ZXVlKClgCi0gICAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHNoYXJlZCBvYmplY3RzLgotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBTeW5jTWFuYWdlcgotICAgIG0gPSBTeW5jTWFuYWdlcigpCi0gICAgbS5zdGFydCgpCi0gICAgcmV0dXJuIG0KLQotZGVmIFBpcGUoZHVwbGV4PVRydWUpOgotICAgICcnJwotICAgIFJldHVybnMgdHdvIGNvbm5lY3Rpb24gb2JqZWN0IGNvbm5lY3RlZCBieSBhIHBpcGUKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCBQaXBlCi0gICAgcmV0dXJuIFBpcGUoZHVwbGV4KQotCi1kZWYgY3B1X2NvdW50KCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbQotICAgICcnJwotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBudW0gPSBpbnQob3MuZW52aXJvblsnTlVNQkVSX09GX1BST0NFU1NPUlMnXSkKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBLZXlFcnJvcik6Ci0gICAgICAgICAgICBudW0gPSAwCi0gICAgZWxpZiAnYnNkJyBpbiBzeXMucGxhdGZvcm0gb3Igc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICBjb21tID0gJy9zYmluL3N5c2N0bCAtbiBody5uY3B1JwotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICBjb21tID0gJy91c3InICsgY29tbQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIG9zLnBvcGVuKGNvbW0pIGFzIHA6Ci0gICAgICAgICAgICAgICAgbnVtID0gaW50KHAucmVhZCgpKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIG51bSA9IDAKLSAgICBlbHNlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBudW0gPSBvcy5zeXNjb25mKCdTQ19OUFJPQ0VTU09SU19PTkxOJykKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgICAgICBudW0gPSAwCi0KLSAgICBpZiBudW0gPj0gMToKLSAgICAgICAgcmV0dXJuIG51bQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2Nhbm5vdCBkZXRlcm1pbmUgbnVtYmVyIG9mIGNwdXMnKQotCi1kZWYgZnJlZXplX3N1cHBvcnQoKToKLSAgICAnJycKLSAgICBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYSBmYWtlIGZvcmtlZCBwcm9jZXNzIGluIGEgZnJvemVuIGV4ZWN1dGFibGUuCi0gICAgSWYgc28gdGhlbiBydW4gY29kZSBzcGVjaWZpZWQgYnkgY29tbWFuZGxpbmUgYW5kIGV4aXQuCi0gICAgJycnCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBmcmVlemVfc3VwcG9ydAotICAgICAgICBmcmVlemVfc3VwcG9ydCgpCi0KLWRlZiBnZXRfbG9nZ2VyKCk6Ci0gICAgJycnCi0gICAgUmV0dXJuIHBhY2thZ2UgbG9nZ2VyIC0tIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QgdGhlbiBpdCBpcyBjcmVhdGVkCi0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgZ2V0X2xvZ2dlcgotICAgIHJldHVybiBnZXRfbG9nZ2VyKCkKLQotZGVmIGxvZ190b19zdGRlcnIobGV2ZWw9Tm9uZSk6Ci0gICAgJycnCi0gICAgVHVybiBvbiBsb2dnaW5nIGFuZCBhZGQgYSBoYW5kbGVyIHdoaWNoIHByaW50cyB0byBzdGRlcnIKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBsb2dfdG9fc3RkZXJyCi0gICAgcmV0dXJuIGxvZ190b19zdGRlcnIobGV2ZWwpCi0KLWRlZiBhbGxvd19jb25uZWN0aW9uX3BpY2tsaW5nKCk6Ci0gICAgJycnCi0gICAgSW5zdGFsbCBzdXBwb3J0IGZvciBzZW5kaW5nIGNvbm5lY3Rpb25zIGFuZCBzb2NrZXRzIGJldHdlZW4gcHJvY2Vzc2VzCi0gICAgJycnCi0gICAgIyBUaGlzIGlzIHVuZG9jdW1lbnRlZC4gIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIG11bHRpcHJvY2Vzc2luZwotICAgICMgaXRzIG9ubHkgZWZmZWN0IHdhcyB0byBtYWtlIHNvY2tldCBvYmplY3RzIGluaGVyaXRhYmxlIG9uIFdpbmRvd3MuCi0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCitTVUJERUJVRyA9IDUKK1NVQldBUk5JTkcgPSAyNQogCiAjCi0jIERlZmluaXRpb25zIGRlcGVuZGluZyBvbiBuYXRpdmUgc2VtYXBob3JlcworIyBBbGlhcyBmb3IgbWFpbiBtb2R1bGUgLS0gd2lsbCBiZSByZXNldCBieSBib290c3RyYXBwaW5nIGNoaWxkIHByb2Nlc3NlcwogIwogCi1kZWYgTG9jaygpOgotICAgICcnJwotICAgIFJldHVybnMgYSBub24tcmVjdXJzaXZlIGxvY2sgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IExvY2sKLSAgICByZXR1cm4gTG9jaygpCi0KLWRlZiBSTG9jaygpOgotICAgICcnJwotICAgIFJldHVybnMgYSByZWN1cnNpdmUgbG9jayBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgUkxvY2sKLSAgICByZXR1cm4gUkxvY2soKQotCi1kZWYgQ29uZGl0aW9uKGxvY2s9Tm9uZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGNvbmRpdGlvbiBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgQ29uZGl0aW9uCi0gICAgcmV0dXJuIENvbmRpdGlvbihsb2NrKQotCi1kZWYgU2VtYXBob3JlKHZhbHVlPTEpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzZW1hcGhvcmUgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IFNlbWFwaG9yZQotICAgIHJldHVybiBTZW1hcGhvcmUodmFsdWUpCi0KLWRlZiBCb3VuZGVkU2VtYXBob3JlKHZhbHVlPTEpOgotICAgICcnJwotICAgIFJldHVybnMgYSBib3VuZGVkIHNlbWFwaG9yZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgQm91bmRlZFNlbWFwaG9yZQotICAgIHJldHVybiBCb3VuZGVkU2VtYXBob3JlKHZhbHVlKQotCi1kZWYgRXZlbnQoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGFuIGV2ZW50IG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBFdmVudAotICAgIHJldHVybiBFdmVudCgpCi0KLWRlZiBCYXJyaWVyKHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBiYXJyaWVyIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBCYXJyaWVyCi0gICAgcmV0dXJuIEJhcnJpZXIocGFydGllcywgYWN0aW9uLCB0aW1lb3V0KQotCi1kZWYgUXVldWUobWF4c2l6ZT0wKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgcXVldWUgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBRdWV1ZQotICAgIHJldHVybiBRdWV1ZShtYXhzaXplKQotCi1kZWYgSm9pbmFibGVRdWV1ZShtYXhzaXplPTApOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IEpvaW5hYmxlUXVldWUKLSAgICByZXR1cm4gSm9pbmFibGVRdWV1ZShtYXhzaXplKQotCi1kZWYgU2ltcGxlUXVldWUoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgcXVldWUgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZQotICAgIHJldHVybiBTaW1wbGVRdWV1ZSgpCi0KLWRlZiBQb29sKHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgcHJvY2VzcyBwb29sIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnBvb2wgaW1wb3J0IFBvb2wKLSAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncywgbWF4dGFza3NwZXJjaGlsZCkKLQotZGVmIFJhd1ZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc2hhcmVkIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcyBpbXBvcnQgUmF3VmFsdWUKLSAgICByZXR1cm4gUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpCi0KLWRlZiBSYXdBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc2hhcmVkIGFycmF5Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdBcnJheQotICAgIHJldHVybiBSYXdBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKQotCi1kZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBWYWx1ZQotICAgIHJldHVybiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1sb2NrKQotCi1kZWYgQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgKiwgbG9jaz1UcnVlKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBhcnJheQotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcyBpbXBvcnQgQXJyYXkKLSAgICByZXR1cm4gQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgbG9jaz1sb2NrKQotCi0jCi0jCi0jCi0KLWlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotCi0gICAgZGVmIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpOgotICAgICAgICAnJycKLSAgICAgICAgU2V0cyB0aGUgcGF0aCB0byBhIHB5dGhvbi5leGUgb3IgcHl0aG9udy5leGUgYmluYXJ5IHVzZWQgdG8gcnVuCi0gICAgICAgIGNoaWxkIHByb2Nlc3NlcyBvbiBXaW5kb3dzIGluc3RlYWQgb2Ygc3lzLmV4ZWN1dGFibGUuCi0gICAgICAgIFVzZWZ1bCBmb3IgcGVvcGxlIGVtYmVkZGluZyBQeXRob24uCi0gICAgICAgICcnJwotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBzZXRfZXhlY3V0YWJsZQotICAgICAgICBzZXRfZXhlY3V0YWJsZShleGVjdXRhYmxlKQotCi0gICAgX19hbGxfXyArPSBbJ3NldF9leGVjdXRhYmxlJ10KK2lmICdfX21haW5fXycgaW4gc3lzLm1vZHVsZXM6CisgICAgc3lzLm1vZHVsZXNbJ19fbXBfbWFpbl9fJ10gPSBzeXMubW9kdWxlc1snX19tYWluX18nXQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CmluZGV4IDJhMGJjMmYuLjI3ZmRhOWYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKQEAgLTEyLDggKzEyLDYgQEAKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgcGlja2xlCi1pbXBvcnQgc2VsZWN0CiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgZXJybm8KQEAgLTIyLDkgKzIwLDEzIEBACiBpbXBvcnQgaXRlcnRvb2xzCiAKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzLCBBdXRoZW50aWNhdGlvbkVycm9yLCBCdWZmZXJUb29TaG9ydAotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgZ2V0X3RlbXBfZGlyLCBGaW5hbGl6ZSwgc3ViX2RlYnVnLCBkZWJ1ZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKKworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitmcm9tIC4gaW1wb3J0IEF1dGhlbnRpY2F0aW9uRXJyb3IsIEJ1ZmZlclRvb1Nob3J0Citmcm9tIC5yZWR1Y3Rpb24gaW1wb3J0IEZvcmtpbmdQaWNrbGVyCisKIHRyeToKICAgICBpbXBvcnQgX3dpbmFwaQogICAgIGZyb20gX3dpbmFwaSBpbXBvcnQgV0FJVF9PQkpFQ1RfMCwgV0FJVF9USU1FT1VULCBJTkZJTklURQpAQCAtNzIsNyArNzQsNyBAQAogICAgIGlmIGZhbWlseSA9PSAnQUZfSU5FVCc6CiAgICAgICAgIHJldHVybiAoJ2xvY2FsaG9zdCcsIDApCiAgICAgZWxpZiBmYW1pbHkgPT0gJ0FGX1VOSVgnOgotICAgICAgICByZXR1cm4gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD0nbGlzdGVuZXItJywgZGlyPWdldF90ZW1wX2RpcigpKQorICAgICAgICByZXR1cm4gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD0nbGlzdGVuZXItJywgZGlyPXV0aWwuZ2V0X3RlbXBfZGlyKCkpCiAgICAgZWxpZiBmYW1pbHkgPT0gJ0FGX1BJUEUnOgogICAgICAgICByZXR1cm4gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD1yJ1xcLlxwaXBlXHB5Yy0lZC0lZC0nICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3MuZ2V0cGlkKCksIG5leHQoX21tYXBfY291bnRlcikpKQpAQCAtMTMyLDIyICsxMzQsMjIgQEAKIAogICAgIGRlZiBfY2hlY2tfY2xvc2VkKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9oYW5kbGUgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImhhbmRsZSBpcyBjbG9zZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiaGFuZGxlIGlzIGNsb3NlZCIpCiAKICAgICBkZWYgX2NoZWNrX3JlYWRhYmxlKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fcmVhZGFibGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjb25uZWN0aW9uIGlzIHdyaXRlLW9ubHkiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY29ubmVjdGlvbiBpcyB3cml0ZS1vbmx5IikKIAogICAgIGRlZiBfY2hlY2tfd3JpdGFibGUoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl93cml0YWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNvbm5lY3Rpb24gaXMgcmVhZC1vbmx5IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNvbm5lY3Rpb24gaXMgcmVhZC1vbmx5IikKIAogICAgIGRlZiBfYmFkX21lc3NhZ2VfbGVuZ3RoKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl93cml0YWJsZToKICAgICAgICAgICAgIHNlbGYuX3JlYWRhYmxlID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICByYWlzZSBJT0Vycm9yKCJiYWQgbWVzc2FnZSBsZW5ndGgiKQorICAgICAgICByYWlzZSBPU0Vycm9yKCJiYWQgbWVzc2FnZSBsZW5ndGgiKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGNsb3NlZChzZWxmKToKQEAgLTIwMiw5ICsyMDQsNyBAQAogICAgICAgICAiIiJTZW5kIGEgKHBpY2tsYWJsZSkgb2JqZWN0IiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIHNlbGYuX2NoZWNrX3dyaXRhYmxlKCkKLSAgICAgICAgYnVmID0gaW8uQnl0ZXNJTygpCi0gICAgICAgIEZvcmtpbmdQaWNrbGVyKGJ1ZiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpLmR1bXAob2JqKQotICAgICAgICBzZWxmLl9zZW5kX2J5dGVzKGJ1Zi5nZXRidWZmZXIoKSkKKyAgICAgICAgc2VsZi5fc2VuZF9ieXRlcyhGb3JraW5nUGlja2xlci5kdW1wcyhvYmopKQogCiAgICAgZGVmIHJlY3ZfYnl0ZXMoc2VsZiwgbWF4bGVuZ3RoPU5vbmUpOgogICAgICAgICAiIiIKQEAgLTI0OSw3ICsyNDksNyBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBzZWxmLl9jaGVja19yZWFkYWJsZSgpCiAgICAgICAgIGJ1ZiA9IHNlbGYuX3JlY3ZfYnl0ZXMoKQotICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGJ1Zi5nZXRidWZmZXIoKSkKKyAgICAgICAgcmV0dXJuIEZvcmtpbmdQaWNrbGVyLmxvYWRzKGJ1Zi5nZXRidWZmZXIoKSkKIAogICAgIGRlZiBwb2xsKHNlbGYsIHRpbWVvdXQ9MC4wKToKICAgICAgICAgIiIiV2hldGhlciB0aGVyZSBpcyBhbnkgaW5wdXQgYXZhaWxhYmxlIHRvIGJlIHJlYWQiIiIKQEAgLTMxNyw3ICszMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmCiAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGVyciA9PSBfd2luYXBpLkVSUk9SX01PUkVfREFUQToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X21vcmVfZGF0YShvdiwgbWF4c2l6ZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIGUud2luZXJyb3IgPT0gX3dpbmFwaS5FUlJPUl9CUk9LRU5fUElQRToKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0zODksNyArMzg5LDcgQEAKICAgICAgICAgICAgICAgICBpZiByZW1haW5pbmcgPT0gc2l6ZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJnb3QgZW5kIG9mIGZpbGUgZHVyaW5nIG1lc3NhZ2UiKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJnb3QgZW5kIG9mIGZpbGUgZHVyaW5nIG1lc3NhZ2UiKQogICAgICAgICAgICAgYnVmLndyaXRlKGNodW5rKQogICAgICAgICAgICAgcmVtYWluaW5nIC09IG4KICAgICAgICAgcmV0dXJuIGJ1ZgpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAgICAgICAgIFJldHVybnMgYSBgQ29ubmVjdGlvbmAgb2JqZWN0LgogICAgICAgICAnJycKICAgICAgICAgaWYgc2VsZi5fbGlzdGVuZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2xpc3RlbmVyIGlzIGNsb3NlZCcpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdsaXN0ZW5lciBpcyBjbG9zZWQnKQogICAgICAgICBjID0gc2VsZi5fbGlzdGVuZXIuYWNjZXB0KCkKICAgICAgICAgaWYgc2VsZi5fYXV0aGtleToKICAgICAgICAgICAgIGRlbGl2ZXJfY2hhbGxlbmdlKGMsIHNlbGYuX2F1dGhrZXkpCkBAIC01MzUsNyArNTM1LDkgQEAKICAgICAgICAgICAgIF93aW5hcGkuRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UsCiAgICAgICAgICAgICBfd2luYXBpLlBJUEVfVFlQRV9NRVNTQUdFIHwgX3dpbmFwaS5QSVBFX1JFQURNT0RFX01FU1NBR0UgfAogICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1dBSVQsCi0gICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwgX3dpbmFwaS5OVUxMCisgICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwKKyAgICAgICAgICAgICMgZGVmYXVsdCBzZWN1cml0eSBkZXNjcmlwdG9yOiB0aGUgaGFuZGxlIGNhbm5vdCBiZSBpbmhlcml0ZWQKKyAgICAgICAgICAgIF93aW5hcGkuTlVMTAogICAgICAgICAgICAgKQogICAgICAgICBoMiA9IF93aW5hcGkuQ3JlYXRlRmlsZSgKICAgICAgICAgICAgIGFkZHJlc3MsIGFjY2VzcywgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCkBAIC01ODAsNyArNTgyLDcgQEAKICAgICAgICAgc2VsZi5fbGFzdF9hY2NlcHRlZCA9IE5vbmUKIAogICAgICAgICBpZiBmYW1pbHkgPT0gJ0FGX1VOSVgnOgotICAgICAgICAgICAgc2VsZi5fdW5saW5rID0gRmluYWxpemUoCisgICAgICAgICAgICBzZWxmLl91bmxpbmsgPSB1dGlsLkZpbmFsaXplKAogICAgICAgICAgICAgICAgIHNlbGYsIG9zLnVubGluaywgYXJncz0oYWRkcmVzcywpLCBleGl0cHJpb3JpdHk9MAogICAgICAgICAgICAgICAgICkKICAgICAgICAgZWxzZToKQEAgLTYyOCw4ICs2MzAsOCBAQAogICAgICAgICAgICAgc2VsZi5faGFuZGxlX3F1ZXVlID0gW3NlbGYuX25ld19oYW5kbGUoZmlyc3Q9VHJ1ZSldCiAKICAgICAgICAgICAgIHNlbGYuX2xhc3RfYWNjZXB0ZWQgPSBOb25lCi0gICAgICAgICAgICBzdWJfZGVidWcoJ2xpc3RlbmVyIGNyZWF0ZWQgd2l0aCBhZGRyZXNzPSVyJywgc2VsZi5fYWRkcmVzcykKLSAgICAgICAgICAgIHNlbGYuY2xvc2UgPSBGaW5hbGl6ZSgKKyAgICAgICAgICAgIHV0aWwuc3ViX2RlYnVnKCdsaXN0ZW5lciBjcmVhdGVkIHdpdGggYWRkcmVzcz0lcicsIHNlbGYuX2FkZHJlc3MpCisgICAgICAgICAgICBzZWxmLmNsb3NlID0gdXRpbC5GaW5hbGl6ZSgKICAgICAgICAgICAgICAgICBzZWxmLCBQaXBlTGlzdGVuZXIuX2ZpbmFsaXplX3BpcGVfbGlzdGVuZXIsCiAgICAgICAgICAgICAgICAgYXJncz0oc2VsZi5faGFuZGxlX3F1ZXVlLCBzZWxmLl9hZGRyZXNzKSwgZXhpdHByaW9yaXR5PTAKICAgICAgICAgICAgICAgICApCkBAIC02NzEsNyArNjczLDcgQEAKIAogICAgICAgICBAc3RhdGljbWV0aG9kCiAgICAgICAgIGRlZiBfZmluYWxpemVfcGlwZV9saXN0ZW5lcihxdWV1ZSwgYWRkcmVzcyk6Ci0gICAgICAgICAgICBzdWJfZGVidWcoJ2Nsb3NpbmcgbGlzdGVuZXIgd2l0aCBhZGRyZXNzPSVyJywgYWRkcmVzcykKKyAgICAgICAgICAgIHV0aWwuc3ViX2RlYnVnKCdjbG9zaW5nIGxpc3RlbmVyIHdpdGggYWRkcmVzcz0lcicsIGFkZHJlc3MpCiAgICAgICAgICAgICBmb3IgaGFuZGxlIGluIHF1ZXVlOgogICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaGFuZGxlKQogCkBAIC02ODgsNyArNjkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCiAgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQsIF93aW5hcGkuTlVMTAogICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUud2luZXJyb3Igbm90IGluIChfd2luYXBpLkVSUk9SX1NFTV9USU1FT1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkVSUk9SX1BJUEVfQlVTWSkgb3IgX2NoZWNrX3RpbWVvdXQodCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCkBAIC04NzQsMjggKzg3NiwxNSBAQAogCiBlbHNlOgogCi0gICAgaWYgaGFzYXR0cihzZWxlY3QsICdwb2xsJyk6Ci0gICAgICAgIGRlZiBfcG9sbChmZHMsIHRpbWVvdXQpOgotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gaW50KHRpbWVvdXQgKiAxMDAwKSAgIyB0aW1lb3V0IGlzIGluIG1pbGxpc2Vjb25kcwotICAgICAgICAgICAgZmRfbWFwID0ge30KLSAgICAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKLSAgICAgICAgICAgICAgICBwb2xsc3Rlci5yZWdpc3RlcihmZCwgc2VsZWN0LlBPTExJTikKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZkLCAnZmlsZW5vJyk6Ci0gICAgICAgICAgICAgICAgICAgIGZkX21hcFtmZC5maWxlbm8oKV0gPSBmZAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZkX21hcFtmZF0gPSBmZAotICAgICAgICAgICAgbHMgPSBbXQotICAgICAgICAgICAgZm9yIGZkLCBldmVudCBpbiBwb2xsc3Rlci5wb2xsKHRpbWVvdXQpOgotICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgc2VsZWN0LlBPTExOVkFMOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciAlaScgJSBmZCkKLSAgICAgICAgICAgICAgICBscy5hcHBlbmQoZmRfbWFwW2ZkXSkKLSAgICAgICAgICAgIHJldHVybiBscwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiBfcG9sbChmZHMsIHRpbWVvdXQpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGVjdC5zZWxlY3QoZmRzLCBbXSwgW10sIHRpbWVvdXQpWzBdCisgICAgaW1wb3J0IHNlbGVjdG9ycwogCisgICAgIyBwb2xsL3NlbGVjdCBoYXZlIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IHJlcXVpcmluZyBhbnkgZXh0cmEgZmlsZQorICAgICMgZGVzY3JpcHRvciwgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZQorICAgICMgc3lzY2FsbCkuCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICAgICAgX1dhaXRTZWxlY3RvciA9IHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IKKyAgICBlbHNlOgorICAgICAgICBfV2FpdFNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCiAKICAgICBkZWYgd2FpdChvYmplY3RfbGlzdCwgdGltZW91dD1Ob25lKToKICAgICAgICAgJycnCkBAIC05MDMsMzQgKzg5Miw1NCBAQAogCiAgICAgICAgIFJldHVybnMgbGlzdCBvZiB0aG9zZSBvYmplY3RzIGluIG9iamVjdF9saXN0IHdoaWNoIGFyZSByZWFkeS9yZWFkYWJsZS4KICAgICAgICAgJycnCi0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9wb2xsKG9iamVjdF9saXN0LCAwKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBfcG9sbChvYmplY3RfbGlzdCwgdGltZW91dCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgd2l0aCBfV2FpdFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBmb3Igb2JqIGluIG9iamVjdF9saXN0OgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKG9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgaWYgcmVhZHk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBba2V5LmZpbGVvYmogZm9yIChrZXksIGV2ZW50cykgaW4gcmVhZHldCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKIAogIwogIyBNYWtlIGNvbm5lY3Rpb24gYW5kIHNvY2tldCBvYmplY3RzIHNoYXJhYmxlIGlmIHBvc3NpYmxlCiAjCiAKIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgcmVkdWN0aW9uLnJlZHVjZV9zb2NrZXQpCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoQ29ubmVjdGlvbiwgcmVkdWN0aW9uLnJlZHVjZV9jb25uZWN0aW9uKQotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKFBpcGVDb25uZWN0aW9uLCByZWR1Y3Rpb24ucmVkdWNlX3BpcGVfY29ubmVjdGlvbikKKyAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6CisgICAgICAgIGhhbmRsZSA9IGNvbm4uZmlsZW5vKCkKKyAgICAgICAgd2l0aCBzb2NrZXQuZnJvbWZkKGhhbmRsZSwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCisgICAgICAgICAgICBkcyA9IHJlc291cmNlX3NoYXJlci5EdXBTb2NrZXQocykKKyAgICAgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkcywgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRzLCByZWFkYWJsZSwgd3JpdGFibGUpOgorICAgICAgICBzb2NrID0gZHMuZGV0YWNoKCkKKyAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oc29jay5kZXRhY2goKSwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y2VfY29ubmVjdGlvbikKKworICAgIGRlZiByZWR1Y2VfcGlwZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBhY2Nlc3MgPSAoKF93aW5hcGkuRklMRV9HRU5FUklDX1JFQUQgaWYgY29ubi5yZWFkYWJsZSBlbHNlIDApIHwKKyAgICAgICAgICAgICAgICAgIChfd2luYXBpLkZJTEVfR0VORVJJQ19XUklURSBpZiBjb25uLndyaXRhYmxlIGVsc2UgMCkpCisgICAgICAgIGRoID0gcmVkdWN0aW9uLkR1cEhhbmRsZShjb25uLmZpbGVubygpLCBhY2Nlc3MpCisgICAgICAgIHJldHVybiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbiwgKGRoLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQorICAgIGRlZiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbihkaCwgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgaGFuZGxlID0gZGguZGV0YWNoKCkKKyAgICAgICAgcmV0dXJuIFBpcGVDb25uZWN0aW9uKGhhbmRsZSwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihQaXBlQ29ubmVjdGlvbiwgcmVkdWNlX3BpcGVfY29ubmVjdGlvbikKKwogZWxzZToKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgcmVkdWN0aW9uLnJlZHVjZV9zb2NrZXQpCi0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjdGlvbi5yZWR1Y2VfY29ubmVjdGlvbikKKyAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6CisgICAgICAgIGRmID0gcmVkdWN0aW9uLkR1cEZkKGNvbm4uZmlsZW5vKCkpCisgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkZiwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRmLCByZWFkYWJsZSwgd3JpdGFibGUpOgorICAgICAgICBmZCA9IGRmLmRldGFjaCgpCisgICAgICAgIHJldHVybiBDb25uZWN0aW9uKGZkLCByZWFkYWJsZSwgd3JpdGFibGUpCisgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjZV9jb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzODQ5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2NvbnRleHQucHkKQEAgLTAsMCArMSwzNDggQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKKworX19hbGxfXyA9IFtdICAgICAgICAgICAgIyB0aGluZ3MgYXJlIGNvcGllZCBmcm9tIGhlcmUgdG8gX19pbml0X18ucHkKKworIworIyBFeGNlcHRpb25zCisjCisKK2NsYXNzIFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgQnVmZmVyVG9vU2hvcnQoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIFRpbWVvdXRFcnJvcihQcm9jZXNzRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgQXV0aGVudGljYXRpb25FcnJvcihQcm9jZXNzRXJyb3IpOgorICAgIHBhc3MKKworIworIyBCYXNlIHR5cGUgZm9yIGNvbnRleHRzCisjCisKK2NsYXNzIEJhc2VDb250ZXh0KG9iamVjdCk6CisKKyAgICBQcm9jZXNzRXJyb3IgPSBQcm9jZXNzRXJyb3IKKyAgICBCdWZmZXJUb29TaG9ydCA9IEJ1ZmZlclRvb1Nob3J0CisgICAgVGltZW91dEVycm9yID0gVGltZW91dEVycm9yCisgICAgQXV0aGVudGljYXRpb25FcnJvciA9IEF1dGhlbnRpY2F0aW9uRXJyb3IKKworICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcykKKyAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QocHJvY2Vzcy5hY3RpdmVfY2hpbGRyZW4pCisKKyAgICBkZWYgY3B1X2NvdW50KHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtJycnCisgICAgICAgIG51bSA9IG9zLmNwdV9jb3VudCgpCisgICAgICAgIGlmIG51bSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY3B1cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbnVtCisKKyAgICBkZWYgTWFuYWdlcihzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhIG1hbmFnZXIgYXNzb2NpYXRlZCB3aXRoIGEgcnVubmluZyBzZXJ2ZXIgcHJvY2VzcworCisgICAgICAgIFRoZSBtYW5hZ2VycyBtZXRob2RzIHN1Y2ggYXMgYExvY2soKWAsIGBDb25kaXRpb24oKWAgYW5kIGBRdWV1ZSgpYAorICAgICAgICBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC5tYW5hZ2VycyBpbXBvcnQgU3luY01hbmFnZXIKKyAgICAgICAgbSA9IFN5bmNNYW5hZ2VyKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisgICAgICAgIG0uc3RhcnQoKQorICAgICAgICByZXR1cm4gbQorCisgICAgZGVmIFBpcGUoc2VsZiwgZHVwbGV4PVRydWUpOgorICAgICAgICAnJydSZXR1cm5zIHR3byBjb25uZWN0aW9uIG9iamVjdCBjb25uZWN0ZWQgYnkgYSBwaXBlJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKKyAgICAgICAgcmV0dXJuIFBpcGUoZHVwbGV4KQorCisgICAgZGVmIExvY2soc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSBub24tcmVjdXJzaXZlIGxvY2sgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBMb2NrCisgICAgICAgIHJldHVybiBMb2NrKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUkxvY2soc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSByZWN1cnNpdmUgbG9jayBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IFJMb2NrCisgICAgICAgIHJldHVybiBSTG9jayhjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIENvbmRpdGlvbihzZWxmLCBsb2NrPU5vbmUpOgorICAgICAgICAnJydSZXR1cm5zIGEgY29uZGl0aW9uIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQ29uZGl0aW9uCisgICAgICAgIHJldHVybiBDb25kaXRpb24obG9jaywgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBTZW1hcGhvcmUoc2VsZiwgdmFsdWU9MSk6CisgICAgICAgICcnJ1JldHVybnMgYSBzZW1hcGhvcmUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBTZW1hcGhvcmUKKyAgICAgICAgcmV0dXJuIFNlbWFwaG9yZSh2YWx1ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBCb3VuZGVkU2VtYXBob3JlKHNlbGYsIHZhbHVlPTEpOgorICAgICAgICAnJydSZXR1cm5zIGEgYm91bmRlZCBzZW1hcGhvcmUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBCb3VuZGVkU2VtYXBob3JlCisgICAgICAgIHJldHVybiBCb3VuZGVkU2VtYXBob3JlKHZhbHVlLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEV2ZW50KHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGFuIGV2ZW50IG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgRXZlbnQKKyAgICAgICAgcmV0dXJuIEV2ZW50KGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQmFycmllcihzZWxmLCBwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIGJhcnJpZXIgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBCYXJyaWVyCisgICAgICAgIHJldHVybiBCYXJyaWVyKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBRdWV1ZShzZWxmLCBtYXhzaXplPTApOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgUXVldWUKKyAgICAgICAgcmV0dXJuIFF1ZXVlKG1heHNpemUsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgSm9pbmFibGVRdWV1ZShzZWxmLCBtYXhzaXplPTApOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgSm9pbmFibGVRdWV1ZQorICAgICAgICByZXR1cm4gSm9pbmFibGVRdWV1ZShtYXhzaXplLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFNpbXBsZVF1ZXVlKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUKKyAgICAgICAgcmV0dXJuIFNpbXBsZVF1ZXVlKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUG9vbChzZWxmLCBwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksCisgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIHByb2Nlc3MgcG9vbCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAucG9vbCBpbXBvcnQgUG9vbAorICAgICAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncywgbWF4dGFza3NwZXJjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUmF3VmFsdWUoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgorICAgICAgICAnJydSZXR1cm5zIGEgc2hhcmVkIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd1ZhbHVlCisgICAgICAgIHJldHVybiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncykKKworICAgIGRlZiBSYXdBcnJheShzZWxmLCB0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKToKKyAgICAgICAgJycnUmV0dXJucyBhIHNoYXJlZCBhcnJheScnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd0FycmF5CisgICAgICAgIHJldHVybiBSYXdBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKQorCisgICAgZGVmIFZhbHVlKHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPVRydWUpOgorICAgICAgICAnJydSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBWYWx1ZQorICAgICAgICByZXR1cm4gVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9bG9jaywKKyAgICAgICAgICAgICAgICAgICAgIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQXJyYXkoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgKiwgbG9jaz1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgYXJyYXknJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBBcnJheQorICAgICAgICByZXR1cm4gQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgbG9jaz1sb2NrLAorICAgICAgICAgICAgICAgICAgICAgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBmcmVlemVfc3VwcG9ydChzZWxmKToKKyAgICAgICAgJycnQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgZmFrZSBmb3JrZWQgcHJvY2VzcyBpbiBhIGZyb3plbiBleGVjdXRhYmxlLgorICAgICAgICBJZiBzbyB0aGVuIHJ1biBjb2RlIHNwZWNpZmllZCBieSBjb21tYW5kbGluZSBhbmQgZXhpdC4KKyAgICAgICAgJycnCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKKyAgICAgICAgICAgIGZyb20gLnNwYXduIGltcG9ydCBmcmVlemVfc3VwcG9ydAorICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQorCisgICAgZGVmIGdldF9sb2dnZXIoc2VsZik6CisgICAgICAgICcnJ1JldHVybiBwYWNrYWdlIGxvZ2dlciAtLSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IHRoZW4KKyAgICAgICAgaXQgaXMgY3JlYXRlZC4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IGdldF9sb2dnZXIKKyAgICAgICAgcmV0dXJuIGdldF9sb2dnZXIoKQorCisgICAgZGVmIGxvZ190b19zdGRlcnIoc2VsZiwgbGV2ZWw9Tm9uZSk6CisgICAgICAgICcnJ1R1cm4gb24gbG9nZ2luZyBhbmQgYWRkIGEgaGFuZGxlciB3aGljaCBwcmludHMgdG8gc3RkZXJyJycnCisgICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IGxvZ190b19zdGRlcnIKKyAgICAgICAgcmV0dXJuIGxvZ190b19zdGRlcnIobGV2ZWwpCisKKyAgICBkZWYgYWxsb3dfY29ubmVjdGlvbl9waWNrbGluZyhzZWxmKToKKyAgICAgICAgJycnSW5zdGFsbCBzdXBwb3J0IGZvciBzZW5kaW5nIGNvbm5lY3Rpb25zIGFuZCBzb2NrZXRzCisgICAgICAgIGJldHdlZW4gcHJvY2Vzc2VzCisgICAgICAgICcnJworICAgICAgICAjIFRoaXMgaXMgdW5kb2N1bWVudGVkLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgbXVsdGlwcm9jZXNzaW5nCisgICAgICAgICMgaXRzIG9ubHkgZWZmZWN0IHdhcyB0byBtYWtlIHNvY2tldCBvYmplY3RzIGluaGVyaXRhYmxlIG9uIFdpbmRvd3MuCisgICAgICAgIGZyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorCisgICAgZGVmIHNldF9leGVjdXRhYmxlKHNlbGYsIGV4ZWN1dGFibGUpOgorICAgICAgICAnJydTZXRzIHRoZSBwYXRoIHRvIGEgcHl0aG9uLmV4ZSBvciBweXRob253LmV4ZSBiaW5hcnkgdXNlZCB0byBydW4KKyAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIGluc3RlYWQgb2Ygc3lzLmV4ZWN1dGFibGUgd2hlbiB1c2luZyB0aGUgJ3NwYXduJworICAgICAgICBzdGFydCBtZXRob2QuICBVc2VmdWwgZm9yIHBlb3BsZSBlbWJlZGRpbmcgUHl0aG9uLgorICAgICAgICAnJycKKyAgICAgICAgZnJvbSAuc3Bhd24gaW1wb3J0IHNldF9leGVjdXRhYmxlCisgICAgICAgIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCisKKyAgICBkZWYgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChzZWxmLCBtb2R1bGVfbmFtZXMpOgorICAgICAgICAnJydTZXQgbGlzdCBvZiBtb2R1bGUgbmFtZXMgdG8gdHJ5IHRvIGxvYWQgaW4gZm9ya3NlcnZlciBwcm9jZXNzLgorICAgICAgICBUaGlzIGlzIHJlYWxseSBqdXN0IGEgaGludC4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLmZvcmtzZXJ2ZXIgaW1wb3J0IHNldF9mb3Jrc2VydmVyX3ByZWxvYWQKKyAgICAgICAgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChtb2R1bGVfbmFtZXMpCisKKyAgICBkZWYgZ2V0X2NvbnRleHQoc2VsZiwgbWV0aG9kPU5vbmUpOgorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN0eCA9IF9jb25jcmV0ZV9jb250ZXh0c1ttZXRob2RdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBmaW5kIGNvbnRleHQgZm9yICVyJyAlIG1ldGhvZCkKKyAgICAgICAgY3R4Ll9jaGVja19hdmFpbGFibGUoKQorICAgICAgICByZXR1cm4gY3R4CisKKyAgICBkZWYgZ2V0X3N0YXJ0X21ldGhvZChzZWxmLCBhbGxvd19ub25lPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBzZXRfc3RhcnRfbWV0aG9kKHNlbGYsIG1ldGhvZD1Ob25lKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2Fubm90IHNldCBzdGFydCBtZXRob2Qgb2YgY29uY3JldGUgY29udGV4dCcpCisKKyAgICBkZWYgX2NoZWNrX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgcGFzcworCisjCisjIFR5cGUgb2YgZGVmYXVsdCBjb250ZXh0IC0tIHVuZGVybHlpbmcgY29udGV4dCBjYW4gYmUgc2V0IGF0IG1vc3Qgb25jZQorIworCitjbGFzcyBQcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgIF9zdGFydF9tZXRob2QgPSBOb25lCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICByZXR1cm4gX2RlZmF1bHRfY29udGV4dC5nZXRfY29udGV4dCgpLlByb2Nlc3MuX1BvcGVuKHByb2Nlc3Nfb2JqKQorCitjbGFzcyBEZWZhdWx0Q29udGV4dChCYXNlQ29udGV4dCk6CisgICAgUHJvY2VzcyA9IFByb2Nlc3MKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0KToKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9jb250ZXh0ID0gY29udGV4dAorICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IE5vbmUKKworICAgIGRlZiBnZXRfY29udGV4dChzZWxmLCBtZXRob2Q9Tm9uZSk6CisgICAgICAgIGlmIG1ldGhvZCBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuX2RlZmF1bHRfY29udGV4dAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FjdHVhbF9jb250ZXh0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfY29udGV4dChtZXRob2QpCisKKyAgICBkZWYgc2V0X3N0YXJ0X21ldGhvZChzZWxmLCBtZXRob2QsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgbm90IE5vbmUgYW5kIG5vdCBmb3JjZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY29udGV4dCBoYXMgYWxyZWFkeSBiZWVuIHNldCcpCisgICAgICAgIGlmIG1ldGhvZCBpcyBOb25lIGFuZCBmb3JjZToKKyAgICAgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gc2VsZi5nZXRfY29udGV4dChtZXRob2QpCisKKyAgICBkZWYgZ2V0X3N0YXJ0X21ldGhvZChzZWxmLCBhbGxvd19ub25lPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGFsbG93X25vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gc2VsZi5fZGVmYXVsdF9jb250ZXh0CisgICAgICAgIHJldHVybiBzZWxmLl9hY3R1YWxfY29udGV4dC5fbmFtZQorCisgICAgZGVmIGdldF9hbGxfc3RhcnRfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICByZXR1cm4gWydzcGF3biddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorICAgICAgICAgICAgaWYgcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJ10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnZm9yaycsICdzcGF3biddCisKK0RlZmF1bHRDb250ZXh0Ll9fYWxsX18gPSBsaXN0KHggZm9yIHggaW4gZGlyKERlZmF1bHRDb250ZXh0KSBpZiB4WzBdICE9ICdfJykKKworIworIyBDb250ZXh0IHR5cGVzIGZvciBmaXhlZCBzdGFydCBtZXRob2QKKyMKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisKKyAgICBjbGFzcyBGb3JrUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdmb3JrJworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICAgICAgZnJvbSAucG9wZW5fZm9yayBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIFNwYXduUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdzcGF3bicKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX3NwYXduX3Bvc2l4IGltcG9ydCBQb3BlbgorICAgICAgICAgICAgcmV0dXJuIFBvcGVuKHByb2Nlc3Nfb2JqKQorCisgICAgY2xhc3MgRm9ya1NlcnZlclByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnZm9ya3NlcnZlcicKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX2ZvcmtzZXJ2ZXIgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBGb3JrQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ2ZvcmsnCisgICAgICAgIFByb2Nlc3MgPSBGb3JrUHJvY2VzcworCisgICAgY2xhc3MgU3Bhd25Db250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnc3Bhd24nCisgICAgICAgIFByb2Nlc3MgPSBTcGF3blByb2Nlc3MKKworICAgIGNsYXNzIEZvcmtTZXJ2ZXJDb250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnZm9ya3NlcnZlcicKKyAgICAgICAgUHJvY2VzcyA9IEZvcmtTZXJ2ZXJQcm9jZXNzCisgICAgICAgIGRlZiBfY2hlY2tfYXZhaWxhYmxlKHNlbGYpOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KKyAgICAgICAgICAgIGlmIG5vdCByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdmb3Jrc2VydmVyIHN0YXJ0IG1ldGhvZCBub3QgYXZhaWxhYmxlJykKKworICAgIF9jb25jcmV0ZV9jb250ZXh0cyA9IHsKKyAgICAgICAgJ2ZvcmsnOiBGb3JrQ29udGV4dCgpLAorICAgICAgICAnc3Bhd24nOiBTcGF3bkNvbnRleHQoKSwKKyAgICAgICAgJ2ZvcmtzZXJ2ZXInOiBGb3JrU2VydmVyQ29udGV4dCgpLAorICAgIH0KKyAgICBfZGVmYXVsdF9jb250ZXh0ID0gRGVmYXVsdENvbnRleHQoX2NvbmNyZXRlX2NvbnRleHRzWydmb3JrJ10pCisKK2Vsc2U6CisKKyAgICBjbGFzcyBTcGF3blByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnc3Bhd24nCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9zcGF3bl93aW4zMiBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIFNwYXduQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ3NwYXduJworICAgICAgICBQcm9jZXNzID0gU3Bhd25Qcm9jZXNzCisKKyAgICBfY29uY3JldGVfY29udGV4dHMgPSB7CisgICAgICAgICdzcGF3bic6IFNwYXduQ29udGV4dCgpLAorICAgIH0KKyAgICBfZGVmYXVsdF9jb250ZXh0ID0gRGVmYXVsdENvbnRleHQoX2NvbmNyZXRlX2NvbnRleHRzWydzcGF3biddKQorCisjCisjIEZvcmNlIHRoZSBzdGFydCBtZXRob2QKKyMKKworZGVmIF9mb3JjZV9zdGFydF9tZXRob2QobWV0aG9kKToKKyAgICBfZGVmYXVsdF9jb250ZXh0Ll9hY3R1YWxfY29udGV4dCA9IF9jb25jcmV0ZV9jb250ZXh0c1ttZXRob2RdCisKKyMKKyMgQ2hlY2sgdGhhdCB0aGUgY3VycmVudCB0aHJlYWQgaXMgc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCisjCisKK190bHMgPSB0aHJlYWRpbmcubG9jYWwoKQorCitkZWYgZ2V0X3NwYXduaW5nX3BvcGVuKCk6CisgICAgcmV0dXJuIGdldGF0dHIoX3RscywgJ3NwYXduaW5nX3BvcGVuJywgTm9uZSkKKworZGVmIHNldF9zcGF3bmluZ19wb3Blbihwb3Blbik6CisgICAgX3Rscy5zcGF3bmluZ19wb3BlbiA9IHBvcGVuCisKK2RlZiBhc3NlcnRfc3Bhd25pbmcob2JqKToKKyAgICBpZiBnZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBOb25lOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAnJXMgb2JqZWN0cyBzaG91bGQgb25seSBiZSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMnCisgICAgICAgICAgICAnIHRocm91Z2ggaW5oZXJpdGFuY2UnICUgdHlwZShvYmopLl9fbmFtZV9fCisgICAgICAgICAgICApCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQppbmRleCBlMzFmYzYxLi45N2Y3YWY3IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKQEAgLTQsMzIgKzQsNyBAQAogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKICMKICMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jCi0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCi0jICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0jICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0jIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0jIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotIyBTVUNIIERBTUFHRS4KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCiBfX2FsbF9fID0gWwpAQCAtNDcsNyArMjIsNyBAQAogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBhcnJheQogCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5kdW1teS5jb25uZWN0aW9uIGltcG9ydCBQaXBlCitmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBQaXBlCiBmcm9tIHRocmVhZGluZyBpbXBvcnQgTG9jaywgUkxvY2ssIFNlbWFwaG9yZSwgQm91bmRlZFNlbWFwaG9yZQogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IEV2ZW50LCBDb25kaXRpb24sIEJhcnJpZXIKIGZyb20gcXVldWUgaW1wb3J0IFF1ZXVlCkBAIC0xMzgsNyArMTEzLDcgQEAKICAgICBwYXNzCiAKIGRlZiBQb29sKHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6Ci0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgVGhyZWFkUG9vbAorICAgIGZyb20gLi5wb29sIGltcG9ydCBUaHJlYWRQb29sCiAgICAgcmV0dXJuIFRocmVhZFBvb2wocHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpCiAKIEpvaW5hYmxlUXVldWUgPSBRdWV1ZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CmluZGV4IDg3NGVjOGUuLjY5NGVmOTYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKQEAgLTQsMzIgKzQsNyBAQAogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQogIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKLSMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0jIFNVQ0ggREFNQUdFLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKIF9fYWxsX18gPSBbICdDbGllbnQnLCAnTGlzdGVuZXInLCAnUGlwZScgXQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzkzMjM3Li4wMDAwMDAwCi0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NCArMCwwIEBACi0jCi0jIE1vZHVsZSBmb3Igc3RhcnRpbmcgYSBwcm9jZXNzIG9iamVjdCB1c2luZyBvcy5mb3JrKCkgb3IgQ3JlYXRlUHJvY2VzcygpCi0jCi0jIG11bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5Ci0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzaWduYWwKLWltcG9ydCBlcnJubwotCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgdXRpbCwgcHJvY2VzcwotCi1fX2FsbF9fID0gWydQb3BlbicsICdhc3NlcnRfc3Bhd25pbmcnLCAnZHVwbGljYXRlJywgJ2Nsb3NlJywgJ0ZvcmtpbmdQaWNrbGVyJ10KLQotIwotIyBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHRocmVhZCBpcyBzcGF3bmluZyBhIGNoaWxkIHByb2Nlc3MKLSMKLQotZGVmIGFzc2VydF9zcGF3bmluZyhzZWxmKToKLSAgICBpZiBub3QgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICclcyBvYmplY3RzIHNob3VsZCBvbmx5IGJlIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcycKLSAgICAgICAgICAgICcgdGhyb3VnaCBpbmhlcml0YW5jZScgJSB0eXBlKHNlbGYpLl9fbmFtZV9fCi0gICAgICAgICAgICApCi0KLSMKLSMgVHJ5IG1ha2luZyBzb21lIGNhbGxhYmxlIHR5cGVzIHBpY2tsYWJsZQotIwotCi1mcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlcgotZnJvbSBjb3B5cmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQotCi1jbGFzcyBGb3JraW5nUGlja2xlcihQaWNrbGVyKToKLSAgICBfZXh0cmFfcmVkdWNlcnMgPSB7fQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIFBpY2tsZXIuX19pbml0X18oc2VsZiwgKmFyZ3MpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBkaXNwYXRjaF90YWJsZS5jb3B5KCkKLSAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZS51cGRhdGUoc2VsZi5fZXh0cmFfcmVkdWNlcnMpCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHJlZ2lzdGVyKGNscywgdHlwZSwgcmVkdWNlKToKLSAgICAgICAgY2xzLl9leHRyYV9yZWR1Y2Vyc1t0eXBlXSA9IHJlZHVjZQotCi1kZWYgX3JlZHVjZV9tZXRob2QobSk6Ci0gICAgaWYgbS5fX3NlbGZfXyBpcyBOb25lOgotICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19jbGFzc19fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX3NlbGZfXywgbS5fX2Z1bmNfXy5fX25hbWVfXykKLWNsYXNzIF9DOgotICAgIGRlZiBmKHNlbGYpOgotICAgICAgICBwYXNzCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKF9DKCkuZiksIF9yZWR1Y2VfbWV0aG9kKQotCi0KLWRlZiBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKG0pOgotICAgIHJldHVybiBnZXRhdHRyLCAobS5fX29iamNsYXNzX18sIG0uX19uYW1lX18pCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKGxpc3QuYXBwZW5kKSwgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcikKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHR5cGUoaW50Ll9fYWRkX18pLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQotCi10cnk6Ci0gICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGRlZiBfcmVkdWNlX3BhcnRpYWwocCk6Ci0gICAgICAgIHJldHVybiBfcmVidWlsZF9wYXJ0aWFsLCAocC5mdW5jLCBwLmFyZ3MsIHAua2V5d29yZHMgb3Ige30pCi0gICAgZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgotICAgICAgICByZXR1cm4gcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihwYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCi0KLSMKLSMgVW5peAotIwotCi1pZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKLSAgICBkdXBsaWNhdGUgPSBvcy5kdXAKLSAgICBjbG9zZSA9IG9zLmNsb3NlCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0KLSAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKLSAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSByCi0KLSAgICAgICAgICAgIHNlbGYucGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICBpZiBzZWxmLnBpZCA9PSAwOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCi0gICAgICAgICAgICAgICAgaWYgJ3JhbmRvbScgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCByYW5kb20KLSAgICAgICAgICAgICAgICAgICAgcmFuZG9tLnNlZWQoKQotICAgICAgICAgICAgICAgIGNvZGUgPSBwcm9jZXNzX29iai5fYm9vdHN0cmFwKCkKLSAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQotCi0gICAgICAgICAgICAjIGB3YCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBjaGlsZCBleGl0cywgYXQgd2hpY2ggcG9pbnQgYHJgCi0gICAgICAgICAgICAjIHdpbGwgYmVjb21lIHJlYWR5IGZvciByZWFkaW5nICh1c2luZyBlLmcuIHNlbGVjdCgpKS4KLSAgICAgICAgICAgIG9zLmNsb3NlKHcpCi0gICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAociwpKQotCi0gICAgICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIG5vdCB5ZXQgY3JlYXRlZC4gU2VlICMxNzMxNzE3Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGUuZXJybm8gPT0gZXJybm8uRUNISUxEID09IDEwCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0cyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RzKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLldJRkVYSVRFRChzdHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdHMpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG9jayBpZiB3YWl0KCkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBvbGwob3MuV05PSEFORyBpZiB0aW1lb3V0ID09IDAuMCBlbHNlIDApCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTAuMSkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotIwotIyBXaW5kb3dzCi0jCi0KLWVsc2U6Ci0gICAgaW1wb3J0IF90aHJlYWQKLSAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgaW1wb3J0IF93aW5hcGkKLQotICAgIGZyb20gcGlja2xlIGltcG9ydCBsb2FkLCBISUdIRVNUX1BST1RPQ09MCi0KLSAgICBkZWYgZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUpOgotICAgICAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCi0KLSAgICAjCi0gICAgIwotICAgICMKLQotICAgIFRFUk1JTkFURSA9IDB4MTAwMDAKLSAgICBXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQotICAgIFdJTlNFUlZJQ0UgPSBzeXMuZXhlY3V0YWJsZS5sb3dlcigpLmVuZHN3aXRoKCJweXRob25zZXJ2aWNlLmV4ZSIpCi0KLSAgICBjbG9zZSA9IF93aW5hcGkuQ2xvc2VIYW5kbGUKLQotICAgICMKLSAgICAjIF9weXRob25fZXhlIGlzIHRoZSBhc3N1bWVkIHBhdGggdG8gdGhlIHB5dGhvbiBleGVjdXRhYmxlLgotICAgICMgUGVvcGxlIGVtYmVkZGluZyBQeXRob24gd2FudCB0byBtb2RpZnkgaXQuCi0gICAgIwotCi0gICAgaWYgV0lOU0VSVklDRToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9uLmV4ZScpCi0gICAgZWxzZToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBzeXMuZXhlY3V0YWJsZQotCi0gICAgZGVmIHNldF9leGVjdXRhYmxlKGV4ZSk6Ci0gICAgICAgIGdsb2JhbCBfcHl0aG9uX2V4ZQotICAgICAgICBfcHl0aG9uX2V4ZSA9IGV4ZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgZHVwbGljYXRlKGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3M9Tm9uZSwgaW5oZXJpdGFibGU9RmFsc2UpOgotICAgICAgICBpZiB0YXJnZXRfcHJvY2VzcyBpcyBOb25lOgotICAgICAgICAgICAgdGFyZ2V0X3Byb2Nlc3MgPSBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCkKLSAgICAgICAgcmV0dXJuIF93aW5hcGkuRHVwbGljYXRlSGFuZGxlKAotICAgICAgICAgICAgX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpLCBoYW5kbGUsIHRhcmdldF9wcm9jZXNzLAotICAgICAgICAgICAgMCwgaW5oZXJpdGFibGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTCi0gICAgICAgICAgICApCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0gICAgICAgICcnJwotICAgICAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZSBjb2RlIG9mIGEgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIF90bHMgPSBfdGhyZWFkLl9sb2NhbCgpCi0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIGNtZCA9ICcgJy5qb2luKCciJXMiJyAlIHggZm9yIHggaW4gZ2V0X2NvbW1hbmRfbGluZSgpKQotICAgICAgICAgICAgcHJlcF9kYXRhID0gZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCi0KLSAgICAgICAgICAgICMgY3JlYXRlIHBpcGUgZm9yIGNvbW11bmljYXRpb24gd2l0aCBjaGlsZAotICAgICAgICAgICAgcmZkLCB3ZmQgPSBvcy5waXBlKCkKLQotICAgICAgICAgICAgIyBnZXQgaGFuZGxlIGZvciByZWFkIGVuZCBvZiB0aGUgcGlwZSBhbmQgbWFrZSBpdCBpbmhlcml0YWJsZQotICAgICAgICAgICAgcmhhbmRsZSA9IGR1cGxpY2F0ZShtc3ZjcnQuZ2V0X29zZmhhbmRsZShyZmQpLCBpbmhlcml0YWJsZT1UcnVlKQotICAgICAgICAgICAgb3MuY2xvc2UocmZkKQotCi0gICAgICAgICAgICB3aXRoIG9wZW4od2ZkLCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIHRvX2NoaWxkOgotICAgICAgICAgICAgICAgICMgc3RhcnQgcHJvY2VzcwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaHAsIGh0LCBwaWQsIHRpZCA9IF93aW5hcGkuQ3JlYXRlUHJvY2VzcygKLSAgICAgICAgICAgICAgICAgICAgICAgIF9weXRob25fZXhlLCBjbWQgKyAoJyAlcycgJSByaGFuZGxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIDEsIDAsIE5vbmUsIE5vbmUsIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShodCkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBjbG9zZShyaGFuZGxlKQotCi0gICAgICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlcyBvZiBzZWxmCi0gICAgICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKLSAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gaHAKLSAgICAgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gaW50KGhwKQotICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgX3dpbmFwaS5DbG9zZUhhbmRsZSwgKHNlbGYuc2VudGluZWwsKSkKLQotICAgICAgICAgICAgICAgICMgc2VuZCBpbmZvcm1hdGlvbiB0byBjaGlsZAotICAgICAgICAgICAgICAgIFBvcGVuLl90bHMucHJvY2Vzc19oYW5kbGUgPSBpbnQoaHApCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkdW1wKHByZXBfZGF0YSwgdG9fY2hpbGQsIEhJR0hFU1RfUFJPVE9DT0wpCi0gICAgICAgICAgICAgICAgICAgIGR1bXAocHJvY2Vzc19vYmosIHRvX2NoaWxkLCBISUdIRVNUX1BST1RPQ09MKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihQb3Blbi5fdGxzLCAncHJvY2Vzc19oYW5kbGUnLCBOb25lKSBpcyBub3QgTm9uZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoaGFuZGxlKToKLSAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGUoaGFuZGxlLCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlKQotCi0gICAgICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gX3dpbmFwaS5JTkZJTklURQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gbWF4KDAsIGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkpCi0KLSAgICAgICAgICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3QoaW50KHNlbGYuX2hhbmRsZSksIG1zZWNzKQotICAgICAgICAgICAgICAgIGlmIHJlcyA9PSBfd2luYXBpLldBSVRfT0JKRUNUXzA6Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSBfd2luYXBpLkdldEV4aXRDb2RlUHJvY2VzcyhzZWxmLl9oYW5kbGUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNvZGUgPT0gVEVSTUlOQVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IC1zaWduYWwuU0lHVEVSTQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBjb2RlCi0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKLQotICAgICAgICBkZWYgcG9sbChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLndhaXQodGltZW91dD0wKQotCi0gICAgICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIF93aW5hcGkuVGVybWluYXRlUHJvY2VzcyhpbnQoc2VsZi5faGFuZGxlKSwgVEVSTUlOQVRFKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0xLjApIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgaXNfZm9ya2luZyhhcmd2KToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiB3aGV0aGVyIGNvbW1hbmRsaW5lIGluZGljYXRlcyB3ZSBhcmUgZm9ya2luZwotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3YpID49IDIgYW5kIGFyZ3ZbMV0gPT0gJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnOgotICAgICAgICAgICAgYXNzZXJ0IGxlbihhcmd2KSA9PSAzCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLQotICAgIGRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgZm9yIHByb2Nlc3Mgb2JqZWN0IGlmIHRoaXMgaW4gbm90IHRoZSBtYWluIHByb2Nlc3MKLSAgICAgICAgJycnCi0gICAgICAgIGlmIGlzX2Zvcmtpbmcoc3lzLmFyZ3YpOgotICAgICAgICAgICAgbWFpbigpCi0gICAgICAgICAgICBzeXMuZXhpdCgpCi0KLQotICAgIGRlZiBnZXRfY29tbWFuZF9saW5lKCk6Ci0gICAgICAgICcnJwotICAgICAgICBSZXR1cm5zIHByZWZpeCBvZiBjb21tYW5kIGxpbmUgdXNlZCBmb3Igc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCi0gICAgICAgICcnJwotICAgICAgICBpZiBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJycKLSAgICAgICAgICAgIEF0dGVtcHQgdG8gc3RhcnQgYSBuZXcgcHJvY2VzcyBiZWZvcmUgdGhlIGN1cnJlbnQgcHJvY2VzcwotICAgICAgICAgICAgaGFzIGZpbmlzaGVkIGl0cyBib290c3RyYXBwaW5nIHBoYXNlLgotCi0gICAgICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBvbiBXaW5kb3dzIGFuZCB5b3UgaGF2ZQotICAgICAgICAgICAgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tIGluIHRoZSBtYWluIG1vZHVsZToKLQotICAgICAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLSAgICAgICAgICAgICAgICAgICAgLi4uCi0KLSAgICAgICAgICAgIFRoZSAiZnJlZXplX3N1cHBvcnQoKSIgbGluZSBjYW4gYmUgb21pdHRlZCBpZiB0aGUgcHJvZ3JhbQotICAgICAgICAgICAgaXMgbm90IGdvaW5nIHRvIGJlIGZyb3plbiB0byBwcm9kdWNlIGEgV2luZG93cyBleGVjdXRhYmxlLicnJykKLQotICAgICAgICBpZiBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBbc3lzLmV4ZWN1dGFibGUsICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByb2cgPSAnZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgbWFpbjsgbWFpbigpJwotICAgICAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCi0gICAgICAgICAgICByZXR1cm4gW19weXRob25fZXhlXSArIG9wdHMgKyBbJy1jJywgcHJvZywgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXQotCi0KLSAgICBkZWYgbWFpbigpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgc3BlY2lmaWVkIGJ5IGRhdGEgcmVjZWl2ZWQgb3ZlciBwaXBlCi0gICAgICAgICcnJwotICAgICAgICBhc3NlcnQgaXNfZm9ya2luZyhzeXMuYXJndikKLQotICAgICAgICBoYW5kbGUgPSBpbnQoc3lzLmFyZ3ZbLTFdKQotICAgICAgICBmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShoYW5kbGUsIG9zLk9fUkRPTkxZKQotICAgICAgICBmcm9tX3BhcmVudCA9IG9zLmZkb3BlbihmZCwgJ3JiJykKLQotICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gVHJ1ZQotICAgICAgICBwcmVwYXJhdGlvbl9kYXRhID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQotICAgICAgICBzZWxmID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IEZhbHNlCi0KLSAgICAgICAgZnJvbV9wYXJlbnQuY2xvc2UoKQotCi0gICAgICAgIGV4aXRjb2RlID0gc2VsZi5fYm9vdHN0cmFwKCkKLSAgICAgICAgc3lzLmV4aXQoZXhpdGNvZGUpCi0KLQotICAgIGRlZiBnZXRfcHJlcGFyYXRpb25fZGF0YShuYW1lKToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiBpbmZvIGFib3V0IHBhcmVudCBuZWVkZWQgYnkgY2hpbGQgdG8gdW5waWNrbGUgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IF9sb2dnZXIsIF9sb2dfdG9fc3RkZXJyCi0KLSAgICAgICAgZCA9IGRpY3QoCi0gICAgICAgICAgICBuYW1lPW5hbWUsCi0gICAgICAgICAgICBzeXNfcGF0aD1zeXMucGF0aCwKLSAgICAgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAotICAgICAgICAgICAgbG9nX3RvX3N0ZGVycj1fbG9nX3RvX3N0ZGVyciwKLSAgICAgICAgICAgIG9yaWdfZGlyPXByb2Nlc3MuT1JJR0lOQUxfRElSLAotICAgICAgICAgICAgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXksCi0gICAgICAgICAgICApCi0KLSAgICAgICAgaWYgX2xvZ2dlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gX2xvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCi0KLSAgICAgICAgaWYgbm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0U6Ci0gICAgICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAnX19maWxlX18nLCBOb25lKQotICAgICAgICAgICAgaWYgbm90IG1haW5fcGF0aCBhbmQgc3lzLmFyZ3ZbMF0gbm90IGluICgnJywgJy1jJyk6Ci0gICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gc3lzLmFyZ3ZbMF0KLSAgICAgICAgICAgIGlmIG1haW5fcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhtYWluX3BhdGgpIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gb3MucGF0aC5qb2luKHByb2Nlc3MuT1JJR0lOQUxfRElSLCBtYWluX3BhdGgpCi0gICAgICAgICAgICAgICAgZFsnbWFpbl9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKLQotICAgICAgICByZXR1cm4gZAotCi0jCi0jIFByZXBhcmUgY3VycmVudCBwcm9jZXNzCi0jCi0KLW9sZF9tYWluX21vZHVsZXMgPSBbXQotCi1kZWYgcHJlcGFyZShkYXRhKToKLSAgICAnJycKLSAgICBUcnkgdG8gZ2V0IGN1cnJlbnQgcHJvY2VzcyByZWFkeSB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAotICAgICcnJwotICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKHN5cy5tb2R1bGVzWydfX21haW5fXyddKQotCi0gICAgaWYgJ25hbWUnIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQotCi0gICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2F1dGhrZXkgPSBkYXRhWydhdXRoa2V5J10KLQotICAgIGlmICdsb2dfdG9fc3RkZXJyJyBpbiBkYXRhIGFuZCBkYXRhWydsb2dfdG9fc3RkZXJyJ106Ci0gICAgICAgIHV0aWwubG9nX3RvX3N0ZGVycigpCi0KLSAgICBpZiAnbG9nX2xldmVsJyBpbiBkYXRhOgotICAgICAgICB1dGlsLmdldF9sb2dnZXIoKS5zZXRMZXZlbChkYXRhWydsb2dfbGV2ZWwnXSkKLQotICAgIGlmICdzeXNfcGF0aCcgaW4gZGF0YToKLSAgICAgICAgc3lzLnBhdGggPSBkYXRhWydzeXNfcGF0aCddCi0KLSAgICBpZiAnc3lzX2FyZ3YnIGluIGRhdGE6Ci0gICAgICAgIHN5cy5hcmd2ID0gZGF0YVsnc3lzX2FyZ3YnXQotCi0gICAgaWYgJ2RpcicgaW4gZGF0YToKLSAgICAgICAgb3MuY2hkaXIoZGF0YVsnZGlyJ10pCi0KLSAgICBpZiAnb3JpZ19kaXInIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSID0gZGF0YVsnb3JpZ19kaXInXQotCi0gICAgaWYgJ21haW5fcGF0aCcgaW4gZGF0YToKLSAgICAgICAgIyBYWFggKG5jb2dobGFuKTogVGhlIGZvbGxvd2luZyBjb2RlIG1ha2VzIHNldmVyYWwgYm9ndXMKLSAgICAgICAgIyBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIF9fZmlsZV9fCi0gICAgICAgICMgYW5kIGEgbW9kdWxlJ3MgcmVhbCBuYW1lLiBTZWUgUEVQIDMwMiBhbmQgaXNzdWUgIzEwODQ1Ci0gICAgICAgIG1haW5fcGF0aCA9IGRhdGFbJ21haW5fcGF0aCddCi0gICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShtYWluX3BhdGgpKVswXQotICAgICAgICBpZiBtYWluX25hbWUgPT0gJ19faW5pdF9fJzoKLSAgICAgICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpCi0KLSAgICAgICAgaWYgbWFpbl9uYW1lID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCi0gICAgICAgICAgICBtYWluX21vZHVsZS5fX2ZpbGVfXyA9IG1haW5fcGF0aAotICAgICAgICBlbGlmIG1haW5fbmFtZSAhPSAnaXB5dGhvbic6Ci0gICAgICAgICAgICAjIE1haW4gbW9kdWxlcyBub3QgYWN0dWFsbHkgY2FsbGVkIF9fbWFpbl9fLnB5IG1heQotICAgICAgICAgICAgIyBjb250YWluIGFkZGl0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBzdGlsbCBiZSBleGVjdXRlZAotICAgICAgICAgICAgaW1wb3J0IGltcAotCi0gICAgICAgICAgICBpZiBtYWluX3BhdGggaXMgTm9uZToKLSAgICAgICAgICAgICAgICBkaXJzID0gTm9uZQotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkuc3RhcnRzd2l0aCgnX19pbml0X18ucHknKToKLSAgICAgICAgICAgICAgICBkaXJzID0gW29zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSldCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCldCi0KLSAgICAgICAgICAgIGFzc2VydCBtYWluX25hbWUgbm90IGluIHN5cy5tb2R1bGVzLCBtYWluX25hbWUKLSAgICAgICAgICAgIGZpbGUsIHBhdGhfbmFtZSwgZXRjID0gaW1wLmZpbmRfbW9kdWxlKG1haW5fbmFtZSwgZGlycykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIFdlIHdvdWxkIGxpa2UgdG8gZG8gImltcC5sb2FkX21vZHVsZSgnX19tYWluX18nLCAuLi4pIgotICAgICAgICAgICAgICAgICMgaGVyZS4gIEhvd2V2ZXIsIHRoYXQgd291bGQgY2F1c2UgJ2lmIF9fbmFtZV9fID09Ci0gICAgICAgICAgICAgICAgIyAiX19tYWluX18iJyBjbGF1c2VzIHRvIGJlIGV4ZWN1dGVkLgotICAgICAgICAgICAgICAgIG1haW5fbW9kdWxlID0gaW1wLmxvYWRfbW9kdWxlKAotICAgICAgICAgICAgICAgICAgICAnX19wYXJlbnRzX21haW5fXycsIGZpbGUsIHBhdGhfbmFtZSwgZXRjCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgZmlsZToKLSAgICAgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gbWFpbl9tb2R1bGUKLSAgICAgICAgICAgIG1haW5fbW9kdWxlLl9fbmFtZV9fID0gJ19fbWFpbl9fJwotCi0gICAgICAgICAgICAjIFRyeSB0byBtYWtlIHRoZSBwb3RlbnRpYWxseSBwaWNrbGFibGUgb2JqZWN0cyBpbgotICAgICAgICAgICAgIyBzeXMubW9kdWxlc1snX19tYWluX18nXSByZWFsaXplIHRoZXkgYXJlIGluIHRoZSBtYWluCi0gICAgICAgICAgICAjIG1vZHVsZSAtLSBzb21ld2hhdCB1Z2x5LgotICAgICAgICAgICAgZm9yIG9iaiBpbiBsaXN0KG1haW5fbW9kdWxlLl9fZGljdF9fLnZhbHVlcygpKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9iai5fX21vZHVsZV9fID09ICdfX3BhcmVudHNfbWFpbl9fJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iai5fX21vZHVsZV9fID0gJ19fbWFpbl9fJwotICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODc1MTdlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5CkBAIC0wLDAgKzEsMjY3IEBACitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydlbnN1cmVfcnVubmluZycsICdnZXRfaW5oZXJpdGVkX2ZkcycsICdjb25uZWN0X3RvX25ld19wcm9jZXNzJywKKyAgICAgICAgICAgJ3NldF9mb3Jrc2VydmVyX3ByZWxvYWQnXQorCisjCisjCisjCisKK01BWEZEU19UT19TRU5EID0gMjU2CitVTlNJR05FRF9TVFJVQ1QgPSBzdHJ1Y3QuU3RydWN0KCdRJykgICAgICMgbGFyZ2UgZW5vdWdoIGZvciBwaWRfdAorCisjCisjIEZvcmtzZXJ2ZXIgY2xhc3MKKyMKKworY2xhc3MgRm9ya1NlcnZlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9mb3Jrc2VydmVyX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBOb25lCisgICAgICAgIHNlbGYuX2luaGVyaXRlZF9mZHMgPSBOb25lCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyA9IFsnX19tYWluX18nXQorCisgICAgZGVmIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQoc2VsZiwgbW9kdWxlc19uYW1lcyk6CisgICAgICAgICcnJ1NldCBsaXN0IG9mIG1vZHVsZSBuYW1lcyB0byB0cnkgdG8gbG9hZCBpbiBmb3Jrc2VydmVyIHByb2Nlc3MuJycnCisgICAgICAgIGlmIG5vdCBhbGwodHlwZShtb2QpIGlzIHN0ciBmb3IgbW9kIGluIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ21vZHVsZV9uYW1lcyBtdXN0IGJlIGEgbGlzdCBvZiBzdHJpbmdzJykKKyAgICAgICAgc2VsZi5fcHJlbG9hZF9tb2R1bGVzID0gbW9kdWxlc19uYW1lcworCisgICAgZGVmIGdldF9pbmhlcml0ZWRfZmRzKHNlbGYpOgorICAgICAgICAnJydSZXR1cm4gbGlzdCBvZiBmZHMgaW5oZXJpdGVkIGZyb20gcGFyZW50IHByb2Nlc3MuCisKKyAgICAgICAgVGhpcyByZXR1cm5zIE5vbmUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyB3YXMgbm90IHN0YXJ0ZWQgYnkgZm9yaworICAgICAgICBzZXJ2ZXIuCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gc2VsZi5faW5oZXJpdGVkX2ZkcworCisgICAgZGVmIGNvbm5lY3RfdG9fbmV3X3Byb2Nlc3Moc2VsZiwgZmRzKToKKyAgICAgICAgJycnUmVxdWVzdCBmb3Jrc2VydmVyIHRvIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MuCisKKyAgICAgICAgUmV0dXJucyBhIHBhaXIgb2YgZmRzIChzdGF0dXNfciwgZGF0YV93KS4gIFRoZSBjYWxsaW5nIHByb2Nlc3MgY2FuIHJlYWQKKyAgICAgICAgdGhlIGNoaWxkIHByb2Nlc3MncyBwaWQgYW5kIChldmVudHVhbGx5KSBpdHMgcmV0dXJuY29kZSBmcm9tIHN0YXR1c19yLgorICAgICAgICBUaGUgY2FsbGluZyBwcm9jZXNzIHNob3VsZCB3cml0ZSB0byBkYXRhX3cgdGhlIHBpY2tsZWQgcHJlcGFyYXRpb24gYW5kCisgICAgICAgIHByb2Nlc3MgZGF0YS4KKyAgICAgICAgJycnCisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBpZiBsZW4oZmRzKSArIDQgPj0gTUFYRkRTX1RPX1NFTkQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0b28gbWFueSBmZHMnKQorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpIGFzIGNsaWVudDoKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KHNlbGYuX2ZvcmtzZXJ2ZXJfYWRkcmVzcykKKyAgICAgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBjaGlsZF9yLCBwYXJlbnRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgYWxsZmRzID0gW2NoaWxkX3IsIGNoaWxkX3csIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuZ2V0ZmQoKV0KKyAgICAgICAgICAgIGFsbGZkcyArPSBmZHMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uc2VuZGZkcyhjbGllbnQsIGFsbGZkcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50X3IsIHBhcmVudF93CisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3IpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3cpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoY2hpbGRfcikKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShjaGlsZF93KQorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBhIGZvcmsgc2VydmVyIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHByb2Nlc3MuICBOb3RlIHRoYXQgdXN1YWxseSBhIGNoaWxkCisgICAgICAgIHByb2Nlc3Mgd2lsbCBqdXN0IHJldXNlIHRoZSBmb3Jrc2VydmVyIHN0YXJ0ZWQgYnkgaXRzIHBhcmVudCwgc28KKyAgICAgICAgZW5zdXJlX3J1bm5pbmcoKSB3aWxsIGRvIG5vdGhpbmcuCisgICAgICAgICcnJworICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZW1hcGhvcmVfdHJhY2tlci5lbnN1cmVfcnVubmluZygpCisgICAgICAgICAgICBpZiBzZWxmLl9mb3Jrc2VydmVyX2FsaXZlX2ZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBjbWQgPSAoJ2Zyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtzZXJ2ZXIgaW1wb3J0IG1haW47ICcgKworICAgICAgICAgICAgICAgICAgICdtYWluKCVkLCAlZCwgJXIsICoqJXIpJykKKworICAgICAgICAgICAgaWYgc2VsZi5fcHJlbG9hZF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlc2lyZWRfa2V5cyA9IHsnbWFpbl9wYXRoJywgJ3N5c19wYXRoJ30KKyAgICAgICAgICAgICAgICBkYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEoJ2lnbm9yZScpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRpY3QoKHgseSkgZm9yICh4LHkpIGluIGRhdGEuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHggaW4gZGVzaXJlZF9rZXlzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0ge30KKworICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYKSBhcyBsaXN0ZW5lcjoKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gY29ubmVjdGlvbi5hcmJpdHJhcnlfYWRkcmVzcygnQUZfVU5JWCcpCisgICAgICAgICAgICAgICAgbGlzdGVuZXIuYmluZChhZGRyZXNzKQorICAgICAgICAgICAgICAgIG9zLmNobW9kKGFkZHJlc3MsIDBvNjAwKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbigxMDApCisKKyAgICAgICAgICAgICAgICAjIGFsbCBjbGllbnQgcHJvY2Vzc2VzIG93biB0aGUgd3JpdGUgZW5kIG9mIHRoZSAiYWxpdmUiIHBpcGU7CisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZXkgYWxsIHRlcm1pbmF0ZSB0aGUgcmVhZCBlbmQgYmVjb21lcyByZWFkeS4KKyAgICAgICAgICAgICAgICBhbGl2ZV9yLCBhbGl2ZV93ID0gb3MucGlwZSgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfcl0KKyAgICAgICAgICAgICAgICAgICAgY21kICU9IChsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfciwgc2VsZi5fcHJlbG9hZF9tb2R1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtleGVdICsgdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyArPSBbJy1jJywgY21kXQorICAgICAgICAgICAgICAgICAgICBwaWQgPSB1dGlsLnNwYXdudl9wYXNzZmRzKGV4ZSwgYXJncywgZmRzX3RvX3Bhc3MpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShhbGl2ZV93KQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGFsaXZlX3IpCisgICAgICAgICAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICAgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBhbGl2ZV93CisKKyMKKyMKKyMKKworZGVmIG1haW4obGlzdGVuZXJfZmQsIGFsaXZlX3IsIHByZWxvYWQsIG1haW5fcGF0aD1Ob25lLCBzeXNfcGF0aD1Ob25lKToKKyAgICAnJydSdW4gZm9ya3NlcnZlci4nJycKKyAgICBpZiBwcmVsb2FkOgorICAgICAgICBpZiAnX19tYWluX18nIGluIHByZWxvYWQgYW5kIG1haW5fcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Bhd24uaW1wb3J0X21haW5fcGF0aChtYWluX3BhdGgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRlbCBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nCisgICAgICAgIGZvciBtb2RuYW1lIGluIHByZWxvYWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICMgY2xvc2Ugc3lzLnN0ZGluCisgICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc3lzLnN0ZGluID0gb3Blbihvcy5kZXZudWxsKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBpZ25vcmluZyBTSUdDSExEIG1lYW5zIG5vIG5lZWQgdG8gcmVhcCB6b21iaWUgcHJvY2Vzc2VzCisgICAgaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgZmlsZW5vPWxpc3RlbmVyX2ZkKSBhcyBsaXN0ZW5lciwgXAorICAgICAgICAgc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICBfZm9ya3NlcnZlci5fZm9ya3NlcnZlcl9hZGRyZXNzID0gbGlzdGVuZXIuZ2V0c29ja25hbWUoKQorCisgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKGxpc3RlbmVyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoYWxpdmVfciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZmRzID0gW2tleS5maWxlb2JqIGZvciAoa2V5LCBldmVudHMpIGluIHNlbGVjdG9yLnNlbGVjdCgpXQorICAgICAgICAgICAgICAgICAgICBpZiByZmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGlmIGFsaXZlX3IgaW4gcmZkczoKKyAgICAgICAgICAgICAgICAgICAgIyBFT0YgYmVjYXVzZSBubyBtb3JlIGNsaWVudCBwcm9jZXNzZXMgbGVmdAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MucmVhZChhbGl2ZV9yLCAxKSA9PSBiJycKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxpc3RlbmVyIGluIHJmZHMKKyAgICAgICAgICAgICAgICB3aXRoIGxpc3RlbmVyLmFjY2VwdCgpWzBdIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLmZvcmsoKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoY29kZSkKKworICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpOgorICAgICMgY2xvc2UgdW5uZWNlc3Nhcnkgc3R1ZmYgYW5kIHJlc2V0IFNJR0NITEQgaGFuZGxlcgorICAgIGxpc3RlbmVyLmNsb3NlKCkKKyAgICBvcy5jbG9zZShhbGl2ZV9yKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIGhhbmRsZXIpCisKKyAgICAjIHJlY2VpdmUgZmRzIGZyb20gcGFyZW50IHByb2Nlc3MKKyAgICBmZHMgPSByZWR1Y3Rpb24ucmVjdmZkcyhzLCBNQVhGRFNfVE9fU0VORCArIDEpCisgICAgcy5jbG9zZSgpCisgICAgYXNzZXJ0IGxlbihmZHMpIDw9IE1BWEZEU19UT19TRU5ECisgICAgKGNoaWxkX3IsIGNoaWxkX3csIF9mb3Jrc2VydmVyLl9mb3Jrc2VydmVyX2FsaXZlX2ZkLAorICAgICBzdGZkLCAqX2ZvcmtzZXJ2ZXIuX2luaGVyaXRlZF9mZHMpID0gZmRzCisgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHN0ZmQKKworICAgICMgc2VuZCBwaWQgdG8gY2xpZW50IHByb2Nlc3NlcworICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIG9zLmdldHBpZCgpKQorCisgICAgIyByZXNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICByYW5kb20uc2VlZCgpCisKKyAgICAjIHJ1biBwcm9jZXNzIG9iamVjdCByZWNlaXZlZCBvdmVyIHBpcGUKKyAgICBjb2RlID0gc3Bhd24uX21haW4oY2hpbGRfcikKKworICAgICMgd3JpdGUgdGhlIGV4aXQgY29kZSB0byB0aGUgcGlwZQorICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIGNvZGUpCisKKyMKKyMgUmVhZCBhbmQgd3JpdGUgdW5zaWduZWQgbnVtYmVycworIworCitkZWYgcmVhZF91bnNpZ25lZChmZCk6CisgICAgZGF0YSA9IGInJworICAgIGxlbmd0aCA9IFVOU0lHTkVEX1NUUlVDVC5zaXplCisgICAgd2hpbGUgbGVuKGRhdGEpIDwgbGVuZ3RoOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBvcy5yZWFkKGZkLCBsZW5ndGggLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ3VuZXhwZWN0ZWQgRU9GJykKKyAgICAgICAgZGF0YSArPSBzCisgICAgcmV0dXJuIFVOU0lHTkVEX1NUUlVDVC51bnBhY2soZGF0YSlbMF0KKworZGVmIHdyaXRlX3Vuc2lnbmVkKGZkLCBuKToKKyAgICBtc2cgPSBVTlNJR05FRF9TVFJVQ1QucGFjayhuKQorICAgIHdoaWxlIG1zZzoKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYnl0ZXMgPSBvcy53cml0ZShmZCwgbXNnKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBuYnl0ZXMgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2hvdWxkIG5vdCBnZXQgaGVyZScpCisgICAgICAgIG1zZyA9IG1zZ1tuYnl0ZXM6XQorCisjCisjCisjCisKK19mb3Jrc2VydmVyID0gRm9ya1NlcnZlcigpCitlbnN1cmVfcnVubmluZyA9IF9mb3Jrc2VydmVyLmVuc3VyZV9ydW5uaW5nCitnZXRfaW5oZXJpdGVkX2ZkcyA9IF9mb3Jrc2VydmVyLmdldF9pbmhlcml0ZWRfZmRzCitjb25uZWN0X3RvX25ld19wcm9jZXNzID0gX2ZvcmtzZXJ2ZXIuY29ubmVjdF90b19uZXdfcHJvY2Vzcworc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZCA9IF9mb3Jrc2VydmVyLnNldF9mb3Jrc2VydmVyX3ByZWxvYWQKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQppbmRleCBlNjNmZGI4Li45OGJmZGM4IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CkBAIC04LDE1ICs4LDE3IEBACiAjCiAKIGltcG9ydCBiaXNlY3QKK2ltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBtbWFwCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IGl0ZXJ0b29scwotCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgRmluYWxpemUsIGluZm8KLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZworCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKIAogX19hbGxfXyA9IFsnQnVmZmVyV3JhcHBlciddCiAKQEAgLTMwLDE3ICszMiwyNSBAQAogCiAgICAgY2xhc3MgQXJlbmEob2JqZWN0KToKIAotICAgICAgICBfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgpCisgICAgICAgIF9yYW5kID0gdGVtcGZpbGUuX1JhbmRvbU5hbWVTZXF1ZW5jZSgpCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUpOgogICAgICAgICAgICAgc2VsZi5zaXplID0gc2l6ZQotICAgICAgICAgICAgc2VsZi5uYW1lID0gJ3B5bS0lZC0lZCcgJSAob3MuZ2V0cGlkKCksIG5leHQoQXJlbmEuX2NvdW50ZXIpKQotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoLTEsIHNlbGYuc2l6ZSwgdGFnbmFtZT1zZWxmLm5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgX3dpbmFwaS5HZXRMYXN0RXJyb3IoKSA9PSAwLCAndGFnbmFtZSBhbHJlYWR5IGluIHVzZScKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgbmFtZSA9ICdweW0tJWQtJXMnICUgKG9zLmdldHBpZCgpLCBuZXh0KHNlbGYuX3JhbmQpKQorICAgICAgICAgICAgICAgIGJ1ZiA9IG1tYXAubW1hcCgtMSwgc2l6ZSwgdGFnbmFtZT1uYW1lKQorICAgICAgICAgICAgICAgIGlmIF93aW5hcGkuR2V0TGFzdEVycm9yKCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgcmVvcGVuZWQgYSBwcmVleGlzdGluZyBtbWFwLgorICAgICAgICAgICAgICAgIGJ1Zi5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcignQ2Fubm90IGZpbmQgbmFtZSBmb3IgbmV3IG1tYXAnKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBidWYKICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gKHNlbGYuc2l6ZSwgc2VsZi5uYW1lKQogCiAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgICAgIGNvbnRleHQuYXNzZXJ0X3NwYXduaW5nKHNlbGYpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUKIAogICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKQEAgLTUyLDEwICs2MiwyOCBAQAogCiAgICAgY2xhc3MgQXJlbmEob2JqZWN0KToKIAotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSk6Ci0gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG1tYXAubW1hcCgtMSwgc2l6ZSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUsIGZkPS0xKToKICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKLSAgICAgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICAgICAgaWYgZmQgPT0gLTE6CisgICAgICAgICAgICAgICAgc2VsZi5mZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoCisgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9J3B5bS0lZC0nJW9zLmdldHBpZCgpLCBkaXI9dXRpbC5nZXRfdGVtcF9kaXIoKSkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKyAgICAgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAoc2VsZi5mZCwpKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZkLCAnd2InLCBjbG9zZWZkPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGInXDAnKnNpemUpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG1tYXAubW1hcChzZWxmLmZkLCBzZWxmLnNpemUpCisKKyAgICBkZWYgcmVkdWNlX2FyZW5hKGEpOgorICAgICAgICBpZiBhLmZkID09IC0xOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQXJlbmEgaXMgdW5waWNrbGFibGUgYmVjYXVzZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JraW5nIHdhcyBlbmFibGVkIHdoZW4gaXQgd2FzIGNyZWF0ZWQnKQorICAgICAgICByZXR1cm4gcmVidWlsZF9hcmVuYSwgKGEuc2l6ZSwgcmVkdWN0aW9uLkR1cEZkKGEuZmQpKQorCisgICAgZGVmIHJlYnVpbGRfYXJlbmEoc2l6ZSwgZHVwZmQpOgorICAgICAgICByZXR1cm4gQXJlbmEoc2l6ZSwgZHVwZmQuZGV0YWNoKCkpCisKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoQXJlbmEsIHJlZHVjZV9hcmVuYSkKIAogIwogIyBDbGFzcyBhbGxvd2luZyBhbGxvY2F0aW9uIG9mIGNodW5rcyBvZiBtZW1vcnkgZnJvbSBhcmVuYXMKQEAgLTkwLDcgKzExOCw3IEBACiAgICAgICAgIGlmIGkgPT0gbGVuKHNlbGYuX2xlbmd0aHMpOgogICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5fcm91bmR1cChtYXgoc2VsZi5fc2l6ZSwgc2l6ZSksIG1tYXAuUEFHRVNJWkUpCiAgICAgICAgICAgICBzZWxmLl9zaXplICo9IDIKLSAgICAgICAgICAgIGluZm8oJ2FsbG9jYXRpbmcgYSBuZXcgbW1hcCBvZiBsZW5ndGggJWQnLCBsZW5ndGgpCisgICAgICAgICAgICB1dGlsLmluZm8oJ2FsbG9jYXRpbmcgYSBuZXcgbW1hcCBvZiBsZW5ndGggJWQnLCBsZW5ndGgpCiAgICAgICAgICAgICBhcmVuYSA9IEFyZW5hKGxlbmd0aCkKICAgICAgICAgICAgIHNlbGYuX2FyZW5hcy5hcHBlbmQoYXJlbmEpCiAgICAgICAgICAgICByZXR1cm4gKGFyZW5hLCAwLCBsZW5ndGgpCkBAIC0yMTYsNyArMjQ0LDcgQEAKICAgICAgICAgYXNzZXJ0IDAgPD0gc2l6ZSA8IHN5cy5tYXhzaXplCiAgICAgICAgIGJsb2NrID0gQnVmZmVyV3JhcHBlci5faGVhcC5tYWxsb2Moc2l6ZSkKICAgICAgICAgc2VsZi5fc3RhdGUgPSAoYmxvY2ssIHNpemUpCi0gICAgICAgIEZpbmFsaXplKHNlbGYsIEJ1ZmZlcldyYXBwZXIuX2hlYXAuZnJlZSwgYXJncz0oYmxvY2ssKSkKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBCdWZmZXJXcmFwcGVyLl9oZWFwLmZyZWUsIGFyZ3M9KGJsb2NrLCkpCiAKICAgICBkZWYgY3JlYXRlX21lbW9yeXZpZXcoc2VsZik6CiAgICAgICAgIChhcmVuYSwgc3RhcnQsIHN0b3ApLCBzaXplID0gc2VsZi5fc3RhdGUKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CmluZGV4IDk2MDU2YjAuLmNjODdkMzYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQpAQCAtMTksMTEgKzE5LDE2IEBACiBpbXBvcnQgYXJyYXkKIGltcG9ydCBxdWV1ZQogCi1mcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YwotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuLCBQb29sLCB1dGlsLCBjb25uZWN0aW9uCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBBdXRoZW50aWNhdGlvblN0cmluZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgUG9wZW4sIEZvcmtpbmdQaWNrbGVyCiBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKK2Zyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjCisKK2Zyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHBvb2wKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dAogCiAjCiAjIFJlZ2lzdGVyIHNvbWUgdGhpbmdzIGZvciBwaWNrbGluZwpAQCAtMzEsMTYgKzM2LDE0IEBACiAKIGRlZiByZWR1Y2VfYXJyYXkoYSk6CiAgICAgcmV0dXJuIGFycmF5LmFycmF5LCAoYS50eXBlY29kZSwgYS50b2J5dGVzKCkpCi1Gb3JraW5nUGlja2xlci5yZWdpc3RlcihhcnJheS5hcnJheSwgcmVkdWNlX2FycmF5KQorcmVkdWN0aW9uLnJlZ2lzdGVyKGFycmF5LmFycmF5LCByZWR1Y2VfYXJyYXkpCiAKIHZpZXdfdHlwZXMgPSBbdHlwZShnZXRhdHRyKHt9LCBuYW1lKSgpKSBmb3IgbmFtZSBpbiAoJ2l0ZW1zJywna2V5cycsJ3ZhbHVlcycpXQogaWYgdmlld190eXBlc1swXSBpcyBub3QgbGlzdDogICAgICAgIyBvbmx5IG5lZWRlZCBpbiBQeTMuMAogICAgIGRlZiByZWJ1aWxkX2FzX2xpc3Qob2JqKToKICAgICAgICAgcmV0dXJuIGxpc3QsIChsaXN0KG9iaiksKQogICAgIGZvciB2aWV3X3R5cGUgaW4gdmlld190eXBlczoKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIodmlld190eXBlLCByZWJ1aWxkX2FzX2xpc3QpCi0gICAgICAgIGltcG9ydCBjb3B5cmVnCi0gICAgICAgIGNvcHlyZWcucGlja2xlKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQorICAgICAgICByZWR1Y3Rpb24ucmVnaXN0ZXIodmlld190eXBlLCByZWJ1aWxkX2FzX2xpc3QpCiAKICMKICMgVHlwZSBmb3IgaWRlbnRpZnlpbmcgc2hhcmVkIG9iamVjdHMKQEAgLTEzMCw3ICsxMzMsNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWdpc3RyeSwgYWRkcmVzcywgYXV0aGtleSwgc2VyaWFsaXplcik6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGF1dGhrZXksIGJ5dGVzKQogICAgICAgICBzZWxmLnJlZ2lzdHJ5ID0gcmVnaXN0cnkKLSAgICAgICAgc2VsZi5hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgc2VsZi5hdXRoa2V5ID0gcHJvY2Vzcy5BdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQogICAgICAgICBMaXN0ZW5lciwgQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdCiAKICAgICAgICAgIyBkbyBhdXRoZW50aWNhdGlvbiBsYXRlcgpAQCAtMTQ2LDcgKzE0OSw3IEBACiAgICAgICAgIFJ1biB0aGUgc2VydmVyIGZvcmV2ZXIKICAgICAgICAgJycnCiAgICAgICAgIHNlbGYuc3RvcF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCi0gICAgICAgIGN1cnJlbnRfcHJvY2VzcygpLl9tYW5hZ2VyX3NlcnZlciA9IHNlbGYKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fbWFuYWdlcl9zZXJ2ZXIgPSBzZWxmCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGFjY2VwdGVyID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5hY2NlcHRlcikKICAgICAgICAgICAgIGFjY2VwdGVyLmRhZW1vbiA9IFRydWUKQEAgLTE2Nyw3ICsxNzAsNyBAQAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGMgPSBzZWxmLmxpc3RlbmVyLmFjY2VwdCgpCi0gICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLmhhbmRsZV9yZXF1ZXN0LCBhcmdzPShjLCkpCiAgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUKQEAgLTQzNiwxNSArNDM5LDE3IEBACiAgICAgX3JlZ2lzdHJ5ID0ge30KICAgICBfU2VydmVyID0gU2VydmVyCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcz1Ob25lLCBhdXRoa2V5PU5vbmUsIHNlcmlhbGl6ZXI9J3BpY2tsZScpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzPU5vbmUsIGF1dGhrZXk9Tm9uZSwgc2VyaWFsaXplcj0ncGlja2xlJywKKyAgICAgICAgICAgICAgICAgY3R4PU5vbmUpOgogICAgICAgICBpZiBhdXRoa2V5IGlzIE5vbmU6Ci0gICAgICAgICAgICBhdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICAgICAgYXV0aGtleSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQogICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcyAgICAgIyBYWFggbm90IGZpbmFsIGFkZHJlc3MgaWYgZWcgKCcnLCAwKQotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgc2VsZi5fc3RhdGUgPSBTdGF0ZSgpCiAgICAgICAgIHNlbGYuX3N0YXRlLnZhbHVlID0gU3RhdGUuSU5JVElBTAogICAgICAgICBzZWxmLl9zZXJpYWxpemVyID0gc2VyaWFsaXplcgogICAgICAgICBzZWxmLl9MaXN0ZW5lciwgc2VsZi5fQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdCisgICAgICAgIHNlbGYuX2N0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCiAKICAgICBkZWYgZ2V0X3NlcnZlcihzZWxmKToKICAgICAgICAgJycnCkBAIC00NzYsNyArNDgxLDcgQEAKICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQogCiAgICAgICAgICMgc3Bhd24gcHJvY2VzcyB3aGljaCBydW5zIGEgc2VydmVyCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBQcm9jZXNzKAorICAgICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5fY3R4LlByb2Nlc3MoCiAgICAgICAgICAgICB0YXJnZXQ9dHlwZShzZWxmKS5fcnVuX3NlcnZlciwKICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX3JlZ2lzdHJ5LCBzZWxmLl9hZGRyZXNzLCBzZWxmLl9hdXRoa2V5LAogICAgICAgICAgICAgICAgICAgc2VsZi5fc2VyaWFsaXplciwgd3JpdGVyLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpLApAQCAtNjkxLDExICs2OTYsMTEgQEAKICAgICAgICAgc2VsZi5fQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdWzFdCiAKICAgICAgICAgaWYgYXV0aGtleSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgZWxpZiBzZWxmLl9tYW5hZ2VyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHNlbGYuX21hbmFnZXIuX2F1dGhrZXkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CisgICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CiAKICAgICAgICAgaWYgaW5jcmVmOgogICAgICAgICAgICAgc2VsZi5faW5jcmVmKCkKQEAgLTcwNCw3ICs3MDksNyBAQAogCiAgICAgZGVmIF9jb25uZWN0KHNlbGYpOgogICAgICAgICB1dGlsLmRlYnVnKCdtYWtpbmcgY29ubmVjdGlvbiB0byBtYW5hZ2VyJykKLSAgICAgICAgbmFtZSA9IGN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgbmFtZSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZQogICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgIG5hbWUgKz0gJ3wnICsgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZQogICAgICAgICBjb25uID0gc2VsZi5fQ2xpZW50KHNlbGYuX3Rva2VuLmFkZHJlc3MsIGF1dGhrZXk9c2VsZi5fYXV0aGtleSkKQEAgLTc5OCw3ICs4MDMsNyBAQAogCiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAgICAgIGt3ZHMgPSB7fQotICAgICAgICBpZiBQb3Blbi50aHJlYWRfaXNfc3Bhd25pbmcoKToKKyAgICAgICAgaWYgY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3ZHNbJ2F1dGhrZXknXSA9IHNlbGYuX2F1dGhrZXkKIAogICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfaXNhdXRvJywgRmFsc2UpOgpAQCAtODM1LDE0ICs4NDAsMTQgQEAKIAogICAgIElmIHBvc3NpYmxlIHRoZSBzaGFyZWQgb2JqZWN0IGlzIHJldHVybmVkLCBvciBvdGhlcndpc2UgYSBwcm94eSBmb3IgaXQuCiAgICAgJycnCi0gICAgc2VydmVyID0gZ2V0YXR0cihjdXJyZW50X3Byb2Nlc3MoKSwgJ19tYW5hZ2VyX3NlcnZlcicsIE5vbmUpCisgICAgc2VydmVyID0gZ2V0YXR0cihwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLCAnX21hbmFnZXJfc2VydmVyJywgTm9uZSkKIAogICAgIGlmIHNlcnZlciBhbmQgc2VydmVyLmFkZHJlc3MgPT0gdG9rZW4uYWRkcmVzczoKICAgICAgICAgcmV0dXJuIHNlcnZlci5pZF90b19vYmpbdG9rZW4uaWRdWzBdCiAgICAgZWxzZToKICAgICAgICAgaW5jcmVmID0gKAogICAgICAgICAgICAga3dkcy5wb3AoJ2luY3JlZicsIFRydWUpIGFuZAotICAgICAgICAgICAgbm90IGdldGF0dHIoY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKQorICAgICAgICAgICAgbm90IGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpCiAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBmdW5jKHRva2VuLCBzZXJpYWxpemVyLCBpbmNyZWY9aW5jcmVmLCAqKmt3ZHMpCiAKQEAgLTg4OSw3ICs4OTQsNyBAQAogICAgIGlmIGF1dGhrZXkgaXMgTm9uZSBhbmQgbWFuYWdlciBpcyBub3QgTm9uZToKICAgICAgICAgYXV0aGtleSA9IG1hbmFnZXIuX2F1dGhrZXkKICAgICBpZiBhdXRoa2V5IGlzIE5vbmU6Ci0gICAgICAgIGF1dGhrZXkgPSBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CisgICAgICAgIGF1dGhrZXkgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKIAogICAgIFByb3h5VHlwZSA9IE1ha2VQcm94eVR5cGUoJ0F1dG9Qcm94eVslc10nICUgdG9rZW4udHlwZWlkLCBleHBvc2VkKQogICAgIHByb3h5ID0gUHJveHlUeXBlKHRva2VuLCBzZXJpYWxpemVyLCBtYW5hZ2VyPW1hbmFnZXIsIGF1dGhrZXk9YXV0aGtleSwKQEAgLTExMDksNyArMTExNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICBBY3F1aXJlclByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0NvbmRpdGlvbicsIHRocmVhZGluZy5Db25kaXRpb24sIENvbmRpdGlvblByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0JhcnJpZXInLCB0aHJlYWRpbmcuQmFycmllciwgQmFycmllclByb3h5KQotU3luY01hbmFnZXIucmVnaXN0ZXIoJ1Bvb2wnLCBQb29sLCBQb29sUHJveHkpCitTeW5jTWFuYWdlci5yZWdpc3RlcignUG9vbCcsIHBvb2wuUG9vbCwgUG9vbFByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ2xpc3QnLCBsaXN0LCBMaXN0UHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignZGljdCcsIGRpY3QsIERpY3RQcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdWYWx1ZScsIFZhbHVlLCBWYWx1ZVByb3h5KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CmluZGV4IDBmMmRhYjQuLjFjYjJkOTUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKQEAgLTcsNyArNyw3IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsnUG9vbCddCitfX2FsbF9fID0gWydQb29sJywgJ1RocmVhZFBvb2wnXQogCiAjCiAjIEltcG9ydHMKQEAgLTE3LDEwICsxNywxNCBAQAogaW1wb3J0IHF1ZXVlCiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBvcwogaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGNwdV9jb3VudCwgVGltZW91dEVycm9yCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBGaW5hbGl6ZSwgZGVidWcKKyMgSWYgdGhyZWFkaW5nIGlzIGF2YWlsYWJsZSB0aGVuIFRocmVhZFBvb2wgc2hvdWxkIGJlIHByb3ZpZGVkLiAgVGhlcmVmb3JlCisjIHdlIGF2b2lkIHRvcC1sZXZlbCBpbXBvcnRzIHdoaWNoIGFyZSBsaWFibGUgdG8gZmFpbCBvbiBzb21lIHN5c3RlbXMuCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQsIGNwdV9jb3VudCwgVGltZW91dEVycm9yCiAKICMKICMgQ29uc3RhbnRzIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgYSBwb29sCkBAIC00Myw2ICs0NywyOSBAQAogICAgIHJldHVybiBsaXN0KGl0ZXJ0b29scy5zdGFybWFwKGFyZ3NbMF0sIGFyZ3NbMV0pKQogCiAjCisjIEhhY2sgdG8gZW1iZWQgc3RyaW5naWZpY2F0aW9uIG9mIHJlbW90ZSB0cmFjZWJhY2sgaW4gbG9jYWwgdHJhY2ViYWNrCisjCisKK2NsYXNzIFJlbW90ZVRyYWNlYmFjayhFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0Yik6CisgICAgICAgIHNlbGYudGIgPSB0YgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50YgorCitjbGFzcyBFeGNlcHRpb25XaXRoVHJhY2ViYWNrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGMsIHRiKToKKyAgICAgICAgdGIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbih0eXBlKGV4YyksIGV4YywgdGIpCisgICAgICAgIHRiID0gJycuam9pbih0YikKKyAgICAgICAgc2VsZi5leGMgPSBleGMKKyAgICAgICAgc2VsZi50YiA9ICdcbiIiIlxuJXMiIiInICUgdGIKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlYnVpbGRfZXhjLCAoc2VsZi5leGMsIHNlbGYudGIpCisKK2RlZiByZWJ1aWxkX2V4YyhleGMsIHRiKToKKyAgICBleGMuX19jYXVzZV9fID0gUmVtb3RlVHJhY2ViYWNrKHRiKQorICAgIHJldHVybiBleGMKKworIwogIyBDb2RlIHJ1biBieSB3b3JrZXIgcHJvY2Vzc2VzCiAjCiAKQEAgLTc4LDI4ICsxMDUsMjkgQEAKICAgICB3aGlsZSBtYXh0YXNrcyBpcyBOb25lIG9yIChtYXh0YXNrcyBhbmQgY29tcGxldGVkIDwgbWF4dGFza3MpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0YXNrID0gZ2V0KCkKLSAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgSU9FcnJvcik6Ci0gICAgICAgICAgICBkZWJ1Zygnd29ya2VyIGdvdCBFT0ZFcnJvciBvciBJT0Vycm9yIC0tIGV4aXRpbmcnKQorICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3dvcmtlciBnb3QgRU9GRXJyb3Igb3IgT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgZGVidWcoJ3dvcmtlciBnb3Qgc2VudGluZWwgLS0gZXhpdGluZycpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZ290IHNlbnRpbmVsIC0tIGV4aXRpbmcnKQogICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBqb2IsIGksIGZ1bmMsIGFyZ3MsIGt3ZHMgPSB0YXNrCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IChUcnVlLCBmdW5jKCphcmdzLCAqKmt3ZHMpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBlID0gRXhjZXB0aW9uV2l0aFRyYWNlYmFjayhlLCBlLl9fdHJhY2ViYWNrX18pCiAgICAgICAgICAgICByZXN1bHQgPSAoRmFsc2UsIGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHB1dCgoam9iLCBpLCByZXN1bHQpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICB3cmFwcGVkID0gTWF5YmVFbmNvZGluZ0Vycm9yKGUsIHJlc3VsdFsxXSkKLSAgICAgICAgICAgIGRlYnVnKCJQb3NzaWJsZSBlbmNvZGluZyBlcnJvciB3aGlsZSBzZW5kaW5nIHJlc3VsdDogJXMiICUgKAorICAgICAgICAgICAgdXRpbC5kZWJ1ZygiUG9zc2libGUgZW5jb2RpbmcgZXJyb3Igd2hpbGUgc2VuZGluZyByZXN1bHQ6ICVzIiAlICgKICAgICAgICAgICAgICAgICB3cmFwcGVkKSkKICAgICAgICAgICAgIHB1dCgoam9iLCBpLCAoRmFsc2UsIHdyYXBwZWQpKSkKICAgICAgICAgY29tcGxldGVkICs9IDEKLSAgICBkZWJ1Zygnd29ya2VyIGV4aXRpbmcgYWZ0ZXIgJWQgdGFza3MnICUgY29tcGxldGVkKQorICAgIHV0aWwuZGVidWcoJ3dvcmtlciBleGl0aW5nIGFmdGVyICVkIHRhc2tzJyAlIGNvbXBsZXRlZCkKIAogIwogIyBDbGFzcyByZXByZXNlbnRpbmcgYSBwcm9jZXNzIHBvb2wKQEAgLTEwOSwxMCArMTM3LDEyIEBACiAgICAgJycnCiAgICAgQ2xhc3Mgd2hpY2ggc3VwcG9ydHMgYW4gYXN5bmMgdmVyc2lvbiBvZiBhcHBseWluZyBmdW5jdGlvbnMgdG8gYXJndW1lbnRzLgogICAgICcnJwotICAgIFByb2Nlc3MgPSBQcm9jZXNzCisgICAgZGVmIFByb2Nlc3Moc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9jdHguUHJvY2VzcygqYXJncywgKiprd2RzKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwKLSAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKKyAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBzZWxmLl9jdHggPSBjb250ZXh0IG9yIGdldF9jb250ZXh0KCkKICAgICAgICAgc2VsZi5fc2V0dXBfcXVldWVzKCkKICAgICAgICAgc2VsZi5fdGFza3F1ZXVlID0gcXVldWUuUXVldWUoKQogICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CkBAIC0xMjIsMTAgKzE1Miw3IEBACiAgICAgICAgIHNlbGYuX2luaXRhcmdzID0gaW5pdGFyZ3MKIAogICAgICAgICBpZiBwcm9jZXNzZXMgaXMgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwcm9jZXNzZXMgPSBjcHVfY291bnQoKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2VzID0gMQorICAgICAgICAgICAgcHJvY2Vzc2VzID0gb3MuY3B1X2NvdW50KCkgb3IgMQogICAgICAgICBpZiBwcm9jZXNzZXMgPCAxOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTnVtYmVyIG9mIHByb2Nlc3NlcyBtdXN0IGJlIGF0IGxlYXN0IDEiKQogCkBAIC0xNjIsNyArMTg5LDcgQEAKICAgICAgICAgc2VsZi5fcmVzdWx0X2hhbmRsZXIuX3N0YXRlID0gUlVOCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLnN0YXJ0KCkKIAotICAgICAgICBzZWxmLl90ZXJtaW5hdGUgPSBGaW5hbGl6ZSgKKyAgICAgICAgc2VsZi5fdGVybWluYXRlID0gdXRpbC5GaW5hbGl6ZSgKICAgICAgICAgICAgIHNlbGYsIHNlbGYuX3Rlcm1pbmF0ZV9wb29sLAogICAgICAgICAgICAgYXJncz0oc2VsZi5fdGFza3F1ZXVlLCBzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwgc2VsZi5fcG9vbCwKICAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLCBzZWxmLl90YXNrX2hhbmRsZXIsCkBAIC0xNzksNyArMjA2LDcgQEAKICAgICAgICAgICAgIHdvcmtlciA9IHNlbGYuX3Bvb2xbaV0KICAgICAgICAgICAgIGlmIHdvcmtlci5leGl0Y29kZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAjIHdvcmtlciBleGl0ZWQKLSAgICAgICAgICAgICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIGkpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIGkpCiAgICAgICAgICAgICAgICAgd29ya2VyLmpvaW4oKQogICAgICAgICAgICAgICAgIGNsZWFuZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX3Bvb2xbaV0KQEAgLTE5OSw3ICsyMjYsNyBAQAogICAgICAgICAgICAgdy5uYW1lID0gdy5uYW1lLnJlcGxhY2UoJ1Byb2Nlc3MnLCAnUG9vbFdvcmtlcicpCiAgICAgICAgICAgICB3LmRhZW1vbiA9IFRydWUKICAgICAgICAgICAgIHcuc3RhcnQoKQotICAgICAgICAgICAgZGVidWcoJ2FkZGVkIHdvcmtlcicpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdhZGRlZCB3b3JrZXInKQogCiAgICAgZGVmIF9tYWludGFpbl9wb29sKHNlbGYpOgogICAgICAgICAiIiJDbGVhbiB1cCBhbnkgZXhpdGVkIHdvcmtlcnMgYW5kIHN0YXJ0IHJlcGxhY2VtZW50cyBmb3IgdGhlbS4KQEAgLTIwOCw5ICsyMzUsOCBAQAogICAgICAgICAgICAgc2VsZi5fcmVwb3B1bGF0ZV9wb29sKCkKIAogICAgIGRlZiBfc2V0dXBfcXVldWVzKHNlbGYpOgotICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCi0gICAgICAgIHNlbGYuX2lucXVldWUgPSBTaW1wbGVRdWV1ZSgpCi0gICAgICAgIHNlbGYuX291dHF1ZXVlID0gU2ltcGxlUXVldWUoKQorICAgICAgICBzZWxmLl9pbnF1ZXVlID0gc2VsZi5fY3R4LlNpbXBsZVF1ZXVlKCkKKyAgICAgICAgc2VsZi5fb3V0cXVldWUgPSBzZWxmLl9jdHguU2ltcGxlUXVldWUoKQogICAgICAgICBzZWxmLl9xdWlja19wdXQgPSBzZWxmLl9pbnF1ZXVlLl93cml0ZXIuc2VuZAogICAgICAgICBzZWxmLl9xdWlja19nZXQgPSBzZWxmLl9vdXRxdWV1ZS5fcmVhZGVyLnJlY3YKIApAQCAtMzM2LDcgKzM2Miw3IEBACiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKICAgICAgICAgIyBzZW5kIHNlbnRpbmVsIHRvIHN0b3Agd29ya2VycwogICAgICAgICBwb29sLl90YXNrcXVldWUucHV0KE5vbmUpCi0gICAgICAgIGRlYnVnKCd3b3JrZXIgaGFuZGxlciBleGl0aW5nJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfdGFza3ModGFza3F1ZXVlLCBwdXQsIG91dHF1ZXVlLCBwb29sLCBjYWNoZSk6CkBAIC0zNDYsNyArMzcyLDcgQEAKICAgICAgICAgICAgIGkgPSAtMQogICAgICAgICAgICAgZm9yIGksIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tzZXEpOgogICAgICAgICAgICAgICAgIGlmIHRocmVhZC5fc3RhdGU6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZSAhPSBSVU4nKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZSAhPSBSVU4nKQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcHV0KHRhc2spCkBAIC0zNTgsMjcgKzM4NCwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBzZXRfbGVuZ3RoOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKKyAgICAgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKICAgICAgICAgICAgICAgICAgICAgc2V0X2xlbmd0aChpKzEpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IHNlbnRpbmVsJykKIAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgdGVsbCByZXN1bHQgaGFuZGxlciB0byBmaW5pc2ggd2hlbiBjYWNoZSBpcyBlbXB0eQotICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHJlc3VsdCBoYW5kbGVyJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHJlc3VsdCBoYW5kbGVyJykKICAgICAgICAgICAgIG91dHF1ZXVlLnB1dChOb25lKQogCiAgICAgICAgICAgICAjIHRlbGwgd29ya2VycyB0aGVyZSBpcyBubyBtb3JlIHdvcmsKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgc2VuZGluZyBzZW50aW5lbCB0byB3b3JrZXJzJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBwdXQoTm9uZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBJT0Vycm9yIHdoZW4gc2VuZGluZyBzZW50aW5lbHMnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBnb3QgT1NFcnJvciB3aGVuIHNlbmRpbmcgc2VudGluZWxzJykKIAotICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGV4aXRpbmcnKQorICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfcmVzdWx0cyhvdXRxdWV1ZSwgZ2V0LCBjYWNoZSk6CkBAIC0zODcsMTcgKzQxMywxNyBAQAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRhc2sgPSBnZXQoKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBFT0ZFcnJvci9JT0Vycm9yIC0tIGV4aXRpbmcnKQorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL09TRXJyb3IgLS0gZXhpdGluZycpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgICAgIGlmIHRocmVhZC5fc3RhdGU6CiAgICAgICAgICAgICAgICAgYXNzZXJ0IHRocmVhZC5fc3RhdGUgPT0gVEVSTUlOQVRFCi0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGU9VEVSTUlOQVRFJykKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBmb3VuZCB0aHJlYWQuX3N0YXRlPVRFUk1JTkFURScpCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3Qgc2VudGluZWwnKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgam9iLCBpLCBvYmogPSB0YXNrCkBAIC00MDksMTIgKzQzNSwxMiBAQAogICAgICAgICB3aGlsZSBjYWNoZSBhbmQgdGhyZWFkLl9zdGF0ZSAhPSBURVJNSU5BVEU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL0lPRXJyb3IgLS0gZXhpdGluZycpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBpZ25vcmluZyBleHRyYSBzZW50aW5lbCcpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgaWdub3JpbmcgZXh0cmEgc2VudGluZWwnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBqb2IsIGksIG9iaiA9IHRhc2sKICAgICAgICAgICAgIHRyeToKQEAgLTQyMyw3ICs0NDksNyBAQAogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBpZiBoYXNhdHRyKG91dHF1ZXVlLCAnX3JlYWRlcicpOgotICAgICAgICAgICAgZGVidWcoJ2Vuc3VyaW5nIHRoYXQgb3V0cXVldWUgaXMgbm90IGZ1bGwnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZW5zdXJpbmcgdGhhdCBvdXRxdWV1ZSBpcyBub3QgZnVsbCcpCiAgICAgICAgICAgICAjIElmIHdlIGRvbid0IG1ha2Ugcm9vbSBhdmFpbGFibGUgaW4gb3V0cXVldWUgdGhlbgogICAgICAgICAgICAgIyBhdHRlbXB0cyB0byBhZGQgdGhlIHNlbnRpbmVsIChOb25lKSB0byBvdXRxdWV1ZSBtYXkKICAgICAgICAgICAgICMgYmxvY2suICBUaGVyZSBpcyBndWFyYW50ZWVkIHRvIGJlIG5vIG1vcmUgdGhhbiAyIHNlbnRpbmVscy4KQEAgLTQzMiwxMCArNDU4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRxdWV1ZS5fcmVhZGVyLnBvbGwoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZXhpdGluZzogbGVuKGNhY2hlKT0lcywgdGhyZWFkLl9zdGF0ZT0lcycsCisgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGV4aXRpbmc6IGxlbihjYWNoZSk9JXMsIHRocmVhZC5fc3RhdGU9JXMnLAogICAgICAgICAgICAgICBsZW4oY2FjaGUpLCB0aHJlYWQuX3N0YXRlKQogCiAgICAgQHN0YXRpY21ldGhvZApAQCAtNDUzLDE5ICs0NzksMTkgQEAKICAgICAgICAgICAgICAgKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBkZWJ1ZygnY2xvc2luZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygnY2xvc2luZyBwb29sJykKICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gUlVOOgogICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSBDTE9TRQogICAgICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gQ0xPU0UKIAogICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgIGRlYnVnKCd0ZXJtaW5hdGluZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygndGVybWluYXRpbmcgcG9vbCcpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICBzZWxmLl90ZXJtaW5hdGUoKQogCiAgICAgZGVmIGpvaW4oc2VsZik6Ci0gICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHBvb2wnKQogICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGUgaW4gKENMT1NFLCBURVJNSU5BVEUpCiAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLmpvaW4oKQogICAgICAgICBzZWxmLl90YXNrX2hhbmRsZXIuam9pbigpCkBAIC00NzYsNyArNTAyLDcgQEAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oZWxwX3N0dWZmX2ZpbmlzaChpbnF1ZXVlLCB0YXNrX2hhbmRsZXIsIHNpemUpOgogICAgICAgICAjIHRhc2tfaGFuZGxlciBtYXkgYmUgYmxvY2tlZCB0cnlpbmcgdG8gcHV0IGl0ZW1zIG9uIGlucXVldWUKLSAgICAgICAgZGVidWcoJ3JlbW92aW5nIHRhc2tzIGZyb20gaW5xdWV1ZSB1bnRpbCB0YXNrIGhhbmRsZXIgZmluaXNoZWQnKQorICAgICAgICB1dGlsLmRlYnVnKCdyZW1vdmluZyB0YXNrcyBmcm9tIGlucXVldWUgdW50aWwgdGFzayBoYW5kbGVyIGZpbmlzaGVkJykKICAgICAgICAgaW5xdWV1ZS5fcmxvY2suYWNxdWlyZSgpCiAgICAgICAgIHdoaWxlIHRhc2tfaGFuZGxlci5pc19hbGl2ZSgpIGFuZCBpbnF1ZXVlLl9yZWFkZXIucG9sbCgpOgogICAgICAgICAgICAgaW5xdWV1ZS5fcmVhZGVyLnJlY3YoKQpAQCAtNDg2LDEyICs1MTIsMTIgQEAKICAgICBkZWYgX3Rlcm1pbmF0ZV9wb29sKGNscywgdGFza3F1ZXVlLCBpbnF1ZXVlLCBvdXRxdWV1ZSwgcG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9oYW5kbGVyLCB0YXNrX2hhbmRsZXIsIHJlc3VsdF9oYW5kbGVyLCBjYWNoZSk6CiAgICAgICAgICMgdGhpcyBpcyBndWFyYW50ZWVkIHRvIG9ubHkgYmUgY2FsbGVkIG9uY2UKLSAgICAgICAgZGVidWcoJ2ZpbmFsaXppbmcgcG9vbCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2ZpbmFsaXppbmcgcG9vbCcpCiAKICAgICAgICAgd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHRhc2tfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKIAotICAgICAgICBkZWJ1ZygnaGVscGluZyB0YXNrIGhhbmRsZXIvd29ya2VycyB0byBmaW5pc2gnKQorICAgICAgICB1dGlsLmRlYnVnKCdoZWxwaW5nIHRhc2sgaGFuZGxlci93b3JrZXJzIHRvIGZpbmlzaCcpCiAgICAgICAgIGNscy5faGVscF9zdHVmZl9maW5pc2goaW5xdWV1ZSwgdGFza19oYW5kbGVyLCBsZW4ocG9vbCkpCiAKICAgICAgICAgYXNzZXJ0IHJlc3VsdF9oYW5kbGVyLmlzX2FsaXZlKCkgb3IgbGVuKGNhY2hlKSA9PSAwCkBAIC01MDEsMzEgKzUyNywzMSBAQAogCiAgICAgICAgICMgV2UgbXVzdCB3YWl0IGZvciB0aGUgd29ya2VyIGhhbmRsZXIgdG8gZXhpdCBiZWZvcmUgdGVybWluYXRpbmcKICAgICAgICAgIyB3b3JrZXJzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB3b3JrZXJzIHRvIGJlIHJlc3RhcnRlZCBiZWhpbmQgb3VyIGJhY2suCi0gICAgICAgIGRlYnVnKCdqb2luaW5nIHdvcmtlciBoYW5kbGVyJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyB3b3JrZXIgaGFuZGxlcicpCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIGlzIG5vdCB3b3JrZXJfaGFuZGxlcjoKICAgICAgICAgICAgIHdvcmtlcl9oYW5kbGVyLmpvaW4oKQogCiAgICAgICAgICMgVGVybWluYXRlIHdvcmtlcnMgd2hpY2ggaGF2ZW4ndCBhbHJlYWR5IGZpbmlzaGVkLgogICAgICAgICBpZiBwb29sIGFuZCBoYXNhdHRyKHBvb2xbMF0sICd0ZXJtaW5hdGUnKToKLSAgICAgICAgICAgIGRlYnVnKCd0ZXJtaW5hdGluZyB3b3JrZXJzJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rlcm1pbmF0aW5nIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBpZiBwLmV4aXRjb2RlIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHAudGVybWluYXRlKCkKIAotICAgICAgICBkZWJ1Zygnam9pbmluZyB0YXNrIGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHRhc2sgaGFuZGxlcicpCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIGlzIG5vdCB0YXNrX2hhbmRsZXI6CiAgICAgICAgICAgICB0YXNrX2hhbmRsZXIuam9pbigpCiAKLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgcmVzdWx0IGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHJlc3VsdCBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHJlc3VsdF9oYW5kbGVyOgogICAgICAgICAgICAgcmVzdWx0X2hhbmRsZXIuam9pbigpCiAKICAgICAgICAgaWYgcG9vbCBhbmQgaGFzYXR0cihwb29sWzBdLCAndGVybWluYXRlJyk6Ci0gICAgICAgICAgICBkZWJ1Zygnam9pbmluZyBwb29sIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyBwb29sIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBpZiBwLmlzX2FsaXZlKCk6CiAgICAgICAgICAgICAgICAgICAgICMgd29ya2VyIGhhcyBub3QgeWV0IGV4aXRlZAotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIHAucGlkKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgcC5waWQpCiAgICAgICAgICAgICAgICAgICAgIHAuam9pbigpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgpAQCAtNzExLDcgKzczNywxMCBAQAogCiBjbGFzcyBUaHJlYWRQb29sKFBvb2wpOgogCi0gICAgZnJvbSAuZHVtbXkgaW1wb3J0IFByb2Nlc3MKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIFByb2Nlc3MoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGZyb20gLmR1bW15IGltcG9ydCBQcm9jZXNzCisgICAgICAgIHJldHVybiBQcm9jZXNzKCphcmdzLCAqKmt3ZHMpCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKICAgICAgICAgUG9vbC5fX2luaXRfXyhzZWxmLCBwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncykKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjNjYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3JrLnB5CkBAIC0wLDAgKzEsODMgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IGVycm5vCisKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydQb3BlbiddCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBmb3JrCisjCisKK2NsYXNzIFBvcGVuKG9iamVjdCk6CisgICAgbWV0aG9kID0gJ2ZvcmsnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fbGF1bmNoKHByb2Nlc3Nfb2JqKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgZmQpOgorICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBpZCwgc3RzID0gb3Mud2FpdHBpZChzZWxmLnBpZCwgZmxhZykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIG5vdCB5ZXQgY3JlYXRlZC4gU2VlICMxNzMxNzE3CisgICAgICAgICAgICAgICAgICAgICMgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQgPT0gMTAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgorICAgICAgICAgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0cyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IC1vcy5XVEVSTVNJRyhzdHMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLldJRkVYSVRFRChzdHMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IG9zLldFWElUU1RBVFVTKHN0cykKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKKyAgICAgICAgICAgICAgICBpZiBub3Qgd2FpdChbc2VsZi5zZW50aW5lbF0sIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG9jayBpZiB3YWl0KCkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucG9sbChvcy5XTk9IQU5HIGlmIHRpbWVvdXQgPT0gMC4wIGVsc2UgMCkKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBleGNlcHQgUHJvY2Vzc0xvb2t1cEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTAuMSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfbGF1bmNoKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgY29kZSA9IDEKKyAgICAgICAgcGFyZW50X3IsIGNoaWxkX3cgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5waWQgPSBvcy5mb3JrKCkKKyAgICAgICAgaWYgc2VsZi5waWQgPT0gMDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShwYXJlbnRfcikKKyAgICAgICAgICAgICAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICAgICAgICAgICAgICByYW5kb20uc2VlZCgpCisgICAgICAgICAgICAgICAgY29kZSA9IHByb2Nlc3Nfb2JqLl9ib290c3RyYXAoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2xvc2UoY2hpbGRfdykKKyAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChwYXJlbnRfciwpKQorICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IHBhcmVudF9yCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmtzZXJ2ZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmtzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExNWY4MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9ya3NlcnZlci5weQpAQCAtMCwwICsxLDY5IEBACitpbXBvcnQgaW8KK2ltcG9ydCBvcworCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgoraWYgbm90IHJlZHVjdGlvbi5IQVZFX1NFTkRfSEFORExFOgorICAgIHJhaXNlIEltcG9ydEVycm9yKCdObyBzdXBwb3J0IGZvciBzZW5kaW5nIGZkcyBiZXR3ZWVuIHByb2Nlc3NlcycpCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgZm9ya3NlcnZlcgorZnJvbSAuIGltcG9ydCBwb3Blbl9mb3JrCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworCitfX2FsbF9fID0gWydQb3BlbiddCisKKyMKKyMgV3JhcHBlciBmb3IgYW4gZmQgdXNlZCB3aGlsZSBsYXVuY2hpbmcgYSBwcm9jZXNzCisjCisKK2NsYXNzIF9EdXBGZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmQpOgorICAgICAgICBzZWxmLmluZCA9IGluZAorICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHJldHVybiBmb3Jrc2VydmVyLmdldF9pbmhlcml0ZWRfZmRzKClbc2VsZi5pbmRdCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBhIHNlcnZlciBwcm9jZXNzCisjCisKK2NsYXNzIFBvcGVuKHBvcGVuX2ZvcmsuUG9wZW4pOgorICAgIG1ldGhvZCA9ICdmb3Jrc2VydmVyJworICAgIER1cEZkID0gX0R1cEZkCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBzZWxmLl9mZHMgPSBbXQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHByb2Nlc3Nfb2JqKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgZmQpOgorICAgICAgICBzZWxmLl9mZHMuYXBwZW5kKGZkKQorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2ZkcykgLSAxCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIHByZXBfZGF0YSA9IHNwYXduLmdldF9wcmVwYXJhdGlvbl9kYXRhKHByb2Nlc3Nfb2JqLl9uYW1lKQorICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJlcF9kYXRhLCBidWYpCisgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcm9jZXNzX29iaiwgYnVmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgICAgICBzZWxmLnNlbnRpbmVsLCB3ID0gZm9ya3NlcnZlci5jb25uZWN0X3RvX25ld19wcm9jZXNzKHNlbGYuX2ZkcykKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHNlbGYuc2VudGluZWwsKSkKKyAgICAgICAgd2l0aCBvcGVuKHcsICd3YicsIGNsb3NlZmQ9VHJ1ZSkgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICBzZWxmLnBpZCA9IGZvcmtzZXJ2ZXIucmVhZF91bnNpZ25lZChzZWxmLnNlbnRpbmVsKQorCisgICAgZGVmIHBvbGwoc2VsZiwgZmxhZz1vcy5XTk9IQU5HKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCB3YWl0CisgICAgICAgICAgICB0aW1lb3V0ID0gMCBpZiBmbGFnID09IG9zLldOT0hBTkcgZWxzZSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdChbc2VsZi5zZW50aW5lbF0sIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gZm9ya3NlcnZlci5yZWFkX3Vuc2lnbmVkKHNlbGYuc2VudGluZWwpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICAjIFRoZSBwcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkgcGVyaGFwcyBiZWNhdXNlIG9mIGEgc2lnbmFsCisgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gMjU1CisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fcG9zaXgucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3Bvc2l4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWRjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3Bvc2l4LnB5CkBAIC0wLDAgKzEsNzIgQEAKK2ltcG9ydCBmY250bAoraW1wb3J0IGlvCitpbXBvcnQgb3MKKworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHBvcGVuX2ZvcmsKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworZnJvbSAuIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisKKyMKKyMgV3JhcHBlciBmb3IgYW4gZmQgdXNlZCB3aGlsZSBsYXVuY2hpbmcgYSBwcm9jZXNzCisjCisKK2NsYXNzIF9EdXBGZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZkCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBhIGZyZXNoIGludGVycHJldGVyCisjCisKK2NsYXNzIFBvcGVuKHBvcGVuX2ZvcmsuUG9wZW4pOgorICAgIG1ldGhvZCA9ICdzcGF3bicKKyAgICBEdXBGZCA9IF9EdXBGZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc2VsZi5fZmRzID0gW10KKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZChmZCkKKyAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIGZyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKKyAgICAgICAgdHJhY2tlcl9mZCA9IHNlbWFwaG9yZV90cmFja2VyLmdldGZkKCkKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZCh0cmFja2VyX2ZkKQorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKyAgICAgICAgZnAgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJlcF9kYXRhLCBmcCkKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCBmcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKE5vbmUpCisKKyAgICAgICAgcGFyZW50X3IgPSBjaGlsZF93ID0gY2hpbGRfciA9IHBhcmVudF93ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJlbnRfciwgY2hpbGRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgY2hpbGRfciwgcGFyZW50X3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIGNtZCA9IHNwYXduLmdldF9jb21tYW5kX2xpbmUodHJhY2tlcl9mZD10cmFja2VyX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlX2hhbmRsZT1jaGlsZF9yKQorICAgICAgICAgICAgc2VsZi5fZmRzLmV4dGVuZChbY2hpbGRfciwgY2hpbGRfd10pCisgICAgICAgICAgICBzZWxmLnBpZCA9IHV0aWwuc3Bhd252X3Bhc3NmZHMoc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQsIHNlbGYuX2ZkcykKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBwYXJlbnRfcgorICAgICAgICAgICAgd2l0aCBvcGVuKHBhcmVudF93LCAnd2InLCBjbG9zZWZkPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZnAuZ2V0YnVmZmVyKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBwYXJlbnRfciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAocGFyZW50X3IsKSkKKyAgICAgICAgICAgIGZvciBmZCBpbiAoY2hpbGRfciwgY2hpbGRfdywgcGFyZW50X3cpOgorICAgICAgICAgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3dpbjMyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTMwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3dpbjMyLnB5CkBAIC0wLDAgKzEsOTkgQEAKK2ltcG9ydCBvcworaW1wb3J0IG1zdmNydAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IF93aW5hcGkKKworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ1BvcGVuJ10KKworIworIworIworCitURVJNSU5BVEUgPSAweDEwMDAwCitXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQorV0lOU0VSVklDRSA9IHN5cy5leGVjdXRhYmxlLmxvd2VyKCkuZW5kc3dpdGgoInB5dGhvbnNlcnZpY2UuZXhlIikKKworIworIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKKyMgd2hvc2UgY29uc3RydWN0b3IgdGFrZXMgYSBwcm9jZXNzIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuCisjCisKK2NsYXNzIFBvcGVuKG9iamVjdCk6CisgICAgJycnCisgICAgU3RhcnQgYSBzdWJwcm9jZXNzIHRvIHJ1biB0aGUgY29kZSBvZiBhIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgbWV0aG9kID0gJ3NwYXduJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgcHJlcF9kYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCisKKyAgICAgICAgIyByZWFkIGVuZCBvZiBwaXBlIHdpbGwgYmUgInN0b2xlbiIgYnkgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAgICAgIyAtLSBzZWUgc3Bhd25fbWFpbigpIGluIHNwYXduLnB5LgorICAgICAgICByaGFuZGxlLCB3aGFuZGxlID0gX3dpbmFwaS5DcmVhdGVQaXBlKE5vbmUsIDApCisgICAgICAgIHdmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZSh3aGFuZGxlLCAwKQorICAgICAgICBjbWQgPSBzcGF3bi5nZXRfY29tbWFuZF9saW5lKHBhcmVudF9waWQ9b3MuZ2V0cGlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9oYW5kbGU9cmhhbmRsZSkKKyAgICAgICAgY21kID0gJyAnLmpvaW4oJyIlcyInICUgeCBmb3IgeCBpbiBjbWQpCisKKyAgICAgICAgd2l0aCBvcGVuKHdmZCwgJ3diJywgY2xvc2VmZD1UcnVlKSBhcyB0b19jaGlsZDoKKyAgICAgICAgICAgICMgc3RhcnQgcHJvY2VzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGhwLCBodCwgcGlkLCB0aWQgPSBfd2luYXBpLkNyZWF0ZVByb2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIHNwYXduLmdldF9leGVjdXRhYmxlKCksIGNtZCwKKyAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgRmFsc2UsIDAsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShodCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHJoYW5kbGUpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlcyBvZiBzZWxmCisgICAgICAgICAgICBzZWxmLnBpZCA9IHBpZAorICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gaHAKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBpbnQoaHApCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIF93aW5hcGkuQ2xvc2VIYW5kbGUsIChzZWxmLnNlbnRpbmVsLCkpCisKKyAgICAgICAgICAgICMgc2VuZCBpbmZvcm1hdGlvbiB0byBjaGlsZAorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcmVwX2RhdGEsIHRvX2NoaWxkKQorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCB0b19jaGlsZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGhhbmRsZSk6CisgICAgICAgIGFzc2VydCBzZWxmIGlzIGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkKKyAgICAgICAgcmV0dXJuIHJlZHVjdGlvbi5kdXBsaWNhdGUoaGFuZGxlLCBzZWxmLnNlbnRpbmVsKQorCisgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbXNlY3MgPSBfd2luYXBpLklORklOSVRFCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZWNzID0gbWF4KDAsIGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkpCisKKyAgICAgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvclNpbmdsZU9iamVjdChpbnQoc2VsZi5faGFuZGxlKSwgbXNlY3MpCisgICAgICAgICAgICBpZiByZXMgPT0gX3dpbmFwaS5XQUlUX09CSkVDVF8wOgorICAgICAgICAgICAgICAgIGNvZGUgPSBfd2luYXBpLkdldEV4aXRDb2RlUHJvY2VzcyhzZWxmLl9oYW5kbGUpCisgICAgICAgICAgICAgICAgaWYgY29kZSA9PSBURVJNSU5BVEU6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAtc2lnbmFsLlNJR1RFUk0KKyAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBjb2RlCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLndhaXQodGltZW91dD0wKQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX3dpbmFwaS5UZXJtaW5hdGVQcm9jZXNzKGludChzZWxmLl9oYW5kbGUpLCBURVJNSU5BVEUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0xLjApIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKaW5kZXggODkzNTA3Yi4uYzJmYzU4MSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQpAQCAtNyw3ICs3LDcgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX2FsbF9fID0gWydQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nXQorX19hbGxfXyA9IFsnQmFzZVByb2Nlc3MnLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbiddCiAKICMKICMgSW1wb3J0cwpAQCAtNDMsNyArNDMsNyBAQAogICAgIFJldHVybiBsaXN0IG9mIHByb2Nlc3Mgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIGxpdmUgY2hpbGQgcHJvY2Vzc2VzCiAgICAgJycnCiAgICAgX2NsZWFudXAoKQotICAgIHJldHVybiBsaXN0KF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuKQorICAgIHJldHVybiBsaXN0KF9jaGlsZHJlbikKIAogIwogIwpAQCAtNTEsMzMgKzUxLDI5IEBACiAKIGRlZiBfY2xlYW51cCgpOgogICAgICMgY2hlY2sgZm9yIHByb2Nlc3NlcyB3aGljaCBoYXZlIGZpbmlzaGVkCi0gICAgZm9yIHAgaW4gbGlzdChfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbik6CisgICAgZm9yIHAgaW4gbGlzdChfY2hpbGRyZW4pOgogICAgICAgICBpZiBwLl9wb3Blbi5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5kaXNjYXJkKHApCisgICAgICAgICAgICBfY2hpbGRyZW4uZGlzY2FyZChwKQogCiAjCiAjIFRoZSBgUHJvY2Vzc2AgY2xhc3MKICMKIAotY2xhc3MgUHJvY2VzcyhvYmplY3QpOgorY2xhc3MgQmFzZVByb2Nlc3Mob2JqZWN0KToKICAgICAnJycKICAgICBQcm9jZXNzIG9iamVjdHMgcmVwcmVzZW50IGFjdGl2aXR5IHRoYXQgaXMgcnVuIGluIGEgc2VwYXJhdGUgcHJvY2VzcwogCi0gICAgVGhlIGNsYXNzIGlzIGFuYWxhZ291cyB0byBgdGhyZWFkaW5nLlRocmVhZGAKKyAgICBUaGUgY2xhc3MgaXMgYW5hbG9nb3VzIHRvIGB0aHJlYWRpbmcuVGhyZWFkYAogICAgICcnJwotICAgIF9Qb3BlbiA9IE5vbmUKKyAgICBkZWYgX1BvcGVuKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZ3JvdXA9Tm9uZSwgdGFyZ2V0PU5vbmUsIG5hbWU9Tm9uZSwgYXJncz0oKSwga3dhcmdzPXt9LAogICAgICAgICAgICAgICAgICAqLCBkYWVtb249Tm9uZSk6CiAgICAgICAgIGFzc2VydCBncm91cCBpcyBOb25lLCAnZ3JvdXAgYXJndW1lbnQgbXVzdCBiZSBOb25lIGZvciBub3cnCi0gICAgICAgIGNvdW50ID0gbmV4dChfY3VycmVudF9wcm9jZXNzLl9jb3VudGVyKQorICAgICAgICBjb3VudCA9IG5leHQoX3Byb2Nlc3NfY291bnRlcikKICAgICAgICAgc2VsZi5faWRlbnRpdHkgPSBfY3VycmVudF9wcm9jZXNzLl9pZGVudGl0eSArIChjb3VudCwpCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBfY3VycmVudF9wcm9jZXNzLl9hdXRoa2V5Ci0gICAgICAgIGlmIGRhZW1vbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gZGFlbW9uCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9kYWVtb25pYyA9IF9jdXJyZW50X3Byb2Nlc3MuX2RhZW1vbmljCi0gICAgICAgIHNlbGYuX3RlbXBkaXIgPSBfY3VycmVudF9wcm9jZXNzLl90ZW1wZGlyCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IF9jdXJyZW50X3Byb2Nlc3MuX2NvbmZpZy5jb3B5KCkKICAgICAgICAgc2VsZi5fcGFyZW50X3BpZCA9IG9zLmdldHBpZCgpCiAgICAgICAgIHNlbGYuX3BvcGVuID0gTm9uZQogICAgICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKQEAgLTg1LDYgKzgxLDggQEAKICAgICAgICAgc2VsZi5fa3dhcmdzID0gZGljdChrd2FyZ3MpCiAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lIG9yIHR5cGUoc2VsZikuX19uYW1lX18gKyAnLScgKyBcCiAgICAgICAgICAgICAgICAgICAgICAnOicuam9pbihzdHIoaSkgZm9yIGkgaW4gc2VsZi5faWRlbnRpdHkpCisgICAgICAgIGlmIGRhZW1vbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGFlbW9uID0gZGFlbW9uCiAgICAgICAgIF9kYW5nbGluZy5hZGQoc2VsZikKIAogICAgIGRlZiBydW4oc2VsZik6CkBAIC0xMDEsMTYgKzk5LDEyIEBACiAgICAgICAgIGFzc2VydCBzZWxmLl9wb3BlbiBpcyBOb25lLCAnY2Fubm90IHN0YXJ0IGEgcHJvY2VzcyB0d2ljZScKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BhcmVudF9waWQgPT0gb3MuZ2V0cGlkKCksIFwKICAgICAgICAgICAgICAgICdjYW4gb25seSBzdGFydCBhIHByb2Nlc3Mgb2JqZWN0IGNyZWF0ZWQgYnkgY3VycmVudCBwcm9jZXNzJwotICAgICAgICBhc3NlcnQgbm90IF9jdXJyZW50X3Byb2Nlc3MuX2RhZW1vbmljLCBcCisgICAgICAgIGFzc2VydCBub3QgX2N1cnJlbnRfcHJvY2Vzcy5fY29uZmlnLmdldCgnZGFlbW9uJyksIFwKICAgICAgICAgICAgICAgICdkYWVtb25pYyBwcm9jZXNzZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgY2hpbGRyZW4nCiAgICAgICAgIF9jbGVhbnVwKCkKLSAgICAgICAgaWYgc2VsZi5fUG9wZW4gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBQb3BlbiA9IHNlbGYuX1BvcGVuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmcm9tIC5mb3JraW5nIGltcG9ydCBQb3BlbgotICAgICAgICBzZWxmLl9wb3BlbiA9IFBvcGVuKHNlbGYpCisgICAgICAgIHNlbGYuX3BvcGVuID0gc2VsZi5fUG9wZW4oc2VsZikKICAgICAgICAgc2VsZi5fc2VudGluZWwgPSBzZWxmLl9wb3Blbi5zZW50aW5lbAotICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5hZGQoc2VsZikKKyAgICAgICAgX2NoaWxkcmVuLmFkZChzZWxmKQogCiAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKICAgICAgICAgJycnCkBAIC0xMjYsNyArMTIwLDcgQEAKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BvcGVuIGlzIG5vdCBOb25lLCAnY2FuIG9ubHkgam9pbiBhIHN0YXJ0ZWQgcHJvY2VzcycKICAgICAgICAgcmVzID0gc2VsZi5fcG9wZW4ud2FpdCh0aW1lb3V0KQogICAgICAgICBpZiByZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5kaXNjYXJkKHNlbGYpCisgICAgICAgICAgICBfY2hpbGRyZW4uZGlzY2FyZChzZWxmKQogCiAgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgogICAgICAgICAnJycKQEAgLTE1NCw3ICsxNDgsNyBAQAogICAgICAgICAnJycKICAgICAgICAgUmV0dXJuIHdoZXRoZXIgcHJvY2VzcyBpcyBhIGRhZW1vbgogICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RhZW1vbmljCisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWcuZ2V0KCdkYWVtb24nLCBGYWxzZSkKIAogICAgIEBkYWVtb24uc2V0dGVyCiAgICAgZGVmIGRhZW1vbihzZWxmLCBkYWVtb25pYyk6CkBAIC0xNjIsMTggKzE1NiwxOCBAQAogICAgICAgICBTZXQgd2hldGhlciBwcm9jZXNzIGlzIGEgZGFlbW9uCiAgICAgICAgICcnJwogICAgICAgICBhc3NlcnQgc2VsZi5fcG9wZW4gaXMgTm9uZSwgJ3Byb2Nlc3MgaGFzIGFscmVhZHkgc3RhcnRlZCcKLSAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBkYWVtb25pYworICAgICAgICBzZWxmLl9jb25maWdbJ2RhZW1vbiddID0gZGFlbW9uaWMKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBhdXRoa2V5KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYXV0aGtleQorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnWydhdXRoa2V5J10KIAogICAgIEBhdXRoa2V5LnNldHRlcgogICAgIGRlZiBhdXRoa2V5KHNlbGYsIGF1dGhrZXkpOgogICAgICAgICAnJycKICAgICAgICAgU2V0IGF1dGhvcml6YXRpb24ga2V5IG9mIHByb2Nlc3MKICAgICAgICAgJycnCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICBzZWxmLl9jb25maWdbJ2F1dGhrZXknXSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgZXhpdGNvZGUoc2VsZik6CkBAIC0yMjcsMTcgKzIyMSwxOSBAQAogICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdzdG9wcGVkWyVzXScgJSBfZXhpdGNvZGVfdG9fbmFtZS5nZXQoc3RhdHVzLCBzdGF0dXMpCiAKICAgICAgICAgcmV0dXJuICc8JXMoJXMsICVzJXMpPicgJSAodHlwZShzZWxmKS5fX25hbWVfXywgc2VsZi5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxmLl9kYWVtb25pYyBhbmQgJyBkYWVtb24nIG9yICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHNlbGYuZGFlbW9uIGFuZCAnIGRhZW1vbicgb3IgJycpCiAKICAgICAjIwogCiAgICAgZGVmIF9ib290c3RyYXAoc2VsZik6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgdXRpbAotICAgICAgICBnbG9iYWwgX2N1cnJlbnRfcHJvY2VzcworICAgICAgICBmcm9tIC4gaW1wb3J0IHV0aWwsIGNvbnRleHQKKyAgICAgICAgZ2xvYmFsIF9jdXJyZW50X3Byb2Nlc3MsIF9wcm9jZXNzX2NvdW50ZXIsIF9jaGlsZHJlbgogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gc2V0KCkKLSAgICAgICAgICAgIHNlbGYuX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXJ0X21ldGhvZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0Ll9mb3JjZV9zdGFydF9tZXRob2Qoc2VsZi5fc3RhcnRfbWV0aG9kKQorICAgICAgICAgICAgX3Byb2Nlc3NfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQorICAgICAgICAgICAgX2NoaWxkcmVuID0gc2V0KCkKICAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCkBAIC0yODUsOCArMjgxLDggQEAKIAogY2xhc3MgQXV0aGVudGljYXRpb25TdHJpbmcoYnl0ZXMpOgogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgotICAgICAgICBmcm9tIC5mb3JraW5nIGltcG9ydCBQb3BlbgotICAgICAgICBpZiBub3QgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6CisgICAgICAgIGZyb20gLmNvbnRleHQgaW1wb3J0IGdldF9zcGF3bmluZ19wb3BlbgorICAgICAgICBpZiBnZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgICdQaWNrbGluZyBhbiBBdXRoZW50aWNhdGlvblN0cmluZyBvYmplY3QgaXMgJwogICAgICAgICAgICAgICAgICdkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zJwpAQCAtMjk3LDIwICsyOTMsMjMgQEAKICMgQ3JlYXRlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG1haW4gcHJvY2VzcwogIwogCi1jbGFzcyBfTWFpblByb2Nlc3MoUHJvY2Vzcyk6CitjbGFzcyBfTWFpblByb2Nlc3MoQmFzZVByb2Nlc3MpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLl9pZGVudGl0eSA9ICgpCi0gICAgICAgIHNlbGYuX2RhZW1vbmljID0gRmFsc2UKICAgICAgICAgc2VsZi5fbmFtZSA9ICdNYWluUHJvY2VzcycKICAgICAgICAgc2VsZi5fcGFyZW50X3BpZCA9IE5vbmUKICAgICAgICAgc2VsZi5fcG9wZW4gPSBOb25lCi0gICAgICAgIHNlbGYuX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBzZXQoKQotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcob3MudXJhbmRvbSgzMikpCi0gICAgICAgIHNlbGYuX3RlbXBkaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IHsnYXV0aGtleSc6IEF1dGhlbnRpY2F0aW9uU3RyaW5nKG9zLnVyYW5kb20oMzIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZW1wcmVmaXgnOiAnbXAnfQorICAgICAgICAjIE5vdGUgdGhhdCBzb21lIHZlcnNpb25zIG9mIEZyZWVCU0Qgb25seSBhbGxvdyBuYW1lZAorICAgICAgICAjIHNlbWFwaG9yZXMgdG8gaGF2ZSBuYW1lcyBvZiB1cCB0byAxNCBjaGFyYWN0ZXJzLiAgVGhlcmZvcmUKKyAgICAgICAgIyB3ZSBjaG9vc2UgYSBzaG9ydCBwcmVmaXguCisKIAogX2N1cnJlbnRfcHJvY2VzcyA9IF9NYWluUHJvY2VzcygpCitfcHJvY2Vzc19jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpCitfY2hpbGRyZW4gPSBzZXQoKQogZGVsIF9NYWluUHJvY2VzcwogCiAjCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CmluZGV4IDM3MjcxZmIuLmY2NTA3NzEgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CkBAIC0xOCwxMSArMTgsMTQgQEAKIGltcG9ydCBlcnJubwogCiBmcm9tIHF1ZXVlIGltcG9ydCBFbXB0eSwgRnVsbAorCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQotZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IExvY2ssIEJvdW5kZWRTZW1hcGhvcmUsIFNlbWFwaG9yZSwgQ29uZGl0aW9uCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBkZWJ1ZywgaW5mbywgRmluYWxpemUsIHJlZ2lzdGVyX2FmdGVyX2ZvcmsKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgY29udGV4dAorCitmcm9tIC51dGlsIGltcG9ydCBkZWJ1ZywgaW5mbywgRmluYWxpemUsIHJlZ2lzdGVyX2FmdGVyX2ZvcmssIGlzX2V4aXRpbmcKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKIAogIwogIyBRdWV1ZSB0eXBlIHVzaW5nIGEgcGlwZSwgYnVmZmVyIGFuZCB0aHJlYWQKQEAgLTMwLDE4ICszMywxOCBAQAogCiBjbGFzcyBRdWV1ZShvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgY3R4KToKICAgICAgICAgaWYgbWF4c2l6ZSA8PSAwOgogICAgICAgICAgICAgbWF4c2l6ZSA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jay5TRU1fVkFMVUVfTUFYCiAgICAgICAgIHNlbGYuX21heHNpemUgPSBtYXhzaXplCi0gICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gUGlwZShkdXBsZXg9RmFsc2UpCi0gICAgICAgIHNlbGYuX3Jsb2NrID0gTG9jaygpCisgICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmxvY2sgPSBjdHguTG9jaygpCiAgICAgICAgIHNlbGYuX29waWQgPSBvcy5nZXRwaWQoKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTm9uZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBMb2NrKCkKLSAgICAgICAgc2VsZi5fc2VtID0gQm91bmRlZFNlbWFwaG9yZShtYXhzaXplKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCisgICAgICAgIHNlbGYuX3NlbSA9IGN0eC5Cb3VuZGVkU2VtYXBob3JlKG1heHNpemUpCiAgICAgICAgICMgRm9yIHVzZSBieSBjb25jdXJyZW50LmZ1dHVyZXMKICAgICAgICAgc2VsZi5faWdub3JlX2VwaXBlID0gRmFsc2UKIApAQCAtNTEsNyArNTQsNyBAQAogICAgICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBRdWV1ZS5fYWZ0ZXJfZm9yaykKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2lnbm9yZV9lcGlwZSwgc2VsZi5fbWF4c2l6ZSwgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrLCBzZWxmLl9zZW0sIHNlbGYuX29waWQpCiAKQEAgLTY5LDggKzcyLDggQEAKICAgICAgICAgc2VsZi5fam9pbmNhbmNlbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlID0gTm9uZQotICAgICAgICBzZWxmLl9zZW5kID0gc2VsZi5fd3JpdGVyLnNlbmQKLSAgICAgICAgc2VsZi5fcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2CisgICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMgPSBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcworICAgICAgICBzZWxmLl9yZWN2X2J5dGVzID0gc2VsZi5fcmVhZGVyLnJlY3ZfYnl0ZXMKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAKICAgICBkZWYgcHV0KHNlbGYsIG9iaiwgYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKToKQEAgLTg5LDE0ICs5Miw5IEBACiAKICAgICBkZWYgZ2V0KHNlbGYsIGJsb2NrPVRydWUsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgIGlmIGJsb2NrIGFuZCB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9ybG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2KCkKLSAgICAgICAgICAgICAgICBzZWxmLl9zZW0ucmVsZWFzZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlcwotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLl9ybG9jay5yZWxlYXNlKCkKLQorICAgICAgICAgICAgd2l0aCBzZWxmLl9ybG9jazoKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbS5yZWxlYXNlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CkBAIC0xMDksMTEgKzEwNywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRW1wdHkKICAgICAgICAgICAgICAgICBlbGlmIG5vdCBzZWxmLl9wb2xsKCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVtcHR5Ci0gICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdigpCisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdl9ieXRlcygpCiAgICAgICAgICAgICAgICAgc2VsZi5fc2VtLnJlbGVhc2UoKQotICAgICAgICAgICAgICAgIHJldHVybiByZXMKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2sucmVsZWFzZSgpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKICAgICBkZWYgcXNpemUoc2VsZik6CiAgICAgICAgICMgUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3Igb24gTWFjIE9TWCBiZWNhdXNlIG9mIGJyb2tlbiBzZW1fZ2V0dmFsdWUoKQpAQCAtMTU4LDcgKzE1Nyw3IEBACiAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCiAgICAgICAgIHNlbGYuX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCiAgICAgICAgICAgICB0YXJnZXQ9UXVldWUuX2ZlZWQsCi0gICAgICAgICAgICBhcmdzPShzZWxmLl9idWZmZXIsIHNlbGYuX25vdGVtcHR5LCBzZWxmLl9zZW5kLAorICAgICAgICAgICAgYXJncz0oc2VsZi5fYnVmZmVyLCBzZWxmLl9ub3RlbXB0eSwgc2VsZi5fc2VuZF9ieXRlcywKICAgICAgICAgICAgICAgICAgIHNlbGYuX3dsb2NrLCBzZWxmLl93cml0ZXIuY2xvc2UsIHNlbGYuX2lnbm9yZV9lcGlwZSksCiAgICAgICAgICAgICBuYW1lPSdRdWV1ZUZlZWRlclRocmVhZCcKICAgICAgICAgICAgICkKQEAgLTIxMCwxMCArMjA5LDggQEAKICAgICAgICAgICAgIG5vdGVtcHR5LnJlbGVhc2UoKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZmVlZChidWZmZXIsIG5vdGVtcHR5LCBzZW5kLCB3cml0ZWxvY2ssIGNsb3NlLCBpZ25vcmVfZXBpcGUpOgorICAgIGRlZiBfZmVlZChidWZmZXIsIG5vdGVtcHR5LCBzZW5kX2J5dGVzLCB3cml0ZWxvY2ssIGNsb3NlLCBpZ25vcmVfZXBpcGUpOgogICAgICAgICBkZWJ1Zygnc3RhcnRpbmcgdGhyZWFkIHRvIGZlZWQgZGF0YSB0byBwaXBlJykKLSAgICAgICAgZnJvbSAudXRpbCBpbXBvcnQgaXNfZXhpdGluZwotCiAgICAgICAgIG5hY3F1aXJlID0gbm90ZW1wdHkuYWNxdWlyZQogICAgICAgICBucmVsZWFzZSA9IG5vdGVtcHR5LnJlbGVhc2UKICAgICAgICAgbndhaXQgPSBub3RlbXB0eS53YWl0CkBAIC0yNDEsMTIgKzIzOCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXJpYWxpemUgdGhlIGRhdGEgYmVmb3JlIGFjcXVpcmluZyB0aGUgbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gRm9ya2luZ1BpY2tsZXIuZHVtcHMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgd2FjcXVpcmUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kKG9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX2J5dGVzKG9iaikKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FjcXVpcmUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnl0ZXMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyZWxlYXNlKCkKICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKQEAgLTI3OSwxMCArMjc4LDEwIEBACiAKIGNsYXNzIEpvaW5hYmxlUXVldWUoUXVldWUpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCk6Ci0gICAgICAgIFF1ZXVlLl9faW5pdF9fKHNlbGYsIG1heHNpemUpCi0gICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPSBTZW1hcGhvcmUoMCkKLSAgICAgICAgc2VsZi5fY29uZCA9IENvbmRpdGlvbigpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgY3R4KToKKyAgICAgICAgUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSwgY3R4PWN0eCkKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IGN0eC5TZW1hcGhvcmUoMCkKKyAgICAgICAgc2VsZi5fY29uZCA9IGN0eC5Db25kaXRpb24oKQogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIFF1ZXVlLl9fZ2V0c3RhdGVfXyhzZWxmKSArIChzZWxmLl9jb25kLCBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzKQpAQCAtMzMyLDQ4ICszMzEsMzcgQEAKIAogY2xhc3MgU2ltcGxlUXVldWUob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBQaXBlKGR1cGxleD1GYWxzZSkKLSAgICAgICAgc2VsZi5fcmxvY2sgPSBMb2NrKCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQorICAgICAgICBzZWxmLl9ybG9jayA9IGN0eC5Mb2NrKCkKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBOb25lCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl93bG9jayA9IExvY2soKQotICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCiAKICAgICBkZWYgZW1wdHkoc2VsZik6CiAgICAgICAgIHJldHVybiBub3Qgc2VsZi5fcG9sbCgpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgcmV0dXJuIChzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciwgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrKQogCiAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CiAgICAgICAgIChzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciwgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrKSA9IHN0YXRlCi0gICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKLSAgICBkZWYgX21ha2VfbWV0aG9kcyhzZWxmKToKLSAgICAgICAgcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2Ci0gICAgICAgIHJhY3F1aXJlLCBycmVsZWFzZSA9IHNlbGYuX3Jsb2NrLmFjcXVpcmUsIHNlbGYuX3Jsb2NrLnJlbGVhc2UKLSAgICAgICAgZGVmIGdldCgpOgotICAgICAgICAgICAgcmFjcXVpcmUoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiByZWN2KCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcnJlbGVhc2UoKQotICAgICAgICBzZWxmLmdldCA9IGdldAorICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5fcmxvY2s6CisgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWFkZXIucmVjdl9ieXRlcygpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKKyAgICBkZWYgcHV0KHNlbGYsIG9iaik6CisgICAgICAgICMgc2VyaWFsaXplIHRoZSBkYXRhIGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxvY2sKKyAgICAgICAgb2JqID0gRm9ya2luZ1BpY2tsZXIuZHVtcHMob2JqKQogICAgICAgICBpZiBzZWxmLl93bG9jayBpcyBOb25lOgogICAgICAgICAgICAgIyB3cml0ZXMgdG8gYSBtZXNzYWdlIG9yaWVudGVkIHdpbjMyIHBpcGUgYXJlIGF0b21pYwotICAgICAgICAgICAgc2VsZi5wdXQgPSBzZWxmLl93cml0ZXIuc2VuZAorICAgICAgICAgICAgc2VsZi5fd3JpdGVyLnNlbmRfYnl0ZXMob2JqKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VuZCA9IHNlbGYuX3dyaXRlci5zZW5kCi0gICAgICAgICAgICB3YWNxdWlyZSwgd3JlbGVhc2UgPSBzZWxmLl93bG9jay5hY3F1aXJlLCBzZWxmLl93bG9jay5yZWxlYXNlCi0gICAgICAgICAgICBkZWYgcHV0KG9iaik6Ci0gICAgICAgICAgICAgICAgd2FjcXVpcmUoKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbmQob2JqKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHdyZWxlYXNlKCkKLSAgICAgICAgICAgIHNlbGYucHV0ID0gcHV0CisgICAgICAgICAgICB3aXRoIHNlbGYuX3dsb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlci5zZW5kX2J5dGVzKG9iaikKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKaW5kZXggNjU2ZmE4Zi4uMDFlNmRlMiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKQEAgLTEsNiArMSw1IEBACiAjCi0jIE1vZHVsZSB0byBhbGxvdyBjb25uZWN0aW9uIGFuZCBzb2NrZXQgb2JqZWN0cyB0byBiZSB0cmFuc2ZlcnJlZAotIyBiZXR3ZWVuIHByb2Nlc3NlcworIyBNb2R1bGUgd2hpY2ggZGVhbHMgd2l0aCBwaWNrbGluZyBvZiBvYmplY3RzLgogIwogIyBtdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CiAjCkBAIC04LDI3ICs3LDU3IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsncmVkdWNlX3NvY2tldCcsICdyZWR1Y2VfY29ubmVjdGlvbicsICdzZW5kX2hhbmRsZScsICdyZWN2X2hhbmRsZSddCi0KK2ltcG9ydCBjb3B5cmVnCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW8KIGltcG9ydCBvcwotaW1wb3J0IHN5cworaW1wb3J0IHBpY2tsZQogaW1wb3J0IHNvY2tldAotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHN0cnVjdAotaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cwogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCByZWdpc3Rlcl9hZnRlcl9mb3JrLCBkZWJ1Zywgc3ViX2RlYnVnCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBpc19leGl0aW5nLCBzdWJfd2FybmluZworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHV0aWwKIAorX19hbGxfXyA9IFsnc2VuZF9oYW5kbGUnLCAncmVjdl9oYW5kbGUnLCAnRm9ya2luZ1BpY2tsZXInLCAncmVnaXN0ZXInLCAnZHVtcCddCisKKworSEFWRV9TRU5EX0hBTkRMRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvcgorICAgICAgICAgICAgICAgICAgICAoaGFzYXR0cihzb2NrZXQsICdDTVNHX0xFTicpIGFuZAorICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihzb2NrZXQsICdTQ01fUklHSFRTJykgYW5kCisgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKHNvY2tldC5zb2NrZXQsICdzZW5kbXNnJykpKQogCiAjCi0jCisjIFBpY2tsZXIgc3ViY2xhc3MKICMKIAotaWYgbm90KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIChoYXNhdHRyKHNvY2tldCwgJ0NNU0dfTEVOJykgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIoc29ja2V0LCAnU0NNX1JJR0hUUycpKSk6Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3BpY2tsaW5nIG9mIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKQorY2xhc3MgRm9ya2luZ1BpY2tsZXIocGlja2xlLlBpY2tsZXIpOgorICAgICcnJ1BpY2tsZXIgc3ViY2xhc3MgdXNlZCBieSBtdWx0aXByb2Nlc3NpbmcuJycnCisgICAgX2V4dHJhX3JlZHVjZXJzID0ge30KKyAgICBfY29weXJlZ19kaXNwYXRjaF90YWJsZSA9IGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MpCisgICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBzZWxmLl9jb3B5cmVnX2Rpc3BhdGNoX3RhYmxlLmNvcHkoKQorICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlLnVwZGF0ZShzZWxmLl9leHRyYV9yZWR1Y2VycykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiByZWdpc3RlcihjbHMsIHR5cGUsIHJlZHVjZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIGEgcmVkdWNlIGZ1bmN0aW9uIGZvciBhIHR5cGUuJycnCisgICAgICAgIGNscy5fZXh0cmFfcmVkdWNlcnNbdHlwZV0gPSByZWR1Y2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkdW1wcyhjbHMsIG9iaiwgcHJvdG9jb2w9Tm9uZSk6CisgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjbHMoYnVmLCBwcm90b2NvbCkuZHVtcChvYmopCisgICAgICAgIHJldHVybiBidWYuZ2V0YnVmZmVyKCkKKworICAgIGxvYWRzID0gcGlja2xlLmxvYWRzCisKK3JlZ2lzdGVyID0gRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIKKworZGVmIGR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lKToKKyAgICAnJydSZXBsYWNlbWVudCBmb3IgcGlja2xlLmR1bXAoKSB1c2luZyBGb3JraW5nUGlja2xlci4nJycKKyAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCiAKICMKICMgUGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMKQEAgLTM2LDIwICs2NSw0NCBAQAogCiBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAjIFdpbmRvd3MKLSAgICBfX2FsbF9fICs9IFsncmVkdWNlX3BpcGVfY29ubmVjdGlvbiddCisgICAgX19hbGxfXyArPSBbJ0R1cEhhbmRsZScsICdkdXBsaWNhdGUnLCAnc3RlYWxfaGFuZGxlJ10KICAgICBpbXBvcnQgX3dpbmFwaQogCisgICAgZGVmIGR1cGxpY2F0ZShoYW5kbGUsIHRhcmdldF9wcm9jZXNzPU5vbmUsIGluaGVyaXRhYmxlPUZhbHNlKToKKyAgICAgICAgJycnRHVwbGljYXRlIGEgaGFuZGxlLiAgKHRhcmdldF9wcm9jZXNzIGlzIGEgaGFuZGxlIG5vdCBhIHBpZCEpJycnCisgICAgICAgIGlmIHRhcmdldF9wcm9jZXNzIGlzIE5vbmU6CisgICAgICAgICAgICB0YXJnZXRfcHJvY2VzcyA9IF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKQorICAgICAgICByZXR1cm4gX3dpbmFwaS5EdXBsaWNhdGVIYW5kbGUoCisgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3MsCisgICAgICAgICAgICAwLCBpbmhlcml0YWJsZSwgX3dpbmFwaS5EVVBMSUNBVEVfU0FNRV9BQ0NFU1MpCisKKyAgICBkZWYgc3RlYWxfaGFuZGxlKHNvdXJjZV9waWQsIGhhbmRsZSk6CisgICAgICAgICcnJ1N0ZWFsIGEgaGFuZGxlIGZyb20gcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHNvdXJjZV9waWQuJycnCisgICAgICAgIHNvdXJjZV9wcm9jZXNzX2hhbmRsZSA9IF93aW5hcGkuT3BlblByb2Nlc3MoCisgICAgICAgICAgICBfd2luYXBpLlBST0NFU1NfRFVQX0hBTkRMRSwgRmFsc2UsIHNvdXJjZV9waWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBfd2luYXBpLkR1cGxpY2F0ZUhhbmRsZSgKKyAgICAgICAgICAgICAgICBzb3VyY2VfcHJvY2Vzc19oYW5kbGUsIGhhbmRsZSwKKyAgICAgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIDAsIEZhbHNlLAorICAgICAgICAgICAgICAgIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTIHwgX3dpbmFwaS5EVVBMSUNBVEVfQ0xPU0VfU09VUkNFKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShzb3VyY2VfcHJvY2Vzc19oYW5kbGUpCisKICAgICBkZWYgc2VuZF9oYW5kbGUoY29ubiwgaGFuZGxlLCBkZXN0aW5hdGlvbl9waWQpOgorICAgICAgICAnJydTZW5kIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJwogICAgICAgICBkaCA9IER1cEhhbmRsZShoYW5kbGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTLCBkZXN0aW5hdGlvbl9waWQpCiAgICAgICAgIGNvbm4uc2VuZChkaCkKIAogICAgIGRlZiByZWN2X2hhbmRsZShjb25uKToKKyAgICAgICAgJycnUmVjZWl2ZSBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKICAgICAgICAgcmV0dXJuIGNvbm4ucmVjdigpLmRldGFjaCgpCiAKICAgICBjbGFzcyBEdXBIYW5kbGUob2JqZWN0KToKKyAgICAgICAgJycnUGlja2xhYmxlIHdyYXBwZXIgZm9yIGEgaGFuZGxlLicnJwogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlLCBhY2Nlc3MsIHBpZD1Ob25lKToKLSAgICAgICAgICAgICMgZHVwbGljYXRlIGhhbmRsZSBmb3IgcHJvY2VzcyB3aXRoIGdpdmVuIHBpZAogICAgICAgICAgICAgaWYgcGlkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBXZSBqdXN0IGR1cGxpY2F0ZSB0aGUgaGFuZGxlIGluIHRoZSBjdXJyZW50IHByb2Nlc3MgYW5kCisgICAgICAgICAgICAgICAgIyBsZXQgdGhlIHJlY2VpdmluZyBwcm9jZXNzIHN0ZWFsIHRoZSBoYW5kbGUuCiAgICAgICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwgcGlkKQogICAgICAgICAgICAgdHJ5OgpAQCAtNjIsOSArMTE1LDEyIEBACiAgICAgICAgICAgICBzZWxmLl9waWQgPSBwaWQKIAogICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBoYW5kbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJwogICAgICAgICAgICAgIyByZXRyaWV2ZSBoYW5kbGUgZnJvbSBwcm9jZXNzIHdoaWNoIGN1cnJlbnRseSBvd25zIGl0CiAgICAgICAgICAgICBpZiBzZWxmLl9waWQgPT0gb3MuZ2V0cGlkKCk6CisgICAgICAgICAgICAgICAgIyBUaGUgaGFuZGxlIGhhcyBhbHJlYWR5IGJlZW4gZHVwbGljYXRlZCBmb3IgdGhpcyBwcm9jZXNzLgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKyAgICAgICAgICAgICMgV2UgbXVzdCBzdGVhbCB0aGUgaGFuZGxlIGZyb20gdGhlIHByb2Nlc3Mgd2hvc2UgcGlkIGlzIHNlbGYuX3BpZC4KICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BpZCkKICAgICAgICAgICAgIHRyeToKQEAgLTc0LDIwNyArMTMwLDExMiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHByb2MpCiAKLSAgICBjbGFzcyBEdXBTb2NrZXQob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgotICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQotICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKLSAgICAgICAgICAgIHNlbGYuX2lkID0gcmVzb3VyY2Vfc2hhcmVyLnJlZ2lzdGVyKHNlbmQsIG5ld19zb2NrLmNsb3NlKQotCi0gICAgICAgIGRlZiBkZXRhY2goc2VsZik6Ci0gICAgICAgICAgICBjb25uID0gcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCi0KLSAgICBkZWYgcmVkdWNlX3NvY2tldChzKToKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoRHVwU29ja2V0KHMpLCkKLQotICAgIGRlZiByZWJ1aWxkX3NvY2tldChkcyk6Ci0gICAgICAgIHJldHVybiBkcy5kZXRhY2goKQotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBoYW5kbGUgPSBjb25uLmZpbGVubygpCi0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChoYW5kbGUsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBkcyA9IER1cFNvY2tldChzKQotICAgICAgICAgICAgcmV0dXJuIHJlYnVpbGRfY29ubmVjdGlvbiwgKGRzLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQotCi0gICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkcywgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbgotICAgICAgICBzb2NrID0gZHMuZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oc29jay5kZXRhY2goKSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0gICAgZGVmIHJlZHVjZV9waXBlX2Nvbm5lY3Rpb24oY29ubik6Ci0gICAgICAgIGFjY2VzcyA9ICgoX3dpbmFwaS5GSUxFX0dFTkVSSUNfUkVBRCBpZiBjb25uLnJlYWRhYmxlIGVsc2UgMCkgfAotICAgICAgICAgICAgICAgICAgKF93aW5hcGkuRklMRV9HRU5FUklDX1dSSVRFIGlmIGNvbm4ud3JpdGFibGUgZWxzZSAwKSkKLSAgICAgICAgZGggPSBEdXBIYW5kbGUoY29ubi5maWxlbm8oKSwgYWNjZXNzKQotICAgICAgICByZXR1cm4gcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24sIChkaCwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbihkaCwgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgUGlwZUNvbm5lY3Rpb24KLSAgICAgICAgaGFuZGxlID0gZGguZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIFBpcGVDb25uZWN0aW9uKGhhbmRsZSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCiBlbHNlOgogICAgICMgVW5peAorICAgIF9fYWxsX18gKz0gWydEdXBGZCcsICdzZW5kZmRzJywgJ3JlY3ZmZHMnXQorICAgIGltcG9ydCBhcnJheQogCiAgICAgIyBPbiBNYWNPU1ggd2Ugc2hvdWxkIGFja25vd2xlZGdlIHJlY2VpcHQgb2YgZmRzIC0tIHNlZSBJc3N1ZTE0NjY5CiAgICAgQUNLTk9XTEVER0UgPSBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicKIAotICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6Ci0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgcy5zZW5kbXNnKFtiJ3gnXSwgWyhzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNDTV9SSUdIVFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCJAaSIsIGhhbmRsZSkpXSkKLSAgICAgICAgaWYgQUNLTk9XTEVER0UgYW5kIGNvbm4ucmVjdl9ieXRlcygpICE9IGInQUNLJzoKKyAgICBkZWYgc2VuZGZkcyhzb2NrLCBmZHMpOgorICAgICAgICAnJydTZW5kIGFuIGFycmF5IG9mIGZkcyBvdmVyIGFuIEFGX1VOSVggc29ja2V0LicnJworICAgICAgICBmZHMgPSBhcnJheS5hcnJheSgnaScsIGZkcykKKyAgICAgICAgbXNnID0gYnl0ZXMoW2xlbihmZHMpICUgMjU2XSkKKyAgICAgICAgc29jay5zZW5kbXNnKFttc2ddLCBbKHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU0NNX1JJR0hUUywgZmRzKV0pCisgICAgICAgIGlmIEFDS05PV0xFREdFIGFuZCBzb2NrLnJlY3YoMSkgIT0gYidBJzoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZGlkIG5vdCByZWNlaXZlIGFja25vd2xlZGdlbWVudCBvZiBmZCcpCiAKLSAgICBkZWYgcmVjdl9oYW5kbGUoY29ubik6Ci0gICAgICAgIHNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoIkBpIikKKyAgICBkZWYgcmVjdmZkcyhzb2NrLCBzaXplKToKKyAgICAgICAgJycnUmVjZWl2ZSBhbiBhcnJheSBvZiBmZHMgb3ZlciBhbiBBRl9VTklYIHNvY2tldC4nJycKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdpJykKKyAgICAgICAgYnl0ZXNfc2l6ZSA9IGEuaXRlbXNpemUgKiBzaXplCisgICAgICAgIG1zZywgYW5jZGF0YSwgZmxhZ3MsIGFkZHIgPSBzb2NrLnJlY3Ztc2coMSwgc29ja2V0LkNNU0dfTEVOKGJ5dGVzX3NpemUpKQorICAgICAgICBpZiBub3QgbXNnIGFuZCBub3QgYW5jZGF0YToKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIEFDS05PV0xFREdFOgorICAgICAgICAgICAgICAgIHNvY2suc2VuZChiJ0EnKQorICAgICAgICAgICAgaWYgbGVuKGFuY2RhdGEpICE9IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyZWNlaXZlZCAlZCBpdGVtcyBvZiBhbmNkYXRhJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihhbmNkYXRhKSkKKyAgICAgICAgICAgIGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhID0gYW5jZGF0YVswXQorICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCisgICAgICAgICAgICAgICAgY21zZ190eXBlID09IHNvY2tldC5TQ01fUklHSFRTKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oY21zZ19kYXRhKSAlIGEuaXRlbXNpemUgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGEuZnJvbWJ5dGVzKGNtc2dfZGF0YSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGEpICUgMjU2ID09IG1zZ1swXQorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KGEpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCBkYXRhIHJlY2VpdmVkJykKKworICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6CisgICAgICAgICcnJ1NlbmQgYSBoYW5kbGUgb3ZlciBhIGxvY2FsIGNvbm5lY3Rpb24uJycnCiAgICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgbXNnLCBhbmNkYXRhLCBmbGFncywgYWRkciA9IHMucmVjdm1zZygxLCBzb2NrZXQuQ01TR19MRU4oc2l6ZSkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgQUNLTk9XTEVER0U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhiJ0FDSycpCi0gICAgICAgICAgICAgICAgY21zZ19sZXZlbCwgY21zZ190eXBlLCBjbXNnX2RhdGEgPSBhbmNkYXRhWzBdCi0gICAgICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCi0gICAgICAgICAgICAgICAgICAgIGNtc2dfdHlwZSA9PSBzb2NrZXQuU0NNX1JJR0hUUyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCJAaSIsIGNtc2dfZGF0YVs6c2l6ZV0pWzBdCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IsIHN0cnVjdC5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdJbnZhbGlkIGRhdGEgcmVjZWl2ZWQnKQorICAgICAgICAgICAgc2VuZGZkcyhzLCBbaGFuZGxlXSkKIAotICAgIGNsYXNzIER1cEZkKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6Ci0gICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNlbmRfaGFuZGxlKGNvbm4sIG5ld19mZCwgcGlkKQotICAgICAgICAgICAgZGVmIGNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UobmV3X2ZkKQotICAgICAgICAgICAgc2VsZi5faWQgPSByZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgY2xvc2UpCisgICAgZGVmIHJlY3ZfaGFuZGxlKGNvbm4pOgorICAgICAgICAnJydSZWNlaXZlIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJworICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoY29ubi5maWxlbm8oKSwgc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIHJldHVybiByZWN2ZmRzKHMsIDEpWzBdCiAKLSAgICAgICAgZGVmIGRldGFjaChzZWxmKToKLSAgICAgICAgICAgIGNvbm4gPSByZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3ZfaGFuZGxlKGNvbm4pCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgIGRlZiBEdXBGZChmZCk6CisgICAgICAgICcnJ1JldHVybiBhIHdyYXBwZXIgZm9yIGFuIGZkLicnJworICAgICAgICBwb3Blbl9vYmogPSBjb250ZXh0LmdldF9zcGF3bmluZ19wb3BlbigpCisgICAgICAgIGlmIHBvcGVuX29iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBwb3Blbl9vYmouRHVwRmQocG9wZW5fb2JqLmR1cGxpY2F0ZV9mb3JfY2hpbGQoZmQpKQorICAgICAgICBlbGlmIEhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlX3NoYXJlci5EdXBGZChmZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NDTV9SSUdIVFMgYXBwZWFycyBub3QgdG8gYmUgYXZhaWxhYmxlJykKIAotICAgIGRlZiByZWR1Y2Vfc29ja2V0KHMpOgorIworIyBUcnkgbWFraW5nIHNvbWUgY2FsbGFibGUgdHlwZXMgcGlja2xhYmxlCisjCisKK2RlZiBfcmVkdWNlX21ldGhvZChtKToKKyAgICBpZiBtLl9fc2VsZl9fIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX2NsYXNzX18sIG0uX19mdW5jX18uX19uYW1lX18pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fc2VsZl9fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQorY2xhc3MgX0M6CisgICAgZGVmIGYoc2VsZik6CisgICAgICAgIHBhc3MKK3JlZ2lzdGVyKHR5cGUoX0MoKS5mKSwgX3JlZHVjZV9tZXRob2QpCisKKworZGVmIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IobSk6CisgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fb2JqY2xhc3NfXywgbS5fX25hbWVfXykKK3JlZ2lzdGVyKHR5cGUobGlzdC5hcHBlbmQpLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQorcmVnaXN0ZXIodHlwZShpbnQuX19hZGRfXyksIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IpCisKKworZGVmIF9yZWR1Y2VfcGFydGlhbChwKToKKyAgICByZXR1cm4gX3JlYnVpbGRfcGFydGlhbCwgKHAuZnVuYywgcC5hcmdzLCBwLmtleXdvcmRzIG9yIHt9KQorZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgorICAgIHJldHVybiBmdW5jdG9vbHMucGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKK3JlZ2lzdGVyKGZ1bmN0b29scy5wYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCisKKyMKKyMgTWFrZSBzb2NrZXRzIHBpY2tsYWJsZQorIworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CisgICAgICAgIGZyb20gLnJlc291cmNlX3NoYXJlciBpbXBvcnQgRHVwU29ja2V0CisgICAgICAgIHJldHVybiBfcmVidWlsZF9zb2NrZXQsIChEdXBTb2NrZXQocyksKQorICAgIGRlZiBfcmVidWlsZF9zb2NrZXQoZHMpOgorICAgICAgICByZXR1cm4gZHMuZGV0YWNoKCkKKyAgICByZWdpc3Rlcihzb2NrZXQuc29ja2V0LCBfcmVkdWNlX3NvY2tldCkKKworZWxzZToKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CiAgICAgICAgIGRmID0gRHVwRmQocy5maWxlbm8oKSkKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCi0KLSAgICBkZWYgcmVidWlsZF9zb2NrZXQoZGYsIGZhbWlseSwgdHlwZSwgcHJvdG8pOgorICAgICAgICByZXR1cm4gX3JlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCisgICAgZGVmIF9yZWJ1aWxkX3NvY2tldChkZiwgZmFtaWx5LCB0eXBlLCBwcm90byk6CiAgICAgICAgIGZkID0gZGYuZGV0YWNoKCkKLSAgICAgICAgcyA9IHNvY2tldC5mcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG8pCi0gICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICByZXR1cm4gcwotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBkZiA9IER1cEZkKGNvbm4uZmlsZW5vKCkpCi0gICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkZiwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX2Nvbm5lY3Rpb24oZGYsIHJlYWRhYmxlLCB3cml0YWJsZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENvbm5lY3Rpb24KLSAgICAgICAgZmQgPSBkZi5kZXRhY2goKQotICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihmZCwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0jCi0jIFNlcnZlciB3aGljaCBzaGFyZXMgcmVnaXN0ZXJlZCByZXNvdXJjZXMgd2l0aCBjbGllbnRzCi0jCi0KLWNsYXNzIFJlc291cmNlU2hhcmVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9rZXkgPSAwCi0gICAgICAgIHNlbGYuX2NhY2hlID0ge30KLSAgICAgICAgc2VsZi5fb2xkX2xvY2tzID0gW10KLSAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBSZXNvdXJjZVNoYXJlci5fYWZ0ZXJmb3JrKQotCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHNlbmQsIGNsb3NlKToKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKLSAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCi0gICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIGFkZHJlc3MsIGtleSA9IGlkZW50Ci0gICAgICAgIGMgPSBDbGllbnQoYWRkcmVzcywgYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQotICAgICAgICByZXR1cm4gYwotCi0gICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgYyA9IENsaWVudChzZWxmLl9hZGRyZXNzLCBhdXRoa2V5PWN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCi0gICAgICAgICAgICAgICAgYy5zZW5kKE5vbmUpCi0gICAgICAgICAgICAgICAgYy5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkLmpvaW4odGltZW91dCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl90aHJlYWQuaXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm4oJ1Jlc291cmNlU2hhcmVyIHRocmVhZCBkaWQgbm90IHN0b3Agd2hlbiBhc2tlZCcpCi0gICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQotICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQotICAgICAgICAgICAgICAgIGZvciBrZXksIChzZW5kLCBjbG9zZSkgaW4gc2VsZi5fY2FjaGUuaXRlbXMoKToKLSAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLQotICAgIGRlZiBfYWZ0ZXJmb3JrKHNlbGYpOgotICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6Ci0gICAgICAgICAgICBjbG9zZSgpCi0gICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgIyBJZiBzZWxmLl9sb2NrIHdhcyBsb2NrZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZvcmssIGl0IG1heSBiZSBicm9rZW4KLSAgICAgICAgIyAtLSBzZWUgaXNzdWUgNjcyMS4gIFJlcGxhY2UgaXQgd2l0aG91dCBsZXR0aW5nIGl0IGJlIGdjJ2VkLgotICAgICAgICBzZWxmLl9vbGRfbG9ja3MuYXBwZW5kKHNlbGYuX2xvY2spCi0gICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKLSAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQotCi0gICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgTGlzdGVuZXIKLSAgICAgICAgYXNzZXJ0IHNlbGYuX2xpc3RlbmVyIGlzIE5vbmUKLSAgICAgICAgZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCi0gICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBzZWxmLl9hZGRyZXNzID0gc2VsZi5fbGlzdGVuZXIuYWRkcmVzcwotICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fc2VydmUpCi0gICAgICAgIHQuZGFlbW9uID0gVHJ1ZQotICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gdAotCi0gICAgZGVmIF9zZXJ2ZShzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdwdGhyZWFkX3NpZ21hc2snKToKLSAgICAgICAgICAgIHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19CTE9DSywgcmFuZ2UoMSwgc2lnbmFsLk5TSUcpKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNvbm4gPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQotICAgICAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdigpCi0gICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAga2V5LCBkZXN0aW5hdGlvbl9waWQgPSBtc2cKLSAgICAgICAgICAgICAgICBzZW5kLCBjbG9zZSA9IHNlbGYuX2NhY2hlLnBvcChrZXkpCi0gICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCi0gICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc19leGl0aW5nKCk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm5pbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAndGhyZWFkIGZvciBzaGFyaW5nIGhhbmRsZXMgcmFpc2VkIGV4Y2VwdGlvbiA6XG4nICsKLSAgICAgICAgICAgICAgICAgICAgICAgICctJyo3OSArICdcbicgKyB0cmFjZWJhY2suZm9ybWF0X2V4YygpICsgJy0nKjc5Ci0gICAgICAgICAgICAgICAgICAgICAgICApCi0KLXJlc291cmNlX3NoYXJlciA9IFJlc291cmNlU2hhcmVyKCkKKyAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywgZmlsZW5vPWZkKQorICAgIHJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIF9yZWR1Y2Vfc29ja2V0KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Jlc291cmNlX3NoYXJlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ2ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkKQEAgLTAsMCArMSwxNTggQEAKKyMKKyMgV2UgdXNlIGEgYmFja2dyb3VuZCB0aHJlYWQgZm9yIHNoYXJpbmcgZmRzIG9uIFVuaXgsIGFuZCBmb3Igc2hhcmluZyBzb2NrZXRzIG9uCisjIFdpbmRvd3MuCisjCisjIEEgY2xpZW50IHdoaWNoIHdhbnRzIHRvIHBpY2tsZSBhIHJlc291cmNlIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSByZXNvdXJjZQorIyBzaGFyZXIgYW5kIGdldHMgYW4gaWRlbnRpZmllciBpbiByZXR1cm4uICBUaGUgdW5waWNrbGluZyBwcm9jZXNzIHdpbGwgY29ubmVjdAorIyB0byB0aGUgcmVzb3VyY2Ugc2hhcmVyLCBzZW5kcyB0aGUgaWRlbnRpZmllciBhbmQgaXRzIHBpZCwgYW5kIHRoZW4gcmVjZWl2ZXMKKyMgdGhlIHJlc291cmNlLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ3N0b3AnXQorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIF9fYWxsX18gKz0gWydEdXBTb2NrZXQnXQorCisgICAgY2xhc3MgRHVwU29ja2V0KG9iamVjdCk6CisgICAgICAgICcnJ1BpY2tsYWJsZSB3cmFwcGVyIGZvciBhIHNvY2tldC4nJycKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgorICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQorICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBuZXdfc29jay5jbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBzb2NrZXQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJworICAgICAgICAgICAgd2l0aCBfcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKSBhcyBjb25uOgorICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKKworZWxzZToKKyAgICBfX2FsbF9fICs9IFsnRHVwRmQnXQorCisgICAgY2xhc3MgRHVwRmQob2JqZWN0KToKKyAgICAgICAgJycnV3JhcHBlciBmb3IgZmQgd2hpY2ggY2FuIGJlIHVzZWQgYXQgYW55IHRpbWUuJycnCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CisgICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5zZW5kX2hhbmRsZShjb25uLCBuZXdfZmQsIHBpZCkKKyAgICAgICAgICAgIGRlZiBjbG9zZSgpOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKG5ld19mZCkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBjbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBmZC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuJycnCisgICAgICAgICAgICB3aXRoIF9yZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpIGFzIGNvbm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVjdGlvbi5yZWN2X2hhbmRsZShjb25uKQorCisKK2NsYXNzIF9SZXNvdXJjZVNoYXJlcihvYmplY3QpOgorICAgICcnJ01hbmFnZXIgZm9yIHJlc291Y2VzIHVzaW5nIGJhY2tncm91bmQgdGhyZWFkLicnJworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fa2V5ID0gMAorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX29sZF9sb2NrcyA9IFtdCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQorICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgIHV0aWwucmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfUmVzb3VyY2VTaGFyZXIuX2FmdGVyZm9yaykKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBzZW5kLCBjbG9zZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIHJlc291cmNlLCByZXR1cm5pbmcgYW4gaWRlbnRpZmllci4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCisgICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQorICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKKyAgICAgICAgJycnUmV0dXJuIGNvbm5lY3Rpb24gZnJvbSB3aGljaCB0byByZWNlaXZlIGlkZW50aWZpZWQgcmVzb3VyY2UuJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAorICAgICAgICBhZGRyZXNzLCBrZXkgPSBpZGVudAorICAgICAgICBjID0gQ2xpZW50KGFkZHJlc3MsIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQorICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQorICAgICAgICByZXR1cm4gYworCisgICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgJycnU3RvcCB0aGUgYmFja2dyb3VuZCB0aHJlYWQgYW5kIGNsZWFyIHJlZ2lzdGVyZWQgcmVzb3VyY2VzLicnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDbGllbnQKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjID0gQ2xpZW50KHNlbGYuX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKKyAgICAgICAgICAgICAgICBjLnNlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQuam9pbih0aW1lb3V0KQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICB1dGlsLnN1Yl93YXJuaW5nKCdfUmVzb3VyY2VTaGFyZXIgdGhyZWFkIGRpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCBzdG9wIHdoZW4gYXNrZWQnKQorICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisKKyAgICBkZWYgX2FmdGVyZm9yayhzZWxmKToKKyAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgorICAgICAgICAgICAgY2xvc2UoKQorICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisgICAgICAgICMgSWYgc2VsZi5fbG9jayB3YXMgbG9ja2VkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLCBpdCBtYXkgYmUgYnJva2VuCisgICAgICAgICMgLS0gc2VlIGlzc3VlIDY3MjEuICBSZXBsYWNlIGl0IHdpdGhvdXQgbGV0dGluZyBpdCBiZSBnYydlZC4KKyAgICAgICAgc2VsZi5fb2xkX2xvY2tzLmFwcGVuZChzZWxmLl9sb2NrKQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IExpc3RlbmVyCisgICAgICAgIGFzc2VydCBzZWxmLl9saXN0ZW5lciBpcyBOb25lCisgICAgICAgIHV0aWwuZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBzZWxmLl9saXN0ZW5lci5hZGRyZXNzCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9zZXJ2ZSkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzZWxmLl90aHJlYWQgPSB0CisKKyAgICBkZWYgX3NlcnZlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ3B0aHJlYWRfc2lnbWFzaycpOgorICAgICAgICAgICAgc2lnbmFsLnB0aHJlYWRfc2lnbWFzayhzaWduYWwuU0lHX0JMT0NLLCByYW5nZSgxLCBzaWduYWwuTlNJRykpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKSBhcyBjb25uOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YoKQorICAgICAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGtleSwgZGVzdGluYXRpb25fcGlkID0gbXNnCisgICAgICAgICAgICAgICAgICAgIHNlbmQsIGNsb3NlID0gc2VsZi5fY2FjaGUucG9wKGtleSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaWYgbm90IHV0aWwuaXNfZXhpdGluZygpOgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisKKworX3Jlc291cmNlX3NoYXJlciA9IF9SZXNvdXJjZVNoYXJlcigpCitzdG9wID0gX3Jlc291cmNlX3NoYXJlci5zdG9wCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZV90cmFja2VyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIyYjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpAQCAtMCwwICsxLDE0NSBAQAorIworIyBPbiBVbml4IHdlIHJ1biBhIHNlcnZlciBwcm9jZXNzIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHVubGlua2VkCisjIHNlbWFwaG9yZXMuIFRoZSBzZXJ2ZXIgaWdub3JlcyBTSUdJTlQgYW5kIFNJR1RFUk0gYW5kIHJlYWRzIGZyb20gYQorIyBwaXBlLiAgRXZlcnkgb3RoZXIgcHJvY2VzcyBvZiB0aGUgcHJvZ3JhbSBoYXMgYSBjb3B5IG9mIHRoZSB3cml0YWJsZQorIyBlbmQgb2YgdGhlIHBpcGUsIHNvIHdlIGdldCBFT0Ygd2hlbiBhbGwgb3RoZXIgcHJvY2Vzc2VzIGhhdmUgZXhpdGVkLgorIyBUaGVuIHRoZSBzZXJ2ZXIgcHJvY2VzcyB1bmxpbmtzIGFueSByZW1haW5pbmcgc2VtYXBob3JlIG5hbWVzLgorIworIyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBzeXN0ZW0gb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgbnVtYmVyCisjIG9mIG5hbWVkIHNlbWFwaG9yZXMsIGFuZCB0aGV5IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB0aWxsCisjIHRoZSBuZXh0IHJlYm9vdC4gIFdpdGhvdXQgdGhpcyBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzLCAia2lsbGFsbAorIyBweXRob24iIHdvdWxkIHByb2JhYmx5IGxlYXZlIHVubGlua2VkIHNlbWFwaG9yZXMuCisjCisKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCisKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKKworX19hbGxfXyA9IFsnZW5zdXJlX3J1bm5pbmcnLCAncmVnaXN0ZXInLCAndW5yZWdpc3RlciddCisKKworY2xhc3MgU2VtYXBob3JlVHJhY2tlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl9mZCA9IE5vbmUKKworICAgIGRlZiBnZXRmZChzZWxmKToKKyAgICAgICAgc2VsZi5lbnN1cmVfcnVubmluZygpCisgICAgICAgIHJldHVybiBzZWxmLl9mZAorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgcnVuIGZyb20gYW55IHByb2Nlc3MuICBVc3VhbGx5IGEgY2hpbGQgcHJvY2VzcyB3aWxsIHVzZQorICAgICAgICB0aGUgc2VtYXBob3JlIGNyZWF0ZWQgYnkgaXRzIHBhcmVudC4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRzX3RvX3Bhc3MuYXBwZW5kKHN5cy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGNtZCA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgbWFpbjttYWluKCVkKScKKyAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcy5hcHBlbmQocikKKyAgICAgICAgICAgICAgICAjIHByb2Nlc3Mgd2lsbCBvdXQgbGl2ZSB1cywgc28gbm8gbmVlZCB0byB3YWl0IG9uIHBpZAorICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICBhcmdzID0gW2V4ZV0gKyB1dGlsLl9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQorICAgICAgICAgICAgICAgIGFyZ3MgKz0gWyctYycsIGNtZCAlIHJdCisgICAgICAgICAgICAgICAgdXRpbC5zcGF3bnZfcGFzc2ZkcyhleGUsIGFyZ3MsIGZkc190b19wYXNzKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZmQgPSB3CisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgbmFtZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1JFR0lTVEVSJywgbmFtZSkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIG5hbWUpOgorICAgICAgICAnJydVbnJlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1VOUkVHSVNURVInLCBuYW1lKQorCisgICAgZGVmIF9zZW5kKHNlbGYsIGNtZCwgbmFtZSk6CisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBtc2cgPSAnezB9OnsxfVxuJy5mb3JtYXQoY21kLCBuYW1lKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgaWYgbGVuKG5hbWUpID4gNTEyOgorICAgICAgICAgICAgIyBwb3NpeCBndWFyYW50ZWVzIHRoYXQgd3JpdGVzIHRvIGEgcGlwZSBvZiBsZXNzIHRoYW4gUElQRV9CVUYKKyAgICAgICAgICAgICMgYnl0ZXMgYXJlIGF0b21pYywgYW5kIHRoYXQgUElQRV9CVUYgPj0gNTEyCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduYW1lIHRvbyBsb25nJykKKyAgICAgICAgbmJ5dGVzID0gb3Mud3JpdGUoc2VsZi5fZmQsIG1zZykKKyAgICAgICAgYXNzZXJ0IG5ieXRlcyA9PSBsZW4obXNnKQorCisKK19zZW1hcGhvcmVfdHJhY2tlciA9IFNlbWFwaG9yZVRyYWNrZXIoKQorZW5zdXJlX3J1bm5pbmcgPSBfc2VtYXBob3JlX3RyYWNrZXIuZW5zdXJlX3J1bm5pbmcKK3JlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnJlZ2lzdGVyCit1bnJlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnVucmVnaXN0ZXIKK2dldGZkID0gX3NlbWFwaG9yZV90cmFja2VyLmdldGZkCisKKworZGVmIG1haW4oZmQpOgorICAgICcnJ1J1biBzZW1hcGhvcmUgdHJhY2tlci4nJycKKyAgICAjIHByb3RlY3QgdGhlIHByb2Nlc3MgZnJvbSBeQyBhbmQgImtpbGxhbGwgcHl0aG9uIiBldGMKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ25hbC5TSUdfSUdOKQorCisgICAgZm9yIGYgaW4gKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgY2FjaGUgPSBzZXQoKQorICAgIHRyeToKKyAgICAgICAgIyBrZWVwIHRyYWNrIG9mIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIHNlbWFwaG9yZXMKKyAgICAgICAgd2l0aCBvcGVuKGZkLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNtZCwgbmFtZSA9IGxpbmUuc3RyaXAoKS5zcGxpdChiJzonKQorICAgICAgICAgICAgICAgICAgICBpZiBjbWQgPT0gYidSRUdJU1RFUic6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5hZGQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gYidVTlJFR0lTVEVSJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd1bnJlY29nbml6ZWQgY29tbWFuZCAlcicgJSBjbWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgIyBhbGwgcHJvY2Vzc2VzIGhhdmUgdGVybWluYXRlZDsgY2xlYW51cCBhbnkgcmVtYWluaW5nIHNlbWFwaG9yZXMKKyAgICAgICAgaWYgY2FjaGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6IFRoZXJlIGFwcGVhciB0byBiZSAlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGVha2VkIHNlbWFwaG9yZXMgdG8gY2xlYW4gdXAgYXQgc2h1dGRvd24nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihjYWNoZSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIG5hbWUgaW4gY2FjaGU6CisgICAgICAgICAgICAjIEZvciBzb21lIHJlYXNvbiB0aGUgcHJvY2VzcyB3aGljaCBjcmVhdGVkIGFuZCByZWdpc3RlcmVkIHRoaXMKKyAgICAgICAgICAgICMgc2VtYXBob3JlIGhhcyBmYWlsZWQgdG8gdW5yZWdpc3RlciBpdC4gUHJlc3VtYWJseSBpdCBoYXMgZGllZC4KKyAgICAgICAgICAgICMgV2UgdGhlcmVmb3JlIHVubGluayBpdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6ICVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKaW5kZXggYTM1OGVkNC4uMGMxNzgyNSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKQEAgLTEwLDggKzEwLDExIEBACiBpbXBvcnQgY3R5cGVzCiBpbXBvcnQgd2Vha3JlZgogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgaGVhcCwgUkxvY2sKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZywgRm9ya2luZ1BpY2tsZXIKK2Zyb20gLiBpbXBvcnQgaGVhcAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dAorCitmcm9tIC5jb250ZXh0IGltcG9ydCBhc3NlcnRfc3Bhd25pbmcKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKIAogX19hbGxfXyA9IFsnUmF3VmFsdWUnLCAnUmF3QXJyYXknLCAnVmFsdWUnLCAnQXJyYXknLCAnY29weScsICdzeW5jaHJvbml6ZWQnXQogCkBAIC02Myw3ICs2Niw3IEBACiAgICAgICAgIHJlc3VsdC5fX2luaXRfXygqc2l6ZV9vcl9pbml0aWFsaXplcikKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi1kZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSk6CitkZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFZhbHVlCiAgICAgJycnCkBAIC03MSwxMiArNzQsMTMgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgorZGVmIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFJhd0FycmF5CiAgICAgJycnCkBAIC04NCwyNSArODgsMjcgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKIGRlZiBjb3B5KG9iaik6CiAgICAgbmV3X29iaiA9IF9uZXdfdmFsdWUodHlwZShvYmopKQogICAgIGN0eXBlcy5wb2ludGVyKG5ld19vYmopWzBdID0gb2JqCiAgICAgcmV0dXJuIG5ld19vYmoKIAotZGVmIHN5bmNocm9uaXplZChvYmosIGxvY2s9Tm9uZSk6CitkZWYgc3luY2hyb25pemVkKG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKG9iaiwgU3luY2hyb25pemVkQmFzZSksICdvYmplY3QgYWxyZWFkeSBzeW5jaHJvbml6ZWQnCisgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KCkKIAogICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBjdHlwZXMuX1NpbXBsZUNEYXRhKToKLSAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWQob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgY3R5cGVzLkFycmF5KToKICAgICAgICAgaWYgb2JqLl90eXBlXyBpcyBjdHlwZXMuY19jaGFyOgotICAgICAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZFN0cmluZyhvYmosIGxvY2spCi0gICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWRBcnJheShvYmosIGxvY2spCisgICAgICAgICAgICByZXR1cm4gU3luY2hyb25pemVkU3RyaW5nKG9iaiwgbG9jaywgY3R4KQorICAgICAgICByZXR1cm4gU3luY2hyb25pemVkQXJyYXkob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxzZToKICAgICAgICAgY2xzID0gdHlwZShvYmopCiAgICAgICAgIHRyeToKQEAgLTExMiw3ICsxMTgsNyBAQAogICAgICAgICAgICAgZCA9IGRpY3QoKG5hbWUsIG1ha2VfcHJvcGVydHkobmFtZSkpIGZvciBuYW1lIGluIG5hbWVzKQogICAgICAgICAgICAgY2xhc3NuYW1lID0gJ1N5bmNocm9uaXplZCcgKyBjbHMuX19uYW1lX18KICAgICAgICAgICAgIHNjbHMgPSBjbGFzc19jYWNoZVtjbHNdID0gdHlwZShjbGFzc25hbWUsIChTeW5jaHJvbml6ZWRCYXNlLCksIGQpCi0gICAgICAgIHJldHVybiBzY2xzKG9iaiwgbG9jaykKKyAgICAgICAgcmV0dXJuIHNjbHMob2JqLCBsb2NrLCBjdHgpCiAKICMKICMgRnVuY3Rpb25zIGZvciBwaWNrbGluZy91bnBpY2tsaW5nCkBAIC0xNzIsOSArMTc4LDEzIEBACiAKIGNsYXNzIFN5bmNocm9uaXplZEJhc2Uob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGxvY2s9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgICAgIHNlbGYuX29iaiA9IG9iagotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCisgICAgICAgIGlmIGxvY2s6CisgICAgICAgICAgICBzZWxmLl9sb2NrID0gbG9jaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KGZvcmNlPVRydWUpCisgICAgICAgICAgICBzZWxmLl9sb2NrID0gY3R4LlJMb2NrKCkKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fbG9jay5hY3F1aXJlCiAgICAgICAgIHNlbGYucmVsZWFzZSA9IHNlbGYuX2xvY2sucmVsZWFzZQogCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTY3NDU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpAQCAtMCwwICsxLDI1OSBAQAorIworIyBDb2RlIHVzZWQgdG8gc3RhcnQgcHJvY2Vzc2VzIHdoZW4gdXNpbmcgdGhlIHNwYXduIG9yIGZvcmtzZXJ2ZXIKKyMgc3RhcnQgbWV0aG9kcy4KKyMKKyMgbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5CisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBzeXMKKworZnJvbSAuIGltcG9ydCBnZXRfc3RhcnRfbWV0aG9kLCBzZXRfc3RhcnRfbWV0aG9kCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydfbWFpbicsICdmcmVlemVfc3VwcG9ydCcsICdzZXRfZXhlY3V0YWJsZScsICdnZXRfZXhlY3V0YWJsZScsCisgICAgICAgICAgICdnZXRfcHJlcGFyYXRpb25fZGF0YScsICdnZXRfY29tbWFuZF9saW5lJywgJ2ltcG9ydF9tYWluX3BhdGgnXQorCisjCisjIF9weXRob25fZXhlIGlzIHRoZSBhc3N1bWVkIHBhdGggdG8gdGhlIHB5dGhvbiBleGVjdXRhYmxlLgorIyBQZW9wbGUgZW1iZWRkaW5nIFB5dGhvbiB3YW50IHRvIG1vZGlmeSBpdC4KKyMKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgV0lORVhFID0gRmFsc2UKKyAgICBXSU5TRVJWSUNFID0gRmFsc2UKK2Vsc2U6CisgICAgV0lORVhFID0gKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKSkKKyAgICBXSU5TRVJWSUNFID0gc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgicHl0aG9uc2VydmljZS5leGUiKQorCitpZiBXSU5TRVJWSUNFOgorICAgIF9weXRob25fZXhlID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgJ3B5dGhvbi5leGUnKQorZWxzZToKKyAgICBfcHl0aG9uX2V4ZSA9IHN5cy5leGVjdXRhYmxlCisKK2RlZiBzZXRfZXhlY3V0YWJsZShleGUpOgorICAgIGdsb2JhbCBfcHl0aG9uX2V4ZQorICAgIF9weXRob25fZXhlID0gZXhlCisKK2RlZiBnZXRfZXhlY3V0YWJsZSgpOgorICAgIHJldHVybiBfcHl0aG9uX2V4ZQorCisjCisjCisjCisKK2RlZiBpc19mb3JraW5nKGFyZ3YpOgorICAgICcnJworICAgIFJldHVybiB3aGV0aGVyIGNvbW1hbmRsaW5lIGluZGljYXRlcyB3ZSBhcmUgZm9ya2luZworICAgICcnJworICAgIGlmIGxlbihhcmd2KSA+PSAyIGFuZCBhcmd2WzFdID09ICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJzoKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgZnJlZXplX3N1cHBvcnQoKToKKyAgICAnJycKKyAgICBSdW4gY29kZSBmb3IgcHJvY2VzcyBvYmplY3QgaWYgdGhpcyBpbiBub3QgdGhlIG1haW4gcHJvY2VzcworICAgICcnJworICAgIGlmIGlzX2Zvcmtpbmcoc3lzLmFyZ3YpOgorICAgICAgICBtYWluKCkKKyAgICAgICAgc3lzLmV4aXQoKQorCisKK2RlZiBnZXRfY29tbWFuZF9saW5lKCoqa3dkcyk6CisgICAgJycnCisgICAgUmV0dXJucyBwcmVmaXggb2YgY29tbWFuZCBsaW5lIHVzZWQgZm9yIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcworICAgICcnJworICAgIGlmIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgorICAgICAgICByZXR1cm4gW3N5cy5leGVjdXRhYmxlLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCisgICAgZWxzZToKKyAgICAgICAgcHJvZyA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zcGF3biBpbXBvcnQgc3Bhd25fbWFpbjsgc3Bhd25fbWFpbiglcyknCisgICAgICAgIHByb2cgJT0gJywgJy5qb2luKCclcz0lcicgJSBpdGVtIGZvciBpdGVtIGluIGt3ZHMuaXRlbXMoKSkKKyAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisgICAgICAgIHJldHVybiBbX3B5dGhvbl9leGVdICsgb3B0cyArIFsnLWMnLCBwcm9nLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCisKKworZGVmIHNwYXduX21haW4ocGlwZV9oYW5kbGUsIHBhcmVudF9waWQ9Tm9uZSwgdHJhY2tlcl9mZD1Ob25lKToKKyAgICAnJycKKyAgICBSdW4gY29kZSBzcGVjaWZlZCBieSBkYXRhIHJlY2VpdmVkIG92ZXIgcGlwZQorICAgICcnJworICAgIGFzc2VydCBpc19mb3JraW5nKHN5cy5hcmd2KQorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIGZyb20gLnJlZHVjdGlvbiBpbXBvcnQgc3RlYWxfaGFuZGxlCisgICAgICAgIG5ld19oYW5kbGUgPSBzdGVhbF9oYW5kbGUocGFyZW50X3BpZCwgcGlwZV9oYW5kbGUpCisgICAgICAgIGZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKG5ld19oYW5kbGUsIG9zLk9fUkRPTkxZKQorICAgIGVsc2U6CisgICAgICAgIGZyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKKyAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHRyYWNrZXJfZmQKKyAgICAgICAgZmQgPSBwaXBlX2hhbmRsZQorICAgIGV4aXRjb2RlID0gX21haW4oZmQpCisgICAgc3lzLmV4aXQoZXhpdGNvZGUpCisKKworZGVmIF9tYWluKGZkKToKKyAgICB3aXRoIG9zLmZkb3BlbihmZCwgJ3JiJywgY2xvc2VmZD1UcnVlKSBhcyBmcm9tX3BhcmVudDoKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJlcGFyYXRpb25fZGF0YSA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQorICAgICAgICAgICAgc2VsZiA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcKKyAgICByZXR1cm4gc2VsZi5fYm9vdHN0cmFwKCkKKworCitkZWYgX2NoZWNrX25vdF9pbXBvcnRpbmdfbWFpbigpOgorICAgIGlmIGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJycnCisgICAgICAgIEFuIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBzdGFydCBhIG5ldyBwcm9jZXNzIGJlZm9yZSB0aGUKKyAgICAgICAgY3VycmVudCBwcm9jZXNzIGhhcyBmaW5pc2hlZCBpdHMgYm9vdHN0cmFwcGluZyBwaGFzZS4KKworICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBub3QgdXNpbmcgZm9yayB0byBzdGFydCB5b3VyCisgICAgICAgIGNoaWxkIHByb2Nlc3NlcyBhbmQgeW91IGhhdmUgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tCisgICAgICAgIGluIHRoZSBtYWluIG1vZHVsZToKKworICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgICAgICBmcmVlemVfc3VwcG9ydCgpCisgICAgICAgICAgICAgICAgLi4uCisKKyAgICAgICAgVGhlICJmcmVlemVfc3VwcG9ydCgpIiBsaW5lIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBwcm9ncmFtCisgICAgICAgIGlzIG5vdCBnb2luZyB0byBiZSBmcm96ZW4gdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLicnJykKKworCitkZWYgZ2V0X3ByZXBhcmF0aW9uX2RhdGEobmFtZSk6CisgICAgJycnCisgICAgUmV0dXJuIGluZm8gYWJvdXQgcGFyZW50IG5lZWRlZCBieSBjaGlsZCB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAorICAgICcnJworICAgIF9jaGVja19ub3RfaW1wb3J0aW5nX21haW4oKQorICAgIGQgPSBkaWN0KAorICAgICAgICBsb2dfdG9fc3RkZXJyPXV0aWwuX2xvZ190b19zdGRlcnIsCisgICAgICAgIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5LAorICAgICAgICApCisKKyAgICBpZiB1dGlsLl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gdXRpbC5fbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKKworICAgIHN5c19wYXRoPXN5cy5wYXRoLmNvcHkoKQorICAgIHRyeToKKyAgICAgICAgaSA9IHN5c19wYXRoLmluZGV4KCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgc3lzX3BhdGhbaV0gPSBwcm9jZXNzLk9SSUdJTkFMX0RJUgorCisgICAgZC51cGRhdGUoCisgICAgICAgIG5hbWU9bmFtZSwKKyAgICAgICAgc3lzX3BhdGg9c3lzX3BhdGgsCisgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAorICAgICAgICBvcmlnX2Rpcj1wcm9jZXNzLk9SSUdJTkFMX0RJUiwKKyAgICAgICAgZGlyPW9zLmdldGN3ZCgpLAorICAgICAgICBzdGFydF9tZXRob2Q9Z2V0X3N0YXJ0X21ldGhvZCgpLAorICAgICAgICApCisKKyAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJyBvciAobm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0UpOgorICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAnX19maWxlX18nLCBOb25lKQorICAgICAgICBpZiBub3QgbWFpbl9wYXRoIGFuZCBzeXMuYXJndlswXSBub3QgaW4gKCcnLCAnLWMnKToKKyAgICAgICAgICAgIG1haW5fcGF0aCA9IHN5cy5hcmd2WzBdCisgICAgICAgIGlmIG1haW5fcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIChub3Qgb3MucGF0aC5pc2FicyhtYWluX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgICAgIG1haW5fcGF0aCA9IG9zLnBhdGguam9pbihwcm9jZXNzLk9SSUdJTkFMX0RJUiwgbWFpbl9wYXRoKQorICAgICAgICAgICAgZFsnbWFpbl9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKKworICAgIHJldHVybiBkCisKKyMKKyMgUHJlcGFyZSBjdXJyZW50IHByb2Nlc3MKKyMKKworb2xkX21haW5fbW9kdWxlcyA9IFtdCisKK2RlZiBwcmVwYXJlKGRhdGEpOgorICAgICcnJworICAgIFRyeSB0byBnZXQgY3VycmVudCBwcm9jZXNzIHJlYWR5IHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgaWYgJ25hbWUnIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQorCisgICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSA9IGRhdGFbJ2F1dGhrZXknXQorCisgICAgaWYgJ2xvZ190b19zdGRlcnInIGluIGRhdGEgYW5kIGRhdGFbJ2xvZ190b19zdGRlcnInXToKKyAgICAgICAgdXRpbC5sb2dfdG9fc3RkZXJyKCkKKworICAgIGlmICdsb2dfbGV2ZWwnIGluIGRhdGE6CisgICAgICAgIHV0aWwuZ2V0X2xvZ2dlcigpLnNldExldmVsKGRhdGFbJ2xvZ19sZXZlbCddKQorCisgICAgaWYgJ3N5c19wYXRoJyBpbiBkYXRhOgorICAgICAgICBzeXMucGF0aCA9IGRhdGFbJ3N5c19wYXRoJ10KKworICAgIGlmICdzeXNfYXJndicgaW4gZGF0YToKKyAgICAgICAgc3lzLmFyZ3YgPSBkYXRhWydzeXNfYXJndiddCisKKyAgICBpZiAnZGlyJyBpbiBkYXRhOgorICAgICAgICBvcy5jaGRpcihkYXRhWydkaXInXSkKKworICAgIGlmICdvcmlnX2RpcicgaW4gZGF0YToKKyAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgPSBkYXRhWydvcmlnX2RpciddCisKKyAgICBpZiAnc3RhcnRfbWV0aG9kJyBpbiBkYXRhOgorICAgICAgICBzZXRfc3RhcnRfbWV0aG9kKGRhdGFbJ3N0YXJ0X21ldGhvZCddKQorCisgICAgaWYgJ21haW5fcGF0aCcgaW4gZGF0YToKKyAgICAgICAgaW1wb3J0X21haW5fcGF0aChkYXRhWydtYWluX3BhdGgnXSkKKworCitkZWYgaW1wb3J0X21haW5fcGF0aChtYWluX3BhdGgpOgorICAgICcnJworICAgIFNldCBzeXMubW9kdWxlc1snX19tYWluX18nXSB0byBtb2R1bGUgYXQgbWFpbl9wYXRoCisgICAgJycnCisgICAgIyBYWFggKG5jb2dobGFuKTogVGhlIGZvbGxvd2luZyBjb2RlIG1ha2VzIHNldmVyYWwgYm9ndXMKKyAgICAjIGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gX19maWxlX18KKyAgICAjIGFuZCBhIG1vZHVsZSdzIHJlYWwgbmFtZS4gU2VlIFBFUCAzMDIgYW5kIGlzc3VlICMxMDg0NQorICAgIGlmIGdldGF0dHIoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10sICdfX2ZpbGVfXycsIE5vbmUpID09IG1haW5fcGF0aDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBtYWluX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKSlbMF0KKyAgICBpZiBtYWluX25hbWUgPT0gJ19faW5pdF9fJzoKKyAgICAgICAgbWFpbl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSkKKworICAgIGlmIG1haW5fbmFtZSA9PSAnX19tYWluX18nOgorICAgICAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisgICAgICAgIG1haW5fbW9kdWxlLl9fZmlsZV9fID0gbWFpbl9wYXRoCisgICAgZWxpZiBtYWluX25hbWUgIT0gJ2lweXRob24nOgorICAgICAgICAjIE1haW4gbW9kdWxlcyBub3QgYWN0dWFsbHkgY2FsbGVkIF9fbWFpbl9fLnB5IG1heQorICAgICAgICAjIGNvbnRhaW4gYWRkaXRpb25hbCBjb2RlIHRoYXQgc2hvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkCisgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKKyAgICAgICAgaW1wb3J0IHR5cGVzCisKKyAgICAgICAgaWYgbWFpbl9wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBkaXJzID0gTm9uZQorICAgICAgICBlbGlmIG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKS5zdGFydHN3aXRoKCdfX2luaXRfXy5weScpOgorICAgICAgICAgICAgZGlycyA9IFtvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlycyA9IFtvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKV0KKworICAgICAgICBhc3NlcnQgbWFpbl9uYW1lIG5vdCBpbiBzeXMubW9kdWxlcywgbWFpbl9uYW1lCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcCgnX19tcF9tYWluX18nLCBOb25lKQorICAgICAgICAjIFdlIHNob3VsZCBub3QgdHJ5IHRvIGxvYWQgX19tYWluX18KKyAgICAgICAgIyBzaW5jZSB0aGF0IHdvdWxkIGV4ZWN1dGUgJ2lmIF9fbmFtZV9fID09ICJfX21haW5fXyInCisgICAgICAgICMgY2xhdXNlcywgcG90ZW50aWFsbHkgY2F1c2luZyBhIHBzdWVkbyBmb3JrIGJvbWIuCisgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihtYWluX25hbWUsIHBhdGg9ZGlycykKKyAgICAgICAgbWFpbl9tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG1haW5fbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzKG1haW5fbW9kdWxlKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6ICAjIGluaXRfbW9kdWxlX2F0dHJzIGlzIG9wdGlvbmFsCisgICAgICAgICAgICBwYXNzCisgICAgICAgIG1haW5fbW9kdWxlLl9fbmFtZV9fID0gJ19fbXBfbWFpbl9fJworICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKG1haW5fbmFtZSkKKyAgICAgICAgZXhlYyhjb2RlLCBtYWluX21vZHVsZS5fX2RpY3RfXykKKworICAgICAgICBvbGRfbWFpbl9tb2R1bGVzLmFwcGVuZChzeXMubW9kdWxlc1snX19tYWluX18nXSkKKyAgICAgICAgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gPSBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IG1haW5fbW9kdWxlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQppbmRleCAwZmFjYTc4Li44MmMzMGEyIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKQEAgLTExLDIwICsxMSwyNCBAQAogICAgICdMb2NrJywgJ1JMb2NrJywgJ1NlbWFwaG9yZScsICdCb3VuZGVkU2VtYXBob3JlJywgJ0NvbmRpdGlvbicsICdFdmVudCcKICAgICBdCiAKK2ltcG9ydCBvcwogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHN5cwotCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IHJlZ2lzdGVyX2FmdGVyX2ZvcmssIGRlYnVnCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBhc3NlcnRfc3Bhd25pbmcsIFBvcGVuCisKIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyBfdGltZQogCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCB1dGlsCisKICMgVHJ5IHRvIGltcG9ydCB0aGUgbXAuc3luY2hyb25pemUgbW9kdWxlIGNsZWFubHksIGlmIGl0IGZhaWxzCiAjIHJhaXNlIEltcG9ydEVycm9yIGZvciBwbGF0Zm9ybXMgbGFja2luZyBhIHdvcmtpbmcgc2VtX29wZW4gaW1wbGVtZW50YXRpb24uCiAjIFNlZSBpc3N1ZSAzNzcwCiB0cnk6Ci0gICAgZnJvbSBfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBTZW1Mb2NrCisgICAgZnJvbSBfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBTZW1Mb2NrLCBzZW1fdW5saW5rCiBleGNlcHQgKEltcG9ydEVycm9yKToKICAgICByYWlzZSBJbXBvcnRFcnJvcigiVGhpcyBwbGF0Zm9ybSBsYWNrcyBhIGZ1bmN0aW9uaW5nIHNlbV9vcGVuIiArCiAgICAgICAgICAgICAgICAgICAgICAgIiBpbXBsZW1lbnRhdGlvbiwgdGhlcmVmb3JlLCB0aGUgcmVxdWlyZWQiICsKQEAgLTQ0LDE1ICs0OCw0NiBAQAogCiBjbGFzcyBTZW1Mb2NrKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwga2luZCwgdmFsdWUsIG1heHZhbHVlKToKLSAgICAgICAgc2wgPSBzZWxmLl9zZW1sb2NrID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrKGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSkKLSAgICAgICAgZGVidWcoJ2NyZWF0ZWQgc2VtbG9jayB3aXRoIGhhbmRsZSAlcycgJSBzbC5oYW5kbGUpCisgICAgX3JhbmQgPSB0ZW1wZmlsZS5fUmFuZG9tTmFtZVNlcXVlbmNlKCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBraW5kLCB2YWx1ZSwgbWF4dmFsdWUsICosIGN0eCk6CisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGN0eCA9IGN0eC5nZXRfY29udGV4dCgpCisgICAgICAgIHVubGlua19ub3cgPSBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBjdHguX25hbWUgPT0gJ2ZvcmsnCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2wgPSBzZWxmLl9zZW1sb2NrID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrKAorICAgICAgICAgICAgICAgICAgICBraW5kLCB2YWx1ZSwgbWF4dmFsdWUsIHNlbGYuX21ha2VfbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICB1bmxpbmtfbm93KQorICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IoJ2Nhbm5vdCBmaW5kIG5hbWUgZm9yIHNlbWFwaG9yZScpCisKKyAgICAgICAgdXRpbC5kZWJ1ZygnY3JlYXRlZCBzZW1sb2NrIHdpdGggaGFuZGxlICVzJyAlIHNsLmhhbmRsZSkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKICAgICAgICAgICAgIGRlZiBfYWZ0ZXJfZm9yayhvYmopOgogICAgICAgICAgICAgICAgIG9iai5fc2VtbG9jay5fYWZ0ZXJfZm9yaygpCi0gICAgICAgICAgICByZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIF9hZnRlcl9mb3JrKQorICAgICAgICAgICAgdXRpbC5yZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIF9hZnRlcl9mb3JrKQorCisgICAgICAgIGlmIHNlbGYuX3NlbWxvY2submFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgV2Ugb25seSBnZXQgaGVyZSBpZiB3ZSBhcmUgb24gVW5peCB3aXRoIGZvcmtpbmcKKyAgICAgICAgICAgICMgZGlzYWJsZWQuICBXaGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgb3IgdGhlCisgICAgICAgICAgICAjIHByb2Nlc3Mgc2h1dHMgZG93biB3ZSB1bmxpbmsgdGhlIHNlbWFwaG9yZSBuYW1lCisgICAgICAgICAgICBmcm9tIC5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgcmVnaXN0ZXIKKyAgICAgICAgICAgIHJlZ2lzdGVyKHNlbGYuX3NlbWxvY2submFtZSkKKyAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgU2VtTG9jay5fY2xlYW51cCwgKHNlbGYuX3NlbWxvY2submFtZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0cHJpb3JpdHk9MCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2NsZWFudXAobmFtZSk6CisgICAgICAgIGZyb20gLnNlbWFwaG9yZV90cmFja2VyIGltcG9ydCB1bnJlZ2lzdGVyCisgICAgICAgIHNlbV91bmxpbmsobmFtZSkKKyAgICAgICAgdW5yZWdpc3RlcihuYW1lKQogCiAgICAgZGVmIF9tYWtlX21ldGhvZHMoc2VsZik6CiAgICAgICAgIHNlbGYuYWNxdWlyZSA9IHNlbGYuX3NlbWxvY2suYWNxdWlyZQpAQCAtNjUsMjMgKzEwMCwzMiBAQAogICAgICAgICByZXR1cm4gc2VsZi5fc2VtbG9jay5fX2V4aXRfXygqYXJncykKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICBzbCA9IHNlbGYuX3NlbWxvY2sKLSAgICAgICAgcmV0dXJuIChQb3Blbi5kdXBsaWNhdGVfZm9yX2NoaWxkKHNsLmhhbmRsZSksIHNsLmtpbmQsIHNsLm1heHZhbHVlKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIGggPSBjb250ZXh0LmdldF9zcGF3bmluZ19wb3BlbigpLmR1cGxpY2F0ZV9mb3JfY2hpbGQoc2wuaGFuZGxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaCA9IHNsLmhhbmRsZQorICAgICAgICByZXR1cm4gKGgsIHNsLmtpbmQsIHNsLm1heHZhbHVlLCBzbC5uYW1lKQogCiAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CiAgICAgICAgIHNlbGYuX3NlbWxvY2sgPSBfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2suX3JlYnVpbGQoKnN0YXRlKQotICAgICAgICBkZWJ1ZygncmVjcmVhdGVkIGJsb2NrZXIgd2l0aCBoYW5kbGUgJXInICUgc3RhdGVbMF0pCisgICAgICAgIHV0aWwuZGVidWcoJ3JlY3JlYXRlZCBibG9ja2VyIHdpdGggaGFuZGxlICVyJyAlIHN0YXRlWzBdKQogICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfbWFrZV9uYW1lKCk6CisgICAgICAgIHJldHVybiAnLyVzLSVzJyAlIChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3NlbXByZWZpeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChTZW1Mb2NrLl9yYW5kKSkKKwogIwogIyBTZW1hcGhvcmUKICMKIAogY2xhc3MgU2VtYXBob3JlKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgdmFsdWUsIFNFTV9WQUxVRV9NQVgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgU0VNX1ZBTFVFX01BWCwgY3R4PWN0eCkKIAogICAgIGRlZiBnZXRfdmFsdWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9zZW1sb2NrLl9nZXRfdmFsdWUoKQpAQCAtOTksOCArMTQzLDggQEAKIAogY2xhc3MgQm91bmRlZFNlbWFwaG9yZShTZW1hcGhvcmUpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgdmFsdWUsIHZhbHVlKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCAqLCBjdHgpOgorICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgdmFsdWUsIHZhbHVlLCBjdHg9Y3R4KQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0xMTYsMTMgKzE2MCwxMyBAQAogCiBjbGFzcyBMb2NrKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgMSwgMSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBTRU1BUEhPUkUsIDEsIDEsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX3NlbWxvY2suX2lzX21pbmUoKToKLSAgICAgICAgICAgICAgICBuYW1lID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnfCcgKyB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lCiAgICAgICAgICAgICBlbGlmIHNlbGYuX3NlbWxvY2suX2dldF92YWx1ZSgpID09IDE6CkBAIC0xNDEsMTMgKzE4NSwxMyBAQAogCiBjbGFzcyBSTG9jayhTZW1Mb2NrKToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBSRUNVUlNJVkVfTVVURVgsIDEsIDEpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgUkVDVVJTSVZFX01VVEVYLCAxLCAxLCBjdHg9Y3R4KQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzZWxmLl9zZW1sb2NrLl9pc19taW5lKCk6Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgICAgICAgICBuYW1lID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lCiAgICAgICAgICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZSAhPSAnTWFpblRocmVhZCc6CiAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gJ3wnICsgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZQogICAgICAgICAgICAgICAgIGNvdW50ID0gc2VsZi5fc2VtbG9jay5fY291bnQoKQpAQCAtMTY3LDE1ICsyMTEsMTUgQEAKIAogY2xhc3MgQ29uZGl0aW9uKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jaz1Ob25lKToKLSAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgUkxvY2soKQotICAgICAgICBzZWxmLl9zbGVlcGluZ19jb3VudCA9IFNlbWFwaG9yZSgwKQotICAgICAgICBzZWxmLl93b2tlbl9jb3VudCA9IFNlbWFwaG9yZSgwKQotICAgICAgICBzZWxmLl93YWl0X3NlbWFwaG9yZSA9IFNlbWFwaG9yZSgwKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrPU5vbmUsICosIGN0eCk6CisgICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrIG9yIGN0eC5STG9jaygpCisgICAgICAgIHNlbGYuX3NsZWVwaW5nX2NvdW50ID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl93b2tlbl9jb3VudCA9IGN0eC5TZW1hcGhvcmUoMCkKKyAgICAgICAgc2VsZi5fd2FpdF9zZW1hcGhvcmUgPSBjdHguU2VtYXBob3JlKDApCiAgICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgcmV0dXJuIChzZWxmLl9sb2NrLCBzZWxmLl9zbGVlcGluZ19jb3VudCwKICAgICAgICAgICAgICAgICBzZWxmLl93b2tlbl9jb3VudCwgc2VsZi5fd2FpdF9zZW1hcGhvcmUpCiAKQEAgLTI4OSw5ICszMzMsOSBAQAogCiBjbGFzcyBFdmVudChvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9jb25kID0gQ29uZGl0aW9uKExvY2soKSkKLSAgICAgICAgc2VsZi5fZmxhZyA9IFNlbWFwaG9yZSgwKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBzZWxmLl9jb25kID0gY3R4LkNvbmRpdGlvbihjdHguTG9jaygpKQorICAgICAgICBzZWxmLl9mbGFnID0gY3R4LlNlbWFwaG9yZSgwKQogCiAgICAgZGVmIGlzX3NldChzZWxmKToKICAgICAgICAgc2VsZi5fY29uZC5hY3F1aXJlKCkKQEAgLTM0MCwxMSArMzg0LDExIEBACiAKIGNsYXNzIEJhcnJpZXIodGhyZWFkaW5nLkJhcnJpZXIpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lLCAqLCBjdHgpOgogICAgICAgICBpbXBvcnQgc3RydWN0Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmhlYXAgaW1wb3J0IEJ1ZmZlcldyYXBwZXIKKyAgICAgICAgZnJvbSAuaGVhcCBpbXBvcnQgQnVmZmVyV3JhcHBlcgogICAgICAgICB3cmFwcGVyID0gQnVmZmVyV3JhcHBlcihzdHJ1Y3QuY2FsY3NpemUoJ2knKSAqIDIpCi0gICAgICAgIGNvbmQgPSBDb25kaXRpb24oKQorICAgICAgICBjb25kID0gY3R4LkNvbmRpdGlvbigpCiAgICAgICAgIHNlbGYuX19zZXRzdGF0ZV9fKChwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQsIGNvbmQsIHdyYXBwZXIpKQogICAgICAgICBzZWxmLl9zdGF0ZSA9IDAKICAgICAgICAgc2VsZi5fY291bnQgPSAwCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKaW5kZXggZjU4NjJiNC4uZTQ3NmU4NSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQpAQCAtMTcsMTMgKzE3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAjIGNsZWFudXAgZnVuY3Rpb24gYmVmb3JlIG11bHRpcHJvY2Vzc2luZyBkb2VzCiBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IF9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcyBpbXBvcnQgY3VycmVudF9wcm9jZXNzLCBhY3RpdmVfY2hpbGRyZW4KK2Zyb20gLiBpbXBvcnQgcHJvY2VzcwogCiBfX2FsbF9fID0gWwogICAgICdzdWJfZGVidWcnLCAnZGVidWcnLCAnaW5mbycsICdzdWJfd2FybmluZycsICdnZXRfbG9nZ2VyJywKICAgICAnbG9nX3RvX3N0ZGVycicsICdnZXRfdGVtcF9kaXInLCAncmVnaXN0ZXJfYWZ0ZXJfZm9yaycsCiAgICAgJ2lzX2V4aXRpbmcnLCAnRmluYWxpemUnLCAnRm9ya0F3YXJlVGhyZWFkTG9jaycsICdGb3JrQXdhcmVMb2NhbCcsCi0gICAgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAorICAgICdjbG9zZV9hbGxfZmRzX2V4Y2VwdCcsICdTVUJERUJVRycsICdTVUJXQVJOSU5HJywKICAgICBdCiAKICMKQEAgLTcxLDggKzcxLDYgQEAKIAogICAgICAgICAgICAgX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKExPR0dFUl9OQU1FKQogICAgICAgICAgICAgX2xvZ2dlci5wcm9wYWdhdGUgPSAwCi0gICAgICAgICAgICBsb2dnaW5nLmFkZExldmVsTmFtZShTVUJERUJVRywgJ1NVQkRFQlVHJykKLSAgICAgICAgICAgIGxvZ2dpbmcuYWRkTGV2ZWxOYW1lKFNVQldBUk5JTkcsICdTVUJXQVJOSU5HJykKIAogICAgICAgICAgICAgIyBYWFggbXVsdGlwcm9jZXNzaW5nIHNob3VsZCBjbGVhbnVwIGJlZm9yZSBsb2dnaW5nCiAgICAgICAgICAgICBpZiBoYXNhdHRyKGF0ZXhpdCwgJ3VucmVnaXN0ZXInKToKQEAgLTExMSwxMyArMTA5LDE0IEBACiAKIGRlZiBnZXRfdGVtcF9kaXIoKToKICAgICAjIGdldCBuYW1lIG9mIGEgdGVtcCBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgdXAKLSAgICBpZiBjdXJyZW50X3Byb2Nlc3MoKS5fdGVtcGRpciBpcyBOb25lOgorICAgIHRlbXBkaXIgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWcuZ2V0KCd0ZW1wZGlyJykKKyAgICBpZiB0ZW1wZGlyIGlzIE5vbmU6CiAgICAgICAgIGltcG9ydCBzaHV0aWwsIHRlbXBmaWxlCiAgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncHltcC0nKQogICAgICAgICBpbmZvKCdjcmVhdGVkIHRlbXAgZGlyZWN0b3J5ICVzJywgdGVtcGRpcikKICAgICAgICAgRmluYWxpemUoTm9uZSwgc2h1dGlsLnJtdHJlZSwgYXJncz1bdGVtcGRpcl0sIGV4aXRwcmlvcml0eT0tMTAwKQotICAgICAgICBjdXJyZW50X3Byb2Nlc3MoKS5fdGVtcGRpciA9IHRlbXBkaXIKLSAgICByZXR1cm4gY3VycmVudF9wcm9jZXNzKCkuX3RlbXBkaXIKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fY29uZmlnWyd0ZW1wZGlyJ10gPSB0ZW1wZGlyCisgICAgcmV0dXJuIHRlbXBkaXIKIAogIwogIyBTdXBwb3J0IGZvciByZWluaXRpYWxpemF0aW9uIG9mIG9iamVjdHMgd2hlbiBib290c3RyYXBwaW5nIGEgY2hpbGQgcHJvY2VzcwpAQCAtMjczLDggKzI3Miw4IEBACiBfZXhpdGluZyA9IEZhbHNlCiAKIGRlZiBfZXhpdF9mdW5jdGlvbihpbmZvPWluZm8sIGRlYnVnPWRlYnVnLCBfcnVuX2ZpbmFsaXplcnM9X3J1bl9maW5hbGl6ZXJzLAotICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9jaGlsZHJlbj1hY3RpdmVfY2hpbGRyZW4sCi0gICAgICAgICAgICAgICAgICAgY3VycmVudF9wcm9jZXNzPWN1cnJlbnRfcHJvY2Vzcyk6CisgICAgICAgICAgICAgICAgICAgYWN0aXZlX2NoaWxkcmVuPXByb2Nlc3MuYWN0aXZlX2NoaWxkcmVuLAorICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcHJvY2Vzcz1wcm9jZXNzLmN1cnJlbnRfcHJvY2Vzcyk6CiAgICAgIyBXZSBob2xkIG9uIHRvIHJlZmVyZW5jZXMgdG8gZnVuY3Rpb25zIGluIHRoZSBhcmdsaXN0IGR1ZSB0byB0aGUKICAgICAjIHNpdHVhdGlvbiBkZXNjcmliZWQgYmVsb3csIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoaXMKICAgICAjIG1vZHVsZSdzIGdsb2JhbHMgYXJlIGRlc3Ryb3llZC4KQEAgLTMwMyw3ICszMDIsNyBAQAogICAgICAgICAgICAgIyAjOTIwNy4KIAogICAgICAgICAgICAgZm9yIHAgaW4gYWN0aXZlX2NoaWxkcmVuKCk6Ci0gICAgICAgICAgICAgICAgaWYgcC5fZGFlbW9uaWM6CisgICAgICAgICAgICAgICAgaWYgcC5kYWVtb246CiAgICAgICAgICAgICAgICAgICAgIGluZm8oJ2NhbGxpbmcgdGVybWluYXRlKCkgZm9yIGRhZW1vbiAlcycsIHAubmFtZSkKICAgICAgICAgICAgICAgICAgICAgcC5fcG9wZW4udGVybWluYXRlKCkKIApAQCAtMzM1LDMgKzMzNCwzNiBAQAogICAgICAgICByZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIGxhbWJkYSBvYmogOiBvYmouX19kaWN0X18uY2xlYXIoKSkKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZiksICgpCisKKyMKKyMgQ2xvc2UgZmRzIGV4Y2VwdCB0aG9zZSBzcGVjaWZpZWQKKyMKKwordHJ5OgorICAgIE1BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBNQVhGRCA9IDI1NgorCitkZWYgY2xvc2VfYWxsX2Zkc19leGNlcHQoZmRzKToKKyAgICBmZHMgPSBsaXN0KGZkcykgKyBbLTEsIE1BWEZEXQorICAgIGZkcy5zb3J0KCkKKyAgICBhc3NlcnQgZmRzWy0xXSA9PSBNQVhGRCwgJ2ZkIHRvbyBsYXJnZScKKyAgICBmb3IgaSBpbiByYW5nZShsZW4oZmRzKSAtIDEpOgorICAgICAgICBvcy5jbG9zZXJhbmdlKGZkc1tpXSsxLCBmZHNbaSsxXSkKKworIworIyBTdGFydCBhIHByb2dyYW0gd2l0aCBvbmx5IHNwZWNpZmllZCBmZHMga2VwdCBvcGVuCisjCisKK2RlZiBzcGF3bnZfcGFzc2ZkcyhwYXRoLCBhcmdzLCBwYXNzZmRzKToKKyAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcworICAgIHBhc3NmZHMgPSBzb3J0ZWQocGFzc2ZkcykKKyAgICBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUgPSBvcy5waXBlKCkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBfcG9zaXhzdWJwcm9jZXNzLmZvcmtfZXhlYygKKyAgICAgICAgICAgIGFyZ3MsIFtvcy5mc2VuY29kZShwYXRoKV0sIFRydWUsIHBhc3NmZHMsIE5vbmUsIE5vbmUsCisgICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUsCisgICAgICAgICAgICBGYWxzZSwgRmFsc2UsIE5vbmUpCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2xvc2UoZXJycGlwZV9yZWFkKQorICAgICAgICBvcy5jbG9zZShlcnJwaXBlX3dyaXRlKQpkaWZmIC0tZ2l0IGEvTGliL25ldHJjLnB5IGIvTGliL25ldHJjLnB5CmluZGV4IDJhYTQ4ZjMuLmJiYjNkMjMgMTAwNjQ0Ci0tLSBhL0xpYi9uZXRyYy5weQorKysgYi9MaWIvbmV0cmMucHkKQEAgLTMsOCArMyw2IEBACiAjIE1vZHVsZSBhbmQgZG9jdW1lbnRhdGlvbiBieSBFcmljIFMuIFJheW1vbmQsIDIxIERlYyAxOTk4CiAKIGltcG9ydCBvcywgc2hsZXgsIHN0YXQKLWlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICBpbXBvcnQgcHdkCiAKIF9fYWxsX18gPSBbIm5ldHJjIiwgIk5ldHJjUGFyc2VFcnJvciJdCiAKQEAgLTI4LDcgKzI2LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bJ0hPTUUnXSwgIi5uZXRyYyIpCiAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ291bGQgbm90IGZpbmQgLm5ldHJjOiAkSE9NRSBpcyBub3Qgc2V0IikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDb3VsZCBub3QgZmluZCAubmV0cmM6ICRIT01FIGlzIG5vdCBzZXQiKQogICAgICAgICBzZWxmLmhvc3RzID0ge30KICAgICAgICAgc2VsZi5tYWNyb3MgPSB7fQogICAgICAgICB3aXRoIG9wZW4oZmlsZSkgYXMgZnA6CkBAIC05Miw2ICs5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgZGVmYXVsdF9uZXRyYzoKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSBvcy5mc3RhdChmcC5maWxlbm8oKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3Auc3RfdWlkICE9IG9zLmdldHVpZCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBwd2QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvd25lciA9IHB3ZC5nZXRwd3VpZChwcm9wLnN0X3VpZClbMF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CmRpZmYgLS1naXQgYS9MaWIvbm50cGxpYi5weSBiL0xpYi9ubnRwbGliLnB5CmluZGV4IDAyY2MzN2MuLjk3NjZiZTMgMTAwNjQ0Ci0tLSBhL0xpYi9ubnRwbGliLnB5CisrKyBiL0xpYi9ubnRwbGliLnB5CkBAIC0zNjYsNyArMzY2LDcgQEAKICAgICAgICAgaWYgaXNfY29ubmVjdGVkKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIGlzX2Nvbm5lY3RlZCgpOgpAQCAtOTU2LDcgKzk1Niw3IEBACiAgICAgICAgICAgICAgICAgaWYgYXV0aDoKICAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhbMF0KICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBhdXRoWzJdCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBQZXJmb3JtIE5OVFAgYXV0aGVudGljYXRpb24gaWYgbmVlZGVkLgogICAgICAgICBpZiBub3QgdXNlcjoKZGlmZiAtLWdpdCBhL0xpYi9udHBhdGgucHkgYi9MaWIvbnRwYXRoLnB5CmluZGV4IDgyNmJlODcuLjZiNjU2OTcgMTAwNjQ0Ci0tLSBhL0xpYi9udHBhdGgucHkKKysrIGIvTGliL250cGF0aC5weQpAQCAtMTcsNyArMTcsNyBAQAogICAgICAgICAgICAiaXNtb3VudCIsICJleHBhbmR1c2VyIiwiZXhwYW5kdmFycyIsIm5vcm1wYXRoIiwiYWJzcGF0aCIsCiAgICAgICAgICAgICJzcGxpdHVuYyIsImN1cmRpciIsInBhcmRpciIsInNlcCIsInBhdGhzZXAiLCJkZWZwYXRoIiwiYWx0c2VwIiwKICAgICAgICAgICAgImV4dHNlcCIsImRldm51bGwiLCJyZWFscGF0aCIsInN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzIiwicmVscGF0aCIsCi0gICAgICAgICAgICJzYW1lZmlsZSIsICJzYW1lb3BlbmZpbGUiLF0KKyAgICAgICAgICAgInNhbWVmaWxlIiwgInNhbWVvcGVuZmlsZSIsICJzYW1lc3RhdCIsXQogCiAjIHN0cmluZ3MgcmVwcmVzZW50aW5nIHZhcmlvdXMgcGF0aC1yZWxhdGVkIGJpdHMgYW5kIHBpZWNlcwogIyBUaGVzZSBhcmUgcHJpbWFyaWx5IGZvciBleHBvcnQ7IGludGVybmFsbHksIHRoZXkgYXJlIGhhcmRjb2RlZC4KQEAgLTMwLDkgKzMwLDYgQEAKIGRlZnBhdGggPSAnLjtDOlxcYmluJwogaWYgJ2NlJyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CiAgICAgZGVmcGF0aCA9ICdcXFdpbmRvd3MnCi1lbGlmICdvczInIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAjIE9TLzIgdy8gVkFDUFAKLSAgICBhbHRzZXAgPSAnLycKIGRldm51bGwgPSAnbnVsJwogCiBkZWYgX2dldF9lbXB0eShwYXRoKToKQEAgLTMyMCwxMiArMzE3LDExIEBACiAKIGRlZiBpc2xpbmsocGF0aCk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmsuCi0gICAgVGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIFdpbmRvd3MgcHJpb3IgdG8gNi4wCi0gICAgYW5kIGZvciBPUy8yLgorICAgIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBXaW5kb3dzIHByaW9yIHRvIDYuMC4KICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNMTksoc3Quc3RfbW9kZSkKIApAQCAtMzM1LDIwICszMzEsMzkgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IChvcy5lcnJvciwgV2luZG93c0Vycm9yKToKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIAotIyBJcyBhIHBhdGggYSBtb3VudCBwb2ludD8gIEVpdGhlciBhIHJvb3QgKHdpdGggb3Igd2l0aG91dCBkcml2ZSBsZXR0ZXIpCi0jIG9yIGFuIFVOQyBwYXRoIHdpdGggYXQgbW9zdCBhIC8gb3IgXCBhZnRlciB0aGUgbW91bnQgcG9pbnQuCi0KKyMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/CisjIEFueSBkcml2ZSBsZXR0ZXIgcm9vdCAoZWcgYzpcKQorIyBBbnkgc2hhcmUgVU5DIChlZyBcXHNlcnZlclxzaGFyZSkKKyMgQW55IHZvbHVtZSBtb3VudGVkIG9uIGEgZmlsZXN5c3RlbSBmb2xkZXIKKyMKKyMgTm8gb25lIG1ldGhvZCBkZXRlY3RzIGFsbCB0aHJlZSBzaXR1YXRpb25zLiBIaXN0b3JpY2FsbHkgd2UndmUgbGV4aWNhbGx5CisjIGRldGVjdGVkIGRyaXZlIGxldHRlciByb290cyBhbmQgc2hhcmUgVU5Dcy4gVGhlIGNhbm9uaWNhbCBhcHByb2FjaCB0bworIyBkZXRlY3RpbmcgbW91bnRlZCB2b2x1bWVzIChxdWVyeWluZyB0aGUgcmVwYXJzZSB0YWcpIGZhaWxzIGZvciB0aGUgbW9zdAorIyBjb21tb24gY2FzZTogZHJpdmUgbGV0dGVyIHJvb3RzLiBUaGUgYWx0ZXJuYXRpdmUgd2hpY2ggdXNlcyBHZXRWb2x1bWVQYXRoTmFtZQorIyBmYWlscyBpZiB0aGUgZHJpdmUgbGV0dGVyIGlzIHRoZSByZXN1bHQgb2YgYSBTVUJTVC4KK3RyeToKKyAgICBmcm9tIG50IGltcG9ydCBfZ2V0dm9sdW1lcGF0aG5hbWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfZ2V0dm9sdW1lcGF0aG5hbWUgPSBOb25lCiBkZWYgaXNtb3VudChwYXRoKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgbW91bnQgcG9pbnQgKGRlZmluZWQgYXMgcm9vdCBvZiBkcml2ZSkiIiIKKyAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgbW91bnQgcG9pbnQgKGEgZHJpdmUgcm9vdCwgdGhlIHJvb3Qgb2YgYQorICAgIHNoYXJlLCBvciBhIG1vdW50ZWQgdm9sdW1lKSIiIgogICAgIHNlcHMgPSBfZ2V0X2JvdGhzZXBzKHBhdGgpCisgICAgcGF0aCA9IGFic3BhdGgocGF0aCkKICAgICByb290LCByZXN0ID0gc3BsaXRkcml2ZShwYXRoKQogICAgIGlmIHJvb3QgYW5kIHJvb3RbMF0gaW4gc2VwczoKICAgICAgICAgcmV0dXJuIChub3QgcmVzdCkgb3IgKHJlc3QgaW4gc2VwcykKLSAgICByZXR1cm4gcmVzdCBpbiBzZXBzCisgICAgaWYgcmVzdCBpbiBzZXBzOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgaWYgX2dldHZvbHVtZXBhdGhuYW1lOgorICAgICAgICByZXR1cm4gcGF0aC5yc3RyaXAoc2VwcykgPT0gX2dldHZvbHVtZXBhdGhuYW1lKHBhdGgpLnJzdHJpcChzZXBzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZQogCiAKICMgRXhwYW5kIHBhdGhzIGJlZ2lubmluZyB3aXRoICd+JyBvciAnfnVzZXInLgpAQCAtNTg4LDcgKzYwMyw3IEBACiAgICAgICAgIGlmIHBhdGg6ICMgRW1wdHkgcGF0aCBtdXN0IHJldHVybiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHBhdGggPSBfZ2V0ZnVsbHBhdGhuYW1lKHBhdGgpCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcyAjIEJhZCBwYXRoIC0gcmV0dXJuIHVuY2hhbmdlZC4KICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKICAgICAgICAgICAgIHBhdGggPSBvcy5nZXRjd2RiKCkKQEAgLTY1NiwyMyArNjcxLDYgQEAKICAgICBkZWYgX2dldGZpbmFscGF0aG5hbWUoZik6CiAgICAgICAgIHJldHVybiBub3JtY2FzZShhYnNwYXRoKGYpKQogCi1kZWYgc2FtZWZpbGUoZjEsIGYyKToKLSAgICAiVGVzdCB3aGV0aGVyIHR3byBwYXRobmFtZXMgcmVmZXJlbmNlIHRoZSBzYW1lIGFjdHVhbCBmaWxlIgotICAgIHJldHVybiBfZ2V0ZmluYWxwYXRobmFtZShmMSkgPT0gX2dldGZpbmFscGF0aG5hbWUoZjIpCi0KLQotdHJ5OgotICAgIGZyb20gbnQgaW1wb3J0IF9nZXRmaWxlaW5mb3JtYXRpb24KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIE9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLCBqdXN0IHJldHVybiB0aGUgZmQgYW5kIHNlZSB0aGF0Ci0gICAgIyBpdCBjb21wYXJlcyBlcXVhbCBpbiBzYW1lb3BlbmZpbGUuCi0gICAgZGVmIF9nZXRmaWxlaW5mb3JtYXRpb24oZmQpOgotICAgICAgICByZXR1cm4gZmQKLQotZGVmIHNhbWVvcGVuZmlsZShmMSwgZjIpOgotICAgICIiIlRlc3Qgd2hldGhlciB0d28gZmlsZSBvYmplY3RzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCi0gICAgcmV0dXJuIF9nZXRmaWxlaW5mb3JtYXRpb24oZjEpID09IF9nZXRmaWxlaW5mb3JtYXRpb24oZjIpCi0KIAogdHJ5OgogICAgICMgVGhlIGdlbmVyaWNwYXRoLmlzZGlyIGltcGxlbWVudGF0aW9uIHVzZXMgb3Muc3RhdCBhbmQgY2hlY2tzIHRoZSBtb2RlCmRpZmYgLS1naXQgYS9MaWIvbnR1cmwycGF0aC5weSBiL0xpYi9udHVybDJwYXRoLnB5CmluZGV4IDUxMWRjZWMuLjVhNmQ0NGEgMTAwNjQ0Ci0tLSBhL0xpYi9udHVybDJwYXRoLnB5CisrKyBiL0xpYi9udHVybDJwYXRoLnB5CkBAIC0yMyw3ICsyMyw3IEBACiAgICAgY29tcCA9IHVybC5zcGxpdCgnfCcpCiAgICAgaWYgbGVuKGNvbXApICE9IDIgb3IgY29tcFswXVstMV0gbm90IGluIHN0cmluZy5hc2NpaV9sZXR0ZXJzOgogICAgICAgICBlcnJvciA9ICdCYWQgVVJMOiAnICsgdXJsCi0gICAgICAgIHJhaXNlIElPRXJyb3IoZXJyb3IpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3IpCiAgICAgZHJpdmUgPSBjb21wWzBdWy0xXS51cHBlcigpCiAgICAgY29tcG9uZW50cyA9IGNvbXBbMV0uc3BsaXQoJy8nKQogICAgIHBhdGggPSBkcml2ZSArICc6JwpAQCAtNTUsNyArNTUsNyBAQAogICAgIGNvbXAgPSBwLnNwbGl0KCc6JykKICAgICBpZiBsZW4oY29tcCkgIT0gMiBvciBsZW4oY29tcFswXSkgPiAxOgogICAgICAgICBlcnJvciA9ICdCYWQgcGF0aDogJyArIHAKLSAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJvcikKKyAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJvcikKIAogICAgIGRyaXZlID0gdXJsbGliLnBhcnNlLnF1b3RlKGNvbXBbMF0udXBwZXIoKSkKICAgICBjb21wb25lbnRzID0gY29tcFsxXS5zcGxpdCgnXFwnKQpkaWZmIC0tZ2l0IGEvTGliL29wY29kZS5weSBiL0xpYi9vcGNvZGUucHkKaW5kZXggYTYzOWZlMy4uNzhkMTIyOSAxMDA2NDQKLS0tIGEvTGliL29wY29kZS5weQorKysgYi9MaWIvb3Bjb2RlLnB5CkBAIC04NCw3ICs4NCw2IEBACiBkZWZfb3AoJ0JJTkFSWV9PUicsIDY2KQogZGVmX29wKCdJTlBMQUNFX1BPV0VSJywgNjcpCiBkZWZfb3AoJ0dFVF9JVEVSJywgNjgpCi1kZWZfb3AoJ1NUT1JFX0xPQ0FMUycsIDY5KQogCiBkZWZfb3AoJ1BSSU5UX0VYUFInLCA3MCkKIGRlZl9vcCgnTE9BRF9CVUlMRF9DTEFTUycsIDcxKQpAQCAtMTc5LDYgKzE3OCw5IEBACiBkZWZfb3AoJ1NFVF9BREQnLCAxNDYpCiBkZWZfb3AoJ01BUF9BREQnLCAxNDcpCiAKK2RlZl9vcCgnTE9BRF9DTEFTU0RFUkVGJywgMTQ4KQoraGFzZnJlZS5hcHBlbmQoMTQ4KQorCiBkZWZfb3AoJ0VYVEVOREVEX0FSRycsIDE0NCkKIEVYVEVOREVEX0FSRyA9IDE0NAogCmRpZmYgLS1naXQgYS9MaWIvb3BlcmF0b3IucHkgYi9MaWIvb3BlcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxYTlhNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9vcGVyYXRvci5weQpAQCAtMCwwICsxLDQxMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIiIiCitPcGVyYXRvciBJbnRlcmZhY2UKKworVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBmdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50cmluc2ljCitvcGVyYXRvcnMgb2YgUHl0aG9uLiAgRm9yIGV4YW1wbGUsIG9wZXJhdG9yLmFkZCh4LCB5KSBpcyBlcXVpdmFsZW50Cit0byB0aGUgZXhwcmVzc2lvbiB4K3kuICBUaGUgZnVuY3Rpb24gbmFtZXMgYXJlIHRob3NlIHVzZWQgZm9yIHNwZWNpYWwKK21ldGhvZHM7IHZhcmlhbnRzIHdpdGhvdXQgbGVhZGluZyBhbmQgdHJhaWxpbmcgJ19fJyBhcmUgYWxzbyBwcm92aWRlZAorZm9yIGNvbnZlbmllbmNlLgorCitUaGlzIGlzIHRoZSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kdWxlLgorIiIiCisKK19fYWxsX18gPSBbJ2FicycsICdhZGQnLCAnYW5kXycsICdhdHRyZ2V0dGVyJywgJ2NvbmNhdCcsICdjb250YWlucycsICdjb3VudE9mJywKKyAgICAgICAgICAgJ2RlbGl0ZW0nLCAnZXEnLCAnZmxvb3JkaXYnLCAnZ2UnLCAnZ2V0aXRlbScsICdndCcsICdpYWRkJywgJ2lhbmQnLAorICAgICAgICAgICAnaWNvbmNhdCcsICdpZmxvb3JkaXYnLCAnaWxzaGlmdCcsICdpbW9kJywgJ2ltdWwnLCAnaW5kZXgnLAorICAgICAgICAgICAnaW5kZXhPZicsICdpbnYnLCAnaW52ZXJ0JywgJ2lvcicsICdpcG93JywgJ2lyc2hpZnQnLCAnaXNfJywKKyAgICAgICAgICAgJ2lzX25vdCcsICdpc3ViJywgJ2l0ZW1nZXR0ZXInLCAnaXRydWVkaXYnLCAnaXhvcicsICdsZScsCisgICAgICAgICAgICdsZW5ndGhfaGludCcsICdsc2hpZnQnLCAnbHQnLCAnbWV0aG9kY2FsbGVyJywgJ21vZCcsICdtdWwnLCAnbmUnLAorICAgICAgICAgICAnbmVnJywgJ25vdF8nLCAnb3JfJywgJ3BvcycsICdwb3cnLCAncnNoaWZ0JywgJ3NldGl0ZW0nLCAnc3ViJywKKyAgICAgICAgICAgJ3RydWVkaXYnLCAndHJ1dGgnLCAneG9yJ10KKworZnJvbSBidWlsdGlucyBpbXBvcnQgYWJzIGFzIF9hYnMKKworCisjIENvbXBhcmlzb24gT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgbHQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8IGIuIgorICAgIHJldHVybiBhIDwgYgorCitkZWYgbGUoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PSBiLiIKKyAgICByZXR1cm4gYSA8PSBiCisKK2RlZiBlcShhLCBiKToKKyAgICAiU2FtZSBhcyBhID09IGIuIgorICAgIHJldHVybiBhID09IGIKKworZGVmIG5lKGEsIGIpOgorICAgICJTYW1lIGFzIGEgIT0gYi4iCisgICAgcmV0dXJuIGEgIT0gYgorCitkZWYgZ2UoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+PSBiLiIKKyAgICByZXR1cm4gYSA+PSBiCisKK2RlZiBndChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4gYi4iCisgICAgcmV0dXJuIGEgPiBiCisKKyMgTG9naWNhbCBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBub3RfKGEpOgorICAgICJTYW1lIGFzIG5vdCBhLiIKKyAgICByZXR1cm4gbm90IGEKKworZGVmIHRydXRoKGEpOgorICAgICJSZXR1cm4gVHJ1ZSBpZiBhIGlzIHRydWUsIEZhbHNlIG90aGVyd2lzZS4iCisgICAgcmV0dXJuIFRydWUgaWYgYSBlbHNlIEZhbHNlCisKK2RlZiBpc18oYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBiLiIKKyAgICByZXR1cm4gYSBpcyBiCisKK2RlZiBpc19ub3QoYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBub3QgYi4iCisgICAgcmV0dXJuIGEgaXMgbm90IGIKKworIyBNYXRoZW1hdGljYWwvQml0d2lzZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGFicyhhKToKKyAgICAiU2FtZSBhcyBhYnMoYSkuIgorICAgIHJldHVybiBfYWJzKGEpCisKK2RlZiBhZGQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIuIgorICAgIHJldHVybiBhICsgYgorCitkZWYgYW5kXyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICYgYi4iCisgICAgcmV0dXJuIGEgJiBiCisKK2RlZiBmbG9vcmRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC8vIGIuIgorICAgIHJldHVybiBhIC8vIGIKKworZGVmIGluZGV4KGEpOgorICAgICJTYW1lIGFzIGEuX19pbmRleF9fKCkuIgorICAgIHJldHVybiBhLl9faW5kZXhfXygpCisKK2RlZiBpbnYoYSk6CisgICAgIlNhbWUgYXMgfmEuIgorICAgIHJldHVybiB+YQoraW52ZXJ0ID0gaW52CisKK2RlZiBsc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PCBiLiIKKyAgICByZXR1cm4gYSA8PCBiCisKK2RlZiBtb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlIGIuIgorICAgIHJldHVybiBhICUgYgorCitkZWYgbXVsKGEsIGIpOgorICAgICJTYW1lIGFzIGEgKiBiLiIKKyAgICByZXR1cm4gYSAqIGIKKworZGVmIG5lZyhhKToKKyAgICAiU2FtZSBhcyAtYS4iCisgICAgcmV0dXJuIC1hCisKK2RlZiBvcl8oYSwgYik6CisgICAgIlNhbWUgYXMgYSB8IGIuIgorICAgIHJldHVybiBhIHwgYgorCitkZWYgcG9zKGEpOgorICAgICJTYW1lIGFzICthLiIKKyAgICByZXR1cm4gK2EKKworZGVmIHBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqIGIuIgorICAgIHJldHVybiBhICoqIGIKKworZGVmIHJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+IGIuIgorICAgIHJldHVybiBhID4+IGIKKworZGVmIHN1YihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC0gYi4iCisgICAgcmV0dXJuIGEgLSBiCisKK2RlZiB0cnVlZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLyBiLiIKKyAgICByZXR1cm4gYSAvIGIKKworZGVmIHhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF4gYi4iCisgICAgcmV0dXJuIGEgXiBiCisKKyMgU2VxdWVuY2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBjb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iCisgICAgaWYgbm90IGhhc2F0dHIoYSwgJ19fZ2V0aXRlbV9fJyk6CisgICAgICAgIG1zZyA9ICInJXMnIG9iamVjdCBjYW4ndCBiZSBjb25jYXRlbmF0ZWQiICUgdHlwZShhKS5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIHJldHVybiBhICsgYgorCitkZWYgY29udGFpbnMoYSwgYik6CisgICAgIlNhbWUgYXMgYiBpbiBhIChub3RlIHJldmVyc2VkIG9wZXJhbmRzKS4iCisgICAgcmV0dXJuIGIgaW4gYQorCitkZWYgY291bnRPZihhLCBiKToKKyAgICAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgYiBvY2N1cnMgaW4gYS4iCisgICAgY291bnQgPSAwCisgICAgZm9yIGkgaW4gYToKKyAgICAgICAgaWYgaSA9PSBiOgorICAgICAgICAgICAgY291bnQgKz0gMQorICAgIHJldHVybiBjb3VudAorCitkZWYgZGVsaXRlbShhLCBiKToKKyAgICAiU2FtZSBhcyBkZWwgYVtiXS4iCisgICAgZGVsIGFbYl0KKworZGVmIGdldGl0ZW0oYSwgYik6CisgICAgIlNhbWUgYXMgYVtiXS4iCisgICAgcmV0dXJuIGFbYl0KKworZGVmIGluZGV4T2YoYSwgYik6CisgICAgIlJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgYiBpbiBhLiIKKyAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoYSk6CisgICAgICAgIGlmIGogPT0gYjoKKyAgICAgICAgICAgIHJldHVybiBpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2VxdWVuY2UuaW5kZXgoeCk6IHggbm90IGluIHNlcXVlbmNlJykKKworZGVmIHNldGl0ZW0oYSwgYiwgYyk6CisgICAgIlNhbWUgYXMgYVtiXSA9IGMuIgorICAgIGFbYl0gPSBjCisKK2RlZiBsZW5ndGhfaGludChvYmosIGRlZmF1bHQ9MCk6CisgICAgIiIiCisgICAgUmV0dXJuIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gb2JqLgorICAgIFRoaXMgaXMgdXNlZnVsIGZvciBwcmVzaXppbmcgY29udGFpbmVycyB3aGVuIGJ1aWxkaW5nIGZyb20gYW4gaXRlcmFibGUuCisKKyAgICBJZiB0aGUgb2JqZWN0IHN1cHBvcnRzIGxlbigpLCB0aGUgcmVzdWx0IHdpbGwgYmUgZXhhY3QuIE90aGVyd2lzZSwgaXQgbWF5CisgICAgb3Zlci0gb3IgdW5kZXItZXN0aW1hdGUgYnkgYW4gYXJiaXRyYXJ5IGFtb3VudC4gVGhlIHJlc3VsdCB3aWxsIGJlIGFuCisgICAgaW50ZWdlciA+PSAwLgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKGRlZmF1bHQsIGludCk6CisgICAgICAgIG1zZyA9ICgiJyVzJyBvYmplY3QgY2Fubm90IGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIiICUKKyAgICAgICAgICAgICAgIHR5cGUoZGVmYXVsdCkuX19uYW1lX18pCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBsZW4ob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIHRyeToKKyAgICAgICAgaGludCA9IHR5cGUob2JqKS5fX2xlbmd0aF9oaW50X18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICB0cnk6CisgICAgICAgIHZhbCA9IGhpbnQob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYgdmFsIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgaW50KToKKyAgICAgICAgbXNnID0gKCdfX2xlbmd0aF9oaW50X18gbXVzdCBiZSBpbnRlZ2VyLCBub3QgJXMnICUKKyAgICAgICAgICAgICAgIHR5cGUodmFsKS5fX25hbWVfXykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiB2YWwgPCAwOgorICAgICAgICBtc2cgPSAnX19sZW5ndGhfaGludF9fKCkgc2hvdWxkIHJldHVybiA+PSAwJworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICByZXR1cm4gdmFsCisKKyMgR2VuZXJhbGl6ZWQgTG9va3VwIE9iamVjdHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2NsYXNzIGF0dHJnZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gYXR0cmlidXRlKHMpIGZyb20gaXRzIG9wZXJhbmQuCisgICAgQWZ0ZXIgZiA9IGF0dHJnZXR0ZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZS4KKyAgICBBZnRlciBnID0gYXR0cmdldHRlcignbmFtZScsICdkYXRlJyksIHRoZSBjYWxsIGcocikgcmV0dXJucyAoci5uYW1lLCByLmRhdGUpLgorICAgIEFmdGVyIGggPSBhdHRyZ2V0dGVyKCduYW1lLmZpcnN0JywgJ25hbWUubGFzdCcpLCB0aGUgY2FsbCBoKHIpIHJldHVybnMKKyAgICAoci5uYW1lLmZpcnN0LCByLm5hbWUubGFzdCkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHIsICphdHRycyk6CisgICAgICAgIGlmIG5vdCBhdHRyczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHIsIHN0cik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdhdHRyaWJ1dGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJykKKyAgICAgICAgICAgIG5hbWVzID0gYXR0ci5zcGxpdCgnLicpCisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ2V0dGVycyA9IHR1cGxlKG1hcChhdHRyZ2V0dGVyLCAoYXR0ciwpICsgYXR0cnMpKQorICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUoZ2V0dGVyKG9iaikgZm9yIGdldHRlciBpbiBnZXR0ZXJzKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIGl0ZW1nZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gaXRlbShzKSBmcm9tIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBpdGVtZ2V0dGVyKDIpLCB0aGUgY2FsbCBmKHIpIHJldHVybnMgclsyXS4KKyAgICBBZnRlciBnID0gaXRlbWdldHRlcigyLCA1LCAzKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zIChyWzJdLCByWzVdLCByWzNdKQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtLCAqaXRlbXMpOgorICAgICAgICBpZiBub3QgaXRlbXM6CisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmpbaXRlbV0KKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpdGVtcyA9IChpdGVtLCkgKyBpdGVtcworICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUob2JqW2ldIGZvciBpIGluIGl0ZW1zKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIG1ldGhvZGNhbGxlcjoKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBjYWxsYWJsZSBvYmplY3QgdGhhdCBjYWxscyB0aGUgZ2l2ZW4gbWV0aG9kIG9uIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBtZXRob2RjYWxsZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZSgpLgorICAgIEFmdGVyIGcgPSBtZXRob2RjYWxsZXIoJ25hbWUnLCAnZGF0ZScsIGZvbz0xKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zCisgICAgci5uYW1lKCdkYXRlJywgZm9vPTEpLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgICAgICBtc2cgPSAibWV0aG9kY2FsbGVyIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgdGhlIG1ldGhvZCBuYW1lIgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgc2VsZi5fbmFtZSA9IGFyZ3NbMV0KKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3NbMjpdCisgICAgICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9iaiwgc2VsZi5fbmFtZSkoKnNlbGYuX2FyZ3MsICoqc2VsZi5fa3dhcmdzKQorCisjIEluLXBsYWNlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgaWFkZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICs9IGIuIgorICAgIGEgKz0gYgorICAgIHJldHVybiBhCisKK2RlZiBpYW5kKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJj0gYi4iCisgICAgYSAmPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGljb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArPSBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIgorICAgIGlmIG5vdCBoYXNhdHRyKGEsICdfX2dldGl0ZW1fXycpOgorICAgICAgICBtc2cgPSAiJyVzJyBvYmplY3QgY2FuJ3QgYmUgY29uY2F0ZW5hdGVkIiAlIHR5cGUoYSkuX19uYW1lX18KKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBhICs9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWZsb29yZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLy89IGIuIgorICAgIGEgLy89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWxzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhIDw8PSBiLiIKKyAgICBhIDw8PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGltb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlPSBiLiIKKyAgICBhICU9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaW11bChhLCBiKToKKyAgICAiU2FtZSBhcyBhICo9IGIuIgorICAgIGEgKj0gYgorICAgIHJldHVybiBhCisKK2RlZiBpb3IoYSwgYik6CisgICAgIlNhbWUgYXMgYSB8PSBiLiIKKyAgICBhIHw9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqPSBiLiIKKyAgICBhICoqPWIKKyAgICByZXR1cm4gYQorCitkZWYgaXJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+PSBiLiIKKyAgICBhID4+PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlzdWIoYSwgYik6CisgICAgIlNhbWUgYXMgYSAtPSBiLiIKKyAgICBhIC09IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXRydWVkaXYoYSwgYik6CisgICAgIlNhbWUgYXMgYSAvPSBiLiIKKyAgICBhIC89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF49IGIuIgorICAgIGEgXj0gYgorICAgIHJldHVybiBhCisKKwordHJ5OgorICAgIGZyb20gX29wZXJhdG9yIGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBmcm9tIF9vcGVyYXRvciBpbXBvcnQgX19kb2NfXworCisjIEFsbCBvZiB0aGVzZSAiX19mdW5jX18gPSBmdW5jIiBhc3NpZ25tZW50cyBoYXZlIHRvIGhhcHBlbiBhZnRlciBpbXBvcnRpbmcKKyMgZnJvbSBfb3BlcmF0b3IgdG8gbWFrZSBzdXJlIHRoZXkncmUgc2V0IHRvIHRoZSByaWdodCBmdW5jdGlvbgorX19sdF9fID0gbHQKK19fbGVfXyA9IGxlCitfX2VxX18gPSBlcQorX19uZV9fID0gbmUKK19fZ2VfXyA9IGdlCitfX2d0X18gPSBndAorX19ub3RfXyA9IG5vdF8KK19fYWJzX18gPSBhYnMKK19fYWRkX18gPSBhZGQKK19fYW5kX18gPSBhbmRfCitfX2Zsb29yZGl2X18gPSBmbG9vcmRpdgorX19pbmRleF9fID0gaW5kZXgKK19faW52X18gPSBpbnYKK19faW52ZXJ0X18gPSBpbnZlcnQKK19fbHNoaWZ0X18gPSBsc2hpZnQKK19fbW9kX18gPSBtb2QKK19fbXVsX18gPSBtdWwKK19fbmVnX18gPSBuZWcKK19fb3JfXyA9IG9yXworX19wb3NfXyA9IHBvcworX19wb3dfXyA9IHBvdworX19yc2hpZnRfXyA9IHJzaGlmdAorX19zdWJfXyA9IHN1YgorX190cnVlZGl2X18gPSB0cnVlZGl2CitfX3hvcl9fID0geG9yCitfX2NvbmNhdF9fID0gY29uY2F0CitfX2NvbnRhaW5zX18gPSBjb250YWlucworX19kZWxpdGVtX18gPSBkZWxpdGVtCitfX2dldGl0ZW1fXyA9IGdldGl0ZW0KK19fc2V0aXRlbV9fID0gc2V0aXRlbQorX19pYWRkX18gPSBpYWRkCitfX2lhbmRfXyA9IGlhbmQKK19faWNvbmNhdF9fID0gaWNvbmNhdAorX19pZmxvb3JkaXZfXyA9IGlmbG9vcmRpdgorX19pbHNoaWZ0X18gPSBpbHNoaWZ0CitfX2ltb2RfXyA9IGltb2QKK19faW11bF9fID0gaW11bAorX19pb3JfXyA9IGlvcgorX19pcG93X18gPSBpcG93CitfX2lyc2hpZnRfXyA9IGlyc2hpZnQKK19faXN1Yl9fID0gaXN1YgorX19pdHJ1ZWRpdl9fID0gaXRydWVkaXYKK19faXhvcl9fID0gaXhvcgpkaWZmIC0tZ2l0IGEvTGliL29zLnB5IGIvTGliL29zLnB5CmluZGV4IDg3Njg5Y2MuLmU5ODgwYTEgMTAwNjQ0Ci0tLSBhL0xpYi9vcy5weQorKysgYi9MaWIvb3MucHkKQEAgLTEsOSArMSw5IEBACiByIiIiT1Mgcm91dGluZXMgZm9yIE1hYywgTlQsIG9yIFBvc2l4IGRlcGVuZGluZyBvbiB3aGF0IHN5c3RlbSB3ZSdyZSBvbi4KIAogVGhpcyBleHBvcnRzOgotICAtIGFsbCBmdW5jdGlvbnMgZnJvbSBwb3NpeCwgbnQsIG9zMiwgb3IgY2UsIGUuZy4gdW5saW5rLCBzdGF0LCBldGMuCisgIC0gYWxsIGZ1bmN0aW9ucyBmcm9tIHBvc2l4LCBudCBvciBjZSwgZS5nLiB1bmxpbmssIHN0YXQsIGV0Yy4KICAgLSBvcy5wYXRoIGlzIGVpdGhlciBwb3NpeHBhdGggb3IgbnRwYXRoCi0gIC0gb3MubmFtZSBpcyBlaXRoZXIgJ3Bvc2l4JywgJ250JywgJ29zMicgb3IgJ2NlJy4KKyAgLSBvcy5uYW1lIGlzIGVpdGhlciAncG9zaXgnLCAnbnQnIG9yICdjZScuCiAgIC0gb3MuY3VyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKCcuJyBvciAnOicpCiAgIC0gb3MucGFyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGFyZW50IGRpcmVjdG9yeSAoJy4uJyBvciAnOjonKQogICAtIG9zLnNlcCBpcyB0aGUgKG9yIGEgbW9zdCBjb21tb24pIHBhdGhuYW1lIHNlcGFyYXRvciAoJy8nIG9yICc6JyBvciAnXFwnKQpAQCAtODEsMzAgKzgxLDYgQEAKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHBhc3MKIAotZWxpZiAnb3MyJyBpbiBfbmFtZXM6Ci0gICAgbmFtZSA9ICdvczInCi0gICAgbGluZXNlcCA9ICdcclxuJwotICAgIGZyb20gb3MyIGltcG9ydCAqCi0gICAgdHJ5OgotICAgICAgICBmcm9tIG9zMiBpbXBvcnQgX2V4aXQKLSAgICAgICAgX19hbGxfXy5hcHBlbmQoJ19leGl0JykKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBpZiBzeXMudmVyc2lvbi5maW5kKCdFTVggR0NDJykgPT0gLTE6Ci0gICAgICAgIGltcG9ydCBudHBhdGggYXMgcGF0aAotICAgIGVsc2U6Ci0gICAgICAgIGltcG9ydCBvczJlbXhwYXRoIGFzIHBhdGgKLSAgICAgICAgZnJvbSBfZW14X2xpbmsgaW1wb3J0IGxpbmsKLQotICAgIGltcG9ydCBvczIKLSAgICBfX2FsbF9fLmV4dGVuZChfZ2V0X2V4cG9ydHNfbGlzdChvczIpKQotICAgIGRlbCBvczIKLQotICAgIHRyeToKLSAgICAgICAgZnJvbSBvczIgaW1wb3J0IF9oYXZlX2Z1bmN0aW9ucwotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotCiBlbGlmICdjZScgaW4gX25hbWVzOgogICAgIG5hbWUgPSAnY2UnCiAgICAgbGluZXNlcCA9ICdcclxuJwpAQCAtMjU2LDEwICsyMzIsOSBAQAogICAgIGlmIGhlYWQgYW5kIHRhaWwgYW5kIG5vdCBwYXRoLmV4aXN0cyhoZWFkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFrZWRpcnMoaGVhZCwgbW9kZSwgZXhpc3Rfb2spCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgICAgICAjIGJlIGhhcHB5IGlmIHNvbWVvbmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBwYXRoCi0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcGFzcwogICAgICAgICBjZGlyID0gY3VyZGlyCiAgICAgICAgIGlmIGlzaW5zdGFuY2UodGFpbCwgYnl0ZXMpOgogICAgICAgICAgICAgY2RpciA9IGJ5dGVzKGN1cmRpciwgJ0FTQ0lJJykKQEAgLTMwMiw3ICsyNzcsNyBAQAogICAgIHdoaWxlIGhlYWQgYW5kIHRhaWw6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJtZGlyKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBicmVhawogICAgICAgICBoZWFkLCB0YWlsID0gcGF0aC5zcGxpdChoZWFkKQogCkBAIC0zMjksNyArMzA0LDcgQEAKICAgICBpZiBoZWFkIGFuZCB0YWlsOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZW1vdmVkaXJzKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKIF9fYWxsX18uZXh0ZW5kKFsibWFrZWRpcnMiLCAicmVtb3ZlZGlycyIsICJyZW5hbWVzIl0pCkBAIC0zNjUsNyArMzQwLDcgQEAKIAogICAgIEJ5IGRlZmF1bHQgZXJyb3JzIGZyb20gdGhlIG9zLmxpc3RkaXIoKSBjYWxsIGFyZSBpZ25vcmVkLiAgSWYKICAgICBvcHRpb25hbCBhcmcgJ29uZXJyb3InIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgZnVuY3Rpb247IGl0Ci0gICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIG9zLmVycm9yIGluc3RhbmNlLiAgSXQgY2FuCisgICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIE9TRXJyb3IgaW5zdGFuY2UuICBJdCBjYW4KICAgICByZXBvcnQgdGhlIGVycm9yIHRvIGNvbnRpbnVlIHdpdGggdGhlIHdhbGssIG9yIHJhaXNlIHRoZSBleGNlcHRpb24KICAgICB0byBhYm9ydCB0aGUgd2Fsay4gIE5vdGUgdGhhdCB0aGUgZmlsZW5hbWUgaXMgYXZhaWxhYmxlIGFzIHRoZQogICAgIGZpbGVuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdC4KQEAgLTM5OSwxMCArMzc0LDEwIEBACiAgICAgIyBtaW5vciByZWFzb24gd2hlbiAoc2F5KSBhIHRob3VzYW5kIHJlYWRhYmxlIGRpcmVjdG9yaWVzIGFyZSBzdGlsbAogICAgICMgbGVmdCB0byB2aXNpdC4gIFRoYXQgbG9naWMgaXMgY29waWVkIGhlcmUuCiAgICAgdHJ5OgotICAgICAgICAjIE5vdGUgdGhhdCBsaXN0ZGlyIGFuZCBlcnJvciBhcmUgZ2xvYmFscyBpbiB0aGlzIG1vZHVsZSBkdWUKKyAgICAgICAgIyBOb3RlIHRoYXQgbGlzdGRpciBpcyBnbG9iYWwgaW4gdGhpcyBtb2R1bGUgZHVlCiAgICAgICAgICMgdG8gZWFybGllciBpbXBvcnQtKi4KICAgICAgICAgbmFtZXMgPSBsaXN0ZGlyKHRvcCkKLSAgICBleGNlcHQgZXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIG9uZXJyb3IoZXJyKQogICAgICAgICByZXR1cm4KQEAgLTUwNCw3ICs0NzksNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9yaWdfc3QgPSBzdGF0KG5hbWUsIGRpcl9mZD10b3BmZCwgZm9sbG93X3N5bWxpbmtzPWZvbGxvd19zeW1saW5rcykKICAgICAgICAgICAgICAgICBkaXJmZCA9IG9wZW4obmFtZSwgT19SRE9OTFksIGRpcl9mZD10b3BmZCkKLSAgICAgICAgICAgIGV4Y2VwdCBlcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCkBAIC01OTksNyArNTc0LDcgQEAKICAgICAgICAgZnVsbG5hbWUgPSBwYXRoLmpvaW4oZGlyLCBmaWxlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjX2Z1bmMoZnVsbG5hbWUsICphcmdyZXN0KQotICAgICAgICBleGNlcHQgZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGxhc3RfZXhjID0gZQogICAgICAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXQogICAgICAgICAgICAgaWYgKGUuZXJybm8gIT0gZXJybm8uRU5PRU5UIGFuZCBlLmVycm5vICE9IGVycm5vLkVOT1RESVIKQEAgLTY1Niw3ICs2MzEsNyBAQAogCiAKICMgQ2hhbmdlIGVudmlyb24gdG8gYXV0b21hdGljYWxseSBjYWxsIHB1dGVudigpLCB1bnNldGVudiBpZiB0aGV5IGV4aXN0LgotZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IE11dGFibGVNYXBwaW5nCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IE11dGFibGVNYXBwaW5nCiAKIGNsYXNzIF9FbnZpcm9uKE11dGFibGVNYXBwaW5nKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgZW5jb2Rla2V5LCBkZWNvZGVrZXksIGVuY29kZXZhbHVlLCBkZWNvZGV2YWx1ZSwgcHV0ZW52LCB1bnNldGVudik6CkBAIC03MTYsMTcgKzY5MSwxOSBAQAogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBfcHV0ZW52ID0gbGFtYmRhIGtleSwgdmFsdWU6IE5vbmUKIGVsc2U6Ci0gICAgX19hbGxfXy5hcHBlbmQoInB1dGVudiIpCisgICAgaWYgInB1dGVudiIgbm90IGluIF9fYWxsX186CisgICAgICAgIF9fYWxsX18uYXBwZW5kKCJwdXRlbnYiKQogCiB0cnk6CiAgICAgX3Vuc2V0ZW52ID0gdW5zZXRlbnYKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgX3Vuc2V0ZW52ID0gbGFtYmRhIGtleTogX3B1dGVudihrZXksICIiKQogZWxzZToKLSAgICBfX2FsbF9fLmFwcGVuZCgidW5zZXRlbnYiKQorICAgIGlmICJ1bnNldGVudiIgbm90IGluIF9fYWxsX186CisgICAgICAgIF9fYWxsX18uYXBwZW5kKCJ1bnNldGVudiIpCiAKIGRlZiBfY3JlYXRlZW52aXJvbigpOgotICAgIGlmIG5hbWUgaW4gKCdvczInLCAnbnQnKToKKyAgICBpZiBuYW1lID09ICdudCc6CiAgICAgICAgICMgV2hlcmUgRW52IFZhciBOYW1lcyBNdXN0IEJlIFVQUEVSQ0FTRQogICAgICAgICBkZWYgY2hlY2tfc3RyKHZhbHVlKToKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgpAQCAtNzY2LDcgKzc0Myw3IEBACiAgICAga2V5LCBkZWZhdWx0IGFuZCB0aGUgcmVzdWx0IGFyZSBzdHIuIiIiCiAgICAgcmV0dXJuIGVudmlyb24uZ2V0KGtleSwgZGVmYXVsdCkKIAotc3VwcG9ydHNfYnl0ZXNfZW52aXJvbiA9IG5hbWUgbm90IGluICgnb3MyJywgJ250JykKK3N1cHBvcnRzX2J5dGVzX2Vudmlyb24gPSAobmFtZSAhPSAnbnQnKQogX19hbGxfXy5leHRlbmQoKCJnZXRlbnYiLCAic3VwcG9ydHNfYnl0ZXNfZW52aXJvbiIpKQogCiBpZiBzdXBwb3J0c19ieXRlc19lbnZpcm9uOgpAQCAtODY1LDcgKzg0Miw3IEBACiAgICAgICAgICAgICAgICAgZWxpZiBXSUZFWElURUQoc3RzKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdFWElUU1RBVFVTKHN0cykKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiTm90IHN0b3BwZWQsIHNpZ25hbGVkIG9yIGV4aXRlZD8/PyIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIk5vdCBzdG9wcGVkLCBzaWduYWxlZCBvciBleGl0ZWQ/Pz8iKQogCiAgICAgZGVmIHNwYXdudihtb2RlLCBmaWxlLCBhcmdzKToKICAgICAgICAgIiIic3Bhd252KG1vZGUsIGZpbGUsIGFyZ3MpIC0+IGludGVnZXIKQEAgLTkwOCw2ICs4ODUsMTAgQEAKIG90aGVyd2lzZSByZXR1cm4gLVNJRywgd2hlcmUgU0lHIGlzIHRoZSBzaWduYWwgdGhhdCBraWxsZWQgaXQuICIiIgogICAgICAgICByZXR1cm4gX3NwYXdudmVmKG1vZGUsIGZpbGUsIGFyZ3MsIGVudiwgZXhlY3ZwZSkKIAorCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bnYiLCAic3Bhd252ZSIsICJzcGF3bnZwIiwgInNwYXdudnBlIl0pCisKKwogaWYgX2V4aXN0cygic3Bhd252Iik6CiAgICAgIyBUaGVzZSBhcmVuJ3Qgc3VwcGxpZWQgYnkgdGhlIGJhc2ljIFdpbmRvd3MgY29kZQogICAgICMgYnV0IGNhbiBiZSBlYXNpbHkgaW1wbGVtZW50ZWQgaW4gUHl0aG9uCkBAIC05MzMsNyArOTE0LDcgQEAKICAgICAgICAgcmV0dXJuIHNwYXdudmUobW9kZSwgZmlsZSwgYXJnc1s6LTFdLCBlbnYpCiAKIAotICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd252IiwgInNwYXdudmUiLCAic3Bhd25sIiwgInNwYXdubGUiLF0pCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bmwiLCAic3Bhd25sZSJdKQogCiAKIGlmIF9leGlzdHMoInNwYXdudnAiKToKQEAgLTk2MSwzNCArOTQyLDggQEAKICAgICAgICAgcmV0dXJuIHNwYXdudnBlKG1vZGUsIGZpbGUsIGFyZ3NbOi0xXSwgZW52KQogCiAKLSAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdudnAiLCAic3Bhd252cGUiLCAic3Bhd25scCIsICJzcGF3bmxwZSIsXSkKKyAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdubHAiLCAic3Bhd25scGUiXSkKIAotaW1wb3J0IGNvcHlyZWcgYXMgX2NvcHlyZWcKLQotZGVmIF9tYWtlX3N0YXRfcmVzdWx0KHR1cCwgZGljdCk6Ci0gICAgcmV0dXJuIHN0YXRfcmVzdWx0KHR1cCwgZGljdCkKLQotZGVmIF9waWNrbGVfc3RhdF9yZXN1bHQoc3IpOgotICAgICh0eXBlLCBhcmdzKSA9IHNyLl9fcmVkdWNlX18oKQotICAgIHJldHVybiAoX21ha2Vfc3RhdF9yZXN1bHQsIGFyZ3MpCi0KLXRyeToKLSAgICBfY29weXJlZy5waWNrbGUoc3RhdF9yZXN1bHQsIF9waWNrbGVfc3RhdF9yZXN1bHQsIF9tYWtlX3N0YXRfcmVzdWx0KQotZXhjZXB0IE5hbWVFcnJvcjogIyBzdGF0X3Jlc3VsdCBtYXkgbm90IGV4aXN0Ci0gICAgcGFzcwotCi1kZWYgX21ha2Vfc3RhdHZmc19yZXN1bHQodHVwLCBkaWN0KToKLSAgICByZXR1cm4gc3RhdHZmc19yZXN1bHQodHVwLCBkaWN0KQotCi1kZWYgX3BpY2tsZV9zdGF0dmZzX3Jlc3VsdChzcik6Ci0gICAgKHR5cGUsIGFyZ3MpID0gc3IuX19yZWR1Y2VfXygpCi0gICAgcmV0dXJuIChfbWFrZV9zdGF0dmZzX3Jlc3VsdCwgYXJncykKLQotdHJ5OgotICAgIF9jb3B5cmVnLnBpY2tsZShzdGF0dmZzX3Jlc3VsdCwgX3BpY2tsZV9zdGF0dmZzX3Jlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgIF9tYWtlX3N0YXR2ZnNfcmVzdWx0KQotZXhjZXB0IE5hbWVFcnJvcjogIyBzdGF0dmZzX3Jlc3VsdCBtYXkgbm90IGV4aXN0Ci0gICAgcGFzcwogCiAjIFN1cHBseSBvcy5wb3BlbigpCiBkZWYgcG9wZW4oY21kLCBtb2RlPSJyIiwgYnVmZmVyaW5nPS0xKToKZGlmZiAtLWdpdCBhL0xpYi9vczJlbXhwYXRoLnB5IGIvTGliL29zMmVteHBhdGgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjY2JmOGEuLjAwMDAwMDAKLS0tIGEvTGliL29zMmVteHBhdGgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotIyBNb2R1bGUgJ29zMmVteHBhdGgnIC0tIGNvbW1vbiBvcGVyYXRpb25zIG9uIE9TLzIgcGF0aG5hbWVzCi0iIiJDb21tb24gcGF0aG5hbWUgbWFuaXB1bGF0aW9ucywgT1MvMiBFTVggdmVyc2lvbi4KLQotSW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUgZGlyZWN0bHksIGltcG9ydCBvcyBhbmQgcmVmZXIgdG8gdGhpcwotbW9kdWxlIGFzIG9zLnBhdGguCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3RhdAotZnJvbSBnZW5lcmljcGF0aCBpbXBvcnQgKgotZnJvbSBudHBhdGggaW1wb3J0IChleHBhbmR1c2VyLCBleHBhbmR2YXJzLCBpc2FicywgaXNsaW5rLCBzcGxpdGRyaXZlLAotICAgICAgICAgICAgICAgICAgICBzcGxpdGV4dCwgc3BsaXQpCi0KLV9fYWxsX18gPSBbIm5vcm1jYXNlIiwiaXNhYnMiLCJqb2luIiwic3BsaXRkcml2ZSIsInNwbGl0Iiwic3BsaXRleHQiLAotICAgICAgICAgICAiYmFzZW5hbWUiLCJkaXJuYW1lIiwiY29tbW9ucHJlZml4IiwiZ2V0c2l6ZSIsImdldG10aW1lIiwKLSAgICAgICAgICAgImdldGF0aW1lIiwiZ2V0Y3RpbWUiLCAiaXNsaW5rIiwiZXhpc3RzIiwibGV4aXN0cyIsImlzZGlyIiwiaXNmaWxlIiwKLSAgICAgICAgICAgImlzbW91bnQiLCJleHBhbmR1c2VyIiwiZXhwYW5kdmFycyIsIm5vcm1wYXRoIiwiYWJzcGF0aCIsCi0gICAgICAgICAgICJzcGxpdHVuYyIsImN1cmRpciIsInBhcmRpciIsInNlcCIsInBhdGhzZXAiLCJkZWZwYXRoIiwiYWx0c2VwIiwKLSAgICAgICAgICAgImV4dHNlcCIsImRldm51bGwiLCJyZWFscGF0aCIsInN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzIl0KLQotIyBzdHJpbmdzIHJlcHJlc2VudGluZyB2YXJpb3VzIHBhdGgtcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMKLWN1cmRpciA9ICcuJwotcGFyZGlyID0gJy4uJwotZXh0c2VwID0gJy4nCi1zZXAgPSAnLycKLWFsdHNlcCA9ICdcXCcKLXBhdGhzZXAgPSAnOycKLWRlZnBhdGggPSAnLjtDOlxcYmluJwotZGV2bnVsbCA9ICdudWwnCi0KLSMgTm9ybWFsaXplIHRoZSBjYXNlIG9mIGEgcGF0aG5hbWUgYW5kIG1hcCBzbGFzaGVzIHRvIGJhY2tzbGFzaGVzLgotIyBPdGhlciBub3JtYWxpemF0aW9ucyAoc3VjaCBhcyBvcHRpbWl6aW5nICcuLi8nIGF3YXkpIGFyZSBub3QgZG9uZQotIyAodGhpcyBpcyBkb25lIGJ5IG5vcm1wYXRoKS4KLQotZGVmIG5vcm1jYXNlKHMpOgotICAgICIiIk5vcm1hbGl6ZSBjYXNlIG9mIHBhdGhuYW1lLgotCi0gICAgTWFrZXMgYWxsIGNoYXJhY3RlcnMgbG93ZXJjYXNlIGFuZCBhbGwgYWx0c2VwcyBpbnRvIHNlcHMuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgKGJ5dGVzLCBzdHIpKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJub3JtY2FzZSgpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAibm90ICd7fSciLmZvcm1hdChzLl9fY2xhc3NfXy5fX25hbWVfXykpCi0gICAgcmV0dXJuIHMucmVwbGFjZSgnXFwnLCAnLycpLmxvd2VyKCkKLQotCi0jIEpvaW4gdHdvIChvciBtb3JlKSBwYXRocy4KLQotZGVmIGpvaW4oYSwgKnApOgotICAgICIiIkpvaW4gdHdvIG9yIG1vcmUgcGF0aG5hbWUgY29tcG9uZW50cywgaW5zZXJ0aW5nIHNlcCBhcyBuZWVkZWQiIiIKLSAgICBwYXRoID0gYQotICAgIGZvciBiIGluIHA6Ci0gICAgICAgIGlmIGlzYWJzKGIpOgotICAgICAgICAgICAgcGF0aCA9IGIKLSAgICAgICAgZWxpZiBwYXRoID09ICcnIG9yIHBhdGhbLTE6XSBpbiAnL1xcOic6Ci0gICAgICAgICAgICBwYXRoID0gcGF0aCArIGIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhdGggPSBwYXRoICsgJy8nICsgYgotICAgIHJldHVybiBwYXRoCi0KLQotIyBQYXJzZSBVTkMgcGF0aHMKLWRlZiBzcGxpdHVuYyhwKToKLSAgICAiIiJTcGxpdCBhIHBhdGhuYW1lIGludG8gVU5DIG1vdW50IHBvaW50IGFuZCByZWxhdGl2ZSBwYXRoIHNwZWNpZmllcnMuCi0KLSAgICBSZXR1cm4gYSAyLXR1cGxlICh1bmMsIHJlc3QpOyBlaXRoZXIgcGFydCBtYXkgYmUgZW1wdHkuCi0gICAgSWYgdW5jIGlzIG5vdCBlbXB0eSwgaXQgaGFzIHRoZSBmb3JtICcvL2hvc3QvbW91bnQnIChvciBzaW1pbGFyCi0gICAgdXNpbmcgYmFja3NsYXNoZXMpLiAgdW5jK3Jlc3QgaXMgYWx3YXlzIHRoZSBpbnB1dCBwYXRoLgotICAgIFBhdGhzIGNvbnRhaW5pbmcgZHJpdmUgbGV0dGVycyBuZXZlciBoYXZlIGFuIFVOQyBwYXJ0LgotICAgICIiIgotICAgIGlmIHBbMToyXSA9PSAnOic6Ci0gICAgICAgIHJldHVybiAnJywgcCAjIERyaXZlIGxldHRlciBwcmVzZW50Ci0gICAgZmlyc3RUd28gPSBwWzA6Ml0KLSAgICBpZiBmaXJzdFR3byA9PSAnLycgKiAyIG9yIGZpcnN0VHdvID09ICdcXCcgKiAyOgotICAgICAgICAjIGlzIGEgVU5DIHBhdGg6Ci0gICAgICAgICMgdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYgZXF1aXZhbGVudCB0byBkcml2ZSBsZXR0ZXIKLSAgICAgICAgIyBcXG1hY2hpbmVcbW91bnRwb2ludFxkaXJlY3Rvcmllcy4uLgotICAgICAgICAjICAgICAgICAgICBkaXJlY3RvcnkgXl5eXl5eXl5eXl5eXl5eCi0gICAgICAgIG5vcm1wID0gbm9ybWNhc2UocCkKLSAgICAgICAgaW5kZXggPSBub3JtcC5maW5kKCcvJywgMikKLSAgICAgICAgaWYgaW5kZXggPT0gLTE6Ci0gICAgICAgICAgICAjI3JhaXNlIFJ1bnRpbWVFcnJvciwgJ2lsbGVnYWwgVU5DIHBhdGg6ICInICsgcCArICciJwotICAgICAgICAgICAgcmV0dXJuICgiIiwgcCkKLSAgICAgICAgaW5kZXggPSBub3JtcC5maW5kKCcvJywgaW5kZXggKyAxKQotICAgICAgICBpZiBpbmRleCA9PSAtMToKLSAgICAgICAgICAgIGluZGV4ID0gbGVuKHApCi0gICAgICAgIHJldHVybiBwWzppbmRleF0sIHBbaW5kZXg6XQotICAgIHJldHVybiAnJywgcAotCi0KLSMgUmV0dXJuIHRoZSB0YWlsIChiYXNlbmFtZSkgcGFydCBvZiBhIHBhdGguCi0KLWRlZiBiYXNlbmFtZShwKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmaW5hbCBjb21wb25lbnQgb2YgYSBwYXRobmFtZSIiIgotICAgIHJldHVybiBzcGxpdChwKVsxXQotCi0KLSMgUmV0dXJuIHRoZSBoZWFkIChkaXJuYW1lKSBwYXJ0IG9mIGEgcGF0aC4KLQotZGVmIGRpcm5hbWUocCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBvZiBhIHBhdGhuYW1lIiIiCi0gICAgcmV0dXJuIHNwbGl0KHApWzBdCi0KLQotIyBhbGlhcyBleGlzdHMgdG8gbGV4aXN0cwotbGV4aXN0cyA9IGV4aXN0cwotCi0KLSMgSXMgYSBwYXRoIGEgZGlyZWN0b3J5PwotCi0jIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PyAgRWl0aGVyIGEgcm9vdCAod2l0aCBvciB3aXRob3V0IGRyaXZlIGxldHRlcikKLSMgb3IgYW4gVU5DIHBhdGggd2l0aCBhdCBtb3N0IGEgLyBvciBcIGFmdGVyIHRoZSBtb3VudCBwb2ludC4KLQotZGVmIGlzbW91bnQocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChkZWZpbmVkIGFzIHJvb3Qgb2YgZHJpdmUpIiIiCi0gICAgdW5jLCByZXN0ID0gc3BsaXR1bmMocGF0aCkKLSAgICBpZiB1bmM6Ci0gICAgICAgIHJldHVybiByZXN0IGluICgiIiwgIi8iLCAiXFwiKQotICAgIHAgPSBzcGxpdGRyaXZlKHBhdGgpWzFdCi0gICAgcmV0dXJuIGxlbihwKSA9PSAxIGFuZCBwWzBdIGluICcvXFwnCi0KLQotIyBOb3JtYWxpemUgYSBwYXRoLCBlLmcuIEEvL0IsIEEvLi9CIGFuZCBBL2Zvby8uLi9CIGFsbCBiZWNvbWUgQS9CLgotCi1kZWYgbm9ybXBhdGgocGF0aCk6Ci0gICAgIiIiTm9ybWFsaXplIHBhdGgsIGVsaW1pbmF0aW5nIGRvdWJsZSBzbGFzaGVzLCBldGMuIiIiCi0gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCi0gICAgcHJlZml4LCBwYXRoID0gc3BsaXRkcml2ZShwYXRoKQotICAgIHdoaWxlIHBhdGhbOjFdID09ICcvJzoKLSAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgJy8nCi0gICAgICAgIHBhdGggPSBwYXRoWzE6XQotICAgIGNvbXBzID0gcGF0aC5zcGxpdCgnLycpCi0gICAgaSA9IDAKLSAgICB3aGlsZSBpIDwgbGVuKGNvbXBzKToKLSAgICAgICAgaWYgY29tcHNbaV0gPT0gJy4nOgotICAgICAgICAgICAgZGVsIGNvbXBzW2ldCi0gICAgICAgIGVsaWYgY29tcHNbaV0gPT0gJy4uJyBhbmQgaSA+IDAgYW5kIGNvbXBzW2ktMV0gbm90IGluICgnJywgJy4uJyk6Ci0gICAgICAgICAgICBkZWwgY29tcHNbaS0xOmkrMV0KLSAgICAgICAgICAgIGkgPSBpIC0gMQotICAgICAgICBlbGlmIGNvbXBzW2ldID09ICcnIGFuZCBpID4gMCBhbmQgY29tcHNbaS0xXSAhPSAnJzoKLSAgICAgICAgICAgIGRlbCBjb21wc1tpXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaSA9IGkgKyAxCi0gICAgIyBJZiB0aGUgcGF0aCBpcyBub3cgZW1wdHksIHN1YnN0aXR1dGUgJy4nCi0gICAgaWYgbm90IHByZWZpeCBhbmQgbm90IGNvbXBzOgotICAgICAgICBjb21wcy5hcHBlbmQoJy4nKQotICAgIHJldHVybiBwcmVmaXggKyAnLycuam9pbihjb21wcykKLQotCi0jIFJldHVybiBhbiBhYnNvbHV0ZSBwYXRoLgotZGVmIGFic3BhdGgocGF0aCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSB2ZXJzaW9uIG9mIGEgcGF0aCIiIgotICAgIGlmIG5vdCBpc2FicyhwYXRoKToKLSAgICAgICAgcGF0aCA9IGpvaW4ob3MuZ2V0Y3dkKCksIHBhdGgpCi0gICAgcmV0dXJuIG5vcm1wYXRoKHBhdGgpCi0KLSMgcmVhbHBhdGggaXMgYSBuby1vcCBvbiBzeXN0ZW1zIHdpdGhvdXQgaXNsaW5rIHN1cHBvcnQKLXJlYWxwYXRoID0gYWJzcGF0aAotCi1zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvcGRiLnB5IGIvTGliL3BkYi5weQppbmRleCA4MGNiYTlkLi4yMjY4ZDMwIDEwMDc1NQotLS0gYS9MaWIvcGRiLnB5CisrKyBiL0xpYi9wZGIucHkKQEAgLTkyLDIxICs5MiwxNCBAQAogICAgIGNyZSA9IHJlLmNvbXBpbGUocidkZWZccyslc1xzKlsoXScgJSByZS5lc2NhcGUoZnVuY25hbWUpKQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gTm9uZQogICAgICMgY29uc3VtZXIgb2YgdGhpcyBpbmZvIGV4cGVjdHMgdGhlIGZpcnN0IGxpbmUgdG8gYmUgMQotICAgIGxpbmVubyA9IDEKLSAgICBhbnN3ZXIgPSBOb25lCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbGluZSA9PSAnJzoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIGNyZS5tYXRjaChsaW5lKToKLSAgICAgICAgICAgIGFuc3dlciA9IGZ1bmNuYW1lLCBmaWxlbmFtZSwgbGluZW5vCi0gICAgICAgICAgICBicmVhawotICAgICAgICBsaW5lbm8gKz0gMQotICAgIGZwLmNsb3NlKCkKLSAgICByZXR1cm4gYW5zd2VyCisgICAgd2l0aCBmcDoKKyAgICAgICAgZm9yIGxpbmVubywgbGluZSBpbiBlbnVtZXJhdGUoZnAsIHN0YXJ0PTEpOgorICAgICAgICAgICAgaWYgY3JlLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jbmFtZSwgZmlsZW5hbWUsIGxpbmVubworICAgIHJldHVybiBOb25lCiAKIGRlZiBnZXRzb3VyY2VsaW5lcyhvYmopOgogICAgIGxpbmVzLCBsaW5lbm8gPSBpbnNwZWN0LmZpbmRzb3VyY2Uob2JqKQpAQCAtMTcwLDEyICsxNjMsMTIgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGVudkhvbWUsICIucGRicmMiKSkgYXMgcmNGaWxlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnJjTGluZXMuZXh0ZW5kKHJjRmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIG9wZW4oIi5wZGJyYyIpIGFzIHJjRmlsZToKICAgICAgICAgICAgICAgICBzZWxmLnJjTGluZXMuZXh0ZW5kKHJjRmlsZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIHNlbGYuY29tbWFuZHMgPSB7fSAjIGFzc29jaWF0ZXMgYSBjb21tYW5kIGxpc3QgdG8gYnJlYWtwb2ludCBudW1iZXJzCkBAIC0xMTYzLDE1ICsxMTU2LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gX3JzdHIoJyoqIHJhaXNlZCAlcyAqKicgJSBlcnIpCiAKICAgICBkZWYgZG9fcChzZWxmLCBhcmcpOgotICAgICAgICAiIiJwKHJpbnQpIGV4cHJlc3Npb24KKyAgICAgICAgIiIicCBleHByZXNzaW9uCiAgICAgICAgIFByaW50IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4KICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYubWVzc2FnZShyZXByKHNlbGYuX2dldHZhbChhcmcpKSkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwotICAgICMgbWFrZSAicHJpbnQiIGFuIGFsaWFzIG9mICJwIiBzaW5jZSBwcmludCBpc24ndCBhIFB5dGhvbiBzdGF0ZW1lbnQgYW55bW9yZQotICAgIGRvX3ByaW50ID0gZG9fcAogCiAgICAgZGVmIGRvX3BwKHNlbGYsIGFyZyk6CiAgICAgICAgICIiInBwIGV4cHJlc3Npb24KQEAgLTEyNDUsNyArMTIzNiw3IEBACiAgICAgICAgIGJyZWFrbGlzdCA9IHNlbGYuZ2V0X2ZpbGVfYnJlYWtzKGZpbGVuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbGluZW5vID0gZ2V0c291cmNlbGluZXMoc2VsZi5jdXJmcmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLl9wcmludF9saW5lcyhsaW5lcywgbGluZW5vLCBicmVha2xpc3QsIHNlbGYuY3VyZnJhbWUpCkBAIC0xMjYxLDcgKzEyNTIsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpbmVzLCBsaW5lbm8gPSBnZXRzb3VyY2VsaW5lcyhvYmopCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVHlwZUVycm9yKSBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVHlwZUVycm9yKSBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLl9wcmludF9saW5lcyhsaW5lcywgbGluZW5vKQpAQCAtMTM5Miw3ICsxMzgzLDcgQEAKICAgICAgICAgcGxhY2VkIGluIHRoZSAucGRicmMgZmlsZSk6CiAKICAgICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKQotICAgICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50ICIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdCisgICAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQoIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10pCiAgICAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGYKICAgICAgICAgYWxpYXMgcHMgcGkgc2VsZgogICAgICAgICAiIiIKQEAgLTE1NTAsNyArMTU0MSw3IEBACiAgICAgICAgICdoZWxwJywgJ3doZXJlJywgJ2Rvd24nLCAndXAnLCAnYnJlYWsnLCAndGJyZWFrJywgJ2NsZWFyJywgJ2Rpc2FibGUnLAogICAgICAgICAnZW5hYmxlJywgJ2lnbm9yZScsICdjb25kaXRpb24nLCAnY29tbWFuZHMnLCAnc3RlcCcsICduZXh0JywgJ3VudGlsJywKICAgICAgICAgJ2p1bXAnLCAncmV0dXJuJywgJ3JldHZhbCcsICdydW4nLCAnY29udGludWUnLCAnbGlzdCcsICdsb25nbGlzdCcsCi0gICAgICAgICdhcmdzJywgJ3ByaW50JywgJ3BwJywgJ3doYXRpcycsICdzb3VyY2UnLCAnZGlzcGxheScsICd1bmRpc3BsYXknLAorICAgICAgICAnYXJncycsICdwJywgJ3BwJywgJ3doYXRpcycsICdzb3VyY2UnLCAnZGlzcGxheScsICd1bmRpc3BsYXknLAogICAgICAgICAnaW50ZXJhY3QnLCAnYWxpYXMnLCAndW5hbGlhcycsICdkZWJ1ZycsICdxdWl0JywKICAgICBdCiAKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGUucHkgYi9MaWIvcGlja2xlLnB5CmluZGV4IGQ2MmYwMTQuLmRiYzE5NmEgMTAwNjQ0Ci0tLSBhL0xpYi9waWNrbGUucHkKKysrIGIvTGliL3BpY2tsZS5weQpAQCAtMjYsOSArMjYsMTAgQEAKIGZyb20gdHlwZXMgaW1wb3J0IEZ1bmN0aW9uVHlwZSwgQnVpbHRpbkZ1bmN0aW9uVHlwZQogZnJvbSBjb3B5cmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQogZnJvbSBjb3B5cmVnIGltcG9ydCBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LCBfaW52ZXJ0ZWRfcmVnaXN0cnksIF9leHRlbnNpb25fY2FjaGUKLWltcG9ydCBtYXJzaGFsCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlCiBpbXBvcnQgc3lzCi1pbXBvcnQgc3RydWN0Citmcm9tIHN5cyBpbXBvcnQgbWF4c2l6ZQorZnJvbSBzdHJ1Y3QgaW1wb3J0IHBhY2ssIHVucGFjawogaW1wb3J0IHJlCiBpbXBvcnQgaW8KIGltcG9ydCBjb2RlY3MKQEAgLTU4LDExICs1OSw2IEBACiAjIHRoZXJlIGFyZSB0b28gbWFueSBpc3N1ZXMgd2l0aCB0aGF0LgogREVGQVVMVF9QUk9UT0NPTCA9IDMKIAotIyBXaHkgdXNlIHN0cnVjdC5wYWNrKCkgZm9yIHBpY2tsaW5nIGJ1dCBtYXJzaGFsLmxvYWRzKCkgZm9yCi0jIHVucGlja2xpbmc/ICBzdHJ1Y3QucGFjaygpIGlzIDQwJSBmYXN0ZXIgdGhhbiBtYXJzaGFsLmR1bXBzKCksIGJ1dAotIyBtYXJzaGFsLmxvYWRzKCkgaXMgdHdpY2UgYXMgZmFzdCBhcyBzdHJ1Y3QudW5wYWNrKCkhCi1tbG9hZHMgPSBtYXJzaGFsLmxvYWRzCi0KIGNsYXNzIFBpY2tsZUVycm9yKEV4Y2VwdGlvbik6CiAgICAgIiIiQSBjb21tb24gYmFzZSBjbGFzcyBmb3IgdGhlIG90aGVyIHBpY2tsaW5nIGV4Y2VwdGlvbnMuIiIiCiAgICAgcGFzcwpAQCAtMjMxLDcgKzIyNyw3IEBACiAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJQaWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMuX19pbml0X18oKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sKSkKICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgotICAgICAgICAgICAgc2VsZi53cml0ZShQUk9UTyArIGJ5dGVzKFtzZWxmLnByb3RvXSkpCisgICAgICAgICAgICBzZWxmLndyaXRlKFBST1RPICsgcGFjaygiPEIiLCBzZWxmLnByb3RvKSkKICAgICAgICAgc2VsZi5zYXZlKG9iaikKICAgICAgICAgc2VsZi53cml0ZShTVE9QKQogCkBAIC0yNTgsMjAgKzI1NCwyMCBAQAogICAgICAgICBzZWxmLm1lbW9baWQob2JqKV0gPSBtZW1vX2xlbiwgb2JqCiAKICAgICAjIFJldHVybiBhIFBVVCAoQklOUFVULCBMT05HX0JJTlBVVCkgb3Bjb2RlIHN0cmluZywgd2l0aCBhcmd1bWVudCBpLgotICAgIGRlZiBwdXQoc2VsZiwgaSwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHB1dChzZWxmLCBpKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICBpZiBpIDwgMjU2OgotICAgICAgICAgICAgICAgIHJldHVybiBCSU5QVVQgKyBieXRlcyhbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIEJJTlBVVCArIHBhY2soIjxCIiwgaSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIExPTkdfQklOUFVUICsgcGFjaygiPEkiLCBpKQogCiAgICAgICAgIHJldHVybiBQVVQgKyByZXByKGkpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nCiAKICAgICAjIFJldHVybiBhIEdFVCAoQklOR0VULCBMT05HX0JJTkdFVCkgb3Bjb2RlIHN0cmluZywgd2l0aCBhcmd1bWVudCBpLgotICAgIGRlZiBnZXQoc2VsZiwgaSwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIGdldChzZWxmLCBpKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICBpZiBpIDwgMjU2OgotICAgICAgICAgICAgICAgIHJldHVybiBCSU5HRVQgKyBieXRlcyhbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIEJJTkdFVCArIHBhY2soIjxCIiwgaSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIExPTkdfQklOR0VUICsgcGFjaygiPEkiLCBpKQogCkBAIC0yODYsMjAgKzI4MiwyMCBAQAogCiAgICAgICAgICMgQ2hlY2sgdGhlIG1lbW8KICAgICAgICAgeCA9IHNlbGYubWVtby5nZXQoaWQob2JqKSkKLSAgICAgICAgaWYgeDoKKyAgICAgICAgaWYgeCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYud3JpdGUoc2VsZi5nZXQoeFswXSkpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIENoZWNrIHRoZSB0eXBlIGRpc3BhdGNoIHRhYmxlCiAgICAgICAgIHQgPSB0eXBlKG9iaikKICAgICAgICAgZiA9IHNlbGYuZGlzcGF0Y2guZ2V0KHQpCi0gICAgICAgIGlmIGY6CisgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmKHNlbGYsIG9iaikgIyBDYWxsIHVuYm91bmQgbWV0aG9kIHdpdGggZXhwbGljaXQgc2VsZgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBDaGVjayBwcml2YXRlIGRpc3BhdGNoIHRhYmxlIGlmIGFueSwgb3IgZWxzZSBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlCiAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIoc2VsZiwgJ2Rpc3BhdGNoX3RhYmxlJywgZGlzcGF0Y2hfdGFibGUpLmdldCh0KQotICAgICAgICBpZiByZWR1Y2U6CisgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKG9iaikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgY2xhc3Mgd2l0aCBhIGN1c3RvbSBtZXRhY2xhc3M7IHRyZWF0IGFzIHJlZ3VsYXIgY2xhc3MKQEAgLTMxMywxMSArMzA5LDExIEBACiAKICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgX19yZWR1Y2VfZXhfXyBtZXRob2QsIGZhbGwgYmFjayB0byBfX3JlZHVjZV9fCiAgICAgICAgICAgICByZWR1Y2UgPSBnZXRhdHRyKG9iaiwgIl9fcmVkdWNlX2V4X18iLCBOb25lKQotICAgICAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICAgICAgaWYgcmVkdWNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKHNlbGYucHJvdG8pCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIob2JqLCAiX19yZWR1Y2VfXyIsIE5vbmUpCi0gICAgICAgICAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICAgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcnYgPSByZWR1Y2UoKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoIkNhbid0IHBpY2tsZSAlciBvYmplY3Q6ICVyIiAlCkBAIC00NDgsMTIgKzQ0NCwxMiBAQAogCiAgICAgZGVmIHNhdmVfYm9vbChzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKG9iaiBhbmQgTkVXVFJVRSBvciBORVdGQUxTRSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoTkVXVFJVRSBpZiBvYmogZWxzZSBORVdGQUxTRSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYud3JpdGUob2JqIGFuZCBUUlVFIG9yIEZBTFNFKQorICAgICAgICAgICAgc2VsZi53cml0ZShUUlVFIGlmIG9iaiBlbHNlIEZBTFNFKQogICAgIGRpc3BhdGNoW2Jvb2xdID0gc2F2ZV9ib29sCiAKLSAgICBkZWYgc2F2ZV9sb25nKHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfbG9uZyhzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgICMgSWYgdGhlIGludCBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2lnbmVkIDQtYnl0ZSAyJ3MtY29tcAogICAgICAgICAgICAgIyBmb3JtYXQsIHdlIGNhbiBzdG9yZSBpdCBtb3JlIGVmZmljaWVudGx5IHRoYW4gdGhlIGdlbmVyYWwKQEAgLTQ2MSwzOSArNDU3LDM2IEBACiAgICAgICAgICAgICAjIEZpcnN0IG9uZS0gYW5kIHR3by1ieXRlIHVuc2lnbmVkIGludHM6CiAgICAgICAgICAgICBpZiBvYmogPj0gMDoKICAgICAgICAgICAgICAgICBpZiBvYmogPD0gMHhmZjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQxICsgYnl0ZXMoW29ial0pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDEgKyBwYWNrKCI8QiIsIG9iaikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIG9iaiA8PSAweGZmZmY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMiArIGJ5dGVzKFtvYmomMHhmZiwgb2JqPj44XSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMiArIHBhY2soIjxIIiwgb2JqKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAjIE5leHQgY2hlY2sgZm9yIDQtYnl0ZSBzaWduZWQgaW50czoKLSAgICAgICAgICAgIGhpZ2hfYml0cyA9IG9iaiA+PiAzMSAgIyBub3RlIHRoYXQgUHl0aG9uIHNoaWZ0IHNpZ24tZXh0ZW5kcwotICAgICAgICAgICAgaWYgaGlnaF9iaXRzID09IDAgb3IgaGlnaF9iaXRzID09IC0xOgotICAgICAgICAgICAgICAgICMgQWxsIGhpZ2ggYml0cyBhcmUgY29waWVzIG9mIGJpdCAyKiozMSwgc28gdGhlIHZhbHVlCi0gICAgICAgICAgICAgICAgIyBmaXRzIGluIGEgNC1ieXRlIHNpZ25lZCBpbnQuCisgICAgICAgICAgICBpZiAtMHg4MDAwMDAwMCA8PSBvYmogPD0gMHg3ZmZmZmZmZjoKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVCArIHBhY2soIjxpIiwgb2JqKSkKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgogICAgICAgICAgICAgZW5jb2RlZCA9IGVuY29kZV9sb25nKG9iaikKICAgICAgICAgICAgIG4gPSBsZW4oZW5jb2RlZCkKICAgICAgICAgICAgIGlmIG4gPCAyNTY6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZShMT05HMSArIGJ5dGVzKFtuXSkgKyBlbmNvZGVkKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoTE9ORzEgKyBwYWNrKCI8QiIsIG4pICsgZW5jb2RlZCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShMT05HNCArIHBhY2soIjxpIiwgbikgKyBlbmNvZGVkKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYud3JpdGUoTE9ORyArIHJlcHIob2JqKS5lbmNvZGUoImFzY2lpIikgKyBiJ0xcbicpCiAgICAgZGlzcGF0Y2hbaW50XSA9IHNhdmVfbG9uZwogCi0gICAgZGVmIHNhdmVfZmxvYXQoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9mbG9hdChzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgIHNlbGYud3JpdGUoQklORkxPQVQgKyBwYWNrKCc+ZCcsIG9iaikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLndyaXRlKEZMT0FUICsgcmVwcihvYmopLmVuY29kZSgiYXNjaWkiKSArIGInXG4nKQogICAgIGRpc3BhdGNoW2Zsb2F0XSA9IHNhdmVfZmxvYXQKIAotICAgIGRlZiBzYXZlX2J5dGVzKHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfYnl0ZXMoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5wcm90byA8IDM6Ci0gICAgICAgICAgICBpZiBsZW4ob2JqKSA9PSAwOgorICAgICAgICAgICAgaWYgbm90IG9iajogIyBieXRlcyBvYmplY3QgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKGJ5dGVzLCAoKSwgb2JqPW9iaikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShjb2RlY3MuZW5jb2RlLApAQCAtNTAxLDEzICs0OTQsMTMgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBuID0gbGVuKG9iaikKICAgICAgICAgaWYgbiA8IDI1NjoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOQllURVMgKyBieXRlcyhbbl0pICsgYnl0ZXMob2JqKSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOQllURVMgKyBwYWNrKCI8QiIsIG4pICsgb2JqKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53cml0ZShCSU5CWVRFUyArIHBhY2soIjxJIiwgbikgKyBieXRlcyhvYmopKQorICAgICAgICAgICAgc2VsZi53cml0ZShCSU5CWVRFUyArIHBhY2soIjxJIiwgbikgKyBvYmopCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgZGlzcGF0Y2hbYnl0ZXNdID0gc2F2ZV9ieXRlcwogCi0gICAgZGVmIHNhdmVfc3RyKHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfc3RyKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgZW5jb2RlZCA9IG9iai5lbmNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKQogICAgICAgICAgICAgbiA9IGxlbihlbmNvZGVkKQpAQCAtNTE1LDM5ICs1MDgsMzYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9iaiA9IG9iai5yZXBsYWNlKCJcXCIsICJcXHUwMDVjIikKICAgICAgICAgICAgIG9iaiA9IG9iai5yZXBsYWNlKCJcbiIsICJcXHUwMDBhIikKLSAgICAgICAgICAgIHNlbGYud3JpdGUoVU5JQ09ERSArIGJ5dGVzKG9iai5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpKSArCi0gICAgICAgICAgICAgICAgICAgICAgIGInXG4nKQorICAgICAgICAgICAgc2VsZi53cml0ZShVTklDT0RFICsgb2JqLmVuY29kZSgncmF3LXVuaWNvZGUtZXNjYXBlJykgKyBiJ1xuJykKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICBkaXNwYXRjaFtzdHJdID0gc2F2ZV9zdHIKIAogICAgIGRlZiBzYXZlX3R1cGxlKHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotICAgICAgICBwcm90byA9IHNlbGYucHJvdG8KLQotICAgICAgICBuID0gbGVuKG9iaikKLSAgICAgICAgaWYgbiA9PSAwOgotICAgICAgICAgICAgaWYgcHJvdG86Ci0gICAgICAgICAgICAgICAgd3JpdGUoRU1QVFlfVFVQTEUpCisgICAgICAgIGlmIG5vdCBvYmo6ICMgdHVwbGUgaXMgZW1wdHkKKyAgICAgICAgICAgIGlmIHNlbGYuYmluOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfVFVQTEUpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdyaXRlKE1BUksgKyBUVVBMRSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKE1BUksgKyBUVVBMRSkKICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgIG4gPSBsZW4ob2JqKQogICAgICAgICBzYXZlID0gc2VsZi5zYXZlCiAgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KLSAgICAgICAgaWYgbiA8PSAzIGFuZCBwcm90byA+PSAyOgorICAgICAgICBpZiBuIDw9IDMgYW5kIHNlbGYucHJvdG8gPj0gMjoKICAgICAgICAgICAgIGZvciBlbGVtZW50IGluIG9iajoKICAgICAgICAgICAgICAgICBzYXZlKGVsZW1lbnQpCiAgICAgICAgICAgICAjIFN1YnRsZS4gIFNhbWUgYXMgaW4gdGhlIGJpZyBjb21tZW50IGJlbG93LgogICAgICAgICAgICAgaWYgaWQob2JqKSBpbiBtZW1vOgogICAgICAgICAgICAgICAgIGdldCA9IHNlbGYuZ2V0KG1lbW9baWQob2JqKV1bMF0pCi0gICAgICAgICAgICAgICAgd3JpdGUoUE9QICogbiArIGdldCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKFBPUCAqIG4gKyBnZXQpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdyaXRlKF90dXBsZXNpemUyY29kZVtuXSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKF90dXBsZXNpemUyY29kZVtuXSkKICAgICAgICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBwcm90byAwIG9yIHByb3RvIDEgYW5kIHR1cGxlIGlzbid0IGVtcHR5LCBvciBwcm90byA+IDEgYW5kIHR1cGxlCiAgICAgICAgICMgaGFzIG1vcmUgdGhhbiAzIGVsZW1lbnRzLgorICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKICAgICAgICAgd3JpdGUoTUFSSykKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gb2JqOgogICAgICAgICAgICAgc2F2ZShlbGVtZW50KQpAQCAtNTYxLDI1ICs1NTEsMjMgQEAKICAgICAgICAgICAgICMgY291bGQgaGF2ZSBiZWVuIGRvbmUgaW4gdGhlICJmb3IgZWxlbWVudCIgbG9vcCBpbnN0ZWFkLCBidXQKICAgICAgICAgICAgICMgcmVjdXJzaXZlIHR1cGxlcyBhcmUgYSByYXJlIHRoaW5nLgogICAgICAgICAgICAgZ2V0ID0gc2VsZi5nZXQobWVtb1tpZChvYmopXVswXSkKLSAgICAgICAgICAgIGlmIHByb3RvOgorICAgICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICAgICAgd3JpdGUoUE9QX01BUksgKyBnZXQpCiAgICAgICAgICAgICBlbHNlOiAgICMgcHJvdG8gMCAtLSBQT1BfTUFSSyBub3QgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgd3JpdGUoUE9QICogKG4rMSkgKyBnZXQpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIE5vIHJlY3Vyc2lvbi4KLSAgICAgICAgc2VsZi53cml0ZShUVVBMRSkKKyAgICAgICAgd3JpdGUoVFVQTEUpCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAKICAgICBkaXNwYXRjaFt0dXBsZV0gPSBzYXZlX3R1cGxlCiAKICAgICBkZWYgc2F2ZV9saXN0KHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotCiAgICAgICAgIGlmIHNlbGYuYmluOgotICAgICAgICAgICAgd3JpdGUoRU1QVFlfTElTVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfTElTVCkKICAgICAgICAgZWxzZTogICAjIHByb3RvIDAgLS0gY2FuJ3QgdXNlIEVNUFRZX0xJU1QKLSAgICAgICAgICAgIHdyaXRlKE1BUksgKyBMSVNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShNQVJLICsgTElTVCkKIAogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICBzZWxmLl9iYXRjaF9hcHBlbmRzKG9iaikKQEAgLTU5OSwxNyArNTg3LDkgQEAKICAgICAgICAgICAgICAgICB3cml0ZShBUFBFTkQpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpdGVtcyA9IGl0ZXIoaXRlbXMpCi0gICAgICAgIHIgPSByYW5nZShzZWxmLl9CQVRDSFNJWkUpCi0gICAgICAgIHdoaWxlIGl0ZW1zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdG1wID0gW10KLSAgICAgICAgICAgIGZvciBpIGluIHI6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB4ID0gbmV4dChpdGVtcykKLSAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZCh4KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaXQgPSBpdGVyKGl0ZW1zKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdG1wID0gbGlzdChpc2xpY2UoaXQsIHNlbGYuX0JBVENIU0laRSkpCiAgICAgICAgICAgICBuID0gbGVuKHRtcCkKICAgICAgICAgICAgIGlmIG4gPiAxOgogICAgICAgICAgICAgICAgIHdyaXRlKE1BUkspCkBAIC02MjAsMTQgKzYwMCwxNCBAQAogICAgICAgICAgICAgICAgIHNhdmUodG1wWzBdKQogICAgICAgICAgICAgICAgIHdyaXRlKEFQUEVORCkKICAgICAgICAgICAgICMgZWxzZSB0bXAgaXMgZW1wdHksIGFuZCB3ZSdyZSBkb25lCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgZGVmIHNhdmVfZGljdChzZWxmLCBvYmopOgotICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKLQogICAgICAgICBpZiBzZWxmLmJpbjoKLSAgICAgICAgICAgIHdyaXRlKEVNUFRZX0RJQ1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKEVNUFRZX0RJQ1QpCiAgICAgICAgIGVsc2U6ICAgIyBwcm90byAwIC0tIGNhbid0IHVzZSBFTVBUWV9ESUNUCi0gICAgICAgICAgICB3cml0ZShNQVJLICsgRElDVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoTUFSSyArIERJQ1QpCiAKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICAgICAgc2VsZi5fYmF0Y2hfc2V0aXRlbXMob2JqLml0ZW1zKCkpCkBAIC02NDgsMTYgKzYyOCw5IEBACiAgICAgICAgICAgICAgICAgd3JpdGUoU0VUSVRFTSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGl0ZW1zID0gaXRlcihpdGVtcykKLSAgICAgICAgciA9IHJhbmdlKHNlbGYuX0JBVENIU0laRSkKLSAgICAgICAgd2hpbGUgaXRlbXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0bXAgPSBbXQotICAgICAgICAgICAgZm9yIGkgaW4gcjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQobmV4dChpdGVtcykpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpdCA9IGl0ZXIoaXRlbXMpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0bXAgPSBsaXN0KGlzbGljZShpdCwgc2VsZi5fQkFUQ0hTSVpFKSkKICAgICAgICAgICAgIG4gPSBsZW4odG1wKQogICAgICAgICAgICAgaWYgbiA+IDE6CiAgICAgICAgICAgICAgICAgd3JpdGUoTUFSSykKQEAgLTY3MSw4ICs2NDQsMTAgQEAKICAgICAgICAgICAgICAgICBzYXZlKHYpCiAgICAgICAgICAgICAgICAgd3JpdGUoU0VUSVRFTSkKICAgICAgICAgICAgICMgZWxzZSB0bXAgaXMgZW1wdHksIGFuZCB3ZSdyZSBkb25lCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgZGVmIHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgbmFtZT1Ob25lLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBuYW1lPU5vbmUpOgogICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKICAgICAgICAgbWVtbyA9IHNlbGYubWVtbwogCkBAIC03MDIsOSArNjc3LDkgQEAKICAgICAgICAgICAgIGlmIGNvZGU6CiAgICAgICAgICAgICAgICAgYXNzZXJ0IGNvZGUgPiAwCiAgICAgICAgICAgICAgICAgaWYgY29kZSA8PSAweGZmOgotICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQxICsgYnl0ZXMoW2NvZGVdKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMSArIHBhY2soIjxCIiwgY29kZSkpCiAgICAgICAgICAgICAgICAgZWxpZiBjb2RlIDw9IDB4ZmZmZjoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMiArIGJ5dGVzKFtjb2RlJjB4ZmYsIGNvZGU+PjhdKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMiArIHBhY2soIjxIIiwgY29kZSkpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUNCArIHBhY2soIjxpIiwgY29kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuCkBAIC03MzIsMjUgKzcwNyw2IEBACiAgICAgZGlzcGF0Y2hbQnVpbHRpbkZ1bmN0aW9uVHlwZV0gPSBzYXZlX2dsb2JhbAogICAgIGRpc3BhdGNoW3R5cGVdID0gc2F2ZV9nbG9iYWwKIAotIyBQaWNrbGluZyBoZWxwZXJzCi0KLWRlZiBfa2VlcF9hbGl2ZSh4LCBtZW1vKToKLSAgICAiIiJLZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHggaW4gdGhlIG1lbW8uCi0KLSAgICBCZWNhdXNlIHdlIHJlbWVtYmVyIG9iamVjdHMgYnkgdGhlaXIgaWQsIHdlIGhhdmUKLSAgICB0byBhc3N1cmUgdGhhdCBwb3NzaWJseSB0ZW1wb3Jhcnkgb2JqZWN0cyBhcmUga2VwdAotICAgIGFsaXZlIGJ5IHJlZmVyZW5jaW5nIHRoZW0uCi0gICAgV2Ugc3RvcmUgYSByZWZlcmVuY2UgYXQgdGhlIGlkIG9mIHRoZSBtZW1vLCB3aGljaCBzaG91bGQKLSAgICBub3JtYWxseSBub3QgYmUgdXNlZCB1bmxlc3Mgc29tZW9uZSB0cmllcyB0byBkZWVwY29weQotICAgIHRoZSBtZW1vIGl0c2VsZi4uLgotICAgICIiIgotICAgIHRyeToKLSAgICAgICAgbWVtb1tpZChtZW1vKV0uYXBwZW5kKHgpCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAjIGFoYSwgdGhpcyBpcyB0aGUgZmlyc3Qgb25lIDotKQotICAgICAgICBtZW1vW2lkKG1lbW8pXT1beF0KLQotCiAjIEEgY2FjaGUgZm9yIHdoaWNobW9kdWxlKCksIG1hcHBpbmcgYSBmdW5jdGlvbiBvYmplY3QgdG8gdGhlIG5hbWUgb2YKICMgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGZvdW5kLgogCkBAIC04MzIsNyArNzg4LDcgQEAKICAgICAgICAgcmVhZCA9IHNlbGYucmVhZAogICAgICAgICBkaXNwYXRjaCA9IHNlbGYuZGlzcGF0Y2gKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAga2V5ID0gcmVhZCgxKQogICAgICAgICAgICAgICAgIGlmIG5vdCBrZXk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCkBAIC04NjIsNyArODE4LDcgQEAKICAgICBkaXNwYXRjaCA9IHt9CiAKICAgICBkZWYgbG9hZF9wcm90byhzZWxmKToKLSAgICAgICAgcHJvdG8gPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBwcm90byA9IHNlbGYucmVhZCgxKVswXQogICAgICAgICBpZiBub3QgMCA8PSBwcm90byA8PSBISUdIRVNUX1BST1RPQ09MOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgcGlja2xlIHByb3RvY29sOiAlZCIgJSBwcm90bykKICAgICAgICAgc2VsZi5wcm90byA9IHByb3RvCkBAIC04OTcsNDMgKzg1Myw0MCBAQAogICAgICAgICBlbGlmIGRhdGEgPT0gVFJVRVsxOl06CiAgICAgICAgICAgICB2YWwgPSBUcnVlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdmFsID0gaW50KGRhdGEsIDApCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICB2YWwgPSBpbnQoZGF0YSwgMCkKKyAgICAgICAgICAgIHZhbCA9IGludChkYXRhLCAwKQogICAgICAgICBzZWxmLmFwcGVuZCh2YWwpCiAgICAgZGlzcGF0Y2hbSU5UWzBdXSA9IGxvYWRfaW50CiAKICAgICBkZWYgbG9hZF9iaW5pbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXBwZW5kKG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKSkKKyAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc8aScsIHNlbGYucmVhZCg0KSlbMF0pCiAgICAgZGlzcGF0Y2hbQklOSU5UWzBdXSA9IGxvYWRfYmluaW50CiAKICAgICBkZWYgbG9hZF9iaW5pbnQxKHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChvcmQoc2VsZi5yZWFkKDEpKSkKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5yZWFkKDEpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVDFbMF1dID0gbG9hZF9iaW5pbnQxCiAKICAgICBkZWYgbG9hZF9iaW5pbnQyKHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChtbG9hZHMoYidpJyArIHNlbGYucmVhZCgyKSArIGInXDAwMFwwMDAnKSkKKyAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc8SCcsIHNlbGYucmVhZCgyKSlbMF0pCiAgICAgZGlzcGF0Y2hbQklOSU5UMlswXV0gPSBsb2FkX2JpbmludDIKIAogICAgIGRlZiBsb2FkX2xvbmcoc2VsZik6Ci0gICAgICAgIHZhbCA9IHNlbGYucmVhZGxpbmUoKVs6LTFdLmRlY29kZSgiYXNjaWkiKQotICAgICAgICBpZiB2YWwgYW5kIHZhbFstMV0gPT0gJ0wnOgorICAgICAgICB2YWwgPSBzZWxmLnJlYWRsaW5lKClbOi0xXQorICAgICAgICBpZiB2YWwgYW5kIHZhbFstMV0gPT0gYidMJ1swXToKICAgICAgICAgICAgIHZhbCA9IHZhbFs6LTFdCiAgICAgICAgIHNlbGYuYXBwZW5kKGludCh2YWwsIDApKQogICAgIGRpc3BhdGNoW0xPTkdbMF1dID0gbG9hZF9sb25nCiAKICAgICBkZWYgbG9hZF9sb25nMShzZWxmKToKLSAgICAgICAgbiA9IG9yZChzZWxmLnJlYWQoMSkpCisgICAgICAgIG4gPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChuKQogICAgICAgICBzZWxmLmFwcGVuZChkZWNvZGVfbG9uZyhkYXRhKSkKICAgICBkaXNwYXRjaFtMT05HMVswXV0gPSBsb2FkX2xvbmcxCiAKICAgICBkZWYgbG9hZF9sb25nNChzZWxmKToKLSAgICAgICAgbiA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBuLCA9IHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIG4gPCAwOgogICAgICAgICAgICAgIyBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlIC0tIHdlIG5ldmVyIHdyaXRlIG9uZSBsaWtlIHRoaXMKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKQogICAgICAgICBkYXRhID0gc2VsZi5yZWFkKG4pCiAgICAgICAgIHNlbGYuYXBwZW5kKGRlY29kZV9sb25nKGRhdGEpKQogICAgIGRpc3BhdGNoW0xPTkc0WzBdXSA9IGxvYWRfbG9uZzQKQEAgLTk0MiwzOSArODk1LDM2IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKGZsb2F0KHNlbGYucmVhZGxpbmUoKVs6LTFdKSkKICAgICBkaXNwYXRjaFtGTE9BVFswXV0gPSBsb2FkX2Zsb2F0CiAKLSAgICBkZWYgbG9hZF9iaW5mbG9hdChzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjayk6CisgICAgZGVmIGxvYWRfYmluZmxvYXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXBwZW5kKHVucGFjaygnPmQnLCBzZWxmLnJlYWQoOCkpWzBdKQogICAgIGRpc3BhdGNoW0JJTkZMT0FUWzBdXSA9IGxvYWRfYmluZmxvYXQKIAogICAgIGRlZiBsb2FkX3N0cmluZyhzZWxmKToKLSAgICAgICAgb3JpZyA9IHNlbGYucmVhZGxpbmUoKQotICAgICAgICByZXAgPSBvcmlnWzotMV0KLSAgICAgICAgZm9yIHEgaW4gKGInIicsIGIiJyIpOiAjIGRvdWJsZSBvciBzaW5nbGUgcXVvdGUKLSAgICAgICAgICAgIGlmIHJlcC5zdGFydHN3aXRoKHEpOgotICAgICAgICAgICAgICAgIGlmIGxlbihyZXApIDwgMiBvciBub3QgcmVwLmVuZHN3aXRoKHEpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnNlY3VyZSBzdHJpbmcgcGlja2xlIikKLSAgICAgICAgICAgICAgICByZXAgPSByZXBbbGVuKHEpOi1sZW4ocSldCi0gICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZGF0YSA9IHNlbGYucmVhZGxpbmUoKVs6LTFdCisgICAgICAgICMgU3RyaXAgb3V0ZXJtb3N0IHF1b3RlcworICAgICAgICBpZiBsZW4oZGF0YSkgPj0gMiBhbmQgZGF0YVswXSA9PSBkYXRhWy0xXSBhbmQgZGF0YVswXSBpbiBiJyJcJyc6CisgICAgICAgICAgICBkYXRhID0gZGF0YVsxOi0xXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW5zZWN1cmUgc3RyaW5nIHBpY2tsZTogJXIiICUgb3JpZykKLSAgICAgICAgc2VsZi5hcHBlbmQoY29kZWNzLmVzY2FwZV9kZWNvZGUocmVwKVswXQorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJ0aGUgU1RSSU5HIG9wY29kZSBhcmd1bWVudCBtdXN0IGJlIHF1b3RlZCIpCisgICAgICAgIHNlbGYuYXBwZW5kKGNvZGVjcy5lc2NhcGVfZGVjb2RlKGRhdGEpWzBdCiAgICAgICAgICAgICAgICAgICAgIC5kZWNvZGUoc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpKQogICAgIGRpc3BhdGNoW1NUUklOR1swXV0gPSBsb2FkX3N0cmluZwogCiAgICAgZGVmIGxvYWRfYmluc3RyaW5nKHNlbGYpOgogICAgICAgICAjIERlcHJlY2F0ZWQgQklOU1RSSU5HIHVzZXMgc2lnbmVkIDMyLWJpdCBsZW5ndGgKLSAgICAgICAgbGVuID0gbWxvYWRzKGInaScgKyBzZWxmLnJlYWQoNCkpCisgICAgICAgIGxlbiwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBsZW4gPCAwOgotICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5TVFJJTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlNUUklORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKQogICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbikKICAgICAgICAgdmFsdWUgPSBzdHIoZGF0YSwgc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpCiAgICAgICAgIHNlbGYuYXBwZW5kKHZhbHVlKQogICAgIGRpc3BhdGNoW0JJTlNUUklOR1swXV0gPSBsb2FkX2JpbnN0cmluZwogCi0gICAgZGVmIGxvYWRfYmluYnl0ZXMoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2ssIG1heHNpemU9c3lzLm1heHNpemUpOgorICAgIGRlZiBsb2FkX2JpbmJ5dGVzKHNlbGYpOgogICAgICAgICBsZW4sID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgbGVuID4gbWF4c2l6ZToKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOQllURVMgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSk7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTkJZVEVTIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSkKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5yZWFkKGxlbikpCiAgICAgZGlzcGF0Y2hbQklOQllURVNbMF1dID0gbG9hZF9iaW5ieXRlcwogCkBAIC05ODIsMjMgKzkzMiwyNCBAQAogICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkbGluZSgpWzotMV0sICdyYXctdW5pY29kZS1lc2NhcGUnKSkKICAgICBkaXNwYXRjaFtVTklDT0RFWzBdXSA9IGxvYWRfdW5pY29kZQogCi0gICAgZGVmIGxvYWRfYmludW5pY29kZShzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjaywgbWF4c2l6ZT1zeXMubWF4c2l6ZSk6CisgICAgZGVmIGxvYWRfYmludW5pY29kZShzZWxmKToKICAgICAgICAgbGVuLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGxlbiA+IG1heHNpemU6Ci0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlVOSUNPREUgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSk7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlVOSUNPREUgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiAlZCBieXRlcyIgJSBtYXhzaXplKQogICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkKGxlbiksICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykpCiAgICAgZGlzcGF0Y2hbQklOVU5JQ09ERVswXV0gPSBsb2FkX2JpbnVuaWNvZGUKIAogICAgIGRlZiBsb2FkX3Nob3J0X2JpbnN0cmluZyhzZWxmKToKLSAgICAgICAgbGVuID0gb3JkKHNlbGYucmVhZCgxKSkKLSAgICAgICAgZGF0YSA9IGJ5dGVzKHNlbGYucmVhZChsZW4pKQorICAgICAgICBsZW4gPSBzZWxmLnJlYWQoMSlbMF0KKyAgICAgICAgZGF0YSA9IHNlbGYucmVhZChsZW4pCiAgICAgICAgIHZhbHVlID0gc3RyKGRhdGEsIHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKQogICAgICAgICBzZWxmLmFwcGVuZCh2YWx1ZSkKICAgICBkaXNwYXRjaFtTSE9SVF9CSU5TVFJJTkdbMF1dID0gbG9hZF9zaG9ydF9iaW5zdHJpbmcKIAogICAgIGRlZiBsb2FkX3Nob3J0X2JpbmJ5dGVzKHNlbGYpOgotICAgICAgICBsZW4gPSBvcmQoc2VsZi5yZWFkKDEpKQotICAgICAgICBzZWxmLmFwcGVuZChieXRlcyhzZWxmLnJlYWQobGVuKSkpCisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLnJlYWQobGVuKSkKICAgICBkaXNwYXRjaFtTSE9SVF9CSU5CWVRFU1swXV0gPSBsb2FkX3Nob3J0X2JpbmJ5dGVzCiAKICAgICBkZWYgbG9hZF90dXBsZShzZWxmKToKQEAgLTEwMzcsMTIgKzk4OCw5IEBACiAKICAgICBkZWYgbG9hZF9kaWN0KHNlbGYpOgogICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQotICAgICAgICBkID0ge30KICAgICAgICAgaXRlbXMgPSBzZWxmLnN0YWNrW2srMTpdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihpdGVtcyksIDIpOgotICAgICAgICAgICAga2V5ID0gaXRlbXNbaV0KLSAgICAgICAgICAgIHZhbHVlID0gaXRlbXNbaSsxXQotICAgICAgICAgICAgZFtrZXldID0gdmFsdWUKKyAgICAgICAgZCA9IHtpdGVtc1tpXTogaXRlbXNbaSsxXQorICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihpdGVtcyksIDIpfQogICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFtkXQogICAgIGRpc3BhdGNoW0RJQ1RbMF1dID0gbG9hZF9kaWN0CiAKQEAgLTEwOTQsMTcgKzEwNDIsMTcgQEAKICAgICBkaXNwYXRjaFtHTE9CQUxbMF1dID0gbG9hZF9nbG9iYWwKIAogICAgIGRlZiBsb2FkX2V4dDEoc2VsZik6Ci0gICAgICAgIGNvZGUgPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBjb2RlID0gc2VsZi5yZWFkKDEpWzBdCiAgICAgICAgIHNlbGYuZ2V0X2V4dGVuc2lvbihjb2RlKQogICAgIGRpc3BhdGNoW0VYVDFbMF1dID0gbG9hZF9leHQxCiAKICAgICBkZWYgbG9hZF9leHQyKHNlbGYpOgotICAgICAgICBjb2RlID0gbWxvYWRzKGInaScgKyBzZWxmLnJlYWQoMikgKyBiJ1wwMDBcMDAwJykKKyAgICAgICAgY29kZSwgPSB1bnBhY2soJzxIJywgc2VsZi5yZWFkKDIpKQogICAgICAgICBzZWxmLmdldF9leHRlbnNpb24oY29kZSkKICAgICBkaXNwYXRjaFtFWFQyWzBdXSA9IGxvYWRfZXh0MgogCiAgICAgZGVmIGxvYWRfZXh0NChzZWxmKToKLSAgICAgICAgY29kZSA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBjb2RlLCA9IHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIHNlbGYuZ2V0X2V4dGVuc2lvbihjb2RlKQogICAgIGRpc3BhdGNoW0VYVDRbMF1dID0gbG9hZF9leHQ0CiAKQEAgLTExMTgsNyArMTA2Niw3IEBACiAgICAgICAgIGlmIG5vdCBrZXk6CiAgICAgICAgICAgICBpZiBjb2RlIDw9IDA6ICMgbm90ZSB0aGF0IDAgaXMgZm9yYmlkZGVuCiAgICAgICAgICAgICAgICAgIyBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlLgotICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiRVhUIHNwZWNpZmllcyBjb2RlIDw9IDAiKTsKKyAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIikKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVucmVnaXN0ZXJlZCBleHRlbnNpb24gY29kZSAlZCIgJSBjb2RlKQogICAgICAgICBvYmogPSBzZWxmLmZpbmRfY2xhc3MoKmtleSkKICAgICAgICAgX2V4dGVuc2lvbl9jYWNoZVtjb2RlXSA9IG9iagpAQCAtMTE3Miw3ICsxMTIwLDcgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5tZW1vW2ldKQogICAgIGRpc3BhdGNoW0JJTkdFVFswXV0gPSBsb2FkX2JpbmdldAogCi0gICAgZGVmIGxvYWRfbG9uZ19iaW5nZXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2spOgorICAgIGRlZiBsb2FkX2xvbmdfYmluZ2V0KHNlbGYpOgogICAgICAgICBpLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYubWVtb1tpXSkKICAgICBkaXNwYXRjaFtMT05HX0JJTkdFVFswXV0gPSBsb2FkX2xvbmdfYmluZ2V0CkBAIC0xMTkxLDcgKzExMzksNyBAQAogICAgICAgICBzZWxmLm1lbW9baV0gPSBzZWxmLnN0YWNrWy0xXQogICAgIGRpc3BhdGNoW0JJTlBVVFswXV0gPSBsb2FkX2JpbnB1dAogCi0gICAgZGVmIGxvYWRfbG9uZ19iaW5wdXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2ssIG1heHNpemU9c3lzLm1heHNpemUpOgorICAgIGRlZiBsb2FkX2xvbmdfYmlucHV0KHNlbGYpOgogICAgICAgICBpLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGkgPiBtYXhzaXplOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgTE9OR19CSU5QVVQgYXJndW1lbnQiKQpAQCAtMTI0Miw3ICsxMTkwLDcgQEAKICAgICAgICAgc3RhdGUgPSBzdGFjay5wb3AoKQogICAgICAgICBpbnN0ID0gc3RhY2tbLTFdCiAgICAgICAgIHNldHN0YXRlID0gZ2V0YXR0cihpbnN0LCAiX19zZXRzdGF0ZV9fIiwgTm9uZSkKLSAgICAgICAgaWYgc2V0c3RhdGU6CisgICAgICAgIGlmIHNldHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2V0c3RhdGUoc3RhdGUpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2xvdHN0YXRlID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL3BpY2tsZXRvb2xzLnB5IGIvTGliL3BpY2tsZXRvb2xzLnB5CmluZGV4IDYxMmZhOGYuLmU5MjE0NmQgMTAwNjQ0Ci0tLSBhL0xpYi9waWNrbGV0b29scy5weQorKysgYi9MaWIvcGlja2xldG9vbHMucHkKQEAgLTM0LDExOSArMzQsMTE4IEBACiAjICAgYnkgYSBsYXRlciBHRVQuCiAKIAotIiIiCi0iQSBwaWNrbGUiIGlzIGEgcHJvZ3JhbSBmb3IgYSB2aXJ0dWFsIHBpY2tsZSBtYWNoaW5lIChQTSwgYnV0IG1vcmUgYWNjdXJhdGVseQotY2FsbGVkIGFuIHVucGlja2xpbmcgbWFjaGluZSkuICBJdCdzIGEgc2VxdWVuY2Ugb2Ygb3Bjb2RlcywgaW50ZXJwcmV0ZWQgYnkgdGhlCi1QTSwgYnVpbGRpbmcgYW4gYXJiaXRyYXJpbHkgY29tcGxleCBQeXRob24gb2JqZWN0LgorIyAiQSBwaWNrbGUiIGlzIGEgcHJvZ3JhbSBmb3IgYSB2aXJ0dWFsIHBpY2tsZSBtYWNoaW5lIChQTSwgYnV0IG1vcmUgYWNjdXJhdGVseQorIyBjYWxsZWQgYW4gdW5waWNrbGluZyBtYWNoaW5lKS4gIEl0J3MgYSBzZXF1ZW5jZSBvZiBvcGNvZGVzLCBpbnRlcnByZXRlZCBieSB0aGUKKyMgUE0sIGJ1aWxkaW5nIGFuIGFyYml0cmFyaWx5IGNvbXBsZXggUHl0aG9uIG9iamVjdC4KKyMKKyMgRm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBQTSBpcyB2ZXJ5IHNpbXBsZTogIHRoZXJlIGFyZSBubyBsb29waW5nLCB0ZXN0aW5nLCBvcgorIyBjb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vIGFyaXRobWV0aWMgYW5kIG5vIGZ1bmN0aW9uIGNhbGxzLiAgT3Bjb2RlcyBhcmUKKyMgZXhlY3V0ZWQgb25jZSBlYWNoLCBmcm9tIGZpcnN0IHRvIGxhc3QsIHVudGlsIGEgU1RPUCBvcGNvZGUgaXMgcmVhY2hlZC4KKyMKKyMgVGhlIFBNIGhhcyB0d28gZGF0YSBhcmVhcywgInRoZSBzdGFjayIgYW5kICJ0aGUgbWVtbyIuCisjCisjIE1hbnkgb3Bjb2RlcyBwdXNoIFB5dGhvbiBvYmplY3RzIG9udG8gdGhlIHN0YWNrOyBlLmcuLCBJTlQgcHVzaGVzIGEgUHl0aG9uCisjIGludGVnZXIgb2JqZWN0IG9uIHRoZSBzdGFjaywgd2hvc2UgdmFsdWUgaXMgZ290dGVuIGZyb20gYSBkZWNpbWFsIHN0cmluZworIyBsaXRlcmFsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgSU5UIG9wY29kZSBpbiB0aGUgcGlja2xlIGJ5dGVzdHJlYW0uICBPdGhlcgorIyBvcGNvZGVzIHRha2UgUHl0aG9uIG9iamVjdHMgb2ZmIHRoZSBzdGFjay4gIFRoZSByZXN1bHQgb2YgdW5waWNrbGluZyBpcworIyB3aGF0ZXZlciBvYmplY3QgaXMgbGVmdCBvbiB0aGUgc3RhY2sgd2hlbiB0aGUgZmluYWwgU1RPUCBvcGNvZGUgaXMgZXhlY3V0ZWQuCisjCisjIFRoZSBtZW1vIGlzIHNpbXBseSBhbiBhcnJheSBvZiBvYmplY3RzLCBvciBpdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYSBkaWN0CisjIG1hcHBpbmcgbGl0dGxlIGludGVnZXJzIHRvIG9iamVjdHMuICBUaGUgbWVtbyBzZXJ2ZXMgYXMgdGhlIFBNJ3MgImxvbmcgdGVybQorIyBtZW1vcnkiLCBhbmQgdGhlIGxpdHRsZSBpbnRlZ2VycyBpbmRleGluZyB0aGUgbWVtbyBhcmUgYWtpbiB0byB2YXJpYWJsZQorIyBuYW1lcy4gIFNvbWUgb3Bjb2RlcyBwb3AgYSBzdGFjayBvYmplY3QgaW50byB0aGUgbWVtbyBhdCBhIGdpdmVuIGluZGV4LAorIyBhbmQgb3RoZXJzIHB1c2ggYSBtZW1vIG9iamVjdCBhdCBhIGdpdmVuIGluZGV4IG9udG8gdGhlIHN0YWNrIGFnYWluLgorIworIyBBdCBoZWFydCwgdGhhdCdzIGFsbCB0aGUgUE0gaGFzLiAgU3VidGxldGllcyBhcmlzZSBmb3IgdGhlc2UgcmVhc29uczoKKyMKKyMgKyBPYmplY3QgaWRlbnRpdHkuICBPYmplY3RzIGNhbiBiZSBhcmJpdHJhcmlseSBjb21wbGV4LCBhbmQgc3Vib2JqZWN0cworIyAgIG1heSBiZSBzaGFyZWQgKGZvciBleGFtcGxlLCB0aGUgbGlzdCBbYSwgYV0gcmVmZXJzIHRvIHRoZSBzYW1lIG9iamVjdCBhCisjICAgdHdpY2UpLiAgSXQgY2FuIGJlIHZpdGFsIHRoYXQgdW5waWNrbGluZyByZWNyZWF0ZSBhbiBpc29tb3JwaGljIG9iamVjdAorIyAgIGdyYXBoLCBmYWl0aGZ1bGx5IHJlcHJvZHVjaW5nIHNoYXJpbmcuCisjCisjICsgUmVjdXJzaXZlIG9iamVjdHMuICBGb3IgZXhhbXBsZSwgYWZ0ZXIgIkwgPSBbXTsgTC5hcHBlbmQoTCkiLCBMIGlzIGEKKyMgICBsaXN0LCBhbmQgTFswXSBpcyB0aGUgc2FtZSBsaXN0LiAgVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvYmplY3QgaWRlbnRpdHkKKyMgICBwb2ludCwgYW5kIHNvbWUgc2VxdWVuY2VzIG9mIHBpY2tsZSBvcGNvZGVzIGFyZSBzdWJ0bGUgaW4gb3JkZXIgdG8KKyMgICBnZXQgdGhlIHJpZ2h0IHJlc3VsdCBpbiBhbGwgY2FzZXMuCisjCisjICsgVGhpbmdzIHBpY2tsZSBkb2Vzbid0IGtub3cgZXZlcnl0aGluZyBhYm91dC4gIEV4YW1wbGVzIG9mIHRoaW5ncyBwaWNrbGUKKyMgICBkb2VzIGtub3cgZXZlcnl0aGluZyBhYm91dCBhcmUgUHl0aG9uJ3MgYnVpbHRpbiBzY2FsYXIgYW5kIGNvbnRhaW5lcgorIyAgIHR5cGVzLCBsaWtlIGludHMgYW5kIHR1cGxlcy4gIFRoZXkgZ2VuZXJhbGx5IGhhdmUgb3Bjb2RlcyBkZWRpY2F0ZWQgdG8KKyMgICB0aGVtLiAgRm9yIHRoaW5ncyBsaWtlIG1vZHVsZSByZWZlcmVuY2VzIGFuZCBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkCisjICAgY2xhc3NlcywgcGlja2xlJ3Mga25vd2xlZGdlIGlzIGxpbWl0ZWQuICBIaXN0b3JpY2FsbHksIG1hbnkgZW5oYW5jZW1lbnRzCisjICAgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHBpY2tsZSBwcm90b2NvbCBpbiBvcmRlciB0byBkbyBhIGJldHRlciAoZmFzdGVyLAorIyAgIGFuZC9vciBtb3JlIGNvbXBhY3QpIGpvYiBvbiB0aG9zZS4KKyMKKyMgKyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBtaWNyby1vcHRpbWl6YXRpb24uICBBcyBleHBsYWluZWQgYmVsb3csCisjICAgcGlja2xlIG9wY29kZXMgbmV2ZXIgZ28gYXdheSwgbm90IGV2ZW4gd2hlbiBiZXR0ZXIgd2F5cyB0byBkbyBhIHRoaW5nCisjICAgZ2V0IGludmVudGVkLiAgVGhlIHJlcGVydG9pcmUgb2YgdGhlIFBNIGp1c3Qga2VlcHMgZ3Jvd2luZyBvdmVyIHRpbWUuCisjICAgRm9yIGV4YW1wbGUsIHByb3RvY29sIDAgaGFkIHR3byBvcGNvZGVzIGZvciBidWlsZGluZyBQeXRob24gaW50ZWdlcnMgKElOVAorIyAgIGFuZCBMT05HKSwgcHJvdG9jb2wgMSBhZGRlZCB0aHJlZSBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZiBzaG9ydAorIyAgIGludGVnZXJzLCBhbmQgcHJvdG9jb2wgMiBhZGRlZCB0d28gbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2YKKyMgICBsb25nIGludGVnZXJzIChiZWZvcmUgcHJvdG9jb2wgMiwgdGhlIG9ubHkgd2F5cyB0byBwaWNrbGUgYSBQeXRob24gbG9uZworIyAgIHRvb2sgdGltZSBxdWFkcmF0aWMgaW4gdGhlIG51bWJlciBvZiBkaWdpdHMsIGZvciBib3RoIHBpY2tsaW5nIGFuZAorIyAgIHVucGlja2xpbmcpLiAgIk9wY29kZSBibG9hdCIgaXNuJ3Qgc28gbXVjaCBhIHN1YnRsZXR5IGFzIGEgc291cmNlIG9mCisjICAgd2VhcnlpbmcgY29tcGxpY2F0aW9uLgorIworIworIyBQaWNrbGUgcHJvdG9jb2xzOgorIworIyBGb3IgY29tcGF0aWJpbGl0eSwgdGhlIG1lYW5pbmcgb2YgYSBwaWNrbGUgb3Bjb2RlIG5ldmVyIGNoYW5nZXMuICBJbnN0ZWFkIG5ldworIyBwaWNrbGUgb3Bjb2RlcyBnZXQgYWRkZWQsIGFuZCBlYWNoIHZlcnNpb24ncyB1bnBpY2tsZXIgY2FuIGhhbmRsZSBhbGwgdGhlCisjIHBpY2tsZSBvcGNvZGVzIGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucyB0byBkYXRlLiAgU28gb2xkIHBpY2tsZXMgY29udGludWUgdG8KKyMgYmUgcmVhZGFibGUgZm9yZXZlci4gIFRoZSBwaWNrbGVyIGNhbiBnZW5lcmFsbHkgYmUgdG9sZCB0byByZXN0cmljdCBpdHNlbGYgdG8KKyMgdGhlIHN1YnNldCBvZiBvcGNvZGVzIGF2YWlsYWJsZSB1bmRlciBwcmV2aW91cyBwcm90b2NvbCB2ZXJzaW9ucyB0b28sIHNvIHRoYXQKKyMgdXNlcnMgY2FuIGNyZWF0ZSBwaWNrbGVzIHVuZGVyIHRoZSBjdXJyZW50IHZlcnNpb24gcmVhZGFibGUgYnkgb2xkZXIKKyMgdmVyc2lvbnMuICBIb3dldmVyLCBhIHBpY2tsZSBkb2VzIG5vdCBjb250YWluIGl0cyB2ZXJzaW9uIG51bWJlciBlbWJlZGRlZAorIyB3aXRoaW4gaXQuICBJZiBhbiBvbGRlciB1bnBpY2tsZXIgdHJpZXMgdG8gcmVhZCBhIHBpY2tsZSB1c2luZyBhIGxhdGVyCisjIHByb3RvY29sLCB0aGUgcmVzdWx0IGlzIG1vc3QgbGlrZWx5IGFuIGV4Y2VwdGlvbiBkdWUgdG8gc2VlaW5nIGFuIHVua25vd24gKGluCisjIHRoZSBvbGRlciB1bnBpY2tsZXIpIG9wY29kZS4KKyMKKyMgVGhlIG9yaWdpbmFsIHBpY2tsZSB1c2VkIHdoYXQncyBub3cgY2FsbGVkICJwcm90b2NvbCAwIiwgYW5kIHdoYXQgd2FzIGNhbGxlZAorIyAidGV4dCBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoZSBlbnRpcmUgcGlja2xlIGJ5dGVzdHJlYW0gaXMgbWFkZSB1cCBvZgorIyBwcmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycywgcGx1cyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIsIGluIHByb3RvY29sIDAuCisjIFRoYXQncyB3aHkgaXQgd2FzIGNhbGxlZCB0ZXh0IG1vZGUuICBQcm90b2NvbCAwIGlzIHNtYWxsIGFuZCBlbGVnYW50LCBidXQKKyMgc29tZXRpbWVzIHBhaW5mdWxseSBpbmVmZmljaWVudC4KKyMKKyMgVGhlIHNlY29uZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGlzIG5vdyBjYWxsZWQgInByb3RvY29sIDEiLCBhbmQgd2FzIGNhbGxlZAorIyAiYmluYXJ5IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhpcyBhZGRlZCBtYW55IG9wY29kZXMgd2l0aCBhcmd1bWVudHMKKyMgY29uc2lzdGluZyBvZiBhcmJpdHJhcnkgYnl0ZXMsIGluY2x1ZGluZyBOVUwgYnl0ZXMgYW5kIHVucHJpbnRhYmxlICJoaWdoIGJpdCIKKyMgYnl0ZXMuICBCaW5hcnkgbW9kZSBwaWNrbGVzIGNhbiBiZSBzdWJzdGFudGlhbGx5IHNtYWxsZXIgdGhhbiBlcXVpdmFsZW50CisjIHRleHQgbW9kZSBwaWNrbGVzLCBhbmQgc29tZXRpbWVzIGZhc3RlciB0b287IGUuZy4sIEJJTklOVCByZXByZXNlbnRzIGEgNC1ieXRlCisjIGludCBhcyA0IGJ5dGVzIGZvbGxvd2luZyB0aGUgb3Bjb2RlLCB3aGljaCBpcyBjaGVhcGVyIHRvIHVucGlja2xlIHRoYW4gdGhlCisjIChwZXJoYXBzKSAxMS1jaGFyYWN0ZXIgZGVjaW1hbCBzdHJpbmcgYXR0YWNoZWQgdG8gSU5ULiAgUHJvdG9jb2wgMSBhbHNvIGFkZGVkCisjIGEgbnVtYmVyIG9mIG9wY29kZXMgdGhhdCBvcGVyYXRlIG9uIG1hbnkgc3RhY2sgZWxlbWVudHMgYXQgb25jZSAobGlrZSBBUFBFTkRTCisjIGFuZCBTRVRJVEVNUyksIGFuZCAic2hvcnRjdXQiIG9wY29kZXMgKGxpa2UgRU1QVFlfRElDVCBhbmQgRU1QVFlfVFVQTEUpLgorIworIyBUaGUgdGhpcmQgbWFqb3Igc2V0IG9mIGFkZGl0aW9ucyBjYW1lIGluIFB5dGhvbiAyLjMsIGFuZCBpcyBjYWxsZWQgInByb3RvY29sCisjIDIiLiAgVGhpcyBhZGRlZDoKKyMKKyMgLSBBIGJldHRlciB3YXkgdG8gcGlja2xlIGluc3RhbmNlcyBvZiBuZXctc3R5bGUgY2xhc3NlcyAoTkVXT0JKKS4KKyMKKyMgLSBBIHdheSBmb3IgYSBwaWNrbGUgdG8gaWRlbnRpZnkgaXRzIHByb3RvY29sIChQUk9UTykuCisjCisjIC0gVGltZS0gYW5kIHNwYWNlLSBlZmZpY2llbnQgcGlja2xpbmcgb2YgbG9uZyBpbnRzIChMT05HezEsNH0pLgorIworIyAtIFNob3J0Y3V0cyBmb3Igc21hbGwgdHVwbGVzIChUVVBMRXsxLDIsM319LgorIworIyAtIERlZGljYXRlZCBvcGNvZGVzIGZvciBib29scyAoTkVXVFJVRSwgTkVXRkFMU0UpLgorIworIyAtIFRoZSAiZXh0ZW5zaW9uIHJlZ2lzdHJ5IiwgYSB2ZWN0b3Igb2YgcG9wdWxhciBvYmplY3RzIHRoYXQgY2FuIGJlIHB1c2hlZAorIyAgIGVmZmljaWVudGx5IGJ5IGluZGV4IChFWFR7MSwyLDR9KS4gIFRoaXMgaXMgYWtpbiB0byB0aGUgbWVtbyBhbmQgR0VULCBidXQKKyMgICB0aGUgcmVnaXN0cnkgY29udGVudHMgYXJlIHByZWRlZmluZWQgKHRoZXJlJ3Mgbm90aGluZyBha2luIHRvIHRoZSBtZW1vJ3MKKyMgICBQVVQpLgorIworIyBBbm90aGVyIGluZGVwZW5kZW50IGNoYW5nZSB3aXRoIFB5dGhvbiAyLjMgaXMgdGhlIGFiYW5kb25tZW50IG9mIGFueQorIyBwcmV0ZW5zZSB0aGF0IGl0IG1pZ2h0IGJlIHNhZmUgdG8gbG9hZCBwaWNrbGVzIHJlY2VpdmVkIGZyb20gdW50cnVzdGVkCisjIHBhcnRpZXMgLS0gbm8gc3VmZmljaWVudCBzZWN1cml0eSBhbmFseXNpcyBoYXMgYmVlbiBkb25lIHRvIGd1YXJhbnRlZQorIyB0aGlzIGFuZCB0aGVyZSBpc24ndCBhIHVzZSBjYXNlIHRoYXQgd2FycmFudHMgdGhlIGV4cGVuc2Ugb2Ygc3VjaCBhbgorIyBhbmFseXNpcy4KKyMKKyMgVG8gdGhpcyBlbmQsIGFsbCB0ZXN0cyBmb3IgX19zYWZlX2Zvcl91bnBpY2tsaW5nX18gb3IgZm9yCisjIGNvcHlyZWcuc2FmZV9jb25zdHJ1Y3RvcnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgdW5waWNrbGluZyBjb2RlLgorIyBSZWZlcmVuY2VzIHRvIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgZGVzY3JpcHRpb25zIGJlbG93IGFyZSB0byBiZSBzZWVuCisjIGFzIGRlc2NyaWJpbmcgdW5waWNrbGluZyBpbiBQeXRob24gMi4yIGFuZCBiZWZvcmUuCiAKLUZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgUE0gaXMgdmVyeSBzaW1wbGU6ICB0aGVyZSBhcmUgbm8gbG9vcGluZywgdGVzdGluZywgb3IKLWNvbmRpdGlvbmFsIGluc3RydWN0aW9ucywgbm8gYXJpdGhtZXRpYyBhbmQgbm8gZnVuY3Rpb24gY2FsbHMuICBPcGNvZGVzIGFyZQotZXhlY3V0ZWQgb25jZSBlYWNoLCBmcm9tIGZpcnN0IHRvIGxhc3QsIHVudGlsIGEgU1RPUCBvcGNvZGUgaXMgcmVhY2hlZC4KLQotVGhlIFBNIGhhcyB0d28gZGF0YSBhcmVhcywgInRoZSBzdGFjayIgYW5kICJ0aGUgbWVtbyIuCi0KLU1hbnkgb3Bjb2RlcyBwdXNoIFB5dGhvbiBvYmplY3RzIG9udG8gdGhlIHN0YWNrOyBlLmcuLCBJTlQgcHVzaGVzIGEgUHl0aG9uCi1pbnRlZ2VyIG9iamVjdCBvbiB0aGUgc3RhY2ssIHdob3NlIHZhbHVlIGlzIGdvdHRlbiBmcm9tIGEgZGVjaW1hbCBzdHJpbmcKLWxpdGVyYWwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBJTlQgb3Bjb2RlIGluIHRoZSBwaWNrbGUgYnl0ZXN0cmVhbS4gIE90aGVyCi1vcGNvZGVzIHRha2UgUHl0aG9uIG9iamVjdHMgb2ZmIHRoZSBzdGFjay4gIFRoZSByZXN1bHQgb2YgdW5waWNrbGluZyBpcwotd2hhdGV2ZXIgb2JqZWN0IGlzIGxlZnQgb24gdGhlIHN0YWNrIHdoZW4gdGhlIGZpbmFsIFNUT1Agb3Bjb2RlIGlzIGV4ZWN1dGVkLgotCi1UaGUgbWVtbyBpcyBzaW1wbHkgYW4gYXJyYXkgb2Ygb2JqZWN0cywgb3IgaXQgY2FuIGJlIGltcGxlbWVudGVkIGFzIGEgZGljdAotbWFwcGluZyBsaXR0bGUgaW50ZWdlcnMgdG8gb2JqZWN0cy4gIFRoZSBtZW1vIHNlcnZlcyBhcyB0aGUgUE0ncyAibG9uZyB0ZXJtCi1tZW1vcnkiLCBhbmQgdGhlIGxpdHRsZSBpbnRlZ2VycyBpbmRleGluZyB0aGUgbWVtbyBhcmUgYWtpbiB0byB2YXJpYWJsZQotbmFtZXMuICBTb21lIG9wY29kZXMgcG9wIGEgc3RhY2sgb2JqZWN0IGludG8gdGhlIG1lbW8gYXQgYSBnaXZlbiBpbmRleCwKLWFuZCBvdGhlcnMgcHVzaCBhIG1lbW8gb2JqZWN0IGF0IGEgZ2l2ZW4gaW5kZXggb250byB0aGUgc3RhY2sgYWdhaW4uCi0KLUF0IGhlYXJ0LCB0aGF0J3MgYWxsIHRoZSBQTSBoYXMuICBTdWJ0bGV0aWVzIGFyaXNlIGZvciB0aGVzZSByZWFzb25zOgotCi0rIE9iamVjdCBpZGVudGl0eS4gIE9iamVjdHMgY2FuIGJlIGFyYml0cmFyaWx5IGNvbXBsZXgsIGFuZCBzdWJvYmplY3RzCi0gIG1heSBiZSBzaGFyZWQgKGZvciBleGFtcGxlLCB0aGUgbGlzdCBbYSwgYV0gcmVmZXJzIHRvIHRoZSBzYW1lIG9iamVjdCBhCi0gIHR3aWNlKS4gIEl0IGNhbiBiZSB2aXRhbCB0aGF0IHVucGlja2xpbmcgcmVjcmVhdGUgYW4gaXNvbW9ycGhpYyBvYmplY3QKLSAgZ3JhcGgsIGZhaXRoZnVsbHkgcmVwcm9kdWNpbmcgc2hhcmluZy4KLQotKyBSZWN1cnNpdmUgb2JqZWN0cy4gIEZvciBleGFtcGxlLCBhZnRlciAiTCA9IFtdOyBMLmFwcGVuZChMKSIsIEwgaXMgYQotICBsaXN0LCBhbmQgTFswXSBpcyB0aGUgc2FtZSBsaXN0LiAgVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvYmplY3QgaWRlbnRpdHkKLSAgcG9pbnQsIGFuZCBzb21lIHNlcXVlbmNlcyBvZiBwaWNrbGUgb3Bjb2RlcyBhcmUgc3VidGxlIGluIG9yZGVyIHRvCi0gIGdldCB0aGUgcmlnaHQgcmVzdWx0IGluIGFsbCBjYXNlcy4KLQotKyBUaGluZ3MgcGlja2xlIGRvZXNuJ3Qga25vdyBldmVyeXRoaW5nIGFib3V0LiAgRXhhbXBsZXMgb2YgdGhpbmdzIHBpY2tsZQotICBkb2VzIGtub3cgZXZlcnl0aGluZyBhYm91dCBhcmUgUHl0aG9uJ3MgYnVpbHRpbiBzY2FsYXIgYW5kIGNvbnRhaW5lcgotICB0eXBlcywgbGlrZSBpbnRzIGFuZCB0dXBsZXMuICBUaGV5IGdlbmVyYWxseSBoYXZlIG9wY29kZXMgZGVkaWNhdGVkIHRvCi0gIHRoZW0uICBGb3IgdGhpbmdzIGxpa2UgbW9kdWxlIHJlZmVyZW5jZXMgYW5kIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQKLSAgY2xhc3NlcywgcGlja2xlJ3Mga25vd2xlZGdlIGlzIGxpbWl0ZWQuICBIaXN0b3JpY2FsbHksIG1hbnkgZW5oYW5jZW1lbnRzCi0gIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBwaWNrbGUgcHJvdG9jb2wgaW4gb3JkZXIgdG8gZG8gYSBiZXR0ZXIgKGZhc3RlciwKLSAgYW5kL29yIG1vcmUgY29tcGFjdCkgam9iIG9uIHRob3NlLgotCi0rIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIG1pY3JvLW9wdGltaXphdGlvbi4gIEFzIGV4cGxhaW5lZCBiZWxvdywKLSAgcGlja2xlIG9wY29kZXMgbmV2ZXIgZ28gYXdheSwgbm90IGV2ZW4gd2hlbiBiZXR0ZXIgd2F5cyB0byBkbyBhIHRoaW5nCi0gIGdldCBpbnZlbnRlZC4gIFRoZSByZXBlcnRvaXJlIG9mIHRoZSBQTSBqdXN0IGtlZXBzIGdyb3dpbmcgb3ZlciB0aW1lLgotICBGb3IgZXhhbXBsZSwgcHJvdG9jb2wgMCBoYWQgdHdvIG9wY29kZXMgZm9yIGJ1aWxkaW5nIFB5dGhvbiBpbnRlZ2VycyAoSU5UCi0gIGFuZCBMT05HKSwgcHJvdG9jb2wgMSBhZGRlZCB0aHJlZSBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZiBzaG9ydAotICBpbnRlZ2VycywgYW5kIHByb3RvY29sIDIgYWRkZWQgdHdvIG1vcmUgZm9yIG1vcmUtZWZmaWNpZW50IHBpY2tsaW5nIG9mCi0gIGxvbmcgaW50ZWdlcnMgKGJlZm9yZSBwcm90b2NvbCAyLCB0aGUgb25seSB3YXlzIHRvIHBpY2tsZSBhIFB5dGhvbiBsb25nCi0gIHRvb2sgdGltZSBxdWFkcmF0aWMgaW4gdGhlIG51bWJlciBvZiBkaWdpdHMsIGZvciBib3RoIHBpY2tsaW5nIGFuZAotICB1bnBpY2tsaW5nKS4gICJPcGNvZGUgYmxvYXQiIGlzbid0IHNvIG11Y2ggYSBzdWJ0bGV0eSBhcyBhIHNvdXJjZSBvZgotICB3ZWFyeWluZyBjb21wbGljYXRpb24uCi0KLQotUGlja2xlIHByb3RvY29sczoKLQotRm9yIGNvbXBhdGliaWxpdHksIHRoZSBtZWFuaW5nIG9mIGEgcGlja2xlIG9wY29kZSBuZXZlciBjaGFuZ2VzLiAgSW5zdGVhZCBuZXcKLXBpY2tsZSBvcGNvZGVzIGdldCBhZGRlZCwgYW5kIGVhY2ggdmVyc2lvbidzIHVucGlja2xlciBjYW4gaGFuZGxlIGFsbCB0aGUKLXBpY2tsZSBvcGNvZGVzIGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucyB0byBkYXRlLiAgU28gb2xkIHBpY2tsZXMgY29udGludWUgdG8KLWJlIHJlYWRhYmxlIGZvcmV2ZXIuICBUaGUgcGlja2xlciBjYW4gZ2VuZXJhbGx5IGJlIHRvbGQgdG8gcmVzdHJpY3QgaXRzZWxmIHRvCi10aGUgc3Vic2V0IG9mIG9wY29kZXMgYXZhaWxhYmxlIHVuZGVyIHByZXZpb3VzIHByb3RvY29sIHZlcnNpb25zIHRvbywgc28gdGhhdAotdXNlcnMgY2FuIGNyZWF0ZSBwaWNrbGVzIHVuZGVyIHRoZSBjdXJyZW50IHZlcnNpb24gcmVhZGFibGUgYnkgb2xkZXIKLXZlcnNpb25zLiAgSG93ZXZlciwgYSBwaWNrbGUgZG9lcyBub3QgY29udGFpbiBpdHMgdmVyc2lvbiBudW1iZXIgZW1iZWRkZWQKLXdpdGhpbiBpdC4gIElmIGFuIG9sZGVyIHVucGlja2xlciB0cmllcyB0byByZWFkIGEgcGlja2xlIHVzaW5nIGEgbGF0ZXIKLXByb3RvY29sLCB0aGUgcmVzdWx0IGlzIG1vc3QgbGlrZWx5IGFuIGV4Y2VwdGlvbiBkdWUgdG8gc2VlaW5nIGFuIHVua25vd24gKGluCi10aGUgb2xkZXIgdW5waWNrbGVyKSBvcGNvZGUuCi0KLVRoZSBvcmlnaW5hbCBwaWNrbGUgdXNlZCB3aGF0J3Mgbm93IGNhbGxlZCAicHJvdG9jb2wgMCIsIGFuZCB3aGF0IHdhcyBjYWxsZWQKLSJ0ZXh0IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhlIGVudGlyZSBwaWNrbGUgYnl0ZXN0cmVhbSBpcyBtYWRlIHVwIG9mCi1wcmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycywgcGx1cyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIsIGluIHByb3RvY29sIDAuCi1UaGF0J3Mgd2h5IGl0IHdhcyBjYWxsZWQgdGV4dCBtb2RlLiAgUHJvdG9jb2wgMCBpcyBzbWFsbCBhbmQgZWxlZ2FudCwgYnV0Ci1zb21ldGltZXMgcGFpbmZ1bGx5IGluZWZmaWNpZW50LgotCi1UaGUgc2Vjb25kIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgaXMgbm93IGNhbGxlZCAicHJvdG9jb2wgMSIsIGFuZCB3YXMgY2FsbGVkCi0iYmluYXJ5IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhpcyBhZGRlZCBtYW55IG9wY29kZXMgd2l0aCBhcmd1bWVudHMKLWNvbnNpc3Rpbmcgb2YgYXJiaXRyYXJ5IGJ5dGVzLCBpbmNsdWRpbmcgTlVMIGJ5dGVzIGFuZCB1bnByaW50YWJsZSAiaGlnaCBiaXQiCi1ieXRlcy4gIEJpbmFyeSBtb2RlIHBpY2tsZXMgY2FuIGJlIHN1YnN0YW50aWFsbHkgc21hbGxlciB0aGFuIGVxdWl2YWxlbnQKLXRleHQgbW9kZSBwaWNrbGVzLCBhbmQgc29tZXRpbWVzIGZhc3RlciB0b287IGUuZy4sIEJJTklOVCByZXByZXNlbnRzIGEgNC1ieXRlCi1pbnQgYXMgNCBieXRlcyBmb2xsb3dpbmcgdGhlIG9wY29kZSwgd2hpY2ggaXMgY2hlYXBlciB0byB1bnBpY2tsZSB0aGFuIHRoZQotKHBlcmhhcHMpIDExLWNoYXJhY3RlciBkZWNpbWFsIHN0cmluZyBhdHRhY2hlZCB0byBJTlQuICBQcm90b2NvbCAxIGFsc28gYWRkZWQKLWEgbnVtYmVyIG9mIG9wY29kZXMgdGhhdCBvcGVyYXRlIG9uIG1hbnkgc3RhY2sgZWxlbWVudHMgYXQgb25jZSAobGlrZSBBUFBFTkRTCi1hbmQgU0VUSVRFTVMpLCBhbmQgInNob3J0Y3V0IiBvcGNvZGVzIChsaWtlIEVNUFRZX0RJQ1QgYW5kIEVNUFRZX1RVUExFKS4KLQotVGhlIHRoaXJkIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgY2FtZSBpbiBQeXRob24gMi4zLCBhbmQgaXMgY2FsbGVkICJwcm90b2NvbAotMiIuICBUaGlzIGFkZGVkOgotCi0tIEEgYmV0dGVyIHdheSB0byBwaWNrbGUgaW5zdGFuY2VzIG9mIG5ldy1zdHlsZSBjbGFzc2VzIChORVdPQkopLgotCi0tIEEgd2F5IGZvciBhIHBpY2tsZSB0byBpZGVudGlmeSBpdHMgcHJvdG9jb2wgKFBST1RPKS4KLQotLSBUaW1lLSBhbmQgc3BhY2UtIGVmZmljaWVudCBwaWNrbGluZyBvZiBsb25nIGludHMgKExPTkd7MSw0fSkuCi0KLS0gU2hvcnRjdXRzIGZvciBzbWFsbCB0dXBsZXMgKFRVUExFezEsMiwzfX0uCi0KLS0gRGVkaWNhdGVkIG9wY29kZXMgZm9yIGJvb2xzIChORVdUUlVFLCBORVdGQUxTRSkuCi0KLS0gVGhlICJleHRlbnNpb24gcmVnaXN0cnkiLCBhIHZlY3RvciBvZiBwb3B1bGFyIG9iamVjdHMgdGhhdCBjYW4gYmUgcHVzaGVkCi0gIGVmZmljaWVudGx5IGJ5IGluZGV4IChFWFR7MSwyLDR9KS4gIFRoaXMgaXMgYWtpbiB0byB0aGUgbWVtbyBhbmQgR0VULCBidXQKLSAgdGhlIHJlZ2lzdHJ5IGNvbnRlbnRzIGFyZSBwcmVkZWZpbmVkICh0aGVyZSdzIG5vdGhpbmcgYWtpbiB0byB0aGUgbWVtbydzCi0gIFBVVCkuCi0KLUFub3RoZXIgaW5kZXBlbmRlbnQgY2hhbmdlIHdpdGggUHl0aG9uIDIuMyBpcyB0aGUgYWJhbmRvbm1lbnQgb2YgYW55Ci1wcmV0ZW5zZSB0aGF0IGl0IG1pZ2h0IGJlIHNhZmUgdG8gbG9hZCBwaWNrbGVzIHJlY2VpdmVkIGZyb20gdW50cnVzdGVkCi1wYXJ0aWVzIC0tIG5vIHN1ZmZpY2llbnQgc2VjdXJpdHkgYW5hbHlzaXMgaGFzIGJlZW4gZG9uZSB0byBndWFyYW50ZWUKLXRoaXMgYW5kIHRoZXJlIGlzbid0IGEgdXNlIGNhc2UgdGhhdCB3YXJyYW50cyB0aGUgZXhwZW5zZSBvZiBzdWNoIGFuCi1hbmFseXNpcy4KLQotVG8gdGhpcyBlbmQsIGFsbCB0ZXN0cyBmb3IgX19zYWZlX2Zvcl91bnBpY2tsaW5nX18gb3IgZm9yCi1jb3B5cmVnLnNhZmVfY29uc3RydWN0b3JzIGFyZSByZW1vdmVkIGZyb20gdGhlIHVucGlja2xpbmcgY29kZS4KLVJlZmVyZW5jZXMgdG8gdGhlc2UgdmFyaWFibGVzIGluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3cgYXJlIHRvIGJlIHNlZW4KLWFzIGRlc2NyaWJpbmcgdW5waWNrbGluZyBpbiBQeXRob24gMi4yIGFuZCBiZWZvcmUuCi0iIiIKIAogIyBNZXRhLXJ1bGU6ICBEZXNjcmlwdGlvbnMgYXJlIHN0b3JlZCBpbiBpbnN0YW5jZXMgb2YgZGVzY3JpcHRvciBvYmplY3RzLAogIyB3aXRoIHBsYWluIGNvbnN0cnVjdG9ycy4gIE5vIG1ldGEtbGFuZ3VhZ2UgaXMgZGVmaW5lZCBmcm9tIHdoaWNoCmRpZmYgLS1naXQgYS9MaWIvcGtndXRpbC5weSBiL0xpYi9wa2d1dGlsLnB5CmluZGV4IDIwZTY0OTguLmZiOWU1NmUgMTAwNjQ0Ci0tLSBhL0xpYi9wa2d1dGlsLnB5CisrKyBiL0xpYi9wa2d1dGlsLnB5CkBAIC0xLDEyICsxLDE0IEBACiAiIiJVdGlsaXRpZXMgdG8gc3VwcG9ydCBwYWNrYWdlcy4iIiIKIAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgc2luZ2xlZGlzcGF0Y2ggYXMgc2ltcGxlZ2VuZXJpYwogaW1wb3J0IGltcG9ydGxpYgotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCitpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQoraW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAotZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgoraW1wb3J0IHN5cwogZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQoraW1wb3J0IHdhcm5pbmdzCiAKIF9fYWxsX18gPSBbCiAgICAgJ2dldF9pbXBvcnRlcicsICdpdGVyX2ltcG9ydGVycycsICdnZXRfbG9hZGVyJywgJ2ZpbmRfbG9hZGVyJywKQEAgLTIwLDUzICsyMiwxMyBAQAogICAgIGltcG9ydCBtYXJzaGFsCiAKICAgICBtYWdpYyA9IHN0cmVhbS5yZWFkKDQpCi0gICAgaWYgbWFnaWMgIT0gaW1wLmdldF9tYWdpYygpOgorICAgIGlmIG1hZ2ljICE9IGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUjoKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIHN0cmVhbS5yZWFkKDgpICMgU2tpcCB0aW1lc3RhbXAgYW5kIHNpemUKICAgICByZXR1cm4gbWFyc2hhbC5sb2FkKHN0cmVhbSkKIAogCi1kZWYgc2ltcGxlZ2VuZXJpYyhmdW5jKToKLSAgICAiIiJNYWtlIGEgdHJpdmlhbCBzaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbiIiIgotICAgIHJlZ2lzdHJ5ID0ge30KLSAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6Ci0gICAgICAgIG9iID0gYXJnc1swXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbHMgPSBvYi5fX2NsYXNzX18KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgY2xzID0gdHlwZShvYikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbXJvID0gY2xzLl9fbXJvX18KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNsYXNzIGNscyhjbHMsIG9iamVjdCk6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBtcm8gPSBjbHMuX19tcm9fX1sxOl0KLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgbXJvID0gb2JqZWN0LCAgICMgbXVzdCBiZSBhbiBFeHRlbnNpb25DbGFzcyBvciBzb21lIHN1Y2ggIDooCi0gICAgICAgIGZvciB0IGluIG1ybzoKLSAgICAgICAgICAgIGlmIHQgaW4gcmVnaXN0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdHJ5W3RdKCphcmdzLCAqKmt3KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3cpCi0gICAgdHJ5OgotICAgICAgICB3cmFwcGVyLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXwotICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgIHBhc3MgICAgIyBQeXRob24gMi4zIGRvZXNuJ3QgYWxsb3cgZnVuY3Rpb25zIHRvIGJlIHJlbmFtZWQKLQotICAgIGRlZiByZWdpc3Rlcih0eXAsIGZ1bmM9Tm9uZSk6Ci0gICAgICAgIGlmIGZ1bmMgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBsYW1iZGEgZjogcmVnaXN0ZXIodHlwLCBmKQotICAgICAgICByZWdpc3RyeVt0eXBdID0gZnVuYwotICAgICAgICByZXR1cm4gZnVuYwotCi0gICAgd3JhcHBlci5fX2RpY3RfXyA9IGZ1bmMuX19kaWN0X18KLSAgICB3cmFwcGVyLl9fZG9jX18gPSBmdW5jLl9fZG9jX18KLSAgICB3cmFwcGVyLnJlZ2lzdGVyID0gcmVnaXN0ZXIKLSAgICByZXR1cm4gd3JhcHBlcgotCi0KIGRlZiB3YWxrX3BhY2thZ2VzKHBhdGg9Tm9uZSwgcHJlZml4PScnLCBvbmVycm9yPU5vbmUpOgogICAgICIiIllpZWxkcyAobW9kdWxlX2xvYWRlciwgbmFtZSwgaXNwa2cpIGZvciBhbGwgbW9kdWxlcyByZWN1cnNpdmVseQogICAgIG9uIHBhdGgsIG9yLCBpZiBwYXRoIGlzIE5vbmUsIGFsbCBhY2Nlc3NpYmxlIG1vZHVsZXMuCkBAIC0xMjEsOCArODMsNyBAQAogICAgICAgICAgICAgICAgICMgZG9uJ3QgdHJhdmVyc2UgcGF0aCBpdGVtcyB3ZSd2ZSBzZWVuIGJlZm9yZQogICAgICAgICAgICAgICAgIHBhdGggPSBbcCBmb3IgcCBpbiBwYXRoIGlmIG5vdCBzZWVuKHApXQogCi0gICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gd2Fsa19wYWNrYWdlcyhwYXRoLCBuYW1lKycuJywgb25lcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGl0ZW0KKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHdhbGtfcGFja2FnZXMocGF0aCwgbmFtZSsnLicsIG9uZXJyb3IpCiAKIAogZGVmIGl0ZXJfbW9kdWxlcyhwYXRoPU5vbmUsIHByZWZpeD0nJyk6CkBAIC0xNDksMTMgKzExMCwxMiBAQAogICAgICAgICAgICAgICAgIHlpZWxkIGksIG5hbWUsIGlzcGtnCiAKIAotI0BzaW1wbGVnZW5lcmljCitAc2ltcGxlZ2VuZXJpYwogZGVmIGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcyhpbXBvcnRlciwgcHJlZml4PScnKToKICAgICBpZiBub3QgaGFzYXR0cihpbXBvcnRlciwgJ2l0ZXJfbW9kdWxlcycpOgogICAgICAgICByZXR1cm4gW10KICAgICByZXR1cm4gaW1wb3J0ZXIuaXRlcl9tb2R1bGVzKHByZWZpeCkKIAotaXRlcl9pbXBvcnRlcl9tb2R1bGVzID0gc2ltcGxlZ2VuZXJpYyhpdGVyX2ltcG9ydGVyX21vZHVsZXMpCiAKICMgSW1wbGVtZW50IGEgZmlsZSB3YWxrZXIgZm9yIHRoZSBub3JtYWwgaW1wb3J0bGliIHBhdGggaG9vawogZGVmIF9pdGVyX2ZpbGVfZmluZGVyX21vZHVsZXMoaW1wb3J0ZXIsIHByZWZpeD0nJyk6CkBAIC0yMDEsNiArMTYxLDEzIEBACiBpdGVyX2ltcG9ydGVyX21vZHVsZXMucmVnaXN0ZXIoCiAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLCBfaXRlcl9maWxlX2ZpbmRlcl9tb2R1bGVzKQogCisKK2RlZiBfaW1wb3J0X2ltcCgpOgorICAgIGdsb2JhbCBpbXAKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgaW1wID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2ltcCcpCisKIGNsYXNzIEltcEltcG9ydGVyOgogICAgICIiIlBFUCAzMDIgSW1wb3J0ZXIgdGhhdCB3cmFwcyBQeXRob24ncyAiY2xhc3NpYyIgaW1wb3J0IGFsZ29yaXRobQogCkBAIC0yMTMsOCArMTgwLDEwIEBACiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD1Ob25lKToKLSAgICAgICAgd2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAorICAgICAgICBnbG9iYWwgaW1wCisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIF9pbXBvcnRfaW1wKCkKICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgpAQCAtMjc5LDggKzI0OCw5IEBACiAgICAgY29kZSA9IHNvdXJjZSA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdWxsbmFtZSwgZmlsZSwgZmlsZW5hbWUsIGV0Yyk6Ci0gICAgICAgIHdhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKLSAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIF9pbXBvcnRfaW1wKCkKICAgICAgICAgc2VsZi5maWxlID0gZmlsZQogICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKICAgICAgICAgc2VsZi5mdWxsbmFtZSA9IGZ1bGxuYW1lCkBAIC0zNTAsOSArMzIwLDggQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgICAgIGVsaWYgbW9kX3R5cGU9PWltcC5QWV9DT01QSUxFRDoKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmZpbGVuYW1lWzotMV0pOgotICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lWzotMV0sICdyJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBmLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWVbOi0xXSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBmLnJlYWQoKQogICAgICAgICAgICAgZWxpZiBtb2RfdHlwZT09aW1wLlBLR19ESVJFQ1RPUlk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBzZWxmLl9nZXRfZGVsZWdhdGUoKS5nZXRfc291cmNlKCkKICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlCkBAIC00NTYsOCArNDI1LDcgQEAKICAgICAgICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgZWxzZToKLSAgICAgICAgZm9yIGltcG9ydGVyIGluIHN5cy5tZXRhX3BhdGg6Ci0gICAgICAgICAgICB5aWVsZCBpbXBvcnRlcgorICAgICAgICB5aWVsZCBmcm9tIHN5cy5tZXRhX3BhdGgKICAgICAgICAgcGF0aCA9IHN5cy5wYXRoCiAgICAgZm9yIGl0ZW0gaW4gcGF0aDoKICAgICAgICAgeWllbGQgZ2V0X2ltcG9ydGVyKGl0ZW0pCkBAIC01ODksMTYgKzU1NywxNiBAQAogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwa2dmaWxlKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmID0gb3Blbihwa2dmaWxlKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IG9wZW4gJXM6ICVzXG4iICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2dmaWxlLCBtc2cpKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUgb3IgbGluZS5zdGFydHN3aXRoKCcjJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZChsaW5lKSAjIERvbid0IGNoZWNrIGZvciBleGlzdGVuY2UhCi0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZSBvciBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5hcHBlbmQobGluZSkgIyBEb24ndCBjaGVjayBmb3IgZXhpc3RlbmNlIQogCiAgICAgcmV0dXJuIHBhdGgKIApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L0lOLnB5IGIvTGliL3BsYXQtb3MyZW14L0lOLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTNhZTI0Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9JTi5weQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9uZXRpbmV0L2luLmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy9wYXJhbS5oCi1QQUdFX1NJWkUgPSAweDEwMDAKLUhaID0gMTAwCi1NQVhOQU1MRU4gPSAyNjAKLU1BWFBBVEhMRU4gPSAyNjAKLWRlZiBodG9ubChYKTogcmV0dXJuIF9zd2FwbChYKQotCi1kZWYgbnRvaGwoWCk6IHJldHVybiBfc3dhcGwoWCkKLQotZGVmIGh0b25zKFgpOiByZXR1cm4gX3N3YXBzKFgpCi0KLWRlZiBudG9ocyhYKTogcmV0dXJuIF9zd2FwcyhYKQotCi1JUFBST1RPX0lQID0gMAotSVBQUk9UT19JQ01QID0gMQotSVBQUk9UT19JR01QID0gMgotSVBQUk9UT19HR1AgPSAzCi1JUFBST1RPX1RDUCA9IDYKLUlQUFJPVE9fRUdQID0gOAotSVBQUk9UT19QVVAgPSAxMgotSVBQUk9UT19VRFAgPSAxNwotSVBQUk9UT19JRFAgPSAyMgotSVBQUk9UT19UUCA9IDI5Ci1JUFBST1RPX0VPTiA9IDgwCi1JUFBST1RPX1JBVyA9IDI1NQotSVBQUk9UT19NQVggPSAyNTYKLUlQUE9SVF9SRVNFUlZFRCA9IDEwMjQKLUlQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCi1kZWYgSU5fQ0xBU1NBKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ODAwMDAwMDApID09IDApCi0KLUlOX0NMQVNTQV9ORVQgPSAweGZmMDAwMDAwCi1JTl9DTEFTU0FfTlNISUZUID0gMjQKLUlOX0NMQVNTQV9IT1NUID0gMHgwMGZmZmZmZgotSU5fQ0xBU1NBX01BWCA9IDEyOAotZGVmIElOX0NMQVNTQihpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGMwMDAwMDAwKSA9PSAweDgwMDAwMDAwKQotCi1JTl9DTEFTU0JfTkVUID0gMHhmZmZmMDAwMAotSU5fQ0xBU1NCX05TSElGVCA9IDE2Ci1JTl9DTEFTU0JfSE9TVCA9IDB4MDAwMGZmZmYKLUlOX0NMQVNTQl9NQVggPSA2NTUzNgotZGVmIElOX0NMQVNTQyhpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGMwMDAwMDAwKQotCi1JTl9DTEFTU0NfTkVUID0gMHhmZmZmZmYwMAotSU5fQ0xBU1NDX05TSElGVCA9IDgKLUlOX0NMQVNTQ19IT1NUID0gMHgwMDAwMDBmZgotZGVmIElOX0NMQVNTRChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGYwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1JTl9DTEFTU0RfTkVUID0gMHhmMDAwMDAwMAotSU5fQ0xBU1NEX05TSElGVCA9IDI4Ci1JTl9DTEFTU0RfSE9TVCA9IDB4MGZmZmZmZmYKLWRlZiBJTl9NVUxUSUNBU1QoaSk6IHJldHVybiBJTl9DTEFTU0QoaSkKLQotZGVmIElOX0VYUEVSSU1FTlRBTChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1kZWYgSU5fQkFEQ0xBU1MoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkKLQotSU5BRERSX0FOWSA9IDB4MDAwMDAwMDAKLUlOQUREUl9MT09QQkFDSyA9IDB4N2YwMDAwMDEKLUlOQUREUl9CUk9BRENBU1QgPSAweGZmZmZmZmZmCi1JTkFERFJfTk9ORSA9IDB4ZmZmZmZmZmYKLUlOQUREUl9VTlNQRUNfR1JPVVAgPSAweGUwMDAwMDAwCi1JTkFERFJfQUxMSE9TVFNfR1JPVVAgPSAweGUwMDAwMDAxCi1JTkFERFJfTUFYX0xPQ0FMX0dST1VQID0gMHhlMDAwMDBmZgotSU5fTE9PUEJBQ0tORVQgPSAxMjcKLUlQX09QVElPTlMgPSAxCi1JUF9NVUxUSUNBU1RfSUYgPSAyCi1JUF9NVUxUSUNBU1RfVFRMID0gMwotSVBfTVVMVElDQVNUX0xPT1AgPSA0Ci1JUF9BRERfTUVNQkVSU0hJUCA9IDUKLUlQX0RST1BfTUVNQkVSU0hJUCA9IDYKLUlQX0hEUklOQ0wgPSAyCi1JUF9UT1MgPSAzCi1JUF9UVEwgPSA0Ci1JUF9SRUNWT1BUUyA9IDUKLUlQX1JFQ1ZSRVRPUFRTID0gNgotSVBfUkVDVkRTVEFERFIgPSA3Ci1JUF9SRVRPUFRTID0gOAotSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMID0gMQotSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCA9IDEKLUlQX01BWF9NRU1CRVJTSElQUyA9IDIwCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5IGIvTGliL3BsYXQtb3MyZW14L1NPQ0tFVC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNTk0YS4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9zeXMvc29ja2V0LmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy90eXBlcy5oCi1GRF9TRVRTSVpFID0gMjU2Ci0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvdWlvLmgKLUZSRUFEID0gMQotRldSSVRFID0gMgotU09DS19TVFJFQU0gPSAxCi1TT0NLX0RHUkFNID0gMgotU09DS19SQVcgPSAzCi1TT0NLX1JETSA9IDQKLVNPQ0tfU0VRUEFDS0VUID0gNQotU09fREVCVUcgPSAweDAwMDEKLVNPX0FDQ0VQVENPTk4gPSAweDAwMDIKLVNPX1JFVVNFQUREUiA9IDB4MDAwNAotU09fS0VFUEFMSVZFID0gMHgwMDA4Ci1TT19ET05UUk9VVEUgPSAweDAwMTAKLVNPX0JST0FEQ0FTVCA9IDB4MDAyMAotU09fVVNFTE9PUEJBQ0sgPSAweDAwNDAKLVNPX0xJTkdFUiA9IDB4MDA4MAotU09fT09CSU5MSU5FID0gMHgwMTAwCi1TT19MX0JST0FEQ0FTVCA9IDB4MDIwMAotU09fUkNWX1NIVVRET1dOID0gMHgwNDAwCi1TT19TTkRfU0hVVERPV04gPSAweDA4MDAKLVNPX1NOREJVRiA9IDB4MTAwMQotU09fUkNWQlVGID0gMHgxMDAyCi1TT19TTkRMT1dBVCA9IDB4MTAwMwotU09fUkNWTE9XQVQgPSAweDEwMDQKLVNPX1NORFRJTUVPID0gMHgxMDA1Ci1TT19SQ1ZUSU1FTyA9IDB4MTAwNgotU09fRVJST1IgPSAweDEwMDcKLVNPX1RZUEUgPSAweDEwMDgKLVNPX09QVElPTlMgPSAweDEwMTAKLVNPTF9TT0NLRVQgPSAweGZmZmYKLUFGX1VOU1BFQyA9IDAKLUFGX1VOSVggPSAxCi1BRl9JTkVUID0gMgotQUZfSU1QTElOSyA9IDMKLUFGX1BVUCA9IDQKLUFGX0NIQU9TID0gNQotQUZfTlMgPSA2Ci1BRl9OQlMgPSA3Ci1BRl9JU08gPSA3Ci1BRl9PU0kgPSBBRl9JU08KLUFGX0VDTUEgPSA4Ci1BRl9EQVRBS0lUID0gOQotQUZfQ0NJVFQgPSAxMAotQUZfU05BID0gMTEKLUFGX0RFQ25ldCA9IDEyCi1BRl9ETEkgPSAxMwotQUZfTEFUID0gMTQKLUFGX0hZTElOSyA9IDE1Ci1BRl9BUFBMRVRBTEsgPSAxNgotQUZfTkIgPSAxNwotQUZfTkVUQklPUyA9IEFGX05CCi1BRl9PUzIgPSBBRl9VTklYCi1BRl9NQVggPSAxOAotUEZfVU5TUEVDID0gQUZfVU5TUEVDCi1QRl9VTklYID0gQUZfVU5JWAotUEZfSU5FVCA9IEFGX0lORVQKLVBGX0lNUExJTksgPSBBRl9JTVBMSU5LCi1QRl9QVVAgPSBBRl9QVVAKLVBGX0NIQU9TID0gQUZfQ0hBT1MKLVBGX05TID0gQUZfTlMKLVBGX05CUyA9IEFGX05CUwotUEZfSVNPID0gQUZfSVNPCi1QRl9PU0kgPSBBRl9JU08KLVBGX0VDTUEgPSBBRl9FQ01BCi1QRl9EQVRBS0lUID0gQUZfREFUQUtJVAotUEZfQ0NJVFQgPSBBRl9DQ0lUVAotUEZfU05BID0gQUZfU05BCi1QRl9ERUNuZXQgPSBBRl9ERUNuZXQKLVBGX0RMSSA9IEFGX0RMSQotUEZfTEFUID0gQUZfTEFUCi1QRl9IWUxJTksgPSBBRl9IWUxJTksKLVBGX0FQUExFVEFMSyA9IEFGX0FQUExFVEFMSwotUEZfTkIgPSBBRl9OQgotUEZfTkVUQklPUyA9IEFGX05CCi1QRl9PUzIgPSBBRl9VTklYCi1QRl9NQVggPSBBRl9NQVgKLVNPTUFYQ09OTiA9IDUKLU1TR19PT0IgPSAweDEKLU1TR19QRUVLID0gMHgyCi1NU0dfRE9OVFJPVVRFID0gMHg0Ci1NU0dfRU9SID0gMHg4Ci1NU0dfVFJVTkMgPSAweDEwCi1NU0dfQ1RSVU5DID0gMHgyMAotTVNHX1dBSVRBTEwgPSAweDQwCi1NU0dfTUFYSU9WTEVOID0gMTYKLVNDTV9SSUdIVFMgPSAweDAxCi1NVF9GUkVFID0gMAotTVRfREFUQSA9IDEKLU1UX0hFQURFUiA9IDIKLU1UX1NPQ0tFVCA9IDMKLU1UX1BDQiA9IDQKLU1UX1JUQUJMRSA9IDUKLU1UX0hUQUJMRSA9IDYKLU1UX0FUQUJMRSA9IDcKLU1UX1NPTkFNRSA9IDgKLU1UX1pPTUJJRSA9IDkKLU1UX1NPT1BUUyA9IDEwCi1NVF9GVEFCTEUgPSAxMQotTVRfUklHSFRTID0gMTIKLU1UX0lGQUREUiA9IDEzCi1NQVhTT0NLRVRTID0gMjA0OApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weSBiL0xpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTZiNTQuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLSMgX2VteF9saW5rLnB5Ci0KLSMgV3JpdHRlbiBieSBBbmRyZXcgSSBNYWNJbnR5cmUsIERlY2VtYmVyIDIwMDIuCi0KLSIiIl9lbXhfbGluay5weSBpcyBhIHNpbXBsaXN0aWMgZW11bGF0aW9uIG9mIHRoZSBVbml4IGxpbmsoMikgbGlicmFyeSByb3V0aW5lCi1mb3IgY3JlYXRpbmcgc28tY2FsbGVkIGhhcmQgbGlua3MuICBJdCBpcyBpbnRlbmRlZCB0byBiZSBpbXBvcnRlZCBpbnRvCi10aGUgb3MgbW9kdWxlIGluIHBsYWNlIG9mIHRoZSB1bmltcGxlbWVudGVkIChvbiBPUy8yKSBQb3NpeCBsaW5rKCkKLWZ1bmN0aW9uIChvcy5saW5rKCkpLgotCi1XZSBkbyB0aGlzIG9uIE9TLzIgYnkgaW1wbGVtZW50aW5nIGEgZmlsZSBjb3B5LCB3aXRoIGxpbmsoMikgc2VtYW50aWNzOi0KLSAgLSB0aGUgdGFyZ2V0IGNhbm5vdCBhbHJlYWR5IGV4aXN0OwotICAtIHdlIGhvcGUgdGhhdCB0aGUgYWN0dWFsIGZpbGUgb3BlbiAoaWYgc3VjY2Vzc2Z1bCkgaXMgYWN0dWFsbHkKLSAgICBhdG9taWMuLi4KLQotTGltaXRhdGlvbnMgb2YgdGhpcyBhcHByb2FjaC9pbXBsZW1lbnRhdGlvbiBpbmNsdWRlOi0KLSAgLSBubyBzdXBwb3J0IGZvciBjb3JyZWN0IGxpbmsgY291bnRzIChFTVggc3RhdCh0YXJnZXQpLnN0X25saW5rCi0gICAgaXMgYWx3YXlzIDEpOwotICAtIHRocmVhZCBzYWZldHkgdW5kZWZpbmVkOwotICAtIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9ucyAocit3KSB1c2VkLCBjYW4ndCBiZSBvdmVyLXJpZGRlbjsKLSAgLSBpbXBsZW1lbnRlZCBpbiBQeXRob24gc28gY29tcGFyYXRpdmVseSBzbG93LCBlc3BlY2lhbGx5IGZvciBsYXJnZQotICAgIHNvdXJjZSBmaWxlczsKLSAgLSBuZWVkIHN1ZmZpY2llbnQgZnJlZSBkaXNrIHNwYWNlIHRvIHN0b3JlIHRoZSBjb3B5LgotCi1CZWhhdmlvdXI6LQotICAtIGFueSBleGNlcHRpb24gc2hvdWxkIHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyOwotICAtIHdhbnQgdGFyZ2V0IHRvIGJlIGFuIGV4YWN0IGNvcHkgb2YgdGhlIHNvdXJjZSwgc28gdXNlIGJpbmFyeSBtb2RlOwotICAtIHJldHVybnMgTm9uZSwgc2FtZSBhcyBvcy5saW5rKCkgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gcG9zaXhtb2R1bGUuYzsKLSAgLSB0YXJnZXQgcmVtb3ZlZCBpbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlIHdoZXJlIHBvc3NpYmxlOwotICAtIGdpdmVuIHRoZSBtb3RpdmF0aW9uIHRvIHdyaXRlIHRoaXMgZW11bGF0aW9uIGNhbWUgZnJvbSB0cnlpbmcgdG8KLSAgICBzdXBwb3J0IGEgVW5peCByZXNvdXJjZSBsb2NrIGltcGxlbWVudGF0aW9uLCB3aGVyZSBtaW5pbWFsIG92ZXJoZWFkCi0gICAgZHVyaW5nIGNyZWF0aW9uIG9mIHRoZSB0YXJnZXQgaXMgZGVzaXJhYmxlIGFuZCB0aGUgZmlsZXMgYXJlIHNtYWxsLAotICAgIHdlIHJlYWQgYSBzb3VyY2UgYmxvY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSB0YXJnZXQgc28gdGhhdAotICAgIHdlJ3JlIHJlYWR5IHRvIGltbWVkaWF0ZWx5IHdyaXRlIHNvbWUgZGF0YSBpbnRvIGl0LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi0KLV9fYWxsX18gPSBbJ2xpbmsnXQotCi1kZWYgbGluayhzb3VyY2UsIHRhcmdldCk6Ci0gICAgIiIibGluayhzb3VyY2UsIHRhcmdldCkgLT4gTm9uZQotCi0gICAgQXR0ZW1wdCB0byBoYXJkIGxpbmsgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSB0YXJnZXQgZmlsZSBuYW1lLgotICAgIE9uIE9TLzIsIHRoaXMgY3JlYXRlcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBmaWxlLgotICAgICIiIgotCi0gICAgcyA9IG9zLm9wZW4oc291cmNlLCBvcy5PX1JET05MWSB8IG9zLk9fQklOQVJZKQotICAgIGlmIG9zLmlzYXR0eShzKToKLSAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FWERFViwgJ0Nyb3NzLWRldmljZSBsaW5rJykKLSAgICBkYXRhID0gb3MucmVhZChzLCAxMDI0KQotCi0gICAgdHJ5OgotICAgICAgICB0ID0gb3Mub3Blbih0YXJnZXQsIG9zLk9fV1JPTkxZIHwgb3MuT19CSU5BUlkgfCBvcy5PX0NSRUFUIHwgb3MuT19FWENMKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBvcy5jbG9zZShzKQotICAgICAgICByYWlzZQotCi0gICAgdHJ5OgotICAgICAgICB3aGlsZSBkYXRhOgotICAgICAgICAgICAgb3Mud3JpdGUodCwgZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHMsIDEwMjQpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIG9zLmNsb3NlKHMpCi0gICAgICAgIG9zLmNsb3NlKHQpCi0gICAgICAgIG9zLnVubGluayh0YXJnZXQpCi0gICAgICAgIHJhaXNlCi0KLSAgICBvcy5jbG9zZShzKQotICAgIG9zLmNsb3NlKHQpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRyeToKLSAgICAgICAgbGluayhzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHByaW50KCdVc2FnZTogZW14X2xpbmsgPHNvdXJjZT4gPHRhcmdldD4nKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBwcmludCgnZW14X2xpbms6ICVzJyAlIHN0cihzeXMuZXhjX2luZm8oKVsxXSkpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5IGIvTGliL3BsYXQtb3MyZW14L2dycC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2M2VmOC4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIGdycCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCi0iIiJSZXBsYWNlbWVudCBmb3IgZ3JwIHN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUsIGludGVuZGVkIGZvciB1c2Ugb24KLU9TLzIgYW5kIHNpbWlsYXIgc3lzdGVtcyB3aGljaCBkb24ndCBub3JtYWxseSBoYXZlIGFuIC9ldGMvZ3JvdXAgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggZ3JvdXAgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNCBmaWVsZHMgcGVyCi1yZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSBncm91cCBuYW1lIChzdHJpbmcpCi0gIC0gZ3JvdXAgcGFzc3dvcmQgKG9wdGlvbmFsIGVuY3J5cHRlZCBzdHJpbmcpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgbWVtYmVycyAoY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgdXNlcmlkcywgd2l0aCBubyBzcGFjZXMpCi0KLU5vdGUgdGhhdCBtZW1iZXJzIGFyZSBvbmx5IGluY2x1ZGVkIGluIHRoZSBncm91cCBmaWxlIGZvciBncm91cHMgdGhhdAotYXJlbid0IHRoZWlyIHByaW1hcnkgZ3JvdXBzLgotKHNlZSB0aGUgc2VjdGlvbiA4LjIgb2YgdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSkKLQotVGhpcyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJzIGZyb20gdGhlIHN0YW5kYXJkIFVuaXggaW1wbGVtZW50YXRpb24gYnkKLWFsbG93aW5nIHVzZSBvZiB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyIC0gJzsnIG9uIE9TLzIsCi1ET1MgYW5kIE1TLVdpbmRvd3MgLSBhcyB0aGUgZmllbGQgc2VwYXJhdG9yIGluIGFkZGl0aW9uIHRvIHRoZSBVbml4Ci1zdGFuZGFyZCAiOiIuCi0KLVRoZSBtb2R1bGUgbG9va3MgZm9yIHRoZSBncm91cCBkYXRhYmFzZSBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9ucwotKGluIG9yZGVyIGZpcnN0IHRvIGxhc3QpOgotICAtICR7RVRDX0dST1VQfSAgICAgICAgICAgICAgKG9yICVFVENfR1JPVVAlKQotICAtICR7RVRDfS9ncm91cCAgICAgICAgICAgICAgKG9yICVFVEMlL2dyb3VwKQotICAtICR7UFlUSE9OSE9NRX0vRXRjL2dyb3VwICAgKG9yICVQWVRIT05IT01FJS9FdGMvZ3JvdXApCi0KLUNsYXNzZXMKLS0tLS0tLS0KLQotTm9uZQotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1nZXRncmdpZChnaWQpIC0gIHJldHVybiB0aGUgcmVjb3JkIGZvciBncm91cC1pZCBnaWQgYXMgYSA0LXR1cGxlCi0KLWdldGdybmFtKG5hbWUpIC0gcmV0dXJuIHRoZSByZWNvcmQgZm9yIGdyb3VwICduYW1lJyBhcyBhIDQtdHVwbGUKLQotZ2V0Z3JhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDQtdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotZ3JvdXBfZmlsZSAtICAgICB0aGUgcGF0aCBvZiB0aGUgZ3JvdXAgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBncm91cCBmaWxlCi1fX2dyb3VwX3BhdGggPSBbXQotaWYgJ0VUQ19HUk9VUCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKG9zLmVudmlyb25bJ0VUQ19HUk9VUCddKQotaWYgJ0VUQycgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKCclcy9ncm91cCcgJSBvcy5lbnZpcm9uWydFVEMnXSkKLWlmICdQWVRIT05IT01FJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fZ3JvdXBfcGF0aC5hcHBlbmQoJyVzL0V0Yy9ncm91cCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLWdyb3VwX2ZpbGUgPSBOb25lCi1mb3IgX19pIGluIF9fZ3JvdXBfcGF0aDoKLSAgICB0cnk6Ci0gICAgICAgIF9fZiA9IG9wZW4oX19pLCAncicpCi0gICAgICAgIF9fZi5jbG9zZSgpCi0gICAgICAgIGdyb3VwX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBkZWNpZGUgd2hhdCBmaWVsZCBzZXBhcmF0b3Igd2UgY2FuIHRyeSB0byB1c2UgLSBVbml4IHN0YW5kYXJkLCB3aXRoCi0jIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGFuIG9wdGlvbi4gIE5vIHNwZWNpYWwgZmllbGQgY29udmVyc2lvbgotIyBoYW5kbGVycyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBncm91cCBmaWxlLgotX19maWVsZF9zZXAgPSBbJzonXQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXAuYXBwZW5kKG9zLnBhdGhzZXApCi0KLSMgaGVscGVyIHJvdXRpbmUgdG8gaWRlbnRpZnkgd2hpY2ggc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBpbiB1c2UKLWRlZiBfX2dldF9maWVsZF9zZXAocmVjb3JkKToKLSAgICBmcyA9IE5vbmUKLSAgICBmb3IgYyBpbiBfX2ZpZWxkX3NlcDoKLSAgICAgICAgIyB0aGVyZSBzaG91bGQgYmUgMyBkZWxpbWl0ZXIgY2hhcmFjdGVycyAoZm9yIDQgZmllbGRzKQotICAgICAgICBpZiByZWNvcmQuY291bnQoYykgPT0gMzoKLSAgICAgICAgICAgIGZzID0gYwotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBmczoKLSAgICAgICAgcmV0dXJuIGZzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IGdyb3VwIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIEdyb3VwOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXNzd2QsIGdpZCwgbWVtKToKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snZ3JfbmFtZSddID0gbmFtZQotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9wYXNzd2QnXSA9IHBhc3N3ZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9naWQnXSA9IGdpZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9tZW0nXSA9IG1lbQotICAgICAgICBzZWxmLl9fZGljdF9fWydfcmVjb3JkJ10gPSAoc2VsZi5ncl9uYW1lLCBzZWxmLmdyX3Bhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ3JfZ2lkLCBzZWxmLmdyX21lbSkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gNAotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZWNvcmRba2V5XQotCi0gICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ2F0dHJpYnV0ZSByZWFkLW9ubHk6ICVzJyAlIG5hbWUpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzdHIoc2VsZi5fcmVjb3JkKQotCi0gICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICB0aGlzID0gc3RyKHNlbGYuX3JlY29yZCkKLSAgICAgICAgaWYgdGhpcyA9PSBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGVsaWYgdGhpcyA8IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0KLSMgcmVhZCB0aGUgd2hvbGUgZmlsZSwgcGFyc2luZyBlYWNoIGVudHJ5IGludG8gdHVwbGUgZm9ybQotIyB3aXRoIGRpY3Rpb25hcmllcyB0byBzcGVlZCByZWNhbGwgYnkgR0lEIG9yIGdyb3VwIG5hbWUKLWRlZiBfX3JlYWRfZ3JvdXBfZmlsZSgpOgotICAgIGlmIGdyb3VwX2ZpbGU6Ci0gICAgICAgIGdyb3VwID0gb3Blbihncm91cF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIGdyb3VwIGRhdGFiYXNlIDw8JykKLSAgICBnaWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgMToKLSAgICAgICAgZW50cnkgPSBncm91cC5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgbGVuKGVudHJ5KSA+IDM6Ci0gICAgICAgICAgICBpZiBzZXAgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZXAgPSBfX2dldF9maWVsZF9zZXAoZW50cnkpCi0gICAgICAgICAgICBmaWVsZHMgPSBlbnRyeS5zcGxpdChzZXApCi0gICAgICAgICAgICBmaWVsZHNbMl0gPSBpbnQoZmllbGRzWzJdKQotICAgICAgICAgICAgZmllbGRzWzNdID0gW2Yuc3RyaXAoKSBmb3IgZiBpbiBmaWVsZHNbM10uc3BsaXQoJywnKV0KLSAgICAgICAgICAgIHJlY29yZCA9IEdyb3VwKCpmaWVsZHMpCi0gICAgICAgICAgICBpZiBmaWVsZHNbMl0gbm90IGluIGdpZHg6Ci0gICAgICAgICAgICAgICAgZ2lkeFtmaWVsZHNbMl1dID0gcmVjb3JkCi0gICAgICAgICAgICBpZiBmaWVsZHNbMF0gbm90IGluIG5hbXg6Ci0gICAgICAgICAgICAgICAgbmFteFtmaWVsZHNbMF1dID0gcmVjb3JkCi0gICAgICAgIGVsaWYgbGVuKGVudHJ5KSA+IDA6Ci0gICAgICAgICAgICBwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBlbXB0eSBvciBtYWxmb3JtZWQgcmVjb3JkcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBncm91cC5jbG9zZSgpCi0gICAgaWYgbGVuKGdpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuIChnaWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cnkgYnkgR0lECi1kZWYgZ2V0Z3JnaWQoZ2lkKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBnW2dpZF0KLQotIyByZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGJ5IGdyb3VwIG5hbWUKLWRlZiBnZXRncm5hbShuYW1lKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBuW25hbWVdCi0KLSMgcmV0dXJuIGFsbCB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldGdyYWxsKCk6Ci0gICAgZywgbiA9IF9fcmVhZF9ncm91cF9maWxlKCkKLSAgICByZXR1cm4gZy52YWx1ZXMoKQotCi0jIHRlc3QgaGFybmVzcwotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBnZXRncmFsbCgpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5IGIvTGliL3BsYXQtb3MyZW14L3B3ZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNiMDc3Zi4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIHB3ZCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgUGF0aCBjb252ZXJzaW9ucyBhcmUgYXJlIGFwcGxpZWQgd2hlbgotIyB0aGUgZGF0YWJhc2UgdXNlcyAiOiIgYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0KLSIiIlJlcGxhY2VtZW50IGZvciBwd2Qgc3RhbmRhcmQgZXh0ZW5zaW9uIG1vZHVsZSwgaW50ZW5kZWQgZm9yIHVzZSBvbgotT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zIHdoaWNoIGRvbid0IG5vcm1hbGx5IGhhdmUgYW4gL2V0Yy9wYXNzd2QgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggcGFzc3dvcmQgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNyBmaWVsZHMKLXBlciByZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSB1c2VyIG5hbWUgKHN0cmluZykKLSAgLSBwYXNzd29yZCAoZW5jcnlwdGVkIHN0cmluZywgb3IgIioiIG9yICIiKQotICAtIHVzZXIgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZGVzY3JpcHRpb24gKHVzdWFsbHkgdXNlcidzIG5hbWUpCi0gIC0gaG9tZSBkaXJlY3RvcnkgKHBhdGggdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5KQotICAtIHNoZWxsIChwYXRoIHRvIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwpCi0KLShzZWUgdGhlIHNlY3Rpb24gOC4xIG9mIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UpCi0KLVRoaXMgaW1wbGVtZW50YXRpb24gZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBVbml4IGltcGxlbWVudGF0aW9uIGJ5Ci1hbGxvd2luZyB1c2Ugb2YgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciAtICc7JyBvbiBPUy8yLAotRE9TIGFuZCBNUy1XaW5kb3dzIC0gYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBpbiBhZGRpdGlvbiB0byB0aGUgVW5peAotc3RhbmRhcmQgIjoiLiAgQWRkaXRpb25hbGx5LCB3aGVuICI6IiBpcyB0aGUgc2VwYXJhdG9yIHBhdGggY29udmVyc2lvbnMKLWFyZSBhcHBsaWVkIHRvIGRlYWwgd2l0aCBhbnkgbXVuZ2luZyBvZiB0aGUgZHJpdmUgbGV0dGVyIHJlZmVyZW5jZS4KLQotVGhlIG1vZHVsZSBsb29rcyBmb3IgdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zCi0oaW4gb3JkZXIgZmlyc3QgdG8gbGFzdCk6Ci0gIC0gJHtFVENfUEFTU1dEfSAgICAgICAgICAgICAob3IgJUVUQ19QQVNTV0QlKQotICAtICR7RVRDfS9wYXNzd2QgICAgICAgICAgICAgKG9yICVFVEMlL3Bhc3N3ZCkKLSAgLSAke1BZVEhPTkhPTUV9L0V0Yy9wYXNzd2QgIChvciAlUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLQotQ2xhc3NlcwotLS0tLS0tLQotCi1Ob25lCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWdldHB3dWlkKHVpZCkgLSAgcmV0dXJuIHRoZSByZWNvcmQgZm9yIHVzZXItaWQgdWlkIGFzIGEgNy10dXBsZQotCi1nZXRwd25hbShuYW1lKSAtIHJldHVybiB0aGUgcmVjb3JkIGZvciB1c2VyICduYW1lJyBhcyBhIDctdHVwbGUKLQotZ2V0cHdhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDctdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotcGFzc3dkX2ZpbGUgLSAgICB0aGUgcGF0aCBvZiB0aGUgcGFzc3dvcmQgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBwYXNzd2QgZmlsZQotX19wYXNzd2RfcGF0aCA9IFtdCi1pZiAnRVRDX1BBU1NXRCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydFVENfUEFTU1dEJ10pCi1pZiAnRVRDJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fcGFzc3dkX3BhdGguYXBwZW5kKCclcy9wYXNzd2QnICUgb3MuZW52aXJvblsnRVRDJ10pCi1pZiAnUFlUSE9OSE9NRScgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZCgnJXMvRXRjL3Bhc3N3ZCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLXBhc3N3ZF9maWxlID0gTm9uZQotZm9yIF9faSBpbiBfX3Bhc3N3ZF9wYXRoOgotICAgIHRyeToKLSAgICAgICAgX19mID0gb3BlbihfX2ksICdyJykKLSAgICAgICAgX19mLmNsb3NlKCkKLSAgICAgICAgcGFzc3dkX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBwYXRoIGNvbnZlcnNpb24gaGFuZGxlcnMKLWRlZiBfX251bGxwYXRoY29udihwYXRoKToKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQotCi1kZWYgX191bml4cGF0aGNvbnYocGF0aCk6Ci0gICAgIyB0d28ga25vd24gZHJpdmUgbGV0dGVyIHZhcmlhdGlvbnM6ICJ4OyIgYW5kICIkeCIKLSAgICBpZiBwYXRoWzBdID09ICckJzoKLSAgICAgICAgY29udiA9IHBhdGhbMV0gKyAnOicgKyBwYXRoWzI6XQotICAgIGVsaWYgcGF0aFsxXSA9PSAnOyc6Ci0gICAgICAgIGNvbnYgPSBwYXRoWzBdICsgJzonICsgcGF0aFsyOl0KLSAgICBlbHNlOgotICAgICAgICBjb252ID0gcGF0aAotICAgIHJldHVybiBjb252LnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCi0KLSMgZGVjaWRlIHdoYXQgZmllbGQgc2VwYXJhdG9yIHdlIGNhbiB0cnkgdG8gdXNlIC0gVW5peCBzdGFuZGFyZCwgd2l0aAotIyB0aGUgcGxhdGZvcm0ncyBwYXRoIHNlcGFyYXRvciBhcyBhbiBvcHRpb24uICBObyBzcGVjaWFsIGZpZWxkIGNvbnZlcnNpb24KLSMgaGFuZGxlciBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGZpZWxkCi0jIHNlcGFyYXRvciwgYnV0IGFyZSByZXF1aXJlZCBmb3IgdGhlIGhvbWUgZGlyZWN0b3J5IGFuZCBzaGVsbCBmaWVsZHMgd2hlbgotIyB1c2luZyB0aGUgc3RhbmRhcmQgVW5peCAoIjoiKSBmaWVsZCBzZXBhcmF0b3IuCi1fX2ZpZWxkX3NlcCA9IHsnOic6IF9fdW5peHBhdGhjb252fQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXBbb3MucGF0aHNlcF0gPSBfX251bGxwYXRoY29udgotCi0jIGhlbHBlciByb3V0aW5lIHRvIGlkZW50aWZ5IHdoaWNoIHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgaW4gdXNlCi1kZWYgX19nZXRfZmllbGRfc2VwKHJlY29yZCk6Ci0gICAgZnMgPSBOb25lCi0gICAgZm9yIGMgaW4gX19maWVsZF9zZXAua2V5cygpOgotICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSA2IGRlbGltaXRlciBjaGFyYWN0ZXJzIChmb3IgNyBmaWVsZHMpCi0gICAgICAgIGlmIHJlY29yZC5jb3VudChjKSA9PSA2OgotICAgICAgICAgICAgZnMgPSBjCi0gICAgICAgICAgICBicmVhawotICAgIGlmIGZzOgotICAgICAgICByZXR1cm4gZnMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBLZXlFcnJvcignPj4gcGFzc3dkIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIFBhc3N3ZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFzc3dkLCB1aWQsIGdpZCwgZ2Vjb3MsIGRpciwgc2hlbGwpOgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19uYW1lJ10gPSBuYW1lCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3Bhc3N3ZCddID0gcGFzc3dkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3VpZCddID0gdWlkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dpZCddID0gZ2lkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dlY29zJ10gPSBnZWNvcwotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19kaXInXSA9IGRpcgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19zaGVsbCddID0gc2hlbGwKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snX3JlY29yZCddID0gKHNlbGYucHdfbmFtZSwgc2VsZi5wd19wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X3VpZCwgc2VsZi5wd19naWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X2dlY29zLCBzZWxmLnB3X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHdfc2hlbGwpCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDcKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVjb3JkW2tleV0KLQotICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdhdHRyaWJ1dGUgcmVhZC1vbmx5OiAlcycgJSBuYW1lKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYuX3JlY29yZCkKLQotICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgdGhpcyA9IHN0cihzZWxmLl9yZWNvcmQpCi0gICAgICAgIGlmIHRoaXMgPT0gb3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbGlmIHRoaXMgPCBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKLQotCi0jIHJlYWQgdGhlIHdob2xlIGZpbGUsIHBhcnNpbmcgZWFjaCBlbnRyeSBpbnRvIHR1cGxlIGZvcm0KLSMgd2l0aCBkaWN0aW9uYXJpZXMgdG8gc3BlZWQgcmVjYWxsIGJ5IFVJRCBvciBwYXNzd2QgbmFtZQotZGVmIF9fcmVhZF9wYXNzd2RfZmlsZSgpOgotICAgIGlmIHBhc3N3ZF9maWxlOgotICAgICAgICBwYXNzd2QgPSBvcGVuKHBhc3N3ZF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIHBhc3N3b3JkIGRhdGFiYXNlIDw8JykKLSAgICB1aWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgZW50cnkgPSBwYXNzd2QucmVhZGxpbmUoKS5zdHJpcCgpCi0gICAgICAgIGlmIGxlbihlbnRyeSkgPiA2OgotICAgICAgICAgICAgaWYgc2VwIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VwID0gX19nZXRfZmllbGRfc2VwKGVudHJ5KQotICAgICAgICAgICAgZmllbGRzID0gZW50cnkuc3BsaXQoc2VwKQotICAgICAgICAgICAgZm9yIGkgaW4gKDIsIDMpOgotICAgICAgICAgICAgICAgIGZpZWxkc1tpXSA9IGludChmaWVsZHNbaV0pCi0gICAgICAgICAgICBmb3IgaSBpbiAoNSwgNik6Ci0gICAgICAgICAgICAgICAgZmllbGRzW2ldID0gX19maWVsZF9zZXBbc2VwXShmaWVsZHNbaV0pCi0gICAgICAgICAgICByZWNvcmQgPSBQYXNzd2QoKmZpZWxkcykKLSAgICAgICAgICAgIGlmIGZpZWxkc1syXSBub3QgaW4gdWlkeDoKLSAgICAgICAgICAgICAgICB1aWR4W2ZpZWxkc1syXV0gPSByZWNvcmQKLSAgICAgICAgICAgIGlmIGZpZWxkc1swXSBub3QgaW4gbmFteDoKLSAgICAgICAgICAgICAgICBuYW14W2ZpZWxkc1swXV0gPSByZWNvcmQKLSAgICAgICAgZWxpZiBsZW4oZW50cnkpID4gMDoKLSAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGVtcHR5IG9yIG1hbGZvcm1lZCByZWNvcmRzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmVhawotICAgIHBhc3N3ZC5jbG9zZSgpCi0gICAgaWYgbGVuKHVpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuICh1aWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IFVJRAotZGVmIGdldHB3dWlkKHVpZCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIHVbdWlkXQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IHBhc3N3ZCBuYW1lCi1kZWYgZ2V0cHduYW0obmFtZSk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG5bbmFtZV0KLQotIyByZXR1cm4gYWxsIHRoZSBwYXNzd2QgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldHB3YWxsKCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG4udmFsdWVzKCkKLQotIyB0ZXN0IGhhcm5lc3MKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZ2V0cHdhbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L3JlZ2VuIGIvTGliL3BsYXQtb3MyZW14L3JlZ2VuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzZWNkMmE4Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9yZWdlbgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyEgL2Jpbi9zaAotZXhwb3J0IElOQ0xVREU9JENfSU5DTFVERV9QQVRICi1zZXQgLXYKLXB5dGhvbi5leGUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5ICRDX0lOQ0xVREVfUEFUSC9mY250bC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvc3lzL3NvY2tldC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknICRDX0lOQ0xVREVfUEFUSC9uZXRpbmV0L2luLmgKLSNweXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvdGVybWlvcy5oCmRpZmYgLS1naXQgYS9MaWIvcGxhdGZvcm0ucHkgYi9MaWIvcGxhdGZvcm0ucHkKaW5kZXggZWM1ZGY4NS4uYzNjNGIzMiAxMDA3NTUKLS0tIGEvTGliL3BsYXRmb3JtLnB5CisrKyBiL0xpYi9wbGF0Zm9ybS5weQpAQCAtMTIyLDcgKzEyMiw3IEBACiBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgIyBvcy5kZXZudWxsIHdhcyBhZGRlZCBpbiBQeXRob24gMi40LCBzbyBlbXVsYXRlIGl0IGZvciBlYXJsaWVyCiAgICAgIyBQeXRob24gdmVyc2lvbnMKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicpOgogICAgICAgICAjIFVzZSB0aGUgb2xkIENQL00gTlVMIGFzIGRldmljZSBuYW1lCiAgICAgICAgIERFVl9OVUxMID0gJ05VTCcKICAgICBlbHNlOgpAQCAtMzE2LDcgKzMxNiw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBldGMgPSBvcy5saXN0ZGlyKCcvZXRjJykKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgUHJvYmFibHkgbm90IGEgVW5peCBzeXN0ZW0KICAgICAgICAgcmV0dXJuIGRpc3RuYW1lLHZlcnNpb24saWQKICAgICBldGMuc29ydCgpCkBAIC00MDMsMTMgKzQwMywxMyBAQAogCiBkZWYgX3N5c2NtZF92ZXIoc3lzdGVtPScnLCByZWxlYXNlPScnLCB2ZXJzaW9uPScnLAogCi0gICAgICAgICAgICAgICBzdXBwb3J0ZWRfcGxhdGZvcm1zPSgnd2luMzInLCd3aW4xNicsJ2RvcycsJ29zMicpKToKKyAgICAgICAgICAgICAgIHN1cHBvcnRlZF9wbGF0Zm9ybXM9KCd3aW4zMicsJ3dpbjE2JywnZG9zJykpOgogCiAgICAgIiIiIFRyaWVzIHRvIGZpZ3VyZSBvdXQgdGhlIE9TIHZlcnNpb24gdXNlZCBhbmQgcmV0dXJucwogICAgICAgICBhIHR1cGxlIChzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKS4KIAogICAgICAgICBJdCB1c2VzIHRoZSAidmVyIiBzaGVsbCBjb21tYW5kIGZvciB0aGlzIHdoaWNoIGlzIGtub3duCi0gICAgICAgIHRvIGV4aXN0cyBvbiBXaW5kb3dzLCBET1MgYW5kIE9TLzIuIFhYWCBPdGhlcnMgdG9vID8KKyAgICAgICAgdG8gZXhpc3RzIG9uIFdpbmRvd3MsIERPUy4gWFhYIE90aGVycyB0b28gPwogCiAgICAgICAgIEluIGNhc2UgdGhpcyBmYWlscywgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYXJlIHVzZWQgYXMKICAgICAgICAgZGVmYXVsdHMuCkBAIC00MjQsMTMgKzQyNCwxMCBAQAogICAgICAgICAgICAgcGlwZSA9IHBvcGVuKGNtZCkKICAgICAgICAgICAgIGluZm8gPSBwaXBlLnJlYWQoKQogICAgICAgICAgICAgaWYgcGlwZS5jbG9zZSgpOgotICAgICAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yKCdjb21tYW5kIGZhaWxlZCcpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY29tbWFuZCBmYWlsZWQnKQogICAgICAgICAgICAgIyBYWFggSG93IGNhbiBJIHN1cHByZXNzIHNoZWxsIGVycm9ycyBmcm9tIGJlaW5nIHdyaXR0ZW4KICAgICAgICAgICAgICMgICAgIHRvIHN0ZGVyciA/Ci0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6Ci0gICAgICAgICAgICAjcHJpbnQgJ0NvbW1hbmQgJXMgZmFpbGVkOiAlcycgJSAoY21kLHdoeSkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgI3ByaW50ICdDb21tYW5kICVzIGZhaWxlZDogJXMnICUgKGNtZCx3aHkpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlOgpAQCAtNTgxLDcgKzU3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICMgRGlzY2FyZCBhbnkgdHlwZSB0aGF0IGlzbid0IFJFR19TWgogICAgICAgICAgICAgICAgICAgICBpZiB0eXBlID09IFJFR19TWiBhbmQgbmFtZS5maW5kKCJTZXJ2ZXIiKSAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfdHlwZSA9IFZFUl9OVF9TRVJWRVIKLSAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAjIFVzZSBkZWZhdWx0IG9mIFZFUl9OVF9XT1JLU1RBVElPTgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKQEAgLTYzNyw2MiArNjM0LDYgQEAKICAgICBSZWdDbG9zZUtleShrZXlDdXJWZXIpCiAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUKIAotZGVmIF9tYWNfdmVyX2xvb2t1cChzZWxlY3RvcnMsZGVmYXVsdD1Ob25lKToKLQotICAgIGZyb20gX2dlc3RhbHQgaW1wb3J0IGdlc3RhbHQKLSAgICBsID0gW10KLSAgICBhcHBlbmQgPSBsLmFwcGVuZAotICAgIGZvciBzZWxlY3RvciBpbiBzZWxlY3RvcnM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGFwcGVuZChnZXN0YWx0KHNlbGVjdG9yKSkKLSAgICAgICAgZXhjZXB0IChSdW50aW1lRXJyb3IsIE9TRXJyb3IpOgotICAgICAgICAgICAgYXBwZW5kKGRlZmF1bHQpCi0gICAgcmV0dXJuIGwKLQotZGVmIF9iY2Qyc3RyKGJjZCk6Ci0KLSAgICByZXR1cm4gaGV4KGJjZClbMjpdCi0KLWRlZiBfbWFjX3Zlcl9nZXN0YWx0KCk6Ci0gICAgIiIiCi0gICAgICAgIFRoYW5rcyB0byBNYXJrIFIuIExldmluc29uIGZvciBtYWlsaW5nIGRvY3VtZW50YXRpb24gbGlua3MgYW5kCi0gICAgICAgIGNvZGUgZXhhbXBsZXMgZm9yIHRoaXMgZnVuY3Rpb24uIERvY3VtZW50YXRpb24gZm9yIHRoZQotICAgICAgICBnZXN0YWx0KCkgQVBJIGlzIGF2YWlsYWJsZSBvbmxpbmUgYXQ6Ci0KLSAgICAgICAgICAgaHR0cDovL3d3dy5yZ2Fyb3MubmwvZ2VzdGFsdC8KLSAgICAiIiIKLSAgICAjIENoZWNrIHdoZXRoZXIgdGhlIHZlcnNpb24gaW5mbyBtb2R1bGUgaXMgYXZhaWxhYmxlCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgX2dlc3RhbHQKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgIyBHZXQgdGhlIGluZm9zCi0gICAgc3lzdiwgc3lzYSA9IF9tYWNfdmVyX2xvb2t1cCgoJ3N5c3YnLCdzeXNhJykpCi0gICAgIyBEZWNvZGUgdGhlIGluZm9zCi0gICAgaWYgc3lzdjoKLSAgICAgICAgbWFqb3IgPSAoc3lzdiAmIDB4RkYwMCkgPj4gOAotICAgICAgICBtaW5vciA9IChzeXN2ICYgMHgwMEYwKSA+PiA0Ci0gICAgICAgIHBhdGNoID0gKHN5c3YgJiAweDAwMEYpCi0KLSAgICAgICAgaWYgKG1ham9yLCBtaW5vcikgPj0gKDEwLCA0KToKLSAgICAgICAgICAgICMgdGhlICdzeXN2JyBnZXN0YWxkIGNhbm5vdCByZXR1cm4gcGF0Y2hsZXZlbHMKLSAgICAgICAgICAgICMgaGlnaGVyIHRoYW4gOS4gQXBwbGUgaW50cm9kdWNlZCAzIG5ldwotICAgICAgICAgICAgIyBnZXN0YWx0IGNvZGVzIGluIDEwLjQgdG8gZGVhbCB3aXRoIHRoaXMKLSAgICAgICAgICAgICMgaXNzdWUgKG5lZWRlZCBiZWNhdXNlIHBhdGNoIGxldmVscyBjYW4KLSAgICAgICAgICAgICMgcnVuIGhpZ2hlciB0aGFuIDksIHN1Y2ggYXMgMTAuNC4xMSkKLSAgICAgICAgICAgIG1ham9yLG1pbm9yLHBhdGNoID0gX21hY192ZXJfbG9va3VwKCgnc3lzMScsJ3N5czInLCdzeXMzJykpCi0gICAgICAgICAgICByZWxlYXNlID0gJyVpLiVpLiVpJyAlKG1ham9yLCBtaW5vciwgcGF0Y2gpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWxlYXNlID0gJyVzLiVpLiVpJyAlIChfYmNkMnN0cihtYWpvciksbWlub3IscGF0Y2gpCi0KLSAgICBpZiBzeXNhOgotICAgICAgICBtYWNoaW5lID0gezB4MTogJzY4aycsCi0gICAgICAgICAgICAgICAgICAgMHgyOiAnUG93ZXJQQycsCi0gICAgICAgICAgICAgICAgICAgMHhhOiAnaTM4Nid9LmdldChzeXNhLCcnKQotCi0gICAgdmVyc2lvbmluZm89KCcnLCAnJywgJycpCi0gICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQotCiBkZWYgX21hY192ZXJfeG1sKCk6CiAgICAgZm4gPSAnL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0JwogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbik6CkBAIC03MDgsNyArNjQ5LDcgQEAKICAgICB2ZXJzaW9uaW5mbz0oJycsICcnLCAnJykKICAgICBtYWNoaW5lID0gb3MudW5hbWUoKS5tYWNoaW5lCiAgICAgaWYgbWFjaGluZSBpbiAoJ3BwYycsICdQb3dlciBNYWNpbnRvc2gnKToKLSAgICAgICAgIyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBnZXN0YWx0IGJhc2VkIGNvZGUKKyAgICAgICAgIyBDYW5vbmljYWwgbmFtZQogICAgICAgICBtYWNoaW5lID0gJ1Bvd2VyUEMnCiAKICAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uaW5mbyxtYWNoaW5lCkBAIC03MzAsMTIgKzY3MSw2IEBACiAgICAgaWYgaW5mbyBpcyBub3QgTm9uZToKICAgICAgICAgcmV0dXJuIGluZm8KIAotICAgICMgSWYgdGhhdCBkb2Vzbid0IHdvcmsgZm9yIHNvbWUgcmVhc29uIGZhbGwgYmFjayB0byByZWFkaW5nIHRoZQotICAgICMgaW5mb3JtYXRpb24gdXNpbmcgZ2VzdGFsdCBjYWxscy4KLSAgICBpbmZvID0gX21hY192ZXJfZ2VzdGFsdCgpCi0gICAgaWYgaW5mbyBpcyBub3QgTm9uZToKLSAgICAgICAgcmV0dXJuIGluZm8KLQogICAgICMgSWYgdGhhdCBhbHNvIGRvZXNuJ3Qgd29yayByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWVzCiAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQogCkBAIC04ODIsNyArODE3LDcgQEAKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBzb2NrZXQuZ2V0aG9zdG5hbWUoKQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgU3RpbGwgbm90IHdvcmtpbmcuLi4KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKIApAQCAtOTAxLDEyICs4MzYsMTIgQEAKIAogICAgICIiIiBJbnRlcmZhY2UgdG8gdGhlIHN5c3RlbSdzIHVuYW1lIGNvbW1hbmQuCiAgICAgIiIiCi0gICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicsJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnKToKICAgICAgICAgIyBYWFggT3RoZXJzIHRvbyA/CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdHJ5OgogICAgICAgICBmID0gb3MucG9wZW4oJ3VuYW1lICVzIDI+ICVzJyAlIChvcHRpb24sIERFVl9OVUxMKSkKLSAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLG9zLmVycm9yKToKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICBvdXRwdXQgPSBmLnJlYWQoKS5zdHJpcCgpCiAgICAgcmMgPSBmLmNsb3NlKCkKQEAgLTkyNCw3ICs4NTksNyBAQAogICAgICAgICBkZWZhdWx0IGluIGNhc2UgdGhlIGNvbW1hbmQgc2hvdWxkIGZhaWwuCiAKICAgICAiIiIKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicpOgogICAgICAgICAjIFhYWCBPdGhlcnMgdG9vID8KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0YXJnZXQgPSBfZm9sbG93X3N5bWxpbmtzKHRhcmdldCkKQEAgLTkzMiw3ICs4NjcsNyBAQAogICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2ZpbGUnLCB0YXJnZXRdLAogICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKIAotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3Isb3MuZXJyb3IpOgorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIG91dHB1dCA9IHByb2MuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoJ2xhdGluLTEnKQogICAgIHJjID0gcHJvYy53YWl0KCkKZGlmZiAtLWdpdCBhL0xpYi9wb3BsaWIucHkgYi9MaWIvcG9wbGliLnB5CmluZGV4IDQzZjgzMDUuLmQ2OGYxNjkgMTAwNjQ0Ci0tLSBhL0xpYi9wb3BsaWIucHkKKysrIGIvTGliL3BvcGxpYi5weQpAQCAtMTMsNyArMTMsMTUgQEAKIAogIyBJbXBvcnRzCiAKLWltcG9ydCByZSwgc29ja2V0CitpbXBvcnQgZXJybm8KK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAorCit0cnk6CisgICAgaW1wb3J0IHNzbAorICAgIEhBVkVfU1NMID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhBVkVfU1NMID0gRmFsc2UKIAogX19hbGxfXyA9IFsiUE9QMyIsImVycm9yX3Byb3RvIl0KIApAQCAtNjEsNiArNjksOCBAQAogICAgICAgICAgICAgQVBPUCBuYW1lIGRpZ2VzdCAgICAgICAgYXBvcChuYW1lLCBkaWdlc3QpCiAgICAgICAgICAgICBUT1AgbXNnIG4gICAgICAgICAgICAgICB0b3AobXNnLCBuKQogICAgICAgICAgICAgVUlETCBbbXNnXSAgICAgICAgICAgICAgdWlkbChtc2cgPSBOb25lKQorICAgICAgICAgICAgQ0FQQSAgICAgICAgICAgICAgICAgICAgY2FwYSgpCisgICAgICAgICAgICBTVExTICAgICAgICAgICAgICAgICAgICBzdGxzKCkKIAogICAgIFJhaXNlcyBvbmUgZXhjZXB0aW9uOiAnZXJyb3JfcHJvdG8nLgogCkBAIC04Nyw2ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NyZWF0ZV9zb2NrZXQodGltZW91dCkKICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCiAgICAgICAgIHNlbGYuX2RlYnVnZ2luZyA9IDAKQEAgLTI2OCw3ICsyNzksMTQgQEAKICAgICAgICAgaWYgc2VsZi5maWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgIyBUaGUgc2VydmVyIG1pZ2h0IGFscmVhZHkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2sgPSBOb25lCiAKICAgICAjX19kZWxfXyA9IHF1aXQKQEAgLTMyNCwyMSArMzQyLDcxIEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2hvcnRjbWQoJ1VJREwgJXMnICUgd2hpY2gpCiAgICAgICAgIHJldHVybiBzZWxmLl9sb25nY21kKCdVSURMJykKIAotdHJ5OgotICAgIGltcG9ydCBzc2wKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgorCisgICAgZGVmIGNhcGEoc2VsZik6CisgICAgICAgICIiIlJldHVybiBzZXJ2ZXIgY2FwYWJpbGl0aWVzIChSRkMgMjQ0OSkgYXMgYSBkaWN0aW9uYXJ5CisgICAgICAgID4+PiBjPXBvcGxpYi5QT1AzKCdsb2NhbGhvc3QnKQorICAgICAgICA+Pj4gYy5jYXBhKCkKKyAgICAgICAgeydJTVBMRU1FTlRBVElPTic6IFsnQ3lydXMnLCAnUE9QMycsICdzZXJ2ZXInLCAndjIuMi4xMiddLAorICAgICAgICAgJ1RPUCc6IFtdLCAnTE9HSU4tREVMQVknOiBbJzAnXSwgJ0FVVEgtUkVTUC1DT0RFJzogW10sCisgICAgICAgICAnRVhQSVJFJzogWydORVZFUiddLCAnVVNFUic6IFtdLCAnU1RMUyc6IFtdLCAnUElQRUxJTklORyc6IFtdLAorICAgICAgICAgJ1VJREwnOiBbXSwgJ1JFU1AtQ09ERVMnOiBbXX0KKyAgICAgICAgPj4+CisKKyAgICAgICAgUmVhbGx5LCBhY2NvcmRpbmcgdG8gUkZDIDI0NDksIHRoZSBjeXJ1cyBmb2xrcyBzaG91bGQgYXZvaWQKKyAgICAgICAgaGF2aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGxpdCBpbnRvIG11bHRpcGxlIGFyZ3VtZW50cy4uLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9wYXJzZWNhcChsaW5lKToKKyAgICAgICAgICAgIGxzdCA9IGxpbmUuZGVjb2RlKCdhc2NpaScpLnNwbGl0KCkKKyAgICAgICAgICAgIHJldHVybiBsc3RbMF0sIGxzdFsxOl0KKworICAgICAgICBjYXBzID0ge30KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuX2xvbmdjbWQoJ0NBUEEnKQorICAgICAgICAgICAgcmF3Y2FwcyA9IHJlc3BbMV0KKyAgICAgICAgICAgIGZvciBjYXBsaW5lIGluIHJhd2NhcHM6CisgICAgICAgICAgICAgICAgY2Fwbm0sIGNhcGFyZ3MgPSBfcGFyc2VjYXAoY2FwbGluZSkKKyAgICAgICAgICAgICAgICBjYXBzW2NhcG5tXSA9IGNhcGFyZ3MKKyAgICAgICAgZXhjZXB0IGVycm9yX3Byb3RvIGFzIF9lcnI6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBDQVBBIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyJykKKyAgICAgICAgcmV0dXJuIGNhcHMKKworCisgICAgZGVmIHN0bHMoc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiU3RhcnQgYSBUTFMgc2Vzc2lvbiBvbiB0aGUgYWN0aXZlIGNvbm5lY3Rpb24gYXMgc3BlY2lmaWVkIGluIFJGQyAyNTk1LgorCisgICAgICAgICAgICAgICAgY29udGV4dCAtIGEgc3NsLlNTTENvbnRleHQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBIQVZFX1NTTDoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzdXBwb3J0IG1pc3NpbmcnKQorICAgICAgICBpZiBzZWxmLl90bHNfZXN0YWJsaXNoZWQ6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBUTFMgc2Vzc2lvbiBhbHJlYWR5IGVzdGFibGlzaGVkJykKKyAgICAgICAgY2FwcyA9IHNlbGYuY2FwYSgpCisgICAgICAgIGlmIG5vdCAnU1RMUycgaW4gY2FwczoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFNUTFMgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXInKQorICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgcmVzcCA9IHNlbGYuX3Nob3J0Y21kKCdTVExTJykKKyAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCisgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgncmInKQorICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBUcnVlCisgICAgICAgIHJldHVybiByZXNwCisKKworaWYgSEFWRV9TU0w6CiAKICAgICBjbGFzcyBQT1AzX1NTTChQT1AzKToKICAgICAgICAgIiIiUE9QMyBjbGllbnQgY2xhc3Mgb3ZlciBTU0wgY29ubmVjdGlvbgogCi0gICAgICAgIEluc3RhbnRpYXRlIHdpdGg6IFBPUDNfU1NMKGhvc3RuYW1lLCBwb3J0PTk5NSwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lKQorICAgICAgICBJbnN0YW50aWF0ZSB3aXRoOiBQT1AzX1NTTChob3N0bmFtZSwgcG9ydD05OTUsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1Ob25lKQogCiAgICAgICAgICAgICAgICBob3N0bmFtZSAtIHRoZSBob3N0bmFtZSBvZiB0aGUgcG9wMyBvdmVyIHNzbCBzZXJ2ZXIKICAgICAgICAgICAgICAgIHBvcnQgLSBwb3J0IG51bWJlcgogICAgICAgICAgICAgICAga2V5ZmlsZSAtIFBFTSBmb3JtYXR0ZWQgZmlsZSB0aGF0IGNvbnRhaW5zIHlvdXIgcHJpdmF0ZSBrZXkKICAgICAgICAgICAgICAgIGNlcnRmaWxlIC0gUEVNIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlCisgICAgICAgICAgICAgICBjb250ZXh0IC0gYSBzc2wuU1NMQ29udGV4dAogCiAgICAgICAgIFNlZSB0aGUgbWV0aG9kcyBvZiB0aGUgcGFyZW50IGNsYXNzIFBPUDMgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbi4KICAgICAgICAgIiIiCkBAIC0zNjQsNiArNDMyLDEzIEBACiAgICAgICAgICAgICAgICAgc29jayA9IHNzbC53cmFwX3NvY2tldChzb2NrLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCiAgICAgICAgICAgICByZXR1cm4gc29jawogCisgICAgICAgIGRlZiBzdGxzKHNlbGYsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgICAgICIiIlRoZSBtZXRob2QgdW5jb25kaXRpb25hbGx5IHJhaXNlcyBhbiBleGNlcHRpb24gc2luY2UgdGhlCisgICAgICAgICAgICBTVExTIGNvbW1hbmQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkCisgICAgICAgICAgICBTU0wvVExTIHNlc3Npb24uCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzZXNzaW9uIGFscmVhZHkgZXN0YWJsaXNoZWQnKQorCiAgICAgX19hbGxfXy5hcHBlbmQoIlBPUDNfU1NMIikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9wb3NpeHBhdGgucHkgYi9MaWIvcG9zaXhwYXRoLnB5CmluZGV4IGIxZTFhOTIuLjQ5MmM0MTUgMTAwNjQ0Ci0tLSBhL0xpYi9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Bvc2l4cGF0aC5weQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmsiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNMTksoc3Quc3RfbW9kZSkKIApAQCAtMTcyLDU2ICsxNzIsMzUgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIAogCi0jIEFyZSB0d28gZmlsZW5hbWVzIHJlYWxseSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZWZpbGUoZjEsIGYyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHBhdGhuYW1lcyByZWZlcmVuY2UgdGhlIHNhbWUgYWN0dWFsIGZpbGUiIiIKLSAgICBzMSA9IG9zLnN0YXQoZjEpCi0gICAgczIgPSBvcy5zdGF0KGYyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIG9wZW4gZmlsZXMgcmVhbGx5IHJlZmVyZW5jaW5nIHRoZSBzYW1lIGZpbGU/Ci0jIChOb3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yISkKLQotZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHMxID0gb3MuZnN0YXQoZnAxKQotICAgIHMyID0gb3MuZnN0YXQoZnAyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIHN0YXQgYnVmZmVycyAob2J0YWluZWQgZnJvbSBzdGF0LCBmc3RhdCBvciBsc3RhdCkKLSMgZGVzY3JpYmluZyB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZXN0YXQoczEsIHMyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHJldHVybiBzMS5zdF9pbm8gPT0gczIuc3RfaW5vIGFuZCBcCi0gICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYKLQotCiAjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PwogIyAoRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBVTklYZXM/ICBJcyBpdCBldmVuIGd1YXJhbnRlZWQgdG8gd29yayBieSBQb3NpeD8pCiAKIGRlZiBpc21vdW50KHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCIiIgotICAgIGlmIGlzbGluayhwYXRoKToKLSAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKLSAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgdHJ5OgogICAgICAgICBzMSA9IG9zLmxzdGF0KHBhdGgpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhcmVudCA9IGpvaW4ocGF0aCwgJy4uJykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIyBJdCBkb2Vzbid0IGV4aXN0IC0tIHNvIG5vdCBhIG1vdW50IHBvaW50LiA6LSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKKyAgICAgICAgaWYgc3RhdC5TX0lTTE5LKHMxLnN0X21vZGUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKKyAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKKyAgICBlbHNlOgorICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsICcuLicpCisgICAgdHJ5OgogICAgICAgICBzMiA9IG9zLmxzdGF0KHBhcmVudCkKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZSAjIEl0IGRvZXNuJ3QgZXhpc3QgLS0gc28gbm90IGEgbW91bnQgcG9pbnQgOi0pCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgZGV2MSA9IHMxLnN0X2RldgogICAgIGRldjIgPSBzMi5zdF9kZXYKICAgICBpZiBkZXYxICE9IGRldjI6CmRpZmYgLS1naXQgYS9MaWIvcHByaW50LnB5IGIvTGliL3BwcmludC5weQppbmRleCAyMmJlMGI0Yi4uM2JlOWMzNiAxMDA2NDQKLS0tIGEvTGliL3BwcmludC5weQorKysgYi9MaWIvcHByaW50LnB5CkBAIC0zNCw2ICszNCw3IEBACiAKICIiIgogCitpbXBvcnQgcmUKIGltcG9ydCBzeXMgYXMgX3N5cwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QgYXMgX09yZGVyZWREaWN0CiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTyBhcyBfU3RyaW5nSU8KQEAgLTQxLDIyICs0MiwxOSBAQAogX19hbGxfXyA9IFsicHByaW50IiwicGZvcm1hdCIsImlzcmVhZGFibGUiLCJpc3JlY3Vyc2l2ZSIsInNhZmVyZXByIiwKICAgICAgICAgICAgIlByZXR0eVByaW50ZXIiXQogCi0jIGNhY2hlIHRoZXNlIGZvciBmYXN0ZXIgYWNjZXNzOgotX2NvbW1ham9pbiA9ICIsICIuam9pbgotX2lkID0gaWQKLV9sZW4gPSBsZW4KLV90eXBlID0gdHlwZQogCi0KLWRlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lKToKK2RlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCAqLAorICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAiIiJQcmV0dHktcHJpbnQgYSBQeXRob24gb2JqZWN0IHRvIGEgc3RyZWFtIFtkZWZhdWx0IGlzIHN5cy5zdGRvdXRdLiIiIgogICAgIHByaW50ZXIgPSBQcmV0dHlQcmludGVyKAotICAgICAgICBzdHJlYW09c3RyZWFtLCBpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZGVwdGg9ZGVwdGgpCisgICAgICAgIHN0cmVhbT1zdHJlYW0sIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCwKKyAgICAgICAgY29tcGFjdD1jb21wYWN0KQogICAgIHByaW50ZXIucHByaW50KG9iamVjdCkKIAotZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpOgorZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosIGNvbXBhY3Q9RmFsc2UpOgogICAgICIiIkZvcm1hdCBhIFB5dGhvbiBvYmplY3QgaW50byBhIHByZXR0eS1wcmludGVkIHJlcHJlc2VudGF0aW9uLiIiIgotICAgIHJldHVybiBQcmV0dHlQcmludGVyKGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCkucGZvcm1hdChvYmplY3QpCisgICAgcmV0dXJuIFByZXR0eVByaW50ZXIoaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3Q9Y29tcGFjdCkucGZvcm1hdChvYmplY3QpCiAKIGRlZiBzYWZlcmVwcihvYmplY3QpOgogICAgICIiIlZlcnNpb24gb2YgcmVwcigpIHdoaWNoIGNhbiBoYW5kbGUgcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlcy4iIiIKQEAgLTEwMSw3ICs5OSw4IEBACiAgICAgcmV0dXJuIF9zYWZlX2tleSh0WzBdKSwgX3NhZmVfa2V5KHRbMV0pCiAKIGNsYXNzIFByZXR0eVByaW50ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAgICAgIiIiSGFuZGxlIHByZXR0eSBwcmludGluZyBvcGVyYXRpb25zIG9udG8gYSBzdHJlYW0gdXNpbmcgYSBzZXQgb2YKICAgICAgICAgY29uZmlndXJlZCBwYXJhbWV0ZXJzLgogCkBAIC0xMTgsNiArMTE3LDkgQEAKICAgICAgICAgICAgIFRoZSBkZXNpcmVkIG91dHB1dCBzdHJlYW0uICBJZiBvbWl0dGVkIChvciBmYWxzZSksIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgb3V0cHV0IHN0cmVhbSBhdmFpbGFibGUgYXQgY29uc3RydWN0aW9uIHdpbGwgYmUgdXNlZC4KIAorICAgICAgICBjb21wYWN0CisgICAgICAgICAgICBJZiB0cnVlLCBzZXZlcmFsIGl0ZW1zIHdpbGwgYmUgY29tYmluZWQgaW4gb25lIGxpbmUuCisKICAgICAgICAgIiIiCiAgICAgICAgIGluZGVudCA9IGludChpbmRlbnQpCiAgICAgICAgIHdpZHRoID0gaW50KHdpZHRoKQpAQCAtMTMxLDYgKzEzMyw3IEBACiAgICAgICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3N0cmVhbSA9IF9zeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX2NvbXBhY3QgPSBib29sKGNvbXBhY3QpCiAKICAgICBkZWYgcHByaW50KHNlbGYsIG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3QsIHNlbGYuX3N0cmVhbSwgMCwgMCwge30sIDApCkBAIC0xNTAsMjggKzE1MywyNSBAQAogCiAgICAgZGVmIF9mb3JtYXQoc2VsZiwgb2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CiAgICAgICAgIGxldmVsID0gbGV2ZWwgKyAxCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoX3JlY3Vyc2lvbihvYmplY3QpKQogICAgICAgICAgICAgc2VsZi5fcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIob2JqZWN0LCBjb250ZXh0LCBsZXZlbCAtIDEpCi0gICAgICAgIHR5cCA9IF90eXBlKG9iamVjdCkKLSAgICAgICAgc2VwTGluZXMgPSBfbGVuKHJlcCkgPiAoc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlKQorICAgICAgICB0eXAgPSB0eXBlKG9iamVjdCkKKyAgICAgICAgbWF4X3dpZHRoID0gc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlCisgICAgICAgIHNlcExpbmVzID0gbGVuKHJlcCkgPiBtYXhfd2lkdGgKICAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKIAotICAgICAgICBpZiBzZWxmLl9kZXB0aCBhbmQgbGV2ZWwgPiBzZWxmLl9kZXB0aDoKLSAgICAgICAgICAgIHdyaXRlKHJlcCkKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIGlmIHNlcExpbmVzOgogICAgICAgICAgICAgciA9IGdldGF0dHIodHlwLCAiX19yZXByX18iLCBOb25lKQogICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIGRpY3QpOgogICAgICAgICAgICAgICAgIHdyaXRlKCd7JykKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbmRlbnRfcGVyX2xldmVsID4gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBfbGVuKG9iamVjdCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGxlbmd0aDoKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCiAgICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCArIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKQEAgLTE4MywxMyArMTgzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQogICAgICAgICAgICAgICAgICAgICB3cml0ZSgnOiAnKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgbGVuKHJlcCkgKyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBpZiBsZW5ndGggPiAxOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgZW50IGluIGl0ZW1zWzE6XToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGtleSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbiVzJXM6ICcgJSAoJyAnKmluZGVudCwgcmVwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQgKyBsZW4ocmVwKSArIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50IC0gc2VsZi5faW5kZW50X3Blcl9sZXZlbAogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgICAgICAgICAgIChpc3N1YmNsYXNzKHR5cCwgc2V0KSBhbmQgciBpcyBzZXQuX19yZXByX18pIG9yCiAgICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCBmcm96ZW5zZXQpIGFuZCByIGlzIGZyb3plbnNldC5fX3JlcHJfXykKICAgICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gX2xlbihvYmplY3QpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gbGVuKG9iamVjdCkKICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgbGlzdCk6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdbJykKICAgICAgICAgICAgICAgICAgICAgZW5kY2hhciA9ICddJwpAQCAtMjI1LDIzICsyMjUsNzEgQEAKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKICAgICAgICAgICAgICAgICBpZiBsZW5ndGg6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbb2JqaWRdID0gMQotICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgKyBzZWxmLl9pbmRlbnRfcGVyX2xldmVsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3RbMF0sIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbmd0aCA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW50IGluIG9iamVjdFsxOl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbicgKyAnICcqaW5kZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCAtIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0X2l0ZW1zKG9iamVjdCwgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICsgc2VsZi5faW5kZW50X3Blcl9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgdHVwbGUpIGFuZCBsZW5ndGggPT0gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJywnKQogICAgICAgICAgICAgICAgIHdyaXRlKGVuZGNoYXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBzdHIpIGFuZCBsZW4ob2JqZWN0KSA+IDAgYW5kIHIgaXMgc3RyLl9fcmVwcl9fOgorICAgICAgICAgICAgICAgIGRlZiBfc3RyX3BhcnRzKHMpOgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBzdHJpbmcgbGl0ZXJhbHMgY29tcHJpc2luZyB0aGUgcmVwcigpCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBzLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHJlcHIobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXApIDw9IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBIGxpc3Qgb2YgYWx0ZXJuYXRpbmcgKG5vbi1zcGFjZSwgc3BhY2UpIHN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KHInKFxzKyknLCBsaW5lKSArIFsnJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocGFydHMpLCAyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnRzW2ldICsgcGFydHNbaSsxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjdXJyZW50ICsgcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVwcihjYW5kaWRhdGUpKSA+IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVwcihjdXJyZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXByKGN1cnJlbnQpCisgICAgICAgICAgICAgICAgZm9yIGksIHJlcCBpbiBlbnVtZXJhdGUoX3N0cl9wYXJ0cyhvYmplY3QpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnXG4nICsgJyAnKmluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICB3cml0ZShyZXApCiAKKyAgICBkZWYgX2Zvcm1hdF9pdGVtcyhzZWxmLCBpdGVtcywgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICB3cml0ZSA9IHN0cmVhbS53cml0ZQorICAgICAgICBkZWxpbW5sID0gJyxcbicgKyAnICcgKiBpbmRlbnQKKyAgICAgICAgZGVsaW0gPSAnJworICAgICAgICB3aWR0aCA9IG1heF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gaW5kZW50IC0gYWxsb3dhbmNlICsgMgorICAgICAgICBmb3IgZW50IGluIGl0ZW1zOgorICAgICAgICAgICAgaWYgc2VsZi5fY29tcGFjdDoKKyAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGVudCwgY29udGV4dCwgbGV2ZWwpCisgICAgICAgICAgICAgICAgdyA9IGxlbihyZXApICsgMgorICAgICAgICAgICAgICAgIGlmIHdpZHRoIDwgdzoKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtYXhfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVsaW06CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgICAgICBpZiB3aWR0aCA+PSB3OgorICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGRlbGltKQorICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICcsICcKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd3JpdGUoZGVsaW0pCisgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKQorCiAgICAgZGVmIF9yZXByKHNlbGYsIG9iamVjdCwgY29udGV4dCwgbGV2ZWwpOgogICAgICAgICByZXByLCByZWFkYWJsZSwgcmVjdXJzaXZlID0gc2VsZi5mb3JtYXQob2JqZWN0LCBjb250ZXh0LmNvcHkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlcHRoLCBsZXZlbCkKQEAgLTI2Miw3ICszMTAsNyBAQAogIyBSZXR1cm4gdHJpcGxlIChyZXByX3N0cmluZywgaXNyZWFkYWJsZSwgaXNyZWN1cnNpdmUpLgogCiBkZWYgX3NhZmVfcmVwcihvYmplY3QsIGNvbnRleHQsIG1heGxldmVscywgbGV2ZWwpOgotICAgIHR5cCA9IF90eXBlKG9iamVjdCkKKyAgICB0eXAgPSB0eXBlKG9iamVjdCkKICAgICBpZiB0eXAgaXMgc3RyOgogICAgICAgICBpZiAnbG9jYWxlJyBub3QgaW4gX3N5cy5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIHJlcHIob2JqZWN0KSwgVHJ1ZSwgRmFsc2UKQEAgLTI4Niw3ICszMzQsNyBAQAogICAgIGlmIGlzc3ViY2xhc3ModHlwLCBkaWN0KSBhbmQgciBpcyBkaWN0Ll9fcmVwcl9fOgogICAgICAgICBpZiBub3Qgb2JqZWN0OgogICAgICAgICAgICAgcmV0dXJuICJ7fSIsIFRydWUsIEZhbHNlCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG1heGxldmVscyBhbmQgbGV2ZWwgPj0gbWF4bGV2ZWxzOgogICAgICAgICAgICAgcmV0dXJuICJ7Li4ufSIsIEZhbHNlLCBvYmppZCBpbiBjb250ZXh0CiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CkBAIC0zMDcsNyArMzU1LDcgQEAKICAgICAgICAgICAgIGlmIGtyZWN1ciBvciB2cmVjdXI6CiAgICAgICAgICAgICAgICAgcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KLSAgICAgICAgcmV0dXJuICJ7JXN9IiAlIF9jb21tYWpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKKyAgICAgICAgcmV0dXJuICJ7JXN9IiAlICIsICIuam9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQogCiAgICAgaWYgKGlzc3ViY2xhc3ModHlwLCBsaXN0KSBhbmQgciBpcyBsaXN0Ll9fcmVwcl9fKSBvciBcCiAgICAgICAgKGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIHIgaXMgdHVwbGUuX19yZXByX18pOgpAQCAtMzE1LDEzICszNjMsMTMgQEAKICAgICAgICAgICAgIGlmIG5vdCBvYmplY3Q6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJbXSIsIFRydWUsIEZhbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSAiWyVzXSIKLSAgICAgICAgZWxpZiBfbGVuKG9iamVjdCkgPT0gMToKKyAgICAgICAgZWxpZiBsZW4ob2JqZWN0KSA9PSAxOgogICAgICAgICAgICAgZm9ybWF0ID0gIiglcywpIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbm90IG9iamVjdDoKICAgICAgICAgICAgICAgICByZXR1cm4gIigpIiwgVHJ1ZSwgRmFsc2UKICAgICAgICAgICAgIGZvcm1hdCA9ICIoJXMpIgotICAgICAgICBvYmppZCA9IF9pZChvYmplY3QpCisgICAgICAgIG9iamlkID0gaWQob2JqZWN0KQogICAgICAgICBpZiBtYXhsZXZlbHMgYW5kIGxldmVsID49IG1heGxldmVsczoKICAgICAgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLi4uIiwgRmFsc2UsIG9iamlkIGluIGNvbnRleHQKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKQEAgLTM0MCw3ICszODgsNyBAQAogICAgICAgICAgICAgaWYgb3JlY3VyOgogICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IFRydWUKICAgICAgICAgZGVsIGNvbnRleHRbb2JqaWRdCi0gICAgICAgIHJldHVybiBmb3JtYXQgJSBfY29tbWFqb2luKGNvbXBvbmVudHMpLCByZWFkYWJsZSwgcmVjdXJzaXZlCisgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLCAiLmpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKIAogICAgIHJlcCA9IHJlcHIob2JqZWN0KQogICAgIHJldHVybiByZXAsIChyZXAgYW5kIG5vdCByZXAuc3RhcnRzd2l0aCgnPCcpKSwgRmFsc2UKQEAgLTM0OCw3ICszOTYsNyBAQAogCiBkZWYgX3JlY3Vyc2lvbihvYmplY3QpOgogICAgIHJldHVybiAoIjxSZWN1cnNpb24gb24gJXMgd2l0aCBpZD0lcz4iCi0gICAgICAgICAgICAlIChfdHlwZShvYmplY3QpLl9fbmFtZV9fLCBfaWQob2JqZWN0KSkpCisgICAgICAgICAgICAlICh0eXBlKG9iamVjdCkuX19uYW1lX18sIGlkKG9iamVjdCkpKQogCiAKIGRlZiBfcGVyZmNoZWNrKG9iamVjdD1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9wcm9maWxlLnB5IGIvTGliL3Byb2ZpbGUucHkKaW5kZXggNzQzZTc3ZC4uNWQwZTk2OCAxMDA3NTUKLS0tIGEvTGliL3Byb2ZpbGUucHkKKysrIGIvTGliL3Byb2ZpbGUucHkKQEAgLTQwLDYgKzQwLDQwIEBACiAjICAgICAgIHJldHVybiBpX2NvdW50CiAjaXRpbWVzID0gaW50ZWdlcl90aW1lciAjIHJlcGxhY2Ugd2l0aCBDIGNvZGVkIHRpbWVyIHJldHVybmluZyBpbnRlZ2VycwogCitjbGFzcyBfVXRpbHM6CisgICAgIiIiU3VwcG9ydCBjbGFzcyBmb3IgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggYXJlIHNoYXJlZCBieQorICAgIHByb2ZpbGUucHkgYW5kIGNQcm9maWxlLnB5IG1vZHVsZXMuCisgICAgTm90IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvZmlsZXIpOgorICAgICAgICBzZWxmLnByb2ZpbGVyID0gcHJvZmlsZXIKKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGVtZW50LCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW4oc3RhdGVtZW50KQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3Nob3cocHJvZiwgZmlsZW5hbWUsIHNvcnQpCisKKyAgICBkZWYgcnVuY3R4KHNlbGYsIHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc2hvdyhwcm9mLCBmaWxlbmFtZSwgc29ydCkKKworICAgIGRlZiBfc2hvdyhzZWxmLCBwcm9mLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvZi5wcmludF9zdGF0cyhzb3J0KQorCisKICMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIyBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgZm9yIHRoZSBwcm9maWxlciBjbGFzcwogIyBOb3RlIHRoYXQgYW4gaW5zdGFuY2Ugb2YgUHJvZmlsZSgpIGlzICpub3QqIG5lZWRlZCB0byBjYWxsIHRoZW0uCkBAIC01NiwxNSArOTAsNyBAQAogICAgIHN0YW5kYXJkIG5hbWUgc3RyaW5nIChmaWxlL2xpbmUvZnVuY3Rpb24tbmFtZSkgdGhhdCBpcyBwcmVzZW50ZWQgaW4KICAgICBlYWNoIGxpbmUuCiAgICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHRyeToKLSAgICAgICAgcHJvZiA9IHByb2YucnVuKHN0YXRlbWVudCkKLSAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgcGFzcwotICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHByb2YucHJpbnRfc3RhdHMoc29ydCkKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKICAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLApAQCAtNzIsMTYgKzk4LDggQEAKIAogICAgIHN0YXRlbWVudCBhbmQgZmlsZW5hbWUgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgcHJvZmlsZS5ydW4KICAgICAiIiIKLSAgICBwcm9mID0gUHJvZmlsZSgpCi0gICAgdHJ5OgotICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgIHBhc3MKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWUsIHNvcnQpCiAKLSAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAKIGNsYXNzIFByb2ZpbGU6CiAgICAgIiIiUHJvZmlsZXIgY2xhc3MuCkBAIC0zNzMsMTAgKzM5MSw5IEBACiAgICAgICAgICAgICAgICAgICBwcmludF9zdGF0cygpCiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLnNpbXVsYXRlX2NtZF9jb21wbGV0ZSgpCmRpZmYgLS1naXQgYS9MaWIvcHN0YXRzLnB5IGIvTGliL3BzdGF0cy5weQppbmRleCA2YTc3NjA1Li5lMWVjMzU1IDEwMDY0NAotLS0gYS9MaWIvcHN0YXRzLnB5CisrKyBiL0xpYi9wc3RhdHMucHkKQEAgLTkzLDkgKzkzLDggQEAKICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSB7fQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6Ci0gICAgICAgICAgICBmID0gb3BlbihhcmcsICdyYicpCi0gICAgICAgICAgICBzZWxmLnN0YXRzID0gbWFyc2hhbC5sb2FkKGYpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihhcmcsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0cyA9IG1hcnNoYWwubG9hZChmKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZpbGVfc3RhdHMgPSBvcy5zdGF0KGFyZykKICAgICAgICAgICAgICAgICBhcmcgPSB0aW1lLmN0aW1lKGZpbGVfc3RhdHMuc3RfbXRpbWUpICsgIiAgICAiICsgYXJnCkBAIC0xNDksMTEgKzE0OCw4IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIldyaXRlIHRoZSBwcm9maWxlIGRhdGEgdG8gYSBmaWxlIHdlIGtub3cgaG93IHRvIGxvYWQgYmFjay4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3YicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICMgbGlzdCB0aGUgdHVwbGUgaW5kaWNlcyBhbmQgZGlyZWN0aW9ucyBmb3Igc29ydGluZywKICAgICAjIGFsb25nIHdpdGggc29tZSBwcmludGFibGUgZGVzY3JpcHRpb24KQEAgLTYxMiw3ICs2MDgsNyBAQAogICAgICAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBTdGF0cyhsaW5lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KGVyci5hcmdzWzFdLCBmaWxlPXNlbGYuc3RyZWFtKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKZGlmZiAtLWdpdCBhL0xpYi9wdHkucHkgYi9MaWIvcHR5LnB5CmluZGV4IDNjY2Y2MTkuLmU4NDFmMTIgMTAwNjQ0Ci0tLSBhL0xpYi9wdHkucHkKKysrIGIvTGliL3B0eS5weQpAQCAtNDcsMjcgKzQ3LDE2IEBACiAgICAgcmV0dXJuIF9vcGVuX3Rlcm1pbmFsKCkKIAogZGVmIF9vcGVuX3Rlcm1pbmFsKCk6Ci0gICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLgotICAgIFNHSSBhbmQgZ2VuZXJpYyBCU0QgdmVyc2lvbiwgZm9yIHdoZW4gb3BlbnB0eSgpIGZhaWxzLiIiIgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IHNnaQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHR0eV9uYW1lLCBtYXN0ZXJfZmQgPSBzZ2kuX2dldHB0eShvcy5PX1JEV1IsIDBvNjY2LCAwKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByYWlzZSBvcy5lcnJvcihtc2cpCi0gICAgICAgIHJldHVybiBtYXN0ZXJfZmQsIHR0eV9uYW1lCisgICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLiIiIgogICAgIGZvciB4IGluICdwcXJzdHV2d3h5elBRUlNUJzoKICAgICAgICAgZm9yIHkgaW4gJzAxMjM0NTY3ODlhYmNkZWYnOgogICAgICAgICAgICAgcHR5X25hbWUgPSAnL2Rldi9wdHknICsgeCArIHkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4ocHR5X25hbWUsIG9zLk9fUkRXUikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByZXR1cm4gKGZkLCAnL2Rldi90dHknICsgeCArIHkpCi0gICAgcmFpc2Ugb3MuZXJyb3IoJ291dCBvZiBwdHkgZGV2aWNlcycpCisgICAgcmFpc2UgT1NFcnJvcignb3V0IG9mIHB0eSBkZXZpY2VzJykKIAogZGVmIHNsYXZlX29wZW4odHR5X25hbWUpOgogICAgICIiInNsYXZlX29wZW4odHR5X25hbWUpIC0+IHNsYXZlX2ZkCkBAIC04Myw3ICs3Miw3IEBACiAgICAgdHJ5OgogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgInB0ZW0iKQogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgImxkdGVybSIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTE3Myw4ICsxNjIsOSBAQAogICAgICAgICByZXN0b3JlID0gMAogICAgIHRyeToKICAgICAgICAgX2NvcHkobWFzdGVyX2ZkLCBtYXN0ZXJfcmVhZCwgc3RkaW5fcmVhZCkKLSAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiByZXN0b3JlOgogICAgICAgICAgICAgdHR5LnRjc2V0YXR0cihTVERJTl9GSUxFTk8sIHR0eS5UQ1NBRkxVU0gsIG1vZGUpCiAKICAgICBvcy5jbG9zZShtYXN0ZXJfZmQpCisgICAgcmV0dXJuIG9zLndhaXRwaWQocGlkLCAwKVsxXQpkaWZmIC0tZ2l0IGEvTGliL3B5X2NvbXBpbGUucHkgYi9MaWIvcHlfY29tcGlsZS5weQppbmRleCA2MmQ2OWFkLi4xMjc3YjkzIDEwMDY0NAotLS0gYS9MaWIvcHlfY29tcGlsZS5weQorKysgYi9MaWIvcHlfY29tcGlsZS5weQpAQCAtMywxNyArMywxNCBAQAogVGhpcyBtb2R1bGUgaGFzIGludGltYXRlIGtub3dsZWRnZSBvZiB0aGUgZm9ybWF0IG9mIC5weWMgZmlsZXMuCiAiIiIKIAotaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKLWltcG9ydCBtYXJzaGFsCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKLWltcG9ydCB0b2tlbml6ZQogaW1wb3J0IHRyYWNlYmFjawogCi1NQUdJQyA9IGltcC5nZXRfbWFnaWMoKQotCiBfX2FsbF9fID0gWyJjb21waWxlIiwgIm1haW4iLCAiUHlDb21waWxlRXJyb3IiXQogCiAKQEAgLTY1LDEzICs2Miw2IEBACiAgICAgICAgIHJldHVybiBzZWxmLm1zZwogCiAKLWRlZiB3cl9sb25nKGYsIHgpOgotICAgICIiIkludGVybmFsOyB3cml0ZSBhIDMyLWJpdCBpbnQgdG8gYSBmaWxlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIuIiIiCi0gICAgZi53cml0ZShieXRlcyhbeCAgICAgICAgICYgMHhmZiwKLSAgICAgICAgICAgICAgICAgICAoeCA+PiA4KSAgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICh4ID4+IDE2KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgKHggPj4gMjQpICYgMHhmZl0pKQotCiBkZWYgY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lLCBkb3JhaXNlPUZhbHNlLCBvcHRpbWl6ZT0tMSk6CiAgICAgIiIiQnl0ZS1jb21waWxlIG9uZSBQeXRob24gc291cmNlIGZpbGUgdG8gUHl0aG9uIGJ5dGVjb2RlLgogCkBAIC0xMDcsMTggKzk3LDMxIEBACiAgICAgU2VlIGNvbXBpbGVhbGwucHkgZm9yIGEgc2NyaXB0L21vZHVsZSB0aGF0IHVzZXMgdGhpcyBtb2R1bGUgdG8KICAgICBieXRlLWNvbXBpbGUgYWxsIGluc3RhbGxlZCBmaWxlcyAob3IgYWxsIGZpbGVzIGluIHNlbGVjdGVkCiAgICAgZGlyZWN0b3JpZXMpLgorCisgICAgRG8gbm90ZSB0aGF0IEZpbGVFeGlzdHNFcnJvciBpcyByYWlzZWQgaWYgY2ZpbGUgZW5kcyB1cCBwb2ludGluZyBhdCBhCisgICAgbm9uLXJlZ3VsYXIgZmlsZSBvciBzeW1saW5rLiBCZWNhdXNlIHRoZSBjb21waWxhdGlvbiB1c2VzIGEgZmlsZSByZW5hbWluZywKKyAgICB0aGUgcmVzdWx0aW5nIGZpbGUgd291bGQgYmUgcmVndWxhciBhbmQgdGh1cyBub3QgdGhlIHNhbWUgdHlwZSBvZiBmaWxlIGFzCisgICAgaXQgd2FzIHByZXZpb3VzbHkuCiAgICAgIiIiCi0gICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZpbGUpIGFzIGY6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0ID0gb3MuZnN0YXQoZi5maWxlbm8oKSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGUpCi0gICAgICAgIHRpbWVzdGFtcCA9IGludChzdC5zdF9tdGltZSkKLSAgICAgICAgc2l6ZSA9IHN0LnN0X3NpemUgJiAweEZGRkZGRkZGCi0gICAgICAgIGNvZGVzdHJpbmcgPSBmLnJlYWQoKQorICAgIGlmIGNmaWxlIGlzIE5vbmU6CisgICAgICAgIGlmIG9wdGltaXplID49IDA6CisgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKKyAgICBpZiBvcy5wYXRoLmlzbGluayhjZmlsZSk6CisgICAgICAgIG1zZyA9ICgne30gaXMgYSBzeW1saW5rIGFuZCB3aWxsIGJlIGNoYW5nZWQgaW50byBhIHJlZ3VsYXIgZmlsZSBpZiAnCisgICAgICAgICAgICAgICAnaW1wb3J0IHdyaXRlcyBhIGJ5dGUtY29tcGlsZWQgZmlsZSB0byBpdCcpCisgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcihtc2cuZm9ybWF0KGNmaWxlKSkKKyAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGNmaWxlKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKGNmaWxlKToKKyAgICAgICAgbXNnID0gKCd7fSBpcyBhIG5vbi1yZWd1bGFyIGZpbGUgYW5kIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGEgcmVndWxhciAnCisgICAgICAgICAgICAgICAnb25lIGlmIGltcG9ydCB3cml0ZXMgYSBieXRlLWNvbXBpbGVkIGZpbGUgdG8gaXQnKQorICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IobXNnLmZvcm1hdChjZmlsZSkpCisgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCc8cHlfY29tcGlsZT4nLCBmaWxlKQorICAgIHNvdXJjZV9ieXRlcyA9IGxvYWRlci5nZXRfZGF0YShmaWxlKQogICAgIHRyeToKLSAgICAgICAgY29kZW9iamVjdCA9IGJ1aWx0aW5zLmNvbXBpbGUoY29kZXN0cmluZywgZGZpbGUgb3IgZmlsZSwgJ2V4ZWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT1vcHRpbWl6ZSkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShzb3VyY2VfYnl0ZXMsIGRmaWxlIG9yIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29wdGltaXplPW9wdGltaXplKQogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICBweV9leGMgPSBQeUNvbXBpbGVFcnJvcihlcnIuX19jbGFzc19fLCBlcnIsIGRmaWxlIG9yIGZpbGUpCiAgICAgICAgIGlmIGRvcmFpc2U6CkBAIC0xMjYsMjggKzEyOSwyMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShweV9leGMubXNnICsgJ1xuJykKICAgICAgICAgICAgIHJldHVybgotICAgIGlmIGNmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGlmIG9wdGltaXplID49IDA6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQogICAgIHRyeToKICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKICAgICAgICAgaWYgZGlybmFtZToKICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0gICAgd2l0aCBvcGVuKGNmaWxlLCAnd2InKSBhcyBmYzoKLSAgICAgICAgZmMud3JpdGUoYidcMFwwXDBcMCcpCi0gICAgICAgIHdyX2xvbmcoZmMsIHRpbWVzdGFtcCkKLSAgICAgICAgd3JfbG9uZyhmYywgc2l6ZSkKLSAgICAgICAgbWFyc2hhbC5kdW1wKGNvZGVvYmplY3QsIGZjKQotICAgICAgICBmYy5mbHVzaCgpCi0gICAgICAgIGZjLnNlZWsoMCwgMCkKLSAgICAgICAgZmMud3JpdGUoTUFHSUMpCisgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHNvdXJjZV9zdGF0cyA9IGxvYWRlci5wYXRoX3N0YXRzKGZpbGUpCisgICAgYnl0ZWNvZGUgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fY29kZV90b19ieXRlY29kZSgKKyAgICAgICAgICAgIGNvZGUsIHNvdXJjZV9zdGF0c1snbXRpbWUnXSwgc291cmNlX3N0YXRzWydzaXplJ10pCisgICAgbW9kZSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9jYWxjX21vZGUoZmlsZSkKKyAgICBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fd3JpdGVfYXRvbWljKGNmaWxlLCBieXRlY29kZSwgbW9kZSkKICAgICByZXR1cm4gY2ZpbGUKIAorCiBkZWYgbWFpbihhcmdzPU5vbmUpOgogICAgICIiIkNvbXBpbGUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCiAKQEAgLTE3Myw3ICsxNjgsNyBAQAogICAgICAgICAgICAgZXhjZXB0IFB5Q29tcGlsZUVycm9yIGFzIGVycm9yOgogICAgICAgICAgICAgICAgIHJ2ID0gMQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IubXNnKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKICAgICAgICAgICAgICAgICBydiA9IDEKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yKQogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvcHlkb2MucHkgYi9MaWIvcHlkb2MucHkKaW5kZXggOWRjZTA3OS4uZDAyNDBmZiAxMDA3NTUKLS0tIGEvTGliL3B5ZG9jLnB5CisrKyBiL0xpYi9weWRvYy5weQpAQCAtNDQsMTYgKzQ0LDE2IEBACiAiIiIKIAogIyBLbm93biBidWdzIHRoYXQgY2FuJ3QgYmUgZml4ZWQgaGVyZToKLSMgICAtIGltcC5sb2FkX21vZHVsZSgpIGNhbm5vdCBiZSBwcmV2ZW50ZWQgZnJvbSBjbG9iYmVyaW5nIGV4aXN0aW5nCi0jICAgICBsb2FkZWQgbW9kdWxlcywgc28gY2FsbGluZyBzeW5vcHNpcygpIG9uIGEgYmluYXJ5IG1vZHVsZSBmaWxlCi0jICAgICBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBhbnkgZXhpc3RpbmcgbW9kdWxlIHdpdGggdGhlIHNhbWUgbmFtZS4KKyMgICAtIHN5bm9wc2lzKCkgY2Fubm90IGJlIHByZXZlbnRlZCBmcm9tIGNsb2JiZXJpbmcgZXhpc3RpbmcKKyMgICAgIGxvYWRlZCBtb2R1bGVzLgogIyAgIC0gSWYgdGhlIF9fZmlsZV9fIGF0dHJpYnV0ZSBvbiBhIG1vZHVsZSBpcyBhIHJlbGF0aXZlIHBhdGggYW5kCiAjICAgICB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgY2hhbmdlZCB3aXRoIG9zLmNoZGlyKCksIGFuIGluY29ycmVjdAogIyAgICAgcGF0aCB3aWxsIGJlIGRpc3BsYXllZC4KIAogaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgaW8KIGltcG9ydCBvcwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgaWYgbGFzdHVwZGF0ZSBpcyBOb25lIG9yIGxhc3R1cGRhdGUgPCBtdGltZToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmlsZSA9IHRva2VuaXplLm9wZW4oZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgbW9kdWxlIGNhbid0IGJlIG9wZW5lZCwgc28gc2tpcCBpdAogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgYmluYXJ5X3N1ZmZpeGVzID0gaW1wb3J0bGliLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU1s6XQpAQCAtMjY3LDIwICsyNjcsMTkgQEAKIAogZGVmIGltcG9ydGZpbGUocGF0aCk6CiAgICAgIiIiSW1wb3J0IGEgUHl0aG9uIHNvdXJjZSBmaWxlIG9yIGNvbXBpbGVkIGZpbGUgZ2l2ZW4gaXRzIHBhdGguIiIiCi0gICAgbWFnaWMgPSBpbXAuZ2V0X21hZ2ljKCkKKyAgICBtYWdpYyA9IGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUgogICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmaWxlOgotICAgICAgICBpZiBmaWxlLnJlYWQobGVuKG1hZ2ljKSkgPT0gbWFnaWM6Ci0gICAgICAgICAgICBraW5kID0gaW1wLlBZX0NPTVBJTEVECi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBraW5kID0gaW1wLlBZX1NPVVJDRQotICAgICAgICBmaWxlLnNlZWsoMCkKLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCi0gICAgICAgIG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5sb2FkX21vZHVsZShuYW1lLCBmaWxlLCBwYXRoLCAoZXh0LCAncicsIGtpbmQpKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByYWlzZSBFcnJvckR1cmluZ0ltcG9ydChwYXRoLCBzeXMuZXhjX2luZm8oKSkKLSAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIGlzX2J5dGVjb2RlID0gbWFnaWMgPT0gZmlsZS5yZWFkKGxlbihtYWdpYykpCisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCisgICAgbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICBpZiBpc19ieXRlY29kZToKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLl9ib290c3RyYXAuU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aCkKKyAgICBlbHNlOgorICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgZXhjZXB0OgorICAgICAgICByYWlzZSBFcnJvckR1cmluZ0ltcG9ydChwYXRoLCBzeXMuZXhjX2luZm8oKSkKIAogZGVmIHNhZmVpbXBvcnQocGF0aCwgZm9yY2Vsb2FkPTAsIGNhY2hlPXt9KToKICAgICAiIiJJbXBvcnQgYSBtb2R1bGU7IGhhbmRsZSBlcnJvcnM7IHJldHVybiBOb25lIGlmIHRoZSBtb2R1bGUgaXNuJ3QgZm91bmQuCkBAIC0xMjM2LDggKzEyMzUsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gZ2V0ZG9jKHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBwdXNoKHNlbGYuZG9jb3RoZXIoZ2V0YXR0cihvYmplY3QsIG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbW9kLCBtYXhsZW49NzAsIGRvYz1kb2MpICsgJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgcHVzaChzZWxmLmRvY290aGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihvYmplY3QsIG5hbWUsIE5vbmUpIG9yIGhvbWVjbHMuX19kaWN0X19bbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBtb2QsIG1heGxlbj03MCwgZG9jPWRvYykgKyAnXG4nKQogICAgICAgICAgICAgcmV0dXJuIGF0dHJzCiAKICAgICAgICAgYXR0cnMgPSBbKG5hbWUsIGtpbmQsIGNscywgdmFsdWUpCkBAIC0xMjU5LDcgKzEyNTksNiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0YWcgPSAiaW5oZXJpdGVkIGZyb20gJXMiICUgY2xhc3NuYW1lKHRoaXNjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX21vZHVsZV9fKQotCiAgICAgICAgICAgICAjIFNvcnQgYXR0cnMgYnkgbmFtZS4KICAgICAgICAgICAgIGF0dHJzLnNvcnQoKQogCkBAIC0xMjc0LDYgKzEyNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB0OiB0WzFdID09ICdkYXRhIGRlc2NyaXB0b3InKQogICAgICAgICAgICAgYXR0cnMgPSBzcGlsbGRhdGEoIkRhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgJXM6XG4iICUgdGFnLCBhdHRycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB0OiB0WzFdID09ICdkYXRhJykKKwogICAgICAgICAgICAgYXNzZXJ0IGF0dHJzID09IFtdCiAgICAgICAgICAgICBhdHRycyA9IGluaGVyaXRlZAogCkBAIC0xMzk2LDcgKzEzOTYsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSB0ZXh0OiBwaXBlcGFnZXIodGV4dCwgb3MuZW52aXJvblsnUEFHRVInXSkKICAgICBpZiBvcy5lbnZpcm9uLmdldCgnVEVSTScpIGluICgnZHVtYicsICdlbWFjcycpOgogICAgICAgICByZXR1cm4gcGxhaW5wYWdlcgotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdvczInKToKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgcmV0dXJuIGxhbWJkYSB0ZXh0OiB0ZW1wZmlsZXBhZ2VyKHBsYWluKHRleHQpLCAnbW9yZSA8JykKICAgICBpZiBoYXNhdHRyKG9zLCAnc3lzdGVtJykgYW5kIG9zLnN5c3RlbSgnKGxlc3MpIDI+L2Rldi9udWxsJykgPT0gMDoKICAgICAgICAgcmV0dXJuIGxhbWJkYSB0ZXh0OiBwaXBlcGFnZXIodGV4dCwgJ2xlc3MnKQpAQCAtMTQyMiwxNiArMTQyMiwxNSBAQAogICAgIHRyeToKICAgICAgICAgcGlwZS53cml0ZSh0ZXh0KQogICAgICAgICBwaXBlLmNsb3NlKCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcyAjIElnbm9yZSBicm9rZW4gcGlwZXMgY2F1c2VkIGJ5IHF1aXR0aW5nIHRoZSBwYWdlciBwcm9ncmFtLgogCiBkZWYgdGVtcGZpbGVwYWdlcih0ZXh0LCBjbWQpOgogICAgICIiIlBhZ2UgdGhyb3VnaCB0ZXh0IGJ5IGludm9raW5nIGEgcHJvZ3JhbSBvbiBhIHRlbXBvcmFyeSBmaWxlLiIiIgogICAgIGltcG9ydCB0ZW1wZmlsZQogICAgIGZpbGVuYW1lID0gdGVtcGZpbGUubWt0ZW1wKCkKLSAgICBmaWxlID0gb3BlbihmaWxlbmFtZSwgJ3cnKQotICAgIGZpbGUud3JpdGUodGV4dCkKLSAgICBmaWxlLmNsb3NlKCkKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZmlsZToKKyAgICAgICAgZmlsZS53cml0ZSh0ZXh0KQogICAgIHRyeToKICAgICAgICAgb3Muc3lzdGVtKGNtZCArICcgIicgKyBmaWxlbmFtZSArICciJykKICAgICBmaW5hbGx5OgpAQCAtMTg1MCwxMCArMTg0OSwxMCBAQAogUHl0aG9uIHByb2dyYW1zIGFuZCB1c2luZyBQeXRob24gbW9kdWxlcy4gIFRvIHF1aXQgdGhpcyBoZWxwIHV0aWxpdHkgYW5kCiByZXR1cm4gdG8gdGhlIGludGVycHJldGVyLCBqdXN0IHR5cGUgInF1aXQiLgogCi1UbyBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBtb2R1bGVzLCBrZXl3b3Jkcywgb3IgdG9waWNzLCB0eXBlICJtb2R1bGVzIiwKLSJrZXl3b3JkcyIsIG9yICJ0b3BpY3MiLiAgRWFjaCBtb2R1bGUgYWxzbyBjb21lcyB3aXRoIGEgb25lLWxpbmUgc3VtbWFyeQotb2Ygd2hhdCBpdCBkb2VzOyB0byBsaXN0IHRoZSBtb2R1bGVzIHdob3NlIHN1bW1hcmllcyBjb250YWluIGEgZ2l2ZW4gd29yZAotc3VjaCBhcyAic3BhbSIsIHR5cGUgIm1vZHVsZXMgc3BhbSIuCitUbyBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBtb2R1bGVzLCBrZXl3b3Jkcywgc3ltYm9scywgb3IgdG9waWNzLCB0eXBlCisibW9kdWxlcyIsICJrZXl3b3JkcyIsICJzeW1ib2xzIiwgb3IgInRvcGljcyIuICBFYWNoIG1vZHVsZSBhbHNvIGNvbWVzCit3aXRoIGEgb25lLWxpbmUgc3VtbWFyeSBvZiB3aGF0IGl0IGRvZXM7IHRvIGxpc3QgdGhlIG1vZHVsZXMgd2hvc2UgbmFtZQorb3Igc3VtbWFyeSBjb250YWluIGEgZ2l2ZW4gc3RyaW5nIHN1Y2ggYXMgInNwYW0iLCB0eXBlICJtb2R1bGVzIHNwYW0iLgogJycnICUgdHVwbGUoW3N5cy52ZXJzaW9uWzozXV0qMikpCiAKICAgICBkZWYgbGlzdChzZWxmLCBpdGVtcywgY29sdW1ucz00LCB3aWR0aD04MCk6CkBAIC0xOTE3LDExICsxOTE2LDEwIEBACiAgICAgICAgIGlmIG1vcmVfeHJlZnM6CiAgICAgICAgICAgICB4cmVmcyA9ICh4cmVmcyBvciAnJykgKyAnICcgKyBtb3JlX3hyZWZzCiAgICAgICAgIGlmIHhyZWZzOgotICAgICAgICAgICAgaW1wb3J0IGZvcm1hdHRlcgotICAgICAgICAgICAgYnVmZmVyID0gaW8uU3RyaW5nSU8oKQotICAgICAgICAgICAgZm9ybWF0dGVyLkR1bWJXcml0ZXIoYnVmZmVyKS5zZW5kX2Zsb3dpbmdfZGF0YSgKLSAgICAgICAgICAgICAgICAnUmVsYXRlZCBoZWxwIHRvcGljczogJyArICcsICcuam9pbih4cmVmcy5zcGxpdCgpKSArICdcbicpCi0gICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnXG4lc1xuJyAlIGJ1ZmZlci5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgaW1wb3J0IHRleHR3cmFwCisgICAgICAgICAgICB0ZXh0ID0gJ1JlbGF0ZWQgaGVscCB0b3BpY3M6ICcgKyAnLCAnLmpvaW4oeHJlZnMuc3BsaXQoKSkgKyAnXG4nCisgICAgICAgICAgICB3cmFwcGVkX3RleHQgPSB0ZXh0d3JhcC53cmFwKHRleHQsIDcyKQorICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJ1xuJXNcbicgJSAnJy5qb2luKHdyYXBwZWRfdGV4dCkpCiAKICAgICBkZWYgX2dldHRvcGljKHNlbGYsIHRvcGljLCBtb3JlX3hyZWZzPScnKToKICAgICAgICAgIiIiUmV0dXJuIHVuYnVmZmVyZWQgdHVwbGUgb2YgKHRvcGljLCB4cmVmcykuCkBAIC0xOTU4LDkgKzE5NTYsMTAgQEAKICAgICBkZWYgbGlzdG1vZHVsZXMoc2VsZiwga2V5PScnKToKICAgICAgICAgaWYga2V5OgogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCi1IZXJlIGlzIGEgbGlzdCBvZiBtYXRjaGluZyBtb2R1bGVzLiAgRW50ZXIgYW55IG1vZHVsZSBuYW1lIHRvIGdldCBtb3JlIGhlbHAuCitIZXJlIGlzIGEgbGlzdCBvZiBtb2R1bGVzIHdob3NlIG5hbWUgb3Igc3VtbWFyeSBjb250YWlucyAne30nLgorSWYgdGhlcmUgYXJlIGFueSwgZW50ZXIgYSBtb2R1bGUgbmFtZSB0byBnZXQgbW9yZSBoZWxwLgogCi0nJycpCisnJycuZm9ybWF0KGtleSkpCiAgICAgICAgICAgICBhcHJvcG9zKGtleSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwpAQCAtMTk3OSwzNSArMTk3OCwxMSBAQAogICAgICAgICAgICAgc2VsZi5saXN0KG1vZHVsZXMua2V5cygpKQogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCiBFbnRlciBhbnkgbW9kdWxlIG5hbWUgdG8gZ2V0IG1vcmUgaGVscC4gIE9yLCB0eXBlICJtb2R1bGVzIHNwYW0iIHRvIHNlYXJjaAotZm9yIG1vZHVsZXMgd2hvc2UgZGVzY3JpcHRpb25zIGNvbnRhaW4gdGhlIHdvcmQgInNwYW0iLgorZm9yIG1vZHVsZXMgd2hvc2UgbmFtZSBvciBzdW1tYXJ5IGNvbnRhaW4gdGhlIHN0cmluZyAic3BhbSIuCiAnJycpCiAKIGhlbHAgPSBIZWxwZXIoKQogCi1jbGFzcyBTY2FubmVyOgotICAgICIiIkEgZ2VuZXJpYyB0cmVlIGl0ZXJhdG9yLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290cywgY2hpbGRyZW4sIGRlc2NlbmRwKToKLSAgICAgICAgc2VsZi5yb290cyA9IHJvb3RzWzpdCi0gICAgICAgIHNlbGYuc3RhdGUgPSBbXQotICAgICAgICBzZWxmLmNoaWxkcmVuID0gY2hpbGRyZW4KLSAgICAgICAgc2VsZi5kZXNjZW5kcCA9IGRlc2NlbmRwCi0KLSAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuc3RhdGU6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5yb290czoKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgcm9vdCA9IHNlbGYucm9vdHMucG9wKDApCi0gICAgICAgICAgICBzZWxmLnN0YXRlID0gWyhyb290LCBzZWxmLmNoaWxkcmVuKHJvb3QpKV0KLSAgICAgICAgbm9kZSwgY2hpbGRyZW4gPSBzZWxmLnN0YXRlWy0xXQotICAgICAgICBpZiBub3QgY2hpbGRyZW46Ci0gICAgICAgICAgICBzZWxmLnN0YXRlLnBvcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KCkKLSAgICAgICAgY2hpbGQgPSBjaGlsZHJlbi5wb3AoMCkKLSAgICAgICAgaWYgc2VsZi5kZXNjZW5kcChjaGlsZCk6Ci0gICAgICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgoY2hpbGQsIHNlbGYuY2hpbGRyZW4oY2hpbGQpKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkCi0KLQogY2xhc3MgTW9kdWxlU2Nhbm5lcjoKICAgICAiIiJBbiBpbnRlcnJ1cHRpYmxlIHNjYW5uZXIgdGhhdCBzZWFyY2hlcyBtb2R1bGUgc3lub3BzZXMuIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi9weWRvY19kYXRhL3RvcGljcy5weSBiL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQppbmRleCBjY2ZjNGVjLi5lYmVmZDI3IDEwMDY0NAotLS0gYS9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKKysrIGIvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CkBAIC0xLDUgKzEsNSBAQAogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KLSMgQXV0b2dlbmVyYXRlZCBieSBTcGhpbnggb24gU3VuIE9jdCAyNyAwOTowNzo1NSAyMDEzCisjIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uIFN1biBPY3QgMjAgMDE6NTg6MzYgMjAxMwogdG9waWNzID0geydhc3NlcnQnOiAnXG5UaGUgYGBhc3NlcnRgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NlcnQgc3RhdGVtZW50cyBhcmUgYSBjb252ZW5pZW50IHdheSB0byBpbnNlcnQgZGVidWdnaW5nIGFzc2VydGlvbnNcbmludG8gYSBwcm9ncmFtOlxuXG4gICBhc3NlcnRfc3RtdCA6Oj0gImFzc2VydCIgZXhwcmVzc2lvbiBbIiwiIGV4cHJlc3Npb25dXG5cblRoZSBzaW1wbGUgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbmBgLCBpcyBlcXVpdmFsZW50IHRvXG5cbiAgIGlmIF9fZGVidWdfXzpcbiAgICAgIGlmIG5vdCBleHByZXNzaW9uOiByYWlzZSBBc3NlcnRpb25FcnJvclxuXG5UaGUgZXh0ZW5kZWQgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yYGAsIGlzIGVxdWl2YWxlbnRcbnRvXG5cbiAgIGlmIF9fZGVidWdfXzpcbiAgICAgIGlmIG5vdCBleHByZXNzaW9uMTogcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXhwcmVzc2lvbjIpXG5cblRoZXNlIGVxdWl2YWxlbmNlcyBhc3N1bWUgdGhhdCBgYF9fZGVidWdfX2BgIGFuZCBgYEFzc2VydGlvbkVycm9yYGBcbnJlZmVyIHRvIHRoZSBidWlsdC1pbiB2YXJpYWJsZXMgd2l0aCB0aG9zZSBuYW1lcy4gIEluIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIHZhcmlhYmxlIGBgX19kZWJ1Z19fYGAgaXMgYGBUcnVlYGAgdW5kZXJcbm5vcm1hbCBjaXJjdW1zdGFuY2VzLCBgYEZhbHNlYGAgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkXG4oY29tbWFuZCBsaW5lIG9wdGlvbiAtTykuICBUaGUgY3VycmVudCBjb2RlIGdlbmVyYXRvciBlbWl0cyBubyBjb2RlXG5mb3IgYW4gYXNzZXJ0IHN0YXRlbWVudCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgYXQgY29tcGlsZVxudGltZS4gIE5vdGUgdGhhdCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlXG5leHByZXNzaW9uIHRoYXQgZmFpbGVkIGluIHRoZSBlcnJvciBtZXNzYWdlOyBpdCB3aWxsIGJlIGRpc3BsYXllZCBhc1xucGFydCBvZiB0aGUgc3RhY2sgdHJhY2UuXG5cbkFzc2lnbm1lbnRzIHRvIGBgX19kZWJ1Z19fYGAgYXJlIGlsbGVnYWwuICBUaGUgdmFsdWUgZm9yIHRoZSBidWlsdC1pblxudmFyaWFibGUgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBpbnRlcnByZXRlciBzdGFydHMuXG4nLAogICdhc3NpZ25tZW50JzogJ1xuQXNzaWdubWVudCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqKipcblxuQXNzaWdubWVudCBzdGF0ZW1lbnRzIGFyZSB1c2VkIHRvIChyZSliaW5kIG5hbWVzIHRvIHZhbHVlcyBhbmQgdG9cbm1vZGlmeSBhdHRyaWJ1dGVzIG9yIGl0ZW1zIG9mIG11dGFibGUgb2JqZWN0czpcblxuICAgYXNzaWdubWVudF9zdG10IDo6PSAodGFyZ2V0X2xpc3QgIj0iKSsgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICB0YXJnZXRfbGlzdCAgICAgOjo9IHRhcmdldCAoIiwiIHRhcmdldCkqIFsiLCJdXG4gICB0YXJnZXQgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgfCAiKCIgdGFyZ2V0X2xpc3QgIikiXG4gICAgICAgICAgICAgIHwgIlsiIHRhcmdldF9saXN0ICJdIlxuICAgICAgICAgICAgICB8IGF0dHJpYnV0ZXJlZlxuICAgICAgICAgICAgICB8IHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICB8IHNsaWNpbmdcbiAgICAgICAgICAgICAgfCAiKiIgdGFyZ2V0XG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhc3NpZ25tZW50IHN0YXRlbWVudCBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gbGlzdCAocmVtZW1iZXIgdGhhdFxudGhpcyBjYW4gYmUgYSBzaW5nbGUgZXhwcmVzc2lvbiBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCB0aGUgbGF0dGVyXG55aWVsZGluZyBhIHR1cGxlKSBhbmQgYXNzaWducyB0aGUgc2luZ2xlIHJlc3VsdGluZyBvYmplY3QgdG8gZWFjaCBvZlxudGhlIHRhcmdldCBsaXN0cywgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuXG5Bc3NpZ25tZW50IGlzIGRlZmluZWQgcmVjdXJzaXZlbHkgZGVwZW5kaW5nIG9uIHRoZSBmb3JtIG9mIHRoZSB0YXJnZXRcbihsaXN0KS4gV2hlbiBhIHRhcmdldCBpcyBwYXJ0IG9mIGEgbXV0YWJsZSBvYmplY3QgKGFuIGF0dHJpYnV0ZVxucmVmZXJlbmNlLCBzdWJzY3JpcHRpb24gb3Igc2xpY2luZyksIHRoZSBtdXRhYmxlIG9iamVjdCBtdXN0XG51bHRpbWF0ZWx5IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQgYW5kIGRlY2lkZSBhYm91dCBpdHMgdmFsaWRpdHksIGFuZFxubWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgYXNzaWdubWVudCBpcyB1bmFjY2VwdGFibGUuICBUaGUgcnVsZXNcbm9ic2VydmVkIGJ5IHZhcmlvdXMgdHlwZXMgYW5kIHRoZSBleGNlcHRpb25zIHJhaXNlZCBhcmUgZ2l2ZW4gd2l0aCB0aGVcbmRlZmluaXRpb24gb2YgdGhlIG9iamVjdCB0eXBlcyAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlXG5oaWVyYXJjaHkqKS5cblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSB0YXJnZXQgbGlzdCwgb3B0aW9uYWxseSBlbmNsb3NlZCBpblxucGFyZW50aGVzZXMgb3Igc3F1YXJlIGJyYWNrZXRzLCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzIGZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgc2luZ2xlIHRhcmdldDogVGhlIG9iamVjdCBpcyBhc3NpZ25lZCB0b1xuICB0aGF0IHRhcmdldC5cblxuKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0YXJnZXRzOiBUaGUgb2JqZWN0XG4gIG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMgYXMgdGhlcmUgYXJlXG4gIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZSBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvXG4gIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4gICogSWYgdGhlIHRhcmdldCBsaXN0IGNvbnRhaW5zIG9uZSB0YXJnZXQgcHJlZml4ZWQgd2l0aCBhbiBhc3RlcmlzayxcbiAgICBjYWxsZWQgYSAic3RhcnJlZCIgdGFyZ2V0OiBUaGUgb2JqZWN0IG11c3QgYmUgYSBzZXF1ZW5jZSB3aXRoIGF0XG4gICAgbGVhc3QgYXMgbWFueSBpdGVtcyBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIG1pbnVzXG4gICAgb25lLiAgVGhlIGZpcnN0IGl0ZW1zIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQsIGZyb20gbGVmdCB0b1xuICAgIHJpZ2h0LCB0byB0aGUgdGFyZ2V0cyBiZWZvcmUgdGhlIHN0YXJyZWQgdGFyZ2V0LiAgVGhlIGZpbmFsIGl0ZW1zXG4gICAgb2YgdGhlIHNlcXVlbmNlIGFyZSBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0cyBhZnRlciB0aGUgc3RhcnJlZFxuICAgIHRhcmdldC4gIEEgbGlzdCBvZiB0aGUgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBpcyB0aGVuXG4gICAgYXNzaWduZWQgdG8gdGhlIHN0YXJyZWQgdGFyZ2V0ICh0aGUgbGlzdCBjYW4gYmUgZW1wdHkpLlxuXG4gICogRWxzZTogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2Ugd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlXG4gICAgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSBzaW5nbGUgdGFyZ2V0IGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXNcbmZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhbiBpZGVudGlmaWVyIChuYW1lKTpcblxuICAqIElmIHRoZSBuYW1lIGRvZXMgbm90IG9jY3VyIGluIGEgYGBnbG9iYWxgYCBvciBgYG5vbmxvY2FsYGBcbiAgICBzdGF0ZW1lbnQgaW4gdGhlIGN1cnJlbnQgY29kZSBibG9jazogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlXG4gICAgb2JqZWN0IGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZS5cblxuICAqIE90aGVyd2lzZTogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZVxuICAgIG9yIHRoZSBvdXRlciBuYW1lc3BhY2UgZGV0ZXJtaW5lZCBieSBgYG5vbmxvY2FsYGAsIHJlc3BlY3RpdmVseS5cblxuICBUaGUgbmFtZSBpcyByZWJvdW5kIGlmIGl0IHdhcyBhbHJlYWR5IGJvdW5kLiAgVGhpcyBtYXkgY2F1c2UgdGhlXG4gIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIG9iamVjdCBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSBuYW1lIHRvIHJlYWNoXG4gIHplcm8sIGNhdXNpbmcgdGhlIG9iamVjdCB0byBiZSBkZWFsbG9jYXRlZCBhbmQgaXRzIGRlc3RydWN0b3IgKGlmIGl0XG4gIGhhcyBvbmUpIHRvIGJlIGNhbGxlZC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgdGFyZ2V0IGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgb3IgaW4gc3F1YXJlXG4gIGJyYWNrZXRzOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2ZcbiAgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgaXRzIGl0ZW1zIGFyZVxuICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gYXR0cmlidXRlIHJlZmVyZW5jZTogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpblxuICB0aGUgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhbiBvYmplY3Qgd2l0aFxuICBhc3NpZ25hYmxlIGF0dHJpYnV0ZXM7IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBgYFR5cGVFcnJvcmBgIGlzXG4gIHJhaXNlZC4gIFRoYXQgb2JqZWN0IGlzIHRoZW4gYXNrZWQgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG9cbiAgdGhlIGdpdmVuIGF0dHJpYnV0ZTsgaWYgaXQgY2Fubm90IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQsIGl0IHJhaXNlc1xuICBhbiBleGNlcHRpb24gKHVzdWFsbHkgYnV0IG5vdCBuZWNlc3NhcmlseSBgYEF0dHJpYnV0ZUVycm9yYGApLlxuXG4gIE5vdGU6IElmIHRoZSBvYmplY3QgaXMgYSBjbGFzcyBpbnN0YW5jZSBhbmQgdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2VcbiAgb2NjdXJzIG9uIGJvdGggc2lkZXMgb2YgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIHRoZSBSSFMgZXhwcmVzc2lvbixcbiAgYGBhLnhgYCBjYW4gYWNjZXNzIGVpdGhlciBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb3IgKGlmIG5vIGluc3RhbmNlXG4gIGF0dHJpYnV0ZSBleGlzdHMpIGEgY2xhc3MgYXR0cmlidXRlLiAgVGhlIExIUyB0YXJnZXQgYGBhLnhgYCBpc1xuICBhbHdheXMgc2V0IGFzIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICBUaHVzLCB0aGUgdHdvIG9jY3VycmVuY2VzIG9mIGBgYS54YGAgZG8gbm90IG5lY2Vzc2FyaWx5IHJlZmVyIHRvIHRoZVxuICBzYW1lIGF0dHJpYnV0ZTogaWYgdGhlIFJIUyBleHByZXNzaW9uIHJlZmVycyB0byBhIGNsYXNzIGF0dHJpYnV0ZSxcbiAgdGhlIExIUyBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGF0dHJpYnV0ZSBhcyB0aGUgdGFyZ2V0IG9mIHRoZVxuICBhc3NpZ25tZW50OlxuXG4gICAgIGNsYXNzIENsczpcbiAgICAgICAgIHggPSAzICAgICAgICAgICAgICMgY2xhc3MgdmFyaWFibGVcbiAgICAgaW5zdCA9IENscygpXG4gICAgIGluc3QueCA9IGluc3QueCArIDEgICAjIHdyaXRlcyBpbnN0LnggYXMgNCBsZWF2aW5nIENscy54IGFzIDNcblxuICBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGRlc2NyaXB0b3JcbiAgYXR0cmlidXRlcywgc3VjaCBhcyBwcm9wZXJ0aWVzIGNyZWF0ZWQgd2l0aCBgYHByb3BlcnR5KClgYC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc3Vic2NyaXB0aW9uOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluIHRoZVxuICByZWZlcmVuY2UgaXMgZXZhbHVhdGVkLiAgSXQgc2hvdWxkIHlpZWxkIGVpdGhlciBhIG11dGFibGUgc2VxdWVuY2VcbiAgb2JqZWN0IChzdWNoIGFzIGEgbGlzdCkgb3IgYSBtYXBwaW5nIG9iamVjdCAoc3VjaCBhcyBhIGRpY3Rpb25hcnkpLlxuICBOZXh0LCB0aGUgc3Vic2NyaXB0IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbXV0YWJsZSBzZXF1ZW5jZSBvYmplY3QgKHN1Y2ggYXMgYSBsaXN0KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IHlpZWxkIGFuIGludGVnZXIuICBJZiBpdCBpcyBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzXG4gIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlXG4gIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGgsIGFuZCB0aGUgc2VxdWVuY2UgaXMgYXNrZWRcbiAgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG8gaXRzIGl0ZW0gd2l0aCB0aGF0IGluZGV4LiAgSWYgdGhlXG4gIGluZGV4IGlzIG91dCBvZiByYW5nZSwgYGBJbmRleEVycm9yYGAgaXMgcmFpc2VkIChhc3NpZ25tZW50IHRvIGFcbiAgc3Vic2NyaXB0ZWQgc2VxdWVuY2UgY2Fubm90IGFkZCBuZXcgaXRlbXMgdG8gYSBsaXN0KS5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCBoYXZlIGEgdHlwZSBjb21wYXRpYmxlIHdpdGggdGhlIG1hcHBpbmdcJ3Mga2V5IHR5cGUsXG4gIGFuZCB0aGUgbWFwcGluZyBpcyB0aGVuIGFza2VkIHRvIGNyZWF0ZSBhIGtleS9kYXR1bSBwYWlyIHdoaWNoIG1hcHNcbiAgdGhlIHN1YnNjcmlwdCB0byB0aGUgYXNzaWduZWQgb2JqZWN0LiAgVGhpcyBjYW4gZWl0aGVyIHJlcGxhY2UgYW5cbiAgZXhpc3Rpbmcga2V5L3ZhbHVlIHBhaXIgd2l0aCB0aGUgc2FtZSBrZXkgdmFsdWUsIG9yIGluc2VydCBhIG5ld1xuICBrZXkvdmFsdWUgcGFpciAoaWYgbm8ga2V5IHdpdGggdGhlIHNhbWUgdmFsdWUgZXhpc3RlZCkuXG5cbiAgRm9yIHVzZXItZGVmaW5lZCBvYmplY3RzLCB0aGUgYGBfX3NldGl0ZW1fXygpYGAgbWV0aG9kIGlzIGNhbGxlZFxuICB3aXRoIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2xpY2luZzogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGUgcmVmZXJlbmNlXG4gIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGFcbiAgbGlzdCkuICBUaGUgYXNzaWduZWQgb2JqZWN0IHNob3VsZCBiZSBhIHNlcXVlbmNlIG9iamVjdCBvZiB0aGUgc2FtZVxuICB0eXBlLiAgTmV4dCwgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZCBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkLFxuICBpbnNvZmFyIHRoZXkgYXJlIHByZXNlbnQ7IGRlZmF1bHRzIGFyZSB6ZXJvIGFuZCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoLiAgVGhlIGJvdW5kcyBzaG91bGQgZXZhbHVhdGUgdG8gaW50ZWdlcnMuIElmIGVpdGhlciBib3VuZCBpc1xuICBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZSByZXN1bHRpbmdcbiAgYm91bmRzIGFyZSBjbGlwcGVkIHRvIGxpZSBiZXR3ZWVuIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGgsXG4gIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZSB0aGVcbiAgc2xpY2Ugd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZiB0aGVcbiAgc2xpY2UgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLFxuICB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIG9iamVjdFxuICBhbGxvd3MgaXQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZVxuc3ludGF4IGZvciB0YXJnZXRzIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBleHByZXNzaW9ucywgYW5kXG5pbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSwgY2F1c2luZ1xubGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy5cblxuV0FSTklORzogQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHNcbmJldHdlZW4gdGhlIGxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSBcJ3NhZmVcJyAoZm9yXG5leGFtcGxlIGBgYSwgYiA9IGIsIGFgYCBzd2FwcyB0d28gdmFyaWFibGVzKSwgb3ZlcmxhcHMgKndpdGhpbiogdGhlXG5jb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvIHZhcmlhYmxlcyBhcmUgbm90IHNhZmUhICBGb3IgaW5zdGFuY2UsIHRoZVxuZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzIGBgWzAsIDJdYGA6XG5cbiAgIHggPSBbMCwgMV1cbiAgIGkgPSAwXG4gICBpLCB4W2ldID0gMSwgMlxuICAgcHJpbnQoeClcblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMzIqKiAtIEV4dGVuZGVkIEl0ZXJhYmxlIFVucGFja2luZ1xuICAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBgYCp0YXJnZXRgYCBmZWF0dXJlLlxuXG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IHN0YXRlbWVudHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIGNvbWJpbmF0aW9uLCBpbiBhIHNpbmdsZSBzdGF0ZW1lbnQsIG9mIGFcbmJpbmFyeSBvcGVyYXRpb24gYW5kIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50OlxuXG4gICBhdWdtZW50ZWRfYXNzaWdubWVudF9zdG10IDo6PSBhdWd0YXJnZXQgYXVnb3AgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICBhdWd0YXJnZXQgICAgICAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyIHwgYXR0cmlidXRlcmVmIHwgc3Vic2NyaXB0aW9uIHwgc2xpY2luZ1xuICAgYXVnb3AgICAgICAgICAgICAgICAgICAgICA6Oj0gIis9IiB8ICItPSIgfCAiKj0iIHwgIi89IiB8ICIvLz0iIHwgIiU9IiB8ICIqKj0iXG4gICAgICAgICAgICAgfCAiPj49IiB8ICI8PD0iIHwgIiY9IiB8ICJePSIgfCAifD0iXG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWxcbmFzc2lnbm1lbnQgc3RhdGVtZW50cywgY2Fubm90IGJlIGFuIHVucGFja2luZykgYW5kIHRoZSBleHByZXNzaW9uXG5saXN0LCBwZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiBhc3NpZ25tZW50XG5vbiB0aGUgdHdvIG9wZXJhbmRzLCBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5UaGUgdGFyZ2V0IGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV4cHJlc3Npb24gbGlrZSBgYHggKz0gMWBgIGNhbiBiZSByZXdyaXR0ZW4gYXNcbmBgeCA9IHggKyAxYGAgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluXG50aGUgYXVnbWVudGVkIHZlcnNpb24sIGBgeGBgIGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuIEFsc28sIHdoZW5cbnBvc3NpYmxlLCB0aGUgYWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0XG5yYXRoZXIgdGhhbiBjcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsXG50aGUgb2xkIG9iamVjdCBpcyBtb2RpZmllZCBpbnN0ZWFkLlxuXG5XaXRoIHRoZSBleGNlcHRpb24gb2YgYXNzaWduaW5nIHRvIHR1cGxlcyBhbmQgbXVsdGlwbGUgdGFyZ2V0cyBpbiBhXG5zaW5nbGUgc3RhdGVtZW50LCB0aGUgYXNzaWdubWVudCBkb25lIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50XG5zdGF0ZW1lbnRzIGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIG5vcm1hbCBhc3NpZ25tZW50cy4gU2ltaWxhcmx5LFxud2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBwb3NzaWJsZSAqaW4tcGxhY2UqIGJlaGF2aW9yLCB0aGUgYmluYXJ5XG5vcGVyYXRpb24gcGVyZm9ybWVkIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxcbmJpbmFyeSBvcGVyYXRpb25zLlxuXG5Gb3IgdGFyZ2V0cyB3aGljaCBhcmUgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHRoZSBzYW1lICpjYXZlYXQgYWJvdXRcbmNsYXNzIGFuZCBpbnN0YW5jZSBhdHRyaWJ1dGVzKiBhcHBsaWVzIGFzIGZvciByZWd1bGFyIGFzc2lnbm1lbnRzLlxuJywKICAnYXRvbS1pZGVudGlmaWVycyc6ICdcbklkZW50aWZpZXJzIChOYW1lcylcbioqKioqKioqKioqKioqKioqKipcblxuQW4gaWRlbnRpZmllciBvY2N1cnJpbmcgYXMgYW4gYXRvbSBpcyBhIG5hbWUuICBTZWUgc2VjdGlvblxuKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyogZm9yIGxleGljYWwgZGVmaW5pdGlvbiBhbmQgc2VjdGlvbiAqTmFtaW5nXG5hbmQgYmluZGluZyogZm9yIGRvY3VtZW50YXRpb24gb2YgbmFtaW5nIGFuZCBiaW5kaW5nLlxuXG5XaGVuIHRoZSBuYW1lIGlzIGJvdW5kIHRvIGFuIG9iamVjdCwgZXZhbHVhdGlvbiBvZiB0aGUgYXRvbSB5aWVsZHNcbnRoYXQgb2JqZWN0LiBXaGVuIGEgbmFtZSBpcyBub3QgYm91bmQsIGFuIGF0dGVtcHQgdG8gZXZhbHVhdGUgaXRcbnJhaXNlcyBhIGBgTmFtZUVycm9yYGAgZXhjZXB0aW9uLlxuXG4qKlByaXZhdGUgbmFtZSBtYW5nbGluZzoqKiBXaGVuIGFuIGlkZW50aWZpZXIgdGhhdCB0ZXh0dWFsbHkgb2NjdXJzIGluXG5hIGNsYXNzIGRlZmluaXRpb24gYmVnaW5zIHdpdGggdHdvIG9yIG1vcmUgdW5kZXJzY29yZSBjaGFyYWN0ZXJzIGFuZFxuZG9lcyBub3QgZW5kIGluIHR3byBvciBtb3JlIHVuZGVyc2NvcmVzLCBpdCBpcyBjb25zaWRlcmVkIGEgKnByaXZhdGVcbm5hbWUqIG9mIHRoYXQgY2xhc3MuIFByaXZhdGUgbmFtZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgbG9uZ2VyIGZvcm1cbmJlZm9yZSBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgdGhlbS4gIFRoZSB0cmFuc2Zvcm1hdGlvbiBpbnNlcnRzIHRoZVxuY2xhc3MgbmFtZSwgd2l0aCBsZWFkaW5nIHVuZGVyc2NvcmVzIHJlbW92ZWQgYW5kIGEgc2luZ2xlIHVuZGVyc2NvcmVcbmluc2VydGVkLCBpbiBmcm9udCBvZiB0aGUgbmFtZS4gIEZvciBleGFtcGxlLCB0aGUgaWRlbnRpZmllclxuYGBfX3NwYW1gYCBvY2N1cnJpbmcgaW4gYSBjbGFzcyBuYW1lZCBgYEhhbWBgIHdpbGwgYmUgdHJhbnNmb3JtZWQgdG9cbmBgX0hhbV9fc3BhbWBgLiAgVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3ludGFjdGljYWxcbmNvbnRleHQgaW4gd2hpY2ggdGhlIGlkZW50aWZpZXIgaXMgdXNlZC4gIElmIHRoZSB0cmFuc2Zvcm1lZCBuYW1lIGlzXG5leHRyZW1lbHkgbG9uZyAobG9uZ2VyIHRoYW4gMjU1IGNoYXJhY3RlcnMpLCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkXG50cnVuY2F0aW9uIG1heSBoYXBwZW4uIElmIHRoZSBjbGFzcyBuYW1lIGNvbnNpc3RzIG9ubHkgb2YgdW5kZXJzY29yZXMsXG5ubyB0cmFuc2Zvcm1hdGlvbiBpcyBkb25lLlxuJywKQEAgLTE5LDEyICsxOSwxMiBAQAogICdjYWxscyc6ICdcbkNhbGxzXG4qKioqKlxuXG5BIGNhbGwgY2FsbHMgYSBjYWxsYWJsZSBvYmplY3QgKGUuZy4sIGEgKmZ1bmN0aW9uKikgd2l0aCBhIHBvc3NpYmx5XG5lbXB0eSBzZXJpZXMgb2YgKmFyZ3VtZW50cyo6XG5cbiAgIGNhbGwgICAgICAgICAgICAgICAgIDo6PSBwcmltYXJ5ICIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXSB8IGNvbXByZWhlbnNpb25dICIpIlxuICAgYXJndW1lbnRfbGlzdCAgICAgICAgOjo9IHBvc2l0aW9uYWxfYXJndW1lbnRzIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioiIGV4cHJlc3Npb25dIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkX2FyZ3VtZW50cyBbIiwiICIqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiIGtleXdvcmRfYXJndW1lbnRzXSBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioiIGV4cHJlc3Npb24gWyIsIiBrZXl3b3JkX2FyZ3VtZW50c10gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqKiIgZXhwcmVzc2lvblxuICAgcG9zaXRpb25hbF9hcmd1bWVudHMgOjo9IGV4cHJlc3Npb24gKCIsIiBleHByZXNzaW9uKSpcbiAgIGtleXdvcmRfYXJndW1lbnRzICAgIDo6PSBrZXl3b3JkX2l0ZW0gKCIsIiBrZXl3b3JkX2l0ZW0pKlxuICAga2V5d29yZF9pdGVtICAgICAgICAgOjo9IGlkZW50aWZpZXIgIj0iIGV4cHJlc3Npb25cblxuQSB0cmFpbGluZyBjb21tYSBtYXkgYmUgcHJlc2VudCBhZnRlciB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZFxuYXJndW1lbnRzIGJ1dCBkb2VzIG5vdCBhZmZlY3QgdGhlIHNlbWFudGljcy5cblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhIGNhbGxhYmxlIG9iamVjdCAodXNlci1kZWZpbmVkXG5mdW5jdGlvbnMsIGJ1aWx0LWluIGZ1bmN0aW9ucywgbWV0aG9kcyBvZiBidWlsdC1pbiBvYmplY3RzLCBjbGFzc1xub2JqZWN0cywgbWV0aG9kcyBvZiBjbGFzcyBpbnN0YW5jZXMsIGFuZCBhbGwgb2JqZWN0cyBoYXZpbmcgYVxuYGBfX2NhbGxfXygpYGAgbWV0aG9kIGFyZSBjYWxsYWJsZSkuICBBbGwgYXJndW1lbnQgZXhwcmVzc2lvbnMgYXJlXG5ldmFsdWF0ZWQgYmVmb3JlIHRoZSBjYWxsIGlzIGF0dGVtcHRlZC4gIFBsZWFzZSByZWZlciB0byBzZWN0aW9uXG4qRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIGZvcm1hbCAqcGFyYW1ldGVyKiBsaXN0cy5cblxuSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHByZXNlbnQsIHRoZXkgYXJlIGZpcnN0IGNvbnZlcnRlZCB0b1xucG9zaXRpb25hbCBhcmd1bWVudHMsIGFzIGZvbGxvd3MuICBGaXJzdCwgYSBsaXN0IG9mIHVuZmlsbGVkIHNsb3RzIGlzXG5jcmVhdGVkIGZvciB0aGUgZm9ybWFsIHBhcmFtZXRlcnMuICBJZiB0aGVyZSBhcmUgTiBwb3NpdGlvbmFsXG5hcmd1bWVudHMsIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgZmlyc3QgTiBzbG90cy4gIE5leHQsIGZvciBlYWNoXG5rZXl3b3JkIGFyZ3VtZW50LCB0aGUgaWRlbnRpZmllciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdCAoaWYgdGhlIGlkZW50aWZpZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IGZvcm1hbFxucGFyYW1ldGVyIG5hbWUsIHRoZSBmaXJzdCBzbG90IGlzIHVzZWQsIGFuZCBzbyBvbikuICBJZiB0aGUgc2xvdCBpc1xuYWxyZWFkeSBmaWxsZWQsIGEgYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLiBPdGhlcndpc2UsIHRoZVxudmFsdWUgb2YgdGhlIGFyZ3VtZW50IGlzIHBsYWNlZCBpbiB0aGUgc2xvdCwgZmlsbGluZyBpdCAoZXZlbiBpZiB0aGVcbmV4cHJlc3Npb24gaXMgYGBOb25lYGAsIGl0IGZpbGxzIHRoZSBzbG90KS4gIFdoZW4gYWxsIGFyZ3VtZW50cyBoYXZlXG5iZWVuIHByb2Nlc3NlZCwgdGhlIHNsb3RzIHRoYXQgYXJlIHN0aWxsIHVuZmlsbGVkIGFyZSBmaWxsZWQgd2l0aCB0aGVcbmNvcnJlc3BvbmRpbmcgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgKERlZmF1bHRcbnZhbHVlcyBhcmUgY2FsY3VsYXRlZCwgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZDsgdGh1cywgYVxubXV0YWJsZSBvYmplY3Qgc3VjaCBhcyBhIGxpc3Qgb3IgZGljdGlvbmFyeSB1c2VkIGFzIGRlZmF1bHQgdmFsdWUgd2lsbFxuYmUgc2hhcmVkIGJ5IGFsbCBjYWxscyB0aGF0IGRvblwndCBzcGVjaWZ5IGFuIGFyZ3VtZW50IHZhbHVlIGZvciB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdDsgdGhpcyBzaG91bGQgdXN1YWxseSBiZSBhdm9pZGVkLikgIElmIHRoZXJlIGFyZSBhbnlcbnVuZmlsbGVkIHNsb3RzIGZvciB3aGljaCBubyBkZWZhdWx0IHZhbHVlIGlzIHNwZWNpZmllZCwgYVxuYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBvZiBmaWxsZWRcbnNsb3RzIGlzIHVzZWQgYXMgdGhlIGFyZ3VtZW50IGxpc3QgZm9yIHRoZSBjYWxsLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEFuIGltcGxlbWVudGF0aW9uIG1heSBwcm92aWRlXG5idWlsdC1pbiBmdW5jdGlvbnMgd2hvc2UgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGRvIG5vdCBoYXZlIG5hbWVzLCBldmVuXG5pZiB0aGV5IGFyZSBcJ25hbWVkXCcgZm9yIHRoZSBwdXJwb3NlIG9mIGRvY3VtZW50YXRpb24sIGFuZCB3aGljaFxudGhlcmVmb3JlIGNhbm5vdCBiZSBzdXBwbGllZCBieSBrZXl3b3JkLiAgSW4gQ1B5dGhvbiwgdGhpcyBpcyB0aGUgY2FzZVxuZm9yIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBDIHRoYXQgdXNlIGBgUHlBcmdfUGFyc2VUdXBsZSgpYGAgdG9cbnBhcnNlIHRoZWlyIGFyZ3VtZW50cy5cblxuSWYgdGhlcmUgYXJlIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhbiB0aGVyZSBhcmUgZm9ybWFsIHBhcmFtZXRlclxuc2xvdHMsIGEgYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLCB1bmxlc3MgYSBmb3JtYWwgcGFyYW1ldGVyXG51c2luZyB0aGUgc3ludGF4IGBgKmlkZW50aWZpZXJgYCBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXQgZm9ybWFsXG5wYXJhbWV0ZXIgcmVjZWl2ZXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHNcbihvciBhbiBlbXB0eSB0dXBsZSBpZiB0aGVyZSB3ZXJlIG5vIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50cykuXG5cbklmIGFueSBrZXl3b3JkIGFyZ3VtZW50IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBmb3JtYWwgcGFyYW1ldGVyXG5uYW1lLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCBgYCoqaWRlbnRpZmllcmBgIGlzIHByZXNlbnQ7IGluIHRoaXMgY2FzZSwgdGhhdFxuZm9ybWFsIHBhcmFtZXRlciByZWNlaXZlcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgZXhjZXNzIGtleXdvcmRcbmFyZ3VtZW50cyAodXNpbmcgdGhlIGtleXdvcmRzIGFzIGtleXMgYW5kIHRoZSBhcmd1bWVudCB2YWx1ZXMgYXNcbmNvcnJlc3BvbmRpbmcgdmFsdWVzKSwgb3IgYSAobmV3KSBlbXB0eSBkaWN0aW9uYXJ5IGlmIHRoZXJlIHdlcmUgbm9cbmV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cy5cblxuSWYgdGhlIHN5bnRheCBgYCpleHByZXNzaW9uYGAgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCxcbmBgZXhwcmVzc2lvbmBgIG11c3QgZXZhbHVhdGUgdG8gYW4gaXRlcmFibGUuICBFbGVtZW50cyBmcm9tIHRoaXNcbml0ZXJhYmxlIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZSBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnRzO1xuaWYgdGhlcmUgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosIC4uLiwgKnhOKiwgYW5kIGBgZXhwcmVzc2lvbmBgXG5ldmFsdWF0ZXMgdG8gYSBzZXF1ZW5jZSAqeTEqLCAuLi4sICp5TSosIHRoaXMgaXMgZXF1aXZhbGVudCB0byBhIGNhbGxcbndpdGggTStOIHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosIC4uLiwgKnhOKiwgKnkxKiwgLi4uLCAqeU0qLlxuXG5BIGNvbnNlcXVlbmNlIG9mIHRoaXMgaXMgdGhhdCBhbHRob3VnaCB0aGUgYGAqZXhwcmVzc2lvbmBgIHN5bnRheCBtYXlcbmFwcGVhciAqYWZ0ZXIqIHNvbWUga2V5d29yZCBhcmd1bWVudHMsIGl0IGlzIHByb2Nlc3NlZCAqYmVmb3JlKiB0aGVcbmtleXdvcmQgYXJndW1lbnRzIChhbmQgdGhlIGBgKipleHByZXNzaW9uYGAgYXJndW1lbnQsIGlmIGFueSAtLSBzZWVcbmJlbG93KS4gIFNvOlxuXG4gICA+Pj4gZGVmIGYoYSwgYik6XG4gICAuLi4gIHByaW50KGEsIGIpXG4gICAuLi5cbiAgID4+PiBmKGI9MSwgKigyLCkpXG4gICAyIDFcbiAgID4+PiBmKGE9MSwgKigyLCkpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgIFR5cGVFcnJvcjogZigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgXCdhXCdcbiAgID4+PiBmKDEsICooMiwpKVxuICAgMSAyXG5cbkl0IGlzIHVudXN1YWwgZm9yIGJvdGgga2V5d29yZCBhcmd1bWVudHMgYW5kIHRoZSBgYCpleHByZXNzaW9uYGBcbnN5bnRheCB0byBiZSB1c2VkIGluIHRoZSBzYW1lIGNhbGwsIHNvIGluIHByYWN0aWNlIHRoaXMgY29uZnVzaW9uIGRvZXNcbm5vdCBhcmlzZS5cblxuSWYgdGhlIHN5bnRheCBgYCoqZXhwcmVzc2lvbmBgIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG5gYGV4cHJlc3Npb25gYCBtdXN0IGV2YWx1YXRlIHRvIGEgbWFwcGluZywgdGhlIGNvbnRlbnRzIG9mIHdoaWNoIGFyZVxudHJlYXRlZCBhcyBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLiAgSW4gdGhlIGNhc2Ugb2YgYSBrZXl3b3JkXG5hcHBlYXJpbmcgaW4gYm90aCBgYGV4cHJlc3Npb25gYCBhbmQgYXMgYW4gZXhwbGljaXQga2V5d29yZCBhcmd1bWVudCxcbmEgYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLlxuXG5Gb3JtYWwgcGFyYW1ldGVycyB1c2luZyB0aGUgc3ludGF4IGBgKmlkZW50aWZpZXJgYCBvciBgYCoqaWRlbnRpZmllcmBgXG5jYW5ub3QgYmUgdXNlZCBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50IHNsb3RzIG9yIGFzIGtleXdvcmQgYXJndW1lbnRcbm5hbWVzLlxuXG5BIGNhbGwgYWx3YXlzIHJldHVybnMgc29tZSB2YWx1ZSwgcG9zc2libHkgYGBOb25lYGAsIHVubGVzcyBpdCByYWlzZXNcbmFuIGV4Y2VwdGlvbi4gIEhvdyB0aGlzIHZhbHVlIGlzIGNvbXB1dGVkIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGhlXG5jYWxsYWJsZSBvYmplY3QuXG5cbklmIGl0IGlzLS0tXG5cbmEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uOlxuICAgVGhlIGNvZGUgYmxvY2sgZm9yIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCwgcGFzc2luZyBpdCB0aGVcbiAgIGFyZ3VtZW50IGxpc3QuICBUaGUgZmlyc3QgdGhpbmcgdGhlIGNvZGUgYmxvY2sgd2lsbCBkbyBpcyBiaW5kIHRoZVxuICAgZm9ybWFsIHBhcmFtZXRlcnMgdG8gdGhlIGFyZ3VtZW50czsgdGhpcyBpcyBkZXNjcmliZWQgaW4gc2VjdGlvblxuICAgKkZ1bmN0aW9uIGRlZmluaXRpb25zKi4gIFdoZW4gdGhlIGNvZGUgYmxvY2sgZXhlY3V0ZXMgYSBgYHJldHVybmBgXG4gICBzdGF0ZW1lbnQsIHRoaXMgc3BlY2lmaWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuXG5cbmEgYnVpbHQtaW4gZnVuY3Rpb24gb3IgbWV0aG9kOlxuICAgVGhlIHJlc3VsdCBpcyB1cCB0byB0aGUgaW50ZXJwcmV0ZXI7IHNlZSAqQnVpbHQtaW4gRnVuY3Rpb25zKiBmb3JcbiAgIHRoZSBkZXNjcmlwdGlvbnMgb2YgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBtZXRob2RzLlxuXG5hIGNsYXNzIG9iamVjdDpcbiAgIEEgbmV3IGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgaXMgcmV0dXJuZWQuXG5cbmEgY2xhc3MgaW5zdGFuY2UgbWV0aG9kOlxuICAgVGhlIGNvcnJlc3BvbmRpbmcgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2l0aCBhbiBhcmd1bWVudFxuICAgbGlzdCB0aGF0IGlzIG9uZSBsb25nZXIgdGhhbiB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY2FsbDogdGhlXG4gICBpbnN0YW5jZSBiZWNvbWVzIHRoZSBmaXJzdCBhcmd1bWVudC5cblxuYSBjbGFzcyBpbnN0YW5jZTpcbiAgIFRoZSBjbGFzcyBtdXN0IGRlZmluZSBhIGBgX19jYWxsX18oKWBgIG1ldGhvZDsgdGhlIGVmZmVjdCBpcyB0aGVuXG4gICB0aGUgc2FtZSBhcyBpZiB0aGF0IG1ldGhvZCB3YXMgY2FsbGVkLlxuJywKICAnY2xhc3MnOiAnXG5DbGFzcyBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgYGBvYmplY3RgYDsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoIGBgc2VsZi5uYW1lID0gdmFsdWVgYC4gIEJvdGggY2xhc3MgYW5kXG5pbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uXG4iYGBzZWxmLm5hbWVgYCIsIGFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGVcbndpdGggdGhlIHNhbWUgbmFtZSB3aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmVcbnVzZWQgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlc1xudGhlcmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0b1xuY3JlYXRlIGluc3RhbmNlIHZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC0gQ2xhc3NcbiAgIERlY29yYXRvcnNcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGUgZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGludm9jYXRpb24gc3RhY2sgdW5sZXNzIHRoZXJlXG4gICAgaXMgYSBgYGZpbmFsbHlgYCBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyIGV4Y2VwdGlvbi5cbiAgICBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhIGBgcmV0dXJuYGAsIGBgY29udGludWVgYCwgb3JcbiAgICBgYGJyZWFrYGAgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb25cbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzIGBgX19kb2NfX2BgIGF0dHJpYnV0ZSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyBgYF9fZG9jX19gYCBpdGVtIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgY2xhc3NcJ3MgKmRvY3N0cmluZyouXG4nLAogICdjb21wYXJpc29ucyc6ICdcbkNvbXBhcmlzb25zXG4qKioqKioqKioqKlxuXG5Vbmxpa2UgQywgYWxsIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpbiBQeXRob24gaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSxcbndoaWNoIGlzIGxvd2VyIHRoYW4gdGhhdCBvZiBhbnkgYXJpdGhtZXRpYywgc2hpZnRpbmcgb3IgYml0d2lzZVxub3BlcmF0aW9uLiAgQWxzbyB1bmxpa2UgQywgZXhwcmVzc2lvbnMgbGlrZSBgYGEgPCBiIDwgY2BgIGhhdmUgdGhlXG5pbnRlcnByZXRhdGlvbiB0aGF0IGlzIGNvbnZlbnRpb25hbCBpbiBtYXRoZW1hdGljczpcblxuICAgY29tcGFyaXNvbiAgICA6Oj0gb3JfZXhwciAoIGNvbXBfb3BlcmF0b3Igb3JfZXhwciApKlxuICAgY29tcF9vcGVyYXRvciA6Oj0gIjwiIHwgIj4iIHwgIj09IiB8ICI+PSIgfCAiPD0iIHwgIiE9IlxuICAgICAgICAgICAgICAgICAgICAgfCAiaXMiIFsibm90Il0gfCBbIm5vdCJdICJpbiJcblxuQ29tcGFyaXNvbnMgeWllbGQgYm9vbGVhbiB2YWx1ZXM6IGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYC5cblxuQ29tcGFyaXNvbnMgY2FuIGJlIGNoYWluZWQgYXJiaXRyYXJpbHksIGUuZy4sIGBgeCA8IHkgPD0gemBgIGlzXG5lcXVpdmFsZW50IHRvIGBgeCA8IHkgYW5kIHkgPD0gemBgLCBleGNlcHQgdGhhdCBgYHlgYCBpcyBldmFsdWF0ZWRcbm9ubHkgb25jZSAoYnV0IGluIGJvdGggY2FzZXMgYGB6YGAgaXMgbm90IGV2YWx1YXRlZCBhdCBhbGwgd2hlbiBgYHggPFxueWBgIGlzIGZvdW5kIHRvIGJlIGZhbHNlKS5cblxuRm9ybWFsbHksIGlmICphKiwgKmIqLCAqYyosIC4uLiwgKnkqLCAqeiogYXJlIGV4cHJlc3Npb25zIGFuZCAqb3AxKixcbipvcDIqLCAuLi4sICpvcE4qIGFyZSBjb21wYXJpc29uIG9wZXJhdG9ycywgdGhlbiBgYGEgb3AxIGIgb3AyIGMgLi4uIHlcbm9wTiB6YGAgaXMgZXF1aXZhbGVudCB0byBgYGEgb3AxIGIgYW5kIGIgb3AyIGMgYW5kIC4uLiB5IG9wTiB6YGAsXG5leGNlcHQgdGhhdCBlYWNoIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGF0IG1vc3Qgb25jZS5cblxuTm90ZSB0aGF0IGBgYSBvcDEgYiBvcDIgY2BgIGRvZXNuXCd0IGltcGx5IGFueSBraW5kIG9mIGNvbXBhcmlzb25cbmJldHdlZW4gKmEqIGFuZCAqYyosIHNvIHRoYXQsIGUuZy4sIGBgeCA8IHkgPiB6YGAgaXMgcGVyZmVjdGx5IGxlZ2FsXG4odGhvdWdoIHBlcmhhcHMgbm90IHByZXR0eSkuXG5cblRoZSBvcGVyYXRvcnMgYGA8YGAsIGBgPmBgLCBgYD09YGAsIGBgPj1gYCwgYGA8PWBgLCBhbmQgYGAhPWBgIGNvbXBhcmVcbnRoZSB2YWx1ZXMgb2YgdHdvIG9iamVjdHMuICBUaGUgb2JqZWN0cyBuZWVkIG5vdCBoYXZlIHRoZSBzYW1lIHR5cGUuXG5JZiBib3RoIGFyZSBudW1iZXJzLCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gIE90aGVyd2lzZSxcbnRoZSBgYD09YGAgYW5kIGBgIT1gYCBvcGVyYXRvcnMgKmFsd2F5cyogY29uc2lkZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnRcbnR5cGVzIHRvIGJlIHVuZXF1YWwsIHdoaWxlIHRoZSBgYDxgYCwgYGA+YGAsIGBgPj1gYCBhbmQgYGA8PWBgXG5vcGVyYXRvcnMgcmFpc2UgYSBgYFR5cGVFcnJvcmBgIHdoZW4gY29tcGFyaW5nIG9iamVjdHMgb2YgZGlmZmVyZW50XG50eXBlcyB0aGF0IGRvIG5vdCBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0b3JzIGZvciB0aGUgZ2l2ZW4gcGFpciBvZlxudHlwZXMuICBZb3UgY2FuIGNvbnRyb2wgY29tcGFyaXNvbiBiZWhhdmlvciBvZiBvYmplY3RzIG9mIG5vbi1idWlsdC1pblxudHlwZXMgYnkgZGVmaW5pbmcgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbGlrZSBgYF9fZ3RfXygpYGAsIGRlc2NyaWJlZFxuaW4gc2VjdGlvbiAqQmFzaWMgY3VzdG9taXphdGlvbiouXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6XG5cbiogTnVtYmVycyBhcmUgY29tcGFyZWQgYXJpdGhtZXRpY2FsbHkuXG5cbiogVGhlIHZhbHVlcyBgYGZsb2F0KFwnTmFOXCcpYGAgYW5kIGBgRGVjaW1hbChcJ05hTlwnKWBgIGFyZSBzcGVjaWFsLiBUaGVcbiAgYXJlIGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLCBgYHggaXMgeGBgIGJ1dCBhcmUgbm90IGVxdWFsIHRvXG4gIHRoZW1zZWx2ZXMsIGBgeCAhPSB4YGAuICBBZGRpdGlvbmFsbHksIGNvbXBhcmluZyBhbnkgdmFsdWUgdG8gYVxuICBub3QtYS1udW1iZXIgdmFsdWUgd2lsbCByZXR1cm4gYGBGYWxzZWBgLiAgRm9yIGV4YW1wbGUsIGJvdGggYGAzIDxcbiAgZmxvYXQoXCdOYU5cJylgYCBhbmQgYGBmbG9hdChcJ05hTlwnKSA8IDNgYCB3aWxsIHJldHVybiBgYEZhbHNlYGAuXG5cbiogQnl0ZXMgb2JqZWN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgdmFsdWVzIG9mIHRoZWlyIGVsZW1lbnRzLlxuXG4qIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljIGVxdWl2YWxlbnRzXG4gICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYG9yZCgpYGApIG9mIHRoZWlyIGNoYXJhY3RlcnMuXG4gIFszXSBTdHJpbmcgYW5kIGJ5dGVzIG9iamVjdCBjYW5cJ3QgYmUgY29tcGFyZWQhXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvbiBvZlxuICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCBgYFsxLDIseF0gPD0gWzEsMix5XWBgIGhhcyB0aGVcbiAgc2FtZSB2YWx1ZSBhcyBgYHggPD0geWBgLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBkb2VzIG5vdFxuICBleGlzdCwgdGhlIHNob3J0ZXIgc2VxdWVuY2UgaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsIGBgWzEsMl0gPFxuICBbMSwyLDNdYGApLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZVxuICBzYW1lIGBgKGtleSwgdmFsdWUpYGAgcGFpcnMuIE9yZGVyIGNvbXBhcmlzb25zIGBgKFwnPFwnLCBcJzw9XCcsIFwnPj1cJyxcbiAgXCc+XCcpYGAgcmFpc2UgYGBUeXBlRXJyb3JgYC5cblxuKiBTZXRzIGFuZCBmcm96ZW5zZXRzIGRlZmluZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmRcbiAgc3VwZXJzZXQgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKHRoZVxuICB0d28gc2V0cyBgYHsxLDJ9YGAgYW5kIHsyLDN9IGFyZSBub3QgZXF1YWwsIG5vciBzdWJzZXRzIG9mIG9uZVxuICBhbm90aGVyLCBub3Igc3VwZXJzZXRzIG9mIG9uZSBhbm90aGVyKS4gIEFjY29yZGluZ2x5LCBzZXRzIGFyZSBub3RcbiAgYXBwcm9wcmlhdGUgYXJndW1lbnRzIGZvciBmdW5jdGlvbnMgd2hpY2ggZGVwZW5kIG9uIHRvdGFsIG9yZGVyaW5nLlxuICBGb3IgZXhhbXBsZSwgYGBtaW4oKWBgLCBgYG1heCgpYGAsIGFuZCBgYHNvcnRlZCgpYGAgcHJvZHVjZVxuICB1bmRlZmluZWQgcmVzdWx0cyBnaXZlbiBhIGxpc3Qgb2Ygc2V0cyBhcyBpbnB1dHMuXG5cbiogTW9zdCBvdGhlciBvYmplY3RzIG9mIGJ1aWx0LWluIHR5cGVzIGNvbXBhcmUgdW5lcXVhbCB1bmxlc3MgdGhleSBhcmVcbiAgdGhlIHNhbWUgb2JqZWN0OyB0aGUgY2hvaWNlIHdoZXRoZXIgb25lIG9iamVjdCBpcyBjb25zaWRlcmVkIHNtYWxsZXJcbiAgb3IgbGFyZ2VyIHRoYW4gYW5vdGhlciBvbmUgaXMgbWFkZSBhcmJpdHJhcmlseSBidXQgY29uc2lzdGVudGx5XG4gIHdpdGhpbiBvbmUgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS5cblxuQ29tcGFyaXNvbiBvZiBvYmplY3RzIG9mIHRoZSBkaWZmZXJpbmcgdHlwZXMgZGVwZW5kcyBvbiB3aGV0aGVyIGVpdGhlclxub2YgdGhlIHR5cGVzIHByb3ZpZGUgZXhwbGljaXQgc3VwcG9ydCBmb3IgdGhlIGNvbXBhcmlzb24uICBNb3N0XG5udW1lcmljIHR5cGVzIGNhbiBiZSBjb21wYXJlZCB3aXRoIG9uZSBhbm90aGVyLiAgV2hlbiBjcm9zcy10eXBlXG5jb21wYXJpc29uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBjb21wYXJpc29uIG1ldGhvZCByZXR1cm5zXG5gYE5vdEltcGxlbWVudGVkYGAuXG5cblRoZSBvcGVyYXRvcnMgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIHRlc3QgZm9yIG1lbWJlcnNoaXAuICBgYHggaW4gc2BgXG5ldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgYGB4XG5ub3QgaW4gc2BgIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIGBgeCBpbiBzYGAuICBBbGwgYnVpbHQtaW4gc2VxdWVuY2VzXG5hbmQgc2V0IHR5cGVzIHN1cHBvcnQgdGhpcyBhcyB3ZWxsIGFzIGRpY3Rpb25hcnksIGZvciB3aGljaCBgYGluYGBcbnRlc3RzIHdoZXRoZXIgYSB0aGUgZGljdGlvbmFyeSBoYXMgYSBnaXZlbiBrZXkuIEZvciBjb250YWluZXIgdHlwZXNcbnN1Y2ggYXMgbGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0LCBkaWN0LCBvciBjb2xsZWN0aW9ucy5kZXF1ZSwgdGhlXG5leHByZXNzaW9uIGBgeCBpbiB5YGAgaXMgZXF1aXZhbGVudCB0byBgYGFueSh4IGlzIGUgb3IgeCA9PSBlIGZvciBlIGluXG55KWBgLlxuXG5Gb3IgdGhlIHN0cmluZyBhbmQgYnl0ZXMgdHlwZXMsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCpcbmlzIGEgc3Vic3RyaW5nIG9mICp5Ki4gIEFuIGVxdWl2YWxlbnQgdGVzdCBpcyBgYHkuZmluZCh4KSAhPSAtMWBgLlxuRW1wdHkgc3RyaW5ncyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzdWJzdHJpbmcgb2YgYW55IG90aGVyXG5zdHJpbmcsIHNvIGBgIiIgaW4gImFiYyJgYCB3aWxsIHJldHVybiBgYFRydWVgYC5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCxcbmBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiBgYHkuX19jb250YWluc19fKHgpYGAgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgIGJ1dCBkb1xuZGVmaW5lIGBgX19pdGVyX18oKWBgLCBgYHggaW4geWBgIGlzIHRydWUgaWYgc29tZSB2YWx1ZSBgYHpgYCB3aXRoIGBgeFxuPT0gemBgIGlzIHByb2R1Y2VkIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGBgeWBgLiAgSWYgYW4gZXhjZXB0aW9uIGlzXG5yYWlzZWQgZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmIGBgaW5gYCByYWlzZWQgdGhhdCBleGNlcHRpb24uXG5cbkxhc3RseSwgdGhlIG9sZC1zdHlsZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgdHJpZWQ6IGlmIGEgY2xhc3MgZGVmaW5lc1xuYGBfX2dldGl0ZW1fXygpYGAsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCBgYHggPT0geVtpXWBgLCBhbmQgYWxsIGxvd2VyXG5pbnRlZ2VyIGluZGljZXMgZG8gbm90IHJhaXNlIGBgSW5kZXhFcnJvcmBgIGV4Y2VwdGlvbi4gIChJZiBhbnkgb3RoZXJcbmV4Y2VwdGlvbiBpcyByYWlzZWQsIGl0IGlzIGFzIGlmIGBgaW5gYCByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgYGBub3QgaW5gYCBpcyBkZWZpbmVkIHRvIGhhdmUgdGhlIGludmVyc2UgdHJ1ZSB2YWx1ZSBvZlxuYGBpbmBgLlxuXG5UaGUgb3BlcmF0b3JzIGBgaXNgYCBhbmQgYGBpcyBub3RgYCB0ZXN0IGZvciBvYmplY3QgaWRlbnRpdHk6IGBgeCBpc1xueWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGFuZCAqeSogYXJlIHRoZSBzYW1lIG9iamVjdC4gIGBgeCBpc1xubm90IHlgYCB5aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKLSAnY29tcG91bmQnOiAnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgYGBpZmBgLCBgYHdoaWxlYGAgYW5kIGBgZm9yYGAgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWxcbmNvbnRyb2wgZmxvdyBjb25zdHJ1Y3RzLiAgYGB0cnlgYCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vclxuY2xlYW51cCBjb2RlIGZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHMsIHdoaWxlIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gY29kZSBhcm91bmQgYVxuYmxvY2sgb2YgY29kZS4gIEZ1bmN0aW9uIGFuZCBjbGFzcyBkZWZpbml0aW9ucyBhcmUgYWxzbyBzeW50YWN0aWNhbGx5XG5jb21wb3VuZCBzdGF0ZW1lbnRzLlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgXCdjbGF1c2VzLlwnICBBIGNsYXVzZVxuY29uc2lzdHMgb2YgYSBoZWFkZXIgYW5kIGEgXCdzdWl0ZS5cJyAgVGhlIGNsYXVzZSBoZWFkZXJzIG9mIGFcbnBhcnRpY3VsYXIgY29tcG91bmQgc3RhdGVtZW50IGFyZSBhbGwgYXQgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwuXG5FYWNoIGNsYXVzZSBoZWFkZXIgYmVnaW5zIHdpdGggYSB1bmlxdWVseSBpZGVudGlmeWluZyBrZXl3b3JkIGFuZCBlbmRzXG53aXRoIGEgY29sb24uICBBIHN1aXRlIGlzIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cyBjb250cm9sbGVkIGJ5IGFcbmNsYXVzZS4gIEEgc3VpdGUgY2FuIGJlIG9uZSBvciBtb3JlIHNlbWljb2xvbi1zZXBhcmF0ZWQgc2ltcGxlXG5zdGF0ZW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGhlYWRlciwgZm9sbG93aW5nIHRoZSBoZWFkZXJcJ3NcbmNvbG9uLCBvciBpdCBjYW4gYmUgb25lIG9yIG1vcmUgaW5kZW50ZWQgc3RhdGVtZW50cyBvbiBzdWJzZXF1ZW50XG5saW5lcy4gIE9ubHkgdGhlIGxhdHRlciBmb3JtIG9mIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZFxuc3RhdGVtZW50czsgdGhlIGZvbGxvd2luZyBpcyBpbGxlZ2FsLCBtb3N0bHkgYmVjYXVzZSBpdCB3b3VsZG5cJ3QgYmVcbmNsZWFyIHRvIHdoaWNoIGBgaWZgYCBjbGF1c2UgYSBmb2xsb3dpbmcgYGBlbHNlYGAgY2xhdXNlIHdvdWxkIGJlbG9uZzpcblxuICAgaWYgdGVzdDE6IGlmIHRlc3QyOiBwcmludCh4KVxuXG5BbHNvIG5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIGJpbmRzIHRpZ2h0ZXIgdGhhbiB0aGUgY29sb24gaW4gdGhpc1xuY29udGV4dCwgc28gdGhhdCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGVcbmBgcHJpbnQoKWBgIGNhbGxzIGFyZSBleGVjdXRlZDpcblxuICAgaWYgeCA8IHkgPCB6OiBwcmludCh4KTsgcHJpbnQoeSk7IHByaW50KHopXG5cblN1bW1hcml6aW5nOlxuXG4gICBjb21wb3VuZF9zdG10IDo6PSBpZl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZm9yX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgdHJ5X3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2l0aF9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZ1bmNkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgY2xhc3NkZWZcbiAgIHN1aXRlICAgICAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgTkVXTElORSBJTkRFTlQgc3RhdGVtZW50KyBERURFTlRcbiAgIHN0YXRlbWVudCAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgY29tcG91bmRfc3RtdFxuICAgc3RtdF9saXN0ICAgICA6Oj0gc2ltcGxlX3N0bXQgKCI7IiBzaW1wbGVfc3RtdCkqIFsiOyJdXG5cbk5vdGUgdGhhdCBzdGF0ZW1lbnRzIGFsd2F5cyBlbmQgaW4gYSBgYE5FV0xJTkVgYCBwb3NzaWJseSBmb2xsb3dlZCBieVxuYSBgYERFREVOVGBgLiAgQWxzbyBub3RlIHRoYXQgb3B0aW9uYWwgY29udGludWF0aW9uIGNsYXVzZXMgYWx3YXlzXG5iZWdpbiB3aXRoIGEga2V5d29yZCB0aGF0IGNhbm5vdCBzdGFydCBhIHN0YXRlbWVudCwgdGh1cyB0aGVyZSBhcmUgbm9cbmFtYmlndWl0aWVzICh0aGUgXCdkYW5nbGluZyBgYGVsc2VgYFwnIHByb2JsZW0gaXMgc29sdmVkIGluIFB5dGhvbiBieVxucmVxdWlyaW5nIG5lc3RlZCBgYGlmYGAgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgYGBpZmBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cblxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzXG5leGVjdXRlZCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuZ29lcyBiYWNrIHRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhXG5zZXF1ZW5jZSAoc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbmBgZXhwcmVzc2lvbl9saXN0YGAuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mIGFzY2VuZGluZyBpbmRpY2VzLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cyAoc2VlICpBc3NpZ25tZW50IHN0YXRlbWVudHMqKSwgYW5kIHRoZW4gdGhlIHN1aXRlIGlzXG5leGVjdXRlZC4gIFdoZW4gdGhlIGl0ZW1zIGFyZSBleGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSBvciBhbiBpdGVyYXRvciByYWlzZXMgYSBgYFN0b3BJdGVyYXRpb25gYFxuZXhjZXB0aW9uKSwgdGhlIHN1aXRlIGluIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLFxuYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlIGBgZWxzZWBgIGNsYXVzZSBpZiB0aGVyZSB3YXNcbm5vIG5leHQgaXRlbS5cblxuVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzXG5ub3QgYWZmZWN0IHRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuXG5cbk5hbWVzIGluIHRoZSB0YXJnZXQgbGlzdCBhcmUgbm90IGRlbGV0ZWQgd2hlbiB0aGUgbG9vcCBpcyBmaW5pc2hlZCxcbmJ1dCBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHksIGl0IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGxcbmJ5IHRoZSBsb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgcmFuZ2UoKWBgIHJldHVybnMgYW5cbml0ZXJhdG9yIG9mIGludGVnZXJzIHN1aXRhYmxlIHRvIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWxcJ3MgYGBmb3JcbmkgOj0gYSB0byBiIGRvYGA7IGUuZy4sIGBgbGlzdChyYW5nZSgzKSlgYCByZXR1cm5zIHRoZSBsaXN0IGBgWzAsIDEsXG4yXWBgLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBsb29wXG4gICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuICBBblxuICBpbnRlcm5hbCBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCxcbiAgYW5kIHRoaXMgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXNcbiAgcmVhY2hlZCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFuc1xuICB0aGF0IGlmIHRoZSBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlXG4gIHNlcXVlbmNlLCB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2ZcbiAgdGhlIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcblxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIHRhcmdldF1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuVGhlIGBgZXhjZXB0YGAgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuXG5ubyBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgc3VpdGUsIGEgc2VhcmNoIGZvclxuYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHRcbmNsYXVzZXMgaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBblxuZXhwcmVzc2lvbi1sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlc1xuYW55IGV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdFxuZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGVcbnJlc3VsdGluZyBvYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpc1xuY29tcGF0aWJsZSB3aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZVxuZXhjZXB0aW9uIG9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlXG5leGNlcHRpb24uXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgYGB0cnlgYCBzdGF0ZW1lbnRcbnJhaXNlZCB0aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSBgYGFzYGAga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsXG5pZiBwcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nIGBgYXMgdGFyZ2V0YGAsIGl0IGlzIGNsZWFyZWRcbmF0IHRoZSBlbmQgb2YgdGhlIGV4Y2VwdCBjbGF1c2UuICBUaGlzIGlzIGFzIGlmXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgZm9vXG5cbndhcyB0cmFuc2xhdGVkIHRvXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgdHJ5OlxuICAgICAgICAgICBmb29cbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICBkZWwgTlxuXG5UaGlzIG1lYW5zIHRoZSBleGNlcHRpb24gbXVzdCBiZSBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBuYW1lIHRvIGJlXG5hYmxlIHRvIHJlZmVyIHRvIGl0IGFmdGVyIHRoZSBleGNlcHQgY2xhdXNlLiAgRXhjZXB0aW9ucyBhcmUgY2xlYXJlZFxuYmVjYXVzZSB3aXRoIHRoZSB0cmFjZWJhY2sgYXR0YWNoZWQgdG8gdGhlbSwgdGhleSBmb3JtIGEgcmVmZXJlbmNlXG5jeWNsZSB3aXRoIHRoZSBzdGFjayBmcmFtZSwga2VlcGluZyBhbGwgbG9jYWxzIGluIHRoYXQgZnJhbWUgYWxpdmVcbnVudGlsIHRoZSBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBzdG9yZWQgaW4gdGhlIGBgc3lzYGAgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzIHZpYVxuYGBzeXMuZXhjX2luZm8oKWBgLiBgYHN5cy5leGNfaW5mbygpYGAgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZlxudGhlIGV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0XG4oc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpblxudGhlIHByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gIGBgc3lzLmV4Y19pbmZvKClgYCB2YWx1ZXNcbmFyZSByZXN0b3JlZCB0byB0aGVpciBwcmV2aW91cyB2YWx1ZXMgKGJlZm9yZSB0aGUgY2FsbCkgd2hlbiByZXR1cm5pbmdcbmZyb20gYSBmdW5jdGlvbiB0aGF0IGhhbmRsZWQgYW4gZXhjZXB0aW9uLlxuXG5UaGUgb3B0aW9uYWwgYGBlbHNlYGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSBgYHRyeWBgIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZVxuYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBwcmVjZWRpbmcgYGBleGNlcHRgYCBjbGF1c2VzLlxuXG5JZiBgYGZpbmFsbHlgYCBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlXG5gYHRyeWBgIGNsYXVzZSBpcyBleGVjdXRlZCwgaW5jbHVkaW5nIGFueSBgYGV4Y2VwdGBgIGFuZCBgYGVsc2VgYFxuY2xhdXNlcy4gIElmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3RcbmhhbmRsZWQsIHRoZSBleGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgaXNcbmV4ZWN1dGVkLiAgSWYgdGhlcmUgaXMgYSBzYXZlZCBleGNlcHRpb24gaXQgaXMgcmUtcmFpc2VkIGF0IHRoZSBlbmQgb2ZcbnRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuICBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIHJhaXNlcyBhbm90aGVyXG5leGNlcHRpb24sIHRoZSBzYXZlZCBleGNlcHRpb24gaXMgc2V0IGFzIHRoZSBjb250ZXh0IG9mIHRoZSBuZXdcbmV4Y2VwdGlvbi4gSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSBleGVjdXRlcyBhIGBgcmV0dXJuYGAgb3JcbmBgYnJlYWtgYCBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb24gaXMgZGlzY2FyZGVkOlxuXG4gICBkZWYgZigpOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgMS8wXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgcmV0dXJuIDQyXG5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5XaGVuIGEgYGByZXR1cm5gYCwgYGBicmVha2BgIG9yIGBgY29udGludWVgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW5cbnRoZSBgYHRyeWBgIHN1aXRlIG9mIGEgYGB0cnlgYC4uLmBgZmluYWxseWBgIHN0YXRlbWVudCwgdGhlXG5gYGZpbmFsbHlgYCBjbGF1c2UgaXMgYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgaXMgaWxsZWdhbCBpbiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhXG5wcm9ibGVtIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlXG5saWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIGBgcmFpc2VgYCBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vblxuYGB0cnlgYC4uLmBgZXhjZXB0YGAuLi5gYGZpbmFsbHlgYCB1c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWRcbmZvciBjb252ZW5pZW50IHJldXNlLlxuXG4gICB3aXRoX3N0bXQgOjo9ICJ3aXRoIiB3aXRoX2l0ZW0gKCIsIiB3aXRoX2l0ZW0pKiAiOiIgc3VpdGVcbiAgIHdpdGhfaXRlbSA6Oj0gZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXG5cblRoZSBleGVjdXRpb24gb2YgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSBgYHdpdGhfaXRlbWBgKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBpcyBsb2FkZWQgZm9yIGxhdGVyIHVzZS5cblxuMy4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZW50ZXJfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tIGBgX19lbnRlcl9fKClgYCBpcyBhc3NpZ25lZCB0byBpdC5cblxuICAgTm90ZTogVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlIGBgX19lbnRlcl9fKClgYFxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuIGBgX19leGl0X18oKWBgIHdpbGwgYWx3YXlzXG4gICAgIGJlIGNhbGxlZC4gVGh1cywgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXNzaWdubWVudCB0byB0aGVcbiAgICAgdGFyZ2V0IGxpc3QsIGl0IHdpbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBhbiBlcnJvciBvY2N1cnJpbmdcbiAgICAgd2l0aGluIHRoZSBzdWl0ZSB3b3VsZCBiZS4gU2VlIHN0ZXAgNiBiZWxvdy5cblxuNS4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLlxuXG42LiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBgYF9fZXhpdF9fKClgYC4gT3RoZXJ3aXNlLFxuICAgdGhyZWUgYGBOb25lYGAgYXJndW1lbnRzIGFyZSBzdXBwbGllZC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWVcbiAgIGZyb20gdGhlIGBgX19leGl0X18oKWBgIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXNcbiAgIHJlcmFpc2VkLiAgSWYgdGhlIHJldHVybiB2YWx1ZSB3YXMgdHJ1ZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgc3VwcHJlc3NlZCwgYW5kIGV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aCB0aGUgc3RhdGVtZW50IGZvbGxvd2luZ1xuICAgdGhlIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gYGBfX2V4aXRfXygpYGAgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlIGBgd2l0aGBgIHN0YXRlbWVudHMgd2VyZSBuZXN0ZWQ6XG5cbiAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOlxuICAgICAgIHN1aXRlXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgd2l0aCBBKCkgYXMgYTpcbiAgICAgICB3aXRoIEIoKSBhcyBiOlxuICAgICAgICAgICBzdWl0ZVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBtdWx0aXBsZSBjb250ZXh0IGV4cHJlc3Npb25zLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT09PT1cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogYGA9YGBcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICJgYCpgYCIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLVxudGhpcyBpcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXNcbnVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGFcbmRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTpcbmlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGFcbmxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdFxud2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAgYXMgdGhlXG5kZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuImBgKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmdcbmFueSBleGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmXG50aGUgZm9ybSAiYGAqKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgImBgKmBgIiBvciAiYGAqaWRlbnRpZmllcmBgIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiYGA6IGV4cHJlc3Npb25gYCJcbmZvbGxvd2luZyB0aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb25cbmV2ZW4gdGhvc2Ugb2YgdGhlIGZvcm0gYGAqaWRlbnRpZmllcmBgIG9yIGBgKippZGVudGlmaWVyYGAuICBGdW5jdGlvbnNcbm1heSBoYXZlICJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gImBgLT4gZXhwcmVzc2lvbmBgIiBhZnRlciB0aGVcbnBhcmFtZXRlciBsaXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvblxuYW5kIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC5cbkFubm90YXRpb25zIG1heSBiZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpblxudGhlIHNvdXJjZSBjb2RlLiAgVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGVcbnNlbWFudGljcyBvZiBhIGZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXNcbnZhbHVlcyBvZiBhIGRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGVcbmBgX19hbm5vdGF0aW9uc19fYGAgYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiYGBkZWZgYCIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiYGBkZWZgYCIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiYGBkZWZgYCJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuICAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyBgYG9iamVjdGBgOyBoZW5jZSxcblxuICAgY2xhc3MgRm9vOlxuICAgICAgIHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb28ob2JqZWN0KTpcbiAgICAgICBwYXNzXG5cblRoZSBjbGFzc1wncyBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIGluIGEgbmV3IGV4ZWN1dGlvbiBmcmFtZSAoc2VlXG4qTmFtaW5nIGFuZCBiaW5kaW5nKiksIHVzaW5nIGEgbmV3bHkgY3JlYXRlZCBsb2NhbCBuYW1lc3BhY2UgYW5kIHRoZVxub3JpZ2luYWwgZ2xvYmFsIG5hbWVzcGFjZS4gKFVzdWFsbHksIHRoZSBzdWl0ZSBjb250YWlucyBtb3N0bHlcbmZ1bmN0aW9uIGRlZmluaXRpb25zLikgIFdoZW4gdGhlIGNsYXNzXCdzIHN1aXRlIGZpbmlzaGVzIGV4ZWN1dGlvbiwgaXRzXG5leGVjdXRpb24gZnJhbWUgaXMgZGlzY2FyZGVkIGJ1dCBpdHMgbG9jYWwgbmFtZXNwYWNlIGlzIHNhdmVkLiBbNF0gQVxuY2xhc3Mgb2JqZWN0IGlzIHRoZW4gY3JlYXRlZCB1c2luZyB0aGUgaW5oZXJpdGFuY2UgbGlzdCBmb3IgdGhlIGJhc2VcbmNsYXNzZXMgYW5kIHRoZSBzYXZlZCBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeS5cblRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoaXMgY2xhc3Mgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBsb2NhbFxubmFtZXNwYWNlLlxuXG5DbGFzcyBjcmVhdGlvbiBjYW4gYmUgY3VzdG9taXplZCBoZWF2aWx5IHVzaW5nICptZXRhY2xhc3NlcyouXG5cbkNsYXNzZXMgY2FuIGFsc28gYmUgZGVjb3JhdGVkOiBqdXN0IGxpa2Ugd2hlbiBkZWNvcmF0aW5nIGZ1bmN0aW9ucyxcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgY2xhc3MgRm9vOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vOiBwYXNzXG4gICBGb28gPSBmMShhcmcpKGYyKEZvbykpXG5cblRoZSBldmFsdWF0aW9uIHJ1bGVzIGZvciB0aGUgZGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSB0aGUgc2FtZSBhcyBmb3JcbmZ1bmN0aW9uIGRlY29yYXRvcnMuICBUaGUgcmVzdWx0IG11c3QgYmUgYSBjbGFzcyBvYmplY3QsIHdoaWNoIGlzIHRoZW5cbmJvdW5kIHRvIHRoZSBjbGFzcyBuYW1lLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBhcmVcbmNsYXNzIGF0dHJpYnV0ZXM7IHRoZXkgYXJlIHNoYXJlZCBieSBpbnN0YW5jZXMuICBJbnN0YW5jZSBhdHRyaWJ1dGVzXG5jYW4gYmUgc2V0IGluIGEgbWV0aG9kIHdpdGggYGBzZWxmLm5hbWUgPSB2YWx1ZWBgLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb25cbiJgYHNlbGYubmFtZWBgIiwgYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZVxud2l0aCB0aGUgc2FtZSBuYW1lIHdoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZVxudXNlZCBhcyBkZWZhdWx0cyBmb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzXG50aGVyZSBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvXG5jcmVhdGUgaW5zdGFuY2UgdmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLSBDbGFzc1xuICAgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3MgdGhlcmVcbiAgICBpcyBhIGBgZmluYWxseWBgIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXIgZXhjZXB0aW9uLlxuICAgIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhblxuICAgIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgYGByZXR1cm5gYCwgYGBjb250aW51ZWBgLCBvclxuICAgIGBgYnJlYWtgYCBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBmdW5jdGlvblxuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgYGBfX2RvY19fYGAgYXR0cmlidXRlIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgZnVuY3Rpb25cJ3MgKmRvY3N0cmluZyouXG5cbls0XSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBjbGFzc1xuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgbmFtZXNwYWNlXCdzIGBgX19kb2NfX2BgIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCisgJ2NvbXBvdW5kJzogJ1xuQ29tcG91bmQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnRhaW4gKGdyb3VwcyBvZikgb3RoZXIgc3RhdGVtZW50czsgdGhleSBhZmZlY3Rcbm9yIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aG9zZSBvdGhlciBzdGF0ZW1lbnRzIGluIHNvbWUgd2F5LiAgSW5cbmdlbmVyYWwsIGNvbXBvdW5kIHN0YXRlbWVudHMgc3BhbiBtdWx0aXBsZSBsaW5lcywgYWx0aG91Z2ggaW4gc2ltcGxlXG5pbmNhcm5hdGlvbnMgYSB3aG9sZSBjb21wb3VuZCBzdGF0ZW1lbnQgbWF5IGJlIGNvbnRhaW5lZCBpbiBvbmUgbGluZS5cblxuVGhlIGBgaWZgYCwgYGB3aGlsZWBgIGFuZCBgYGZvcmBgIHN0YXRlbWVudHMgaW1wbGVtZW50IHRyYWRpdGlvbmFsXG5jb250cm9sIGZsb3cgY29uc3RydWN0cy4gIGBgdHJ5YGAgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3JcbmNsZWFudXAgY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgYGB3aXRoYGAgc3RhdGVtZW50XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBpbml0aWFsaXphdGlvbiBhbmQgZmluYWxpemF0aW9uIGNvZGUgYXJvdW5kIGFcbmJsb2NrIG9mIGNvZGUuICBGdW5jdGlvbiBhbmQgY2xhc3MgZGVmaW5pdGlvbnMgYXJlIGFsc28gc3ludGFjdGljYWxseVxuY29tcG91bmQgc3RhdGVtZW50cy5cblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb25zaXN0IG9mIG9uZSBvciBtb3JlIFwnY2xhdXNlcy5cJyAgQSBjbGF1c2VcbmNvbnNpc3RzIG9mIGEgaGVhZGVyIGFuZCBhIFwnc3VpdGUuXCcgIFRoZSBjbGF1c2UgaGVhZGVycyBvZiBhXG5wYXJ0aWN1bGFyIGNvbXBvdW5kIHN0YXRlbWVudCBhcmUgYWxsIGF0IHRoZSBzYW1lIGluZGVudGF0aW9uIGxldmVsLlxuRWFjaCBjbGF1c2UgaGVhZGVyIGJlZ2lucyB3aXRoIGEgdW5pcXVlbHkgaWRlbnRpZnlpbmcga2V5d29yZCBhbmQgZW5kc1xud2l0aCBhIGNvbG9uLiAgQSBzdWl0ZSBpcyBhIGdyb3VwIG9mIHN0YXRlbWVudHMgY29udHJvbGxlZCBieSBhXG5jbGF1c2UuICBBIHN1aXRlIGNhbiBiZSBvbmUgb3IgbW9yZSBzZW1pY29sb24tc2VwYXJhdGVkIHNpbXBsZVxuc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBoZWFkZXIsIGZvbGxvd2luZyB0aGUgaGVhZGVyXCdzXG5jb2xvbiwgb3IgaXQgY2FuIGJlIG9uZSBvciBtb3JlIGluZGVudGVkIHN0YXRlbWVudHMgb24gc3Vic2VxdWVudFxubGluZXMuICBPbmx5IHRoZSBsYXR0ZXIgZm9ybSBvZiBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmRcbnN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwgbW9zdGx5IGJlY2F1c2UgaXQgd291bGRuXCd0IGJlXG5jbGVhciB0byB3aGljaCBgYGlmYGAgY2xhdXNlIGEgZm9sbG93aW5nIGBgZWxzZWBgIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQoeClcblxuQWxzbyBub3RlIHRoYXQgdGhlIHNlbWljb2xvbiBiaW5kcyB0aWdodGVyIHRoYW4gdGhlIGNvbG9uIGluIHRoaXNcbmNvbnRleHQsIHNvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlXG5gYHByaW50KClgYCBjYWxscyBhcmUgZXhlY3V0ZWQ6XG5cbiAgIGlmIHggPCB5IDwgejogcHJpbnQoeCk7IHByaW50KHkpOyBwcmludCh6KVxuXG5TdW1tYXJpemluZzpcblxuICAgY29tcG91bmRfc3RtdCA6Oj0gaWZfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZvcl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHRyeV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdpdGhfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmdW5jZGVmXG4gICAgICAgICAgICAgICAgICAgICB8IGNsYXNzZGVmXG4gICBzdWl0ZSAgICAgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IE5FV0xJTkUgSU5ERU5UIHN0YXRlbWVudCsgREVERU5UXG4gICBzdGF0ZW1lbnQgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IGNvbXBvdW5kX3N0bXRcbiAgIHN0bXRfbGlzdCAgICAgOjo9IHNpbXBsZV9zdG10ICgiOyIgc2ltcGxlX3N0bXQpKiBbIjsiXVxuXG5Ob3RlIHRoYXQgc3RhdGVtZW50cyBhbHdheXMgZW5kIGluIGEgYGBORVdMSU5FYGAgcG9zc2libHkgZm9sbG93ZWQgYnlcbmEgYGBERURFTlRgYC4gIEFsc28gbm90ZSB0aGF0IG9wdGlvbmFsIGNvbnRpbnVhdGlvbiBjbGF1c2VzIGFsd2F5c1xuYmVnaW4gd2l0aCBhIGtleXdvcmQgdGhhdCBjYW5ub3Qgc3RhcnQgYSBzdGF0ZW1lbnQsIHRodXMgdGhlcmUgYXJlIG5vXG5hbWJpZ3VpdGllcyAodGhlIFwnZGFuZ2xpbmcgYGBlbHNlYGBcJyBwcm9ibGVtIGlzIHNvbHZlZCBpbiBQeXRob24gYnlcbnJlcXVpcmluZyBuZXN0ZWQgYGBpZmBgIHN0YXRlbWVudHMgdG8gYmUgaW5kZW50ZWQpLlxuXG5UaGUgZm9ybWF0dGluZyBvZiB0aGUgZ3JhbW1hciBydWxlcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHBsYWNlc1xuZWFjaCBjbGF1c2Ugb24gYSBzZXBhcmF0ZSBsaW5lIGZvciBjbGFyaXR5LlxuXG5cblRoZSBgYGlmYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG5cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpc1xuZXhlY3V0ZWQgYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmdvZXMgYmFjayB0byB0ZXN0aW5nIHRoZSBleHByZXNzaW9uLlxuXG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYVxuc2VxdWVuY2UgKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG5gYGV4cHJlc3Npb25fbGlzdGBgLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgYGBTdG9wSXRlcmF0aW9uYGBcbmV4Y2VwdGlvbiksIHRoZSBzdWl0ZSBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCxcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSBgYGVsc2VgYCBjbGF1c2UgaWYgdGhlcmUgd2FzXG5ubyBuZXh0IGl0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYHJhbmdlKClgYCByZXR1cm5zIGFuXG5pdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzIGBgZm9yXG5pIDo9IGEgdG8gYiBkb2BgOyBlLmcuLCBgYGxpc3QocmFuZ2UoMykpYGAgcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLFxuMl1gYC5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSBgYGV4Y2VwdGBgIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlblxubm8gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIHN1aXRlLCBhIHNlYXJjaCBmb3JcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0XG5jbGF1c2VzIGluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW5cbmV4cHJlc3Npb24tbGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXNcbmFueSBleGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXRcbmV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlXG5yZXN1bHRpbmcgb2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXNcbmNvbXBhdGlibGUgd2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGVcbmV4Y2VwdGlvbiBvYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZVxuZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlIGBgdHJ5YGAgc3RhdGVtZW50XG5yYWlzZWQgdGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgYGBhc2BgIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLFxuaWYgcHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyBgYGFzIHRhcmdldGBgLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSBgYHN5c2BgIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2VzcyB2aWFcbmBgc3lzLmV4Y19pbmZvKClgYC4gYGBzeXMuZXhjX2luZm8oKWBgIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2ZcbnRoZSBleGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdFxuKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW5cbnRoZSBwcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICBgYHN5cy5leGNfaW5mbygpYGAgdmFsdWVzXG5hcmUgcmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsIGBgZWxzZWBgIGNsYXVzZSBpcyBleGVjdXRlZCBpZiBhbmQgd2hlbiBjb250cm9sIGZsb3dzIG9mZlxudGhlIGVuZCBvZiB0aGUgYGB0cnlgYCBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSBgYGVsc2VgYCBjbGF1c2VcbmFyZSBub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nIGBgZXhjZXB0YGAgY2xhdXNlcy5cblxuSWYgYGBmaW5hbGx5YGAgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZVxuYGB0cnlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgYGBleGNlcHRgYCBhbmQgYGBlbHNlYGBcbmNsYXVzZXMuICBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90XG5oYW5kbGVkLCB0aGUgZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgYGBmaW5hbGx5YGAgY2xhdXNlIGlzXG5leGVjdXRlZC4gIElmIHRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mXG50aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAgSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSByYWlzZXMgYW5vdGhlclxuZXhjZXB0aW9uLCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3XG5leGNlcHRpb24uIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgZXhlY3V0ZXMgYSBgYHJldHVybmBgIG9yXG5gYGJyZWFrYGAgc3RhdGVtZW50LCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS5cblxuV2hlbiBhIGBgcmV0dXJuYGAsIGBgYnJlYWtgYCBvciBgYGNvbnRpbnVlYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluXG50aGUgYGB0cnlgYCBzdWl0ZSBvZiBhIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYCBzdGF0ZW1lbnQsIHRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGlzIGlsbGVnYWwgaW4gdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYVxucHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZVxubGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBgYHJhaXNlYGAgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb25cbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgdXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkXG5mb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYGB3aXRoX2l0ZW1gYClcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG40LiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBtZXRob2QgaXMgaW52b2tlZC4gIElmIGFuXG4gICBleGNlcHRpb24gY2F1c2VkIHRoZSBzdWl0ZSB0byBiZSBleGl0ZWQsIGl0cyB0eXBlLCB2YWx1ZSwgYW5kXG4gICB0cmFjZWJhY2sgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYGBfX2V4aXRfXygpYGAuIE90aGVyd2lzZSxcbiAgIHRocmVlIGBgTm9uZWBgIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSBgYF9fZXhpdF9fKClgYCBtZXRob2Qgd2FzIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICByZXJhaXNlZC4gIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXNcbiAgIHN1cHByZXNzZWQsIGFuZCBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmdcbiAgIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tIGBgX19leGl0X18oKWBgIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSBgYHdpdGhgYCBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09PT09XG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFtwYXJhbWV0ZXJfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICAoICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqIGBgPWBgXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS1cbnRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB3aGVuIHRoZVxuZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXNcbmV2YWx1YXRlZCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLVxuY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnRcbnRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYVxubGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5XG5hcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuXG5UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2VcbmBgTm9uZWBgIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGVcbmZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiJgYCppZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nXG5hbnkgZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZlxudGhlIGZvcm0gImBgKippZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICJgYCpgYCIgb3IgImBgKmlkZW50aWZpZXJgYCIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gImBgOiBleHByZXNzaW9uYGAiXG5mb2xsb3dpbmcgdGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uXG5ldmVuIHRob3NlIG9mIHRoZSBmb3JtIGBgKmlkZW50aWZpZXJgYCBvciBgYCoqaWRlbnRpZmllcmBgLiAgRnVuY3Rpb25zXG5tYXkgaGF2ZSAicmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICJgYC0+IGV4cHJlc3Npb25gYCIgYWZ0ZXIgdGhlXG5wYXJhbWV0ZXIgbGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb25cbmFuZCBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuXG5Bbm5vdGF0aW9ucyBtYXkgYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW5cbnRoZSBzb3VyY2UgY29kZS4gIFRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlXG5zZW1hbnRpY3Mgb2YgYSBmdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzXG52YWx1ZXMgb2YgYSBkaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlXG5gYF9fYW5ub3RhdGlvbnNfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgImBgZGVmYGAiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgImBgZGVmYGAiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgImBgZGVmYGAiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcbiAgICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cblxuXG5DbGFzcyBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT1cblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgYGBvYmplY3RgYDsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoIGBgc2VsZi5uYW1lID0gdmFsdWVgYC4gIEJvdGggY2xhc3MgYW5kXG5pbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uXG4iYGBzZWxmLm5hbWVgYCIsIGFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGVcbndpdGggdGhlIHNhbWUgbmFtZSB3aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmVcbnVzZWQgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlc1xudGhlcmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0b1xuY3JlYXRlIGluc3RhbmNlIHZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC0gQ2xhc3NcbiAgIERlY29yYXRvcnNcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGUgZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGludm9jYXRpb24gc3RhY2sgdW5sZXNzIHRoZXJlXG4gICAgaXMgYSBgYGZpbmFsbHlgYCBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyIGV4Y2VwdGlvbi5cbiAgICBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhIGBgcmV0dXJuYGAsIGBgY29udGludWVgYCwgb3JcbiAgICBgYGJyZWFrYGAgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb25cbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzIGBgX19kb2NfX2BgIGF0dHJpYnV0ZSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyBgYF9fZG9jX19gYCBpdGVtIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgY2xhc3NcJ3MgKmRvY3N0cmluZyouXG4nLAogICdjb250ZXh0LW1hbmFnZXJzJzogJ1xuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSBgYHdpdGhgYCBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0XG5tYW5hZ2VyIGhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lXG5jb250ZXh0IGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmVcbm5vcm1hbGx5IGludm9rZWQgdXNpbmcgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb25cbipUaGUgd2l0aCBzdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXJcbm1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIGBgd2l0aGBgXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlIGBgYXNgYCBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSBgYE5vbmVgYC5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgYGBfX2V4aXRfXygpYGAgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuJywKICAnY29udGludWUnOiAnXG5UaGUgYGBjb250aW51ZWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgY29udGludWVfc3RtdCA6Oj0gImNvbnRpbnVlIlxuXG5gYGNvbnRpbnVlYGAgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSBgYGZvcmBgIG9yXG5gYHdoaWxlYGAgbG9vcCwgYnV0IG5vdCBuZXN0ZWQgaW4gYSBmdW5jdGlvbiBvciBjbGFzcyBkZWZpbml0aW9uIG9yXG5gYGZpbmFsbHlgYCBjbGF1c2Ugd2l0aGluIHRoYXQgbG9vcC4gIEl0IGNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGN5Y2xlXG5vZiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbG9vcC5cblxuV2hlbiBgYGNvbnRpbnVlYGAgcGFzc2VzIGNvbnRyb2wgb3V0IG9mIGEgYGB0cnlgYCBzdGF0ZW1lbnQgd2l0aCBhXG5gYGZpbmFsbHlgYCBjbGF1c2UsIHRoYXQgYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGJlZm9yZSByZWFsbHlcbnN0YXJ0aW5nIHRoZSBuZXh0IGxvb3AgY3ljbGUuXG4nLAogICdjb252ZXJzaW9ucyc6ICdcbkFyaXRobWV0aWMgY29udmVyc2lvbnNcbioqKioqKioqKioqKioqKioqKioqKipcblxuV2hlbiBhIGRlc2NyaXB0aW9uIG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IgYmVsb3cgdXNlcyB0aGUgcGhyYXNlXG4idGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwiIHRoaXMgbWVhbnNcbnRoYXQgdGhlIG9wZXJhdG9yIGltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyB0aGF0IHdheTpcblxuKiBJZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBjb21wbGV4IG51bWJlciwgdGhlIG90aGVyIGlzIGNvbnZlcnRlZCB0b1xuICBjb21wbGV4O1xuXG4qIG90aGVyd2lzZSwgaWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB0aGUgb3RoZXJcbiAgaXMgY29udmVydGVkIHRvIGZsb2F0aW5nIHBvaW50O1xuXG4qIG90aGVyd2lzZSwgYm90aCBtdXN0IGJlIGludGVnZXJzIGFuZCBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS5cblxuU29tZSBhZGRpdGlvbmFsIHJ1bGVzIGFwcGx5IGZvciBjZXJ0YWluIG9wZXJhdG9ycyAoZS5nLiwgYSBzdHJpbmcgbGVmdFxuYXJndW1lbnQgdG8gdGhlIFwnJVwnIG9wZXJhdG9yKS4gIEV4dGVuc2lvbnMgbXVzdCBkZWZpbmUgdGhlaXIgb3duXG5jb252ZXJzaW9uIGJlaGF2aW9yLlxuJywKLSAnY3VzdG9taXphdGlvbic6ICdcbkJhc2ljIGN1c3RvbWl6YXRpb25cbioqKioqKioqKioqKioqKioqKipcblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfaW5mbygpWzJdYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnlcbiAgICAgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmIHRoZXJlIGFyZSBubyBQeXRob24tXG4gICAgIGxldmVsIGBgX19kZWxfXygpYGAgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb25cbiAgICAgZm9yIHRoZSBgYGdjYGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvd1xuICAgICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGN5Y2xlIGRldGVjdG9yLFxuICAgICBwYXJ0aWN1bGFybHkgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGdhcmJhZ2VgYCB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZVxuICAgIm9mZmljaWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLFxuICAgdGhpcyBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkXG4gICB0byByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgYGA8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgXG4gICBidXQgbm90IGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW5cbiAgICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzXG4gICByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBzdHIob2JqZWN0KWBgIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgZm9ybWF0KClgYFxuICAgYW5kIGBgcHJpbnQoKWBgIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZVxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICAqc3RyaW5nKiBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgYG9iamVjdC5fX3JlcHJfXygpYGAgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCBgYF9fc3RyX18oKWBgIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSBgYG9iamVjdGBgXG4gICBjYWxscyBgYG9iamVjdC5fX3JlcHJfXygpYGAuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgYnl0ZXMoKWBgIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSBgYGJ5dGVzYGAgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Qgb2YgY2xhc3MgYGBzdHJgYCkgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzXG4gICBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXMgdXBcbiAgIHRvIHRoZSB0eXBlIGltcGxlbWVudGluZyBgYF9fZm9ybWF0X18oKWBgLCBob3dldmVyIG1vc3QgY2xhc3Nlc1xuICAgd2lsbCBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvclxuICAgdXNlIGEgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBjYWxsc1xuICAgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kIGBgeD49eWBgIGNhbGxzXG4gICBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogYGBoYXNoKClgYCB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzIGN1c3RvbVxuICAgICBgYF9faGFzaF9fKClgYCBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSBgYFB5X3NzaXplX3RgYC4gIFRoaXMgaXNcbiAgICAgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXQgYnVpbGRzLlxuICAgICBJZiBhbiBvYmplY3RcJ3MgICBgYF9faGFzaF9fKClgYCBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2ZcbiAgICAgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZFxuICAgICBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggYGBweXRob24gLWMgImltcG9ydCBzeXM7XG4gICAgIHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0IGBgeCA9PSB5YGAgaW1wbGllcyBib3RoIHRoYXQgYGB4IGlzIHlgYCBhbmQgYGBoYXNoKHgpID09XG4gICBoYXNoKHkpYGAuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIGFuZCBkb2VzIG5vdCBkZWZpbmVcbiAgIGBgX19oYXNoX18oKWBgIHdpbGwgaGF2ZSBpdHMgYGBfX2hhc2hfXygpYGAgaW1wbGljaXRseSBzZXQgdG9cbiAgIGBgTm9uZWBgLiAgV2hlbiB0aGUgYGBfX2hhc2hfXygpYGAgbWV0aG9kIG9mIGEgY2xhc3MgaXMgYGBOb25lYGAsXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuXG4gICBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZVxuICAgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosXG4gICBjb2xsZWN0aW9ucy5IYXNoYWJsZWBgKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgYGBfX2hhc2hfXygpYGAgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlXG4gICBpbnRlcnByZXRlciBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fYGAuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSBgYF9fZXFfXygpYGAgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biBgYF9faGFzaF9fKClgYCB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhIGBgVHlwZUVycm9yYGAgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZFxuICAgYXMgaGFzaGFibGUgYnkgYW4gYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlIGBgX19oYXNoX18oKWBgIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZCBkYXRldGltZVxuICAgICBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvIGBgUFlUSE9OSEFTSFNFRURgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cbicsCi0gJ2RlYnVnZ2VyJzogJ1xuYGBwZGJgYCAtLS0gVGhlIFB5dGhvbiBEZWJ1Z2dlclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgbW9kdWxlIGBgcGRiYGAgZGVmaW5lcyBhbiBpbnRlcmFjdGl2ZSBzb3VyY2UgY29kZSBkZWJ1Z2dlciBmb3JcblB5dGhvbiBwcm9ncmFtcy4gIEl0IHN1cHBvcnRzIHNldHRpbmcgKGNvbmRpdGlvbmFsKSBicmVha3BvaW50cyBhbmRcbnNpbmdsZSBzdGVwcGluZyBhdCB0aGUgc291cmNlIGxpbmUgbGV2ZWwsIGluc3BlY3Rpb24gb2Ygc3RhY2sgZnJhbWVzLFxuc291cmNlIGNvZGUgbGlzdGluZywgYW5kIGV2YWx1YXRpb24gb2YgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGluIHRoZVxuY29udGV4dCBvZiBhbnkgc3RhY2sgZnJhbWUuICBJdCBhbHNvIHN1cHBvcnRzIHBvc3QtbW9ydGVtIGRlYnVnZ2luZ1xuYW5kIGNhbiBiZSBjYWxsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLlxuXG5UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLSBpdCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIHRoZSBjbGFzc1xuYGBQZGJgYC4gVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieVxucmVhZGluZyB0aGUgc291cmNlLiAgVGhlIGV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyBgYGJkYmBgXG5hbmQgYGBjbWRgYC5cblxuVGhlIGRlYnVnZ2VyXCdzIHByb21wdCBpcyBgYChQZGIpYGAuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbVxudW5kZXIgY29udHJvbCBvZiB0aGUgZGVidWdnZXIgaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gcGRiLnJ1bihcJ215bW9kdWxlLnRlc3QoKVwnKVxuICAgPiA8c3RyaW5nPigwKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICBOYW1lRXJyb3I6IFwnc3BhbVwnXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBUYWItY29tcGxldGlvbiB2aWEgdGhlIGBgcmVhZGxpbmVgYCBtb2R1bGUgaXNcbmF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kIGNvbW1hbmQgYXJndW1lbnRzLCBlLmcuIHRoZSBjdXJyZW50IGdsb2JhbFxuYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzIGFyZ3VtZW50cyBvZiB0aGUgYGBwcmludGBgIGNvbW1hbmQuXG5cbmBgcGRiLnB5YGAgY2FuIGFsc28gYmUgaW52b2tlZCBhcyBhIHNjcmlwdCB0byBkZWJ1ZyBvdGhlciBzY3JpcHRzLlxuRm9yIGV4YW1wbGU6XG5cbiAgIHB5dGhvbjMgLW0gcGRiIG15c2NyaXB0LnB5XG5cbldoZW4gaW52b2tlZCBhcyBhIHNjcmlwdCwgcGRiIHdpbGwgYXV0b21hdGljYWxseSBlbnRlciBwb3N0LW1vcnRlbVxuZGVidWdnaW5nIGlmIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIGV4aXRzIGFibm9ybWFsbHkuICBBZnRlciBwb3N0LVxubW9ydGVtIGRlYnVnZ2luZyAob3IgYWZ0ZXIgbm9ybWFsIGV4aXQgb2YgdGhlIHByb2dyYW0pLCBwZGIgd2lsbFxucmVzdGFydCB0aGUgcHJvZ3JhbS4gIEF1dG9tYXRpYyByZXN0YXJ0aW5nIHByZXNlcnZlcyBwZGJcJ3Mgc3RhdGUgKHN1Y2hcbmFzIGJyZWFrcG9pbnRzKSBhbmQgaW4gbW9zdCBjYXNlcyBpcyBtb3JlIHVzZWZ1bCB0aGFuIHF1aXR0aW5nIHRoZVxuZGVidWdnZXIgdXBvbiBwcm9ncmFtXCdzIGV4aXQuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMjogYGBwZGIucHlgYCBub3cgYWNjZXB0cyBhIGBgLWNgYCBvcHRpb24gdGhhdFxuZXhlY3V0ZXMgY29tbWFuZHMgYXMgaWYgZ2l2ZW4gaW4gYSBgYC5wZGJyY2BgIGZpbGUsIHNlZSAqRGVidWdnZXJcbkNvbW1hbmRzKi5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIgZnJvbSBhIHJ1bm5pbmcgcHJvZ3JhbSBpc1xudG8gaW5zZXJ0XG5cbiAgIGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKVxuXG5hdCB0aGUgbG9jYXRpb24geW91IHdhbnQgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIuICBZb3UgY2FuIHRoZW5cbnN0ZXAgdGhyb3VnaCB0aGUgY29kZSBmb2xsb3dpbmcgdGhpcyBzdGF0ZW1lbnQsIGFuZCBjb250aW51ZSBydW5uaW5nXG53aXRob3V0IHRoZSBkZWJ1Z2dlciB1c2luZyB0aGUgYGBjb250aW51ZWBgIGNvbW1hbmQuXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGluc3BlY3QgYSBjcmFzaGVkIHByb2dyYW0gaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gbXltb2R1bGUudGVzdCgpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgNCwgaW4gdGVzdFxuICAgICAgIHRlc3QyKClcbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgMywgaW4gdGVzdDJcbiAgICAgICBwcmludChzcGFtKVxuICAgTmFtZUVycm9yOiBzcGFtXG4gICA+Pj4gcGRiLnBtKClcbiAgID4gLi9teW1vZHVsZS5weSgzKXRlc3QyKClcbiAgIC0+IHByaW50KHNwYW0pXG4gICAoUGRiKVxuXG5UaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM7IGVhY2ggZW50ZXJzIHRoZSBkZWJ1Z2dlclxuaW4gYSBzbGlnaHRseSBkaWZmZXJlbnQgd2F5OlxuXG5wZGIucnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcblxuICAgRXhlY3V0ZSB0aGUgKnN0YXRlbWVudCogKGdpdmVuIGFzIGEgc3RyaW5nIG9yIGEgY29kZSBvYmplY3QpIHVuZGVyXG4gICBkZWJ1Z2dlciBjb250cm9sLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzIGJlZm9yZSBhbnkgY29kZSBpc1xuICAgZXhlY3V0ZWQ7IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzIGFuZCB0eXBlIGBgY29udGludWVgYCwgb3IgeW91IGNhblxuICAgc3RlcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgdXNpbmcgYGBzdGVwYGAgb3IgYGBuZXh0YGAgKGFsbCB0aGVzZVxuICAgY29tbWFuZHMgYXJlIGV4cGxhaW5lZCBiZWxvdykuICBUaGUgb3B0aW9uYWwgKmdsb2JhbHMqIGFuZCAqbG9jYWxzKlxuICAgYXJndW1lbnRzIHNwZWNpZnkgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBjb2RlIGlzIGV4ZWN1dGVkOyBieVxuICAgZGVmYXVsdCB0aGUgZGljdGlvbmFyeSBvZiB0aGUgbW9kdWxlIGBgX19tYWluX19gYCBpcyB1c2VkLiAgKFNlZVxuICAgdGhlIGV4cGxhbmF0aW9uIG9mIHRoZSBidWlsdC1pbiBgYGV4ZWMoKWBgIG9yIGBgZXZhbCgpYGBcbiAgIGZ1bmN0aW9ucy4pXG5cbnBkYi5ydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogKGdpdmVuIGFzIGEgc3RyaW5nIG9yIGEgY29kZSBvYmplY3QpXG4gICB1bmRlciBkZWJ1Z2dlciBjb250cm9sLiAgV2hlbiBgYHJ1bmV2YWwoKWBgIHJldHVybnMsIGl0IHJldHVybnMgdGhlXG4gICB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4gIE90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG9cbiAgIGBgcnVuKClgYC5cblxucGRiLnJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG5cbiAgIENhbGwgdGhlICpmdW5jdGlvbiogKGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdCwgbm90IGEgc3RyaW5nKVxuICAgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiAgV2hlbiBgYHJ1bmNhbGwoKWBgIHJldHVybnMsIGl0IHJldHVybnNcbiAgIHdoYXRldmVyIHRoZSBmdW5jdGlvbiBjYWxsIHJldHVybmVkLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzXG4gICBhcyBzb29uIGFzIHRoZSBmdW5jdGlvbiBpcyBlbnRlcmVkLlxuXG5wZGIuc2V0X3RyYWNlKClcblxuICAgRW50ZXIgdGhlIGRlYnVnZ2VyIGF0IHRoZSBjYWxsaW5nIHN0YWNrIGZyYW1lLiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgIGhhcmQtY29kZSBhIGJyZWFrcG9pbnQgYXQgYSBnaXZlbiBwb2ludCBpbiBhIHByb2dyYW0sIGV2ZW4gaWYgdGhlXG4gICBjb2RlIGlzIG5vdCBvdGhlcndpc2UgYmVpbmcgZGVidWdnZWQgKGUuZy4gd2hlbiBhbiBhc3NlcnRpb25cbiAgIGZhaWxzKS5cblxucGRiLnBvc3RfbW9ydGVtKHRyYWNlYmFjaz1Ob25lKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIGdpdmVuICp0cmFjZWJhY2sqIG9iamVjdC4gIElmIG5vXG4gICAqdHJhY2ViYWNrKiBpcyBnaXZlbiwgaXQgdXNlcyB0aGUgb25lIG9mIHRoZSBleGNlcHRpb24gdGhhdCBpc1xuICAgY3VycmVudGx5IGJlaW5nIGhhbmRsZWQgKGFuIGV4Y2VwdGlvbiBtdXN0IGJlIGJlaW5nIGhhbmRsZWQgaWYgdGhlXG4gICBkZWZhdWx0IGlzIHRvIGJlIHVzZWQpLlxuXG5wZGIucG0oKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIHRyYWNlYmFjayBmb3VuZCBpblxuICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC5cblxuVGhlIGBgcnVuKmBgIGZ1bmN0aW9ucyBhbmQgYGBzZXRfdHJhY2UoKWBgIGFyZSBhbGlhc2VzIGZvclxuaW5zdGFudGlhdGluZyB0aGUgYGBQZGJgYCBjbGFzcyBhbmQgY2FsbGluZyB0aGUgbWV0aG9kIG9mIHRoZSBzYW1lXG5uYW1lLiAgSWYgeW91IHdhbnQgdG8gYWNjZXNzIGZ1cnRoZXIgZmVhdHVyZXMsIHlvdSBoYXZlIHRvIGRvIHRoaXNcbnlvdXJzZWxmOlxuXG5jbGFzcyBjbGFzcyBwZGIuUGRiKGNvbXBsZXRla2V5PVwndGFiXCcsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBza2lwPU5vbmUsIG5vc2lnaW50PUZhbHNlKVxuXG4gICBgYFBkYmBgIGlzIHRoZSBkZWJ1Z2dlciBjbGFzcy5cblxuICAgVGhlICpjb21wbGV0ZWtleSosICpzdGRpbiogYW5kICpzdGRvdXQqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZVxuICAgdW5kZXJseWluZyBgYGNtZC5DbWRgYCBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS5cblxuICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZVxuICAgbW9kdWxlIG5hbWUgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0XG4gICBvcmlnaW5hdGUgaW4gYSBtb2R1bGUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXG5cbiAgIEJ5IGRlZmF1bHQsIFBkYiBzZXRzIGEgaGFuZGxlciBmb3IgdGhlIFNJR0lOVCBzaWduYWwgKHdoaWNoIGlzIHNlbnRcbiAgIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBDdHJsLUMgb24gdGhlIGNvbnNvbGUpIHdoZW4geW91IGdpdmUgYVxuICAgYGBjb250aW51ZWBgIGNvbW1hbmQuIFRoaXMgYWxsb3dzIHlvdSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlclxuICAgYWdhaW4gYnkgcHJlc3NpbmcgQ3RybC1DLiAgSWYgeW91IHdhbnQgUGRiIG5vdCB0byB0b3VjaCB0aGUgU0lHSU5UXG4gICBoYW5kbGVyLCBzZXQgKm5vc2lnaW50KiB0b3QgdHJ1ZS5cblxuICAgRXhhbXBsZSBjYWxsIHRvIGVuYWJsZSB0cmFjaW5nIHdpdGggKnNraXAqOlxuXG4gICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9W1wnZGphbmdvLipcJ10pLnNldF90cmFjZSgpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMTogVGhlICpza2lwKiBhcmd1bWVudC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgKm5vc2lnaW50KiBhcmd1bWVudC4gIFByZXZpb3VzbHksIGEgU0lHSU5UXG4gICBoYW5kbGVyIHdhcyBuZXZlciBzZXQgYnkgUGRiLlxuXG4gICBydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcbiAgIHNldF90cmFjZSgpXG5cbiAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucyBleHBsYWluZWQgYWJvdmUuXG5cblxuRGVidWdnZXIgQ29tbWFuZHNcbj09PT09PT09PT09PT09PT09XG5cblRoZSBjb21tYW5kcyByZWNvZ25pemVkIGJ5IHRoZSBkZWJ1Z2dlciBhcmUgbGlzdGVkIGJlbG93LiAgTW9zdFxuY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIG9uZSBvciB0d28gbGV0dGVycyBhcyBpbmRpY2F0ZWQ7IGUuZy5cbmBgaChlbHApYGAgbWVhbnMgdGhhdCBlaXRoZXIgYGBoYGAgb3IgYGBoZWxwYGAgY2FuIGJlIHVzZWQgdG8gZW50ZXJcbnRoZSBoZWxwIGNvbW1hbmQgKGJ1dCBub3QgYGBoZWBgIG9yIGBgaGVsYGAsIG5vciBgYEhgYCBvciBgYEhlbHBgYCBvclxuYGBIRUxQYGApLiAgQXJndW1lbnRzIHRvIGNvbW1hbmRzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2VcbihzcGFjZXMgb3IgdGFicykuICBPcHRpb25hbCBhcmd1bWVudHMgYXJlIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0c1xuKGBgW11gYCkgaW4gdGhlIGNvbW1hbmQgc3ludGF4OyB0aGUgc3F1YXJlIGJyYWNrZXRzIG11c3Qgbm90IGJlIHR5cGVkLlxuQWx0ZXJuYXRpdmVzIGluIHRoZSBjb21tYW5kIHN5bnRheCBhcmUgc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwgYmFyXG4oYGB8YGApLlxuXG5FbnRlcmluZyBhIGJsYW5rIGxpbmUgcmVwZWF0cyB0aGUgbGFzdCBjb21tYW5kIGVudGVyZWQuICBFeGNlcHRpb246IGlmXG50aGUgbGFzdCBjb21tYW5kIHdhcyBhIGBgbGlzdGBgIGNvbW1hbmQsIHRoZSBuZXh0IDExIGxpbmVzIGFyZSBsaXN0ZWQuXG5cbkNvbW1hbmRzIHRoYXQgdGhlIGRlYnVnZ2VyIGRvZXNuXCd0IHJlY29nbml6ZSBhcmUgYXNzdW1lZCB0byBiZSBQeXRob25cbnN0YXRlbWVudHMgYW5kIGFyZSBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQuICBQeXRob24gc3RhdGVtZW50cyBjYW4gYWxzbyBiZSBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uXG5wb2ludCAoYGAhYGApLiAgVGhpcyBpcyBhIHBvd2VyZnVsIHdheSB0byBpbnNwZWN0IHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZDsgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBjaGFuZ2UgYSB2YXJpYWJsZSBvciBjYWxsIGEgZnVuY3Rpb24uXG5XaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gc3VjaCBhIHN0YXRlbWVudCwgdGhlIGV4Y2VwdGlvbiBuYW1lIGlzXG5wcmludGVkIGJ1dCB0aGUgZGVidWdnZXJcJ3Mgc3RhdGUgaXMgbm90IGNoYW5nZWQuXG5cblRoZSBkZWJ1Z2dlciBzdXBwb3J0cyAqYWxpYXNlcyouICBBbGlhc2VzIGNhbiBoYXZlIHBhcmFtZXRlcnMgd2hpY2hcbmFsbG93cyBvbmUgYSBjZXJ0YWluIGxldmVsIG9mIGFkYXB0YWJpbGl0eSB0byB0aGUgY29udGV4dCB1bmRlclxuZXhhbWluYXRpb24uXG5cbk11bHRpcGxlIGNvbW1hbmRzIG1heSBiZSBlbnRlcmVkIG9uIGEgc2luZ2xlIGxpbmUsIHNlcGFyYXRlZCBieVxuYGA7O2BgLiAgKEEgc2luZ2xlIGBgO2BgIGlzIG5vdCB1c2VkIGFzIGl0IGlzIHRoZSBzZXBhcmF0b3IgZm9yXG5tdWx0aXBsZSBjb21tYW5kcyBpbiBhIGxpbmUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIFB5dGhvbiBwYXJzZXIuKSAgTm9cbmludGVsbGlnZW5jZSBpcyBhcHBsaWVkIHRvIHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzOyB0aGUgaW5wdXQgaXMgc3BsaXRcbmF0IHRoZSBmaXJzdCBgYDs7YGAgcGFpciwgZXZlbiBpZiBpdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgcXVvdGVkXG5zdHJpbmcuXG5cbklmIGEgZmlsZSBgYC5wZGJyY2BgIGV4aXN0cyBpbiB0aGUgdXNlclwncyBob21lIGRpcmVjdG9yeSBvciBpbiB0aGVcbmN1cnJlbnQgZGlyZWN0b3J5LCBpdCBpcyByZWFkIGluIGFuZCBleGVjdXRlZCBhcyBpZiBpdCBoYWQgYmVlbiB0eXBlZFxuYXQgdGhlIGRlYnVnZ2VyIHByb21wdC4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgYWxpYXNlcy4gIElmXG5ib3RoIGZpbGVzIGV4aXN0LCB0aGUgb25lIGluIHRoZSBob21lIGRpcmVjdG9yeSBpcyByZWFkIGZpcnN0IGFuZFxuYWxpYXNlcyBkZWZpbmVkIHRoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBsb2NhbCBmaWxlLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBgYC5wZGJyY2BgIGNhbiBub3cgY29udGFpbiBjb21tYW5kcyB0aGF0XG5jb250aW51ZSBkZWJ1Z2dpbmcsIHN1Y2ggYXMgYGBjb250aW51ZWBgIG9yIGBgbmV4dGBgLiAgUHJldmlvdXNseSxcbnRoZXNlIGNvbW1hbmRzIGhhZCBubyBlZmZlY3QuXG5cbmgoZWxwKSBbY29tbWFuZF1cblxuICAgV2l0aG91dCBhcmd1bWVudCwgcHJpbnQgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLiAgV2l0aCBhXG4gICAqY29tbWFuZCogYXMgYXJndW1lbnQsIHByaW50IGhlbHAgYWJvdXQgdGhhdCBjb21tYW5kLiAgYGBoZWxwIHBkYmBgXG4gICBkaXNwbGF5cyB0aGUgZnVsbCBkb2N1bWVudGF0aW9uICh0aGUgZG9jc3RyaW5nIG9mIHRoZSBgYHBkYmBgXG4gICBtb2R1bGUpLiAgU2luY2UgdGhlICpjb21tYW5kKiBhcmd1bWVudCBtdXN0IGJlIGFuIGlkZW50aWZpZXIsXG4gICBgYGhlbHAgZXhlY2BgIG11c3QgYmUgZW50ZXJlZCB0byBnZXQgaGVscCBvbiB0aGUgYGAhYGAgY29tbWFuZC5cblxudyhoZXJlKVxuXG4gICBQcmludCBhIHN0YWNrIHRyYWNlLCB3aXRoIHRoZSBtb3N0IHJlY2VudCBmcmFtZSBhdCB0aGUgYm90dG9tLiAgQW5cbiAgIGFycm93IGluZGljYXRlcyB0aGUgY3VycmVudCBmcmFtZSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgY29udGV4dCBvZlxuICAgbW9zdCBjb21tYW5kcy5cblxuZChvd24pIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIGRvd24gaW4gdGhlXG4gICBzdGFjayB0cmFjZSAodG8gYSBuZXdlciBmcmFtZSkuXG5cbnUocCkgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgdXAgaW4gdGhlIHN0YWNrXG4gICB0cmFjZSAodG8gYW4gb2xkZXIgZnJhbWUpLlxuXG5iKHJlYWspIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgV2l0aCBhICpsaW5lbm8qIGFyZ3VtZW50LCBzZXQgYSBicmVhayB0aGVyZSBpbiB0aGUgY3VycmVudCBmaWxlLlxuICAgV2l0aCBhICpmdW5jdGlvbiogYXJndW1lbnQsIHNldCBhIGJyZWFrIGF0IHRoZSBmaXJzdCBleGVjdXRhYmxlXG4gICBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24uICBUaGUgbGluZSBudW1iZXIgbWF5IGJlIHByZWZpeGVkXG4gICB3aXRoIGEgZmlsZW5hbWUgYW5kIGEgY29sb24sIHRvIHNwZWNpZnkgYSBicmVha3BvaW50IGluIGFub3RoZXJcbiAgIGZpbGUgKHByb2JhYmx5IG9uZSB0aGF0IGhhc25cJ3QgYmVlbiBsb2FkZWQgeWV0KS4gIFRoZSBmaWxlIGlzXG4gICBzZWFyY2hlZCBvbiBgYHN5cy5wYXRoYGAuICBOb3RlIHRoYXQgZWFjaCBicmVha3BvaW50IGlzIGFzc2lnbmVkIGFcbiAgIG51bWJlciB0byB3aGljaCBhbGwgdGhlIG90aGVyIGJyZWFrcG9pbnQgY29tbWFuZHMgcmVmZXIuXG5cbiAgIElmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQsIGl0IGlzIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC5cblxuICAgV2l0aG91dCBhcmd1bWVudCwgbGlzdCBhbGwgYnJlYWtzLCBpbmNsdWRpbmcgZm9yIGVhY2ggYnJlYWtwb2ludCxcbiAgIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBicmVha3BvaW50IGhhcyBiZWVuIGhpdCwgdGhlIGN1cnJlbnRcbiAgIGlnbm9yZSBjb3VudCwgYW5kIHRoZSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBpZiBhbnkuXG5cbnRicmVhayBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFRlbXBvcmFyeSBicmVha3BvaW50LCB3aGljaCBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpc1xuICAgZmlyc3QgaGl0LiBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYGBicmVha2BgLlxuXG5jbChlYXIpIFtmaWxlbmFtZTpsaW5lbm8gfCBicG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgV2l0aCBhICpmaWxlbmFtZTpsaW5lbm8qIGFyZ3VtZW50LCBjbGVhciBhbGwgdGhlIGJyZWFrcG9pbnRzIGF0XG4gICB0aGlzIGxpbmUuIFdpdGggYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBicmVha3BvaW50IG51bWJlcnMsIGNsZWFyXG4gICB0aG9zZSBicmVha3BvaW50cy4gV2l0aG91dCBhcmd1bWVudCwgY2xlYXIgYWxsIGJyZWFrcyAoYnV0IGZpcnN0XG4gICBhc2sgY29uZmlybWF0aW9uKS5cblxuZGlzYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIERpc2FibGUgdGhlIGJyZWFrcG9pbnRzIGdpdmVuIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2ZcbiAgIGJyZWFrcG9pbnQgbnVtYmVycy4gIERpc2FibGluZyBhIGJyZWFrcG9pbnQgbWVhbnMgaXQgY2Fubm90IGNhdXNlXG4gICB0aGUgcHJvZ3JhbSB0byBzdG9wIGV4ZWN1dGlvbiwgYnV0IHVubGlrZSBjbGVhcmluZyBhIGJyZWFrcG9pbnQsIGl0XG4gICByZW1haW5zIGluIHRoZSBsaXN0IG9mIGJyZWFrcG9pbnRzIGFuZCBjYW4gYmUgKHJlLSllbmFibGVkLlxuXG5lbmFibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBFbmFibGUgdGhlIGJyZWFrcG9pbnRzIHNwZWNpZmllZC5cblxuaWdub3JlIGJwbnVtYmVyIFtjb3VudF1cblxuICAgU2V0IHRoZSBpZ25vcmUgY291bnQgZm9yIHRoZSBnaXZlbiBicmVha3BvaW50IG51bWJlci4gIElmIGNvdW50IGlzXG4gICBvbWl0dGVkLCB0aGUgaWdub3JlIGNvdW50IGlzIHNldCB0byAwLiAgQSBicmVha3BvaW50IGJlY29tZXMgYWN0aXZlXG4gICB3aGVuIHRoZSBpZ25vcmUgY291bnQgaXMgemVyby4gIFdoZW4gbm9uLXplcm8sIHRoZSBjb3VudCBpc1xuICAgZGVjcmVtZW50ZWQgZWFjaCB0aW1lIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQgYW5kIHRoZSBicmVha3BvaW50XG4gICBpcyBub3QgZGlzYWJsZWQgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZS5cblxuY29uZGl0aW9uIGJwbnVtYmVyIFtjb25kaXRpb25dXG5cbiAgIFNldCBhIG5ldyAqY29uZGl0aW9uKiBmb3IgdGhlIGJyZWFrcG9pbnQsIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC4gIElmICpjb25kaXRpb24qXG4gICBpcyBhYnNlbnQsIGFueSBleGlzdGluZyBjb25kaXRpb24gaXMgcmVtb3ZlZDsgaS5lLiwgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG1hZGUgdW5jb25kaXRpb25hbC5cblxuY29tbWFuZHMgW2JwbnVtYmVyXVxuXG4gICBTcGVjaWZ5IGEgbGlzdCBvZiBjb21tYW5kcyBmb3IgYnJlYWtwb2ludCBudW1iZXIgKmJwbnVtYmVyKi4gIFRoZVxuICAgY29tbWFuZHMgdGhlbXNlbHZlcyBhcHBlYXIgb24gdGhlIGZvbGxvd2luZyBsaW5lcy4gIFR5cGUgYSBsaW5lXG4gICBjb250YWluaW5nIGp1c3QgYGBlbmRgYCB0byB0ZXJtaW5hdGUgdGhlIGNvbW1hbmRzLiBBbiBleGFtcGxlOlxuXG4gICAgICAoUGRiKSBjb21tYW5kcyAxXG4gICAgICAoY29tKSBwcmludCBzb21lX3ZhcmlhYmxlXG4gICAgICAoY29tKSBlbmRcbiAgICAgIChQZGIpXG5cbiAgIFRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kIGZvbGxvd1xuICAgaXQgaW1tZWRpYXRlbHkgd2l0aCBgYGVuZGBgOyB0aGF0IGlzLCBnaXZlIG5vIGNvbW1hbmRzLlxuXG4gICBXaXRoIG5vICpicG51bWJlciogYXJndW1lbnQsIGNvbW1hbmRzIHJlZmVycyB0byB0aGUgbGFzdCBicmVha3BvaW50XG4gICBzZXQuXG5cbiAgIFlvdSBjYW4gdXNlIGJyZWFrcG9pbnQgY29tbWFuZHMgdG8gc3RhcnQgeW91ciBwcm9ncmFtIHVwIGFnYWluLlxuICAgU2ltcGx5IHVzZSB0aGUgY29udGludWUgY29tbWFuZCwgb3Igc3RlcCwgb3IgYW55IG90aGVyIGNvbW1hbmQgdGhhdFxuICAgcmVzdW1lcyBleGVjdXRpb24uXG5cbiAgIFNwZWNpZnlpbmcgYW55IGNvbW1hbmQgcmVzdW1pbmcgZXhlY3V0aW9uIChjdXJyZW50bHkgY29udGludWUsXG4gICBzdGVwLCBuZXh0LCByZXR1cm4sIGp1bXAsIHF1aXQgYW5kIHRoZWlyIGFiYnJldmlhdGlvbnMpIHRlcm1pbmF0ZXNcbiAgIHRoZSBjb21tYW5kIGxpc3QgKGFzIGlmIHRoYXQgY29tbWFuZCB3YXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnlcbiAgIGVuZCkuIFRoaXMgaXMgYmVjYXVzZSBhbnkgdGltZSB5b3UgcmVzdW1lIGV4ZWN1dGlvbiAoZXZlbiB3aXRoIGFcbiAgIHNpbXBsZSBuZXh0IG9yIHN0ZXApLCB5b3UgbWF5IGVuY291bnRlciBhbm90aGVyIGJyZWFrcG9pbnQtLXdoaWNoXG4gICBjb3VsZCBoYXZlIGl0cyBvd24gY29tbWFuZCBsaXN0LCBsZWFkaW5nIHRvIGFtYmlndWl0aWVzIGFib3V0IHdoaWNoXG4gICBsaXN0IHRvIGV4ZWN1dGUuXG5cbiAgIElmIHlvdSB1c2UgdGhlIFwnc2lsZW50XCcgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBsaXN0LCB0aGUgdXN1YWxcbiAgIG1lc3NhZ2UgYWJvdXQgc3RvcHBpbmcgYXQgYSBicmVha3BvaW50IGlzIG5vdCBwcmludGVkLiAgVGhpcyBtYXkgYmVcbiAgIGRlc2lyYWJsZSBmb3IgYnJlYWtwb2ludHMgdGhhdCBhcmUgdG8gcHJpbnQgYSBzcGVjaWZpYyBtZXNzYWdlIGFuZFxuICAgdGhlbiBjb250aW51ZS4gIElmIG5vbmUgb2YgdGhlIG90aGVyIGNvbW1hbmRzIHByaW50IGFueXRoaW5nLCB5b3VcbiAgIHNlZSBubyBzaWduIHRoYXQgdGhlIGJyZWFrcG9pbnQgd2FzIHJlYWNoZWQuXG5cbnModGVwKVxuXG4gICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uXG4gICAoZWl0aGVyIGluIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb3Igb24gdGhlIG5leHQgbGluZSBpbiB0aGVcbiAgIGN1cnJlbnQgZnVuY3Rpb24pLlxuXG5uKGV4dClcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXNcbiAgIHJlYWNoZWQgb3IgaXQgcmV0dXJucy4gIChUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBgbmV4dGBgIGFuZFxuICAgYGBzdGVwYGAgaXMgdGhhdCBgYHN0ZXBgYCBzdG9wcyBpbnNpZGUgYSBjYWxsZWQgZnVuY3Rpb24sIHdoaWxlXG4gICBgYG5leHRgYCBleGVjdXRlcyBjYWxsZWQgZnVuY3Rpb25zIGF0IChuZWFybHkpIGZ1bGwgc3BlZWQsIG9ubHlcbiAgIHN0b3BwaW5nIGF0IHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uKVxuXG51bnQoaWwpIFtsaW5lbm9dXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lIGlzIHJlYWNoZWQuXG5cbiAgIFdpdGggYSBsaW5lIG51bWJlciwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIGEgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIG9yIGVxdWFsIHRvIHRoYXQgaXMgcmVhY2hlZC4gIEluIGJvdGggY2FzZXMsIGFsc28gc3RvcCB3aGVuXG4gICB0aGUgY3VycmVudCBmcmFtZSByZXR1cm5zLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBBbGxvdyBnaXZpbmcgYW4gZXhwbGljaXQgbGluZSBudW1iZXIuXG5cbnIoZXR1cm4pXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgY3VycmVudCBmdW5jdGlvbiByZXR1cm5zLlxuXG5jKG9udChpbnVlKSlcblxuICAgQ29udGludWUgZXhlY3V0aW9uLCBvbmx5IHN0b3Agd2hlbiBhIGJyZWFrcG9pbnQgaXMgZW5jb3VudGVyZWQuXG5cbmoodW1wKSBsaW5lbm9cblxuICAgU2V0IHRoZSBuZXh0IGxpbmUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiAgT25seSBhdmFpbGFibGUgaW4gdGhlXG4gICBib3R0b20tbW9zdCBmcmFtZS4gIFRoaXMgbGV0cyB5b3UganVtcCBiYWNrIGFuZCBleGVjdXRlIGNvZGUgYWdhaW4sXG4gICBvciBqdW1wIGZvcndhcmQgdG8gc2tpcCBjb2RlIHRoYXQgeW91IGRvblwndCB3YW50IHRvIHJ1bi5cblxuICAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgbm90IGFsbCBqdW1wcyBhcmUgYWxsb3dlZCAtLSBmb3IgaW5zdGFuY2VcbiAgIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBqdW1wIGludG8gdGhlIG1pZGRsZSBvZiBhIGBgZm9yYGAgbG9vcCBvciBvdXRcbiAgIG9mIGEgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5sKGlzdCkgW2ZpcnN0WywgbGFzdF1dXG5cbiAgIExpc3Qgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZpbGUuICBXaXRob3V0IGFyZ3VtZW50cywgbGlzdCAxMVxuICAgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUgb3IgY29udGludWUgdGhlIHByZXZpb3VzIGxpc3RpbmcuXG4gICBXaXRoIGBgLmBgIGFzIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lLlxuICAgV2l0aCBvbmUgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIGF0IHRoYXQgbGluZS4gIFdpdGggdHdvXG4gICBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3NcbiAgIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvdW50LlxuXG4gICBUaGUgY3VycmVudCBsaW5lIGluIHRoZSBjdXJyZW50IGZyYW1lIGlzIGluZGljYXRlZCBieSBgYC0+YGAuICBJZlxuICAgYW4gZXhjZXB0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkLCB0aGUgbGluZSB3aGVyZSB0aGUgZXhjZXB0aW9uIHdhc1xuICAgb3JpZ2luYWxseSByYWlzZWQgb3IgcHJvcGFnYXRlZCBpcyBpbmRpY2F0ZWQgYnkgYGA+PmBgLCBpZiBpdFxuICAgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGxpbmUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlIGBgPj5gYCBtYXJrZXIuXG5cbmxsIHwgbG9uZ2xpc3RcblxuICAgTGlzdCBhbGwgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLlxuICAgSW50ZXJlc3RpbmcgbGluZXMgYXJlIG1hcmtlZCBhcyBmb3IgYGBsaXN0YGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYShyZ3MpXG5cbiAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLlxuXG5wKHJpbnQpIGV4cHJlc3Npb25cblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHNcbiAgIHZhbHVlLlxuXG5wcCBleHByZXNzaW9uXG5cbiAgIExpa2UgdGhlIGBgcHJpbnRgYCBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzXG4gICBwcmV0dHktcHJpbnRlZCB1c2luZyB0aGUgYGBwcHJpbnRgYCBtb2R1bGUuXG5cbndoYXRpcyBleHByZXNzaW9uXG5cbiAgIFByaW50IHRoZSB0eXBlIG9mIHRoZSAqZXhwcmVzc2lvbiouXG5cbnNvdXJjZSBleHByZXNzaW9uXG5cbiAgIFRyeSB0byBnZXQgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIGRpc3BsYXkgaXQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lXG4gICBleGVjdXRpb24gc3RvcHMgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgbGlzdCBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnVuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRG8gbm90IGRpc3BsYXkgdGhlIGV4cHJlc3Npb24gYW55IG1vcmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGNsZWFyIGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuaW50ZXJhY3RcblxuICAgU3RhcnQgYW4gaW50ZXJhdGl2ZSBpbnRlcnByZXRlciAodXNpbmcgdGhlIGBgY29kZWBgIG1vZHVsZSkgd2hvc2VcbiAgIGdsb2JhbCBuYW1lc3BhY2UgY29udGFpbnMgYWxsIHRoZSAoZ2xvYmFsIGFuZCBsb2NhbCkgbmFtZXMgZm91bmQgaW5cbiAgIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmFsaWFzIFtuYW1lIFtjb21tYW5kXV1cblxuICAgQ3JlYXRlIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZFxuICAgbXVzdCAqbm90KiBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZVxuICAgaW5kaWNhdGVkIGJ5IGBgJTFgYCwgYGAlMmBgLCBhbmQgc28gb24sIHdoaWxlIGBgJSpgYCBpcyByZXBsYWNlZCBieVxuICAgYWxsIHRoZSBwYXJhbWV0ZXJzLiBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUgY3VycmVudCBhbGlhcyBmb3JcbiAgICpuYW1lKiBpcyBzaG93bi4gSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC5cblxuICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5XG4gICB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmVcbiAgIG92ZXJyaWRkZW4gYnkgYWxpYXNlcy4gIFN1Y2ggYSBjb21tYW5kIGlzIHRoZW4gaGlkZGVuIHVudGlsIHRoZVxuICAgYWxpYXMgaXMgcmVtb3ZlZC4gIEFsaWFzaW5nIGlzIHJlY3Vyc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdFxuICAgYWxvbmUuXG5cbiAgIEFzIGFuIGV4YW1wbGUsIGhlcmUgYXJlIHR3byB1c2VmdWwgYWxpYXNlcyAoZXNwZWNpYWxseSB3aGVuIHBsYWNlZFxuICAgaW4gdGhlIGBgLnBkYnJjYGAgZmlsZSk6XG5cbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IilcbiAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQoIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10pXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyBpbiBzZWxmXG4gICAgICBhbGlhcyBwcyBwaSBzZWxmXG5cbnVuYWxpYXMgbmFtZVxuXG4gICBEZWxldGUgdGhlIHNwZWNpZmllZCBhbGlhcy5cblxuISBzdGF0ZW1lbnRcblxuICAgRXhlY3V0ZSB0aGUgKG9uZS1saW5lKSAqc3RhdGVtZW50KiBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudFxuICAgc3RhY2sgZnJhbWUuIFRoZSBleGNsYW1hdGlvbiBwb2ludCBjYW4gYmUgb21pdHRlZCB1bmxlc3MgdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBzdGF0ZW1lbnQgcmVzZW1ibGVzIGEgZGVidWdnZXIgY29tbWFuZC4gIFRvIHNldCBhXG4gICBnbG9iYWwgdmFyaWFibGUsIHlvdSBjYW4gcHJlZml4IHRoZSBhc3NpZ25tZW50IGNvbW1hbmQgd2l0aCBhXG4gICBgYGdsb2JhbGBgIHN0YXRlbWVudCBvbiB0aGUgc2FtZSBsaW5lLCBlLmcuOlxuXG4gICAgICAoUGRiKSBnbG9iYWwgbGlzdF9vcHRpb25zOyBsaXN0X29wdGlvbnMgPSBbXCctbFwnXVxuICAgICAgKFBkYilcblxucnVuIFthcmdzIC4uLl1cbnJlc3RhcnQgW2FyZ3MgLi4uXVxuXG4gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gIElmIGFuIGFyZ3VtZW50IGlzIHN1cHBsaWVkLFxuICAgaXQgaXMgc3BsaXQgd2l0aCBgYHNobGV4YGAgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3XG4gICBgYHN5cy5hcmd2YGAuIEhpc3RvcnksIGJyZWFrcG9pbnRzLCBhY3Rpb25zIGFuZCBkZWJ1Z2dlciBvcHRpb25zXG4gICBhcmUgcHJlc2VydmVkLiBgYHJlc3RhcnRgYCBpcyBhbiBhbGlhcyBmb3IgYGBydW5gYC5cblxucSh1aXQpXG5cbiAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuICBUaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoZXRoZXIgYSBmcmFtZSBpcyBjb25zaWRlcmVkIHRvIG9yaWdpbmF0ZSBpbiBhIGNlcnRhaW4gbW9kdWxlIGlzXG4gICAgZGV0ZXJtaW5lZCBieSB0aGUgYGBfX25hbWVfX2BgIGluIHRoZSBmcmFtZSBnbG9iYWxzLlxuJywKKyAnY3VzdG9taXphdGlvbic6ICdcbkJhc2ljIGN1c3RvbWl6YXRpb25cbioqKioqKioqKioqKioqKioqKipcblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfaW5mbygpWzJdYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuIHRoZSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXNcbiAgICAgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnY2BgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHRvcGljLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gYGBzeXMuc3RkZXJyYGAgaW5zdGVhZC5cbiAgICAgQWxzbywgd2hlbiBgYF9fZGVsX18oKWBgIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZCB0byBtYWludGFpblxuICAgICBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSwgUHl0aG9uXG4gICAgIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHJlcHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlXG4gICAib2ZmaWNpYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsXG4gICB0aGlzIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWRcbiAgIHRvIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICBgYDwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj5gYCBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgYGBfX3JlcHJfXygpYGBcbiAgIGJ1dCBub3QgYGBfX3N0cl9fKClgYCwgdGhlbiBgYF9fcmVwcl9fKClgYCBpcyBhbHNvIHVzZWQgd2hlbiBhblxuICAgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXNcbiAgIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBgYHN0cihvYmplY3QpYGAgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBmb3JtYXQoKWBgXG4gICBhbmQgYGBwcmludCgpYGAgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBvciBuaWNlbHkgcHJpbnRhYmxlXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgICpzdHJpbmcqIG9iamVjdC5cblxuICAgVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBgb2JqZWN0Ll9fcmVwcl9fKClgYCBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0IGBgX19zdHJfXygpYGAgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlIGBgb2JqZWN0YGBcbiAgIGNhbGxzIGBgb2JqZWN0Ll9fcmVwcl9fKClgYC5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBieXRlcygpYGAgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhIGBgYnl0ZXNgYCBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgZm9ybWF0KClgYCBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBvZiBjbGFzcyBgYHN0cmBgKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXNcbiAgIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpcyB1cFxuICAgdG8gdGhlIHR5cGUgaW1wbGVtZW50aW5nIGBgX19mb3JtYXRfXygpYGAsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzXG4gICB3aWxsIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yXG4gICB1c2UgYSBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6IGBgeDx5YGAgY2FsbHMgYGB4Ll9fbHRfXyh5KWBgLCBgYHg8PXlgYCBjYWxsc1xuICAgYGB4Ll9fbGVfXyh5KWBgLCBgYHg9PXlgYCBjYWxscyBgYHguX19lcV9fKHkpYGAsIGBgeCE9eWBgIGNhbGxzXG4gICBgYHguX19uZV9fKHkpYGAsIGBgeD55YGAgY2FsbHMgYGB4Ll9fZ3RfXyh5KWBgLCBhbmQgYGB4Pj15YGAgY2FsbHNcbiAgIGBgeC5fX2dlX18oeSlgYC5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvblxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhXG4gICBnaXZlbiBwYWlyIG9mIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgYGBGYWxzZWBgIGFuZCBgYFRydWVgYCBhcmVcbiAgIHJldHVybmVkIGZvciBhIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW5cbiAgIHJldHVybiBhbnkgdmFsdWUsIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0IChlLmcuLCBpbiB0aGUgY29uZGl0aW9uIG9mIGFuIGBgaWZgYCBzdGF0ZW1lbnQpLFxuICAgUHl0aG9uIHdpbGwgY2FsbCBgYGJvb2woKWBgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdFxuICAgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgYGB4PT15YGAgZG9lcyBub3QgaW1wbHkgdGhhdCBgYHghPXlgYCBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nIGBgX19lcV9fKClgYCwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgYGBfX25lX18oKWBgIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZVxuICAgdGhlIHBhcmFncmFwaCBvbiBgYF9faGFzaF9fKClgYCBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb25cbiAgIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uXG4gICBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgYGBfX2x0X18oKWBgIGFuZCBgYF9fZ3RfXygpYGAgYXJlIGVhY2hcbiAgIG90aGVyXCdzIHJlZmxlY3Rpb24sIGBgX19sZV9fKClgYCBhbmQgYGBfX2dlX18oKWBgIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCBhbmQgYGBfX2VxX18oKWBgIGFuZCBgYF9fbmVfXygpYGAgYXJlIHRoZWlyIG93blxuICAgcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSBgYGZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpYGAuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gYGBoYXNoKClgYCBhbmQgZm9yIG9wZXJhdGlvbnMgb25cbiAgIG1lbWJlcnMgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyBgYHNldGBgLCBgYGZyb3plbnNldGBgLCBhbmRcbiAgIGBgZGljdGBgLiAgYGBfX2hhc2hfXygpYGAgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHlcbiAgIHJlcXVpcmVkIHByb3BlcnR5IGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWVcbiAgIGhhc2ggdmFsdWU7IGl0IGlzIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmdcbiAgIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2ggdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXRcbiAgIGFsc28gcGxheSBhIHBhcnQgaW4gY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBOb3RlOiBgYGhhc2goKWBgIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3MgY3VzdG9tXG4gICAgIGBgX19oYXNoX18oKWBgIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhIGBgUHlfc3NpemVfdGBgLiAgVGhpcyBpc1xuICAgICB0eXBpY2FsbHkgOCBieXRlcyBvbiA2NC1iaXQgYnVpbGRzIGFuZCA0IGJ5dGVzIG9uIDMyLWJpdCBidWlsZHMuXG4gICAgIElmIGFuIG9iamVjdFwncyAgIGBgX19oYXNoX18oKWBgIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkcyBvZlxuICAgICBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGwgc3VwcG9ydGVkXG4gICAgIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCBgYHB5dGhvbiAtYyAiaW1wb3J0IHN5cztcbiAgICAgcHJpbnQoc3lzLmhhc2hfaW5mby53aWR0aCkiYGBcblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSBgYF9faGFzaF9fKClgYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzXG4gICBgYF9fZXFfXygpYGAgYnV0IG5vdCBgYF9faGFzaF9fKClgYCwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZVxuICAgdXNhYmxlIGFzIGl0ZW1zIGluIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBtdXRhYmxlIG9iamVjdHMgYW5kIGltcGxlbWVudHMgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCwgaXQgc2hvdWxkXG4gICBub3QgaW1wbGVtZW50IGBgX19oYXNoX18oKWBgLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGVcbiAgIGNvbGxlY3Rpb25zIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZVxuICAgb2JqZWN0XCdzIGhhc2ggdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlIGBgX19lcV9fKClgYCBhbmQgYGBfX2hhc2hfXygpYGAgbWV0aG9kc1xuICAgYnkgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgYGB4Ll9faGFzaF9fKClgYCByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHN1Y2hcbiAgIHRoYXQgYGB4ID09IHlgYCBpbXBsaWVzIGJvdGggdGhhdCBgYHggaXMgeWBgIGFuZCBgYGhhc2goeCkgPT1cbiAgIGhhc2goeSlgYC5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgYW5kIGRvZXMgbm90IGRlZmluZVxuICAgYGBfX2hhc2hfXygpYGAgd2lsbCBoYXZlIGl0cyBgYF9faGFzaF9fKClgYCBpbXBsaWNpdGx5IHNldCB0b1xuICAgYGBOb25lYGAuICBXaGVuIHRoZSBgYF9faGFzaF9fKClgYCBtZXRob2Qgb2YgYSBjbGFzcyBpcyBgYE5vbmVgYCxcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3Mgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSBgYFR5cGVFcnJvcmBgIHdoZW5cbiAgIGEgcHJvZ3JhbSBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlXG4gICBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaixcbiAgIGNvbGxlY3Rpb25zLkhhc2hhYmxlYGApLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiBgYF9faGFzaF9fKClgYCBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGVcbiAgIGludGVycHJldGVyIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyBgYF9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX19gYC5cblxuICAgSWYgYSBjbGFzcyB0aGF0IGRvZXMgbm90IG92ZXJyaWRlIGBgX19lcV9fKClgYCB3aXNoZXMgdG8gc3VwcHJlc3NcbiAgIGhhc2ggc3VwcG9ydCwgaXQgc2hvdWxkIGluY2x1ZGUgYGBfX2hhc2hfXyA9IE5vbmVgYCBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duIGBgX19oYXNoX18oKWBgIHRoYXRcbiAgIGV4cGxpY2l0bHkgcmFpc2VzIGEgYGBUeXBlRXJyb3JgYCB3b3VsZCBiZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkXG4gICBhcyBoYXNoYWJsZSBieSBhbiBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSlgYCBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgYGBfX2hhc2hfXygpYGAgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kIGRhdGV0aW1lXG4gICAgIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSByYW5kb20gdmFsdWUuXG4gICAgIEFsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvblxuICAgICBwcm9jZXNzLCB0aGV5IGFyZSBub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZlxuICAgICBQeXRob24uVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBhIGRlbmlhbC1cbiAgICAgb2Ytc2VydmljZSBjYXVzZWQgYnkgY2FyZWZ1bGx5LWNob3NlbiBpbnB1dHMgdGhhdCBleHBsb2l0IHRoZVxuICAgICB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIG9mIGEgZGljdCBpbnNlcnRpb24sIE8obl4yKSBjb21wbGV4aXR5LlxuICAgICBTZWUgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sIGZvclxuICAgICBkZXRhaWxzLkNoYW5naW5nIGhhc2ggdmFsdWVzIGFmZmVjdHMgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZlxuICAgICBkaWN0cywgc2V0cyBhbmQgb3RoZXIgbWFwcGluZ3MuICBQeXRob24gaGFzIG5ldmVyIG1hZGUgZ3VhcmFudGVlc1xuICAgICBhYm91dCB0aGlzIG9yZGVyaW5nIChhbmQgaXQgdHlwaWNhbGx5IHZhcmllcyBiZXR3ZWVuIDMyLWJpdCBhbmRcbiAgICAgNjQtYml0IGJ1aWxkcykuU2VlIGFsc28gYGBQWVRIT05IQVNIU0VFRGBgLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBIYXNoIHJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5vYmplY3QuX19ib29sX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICBgYGJvb2woKWBgOyBzaG91bGQgcmV0dXJuIGBgRmFsc2VgYCBvciBgYFRydWVgYC4gIFdoZW4gdGhpcyBtZXRob2RcbiAgIGlzIG5vdCBkZWZpbmVkLCBgYF9fbGVuX18oKWBgIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZVxuICAgb2JqZWN0IGlzIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzXG4gICBkZWZpbmVzIG5laXRoZXIgYGBfX2xlbl9fKClgYCBub3IgYGBfX2Jvb2xfXygpYGAsIGFsbCBpdHMgaW5zdGFuY2VzXG4gICBhcmUgY29uc2lkZXJlZCB0cnVlLlxuJywKKyAnZGVidWdnZXInOiAnXG5gYHBkYmBgIC0tLSBUaGUgUHl0aG9uIERlYnVnZ2VyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBtb2R1bGUgYGBwZGJgYCBkZWZpbmVzIGFuIGludGVyYWN0aXZlIHNvdXJjZSBjb2RlIGRlYnVnZ2VyIGZvclxuUHl0aG9uIHByb2dyYW1zLiAgSXQgc3VwcG9ydHMgc2V0dGluZyAoY29uZGl0aW9uYWwpIGJyZWFrcG9pbnRzIGFuZFxuc2luZ2xlIHN0ZXBwaW5nIGF0IHRoZSBzb3VyY2UgbGluZSBsZXZlbCwgaW5zcGVjdGlvbiBvZiBzdGFjayBmcmFtZXMsXG5zb3VyY2UgY29kZSBsaXN0aW5nLCBhbmQgZXZhbHVhdGlvbiBvZiBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgaW4gdGhlXG5jb250ZXh0IG9mIGFueSBzdGFjayBmcmFtZS4gIEl0IGFsc28gc3VwcG9ydHMgcG9zdC1tb3J0ZW0gZGVidWdnaW5nXG5hbmQgY2FuIGJlIGNhbGxlZCB1bmRlciBwcm9ncmFtIGNvbnRyb2wuXG5cblRoZSBkZWJ1Z2dlciBpcyBleHRlbnNpYmxlIC0tIGl0IGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgdGhlIGNsYXNzXG5gYFBkYmBgLiBUaGlzIGlzIGN1cnJlbnRseSB1bmRvY3VtZW50ZWQgYnV0IGVhc2lseSB1bmRlcnN0b29kIGJ5XG5yZWFkaW5nIHRoZSBzb3VyY2UuICBUaGUgZXh0ZW5zaW9uIGludGVyZmFjZSB1c2VzIHRoZSBtb2R1bGVzIGBgYmRiYGBcbmFuZCBgYGNtZGBgLlxuXG5UaGUgZGVidWdnZXJcJ3MgcHJvbXB0IGlzIGBgKFBkYilgYC4gVHlwaWNhbCB1c2FnZSB0byBydW4gYSBwcm9ncmFtXG51bmRlciBjb250cm9sIG9mIHRoZSBkZWJ1Z2dlciBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBwZGIucnVuKFwnbXltb2R1bGUudGVzdCgpXCcpXG4gICA+IDxzdHJpbmc+KDApPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgIE5hbWVFcnJvcjogXCdzcGFtXCdcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IFRhYi1jb21wbGV0aW9uIHZpYSB0aGUgYGByZWFkbGluZWBgIG1vZHVsZSBpc1xuYXZhaWxhYmxlIGZvciBjb21tYW5kcyBhbmQgY29tbWFuZCBhcmd1bWVudHMsIGUuZy4gdGhlIGN1cnJlbnQgZ2xvYmFsXG5hbmQgbG9jYWwgbmFtZXMgYXJlIG9mZmVyZWQgYXMgYXJndW1lbnRzIG9mIHRoZSBgYHBgYCBjb21tYW5kLlxuXG5gYHBkYi5weWBgIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy5cbkZvciBleGFtcGxlOlxuXG4gICBweXRob24zIC1tIHBkYiBteXNjcmlwdC5weVxuXG5XaGVuIGludm9rZWQgYXMgYSBzY3JpcHQsIHBkYiB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgcG9zdC1tb3J0ZW1cbmRlYnVnZ2luZyBpZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBleGl0cyBhYm5vcm1hbGx5LiAgQWZ0ZXIgcG9zdC1cbm1vcnRlbSBkZWJ1Z2dpbmcgKG9yIGFmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGxcbnJlc3RhcnQgdGhlIHByb2dyYW0uICBBdXRvbWF0aWMgcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiXCdzIHN0YXRlIChzdWNoXG5hcyBicmVha3BvaW50cykgYW5kIGluIG1vc3QgY2FzZXMgaXMgbW9yZSB1c2VmdWwgdGhhbiBxdWl0dGluZyB0aGVcbmRlYnVnZ2VyIHVwb24gcHJvZ3JhbVwncyBleGl0LlxuXG5OZXcgaW4gdmVyc2lvbiAzLjI6IGBgcGRiLnB5YGAgbm93IGFjY2VwdHMgYSBgYC1jYGAgb3B0aW9uIHRoYXRcbmV4ZWN1dGVzIGNvbW1hbmRzIGFzIGlmIGdpdmVuIGluIGEgYGAucGRicmNgYCBmaWxlLCBzZWUgKkRlYnVnZ2VyXG5Db21tYW5kcyouXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlIGBgY29udGludWVgYCBjb21tYW5kLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBpbnNwZWN0IGEgY3Jhc2hlZCBwcm9ncmFtIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IG15bW9kdWxlLnRlc3QoKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDQsIGluIHRlc3RcbiAgICAgICB0ZXN0MigpXG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDMsIGluIHRlc3QyXG4gICAgICAgcHJpbnQoc3BhbSlcbiAgIE5hbWVFcnJvcjogc3BhbVxuICAgPj4+IHBkYi5wbSgpXG4gICA+IC4vbXltb2R1bGUucHkoMyl0ZXN0MigpXG4gICAtPiBwcmludChzcGFtKVxuICAgKFBkYilcblxuVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXJcbmluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheTpcblxucGRiLnJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KSB1bmRlclxuICAgZGVidWdnZXIgY29udHJvbC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXNcbiAgIGV4ZWN1dGVkOyB5b3UgY2FuIHNldCBicmVha3BvaW50cyBhbmQgdHlwZSBgYGNvbnRpbnVlYGAsIG9yIHlvdSBjYW5cbiAgIHN0ZXAgdGhyb3VnaCB0aGUgc3RhdGVtZW50IHVzaW5nIGBgc3RlcGBgIG9yIGBgbmV4dGBgIChhbGwgdGhlc2VcbiAgIGNvbW1hbmRzIGFyZSBleHBsYWluZWQgYmVsb3cpLiAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBhbmQgKmxvY2FscypcbiAgIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBleGVjdXRlZDsgYnlcbiAgIGRlZmF1bHQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIG1vZHVsZSBgYF9fbWFpbl9fYGAgaXMgdXNlZC4gIChTZWVcbiAgIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUgYnVpbHQtaW4gYGBleGVjKClgYCBvciBgYGV2YWwoKWBgXG4gICBmdW5jdGlvbnMuKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KVxuICAgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4gYGBydW5ldmFsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zIHRoZVxuICAgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvXG4gICBgYHJ1bigpYGAuXG5cbnBkYi5ydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuXG4gICBDYWxsIHRoZSAqZnVuY3Rpb24qIChhIGZ1bmN0aW9uIG9yIG1ldGhvZCBvYmplY3QsIG5vdCBhIHN0cmluZylcbiAgIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gIFdoZW4gYGBydW5jYWxsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbSh0cmFjZWJhY2s9Tm9uZSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuXG5cblRoZSBgYHJ1bipgYCBmdW5jdGlvbnMgYW5kIGBgc2V0X3RyYWNlKClgYCBhcmUgYWxpYXNlcyBmb3Jcbmluc3RhbnRpYXRpbmcgdGhlIGBgUGRiYGAgY2xhc3MgYW5kIGNhbGxpbmcgdGhlIG1ldGhvZCBvZiB0aGUgc2FtZVxubmFtZS4gIElmIHlvdSB3YW50IHRvIGFjY2VzcyBmdXJ0aGVyIGZlYXR1cmVzLCB5b3UgaGF2ZSB0byBkbyB0aGlzXG55b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lLCBub3NpZ2ludD1GYWxzZSlcblxuICAgYGBQZGJgYCBpcyB0aGUgZGVidWdnZXIgY2xhc3MuXG5cbiAgIFRoZSAqY29tcGxldGVrZXkqLCAqc3RkaW4qIGFuZCAqc3Rkb3V0KiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGVcbiAgIHVuZGVybHlpbmcgYGBjbWQuQ21kYGAgY2xhc3M7IHNlZSB0aGUgZGVzY3JpcHRpb24gdGhlcmUuXG5cbiAgIFRoZSAqc2tpcCogYXJndW1lbnQsIGlmIGdpdmVuLCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGdsb2Itc3R5bGVcbiAgIG1vZHVsZSBuYW1lIHBhdHRlcm5zLiAgVGhlIGRlYnVnZ2VyIHdpbGwgbm90IHN0ZXAgaW50byBmcmFtZXMgdGhhdFxuICAgb3JpZ2luYXRlIGluIGEgbW9kdWxlIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgcGF0dGVybnMuIFsxXVxuXG4gICBCeSBkZWZhdWx0LCBQZGIgc2V0cyBhIGhhbmRsZXIgZm9yIHRoZSBTSUdJTlQgc2lnbmFsICh3aGljaCBpcyBzZW50XG4gICB3aGVuIHRoZSB1c2VyIHByZXNzZXMgQ3RybC1DIG9uIHRoZSBjb25zb2xlKSB3aGVuIHlvdSBnaXZlIGFcbiAgIGBgY29udGludWVgYCBjb21tYW5kLiBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXJcbiAgIGFnYWluIGJ5IHByZXNzaW5nIEN0cmwtQy4gIElmIHlvdSB3YW50IFBkYiBub3QgdG8gdG91Y2ggdGhlIFNJR0lOVFxuICAgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuXG5cbiAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjpcblxuICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVtcJ2RqYW5nby4qXCddKS5zZXRfdHJhY2UoKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjE6IFRoZSAqc2tpcCogYXJndW1lbnQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlICpub3NpZ2ludCogYXJndW1lbnQuICBQcmV2aW91c2x5LCBhIFNJR0lOVFxuICAgaGFuZGxlciB3YXMgbmV2ZXIgc2V0IGJ5IFBkYi5cblxuICAgcnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG4gICBzZXRfdHJhY2UoKVxuXG4gICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLlxuXG5cbkRlYnVnZ2VyIENvbW1hbmRzXG49PT09PT09PT09PT09PT09PVxuXG5UaGUgY29tbWFuZHMgcmVjb2duaXplZCBieSB0aGUgZGVidWdnZXIgYXJlIGxpc3RlZCBiZWxvdy4gIE1vc3RcbmNvbW1hbmRzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byBvbmUgb3IgdHdvIGxldHRlcnMgYXMgaW5kaWNhdGVkOyBlLmcuXG5gYGgoZWxwKWBgIG1lYW5zIHRoYXQgZWl0aGVyIGBgaGBgIG9yIGBgaGVscGBgIGNhbiBiZSB1c2VkIHRvIGVudGVyXG50aGUgaGVscCBjb21tYW5kIChidXQgbm90IGBgaGVgYCBvciBgYGhlbGBgLCBub3IgYGBIYGAgb3IgYGBIZWxwYGAgb3JcbmBgSEVMUGBgKS4gIEFyZ3VtZW50cyB0byBjb21tYW5kcyBtdXN0IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlXG4oc3BhY2VzIG9yIHRhYnMpLiAgT3B0aW9uYWwgYXJndW1lbnRzIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHNcbihgYFtdYGApIGluIHRoZSBjb21tYW5kIHN5bnRheDsgdGhlIHNxdWFyZSBicmFja2V0cyBtdXN0IG5vdCBiZSB0eXBlZC5cbkFsdGVybmF0aXZlcyBpbiB0aGUgY29tbWFuZCBzeW50YXggYXJlIHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsIGJhclxuKGBgfGBgKS5cblxuRW50ZXJpbmcgYSBibGFuayBsaW5lIHJlcGVhdHMgdGhlIGxhc3QgY29tbWFuZCBlbnRlcmVkLiAgRXhjZXB0aW9uOiBpZlxudGhlIGxhc3QgY29tbWFuZCB3YXMgYSBgYGxpc3RgYCBjb21tYW5kLCB0aGUgbmV4dCAxMSBsaW5lcyBhcmUgbGlzdGVkLlxuXG5Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2VzblwndCByZWNvZ25pemUgYXJlIGFzc3VtZWQgdG8gYmUgUHl0aG9uXG5zdGF0ZW1lbnRzIGFuZCBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkLiAgUHl0aG9uIHN0YXRlbWVudHMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvblxucG9pbnQgKGBgIWBgKS4gIFRoaXMgaXMgYSBwb3dlcmZ1bCB3YXkgdG8gaW5zcGVjdCB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQ7IGl0IGlzIGV2ZW4gcG9zc2libGUgdG8gY2hhbmdlIGEgdmFyaWFibGUgb3IgY2FsbCBhIGZ1bmN0aW9uLlxuV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHN1Y2ggYSBzdGF0ZW1lbnQsIHRoZSBleGNlcHRpb24gbmFtZSBpc1xucHJpbnRlZCBidXQgdGhlIGRlYnVnZ2VyXCdzIHN0YXRlIGlzIG5vdCBjaGFuZ2VkLlxuXG5UaGUgZGVidWdnZXIgc3VwcG9ydHMgKmFsaWFzZXMqLiAgQWxpYXNlcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzIHdoaWNoXG5hbGxvd3Mgb25lIGEgY2VydGFpbiBsZXZlbCBvZiBhZGFwdGFiaWxpdHkgdG8gdGhlIGNvbnRleHQgdW5kZXJcbmV4YW1pbmF0aW9uLlxuXG5NdWx0aXBsZSBjb21tYW5kcyBtYXkgYmUgZW50ZXJlZCBvbiBhIHNpbmdsZSBsaW5lLCBzZXBhcmF0ZWQgYnlcbmBgOztgYC4gIChBIHNpbmdsZSBgYDtgYCBpcyBub3QgdXNlZCBhcyBpdCBpcyB0aGUgc2VwYXJhdG9yIGZvclxubXVsdGlwbGUgY29tbWFuZHMgaW4gYSBsaW5lIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBQeXRob24gcGFyc2VyLikgIE5vXG5pbnRlbGxpZ2VuY2UgaXMgYXBwbGllZCB0byBzZXBhcmF0aW5nIHRoZSBjb21tYW5kczsgdGhlIGlucHV0IGlzIHNwbGl0XG5hdCB0aGUgZmlyc3QgYGA7O2BgIHBhaXIsIGV2ZW4gaWYgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHF1b3RlZFxuc3RyaW5nLlxuXG5JZiBhIGZpbGUgYGAucGRicmNgYCBleGlzdHMgaW4gdGhlIHVzZXJcJ3MgaG9tZSBkaXJlY3Rvcnkgb3IgaW4gdGhlXG5jdXJyZW50IGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWRcbmF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZlxuYm90aCBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmRcbmFsaWFzZXMgZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogYGAucGRicmNgYCBjYW4gbm93IGNvbnRhaW4gY29tbWFuZHMgdGhhdFxuY29udGludWUgZGVidWdnaW5nLCBzdWNoIGFzIGBgY29udGludWVgYCBvciBgYG5leHRgYC4gIFByZXZpb3VzbHksXG50aGVzZSBjb21tYW5kcyBoYWQgbm8gZWZmZWN0LlxuXG5oKGVscCkgW2NvbW1hbmRdXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdpdGggYVxuICAgKmNvbW1hbmQqIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4gIGBgaGVscCBwZGJgYFxuICAgZGlzcGxheXMgdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiAodGhlIGRvY3N0cmluZyBvZiB0aGUgYGBwZGJgYFxuICAgbW9kdWxlKS4gIFNpbmNlIHRoZSAqY29tbWFuZCogYXJndW1lbnQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLFxuICAgYGBoZWxwIGV4ZWNgYCBtdXN0IGJlIGVudGVyZWQgdG8gZ2V0IGhlbHAgb24gdGhlIGBgIWBgIGNvbW1hbmQuXG5cbncoaGVyZSlcblxuICAgUHJpbnQgYSBzdGFjayB0cmFjZSwgd2l0aCB0aGUgbW9zdCByZWNlbnQgZnJhbWUgYXQgdGhlIGJvdHRvbS4gIEFuXG4gICBhcnJvdyBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWNoIGRldGVybWluZXMgdGhlIGNvbnRleHQgb2ZcbiAgIG1vc3QgY29tbWFuZHMuXG5cbmQob3duKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyBkb3duIGluIHRoZVxuICAgc3RhY2sgdHJhY2UgKHRvIGEgbmV3ZXIgZnJhbWUpLlxuXG51KHApIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIHVwIGluIHRoZSBzdGFja1xuICAgdHJhY2UgKHRvIGFuIG9sZGVyIGZyYW1lKS5cblxuYihyZWFrKSBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFdpdGggYSAqbGluZW5vKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgdGhlcmUgaW4gdGhlIGN1cnJlbnQgZmlsZS5cbiAgIFdpdGggYSAqZnVuY3Rpb24qIGFyZ3VtZW50LCBzZXQgYSBicmVhayBhdCB0aGUgZmlyc3QgZXhlY3V0YWJsZVxuICAgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIG1heSBiZSBwcmVmaXhlZFxuICAgd2l0aCBhIGZpbGVuYW1lIGFuZCBhIGNvbG9uLCB0byBzcGVjaWZ5IGEgYnJlYWtwb2ludCBpbiBhbm90aGVyXG4gICBmaWxlIChwcm9iYWJseSBvbmUgdGhhdCBoYXNuXCd0IGJlZW4gbG9hZGVkIHlldCkuICBUaGUgZmlsZSBpc1xuICAgc2VhcmNoZWQgb24gYGBzeXMucGF0aGBgLiAgTm90ZSB0aGF0IGVhY2ggYnJlYWtwb2ludCBpcyBhc3NpZ25lZCBhXG4gICBudW1iZXIgdG8gd2hpY2ggYWxsIHRoZSBvdGhlciBicmVha3BvaW50IGNvbW1hbmRzIHJlZmVyLlxuXG4gICBJZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50LCBpdCBpcyBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGxpc3QgYWxsIGJyZWFrcywgaW5jbHVkaW5nIGZvciBlYWNoIGJyZWFrcG9pbnQsXG4gICB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYnJlYWtwb2ludCBoYXMgYmVlbiBoaXQsIHRoZSBjdXJyZW50XG4gICBpZ25vcmUgY291bnQsIGFuZCB0aGUgYXNzb2NpYXRlZCBjb25kaXRpb24gaWYgYW55LlxuXG50YnJlYWsgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBUZW1wb3JhcnkgYnJlYWtwb2ludCwgd2hpY2ggaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXNcbiAgIGZpcnN0IGhpdC4gVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIGBgYnJlYWtgYC5cblxuY2woZWFyKSBbZmlsZW5hbWU6bGluZW5vIHwgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIFdpdGggYSAqZmlsZW5hbWU6bGluZW5vKiBhcmd1bWVudCwgY2xlYXIgYWxsIHRoZSBicmVha3BvaW50cyBhdFxuICAgdGhpcyBsaW5lLiBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhclxuICAgdGhvc2UgYnJlYWtwb2ludHMuIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dCBmaXJzdFxuICAgYXNrIGNvbmZpcm1hdGlvbikuXG5cbmRpc2FibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBEaXNhYmxlIHRoZSBicmVha3BvaW50cyBnaXZlbiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mXG4gICBicmVha3BvaW50IG51bWJlcnMuICBEaXNhYmxpbmcgYSBicmVha3BvaW50IG1lYW5zIGl0IGNhbm5vdCBjYXVzZVxuICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYSBicmVha3BvaW50LCBpdFxuICAgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlIChyZS0pZW5hYmxlZC5cblxuZW5hYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRW5hYmxlIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG5cbmlnbm9yZSBicG51bWJlciBbY291bnRdXG5cbiAgIFNldCB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpc1xuICAgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZVxuICAgd2hlbiB0aGUgaWdub3JlIGNvdW50IGlzIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXNcbiAgIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG5cbmNvbmRpdGlvbiBicG51bWJlciBbY29uZGl0aW9uXVxuXG4gICBTZXQgYSBuZXcgKmNvbmRpdGlvbiogZm9yIHRoZSBicmVha3BvaW50LCBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZiAqY29uZGl0aW9uKlxuICAgaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7IGkuZS4sIHRoZSBicmVha3BvaW50XG4gICBpcyBtYWRlIHVuY29uZGl0aW9uYWwuXG5cbmNvbW1hbmRzIFticG51bWJlcl1cblxuICAgU3BlY2lmeSBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIGJyZWFrcG9pbnQgbnVtYmVyICpicG51bWJlciouICBUaGVcbiAgIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZVxuICAgY29udGFpbmluZyBqdXN0IGBgZW5kYGAgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTpcblxuICAgICAgKFBkYikgY29tbWFuZHMgMVxuICAgICAgKGNvbSkgcCBzb21lX3ZhcmlhYmxlXG4gICAgICAoY29tKSBlbmRcbiAgICAgIChQZGIpXG5cbiAgIFRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kIGZvbGxvd1xuICAgaXQgaW1tZWRpYXRlbHkgd2l0aCBgYGVuZGBgOyB0aGF0IGlzLCBnaXZlIG5vIGNvbW1hbmRzLlxuXG4gICBXaXRoIG5vICpicG51bWJlciogYXJndW1lbnQsIGNvbW1hbmRzIHJlZmVycyB0byB0aGUgbGFzdCBicmVha3BvaW50XG4gICBzZXQuXG5cbiAgIFlvdSBjYW4gdXNlIGJyZWFrcG9pbnQgY29tbWFuZHMgdG8gc3RhcnQgeW91ciBwcm9ncmFtIHVwIGFnYWluLlxuICAgU2ltcGx5IHVzZSB0aGUgY29udGludWUgY29tbWFuZCwgb3Igc3RlcCwgb3IgYW55IG90aGVyIGNvbW1hbmQgdGhhdFxuICAgcmVzdW1lcyBleGVjdXRpb24uXG5cbiAgIFNwZWNpZnlpbmcgYW55IGNvbW1hbmQgcmVzdW1pbmcgZXhlY3V0aW9uIChjdXJyZW50bHkgY29udGludWUsXG4gICBzdGVwLCBuZXh0LCByZXR1cm4sIGp1bXAsIHF1aXQgYW5kIHRoZWlyIGFiYnJldmlhdGlvbnMpIHRlcm1pbmF0ZXNcbiAgIHRoZSBjb21tYW5kIGxpc3QgKGFzIGlmIHRoYXQgY29tbWFuZCB3YXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnlcbiAgIGVuZCkuIFRoaXMgaXMgYmVjYXVzZSBhbnkgdGltZSB5b3UgcmVzdW1lIGV4ZWN1dGlvbiAoZXZlbiB3aXRoIGFcbiAgIHNpbXBsZSBuZXh0IG9yIHN0ZXApLCB5b3UgbWF5IGVuY291bnRlciBhbm90aGVyIGJyZWFrcG9pbnQtLXdoaWNoXG4gICBjb3VsZCBoYXZlIGl0cyBvd24gY29tbWFuZCBsaXN0LCBsZWFkaW5nIHRvIGFtYmlndWl0aWVzIGFib3V0IHdoaWNoXG4gICBsaXN0IHRvIGV4ZWN1dGUuXG5cbiAgIElmIHlvdSB1c2UgdGhlIFwnc2lsZW50XCcgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBsaXN0LCB0aGUgdXN1YWxcbiAgIG1lc3NhZ2UgYWJvdXQgc3RvcHBpbmcgYXQgYSBicmVha3BvaW50IGlzIG5vdCBwcmludGVkLiAgVGhpcyBtYXkgYmVcbiAgIGRlc2lyYWJsZSBmb3IgYnJlYWtwb2ludHMgdGhhdCBhcmUgdG8gcHJpbnQgYSBzcGVjaWZpYyBtZXNzYWdlIGFuZFxuICAgdGhlbiBjb250aW51ZS4gIElmIG5vbmUgb2YgdGhlIG90aGVyIGNvbW1hbmRzIHByaW50IGFueXRoaW5nLCB5b3VcbiAgIHNlZSBubyBzaWduIHRoYXQgdGhlIGJyZWFrcG9pbnQgd2FzIHJlYWNoZWQuXG5cbnModGVwKVxuXG4gICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uXG4gICAoZWl0aGVyIGluIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb3Igb24gdGhlIG5leHQgbGluZSBpbiB0aGVcbiAgIGN1cnJlbnQgZnVuY3Rpb24pLlxuXG5uKGV4dClcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXNcbiAgIHJlYWNoZWQgb3IgaXQgcmV0dXJucy4gIChUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBgbmV4dGBgIGFuZFxuICAgYGBzdGVwYGAgaXMgdGhhdCBgYHN0ZXBgYCBzdG9wcyBpbnNpZGUgYSBjYWxsZWQgZnVuY3Rpb24sIHdoaWxlXG4gICBgYG5leHRgYCBleGVjdXRlcyBjYWxsZWQgZnVuY3Rpb25zIGF0IChuZWFybHkpIGZ1bGwgc3BlZWQsIG9ubHlcbiAgIHN0b3BwaW5nIGF0IHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uKVxuXG51bnQoaWwpIFtsaW5lbm9dXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lIGlzIHJlYWNoZWQuXG5cbiAgIFdpdGggYSBsaW5lIG51bWJlciwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIGEgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIG9yIGVxdWFsIHRvIHRoYXQgaXMgcmVhY2hlZC4gIEluIGJvdGggY2FzZXMsIGFsc28gc3RvcCB3aGVuXG4gICB0aGUgY3VycmVudCBmcmFtZSByZXR1cm5zLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBBbGxvdyBnaXZpbmcgYW4gZXhwbGljaXQgbGluZSBudW1iZXIuXG5cbnIoZXR1cm4pXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgY3VycmVudCBmdW5jdGlvbiByZXR1cm5zLlxuXG5jKG9udChpbnVlKSlcblxuICAgQ29udGludWUgZXhlY3V0aW9uLCBvbmx5IHN0b3Agd2hlbiBhIGJyZWFrcG9pbnQgaXMgZW5jb3VudGVyZWQuXG5cbmoodW1wKSBsaW5lbm9cblxuICAgU2V0IHRoZSBuZXh0IGxpbmUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiAgT25seSBhdmFpbGFibGUgaW4gdGhlXG4gICBib3R0b20tbW9zdCBmcmFtZS4gIFRoaXMgbGV0cyB5b3UganVtcCBiYWNrIGFuZCBleGVjdXRlIGNvZGUgYWdhaW4sXG4gICBvciBqdW1wIGZvcndhcmQgdG8gc2tpcCBjb2RlIHRoYXQgeW91IGRvblwndCB3YW50IHRvIHJ1bi5cblxuICAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgbm90IGFsbCBqdW1wcyBhcmUgYWxsb3dlZCAtLSBmb3IgaW5zdGFuY2VcbiAgIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBqdW1wIGludG8gdGhlIG1pZGRsZSBvZiBhIGBgZm9yYGAgbG9vcCBvciBvdXRcbiAgIG9mIGEgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5sKGlzdCkgW2ZpcnN0WywgbGFzdF1dXG5cbiAgIExpc3Qgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZpbGUuICBXaXRob3V0IGFyZ3VtZW50cywgbGlzdCAxMVxuICAgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUgb3IgY29udGludWUgdGhlIHByZXZpb3VzIGxpc3RpbmcuXG4gICBXaXRoIGBgLmBgIGFzIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lLlxuICAgV2l0aCBvbmUgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIGF0IHRoYXQgbGluZS4gIFdpdGggdHdvXG4gICBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3NcbiAgIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvdW50LlxuXG4gICBUaGUgY3VycmVudCBsaW5lIGluIHRoZSBjdXJyZW50IGZyYW1lIGlzIGluZGljYXRlZCBieSBgYC0+YGAuICBJZlxuICAgYW4gZXhjZXB0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkLCB0aGUgbGluZSB3aGVyZSB0aGUgZXhjZXB0aW9uIHdhc1xuICAgb3JpZ2luYWxseSByYWlzZWQgb3IgcHJvcGFnYXRlZCBpcyBpbmRpY2F0ZWQgYnkgYGA+PmBgLCBpZiBpdFxuICAgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IGxpbmUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlIGBgPj5gYCBtYXJrZXIuXG5cbmxsIHwgbG9uZ2xpc3RcblxuICAgTGlzdCBhbGwgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLlxuICAgSW50ZXJlc3RpbmcgbGluZXMgYXJlIG1hcmtlZCBhcyBmb3IgYGBsaXN0YGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYShyZ3MpXG5cbiAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLlxuXG5wIGV4cHJlc3Npb25cblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHNcbiAgIHZhbHVlLlxuXG4gICBOb3RlOiBgYHByaW50KClgYCBjYW4gYWxzbyBiZSB1c2VkLCBidXQgaXMgbm90IGEgZGVidWdnZXIgY29tbWFuZCAtLS1cbiAgICAgdGhpcyBleGVjdXRlcyB0aGUgUHl0aG9uIGBgcHJpbnQoKWBgIGZ1bmN0aW9uLlxuXG5wcCBleHByZXNzaW9uXG5cbiAgIExpa2UgdGhlIGBgcGBgIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgIHByZXR0eS1wcmludGVkIHVzaW5nIHRoZSBgYHBwcmludGBgIG1vZHVsZS5cblxud2hhdGlzIGV4cHJlc3Npb25cblxuICAgUHJpbnQgdGhlIHR5cGUgb2YgdGhlICpleHByZXNzaW9uKi5cblxuc291cmNlIGV4cHJlc3Npb25cblxuICAgVHJ5IHRvIGdldCBzb3VyY2UgY29kZSBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgZGlzcGxheSBpdC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEaXNwbGF5IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpZiBpdCBjaGFuZ2VkLCBlYWNoIHRpbWVcbiAgIGV4ZWN1dGlvbiBzdG9wcyBpbiB0aGUgY3VycmVudCBmcmFtZS5cblxuICAgV2l0aG91dCBleHByZXNzaW9uLCBsaXN0IGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxudW5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEbyBub3QgZGlzcGxheSB0aGUgZXhwcmVzc2lvbiBhbnkgbW9yZSBpbiB0aGUgY3VycmVudCBmcmFtZS5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgY2xlYXIgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5pbnRlcmFjdFxuXG4gICBTdGFydCBhbiBpbnRlcmF0aXZlIGludGVycHJldGVyICh1c2luZyB0aGUgYGBjb2RlYGAgbW9kdWxlKSB3aG9zZVxuICAgZ2xvYmFsIG5hbWVzcGFjZSBjb250YWlucyBhbGwgdGhlIChnbG9iYWwgYW5kIGxvY2FsKSBuYW1lcyBmb3VuZCBpblxuICAgdGhlIGN1cnJlbnQgc2NvcGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYWxpYXMgW25hbWUgW2NvbW1hbmRdXVxuXG4gICBDcmVhdGUgYW4gYWxpYXMgY2FsbGVkICpuYW1lKiB0aGF0IGV4ZWN1dGVzICpjb21tYW5kKi4gIFRoZSBjb21tYW5kXG4gICBtdXN0ICpub3QqIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy4gIFJlcGxhY2VhYmxlIHBhcmFtZXRlcnMgY2FuIGJlXG4gICBpbmRpY2F0ZWQgYnkgYGAlMWBgLCBgYCUyYGAsIGFuZCBzbyBvbiwgd2hpbGUgYGAlKmBgIGlzIHJlcGxhY2VkIGJ5XG4gICBhbGwgdGhlIHBhcmFtZXRlcnMuIElmIG5vIGNvbW1hbmQgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGFsaWFzIGZvclxuICAgKm5hbWUqIGlzIHNob3duLiBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBhbGwgYWxpYXNlcyBhcmUgbGlzdGVkLlxuXG4gICBBbGlhc2VzIG1heSBiZSBuZXN0ZWQgYW5kIGNhbiBjb250YWluIGFueXRoaW5nIHRoYXQgY2FuIGJlIGxlZ2FsbHlcbiAgIHR5cGVkIGF0IHRoZSBwZGIgcHJvbXB0LiAgTm90ZSB0aGF0IGludGVybmFsIHBkYiBjb21tYW5kcyAqY2FuKiBiZVxuICAgb3ZlcnJpZGRlbiBieSBhbGlhc2VzLiAgU3VjaCBhIGNvbW1hbmQgaXMgdGhlbiBoaWRkZW4gdW50aWwgdGhlXG4gICBhbGlhcyBpcyByZW1vdmVkLiAgQWxpYXNpbmcgaXMgcmVjdXJzaXZlbHkgYXBwbGllZCB0byB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIGNvbW1hbmQgbGluZTsgYWxsIG90aGVyIHdvcmRzIGluIHRoZSBsaW5lIGFyZSBsZWZ0XG4gICBhbG9uZS5cblxuICAgQXMgYW4gZXhhbXBsZSwgaGVyZSBhcmUgdHdvIHVzZWZ1bCBhbGlhc2VzIChlc3BlY2lhbGx5IHdoZW4gcGxhY2VkXG4gICBpbiB0aGUgYGAucGRicmNgYCBmaWxlKTpcblxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKVxuICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCgiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXSlcbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGZcbiAgICAgIGFsaWFzIHBzIHBpIHNlbGZcblxudW5hbGlhcyBuYW1lXG5cbiAgIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGFsaWFzLlxuXG4hIHN0YXRlbWVudFxuXG4gICBFeGVjdXRlIHRoZSAob25lLWxpbmUpICpzdGF0ZW1lbnQqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50XG4gICBzdGFjayBmcmFtZS4gVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiAgVG8gc2V0IGFcbiAgIGdsb2JhbCB2YXJpYWJsZSwgeW91IGNhbiBwcmVmaXggdGhlIGFzc2lnbm1lbnQgY29tbWFuZCB3aXRoIGFcbiAgIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG9uIHRoZSBzYW1lIGxpbmUsIGUuZy46XG5cbiAgICAgIChQZGIpIGdsb2JhbCBsaXN0X29wdGlvbnM7IGxpc3Rfb3B0aW9ucyA9IFtcJy1sXCddXG4gICAgICAoUGRiKVxuXG5ydW4gW2FyZ3MgLi4uXVxucmVzdGFydCBbYXJncyAuLi5dXG5cbiAgIFJlc3RhcnQgdGhlIGRlYnVnZ2VkIFB5dGhvbiBwcm9ncmFtLiAgSWYgYW4gYXJndW1lbnQgaXMgc3VwcGxpZWQsXG4gICBpdCBpcyBzcGxpdCB3aXRoIGBgc2hsZXhgYCBhbmQgdGhlIHJlc3VsdCBpcyB1c2VkIGFzIHRoZSBuZXdcbiAgIGBgc3lzLmFyZ3ZgYC4gSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnNcbiAgIGFyZSBwcmVzZXJ2ZWQuIGBgcmVzdGFydGBgIGlzIGFuIGFsaWFzIGZvciBgYHJ1bmBgLlxuXG5xKHVpdClcblxuICAgUXVpdCBmcm9tIHRoZSBkZWJ1Z2dlci4gIFRoZSBwcm9ncmFtIGJlaW5nIGV4ZWN1dGVkIGlzIGFib3J0ZWQuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gV2hldGhlciBhIGZyYW1lIGlzIGNvbnNpZGVyZWQgdG8gb3JpZ2luYXRlIGluIGEgY2VydGFpbiBtb2R1bGUgaXNcbiAgICBkZXRlcm1pbmVkIGJ5IHRoZSBgYF9fbmFtZV9fYGAgaW4gdGhlIGZyYW1lIGdsb2JhbHMuXG4nLAogICdkZWwnOiAnXG5UaGUgYGBkZWxgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBkZWxfc3RtdCA6Oj0gImRlbCIgdGFyZ2V0X2xpc3RcblxuRGVsZXRpb24gaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHdheSBhc3NpZ25tZW50IGlzXG5kZWZpbmVkLiBSYXRoZXIgdGhhbiBzcGVsbGluZyBpdCBvdXQgaW4gZnVsbCBkZXRhaWxzLCBoZXJlIGFyZSBzb21lXG5oaW50cy5cblxuRGVsZXRpb24gb2YgYSB0YXJnZXQgbGlzdCByZWN1cnNpdmVseSBkZWxldGVzIGVhY2ggdGFyZ2V0LCBmcm9tIGxlZnRcbnRvIHJpZ2h0LlxuXG5EZWxldGlvbiBvZiBhIG5hbWUgcmVtb3ZlcyB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgZnJvbSB0aGUgbG9jYWwgb3Jcbmdsb2JhbCBuYW1lc3BhY2UsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuYW1lIG9jY3VycyBpbiBhIGBgZ2xvYmFsYGBcbnN0YXRlbWVudCBpbiB0aGUgc2FtZSBjb2RlIGJsb2NrLiAgSWYgdGhlIG5hbWUgaXMgdW5ib3VuZCwgYVxuYGBOYW1lRXJyb3JgYCBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQuXG5cbkRlbGV0aW9uIG9mIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCBzdWJzY3JpcHRpb25zIGFuZCBzbGljaW5ncyBpcyBwYXNzZWRcbnRvIHRoZSBwcmltYXJ5IG9iamVjdCBpbnZvbHZlZDsgZGVsZXRpb24gb2YgYSBzbGljaW5nIGlzIGluIGdlbmVyYWxcbmVxdWl2YWxlbnQgdG8gYXNzaWdubWVudCBvZiBhbiBlbXB0eSBzbGljZSBvZiB0aGUgcmlnaHQgdHlwZSAoYnV0IGV2ZW5cbnRoaXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgc2xpY2VkIG9iamVjdCkuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IFByZXZpb3VzbHkgaXQgd2FzIGlsbGVnYWwgdG8gZGVsZXRlIGEgbmFtZVxuZnJvbSB0aGUgbG9jYWwgbmFtZXNwYWNlIGlmIGl0IG9jY3VycyBhcyBhIGZyZWUgdmFyaWFibGUgaW4gYSBuZXN0ZWRcbmJsb2NrLlxuJywKICAnZGljdCc6ICdcbkRpY3Rpb25hcnkgZGlzcGxheXNcbioqKioqKioqKioqKioqKioqKipcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2Yga2V5L2RhdHVtIHBhaXJzXG5lbmNsb3NlZCBpbiBjdXJseSBicmFjZXM6XG5cbiAgIGRpY3RfZGlzcGxheSAgICAgICA6Oj0gInsiIFtrZXlfZGF0dW1fbGlzdCB8IGRpY3RfY29tcHJlaGVuc2lvbl0gIn0iXG4gICBrZXlfZGF0dW1fbGlzdCAgICAgOjo9IGtleV9kYXR1bSAoIiwiIGtleV9kYXR1bSkqIFsiLCJdXG4gICBrZXlfZGF0dW0gICAgICAgICAgOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb25cbiAgIGRpY3RfY29tcHJlaGVuc2lvbiA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvbiBjb21wX2ZvclxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSB5aWVsZHMgYSBuZXcgZGljdGlvbmFyeSBvYmplY3QuXG5cbklmIGEgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIG9mIGtleS9kYXR1bSBwYWlycyBpcyBnaXZlbiwgdGhleSBhcmVcbmV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgdG8gZGVmaW5lIHRoZSBlbnRyaWVzIG9mIHRoZSBkaWN0aW9uYXJ5OlxuZWFjaCBrZXkgb2JqZWN0IGlzIHVzZWQgYXMgYSBrZXkgaW50byB0aGUgZGljdGlvbmFyeSB0byBzdG9yZSB0aGVcbmNvcnJlc3BvbmRpbmcgZGF0dW0uICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHRoZSBzYW1lIGtleVxubXVsdGlwbGUgdGltZXMgaW4gdGhlIGtleS9kYXR1bSBsaXN0LCBhbmQgdGhlIGZpbmFsIGRpY3Rpb25hcnlcJ3MgdmFsdWVcbmZvciB0aGF0IGtleSB3aWxsIGJlIHRoZSBsYXN0IG9uZSBnaXZlbi5cblxuQSBkaWN0IGNvbXByZWhlbnNpb24sIGluIGNvbnRyYXN0IHRvIGxpc3QgYW5kIHNldCBjb21wcmVoZW5zaW9ucyxcbm5lZWRzIHR3byBleHByZXNzaW9ucyBzZXBhcmF0ZWQgd2l0aCBhIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSB1c3VhbFxuImZvciIgYW5kICJpZiIgY2xhdXNlcy4gV2hlbiB0aGUgY29tcHJlaGVuc2lvbiBpcyBydW4sIHRoZSByZXN1bHRpbmdcbmtleSBhbmQgdmFsdWUgZWxlbWVudHMgYXJlIGluc2VydGVkIGluIHRoZSBuZXcgZGljdGlvbmFyeSBpbiB0aGUgb3JkZXJcbnRoZXkgYXJlIHByb2R1Y2VkLlxuXG5SZXN0cmljdGlvbnMgb24gdGhlIHR5cGVzIG9mIHRoZSBrZXkgdmFsdWVzIGFyZSBsaXN0ZWQgZWFybGllciBpblxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Ki4gIChUbyBzdW1tYXJpemUsIHRoZSBrZXkgdHlwZVxuc2hvdWxkIGJlICpoYXNoYWJsZSosIHdoaWNoIGV4Y2x1ZGVzIGFsbCBtdXRhYmxlIG9iamVjdHMuKSAgQ2xhc2hlc1xuYmV0d2VlbiBkdXBsaWNhdGUga2V5cyBhcmUgbm90IGRldGVjdGVkOyB0aGUgbGFzdCBkYXR1bSAodGV4dHVhbGx5XG5yaWdodG1vc3QgaW4gdGhlIGRpc3BsYXkpIHN0b3JlZCBmb3IgYSBnaXZlbiBrZXkgdmFsdWUgcHJldmFpbHMuXG4nLAogICdkeW5hbWljLWZlYXR1cmVzJzogJ1xuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlcmUgUHl0aG9uIHN0YXRlbWVudHMgYXJlIGlsbGVnYWwgd2hlbiB1c2VkXG5pbiBjb25qdW5jdGlvbiB3aXRoIG5lc3RlZCBzY29wZXMgdGhhdCBjb250YWluIGZyZWUgdmFyaWFibGVzLlxuXG5JZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgaW4gYW4gZW5jbG9zaW5nIHNjb3BlLCBpdCBpcyBpbGxlZ2FsIHRvXG5kZWxldGUgdGhlIG5hbWUuICBBbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGF0IGNvbXBpbGUgdGltZS5cblxuSWYgdGhlIHdpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gYGBpbXBvcnQgKmBgIC0tLSBpcyB1c2VkIGluIGFcbmZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY29udGFpbnMgb3IgaXMgYSBuZXN0ZWQgYmxvY2sgd2l0aCBmcmVlXG52YXJpYWJsZXMsIHRoZSBjb21waWxlciB3aWxsIHJhaXNlIGEgYGBTeW50YXhFcnJvcmBgLlxuXG5UaGUgYGBldmFsKClgYCBhbmQgYGBleGVjKClgYCBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsXG5lbnZpcm9ubWVudCBmb3IgcmVzb2x2aW5nIG5hbWVzLiAgTmFtZXMgbWF5IGJlIHJlc29sdmVkIGluIHRoZSBsb2NhbFxuYW5kIGdsb2JhbCBuYW1lc3BhY2VzIG9mIHRoZSBjYWxsZXIuICBGcmVlIHZhcmlhYmxlcyBhcmUgbm90IHJlc29sdmVkXG5pbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbmFtZXNwYWNlLCBidXQgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBbMV1cblRoZSBgYGV4ZWMoKWBgIGFuZCBgYGV2YWwoKWBgIGZ1bmN0aW9ucyBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xub3ZlcnJpZGUgdGhlIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlLiAgSWYgb25seSBvbmUgbmFtZXNwYWNlIGlzXG5zcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG4nLApAQCAtMzQsOCArMzQsOCBAQAogICdleHBybGlzdHMnOiAnXG5FeHByZXNzaW9uIGxpc3RzXG4qKioqKioqKioqKioqKioqXG5cbiAgIGV4cHJlc3Npb25fbGlzdCA6Oj0gZXhwcmVzc2lvbiAoICIsIiBleHByZXNzaW9uICkqIFsiLCJdXG5cbkFuIGV4cHJlc3Npb24gbGlzdCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBjb21tYSB5aWVsZHMgYSB0dXBsZS4gIFRoZVxubGVuZ3RoIG9mIHRoZSB0dXBsZSBpcyB0aGUgbnVtYmVyIG9mIGV4cHJlc3Npb25zIGluIHRoZSBsaXN0LiAgVGhlXG5leHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodC5cblxuVGhlIHRyYWlsaW5nIGNvbW1hIGlzIHJlcXVpcmVkIG9ubHkgdG8gY3JlYXRlIGEgc2luZ2xlIHR1cGxlIChhLmsuYS4gYVxuKnNpbmdsZXRvbiopOyBpdCBpcyBvcHRpb25hbCBpbiBhbGwgb3RoZXIgY2FzZXMuICBBIHNpbmdsZSBleHByZXNzaW9uXG53aXRob3V0IGEgdHJhaWxpbmcgY29tbWEgZG9lc25cJ3QgY3JlYXRlIGEgdHVwbGUsIGJ1dCByYXRoZXIgeWllbGRzIHRoZVxudmFsdWUgb2YgdGhhdCBleHByZXNzaW9uLiAoVG8gY3JlYXRlIGFuIGVtcHR5IHR1cGxlLCB1c2UgYW4gZW1wdHkgcGFpclxub2YgcGFyZW50aGVzZXM6IGBgKClgYC4pXG4nLAogICdmbG9hdGluZyc6ICdcbkZsb2F0aW5nIHBvaW50IGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG5GbG9hdGluZyBwb2ludCBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbFxuZGVmaW5pdGlvbnM6XG5cbiAgIGZsb2F0bnVtYmVyICAgOjo9IHBvaW50ZmxvYXQgfCBleHBvbmVudGZsb2F0XG4gICBwb2ludGZsb2F0ICAgIDo6PSBbaW50cGFydF0gZnJhY3Rpb24gfCBpbnRwYXJ0ICIuIlxuICAgZXhwb25lbnRmbG9hdCA6Oj0gKGludHBhcnQgfCBwb2ludGZsb2F0KSBleHBvbmVudFxuICAgaW50cGFydCAgICAgICA6Oj0gZGlnaXQrXG4gICBmcmFjdGlvbiAgICAgIDo6PSAiLiIgZGlnaXQrXG4gICBleHBvbmVudCAgICAgIDo6PSAoImUiIHwgIkUiKSBbIisiIHwgIi0iXSBkaWdpdCtcblxuTm90ZSB0aGF0IHRoZSBpbnRlZ2VyIGFuZCBleHBvbmVudCBwYXJ0cyBhcmUgYWx3YXlzIGludGVycHJldGVkIHVzaW5nXG5yYWRpeCAxMC4gRm9yIGV4YW1wbGUsIGBgMDc3ZTAxMGBgIGlzIGxlZ2FsLCBhbmQgZGVub3RlcyB0aGUgc2FtZVxubnVtYmVyIGFzIGBgNzdlMTBgYC4gVGhlIGFsbG93ZWQgcmFuZ2Ugb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgaXNcbmltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4gU29tZSBleGFtcGxlcyBvZiBmbG9hdGluZyBwb2ludCBsaXRlcmFsczpcblxuICAgMy4xNCAgICAxMC4gICAgLjAwMSAgICAxZTEwMCAgICAzLjE0ZS0xMCAgICAwZTBcblxuTm90ZSB0aGF0IG51bWVyaWMgbGl0ZXJhbHMgZG8gbm90IGluY2x1ZGUgYSBzaWduOyBhIHBocmFzZSBsaWtlIGBgLTFgYFxuaXMgYWN0dWFsbHkgYW4gZXhwcmVzc2lvbiBjb21wb3NlZCBvZiB0aGUgdW5hcnkgb3BlcmF0b3IgYGAtYGAgYW5kIHRoZVxubGl0ZXJhbCBgYDFgYC5cbicsCiAgJ2Zvcic6ICdcblRoZSBgYGZvcmBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYVxuc2VxdWVuY2UgKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG5gYGV4cHJlc3Npb25fbGlzdGBgLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgYGBTdG9wSXRlcmF0aW9uYGBcbmV4Y2VwdGlvbiksIHRoZSBzdWl0ZSBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCxcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSBgYGVsc2VgYCBjbGF1c2UgaWYgdGhlcmUgd2FzXG5ubyBuZXh0IGl0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYHJhbmdlKClgYCByZXR1cm5zIGFuXG5pdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzIGBgZm9yXG5pIDo9IGEgdG8gYiBkb2BgOyBlLmcuLCBgYGxpc3QocmFuZ2UoMykpYGAgcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLFxuMl1gYC5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG4nLAotICdmb3JtYXRzdHJpbmdzJzogJ1xuRm9ybWF0IFN0cmluZyBTeW50YXhcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBhbmQgdGhlIGBgRm9ybWF0dGVyYGAgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mIGBgRm9ybWF0dGVyYGAsXG5zdWJjbGFzc2VzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGZvcm1hdCBzdHJpbmcgc3ludGF4KS5cblxuRm9ybWF0IHN0cmluZ3MgY29udGFpbiAicmVwbGFjZW1lbnQgZmllbGRzIiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuYGB7fWBgLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG5gYHt7YGAgYW5kIGBgfX1gYC5cblxuVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czpcblxuICAgICAgcmVwbGFjZW1lbnRfZmllbGQgOjo9ICJ7IiBbZmllbGRfbmFtZV0gWyIhIiBjb252ZXJzaW9uXSBbIjoiIGZvcm1hdF9zcGVjXSAifSJcbiAgICAgIGZpZWxkX25hbWUgICAgICAgIDo6PSBhcmdfbmFtZSAoIi4iIGF0dHJpYnV0ZV9uYW1lIHwgIlsiIGVsZW1lbnRfaW5kZXggIl0iKSpcbiAgICAgIGFyZ19uYW1lICAgICAgICAgIDo6PSBbaWRlbnRpZmllciB8IGludGVnZXJdXG4gICAgICBhdHRyaWJ1dGVfbmFtZSAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgZWxlbWVudF9pbmRleCAgICAgOjo9IGludGVnZXIgfCBpbmRleF9zdHJpbmdcbiAgICAgIGluZGV4X3N0cmluZyAgICAgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJdIj4gK1xuICAgICAgY29udmVyc2lvbiAgICAgICAgOjo9ICJyIiB8ICJzIiB8ICJhIlxuICAgICAgZm9ybWF0X3NwZWMgICAgICAgOjo9IDxkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbj5cblxuSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBjYW4gc3RhcnQgd2l0aCBhXG4qZmllbGRfbmFtZSogdGhhdCBzcGVjaWZpZXMgdGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBmb3JtYXR0ZWRcbmFuZCBpbnNlcnRlZCBpbnRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZW1lbnQgZmllbGQuIFRoZVxuKmZpZWxkX25hbWUqIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb24gcG9pbnQgYGBcJyFcJ2BgLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaFxuaXMgcHJlY2VkZWQgYnkgYSBjb2xvbiBgYFwnOlwnYGAuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0XG5mb3IgdGhlIHJlcGxhY2VtZW50IHZhbHVlLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXIgYVxubnVtYmVyIG9yIGEga2V5d29yZC4gIElmIGl0XCdzIGEgbnVtYmVyLCBpdCByZWZlcnMgdG8gYSBwb3NpdGlvbmFsXG5hcmd1bWVudCwgYW5kIGlmIGl0XCdzIGEga2V5d29yZCwgaXQgcmVmZXJzIHRvIGEgbmFtZWQga2V5d29yZFxuYXJndW1lbnQuICBJZiB0aGUgbnVtZXJpY2FsIGFyZ19uYW1lcyBpbiBhIGZvcm1hdCBzdHJpbmcgYXJlIDAsIDEsIDIsXG4uLi4gaW4gc2VxdWVuY2UsIHRoZXkgY2FuIGFsbCBiZSBvbWl0dGVkIChub3QganVzdCBzb21lKSBhbmQgdGhlXG5udW1iZXJzIDAsIDEsIDIsIC4uLiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhhdCBvcmRlci5cbkJlY2F1c2UgKmFyZ19uYW1lKiBpcyBub3QgcXVvdGUtZGVsaW1pdGVkLCBpdCBpcyBub3QgcG9zc2libGUgdG9cbnNwZWNpZnkgYXJiaXRyYXJ5IGRpY3Rpb25hcnkga2V5cyAoZS5nLiwgdGhlIHN0cmluZ3MgYGBcJzEwXCdgYCBvclxuYGBcJzotXVwnYGApIHdpdGhpbiBhIGZvcm1hdCBzdHJpbmcuIFRoZSAqYXJnX25hbWUqIGNhbiBiZSBmb2xsb3dlZCBieVxuYW55IG51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlXG5mb3JtIGBgXCcubmFtZVwnYGAgc2VsZWN0cyB0aGUgbmFtZWQgYXR0cmlidXRlIHVzaW5nIGBgZ2V0YXR0cigpYGAsXG53aGlsZSBhbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBgXCdbaW5kZXhdXCdgYCBkb2VzIGFuIGluZGV4IGxvb2t1cFxudXNpbmcgYGBfX2dldGl0ZW1fXygpYGAuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlXG5vbWl0dGVkLCBzbyBgYFwne30ge31cJ2BgIGlzIGVxdWl2YWxlbnQgdG8gYGBcJ3swfSB7MX1cJ2BgLlxuXG5Tb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOlxuXG4gICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdGx5IHJlZmVyZW5jZXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJGcm9tIHt9IHRvIHt9IiAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IlxuICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgXCduYW1lXCdcbiAgICJXZWlnaHQgaW4gdG9ucyB7MC53ZWlnaHR9IiAgICAgICMgXCd3ZWlnaHRcJyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmdcbiAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50IFwncGxheWVyc1wnLlxuXG5UaGUgKmNvbnZlcnNpb24qIGZpZWxkIGNhdXNlcyBhIHR5cGUgY29lcmNpb24gYmVmb3JlIGZvcm1hdHRpbmcuXG5Ob3JtYWxseSwgdGhlIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGVcbmBgX19mb3JtYXRfXygpYGAgbWV0aG9kIG9mIHRoZSB2YWx1ZSBpdHNlbGYuICBIb3dldmVyLCBpbiBzb21lIGNhc2VzXG5pdCBpcyBkZXNpcmFibGUgdG8gZm9yY2UgYSB0eXBlIHRvIGJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZyxcbm92ZXJyaWRpbmcgaXRzIG93biBkZWZpbml0aW9uIG9mIGZvcm1hdHRpbmcuICBCeSBjb252ZXJ0aW5nIHRoZSB2YWx1ZVxudG8gYSBzdHJpbmcgYmVmb3JlIGNhbGxpbmcgYGBfX2Zvcm1hdF9fKClgYCwgdGhlIG5vcm1hbCBmb3JtYXR0aW5nXG5sb2dpYyBpcyBieXBhc3NlZC5cblxuVGhyZWUgY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogYGBcJyFzXCdgYCB3aGljaCBjYWxsc1xuYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZSwgYGBcJyFyXCdgYCB3aGljaCBjYWxscyBgYHJlcHIoKWBgIGFuZCBgYFwnIWFcJ2BgXG53aGljaCBjYWxscyBgYGFzY2lpKClgYC5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJNb3JlIHshYX0iICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbHMgYXNjaWkoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluIGBgZm9ybWF0KClgYCBmdW5jdGlvbi4gIEVhY2ggZm9ybWF0dGFibGUgdHlwZSBtYXkgZGVmaW5lIGhvd1xudGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIHRvIGJlIGludGVycHJldGVkLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIGZvcm1hdFxuc3BlY2lmaWNhdGlvbnMsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcmUgb25seVxuc3VwcG9ydGVkIGJ5IHRoZSBudW1lcmljIHR5cGVzLlxuXG5BIGdlbmVyYWwgY29udmVudGlvbiBpcyB0aGF0IGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgKGBgIiJgYCkgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCBgYHN0cigpYGAgb24gdGhlIHZhbHVlLiBBIG5vbi1cbmVtcHR5IGZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhbnkgY2hhcmFjdGVyPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cbklmIGEgdmFsaWQgKmFsaWduKiB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IGNhbiBiZSBwcmVjZWVkZWQgYnkgYSAqZmlsbCpcbmNoYXJhY3RlciB0aGF0IGNhbiBiZSBhbnkgY2hhcmFjdGVyIGFuZCBkZWZhdWx0cyB0byBhIHNwYWNlIGlmXG5vbWl0dGVkLiBOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSBgYHtgYCBhbmQgYGB9YGAgYXMgKmZpbGwqXG5jaGFyIHdoaWxlIHVzaW5nIHRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZDsgdGhpcyBsaW1pdGF0aW9uIGhvd2V2ZXJcbmRvZXNuXCd0IGFmZmVjdCB0aGUgYGBmb3JtYXQoKWBgIGZ1bmN0aW9uLlxuXG5UaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCc8XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IG9iamVjdHMpLiAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz5cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIHJpZ2h0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG51bWJlcnMpLiAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPVwnYGAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgfCAgICAgICAgICAgfCBidXQgYmVmb3JlIHRoZSBkaWdpdHMuICBUaGlzIGlzIHVzZWQgZm9yIHByaW50aW5nIGZpZWxkcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW4gdGhlIGZvcm0gXCcrMDAwMDAwMTIwXCcuIFRoaXMgYWxpZ25tZW50IG9wdGlvbiBpcyBvbmx5ICAgIHxcbiAgIHwgICAgICAgICAgIHwgdmFsaWQgZm9yIG51bWVyaWMgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnXlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgY2VudGVyZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJytcJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgIHwgICAgICAgICAgIHwgd2VsbCBhcyBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnLVwnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBuZWdhdGl2ZSAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4gICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IHNwYWNlICAgICB8IGluZGljYXRlcyB0aGF0IGEgbGVhZGluZyBzcGFjZSBzaG91bGQgYmUgdXNlZCBvbiBwb3NpdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzLCBhbmQgYSBtaW51cyBzaWduIG9uIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBgYFwnI1wnYGAgb3B0aW9uIGNhdXNlcyB0aGUgImFsdGVybmF0ZSBmb3JtIiB0byBiZSB1c2VkIGZvciB0aGVcbmNvbnZlcnNpb24uICBUaGUgYWx0ZXJuYXRlIGZvcm0gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50XG50eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXIsIGZsb2F0LCBjb21wbGV4IGFuZFxuRGVjaW1hbCB0eXBlcy4gRm9yIGludGVnZXJzLCB3aGVuIGJpbmFyeSwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dFxuaXMgdXNlZCwgdGhpcyBvcHRpb24gYWRkcyB0aGUgcHJlZml4IHJlc3BlY3RpdmUgYGBcJzBiXCdgYCwgYGBcJzBvXCdgYCwgb3JcbmBgXCcweFwnYGAgdG8gdGhlIG91dHB1dCB2YWx1ZS4gRm9yIGZsb2F0cywgY29tcGxleCBhbmQgRGVjaW1hbCB0aGVcbmFsdGVybmF0ZSBmb3JtIGNhdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIHRvIGFsd2F5cyBjb250YWluIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyLCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuIE5vcm1hbGx5LCBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgdGhlc2UgY29udmVyc2lvbnNcbm9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LiBJbiBhZGRpdGlvbiwgZm9yIGBgXCdnXCdgYCBhbmQgYGBcJ0dcJ2BgXG5jb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC5cblxuVGhlIGBgXCcsXCdgYCBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzXG5zZXBhcmF0b3IuIEZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgYGBcJ25cJ2BgIGludGVnZXJcbnByZXNlbnRhdGlvbiB0eXBlIGluc3RlYWQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IEFkZGVkIHRoZSBgYFwnLFwnYGAgb3B0aW9uIChzZWUgYWxzbyAqKlBFUFxuMzc4KiopLlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuUHJlY2VkaW5nIHRoZSAqd2lkdGgqIGZpZWxkIGJ5IGEgemVybyAoYGBcJzBcJ2BgKSBjaGFyYWN0ZXIgZW5hYmxlc1xuc2lnbi1hd2FyZSB6ZXJvLXBhZGRpbmcgZm9yIG51bWVyaWMgdHlwZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYVxuKmZpbGwqIGNoYXJhY3RlciBvZiBgYFwnMFwnYGAgd2l0aCBhbiAqYWxpZ25tZW50KiB0eXBlIG9mIGBgXCc9XCdgYC5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoIGBgXCdmXCdgYCBhbmQgYGBcJ0ZcJ2BgLCBvciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNpbWFsXG5wb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBmb3JtYXR0ZWQgd2l0aCBgYFwnZ1wnYGAgb3IgYGBcJ0dcJ2BgLlxuRm9yIG5vbi1udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW5cbm90aGVyIHdvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LlxuVGhlICpwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdzXCdgYCAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICB8ICAgICAgICAgICB8IG1heSBiZSBvbWl0dGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ3NcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBhdmFpbGFibGUgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdiXCdgYCAgIHwgQmluYXJ5IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMi4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnY1wnYGAgICB8IENoYXJhY3Rlci4gQ29udmVydHMgdGhlIGludGVnZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgICAgICAgfFxuICAgfCAgICAgICAgICAgfCB1bmljb2RlIGNoYXJhY3RlciBiZWZvcmUgcHJpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdkXCdgYCAgIHwgRGVjaW1hbCBJbnRlZ2VyLiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxMC4gICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnb1wnYGAgICB8IE9jdGFsIGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgOC4gICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ3hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgbG93ZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnWFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdkXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdFxuYGBcJ25cJ2BgIGFuZCBOb25lKS4gV2hlbiBkb2luZyBzbywgYGBmbG9hdCgpYGAgaXMgdXNlZCB0byBjb252ZXJ0IHRoZVxuaW50ZWdlciB0byBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZWZvcmUgZm9ybWF0dGluZy5cblxuVGhlIGF2YWlsYWJsZSBwcmVzZW50YXRpb24gdHlwZXMgZm9yIGZsb2F0aW5nIHBvaW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdlXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFByaW50cyB0aGUgbnVtYmVyIGluIHNjaWVudGlmaWMgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG5vdGF0aW9uIHVzaW5nIHRoZSBsZXR0ZXIgXCdlXCcgdG8gaW5kaWNhdGUgdGhlIGV4cG9uZW50LiAgICB8XG4gICB8ICAgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBgYDZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gU2FtZSBhcyBgYFwnZVwnYGAgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIFwnRVwnIGFzIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gRGlzcGxheXMgdGhlIG51bWJlciBhcyBhIGZpeGVkLXBvaW50IG51bWJlci4gIHxcbiAgIHwgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRlwnYGAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzIGBgXCdmXCdgYCwgYnV0IGNvbnZlcnRzIGBgbmFuYGAgdG8gICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgTkFOYGAgYW5kIGBgaW5mYGAgdG8gYGBJTkZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gIEZvciBhIGdpdmVuIHByZWNpc2lvbiBgYHAgPj0gMWBgLCB0aGlzICAgIHxcbiAgIHwgICAgICAgICAgIHwgcm91bmRzIHRoZSBudW1iZXIgdG8gYGBwYGAgc2lnbmlmaWNhbnQgZGlnaXRzIGFuZCB0aGVuICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHMgdGhlIHJlc3VsdCBpbiBlaXRoZXIgZml4ZWQtcG9pbnQgZm9ybWF0IG9yIGluICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzY2llbnRpZmljIG5vdGF0aW9uLCBkZXBlbmRpbmcgb24gaXRzIG1hZ25pdHVkZS4gIFRoZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzZSBydWxlcyBhcmUgYXMgZm9sbG93czogc3VwcG9zZSB0aGF0IHRoZSByZXN1bHQgICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAgd291bGQgaGF2ZSBleHBvbmVudCBgYGV4cGBgLiAgVGhlbiBpZiBgYC00IDw9IGV4cCAgfFxuICAgfCAgICAgICAgICAgfCA8IHBgYCwgdGhlIG51bWJlciBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBcJ2ZcJ2BgIGFuZCBwcmVjaXNpb24gYGBwLTEtZXhwYGAuIE90aGVyd2lzZSwgdGhlIG51bWJlciAgIHxcbiAgIHwgICAgICAgICAgIHwgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgYGBcJ2VcJ2BgIGFuZCBwcmVjaXNpb24gIHxcbiAgIHwgICAgICAgICAgIHwgYGBwLTFgYC4gSW4gYm90aCBjYXNlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIGFyZSAgICB8XG4gICB8ICAgICAgICAgICB8IHJlbW92ZWQgZnJvbSB0aGUgc2lnbmlmaWNhbmQsIGFuZCB0aGUgZGVjaW1hbCBwb2ludCBpcyAgICAgfFxuICAgfCAgICAgICAgICAgfCBhbHNvIHJlbW92ZWQgaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBkaWdpdHMgZm9sbG93aW5nICAgIHxcbiAgIHwgICAgICAgICAgIHwgaXQuICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB8XG4gICB8ICAgICAgICAgICB8IHplcm8sIGFuZCBuYW5zLCBhcmUgZm9ybWF0dGVkIGFzIGBgaW5mYGAsIGBgLWluZmBgLCBgYDBgYCwgfFxuICAgfCAgICAgICAgICAgfCBgYC0wYGAgYW5kIGBgbmFuYGAgcmVzcGVjdGl2ZWx5LCByZWdhcmRsZXNzIG9mIHRoZSAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzaW9uLiAgQSBwcmVjaXNpb24gb2YgYGAwYGAgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50ICB8XG4gICB8ICAgICAgICAgICB8IHRvIGEgcHJlY2lzaW9uIG9mIGBgMWBgLiAgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gU2FtZSBhcyBgYFwnZ1wnYGAgZXhjZXB0IHN3aXRjaGVzIHRvIGBgXCdFXCdgYCB8XG4gICB8ICAgICAgICAgICB8IGlmIHRoZSBudW1iZXIgZ2V0cyB0b28gbGFyZ2UuIFRoZSByZXByZXNlbnRhdGlvbnMgb2YgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBpbmZpbml0eSBhbmQgTmFOIGFyZSB1cHBlcmNhc2VkLCB0b28uICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdnXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJyVcJ2BgICAgfCBQZXJjZW50YWdlLiBNdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMTAwIGFuZCBkaXNwbGF5cyBpbiAgIHxcbiAgIHwgICAgICAgICAgIHwgZml4ZWQgKGBgXCdmXCdgYCkgZm9ybWF0LCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFNpbWlsYXIgdG8gYGBcJ2dcJ2BgLCBleGNlcHQgd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCAgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBkZWNpbWFsIHBvaW50IGFuZCBhIGRlZmF1bHQgcHJlY2lzaW9uIG9mIDEyLiBUaGlzIGlzICAgfFxuICAgfCAgICAgICAgICAgfCBpbnRlbmRlZCB0byBtYXRjaCBgYHN0cigpYGAsIGV4Y2VwdCB5b3UgY2FuIGFkZCB0aGUgb3RoZXIgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0IG1vZGlmaWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5cbkZvcm1hdCBleGFtcGxlc1xuPT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgbmV3IGZvcm1hdCBzeW50YXggYW5kIGNvbXBhcmlzb25cbndpdGggdGhlIG9sZCBgYCVgYC1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZFxuYGAlYGAtZm9ybWF0dGluZywgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGBge31gYCBhbmQgd2l0aCBgYDpgYCB1c2VkXG5pbnN0ZWFkIG9mIGBgJWBgLiBGb3IgZXhhbXBsZSwgYGBcJyUwMy4yZlwnYGAgY2FuIGJlIHRyYW5zbGF0ZWQgdG9cbmBgXCd7OjAzLjJmfVwnYGAuXG5cblRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbHNvIHN1cHBvcnRzIG5ldyBhbmQgZGlmZmVyZW50IG9wdGlvbnMsIHNob3duXG5pbiB0aGUgZm9sbG93IGV4YW1wbGVzLlxuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IHBvc2l0aW9uOlxuXG4gICA+Pj4gXCd7MH0sIHsxfSwgezJ9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwne30sIHt9LCB7fVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKSAgIyAzLjErIG9ubHlcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdCgqXCdhYmNcJykgICAgICAjIHVucGFja2luZyBhcmd1bWVudCBzZXF1ZW5jZVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3swfXsxfXswfVwnLmZvcm1hdChcJ2FicmFcJywgXCdjYWRcJykgICAjIGFyZ3VtZW50c1wnIGluZGljZXMgY2FuIGJlIHJlcGVhdGVkXG4gICBcJ2FicmFjYWRhYnJhXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBuYW1lOlxuXG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQobGF0aXR1ZGU9XCczNy4yNE5cJywgbG9uZ2l0dWRlPVwnLTExNS44MVdcJylcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuICAgPj4+IGNvb3JkID0ge1wnbGF0aXR1ZGVcJzogXCczNy4yNE5cJywgXCdsb25naXR1ZGVcJzogXCctMTE1LjgxV1wnfVxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KCoqY29vcmQpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGF0dHJpYnV0ZXM6XG5cbiAgID4+PiBjID0gMy01alxuICAgPj4+IChcJ1RoZSBjb21wbGV4IG51bWJlciB7MH0gaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCB7MC5yZWFsfSBcJ1xuICAgLi4uICBcJ2FuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgezAuaW1hZ30uXCcpLmZvcm1hdChjKVxuICAgXCdUaGUgY29tcGxleCBudW1iZXIgKDMtNWopIGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgMy4wIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgLTUuMC5cJ1xuICAgPj4+IGNsYXNzIFBvaW50OlxuICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6XG4gICAuLi4gICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHlcbiAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdQb2ludCh7c2VsZi54fSwge3NlbGYueX0pXCcuZm9ybWF0KHNlbGY9c2VsZilcbiAgIC4uLlxuICAgPj4+IHN0cihQb2ludCg0LCAyKSlcbiAgIFwnUG9pbnQoNCwgMilcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgaXRlbXM6XG5cbiAgID4+PiBjb29yZCA9ICgzLCA1KVxuICAgPj4+IFwnWDogezBbMF19OyAgWTogezBbMV19XCcuZm9ybWF0KGNvb3JkKVxuICAgXCdYOiAzOyAgWTogNVwnXG5cblJlcGxhY2luZyBgYCVzYGAgYW5kIGBgJXJgYDpcblxuICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7IXJ9OyBzdHIoKSBkb2VzblwndDogeyFzfSIuZm9ybWF0KFwndGVzdDFcJywgXCd0ZXN0MlwnKVxuICAgInJlcHIoKSBzaG93cyBxdW90ZXM6IFwndGVzdDFcJzsgc3RyKCkgZG9lc25cJ3Q6IHRlc3QyIlxuXG5BbGlnbmluZyB0aGUgdGV4dCBhbmQgc3BlY2lmeWluZyBhIHdpZHRoOlxuXG4gICA+Pj4gXCd7OjwzMH1cJy5mb3JtYXQoXCdsZWZ0IGFsaWduZWRcJylcbiAgIFwnbGVmdCBhbGlnbmVkICAgICAgICAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6PjMwfVwnLmZvcm1hdChcJ3JpZ2h0IGFsaWduZWRcJylcbiAgIFwnICAgICAgICAgICAgICAgICByaWdodCBhbGlnbmVkXCdcbiAgID4+PiBcJ3s6XjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpXG4gICBcJyAgICAgICAgICAgY2VudGVyZWQgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7OipeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJykgICMgdXNlIFwnKlwnIGFzIGEgZmlsbCBjaGFyXG4gICBcJyoqKioqKioqKioqY2VudGVyZWQqKioqKioqKioqKlwnXG5cblJlcGxhY2luZyBgYCUrZmBgLCBgYCUtZmBgLCBhbmQgYGAlIGZgYCBhbmQgc3BlY2lmeWluZyBhIHNpZ246XG5cbiAgID4+PiBcJ3s6K2Z9OyB7OitmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBpdCBhbHdheXNcbiAgIFwnKzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezogZn07IHs6IGZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnNcbiAgIFwnIDMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezotZn07IHs6LWZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgXCd7OmZ9OyB7OmZ9XCdcbiAgIFwnMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG5cblJlcGxhY2luZyBgYCV4YGAgYW5kIGBgJW9gYCBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50XG5iYXNlczpcblxuICAgPj4+ICMgZm9ybWF0IGFsc28gc3VwcG9ydHMgYmluYXJ5IG51bWJlcnNcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6eH07ICBvY3Q6IHswOm99OyAgYmluOiB7MDpifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAyYTsgIG9jdDogNTI7ICBiaW46IDEwMTAxMFwnXG4gICA+Pj4gIyB3aXRoIDB4LCAwbywgb3IgMGIgYXMgcHJlZml4OlxuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDojeH07ICBvY3Q6IHswOiNvfTsgIGJpbjogezA6I2J9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDB4MmE7ICBvY3Q6IDBvNTI7ICBiaW46IDBiMTAxMDEwXCdcblxuVXNpbmcgdGhlIGNvbW1hIGFzIGEgdGhvdXNhbmRzIHNlcGFyYXRvcjpcblxuICAgPj4+IFwnezosfVwnLmZvcm1hdCgxMjM0NTY3ODkwKVxuICAgXCcxLDIzNCw1NjcsODkwXCdcblxuRXhwcmVzc2luZyBhIHBlcmNlbnRhZ2U6XG5cbiAgID4+PiBwb2ludHMgPSAxOVxuICAgPj4+IHRvdGFsID0gMjJcbiAgID4+PiBcJ0NvcnJlY3QgYW5zd2VyczogezouMiV9XCcuZm9ybWF0KHBvaW50cy90b3RhbClcbiAgIFwnQ29ycmVjdCBhbnN3ZXJzOiA4Ni4zNiVcJ1xuXG5Vc2luZyB0eXBlLXNwZWNpZmljIGZvcm1hdHRpbmc6XG5cbiAgID4+PiBpbXBvcnQgZGF0ZXRpbWVcbiAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OClcbiAgID4+PiBcJ3s6JVktJW0tJWQgJUg6JU06JVN9XCcuZm9ybWF0KGQpXG4gICBcJzIwMTAtMDctMDQgMTI6MTU6NThcJ1xuXG5OZXN0aW5nIGFyZ3VtZW50cyBhbmQgbW9yZSBjb21wbGV4IGV4YW1wbGVzOlxuXG4gICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcChcJzxePlwnLCBbXCdsZWZ0XCcsIFwnY2VudGVyXCcsIFwncmlnaHRcJ10pOlxuICAgLi4uICAgICBcJ3swOntmaWxsfXthbGlnbn0xNn1cJy5mb3JtYXQodGV4dCwgZmlsbD1hbGlnbiwgYWxpZ249YWxpZ24pXG4gICAuLi5cbiAgIFwnbGVmdDw8PDw8PDw8PDw8PFwnXG4gICBcJ15eXl5eY2VudGVyXl5eXl5cJ1xuICAgXCc+Pj4+Pj4+Pj4+PnJpZ2h0XCdcbiAgID4+PlxuICAgPj4+IG9jdGV0cyA9IFsxOTIsIDE2OCwgMCwgMV1cbiAgID4+PiBcJ3s6MDJYfXs6MDJYfXs6MDJYfXs6MDJYfVwnLmZvcm1hdCgqb2N0ZXRzKVxuICAgXCdDMEE4MDAwMVwnXG4gICA+Pj4gaW50KF8sIDE2KVxuICAgMzIzMjIzNTUyMVxuICAgPj4+XG4gICA+Pj4gd2lkdGggPSA1XG4gICA+Pj4gZm9yIG51bSBpbiByYW5nZSg1LDEyKTogI2RvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRVxuICAgLi4uICAgICBmb3IgYmFzZSBpbiBcJ2RYb2JcJzpcbiAgIC4uLiAgICAgICAgIHByaW50KFwnezA6e3dpZHRofXtiYXNlfX1cJy5mb3JtYXQobnVtLCBiYXNlPWJhc2UsIHdpZHRoPXdpZHRoKSwgZW5kPVwnIFwnKVxuICAgLi4uICAgICBwcmludCgpXG4gICAuLi5cbiAgICAgICA1ICAgICA1ICAgICA1ICAgMTAxXG4gICAgICAgNiAgICAgNiAgICAgNiAgIDExMFxuICAgICAgIDcgICAgIDcgICAgIDcgICAxMTFcbiAgICAgICA4ICAgICA4ICAgIDEwICAxMDAwXG4gICAgICAgOSAgICAgOSAgICAxMSAgMTAwMVxuICAgICAgMTAgICAgIEEgICAgMTIgIDEwMTBcbiAgICAgIDExICAgICBCICAgIDEzICAxMDExXG4nLAotICdmdW5jdGlvbic6ICdcbkZ1bmN0aW9uIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tXG50aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uXG5pcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uY2UsIHdoZW5cbnRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLWNvbXB1dGVkIiB2YWx1ZSBpc1xudXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gYVxuZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhIGxpc3Qgb3IgYSBkaWN0aW9uYXJ5OlxuaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnkgYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYVxubGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgbm90XG53aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzIGlzIHRvIHVzZSBgYE5vbmVgYCBhcyB0aGVcbmRlZmF1bHQsIGFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iYGAqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZ1xuYW55IGV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWZcbnRoZSBmb3JtICJgYCoqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiYGAqYGAiIG9yICJgYCppZGVudGlmaWVyYGAiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICJgYDogZXhwcmVzc2lvbmBgIlxuZm9sbG93aW5nIHRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvblxuZXZlbiB0aG9zZSBvZiB0aGUgZm9ybSBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYC4gIEZ1bmN0aW9uc1xubWF5IGhhdmUgInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiYGAtPiBleHByZXNzaW9uYGAiIGFmdGVyIHRoZVxucGFyYW1ldGVyIGxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uXG5hbmQgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLlxuQW5ub3RhdGlvbnMgbWF5IGJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluXG50aGUgc291cmNlIGNvZGUuICBUaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZVxuc2VtYW50aWNzIG9mIGEgZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhc1xudmFsdWVzIG9mIGEgZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZVxuYGBfX2Fubm90YXRpb25zX19gYCBhdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICJgYGRlZmBgIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG4gICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG4nLAorICdmb3JtYXRzdHJpbmdzJzogJ1xuRm9ybWF0IFN0cmluZyBTeW50YXhcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBhbmQgdGhlIGBgRm9ybWF0dGVyYGAgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mIGBgRm9ybWF0dGVyYGAsXG5zdWJjbGFzc2VzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGZvcm1hdCBzdHJpbmcgc3ludGF4KS5cblxuRm9ybWF0IHN0cmluZ3MgY29udGFpbiAicmVwbGFjZW1lbnQgZmllbGRzIiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuYGB7fWBgLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG5gYHt7YGAgYW5kIGBgfX1gYC5cblxuVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czpcblxuICAgICAgcmVwbGFjZW1lbnRfZmllbGQgOjo9ICJ7IiBbZmllbGRfbmFtZV0gWyIhIiBjb252ZXJzaW9uXSBbIjoiIGZvcm1hdF9zcGVjXSAifSJcbiAgICAgIGZpZWxkX25hbWUgICAgICAgIDo6PSBhcmdfbmFtZSAoIi4iIGF0dHJpYnV0ZV9uYW1lIHwgIlsiIGVsZW1lbnRfaW5kZXggIl0iKSpcbiAgICAgIGFyZ19uYW1lICAgICAgICAgIDo6PSBbaWRlbnRpZmllciB8IGludGVnZXJdXG4gICAgICBhdHRyaWJ1dGVfbmFtZSAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgZWxlbWVudF9pbmRleCAgICAgOjo9IGludGVnZXIgfCBpbmRleF9zdHJpbmdcbiAgICAgIGluZGV4X3N0cmluZyAgICAgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJdIj4gK1xuICAgICAgY29udmVyc2lvbiAgICAgICAgOjo9ICJyIiB8ICJzIiB8ICJhIlxuICAgICAgZm9ybWF0X3NwZWMgICAgICAgOjo9IDxkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbj5cblxuSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBjYW4gc3RhcnQgd2l0aCBhXG4qZmllbGRfbmFtZSogdGhhdCBzcGVjaWZpZXMgdGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBmb3JtYXR0ZWRcbmFuZCBpbnNlcnRlZCBpbnRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZW1lbnQgZmllbGQuIFRoZVxuKmZpZWxkX25hbWUqIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb24gcG9pbnQgYGBcJyFcJ2BgLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaFxuaXMgcHJlY2VkZWQgYnkgYSBjb2xvbiBgYFwnOlwnYGAuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0XG5mb3IgdGhlIHJlcGxhY2VtZW50IHZhbHVlLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXIgYVxubnVtYmVyIG9yIGEga2V5d29yZC4gIElmIGl0XCdzIGEgbnVtYmVyLCBpdCByZWZlcnMgdG8gYSBwb3NpdGlvbmFsXG5hcmd1bWVudCwgYW5kIGlmIGl0XCdzIGEga2V5d29yZCwgaXQgcmVmZXJzIHRvIGEgbmFtZWQga2V5d29yZFxuYXJndW1lbnQuICBJZiB0aGUgbnVtZXJpY2FsIGFyZ19uYW1lcyBpbiBhIGZvcm1hdCBzdHJpbmcgYXJlIDAsIDEsIDIsXG4uLi4gaW4gc2VxdWVuY2UsIHRoZXkgY2FuIGFsbCBiZSBvbWl0dGVkIChub3QganVzdCBzb21lKSBhbmQgdGhlXG5udW1iZXJzIDAsIDEsIDIsIC4uLiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhhdCBvcmRlci5cbkJlY2F1c2UgKmFyZ19uYW1lKiBpcyBub3QgcXVvdGUtZGVsaW1pdGVkLCBpdCBpcyBub3QgcG9zc2libGUgdG9cbnNwZWNpZnkgYXJiaXRyYXJ5IGRpY3Rpb25hcnkga2V5cyAoZS5nLiwgdGhlIHN0cmluZ3MgYGBcJzEwXCdgYCBvclxuYGBcJzotXVwnYGApIHdpdGhpbiBhIGZvcm1hdCBzdHJpbmcuIFRoZSAqYXJnX25hbWUqIGNhbiBiZSBmb2xsb3dlZCBieVxuYW55IG51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlXG5mb3JtIGBgXCcubmFtZVwnYGAgc2VsZWN0cyB0aGUgbmFtZWQgYXR0cmlidXRlIHVzaW5nIGBgZ2V0YXR0cigpYGAsXG53aGlsZSBhbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBgXCdbaW5kZXhdXCdgYCBkb2VzIGFuIGluZGV4IGxvb2t1cFxudXNpbmcgYGBfX2dldGl0ZW1fXygpYGAuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlXG5vbWl0dGVkLCBzbyBgYFwne30ge31cJ2BgIGlzIGVxdWl2YWxlbnQgdG8gYGBcJ3swfSB7MX1cJ2BgLlxuXG5Tb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOlxuXG4gICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdGx5IHJlZmVyZW5jZXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJGcm9tIHt9IHRvIHt9IiAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IlxuICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgXCduYW1lXCdcbiAgICJXZWlnaHQgaW4gdG9ucyB7MC53ZWlnaHR9IiAgICAgICMgXCd3ZWlnaHRcJyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmdcbiAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50IFwncGxheWVyc1wnLlxuXG5UaGUgKmNvbnZlcnNpb24qIGZpZWxkIGNhdXNlcyBhIHR5cGUgY29lcmNpb24gYmVmb3JlIGZvcm1hdHRpbmcuXG5Ob3JtYWxseSwgdGhlIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGVcbmBgX19mb3JtYXRfXygpYGAgbWV0aG9kIG9mIHRoZSB2YWx1ZSBpdHNlbGYuICBIb3dldmVyLCBpbiBzb21lIGNhc2VzXG5pdCBpcyBkZXNpcmFibGUgdG8gZm9yY2UgYSB0eXBlIHRvIGJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZyxcbm92ZXJyaWRpbmcgaXRzIG93biBkZWZpbml0aW9uIG9mIGZvcm1hdHRpbmcuICBCeSBjb252ZXJ0aW5nIHRoZSB2YWx1ZVxudG8gYSBzdHJpbmcgYmVmb3JlIGNhbGxpbmcgYGBfX2Zvcm1hdF9fKClgYCwgdGhlIG5vcm1hbCBmb3JtYXR0aW5nXG5sb2dpYyBpcyBieXBhc3NlZC5cblxuVGhyZWUgY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogYGBcJyFzXCdgYCB3aGljaCBjYWxsc1xuYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZSwgYGBcJyFyXCdgYCB3aGljaCBjYWxscyBgYHJlcHIoKWBgIGFuZCBgYFwnIWFcJ2BgXG53aGljaCBjYWxscyBgYGFzY2lpKClgYC5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJNb3JlIHshYX0iICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbHMgYXNjaWkoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluIGBgZm9ybWF0KClgYCBmdW5jdGlvbi4gIEVhY2ggZm9ybWF0dGFibGUgdHlwZSBtYXkgZGVmaW5lIGhvd1xudGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIHRvIGJlIGludGVycHJldGVkLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIGZvcm1hdFxuc3BlY2lmaWNhdGlvbnMsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcmUgb25seVxuc3VwcG9ydGVkIGJ5IHRoZSBudW1lcmljIHR5cGVzLlxuXG5BIGdlbmVyYWwgY29udmVudGlvbiBpcyB0aGF0IGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgKGBgIiJgYCkgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCBgYHN0cigpYGAgb24gdGhlIHZhbHVlLiBBIG5vbi1cbmVtcHR5IGZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhIGNoYXJhY3RlciBvdGhlciB0aGFuIFwne1wnIG9yIFwnfVwnPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cblRoZSAqZmlsbCogY2hhcmFjdGVyIGNhbiBiZSBhbnkgY2hhcmFjdGVyIG90aGVyIHRoYW4gXCd7XCcgb3IgXCd9XCcuICBUaGVcbnByZXNlbmNlIG9mIGEgZmlsbCBjaGFyYWN0ZXIgaXMgc2lnbmFsZWQgYnkgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmdcbml0LCB3aGljaCBtdXN0IGJlIG9uZSBvZiB0aGUgYWxpZ25tZW50IG9wdGlvbnMuICBJZiB0aGUgc2Vjb25kXG5jaGFyYWN0ZXIgb2YgKmZvcm1hdF9zcGVjKiBpcyBub3QgYSB2YWxpZCBhbGlnbm1lbnQgb3B0aW9uLCB0aGVuIGl0IGlzXG5hc3N1bWVkIHRoYXQgYm90aCB0aGUgZmlsbCBjaGFyYWN0ZXIgYW5kIHRoZSBhbGlnbm1lbnQgb3B0aW9uIGFyZVxuYWJzZW50LlxuXG5UaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCc8XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IG9iamVjdHMpLiAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz5cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIHJpZ2h0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG51bWJlcnMpLiAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPVwnYGAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgfCAgICAgICAgICAgfCBidXQgYmVmb3JlIHRoZSBkaWdpdHMuICBUaGlzIGlzIHVzZWQgZm9yIHByaW50aW5nIGZpZWxkcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW4gdGhlIGZvcm0gXCcrMDAwMDAwMTIwXCcuIFRoaXMgYWxpZ25tZW50IG9wdGlvbiBpcyBvbmx5ICAgIHxcbiAgIHwgICAgICAgICAgIHwgdmFsaWQgZm9yIG51bWVyaWMgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnXlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgY2VudGVyZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJytcJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgIHwgICAgICAgICAgIHwgd2VsbCBhcyBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnLVwnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBuZWdhdGl2ZSAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4gICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IHNwYWNlICAgICB8IGluZGljYXRlcyB0aGF0IGEgbGVhZGluZyBzcGFjZSBzaG91bGQgYmUgdXNlZCBvbiBwb3NpdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzLCBhbmQgYSBtaW51cyBzaWduIG9uIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBgYFwnI1wnYGAgb3B0aW9uIGNhdXNlcyB0aGUgImFsdGVybmF0ZSBmb3JtIiB0byBiZSB1c2VkIGZvciB0aGVcbmNvbnZlcnNpb24uICBUaGUgYWx0ZXJuYXRlIGZvcm0gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50XG50eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXIsIGZsb2F0LCBjb21wbGV4IGFuZFxuRGVjaW1hbCB0eXBlcy4gRm9yIGludGVnZXJzLCB3aGVuIGJpbmFyeSwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dFxuaXMgdXNlZCwgdGhpcyBvcHRpb24gYWRkcyB0aGUgcHJlZml4IHJlc3BlY3RpdmUgYGBcJzBiXCdgYCwgYGBcJzBvXCdgYCwgb3JcbmBgXCcweFwnYGAgdG8gdGhlIG91dHB1dCB2YWx1ZS4gRm9yIGZsb2F0cywgY29tcGxleCBhbmQgRGVjaW1hbCB0aGVcbmFsdGVybmF0ZSBmb3JtIGNhdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIHRvIGFsd2F5cyBjb250YWluIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyLCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuIE5vcm1hbGx5LCBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgdGhlc2UgY29udmVyc2lvbnNcbm9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LiBJbiBhZGRpdGlvbiwgZm9yIGBgXCdnXCdgYCBhbmQgYGBcJ0dcJ2BgXG5jb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC5cblxuVGhlIGBgXCcsXCdgYCBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzXG5zZXBhcmF0b3IuIEZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgYGBcJ25cJ2BgIGludGVnZXJcbnByZXNlbnRhdGlvbiB0eXBlIGluc3RlYWQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IEFkZGVkIHRoZSBgYFwnLFwnYGAgb3B0aW9uIChzZWUgYWxzbyAqKlBFUFxuMzc4KiopLlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuUHJlY2VkaW5nIHRoZSAqd2lkdGgqIGZpZWxkIGJ5IGEgemVybyAoYGBcJzBcJ2BgKSBjaGFyYWN0ZXIgZW5hYmxlc1xuc2lnbi1hd2FyZSB6ZXJvLXBhZGRpbmcgZm9yIG51bWVyaWMgdHlwZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYVxuKmZpbGwqIGNoYXJhY3RlciBvZiBgYFwnMFwnYGAgd2l0aCBhbiAqYWxpZ25tZW50KiB0eXBlIG9mIGBgXCc9XCdgYC5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoIGBgXCdmXCdgYCBhbmQgYGBcJ0ZcJ2BgLCBvciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNpbWFsXG5wb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBmb3JtYXR0ZWQgd2l0aCBgYFwnZ1wnYGAgb3IgYGBcJ0dcJ2BgLlxuRm9yIG5vbi1udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW5cbm90aGVyIHdvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LlxuVGhlICpwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdzXCdgYCAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICB8ICAgICAgICAgICB8IG1heSBiZSBvbWl0dGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ3NcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBhdmFpbGFibGUgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdiXCdgYCAgIHwgQmluYXJ5IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMi4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnY1wnYGAgICB8IENoYXJhY3Rlci4gQ29udmVydHMgdGhlIGludGVnZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgICAgICAgfFxuICAgfCAgICAgICAgICAgfCB1bmljb2RlIGNoYXJhY3RlciBiZWZvcmUgcHJpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdkXCdgYCAgIHwgRGVjaW1hbCBJbnRlZ2VyLiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxMC4gICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnb1wnYGAgICB8IE9jdGFsIGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgOC4gICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ3hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgbG93ZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnWFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdkXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdFxuYGBcJ25cJ2BgIGFuZCBOb25lKS4gV2hlbiBkb2luZyBzbywgYGBmbG9hdCgpYGAgaXMgdXNlZCB0byBjb252ZXJ0IHRoZVxuaW50ZWdlciB0byBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZWZvcmUgZm9ybWF0dGluZy5cblxuVGhlIGF2YWlsYWJsZSBwcmVzZW50YXRpb24gdHlwZXMgZm9yIGZsb2F0aW5nIHBvaW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdlXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFByaW50cyB0aGUgbnVtYmVyIGluIHNjaWVudGlmaWMgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG5vdGF0aW9uIHVzaW5nIHRoZSBsZXR0ZXIgXCdlXCcgdG8gaW5kaWNhdGUgdGhlIGV4cG9uZW50LiAgICB8XG4gICB8ICAgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBgYDZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gU2FtZSBhcyBgYFwnZVwnYGAgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIFwnRVwnIGFzIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gRGlzcGxheXMgdGhlIG51bWJlciBhcyBhIGZpeGVkLXBvaW50IG51bWJlci4gIHxcbiAgIHwgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRlwnYGAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzIGBgXCdmXCdgYCwgYnV0IGNvbnZlcnRzIGBgbmFuYGAgdG8gICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgTkFOYGAgYW5kIGBgaW5mYGAgdG8gYGBJTkZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gIEZvciBhIGdpdmVuIHByZWNpc2lvbiBgYHAgPj0gMWBgLCB0aGlzICAgIHxcbiAgIHwgICAgICAgICAgIHwgcm91bmRzIHRoZSBudW1iZXIgdG8gYGBwYGAgc2lnbmlmaWNhbnQgZGlnaXRzIGFuZCB0aGVuICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHMgdGhlIHJlc3VsdCBpbiBlaXRoZXIgZml4ZWQtcG9pbnQgZm9ybWF0IG9yIGluICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzY2llbnRpZmljIG5vdGF0aW9uLCBkZXBlbmRpbmcgb24gaXRzIG1hZ25pdHVkZS4gIFRoZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzZSBydWxlcyBhcmUgYXMgZm9sbG93czogc3VwcG9zZSB0aGF0IHRoZSByZXN1bHQgICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAgd291bGQgaGF2ZSBleHBvbmVudCBgYGV4cGBgLiAgVGhlbiBpZiBgYC00IDw9IGV4cCAgfFxuICAgfCAgICAgICAgICAgfCA8IHBgYCwgdGhlIG51bWJlciBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBcJ2ZcJ2BgIGFuZCBwcmVjaXNpb24gYGBwLTEtZXhwYGAuIE90aGVyd2lzZSwgdGhlIG51bWJlciAgIHxcbiAgIHwgICAgICAgICAgIHwgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgYGBcJ2VcJ2BgIGFuZCBwcmVjaXNpb24gIHxcbiAgIHwgICAgICAgICAgIHwgYGBwLTFgYC4gSW4gYm90aCBjYXNlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIGFyZSAgICB8XG4gICB8ICAgICAgICAgICB8IHJlbW92ZWQgZnJvbSB0aGUgc2lnbmlmaWNhbmQsIGFuZCB0aGUgZGVjaW1hbCBwb2ludCBpcyAgICAgfFxuICAgfCAgICAgICAgICAgfCBhbHNvIHJlbW92ZWQgaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBkaWdpdHMgZm9sbG93aW5nICAgIHxcbiAgIHwgICAgICAgICAgIHwgaXQuICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB8XG4gICB8ICAgICAgICAgICB8IHplcm8sIGFuZCBuYW5zLCBhcmUgZm9ybWF0dGVkIGFzIGBgaW5mYGAsIGBgLWluZmBgLCBgYDBgYCwgfFxuICAgfCAgICAgICAgICAgfCBgYC0wYGAgYW5kIGBgbmFuYGAgcmVzcGVjdGl2ZWx5LCByZWdhcmRsZXNzIG9mIHRoZSAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzaW9uLiAgQSBwcmVjaXNpb24gb2YgYGAwYGAgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50ICB8XG4gICB8ICAgICAgICAgICB8IHRvIGEgcHJlY2lzaW9uIG9mIGBgMWBgLiAgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gU2FtZSBhcyBgYFwnZ1wnYGAgZXhjZXB0IHN3aXRjaGVzIHRvIGBgXCdFXCdgYCB8XG4gICB8ICAgICAgICAgICB8IGlmIHRoZSBudW1iZXIgZ2V0cyB0b28gbGFyZ2UuIFRoZSByZXByZXNlbnRhdGlvbnMgb2YgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBpbmZpbml0eSBhbmQgTmFOIGFyZSB1cHBlcmNhc2VkLCB0b28uICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdnXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJyVcJ2BgICAgfCBQZXJjZW50YWdlLiBNdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMTAwIGFuZCBkaXNwbGF5cyBpbiAgIHxcbiAgIHwgICAgICAgICAgIHwgZml4ZWQgKGBgXCdmXCdgYCkgZm9ybWF0LCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFNpbWlsYXIgdG8gYGBcJ2dcJ2BgLCBleGNlcHQgd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCAgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBkZWNpbWFsIHBvaW50IGFuZCBhIGRlZmF1bHQgcHJlY2lzaW9uIG9mIDEyLiBUaGlzIGlzICAgfFxuICAgfCAgICAgICAgICAgfCBpbnRlbmRlZCB0byBtYXRjaCBgYHN0cigpYGAsIGV4Y2VwdCB5b3UgY2FuIGFkZCB0aGUgb3RoZXIgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0IG1vZGlmaWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5cbkZvcm1hdCBleGFtcGxlc1xuPT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgbmV3IGZvcm1hdCBzeW50YXggYW5kIGNvbXBhcmlzb25cbndpdGggdGhlIG9sZCBgYCVgYC1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZFxuYGAlYGAtZm9ybWF0dGluZywgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGBge31gYCBhbmQgd2l0aCBgYDpgYCB1c2VkXG5pbnN0ZWFkIG9mIGBgJWBgLiBGb3IgZXhhbXBsZSwgYGBcJyUwMy4yZlwnYGAgY2FuIGJlIHRyYW5zbGF0ZWQgdG9cbmBgXCd7OjAzLjJmfVwnYGAuXG5cblRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbHNvIHN1cHBvcnRzIG5ldyBhbmQgZGlmZmVyZW50IG9wdGlvbnMsIHNob3duXG5pbiB0aGUgZm9sbG93IGV4YW1wbGVzLlxuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IHBvc2l0aW9uOlxuXG4gICA+Pj4gXCd7MH0sIHsxfSwgezJ9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwne30sIHt9LCB7fVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKSAgIyAzLjErIG9ubHlcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdCgqXCdhYmNcJykgICAgICAjIHVucGFja2luZyBhcmd1bWVudCBzZXF1ZW5jZVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3swfXsxfXswfVwnLmZvcm1hdChcJ2FicmFcJywgXCdjYWRcJykgICAjIGFyZ3VtZW50c1wnIGluZGljZXMgY2FuIGJlIHJlcGVhdGVkXG4gICBcJ2FicmFjYWRhYnJhXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBuYW1lOlxuXG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQobGF0aXR1ZGU9XCczNy4yNE5cJywgbG9uZ2l0dWRlPVwnLTExNS44MVdcJylcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuICAgPj4+IGNvb3JkID0ge1wnbGF0aXR1ZGVcJzogXCczNy4yNE5cJywgXCdsb25naXR1ZGVcJzogXCctMTE1LjgxV1wnfVxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KCoqY29vcmQpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGF0dHJpYnV0ZXM6XG5cbiAgID4+PiBjID0gMy01alxuICAgPj4+IChcJ1RoZSBjb21wbGV4IG51bWJlciB7MH0gaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCB7MC5yZWFsfSBcJ1xuICAgLi4uICBcJ2FuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgezAuaW1hZ30uXCcpLmZvcm1hdChjKVxuICAgXCdUaGUgY29tcGxleCBudW1iZXIgKDMtNWopIGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgMy4wIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgLTUuMC5cJ1xuICAgPj4+IGNsYXNzIFBvaW50OlxuICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6XG4gICAuLi4gICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHlcbiAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdQb2ludCh7c2VsZi54fSwge3NlbGYueX0pXCcuZm9ybWF0KHNlbGY9c2VsZilcbiAgIC4uLlxuICAgPj4+IHN0cihQb2ludCg0LCAyKSlcbiAgIFwnUG9pbnQoNCwgMilcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgaXRlbXM6XG5cbiAgID4+PiBjb29yZCA9ICgzLCA1KVxuICAgPj4+IFwnWDogezBbMF19OyAgWTogezBbMV19XCcuZm9ybWF0KGNvb3JkKVxuICAgXCdYOiAzOyAgWTogNVwnXG5cblJlcGxhY2luZyBgYCVzYGAgYW5kIGBgJXJgYDpcblxuICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7IXJ9OyBzdHIoKSBkb2VzblwndDogeyFzfSIuZm9ybWF0KFwndGVzdDFcJywgXCd0ZXN0MlwnKVxuICAgInJlcHIoKSBzaG93cyBxdW90ZXM6IFwndGVzdDFcJzsgc3RyKCkgZG9lc25cJ3Q6IHRlc3QyIlxuXG5BbGlnbmluZyB0aGUgdGV4dCBhbmQgc3BlY2lmeWluZyBhIHdpZHRoOlxuXG4gICA+Pj4gXCd7OjwzMH1cJy5mb3JtYXQoXCdsZWZ0IGFsaWduZWRcJylcbiAgIFwnbGVmdCBhbGlnbmVkICAgICAgICAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6PjMwfVwnLmZvcm1hdChcJ3JpZ2h0IGFsaWduZWRcJylcbiAgIFwnICAgICAgICAgICAgICAgICByaWdodCBhbGlnbmVkXCdcbiAgID4+PiBcJ3s6XjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpXG4gICBcJyAgICAgICAgICAgY2VudGVyZWQgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7OipeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJykgICMgdXNlIFwnKlwnIGFzIGEgZmlsbCBjaGFyXG4gICBcJyoqKioqKioqKioqY2VudGVyZWQqKioqKioqKioqKlwnXG5cblJlcGxhY2luZyBgYCUrZmBgLCBgYCUtZmBgLCBhbmQgYGAlIGZgYCBhbmQgc3BlY2lmeWluZyBhIHNpZ246XG5cbiAgID4+PiBcJ3s6K2Z9OyB7OitmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBpdCBhbHdheXNcbiAgIFwnKzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezogZn07IHs6IGZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnNcbiAgIFwnIDMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezotZn07IHs6LWZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgXCd7OmZ9OyB7OmZ9XCdcbiAgIFwnMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG5cblJlcGxhY2luZyBgYCV4YGAgYW5kIGBgJW9gYCBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50XG5iYXNlczpcblxuICAgPj4+ICMgZm9ybWF0IGFsc28gc3VwcG9ydHMgYmluYXJ5IG51bWJlcnNcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6eH07ICBvY3Q6IHswOm99OyAgYmluOiB7MDpifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAyYTsgIG9jdDogNTI7ICBiaW46IDEwMTAxMFwnXG4gICA+Pj4gIyB3aXRoIDB4LCAwbywgb3IgMGIgYXMgcHJlZml4OlxuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDojeH07ICBvY3Q6IHswOiNvfTsgIGJpbjogezA6I2J9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDB4MmE7ICBvY3Q6IDBvNTI7ICBiaW46IDBiMTAxMDEwXCdcblxuVXNpbmcgdGhlIGNvbW1hIGFzIGEgdGhvdXNhbmRzIHNlcGFyYXRvcjpcblxuICAgPj4+IFwnezosfVwnLmZvcm1hdCgxMjM0NTY3ODkwKVxuICAgXCcxLDIzNCw1NjcsODkwXCdcblxuRXhwcmVzc2luZyBhIHBlcmNlbnRhZ2U6XG5cbiAgID4+PiBwb2ludHMgPSAxOVxuICAgPj4+IHRvdGFsID0gMjJcbiAgID4+PiBcJ0NvcnJlY3QgYW5zd2VyczogezouMiV9XCcuZm9ybWF0KHBvaW50cy90b3RhbClcbiAgIFwnQ29ycmVjdCBhbnN3ZXJzOiA4Ni4zNiVcJ1xuXG5Vc2luZyB0eXBlLXNwZWNpZmljIGZvcm1hdHRpbmc6XG5cbiAgID4+PiBpbXBvcnQgZGF0ZXRpbWVcbiAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OClcbiAgID4+PiBcJ3s6JVktJW0tJWQgJUg6JU06JVN9XCcuZm9ybWF0KGQpXG4gICBcJzIwMTAtMDctMDQgMTI6MTU6NThcJ1xuXG5OZXN0aW5nIGFyZ3VtZW50cyBhbmQgbW9yZSBjb21wbGV4IGV4YW1wbGVzOlxuXG4gICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcChcJzxePlwnLCBbXCdsZWZ0XCcsIFwnY2VudGVyXCcsIFwncmlnaHRcJ10pOlxuICAgLi4uICAgICBcJ3swOntmaWxsfXthbGlnbn0xNn1cJy5mb3JtYXQodGV4dCwgZmlsbD1hbGlnbiwgYWxpZ249YWxpZ24pXG4gICAuLi5cbiAgIFwnbGVmdDw8PDw8PDw8PDw8PFwnXG4gICBcJ15eXl5eY2VudGVyXl5eXl5cJ1xuICAgXCc+Pj4+Pj4+Pj4+PnJpZ2h0XCdcbiAgID4+PlxuICAgPj4+IG9jdGV0cyA9IFsxOTIsIDE2OCwgMCwgMV1cbiAgID4+PiBcJ3s6MDJYfXs6MDJYfXs6MDJYfXs6MDJYfVwnLmZvcm1hdCgqb2N0ZXRzKVxuICAgXCdDMEE4MDAwMVwnXG4gICA+Pj4gaW50KF8sIDE2KVxuICAgMzIzMjIzNTUyMVxuICAgPj4+XG4gICA+Pj4gd2lkdGggPSA1XG4gICA+Pj4gZm9yIG51bSBpbiByYW5nZSg1LDEyKTogI2RvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRVxuICAgLi4uICAgICBmb3IgYmFzZSBpbiBcJ2RYb2JcJzpcbiAgIC4uLiAgICAgICAgIHByaW50KFwnezA6e3dpZHRofXtiYXNlfX1cJy5mb3JtYXQobnVtLCBiYXNlPWJhc2UsIHdpZHRoPXdpZHRoKSwgZW5kPVwnIFwnKVxuICAgLi4uICAgICBwcmludCgpXG4gICAuLi5cbiAgICAgICA1ICAgICA1ICAgICA1ICAgMTAxXG4gICAgICAgNiAgICAgNiAgICAgNiAgIDExMFxuICAgICAgIDcgICAgIDcgICAgIDcgICAxMTFcbiAgICAgICA4ICAgICA4ICAgIDEwICAxMDAwXG4gICAgICAgOSAgICAgOSAgICAxMSAgMTAwMVxuICAgICAgMTAgICAgIEEgICAgMTIgIDEwMTBcbiAgICAgIDExICAgICBCICAgIDEzICAxMDExXG4nLAorICdmdW5jdGlvbic6ICdcbkZ1bmN0aW9uIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tXG50aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGVcbmZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzXG5ldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1cbmNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50XG50byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGFcbmxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieVxuYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLlxuVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlXG5gYE5vbmVgYCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlXG5mdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iYGAqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZ1xuYW55IGV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWZcbnRoZSBmb3JtICJgYCoqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiYGAqYGAiIG9yICJgYCppZGVudGlmaWVyYGAiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICJgYDogZXhwcmVzc2lvbmBgIlxuZm9sbG93aW5nIHRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvblxuZXZlbiB0aG9zZSBvZiB0aGUgZm9ybSBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYC4gIEZ1bmN0aW9uc1xubWF5IGhhdmUgInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiYGAtPiBleHByZXNzaW9uYGAiIGFmdGVyIHRoZVxucGFyYW1ldGVyIGxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uXG5hbmQgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLlxuQW5ub3RhdGlvbnMgbWF5IGJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluXG50aGUgc291cmNlIGNvZGUuICBUaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZVxuc2VtYW50aWNzIG9mIGEgZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhc1xudmFsdWVzIG9mIGEgZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZVxuYGBfX2Fubm90YXRpb25zX19gYCBhdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICJgYGRlZmBgIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG4gICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG4nLAogICdnbG9iYWwnOiAnXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBnbG9iYWxfc3RtdCA6Oj0gImdsb2JhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgaXMgYSBkZWNsYXJhdGlvbiB3aGljaCBob2xkcyBmb3IgdGhlIGVudGlyZVxuY3VycmVudCBjb2RlIGJsb2NrLiAgSXQgbWVhbnMgdGhhdCB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIGFyZSB0byBiZVxuaW50ZXJwcmV0ZWQgYXMgZ2xvYmFscy4gIEl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gYXNzaWduIHRvIGEgZ2xvYmFsXG52YXJpYWJsZSB3aXRob3V0IGBgZ2xvYmFsYGAsIGFsdGhvdWdoIGZyZWUgdmFyaWFibGVzIG1heSByZWZlciB0b1xuZ2xvYmFscyB3aXRob3V0IGJlaW5nIGRlY2xhcmVkIGdsb2JhbC5cblxuTmFtZXMgbGlzdGVkIGluIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZVxuY29kZSBibG9jayB0ZXh0dWFsbHkgcHJlY2VkaW5nIHRoYXQgYGBnbG9iYWxgYCBzdGF0ZW1lbnQuXG5cbk5hbWVzIGxpc3RlZCBpbiBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG11c3Qgbm90IGJlIGRlZmluZWQgYXMgZm9ybWFsXG5wYXJhbWV0ZXJzIG9yIGluIGEgYGBmb3JgYCBsb29wIGNvbnRyb2wgdGFyZ2V0LCBgYGNsYXNzYGAgZGVmaW5pdGlvbixcbmZ1bmN0aW9uIGRlZmluaXRpb24sIG9yIGBgaW1wb3J0YGAgc3RhdGVtZW50LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90XG5lbmZvcmNlIHRoZSBsYXR0ZXIgdHdvIHJlc3RyaWN0aW9ucywgYnV0IHByb2dyYW1zIHNob3VsZCBub3QgYWJ1c2VcbnRoaXMgZnJlZWRvbSwgYXMgZnV0dXJlIGltcGxlbWVudGF0aW9ucyBtYXkgZW5mb3JjZSB0aGVtIG9yIHNpbGVudGx5XG5jaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0uXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIHRoZSBgYGdsb2JhbGBgIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBwYXJzZXIuXG5JdCBhcHBsaWVzIG9ubHkgdG8gY29kZSBwYXJzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgYGBnbG9iYWxgYFxuc3RhdGVtZW50LiBJbiBwYXJ0aWN1bGFyLCBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IGNvbnRhaW5lZCBpbiBhIHN0cmluZ1xub3IgY29kZSBvYmplY3Qgc3VwcGxpZWQgdG8gdGhlIGJ1aWx0LWluIGBgZXhlYygpYGAgZnVuY3Rpb24gZG9lcyBub3RcbmFmZmVjdCB0aGUgY29kZSBibG9jayAqY29udGFpbmluZyogdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBjb2RlXG5jb250YWluZWQgaW4gc3VjaCBhIHN0cmluZyBpcyB1bmFmZmVjdGVkIGJ5IGBgZ2xvYmFsYGAgc3RhdGVtZW50cyBpblxudGhlIGNvZGUgY29udGFpbmluZyB0aGUgZnVuY3Rpb24gY2FsbC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlXG5gYGV2YWwoKWBgIGFuZCBgYGNvbXBpbGUoKWBgIGZ1bmN0aW9ucy5cbicsCiAgJ2lkLWNsYXNzZXMnOiAnXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbmBgXypgYFxuICAgTm90IGltcG9ydGVkIGJ5IGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYC4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXJcbiAgIGBgX2BgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2ZcbiAgIHRoZSBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgYGBidWlsdGluc2BgIG1vZHVsZS4gIFdoZW5cbiAgIG5vdCBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBgYF9gYCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3RcbiAgIGRlZmluZWQuIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lIGBgX2BgIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdldHRleHRgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG5gYF9fKl9fYGBcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mIGBgX18qX19gYCBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lc1xuICAgbm90IGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlXG4gICB3aXRob3V0IHdhcm5pbmcuXG5cbmBgX18qYGBcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAogICdpZGVudGlmaWVycyc6ICdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9ucy5cblxuVGhlIHN5bnRheCBvZiBpZGVudGlmaWVycyBpbiBQeXRob24gaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgc3RhbmRhcmRcbmFubmV4IFVBWC0zMSwgd2l0aCBlbGFib3JhdGlvbiBhbmQgY2hhbmdlcyBhcyBkZWZpbmVkIGJlbG93OyBzZWUgYWxzb1xuKipQRVAgMzEzMSoqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5cbldpdGhpbiB0aGUgQVNDSUkgcmFuZ2UgKFUrMDAwMS4uVSswMDdGKSwgdGhlIHZhbGlkIGNoYXJhY3RlcnMgZm9yXG5pZGVudGlmaWVycyBhcmUgdGhlIHNhbWUgYXMgaW4gUHl0aG9uIDIueDogdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlXG5sZXR0ZXJzIGBgQWBgIHRocm91Z2ggYGBaYGAsIHRoZSB1bmRlcnNjb3JlIGBgX2BgIGFuZCwgZXhjZXB0IGZvciB0aGVcbmZpcnN0IGNoYXJhY3RlciwgdGhlIGRpZ2l0cyBgYDBgYCB0aHJvdWdoIGBgOWBgLlxuXG5QeXRob24gMy4wIGludHJvZHVjZXMgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGZyb20gb3V0c2lkZSB0aGUgQVNDSUlcbnJhbmdlIChzZWUgKipQRVAgMzEzMSoqKS4gIEZvciB0aGVzZSBjaGFyYWN0ZXJzLCB0aGUgY2xhc3NpZmljYXRpb25cbnVzZXMgdGhlIHZlcnNpb24gb2YgdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGFzIGluY2x1ZGVkIGluIHRoZVxuYGB1bmljb2RlZGF0YWBgIG1vZHVsZS5cblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG4gICBpZGVudGlmaWVyICAgOjo9IHhpZF9zdGFydCB4aWRfY29udGludWUqXG4gICBpZF9zdGFydCAgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBnZW5lcmFsIGNhdGVnb3JpZXMgTHUsIExsLCBMdCwgTG0sIExvLCBObCwgdGhlIHVuZGVyc2NvcmUsIGFuZCBjaGFyYWN0ZXJzIHdpdGggdGhlIE90aGVyX0lEX1N0YXJ0IHByb3BlcnR5PlxuICAgaWRfY29udGludWUgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQsIHBsdXMgY2hhcmFjdGVycyBpbiB0aGUgY2F0ZWdvcmllcyBNbiwgTWMsIE5kLCBQYyBhbmQgb3RoZXJzIHdpdGggdGhlIE90aGVyX0lEX0NvbnRpbnVlIHByb3BlcnR5PlxuICAgeGlkX3N0YXJ0ICAgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9zdGFydCB4aWRfY29udGludWUqIj5cbiAgIHhpZF9jb250aW51ZSA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX2NvbnRpbnVlIHdob3NlIE5GS0Mgbm9ybWFsaXphdGlvbiBpcyBpbiAiaWRfY29udGludWUqIj5cblxuVGhlIFVuaWNvZGUgY2F0ZWdvcnkgY29kZXMgbWVudGlvbmVkIGFib3ZlIHN0YW5kIGZvcjpcblxuKiAqTHUqIC0gdXBwZXJjYXNlIGxldHRlcnNcblxuKiAqTGwqIC0gbG93ZXJjYXNlIGxldHRlcnNcblxuKiAqTHQqIC0gdGl0bGVjYXNlIGxldHRlcnNcblxuKiAqTG0qIC0gbW9kaWZpZXIgbGV0dGVyc1xuXG4qICpMbyogLSBvdGhlciBsZXR0ZXJzXG5cbiogKk5sKiAtIGxldHRlciBudW1iZXJzXG5cbiogKk1uKiAtIG5vbnNwYWNpbmcgbWFya3NcblxuKiAqTWMqIC0gc3BhY2luZyBjb21iaW5pbmcgbWFya3NcblxuKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzXG5cbiogKlBjKiAtIGNvbm5lY3RvciBwdW5jdHVhdGlvbnNcblxuKiAqT3RoZXJfSURfU3RhcnQqIC0gZXhwbGljaXQgbGlzdCBvZiBjaGFyYWN0ZXJzIGluIFByb3BMaXN0LnR4dCB0b1xuICBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiogKk90aGVyX0lEX0NvbnRpbnVlKiAtIGxpa2V3aXNlXG5cbkFsbCBpZGVudGlmaWVycyBhcmUgY29udmVydGVkIGludG8gdGhlIG5vcm1hbCBmb3JtIE5GS0Mgd2hpbGUgcGFyc2luZztcbmNvbXBhcmlzb24gb2YgaWRlbnRpZmllcnMgaXMgYmFzZWQgb24gTkZLQy5cblxuQSBub24tbm9ybWF0aXZlIEhUTUwgZmlsZSBsaXN0aW5nIGFsbCB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9yXG5Vbmljb2RlIDQuMSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5kY2wuaHBpLnVuaS1cbnBvdHNkYW0uZGUvaG9tZS9sb2V3aXMvdGFibGUtMzEzMS5odG1sLlxuXG5cbktleXdvcmRzXG49PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkIGFzIHJlc2VydmVkIHdvcmRzLCBvciAqa2V5d29yZHMqIG9mXG50aGUgbGFuZ3VhZ2UsIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBvcmRpbmFyeSBpZGVudGlmaWVycy4gIFRoZXkgbXVzdFxuYmUgc3BlbGxlZCBleGFjdGx5IGFzIHdyaXR0ZW4gaGVyZTpcblxuICAgRmFsc2UgICAgICBjbGFzcyAgICAgIGZpbmFsbHkgICAgaXMgICAgICAgICByZXR1cm5cbiAgIE5vbmUgICAgICAgY29udGludWUgICBmb3IgICAgICAgIGxhbWJkYSAgICAgdHJ5XG4gICBUcnVlICAgICAgIGRlZiAgICAgICAgZnJvbSAgICAgICBub25sb2NhbCAgIHdoaWxlXG4gICBhbmQgICAgICAgIGRlbCAgICAgICAgZ2xvYmFsICAgICBub3QgICAgICAgIHdpdGhcbiAgIGFzICAgICAgICAgZWxpZiAgICAgICBpZiAgICAgICAgIG9yICAgICAgICAgeWllbGRcbiAgIGFzc2VydCAgICAgZWxzZSAgICAgICBpbXBvcnQgICAgIHBhc3NcbiAgIGJyZWFrICAgICAgZXhjZXB0ICAgICBpbiAgICAgICAgIHJhaXNlXG5cblxuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG5gYF8qYGBcbiAgIE5vdCBpbXBvcnRlZCBieSBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyXG4gICBgYF9gYCBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mXG4gICB0aGUgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlIGBgYnVpbHRpbnNgYCBtb2R1bGUuICBXaGVuXG4gICBub3QgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYGBfYGAgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXMgbm90XG4gICBkZWZpbmVkLiBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSBgYF9gYCBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnZXR0ZXh0YGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuYGBfXypfX2BgXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gVGhlc2UgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIGludGVycHJldGVyXG4gICBhbmQgaXRzIGltcGxlbWVudGF0aW9uIChpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnkpLiAgQ3VycmVudFxuICAgc3lzdGVtIG5hbWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlICpTcGVjaWFsIG1ldGhvZCBuYW1lcyogc2VjdGlvblxuICAgYW5kIGVsc2V3aGVyZS4gIE1vcmUgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2ZcbiAgIFB5dGhvbi4gICpBbnkqIHVzZSBvZiBgYF9fKl9fYGAgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXNcbiAgIG5vdCBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZVxuICAgd2l0aG91dCB3YXJuaW5nLlxuXG5gYF9fKmBgXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKQEAgLTU2LDE3ICs1NiwxNyBAQAogICdwb3dlcic6ICdcblRoZSBwb3dlciBvcGVyYXRvclxuKioqKioqKioqKioqKioqKioqXG5cblRoZSBwb3dlciBvcGVyYXRvciBiaW5kcyBtb3JlIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzXG5sZWZ0OyBpdCBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzIHJpZ2h0LiAgVGhlXG5zeW50YXggaXM6XG5cbiAgIHBvd2VyIDo6PSBwcmltYXJ5IFsiKioiIHVfZXhwcl1cblxuVGh1cywgaW4gYW4gdW5wYXJlbnRoZXNpemVkIHNlcXVlbmNlIG9mIHBvd2VyIGFuZCB1bmFyeSBvcGVyYXRvcnMsIHRoZVxub3BlcmF0b3JzIGFyZSBldmFsdWF0ZWQgZnJvbSByaWdodCB0byBsZWZ0ICh0aGlzIGRvZXMgbm90IGNvbnN0cmFpblxudGhlIGV2YWx1YXRpb24gb3JkZXIgZm9yIHRoZSBvcGVyYW5kcyk6IGBgLTEqKjJgYCByZXN1bHRzIGluIGBgLTFgYC5cblxuVGhlIHBvd2VyIG9wZXJhdG9yIGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIGJ1aWx0LWluIGBgcG93KClgYFxuZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogaXQgeWllbGRzIGl0cyBsZWZ0IGFyZ3VtZW50XG5yYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGl0cyByaWdodCBhcmd1bWVudC4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmVcbmZpcnN0IGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCBhbmQgdGhlIHJlc3VsdCBpcyBvZiB0aGF0IHR5cGUuXG5cbkZvciBpbnQgb3BlcmFuZHMsIHRoZSByZXN1bHQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9wZXJhbmRzIHVubGVzc1xudGhlIHNlY29uZCBhcmd1bWVudCBpcyBuZWdhdGl2ZTsgaW4gdGhhdCBjYXNlLCBhbGwgYXJndW1lbnRzIGFyZVxuY29udmVydGVkIHRvIGZsb2F0IGFuZCBhIGZsb2F0IHJlc3VsdCBpcyBkZWxpdmVyZWQuIEZvciBleGFtcGxlLFxuYGAxMCoqMmBgIHJldHVybnMgYGAxMDBgYCwgYnV0IGBgMTAqKi0yYGAgcmV0dXJucyBgYDAuMDFgYC5cblxuUmFpc2luZyBgYDAuMGBgIHRvIGEgbmVnYXRpdmUgcG93ZXIgcmVzdWx0cyBpbiBhXG5gYFplcm9EaXZpc2lvbkVycm9yYGAuIFJhaXNpbmcgYSBuZWdhdGl2ZSBudW1iZXIgdG8gYSBmcmFjdGlvbmFsIHBvd2VyXG5yZXN1bHRzIGluIGEgYGBjb21wbGV4YGAgbnVtYmVyLiAoSW4gZWFybGllciB2ZXJzaW9ucyBpdCByYWlzZWQgYVxuYGBWYWx1ZUVycm9yYGAuKVxuJywKICAncmFpc2UnOiAnXG5UaGUgYGByYWlzZWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgcmFpc2Vfc3RtdCA6Oj0gInJhaXNlIiBbZXhwcmVzc2lvbiBbImZyb20iIGV4cHJlc3Npb25dXVxuXG5JZiBubyBleHByZXNzaW9ucyBhcmUgcHJlc2VudCwgYGByYWlzZWBgIHJlLXJhaXNlcyB0aGUgbGFzdCBleGNlcHRpb25cbnRoYXQgd2FzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCBzY29wZS4gIElmIG5vIGV4Y2VwdGlvbiBpcyBhY3RpdmUgaW5cbnRoZSBjdXJyZW50IHNjb3BlLCBhIGBgUnVudGltZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCBpbmRpY2F0aW5nXG50aGF0IHRoaXMgaXMgYW4gZXJyb3IuXG5cbk90aGVyd2lzZSwgYGByYWlzZWBgIGV2YWx1YXRlcyB0aGUgZmlyc3QgZXhwcmVzc2lvbiBhcyB0aGUgZXhjZXB0aW9uXG5vYmplY3QuICBJdCBtdXN0IGJlIGVpdGhlciBhIHN1YmNsYXNzIG9yIGFuIGluc3RhbmNlIG9mXG5gYEJhc2VFeGNlcHRpb25gYC4gSWYgaXQgaXMgYSBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aWxsIGJlXG5vYnRhaW5lZCB3aGVuIG5lZWRlZCBieSBpbnN0YW50aWF0aW5nIHRoZSBjbGFzcyB3aXRoIG5vIGFyZ3VtZW50cy5cblxuVGhlICp0eXBlKiBvZiB0aGUgZXhjZXB0aW9uIGlzIHRoZSBleGNlcHRpb24gaW5zdGFuY2VcJ3MgY2xhc3MsIHRoZVxuKnZhbHVlKiBpcyB0aGUgaW5zdGFuY2UgaXRzZWxmLlxuXG5BIHRyYWNlYmFjayBvYmplY3QgaXMgbm9ybWFsbHkgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYW4gZXhjZXB0aW9uXG5pcyByYWlzZWQgYW5kIGF0dGFjaGVkIHRvIGl0IGFzIHRoZSBgYF9fdHJhY2ViYWNrX19gYCBhdHRyaWJ1dGUsIHdoaWNoXG5pcyB3cml0YWJsZS4gWW91IGNhbiBjcmVhdGUgYW4gZXhjZXB0aW9uIGFuZCBzZXQgeW91ciBvd24gdHJhY2ViYWNrIGluXG5vbmUgc3RlcCB1c2luZyB0aGUgYGB3aXRoX3RyYWNlYmFjaygpYGAgZXhjZXB0aW9uIG1ldGhvZCAod2hpY2hcbnJldHVybnMgdGhlIHNhbWUgZXhjZXB0aW9uIGluc3RhbmNlLCB3aXRoIGl0cyB0cmFjZWJhY2sgc2V0IHRvIGl0c1xuYXJndW1lbnQpLCBsaWtlIHNvOlxuXG4gICByYWlzZSBFeGNlcHRpb24oImZvbyBvY2N1cnJlZCIpLndpdGhfdHJhY2ViYWNrKHRyYWNlYmFja29iailcblxuVGhlIGBgZnJvbWBgIGNsYXVzZSBpcyB1c2VkIGZvciBleGNlcHRpb24gY2hhaW5pbmc6IGlmIGdpdmVuLCB0aGVcbnNlY29uZCAqZXhwcmVzc2lvbiogbXVzdCBiZSBhbm90aGVyIGV4Y2VwdGlvbiBjbGFzcyBvciBpbnN0YW5jZSwgd2hpY2hcbndpbGwgdGhlbiBiZSBhdHRhY2hlZCB0byB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBhcyB0aGUgYGBfX2NhdXNlX19gYFxuYXR0cmlidXRlICh3aGljaCBpcyB3cml0YWJsZSkuICBJZiB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBpcyBub3RcbmhhbmRsZWQsIGJvdGggZXhjZXB0aW9ucyB3aWxsIGJlIHByaW50ZWQ6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOlxuICAgLi4uICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNvbWV0aGluZyBiYWQgaGFwcGVuZWQiKSBmcm9tIGV4Y1xuICAgLi4uXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIDxtb2R1bGU+XG4gICBaZXJvRGl2aXNpb25FcnJvcjogaW50IGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvXG5cbiAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BIHNpbWlsYXIgbWVjaGFuaXNtIHdvcmtzIGltcGxpY2l0bHkgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbnNpZGVcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyOiB0aGUgcHJldmlvdXMgZXhjZXB0aW9uIGlzIHRoZW4gYXR0YWNoZWQgYXMgdGhlXG5uZXcgZXhjZXB0aW9uXCdzIGBgX19jb250ZXh0X19gYCBhdHRyaWJ1dGU6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdDpcbiAgIC4uLiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkIilcbiAgIC4uLlxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiA8bW9kdWxlPlxuICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb1xuXG4gICBEdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbiwgYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhhbmRsaW5nIGV4Y2VwdGlvbnMgaXMgaW4gc2VjdGlvblxuKlRoZSB0cnkgc3RhdGVtZW50Ki5cbicsCiAgJ3JldHVybic6ICdcblRoZSBgYHJldHVybmBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHJldHVybl9zdG10IDo6PSAicmV0dXJuIiBbZXhwcmVzc2lvbl9saXN0XVxuXG5gYHJldHVybmBgIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgZnVuY3Rpb25cbmRlZmluaXRpb24sIG5vdCB3aXRoaW4gYSBuZXN0ZWQgY2xhc3MgZGVmaW5pdGlvbi5cblxuSWYgYW4gZXhwcmVzc2lvbiBsaXN0IGlzIHByZXNlbnQsIGl0IGlzIGV2YWx1YXRlZCwgZWxzZSBgYE5vbmVgYCBpc1xuc3Vic3RpdHV0ZWQuXG5cbmBgcmV0dXJuYGAgbGVhdmVzIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwgd2l0aCB0aGUgZXhwcmVzc2lvbiBsaXN0XG4ob3IgYGBOb25lYGApIGFzIHJldHVybiB2YWx1ZS5cblxuV2hlbiBgYHJldHVybmBgIHBhc3NlcyBjb250cm9sIG91dCBvZiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggYVxuYGBmaW5hbGx5YGAgY2xhdXNlLCB0aGF0IGBgZmluYWxseWBgIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5XG5sZWF2aW5nIHRoZSBmdW5jdGlvbi5cblxuSW4gYSBnZW5lcmF0b3IgZnVuY3Rpb24sIHRoZSBgYHJldHVybmBgIHN0YXRlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGVcbmdlbmVyYXRvciBpcyBkb25lIGFuZCB3aWxsIGNhdXNlIGBgU3RvcEl0ZXJhdGlvbmBgIHRvIGJlIHJhaXNlZC4gVGhlXG5yZXR1cm5lZCB2YWx1ZSAoaWYgYW55KSBpcyB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIGNvbnN0cnVjdFxuYGBTdG9wSXRlcmF0aW9uYGAgYW5kIGJlY29tZXMgdGhlIGBgU3RvcEl0ZXJhdGlvbi52YWx1ZWBgIGF0dHJpYnV0ZS5cbicsCi0gJ3NlcXVlbmNlLXR5cGVzJzogIlxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBnZXQoKWBgLFxuYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCwgYGBjb3B5KClgYCxcbmFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uJ3Mgc3RhbmRhcmRcbmRpY3Rpb25hcnkgb2JqZWN0cy4gIFRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlIHByb3ZpZGVzIGFcbmBgTXV0YWJsZU1hcHBpbmdgYCBhYnN0cmFjdCBiYXNlIGNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHNcbmZyb20gYSBiYXNlIHNldCBvZiBgYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAsXG5gYF9fZGVsaXRlbV9fKClgYCwgYW5kIGBga2V5cygpYGAuIE11dGFibGUgc2VxdWVuY2VzIHNob3VsZCBwcm92aWRlXG5tZXRob2RzIGBgYXBwZW5kKClgYCwgYGBjb3VudCgpYGAsIGBgaW5kZXgoKWBgLCBgYGV4dGVuZCgpYGAsXG5gYGluc2VydCgpYGAsIGBgcG9wKClgYCwgYGByZW1vdmUoKWBgLCBgYHJldmVyc2UoKWBgIGFuZCBgYHNvcnQoKWBgLFxubGlrZSBQeXRob24gc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkXG5pbXBsZW1lbnQgYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyBgYF9fYWRkX18oKWBgLCBgYF9fcmFkZF9fKClgYCxcbmBgX19pYWRkX18oKWBgLCBgYF9fbXVsX18oKWBgLCBgYF9fcm11bF9fKClgYCBhbmQgYGBfX2ltdWxfXygpYGBcbmRlc2NyaWJlZCBiZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXRcbmlzIHJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19jb250YWluc19fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgYGBpbmBgXG5vcGVyYXRvcjsgZm9yIG1hcHBpbmdzLCBgYGluYGAgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZydzIGtleXM7IGZvclxuc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGtleXMoKWBgOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYC4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciBgYD49YGAgMC4gIEFsc28sIGFuIG9iamVjdFxuICAgdGhhdCBkb2Vzbid0IGRlZmluZSBhIGBgX19ib29sX18oKWBgIG1ldGhvZCBhbmQgd2hvc2UgYGBfX2xlbl9fKClgYFxuICAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvbid0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuIiwKKyAnc2VxdWVuY2UtdHlwZXMnOiAiXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoIGBgMCA8PSBrIDwgTmBgXG53aGVyZSAqTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoXG5kZWZpbmUgYSByYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlXG50aGUgbWV0aG9kcyBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlbXMoKWBgLCBgYGdldCgpYGAsXG5gYGNsZWFyKClgYCwgYGBzZXRkZWZhdWx0KClgYCwgYGBwb3AoKWBgLCBgYHBvcGl0ZW0oKWBgLCBgYGNvcHkoKWBgLFxuYW5kIGBgdXBkYXRlKClgYCBiZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob24ncyBzdGFuZGFyZFxuZGljdGlvbmFyeSBvYmplY3RzLiAgVGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUgcHJvdmlkZXMgYVxuYGBNdXRhYmxlTWFwcGluZ2BgIGFic3RyYWN0IGJhc2UgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kc1xuZnJvbSBhIGJhc2Ugc2V0IG9mIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCxcbmBgX19kZWxpdGVtX18oKWBgLCBhbmQgYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGVcbm1ldGhvZHMgYGBhcHBlbmQoKWBgLCBgYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCxcbmBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLCBgYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsXG5saWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGRcbmltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLFxuYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsIGBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYFxuZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdFxuaXMgcmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nJ3Mga2V5czsgZm9yXG5zZXF1ZW5jZXMsIGl0IHNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlclxucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2l0ZXJfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGVcbmNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCBgYF9faXRlcl9fKClgYCBzaG91bGQgYmUgdGhlIHNhbWUgYXNcbmBga2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuJ3QgZGVmaW5lIGEgYGBfX2Jvb2xfXygpYGAgbWV0aG9kIGFuZCB3aG9zZSBgYF9fbGVuX18oKWBgXG4gICBtZXRob2QgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KClgYC4gU2hvdWxkIHJldHVybiBhblxuICAgZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuXG4gICB0aGUgYWN0dWFsIGxlbmd0aCkuIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyIGBgPj1gYCAwLiBUaGlzXG4gICBtZXRob2QgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yXG4gICBjb3JyZWN0bmVzcy5cblxuICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvbid0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuIiwKICAnc2hpZnRpbmcnOiAnXG5TaGlmdGluZyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBzaGlmdGluZyBvcGVyYXRpb25zIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgYXJpdGhtZXRpY1xub3BlcmF0aW9uczpcblxuICAgc2hpZnRfZXhwciA6Oj0gYV9leHByIHwgc2hpZnRfZXhwciAoICI8PCIgfCAiPj4iICkgYV9leHByXG5cblRoZXNlIG9wZXJhdG9ycyBhY2NlcHQgaW50ZWdlcnMgYXMgYXJndW1lbnRzLiAgVGhleSBzaGlmdCB0aGUgZmlyc3RcbmFyZ3VtZW50IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBieSB0aGVcbnNlY29uZCBhcmd1bWVudC5cblxuQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIGZsb29yIGRpdmlzaW9uIGJ5XG5gYHBvdygyLG4pYGAuICBBIGxlZnQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBtdWx0aXBsaWNhdGlvblxud2l0aCBgYHBvdygyLG4pYGAuXG5cbk5vdGU6IEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIHJlcXVpcmVkIHRvXG4gIGJlIGF0IG1vc3QgYGBzeXMubWF4c2l6ZWBgLiAgSWYgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpcyBsYXJnZXJcbiAgdGhhbiBgYHN5cy5tYXhzaXplYGAgYW4gYGBPdmVyZmxvd0Vycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbicsCiAgJ3NsaWNpbmdzJzogJ1xuU2xpY2luZ3NcbioqKioqKioqXG5cbkEgc2xpY2luZyBzZWxlY3RzIGEgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZSBvYmplY3QgKGUuZy4sIGFcbnN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBTbGljaW5ncyBtYXkgYmUgdXNlZCBhcyBleHByZXNzaW9ucyBvciBhc1xudGFyZ2V0cyBpbiBhc3NpZ25tZW50IG9yIGBgZGVsYGAgc3RhdGVtZW50cy4gIFRoZSBzeW50YXggZm9yIGFcbnNsaWNpbmc6XG5cbiAgIHNsaWNpbmcgICAgICA6Oj0gcHJpbWFyeSAiWyIgc2xpY2VfbGlzdCAiXSJcbiAgIHNsaWNlX2xpc3QgICA6Oj0gc2xpY2VfaXRlbSAoIiwiIHNsaWNlX2l0ZW0pKiBbIiwiXVxuICAgc2xpY2VfaXRlbSAgIDo6PSBleHByZXNzaW9uIHwgcHJvcGVyX3NsaWNlXG4gICBwcm9wZXJfc2xpY2UgOjo9IFtsb3dlcl9ib3VuZF0gIjoiIFt1cHBlcl9ib3VuZF0gWyAiOiIgW3N0cmlkZV0gXVxuICAgbG93ZXJfYm91bmQgIDo6PSBleHByZXNzaW9uXG4gICB1cHBlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHN0cmlkZSAgICAgICA6Oj0gZXhwcmVzc2lvblxuXG5UaGVyZSBpcyBhbWJpZ3VpdHkgaW4gdGhlIGZvcm1hbCBzeW50YXggaGVyZTogYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlXG5hbiBleHByZXNzaW9uIGxpc3QgYWxzbyBsb29rcyBsaWtlIGEgc2xpY2UgbGlzdCwgc28gYW55IHN1YnNjcmlwdGlvblxuY2FuIGJlIGludGVycHJldGVkIGFzIGEgc2xpY2luZy4gIFJhdGhlciB0aGFuIGZ1cnRoZXIgY29tcGxpY2F0aW5nIHRoZVxuc3ludGF4LCB0aGlzIGlzIGRpc2FtYmlndWF0ZWQgYnkgZGVmaW5pbmcgdGhhdCBpbiB0aGlzIGNhc2UgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHN1YnNjcmlwdGlvbiB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzbGljaW5nICh0aGlzIGlzIHRoZSBjYXNlIGlmIHRoZSBzbGljZSBsaXN0XG5jb250YWlucyBubyBwcm9wZXIgc2xpY2UpLlxuXG5UaGUgc2VtYW50aWNzIGZvciBhIHNsaWNpbmcgYXJlIGFzIGZvbGxvd3MuICBUaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlXG50byBhIG1hcHBpbmcgb2JqZWN0LCBhbmQgaXQgaXMgaW5kZXhlZCAodXNpbmcgdGhlIHNhbWVcbmBgX19nZXRpdGVtX18oKWBgIG1ldGhvZCBhcyBub3JtYWwgc3Vic2NyaXB0aW9uKSB3aXRoIGEga2V5IHRoYXQgaXNcbmNvbnN0cnVjdGVkIGZyb20gdGhlIHNsaWNlIGxpc3QsIGFzIGZvbGxvd3MuICBJZiB0aGUgc2xpY2UgbGlzdFxuY29udGFpbnMgYXQgbGVhc3Qgb25lIGNvbW1hLCB0aGUga2V5IGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGVcbmNvbnZlcnNpb24gb2YgdGhlIHNsaWNlIGl0ZW1zOyBvdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBsb25lXG5zbGljZSBpdGVtIGlzIHRoZSBrZXkuICBUaGUgY29udmVyc2lvbiBvZiBhIHNsaWNlIGl0ZW0gdGhhdCBpcyBhblxuZXhwcmVzc2lvbiBpcyB0aGF0IGV4cHJlc3Npb24uICBUaGUgY29udmVyc2lvbiBvZiBhIHByb3BlciBzbGljZSBpcyBhXG5zbGljZSBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSB3aG9zZVxuYGBzdGFydGBgLCBgYHN0b3BgYCBhbmQgYGBzdGVwYGAgYXR0cmlidXRlcyBhcmUgdGhlIHZhbHVlcyBvZiB0aGVcbmV4cHJlc3Npb25zIGdpdmVuIGFzIGxvd2VyIGJvdW5kLCB1cHBlciBib3VuZCBhbmQgc3RyaWRlLFxucmVzcGVjdGl2ZWx5LCBzdWJzdGl0dXRpbmcgYGBOb25lYGAgZm9yIG1pc3NpbmcgZXhwcmVzc2lvbnMuXG4nLAogICdzcGVjaWFsYXR0cnMnOiAnXG5TcGVjaWFsIEF0dHJpYnV0ZXNcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgaW1wbGVtZW50YXRpb24gYWRkcyBhIGZldyBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzIHRvIHNldmVyYWxcbm9iamVjdCB0eXBlcywgd2hlcmUgdGhleSBhcmUgcmVsZXZhbnQuICBTb21lIG9mIHRoZXNlIGFyZSBub3QgcmVwb3J0ZWRcbmJ5IHRoZSBgYGRpcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24uXG5cbm9iamVjdC5fX2RpY3RfX1xuXG4gICBBIGRpY3Rpb25hcnkgb3Igb3RoZXIgbWFwcGluZyBvYmplY3QgdXNlZCB0byBzdG9yZSBhbiBvYmplY3RcJ3NcbiAgICh3cml0YWJsZSkgYXR0cmlidXRlcy5cblxuaW5zdGFuY2UuX19jbGFzc19fXG5cbiAgIFRoZSBjbGFzcyB0byB3aGljaCBhIGNsYXNzIGluc3RhbmNlIGJlbG9uZ3MuXG5cbmNsYXNzLl9fYmFzZXNfX1xuXG4gICBUaGUgdHVwbGUgb2YgYmFzZSBjbGFzc2VzIG9mIGEgY2xhc3Mgb2JqZWN0LlxuXG5jbGFzcy5fX25hbWVfX1xuXG4gICBUaGUgbmFtZSBvZiB0aGUgY2xhc3Mgb3IgdHlwZS5cblxuY2xhc3MuX19xdWFsbmFtZV9fXG5cbiAgIFRoZSAqcXVhbGlmaWVkIG5hbWUqIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbmNsYXNzLl9fbXJvX19cblxuICAgVGhpcyBhdHRyaWJ1dGUgaXMgYSB0dXBsZSBvZiBjbGFzc2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgd2hlblxuICAgbG9va2luZyBmb3IgYmFzZSBjbGFzc2VzIGR1cmluZyBtZXRob2QgcmVzb2x1dGlvbi5cblxuY2xhc3MubXJvKClcblxuICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBtZXRhY2xhc3MgdG8gY3VzdG9taXplIHRoZVxuICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGl0cyBpbnN0YW5jZXMuICBJdCBpcyBjYWxsZWQgYXQgY2xhc3NcbiAgIGluc3RhbnRpYXRpb24sIGFuZCBpdHMgcmVzdWx0IGlzIHN0b3JlZCBpbiBgYF9fbXJvX19gYC5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIGNsYXNzIGtlZXBzIGEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGltbWVkaWF0ZVxuICAgc3ViY2xhc3Nlcy4gIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aG9zZSByZWZlcmVuY2VzXG4gICBzdGlsbCBhbGl2ZS4gRXhhbXBsZTpcblxuICAgICAgPj4+IGludC5fX3N1YmNsYXNzZXNfXygpXG4gICAgICBbPGNsYXNzIFwnYm9vbFwnPl1cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZXNlIHNwZWNpYWwgbWV0aG9kcyBtYXkgYmUgZm91bmQgaW5cbiAgICB0aGUgUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwgKCpCYXNpYyBjdXN0b21pemF0aW9uKikuXG5cblsyXSBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgbGlzdCBgYFsxLCAyXWBgIGlzIGNvbnNpZGVyZWQgZXF1YWwgdG9cbiAgICBgYFsxLjAsIDIuMF1gYCwgYW5kIHNpbWlsYXJseSBmb3IgdHVwbGVzLlxuXG5bM10gVGhleSBtdXN0IGhhdmUgc2luY2UgdGhlIHBhcnNlciBjYW5cJ3QgdGVsbCB0aGUgdHlwZSBvZiB0aGVcbiAgICBvcGVyYW5kcy5cblxuWzRdIENhc2VkIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eSBiZWluZ1xuICAgIG9uZSBvZiAiTHUiIChMZXR0ZXIsIHVwcGVyY2FzZSksICJMbCIgKExldHRlciwgbG93ZXJjYXNlKSwgb3IgIkx0IlxuICAgIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbls1XSBUbyBmb3JtYXQgb25seSBhIHR1cGxlIHlvdSBzaG91bGQgdGhlcmVmb3JlIHByb3ZpZGUgYSBzaW5nbGV0b25cbiAgICB0dXBsZSB3aG9zZSBvbmx5IGVsZW1lbnQgaXMgdGhlIHR1cGxlIHRvIGJlIGZvcm1hdHRlZC5cbicsCi0gJ3NwZWNpYWxuYW1lcyc6ICdcblNwZWNpYWwgbWV0aG9kIG5hbWVzXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGNhbiBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIGludm9rZWQgYnkgc3BlY2lhbFxuc3ludGF4IChzdWNoIGFzIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBvciBzdWJzY3JpcHRpbmcgYW5kIHNsaWNpbmcpIGJ5XG5kZWZpbmluZyBtZXRob2RzIHdpdGggc3BlY2lhbCBuYW1lcy4gVGhpcyBpcyBQeXRob25cJ3MgYXBwcm9hY2ggdG9cbipvcGVyYXRvciBvdmVybG9hZGluZyosIGFsbG93aW5nIGNsYXNzZXMgdG8gZGVmaW5lIHRoZWlyIG93biBiZWhhdmlvclxud2l0aCByZXNwZWN0IHRvIGxhbmd1YWdlIG9wZXJhdG9ycy4gIEZvciBpbnN0YW5jZSwgaWYgYSBjbGFzcyBkZWZpbmVzXG5hIG1ldGhvZCBuYW1lZCBgYF9fZ2V0aXRlbV9fKClgYCwgYW5kIGBgeGBgIGlzIGFuIGluc3RhbmNlIG9mIHRoaXNcbmNsYXNzLCB0aGVuIGBgeFtpXWBgIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBgYHR5cGUoeCkuX19nZXRpdGVtX18oeCxcbmkpYGAuICBFeGNlcHQgd2hlcmUgbWVudGlvbmVkLCBhdHRlbXB0cyB0byBleGVjdXRlIGFuIG9wZXJhdGlvbiByYWlzZVxuYW4gZXhjZXB0aW9uIHdoZW4gbm8gYXBwcm9wcmlhdGUgbWV0aG9kIGlzIGRlZmluZWQgKHR5cGljYWxseVxuYGBBdHRyaWJ1dGVFcnJvcmBgIG9yIGBgVHlwZUVycm9yYGApLlxuXG5XaGVuIGltcGxlbWVudGluZyBhIGNsYXNzIHRoYXQgZW11bGF0ZXMgYW55IGJ1aWx0LWluIHR5cGUsIGl0IGlzXG5pbXBvcnRhbnQgdGhhdCB0aGUgZW11bGF0aW9uIG9ubHkgYmUgaW1wbGVtZW50ZWQgdG8gdGhlIGRlZ3JlZSB0aGF0IGl0XG5tYWtlcyBzZW5zZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtb2RlbGxlZC4gIEZvciBleGFtcGxlLCBzb21lXG5zZXF1ZW5jZXMgbWF5IHdvcmsgd2VsbCB3aXRoIHJldHJpZXZhbCBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBidXRcbmV4dHJhY3RpbmcgYSBzbGljZSBtYXkgbm90IG1ha2Ugc2Vuc2UuICAoT25lIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGVcbmBgTm9kZUxpc3RgYCBpbnRlcmZhY2UgaW4gdGhlIFczQ1wncyBEb2N1bWVudCBPYmplY3QgTW9kZWwuKVxuXG5cbkJhc2ljIGN1c3RvbWl6YXRpb25cbj09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfaW5mbygpWzJdYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnlcbiAgICAgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmIHRoZXJlIGFyZSBubyBQeXRob24tXG4gICAgIGxldmVsIGBgX19kZWxfXygpYGAgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb25cbiAgICAgZm9yIHRoZSBgYGdjYGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvd1xuICAgICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGN5Y2xlIGRldGVjdG9yLFxuICAgICBwYXJ0aWN1bGFybHkgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGdhcmJhZ2VgYCB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZVxuICAgIm9mZmljaWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLFxuICAgdGhpcyBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkXG4gICB0byByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgYGA8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgXG4gICBidXQgbm90IGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW5cbiAgICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzXG4gICByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBzdHIob2JqZWN0KWBgIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgZm9ybWF0KClgYFxuICAgYW5kIGBgcHJpbnQoKWBgIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZVxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICAqc3RyaW5nKiBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgYG9iamVjdC5fX3JlcHJfXygpYGAgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCBgYF9fc3RyX18oKWBgIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSBgYG9iamVjdGBgXG4gICBjYWxscyBgYG9iamVjdC5fX3JlcHJfXygpYGAuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgYnl0ZXMoKWBgIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSBgYGJ5dGVzYGAgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Qgb2YgY2xhc3MgYGBzdHJgYCkgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzXG4gICBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXMgdXBcbiAgIHRvIHRoZSB0eXBlIGltcGxlbWVudGluZyBgYF9fZm9ybWF0X18oKWBgLCBob3dldmVyIG1vc3QgY2xhc3Nlc1xuICAgd2lsbCBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvclxuICAgdXNlIGEgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBjYWxsc1xuICAgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kIGBgeD49eWBgIGNhbGxzXG4gICBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogYGBoYXNoKClgYCB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzIGN1c3RvbVxuICAgICBgYF9faGFzaF9fKClgYCBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSBgYFB5X3NzaXplX3RgYC4gIFRoaXMgaXNcbiAgICAgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXQgYnVpbGRzLlxuICAgICBJZiBhbiBvYmplY3RcJ3MgICBgYF9faGFzaF9fKClgYCBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2ZcbiAgICAgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZFxuICAgICBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggYGBweXRob24gLWMgImltcG9ydCBzeXM7XG4gICAgIHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0IGBgeCA9PSB5YGAgaW1wbGllcyBib3RoIHRoYXQgYGB4IGlzIHlgYCBhbmQgYGBoYXNoKHgpID09XG4gICBoYXNoKHkpYGAuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIGFuZCBkb2VzIG5vdCBkZWZpbmVcbiAgIGBgX19oYXNoX18oKWBgIHdpbGwgaGF2ZSBpdHMgYGBfX2hhc2hfXygpYGAgaW1wbGljaXRseSBzZXQgdG9cbiAgIGBgTm9uZWBgLiAgV2hlbiB0aGUgYGBfX2hhc2hfXygpYGAgbWV0aG9kIG9mIGEgY2xhc3MgaXMgYGBOb25lYGAsXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuXG4gICBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZVxuICAgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosXG4gICBjb2xsZWN0aW9ucy5IYXNoYWJsZWBgKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgYGBfX2hhc2hfXygpYGAgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlXG4gICBpbnRlcnByZXRlciBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fYGAuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSBgYF9fZXFfXygpYGAgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biBgYF9faGFzaF9fKClgYCB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhIGBgVHlwZUVycm9yYGAgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZFxuICAgYXMgaGFzaGFibGUgYnkgYW4gYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlIGBgX19oYXNoX18oKWBgIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZCBkYXRldGltZVxuICAgICBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvIGBgUFlUSE9OSEFTSFNFRURgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cblxuXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgYGB4Lm5hbWVgYClcbmZvciBjbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yIGBgc2VsZmBgKS4gIGBgbmFtZWBgIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlXG4gICBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgYGBfX2dldGF0dHJfXygpYGAgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiBgYF9fZ2V0YXR0cl9fKClgYCBhbmQgYGBfX3NldGF0dHJfXygpYGAuKSBUaGlzIGlzIGRvbmUgYm90aFxuICAgZm9yIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgYGBfX2dldGF0dHJfXygpYGBcbiAgIHdvdWxkIGhhdmUgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGVcbiAgIHRoYXQgYXQgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnlcbiAgIG5vdCBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIG92ZXIgYXR0cmlidXRlIGFjY2Vzcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lc1xuICAgYGBfX2dldGF0dHJfXygpYGAsIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzc1xuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBlaXRoZXIgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYC4gVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKVxuICAgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uIEluIG9yZGVyXG4gICB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW4gdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvblxuICAgc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG9cbiAgIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpYGAuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzXG4gICAgIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4IG9yXG4gICAgIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmIGBgX19zZXRhdHRyX18oKWBgIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKWBgLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSBgYF9fc2V0YXR0cl9fKClgYCBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiBgYGRlbCBvYmoubmFtZWBgIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiBgYGRpcigpYGAgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QuIEEgc2VxdWVuY2UgbXVzdCBiZVxuICAgcmV0dXJuZWQuIGBgZGlyKClgYCBjb252ZXJ0cyB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgdG8gYSBsaXN0IGFuZFxuICAgc29ydHMgaXQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgYGBfX2RpY3RfX2BgLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgYGBOb25lYGAgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgLCBhbmRcbmBgX19kZWxldGVfXygpYGAuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsXG5pdCBpcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsIGBgYS54YGAgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoIGBgYS5fX2RpY3RfX1tcJ3hcJ11gYCwgdGhlblxuYGB0eXBlKGEpLl9fZGljdF9fW1wneFwnXWBgLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbmBgdHlwZShhKWBgIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgYGBhLnhgYC5cbkhvdyB0aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiBgYGFgYDpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgYGB4Ll9fZ2V0X18oYSlgYC5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsIGBgYS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6IGBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKWBgLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsIGBgQS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgIGBgQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKWBgLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiBgYGFgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYHN1cGVyYGAsIHRoZW4gdGhlIGJpbmRpbmcgYGBzdXBlcihCLFxuICAgb2JqKS5tKClgYCBzZWFyY2hlcyBgYG9iai5fX2NsYXNzX18uX19tcm9fX2BgIGZvciB0aGUgYmFzZSBjbGFzc1xuICAgYGBBYGAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGBgQmBgIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3JcbiAgIHdpdGggdGhlIGNhbGw6IGBgQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pYGAuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAgYW5kIGBgX19kZWxldGVfXygpYGAuXG5JZiBpdCBkb2VzIG5vdCBkZWZpbmUgYGBfX2dldF9fKClgYCwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsXG5yZXR1cm4gdGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGVcbm9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyBgYF9fc2V0X18oKWBgXG5hbmQvb3IgYGBfX2RlbGV0ZV9fKClgYCwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXNcbm5laXRoZXIsIGl0IGlzIGEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzXG5kZWZpbmUgYm90aCBgYF9fZ2V0X18oKWBgIGFuZCBgYF9fc2V0X18oKWBgLCB3aGlsZSBub24tZGF0YVxuZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZSBgYF9fZ2V0X18oKWBgIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aFxuYGBfX3NldF9fKClgYCBhbmQgYGBfX2dldF9fKClgYCBkZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvblxuaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluIGNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmVcbm92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nIGBgc3RhdGljbWV0aG9kKClgYCBhbmQgYGBjbGFzc21ldGhvZCgpYGApXG5hcmUgaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSBgYHByb3BlcnR5KClgYCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZFxuICAgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvclxuICAgZWFjaCBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxufn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzIGBgQXR0cmlidXRlRXJyb3JgYC4gSWZcbiAgZHluYW1pYyBhc3NpZ25tZW50IG9mIG5ldyB2YXJpYWJsZXMgaXMgZGVzaXJlZCwgdGhlbiBhZGRcbiAgYGBcJ19fZGljdF9fXCdgYCB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXMgZGVmaW5pbmdcbiAgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBpbnN0YW5jZXMuIElmIHdlYWtcbiAgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZCBgYFwnX193ZWFrcmVmX19cJ2BgIHRvIHRoZVxuICBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlIGluc3RhbmNlXG4gIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGUgKGV4Y2VwdCBieVxuICByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLiBUaGlzXG4gIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgYGBpbnRgYCwgYGBzdHJgYCBhbmRcbiAgYGB0dXBsZWBgLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3MgbWF5XG4gIGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyBgYHR5cGUoKWBgLiBUaGUgY2xhc3MgYm9keVxuaXMgZXhlY3V0ZWQgaW4gYSBuZXcgbmFtZXNwYWNlIGFuZCB0aGUgY2xhc3MgbmFtZSBpcyBib3VuZCBsb2NhbGx5IHRvXG50aGUgcmVzdWx0IG9mIGBgdHlwZShuYW1lLCBiYXNlcywgbmFtZXNwYWNlKWBgLlxuXG5UaGUgY2xhc3MgY3JlYXRpb24gcHJvY2VzcyBjYW4gYmUgY3VzdG9taXNlZCBieSBwYXNzaW5nIHRoZVxuYGBtZXRhY2xhc3NgYCBrZXl3b3JkIGFyZ3VtZW50IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGxpbmUsIG9yIGJ5XG5pbmhlcml0aW5nIGZyb20gYW4gZXhpc3RpbmcgY2xhc3MgdGhhdCBpbmNsdWRlZCBzdWNoIGFuIGFyZ3VtZW50LiBJblxudGhlIGZvbGxvd2luZyBleGFtcGxlLCBib3RoIGBgTXlDbGFzc2BgIGFuZCBgYE15U3ViY2xhc3NgYCBhcmVcbmluc3RhbmNlcyBvZiBgYE1ldGFgYDpcblxuICAgY2xhc3MgTWV0YSh0eXBlKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15Q2xhc3MobWV0YWNsYXNzPU1ldGEpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlTdWJjbGFzcyhNeUNsYXNzKTpcbiAgICAgICBwYXNzXG5cbkFueSBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbmFyZSBwYXNzZWQgdGhyb3VnaCB0byBhbGwgbWV0YWNsYXNzIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGJlbG93LlxuXG5XaGVuIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBleGVjdXRlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBvY2N1cjpcblxuKiB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWRcblxuKiB0aGUgY2xhc3MgbmFtZXNwYWNlIGlzIHByZXBhcmVkXG5cbiogdGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWRcblxuKiB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWRcblxuXG5EZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgZm9yIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBkZXRlcm1pbmVkIGFzXG5mb2xsb3dzOlxuXG4qIGlmIG5vIGJhc2VzIGFuZCBubyBleHBsaWNpdCBtZXRhY2xhc3MgYXJlIGdpdmVuLCB0aGVuIGBgdHlwZSgpYGAgaXNcbiAgdXNlZFxuXG4qIGlmIGFuIGV4cGxpY2l0IG1ldGFjbGFzcyBpcyBnaXZlbiBhbmQgaXQgaXMgKm5vdCogYW4gaW5zdGFuY2Ugb2ZcbiAgYGB0eXBlKClgYCwgdGhlbiBpdCBpcyB1c2VkIGRpcmVjdGx5IGFzIHRoZSBtZXRhY2xhc3NcblxuKiBpZiBhbiBpbnN0YW5jZSBvZiBgYHR5cGUoKWBgIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBtZXRhY2xhc3MsIG9yXG4gIGJhc2VzIGFyZSBkZWZpbmVkLCB0aGVuIHRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHVzZWRcblxuVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZXhwbGljaXRseSBzcGVjaWZpZWRcbm1ldGFjbGFzcyAoaWYgYW55KSBhbmQgdGhlIG1ldGFjbGFzc2VzIChpLmUuIGBgdHlwZShjbHMpYGApIG9mIGFsbFxuc3BlY2lmaWVkIGJhc2UgY2xhc3Nlcy4gVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgb25lIHdoaWNoIGlzIGFcbnN1YnR5cGUgb2YgKmFsbCogb2YgdGhlc2UgY2FuZGlkYXRlIG1ldGFjbGFzc2VzLiBJZiBub25lIG9mIHRoZVxuY2FuZGlkYXRlIG1ldGFjbGFzc2VzIG1lZXRzIHRoYXQgY3JpdGVyaW9uLCB0aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uXG53aWxsIGZhaWwgd2l0aCBgYFR5cGVFcnJvcmBgLlxuXG5cblByZXBhcmluZyB0aGUgY2xhc3MgbmFtZXNwYWNlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaGFzIGJlZW4gaWRlbnRpZmllZCwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBwcmVwYXJlZC4gSWYgdGhlIG1ldGFjbGFzcyBoYXMgYSBgYF9fcHJlcGFyZV9fYGBcbmF0dHJpYnV0ZSwgaXQgaXMgY2FsbGVkIGFzIGBgbmFtZXNwYWNlID0gbWV0YWNsYXNzLl9fcHJlcGFyZV9fKG5hbWUsXG5iYXNlcywgKiprd2RzKWBgICh3aGVyZSB0aGUgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cywgaWYgYW55LCBjb21lXG5mcm9tIHRoZSBjbGFzcyBkZWZpbml0aW9uKS5cblxuSWYgdGhlIG1ldGFjbGFzcyBoYXMgbm8gYGBfX3ByZXBhcmVfX2BgIGF0dHJpYnV0ZSwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBpbml0aWFsaXNlZCBhcyBhbiBlbXB0eSBgYGRpY3QoKWBgIGluc3RhbmNlLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMwMDBcbiAgICAgIEludHJvZHVjZWQgdGhlIGBgX19wcmVwYXJlX19gYCBuYW1lc3BhY2UgaG9va1xuXG5cbkV4ZWN1dGluZyB0aGUgY2xhc3MgYm9keVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkIChhcHByb3hpbWF0ZWx5KSBhcyBgYGV4ZWMoYm9keSwgZ2xvYmFscygpLFxubmFtZXNwYWNlKWBgLiBUaGUga2V5IGRpZmZlcmVuY2UgZnJvbSBhIG5vcm1hbCBjYWxsIHRvIGBgZXhlYygpYGAgaXNcbnRoYXQgbGV4aWNhbCBzY29waW5nIGFsbG93cyB0aGUgY2xhc3MgYm9keSAoaW5jbHVkaW5nIGFueSBtZXRob2RzKSB0b1xucmVmZXJlbmNlIG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYW5kIG91dGVyIHNjb3BlcyB3aGVuIHRoZSBjbGFzc1xuZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIGEgZnVuY3Rpb24uXG5cbkhvd2V2ZXIsIGV2ZW4gd2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIHRoZSBmdW5jdGlvbixcbm1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIHN0aWxsIGNhbm5vdCBzZWUgbmFtZXMgZGVmaW5lZCBhdCB0aGVcbmNsYXNzIHNjb3BlLiBDbGFzcyB2YXJpYWJsZXMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBmaXJzdFxucGFyYW1ldGVyIG9mIGluc3RhbmNlIG9yIGNsYXNzIG1ldGhvZHMsIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgYXQgYWxsXG5mcm9tIHN0YXRpYyBtZXRob2RzLlxuXG5cbkNyZWF0aW5nIHRoZSBjbGFzcyBvYmplY3Rcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgY2xhc3MgbmFtZXNwYWNlIGhhcyBiZWVuIHBvcHVsYXRlZCBieSBleGVjdXRpbmcgdGhlIGNsYXNzXG5ib2R5LCB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBgYG1ldGFjbGFzcyhuYW1lLCBiYXNlcyxcbm5hbWVzcGFjZSwgKiprd2RzKWBgICh0aGUgYWRkaXRpb25hbCBrZXl3b3JkcyBwYXNzZWQgaGVyZSBhcmUgdGhlIHNhbWVcbmFzIHRob3NlIHBhc3NlZCB0byBgYF9fcHJlcGFyZV9fYGApLlxuXG5UaGlzIGNsYXNzIG9iamVjdCBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSB6ZXJvLVxuYXJndW1lbnQgZm9ybSBvZiBgYHN1cGVyKClgYC4gYGBfX2NsYXNzX19gYCBpcyBhbiBpbXBsaWNpdCBjbG9zdXJlXG5yZWZlcmVuY2UgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaWYgYW55IG1ldGhvZHMgaW4gYSBjbGFzcyBib2R5IHJlZmVyXG50byBlaXRoZXIgYGBfX2NsYXNzX19gYCBvciBgYHN1cGVyYGAuIFRoaXMgYWxsb3dzIHRoZSB6ZXJvIGFyZ3VtZW50XG5mb3JtIG9mIGBgc3VwZXIoKWBgIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgY2xhc3MgYmVpbmcgZGVmaW5lZFxuYmFzZWQgb24gbGV4aWNhbCBzY29waW5nLCB3aGlsZSB0aGUgY2xhc3Mgb3IgaW5zdGFuY2UgdGhhdCB3YXMgdXNlZCB0b1xubWFrZSB0aGUgY3VycmVudCBjYWxsIGlzIGlkZW50aWZpZWQgYmFzZWQgb24gdGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIG1ldGhvZC5cblxuQWZ0ZXIgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNsYXNzXG5kZWNvcmF0b3JzIGluY2x1ZGVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIChpZiBhbnkpIGFuZCB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBhcyB0aGUgZGVmaW5lZCBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMzUqKiAtIE5ldyBzdXBlclxuICAgICAgRGVzY3JpYmVzIHRoZSBpbXBsaWNpdCBgYF9fY2xhc3NfX2BgIGNsb3N1cmUgcmVmZXJlbmNlXG5cblxuTWV0YWNsYXNzIGV4YW1wbGVcbi0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkZSBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0YWNsYXNzIHRoYXQgdXNlcyBhblxuYGBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGBgIHRvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIG1lbWJlcnNcbndlcmUgZGVmaW5lZDpcblxuICAgY2xhc3MgT3JkZXJlZENsYXNzKHR5cGUpOlxuXG4gICAgICAgIEBjbGFzc21ldGhvZFxuICAgICAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgbmFtZSwgYmFzZXMsICoqa3dkcyk6XG4gICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpXG5cbiAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXN1bHQgPSB0eXBlLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgZGljdChuYW1lc3BhY2UpKVxuICAgICAgICAgICByZXN1bHQubWVtYmVycyA9IHR1cGxlKG5hbWVzcGFjZSlcbiAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuXG4gICBjbGFzcyBBKG1ldGFjbGFzcz1PcmRlcmVkQ2xhc3MpOlxuICAgICAgIGRlZiBvbmUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdHdvKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHRocmVlKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIGZvdXIoc2VsZik6IHBhc3NcblxuICAgPj4+IEEubWVtYmVyc1xuICAgKFwnX19tb2R1bGVfX1wnLCBcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCcsIFwnZm91clwnKVxuXG5XaGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIGZvciAqQSogZ2V0cyBleGVjdXRlZCwgdGhlIHByb2Nlc3MgYmVnaW5zXG53aXRoIGNhbGxpbmcgdGhlIG1ldGFjbGFzc1wncyBgYF9fcHJlcGFyZV9fKClgYCBtZXRob2Qgd2hpY2ggcmV0dXJucyBhblxuZW1wdHkgYGBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGBgLiAgVGhhdCBtYXBwaW5nIHJlY29yZHMgdGhlIG1ldGhvZHNcbmFuZCBhdHRyaWJ1dGVzIG9mICpBKiBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2xhc3NcbnN0YXRlbWVudC4gT25jZSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZSBvcmRlcmVkIGRpY3Rpb25hcnlcbmlzIGZ1bGx5IHBvcHVsYXRlZCBhbmQgdGhlIG1ldGFjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCBnZXRzXG5pbnZva2VkLiAgVGhhdCBtZXRob2QgYnVpbGRzIHRoZSBuZXcgdHlwZSBhbmQgaXQgc2F2ZXMgdGhlIG9yZGVyZWRcbmRpY3Rpb25hcnkga2V5cyBpbiBhbiBhdHRyaWJ1dGUgY2FsbGVkIGBgbWVtYmVyc2BgLlxuXG5cbkN1c3RvbWl6aW5nIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZVxuYGBpc2luc3RhbmNlKClgYCBhbmQgYGBpc3N1YmNsYXNzKClgYCBidWlsdC1pbiBmdW5jdGlvbnMuXG5cbkluIHBhcnRpY3VsYXIsIHRoZSBtZXRhY2xhc3MgYGBhYmMuQUJDTWV0YWBgIGltcGxlbWVudHMgdGhlc2UgbWV0aG9kc1xuaW4gb3JkZXIgdG8gYWxsb3cgdGhlIGFkZGl0aW9uIG9mIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgYXNcbiJ2aXJ0dWFsIGJhc2UgY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pblxudHlwZXMpLCBpbmNsdWRpbmcgb3RoZXIgQUJDcy5cblxuY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIFJldHVybiB0cnVlIGlmICppbnN0YW5jZSogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgaW5zdGFuY2Ugb2YgKmNsYXNzKi4gSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc2luc3RhbmNlKGluc3RhbmNlLCBjbGFzcylgYC5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgIGBgaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xhc3MpYGAuXG5cbk5vdGUgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBsb29rZWQgdXAgb24gdGhlIHR5cGUgKG1ldGFjbGFzcykgb2YgYVxuY2xhc3MuICBUaGV5IGNhbm5vdCBiZSBkZWZpbmVkIGFzIGNsYXNzIG1ldGhvZHMgaW4gdGhlIGFjdHVhbCBjbGFzcy5cblRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZFxub24gaW5zdGFuY2VzLCBvbmx5IGluIHRoaXMgY2FzZSB0aGUgaW5zdGFuY2UgaXMgaXRzZWxmIGEgY2xhc3MuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE5KiogLSBJbnRyb2R1Y2luZyBBYnN0cmFjdCBCYXNlIENsYXNzZXNcbiAgICAgIEluY2x1ZGVzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBjdXN0b21pemluZyBgYGlzaW5zdGFuY2UoKWBgIGFuZFxuICAgICAgYGBpc3N1YmNsYXNzKClgYCBiZWhhdmlvciB0aHJvdWdoIGBgX19pbnN0YW5jZWNoZWNrX18oKWBgIGFuZFxuICAgICAgYGBfX3N1YmNsYXNzY2hlY2tfXygpYGAsIHdpdGggbW90aXZhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5XG4gICAgICBpbiB0aGUgY29udGV4dCBvZiBhZGRpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChzZWUgdGhlIGBgYWJjYGBcbiAgICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsIGBgeChhcmcxLCBhcmcyLCAuLi4pYGAgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICBgYHguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKWBgLlxuXG5cbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggYGAwIDw9IGsgPCBOYGBcbndoZXJlICpOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2hcbmRlZmluZSBhIHJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGVcbnRoZSBtZXRob2RzIGBga2V5cygpYGAsIGBgdmFsdWVzKClgYCwgYGBpdGVtcygpYGAsIGBgZ2V0KClgYCxcbmBgY2xlYXIoKWBgLCBgYHNldGRlZmF1bHQoKWBgLCBgYHBvcCgpYGAsIGBgcG9waXRlbSgpYGAsIGBgY29weSgpYGAsXG5hbmQgYGB1cGRhdGUoKWBgIGJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZFxuZGljdGlvbmFyeSBvYmplY3RzLiAgVGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUgcHJvdmlkZXMgYVxuYGBNdXRhYmxlTWFwcGluZ2BgIGFic3RyYWN0IGJhc2UgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kc1xuZnJvbSBhIGJhc2Ugc2V0IG9mIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCxcbmBgX19kZWxpdGVtX18oKWBgLCBhbmQgYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGVcbm1ldGhvZHMgYGBhcHBlbmQoKWBgLCBgYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCxcbmBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLCBgYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsXG5saWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGRcbmltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLFxuYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsIGBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYFxuZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdFxuaXMgcmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nXCdzIGtleXM7IGZvclxuc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGtleXMoKWBgOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYC4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciBgYD49YGAgMC4gIEFsc28sIGFuIG9iamVjdFxuICAgdGhhdCBkb2VzblwndCBkZWZpbmUgYSBgYF9fYm9vbF9fKClgYCBtZXRob2QgYW5kIHdob3NlIGBgX19sZW5fXygpYGBcbiAgIG1ldGhvZCByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLiAgQVxuICBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aFxuICBgYE5vbmVgYC5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mIGBgc2VsZltrZXldYGAuIEZvciBzZXF1ZW5jZVxuICAgdHlwZXMsIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy5cbiAgIE5vdGUgdGhhdCB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGVcbiAgIGNsYXNzIHdpc2hlcyB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlXG4gICBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuIElmICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSxcbiAgIGBgVHlwZUVycm9yYGAgbWF5IGJlIHJhaXNlZDsgaWYgb2YgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2ZcbiAgIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55IHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2ZcbiAgIG5lZ2F0aXZlIHZhbHVlcyksIGBgSW5kZXhFcnJvcmBgIHNob3VsZCBiZSByYWlzZWQuIEZvciBtYXBwaW5nXG4gICB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZSBjb250YWluZXIpLCBgYEtleUVycm9yYGBcbiAgIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6IGBgZm9yYGAgbG9vcHMgZXhwZWN0IHRoYXQgYW4gYGBJbmRleEVycm9yYGAgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSBgYF9fZ2V0aXRlbV9fKClgYFxuICAgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kIGBga2V5cygpYGAuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSBgYF9fcmV2ZXJzZWRfXygpYGAgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlXG4gICBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2VcbiAgIHByb3RvY29sIChgYF9fbGVuX18oKWBgIGFuZCBgYF9fZ2V0aXRlbV9fKClgYCkuICBPYmplY3RzIHRoYXRcbiAgIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sIHNob3VsZCBvbmx5IHByb3ZpZGVcbiAgIGBgX19yZXZlcnNlZF9fKClgYCBpZiB0aGV5IGNhbiBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgaXNcbiAgIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieSBgYHJldmVyc2VkKClgYC5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKGBgaW5gYCBhbmQgYGBub3QgaW5gYCkgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCwgdGhlIG1lbWJlcnNoaXBcbiAgIHRlc3QgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSBgYF9faXRlcl9fKClgYCwgdGhlbiB0aGUgb2xkXG4gICBzZXF1ZW5jZSBpdGVyYXRpb24gcHJvdG9jb2wgdmlhIGBgX19nZXRpdGVtX18oKWBgLCBzZWUgKnRoaXNcbiAgIHNlY3Rpb24gaW4gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZSouXG5cblxuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgLFxuICAgYGBkaXZtb2QoKWBgLCBgYHBvdygpYGAsIGBgKipgYCwgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCxcbiAgIGBgfGBgKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4ICsgeWBgLCB3aGVyZVxuICAgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX2FkZF9fKClgYCBtZXRob2QsXG4gICBgYHguX19hZGRfXyh5KWBgIGlzIGNhbGxlZC4gIFRoZSBgYF9fZGl2bW9kX18oKWBgIG1ldGhvZCBzaG91bGQgYmVcbiAgIHRoZSBlcXVpdmFsZW50IHRvIHVzaW5nIGBgX19mbG9vcmRpdl9fKClgYCBhbmQgYGBfX21vZF9fKClgYDsgaXRcbiAgIHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byBgYF9fdHJ1ZWRpdl9fKClgYC4gIE5vdGUgdGhhdFxuICAgYGBfX3Bvd19fKClgYCBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluIGBgcG93KClgYCBmdW5jdGlvblxuICAgaXMgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiBgYE5vdEltcGxlbWVudGVkYGAuXG5cbm9iamVjdC5fX3JhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jwb3dfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsXG4gICBgYGRpdm1vZCgpYGAsIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLFxuICAgYGB8YGApIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5XG4gICBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nXG4gICBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvclxuICAgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGBgeCAtIHlgYCwgd2hlcmUgKnkqIGlzIGFuXG4gICBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19yc3ViX18oKWBgIG1ldGhvZCxcbiAgIGBgeS5fX3JzdWJfXyh4KWBgIGlzIGNhbGxlZCBpZiBgYHguX19zdWJfXyh5KWBgIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5IGBgcG93KClgYCB3aWxsIG5vdCB0cnkgY2FsbGluZyBgYF9fcnBvd19fKClgYFxuICAgKHRoZSBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZCBmb3IgdGhlXG4gICAgIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzIHRvXG4gICAgIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzIChgYCs9YGAsIGBgLT1gYCwgYGAqPWBgLCBgYC89YGAsIGBgLy89YGAsIGBgJT1gYCxcbiAgIGBgKio9YGAsIGBgPDw9YGAsIGBgPj49YGAsIGBgJj1gYCwgYGBePWBgLCBgYHw9YGApLiAgVGhlc2UgbWV0aG9kc1xuICAgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kXG4gICByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2ggY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLFxuICAgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbCBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCB0b1xuICAgZXhlY3V0ZSB0aGUgc3RhdGVtZW50IGBgeCArPSB5YGAsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhXG4gICBjbGFzcyB0aGF0IGhhcyBhbiBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2lhZGRfXyh5KWBgIGlzXG4gICBjYWxsZWQuICBJZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGRvZXMgbm90IGRlZmluZSBhXG4gICBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2FkZF9fKHkpYGAgYW5kIGBgeS5fX3JhZGRfXyh4KWBgIGFyZVxuICAgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBgYHggKyB5YGAuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoYGAtYGAsIGBgK2BgLFxuICAgYGBhYnMoKWBgIGFuZCBgYH5gYCkuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBjb21wbGV4KClgYCxcbiAgIGBgaW50KClgYCwgYGBmbG9hdCgpYGAgYW5kIGBgcm91bmQoKWBgLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mXG4gICB0aGUgYXBwcm9wcmlhdGUgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgb3BlcmF0b3IuaW5kZXgoKWBgLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXJcbiAgIFB5dGhvbiBuZWVkcyBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGVcbiAgIGJ1aWx0LWluIGBgYmluKClgYCwgYGBoZXgoKWBgIGFuZCBgYG9jdCgpYGAgZnVuY3Rpb25zKS4gTXVzdCByZXR1cm5cbiAgIGFuIGludGVnZXIuXG5cblxuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSBgYHdpdGhgYCBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0XG5tYW5hZ2VyIGhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lXG5jb250ZXh0IGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmVcbm5vcm1hbGx5IGludm9rZWQgdXNpbmcgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb25cbipUaGUgd2l0aCBzdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXJcbm1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIGBgd2l0aGBgXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlIGBgYXNgYCBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSBgYE5vbmVgYC5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgYGBfX2V4aXRfXygpYGAgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cFxuPT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBjdXN0b20gY2xhc3NlcywgaW1wbGljaXQgaW52b2NhdGlvbnMgb2Ygc3BlY2lhbCBtZXRob2RzIGFyZSBvbmx5XG5ndWFyYW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGlmIGRlZmluZWQgb24gYW4gb2JqZWN0XCdzIHR5cGUsIG5vdCBpblxudGhlIG9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgVGhhdCBiZWhhdmlvdXIgaXMgdGhlIHJlYXNvbiB3aHlcbnRoZSBmb2xsb3dpbmcgY29kZSByYWlzZXMgYW4gZXhjZXB0aW9uOlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGxlbihjKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBvYmplY3Qgb2YgdHlwZSBcJ0NcJyBoYXMgbm8gbGVuKClcblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgbGllcyB3aXRoIGEgbnVtYmVyIG9mIHNwZWNpYWxcbm1ldGhvZHMgc3VjaCBhcyBgYF9faGFzaF9fKClgYCBhbmQgYGBfX3JlcHJfXygpYGAgdGhhdCBhcmUgaW1wbGVtZW50ZWRcbmJ5IGFsbCBvYmplY3RzLCBpbmNsdWRpbmcgdHlwZSBvYmplY3RzLiBJZiB0aGUgaW1wbGljaXQgbG9va3VwIG9mXG50aGVzZSBtZXRob2RzIHVzZWQgdGhlIGNvbnZlbnRpb25hbCBsb29rdXAgcHJvY2VzcywgdGhleSB3b3VsZCBmYWlsXG53aGVuIGludm9rZWQgb24gdGhlIHR5cGUgb2JqZWN0IGl0c2VsZjpcblxuICAgPj4+IDEgLl9faGFzaF9fKCkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IGludC5fX2hhc2hfXygpID09IGhhc2goaW50KVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBkZXNjcmlwdG9yIFwnX19oYXNoX19cJyBvZiBcJ2ludFwnIG9iamVjdCBuZWVkcyBhbiBhcmd1bWVudFxuXG5JbmNvcnJlY3RseSBhdHRlbXB0aW5nIHRvIGludm9rZSBhbiB1bmJvdW5kIG1ldGhvZCBvZiBhIGNsYXNzIGluIHRoaXNcbndheSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgXCdtZXRhY2xhc3MgY29uZnVzaW9uXCcsIGFuZCBpcyBhdm9pZGVkXG5ieSBieXBhc3NpbmcgdGhlIGluc3RhbmNlIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHM6XG5cbiAgID4+PiB0eXBlKDEpLl9faGFzaF9fKDEpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiB0eXBlKGludCkuX19oYXNoX18oaW50KSA9PSBoYXNoKGludClcbiAgIFRydWVcblxuSW4gYWRkaXRpb24gdG8gYnlwYXNzaW5nIGFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIGluIHRoZSBpbnRlcmVzdCBvZlxuY29ycmVjdG5lc3MsIGltcGxpY2l0IHNwZWNpYWwgbWV0aG9kIGxvb2t1cCBnZW5lcmFsbHkgYWxzbyBieXBhc3Nlc1xudGhlIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdFwncyBtZXRhY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOlxuICAgLi4uICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QsIG1ldGFjbGFzcz1NZXRhKTpcbiAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gMTBcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQoIkNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18oKSAgICAgICAgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIGluc3RhbmNlXG4gICBDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiB0eXBlKGMpLl9fbGVuX18oYykgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIHR5cGVcbiAgIE1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiBsZW4oYykgICAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCBsb29rdXBcbiAgIDEwXG5cbkJ5cGFzc2luZyB0aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtYWNoaW5lcnkgaW4gdGhpcyBmYXNoaW9uXG5wcm92aWRlcyBzaWduaWZpY2FudCBzY29wZSBmb3Igc3BlZWQgb3B0aW1pc2F0aW9ucyB3aXRoaW4gdGhlXG5pbnRlcnByZXRlciwgYXQgdGhlIGNvc3Qgb2Ygc29tZSBmbGV4aWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2ZcbnNwZWNpYWwgbWV0aG9kcyAodGhlIHNwZWNpYWwgbWV0aG9kICptdXN0KiBiZSBzZXQgb24gdGhlIGNsYXNzIG9iamVjdFxuaXRzZWxmIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnRseSBpbnZva2VkIGJ5IHRoZSBpbnRlcnByZXRlcikuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gSXQgKmlzKiBwb3NzaWJsZSBpbiBzb21lIGNhc2VzIHRvIGNoYW5nZSBhbiBvYmplY3RcJ3MgdHlwZSwgdW5kZXJcbiAgICBjZXJ0YWluIGNvbnRyb2xsZWQgY29uZGl0aW9ucy4gSXQgZ2VuZXJhbGx5IGlzblwndCBhIGdvb2QgaWRlYVxuICAgIHRob3VnaCwgc2luY2UgaXQgY2FuIGxlYWQgdG8gc29tZSB2ZXJ5IHN0cmFuZ2UgYmVoYXZpb3VyIGlmIGl0IGlzXG4gICAgaGFuZGxlZCBpbmNvcnJlY3RseS5cblxuWzJdIEZvciBvcGVyYW5kcyBvZiB0aGUgc2FtZSB0eXBlLCBpdCBpcyBhc3N1bWVkIHRoYXQgaWYgdGhlIG5vbi1cbiAgICByZWZsZWN0ZWQgbWV0aG9kIChzdWNoIGFzIGBgX19hZGRfXygpYGApIGZhaWxzIHRoZSBvcGVyYXRpb24gaXNcbiAgICBub3Qgc3VwcG9ydGVkLCB3aGljaCBpcyB3aHkgdGhlIHJlZmxlY3RlZCBtZXRob2QgaXMgbm90IGNhbGxlZC5cbicsCisgJ3NwZWNpYWxuYW1lcyc6ICdcblNwZWNpYWwgbWV0aG9kIG5hbWVzXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGNhbiBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIGludm9rZWQgYnkgc3BlY2lhbFxuc3ludGF4IChzdWNoIGFzIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBvciBzdWJzY3JpcHRpbmcgYW5kIHNsaWNpbmcpIGJ5XG5kZWZpbmluZyBtZXRob2RzIHdpdGggc3BlY2lhbCBuYW1lcy4gVGhpcyBpcyBQeXRob25cJ3MgYXBwcm9hY2ggdG9cbipvcGVyYXRvciBvdmVybG9hZGluZyosIGFsbG93aW5nIGNsYXNzZXMgdG8gZGVmaW5lIHRoZWlyIG93biBiZWhhdmlvclxud2l0aCByZXNwZWN0IHRvIGxhbmd1YWdlIG9wZXJhdG9ycy4gIEZvciBpbnN0YW5jZSwgaWYgYSBjbGFzcyBkZWZpbmVzXG5hIG1ldGhvZCBuYW1lZCBgYF9fZ2V0aXRlbV9fKClgYCwgYW5kIGBgeGBgIGlzIGFuIGluc3RhbmNlIG9mIHRoaXNcbmNsYXNzLCB0aGVuIGBgeFtpXWBgIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBgYHR5cGUoeCkuX19nZXRpdGVtX18oeCxcbmkpYGAuICBFeGNlcHQgd2hlcmUgbWVudGlvbmVkLCBhdHRlbXB0cyB0byBleGVjdXRlIGFuIG9wZXJhdGlvbiByYWlzZVxuYW4gZXhjZXB0aW9uIHdoZW4gbm8gYXBwcm9wcmlhdGUgbWV0aG9kIGlzIGRlZmluZWQgKHR5cGljYWxseVxuYGBBdHRyaWJ1dGVFcnJvcmBgIG9yIGBgVHlwZUVycm9yYGApLlxuXG5XaGVuIGltcGxlbWVudGluZyBhIGNsYXNzIHRoYXQgZW11bGF0ZXMgYW55IGJ1aWx0LWluIHR5cGUsIGl0IGlzXG5pbXBvcnRhbnQgdGhhdCB0aGUgZW11bGF0aW9uIG9ubHkgYmUgaW1wbGVtZW50ZWQgdG8gdGhlIGRlZ3JlZSB0aGF0IGl0XG5tYWtlcyBzZW5zZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtb2RlbGxlZC4gIEZvciBleGFtcGxlLCBzb21lXG5zZXF1ZW5jZXMgbWF5IHdvcmsgd2VsbCB3aXRoIHJldHJpZXZhbCBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBidXRcbmV4dHJhY3RpbmcgYSBzbGljZSBtYXkgbm90IG1ha2Ugc2Vuc2UuICAoT25lIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGVcbmBgTm9kZUxpc3RgYCBpbnRlcmZhY2UgaW4gdGhlIFczQ1wncyBEb2N1bWVudCBPYmplY3QgTW9kZWwuKVxuXG5cbkJhc2ljIGN1c3RvbWl6YXRpb25cbj09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfaW5mbygpWzJdYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuIHRoZSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXNcbiAgICAgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnY2BgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHRvcGljLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gYGBzeXMuc3RkZXJyYGAgaW5zdGVhZC5cbiAgICAgQWxzbywgd2hlbiBgYF9fZGVsX18oKWBgIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZCB0byBtYWludGFpblxuICAgICBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSwgUHl0aG9uXG4gICAgIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHJlcHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlXG4gICAib2ZmaWNpYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsXG4gICB0aGlzIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWRcbiAgIHRvIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICBgYDwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj5gYCBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgYGBfX3JlcHJfXygpYGBcbiAgIGJ1dCBub3QgYGBfX3N0cl9fKClgYCwgdGhlbiBgYF9fcmVwcl9fKClgYCBpcyBhbHNvIHVzZWQgd2hlbiBhblxuICAgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXNcbiAgIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBgYHN0cihvYmplY3QpYGAgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBmb3JtYXQoKWBgXG4gICBhbmQgYGBwcmludCgpYGAgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBvciBuaWNlbHkgcHJpbnRhYmxlXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgICpzdHJpbmcqIG9iamVjdC5cblxuICAgVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBgb2JqZWN0Ll9fcmVwcl9fKClgYCBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0IGBgX19zdHJfXygpYGAgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlIGBgb2JqZWN0YGBcbiAgIGNhbGxzIGBgb2JqZWN0Ll9fcmVwcl9fKClgYC5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBieXRlcygpYGAgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhIGBgYnl0ZXNgYCBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgZm9ybWF0KClgYCBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBvZiBjbGFzcyBgYHN0cmBgKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXNcbiAgIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpcyB1cFxuICAgdG8gdGhlIHR5cGUgaW1wbGVtZW50aW5nIGBgX19mb3JtYXRfXygpYGAsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzXG4gICB3aWxsIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yXG4gICB1c2UgYSBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6IGBgeDx5YGAgY2FsbHMgYGB4Ll9fbHRfXyh5KWBgLCBgYHg8PXlgYCBjYWxsc1xuICAgYGB4Ll9fbGVfXyh5KWBgLCBgYHg9PXlgYCBjYWxscyBgYHguX19lcV9fKHkpYGAsIGBgeCE9eWBgIGNhbGxzXG4gICBgYHguX19uZV9fKHkpYGAsIGBgeD55YGAgY2FsbHMgYGB4Ll9fZ3RfXyh5KWBgLCBhbmQgYGB4Pj15YGAgY2FsbHNcbiAgIGBgeC5fX2dlX18oeSlgYC5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvblxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhXG4gICBnaXZlbiBwYWlyIG9mIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgYGBGYWxzZWBgIGFuZCBgYFRydWVgYCBhcmVcbiAgIHJldHVybmVkIGZvciBhIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW5cbiAgIHJldHVybiBhbnkgdmFsdWUsIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0IChlLmcuLCBpbiB0aGUgY29uZGl0aW9uIG9mIGFuIGBgaWZgYCBzdGF0ZW1lbnQpLFxuICAgUHl0aG9uIHdpbGwgY2FsbCBgYGJvb2woKWBgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdFxuICAgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgYGB4PT15YGAgZG9lcyBub3QgaW1wbHkgdGhhdCBgYHghPXlgYCBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nIGBgX19lcV9fKClgYCwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgYGBfX25lX18oKWBgIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZVxuICAgdGhlIHBhcmFncmFwaCBvbiBgYF9faGFzaF9fKClgYCBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb25cbiAgIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uXG4gICBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgYGBfX2x0X18oKWBgIGFuZCBgYF9fZ3RfXygpYGAgYXJlIGVhY2hcbiAgIG90aGVyXCdzIHJlZmxlY3Rpb24sIGBgX19sZV9fKClgYCBhbmQgYGBfX2dlX18oKWBgIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCBhbmQgYGBfX2VxX18oKWBgIGFuZCBgYF9fbmVfXygpYGAgYXJlIHRoZWlyIG93blxuICAgcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSBgYGZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpYGAuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gYGBoYXNoKClgYCBhbmQgZm9yIG9wZXJhdGlvbnMgb25cbiAgIG1lbWJlcnMgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyBgYHNldGBgLCBgYGZyb3plbnNldGBgLCBhbmRcbiAgIGBgZGljdGBgLiAgYGBfX2hhc2hfXygpYGAgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHlcbiAgIHJlcXVpcmVkIHByb3BlcnR5IGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWVcbiAgIGhhc2ggdmFsdWU7IGl0IGlzIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmdcbiAgIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2ggdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXRcbiAgIGFsc28gcGxheSBhIHBhcnQgaW4gY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBOb3RlOiBgYGhhc2goKWBgIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3MgY3VzdG9tXG4gICAgIGBgX19oYXNoX18oKWBgIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhIGBgUHlfc3NpemVfdGBgLiAgVGhpcyBpc1xuICAgICB0eXBpY2FsbHkgOCBieXRlcyBvbiA2NC1iaXQgYnVpbGRzIGFuZCA0IGJ5dGVzIG9uIDMyLWJpdCBidWlsZHMuXG4gICAgIElmIGFuIG9iamVjdFwncyAgIGBgX19oYXNoX18oKWBgIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkcyBvZlxuICAgICBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGwgc3VwcG9ydGVkXG4gICAgIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCBgYHB5dGhvbiAtYyAiaW1wb3J0IHN5cztcbiAgICAgcHJpbnQoc3lzLmhhc2hfaW5mby53aWR0aCkiYGBcblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSBgYF9faGFzaF9fKClgYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzXG4gICBgYF9fZXFfXygpYGAgYnV0IG5vdCBgYF9faGFzaF9fKClgYCwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZVxuICAgdXNhYmxlIGFzIGl0ZW1zIGluIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBtdXRhYmxlIG9iamVjdHMgYW5kIGltcGxlbWVudHMgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCwgaXQgc2hvdWxkXG4gICBub3QgaW1wbGVtZW50IGBgX19oYXNoX18oKWBgLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGVcbiAgIGNvbGxlY3Rpb25zIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZVxuICAgb2JqZWN0XCdzIGhhc2ggdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlIGBgX19lcV9fKClgYCBhbmQgYGBfX2hhc2hfXygpYGAgbWV0aG9kc1xuICAgYnkgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgYGB4Ll9faGFzaF9fKClgYCByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHN1Y2hcbiAgIHRoYXQgYGB4ID09IHlgYCBpbXBsaWVzIGJvdGggdGhhdCBgYHggaXMgeWBgIGFuZCBgYGhhc2goeCkgPT1cbiAgIGhhc2goeSlgYC5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgYW5kIGRvZXMgbm90IGRlZmluZVxuICAgYGBfX2hhc2hfXygpYGAgd2lsbCBoYXZlIGl0cyBgYF9faGFzaF9fKClgYCBpbXBsaWNpdGx5IHNldCB0b1xuICAgYGBOb25lYGAuICBXaGVuIHRoZSBgYF9faGFzaF9fKClgYCBtZXRob2Qgb2YgYSBjbGFzcyBpcyBgYE5vbmVgYCxcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3Mgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSBgYFR5cGVFcnJvcmBgIHdoZW5cbiAgIGEgcHJvZ3JhbSBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlXG4gICBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaixcbiAgIGNvbGxlY3Rpb25zLkhhc2hhYmxlYGApLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiBgYF9faGFzaF9fKClgYCBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGVcbiAgIGludGVycHJldGVyIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyBgYF9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX19gYC5cblxuICAgSWYgYSBjbGFzcyB0aGF0IGRvZXMgbm90IG92ZXJyaWRlIGBgX19lcV9fKClgYCB3aXNoZXMgdG8gc3VwcHJlc3NcbiAgIGhhc2ggc3VwcG9ydCwgaXQgc2hvdWxkIGluY2x1ZGUgYGBfX2hhc2hfXyA9IE5vbmVgYCBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duIGBgX19oYXNoX18oKWBgIHRoYXRcbiAgIGV4cGxpY2l0bHkgcmFpc2VzIGEgYGBUeXBlRXJyb3JgYCB3b3VsZCBiZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkXG4gICBhcyBoYXNoYWJsZSBieSBhbiBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSlgYCBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgYGBfX2hhc2hfXygpYGAgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kIGRhdGV0aW1lXG4gICAgIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSByYW5kb20gdmFsdWUuXG4gICAgIEFsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvblxuICAgICBwcm9jZXNzLCB0aGV5IGFyZSBub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZlxuICAgICBQeXRob24uVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBhIGRlbmlhbC1cbiAgICAgb2Ytc2VydmljZSBjYXVzZWQgYnkgY2FyZWZ1bGx5LWNob3NlbiBpbnB1dHMgdGhhdCBleHBsb2l0IHRoZVxuICAgICB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIG9mIGEgZGljdCBpbnNlcnRpb24sIE8obl4yKSBjb21wbGV4aXR5LlxuICAgICBTZWUgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sIGZvclxuICAgICBkZXRhaWxzLkNoYW5naW5nIGhhc2ggdmFsdWVzIGFmZmVjdHMgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZlxuICAgICBkaWN0cywgc2V0cyBhbmQgb3RoZXIgbWFwcGluZ3MuICBQeXRob24gaGFzIG5ldmVyIG1hZGUgZ3VhcmFudGVlc1xuICAgICBhYm91dCB0aGlzIG9yZGVyaW5nIChhbmQgaXQgdHlwaWNhbGx5IHZhcmllcyBiZXR3ZWVuIDMyLWJpdCBhbmRcbiAgICAgNjQtYml0IGJ1aWxkcykuU2VlIGFsc28gYGBQWVRIT05IQVNIU0VFRGBgLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBIYXNoIHJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5vYmplY3QuX19ib29sX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICBgYGJvb2woKWBgOyBzaG91bGQgcmV0dXJuIGBgRmFsc2VgYCBvciBgYFRydWVgYC4gIFdoZW4gdGhpcyBtZXRob2RcbiAgIGlzIG5vdCBkZWZpbmVkLCBgYF9fbGVuX18oKWBgIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZVxuICAgb2JqZWN0IGlzIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzXG4gICBkZWZpbmVzIG5laXRoZXIgYGBfX2xlbl9fKClgYCBub3IgYGBfX2Jvb2xfXygpYGAsIGFsbCBpdHMgaW5zdGFuY2VzXG4gICBhcmUgY29uc2lkZXJlZCB0cnVlLlxuXG5cbkN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGN1c3RvbWl6ZSB0aGUgbWVhbmluZyBvZlxuYXR0cmlidXRlIGFjY2VzcyAodXNlIG9mLCBhc3NpZ25tZW50IHRvLCBvciBkZWxldGlvbiBvZiBgYHgubmFtZWBgKVxuZm9yIGNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgYGBzZWxmYGApLiAgYGBuYW1lYGAgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2VcbiAgIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICBgYF9fZ2V0YXR0cl9fKClgYCBpcyBub3QgY2FsbGVkLiAgKFRoaXMgaXMgYW4gaW50ZW50aW9uYWwgYXN5bW1ldHJ5XG4gICBiZXR3ZWVuIGBgX19nZXRhdHRyX18oKWBgIGFuZCBgYF9fc2V0YXR0cl9fKClgYC4pIFRoaXMgaXMgZG9uZSBib3RoXG4gICBmb3IgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSBgYF9fZ2V0YXR0cl9fKClgYFxuICAgd291bGQgaGF2ZSBubyB3YXkgdG8gYWNjZXNzIG90aGVyIGF0dHJpYnV0ZXMgb2YgdGhlIGluc3RhbmNlLiAgTm90ZVxuICAgdGhhdCBhdCBsZWFzdCBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCB5b3UgY2FuIGZha2UgdG90YWwgY29udHJvbCBieVxuICAgbm90IGluc2VydGluZyBhbnkgdmFsdWVzIGluIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSAoYnV0XG4gICBpbnN0ZWFkIGluc2VydGluZyB0aGVtIGluIGFub3RoZXIgb2JqZWN0KS4gIFNlZSB0aGVcbiAgIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWV0aG9kIGJlbG93IGZvciBhIHdheSB0byBhY3R1YWxseSBnZXQgdG90YWxcbiAgIGNvbnRyb2wgb3ZlciBhdHRyaWJ1dGUgYWNjZXNzLlxuXG5vYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgdW5jb25kaXRpb25hbGx5IHRvIGltcGxlbWVudCBhdHRyaWJ1dGUgYWNjZXNzZXMgZm9yXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzLiBJZiB0aGUgY2xhc3MgYWxzbyBkZWZpbmVzXG4gICBgYF9fZ2V0YXR0cl9fKClgYCwgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzXG4gICBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIGVpdGhlciBjYWxscyBpdCBleHBsaWNpdGx5IG9yIHJhaXNlcyBhblxuICAgYGBBdHRyaWJ1dGVFcnJvcmBgLiBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpXG4gICBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW4gYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi4gSW4gb3JkZXJcbiAgIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBpbiB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uXG4gICBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0b1xuICAgYWNjZXNzIGFueSBhdHRyaWJ1dGVzIGl0IG5lZWRzLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlgYC5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHNcbiAgICAgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXggb3JcbiAgICAgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgYGBfX3NldGF0dHJfXygpYGAgd2FudHMgdG8gYXNzaWduIHRvIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgaXRcbiAgIHNob3VsZCBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUsIGZvciBleGFtcGxlLFxuICAgYGBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpYGAuXG5cbm9iamVjdC5fX2RlbGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBMaWtlIGBgX19zZXRhdHRyX18oKWBgIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmIGBgZGVsIG9iai5uYW1lYGAgaXNcbiAgIG1lYW5pbmdmdWwgZm9yIHRoZSBvYmplY3QuXG5cbm9iamVjdC5fX2Rpcl9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIGBgZGlyKClgYCBpcyBjYWxsZWQgb24gdGhlIG9iamVjdC4gQSBzZXF1ZW5jZSBtdXN0IGJlXG4gICByZXR1cm5lZC4gYGBkaXIoKWBgIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyBgYF9fZGljdF9fYGAuXG5cbm9iamVjdC5fX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcilcblxuICAgQ2FsbGVkIHRvIGdldCB0aGUgYXR0cmlidXRlIG9mIHRoZSBvd25lciBjbGFzcyAoY2xhc3MgYXR0cmlidXRlXG4gICBhY2Nlc3MpIG9yIG9mIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgKGluc3RhbmNlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKS4gKm93bmVyKiBpcyBhbHdheXMgdGhlIG93bmVyIGNsYXNzLCB3aGlsZSAqaW5zdGFuY2UqIGlzIHRoZVxuICAgaW5zdGFuY2UgdGhhdCB0aGUgYXR0cmlidXRlIHdhcyBhY2Nlc3NlZCB0aHJvdWdoLCBvciBgYE5vbmVgYCB3aGVuXG4gICB0aGUgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlICpvd25lciouICBUaGlzIG1ldGhvZCBzaG91bGRcbiAgIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblxuSW52b2tpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkluIGdlbmVyYWwsIGEgZGVzY3JpcHRvciBpcyBhbiBvYmplY3QgYXR0cmlidXRlIHdpdGggImJpbmRpbmdcbmJlaGF2aW9yIiwgb25lIHdob3NlIGF0dHJpYnV0ZSBhY2Nlc3MgaGFzIGJlZW4gb3ZlcnJpZGRlbiBieSBtZXRob2RzXG5pbiB0aGUgZGVzY3JpcHRvciBwcm90b2NvbDogIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAsIGFuZFxuYGBfX2RlbGV0ZV9fKClgYC4gSWYgYW55IG9mIHRob3NlIG1ldGhvZHMgYXJlIGRlZmluZWQgZm9yIGFuIG9iamVjdCxcbml0IGlzIHNhaWQgdG8gYmUgYSBkZXNjcmlwdG9yLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYXR0cmlidXRlIGFjY2VzcyBpcyB0byBnZXQsIHNldCwgb3IgZGVsZXRlXG50aGUgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0XCdzIGRpY3Rpb25hcnkuIEZvciBpbnN0YW5jZSwgYGBhLnhgYCBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggYGBhLl9fZGljdF9fW1wneFwnXWBgLCB0aGVuXG5gYHR5cGUoYSkuX19kaWN0X19bXCd4XCddYGAsIGFuZCBjb250aW51aW5nIHRocm91Z2ggdGhlIGJhc2UgY2xhc3NlcyBvZlxuYGB0eXBlKGEpYGAgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCBgYGEueGBgLlxuSG93IHRoZSBhcmd1bWVudHMgYXJlIGFzc2VtYmxlZCBkZXBlbmRzIG9uIGBgYWBgOlxuXG5EaXJlY3QgQ2FsbFxuICAgVGhlIHNpbXBsZXN0IGFuZCBsZWFzdCBjb21tb24gY2FsbCBpcyB3aGVuIHVzZXIgY29kZSBkaXJlY3RseVxuICAgaW52b2tlcyBhIGRlc2NyaXB0b3IgbWV0aG9kOiAgICBgYHguX19nZXRfXyhhKWBgLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGFuIG9iamVjdCBpbnN0YW5jZSwgYGBhLnhgYCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZVxuICAgY2FsbDogYGB0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpYGAuXG5cbkNsYXNzIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYSBjbGFzcywgYGBBLnhgYCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBjYWxsOlxuICAgYGBBLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKE5vbmUsIEEpYGAuXG5cblN1cGVyIEJpbmRpbmdcbiAgIElmIGBgYWBgIGlzIGFuIGluc3RhbmNlIG9mIGBgc3VwZXJgYCwgdGhlbiB0aGUgYmluZGluZyBgYHN1cGVyKEIsXG4gICBvYmopLm0oKWBgIHNlYXJjaGVzIGBgb2JqLl9fY2xhc3NfXy5fX21yb19fYGAgZm9yIHRoZSBiYXNlIGNsYXNzXG4gICBgYEFgYCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYGBCYGAgYW5kIHRoZW4gaW52b2tlcyB0aGUgZGVzY3JpcHRvclxuICAgd2l0aCB0aGUgY2FsbDogYGBBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgb2JqLl9fY2xhc3NfXylgYC5cblxuRm9yIGluc3RhbmNlIGJpbmRpbmdzLCB0aGUgcHJlY2VkZW5jZSBvZiBkZXNjcmlwdG9yIGludm9jYXRpb24gZGVwZW5kc1xub24gdGhlIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyBhcmUgZGVmaW5lZC4gIEEgZGVzY3JpcHRvciBjYW4gZGVmaW5lXG5hbnkgY29tYmluYXRpb24gb2YgYGBfX2dldF9fKClgYCwgYGBfX3NldF9fKClgYCBhbmQgYGBfX2RlbGV0ZV9fKClgYC5cbklmIGl0IGRvZXMgbm90IGRlZmluZSBgYF9fZ2V0X18oKWBgLCB0aGVuIGFjY2Vzc2luZyB0aGUgYXR0cmlidXRlIHdpbGxcbnJldHVybiB0aGUgZGVzY3JpcHRvciBvYmplY3QgaXRzZWxmIHVubGVzcyB0aGVyZSBpcyBhIHZhbHVlIGluIHRoZVxub2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJZiB0aGUgZGVzY3JpcHRvciBkZWZpbmVzIGBgX19zZXRfXygpYGBcbmFuZC9vciBgYF9fZGVsZXRlX18oKWBgLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lc1xubmVpdGhlciwgaXQgaXMgYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnNcbmRlZmluZSBib3RoIGBgX19nZXRfXygpYGAgYW5kIGBgX19zZXRfXygpYGAsIHdoaWxlIG5vbi1kYXRhXG5kZXNjcmlwdG9ycyBoYXZlIGp1c3QgdGhlIGBgX19nZXRfXygpYGAgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoXG5gYF9fc2V0X18oKWBgIGFuZCBgYF9fZ2V0X18oKWBgIGRlZmluZWQgYWx3YXlzIG92ZXJyaWRlIGEgcmVkZWZpbml0aW9uXG5pbiBhbiBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSW4gY29udHJhc3QsIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGNhbiBiZVxub3ZlcnJpZGRlbiBieSBpbnN0YW5jZXMuXG5cblB5dGhvbiBtZXRob2RzIChpbmNsdWRpbmcgYGBzdGF0aWNtZXRob2QoKWBgIGFuZCBgYGNsYXNzbWV0aG9kKClgYClcbmFyZSBpbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlIGBgcHJvcGVydHkoKWBgIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgZGF0YSBkZXNjcmlwdG9yLlxuQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5ub3Qgb3ZlcnJpZGUgdGhlIGJlaGF2aW9yIG9mIGEgcHJvcGVydHkuXG5cblxuX19zbG90c19fXG4tLS0tLS0tLS1cblxuQnkgZGVmYXVsdCwgaW5zdGFuY2VzIG9mIGNsYXNzZXMgaGF2ZSBhIGRpY3Rpb25hcnkgZm9yIGF0dHJpYnV0ZVxuc3RvcmFnZS4gIFRoaXMgd2FzdGVzIHNwYWNlIGZvciBvYmplY3RzIGhhdmluZyB2ZXJ5IGZldyBpbnN0YW5jZVxudmFyaWFibGVzLiAgVGhlIHNwYWNlIGNvbnN1bXB0aW9uIGNhbiBiZWNvbWUgYWN1dGUgd2hlbiBjcmVhdGluZyBsYXJnZVxubnVtYmVycyBvZiBpbnN0YW5jZXMuXG5cblRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nICpfX3Nsb3RzX18qIGluIGEgY2xhc3NcbmRlZmluaXRpb24uIFRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB0YWtlcyBhIHNlcXVlbmNlIG9mIGluc3RhbmNlXG52YXJpYWJsZXMgYW5kIHJlc2VydmVzIGp1c3QgZW5vdWdoIHNwYWNlIGluIGVhY2ggaW5zdGFuY2UgdG8gaG9sZCBhXG52YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gIFNwYWNlIGlzIHNhdmVkIGJlY2F1c2UgKl9fZGljdF9fKiBpcyBub3RcbmNyZWF0ZWQgZm9yIGVhY2ggaW5zdGFuY2UuXG5cbm9iamVjdC5fX3Nsb3RzX19cblxuICAgVGhpcyBjbGFzcyB2YXJpYWJsZSBjYW4gYmUgYXNzaWduZWQgYSBzdHJpbmcsIGl0ZXJhYmxlLCBvciBzZXF1ZW5jZVxuICAgb2Ygc3RyaW5ncyB3aXRoIHZhcmlhYmxlIG5hbWVzIHVzZWQgYnkgaW5zdGFuY2VzLiAgSWYgZGVmaW5lZCBpbiBhXG4gICBjbGFzcywgKl9fc2xvdHNfXyogcmVzZXJ2ZXMgc3BhY2UgZm9yIHRoZSBkZWNsYXJlZCB2YXJpYWJsZXMgYW5kXG4gICBwcmV2ZW50cyB0aGUgYXV0b21hdGljIGNyZWF0aW9uIG9mICpfX2RpY3RfXyogYW5kICpfX3dlYWtyZWZfXyogZm9yXG4gICBlYWNoIGluc3RhbmNlLlxuXG5cbk5vdGVzIG9uIHVzaW5nICpfX3Nsb3RzX18qXG5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuXG4qIFdoZW4gaW5oZXJpdGluZyBmcm9tIGEgY2xhc3Mgd2l0aG91dCAqX19zbG90c19fKiwgdGhlICpfX2RpY3RfXypcbiAgYXR0cmlidXRlIG9mIHRoYXQgY2xhc3Mgd2lsbCBhbHdheXMgYmUgYWNjZXNzaWJsZSwgc28gYSAqX19zbG90c19fKlxuICBkZWZpbml0aW9uIGluIHRoZSBzdWJjbGFzcyBpcyBtZWFuaW5nbGVzcy5cblxuKiBXaXRob3V0IGEgKl9fZGljdF9fKiB2YXJpYWJsZSwgaW5zdGFuY2VzIGNhbm5vdCBiZSBhc3NpZ25lZCBuZXdcbiAgdmFyaWFibGVzIG5vdCBsaXN0ZWQgaW4gdGhlICpfX3Nsb3RzX18qIGRlZmluaXRpb24uICBBdHRlbXB0cyB0b1xuICBhc3NpZ24gdG8gYW4gdW5saXN0ZWQgdmFyaWFibGUgbmFtZSByYWlzZXMgYGBBdHRyaWJ1dGVFcnJvcmBgLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICBgYFwnX19kaWN0X19cJ2BgIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3NlcyBkZWZpbmluZ1xuICAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGluc3RhbmNlcy4gSWYgd2Vha1xuICByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkIGBgXCdfX3dlYWtyZWZfX1wnYGAgdG8gdGhlXG4gIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uLlxuXG4qICpfX3Nsb3RzX18qIGFyZSBpbXBsZW1lbnRlZCBhdCB0aGUgY2xhc3MgbGV2ZWwgYnkgY3JlYXRpbmdcbiAgZGVzY3JpcHRvcnMgKCpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqKSBmb3IgZWFjaCB2YXJpYWJsZSBuYW1lLiAgQXNcbiAgYSByZXN1bHQsIGNsYXNzIGF0dHJpYnV0ZXMgY2Fubm90IGJlIHVzZWQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvclxuICBpbnN0YW5jZSB2YXJpYWJsZXMgZGVmaW5lZCBieSAqX19zbG90c19fKjsgb3RoZXJ3aXNlLCB0aGUgY2xhc3NcbiAgYXR0cmlidXRlIHdvdWxkIG92ZXJ3cml0ZSB0aGUgZGVzY3JpcHRvciBhc3NpZ25tZW50LlxuXG4qIFRoZSBhY3Rpb24gb2YgYSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzc1xuICB3aGVyZSBpdCBpcyBkZWZpbmVkLiAgQXMgYSByZXN1bHQsIHN1YmNsYXNzZXMgd2lsbCBoYXZlIGEgKl9fZGljdF9fKlxuICB1bmxlc3MgdGhleSBhbHNvIGRlZmluZSAqX19zbG90c19fKiAod2hpY2ggbXVzdCBvbmx5IGNvbnRhaW4gbmFtZXNcbiAgb2YgYW55ICphZGRpdGlvbmFsKiBzbG90cykuXG5cbiogSWYgYSBjbGFzcyBkZWZpbmVzIGEgc2xvdCBhbHNvIGRlZmluZWQgaW4gYSBiYXNlIGNsYXNzLCB0aGUgaW5zdGFuY2VcbiAgdmFyaWFibGUgZGVmaW5lZCBieSB0aGUgYmFzZSBjbGFzcyBzbG90IGlzIGluYWNjZXNzaWJsZSAoZXhjZXB0IGJ5XG4gIHJldHJpZXZpbmcgaXRzIGRlc2NyaXB0b3IgZGlyZWN0bHkgZnJvbSB0aGUgYmFzZSBjbGFzcykuIFRoaXNcbiAgcmVuZGVycyB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbSB1bmRlZmluZWQuICBJbiB0aGUgZnV0dXJlLCBhXG4gIGNoZWNrIG1heSBiZSBhZGRlZCB0byBwcmV2ZW50IHRoaXMuXG5cbiogTm9uZW1wdHkgKl9fc2xvdHNfXyogZG9lcyBub3Qgd29yayBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb21cbiAgInZhcmlhYmxlLWxlbmd0aCIgYnVpbHQtaW4gdHlwZXMgc3VjaCBhcyBgYGludGBgLCBgYHN0cmBgIGFuZFxuICBgYHR1cGxlYGAuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5ncyBtYXlcbiAgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG5cblxuQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb25cbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIGNsYXNzZXMgYXJlIGNvbnN0cnVjdGVkIHVzaW5nIGBgdHlwZSgpYGAuIFRoZSBjbGFzcyBib2R5XG5pcyBleGVjdXRlZCBpbiBhIG5ldyBuYW1lc3BhY2UgYW5kIHRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIGxvY2FsbHkgdG9cbnRoZSByZXN1bHQgb2YgYGB0eXBlKG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpYGAuXG5cblRoZSBjbGFzcyBjcmVhdGlvbiBwcm9jZXNzIGNhbiBiZSBjdXN0b21pc2VkIGJ5IHBhc3NpbmcgdGhlXG5gYG1ldGFjbGFzc2BgIGtleXdvcmQgYXJndW1lbnQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gbGluZSwgb3IgYnlcbmluaGVyaXRpbmcgZnJvbSBhbiBleGlzdGluZyBjbGFzcyB0aGF0IGluY2x1ZGVkIHN1Y2ggYW4gYXJndW1lbnQuIEluXG50aGUgZm9sbG93aW5nIGV4YW1wbGUsIGJvdGggYGBNeUNsYXNzYGAgYW5kIGBgTXlTdWJjbGFzc2BgIGFyZVxuaW5zdGFuY2VzIG9mIGBgTWV0YWBgOlxuXG4gICBjbGFzcyBNZXRhKHR5cGUpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlDbGFzcyhtZXRhY2xhc3M9TWV0YSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeVN1YmNsYXNzKE15Q2xhc3MpOlxuICAgICAgIHBhc3NcblxuQW55IG90aGVyIGtleXdvcmQgYXJndW1lbnRzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxuYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGFsbCBtZXRhY2xhc3Mgb3BlcmF0aW9ucyBkZXNjcmliZWQgYmVsb3cuXG5cbldoZW4gYSBjbGFzcyBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLCB0aGUgZm9sbG93aW5nIHN0ZXBzIG9jY3VyOlxuXG4qIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaXMgZGV0ZXJtaW5lZFxuXG4qIHRoZSBjbGFzcyBuYW1lc3BhY2UgaXMgcHJlcGFyZWRcblxuKiB0aGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZFxuXG4qIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZFxuXG5cbkRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3Ncbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBmb3IgYSBjbGFzcyBkZWZpbml0aW9uIGlzIGRldGVybWluZWQgYXNcbmZvbGxvd3M6XG5cbiogaWYgbm8gYmFzZXMgYW5kIG5vIGV4cGxpY2l0IG1ldGFjbGFzcyBhcmUgZ2l2ZW4sIHRoZW4gYGB0eXBlKClgYCBpc1xuICB1c2VkXG5cbiogaWYgYW4gZXhwbGljaXQgbWV0YWNsYXNzIGlzIGdpdmVuIGFuZCBpdCBpcyAqbm90KiBhbiBpbnN0YW5jZSBvZlxuICBgYHR5cGUoKWBgLCB0aGVuIGl0IGlzIHVzZWQgZGlyZWN0bHkgYXMgdGhlIG1ldGFjbGFzc1xuXG4qIGlmIGFuIGluc3RhbmNlIG9mIGBgdHlwZSgpYGAgaXMgZ2l2ZW4gYXMgdGhlIGV4cGxpY2l0IG1ldGFjbGFzcywgb3JcbiAgYmFzZXMgYXJlIGRlZmluZWQsIHRoZW4gdGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgdXNlZFxuXG5UaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBzZWxlY3RlZCBmcm9tIHRoZSBleHBsaWNpdGx5IHNwZWNpZmllZFxubWV0YWNsYXNzIChpZiBhbnkpIGFuZCB0aGUgbWV0YWNsYXNzZXMgKGkuZS4gYGB0eXBlKGNscylgYCkgb2YgYWxsXG5zcGVjaWZpZWQgYmFzZSBjbGFzc2VzLiBUaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBvbmUgd2hpY2ggaXMgYVxuc3VidHlwZSBvZiAqYWxsKiBvZiB0aGVzZSBjYW5kaWRhdGUgbWV0YWNsYXNzZXMuIElmIG5vbmUgb2YgdGhlXG5jYW5kaWRhdGUgbWV0YWNsYXNzZXMgbWVldHMgdGhhdCBjcml0ZXJpb24sIHRoZW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbndpbGwgZmFpbCB3aXRoIGBgVHlwZUVycm9yYGAuXG5cblxuUHJlcGFyaW5nIHRoZSBjbGFzcyBuYW1lc3BhY2Vcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBoYXMgYmVlbiBpZGVudGlmaWVkLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIHByZXBhcmVkLiBJZiB0aGUgbWV0YWNsYXNzIGhhcyBhIGBgX19wcmVwYXJlX19gYFxuYXR0cmlidXRlLCBpdCBpcyBjYWxsZWQgYXMgYGBuYW1lc3BhY2UgPSBtZXRhY2xhc3MuX19wcmVwYXJlX18obmFtZSxcbmJhc2VzLCAqKmt3ZHMpYGAgKHdoZXJlIHRoZSBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLCBpZiBhbnksIGNvbWVcbmZyb20gdGhlIGNsYXNzIGRlZmluaXRpb24pLlxuXG5JZiB0aGUgbWV0YWNsYXNzIGhhcyBubyBgYF9fcHJlcGFyZV9fYGAgYXR0cmlidXRlLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIGluaXRpYWxpc2VkIGFzIGFuIGVtcHR5IGBgZGljdCgpYGAgaW5zdGFuY2UuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMzAwMFxuICAgICAgSW50cm9kdWNlZCB0aGUgYGBfX3ByZXBhcmVfX2BgIG5hbWVzcGFjZSBob29rXG5cblxuRXhlY3V0aW5nIHRoZSBjbGFzcyBib2R5XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWQgKGFwcHJveGltYXRlbHkpIGFzIGBgZXhlYyhib2R5LCBnbG9iYWxzKCksXG5uYW1lc3BhY2UpYGAuIFRoZSBrZXkgZGlmZmVyZW5jZSBmcm9tIGEgbm9ybWFsIGNhbGwgdG8gYGBleGVjKClgYCBpc1xudGhhdCBsZXhpY2FsIHNjb3BpbmcgYWxsb3dzIHRoZSBjbGFzcyBib2R5IChpbmNsdWRpbmcgYW55IG1ldGhvZHMpIHRvXG5yZWZlcmVuY2UgbmFtZXMgZnJvbSB0aGUgY3VycmVudCBhbmQgb3V0ZXIgc2NvcGVzIHdoZW4gdGhlIGNsYXNzXG5kZWZpbml0aW9uIG9jY3VycyBpbnNpZGUgYSBmdW5jdGlvbi5cblxuSG93ZXZlciwgZXZlbiB3aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIG9jY3VycyBpbnNpZGUgdGhlIGZ1bmN0aW9uLFxubWV0aG9kcyBkZWZpbmVkIGluc2lkZSB0aGUgY2xhc3Mgc3RpbGwgY2Fubm90IHNlZSBuYW1lcyBkZWZpbmVkIGF0IHRoZVxuY2xhc3Mgc2NvcGUuIENsYXNzIHZhcmlhYmxlcyBtdXN0IGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGZpcnN0XG5wYXJhbWV0ZXIgb2YgaW5zdGFuY2Ugb3IgY2xhc3MgbWV0aG9kcywgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCBhdCBhbGxcbmZyb20gc3RhdGljIG1ldGhvZHMuXG5cblxuQ3JlYXRpbmcgdGhlIGNsYXNzIG9iamVjdFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBjbGFzcyBuYW1lc3BhY2UgaGFzIGJlZW4gcG9wdWxhdGVkIGJ5IGV4ZWN1dGluZyB0aGUgY2xhc3NcbmJvZHksIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGBgbWV0YWNsYXNzKG5hbWUsIGJhc2VzLFxubmFtZXNwYWNlLCAqKmt3ZHMpYGAgKHRoZSBhZGRpdGlvbmFsIGtleXdvcmRzIHBhc3NlZCBoZXJlIGFyZSB0aGUgc2FtZVxuYXMgdGhvc2UgcGFzc2VkIHRvIGBgX19wcmVwYXJlX19gYCkuXG5cblRoaXMgY2xhc3Mgb2JqZWN0IGlzIHRoZSBvbmUgdGhhdCB3aWxsIGJlIHJlZmVyZW5jZWQgYnkgdGhlIHplcm8tXG5hcmd1bWVudCBmb3JtIG9mIGBgc3VwZXIoKWBgLiBgYF9fY2xhc3NfX2BgIGlzIGFuIGltcGxpY2l0IGNsb3N1cmVcbnJlZmVyZW5jZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBpZiBhbnkgbWV0aG9kcyBpbiBhIGNsYXNzIGJvZHkgcmVmZXJcbnRvIGVpdGhlciBgYF9fY2xhc3NfX2BgIG9yIGBgc3VwZXJgYC4gVGhpcyBhbGxvd3MgdGhlIHplcm8gYXJndW1lbnRcbmZvcm0gb2YgYGBzdXBlcigpYGAgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSBjbGFzcyBiZWluZyBkZWZpbmVkXG5iYXNlZCBvbiBsZXhpY2FsIHNjb3BpbmcsIHdoaWxlIHRoZSBjbGFzcyBvciBpbnN0YW5jZSB0aGF0IHdhcyB1c2VkIHRvXG5tYWtlIHRoZSBjdXJyZW50IGNhbGwgaXMgaWRlbnRpZmllZCBiYXNlZCBvbiB0aGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkXG50byB0aGUgbWV0aG9kLlxuXG5BZnRlciB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IGlzIHBhc3NlZCB0byB0aGUgY2xhc3NcbmRlY29yYXRvcnMgaW5jbHVkZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gKGlmIGFueSkgYW5kIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIHRoZSBkZWZpbmVkIGNsYXNzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzEzNSoqIC0gTmV3IHN1cGVyXG4gICAgICBEZXNjcmliZXMgdGhlIGltcGxpY2l0IGBgX19jbGFzc19fYGAgY2xvc3VyZSByZWZlcmVuY2VcblxuXG5NZXRhY2xhc3MgZXhhbXBsZVxuLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIHBvdGVudGlhbCB1c2VzIGZvciBtZXRhY2xhc3NlcyBhcmUgYm91bmRsZXNzLiBTb21lIGlkZWFzIHRoYXQgaGF2ZVxuYmVlbiBleHBsb3JlZCBpbmNsdWRlIGxvZ2dpbmcsIGludGVyZmFjZSBjaGVja2luZywgYXV0b21hdGljXG5kZWxlZ2F0aW9uLCBhdXRvbWF0aWMgcHJvcGVydHkgY3JlYXRpb24sIHByb3hpZXMsIGZyYW1ld29ya3MsIGFuZFxuYXV0b21hdGljIHJlc291cmNlIGxvY2tpbmcvc3luY2hyb25pemF0aW9uLlxuXG5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXRhY2xhc3MgdGhhdCB1c2VzIGFuXG5gYGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YGAgdG8gcmVtZW1iZXIgdGhlIG9yZGVyIHRoYXQgY2xhc3MgbWVtYmVyc1xud2VyZSBkZWZpbmVkOlxuXG4gICBjbGFzcyBPcmRlcmVkQ2xhc3ModHlwZSk6XG5cbiAgICAgICAgQGNsYXNzbWV0aG9kXG4gICAgICAgIGRlZiBfX3ByZXBhcmVfXyhtZXRhY2xzLCBuYW1lLCBiYXNlcywgKiprd2RzKTpcbiAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KClcblxuICAgICAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsICoqa3dkcyk6XG4gICAgICAgICAgIHJlc3VsdCA9IHR5cGUuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KG5hbWVzcGFjZSkpXG4gICAgICAgICAgIHJlc3VsdC5tZW1iZXJzID0gdHVwbGUobmFtZXNwYWNlKVxuICAgICAgICAgICByZXR1cm4gcmVzdWx0XG5cbiAgIGNsYXNzIEEobWV0YWNsYXNzPU9yZGVyZWRDbGFzcyk6XG4gICAgICAgZGVmIG9uZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0d28oc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdGhyZWUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgZm91cihzZWxmKTogcGFzc1xuXG4gICA+Pj4gQS5tZW1iZXJzXG4gICAoXCdfX21vZHVsZV9fXCcsIFwnb25lXCcsIFwndHdvXCcsIFwndGhyZWVcJywgXCdmb3VyXCcpXG5cbldoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gZm9yICpBKiBnZXRzIGV4ZWN1dGVkLCB0aGUgcHJvY2VzcyBiZWdpbnNcbndpdGggY2FsbGluZyB0aGUgbWV0YWNsYXNzXCdzIGBgX19wcmVwYXJlX18oKWBgIG1ldGhvZCB3aGljaCByZXR1cm5zIGFuXG5lbXB0eSBgYGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YGAuICBUaGF0IG1hcHBpbmcgcmVjb3JkcyB0aGUgbWV0aG9kc1xuYW5kIGF0dHJpYnV0ZXMgb2YgKkEqIGFzIHRoZXkgYXJlIGRlZmluZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjbGFzc1xuc3RhdGVtZW50LiBPbmNlIHRob3NlIGRlZmluaXRpb25zIGFyZSBleGVjdXRlZCwgdGhlIG9yZGVyZWQgZGljdGlvbmFyeVxuaXMgZnVsbHkgcG9wdWxhdGVkIGFuZCB0aGUgbWV0YWNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIGdldHNcbmludm9rZWQuICBUaGF0IG1ldGhvZCBidWlsZHMgdGhlIG5ldyB0eXBlIGFuZCBpdCBzYXZlcyB0aGUgb3JkZXJlZFxuZGljdGlvbmFyeSBrZXlzIGluIGFuIGF0dHJpYnV0ZSBjYWxsZWQgYGBtZW1iZXJzYGAuXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG5gYGlzaW5zdGFuY2UoKWBgIGFuZCBgYGlzc3ViY2xhc3MoKWBgIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuSW4gcGFydGljdWxhciwgdGhlIG1ldGFjbGFzcyBgYGFiYy5BQkNNZXRhYGAgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzXG5pbiBvcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICBgYGlzaW5zdGFuY2UoaW5zdGFuY2UsIGNsYXNzKWBgLlxuXG5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBzdWJjbGFzcylcblxuICAgUmV0dXJuIHRydWUgaWYgKnN1YmNsYXNzKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBzdWJjbGFzcyBvZiAqY2xhc3MqLiAgSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcylgYC5cblxuTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhXG5jbGFzcy4gIFRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLlxuVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkXG5vbiBpbnN0YW5jZXMsIG9ubHkgaW4gdGhpcyBjYXNlIHRoZSBpbnN0YW5jZSBpcyBpdHNlbGYgYSBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTkqKiAtIEludHJvZHVjaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc1xuICAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nIGBgaXNpbnN0YW5jZSgpYGAgYW5kXG4gICAgICBgYGlzc3ViY2xhc3MoKWBgIGJlaGF2aW9yIHRocm91Z2ggYGBfX2luc3RhbmNlY2hlY2tfXygpYGAgYW5kXG4gICAgICBgYF9fc3ViY2xhc3NjaGVja19fKClgYCwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGluIHRoZSBjb250ZXh0IG9mIGFkZGluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKHNlZSB0aGUgYGBhYmNgYFxuICAgICAgbW9kdWxlKSB0byB0aGUgbGFuZ3VhZ2UuXG5cblxuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgYGB4KGFyZzEsIGFyZzIsIC4uLilgYCBpcyBhIHNob3J0aGFuZCBmb3JcbiAgIGBgeC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pYGAuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBnZXQoKWBgLFxuYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCwgYGBjb3B5KClgYCxcbmFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzIHN0YW5kYXJkXG5kaWN0aW9uYXJ5IG9iamVjdHMuICBUaGUgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZSBwcm92aWRlcyBhXG5gYE11dGFibGVNYXBwaW5nYGAgYWJzdHJhY3QgYmFzZSBjbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzXG5mcm9tIGEgYmFzZSBzZXQgb2YgYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgLFxuYGBfX2RlbGl0ZW1fXygpYGAsIGFuZCBgYGtleXMoKWBgLiBNdXRhYmxlIHNlcXVlbmNlcyBzaG91bGQgcHJvdmlkZVxubWV0aG9kcyBgYGFwcGVuZCgpYGAsIGBgY291bnQoKWBgLCBgYGluZGV4KClgYCwgYGBleHRlbmQoKWBgLFxuYGBpbnNlcnQoKWBgLCBgYHBvcCgpYGAsIGBgcmVtb3ZlKClgYCwgYGByZXZlcnNlKClgYCBhbmQgYGBzb3J0KClgYCxcbmxpa2UgUHl0aG9uIHN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZFxuaW1wbGVtZW50IGFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgYGBfX2FkZF9fKClgYCwgYGBfX3JhZGRfXygpYGAsXG5gYF9faWFkZF9fKClgYCwgYGBfX211bF9fKClgYCwgYGBfX3JtdWxfXygpYGAgYW5kIGBgX19pbXVsX18oKWBgXG5kZXNjcmliZWQgYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0XG5pcyByZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9fY29udGFpbnNfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlIGBgaW5gYFxub3BlcmF0b3I7IGZvciBtYXBwaW5ncywgYGBpbmBgIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yXG5zZXF1ZW5jZXMsIGl0IHNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlclxucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2l0ZXJfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGVcbmNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCBgYF9faXRlcl9fKClgYCBzaG91bGQgYmUgdGhlIHNhbWUgYXNcbmBga2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuXCd0IGRlZmluZSBhIGBgX19ib29sX18oKWBgIG1ldGhvZCBhbmQgd2hvc2UgYGBfX2xlbl9fKClgYFxuICAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5vYmplY3QuX19sZW5ndGhfaGludF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGBvcGVyYXRvci5sZW5ndGhfaGludCgpYGAuIFNob3VsZCByZXR1cm4gYW5cbiAgIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKHdoaWNoIG1heSBiZSBncmVhdGVyIG9yIGxlc3MgdGhhblxuICAgdGhlIGFjdHVhbCBsZW5ndGgpLiBUaGUgbGVuZ3RoIG11c3QgYmUgYW4gaW50ZWdlciBgYD49YGAgMC4gVGhpc1xuICAgbWV0aG9kIGlzIHB1cmVseSBhbiBvcHRpbWl6YXRpb24gYW5kIGlzIG5ldmVyIHJlcXVpcmVkIGZvclxuICAgY29ycmVjdG5lc3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuNC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLiAgQVxuICBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aFxuICBgYE5vbmVgYC5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mIGBgc2VsZltrZXldYGAuIEZvciBzZXF1ZW5jZVxuICAgdHlwZXMsIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy5cbiAgIE5vdGUgdGhhdCB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGVcbiAgIGNsYXNzIHdpc2hlcyB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlXG4gICBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuIElmICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSxcbiAgIGBgVHlwZUVycm9yYGAgbWF5IGJlIHJhaXNlZDsgaWYgb2YgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2ZcbiAgIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55IHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2ZcbiAgIG5lZ2F0aXZlIHZhbHVlcyksIGBgSW5kZXhFcnJvcmBgIHNob3VsZCBiZSByYWlzZWQuIEZvciBtYXBwaW5nXG4gICB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZSBjb250YWluZXIpLCBgYEtleUVycm9yYGBcbiAgIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6IGBgZm9yYGAgbG9vcHMgZXhwZWN0IHRoYXQgYW4gYGBJbmRleEVycm9yYGAgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSBgYF9fZ2V0aXRlbV9fKClgYFxuICAgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kIGBga2V5cygpYGAuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSBgYF9fcmV2ZXJzZWRfXygpYGAgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlXG4gICBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2VcbiAgIHByb3RvY29sIChgYF9fbGVuX18oKWBgIGFuZCBgYF9fZ2V0aXRlbV9fKClgYCkuICBPYmplY3RzIHRoYXRcbiAgIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sIHNob3VsZCBvbmx5IHByb3ZpZGVcbiAgIGBgX19yZXZlcnNlZF9fKClgYCBpZiB0aGV5IGNhbiBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgaXNcbiAgIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieSBgYHJldmVyc2VkKClgYC5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKGBgaW5gYCBhbmQgYGBub3QgaW5gYCkgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCwgdGhlIG1lbWJlcnNoaXBcbiAgIHRlc3QgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSBgYF9faXRlcl9fKClgYCwgdGhlbiB0aGUgb2xkXG4gICBzZXF1ZW5jZSBpdGVyYXRpb24gcHJvdG9jb2wgdmlhIGBgX19nZXRpdGVtX18oKWBgLCBzZWUgKnRoaXNcbiAgIHNlY3Rpb24gaW4gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZSouXG5cblxuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgLFxuICAgYGBkaXZtb2QoKWBgLCBgYHBvdygpYGAsIGBgKipgYCwgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCxcbiAgIGBgfGBgKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4ICsgeWBgLCB3aGVyZVxuICAgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX2FkZF9fKClgYCBtZXRob2QsXG4gICBgYHguX19hZGRfXyh5KWBgIGlzIGNhbGxlZC4gIFRoZSBgYF9fZGl2bW9kX18oKWBgIG1ldGhvZCBzaG91bGQgYmVcbiAgIHRoZSBlcXVpdmFsZW50IHRvIHVzaW5nIGBgX19mbG9vcmRpdl9fKClgYCBhbmQgYGBfX21vZF9fKClgYDsgaXRcbiAgIHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byBgYF9fdHJ1ZWRpdl9fKClgYC4gIE5vdGUgdGhhdFxuICAgYGBfX3Bvd19fKClgYCBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluIGBgcG93KClgYCBmdW5jdGlvblxuICAgaXMgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiBgYE5vdEltcGxlbWVudGVkYGAuXG5cbm9iamVjdC5fX3JhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jwb3dfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsXG4gICBgYGRpdm1vZCgpYGAsIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLFxuICAgYGB8YGApIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5XG4gICBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nXG4gICBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvclxuICAgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGBgeCAtIHlgYCwgd2hlcmUgKnkqIGlzIGFuXG4gICBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19yc3ViX18oKWBgIG1ldGhvZCxcbiAgIGBgeS5fX3JzdWJfXyh4KWBgIGlzIGNhbGxlZCBpZiBgYHguX19zdWJfXyh5KWBgIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5IGBgcG93KClgYCB3aWxsIG5vdCB0cnkgY2FsbGluZyBgYF9fcnBvd19fKClgYFxuICAgKHRoZSBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZCBmb3IgdGhlXG4gICAgIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzIHRvXG4gICAgIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzIChgYCs9YGAsIGBgLT1gYCwgYGAqPWBgLCBgYC89YGAsIGBgLy89YGAsIGBgJT1gYCxcbiAgIGBgKio9YGAsIGBgPDw9YGAsIGBgPj49YGAsIGBgJj1gYCwgYGBePWBgLCBgYHw9YGApLiAgVGhlc2UgbWV0aG9kc1xuICAgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kXG4gICByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2ggY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLFxuICAgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbCBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCB0b1xuICAgZXhlY3V0ZSB0aGUgc3RhdGVtZW50IGBgeCArPSB5YGAsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhXG4gICBjbGFzcyB0aGF0IGhhcyBhbiBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2lhZGRfXyh5KWBgIGlzXG4gICBjYWxsZWQuICBJZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGRvZXMgbm90IGRlZmluZSBhXG4gICBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2FkZF9fKHkpYGAgYW5kIGBgeS5fX3JhZGRfXyh4KWBgIGFyZVxuICAgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBgYHggKyB5YGAuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoYGAtYGAsIGBgK2BgLFxuICAgYGBhYnMoKWBgIGFuZCBgYH5gYCkuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBjb21wbGV4KClgYCxcbiAgIGBgaW50KClgYCwgYGBmbG9hdCgpYGAgYW5kIGBgcm91bmQoKWBgLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mXG4gICB0aGUgYXBwcm9wcmlhdGUgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgb3BlcmF0b3IuaW5kZXgoKWBgLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXJcbiAgIFB5dGhvbiBuZWVkcyBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGVcbiAgIGJ1aWx0LWluIGBgYmluKClgYCwgYGBoZXgoKWBgIGFuZCBgYG9jdCgpYGAgZnVuY3Rpb25zKS4gTXVzdCByZXR1cm5cbiAgIGFuIGludGVnZXIuXG5cblxuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSBgYHdpdGhgYCBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0XG5tYW5hZ2VyIGhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lXG5jb250ZXh0IGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmVcbm5vcm1hbGx5IGludm9rZWQgdXNpbmcgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb25cbipUaGUgd2l0aCBzdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXJcbm1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIGBgd2l0aGBgXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlIGBgYXNgYCBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSBgYE5vbmVgYC5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgYGBfX2V4aXRfXygpYGAgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cFxuPT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBjdXN0b20gY2xhc3NlcywgaW1wbGljaXQgaW52b2NhdGlvbnMgb2Ygc3BlY2lhbCBtZXRob2RzIGFyZSBvbmx5XG5ndWFyYW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGlmIGRlZmluZWQgb24gYW4gb2JqZWN0XCdzIHR5cGUsIG5vdCBpblxudGhlIG9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgVGhhdCBiZWhhdmlvdXIgaXMgdGhlIHJlYXNvbiB3aHlcbnRoZSBmb2xsb3dpbmcgY29kZSByYWlzZXMgYW4gZXhjZXB0aW9uOlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGxlbihjKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBvYmplY3Qgb2YgdHlwZSBcJ0NcJyBoYXMgbm8gbGVuKClcblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgbGllcyB3aXRoIGEgbnVtYmVyIG9mIHNwZWNpYWxcbm1ldGhvZHMgc3VjaCBhcyBgYF9faGFzaF9fKClgYCBhbmQgYGBfX3JlcHJfXygpYGAgdGhhdCBhcmUgaW1wbGVtZW50ZWRcbmJ5IGFsbCBvYmplY3RzLCBpbmNsdWRpbmcgdHlwZSBvYmplY3RzLiBJZiB0aGUgaW1wbGljaXQgbG9va3VwIG9mXG50aGVzZSBtZXRob2RzIHVzZWQgdGhlIGNvbnZlbnRpb25hbCBsb29rdXAgcHJvY2VzcywgdGhleSB3b3VsZCBmYWlsXG53aGVuIGludm9rZWQgb24gdGhlIHR5cGUgb2JqZWN0IGl0c2VsZjpcblxuICAgPj4+IDEgLl9faGFzaF9fKCkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IGludC5fX2hhc2hfXygpID09IGhhc2goaW50KVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBkZXNjcmlwdG9yIFwnX19oYXNoX19cJyBvZiBcJ2ludFwnIG9iamVjdCBuZWVkcyBhbiBhcmd1bWVudFxuXG5JbmNvcnJlY3RseSBhdHRlbXB0aW5nIHRvIGludm9rZSBhbiB1bmJvdW5kIG1ldGhvZCBvZiBhIGNsYXNzIGluIHRoaXNcbndheSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgXCdtZXRhY2xhc3MgY29uZnVzaW9uXCcsIGFuZCBpcyBhdm9pZGVkXG5ieSBieXBhc3NpbmcgdGhlIGluc3RhbmNlIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHM6XG5cbiAgID4+PiB0eXBlKDEpLl9faGFzaF9fKDEpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiB0eXBlKGludCkuX19oYXNoX18oaW50KSA9PSBoYXNoKGludClcbiAgIFRydWVcblxuSW4gYWRkaXRpb24gdG8gYnlwYXNzaW5nIGFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIGluIHRoZSBpbnRlcmVzdCBvZlxuY29ycmVjdG5lc3MsIGltcGxpY2l0IHNwZWNpYWwgbWV0aG9kIGxvb2t1cCBnZW5lcmFsbHkgYWxzbyBieXBhc3Nlc1xudGhlIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdFwncyBtZXRhY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOlxuICAgLi4uICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QsIG1ldGFjbGFzcz1NZXRhKTpcbiAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gMTBcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQoIkNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18oKSAgICAgICAgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIGluc3RhbmNlXG4gICBDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiB0eXBlKGMpLl9fbGVuX18oYykgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIHR5cGVcbiAgIE1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiBsZW4oYykgICAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCBsb29rdXBcbiAgIDEwXG5cbkJ5cGFzc2luZyB0aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtYWNoaW5lcnkgaW4gdGhpcyBmYXNoaW9uXG5wcm92aWRlcyBzaWduaWZpY2FudCBzY29wZSBmb3Igc3BlZWQgb3B0aW1pc2F0aW9ucyB3aXRoaW4gdGhlXG5pbnRlcnByZXRlciwgYXQgdGhlIGNvc3Qgb2Ygc29tZSBmbGV4aWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2ZcbnNwZWNpYWwgbWV0aG9kcyAodGhlIHNwZWNpYWwgbWV0aG9kICptdXN0KiBiZSBzZXQgb24gdGhlIGNsYXNzIG9iamVjdFxuaXRzZWxmIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnRseSBpbnZva2VkIGJ5IHRoZSBpbnRlcnByZXRlcikuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gSXQgKmlzKiBwb3NzaWJsZSBpbiBzb21lIGNhc2VzIHRvIGNoYW5nZSBhbiBvYmplY3RcJ3MgdHlwZSwgdW5kZXJcbiAgICBjZXJ0YWluIGNvbnRyb2xsZWQgY29uZGl0aW9ucy4gSXQgZ2VuZXJhbGx5IGlzblwndCBhIGdvb2QgaWRlYVxuICAgIHRob3VnaCwgc2luY2UgaXQgY2FuIGxlYWQgdG8gc29tZSB2ZXJ5IHN0cmFuZ2UgYmVoYXZpb3VyIGlmIGl0IGlzXG4gICAgaGFuZGxlZCBpbmNvcnJlY3RseS5cblxuWzJdIEZvciBvcGVyYW5kcyBvZiB0aGUgc2FtZSB0eXBlLCBpdCBpcyBhc3N1bWVkIHRoYXQgaWYgdGhlIG5vbi1cbiAgICByZWZsZWN0ZWQgbWV0aG9kIChzdWNoIGFzIGBgX19hZGRfXygpYGApIGZhaWxzIHRoZSBvcGVyYXRpb24gaXNcbiAgICBub3Qgc3VwcG9ydGVkLCB3aGljaCBpcyB3aHkgdGhlIHJlZmxlY3RlZCBtZXRob2QgaXMgbm90IGNhbGxlZC5cbicsCiAgJ3N0cmluZy1tZXRob2RzJzogJ1xuU3RyaW5nIE1ldGhvZHNcbioqKioqKioqKioqKioqXG5cblN0cmluZ3MgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucywgYWxvbmcgd2l0aFxudGhlIGFkZGl0aW9uYWwgbWV0aG9kcyBkZXNjcmliZWQgYmVsb3cuXG5cblN0cmluZ3MgYWxzbyBzdXBwb3J0IHR3byBzdHlsZXMgb2Ygc3RyaW5nIGZvcm1hdHRpbmcsIG9uZSBwcm92aWRpbmcgYVxubGFyZ2UgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGFuZCBjdXN0b21pemF0aW9uIChzZWUgYGBzdHIuZm9ybWF0KClgYCxcbipGb3JtYXQgU3RyaW5nIFN5bnRheCogYW5kICpTdHJpbmcgRm9ybWF0dGluZyopIGFuZCB0aGUgb3RoZXIgYmFzZWQgb25cbkMgYGBwcmludGZgYCBzdHlsZSBmb3JtYXR0aW5nIHRoYXQgaGFuZGxlcyBhIG5hcnJvd2VyIHJhbmdlIG9mIHR5cGVzXG5hbmQgaXMgc2xpZ2h0bHkgaGFyZGVyIHRvIHVzZSBjb3JyZWN0bHksIGJ1dCBpcyBvZnRlbiBmYXN0ZXIgZm9yIHRoZVxuY2FzZXMgaXQgY2FuIGhhbmRsZSAoKnByaW50Zi1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZyopLlxuXG5UaGUgKlRleHQgUHJvY2Vzc2luZyBTZXJ2aWNlcyogc2VjdGlvbiBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeSBjb3ZlcnNcbmEgbnVtYmVyIG9mIG90aGVyIG1vZHVsZXMgdGhhdCBwcm92aWRlIHZhcmlvdXMgdGV4dCByZWxhdGVkIHV0aWxpdGllc1xuKGluY2x1ZGluZyByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCBpbiB0aGUgYGByZWBgIG1vZHVsZSkuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbnN0ci5jYXNlZm9sZCgpXG5cbiAgIFJldHVybiBhIGNhc2Vmb2xkZWQgY29weSBvZiB0aGUgc3RyaW5nLiBDYXNlZm9sZGVkIHN0cmluZ3MgbWF5IGJlXG4gICB1c2VkIGZvciBjYXNlbGVzcyBtYXRjaGluZy5cblxuICAgQ2FzZWZvbGRpbmcgaXMgc2ltaWxhciB0byBsb3dlcmNhc2luZyBidXQgbW9yZSBhZ2dyZXNzaXZlIGJlY2F1c2VcbiAgIGl0IGlzIGludGVuZGVkIHRvIHJlbW92ZSBhbGwgY2FzZSBkaXN0aW5jdGlvbnMgaW4gYSBzdHJpbmcuIEZvclxuICAgZXhhbXBsZSwgdGhlIEdlcm1hbiBsb3dlcmNhc2UgbGV0dGVyIGBgXCdceGMzXHg5ZlwnYGAgaXMgZXF1aXZhbGVudCB0b1xuICAgYGAic3MiYGAuIFNpbmNlIGl0IGlzIGFscmVhZHkgbG93ZXJjYXNlLCBgYGxvd2VyKClgYCB3b3VsZCBkb1xuICAgbm90aGluZyB0byBgYFwnXHhjM1x4OWZcJ2BgOyBgYGNhc2Vmb2xkKClgYCBjb252ZXJ0cyBpdCB0byBgYCJzcyJgYC5cblxuICAgVGhlIGNhc2Vmb2xkaW5nIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zLlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmVuY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZyBhcyBhIGJ5dGVzIG9iamVjdC4gRGVmYXVsdFxuICAgZW5jb2RpbmcgaXMgYGBcJ3V0Zi04XCdgYC4gKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudFxuICAgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgYGBcJ3N0cmljdFwnYGAsXG4gICBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgYGBVbmljb2RlRXJyb3JgYC4gT3RoZXJcbiAgIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGBcJ2lnbm9yZVwnYGAsIGBgXCdyZXBsYWNlXCdgYCxcbiAgIGBgXCd4bWxjaGFycmVmcmVwbGFjZVwnYGAsIGBgXCdiYWNrc2xhc2hyZXBsYWNlXCdgYCBhbmQgYW55IG90aGVyIG5hbWVcbiAgIHJlZ2lzdGVyZWQgdmlhIGBgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKClgYCwgc2VlIHNlY3Rpb24gKkNvZGVjIEJhc2VcbiAgIENsYXNzZXMqLiBGb3IgYSBsaXN0IG9mIHBvc3NpYmxlIGVuY29kaW5ncywgc2VlIHNlY3Rpb24gKlN0YW5kYXJkXG4gICBFbmNvZGluZ3MqLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkICpzdWZmaXgqLFxuICAgb3RoZXJ3aXNlIHJldHVybiBgYEZhbHNlYGAuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mXG4gICBzdWZmaXhlcyB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXRcbiAgIHRoYXQgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZFxuICAgYnkgb25lIG9yIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGVcbiAgIGdpdmVuIHRhYiBzaXplLiAgVGFiIHBvc2l0aW9ucyBvY2N1ciBldmVyeSAqdGFic2l6ZSogY2hhcmFjdGVyc1xuICAgKGRlZmF1bHQgaXMgOCwgZ2l2aW5nIHRhYiBwb3NpdGlvbnMgYXQgY29sdW1ucyAwLCA4LCAxNiBhbmQgc28gb24pLlxuICAgVG8gZXhwYW5kIHRoZSBzdHJpbmcsIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzZXQgdG8gemVybyBhbmQgdGhlXG4gICBzdHJpbmcgaXMgZXhhbWluZWQgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4gIElmIHRoZSBjaGFyYWN0ZXIgaXMgYVxuICAgdGFiIChgYFxcdGBgKSwgb25lIG9yIG1vcmUgc3BhY2UgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gdGhlXG4gICByZXN1bHQgdW50aWwgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGVxdWFsIHRvIHRoZSBuZXh0IHRhYiBwb3NpdGlvbi5cbiAgIChUaGUgdGFiIGNoYXJhY3RlciBpdHNlbGYgaXMgbm90IGNvcGllZC4pICBJZiB0aGUgY2hhcmFjdGVyIGlzIGFcbiAgIG5ld2xpbmUgKGBgXFxuYGApIG9yIHJldHVybiAoYGBcXHJgYCksIGl0IGlzIGNvcGllZCBhbmQgdGhlIGN1cnJlbnRcbiAgIGNvbHVtbiBpcyByZXNldCB0byB6ZXJvLiAgQW55IG90aGVyIGNoYXJhY3RlciBpcyBjb3BpZWQgdW5jaGFuZ2VkXG4gICBhbmQgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGluY3JlbWVudGVkIGJ5IG9uZSByZWdhcmRsZXNzIG9mIGhvdyB0aGVcbiAgIGNoYXJhY3RlciBpcyByZXByZXNlbnRlZCB3aGVuIHByaW50ZWQuXG5cbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicygpXG4gICBcJzAxICAgICAgMDEyICAgICAwMTIzICAgIDAxMjM0XCdcbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicyg0KVxuICAgXCcwMSAgMDEyIDAxMjMgICAgMDEyMzRcJ1xuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG4gICBOb3RlOiBUaGUgYGBmaW5kKClgYCBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgb25seSBpZiB5b3UgbmVlZCB0byBrbm93IHRoZVxuICAgICBwb3NpdGlvbiBvZiAqc3ViKi4gIFRvIGNoZWNrIGlmICpzdWIqIGlzIGEgc3Vic3RyaW5nIG9yIG5vdCwgdXNlXG4gICAgIHRoZSBgYGluYGAgb3BlcmF0b3I6XG5cbiAgICAgICAgPj4+IFwnUHlcJyBpbiBcJ1B5dGhvblwnXG4gICAgICAgIFRydWVcblxuc3RyLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpXG5cbiAgIFBlcmZvcm0gYSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24uICBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXNcbiAgIG1ldGhvZCBpcyBjYWxsZWQgY2FuIGNvbnRhaW4gbGl0ZXJhbCB0ZXh0IG9yIHJlcGxhY2VtZW50IGZpZWxkc1xuICAgZGVsaW1pdGVkIGJ5IGJyYWNlcyBgYHt9YGAuICBFYWNoIHJlcGxhY2VtZW50IGZpZWxkIGNvbnRhaW5zIGVpdGhlclxuICAgdGhlIG51bWVyaWMgaW5kZXggb2YgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciB0aGUgbmFtZSBvZiBhXG4gICBrZXl3b3JkIGFyZ3VtZW50LiAgUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBlYWNoXG4gICByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlXG4gICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmZvcm1hdF9tYXAobWFwcGluZylcblxuICAgU2ltaWxhciB0byBgYHN0ci5mb3JtYXQoKiptYXBwaW5nKWBgLCBleGNlcHQgdGhhdCBgYG1hcHBpbmdgYCBpc1xuICAgdXNlZCBkaXJlY3RseSBhbmQgbm90IGNvcGllZCB0byBhIGBgZGljdGBgIC4gIFRoaXMgaXMgdXNlZnVsIGlmIGZvclxuICAgZXhhbXBsZSBgYG1hcHBpbmdgYCBpcyBhIGRpY3Qgc3ViY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBEZWZhdWx0KGRpY3QpOlxuICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBrZXlcbiAgIC4uLlxuICAgPj4+IFwne25hbWV9IHdhcyBib3JuIGluIHtjb3VudHJ5fVwnLmZvcm1hdF9tYXAoRGVmYXVsdChuYW1lPVwnR3VpZG9cJykpXG4gICBcJ0d1aWRvIHdhcyBib3JuIGluIGNvdW50cnlcJ1xuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgZmluZCgpYGAsIGJ1dCByYWlzZSBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBIGNoYXJhY3RlclxuICAgYGBjYGAgaXMgYWxwaGFudW1lcmljIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnMgYGBUcnVlYGA6XG4gICBgYGMuaXNhbHBoYSgpYGAsIGBgYy5pc2RlY2ltYWwoKWBgLCBgYGMuaXNkaWdpdCgpYGAsIG9yXG4gICBgYGMuaXNudW1lcmljKClgYC5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQWxwaGFiZXRpY1xuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIkxldHRlciIsIGkuZS4sIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eVxuICAgYmVpbmcgb25lIG9mICJMbSIsICJMdCIsICJMdSIsICJMbCIsIG9yICJMbyIuICBOb3RlIHRoYXQgdGhpcyBpc1xuICAgZGlmZmVyZW50IGZyb20gdGhlICJBbHBoYWJldGljIiBwcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBVbmljb2RlXG4gICBTdGFuZGFyZC5cblxuc3RyLmlzZGVjaW1hbCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRlY2ltYWwgY2hhcmFjdGVyc1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gRGVjaW1hbFxuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgZnJvbSBnZW5lcmFsIGNhdGVnb3J5ICJOZCIuIFRoaXMgY2F0ZWdvcnlcbiAgIGluY2x1ZGVzIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvXG4gICBmb3JtIGRlY2ltYWwtcmFkaXggbnVtYmVycywgZS5nLiBVKzA2NjAsIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPLlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIERpZ2l0cyBpbmNsdWRlIGRlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYW5kIGRpZ2l0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyB0aGVcbiAgIGNvbXBhdGliaWxpdHkgc3VwZXJzY3JpcHQgZGlnaXRzLiAgRm9ybWFsbHksIGEgZGlnaXQgaXMgYSBjaGFyYWN0ZXJcbiAgIHRoYXQgaGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQgb3JcbiAgIE51bWVyaWNfVHlwZT1EZWNpbWFsLlxuXG5zdHIuaXNpZGVudGlmaWVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIHRoZVxuICAgbGFuZ3VhZ2UgZGVmaW5pdGlvbiwgc2VjdGlvbiAqSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKi5cblxuICAgVXNlIGBga2V5d29yZC5pc2tleXdvcmQoKWBgIHRvIHRlc3QgZm9yIHJlc2VydmVkIGlkZW50aWZpZXJzIHN1Y2hcbiAgIGFzIGBgZGVmYGAgYW5kIGBgY2xhc3NgYC5cblxuc3RyLmlzbG93ZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgbG93ZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXNudW1lcmljKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbnVtZXJpYyBjaGFyYWN0ZXJzLFxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gTnVtZXJpY1xuICAgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmVcbiAgIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT05cbiAgIE9ORSBGSUZUSC4gIEZvcm1hbGx5LCBudW1lcmljIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggdGhlXG4gICBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQsIE51bWVyaWNfVHlwZT1EZWNpbWFsIG9yXG4gICBOdW1lcmljX1R5cGU9TnVtZXJpYy5cblxuc3RyLmlzcHJpbnRhYmxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgcHJpbnRhYmxlIG9yIHRoZVxuICAgc3RyaW5nIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmVcbiAgIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UgYXNcbiAgICJPdGhlciIgb3IgIlNlcGFyYXRvciIsIGV4Y2VwdGluZyB0aGUgQVNDSUkgc3BhY2UgKDB4MjApIHdoaWNoIGlzXG4gICBjb25zaWRlcmVkIHByaW50YWJsZS4gIChOb3RlIHRoYXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhpc1xuICAgY29udGV4dCBhcmUgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBlc2NhcGVkIHdoZW4gYGByZXByKClgYCBpc1xuICAgaW52b2tlZCBvbiBhIHN0cmluZy4gIEl0IGhhcyBubyBiZWFyaW5nIG9uIHRoZSBoYW5kbGluZyBvZiBzdHJpbmdzXG4gICB3cml0dGVuIHRvIGBgc3lzLnN0ZG91dGBgIG9yIGBgc3lzLnN0ZGVycmBgLilcblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIFdoaXRlc3BhY2VcbiAgIGNoYXJhY3RlcnMgIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiT3RoZXIiIG9yICJTZXBhcmF0b3IiIGFuZCB0aG9zZSB3aXRoIGJpZGlyZWN0aW9uYWxcbiAgIHByb3BlcnR5IGJlaW5nIG9uZSBvZiAiV1MiLCAiQiIsIG9yICJTIi5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgdXBwZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgQSBgYFR5cGVFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZVxuICAgYW55IG5vbi1zdHJpbmcgdmFsdWVzIGluICppdGVyYWJsZSosIGluY2x1ZGluZyBgYGJ5dGVzYGAgb2JqZWN0cy5cbiAgIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGUgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gYGBsZW4ocylgYC5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuICAgVGhlIGxvd2VyY2FzaW5nIGFsZ29yaXRobSB1c2VkIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG5zdHIubHN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcubHN0cmlwKClcbiAgIFwnc3BhY2lvdXMgICBcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcubHN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGUuY29tXCdcblxuc3RhdGljIHN0ci5tYWtldHJhbnMoeFssIHlbLCB6XV0pXG5cbiAgIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvclxuICAgYGBzdHIudHJhbnNsYXRlKClgYC5cblxuICAgSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmdcbiAgIFVuaWNvZGUgb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIChzdHJpbmdzIG9mIGxlbmd0aCAxKSB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyAob2YgYXJiaXRyYXJ5IGxlbmd0aHMpIG9yIE5vbmUuXG4gICBDaGFyYWN0ZXIga2V5cyB3aWxsIHRoZW4gYmUgY29udmVydGVkIHRvIG9yZGluYWxzLlxuXG4gICBJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLFxuICAgYW5kIGluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZFxuICAgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiAgSWYgdGhlcmUgaXMgYSB0aGlyZFxuICAgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG9cbiAgIE5vbmUgaW4gdGhlIHJlc3VsdC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgcmZpbmQoKWBgIGJ1dCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqXG4gICBpcyBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3JcbiAgIGVxdWFsIHRvIGBgbGVuKHMpYGAuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbnN0ci5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgIGBgTm9uZWBgLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yXG4gICBzcGxpdHRpbmcgZnJvbSB0aGUgcmlnaHQsIGBgcnNwbGl0KClgYCBiZWhhdmVzIGxpa2UgYGBzcGxpdCgpYGBcbiAgIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCBgYG1heHNwbGl0KzFgYFxuICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkIG9yIGBgLTFgYCwgdGhlbiB0aGVyZSBpc1xuICAgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLlxuXG4gICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXJcbiAgIGFuZCBhcmUgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3RyaW5ncyAoZm9yIGV4YW1wbGUsXG4gICBgYFwnMSwsMlwnLnNwbGl0KFwnLFwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnXCcsIFwnMlwnXWBgKS4gIFRoZSAqc2VwKlxuICAgYXJndW1lbnQgbWF5IGNvbnNpc3Qgb2YgbXVsdGlwbGUgY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsXG4gICBgYFwnMTw+Mjw+M1wnLnNwbGl0KFwnPD5cJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGApLiBTcGxpdHRpbmdcbiAgIGFuIGVtcHR5IHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zIGBgW1wnXCddYGAuXG5cbiAgIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgYGBOb25lYGAsIGEgZGlmZmVyZW50IHNwbGl0dGluZ1xuICAgYWxnb3JpdGhtIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWRcbiAgIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3NcbiAgIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlIHN0cmluZyBoYXMgbGVhZGluZyBvciB0cmFpbGluZ1xuICAgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwgc3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZ1xuICAgY29uc2lzdGluZyBvZiBqdXN0IHdoaXRlc3BhY2Ugd2l0aCBhIGBgTm9uZWBgIHNlcGFyYXRvciByZXR1cm5zXG4gICBgYFtdYGAuXG5cbiAgIEZvciBleGFtcGxlLCBgYFwnIDEgIDIgICAzICBcJy5zcGxpdCgpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgLFxuICAgYW5kIGBgXCcgIDEgIDIgICAzICBcJy5zcGxpdChOb25lLCAxKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMiAgIDMgIFwnXWBgLlxuXG5zdHIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiB0aGUgc3RyaW5nLCBicmVha2luZyBhdCBsaW5lXG4gICBib3VuZGFyaWVzLiBUaGlzIG1ldGhvZCB1c2VzIHRoZSAqdW5pdmVyc2FsIG5ld2xpbmVzKiBhcHByb2FjaCB0b1xuICAgc3BsaXR0aW5nIGxpbmVzLiBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbiAgIEZvciBleGFtcGxlLCBgYFwnYWIgY1xcblxcbmRlIGZnXFxya2xcXHJcXG5cJy5zcGxpdGxpbmVzKClgYCByZXR1cm5zXG4gICBgYFtcJ2FiIGNcJywgXCdcJywgXCdkZSBmZ1wnLCBcJ2tsXCddYGAsIHdoaWxlIHRoZSBzYW1lIGNhbGwgd2l0aFxuICAgYGBzcGxpdGxpbmVzKFRydWUpYGAgcmV0dXJucyBgYFtcJ2FiIGNcXG5cJywgXCdcXG5cJywgXCdkZSBmZ1xcclwnLFxuICAgXCdrbFxcclxcblwnXWBgLlxuXG4gICBVbmxpa2UgYGBzcGxpdCgpYGAgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXNcbiAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsXG4gICBsaW5lIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lLlxuXG5zdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSAqcHJlZml4Kiwgb3RoZXJ3aXNlXG4gICByZXR1cm4gYGBGYWxzZWBgLiAqcHJlZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHByZWZpeGVzIHRvIGxvb2tcbiAgIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBzdHJpbmcgYmVnaW5uaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgc3RyaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLlxuXG5zdHIuc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG4gICBjaGFyYWN0ZXJzIHJlbW92ZWQuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlXG4gICBzZXQgb2YgY2hhcmFjdGVycyB0byBiZSByZW1vdmVkLiBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGVcbiAgICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gVGhlICpjaGFycypcbiAgIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHNcbiAgIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcuc3RyaXAoKVxuICAgXCdzcGFjaW91c1wnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5zdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlXCdcblxuc3RyLnN3YXBjYXNlKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkIHRvXG4gICBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB0aGF0XG4gICBgYHMuc3dhcGNhc2UoKS5zd2FwY2FzZSgpID09IHNgYC5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgLi4uICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBzKVxuICAgICAgLi4uXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG5zdHIudHJhbnNsYXRlKG1hcClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgKnMqIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWRcbiAgIHRocm91Z2ggdGhlICptYXAqIHdoaWNoIG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIFVuaWNvZGUgb3JkaW5hbHNcbiAgIChpbnRlZ2VycykgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBgYE5vbmVgYC4gIFVubWFwcGVkXG4gICBjaGFyYWN0ZXJzIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gYGBOb25lYGAgYXJlXG4gICBkZWxldGVkLlxuXG4gICBZb3UgY2FuIHVzZSBgYHN0ci5tYWtldHJhbnMoKWBgIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIG1hcCBmcm9tXG4gICBjaGFyYWN0ZXItdG8tY2hhcmFjdGVyIG1hcHBpbmdzIGluIGRpZmZlcmVudCBmb3JtYXRzLlxuXG4gICBOb3RlOiBBbiBldmVuIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgY3VzdG9tIGNoYXJhY3RlclxuICAgICBtYXBwaW5nIGNvZGVjIHVzaW5nIHRoZSBgYGNvZGVjc2BgIG1vZHVsZSAoc2VlXG4gICAgIGBgZW5jb2RpbmdzLmNwMTI1MWBgIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIHVwcGVyY2FzZS4gIE5vdGUgdGhhdCBgYHN0ci51cHBlcigpLmlzdXBwZXIoKWBgIG1pZ2h0XG4gICBiZSBgYEZhbHNlYGAgaWYgYGBzYGAgY29udGFpbnMgdW5jYXNlZCBjaGFyYWN0ZXJzIG9yIGlmIHRoZSBVbmljb2RlXG4gICBjYXRlZ29yeSBvZiB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcihzKSBpcyBub3QgIkx1IiAoTGV0dGVyLFxuICAgdXBwZXJjYXNlKSwgYnV0IGUuZy4gIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG4gICBUaGUgdXBwZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLlxuJywKICAnc3RyaW5ncyc6ICdcblN0cmluZyBhbmQgQnl0ZXMgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuU3RyaW5nIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBzdHJpbmdsaXRlcmFsICAgOjo9IFtzdHJpbmdwcmVmaXhdKHNob3J0c3RyaW5nIHwgbG9uZ3N0cmluZylcbiAgIHN0cmluZ3ByZWZpeCAgICA6Oj0gInIiIHwgInUiIHwgIlIiIHwgIlUiXG4gICBzaG9ydHN0cmluZyAgICAgOjo9ICJcJyIgc2hvcnRzdHJpbmdpdGVtKiAiXCciIHwgXCciXCcgc2hvcnRzdHJpbmdpdGVtKiBcJyJcJ1xuICAgbG9uZ3N0cmluZyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nc3RyaW5naXRlbSogIlwnXCdcJyIgfCBcJyIiIlwnIGxvbmdzdHJpbmdpdGVtKiBcJyIiIlwnXG4gICBzaG9ydHN0cmluZ2l0ZW0gOjo9IHNob3J0c3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgbG9uZ3N0cmluZ2l0ZW0gIDo6PSBsb25nc3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgc2hvcnRzdHJpbmdjaGFyIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nc3RyaW5nY2hhciAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIHN0cmluZ2VzY2FwZXNlcSA6Oj0gIlxcIiA8YW55IHNvdXJjZSBjaGFyYWN0ZXI+XG5cbiAgIGJ5dGVzbGl0ZXJhbCAgIDo6PSBieXRlc3ByZWZpeChzaG9ydGJ5dGVzIHwgbG9uZ2J5dGVzKVxuICAgYnl0ZXNwcmVmaXggICAgOjo9ICJiIiB8ICJCIiB8ICJiciIgfCAiQnIiIHwgImJSIiB8ICJCUiIgfCAicmIiIHwgInJCIiB8ICJSYiIgfCAiUkIiXG4gICBzaG9ydGJ5dGVzICAgICA6Oj0gIlwnIiBzaG9ydGJ5dGVzaXRlbSogIlwnIiB8IFwnIlwnIHNob3J0Ynl0ZXNpdGVtKiBcJyJcJ1xuICAgbG9uZ2J5dGVzICAgICAgOjo9ICJcJ1wnXCciIGxvbmdieXRlc2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nYnl0ZXNpdGVtKiBcJyIiIlwnXG4gICBzaG9ydGJ5dGVzaXRlbSA6Oj0gc2hvcnRieXRlc2NoYXIgfCBieXRlc2VzY2FwZXNlcVxuICAgbG9uZ2J5dGVzaXRlbSAgOjo9IGxvbmdieXRlc2NoYXIgfCBieXRlc2VzY2FwZXNlcVxuICAgc2hvcnRieXRlc2NoYXIgOjo9IDxhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ2J5dGVzY2hhciAgOjo9IDxhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiPlxuICAgYnl0ZXNlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBBU0NJSSBjaGFyYWN0ZXI+XG5cbk9uZSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gbm90IGluZGljYXRlZCBieSB0aGVzZSBwcm9kdWN0aW9ucyBpcyB0aGF0XG53aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIGJldHdlZW4gdGhlIGBgc3RyaW5ncHJlZml4YGAgb3JcbmBgYnl0ZXNwcmVmaXhgYCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGxpdGVyYWwuIFRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldFxuaXMgZGVmaW5lZCBieSB0aGUgZW5jb2RpbmcgZGVjbGFyYXRpb247IGl0IGlzIFVURi04IGlmIG5vIGVuY29kaW5nXG5kZWNsYXJhdGlvbiBpcyBnaXZlbiBpbiB0aGUgc291cmNlIGZpbGU7IHNlZSBzZWN0aW9uICpFbmNvZGluZ1xuZGVjbGFyYXRpb25zKi5cblxuSW4gcGxhaW4gRW5nbGlzaDogQm90aCB0eXBlcyBvZiBsaXRlcmFscyBjYW4gYmUgZW5jbG9zZWQgaW4gbWF0Y2hpbmdcbnNpbmdsZSBxdW90ZXMgKGBgXCdgYCkgb3IgZG91YmxlIHF1b3RlcyAoYGAiYGApLiAgVGhleSBjYW4gYWxzbyBiZVxuZW5jbG9zZWQgaW4gbWF0Y2hpbmcgZ3JvdXBzIG9mIHRocmVlIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzICh0aGVzZVxuYXJlIGdlbmVyYWxseSByZWZlcnJlZCB0byBhcyAqdHJpcGxlLXF1b3RlZCBzdHJpbmdzKikuICBUaGUgYmFja3NsYXNoXG4oYGBcXGBgKSBjaGFyYWN0ZXIgaXMgdXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyB0aGF0IG90aGVyd2lzZSBoYXZlIGFcbnNwZWNpYWwgbWVhbmluZywgc3VjaCBhcyBuZXdsaW5lLCBiYWNrc2xhc2ggaXRzZWxmLCBvciB0aGUgcXVvdGVcbmNoYXJhY3Rlci5cblxuQnl0ZXMgbGl0ZXJhbHMgYXJlIGFsd2F5cyBwcmVmaXhlZCB3aXRoIGBgXCdiXCdgYCBvciBgYFwnQlwnYGA7IHRoZXlcbnByb2R1Y2UgYW4gaW5zdGFuY2Ugb2YgdGhlIGBgYnl0ZXNgYCB0eXBlIGluc3RlYWQgb2YgdGhlIGBgc3RyYGAgdHlwZS5cblRoZXkgbWF5IG9ubHkgY29udGFpbiBBU0NJSSBjaGFyYWN0ZXJzOyBieXRlcyB3aXRoIGEgbnVtZXJpYyB2YWx1ZSBvZlxuMTI4IG9yIGdyZWF0ZXIgbXVzdCBiZSBleHByZXNzZWQgd2l0aCBlc2NhcGVzLlxuXG5BcyBvZiBQeXRob24gMy4zIGl0IGlzIHBvc3NpYmxlIGFnYWluIHRvIHByZWZpeCB1bmljb2RlIHN0cmluZ3Mgd2l0aCBhXG5gYHVgYCBwcmVmaXggdG8gc2ltcGxpZnkgbWFpbnRlbmFuY2Ugb2YgZHVhbCAyLnggYW5kIDMueCBjb2RlYmFzZXMuXG5cbkJvdGggc3RyaW5nIGFuZCBieXRlcyBsaXRlcmFscyBtYXkgb3B0aW9uYWxseSBiZSBwcmVmaXhlZCB3aXRoIGFcbmxldHRlciBgYFwnclwnYGAgb3IgYGBcJ1JcJ2BgOyBzdWNoIHN0cmluZ3MgYXJlIGNhbGxlZCAqcmF3IHN0cmluZ3MqIGFuZFxudHJlYXQgYmFja3NsYXNoZXMgYXMgbGl0ZXJhbCBjaGFyYWN0ZXJzLiAgQXMgYSByZXN1bHQsIGluIHN0cmluZ1xubGl0ZXJhbHMsIGBgXCdcXFVcJ2BgIGFuZCBgYFwnXFx1XCdgYCBlc2NhcGVzIGluIHJhdyBzdHJpbmdzIGFyZSBub3QgdHJlYXRlZFxuc3BlY2lhbGx5LiBHaXZlbiB0aGF0IFB5dGhvbiAyLnhcJ3MgcmF3IHVuaWNvZGUgbGl0ZXJhbHMgYmVoYXZlXG5kaWZmZXJlbnRseSB0aGFuIFB5dGhvbiAzLnhcJ3MgdGhlIGBgXCd1clwnYGAgc3ludGF4IGlzIG5vdCBzdXBwb3J0ZWQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogVGhlIGBgXCdyYlwnYGAgcHJlZml4IG9mIHJhdyBieXRlcyBsaXRlcmFscyBoYXNcbiAgIGJlZW4gYWRkZWQgYXMgYSBzeW5vbnltIG9mIGBgXCdiclwnYGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogU3VwcG9ydCBmb3IgdGhlIHVuaWNvZGUgbGVnYWN5IGxpdGVyYWxcbiAgIChgYHVcJ3ZhbHVlXCdgYCkgd2FzIHJlaW50cm9kdWNlZCB0byBzaW1wbGlmeSB0aGUgbWFpbnRlbmFuY2Ugb2YgZHVhbFxuICAgUHl0aG9uIDIueCBhbmQgMy54IGNvZGViYXNlcy4gU2VlICoqUEVQIDQxNCoqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG5JbiB0cmlwbGUtcXVvdGVkIHN0cmluZ3MsIHVuZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGVzIGFyZSBhbGxvd2VkXG4oYW5kIGFyZSByZXRhaW5lZCksIGV4Y2VwdCB0aGF0IHRocmVlIHVuZXNjYXBlZCBxdW90ZXMgaW4gYSByb3dcbnRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAgKEEgInF1b3RlIiBpcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gb3BlbiB0aGVcbnN0cmluZywgaS5lLiBlaXRoZXIgYGBcJ2BgIG9yIGBgImBgLilcblxuVW5sZXNzIGFuIGBgXCdyXCdgYCBvciBgYFwnUlwnYGAgcHJlZml4IGlzIHByZXNlbnQsIGVzY2FwZSBzZXF1ZW5jZXMgaW5cbnN0cmluZ3MgYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byBydWxlcyBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnlcblN0YW5kYXJkIEMuICBUaGUgcmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFxcbmV3bGluZWBgICAgICAgfCBCYWNrc2xhc2ggYW5kIG5ld2xpbmUgaWdub3JlZCAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXFxcYGAgICAgICAgICAgICB8IEJhY2tzbGFzaCAoYGBcXGBgKSAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXFwnYGAgICAgICAgICAgICB8IFNpbmdsZSBxdW90ZSAoYGBcJ2BgKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXCJgYCAgICAgICAgICAgIHwgRG91YmxlIHF1b3RlIChgYCJgYCkgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxhYGAgICAgICAgICAgICB8IEFTQ0lJIEJlbGwgKEJFTCkgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcYmBgICAgICAgICAgICAgfCBBU0NJSSBCYWNrc3BhY2UgKEJTKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXGZgYCAgICAgICAgICAgIHwgQVNDSUkgRm9ybWZlZWQgKEZGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxuYGAgICAgICAgICAgICB8IEFTQ0lJIExpbmVmZWVkIChMRikgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxccmBgICAgICAgICAgICAgfCBBU0NJSSBDYXJyaWFnZSBSZXR1cm4gKENSKSAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHRgYCAgICAgICAgICAgIHwgQVNDSUkgSG9yaXpvbnRhbCBUYWIgKFRBQikgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFx2YGAgICAgICAgICAgICB8IEFTQ0lJIFZlcnRpY2FsIFRhYiAoVlQpICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcb29vYGAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBvY3RhbCB2YWx1ZSAqb29vKiAgfCAoMSwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHhoaGBgICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggaGV4IHZhbHVlICpoaCogICAgIHwgKDIsMykgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG5cbkVzY2FwZSBzZXF1ZW5jZXMgb25seSByZWNvZ25pemVkIGluIHN0cmluZyBsaXRlcmFscyBhcmU6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgRXNjYXBlIFNlcXVlbmNlICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHxcbis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PStcbnwgYGBcXE57bmFtZX1gYCAgICAgIHwgQ2hhcmFjdGVyIG5hbWVkICpuYW1lKiBpbiB0aGUgICAgIHwgKDQpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgVW5pY29kZSBkYXRhYmFzZSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFx1eHh4eGBgICAgICAgICB8IENoYXJhY3RlciB3aXRoIDE2LWJpdCBoZXggdmFsdWUgICB8ICg1KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8ICp4eHh4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcVXh4eHh4eHh4YGAgICAgfCBDaGFyYWN0ZXIgd2l0aCAzMi1iaXQgaGV4IHZhbHVlICAgfCAoNikgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCAqeHh4eHh4eHgqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuIEFzIGluIFN0YW5kYXJkIEMsIHVwIHRvIHRocmVlIG9jdGFsIGRpZ2l0cyBhcmUgYWNjZXB0ZWQuXG5cbjIuIFVubGlrZSBpbiBTdGFuZGFyZCBDLCBleGFjdGx5IHR3byBoZXggZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuMy4gSW4gYSBieXRlcyBsaXRlcmFsLCBoZXhhZGVjaW1hbCBhbmQgb2N0YWwgZXNjYXBlcyBkZW5vdGUgdGhlIGJ5dGVcbiAgIHdpdGggdGhlIGdpdmVuIHZhbHVlLiBJbiBhIHN0cmluZyBsaXRlcmFsLCB0aGVzZSBlc2NhcGVzIGRlbm90ZSBhXG4gICBVbmljb2RlIGNoYXJhY3RlciB3aXRoIHRoZSBnaXZlbiB2YWx1ZS5cblxuNC4gQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogU3VwcG9ydCBmb3IgbmFtZSBhbGlhc2VzIFsxXSBoYXMgYmVlblxuICAgYWRkZWQuXG5cbjUuIEluZGl2aWR1YWwgY29kZSB1bml0cyB3aGljaCBmb3JtIHBhcnRzIG9mIGEgc3Vycm9nYXRlIHBhaXIgY2FuIGJlXG4gICBlbmNvZGVkIHVzaW5nIHRoaXMgZXNjYXBlIHNlcXVlbmNlLiAgRXhhY3RseSBmb3VyIGhleCBkaWdpdHMgYXJlXG4gICByZXF1aXJlZC5cblxuNi4gQW55IFVuaWNvZGUgY2hhcmFjdGVyIGNhbiBiZSBlbmNvZGVkIHRoaXMgd2F5LiAgRXhhY3RseSBlaWdodCBoZXhcbiAgIGRpZ2l0cyBhcmUgcmVxdWlyZWQuXG5cblVubGlrZSBTdGFuZGFyZCBDLCBhbGwgdW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIGxlZnQgaW4gdGhlXG5zdHJpbmcgdW5jaGFuZ2VkLCBpLmUuLCAqdGhlIGJhY2tzbGFzaCBpcyBsZWZ0IGluIHRoZSBzdHJpbmcqLiAgKFRoaXNcbmJlaGF2aW9yIGlzIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZzogaWYgYW4gZXNjYXBlIHNlcXVlbmNlIGlzIG1pc3R5cGVkLFxudGhlIHJlc3VsdGluZyBvdXRwdXQgaXMgbW9yZSBlYXNpbHkgcmVjb2duaXplZCBhcyBicm9rZW4uKSAgSXQgaXMgYWxzb1xuaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgZXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nXG5saXRlcmFscyBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIHVucmVjb2duaXplZCBlc2NhcGVzIGZvciBieXRlc1xubGl0ZXJhbHMuXG5cbkV2ZW4gaW4gYSByYXcgc3RyaW5nLCBzdHJpbmcgcXVvdGVzIGNhbiBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2gsXG5idXQgdGhlIGJhY2tzbGFzaCByZW1haW5zIGluIHRoZSBzdHJpbmc7IGZvciBleGFtcGxlLCBgYHIiXFwiImBgIGlzIGFcbnZhbGlkIHN0cmluZyBsaXRlcmFsIGNvbnNpc3Rpbmcgb2YgdHdvIGNoYXJhY3RlcnM6IGEgYmFja3NsYXNoIGFuZCBhXG5kb3VibGUgcXVvdGU7IGBgciJcXCJgYCBpcyBub3QgYSB2YWxpZCBzdHJpbmcgbGl0ZXJhbCAoZXZlbiBhIHJhd1xuc3RyaW5nIGNhbm5vdCBlbmQgaW4gYW4gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcykuICBTcGVjaWZpY2FsbHksICphXG5yYXcgc3RyaW5nIGNhbm5vdCBlbmQgaW4gYSBzaW5nbGUgYmFja3NsYXNoKiAoc2luY2UgdGhlIGJhY2tzbGFzaFxud291bGQgZXNjYXBlIHRoZSBmb2xsb3dpbmcgcXVvdGUgY2hhcmFjdGVyKS4gIE5vdGUgYWxzbyB0aGF0IGEgc2luZ2xlXG5iYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGlzIGludGVycHJldGVkIGFzIHRob3NlIHR3byBjaGFyYWN0ZXJzXG5hcyBwYXJ0IG9mIHRoZSBzdHJpbmcsICpub3QqIGFzIGEgbGluZSBjb250aW51YXRpb24uXG4nLAogICdzdWJzY3JpcHRpb25zJzogJ1xuU3Vic2NyaXB0aW9uc1xuKioqKioqKioqKioqKlxuXG5BIHN1YnNjcmlwdGlvbiBzZWxlY3RzIGFuIGl0ZW0gb2YgYSBzZXF1ZW5jZSAoc3RyaW5nLCB0dXBsZSBvciBsaXN0KVxub3IgbWFwcGluZyAoZGljdGlvbmFyeSkgb2JqZWN0OlxuXG4gICBzdWJzY3JpcHRpb24gOjo9IHByaW1hcnkgIlsiIGV4cHJlc3Npb25fbGlzdCAiXSJcblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyBzdWJzY3JpcHRpb24sXG5lLmcuIGEgbGlzdCBvciBkaWN0aW9uYXJ5LiAgVXNlci1kZWZpbmVkIG9iamVjdHMgY2FuIHN1cHBvcnRcbnN1YnNjcmlwdGlvbiBieSBkZWZpbmluZyBhIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC5cblxuRm9yIGJ1aWx0LWluIG9iamVjdHMsIHRoZXJlIGFyZSB0d28gdHlwZXMgb2Ygb2JqZWN0cyB0aGF0IHN1cHBvcnRcbnN1YnNjcmlwdGlvbjpcblxuSWYgdGhlIHByaW1hcnkgaXMgYSBtYXBwaW5nLCB0aGUgZXhwcmVzc2lvbiBsaXN0IG11c3QgZXZhbHVhdGUgdG8gYW5cbm9iamVjdCB3aG9zZSB2YWx1ZSBpcyBvbmUgb2YgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcsIGFuZCB0aGVcbnN1YnNjcmlwdGlvbiBzZWxlY3RzIHRoZSB2YWx1ZSBpbiB0aGUgbWFwcGluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoYXRcbmtleS4gIChUaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGEgdHVwbGUgZXhjZXB0IGlmIGl0IGhhcyBleGFjdGx5IG9uZVxuaXRlbS4pXG5cbklmIHRoZSBwcmltYXJ5IGlzIGEgc2VxdWVuY2UsIHRoZSBleHByZXNzaW9uIChsaXN0KSBtdXN0IGV2YWx1YXRlIHRvXG5hbiBpbnRlZ2VyIG9yIGEgc2xpY2UgKGFzIGRpc2N1c3NlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24pLlxuXG5UaGUgZm9ybWFsIHN5bnRheCBtYWtlcyBubyBzcGVjaWFsIHByb3Zpc2lvbiBmb3IgbmVnYXRpdmUgaW5kaWNlcyBpblxuc2VxdWVuY2VzOyBob3dldmVyLCBidWlsdC1pbiBzZXF1ZW5jZXMgYWxsIHByb3ZpZGUgYSBgYF9fZ2V0aXRlbV9fKClgYFxubWV0aG9kIHRoYXQgaW50ZXJwcmV0cyBuZWdhdGl2ZSBpbmRpY2VzIGJ5IGFkZGluZyB0aGUgbGVuZ3RoIG9mIHRoZVxuc2VxdWVuY2UgdG8gdGhlIGluZGV4IChzbyB0aGF0IGBgeFstMV1gYCBzZWxlY3RzIHRoZSBsYXN0IGl0ZW0gb2ZcbmBgeGBgKS4gIFRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIgbGVzcyB0aGFuXG50aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSwgYW5kIHRoZSBzdWJzY3JpcHRpb24gc2VsZWN0cyB0aGVcbml0ZW0gd2hvc2UgaW5kZXggaXMgdGhhdCB2YWx1ZSAoY291bnRpbmcgZnJvbSB6ZXJvKS4gU2luY2UgdGhlIHN1cHBvcnRcbmZvciBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBzbGljaW5nIG9jY3VycyBpbiB0aGUgb2JqZWN0XCdzXG5gYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QsIHN1YmNsYXNzZXMgb3ZlcnJpZGluZyB0aGlzIG1ldGhvZCB3aWxsIG5lZWRcbnRvIGV4cGxpY2l0bHkgYWRkIHRoYXQgc3VwcG9ydC5cblxuQSBzdHJpbmdcJ3MgaXRlbXMgYXJlIGNoYXJhY3RlcnMuICBBIGNoYXJhY3RlciBpcyBub3QgYSBzZXBhcmF0ZSBkYXRhXG50eXBlIGJ1dCBhIHN0cmluZyBvZiBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuXG4nLAogICd0cnV0aCc6ICJcblRydXRoIFZhbHVlIFRlc3RpbmdcbioqKioqKioqKioqKioqKioqKipcblxuQW55IG9iamVjdCBjYW4gYmUgdGVzdGVkIGZvciB0cnV0aCB2YWx1ZSwgZm9yIHVzZSBpbiBhbiBgYGlmYGAgb3JcbmBgd2hpbGVgYCBjb25kaXRpb24gb3IgYXMgb3BlcmFuZCBvZiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zIGJlbG93LiBUaGVcbmZvbGxvd2luZyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgZmFsc2U6XG5cbiogYGBOb25lYGBcblxuKiBgYEZhbHNlYGBcblxuKiB6ZXJvIG9mIGFueSBudW1lcmljIHR5cGUsIGZvciBleGFtcGxlLCBgYDBgYCwgYGAwLjBgYCwgYGAwamBgLlxuXG4qIGFueSBlbXB0eSBzZXF1ZW5jZSwgZm9yIGV4YW1wbGUsIGBgJydgYCwgYGAoKWBgLCBgYFtdYGAuXG5cbiogYW55IGVtcHR5IG1hcHBpbmcsIGZvciBleGFtcGxlLCBgYHt9YGAuXG5cbiogaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzLCBpZiB0aGUgY2xhc3MgZGVmaW5lcyBhXG4gIGBgX19ib29sX18oKWBgIG9yIGBgX19sZW5fXygpYGAgbWV0aG9kLCB3aGVuIHRoYXQgbWV0aG9kIHJldHVybnMgdGhlXG4gIGludGVnZXIgemVybyBvciBgYGJvb2xgYCB2YWx1ZSBgYEZhbHNlYGAuIFsxXVxuXG5BbGwgb3RoZXIgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHRydWUgLS0tIHNvIG9iamVjdHMgb2YgbWFueSB0eXBlcyBhcmVcbmFsd2F5cyB0cnVlLlxuXG5PcGVyYXRpb25zIGFuZCBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgQm9vbGVhbiByZXN1bHQgYWx3YXlzXG5yZXR1cm4gYGAwYGAgb3IgYGBGYWxzZWBgIGZvciBmYWxzZSBhbmQgYGAxYGAgb3IgYGBUcnVlYGAgZm9yIHRydWUsXG51bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4gKEltcG9ydGFudCBleGNlcHRpb246IHRoZSBCb29sZWFuIG9wZXJhdGlvbnNcbmBgb3JgYCBhbmQgYGBhbmRgYCBhbHdheXMgcmV0dXJuIG9uZSBvZiB0aGVpciBvcGVyYW5kcy4pXG4iLAogICd0cnknOiAnXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIHRhcmdldF1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuVGhlIGBgZXhjZXB0YGAgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuXG5ubyBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgc3VpdGUsIGEgc2VhcmNoIGZvclxuYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHRcbmNsYXVzZXMgaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBblxuZXhwcmVzc2lvbi1sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlc1xuYW55IGV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdFxuZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGVcbnJlc3VsdGluZyBvYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpc1xuY29tcGF0aWJsZSB3aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZVxuZXhjZXB0aW9uIG9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlXG5leGNlcHRpb24uXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgYGB0cnlgYCBzdGF0ZW1lbnRcbnJhaXNlZCB0aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSBgYGFzYGAga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsXG5pZiBwcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nIGBgYXMgdGFyZ2V0YGAsIGl0IGlzIGNsZWFyZWRcbmF0IHRoZSBlbmQgb2YgdGhlIGV4Y2VwdCBjbGF1c2UuICBUaGlzIGlzIGFzIGlmXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgZm9vXG5cbndhcyB0cmFuc2xhdGVkIHRvXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgdHJ5OlxuICAgICAgICAgICBmb29cbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICBkZWwgTlxuXG5UaGlzIG1lYW5zIHRoZSBleGNlcHRpb24gbXVzdCBiZSBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBuYW1lIHRvIGJlXG5hYmxlIHRvIHJlZmVyIHRvIGl0IGFmdGVyIHRoZSBleGNlcHQgY2xhdXNlLiAgRXhjZXB0aW9ucyBhcmUgY2xlYXJlZFxuYmVjYXVzZSB3aXRoIHRoZSB0cmFjZWJhY2sgYXR0YWNoZWQgdG8gdGhlbSwgdGhleSBmb3JtIGEgcmVmZXJlbmNlXG5jeWNsZSB3aXRoIHRoZSBzdGFjayBmcmFtZSwga2VlcGluZyBhbGwgbG9jYWxzIGluIHRoYXQgZnJhbWUgYWxpdmVcbnVudGlsIHRoZSBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBzdG9yZWQgaW4gdGhlIGBgc3lzYGAgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzIHZpYVxuYGBzeXMuZXhjX2luZm8oKWBgLiBgYHN5cy5leGNfaW5mbygpYGAgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZlxudGhlIGV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0XG4oc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpblxudGhlIHByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gIGBgc3lzLmV4Y19pbmZvKClgYCB2YWx1ZXNcbmFyZSByZXN0b3JlZCB0byB0aGVpciBwcmV2aW91cyB2YWx1ZXMgKGJlZm9yZSB0aGUgY2FsbCkgd2hlbiByZXR1cm5pbmdcbmZyb20gYSBmdW5jdGlvbiB0aGF0IGhhbmRsZWQgYW4gZXhjZXB0aW9uLlxuXG5UaGUgb3B0aW9uYWwgYGBlbHNlYGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSBgYHRyeWBgIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZVxuYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBwcmVjZWRpbmcgYGBleGNlcHRgYCBjbGF1c2VzLlxuXG5JZiBgYGZpbmFsbHlgYCBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlXG5gYHRyeWBgIGNsYXVzZSBpcyBleGVjdXRlZCwgaW5jbHVkaW5nIGFueSBgYGV4Y2VwdGBgIGFuZCBgYGVsc2VgYFxuY2xhdXNlcy4gIElmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3RcbmhhbmRsZWQsIHRoZSBleGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgaXNcbmV4ZWN1dGVkLiAgSWYgdGhlcmUgaXMgYSBzYXZlZCBleGNlcHRpb24gaXQgaXMgcmUtcmFpc2VkIGF0IHRoZSBlbmQgb2ZcbnRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuICBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIHJhaXNlcyBhbm90aGVyXG5leGNlcHRpb24sIHRoZSBzYXZlZCBleGNlcHRpb24gaXMgc2V0IGFzIHRoZSBjb250ZXh0IG9mIHRoZSBuZXdcbmV4Y2VwdGlvbi4gSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSBleGVjdXRlcyBhIGBgcmV0dXJuYGAgb3JcbmBgYnJlYWtgYCBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb24gaXMgZGlzY2FyZGVkOlxuXG4gICBkZWYgZigpOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgMS8wXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgcmV0dXJuIDQyXG5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5XaGVuIGEgYGByZXR1cm5gYCwgYGBicmVha2BgIG9yIGBgY29udGludWVgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW5cbnRoZSBgYHRyeWBgIHN1aXRlIG9mIGEgYGB0cnlgYC4uLmBgZmluYWxseWBgIHN0YXRlbWVudCwgdGhlXG5gYGZpbmFsbHlgYCBjbGF1c2UgaXMgYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgaXMgaWxsZWdhbCBpbiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhXG5wcm9ibGVtIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlXG5saWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIGBgcmFpc2VgYCBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuJywKLSAndHlwZXMnOiAnXG5UaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHlcbioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5CZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIHR5cGVzIHRoYXQgYXJlIGJ1aWx0IGludG8gUHl0aG9uLiAgRXh0ZW5zaW9uXG5tb2R1bGVzICh3cml0dGVuIGluIEMsIEphdmEsIG9yIG90aGVyIGxhbmd1YWdlcywgZGVwZW5kaW5nIG9uIHRoZVxuaW1wbGVtZW50YXRpb24pIGNhbiBkZWZpbmUgYWRkaXRpb25hbCB0eXBlcy4gIEZ1dHVyZSB2ZXJzaW9ucyBvZlxuUHl0aG9uIG1heSBhZGQgdHlwZXMgdG8gdGhlIHR5cGUgaGllcmFyY2h5IChlLmcuLCByYXRpb25hbCBudW1iZXJzLFxuZWZmaWNpZW50bHkgc3RvcmVkIGFycmF5cyBvZiBpbnRlZ2VycywgZXRjLiksIGFsdGhvdWdoIHN1Y2ggYWRkaXRpb25zXG53aWxsIG9mdGVuIGJlIHByb3ZpZGVkIHZpYSB0aGUgc3RhbmRhcmQgbGlicmFyeSBpbnN0ZWFkLlxuXG5Tb21lIG9mIHRoZSB0eXBlIGRlc2NyaXB0aW9ucyBiZWxvdyBjb250YWluIGEgcGFyYWdyYXBoIGxpc3Rpbmdcblwnc3BlY2lhbCBhdHRyaWJ1dGVzLlwnICBUaGVzZSBhcmUgYXR0cmlidXRlcyB0aGF0IHByb3ZpZGUgYWNjZXNzIHRvIHRoZVxuaW1wbGVtZW50YXRpb24gYW5kIGFyZSBub3QgaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNlLiAgVGhlaXIgZGVmaW5pdGlvblxubWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5Ob25lXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGJ1aWx0LWluIG5hbWUgYGBOb25lYGAuXG4gICBJdCBpcyB1c2VkIHRvIHNpZ25pZnkgdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBtYW55IHNpdHVhdGlvbnMsXG4gICBlLmcuLCBpdCBpcyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVyblxuICAgYW55dGhpbmcuIEl0cyB0cnV0aCB2YWx1ZSBpcyBmYWxzZS5cblxuTm90SW1wbGVtZW50ZWRcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZVxuICAgYGBOb3RJbXBsZW1lbnRlZGBgLiBOdW1lcmljIG1ldGhvZHMgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIG1heVxuICAgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIHRoZVxuICAgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlIHJlZmxlY3RlZFxuICAgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdG9yLikgIEl0c1xuICAgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuRWxsaXBzaXNcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbGl0ZXJhbCBgYC4uLmBgIG9yIHRoZVxuICAgYnVpbHQtaW4gbmFtZSBgYEVsbGlwc2lzYGAuICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuYGBudW1iZXJzLk51bWJlcmBgXG4gICBUaGVzZSBhcmUgY3JlYXRlZCBieSBudW1lcmljIGxpdGVyYWxzIGFuZCByZXR1cm5lZCBhcyByZXN1bHRzIGJ5XG4gICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgYXJpdGhtZXRpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBOdW1lcmljXG4gICBvYmplY3RzIGFyZSBpbW11dGFibGU7IG9uY2UgY3JlYXRlZCB0aGVpciB2YWx1ZSBuZXZlciBjaGFuZ2VzLlxuICAgUHl0aG9uIG51bWJlcnMgYXJlIG9mIGNvdXJzZSBzdHJvbmdseSByZWxhdGVkIHRvIG1hdGhlbWF0aWNhbFxuICAgbnVtYmVycywgYnV0IHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9mIG51bWVyaWNhbCByZXByZXNlbnRhdGlvblxuICAgaW4gY29tcHV0ZXJzLlxuXG4gICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGludGVnZXJzLCBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhbmRcbiAgIGNvbXBsZXggbnVtYmVyczpcblxuICAgYGBudW1iZXJzLkludGVncmFsYGBcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBlbGVtZW50cyBmcm9tIHRoZSBtYXRoZW1hdGljYWwgc2V0IG9mIGludGVnZXJzXG4gICAgICAocG9zaXRpdmUgYW5kIG5lZ2F0aXZlKS5cblxuICAgICAgVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBpbnRlZ2VyczpcblxuICAgICAgSW50ZWdlcnMgKGBgaW50YGApXG5cbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCBudW1iZXJzIGluIGFuIHVubGltaXRlZCByYW5nZSwgc3ViamVjdCB0b1xuICAgICAgICAgYXZhaWxhYmxlICh2aXJ0dWFsKSBtZW1vcnkgb25seS4gIEZvciB0aGUgcHVycG9zZSBvZiBzaGlmdFxuICAgICAgICAgYW5kIG1hc2sgb3BlcmF0aW9ucywgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgYXNzdW1lZCwgYW5kXG4gICAgICAgICBuZWdhdGl2ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBpbiBhIHZhcmlhbnQgb2YgMlwnc1xuICAgICAgICAgY29tcGxlbWVudCB3aGljaCBnaXZlcyB0aGUgaWxsdXNpb24gb2YgYW4gaW5maW5pdGUgc3RyaW5nIG9mXG4gICAgICAgICBzaWduIGJpdHMgZXh0ZW5kaW5nIHRvIHRoZSBsZWZ0LlxuXG4gICAgICBCb29sZWFucyAoYGBib29sYGApXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgdGhlIHRydXRoIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZS4gIFRoZSB0d29cbiAgICAgICAgIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZXMgRmFsc2UgYW5kIFRydWUgYXJlIHRoZSBvbmx5XG4gICAgICAgICBCb29sZWFuIG9iamVjdHMuIFRoZSBCb29sZWFuIHR5cGUgaXMgYSBzdWJ0eXBlIG9mIHRoZSBpbnRlZ2VyXG4gICAgICAgICB0eXBlLCBhbmQgQm9vbGVhbiB2YWx1ZXMgYmVoYXZlIGxpa2UgdGhlIHZhbHVlcyAwIGFuZCAxLFxuICAgICAgICAgcmVzcGVjdGl2ZWx5LCBpbiBhbG1vc3QgYWxsIGNvbnRleHRzLCB0aGUgZXhjZXB0aW9uIGJlaW5nXG4gICAgICAgICB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgc3RyaW5nLCB0aGUgc3RyaW5ncyBgYCJGYWxzZSJgYCBvclxuICAgICAgICAgYGAiVHJ1ZSJgYCBhcmUgcmV0dXJuZWQsIHJlc3BlY3RpdmVseS5cblxuICAgICAgVGhlIHJ1bGVzIGZvciBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIGFyZSBpbnRlbmRlZCB0byBnaXZlIHRoZVxuICAgICAgbW9zdCBtZWFuaW5nZnVsIGludGVycHJldGF0aW9uIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnNcbiAgICAgIGludm9sdmluZyBuZWdhdGl2ZSBpbnRlZ2Vycy5cblxuICAgYGBudW1iZXJzLlJlYWxgYCAoYGBmbG9hdGBgKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IG1hY2hpbmUtbGV2ZWwgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludFxuICAgICAgbnVtYmVycy4gWW91IGFyZSBhdCB0aGUgbWVyY3kgb2YgdGhlIHVuZGVybHlpbmcgbWFjaGluZVxuICAgICAgYXJjaGl0ZWN0dXJlIChhbmQgQyBvciBKYXZhIGltcGxlbWVudGF0aW9uKSBmb3IgdGhlIGFjY2VwdGVkXG4gICAgICByYW5nZSBhbmQgaGFuZGxpbmcgb2Ygb3ZlcmZsb3cuIFB5dGhvbiBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1cbiAgICAgIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzOyB0aGUgc2F2aW5ncyBpbiBwcm9jZXNzb3IgYW5kXG4gICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBpc1xuICAgICAgZHdhcmZlZCBieSB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgb2JqZWN0cyBpbiBQeXRob24sIHNvIHRoZXJlIGlzXG4gICAgICBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUgbGFuZ3VhZ2Ugd2l0aCB0d28ga2luZHMgb2YgZmxvYXRpbmdcbiAgICAgIHBvaW50IG51bWJlcnMuXG5cbiAgIGBgbnVtYmVycy5Db21wbGV4YGAgKGBgY29tcGxleGBgKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IGNvbXBsZXggbnVtYmVycyBhcyBhIHBhaXIgb2YgbWFjaGluZS1sZXZlbFxuICAgICAgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAgVGhlIHNhbWUgY2F2ZWF0cyBhcHBseVxuICAgICAgYXMgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgYVxuICAgICAgY29tcGxleCBudW1iZXIgYGB6YGAgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSByZWFkLW9ubHlcbiAgICAgIGF0dHJpYnV0ZXMgYGB6LnJlYWxgYCBhbmQgYGB6LmltYWdgYC5cblxuU2VxdWVuY2VzXG4gICBUaGVzZSByZXByZXNlbnQgZmluaXRlIG9yZGVyZWQgc2V0cyBpbmRleGVkIGJ5IG5vbi1uZWdhdGl2ZVxuICAgbnVtYmVycy4gVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYCByZXR1cm5zIHRoZSBudW1iZXIgb2ZcbiAgIGl0ZW1zIG9mIGEgc2VxdWVuY2UuIFdoZW4gdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIGlzICpuKiwgdGhlXG4gICBpbmRleCBzZXQgY29udGFpbnMgdGhlIG51bWJlcnMgMCwgMSwgLi4uLCAqbiotMS4gIEl0ZW0gKmkqIG9mXG4gICBzZXF1ZW5jZSAqYSogaXMgc2VsZWN0ZWQgYnkgYGBhW2ldYGAuXG5cbiAgIFNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgc2xpY2luZzogYGBhW2k6al1gYCBzZWxlY3RzIGFsbCBpdGVtcyB3aXRoXG4gICBpbmRleCAqayogc3VjaCB0aGF0ICppKiBgYDw9YGAgKmsqIGBgPGBgICpqKi4gIFdoZW4gdXNlZCBhcyBhblxuICAgZXhwcmVzc2lvbiwgYSBzbGljZSBpcyBhIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUuICBUaGlzIGltcGxpZXNcbiAgIHRoYXQgdGhlIGluZGV4IHNldCBpcyByZW51bWJlcmVkIHNvIHRoYXQgaXQgc3RhcnRzIGF0IDAuXG5cbiAgIFNvbWUgc2VxdWVuY2VzIGFsc28gc3VwcG9ydCAiZXh0ZW5kZWQgc2xpY2luZyIgd2l0aCBhIHRoaXJkICJzdGVwIlxuICAgcGFyYW1ldGVyOiBgYGFbaTpqOmtdYGAgc2VsZWN0cyBhbGwgaXRlbXMgb2YgKmEqIHdpdGggaW5kZXggKngqXG4gICB3aGVyZSBgYHggPSBpICsgbiprYGAsICpuKiBgYD49YGAgYGAwYGAgYW5kICppKiBgYDw9YGAgKngqIGBgPGBgXG4gICAqaiouXG5cbiAgIFNlcXVlbmNlcyBhcmUgZGlzdGluZ3Vpc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIgbXV0YWJpbGl0eTpcblxuICAgSW1tdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgQW4gb2JqZWN0IG9mIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlIGNhbm5vdCBjaGFuZ2Ugb25jZSBpdCBpc1xuICAgICAgY3JlYXRlZC4gIChJZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyxcbiAgICAgIHRoZXNlIG90aGVyIG9iamVjdHMgbWF5IGJlIG11dGFibGUgYW5kIG1heSBiZSBjaGFuZ2VkOyBob3dldmVyLFxuICAgICAgdGhlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuIGltbXV0YWJsZVxuICAgICAgb2JqZWN0IGNhbm5vdCBjaGFuZ2UuKVxuXG4gICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzOlxuXG4gICAgICBTdHJpbmdzXG4gICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlXG4gICAgICAgICBjb2RlcG9pbnRzLiBBbGwgdGhlIGNvZGVwb2ludHMgaW4gcmFuZ2UgYGBVKzAwMDAgLSBVKzEwRkZGRmBgXG4gICAgICAgICBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBzdHJpbmcuICBQeXRob24gZG9lc25cJ3QgaGF2ZSBhXG4gICAgICAgICBgYGNocmBgIHR5cGUsIGFuZCBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyBpc1xuICAgICAgICAgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcgb2JqZWN0IHdpdGggbGVuZ3RoIGBgMWBgLiAgVGhlIGJ1aWx0LVxuICAgICAgICAgaW4gZnVuY3Rpb24gYGBvcmQoKWBgIGNvbnZlcnRzIGEgY2hhcmFjdGVyIHRvIGl0cyBjb2RlcG9pbnRcbiAgICAgICAgIChhcyBhbiBpbnRlZ2VyKTsgYGBjaHIoKWBgIGNvbnZlcnRzIGFuIGludGVnZXIgaW4gcmFuZ2UgYGAwIC1cbiAgICAgICAgIDEwRkZGRmBgIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3Rlci4gYGBzdHIuZW5jb2RlKClgYCBjYW5cbiAgICAgICAgIGJlIHVzZWQgdG8gY29udmVydCBhIGBgc3RyYGAgdG8gYGBieXRlc2BgIHVzaW5nIHRoZSBnaXZlblxuICAgICAgICAgZW5jb2RpbmcsIGFuZCBgYGJ5dGVzLmRlY29kZSgpYGAgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZSB0aGVcbiAgICAgICAgIG9wcG9zaXRlLlxuXG4gICAgICBUdXBsZXNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIHR1cGxlIGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuIFR1cGxlcyBvZlxuICAgICAgICAgdHdvIG9yIG1vcmUgaXRlbXMgYXJlIGZvcm1lZCBieSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMgb2ZcbiAgICAgICAgIGV4cHJlc3Npb25zLiAgQSB0dXBsZSBvZiBvbmUgaXRlbSAoYSBcJ3NpbmdsZXRvblwnKSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhZmZpeGluZyBhIGNvbW1hIHRvIGFuIGV4cHJlc3Npb24gKGFuIGV4cHJlc3Npb24gYnlcbiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBjcmVhdGUgYSB0dXBsZSwgc2luY2UgcGFyZW50aGVzZXMgbXVzdCBiZVxuICAgICAgICAgdXNhYmxlIGZvciBncm91cGluZyBvZiBleHByZXNzaW9ucykuICBBbiBlbXB0eSB0dXBsZSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhbiBlbXB0eSBwYWlyIG9mIHBhcmVudGhlc2VzLlxuXG4gICAgICBCeXRlc1xuICAgICAgICAgQSBieXRlcyBvYmplY3QgaXMgYW4gaW1tdXRhYmxlIGFycmF5LiAgVGhlIGl0ZW1zIGFyZSA4LWJpdFxuICAgICAgICAgYnl0ZXMsIHJlcHJlc2VudGVkIGJ5IGludGVnZXJzIGluIHRoZSByYW5nZSAwIDw9IHggPCAyNTYuXG4gICAgICAgICBCeXRlcyBsaXRlcmFscyAobGlrZSBgYGJcJ2FiY1wnYGApIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICAgICAgIGBgYnl0ZXMoKWBgIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBieXRlcyBvYmplY3RzLiAgQWxzbyxcbiAgICAgICAgIGJ5dGVzIG9iamVjdHMgY2FuIGJlIGRlY29kZWQgdG8gc3RyaW5ncyB2aWEgdGhlIGBgZGVjb2RlKClgYFxuICAgICAgICAgbWV0aG9kLlxuXG4gICBNdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgTXV0YWJsZSBzZXF1ZW5jZXMgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhleSBhcmUgY3JlYXRlZC4gIFRoZVxuICAgICAgc3Vic2NyaXB0aW9uIGFuZCBzbGljaW5nIG5vdGF0aW9ucyBjYW4gYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mXG4gICAgICBhc3NpZ25tZW50IGFuZCBgYGRlbGBgIChkZWxldGUpIHN0YXRlbWVudHMuXG5cbiAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzOlxuXG4gICAgICBMaXN0c1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgbGlzdCBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiAgTGlzdHMgYXJlXG4gICAgICAgICBmb3JtZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIGluXG4gICAgICAgICBzcXVhcmUgYnJhY2tldHMuIChOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY2FzZXMgbmVlZGVkXG4gICAgICAgICB0byBmb3JtIGxpc3RzIG9mIGxlbmd0aCAwIG9yIDEuKVxuXG4gICAgICBCeXRlIEFycmF5c1xuICAgICAgICAgQSBieXRlYXJyYXkgb2JqZWN0IGlzIGEgbXV0YWJsZSBhcnJheS4gVGhleSBhcmUgY3JlYXRlZCBieVxuICAgICAgICAgdGhlIGJ1aWx0LWluIGBgYnl0ZWFycmF5KClgYCBjb25zdHJ1Y3Rvci4gIEFzaWRlIGZyb20gYmVpbmdcbiAgICAgICAgIG11dGFibGUgKGFuZCBoZW5jZSB1bmhhc2hhYmxlKSwgYnl0ZSBhcnJheXMgb3RoZXJ3aXNlIHByb3ZpZGVcbiAgICAgICAgIHRoZSBzYW1lIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbGl0eSBhcyBpbW11dGFibGUgYnl0ZXNcbiAgICAgICAgIG9iamVjdHMuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlIGBgYXJyYXlgYCBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGV4YW1wbGUgb2ZcbiAgICAgIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCBhcyBkb2VzIHRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlLlxuXG5TZXQgdHlwZXNcbiAgIFRoZXNlIHJlcHJlc2VudCB1bm9yZGVyZWQsIGZpbml0ZSBzZXRzIG9mIHVuaXF1ZSwgaW1tdXRhYmxlXG4gICBvYmplY3RzLiBBcyBzdWNoLCB0aGV5IGNhbm5vdCBiZSBpbmRleGVkIGJ5IGFueSBzdWJzY3JpcHQuIEhvd2V2ZXIsXG4gICB0aGV5IGNhbiBiZSBpdGVyYXRlZCBvdmVyLCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYFxuICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2V0LiBDb21tb24gdXNlcyBmb3Igc2V0cyBhcmUgZmFzdFxuICAgbWVtYmVyc2hpcCB0ZXN0aW5nLCByZW1vdmluZyBkdXBsaWNhdGVzIGZyb20gYSBzZXF1ZW5jZSwgYW5kXG4gICBjb21wdXRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRlcnNlY3Rpb24sIHVuaW9uLFxuICAgZGlmZmVyZW5jZSwgYW5kIHN5bW1ldHJpYyBkaWZmZXJlbmNlLlxuXG4gICBGb3Igc2V0IGVsZW1lbnRzLCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgcnVsZXMgYXBwbHkgYXMgZm9yXG4gICBkaWN0aW9uYXJ5IGtleXMuIE5vdGUgdGhhdCBudW1lcmljIHR5cGVzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3JcbiAgIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgYGAxYGAgYW5kXG4gICBgYDEuMGBgKSwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29udGFpbmVkIGluIGEgc2V0LlxuXG4gICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgc2V0IHR5cGVzOlxuXG4gICBTZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYSBtdXRhYmxlIHNldC4gVGhleSBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgIGBgc2V0KClgYCBjb25zdHJ1Y3RvciBhbmQgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgYnkgc2V2ZXJhbFxuICAgICAgbWV0aG9kcywgc3VjaCBhcyBgYGFkZCgpYGAuXG5cbiAgIEZyb3plbiBzZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYW4gaW1tdXRhYmxlIHNldC4gIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlXG4gICAgICBidWlsdC1pbiBgYGZyb3plbnNldCgpYGAgY29uc3RydWN0b3IuICBBcyBhIGZyb3plbnNldCBpc1xuICAgICAgaW1tdXRhYmxlIGFuZCAqaGFzaGFibGUqLCBpdCBjYW4gYmUgdXNlZCBhZ2FpbiBhcyBhbiBlbGVtZW50IG9mXG4gICAgICBhbm90aGVyIHNldCwgb3IgYXMgYSBkaWN0aW9uYXJ5IGtleS5cblxuTWFwcGluZ3NcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgYXJiaXRyYXJ5IGluZGV4XG4gICBzZXRzLiBUaGUgc3Vic2NyaXB0IG5vdGF0aW9uIGBgYVtrXWBgIHNlbGVjdHMgdGhlIGl0ZW0gaW5kZXhlZCBieVxuICAgYGBrYGAgZnJvbSB0aGUgbWFwcGluZyBgYGFgYDsgdGhpcyBjYW4gYmUgdXNlZCBpbiBleHByZXNzaW9ucyBhbmRcbiAgIGFzIHRoZSB0YXJnZXQgb2YgYXNzaWdubWVudHMgb3IgYGBkZWxgYCBzdGF0ZW1lbnRzLiBUaGUgYnVpbHQtaW5cbiAgIGZ1bmN0aW9uIGBgbGVuKClgYCByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBtYXBwaW5nLlxuXG4gICBUaGVyZSBpcyBjdXJyZW50bHkgYSBzaW5nbGUgaW50cmluc2ljIG1hcHBpbmcgdHlwZTpcblxuICAgRGljdGlvbmFyaWVzXG4gICAgICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IG5lYXJseVxuICAgICAgYXJiaXRyYXJ5IHZhbHVlcy4gIFRoZSBvbmx5IHR5cGVzIG9mIHZhbHVlcyBub3QgYWNjZXB0YWJsZSBhc1xuICAgICAga2V5cyBhcmUgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMgb3IgZGljdGlvbmFyaWVzIG9yIG90aGVyXG4gICAgICBtdXRhYmxlIHR5cGVzIHRoYXQgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuIGJ5IG9iamVjdFxuICAgICAgaWRlbnRpdHksIHRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mXG4gICAgICBkaWN0aW9uYXJpZXMgcmVxdWlyZXMgYSBrZXlcJ3MgaGFzaCB2YWx1ZSB0byByZW1haW4gY29uc3RhbnQuXG4gICAgICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljXG4gICAgICBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCBgYDFgYCBhbmRcbiAgICAgIGBgMS4wYGApIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXggdGhlIHNhbWVcbiAgICAgIGRpY3Rpb25hcnkgZW50cnkuXG5cbiAgICAgIERpY3Rpb25hcmllcyBhcmUgbXV0YWJsZTsgdGhleSBjYW4gYmUgY3JlYXRlZCBieSB0aGUgYGB7Li4ufWBgXG4gICAgICBub3RhdGlvbiAoc2VlIHNlY3Rpb24gKkRpY3Rpb25hcnkgZGlzcGxheXMqKS5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGVzIGBgZGJtLm5kYm1gYCBhbmQgYGBkYm0uZ251YGAgcHJvdmlkZVxuICAgICAgYWRkaXRpb25hbCBleGFtcGxlcyBvZiBtYXBwaW5nIHR5cGVzLCBhcyBkb2VzIHRoZVxuICAgICAgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZS5cblxuQ2FsbGFibGUgdHlwZXNcbiAgIFRoZXNlIGFyZSB0aGUgdHlwZXMgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0aW9uIChzZWVcbiAgIHNlY3Rpb24gKkNhbGxzKikgY2FuIGJlIGFwcGxpZWQ6XG5cbiAgIFVzZXItZGVmaW5lZCBmdW5jdGlvbnNcbiAgICAgIEEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGEgZnVuY3Rpb25cbiAgICAgIGRlZmluaXRpb24gKHNlZSBzZWN0aW9uICpGdW5jdGlvbiBkZWZpbml0aW9ucyopLiAgSXQgc2hvdWxkIGJlXG4gICAgICBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudCBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICBhcyB0aGUgZnVuY3Rpb25cJ3MgZm9ybWFsIHBhcmFtZXRlciBsaXN0LlxuXG4gICAgICBTcGVjaWFsIGF0dHJpYnV0ZXM6XG5cbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IEF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PStcbiAgICAgIHwgYGBfX2RvY19fYGAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nLCBvciBgYE5vbmVgYCBpZiAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fbmFtZV9fYGAgICAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzIG5hbWUgICAgICAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fcXVhbG5hbWVfX2BgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzICpxdWFsaWZpZWQgbmFtZSogfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOZXcgaW4gdmVyc2lvbiAzLjMuICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX21vZHVsZV9fYGAgICAgICAgICAgICB8IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiwgb3IgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19kZWZhdWx0c19fYGAgICAgICAgICAgfCBBIHR1cGxlIGNvbnRhaW5pbmcgZGVmYXVsdCAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJndW1lbnQgdmFsdWVzIGZvciB0aG9zZSAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50cyB0aGF0IGhhdmUgZGVmYXVsdHMsICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciBgYE5vbmVgYCBpZiBubyBhcmd1bWVudHMgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19jb2RlX19gYCAgICAgICAgICAgICAgfCBUaGUgY29kZSBvYmplY3QgcmVwcmVzZW50aW5nICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIGJvZHkuICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19nbG9iYWxzX19gYCAgICAgICAgICAgfCBBIHJlZmVyZW5jZSB0byB0aGUgZGljdGlvbmFyeSAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb25cJ3MgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBnbG9iYWwgdmFyaWFibGVzIC0tLSB0aGUgZ2xvYmFsIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGUgaW4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZC4gfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZGljdF9fYGAgICAgICAgICAgICAgIHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyYml0cmFyeSBmdW5jdGlvbiBhdHRyaWJ1dGVzLiAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fY2xvc3VyZV9fYGAgICAgICAgICAgIHwgYGBOb25lYGAgb3IgYSB0dXBsZSBvZiBjZWxscyAgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgY29udGFpbiBiaW5kaW5ncyBmb3IgdGhlICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvblwncyBmcmVlIHZhcmlhYmxlcy4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19hbm5vdGF0aW9uc19fYGAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBhbm5vdGF0aW9ucyAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb2YgcGFyYW1ldGVycy4gIFRoZSBrZXlzIG9mIHRoZSB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRpY3QgYXJlIHRoZSBwYXJhbWV0ZXIgbmFtZXMsICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciBgYFwncmV0dXJuXCdgYCBmb3IgdGhlIHJldHVybiAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbm5vdGF0aW9uLCBpZiBwcm92aWRlZC4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2t3ZGVmYXVsdHNfX2BgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGRlZmF1bHRzIGZvciAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcblxuICAgICAgTW9zdCBvZiB0aGUgYXR0cmlidXRlcyBsYWJlbGxlZCAiV3JpdGFibGUiIGNoZWNrIHRoZSB0eXBlIG9mIHRoZVxuICAgICAgYXNzaWduZWQgdmFsdWUuXG5cbiAgICAgIEZ1bmN0aW9uIG9iamVjdHMgYWxzbyBzdXBwb3J0IGdldHRpbmcgYW5kIHNldHRpbmcgYXJiaXRyYXJ5XG4gICAgICBhdHRyaWJ1dGVzLCB3aGljaCBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGF0dGFjaCBtZXRhZGF0YVxuICAgICAgdG8gZnVuY3Rpb25zLiAgUmVndWxhciBhdHRyaWJ1dGUgZG90LW5vdGF0aW9uIGlzIHVzZWQgdG8gZ2V0IGFuZFxuICAgICAgc2V0IHN1Y2ggYXR0cmlidXRlcy4gKk5vdGUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5XG4gICAgICBzdXBwb3J0cyBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuIEZ1bmN0aW9uXG4gICAgICBhdHRyaWJ1dGVzIG9uIGJ1aWx0LWluIGZ1bmN0aW9ucyBtYXkgYmUgc3VwcG9ydGVkIGluIHRoZVxuICAgICAgZnV0dXJlLipcblxuICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGZ1bmN0aW9uXCdzIGRlZmluaXRpb24gY2FuIGJlXG4gICAgICByZXRyaWV2ZWQgZnJvbSBpdHMgY29kZSBvYmplY3Q7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgaW50ZXJuYWxcbiAgICAgIHR5cGVzIGJlbG93LlxuXG4gICBJbnN0YW5jZSBtZXRob2RzXG4gICAgICBBbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGNvbWJpbmVzIGEgY2xhc3MsIGEgY2xhc3MgaW5zdGFuY2UgYW5kXG4gICAgICBhbnkgY2FsbGFibGUgb2JqZWN0IChub3JtYWxseSBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbikuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgX19zZWxmX19gYCBpcyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIG9iamVjdCwgYGBfX2Z1bmNfX2BgIGlzIHRoZSBmdW5jdGlvbiBvYmplY3Q7IGBgX19kb2NfX2BgIGlzIHRoZVxuICAgICAgbWV0aG9kXCdzIGRvY3VtZW50YXRpb24gKHNhbWUgYXMgYGBfX2Z1bmNfXy5fX2RvY19fYGApO1xuICAgICAgYGBfX25hbWVfX2BgIGlzIHRoZSBtZXRob2QgbmFtZSAoc2FtZSBhcyBgYF9fZnVuY19fLl9fbmFtZV9fYGApO1xuICAgICAgYGBfX21vZHVsZV9fYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbWV0aG9kIHdhcyBkZWZpbmVkXG4gICAgICBpbiwgb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuXG5cbiAgICAgIE1ldGhvZHMgYWxzbyBzdXBwb3J0IGFjY2Vzc2luZyAoYnV0IG5vdCBzZXR0aW5nKSB0aGUgYXJiaXRyYXJ5XG4gICAgICBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgVXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3RzIG1heSBiZSBjcmVhdGVkIHdoZW4gZ2V0dGluZyBhblxuICAgICAgYXR0cmlidXRlIG9mIGEgY2xhc3MgKHBlcmhhcHMgdmlhIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MpLCBpZlxuICAgICAgdGhhdCBhdHRyaWJ1dGUgaXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IG9yIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSB1c2VyLVxuICAgICAgZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgZnJvbSBhIGNsYXNzIHZpYSBvbmUgb2YgaXRzIGluc3RhbmNlcyxcbiAgICAgIGl0cyBgYF9fc2VsZl9fYGAgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZSwgYW5kIHRoZSBtZXRob2RcbiAgICAgIG9iamVjdCBpcyBzYWlkIHRvIGJlIGJvdW5kLiAgVGhlIG5ldyBtZXRob2RcJ3MgYGBfX2Z1bmNfX2BgXG4gICAgICBhdHRyaWJ1dGUgaXMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZ1xuICAgICAgYW5vdGhlciBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgdGhlIGJlaGF2aW91ciBpc1xuICAgICAgdGhlIHNhbWUgYXMgZm9yIGEgZnVuY3Rpb24gb2JqZWN0LCBleGNlcHQgdGhhdCB0aGUgYGBfX2Z1bmNfX2BgXG4gICAgICBhdHRyaWJ1dGUgb2YgdGhlIG5ldyBpbnN0YW5jZSBpcyBub3QgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3RcbiAgICAgIGJ1dCBpdHMgYGBfX2Z1bmNfX2BgIGF0dHJpYnV0ZS5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgaXRzIGBgX19zZWxmX19gYFxuICAgICAgYXR0cmlidXRlIGlzIHRoZSBjbGFzcyBpdHNlbGYsIGFuZCBpdHMgYGBfX2Z1bmNfX2BgIGF0dHJpYnV0ZSBpc1xuICAgICAgdGhlIGZ1bmN0aW9uIG9iamVjdCB1bmRlcmx5aW5nIHRoZSBjbGFzcyBtZXRob2QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICBmdW5jdGlvbiAoYGBfX2Z1bmNfX2BgKSBpcyBjYWxsZWQsIGluc2VydGluZyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIChgYF9fc2VsZl9fYGApIGluIGZyb250IG9mIHRoZSBhcmd1bWVudCBsaXN0LiAgRm9yIGluc3RhbmNlLFxuICAgICAgd2hlbiBgYENgYCBpcyBhIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvblxuICAgICAgYGBmKClgYCwgYW5kIGBgeGBgIGlzIGFuIGluc3RhbmNlIG9mIGBgQ2BgLCBjYWxsaW5nIGBgeC5mKDEpYGBcbiAgICAgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYEMuZih4LCAxKWBgLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgZGVyaXZlZCBmcm9tIGEgY2xhc3MgbWV0aG9kXG4gICAgICBvYmplY3QsIHRoZSAiY2xhc3MgaW5zdGFuY2UiIHN0b3JlZCBpbiBgYF9fc2VsZl9fYGAgd2lsbFxuICAgICAgYWN0dWFsbHkgYmUgdGhlIGNsYXNzIGl0c2VsZiwgc28gdGhhdCBjYWxsaW5nIGVpdGhlciBgYHguZigxKWBgXG4gICAgICBvciBgYEMuZigxKWBgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYGYoQywxKWBgIHdoZXJlIGBgZmBgIGlzXG4gICAgICB0aGUgdW5kZXJseWluZyBmdW5jdGlvbi5cblxuICAgICAgTm90ZSB0aGF0IHRoZSB0cmFuc2Zvcm1hdGlvbiBmcm9tIGZ1bmN0aW9uIG9iamVjdCB0byBpbnN0YW5jZVxuICAgICAgbWV0aG9kIG9iamVjdCBoYXBwZW5zIGVhY2ggdGltZSB0aGUgYXR0cmlidXRlIGlzIHJldHJpZXZlZCBmcm9tXG4gICAgICB0aGUgaW5zdGFuY2UuICBJbiBzb21lIGNhc2VzLCBhIGZydWl0ZnVsIG9wdGltaXphdGlvbiBpcyB0b1xuICAgICAgYXNzaWduIHRoZSBhdHRyaWJ1dGUgdG8gYSBsb2NhbCB2YXJpYWJsZSBhbmQgY2FsbCB0aGF0IGxvY2FsXG4gICAgICB2YXJpYWJsZS4gQWxzbyBub3RpY2UgdGhhdCB0aGlzIHRyYW5zZm9ybWF0aW9uIG9ubHkgaGFwcGVucyBmb3JcbiAgICAgIHVzZXItZGVmaW5lZCBmdW5jdGlvbnM7IG90aGVyIGNhbGxhYmxlIG9iamVjdHMgKGFuZCBhbGwgbm9uLVxuICAgICAgY2FsbGFibGUgb2JqZWN0cykgYXJlIHJldHJpZXZlZCB3aXRob3V0IHRyYW5zZm9ybWF0aW9uLiAgSXQgaXNcbiAgICAgIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIHdoaWNoIGFyZVxuICAgICAgYXR0cmlidXRlcyBvZiBhIGNsYXNzIGluc3RhbmNlIGFyZSBub3QgY29udmVydGVkIHRvIGJvdW5kXG4gICAgICBtZXRob2RzOyB0aGlzICpvbmx5KiBoYXBwZW5zIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGFuIGF0dHJpYnV0ZVxuICAgICAgb2YgdGhlIGNsYXNzLlxuXG4gICBHZW5lcmF0b3IgZnVuY3Rpb25zXG4gICAgICBBIGZ1bmN0aW9uIG9yIG1ldGhvZCB3aGljaCB1c2VzIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50IChzZWVcbiAgICAgIHNlY3Rpb24gKlRoZSB5aWVsZCBzdGF0ZW1lbnQqKSBpcyBjYWxsZWQgYSAqZ2VuZXJhdG9yIGZ1bmN0aW9uKi5cbiAgICAgIFN1Y2ggYSBmdW5jdGlvbiwgd2hlbiBjYWxsZWQsIGFsd2F5cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9iamVjdFxuICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb246ICBjYWxsaW5nXG4gICAgICB0aGUgaXRlcmF0b3JcJ3MgYGBpdGVyYXRvci5fX25leHRfXygpYGAgbWV0aG9kIHdpbGwgY2F1c2UgdGhlXG4gICAgICBmdW5jdGlvbiB0byBleGVjdXRlIHVudGlsIGl0IHByb3ZpZGVzIGEgdmFsdWUgdXNpbmcgdGhlXG4gICAgICBgYHlpZWxkYGAgc3RhdGVtZW50LiAgV2hlbiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMgYSBgYHJldHVybmBgXG4gICAgICBzdGF0ZW1lbnQgb3IgZmFsbHMgb2ZmIHRoZSBlbmQsIGEgYGBTdG9wSXRlcmF0aW9uYGAgZXhjZXB0aW9uIGlzXG4gICAgICByYWlzZWQgYW5kIHRoZSBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2ZcbiAgICAgIHZhbHVlcyB0byBiZSByZXR1cm5lZC5cblxuICAgQnVpbHQtaW4gZnVuY3Rpb25zXG4gICAgICBBIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgQyBmdW5jdGlvbi5cbiAgICAgIEV4YW1wbGVzIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYGBsZW4oKWBgIGFuZCBgYG1hdGguc2luKClgYFxuICAgICAgKGBgbWF0aGBgIGlzIGEgc3RhbmRhcmQgYnVpbHQtaW4gbW9kdWxlKS4gVGhlIG51bWJlciBhbmQgdHlwZSBvZlxuICAgICAgdGhlIGFyZ3VtZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQyBmdW5jdGlvbi4gU3BlY2lhbCByZWFkLVxuICAgICAgb25seSBhdHRyaWJ1dGVzOiBgYF9fZG9jX19gYCBpcyB0aGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvblxuICAgICAgc3RyaW5nLCBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZTsgYGBfX25hbWVfX2BgIGlzIHRoZVxuICAgICAgZnVuY3Rpb25cJ3MgbmFtZTsgYGBfX3NlbGZfX2BgIGlzIHNldCB0byBgYE5vbmVgYCAoYnV0IHNlZSB0aGVcbiAgICAgIG5leHQgaXRlbSk7IGBgX19tb2R1bGVfX2BgIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlXG4gICAgICBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS5cblxuICAgQnVpbHQtaW4gbWV0aG9kc1xuICAgICAgVGhpcyBpcyByZWFsbHkgYSBkaWZmZXJlbnQgZGlzZ3Vpc2Ugb2YgYSBidWlsdC1pbiBmdW5jdGlvbiwgdGhpc1xuICAgICAgdGltZSBjb250YWluaW5nIGFuIG9iamVjdCBwYXNzZWQgdG8gdGhlIEMgZnVuY3Rpb24gYXMgYW5cbiAgICAgIGltcGxpY2l0IGV4dHJhIGFyZ3VtZW50LiAgQW4gZXhhbXBsZSBvZiBhIGJ1aWx0LWluIG1ldGhvZCBpc1xuICAgICAgYGBhbGlzdC5hcHBlbmQoKWBgLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgYGBfX3NlbGZfX2BgIGlzIHNldCB0byB0aGVcbiAgICAgIG9iamVjdCBkZW5vdGVkIGJ5ICphbGlzdCouXG5cbiAgIENsYXNzZXNcbiAgICAgIENsYXNzZXMgYXJlIGNhbGxhYmxlLiAgVGhlc2Ugb2JqZWN0cyBub3JtYWxseSBhY3QgYXMgZmFjdG9yaWVzXG4gICAgICBmb3IgbmV3IGluc3RhbmNlcyBvZiB0aGVtc2VsdmVzLCBidXQgdmFyaWF0aW9ucyBhcmUgcG9zc2libGUgZm9yXG4gICAgICBjbGFzcyB0eXBlcyB0aGF0IG92ZXJyaWRlIGBgX19uZXdfXygpYGAuICBUaGUgYXJndW1lbnRzIG9mIHRoZVxuICAgICAgY2FsbCBhcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0b1xuICAgICAgYGBfX2luaXRfXygpYGAgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IGluc3RhbmNlLlxuXG4gICBDbGFzcyBJbnN0YW5jZXNcbiAgICAgIEluc3RhbmNlcyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBjYW4gYmUgbWFkZSBjYWxsYWJsZSBieSBkZWZpbmluZ1xuICAgICAgYSBgYF9fY2FsbF9fKClgYCBtZXRob2QgaW4gdGhlaXIgY2xhc3MuXG5cbk1vZHVsZXNcbiAgIE1vZHVsZXMgYXJlIGEgYmFzaWMgb3JnYW5pemF0aW9uYWwgdW5pdCBvZiBQeXRob24gY29kZSwgYW5kIGFyZVxuICAgY3JlYXRlZCBieSB0aGUgKmltcG9ydCBzeXN0ZW0qIGFzIGludm9rZWQgZWl0aGVyIGJ5IHRoZSBgYGltcG9ydGBgXG4gICBzdGF0ZW1lbnQgKHNlZSBgYGltcG9ydGBgKSwgb3IgYnkgY2FsbGluZyBmdW5jdGlvbnMgc3VjaCBhc1xuICAgYGBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpYGAgYW5kIGJ1aWx0LWluIGBgX19pbXBvcnRfXygpYGAuICBBXG4gICBtb2R1bGUgb2JqZWN0IGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBieSBhIGRpY3Rpb25hcnkgb2JqZWN0XG4gICAodGhpcyBpcyB0aGUgZGljdGlvbmFyeSByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZ2xvYmFsc19fYGAgYXR0cmlidXRlXG4gICBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlKS4gIEF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZVxuICAgdHJhbnNsYXRlZCB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgYGBtLnhgYCBpc1xuICAgZXF1aXZhbGVudCB0byBgYG0uX19kaWN0X19bIngiXWBgLiBBIG1vZHVsZSBvYmplY3QgZG9lcyBub3QgY29udGFpblxuICAgdGhlIGNvZGUgb2JqZWN0IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIChzaW5jZSBpdCBpc25cJ3RcbiAgIG5lZWRlZCBvbmNlIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lKS5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnQgdXBkYXRlcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgYGBtLnggPSAxYGAgaXMgZXF1aXZhbGVudCB0byBgYG0uX19kaWN0X19bIngiXSA9IDFgYC5cblxuICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlOiBgYF9fZGljdF9fYGAgaXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2VcbiAgIGFzIGEgZGljdGlvbmFyeSBvYmplY3QuXG5cbiAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQmVjYXVzZSBvZiB0aGUgd2F5IENQeXRob25cbiAgIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgd2lsbCBiZSBjbGVhcmVkXG4gICB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlIGRpY3Rpb25hcnkgc3RpbGwgaGFzXG4gICBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5IG9yIGtlZXAgdGhlXG4gICBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogYGBfX25hbWVfX2BgIGlzIHRoZSBtb2R1bGVcJ3NcbiAgIG5hbWU7IGBgX19kb2NfX2BgIGlzIHRoZSBtb2R1bGVcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIGBgTm9uZWBgXG4gICBpZiB1bmF2YWlsYWJsZTsgYGBfX2ZpbGVfX2BgIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoXG4gICB0aGUgbW9kdWxlIHdhcyBsb2FkZWQsIGlmIGl0IHdhcyBsb2FkZWQgZnJvbSBhIGZpbGUuIFRoZVxuICAgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBtYXkgYmUgbWlzc2luZyBmb3IgY2VydGFpbiB0eXBlcyBvZiBtb2R1bGVzLFxuICAgc3VjaCBhcyBDIG1vZHVsZXMgdGhhdCBhcmUgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUgaW50ZXJwcmV0ZXI7XG4gICBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMgbG9hZGVkIGR5bmFtaWNhbGx5IGZyb20gYSBzaGFyZWQgbGlicmFyeSwgaXRcbiAgIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgZmlsZS5cblxuQ3VzdG9tIGNsYXNzZXNcbiAgIEN1c3RvbSBjbGFzcyB0eXBlcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgYnkgY2xhc3MgZGVmaW5pdGlvbnMgKHNlZVxuICAgc2VjdGlvbiAqQ2xhc3MgZGVmaW5pdGlvbnMqKS4gIEEgY2xhc3MgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkXG4gICBieSBhIGRpY3Rpb25hcnkgb2JqZWN0LiBDbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgdHJhbnNsYXRlZFxuICAgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sIGBgQy54YGAgaXMgdHJhbnNsYXRlZCB0b1xuICAgYGBDLl9fZGljdF9fWyJ4Il1gYCAoYWx0aG91Z2ggdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhvb2tzIHdoaWNoXG4gICBhbGxvdyBmb3Igb3RoZXIgbWVhbnMgb2YgbG9jYXRpbmcgYXR0cmlidXRlcykuIFdoZW4gdGhlIGF0dHJpYnV0ZVxuICAgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRpbnVlcyBpbiB0aGUgYmFzZVxuICAgY2xhc3Nlcy4gVGhpcyBzZWFyY2ggb2YgdGhlIGJhc2UgY2xhc3NlcyB1c2VzIHRoZSBDMyBtZXRob2RcbiAgIHJlc29sdXRpb24gb3JkZXIgd2hpY2ggYmVoYXZlcyBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2ZcbiAgIFwnZGlhbW9uZFwnIGluaGVyaXRhbmNlIHN0cnVjdHVyZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlXG4gICBpbmhlcml0YW5jZSBwYXRocyBsZWFkaW5nIGJhY2sgdG8gYSBjb21tb24gYW5jZXN0b3IuIEFkZGl0aW9uYWxcbiAgIGRldGFpbHMgb24gdGhlIEMzIE1STyB1c2VkIGJ5IFB5dGhvbiBjYW4gYmUgZm91bmQgaW4gdGhlXG4gICBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgMi4zIHJlbGVhc2UgYXRcbiAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy5cblxuICAgV2hlbiBhIGNsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2UgKGZvciBjbGFzcyBgYENgYCwgc2F5KSB3b3VsZCB5aWVsZFxuICAgYSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZFxuICAgb2JqZWN0IHdob3NlIGBgX19zZWxmX19gYCBhdHRyaWJ1dGVzIGlzIGBgQ2BgLiAgV2hlbiBpdCB3b3VsZCB5aWVsZFxuICAgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWRcbiAgIGJ5IHRoZSBzdGF0aWMgbWV0aG9kIG9iamVjdC4gU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycypcbiAgIGZvciBhbm90aGVyIHdheSBpbiB3aGljaCBhdHRyaWJ1dGVzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3MgbWF5XG4gICBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseSBjb250YWluZWQgaW4gaXRzIGBgX19kaWN0X19gYC5cblxuICAgQ2xhc3MgYXR0cmlidXRlIGFzc2lnbm1lbnRzIHVwZGF0ZSB0aGUgY2xhc3NcJ3MgZGljdGlvbmFyeSwgbmV2ZXJcbiAgIHRoZSBkaWN0aW9uYXJ5IG9mIGEgYmFzZSBjbGFzcy5cblxuICAgQSBjbGFzcyBvYmplY3QgY2FuIGJlIGNhbGxlZCAoc2VlIGFib3ZlKSB0byB5aWVsZCBhIGNsYXNzIGluc3RhbmNlXG4gICAoc2VlIGJlbG93KS5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiBgYF9fbmFtZV9fYGAgaXMgdGhlIGNsYXNzIG5hbWU7IGBgX19tb2R1bGVfX2BgXG4gICBpcyB0aGUgbW9kdWxlIG5hbWUgaW4gd2hpY2ggdGhlIGNsYXNzIHdhcyBkZWZpbmVkOyBgYF9fZGljdF9fYGAgaXNcbiAgIHRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGNsYXNzXCdzIG5hbWVzcGFjZTsgYGBfX2Jhc2VzX19gYCBpcyBhXG4gICB0dXBsZSAocG9zc2libHkgZW1wdHkgb3IgYSBzaW5nbGV0b24pIGNvbnRhaW5pbmcgdGhlIGJhc2UgY2xhc3NlcyxcbiAgIGluIHRoZSBvcmRlciBvZiB0aGVpciBvY2N1cnJlbmNlIGluIHRoZSBiYXNlIGNsYXNzIGxpc3Q7XG4gICBgYF9fZG9jX19gYCBpcyB0aGUgY2xhc3NcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIE5vbmUgaWZcbiAgIHVuZGVmaW5lZC5cblxuQ2xhc3MgaW5zdGFuY2VzXG4gICBBIGNsYXNzIGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBhIGNsYXNzIG9iamVjdCAoc2VlIGFib3ZlKS5cbiAgIEEgY2xhc3MgaW5zdGFuY2UgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGFzIGEgZGljdGlvbmFyeSB3aGljaFxuICAgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHdoaWNoIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSBzZWFyY2hlZC5cbiAgIFdoZW4gYW4gYXR0cmlidXRlIGlzIG5vdCBmb3VuZCB0aGVyZSwgYW5kIHRoZSBpbnN0YW5jZVwncyBjbGFzcyBoYXNcbiAgIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWUsIHRoZSBzZWFyY2ggY29udGludWVzIHdpdGggdGhlIGNsYXNzXG4gICBhdHRyaWJ1dGVzLiAgSWYgYSBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQgdGhhdCBpcyBhIHVzZXItZGVmaW5lZFxuICAgZnVuY3Rpb24gb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3RcbiAgIHdob3NlIGBgX19zZWxmX19gYCBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLiAgU3RhdGljIG1ldGhvZCBhbmRcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBhbHNvIHRyYW5zZm9ybWVkOyBzZWUgYWJvdmUgdW5kZXJcbiAgICJDbGFzc2VzIi4gIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqIGZvciBhbm90aGVyIHdheVxuICAgaW4gd2hpY2ggYXR0cmlidXRlcyBvZiBhIGNsYXNzIHJldHJpZXZlZCB2aWEgaXRzIGluc3RhbmNlcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRoZSBvYmplY3RzIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGUgY2xhc3NcJ3NcbiAgIGBgX19kaWN0X19gYC4gIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZSBvYmplY3RcJ3NcbiAgIGNsYXNzIGhhcyBhIGBgX19nZXRhdHRyX18oKWBgIG1ldGhvZCwgdGhhdCBpcyBjYWxsZWQgdG8gc2F0aXNmeSB0aGVcbiAgIGxvb2t1cC5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnRzIGFuZCBkZWxldGlvbnMgdXBkYXRlIHRoZSBpbnN0YW5jZVwnc1xuICAgZGljdGlvbmFyeSwgbmV2ZXIgYSBjbGFzc1wncyBkaWN0aW9uYXJ5LiAgSWYgdGhlIGNsYXNzIGhhcyBhXG4gICBgYF9fc2V0YXR0cl9fKClgYCBvciBgYF9fZGVsYXR0cl9fKClgYCBtZXRob2QsIHRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBDbGFzcyBpbnN0YW5jZXMgY2FuIHByZXRlbmQgdG8gYmUgbnVtYmVycywgc2VxdWVuY2VzLCBvciBtYXBwaW5nc1xuICAgaWYgdGhleSBoYXZlIG1ldGhvZHMgd2l0aCBjZXJ0YWluIHNwZWNpYWwgbmFtZXMuICBTZWUgc2VjdGlvblxuICAgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKi5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiBgYF9fZGljdF9fYGAgaXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5O1xuICAgYGBfX2NsYXNzX19gYCBpcyB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MuXG5cbkkvTyBvYmplY3RzIChhbHNvIGtub3duIGFzIGZpbGUgb2JqZWN0cylcbiAgIEEgKmZpbGUgb2JqZWN0KiByZXByZXNlbnRzIGFuIG9wZW4gZmlsZS4gIFZhcmlvdXMgc2hvcnRjdXRzIGFyZVxuICAgYXZhaWxhYmxlIHRvIGNyZWF0ZSBmaWxlIG9iamVjdHM6IHRoZSBgYG9wZW4oKWBgIGJ1aWx0LWluIGZ1bmN0aW9uLFxuICAgYW5kIGFsc28gYGBvcy5wb3BlbigpYGAsIGBgb3MuZmRvcGVuKClgYCwgYW5kIHRoZSBgYG1ha2VmaWxlKClgYFxuICAgbWV0aG9kIG9mIHNvY2tldCBvYmplY3RzIChhbmQgcGVyaGFwcyBieSBvdGhlciBmdW5jdGlvbnMgb3IgbWV0aG9kc1xuICAgcHJvdmlkZWQgYnkgZXh0ZW5zaW9uIG1vZHVsZXMpLlxuXG4gICBUaGUgb2JqZWN0cyBgYHN5cy5zdGRpbmBgLCBgYHN5cy5zdGRvdXRgYCBhbmQgYGBzeXMuc3RkZXJyYGAgYXJlXG4gICBpbml0aWFsaXplZCB0byBmaWxlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50ZXJwcmV0ZXJcJ3NcbiAgIHN0YW5kYXJkIGlucHV0LCBvdXRwdXQgYW5kIGVycm9yIHN0cmVhbXM7IHRoZXkgYXJlIGFsbCBvcGVuIGluIHRleHRcbiAgIG1vZGUgYW5kIHRoZXJlZm9yZSBmb2xsb3cgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZVxuICAgYGBpby5UZXh0SU9CYXNlYGAgYWJzdHJhY3QgY2xhc3MuXG5cbkludGVybmFsIHR5cGVzXG4gICBBIGZldyB0eXBlcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGludGVycHJldGVyIGFyZSBleHBvc2VkIHRvIHRoZVxuICAgdXNlci4gVGhlaXIgZGVmaW5pdGlvbnMgbWF5IGNoYW5nZSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGVcbiAgIGludGVycHJldGVyLCBidXQgdGhleSBhcmUgbWVudGlvbmVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy5cblxuICAgQ29kZSBvYmplY3RzXG4gICAgICBDb2RlIG9iamVjdHMgcmVwcmVzZW50ICpieXRlLWNvbXBpbGVkKiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlLFxuICAgICAgb3IgKmJ5dGVjb2RlKi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvZGUgb2JqZWN0IGFuZCBhXG4gICAgICBmdW5jdGlvbiBvYmplY3QgaXMgdGhhdCB0aGUgZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGFuIGV4cGxpY2l0XG4gICAgICByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uXCdzIGdsb2JhbHMgKHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzXG4gICAgICBkZWZpbmVkKSwgd2hpbGUgYSBjb2RlIG9iamVjdCBjb250YWlucyBubyBjb250ZXh0OyBhbHNvIHRoZVxuICAgICAgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgZnVuY3Rpb24gb2JqZWN0LCBub3RcbiAgICAgIGluIHRoZSBjb2RlIG9iamVjdCAoYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB2YWx1ZXMgY2FsY3VsYXRlZCBhdFxuICAgICAgcnVuLXRpbWUpLiAgVW5saWtlIGZ1bmN0aW9uIG9iamVjdHMsIGNvZGUgb2JqZWN0cyBhcmUgaW1tdXRhYmxlXG4gICAgICBhbmQgY29udGFpbiBubyByZWZlcmVuY2VzIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0byBtdXRhYmxlXG4gICAgICBvYmplY3RzLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYGNvX25hbWVgYCBnaXZlcyB0aGUgZnVuY3Rpb25cbiAgICAgIG5hbWU7IGBgY29fYXJnY291bnRgYCBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzXG4gICAgICAoaW5jbHVkaW5nIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzKTsgYGBjb19ubG9jYWxzYGAgaXMgdGhlXG4gICAgICBudW1iZXIgb2YgbG9jYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIChpbmNsdWRpbmdcbiAgICAgIGFyZ3VtZW50cyk7IGBgY29fdmFybmFtZXNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mXG4gICAgICB0aGUgbG9jYWwgdmFyaWFibGVzIChzdGFydGluZyB3aXRoIHRoZSBhcmd1bWVudCBuYW1lcyk7XG4gICAgICBgYGNvX2NlbGx2YXJzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBsb2NhbFxuICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgbmVzdGVkIGZ1bmN0aW9ucztcbiAgICAgIGBgY29fZnJlZXZhcnNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGZyZWVcbiAgICAgIHZhcmlhYmxlczsgYGBjb19jb2RlYGAgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW5jZSBvZlxuICAgICAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zOyBgYGNvX2NvbnN0c2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGVcbiAgICAgIGxpdGVyYWxzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlOyBgYGNvX25hbWVzYGAgaXMgYSB0dXBsZVxuICAgICAgY29udGFpbmluZyB0aGUgbmFtZXMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7IGBgY29fZmlsZW5hbWVgYCBpc1xuICAgICAgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhlIGNvZGUgd2FzIGNvbXBpbGVkO1xuICAgICAgYGBjb19maXJzdGxpbmVub2BgIGlzIHRoZSBmaXJzdCBsaW5lIG51bWJlciBvZiB0aGUgZnVuY3Rpb247XG4gICAgICBgYGNvX2xub3RhYmBgIGlzIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBtYXBwaW5nIGZyb20gYnl0ZWNvZGVcbiAgICAgIG9mZnNldHMgdG8gbGluZSBudW1iZXJzIChmb3IgZGV0YWlscyBzZWUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZVxuICAgICAgaW50ZXJwcmV0ZXIpOyBgYGNvX3N0YWNrc2l6ZWBgIGlzIHRoZSByZXF1aXJlZCBzdGFjayBzaXplXG4gICAgICAoaW5jbHVkaW5nIGxvY2FsIHZhcmlhYmxlcyk7IGBgY29fZmxhZ3NgYCBpcyBhbiBpbnRlZ2VyIGVuY29kaW5nXG4gICAgICBhIG51bWJlciBvZiBmbGFncyBmb3IgdGhlIGludGVycHJldGVyLlxuXG4gICAgICBUaGUgZm9sbG93aW5nIGZsYWcgYml0cyBhcmUgZGVmaW5lZCBmb3IgYGBjb19mbGFnc2BgOiBiaXRcbiAgICAgIGBgMHgwNGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYGAqYXJndW1lbnRzYGAgc3ludGF4XG4gICAgICB0byBhY2NlcHQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50czsgYml0XG4gICAgICBgYDB4MDhgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGBgKiprZXl3b3Jkc2BgIHN5bnRheFxuICAgICAgdG8gYWNjZXB0IGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50czsgYml0IGBgMHgyMGBgIGlzIHNldCBpZlxuICAgICAgdGhlIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yLlxuXG4gICAgICBGdXR1cmUgZmVhdHVyZSBkZWNsYXJhdGlvbnMgKGBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydFxuICAgICAgZGl2aXNpb25gYCkgYWxzbyB1c2UgYml0cyBpbiBgYGNvX2ZsYWdzYGAgdG8gaW5kaWNhdGUgd2hldGhlciBhXG4gICAgICBjb2RlIG9iamVjdCB3YXMgY29tcGlsZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkOiBiaXRcbiAgICAgIGBgMHgyMDAwYGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB3YXMgY29tcGlsZWQgd2l0aCBmdXR1cmVcbiAgICAgIGRpdmlzaW9uIGVuYWJsZWQ7IGJpdHMgYGAweDEwYGAgYW5kIGBgMHgxMDAwYGAgd2VyZSB1c2VkIGluXG4gICAgICBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbi5cblxuICAgICAgT3RoZXIgYml0cyBpbiBgYGNvX2ZsYWdzYGAgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UuXG5cbiAgICAgIElmIGEgY29kZSBvYmplY3QgcmVwcmVzZW50cyBhIGZ1bmN0aW9uLCB0aGUgZmlyc3QgaXRlbSBpblxuICAgICAgYGBjb19jb25zdHNgYCBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgb2YgdGhlIGZ1bmN0aW9uLCBvclxuICAgICAgYGBOb25lYGAgaWYgdW5kZWZpbmVkLlxuXG4gICBGcmFtZSBvYmplY3RzXG4gICAgICBGcmFtZSBvYmplY3RzIHJlcHJlc2VudCBleGVjdXRpb24gZnJhbWVzLiAgVGhleSBtYXkgb2NjdXIgaW5cbiAgICAgIHRyYWNlYmFjayBvYmplY3RzIChzZWUgYmVsb3cpLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYGZfYmFja2BgIGlzIHRvIHRoZSBwcmV2aW91c1xuICAgICAgc3RhY2sgZnJhbWUgKHRvd2FyZHMgdGhlIGNhbGxlciksIG9yIGBgTm9uZWBgIGlmIHRoaXMgaXMgdGhlXG4gICAgICBib3R0b20gc3RhY2sgZnJhbWU7IGBgZl9jb2RlYGAgaXMgdGhlIGNvZGUgb2JqZWN0IGJlaW5nIGV4ZWN1dGVkXG4gICAgICBpbiB0aGlzIGZyYW1lOyBgYGZfbG9jYWxzYGAgaXMgdGhlIGRpY3Rpb25hcnkgdXNlZCB0byBsb29rIHVwXG4gICAgICBsb2NhbCB2YXJpYWJsZXM7IGBgZl9nbG9iYWxzYGAgaXMgdXNlZCBmb3IgZ2xvYmFsIHZhcmlhYmxlcztcbiAgICAgIGBgZl9idWlsdGluc2BgIGlzIHVzZWQgZm9yIGJ1aWx0LWluIChpbnRyaW5zaWMpIG5hbWVzO1xuICAgICAgYGBmX2xhc3RpYGAgZ2l2ZXMgdGhlIHByZWNpc2UgaW5zdHJ1Y3Rpb24gKHRoaXMgaXMgYW4gaW5kZXggaW50b1xuICAgICAgdGhlIGJ5dGVjb2RlIHN0cmluZyBvZiB0aGUgY29kZSBvYmplY3QpLlxuXG4gICAgICBTcGVjaWFsIHdyaXRhYmxlIGF0dHJpYnV0ZXM6IGBgZl90cmFjZWBgLCBpZiBub3QgYGBOb25lYGAsIGlzIGFcbiAgICAgIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgY29kZSBsaW5lICh0aGlzIGlzXG4gICAgICB1c2VkIGJ5IHRoZSBkZWJ1Z2dlcik7IGBgZl9saW5lbm9gYCBpcyB0aGUgY3VycmVudCBsaW5lIG51bWJlclxuICAgICAgb2YgdGhlIGZyYW1lIC0tLSB3cml0aW5nIHRvIHRoaXMgZnJvbSB3aXRoaW4gYSB0cmFjZSBmdW5jdGlvblxuICAgICAganVtcHMgdG8gdGhlIGdpdmVuIGxpbmUgKG9ubHkgZm9yIHRoZSBib3R0b20tbW9zdCBmcmFtZSkuICBBXG4gICAgICBkZWJ1Z2dlciBjYW4gaW1wbGVtZW50IGEgSnVtcCBjb21tYW5kIChha2EgU2V0IE5leHQgU3RhdGVtZW50KVxuICAgICAgYnkgd3JpdGluZyB0byBmX2xpbmVuby5cblxuICAgVHJhY2ViYWNrIG9iamVjdHNcbiAgICAgIFRyYWNlYmFjayBvYmplY3RzIHJlcHJlc2VudCBhIHN0YWNrIHRyYWNlIG9mIGFuIGV4Y2VwdGlvbi4gIEFcbiAgICAgIHRyYWNlYmFjayBvYmplY3QgaXMgY3JlYXRlZCB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuICBXaGVuIHRoZVxuICAgICAgc2VhcmNoIGZvciBhbiBleGNlcHRpb24gaGFuZGxlciB1bndpbmRzIHRoZSBleGVjdXRpb24gc3RhY2ssIGF0XG4gICAgICBlYWNoIHVud291bmQgbGV2ZWwgYSB0cmFjZWJhY2sgb2JqZWN0IGlzIGluc2VydGVkIGluIGZyb250IG9mXG4gICAgICB0aGUgY3VycmVudCB0cmFjZWJhY2suICBXaGVuIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGVudGVyZWQsXG4gICAgICB0aGUgc3RhY2sgdHJhY2UgaXMgbWFkZSBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0uIChTZWUgc2VjdGlvblxuICAgICAgKlRoZSB0cnkgc3RhdGVtZW50Ki4pIEl0IGlzIGFjY2Vzc2libGUgYXMgdGhlIHRoaXJkIGl0ZW0gb2YgdGhlXG4gICAgICB0dXBsZSByZXR1cm5lZCBieSBgYHN5cy5leGNfaW5mbygpYGAuIFdoZW4gdGhlIHByb2dyYW0gY29udGFpbnNcbiAgICAgIG5vIHN1aXRhYmxlIGhhbmRsZXIsIHRoZSBzdGFjayB0cmFjZSBpcyB3cml0dGVuIChuaWNlbHlcbiAgICAgIGZvcm1hdHRlZCkgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbTsgaWYgdGhlIGludGVycHJldGVyIGlzXG4gICAgICBpbnRlcmFjdGl2ZSwgaXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgdXNlciBhc1xuICAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGB0Yl9uZXh0YGAgaXMgdGhlIG5leHQgbGV2ZWwgaW5cbiAgICAgIHRoZSBzdGFjayB0cmFjZSAodG93YXJkcyB0aGUgZnJhbWUgd2hlcmUgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQpLCBvciBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBuZXh0IGxldmVsOyBgYHRiX2ZyYW1lYGBcbiAgICAgIHBvaW50cyB0byB0aGUgZXhlY3V0aW9uIGZyYW1lIG9mIHRoZSBjdXJyZW50IGxldmVsO1xuICAgICAgYGB0Yl9saW5lbm9gYCBnaXZlcyB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQ7IGBgdGJfbGFzdGlgYCBpbmRpY2F0ZXMgdGhlIHByZWNpc2UgaW5zdHJ1Y3Rpb24uICBUaGVcbiAgICAgIGxpbmUgbnVtYmVyIGFuZCBsYXN0IGluc3RydWN0aW9uIGluIHRoZSB0cmFjZWJhY2sgbWF5IGRpZmZlclxuICAgICAgZnJvbSB0aGUgbGluZSBudW1iZXIgb2YgaXRzIGZyYW1lIG9iamVjdCBpZiB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZCBpbiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggbm8gbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZVxuICAgICAgb3Igd2l0aCBhIGZpbmFsbHkgY2xhdXNlLlxuXG4gICBTbGljZSBvYmplY3RzXG4gICAgICBTbGljZSBvYmplY3RzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBzbGljZXMgZm9yIGBgX19nZXRpdGVtX18oKWBgXG4gICAgICBtZXRob2RzLiAgVGhleSBhcmUgYWxzbyBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pbiBgYHNsaWNlKClgYFxuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgc3RhcnRgYCBpcyB0aGUgbG93ZXIgYm91bmQ7XG4gICAgICBgYHN0b3BgYCBpcyB0aGUgdXBwZXIgYm91bmQ7IGBgc3RlcGBgIGlzIHRoZSBzdGVwIHZhbHVlOyBlYWNoIGlzXG4gICAgICBgYE5vbmVgYCBpZiBvbWl0dGVkLiAgVGhlc2UgYXR0cmlidXRlcyBjYW4gaGF2ZSBhbnkgdHlwZS5cblxuICAgICAgU2xpY2Ugb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6XG5cbiAgICAgIHNsaWNlLmluZGljZXMoc2VsZiwgbGVuZ3RoKVxuXG4gICAgICAgICBUaGlzIG1ldGhvZCB0YWtlcyBhIHNpbmdsZSBpbnRlZ2VyIGFyZ3VtZW50ICpsZW5ndGgqIGFuZFxuICAgICAgICAgY29tcHV0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNsaWNlIHRoYXQgdGhlIHNsaWNlIG9iamVjdFxuICAgICAgICAgd291bGQgZGVzY3JpYmUgaWYgYXBwbGllZCB0byBhIHNlcXVlbmNlIG9mICpsZW5ndGgqIGl0ZW1zLlxuICAgICAgICAgSXQgcmV0dXJucyBhIHR1cGxlIG9mIHRocmVlIGludGVnZXJzOyByZXNwZWN0aXZlbHkgdGhlc2UgYXJlXG4gICAgICAgICB0aGUgKnN0YXJ0KiBhbmQgKnN0b3AqIGluZGljZXMgYW5kIHRoZSAqc3RlcCogb3Igc3RyaWRlXG4gICAgICAgICBsZW5ndGggb2YgdGhlIHNsaWNlLiBNaXNzaW5nIG9yIG91dC1vZi1ib3VuZHMgaW5kaWNlcyBhcmVcbiAgICAgICAgIGhhbmRsZWQgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHJlZ3VsYXIgc2xpY2VzLlxuXG4gICBTdGF0aWMgbWV0aG9kIG9iamVjdHNcbiAgICAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBwcm92aWRlIGEgd2F5IG9mIGRlZmVhdGluZyB0aGVcbiAgICAgIHRyYW5zZm9ybWF0aW9uIG9mIGZ1bmN0aW9uIG9iamVjdHMgdG8gbWV0aG9kIG9iamVjdHMgZGVzY3JpYmVkXG4gICAgICBhYm92ZS4gQSBzdGF0aWMgbWV0aG9kIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGFueSBvdGhlclxuICAgICAgb2JqZWN0LCB1c3VhbGx5IGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QuIFdoZW4gYSBzdGF0aWNcbiAgICAgIG1ldGhvZCBvYmplY3QgaXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBvciBhIGNsYXNzIGluc3RhbmNlLCB0aGVcbiAgICAgIG9iamVjdCBhY3R1YWxseSByZXR1cm5lZCBpcyB0aGUgd3JhcHBlZCBvYmplY3QsIHdoaWNoIGlzIG5vdFxuICAgICAgc3ViamVjdCB0byBhbnkgZnVydGhlciB0cmFuc2Zvcm1hdGlvbi4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZVxuICAgICAgbm90IHRoZW1zZWx2ZXMgY2FsbGFibGUsIGFsdGhvdWdoIHRoZSBvYmplY3RzIHRoZXkgd3JhcCB1c3VhbGx5XG4gICAgICBhcmUuIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgIGBgc3RhdGljbWV0aG9kKClgYCBjb25zdHJ1Y3Rvci5cblxuICAgQ2xhc3MgbWV0aG9kIG9iamVjdHNcbiAgICAgIEEgY2xhc3MgbWV0aG9kIG9iamVjdCwgbGlrZSBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpcyBhIHdyYXBwZXJcbiAgICAgIGFyb3VuZCBhbm90aGVyIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgd2F5IGluIHdoaWNoIHRoYXQgb2JqZWN0XG4gICAgICBpcyByZXRyaWV2ZWQgZnJvbSBjbGFzc2VzIGFuZCBjbGFzcyBpbnN0YW5jZXMuIFRoZSBiZWhhdmlvdXIgb2ZcbiAgICAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIHVwb24gc3VjaCByZXRyaWV2YWwgaXMgZGVzY3JpYmVkIGFib3ZlLFxuICAgICAgdW5kZXIgIlVzZXItZGVmaW5lZCBtZXRob2RzIi4gQ2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWRcbiAgICAgIGJ5IHRoZSBidWlsdC1pbiBgYGNsYXNzbWV0aG9kKClgYCBjb25zdHJ1Y3Rvci5cbicsCisgJ3R5cGVzJzogJ1xuVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5XG4qKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSB0eXBlcyB0aGF0IGFyZSBidWlsdCBpbnRvIFB5dGhvbi4gIEV4dGVuc2lvblxubW9kdWxlcyAod3JpdHRlbiBpbiBDLCBKYXZhLCBvciBvdGhlciBsYW5ndWFnZXMsIGRlcGVuZGluZyBvbiB0aGVcbmltcGxlbWVudGF0aW9uKSBjYW4gZGVmaW5lIGFkZGl0aW9uYWwgdHlwZXMuICBGdXR1cmUgdmVyc2lvbnMgb2ZcblB5dGhvbiBtYXkgYWRkIHR5cGVzIHRvIHRoZSB0eXBlIGhpZXJhcmNoeSAoZS5nLiwgcmF0aW9uYWwgbnVtYmVycyxcbmVmZmljaWVudGx5IHN0b3JlZCBhcnJheXMgb2YgaW50ZWdlcnMsIGV0Yy4pLCBhbHRob3VnaCBzdWNoIGFkZGl0aW9uc1xud2lsbCBvZnRlbiBiZSBwcm92aWRlZCB2aWEgdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW5zdGVhZC5cblxuU29tZSBvZiB0aGUgdHlwZSBkZXNjcmlwdGlvbnMgYmVsb3cgY29udGFpbiBhIHBhcmFncmFwaCBsaXN0aW5nXG5cJ3NwZWNpYWwgYXR0cmlidXRlcy5cJyAgVGhlc2UgYXJlIGF0dHJpYnV0ZXMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGVcbmltcGxlbWVudGF0aW9uIGFuZCBhcmUgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZS4gIFRoZWlyIGRlZmluaXRpb25cbm1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuTm9uZVxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lIGBgTm9uZWBgLlxuICAgSXQgaXMgdXNlZCB0byBzaWduaWZ5IHRoZSBhYnNlbmNlIG9mIGEgdmFsdWUgaW4gbWFueSBzaXR1YXRpb25zLFxuICAgZS5nLiwgaXQgaXMgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnMgdGhhdCBkb25cJ3QgZXhwbGljaXRseSByZXR1cm5cbiAgIGFueXRoaW5nLiBJdHMgdHJ1dGggdmFsdWUgaXMgZmFsc2UuXG5cbk5vdEltcGxlbWVudGVkXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGJ1aWx0LWluIG5hbWVcbiAgIGBgTm90SW1wbGVtZW50ZWRgYC4gTnVtZXJpYyBtZXRob2RzIGFuZCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBtYXlcbiAgIHJldHVybiB0aGlzIHZhbHVlIGlmIHRoZXkgZG8gbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciB0aGVcbiAgIG9wZXJhbmRzIHByb3ZpZGVkLiAgKFRoZSBpbnRlcnByZXRlciB3aWxsIHRoZW4gdHJ5IHRoZSByZWZsZWN0ZWRcbiAgIG9wZXJhdGlvbiwgb3Igc29tZSBvdGhlciBmYWxsYmFjaywgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRvci4pICBJdHNcbiAgIHRydXRoIHZhbHVlIGlzIHRydWUuXG5cbkVsbGlwc2lzXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGxpdGVyYWwgYGAuLi5gYCBvciB0aGVcbiAgIGJ1aWx0LWluIG5hbWUgYGBFbGxpcHNpc2BgLiAgSXRzIHRydXRoIHZhbHVlIGlzIHRydWUuXG5cbmBgbnVtYmVycy5OdW1iZXJgYFxuICAgVGhlc2UgYXJlIGNyZWF0ZWQgYnkgbnVtZXJpYyBsaXRlcmFscyBhbmQgcmV0dXJuZWQgYXMgcmVzdWx0cyBieVxuICAgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYW5kIGFyaXRobWV0aWMgYnVpbHQtaW4gZnVuY3Rpb25zLiAgTnVtZXJpY1xuICAgb2JqZWN0cyBhcmUgaW1tdXRhYmxlOyBvbmNlIGNyZWF0ZWQgdGhlaXIgdmFsdWUgbmV2ZXIgY2hhbmdlcy5cbiAgIFB5dGhvbiBudW1iZXJzIGFyZSBvZiBjb3Vyc2Ugc3Ryb25nbHkgcmVsYXRlZCB0byBtYXRoZW1hdGljYWxcbiAgIG51bWJlcnMsIGJ1dCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBvZiBudW1lcmljYWwgcmVwcmVzZW50YXRpb25cbiAgIGluIGNvbXB1dGVycy5cblxuICAgUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYW5kXG4gICBjb21wbGV4IG51bWJlcnM6XG5cbiAgIGBgbnVtYmVycy5JbnRlZ3JhbGBgXG4gICAgICBUaGVzZSByZXByZXNlbnQgZWxlbWVudHMgZnJvbSB0aGUgbWF0aGVtYXRpY2FsIHNldCBvZiBpbnRlZ2Vyc1xuICAgICAgKHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSkuXG5cbiAgICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW50ZWdlcnM6XG5cbiAgICAgIEludGVnZXJzIChgYGludGBgKVxuXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgbnVtYmVycyBpbiBhbiB1bmxpbWl0ZWQgcmFuZ2UsIHN1YmplY3QgdG9cbiAgICAgICAgIGF2YWlsYWJsZSAodmlydHVhbCkgbWVtb3J5IG9ubHkuICBGb3IgdGhlIHB1cnBvc2Ugb2Ygc2hpZnRcbiAgICAgICAgIGFuZCBtYXNrIG9wZXJhdGlvbnMsIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uIGlzIGFzc3VtZWQsIGFuZFxuICAgICAgICAgbmVnYXRpdmUgbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB2YXJpYW50IG9mIDJcJ3NcbiAgICAgICAgIGNvbXBsZW1lbnQgd2hpY2ggZ2l2ZXMgdGhlIGlsbHVzaW9uIG9mIGFuIGluZmluaXRlIHN0cmluZyBvZlxuICAgICAgICAgc2lnbiBiaXRzIGV4dGVuZGluZyB0byB0aGUgbGVmdC5cblxuICAgICAgQm9vbGVhbnMgKGBgYm9vbGBgKVxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IHRoZSB0cnV0aCB2YWx1ZXMgRmFsc2UgYW5kIFRydWUuICBUaGUgdHdvXG4gICAgICAgICBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdmFsdWVzIEZhbHNlIGFuZCBUcnVlIGFyZSB0aGUgb25seVxuICAgICAgICAgQm9vbGVhbiBvYmplY3RzLiBUaGUgQm9vbGVhbiB0eXBlIGlzIGEgc3VidHlwZSBvZiB0aGUgaW50ZWdlclxuICAgICAgICAgdHlwZSwgYW5kIEJvb2xlYW4gdmFsdWVzIGJlaGF2ZSBsaWtlIHRoZSB2YWx1ZXMgMCBhbmQgMSxcbiAgICAgICAgIHJlc3BlY3RpdmVseSwgaW4gYWxtb3N0IGFsbCBjb250ZXh0cywgdGhlIGV4Y2VwdGlvbiBiZWluZ1xuICAgICAgICAgdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZywgdGhlIHN0cmluZ3MgYGAiRmFsc2UiYGAgb3JcbiAgICAgICAgIGBgIlRydWUiYGAgYXJlIHJldHVybmVkLCByZXNwZWN0aXZlbHkuXG5cbiAgICAgIFRoZSBydWxlcyBmb3IgaW50ZWdlciByZXByZXNlbnRhdGlvbiBhcmUgaW50ZW5kZWQgdG8gZ2l2ZSB0aGVcbiAgICAgIG1vc3QgbWVhbmluZ2Z1bCBpbnRlcnByZXRhdGlvbiBvZiBzaGlmdCBhbmQgbWFzayBvcGVyYXRpb25zXG4gICAgICBpbnZvbHZpbmcgbmVnYXRpdmUgaW50ZWdlcnMuXG5cbiAgIGBgbnVtYmVycy5SZWFsYGAgKGBgZmxvYXRgYClcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBtYWNoaW5lLWxldmVsIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnRcbiAgICAgIG51bWJlcnMuIFlvdSBhcmUgYXQgdGhlIG1lcmN5IG9mIHRoZSB1bmRlcmx5aW5nIG1hY2hpbmVcbiAgICAgIGFyY2hpdGVjdHVyZSAoYW5kIEMgb3IgSmF2YSBpbXBsZW1lbnRhdGlvbikgZm9yIHRoZSBhY2NlcHRlZFxuICAgICAgcmFuZ2UgYW5kIGhhbmRsaW5nIG9mIG92ZXJmbG93LiBQeXRob24gZG9lcyBub3Qgc3VwcG9ydCBzaW5nbGUtXG4gICAgICBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyczsgdGhlIHNhdmluZ3MgaW4gcHJvY2Vzc29yIGFuZFxuICAgICAgbWVtb3J5IHVzYWdlIHRoYXQgYXJlIHVzdWFsbHkgdGhlIHJlYXNvbiBmb3IgdXNpbmcgdGhlc2UgaXNcbiAgICAgIGR3YXJmZWQgYnkgdGhlIG92ZXJoZWFkIG9mIHVzaW5nIG9iamVjdHMgaW4gUHl0aG9uLCBzbyB0aGVyZSBpc1xuICAgICAgbm8gcmVhc29uIHRvIGNvbXBsaWNhdGUgdGhlIGxhbmd1YWdlIHdpdGggdHdvIGtpbmRzIG9mIGZsb2F0aW5nXG4gICAgICBwb2ludCBudW1iZXJzLlxuXG4gICBgYG51bWJlcnMuQ29tcGxleGBgIChgYGNvbXBsZXhgYClcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBjb21wbGV4IG51bWJlcnMgYXMgYSBwYWlyIG9mIG1hY2hpbmUtbGV2ZWxcbiAgICAgIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gIFRoZSBzYW1lIGNhdmVhdHMgYXBwbHlcbiAgICAgIGFzIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGFcbiAgICAgIGNvbXBsZXggbnVtYmVyIGBgemBgIGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgcmVhZC1vbmx5XG4gICAgICBhdHRyaWJ1dGVzIGBgei5yZWFsYGAgYW5kIGBgei5pbWFnYGAuXG5cblNlcXVlbmNlc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBvcmRlcmVkIHNldHMgaW5kZXhlZCBieSBub24tbmVnYXRpdmVcbiAgIG51bWJlcnMuIFRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGAgcmV0dXJucyB0aGUgbnVtYmVyIG9mXG4gICBpdGVtcyBvZiBhIHNlcXVlbmNlLiBXaGVuIHRoZSBsZW5ndGggb2YgYSBzZXF1ZW5jZSBpcyAqbiosIHRoZVxuICAgaW5kZXggc2V0IGNvbnRhaW5zIHRoZSBudW1iZXJzIDAsIDEsIC4uLiwgKm4qLTEuICBJdGVtICppKiBvZlxuICAgc2VxdWVuY2UgKmEqIGlzIHNlbGVjdGVkIGJ5IGBgYVtpXWBgLlxuXG4gICBTZXF1ZW5jZXMgYWxzbyBzdXBwb3J0IHNsaWNpbmc6IGBgYVtpOmpdYGAgc2VsZWN0cyBhbGwgaXRlbXMgd2l0aFxuICAgaW5kZXggKmsqIHN1Y2ggdGhhdCAqaSogYGA8PWBgICprKiBgYDxgYCAqaiouICBXaGVuIHVzZWQgYXMgYW5cbiAgIGV4cHJlc3Npb24sIGEgc2xpY2UgaXMgYSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlLiAgVGhpcyBpbXBsaWVzXG4gICB0aGF0IHRoZSBpbmRleCBzZXQgaXMgcmVudW1iZXJlZCBzbyB0aGF0IGl0IHN0YXJ0cyBhdCAwLlxuXG4gICBTb21lIHNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgImV4dGVuZGVkIHNsaWNpbmciIHdpdGggYSB0aGlyZCAic3RlcCJcbiAgIHBhcmFtZXRlcjogYGBhW2k6ajprXWBgIHNlbGVjdHMgYWxsIGl0ZW1zIG9mICphKiB3aXRoIGluZGV4ICp4KlxuICAgd2hlcmUgYGB4ID0gaSArIG4qa2BgLCAqbiogYGA+PWBgIGBgMGBgIGFuZCAqaSogYGA8PWBgICp4KiBgYDxgYFxuICAgKmoqLlxuXG4gICBTZXF1ZW5jZXMgYXJlIGRpc3Rpbmd1aXNoZWQgYWNjb3JkaW5nIHRvIHRoZWlyIG11dGFiaWxpdHk6XG5cbiAgIEltbXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIEFuIG9iamVjdCBvZiBhbiBpbW11dGFibGUgc2VxdWVuY2UgdHlwZSBjYW5ub3QgY2hhbmdlIG9uY2UgaXQgaXNcbiAgICAgIGNyZWF0ZWQuICAoSWYgdGhlIG9iamVjdCBjb250YWlucyByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMsXG4gICAgICB0aGVzZSBvdGhlciBvYmplY3RzIG1heSBiZSBtdXRhYmxlIGFuZCBtYXkgYmUgY2hhbmdlZDsgaG93ZXZlcixcbiAgICAgIHRoZSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbiBpbW11dGFibGVcbiAgICAgIG9iamVjdCBjYW5ub3QgY2hhbmdlLilcblxuICAgICAgVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlczpcblxuICAgICAgU3RyaW5nc1xuICAgICAgICAgQSBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhhdCByZXByZXNlbnQgVW5pY29kZVxuICAgICAgICAgY29kZXBvaW50cy4gQWxsIHRoZSBjb2RlcG9pbnRzIGluIHJhbmdlIGBgVSswMDAwIC0gVSsxMEZGRkZgYFxuICAgICAgICAgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuXCd0IGhhdmUgYVxuICAgICAgICAgYGBjaHJgYCB0eXBlLCBhbmQgZXZlcnkgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaXNcbiAgICAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIG9iamVjdCB3aXRoIGxlbmd0aCBgYDFgYC4gIFRoZSBidWlsdC1cbiAgICAgICAgIGluIGZ1bmN0aW9uIGBgb3JkKClgYCBjb252ZXJ0cyBhIGNoYXJhY3RlciB0byBpdHMgY29kZXBvaW50XG4gICAgICAgICAoYXMgYW4gaW50ZWdlcik7IGBgY2hyKClgYCBjb252ZXJ0cyBhbiBpbnRlZ2VyIGluIHJhbmdlIGBgMCAtXG4gICAgICAgICAxMEZGRkZgYCB0byB0aGUgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIuIGBgc3RyLmVuY29kZSgpYGAgY2FuXG4gICAgICAgICBiZSB1c2VkIHRvIGNvbnZlcnQgYSBgYHN0cmBgIHRvIGBgYnl0ZXNgYCB1c2luZyB0aGUgZ2l2ZW5cbiAgICAgICAgIGVuY29kaW5nLCBhbmQgYGBieXRlcy5kZWNvZGUoKWBgIGNhbiBiZSB1c2VkIHRvIGFjaGlldmUgdGhlXG4gICAgICAgICBvcHBvc2l0ZS5cblxuICAgICAgVHVwbGVzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSB0dXBsZSBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiBUdXBsZXMgb2ZcbiAgICAgICAgIHR3byBvciBtb3JlIGl0ZW1zIGFyZSBmb3JtZWQgYnkgY29tbWEtc2VwYXJhdGVkIGxpc3RzIG9mXG4gICAgICAgICBleHByZXNzaW9ucy4gIEEgdHVwbGUgb2Ygb25lIGl0ZW0gKGEgXCdzaW5nbGV0b25cJykgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYWZmaXhpbmcgYSBjb21tYSB0byBhbiBleHByZXNzaW9uIChhbiBleHByZXNzaW9uIGJ5XG4gICAgICAgICBpdHNlbGYgZG9lcyBub3QgY3JlYXRlIGEgdHVwbGUsIHNpbmNlIHBhcmVudGhlc2VzIG11c3QgYmVcbiAgICAgICAgIHVzYWJsZSBmb3IgZ3JvdXBpbmcgb2YgZXhwcmVzc2lvbnMpLiAgQW4gZW1wdHkgdHVwbGUgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYW4gZW1wdHkgcGFpciBvZiBwYXJlbnRoZXNlcy5cblxuICAgICAgQnl0ZXNcbiAgICAgICAgIEEgYnl0ZXMgb2JqZWN0IGlzIGFuIGltbXV0YWJsZSBhcnJheS4gIFRoZSBpdGVtcyBhcmUgOC1iaXRcbiAgICAgICAgIGJ5dGVzLCByZXByZXNlbnRlZCBieSBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgMjU2LlxuICAgICAgICAgQnl0ZXMgbGl0ZXJhbHMgKGxpa2UgYGBiXCdhYmNcJ2BgKSBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICAgICAgICBgYGJ5dGVzKClgYCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYnl0ZXMgb2JqZWN0cy4gIEFsc28sXG4gICAgICAgICBieXRlcyBvYmplY3RzIGNhbiBiZSBkZWNvZGVkIHRvIHN0cmluZ3MgdmlhIHRoZSBgYGRlY29kZSgpYGBcbiAgICAgICAgIG1ldGhvZC5cblxuICAgTXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIE11dGFibGUgc2VxdWVuY2VzIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuICBUaGVcbiAgICAgIHN1YnNjcmlwdGlvbiBhbmQgc2xpY2luZyBub3RhdGlvbnMgY2FuIGJlIHVzZWQgYXMgdGhlIHRhcmdldCBvZlxuICAgICAgYXNzaWdubWVudCBhbmQgYGBkZWxgYCAoZGVsZXRlKSBzdGF0ZW1lbnRzLlxuXG4gICAgICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczpcblxuICAgICAgTGlzdHNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIGxpc3QgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gIExpc3RzIGFyZVxuICAgICAgICAgZm9ybWVkIGJ5IHBsYWNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucyBpblxuICAgICAgICAgc3F1YXJlIGJyYWNrZXRzLiAoTm90ZSB0aGF0IHRoZXJlIGFyZSBubyBzcGVjaWFsIGNhc2VzIG5lZWRlZFxuICAgICAgICAgdG8gZm9ybSBsaXN0cyBvZiBsZW5ndGggMCBvciAxLilcblxuICAgICAgQnl0ZSBBcnJheXNcbiAgICAgICAgIEEgYnl0ZWFycmF5IG9iamVjdCBpcyBhIG11dGFibGUgYXJyYXkuIFRoZXkgYXJlIGNyZWF0ZWQgYnlcbiAgICAgICAgIHRoZSBidWlsdC1pbiBgYGJ5dGVhcnJheSgpYGAgY29uc3RydWN0b3IuICBBc2lkZSBmcm9tIGJlaW5nXG4gICAgICAgICBtdXRhYmxlIChhbmQgaGVuY2UgdW5oYXNoYWJsZSksIGJ5dGUgYXJyYXlzIG90aGVyd2lzZSBwcm92aWRlXG4gICAgICAgICB0aGUgc2FtZSBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWxpdHkgYXMgaW1tdXRhYmxlIGJ5dGVzXG4gICAgICAgICBvYmplY3RzLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZSBgYGFycmF5YGAgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBleGFtcGxlIG9mXG4gICAgICBhIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgYXMgZG9lcyB0aGUgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZS5cblxuU2V0IHR5cGVzXG4gICBUaGVzZSByZXByZXNlbnQgdW5vcmRlcmVkLCBmaW5pdGUgc2V0cyBvZiB1bmlxdWUsIGltbXV0YWJsZVxuICAgb2JqZWN0cy4gQXMgc3VjaCwgdGhleSBjYW5ub3QgYmUgaW5kZXhlZCBieSBhbnkgc3Vic2NyaXB0LiBIb3dldmVyLFxuICAgdGhleSBjYW4gYmUgaXRlcmF0ZWQgb3ZlciwgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGBcbiAgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIHNldC4gQ29tbW9uIHVzZXMgZm9yIHNldHMgYXJlIGZhc3RcbiAgIG1lbWJlcnNoaXAgdGVzdGluZywgcmVtb3ZpbmcgZHVwbGljYXRlcyBmcm9tIGEgc2VxdWVuY2UsIGFuZFxuICAgY29tcHV0aW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zIHN1Y2ggYXMgaW50ZXJzZWN0aW9uLCB1bmlvbixcbiAgIGRpZmZlcmVuY2UsIGFuZCBzeW1tZXRyaWMgZGlmZmVyZW5jZS5cblxuICAgRm9yIHNldCBlbGVtZW50cywgdGhlIHNhbWUgaW1tdXRhYmlsaXR5IHJ1bGVzIGFwcGx5IGFzIGZvclxuICAgZGljdGlvbmFyeSBrZXlzLiBOb3RlIHRoYXQgbnVtZXJpYyB0eXBlcyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yXG4gICBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sIGBgMWBgIGFuZFxuICAgYGAxLjBgYCksIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIGNvbnRhaW5lZCBpbiBhIHNldC5cblxuICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIHNldCB0eXBlczpcblxuICAgU2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGEgbXV0YWJsZSBzZXQuIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICBgYHNldCgpYGAgY29uc3RydWN0b3IgYW5kIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIGJ5IHNldmVyYWxcbiAgICAgIG1ldGhvZHMsIHN1Y2ggYXMgYGBhZGQoKWBgLlxuXG4gICBGcm96ZW4gc2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGFuIGltbXV0YWJsZSBzZXQuICBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZVxuICAgICAgYnVpbHQtaW4gYGBmcm96ZW5zZXQoKWBgIGNvbnN0cnVjdG9yLiAgQXMgYSBmcm96ZW5zZXQgaXNcbiAgICAgIGltbXV0YWJsZSBhbmQgKmhhc2hhYmxlKiwgaXQgY2FuIGJlIHVzZWQgYWdhaW4gYXMgYW4gZWxlbWVudCBvZlxuICAgICAgYW5vdGhlciBzZXQsIG9yIGFzIGEgZGljdGlvbmFyeSBrZXkuXG5cbk1hcHBpbmdzXG4gICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IGFyYml0cmFyeSBpbmRleFxuICAgc2V0cy4gVGhlIHN1YnNjcmlwdCBub3RhdGlvbiBgYGFba11gYCBzZWxlY3RzIHRoZSBpdGVtIGluZGV4ZWQgYnlcbiAgIGBga2BgIGZyb20gdGhlIG1hcHBpbmcgYGBhYGA7IHRoaXMgY2FuIGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMgYW5kXG4gICBhcyB0aGUgdGFyZ2V0IG9mIGFzc2lnbm1lbnRzIG9yIGBgZGVsYGAgc3RhdGVtZW50cy4gVGhlIGJ1aWx0LWluXG4gICBmdW5jdGlvbiBgYGxlbigpYGAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgbWFwcGluZy5cblxuICAgVGhlcmUgaXMgY3VycmVudGx5IGEgc2luZ2xlIGludHJpbnNpYyBtYXBwaW5nIHR5cGU6XG5cbiAgIERpY3Rpb25hcmllc1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBuZWFybHlcbiAgICAgIGFyYml0cmFyeSB2YWx1ZXMuICBUaGUgb25seSB0eXBlcyBvZiB2YWx1ZXMgbm90IGFjY2VwdGFibGUgYXNcbiAgICAgIGtleXMgYXJlIHZhbHVlcyBjb250YWluaW5nIGxpc3RzIG9yIGRpY3Rpb25hcmllcyBvciBvdGhlclxuICAgICAgbXV0YWJsZSB0eXBlcyB0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbiAgICAgIGlkZW50aXR5LCB0aGUgcmVhc29uIGJlaW5nIHRoYXQgdGhlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZlxuICAgICAgZGljdGlvbmFyaWVzIHJlcXVpcmVzIGEga2V5XCdzIGhhc2ggdmFsdWUgdG8gcmVtYWluIGNvbnN0YW50LlxuICAgICAgTnVtZXJpYyB0eXBlcyB1c2VkIGZvciBrZXlzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpY1xuICAgICAgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgYGAxYGAgYW5kXG4gICAgICBgYDEuMGBgKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4IHRoZSBzYW1lXG4gICAgICBkaWN0aW9uYXJ5IGVudHJ5LlxuXG4gICAgICBEaWN0aW9uYXJpZXMgYXJlIG11dGFibGU7IHRoZXkgY2FuIGJlIGNyZWF0ZWQgYnkgdGhlIGBgey4uLn1gYFxuICAgICAgbm90YXRpb24gKHNlZSBzZWN0aW9uICpEaWN0aW9uYXJ5IGRpc3BsYXlzKikuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlcyBgYGRibS5uZGJtYGAgYW5kIGBgZGJtLmdudWBgIHByb3ZpZGVcbiAgICAgIGFkZGl0aW9uYWwgZXhhbXBsZXMgb2YgbWFwcGluZyB0eXBlcywgYXMgZG9lcyB0aGVcbiAgICAgIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUuXG5cbkNhbGxhYmxlIHR5cGVzXG4gICBUaGVzZSBhcmUgdGhlIHR5cGVzIHRvIHdoaWNoIHRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdGlvbiAoc2VlXG4gICBzZWN0aW9uICpDYWxscyopIGNhbiBiZSBhcHBsaWVkOlxuXG4gICBVc2VyLWRlZmluZWQgZnVuY3Rpb25zXG4gICAgICBBIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgaXMgY3JlYXRlZCBieSBhIGZ1bmN0aW9uXG4gICAgICBkZWZpbml0aW9uIChzZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqKS4gIEl0IHNob3VsZCBiZVxuICAgICAgY2FsbGVkIHdpdGggYW4gYXJndW1lbnQgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtc1xuICAgICAgYXMgdGhlIGZ1bmN0aW9uXCdzIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdC5cblxuICAgICAgU3BlY2lhbCBhdHRyaWJ1dGVzOlxuXG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBBdHRyaWJ1dGUgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT0rXG4gICAgICB8IGBgX19kb2NfX2BgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvbiAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0cmluZywgb3IgYGBOb25lYGAgaWYgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX25hbWVfX2BgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBuYW1lICAgICAgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX3F1YWxuYW1lX19gYCAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyAqcXVhbGlmaWVkIG5hbWUqIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmV3IGluIHZlcnNpb24gMy4zLiAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19tb2R1bGVfX2BgICAgICAgICAgICAgfCBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4sIG9yICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZGVmYXVsdHNfX2BgICAgICAgICAgIHwgQSB0dXBsZSBjb250YWluaW5nIGRlZmF1bHQgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50IHZhbHVlcyBmb3IgdGhvc2UgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudHMgdGhhdCBoYXZlIGRlZmF1bHRzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgYGBOb25lYGAgaWYgbm8gYXJndW1lbnRzICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhhdmUgYSBkZWZhdWx0IHZhbHVlICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fY29kZV9fYGAgICAgICAgICAgICAgIHwgVGhlIGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBjb21waWxlZCBmdW5jdGlvbiBib2R5LiAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZ2xvYmFsc19fYGAgICAgICAgICAgIHwgQSByZWZlcmVuY2UgdG8gdGhlIGRpY3Rpb25hcnkgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uXCdzICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ2xvYmFsIHZhcmlhYmxlcyAtLS0gdGhlIGdsb2JhbCB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlIGluICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQuIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2RpY3RfX2BgICAgICAgICAgICAgICB8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmJpdHJhcnkgZnVuY3Rpb24gYXR0cmlidXRlcy4gIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2Nsb3N1cmVfX2BgICAgICAgICAgICB8IGBgTm9uZWBgIG9yIGEgdHVwbGUgb2YgY2VsbHMgICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGF0IGNvbnRhaW4gYmluZGluZ3MgZm9yIHRoZSAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb25cJ3MgZnJlZSB2YXJpYWJsZXMuICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fYW5ub3RhdGlvbnNfX2BgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgYW5ub3RhdGlvbnMgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9mIHBhcmFtZXRlcnMuICBUaGUga2V5cyBvZiB0aGUgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkaWN0IGFyZSB0aGUgcGFyYW1ldGVyIG5hbWVzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgYGBcJ3JldHVyblwnYGAgZm9yIHRoZSByZXR1cm4gIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5ub3RhdGlvbiwgaWYgcHJvdmlkZWQuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19rd2RlZmF1bHRzX19gYCAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBkZWZhdWx0cyBmb3IgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG5cbiAgICAgIE1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgbGFiZWxsZWQgIldyaXRhYmxlIiBjaGVjayB0aGUgdHlwZSBvZiB0aGVcbiAgICAgIGFzc2lnbmVkIHZhbHVlLlxuXG4gICAgICBGdW5jdGlvbiBvYmplY3RzIGFsc28gc3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIGFyYml0cmFyeVxuICAgICAgYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhdHRhY2ggbWV0YWRhdGFcbiAgICAgIHRvIGZ1bmN0aW9ucy4gIFJlZ3VsYXIgYXR0cmlidXRlIGRvdC1ub3RhdGlvbiBpcyB1c2VkIHRvIGdldCBhbmRcbiAgICAgIHNldCBzdWNoIGF0dHJpYnV0ZXMuICpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seVxuICAgICAgc3VwcG9ydHMgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiBGdW5jdGlvblxuICAgICAgYXR0cmlidXRlcyBvbiBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGJlIHN1cHBvcnRlZCBpbiB0aGVcbiAgICAgIGZ1dHVyZS4qXG5cbiAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvblwncyBkZWZpbml0aW9uIGNhbiBiZVxuICAgICAgcmV0cmlldmVkIGZyb20gaXRzIGNvZGUgb2JqZWN0OyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVybmFsXG4gICAgICB0eXBlcyBiZWxvdy5cblxuICAgSW5zdGFuY2UgbWV0aG9kc1xuICAgICAgQW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBjb21iaW5lcyBhIGNsYXNzLCBhIGNsYXNzIGluc3RhbmNlIGFuZFxuICAgICAgYW55IGNhbGxhYmxlIG9iamVjdCAobm9ybWFsbHkgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24pLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYF9fc2VsZl9fYGAgaXMgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICBvYmplY3QsIGBgX19mdW5jX19gYCBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0OyBgYF9fZG9jX19gYCBpcyB0aGVcbiAgICAgIG1ldGhvZFwncyBkb2N1bWVudGF0aW9uIChzYW1lIGFzIGBgX19mdW5jX18uX19kb2NfX2BgKTtcbiAgICAgIGBgX19uYW1lX19gYCBpcyB0aGUgbWV0aG9kIG5hbWUgKHNhbWUgYXMgYGBfX2Z1bmNfXy5fX25hbWVfX2BgKTtcbiAgICAgIGBgX19tb2R1bGVfX2BgIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIG1ldGhvZCB3YXMgZGVmaW5lZFxuICAgICAgaW4sIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICAgICBNZXRob2RzIGFsc28gc3VwcG9ydCBhY2Nlc3NpbmcgKGJ1dCBub3Qgc2V0dGluZykgdGhlIGFyYml0cmFyeVxuICAgICAgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0cyBtYXkgYmUgY3JlYXRlZCB3aGVuIGdldHRpbmcgYW5cbiAgICAgIGF0dHJpYnV0ZSBvZiBhIGNsYXNzIChwZXJoYXBzIHZpYSBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzKSwgaWZcbiAgICAgIHRoYXQgYXR0cmlidXRlIGlzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBvciBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0LlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgdXNlci1cbiAgICAgIGRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGZyb20gYSBjbGFzcyB2aWEgb25lIG9mIGl0cyBpbnN0YW5jZXMsXG4gICAgICBpdHMgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgbWV0aG9kXG4gICAgICBvYmplY3QgaXMgc2FpZCB0byBiZSBib3VuZC4gIFRoZSBuZXcgbWV0aG9kXCdzIGBgX19mdW5jX19gYFxuICAgICAgYXR0cmlidXRlIGlzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFdoZW4gYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmdcbiAgICAgIGFub3RoZXIgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIHRoZSBiZWhhdmlvdXIgaXNcbiAgICAgIHRoZSBzYW1lIGFzIGZvciBhIGZ1bmN0aW9uIG9iamVjdCwgZXhjZXB0IHRoYXQgdGhlIGBgX19mdW5jX19gYFxuICAgICAgYXR0cmlidXRlIG9mIHRoZSBuZXcgaW5zdGFuY2UgaXMgbm90IHRoZSBvcmlnaW5hbCBtZXRob2Qgb2JqZWN0XG4gICAgICBidXQgaXRzIGBgX19mdW5jX19gYCBhdHRyaWJ1dGUuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIGl0cyBgYF9fc2VsZl9fYGBcbiAgICAgIGF0dHJpYnV0ZSBpcyB0aGUgY2xhc3MgaXRzZWxmLCBhbmQgaXRzIGBgX19mdW5jX19gYCBhdHRyaWJ1dGUgaXNcbiAgICAgIHRoZSBmdW5jdGlvbiBvYmplY3QgdW5kZXJseWluZyB0aGUgY2xhc3MgbWV0aG9kLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY2FsbGVkLCB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24gKGBgX19mdW5jX19gYCkgaXMgY2FsbGVkLCBpbnNlcnRpbmcgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICAoYGBfX3NlbGZfX2BgKSBpbiBmcm9udCBvZiB0aGUgYXJndW1lbnQgbGlzdC4gIEZvciBpbnN0YW5jZSxcbiAgICAgIHdoZW4gYGBDYGAgaXMgYSBjbGFzcyB3aGljaCBjb250YWlucyBhIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb25cbiAgICAgIGBgZigpYGAsIGFuZCBgYHhgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYENgYCwgY2FsbGluZyBgYHguZigxKWBgXG4gICAgICBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBDLmYoeCwgMSlgYC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGRlcml2ZWQgZnJvbSBhIGNsYXNzIG1ldGhvZFxuICAgICAgb2JqZWN0LCB0aGUgImNsYXNzIGluc3RhbmNlIiBzdG9yZWQgaW4gYGBfX3NlbGZfX2BgIHdpbGxcbiAgICAgIGFjdHVhbGx5IGJlIHRoZSBjbGFzcyBpdHNlbGYsIHNvIHRoYXQgY2FsbGluZyBlaXRoZXIgYGB4LmYoMSlgYFxuICAgICAgb3IgYGBDLmYoMSlgYCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBmKEMsMSlgYCB3aGVyZSBgYGZgYCBpc1xuICAgICAgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24uXG5cbiAgICAgIE5vdGUgdGhhdCB0aGUgdHJhbnNmb3JtYXRpb24gZnJvbSBmdW5jdGlvbiBvYmplY3QgdG8gaW5zdGFuY2VcbiAgICAgIG1ldGhvZCBvYmplY3QgaGFwcGVucyBlYWNoIHRpbWUgdGhlIGF0dHJpYnV0ZSBpcyByZXRyaWV2ZWQgZnJvbVxuICAgICAgdGhlIGluc3RhbmNlLiAgSW4gc29tZSBjYXNlcywgYSBmcnVpdGZ1bCBvcHRpbWl6YXRpb24gaXMgdG9cbiAgICAgIGFzc2lnbiB0aGUgYXR0cmlidXRlIHRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIGNhbGwgdGhhdCBsb2NhbFxuICAgICAgdmFyaWFibGUuIEFsc28gbm90aWNlIHRoYXQgdGhpcyB0cmFuc2Zvcm1hdGlvbiBvbmx5IGhhcHBlbnMgZm9yXG4gICAgICB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOyBvdGhlciBjYWxsYWJsZSBvYmplY3RzIChhbmQgYWxsIG5vbi1cbiAgICAgIGNhbGxhYmxlIG9iamVjdHMpIGFyZSByZXRyaWV2ZWQgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbi4gIEl0IGlzXG4gICAgICBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB3aGljaCBhcmVcbiAgICAgIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyBpbnN0YW5jZSBhcmUgbm90IGNvbnZlcnRlZCB0byBib3VuZFxuICAgICAgbWV0aG9kczsgdGhpcyAqb25seSogaGFwcGVucyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbiBhdHRyaWJ1dGVcbiAgICAgIG9mIHRoZSBjbGFzcy5cblxuICAgR2VuZXJhdG9yIGZ1bmN0aW9uc1xuICAgICAgQSBmdW5jdGlvbiBvciBtZXRob2Qgd2hpY2ggdXNlcyB0aGUgYGB5aWVsZGBgIHN0YXRlbWVudCAoc2VlXG4gICAgICBzZWN0aW9uICpUaGUgeWllbGQgc3RhdGVtZW50KikgaXMgY2FsbGVkIGEgKmdlbmVyYXRvciBmdW5jdGlvbiouXG4gICAgICBTdWNoIGEgZnVuY3Rpb24sIHdoZW4gY2FsbGVkLCBhbHdheXMgcmV0dXJucyBhbiBpdGVyYXRvciBvYmplY3RcbiAgICAgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uOiAgY2FsbGluZ1xuICAgICAgdGhlIGl0ZXJhdG9yXCdzIGBgaXRlcmF0b3IuX19uZXh0X18oKWBgIG1ldGhvZCB3aWxsIGNhdXNlIHRoZVxuICAgICAgZnVuY3Rpb24gdG8gZXhlY3V0ZSB1bnRpbCBpdCBwcm92aWRlcyBhIHZhbHVlIHVzaW5nIHRoZVxuICAgICAgYGB5aWVsZGBgIHN0YXRlbWVudC4gIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgYGByZXR1cm5gYFxuICAgICAgc3RhdGVtZW50IG9yIGZhbGxzIG9mZiB0aGUgZW5kLCBhIGBgU3RvcEl0ZXJhdGlvbmBgIGV4Y2VwdGlvbiBpc1xuICAgICAgcmFpc2VkIGFuZCB0aGUgaXRlcmF0b3Igd2lsbCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2V0IG9mXG4gICAgICB2YWx1ZXMgdG8gYmUgcmV0dXJuZWQuXG5cbiAgIEJ1aWx0LWluIGZ1bmN0aW9uc1xuICAgICAgQSBidWlsdC1pbiBmdW5jdGlvbiBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIEMgZnVuY3Rpb24uXG4gICAgICBFeGFtcGxlcyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGBgbGVuKClgYCBhbmQgYGBtYXRoLnNpbigpYGBcbiAgICAgIChgYG1hdGhgYCBpcyBhIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2ZcbiAgICAgIHRoZSBhcmd1bWVudHMgYXJlIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1cbiAgICAgIG9ubHkgYXR0cmlidXRlczogYGBfX2RvY19fYGAgaXMgdGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb25cbiAgICAgIHN0cmluZywgb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGU7IGBgX19uYW1lX19gYCBpcyB0aGVcbiAgICAgIGZ1bmN0aW9uXCdzIG5hbWU7IGBgX19zZWxmX19gYCBpcyBzZXQgdG8gYGBOb25lYGAgKGJ1dCBzZWUgdGhlXG4gICAgICBuZXh0IGl0ZW0pOyBgYF9fbW9kdWxlX19gYCBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZVxuICAgICAgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4gb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuXG5cbiAgIEJ1aWx0LWluIG1ldGhvZHNcbiAgICAgIFRoaXMgaXMgcmVhbGx5IGEgZGlmZmVyZW50IGRpc2d1aXNlIG9mIGEgYnVpbHQtaW4gZnVuY3Rpb24sIHRoaXNcbiAgICAgIHRpbWUgY29udGFpbmluZyBhbiBvYmplY3QgcGFzc2VkIHRvIHRoZSBDIGZ1bmN0aW9uIGFzIGFuXG4gICAgICBpbXBsaWNpdCBleHRyYSBhcmd1bWVudC4gIEFuIGV4YW1wbGUgb2YgYSBidWlsdC1pbiBtZXRob2QgaXNcbiAgICAgIGBgYWxpc3QuYXBwZW5kKClgYCwgYXNzdW1pbmcgKmFsaXN0KiBpcyBhIGxpc3Qgb2JqZWN0LiBJbiB0aGlzXG4gICAgICBjYXNlLCB0aGUgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlIGBgX19zZWxmX19gYCBpcyBzZXQgdG8gdGhlXG4gICAgICBvYmplY3QgZGVub3RlZCBieSAqYWxpc3QqLlxuXG4gICBDbGFzc2VzXG4gICAgICBDbGFzc2VzIGFyZSBjYWxsYWJsZS4gIFRoZXNlIG9iamVjdHMgbm9ybWFsbHkgYWN0IGFzIGZhY3Rvcmllc1xuICAgICAgZm9yIG5ldyBpbnN0YW5jZXMgb2YgdGhlbXNlbHZlcywgYnV0IHZhcmlhdGlvbnMgYXJlIHBvc3NpYmxlIGZvclxuICAgICAgY2xhc3MgdHlwZXMgdGhhdCBvdmVycmlkZSBgYF9fbmV3X18oKWBgLiAgVGhlIGFyZ3VtZW50cyBvZiB0aGVcbiAgICAgIGNhbGwgYXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgIGFuZCwgaW4gdGhlIHR5cGljYWwgY2FzZSwgdG9cbiAgICAgIGBgX19pbml0X18oKWBgIHRvIGluaXRpYWxpemUgdGhlIG5ldyBpbnN0YW5jZS5cblxuICAgQ2xhc3MgSW5zdGFuY2VzXG4gICAgICBJbnN0YW5jZXMgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgY2FuIGJlIG1hZGUgY2FsbGFibGUgYnkgZGVmaW5pbmdcbiAgICAgIGEgYGBfX2NhbGxfXygpYGAgbWV0aG9kIGluIHRoZWlyIGNsYXNzLlxuXG5Nb2R1bGVzXG4gICBNb2R1bGVzIGFyZSBhIGJhc2ljIG9yZ2FuaXphdGlvbmFsIHVuaXQgb2YgUHl0aG9uIGNvZGUsIGFuZCBhcmVcbiAgIGNyZWF0ZWQgYnkgdGhlICppbXBvcnQgc3lzdGVtKiBhcyBpbnZva2VkIGVpdGhlciBieSB0aGUgYGBpbXBvcnRgYFxuICAgc3RhdGVtZW50IChzZWUgYGBpbXBvcnRgYCksIG9yIGJ5IGNhbGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXNcbiAgIGBgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKWBgIGFuZCBidWlsdC1pbiBgYF9faW1wb3J0X18oKWBgLiAgQVxuICAgbW9kdWxlIG9iamVjdCBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdFxuICAgKHRoaXMgaXMgdGhlIGRpY3Rpb25hcnkgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2dsb2JhbHNfX2BgIGF0dHJpYnV0ZVxuICAgb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSkuICBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmVcbiAgIHRyYW5zbGF0ZWQgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sIGBgbS54YGAgaXNcbiAgIGVxdWl2YWxlbnQgdG8gYGBtLl9fZGljdF9fWyJ4Il1gYC4gQSBtb2R1bGUgb2JqZWN0IGRvZXMgbm90IGNvbnRhaW5cbiAgIHRoZSBjb2RlIG9iamVjdCB1c2VkIHRvIGluaXRpYWxpemUgdGhlIG1vZHVsZSAoc2luY2UgaXQgaXNuXCd0XG4gICBuZWVkZWQgb25jZSB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSkuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50IHVwZGF0ZXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2UgZGljdGlvbmFyeSxcbiAgIGUuZy4sIGBgbS54ID0gMWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLl9fZGljdF9fWyJ4Il0gPSAxYGAuXG5cbiAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogYGBfX2RpY3RfX2BgIGlzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlXG4gICBhcyBhIGRpY3Rpb25hcnkgb2JqZWN0LlxuXG4gICAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEJlY2F1c2Ugb2YgdGhlIHdheSBDUHl0aG9uXG4gICBjbGVhcnMgbW9kdWxlIGRpY3Rpb25hcmllcywgdGhlIG1vZHVsZSBkaWN0aW9uYXJ5IHdpbGwgYmUgY2xlYXJlZFxuICAgd2hlbiB0aGUgbW9kdWxlIGZhbGxzIG91dCBvZiBzY29wZSBldmVuIGlmIHRoZSBkaWN0aW9uYXJ5IHN0aWxsIGhhc1xuICAgbGl2ZSByZWZlcmVuY2VzLiAgVG8gYXZvaWQgdGhpcywgY29weSB0aGUgZGljdGlvbmFyeSBvciBrZWVwIHRoZVxuICAgbW9kdWxlIGFyb3VuZCB3aGlsZSB1c2luZyBpdHMgZGljdGlvbmFyeSBkaXJlY3RseS5cblxuICAgUHJlZGVmaW5lZCAod3JpdGFibGUpIGF0dHJpYnV0ZXM6IGBgX19uYW1lX19gYCBpcyB0aGUgbW9kdWxlXCdzXG4gICBuYW1lOyBgYF9fZG9jX19gYCBpcyB0aGUgbW9kdWxlXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciBgYE5vbmVgYFxuICAgaWYgdW5hdmFpbGFibGU7IGBgX19maWxlX19gYCBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgZnJvbSB3aGljaFxuICAgdGhlIG1vZHVsZSB3YXMgbG9hZGVkLCBpZiBpdCB3YXMgbG9hZGVkIGZyb20gYSBmaWxlLiBUaGVcbiAgIGBgX19maWxlX19gYCBhdHRyaWJ1dGUgbWF5IGJlIG1pc3NpbmcgZm9yIGNlcnRhaW4gdHlwZXMgb2YgbW9kdWxlcyxcbiAgIHN1Y2ggYXMgQyBtb2R1bGVzIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGludGVycHJldGVyO1xuICAgZm9yIGV4dGVuc2lvbiBtb2R1bGVzIGxvYWRlZCBkeW5hbWljYWxseSBmcm9tIGEgc2hhcmVkIGxpYnJhcnksIGl0XG4gICBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuXG5cbkN1c3RvbSBjbGFzc2VzXG4gICBDdXN0b20gY2xhc3MgdHlwZXMgYXJlIHR5cGljYWxseSBjcmVhdGVkIGJ5IGNsYXNzIGRlZmluaXRpb25zIChzZWVcbiAgIHNlY3Rpb24gKkNsYXNzIGRlZmluaXRpb25zKikuICBBIGNsYXNzIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZFxuICAgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdC4gQ2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHRyYW5zbGF0ZWRcbiAgIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCBgYEMueGBgIGlzIHRyYW5zbGF0ZWQgdG9cbiAgIGBgQy5fX2RpY3RfX1sieCJdYGAgKGFsdGhvdWdoIHRoZXJlIGFyZSBhIG51bWJlciBvZiBob29rcyB3aGljaFxuICAgYWxsb3cgZm9yIG90aGVyIG1lYW5zIG9mIGxvY2F0aW5nIGF0dHJpYnV0ZXMpLiBXaGVuIHRoZSBhdHRyaWJ1dGVcbiAgIG5hbWUgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgYXR0cmlidXRlIHNlYXJjaCBjb250aW51ZXMgaW4gdGhlIGJhc2VcbiAgIGNsYXNzZXMuIFRoaXMgc2VhcmNoIG9mIHRoZSBiYXNlIGNsYXNzZXMgdXNlcyB0aGUgQzMgbWV0aG9kXG4gICByZXNvbHV0aW9uIG9yZGVyIHdoaWNoIGJlaGF2ZXMgY29ycmVjdGx5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mXG4gICBcJ2RpYW1vbmRcJyBpbmhlcml0YW5jZSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgaW5oZXJpdGFuY2UgcGF0aHMgbGVhZGluZyBiYWNrIHRvIGEgY29tbW9uIGFuY2VzdG9yLiBBZGRpdGlvbmFsXG4gICBkZXRhaWxzIG9uIHRoZSBDMyBNUk8gdXNlZCBieSBQeXRob24gY2FuIGJlIGZvdW5kIGluIHRoZVxuICAgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIDIuMyByZWxlYXNlIGF0XG4gICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uXG5cbiAgIFdoZW4gYSBjbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlIChmb3IgY2xhc3MgYGBDYGAsIHNheSkgd291bGQgeWllbGRcbiAgIGEgY2xhc3MgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2RcbiAgIG9iamVjdCB3aG9zZSBgYF9fc2VsZl9fYGAgYXR0cmlidXRlcyBpcyBgYENgYC4gIFdoZW4gaXQgd291bGQgeWllbGRcbiAgIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG9iamVjdCB3cmFwcGVkXG4gICBieSB0aGUgc3RhdGljIG1ldGhvZCBvYmplY3QuIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqXG4gICBmb3IgYW5vdGhlciB3YXkgaW4gd2hpY2ggYXR0cmlidXRlcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG1heVxuICAgZGlmZmVyIGZyb20gdGhvc2UgYWN0dWFsbHkgY29udGFpbmVkIGluIGl0cyBgYF9fZGljdF9fYGAuXG5cbiAgIENsYXNzIGF0dHJpYnV0ZSBhc3NpZ25tZW50cyB1cGRhdGUgdGhlIGNsYXNzXCdzIGRpY3Rpb25hcnksIG5ldmVyXG4gICB0aGUgZGljdGlvbmFyeSBvZiBhIGJhc2UgY2xhc3MuXG5cbiAgIEEgY2xhc3Mgb2JqZWN0IGNhbiBiZSBjYWxsZWQgKHNlZSBhYm92ZSkgdG8geWllbGQgYSBjbGFzcyBpbnN0YW5jZVxuICAgKHNlZSBiZWxvdykuXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogYGBfX25hbWVfX2BgIGlzIHRoZSBjbGFzcyBuYW1lOyBgYF9fbW9kdWxlX19gYFxuICAgaXMgdGhlIG1vZHVsZSBuYW1lIGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgZGVmaW5lZDsgYGBfX2RpY3RfX2BgIGlzXG4gICB0aGUgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjbGFzc1wncyBuYW1lc3BhY2U7IGBgX19iYXNlc19fYGAgaXMgYVxuICAgdHVwbGUgKHBvc3NpYmx5IGVtcHR5IG9yIGEgc2luZ2xldG9uKSBjb250YWluaW5nIHRoZSBiYXNlIGNsYXNzZXMsXG4gICBpbiB0aGUgb3JkZXIgb2YgdGhlaXIgb2NjdXJyZW5jZSBpbiB0aGUgYmFzZSBjbGFzcyBsaXN0O1xuICAgYGBfX2RvY19fYGAgaXMgdGhlIGNsYXNzXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciBOb25lIGlmXG4gICB1bmRlZmluZWQuXG5cbkNsYXNzIGluc3RhbmNlc1xuICAgQSBjbGFzcyBpbnN0YW5jZSBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgYSBjbGFzcyBvYmplY3QgKHNlZSBhYm92ZSkuXG4gICBBIGNsYXNzIGluc3RhbmNlIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBhcyBhIGRpY3Rpb25hcnkgd2hpY2hcbiAgIGlzIHRoZSBmaXJzdCBwbGFjZSBpbiB3aGljaCBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgc2VhcmNoZWQuXG4gICBXaGVuIGFuIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQgdGhlcmUsIGFuZCB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MgaGFzXG4gICBhbiBhdHRyaWJ1dGUgYnkgdGhhdCBuYW1lLCB0aGUgc2VhcmNoIGNvbnRpbnVlcyB3aXRoIHRoZSBjbGFzc1xuICAgYXR0cmlidXRlcy4gIElmIGEgY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kIHRoYXQgaXMgYSB1c2VyLWRlZmluZWRcbiAgIGZ1bmN0aW9uIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0XG4gICB3aG9zZSBgYF9fc2VsZl9fYGAgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZS4gIFN0YXRpYyBtZXRob2QgYW5kXG4gICBjbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgYWxzbyB0cmFuc2Zvcm1lZDsgc2VlIGFib3ZlIHVuZGVyXG4gICAiQ2xhc3NlcyIuICBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKiBmb3IgYW5vdGhlciB3YXlcbiAgIGluIHdoaWNoIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyByZXRyaWV2ZWQgdmlhIGl0cyBpbnN0YW5jZXMgbWF5XG4gICBkaWZmZXIgZnJvbSB0aGUgb2JqZWN0cyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIGNsYXNzXCdzXG4gICBgYF9fZGljdF9fYGAuICBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQsIGFuZCB0aGUgb2JqZWN0XCdzXG4gICBjbGFzcyBoYXMgYSBgYF9fZ2V0YXR0cl9fKClgYCBtZXRob2QsIHRoYXQgaXMgY2FsbGVkIHRvIHNhdGlzZnkgdGhlXG4gICBsb29rdXAuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50cyBhbmQgZGVsZXRpb25zIHVwZGF0ZSB0aGUgaW5zdGFuY2VcJ3NcbiAgIGRpY3Rpb25hcnksIG5ldmVyIGEgY2xhc3NcJ3MgZGljdGlvbmFyeS4gIElmIHRoZSBjbGFzcyBoYXMgYVxuICAgYGBfX3NldGF0dHJfXygpYGAgb3IgYGBfX2RlbGF0dHJfXygpYGAgbWV0aG9kLCB0aGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB1cGRhdGluZyB0aGUgaW5zdGFuY2UgZGljdGlvbmFyeSBkaXJlY3RseS5cblxuICAgQ2xhc3MgaW5zdGFuY2VzIGNhbiBwcmV0ZW5kIHRvIGJlIG51bWJlcnMsIHNlcXVlbmNlcywgb3IgbWFwcGluZ3NcbiAgIGlmIHRoZXkgaGF2ZSBtZXRob2RzIHdpdGggY2VydGFpbiBzcGVjaWFsIG5hbWVzLiAgU2VlIHNlY3Rpb25cbiAgICpTcGVjaWFsIG1ldGhvZCBuYW1lcyouXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogYGBfX2RpY3RfX2BgIGlzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeTtcbiAgIGBgX19jbGFzc19fYGAgaXMgdGhlIGluc3RhbmNlXCdzIGNsYXNzLlxuXG5JL08gb2JqZWN0cyAoYWxzbyBrbm93biBhcyBmaWxlIG9iamVjdHMpXG4gICBBICpmaWxlIG9iamVjdCogcmVwcmVzZW50cyBhbiBvcGVuIGZpbGUuICBWYXJpb3VzIHNob3J0Y3V0cyBhcmVcbiAgIGF2YWlsYWJsZSB0byBjcmVhdGUgZmlsZSBvYmplY3RzOiB0aGUgYGBvcGVuKClgYCBidWlsdC1pbiBmdW5jdGlvbixcbiAgIGFuZCBhbHNvIGBgb3MucG9wZW4oKWBgLCBgYG9zLmZkb3BlbigpYGAsIGFuZCB0aGUgYGBtYWtlZmlsZSgpYGBcbiAgIG1ldGhvZCBvZiBzb2NrZXQgb2JqZWN0cyAoYW5kIHBlcmhhcHMgYnkgb3RoZXIgZnVuY3Rpb25zIG9yIG1ldGhvZHNcbiAgIHByb3ZpZGVkIGJ5IGV4dGVuc2lvbiBtb2R1bGVzKS5cblxuICAgVGhlIG9iamVjdHMgYGBzeXMuc3RkaW5gYCwgYGBzeXMuc3Rkb3V0YGAgYW5kIGBgc3lzLnN0ZGVycmBgIGFyZVxuICAgaW5pdGlhbGl6ZWQgdG8gZmlsZSBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludGVycHJldGVyXCdzXG4gICBzdGFuZGFyZCBpbnB1dCwgb3V0cHV0IGFuZCBlcnJvciBzdHJlYW1zOyB0aGV5IGFyZSBhbGwgb3BlbiBpbiB0ZXh0XG4gICBtb2RlIGFuZCB0aGVyZWZvcmUgZm9sbG93IHRoZSBpbnRlcmZhY2UgZGVmaW5lZCBieSB0aGVcbiAgIGBgaW8uVGV4dElPQmFzZWBgIGFic3RyYWN0IGNsYXNzLlxuXG5JbnRlcm5hbCB0eXBlc1xuICAgQSBmZXcgdHlwZXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBpbnRlcnByZXRlciBhcmUgZXhwb3NlZCB0byB0aGVcbiAgIHVzZXIuIFRoZWlyIGRlZmluaXRpb25zIG1heSBjaGFuZ2Ugd2l0aCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlXG4gICBpbnRlcnByZXRlciwgYnV0IHRoZXkgYXJlIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuXG5cbiAgIENvZGUgb2JqZWN0c1xuICAgICAgQ29kZSBvYmplY3RzIHJlcHJlc2VudCAqYnl0ZS1jb21waWxlZCogZXhlY3V0YWJsZSBQeXRob24gY29kZSxcbiAgICAgIG9yICpieXRlY29kZSouIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBjb2RlIG9iamVjdCBhbmQgYVxuICAgICAgZnVuY3Rpb24gb2JqZWN0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhbiBleHBsaWNpdFxuICAgICAgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvblwncyBnbG9iYWxzICh0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhc1xuICAgICAgZGVmaW5lZCksIHdoaWxlIGEgY29kZSBvYmplY3QgY29udGFpbnMgbm8gY29udGV4dDsgYWxzbyB0aGVcbiAgICAgIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGZ1bmN0aW9uIG9iamVjdCwgbm90XG4gICAgICBpbiB0aGUgY29kZSBvYmplY3QgKGJlY2F1c2UgdGhleSByZXByZXNlbnQgdmFsdWVzIGNhbGN1bGF0ZWQgYXRcbiAgICAgIHJ1bi10aW1lKS4gIFVubGlrZSBmdW5jdGlvbiBvYmplY3RzLCBjb2RlIG9iamVjdHMgYXJlIGltbXV0YWJsZVxuICAgICAgYW5kIGNvbnRhaW4gbm8gcmVmZXJlbmNlcyAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gbXV0YWJsZVxuICAgICAgb2JqZWN0cy5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBjb19uYW1lYGAgZ2l2ZXMgdGhlIGZ1bmN0aW9uXG4gICAgICBuYW1lOyBgYGNvX2FyZ2NvdW50YGAgaXMgdGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAgKGluY2x1ZGluZyBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcyk7IGBgY29fbmxvY2Fsc2BgIGlzIHRoZVxuICAgICAgbnVtYmVyIG9mIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiAoaW5jbHVkaW5nXG4gICAgICBhcmd1bWVudHMpOyBgYGNvX3Zhcm5hbWVzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZlxuICAgICAgdGhlIGxvY2FsIHZhcmlhYmxlcyAoc3RhcnRpbmcgd2l0aCB0aGUgYXJndW1lbnQgbmFtZXMpO1xuICAgICAgYGBjb19jZWxsdmFyc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgbG9jYWxcbiAgICAgIHZhcmlhYmxlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IG5lc3RlZCBmdW5jdGlvbnM7XG4gICAgICBgYGNvX2ZyZWV2YXJzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBmcmVlXG4gICAgICB2YXJpYWJsZXM7IGBgY29fY29kZWBgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2Ugb2ZcbiAgICAgIGJ5dGVjb2RlIGluc3RydWN0aW9uczsgYGBjb19jb25zdHNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlXG4gICAgICBsaXRlcmFscyB1c2VkIGJ5IHRoZSBieXRlY29kZTsgYGBjb19uYW1lc2BgIGlzIGEgdHVwbGVcbiAgICAgIGNvbnRhaW5pbmcgdGhlIG5hbWVzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlOyBgYGNvX2ZpbGVuYW1lYGAgaXNcbiAgICAgIHRoZSBmaWxlbmFtZSBmcm9tIHdoaWNoIHRoZSBjb2RlIHdhcyBjb21waWxlZDtcbiAgICAgIGBgY29fZmlyc3RsaW5lbm9gYCBpcyB0aGUgZmlyc3QgbGluZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uO1xuICAgICAgYGBjb19sbm90YWJgYCBpcyBhIHN0cmluZyBlbmNvZGluZyB0aGUgbWFwcGluZyBmcm9tIGJ5dGVjb2RlXG4gICAgICBvZmZzZXRzIHRvIGxpbmUgbnVtYmVycyAoZm9yIGRldGFpbHMgc2VlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGVcbiAgICAgIGludGVycHJldGVyKTsgYGBjb19zdGFja3NpemVgYCBpcyB0aGUgcmVxdWlyZWQgc3RhY2sgc2l6ZVxuICAgICAgKGluY2x1ZGluZyBsb2NhbCB2YXJpYWJsZXMpOyBgYGNvX2ZsYWdzYGAgaXMgYW4gaW50ZWdlciBlbmNvZGluZ1xuICAgICAgYSBudW1iZXIgb2YgZmxhZ3MgZm9yIHRoZSBpbnRlcnByZXRlci5cblxuICAgICAgVGhlIGZvbGxvd2luZyBmbGFnIGJpdHMgYXJlIGRlZmluZWQgZm9yIGBgY29fZmxhZ3NgYDogYml0XG4gICAgICBgYDB4MDRgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGBgKmFyZ3VtZW50c2BgIHN5bnRheFxuICAgICAgdG8gYWNjZXB0IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHM7IGJpdFxuICAgICAgYGAweDA4YGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBgYCoqa2V5d29yZHNgYCBzeW50YXhcbiAgICAgIHRvIGFjY2VwdCBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHM7IGJpdCBgYDB4MjBgYCBpcyBzZXQgaWZcbiAgICAgIHRoZSBmdW5jdGlvbiBpcyBhIGdlbmVyYXRvci5cblxuICAgICAgRnV0dXJlIGZlYXR1cmUgZGVjbGFyYXRpb25zIChgYGZyb20gX19mdXR1cmVfXyBpbXBvcnRcbiAgICAgIGRpdmlzaW9uYGApIGFsc28gdXNlIGJpdHMgaW4gYGBjb19mbGFnc2BgIHRvIGluZGljYXRlIHdoZXRoZXIgYVxuICAgICAgY29kZSBvYmplY3Qgd2FzIGNvbXBpbGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgZW5hYmxlZDogYml0XG4gICAgICBgYDB4MjAwMGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gd2FzIGNvbXBpbGVkIHdpdGggZnV0dXJlXG4gICAgICBkaXZpc2lvbiBlbmFibGVkOyBiaXRzIGBgMHgxMGBgIGFuZCBgYDB4MTAwMGBgIHdlcmUgdXNlZCBpblxuICAgICAgZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24uXG5cbiAgICAgIE90aGVyIGJpdHMgaW4gYGBjb19mbGFnc2BgIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLlxuXG4gICAgICBJZiBhIGNvZGUgb2JqZWN0IHJlcHJlc2VudHMgYSBmdW5jdGlvbiwgdGhlIGZpcnN0IGl0ZW0gaW5cbiAgICAgIGBgY29fY29uc3RzYGAgaXMgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIG9mIHRoZSBmdW5jdGlvbiwgb3JcbiAgICAgIGBgTm9uZWBgIGlmIHVuZGVmaW5lZC5cblxuICAgRnJhbWUgb2JqZWN0c1xuICAgICAgRnJhbWUgb2JqZWN0cyByZXByZXNlbnQgZXhlY3V0aW9uIGZyYW1lcy4gIFRoZXkgbWF5IG9jY3VyIGluXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0cyAoc2VlIGJlbG93KS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBmX2JhY2tgYCBpcyB0byB0aGUgcHJldmlvdXNcbiAgICAgIHN0YWNrIGZyYW1lICh0b3dhcmRzIHRoZSBjYWxsZXIpLCBvciBgYE5vbmVgYCBpZiB0aGlzIGlzIHRoZVxuICAgICAgYm90dG9tIHN0YWNrIGZyYW1lOyBgYGZfY29kZWBgIGlzIHRoZSBjb2RlIG9iamVjdCBiZWluZyBleGVjdXRlZFxuICAgICAgaW4gdGhpcyBmcmFtZTsgYGBmX2xvY2Fsc2BgIGlzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgdG8gbG9vayB1cFxuICAgICAgbG9jYWwgdmFyaWFibGVzOyBgYGZfZ2xvYmFsc2BgIGlzIHVzZWQgZm9yIGdsb2JhbCB2YXJpYWJsZXM7XG4gICAgICBgYGZfYnVpbHRpbnNgYCBpcyB1c2VkIGZvciBidWlsdC1pbiAoaW50cmluc2ljKSBuYW1lcztcbiAgICAgIGBgZl9sYXN0aWBgIGdpdmVzIHRoZSBwcmVjaXNlIGluc3RydWN0aW9uICh0aGlzIGlzIGFuIGluZGV4IGludG9cbiAgICAgIHRoZSBieXRlY29kZSBzdHJpbmcgb2YgdGhlIGNvZGUgb2JqZWN0KS5cblxuICAgICAgU3BlY2lhbCB3cml0YWJsZSBhdHRyaWJ1dGVzOiBgYGZfdHJhY2VgYCwgaWYgbm90IGBgTm9uZWBgLCBpcyBhXG4gICAgICBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGNvZGUgbGluZSAodGhpcyBpc1xuICAgICAgdXNlZCBieSB0aGUgZGVidWdnZXIpOyBgYGZfbGluZW5vYGAgaXMgdGhlIGN1cnJlbnQgbGluZSBudW1iZXJcbiAgICAgIG9mIHRoZSBmcmFtZSAtLS0gd3JpdGluZyB0byB0aGlzIGZyb20gd2l0aGluIGEgdHJhY2UgZnVuY3Rpb25cbiAgICAgIGp1bXBzIHRvIHRoZSBnaXZlbiBsaW5lIChvbmx5IGZvciB0aGUgYm90dG9tLW1vc3QgZnJhbWUpLiAgQVxuICAgICAgZGVidWdnZXIgY2FuIGltcGxlbWVudCBhIEp1bXAgY29tbWFuZCAoYWthIFNldCBOZXh0IFN0YXRlbWVudClcbiAgICAgIGJ5IHdyaXRpbmcgdG8gZl9saW5lbm8uXG5cbiAgICAgIEZyYW1lIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBmcmFtZS5jbGVhcigpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgaGVsZCBieVxuICAgICAgICAgdGhlIGZyYW1lLiAgQWxzbywgaWYgdGhlIGZyYW1lIGJlbG9uZ2VkIHRvIGEgZ2VuZXJhdG9yLCB0aGVcbiAgICAgICAgIGdlbmVyYXRvciBpcyBmaW5hbGl6ZWQuICBUaGlzIGhlbHBzIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXNcbiAgICAgICAgIGludm9sdmluZyBmcmFtZSBvYmplY3RzIChmb3IgZXhhbXBsZSB3aGVuIGNhdGNoaW5nIGFuXG4gICAgICAgICBleGNlcHRpb24gYW5kIHN0b3JpbmcgaXRzIHRyYWNlYmFjayBmb3IgbGF0ZXIgdXNlKS5cblxuICAgICAgICAgYGBSdW50aW1lRXJyb3JgYCBpcyByYWlzZWQgaWYgdGhlIGZyYW1lIGlzIGN1cnJlbnRseVxuICAgICAgICAgZXhlY3V0aW5nLlxuXG4gICAgICAgICBOZXcgaW4gdmVyc2lvbiAzLjQuXG5cbiAgIFRyYWNlYmFjayBvYmplY3RzXG4gICAgICBUcmFjZWJhY2sgb2JqZWN0cyByZXByZXNlbnQgYSBzdGFjayB0cmFjZSBvZiBhbiBleGNlcHRpb24uICBBXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0IGlzIGNyZWF0ZWQgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLiAgV2hlbiB0aGVcbiAgICAgIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdW53aW5kcyB0aGUgZXhlY3V0aW9uIHN0YWNrLCBhdFxuICAgICAgZWFjaCB1bndvdW5kIGxldmVsIGEgdHJhY2ViYWNrIG9iamVjdCBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZlxuICAgICAgdGhlIGN1cnJlbnQgdHJhY2ViYWNrLiAgV2hlbiBhbiBleGNlcHRpb24gaGFuZGxlciBpcyBlbnRlcmVkLFxuICAgICAgdGhlIHN0YWNrIHRyYWNlIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtLiAoU2VlIHNlY3Rpb25cbiAgICAgICpUaGUgdHJ5IHN0YXRlbWVudCouKSBJdCBpcyBhY2Nlc3NpYmxlIGFzIHRoZSB0aGlyZCBpdGVtIG9mIHRoZVxuICAgICAgdHVwbGUgcmV0dXJuZWQgYnkgYGBzeXMuZXhjX2luZm8oKWBgLiBXaGVuIHRoZSBwcm9ncmFtIGNvbnRhaW5zXG4gICAgICBubyBzdWl0YWJsZSBoYW5kbGVyLCB0aGUgc3RhY2sgdHJhY2UgaXMgd3JpdHRlbiAobmljZWx5XG4gICAgICBmb3JtYXR0ZWQpIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW07IGlmIHRoZSBpbnRlcnByZXRlciBpc1xuICAgICAgaW50ZXJhY3RpdmUsIGl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUgdG8gdGhlIHVzZXIgYXNcbiAgICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgdGJfbmV4dGBgIGlzIHRoZSBuZXh0IGxldmVsIGluXG4gICAgICB0aGUgc3RhY2sgdHJhY2UgKHRvd2FyZHMgdGhlIGZyYW1lIHdoZXJlIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkKSwgb3IgYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gbmV4dCBsZXZlbDsgYGB0Yl9mcmFtZWBgXG4gICAgICBwb2ludHMgdG8gdGhlIGV4ZWN1dGlvbiBmcmFtZSBvZiB0aGUgY3VycmVudCBsZXZlbDtcbiAgICAgIGBgdGJfbGluZW5vYGAgZ2l2ZXMgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkOyBgYHRiX2xhc3RpYGAgaW5kaWNhdGVzIHRoZSBwcmVjaXNlIGluc3RydWN0aW9uLiAgVGhlXG4gICAgICBsaW5lIG51bWJlciBhbmQgbGFzdCBpbnN0cnVjdGlvbiBpbiB0aGUgdHJhY2ViYWNrIG1heSBkaWZmZXJcbiAgICAgIGZyb20gdGhlIGxpbmUgbnVtYmVyIG9mIGl0cyBmcmFtZSBvYmplY3QgaWYgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQgaW4gYSBgYHRyeWBgIHN0YXRlbWVudCB3aXRoIG5vIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2VcbiAgICAgIG9yIHdpdGggYSBmaW5hbGx5IGNsYXVzZS5cblxuICAgU2xpY2Ugb2JqZWN0c1xuICAgICAgU2xpY2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgc2xpY2VzIGZvciBgYF9fZ2V0aXRlbV9fKClgYFxuICAgICAgbWV0aG9kcy4gIFRoZXkgYXJlIGFsc28gY3JlYXRlZCBieSB0aGUgYnVpbHQtaW4gYGBzbGljZSgpYGBcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYHN0YXJ0YGAgaXMgdGhlIGxvd2VyIGJvdW5kO1xuICAgICAgYGBzdG9wYGAgaXMgdGhlIHVwcGVyIGJvdW5kOyBgYHN0ZXBgYCBpcyB0aGUgc3RlcCB2YWx1ZTsgZWFjaCBpc1xuICAgICAgYGBOb25lYGAgaWYgb21pdHRlZC4gIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGhhdmUgYW55IHR5cGUuXG5cbiAgICAgIFNsaWNlIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBzbGljZS5pbmRpY2VzKHNlbGYsIGxlbmd0aClcblxuICAgICAgICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgaW50ZWdlciBhcmd1bWVudCAqbGVuZ3RoKiBhbmRcbiAgICAgICAgIGNvbXB1dGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbGljZSB0aGF0IHRoZSBzbGljZSBvYmplY3RcbiAgICAgICAgIHdvdWxkIGRlc2NyaWJlIGlmIGFwcGxpZWQgdG8gYSBzZXF1ZW5jZSBvZiAqbGVuZ3RoKiBpdGVtcy5cbiAgICAgICAgIEl0IHJldHVybnMgYSB0dXBsZSBvZiB0aHJlZSBpbnRlZ2VyczsgcmVzcGVjdGl2ZWx5IHRoZXNlIGFyZVxuICAgICAgICAgdGhlICpzdGFydCogYW5kICpzdG9wKiBpbmRpY2VzIGFuZCB0aGUgKnN0ZXAqIG9yIHN0cmlkZVxuICAgICAgICAgbGVuZ3RoIG9mIHRoZSBzbGljZS4gTWlzc2luZyBvciBvdXQtb2YtYm91bmRzIGluZGljZXMgYXJlXG4gICAgICAgICBoYW5kbGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCByZWd1bGFyIHNsaWNlcy5cblxuICAgU3RhdGljIG1ldGhvZCBvYmplY3RzXG4gICAgICBTdGF0aWMgbWV0aG9kIG9iamVjdHMgcHJvdmlkZSBhIHdheSBvZiBkZWZlYXRpbmcgdGhlXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvZiBmdW5jdGlvbiBvYmplY3RzIHRvIG1ldGhvZCBvYmplY3RzIGRlc2NyaWJlZFxuICAgICAgYWJvdmUuIEEgc3RhdGljIG1ldGhvZCBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbnkgb3RoZXJcbiAgICAgIG9iamVjdCwgdXN1YWxseSBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LiBXaGVuIGEgc3RhdGljXG4gICAgICBtZXRob2Qgb2JqZWN0IGlzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3Mgb3IgYSBjbGFzcyBpbnN0YW5jZSwgdGhlXG4gICAgICBvYmplY3QgYWN0dWFsbHkgcmV0dXJuZWQgaXMgdGhlIHdyYXBwZWQgb2JqZWN0LCB3aGljaCBpcyBub3RcbiAgICAgIHN1YmplY3QgdG8gYW55IGZ1cnRoZXIgdHJhbnNmb3JtYXRpb24uIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmVcbiAgICAgIG5vdCB0aGVtc2VsdmVzIGNhbGxhYmxlLCBhbHRob3VnaCB0aGUgb2JqZWN0cyB0aGV5IHdyYXAgdXN1YWxseVxuICAgICAgYXJlLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICBgYHN0YXRpY21ldGhvZCgpYGAgY29uc3RydWN0b3IuXG5cbiAgIENsYXNzIG1ldGhvZCBvYmplY3RzXG4gICAgICBBIGNsYXNzIG1ldGhvZCBvYmplY3QsIGxpa2UgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXMgYSB3cmFwcGVyXG4gICAgICBhcm91bmQgYW5vdGhlciBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIHdheSBpbiB3aGljaCB0aGF0IG9iamVjdFxuICAgICAgaXMgcmV0cmlldmVkIGZyb20gY2xhc3NlcyBhbmQgY2xhc3MgaW5zdGFuY2VzLiBUaGUgYmVoYXZpb3VyIG9mXG4gICAgICBjbGFzcyBtZXRob2Qgb2JqZWN0cyB1cG9uIHN1Y2ggcmV0cmlldmFsIGlzIGRlc2NyaWJlZCBhYm92ZSxcbiAgICAgIHVuZGVyICJVc2VyLWRlZmluZWQgbWV0aG9kcyIuIENsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkXG4gICAgICBieSB0aGUgYnVpbHQtaW4gYGBjbGFzc21ldGhvZCgpYGAgY29uc3RydWN0b3IuXG4nLAogICd0eXBlc2Z1bmN0aW9ucyc6ICdcbkZ1bmN0aW9uc1xuKioqKioqKioqXG5cbkZ1bmN0aW9uIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBUaGUgb25seVxub3BlcmF0aW9uIG9uIGEgZnVuY3Rpb24gb2JqZWN0IGlzIHRvIGNhbGwgaXQ6IGBgZnVuYyhhcmd1bWVudC1saXN0KWBgLlxuXG5UaGVyZSBhcmUgcmVhbGx5IHR3byBmbGF2b3JzIG9mIGZ1bmN0aW9uIG9iamVjdHM6IGJ1aWx0LWluIGZ1bmN0aW9uc1xuYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuICBCb3RoIHN1cHBvcnQgdGhlIHNhbWUgb3BlcmF0aW9uICh0byBjYWxsXG50aGUgZnVuY3Rpb24pLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGRpZmZlcmVudCwgaGVuY2UgdGhlXG5kaWZmZXJlbnQgb2JqZWN0IHR5cGVzLlxuXG5TZWUgKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCiAgJ3R5cGVzbWFwcGluZyc6ICdcbk1hcHBpbmcgVHlwZXMgLS0tIGBgZGljdGBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICptYXBwaW5nKiBvYmplY3QgbWFwcyAqaGFzaGFibGUqIHZhbHVlcyB0byBhcmJpdHJhcnkgb2JqZWN0cy5cbk1hcHBpbmdzIGFyZSBtdXRhYmxlIG9iamVjdHMuICBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgc3RhbmRhcmRcbm1hcHBpbmcgdHlwZSwgdGhlICpkaWN0aW9uYXJ5Ki4gIChGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0LVxuaW4gYGBsaXN0YGAsIGBgc2V0YGAsIGFuZCBgYHR1cGxlYGAgY2xhc3NlcywgYW5kIHRoZSBgYGNvbGxlY3Rpb25zYGBcbm1vZHVsZS4pXG5cbkEgZGljdGlvbmFyeVwncyBrZXlzIGFyZSAqYWxtb3N0KiBhcmJpdHJhcnkgdmFsdWVzLiAgVmFsdWVzIHRoYXQgYXJlXG5ub3QgKmhhc2hhYmxlKiwgdGhhdCBpcywgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMsIGRpY3Rpb25hcmllcyBvclxub3RoZXIgbXV0YWJsZSB0eXBlcyAodGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG5pZGVudGl0eSkgbWF5IG5vdCBiZSB1c2VkIGFzIGtleXMuICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleVxudGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsXG4oc3VjaCBhcyBgYDFgYCBhbmQgYGAxLjBgYCkgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0b1xuaW5kZXggdGhlIHNhbWUgZGljdGlvbmFyeSBlbnRyeS4gIChOb3RlIGhvd2V2ZXIsIHRoYXQgc2luY2UgY29tcHV0ZXJzXG5zdG9yZSBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFzIGFwcHJveGltYXRpb25zIGl0IGlzIHVzdWFsbHkgdW53aXNlIHRvXG51c2UgdGhlbSBhcyBkaWN0aW9uYXJ5IGtleXMuKVxuXG5EaWN0aW9uYXJpZXMgY2FuIGJlIGNyZWF0ZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mXG5gYGtleTogdmFsdWVgYCBwYWlycyB3aXRoaW4gYnJhY2VzLCBmb3IgZXhhbXBsZTogYGB7XCdqYWNrXCc6IDQwOTgsXG5cJ3Nqb2VyZFwnOiA0MTI3fWBgIG9yIGBgezQwOTg6IFwnamFja1wnLCA0MTI3OiBcJ3Nqb2VyZFwnfWBgLCBvciBieSB0aGVcbmBgZGljdGBgIGNvbnN0cnVjdG9yLlxuXG5jbGFzcyBjbGFzcyBkaWN0KCoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KG1hcHBpbmcsICoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KGl0ZXJhYmxlLCAqKmt3YXJnKVxuXG4gICBSZXR1cm4gYSBuZXcgZGljdGlvbmFyeSBpbml0aWFsaXplZCBmcm9tIGFuIG9wdGlvbmFsIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50IGFuZCBhIHBvc3NpYmx5IGVtcHR5IHNldCBvZiBrZXl3b3JkIGFyZ3VtZW50cy5cblxuICAgSWYgbm8gcG9zaXRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiwgYW4gZW1wdHkgZGljdGlvbmFyeSBpcyBjcmVhdGVkLlxuICAgSWYgYSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuIGFuZCBpdCBpcyBhIG1hcHBpbmcgb2JqZWN0LCBhXG4gICBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBrZXktdmFsdWUgcGFpcnMgYXMgdGhlIG1hcHBpbmdcbiAgIG9iamVjdC4gIE90aGVyd2lzZSwgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgbXVzdCBiZSBhbiAqaXRlcmF0b3IqXG4gICBvYmplY3QuICBFYWNoIGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIG11c3QgaXRzZWxmIGJlIGFuIGl0ZXJhdG9yIHdpdGhcbiAgIGV4YWN0bHkgdHdvIG9iamVjdHMuICBUaGUgZmlyc3Qgb2JqZWN0IG9mIGVhY2ggaXRlbSBiZWNvbWVzIGEga2V5XG4gICBpbiB0aGUgbmV3IGRpY3Rpb25hcnksIGFuZCB0aGUgc2Vjb25kIG9iamVjdCB0aGUgY29ycmVzcG9uZGluZ1xuICAgdmFsdWUuICBJZiBhIGtleSBvY2N1cnMgbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIGZvciB0aGF0IGtleVxuICAgYmVjb21lcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgbmV3IGRpY3Rpb25hcnkuXG5cbiAgIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGVpclxuICAgdmFsdWVzIGFyZSBhZGRlZCB0byB0aGUgZGljdGlvbmFyeSBjcmVhdGVkIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LiAgSWYgYSBrZXkgYmVpbmcgYWRkZWQgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbVxuICAgdGhlIGtleXdvcmQgYXJndW1lbnQgcmVwbGFjZXMgdGhlIHZhbHVlIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LlxuXG4gICBUbyBpbGx1c3RyYXRlLCB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIGFsbCByZXR1cm4gYSBkaWN0aW9uYXJ5IGVxdWFsXG4gICB0byBgYHsib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDN9YGA6XG5cbiAgICAgID4+PiBhID0gZGljdChvbmU9MSwgdHdvPTIsIHRocmVlPTMpXG4gICAgICA+Pj4gYiA9IHtcJ29uZVwnOiAxLCBcJ3R3b1wnOiAyLCBcJ3RocmVlXCc6IDN9XG4gICAgICA+Pj4gYyA9IGRpY3QoemlwKFtcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCddLCBbMSwgMiwgM10pKVxuICAgICAgPj4+IGQgPSBkaWN0KFsoXCd0d29cJywgMiksIChcJ29uZVwnLCAxKSwgKFwndGhyZWVcJywgMyldKVxuICAgICAgPj4+IGUgPSBkaWN0KHtcJ3RocmVlXCc6IDMsIFwnb25lXCc6IDEsIFwndHdvXCc6IDJ9KVxuICAgICAgPj4+IGEgPT0gYiA9PSBjID09IGQgPT0gZVxuICAgICAgVHJ1ZVxuXG4gICBQcm92aWRpbmcga2V5d29yZCBhcmd1bWVudHMgYXMgaW4gdGhlIGZpcnN0IGV4YW1wbGUgb25seSB3b3JrcyBmb3JcbiAgIGtleXMgdGhhdCBhcmUgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzLiAgT3RoZXJ3aXNlLCBhbnkgdmFsaWQga2V5c1xuICAgY2FuIGJlIHVzZWQuXG5cbiAgIFRoZXNlIGFyZSB0aGUgb3BlcmF0aW9ucyB0aGF0IGRpY3Rpb25hcmllcyBzdXBwb3J0IChhbmQgdGhlcmVmb3JlLFxuICAgY3VzdG9tIG1hcHBpbmcgdHlwZXMgc2hvdWxkIHN1cHBvcnQgdG9vKTpcblxuICAgbGVuKGQpXG5cbiAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBkaWN0aW9uYXJ5ICpkKi5cblxuICAgZFtrZXldXG5cbiAgICAgIFJldHVybiB0aGUgaXRlbSBvZiAqZCogd2l0aCBrZXkgKmtleSouICBSYWlzZXMgYSBgYEtleUVycm9yYGAgaWZcbiAgICAgICprZXkqIGlzIG5vdCBpbiB0aGUgbWFwLlxuXG4gICAgICBJZiBhIHN1YmNsYXNzIG9mIGRpY3QgZGVmaW5lcyBhIG1ldGhvZCBgYF9fbWlzc2luZ19fKClgYCwgaWYgdGhlXG4gICAgICBrZXkgKmtleSogaXMgbm90IHByZXNlbnQsIHRoZSBgYGRba2V5XWBgIG9wZXJhdGlvbiBjYWxscyB0aGF0XG4gICAgICBtZXRob2Qgd2l0aCB0aGUga2V5ICprZXkqIGFzIGFyZ3VtZW50LiAgVGhlIGBgZFtrZXldYGAgb3BlcmF0aW9uXG4gICAgICB0aGVuIHJldHVybnMgb3IgcmFpc2VzIHdoYXRldmVyIGlzIHJldHVybmVkIG9yIHJhaXNlZCBieSB0aGVcbiAgICAgIGBgX19taXNzaW5nX18oa2V5KWBgIGNhbGwgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudC4gTm8gb3RoZXJcbiAgICAgIG9wZXJhdGlvbnMgb3IgbWV0aG9kcyBpbnZva2UgYGBfX21pc3NpbmdfXygpYGAuIElmXG4gICAgICBgYF9fbWlzc2luZ19fKClgYCBpcyBub3QgZGVmaW5lZCwgYGBLZXlFcnJvcmBgIGlzIHJhaXNlZC5cbiAgICAgIGBgX19taXNzaW5nX18oKWBgIG11c3QgYmUgYSBtZXRob2Q7IGl0IGNhbm5vdCBiZSBhbiBpbnN0YW5jZVxuICAgICAgdmFyaWFibGU6XG5cbiAgICAgICAgID4+PiBjbGFzcyBDb3VudGVyKGRpY3QpOlxuICAgICAgICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgICAgICAgIC4uLiAgICAgICAgIHJldHVybiAwXG4gICAgICAgICA+Pj4gYyA9IENvdW50ZXIoKVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDBcbiAgICAgICAgID4+PiBjW1wncmVkXCddICs9IDFcbiAgICAgICAgID4+PiBjW1wncmVkXCddXG4gICAgICAgICAxXG5cbiAgICAgIFNlZSBgYGNvbGxlY3Rpb25zLkNvdW50ZXJgYCBmb3IgYSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvblxuICAgICAgaW5jbHVkaW5nIG90aGVyIG1ldGhvZHMgaGVscGZ1bCBmb3IgYWNjdW11bGF0aW5nIGFuZCBtYW5hZ2luZ1xuICAgICAgdGFsbGllcy5cblxuICAgZFtrZXldID0gdmFsdWVcblxuICAgICAgU2V0IGBgZFtrZXldYGAgdG8gKnZhbHVlKi5cblxuICAgZGVsIGRba2V5XVxuXG4gICAgICBSZW1vdmUgYGBkW2tleV1gYCBmcm9tICpkKi4gIFJhaXNlcyBhIGBgS2V5RXJyb3JgYCBpZiAqa2V5KiBpc1xuICAgICAgbm90IGluIHRoZSBtYXAuXG5cbiAgIGtleSBpbiBkXG5cbiAgICAgIFJldHVybiBgYFRydWVgYCBpZiAqZCogaGFzIGEga2V5ICprZXkqLCBlbHNlIGBgRmFsc2VgYC5cblxuICAga2V5IG5vdCBpbiBkXG5cbiAgICAgIEVxdWl2YWxlbnQgdG8gYGBub3Qga2V5IGluIGRgYC5cblxuICAgaXRlcihkKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cyBvZiB0aGUgZGljdGlvbmFyeS4gIFRoaXMgaXMgYVxuICAgICAgc2hvcnRjdXQgZm9yIGBgaXRlcihkLmtleXMoKSlgYC5cblxuICAgY2xlYXIoKVxuXG4gICAgICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuXG5cbiAgIGNvcHkoKVxuXG4gICAgICBSZXR1cm4gYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRpY3Rpb25hcnkuXG5cbiAgIGNsYXNzbWV0aG9kIGZyb21rZXlzKHNlcVssIHZhbHVlXSlcblxuICAgICAgQ3JlYXRlIGEgbmV3IGRpY3Rpb25hcnkgd2l0aCBrZXlzIGZyb20gKnNlcSogYW5kIHZhbHVlcyBzZXQgdG9cbiAgICAgICp2YWx1ZSouXG5cbiAgICAgIGBgZnJvbWtleXMoKWBgIGlzIGEgY2xhc3MgbWV0aG9kIHRoYXQgcmV0dXJucyBhIG5ldyBkaWN0aW9uYXJ5LlxuICAgICAgKnZhbHVlKiBkZWZhdWx0cyB0byBgYE5vbmVgYC5cblxuICAgZ2V0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBSZXR1cm4gdGhlIHZhbHVlIGZvciAqa2V5KiBpZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgZWxzZVxuICAgICAgKmRlZmF1bHQqLiBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byBgYE5vbmVgYCxcbiAgICAgIHNvIHRoYXQgdGhpcyBtZXRob2QgbmV2ZXIgcmFpc2VzIGEgYGBLZXlFcnJvcmBgLlxuXG4gICBpdGVtcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGl0ZW1zIChgYChrZXksIHZhbHVlKWBgXG4gICAgICBwYWlycykuIFNlZSB0aGUgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAga2V5cygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGtleXMuICBTZWUgdGhlXG4gICAgICAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG4gICBwb3Aoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZW1vdmUgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUsXG4gICAgICBlbHNlIHJldHVybiAqZGVmYXVsdCouICBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuIGFuZCAqa2V5KiBpc1xuICAgICAgbm90IGluIHRoZSBkaWN0aW9uYXJ5LCBhIGBgS2V5RXJyb3JgYCBpcyByYWlzZWQuXG5cbiAgIHBvcGl0ZW0oKVxuXG4gICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBhcmJpdHJhcnkgYGAoa2V5LCB2YWx1ZSlgYCBwYWlyIGZyb20gdGhlXG4gICAgICBkaWN0aW9uYXJ5LlxuXG4gICAgICBgYHBvcGl0ZW0oKWBgIGlzIHVzZWZ1bCB0byBkZXN0cnVjdGl2ZWx5IGl0ZXJhdGUgb3ZlciBhXG4gICAgICBkaWN0aW9uYXJ5LCBhcyBvZnRlbiB1c2VkIGluIHNldCBhbGdvcml0aG1zLiAgSWYgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIGVtcHR5LCBjYWxsaW5nIGBgcG9waXRlbSgpYGAgcmFpc2VzIGEgYGBLZXlFcnJvcmBgLlxuXG4gICBzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmV0dXJuIGl0cyB2YWx1ZS4gIElmIG5vdCwgaW5zZXJ0XG4gICAgICAqa2V5KiB3aXRoIGEgdmFsdWUgb2YgKmRlZmF1bHQqIGFuZCByZXR1cm4gKmRlZmF1bHQqLiAgKmRlZmF1bHQqXG4gICAgICBkZWZhdWx0cyB0byBgYE5vbmVgYC5cblxuICAgdXBkYXRlKFtvdGhlcl0pXG5cbiAgICAgIFVwZGF0ZSB0aGUgZGljdGlvbmFyeSB3aXRoIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSAqb3RoZXIqLFxuICAgICAgb3ZlcndyaXRpbmcgZXhpc3Rpbmcga2V5cy4gIFJldHVybiBgYE5vbmVgYC5cblxuICAgICAgYGB1cGRhdGUoKWBgIGFjY2VwdHMgZWl0aGVyIGFub3RoZXIgZGljdGlvbmFyeSBvYmplY3Qgb3IgYW5cbiAgICAgIGl0ZXJhYmxlIG9mIGtleS92YWx1ZSBwYWlycyAoYXMgdHVwbGVzIG9yIG90aGVyIGl0ZXJhYmxlcyBvZlxuICAgICAgbGVuZ3RoIHR3bykuICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgdGhlbiB1cGRhdGVkIHdpdGggdGhvc2Uga2V5L3ZhbHVlIHBhaXJzOiBgYGQudXBkYXRlKHJlZD0xLFxuICAgICAgYmx1ZT0yKWBgLlxuXG4gICB2YWx1ZXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyB2YWx1ZXMuICBTZWUgdGhlXG4gICAgICAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG5TZWUgYWxzbzpcblxuICAgYGB0eXBlcy5NYXBwaW5nUHJveHlUeXBlYGAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgcmVhZC1vbmx5IHZpZXdcbiAgIG9mIGEgYGBkaWN0YGAuXG5cblxuRGljdGlvbmFyeSB2aWV3IG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvYmplY3RzIHJldHVybmVkIGJ5IGBgZGljdC5rZXlzKClgYCwgYGBkaWN0LnZhbHVlcygpYGAgYW5kXG5gYGRpY3QuaXRlbXMoKWBgIGFyZSAqdmlldyBvYmplY3RzKi4gIFRoZXkgcHJvdmlkZSBhIGR5bmFtaWMgdmlldyBvblxudGhlIGRpY3Rpb25hcnlcJ3MgZW50cmllcywgd2hpY2ggbWVhbnMgdGhhdCB3aGVuIHRoZSBkaWN0aW9uYXJ5XG5jaGFuZ2VzLCB0aGUgdmlldyByZWZsZWN0cyB0aGVzZSBjaGFuZ2VzLlxuXG5EaWN0aW9uYXJ5IHZpZXdzIGNhbiBiZSBpdGVyYXRlZCBvdmVyIHRvIHlpZWxkIHRoZWlyIHJlc3BlY3RpdmUgZGF0YSxcbmFuZCBzdXBwb3J0IG1lbWJlcnNoaXAgdGVzdHM6XG5cbmxlbihkaWN0dmlldylcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeS5cblxuaXRlcihkaWN0dmlldylcblxuICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMsIHZhbHVlcyBvciBpdGVtcyAocmVwcmVzZW50ZWQgYXNcbiAgIHR1cGxlcyBvZiBgYChrZXksIHZhbHVlKWBgKSBpbiB0aGUgZGljdGlvbmFyeS5cblxuICAgS2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIGFuIGFyYml0cmFyeSBvcmRlciB3aGljaCBpc1xuICAgbm9uLXJhbmRvbSwgdmFyaWVzIGFjcm9zcyBQeXRob24gaW1wbGVtZW50YXRpb25zLCBhbmQgZGVwZW5kcyBvblxuICAgdGhlIGRpY3Rpb25hcnlcJ3MgaGlzdG9yeSBvZiBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMuIElmIGtleXMsXG4gICB2YWx1ZXMgYW5kIGl0ZW1zIHZpZXdzIGFyZSBpdGVyYXRlZCBvdmVyIHdpdGggbm8gaW50ZXJ2ZW5pbmdcbiAgIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRpY3Rpb25hcnksIHRoZSBvcmRlciBvZiBpdGVtcyB3aWxsIGRpcmVjdGx5XG4gICBjb3JyZXNwb25kLiAgVGhpcyBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGBgKHZhbHVlLCBrZXkpYGAgcGFpcnNcbiAgIHVzaW5nIGBgemlwKClgYDogYGBwYWlycyA9IHppcChkLnZhbHVlcygpLCBkLmtleXMoKSlgYC4gIEFub3RoZXJcbiAgIHdheSB0byBjcmVhdGUgdGhlIHNhbWUgbGlzdCBpcyBgYHBhaXJzID0gWyh2LCBrKSBmb3IgKGssIHYpIGluXG4gICBkLml0ZW1zKCldYGAuXG5cbiAgIEl0ZXJhdGluZyB2aWV3cyB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeVxuICAgbWF5IHJhaXNlIGEgYGBSdW50aW1lRXJyb3JgYCBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcy5cblxueCBpbiBkaWN0dmlld1xuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgKngqIGlzIGluIHRoZSB1bmRlcmx5aW5nIGRpY3Rpb25hcnlcJ3Mga2V5cyxcbiAgIHZhbHVlcyBvciBpdGVtcyAoaW4gdGhlIGxhdHRlciBjYXNlLCAqeCogc2hvdWxkIGJlIGEgYGAoa2V5LFxuICAgdmFsdWUpYGAgdHVwbGUpLlxuXG5LZXlzIHZpZXdzIGFyZSBzZXQtbGlrZSBzaW5jZSB0aGVpciBlbnRyaWVzIGFyZSB1bmlxdWUgYW5kIGhhc2hhYmxlLlxuSWYgYWxsIHZhbHVlcyBhcmUgaGFzaGFibGUsIHNvIHRoYXQgYGAoa2V5LCB2YWx1ZSlgYCBwYWlycyBhcmUgdW5pcXVlXG5hbmQgaGFzaGFibGUsIHRoZW4gdGhlIGl0ZW1zIHZpZXcgaXMgYWxzbyBzZXQtbGlrZS4gIChWYWx1ZXMgdmlld3MgYXJlXG5ub3QgdHJlYXRlZCBhcyBzZXQtbGlrZSBzaW5jZSB0aGUgZW50cmllcyBhcmUgZ2VuZXJhbGx5IG5vdCB1bmlxdWUuKVxuRm9yIHNldC1saWtlIHZpZXdzLCBhbGwgb2YgdGhlIG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIGFic3RyYWN0XG5iYXNlIGNsYXNzIGBgY29sbGVjdGlvbnMuYWJjLlNldGBgIGFyZSBhdmFpbGFibGUgKGZvciBleGFtcGxlLCBgYD09YGAsXG5gYDxgYCwgb3IgYGBeYGApLlxuXG5BbiBleGFtcGxlIG9mIGRpY3Rpb25hcnkgdmlldyB1c2FnZTpcblxuICAgPj4+IGRpc2hlcyA9IHtcJ2VnZ3NcJzogMiwgXCdzYXVzYWdlXCc6IDEsIFwnYmFjb25cJzogMSwgXCdzcGFtXCc6IDUwMH1cbiAgID4+PiBrZXlzID0gZGlzaGVzLmtleXMoKVxuICAgPj4+IHZhbHVlcyA9IGRpc2hlcy52YWx1ZXMoKVxuXG4gICA+Pj4gIyBpdGVyYXRpb25cbiAgID4+PiBuID0gMFxuICAgPj4+IGZvciB2YWwgaW4gdmFsdWVzOlxuICAgLi4uICAgICBuICs9IHZhbFxuICAgPj4+IHByaW50KG4pXG4gICA1MDRcblxuICAgPj4+ICMga2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIHRoZSBzYW1lIG9yZGVyXG4gICA+Pj4gbGlzdChrZXlzKVxuICAgW1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2F1c2FnZVwnLCBcJ3NwYW1cJ11cbiAgID4+PiBsaXN0KHZhbHVlcylcbiAgIFsyLCAxLCAxLCA1MDBdXG5cbiAgID4+PiAjIHZpZXcgb2JqZWN0cyBhcmUgZHluYW1pYyBhbmQgcmVmbGVjdCBkaWN0IGNoYW5nZXNcbiAgID4+PiBkZWwgZGlzaGVzW1wnZWdnc1wnXVxuICAgPj4+IGRlbCBkaXNoZXNbXCdzYXVzYWdlXCddXG4gICA+Pj4gbGlzdChrZXlzKVxuICAgW1wnc3BhbVwnLCBcJ2JhY29uXCddXG5cbiAgID4+PiAjIHNldCBvcGVyYXRpb25zXG4gICA+Pj4ga2V5cyAmIHtcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NhbGFkXCd9XG4gICB7XCdiYWNvblwnfVxuICAgPj4+IGtleXMgXiB7XCdzYXVzYWdlXCcsIFwnanVpY2VcJ31cbiAgIHtcJ2p1aWNlXCcsIFwnc2F1c2FnZVwnLCBcJ2JhY29uXCcsIFwnc3BhbVwnfVxuJywKICAndHlwZXNtZXRob2RzJzogJ1xuTWV0aG9kc1xuKioqKioqKlxuXG5NZXRob2RzIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIHVzaW5nIHRoZSBhdHRyaWJ1dGUgbm90YXRpb24uXG5UaGVyZSBhcmUgdHdvIGZsYXZvcnM6IGJ1aWx0LWluIG1ldGhvZHMgKHN1Y2ggYXMgYGBhcHBlbmQoKWBgIG9uXG5saXN0cykgYW5kIGNsYXNzIGluc3RhbmNlIG1ldGhvZHMuICBCdWlsdC1pbiBtZXRob2RzIGFyZSBkZXNjcmliZWRcbndpdGggdGhlIHR5cGVzIHRoYXQgc3VwcG9ydCB0aGVtLlxuXG5JZiB5b3UgYWNjZXNzIGEgbWV0aG9kIChhIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBjbGFzcyBuYW1lc3BhY2UpXG50aHJvdWdoIGFuIGluc3RhbmNlLCB5b3UgZ2V0IGEgc3BlY2lhbCBvYmplY3Q6IGEgKmJvdW5kIG1ldGhvZCogKGFsc29cbmNhbGxlZCAqaW5zdGFuY2UgbWV0aG9kKikgb2JqZWN0LiBXaGVuIGNhbGxlZCwgaXQgd2lsbCBhZGQgdGhlXG5gYHNlbGZgYCBhcmd1bWVudCB0byB0aGUgYXJndW1lbnQgbGlzdC4gIEJvdW5kIG1ldGhvZHMgaGF2ZSB0d29cbnNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgbS5fX3NlbGZfX2BgIGlzIHRoZSBvYmplY3Qgb24gd2hpY2hcbnRoZSBtZXRob2Qgb3BlcmF0ZXMsIGFuZCBgYG0uX19mdW5jX19gYCBpcyB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nXG50aGUgbWV0aG9kLiAgQ2FsbGluZyBgYG0oYXJnLTEsIGFyZy0yLCAuLi4sIGFyZy1uKWBgIGlzIGNvbXBsZXRlbHlcbmVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYG0uX19mdW5jX18obS5fX3NlbGZfXywgYXJnLTEsIGFyZy0yLCAuLi4sXG5hcmctbilgYC5cblxuTGlrZSBmdW5jdGlvbiBvYmplY3RzLCBib3VuZCBtZXRob2Qgb2JqZWN0cyBzdXBwb3J0IGdldHRpbmcgYXJiaXRyYXJ5XG5hdHRyaWJ1dGVzLiAgSG93ZXZlciwgc2luY2UgbWV0aG9kIGF0dHJpYnV0ZXMgYXJlIGFjdHVhbGx5IHN0b3JlZCBvblxudGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0IChgYG1ldGguX19mdW5jX19gYCksIHNldHRpbmcgbWV0aG9kXG5hdHRyaWJ1dGVzIG9uIGJvdW5kIG1ldGhvZHMgaXMgZGlzYWxsb3dlZC4gIEF0dGVtcHRpbmcgdG8gc2V0IGFuXG5hdHRyaWJ1dGUgb24gYSBtZXRob2QgcmVzdWx0cyBpbiBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgYmVpbmcgcmFpc2VkLlxuSW4gb3JkZXIgdG8gc2V0IGEgbWV0aG9kIGF0dHJpYnV0ZSwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgaXQgb25cbnRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdDpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIGRlZiBtZXRob2Qoc2VsZik6XG4gICAuLi4gICAgICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5tZXRob2Qud2hvYW1pID0gXCdteSBuYW1lIGlzIG1ldGhvZFwnICAjIGNhblwndCBzZXQgb24gdGhlIG1ldGhvZFxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgQXR0cmlidXRlRXJyb3I6IFwnbWV0aG9kXCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgXCd3aG9hbWlcJ1xuICAgPj4+IGMubWV0aG9kLl9fZnVuY19fLndob2FtaSA9IFwnbXkgbmFtZSBpcyBtZXRob2RcJ1xuICAgPj4+IGMubWV0aG9kLndob2FtaVxuICAgXCdteSBuYW1lIGlzIG1ldGhvZFwnXG5cblNlZSAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCmRpZmYgLS1naXQgYS9MaWIvcXVvcHJpLnB5IGIvTGliL3F1b3ByaS5weQppbmRleCAzZDBmMGFjLi5lNWJkMDEwIDEwMDc1NQotLS0gYS9MaWIvcXVvcHJpLnB5CisrKyBiL0xpYi9xdW9wcmkucHkKQEAgLTIyMyw3ICsyMjMsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlLCAicmIiKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzOiBjYW4ndCBvcGVuICglcylcbiIgJSAoZmlsZSwgbXNnKSkKICAgICAgICAgICAgICAgICBzdHMgPSAxCiAgICAgICAgICAgICAgICAgY29udGludWUKZGlmZiAtLWdpdCBhL0xpYi9yYW5kb20ucHkgYi9MaWIvcmFuZG9tLnB5CmluZGV4IDE0YWM1ZTUuLjgwODE3NWEgMTAwNjQ0Ci0tLSBhL0xpYi9yYW5kb20ucHkKKysrIGIvTGliL3JhbmRvbS5weQpAQCAtNDEsNyArNDEsNyBAQAogZnJvbSBtYXRoIGltcG9ydCBsb2cgYXMgX2xvZywgZXhwIGFzIF9leHAsIHBpIGFzIF9waSwgZSBhcyBfZSwgY2VpbCBhcyBfY2VpbAogZnJvbSBtYXRoIGltcG9ydCBzcXJ0IGFzIF9zcXJ0LCBhY29zIGFzIF9hY29zLCBjb3MgYXMgX2Nvcywgc2luIGFzIF9zaW4KIGZyb20gb3MgaW1wb3J0IHVyYW5kb20gYXMgX3VyYW5kb20KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBTZXQgYXMgX1NldCwgU2VxdWVuY2UgYXMgX1NlcXVlbmNlCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IFNldCBhcyBfU2V0LCBTZXF1ZW5jZSBhcyBfU2VxdWVuY2UKIGZyb20gaGFzaGxpYiBpbXBvcnQgc2hhNTEyIGFzIF9zaGE1MTIKIAogX19hbGxfXyA9IFsiUmFuZG9tIiwic2VlZCIsInJhbmRvbSIsInVuaWZvcm0iLCJyYW5kaW50IiwiY2hvaWNlIiwic2FtcGxlIiwKQEAgLTE1MSw2ICsxNTEsOSBAQAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSBwaWNrbGUgc3VwcG9ydCAgLS0tLS0tLS0tLS0tLS0tLS0tLQogCisgICAgIyBJc3N1ZSAxNzQ4OTogU2luY2UgX19yZWR1Y2VfXyB3YXMgZGVmaW5lZCB0byBmaXggIzc1OTg4OSB0aGlzIGlzIG5vCisgICAgIyBsb25nZXIgY2FsbGVkOyB3ZSBsZWF2ZSBpdCBoZXJlIGJlY2F1c2UgaXQgaGFzIGJlZW4gaGVyZSBzaW5jZSByYW5kb20gd2FzCisgICAgIyByZXdyaXR0ZW4gYmFjayBpbiAyMDAxIGFuZCB3aHkgcmlzayBicmVha2luZyBzb21ldGhpbmcuCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKTogIyBmb3IgcGlja2xlCiAgICAgICAgIHJldHVybiBzZWxmLmdldHN0YXRlKCkKIApAQCAtMjE2LDEwICsyMTksMTEgQEAKICAgICAgICAgICAgICAgICAgICBNZXRob2Q9X01ldGhvZFR5cGUsIEJ1aWx0aW5NZXRob2Q9X0J1aWx0aW5NZXRob2RUeXBlKToKICAgICAgICAgIlJldHVybiBhIHJhbmRvbSBpbnQgaW4gdGhlIHJhbmdlIFswLG4pLiAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgbj09MC4iCiAKKyAgICAgICAgcmFuZG9tID0gc2VsZi5yYW5kb20KICAgICAgICAgZ2V0cmFuZGJpdHMgPSBzZWxmLmdldHJhbmRiaXRzCiAgICAgICAgICMgT25seSBjYWxsIHNlbGYuZ2V0cmFuZGJpdHMgaWYgdGhlIG9yaWdpbmFsIHJhbmRvbSgpIGJ1aWx0aW4gbWV0aG9kCiAgICAgICAgICMgaGFzIG5vdCBiZWVuIG92ZXJyaWRkZW4gb3IgaWYgYSBuZXcgZ2V0cmFuZGJpdHMoKSB3YXMgc3VwcGxpZWQuCi0gICAgICAgIGlmIHR5cGUoc2VsZi5yYW5kb20pIGlzIEJ1aWx0aW5NZXRob2Qgb3IgdHlwZShnZXRyYW5kYml0cykgaXMgTWV0aG9kOgorICAgICAgICBpZiB0eXBlKHJhbmRvbSkgaXMgQnVpbHRpbk1ldGhvZCBvciB0eXBlKGdldHJhbmRiaXRzKSBpcyBNZXRob2Q6CiAgICAgICAgICAgICBrID0gbi5iaXRfbGVuZ3RoKCkgICMgZG9uJ3QgdXNlIChuLTEpIGhlcmUgYmVjYXVzZSBuIGNhbiBiZSAxCiAgICAgICAgICAgICByID0gZ2V0cmFuZGJpdHMoaykgICAgICAgICAgIyAwIDw9IHIgPCAyKiprCiAgICAgICAgICAgICB3aGlsZSByID49IG46CkBAIC0yMjcsNyArMjMxLDYgQEAKICAgICAgICAgICAgIHJldHVybiByCiAgICAgICAgICMgVGhlcmUncyBhbiBvdmVycmlkZW4gcmFuZG9tKCkgbWV0aG9kIGJ1dCBubyBuZXcgZ2V0cmFuZGJpdHMoKSBtZXRob2QsCiAgICAgICAgICMgc28gd2UgY2FuIG9ubHkgdXNlIHJhbmRvbSgpIGZyb20gaGVyZS4KLSAgICAgICAgcmFuZG9tID0gc2VsZi5yYW5kb20KICAgICAgICAgaWYgbiA+PSBtYXhzaXplOgogICAgICAgICAgICAgX3dhcm4oIlVuZGVybHlpbmcgcmFuZG9tKCkgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBseSBcbiIKICAgICAgICAgICAgICAgICAiZW5vdWdoIGJpdHMgdG8gY2hvb3NlIGZyb20gYSBwb3B1bGF0aW9uIHJhbmdlIHRoaXMgbGFyZ2UuXG4iCkBAIC0yNTEsMTAgKzI1NCwxMSBAQAogICAgICAgICByZXR1cm4gc2VxW2ldCiAKICAgICBkZWYgc2h1ZmZsZShzZWxmLCB4LCByYW5kb209Tm9uZSk6Ci0gICAgICAgICIiIngsIHJhbmRvbT1yYW5kb20ucmFuZG9tIC0+IHNodWZmbGUgbGlzdCB4IGluIHBsYWNlOyByZXR1cm4gTm9uZS4KKyAgICAgICAgIiIiU2h1ZmZsZSBsaXN0IHggaW4gcGxhY2UsIGFuZCByZXR1cm4gTm9uZS4KIAotICAgICAgICBPcHRpb25hbCBhcmcgcmFuZG9tIGlzIGEgMC1hcmd1bWVudCBmdW5jdGlvbiByZXR1cm5pbmcgYSByYW5kb20KLSAgICAgICAgZmxvYXQgaW4gWzAuMCwgMS4wKTsgYnkgZGVmYXVsdCwgdGhlIHN0YW5kYXJkIHJhbmRvbS5yYW5kb20uCisgICAgICAgIE9wdGlvbmFsIGFyZ3VtZW50IHJhbmRvbSBpcyBhIDAtYXJndW1lbnQgZnVuY3Rpb24gcmV0dXJuaW5nIGEKKyAgICAgICAgcmFuZG9tIGZsb2F0IGluIFswLjAsIDEuMCk7IGlmIGl0IGlzIHRoZSBkZWZhdWx0IE5vbmUsIHRoZQorICAgICAgICBzdGFuZGFyZCByYW5kb20ucmFuZG9tIHdpbGwgYmUgdXNlZC4KIAogICAgICAgICAiIiIKIApkaWZmIC0tZ2l0IGEvTGliL3JlLnB5IGIvTGliL3JlLnB5CmluZGV4IGZjZWExOTAuLmI0MWFhYjAgMTAwNjQ0Ci0tLSBhL0xpYi9yZS5weQorKysgYi9MaWIvcmUucHkKQEAgLTEyMSw3ICsxMjEsNiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX3BhcnNlCi1pbXBvcnQgZnVuY3Rvb2xzCiAKICMgcHVibGljIHN5bWJvbHMKIF9fYWxsX18gPSBbICJtYXRjaCIsICJzZWFyY2giLCAic3ViIiwgInN1Ym4iLCAic3BsaXQiLCAiZmluZGFsbCIsCmRpZmYgLS1naXQgYS9MaWIvcmxjb21wbGV0ZXIucHkgYi9MaWIvcmxjb21wbGV0ZXIucHkKaW5kZXggM2Y5NzA1My4uOTRmOTM0MSAxMDA2NDQKLS0tIGEvTGliL3JsY29tcGxldGVyLnB5CisrKyBiL0xpYi9ybGNvbXBsZXRlci5weQpAQCAtMjksNiArMjksNyBAQAogCiAiIiIKIAoraW1wb3J0IGF0ZXhpdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgX19tYWluX18KIApAQCAtMTU4LDMgKzE1OSw3IEBACiAgICAgcGFzcwogZWxzZToKICAgICByZWFkbGluZS5zZXRfY29tcGxldGVyKENvbXBsZXRlcigpLmNvbXBsZXRlKQorICAgICMgUmVsZWFzZSByZWZlcmVuY2VzIGVhcmx5IGF0IHNodXRkb3duICh0aGUgcmVhZGxpbmUgbW9kdWxlJ3MKKyAgICAjIGNvbnRlbnRzIGFyZSBxdWFzaS1pbW1vcnRhbCwgYW5kIHRoZSBjb21wbGV0ZXIgZnVuY3Rpb24gaG9sZHMgYQorICAgICMgcmVmZXJlbmNlIHRvIGdsb2JhbHMpLgorICAgIGF0ZXhpdC5yZWdpc3RlcihsYW1iZGE6IHJlYWRsaW5lLnNldF9jb21wbGV0ZXIoTm9uZSkpCmRpZmYgLS1naXQgYS9MaWIvcnVucHkucHkgYi9MaWIvcnVucHkucHkKaW5kZXggMzljMGU5Zi4uMWUwYTJiZSAxMDA2NDQKLS0tIGEvTGliL3J1bnB5LnB5CisrKyBiL0xpYi9ydW5weS5weQpAQCAtMTMsNyArMTMsNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeSAjIGltcG9ydGxpYiBmaXJzdCBzbyB3ZSBjYW4gdGVzdCAjMTUzODYgdmlhIC1tCi1pbXBvcnQgaW1wCitpbXBvcnQgdHlwZXMKIGZyb20gcGtndXRpbCBpbXBvcnQgcmVhZF9jb2RlLCBnZXRfbG9hZGVyLCBnZXRfaW1wb3J0ZXIKIAogX19hbGxfXyA9IFsKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAiIiJUZW1wb3JhcmlseSByZXBsYWNlIGEgbW9kdWxlIGluIHN5cy5tb2R1bGVzIHdpdGggYW4gZW1wdHkgbmFtZXNwYWNlIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZF9uYW1lKToKICAgICAgICAgc2VsZi5tb2RfbmFtZSA9IG1vZF9uYW1lCi0gICAgICAgIHNlbGYubW9kdWxlID0gaW1wLm5ld19tb2R1bGUobW9kX25hbWUpCisgICAgICAgIHNlbGYubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2RfbmFtZSkKICAgICAgICAgc2VsZi5fc2F2ZWRfbW9kdWxlID0gW10KIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CkBAIC0yMjMsNyArMjIzLDEyIEBACiAgICAgICAgIHJ1bl9uYW1lID0gIjxydW5fcGF0aD4iCiAgICAgcGtnX25hbWUgPSBydW5fbmFtZS5ycGFydGl0aW9uKCIuIilbMF0KICAgICBpbXBvcnRlciA9IGdldF9pbXBvcnRlcihwYXRoX25hbWUpCi0gICAgaWYgaXNpbnN0YW5jZShpbXBvcnRlciwgKHR5cGUoTm9uZSksIGltcC5OdWxsSW1wb3J0ZXIpKToKKyAgICAjIFRyeWluZyB0byBhdm9pZCBpbXBvcnRpbmcgaW1wIHNvIGFzIHRvIG5vdCBjb25zdW1lIHRoZSBkZXByZWNhdGlvbiB3YXJuaW5nLgorICAgIGlzX051bGxJbXBvcnRlciA9IEZhbHNlCisgICAgaWYgdHlwZShpbXBvcnRlcikuX19tb2R1bGVfXyA9PSAnaW1wJzoKKyAgICAgICAgaWYgdHlwZShpbXBvcnRlcikuX19uYW1lX18gPT0gJ051bGxJbXBvcnRlcic6CisgICAgICAgICAgICBpc19OdWxsSW1wb3J0ZXIgPSBUcnVlCisgICAgaWYgaXNpbnN0YW5jZShpbXBvcnRlciwgdHlwZShOb25lKSkgb3IgaXNfTnVsbEltcG9ydGVyOgogICAgICAgICAjIE5vdCBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5LCBzbyBydW4gdGhlIGNvZGUgZGlyZWN0bHkKICAgICAgICAgIyBleGVjZmlsZSgpIGRvZXNuJ3QgaGVscCBhcyB3ZSB3YW50IHRvIGFsbG93IGNvbXBpbGVkIGZpbGVzCiAgICAgICAgIGNvZGUsIG1vZF9sb2FkZXIgPSBfZ2V0X2NvZGVfZnJvbV9maWxlKHJ1bl9uYW1lLCBwYXRoX25hbWUpCmRpZmYgLS1naXQgYS9MaWIvc2NoZWQucHkgYi9MaWIvc2NoZWQucHkKaW5kZXggYjlhN2FkMS4uMmU2YjAwYSAxMDA2NDQKLS0tIGEvTGliL3NjaGVkLnB5CisrKyBiL0xpYi9zY2hlZC5weQpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBrd2FyZ3MgaXMgX3NlbnRpbmVsOgogICAgICAgICAgICAga3dhcmdzID0ge30KKyAgICAgICAgZXZlbnQgPSBFdmVudCh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICBldmVudCA9IEV2ZW50KHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCiAgICAgICAgICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9xdWV1ZSwgZXZlbnQpCi0gICAgICAgICAgICByZXR1cm4gZXZlbnQgIyBUaGUgSUQKKyAgICAgICAgcmV0dXJuIGV2ZW50ICMgVGhlIElECiAKICAgICBkZWYgZW50ZXIoc2VsZiwgZGVsYXksIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50PSgpLCBrd2FyZ3M9X3NlbnRpbmVsKToKICAgICAgICAgIiIiQSB2YXJpYW50IHRoYXQgc3BlY2lmaWVzIHRoZSB0aW1lIGFzIGEgcmVsYXRpdmUgdGltZS4KQEAgLTgyLDkgKzgyLDggQEAKICAgICAgICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgbW9yZSBjb21tb25seSB1c2VkIGludGVyZmFjZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgdGltZSA9IHNlbGYudGltZWZ1bmMoKSArIGRlbGF5Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5lbnRlcmFicyh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQorICAgICAgICB0aW1lID0gc2VsZi50aW1lZnVuYygpICsgZGVsYXkKKyAgICAgICAgcmV0dXJuIHNlbGYuZW50ZXJhYnModGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKIAogICAgIGRlZiBjYW5jZWwoc2VsZiwgZXZlbnQpOgogICAgICAgICAiIiJSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgcXVldWUuCkBAIC0xNjUsNCArMTY0LDQgQEAKICAgICAgICAgIyB0aGUgYWN0dWFsIG9yZGVyIHRoZXkgd291bGQgYmUgcmV0cmlldmVkLgogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgICAgICBldmVudHMgPSBzZWxmLl9xdWV1ZVs6XQotICAgICAgICAgICAgcmV0dXJuIGxpc3QobWFwKGhlYXBxLmhlYXBwb3AsIFtldmVudHNdKmxlbihldmVudHMpKSkKKyAgICAgICAgcmV0dXJuIGxpc3QobWFwKGhlYXBxLmhlYXBwb3AsIFtldmVudHNdKmxlbihldmVudHMpKSkKZGlmZiAtLWdpdCBhL0xpYi9zZWxlY3RvcnMucHkgYi9MaWIvc2VsZWN0b3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MzhlODUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvc2VsZWN0b3JzLnB5CkBAIC0wLDAgKzEsNDMwIEBACisiIiJTZWxlY3RvcnMgbW9kdWxlLgorCitUaGlzIG1vZHVsZSBhbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTyBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlCitgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4KKyIiIgorCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgTWFwcGluZworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHNlbGVjdAoraW1wb3J0IHN5cworCisKKyMgZ2VuZXJpYyBldmVudHMsIHRoYXQgbXVzdCBiZSBtYXBwZWQgdG8gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgb25lcworRVZFTlRfUkVBRCA9ICgxIDw8IDApCitFVkVOVF9XUklURSA9ICgxIDw8IDEpCisKKworZGVmIF9maWxlb2JqX3RvX2ZkKGZpbGVvYmopOgorICAgICIiIlJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBmcm9tIGEgZmlsZSBvYmplY3QuCisKKyAgICBQYXJhbWV0ZXJzOgorICAgIGZpbGVvYmogLS0gZmlsZSBvYmplY3Qgb3IgZmlsZSBkZXNjcmlwdG9yCisKKyAgICBSZXR1cm5zOgorICAgIGNvcnJlc3BvbmRpbmcgZmlsZSBkZXNjcmlwdG9yCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShmaWxlb2JqLCBpbnQpOgorICAgICAgICBmZCA9IGZpbGVvYmoKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IGludChmaWxlb2JqLmZpbGVubygpKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBmaWxlIG9iamVjdDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyFyfSIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICBpZiBmZCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZmlsZSBkZXNjcmlwdG9yOiB7fSIuZm9ybWF0KGZkKSkKKyAgICByZXR1cm4gZmQKKworCitTZWxlY3RvcktleSA9IG5hbWVkdHVwbGUoJ1NlbGVjdG9yS2V5JywgWydmaWxlb2JqJywgJ2ZkJywgJ2V2ZW50cycsICdkYXRhJ10pCisiIiJPYmplY3QgdXNlZCB0byBhc3NvY2lhdGUgYSBmaWxlIG9iamVjdCB0byBpdHMgYmFja2luZyBmaWxlIGRlc2NyaXB0b3IsCitzZWxlY3RlZCBldmVudCBtYXNrIGFuZCBhdHRhY2hlZCBkYXRhLiIiIgorCisKK2NsYXNzIF9TZWxlY3Rvck1hcHBpbmcoTWFwcGluZyk6CisgICAgIiIiTWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcik6CisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gc2VsZWN0b3IKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3NlbGVjdG9yLl9mZF90b19rZXkpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgZmlsZW9iaik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zZWxlY3Rvci5fZmRfdG9fa2V5W19maWxlb2JqX3RvX2ZkKGZpbGVvYmopXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fc2VsZWN0b3IuX2ZkX3RvX2tleSkKKworCitjbGFzcyBCYXNlU2VsZWN0b3IobWV0YWNsYXNzPUFCQ01ldGEpOgorICAgICIiIkJhc2Ugc2VsZWN0b3IgY2xhc3MuCisKKyAgICBBIHNlbGVjdG9yIHN1cHBvcnRzIHJlZ2lzdGVyaW5nIGZpbGUgb2JqZWN0cyB0byBiZSBtb25pdG9yZWQgZm9yIHNwZWNpZmljCisgICAgSS9PIGV2ZW50cy4KKworICAgIEEgZmlsZSBvYmplY3QgaXMgYSBmaWxlIGRlc2NyaXB0b3Igb3IgYW55IG9iamVjdCB3aXRoIGEgYGZpbGVubygpYCBtZXRob2QuCisgICAgQW4gYXJiaXRyYXJ5IG9iamVjdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIGZpbGUgb2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZAorICAgIGZvciBleGFtcGxlIHRvIHN0b3JlIGNvbnRleHQgaW5mb3JtYXRpb24sIGEgY2FsbGJhY2ssIGV0Yy4KKworICAgIEEgc2VsZWN0b3IgY2FuIHVzZSB2YXJpb3VzIGltcGxlbWVudGF0aW9ucyAoc2VsZWN0KCksIHBvbGwoKSwgZXBvbGwoKS4uLikKKyAgICBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLiBUaGUgZGVmYXVsdCBgU2VsZWN0b3JgIGNsYXNzIHVzZXMgdGhlIG1vc3QKKyAgICBwZXJmb3JtYW50IGltcGxlbWVudGF0aW9uIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIHRoaXMgbWFwcyBmaWxlIGRlc2NyaXB0b3JzIHRvIGtleXMKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5ID0ge30KKyAgICAgICAgIyByZWFkLW9ubHkgbWFwcGluZyByZXR1cm5lZCBieSBnZXRfbWFwKCkKKyAgICAgICAgc2VsZi5fbWFwID0gX1NlbGVjdG9yTWFwcGluZyhzZWxmKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBmaWxlIG9iamVjdC4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBldmVudHMgIC0tIGV2ZW50cyB0byBtb25pdG9yIChiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURSkKKyAgICAgICAgZGF0YSAgICAtLSBhdHRhY2hlZCBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgaW5zdGFuY2UKKyAgICAgICAgIiIiCisgICAgICAgIGlmIChub3QgZXZlbnRzKSBvciAoZXZlbnRzICYgfihFVkVOVF9SRUFEIHwgRVZFTlRfV1JJVEUpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZXZlbnRzOiB7IXJ9Ii5mb3JtYXQoZXZlbnRzKSkKKworICAgICAgICBrZXkgPSBTZWxlY3RvcktleShmaWxlb2JqLCBfZmlsZW9ial90b19mZChmaWxlb2JqKSwgZXZlbnRzLCBkYXRhKQorCisgICAgICAgIGlmIGtleS5mZCBpbiBzZWxmLl9mZF90b19rZXk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSAoRkQge30pIGlzIGFscmVhZHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqLCBrZXkuZmQpKQorCisgICAgICAgIHNlbGYuX2ZkX3RvX2tleVtrZXkuZmRdID0ga2V5CisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJVbnJlZ2lzdGVyIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fZmRfdG9fa2V5LnBvcChfZmlsZW9ial90b19mZChmaWxlb2JqKSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gaXMgbm90IHJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiBtb2RpZnkoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAiIiJDaGFuZ2UgYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0IG1vbml0b3JlZCBldmVudHMgb3IgYXR0YWNoZWQgZGF0YS4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBldmVudHMgIC0tIGV2ZW50cyB0byBtb25pdG9yIChiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURSkKKyAgICAgICAgZGF0YSAgICAtLSBhdHRhY2hlZCBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgaW5zdGFuY2UKKyAgICAgICAgIiIiCisgICAgICAgICMgVE9ETzogU3ViY2xhc3NlcyBjYW4gcHJvYmFibHkgb3B0aW1pemUgdGhpcyBldmVuIGZ1cnRoZXIuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2ZkX3RvX2tleVtfZmlsZW9ial90b19mZChmaWxlb2JqKV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gaXMgbm90IHJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisgICAgICAgIGlmIGV2ZW50cyAhPSBrZXkuZXZlbnRzIG9yIGRhdGEgIT0ga2V5LmRhdGE6CisgICAgICAgICAgICAjIFRPRE86IElmIG9ubHkgdGhlIGRhdGEgY2hhbmdlZCwgdXNlIGEgc2hvcnRjdXQgdGhhdCBvbmx5CisgICAgICAgICAgICAjIHVwZGF0ZXMgdGhlIGRhdGEuCisgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiUGVyZm9ybSB0aGUgYWN0dWFsIHNlbGVjdGlvbiwgdW50aWwgc29tZSBtb25pdG9yZWQgZmlsZSBvYmplY3RzIGFyZQorICAgICAgICByZWFkeSBvciBhIHRpbWVvdXQgZXhwaXJlcy4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICB0aW1lb3V0IC0tIGlmIHRpbWVvdXQgPiAwLCB0aGlzIHNwZWNpZmllcyB0aGUgbWF4aW11bSB3YWl0IHRpbWUsIGluCisgICAgICAgICAgICAgICAgICAgc2Vjb25kcworICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPD0gMCwgdGhlIHNlbGVjdCgpIGNhbGwgd29uJ3QgYmxvY2ssIGFuZCB3aWxsCisgICAgICAgICAgICAgICAgICAgcmVwb3J0IHRoZSBjdXJyZW50bHkgcmVhZHkgZmlsZSBvYmplY3RzCisgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lLCBzZWxlY3QoKSB3aWxsIGJsb2NrIHVudGlsIGEgbW9uaXRvcmVkCisgICAgICAgICAgICAgICAgICAgZmlsZSBvYmplY3QgYmVjb21lcyByZWFkeQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIGxpc3Qgb2YgKGtleSwgZXZlbnRzKSBmb3IgcmVhZHkgZmlsZSBvYmplY3RzCisgICAgICAgIGBldmVudHNgIGlzIGEgYml0d2lzZSBtYXNrIG9mIEVWRU5UX1JFQUR8RVZFTlRfV1JJVEUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgc2VsZWN0b3IuCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2ZkX3RvX2tleS5jbGVhcigpCisKKyAgICBkZWYgZ2V0X2tleShzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBrZXkgYXNzb2NpYXRlZCB0byBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgZm9yIHRoaXMgZmlsZSBvYmplY3QKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9mZF90b19rZXlbX2ZpbGVvYmpfdG9fZmQoZmlsZW9iaildCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorCisgICAgZGVmIGdldF9tYXAoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG1hcHBpbmcgb2YgZmlsZSBvYmplY3RzIHRvIHNlbGVjdG9yIGtleXMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tYXAKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfa2V5X2Zyb21fZmQoc2VsZiwgZmQpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHRvIGEgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIGZkIC0tIGZpbGUgZGVzY3JpcHRvcgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIGNvcnJlc3BvbmRpbmcga2V5LCBvciBOb25lIGlmIG5vdCBmb3VuZAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZkX3RvX2tleVtmZF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBTZWxlY3RTZWxlY3RvcihCYXNlU2VsZWN0b3IpOgorICAgICIiIlNlbGVjdC1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX3JlYWRlcnMgPSBzZXQoKQorICAgICAgICBzZWxmLl93cml0ZXJzID0gc2V0KCkKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgc2VsZi5fcmVhZGVycy5hZGQoa2V5LmZkKQorICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlcnMuYWRkKGtleS5mZCkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICBzZWxmLl9yZWFkZXJzLmRpc2NhcmQoa2V5LmZkKQorICAgICAgICBzZWxmLl93cml0ZXJzLmRpc2NhcmQoa2V5LmZkKQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgZGVmIF9zZWxlY3Qoc2VsZiwgciwgdywgXywgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHIsIHcsIHggPSBzZWxlY3Quc2VsZWN0KHIsIHcsIHcsIHRpbWVvdXQpCisgICAgICAgICAgICByZXR1cm4gciwgdyArIHgsIFtdCisgICAgZWxzZToKKyAgICAgICAgX3NlbGVjdCA9IHNlbGVjdC5zZWxlY3QKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgdGltZW91dCA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbWF4KHRpbWVvdXQsIDApCisgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgciwgdywgXyA9IHNlbGYuX3NlbGVjdChzZWxmLl9yZWFkZXJzLCBzZWxmLl93cml0ZXJzLCBbXSwgdGltZW91dCkKKyAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKyAgICAgICAgciA9IHNldChyKQorICAgICAgICB3ID0gc2V0KHcpCisgICAgICAgIGZvciBmZCBpbiByIHwgdzoKKyAgICAgICAgICAgIGV2ZW50cyA9IDAKKyAgICAgICAgICAgIGlmIGZkIGluIHI6CisgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1JFQUQKKyAgICAgICAgICAgIGlmIGZkIGluIHc6CisgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgcmV0dXJuIHJlYWR5CisKKworaWYgaGFzYXR0cihzZWxlY3QsICdwb2xsJyk6CisKKyAgICBjbGFzcyBQb2xsU2VsZWN0b3IoQmFzZVNlbGVjdG9yKToKKyAgICAgICAgIiIiUG9sbC1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX3BvbGwgPSBzZWxlY3QucG9sbCgpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgcG9sbF9ldmVudHMgPSAwCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIHBvbGxfZXZlbnRzIHw9IHNlbGVjdC5QT0xMSU4KKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIHBvbGxfZXZlbnRzIHw9IHNlbGVjdC5QT0xMT1VUCisgICAgICAgICAgICBzZWxmLl9wb2xsLnJlZ2lzdGVyKGtleS5mZCwgcG9sbF9ldmVudHMpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIHNlbGYuX3BvbGwudW5yZWdpc3RlcihrZXkuZmQpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbWF4KGludCgxMDAwICogdGltZW91dCksIDApCisgICAgICAgICAgICByZWFkeSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRfZXZlbnRfbGlzdCA9IHNlbGYuX3BvbGwucG9sbCh0aW1lb3V0KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3IgZmQsIGV2ZW50IGluIGZkX2V2ZW50X2xpc3Q6CisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5QT0xMSU46CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5QT0xMT1VUOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorCisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKworCitpZiBoYXNhdHRyKHNlbGVjdCwgJ2Vwb2xsJyk6CisKKyAgICBjbGFzcyBFcG9sbFNlbGVjdG9yKEJhc2VTZWxlY3Rvcik6CisgICAgICAgICIiIkVwb2xsLWJhc2VkIHNlbGVjdG9yLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgc2VsZi5fZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorCisgICAgICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXBvbGwuZmlsZW5vKCkKKworICAgICAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgICAgICBlcG9sbF9ldmVudHMgPSAwCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIGVwb2xsX2V2ZW50cyB8PSBzZWxlY3QuRVBPTExJTgorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgZXBvbGxfZXZlbnRzIHw9IHNlbGVjdC5FUE9MTE9VVAorICAgICAgICAgICAgc2VsZi5fZXBvbGwucmVnaXN0ZXIoa2V5LmZkLCBlcG9sbF9ldmVudHMpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsLnVucmVnaXN0ZXIoa2V5LmZkKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHRpbWVvdXQgPSAtMSBpZiB0aW1lb3V0IGlzIE5vbmUgZWxzZSBtYXgodGltZW91dCwgMCkKKyAgICAgICAgICAgIG1heF9ldiA9IGxlbihzZWxmLl9mZF90b19rZXkpCisgICAgICAgICAgICByZWFkeSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRfZXZlbnRfbGlzdCA9IHNlbGYuX2Vwb2xsLnBvbGwodGltZW91dCwgbWF4X2V2KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3IgZmQsIGV2ZW50IGluIGZkX2V2ZW50X2xpc3Q6CisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5FUE9MTElOOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuRVBPTExPVVQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2Vwb2xsLmNsb3NlKCkKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAna3F1ZXVlJyk6CisKKyAgICBjbGFzcyBLcXVldWVTZWxlY3RvcihCYXNlU2VsZWN0b3IpOgorICAgICAgICAiIiJLcXVldWUtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICBzZWxmLl9rcXVldWUgPSBzZWxlY3Qua3F1ZXVlKCkKKworICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2txdWV1ZS5maWxlbm8oKQorCisgICAgICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAga2V2ID0gc2VsZWN0LmtldmVudChrZXkuZmQsIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9BREQpCisgICAgICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNvbnRyb2woW2tldl0sIDAsIDApCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9BREQpCisgICAgICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNvbnRyb2woW2tldl0sIDAsIDApCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIGlmIGtleS5ldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfREVMRVRFKQorICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jb250cm9sKFtrZXZdLCAwLCAwKQorICAgICAgICAgICAgaWYga2V5LmV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0RFTEVURSkKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUgZWxzZSBtYXgodGltZW91dCwgMCkKKyAgICAgICAgICAgIG1heF9ldiA9IGxlbihzZWxmLl9mZF90b19rZXkpCisgICAgICAgICAgICByZWFkeSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAga2V2X2xpc3QgPSBzZWxmLl9rcXVldWUuY29udHJvbChOb25lLCBtYXhfZXYsIHRpbWVvdXQpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKKyAgICAgICAgICAgIGZvciBrZXYgaW4ga2V2X2xpc3Q6CisgICAgICAgICAgICAgICAgZmQgPSBrZXYuaWRlbnQKKyAgICAgICAgICAgICAgICBmbGFnID0ga2V2LmZpbHRlcgorICAgICAgICAgICAgICAgIGV2ZW50cyA9IDAKKyAgICAgICAgICAgICAgICBpZiBmbGFnID09IHNlbGVjdC5LUV9GSUxURVJfUkVBRDoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1JFQUQKKyAgICAgICAgICAgICAgICBpZiBmbGFnID09IHNlbGVjdC5LUV9GSUxURVJfV1JJVEU6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorCisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9rcXVldWUuY2xvc2UoKQorICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKworIyBDaG9vc2UgdGhlIGJlc3QgaW1wbGVtZW50YXRpb246IHJvdWdobHksIGVwb2xsfGtxdWV1ZSA+IHBvbGwgPiBzZWxlY3QuCisjIHNlbGVjdCgpIGFsc28gY2FuJ3QgYWNjZXB0IGEgRkQgPiBGRF9TRVRTSVpFICh1c3VhbGx5IGFyb3VuZCAxMDI0KQoraWYgJ0txdWV1ZVNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gS3F1ZXVlU2VsZWN0b3IKK2VsaWYgJ0Vwb2xsU2VsZWN0b3InIGluIGdsb2JhbHMoKToKKyAgICBEZWZhdWx0U2VsZWN0b3IgPSBFcG9sbFNlbGVjdG9yCitlbGlmICdQb2xsU2VsZWN0b3InIGluIGdsb2JhbHMoKToKKyAgICBEZWZhdWx0U2VsZWN0b3IgPSBQb2xsU2VsZWN0b3IKK2Vsc2U6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gU2VsZWN0U2VsZWN0b3IKZGlmZiAtLWdpdCBhL0xpYi9zaGVsdmUucHkgYi9MaWIvc2hlbHZlLnB5CmluZGV4IGNjMTgxNWUuLmNlZjU4MGUgMTAwNjQ0Ci0tLSBhL0xpYi9zaGVsdmUucHkKKysrIGIvTGliL3NoZWx2ZS5weQpAQCAtNjEsNyArNjEsNyBAQAogCiBpbXBvcnQgY29sbGVjdGlvbnMKIAotX19hbGxfXyA9IFsiU2hlbGYiLCJCc2REYlNoZWxmIiwiRGJmaWxlbmFtZVNoZWxmIiwib3BlbiJdCitfX2FsbF9fID0gWyJTaGVsZiIsICJCc2REYlNoZWxmIiwgIkRiZmlsZW5hbWVTaGVsZiIsICJvcGVuIl0KIAogY2xhc3MgX0Nsb3NlZERpY3QoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgogICAgICdNYXJrZXIgZm9yIGEgY2xvc2VkIGRpY3QuICBBY2Nlc3MgYXR0ZW1wdHMgcmFpc2UgYSBWYWx1ZUVycm9yLicKQEAgLTEzMSw2ICsxMzEsMTIgQEAKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuc3luYygpCiAgICAgICAgIHRyeToKQEAgLTE0Nyw2ICsxNTMsNyBAQAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnd3JpdGViYWNrJyk6CiAgICAgICAgICAgICAjIF9faW5pdF9fIGRpZG4ndCBzdWNjZWVkLCBzbyBkb24ndCBib3RoZXIgY2xvc2luZworICAgICAgICAgICAgIyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzMzkwMDcgZm9yIGRldGFpbHMKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvTGliL3NodXRpbC5weSBiL0xpYi9zaHV0aWwucHkKaW5kZXggYTViMmQyNC4uNTAyYmI2NyAxMDA2NDQKLS0tIGEvTGliL3NodXRpbC5weQorKysgYi9MaWIvc2h1dGlsLnB5CkBAIC0zOSwxNyArMzksMjAgQEAKICAgICAgICAgICAgImlnbm9yZV9wYXR0ZXJucyIsICJjaG93biIsICJ3aGljaCJdCiAgICAgICAgICAgICMgZGlza191c2FnZSBpcyBhZGRlZCBsYXRlciwgaWYgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybQogCi1jbGFzcyBFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIEVycm9yKE9TRXJyb3IpOgogICAgIHBhc3MKIAotY2xhc3MgU3BlY2lhbEZpbGVFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIFNhbWVGaWxlRXJyb3IoRXJyb3IpOgorICAgICIiIlJhaXNlZCB3aGVuIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUuIiIiCisKK2NsYXNzIFNwZWNpYWxGaWxlRXJyb3IoT1NFcnJvcik6CiAgICAgIiIiUmFpc2VkIHdoZW4gdHJ5aW5nIHRvIGRvIGEga2luZCBvZiBvcGVyYXRpb24gKGUuZy4gY29weWluZykgd2hpY2ggaXMKICAgICBub3Qgc3VwcG9ydGVkIG9uIGEgc3BlY2lhbCBmaWxlIChlLmcuIGEgbmFtZWQgcGlwZSkiIiIKIAotY2xhc3MgRXhlY0Vycm9yKEVudmlyb25tZW50RXJyb3IpOgorY2xhc3MgRXhlY0Vycm9yKE9TRXJyb3IpOgogICAgICIiIlJhaXNlZCB3aGVuIGEgY29tbWFuZCBjb3VsZCBub3QgYmUgZXhlY3V0ZWQiIiIKIAotY2xhc3MgUmVhZEVycm9yKEVudmlyb25tZW50RXJyb3IpOgorY2xhc3MgUmVhZEVycm9yKE9TRXJyb3IpOgogICAgICIiIlJhaXNlZCB3aGVuIGFuIGFyY2hpdmUgY2Fubm90IGJlIHJlYWQiIiIKIAogY2xhc3MgUmVnaXN0cnlFcnJvcihFeGNlcHRpb24pOgpAQCAtNTcsMTEgKzYwLDYgQEAKICAgICBhbmQgdW5wYWNraW5nIHJlZ2lzdGVyaWVzIGZhaWxzIiIiCiAKIAotdHJ5OgotICAgIFdpbmRvd3NFcnJvcgotZXhjZXB0IE5hbWVFcnJvcjoKLSAgICBXaW5kb3dzRXJyb3IgPSBOb25lCi0KIGRlZiBjb3B5ZmlsZW9iaihmc3JjLCBmZHN0LCBsZW5ndGg9MTYqMTAyNCk6CiAgICAgIiIiY29weSBkYXRhIGZyb20gZmlsZS1saWtlIG9iamVjdCBmc3JjIHRvIGZpbGUtbGlrZSBvYmplY3QgZmRzdCIiIgogICAgIHdoaWxlIDE6CkBAIC05MCw3ICs4OCw3IEBACiAKICAgICAiIiIKICAgICBpZiBfc2FtZWZpbGUoc3JjLCBkc3QpOgotICAgICAgICByYWlzZSBFcnJvcigiYCVzYCBhbmQgYCVzYCBhcmUgdGhlIHNhbWUgZmlsZSIgJSAoc3JjLCBkc3QpKQorICAgICAgICByYWlzZSBTYW1lRmlsZUVycm9yKCJ7IXJ9IGFuZCB7IXJ9IGFyZSB0aGUgc2FtZSBmaWxlIi5mb3JtYXQoc3JjLCBkc3QpKQogCiAgICAgZm9yIGZuIGluIFtzcmMsIGRzdF06CiAgICAgICAgIHRyeToKQEAgLTIyMSw2ICsyMTksOSBAQAogICAgIElmIGZvbGxvd19zeW1saW5rcyBpcyBmYWxzZSwgc3ltbGlua3Mgd29uJ3QgYmUgZm9sbG93ZWQuIFRoaXMKICAgICByZXNlbWJsZXMgR05VJ3MgImNwIC1QIHNyYyBkc3QiLgogCisgICAgSWYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgZmlsZSwgYSBTYW1lRmlsZUVycm9yIHdpbGwgYmUKKyAgICByYWlzZWQuCisKICAgICAiIiIKICAgICBpZiBvcy5wYXRoLmlzZGlyKGRzdCk6CiAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihkc3QsIG9zLnBhdGguYmFzZW5hbWUoc3JjKSkKQEAgLTMyOSwxNSArMzMwLDEzIEBACiAgICAgICAgICMgY29udGludWUgd2l0aCBvdGhlciBmaWxlcwogICAgICAgICBleGNlcHQgRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgZXJyb3JzLmV4dGVuZChlcnIuYXJnc1swXSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgd2h5OgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzcmNuYW1lLCBkc3RuYW1lLCBzdHIod2h5KSkpCiAgICAgdHJ5OgogICAgICAgICBjb3B5c3RhdChzcmMsIGRzdCkKICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6Ci0gICAgICAgIGlmIFdpbmRvd3NFcnJvciBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZSh3aHksIFdpbmRvd3NFcnJvcik6Ci0gICAgICAgICAgICAjIENvcHlpbmcgZmlsZSBhY2Nlc3MgdGltZXMgbWF5IGZhaWwgb24gV2luZG93cwotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgorICAgICAgICAjIENvcHlpbmcgZmlsZSBhY2Nlc3MgdGltZXMgbWF5IGZhaWwgb24gV2luZG93cworICAgICAgICBpZiB3aHkud2luZXJyb3IgaXMgTm9uZToKICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHNyYywgZHN0LCBzdHIod2h5KSkpCiAgICAgaWYgZXJyb3JzOgogICAgICAgICByYWlzZSBFcnJvcihlcnJvcnMpCkBAIC0zNTYsMjQgKzM1NSwyNCBAQAogICAgIG5hbWVzID0gW10KICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgb25lcnJvcihvcy5saXN0ZGlyLCBwYXRoLCBzeXMuZXhjX2luZm8oKSkKICAgICBmb3IgbmFtZSBpbiBuYW1lczoKICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbW9kZSA9IG9zLmxzdGF0KGZ1bGxuYW1lKS5zdF9tb2RlCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBtb2RlID0gMAogICAgICAgICBpZiBzdGF0LlNfSVNESVIobW9kZSk6CiAgICAgICAgICAgICBfcm10cmVlX3Vuc2FmZShmdWxsbmFtZSwgb25lcnJvcikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZnVsbG5hbWUpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBvbmVycm9yKG9zLnVubGluaywgZnVsbG5hbWUsIHN5cy5leGNfaW5mbygpKQogICAgIHRyeToKICAgICAgICAgb3Mucm1kaXIocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIG9uZXJyb3Iob3Mucm1kaXIsIHBhdGgsIHN5cy5leGNfaW5mbygpKQogCiAjIFZlcnNpb24gdXNpbmcgZmQtYmFzZWQgQVBJcyB0byBwcm90ZWN0IGFnYWluc3QgcmFjZXMKQEAgLTQ2NCw3ICs0NjMsNyBAQAogICAgICAgICAgICAgICAgIF9ybXRyZWVfc2FmZV9mZChmZCwgcGF0aCwgb25lcnJvcikKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKHBhdGgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBvbmVycm9yKG9zLnJtZGlyLCBwYXRoLCBzeXMuZXhjX2luZm8oKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3NpdGUucHkgYi9MaWIvc2l0ZS5weQppbmRleCA3ZTA5NzAxLi5iMGQ4MjY4IDEwMDY0NAotLS0gYS9MaWIvc2l0ZS5weQorKysgYi9MaWIvc2l0ZS5weQpAQCAtNTgsMTcgKzU4LDIwIEBACiBiZWNhdXNlIGJhci5wdGggY29tZXMgYWxwaGFiZXRpY2FsbHkgYmVmb3JlIGZvby5wdGg7IGFuZCBzcGFtIGlzCiBvbWl0dGVkIGJlY2F1c2UgaXQgaXMgbm90IG1lbnRpb25lZCBpbiBlaXRoZXIgcGF0aCBjb25maWd1cmF0aW9uIGZpbGUuCiAKLUFmdGVyIHRoZXNlIHBhdGggbWFuaXB1bGF0aW9ucywgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGltcG9ydCBhIG1vZHVsZQorVGhlIHJlYWRsaW5lIG1vZHVsZSBpcyBhbHNvIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZCB0byBlbmFibGUKK2NvbXBsZXRpb24gZm9yIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGl0LiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluCitzaXRlY3VzdG9taXplLCB1c2VyY3VzdG9taXplIG9yIFBZVEhPTlNUQVJUVVAuCisKK0FmdGVyIHRoZXNlIG9wZXJhdGlvbnMsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBpbXBvcnQgYSBtb2R1bGUKIG5hbWVkIHNpdGVjdXN0b21pemUsIHdoaWNoIGNhbiBwZXJmb3JtIGFyYml0cmFyeSBhZGRpdGlvbmFsCiBzaXRlLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zLiAgSWYgdGhpcyBpbXBvcnQgZmFpbHMgd2l0aCBhbgogSW1wb3J0RXJyb3IgZXhjZXB0aW9uLCBpdCBpcyBzaWxlbnRseSBpZ25vcmVkLgotCiAiIiIKIAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCi1pbXBvcnQgcmUKIGltcG9ydCBidWlsdGlucworaW1wb3J0IF9zaXRlYnVpbHRpbnMKIAogIyBQcmVmaXhlcyBmb3Igc2l0ZS1wYWNrYWdlczsgYWRkIGFkZGl0aW9uYWwgcHJlZml4ZXMgbGlrZSAvdXNyL2xvY2FsIGhlcmUKIFBSRUZJWEVTID0gW3N5cy5wcmVmaXgsIHN5cy5leGVjX3ByZWZpeF0KQEAgLTE0NiwxNCArMTQ5LDE0IEBACiAgICAgICAgYW5kIGFkZCB0aGF0IHRvIGtub3duX3BhdGhzLCBvciBleGVjdXRlIGl0IGlmIGl0IHN0YXJ0cyB3aXRoICdpbXBvcnQgJy4KICAgICAiIiIKICAgICBpZiBrbm93bl9wYXRocyBpcyBOb25lOgotICAgICAgICBfaW5pdF9wYXRoaW5mbygpCisgICAgICAgIGtub3duX3BhdGhzID0gX2luaXRfcGF0aGluZm8oKQogICAgICAgICByZXNldCA9IDEKICAgICBlbHNlOgogICAgICAgICByZXNldCA9IDAKICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihzaXRlZGlyLCBuYW1lKQogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZnVsbG5hbWUsICJyIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuCiAgICAgd2l0aCBmOgogICAgICAgICBmb3IgbiwgbGluZSBpbiBlbnVtZXJhdGUoZik6CkBAIC0xOTYsNyArMTk5LDcgQEAKICAgICAgICAga25vd25fcGF0aHMuYWRkKHNpdGVkaXJjYXNlKQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNpdGVkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4KICAgICBuYW1lcyA9IFtuYW1lIGZvciBuYW1lIGluIG5hbWVzIGlmIG5hbWUuZW5kc3dpdGgoIi5wdGgiKV0KICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQobmFtZXMpOgpAQCAtMzAwLDkgKzMwMyw3IEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBzZWVuLmFkZChwcmVmaXgpCiAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKLSAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgogICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQpAQCAtMzI1LDI3ICszMjYsMTUgQEAKICAgICAiIiJBZGQgc2l0ZS1wYWNrYWdlcyAoYW5kIHBvc3NpYmx5IHNpdGUtcHl0aG9uKSB0byBzeXMucGF0aCIiIgogICAgIGZvciBzaXRlZGlyIGluIGdldHNpdGVwYWNrYWdlcyhwcmVmaXhlcyk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2l0ZWRpcik6CisgICAgICAgICAgICBpZiAic2l0ZS1weXRob24iIGluIHNpdGVkaXI6CisgICAgICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybignInNpdGUtcHl0aG9uIiBkaXJlY3RvcmllcyB3aWxsIG5vdCBiZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VwcG9ydGVkIGluIDMuNSBhbnltb3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIGFkZHNpdGVkaXIoc2l0ZWRpciwga25vd25fcGF0aHMpCiAKICAgICByZXR1cm4ga25vd25fcGF0aHMKIAotZGVmIHNldEJFR0lOTElCUEFUSCgpOgotICAgICIiIlRoZSBPUy8yIEVNWCBwb3J0IGhhcyBvcHRpb25hbCBleHRlbnNpb24gbW9kdWxlcyB0aGF0IGRvIGRvdWJsZSBkdXR5Ci0gICAgYXMgRExMcyAoYW5kIG11c3QgdXNlIHRoZSAuRExMIGZpbGUgZXh0ZW5zaW9uKSBmb3Igb3RoZXIgZXh0ZW5zaW9ucy4KLSAgICBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCBuZWVkcyB0byBiZSBhbWVuZGVkIHNvIHRoZXNlIHdpbGwgYmUgZm91bmQKLSAgICBkdXJpbmcgbW9kdWxlIGltcG9ydC4gIFVzZSBCRUdJTkxJQlBBVEggc28gdGhhdCB0aGVzZSBhcmUgYXQgdGhlIHN0YXJ0Ci0gICAgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIHBhdGguCi0KLSAgICAiIiIKLSAgICBkbGxwYXRoID0gb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICJMaWIiLCAibGliLWR5bmxvYWQiKQotICAgIGxpYnBhdGggPSBvcy5lbnZpcm9uWydCRUdJTkxJQlBBVEgnXS5zcGxpdCgnOycpCi0gICAgaWYgbGlicGF0aFstMV06Ci0gICAgICAgIGxpYnBhdGguYXBwZW5kKGRsbHBhdGgpCi0gICAgZWxzZToKLSAgICAgICAgbGlicGF0aFstMV0gPSBkbGxwYXRoCi0gICAgb3MuZW52aXJvblsnQkVHSU5MSUJQQVRIJ10gPSAnOycuam9pbihsaWJwYXRoKQotCi0KIGRlZiBzZXRxdWl0KCk6CiAgICAgIiIiRGVmaW5lIG5ldyBidWlsdGlucyAncXVpdCcgYW5kICdleGl0Jy4KIApAQCAtMzYwLDEyNiArMzQ5LDg5IEBACiAgICAgZWxzZToKICAgICAgICAgZW9mID0gJ0N0cmwtRCAoaS5lLiBFT0YpJwogCi0gICAgY2xhc3MgUXVpdHRlcihvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiAnVXNlICVzKCkgb3IgJXMgdG8gZXhpdCcgJSAoc2VsZi5uYW1lLCBlb2YpCi0gICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjb2RlPU5vbmUpOgotICAgICAgICAgICAgIyBTaGVsbHMgbGlrZSBJRExFIGNhdGNoIHRoZSBTeXN0ZW1FeGl0LCBidXQgbGlzdGVuIHdoZW4gdGhlaXIKLSAgICAgICAgICAgICMgc3RkaW4gd3JhcHBlciBpcyBjbG9zZWQuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGNvZGUpCi0gICAgYnVpbHRpbnMucXVpdCA9IFF1aXR0ZXIoJ3F1aXQnKQotICAgIGJ1aWx0aW5zLmV4aXQgPSBRdWl0dGVyKCdleGl0JykKKyAgICBidWlsdGlucy5xdWl0ID0gX3NpdGVidWlsdGlucy5RdWl0dGVyKCdxdWl0JywgZW9mKQorICAgIGJ1aWx0aW5zLmV4aXQgPSBfc2l0ZWJ1aWx0aW5zLlF1aXR0ZXIoJ2V4aXQnLCBlb2YpCiAKIAotY2xhc3MgX1ByaW50ZXIob2JqZWN0KToKLSAgICAiIiJpbnRlcmFjdGl2ZSBwcm9tcHQgb2JqZWN0cyBmb3IgcHJpbnRpbmcgdGhlIGxpY2Vuc2UgdGV4dCwgYSBsaXN0IG9mCi0gICAgY29udHJpYnV0b3JzIGFuZCB0aGUgY29weXJpZ2h0IG5vdGljZS4iIiIKLQotICAgIE1BWExJTkVTID0gMjMKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkYXRhLCBmaWxlcz0oKSwgZGlycz0oKSk6Ci0gICAgICAgIHNlbGYuX19uYW1lID0gbmFtZQotICAgICAgICBzZWxmLl9fZGF0YSA9IGRhdGEKLSAgICAgICAgc2VsZi5fX2ZpbGVzID0gZmlsZXMKLSAgICAgICAgc2VsZi5fX2RpcnMgPSBkaXJzCi0gICAgICAgIHNlbGYuX19saW5lcyA9IE5vbmUKLQotICAgIGRlZiBfX3NldHVwKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9fbGluZXM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGF0YSA9IE5vbmUKLSAgICAgICAgZm9yIGRpciBpbiBzZWxmLl9fZGlyczoKLSAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLl9fZmlsZXM6Ci0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgInIiKQotICAgICAgICAgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9fZGF0YQotICAgICAgICBzZWxmLl9fbGluZXMgPSBkYXRhLnNwbGl0KCdcbicpCi0gICAgICAgIHNlbGYuX19saW5lY250ID0gbGVuKHNlbGYuX19saW5lcykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fX3NldHVwKCkKLSAgICAgICAgaWYgbGVuKHNlbGYuX19saW5lcykgPD0gc2VsZi5NQVhMSU5FUzoKLSAgICAgICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2VsZi5fX2xpbmVzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICJUeXBlICVzKCkgdG8gc2VlIHRoZSBmdWxsICVzIHRleHQiICUgKChzZWxmLl9fbmFtZSwpKjIpCi0KLSAgICBkZWYgX19jYWxsX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX19zZXR1cCgpCi0gICAgICAgIHByb21wdCA9ICdIaXQgUmV0dXJuIGZvciBtb3JlLCBvciBxIChhbmQgUmV0dXJuKSB0byBxdWl0OiAnCi0gICAgICAgIGxpbmVubyA9IDAKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsaW5lbm8sIGxpbmVubyArIHNlbGYuTUFYTElORVMpOgotICAgICAgICAgICAgICAgICAgICBwcmludChzZWxmLl9fbGluZXNbaV0pCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaW5lbm8gKz0gc2VsZi5NQVhMSU5FUwotICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKLSAgICAgICAgICAgICAgICB3aGlsZSBrZXkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gaW5wdXQocHJvbXB0KQotICAgICAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgnJywgJ3EnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ3EnOgotICAgICAgICAgICAgICAgICAgICBicmVhawotCiBkZWYgc2V0Y29weXJpZ2h0KCk6CiAgICAgIiIiU2V0ICdjb3B5cmlnaHQnIGFuZCAnY3JlZGl0cycgaW4gYnVpbHRpbnMiIiIKLSAgICBidWlsdGlucy5jb3B5cmlnaHQgPSBfUHJpbnRlcigiY29weXJpZ2h0Iiwgc3lzLmNvcHlyaWdodCkKKyAgICBidWlsdGlucy5jb3B5cmlnaHQgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKCJjb3B5cmlnaHQiLCBzeXMuY29weXJpZ2h0KQogICAgIGlmIHN5cy5wbGF0Zm9ybVs6NF0gPT0gJ2phdmEnOgotICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX1ByaW50ZXIoCisgICAgICAgIGJ1aWx0aW5zLmNyZWRpdHMgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKAogICAgICAgICAgICAgImNyZWRpdHMiLAogICAgICAgICAgICAgIkp5dGhvbiBpcyBtYWludGFpbmVkIGJ5IHRoZSBKeXRob24gZGV2ZWxvcGVycyAod3d3Lmp5dGhvbi5vcmcpLiIpCiAgICAgZWxzZToKLSAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9QcmludGVyKCJjcmVkaXRzIiwgIiIiXAorICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigiY3JlZGl0cyIsICIiIlwKICAgICBUaGFua3MgdG8gQ1dJLCBDTlJJLCBCZU9wZW4uY29tLCBab3BlIENvcnBvcmF0aW9uIGFuZCBhIGNhc3Qgb2YgdGhvdXNhbmRzCiAgICAgZm9yIHN1cHBvcnRpbmcgUHl0aG9uIGRldmVsb3BtZW50LiAgU2VlIHd3dy5weXRob24ub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIiIikKICAgICBoZXJlID0gb3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKQotICAgIGJ1aWx0aW5zLmxpY2Vuc2UgPSBfUHJpbnRlcigKKyAgICBidWlsdGlucy5saWNlbnNlID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigKICAgICAgICAgImxpY2Vuc2UiLAotICAgICAgICAiU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8lLjVzL2xpY2Vuc2UvIiAlIHN5cy52ZXJzaW9uLAorICAgICAgICAiU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8lLjVzL2xpY2Vuc2UiICUgc3lzLnZlcnNpb24sCiAgICAgICAgIFsiTElDRU5TRS50eHQiLCAiTElDRU5TRSJdLAogICAgICAgICBbb3MucGF0aC5qb2luKGhlcmUsIG9zLnBhcmRpciksIGhlcmUsIG9zLmN1cmRpcl0pCiAKIAotY2xhc3MgX0hlbHBlcihvYmplY3QpOgotICAgICIiIkRlZmluZSB0aGUgYnVpbHRpbiAnaGVscCcuCi0gICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHB5ZG9jLmhlbHAgKHdpdGggYSB0d2lzdCkuCi0KLSAgICAiIiIKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJUeXBlIGhlbHAoKSBmb3IgaW50ZXJhY3RpdmUgaGVscCwgIiBcCi0gICAgICAgICAgICAgICAib3IgaGVscChvYmplY3QpIGZvciBoZWxwIGFib3V0IG9iamVjdC4iCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICBpbXBvcnQgcHlkb2MKLSAgICAgICAgcmV0dXJuIHB5ZG9jLmhlbHAoKmFyZ3MsICoqa3dkcykKLQogZGVmIHNldGhlbHBlcigpOgotICAgIGJ1aWx0aW5zLmhlbHAgPSBfSGVscGVyKCkKKyAgICBidWlsdGlucy5oZWxwID0gX3NpdGVidWlsdGlucy5fSGVscGVyKCkKKworZGVmIGVuYWJsZXJsY29tcGxldGVyKCk6CisgICAgIiIiRW5hYmxlIGRlZmF1bHQgcmVhZGxpbmUgY29uZmlndXJhdGlvbiBvbiBpbnRlcmFjdGl2ZSBwcm9tcHRzLCBieQorICAgIHJlZ2lzdGVyaW5nIGEgc3lzLl9faW50ZXJhY3RpdmVob29rX18uCisKKyAgICBJZiB0aGUgcmVhZGxpbmUgbW9kdWxlIGNhbiBiZSBpbXBvcnRlZCwgdGhlIGhvb2sgd2lsbCBzZXQgdGhlIFRhYiBrZXkKKyAgICBhcyBjb21wbGV0aW9uIGtleSBhbmQgcmVnaXN0ZXIgfi8ucHl0aG9uX2hpc3RvcnkgYXMgaGlzdG9yeSBmaWxlLgorICAgIFRoaXMgY2FuIGJlIG92ZXJyaWRlbiBpbiB0aGUgc2l0ZWN1c3RvbWl6ZSBvciB1c2VyY3VzdG9taXplIG1vZHVsZSwKKyAgICBvciBpbiBhIFBZVEhPTlNUQVJUVVAgZmlsZS4KKyAgICAiIiIKKyAgICBkZWYgcmVnaXN0ZXJfcmVhZGxpbmUoKToKKyAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgcmVhZGxpbmUKKyAgICAgICAgICAgIGltcG9ydCBybGNvbXBsZXRlcgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFJlYWRpbmcgdGhlIGluaXRpYWxpemF0aW9uIChjb25maWcpIGZpbGUgbWF5IG5vdCBiZSBlbm91Z2ggdG8gc2V0IGEKKyAgICAgICAgIyBjb21wbGV0aW9uIGtleSwgc28gd2Ugc2V0IG9uZSBmaXJzdCBhbmQgdGhlbiByZWFkIHRoZSBmaWxlLgorICAgICAgICByZWFkbGluZV9kb2MgPSBnZXRhdHRyKHJlYWRsaW5lLCAnX19kb2NfXycsICcnKQorICAgICAgICBpZiByZWFkbGluZV9kb2MgaXMgbm90IE5vbmUgYW5kICdsaWJlZGl0JyBpbiByZWFkbGluZV9kb2M6CisgICAgICAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgnYmluZCBeSSBybF9jb21wbGV0ZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgndGFiOiBjb21wbGV0ZScpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVhZGxpbmUucmVhZF9pbml0X2ZpbGUoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICMgQW4gT1NFcnJvciBoZXJlIGNvdWxkIGhhdmUgbWFueSBjYXVzZXMsIGJ1dCB0aGUgbW9zdCBsaWtlbHkgb25lCisgICAgICAgICAgICAjIGlzIHRoYXQgdGhlcmUncyBubyAuaW5wdXRyYyBmaWxlIChvciAuZWRpdHJjIGZpbGUgaW4gdGhlIGNhc2Ugb2YKKyAgICAgICAgICAgICMgTWFjIE9TIFggKyBsaWJlZGl0KSBpbiB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uICBJbiB0aGF0IGNhc2UsIHdlCisgICAgICAgICAgICAjIHdhbnQgdG8gaWdub3JlIHRoZSBleGNlcHRpb24uCisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgcmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgxKSBpcyBOb25lOgorICAgICAgICAgICAgIyBJZiBubyBoaXN0b3J5IHdhcyBsb2FkZWQsIGRlZmF1bHQgdG8gLnB5dGhvbl9oaXN0b3J5LgorICAgICAgICAgICAgIyBUaGUgZ3VhcmQgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGRvdWJsaW5nIGhpc3Rvcnkgc2l6ZSBhdAorICAgICAgICAgICAgIyBlYWNoIGludGVycHJldGVyIGV4aXQgd2hlbiByZWFkbGluZSB3YXMgYWxyZWFkeSBjb25maWd1cmVkCisgICAgICAgICAgICAjIHRocm91Z2ggYSBQWVRIT05TVEFSVFVQIGhvb2ssIHNlZToKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTU4NDUjbXNnMTk4NjM2CisgICAgICAgICAgICBoaXN0b3J5ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcignficpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLnB5dGhvbl9oaXN0b3J5JykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZShoaXN0b3J5KQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZSwgaGlzdG9yeSkKKworICAgIHN5cy5fX2ludGVyYWN0aXZlaG9va19fID0gcmVnaXN0ZXJfcmVhZGxpbmUKIAogZGVmIGFsaWFzbWJjcygpOgogICAgICIiIk9uIFdpbmRvd3MsIHNvbWUgZGVmYXVsdCBlbmNvZGluZ3MgYXJlIG5vdCBwcm92aWRlZCBieSBQeXRob24sCiAgICAgd2hpbGUgdGhleSBhcmUgYWx3YXlzIGF2YWlsYWJsZSBhcyAibWJjcyIgaW4gZWFjaCBsb2NhbGUuIE1ha2UKICAgICB0aGVtIHVzYWJsZSBieSBhbGlhc2luZyB0byAibWJjcyIgaW4gc3VjaCBhIGNhc2UuIiIiCiAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgIGltcG9ydCBsb2NhbGUsIGNvZGVjcwotICAgICAgICBlbmMgPSBsb2NhbGUuZ2V0ZGVmYXVsdGxvY2FsZSgpWzFdCisgICAgICAgIGltcG9ydCBfYm9vdGxvY2FsZSwgY29kZWNzCisgICAgICAgIGVuYyA9IF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQogICAgICAgICBpZiBlbmMuc3RhcnRzd2l0aCgnY3AnKTogICAgICAgICAgICAjICJjcCoqKiIgPwogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNvZGVjcy5sb29rdXAoZW5jKQpAQCAtNDg4LDggKzQ0MCw3IEBACiAgICAgICAgICAgICAgICAgZW5jb2RpbmdzLl9jYWNoZVtlbmNdID0gZW5jb2RpbmdzLl91bmtub3duCiAgICAgICAgICAgICAgICAgZW5jb2RpbmdzLmFsaWFzZXMuYWxpYXNlc1tlbmNdID0gJ21iY3MnCiAKLQotQ09ORklHX0xJTkUgPSByZS5jb21waWxlKHInXig/UDxrZXk+KFx3fFstX10pKylccyo9XHMqKD9QPHZhbHVlPi4qKVxzKiQnKQorQ09ORklHX0xJTkUgPSByJ14oP1A8a2V5Pihcd3xbLV9dKSspXHMqPVxzKig/UDx2YWx1ZT4uKilccyokJwogCiBkZWYgdmVudihrbm93bl9wYXRocyk6CiAgICAgZ2xvYmFsIFBSRUZJWEVTLCBFTkFCTEVfVVNFUl9TSVRFCkBAIC01MTIsMTIgKzQ2MywxNCBAQAogICAgICAgICBdCiAKICAgICBpZiBjYW5kaWRhdGVfY29uZnM6CisgICAgICAgIGltcG9ydCByZQorICAgICAgICBjb25maWdfbGluZSA9IHJlLmNvbXBpbGUoQ09ORklHX0xJTkUpCiAgICAgICAgIHZpcnR1YWxfY29uZiA9IGNhbmRpZGF0ZV9jb25mc1swXQogICAgICAgICBzeXN0ZW1fc2l0ZSA9ICJ0cnVlIgogICAgICAgICB3aXRoIG9wZW4odmlydHVhbF9jb25mKSBhcyBmOgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgbSA9IENPTkZJR19MSU5FLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgbSA9IGNvbmZpZ19saW5lLm1hdGNoKGxpbmUpCiAgICAgICAgICAgICAgICAgaWYgbToKICAgICAgICAgICAgICAgICAgICAgZCA9IG0uZ3JvdXBkaWN0KCkKICAgICAgICAgICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGRbJ2tleSddLmxvd2VyKCksIGRbJ3ZhbHVlJ10KQEAgLTU4OSwxMSArNTQyLDEwIEBACiAgICAgICAgIEVOQUJMRV9VU0VSX1NJVEUgPSBjaGVja19lbmFibGV1c2Vyc2l0ZSgpCiAgICAga25vd25fcGF0aHMgPSBhZGR1c2Vyc2l0ZXBhY2thZ2VzKGtub3duX3BhdGhzKQogICAgIGtub3duX3BhdGhzID0gYWRkc2l0ZXBhY2thZ2VzKGtub3duX3BhdGhzKQotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnb3MyZW14JzoKLSAgICAgICAgc2V0QkVHSU5MSUJQQVRIKCkKICAgICBzZXRxdWl0KCkKICAgICBzZXRjb3B5cmlnaHQoKQogICAgIHNldGhlbHBlcigpCisgICAgZW5hYmxlcmxjb21wbGV0ZXIoKQogICAgIGFsaWFzbWJjcygpCiAgICAgZXhlY3NpdGVjdXN0b21pemUoKQogICAgIGlmIEVOQUJMRV9VU0VSX1NJVEU6CmRpZmYgLS1naXQgYS9MaWIvc210cGQucHkgYi9MaWIvc210cGQucHkKaW5kZXggNzc4ZDZkNi4uMWZhMTU3YSAxMDA3NTUKLS0tIGEvTGliL3NtdHBkLnB5CisrKyBiL0xpYi9zbXRwZC5weQpAQCAtMTIxLDggKzEyMSw5IEBACiAgICAgICAgIH0pCiAgICAgbWF4X2NvbW1hbmRfc2l6ZV9saW1pdCA9IG1heChjb21tYW5kX3NpemVfbGltaXRzLnZhbHVlcygpKQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlciwgY29ubiwgYWRkciwgZGF0YV9zaXplX2xpbWl0PURBVEFfU0laRV9ERUZBVUxUKToKLSAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgbWFwPU5vbmUpOgorICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4sIG1hcD1tYXApCiAgICAgICAgIHNlbGYuc210cF9zZXJ2ZXIgPSBzZXJ2ZXIKICAgICAgICAgc2VsZi5jb25uID0gY29ubgogICAgICAgICBzZWxmLmFkZHIgPSBhZGRyCkBAIC0xMzcsNyArMTM4LDcgQEAKICAgICAgICAgc2VsZi5udW1fYnl0ZXMgPSAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucGVlciA9IGNvbm4uZ2V0cGVlcm5hbWUoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgIyBhIHJhY2UgY29uZGl0aW9uICBtYXkgb2NjdXIgaWYgdGhlIG90aGVyIGVuZCBpcyBjbG9zaW5nCiAgICAgICAgICAgICAjIGJlZm9yZSB3ZSBjYW4gZ2V0IHRoZSBwZWVybmFtZQogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCkBAIC01NzYsMTEgKzU3NywxMSBAQAogICAgIGNoYW5uZWxfY2xhc3MgPSBTTVRQQ2hhbm5lbAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2FsYWRkciwgcmVtb3RlYWRkciwKLSAgICAgICAgICAgICAgICAgZGF0YV9zaXplX2xpbWl0PURBVEFfU0laRV9ERUZBVUxUKToKKyAgICAgICAgICAgICAgICAgZGF0YV9zaXplX2xpbWl0PURBVEFfU0laRV9ERUZBVUxULCBtYXA9Tm9uZSk6CiAgICAgICAgIHNlbGYuX2xvY2FsYWRkciA9IGxvY2FsYWRkcgogICAgICAgICBzZWxmLl9yZW1vdGVhZGRyID0gcmVtb3RlYWRkcgogICAgICAgICBzZWxmLmRhdGFfc2l6ZV9saW1pdCA9IGRhdGFfc2l6ZV9saW1pdAotICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgbWFwPW1hcCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgICAgICAjIHRyeSB0byByZS11c2UgYSBzZXJ2ZXIgcG9ydCBpZiBwb3NzaWJsZQpAQCAtNTk3LDcgKzU5OCw4IEBACiAKICAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIGNvbm4sIGFkZHIpOgogICAgICAgICBwcmludCgnSW5jb21pbmcgY29ubmVjdGlvbiBmcm9tICVzJyAlIHJlcHIoYWRkciksIGZpbGU9REVCVUdTVFJFQU0pCi0gICAgICAgIGNoYW5uZWwgPSBzZWxmLmNoYW5uZWxfY2xhc3Moc2VsZiwgY29ubiwgYWRkciwgc2VsZi5kYXRhX3NpemVfbGltaXQpCisgICAgICAgIGNoYW5uZWwgPSBzZWxmLmNoYW5uZWxfY2xhc3Moc2VsZiwgY29ubiwgYWRkciwgc2VsZi5kYXRhX3NpemVfbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFwKQogCiAgICAgIyBBUEkgZm9yICJkb2luZyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIG1lc3NhZ2UiCiAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CkBAIC02NjgsNyArNjcwLDcgQEAKICAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUFJlY2lwaWVudHNSZWZ1c2VkIGFzIGU6CiAgICAgICAgICAgICBwcmludCgnZ290IFNNVFBSZWNpcGllbnRzUmVmdXNlZCcsIGZpbGU9REVCVUdTVFJFQU0pCiAgICAgICAgICAgICByZWZ1c2VkID0gZS5yZWNpcGllbnRzCi0gICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFBFeGNlcHRpb24pIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgc210cGxpYi5TTVRQRXhjZXB0aW9uKSBhcyBlOgogICAgICAgICAgICAgcHJpbnQoJ2dvdCcsIGUuX19jbGFzc19fLCBmaWxlPURFQlVHU1RSRUFNKQogICAgICAgICAgICAgIyBBbGwgcmVjaXBpZW50cyB3ZXJlIHJlZnVzZWQuICBJZiB0aGUgZXhjZXB0aW9uIGhhZCBhbiBhc3NvY2lhdGVkCiAgICAgICAgICAgICAjIGVycm9yIGNvZGUsIHVzZSBpdC4gIE90aGVyd2lzZSxmYWtlIGl0IHdpdGggYSBub24tdHJpZ2dlcmluZwpAQCAtNzc4LDcgKzc4MCw3IEBACiAgICAgICAgIGlmIG9wdCBpbiAoJy1oJywgJy0taGVscCcpOgogICAgICAgICAgICAgdXNhZ2UoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctVicsICctLXZlcnNpb24nKToKLSAgICAgICAgICAgIHByaW50KF9fdmVyc2lvbl9fLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICBwcmludChfX3ZlcnNpb25fXykKICAgICAgICAgICAgIHN5cy5leGl0KDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLW4nLCAnLS1ub3NldHVpZCcpOgogICAgICAgICAgICAgb3B0aW9ucy5zZXR1aWQgPSAwCkBAIC04NTAsOCArODUyLDcgQEAKICAgICAgICAgbm9ib2R5ID0gcHdkLmdldHB3bmFtKCdub2JvZHknKVsyXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5zZXR1aWQobm9ib2R5KQotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FUEVSTTogcmFpc2UKKyAgICAgICAgZXhjZXB0IFBlcm1pc3Npb25FcnJvcjoKICAgICAgICAgICAgIHByaW50KCdDYW5ub3Qgc2V0dWlkICJub2JvZHkiOyB0cnkgcnVubmluZyB3aXRoIC1uIG9wdGlvbi4nLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICBzeXMuZXhpdCgxKQogICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9zbXRwbGliLnB5IGIvTGliL3NtdHBsaWIucHkKaW5kZXggMDcyYjk3My4uZTFhMzJlZCAxMDA2NDQKLS0tIGEvTGliL3NtdHBsaWIucHkKKysrIGIvTGliL3NtdHBsaWIucHkKQEAgLTY2LDcgKzY2LDcgQEAKIE9MRFNUWUxFX0FVVEggPSByZS5jb21waWxlKHIiYXV0aD0oLiopIiwgcmUuSSkKIAogIyBFeGNlcHRpb24gY2xhc3NlcyB1c2VkIGJ5IHRoaXMgbW9kdWxlLgotY2xhc3MgU01UUEV4Y2VwdGlvbihFeGNlcHRpb24pOgorY2xhc3MgU01UUEV4Y2VwdGlvbihPU0Vycm9yKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBhbGwgZXhjZXB0aW9ucyByYWlzZWQgYnkgdGhpcyBtb2R1bGUuIiIiCiAKIGNsYXNzIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQoU01UUEV4Y2VwdGlvbik6CkBAIC0zMTEsNyArMzExLDcgQEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKCJub25udW1lcmljIHBvcnQiKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJub25udW1lcmljIHBvcnQiKQogICAgICAgICBpZiBub3QgcG9ydDoKICAgICAgICAgICAgIHBvcnQgPSBzZWxmLmRlZmF1bHRfcG9ydAogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgpAQCAtMzMyLDcgKzMzMiw3IEBACiAgICAgICAgICAgICAgICAgcyA9IHMuZW5jb2RlKCJhc2NpaSIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwocykKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVjdGVkKCdTZXJ2ZXIgbm90IGNvbm5lY3RlZCcpCiAgICAgICAgIGVsc2U6CkBAIC0zNjUsNyArMzY1LDcgQEAKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5maWxlLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCgiQ29ubmVjdGlvbiB1bmV4cGVjdGVkbHkgY2xvc2VkOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cihlKSkKQEAgLTkzNCw3ICs5MzQsNyBAQAogICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgc2VsZi5maWxlID0gTm9uZQogICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3QoaG9zdCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgogICAgICAgICAgICAgICAgIHByaW50KCdjb25uZWN0IGZhaWw6JywgaG9zdCwgZmlsZT1zdGRlcnIpCiAgICAgICAgICAgICBpZiBzZWxmLnNvY2s6CmRpZmYgLS1naXQgYS9MaWIvc25kaGRyLnB5IGIvTGliL3NuZGhkci5weQppbmRleCA5ZjVkY2M5Li4yNDBlNTA3IDEwMDY0NAotLS0gYS9MaWIvc25kaGRyLnB5CisrKyBiL0xpYi9zbmRoZHIucHkKQEAgLTExLDcgKzExLDcgQEAKIC0gbnVtYmVyIG9mIGJpdHMvc2FtcGxlLCBvciAnVScgZm9yIFUtTEFXLCBvciAnQScgZm9yIEEtTEFXCiAKIElmIHRoZSBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHJlY29nbml6YWJsZSB0eXBlLCBpdCByZXR1cm5zIE5vbmUuCi1JZiB0aGUgZmlsZSBjYW4ndCBiZSBvcGVuZWQsIElPRXJyb3IgaXMgcmFpc2VkLgorSWYgdGhlIGZpbGUgY2FuJ3QgYmUgb3BlbmVkLCBPU0Vycm9yIGlzIHJhaXNlZC4KIAogVG8gY29tcHV0ZSB0aGUgdG90YWwgdGltZSwgZGl2aWRlIHRoZSBudW1iZXIgb2YgZnJhbWVzIGJ5IHRoZQogc2FtcGxpbmcgcmF0ZSAoYSBmcmFtZSBjb250YWlucyBhIHNhbXBsZSBmb3IgZWFjaCBjaGFubmVsKS4KQEAgLTEzNywxNCArMTM3LDE3IEBACiAKIAogZGVmIHRlc3Rfd2F2KGgsIGYpOgorICAgIGltcG9ydCB3YXZlCiAgICAgIyAnUklGRicgPGxlbj4gJ1dBVkUnICdmbXQgJyA8bGVuPgogICAgIGlmIG5vdCBoLnN0YXJ0c3dpdGgoYidSSUZGJykgb3IgaFs4OjEyXSAhPSBiJ1dBVkUnIG9yIGhbMTI6MTZdICE9IGInZm10ICc6CiAgICAgICAgIHJldHVybiBOb25lCi0gICAgc3R5bGUgPSBnZXRfc2hvcnRfbGUoaFsyMDoyMl0pCi0gICAgbmNoYW5uZWxzID0gZ2V0X3Nob3J0X2xlKGhbMjI6MjRdKQotICAgIHJhdGUgPSBnZXRfbG9uZ19sZShoWzI0OjI4XSkKLSAgICBzYW1wbGVfYml0cyA9IGdldF9zaG9ydF9sZShoWzM0OjM2XSkKLSAgICByZXR1cm4gJ3dhdicsIHJhdGUsIG5jaGFubmVscywgLTEsIHNhbXBsZV9iaXRzCisgICAgZi5zZWVrKDApCisgICAgdHJ5OgorICAgICAgICB3ID0gd2F2ZS5vcGVuZnAoZiwgJ3InKQorICAgIGV4Y2VwdCAoRU9GRXJyb3IsIHdhdmUuRXJyb3IpOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiAoJ3dhdicsIHcuZ2V0ZnJhbWVyYXRlKCksIHcuZ2V0bmNoYW5uZWxzKCksCisgICAgICAgICAgICAgICAgICAgdy5nZXRuZnJhbWVzKCksIDgqdy5nZXRzYW1wd2lkdGgoKSkKIAogdGVzdHMuYXBwZW5kKHRlc3Rfd2F2KQogCkBAIC0yMzAsNyArMjMzLDcgQEAKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByaW50KHdoYXQoZmlsZW5hbWUpKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwcmludCgnKioqIG5vdCBmb3VuZCAqKionKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3NvY2tldC5weSBiL0xpYi9zb2NrZXQucHkKaW5kZXggZDRmMWI2NS4uNTc2YWM1NSAxMDA2NDQKLS0tIGEvTGliL3NvY2tldC5weQorKysgYi9MaWIvc29ja2V0LnB5CkBAIC00OCw2ICs0OCw3IEBACiBmcm9tIF9zb2NrZXQgaW1wb3J0ICoKIAogaW1wb3J0IG9zLCBzeXMsIGlvCitmcm9tIGVudW0gaW1wb3J0IEludEVudW0KIAogdHJ5OgogICAgIGltcG9ydCBlcnJubwpAQCAtNjAsNiArNjEsMzAgQEAKIF9fYWxsX18gPSBbImdldGZxZG4iLCAiY3JlYXRlX2Nvbm5lY3Rpb24iXQogX19hbGxfXy5leHRlbmQob3MuX2dldF9leHBvcnRzX2xpc3QoX3NvY2tldCkpCiAKKyMgU2V0IHVwIHRoZSBzb2NrZXQuQUZfKiBzb2NrZXQuU09DS18qIGNvbnN0YW50cyBhcyBtZW1iZXJzIG9mIEludEVudW1zIGZvcgorIyBuaWNlciBzdHJpbmcgcmVwcmVzZW50YXRpb25zLgorIyBOb3RlIHRoYXQgX3NvY2tldCBvbmx5IGtub3dzIGFib3V0IHRoZSBpbnRlZ2VyIHZhbHVlcy4gVGhlIHB1YmxpYyBpbnRlcmZhY2UKKyMgaW4gdGhpcyBtb2R1bGUgdW5kZXJzdGFuZHMgdGhlIGVudW1zIGFuZCB0cmFuc2xhdGVzIHRoZW0gYmFjayBmcm9tIGludGVnZXJzCisjIHdoZXJlIG5lZWRlZCAoZS5nLiAuZmFtaWx5IHByb3BlcnR5IG9mIGEgc29ja2V0IG9iamVjdCkuCitBZGRyZXNzRmFtaWx5ID0gSW50RW51bSgnQWRkcmVzc0ZhbWlseScsCisgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTogdmFsdWUgZm9yIG5hbWUsIHZhbHVlIGluIGdsb2JhbHMoKS5pdGVtcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmFtZS5pc3VwcGVyKCkgYW5kIG5hbWUuc3RhcnRzd2l0aCgnQUZfJyl9KQorZ2xvYmFscygpLnVwZGF0ZShBZGRyZXNzRmFtaWx5Ll9fbWVtYmVyc19fKQorCitTb2NrZXRUeXBlID0gSW50RW51bSgnU29ja2V0VHlwZScsCisgICAgICAgICAgICAgICAgICAgICB7bmFtZTogdmFsdWUgZm9yIG5hbWUsIHZhbHVlIGluIGdsb2JhbHMoKS5pdGVtcygpCisgICAgICAgICAgICAgICAgICAgICAgaWYgbmFtZS5pc3VwcGVyKCkgYW5kIG5hbWUuc3RhcnRzd2l0aCgnU09DS18nKX0pCitnbG9iYWxzKCkudXBkYXRlKFNvY2tldFR5cGUuX19tZW1iZXJzX18pCisKK2RlZiBfaW50ZW51bV9jb252ZXJ0ZXIodmFsdWUsIGVudW1fa2xhc3MpOgorICAgICIiIkNvbnZlcnQgYSBudW1lcmljIGZhbWlseSB2YWx1ZSB0byBhbiBJbnRFbnVtIG1lbWJlci4KKworICAgIElmIGl0J3Mgbm90IGEga25vd24gbWVtYmVyLCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaXRzZWxmLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGVudW1fa2xhc3ModmFsdWUpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHJldHVybiB2YWx1ZQogCiBfcmVhbHNvY2tldCA9IHNvY2tldAogCkBAIC05MSw2ICsxMTYsMTAgQEAKICAgICBfX3Nsb3RzX18gPSBbIl9fd2Vha3JlZl9fIiwgIl9pb19yZWZzIiwgIl9jbG9zZWQiXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSk6CisgICAgICAgICMgRm9yIHVzZXIgY29kZSBhZGRyZXNzIGZhbWlseSBhbmQgdHlwZSB2YWx1ZXMgYXJlIEludEVudW0gbWVtYmVycywgYnV0CisgICAgICAgICMgZm9yIHRoZSB1bmRlcmx5aW5nIF9zb2NrZXQuc29ja2V0IHRoZXkncmUganVzdCBpbnRlZ2Vycy4gVGhlCisgICAgICAgICMgY29uc3RydWN0b3Igb2YgX3NvY2tldC5zb2NrZXQgY29udmVydHMgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuCisgICAgICAgICMgaW50ZWdlciBhdXRvbWF0aWNhbGx5LgogICAgICAgICBfc29ja2V0LnNvY2tldC5fX2luaXRfXyhzZWxmLCBmYW1pbHksIHR5cGUsIHByb3RvLCBmaWxlbm8pCiAgICAgICAgIHNlbGYuX2lvX3JlZnMgPSAwCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCkBAIC0xMDMsMTMgKzEzMiwzMiBAQAogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICIiIldyYXAgX19yZXByX18oKSB0byByZXZlYWwgdGhlIHJlYWwgY2xhc3MgbmFtZS4iIiIKLSAgICAgICAgcyA9IF9zb2NrZXQuc29ja2V0Ll9fcmVwcl9fKHNlbGYpCi0gICAgICAgIGlmIHMuc3RhcnRzd2l0aCgiPHNvY2tldCBvYmplY3QiKToKLSAgICAgICAgICAgIHMgPSAiPCVzLiVzJXMlcyIgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgJ19jbG9zZWQnLCBGYWxzZSkgYW5kICIgW2Nsb3NlZF0gIiBvciAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1s3Ol0pCisgICAgICAgICIiIldyYXAgX19yZXByX18oKSB0byByZXZlYWwgdGhlIHJlYWwgY2xhc3MgbmFtZSBhbmQgc29ja2V0CisgICAgICAgIGFkZHJlc3MoZXMpLgorICAgICAgICAiIiIKKyAgICAgICAgY2xvc2VkID0gZ2V0YXR0cihzZWxmLCAnX2Nsb3NlZCcsIEZhbHNlKQorICAgICAgICBzID0gIjwlcy4lcyVzIGZkPSVpLCBmYW1pbHk9JWksIHR5cGU9JWksIHByb3RvPSVpIiBcCisgICAgICAgICAgICAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAiIFtjbG9zZWRdIiBpZiBjbG9zZWQgZWxzZSAiIiwKKyAgICAgICAgICAgICAgIHNlbGYuZmlsZW5vKCksCisgICAgICAgICAgICAgICBzZWxmLmZhbWlseSwKKyAgICAgICAgICAgICAgIHNlbGYudHlwZSwKKyAgICAgICAgICAgICAgIHNlbGYucHJvdG8pCisgICAgICAgIGlmIG5vdCBjbG9zZWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGFkZHIgPSBzZWxmLmdldHNvY2tuYW1lKCkKKyAgICAgICAgICAgICAgICBpZiBsYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgcyArPSAiLCBsYWRkcj0lcyIgJSBzdHIobGFkZHIpCisgICAgICAgICAgICBleGNlcHQgZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhZGRyID0gc2VsZi5nZXRwZWVybmFtZSgpCisgICAgICAgICAgICAgICAgaWYgcmFkZHI6CisgICAgICAgICAgICAgICAgICAgIHMgKz0gIiwgcmFkZHI9JXMiICUgc3RyKHJhZGRyKQorICAgICAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcyArPSAnPicKICAgICAgICAgcmV0dXJuIHMKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CkBAIC0xMTgsNyArMTY2LDggQEAKICAgICBkZWYgZHVwKHNlbGYpOgogICAgICAgICAiIiJkdXAoKSAtPiBzb2NrZXQgb2JqZWN0CiAKLSAgICAgICAgUmV0dXJuIGEgbmV3IHNvY2tldCBvYmplY3QgY29ubmVjdGVkIHRvIHRoZSBzYW1lIHN5c3RlbSByZXNvdXJjZS4KKyAgICAgICAgRHVwbGljYXRlIHRoZSBzb2NrZXQuIFJldHVybiBhIG5ldyBzb2NrZXQgb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgc2FtZQorICAgICAgICBzeXN0ZW0gcmVzb3VyY2UuIFRoZSBuZXcgc29ja2V0IGlzIG5vbi1pbmhlcml0YWJsZS4KICAgICAgICAgIiIiCiAgICAgICAgIGZkID0gZHVwKHNlbGYuZmlsZW5vKCkpCiAgICAgICAgIHNvY2sgPSBzZWxmLl9fY2xhc3NfXyhzZWxmLmZhbWlseSwgc2VsZi50eXBlLCBzZWxmLnByb3RvLCBmaWxlbm89ZmQpCkBAIC0yMTAsNiArMjU5LDMxIEBACiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZGV0YWNoKCkKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmYW1pbHkoc2VsZik6CisgICAgICAgICIiIlJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGFkZHJlc3MgZmFtaWx5IGZvciB0aGlzIHNvY2tldC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfaW50ZW51bV9jb252ZXJ0ZXIoc3VwZXIoKS5mYW1pbHksIEFkZHJlc3NGYW1pbHkpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgIiIiUmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgc29ja2V0IHR5cGUuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2ludGVudW1fY29udmVydGVyKHN1cGVyKCkudHlwZSwgU29ja2V0VHlwZSkKKworICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgZGVmIGdldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCkpCisgICAgICAgIGRlZiBzZXRfaW5oZXJpdGFibGUoc2VsZiwgaW5oZXJpdGFibGUpOgorICAgICAgICAgICAgb3Muc2V0X2hhbmRsZV9pbmhlcml0YWJsZShzZWxmLmZpbGVubygpLCBpbmhlcml0YWJsZSkKKyAgICBlbHNlOgorICAgICAgICBkZWYgZ2V0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldF9pbmhlcml0YWJsZShzZWxmLmZpbGVubygpKQorICAgICAgICBkZWYgc2V0X2luaGVyaXRhYmxlKHNlbGYsIGluaGVyaXRhYmxlKToKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShzZWxmLmZpbGVubygpLCBpbmhlcml0YWJsZSkKKyAgICBnZXRfaW5oZXJpdGFibGUuX19kb2NfXyA9ICJHZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNvY2tldCIKKyAgICBzZXRfaW5oZXJpdGFibGUuX19kb2NfXyA9ICJTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNvY2tldCIKKwogZGVmIGZyb21mZChmZCwgZmFtaWx5LCB0eXBlLCBwcm90bz0wKToKICAgICAiIiIgZnJvbWZkKGZkLCBmYW1pbHksIHR5cGVbLCBwcm90b10pIC0+IHNvY2tldCBvYmplY3QKIApAQCAtMjkxLDcgKzM2NSw3IEBACiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tSZWFkYWJsZSgpCiAgICAgICAgIGlmIHNlbGYuX3RpbWVvdXRfb2NjdXJyZWQ6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2Fubm90IHJlYWQgZnJvbSB0aW1lZCBvdXQgb2JqZWN0IikKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc29jay5yZWN2X2ludG8oYikKQEAgLTQzNSwzICs1MDksMjcgQEAKICAgICAgICAgcmFpc2UgZXJyCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgZXJyb3IoImdldGFkZHJpbmZvIHJldHVybnMgYW4gZW1wdHkgbGlzdCIpCisKK2RlZiBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHk9MCwgdHlwZT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAiIiJSZXNvbHZlIGhvc3QgYW5kIHBvcnQgaW50byBsaXN0IG9mIGFkZHJlc3MgaW5mbyBlbnRyaWVzLgorCisgICAgVHJhbnNsYXRlIHRoZSBob3N0L3BvcnQgYXJndW1lbnQgaW50byBhIHNlcXVlbmNlIG9mIDUtdHVwbGVzIHRoYXQgY29udGFpbgorICAgIGFsbCB0aGUgbmVjZXNzYXJ5IGFyZ3VtZW50cyBmb3IgY3JlYXRpbmcgYSBzb2NrZXQgY29ubmVjdGVkIHRvIHRoYXQgc2VydmljZS4KKyAgICBob3N0IGlzIGEgZG9tYWluIG5hbWUsIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIElQdjQvdjYgYWRkcmVzcyBvcgorICAgIE5vbmUuIHBvcnQgaXMgYSBzdHJpbmcgc2VydmljZSBuYW1lIHN1Y2ggYXMgJ2h0dHAnLCBhIG51bWVyaWMgcG9ydCBudW1iZXIgb3IKKyAgICBOb25lLiBCeSBwYXNzaW5nIE5vbmUgYXMgdGhlIHZhbHVlIG9mIGhvc3QgYW5kIHBvcnQsIHlvdSBjYW4gcGFzcyBOVUxMIHRvCisgICAgdGhlIHVuZGVybHlpbmcgQyBBUEkuCisKKyAgICBUaGUgZmFtaWx5LCB0eXBlIGFuZCBwcm90byBhcmd1bWVudHMgY2FuIGJlIG9wdGlvbmFsbHkgc3BlY2lmaWVkIGluIG9yZGVyIHRvCisgICAgbmFycm93IHRoZSBsaXN0IG9mIGFkZHJlc3NlcyByZXR1cm5lZC4gUGFzc2luZyB6ZXJvIGFzIGEgdmFsdWUgZm9yIGVhY2ggb2YKKyAgICB0aGVzZSBhcmd1bWVudHMgc2VsZWN0cyB0aGUgZnVsbCByYW5nZSBvZiByZXN1bHRzLgorICAgICIiIgorICAgICMgV2Ugb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBzaW5jZSB3ZSB3YW50IHRvIHRyYW5zbGF0ZSB0aGUgbnVtZXJpYyBmYW1pbHkKKyAgICAjIGFuZCBzb2NrZXQgdHlwZSB2YWx1ZXMgdG8gZW51bSBjb25zdGFudHMuCisgICAgYWRkcmxpc3QgPSBbXQorICAgIGZvciByZXMgaW4gX3NvY2tldC5nZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFncyk6CisgICAgICAgIGFmLCBzb2NrdHlwZSwgcHJvdG8sIGNhbm9ubmFtZSwgc2EgPSByZXMKKyAgICAgICAgYWRkcmxpc3QuYXBwZW5kKChfaW50ZW51bV9jb252ZXJ0ZXIoYWYsIEFkZHJlc3NGYW1pbHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9pbnRlbnVtX2NvbnZlcnRlcihzb2NrdHlwZSwgU29ja2V0VHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8sIGNhbm9ubmFtZSwgc2EpKQorICAgIHJldHVybiBhZGRybGlzdApkaWZmIC0tZ2l0IGEvTGliL3NvY2tldHNlcnZlci5weSBiL0xpYi9zb2NrZXRzZXJ2ZXIucHkKaW5kZXggODMzMmZkZi4uZTllNGU0ZSAxMDA2NDQKLS0tIGEvTGliL3NvY2tldHNlcnZlci5weQorKysgYi9MaWIvc29ja2V0c2VydmVyLnB5CkBAIC0yOTksNyArMjk5LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzID0gc2VsZi5nZXRfcmVxdWVzdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYudmVyaWZ5X3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgogICAgICAgICAgICAgdHJ5OgpAQCAtNDc5LDcgKzQ3OSw3IEBACiAgICAgICAgICAgICAjZXhwbGljaXRseSBzaHV0ZG93bi4gIHNvY2tldC5jbG9zZSgpIG1lcmVseSByZWxlYXNlcwogICAgICAgICAgICAgI3RoZSBzb2NrZXQgYW5kIHdhaXRzIGZvciBHQyB0byBwZXJmb3JtIHRoZSBhY3R1YWwgY2xvc2UuCiAgICAgICAgICAgICByZXF1ZXN0LnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MgI3NvbWUgcGxhdGZvcm1zIG1heSByYWlzZSBFTk9UQ09OTiBoZXJlCiAgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQogCkBAIC01MzIsNyArNTMyLDcgQEAKICAgICAgICAgICAgICMgY2hpbGRyZW4uCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKDAsIDApCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwaWQgPSBOb25lCiAgICAgICAgICAgICBpZiBwaWQgbm90IGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuOiBjb250aW51ZQogICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4ucmVtb3ZlKHBpZCkKQEAgLTU0NSw3ICs1NDUsNyBAQAogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW46CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKGNoaWxkLCBvcy5XTk9IQU5HKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGlkID0gTm9uZQogICAgICAgICAgICAgaWYgbm90IHBpZDogY29udGludWUKICAgICAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CmluZGV4IGI3ZWMxYWQuLjA0NjQ5ZmMgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQpAQCAtMjgsNiArMjgsOSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rCisKKwogY2xhc3MgTW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBDaGVja0FQSUxldmVsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxbGl0ZS5hcGlsZXZlbCwgIjIuMCIsCkBAIC0xNjMsNiArMTY2LDIxIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jeC5pbl90cmFuc2FjdGlvbiA9IFRydWUKIAorICAgIGRlZiBDaGVja09wZW5Vcmkoc2VsZik6CisgICAgICAgIGlmIHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDcsIDcpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuTm90U3VwcG9ydGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNxbGl0ZS5jb25uZWN0KCc6bWVtb3J5OicsIHVyaT1UcnVlKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgd2l0aCBzcWxpdGUuY29ubmVjdChURVNURk4pIGFzIGN4OgorICAgICAgICAgICAgY3guZXhlY3V0ZSgnY3JlYXRlIHRhYmxlIHRlc3QoaWQgaW50ZWdlciknKQorICAgICAgICB3aXRoIHNxbGl0ZS5jb25uZWN0KCdmaWxlOicgKyBURVNURk4sIHVyaT1UcnVlKSBhcyBjeDoKKyAgICAgICAgICAgIGN4LmV4ZWN1dGUoJ2luc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcygwKScpCisgICAgICAgIHdpdGggc3FsaXRlLmNvbm5lY3QoJ2ZpbGU6JyArIFRFU1RGTiArICc/bW9kZT1ybycsIHVyaT1UcnVlKSBhcyBjeDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgorICAgICAgICAgICAgICAgIGN4LmV4ZWN1dGUoJ2luc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcygxKScpCisKKwogY2xhc3MgQ3Vyc29yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5jeCA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCmRpZmYgLS1naXQgYS9MaWIvc3JlX2NvbXBpbGUucHkgYi9MaWIvc3JlX2NvbXBpbGUucHkKaW5kZXggYjk4NGE1NC4uM2E1MDgzZiAxMDA2NDQKLS0tIGEvTGliL3NyZV9jb21waWxlLnB5CisrKyBiL0xpYi9zcmVfY29tcGlsZS5weQpAQCAtMTMsNiArMTMsNyBAQAogaW1wb3J0IF9zcmUsIHN5cwogaW1wb3J0IHNyZV9wYXJzZQogZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCitmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAogCiBhc3NlcnQgX3NyZS5NQUdJQyA9PSBNQUdJQywgIlNSRSBtb2R1bGUgbWlzbWF0Y2giCiAKQEAgLTY0LDEzICs2NSw2IEBACiAgICAgICAgIGVsaWYgb3AgaW4gUkVQRUFUSU5HX0NPREVTOgogICAgICAgICAgICAgaWYgZmxhZ3MgJiBTUkVfRkxBR19URU1QTEFURToKICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiaW50ZXJuYWw6IHVuc3VwcG9ydGVkIHRlbXBsYXRlIG9wZXJhdG9yIikKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbUkVQRUFUXSkKLSAgICAgICAgICAgICAgICBza2lwID0gX2xlbihjb2RlKTsgZW1pdCgwKQotICAgICAgICAgICAgICAgIGVtaXQoYXZbMF0pCi0gICAgICAgICAgICAgICAgZW1pdChhdlsxXSkKLSAgICAgICAgICAgICAgICBfY29tcGlsZShjb2RlLCBhdlsyXSwgZmxhZ3MpCi0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW1NVQ0NFU1NdKQotICAgICAgICAgICAgICAgIGNvZGVbc2tpcF0gPSBfbGVuKGNvZGUpIC0gc2tpcAogICAgICAgICAgICAgZWxpZiBfc2ltcGxlKGF2KSBhbmQgb3AgaXMgbm90IFJFUEVBVDoKICAgICAgICAgICAgICAgICBpZiBvcCBpcyBNQVhfUkVQRUFUOgogICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbUkVQRUFUX09ORV0pCkBAIC0yMDcsMTU4ICsyMDEsMTQzIEBACiBkZWYgX29wdGltaXplX2NoYXJzZXQoY2hhcnNldCwgZml4dXApOgogICAgICMgaW50ZXJuYWw6IG9wdGltaXplIGNoYXJhY3RlciBzZXQKICAgICBvdXQgPSBbXQotICAgIG91dGFwcGVuZCA9IG91dC5hcHBlbmQKLSAgICBjaGFybWFwID0gWzBdKjI1NgotICAgIHRyeToKLSAgICAgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgotICAgICAgICAgICAgaWYgb3AgaXMgTkVHQVRFOgotICAgICAgICAgICAgICAgIG91dGFwcGVuZCgob3AsIGF2KSkKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgTElURVJBTDoKLSAgICAgICAgICAgICAgICBjaGFybWFwW2ZpeHVwKGF2KV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgotICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGZpeHVwKGF2WzBdKSwgZml4dXAoYXZbMV0pKzEpOgotICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ldID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBDQVRFR09SWToKLSAgICAgICAgICAgICAgICAjIFhYWDogY291bGQgYXBwZW5kIHRvIGNoYXJtYXAgdGFpbAotICAgICAgICAgICAgICAgIHJldHVybiBjaGFyc2V0ICMgY2Fubm90IGNvbXByZXNzCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICMgY2hhcmFjdGVyIHNldCBjb250YWlucyB1bmljb2RlIGNoYXJhY3RlcnMKLSAgICAgICAgcmV0dXJuIF9vcHRpbWl6ZV91bmljb2RlKGNoYXJzZXQsIGZpeHVwKQorICAgIHRhaWwgPSBbXQorICAgIGNoYXJtYXAgPSBieXRlYXJyYXkoMjU2KQorICAgIGZvciBvcCwgYXYgaW4gY2hhcnNldDoKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBvcCBpcyBMSVRFUkFMOgorICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ZpeHVwKGF2KV0gPSAxCisgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBSQU5HRToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZml4dXAoYXZbMF0pLCBmaXh1cChhdlsxXSkrMSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ldID0gMQorICAgICAgICAgICAgICAgIGVsaWYgb3AgaXMgTkVHQVRFOgorICAgICAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKChvcCwgYXYpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRhaWwuYXBwZW5kKChvcCwgYXYpKQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgaWYgbGVuKGNoYXJtYXApID09IDI1NjoKKyAgICAgICAgICAgICAgICAgICAgIyBjaGFyYWN0ZXIgc2V0IGNvbnRhaW5zIG5vbi1VQ1MxIGNoYXJhY3RlciBjb2RlcworICAgICAgICAgICAgICAgICAgICBjaGFybWFwICs9IGInXDAnICogMHhmZjAwCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBjaGFyYWN0ZXIgc2V0IGNvbnRhaW5zIG5vbi1CTVAgY2hhcmFjdGVyIGNvZGVzCisgICAgICAgICAgICAgICAgdGFpbC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICBicmVhaworCiAgICAgIyBjb21wcmVzcyBjaGFyYWN0ZXIgbWFwCi0gICAgaSA9IHAgPSBuID0gMAogICAgIHJ1bnMgPSBbXQotICAgIHJ1bnNhcHBlbmQgPSBydW5zLmFwcGVuZAotICAgIGZvciBjIGluIGNoYXJtYXA6Ci0gICAgICAgIGlmIGM6Ci0gICAgICAgICAgICBpZiBuID09IDA6Ci0gICAgICAgICAgICAgICAgcCA9IGkKLSAgICAgICAgICAgIG4gPSBuICsgMQotICAgICAgICBlbGlmIG46Ci0gICAgICAgICAgICBydW5zYXBwZW5kKChwLCBuKSkKLSAgICAgICAgICAgIG4gPSAwCi0gICAgICAgIGkgPSBpICsgMQotICAgIGlmIG46Ci0gICAgICAgIHJ1bnNhcHBlbmQoKHAsIG4pKQotICAgIGlmIGxlbihydW5zKSA8PSAyOgorICAgIHEgPSAwCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgcCA9IGNoYXJtYXAuZmluZCgxLCBxKQorICAgICAgICBpZiBwIDwgMDoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGxlbihydW5zKSA+PSAyOgorICAgICAgICAgICAgcnVucyA9IE5vbmUKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHEgPSBjaGFybWFwLmZpbmQoMCwgcCkKKyAgICAgICAgaWYgcSA8IDA6CisgICAgICAgICAgICBydW5zLmFwcGVuZCgocCwgbGVuKGNoYXJtYXApKSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJ1bnMuYXBwZW5kKChwLCBxKSkKKyAgICBpZiBydW5zIGlzIG5vdCBOb25lOgogICAgICAgICAjIHVzZSBsaXRlcmFsL3JhbmdlCi0gICAgICAgIGZvciBwLCBuIGluIHJ1bnM6Ci0gICAgICAgICAgICBpZiBuID09IDE6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChMSVRFUkFMLCBwKSkKKyAgICAgICAgZm9yIHAsIHEgaW4gcnVuczoKKyAgICAgICAgICAgIGlmIHEgLSBwID09IDE6CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgoTElURVJBTCwgcCkpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGFwcGVuZCgoUkFOR0UsIChwLCBwK24tMSkpKQorICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoKFJBTkdFLCAocCwgcSAtIDEpKSkKKyAgICAgICAgb3V0ICs9IHRhaWwKICAgICAgICAgaWYgbGVuKG91dCkgPCBsZW4oY2hhcnNldCk6CiAgICAgICAgICAgICByZXR1cm4gb3V0Ci0gICAgZWxzZToKLSAgICAgICAgIyB1c2UgYml0bWFwCisgICAgICAgIHJldHVybiBjaGFyc2V0CisKKyAgICAjIHVzZSBiaXRtYXAKKyAgICBpZiBsZW4oY2hhcm1hcCkgPT0gMjU2OgogICAgICAgICBkYXRhID0gX21rX2JpdG1hcChjaGFybWFwKQotICAgICAgICBvdXRhcHBlbmQoKENIQVJTRVQsIGRhdGEpKQorICAgICAgICBvdXQuYXBwZW5kKChDSEFSU0VULCBkYXRhKSkKKyAgICAgICAgb3V0ICs9IHRhaWwKICAgICAgICAgcmV0dXJuIG91dAotICAgIHJldHVybiBjaGFyc2V0CiAKLWRlZiBfbWtfYml0bWFwKGJpdHMpOgotICAgIGRhdGEgPSBbXQotICAgIGRhdGFhcHBlbmQgPSBkYXRhLmFwcGVuZAotICAgIGlmIF9zcmUuQ09ERVNJWkUgPT0gMjoKLSAgICAgICAgc3RhcnQgPSAoMSwgMCkKLSAgICBlbHNlOgotICAgICAgICBzdGFydCA9ICgxLCAwKQotICAgIG0sIHYgPSBzdGFydAotICAgIGZvciBjIGluIGJpdHM6Ci0gICAgICAgIGlmIGM6Ci0gICAgICAgICAgICB2ID0gdiArIG0KLSAgICAgICAgbSA9IG0gKyBtCi0gICAgICAgIGlmIG0gPiBNQVhDT0RFOgotICAgICAgICAgICAgZGF0YWFwcGVuZCh2KQotICAgICAgICAgICAgbSwgdiA9IHN0YXJ0Ci0gICAgcmV0dXJuIGRhdGEKKyAgICAjIFRvIHJlcHJlc2VudCBhIGJpZyBjaGFyc2V0LCBmaXJzdCBhIGJpdG1hcCBvZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUKKyAgICAjIHNldCBpcyBjb25zdHJ1Y3RlZC4gVGhlbiwgdGhpcyBiaXRtYXAgaXMgc2xpY2VkIGludG8gY2h1bmtzIG9mIDI1NgorICAgICMgY2hhcmFjdGVycywgZHVwbGljYXRlIGNodW5rcyBhcmUgZWxpbWluYXRlZCwgYW5kIGVhY2ggY2h1bmsgaXMKKyAgICAjIGdpdmVuIGEgbnVtYmVyLiBJbiB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbiwgdGhlIGNoYXJzZXQgaXMKKyAgICAjIHJlcHJlc2VudGVkIGJ5IGEgMzItYml0IHdvcmQgc2VxdWVuY2UsIGNvbnNpc3Rpbmcgb2Ygb25lIHdvcmQgZm9yCisgICAgIyB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjaHVua3MsIGEgc2VxdWVuY2Ugb2YgMjU2IGJ5dGVzICg2NCB3b3JkcykKKyAgICAjIG9mIGNodW5rIG51bWJlcnMgaW5kZXhlZCBieSB0aGVpciBvcmlnaW5hbCBjaHVuayBwb3NpdGlvbiwgYW5kIGEKKyAgICAjIHNlcXVlbmNlIG9mIDI1Ni1iaXQgY2h1bmtzICg4IHdvcmRzIGVhY2gpLgogCi0jIFRvIHJlcHJlc2VudCBhIGJpZyBjaGFyc2V0LCBmaXJzdCBhIGJpdG1hcCBvZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUKLSMgc2V0IGlzIGNvbnN0cnVjdGVkLiBUaGVuLCB0aGlzIGJpdG1hcCBpcyBzbGljZWQgaW50byBjaHVua3Mgb2YgMjU2Ci0jIGNoYXJhY3RlcnMsIGR1cGxpY2F0ZSBjaHVua3MgYXJlIGVsaW1pbmF0ZWQsIGFuZCBlYWNoIGNodW5rIGlzCi0jIGdpdmVuIGEgbnVtYmVyLiBJbiB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbiwgdGhlIGNoYXJzZXQgaXMKLSMgcmVwcmVzZW50ZWQgYnkgYSAzMi1iaXQgd29yZCBzZXF1ZW5jZSwgY29uc2lzdGluZyBvZiBvbmUgd29yZCBmb3IKLSMgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY2h1bmtzLCBhIHNlcXVlbmNlIG9mIDI1NiBieXRlcyAoNjQgd29yZHMpCi0jIG9mIGNodW5rIG51bWJlcnMgaW5kZXhlZCBieSB0aGVpciBvcmlnaW5hbCBjaHVuayBwb3NpdGlvbiwgYW5kIGEKLSMgc2VxdWVuY2Ugb2YgMjU2LWJpdCBjaHVua3MgKDggd29yZHMgZWFjaCkuCisgICAgIyBDb21wcmVzc2lvbiBpcyBub3JtYWxseSBnb29kOiBpbiBhIHR5cGljYWwgY2hhcnNldCwgbGFyZ2UgcmFuZ2VzIG9mCisgICAgIyBVbmljb2RlIHdpbGwgYmUgZWl0aGVyIGNvbXBsZXRlbHkgZXhjbHVkZWQgKGUuZy4gaWYgb25seSBjeXJpbGxpYworICAgICMgbGV0dGVycyBhcmUgdG8gYmUgbWF0Y2hlZCksIG9yIGNvbXBsZXRlbHkgaW5jbHVkZWQgKGUuZy4gaWYgbGFyZ2UKKyAgICAjIHN1YnJhbmdlcyBvZiBLYW5qaSBtYXRjaCkuIFRoZXNlIHJhbmdlcyB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5CisgICAgIyBjaHVua3Mgb2YgYWxsIG9uZS1iaXRzIG9yIGFsbCB6ZXJvLWJpdHMuCiAKLSMgQ29tcHJlc3Npb24gaXMgbm9ybWFsbHkgZ29vZDogaW4gYSB0eXBpY2FsIGNoYXJzZXQsIGxhcmdlIHJhbmdlcyBvZgotIyBVbmljb2RlIHdpbGwgYmUgZWl0aGVyIGNvbXBsZXRlbHkgZXhjbHVkZWQgKGUuZy4gaWYgb25seSBjeXJpbGxpYwotIyBsZXR0ZXJzIGFyZSB0byBiZSBtYXRjaGVkKSwgb3IgY29tcGxldGVseSBpbmNsdWRlZCAoZS5nLiBpZiBsYXJnZQotIyBzdWJyYW5nZXMgb2YgS2FuamkgbWF0Y2gpLiBUaGVzZSByYW5nZXMgd2lsbCBiZSByZXByZXNlbnRlZCBieQotIyBjaHVua3Mgb2YgYWxsIG9uZS1iaXRzIG9yIGFsbCB6ZXJvLWJpdHMuCisgICAgIyBNYXRjaGluZyBjYW4gYmUgYWxzbyBkb25lIGVmZmljaWVudGx5OiB0aGUgbW9yZSBzaWduaWZpY2FudCBieXRlIG9mCisgICAgIyB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgaXMgYW4gaW5kZXggaW50byB0aGUgY2h1bmsgbnVtYmVyLCBhbmQgdGhlCisgICAgIyBsZXNzIHNpZ25pZmljYW50IGJ5dGUgaXMgYSBiaXQgaW5kZXggaW4gdGhlIGNodW5rIChqdXN0IGxpa2UgdGhlCisgICAgIyBDSEFSU0VUIG1hdGNoaW5nKS4KIAotIyBNYXRjaGluZyBjYW4gYmUgYWxzbyBkb25lIGVmZmljaWVudGx5OiB0aGUgbW9yZSBzaWduaWZpY2FudCBieXRlIG9mCi0jIHRoZSBVbmljb2RlIGNoYXJhY3RlciBpcyBhbiBpbmRleCBpbnRvIHRoZSBjaHVuayBudW1iZXIsIGFuZCB0aGUKLSMgbGVzcyBzaWduaWZpY2FudCBieXRlIGlzIGEgYml0IGluZGV4IGluIHRoZSBjaHVuayAoanVzdCBsaWtlIHRoZQotIyBDSEFSU0VUIG1hdGNoaW5nKS4KLQotIyBUaGUgQklHQ0hBUlNFVCBvcGNvZGUgc3RpbGwgc3VwcG9ydHMgb25seSBzdWJzZXRzCi0jIG9mIHRoZSBiYXNpYyBtdWx0aWxpbmd1YWwgcGxhbmU7IGFuIGVmZmljaWVudCByZXByZXNlbnRhdGlvbgotIyBmb3IgYWxsIG9mIFVuaWNvZGUgaGFzIG5vdCB5ZXQgYmVlbiBkZXZlbG9wZWQuIFRoaXMgbWVhbnMsCi0jIGluIHBhcnRpY3VsYXIsIHRoYXQgbmVnYXRlZCBjaGFyc2V0cyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMKLSMgYmlnY2hhcnNldHMuCi0KLWRlZiBfb3B0aW1pemVfdW5pY29kZShjaGFyc2V0LCBmaXh1cCk6Ci0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVybiBjaGFyc2V0Ci0gICAgY2hhcm1hcCA9IFswXSo2NTUzNgotICAgIG5lZ2F0ZSA9IDAKLSAgICB0cnk6Ci0gICAgICAgIGZvciBvcCwgYXYgaW4gY2hhcnNldDoKLSAgICAgICAgICAgIGlmIG9wIGlzIE5FR0FURToKLSAgICAgICAgICAgICAgICBuZWdhdGUgPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIExJVEVSQUw6Ci0gICAgICAgICAgICAgICAgY2hhcm1hcFtmaXh1cChhdildID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBSQU5HRToKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShmaXh1cChhdlswXSksIGZpeHVwKGF2WzFdKSsxKToKLSAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgQ0FURUdPUlk6Ci0gICAgICAgICAgICAgICAgIyBYWFg6IGNvdWxkIGV4cGFuZCBjYXRlZ29yeQotICAgICAgICAgICAgICAgIHJldHVybiBjaGFyc2V0ICMgY2Fubm90IGNvbXByZXNzCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICMgbm9uLUJNUCBjaGFyYWN0ZXJzOyBYWFggbm93IHRoZXkgc2hvdWxkIHdvcmsKLSAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICBpZiBuZWdhdGU6Ci0gICAgICAgIGlmIHN5cy5tYXh1bmljb2RlICE9IDY1NTM1OgotICAgICAgICAgICAgIyBYWFg6IG5lZ2F0aW9uIGRvZXMgbm90IHdvcmsgd2l0aCBiaWcgY2hhcnNldHMKLSAgICAgICAgICAgICMgWFhYMjogbm93IHRoZXkgc2hvdWxkIHdvcmssIGJ1dCByZW1vdmluZyB0aGlzIHdpbGwgbWFrZSB0aGUKLSAgICAgICAgICAgICMgY2hhcm1hcCAxNyB0aW1lcyBiaWdnZXIKLSAgICAgICAgICAgIHJldHVybiBjaGFyc2V0Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKDY1NTM2KToKLSAgICAgICAgICAgIGNoYXJtYXBbaV0gPSBub3QgY2hhcm1hcFtpXQorICAgIGNoYXJtYXAgPSBieXRlcyhjaGFybWFwKSAjIHNob3VsZCBiZSBoYXNoYWJsZQogICAgIGNvbXBzID0ge30KLSAgICBtYXBwaW5nID0gWzBdKjI1NgorICAgIG1hcHBpbmcgPSBieXRlYXJyYXkoMjU2KQogICAgIGJsb2NrID0gMAotICAgIGRhdGEgPSBbXQotICAgIGZvciBpIGluIHJhbmdlKDI1Nik6Ci0gICAgICAgIGNodW5rID0gdHVwbGUoY2hhcm1hcFtpKjI1NjooaSsxKSoyNTZdKQotICAgICAgICBuZXcgPSBjb21wcy5zZXRkZWZhdWx0KGNodW5rLCBibG9jaykKLSAgICAgICAgbWFwcGluZ1tpXSA9IG5ldwotICAgICAgICBpZiBuZXcgPT0gYmxvY2s6Ci0gICAgICAgICAgICBibG9jayA9IGJsb2NrICsgMQotICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBfbWtfYml0bWFwKGNodW5rKQotICAgIGhlYWRlciA9IFtibG9ja10KLSAgICBpZiBfc3JlLkNPREVTSVpFID09IDI6Ci0gICAgICAgIGNvZGUgPSAnSCcKLSAgICBlbHNlOgotICAgICAgICBjb2RlID0gJ0knCi0gICAgIyBDb252ZXJ0IGJsb2NrIGluZGljZXMgdG8gYnl0ZSBhcnJheSBvZiAyNTYgYnl0ZXMKLSAgICBtYXBwaW5nID0gYXJyYXkuYXJyYXkoJ0InLCBtYXBwaW5nKS50b2J5dGVzKCkKLSAgICAjIENvbnZlcnQgYnl0ZSBhcnJheSB0byB3b3JkIGFycmF5Ci0gICAgbWFwcGluZyA9IGFycmF5LmFycmF5KGNvZGUsIG1hcHBpbmcpCi0gICAgYXNzZXJ0IG1hcHBpbmcuaXRlbXNpemUgPT0gX3NyZS5DT0RFU0laRQotICAgIGFzc2VydCBsZW4obWFwcGluZykgKiBtYXBwaW5nLml0ZW1zaXplID09IDI1NgotICAgIGhlYWRlciA9IGhlYWRlciArIG1hcHBpbmcudG9saXN0KCkKLSAgICBkYXRhWzA6MF0gPSBoZWFkZXIKLSAgICByZXR1cm4gWyhCSUdDSEFSU0VULCBkYXRhKV0KKyAgICBkYXRhID0gYnl0ZWFycmF5KCkKKyAgICBmb3IgaSBpbiByYW5nZSgwLCA2NTUzNiwgMjU2KToKKyAgICAgICAgY2h1bmsgPSBjaGFybWFwW2k6IGkgKyAyNTZdCisgICAgICAgIGlmIGNodW5rIGluIGNvbXBzOgorICAgICAgICAgICAgbWFwcGluZ1tpIC8vIDI1Nl0gPSBjb21wc1tjaHVua10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcHBpbmdbaSAvLyAyNTZdID0gY29tcHNbY2h1bmtdID0gYmxvY2sKKyAgICAgICAgICAgIGJsb2NrICs9IDEKKyAgICAgICAgICAgIGRhdGEgKz0gY2h1bmsKKyAgICBkYXRhID0gX21rX2JpdG1hcChkYXRhKQorICAgIGRhdGFbMDowXSA9IFtibG9ja10gKyBfYnl0ZXNfdG9fY29kZXMobWFwcGluZykKKyAgICBvdXQuYXBwZW5kKChCSUdDSEFSU0VULCBkYXRhKSkKKyAgICBvdXQgKz0gdGFpbAorICAgIHJldHVybiBvdXQKKworX0NPREVCSVRTID0gX3NyZS5DT0RFU0laRSAqIDgKK19CSVRTX1RSQU5TID0gYicwJyArIGInMScgKiAyNTUKK2RlZiBfbWtfYml0bWFwKGJpdHMsIF9DT0RFQklUUz1fQ09ERUJJVFMsIF9pbnQ9aW50KToKKyAgICBzID0gYml0cy50cmFuc2xhdGUoX0JJVFNfVFJBTlMpWzo6LTFdCisgICAgcmV0dXJuIFtfaW50KHNbaSAtIF9DT0RFQklUUzogaV0sIDIpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocyksIDAsIC1fQ09ERUJJVFMpXQorCitkZWYgX2J5dGVzX3RvX2NvZGVzKGIpOgorICAgICMgQ29udmVydCBibG9jayBpbmRpY2VzIHRvIHdvcmQgYXJyYXkKKyAgICBpbXBvcnQgYXJyYXkKKyAgICBhID0gYXJyYXkuYXJyYXkoJ0knLCBiKQorICAgIGFzc2VydCBhLml0ZW1zaXplID09IF9zcmUuQ09ERVNJWkUKKyAgICBhc3NlcnQgbGVuKGEpICogYS5pdGVtc2l6ZSA9PSBsZW4oYikKKyAgICByZXR1cm4gYS50b2xpc3QoKQogCiBkZWYgX3NpbXBsZShhdik6CiAgICAgIyBjaGVjayBpZiBhdiBpcyBhICJzaW1wbGUiIG9wZXJhdG9yCiAgICAgbG8sIGhpID0gYXZbMl0uZ2V0d2lkdGgoKQogICAgIHJldHVybiBsbyA9PSBoaSA9PSAxIGFuZCBhdlsyXVswXVswXSAhPSBTVUJQQVRURVJOCiAKK2RlZiBfZ2VuZXJhdGVfb3ZlcmxhcF90YWJsZShwcmVmaXgpOgorICAgICIiIgorICAgIEdlbmVyYXRlIGFuIG92ZXJsYXAgdGFibGUgZm9yIHRoZSBmb2xsb3dpbmcgcHJlZml4LgorICAgIEFuIG92ZXJsYXAgdGFibGUgaXMgYSB0YWJsZSBvZiB0aGUgc2FtZSBzaXplIGFzIHRoZSBwcmVmaXggd2hpY2gKKyAgICBpbmZvcm1zIGFib3V0IHRoZSBwb3RlbnRpYWwgc2VsZi1vdmVybGFwIGZvciBlYWNoIGluZGV4IGluIHRoZSBwcmVmaXg6CisgICAgLSBpZiBvdmVybGFwW2ldID09IDAsIHByZWZpeFtpOl0gY2FuJ3Qgb3ZlcmxhcCBwcmVmaXhbMDouLi5dCisgICAgLSBpZiBvdmVybGFwW2ldID09IGsgd2l0aCAwIDwgayA8PSBpLCBwcmVmaXhbaS1rKzE6aSsxXSBvdmVybGFwcyB3aXRoCisgICAgICBwcmVmaXhbMDprXQorICAgICIiIgorICAgIHRhYmxlID0gWzBdICogbGVuKHByZWZpeCkKKyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4ocHJlZml4KSk6CisgICAgICAgIGlkeCA9IHRhYmxlW2kgLSAxXQorICAgICAgICB3aGlsZSBwcmVmaXhbaV0gIT0gcHJlZml4W2lkeF06CisgICAgICAgICAgICBpZiBpZHggPT0gMDoKKyAgICAgICAgICAgICAgICB0YWJsZVtpXSA9IDAKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWR4ID0gdGFibGVbaWR4IC0gMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhYmxlW2ldID0gaWR4ICsgMQorICAgIHJldHVybiB0YWJsZQorCiBkZWYgX2NvbXBpbGVfaW5mbyhjb2RlLCBwYXR0ZXJuLCBmbGFncyk6CiAgICAgIyBpbnRlcm5hbDogY29tcGlsZSBhbiBpbmZvIGJsb2NrLiAgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiwKICAgICAjIHRoaXMgY29udGFpbnMgbWluL21heCBwYXR0ZXJuIHdpZHRoLCBhbmQgYW4gb3B0aW9uYWwgbGl0ZXJhbApAQCAtNDU1LDEyICs0MzQsNyBAQAogICAgICAgICBlbWl0KHByZWZpeF9za2lwKSAjIHNraXAKICAgICAgICAgY29kZS5leHRlbmQocHJlZml4KQogICAgICAgICAjIGdlbmVyYXRlIG92ZXJsYXAgdGFibGUKLSAgICAgICAgdGFibGUgPSBbLTFdICsgKFswXSpsZW4ocHJlZml4KSkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHByZWZpeCkpOgotICAgICAgICAgICAgdGFibGVbaSsxXSA9IHRhYmxlW2ldKzEKLSAgICAgICAgICAgIHdoaWxlIHRhYmxlW2krMV0gPiAwIGFuZCBwcmVmaXhbaV0gIT0gcHJlZml4W3RhYmxlW2krMV0tMV06Ci0gICAgICAgICAgICAgICAgdGFibGVbaSsxXSA9IHRhYmxlW3RhYmxlW2krMV0tMV0rMQotICAgICAgICBjb2RlLmV4dGVuZCh0YWJsZVsxOl0pICMgZG9uJ3Qgc3RvcmUgZmlyc3QgZW50cnkKKyAgICAgICAgY29kZS5leHRlbmQoX2dlbmVyYXRlX292ZXJsYXBfdGFibGUocHJlZml4KSkKICAgICBlbGlmIGNoYXJzZXQ6CiAgICAgICAgIF9jb21waWxlX2NoYXJzZXQoY2hhcnNldCwgZmxhZ3MsIGNvZGUpCiAgICAgY29kZVtza2lwXSA9IGxlbihjb2RlKSAtIHNraXAKZGlmZiAtLWdpdCBhL0xpYi9zcmVfY29uc3RhbnRzLnB5IGIvTGliL3NyZV9jb25zdGFudHMucHkKaW5kZXggM2ZiNWVhYy4uNTg5OGQ1NCAxMDA2NDQKLS0tIGEvTGliL3NyZV9jb25zdGFudHMucHkKKysrIGIvTGliL3NyZV9jb25zdGFudHMucHkKQEAgLTE1LDExICsxNSw3IEBACiAKIE1BR0lDID0gMjAwMzEwMTcKIAotdHJ5OgotICAgIGZyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgaW1wb3J0IF9zcmUKLSAgICBNQVhSRVBFQVQgPSBfc3JlLk1BWFJFUEVBVCA9IDY1NTM1Citmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAogCiAjIFNSRSBzdGFuZGFyZCBleGNlcHRpb24gKGFjY2VzcyBhcyBzcmUuZXJyb3IpCiAjIHNob3VsZCB0aGlzIHJlYWxseSBiZSBoZXJlPwpkaWZmIC0tZ2l0IGEvTGliL3NyZV9wYXJzZS5weSBiL0xpYi9zcmVfcGFyc2UucHkKaW5kZXggOGE3Nzc5MC4uNjU4M2VmNiAxMDA2NDQKLS0tIGEvTGliL3NyZV9wYXJzZS5weQorKysgYi9MaWIvc3JlX3BhcnNlLnB5CkBAIC0xNSw2ICsxNSw3IEBACiBpbXBvcnQgc3lzCiAKIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgorZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKIAogU1BFQ0lBTF9DSEFSUyA9ICIuXFxbeygpKis/XiR8IgogUkVQRUFUX0NIQVJTID0gIiorP3siCkBAIC03NjgsMzUgKzc2OSwzMyBAQAogICAgICMgZ3JvdXAgcmVmZXJlbmNlcwogICAgIHMgPSBUb2tlbml6ZXIoc291cmNlKQogICAgIHNnZXQgPSBzLmdldAotICAgIHAgPSBbXQotICAgIGEgPSBwLmFwcGVuZAotICAgIGRlZiBsaXRlcmFsKGxpdGVyYWwsIHA9cCwgcGFwcGVuZD1hKToKLSAgICAgICAgaWYgcCBhbmQgcFstMV1bMF0gaXMgTElURVJBTDoKLSAgICAgICAgICAgIHBbLTFdID0gTElURVJBTCwgcFstMV1bMV0gKyBsaXRlcmFsCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXBwZW5kKChMSVRFUkFMLCBsaXRlcmFsKSkKLSAgICBzZXAgPSBzb3VyY2VbOjBdCi0gICAgaWYgaXNpbnN0YW5jZShzZXAsIHN0cik6Ci0gICAgICAgIG1ha2VjaGFyID0gY2hyCi0gICAgZWxzZToKLSAgICAgICAgbWFrZWNoYXIgPSBjaHIKLSAgICB3aGlsZSAxOgorICAgIGdyb3VwcyA9IFtdCisgICAgbGl0ZXJhbHMgPSBbXQorICAgIGxpdGVyYWwgPSBbXQorICAgIGxhcHBlbmQgPSBsaXRlcmFsLmFwcGVuZAorICAgIGRlZiBhZGRncm91cChpbmRleCk6CisgICAgICAgIGlmIGxpdGVyYWw6CisgICAgICAgICAgICBsaXRlcmFscy5hcHBlbmQoJycuam9pbihsaXRlcmFsKSkKKyAgICAgICAgICAgIGRlbCBsaXRlcmFsWzpdCisgICAgICAgIGdyb3Vwcy5hcHBlbmQoKGxlbihsaXRlcmFscyksIGluZGV4KSkKKyAgICAgICAgbGl0ZXJhbHMuYXBwZW5kKE5vbmUpCisgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgdGhpcyA9IHNnZXQoKQogICAgICAgICBpZiB0aGlzIGlzIE5vbmU6CiAgICAgICAgICAgICBicmVhayAjIGVuZCBvZiByZXBsYWNlbWVudCBzdHJpbmcKLSAgICAgICAgaWYgdGhpcyBhbmQgdGhpc1swXSA9PSAiXFwiOgorICAgICAgICBpZiB0aGlzWzBdID09ICJcXCI6CiAgICAgICAgICAgICAjIGdyb3VwCi0gICAgICAgICAgICBjID0gdGhpc1sxOjJdCisgICAgICAgICAgICBjID0gdGhpc1sxXQogICAgICAgICAgICAgaWYgYyA9PSAiZyI6CiAgICAgICAgICAgICAgICAgbmFtZSA9ICIiCiAgICAgICAgICAgICAgICAgaWYgcy5tYXRjaCgiPCIpOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciA9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bnRlcm1pbmF0ZWQgZ3JvdXAgbmFtZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyID09ICI+IjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUgKyBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGNoYXIKICAgICAgICAgICAgICAgICBpZiBub3QgbmFtZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoIm1pc3NpbmcgZ3JvdXAgbmFtZSIpCiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtODEwLDUwICs4MDksMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcGF0dGVybi5ncm91cGluZGV4W25hbWVdCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoInVua25vd24gZ3JvdXAgbmFtZSIpCi0gICAgICAgICAgICAgICAgYSgoTUFSSywgaW5kZXgpKQorICAgICAgICAgICAgICAgIGFkZGdyb3VwKGluZGV4KQogICAgICAgICAgICAgZWxpZiBjID09ICIwIjoKICAgICAgICAgICAgICAgICBpZiBzLm5leHQgaW4gT0NURElHSVRTOgotICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQorICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICBpZiBzLm5leHQgaW4gT0NURElHSVRTOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyA9IHRoaXMgKyBzZ2V0KCkKLSAgICAgICAgICAgICAgICBsaXRlcmFsKG1ha2VjaGFyKGludCh0aGlzWzE6XSwgOCkgJiAweGZmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCisgICAgICAgICAgICAgICAgbGFwcGVuZChjaHIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQogICAgICAgICAgICAgZWxpZiBjIGluIERJR0lUUzoKICAgICAgICAgICAgICAgICBpc29jdGFsID0gRmFsc2UKICAgICAgICAgICAgICAgICBpZiBzLm5leHQgaW4gRElHSVRTOgotICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQorICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICBpZiAoYyBpbiBPQ1RESUdJVFMgYW5kIHRoaXNbMl0gaW4gT0NURElHSVRTIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgcy5uZXh0IGluIE9DVERJR0lUUyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlzb2N0YWwgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsKG1ha2VjaGFyKGludCh0aGlzWzE6XSwgOCkgJiAweGZmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhcHBlbmQoY2hyKGludCh0aGlzWzE6XSwgOCkgJiAweGZmKSkKICAgICAgICAgICAgICAgICBpZiBub3QgaXNvY3RhbDoKLSAgICAgICAgICAgICAgICAgICAgYSgoTUFSSywgaW50KHRoaXNbMTpdKSkpCisgICAgICAgICAgICAgICAgICAgIGFkZGdyb3VwKGludCh0aGlzWzE6XSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGhpcyA9IG1ha2VjaGFyKEVTQ0FQRVNbdGhpc11bMV0pCisgICAgICAgICAgICAgICAgICAgIHRoaXMgPSBjaHIoRVNDQVBFU1t0aGlzXVsxXSkKICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBsaXRlcmFsKHRoaXMpCisgICAgICAgICAgICAgICAgbGFwcGVuZCh0aGlzKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGl0ZXJhbCh0aGlzKQotICAgICMgY29udmVydCB0ZW1wbGF0ZSB0byBncm91cHMgYW5kIGxpdGVyYWxzIGxpc3RzCi0gICAgaSA9IDAKLSAgICBncm91cHMgPSBbXQotICAgIGdyb3Vwc2FwcGVuZCA9IGdyb3Vwcy5hcHBlbmQKLSAgICBsaXRlcmFscyA9IFtOb25lXSAqIGxlbihwKQotICAgIGlmIGlzaW5zdGFuY2Uoc291cmNlLCBzdHIpOgotICAgICAgICBlbmNvZGUgPSBsYW1iZGEgeDogeAotICAgIGVsc2U6CisgICAgICAgICAgICBsYXBwZW5kKHRoaXMpCisgICAgaWYgbGl0ZXJhbDoKKyAgICAgICAgbGl0ZXJhbHMuYXBwZW5kKCcnLmpvaW4obGl0ZXJhbCkpCisgICAgaWYgbm90IGlzaW5zdGFuY2Uoc291cmNlLCBzdHIpOgogICAgICAgICAjIFRoZSB0b2tlbml6ZXIgaW1wbGljaXRseSBkZWNvZGVzIGJ5dGVzIG9iamVjdHMgYXMgbGF0aW4tMSwgd2UgbXVzdAogICAgICAgICAjIHRoZXJlZm9yZSByZS1lbmNvZGUgdGhlIGZpbmFsIHJlcHJlc2VudGF0aW9uLgotICAgICAgICBlbmNvZGUgPSBsYW1iZGEgeDogeC5lbmNvZGUoJ2xhdGluLTEnKQotICAgIGZvciBjLCBzIGluIHA6Ci0gICAgICAgIGlmIGMgaXMgTUFSSzoKLSAgICAgICAgICAgIGdyb3Vwc2FwcGVuZCgoaSwgcykpCi0gICAgICAgICAgICAjIGxpdGVyYWxbaV0gaXMgYWxyZWFkeSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaXRlcmFsc1tpXSA9IGVuY29kZShzKQotICAgICAgICBpID0gaSArIDEKKyAgICAgICAgbGl0ZXJhbHMgPSBbTm9uZSBpZiBzIGlzIE5vbmUgZWxzZSBzLmVuY29kZSgnbGF0aW4tMScpIGZvciBzIGluIGxpdGVyYWxzXQogICAgIHJldHVybiBncm91cHMsIGxpdGVyYWxzCiAKIGRlZiBleHBhbmRfdGVtcGxhdGUodGVtcGxhdGUsIG1hdGNoKToKZGlmZiAtLWdpdCBhL0xpYi9zc2wucHkgYi9MaWIvc3NsLnB5CmluZGV4IDA2NDM3YjMuLjM2YWY2MzcgMTAwNjQ0Ci0tLSBhL0xpYi9zc2wucHkKKysrIGIvTGliL3NzbC5weQpAQCAtNTIsMTAgKzUyLDQ2IEBACiBQUk9UT0NPTF9TU0x2MwogUFJPVE9DT0xfU1NMdjIzCiBQUk9UT0NPTF9UTFN2MQorUFJPVE9DT0xfVExTdjFfMQorUFJPVE9DT0xfVExTdjFfMgorCitUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBpZGVudGlmeSB2YXJpb3VzIFNTTCBhbGVydCBtZXNzYWdlIGRlc2NyaXB0aW9ucyBhcyBwZXIKK2h0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTYKKworQUxFUlRfREVTQ1JJUFRJT05fQ0xPU0VfTk9USUZZCitBTEVSVF9ERVNDUklQVElPTl9VTkVYUEVDVEVEX01FU1NBR0UKK0FMRVJUX0RFU0NSSVBUSU9OX0JBRF9SRUNPUkRfTUFDCitBTEVSVF9ERVNDUklQVElPTl9SRUNPUkRfT1ZFUkZMT1cKK0FMRVJUX0RFU0NSSVBUSU9OX0RFQ09NUFJFU1NJT05fRkFJTFVSRQorQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkUKK0FMRVJUX0RFU0NSSVBUSU9OX0JBRF9DRVJUSUZJQ0FURQorQUxFUlRfREVTQ1JJUFRJT05fVU5TVVBQT1JURURfQ0VSVElGSUNBVEUKK0FMRVJUX0RFU0NSSVBUSU9OX0NFUlRJRklDQVRFX1JFVk9LRUQKK0FMRVJUX0RFU0NSSVBUSU9OX0NFUlRJRklDQVRFX0VYUElSRUQKK0FMRVJUX0RFU0NSSVBUSU9OX0NFUlRJRklDQVRFX1VOS05PV04KK0FMRVJUX0RFU0NSSVBUSU9OX0lMTEVHQUxfUEFSQU1FVEVSCitBTEVSVF9ERVNDUklQVElPTl9VTktOT1dOX0NBCitBTEVSVF9ERVNDUklQVElPTl9BQ0NFU1NfREVOSUVECitBTEVSVF9ERVNDUklQVElPTl9ERUNPREVfRVJST1IKK0FMRVJUX0RFU0NSSVBUSU9OX0RFQ1JZUFRfRVJST1IKK0FMRVJUX0RFU0NSSVBUSU9OX1BST1RPQ09MX1ZFUlNJT04KK0FMRVJUX0RFU0NSSVBUSU9OX0lOU1VGRklDSUVOVF9TRUNVUklUWQorQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1IKK0FMRVJUX0RFU0NSSVBUSU9OX1VTRVJfQ0FOQ0VMTEVECitBTEVSVF9ERVNDUklQVElPTl9OT19SRU5FR09USUFUSU9OCitBTEVSVF9ERVNDUklQVElPTl9VTlNVUFBPUlRFRF9FWFRFTlNJT04KK0FMRVJUX0RFU0NSSVBUSU9OX0NFUlRJRklDQVRFX1VOT0JUQUlOQUJMRQorQUxFUlRfREVTQ1JJUFRJT05fVU5SRUNPR05JWkVEX05BTUUKK0FMRVJUX0RFU0NSSVBUSU9OX0JBRF9DRVJUSUZJQ0FURV9TVEFUVVNfUkVTUE9OU0UKK0FMRVJUX0RFU0NSSVBUSU9OX0JBRF9DRVJUSUZJQ0FURV9IQVNIX1ZBTFVFCitBTEVSVF9ERVNDUklQVElPTl9VTktOT1dOX1BTS19JREVOVElUWQogIiIiCiAKIGltcG9ydCB0ZXh0d3JhcAogaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBjb2xsZWN0aW9ucwogCiBpbXBvcnQgX3NzbCAgICAgICAgICAgICAjIGlmIHdlIGNhbid0IGltcG9ydCBpdCwgbGV0IHRoZSBlcnJvciBwcm9wYWdhdGUKIApAQCAtNjYsMzUgKzEwMiwyMyBAQAogICAgIFNTTFN5c2NhbGxFcnJvciwgU1NMRU9GRXJyb3IsCiAgICAgKQogZnJvbSBfc3NsIGltcG9ydCBDRVJUX05PTkUsIENFUlRfT1BUSU9OQUwsIENFUlRfUkVRVUlSRUQKLWZyb20gX3NzbCBpbXBvcnQgKAotICAgIE9QX0FMTCwgT1BfTk9fU1NMdjIsIE9QX05PX1NTTHYzLCBPUF9OT19UTFN2MSwKLSAgICBPUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UsIE9QX1NJTkdMRV9ESF9VU0UKLSAgICApCi10cnk6Ci0gICAgZnJvbSBfc3NsIGltcG9ydCBPUF9OT19DT01QUkVTU0lPTgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLXRyeToKLSAgICBmcm9tIF9zc2wgaW1wb3J0IE9QX1NJTkdMRV9FQ0RIX1VTRQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKIGZyb20gX3NzbCBpbXBvcnQgUkFORF9zdGF0dXMsIFJBTkRfZWdkLCBSQU5EX2FkZCwgUkFORF9ieXRlcywgUkFORF9wc2V1ZG9fYnl0ZXMKLWZyb20gX3NzbCBpbXBvcnQgKAotICAgIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiwKLSAgICBTU0xfRVJST1JfV0FOVF9SRUFELAotICAgIFNTTF9FUlJPUl9XQU5UX1dSSVRFLAotICAgIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQLAotICAgIFNTTF9FUlJPUl9TWVNDQUxMLAotICAgIFNTTF9FUlJPUl9TU0wsCi0gICAgU1NMX0VSUk9SX1dBTlRfQ09OTkVDVCwKLSAgICBTU0xfRVJST1JfRU9GLAotICAgIFNTTF9FUlJPUl9JTlZBTElEX0VSUk9SX0NPREUsCi0gICAgKQorCitkZWYgX2ltcG9ydF9zeW1ib2xzKHByZWZpeCk6CisgICAgZm9yIG4gaW4gZGlyKF9zc2wpOgorICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgIGdsb2JhbHMoKVtuXSA9IGdldGF0dHIoX3NzbCwgbikKKworX2ltcG9ydF9zeW1ib2xzKCdPUF8nKQorX2ltcG9ydF9zeW1ib2xzKCdBTEVSVF9ERVNDUklQVElPTl8nKQorX2ltcG9ydF9zeW1ib2xzKCdTU0xfRVJST1JfJykKKwogZnJvbSBfc3NsIGltcG9ydCBIQVNfU05JLCBIQVNfRUNESCwgSEFTX05QTgotZnJvbSBfc3NsIGltcG9ydCAoUFJPVE9DT0xfU1NMdjMsIFBST1RPQ09MX1NTTHYyMywKLSAgICAgICAgICAgICAgICAgIFBST1RPQ09MX1RMU3YxKQorCitmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1NTTHYzLCBQUk9UT0NPTF9TU0x2MjMsIFBST1RPQ09MX1RMU3YxCiBmcm9tIF9zc2wgaW1wb3J0IF9PUEVOU1NMX0FQSV9WRVJTSU9OCiAKKwogX1BST1RPQ09MX05BTUVTID0gewogICAgIFBST1RPQ09MX1RMU3YxOiAiVExTdjEiLAogICAgIFBST1RPQ09MX1NTTHYyMzogIlNTTHYyMyIsCkBAIC0xMDgsMTMgKzEzMiwyNiBAQAogZWxzZToKICAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfU1NMdjJdID0gIlNTTHYyIgogCit0cnk6CisgICAgZnJvbSBfc3NsIGltcG9ydCBQUk9UT0NPTF9UTFN2MV8xLCBQUk9UT0NPTF9UTFN2MV8yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMV0gPSAiVExTdjEuMSIKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMl0gPSAiVExTdjEuMiIKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgZnJvbSBfc3NsIGltcG9ydCBlbnVtX2NlcnRfc3RvcmUsIFg1MDlfQVNOX0VOQ09ESU5HLCBQS0NTXzdfQVNOX0VOQ09ESU5HCisKIGZyb20gc29ja2V0IGltcG9ydCBnZXRuYW1laW5mbyBhcyBfZ2V0bmFtZWluZm8KLWZyb20gc29ja2V0IGltcG9ydCBlcnJvciBhcyBzb2NrZXRfZXJyb3IKIGZyb20gc29ja2V0IGltcG9ydCBzb2NrZXQsIEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBjcmVhdGVfY29ubmVjdGlvbgogaW1wb3J0IGJhc2U2NCAgICAgICAgIyBmb3IgREVSLXRvLVBFTSB0cmFuc2xhdGlvbgogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IGVycm5vCiAKKworc29ja2V0X2Vycm9yID0gT1NFcnJvciAgIyBrZWVwIHRoYXQgcHVibGljIG5hbWUgaW4gbW9kdWxlIG5hbWVzcGFjZQorCiBpZiBfc3NsLkhBU19UTFNfVU5JUVVFOgogICAgIENIQU5ORUxfQklORElOR19UWVBFUyA9IFsndGxzLXVuaXF1ZSddCiBlbHNlOgpAQCAtMjE5LDExICsyNTYsMjkgQEAKICAgICAgICAgICAgICJzdWJqZWN0QWx0TmFtZSBmaWVsZHMgd2VyZSBmb3VuZCIpCiAKIAorRGVmYXVsdFZlcmlmeVBhdGhzID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiRGVmYXVsdFZlcmlmeVBhdGhzIiwKKyAgICAiY2FmaWxlIGNhcGF0aCBvcGVuc3NsX2NhZmlsZV9lbnYgb3BlbnNzbF9jYWZpbGUgb3BlbnNzbF9jYXBhdGhfZW52ICIKKyAgICAib3BlbnNzbF9jYXBhdGgiKQorCitkZWYgZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCk6CisgICAgIiIiUmV0dXJuIHBhdGhzIHRvIGRlZmF1bHQgY2FmaWxlIGFuZCBjYXBhdGguCisgICAgIiIiCisgICAgcGFydHMgPSBfc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisKKyAgICAjIGVudmlyb25tZW50IHZhcnMgc2hhZG93IHBhdGhzCisgICAgY2FmaWxlID0gb3MuZW52aXJvbi5nZXQocGFydHNbMF0sIHBhcnRzWzFdKQorICAgIGNhcGF0aCA9IG9zLmVudmlyb24uZ2V0KHBhcnRzWzJdLCBwYXJ0c1szXSkKKworICAgIHJldHVybiBEZWZhdWx0VmVyaWZ5UGF0aHMoY2FmaWxlIGlmIG9zLnBhdGguaXNmaWxlKGNhZmlsZSkgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYXRoIGlmIG9zLnBhdGguaXNkaXIoY2FwYXRoKSBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFydHMpCisKKwogY2xhc3MgU1NMQ29udGV4dChfU1NMQ29udGV4dCk6CiAgICAgIiIiQW4gU1NMQ29udGV4dCBob2xkcyB2YXJpb3VzIFNTTC1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQKICAgICBkYXRhLCBzdWNoIGFzIGNlcnRpZmljYXRlcyBhbmQgcG9zc2libHkgYSBwcml2YXRlIGtleS4iIiIKIAotICAgIF9fc2xvdHNfXyA9ICgncHJvdG9jb2wnLCkKKyAgICBfX3Nsb3RzX18gPSAoJ3Byb3RvY29sJywgJ19fd2Vha3JlZl9fJykKIAogICAgIGRlZiBfX25ld19fKGNscywgcHJvdG9jb2wsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYgPSBfU1NMQ29udGV4dC5fX25ld19fKGNscywgcHJvdG9jb2wpCkBAIC0yNzEsNyArMzI2LDcgQEAKICAgICAgICAgICAgICAgICAgX2NvbnRleHQ9Tm9uZSk6CiAKICAgICAgICAgaWYgX2NvbnRleHQ6Ci0gICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBfY29udGV4dAorICAgICAgICAgICAgc2VsZi5fY29udGV4dCA9IF9jb250ZXh0CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBzZXJ2ZXJfc2lkZSBhbmQgbm90IGNlcnRmaWxlOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNlcnRmaWxlIG11c3QgYmUgc3BlY2lmaWVkIGZvciBzZXJ2ZXItc2lkZSAiCkBAIC0yODAsMTYgKzMzNSwxNiBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNlcnRmaWxlIG11c3QgYmUgc3BlY2lmaWVkIikKICAgICAgICAgICAgIGlmIGNlcnRmaWxlIGFuZCBub3Qga2V5ZmlsZToKICAgICAgICAgICAgICAgICBrZXlmaWxlID0gY2VydGZpbGUKLSAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IFNTTENvbnRleHQoc3NsX3ZlcnNpb24pCi0gICAgICAgICAgICBzZWxmLmNvbnRleHQudmVyaWZ5X21vZGUgPSBjZXJ0X3JlcXMKKyAgICAgICAgICAgIHNlbGYuX2NvbnRleHQgPSBTU0xDb250ZXh0KHNzbF92ZXJzaW9uKQorICAgICAgICAgICAgc2VsZi5fY29udGV4dC52ZXJpZnlfbW9kZSA9IGNlcnRfcmVxcwogICAgICAgICAgICAgaWYgY2FfY2VydHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYV9jZXJ0cykKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYV9jZXJ0cykKICAgICAgICAgICAgIGlmIGNlcnRmaWxlOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCiAgICAgICAgICAgICBpZiBucG5fcHJvdG9jb2xzOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5zZXRfbnBuX3Byb3RvY29scyhucG5fcHJvdG9jb2xzKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQuc2V0X25wbl9wcm90b2NvbHMobnBuX3Byb3RvY29scykKICAgICAgICAgICAgIGlmIGNpcGhlcnM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnNldF9jaXBoZXJzKGNpcGhlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5zZXRfY2lwaGVycyhjaXBoZXJzKQogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRfcmVxcyA9IGNlcnRfcmVxcwpAQCAtMzAzLDcgKzM1OCw2IEBACiAgICAgICAgIHNlbGYuc2VydmVyX2hvc3RuYW1lID0gc2VydmVyX2hvc3RuYW1lCiAgICAgICAgIHNlbGYuZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QgPSBkb19oYW5kc2hha2Vfb25fY29ubmVjdAogICAgICAgICBzZWxmLnN1cHByZXNzX3JhZ2dlZF9lb2ZzID0gc3VwcHJlc3NfcmFnZ2VkX2VvZnMKLSAgICAgICAgY29ubmVjdGVkID0gRmFsc2UKICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNvY2tldC5fX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1zb2NrLmZhbWlseSwKQEAgLTMxMSwyNyArMzY1LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89c29jay5wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbm89c29jay5maWxlbm8oKSkKICAgICAgICAgICAgIHNlbGYuc2V0dGltZW91dChzb2NrLmdldHRpbWVvdXQoKSkKLSAgICAgICAgICAgICMgc2VlIGlmIGl0J3MgY29ubmVjdGVkCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc29jay5nZXRwZWVybmFtZSgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICAgICAgc29jay5kZXRhY2goKQogICAgICAgICBlbGlmIGZpbGVubyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNvY2tldC5fX2luaXRfXyhzZWxmLCBmaWxlbm89ZmlsZW5vKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwgcHJvdG89cHJvdG8pCiAKKyAgICAgICAgIyBTZWUgaWYgd2UgYXJlIGNvbm5lY3RlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmdldHBlZXJuYW1lKCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGNvbm5lY3RlZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uZWN0ZWQgPSBUcnVlCisKICAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQogICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBjb25uZWN0ZWQKICAgICAgICAgaWYgY29ubmVjdGVkOgogICAgICAgICAgICAgIyBjcmVhdGUgdGhlIFNTTCBvYmplY3QKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBzZWxmLmNvbnRleHQuX3dyYXBfc29ja2V0KHNlbGYsIHNlcnZlcl9zaWRlLAorICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IHNlbGYuX2NvbnRleHQuX3dyYXBfc29ja2V0KHNlbGYsIHNlcnZlcl9zaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lKQogICAgICAgICAgICAgICAgIGlmIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgogICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5nZXR0aW1lb3V0KCkKQEAgLTM0MCwxMCArMzk2LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJkb19oYW5kc2hha2Vfb25fY29ubmVjdCBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBmb3Igbm9uLWJsb2NraW5nIHNvY2tldHMiKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCiAKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgeAogCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvbnRleHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb250ZXh0CisKKyAgICBAY29udGV4dC5zZXR0ZXIKKyAgICBkZWYgY29udGV4dChzZWxmLCBjdHgpOgorICAgICAgICBzZWxmLl9jb250ZXh0ID0gY3R4CisgICAgICAgIHNlbGYuX3NzbG9iai5jb250ZXh0ID0gY3R4CisKICAgICBkZWYgZHVwKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZCgiQ2FuJ3QgZHVwKCkgJXMgaW5zdGFuY2VzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQpAQCAtMzUyLDExICs0MTcsMjEgQEAKICAgICAgICAgIyByYWlzZSBhbiBleGNlcHRpb24gaGVyZSBpZiB5b3Ugd2lzaCB0byBjaGVjayBmb3Igc3B1cmlvdXMgY2xvc2VzCiAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfY2hlY2tfY29ubmVjdGVkKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgIyBnZXRwZWVybmFtZSgpIHdpbGwgcmFpc2UgRU5PVENPTk4gaWYgdGhlIHNvY2tldCBpcyByZWFsbHkKKyAgICAgICAgICAgICMgbm90IGNvbm5lY3RlZDsgbm90ZSB0aGF0IHdlIGNhbiBiZSBjb25uZWN0ZWQgZXZlbiB3aXRob3V0CisgICAgICAgICAgICAjIF9jb25uZWN0ZWQgYmVpbmcgc2V0LCBlLmcuIGlmIGNvbm5lY3QoKSBmaXJzdCByZXR1cm5lZAorICAgICAgICAgICAgIyBFQUdBSU4uCisgICAgICAgICAgICBzZWxmLmdldHBlZXJuYW1lKCkKKwogICAgIGRlZiByZWFkKHNlbGYsIGxlbj0wLCBidWZmZXI9Tm9uZSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gTEVOIGJ5dGVzIGFuZCByZXR1cm4gdGhlbS4KICAgICAgICAgUmV0dXJuIHplcm8tbGVuZ3RoIHN0cmluZyBvbiBFT0YuIiIiCiAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICBpZiBub3Qgc2VsZi5fc3Nsb2JqOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUmVhZCBvbiBjbG9zZWQgb3IgdW53cmFwcGVkIFNTTCBzb2NrZXQuIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgYnVmZmVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoucmVhZChsZW4sIGJ1ZmZlcikKQEAgLTM3Nyw2ICs0NTIsOCBAQAogICAgICAgICBudW1iZXIgb2YgYnl0ZXMgb2YgREFUQSBhY3R1YWxseSB0cmFuc21pdHRlZC4iIiIKIAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9zc2xvYmo6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJXcml0ZSBvbiBjbG9zZWQgb3IgdW53cmFwcGVkIFNTTCBzb2NrZXQuIikKICAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai53cml0ZShkYXRhKQogCiAgICAgZGVmIGdldHBlZXJjZXJ0KHNlbGYsIGJpbmFyeV9mb3JtPUZhbHNlKToKQEAgLTM4Niw2ICs0NjMsNyBAQAogICAgICAgICBjZXJ0aWZpY2F0ZSB3YXMgcHJvdmlkZWQsIGJ1dCBub3QgdmFsaWRhdGVkLiIiIgogCiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfY29ubmVjdGVkKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai5wZWVyX2NlcnRpZmljYXRlKGJpbmFyeV9mb3JtKQogCiAgICAgZGVmIHNlbGVjdGVkX25wbl9wcm90b2NvbChzZWxmKToKQEAgLTQxNiwxOCArNDk0LDE3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIGZsYWdzIG5vdCBhbGxvd2VkIGluIGNhbGxzIHRvIHNlbmQoKSBvbiAlcyIgJQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXykKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFNTTEVycm9yIGFzIHg6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9SRUFEOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgICAgICAgICAgZWxpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfV1JJVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgU1NMRXJyb3IgYXMgeDoKKyAgICAgICAgICAgICAgICBpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBlbGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5zZW5kKHNlbGYsIGRhdGEsIGZsYWdzKQogCkBAIC01MzUsMTIgKzYxMiwxMSBAQAogCiAgICAgZGVmIF9yZWFsX2Nsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCi0gICAgICAgICMgc2VsZi5fY2xvc2VkID0gVHJ1ZQogICAgICAgICBzb2NrZXQuX3JlYWxfY2xvc2Uoc2VsZikKIAogICAgIGRlZiBkb19oYW5kc2hha2Uoc2VsZiwgYmxvY2s9RmFsc2UpOgogICAgICAgICAiIiJQZXJmb3JtIGEgVExTL1NTTCBoYW5kc2hha2UuIiIiCi0KKyAgICAgICAgc2VsZi5fY2hlY2tfY29ubmVjdGVkKCkKICAgICAgICAgdGltZW91dCA9IHNlbGYuZ2V0dGltZW91dCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHRpbWVvdXQgPT0gMC4wIGFuZCBibG9jazoKQEAgLTU2NCwxMSArNjQwLDExIEBACiAgICAgICAgICAgICAgICAgcmMgPSBOb25lCiAgICAgICAgICAgICAgICAgc29ja2V0LmNvbm5lY3Qoc2VsZiwgYWRkcikKICAgICAgICAgICAgIGlmIG5vdCByYzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19oYW5kc2hha2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgIHJldHVybiByYwotICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKICAgICAgICAgICAgIHJhaXNlCiAKZGlmZiAtLWdpdCBhL0xpYi9zdGF0LnB5IGIvTGliL3N0YXQucHkKaW5kZXggNzA0YWRmZS4uM2VlY2MzZSAxMDA2NDQKLS0tIGEvTGliL3N0YXQucHkKKysrIGIvTGliL3N0YXQucHkKQEAgLTE0NywzICsxNDcsOSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGVybS5hcHBlbmQoIi0iKQogICAgIHJldHVybiAiIi5qb2luKHBlcm0pCisKKyMgSWYgYXZhaWxhYmxlLCB1c2UgQyBpbXBsZW1lbnRhdGlvbgordHJ5OgorICAgIGZyb20gX3N0YXQgaW1wb3J0ICoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvc3RhdGlzdGljcy5weSBiL0xpYi9zdGF0aXN0aWNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2N2E2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvc3RhdGlzdGljcy5weQpAQCAtMCwwICsxLDYxMCBAQAorIyMgIE1vZHVsZSBzdGF0aXN0aWNzLnB5CisjIworIyMgIENvcHlyaWdodCAoYykgMjAxMyBTdGV2ZW4gRCdBcHJhbm8gPHN0ZXZlK3B5dGhvbkBwZWFyd29vZC5pbmZvPi4KKyMjCisjIyAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIyAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyMgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyMKKyMjICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMjCisjIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyMgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyMgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIiIgorQmFzaWMgc3RhdGlzdGljcyBtb2R1bGUuCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgY2FsY3VsYXRpbmcgc3RhdGlzdGljcyBvZiBkYXRhLCBpbmNsdWRpbmcKK2F2ZXJhZ2VzLCB2YXJpYW5jZSwgYW5kIHN0YW5kYXJkIGRldmlhdGlvbi4KKworQ2FsY3VsYXRpbmcgYXZlcmFnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitGdW5jdGlvbiAgICAgICAgICAgIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorbWVhbiAgICAgICAgICAgICAgICBBcml0aG1ldGljIG1lYW4gKGF2ZXJhZ2UpIG9mIGRhdGEuCittZWRpYW4gICAgICAgICAgICAgIE1lZGlhbiAobWlkZGxlIHZhbHVlKSBvZiBkYXRhLgorbWVkaWFuX2xvdyAgICAgICAgICBMb3cgbWVkaWFuIG9mIGRhdGEuCittZWRpYW5faGlnaCAgICAgICAgIEhpZ2ggbWVkaWFuIG9mIGRhdGEuCittZWRpYW5fZ3JvdXBlZCAgICAgIE1lZGlhbiwgb3IgNTB0aCBwZXJjZW50aWxlLCBvZiBncm91cGVkIGRhdGEuCittb2RlICAgICAgICAgICAgICAgIE1vZGUgKG1vc3QgY29tbW9uIHZhbHVlKSBvZiBkYXRhLgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ2FsY3VsYXRlIHRoZSBhcml0aG1ldGljIG1lYW4gKCJ0aGUgYXZlcmFnZSIpIG9mIGRhdGE6CisKKz4+PiBtZWFuKFstMS4wLCAyLjUsIDMuMjUsIDUuNzVdKQorMi42MjUKKworCitDYWxjdWxhdGUgdGhlIHN0YW5kYXJkIG1lZGlhbiBvZiBkaXNjcmV0ZSBkYXRhOgorCis+Pj4gbWVkaWFuKFsyLCAzLCA0LCA1XSkKKzMuNQorCisKK0NhbGN1bGF0ZSB0aGUgbWVkaWFuLCBvciA1MHRoIHBlcmNlbnRpbGUsIG9mIGRhdGEgZ3JvdXBlZCBpbnRvIGNsYXNzIGludGVydmFscworY2VudHJlZCBvbiB0aGUgZGF0YSB2YWx1ZXMgcHJvdmlkZWQuIEUuZy4gaWYgeW91ciBkYXRhIHBvaW50cyBhcmUgcm91bmRlZCB0bwordGhlIG5lYXJlc3Qgd2hvbGUgbnVtYmVyOgorCis+Pj4gbWVkaWFuX2dyb3VwZWQoWzIsIDIsIDMsIDMsIDMsIDRdKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUworMi44MzMzMzMzMzMzLi4uCisKK1RoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGluIHRoaXMgd2F5OiB5b3UgaGF2ZSB0d28gZGF0YSBwb2ludHMgaW4gdGhlIGNsYXNzCitpbnRlcnZhbCAxLjUtMi41LCB0aHJlZSBkYXRhIHBvaW50cyBpbiB0aGUgY2xhc3MgaW50ZXJ2YWwgMi41LTMuNSwgYW5kIG9uZSBpbgordGhlIGNsYXNzIGludGVydmFsIDMuNS00LjUuIFRoZSBtZWRpYW4gb2YgdGhlc2UgZGF0YSBwb2ludHMgaXMgMi44MzMzLi4uCisKKworQ2FsY3VsYXRpbmcgdmFyaWFiaWxpdHkgb3Igc3ByZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Z1bmN0aW9uICAgICAgICAgICAgRGVzY3JpcHRpb24KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitwdmFyaWFuY2UgICAgICAgICAgIFBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgZGF0YS4KK3ZhcmlhbmNlICAgICAgICAgICAgU2FtcGxlIHZhcmlhbmNlIG9mIGRhdGEuCitwc3RkZXYgICAgICAgICAgICAgIFBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCitzdGRldiAgICAgICAgICAgICAgIFNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NhbGN1bGF0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHNhbXBsZSBkYXRhOgorCis+Pj4gc3RkZXYoWzIuNSwgMy4yNSwgNS41LCAxMS4yNSwgMTEuNzVdKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUworNC4zODk2MTg0MzQ0NC4uLgorCitJZiB5b3UgaGF2ZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgdGhlIG1lYW4sIHlvdSBjYW4gcGFzcyBpdCBhcyB0aGUgb3B0aW9uYWwKK3NlY29uZCBhcmd1bWVudCB0byB0aGUgZm91ciAic3ByZWFkIiBmdW5jdGlvbnMgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdDoKKworPj4+IGRhdGEgPSBbMSwgMiwgMiwgNCwgNCwgNCwgNSwgNl0KKz4+PiBtdSA9IG1lYW4oZGF0YSkKKz4+PiBwdmFyaWFuY2UoZGF0YSwgbXUpCisyLjUKKworCitFeGNlcHRpb25zCistLS0tLS0tLS0tCisKK0Egc2luZ2xlIGV4Y2VwdGlvbiBpcyBkZWZpbmVkOiBTdGF0aXN0aWNzRXJyb3IgaXMgYSBzdWJjbGFzcyBvZiBWYWx1ZUVycm9yLgorCisiIiIKKworX19hbGxfXyA9IFsgJ1N0YXRpc3RpY3NFcnJvcicsCisgICAgICAgICAgICAncHN0ZGV2JywgJ3B2YXJpYW5jZScsICdzdGRldicsICd2YXJpYW5jZScsCisgICAgICAgICAgICAnbWVkaWFuJywgICdtZWRpYW5fbG93JywgJ21lZGlhbl9oaWdoJywgJ21lZGlhbl9ncm91cGVkJywKKyAgICAgICAgICAgICdtZWFuJywgJ21vZGUnLAorICAgICAgICAgIF0KKworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBtYXRoCisKK2Zyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbgorZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisKKworIyA9PT0gRXhjZXB0aW9ucyA9PT0KKworY2xhc3MgU3RhdGlzdGljc0Vycm9yKFZhbHVlRXJyb3IpOgorICAgIHBhc3MKKworCisjID09PSBQcml2YXRlIHV0aWxpdGllcyA9PT0KKworZGVmIF9zdW0oZGF0YSwgc3RhcnQ9MCk6CisgICAgIiIiX3N1bShkYXRhIFssIHN0YXJ0XSkgLT4gdmFsdWUKKworICAgIFJldHVybiBhIGhpZ2gtcHJlY2lzaW9uIHN1bSBvZiB0aGUgZ2l2ZW4gbnVtZXJpYyBkYXRhLiBJZiBvcHRpb25hbAorICAgIGFyZ3VtZW50IGBgc3RhcnRgYCBpcyBnaXZlbiwgaXQgaXMgYWRkZWQgdG8gdGhlIHRvdGFsLiBJZiBgYGRhdGFgYCBpcworICAgIGVtcHR5LCBgYHN0YXJ0YGAgKGRlZmF1bHRpbmcgdG8gMCkgaXMgcmV0dXJuZWQuCisKKworICAgIEV4YW1wbGVzCisgICAgLS0tLS0tLS0KKworICAgID4+PiBfc3VtKFszLCAyLjI1LCA0LjUsIC0wLjUsIDEuMF0sIDAuNzUpCisgICAgMTEuMAorCisgICAgU29tZSBzb3VyY2VzIG9mIHJvdW5kLW9mZiBlcnJvciB3aWxsIGJlIGF2b2lkZWQ6CisKKyAgICA+Pj4gX3N1bShbMWU1MCwgMSwgLTFlNTBdICogMTAwMCkgICMgQnVpbHQtaW4gc3VtIHJldHVybnMgemVyby4KKyAgICAxMDAwLjAKKworICAgIEZyYWN0aW9ucyBhbmQgRGVjaW1hbHMgYXJlIGFsc28gc3VwcG9ydGVkOgorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IF9zdW0oW0YoMiwgMyksIEYoNywgNSksIEYoMSwgNCksIEYoNSwgNildKQorICAgIEZyYWN0aW9uKDYzLCAyMCkKKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgID4+PiBkYXRhID0gW0QoIjAuMTM3NSIpLCBEKCIwLjIxMDgiKSwgRCgiMC4zMDYxIiksIEQoIjAuMDQxOSIpXQorICAgID4+PiBfc3VtKGRhdGEpCisgICAgRGVjaW1hbCgnMC42OTYzJykKKworICAgICIiIgorICAgIG4sIGQgPSBfZXhhY3RfcmF0aW8oc3RhcnQpCisgICAgVCA9IHR5cGUoc3RhcnQpCisgICAgcGFydGlhbHMgPSB7ZDogbn0gICMgbWFwIHtkZW5vbWluYXRvcjogc3VtIG9mIG51bWVyYXRvcnN9CisgICAgIyBNaWNyby1vcHRpbWl6YXRpb25zLgorICAgIGNvZXJjZV90eXBlcyA9IF9jb2VyY2VfdHlwZXMKKyAgICBleGFjdF9yYXRpbyA9IF9leGFjdF9yYXRpbworICAgIHBhcnRpYWxzX2dldCA9IHBhcnRpYWxzLmdldAorICAgICMgQWRkIG51bWVyYXRvcnMgZm9yIGVhY2ggZGVub21pbmF0b3IsIGFuZCB0cmFjayB0aGUgImN1cnJlbnQiIHR5cGUuCisgICAgZm9yIHggaW4gZGF0YToKKyAgICAgICAgVCA9IF9jb2VyY2VfdHlwZXMoVCwgdHlwZSh4KSkKKyAgICAgICAgbiwgZCA9IGV4YWN0X3JhdGlvKHgpCisgICAgICAgIHBhcnRpYWxzW2RdID0gcGFydGlhbHNfZ2V0KGQsIDApICsgbgorICAgIGlmIE5vbmUgaW4gcGFydGlhbHM6CisgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKFQsIChmbG9hdCwgRGVjaW1hbCkpCisgICAgICAgIGFzc2VydCBub3QgbWF0aC5pc2Zpbml0ZShwYXJ0aWFsc1tOb25lXSkKKyAgICAgICAgcmV0dXJuIFQocGFydGlhbHNbTm9uZV0pCisgICAgdG90YWwgPSBGcmFjdGlvbigpCisgICAgZm9yIGQsIG4gaW4gc29ydGVkKHBhcnRpYWxzLml0ZW1zKCkpOgorICAgICAgICB0b3RhbCArPSBGcmFjdGlvbihuLCBkKQorICAgIGlmIGlzc3ViY2xhc3MoVCwgaW50KToKKyAgICAgICAgYXNzZXJ0IHRvdGFsLmRlbm9taW5hdG9yID09IDEKKyAgICAgICAgcmV0dXJuIFQodG90YWwubnVtZXJhdG9yKQorICAgIGlmIGlzc3ViY2xhc3MoVCwgRGVjaW1hbCk6CisgICAgICAgIHJldHVybiBUKHRvdGFsLm51bWVyYXRvcikvdG90YWwuZGVub21pbmF0b3IKKyAgICByZXR1cm4gVCh0b3RhbCkKKworCitkZWYgX2V4YWN0X3JhdGlvKHgpOgorICAgICIiIkNvbnZlcnQgUmVhbCBudW1iZXIgeCBleGFjdGx5IHRvIChudW1lcmF0b3IsIGRlbm9taW5hdG9yKSBwYWlyLgorCisgICAgPj4+IF9leGFjdF9yYXRpbygwLjI1KQorICAgICgxLCA0KQorCisgICAgeCBpcyBleHBlY3RlZCB0byBiZSBhbiBpbnQsIEZyYWN0aW9uLCBEZWNpbWFsIG9yIGZsb2F0LgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBpbnQsIEZyYWN0aW9uCisgICAgICAgICAgICByZXR1cm4gKHgubnVtZXJhdG9yLCB4LmRlbm9taW5hdG9yKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIGZsb2F0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHguYXNfaW50ZWdlcl9yYXRpbygpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBEZWNpbWFsCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2RlY2ltYWxfdG9fcmF0aW8oeCkKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBjb252ZXJ0IHR5cGUgJ3t9JyB0byBudW1lcmF0b3IvZGVub21pbmF0b3IiCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cuZm9ybWF0KHR5cGUoeCkuX19uYW1lX18pKSBmcm9tIE5vbmUKKyAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAjIElORiBvciBOQU4KKyAgICAgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICAgICAgIyBEZWNpbWFsIHNpZ25hbGxpbmcgTkFOcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGZsb2F0IDotKAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCBEZWNpbWFsKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHguaXNfZmluaXRlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBtYXRoLmlzZmluaXRlKHgpCisgICAgICAgIHJldHVybiAoeCwgTm9uZSkKKworCisjIEZJWE1FIFRoaXMgaXMgZmFzdGVyIHRoYW4gRnJhY3Rpb24uZnJvbV9kZWNpbWFsLCBidXQgc3RpbGwgdG9vIHNsb3cuCitkZWYgX2RlY2ltYWxfdG9fcmF0aW8oZCk6CisgICAgIiIiQ29udmVydCBEZWNpbWFsIGQgdG8gZXhhY3QgaW50ZWdlciByYXRpbyAobnVtZXJhdG9yLCBkZW5vbWluYXRvcikuCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisgICAgPj4+IF9kZWNpbWFsX3RvX3JhdGlvKERlY2ltYWwoIjIuNiIpKQorICAgICgyNiwgMTApCisKKyAgICAiIiIKKyAgICBzaWduLCBkaWdpdHMsIGV4cCA9IGQuYXNfdHVwbGUoKQorICAgIGlmIGV4cCBpbiAoJ0YnLCAnbicsICdOJyk6ICAjIElORiwgTkFOLCBzTkFOCisgICAgICAgIGFzc2VydCBub3QgZC5pc19maW5pdGUoKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgbnVtID0gMAorICAgIGZvciBkaWdpdCBpbiBkaWdpdHM6CisgICAgICAgIG51bSA9IG51bSoxMCArIGRpZ2l0CisgICAgaWYgc2lnbjoKKyAgICAgICAgbnVtID0gLW51bQorICAgIGRlbiA9IDEwKiotZXhwCisgICAgcmV0dXJuIChudW0sIGRlbikKKworCitkZWYgX2NvZXJjZV90eXBlcyhUMSwgVDIpOgorICAgICIiIkNvZXJjZSB0eXBlcyBUMSBhbmQgVDIgdG8gYSBjb21tb24gdHlwZS4KKworICAgID4+PiBfY29lcmNlX3R5cGVzKGludCwgZmxvYXQpCisgICAgPGNsYXNzICdmbG9hdCc+CisKKyAgICBDb2VyY2lvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoaXMgdGFibGUsIHdoZXJlICJOL0EiIG1lYW5zCisgICAgdGhhdCBhIFR5cGVFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLgorCisgICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAgICB8ICAgICAgICAgIHwgaW50ICAgICAgIHwgRnJhY3Rpb24gIHwgRGVjaW1hbCAgIHwgZmxvYXQgICAgfAorICAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgfCBpbnQgICAgICB8IGludCAgICAgICB8IEZyYWN0aW9uICB8IERlY2ltYWwgICB8IGZsb2F0ICAgIHwKKyAgICB8IEZyYWN0aW9uIHwgRnJhY3Rpb24gIHwgRnJhY3Rpb24gIHwgTi9BICAgICAgIHwgZmxvYXQgICAgfAorICAgIHwgRGVjaW1hbCAgfCBEZWNpbWFsICAgfCBOL0EgICAgICAgfCBEZWNpbWFsICAgfCBmbG9hdCAgICB8CisgICAgfCBmbG9hdCAgICB8IGZsb2F0ICAgICB8IGZsb2F0ICAgICB8IGZsb2F0ICAgICB8IGZsb2F0ICAgIHwKKyAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKworCisgICAgU3ViY2xhc3NlcyB0cnVtcCB0aGVpciBwYXJlbnQgY2xhc3M7IHR3byBzdWJjbGFzc2VzIG9mIHRoZSBzYW1lCisgICAgYmFzZSBjbGFzcyB3aWxsIGJlIGNvZXJjZWQgdG8gdGhlIHNlY29uZCBvZiB0aGUgdHdvLgorCisgICAgIiIiCisgICAgIyBHZXQgdGhlIGNvbW1vbi9mYXN0IGNhc2VzIG91dCBvZiB0aGUgd2F5IGZpcnN0LgorICAgIGlmIFQxIGlzIFQyOiByZXR1cm4gVDEKKyAgICBpZiBUMSBpcyBpbnQ6IHJldHVybiBUMgorICAgIGlmIFQyIGlzIGludDogcmV0dXJuIFQxCisgICAgIyBTdWJjbGFzc2VzIHRydW1wIHRoZWlyIHBhcmVudCBjbGFzcy4KKyAgICBpZiBpc3N1YmNsYXNzKFQyLCBUMSk6IHJldHVybiBUMgorICAgIGlmIGlzc3ViY2xhc3MoVDEsIFQyKTogcmV0dXJuIFQxCisgICAgIyBGbG9hdHMgdHJ1bXAgZXZlcnl0aGluZyBlbHNlLgorICAgIGlmIGlzc3ViY2xhc3MoVDIsIGZsb2F0KTogcmV0dXJuIFQyCisgICAgaWYgaXNzdWJjbGFzcyhUMSwgZmxvYXQpOiByZXR1cm4gVDEKKyAgICAjIFN1YmNsYXNzZXMgb2YgdGhlIHNhbWUgYmFzZSBjbGFzcyBnaXZlIHByaW9yaXR5IHRvIHRoZSBzZWNvbmQuCisgICAgaWYgVDEuX19iYXNlX18gaXMgVDIuX19iYXNlX186IHJldHVybiBUMgorICAgICMgT3RoZXJ3aXNlLCBqdXN0IGdpdmUgdXAuCisgICAgcmFpc2UgVHlwZUVycm9yKCdjYW5ub3QgY29lcmNlIHR5cGVzICVyIGFuZCAlcicgJSAoVDEsIFQyKSkKKworCitkZWYgX2NvdW50cyhkYXRhKToKKyAgICAjIEdlbmVyYXRlIGEgdGFibGUgb2Ygc29ydGVkICh2YWx1ZSwgZnJlcXVlbmN5KSBwYWlycy4KKyAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignTm9uZSBpcyBub3QgaXRlcmFibGUnKQorICAgIHRhYmxlID0gY29sbGVjdGlvbnMuQ291bnRlcihkYXRhKS5tb3N0X2NvbW1vbigpCisgICAgaWYgbm90IHRhYmxlOgorICAgICAgICByZXR1cm4gdGFibGUKKyAgICAjIEV4dHJhY3QgdGhlIHZhbHVlcyB3aXRoIHRoZSBoaWdoZXN0IGZyZXF1ZW5jeS4KKyAgICBtYXhmcmVxID0gdGFibGVbMF1bMV0KKyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4odGFibGUpKToKKyAgICAgICAgaWYgdGFibGVbaV1bMV0gIT0gbWF4ZnJlcToKKyAgICAgICAgICAgIHRhYmxlID0gdGFibGVbOmldCisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiB0YWJsZQorCisKKyMgPT09IE1lYXN1cmVzIG9mIGNlbnRyYWwgdGVuZGVuY3kgKGF2ZXJhZ2VzKSA9PT0KKworZGVmIG1lYW4oZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBzYW1wbGUgYXJpdGhtZXRpYyBtZWFuIG9mIGRhdGEuCisKKyAgICA+Pj4gbWVhbihbMSwgMiwgMywgNCwgNF0pCisgICAgMi44CisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gbWVhbihbRigzLCA3KSwgRigxLCAyMSksIEYoNSwgMyksIEYoMSwgMyldKQorICAgIEZyYWN0aW9uKDEzLCAyMSkKKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgID4+PiBtZWFuKFtEKCIwLjUiKSwgRCgiMC43NSIpLCBEKCIwLjYyNSIpLCBEKCIwLjM3NSIpXSkKKyAgICBEZWNpbWFsKCcwLjU2MjUnKQorCisgICAgSWYgYGBkYXRhYGAgaXMgZW1wdHksIFN0YXRpc3RpY3NFcnJvciB3aWxsIGJlIHJhaXNlZC4KKyAgICAiIiIKKyAgICBpZiBpdGVyKGRhdGEpIGlzIGRhdGE6CisgICAgICAgIGRhdGEgPSBsaXN0KGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPCAxOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ21lYW4gcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGRhdGEgcG9pbnQnKQorICAgIHJldHVybiBfc3VtKGRhdGEpL24KKworCisjIEZJWE1FOiBpbnZlc3RpZ2F0ZSB3YXlzIHRvIGNhbGN1bGF0ZSBtZWRpYW5zIHdpdGhvdXQgc29ydGluZz8gUXVpY2tzZWxlY3Q/CitkZWYgbWVkaWFuKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgbWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIG51bWVyaWMgZGF0YS4KKworICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBvZGQsIHJldHVybiB0aGUgbWlkZGxlIGRhdGEgcG9pbnQuCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIGV2ZW4sIHRoZSBtZWRpYW4gaXMgaW50ZXJwb2xhdGVkIGJ5CisgICAgdGFraW5nIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlczoKKworICAgID4+PiBtZWRpYW4oWzEsIDMsIDVdKQorICAgIDMKKyAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1LCA3XSkKKyAgICA0LjAKKworICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgaWYgbiUyID09IDE6CisgICAgICAgIHJldHVybiBkYXRhW24vLzJdCisgICAgZWxzZToKKyAgICAgICAgaSA9IG4vLzIKKyAgICAgICAgcmV0dXJuIChkYXRhW2kgLSAxXSArIGRhdGFbaV0pLzIKKworCitkZWYgbWVkaWFuX2xvdyhkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIGxvdyBtZWRpYW4gb2YgbnVtZXJpYyBkYXRhLgorCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICBXaGVuIGl0IGlzIGV2ZW4sIHRoZSBzbWFsbGVyIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1XSkKKyAgICAzCisgICAgPj4+IG1lZGlhbl9sb3coWzEsIDMsIDUsIDddKQorICAgIDMKKworICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgaWYgbiUyID09IDE6CisgICAgICAgIHJldHVybiBkYXRhW24vLzJdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGRhdGFbbi8vMiAtIDFdCisKKworZGVmIG1lZGlhbl9oaWdoKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgaGlnaCBtZWRpYW4gb2YgZGF0YS4KKworICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuCisgICAgV2hlbiBpdCBpcyBldmVuLCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNV0pCisgICAgMworICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNSwgN10pCisgICAgNQorCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICByZXR1cm4gZGF0YVtuLy8yXQorCisKK2RlZiBtZWRpYW5fZ3JvdXBlZChkYXRhLCBpbnRlcnZhbD0xKToKKyAgICAiIiIiUmV0dXJuIHRoZSA1MHRoIHBlcmNlbnRpbGUgKG1lZGlhbikgb2YgZ3JvdXBlZCBjb250aW51b3VzIGRhdGEuCisKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDIsIDIsIDMsIDQsIDQsIDQsIDQsIDQsIDVdKQorICAgIDMuNworICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbNTIsIDUyLCA1MywgNTRdKQorICAgIDUyLjUKKworICAgIFRoaXMgY2FsY3VsYXRlcyB0aGUgbWVkaWFuIGFzIHRoZSA1MHRoIHBlcmNlbnRpbGUsIGFuZCBzaG91bGQgYmUKKyAgICB1c2VkIHdoZW4geW91ciBkYXRhIGlzIGNvbnRpbnVvdXMgYW5kIGdyb3VwZWQuIEluIHRoZSBhYm92ZSBleGFtcGxlLAorICAgIHRoZSB2YWx1ZXMgMSwgMiwgMywgZXRjLiBhY3R1YWxseSByZXByZXNlbnQgdGhlIG1pZHBvaW50IG9mIGNsYXNzZXMKKyAgICAwLjUtMS41LCAxLjUtMi41LCAyLjUtMy41LCBldGMuIFRoZSBtaWRkbGUgdmFsdWUgZmFsbHMgc29tZXdoZXJlIGluCisgICAgY2xhc3MgMy41LTQuNSwgYW5kIGludGVycG9sYXRpb24gaXMgdXNlZCB0byBlc3RpbWF0ZSBpdC4KKworICAgIE9wdGlvbmFsIGFyZ3VtZW50IGBgaW50ZXJ2YWxgYCByZXByZXNlbnRzIHRoZSBjbGFzcyBpbnRlcnZhbCwgYW5kCisgICAgZGVmYXVsdHMgdG8gMS4gQ2hhbmdpbmcgdGhlIGNsYXNzIGludGVydmFsIG5hdHVyYWxseSB3aWxsIGNoYW5nZSB0aGUKKyAgICBpbnRlcnBvbGF0ZWQgNTB0aCBwZXJjZW50aWxlIHZhbHVlOgorCisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MSkKKyAgICAzLjI1CisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MikKKyAgICAzLjUKKworICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgd2hldGhlciB0aGUgZGF0YSBwb2ludHMgYXJlIGF0IGxlYXN0CisgICAgYGBpbnRlcnZhbGBgIGFwYXJ0LgorICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgZWxpZiBuID09IDE6CisgICAgICAgIHJldHVybiBkYXRhWzBdCisgICAgIyBGaW5kIHRoZSB2YWx1ZSBhdCB0aGUgbWlkcG9pbnQuIFJlbWVtYmVyIHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlCisgICAgIyBjZW50cmUgb2YgdGhlIGNsYXNzIGludGVydmFsLgorICAgIHggPSBkYXRhW24vLzJdCisgICAgZm9yIG9iaiBpbiAoeCwgaW50ZXJ2YWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgKHN0ciwgYnl0ZXMpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgbnVtYmVyIGJ1dCBnb3QgJXInICUgb2JqKQorICAgIHRyeToKKyAgICAgICAgTCA9IHggLSBpbnRlcnZhbC8yICAjIFRoZSBsb3dlciBsaW1pdCBvZiB0aGUgbWVkaWFuIGludGVydmFsLgorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICMgTWl4ZWQgdHlwZS4gRm9yIG5vdyB3ZSBqdXN0IGNvZXJjZSB0byBmbG9hdC4KKyAgICAgICAgTCA9IGZsb2F0KHgpIC0gZmxvYXQoaW50ZXJ2YWwpLzIKKyAgICBjZiA9IGRhdGEuaW5kZXgoeCkgICMgTnVtYmVyIG9mIHZhbHVlcyBiZWxvdyB0aGUgbWVkaWFuIGludGVydmFsLgorICAgICMgRklYTUUgVGhlIGZvbGxvd2luZyBsaW5lIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50IGZvciBiaWcgbGlzdHMuCisgICAgZiA9IGRhdGEuY291bnQoeCkgICMgTnVtYmVyIG9mIGRhdGEgcG9pbnRzIGluIHRoZSBtZWRpYW4gaW50ZXJ2YWwuCisgICAgcmV0dXJuIEwgKyBpbnRlcnZhbCoobi8yIC0gY2YpL2YKKworCitkZWYgbW9kZShkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIG1vc3QgY29tbW9uIGRhdGEgcG9pbnQgZnJvbSBkaXNjcmV0ZSBvciBub21pbmFsIGRhdGEuCisKKyAgICBgYG1vZGVgYCBhc3N1bWVzIGRpc2NyZXRlIGRhdGEsIGFuZCByZXR1cm5zIGEgc2luZ2xlIHZhbHVlLiBUaGlzIGlzIHRoZQorICAgIHN0YW5kYXJkIHRyZWF0bWVudCBvZiB0aGUgbW9kZSBhcyBjb21tb25seSB0YXVnaHQgaW4gc2Nob29sczoKKworICAgID4+PiBtb2RlKFsxLCAxLCAyLCAzLCAzLCAzLCAzLCA0XSkKKyAgICAzCisKKyAgICBUaGlzIGFsc28gd29ya3Mgd2l0aCBub21pbmFsIChub24tbnVtZXJpYykgZGF0YToKKworICAgID4+PiBtb2RlKFsicmVkIiwgImJsdWUiLCAiYmx1ZSIsICJyZWQiLCAiZ3JlZW4iLCAicmVkIiwgInJlZCJdKQorICAgICdyZWQnCisKKyAgICBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbW9zdCBjb21tb24gdmFsdWUsIGBgbW9kZWBgIHdpbGwgcmFpc2UKKyAgICBTdGF0aXN0aWNzRXJyb3IuCisgICAgIiIiCisgICAgIyBHZW5lcmF0ZSBhIHRhYmxlIG9mIHNvcnRlZCAodmFsdWUsIGZyZXF1ZW5jeSkgcGFpcnMuCisgICAgdGFibGUgPSBfY291bnRzKGRhdGEpCisgICAgaWYgbGVuKHRhYmxlKSA9PSAxOgorICAgICAgICByZXR1cm4gdGFibGVbMF1bMF0KKyAgICBlbGlmIHRhYmxlOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoCisgICAgICAgICAgICAgICAgJ25vIHVuaXF1ZSBtb2RlOyBmb3VuZCAlZCBlcXVhbGx5IGNvbW1vbiB2YWx1ZXMnICUgbGVuKHRhYmxlKQorICAgICAgICAgICAgICAgICkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ25vIG1vZGUgZm9yIGVtcHR5IGRhdGEnKQorCisKKyMgPT09IE1lYXN1cmVzIG9mIHNwcmVhZCA9PT0KKworIyBTZWUgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9WYXJpYW5jZS5odG1sCisjICAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL1NhbXBsZVZhcmlhbmNlLmh0bWwKKyMgICAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWxnb3JpdGhtc19mb3JfY2FsY3VsYXRpbmdfdmFyaWFuY2UKKyMKKyMgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyB1c2UgdGhlIHNvLWNhbGxlZCAiY29tcHV0YXRpb25hbCBmb3JtdWxhIGZvcgorIyB2YXJpYW5jZSIsIGFzIHRoYXQgaXMgb25seSBzdWl0YWJsZSBmb3IgaGFuZCBjYWxjdWxhdGlvbnMgd2l0aCBhIHNtYWxsCisjIGFtb3VudCBvZiBsb3ctcHJlY2lzaW9uIGRhdGEuIEl0IGhhcyB0ZXJyaWJsZSBudW1lcmljIHByb3BlcnRpZXMuCisjCisjIFNlZSBhIGNvbXBhcmlzb24gb2YgdGhyZWUgY29tcHV0YXRpb25hbCBtZXRob2RzIGhlcmU6CisjIGh0dHA6Ly93d3cuam9obmRjb29rLmNvbS9ibG9nLzIwMDgvMDkvMjYvY29tcGFyaW5nLXRocmVlLW1ldGhvZHMtb2YtY29tcHV0aW5nLXN0YW5kYXJkLWRldmlhdGlvbi8KKworZGVmIF9zcyhkYXRhLCBjPU5vbmUpOgorICAgICIiIlJldHVybiBzdW0gb2Ygc3F1YXJlIGRldmlhdGlvbnMgb2Ygc2VxdWVuY2UgZGF0YS4KKworICAgIElmIGBgY2BgIGlzIE5vbmUsIHRoZSBtZWFuIGlzIGNhbGN1bGF0ZWQgaW4gb25lIHBhc3MsIGFuZCB0aGUgZGV2aWF0aW9ucworICAgIGZyb20gdGhlIG1lYW4gYXJlIGNhbGN1bGF0ZWQgaW4gYSBzZWNvbmQgcGFzcy4gT3RoZXJ3aXNlLCBkZXZpYXRpb25zIGFyZQorICAgIGNhbGN1bGF0ZWQgZnJvbSBgYGNgYCBhcyBnaXZlbi4gVXNlIHRoZSBzZWNvbmQgY2FzZSB3aXRoIGNhcmUsIGFzIGl0IGNhbgorICAgIGxlYWQgdG8gZ2FyYmFnZSByZXN1bHRzLgorICAgICIiIgorICAgIGlmIGMgaXMgTm9uZToKKyAgICAgICAgYyA9IG1lYW4oZGF0YSkKKyAgICBzcyA9IF9zdW0oKHgtYykqKjIgZm9yIHggaW4gZGF0YSkKKyAgICAjIFRoZSBmb2xsb3dpbmcgc3VtIHNob3VsZCBtYXRoZW1hdGljYWxseSBlcXVhbCB6ZXJvLCBidXQgZHVlIHRvIHJvdW5kaW5nCisgICAgIyBlcnJvciBtYXkgbm90LgorICAgIHNzIC09IF9zdW0oKHgtYykgZm9yIHggaW4gZGF0YSkqKjIvbGVuKGRhdGEpCisgICAgYXNzZXJ0IG5vdCBzcyA8IDAsICduZWdhdGl2ZSBzdW0gb2Ygc3F1YXJlIGRldmlhdGlvbnM6ICVmJyAlIHNzCisgICAgcmV0dXJuIHNzCisKKworZGVmIHZhcmlhbmNlKGRhdGEsIHhiYXI9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzYW1wbGUgdmFyaWFuY2Ugb2YgZGF0YS4KKworICAgIGRhdGEgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIFJlYWwtdmFsdWVkIG51bWJlcnMsIHdpdGggYXQgbGVhc3QgdHdvCisgICAgdmFsdWVzLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgeGJhciwgaWYgZ2l2ZW4sIHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgIHRoZSBkYXRhLiBJZiBpdCBpcyBtaXNzaW5nIG9yIE5vbmUsIHRoZSBtZWFuIGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgIFVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4geW91ciBkYXRhIGlzIGEgc2FtcGxlIGZyb20gYSBwb3B1bGF0aW9uLiBUbworICAgIGNhbGN1bGF0ZSB0aGUgdmFyaWFuY2UgZnJvbSB0aGUgZW50aXJlIHBvcHVsYXRpb24sIHNlZSBgYHB2YXJpYW5jZWBgLgorCisgICAgRXhhbXBsZXM6CisKKyAgICA+Pj4gZGF0YSA9IFsyLjc1LCAxLjc1LCAxLjI1LCAwLjI1LCAwLjUsIDEuMjUsIDMuNV0KKyAgICA+Pj4gdmFyaWFuY2UoZGF0YSkKKyAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgbWVhbiBvZiB5b3VyIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcworICAgIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYGB4YmFyYGAgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdDoKKworICAgID4+PiBtID0gbWVhbihkYXRhKQorICAgID4+PiB2YXJpYW5jZShkYXRhLCBtKQorICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGF0IGBgeGJhcmBgIGlzIGFjdHVhbGx5IHRoZSBtZWFuIG9mCisgICAgYGBkYXRhYGAuIEdpdmluZyBhcmJpdHJhcnkgdmFsdWVzIGZvciBgYHhiYXJgYCBtYXkgbGVhZCB0byBpbnZhbGlkIG9yCisgICAgaW1wb3NzaWJsZSByZXN1bHRzLgorCisgICAgRGVjaW1hbHMgYW5kIEZyYWN0aW9ucyBhcmUgc3VwcG9ydGVkOgorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IHZhcmlhbmNlKFtEKCIyNy41IiksIEQoIjMwLjI1IiksIEQoIjMwLjI1IiksIEQoIjM0LjUiKSwgRCgiNDEuNzUiKV0pCisgICAgRGVjaW1hbCgnMzEuMDE4NzUnKQorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IHZhcmlhbmNlKFtGKDEsIDYpLCBGKDEsIDIpLCBGKDUsIDMpXSkKKyAgICBGcmFjdGlvbig2NywgMTA4KQorCisgICAgIiIiCisgICAgaWYgaXRlcihkYXRhKSBpcyBkYXRhOgorICAgICAgICBkYXRhID0gbGlzdChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuIDwgMjoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCd2YXJpYW5jZSByZXF1aXJlcyBhdCBsZWFzdCB0d28gZGF0YSBwb2ludHMnKQorICAgIHNzID0gX3NzKGRhdGEsIHhiYXIpCisgICAgcmV0dXJuIHNzLyhuLTEpCisKKworZGVmIHB2YXJpYW5jZShkYXRhLCBtdT1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgYGBkYXRhYGAuCisKKyAgICBkYXRhIHNob3VsZCBiZSBhbiBpdGVyYWJsZSBvZiBSZWFsLXZhbHVlZCBudW1iZXJzLCB3aXRoIGF0IGxlYXN0IG9uZQorICAgIHZhbHVlLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgbXUsIGlmIGdpdmVuLCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICB0aGUgZGF0YS4gSWYgaXQgaXMgbWlzc2luZyBvciBOb25lLCB0aGUgbWVhbiBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuCisKKyAgICBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLgorICAgIFRvIGVzdGltYXRlIHRoZSB2YXJpYW5jZSBmcm9tIGEgc2FtcGxlLCB0aGUgYGB2YXJpYW5jZWBgIGZ1bmN0aW9uIGlzCisgICAgdXN1YWxseSBhIGJldHRlciBjaG9pY2UuCisKKyAgICBFeGFtcGxlczoKKworICAgID4+PiBkYXRhID0gWzAuMCwgMC4yNSwgMC4yNSwgMS4yNSwgMS41LCAxLjc1LCAyLjc1LCAzLjI1XQorICAgID4+PiBwdmFyaWFuY2UoZGF0YSkKKyAgICAxLjI1CisKKyAgICBJZiB5b3UgaGF2ZSBhbHJlYWR5IGNhbGN1bGF0ZWQgdGhlIG1lYW4gb2YgdGhlIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcworICAgIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdDoKKworICAgID4+PiBtdSA9IG1lYW4oZGF0YSkKKyAgICA+Pj4gcHZhcmlhbmNlKGRhdGEsIG11KQorICAgIDEuMjUKKworICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgdGhhdCBgYG11YGAgaXMgYWN0dWFsbHkgdGhlIG1lYW4gb2YgYGBkYXRhYGAuCisgICAgR2l2aW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBgbXVgYCBtYXkgbGVhZCB0byBpbnZhbGlkIG9yIGltcG9zc2libGUKKyAgICByZXN1bHRzLgorCisgICAgRGVjaW1hbHMgYW5kIEZyYWN0aW9ucyBhcmUgc3VwcG9ydGVkOgorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IHB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgIERlY2ltYWwoJzI0LjgxNScpCisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gcHZhcmlhbmNlKFtGKDEsIDQpLCBGKDUsIDQpLCBGKDEsIDIpXSkKKyAgICBGcmFjdGlvbigxMywgNzIpCisKKyAgICAiIiIKKyAgICBpZiBpdGVyKGRhdGEpIGlzIGRhdGE6CisgICAgICAgIGRhdGEgPSBsaXN0KGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPCAxOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ3B2YXJpYW5jZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZGF0YSBwb2ludCcpCisgICAgc3MgPSBfc3MoZGF0YSwgbXUpCisgICAgcmV0dXJuIHNzL24KKworCitkZWYgc3RkZXYoZGF0YSwgeGJhcj1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNxdWFyZSByb290IG9mIHRoZSBzYW1wbGUgdmFyaWFuY2UuCisKKyAgICBTZWUgYGB2YXJpYW5jZWBgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgICA+Pj4gc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgIDEuMDgxMDg3NDE1NTIxOTgyNworCisgICAgIiIiCisgICAgdmFyID0gdmFyaWFuY2UoZGF0YSwgeGJhcikKKyAgICB0cnk6CisgICAgICAgIHJldHVybiB2YXIuc3FydCgpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gbWF0aC5zcXJ0KHZhcikKKworCitkZWYgcHN0ZGV2KGRhdGEsIG11PU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKyAgICBTZWUgYGBwdmFyaWFuY2VgYCBmb3IgYXJndW1lbnRzIGFuZCBvdGhlciBkZXRhaWxzLgorCisgICAgPj4+IHBzdGRldihbMS41LCAyLjUsIDIuNSwgMi43NSwgMy4yNSwgNC43NV0pCisgICAgMC45ODY4OTMyNzM1MjcyNTEKKworICAgICIiIgorICAgIHZhciA9IHB2YXJpYW5jZShkYXRhLCBtdSkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiB2YXIuc3FydCgpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gbWF0aC5zcXJ0KHZhcikKZGlmZiAtLWdpdCBhL0xpYi9zdHJ1Y3QucHkgYi9MaWIvc3RydWN0LnB5CmluZGV4IDliZmMyM2YuLmQ2YmJhNTggMTAwNjQ0Ci0tLSBhL0xpYi9zdHJ1Y3QucHkKKysrIGIvTGliL3N0cnVjdC5weQpAQCAtMSw2ICsxLDcgQEAKIF9fYWxsX18gPSBbCiAgICAgIyBGdW5jdGlvbnMKICAgICAnY2FsY3NpemUnLCAncGFjaycsICdwYWNrX2ludG8nLCAndW5wYWNrJywgJ3VucGFja19mcm9tJywKKyAgICAnaXRlcl91bnBhY2snLAogCiAgICAgIyBDbGFzc2VzCiAgICAgJ1N0cnVjdCcsCmRpZmYgLS1naXQgYS9MaWIvc3VicHJvY2Vzcy5weSBiL0xpYi9zdWJwcm9jZXNzLnB5CmluZGV4IDM3NmI1MDUuLjIzYzllYTUgMTAwNjQ0Ci0tLSBhL0xpYi9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi9zdWJwcm9jZXNzLnB5CkBAIC0xNzgsNiArMTc4LDkgQEAKIAogICAgID4+PiBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImxzIiwgIi1sIiwgIi9kZXYvbnVsbCJdKQogCisgICAgVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBvcHRpb25hbCBhcmd1bWVudCwgImlucHV0IiwgYWxsb3dpbmcgeW91IHRvCisgICAgcGFzcyBhIHN0cmluZyB0byB0aGUgc3VicHJvY2VzcydzIHN0ZGluLiAgSWYgeW91IHVzZSB0aGlzIGFyZ3VtZW50CisgICAgeW91IG1heSBub3QgYWxzbyB1c2UgdGhlIFBvcGVuIGNvbnN0cnVjdG9yJ3MgInN0ZGluIiBhcmd1bWVudC4KIAogRXhjZXB0aW9ucwogLS0tLS0tLS0tLQpAQCAtMzk4LDEzICs0MDEsMTAgQEAKICAgICAgICAgaFN0ZE91dHB1dCA9IE5vbmUKICAgICAgICAgaFN0ZEVycm9yID0gTm9uZQogICAgICAgICB3U2hvd1dpbmRvdyA9IDAKLSAgICBjbGFzcyBweXdpbnR5cGVzOgotICAgICAgICBlcnJvciA9IElPRXJyb3IKIGVsc2U6CiAgICAgaW1wb3J0IHNlbGVjdAogICAgIF9oYXNfcG9sbCA9IGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpCiAgICAgaW1wb3J0IF9wb3NpeHN1YnByb2Nlc3MKLSAgICBfY3JlYXRlX3BpcGUgPSBfcG9zaXhzdWJwcm9jZXNzLmNsb2V4ZWNfcGlwZQogCiAgICAgIyBXaGVuIHNlbGVjdCBvciBwb2xsIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGUgZmlsZSBpcyB3cml0YWJsZSwKICAgICAjIHdlIGNhbiB3cml0ZSB1cCB0byBfUElQRV9CVUYgYnl0ZXMgd2l0aG91dCByaXNrIG9mIGJsb2NraW5nLgpAQCAtNTA2LDYgKzUwNiw4IEBACiAgICAgZm9yIGZsYWcsIG9wdCBpbiBmbGFnX29wdF9tYXAuaXRlbXMoKToKICAgICAgICAgdiA9IGdldGF0dHIoc3lzLmZsYWdzLCBmbGFnKQogICAgICAgICBpZiB2ID4gMDoKKyAgICAgICAgICAgIGlmIGZsYWcgPT0gJ2hhc2hfcmFuZG9taXphdGlvbic6CisgICAgICAgICAgICAgICAgdiA9IDEgIyBIYW5kbGUgc3BlY2lmaWNhdGlvbiBvZiBhbiBleGFjdCBzZWVkCiAgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLScgKyBvcHQgKiB2KQogICAgIGZvciBvcHQgaW4gc3lzLndhcm5vcHRpb25zOgogICAgICAgICBhcmdzLmFwcGVuZCgnLVcnICsgb3B0KQpAQCAtNTY4LDE0ICs1NzAsMzEgQEAKICAgICAuLi4gICAgICAgICAgICAgIHN0ZGVycj1TVERPVVQpCiAgICAgYidsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKIAorICAgIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgb3B0aW9uYWwgYXJndW1lbnQsICJpbnB1dCIsIGFsbG93aW5nIHlvdSB0bworICAgIHBhc3MgYSBzdHJpbmcgdG8gdGhlIHN1YnByb2Nlc3MncyBzdGRpbi4gIElmIHlvdSB1c2UgdGhpcyBhcmd1bWVudAorICAgIHlvdSBtYXkgbm90IGFsc28gdXNlIHRoZSBQb3BlbiBjb25zdHJ1Y3RvcidzICJzdGRpbiIgYXJndW1lbnQsIGFzCisgICAgaXQgdG9vIHdpbGwgYmUgdXNlZCBpbnRlcm5hbGx5LiAgRXhhbXBsZToKKworICAgID4+PiBjaGVja19vdXRwdXQoWyJzZWQiLCAiLWUiLCAicy9mb28vYmFyLyJdLAorICAgIC4uLiAgICAgICAgICAgICAgaW5wdXQ9YiJ3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgZm9vbWFuIGV2ZW50c1xuIikKKyAgICBiJ3doZW4gaW4gdGhlIGNvdXJzZSBvZiBiYXJtYW4gZXZlbnRzXG4nCisKICAgICBJZiB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSBpcyBwYXNzZWQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhCiAgICAgc3RyaW5nIHJhdGhlciB0aGFuIGJ5dGVzLgogICAgICIiIgogICAgIGlmICdzdGRvdXQnIGluIGt3YXJnczoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3Rkb3V0IGFyZ3VtZW50IG5vdCBhbGxvd2VkLCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uJykKKyAgICBpZiAnaW5wdXQnIGluIGt3YXJnczoKKyAgICAgICAgaWYgJ3N0ZGluJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRpbiBhbmQgaW5wdXQgYXJndW1lbnRzIG1heSBub3QgYm90aCBiZSB1c2VkLicpCisgICAgICAgIGlucHV0ZGF0YSA9IGt3YXJnc1snaW5wdXQnXQorICAgICAgICBkZWwga3dhcmdzWydpbnB1dCddCisgICAgICAgIGt3YXJnc1snc3RkaW4nXSA9IFBJUEUKKyAgICBlbHNlOgorICAgICAgICBpbnB1dGRhdGEgPSBOb25lCiAgICAgd2l0aCBQb3BlbigqcG9wZW5hcmdzLCBzdGRvdXQ9UElQRSwgKiprd2FyZ3MpIGFzIHByb2Nlc3M6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUodGltZW91dD10aW1lb3V0KQorICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZShpbnB1dGRhdGEsIHRpbWVvdXQ9dGltZW91dCkKICAgICAgICAgZXhjZXB0IFRpbWVvdXRFeHBpcmVkOgogICAgICAgICAgICAgcHJvY2Vzcy5raWxsKCkKICAgICAgICAgICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQpAQCAtODI3LDcgKzg0Niw3IEBACiAgICAgICAgICAgICBmb3IgZiBpbiBmaWx0ZXIoTm9uZSwgKHNlbGYuc3RkaW4sIHNlbGYuc3Rkb3V0LCBzZWxmLnN0ZGVycikpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgICMgSWdub3JlIEVCQURGIG9yIG90aGVyIGVycm9ycy4KIAogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3NlZF9jaGlsZF9waXBlX2ZkczoKQEAgLTg0Myw3ICs4NjIsNyBAQAogICAgICAgICAgICAgICAgIGZvciBmZCBpbiB0b19jbG9zZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAgICAgcmFpc2UKQEAgLTkwNyw3ICs5MjYsNyBAQAogICAgICAgICAgICAgICAgIGlmIGlucHV0OgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLndyaXRlKGlucHV0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FUElQRSBhbmQgZS5lcnJubyAhPSBlcnJuby5FSU5WQUw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKQEAgLTEwMzksMjMgKzEwNTgsNiBAQAogICAgICAgICAgICAgcmV0dXJuIEhhbmRsZShoKQogCiAKLSAgICAgICAgZGVmIF9maW5kX3c5eHBvcGVuKHNlbGYpOgotICAgICAgICAgICAgIiIiRmluZCBhbmQgcmV0dXJuIGFic29sdXQgcGF0aCB0byB3OXhwb3Blbi5leGUiIiIKLSAgICAgICAgICAgIHc5eHBvcGVuID0gb3MucGF0aC5qb2luKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShfd2luYXBpLkdldE1vZHVsZUZpbGVOYW1lKDApKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3OXhwb3Blbi5leGUiKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHc5eHBvcGVuKToKLSAgICAgICAgICAgICAgICAjIEVlZWsgLSBmaWxlLW5vdC1mb3VuZCAtIHBvc3NpYmx5IGFuIGVtYmVkZGluZwotICAgICAgICAgICAgICAgICMgc2l0dWF0aW9uIC0gc2VlIGlmIHdlIGNhbiBsb2NhdGUgaXQgaW4gc3lzLmV4ZWNfcHJlZml4Ci0gICAgICAgICAgICAgICAgdzl4cG9wZW4gPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHN5cy5iYXNlX2V4ZWNfcHJlZml4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidzl4cG9wZW4uZXhlIikKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModzl4cG9wZW4pOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCBsb2NhdGUgdzl4cG9wZW4uZXhlLCB3aGljaCBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZGVkIGZvciBQb3BlbiB0byB3b3JrIHdpdGggeW91ciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hlbGwgb3IgcGxhdGZvcm0uIikKLSAgICAgICAgICAgIHJldHVybiB3OXhwb3BlbgotCi0KICAgICAgICAgZGVmIF9leGVjdXRlX2NoaWxkKHNlbGYsIGFyZ3MsIGV4ZWN1dGFibGUsIHByZWV4ZWNfZm4sIGNsb3NlX2ZkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzLCBjd2QsIGVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLCBjcmVhdGlvbmZsYWdzLCBzaGVsbCwKQEAgLTEwODQsMjEgKzEwODYsNiBAQAogICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLndTaG93V2luZG93ID0gX3dpbmFwaS5TV19ISURFCiAgICAgICAgICAgICAgICAgY29tc3BlYyA9IG9zLmVudmlyb24uZ2V0KCJDT01TUEVDIiwgImNtZC5leGUiKQogICAgICAgICAgICAgICAgIGFyZ3MgPSAne30gL2MgInt9IicuZm9ybWF0IChjb21zcGVjLCBhcmdzKQotICAgICAgICAgICAgICAgIGlmIChfd2luYXBpLkdldFZlcnNpb24oKSA+PSAweDgwMDAwMDAwIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGNvbXNwZWMpLmxvd2VyKCkgPT0gImNvbW1hbmQuY29tIik6Ci0gICAgICAgICAgICAgICAgICAgICMgV2luOXgsIG9yIHVzaW5nIGNvbW1hbmQuY29tIG9uIE5ULiBXZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAgICAgICMgdXNlIHRoZSB3OXhwb3BlbiBpbnRlcm1lZGlhdGUgcHJvZ3JhbS4gRm9yIG1vcmUKLSAgICAgICAgICAgICAgICAgICAgIyBpbmZvcm1hdGlvbiwgc2VlIEtCIFExNTA5NTYKLSAgICAgICAgICAgICAgICAgICAgIyAoaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAwMTExMDUwODQwMDIvaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9zdXBwb3J0L2tiL2FydGljbGVzL1ExNTAvOS81Ni5hc3ApCi0gICAgICAgICAgICAgICAgICAgIHc5eHBvcGVuID0gc2VsZi5fZmluZF93OXhwb3BlbigpCi0gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAnIiVzIiAlcycgJSAodzl4cG9wZW4sIGFyZ3MpCi0gICAgICAgICAgICAgICAgICAgICMgTm90IHBhc3NpbmcgQ1JFQVRFX05FV19DT05TT0xFIGhhcyBiZWVuIGtub3duIHRvCi0gICAgICAgICAgICAgICAgICAgICMgY2F1c2UgcmFuZG9tIGZhaWx1cmVzIG9uIHdpbjl4LiAgU3BlY2lmaWNhbGx5IGEKLSAgICAgICAgICAgICAgICAgICAgIyBkaWFsb2c6ICJZb3VyIHByb2dyYW0gYWNjZXNzZWQgbWVtIGN1cnJlbnRseSBpbgotICAgICAgICAgICAgICAgICAgICAjIHVzZSBhdCB4eHgiIGFuZCBhIGhvcGVmdWwgd2FybmluZyBhYm91dCB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBzdGFiaWxpdHkgb2YgeW91ciBzeXN0ZW0uICBDb3N0IGlzIEN0cmwrQyB3b24ndAotICAgICAgICAgICAgICAgICAgICAjIGtpbGwgY2hpbGRyZW4uCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uZmxhZ3MgfD0gX3dpbmFwaS5DUkVBVEVfTkVXX0NPTlNPTEUKIAogICAgICAgICAgICAgIyBTdGFydCB0aGUgcHJvY2VzcwogICAgICAgICAgICAgdHJ5OgpAQCAtMTExMCwxMiArMTA5Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbykKLSAgICAgICAgICAgIGV4Y2VwdCBweXdpbnR5cGVzLmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgIyBUcmFuc2xhdGUgcHl3aW50eXBlcy5lcnJvciB0byBXaW5kb3dzRXJyb3IsIHdoaWNoIGlzCi0gICAgICAgICAgICAgICAgIyBhIHN1YmNsYXNzIG9mIE9TRXJyb3IuICBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseQotICAgICAgICAgICAgICAgICMgdHJhbnNsYXRlIGVycm5vIHVzaW5nIF9zeXNfZXJybGlzdCAob3Igc2ltaWxhciksIGJ1dAotICAgICAgICAgICAgICAgICMgaG93IGNhbiB0aGlzIGJlIGRvbmUgZnJvbSBQeXRob24/Ci0gICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yKCplLmFyZ3MpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICMgQ2hpbGQgaXMgbGF1bmNoZWQuIENsb3NlIHRoZSBwYXJlbnQncyBjb3B5IG9mIHRob3NlIHBpcGUKICAgICAgICAgICAgICAgICAjIGhhbmRsZXMgdGhhdCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgaGF2ZSBvcGVuLiAgWW91IG5lZWQKQEAgLTEyMDAsNyArMTE4MSw3IEBACiAgICAgICAgICAgICAgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4ud3JpdGUoaW5wdXQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQSVBFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCkBAIC0xMjc4LDcgKzEyNTksNyBAQAogICAgICAgICAgICAgaWYgc3RkaW4gaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIHN0ZGluID09IFBJUEU6Ci0gICAgICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICBlbGlmIHN0ZGluID09IERFVk5VTEw6CiAgICAgICAgICAgICAgICAgcDJjcmVhZCA9IHNlbGYuX2dldF9kZXZudWxsKCkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGRpbiwgaW50KToKQEAgLTEyOTAsNyArMTI3MSw3IEBACiAgICAgICAgICAgICBpZiBzdGRvdXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIHN0ZG91dCA9PSBQSVBFOgotICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgICAgICBjMnByZWFkLCBjMnB3cml0ZSA9IG9zLnBpcGUoKQogICAgICAgICAgICAgZWxpZiBzdGRvdXQgPT0gREVWTlVMTDoKICAgICAgICAgICAgICAgICBjMnB3cml0ZSA9IHNlbGYuX2dldF9kZXZudWxsKCkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGRvdXQsIGludCk6CkBAIC0xMzAyLDcgKzEyODMsNyBAQAogICAgICAgICAgICAgaWYgc3RkZXJyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBzdGRlcnIgPT0gUElQRToKLSAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICAgICAgZXJycmVhZCwgZXJyd3JpdGUgPSBvcy5waXBlKCkKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IFNURE9VVDoKICAgICAgICAgICAgICAgICBlcnJ3cml0ZSA9IGMycHdyaXRlCiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBERVZOVUxMOgpAQCAtMTM1NCw3ICsxMzM1LDcgQEAKICAgICAgICAgICAgICMgRm9yIHRyYW5zZmVycmluZyBwb3NzaWJsZSBleGVjIGZhaWx1cmUgZnJvbSBjaGlsZCB0byBwYXJlbnQuCiAgICAgICAgICAgICAjIERhdGEgZm9ybWF0OiAiZXhjZXB0aW9uIG5hbWU6aGV4IGVycm5vOmRlc2NyaXB0aW9uIgogICAgICAgICAgICAgIyBQaWNrbGUgaXMgbm90IHVzZWQ7IGl0IGlzIGNvbXBsZXggYW5kIGludm9sdmVzIG1lbW9yeSBhbGxvY2F0aW9uLgotICAgICAgICAgICAgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IG9zLnBpcGUoKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgIyBXZSBtdXN0IGF2b2lkIGNvbXBsZXggd29yayB0aGF0IGNvdWxkIGludm9sdmUKQEAgLTE0MjQsMTMgKzE0MDUsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUsIGhleF9lcnJubywgZXJyX21zZyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJwaXBlX2RhdGEuc3BsaXQoYic6JywgMikpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lID0gYidSdW50aW1lRXJyb3InCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lID0gYidTdWJwcm9jZXNzRXJyb3InCiAgICAgICAgICAgICAgICAgICAgIGhleF9lcnJubyA9IGInMCcKICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9IChiJ0JhZCBleGNlcHRpb24gZGF0YSBmcm9tIGNoaWxkOiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGVycnBpcGVfZGF0YSkpCiAgICAgICAgICAgICAgICAgY2hpbGRfZXhjZXB0aW9uX3R5cGUgPSBnZXRhdHRyKAogICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRpbnMsIGV4Y2VwdGlvbl9uYW1lLmRlY29kZSgnYXNjaWknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NFcnJvcikKICAgICAgICAgICAgICAgICBlcnJfbXNnID0gZXJyX21zZy5kZWNvZGUoZXJyb3JzPSJzdXJyb2dhdGVwYXNzIikKICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGNoaWxkX2V4Y2VwdGlvbl90eXBlLCBPU0Vycm9yKSBhbmQgaGV4X2Vycm5vOgogICAgICAgICAgICAgICAgICAgICBlcnJub19udW0gPSBpbnQoaGV4X2Vycm5vLCAxNikKQEAgLTE0NjAsMTEgKzE0NDEsMTEgQEAKICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBfV0VYSVRTVEFUVVMoc3RzKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIFNob3VsZCBuZXZlciBoYXBwZW4KLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlVua25vd24gY2hpbGQgZXhpdCBzdGF0dXMhIikKKyAgICAgICAgICAgICAgICByYWlzZSBTdWJwcm9jZXNzRXJyb3IoIlVua25vd24gY2hpbGQgZXhpdCBzdGF0dXMhIikKIAogCiAgICAgICAgIGRlZiBfaW50ZXJuYWxfcG9sbChzZWxmLCBfZGVhZHN0YXRlPU5vbmUsIF93YWl0cGlkPW9zLndhaXRwaWQsCi0gICAgICAgICAgICAgICAgX1dOT0hBTkc9b3MuV05PSEFORywgX29zX2Vycm9yPW9zLmVycm9yLCBfRUNISUxEPWVycm5vLkVDSElMRCk6CisgICAgICAgICAgICAgICAgX1dOT0hBTkc9b3MuV05PSEFORywgX0VDSElMRD1lcnJuby5FQ0hJTEQpOgogICAgICAgICAgICAgIiIiQ2hlY2sgaWYgY2hpbGQgcHJvY2VzcyBoYXMgdGVybWluYXRlZC4gIFJldHVybnMgcmV0dXJuY29kZQogICAgICAgICAgICAgYXR0cmlidXRlLgogCkBAIC0xNDc3LDcgKzE0NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IF93YWl0cGlkKHNlbGYucGlkLCBfV05PSEFORykKICAgICAgICAgICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4aXRzdGF0dXMoc3RzKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBfb3NfZXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBfZGVhZHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gX2RlYWRzdGF0ZQogICAgICAgICAgICAgICAgICAgICBlbGlmIGUuZXJybm8gPT0gX0VDSElMRDoKQEAgLTE2MzQsNyArMTYxNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbCh0aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gPT0gZXJybm8uRUlOVFI6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICByYWlzZQpAQCAtMTcwMiw3ICsxNjgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgKHJsaXN0LCB3bGlzdCwgeGxpc3QpID0gXAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChzZWxmLl9yZWFkX3NldCwgc2VsZi5fd3JpdGVfc2V0LCBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlRSOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi9zdW5hdS5weSBiL0xpYi9zdW5hdS5weQppbmRleCAxNWY3YjAzLi41NzYxMzkwIDEwMDY0NAotLS0gYS9MaWIvc3VuYXUucHkKKysrIGIvTGliL3N1bmF1LnB5CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIGdldGNvbXB0eXBlKCkgICAtLSByZXR1cm5zIGNvbXByZXNzaW9uIHR5cGUgKCdOT05FJyBvciAnVUxBVycpCiAgICAgICAgIGdldGNvbXBuYW1lKCkgICAtLSByZXR1cm5zIGh1bWFuLXJlYWRhYmxlIHZlcnNpb24gb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uIHR5cGUgKCdub3QgY29tcHJlc3NlZCcgbWF0Y2hlcyAnTk9ORScpCi0gICAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCisgICAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlIGluIHRoZSBhYm92ZSBvcmRlcgogICAgICAgICBnZXRtYXJrZXJzKCkgICAgLS0gcmV0dXJucyBOb25lIChmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlmYyBtb2R1bGUpCkBAIC0xMDMsNiArMTAzLDExIEBACiBpcyBkZXN0cm95ZWQuCiAiIiIKIAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorCitfc3VuYXVfcGFyYW1zID0gbmFtZWR0dXBsZSgnX3N1bmF1X3BhcmFtcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmNoYW5uZWxzIHNhbXB3aWR0aCBmcmFtZXJhdGUgbmZyYW1lcyBjb21wdHlwZSBjb21wbmFtZScpCisKICMgZnJvbSA8bXVsdGltZWRpYS9hdWRpb19maWxlaGRyLmg+CiBBVURJT19GSUxFX01BR0lDID0gMHgyZTczNmU2NAogQVVESU9fRklMRV9FTkNPRElOR19NVUxBV184ID0gMQpAQCAtMTYzLDYgKzE2OCwxMiBAQAogICAgICAgICBpZiBzZWxmLl9maWxlOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICBkZWYgaW5pdGZwKHNlbGYsIGZpbGUpOgogICAgICAgICBzZWxmLl9maWxlID0gZmlsZQogICAgICAgICBzZWxmLl9zb3VuZHBvcyA9IDAKQEAgLTI0Niw5ICsyNTcsOSBAQAogICAgICAgICAgICAgcmV0dXJuICdub3QgY29tcHJlc3NlZCcKIAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLCBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF9zdW5hdV9wYXJhbXMoc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLAorICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTMwNyw2ICszMTgsMTIgQEAKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICBzZWxmLl9maWxlID0gTm9uZQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGluaXRmcChzZWxmLCBmaWxlKToKICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUKICAgICAgICAgc2VsZi5fZnJhbWVyYXRlID0gMApAQCAtMzkwLDkgKzQwNyw5IEBACiAgICAgICAgIHNlbGYuc2V0Y29tcHR5cGUoY29tcHR5cGUsIGNvbXBuYW1lKQogCiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLCBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX3N1bmF1X3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKSkKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmZyYW1lc3dyaXR0ZW4KQEAgLTQyMSw5ICs0MzgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGF0YWxlbmd0aCAhPSBzZWxmLl9kYXRhd3JpdHRlbjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGF0Y2hoZWFkZXIoKQogICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuZmx1c2goKQorICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcGVuZWQgYW5kIHNlbGYuX2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gTm9uZQogCiAgICAgIwpkaWZmIC0tZ2l0IGEvTGliL3N5bWJvbC5weSBiL0xpYi9zeW1ib2wucHkKaW5kZXggMzQxNDNiNS4uNWNmNGE2NSAxMDA3NTUKLS0tIGEvTGliL3N5bWJvbC5weQorKysgYi9MaWIvc3ltYm9sLnB5CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgc3ltX25hbWVbX3ZhbHVlXSA9IF9uYW1lCiAKIAotZGVmIG1haW4oKToKK2RlZiBfbWFpbigpOgogICAgIGltcG9ydCBzeXMKICAgICBpbXBvcnQgdG9rZW4KICAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CkBAIC0xMDgsNCArMTA4LDQgQEAKICAgICB0b2tlbi5fbWFpbigpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgX21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3N5bXRhYmxlLnB5IGIvTGliL3N5bXRhYmxlLnB5CmluZGV4IGJiMjcxOTYuLmUyMzMxM2IgMTAwNjQ0Ci0tLSBhL0xpYi9zeW10YWJsZS5weQorKysgYi9MaWIvc3ltdGFibGUucHkKQEAgLTIzMiw3ICsyMzIsOCBAQAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGltcG9ydCBvcywgc3lzCi0gICAgc3JjID0gb3BlbihzeXMuYXJndlswXSkucmVhZCgpCisgICAgd2l0aCBvcGVuKHN5cy5hcmd2WzBdKSBhcyBmOgorICAgICAgICBzcmMgPSBmLnJlYWQoKQogICAgIG1vZCA9IHN5bXRhYmxlKHNyYywgb3MucGF0aC5zcGxpdChzeXMuYXJndlswXSlbMV0sICJleGVjIikKICAgICBmb3IgaWRlbnQgaW4gbW9kLmdldF9pZGVudGlmaWVycygpOgogICAgICAgICBpbmZvID0gbW9kLmxvb2t1cChpZGVudCkKZGlmZiAtLWdpdCBhL0xpYi9zeXNjb25maWcucHkgYi9MaWIvc3lzY29uZmlnLnB5CmluZGV4IDJhMjE2MGMuLjc3NmIyZjYgMTAwNjQ0Ci0tLSBhL0xpYi9zeXNjb25maWcucHkKKysrIGIvTGliL3N5c2NvbmZpZy5weQpAQCAtMSw3ICsxLDYgQEAKICIiIkFjY2VzcyB0byBQeXRob24ncyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCByZQogaW1wb3J0IHN5cwogZnJvbSBvcy5wYXRoIGltcG9ydCBwYXJkaXIsIHJlYWxwYXRoCiAKQEAgLTUyLDI1ICs1MSw2IEBACiAgICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9TY3JpcHRzJywKICAgICAgICAgJ2RhdGEnOiAne2Jhc2V9JywKICAgICAgICAgfSwKLSAgICAnb3MyJzogewotICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vTGliJywKLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9L0xpYicsCi0gICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vSW5jbHVkZScsCi0gICAgICAgICdwbGF0aW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L0luY2x1ZGUnLAotICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vU2NyaXB0cycsCi0gICAgICAgICdkYXRhJzogJ3tiYXNlfScsCi0gICAgICAgIH0sCi0gICAgJ29zMl9ob21lJzogewotICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKLSAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAotICAgICAgICAnZGF0YSc6ICd7dXNlcmJhc2V9JywKLSAgICAgICAgfSwKICAgICAnbnRfdXNlcic6IHsKICAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fScsCiAgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9JywKQEAgLTIxMCw3ICsxOTAsNiBAQAogICAgIGRlZiBqb2ludXNlcigqYXJncyk6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5qb2luKCphcmdzKSkKIAotICAgICMgd2hhdCBhYm91dCAnb3MyZW14JywgJ3Jpc2NvcycgPwogICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKICAgICAgICAgYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJBUFBEQVRBIikgb3IgIn4iCiAgICAgICAgIGlmIGVudl9iYXNlOgpAQCAtMjQyLDYgKzIyMSw3IEBACiAgICAgIiIiCiAgICAgIyBSZWdleGVzIG5lZWRlZCBmb3IgcGFyc2luZyBNYWtlZmlsZSAoYW5kIHNpbWlsYXIgc3ludGF4ZXMsCiAgICAgIyBsaWtlIG9sZC1zdHlsZSBTZXR1cCBmaWxlcykuCisgICAgaW1wb3J0IHJlCiAgICAgX3ZhcmlhYmxlX3J4ID0gcmUuY29tcGlsZSgiKFthLXpBLVpdW2EtekEtWjAtOV9dKylccyo9XHMqKC4qKSIpCiAgICAgX2ZpbmR2YXIxX3J4ID0gcmUuY29tcGlsZShyIlwkXCgoW0EtWmEtel1bQS1aYS16MC05X10qKVwpIikKICAgICBfZmluZHZhcjJfcnggPSByZS5jb21waWxlKHIiXCR7KFtBLVphLXpdW0EtWmEtejAtOV9dKil9IikKQEAgLTM2OSwyMSArMzQ5LDIxIEBACiAgICAgbWFrZWZpbGUgPSBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKQogICAgIHRyeToKICAgICAgICAgX3BhcnNlX21ha2VmaWxlKG1ha2VmaWxlLCB2YXJzKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgbWFrZWZpbGUKICAgICAgICAgaWYgaGFzYXR0cihlLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG1zZyA9IG1zZyArICIgKCVzKSIgJSBlLnN0cmVycm9yCi0gICAgICAgIHJhaXNlIElPRXJyb3IobXNnKQorICAgICAgICByYWlzZSBPU0Vycm9yKG1zZykKICAgICAjIGxvYWQgdGhlIGluc3RhbGxlZCBweWNvbmZpZy5oOgogICAgIGNvbmZpZ19oID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKICAgICB0cnk6CiAgICAgICAgIHdpdGggb3Blbihjb25maWdfaCkgYXMgZjoKICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGYsIHZhcnMpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBtc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBjb25maWdfaAogICAgICAgICBpZiBoYXNhdHRyKGUsICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXNnID0gbXNnICsgIiAoJXMpIiAlIGUuc3RyZXJyb3IKLSAgICAgICAgcmFpc2UgSU9FcnJvcihtc2cpCisgICAgICAgIHJhaXNlIE9TRXJyb3IobXNnKQogICAgICMgT24gQUlYLCB0aGVyZSBhcmUgd3JvbmcgcGF0aHMgdG8gdGhlIGxpbmtlciBzY3JpcHRzIGluIHRoZSBNYWtlZmlsZQogICAgICMgLS0gdGhlc2UgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBQeXRob24gc291cmNlLCBidXQgd2hlbiBpbnN0YWxsZWQKICAgICAjIHRoZSBzY3JpcHRzIGFyZSBpbiBhbm90aGVyIGRpcmVjdG9yeS4KQEAgLTQwMyw4ICszODMsOCBAQAogICAgICMgZ2V0X3BsYXRmb3JtKCkgc3VjY2VlZHMuCiAgICAgbmFtZSA9ICdfc3lzY29uZmlnZGF0YScKICAgICBpZiAnZGFyd2luJyBpbiBzeXMucGxhdGZvcm06Ci0gICAgICAgIGltcG9ydCBpbXAKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgbW9kdWxlLmJ1aWxkX3RpbWVfdmFycyA9IHZhcnMKICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKIApAQCAtNDM2LDcgKzQxNiw2IEBACiAgICAgdmFyc1snTElCREVTVCddID0gZ2V0X3BhdGgoJ3N0ZGxpYicpCiAgICAgdmFyc1snQklOTElCREVTVCddID0gZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKQogICAgIHZhcnNbJ0lOQ0xVREVQWSddID0gZ2V0X3BhdGgoJ2luY2x1ZGUnKQotICAgIHZhcnNbJ1NPJ10gPSAnLnB5ZCcKICAgICB2YXJzWydFWFRfU1VGRklYJ10gPSAnLnB5ZCcKICAgICB2YXJzWydFWEUnXSA9ICcuZXhlJwogICAgIHZhcnNbJ1ZFUlNJT04nXSA9IF9QWV9WRVJTSU9OX1NIT1JUX05PX0RPVApAQCAtNDU2LDYgKzQzNSw3IEBACiAgICAgIiIiCiAgICAgaWYgdmFycyBpcyBOb25lOgogICAgICAgICB2YXJzID0ge30KKyAgICBpbXBvcnQgcmUKICAgICBkZWZpbmVfcnggPSByZS5jb21waWxlKCIjZGVmaW5lIChbQS1aXVtBLVphLXowLTlfXSspICguKilcbiIpCiAgICAgdW5kZWZfcnggPSByZS5jb21waWxlKCIvWypdICN1bmRlZiAoW0EtWl1bQS1aYS16MC05X10rKSBbKl0vXG4iKQogCkBAIC01NTIsNyArNTMyLDcgQEAKICAgICAgICAgICAgICMgc3lzLmFiaWZsYWdzIG1heSBub3QgYmUgZGVmaW5lZCBvbiBhbGwgcGxhdGZvcm1zLgogICAgICAgICAgICAgX0NPTkZJR19WQVJTWydhYmlmbGFncyddID0gJycKIAotICAgICAgICBpZiBvcy5uYW1lIGluICgnbnQnLCAnb3MyJyk6CisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKICAgICAgICAgICAgIF9pbml0X25vbl9wb3NpeChfQ09ORklHX1ZBUlMpCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKICAgICAgICAgICAgIF9pbml0X3Bvc2l4KF9DT05GSUdfVkFSUykKQEAgLTY3OSw2ICs2NTksNyBAQAogICAgICAgICByZXR1cm4gIiVzLSVzLiVzIiAlIChvc25hbWUsIHZlcnNpb24sIHJlbGVhc2UpCiAgICAgZWxpZiBvc25hbWVbOjZdID09ICJjeWd3aW4iOgogICAgICAgICBvc25hbWUgPSAiY3lnd2luIgorICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgcmVsX3JlID0gcmUuY29tcGlsZShyJ1tcZC5dKycpCiAgICAgICAgIG0gPSByZWxfcmUubWF0Y2gocmVsZWFzZSkKICAgICAgICAgaWYgbToKZGlmZiAtLWdpdCBhL0xpYi90YWJuYW5ueS5weSBiL0xpYi90YWJuYW5ueS5weQppbmRleCA1YjliNDQ0Li40NmUwZjU2IDEwMDc1NQotLS0gYS9MaWIvdGFibmFubnkucHkKKysrIGIvTGliL3RhYm5hbm55LnB5CkBAIC05NSw3ICs5NSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIGYgPSB0b2tlbml6ZS5vcGVuKGZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJycHJpbnQoIiVyOiBJL08gRXJyb3I6ICVzIiAlIChmaWxlLCBtc2cpKQogICAgICAgICByZXR1cm4KIApkaWZmIC0tZ2l0IGEvTGliL3RhcmZpbGUucHkgYi9MaWIvdGFyZmlsZS5weQppbmRleCAxNmQzMzhjLi45NGJkNzVkIDEwMDY0NAotLS0gYS9MaWIvdGFyZmlsZS5weQorKysgYi9MaWIvdGFyZmlsZS5weQpAQCAtNTYsOSArNTYsOSBAQAogIyBvcy5zeW1saW5rIG9uIFdpbmRvd3MgcHJpb3IgdG8gNi4wIHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yCiBzeW1saW5rX2V4Y2VwdGlvbiA9IChBdHRyaWJ1dGVFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcikKIHRyeToKLSAgICAjIFdpbmRvd3NFcnJvciAoMTMxNCkgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIHRoZQorICAgICMgT1NFcnJvciAod2luZXJyb3I9MTMxNCkgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIHRoZQogICAgICMgU2VDcmVhdGVTeW1ib2xpY0xpbmtQcml2aWxlZ2UgcHJpdmlsZWdlCi0gICAgc3ltbGlua19leGNlcHRpb24gKz0gKFdpbmRvd3NFcnJvciwpCisgICAgc3ltbGlua19leGNlcHRpb24gKz0gKE9TRXJyb3IsKQogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBwYXNzCiAKQEAgLTE0MCwzMCArMTQwLDYgQEAKIH0KIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBCaXRzIHVzZWQgaW4gdGhlIG1vZGUgZmllbGQsIHZhbHVlcyBpbiBvY3RhbC4KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVNfSUZMTksgPSAwbzEyMDAwMCAgICAgICAgIyBzeW1ib2xpYyBsaW5rCi1TX0lGUkVHID0gMG8xMDAwMDAgICAgICAgICMgcmVndWxhciBmaWxlCi1TX0lGQkxLID0gMG8wNjAwMDAgICAgICAgICMgYmxvY2sgZGV2aWNlCi1TX0lGRElSID0gMG8wNDAwMDAgICAgICAgICMgZGlyZWN0b3J5Ci1TX0lGQ0hSID0gMG8wMjAwMDAgICAgICAgICMgY2hhcmFjdGVyIGRldmljZQotU19JRklGTyA9IDBvMDEwMDAwICAgICAgICAjIGZpZm8KLQotVFNVSUQgICA9IDBvNDAwMCAgICAgICAgICAjIHNldCBVSUQgb24gZXhlY3V0aW9uCi1UU0dJRCAgID0gMG8yMDAwICAgICAgICAgICMgc2V0IEdJRCBvbiBleGVjdXRpb24KLVRTVlRYICAgPSAwbzEwMDAgICAgICAgICAgIyByZXNlcnZlZAotCi1UVVJFQUQgID0gMG80MDAgICAgICAgICAgICMgcmVhZCBieSBvd25lcgotVFVXUklURSA9IDBvMjAwICAgICAgICAgICAjIHdyaXRlIGJ5IG93bmVyCi1UVUVYRUMgID0gMG8xMDAgICAgICAgICAgICMgZXhlY3V0ZS9zZWFyY2ggYnkgb3duZXIKLVRHUkVBRCAgPSAwbzA0MCAgICAgICAgICAgIyByZWFkIGJ5IGdyb3VwCi1UR1dSSVRFID0gMG8wMjAgICAgICAgICAgICMgd3JpdGUgYnkgZ3JvdXAKLVRHRVhFQyAgPSAwbzAxMCAgICAgICAgICAgIyBleGVjdXRlL3NlYXJjaCBieSBncm91cAotVE9SRUFEICA9IDBvMDA0ICAgICAgICAgICAjIHJlYWQgYnkgb3RoZXIKLVRPV1JJVEUgPSAwbzAwMiAgICAgICAgICAgIyB3cml0ZSBieSBvdGhlcgotVE9FWEVDICA9IDBvMDAxICAgICAgICAgICAjIGV4ZWN1dGUvc2VhcmNoIGJ5IG90aGVyCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgaW5pdGlhbGl6YXRpb24KICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGlmIG9zLm5hbWUgaW4gKCJudCIsICJjZSIpOgpAQCAtMjY0LDEzICsyNDAsMTMgQEAKICAgICBmb3IgYiBpbiByYW5nZShibG9ja3MpOgogICAgICAgICBidWYgPSBzcmMucmVhZChCVUZTSVpFKQogICAgICAgICBpZiBsZW4oYnVmKSA8IEJVRlNJWkU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJlbmQgb2YgZmlsZSByZWFjaGVkIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQogICAgICAgICBkc3Qud3JpdGUoYnVmKQogCiAgICAgaWYgcmVtYWluZGVyICE9IDA6CiAgICAgICAgIGJ1ZiA9IHNyYy5yZWFkKHJlbWFpbmRlcikKICAgICAgICAgaWYgbGVuKGJ1ZikgPCByZW1haW5kZXI6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJlbmQgb2YgZmlsZSByZWFjaGVkIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQogICAgICAgICBkc3Qud3JpdGUoYnVmKQogICAgIHJldHVybgogCkBAIC0zOTksNyArMzc1LDcgQEAKICAgICAgICAgICAgICAgICBpZiBtb2RlID09ICJyIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYnVmID0gYiIiCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY21wID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IE9TRXJyb3IKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmNtcCA9IGJ6Mi5CWjJDb21wcmVzc29yKCkKIApAQCAtMTYzMSw3ICsxNjA3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmlsZW9iaiA9IGd6aXAuR3ppcEZpbGUobmFtZSwgbW9kZSArICJiIiwgY29tcHJlc3NsZXZlbCwgZmlsZW9iaikKICAgICAgICAgICAgIHQgPSBjbHMudGFyb3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgaWYgbm90IGV4dGZpbGVvYmogYW5kIGZpbGVvYmogaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCiAgICAgICAgICAgICBpZiBmaWxlb2JqIGlzIE5vbmU6CkBAIC0xNjYyLDcgKzE2MzgsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHQgPSBjbHMudGFyb3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3IoIm5vdCBhIGJ6aXAyIGZpbGUiKQogICAgICAgICB0Ll9leHRmaWxlb2JqID0gRmFsc2UKQEAgLTIwMjIsNyArMTk5OCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfbWVtYmVyKHRhcmluZm8sIG9zLnBhdGguam9pbihwYXRoLCB0YXJpbmZvLm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2F0dHJzPXNldF9hdHRycykKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGVsc2U6CkBAIC0yMjExLDkgKzIxODcsOCBAQAogICAgICAgICAgICAgICAgIGlmIHRhcmluZm8uaXNzeW0oKSBhbmQgaGFzYXR0cihvcywgImxjaG93biIpOgogICAgICAgICAgICAgICAgICAgICBvcy5sY2hvd24odGFyZ2V0cGF0aCwgdSwgZykKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIm9zMmVteCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5jaG93bih0YXJnZXRwYXRoLCB1LCBnKQotICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hvd24odGFyZ2V0cGF0aCwgdSwgZykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG93bmVyIikKIAogICAgIGRlZiBjaG1vZChzZWxmLCB0YXJpbmZvLCB0YXJnZXRwYXRoKToKQEAgLTIyMjIsNyArMjE5Nyw3IEBACiAgICAgICAgIGlmIGhhc2F0dHIob3MsICdjaG1vZCcpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLmNobW9kKHRhcmdldHBhdGgsIHRhcmluZm8ubW9kZSkKLSAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4dHJhY3RFcnJvcigiY291bGQgbm90IGNoYW5nZSBtb2RlIikKIAogICAgIGRlZiB1dGltZShzZWxmLCB0YXJpbmZvLCB0YXJnZXRwYXRoKToKQEAgLTIyMzIsNyArMjIwNyw3IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudXRpbWUodGFyZ2V0cGF0aCwgKHRhcmluZm8ubXRpbWUsIHRhcmluZm8ubXRpbWUpKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG1vZGlmaWNhdGlvbiB0aW1lIikKIAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjMyMyw5ICsyMjk4LDkgQEAKICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gVGFyRmlsZSdzIG1vZGUuCiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIiVzIGlzIGNsb3NlZCIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIiVzIGlzIGNsb3NlZCIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICAgaWYgbW9kZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5tb2RlIG5vdCBpbiBtb2RlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiYmFkIG9wZXJhdGlvbiBmb3IgbW9kZSAlciIgJSBzZWxmLm1vZGUpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJiYWQgb3BlcmF0aW9uIGZvciBtb2RlICVyIiAlIHNlbGYubW9kZSkKIAogICAgIGRlZiBfZmluZF9saW5rX3RhcmdldChzZWxmLCB0YXJpbmZvKToKICAgICAgICAgIiIiRmluZCB0aGUgdGFyZ2V0IG1lbWJlciBvZiBhIHN5bWxpbmsgb3IgaGFyZGxpbmsgbWVtYmVyIGluIHRoZQpkaWZmIC0tZ2l0IGEvTGliL3RlbG5ldGxpYi5weSBiL0xpYi90ZWxuZXRsaWIucHkKaW5kZXggMTRjYTFiMS4uMGNhY2FjOCAxMDA2NDQKLS0tIGEvTGliL3RlbG5ldGxpYi5weQorKysgYi9MaWIvdGVsbmV0bGliLnB5CkBAIC0xNywxMyArMTcsMTIgQEAKIE5vdGUgdGhhdCByZWFkX2FsbCgpIHdvbid0IHJlYWQgdW50aWwgZW9mIC0tIGl0IGp1c3QgcmVhZHMgc29tZSBkYXRhCiAtLSBidXQgaXQgZ3VhcmFudGVlcyB0byByZWFkIGF0IGxlYXN0IG9uZSBieXRlIHVubGVzcyBFT0YgaXMgaGl0LgogCi1JdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEgVGVsbmV0IG9iamVjdCB0byBzZWxlY3Quc2VsZWN0KCkgaW4gb3JkZXIgdG8KLXdhaXQgdW50aWwgbW9yZSBkYXRhIGlzIGF2YWlsYWJsZS4gIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsCi1yZWFkX2VhZ2VyKCkgbWF5IHJldHVybiBiJycgZXZlbiBpZiB0aGVyZSB3YXMgZGF0YSBvbiB0aGUgc29ja2V0LAotYmVjYXVzZSB0aGUgcHJvdG9jb2wgbmVnb3RpYXRpb24gbWF5IGhhdmUgZWF0ZW4gdGhlIGRhdGEuICBUaGlzIGlzIHdoeQotRU9GRXJyb3IgaXMgbmVlZGVkIGluIHNvbWUgY2FzZXMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiAibm8gZGF0YSIgYW5kCi0iY29ubmVjdGlvbiBjbG9zZWQiIChzaW5jZSB0aGUgc29ja2V0IGFsc28gYXBwZWFycyByZWFkeSBmb3IgcmVhZGluZwotd2hlbiBpdCBpcyBjbG9zZWQpLgorSXQgaXMgcG9zc2libGUgdG8gcGFzcyBhIFRlbG5ldCBvYmplY3QgdG8gYSBzZWxlY3RvciBpbiBvcmRlciB0byB3YWl0IHVudGlsCittb3JlIGRhdGEgaXMgYXZhaWxhYmxlLiAgTm90ZSB0aGF0IGluIHRoaXMgY2FzZSwgcmVhZF9lYWdlcigpIG1heSByZXR1cm4gYicnCitldmVuIGlmIHRoZXJlIHdhcyBkYXRhIG9uIHRoZSBzb2NrZXQsIGJlY2F1c2UgdGhlIHByb3RvY29sIG5lZ290aWF0aW9uIG1heSBoYXZlCitlYXRlbiB0aGUgZGF0YS4gIFRoaXMgaXMgd2h5IEVPRkVycm9yIGlzIG5lZWRlZCBpbiBzb21lIGNhc2VzIHRvIGRpc3Rpbmd1aXNoCitiZXR3ZWVuICJubyBkYXRhIiBhbmQgImNvbm5lY3Rpb24gY2xvc2VkIiAoc2luY2UgdGhlIHNvY2tldCBhbHNvIGFwcGVhcnMgcmVhZHkKK2ZvciByZWFkaW5nIHdoZW4gaXQgaXMgY2xvc2VkKS4KIAogVG8gZG86CiAtIG9wdGlvbiBuZWdvdGlhdGlvbgpAQCAtMzQsMTAgKzMzLDkgQEAKIAogCiAjIEltcG9ydGVkIG1vZHVsZXMKLWltcG9ydCBlcnJubwogaW1wb3J0IHN5cwogaW1wb3J0IHNvY2tldAotaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNlbGVjdG9ycwogdHJ5OgogICAgIGZyb20gdGltZSBpbXBvcnQgbW9ub3RvbmljIGFzIF90aW1lCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0xMzQsNiArMTMyLDE1IEBACiBFWE9QTCA9IGJ5dGVzKFsyNTVdKSAjIEV4dGVuZGVkLU9wdGlvbnMtTGlzdAogTk9PUFQgPSBieXRlcyhbMF0pCiAKKworIyBwb2xsL3NlbGVjdCBoYXZlIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IHJlcXVpcmluZyBhbnkgZXh0cmEgZmlsZSBkZXNjcmlwdG9yLAorIyBjb250cmFyaWx5IHRvIGVwb2xsL2txdWV1ZSAoYWxzbywgdGhleSByZXF1aXJlIGEgc2luZ2xlIHN5c2NhbGwpLgoraWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICBfVGVsbmV0U2VsZWN0b3IgPSBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yCitlbHNlOgorICAgIF9UZWxuZXRTZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgorCisKIGNsYXNzIFRlbG5ldDoKIAogICAgICIiIlRlbG5ldCBpbnRlcmZhY2UgY2xhc3MuCkBAIC0yMTAsNyArMjE3LDYgQEAKICAgICAgICAgc2VsZi5zYiA9IDAgIyBmbGFnIGZvciBTQiBhbmQgU0Ugc2VxdWVuY2UuCiAgICAgICAgIHNlbGYuc2JkYXRhcSA9IGInJwogICAgICAgICBzZWxmLm9wdGlvbl9jYWxsYmFjayA9IE5vbmUKLSAgICAgICAgc2VsZi5faGFzX3BvbGwgPSBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKQogICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5vcGVuKGhvc3QsIHBvcnQsIHRpbWVvdXQpCiAKQEAgLTI3Nyw3ICsyODMsNyBAQAogICAgICAgICAiIiJXcml0ZSBhIHN0cmluZyB0byB0aGUgc29ja2V0LCBkb3VibGluZyBhbnkgSUFDIGNoYXJhY3RlcnMuCiAKICAgICAgICAgQ2FuIGJsb2NrIGlmIHRoZSBjb25uZWN0aW9uIGlzIGJsb2NrZWQuICBNYXkgcmFpc2UKLSAgICAgICAgc29ja2V0LmVycm9yIGlmIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KKyAgICAgICAgT1NFcnJvciBpZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIElBQyBpbiBidWZmZXI6CkBAIC0yOTMsNjAgKzI5OSw2IEBACiAgICAgICAgIGlzIGNsb3NlZCBhbmQgbm8gY29va2VkIGRhdGEgaXMgYXZhaWxhYmxlLgogCiAgICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9oYXNfcG9sbDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VudGlsX3dpdGhfcG9sbChtYXRjaCwgdGltZW91dCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KG1hdGNoLCB0aW1lb3V0KQotCi0gICAgZGVmIF9yZWFkX3VudGlsX3dpdGhfcG9sbChzZWxmLCBtYXRjaCwgdGltZW91dCk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgYSBnaXZlbiBzdHJpbmcgaXMgZW5jb3VudGVyZWQgb3IgdW50aWwgdGltZW91dC4KLQotICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRoZSB0aW1lb3V0LgotICAgICAgICAiIiIKLSAgICAgICAgbiA9IGxlbihtYXRjaCkKLSAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dAotICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gpCi0gICAgICAgIGlmIGkgPCAwOgotICAgICAgICAgICAgcG9sbGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFncyA9IHNlbGVjdC5QT0xMSU4gfCBzZWxlY3QuUE9MTFBSSQotICAgICAgICAgICAgcG9sbGVyLnJlZ2lzdGVyKHNlbGYsIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MpCi0gICAgICAgICAgICB3aGlsZSBpIDwgMCBhbmQgbm90IHNlbGYuZW9mOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbChjYWxsX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihzZWxmKQotICAgICAgICBpZiBpID49IDA6Ci0gICAgICAgICAgICBpID0gaSArIG4KLSAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KLSAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KLSAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZF92ZXJ5X2xhenkoKQotCi0gICAgZGVmIF9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KHNlbGYsIG1hdGNoLCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIGEgZ2l2ZW4gc3RyaW5nIGlzIGVuY291bnRlcmVkIG9yIHVudGlsIHRpbWVvdXQuCi0KLSAgICAgICAgVGhlIHRpbWVvdXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2VsZWN0LnNlbGVjdCgpLgotICAgICAgICAiIiIKICAgICAgICAgbiA9IGxlbihtYXRjaCkKICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQogICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gpCkBAIC0zNTUsMjYgKzMwNywyNSBAQAogICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQogICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQogICAgICAgICAgICAgcmV0dXJuIGJ1ZgotICAgICAgICBzX3JlcGx5ID0gKFtzZWxmXSwgW10sIFtdKQotICAgICAgICBzX2FyZ3MgPSBzX3JlcGx5CiAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzX2FyZ3MgPSBzX2FyZ3MgKyAodGltZW91dCwpCi0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICB3aGlsZSBub3Qgc2VsZi5lb2YgYW5kIHNlbGVjdC5zZWxlY3QoKnNfYXJncykgPT0gc19yZXBseToKLSAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKLSAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKLSAgICAgICAgICAgIGlmIGkgPj0gMDoKLSAgICAgICAgICAgICAgICBpID0gaStuCi0gICAgICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQotICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzX2FyZ3MgPSBzX3JlcGx5ICsgKHRpbWVvdXQtZWxhcHNlZCwpCisgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0CisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZjoKKyAgICAgICAgICAgICAgICBpZiBzZWxlY3Rvci5zZWxlY3QodGltZW91dCk6CisgICAgICAgICAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHNlbGYuY29va2VkcSktbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCisgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCwgaSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkrbgorICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIF90aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICByZXR1cm4gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCiAKICAgICBkZWYgcmVhZF9hbGwoc2VsZik6CkBAIC01NzksMjkgKzUzMCwzNSBAQAogCiAgICAgZGVmIHNvY2tfYXZhaWwoc2VsZik6CiAgICAgICAgICIiIlRlc3Qgd2hldGhlciBkYXRhIGlzIGF2YWlsYWJsZSBvbiB0aGUgc29ja2V0LiIiIgotICAgICAgICByZXR1cm4gc2VsZWN0LnNlbGVjdChbc2VsZl0sIFtdLCBbXSwgMCkgPT0gKFtzZWxmXSwgW10sIFtdKQorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICByZXR1cm4gYm9vbChzZWxlY3Rvci5zZWxlY3QoMCkpCiAKICAgICBkZWYgaW50ZXJhY3Qoc2VsZik6CiAgICAgICAgICIiIkludGVyYWN0aW9uIGZ1bmN0aW9uLCBlbXVsYXRlcyBhIHZlcnkgZHVtYiB0ZWxuZXQgY2xpZW50LiIiIgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICAgICAgICAgIHNlbGYubXRfaW50ZXJhY3QoKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZmQsIHdmZCwgeGZkID0gc2VsZWN0LnNlbGVjdChbc2VsZiwgc3lzLnN0ZGluXSwgW10sIFtdKQotICAgICAgICAgICAgaWYgc2VsZiBpbiByZmQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX2VhZ2VyKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogQ29ubmVjdGlvbiBjbG9zZWQgYnkgcmVtb3RlIGhvc3QgKioqJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiB0ZXh0OgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQuZGVjb2RlKCdhc2NpaScpKQotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpbiByZmQ6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLmVuY29kZSgnYXNjaWknKQotICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobGluZSkKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc3lzLnN0ZGluLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCBldmVudHMgaW4gc2VsZWN0b3Iuc2VsZWN0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGtleS5maWxlb2JqIGlzIHNlbGY6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYucmVhZF9lYWdlcigpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBDb25uZWN0aW9uIGNsb3NlZCBieSByZW1vdGUgaG9zdCAqKionKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQuZGVjb2RlKCdhc2NpaScpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGtleS5maWxlb2JqIGlzIHN5cy5zdGRpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQogCiAgICAgZGVmIG10X2ludGVyYWN0KHNlbGYpOgogICAgICAgICAiIiJNdWx0aXRocmVhZGVkIHZlcnNpb24gb2YgaW50ZXJhY3QoKS4iIiIKQEAgLTY0OCw3OCArNjA1LDYgQEAKICAgICAgICAgcmVzdWx0cyBhcmUgdW5kZXRlcm1pbmlzdGljLCBhbmQgbWF5IGRlcGVuZCBvbiB0aGUgSS9PIHRpbWluZy4KIAogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faGFzX3BvbGw6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0X3dpdGhfcG9sbChsaXN0LCB0aW1lb3V0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdF93aXRoX3NlbGVjdChsaXN0LCB0aW1lb3V0KQotCi0gICAgZGVmIF9leHBlY3Rfd2l0aF9wb2xsKHNlbGYsIGV4cGVjdF9saXN0LCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIG9uZSBmcm9tIGEgbGlzdCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hlcy4KLQotICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRoZSB0aW1lb3V0LgotICAgICAgICAiIiIKLSAgICAgICAgcmUgPSBOb25lCi0gICAgICAgIGV4cGVjdF9saXN0ID0gZXhwZWN0X2xpc3RbOl0KLSAgICAgICAgaW5kaWNlcyA9IHJhbmdlKGxlbihleHBlY3RfbGlzdCkpCi0gICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihleHBlY3RfbGlzdFtpXSwgInNlYXJjaCIpOgotICAgICAgICAgICAgICAgIGlmIG5vdCByZTogaW1wb3J0IHJlCi0gICAgICAgICAgICAgICAgZXhwZWN0X2xpc3RbaV0gPSByZS5jb21waWxlKGV4cGVjdF9saXN0W2ldKQotICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0Ci0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgIG0gPSBOb25lCi0gICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICBtID0gZXhwZWN0X2xpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKLSAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKLSAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQotICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgbToKLSAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKLSAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihzZWxmLCBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzKQotICAgICAgICAgICAgd2hpbGUgbm90IG0gYW5kIG5vdCBzZWxmLmVvZjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwoY2FsbF90aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIGZvciBmZCwgbW9kZSBpbiByZWFkeToKLSAgICAgICAgICAgICAgICAgICAgaWYgbW9kZSAmIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBleHBlY3RfbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihzZWxmKQotICAgICAgICBpZiBtOgotICAgICAgICAgICAgcmV0dXJuIChpLCBtLCB0ZXh0KQotICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCi0gICAgICAgIGlmIG5vdCB0ZXh0IGFuZCBzZWxmLmVvZjoKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCi0gICAgICAgIHJldHVybiAoLTEsIE5vbmUsIHRleHQpCi0KLSAgICBkZWYgX2V4cGVjdF93aXRoX3NlbGVjdChzZWxmLCBsaXN0LCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIG9uZSBmcm9tIGEgbGlzdCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hlcy4KLQotICAgICAgICBUaGUgdGltZW91dCBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZWxlY3Quc2VsZWN0KCkuCi0gICAgICAgICIiIgogICAgICAgICByZSA9IE5vbmUKICAgICAgICAgbGlzdCA9IGxpc3RbOl0KICAgICAgICAgaW5kaWNlcyA9IHJhbmdlKGxlbihsaXN0KSkKQEAgLTcyOCwyNyArNjEzLDI3IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHJlOiBpbXBvcnQgcmUKICAgICAgICAgICAgICAgICBsaXN0W2ldID0gcmUuY29tcGlsZShsaXN0W2ldKQogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICAgICAgbSA9IGxpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKLSAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbZTpdCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSwgbSwgdGV4dCkKLSAgICAgICAgICAgIGlmIHNlbGYuZW9mOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzX2FyZ3MgPSAoW3NlbGYuZmlsZW5vKCldLCBbXSwgW10sIHRpbWVvdXQtZWxhcHNlZCkKLSAgICAgICAgICAgICAgICByLCB3LCB4ID0gc2VsZWN0LnNlbGVjdCgqc19hcmdzKQotICAgICAgICAgICAgICAgIGlmIG5vdCByOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQorICAgICAgICAgICAgZGVhZGxpbmUgPSBfdGltZSgpICsgdGltZW91dAorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5lb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgICAgIG0gPSBsaXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCisgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSwgbSwgdGV4dCkKKyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfdGltZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQogICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCiAgICAgICAgIGlmIG5vdCB0ZXh0IGFuZCBzZWxmLmVvZjoKICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCmRpZmYgLS1naXQgYS9MaWIvdGVtcGZpbGUucHkgYi9MaWIvdGVtcGZpbGUucHkKaW5kZXggOTEzMzJiNi4uNWQzNDYyMSAxMDA2NDQKLS0tIGEvTGliL3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZW1wZmlsZS5weQpAQCAtMzUsMzEgKzM1LDEyIEBACiBmcm9tIHJhbmRvbSBpbXBvcnQgUmFuZG9tIGFzIF9SYW5kb20KIAogdHJ5OgotICAgIGltcG9ydCBmY250bCBhcyBfZmNudGwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBkZWYgX3NldF9jbG9leGVjKGZkKToKLSAgICAgICAgcGFzcwotZWxzZToKLSAgICBkZWYgX3NldF9jbG9leGVjKGZkKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmxhZ3MgPSBfZmNudGwuZmNudGwoZmQsIF9mY250bC5GX0dFVEZELCAwKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgZmxhZ3MgcmVhZCBzdWNjZXNzZnVsbHksIG1vZGlmeQotICAgICAgICAgICAgZmxhZ3MgfD0gX2ZjbnRsLkZEX0NMT0VYRUMKLSAgICAgICAgICAgIF9mY250bC5mY250bChmZCwgX2ZjbnRsLkZfU0VURkQsIGZsYWdzKQotCi0KLXRyeToKICAgICBpbXBvcnQgX3RocmVhZAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGltcG9ydCBfZHVtbXlfdGhyZWFkIGFzIF90aHJlYWQKIF9hbGxvY2F0ZV9sb2NrID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrCiAKIF90ZXh0X29wZW5mbGFncyA9IF9vcy5PX1JEV1IgfCBfb3MuT19DUkVBVCB8IF9vcy5PX0VYQ0wKLWlmIGhhc2F0dHIoX29zLCAnT19OT0lOSEVSSVQnKToKLSAgICBfdGV4dF9vcGVuZmxhZ3MgfD0gX29zLk9fTk9JTkhFUklUCiBpZiBoYXNhdHRyKF9vcywgJ09fTk9GT0xMT1cnKToKICAgICBfdGV4dF9vcGVuZmxhZ3MgfD0gX29zLk9fTk9GT0xMT1cKIApAQCAtODgsOCArNjksOCBAQAogICAgICMgRmFsbGJhY2suICBBbGwgd2UgbmVlZCBpcyBzb21ldGhpbmcgdGhhdCByYWlzZXMgT1NFcnJvciBpZiB0aGUKICAgICAjIGZpbGUgZG9lc24ndCBleGlzdC4KICAgICBkZWYgX3N0YXQoZm4pOgotICAgICAgICBmID0gb3BlbihmbikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZkID0gX29zLm9wZW4oZm4sIF9vcy5PX1JET05MWSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCiAKIGRlZiBfZXhpc3RzKGZuKToKICAgICB0cnk6CkBAIC0xMjMsNyArMTA0LDcgQEAKICAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgIGMgPSBzZWxmLmNoYXJhY3RlcnMKICAgICAgICAgY2hvb3NlID0gc2VsZi5ybmcuY2hvaWNlCi0gICAgICAgIGxldHRlcnMgPSBbY2hvb3NlKGMpIGZvciBkdW1teSBpbiAiMTIzNDU2Il0KKyAgICAgICAgbGV0dGVycyA9IFtjaG9vc2UoYykgZm9yIGR1bW15IGluIHJhbmdlKDgpXQogICAgICAgICByZXR1cm4gJycuam9pbihsZXR0ZXJzKQogCiBkZWYgX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QoKToKQEAgLTE2NSw3ICsxNDYsNyBAQAogCiAgICAgZm9yIGRpciBpbiBkaXJsaXN0OgogICAgICAgICBpZiBkaXIgIT0gX29zLmN1cmRpcjoKLSAgICAgICAgICAgIGRpciA9IF9vcy5wYXRoLm5vcm1jYXNlKF9vcy5wYXRoLmFic3BhdGgoZGlyKSkKKyAgICAgICAgICAgIGRpciA9IF9vcy5wYXRoLmFic3BhdGgoZGlyKQogICAgICAgICAjIFRyeSBvbmx5IGEgZmV3IG5hbWVzIHBlciBkaXJlY3RvcnkuCiAgICAgICAgIGZvciBzZXEgaW4gcmFuZ2UoMTAwKToKICAgICAgICAgICAgIG5hbWUgPSBuZXh0KG5hbWVyKQpAQCAtMjE1LDcgKzE5Niw2IEBACiAgICAgICAgIGZpbGUgPSBfb3MucGF0aC5qb2luKGRpciwgcHJlICsgbmFtZSArIHN1ZikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmQgPSBfb3Mub3BlbihmaWxlLCBmbGFncywgMG82MDApCi0gICAgICAgICAgICBfc2V0X2Nsb2V4ZWMoZmQpCiAgICAgICAgICAgICByZXR1cm4gKGZkLCBfb3MucGF0aC5hYnNwYXRoKGZpbGUpKQogICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgogICAgICAgICAgICAgY29udGludWUgICAgIyB0cnkgYWdhaW4KQEAgLTY5MSw3ICs2NzEsNiBAQAogICAgIF9pc2xpbmsgPSBzdGF0aWNtZXRob2QoX29zLnBhdGguaXNsaW5rKQogICAgIF9yZW1vdmUgPSBzdGF0aWNtZXRob2QoX29zLnJlbW92ZSkKICAgICBfcm1kaXIgPSBzdGF0aWNtZXRob2QoX29zLnJtZGlyKQotICAgIF9vc19lcnJvciA9IE9TRXJyb3IKICAgICBfd2FybiA9IF93YXJuaW5ncy53YXJuCiAKICAgICBkZWYgX3JtdHJlZShzZWxmLCBwYXRoKToKQEAgLTcwMSwxNiArNjgwLDE2IEBACiAgICAgICAgICAgICBmdWxsbmFtZSA9IHNlbGYuX3BhdGhfam9pbihwYXRoLCBuYW1lKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGlzZGlyID0gc2VsZi5faXNkaXIoZnVsbG5hbWUpIGFuZCBub3Qgc2VsZi5faXNsaW5rKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IHNlbGYuX29zX2Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgaXNkaXIgPSBGYWxzZQogICAgICAgICAgICAgaWYgaXNkaXI6CiAgICAgICAgICAgICAgICAgc2VsZi5fcm10cmVlKGZ1bGxuYW1lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZi5fb3NfZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fcm1kaXIocGF0aCkKLSAgICAgICAgZXhjZXB0IHNlbGYuX29zX2Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvX19tYWluX18ucHkKaW5kZXggY2U1NjE1Yi4uZDVmYmUxNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvX19tYWluX18ucHkKKysrIGIvTGliL3Rlc3QvX19tYWluX18ucHkKQEAgLTEsMTMgKzEsMyBAQAotZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdCwgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdAogCi0KLVRFTVBESVIsIFRFU1RDV0QgPSByZWdydGVzdC5fbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQocmVncnRlc3QuVEVNUERJUikKLXJlZ3J0ZXN0LlRFTVBESVIgPSBURU1QRElSCi1yZWdydGVzdC5URVNUQ1dEID0gVEVTVENXRAotCi0jIFJ1biB0aGUgdGVzdHMgaW4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB0ZW1wb3JhcnkgY2hhbmdlcyB0aGUgQ1dEIHRvIGEKLSMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKLSMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KLXdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICByZWdydGVzdC5tYWluKCkKK3JlZ3J0ZXN0Lm1haW5faW5fdGVtcF9jd2QoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKcmVuYW1lIHRvIExpYi90ZXN0L190ZXN0X211bHRpcHJvY2Vzc2luZy5weQppbmRleCBkNmU1MzBkLi5mMTJhNWY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weQorKysgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKQEAgLTQzLDcgKzQzLDcgQEAKIAogdHJ5OgogICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCByZWR1Y3Rpb24KLSAgICBIQVNfUkVEVUNUSU9OID0gVHJ1ZQorICAgIEhBU19SRURVQ1RJT04gPSByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIEhBU19SRURVQ1RJT04gPSBGYWxzZQogCkBAIC05OSw2ICs5OSw5IEBACiBleGNlcHQ6CiAgICAgTUFYRkQgPSAyNTYKIAorIyBUbyBzcGVlZCB1cCB0ZXN0cyB3aGVuIHVzaW5nIHRoZSBmb3Jrc2VydmVyLCB3ZSBjYW4gcHJlbG9hZCB0aGVzZToKK1BSRUxPQUQgPSBbJ19fbWFpbl9fJywgJ3Rlc3QudGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlciddCisKICMKICMgU29tZSB0ZXN0cyByZXF1aXJlIGN0eXBlcwogIwpAQCAtMjk0LDE3ICsyOTcsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChqb2luLmVsYXBzZWQsIDAuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIFRydWUpCiAKKyAgICAgICAgIyBYWFggbWF5YmUgdGVybWluYXRpbmcgdG9vIHNvb24gY2F1c2VzIHRoZSBwcm9ibGVtcyBvbiBHZW50b28uLi4KKyAgICAgICAgdGltZS5zbGVlcCgxKQorCiAgICAgICAgIHAudGVybWluYXRlKCkKIAogICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ2FsYXJtJyk6CisgICAgICAgICAgICAjIE9uIHRoZSBHZW50b28gYnVpbGRib3Qgd2FpdHBpZCgpIG9mdGVuIHNlZW1zIHRvIGJsb2NrIGZvcmV2ZXIuCisgICAgICAgICAgICAjIFdlIHVzZSBhbGFybSgpIHRvIGludGVycnVwdCBpdCBpZiBpdCBibG9ja3MgZm9yIHRvbyBsb25nLgogICAgICAgICAgICAgZGVmIGhhbmRsZXIoKmFyZ3MpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignam9pbiB0b29rIHRvbyBsb25nOiAlcycgJSBwKQogICAgICAgICAgICAgb2xkX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKLSAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCiAgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb2xkX2hhbmRsZXIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKQEAgLTM0Miw3ICszNTAsNiBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90ZXN0X3JlY3Vyc2lvbihjbHMsIHdjb25uLCBpZCk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBmb3JraW5nCiAgICAgICAgIHdjb25uLnNlbmQoaWQpCiAgICAgICAgIGlmIGxlbihpZCkgPCAyOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CkBAIC0zOTAsNyArMzk3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MC4wKSkKICAgICAgICAgZXZlbnQuc2V0KCkKICAgICAgICAgcC5qb2luKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRfZm9yX2hhbmRsZShzZW50aW5lbCwgdGltZW91dD1ERUxUQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MSkpCiAKICMKICMKQEAgLTE3NzksNiArMTc4NiwzNSBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXQoKSwgZXhwZWN0ZWQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLm1hcF9hc3luYywgc3FyLCBMKQogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3RyYWNlYmFjayhjbHMpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoMTIzKSAjIHNvbWUgY29tbWVudAorCisgICAgZGVmIHRlc3RfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICAjIFdlIHdhbnQgZW5zdXJlIHRoYXQgdGhlIHRyYWNlYmFjayBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIGlzCisgICAgICAgICMgY29udGFpbmVkIGluIHRoZSB0cmFjZWJhY2sgcmFpc2VkIGluIHRoZSBtYWluIHByb2Nlc3MuCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5Qb29sKDEpIGFzIHA6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwLmFwcGx5KHNlbGYuX3Rlc3RfdHJhY2ViYWNrKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBSdW50aW1lRXJyb3InKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGV4YyksIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmFyZ3MsICgxMjMsKSkKKyAgICAgICAgICAgIGNhdXNlID0gZXhjLl9fY2F1c2VfXworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGNhdXNlKSwgbXVsdGlwcm9jZXNzaW5nLnBvb2wuUmVtb3RlVHJhY2ViYWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQnLCBjYXVzZS50YikKKworICAgICAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgZjE6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdyYWlzZSBSdW50aW1lRXJyb3IoMTIzKSAjIHNvbWUgY29tbWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGYxLmdldHZhbHVlKCkpCisKIGRlZiByYWlzaW5nKCk6CiAgICAgcmFpc2UgS2V5RXJyb3IoImtleSIpCiAKQEAgLTI0ODYsNyArMjUyMiw3IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCiAgICAgICAgIHJlc291cmNlX3NoYXJlci5zdG9wKHRpbWVvdXQ9NSkKIAogICAgIEBjbGFzc21ldGhvZApAQCAtMjgwMCwzMCArMjgzNiw0MCBAQAogIyBUZXN0IHRoYXQgZnJvbSAuLi4gaW1wb3J0ICogd29ya3MgZm9yIGVhY2ggbW9kdWxlCiAjCiAKLWNsYXNzIF9UZXN0SW1wb3J0U3RhcihCYXNlVGVzdENhc2UpOgorY2xhc3MgX1Rlc3RJbXBvcnRTdGFyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorICAgIGRlZiBnZXRfbW9kdWxlX25hbWVzKHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2xvYgorICAgICAgICBmb2xkZXIgPSBvcy5wYXRoLmRpcm5hbWUobXVsdGlwcm9jZXNzaW5nLl9fZmlsZV9fKQorICAgICAgICBwYXR0ZXJuID0gb3MucGF0aC5qb2luKGZvbGRlciwgJyoucHknKQorICAgICAgICBmaWxlcyA9IGdsb2IuZ2xvYihwYXR0ZXJuKQorICAgICAgICBtb2R1bGVzID0gW29zLnBhdGguc3BsaXRleHQob3MucGF0aC5zcGxpdChmKVsxXSlbMF0gZm9yIGYgaW4gZmlsZXNdCisgICAgICAgIG1vZHVsZXMgPSBbJ211bHRpcHJvY2Vzc2luZy4nICsgbSBmb3IgbSBpbiBtb2R1bGVzXQorICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLl9faW5pdF9fJykKKyAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZycpCisgICAgICAgIHJldHVybiBtb2R1bGVzCiAKICAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6Ci0gICAgICAgIG1vZHVsZXMgPSBbCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nJywgJ211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcuaGVhcCcsICdtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMnLAotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wb29sJywgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUnLCAnbXVsdGlwcm9jZXNzaW5nLnV0aWwnCi0gICAgICAgICAgICBdCisgICAgICAgIG1vZHVsZXMgPSBzZWxmLmdldF9tb2R1bGVfbmFtZXMoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fZm9yaycpCisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmtzZXJ2ZXInKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9zcGF3bl9wb3NpeCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX3NwYXduX3dpbjMyJykKKyAgICAgICAgICAgIGlmIG5vdCBIQVNfUkVEVUNUSU9OOgorICAgICAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fZm9ya3NlcnZlcicpCiAKLSAgICAgICAgaWYgSEFTX1JFRFVDVElPTjoKLSAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uJykKLQotICAgICAgICBpZiBjX2ludCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgY19pbnQgaXMgTm9uZToKICAgICAgICAgICAgICMgVGhpcyBtb2R1bGUgcmVxdWlyZXMgX2N0eXBlcwotICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQogCiAgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZXM6CiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kLCAnX19hbGxfXycpLCBuYW1lKQogCi0gICAgICAgICAgICBmb3IgYXR0ciBpbiBnZXRhdHRyKG1vZCwgJ19fYWxsX18nLCAoKSk6CisgICAgICAgICAgICBmb3IgYXR0ciBpbiBtb2QuX19hbGxfXzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIobW9kLCBhdHRyKSwKICAgICAgICAgICAgICAgICAgICAgJyVyIGRvZXMgbm90IGhhdmUgYXR0cmlidXRlICVyJyAlIChtb2QsIGF0dHIpCkBAIC0yOTA2LDcgKzI5NTIsNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9raWxsZXIoY2xzLCBwaWQpOgotICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHVVNSMSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHVVNSMScpLCAncmVxdWlyZXMgU0lHVVNSMScpCkBAIC0yOTE5LDEyICsyOTY1LDE0IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGtpbGxlciA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fa2lsbGVyLCBhcmdzPShwaWQsKSkKICAgICAgICAgICAgIGtpbGxlci5zdGFydCgpCi0gICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD10aW1lLnNsZWVwLCBhcmdzPSgxLCkpCi0gICAgICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9dGltZS5zbGVlcCwgYXJncz0oMiwpKQorICAgICAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGtpbGxlci5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnb3Rfc2lnbmFsWzBdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCAwKQotICAgICAgICAgICAga2lsbGVyLmpvaW4oKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgb2xkaGFuZGxlcikKIApAQCAtMjkzNyw4ICsyOTg1LDExIEBACiAgICAgQHVuaXR0ZXN0LnNraXBJZihXSU4zMiwgInNraXBwZWQgb24gV2luZG93cyIpCiAgICAgZGVmIHRlc3RfaW52YWxpZF9oYW5kbGVzKHNlbGYpOgogICAgICAgICBjb25uID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbig0NDk3NzYwOCkKKyAgICAgICAgIyBjaGVjayB0aGF0IHBvbGwoKSBkb2Vzbid0IGNyYXNoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPU0Vycm9yKSwgY29ubi5wb2xsKQorICAgICAgICAgICAgY29ubi5wb2xsKCkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICMgSGFjayBwcml2YXRlIGF0dHJpYnV0ZSBfaGFuZGxlIHRvIGF2b2lkIHByaW50aW5nIGFuIGVycm9yCiAgICAgICAgICAgICAjIGluIGNvbm4uX19kZWxfXwpAQCAtMjk0NiwxMzEgKzI5OTcsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24sIC0xKQogCi0jCi0jIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGZyb20gdGhlIGJhc2Ugb25lcyBpbiB0aGlzIG1vZHVsZQotIwotCi1kZWYgY3JlYXRlX3Rlc3RfY2FzZXMoTWl4aW4sIHR5cGUpOgotICAgIHJlc3VsdCA9IHt9Ci0gICAgZ2xvYiA9IGdsb2JhbHMoKQotICAgIFR5cGUgPSB0eXBlLmNhcGl0YWxpemUoKQotICAgIEFMTF9UWVBFUyA9IHsncHJvY2Vzc2VzJywgJ3RocmVhZHMnLCAnbWFuYWdlcid9Ci0KLSAgICBmb3IgbmFtZSBpbiBsaXN0KGdsb2Iua2V5cygpKToKLSAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfVGVzdCcpOgotICAgICAgICAgICAgYmFzZSA9IGdsb2JbbmFtZV0KLSAgICAgICAgICAgIGFzc2VydCBzZXQoYmFzZS5BTExPV0VEX1RZUEVTKSA8PSBBTExfVFlQRVMsIHNldChiYXNlLkFMTE9XRURfVFlQRVMpCi0gICAgICAgICAgICBpZiB0eXBlIGluIGJhc2UuQUxMT1dFRF9UWVBFUzoKLSAgICAgICAgICAgICAgICBuZXduYW1lID0gJ1dpdGgnICsgVHlwZSArIG5hbWVbMTpdCi0gICAgICAgICAgICAgICAgY2xhc3MgVGVtcChiYXNlLCBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgcmVzdWx0W25ld25hbWVdID0gVGVtcAotICAgICAgICAgICAgICAgIFRlbXAuX19uYW1lX18gPSBUZW1wLl9fcXVhbG5hbWVfXyA9IG5ld25hbWUKLSAgICAgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBNaXhpbi5fX21vZHVsZV9fCi0gICAgcmV0dXJuIHJlc3VsdAotCi0jCi0jIENyZWF0ZSB0ZXN0IGNhc2VzCi0jCi0KLWNsYXNzIFByb2Nlc3Nlc01peGluKG9iamVjdCk6Ci0gICAgVFlQRSA9ICdwcm9jZXNzZXMnCi0gICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCi0gICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCi0gICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MpCi0gICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4pCi0gICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKLSAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5QaXBlKQotICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5RdWV1ZSkKLSAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlKQotICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkxvY2spCi0gICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJMb2NrKQotICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKQotICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmUpCi0gICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24pCi0gICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkV2ZW50KQotICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIpCi0gICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlZhbHVlKQotICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5BcnJheSkKLSAgICBSYXdWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3VmFsdWUpCi0gICAgUmF3QXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd0FycmF5KQotCi10ZXN0Y2FzZXNfcHJvY2Vzc2VzID0gY3JlYXRlX3Rlc3RfY2FzZXMoUHJvY2Vzc2VzTWl4aW4sIHR5cGU9J3Byb2Nlc3NlcycpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc19wcm9jZXNzZXMpCi0KLQotY2xhc3MgTWFuYWdlck1peGluKG9iamVjdCk6Ci0gICAgVFlQRSA9ICdtYW5hZ2VyJwotICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotICAgIFF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5RdWV1ZScpKQotICAgIEpvaW5hYmxlUXVldWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkpvaW5hYmxlUXVldWUnKSkKLSAgICBMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Mb2NrJykpCi0gICAgUkxvY2sgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlJMb2NrJykpCi0gICAgU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5TZW1hcGhvcmUnKSkKLSAgICBCb3VuZGVkU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlJykpCi0gICAgQ29uZGl0aW9uID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Db25kaXRpb24nKSkKLSAgICBFdmVudCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuRXZlbnQnKSkKLSAgICBCYXJyaWVyID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5CYXJyaWVyJykpCi0gICAgVmFsdWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlZhbHVlJykpCi0gICAgQXJyYXkgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkFycmF5JykpCi0gICAgbGlzdCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIubGlzdCcpKQotICAgIGRpY3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmRpY3QnKSkKLSAgICBOYW1lc3BhY2UgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLk5hbWVzcGFjZScpKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIFBvb2woY2xzLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIGNscy5tYW5hZ2VyLlBvb2woKmFyZ3MsICoqa3dkcykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIGNscy5tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgIyBvbmx5IHRoZSBtYW5hZ2VyIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGFjdGl2ZV9jaGlsZHJlbigpCi0gICAgICAgICMgYnV0IHRoaXMgY2FuIHRha2UgYSBiaXQgb24gc2xvdyBtYWNoaW5lcywgc28gd2FpdCBhIGZldyBzZWNvbmRzCi0gICAgICAgICMgaWYgdGhlcmUgYXJlIG90aGVyIGNoaWxkcmVuIHRvbyAoc2VlICMxNzM5NSkKLSAgICAgICAgdCA9IDAuMDEKLSAgICAgICAgd2hpbGUgbGVuKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4oKSkgPiAxIGFuZCB0IDwgNToKLSAgICAgICAgICAgIHRpbWUuc2xlZXAodCkKLSAgICAgICAgICAgIHQgKj0gMgotICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICMgZG8gZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgICAgIGlmIGNscy5tYW5hZ2VyLl9udW1iZXJfb2Zfb2JqZWN0cygpICE9IDA6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvciBzaW5jZSBzb21lIHRlc3RzIGRvIG5vdAotICAgICAgICAgICAgIyBlbnN1cmUgdGhhdCBhbGwgcHJvY2Vzc2VzIHdoaWNoIGhvbGQgYSByZWZlcmVuY2UgdG8gYQotICAgICAgICAgICAgIyBtYW5hZ2VkIG9iamVjdCBoYXZlIGJlZW4gam9pbmVkLgotICAgICAgICAgICAgcHJpbnQoJ1NoYXJlZCBvYmplY3RzIHdoaWNoIHN0aWxsIGV4aXN0IGF0IG1hbmFnZXIgc2h1dGRvd246JykKLSAgICAgICAgICAgIHByaW50KGNscy5tYW5hZ2VyLl9kZWJ1Z19pbmZvKCkpCi0gICAgICAgIGNscy5tYW5hZ2VyLnNodXRkb3duKCkKLSAgICAgICAgY2xzLm1hbmFnZXIuam9pbigpCi0gICAgICAgIGNscy5tYW5hZ2VyID0gTm9uZQotCi10ZXN0Y2FzZXNfbWFuYWdlciA9IGNyZWF0ZV90ZXN0X2Nhc2VzKE1hbmFnZXJNaXhpbiwgdHlwZT0nbWFuYWdlcicpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc19tYW5hZ2VyKQotCi0KLWNsYXNzIFRocmVhZHNNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAndGhyZWFkcycKLSAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LlByb2Nlc3MKLSAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LmNvbm5lY3Rpb24KLSAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmN1cnJlbnRfcHJvY2VzcykKLSAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmFjdGl2ZV9jaGlsZHJlbikKLSAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQotICAgIFBpcGUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlBpcGUpCi0gICAgUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlF1ZXVlKQotICAgIEpvaW5hYmxlUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkpvaW5hYmxlUXVldWUpCi0gICAgTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuTG9jaykKLSAgICBSTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUkxvY2spCi0gICAgU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5TZW1hcGhvcmUpCi0gICAgQm91bmRlZFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQm91bmRlZFNlbWFwaG9yZSkKLSAgICBDb25kaXRpb24gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkNvbmRpdGlvbikKLSAgICBFdmVudCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuRXZlbnQpCi0gICAgQmFycmllciA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQmFycmllcikKLSAgICBWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuVmFsdWUpCi0gICAgQXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkFycmF5KQotCi10ZXN0Y2FzZXNfdGhyZWFkcyA9IGNyZWF0ZV90ZXN0X2Nhc2VzKFRocmVhZHNNaXhpbiwgdHlwZT0ndGhyZWFkcycpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc190aHJlYWRzKQogCiAKIGNsYXNzIE90aGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNDIwLDcgKzMzNDYsNyBAQAogICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpOgogICAgICAgICBpbXBvcnQganNvbiwgc3VicHJvY2VzcwogICAgICAgICAjIHN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgdW51c3VhbCBmbGFncwotICAgICAgICBwcm9nID0gKCdmcm9tIHRlc3QudGVzdF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFRlc3RGbGFnczsgJyArCisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFRlc3RGbGFnczsgJyArCiAgICAgICAgICAgICAgICAgJ1Rlc3RGbGFncy5ydW5faW5fY2hpbGQoKScpCiAgICAgICAgIGRhdGEgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgJy1FJywgJy1TJywgJy1PJywgJy1jJywgcHJvZ10pCkBAIC0zNDY3LDEzICszMzkzLDE0IEBACiAKIGNsYXNzIFRlc3ROb0ZvcmtCb21iKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9ub2Zvcmtib21iKHNlbGYpOgorICAgICAgICBzbSA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkKICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnbXBfZm9ya19ib21iLnB5JykKLSAgICAgICAgaWYgV0lOMzI6Ci0gICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKG5hbWUpCisgICAgICAgIGlmIHNtICE9ICdmb3JrJzoKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUobmFtZSwgc20pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBvdXQuZGVjb2RlKCdhc2NpaScpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUnVudGltZUVycm9yJywgZXJyLmRlY29kZSgnYXNjaWknKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKG5hbWUpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayhuYW1lLCBzbSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEyMycsIG91dC5kZWNvZGUoJ2FzY2lpJykucnN0cmlwKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBlcnIuZGVjb2RlKCdhc2NpaScpKQogCkBAIC0zNDkxLDcgKzM0MTgsOCBAQAogICAgICAgICBpZiBuID4gMToKICAgICAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Y2xzLmNoaWxkLCBhcmdzPShuLTEsIGNvbm4pKQogICAgICAgICAgICAgcC5zdGFydCgpCi0gICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICBwLmpvaW4odGltZW91dD01KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29ubi5zZW5kKGxlbih1dGlsLl9hZnRlcmZvcmtfcmVnaXN0cnkpKQogICAgICAgICBjb25uLmNsb3NlKCkKQEAgLTM1MDIsMTEgKzM0MzAsNzggQEAKICAgICAgICAgb2xkX3NpemUgPSBsZW4odXRpbC5fYWZ0ZXJmb3JrX3JlZ2lzdHJ5KQogICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuY2hpbGQsIGFyZ3M9KDUsIHcpKQogICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgdy5jbG9zZSgpCiAgICAgICAgIG5ld19zaXplID0gci5yZWN2KCkKLSAgICAgICAgcC5qb2luKCkKKyAgICAgICAgcC5qb2luKHRpbWVvdXQ9NSkKICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobmV3X3NpemUsIG9sZF9zaXplKQogCiAjCisjIENoZWNrIHRoYXQgbm9uLWZvcmtlZCBjaGlsZCBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdW5uZWVkZWQgZmRzL2hhbmRsZXMKKyMKKworY2xhc3MgVGVzdENsb3NlRmRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfaGlnaF9zb2NrZXRfZmQoc2VsZik6CisgICAgICAgIGlmIFdJTjMyOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyB3aWxsIG5vdCBoYXZlIGFueSBzb2NrZXQgaGFuZGxlcywgc28KKyAgICAgICAgICAgICMgY2FsbGluZyBzb2NrZXQuZnJvbWZkKCkgc2hvdWxkIHByb2R1Y2UgV1NBRU5PVFNPQ0sgZXZlbgorICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBhIGhhbmRsZSBvZiB0aGUgc2FtZSBudW1iZXIuCisgICAgICAgICAgICByZXR1cm4gc29ja2V0LnNvY2tldCgpLmRldGFjaCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdlIHdhbnQgdG8gcHJvZHVjZSBhIHNvY2tldCB3aXRoIGFuIGZkIGhpZ2ggZW5vdWdoIHRoYXQgYQorICAgICAgICAgICAgIyBmcmVzaGx5IGNyZWF0ZWQgY2hpbGQgcHJvY2VzcyB3aWxsIG5vdCBoYXZlIGFueSBmZHMgYXMgaGlnaC4KKyAgICAgICAgICAgIGZkID0gc29ja2V0LnNvY2tldCgpLmRldGFjaCgpCisgICAgICAgICAgICB0b19jbG9zZSA9IFtdCisgICAgICAgICAgICB3aGlsZSBmZCA8IDUwOgorICAgICAgICAgICAgICAgIHRvX2Nsb3NlLmFwcGVuZChmZCkKKyAgICAgICAgICAgICAgICBmZCA9IG9zLmR1cChmZCkKKyAgICAgICAgICAgIGZvciB4IGluIHRvX2Nsb3NlOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHgpCisgICAgICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBjbG9zZShzZWxmLCBmZCk6CisgICAgICAgIGlmIFdJTjMyOgorICAgICAgICAgICAgc29ja2V0LnNvY2tldChmaWxlbm89ZmQpLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2Nsb3NlZmRzKGNscywgY29ubiwgZmQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc29ja2V0LmZyb21mZChmZCwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgY29ubi5zZW5kKGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgIGNvbm4uc2VuZChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2VmZChzZWxmKToKKyAgICAgICAgaWYgbm90IEhBU19SRURVQ1RJT046CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgncmVxdWlyZXMgZmQgcGlja2xpbmcnKQorCisgICAgICAgIHJlYWRlciwgd3JpdGVyID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoKQorICAgICAgICBmZCA9IHNlbGYuZ2V0X2hpZ2hfc29ja2V0X2ZkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2Nsb3NlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHdyaXRlciwgZmQpKQorICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgZSA9IHJlYWRlci5yZWN2KCkKKyAgICAgICAgICAgIHAuam9pbih0aW1lb3V0PTUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsb3NlKGZkKQorICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpCisKKyAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSA9PSAnZm9yayc6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGUsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBXU0FFTk9UU09DSyA9IDEwMDM4CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmVycm5vID09IGVycm5vLkVCQURGIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS53aW5lcnJvciA9PSBXU0FFTk9UU09DSywgZSkKKworIwogIyBJc3N1ZSAjMTcwOTc6IEVJTlRSIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHJlY3YoKSwgc2VuZCgpLCBhY2NlcHQoKSBldGMKICMKIApAQCAtMzU1MCwxMCArMzU0NSwxMCBAQAogICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgaGFuZGxlcikKLSAgICAgICAgbCA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyKCkKLSAgICAgICAgY29ubi5zZW5kKGwuYWRkcmVzcykKLSAgICAgICAgYSA9IGwuYWNjZXB0KCkKLSAgICAgICAgYS5zZW5kKCd3ZWxjb21lJykKKyAgICAgICAgd2l0aCBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lcigpIGFzIGw6CisgICAgICAgICAgICBjb25uLnNlbmQobC5hZGRyZXNzKQorICAgICAgICAgICAgYSA9IGwuYWNjZXB0KCkKKyAgICAgICAgICAgIGEuc2VuZCgnd2VsY29tZScpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR1VTUjEnKSwgJ3JlcXVpcmVzIFNJR1VTUjEnKQogICAgIGRlZiB0ZXN0X2lnbm9yZV9saXN0ZW5lcihzZWxmKToKQEAgLTM1NzQsMjYgKzM1NjksMjY3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjb25uLmNsb3NlKCkKIAotIwotIwotIworY2xhc3MgVGVzdFN0YXJ0TWV0aG9kKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NoZWNrX2NvbnRleHQoY2xzLCBjb25uKToKKyAgICAgICAgY29ubi5zZW5kKG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkpCiAKLWRlZiBzZXRVcE1vZHVsZSgpOgotICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJsaW51eCIpOgorICAgIGRlZiBjaGVja19jb250ZXh0KHNlbGYsIGN0eCk6CisgICAgICAgIHIsIHcgPSBjdHguUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHAgPSBjdHguUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fY2hlY2tfY29udGV4dCwgYXJncz0odywpKQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIGNoaWxkX21ldGhvZCA9IHIucmVjdigpCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkX21ldGhvZCwgY3R4LmdldF9zdGFydF9tZXRob2QoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHQoc2VsZik6CisgICAgICAgIGZvciBtZXRob2QgaW4gKCdmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjdHggPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2NvbnRleHQobWV0aG9kKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjdHguZ2V0X2NvbnRleHQoKSwgY3R4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9zdGFydF9tZXRob2QsICdzcGF3bicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdHguc2V0X3N0YXJ0X21ldGhvZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29udGV4dChjdHgpCisKKyAgICBkZWYgdGVzdF9zZXRfZ2V0KHNlbGYpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChQUkVMT0FEKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgb2xkX21ldGhvZCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VzIG9uIFJMb2NrIGNyZWF0aW9uLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGlzc3VlIDMxMTEhIikKLSAgICBjaGVja19lbm91Z2hfc2VtYXBob3JlcygpCi0gICAgdXRpbC5nZXRfdGVtcF9kaXIoKSAgICAgIyBjcmVhdGVzIHRlbXAgZGlyZWN0b3J5IGZvciB1c2UgYnkgYWxsIHByb2Nlc3NlcwotICAgIG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoTE9HX0xFVkVMKQorICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlcicpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2QobWV0aG9kLCBmb3JjZT1UcnVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgICAgIGN0eCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfY29udGV4dCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X3N0YXJ0X21ldGhvZCgpLCBtZXRob2QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoY3R4KS5fX25hbWVfXy5sb3dlcigpLnN0YXJ0c3dpdGgobWV0aG9kKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgICAgIGN0eC5Qcm9jZXNzLl9fbmFtZV9fLmxvd2VyKCkuc3RhcnRzd2l0aChtZXRob2QpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfY29udGV4dChtdWx0aXByb2Nlc3NpbmcpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qob2xkX21ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoY291bnQsIDEpCisKKyAgICBkZWYgdGVzdF9nZXRfYWxsKHNlbGYpOgorICAgICAgICBtZXRob2RzID0gbXVsdGlwcm9jZXNzaW5nLmdldF9hbGxfc3RhcnRfbWV0aG9kcygpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2RzLCBbJ3NwYXduJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kcyA9PSBbJ2ZvcmsnLCAnc3Bhd24nXSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgPT0gWydmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInXSkKKworIworIyBDaGVjayB0aGF0IGtpbGxpbmcgcHJvY2VzcyBkb2VzIG5vdCBsZWFrIG5hbWVkIHNlbWFwaG9yZXMKKyMKKworQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwKKyAgICAgICAgICAgICAgICAgInRlc3Qgc2VtYW50aWNzIGRvbid0IG1ha2Ugc2Vuc2Ugb24gV2luZG93cyIpCitjbGFzcyBUZXN0U2VtYXBob3JlVHJhY2tlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2VtYXBob3JlX3RyYWNrZXIoc2VsZik6CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGNtZCA9ICcnJ2lmIDE6CisgICAgICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wLCB0aW1lLCBvcworICAgICAgICAgICAgbXAuc2V0X3N0YXJ0X21ldGhvZCgic3Bhd24iKQorICAgICAgICAgICAgbG9jazEgPSBtcC5Mb2NrKCkKKyAgICAgICAgICAgIGxvY2syID0gbXAuTG9jaygpCisgICAgICAgICAgICBvcy53cml0ZSglZCwgbG9jazEuX3NlbWxvY2submFtZS5lbmNvZGUoImFzY2lpIikgKyBiIlxcbiIpCisgICAgICAgICAgICBvcy53cml0ZSglZCwgbG9jazIuX3NlbWxvY2submFtZS5lbmNvZGUoImFzY2lpIikgKyBiIlxcbiIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAnJycKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsIGNtZCAlICh3LCB3KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPVt3XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgd2l0aCBvcGVuKHIsICdyYicsIGNsb3NlZmQ9VHJ1ZSkgYXMgZjoKKyAgICAgICAgICAgIG5hbWUxID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgbmFtZTIgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lMSkKKyAgICAgICAgcC50ZXJtaW5hdGUoKQorICAgICAgICBwLndhaXQoKQorICAgICAgICB0aW1lLnNsZWVwKDEuMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjdHg6CisgICAgICAgICAgICBfbXVsdGlwcm9jZXNzaW5nLnNlbV91bmxpbmsobmFtZTIpCisgICAgICAgICMgZG9jcyBzYXkgaXQgc2hvdWxkIGJlIEVOT0VOVCwgYnV0IE9TWCBzZWVtcyB0byBnaXZlIEVJTlZBTAorICAgICAgICBzZWxmLmFzc2VydEluKGN0eC5leGNlcHRpb24uZXJybm8sIChlcnJuby5FTk9FTlQsIGVycm5vLkVJTlZBTCkpCisgICAgICAgIGVyciA9IHAuc3RkZXJyLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQorICAgICAgICBleHBlY3RlZCA9ICdzZW1hcGhvcmVfdHJhY2tlcjogVGhlcmUgYXBwZWFyIHRvIGJlIDIgbGVha2VkIHNlbWFwaG9yZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsICdzZW1hcGhvcmVfdHJhY2tlcjogJXI6IFxbRXJybm8nICUgbmFtZTEpCisKKyMKKyMgTWl4aW5zCisjCisKK2NsYXNzIFByb2Nlc3Nlc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICdwcm9jZXNzZXMnCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCisgICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCisgICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MpCisgICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4pCisgICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKKyAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5QaXBlKQorICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5RdWV1ZSkKKyAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlKQorICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkxvY2spCisgICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJMb2NrKQorICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKQorICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmUpCisgICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24pCisgICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkV2ZW50KQorICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIpCisgICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlZhbHVlKQorICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5BcnJheSkKKyAgICBSYXdWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3VmFsdWUpCisgICAgUmF3QXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd0FycmF5KQogCiAKLWRlZiB0ZWFyRG93bk1vZHVsZSgpOgotICAgICMgcGF1c2UgYSBiaXQgc28gd2UgZG9uJ3QgZ2V0IHdhcm5pbmcgYWJvdXQgZGFuZ2xpbmcgdGhyZWFkcy9wcm9jZXNzZXMKLSAgICB0aW1lLnNsZWVwKDAuNSkKK2NsYXNzIE1hbmFnZXJNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAnbWFuYWdlcicKKyAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKKyAgICBRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUXVldWUnKSkKKyAgICBKb2luYWJsZVF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Kb2luYWJsZVF1ZXVlJykpCisgICAgTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTG9jaycpKQorICAgIFJMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5STG9jaycpKQorICAgIFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuU2VtYXBob3JlJykpCisgICAgQm91bmRlZFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQm91bmRlZFNlbWFwaG9yZScpKQorICAgIENvbmRpdGlvbiA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQ29uZGl0aW9uJykpCisgICAgRXZlbnQgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkV2ZW50JykpCisgICAgQmFycmllciA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQmFycmllcicpKQorICAgIFZhbHVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5WYWx1ZScpKQorICAgIEFycmF5ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5BcnJheScpKQorICAgIGxpc3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmxpc3QnKSkKKyAgICBkaWN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5kaWN0JykpCisgICAgTmFtZXNwYWNlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5OYW1lc3BhY2UnKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBQb29sKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBjbHMubWFuYWdlci5Qb29sKCphcmdzLCAqKmt3ZHMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICMgb25seSB0aGUgbWFuYWdlciBwcm9jZXNzIHNob3VsZCBiZSByZXR1cm5lZCBieSBhY3RpdmVfY2hpbGRyZW4oKQorICAgICAgICAjIGJ1dCB0aGlzIGNhbiB0YWtlIGEgYml0IG9uIHNsb3cgbWFjaGluZXMsIHNvIHdhaXQgYSBmZXcgc2Vjb25kcworICAgICAgICAjIGlmIHRoZXJlIGFyZSBvdGhlciBjaGlsZHJlbiB0b28gKHNlZSAjMTczOTUpCisgICAgICAgIHQgPSAwLjAxCisgICAgICAgIHdoaWxlIGxlbihtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkpID4gMSBhbmQgdCA8IDU6CisgICAgICAgICAgICB0aW1lLnNsZWVwKHQpCisgICAgICAgICAgICB0ICo9IDIKKyAgICAgICAgZ2MuY29sbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAjIGRvIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgICBpZiBjbHMubWFuYWdlci5fbnVtYmVyX29mX29iamVjdHMoKSAhPSAwOgorICAgICAgICAgICAgIyBUaGlzIGlzIG5vdCByZWFsbHkgYW4gZXJyb3Igc2luY2Ugc29tZSB0ZXN0cyBkbyBub3QKKyAgICAgICAgICAgICMgZW5zdXJlIHRoYXQgYWxsIHByb2Nlc3NlcyB3aGljaCBob2xkIGEgcmVmZXJlbmNlIHRvIGEKKyAgICAgICAgICAgICMgbWFuYWdlZCBvYmplY3QgaGF2ZSBiZWVuIGpvaW5lZC4KKyAgICAgICAgICAgIHByaW50KCdTaGFyZWQgb2JqZWN0cyB3aGljaCBzdGlsbCBleGlzdCBhdCBtYW5hZ2VyIHNodXRkb3duOicpCisgICAgICAgICAgICBwcmludChjbHMubWFuYWdlci5fZGVidWdfaW5mbygpKQorICAgICAgICBjbHMubWFuYWdlci5zaHV0ZG93bigpCisgICAgICAgIGNscy5tYW5hZ2VyLmpvaW4oKQorICAgICAgICBjbHMubWFuYWdlciA9IE5vbmUKIAogCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQorY2xhc3MgVGhyZWFkc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICd0aHJlYWRzJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUHJvY2VzcworICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY29ubmVjdGlvbgorICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY3VycmVudF9wcm9jZXNzKQorICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuYWN0aXZlX2NoaWxkcmVuKQorICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCisgICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUGlwZSkKKyAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUXVldWUpCisgICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuSm9pbmFibGVRdWV1ZSkKKyAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Mb2NrKQorICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5STG9jaykKKyAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlNlbWFwaG9yZSkKKyAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Cb3VuZGVkU2VtYXBob3JlKQorICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQ29uZGl0aW9uKQorICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5FdmVudCkKKyAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5CYXJyaWVyKQorICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5WYWx1ZSkKKyAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQXJyYXkpCisKKyMKKyMgRnVuY3Rpb25zIHVzZWQgdG8gY3JlYXRlIHRlc3QgY2FzZXMgZnJvbSB0aGUgYmFzZSBvbmVzIGluIHRoaXMgbW9kdWxlCisjCisKK2RlZiBpbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KHJlbW90ZV9nbG9icywgc3RhcnRfbWV0aG9kKToKKyAgICBfX21vZHVsZV9fID0gcmVtb3RlX2dsb2JzWydfX25hbWVfXyddCisgICAgbG9jYWxfZ2xvYnMgPSBnbG9iYWxzKCkKKyAgICBBTExfVFlQRVMgPSB7J3Byb2Nlc3NlcycsICd0aHJlYWRzJywgJ21hbmFnZXInfQorCisgICAgZm9yIG5hbWUsIGJhc2UgaW4gbG9jYWxfZ2xvYnMuaXRlbXMoKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYmFzZSwgdHlwZSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBpc3N1YmNsYXNzKGJhc2UsIEJhc2VUZXN0Q2FzZSk6CisgICAgICAgICAgICBpZiBiYXNlIGlzIEJhc2VUZXN0Q2FzZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYXNzZXJ0IHNldChiYXNlLkFMTE9XRURfVFlQRVMpIDw9IEFMTF9UWVBFUywgYmFzZS5BTExPV0VEX1RZUEVTCisgICAgICAgICAgICBmb3IgdHlwZV8gaW4gYmFzZS5BTExPV0VEX1RZUEVTOgorICAgICAgICAgICAgICAgIG5ld25hbWUgPSAnV2l0aCcgKyB0eXBlXy5jYXBpdGFsaXplKCkgKyBuYW1lWzE6XQorICAgICAgICAgICAgICAgIE1peGluID0gbG9jYWxfZ2xvYnNbdHlwZV8uY2FwaXRhbGl6ZSgpICsgJ01peGluJ10KKyAgICAgICAgICAgICAgICBjbGFzcyBUZW1wKGJhc2UsIE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuZXduYW1lCisgICAgICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gX19tb2R1bGVfXworICAgICAgICAgICAgICAgIHJlbW90ZV9nbG9ic1tuZXduYW1lXSA9IFRlbXAKKyAgICAgICAgZWxpZiBpc3N1YmNsYXNzKGJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGNsYXNzIFRlbXAoYmFzZSwgb2JqZWN0KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuYW1lCisgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBfX21vZHVsZV9fCisgICAgICAgICAgICByZW1vdGVfZ2xvYnNbbmFtZV0gPSBUZW1wCisKKyAgICBkYW5nbGluZyA9IFtOb25lLCBOb25lXQorICAgIG9sZF9zdGFydF9tZXRob2QgPSBbTm9uZV0KKworICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChQUkVMT0FEKQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIGRhbmdsaW5nWzBdID0gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nLmNvcHkoKQorICAgICAgICBkYW5nbGluZ1sxXSA9IHRocmVhZGluZy5fZGFuZ2xpbmcuY29weSgpCisgICAgICAgIG9sZF9zdGFydF9tZXRob2RbMF0gPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZChhbGxvd19ub25lPVRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKHN0YXJ0X21ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdGFydF9tZXRob2QgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBzdGFydCBtZXRob2Qgbm90IHN1cHBvcnRlZCcpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImxpbnV4Iik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiT1NFcnJvciByYWlzZXMgb24gUkxvY2sgY3JlYXRpb24sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGlzc3VlIDMxMTEhIikKKyAgICAgICAgY2hlY2tfZW5vdWdoX3NlbWFwaG9yZXMoKQorICAgICAgICB1dGlsLmdldF90ZW1wX2RpcigpICAgICAjIGNyZWF0ZXMgdGVtcCBkaXJlY3RvcnkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKS5zZXRMZXZlbChMT0dfTEVWRUwpCisKKyAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qob2xkX3N0YXJ0X21ldGhvZFswXSwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgIyBwYXVzZSBhIGJpdCBzbyB3ZSBkb24ndCBnZXQgd2FybmluZyBhYm91dCBkYW5nbGluZyB0aHJlYWRzL3Byb2Nlc3NlcworICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgdG1wID0gc2V0KG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZykgLSBzZXQoZGFuZ2xpbmdbMF0pCisgICAgICAgIGlmIHRtcDoKKyAgICAgICAgICAgIHByaW50KCdEYW5nbGluZyBwcm9jZXNzZXM6JywgdG1wLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGRlbCB0bXAKKyAgICAgICAgdG1wID0gc2V0KHRocmVhZGluZy5fZGFuZ2xpbmcpIC0gc2V0KGRhbmdsaW5nWzFdKQorICAgICAgICBpZiB0bXA6CisgICAgICAgICAgICBwcmludCgnRGFuZ2xpbmcgdGhyZWFkczonLCB0bXAsIGZpbGU9c3lzLnN0ZGVycikKKworICAgIHJlbW90ZV9nbG9ic1snc2V0VXBNb2R1bGUnXSA9IHNldFVwTW9kdWxlCisgICAgcmVtb3RlX2dsb2JzWyd0ZWFyRG93bk1vZHVsZSddID0gdGVhckRvd25Nb2R1bGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkgYi9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5CmluZGV4IDU5ZTk5Mjg3Li43YjM5MjY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkKQEAgLTQ3LDYgKzQ3LDEyIEBACiAgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMsCiAgICAgICAgICAgICAgICAgKG5jaGFubmVscywgc2FtcHdpZHRoLCBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgbmNoYW5uZWxzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIHNhbXB3aWR0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuZnJhbWVyYXRlLCBmcmFtZXJhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5mcmFtZXMsIG5mcmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXB0eXBlLCBjb21wdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuY29tcG5hbWUsIGNvbXBuYW1lKQogCiAgICAgICAgIGR1bXAgPSBwaWNrbGUuZHVtcHMocGFyYW1zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5sb2FkcyhkdW1wKSwgcGFyYW1zKQpAQCAtNjMsMTUgKzY5LDEyIEBACiAgICAgICAgIHJldHVybiBmCiAKICAgICBkZWYgY2hlY2tfZmlsZShzZWxmLCB0ZXN0ZmlsZSwgbmZyYW1lcywgZnJhbWVzKToKLSAgICAgICAgZiA9IHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlLCAncmInKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5jaGFubmVscygpLCBzZWxmLm5jaGFubmVscykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRzYW1wd2lkdGgoKSwgc2VsZi5zYW1wd2lkdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZnJhbWVyYXRlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5mcmFtZXMoKSwgbmZyYW1lcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKG5mcmFtZXMpLCBmcmFtZXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3dyaXRlX3BhcmFtcyhzZWxmKToKICAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQpAQCAtODEsNiArODQsNTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZnJhbWVzLCBzZWxmLmNvbXB0eXBlLCBzZWxmLmNvbXBuYW1lKQogICAgICAgICBmLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X3dyaXRlX2NvbnRleHRfbWFuYWdlcl9jYWxsc19jbG9zZShzZWxmKToKKyAgICAgICAgIyBDbG9zZSBjaGVja3MgZm9yIGEgbWluaW11bSBoZWFkZXIgYW5kIHdpbGwgcmFpc2UgYW4gZXJyb3IKKyAgICAgICAgIyBpZiBpdCBpcyBub3Qgc2V0LCBzbyB0aGlzIHByb3ZlcyB0aGF0IGNsb3NlIGlzIGNhbGxlZC4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLm1vZHVsZS5FcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4oVEVTVEZOLCAnd2InKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5tb2R1bGUuRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX3dpdGhfb3Blbl9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNldG5jaGFubmVscyhzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgICAgICBmLnNldHNhbXB3aWR0aChzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgICAgICBmLnNldGZyYW1lcmF0ZShzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgICAgICAgICBmLnNldGNvbXB0eXBlKHNlbGYuY29tcHR5cGUsIHNlbGYuY29tcG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLmNsb3NlZCwgc2VsZi5jbG9zZV9mZCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmdldGZwKCkuY2xvc2VkKQorICAgICAgICAgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uY2hhbm5lbHMsIHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuZnJhbWVyYXRlLCBzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlX2ZkOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYuZ2V0ZnAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUuY2xvc2VkLCBzZWxmLmNsb3NlX2ZkKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX3dpdGhfZmlsZW5hbWUoc2VsZik6CisgICAgICAgICMgSWYgdGhlIGZpbGUgZG9lc24ndCBnZXQgY2xvc2VkLCB0aGlzIHRlc3Qgd29uJ3QgZmFpbCwgYnV0IGl0IHdpbGwKKyAgICAgICAgIyBwcm9kdWNlIGEgcmVzb3VyY2UgbGVhayB3YXJuaW5nLgorICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi5zZXRuY2hhbm5lbHMoc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICBmLnNldHNhbXB3aWR0aChzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgIGYuc2V0ZnJhbWVyYXRlKHNlbGYuZnJhbWVyYXRlKQorICAgICAgICAgICAgZi5zZXRjb21wdHlwZShzZWxmLmNvbXB0eXBlLCBzZWxmLmNvbXBuYW1lKQorICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4oVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmdldGZwKCkuY2xvc2VkKQorICAgICAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIHNlbGYuZnJhbWVyYXRlKQorICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZV9mZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYuZ2V0ZnAoKSkKKwogICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCiAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCkBAIC0yMDMsMTIgKzI1Myw5IEBACiAKICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgdGVzdGZpbGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLnJlYWQoMTMpLCBiJ2FiYWJhZ2FsYW1hZ2EnKQotICAgICAgICAgICAgZiA9IHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5jaGFubmVscygpLCBzZWxmLm5jaGFubmVscykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0c2FtcHdpZHRoKCksIHNlbGYuc2FtcHdpZHRoKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5mcmFtZXJhdGUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5mcmFtZXMoKSwgc2VsZi5zbmRmaWxlbmZyYW1lcykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcyhzZWxmLm5mcmFtZXMpLCBzZWxmLmZyYW1lcykKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMTAucHkgYi9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMTAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1YWI2NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUxMC5weQpAQCAtMCwwICsxLDMgQEAKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cisic3BhbSwgYmFyLCBibGFoIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYnl0ZWNvZGVfaGVscGVyLnB5IGIvTGliL3Rlc3QvYnl0ZWNvZGVfaGVscGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTQzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkKQEAgLTAsMCArMSw3MiBAQAorIiIiYnl0ZWNvZGVfaGVscGVyIC0gc3VwcG9ydCB0b29scyBmb3IgdGVzdGluZyBjb3JyZWN0IGJ5dGVjb2RlIGdlbmVyYXRpb24iIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZGlzCitpbXBvcnQgaW8KKworX1VOU1BFQ0lGSUVEID0gb2JqZWN0KCkKKworY2xhc3MgQnl0ZWNvZGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiQ3VzdG9tIGFzc2VydGlvbiBtZXRob2RzIGZvciBpbnNwZWN0aW5nIGJ5dGVjb2RlLiIiIgorCisgICAgZGVmIGdldF9kaXNhc3NlbWJseV9hc19zdHJpbmcoc2VsZiwgY28pOgorICAgICAgICBzID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBkaXMuZGlzKGNvLCBmaWxlPXMpCisgICAgICAgIHJldHVybiBzLmdldHZhbHVlKCkKKworICAgIGRlZiBhc3NlcnRJbnN0cnVjdGlvbk1hdGNoZXMoc2VsZiwgaW5zdHIsIGV4cGVjdGVkLCAqLCBsaW5lX29mZnNldD0wKToKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgdGVzdCBvcG5hbWUgZmlyc3QsIHNpbmNlIHRoYXQgZ2l2ZXMgYSBtb3JlCisgICAgICAgICMgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlIHRoYW4gdGVzdGluZyBvcGNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnN0ci5vcG5hbWUsIGV4cGVjdGVkLm9wbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnN0ci5vcGNvZGUsIGV4cGVjdGVkLm9wY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnN0ci5hcmcsIGV4cGVjdGVkLmFyZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnN0ci5hcmd2YWwsIGV4cGVjdGVkLmFyZ3ZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnN0ci5hcmdyZXByLCBleHBlY3RlZC5hcmdyZXByKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3RyLm9mZnNldCwgZXhwZWN0ZWQub2Zmc2V0KQorICAgICAgICBpZiBleHBlY3RlZC5zdGFydHNfbGluZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5zdHIuc3RhcnRzX2xpbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3RyLnN0YXJ0c19saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5zdGFydHNfbGluZSArIGxpbmVfb2Zmc2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3RyLmlzX2p1bXBfdGFyZ2V0LCBleHBlY3RlZC5pc19qdW1wX3RhcmdldCkKKworCisgICAgZGVmIGFzc2VydEJ5dGVjb2RlRXhhY3RseU1hdGNoZXMoc2VsZiwgeCwgZXhwZWN0ZWQsICosIGxpbmVfb2Zmc2V0PTApOgorICAgICAgICAiIiJUaHJvd3MgQXNzZXJ0aW9uRXJyb3IgaWYgYW55IGRpc2NyZXBhbmN5IGlzIGZvdW5kIGluIGJ5dGVjb2RlCisKKyAgICAgICAgKngqIGlzIHRoZSBvYmplY3QgdG8gYmUgaW50cm9zcGVjdGVkCisgICAgICAgICpleHBlY3RlZCogaXMgYSBsaXN0IG9mIGRpcy5JbnN0cnVjdGlvbiBvYmplY3RzCisKKyAgICAgICAgU2V0ICpsaW5lX29mZnNldCogYXMgYXBwcm9wcmlhdGUgdG8gYWRqdXN0IGZvciB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgICAgIG9iamVjdCB0byBiZSBkaXNhc3NlbWJsZWQgd2l0aGluIHRoZSB0ZXN0IGZpbGUuIElmIHRoZSBleHBlY3RlZCBsaXN0CisgICAgICAgIGFzc3VtZXMgdGhlIGZpcnN0IGxpbmUgaXMgbGluZSAxLCB0aGVuIGFuIGFwcHJvcHJpYXRlIG9mZnNldCB3b3VsZCBiZQorICAgICAgICBgYDEgLSBmLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vYGAuCisgICAgICAgICIiIgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyh4LCBsaW5lX29mZnNldD1saW5lX29mZnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkKQorCisgICAgZGVmIGFzc2VydEluQnl0ZWNvZGUoc2VsZiwgeCwgb3BuYW1lLCBhcmd2YWw9X1VOU1BFQ0lGSUVEKToKKyAgICAgICAgIiIiUmV0dXJucyBpbnN0ciBpZiBvcCBpcyBmb3VuZCwgb3RoZXJ3aXNlIHRocm93cyBBc3NlcnRpb25FcnJvciIiIgorICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoeCk6CisgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gb3BuYW1lOgorICAgICAgICAgICAgICAgIGlmIGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQgb3IgaW5zdHIuYXJndmFsID09IGFyZ3ZhbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RyCisgICAgICAgIGRpc2Fzc2VtYmx5ID0gc2VsZi5nZXRfZGlzYXNzZW1ibHlfYXNfc3RyaW5nKHgpCisgICAgICAgIGlmIGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQ6CisgICAgICAgICAgICBtc2cgPSAnJXMgbm90IGZvdW5kIGluIGJ5dGVjb2RlOlxuJXMnICUgKG9wbmFtZSwgZGlzYXNzZW1ibHkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAnKCVzLCVyKSBub3QgZm91bmQgaW4gYnl0ZWNvZGU6XG4lcycKKyAgICAgICAgICAgIG1zZyA9IG1zZyAlIChvcG5hbWUsIGFyZ3ZhbCwgZGlzYXNzZW1ibHkpCisgICAgICAgIHNlbGYuZmFpbChtc2cpCisKKyAgICBkZWYgYXNzZXJ0Tm90SW5CeXRlY29kZShzZWxmLCB4LCBvcG5hbWUsIGFyZ3ZhbD1fVU5TUEVDSUZJRUQpOgorICAgICAgICAiIiJUaHJvd3MgQXNzZXJ0aW9uRXJyb3IgaWYgb3AgaXMgZm91bmQiIiIKKyAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHgpOgorICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09IG9wbmFtZToKKyAgICAgICAgICAgICAgICBkaXNhc3NlbWJseSA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyhjbykKKyAgICAgICAgICAgICAgICBpZiBvcGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQ6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICclcyBvY2N1cnMgaW4gYnl0ZWNvZGU6XG4lcycgJSAob3BuYW1lLCBkaXNhc3NlbWJseSkKKyAgICAgICAgICAgICAgICBlbGlmIGluc3RyLmFyZ3ZhbCA9PSBhcmd2YWw6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICcoJXMsJXIpIG9jY3VycyBpbiBieXRlY29kZTpcbiVzJworICAgICAgICAgICAgICAgICAgICBtc2cgPSBtc2cgJSAob3BuYW1lLCBhcmd2YWwsIGRpc2Fzc2VtYmx5KQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weSBiL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CmluZGV4IDMyMjZiY2UuLjQ5MTQwYTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CisrKyBiL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CkBAIC02MTksNiArNjE5LDEwIEBACiAgICAgICAgIGVxKHRkKGhvdXJzPS0uMi91c19wZXJfaG91ciksIHRkKDApKQogICAgICAgICBlcSh0ZChkYXlzPS0uNC91c19wZXJfZGF5LCBob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZChtaWNyb3NlY29uZHM9LTEpKQogCisgICAgICAgICMgVGVzdCBmb3IgYSBwYXRjaCBpbiBJc3N1ZSA4ODYwCisgICAgICAgIGVxKHRkKG1pY3Jvc2Vjb25kcz0wLjUpLCAwLjUqdGQobWljcm9zZWNvbmRzPTEuMCkpCisgICAgICAgIGVxKHRkKG1pY3Jvc2Vjb25kcz0wLjUpLy90ZC5yZXNvbHV0aW9uLCAwLjUqdGQucmVzb2x1dGlvbi8vdGQucmVzb2x1dGlvbikKKwogICAgIGRlZiB0ZXN0X21hc3NpdmVfbm9ybWFsaXphdGlvbihzZWxmKToKICAgICAgICAgdGQgPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPS0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh0ZC5kYXlzLCB0ZC5zZWNvbmRzLCB0ZC5taWNyb3NlY29uZHMpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZmluYWxfYS5weSBiL0xpYi90ZXN0L2ZpbmFsX2EucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwZWU4OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2ZpbmFsX2EucHkKQEAgLTAsMCArMSwxOSBAQAorIiIiCitGb2RkZXIgZm9yIG1vZHVsZSBmaW5hbGl6YXRpb24gdGVzdHMgaW4gdGVzdF9tb2R1bGUuCisiIiIKKworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlc3QuZmluYWxfYgorCit4ID0gJ2EnCisKK2NsYXNzIEM6CisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICMgSW5zcGVjdCBtb2R1bGUgZ2xvYmFscyBhbmQgYnVpbHRpbnMKKyAgICAgICAgcHJpbnQoInggPSIsIHgpCisgICAgICAgIHByaW50KCJmaW5hbF9iLnggPSIsIHRlc3QuZmluYWxfYi54KQorICAgICAgICBwcmludCgic2h1dGlsLnJtdHJlZSA9IiwgZ2V0YXR0cihzaHV0aWwucm10cmVlLCAnX19uYW1lX18nLCBOb25lKSkKKyAgICAgICAgcHJpbnQoImxlbiA9IiwgZ2V0YXR0cihsZW4sICdfX25hbWVfXycsIE5vbmUpKQorCitjID0gQygpCitfdW5kZXJzY29yZWQgPSBDKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ZpbmFsX2IucHkgYi9MaWIvdGVzdC9maW5hbF9iLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjhkODIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9maW5hbF9iLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIgorRm9kZGVyIGZvciBtb2R1bGUgZmluYWxpemF0aW9uIHRlc3RzIGluIHRlc3RfbW9kdWxlLgorIiIiCisKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZXN0LmZpbmFsX2EKKworeCA9ICdiJworCitjbGFzcyBDOgorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAjIEluc3BlY3QgbW9kdWxlIGdsb2JhbHMgYW5kIGJ1aWx0aW5zCisgICAgICAgIHByaW50KCJ4ID0iLCB4KQorICAgICAgICBwcmludCgiZmluYWxfYS54ID0iLCB0ZXN0LmZpbmFsX2EueCkKKyAgICAgICAgcHJpbnQoInNodXRpbC5ybXRyZWUgPSIsIGdldGF0dHIoc2h1dGlsLnJtdHJlZSwgJ19fbmFtZV9fJywgTm9uZSkpCisgICAgICAgIHByaW50KCJsZW4gPSIsIGdldGF0dHIobGVuLCAnX19uYW1lX18nLCBOb25lKSkKKworYyA9IEMoKQorX3VuZGVyc2NvcmVkID0gQygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9mb3JrX3dhaXQucHkgYi9MaWIvdGVzdC9mb3JrX3dhaXQucHkKaW5kZXggODg1MjdkZi4uMTliNTRlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZm9ya193YWl0LnB5CisrKyBiL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICAgICAgc2VsZi5hbGl2ZVtpZF0gPSBvcy5nZXRwaWQoKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoU0hPUlRTTEVFUCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHdhaXRfaW1wbChzZWxmLCBjcGlkKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2tleWNlcnQzLnBlbSBiL0xpYi90ZXN0L2tleWNlcnQzLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmZhNjJjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3Qva2V5Y2VydDMucGVtCkBAIC0wLDAgKzEsNzMgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2RnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUF3Z2dKY0FnRUFBb0dCQU1MZ0Qwa0FLRGI1Y0Z5UAoramJ3TmZSNUN0ZXdkWEMra01YQVdEOERMeGlUVHZoTVc3cVZubHdPbTM2bVpsc3pIS3ZzUmYwNWxUNHBlZ2lGTQorOXoyajFPbGFOK2NpL1g3TlUyMlROTjZjcllTaU43N0ZqWUpQNDY0ajg3Nm5kU3h5RCtyenlzMzg2VCsxcjFhWgorYWdnRWRrajFUc1NzdjF6V0lZS2xQSWpsdmh1eEFnTUJBQUVDZ1lBMGFIK1QyVmYzV09QdjhLZGtjSmc2Z0NSZQoreUpLWE9XZ1dSY2ljeC9DVXpPRXNUeG1GSURQTHhxQVdBM2s3djBCKzN2akd3NVk5bHljVi81WHFYTm9RSTE0agoreTA5aU5zdW1kczEzdTVBS2tHZFRKblpoUTdVS2RvVkhmdVA0NFpkT3Yvcko1L1ZENkY0eld5d3BlOTBwY2JLKworQVdEVnR1c2dHUUJTaWVFbDFRSkJBT3lWclVHNWwyeW9VQnRkMnpyL2tpR20vRFl5WGxJdGhRTy9BMy9MbmdEVworNS95ZEd4VnNUN2xBVk9nQ3NvVCswTDRlZlRoOTBQanpXOExQUXJQQldWTUNRUURTM2gvRnRZWWQ1bGZ6K0ZOTAorOUNFZTFGMXc5bDhQNzQ5dU5VRDBnMzE3enYxdGF0SXFWQ3NRV0hmVkhOZFZ2ZlErdlNGdzM4T09STzAwWHFzOQorMUdKckFrQmtvWFhFa3hDWm95NFB0ZWhlTy84SVdXTEdHcjZMN2RpNk16RmwxbElxd1Q2RDhMOW9hVjJ2eW5GVAorRG5Lb3AwcGEwOVVuaGp5dzU3S01ObVNFMlNVSkFrRUFybG9URXpwZ1JtQ3E0SUsyL05wQ2VHZEhTNXVxUmxiaAorMVZJYS94R3BzN0VXUWw1TW44c3dRRGVsL1lQM1dHSFRqZng3cGdTZWdRZmt5YVJ0R3BaOU9RSkFhOVZ1bWo4bQorSkFBdEkwQm5nYThoZ1F4N0JoVFFZNENhZER4eWlSR09HWWh3VXpZVkNxa2Iyc2JWUkg5SG53VWFKVDdjV0JZMworUm5KZEhPTVhXZW03L3c9PQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMSAoMHgwKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMjcyMzM0MjYxMjcyMTQ0MzI4MSAoMHhiMDkyNjRiMWYyZGEyMWQxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEphbiAgNCAxOTo0NzowNyAyMDEzIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogTm92IDEzIDE5OjQ3OjA3IDIwMjIgR01UCisgICAgICAgIFN1YmplY3Q6IEM9WFksIEw9Q2FzdGxlIEFudGhyYXgsIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24sIENOPWxvY2FsaG9zdAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDEwMjQgYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmMyOmUwOjBmOjQ5OjAwOjI4OjM2OmY5OjcwOjVjOjhmOjhkOmJjOjBkOgorICAgICAgICAgICAgICAgICAgICA3ZDoxZTo0MjpiNTplYzoxZDo1YzoyZjphNDozMTo3MDoxNjowZjpjMDpjYjoKKyAgICAgICAgICAgICAgICAgICAgYzY6MjQ6ZDM6YmU6MTM6MTY6ZWU6YTU6Njc6OTc6MDM6YTY6ZGY6YTk6OTk6CisgICAgICAgICAgICAgICAgICAgIDk2OmNjOmM3OjJhOmZiOjExOjdmOjRlOjY1OjRmOjhhOjVlOjgyOjIxOjRjOgorICAgICAgICAgICAgICAgICAgICBmNzozZDphMzpkNDplOTo1YTozNzplNzoyMjpmZDo3ZTpjZDo1Mzo2ZDo5MzoKKyAgICAgICAgICAgICAgICAgICAgMzQ6ZGU6OWM6YWQ6ODQ6YTI6Mzc6YmU6YzU6OGQ6ODI6NGY6ZTM6YWU6MjM6CisgICAgICAgICAgICAgICAgICAgIGYzOmJlOmE3Ojc1OjJjOjcyOjBmOmVhOmYzOmNhOmNkOmZjOmU5OjNmOmI1OgorICAgICAgICAgICAgICAgICAgICBhZjo1Njo5OTo2YTowODowNDo3Njo0ODpmNTo0ZTpjNDphYzpiZjo1YzpkNjoKKyAgICAgICAgICAgICAgICAgICAgMjE6ODI6YTU6M2M6ODg6ZTU6YmU6MWI6YjEKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgICAyZjo0Mjo1ZjphMzowOToyYzpmYTo1MTo4ODpjNzozNzo3ZjplYTowZTo2MzpmMDphMjo5YToKKyAgICAgICAgIGU1OjVhOmUyOmM4OjIwOmYwOjNmOjYwOmJjOmM4OjBmOmI2OmM2Ojc2OmNlOmRiOjgzOjkzOgorICAgICAgICAgZjU6YTM6MzM6Njc6MDE6OGU6MDQ6Y2Q6MDA6OWE6NzM6ZmQ6ZjM6MzU6ODY6ZmE6ZDc6MTM6CisgICAgICAgICBlMjo0NjpjNjo5ZDpjMDoyOTo1MzpkNDphOTo5MDpiODo3Nzo0YjplNjo4Mzo3NjplNDo5MjoKKyAgICAgICAgIGQ2OjljOjUwOmNmOjQzOmQwOmM2OjAxOjc3OjYxOjlhOmRlOjliOjcwOmY3OjcyOmNkOjU5OgorICAgICAgICAgMDA6MzE6Njk6ZDk6YjQ6Y2E6MDY6OWM6NmQ6YzM6Yzc6ODA6OGM6Njg6ZTY6YjU6YTI6Zjg6CisgICAgICAgICBlZjoxZDpiYjoxNjo5Zjo3Nzo3NzplZjo4Nzo2MjoyMjo5Yjo0ZDo2OTphNDozYToxYTpmMToKKyAgICAgICAgIDIxOjVlOjhjOjMyOmFjOjkyOmZkOjE1OjZiOjE4OmMyOjdmOjE1OjBkOjk4OjMwOmNhOjc1OgorICAgICAgICAgOGY6MWE6NzE6ZGY6ZGE6MWQ6YjI6ZWY6OWE6ZTg6MmQ6MmU6MDI6ZmQ6NGE6M2M6YWE6OTY6CisgICAgICAgICAwYjowNjo1ZDozNTpiMzozZDoyNDo4Nzo0YjplMDpiMDo1ODo2MDoyZjo0NTphYzoyZTo0ODoKKyAgICAgICAgIDhhOmIwOjk5OjEwOjY1OjI3OmZmOmNjOmIxOmQ4OmZkOmJkOjI2OjZiOmI5OjBjOjA1OjJhOgorICAgICAgICAgZjQ6NDU6NjM6MzU6NTE6MDc6ZWQ6ODM6ODU6ZmU6NmY6Njk6Y2I6YmI6NDA6YTg6YWU6YjY6CisgICAgICAgICAzYjo1Njo0YToyZDphNDplZDo2ZDoxMToyYzo0ZDplZDoxNzoyNDpmZDo0NzpiYzpkMzo0MToKKyAgICAgICAgIGEyOmQzOjA2OmZlOjBjOjkwOmQ4OmQ4Ojk0OjI2OmM0OmZmOmNjOmExOmQ4OjQyOjc3OmViOgorICAgICAgICAgZmM6YTk6OTQ6NzEKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ3BEQ0NBWXdDQ1FDd2ttU3g4dG9oMFRBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWQorV1RFbU1DUUdBMVVFQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVgorQkFNTURXOTFjaTFqWVMxelpYSjJaWEl3SGhjTk1UTXdNVEEwTVRrME56QTNXaGNOTWpJeE1URXpNVGswTnpBMworV2pCZk1Rc3dDUVlEVlFRR0V3SllXVEVYTUJVR0ExVUVCeE1PUTJGemRHeGxJRUZ1ZEdoeVlYZ3hJekFoQmdOVgorQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodgorYzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTGdEMGtBS0RiNWNGeVBqYndOZlI1QwordGV3ZFhDK2tNWEFXRDhETHhpVFR2aE1XN3FWbmx3T20zNm1abHN6SEt2c1JmMDVsVDRwZWdpRk05ejJqMU9sYQorTitjaS9YN05VMjJUTk42Y3JZU2lONzdGallKUDQ2NGo4NzZuZFN4eUQrcnp5czM4NlQrMXIxYVphZ2dFZGtqMQorVHNTc3YxeldJWUtsUElqbHZodXhBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFDOUNYNk1KTFBwUgoraU1jM2Yrb09ZL0NpbXVWYTRzZ2c4RDlndk1nUHRzWjJ6dHVEay9Xak0yY0JqZ1ROQUpwei9mTTFodnJYRStKRworeHAzQUtWUFVxWkM0ZDB2bWczYmtrdGFjVU05RDBNWUJkMkdhM3B0dzkzTE5XUUF4YWRtMHlnYWNiY1BIZ0l4bworNXJXaStPOGR1eGFmZDNmdmgySWltMDFwcERvYThTRmVqREtza3YwVmF4akNmeFVObURES2RZOGFjZC9hSGJMdgorbXVndExnTDlTanlxbGdzR1hUV3pQU1NIUytDd1dHQXZSYXd1U0lxd21SQmxKLy9Nc2RqOXZTWnJ1UXdGS3ZSRgorWXpWUkIrMkRoZjV2YWN1N1FLaXV0anRXU2kyazdXMFJMRTN0RnlUOVI3elRRYUxUQnY0TWtOallsQ2JFLzh5aAorMkVKMzYveXBsSEU9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9rZXljZXJ0NC5wZW0gYi9MaWIvdGVzdC9rZXljZXJ0NC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzNTVjOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2tleWNlcnQ0LnBlbQpAQCAtMCwwICsxLDczIEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQkFLNVVRaU1JNVZrTnMyUXYKK0w3Z1VhaURkRmV2TlVYUmpVNERIQWUzWnp6WUxaTkU2OWg5Z085VkNTUzE2dEo1ZlQ1VkV1MEVaeUdyMGUzVjIKK05rWDBab1UwSGMvVWFZNHF4N0xIbW41U1lacEl4aEpua2Y3U3lISksxelVhR2xVMC9MeFlxSXVHQ3RGNWRxeDEKK0wyT1FoRXgxR002UnlkSGRnWDY5RzY0TFhjWTVBZ01CQUFFQ2dZQWhzUk1mSmtiOUVSTE1sL29HLzVzTFF1OUwKK3BXREt0Nitad2R4emxaYmdnUTg1Q01Zc2hqTEtJb2QyRExML3NMZjJ4MVBSWHlSRzEzMU0xRTNrOHpra3o2ZGUKK1IxdURySU4veDkxaXVZemZMUVpHaDhiTVk3WWpkMmVvcm9hNlIvN0RqcEVsR2VqTHhPQWFEV08wU1QySUZReTkKK215VEdTMmpTTTk3d2NYZnNTUUpCQU5QM2plbEpvUzVYNkJSalRTbmVZMjF3Y29jeFZ1UWg4cFhwRXJBTFZOc1QKK2RyckZUZWFCdVpwN0t2YnRuSU01ZzJXUk52YXhMWmxBWS9oWFBKdmk2bmNDUVFEU2l4MWNlYm1sNkVtUGxFWlMKK01tOGd3STJGOXVmVXVud0ptQkpjejgyNkRvMFpOR0J5V0RBTS9KUVpINEZYNEdmQUZOdWo4UFViK0dRZmFka3gKK2kxRFBBa0VBMGxWc05Ib2p2dURzSW84SEd1emFyTlpRVDJiZVdqSjFqZHhoOXQ3SHJUeDdMSXBzNnJiL2ZoT0sKK1pzMFI2Z1ZBSmFFYmNXQVBaMnRGeUVDSW5BZG5zUUpBVWphZVhYanV4RmtqT0Z5bTVQdnFwdmhwaXZFeDc4QnUKK0pQVHIzckFLWG1mR014eGZ1T2EweEsxd1N5c2hQNlpSL1JCbi8rbGNYUEt1YmhIUURPZWd3d0pBSkYxREJRbk4KKysvdExtT1BVTHREd2ZQNFppeG4rLzhHbUdPYWhGb1JjdTZWSUdIbVJpbEpUbjZNT0J1dHc3R2x2MllkZUM2bC8KK2U4M0dxNmZmTFZmS05RPT0KKy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDEgKDB4MCkKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTI3MjMzNDI2MTI3MjE0NDMyODIgKDB4YjA5MjY0YjFmMmRhMjFkMikKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IE5vdiAxMyAxOTo0NzowNyAyMDIyIEdNVAorICAgICAgICBTdWJqZWN0OiBDPVhZLCBMPUNhc3RsZSBBbnRocmF4LCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBDTj1mYWtlaG9zdG5hbWUKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDphZTo1NDo0MjoyMzowODplNTo1OTowZDpiMzo2NDoyZjoyZjpiODoxNDoKKyAgICAgICAgICAgICAgICAgICAgNmE6MjA6ZGQ6MTU6ZWI6Y2Q6NTE6NzQ6NjM6NTM6ODA6Yzc6MDE6ZWQ6ZDk6CisgICAgICAgICAgICAgICAgICAgIGNmOjM2OjBiOjY0OmQxOjNhOmY2OjFmOjYwOjNiOmQ1OjQyOjQ5OjJkOjdhOgorICAgICAgICAgICAgICAgICAgICBiNDo5ZTo1Zjo0Zjo5NTo0NDpiYjo0MToxOTpjODo2YTpmNDo3Yjo3NTo3NjoKKyAgICAgICAgICAgICAgICAgICAgMzY6NDU6ZjQ6NjY6ODU6MzQ6MWQ6Y2Y6ZDQ6Njk6OGU6MmE6Yzc6YjI6Yzc6CisgICAgICAgICAgICAgICAgICAgIDlhOjdlOjUyOjYxOjlhOjQ4OmM2OjEyOjY3OjkxOmZlOmQyOmM4OjcyOjRhOgorICAgICAgICAgICAgICAgICAgICBkNzozNToxYToxYTo1NTozNDpmYzpiYzo1ODphODo4Yjo4NjowYTpkMTo3OToKKyAgICAgICAgICAgICAgICAgICAgNzY6YWM6NzU6MmY6NjM6OTA6ODQ6NGM6NzU6MTg6Y2U6OTE6Yzk6ZDE6ZGQ6CisgICAgICAgICAgICAgICAgICAgIDgxOjdlOmJkOjFiOmFlOjBiOjVkOmM2OjM5CisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgYWQ6NDU6OGE6OGU6ZWY6YzY6ZWY6MDQ6NDE6NWM6MmM6NGE6ODQ6ZGM6MDI6NzY6MGM6ZDA6CisgICAgICAgICA2NjowZjpmMDoxNjowNDo1ODo0ZDpmZDo2ODpiNzpiODpkMzphODo0MTphNTo1YzozYzo2ZjoKKyAgICAgICAgIDY1OjNjOmQxOmY4OmNlOjQzOjM1OmU3OjQxOjVmOjUzOjNkOmM5OjJjOmMzOjdkOmZjOjU2OgorICAgICAgICAgNGE6ZmE6NDc6Nzc6Mzg6OWQ6YmI6OTc6Mjg6MGE6M2I6OTE6MTk6N2Y6YmM6NzQ6YWU6MTU6CisgICAgICAgICA2YjpiZDoyMDozNjo2Nzo0NTphNToxZTo3OTpkNzo3NTplNjo4OTo1Yzo2ZDo1NDo4NDpkMToKKyAgICAgICAgIDk1OmQ3OmE3OmI0OjMzOjNjOmFmOjM3OmM0Ojc5OjhmOjVlOjc1OmRjOjc1OmMyOjE4OmZiOgorICAgICAgICAgNjE6NmY6MmQ6ZGM6Mzg6NjU6NWI6YmE6Njc6Mjg6ZDA6ODg6ZDc6OGQ6Yjk6MjM6NWE6OGU6CisgICAgICAgICBlODpjNjpiYjpkYjpjZTpkNTpiODo0MToyYTpjZTo5MzowODpiNjo5NTphZDozNDoyMDoxODoKKyAgICAgICAgIGQ1OjNiOjM3OjUyOjc0OjUwOjBiOjA3OjJjOmIwOjZkOmE0OjRjOjdiOmY0OmUwOmZkOmQxOgorICAgICAgICAgYWY6MTc6YWE6MjA6Y2Q6NjI6ZTM6ZjA6OWQ6Mzc6Njk6ZGI6NDE6YmQ6ZDQ6MWM6ZmI6NTM6CisgICAgICAgICAyMDpkYTo4ODo5ZDo3NjoyNjo2NzpjZTowMTo5MDphNzo4MDoxZDphOTo1YjozOTo3Mzo2ODoKKyAgICAgICAgIDU0OjBhOmQxOjJhOjAzOjFiOjhmOjNjOjQzOjVkOjVkOmM0OjUxOmYxOmE3OmU3OjExOmRhOgorICAgICAgICAgMzE6MmM6NDk6MDY6YWY6MDQ6ZjQ6Yjg6M2M6OTk6YzQ6MjA6Yjk6MDY6MzY6YTI6MDA6OTI6CisgICAgICAgICA2MToxZDowYzo2ZDoyNDowNTplMjo4MjplMTo0NzpkYjphMDo1ZjpiYTpiOTpmYjpiYTpmYToKKyAgICAgICAgIDQ5OjEyOjFlOmNlCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwekNDQVk4Q0NRQ3drbVN4OHRvaDBqQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SlkKK1dURW1NQ1FHQTFVRUNnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlYKK0JBTU1EVzkxY2kxallTMXpaWEoyWlhJd0hoY05NVE13TVRBME1UazBOekEzV2hjTk1qSXhNVEV6TVRrME56QTMKK1dqQmlNUXN3Q1FZRFZRUUdFd0pZV1RFWE1CVUdBMVVFQnhNT1EyRnpkR3hsSUVGdWRHaHlZWGd4SXpBaEJnTlYKK0JBb1RHbEI1ZEdodmJpQlRiMlowZDJGeVpTQkdiM1Z1WkdGMGFXOXVNUlV3RXdZRFZRUURFd3htWVd0bGFHOXoKK2RHNWhiV1V3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQUs1VVFpTUk1VmtOczJRdkw3Z1UKK2FpRGRGZXZOVVhSalU0REhBZTNaenpZTFpORTY5aDlnTzlWQ1NTMTZ0SjVmVDVWRXUwRVp5R3IwZTNWMk5rWDAKK1pvVTBIYy9VYVk0cXg3TEhtbjVTWVpwSXhoSm5rZjdTeUhKSzF6VWFHbFUwL0x4WXFJdUdDdEY1ZHF4MUwyT1EKK2hFeDFHTTZSeWRIZGdYNjlHNjRMWGNZNUFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUsxRmlvN3YKK3h1OEVRVndzU29UY0FuWU0wR1lQOEJZRVdFMzlhTGU0MDZoQnBWdzhiMlU4MGZqT1F6WG5RVjlUUGNrc3czMzgKK1ZrcjZSM2M0bmJ1WEtBbzdrUmwvdkhTdUZXdTlJRFpuUmFVZWVkZDE1b2xjYlZTRTBaWFhwN1F6UEs4M3hIbVAKK1huWGNkY0lZKzJGdkxkdzRaVnU2WnlqUWlOZU51U05hanVqR3U5dk8xYmhCS3M2VENMYVZyVFFnR05VN04xSjAKK1VBc0hMTEJ0cEV4NzlPRDkwYThYcWlETll1UHduVGRwMjBHOTFCejdVeURhaUoxMkptZk9BWkNuZ0IycFd6bHoKK2FGUUswU29ERzQ4OFExMWR4Rkh4cCtjUjJqRXNTUWF2QlBTNFBKbkVJTGtHTnFJQWttRWRERzBrQmVLQzRVZmIKK29GKzZ1ZnU2K2trU0hzND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5IGIvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2dlc3RhbHQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMDgxYzEuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2dlc3RhbHQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1pbXBvcnQgc3lzCi0KLWlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKLSAgICByYWlzZSBWYWx1ZUVycm9yKCJUaGlzIHRlc3Qgb25seSBsZWFrcyBvbiBNYWMgT1MgWCIpCi0KLWRlZiBsZWFrKCk6Ci0gICAgIyB0YWtlbiBmcm9tIHBsYXRmb3JtLl9tYWNfdmVyX2xvb2t1cCgpCi0gICAgZnJvbSBnZXN0YWx0IGltcG9ydCBnZXN0YWx0Ci0gICAgaW1wb3J0IE1hY09TCi0KLSAgICB0cnk6Ci0gICAgICAgIGdlc3RhbHQoJ3N5c3UnKQotICAgIGV4Y2VwdCBNYWNPUy5FcnJvcjoKLSAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbG9ja190ZXN0cy5weSBiL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKaW5kZXggYmZiZjQ0ZS4uMWEyNGJkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbG9ja190ZXN0cy5weQorKysgYi9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CkBAIC04MCw2ICs4MCwxMSBAQAogICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCiAgICAgICAgIGRlbCBsb2NrCiAKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIHJlcHIobG9jaykKKyAgICAgICAgZGVsIGxvY2sKKwogICAgIGRlZiB0ZXN0X2FjcXVpcmVfZGVzdHJveShzZWxmKToKICAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQogICAgICAgICBsb2NrLmFjcXVpcmUoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQppbmRleCA0OGQyZTU3Li5mNjMwODEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQorKysgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQpAQCAtMiw2ICsyLDcgQEAKIGFuZCBmcmllbmRzLiIiIgogCiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSBzdWJwcm9jZXNzIGltcG9ydCAqCkBAIC0yMCwxMSArMjEsNTIgQEAKIAogICAgIFtyZXFfeDUwOV9leHRlbnNpb25zXQogICAgIHN1YmplY3RBbHROYW1lICAgICAgICAgPSBETlM6e2hvc3RuYW1lfQorCisgICAgWyBjYSBdCisgICAgZGVmYXVsdF9jYSAgICAgID0gQ0FfZGVmYXVsdAorCisgICAgWyBDQV9kZWZhdWx0IF0KKyAgICBkaXIgPSBjYWRpcgorICAgIGRhdGFiYXNlICA9ICRkaXIvaW5kZXgudHh0CisgICAgZGVmYXVsdF9tZCA9IHNoYTEKKyAgICBkZWZhdWx0X2RheXMgPSAzNjAwCisgICAgY2VydGlmaWNhdGUgPSBweWNhY2VydC5wZW0KKyAgICBwcml2YXRlX2tleSA9IHB5Y2FrZXkucGVtCisgICAgc2VyaWFsICAgID0gJGRpci9zZXJpYWwKKyAgICBSQU5ERklMRSAgPSAkZGlyLy5yYW5kCisKKyAgICBwb2xpY3kgICAgICAgICAgPSBwb2xpY3lfbWF0Y2gKKworICAgIFsgcG9saWN5X21hdGNoIF0KKyAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICA9IG1hdGNoCisgICAgc3RhdGVPclByb3ZpbmNlTmFtZSAgICAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgID0gbWF0Y2gKKyAgICBvcmdhbml6YXRpb25hbFVuaXROYW1lICA9IG9wdGlvbmFsCisgICAgY29tbW9uTmFtZSAgICAgICAgICAgICAgPSBzdXBwbGllZAorICAgIGVtYWlsQWRkcmVzcyAgICAgICAgICAgID0gb3B0aW9uYWwKKworICAgIFsgcG9saWN5X2FueXRoaW5nIF0KKyAgICBjb3VudHJ5TmFtZSAgID0gb3B0aW9uYWwKKyAgICBzdGF0ZU9yUHJvdmluY2VOYW1lID0gb3B0aW9uYWwKKyAgICBsb2NhbGl0eU5hbWUgICAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbk5hbWUgID0gb3B0aW9uYWwKKyAgICBvcmdhbml6YXRpb25hbFVuaXROYW1lICA9IG9wdGlvbmFsCisgICAgY29tbW9uTmFtZSAgICA9IHN1cHBsaWVkCisgICAgZW1haWxBZGRyZXNzICAgID0gb3B0aW9uYWwKKworCisgICAgWyB2M19jYSBdCisKKyAgICBzdWJqZWN0S2V5SWRlbnRpZmllcj1oYXNoCisgICAgYXV0aG9yaXR5S2V5SWRlbnRpZmllcj1rZXlpZDphbHdheXMsaXNzdWVyCisgICAgYmFzaWNDb25zdHJhaW50cyA9IENBOnRydWUKKwogICAgICIiIgogCiBoZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCiAKLWRlZiBtYWtlX2NlcnRfa2V5KGhvc3RuYW1lKToKK2RlZiBtYWtlX2NlcnRfa2V5KGhvc3RuYW1lLCBzaWduPUZhbHNlKToKKyAgICBwcmludCgiY3JlYXRpbmcgY2VydCBmb3IgIiArIGhvc3RuYW1lKQogICAgIHRlbXBuYW1lcyA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgZjoKQEAgLTMzLDEwICs3NSwyNSBAQAogICAgIHRyeToKICAgICAgICAgd2l0aCBvcGVuKHJlcV9maWxlLCAndycpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHJlcV90ZW1wbGF0ZS5mb3JtYXQoaG9zdG5hbWU9aG9zdG5hbWUpKQotICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1ub2RlcycsICcteDUwOScsCisgICAgICAgIGFyZ3MgPSBbJ3JlcScsICctbmV3JywgJy1kYXlzJywgJzM2NTAnLCAnLW5vZGVzJywKICAgICAgICAgICAgICAgICAnLW5ld2tleScsICdyc2E6MTAyNCcsICcta2V5b3V0Jywga2V5X2ZpbGUsCi0gICAgICAgICAgICAgICAgJy1vdXQnLCBjZXJ0X2ZpbGUsICctY29uZmlnJywgcmVxX2ZpbGVdCisgICAgICAgICAgICAgICAgJy1jb25maWcnLCByZXFfZmlsZV0KKyAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgZjoKKyAgICAgICAgICAgICAgICB0ZW1wbmFtZXMuYXBwZW5kKGYubmFtZSkKKyAgICAgICAgICAgICAgICByZXFmaWxlID0gZi5uYW1lCisgICAgICAgICAgICBhcmdzICs9IFsnLW91dCcsIHJlcWZpbGUgXQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmdzICs9IFsnLXg1MDknLCAnLW91dCcsIGNlcnRfZmlsZSBdCiAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorCisgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICBhcmdzID0gWydjYScsICctY29uZmlnJywgcmVxX2ZpbGUsICctb3V0JywgY2VydF9maWxlLCAnLW91dGRpcicsICdjYWRpcicsCisgICAgICAgICAgICAgICAgICAgICctcG9saWN5JywgJ3BvbGljeV9hbnl0aGluZycsICctYmF0Y2gnLCAnLWluZmlsZXMnLCByZXFmaWxlIF0KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorCisKICAgICAgICAgd2l0aCBvcGVuKGNlcnRfZmlsZSwgJ3InKSBhcyBmOgogICAgICAgICAgICAgY2VydCA9IGYucmVhZCgpCiAgICAgICAgIHdpdGggb3BlbihrZXlfZmlsZSwgJ3InKSBhcyBmOgpAQCAtNDYsNiArMTAzLDMyIEBACiAgICAgICAgIGZvciBuYW1lIGluIHRlbXBuYW1lczoKICAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQogCitUTVBfQ0FESVIgPSAnY2FkaXInCisKK2RlZiB1bm1ha2VfY2EoKToKKyAgICBzaHV0aWwucm10cmVlKFRNUF9DQURJUikKKworZGVmIG1ha2VfY2EoKToKKyAgICBvcy5ta2RpcihUTVBfQ0FESVIpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignY2FkaXInLCdpbmRleC50eHQnKSwnYSsnKSBhcyBmOgorICAgICAgICBwYXNzICMgZW1wdHkgZmlsZQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2NhZGlyJywnaW5kZXgudHh0LmF0dHInKSwndysnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCd1bmlxdWVfc3ViamVjdCA9IG5vJykKKworICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCJ3IikgYXMgdDoKKyAgICAgICAgdC53cml0ZShyZXFfdGVtcGxhdGUuZm9ybWF0KGhvc3RuYW1lPSdvdXItY2Etc2VydmVyJykpCisgICAgICAgIHQuZmx1c2goKQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGY6CisgICAgICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1leHRlbnNpb25zJywgJ3YzX2NhJywgJy1ub2RlcycsCisgICAgICAgICAgICAgICAgICAgICctbmV3a2V5JywgJ3JzYToyMDQ4JywgJy1rZXlvdXQnLCAncHljYWtleS5wZW0nLAorICAgICAgICAgICAgICAgICAgICAnLW91dCcsIGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJy1zdWJqJywgJy9DPVhZL0w9Q2FzdGxlIEFudGhyYXgvTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQS9DTj1vdXItY2Etc2VydmVyJ10KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorICAgICAgICAgICAgYXJncyA9IFsnY2EnLCAnLWNvbmZpZycsIHQubmFtZSwgJy1jcmVhdGVfc2VyaWFsJywKKyAgICAgICAgICAgICAgICAgICAgJy1vdXQnLCAncHljYWNlcnQucGVtJywgJy1iYXRjaCcsICctb3V0ZGlyJywgVE1QX0NBRElSLAorICAgICAgICAgICAgICAgICAgICAnLWtleWZpbGUnLCAncHljYWtleS5wZW0nLCAnLWRheXMnLCAnMzY1MCcsCisgICAgICAgICAgICAgICAgICAgICctc2VsZnNpZ24nLCAnLWV4dGVuc2lvbnMnLCAndjNfY2EnLCAnLWluZmlsZXMnLCBmLm5hbWUgXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgb3MuY2hkaXIoaGVyZSkKQEAgLTU0LDExICsxMzcsMzQgQEAKICAgICAgICAgZi53cml0ZShjZXJ0KQogICAgIHdpdGggb3Blbignc3NsX2tleS5wZW0nLCAndycpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoa2V5KQorICAgIHByaW50KCJwYXNzd29yZCBwcm90ZWN0aW5nIHNzbF9rZXkucGVtIGluIHNzbF9rZXkucGFzc3dkLnBlbSIpCisgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnLCdyc2EnLCctaW4nLCdzc2xfa2V5LnBlbScsJy1vdXQnLCdzc2xfa2V5LnBhc3N3ZC5wZW0nLCctZGVzMycsJy1wYXNzb3V0JywncGFzczpzb21lcGFzcyddKQorICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJywncnNhJywnLWluJywnc3NsX2tleS5wZW0nLCctb3V0Jywna2V5Y2VydC5wYXNzd2QucGVtJywnLWRlczMnLCctcGFzc291dCcsJ3Bhc3M6c29tZXBhc3MnXSkKKwogICAgIHdpdGggb3Blbigna2V5Y2VydC5wZW0nLCAndycpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoa2V5KQogICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICB3aXRoIG9wZW4oJ2tleWNlcnQucGFzc3dkLnBlbScsICdhKycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoY2VydCkKKwogICAgICMgRm9yIGNlcnRpZmljYXRlIG1hdGNoaW5nIHRlc3RzCisgICAgbWFrZV9jYSgpCiAgICAgY2VydCwga2V5ID0gbWFrZV9jZXJ0X2tleSgnZmFrZWhvc3RuYW1lJykKICAgICB3aXRoIG9wZW4oJ2tleWNlcnQyLnBlbScsICd3JykgYXMgZjoKICAgICAgICAgZi53cml0ZShrZXkpCiAgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIGNlcnQsIGtleSA9IG1ha2VfY2VydF9rZXkoJ2xvY2FsaG9zdCcsIFRydWUpCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0My5wZW0nLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoa2V5KQorICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICBjZXJ0LCBrZXkgPSBtYWtlX2NlcnRfa2V5KCdmYWtlaG9zdG5hbWUnLCBUcnVlKQorICAgIHdpdGggb3Blbigna2V5Y2VydDQucGVtJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGtleSkKKyAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgdW5tYWtlX2NhKCkKKyAgICBwcmludCgiXG5cblBsZWFzZSBjaGFuZ2UgdGhlIHZhbHVlcyBpbiB0ZXN0X3NzbC5weSwgdGVzdF9wYXJzZV9jZXJ0IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbm90QWZ0ZXIsbm90QmVmb3JlIGFuZCBzZXJpYWxOdW1iZXIiKQorICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJywneDUwOScsJy1pbicsJ2tleWNlcnQucGVtJywnLWRhdGVzJywnLXNlcmlhbCcsJy1ub291dCddKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkgYi9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQppbmRleCBkMDllNzhjLi44ZWYwZWM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQorKysgYi9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQpAQCAtMTQwLDEyICsxNDAsOCBAQAogICAgIHJldHVybiAiIgogCiAKLWNsYXNzIGdhaWVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIGVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcworZ2FpZXJyb3IgPSBzb2NrZXRfbW9kdWxlLmdhaWVycm9yCitlcnJvciA9IHNvY2tldF9tb2R1bGUuZXJyb3IKIAogCiAjIENvbnN0YW50cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5IGIvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5CmluZGV4IDkwOGFmZTMuLjAxN2UwMTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weQorKysgYi9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKQEAgLTcsNiArNywxMSBAQAogIyBjb3JyZWN0bHkgb24gV2luZG93cy4gIEhvd2V2ZXIsIHdlIHNob3VsZCBnZXQgYSBSdW50aW1lRXJyb3IgcmF0aGVyCiAjIHRoYW4gdGhlIFdpbmRvd3MgZXF1aXZhbGVudCBvZiBhIGZvcmsgYm9tYi4KIAoraWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qoc3lzLmFyZ3ZbMV0pCitlbHNlOgorICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCisKIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Zm9vKQogcC5zdGFydCgpCiBwLmpvaW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weSBiL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKaW5kZXggMjZiYWM3Yi4uZGNhYWU3YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CkBAIC0yODIsNyArMjgyLDcgQEAKICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYub3Blbl9tYXBwaW5nX2ZpbGUoKS5jbG9zZSgpICMgdGVzdCBpdCB0byByZXBvcnQgdGhlIGVycm9yIGVhcmx5Ci0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIitzZWxmLm1hcGZpbGV1cmwpCiAKICAgICBkZWYgb3Blbl9tYXBwaW5nX2ZpbGUoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkgYi9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKaW5kZXggMDUyMjkwZC4uMTk3MTEyMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CisrKyBiL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQpAQCAtNjAxLDMwICs2MDEsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5sb2FkcywgYidnMFxucDAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYicoKEtkdHAwXG5oXHgwMGwuKSknKSwgWygxMDAsKSwgKDEwMCwpXSkKIAotICAgIGRlZiB0ZXN0X2luc2VjdXJlX3N0cmluZ3Moc2VsZik6Ci0gICAgICAgICMgWFhYIFNvbWUgb2YgdGhlc2UgdGVzdHMgYXJlIHRlbXBvcmFyaWx5IGRpc2FibGVkCi0gICAgICAgIGluc2VjdXJlID0gW2IiYWJjIiwgYiIyICsgMiIsICMgbm90IHF1b3RlZAotICAgICAgICAgICAgICAgICAgICAjIyBiIidhYmMnICsgJ2RlZiciLCAjIG5vdCBhIHNpbmdsZSBxdW90ZWQgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIGIiJ2FiYyIsICMgcXVvdGUgaXMgbm90IGNsb3NlZAotICAgICAgICAgICAgICAgICAgICBiIidhYmNcIiIsICMgb3BlbiBxdW90ZSBhbmQgY2xvc2UgcXVvdGUgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAgICAgICAgYiInYWJjJyAgID8iLCAjIGp1bmsgYWZ0ZXIgY2xvc2UgcXVvdGUKLSAgICAgICAgICAgICAgICAgICAgYiInXFwnIiwgIyB0cmFpbGluZyBiYWNrc2xhc2gKLSAgICAgICAgICAgICAgICAgICAgIyBWYXJpYXRpb25zIG9uIGlzc3VlICMxNzcxMAotICAgICAgICAgICAgICAgICAgICBiIiciLAotICAgICAgICAgICAgICAgICAgICBiJyInLAotICAgICAgICAgICAgICAgICAgICBiIicgIiwKLSAgICAgICAgICAgICAgICAgICAgYiInICAiLAotICAgICAgICAgICAgICAgICAgICBiIicgICAiLAotICAgICAgICAgICAgICAgICAgICBiIicgICAgIiwKLSAgICAgICAgICAgICAgICAgICAgYiciICAgICcsCi0gICAgICAgICAgICAgICAgICAgICMgc29tZSB0ZXN0cyBvZiB0aGUgcXVvdGluZyBydWxlcwotICAgICAgICAgICAgICAgICAgICAjIyBiIidhYmNcIlwnJyIsCi0gICAgICAgICAgICAgICAgICAgICMjIGIiJ1xcXFxhXCdcJ1wnXFxcJ1xcXFxcJyciLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgIGZvciBiIGluIGluc2VjdXJlOgotICAgICAgICAgICAgYnVmID0gYiJTIiArIGIgKyBiIlwwMTJwMFwwMTIuIgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgYnVmKQotCiAgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKICAgICAgICAgZW5kY2FzZXMgPSBbJycsICc8XFx1PicsICc8XFxcdTEyMzQ+JywgJzxcbj4nLAogICAgICAgICAgICAgICAgICAgICAnPFxcPicsICc8XFxcVTAwMDEyMzQ1PicsCkBAIC0xMjE0LDYgKzExOTAsMzUgQEAKICAgICAgICAgZHVtcGVkID0gYidceDgwXHgwM1hceDAxXHgwMFx4MDBceDAwYXJceGZmXHhmZlx4ZmZceGZmLicKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgZHVtcGVkKQogCisgICAgZGVmIHRlc3RfYmFkbHlfZXNjYXBlZF9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9hZHMsIGIiUydcXCdcbi4iKQorCisgICAgZGVmIHRlc3RfYmFkbHlfcXVvdGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTc3MTAKKyAgICAgICAgYmFkcGlja2xlcyA9IFtiIlMnXG4uIiwKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1NcJyBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUyIgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1NcJyJcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUyJcJ1xuLicsCisgICAgICAgICAgICAgICAgICAgICAgYiJTJyAnIFxuLiIsCisgICAgICAgICAgICAgICAgICAgICAgYidTIiAiIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYiJTICcnXG4uIiwKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MgIiJcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUyBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInU1xuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTLiddCisgICAgICAgIGZvciBwIGluIGJhZHBpY2tsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBzZWxmLmxvYWRzLCBwKQorCisgICAgZGVmIHRlc3RfY29ycmVjdGx5X3F1b3RlZF9zdHJpbmcoc2VsZik6CisgICAgICAgIGdvb2RwaWNrbGVzID0gWyhiIlMnJ1xuLiIsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGInUyIiXG4uJywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAoYidTIlxcbiJcbi4nLCAnXG4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGIiUydcXG4nXG4uIiwgJ1xuJyldCisgICAgICAgIGZvciBwLCBleHBlY3RlZCBpbiBnb29kcGlja2xlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwKSwgZXhwZWN0ZWQpCisKICAgICBkZWYgX2NoZWNrX3BpY2tsaW5nX3dpdGhfb3Bjb2RlKHNlbGYsIG9iaiwgb3Bjb2RlLCBwcm90byk6CiAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgcGlja2xlZCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weWNhY2VydC5wZW0gYi9MaWIvdGVzdC9weWNhY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliMWYzZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FjZXJ0LnBlbQpAQCAtMCwwICsxLDc4IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgwICgweGIwOTI2NGIxZjJkYTIxZDApCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBKYW4gIDIgMTk6NDc6MDcgMjAyMyBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmU3OmRlOmU5OmUzOjBjOjlmOjAwOmI2OmExOmZkOjJiOjViOjk2OmQyOgorICAgICAgICAgICAgICAgICAgICA2ZjpjYzplMDpiZTo4NjpiOToyMDo1ZTplYzowMzo3YTo1NTphYjplYTphNDoKKyAgICAgICAgICAgICAgICAgICAgZTk6Zjk6NDk6ODU6ZDI6NjY6ZDU6ZWQ6Yzc6N2E6ZWE6NTY6OGU6MmQ6OGY6CisgICAgICAgICAgICAgICAgICAgIGU3OjQyOmUyOjYyOjI4OmE5OjlmOmQ2OjFiOjhlOmViOmI1OmI0OjljOjlmOgorICAgICAgICAgICAgICAgICAgICAxNDphYjpkZjplNjo5NDo4Yjo3NjoxZDozZTo2ZDoyNDo2MTplZDowYzpiZjoKKyAgICAgICAgICAgICAgICAgICAgMDA6OGE6NjE6MGM6ZGY6NWM6Yzg6MzY6NzM6MTY6MDA6Y2Q6NDc6YmE6NmQ6CisgICAgICAgICAgICAgICAgICAgIGE0OmE0Ojc0Ojg4OjgzOjIzOjBhOjE5OmZjOjA5OmE3OjNjOjRhOjRiOmQzOgorICAgICAgICAgICAgICAgICAgICBlNzoxZDoyZDplNDplYTo0Yzo1NDoyMTpmMzoyNjpkYjo4OTozNzoxODpkNDoKKyAgICAgICAgICAgICAgICAgICAgMDI6YmI6NDA6MzI6NWY6YTQ6ZmY6MmQ6MWM6Zjc6ZDQ6YmI6ZWM6OGU6Y2Y6CisgICAgICAgICAgICAgICAgICAgIDVjOjgyOmFjOmU2OjdjOjA4OjZjOjQ4Ojg1OjYxOjA3OjdmOjI1OmUwOjVjOgorICAgICAgICAgICAgICAgICAgICBlMDpiYzozNDo1ZjplMDpiOTowNDo0Nzo3NTpjODo0NzowYjo4ZDpiYzpkNjoKKyAgICAgICAgICAgICAgICAgICAgYzg6Njg6NWY6MzM6ODM6NjI6ZDI6MjA6NDQ6MzU6YjE6YWQ6ODE6MWE6OGE6CisgICAgICAgICAgICAgICAgICAgIGNkOmJjOjM1OmIwOjVjOjhiOjQ3OmQ2OjE4OmU5OjljOjE4Ojk3OmNjOjAxOgorICAgICAgICAgICAgICAgICAgICAzYzoyOTpjYzplODoxZTplNDplNDpjMTpiODpkZTplNzpjMjoxMToxODo4NzoKKyAgICAgICAgICAgICAgICAgICAgNWE6OTM6MzQ6ZDg6YTY6MjU6Zjc6MTQ6NzE6ZWI6ZTQ6MjE6YTI6ZDI6MGY6CisgICAgICAgICAgICAgICAgICAgIDJlOjJlOmQ0OjYyOjAwOjM1OmQzOmQ2OmVmOjVjOjYwOjRiOjRjOmE5OjE0OgorICAgICAgICAgICAgICAgICAgICBlMjpkZDoxNTo1ODo0NjozNzozMzoyNjpiNzplNzoyZTo1ZDplZDo0MjplNDoKKyAgICAgICAgICAgICAgICAgICAgYzU6NGQKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorCisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDdkOjBhOmY1OmNiOjhkOmQzOjVkOmJkOjk5OjhlOmY4OjJiOjBmOmJhOmViOmMyOmQ5OmE2OgorICAgICAgICAgMjc6NGY6MmU6N2I6MmY6MGU6NjQ6ZDg6MWM6MzU6NTA6NGU6ZWU6ZmM6OTA6Yjk6OGQ6NmQ6CisgICAgICAgICBhODpjNTpjNjowNjpiMDphZjpmMzoyZDpiZjozYjpiODo0MjowNzpkZDoxODo3ZDo2ZDo5NToKKyAgICAgICAgIDU0OjU3Ojg1OjE4OjYwOjQ3OjJmOmViOjc4OjFiOmY5OmU4OjE3OmZkOjVhOjBkOjg3OjE3OgorICAgICAgICAgMjg6YWM6NGM6NmE6ZTY6YmM6Mjk6ZjQ6ZjQ6NTU6NzA6Mjk6NDI6ZGU6ODU6ZWE6YWI6NmM6CisgICAgICAgICAyMzowNjo2NDozMDo3NTowMjo4ZTo1MzpiYzo1ZTowMTozMzozNzpjYzoxZTpjZDpiODphNDoKKyAgICAgICAgIGZkOmNhOmU0OjVmOjY1OjNiOjgzOjFjOjg2OmYxOjU1OjAyOmEwOjNhOjhmOmRiOjkxOmI3OgorICAgICAgICAgNDA6MTQ6YjQ6ZTc6OGQ6ZDI6ZWU6NzM6YmE6ZTM6ZTU6MzQ6MmQ6YmM6OTQ6NmY6NGU6MjQ6CisgICAgICAgICAwNjpmNzo1Zjo4YjowZTphNzo4ZTo2YjpkZTo1ZTo3NTpmNDozMjo5YTo1MDpiMTo0NDozMzoKKyAgICAgICAgIDlhOmQwOjA1OmUyOjc4OjgyOmZmOmRiOmRhOjhhOjYzOmViOmE5OmRkOmQxOmJmOmEwOjYxOgorICAgICAgICAgYWQ6ZTM6OWU6OGE6MjQ6NWQ6NjI6MGU6ZTc6NGM6OTE6N2Y6ZWY6ZGY6MzQ6MzY6M2I6MmY6CisgICAgICAgICA1ZDpmNTo4NDpiMjoyZjpjNDo2ZDo5Mzo5NjoxYTo2ZjozMDoyODpmMTpkYToxMjo5YTo2NDoKKyAgICAgICAgIGI0OjQwOjMzOjFkOmJkOmRlOjJiOjUzOmE4OmVhOmJlOmQ2OmJjOjRlOjk2OmY1OjQ0OmZiOgorICAgICAgICAgMzI6MTg6YWU6ZDU6MWY6ZjY6Njk6YWY6YjY6NGU6N2I6MWQ6NTg6ZWM6M2I6YTk6NTM6YTM6CisgICAgICAgICA1ZTo1ODpjODo5ZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEYlRDQ0FsV2dBd0lCQWdJSkFMQ1NaTEh5MmlIUU1BMEdDU3FHU0liM0RRRUJCUVVBTUUweEN6QUpCZ05WCitCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZ1JtOTFibVJoZEdsdmJpQkRRVEVXCitNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pBZUZ3MHhNekF4TURReE9UUTNNRGRhRncweU16QXhNREl4CitPVFEzTURkYU1FMHhDekFKQmdOVkJBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnCitSbTkxYm1SaGRHbHZiaUJEUVRFV01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakNDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU9mZTZlTU1ud0Myb2Ywclc1YlNiOHpndm9hNUlGN3NBM3BWCitxK3FrNmZsSmhkSm0xZTNIZXVwV2ppMlA1MExpWWlpcG45WWJqdXUxdEp5ZkZLdmY1cFNMZGgwK2JTUmg3UXkvCitBSXBoRE45Y3lEWnpGZ0ROUjdwdHBLUjBpSU1qQ2huOENhYzhTa3ZUNXgwdDVPcE1WQ0h6SnR1Sk54alVBcnRBCitNbCtrL3kwYzk5Uzc3STdQWElLczVud0liRWlGWVFkL0plQmM0THcwWCtDNUJFZDF5RWNMamJ6V3lHaGZNNE5pCiswaUJFTmJHdGdScUt6Yncxc0Z5TFI5WVk2WndZbDh3QlBDbk02QjdrNU1HNDN1ZkNFUmlIV3BNMDJLWWw5eFJ4Cis2K1Fob3RJUExpN1VZZ0ExMDlidlhHQkxUS2tVNHQwVldFWTNNeWEzNXk1ZDdVTGt4VTBDQXdFQUFhTlFNRTR3CitIUVlEVlIwT0JCWUVGTHpkWXRsMjJodlNWR3ZQNEdhYkhoNTdWZ3dMTUI4R0ExVWRJd1FZTUJhQUZMemRZdGwyCisyaHZTVkd2UDRHYWJIaDU3Vmd3TE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCCitBSDBLOWN1TjAxMjltWTc0S3crNjY4TFpwaWRQTG5zdkRtVFlIRFZRVHU3OGtMbU5iYWpGeGdhd3IvTXR2enU0CitRZ2ZkR0gxdGxWUlhoUmhnUnkvcmVCdjU2QmY5V2cySEZ5aXNUR3JtdkNuMDlGVndLVUxlaGVxcmJDTUdaREIxCitBbzVUdkY0Qk16Zk1IczI0cFAzSzVGOWxPNE1jaHZGVkFxQTZqOXVSdDBBVXRPZU4wdTV6dXVQbE5DMjhsRzlPCitKQWIzWDRzT3A0NXIzbDUxOURLYVVMRkVNNXJRQmVKNGd2L2Iyb3BqNjZuZDBiK2dZYTNqbm9va1hXSU81MHlSCitmKy9mTkRZN0wxMzFoTEl2eEcyVGxocHZNQ2p4MmhLYVpMUkFNeDI5M2l0VHFPcSsxcnhPbHZWRSt6SVlydFVmCis5bW12dGs1N0hWanNPNmxUbzE1WXlKND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3B5Y2FrZXkucGVtIGIvTGliL3Rlc3QvcHljYWtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2ZWZmZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FrZXkucGVtCkBAIC0wLDAgKzEsMjggQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJRXZnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2d3Z2dTa0FnRUFBb0lCQVFEbjN1bmpESjhBdHFIOQorSzF1VzBtL000TDZHdVNCZTdBTjZWYXZxcE9uNVNZWFNadFh0eDNycVZvNHRqK2RDNG1Jb3FaL1dHNDdydGJTYworbnhTcjMrYVVpM1lkUG0wa1llME12d0NLWVF6ZlhNZzJjeFlBelVlNmJhU2tkSWlESXdvWi9BbW5QRXBMMCtjZAorTGVUcVRGUWg4eWJiaVRjWTFBSzdRREpmcFA4dEhQZlV1K3lPejF5Q3JPWjhDR3hJaFdFSGZ5WGdYT0M4TkYvZwordVFSSGRjaEhDNDI4MXNob1h6T0RZdElnUkRXeHJZRWFpczI4TmJCY2kwZldHT21jR0pmTUFUd3B6T2dlNU9UQgordU43bndoRVloMXFUTk5pbUpmY1VjZXZrSWFMU0R5NHUxR0lBTmRQVzcxeGdTMHlwRk9MZEZWaEdOek1tdCtjdQorWGUxQzVNVk5BZ01CQUFFQ2dnRUJBSlBNN1F1VXJQbjRjTE4vWXNkMTVsd1RXbjlvSERGRmdrWUZ2Q3M2NmdYRQoranUvNkt4MkJqV0U0d1RKYnkwOUFITS9NcUIwRHZndVQ3TWYxUTJqM3RQUTFIWm93ZzhPd1JEbGV1d3A2S0lscworakJiaEwwSmRsLzVIQzY3a3RXdlo5d052Ty93RkcxclFmVDZGVmFqZjlMVWJXRWFTWmJPRzJTTGhIZnNIb3J6dQoreGpUSmFJM2JRLzArNzlCMWV4d2s1cnV3aHpGUmQvWHBZOGhsczdEL1JmUEl1SERsQmdoa1czTjU5S0ZXcmY1aAorNmJORWgyVEhtMCtJeUdjR3FzMEZEK1FDT1h5dnNqd1NVc3dxcnIyY3RMUkVPZURjZDVSZVVqU3hZZ2pjSlJybQorSjdjZUlZLyt1d0RKeHcvT2xubUJ2RjZwUU1rS3dZVzJnRnp0dStnMnQ0VUNnWUVBLzl5bzAxRXh6NGNyeFhzeQordEFsbkRKTSsrblpjbTA3cnRGalRLSFVmS1kvY0NnTlRhOHVkTTBzdm5md2xpZC9kcGdMc0kzOGd4MDRISEMxaQorRVo0YWN6K1RvSVdlZEx4TTBucTczLy94ZVJXRWF6T3ZDejFtTVRaYU1sZGFoVFdBeXpOOHFWSzJCLzYyNVl5NAord05ZV3l3ZUJCd0VCOE16YUNzNzNzcGtzWE9zQ2dZRUE1Lzd3dmhpb2ZZR0ZBZk11QU5lSkl3REwyT3RCbm9PdgorbVZOZkNtaTNHQzM4Znp3eWk1WnBza1dEaVMyd29KK0xRZnM5UXU0RWNaYlVGTGQ3Z2JlT3ZiNWdtRlV0WW9wZQorTGl0VVVLdW5JUjE4TWtRK21RREJwUVBRUGhrNFFKUDVyZUNiV2tyZlR1N2I1by9pUzQxczZmQlRGbXV6aExjVAorQzcxdkZkQ3llS2NDZ1lBaUNDcVllT3RFTERtQk9lTERtYUNRUnFHUTFOOTZkT1BiQ0JtRi94WVhCQ0NEWUcvZgorSGFVYUpuejk2WVRnc3RzYmNyWVAvcC9RZ3F0bGJ3L2xRZjlJcHdNdXpiY0cxZWp0OGc4OU95RFdOeXQyeXRnVQoraWFVbkZKQ29zMy9CeWgwSWFoL0JzZE91ZW8yL09KbDJaTU9CVzgwb3JsU2d2ODZjczJ5MDM3VEw0d0tCZ1FEbQorT095VytNbGJvd2huSXZmb0Jmd2xMRWtlZm5lajRuS0Q2V1JMWkJjdWU1UXlmMzU1WDA2TWhzYzlmb1hsSCs2RworRDloL2Jzd2lITmRocDZOODJyZGdQR2lIUXgvQ3hpVW9FLytiL252Z05PNW13NnFMRTJFWGJHMWU4cEFNSmN5RQorYkh3K1lrYXdnZ0RmRUxJMDM2ZlJqNWdraThTZVV6OG5TMW5OZ0VsYnlRS0JnQ1JEWDlKaCtNd1NMdTRRQldkdAorL2ZpK2x2M0s2a3VuL2ZJN0VPVjF2Q1Yvajg3MXRJQ3U3cHU1QnJPTHhBSHFvVmZVOUFVWDI5OS8yS2pDYjVwdgora2pvZ2lVSzZxV0NXQmxmdXFETldHQ29VR3Qxcmh6blV2YTBuTmpTTXk1cmluQmhoanBST1pDMnB3NDhsT2x1UAorVXV2WHNhUHBoN0dUcVB1eTRLYWIxMllDCistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZWdydGVzdC5weSBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CmluZGV4IGFlNjJjNmUuLmE1ZDcwN2UgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CkBAIC0xLDExICsxLDE4IEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiIKLVVzYWdlOgorU2NyaXB0IHRvIHJ1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAorUnVuIHRoaXMgc2NyaXB0IHdpdGggLWggb3IgLS1oZWxwIGZvciBkb2N1bWVudGF0aW9uLgorIiIiCisKK1VTQUdFID0gIiIiXAogcHl0aG9uIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCiBweXRob24gcGF0aC90by9MaWIvdGVzdC9yZWdydGVzdC5weSBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgW3Rlc3RfbmFtZTIgLi4uXV0KKyIiIgogCitERVNDUklQVElPTiA9ICIiIlwKK1J1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAogSWYgbm8gYXJndW1lbnRzIG9yIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBmaW5kcyBhbGwgZmlsZXMgbWF0Y2hpbmcKIHRoZSBwYXR0ZXJuICJ0ZXN0XyoiIGluIHRoZSBMaWIvdGVzdCBzdWJkaXJlY3RvcnkgYW5kIHJ1bnMKQEAgLTE1LDYzICsyMiwxMCBAQAogY29tbWFuZCBsaW5lOgogCiBweXRob24gLUUgLVdkIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIC4uLl0KKyIiIgogCi0KLU9wdGlvbnM6Ci0KLS1oLy0taGVscCAgICAgICAtLSBwcmludCB0aGlzIHRleHQgYW5kIGV4aXQKLS0tdGltZW91dCBUSU1FT1VUCi0gICAgICAgICAgICAgICAgLS0gZHVtcCB0aGUgdHJhY2ViYWNrIGFuZCBleGl0IGlmIGEgdGVzdCB0YWtlcyBtb3JlCi0gICAgICAgICAgICAgICAgICAgdGhhbiBUSU1FT1VUIHNlY29uZHM7IGRpc2FibGVkIGlmIFRJTUVPVVQgaXMgbmVnYXRpdmUKLSAgICAgICAgICAgICAgICAgICBvciBlcXVhbHMgdG8gemVybwotLS13YWl0ICAgICAgICAgIC0tIHdhaXQgZm9yIHVzZXIgaW5wdXQsIGUuZy4sIGFsbG93IGEgZGVidWdnZXIgdG8gYmUgYXR0YWNoZWQKLQotVmVyYm9zaXR5Ci0KLS12Ly0tdmVyYm9zZSAgICAtLSBydW4gdGVzdHMgaW4gdmVyYm9zZSBtb2RlIHdpdGggb3V0cHV0IHRvIHN0ZG91dAotLXcvLS12ZXJib3NlMiAgIC0tIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlCi0tVy8tLXZlcmJvc2UzICAgLS0gZGlzcGxheSB0ZXN0IG91dHB1dCBvbiBmYWlsdXJlCi0tZC8tLWRlYnVnICAgICAgLS0gcHJpbnQgdHJhY2ViYWNrIGZvciBmYWlsZWQgdGVzdHMKLS1xLy0tcXVpZXQgICAgICAtLSBubyBvdXRwdXQgdW5sZXNzIG9uZSBvciBtb3JlIHRlc3RzIGZhaWwKLS1vLy0tc2xvdyAgICAgICAtLSBwcmludCB0aGUgc2xvd2VzdCAxMCB0ZXN0cwotICAgLS1oZWFkZXIgICAgIC0tIHByaW50IGhlYWRlciB3aXRoIGludGVycHJldGVyIGluZm8KLQotU2VsZWN0aW5nIHRlc3RzCi0KLS1yLy0tcmFuZG9taXplICAtLSByYW5kb21pemUgdGVzdCBleGVjdXRpb24gb3JkZXIgKHNlZSBiZWxvdykKLSAgIC0tcmFuZHNlZWQgICAtLSBwYXNzIGEgcmFuZG9tIHNlZWQgdG8gcmVwcm9kdWNlIGEgcHJldmlvdXMgcmFuZG9tIHJ1bgotLWYvLS1mcm9tZmlsZSAgIC0tIHJlYWQgbmFtZXMgb2YgdGVzdHMgdG8gcnVuIGZyb20gYSBmaWxlIChzZWUgYmVsb3cpCi0teC8tLWV4Y2x1ZGUgICAgLS0gYXJndW1lbnRzIGFyZSB0ZXN0cyB0byAqZXhjbHVkZSoKLS1zLy0tc2luZ2xlICAgICAtLSBzaW5nbGUgc3RlcCB0aHJvdWdoIGEgc2V0IG9mIHRlc3RzIChzZWUgYmVsb3cpCi0tbS8tLW1hdGNoIFBBVCAgLS0gbWF0Y2ggdGVzdCBjYXNlcyBhbmQgbWV0aG9kcyB3aXRoIGdsb2IgcGF0dGVybiBQQVQKLS1HLy0tZmFpbGZhc3QgICAtLSBmYWlsIGFzIHNvb24gYXMgYSB0ZXN0IGZhaWxzIChvbmx5IHdpdGggLXYgb3IgLVcpCi0tdS8tLXVzZSBSRVMxLFJFUzIsLi4uCi0gICAgICAgICAgICAgICAgLS0gc3BlY2lmeSB3aGljaCBzcGVjaWFsIHJlc291cmNlIGludGVuc2l2ZSB0ZXN0cyB0byBydW4KLS1NLy0tbWVtbGltaXQgTElNSVQKLSAgICAgICAgICAgICAgICAtLSBydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzCi0gICAtLXRlc3RkaXIgRElSCi0gICAgICAgICAgICAgICAgLS0gZXhlY3V0ZSB0ZXN0IGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IChpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgb2YgdGhlIFB5dGhvbiBzdGRsaWIgdGVzdCBzdWl0ZSkKLQotU3BlY2lhbCBydW5zCi0KLS1sLy0tZmluZGxlYWtzICAtLSBpZiBHQyBpcyBhdmFpbGFibGUgZGV0ZWN0IHRlc3RzIHRoYXQgbGVhayBtZW1vcnkKLS1MLy0tcnVubGVha3MgICAtLSBydW4gdGhlIGxlYWtzKDEpIGNvbW1hbmQganVzdCBiZWZvcmUgZXhpdAotLVIvLS1odW50cmxlYWtzIFJVTkNPVU5UUwotICAgICAgICAgICAgICAgIC0tIHNlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgdi4gc2xvdykKLS1qLy0tbXVsdGlwcm9jZXNzIFBST0NFU1NFUwotICAgICAgICAgICAgICAgIC0tIHJ1biBQUk9DRVNTRVMgcHJvY2Vzc2VzIGF0IG9uY2UKLS1ULy0tY292ZXJhZ2UgICAtLSB0dXJuIG9uIGNvZGUgY292ZXJhZ2UgdHJhY2luZyB1c2luZyB0aGUgdHJhY2UgbW9kdWxlCi0tRC8tLWNvdmVyZGlyIERJUkVDVE9SWQotICAgICAgICAgICAgICAgIC0tIERpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0Ci0tTi8tLW5vY292ZXJkaXIgLS0gUHV0IGNvdmVyYWdlIGZpbGVzIGFsb25nc2lkZSBtb2R1bGVzCi0tdC8tLXRocmVzaG9sZCBUSFJFU0hPTEQKLSAgICAgICAgICAgICAgICAtLSBjYWxsIGdjLnNldF90aHJlc2hvbGQoVEhSRVNIT0xEKQotLW4vLS1ub3dpbmRvd3MgIC0tIHN1cHByZXNzIGVycm9yIG1lc3NhZ2UgYm94ZXMgb24gV2luZG93cwotLUYvLS1mb3JldmVyICAgIC0tIHJ1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gZXJyb3IgaGFwcGVucwotCi0KLUFkZGl0aW9uYWwgT3B0aW9uIERldGFpbHM6CitFUElMT0cgPSAiIiJcCitBZGRpdGlvbmFsIG9wdGlvbiBkZXRhaWxzOgogCiAtciByYW5kb21pemVzIHRlc3QgZXhlY3V0aW9uIG9yZGVyLiBZb3UgY2FuIHVzZSAtLXJhbmRzZWVkPWludCB0byBwcm92aWRlIGEKIGludCBzZWVkIHZhbHVlIGZvciB0aGUgcmFuZG9taXplcjsgdGhpcyBpcyB1c2VmdWwgZm9yIHJlcHJvZHVjaW5nIHRyb3VibGVzb21lCkBAIC0xNjgsMTEgKzEyMiwxMiBAQAogIyBXZSBpbXBvcnQgaW1wb3J0bGliICpBU0FQKiBpbiBvcmRlciB0byB0ZXN0ICMxNTM4NgogaW1wb3J0IGltcG9ydGxpYgogCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IGZhdWx0aGFuZGxlcgotaW1wb3J0IGdldG9wdAogaW1wb3J0IGlvCiBpbXBvcnQganNvbgoraW1wb3J0IGxvY2FsZQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3JtCkBAIC0xOTQsNyArMTQ5LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiB0cnk6Ci0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzCisgICAgaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcsIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gTm9uZQogCkBAIC0yNDYsMjAgKzIwMSwyNjIgQEAKIFJFU09VUkNFX05BTUVTID0gKCdhdWRpbycsICdjdXJzZXMnLCAnbGFyZ2VmaWxlJywgJ25ldHdvcmsnLAogICAgICAgICAgICAgICAgICAgJ2RlY2ltYWwnLCAnY3B1JywgJ3N1YnByb2Nlc3MnLCAndXJsZmV0Y2gnLCAnZ3VpJykKIAotVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkpCisjIFdoZW4gdGVzdHMgYXJlIHJ1biBmcm9tIHRoZSBQeXRob24gYnVpbGQgZGlyZWN0b3J5LCBpdCBpcyBiZXN0IHByYWN0aWNlCisjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBUaGlzIGVhc2VzIHRoZSBjbGVhbnVwIG9mIGxlZnRvdmVyCisjIGZpbGVzIHVzaW5nIHRoZSAibWFrZSBkaXN0Y2xlYW4iIGNvbW1hbmQuCitpZiBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCk6CisgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQorZWxzZToKKyAgICBURU1QRElSID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCitURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCiAKLWRlZiB1c2FnZShtc2cpOgotICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQotICAgIHByaW50KCJVc2UgLS1oZWxwIGZvciB1c2FnZSIsIGZpbGU9c3lzLnN0ZGVycikKLSAgICBzeXMuZXhpdCgyKQorY2xhc3MgX0FyZ1BhcnNlcihhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcik6CiAKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHN1cGVyKCkuZXJyb3IobWVzc2FnZSArICJcblBhc3MgLWggb3IgLS1oZWxwIGZvciBjb21wbGV0ZSBoZWxwLiIpCiAKLWRlZiBtYWluKHRlc3RzPU5vbmUsIHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKK2RlZiBfY3JlYXRlX3BhcnNlcigpOgorICAgICMgU2V0IHByb2cgdG8gcHJldmVudCB0aGUgdW5pbmZvcm1hdGl2ZSAiX19tYWluX18ucHkiIGZyb20gZGlzcGxheWluZyBpbgorICAgICMgZXJyb3IgbWVzc2FnZXMgd2hlbiB1c2luZyAicHl0aG9uIC1tIHRlc3QgLi4uIi4KKyAgICBwYXJzZXIgPSBfQXJnUGFyc2VyKHByb2c9J3JlZ3J0ZXN0LnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlPVVTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249REVTQ1JJUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9RVBJTE9HLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2hlbHA9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyKQorCisgICAgIyBBcmd1bWVudHMgd2l0aCB0aGlzIGNsYXVzZSBhZGRlZCB0byBpdHMgaGVscCBhcmUgZGVzY3JpYmVkIGZ1cnRoZXIgaW4KKyAgICAjIHRoZSBlcGlsb2cncyAiQWRkaXRpb25hbCBvcHRpb24gZGV0YWlscyIgc2VjdGlvbi4KKyAgICBtb3JlX2RldGFpbHMgPSAnICBTZWUgdGhlIHNlY3Rpb24gYXQgYm90dG9tIGZvciBtb3JlIGRldGFpbHMuJworCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdHZW5lcmFsIG9wdGlvbnMnKQorICAgICMgV2UgYWRkIGhlbHAgZXhwbGljaXRseSB0byBjb250cm9sIHdoYXQgYXJndW1lbnQgZ3JvdXAgaXQgcmVuZGVycyB1bmRlci4KKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Nob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS10aW1lb3V0JywgbWV0YXZhcj0nVElNRU9VVCcsIHR5cGU9ZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vcmUgdGhhbiBUSU1FT1VUIHNlY29uZHM7IGRpc2FibGVkIGlmIFRJTUVPVVQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMgbmVnYXRpdmUgb3IgZXF1YWxzIHRvIHplcm8nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS13YWl0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nd2FpdCBmb3IgdXNlciBpbnB1dCwgZS5nLiwgYWxsb3cgYSBkZWJ1Z2dlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGJlIGF0dGFjaGVkJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc2xhdmVhcmdzJywgbWV0YXZhcj0nQVJHUycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctUycsICctLXN0YXJ0JywgbWV0YXZhcj0nU1RBUlQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0aGUgbmFtZSBvZiB0aGUgdGVzdCBhdCB3aGljaCB0byBzdGFydC4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ1ZlcmJvc2l0eScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXcnLCAnLS12ZXJib3NlMicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1XJywgJy0tdmVyYm9zZTMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J25vIG91dHB1dCB1bmxlc3Mgb25lIG9yIG1vcmUgdGVzdHMgZmFpbCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbycsICctLXNsb3cnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdwcmludF9zbG93JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgdGhlIHNsb3dlc3QgMTAgdGVzdHMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1oZWFkZXInLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwcmludCBoZWFkZXIgd2l0aCBpbnRlcnByZXRlciBpbmZvJykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnU2VsZWN0aW5nIHRlc3RzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmFuZG9taXplJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncmFuZG9taXplIHRlc3QgZXhlY3V0aW9uIG9yZGVyLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXJhbmRzZWVkJywgbWV0YXZhcj0nU0VFRCcsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3JhbmRvbV9zZWVkJywgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Bhc3MgYSByYW5kb20gc2VlZCB0byByZXByb2R1Y2UgYSBwcmV2aW91cyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JhbmRvbSBydW4nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mcm9tZmlsZScsIG1ldGF2YXI9J0ZJTEUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZWFkIG5hbWVzIG9mIHRlc3RzIHRvIHJ1biBmcm9tIGEgZmlsZS4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCcteCcsICctLWV4Y2x1ZGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhcmd1bWVudHMgYXJlIHRlc3RzIHRvICpleGNsdWRlKicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcycsICctLXNpbmdsZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NpbmdsZSBzdGVwIHRocm91Z2ggYSBzZXQgb2YgdGVzdHMuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tYXRjaCcsIG1ldGF2YXI9J1BBVCcsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J21hdGNoX3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbWF0Y2ggdGVzdCBjYXNlcyBhbmQgbWV0aG9kcyB3aXRoIGdsb2IgcGF0dGVybiBQQVQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUcnLCAnLS1mYWlsZmFzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZhaWwgYXMgc29vbiBhcyBhIHRlc3QgZmFpbHMgKG9ubHkgd2l0aCAtdiBvciAtVyknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11c2UnLCBtZXRhdmFyPSdSRVMxLFJFUzIsLi4uJywKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCB0eXBlPXJlc291cmNlc19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzcGVjaWZ5IHdoaWNoIHNwZWNpYWwgcmVzb3VyY2UgaW50ZW5zaXZlIHRlc3RzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gcnVuLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctTScsICctLW1lbWxpbWl0JywgbWV0YXZhcj0nTElNSVQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzLicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tdGVzdGRpcicsIG1ldGF2YXI9J0RJUicsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9cmVsYXRpdmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2V4ZWN1dGUgdGVzdCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhpbnN0ZWFkIG9mIHRoZSBQeXRob24gc3RkbGliIHRlc3Qgc3VpdGUpJykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnU3BlY2lhbCBydW5zJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1sJywgJy0tZmluZGxlYWtzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0naWYgR0MgaXMgYXZhaWxhYmxlIGRldGVjdCB0ZXN0cyB0aGF0IGxlYWsgbWVtb3J5JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1MJywgJy0tcnVubGVha3MnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdGhlIGxlYWtzKDEpIGNvbW1hbmQganVzdCBiZWZvcmUgZXhpdC4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctUicsICctLWh1bnRybGVha3MnLCBtZXRhdmFyPSdSVU5DT1VOVFMnLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJ5IHNsb3cpLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctaicsICctLW11bHRpcHJvY2VzcycsIG1ldGF2YXI9J1BST0NFU1NFUycsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VzZV9tcCcsIHR5cGU9aW50LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gUFJPQ0VTU0VTIHByb2Nlc3NlcyBhdCBvbmNlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1UJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd0cmFjZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3R1cm4gb24gY29kZSBjb3ZlcmFnZSB0cmFjaW5nIHVzaW5nIHRoZSB0cmFjZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZHVsZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctRCcsICctLWNvdmVyZGlyJywgbWV0YXZhcj0nRElSJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1yZWxhdGl2ZV9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLU4nLCAnLS1ub2NvdmVyZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PU5vbmUsIGRlc3Q9J2NvdmVyZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHV0IGNvdmVyYWdlIGZpbGVzIGFsb25nc2lkZSBtb2R1bGVzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy10JywgJy0tdGhyZXNob2xkJywgbWV0YXZhcj0nVEhSRVNIT0xEJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2NhbGwgZ2Muc2V0X3RocmVzaG9sZChUSFJFU0hPTEQpJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1uJywgJy0tbm93aW5kb3dzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBib3hlcyBvbiBXaW5kb3dzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1GJywgJy0tZm9yZXZlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvciBoYXBwZW5zJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2FyZ3MnLCBuYXJncz1hcmdwYXJzZS5SRU1BSU5ERVIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorCisgICAgcmV0dXJuIHBhcnNlcgorCitkZWYgcmVsYXRpdmVfZmlsZW5hbWUoc3RyaW5nKToKKyAgICAjIENXRCBpcyByZXBsYWNlZCB3aXRoIGEgdGVtcG9yYXJ5IGRpciBiZWZvcmUgY2FsbGluZyBtYWluKCksIHNvIHdlCisgICAgIyBqb2luIGl0IHdpdGggdGhlIHNhdmVkIENXRCBzbyBpdCBlbmRzIHVwIHdoZXJlIHRoZSB1c2VyIGV4cGVjdHMuCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBzdHJpbmcpCisKK2RlZiBodW50cmxlYWtzKHN0cmluZyk6CisgICAgYXJncyA9IHN0cmluZy5zcGxpdCgnOicpCisgICAgaWYgbGVuKGFyZ3MpIG5vdCBpbiAoMiwgMyk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKAorICAgICAgICAgICAgJ25lZWRzIDIgb3IgMyBjb2xvbi1zZXBhcmF0ZWQgYXJndW1lbnRzJykKKyAgICBud2FybXVwID0gaW50KGFyZ3NbMF0pIGlmIGFyZ3NbMF0gZWxzZSA1CisgICAgbnRyYWNrZWQgPSBpbnQoYXJnc1sxXSkgaWYgYXJnc1sxXSBlbHNlIDQKKyAgICBmbmFtZSA9IGFyZ3NbMl0gaWYgbGVuKGFyZ3MpID4gMiBhbmQgYXJnc1syXSBlbHNlICdyZWZsb2cudHh0JworICAgIHJldHVybiBud2FybXVwLCBudHJhY2tlZCwgZm5hbWUKKworZGVmIHJlc291cmNlc19saXN0KHN0cmluZyk6CisgICAgdSA9IFt4Lmxvd2VyKCkgZm9yIHggaW4gc3RyaW5nLnNwbGl0KCcsJyldCisgICAgZm9yIHIgaW4gdToKKyAgICAgICAgaWYgciA9PSAnYWxsJyBvciByID09ICdub25lJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHJbMF0gPT0gJy0nOgorICAgICAgICAgICAgciA9IHJbMTpdCisgICAgICAgIGlmIHIgbm90IGluIFJFU09VUkNFX05BTUVTOgorICAgICAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ2ludmFsaWQgcmVzb3VyY2U6ICcgKyByKQorICAgIHJldHVybiB1CisKK2RlZiBfcGFyc2VfYXJncyhhcmdzLCAqKmt3YXJncyk6CisgICAgIyBEZWZhdWx0cworICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKICAgICAgICAgIGV4Y2x1ZGU9RmFsc2UsIHNpbmdsZT1GYWxzZSwgcmFuZG9taXplPUZhbHNlLCBmcm9tZmlsZT1Ob25lLAogICAgICAgICAgZmluZGxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsIHRyYWNlPUZhbHNlLCBjb3ZlcmRpcj0nY292ZXJhZ2UnLAogICAgICAgICAgcnVubGVha3M9RmFsc2UsIGh1bnRybGVha3M9RmFsc2UsIHZlcmJvc2UyPUZhbHNlLCBwcmludF9zbG93PUZhbHNlLAogICAgICAgICAgcmFuZG9tX3NlZWQ9Tm9uZSwgdXNlX21wPU5vbmUsIHZlcmJvc2UzPUZhbHNlLCBmb3JldmVyPUZhbHNlLAotICAgICAgICAgaGVhZGVyPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSk6CisgICAgICAgICBoZWFkZXI9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lKQorICAgIGZvciBrLCB2IGluIGt3YXJncy5pdGVtcygpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihucywgayk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVyIGlzIGFuIGludmFsaWQga2V5d29yZCBhcmd1bWVudCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB0aGlzIGZ1bmN0aW9uJyAlIGspCisgICAgICAgIHNldGF0dHIobnMsIGssIHYpCisgICAgaWYgbnMudXNlX3Jlc291cmNlcyBpcyBOb25lOgorICAgICAgICBucy51c2VfcmVzb3VyY2VzID0gW10KKworICAgIHBhcnNlciA9IF9jcmVhdGVfcGFyc2VyKCkKKyAgICBwYXJzZXIucGFyc2VfYXJncyhhcmdzPWFyZ3MsIG5hbWVzcGFjZT1ucykKKworICAgIGlmIG5zLnNpbmdsZSBhbmQgbnMuZnJvbWZpbGU6CisgICAgICAgIHBhcnNlci5lcnJvcigiLXMgYW5kIC1mIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMudXNlX21wIGFuZCBucy50cmFjZToKKyAgICAgICAgcGFyc2VyLmVycm9yKCItVCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLmZpbmRsZWFrczoKKyAgICAgICAgcGFyc2VyLmVycm9yKCItbCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLm1lbWxpbWl0OgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1NIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLmZhaWxmYXN0IGFuZCBub3QgKG5zLnZlcmJvc2Ugb3IgbnMudmVyYm9zZTMpOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1HLy0tZmFpbGZhc3QgbmVlZHMgZWl0aGVyIC12IG9yIC1XIikKKworICAgIGlmIG5zLnF1aWV0OgorICAgICAgICBucy52ZXJib3NlID0gMAorICAgIGlmIG5zLnRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnZHVtcF90cmFjZWJhY2tfbGF0ZXInKToKKyAgICAgICAgICAgIGlmIG5zLnRpbWVvdXQgPD0gMDoKKyAgICAgICAgICAgICAgICBucy50aW1lb3V0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IFRoZSB0aW1lb3V0IG9wdGlvbiByZXF1aXJlcyAiCisgICAgICAgICAgICAgICAgICAiZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyIikKKyAgICAgICAgICAgIG5zLnRpbWVvdXQgPSBOb25lCisgICAgaWYgbnMudXNlX21wIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBucy51c2VfbXAgPD0gMDoKKyAgICAgICAgICAgICMgVXNlIGFsbCBjb3JlcyArIGV4dHJhcyBmb3IgdGVzdHMgdGhhdCBsaWtlIHRvIHNsZWVwCisgICAgICAgICAgICBucy51c2VfbXAgPSAyICsgKG9zLmNwdV9jb3VudCgpIG9yIDEpCisgICAgICAgIGlmIG5zLnVzZV9tcCA9PSAxOgorICAgICAgICAgICAgbnMudXNlX21wID0gTm9uZQorICAgIGlmIG5zLnVzZToKKyAgICAgICAgZm9yIGEgaW4gbnMudXNlOgorICAgICAgICAgICAgZm9yIHIgaW4gYToKKyAgICAgICAgICAgICAgICBpZiByID09ICdhbGwnOgorICAgICAgICAgICAgICAgICAgICBucy51c2VfcmVzb3VyY2VzWzpdID0gUkVTT1VSQ0VfTkFNRVMKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiByID09ICdub25lJzoKKyAgICAgICAgICAgICAgICAgICAgZGVsIG5zLnVzZV9yZXNvdXJjZXNbOl0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZW1vdmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIHJbMF0gPT0gJy0nOgorICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHIgPSByWzE6XQorICAgICAgICAgICAgICAgIGlmIHJlbW92ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgciBpbiBucy51c2VfcmVzb3VyY2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgbnMudXNlX3Jlc291cmNlcy5yZW1vdmUocikKKyAgICAgICAgICAgICAgICBlbGlmIHIgbm90IGluIG5zLnVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICAgICAgICAgIG5zLnVzZV9yZXNvdXJjZXMuYXBwZW5kKHIpCisgICAgaWYgbnMucmFuZG9tX3NlZWQgaXMgbm90IE5vbmU6CisgICAgICAgIG5zLnJhbmRvbWl6ZSA9IFRydWUKKworICAgIHJldHVybiBucworCisKK2RlZiBydW5fdGVzdF9pbl9zdWJwcm9jZXNzKHRlc3RuYW1lLCBucyk6CisgICAgIiIiUnVuIHRoZSBnaXZlbiB0ZXN0IGluIGEgc3VicHJvY2VzcyB3aXRoIC0tc2xhdmVhcmdzLgorCisgICAgbnMgaXMgdGhlIG9wdGlvbiBOYW1lc3BhY2UgcGFyc2VkIGZyb20gY29tbWFuZC1saW5lIGFyZ3VtZW50cy4gcmVncnRlc3QKKyAgICBpcyBpbnZva2VkIGluIGEgc3VicHJvY2VzcyB3aXRoIHRoZSAtLXNsYXZlYXJncyBhcmd1bWVudDsgd2hlbiB0aGUKKyAgICBzdWJwcm9jZXNzIGV4aXRzLCBpdHMgcmV0dXJuIGNvZGUsIHN0ZG91dCBhbmQgc3RkZXJyIGFyZSByZXR1cm5lZCBhcyBhCisgICAgMy10dXBsZS4KKyAgICAiIiIKKyAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQSVBFCisgICAgYmFzZV9jbWQgPSAoW3N5cy5leGVjdXRhYmxlXSArIHN1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkgKworICAgICAgICAgICAgICAgIFsnLVgnLCAnZmF1bHRoYW5kbGVyJywgJy1tJywgJ3Rlc3QucmVncnRlc3QnXSkKKworICAgIHNsYXZlYXJncyA9ICgKKyAgICAgICAgICAgICh0ZXN0bmFtZSwgbnMudmVyYm9zZSwgbnMucXVpZXQpLAorICAgICAgICAgICAgZGljdChodW50cmxlYWtzPW5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXM9bnMudXNlX3Jlc291cmNlcywKKyAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9bnMudmVyYm9zZTMsCisgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCwgZmFpbGZhc3Q9bnMuZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKSkKKyAgICAjIFJ1bm5pbmcgdGhlIGNoaWxkIGZyb20gdGhlIHNhbWUgd29ya2luZyBkaXJlY3RvcnkgYXMgcmVncnRlc3QncyBvcmlnaW5hbAorICAgICMgaW52b2NhdGlvbiBlbnN1cmVzIHRoYXQgVEVNUERJUiBmb3IgdGhlIGNoaWxkIGlzIHRoZSBzYW1lIHdoZW4KKyAgICAjIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKSBpcyB0cnVlLiBTZWUgaXNzdWUgMTUzMDAuCisgICAgcG9wZW4gPSBQb3BlbihiYXNlX2NtZCArIFsnLS1zbGF2ZWFyZ3MnLCBqc29uLmR1bXBzKHNsYXZlYXJncyldLAorICAgICAgICAgICAgICAgICAgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFLAorICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCisgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9KG9zLm5hbWUgIT0gJ250JyksCisgICAgICAgICAgICAgICAgICBjd2Q9c3VwcG9ydC5TQVZFRENXRCkKKyAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICByZXRjb2RlID0gcG9wZW4ud2FpdCgpCisgICAgcmV0dXJuIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyCisKKworZGVmIG1haW4odGVzdHM9Tm9uZSwgKiprd2FyZ3MpOgogICAgICIiIkV4ZWN1dGUgYSB0ZXN0IHN1aXRlLgogCiAgICAgVGhpcyBhbHNvIHBhcnNlcyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgbW9kaWZpZXMgaXRzIGJlaGF2aW9yCkBAIC0yODIsNyArNDc5LDYgQEAKICAgICBkaXJlY3RseSB0byBzZXQgdGhlIHZhbHVlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHNldCBieSBmbGFncwogICAgIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgIiIiCi0KICAgICAjIERpc3BsYXkgdGhlIFB5dGhvbiB0cmFjZWJhY2sgb24gZmF0YWwgZXJyb3JzIChlLmcuIHNlZ2ZhdWx0KQogICAgIGZhdWx0aGFuZGxlci5lbmFibGUoYWxsX3RocmVhZHM9VHJ1ZSkKIApAQCAtMjk4LDE4NyArNDk0LDUxIEBACiAgICAgcmVwbGFjZV9zdGRvdXQoKQogCiAgICAgc3VwcG9ydC5yZWNvcmRfb3JpZ2luYWxfc3Rkb3V0KHN5cy5zdGRvdXQpCi0gICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdodnF4c29TOnJmOmx1OnQ6VEQ6TkxSOkZkd1dNOm5qOkdtOicsCi0gICAgICAgICAgICBbJ2hlbHAnLCAndmVyYm9zZScsICd2ZXJib3NlMicsICd2ZXJib3NlMycsICdxdWlldCcsCi0gICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAnc2luZ2xlJywgJ3Nsb3cnLCAncmFuZG9taXplJywgJ2Zyb21maWxlPScsICdmaW5kbGVha3MnLAotICAgICAgICAgICAgICd1c2U9JywgJ3RocmVzaG9sZD0nLCAnY292ZXJkaXI9JywgJ25vY292ZXJkaXInLAotICAgICAgICAgICAgICdydW5sZWFrcycsICdodW50cmxlYWtzPScsICdtZW1saW1pdD0nLCAncmFuZHNlZWQ9JywKLSAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzPScsICdjb3ZlcmFnZScsICdzbGF2ZWFyZ3M9JywgJ2ZvcmV2ZXInLCAnZGVidWcnLAotICAgICAgICAgICAgICdzdGFydD0nLCAnbm93aW5kb3dzJywgJ2hlYWRlcicsICd0ZXN0ZGlyPScsICd0aW1lb3V0PScsICd3YWl0JywKLSAgICAgICAgICAgICAnZmFpbGZhc3QnLCAnbWF0Y2g9J10pCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHVzYWdlKG1zZykKIAotICAgICMgRGVmYXVsdHMKLSAgICBpZiByYW5kb21fc2VlZCBpcyBOb25lOgotICAgICAgICByYW5kb21fc2VlZCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwMDApCi0gICAgaWYgdXNlX3Jlc291cmNlcyBpcyBOb25lOgotICAgICAgICB1c2VfcmVzb3VyY2VzID0gW10KLSAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgc3RhcnQgPSBOb25lCi0gICAgdGltZW91dCA9IE5vbmUKLSAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICBpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6Ci0gICAgICAgICAgICBwcmludChfX2RvY19fKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgbyBpbiAoJy12JywgJy0tdmVyYm9zZScpOgotICAgICAgICAgICAgdmVyYm9zZSArPSAxCi0gICAgICAgIGVsaWYgbyBpbiAoJy13JywgJy0tdmVyYm9zZTInKToKLSAgICAgICAgICAgIHZlcmJvc2UyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctZCcsICctLWRlYnVnJyk6Ci0gICAgICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLVcnLCAnLS12ZXJib3NlMycpOgotICAgICAgICAgICAgdmVyYm9zZTMgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1HJywgJy0tZmFpbGZhc3QnKToKLSAgICAgICAgICAgIGZhaWxmYXN0ID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctcScsICctLXF1aWV0Jyk6Ci0gICAgICAgICAgICBxdWlldCA9IFRydWU7Ci0gICAgICAgICAgICB2ZXJib3NlID0gMAotICAgICAgICBlbGlmIG8gaW4gKCcteCcsICctLWV4Y2x1ZGUnKToKLSAgICAgICAgICAgIGV4Y2x1ZGUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1TJywgJy0tc3RhcnQnKToKLSAgICAgICAgICAgIHN0YXJ0ID0gYQotICAgICAgICBlbGlmIG8gaW4gKCctcycsICctLXNpbmdsZScpOgotICAgICAgICAgICAgc2luZ2xlID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctbycsICctLXNsb3cnKToKLSAgICAgICAgICAgIHByaW50X3Nsb3cgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1yJywgJy0tcmFuZG9taXplJyk6Ci0gICAgICAgICAgICByYW5kb21pemUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyA9PSAnLS1yYW5kc2VlZCc6Ci0gICAgICAgICAgICByYW5kb21pemUgPSBUcnVlCi0gICAgICAgICAgICByYW5kb21fc2VlZCA9IGludChhKQotICAgICAgICBlbGlmIG8gaW4gKCctZicsICctLWZyb21maWxlJyk6Ci0gICAgICAgICAgICBmcm9tZmlsZSA9IGEKLSAgICAgICAgZWxpZiBvIGluICgnLW0nLCAnLS1tYXRjaCcpOgotICAgICAgICAgICAgbWF0Y2hfdGVzdHMgPSBhCi0gICAgICAgIGVsaWYgbyBpbiAoJy1sJywgJy0tZmluZGxlYWtzJyk6Ci0gICAgICAgICAgICBmaW5kbGVha3MgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1MJywgJy0tcnVubGVha3MnKToKLSAgICAgICAgICAgIHJ1bmxlYWtzID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctdCcsICctLXRocmVzaG9sZCcpOgotICAgICAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgICAgICBnYy5zZXRfdGhyZXNob2xkKGludChhKSkKLSAgICAgICAgZWxpZiBvIGluICgnLVQnLCAnLS1jb3ZlcmFnZScpOgotICAgICAgICAgICAgdHJhY2UgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1EJywgJy0tY292ZXJkaXInKToKLSAgICAgICAgICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKLSAgICAgICAgICAgICMgbmVlZCAgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZ29lcyB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgotICAgICAgICAgICAgY292ZXJkaXIgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgYSkKLSAgICAgICAgZWxpZiBvIGluICgnLU4nLCAnLS1ub2NvdmVyZGlyJyk6Ci0gICAgICAgICAgICBjb3ZlcmRpciA9IE5vbmUKLSAgICAgICAgZWxpZiBvIGluICgnLVInLCAnLS1odW50cmxlYWtzJyk6Ci0gICAgICAgICAgICBodW50cmxlYWtzID0gYS5zcGxpdCgnOicpCi0gICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgbm90IGluICgyLCAzKToKLSAgICAgICAgICAgICAgICBwcmludChhLCBodW50cmxlYWtzKQotICAgICAgICAgICAgICAgIHVzYWdlKCctUiB0YWtlcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCi0gICAgICAgICAgICBpZiBub3QgaHVudHJsZWFrc1swXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gNQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gaW50KGh1bnRybGVha3NbMF0pCi0gICAgICAgICAgICBpZiBub3QgaHVudHJsZWFrc1sxXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzFdID0gNAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzFdID0gaW50KGh1bnRybGVha3NbMV0pCi0gICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgPT0gMiBvciBub3QgaHVudHJsZWFrc1syXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzI6XSA9IFsicmVmbG9nLnR4dCJdCi0gICAgICAgICAgICAjIEF2b2lkIGZhbHNlIHBvc2l0aXZlcyBkdWUgdG8gdmFyaW91cyBjYWNoZXMKLSAgICAgICAgICAgICMgZmlsbGluZyBzbG93bHkgd2l0aCByYW5kb20gZGF0YToKLSAgICAgICAgICAgIHdhcm1fY2FjaGVzKCkKLSAgICAgICAgZWxpZiBvIGluICgnLU0nLCAnLS1tZW1saW1pdCcpOgotICAgICAgICAgICAgc3VwcG9ydC5zZXRfbWVtbGltaXQoYSkKLSAgICAgICAgZWxpZiBvIGluICgnLXUnLCAnLS11c2UnKToKLSAgICAgICAgICAgIHUgPSBbeC5sb3dlcigpIGZvciB4IGluIGEuc3BsaXQoJywnKV0KLSAgICAgICAgICAgIGZvciByIGluIHU6Ci0gICAgICAgICAgICAgICAgaWYgciA9PSAnYWxsJzoKLSAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlc1s6XSA9IFJFU09VUkNFX05BTUVTCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgciA9PSAnbm9uZSc6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCB1c2VfcmVzb3VyY2VzWzpdCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgcmVtb3ZlID0gRmFsc2UKLSAgICAgICAgICAgICAgICBpZiByWzBdID09ICctJzoKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICByID0gclsxOl0KLSAgICAgICAgICAgICAgICBpZiByIG5vdCBpbiBSRVNPVVJDRV9OQU1FUzoKLSAgICAgICAgICAgICAgICAgICAgdXNhZ2UoJ0ludmFsaWQgLXUvLS11c2Ugb3B0aW9uOiAnICsgYSkKLSAgICAgICAgICAgICAgICBpZiByZW1vdmU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHIgaW4gdXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMucmVtb3ZlKHIpCi0gICAgICAgICAgICAgICAgZWxpZiByIG5vdCBpbiB1c2VfcmVzb3VyY2VzOgotICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzLmFwcGVuZChyKQotICAgICAgICBlbGlmIG8gaW4gKCctbicsICctLW5vd2luZG93cycpOgotICAgICAgICAgICAgaW1wb3J0IG1zdmNydAotICAgICAgICAgICAgbXN2Y3J0LlNldEVycm9yTW9kZShtc3ZjcnQuU0VNX0ZBSUxDUklUSUNBTEVSUk9SU3wKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0FMSUdOTUVOVEZBVUxURVhDRVBUfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PR1BGQVVMVEVSUk9SQk9YfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PT1BFTkZJTEVFUlJPUkJPWCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICMgcmVsZWFzZSBidWlsZAotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIG0gaW4gW21zdmNydC5DUlRfV0FSTiwgbXN2Y3J0LkNSVF9FUlJPUiwgbXN2Y3J0LkNSVF9BU1NFUlRdOgotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZShtLCBtc3ZjcnQuQ1JUREJHX01PREVfRklMRSkKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydEZpbGUobSwgbXN2Y3J0LkNSVERCR19GSUxFX1NUREVSUikKLSAgICAgICAgZWxpZiBvIGluICgnLUYnLCAnLS1mb3JldmVyJyk6Ci0gICAgICAgICAgICBmb3JldmVyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctaicsICctLW11bHRpcHJvY2VzcycpOgotICAgICAgICAgICAgdXNlX21wID0gaW50KGEpCi0gICAgICAgICAgICBpZiB1c2VfbXAgPD0gMDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgICAgICAgICAgICAgIyBVc2UgYWxsIGNvcmVzICsgZXh0cmFzIGZvciB0ZXN0cyB0aGF0IGxpa2UgdG8gc2xlZXAKLSAgICAgICAgICAgICAgICAgICAgdXNlX21wID0gMiArIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICB1c2VfbXAgPSAzCi0gICAgICAgICAgICBpZiB1c2VfbXAgPT0gMToKLSAgICAgICAgICAgICAgICB1c2VfbXAgPSBOb25lCi0gICAgICAgIGVsaWYgbyA9PSAnLS1oZWFkZXInOgotICAgICAgICAgICAgaGVhZGVyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gPT0gJy0tc2xhdmVhcmdzJzoKLSAgICAgICAgICAgIGFyZ3MsIGt3YXJncyA9IGpzb24ubG9hZHMoYSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgJycKLSAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQ0hJTERfRVJST1IsIHN0cihlKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBwcmludCgpICAgIyBGb3JjZSBhIG5ld2xpbmUgKGp1c3QgaW4gY2FzZSkKLSAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkKLSAgICAgICAgICAgIHN5cy5leGl0KDApCi0gICAgICAgIGVsaWYgbyA9PSAnLS10ZXN0ZGlyJzoKLSAgICAgICAgICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKLSAgICAgICAgICAgICMgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZW5kcyB1cCB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgotICAgICAgICAgICAgdGVzdGRpciA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBhKQotICAgICAgICBlbGlmIG8gPT0gJy0tdGltZW91dCc6Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyk6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGZsb2F0KGEpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgotICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogVGhlIHRpbWVvdXQgb3B0aW9uIHJlcXVpcmVzICIKLSAgICAgICAgICAgICAgICAgICAgICAiZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyIikKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICBlbGlmIG8gPT0gJy0td2FpdCc6Ci0gICAgICAgICAgICBpbnB1dCgiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiIpCisgICAgbnMgPSBfcGFyc2VfYXJncyhzeXMuYXJndlsxOl0sICoqa3dhcmdzKQorCisgICAgaWYgbnMuaHVudHJsZWFrczoKKyAgICAgICAgIyBBdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZHVlIHRvIHZhcmlvdXMgY2FjaGVzCisgICAgICAgICMgZmlsbGluZyBzbG93bHkgd2l0aCByYW5kb20gZGF0YToKKyAgICAgICAgd2FybV9jYWNoZXMoKQorICAgIGlmIG5zLm1lbWxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICBzdXBwb3J0LnNldF9tZW1saW1pdChucy5tZW1saW1pdCkKKyAgICBpZiBucy50aHJlc2hvbGQgaXMgbm90IE5vbmU6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBnYy5zZXRfdGhyZXNob2xkKG5zLnRocmVzaG9sZCkKKyAgICBpZiBucy5ub3dpbmRvd3M6CisgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgbXN2Y3J0LlNldEVycm9yTW9kZShtc3ZjcnQuU0VNX0ZBSUxDUklUSUNBTEVSUk9SU3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PQUxJR05NRU5URkFVTFRFWENFUFR8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0dQRkFVTFRFUlJPUkJPWHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PT1BFTkZJTEVFUlJPUkJPWCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyByZWxlYXNlIGJ1aWxkCisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgoIk5vIGhhbmRsZXIgZm9yIG9wdGlvbiB7fS4gIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyAiCi0gICAgICAgICAgICAgICAgICAgImF0IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcuIikuZm9ybWF0KG8pLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgIGlmIHNpbmdsZSBhbmQgZnJvbWZpbGU6Ci0gICAgICAgIHVzYWdlKCItcyBhbmQgLWYgZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIHRyYWNlOgotICAgICAgICB1c2FnZSgiLVQgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgdXNlX21wIGFuZCBmaW5kbGVha3M6Ci0gICAgICAgIHVzYWdlKCItbCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIHN1cHBvcnQubWF4X21lbXVzZToKLSAgICAgICAgdXNhZ2UoIi1NIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIGZhaWxmYXN0IGFuZCBub3QgKHZlcmJvc2Ugb3IgdmVyYm9zZTMpOgotICAgICAgICB1c2FnZSgiLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVciKQorICAgICAgICAgICAgZm9yIG0gaW4gW21zdmNydC5DUlRfV0FSTiwgbXN2Y3J0LkNSVF9FUlJPUiwgbXN2Y3J0LkNSVF9BU1NFUlRdOgorICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlKG0sIG1zdmNydC5DUlREQkdfTU9ERV9GSUxFKQorICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRGaWxlKG0sIG1zdmNydC5DUlREQkdfRklMRV9TVERFUlIpCisgICAgaWYgbnMud2FpdDoKKyAgICAgICAgaW5wdXQoIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iKQorCisgICAgaWYgbnMuc2xhdmVhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICBhcmdzLCBrd2FyZ3MgPSBqc29uLmxvYWRzKG5zLnNsYXZlYXJncykKKyAgICAgICAgaWYga3dhcmdzLmdldCgnaHVudHJsZWFrcycpOgorICAgICAgICAgICAgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgJycKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgcmVzdWx0ID0gQ0hJTERfRVJST1IsIHN0cihlKQorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgcHJpbnQoKSAgICMgRm9yY2UgYSBuZXdsaW5lIChqdXN0IGluIGNhc2UpCisgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkKKyAgICAgICAgc3lzLmV4aXQoMCkKIAogICAgIGdvb2QgPSBbXQogICAgIGJhZCA9IFtdCkBAIC00ODcsMTIgKzU0NywxMiBAQAogICAgIGVudmlyb25tZW50X2NoYW5nZWQgPSBbXQogICAgIGludGVycnVwdGVkID0gRmFsc2UKIAotICAgIGlmIGZpbmRsZWFrczoKKyAgICBpZiBucy5maW5kbGVha3M6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBnYwogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICBwcmludCgnTm8gR0MgYXZhaWxhYmxlLCBkaXNhYmxpbmcgZmluZGxlYWtzLicpCi0gICAgICAgICAgICBmaW5kbGVha3MgPSBGYWxzZQorICAgICAgICAgICAgbnMuZmluZGxlYWtzID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IHRvIHJlcG9ydCBnYXJiYWdlIHRoYXQgaXMgbm90CiAgICAgICAgICAgICAjIGZyZWVhYmxlIGJ5IHJlZmVyZW5jZSBjb3VudGluZyBhbG9uZS4gIEJ5IGRlZmF1bHQgb25seQpAQCAtNTAwLDQyICs1NjAsNDMgQEAKICAgICAgICAgICAgICNnYy5zZXRfZGVidWcoZ2MuREVCVUdfU0FWRUFMTCkKICAgICAgICAgICAgIGZvdW5kX2dhcmJhZ2UgPSBbXQogCi0gICAgaWYgc2luZ2xlOgorICAgIGlmIG5zLmh1bnRybGVha3M6CisgICAgICAgIHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXAgPSBGYWxzZQorCisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAncHluZXh0dGVzdCcpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InKQotICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RzID0gW25leHRfdGVzdF0KLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICB0ZXN0cyA9IFtuZXh0X3Rlc3RdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgaWYgZnJvbWZpbGU6CisgICAgaWYgbnMuZnJvbWZpbGU6CiAgICAgICAgIHRlc3RzID0gW10KLSAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBmcm9tZmlsZSkpCi0gICAgICAgIGNvdW50X3BhdCA9IHJlLmNvbXBpbGUocidcW1xzKlxkKy9ccypcZCtcXScpCi0gICAgICAgIGZvciBsaW5lIGluIGZwOgotICAgICAgICAgICAgbGluZSA9IGNvdW50X3BhdC5zdWIoJycsIGxpbmUpCi0gICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQotICAgICAgICAgICAgaWYgZ3V0cyBhbmQgbm90IGd1dHNbMF0uc3RhcnRzd2l0aCgnIycpOgotICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChndXRzKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgbnMuZnJvbWZpbGUpKSBhcyBmcDoKKyAgICAgICAgICAgIGNvdW50X3BhdCA9IHJlLmNvbXBpbGUocidcW1xzKlxkKy9ccypcZCtcXScpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICAgICBsaW5lID0gY291bnRfcGF0LnN1YignJywgbGluZSkKKyAgICAgICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQorICAgICAgICAgICAgICAgIGlmIGd1dHMgYW5kIG5vdCBndXRzWzBdLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKGd1dHMpCiAKICAgICAjIFN0cmlwIC5weSBleHRlbnNpb25zLgotICAgIHJlbW92ZXB5KGFyZ3MpCisgICAgcmVtb3ZlcHkobnMuYXJncykKICAgICByZW1vdmVweSh0ZXN0cykKIAogICAgIHN0ZHRlc3RzID0gU1REVEVTVFNbOl0KICAgICBub3R0ZXN0cyA9IE5PVFRFU1RTLmNvcHkoKQotICAgIGlmIGV4Y2x1ZGU6Ci0gICAgICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICBpZiBucy5leGNsdWRlOgorICAgICAgICBmb3IgYXJnIGluIG5zLmFyZ3M6CiAgICAgICAgICAgICBpZiBhcmcgaW4gc3RkdGVzdHM6CiAgICAgICAgICAgICAgICAgc3RkdGVzdHMucmVtb3ZlKGFyZykKICAgICAgICAgICAgIG5vdHRlc3RzLmFkZChhcmcpCi0gICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBucy5hcmdzID0gW10KIAogICAgICMgRm9yIGEgcGFydGlhbCBydW4sIHdlIGRvIG5vdCBuZWVkIHRvIGNsdXR0ZXIgdGhlIG91dHB1dC4KLSAgICBpZiB2ZXJib3NlIG9yIGhlYWRlciBvciBub3QgKHF1aWV0IG9yIHNpbmdsZSBvciB0ZXN0cyBvciBhcmdzKToKKyAgICBpZiBucy52ZXJib3NlIG9yIG5zLmhlYWRlciBvciBub3QgKG5zLnF1aWV0IG9yIG5zLnNpbmdsZSBvciB0ZXN0cyBvciBucy5hcmdzKToKICAgICAgICAgIyBQcmludCBiYXNpYyBwbGF0Zm9ybSBpbmZvcm1hdGlvbgogICAgICAgICBwcmludCgiPT0iLCBwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKSwgKnN5cy52ZXJzaW9uLnNwbGl0KCkpCiAgICAgICAgIHByaW50KCI9PSAgIiwgcGxhdGZvcm0ucGxhdGZvcm0oYWxpYXNlZD1UcnVlKSwKQEAgLTU0NSwzNyArNjA2LDM5IEBACiAKICAgICAjIGlmIHRlc3RkaXIgaXMgc2V0LCB0aGVuIHdlIGFyZSBub3QgcnVubmluZyB0aGUgcHl0aG9uIHRlc3RzIHN1aXRlLCBzbwogICAgICMgZG9uJ3QgYWRkIGRlZmF1bHQgdGVzdHMgdG8gYmUgZXhlY3V0ZWQgb3Igc2tpcHBlZCAocGFzcyBlbXB0eSB2YWx1ZXMpCi0gICAgaWYgdGVzdGRpcjoKLSAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHModGVzdGRpciwgbGlzdCgpLCBzZXQoKSkKKyAgICBpZiBucy50ZXN0ZGlyOgorICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyhucy50ZXN0ZGlyLCBsaXN0KCksIHNldCgpKQogICAgIGVsc2U6Ci0gICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKHRlc3RkaXIsIHN0ZHRlc3RzLCBub3R0ZXN0cykKKyAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHMobnMudGVzdGRpciwgc3RkdGVzdHMsIG5vdHRlc3RzKQogCi0gICAgc2VsZWN0ZWQgPSB0ZXN0cyBvciBhcmdzIG9yIGFsbHRlc3RzCi0gICAgaWYgc2luZ2xlOgorICAgIHNlbGVjdGVkID0gdGVzdHMgb3IgbnMuYXJncyBvciBhbGx0ZXN0cworICAgIGlmIG5zLnNpbmdsZToKICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZFs6MV0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dF9zaW5nbGVfdGVzdCA9IGFsbHRlc3RzW2FsbHRlc3RzLmluZGV4KHNlbGVjdGVkWzBdKSsxXQogICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgIG5leHRfc2luZ2xlX3Rlc3QgPSBOb25lCiAgICAgIyBSZW1vdmUgYWxsIHRoZSBzZWxlY3RlZCB0ZXN0cyB0aGF0IHByZWNlZGUgc3RhcnQgaWYgaXQncyBzZXQuCi0gICAgaWYgc3RhcnQ6CisgICAgaWYgbnMuc3RhcnQ6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzZWxlY3RlZFs6c2VsZWN0ZWQuaW5kZXgoc3RhcnQpXQorICAgICAgICAgICAgZGVsIHNlbGVjdGVkWzpzZWxlY3RlZC5pbmRleChucy5zdGFydCldCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgc3RhcnRpbmcgdGVzdCAoJXMpLCB1c2luZyBhbGwgdGVzdHMiICUgc3RhcnQpCi0gICAgaWYgcmFuZG9taXplOgotICAgICAgICByYW5kb20uc2VlZChyYW5kb21fc2VlZCkKLSAgICAgICAgcHJpbnQoIlVzaW5nIHJhbmRvbSBzZWVkIiwgcmFuZG9tX3NlZWQpCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBzdGFydGluZyB0ZXN0ICglcyksIHVzaW5nIGFsbCB0ZXN0cyIgJSBucy5zdGFydCkKKyAgICBpZiBucy5yYW5kb21pemU6CisgICAgICAgIGlmIG5zLnJhbmRvbV9zZWVkIGlzIE5vbmU6CisgICAgICAgICAgICBucy5yYW5kb21fc2VlZCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwMDApCisgICAgICAgIHJhbmRvbS5zZWVkKG5zLnJhbmRvbV9zZWVkKQorICAgICAgICBwcmludCgiVXNpbmcgcmFuZG9tIHNlZWQiLCBucy5yYW5kb21fc2VlZCkKICAgICAgICAgcmFuZG9tLnNodWZmbGUoc2VsZWN0ZWQpCi0gICAgaWYgdHJhY2U6CisgICAgaWYgbnMudHJhY2U6CiAgICAgICAgIGltcG9ydCB0cmFjZSwgdGVtcGZpbGUKICAgICAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLmJhc2VfcHJlZml4LCBzeXMuYmFzZV9leGVjX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGZpbGUuZ2V0dGVtcGRpcigpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9RmFsc2UsIGNvdW50PVRydWUpCiAKICAgICB0ZXN0X3RpbWVzID0gW10KLSAgICBzdXBwb3J0LnZlcmJvc2UgPSB2ZXJib3NlICAgICAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKLSAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSB1c2VfcmVzb3VyY2VzCisgICAgc3VwcG9ydC52ZXJib3NlID0gbnMudmVyYm9zZSAgICAgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0CisgICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gbnMudXNlX3Jlc291cmNlcwogICAgIHNhdmVfbW9kdWxlcyA9IHN5cy5tb2R1bGVzLmtleXMoKQogCiAgICAgZGVmIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCk6CkBAIC01OTMsNyArNjU2LDcgQEAKICAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHRlc3QpCiAgICAgICAgICAgICByZXNvdXJjZV9kZW5pZWRzLmFwcGVuZCh0ZXN0KQogCi0gICAgaWYgZm9yZXZlcjoKKyAgICBpZiBucy5mb3JldmVyOgogICAgICAgICBkZWYgdGVzdF9mb3JldmVyKHRlc3RzPWxpc3Qoc2VsZWN0ZWQpKToKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CkBAIC02MDgsMTkgKzY3MSwxNiBAQAogICAgICAgICB0ZXN0X2NvdW50ID0gJy97fScuZm9ybWF0KGxlbihzZWxlY3RlZCkpCiAgICAgICAgIHRlc3RfY291bnRfd2lkdGggPSBsZW4odGVzdF9jb3VudCkgLSAxCiAKLSAgICBpZiB1c2VfbXA6CisgICAgaWYgbnMudXNlX21wOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJNdWx0aXByb2Nlc3Mgb3B0aW9uIHJlcXVpcmVzIHRocmVhZCBzdXBwb3J0IikKICAgICAgICAgICAgIHN5cy5leGl0KDIpCiAgICAgICAgIGZyb20gcXVldWUgaW1wb3J0IFF1ZXVlCi0gICAgICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKLSAgICAgICAgZGVidWdfb3V0cHV0X3BhdCA9IHJlLmNvbXBpbGUociJcW1xkKyByZWZzXF0kIikKKyAgICAgICAgZGVidWdfb3V0cHV0X3BhdCA9IHJlLmNvbXBpbGUociJcW1xkKyByZWZzLCBcZCsgYmxvY2tzXF0kIikKICAgICAgICAgb3V0cHV0ID0gUXVldWUoKQogICAgICAgICBwZW5kaW5nID0gTXVsdGlwcm9jZXNzVGVzdHModGVzdHMpCi0gICAgICAgIG9wdF9hcmdzID0gc3VwcG9ydC5hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQotICAgICAgICBiYXNlX2NtZCA9IFtzeXMuZXhlY3V0YWJsZV0gKyBvcHRfYXJncyArIFsnLW0nLCAndGVzdC5yZWdydGVzdCddCiAgICAgICAgIGRlZiB3b3JrKCk6CiAgICAgICAgICAgICAjIEEgd29ya2VyIHRocmVhZC4KICAgICAgICAgICAgIHRyeToKQEAgLTYzMCwyNCArNjkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICBhcmdzX3R1cGxlID0gKAotICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3QsIHZlcmJvc2UsIHF1aWV0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QoaHVudHJsZWFrcz1odW50cmxlYWtzLCB1c2VfcmVzb3VyY2VzPXVzZV9yZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPWRlYnVnLCBvdXRwdXRfb25fZmFpbHVyZT12ZXJib3NlMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD10aW1lb3V0LCBmYWlsZmFzdD1mYWlsZmFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bWF0Y2hfdGVzdHMpCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgIyAtRSBpcyBuZWVkZWQgYnkgc29tZSB0ZXN0cywgZS5nLiB0ZXN0X2ltcG9ydAotICAgICAgICAgICAgICAgICAgICAjIFJ1bm5pbmcgdGhlIGNoaWxkIGZyb20gdGhlIHNhbWUgd29ya2luZyBkaXJlY3RvcnkgZW5zdXJlcwotICAgICAgICAgICAgICAgICAgICAjIHRoYXQgVEVNUERJUiBmb3IgdGhlIGNoaWxkIGlzIHRoZSBzYW1lIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgIyBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCkgaXMgdHJ1ZS4gU2VlIGlzc3VlIDE1MzAwLgotICAgICAgICAgICAgICAgICAgICBwb3BlbiA9IFBvcGVuKGJhc2VfY21kICsgWyctLXNsYXZlYXJncycsIGpzb24uZHVtcHMoYXJnc190dXBsZSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9KG9zLm5hbWUgIT0gJ250JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1zdXBwb3J0LlNBVkVEQ1dEKQotICAgICAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgcmV0Y29kZSA9IHBvcGVuLndhaXQoKQorICAgICAgICAgICAgICAgICAgICByZXRjb2RlLCBzdGRvdXQsIHN0ZGVyciA9IHJ1bl90ZXN0X2luX3N1YnByb2Nlc3ModGVzdCwgbnMpCiAgICAgICAgICAgICAgICAgICAgICMgU3RyaXAgbGFzdCByZWZjb3VudCBvdXRwdXQgbGluZSBpZiBpdCBleGlzdHMsIHNpbmNlIGl0CiAgICAgICAgICAgICAgICAgICAgICMgY29tZXMgZnJvbSB0aGUgc2h1dGRvd24gb2YgdGhlIGludGVycHJldGVyIGluIHRoZSBzdWJjb21tYW5kLgogICAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBkZWJ1Z19vdXRwdXRfcGF0LnN1YigiIiwgc3RkZXJyKQpAQCAtNjY0LDE5ICs3MDcsMTkgQEAKICAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHdvcmtlcnMgPSBbVGhyZWFkKHRhcmdldD13b3JrKSBmb3IgaSBpbiByYW5nZSh1c2VfbXApXQorICAgICAgICB3b3JrZXJzID0gW1RocmVhZCh0YXJnZXQ9d29yaykgZm9yIGkgaW4gcmFuZ2UobnMudXNlX21wKV0KICAgICAgICAgZm9yIHdvcmtlciBpbiB3b3JrZXJzOgogICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKICAgICAgICAgZmluaXNoZWQgPSAwCiAgICAgICAgIHRlc3RfaW5kZXggPSAxCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIGZpbmlzaGVkIDwgdXNlX21wOgorICAgICAgICAgICAgd2hpbGUgZmluaXNoZWQgPCBucy51c2VfbXA6CiAgICAgICAgICAgICAgICAgdGVzdCwgc3Rkb3V0LCBzdGRlcnIsIHJlc3VsdCA9IG91dHB1dC5nZXQoKQogICAgICAgICAgICAgICAgIGlmIHRlc3QgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgKz0gMQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCkKLSAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgaWYgbm90IG5zLnF1aWV0OgogICAgICAgICAgICAgICAgICAgICBmbXQgPSAiW3sxOnswfX17Mn0vezN9XSB7NH0iIGlmIGJhZCBlbHNlICJbezE6ezB9fXsyfV0gezR9IgogICAgICAgICAgICAgICAgICAgICBwcmludChmbXQuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9jb3VudF93aWR0aCwgdGVzdF9pbmRleCwgdGVzdF9jb3VudCwKQEAgLTY5OSwyOSArNzQyLDMwIEBACiAgICAgICAgICAgICB3b3JrZXIuam9pbigpCiAgICAgZWxzZToKICAgICAgICAgZm9yIHRlc3RfaW5kZXgsIHRlc3QgaW4gZW51bWVyYXRlKHRlc3RzLCAxKToKLSAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgIGlmIG5vdCBucy5xdWlldDoKICAgICAgICAgICAgICAgICBmbXQgPSAiW3sxOnswfX17Mn0vezN9XSB7NH0iIGlmIGJhZCBlbHNlICJbezE6ezB9fXsyfV0gezR9IgogICAgICAgICAgICAgICAgIHByaW50KGZtdC5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgIHRlc3RfY291bnRfd2lkdGgsIHRlc3RfaW5kZXgsIHRlc3RfY291bnQsIGxlbihiYWQpLCB0ZXN0KSkKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIGlmIHRyYWNlOgorICAgICAgICAgICAgaWYgbnMudHJhY2U6CiAgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSB0cmFjaW5nIGNvZGUgY292ZXJhZ2UsIHRoZW4gd2UgZG9uJ3QgZXhpdCB3aXRoIHN0YXR1cwogICAgICAgICAgICAgICAgICMgaWYgb24gYSBmYWxzZSByZXR1cm4gdmFsdWUgZnJvbSBtYWluLgotICAgICAgICAgICAgICAgIHRyYWNlci5ydW5jdHgoJ3J1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsIHRpbWVvdXQ9dGltZW91dCknLAorICAgICAgICAgICAgICAgIHRyYWNlci5ydW5jdHgoJ3J1bnRlc3QodGVzdCwgbnMudmVyYm9zZSwgbnMucXVpZXQsIHRpbWVvdXQ9bnMudGltZW91dCknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscz1nbG9iYWxzKCksIGxvY2Fscz12YXJzKCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcywgZGVidWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9dmVyYm9zZTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD10aW1lb3V0LCBmYWlsZmFzdD1mYWlsZmFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1tYXRjaF90ZXN0cykKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCh0ZXN0LCBucy52ZXJib3NlLCBucy5xdWlldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucy5odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPW5zLnZlcmJvc2UzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCwgZmFpbGZhc3Q9bnMuZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bnMubWF0Y2hfdGVzdHMpCiAgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCkKICAgICAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGlmIGZpbmRsZWFrczoKKyAgICAgICAgICAgIGlmIG5zLmZpbmRsZWFrczoKICAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgICAgICAgICBpZiBnYy5nYXJiYWdlOgogICAgICAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogdGVzdCBjcmVhdGVkIiwgbGVuKGdjLmdhcmJhZ2UpLCBlbmQ9JyAnKQpAQCAtNzQyLDExICs3ODYsMTEgQEAKICAgICAgICAgb21pdHRlZCA9IHNldChzZWxlY3RlZCkgLSBzZXQoZ29vZCkgLSBzZXQoYmFkKSAtIHNldChza2lwcGVkKQogICAgICAgICBwcmludChjb3VudChsZW4ob21pdHRlZCksICJ0ZXN0IiksICJvbWl0dGVkOiIpCiAgICAgICAgIHByaW50bGlzdChvbWl0dGVkKQotICAgIGlmIGdvb2QgYW5kIG5vdCBxdWlldDoKKyAgICBpZiBnb29kIGFuZCBub3QgbnMucXVpZXQ6CiAgICAgICAgIGlmIG5vdCBiYWQgYW5kIG5vdCBza2lwcGVkIGFuZCBub3QgaW50ZXJydXB0ZWQgYW5kIGxlbihnb29kKSA+IDE6CiAgICAgICAgICAgICBwcmludCgiQWxsIiwgZW5kPScgJykKICAgICAgICAgcHJpbnQoY291bnQobGVuKGdvb2QpLCAidGVzdCIpLCAiT0suIikKLSAgICBpZiBwcmludF9zbG93OgorICAgIGlmIG5zLnByaW50X3Nsb3c6CiAgICAgICAgIHRlc3RfdGltZXMuc29ydChyZXZlcnNlPVRydWUpCiAgICAgICAgIHByaW50KCIxMCBzbG93ZXN0IHRlc3RzOiIpCiAgICAgICAgIGZvciB0aW1lLCB0ZXN0IGluIHRlc3RfdGltZXNbOjEwXToKQEAgLTc2MCwzMiArODA0LDE5IEBACiAgICAgICAgIHByaW50KCJ7fSBhbHRlcmVkIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQ6Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgIGNvdW50KGxlbihlbnZpcm9ubWVudF9jaGFuZ2VkKSwgInRlc3QiKSkpCiAgICAgICAgIHByaW50bGlzdChlbnZpcm9ubWVudF9jaGFuZ2VkKQotICAgIGlmIHNraXBwZWQgYW5kIG5vdCBxdWlldDoKKyAgICBpZiBza2lwcGVkIGFuZCBub3QgbnMucXVpZXQ6CiAgICAgICAgIHByaW50KGNvdW50KGxlbihza2lwcGVkKSwgInRlc3QiKSwgInNraXBwZWQ6IikKICAgICAgICAgcHJpbnRsaXN0KHNraXBwZWQpCiAKLSAgICAgICAgZSA9IF9FeHBlY3RlZFNraXBzKCkKLSAgICAgICAgcGxhdCA9IHN5cy5wbGF0Zm9ybQotICAgICAgICBpZiBlLmlzdmFsaWQoKToKLSAgICAgICAgICAgIHN1cnByaXNlID0gc2V0KHNraXBwZWQpIC0gZS5nZXRleHBlY3RlZCgpIC0gc2V0KHJlc291cmNlX2RlbmllZHMpCi0gICAgICAgICAgICBpZiBzdXJwcmlzZToKLSAgICAgICAgICAgICAgICBwcmludChjb3VudChsZW4oc3VycHJpc2UpLCAic2tpcCIpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgb24iLCBwbGF0ICsgIjoiKQotICAgICAgICAgICAgICAgIHByaW50bGlzdChzdXJwcmlzZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIlRob3NlIHNraXBzIGFyZSBhbGwgZXhwZWN0ZWQgb24iLCBwbGF0ICsgIi4iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoIkFzayBzb21lb25lIHRvIHRlYWNoIHJlZ3J0ZXN0LnB5IGFib3V0IHdoaWNoIHRlc3RzIGFyZSIpCi0gICAgICAgICAgICBwcmludCgiZXhwZWN0ZWQgdG8gZ2V0IHNraXBwZWQgb24iLCBwbGF0ICsgIi4iKQotCi0gICAgaWYgdmVyYm9zZTIgYW5kIGJhZDoKKyAgICBpZiBucy52ZXJib3NlMiBhbmQgYmFkOgogICAgICAgICBwcmludCgiUmUtcnVubmluZyBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlIikKICAgICAgICAgZm9yIHRlc3QgaW4gYmFkOgogICAgICAgICAgICAgcHJpbnQoIlJlLXJ1bm5pbmcgdGVzdCAlciBpbiB2ZXJib3NlIG1vZGUiICUgdGVzdCkKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZlcmJvc2UgPSBUcnVlCi0gICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywgdGltZW91dD10aW1lb3V0KQorICAgICAgICAgICAgICAgIG5zLnZlcmJvc2UgPSBUcnVlCisgICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIG5zLnF1aWV0LCBucy5odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PW5zLnRpbWVvdXQpCiAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICAgICAgIyBwcmludCBhIG5ld2xpbmUgc2VwYXJhdGUgZnJvbSB0aGUgXkMKICAgICAgICAgICAgICAgICBwcmludCgpCkBAIC03OTMsMTggKzgyNCwxOCBAQAogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHJhaXNlCiAKLSAgICBpZiBzaW5nbGU6CisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBpZiBuZXh0X3NpbmdsZV90ZXN0OgogICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGZwOgogICAgICAgICAgICAgICAgIGZwLndyaXRlKG5leHRfc2luZ2xlX3Rlc3QgKyAnXG4nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQogCi0gICAgaWYgdHJhY2U6CisgICAgaWYgbnMudHJhY2U6CiAgICAgICAgIHIgPSB0cmFjZXIucmVzdWx0cygpCi0gICAgICAgIHIud3JpdGVfcmVzdWx0cyhzaG93X21pc3Npbmc9VHJ1ZSwgc3VtbWFyeT1UcnVlLCBjb3ZlcmRpcj1jb3ZlcmRpcikKKyAgICAgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsIGNvdmVyZGlyPW5zLmNvdmVyZGlyKQogCi0gICAgaWYgcnVubGVha3M6CisgICAgaWYgbnMucnVubGVha3M6CiAgICAgICAgIG9zLnN5c3RlbSgibGVha3MgJWQiICUgb3MuZ2V0cGlkKCkpCiAKICAgICBzeXMuZXhpdChsZW4oYmFkKSA+IDAgb3IgaW50ZXJydXB0ZWQpCkBAIC04NzcsNyArOTA4LDcgQEAKICAgICBhdGV4aXQucmVnaXN0ZXIocmVzdG9yZV9zdGRvdXQpCiAKIGRlZiBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LAotICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgZGVidWc9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSwKKyAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSwKICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSwKICAgICAgICAgICAgIHRpbWVvdXQ9Tm9uZSk6CiAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QuCkBAIC04ODUsMTQgKzkxNiwxNSBAQAogICAgIHRlc3QgLS0gdGhlIG5hbWUgb2YgdGhlIHRlc3QKICAgICB2ZXJib3NlIC0tIGlmIHRydWUsIHByaW50IG1vcmUgbWVzc2FnZXMKICAgICBxdWlldCAtLSBpZiB0cnVlLCBkb24ndCBwcmludCAnc2tpcHBlZCcgbWVzc2FnZXMgKHByb2JhYmx5IHJlZHVuZGFudCkKLSAgICB0ZXN0X3RpbWVzIC0tIGEgbGlzdCBvZiAodGltZSwgdGVzdF9uYW1lKSBwYWlycwogICAgIGh1bnRybGVha3MgLS0gcnVuIG11bHRpcGxlIHRpbWVzIHRvIHRlc3QgZm9yIGxlYWtzOyByZXF1aXJlcyBhIGRlYnVnCiAgICAgICAgICAgICAgICAgICBidWlsZDsgYSB0cmlwbGUgY29ycmVzcG9uZGluZyB0byAtUidzIHRocmVlIGFyZ3VtZW50cworICAgIHVzZV9yZXNvdXJjZXMgLS0gbGlzdCBvZiBleHRyYSByZXNvdXJjZXMgdG8gdXNlCiAgICAgb3V0cHV0X29uX2ZhaWx1cmUgLS0gaWYgdHJ1ZSwgZGlzcGxheSB0ZXN0IG91dHB1dCBvbiBmYWlsdXJlCiAgICAgdGltZW91dCAtLSBkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgogICAgICAgICAgICAgICAgdGltZW91dCBzZWNvbmRzCisgICAgZmFpbGZhc3QsIG1hdGNoX3Rlc3RzIC0tIFNlZSByZWdydGVzdCBjb21tYW5kLWxpbmUgZmxhZ3MgZm9yIHRoZXNlLgogCi0gICAgUmV0dXJucyBvbmUgb2YgdGhlIHRlc3QgcmVzdWx0IGNvbnN0YW50czoKKyAgICBSZXR1cm5zIHRoZSB0dXBsZSByZXN1bHQsIHRlc3RfdGltZSwgd2hlcmUgcmVzdWx0IGlzIG9uZSBvZiB0aGUgY29uc3RhbnRzOgogICAgICAgICBJTlRFUlJVUFRFRCAgICAgIEtleWJvYXJkSW50ZXJydXB0IHdoZW4gcnVuIHVuZGVyIC1qCiAgICAgICAgIFJFU09VUkNFX0RFTklFRCAgdGVzdCBza2lwcGVkIGJlY2F1c2UgcmVzb3VyY2UgZGVuaWVkCiAgICAgICAgIFNLSVBQRUQgICAgICAgICAgdGVzdCBza2lwcGVkIGZvciBzb21lIG90aGVyIHJlYXNvbgpAQCAtOTMwLDcgKzk2Miw3IEBACiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN0cmVhbQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzdHJlYW0KICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcsIGRpc3BsYXlfZmFpbHVyZT1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1GYWxzZSkKICAgICAgICAgICAgICAgICBpZiByZXN1bHRbMF0gPT0gRkFJTEVEOgogICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdHJlYW0uZ2V0dmFsdWUoKQogICAgICAgICAgICAgICAgICAgICBvcmlnX3N0ZGVyci53cml0ZShvdXRwdXQpCkBAIC05NDAsNyArOTcyLDcgQEAKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyID0gb3JpZ19zdGRlcnIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN1cHBvcnQudmVyYm9zZSA9IHZlcmJvc2UgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0Ci0gICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1ub3QgdmVyYm9zZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgIGZpbmFsbHk6CkBAIC05OTIsMTAgKzEwMjQsMTIgQEAKICAgICAgICAgICAgICAgICAgJ29zLmVudmlyb24nLCAnc3lzLnBhdGgnLCAnc3lzLnBhdGhfaG9va3MnLCAnX19pbXBvcnRfXycsCiAgICAgICAgICAgICAgICAgICd3YXJuaW5ncy5maWx0ZXJzJywgJ2FzeW5jb3JlLnNvY2tldF9tYXAnLAogICAgICAgICAgICAgICAgICAnbG9nZ2luZy5faGFuZGxlcnMnLCAnbG9nZ2luZy5faGFuZGxlckxpc3QnLCAnc3lzLmdldHRyYWNlJywKLSAgICAgICAgICAgICAgICAgJ3N5cy53YXJub3B0aW9ucycsICd0aHJlYWRpbmcuX2RhbmdsaW5nJywKLSAgICAgICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZycsCisgICAgICAgICAgICAgICAgICdzeXMud2Fybm9wdGlvbnMnLAorICAgICAgICAgICAgICAgICAjIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9jbGVhbnVwKCkgbWF5IHJlbGVhc2UgcmVmCisgICAgICAgICAgICAgICAgICMgdG8gYSB0aHJlYWQsIHNvIGNoZWNrIHByb2Nlc3NlcyBmaXJzdC4KKyAgICAgICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZycsICd0aHJlYWRpbmcuX2RhbmdsaW5nJywKICAgICAgICAgICAgICAgICAgJ3N5c2NvbmZpZy5fQ09ORklHX1ZBUlMnLCAnc3lzY29uZmlnLl9JTlNUQUxMX1NDSEVNRVMnLAotICAgICAgICAgICAgICAgICAnc3VwcG9ydC5URVNURk4nLAorICAgICAgICAgICAgICAgICAnc3VwcG9ydC5URVNURk4nLCAnbG9jYWxlJywgJ3dhcm5pbmdzLnNob3d3YXJuaW5nJywKICAgICAgICAgICAgICAgICApCiAKICAgICBkZWYgZ2V0X3N5c19hcmd2KHNlbGYpOgpAQCAtMTEyMyw2ICsxMTU3LDggQEAKICAgICBkZWYgZ2V0X211bHRpcHJvY2Vzc2luZ19wcm9jZXNzX19kYW5nbGluZyhzZWxmKToKICAgICAgICAgaWYgbm90IG11bHRpcHJvY2Vzc2luZzoKICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgVW5qb2luZWQgcHJvY2VzcyBvYmplY3RzIGNhbiBzdXJ2aXZlIGFmdGVyIHByb2Nlc3MgZXhpdHMKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKQogICAgICAgICAjIFRoaXMgY29waWVzIHRoZSB3ZWFrcmVmcyB3aXRob3V0IG1ha2luZyBhbnkgc3Ryb25nIHJlZmVyZW5jZQogICAgICAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nLmNvcHkoKQogICAgIGRlZiByZXN0b3JlX211bHRpcHJvY2Vzc2luZ19wcm9jZXNzX19kYW5nbGluZyhzZWxmLCBzYXZlZCk6CkBAIC0xMTY0LDYgKzEyMDAsMjUgQEAKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihzdXBwb3J0LlRFU1RGTik6CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzdXBwb3J0LlRFU1RGTikKIAorICAgIF9sYyA9IFtnZXRhdHRyKGxvY2FsZSwgbGMpIGZvciBsYyBpbiBkaXIobG9jYWxlKQorICAgICAgICAgICBpZiBsYy5zdGFydHN3aXRoKCdMQ18nKV0KKyAgICBkZWYgZ2V0X2xvY2FsZShzZWxmKToKKyAgICAgICAgcGFpcmluZ3MgPSBbXQorICAgICAgICBmb3IgbGMgaW4gc2VsZi5fbGM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFpcmluZ3MuYXBwZW5kKChsYywgbG9jYWxlLnNldGxvY2FsZShsYywgTm9uZSkpKQorICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJldHVybiBwYWlyaW5ncworICAgIGRlZiByZXN0b3JlX2xvY2FsZShzZWxmLCBzYXZlZCk6CisgICAgICAgIGZvciBsYywgc2V0dGluZyBpbiBzYXZlZDoKKyAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobGMsIHNldHRpbmcpCisKKyAgICBkZWYgZ2V0X3dhcm5pbmdzX3Nob3d3YXJuaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gd2FybmluZ3Muc2hvd3dhcm5pbmcKKyAgICBkZWYgcmVzdG9yZV93YXJuaW5nc19zaG93d2FybmluZyhzZWxmLCBmeG4pOgorICAgICAgICB3YXJuaW5ncy5zaG93d2FybmluZyA9IGZ4bgorCiAgICAgZGVmIHJlc291cmNlX2luZm8oc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYucmVzb3VyY2VzOgogICAgICAgICAgICAgbWV0aG9kX3N1ZmZpeCA9IG5hbWUucmVwbGFjZSgnLicsICdfJykKQEAgLTExOTgsNyArMTI1Myw3IEBACiAKIAogZGVmIHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsCi0gICAgICAgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkZWJ1Zz1GYWxzZSwgZGlzcGxheV9mYWlsdXJlPVRydWUpOgorICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgZGlzcGxheV9mYWlsdXJlPVRydWUpOgogICAgIHN1cHBvcnQudW5sb2FkKHRlc3QpCiAKICAgICB0ZXN0X3RpbWUgPSAwLjAKQEAgLTEyMTEsOCArMTI2Niw3IEBACiAgICAgICAgICAgICBhYnN0ZXN0ID0gJ3Rlc3QuJyArIHRlc3QKICAgICAgICAgd2l0aCBzYXZlZF90ZXN0X2Vudmlyb25tZW50KHRlc3QsIHZlcmJvc2UsIHF1aWV0KSBhcyBlbnZpcm9ubWVudDoKICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgdGhlX3BhY2thZ2UgPSBfX2ltcG9ydF9fKGFic3Rlc3QsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFtdKQotICAgICAgICAgICAgdGhlX21vZHVsZSA9IGdldGF0dHIodGhlX3BhY2thZ2UsIHRlc3QpCisgICAgICAgICAgICB0aGVfbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoYWJzdGVzdCkKICAgICAgICAgICAgICMgSWYgdGhlIHRlc3QgaGFzIGEgdGVzdF9tYWluLCB0aGF0IHdpbGwgcnVuIHRoZSBhcHByb3ByaWF0ZQogICAgICAgICAgICAgIyB0ZXN0cy4gIElmIG5vdCwgdXNlIG5vcm1hbCB1bml0dGVzdCB0ZXN0IGxvYWRpbmcuCiAgICAgICAgICAgICB0ZXN0X3J1bm5lciA9IGdldGF0dHIodGhlX21vZHVsZSwgInRlc3RfbWFpbiIsIE5vbmUpCkBAIC0xMjIxLDggKzEyNzUsNyBAQAogICAgICAgICAgICAgICAgIHRlc3RfcnVubmVyID0gbGFtYmRhOiBzdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0cykKICAgICAgICAgICAgIHRlc3RfcnVubmVyKCkKICAgICAgICAgICAgIGlmIGh1bnRybGVha3M6Ci0gICAgICAgICAgICAgICAgcmVmbGVhayA9IGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCB0ZXN0X3J1bm5lciwKLSAgICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcykKKyAgICAgICAgICAgICAgICByZWZsZWFrID0gZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIHRlc3RfcnVubmVyLCBodW50cmxlYWtzKQogICAgICAgICAgICAgdGVzdF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCiAgICAgZXhjZXB0IHN1cHBvcnQuUmVzb3VyY2VEZW5pZWQgYXMgbXNnOgogICAgICAgICBpZiBub3QgcXVpZXQ6CkBAIC0xMzI4LDQxICsxMzgxLDUwIEBACiAgICAgICAgIGZvciBvYmogaW4gYWJjLl9fc3ViY2xhc3Nlc19fKCkgKyBbYWJjXToKICAgICAgICAgICAgIGFiY3Nbb2JqXSA9IG9iai5fYWJjX3JlZ2lzdHJ5LmNvcHkoKQogCi0gICAgaWYgaW5kaXJlY3RfdGVzdDoKLSAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgotICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCgpCi0gICAgZWxzZToKLSAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3RoZV9tb2R1bGUuX19uYW1lX19dCi0gICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIHRoZV9tb2R1bGUuX19uYW1lX18pCi0KLSAgICBkZWx0YXMgPSBbXQogICAgIG53YXJtdXAsIG50cmFja2VkLCBmbmFtZSA9IGh1bnRybGVha3MKICAgICBmbmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBmbmFtZSkKICAgICByZXBjb3VudCA9IG53YXJtdXAgKyBudHJhY2tlZAorICAgIHJjX2RlbHRhcyA9IFswXSAqIHJlcGNvdW50CisgICAgYWxsb2NfZGVsdGFzID0gWzBdICogcmVwY291bnQKKwogICAgIHByaW50KCJiZWdpbm5pbmciLCByZXBjb3VudCwgInJlcGV0aXRpb25zIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgIHByaW50KCgiMTIzNDU2Nzg5MCIqKHJlcGNvdW50Ly8xMCArIDEpKVs6cmVwY291bnRdLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKICAgICBmb3IgaSBpbiByYW5nZShyZXBjb3VudCk6Ci0gICAgICAgIHJjX2JlZm9yZSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcnVuX3RoZV90ZXN0KCkKKyAgICAgICAgaW5kaXJlY3RfdGVzdCgpCisgICAgICAgIGFsbG9jX2FmdGVyLCByY19hZnRlciA9IGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIGFiY3MpCiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy4nKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKLSAgICAgICAgcmNfYWZ0ZXIgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCiAgICAgICAgIGlmIGkgPj0gbndhcm11cDoKLSAgICAgICAgICAgIGRlbHRhcy5hcHBlbmQocmNfYWZ0ZXIgLSByY19iZWZvcmUpCisgICAgICAgICAgICByY19kZWx0YXNbaV0gPSByY19hZnRlciAtIHJjX2JlZm9yZQorICAgICAgICAgICAgYWxsb2NfZGVsdGFzW2ldID0gYWxsb2NfYWZ0ZXIgLSBhbGxvY19iZWZvcmUKKyAgICAgICAgYWxsb2NfYmVmb3JlLCByY19iZWZvcmUgPSBhbGxvY19hZnRlciwgcmNfYWZ0ZXIKICAgICBwcmludChmaWxlPXN5cy5zdGRlcnIpCi0gICAgaWYgYW55KGRlbHRhcyk6Ci0gICAgICAgIG1zZyA9ICclcyBsZWFrZWQgJXMgcmVmZXJlbmNlcywgc3VtPSVzJyAlICh0ZXN0LCBkZWx0YXMsIHN1bShkZWx0YXMpKQotICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgIHdpdGggb3BlbihmbmFtZSwgImEiKSBhcyByZWZyZXA6Ci0gICAgICAgICAgICBwcmludChtc2csIGZpbGU9cmVmcmVwKQotICAgICAgICAgICAgcmVmcmVwLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gRmFsc2UKKyAgICAjIFRoZXNlIGNoZWNrZXJzIHJldHVybiBGYWxzZSBvbiBzdWNjZXNzLCBUcnVlIG9uIGZhaWx1cmUKKyAgICBkZWYgY2hlY2tfcmNfZGVsdGFzKGRlbHRhcyk6CisgICAgICAgIHJldHVybiBhbnkoZGVsdGFzKQorICAgIGRlZiBjaGVja19hbGxvY19kZWx0YXMoZGVsdGFzKToKKyAgICAgICAgIyBBdCBsZWFzdCAxLzNyZCBvZiAwcworICAgICAgICBpZiAzICogZGVsdGFzLmNvdW50KDApIDwgbGVuKGRlbHRhcyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIE5vdGhpbmcgZWxzZSB0aGFuIDFzLCAwcyBhbmQgLTFzCisgICAgICAgIGlmIG5vdCBzZXQoZGVsdGFzKSA8PSB7MSwwLC0xfToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGZhaWxlZCA9IEZhbHNlCisgICAgZm9yIGRlbHRhcywgaXRlbV9uYW1lLCBjaGVja2VyIGluIFsKKyAgICAgICAgKHJjX2RlbHRhcywgJ3JlZmVyZW5jZXMnLCBjaGVja19yY19kZWx0YXMpLAorICAgICAgICAoYWxsb2NfZGVsdGFzLCAnbWVtb3J5IGJsb2NrcycsIGNoZWNrX2FsbG9jX2RlbHRhcyldOgorICAgICAgICBpZiBjaGVja2VyKGRlbHRhcyk6CisgICAgICAgICAgICBtc2cgPSAnJXMgbGVha2VkICVzICVzLCBzdW09JXMnICUgKAorICAgICAgICAgICAgICAgIHRlc3QsIGRlbHRhc1tud2FybXVwOl0sIGl0ZW1fbmFtZSwgc3VtKGRlbHRhcykpCisgICAgICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiYSIpIGFzIHJlZnJlcDoKKyAgICAgICAgICAgICAgICBwcmludChtc2csIGZpbGU9cmVmcmVwKQorICAgICAgICAgICAgICAgIHJlZnJlcC5mbHVzaCgpCisgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgcmV0dXJuIGZhaWxlZAogCiBkZWYgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcyk6CiAgICAgaW1wb3J0IGdjLCBjb3B5cmVnCkBAIC0xNDI4LDggKzE0OTAsMTEgQEAKICAgICBlbHNlOgogICAgICAgICBjdHlwZXMuX3Jlc2V0X2NhY2hlKCkKIAotICAgICMgQ29sbGVjdCBjeWNsaWMgdHJhc2guCisgICAgIyBDb2xsZWN0IGN5Y2xpYyB0cmFzaCBhbmQgcmVhZCBtZW1vcnkgc3RhdGlzdGljcyBpbW1lZGlhdGVseSBhZnRlci4KKyAgICBmdW5jMSA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MKKyAgICBmdW5jMiA9IHN5cy5nZXR0b3RhbHJlZmNvdW50CiAgICAgZ2MuY29sbGVjdCgpCisgICAgcmV0dXJuIGZ1bmMxKCksIGZ1bmMyKCkKIAogZGVmIHdhcm1fY2FjaGVzKCk6CiAgICAgIyBjaGFyIGNhY2hlCkBAIC0xNDcyLDMwNyArMTUzNywxMCBAQAogICAgIHByaW50KGZpbGwoJyAnLmpvaW4oc3RyKGVsdCkgZm9yIGVsdCBpbiBzb3J0ZWQoeCkpLCB3aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PWJsYW5rcywgc3Vic2VxdWVudF9pbmRlbnQ9YmxhbmtzKSkKIAotIyBNYXAgc3lzLnBsYXRmb3JtIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJhc2VuYW1lcyBvZiB0ZXN0cwotIyBleHBlY3RlZCB0byBiZSBza2lwcGVkIG9uIHRoYXQgcGxhdGZvcm0uCi0jCi0jIFNwZWNpYWwgY2FzZXM6Ci0jICAgICB0ZXN0X3BlcDI3NwotIyAgICAgICAgIFRoZSBfRXhwZWN0ZWRTa2lwcyBjb25zdHJ1Y3RvciBhZGRzIHRoaXMgdG8gdGhlIHNldCBvZiBleHBlY3RlZAotIyAgICAgICAgIHNraXBzIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzLgotIyAgICAgdGVzdF90aW1lb3V0Ci0jICAgICAgICAgQ29udHJvbGxlZCBieSB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZC4gIFJlcXVpcmVzIHRoZSBuZXR3b3JrCi0jICAgICAgICAgcmVzb3VyY2UgYW5kIGEgc29ja2V0IG1vZHVsZS4KLSMKLSMgVGVzdHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBldmVyeXdoZXJlIGV4Y2VwdCBvbiBvbmUgcGxhdGZvcm0KLSMgYXJlIGFsc28gaGFuZGxlZCBzZXBhcmF0ZWx5LgogCi1fZXhwZWN0YXRpb25zID0gKAotICAgICgnd2luMzInLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3J5cHQKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kYm0KLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZmNudGwKLSAgICAgICAgdGVzdF9mb3JrMQotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2RibV9uZGJtCi0gICAgICAgIHRlc3RfZ3JwCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9waXBlcwotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgdGVzdF9wb3NpeAotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3B3ZAotICAgICAgICB0ZXN0X3Jlc291cmNlCi0gICAgICAgIHRlc3Rfc2lnbmFsCi0gICAgICAgIHRlc3Rfc3lzbG9nCi0gICAgICAgIHRlc3RfdGhyZWFkc2lnbmFscwotICAgICAgICB0ZXN0X3dhaXQzCi0gICAgICAgIHRlc3Rfd2FpdDQKLSAgICAgICAgIiIiKSwKLSAgICAoJ2xpbnV4JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgICIiIiksCi0gICAgKCd1bml4d2FyZScsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdvcGVudW5peCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdzY29fc3YnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9hc3luY2hhdAotICAgICAgICB0ZXN0X2ZvcmsxCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9nZXR0ZXh0Ci0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3RfcXVldWUKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgdGVzdF90aHJlYWQKLSAgICAgICAgdGVzdF90aHJlYWRlZF9pbXBvcnQKLSAgICAgICAgdGVzdF90aHJlYWRlZHRlbXBmaWxlCi0gICAgICAgIHRlc3RfdGhyZWFkaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdkYXJ3aW4nLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2dkYgotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X21pbmlkb20KLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgIiIiKSwKLSAgICAoJ3N1bm9zJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZ3ppcAotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF96aXBmaWxlCi0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnaHAtdXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3RfemlwZmlsZQotICAgICAgICB0ZXN0X3psaWIKLSAgICAgICAgIiIiKSwKLSAgICAoJ2N5Z3dpbicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibQotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2lvY3RsCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9zb2NrZXRzZXJ2ZXIKLSAgICAgICAgIiIiKSwKLSAgICAoJ29zMmVteCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2F1ZGlvb3AKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X21tYXAKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wdHkKLSAgICAgICAgdGVzdF9yZXNvdXJjZQotICAgICAgICB0ZXN0X3NpZ25hbAotICAgICAgICAiIiIpLAotICAgICgnZnJlZWJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF90aW1lb3V0Ci0gICAgICAgIHRlc3RfdXJsbGlibmV0Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdhaXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9iejIKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfemlwaW1wb3J0Ci0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnb3BlbmJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N0eXBlcwotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9ub3JtYWxpemF0aW9uCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCduZXRic2QnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdHlwZXMKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0pCi0KLWNsYXNzIF9FeHBlY3RlZFNraXBzOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG9zLnBhdGgKLSAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3RpbWVvdXQKLQotICAgICAgICBzZWxmLnZhbGlkID0gRmFsc2UKLSAgICAgICAgZXhwZWN0ZWQgPSBOb25lCi0gICAgICAgIGZvciBpdGVtIGluIF9leHBlY3RhdGlvbnM6Ci0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChpdGVtWzBdKToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGl0ZW1bMV0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBleHBlY3RlZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBzZXQoZXhwZWN0ZWQuc3BsaXQoKSkKLQotICAgICAgICAgICAgIyBUaGVzZSBhcmUgYnJva2VuIHRlc3RzLCBmb3Igbm93IHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0uCi0gICAgICAgICAgICAjIFhYWCBGaXggdGhlc2UhCi0gICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICAjIGV4cGVjdGVkIHRvIGJlIHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0sIGV2ZW4gTGludXgKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3BlcDI3NycpCi0KLSAgICAgICAgICAgICMgZG9jdGVzdCwgcHJvZmlsZSBhbmQgY1Byb2ZpbGUgdGVzdHMgZmFpbCB3aGVuIHRoZSBjb2RlYyBmb3IgdGhlCi0gICAgICAgICAgICAjIGZzIGVuY29kaW5nIGlzbid0IGJ1aWx0IGluIGJlY2F1c2UgUHlVbmljb2RlX0RlY29kZSgpIGFkZHMgdHdvCi0gICAgICAgICAgICAjIGNhbGxzIGludG8gUHl0aG9uLgotICAgICAgICAgICAgZW5jcyA9ICgidXRmLTgiLCAibGF0aW4tMSIsICJhc2NpaSIsICJtYmNzIiwgInV0Zi0xNiIsICJ1dGYtMzIiKQotICAgICAgICAgICAgaWYgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpLmxvd2VyKCkgbm90IGluIGVuY3M6Ci0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcHJvZmlsZScpCi0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfY1Byb2ZpbGUnKQotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X2RvY3Rlc3QnKQotCi0gICAgICAgICAgICBpZiB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZDoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF90aW1lb3V0JykKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6Ci0gICAgICAgICAgICAgICAgIyB0ZXN0X3NxbGl0ZSBpcyBvbmx5IHJlbGlhYmxlIG9uIFdpbmRvd3Mgd2hlcmUgdGhlIGxpYnJhcnkKLSAgICAgICAgICAgICAgICAjIGlzIGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uCi0gICAgICAgICAgICAgICAgV0lOX09OTFkgPSB7InRlc3RfdW5pY29kZV9maWxlIiwgInRlc3Rfd2lucmVnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF93aW5zb3VuZCIsICJ0ZXN0X3N0YXJ0ZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfc3FsaXRlIiwgInRlc3RfbXNpbGliIn0KLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkIHw9IFdJTl9PTkxZCi0KLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnc3Vub3M1JzoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICBpZiBzdXBwb3J0LnB5dGhvbl9pc19vcHRpbWl6ZWQoKToKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgidGVzdF9nZGIiKQotCi0gICAgICAgICAgICBzZWxmLnZhbGlkID0gVHJ1ZQotCi0gICAgZGVmIGlzdmFsaWQoc2VsZik6Ci0gICAgICAgICJSZXR1cm4gdHJ1ZSBpZmYgX0V4cGVjdGVkU2tpcHMga25vd3MgYWJvdXQgdGhlIGN1cnJlbnQgcGxhdGZvcm0uIgotICAgICAgICByZXR1cm4gc2VsZi52YWxpZAotCi0gICAgZGVmIGdldGV4cGVjdGVkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gc2V0IG9mIHRlc3QgbmFtZXMgd2UgZXhwZWN0IHRvIHNraXAgb24gY3VycmVudCBwbGF0Zm9ybS4KLQotICAgICAgICBzZWxmLmlzdmFsaWQoKSBtdXN0IGJlIHRydWUuCi0gICAgICAgICIiIgotCi0gICAgICAgIGFzc2VydCBzZWxmLmlzdmFsaWQoKQotICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RlZAotCi1kZWYgX21ha2VfdGVtcF9kaXJfZm9yX2J1aWxkKFRFTVBESVIpOgotICAgICMgV2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20gdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnksIGl0IGlzIGJlc3QgcHJhY3RpY2UKLSAgICAjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBJdCBlYXNlcyB0aGUgY2xlYW51cCBvZiBsZWZ0b3ZlcgotICAgICMgZmlsZXMgdXNpbmcgY29tbWFuZCAibWFrZSBkaXN0Y2xlYW4iLgorZGVmIG1haW5faW5fdGVtcF9jd2QoKToKKyAgICAiIiJSdW4gbWFpbigpIGluIGEgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5LiIiIgogICAgIGlmIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKLSAgICAgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQotICAgICAgICBURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKFRFTVBESVIpCiAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CkBAIC0xNzgxLDEwICsxNTQ5LDE2IEBACiAgICAgIyBEZWZpbmUgYSB3cml0YWJsZSB0ZW1wIGRpciB0aGF0IHdpbGwgYmUgdXNlZCBhcyBjd2Qgd2hpbGUgcnVubmluZwogICAgICMgdGhlIHRlc3RzLiBUaGUgbmFtZSBvZiB0aGUgZGlyIGluY2x1ZGVzIHRoZSBwaWQgdG8gYWxsb3cgcGFyYWxsZWwKICAgICAjIHRlc3RpbmcgKHNlZSB0aGUgLWogb3B0aW9uKS4KLSAgICBURVNUQ1dEID0gJ3Rlc3RfcHl0aG9uX3t9Jy5mb3JtYXQob3MuZ2V0cGlkKCkpCisgICAgdGVzdF9jd2QgPSAndGVzdF9weXRob25fe30nLmZvcm1hdChvcy5nZXRwaWQoKSkKKyAgICB0ZXN0X2N3ZCA9IG9zLnBhdGguam9pbihURU1QRElSLCB0ZXN0X2N3ZCkKIAotICAgIFRFU1RDV0QgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgVEVTVENXRCkKLSAgICByZXR1cm4gVEVNUERJUiwgVEVTVENXRAorICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyaWx5IGNoYW5nZXMgdGhlIENXRCB0byBhCisgICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgorICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiAgVGhlIG9yaWdpbmFsIENXRCBpcworICAgICMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KKyAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGVzdF9jd2QsIHF1aWV0PVRydWUpOgorICAgICAgICBtYWluKCkKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICMgUmVtb3ZlIHJlZ3J0ZXN0LnB5J3Mgb3duIGRpcmVjdG9yeSBmcm9tIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGguIERlc3BpdGUKQEAgLTE4MDgsMTEgKzE1ODIsNCBAQAogICAgICMgc2FuaXR5IGNoZWNrCiAgICAgYXNzZXJ0IF9fZmlsZV9fID09IG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkKIAotICAgIFRFTVBESVIsIFRFU1RDV0QgPSBfbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQoVEVNUERJUikKLQotICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyeSBjaGFuZ2VzIHRoZSBDV0QgdG8gYQotICAgICMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiBUaGUgb3JpZ2luYWwgQ1dEIGlzCi0gICAgIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgotICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICAgICAgbWFpbigpCisgICAgbWFpbl9pbl90ZW1wX2N3ZCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5IGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQppbmRleCBhYjIwMTY0Li40ZDVjMWYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CisrKyBiL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKQEAgLTEyLDEzICsxMiwyMiBAQAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHppcGZpbGUKIAotZnJvbSBpbXAgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5Yywgc3RyaXBfcHl0aG9uX3N0ZGVyciwgdGVtcF9kaXIKIAogIyBFeGVjdXRpbmcgdGhlIGludGVycHJldGVyIGluIGEgc3VicHJvY2VzcwogZGVmIF9hc3NlcnRfcHl0aG9uKGV4cGVjdGVkX3N1Y2Nlc3MsICphcmdzLCAqKmVudl92YXJzKToKLSAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZV0KLSAgICBpZiBub3QgZW52X3ZhcnM6CisgICAgaWYgJ19faXNvbGF0ZWQnIGluIGVudl92YXJzOgorICAgICAgICBpc29sYXRlZCA9IGVudl92YXJzLnBvcCgnX19pc29sYXRlZCcpCisgICAgZWxzZToKKyAgICAgICAgaXNvbGF0ZWQgPSBub3QgZW52X3ZhcnMKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1YJywgJ2ZhdWx0aGFuZGxlciddCisgICAgaWYgaXNvbGF0ZWQ6CisgICAgICAgICMgaXNvbGF0ZWQgbW9kZTogaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGlnbm9yZSB1c2VyCisgICAgICAgICMgc2l0ZS1wYWNrYWdlcywgYW5kIGRvbid0IGFkZCB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gc3lzLnBhdGgKKyAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctSScpCisgICAgZWxpZiBub3QgZW52X3ZhcnM6CisgICAgICAgICMgaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctRScpCiAgICAgIyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCwgZm9yIGluLXBsYWNlIHRlc3Rpbmcgb2YKICAgICAjIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkcy4KQEAgLTM5LDcgKzQ4LDcgQEAKICAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQogICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCiAgICAgcmMgPSBwLnJldHVybmNvZGUKLSAgICBlcnIgPSAgc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCisgICAgZXJyID0gc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCiAgICAgaWYgKHJjIGFuZCBleHBlY3RlZF9zdWNjZXNzKSBvciAobm90IHJjIGFuZCBub3QgZXhwZWN0ZWRfc3VjY2Vzcyk6CiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgIlByb2Nlc3MgcmV0dXJuIGNvZGUgaXMgJWQsICIKQEAgLTQ5LDE4ICs1OCwzMiBAQAogZGVmIGFzc2VydF9weXRob25fb2soKmFyZ3MsICoqZW52X3ZhcnMpOgogICAgICIiIgogICAgIEFzc2VydCB0aGF0IHJ1bm5pbmcgdGhlIGludGVycHJldGVyIHdpdGggYGFyZ3NgIGFuZCBvcHRpb25hbCBlbnZpcm9ubWVudAotICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGlzIG9rIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZS4KKyAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBzdWNjZWVkcyAocmMgPT0gMCkgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LAorICAgIHN0ZGVycikgdHVwbGUuCisKKyAgICBJZiB0aGUgX19jbGVhbmVudiBrZXl3b3JkIGlzIHNldCwgZW52X3ZhcnMgaXMgdXNlZCBhIGZyZXNoIGVudmlyb25tZW50LgorCisgICAgUHl0aG9uIGlzIHN0YXJ0ZWQgaW4gaXNvbGF0ZWQgbW9kZSAoY29tbWFuZCBsaW5lIG9wdGlvbiAtSSksCisgICAgZXhjZXB0IGlmIHRoZSBfX2lzb2xhdGVkIGtleXdvcmQgaXMgc2V0IHRvIEZhbHNlLgogICAgICIiIgogICAgIHJldHVybiBfYXNzZXJ0X3B5dGhvbihUcnVlLCAqYXJncywgKiplbnZfdmFycykKIAogZGVmIGFzc2VydF9weXRob25fZmFpbHVyZSgqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiCiAgICAgQXNzZXJ0IHRoYXQgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBgYXJnc2AgYW5kIG9wdGlvbmFsIGVudmlyb25tZW50Ci0gICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgZmFpbHMgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlLgorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGZhaWxzIChyYyAhPSAwKSBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsCisgICAgc3RkZXJyKSB0dXBsZS4KKworICAgIFNlZSBhc3NlcnRfcHl0aG9uX29rKCkgZm9yIG1vcmUgb3B0aW9ucy4KICAgICAiIiIKICAgICByZXR1cm4gX2Fzc2VydF9weXRob24oRmFsc2UsICphcmdzLCAqKmVudl92YXJzKQogCiBkZWYgc3Bhd25fcHl0aG9uKCphcmdzLCAqKmt3KToKKyAgICAiIiJSdW4gYSBQeXRob24gc3VicHJvY2VzcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisKKyAgICBrdyBpcyBleHRyYSBrZXl3b3JkIGFyZ3MgdG8gcGFzcyB0byBzdWJwcm9jZXNzLlBvcGVuLiBSZXR1cm5zIGEgUG9wZW4KKyAgICBvYmplY3QuCisgICAgIiIiCiAgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRSddCiAgICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCiAgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKQEAgLTY4LDYgKzkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3KQogCiBkZWYga2lsbF9weXRob24ocCk6CisgICAgIiIiUnVuIHRoZSBnaXZlbiBQb3BlbiBwcm9jZXNzIHVudGlsIGNvbXBsZXRpb24gYW5kIHJldHVybiBzdGRvdXQuIiIiCiAgICAgcC5zdGRpbi5jbG9zZSgpCiAgICAgZGF0YSA9IHAuc3Rkb3V0LnJlYWQoKQogICAgIHAuc3Rkb3V0LmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NvcnRwZXJmLnB5IGIvTGliL3Rlc3Qvc29ydHBlcmYucHkKaW5kZXggYWY3YzBiNC4uOTA3MjJmNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc29ydHBlcmYucHkKKysrIGIvTGliL3Rlc3Qvc29ydHBlcmYucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICBmbiA9IG9zLnBhdGguam9pbih0ZCwgInJyJTA2ZCIgJSBuKQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZuLCAicmIiKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByID0gcmFuZG9tLnJhbmRvbQogICAgICAgICByZXN1bHQgPSBbcigpIGZvciBpIGluIHJhbmdlKG4pXQogICAgICAgICB0cnk6CkBAIC0zNSw5ICszNSw5IEBACiAgICAgICAgICAgICAgICAgaWYgZnA6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmbikKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiY2FuJ3Qgd3JpdGUiLCBmbiwgIjoiLCBtc2cpCiAgICAgZWxzZToKICAgICAgICAgcmVzdWx0ID0gbWFyc2hhbC5sb2FkKGZwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkgYi9MaWIvdGVzdC9zc2xfc2VydmVycy5weQppbmRleCA4Njg2MTUzLi43NTliM2Y0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zc2xfc2VydmVycy5weQorKysgYi9MaWIvdGVzdC9zc2xfc2VydmVycy5weQpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgICAgIHNzbGNvbm4gPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBzb2NrZXQgZXJyb3JzIGFyZSBzaWxlbmNlZCBieSB0aGUgY2FsbGVyLCBwcmludCB0aGVtIGhlcmUKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJHb3QgYW4gZXJyb3I6XG4lc1xuIiAlIGUpCkBAIC0xNDcsOSArMTQ3LDExIEBACiAgICAgICAgIHNlbGYuc2VydmVyLnNodXRkb3duKCkKIAogCi1kZWYgbWFrZV9odHRwc19zZXJ2ZXIoY2FzZSwgY2VydGZpbGU9Q0VSVEZJTEUsIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKLSAgICAjIHdlIGFzc3VtZSB0aGUgY2VydGZpbGUgY29udGFpbnMgYm90aCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUKLSAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKK2RlZiBtYWtlX2h0dHBzX3NlcnZlcihjYXNlLCAqLCBjb250ZXh0PU5vbmUsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKKyAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICMgV2UgYXNzdW1lIHRoZSBjZXJ0ZmlsZSBjb250YWlucyBib3RoIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZQogICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlKQogICAgIHNlcnZlciA9IEhUVFBTU2VydmVyVGhyZWFkKGNvbnRleHQsIGhvc3QsIGhhbmRsZXJfY2xhc3MpCiAgICAgZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkKaW5kZXggMWY2MWUxMy4uZDEyYmQ5NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5CisrKyBiL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weQpAQCAtMSwxNyArMSwyNyBAQAogIiIiV2hlbiBjYWxsZWQgYXMgYSBzY3JpcHQsIHByaW50IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIG9wZW4KLWZpbGUgZGVzY3JpcHRvcnMgb24gc3Rkb3V0LiIiIgorZmlsZSBkZXNjcmlwdG9ycyBvbiBzdGRvdXQuCisKK1VzYWdlOgorZmRfc3RhdHMucHk6IGNoZWNrIGFsbCBmaWxlIGRlc2NyaXB0b3JzCitmZF9zdGF0dXMucHkgZmQxIGZkMiAuLi46IGNoZWNrIG9ubHkgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvcnMKKyIiIgogCiBpbXBvcnQgZXJybm8KIGltcG9ydCBvcwotCi10cnk6Ci0gICAgX01BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQotZXhjZXB0OgotICAgIF9NQVhGRCA9IDI1NgoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBmZHMgPSBbXQotICAgIGZvciBmZCBpbiByYW5nZSgwLCBfTUFYRkQpOgorICAgIGlmIGxlbihzeXMuYXJndikgPT0gMToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX01BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBfTUFYRkQgPSAyNTYKKyAgICAgICAgdGVzdF9mZHMgPSByYW5nZSgwLCBfTUFYRkQpCisgICAgZWxzZToKKyAgICAgICAgdGVzdF9mZHMgPSBtYXAoaW50LCBzeXMuYXJndlsxOl0pCisgICAgZm9yIGZkIGluIHRlc3RfZmRzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdCA9IG9zLmZzdGF0KGZkKQogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgpAQCAtMTksNiArMjksNiBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByYWlzZQogICAgICAgICAjIElnbm9yZSBTb2xhcmlzIGRvb3IgZmlsZXMKLSAgICAgICAgaWYgc3Quc3RfbW9kZSAmIDB4RjAwMCAhPSAweGQwMDA6CisgICAgICAgIGlmIG5vdCBzdGF0LlNfSVNET09SKHN0LnN0X21vZGUpOgogICAgICAgICAgICAgZmRzLmFwcGVuZChmZCkKICAgICBwcmludCgnLCcuam9pbihtYXAoc3RyLCBmZHMpKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkgYi9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CmluZGV4IGRiZDc4NDYuLjIzZDAxNWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKKysrIGIvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQpAQCAtMTUsMTAgKzE1LDEwIEBACiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgY29sbGVjdGlvbnMuYWJjCiBpbXBvcnQgcmUKIGltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgaW1wCiBpbXBvcnQgdGltZQogaW1wb3J0IHN5c2NvbmZpZwogaW1wb3J0IGZubWF0Y2gKQEAgLTU3LDYgKzU3LDExIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbHptYSA9IE5vbmUKIAordHJ5OgorICAgIGltcG9ydCByZXNvdXJjZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHJlc291cmNlID0gTm9uZQorCiBfX2FsbF9fID0gWwogICAgICJFcnJvciIsICJUZXN0RmFpbGVkIiwgIlJlc291cmNlRGVuaWVkIiwgImltcG9ydF9tb2R1bGUiLCAidmVyYm9zZSIsCiAgICAgInVzZV9yZXNvdXJjZXMiLCAibWF4X21lbXVzZSIsICJyZWNvcmRfb3JpZ2luYWxfc3Rkb3V0IiwKQEAgLTc2LDcgKzgxLDcgQEAKICAgICAiVGVzdEhhbmRsZXIiLCAiTWF0Y2hlciIsICJjYW5fc3ltbGluayIsICJza2lwX3VubGVzc19zeW1saW5rIiwKICAgICAic2tpcF91bmxlc3NfeGF0dHIiLCAiaW1wb3J0X2ZyZXNoX21vZHVsZSIsICJyZXF1aXJlc196bGliIiwKICAgICAiUElQRV9NQVhfU0laRSIsICJmYWlsZmFzdCIsICJhbnRpY2lwYXRlX2ZhaWx1cmUiLCAicnVuX3dpdGhfdHoiLAotICAgICJyZXF1aXJlc19nemlwIiwgInJlcXVpcmVzX2J6MiIsICJyZXF1aXJlc19sem1hIiwgInN1cHByZXNzX2NyYXNoX3BvcHVwIiwKKyAgICAicmVxdWlyZXNfZ3ppcCIsICJyZXF1aXJlc19iejIiLCAicmVxdWlyZXNfbHptYSIsICJTdXBwcmVzc0NyYXNoUmVwb3J0IgogICAgIF0KIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKQEAgLTk4LDcgKzEwMyw4IEBACiAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHN1cHByZXNzIHBhY2thZ2UgYW5kIG1vZHVsZSBkZXByZWNhdGlvbgogICAgIHdhcm5pbmdzIHdoZW4gaW1wb3J0aW5nIHRoZW0uCiAKLSAgICBJZiBpZ25vcmUgaXMgRmFsc2UsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGhhcyBubyBlZmZlY3QuIiIiCisgICAgSWYgaWdub3JlIGlzIEZhbHNlLCB0aGlzIGNvbnRleHQgbWFuYWdlciBoYXMgbm8gZWZmZWN0LgorICAgICIiIgogICAgIGlmIGlnbm9yZToKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKyAobW9kdWxlfHBhY2thZ2UpIiwKQEAgLTEwOCwxNiArMTE0LDIxIEBACiAgICAgICAgIHlpZWxkCiAKIAotZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgZGVwcmVjYXRlZD1GYWxzZSk6CitkZWYgaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlLCAqLCByZXF1aXJlZF9vbj0oKSk6CiAgICAgIiIiSW1wb3J0IGFuZCByZXR1cm4gdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQsIHJhaXNpbmcgU2tpcFRlc3QgaWYKICAgICBpdCBpcyBub3QgYXZhaWxhYmxlLgogCiAgICAgSWYgZGVwcmVjYXRlZCBpcyBUcnVlLCBhbnkgbW9kdWxlIG9yIHBhY2thZ2UgZGVwcmVjYXRpb24gbWVzc2FnZXMKLSAgICB3aWxsIGJlIHN1cHByZXNzZWQuIiIiCisgICAgd2lsbCBiZSBzdXBwcmVzc2VkLiBJZiBhIG1vZHVsZSBpcyByZXF1aXJlZCBvbiBhIHBsYXRmb3JtIGJ1dCBvcHRpb25hbCBmb3IKKyAgICBvdGhlcnMsIHNldCByZXF1aXJlZF9vbiB0byBhbiBpdGVyYWJsZSBvZiBwbGF0Zm9ybSBwcmVmaXhlcyB3aGljaCB3aWxsIGJlCisgICAgY29tcGFyZWQgYWdhaW5zdCBzeXMucGxhdGZvcm0uCisgICAgIiIiCiAgICAgd2l0aCBfaWdub3JlX2RlcHJlY2F0ZWRfaW1wb3J0cyhkZXByZWNhdGVkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0dXBsZShyZXF1aXJlZF9vbikpOgorICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdHIobXNnKSkKIAogCkBAIC0zMDMsMjUgKzMxNCwyMCBAQAogZGVmIHVubGluayhmaWxlbmFtZSk6CiAgICAgdHJ5OgogICAgICAgICBfdW5saW5rKGZpbGVuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBmaWxlbmFtZSBuZWVkIG5vdCBleGlzdC4KLSAgICAgICAgaWYgZXJyb3IuZXJybm8gbm90IGluIChlcnJuby5FTk9FTlQsIGVycm5vLkVOT1RESVIpOgotICAgICAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBOb3RBRGlyZWN0b3J5RXJyb3IpOgorICAgICAgICBwYXNzCiAKIGRlZiBybWRpcihkaXJuYW1lKToKICAgICB0cnk6CiAgICAgICAgIF9ybWRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBkaXJlY3RvcnkgbmVlZCBub3QgZXhpc3QuCi0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBybXRyZWUocGF0aCk6CiAgICAgdHJ5OgogICAgICAgICBfcm10cmVlKHBhdGgpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBtYWtlX2xlZ2FjeV9weWMoc291cmNlKToKICAgICAiIiJNb3ZlIGEgUEVQIDMxNDcgcHljL3B5byBmaWxlIHRvIGl0cyBsZWdhY3kgcHljL3B5byBsb2NhdGlvbi4KQEAgLTMzMyw3ICszMzksNyBAQAogICAgICAgICBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0LCBob3dldmVyIHRoZSBQRVAgMzE0NyBweWMgZmlsZSBtdXN0IGV4aXN0LgogICAgIDpyZXR1cm46IFRoZSBmaWxlIHN5c3RlbSBwYXRoIHRvIHRoZSBsZWdhY3kgcHljIGZpbGUuCiAgICAgIiIiCi0gICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQorICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgIHVwX29uZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc291cmNlKSkKICAgICBsZWdhY3lfcHljID0gb3MucGF0aC5qb2luKHVwX29uZSwgc291cmNlICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpKQogICAgIG9zLnJlbmFtZShweWNfZmlsZSwgbGVnYWN5X3B5YykKQEAgLTM1Miw4ICszNTgsOCBAQAogICAgICAgICAjIGNvbWJpbmF0aW9ucyBvZiBQRVAgMzE0NyBhbmQgbGVnYWN5IHB5YyBhbmQgcHlvIGZpbGVzLgogICAgICAgICB1bmxpbmsoc291cmNlICsgJ2MnKQogICAgICAgICB1bmxpbmsoc291cmNlICsgJ28nKQotICAgICAgICB1bmxpbmsoaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCi0gICAgICAgIHVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCisgICAgICAgIHVubGluayhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPVRydWUpKQorICAgICAgICB1bmxpbmsoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKICMgT24gc29tZSBwbGF0Zm9ybXMsIHNob3VsZCBub3QgcnVuIGd1aSB0ZXN0IGV2ZW4gaWYgaXQgaXMgYWxsb3dlZAogIyBpbiBgdXNlX3Jlc291cmNlcycuCkBAIC01MTQsNyArNTIwLDcgQEAKICAgICB0aGUgU09fUkVVU0VBRERSIHNvY2tldCBvcHRpb24gaGF2aW5nIGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gV2luZG93cyB2ZXJzdXMKICAgICBVbml4L0xpbnV4LiAgT24gVW5peCwgeW91IGNhbid0IGhhdmUgdHdvIEFGX0lORVQgU09DS19TVFJFQU0gc29ja2V0cyBiaW5kLAogICAgIGxpc3RlbiBhbmQgdGhlbiBhY2NlcHQgY29ubmVjdGlvbnMgb24gaWRlbnRpY2FsIGhvc3QvcG9ydHMuICBBbiBFQUREUklOVVNFCi0gICAgc29ja2V0LmVycm9yIHdpbGwgYmUgcmFpc2VkIGF0IHNvbWUgcG9pbnQgKGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kCisgICAgT1NFcnJvciB3aWxsIGJlIHJhaXNlZCBhdCBzb21lIHBvaW50IChkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGFuZAogICAgIHRoZSBvcmRlciBiaW5kIGFuZCBsaXN0ZW4gd2VyZSBjYWxsZWQgb24gZWFjaCBzb2NrZXQpLgogCiAgICAgSG93ZXZlciwgb24gV2luZG93cywgaWYgU09fUkVVU0VBRERSIGlzIHNldCBvbiB0aGUgc29ja2V0cywgbm8gRUFERFJJTlVTRQpAQCAtNTg2LDkgKzU5Miw5IEBACiAgICAgICAgIHNvY2sgPSBOb25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgc29jay5iaW5kKCgnOjoxJywgMCkpCisgICAgICAgICAgICBzb2NrLmJpbmQoKEhPU1R2NiwgMCkpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc29ja2V0LmdhaWVycm9yKToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBzb2NrOgpAQCAtMTE3NSw5ICsxMTgxLDkgQEAKICMgQ29udGV4dCBtYW5hZ2VycyB0aGF0IHJhaXNlIFJlc291cmNlRGVuaWVkIHdoZW4gdmFyaW91cyBpc3N1ZXMKICMgd2l0aCB0aGUgSW50ZXJuZXQgY29ubmVjdGlvbiBtYW5pZmVzdCB0aGVtc2VsdmVzIGFzIGV4Y2VwdGlvbnMuCiAjIFhYWCBkZXByZWNhdGUgdGhlc2UgYW5kIHVzZSB0cmFuc2llbnRfaW50ZXJuZXQoKSBpbnN0ZWFkCi10aW1lX291dCA9IFRyYW5zaWVudFJlc291cmNlKElPRXJyb3IsIGVycm5vPWVycm5vLkVUSU1FRE9VVCkKLXNvY2tldF9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2Uoc29ja2V0LmVycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQotaW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoSU9FcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKK3RpbWVfb3V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRVRJTUVET1VUKQorc29ja2V0X3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShPU0Vycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQoraW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKIAogCiBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgpAQCAtMTIyMywxNyArMTIyOSwxNyBAQAogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KHRpbWVvdXQpCiAgICAgICAgIHlpZWxkCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgIyB1cmxsaWIgY2FuIHdyYXAgb3JpZ2luYWwgc29ja2V0IGVycm9ycyBtdWx0aXBsZSB0aW1lcyAoISksIHdlIG11c3QKICAgICAgICAgIyB1bndyYXAgdG8gZ2V0IGF0IHRoZSBvcmlnaW5hbCBlcnJvci4KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGEgPSBlcnIuYXJncwotICAgICAgICAgICAgaWYgbGVuKGEpID49IDEgYW5kIGlzaW5zdGFuY2UoYVswXSwgSU9FcnJvcik6CisgICAgICAgICAgICBpZiBsZW4oYSkgPj0gMSBhbmQgaXNpbnN0YW5jZShhWzBdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzBdCiAgICAgICAgICAgICAjIFRoZSBlcnJvciBjYW4gYWxzbyBiZSB3cmFwcGVkIGFzIGFyZ3NbMV06CiAgICAgICAgICAgICAjICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgIyAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKLSAgICAgICAgICAgIGVsaWYgbGVuKGEpID49IDIgYW5kIGlzaW5zdGFuY2UoYVsxXSwgSU9FcnJvcik6CisgICAgICAgICAgICAjICAgICAgICByYWlzZSBPU0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQorICAgICAgICAgICAgZWxpZiBsZW4oYSkgPj0gMiBhbmQgaXNpbnN0YW5jZShhWzFdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzFdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xNjkxLDkgKzE2OTcsMTggQEAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGRvY3N0cmluZ3MuCiAKLUhBVkVfRE9DU1RSSU5HUyA9IChjaGVja19pbXBsX2RldGFpbChjcHl0aG9uPUZhbHNlKSBvcgotICAgICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yCi0gICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX0RPQ19TVFJJTkdTJykpCisjIFJhdGhlciB0aGFuIHRyeWluZyB0byBlbnVtZXJhdGUgYWxsIHRoZSBjYXNlcyB3aGVyZSBkb2NzdHJpbmdzIG1heSBiZQorIyBkaXNhYmxlZCwgd2UganVzdCBjaGVjayBmb3IgdGhhdCBkaXJlY3RseQorCitkZWYgX2NoZWNrX2RvY3N0cmluZ3MoKToKKyAgICAiIiJKdXN0IHVzZWQgdG8gY2hlY2sgaWYgZG9jc3RyaW5ncyBhcmUgZW5hYmxlZCIiIgorCitNSVNTSU5HX0NfRE9DU1RSSU5HUyA9IChjaGVja19pbXBsX2RldGFpbCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtICE9ICd3aW4zMicgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX0RPQ19TVFJJTkdTJykpCisKK0hBVkVfRE9DU1RSSU5HUyA9IChfY2hlY2tfZG9jc3RyaW5ncy5fX2RvY19fIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgIG5vdCBNSVNTSU5HX0NfRE9DU1RSSU5HUykKIAogcmVxdWlyZXNfZG9jc3RyaW5ncyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9ET0NTVFJJTkdTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCkBAIC0xNzY4LDEyICsxNzgzLDEyIEBACiBkZWYgdGhyZWFkaW5nX2NsZWFudXAoKm9yaWdpbmFsX3ZhbHVlcyk6CiAgICAgaWYgbm90IF90aHJlYWQ6CiAgICAgICAgIHJldHVybgotICAgIF9NQVhfQ09VTlQgPSAxMAorICAgIF9NQVhfQ09VTlQgPSAxMDAKICAgICBmb3IgY291bnQgaW4gcmFuZ2UoX01BWF9DT1VOVCk6CiAgICAgICAgIHZhbHVlcyA9IF90aHJlYWQuX2NvdW50KCksIHRocmVhZGluZy5fZGFuZ2xpbmcKICAgICAgICAgaWYgdmFsdWVzID09IG9yaWdpbmFsX3ZhbHVlczoKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAgICAgICAgIGdjX2NvbGxlY3QoKQogICAgICMgWFhYIHByaW50IGEgd2FybmluZyBpbiBjYXNlIG9mIGZhaWx1cmU/CiAKQEAgLTE4NzUsNyArMTg5MCw3IEBACiAgICAgVGhpcyB3aWxsIHR5cGljYWxseSBiZSBydW4gb24gdGhlIHJlc3VsdCBvZiB0aGUgY29tbXVuaWNhdGUoKSBtZXRob2QKICAgICBvZiBhIHN1YnByb2Nlc3MuUG9wZW4gb2JqZWN0LgogICAgICIiIgotICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzXF1ccj9cbj8iLCBiIiIsIHN0ZGVycikuc3RyaXAoKQorICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzLCBcZCsgYmxvY2tzXF1ccj9cbj8iLCBiIiIsIHN0ZGVycikuc3RyaXAoKQogICAgIHJldHVybiBzdGRlcnIKIAogZGVmIGFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpOgpAQCAtMjAwNiwyNyArMjAyMSw2NyBAQAogICAgIHJldHVybiB0ZXN0IGlmIG9rIGVsc2UgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpCiAKIAotaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIHN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgICIiIkRpc2FibGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZyBTZXRFcnJvck1vZGUuIiIiCi0gICAgICAgICMgc2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjElMjh2PXZzLjg1JTI5LmFzcHgKLSAgICAgICAgIyBHZXRFcnJvck1vZGUgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIFhQIGFuZCBXaW5kb3dzIFNlcnZlciAyMDAzLAotICAgICAgICAjIGJ1dCBTZXRFcnJvck1vZGUgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUsIHNvIHdlIGNhbiB1c2UgdGhhdAotICAgICAgICBpbXBvcnQgY3R5cGVzCi0gICAgICAgIGszMiA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIKLSAgICAgICAgU0VNX05PR1BGQVVMVEVSUk9SQk9YID0gMHgwMgotICAgICAgICBvbGRfZXJyb3JfbW9kZSA9IGszMi5TZXRFcnJvck1vZGUoU0VNX05PR1BGQVVMVEVSUk9SQk9YKQotICAgICAgICBrMzIuU2V0RXJyb3JNb2RlKG9sZF9lcnJvcl9tb2RlIHwgU0VNX05PR1BGQVVMVEVSUk9SQk9YKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB5aWVsZAotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgazMyLlNldEVycm9yTW9kZShvbGRfZXJyb3JfbW9kZSkKLWVsc2U6Ci0gICAgIyB0aGlzIGlzIGEgbm8tb3AgZm9yIG90aGVyIHBsYXRmb3JtcwotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIHN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgIHlpZWxkCitjbGFzcyBTdXBwcmVzc0NyYXNoUmVwb3J0OgorICAgICIiIlRyeSB0byBwcmV2ZW50IGEgY3Jhc2ggcmVwb3J0IGZyb20gcG9wcGluZyB1cC4KKworICAgIE9uIFdpbmRvd3MsIGRvbid0IGRpc3BsYXkgdGhlIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZy4gIE9uIFVOSVgsCisgICAgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgY29yZWR1bXAgZmlsZS4KKyAgICAiIiIKKyAgICBvbGRfdmFsdWUgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAiIiJPbiBXaW5kb3dzLCBkaXNhYmxlIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZ3MgdXNpbmcKKyAgICAgICAgU2V0RXJyb3JNb2RlLgorCisgICAgICAgIE9uIFVOSVgsIHRyeSB0byBzYXZlIHRoZSBwcmV2aW91cyBjb3JlIGZpbGUgc2l6ZSBsaW1pdCwgdGhlbiBzZXQKKyAgICAgICAgc29mdCBsaW1pdCB0byAwLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgIyBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMS5hc3B4CisgICAgICAgICAgICAjIEdldEVycm9yTW9kZSBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgWFAgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDMsCisgICAgICAgICAgICAjIGJ1dCBTZXRFcnJvck1vZGUgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUsIHNvIHdlIGNhbiB1c2UgdGhhdAorICAgICAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICAgICAgc2VsZi5fazMyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMgorICAgICAgICAgICAgU0VNX05PR1BGQVVMVEVSUk9SQk9YID0gMHgwMgorICAgICAgICAgICAgc2VsZi5vbGRfdmFsdWUgPSBzZWxmLl9rMzIuU2V0RXJyb3JNb2RlKFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKKyAgICAgICAgICAgIHNlbGYuX2szMi5TZXRFcnJvck1vZGUoc2VsZi5vbGRfdmFsdWUgfCBTRU1fTk9HUEZBVUxURVJST1JCT1gpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYub2xkX3ZhbHVlID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFKQorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgc2VsZi5vbGRfdmFsdWVbMV0pKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSAnQ3Jhc2ggUmVwb3J0ZXInIG9uIE9TWCB3YXMgY29uZmlndXJlZAorICAgICAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAorICAgICAgICAgICAgICAgICMgd2hlbiBpdCBpcy4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCisgICAgICAgICAgICAgICAgIyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG5leHQgbWFuYWdlci4KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jpbi9kZWZhdWx0cycsICdyZWFkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdjb20uYXBwbGUuQ3Jhc2hSZXBvcnRlcicsICdEaWFsb2dUeXBlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICAgICAgaWYgdmFsdWUuc3RyaXAoKSA9PSBiJ2RldmVsb3Blcic6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJ0aGlzIHRlc3QgdHJpZ2dlcnMgdGhlIENyYXNoIFJlcG9ydGVyLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IGlzIGludGVudGlvbmFsIiwgZW5kPScnLCBmbHVzaD1UcnVlKQorCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmlnbm9yZV9leGMpOgorICAgICAgICAiIiJSZXN0b3JlIFdpbmRvd3MgRXJyb3JNb2RlIG9yIGNvcmUgZmlsZSBiZWhhdmlvciB0byBpbml0aWFsIHZhbHVlLiIiIgorICAgICAgICBpZiBzZWxmLm9sZF92YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgc2VsZi5fazMyLlNldEVycm9yTW9kZShzZWxmLm9sZF92YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCBzZWxmLm9sZF92YWx1ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKIAogZGVmIHBhdGNoKHRlc3RfaW5zdGFuY2UsIG9iamVjdF90b19wYXRjaCwgYXR0cl9uYW1lLCBuZXdfdmFsdWUpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CmluZGV4IDYwOGVjMDEuLjhjYzI4NWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKQEAgLTI5LDE3ICsyOSwyMCBAQAogICAgICAgICBpZiBub3QgaGFzYXR0cihzeXMubW9kdWxlc1ttb2RuYW1lXSwgIl9fYWxsX18iKToKICAgICAgICAgICAgIHJhaXNlIE5vQWxsKG1vZG5hbWUpCiAgICAgICAgIG5hbWVzID0ge30KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlYygiZnJvbSAlcyBpbXBvcnQgKiIgJSBtb2RuYW1lLCBuYW1lcykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgIyBJbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUgZXhjZXB0aW9uIHN0cmluZwotICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2FsbF9fIGZhaWx1cmUgaW4ge306IHt9OiB7fSIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsIGUuX19jbGFzc19fLl9fbmFtZV9fLCBlKSkKLSAgICAgICAgaWYgIl9fYnVpbHRpbnNfXyIgaW4gbmFtZXM6Ci0gICAgICAgICAgICBkZWwgbmFtZXNbIl9fYnVpbHRpbnNfXyJdCi0gICAgICAgIGtleXMgPSBzZXQobmFtZXMpCi0gICAgICAgIGFsbCA9IHNldChzeXMubW9kdWxlc1ttb2RuYW1lXS5fX2FsbF9fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIGFsbCkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobW9kdWxlPW1vZG5hbWUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4ZWMoImZyb20gJXMgaW1wb3J0ICoiICUgbW9kbmFtZSwgbmFtZXMpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUgZXhjZXB0aW9uIHN0cmluZworICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiX19hbGxfXyBmYWlsdXJlIGluIHt9OiB7fToge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgZS5fX2NsYXNzX18uX19uYW1lX18sIGUpKQorICAgICAgICAgICAgaWYgIl9fYnVpbHRpbnNfXyIgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgZGVsIG5hbWVzWyJfX2J1aWx0aW5zX18iXQorICAgICAgICAgICAga2V5cyA9IHNldChuYW1lcykKKyAgICAgICAgICAgIGFsbF9saXN0ID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0uX19hbGxfXworICAgICAgICAgICAgYWxsX3NldCA9IHNldChhbGxfbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChhbGxfc2V0LCBhbGxfbGlzdCwgImluIG1vZHVsZSB7fSIuZm9ybWF0KG1vZG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBhbGxfc2V0LCAiaW4gbW9kdWxlIHt9Ii5mb3JtYXQobW9kbmFtZSkpCiAKICAgICBkZWYgd2Fsa19tb2R1bGVzKHNlbGYsIGJhc2VkaXIsIG1vZHBhdGgpOgogICAgICAgICBmb3IgZm4gaW4gc29ydGVkKG9zLmxpc3RkaXIoYmFzZWRpcikpOgpAQCAtMTEwLDggKzExMyw1IEBACiAgICAgICAgICAgICBwcmludCgnRm9sbG93aW5nIG1vZHVsZXMgZmFpbGVkIHRvIGJlIGltcG9ydGVkOicsIGZhaWxlZF9pbXBvcnRzKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBbGxUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CmluZGV4IGQ0ZDc1NTYuLjkzZjlkYWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CkBAIC02OCw2ICs2OCwxOSBAQAogCiBjbGFzcyBUZXN0QUJDKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X0FCQ19oZWxwZXIoc2VsZik6CisgICAgICAgICMgY3JlYXRlIGFuIEFCQyB1c2luZyB0aGUgaGVscGVyIGNsYXNzIGFuZCBwZXJmb3JtIGJhc2ljIGNoZWNrcworICAgICAgICBjbGFzcyBDKGFiYy5BQkMpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHJldHVybiBjbHMuX19uYW1lX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKEMpLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHJldHVybiBzdXBlcigpLmZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5mb28oKSwgJ0QnKQorCiAgICAgZGVmIHRlc3RfYWJzdHJhY3RtZXRob2RfYmFzaWNzKHNlbGYpOgogICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgICAgIGRlZiBmb28oc2VsZik6IHBhc3MKQEAgLTI4OCw3ICszMDEsMTAgQEAKICAgICAgICAgYiA9IEIoKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoYiwgQSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShiLCAoQSwpKSkKKyAgICAgICAgdG9rZW5fb2xkID0gYWJjLmdldF9jYWNoZV90b2tlbigpCiAgICAgICAgIEEucmVnaXN0ZXIoQikKKyAgICAgICAgdG9rZW5fbmV3ID0gYWJjLmdldF9jYWNoZV90b2tlbigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodG9rZW5fb2xkLCB0b2tlbl9uZXcpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGIsIEEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCAoQSwpKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9haWZjLnB5IGIvTGliL3Rlc3QvdGVzdF9haWZjLnB5CmluZGV4IGI3NzM1NGIuLjNlOWExZDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FpZmMucHkKQEAgLTE2Niw2ICsxNjYsMjEgQEAKICAgICAgICAgI1RoaXMgZmlsZSBjb250YWlucyBjaHVuayB0eXBlcyBhaWZjIGRvZXNuJ3QgcmVjb2duaXplLgogICAgICAgICBzZWxmLmYgPSBhaWZjLm9wZW4oZmluZGZpbGUoJ1NpbmUtMTAwMEh6LTMwMG1zLmFpZicpKQogCisgICAgZGVmIHRlc3RfcGFyYW1zX2FkZGVkKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgZi5haWZmKCkKKyAgICAgICAgZi5zZXRwYXJhbXMoKDEsIDEsIDEsIDEsIGInTk9ORScsIGInJykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgZi5nZXRuY2hhbm5lbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBmLmdldHNhbXB3aWR0aCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIGYuZ2V0ZnJhbWVyYXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5mcmFtZXMsIGYuZ2V0bmZyYW1lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wdHlwZSwgZi5nZXRjb21wdHlwZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wbmFtZSwgZi5nZXRjb21wbmFtZSgpKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfaGVhZGVyX2NvbXB0eXBlX3NhbXB3aWR0aChzZWxmKToKICAgICAgICAgZm9yIGNvbXB0eXBlIGluIChiJ1VMQVcnLCBiJ3VsYXcnLCBiJ0FMQVcnLCBiJ2FsYXcnLCBiJ0c3MjInKToKICAgICAgICAgICAgIGZvdXQgPSBhaWZjLm9wZW4oaW8uQnl0ZXNJTygpLCAnd2InKQpAQCAtMzY5LDEyICszODQsMTQgQEAKIAogICAgIGRlZiB0ZXN0X3dyaXRlX2FpZmZfYnlfZXh0ZW5zaW9uKHNlbGYpOgogICAgICAgICBzYW1wd2lkdGggPSAyCi0gICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oVEVTVEZOICsgJy5haWZmJywgJ3diJykKKyAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAnLmFpZmYnCisgICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oZmlsZW5hbWUsICd3YicpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIGZpbGVuYW1lKQogICAgICAgICBmb3V0LnNldHBhcmFtcygoMSwgc2FtcHdpZHRoLCAxLCAxLCBiJ1VMQVcnLCBiJycpKQogICAgICAgICBmcmFtZXMgPSBiJ1x4MDAnICogZm91dC5nZXRuY2hhbm5lbHMoKSAqIHNhbXB3aWR0aAogICAgICAgICBmb3V0LndyaXRlZnJhbWVzKGZyYW1lcykKICAgICAgICAgZm91dC5jbG9zZSgpCi0gICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOICsgJy5haWZmJywgJ3JiJykKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihmaWxlbmFtZSwgJ3JiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGNvbXB0eXBlKCksIGInTk9ORScpCiAgICAgICAgIGYuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQppbmRleCBjMDZjOTQwLi5jMTBjNTkwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkKQEAgLTE0LDYgKzE0LDcgQEAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogY2xhc3MgU3RkSU9CdWZmZXIoU3RyaW5nSU8pOgogICAgIHBhc3MKIApAQCAtMTQyMSw2ICsxNDIyLDE5IEBACiAgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgnd2InLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgnd2InLCAxKSIsIHJlcHIodHlwZSkpCiAKKyAgICBkZWYgdGVzdF9yX2xhdGluKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3InLCBlbmNvZGluZz0nbGF0aW5fMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCdyJywgZW5jb2Rpbmc9J2xhdGluXzEnKSIsIHJlcHIodHlwZSkpCisKKyAgICBkZWYgdGVzdF93X2JpZzVfaWdub3JlKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3cnLCBlbmNvZGluZz0nYmlnNScsIGVycm9ycz0naWdub3JlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3cnLCBlbmNvZGluZz0nYmlnNScsIGVycm9ycz0naWdub3JlJykiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIodHlwZSkpCisKKyAgICBkZWYgdGVzdF9yXzFfcmVwbGFjZShzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCdyJywgMSwgZXJyb3JzPSdyZXBsYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3InLCAxLCBlcnJvcnM9J3JlcGxhY2UnKSIsIHJlcHIodHlwZSkpCisKIAogY2xhc3MgUkZpbGUob2JqZWN0KToKICAgICBzZWVuID0ge30KQEAgLTE1NTcsNiArMTU3MSwyNCBAQAogICAgIF0KIAogCitjbGFzcyBUZXN0RmlsZVR5cGVPcGVuQXJncyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IG9wZW4gKHRoZSBidWlsdGluKSBpcyBjb3JyZWN0bHkgY2FsbGVkIiIiCisKKyAgICBkZWYgdGVzdF9vcGVuX2FyZ3Moc2VsZik6CisgICAgICAgIEZUID0gYXJncGFyc2UuRmlsZVR5cGUKKyAgICAgICAgY2FzZXMgPSBbCisgICAgICAgICAgICAoRlQoJ3JiJyksICgncmInLCAtMSwgTm9uZSwgTm9uZSkpLAorICAgICAgICAgICAgKEZUKCd3JywgMSksICgndycsIDEsIE5vbmUsIE5vbmUpKSwKKyAgICAgICAgICAgIChGVCgndycsIGVycm9ycz0ncmVwbGFjZScpLCAoJ3cnLCAtMSwgTm9uZSwgJ3JlcGxhY2UnKSksCisgICAgICAgICAgICAoRlQoJ3diJywgZW5jb2Rpbmc9J2JpZzUnKSwgKCd3YicsIC0xLCAnYmlnNScsIE5vbmUpKSwKKyAgICAgICAgICAgIChGVCgndycsIDAsICdsMScsICdzdHJpY3QnKSwgKCd3JywgMCwgJ2wxJywgJ3N0cmljdCcpKSwKKyAgICAgICAgXQorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2J1aWx0aW5zLm9wZW4nKSBhcyBtOgorICAgICAgICAgICAgZm9yIHR5cGUsIGFyZ3MgaW4gY2FzZXM6CisgICAgICAgICAgICAgICAgdHlwZSgnZm9vJykKKyAgICAgICAgICAgICAgICBtLmFzc2VydF9jYWxsZWRfd2l0aCgnZm9vJywgKmFyZ3MpCisKKwogY2xhc3MgVGVzdFR5cGVDYWxsYWJsZShQYXJzZXJUZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCBzb21lIGNhbGxhYmxlcyBhcyBvcHRpb24vYXJndW1lbnQgdHlwZXMiIiIKIApAQCAtNDMyNyw3ICs0MzU5LDcgQEAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2Zvcm1hdChzZWxmKToKICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFBQJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMy41JykKLSAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy12J10pLnN0ZGVycgorICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLXYnXSkuc3Rkb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1BQUCAzLjVcbicsIG1zZykKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9faGVscChzZWxmKToKQEAgLTQzNDAsNyArNDM3Miw3IEBACiAgICAgZGVmIHRlc3RfdmVyc2lvbl9hY3Rpb24oc2VsZik6CiAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1hYWCcpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1WJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMy43JykKLSAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy1WJ10pLnN0ZGVycgorICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLVYnXSkuc3Rkb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1hYWCAzLjdcbicsIG1zZykKIAogICAgIGRlZiB0ZXN0X25vX2hlbHAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5IGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQppbmRleCBmMjFiNjlmLi5hNDRlZTA3IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKQEAgLTM1MywxMiArMzUzLDEyIEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2Zyb21maWxlX2lvZXJyb3Ioc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzUzOTU6IENoZWNrIGlmIGZyb21maWxlIHJhaXNlcyBhIHByb3BlciBJT0Vycm9yCisgICAgICAgICMgSXNzdWUgIzUzOTU6IENoZWNrIGlmIGZyb21maWxlIHJhaXNlcyBhIHByb3BlciBPU0Vycm9yCiAgICAgICAgICMgaW5zdGVhZCBvZiBFT0ZFcnJvci4KICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCiAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBhLmZyb21maWxlLCBmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGEuZnJvbWZpbGUsIGYsIGxlbihzZWxmLmV4YW1wbGUpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9hc3QucHkKaW5kZXggNjM1Mjg4OC4uZTY5NDIyYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3QucHkKQEAgLTE4MCwyMCArMTgwLDM2IEBACiAKIGNsYXNzIEFTVF9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgX2Fzc2VydFRydWVvcmRlcihzZWxmLCBhc3Rfbm9kZSwgcGFyZW50X3Bvcyk6CisgICAgZGVmIF9hc3NlcnRUcnVlb3JkZXIoc2VsZiwgYXN0X25vZGUsIHBhcmVudF9wb3MsIHJldmVyc2VfY2hlY2sgPSBGYWxzZSk6CisgICAgICAgIGRlZiBzaG91bGRfcmV2ZXJzZV9jaGVjayhwYXJlbnQsIGNoaWxkKToKKyAgICAgICAgICAgICMgSW4gc29tZSBzaXR1YXRpb25zLCB0aGUgY2hpbGRyZW4gb2Ygbm9kZXMgb2NjdXIgYmVmb3JlCisgICAgICAgICAgICAjIHRoZWlyIHBhcmVudHMsIGZvciBleGFtcGxlIGluIGEuYi5jLCBhIG9jY3VycyBiZWZvcmUgYgorICAgICAgICAgICAgIyBidXQgYSBpcyBhIGNoaWxkIG9mIGIuCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmVudCwgYXN0LkNhbGwpOgorICAgICAgICAgICAgICAgIGlmIHBhcmVudC5mdW5jID09IGNoaWxkOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJlbnQsIChhc3QuQXR0cmlidXRlLCBhc3QuU3Vic2NyaXB0KSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFzdF9ub2RlLCBhc3QuQVNUKSBvciBhc3Rfbm9kZS5fZmllbGRzIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgaXNpbnN0YW5jZShhc3Rfbm9kZSwgKGFzdC5leHByLCBhc3Quc3RtdCwgYXN0LmV4Y2VwdGhhbmRsZXIpKToKICAgICAgICAgICAgIG5vZGVfcG9zID0gKGFzdF9ub2RlLmxpbmVubywgYXN0X25vZGUuY29sX29mZnNldCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlX3BvcyA+PSBwYXJlbnRfcG9zKQorICAgICAgICAgICAgaWYgcmV2ZXJzZV9jaGVjazoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZV9wb3MgPD0gcGFyZW50X3BvcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGVfcG9zID49IHBhcmVudF9wb3MpCiAgICAgICAgICAgICBwYXJlbnRfcG9zID0gKGFzdF9ub2RlLmxpbmVubywgYXN0X25vZGUuY29sX29mZnNldCkKICAgICAgICAgZm9yIG5hbWUgaW4gYXN0X25vZGUuX2ZpZWxkczoKICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihhc3Rfbm9kZSwgbmFtZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgogICAgICAgICAgICAgICAgIGZvciBjaGlsZCBpbiB2YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKGNoaWxkLCBwYXJlbnRfcG9zKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIoY2hpbGQsIHBhcmVudF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZF9yZXZlcnNlX2NoZWNrKGFzdF9ub2RlLCBjaGlsZCkpCiAgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcih2YWx1ZSwgcGFyZW50X3BvcykKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIodmFsdWUsIHBhcmVudF9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZF9yZXZlcnNlX2NoZWNrKGFzdF9ub2RlLCB2YWx1ZSkpCiAKICAgICBkZWYgdGVzdF9BU1Rfb2JqZWN0cyhzZWxmKToKICAgICAgICAgeCA9IGFzdC5BU1QoKQpAQCAtMjYyLDE0ICsyNzgsMTQgQEAKIAogICAgIGRlZiB0ZXN0X2FyZ3VtZW50cyhzZWxmKToKICAgICAgICAgeCA9IGFzdC5hcmd1bWVudHMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgKCdhcmdzJywgJ3ZhcmFyZycsICd2YXJhcmdhbm5vdGF0aW9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3b25seWFyZ3MnLCAna3dhcmcnLCAna3dhcmdhbm5vdGF0aW9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRzJywgJ2t3X2RlZmF1bHRzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCAoJ2FyZ3MnLCAndmFyYXJnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3b25seWFyZ3MnLCAna3dfZGVmYXVsdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dhcmcnLCAnZGVmYXVsdHMnKSkKIAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIHgudmFyYXJnCiAKLSAgICAgICAgeCA9IGFzdC5hcmd1bWVudHMoKnJhbmdlKDEsIDkpKQorICAgICAgICB4ID0gYXN0LmFyZ3VtZW50cygqcmFuZ2UoMSwgNykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YXJhcmcsIDIpCiAKICAgICBkZWYgdGVzdF9maWVsZF9hdHRyX3dyaXRhYmxlKHNlbGYpOgpAQCAtNDM5LDcgKzQ1NSw3IEBACiAgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGFyZ3M9W05hbWUoaWQ9J2VnZ3MnLCBjdHg9TG9hZCgpLCAiCiAgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9NSksIFN0cihzPSdhbmQgY2hlZXNlJywgbGluZW5vPTEsICIKICAgICAgICAgICAgICJjb2xfb2Zmc2V0PTExKV0sIGtleXdvcmRzPVtdLCBzdGFyYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgIgotICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBsaW5lbm89MSwgY29sX29mZnNldD0wKV0pIgorICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTQpLCBsaW5lbm89MSwgY29sX29mZnNldD0wKV0pIgogICAgICAgICApCiAKICAgICBkZWYgdGVzdF9jb3B5X2xvY2F0aW9uKHNlbGYpOgpAQCAtNDYwLDcgKzQ3Niw3IEBACiAgICAgICAgICAgICAiTW9kdWxlKGJvZHk9W0V4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3dyaXRlJywgY3R4PUxvYWQoKSwgIgogICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBhcmdzPVtTdHIocz0nc3BhbScsIGxpbmVubz0xLCAiCiAgICAgICAgICAgICAiY29sX29mZnNldD02KV0sIGtleXdvcmRzPVtdLCBzdGFyYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgIgotICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBsaW5lbm89MSwgY29sX29mZnNldD0wKSwgIgorICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTUpLCBsaW5lbm89MSwgY29sX29mZnNldD0wKSwgIgogICAgICAgICAgICAgIkV4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3NwYW0nLCBjdHg9TG9hZCgpLCBsaW5lbm89MSwgIgogICAgICAgICAgICAgImNvbF9vZmZzZXQ9MCksIGFyZ3M9W1N0cihzPSdlZ2dzJywgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldLCAiCiAgICAgICAgICAgICAia2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCBsaW5lbm89MSwgIgpAQCAtNTYwLDggKzU3Niw4IEBACiAgICAgICAgIHNlbGYubW9kKG0sICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IiwgImV2YWwiKQogCiAgICAgZGVmIF9jaGVja19hcmd1bWVudHMoc2VsZiwgZmFjLCBjaGVjayk6Ci0gICAgICAgIGRlZiBhcmd1bWVudHMoYXJncz1Ob25lLCB2YXJhcmc9Tm9uZSwgdmFyYXJnYW5ub3RhdGlvbj1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3M9Tm9uZSwga3dhcmc9Tm9uZSwga3dhcmdhbm5vdGF0aW9uPU5vbmUsCisgICAgICAgIGRlZiBhcmd1bWVudHMoYXJncz1Ob25lLCB2YXJhcmc9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBrd29ubHlhcmdzPU5vbmUsIGt3YXJnPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHM9Tm9uZSwga3dfZGVmYXVsdHM9Tm9uZSk6CiAgICAgICAgICAgICBpZiBhcmdzIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgYXJncyA9IFtdCkBAIC01NzEsMjAgKzU4NywxMiBAQAogICAgICAgICAgICAgICAgIGRlZmF1bHRzID0gW10KICAgICAgICAgICAgIGlmIGt3X2RlZmF1bHRzIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAga3dfZGVmYXVsdHMgPSBbXQotICAgICAgICAgICAgYXJncyA9IGFzdC5hcmd1bWVudHMoYXJncywgdmFyYXJnLCB2YXJhcmdhbm5vdGF0aW9uLCBrd29ubHlhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmcsIGt3YXJnYW5ub3RhdGlvbiwgZGVmYXVsdHMsIGt3X2RlZmF1bHRzKQorICAgICAgICAgICAgYXJncyA9IGFzdC5hcmd1bWVudHMoYXJncywgdmFyYXJnLCBrd29ubHlhcmdzLCBrd19kZWZhdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnLCBkZWZhdWx0cykKICAgICAgICAgICAgIHJldHVybiBmYWMoYXJncykKICAgICAgICAgYXJncyA9IFthc3QuYXJnKCJ4IiwgYXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSkpXQogICAgICAgICBjaGVjayhhcmd1bWVudHMoYXJncz1hcmdzKSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQotICAgICAgICBjaGVjayhhcmd1bWVudHModmFyYXJnYW5ub3RhdGlvbj1hc3QuTnVtKDMpKSwKLSAgICAgICAgICAgICAgInZhcmFyZ2Fubm90YXRpb24gYnV0IG5vIHZhcmFyZyIpCi0gICAgICAgIGNoZWNrKGFyZ3VtZW50cyh2YXJhcmdhbm5vdGF0aW9uPWFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpLCB2YXJhcmc9IngiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhrd29ubHlhcmdzPWFyZ3MpLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCi0gICAgICAgIGNoZWNrKGFyZ3VtZW50cyhrd2FyZ2Fubm90YXRpb249YXN0Lk51bSg0MikpLAotICAgICAgICAgICAgICAgICAgICAgICAia3dhcmdhbm5vdGF0aW9uIGJ1dCBubyBrd2FyZyIpCi0gICAgICAgIGNoZWNrKGFyZ3VtZW50cyhrd2FyZ2Fubm90YXRpb249YXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnPSJ4IiksICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKICAgICAgICAgY2hlY2soYXJndW1lbnRzKGRlZmF1bHRzPVthc3QuTnVtKDMpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICJtb3JlIHBvc2l0aW9uYWwgZGVmYXVsdHMgdGhhbiBhcmdzIikKICAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3X2RlZmF1bHRzPVthc3QuTnVtKDQpXSksCkBAIC01OTksNyArNjA3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogCiAgICAgZGVmIHRlc3RfZnVuY2RlZihzZWxmKToKLSAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pCisgICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKQogICAgICAgICBmID0gYXN0LkZ1bmN0aW9uRGVmKCJ4IiwgYSwgW10sIFtdLCBOb25lKQogICAgICAgICBzZWxmLnN0bXQoZiwgImVtcHR5IGJvZHkgb24gRnVuY3Rpb25EZWYiKQogICAgICAgICBmID0gYXN0LkZ1bmN0aW9uRGVmKCJ4IiwgYSwgW2FzdC5QYXNzKCldLCBbYXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSldLApAQCAtNzcwLDcgKzc3OCw3IEBACiAgICAgICAgIHNlbGYuZXhwcih1LCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAKICAgICBkZWYgdGVzdF9sYW1iZGEoc2VsZik6Ci0gICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKQorICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSkKICAgICAgICAgc2VsZi5leHByKGFzdC5MYW1iZGEoYSwgYXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSkpLAogICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogICAgICAgICBkZWYgZmFjKGFyZ3MpOgpAQCAtOTI4LDYgKzkzNiw5IEBACiAgICAgZGVmIHRlc3RfdHVwbGUoc2VsZik6CiAgICAgICAgIHNlbGYuX3NlcXVlbmNlKGFzdC5UdXBsZSkKIAorICAgIGRlZiB0ZXN0X25hbWVjb25zdGFudChzZWxmKToKKyAgICAgICAgc2VsZi5leHByKGFzdC5OYW1lQ29uc3RhbnQoNCksICJzaW5nbGV0b24gbXVzdCBiZSBUcnVlLCBGYWxzZSwgb3IgTm9uZSIpCisKICAgICBkZWYgdGVzdF9zdGRsaWJfdmFsaWRhdGVzKHNlbGYpOgogICAgICAgICBzdGRsaWIgPSBvcy5wYXRoLmRpcm5hbWUoYXN0Ll9fZmlsZV9fKQogICAgICAgICB0ZXN0cyA9IFtmbiBmb3IgZm4gaW4gb3MubGlzdGRpcihzdGRsaWIpIGlmIGZuLmVuZHN3aXRoKCIucHkiKV0KQEAgLTkzNiwxMyArOTQ3LDEwIEBACiAgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzdGRsaWIsIG1vZHVsZSkKICAgICAgICAgICAgIHdpdGggb3BlbihmbiwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmcDoKICAgICAgICAgICAgICAgICBzb3VyY2UgPSBmcC5yZWFkKCkKLSAgICAgICAgICAgIG1vZCA9IGFzdC5wYXJzZShzb3VyY2UpCisgICAgICAgICAgICBtb2QgPSBhc3QucGFyc2Uoc291cmNlLCBmbikKICAgICAgICAgICAgIGNvbXBpbGUobW9kLCBmbiwgImV4ZWMiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBU1RfVGVzdHMsIEFTVEhlbHBlcnNfVGVzdCwgQVNUVmFsaWRhdG9yVGVzdHMpCi0KIGRlZiBtYWluKCk6CiAgICAgaWYgX19uYW1lX18gIT0gJ19fbWFpbl9fJzoKICAgICAgICAgcmV0dXJuCkBAIC05NTUsMjAgKzk2MywyMCBAQAogICAgICAgICAgICAgcHJpbnQoIl0iKQogICAgICAgICBwcmludCgibWFpbigpIikKICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCiAKICMjIyMgRVZFUllUSElORyBCRUxPVyBJUyBHRU5FUkFURUQgIyMjIyMKIGV4ZWNfcmVzdWx0cyA9IFsKLSgnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnTm9uZScsICgnTG9hZCcsKSkpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDkpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICdhJywgTm9uZSldLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUGFzcycsICgxLCAxMCkpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgJ2EnLCBOb25lKV0sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbKCdOdW0nLCAoMSwgOCksIDApXSwgW10pLCBbKCdQYXNzJywgKDEsIDEyKSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgJ2FyZ3MnLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUGFzcycsICgxLCAxNCkpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIE5vbmUsIFtdLCAna3dhcmdzJywgTm9uZSwgW10sIFtdKSwgWygnUGFzcycsICgxLCAxNykpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgJ2EnLCBOb25lKSwgKCdhcmcnLCAnYicsIE5vbmUpLCAoJ2FyZycsICdjJywgTm9uZSksICgnYXJnJywgJ2QnLCBOb25lKSwgKCdhcmcnLCAnZScsIE5vbmUpXSwgJ2FyZ3MnLCBOb25lLCBbXSwgJ2t3YXJncycsIE5vbmUsIFsoJ051bScsICgxLCAxMSksIDEpLCAoJ05hbWUnLCAoMSwgMTYpLCAnTm9uZScsICgnTG9hZCcsKSksICgnTGlzdCcsICgxLCAyNCksIFtdLCAoJ0xvYWQnLCkpLCAoJ0RpY3QnLCAoMSwgMzApLCBbXSwgW10pXSwgW10pLCBbKCdQYXNzJywgKDEsIDUyKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdOYW1lQ29uc3RhbnQnLCAoMSwgMCksIE5vbmUpKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUGFzcycsICgxLCA5KSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAoMSwgNiksICdhJywgTm9uZSldLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUGFzcycsICgxLCAxMCkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgKDEsIDYpLCAnYScsIE5vbmUpXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbKCdOdW0nLCAoMSwgOCksIDApXSksIFsoJ1Bhc3MnLCAoMSwgMTIpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCAoJ2FyZycsICgxLCA3KSwgJ2FyZ3MnLCBOb25lKSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTQpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sICgnYXJnJywgKDEsIDgpLCAna3dhcmdzJywgTm9uZSksIFtdKSwgWygnUGFzcycsICgxLCAxNykpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgKDEsIDYpLCAnYScsIE5vbmUpLCAoJ2FyZycsICgxLCA5KSwgJ2InLCBOb25lKSwgKCdhcmcnLCAoMSwgMTQpLCAnYycsIE5vbmUpLCAoJ2FyZycsICgxLCAyMiksICdkJywgTm9uZSksICgnYXJnJywgKDEsIDI4KSwgJ2UnLCBOb25lKV0sICgnYXJnJywgKDEsIDM1KSwgJ2FyZ3MnLCBOb25lKSwgW10sIFtdLCAoJ2FyZycsICgxLCA0MyksICdrd2FyZ3MnLCBOb25lKSwgWygnTnVtJywgKDEsIDExKSwgMSksICgnTmFtZUNvbnN0YW50JywgKDEsIDE2KSwgTm9uZSksICgnTGlzdCcsICgxLCAyNCksIFtdLCAoJ0xvYWQnLCkpLCAoJ0RpY3QnLCAoMSwgMzApLCBbXSwgW10pXSksIFsoJ1Bhc3MnLCAoMSwgNTIpKV0sIFtdLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdDbGFzc0RlZicsICgxLCAwKSwgJ0MnLCBbXSwgW10sIE5vbmUsIE5vbmUsIFsoJ1Bhc3MnLCAoMSwgOCkpXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ0NsYXNzRGVmJywgKDEsIDApLCAnQycsIFsoJ05hbWUnLCAoMSwgOCksICdvYmplY3QnLCAoJ0xvYWQnLCkpXSwgW10sIE5vbmUsIE5vbmUsIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUmV0dXJuJywgKDEsIDgpLCAoJ051bScsICgxLCAxNSksIDEpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUmV0dXJuJywgKDEsIDgpLCAoJ051bScsICgxLCAxNSksIDEpKV0sIFtdLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdEZWxldGUnLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgNCksICd2JywgKCdEZWwnLCkpXSldKSwKICgnTW9kdWxlJywgWygnQXNzaWduJywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDApLCAndicsICgnU3RvcmUnLCkpXSwgKCdOdW0nLCAoMSwgNCksIDEpKV0pLAogKCdNb2R1bGUnLCBbKCdBdWdBc3NpZ24nLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ1N0b3JlJywpKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDUpLCAxKSldKSwKQEAgLTk3Nyw3ICs5ODUsNyBAQAogKCdNb2R1bGUnLCBbKCdJZicsICgxLCAwKSwgKCdOYW1lJywgKDEsIDMpLCAndicsICgnTG9hZCcsKSksIFsoJ1Bhc3MnLCAoMSwgNSkpXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ1dpdGgnLCAoMSwgMCksIFsoJ3dpdGhpdGVtJywgKCdOYW1lJywgKDEsIDUpLCAneCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxMCksICd5JywgKCdTdG9yZScsKSkpXSwgWygnUGFzcycsICgxLCAxMykpXSldKSwKICgnTW9kdWxlJywgWygnV2l0aCcsICgxLCAwKSwgWygnd2l0aGl0ZW0nLCAoJ05hbWUnLCAoMSwgNSksICd4JywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDEwKSwgJ3knLCAoJ1N0b3JlJywpKSksICgnd2l0aGl0ZW0nLCAoJ05hbWUnLCAoMSwgMTMpLCAneicsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxOCksICdxJywgKCdTdG9yZScsKSkpXSwgWygnUGFzcycsICgxLCAyMSkpXSldKSwKLSgnTW9kdWxlJywgWygnUmFpc2UnLCAoMSwgMCksICgnQ2FsbCcsICgxLCA2KSwgKCdOYW1lJywgKDEsIDYpLCAnRXhjZXB0aW9uJywgKCdMb2FkJywpKSwgWygnU3RyJywgKDEsIDE2KSwgJ3N0cmluZycpXSwgW10sIE5vbmUsIE5vbmUpLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdSYWlzZScsICgxLCAwKSwgKCdDYWxsJywgKDEsIDE1KSwgKCdOYW1lJywgKDEsIDYpLCAnRXhjZXB0aW9uJywgKCdMb2FkJywpKSwgWygnU3RyJywgKDEsIDE2KSwgJ3N0cmluZycpXSwgW10sIE5vbmUsIE5vbmUpLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdUcnknLCAoMSwgMCksIFsoJ1Bhc3MnLCAoMiwgMikpXSwgWygnRXhjZXB0SGFuZGxlcicsICgzLCAwKSwgKCdOYW1lJywgKDMsIDcpLCAnRXhjZXB0aW9uJywgKCdMb2FkJywpKSwgTm9uZSwgWygnUGFzcycsICg0LCAyKSldKV0sIFtdLCBbXSldKSwKICgnTW9kdWxlJywgWygnVHJ5JywgKDEsIDApLCBbKCdQYXNzJywgKDIsIDIpKV0sIFtdLCBbXSwgWygnUGFzcycsICg0LCAyKSldKV0pLAogKCdNb2R1bGUnLCBbKCdBc3NlcnQnLCAoMSwgMCksICgnTmFtZScsICgxLCA3KSwgJ3YnLCAoJ0xvYWQnLCkpLCBOb25lKV0pLApAQCAtMTAwMiwyOSArMTAxMCwyOSBAQAogKCdJbnRlcmFjdGl2ZScsIFsoJ0V4cHInLCAoMSwgMCksICgnQmluT3AnLCAoMSwgMCksICgnTnVtJywgKDEsIDApLCAxKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDIpLCAyKSkpXSksCiBdCiBldmFsX3Jlc3VsdHMgPSBbCi0oJ0V4cHJlc3Npb24nLCAoJ05hbWUnLCAoMSwgMCksICdOb25lJywgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ05hbWVDb25zdGFudCcsICgxLCAwKSwgTm9uZSkpLAogKCdFeHByZXNzaW9uJywgKCdCb29sT3AnLCAoMSwgMCksICgnQW5kJywpLCBbKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA2KSwgJ2InLCAoJ0xvYWQnLCkpXSkpLAogKCdFeHByZXNzaW9uJywgKCdCaW5PcCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnQWRkJywpLCAoJ05hbWUnLCAoMSwgNCksICdiJywgKCdMb2FkJywpKSkpLAogKCdFeHByZXNzaW9uJywgKCdVbmFyeU9wJywgKDEsIDApLCAoJ05vdCcsKSwgKCdOYW1lJywgKDEsIDQpLCAndicsICgnTG9hZCcsKSkpKSwKLSgnRXhwcmVzc2lvbicsICgnTGFtYmRhJywgKDEsIDApLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgKCdOYW1lJywgKDEsIDcpLCAnTm9uZScsICgnTG9hZCcsKSkpKSwKKygnRXhwcmVzc2lvbicsICgnTGFtYmRhJywgKDEsIDApLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgKCdOYW1lQ29uc3RhbnQnLCAoMSwgNyksIE5vbmUpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0RpY3QnLCAoMSwgMCksIFsoJ051bScsICgxLCAyKSwgMSldLCBbKCdOdW0nLCAoMSwgNCksIDIpXSkpLAogKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbXSwgW10pKSwKLSgnRXhwcmVzc2lvbicsICgnU2V0JywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDEpLCAnTm9uZScsICgnTG9hZCcsKSldKSksCisoJ0V4cHJlc3Npb24nLCAoJ1NldCcsICgxLCAwKSwgWygnTmFtZUNvbnN0YW50JywgKDEsIDEpLCBOb25lKV0pKSwKICgnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgWygnTnVtJywgKDIsIDYpLCAxKV0sIFsoJ051bScsICg0LCAxMCksIDIpXSkpLAogKCdFeHByZXNzaW9uJywgKCdMaXN0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdiJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICdjJywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdkJywgKCdMb2FkJywpKV0pXSkpLAogKCdFeHByZXNzaW9uJywgKCdHZW5lcmF0b3JFeHAnLCAoMSwgMSksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDcpLCAnYicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTIpLCAnYycsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMTcpLCAnZCcsICgnTG9hZCcsKSldKV0pKSwKICgnRXhwcmVzc2lvbicsICgnQ29tcGFyZScsICgxLCAwKSwgKCdOdW0nLCAoMSwgMCksIDEpLCBbKCdMdCcsKSwgKCdMdCcsKV0sIFsoJ051bScsICgxLCA0KSwgMiksICgnTnVtJywgKDEsIDgpLCAzKV0pKSwKLSgnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnZicsICgnTG9hZCcsKSksIFsoJ051bScsICgxLCAyKSwgMSksICgnTnVtJywgKDEsIDQpLCAyKV0sIFsoJ2tleXdvcmQnLCAnYycsICgnTnVtJywgKDEsIDgpLCAzKSldLCAoJ05hbWUnLCAoMSwgMTEpLCAnZCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxNSksICdlJywgKCdMb2FkJywpKSkpLAorKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMCksICdmJywgKCdMb2FkJywpKSwgWygnTnVtJywgKDEsIDIpLCAxKSwgKCdOdW0nLCAoMSwgNCksIDIpXSwgWygna2V5d29yZCcsICdjJywgKCdOdW0nLCAoMSwgOCksIDMpKV0sICgnTmFtZScsICgxLCAxMSksICdkJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDE1KSwgJ2UnLCAoJ0xvYWQnLCkpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ051bScsICgxLCAwKSwgMTApKSwKICgnRXhwcmVzc2lvbicsICgnU3RyJywgKDEsIDApLCAnc3RyaW5nJykpLAotKCdFeHByZXNzaW9uJywgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSkpLAotKCdFeHByZXNzaW9uJywgKCdTdWJzY3JpcHQnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOYW1lJywgKDEsIDIpLCAnYicsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA0KSwgJ2MnLCAoJ0xvYWQnLCkpLCBOb25lKSwgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0F0dHJpYnV0ZScsICgxLCAyKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ1N1YnNjcmlwdCcsICgxLCAyKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ05hbWUnLCAoMSwgMiksICdiJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYycsICgnTG9hZCcsKSksIE5vbmUpLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnTGlzdCcsICgxLCAwKSwgWygnTnVtJywgKDEsIDEpLCAxKSwgKCdOdW0nLCAoMSwgMyksIDIpLCAoJ051bScsICgxLCA1KSwgMyldLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnTGlzdCcsICgxLCAwKSwgW10sICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdUdXBsZScsICgxLCAwKSwgWygnTnVtJywgKDEsIDApLCAxKSwgKCdOdW0nLCAoMSwgMiksIDIpLCAoJ051bScsICgxLCA0KSwgMyldLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnVHVwbGUnLCAoMSwgMSksIFsoJ051bScsICgxLCAxKSwgMSksICgnTnVtJywgKDEsIDMpLCAyKSwgKCdOdW0nLCAoMSwgNSksIDMpXSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1R1cGxlJywgKDEsIDApLCBbXSwgKCdMb2FkJywpKSksCi0oJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICdjJywgKCdMb2FkJywpKSwgJ2QnLCAoJ0xvYWQnLCkpLCBbKCdTdWJzY3JpcHQnLCAoMSwgOCksICgnQXR0cmlidXRlJywgKDEsIDgpLCAoJ05hbWUnLCAoMSwgOCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOdW0nLCAoMSwgMTIpLCAxKSwgKCdOdW0nLCAoMSwgMTQpLCAyKSwgTm9uZSksICgnTG9hZCcsKSldLCBbXSwgTm9uZSwgTm9uZSkpLAorKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDcpLCAoJ0F0dHJpYnV0ZScsICgxLCA2KSwgKCdBdHRyaWJ1dGUnLCAoMSwgNCksICgnQXR0cmlidXRlJywgKDEsIDIpLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAnYycsICgnTG9hZCcsKSksICdkJywgKCdMb2FkJywpKSwgWygnU3Vic2NyaXB0JywgKDEsIDEyKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMTApLCAoJ05hbWUnLCAoMSwgOCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOdW0nLCAoMSwgMTIpLCAxKSwgKCdOdW0nLCAoMSwgMTQpLCAyKSwgTm9uZSksICgnTG9hZCcsKSldLCBbXSwgTm9uZSwgTm9uZSkpLAogXQogbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQppbmRleCBjNzlmZTZmLi5mOTNhNTJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKQEAgLTE1LDYgKzE1LDcgQEAKIAogSE9TVCA9IHN1cHBvcnQuSE9TVAogU0VSVkVSX1FVSVQgPSBiJ1FVSVRcbicKK1RJTUVPVVQgPSAzLjAKIAogaWYgdGhyZWFkaW5nOgogICAgIGNsYXNzIGVjaG9fc2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgpAQCAtMTIzLDcgKzEyNCw5IEBACiAgICAgICAgIGMucHVzaChiIkknbSBub3QgZGVhZCB5ZXQhIiArIHRlcm0pCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbYiJoZWxsbyB3b3JsZCIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKIApAQCAtMTU0LDcgKzE1Nyw5IEBACiAgICAgICAgIGMucHVzaChkYXRhKQogICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2RhdGFbOnRlcm1sZW5dXSkKIApAQCAtMTc0LDcgKzE3OSw5IEBACiAgICAgICAgIGMucHVzaChkYXRhKQogICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5idWZmZXIsIGRhdGEpCkBAIC0xODYsNyArMTkzLDkgQEAKICAgICAgICAgcCA9IGFzeW5jaGF0LnNpbXBsZV9wcm9kdWNlcihkYXRhK1NFUlZFUl9RVUlULCBidWZmZXJfc2l6ZT04KQogICAgICAgICBjLnB1c2hfd2l0aF9wcm9kdWNlcihwKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiImhlbGxvIHdvcmxkIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQogCkBAIC0xOTYsNyArMjA1LDkgQEAKICAgICAgICAgZGF0YSA9IGIiaGVsbG8gd29ybGRcbkknbSBub3QgZGVhZCB5ZXQhXG4iCiAgICAgICAgIGMucHVzaF93aXRoX3Byb2R1Y2VyKGRhdGErU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2IiaGVsbG8gd29ybGQiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCiAKQEAgLTIwNyw3ICsyMTgsOSBAQAogICAgICAgICBjLnB1c2goYiJoZWxsbyB3b3JsZFxuXG5JJ20gbm90IGRlYWQgeWV0IVxuIikKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2IiaGVsbG8gd29ybGQiLCBiIiIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKQEAgLTIyNiw3ICsyMzksOSBAQAogICAgICAgICAjIHdoZXJlIHRoZSBzZXJ2ZXIgZWNob2VzIGFsbCBvZiBpdHMgZGF0YSBiZWZvcmUgd2UgY2FuIGNoZWNrIHRoYXQgaXQKICAgICAgICAgIyBnb3QgYW55IGRvd24gYmVsb3cuCiAgICAgICAgIHMuc3RhcnRfcmVzZW5kX2V2ZW50LnNldCgpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbXSkKICAgICAgICAgIyB0aGUgc2VydmVyIG1pZ2h0IGhhdmUgYmVlbiBhYmxlIHRvIHNlbmQgYSBieXRlIG9yIHR3byBiYWNrLCBidXQgdGhpcwpAQCAtMjY4LDkgKzI4Myw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wb3AoKSwgKDAsIE5vbmUpKQogCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0QXN5bmNoYXQsIFRlc3RBc3luY2hhdF9XaXRoUG9sbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RIZWxwZXJGdW5jdGlvbnMsIFRlc3RGaWZvKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0ZDNlMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMxIEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJObyBtb2R1bGUgbmFtZWQgJ190aHJlYWQnIikKKworCitkZWYgc3VpdGUoKToKKyAgICB0ZXN0c19maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICd0ZXN0cy50eHQnKQorICAgIHdpdGggb3Blbih0ZXN0c19maWxlKSBhcyBmcDoKKyAgICAgICAgdGVzdF9uYW1lcyA9IGZwLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICB0ZXN0cyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgZm9yIHRlc3RfbmFtZSBpbiB0ZXN0X25hbWVzOgorICAgICAgICBtb2RfbmFtZSA9ICd0ZXN0LicgKyB0ZXN0X25hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RfbmFtZSkKKyAgICAgICAgZXhjZXB0IHVuaXR0ZXN0LlNraXBUZXN0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kX25hbWVdCisgICAgICAgICAgICB0ZXN0cy5hZGRUZXN0cyhsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtb2QpKQorICAgIHJldHVybiB0ZXN0cworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3Qoc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQ5NDkyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNSBAQAorZnJvbSAuIGltcG9ydCB0ZXN0X21haW4KKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNoby5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNjM2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNoby5weQpAQCAtMCwwICsxLDggQEAKK2ltcG9ydCBvcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJ1ZiA9IG9zLnJlYWQoMCwgMTAyNCkKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIG9zLndyaXRlKDEsIGJ1ZikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMi5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNjYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8yLnB5CkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IG9zCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgYnVmID0gb3MucmVhZCgwLCAxMDI0KQorICAgIG9zLndyaXRlKDEsIGInT1VUOicrYnVmKQorICAgIG9zLndyaXRlKDIsIGInRVJSOicrYnVmKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8zLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NDQ5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzMucHkKQEAgLTAsMCArMSwxMSBAQAoraW1wb3J0IG9zCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgYnVmID0gb3MucmVhZCgwLCAxMDI0KQorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mud3JpdGUoMSwgYidPVVQ6JytidWYpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4OgorICAgICAgICAgICAgb3Mud3JpdGUoMiwgYidFUlI6JyArIGV4Ll9fY2xhc3NfXy5fX25hbWVfXy5lbmNvZGUoJ2FzY2lpJykpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc2FtcGxlLmNydCBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zYW1wbGUuY3J0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMWUzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc2FtcGxlLmNydApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNNekNDQVp3Q0NRREZsNHlzMGZVN2lUQU5CZ2txaGtpRzl3MEJBUVVGQURCZU1Rc3dDUVlEVlFRR0V3SlYKK1V6RVRNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCd3dOVTJGdUxVWnlZVzVqYVhOamJ6RWkKK01DQUdBMVVFQ2d3WlVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmJtUmhkR2x2YmpBZUZ3MHhNekF6TVRneU1EQTMKK01qaGFGdzB5TXpBek1UWXlNREEzTWpoYU1GNHhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJREFwRFlXeHAKK1ptOXlibWxoTVJZd0ZBWURWUVFIREExVFlXNHRSbkpoYm1OcGMyTnZNU0l3SUFZRFZRUUtEQmxRZVhSb2IyNGcKK1UyOW1kSGRoY21VZ1JtOXVaR0YwYVc5dU1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQ24KK3QzcytKN0wweFAvWWRBUU9hY3BQaTlwaGxyektaaGNYTDNYTXUyTENVZzJmTkpweC80N1ZjNVRaU2FPMTF1TzcKK2dkd1Z6M1o3UTJlcEFnd281OUpMZmZMdDVmaWE4K2EvU2xQd2VJL2o0K3djSUlJaXF1c25MZnBxUjhjSUFhdmcKK1owNmNMWUNEdmI5d01saGVJdlNKWTEyc2tjMW5ucGhXUzJZSjBYbTZ1UUlEQVFBQk1BMEdDU3FHU0liM0RRRUIKK0JRVUFBNEdCQUU5UGtuRzZwdjcyKzV6L2dzREdZeThzSzVVTmtiV1NOcjRpNGU1bHhWc0YwMysvTTcxSCszQUIKK014Vlg0K0ErVmxrMmZtVStCcmRISUlVRTByMWREY08zam9zUTloYzlPSnBwNVZMU1FGUDhWZXVKQ216WVBwOUkKK0k4V2JXOTNjblhuQ2hUcllRVmRnVm9GZHY3R0U5WWdVN05Za3JHSU0wblpsMS9mL2JIUEIKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zYW1wbGUua2V5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NhbXBsZS5rZXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmZWE4ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zYW1wbGUua2V5CkBAIC0wLDAgKzEsMTUgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNYUUlCQUFLQmdRQ250M3MrSjdMMHhQL1lkQVFPYWNwUGk5cGhscnpLWmhjWEwzWE11MkxDVWcyZk5KcHgKKy80N1ZjNVRaU2FPMTF1TzdnZHdWejNaN1EyZXBBZ3dvNTlKTGZmTHQ1ZmlhOCthL1NsUHdlSS9qNCt3Y0lJSWkKK3F1c25MZnBxUjhjSUFhdmdaMDZjTFlDRHZiOXdNbGhlSXZTSlkxMnNrYzFubnBoV1MyWUowWG02dVFJREFRQUIKK0FvR0FCZm04azE5WXVlM1c2OEJlY0tFR1MwVkJWNTdHUlRQVCtNaUJHdlZHTklRMTVnazZ3M3NHZk1ac2REMXkKK2JzVWtRZ2NEYjJkLzRpNXBvQlRwbC8rQ2Q0MVYrYzIwSUMvc1NsNVgxSUVyZUhNS1NMaHkvdXlqeWl5ZlhsUDEKK2lYaFRvRkNnTFd3RU5XYzhMemZVVjh2dUFWNVdHNm9MOWJudWRXelp4ZXF4OFYwQ1FRRFI3eHdWajZMTjcwRWIKK0RVaFNLTGt1c21GdzVHazlOSi83d1o0ZUhnNEI4YzlLTlZ2U2xMQ0xoY3NWVFFYdXFZZUZwT3F5dEk0NVNuZVAKK2xyMHZydnNEQWtFQXpJVFlpWHU2b3g1aHVEQ0c3aW1YMlc5Q0FZdVg2Mzh1ckx4QnFCWE1TN0dxQnpvakQ2UkwKKzIxUThvUHdKV0pxdUVSYTNIRFNjcTFkZWlRYk05dUtJa3dKQkFJYTFQTHNsR04yMTZYdjNVUEhQU2N5S0QvYUYKK3luWEl2K09uQU5Qb2l5cDZSSDRrc1EvMTh6Y0VHaVZIOEVlTnB2Vjl0bEFIaGIrRFppYlFIZ05yNzRzQ1FRQzAKK3poVG9wbHUvYlZLU2xVUVVOTzBycXJJOXozMEZFckRld0tlQ3c1S1NzSVJTVTFFL3VNM2ZIcjlpeXE0d2lMNnUKK0dOalV0S1oweTQ2bHNUOXVXNkxGQWtCNWVxZUVRbnNoQWRyM1g1R3lrV0hKOERER0JYUFBuNlJjZTFOWDRSU3EKK1Y5a2hHMnoxYkZ5Zm8raE1xcFluRjJrMzJoVnEzRTU0UlM4WVlud0JzVm9mCistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yjg4M2M1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkKQEAgLTAsMCArMSw2NzAgQEAKKyIiIlRlc3RzIGZvciBiYXNlX2V2ZW50cy5weSIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRfdW51c2VkX3BvcnQsIElQVjZfRU5BQkxFRAorCitmcm9tIGFzeW5jaW8gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGNvbnN0YW50cworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIEJhc2VFdmVudExvb3BUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3AoKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIG0gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQsIG0sIG0sIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5sb29wLl93cml0ZV90b19zZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fcmVhZF9mcm9tX3NlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIGdlbiA9IHNlbGYubG9vcC5fbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChtLCBtLCBtLCBtLCBtLCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBuZXh0LCBpdGVyKGdlbikpCisKKyAgICBkZWYgdGVzdF9fYWRkX2NhbGxiYWNrX2hhbmRsZShzZWxmKToKKyAgICAgICAgaCA9IGV2ZW50cy5IYW5kbGUobGFtYmRhOiBGYWxzZSwgKCkpCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2soaCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihoLCBzZWxmLmxvb3AuX3JlYWR5KQorCisgICAgZGVmIHRlc3RfX2FkZF9jYWxsYmFja190aW1lcihzZWxmKToKKyAgICAgICAgaCA9IGV2ZW50cy5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpKzEwLCBsYW1iZGE6IEZhbHNlLCAoKSkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fc2NoZWR1bGVkKQorCisgICAgZGVmIHRlc3RfX2FkZF9jYWxsYmFja19jYW5jZWxsZWRfaGFuZGxlKHNlbGYpOgorICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShsYW1iZGE6IEZhbHNlLCAoKSkKKyAgICAgICAgaC5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0X2V4ZWN1dG9yKHNlbGYpOgorICAgICAgICBleGVjdXRvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVmYXVsdF9leGVjdXRvcihleGVjdXRvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhleGVjdXRvciwgc2VsZi5sb29wLl9kZWZhdWx0X2V4ZWN1dG9yKQorCisgICAgZGVmIHRlc3RfZ2V0bmFtZWluZm8oc2VsZik6CisgICAgICAgIHNvY2thZGRyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5nZXRuYW1laW5mbyhzb2NrYWRkcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChOb25lLCBzb2NrZXQuZ2V0bmFtZWluZm8sIHNvY2thZGRyLCAwKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfY2FsbF9zb29uKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBoID0gc2VsZi5sb29wLmNhbGxfc29vbihjYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLl9jYWxsYmFjaywgY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLCBldmVudHMuSGFuZGxlKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9jYWxsX2xhdGVyKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBoID0gc2VsZi5sb29wLmNhbGxfbGF0ZXIoMTAuMCwgY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLCBldmVudHMuVGltZXJIYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXJfbmVnYXRpdmVfZGVsYXlzKHNlbGYpOgorICAgICAgICBjYWxscyA9IFtdCisKKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigtMSwgY2IsICdhJykKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoLTIsIGNiLCAnYicpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbJ2InLCAnYSddKQorCisgICAgZGVmIHRlc3RfdGltZV9hbmRfY2FsbF9hdChzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdoZW4gPSBzZWxmLmxvb3AudGltZSgpICsgMC4xCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2F0KHdoZW4sIGNiKQorICAgICAgICB0MCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgdDEgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjA5IDw9IHQxLXQwIDw9IDAuOSwgdDEtdDApCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IsCisgICAgICAgICAgICBOb25lLCBldmVudHMuSGFuZGxlKGNiLCAoKSksICgnJywpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yLAorICAgICAgICAgICAgTm9uZSwgZXZlbnRzLlRpbWVySGFuZGxlKDEwLCBjYiwgKCkpKQorCisgICAgZGVmIHRlc3RfcnVuX29uY2VfaW5fZXhlY3V0b3JfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaCA9IGV2ZW50cy5IYW5kbGUoY2IsICgpKQorICAgICAgICBoLmNhbmNlbCgpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGZ1dHVyZXMuRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9wbGFpbihzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGggPSBldmVudHMuSGFuZGxlKGNiLCAoKSkKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBleGVjdXRvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGV4ZWN1dG9yLnN1Ym1pdC5yZXR1cm5fdmFsdWUgPSBmCisKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yKGV4ZWN1dG9yKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCByZXMpCisKKyAgICAgICAgZXhlY3V0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBleGVjdXRvci5zdWJtaXQucmV0dXJuX3ZhbHVlID0gZgorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKGV4ZWN1dG9yLCBoKQorICAgICAgICBzZWxmLmFzc2VydElzKGYsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4ZWN1dG9yLnN1Ym1pdC5jYWxsZWQpCisKKyAgICAgICAgZi5jYW5jZWwoKSAgIyBEb24ndCBjb21wbGFpbiBhYm91dCBhYmFuZG9uZWQgRnV0dXJlLgorCisgICAgZGVmIHRlc3RfX3J1bl9vbmNlKHNlbGYpOgorICAgICAgICBoMSA9IGV2ZW50cy5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpICsgMC4xLCBsYW1iZGE6IFRydWUsICgpKQorICAgICAgICBoMiA9IGV2ZW50cy5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpICsgMTAuMCwgbGFtYmRhOiBUcnVlLCAoKSkKKworICAgICAgICBoMS5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NjaGVkdWxlZC5hcHBlbmQoaDEpCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZChoMikKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisKKyAgICAgICAgdCA9IHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0LmNhbGxfYXJnc1swXVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoOS45OSA8IHQgPCAxMC4xLCB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtoMl0sIHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cy5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy50aW1lJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X19ydW5fb25jZV9sb2dnaW5nKHNlbGYsIG1fbG9nZ2luZywgbV90aW1lKToKKyAgICAgICAgIyBMb2cgdG8gSU5GTyBsZXZlbCBpZiB0aW1lb3V0ID4gMS4wIHNlYy4KKyAgICAgICAgaWR4ID0gLTEKKyAgICAgICAgZGF0YSA9IFsxMC4wLCAxMC4wLCAxMi4wLCAxMy4wXQorCisgICAgICAgIGRlZiBtb25vdG9uaWMoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGRhdGEsIGlkeAorICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgIHJldHVybiBkYXRhW2lkeF0KKworICAgICAgICBtX3RpbWUubW9ub3RvbmljID0gbW9ub3RvbmljCisgICAgICAgIG1fbG9nZ2luZy5JTkZPID0gbG9nZ2luZy5JTkZPCisgICAgICAgIG1fbG9nZ2luZy5ERUJVRyA9IGxvZ2dpbmcuREVCVUcKKworICAgICAgICBzZWxmLmxvb3AuX3NjaGVkdWxlZC5hcHBlbmQoCisgICAgICAgICAgICBldmVudHMuVGltZXJIYW5kbGUoMTEuMCwgbGFtYmRhOiBUcnVlLCAoKSkpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLklORk8sIG1fbG9nZ2luZy5sb2cuY2FsbF9hcmdzWzBdWzBdKQorCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGRhdGEgPSBbMTAuMCwgMTAuMCwgMTAuMywgMTMuMF0KKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQgPSBbZXZlbnRzLlRpbWVySGFuZGxlKDExLjAsIGxhbWJkYTpUcnVlLCAoKSldCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuREVCVUcsIG1fbG9nZ2luZy5sb2cuY2FsbF9hcmdzWzBdWzBdKQorCisgICAgZGVmIHRlc3RfX3J1bl9vbmNlX3NjaGVkdWxlX2hhbmRsZShzZWxmKToKKyAgICAgICAgaGFuZGxlID0gTm9uZQorICAgICAgICBwcm9jZXNzZWQgPSBGYWxzZQorCisgICAgICAgIGRlZiBjYihsb29wKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb2Nlc3NlZCwgaGFuZGxlCisgICAgICAgICAgICBwcm9jZXNzZWQgPSBUcnVlCisgICAgICAgICAgICBoYW5kbGUgPSBsb29wLmNhbGxfc29vbihsYW1iZGE6IFRydWUpCisKKyAgICAgICAgaCA9IGV2ZW50cy5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpIC0gMSwgY2IsIChzZWxmLmxvb3AsKSkKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKGgpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9jZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2hhbmRsZV0sIGxpc3Qoc2VsZi5sb29wLl9yZWFkeSkpCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfdHlwZV9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsICdibGFoJykKKworCitjbGFzcyBNeVByb3RvKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjcmVhdGVfZnV0dXJlPUZhbHNlKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgY3JlYXRlX2Z1dHVyZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGZ1dHVyZXMuRnV0dXJlKCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5Ib3N0OiBleGFtcGxlLmNvbVxyXG5cclxuJykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnRU9GJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSBpbiAoJ0NPTk5FQ1RFRCcsICdFT0YnKSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeURhdGFncmFtUHJvdG8ocHJvdG9jb2xzLkRhdGFncmFtUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3JlYXRlX2Z1dHVyZT1GYWxzZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGNyZWF0ZV9mdXR1cmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBmdXR1cmVzLkZ1dHVyZSgpCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUxJWkVEJworCisgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGNvbm5lY3Rpb25fcmVmdXNlZChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcFdpdGhTZWxlY3RvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX211bHRpcGxlX2Vycm9ycyhzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgY2xhc3MgTXlQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGVycm9ycyA9IFsnZXJyMScsICdlcnIyJ10KKworICAgICAgICBkZWYgX3NvY2tldCgqYXJncywgKiprdyk6CisgICAgICAgICAgICBub25sb2NhbCBpZHgsIGVycm9ycworICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3JzW2lkeF0pCisKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0ID0gX3NvY2tldAorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICdNdWx0aXBsZSBleGNlcHRpb25zOiBlcnIxLCBlcnIyJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2hvc3RfcG9ydF9zb2NrKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiB0YXNrcy5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2Nvbm5lY3RfZXJyKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGUoc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzAuMC4wLjEnLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMC4wLjAuMicsIDgwKSldCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGVfZXJyb3JzX2xvY2FsX2FkZHIoc2VsZiwgbV9zb2NrZXQpOgorCisgICAgICAgIGRlZiBiaW5kKGFkZHIpOgorICAgICAgICAgICAgaWYgYWRkclswXSA9PSAnMC4wLjAuMSc6CisgICAgICAgICAgICAgICAgZXJyID0gT1NFcnJvcignRXJyJykKKyAgICAgICAgICAgICAgICBlcnIuc3RyZXJyb3IgPSAnRXJyJworICAgICAgICAgICAgICAgIHJhaXNlIGVycgorCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuYmluZCA9IGJpbmQKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcwLjAuMC4xJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzAuMC4wLjInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdFcnIyJykKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KE5vbmUsIDgwODApKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoY20uZXhjZXB0aW9uKS5zdGFydHN3aXRoKCdNdWx0aXBsZSBleGNlcHRpb25zOiAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oaG9zdCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgaWYgaG9zdCA9PSAnZXhhbXBsZS5jb20nOgorICAgICAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KE5vbmUsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9zc2xfc2VydmVyX2hvc3RuYW1lX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZGVmIG1vY2tfZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBmLnNldF9yZXN1bHQoWyhzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9UQ1AsICcnLCAoJzEuMi4zLjQnLCA4MCkpXSkKKyAgICAgICAgICAgIHJldHVybiBmCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvLnNpZGVfZWZmZWN0ID0gbW9ja19nZXRhZGRyaW5mbworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5yZXR1cm5fdmFsdWUgPSAoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZGVmIG1vY2tfbWFrZV9zc2xfdHJhbnNwb3J0KHNvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3ZHMpOgorICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKworICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5zaWRlX2VmZmVjdCA9IG1vY2tfbWFrZV9zc2xfdHJhbnNwb3J0CisgICAgICAgIEFOWSA9IHVuaXR0ZXN0Lm1vY2suQU5ZCisgICAgICAgICMgRmlyc3QgdHJ5IHRoZSBkZWZhdWx0IHNlcnZlcl9ob3N0bmFtZS4KKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQucmVzZXRfbW9jaygpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwgc3NsPVRydWUpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgQU5ZLCBBTlksIEFOWSwgQU5ZLAorICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J3B5dGhvbi5vcmcnKQorICAgICAgICAjIE5leHQgdHJ5IGFuIGV4cGxpY2l0IHNlcnZlcl9ob3N0bmFtZS4KKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQucmVzZXRfbW9jaygpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwgc3NsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdwZXJsLmNvbScpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgQU5ZLCBBTlksIEFOWSwgQU5ZLAorICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J3BlcmwuY29tJykKKyAgICAgICAgIyBGaW5hbGx5IHRyeSBhbiBleHBsaWNpdCBlbXB0eSBzZXJ2ZXJfaG9zdG5hbWUuCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnJlc2V0X21vY2soKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsIHNzbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nJykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5hc3NlcnRfY2FsbGVkX3dpdGgoQU5ZLCBBTlksIEFOWSwgQU5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JycpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19zc2xfc2VydmVyX2hvc3RuYW1lX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBXaGVuIG5vdCB1c2luZyBzc2wsIHNlcnZlcl9ob3N0bmFtZSBtdXN0IGJlIE5vbmUuCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J3B5dGhvbi5vcmcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fc3NsX3NlcnZlcl9ob3N0bmFtZV9lcnJvcnMoc2VsZik6CisgICAgICAgICMgV2hlbiB1c2luZyBzc2wsIHNlcnZlcl9ob3N0bmFtZSBtYXkgYmUgTm9uZSBpZiBob3N0IGlzIG5vbi1lbXB0eS4KKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnJywgODAsIHNzbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sIE5vbmUsIDgwLCBzc2w9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1UcnVlLCBzb2NrPXNvY2tldC5zb2NrZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfZW1wdHlfaG9zdChzZWxmKToKKyAgICAgICAgIyBpZiBob3N0IGlzIGVtcHR5IHN0cmluZyB1c2UgTm9uZSBpbnN0ZWFkCisgICAgICAgIGhvc3QgPSBvYmplY3QoKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIG5vbmxvY2FsIGhvc3QKKyAgICAgICAgICAgIGhvc3QgPSBhcmdzWzBdCisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShob3N0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoCisgICAgICAgICAgICBNeVByb3RvLCAnMC4wLjAuMCcsIDAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9faG9zdF9wb3J0X3NvY2soc2VsZik6CisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIGdldGFkZHJpbmZvID0gc2VsZi5sb29wLmdldGFkZHJpbmZvID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2NhbnRfYmluZChzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgc3RyZXJyb3IgPSAnZXJyb3InCisKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gWworICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzEyNy4wLjAuMScsIDEwMTAwKSldCisgICAgICAgIG1fc29jayA9IG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBtX3NvY2suYmluZC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vX2FkZHJpbmZvKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0oJ2xvY2FsaG9zdCcsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfYWRkcl9lcnJvcihzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9J2xvY2FsaG9zdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSgnbG9jYWxob3N0JywgMSwgMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfY29ubmVjdF9lcnIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgcHJvdG9jb2xzLkRhdGFncmFtUHJvdG9jb2wsIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X3NvY2tldF9lcnIoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbworICAgICAgICBtX3NvY2tldC5zb2NrZXQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJUFY2X0VOQUJMRUQsICdJUHY2IG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vX21hdGNoaW5nX2ZhbWlseShzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwKKyAgICAgICAgICAgIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCksIGxvY2FsX2FkZHI9KCc6OjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc2V0YmxrX2VycihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuc2V0YmxvY2tpbmcuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vYWRkcl9ub2ZhbWlseShzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X2NhbnRfYmluZChzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtX3NvY2tldC5BRl9JTkVUNiA9IHNvY2tldC5BRl9JTkVUNgorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbworICAgICAgICBtX3NvY2sgPSBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgbV9zb2NrLmJpbmQuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVyciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2FjY2VwdF9jb25uZWN0aW9uX3JldHJ5KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5hY2NlcHQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fYWNjZXB0X2Nvbm5lY3Rpb24oTXlQcm90bywgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FjY2VwdF9jb25uZWN0aW9uX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoZXJybm8uRU1GSUxFLCAnVG9vIG1hbnkgb3BlbiBmaWxlcycpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fYWNjZXB0X2Nvbm5lY3Rpb24oTXlQcm90bywgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmV4Y2VwdGlvbi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxMCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKGNvbnN0YW50cy5BQ0NFUFRfUkVUUllfREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeVByb3RvLCBzb2NrLCBOb25lLCBOb25lKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4ODk0MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weQpAQCAtMCwwICsxLDE2MzEgQEAKKyIiIlRlc3RzIGZvciBldmVudHMucHkuIiIiCisKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBnYworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgZXJybm8KK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBmaW5kX3VudXNlZF9wb3J0LCBJUFY2X0VOQUJMRUQKKworCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHNlbGVjdG9yX2V2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGxvY2tzCisKKworY2xhc3MgTXlQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5Ib3N0OiBleGFtcGxlLmNvbVxyXG5cclxuJykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnRU9GJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSBpbiAoJ0NPTk5FQ1RFRCcsICdFT0YnKSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeURhdGFncmFtUHJvdG8ocHJvdG9jb2xzLkRhdGFncmFtUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTElaRUQnCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgY29ubmVjdGlvbl9yZWZ1c2VkKHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeVJlYWRQaXBlUHJvdG8ocHJvdG9jb2xzLlByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSBbJ0lOSVRJQUwnXQorICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdDT05ORUNURUQnKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgnRU9GJykKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJywgJ0NPTk5FQ1RFRCcsICdFT0YnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgnQ0xPU0VEJykKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeVdyaXRlUGlwZVByb3RvKHByb3RvY29scy5CYXNlUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeVN1YnByb2Nlc3NQcm90b2NvbChwcm90b2NvbHMuU3VicHJvY2Vzc1Byb3RvY29sKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuY29tcGxldGVkID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmRpc2Nvbm5lY3RzID0ge2ZkOiBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApIGZvciBmZCBpbiByYW5nZSgzKX0KKyAgICAgICAgc2VsZi5kYXRhID0gezE6IGInJywgMjogYicnfQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuZ290X2RhdGEgPSB7MTogbG9ja3MuRXZlbnQobG9vcD1sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAyOiBsb2Nrcy5FdmVudChsb29wPWxvb3ApfQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDT05ORUNURUQnCisgICAgICAgIHNlbGYuY29ubmVjdGVkLnNldF9yZXN1bHQoTm9uZSkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIHNlbGYuY29tcGxldGVkLnNldF9yZXN1bHQoTm9uZSkKKworICAgIGRlZiBwaXBlX2RhdGFfcmVjZWl2ZWQoc2VsZiwgZmQsIGRhdGEpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLmRhdGFbZmRdICs9IGRhdGEKKyAgICAgICAgc2VsZi5nb3RfZGF0YVtmZF0uc2V0KCkKKworICAgIGRlZiBwaXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBmZCwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgaWYgZXhjOgorICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0c1tmZF0uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRpc2Nvbm5lY3RzW2ZkXS5zZXRfcmVzdWx0KGV4YykKKworICAgIGRlZiBwcm9jZXNzX2V4aXRlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gc2VsZi50cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUoKQorCisKK2NsYXNzIEV2ZW50TG9vcFRlc3RzTWl4aW46CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLmNyZWF0ZV9ldmVudF9sb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMganVzdCBpbiBjYXNlIGlmIHdlIGhhdmUgdHJhbnNwb3J0IGNsb3NlIGNhbGxiYWNrcworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfbmVzdGluZyhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzEoKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuaXNfcnVubmluZygpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvMSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvMigpKQorCisgICAgIyBOb3RlOiBiZWNhdXNlIG9mIHRoZSBkZWZhdWx0IFdpbmRvd3MgdGltaW5nIGdyYW51bGFyaXR5IG9mCisgICAgIyAxNS42IG1zZWMsIHdlIHVzZSBmYWlybHkgbG9uZyBzbGVlcCB0aW1lcyBoZXJlICh+MTAwIG1zZWMpLgorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYpOgorICAgICAgICB0MCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgdDEgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjA4IDw9IHQxLXQwIDw9IDAuOCwgdDEtdDApCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfc3RvcHBlZChzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IGNiKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3RfY2FsbF9sYXRlcihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC4xLCBjYWxsYmFjaywgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgdDAgPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHQxID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8gd29ybGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDggPD0gdDEtdDAgPD0gMC44LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZzEsIGFyZzIpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKGFyZzEsIGFyZzIpKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICdoZWxsbycsICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWygnaGVsbG8nLCAnd29ybGQnKV0pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBpZiBsZW4ocmVzdWx0cykgPj0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgZGVmIHJ1bl9pbl90aHJlYWQoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaywgJ2hlbGxvJykKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1bl9pbl90aHJlYWQpCisgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8nLCAnd29ybGQnXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbl90aHJlYWRzYWZlX3NhbWVfdGhyZWFkKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBkZWYgY2FsbGJhY2soYXJnKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGFyZykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1bHRzKSA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssICdoZWxsbycpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWydoZWxsbycsICd3b3JsZCddKQorCisgICAgZGVmIHRlc3RfcnVuX2luX2V4ZWN1dG9yKHNlbGYpOgorICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBmMiA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgcnVuLCAneW8nKQorICAgICAgICByZXMsIHRocmVhZF9pZCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAneW8nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRocmVhZF9pZCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgYnl0ZXNfcmVhZCA9IFtdCisKKyAgICAgICAgZGVmIHJlYWRlcigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSByLnJlY3YoMTAyNCkKKyAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTcHVyaW91cyByZWFkaW5lc3Mgbm90aWZpY2F0aW9ucyBhcmUgcG9zc2libGUKKyAgICAgICAgICAgICAgICAjIGF0IGxlYXN0IG9uIExpbnV4IC0tIHNlZSBtYW4gc2VsZWN0LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBieXRlc19yZWFkLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoci5maWxlbm8oKSkpCisgICAgICAgICAgICAgICAgci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoci5maWxlbm8oKSwgcmVhZGVyKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHcuc2VuZCwgYidhYmMnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3LnNlbmQsIGInZGVmJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24ody5jbG9zZSkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihzZWxmLmxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbihieXRlc19yZWFkKSwgYidhYmNkZWYnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgdy5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIody5maWxlbm8oKSwgdy5zZW5kLCBiJ3gnKigyNTYqMTAyNCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIGRlZiByZW1vdmVfd3JpdGVyKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV93cml0ZXIody5maWxlbm8oKSkpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihyZW1vdmVfd3JpdGVyKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHNlbGYubG9vcC5zdG9wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgZGF0YSA9IHIucmVjdigyNTYqMTAyNCkKKyAgICAgICAgci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihkYXRhKSwgMjAwKQorCisgICAgZGVmIHRlc3Rfc29ja19jbGllbnRfb3BzKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGh0dHBkLmFkZHJlc3MpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfcmVjdihzb2NrLCAxMDI0KSkKKyAgICAgICAgICAgICMgY29uc3VtZSBkYXRhCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkpCisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5zdGFydHN3aXRoKGInSFRUUC8xLjAgMjAwIE9LJykpCisKKyAgICBkZWYgdGVzdF9zb2NrX2NsaWVudF9mYWlsKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHdpbGwgZ2V0IGFuIHVudXNlZCBwb3J0CisgICAgICAgIGFkZHJlc3MgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHMuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICAgICAgYWRkcmVzcyA9IHMuZ2V0c29ja25hbWUoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpKQorICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBsaXN0ZW5lciA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBsaXN0ZW5lci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgbGlzdGVuZXIuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICBsaXN0ZW5lci5saXN0ZW4oMSkKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KGxpc3RlbmVyLmdldHNvY2tuYW1lKCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2FjY2VwdChsaXN0ZW5lcikKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLmdldHRpbWVvdXQoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyLCBjbGllbnQuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnQuZ2V0cGVlcm5hbWUoKSwgbGlzdGVuZXIuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIGxpc3RlbmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHS0lMTCcpLCAnTm8gU0lHS0lMTCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKworICAgICAgICAjIENoZWNrIGVycm9yIGJlaGF2aW9yIGZpcnN0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgJ2Jvb20nLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgJ2Jvb20nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgMCwgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIC0xLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0tJTEwsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICAjIFJlbW92aW5nIFNJR0tJTEwgZG9lc24ndCByYWlzZSwgc2luY2Ugd2UgZG9uJ3QgY2FsbCBzaWduYWwoKS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdLSUxMKSkKKyAgICAgICAgIyBOb3cgc2V0IGEgaGFuZGxlciBhbmQgaGFuZGxlIGl0LgorICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQsIG15X2hhbmRsZXIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBvcy5raWxsKG9zLmdldHBpZCgpLCBzaWduYWwuU0lHSU5UKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXVnaHQsIDEpCisgICAgICAgICMgUmVtb3ZpbmcgaXQgc2hvdWxkIHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuZGVmYXVsdF9pbnRfaGFuZGxlcikKKyAgICAgICAgIyBSZW1vdmluZyBhZ2FpbiByZXR1cm5zIEZhbHNlLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0FMUk0nKSwgJ05vIFNJR0FMUk0nKQorICAgIGRlZiB0ZXN0X3NpZ25hbF9oYW5kbGluZ193aGlsZV9zZWxlY3Rpbmcoc2VsZik6CisgICAgICAgICMgVGVzdCB3aXRoIGEgc2lnbmFsIGFjdHVhbGx5IGFycml2aW5nIGR1cmluZyBhIHNlbGVjdCgpIGNhbGwuCisgICAgICAgIGNhdWdodCA9IDAKKworICAgICAgICBkZWYgbXlfaGFuZGxlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgY2F1Z2h0CisgICAgICAgICAgICBjYXVnaHQgKz0gMQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0FMUk0sIG15X2hhbmRsZXIpCisKKyAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzaWduYWwuSVRJTUVSX1JFQUwsIDAuMDEsIDApICAjIFNlbmQgU0lHQUxSTSBvbmNlLgorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhdWdodCwgMSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHQUxSTScpLCAnTm8gU0lHQUxSTScpCisgICAgZGVmIHRlc3Rfc2lnbmFsX2hhbmRsaW5nX2FyZ3Moc2VsZik6CisgICAgICAgIHNvbWVfYXJncyA9ICg0MiwpCisgICAgICAgIGNhdWdodCA9IDAKKworICAgICAgICBkZWYgbXlfaGFuZGxlcigqYXJncyk6CisgICAgICAgICAgICBub25sb2NhbCBjYXVnaHQKKyAgICAgICAgICAgIGNhdWdodCArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIHNvbWVfYXJncykKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdBTFJNLCBteV9oYW5kbGVyLCAqc29tZV9hcmdzKQorCisgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2lnbmFsLklUSU1FUl9SRUFMLCAwLjEsIDApICAjIFNlbmQgU0lHQUxSTSBvbmNlLgorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigwLjUsIHNlbGYubG9vcC5zdG9wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhdWdodCwgMSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksICpodHRwZC5hZGRyZXNzKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodHIsIHRyYW5zcG9ydHMuVHJhbnNwb3J0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHByLCBwcm90b2NvbHMuUHJvdG9jb2wpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwci5kb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHByLm5ieXRlcywgMCkKKyAgICAgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3NvY2soc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIHNvY2sgPSBOb25lCisgICAgICAgICAgICBpbmZvcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgICAgICAqaHR0cGQuYWRkcmVzcywgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0pKQorICAgICAgICAgICAgZm9yIGZhbWlseSwgdHlwZSwgcHJvdG8sIGNuYW1lLCBhZGRyZXNzIGluIGluZm9zOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5PWZhbWlseSwgdHlwZT10eXBlLCBwcm90bz1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAnQ2FuIG5vdCBjcmVhdGUgc29ja2V0LicKKworICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCBzb2NrPXNvY2spCisgICAgICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0ciwgdHJhbnNwb3J0cy5UcmFuc3BvcnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocHIsIHByb3RvY29scy5Qcm90b2NvbCkpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocHIubmJ5dGVzLCAwKQorICAgICAgICAgICAgdHIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCAqaHR0cGQuYWRkcmVzcywKKyAgICAgICAgICAgICAgICBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodHIsIHRyYW5zcG9ydHMuVHJhbnNwb3J0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHByLCBwcm90b2NvbHMuUHJvdG9jb2wpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdzc2wnIGluIHRyLl9fY2xhc3NfXy5fX25hbWVfXy5sb3dlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocHIubmJ5dGVzLCAwKQorICAgICAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgcG9ydCA9IGZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLCBsb2NhbF9hZGRyPShodHRwZC5hZGRyZXNzWzBdLCBwb3J0KSkKKyAgICAgICAgICAgIHRyLCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIGV4cGVjdGVkID0gcHIudHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpWzFdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQsIGV4cGVjdGVkKQorICAgICAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbG9jYWxfYWRkcl9pbl91c2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBNeVByb3RvKGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAqaHR0cGQuYWRkcmVzcywgbG9jYWxfYWRkcj1odHRwZC5hZGRyZXNzKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUFERFJJTlVTRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyKGh0dHBkLmFkZHJlc3MpLCBjbS5leGNlcHRpb24uc3RyZXJyb3IpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlQcm90bygpCisgICAgICAgICAgICByZXR1cm4gcHJvdG8KKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoZmFjdG9yeSwgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcnZlci5zb2NrZXRzKSwgMSkKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LCAnMC4wLjAuMCcpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZGFsbChiJ3h4eCcpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15UHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0lOSVRJQUwnLCBwcm90by5zdGF0ZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEyNy4wLjAuMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwZWVybmFtZScpWzBdKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgd2luZG93cyBpb2NwCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgIyB0aGUgY2xpZW50IHNvY2tldCBtdXN0IGJlIGNsb3NlZCBhZnRlciB0byBhdm9pZCBFQ09OTlJFU0VUIHVwb24KKyAgICAgICAgIyByZWN2KCkvc2VuZCgpIG9uIHRoZSBzZXJ2aW5nIHNvY2tldAorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgICMgY2xvc2Ugc2VydmVyCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGNsYXNzIENsaWVudE15UHJvdG8oTXlQcm90byk6CisgICAgICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIGhlcmUgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgICAgIHNzbGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzc2xjb250ZXh0LmxvYWRfY2VydF9jaGFpbigKKyAgICAgICAgICAgIGNlcnRmaWxlPW9zLnBhdGguam9pbihoZXJlLCAnc2FtcGxlLmNydCcpLAorICAgICAgICAgICAga2V5ZmlsZT1vcy5wYXRoLmpvaW4oaGVyZSwgJ3NhbXBsZS5rZXknKSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoCisgICAgICAgICAgICBmYWN0b3J5LCAnMTI3LjAuMC4xJywgMCwgc3NsPXNzbGNvbnRleHQpCisKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcxMjcuMC4wLjEnKQorCisgICAgICAgIGZfYyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihDbGllbnRNeVByb3RvLCBob3N0LCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKSkKKyAgICAgICAgY2xpZW50LCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9jKQorCisgICAgICAgIGNsaWVudC53cml0ZShiJ3h4eCcpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15UHJvdG8pCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHByb3RvLm5ieXRlcyA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxMjcuMC4wLjEnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGVlcm5hbWUnKVswXSkKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICAjIHRoZSBjbGllbnQgc29ja2V0IG11c3QgYmUgY2xvc2VkIGFmdGVyIHRvIGF2b2lkIEVDT05OUkVTRVQgdXBvbgorICAgICAgICAjIHJlY3YoKS9zZW5kKCkgb24gdGhlIHNlcnZpbmcgc29ja2V0CisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgIyBzdG9wIHNlcnZpbmcKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc29jayhzZWxmKToKKyAgICAgICAgcHJvdG8gPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBjbGFzcyBUZXN0TXlQcm90byhNeVByb3RvKToKKyAgICAgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisgICAgICAgICAgICAgICAgcHJvdG8uc2V0X3Jlc3VsdChzZWxmKQorCisgICAgICAgIHNvY2tfb2IgPSBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrX29iLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNvY2tfb2IuYmluZCgoJzAuMC4wLjAnLCAwKSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoVGVzdE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzb2NrLCBzb2NrX29iKQorCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LCAnMC4wLjAuMCcpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZChiJ3h4eCcpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2FkZHJfaW5fdXNlKHNlbGYpOgorICAgICAgICBzb2NrX29iID0gc29ja2V0LnNvY2tldCh0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29ja19vYi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBzb2NrX29iLmJpbmQoKCcwLjAuMC4wJywgMCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCBob3N0PWhvc3QsIHBvcnQ9cG9ydCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVBRERSSU5VU0UpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKElQVjZfRU5BQkxFRCwgJ0lQdjYgbm90IHN1cHBvcnRlZCBvciBlbmFibGVkJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2R1YWxfc3RhY2soc2VsZik6CisgICAgICAgIGZfcHJvdG8gPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBjbGFzcyBUZXN0TXlQcm90byhNeVByb3RvKToKKyAgICAgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisgICAgICAgICAgICAgICAgZl9wcm90by5zZXRfcmVzdWx0KHNlbGYpCisKKyAgICAgICAgdHJ5X2NvdW50ID0gMAorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBvcnQgPSBmaW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoVGVzdE15UHJvdG8sIGhvc3Q9Tm9uZSwgcG9ydD1wb3J0KQorICAgICAgICAgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4OgorICAgICAgICAgICAgICAgIGlmIGV4LmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CisgICAgICAgICAgICAgICAgICAgIHRyeV9jb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDUsIHRyeV9jb3VudCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9wcm90bykKKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBmX3Byb3RvID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2KQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzo6MScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZChiJ3h4eCcpCisgICAgICAgIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX3Byb3RvKQorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZXJ2ZXJfY2xvc2Uoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnMC4wLjAuMCcsIDApCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKworICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQ29ubmVjdGlvblJlZnVzZWRFcnJvciwgY2xpZW50LmNvbm5lY3QsICgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RNeURhdGFncmFtUHJvdG8oTXlEYXRhZ3JhbVByb3RvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhpbm5lcl9zZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5kYXRhZ3JhbV9yZWNlaXZlZChkYXRhLCBhZGRyKQorICAgICAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LnNlbmR0byhiJ3Jlc3A6JytkYXRhLCBhZGRyKQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgVGVzdE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApKQorICAgICAgICBzX3RyYW5zcG9ydCwgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICBob3N0LCBwb3J0ID0gc190cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGxhbWJkYTogTXlEYXRhZ3JhbVByb3RvKGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgIHJlbW90ZV9hZGRyPShob3N0LCBwb3J0KSkKKyAgICAgICAgdHJhbnNwb3J0LCBjbGllbnQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSU5JVElBTElaRUQnLCBjbGllbnQuc3RhdGUpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYid4eHgnKQorICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIGlmIHNlcnZlci5uYnl0ZXM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHNlcnZlci5uYnl0ZXMpCisgICAgICAgIGZvciBfIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgaWYgY2xpZW50Lm5ieXRlczoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgIyByZWNlaXZlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIGNsaWVudC5uYnl0ZXMpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY2xpZW50LmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIGNsaWVudC5zdGF0ZSkKKyAgICAgICAgc2VydmVyLnRyYW5zcG9ydC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9pbnRlcm5hbF9mZHMoc2VsZik6CisgICAgICAgIGxvb3AgPSBzZWxmLmNyZWF0ZV9ldmVudF9sb29wKCkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobG9vcCwgc2VsZWN0b3JfZXZlbnRzLkJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxvb3AuX2ludGVybmFsX2ZkcykKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbG9vcC5faW50ZXJuYWxfZmRzKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb29wLl9jc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9vcC5fc3NvY2spCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3RfcmVhZF9waXBlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlSZWFkUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgcnBpcGUsIHdwaXBlID0gb3MucGlwZSgpCisgICAgICAgIHBpcGVvYmogPSBpby5vcGVuKHJwaXBlLCAncmInLCAxMDI0KQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIHQsIHAgPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jb25uZWN0X3JlYWRfcGlwZShmYWN0b3J5LCBwaXBlb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwLCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJ10sIHByb3RvLnN0YXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisKKyAgICAgICAgb3Mud3JpdGUod3BpcGUsIGInMScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHByb3RvLm5ieXRlcykKKworICAgICAgICBvcy53cml0ZSh3cGlwZSwgYicyMzQ1JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgb3MuY2xvc2Uod3BpcGUpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsnSU5JVElBTCcsICdDT05ORUNURUQnLCAnRU9GJywgJ0NMT1NFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BpcGUnKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF93cml0ZV9waXBlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwb3J0ID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVdyaXRlUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgcnBpcGUsIHdwaXBlID0gb3MucGlwZSgpCisgICAgICAgIHBpcGVvYmogPSBpby5vcGVuKHdwaXBlLCAnd2InLCAxMDI0KQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHRyYW5zcG9ydAorICAgICAgICAgICAgdCwgcCA9IHlpZWxkIGZyb20gc2VsZi5sb29wLmNvbm5lY3Rfd3JpdGVfcGlwZShmYWN0b3J5LCBwaXBlb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwLCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgICAgICB0cmFuc3BvcnQgPSB0CisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInMScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBkYXRhID0gb3MucmVhZChycGlwZSwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEnLCBkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZGF0YSA9IG9zLnJlYWQocnBpcGUsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicyMzQ1JywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgb3MuY2xvc2UocnBpcGUpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BpcGUnKSkKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF93cml0ZV9waXBlX2Rpc2Nvbm5lY3Rfb25fY2xvc2Uoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3BvcnQgPSBOb25lCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICBwcm90byA9IE15V3JpdGVQaXBlUHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZXR1cm4gcHJvdG8KKworICAgICAgICByc29jaywgd3NvY2sgPSBzZWxmLmxvb3AuX3NvY2tldHBhaXIoKQorICAgICAgICBwaXBlb2JqID0gaW8ub3Blbih3c29jay5kZXRhY2goKSwgJ3diJywgMTAyNCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCB0cmFuc3BvcnQKKyAgICAgICAgICAgIHQsIHAgPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jb25uZWN0X3dyaXRlX3BpcGUoZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gdAorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicxJykKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VsZi5sb29wLnNvY2tfcmVjdihyc29jaywgMTAyNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxJywgZGF0YSkKKworICAgICAgICByc29jay5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgIGRlZiB0ZXN0X3Byb21wdF9jYW5jZWxsYXRpb24oc2VsZik6CisgICAgICAgIHIsIHcgPSB0ZXN0X3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICByLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfcmVjdihyLCAxKQorICAgICAgICBvdiA9IGdldGF0dHIoZiwgJ292JywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG92IGlzIE5vbmUgb3Igb3YucGVuZGluZykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBtYWluKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihmLmNhbmNlbCkKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHJlcyA9ICdjYW5jZWxsZWQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlcyA9IE5vbmUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHN0YXJ0ID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICB0ID0gdGFza3MuVGFzayhtYWluKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBlbGFwc2VkID0gdGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0CisKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGVsYXBzZWQsIDAuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnY2FuY2VsbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdiBpcyBOb25lIG9yIG5vdCBvdi5wZW5kaW5nKQorICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhyKQorCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICB3LmNsb3NlKCkKKworCitjbGFzcyBTdWJwcm9jZXNzVGVzdHNNaXhpbjoKKworICAgIGRlZiBjaGVja190ZXJtaW5hdGVkKHNlbGYsIHJldHVybmNvZGUpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKDAsIHJldHVybmNvZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHVEVSTSwgcmV0dXJuY29kZSkKKworICAgIGRlZiBjaGVja19raWxsZWQoc2VsZiwgcmV0dXJuY29kZSk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldHVybmNvZGUsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoMCwgcmV0dXJuY29kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdLSUxMLCByZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGVjKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHN0ZGluLndyaXRlKGInUHl0aG9uIFRoZSBXaW5uZXInKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInUHl0aG9uIFRoZSBXaW5uZXInLCBwcm90by5kYXRhWzFdKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19pbnRlcmFjdGl2ZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICAgICAgc3RkaW4ud3JpdGUoYidQeXRob24gJykKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICAgICAgcHJvdG8uZ290X2RhdGFbMV0uY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1B5dGhvbiAnLCBwcm90by5kYXRhWzFdKQorCisgICAgICAgICAgICBzdGRpbi53cml0ZShiJ1RoZSBXaW5uZXInKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsxXS53YWl0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInUHl0aG9uIFRoZSBXaW5uZXInLCBwcm90by5kYXRhWzFdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJhbnNwLmNsb3NlKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja190ZXJtaW5hdGVkKHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3NoZWxsKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICdlY2hvIFB5dGhvbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbChmLmRvbmUoKSBmb3IgZiBpbiBwcm90by5kaXNjb25uZWN0cy52YWx1ZXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uZGF0YVsxXS5yc3RyaXAoYidcclxuJyksIGInUHl0aG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5kYXRhWzJdLCBiJycpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2V4aXRjb2RlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgJ2V4aXQgNycsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2Nsb3NlX2FmdGVyX2ZpbmlzaChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgyKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2tpbGwoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNoby5weScpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHRyYW5zcC5raWxsKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfa2lsbGVkKHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLnRlcm1pbmF0ZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmNoZWNrX3Rlcm1pbmF0ZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICd3aW4zMicsICJEb24ndCBoYXZlIFNJR0hVUCIpCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zZW5kX3NpZ25hbChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdIVVApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHSFVQLCBwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zdGRlcnIoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNobzIucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc3RkaW4ud3JpdGUoYid0ZXN0JykKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKworICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInT1VUOnRlc3QnLCBwcm90by5kYXRhWzFdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uZGF0YVsyXS5zdGFydHN3aXRoKGInRVJSOnRlc3QnKSwgcHJvdG8uZGF0YVsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zdGRlcnJfcmVkaXJlY3RfdG9fc3Rkb3V0KHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8yLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgyKSkKKworICAgICAgICBzdGRpbi53cml0ZShiJ3Rlc3QnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvLmRhdGFbMV0uc3RhcnRzd2l0aChiJ09VVDp0ZXN0RVJSOnRlc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLmRhdGFbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBwcm90by5kYXRhWzJdKQorCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfY2xvc2VfY2xpZW50X3N0cmVhbShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvMy5weScpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRvdXQgPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpCisgICAgICAgIHN0ZGluLndyaXRlKGIndGVzdCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInT1VUOnRlc3QnLCBwcm90by5kYXRhWzFdKQorCisgICAgICAgIHN0ZG91dC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZGlzY29ubmVjdHNbMV0pCisgICAgICAgIHN0ZGluLndyaXRlKGIneHh4JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsyXS53YWl0KCkpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0VSUjpCcm9rZW5QaXBlRXJyb3InLCBwcm90by5kYXRhWzJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBZnRlciBjbG9zaW5nIHRoZSByZWFkLWVuZCBvZiBhIHBpcGUsIHdyaXRpbmcgdG8gdGhlCisgICAgICAgICAgICAjIHdyaXRlLWVuZCB1c2luZyBvcy53cml0ZSgpIGZhaWxzIHdpdGggZXJybm89PUVJTlZBTCBhbmQKKyAgICAgICAgICAgICMgR2V0TGFzdEVycm9yKCk9PUVSUk9SX0lOVkFMSURfTkFNRSBvbiBXaW5kb3dzIT8hICAoVXNpbmcKKyAgICAgICAgICAgICMgV3JpdGVGaWxlKCkgd2UgZ2V0IEVSUk9SX0JST0tFTl9QSVBFIGFzIGV4cGVjdGVkLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidFUlI6T1NFcnJvcicsIHByb3RvLmRhdGFbMl0pCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmNoZWNrX3Rlcm1pbmF0ZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfd2FpdF9ub19zYW1lX2dyb3VwKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICAjIHN0YXJ0IHRoZSBuZXcgcHJvY2VzcyBpbiBhIG5ldyBzZXNzaW9uCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAorICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBwcm90by5yZXR1cm5jb2RlKQorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgd2luZG93c19ldmVudHMKKworICAgIGNsYXNzIFNlbGVjdEV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gd2luZG93c19ldmVudHMuU2VsZWN0b3JFdmVudExvb3AoKQorCisgICAgY2xhc3MgUHJvYWN0b3JFdmVudExvb3BUZXN0cyhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHdpbmRvd3NfZXZlbnRzLlByb2FjdG9yRXZlbnRMb29wKCkKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbWNvbXBhdGlibGUgd2l0aCBTU0wiKQorCisgICAgICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgaW1jb21wYXRpYmxlIHdpdGggU1NMIikKKworICAgICAgICBkZWYgdGVzdF9yZWFkZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF9yZWFkZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrX2NhbmNlbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3JlYWRlcigpIikKKworICAgICAgICBkZWYgdGVzdF93cml0ZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF93cml0ZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3Rfd3JpdGVyX2NhbGxiYWNrX2NhbmNlbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3dyaXRlcigpIikKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgICAgICAgICAiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgpIikKK2Vsc2U6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCBzZWxlY3RvcnMKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHVuaXhfZXZlbnRzCisKKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ0txdWV1ZVNlbGVjdG9yJyk6CisgICAgICAgIGNsYXNzIEtxdWV1ZUV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuU2VsZWN0b3JFdmVudExvb3AoCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5LcXVldWVTZWxlY3RvcigpKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdFcG9sbFNlbGVjdG9yJyk6CisgICAgICAgIGNsYXNzIEVQb2xsRXZlbnRMb29wVGVzdHMoRXZlbnRMb29wVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IoKSkKKworICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgICAgIGNsYXNzIFBvbGxFdmVudExvb3BUZXN0cyhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JzLlBvbGxTZWxlY3RvcigpKQorCisgICAgIyBTaG91bGQgYWx3YXlzIGV4aXN0LgorICAgIGNsYXNzIFNlbGVjdEV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IoKSkKKworCitjbGFzcyBIYW5kbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworCisgICAgICAgIGFyZ3MgPSAoKQorICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fYXJncywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgciA9IHJlcHIoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICdIYW5kbGUoJworICAgICAgICAgICAgJzxmdW5jdGlvbiBIYW5kbGVUZXN0cy50ZXN0X2hhbmRsZS48bG9jYWxzPi5jYWxsYmFjaycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoci5lbmRzd2l0aCgnKCkpJykpCisKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaC5fY2FuY2VsbGVkKQorCisgICAgICAgIHIgPSByZXByKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAnSGFuZGxlKCcKKyAgICAgICAgICAgICc8ZnVuY3Rpb24gSGFuZGxlVGVzdHMudGVzdF9oYW5kbGUuPGxvY2Fscz4uY2FsbGJhY2snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKTxjYW5jZWxsZWQ+JyksIHIpCisKKyAgICBkZWYgdGVzdF9tYWtlX2hhbmRsZShzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisgICAgICAgIGgxID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGV2ZW50cy5tYWtlX2hhbmRsZSwgaDEsICgpKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfd2l0aF9leGNlcHRpb24oc2VsZiwgbG9nKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKworICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgKCkpCisgICAgICAgIGguX3J1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2cuZXhjZXB0aW9uLmNhbGxlZCkKKworCitjbGFzcyBUaW1lclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHdoZW4gPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIGggPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgbGFtYmRhOiBGYWxzZSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChoKSwgaGFzaCh3aGVuKSkKKworICAgIGRlZiB0ZXN0X3RpbWVyKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICBhcmdzID0gKCkKKyAgICAgICAgd2hlbiA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgaCA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fYXJncywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgciA9IHJlcHIoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKScpKQorCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguX2NhbmNlbGxlZCkKKworICAgICAgICByID0gcmVwcihoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoci5lbmRzd2l0aCgnKCkpPGNhbmNlbGxlZD4nKSwgcikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLlRpbWVySGFuZGxlLCBOb25lLCBjYWxsYmFjaywgYXJncykKKworICAgIGRlZiB0ZXN0X3RpbWVyX2NvbXBhcmlzb24oc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworCisgICAgICAgIHdoZW4gPSB0aW1lLm1vbm90b25pYygpCisKKyAgICAgICAgaDEgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssICgpKQorICAgICAgICBoMiA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCkpCisgICAgICAgICMgVE9ETzogVXNlIGFzc2VydExlc3MgZXRjLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxIDwgaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPCBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDw9IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPD0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPiBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMiA+IGgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPj0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+PSBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxID09IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxICE9IGgyKQorCisgICAgICAgIGgyLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPT0gaDIpCisKKyAgICAgICAgaDEgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssICgpKQorICAgICAgICBoMiA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuICsgMTAuMCwgY2FsbGJhY2ssICgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPCBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMiA8IGgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPD0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPD0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPiBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgyID4gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPj0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+PSBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA9PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxICE9IGgyKQorCisgICAgICAgIGgzID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm90SW1wbGVtZW50ZWQsIGgxLl9fZXFfXyhoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm90SW1wbGVtZW50ZWQsIGgxLl9fbmVfXyhoMykpCisKKworY2xhc3MgQWJzdHJhY3RFdmVudExvb3BUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIGYgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBsb29wID0gZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJ1bl9mb3JldmVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmlzX3J1bm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfbGF0ZXIsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX2F0LCBmLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9zb29uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AudGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX2luX2V4ZWN1dG9yLCBmLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5nZXRhZGRyaW5mbywgJ2xvY2FsaG9zdCcsIDgwODApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5nZXRuYW1laW5mbywgKCdsb2NhbGhvc3QnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9jb25uZWN0aW9uLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY3JlYXRlX3NlcnZlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF9yZWFkZXIsIDEsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5yZW1vdmVfcmVhZGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuYWRkX3dyaXRlciwgMSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV93cml0ZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX3JlY3YsIGYsIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc29ja19zZW5kYWxsLCBmLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfY29ubmVjdCwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfYWNjZXB0LCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCAxLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY29ubmVjdF9yZWFkX3BpcGUsIGYsCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLnNlbnRpbmVsLnBpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jb25uZWN0X3dyaXRlX3BpcGUsIGYsCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLnNlbnRpbmVsLnBpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdWJwcm9jZXNzX3NoZWxsLCBmLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5zZW50aW5lbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnN1YnByb2Nlc3NfZXhlYywgZikKKworCitjbGFzcyBQcm90b2NvbHNBYnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHAgPSBwcm90b2NvbHMuUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLmNvbm5lY3Rpb25fbWFkZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5jb25uZWN0aW9uX2xvc3QoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuZGF0YV9yZWNlaXZlZChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5lb2ZfcmVjZWl2ZWQoKSkKKworICAgICAgICBkcCA9IHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuY29ubmVjdGlvbl9tYWRlKGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5jb25uZWN0aW9uX2xvc3QoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmNvbm5lY3Rpb25fcmVmdXNlZChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuZGF0YWdyYW1fcmVjZWl2ZWQoZiwgZikpCisKKyAgICAgICAgc3AgPSBwcm90b2NvbHMuU3VicHJvY2Vzc1Byb3RvY29sKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AuY29ubmVjdGlvbl9tYWRlKGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5jb25uZWN0aW9uX2xvc3QoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLnBpcGVfZGF0YV9yZWNlaXZlZCgxLCBmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucGlwZV9jb25uZWN0aW9uX2xvc3QoMSwgZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLnByb2Nlc3NfZXhpdGVkKCkpCisKKworY2xhc3MgUG9saWN5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZXZlbnRfbG9vcF9wb2xpY3koc2VsZik6CisgICAgICAgIHBvbGljeSA9IGV2ZW50cy5BYnN0cmFjdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LnNldF9ldmVudF9sb29wLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5Lm5ld19ldmVudF9sb29wKQorCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgIHBvbGljeSA9IGV2ZW50cy5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll9sb29wKQorCisgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vcCwgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5Ll9sb29wLCBsb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX2FmdGVyX3NldF9ub25lKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBldmVudHMuRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9saWN5LmdldF9ldmVudF9sb29wKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uZXZlbnRzLnRocmVhZGluZy5jdXJyZW50X3RocmVhZCcpCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfdGhyZWFkKHNlbGYsIG1fY3VycmVudF90aHJlYWQpOgorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwb2xpY3kgPSBldmVudHMuRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9saWN5LmdldF9ldmVudF9sb29wKQorCisgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdGguc3RhcnQoKQorICAgICAgICB0aC5qb2luKCkKKworICAgIGRlZiB0ZXN0X25ld19ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBldmVudHMuRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKyAgICAgICAgbG9vcCA9IHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb29wLCBldmVudHMuQWJzdHJhY3RFdmVudExvb3ApCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2V0X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgIHBvbGljeSA9IGV2ZW50cy5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgb2xkX2xvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBwb2xpY3kuc2V0X2V2ZW50X2xvb3AsIG9iamVjdCgpKQorCisgICAgICAgIGxvb3AgPSBwb2xpY3kubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb29wLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvbGRfbG9vcCwgcG9saWN5LmdldF9ldmVudF9sb29wKCkpCisgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICBvbGRfbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcF9wb2xpY3koc2VsZik6CisgICAgICAgIHBvbGljeSA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9saWN5LCBldmVudHMuQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5LCBldmVudHMuZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkpCisKKyAgICBkZWYgdGVzdF9zZXRfZXZlbnRfbG9vcF9wb2xpY3koc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGV2ZW50cy5zZXRfZXZlbnRfbG9vcF9wb2xpY3ksIG9iamVjdCgpKQorCisgICAgICAgIG9sZF9wb2xpY3kgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKworICAgICAgICBwb2xpY3kgPSBldmVudHMuRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KQorICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeSwgZXZlbnRzLmdldF9ldmVudF9sb29wX3BvbGljeSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHBvbGljeSwgb2xkX3BvbGljeSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZnV0dXJlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NlYTJmZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKQEAgLTAsMCArMSwzMjkgQEAKKyIiIlRlc3RzIGZvciBmdXR1cmVzLnB5LiIiIgorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2RlZiBfZmFrZWZ1bmMoZik6CisgICAgcmV0dXJuIGYKKworCitjbGFzcyBGdXR1cmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxfc3RhdGUoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfaW5pdF9jb25zdHJ1Y3Rvcl9kZWZhdWx0X2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3Bvc2l0aW9uYWwoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIEZ1dHVyZSBkb2VzJ3QgYWNjZXB0IGEgcG9zaXRpb25hbCBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZ1dHVyZXMuRnV0dXJlLCA0MikKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIGYuZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9yZXN1bHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X2V4Y2VwdGlvbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfcmVzdWx0KHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYucmVzdWx0KQorCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfcmVzdWx0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9leGNlcHRpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLmV4Y2VwdGlvbikKKworICAgICAgICBmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmLnJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmV4Y2VwdGlvbigpLCBleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X3Jlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfZXhjZXB0aW9uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tX3R3aWNlKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGZpeHR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkICdBJworICAgICAgICAgICAgeCA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgeWllbGQgJ0InLCB4CisgICAgICAgICAgICB5ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICB5aWVsZCAnQycsIHkKKworICAgICAgICBnID0gZml4dHVyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgJ0EnKSAgIyB5aWVsZCAnQScuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgZikgICMgRmlyc3QgeWllbGQgZnJvbSBmLgorICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgKCdCJywgNDIpKSAgIyB5aWVsZCAnQicsIHguCisgICAgICAgICMgVGhlIHNlY29uZCAieWllbGQgZnJvbSBmIiBkb2VzIG5vdCB5aWVsZCBmLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICgnQycsIDQyKSkgICMgeWllbGQgJ0MnLCB5LgorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZl9wZW5kaW5nID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3BlbmRpbmcpLCAnRnV0dXJlPFBFTkRJTkc+JykKKyAgICAgICAgZl9wZW5kaW5nLmNhbmNlbCgpCisKKyAgICAgICAgZl9jYW5jZWxsZWQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9jYW5jZWxsZWQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfY2FuY2VsbGVkKSwgJ0Z1dHVyZTxDQU5DRUxMRUQ+JykKKworICAgICAgICBmX3Jlc3VsdCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX3Jlc3VsdC5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3Jlc3VsdCksICdGdXR1cmU8cmVzdWx0PTQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmX3Jlc3VsdC5yZXN1bHQoKSwgNCkKKworICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBmX2V4Y2VwdGlvbiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2V4Y2VwdGlvbi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfZXhjZXB0aW9uKSwgJ0Z1dHVyZTxleGNlcHRpb249UnVudGltZUVycm9yKCk+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmX2V4Y2VwdGlvbi5leGNlcHRpb24oKSwgZXhjKQorCisgICAgICAgIGZfZmV3X2NhbGxiYWNrcyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2Zld19jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2soX2Zha2VmdW5jKQorICAgICAgICBzZWxmLmFzc2VydEluKCdGdXR1cmU8UEVORElORywgWzxmdW5jdGlvbiBfZmFrZWZ1bmMnLAorICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZl9mZXdfY2FsbGJhY2tzKSkKKyAgICAgICAgZl9mZXdfY2FsbGJhY2tzLmNhbmNlbCgpCisKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKF9mYWtlZnVuYykKKyAgICAgICAgciA9IHJlcHIoZl9tYW55X2NhbGxiYWNrcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignRnV0dXJlPFBFTkRJTkcsIFs8ZnVuY3Rpb24gX2Zha2VmdW5jJywgcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignPDE4IG1vcmU+JywgcikKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcy5jYW5jZWwoKQorCisgICAgZGVmIHRlc3RfY29weV9zdGF0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBpbnRlcm5hbCBfY29weV9zdGF0ZSBtZXRob2Qgc2luY2UgaXQncyBiZWluZyBkaXJlY3RseQorICAgICAgICAjIGludm9rZWQgaW4gb3RoZXIgbW9kdWxlcy4KKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLnNldF9yZXN1bHQoMTApCisKKyAgICAgICAgbmV3ZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuZXdmLl9jb3B5X3N0YXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdmLnJlc3VsdCgpLCAxMCkKKworICAgICAgICBmX2V4Y2VwdGlvbiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2V4Y2VwdGlvbi5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcigpKQorCisgICAgICAgIG5ld2ZfZXhjZXB0aW9uID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG5ld2ZfZXhjZXB0aW9uLl9jb3B5X3N0YXRlKGZfZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9leGNlcHRpb24uZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG5ld2ZfZXhjZXB0aW9uLnJlc3VsdCkKKworICAgICAgICBmX2NhbmNlbGxlZCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2NhbmNlbGxlZC5jYW5jZWwoKQorCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkLl9jb3B5X3N0YXRlKGZfY2FuY2VsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9jYW5jZWxsZWQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgYXJnMSwgYXJnMiA9IGNvcm8oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0ZXN0KQorICAgICAgICBmdXQuY2FuY2VsKCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfYWJhbmRvbmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX3Jlc3VsdF91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfcmVzdWx0X3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZnV0LnJlc3VsdCgpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfZXhjZXB0aW9uX3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZnV0LmV4Y2VwdGlvbigpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl9yZXN1bHRfcmV0cmlldmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcignYm9vbScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGZ1dC5yZXN1bHQpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZShzZWxmKToKKworICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBleCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoMSkKKyAgICAgICAgZjEgPSBleC5zdWJtaXQocnVuLCAnb2knKQorICAgICAgICBmMiA9IGZ1dHVyZXMud3JhcF9mdXR1cmUoZjEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXMsIGlkZW50ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYyLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdvaScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWRlbnQsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZjEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjIgPSBmdXR1cmVzLndyYXBfZnV0dXJlKGYxKQorICAgICAgICBzZWxmLmFzc2VydElzKGYxLCBmMikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMuZXZlbnRzJykKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV91c2VfZ2xvYmFsX2xvb3Aoc2VsZiwgbV9ldmVudHMpOgorICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBleCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoMSkKKyAgICAgICAgZjEgPSBleC5zdWJtaXQocnVuLCAnb2knKQorICAgICAgICBmMiA9IGZ1dHVyZXMud3JhcF9mdXR1cmUoZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobV9ldmVudHMuZ2V0X2V2ZW50X2xvb3AucmV0dXJuX3ZhbHVlLCBmMi5fbG9vcCkKKworCitjbGFzcyBGdXR1cmVEb25lQ2FsbGJhY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiBydW5fYnJpZWZseShzZWxmKToKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgX21ha2VfY2FsbGJhY2soc2VsZiwgYmFnLCB0aGluZyk6CisgICAgICAgICMgQ3JlYXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBhcHBlbmRzIHRoaW5nIHRvIGJhZy4KKyAgICAgICAgZGVmIGJhZ19hcHBlbmRlcihmdXR1cmUpOgorICAgICAgICAgICAgYmFnLmFwcGVuZCh0aGluZykKKyAgICAgICAgcmV0dXJuIGJhZ19hcHBlbmRlcgorCisgICAgZGVmIF9uZXdfZnV0dXJlKHNlbGYpOgorICAgICAgICByZXR1cm4gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfaW52b2tlZF9vbl9zZXRfcmVzdWx0KHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDQyKSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMTcpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbXSkKKyAgICAgICAgZi5zZXRfcmVzdWx0KCdmb28nKQorCisgICAgICAgIHNlbGYucnVuX2JyaWVmbHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbNDIsIDE3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc19pbnZva2VkX29uX3NldF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGJhZyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9uZXdfZnV0dXJlKCkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMTAwKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgW10pCisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihleGMpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFsxMDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXhjZXB0aW9uKCksIGV4YykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9kb25lX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGNiMSA9IHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAxKQorICAgICAgICBjYjIgPSBzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMikKKyAgICAgICAgY2IzID0gc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDMpCisKKyAgICAgICAgIyBBZGQgb25lIGNiMSBhbmQgb25lIGNiMi4KKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjEpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IyKQorCisgICAgICAgICMgT25lIGluc3RhbmNlIG9mIGNiMiByZW1vdmVkLiBOb3cgdGhlcmUncyBvbmx5IG9uZSBjYjEuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjIpLCAxKQorCisgICAgICAgICMgTmV2ZXIgaGFkIGFueSBjYjMgaW4gdGhlcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjMpLCAwKQorCisgICAgICAgICMgQWZ0ZXIgdGhpcyB0aGVyZSB3aWxsIGJlIDYgaW5zdGFuY2VzIG9mIGNiMSBhbmQgb25lIG9mIGNiMi4KKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjEpCisKKyAgICAgICAgIyBSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBjYjEuIE9uZSBjYjIgcmVtYWlucy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiMSksIDYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFtdKQorICAgICAgICBmLnNldF9yZXN1bHQoJ2ZvbycpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAnZm9vJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9sb2Nrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWI0ZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkKQEAgLTAsMCArMSw3NjUgQEAKKyIiIlRlc3RzIGZvciBsb2NrLnB5IiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBsb2NrcworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIGxvb3ApCisKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9jay5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBsb2NrID0gbG9ja3MuTG9jaygpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIHNlbGYubG9vcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGxvY2spLmVuZHN3aXRoKCdbdW5sb2NrZWRdPicpKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobG9jaykuZW5kc3dpdGgoJ1tsb2NrZWRdPicpKQorCisgICAgZGVmIHRlc3RfbG9jayhzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmUoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGxvY2suYWNxdWlyZSgpKSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gbG9jay5hY3F1aXJlKCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHQzID0gdGFza3MuVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZV9jYW5jZWwoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShsb2NrLmFjcXVpcmUoKSkpCisKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2sobG9jay5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHRhc2suY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2suX3dhaXRlcnMpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfcmFjZShzZWxmKToKKyAgICAgICAgIyBTZXZlcmFsIHRhc2tzOgorICAgICAgICAjIC0gQSBhY3F1aXJlcyB0aGUgbG9jaworICAgICAgICAjIC0gQiBpcyBibG9ja2VkIGluIGFxY3VpcmUoKQorICAgICAgICAjIC0gQyBpcyBibG9ja2VkIGluIGFxY3VpcmUoKQorICAgICAgICAjCisgICAgICAgICMgTm93LCBjb25jdXJyZW50bHk6CisgICAgICAgICMgLSBCIGlzIGNhbmNlbGxlZAorICAgICAgICAjIC0gQSByZWxlYXNlcyB0aGUgbG9jaworICAgICAgICAjCisgICAgICAgICMgSWYgQidzIHdhaXRlciBpcyBtYXJrZWQgY2FuY2VsbGVkIGJ1dCBub3QgeWV0IHJlbW92ZWQgZnJvbQorICAgICAgICAjIF93YWl0ZXJzLCBBJ3MgcmVsZWFzZSgpIGNhbGwgd2lsbCBjcmFzaCB3aGVuIHRyeWluZyB0byBzZXQKKyAgICAgICAgIyBCJ3Mgd2FpdGVyOyBpbnN0ZWFkLCBpdCBzaG91bGQgbW92ZSBvbiB0byBDJ3Mgd2FpdGVyLgorCisgICAgICAgICMgU2V0dXA6IEEgaGFzIHRoZSBsb2NrLCBiIGFuZCBjIGFyZSB3YWl0aW5nLgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBsb2NraXQobmFtZSwgYmxvY2tlcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgYmxvY2tlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBibG9ja2VyCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICAgICAgZmEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGEgPSB0YXNrcy5UYXNrKGxvY2tpdCgnQScsIGZhKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5sb2NrZWQoKSkKKyAgICAgICAgdGIgPSB0YXNrcy5UYXNrKGxvY2tpdCgnQicsIE5vbmUpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvY2suX3dhaXRlcnMpLCAxKQorICAgICAgICB0YyA9IHRhc2tzLlRhc2sobG9ja2l0KCdDJywgTm9uZSksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9jay5fd2FpdGVycyksIDIpCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIHJhY2UgYW5kIGNoZWNrLgorICAgICAgICAjIFdpdGhvdXQgdGhlIGZpeCB0aGlzIGZhaWxlZCBhdCB0aGUgbGFzdCBhc3NlcnQuCisgICAgICAgIGZhLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGIuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2suX3dhaXRlcnNbMF0uY2FuY2VsbGVkKCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2subG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Yi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRjLmRvbmUoKSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm90X2FjcXVpcmVkKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxvY2sucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm9fd2FpdGVycyhzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX25vX3lpZWxkKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdSdW50aW1lRXJyb3IgaXMgbm90IHJhaXNlZCBpbiB3aXRoIGV4cHJlc3Npb24nKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc3RyKGVyciksCisgICAgICAgICAgICAgICAgJyJ5aWVsZCBmcm9tIiBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbicpCisKKworY2xhc3MgRXZlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGV2ID0gbG9ja3MuRXZlbnQobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGV2Ll9sb29wLCBsb29wKQorCisgICAgICAgIGV2ID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgZXYgPSBsb2Nrcy5FdmVudCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGV2Ll9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGV2ID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGV2KS5lbmRzd2l0aCgnW3Vuc2V0XT4nKSkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihldikuZW5kc3dpdGgoJ1tzZXRdPicpKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGV2LndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFszLCAxLCAyXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X29uX3NldChzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXYuc2V0KCkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGV2LndhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBldiA9IGxvY2tzLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHdhaXQgPSB0YXNrcy5UYXNrKGV2LndhaXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24od2FpdC5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHdhaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXYuX3dhaXRlcnMpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgZGVmIHRlc3RfY2xlYXJfd2l0aF93YWl0ZXJzKHNlbGYpOgorICAgICAgICBldiA9IGxvY2tzLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGV2Ll93YWl0ZXJzKSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oZXYuX3dhaXRlcnMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKworY2xhc3MgQ29uZGl0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBsb29wKQorCisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MyA9IHRhc2tzLlRhc2soYzMocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgY29uZC5ub3RpZnkoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorCisgICAgICAgIHdhaXQgPSB0YXNrcy5UYXNrKGNvbmQud2FpdCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3YWl0LmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgd2FpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLl9jb25kaXRpb25fd2FpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29uZC53YWl0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2ZvcihzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJlc3VsdCA9IEZhbHNlCisKKyAgICAgICAgZGVmIHByZWRpY2F0ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHByZXN1bHQKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXRfZm9yKHByZWRpY2F0ZSkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0ID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBwcmVzdWx0ID0gVHJ1ZQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBjb25kLm5vdGlmeSgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgcHJlZGljYXRlIGNhbiByZXR1cm4gdHJ1ZSBpbW1lZGlhdGVseQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQud2FpdF9mb3IobGFtYmRhOiBbMSwgMiwgM10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGNvbmQud2FpdF9mb3IobGFtYmRhOiBGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnkoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSB0YXNrcy5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQzID0gdGFza3MuVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KDEpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KDEpCisgICAgICAgIGNvbmQubm90aWZ5KDIwNDgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfYWxsKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSB0YXNrcy5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBjb25kLm5vdGlmeV9hbGwoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeV91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNvbmQubm90aWZ5KQorCisgICAgZGVmIHRlc3Rfbm90aWZ5X2FsbF91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNvbmQubm90aWZ5X2FsbCkKKworCitjbGFzcyBTZW1hcGhvcmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VtLl9sb29wLCBsb29wKQorCisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZW0uX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VtLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc2VtKS5lbmRzd2l0aCgnW3VubG9ja2VkLHZhbHVlOjFdPicpKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc2VtKS5lbmRzd2l0aCgnW2xvY2tlZF0+JykpCisKKyAgICBkZWYgdGVzdF9zZW1hcGhvcmUoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHNlbSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VtLl92YWx1ZSkKKworICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9zZW1hcGhvcmVfdmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2tzLlNlbWFwaG9yZSwgLTEpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlKHNlbGYpOgorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUoMywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMyKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjNChyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDQpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MyA9IHRhc2tzLlRhc2soYzMocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKHNlbS5fd2FpdGVycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VtLl92YWx1ZSkKKworICAgICAgICB0NCA9IHRhc2tzLlRhc2soYzQocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc2VtLl92YWx1ZSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihzZW0uX3dhaXRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NC5kb25lKCkpCisKKyAgICAgICAgIyBjbGVhbnVwIGxvY2tlZCBzZW1hcGhvcmUKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZV9jYW5jZWwoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKQorCisgICAgICAgIGFjcXVpcmUgPSB0YXNrcy5UYXNrKHNlbS5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGFjcXVpcmUuY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBhY3F1aXJlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5fd2FpdGVycykKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm90X2FjcXVpcmVkKHNlbGYpOgorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUoYm91bmQ9VHJ1ZSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VtLnJlbGVhc2UpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX25vX3dhaXRlcnMoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZSgyLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZW0pCisKKyAgICAgICAgd2l0aCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZW0uX3ZhbHVlKQorCisgICAgICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzZW0uX3ZhbHVlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9wcm9hY3Rvcl9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9wcm9hY3Rvcl9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyYTUxYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Byb2FjdG9yX2V2ZW50cy5weQpAQCAtMCwwICsxLDQ4NCBAQAorIiIiVGVzdHMgZm9yIHByb2FjdG9yX2V2ZW50cy5weSIiIgorCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBCYXNlUHJvYWN0b3JFdmVudExvb3AKK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitjbGFzcyBQcm9hY3RvclNvY2tldFRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvYWN0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yID0gc2VsZi5wcm9hY3RvcgorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZnV0LnJlc3VsdCgpKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZSh0cikKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIDQwOTYpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIDQwOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfZGF0YShzZWxmKToKKyAgICAgICAgcmVzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcy5zZXRfcmVzdWx0KGInZGF0YScpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIuX3JlYWRfZnV0ID0gcmVzCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcocmVzKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEnKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX25vX2RhdGEoc2VsZik6CisgICAgICAgIHJlcyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXMuc2V0X3Jlc3VsdChiJycpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRyLl9sb29wX3JlYWRpbmcsIHJlcykKKworICAgICAgICB0ci5jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9yZWFkX2Z1dCA9IHJlcworICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3YuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Fib3J0ZWQoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IoKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZF9jbG9zaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZF9pc19mYXRhbChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvbkFib3J0ZWRFcnJvcigpCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IEZhbHNlCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19jb25uX3Jlc2V0X2xvc3Qoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZXNldEVycm9yKCkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBGYWxzZQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IChPU0Vycm9yKCkpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgW2InZGF0YSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2xvb3Bfd3JpdGluZy5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9tb3JlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIFtiJ2RhdGEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fbG9vcF93cml0aW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICB0ci5fbG9vcF93cml0aW5nKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUuYWRkX2RvbmVfY2FsbGJhY2suXAorICAgICAgICAgICAgYXNzZXJ0X2NhbGxlZF93aXRoKHRyLl9sb29wX3dyaXRpbmcpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9sb29wX3dyaXRpbmdfZXJyKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZygpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICB0ci5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgW10pCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19zdG9wKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoYidkYXRhJykKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IGZ1dAorICAgICAgICB0ci5fbG9vcF93cml0aW5nKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3dyaXRlX2Z1dCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19jbG9zaW5nKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoMSkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IGZ1dAorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fd3JpdGVfZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9hYm9ydChzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLmFib3J0KCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QucmVzZXRfbW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfd3JpdGVfZnV0KHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY2xvc2VfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnByb2FjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yKHNlbGYsIG1fbG9nZ2luZyk6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9mb3JjZV9jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZ2dpbmcuZXhjZXB0aW9uLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZvcmNlX2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICByZWFkX2Z1dCA9IHRyLl9yZWFkX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlX2Z1dCA9IHRyLl93cml0ZV9mdXQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICByZWFkX2Z1dC5jYW5jZWwuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgd3JpdGVfZnV0LmNhbmNlbC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgIGRlZiB0ZXN0X2ZvcmNlX2Nsb3NlX2lkZW1wb3RlbnQoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yXzIoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGF0YSddCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsX2NvdW50LCAxKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUgPSBmCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZW9mX3dyaXR0ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxlZCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgZi5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Zfd3JpdGVfcGlwZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9idWZmZXJfd3JpdGVfcGlwZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxlZCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgZi5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9kdXBsZXhfcGlwZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGZ1dHVyZXMgPSBbXQorICAgICAgICBmb3IgbXNnIGluIFtiJ2RhdGExJywgYidkYXRhMicsIGInZGF0YTMnLCBiJ2RhdGE0JywgYicnXToKKyAgICAgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChtc2cpCisgICAgICAgICAgICBmdXR1cmVzLmFwcGVuZChmKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBmdXR1cmVzCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTEnKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEyJykKKyAgICAgICAgdHIucGF1c2VfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fcGF1c2VkKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEyJykKKyAgICAgICAgdHIucmVzdW1lX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTMnKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGE0JykKKyAgICAgICAgdHIuY2xvc2UoKQorCisKK2NsYXNzIEJhc2VQcm9hY3RvckV2ZW50TG9vcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYucHJvYWN0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc3NvY2ssIHNlbGYuY3NvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKSwgdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBjbGFzcyBFdmVudExvb3AoQmFzZVByb2FjdG9yRXZlbnRMb29wKToKKyAgICAgICAgICAgIGRlZiBfc29ja2V0cGFpcihzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuc3NvY2ssIHNlbGYuY3NvY2spCisKKyAgICAgICAgc2VsZi5sb29wID0gRXZlbnRMb29wKHNlbGYucHJvYWN0b3IpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoQmFzZVByb2FjdG9yRXZlbnRMb29wLCAnY2FsbF9zb29uJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoQmFzZVByb2FjdG9yRXZlbnRMb29wLCAnX3NvY2tldHBhaXInKQorICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZiwgc29ja2V0cGFpciwgY2FsbF9zb29uKToKKyAgICAgICAgc3NvY2ssIGNzb2NrID0gc29ja2V0cGFpci5yZXR1cm5fdmFsdWUgPSAoCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLk1vY2soKSwgdW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIGxvb3AgPSBCYXNlUHJvYWN0b3JFdmVudExvb3Aoc2VsZi5wcm9hY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb29wLl9zc29jaywgc3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcC5fY3NvY2ssIGNzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb3AuX2ludGVybmFsX2ZkcywgMSkKKyAgICAgICAgY2FsbF9zb29uLmFzc2VydF9jYWxsZWRfd2l0aChsb29wLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9jbG9zZV9zZWxmX3BpcGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5faW50ZXJuYWxfZmRzLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9jc29jaykKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb2FjdG9yLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9wcm9hY3RvcikKKworICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zb2NrX3JlY3Yoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc2VsZi5zb2NrLCAxMDI0KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgMTAyNCkKKworICAgIGRlZiB0ZXN0X3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYucHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorCisgICAgZGVmIHRlc3Rfc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNlbGYuc29jaywgMTIzKQorICAgICAgICBzZWxmLnByb2FjdG9yLmNvbm5lY3QuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgMTIzKQorCisgICAgZGVmIHRlc3Rfc29ja19hY2NlcHQoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX2FjY2VwdChzZWxmLnNvY2spCisgICAgICAgIHNlbGYucHJvYWN0b3IuYWNjZXB0LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2spCisKKyAgICBkZWYgdGVzdF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIEJhc2VQcm9hY3RvckV2ZW50TG9vcCwgc2VsZi5wcm9hY3RvcikKKworICAgIGRlZiB0ZXN0X21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmLnNvY2ssIHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfc2VsZl9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNzb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgdGVzdF9sb29wX3NlbGZfcmVhZGluZ19mdXQoc2VsZik6CisgICAgICAgIGZ1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LnJlc3VsdC5jYWxsZWQpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zc29jaywgNDA5NikKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LnJldHVybl92YWx1ZS5hZGRfZG9uZV9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBzZWxmLmxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKQorCisgICAgZGVmIHRlc3RfbG9vcF9zZWxmX3JlYWRpbmdfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYoKQorICAgICAgICBzZWxmLmNzb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGIneCcpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2V2ZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyhbXSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnByb2FjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXIoc2VsZiwgbV9sb2cpOgorICAgICAgICBwZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxfc29vbiA9IHNlbGYubG9vcC5jYWxsX3Nvb24gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZyhwZiwgc2VsZi5zb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbF9zb29uLmNhbGxlZCkKKworICAgICAgICAjIGNhbGxiYWNrCisgICAgICAgIGxvb3AgPSBjYWxsX3Nvb24uY2FsbF9hcmdzWzBdWzBdCisgICAgICAgIGxvb3AoKQorICAgICAgICBzZWxmLnByb2FjdG9yLmFjY2VwdC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrKQorCisgICAgICAgICMgY29ubgorICAgICAgICBmdXQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBmdXQucmVzdWx0LnJldHVybl92YWx1ZSA9ICh1bml0dGVzdC5tb2NrLk1vY2soKSwgdW5pdHRlc3QubW9jay5Nb2NrKCkpCisKKyAgICAgICAgbWFrZV90ciA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2VfdHIuY2FsbGVkKQorCisgICAgICAgICMgZXhjZXB0aW9uCisgICAgICAgIGZ1dC5yZXN1bHQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2cuZXhjZXB0aW9uLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfY2FuY2VsKHNlbGYpOgorICAgICAgICBwZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxfc29vbiA9IHNlbGYubG9vcC5jYWxsX3Nvb24gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZyhwZiwgc2VsZi5zb2NrKQorICAgICAgICBsb29wID0gY2FsbF9zb29uLmNhbGxfYXJnc1swXVswXQorCisgICAgICAgICMgY2FuY2VsbGVkCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc3RvcF9zZXJ2aW5nKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zdG9wX3NlcnZpbmcoc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLnByb2FjdG9yLl9zdG9wX3NlcnZpbmcuYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2spCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3F1ZXVlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3F1ZXVlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWY0ZWU3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5CkBAIC0wLDAgKzEsNDcwIEBACisiIiJUZXN0cyBmb3IgcXVldWVzLnB5IiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBsb2NrcworZnJvbSBhc3luY2lvIGltcG9ydCBxdWV1ZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIF9RdWV1ZVRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisKK2NsYXNzIFF1ZXVlQmFzaWNUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgX3Rlc3RfcmVwcl9vcl9zdHIoc2VsZiwgZm4sIGV4cGVjdF9pZCk6CisgICAgICAgICIiIlRlc3QgUXVldWUncyByZXByIG9yIHN0ci4KKworICAgICAgICBmbiBpcyByZXByIG9yIHN0ci4gZXhwZWN0X2lkIGlzIFRydWUgaWYgd2UgZXhwZWN0IHRoZSBRdWV1ZSdzIGlkIHRvCisgICAgICAgIGFwcGVhciBpbiBmbihRdWV1ZSgpKS4KKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbihxKS5zdGFydHN3aXRoKCc8UXVldWUnKSwgZm4ocSkpCisgICAgICAgIGlkX2lzX3ByZXNlbnQgPSBoZXgoaWQocSkpIGluIGZuKHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0X2lkLCBpZF9pc19wcmVzZW50KQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFkZF9nZXR0ZXIoKToKKyAgICAgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorICAgICAgICAgICAgIyBTdGFydCBhIHRhc2sgdGhhdCB3YWl0cyB0byBnZXQuCisgICAgICAgICAgICB0YXNrcy5UYXNrKHEuZ2V0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgTGV0IGl0IHN0YXJ0IHdhaXRpbmcuCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdfZ2V0dGVyc1sxXScgaW4gZm4ocSkpCisgICAgICAgICAgICAjIHJlc3VtZSBxLmdldCBjb3JvdXRpbmUgdG8gZmluaXNoIGdlbmVyYXRvcgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KDApCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWRkX2dldHRlcigpKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFkZF9wdXR0ZXIoKToKKyAgICAgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgICAgICMgU3RhcnQgYSB0YXNrIHRoYXQgd2FpdHMgdG8gcHV0LgorICAgICAgICAgICAgdGFza3MuVGFzayhxLnB1dCgyKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgIyBMZXQgaXQgc3RhcnQgd2FpdGluZy4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19wdXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEucHV0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLmdldF9ub3dhaXQoKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFkZF9wdXR0ZXIoKSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX3F1ZXVlPVsxXScgaW4gZm4ocSkpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9sb29wLCBsb29wKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBxID0gcXVldWVzLlF1ZXVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlcHJfb3Jfc3RyKHJlcHIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVwcl9vcl9zdHIoc3RyLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxLmVtcHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9mdWxsKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEuZnVsbCgpKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiBbMSwgMywgMl06CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoaSkKKworICAgICAgICBpdGVtcyA9IFtxLmdldF9ub3dhaXQoKSBmb3IgXyBpbiByYW5nZSgzKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMywgMl0sIGl0ZW1zKQorCisgICAgZGVmIHRlc3RfbWF4c2l6ZShzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDIsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKG1heHNpemU9MiwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHEubWF4c2l6ZSkKKyAgICAgICAgaGF2ZV9iZWVuX3B1dCA9IFtdCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcHV0dGVyKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KGkpCisgICAgICAgICAgICAgICAgaGF2ZV9iZWVuX3B1dC5hcHBlbmQoaSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgdCA9IHRhc2tzLlRhc2socHV0dGVyKCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorCisgICAgICAgICAgICAjIFRoZSBwdXR0ZXIgaXMgYmxvY2tlZCBhZnRlciBwdXR0aW5nIHR3byBpdGVtcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzAsIDFdLCBoYXZlX2JlZW5fcHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBxLmdldF9ub3dhaXQoKSkKKworICAgICAgICAgICAgIyBMZXQgdGhlIHB1dHRlciByZXN1bWUgYW5kIHB1dCBsYXN0IGl0ZW0uCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzAsIDEsIDJdLCBoYXZlX2JlZW5fcHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcS5nZXRfbm93YWl0KCkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAyLCBsb29wLnRpbWUoKSkKKworCitjbGFzcyBRdWV1ZUdldFRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X2Jsb2NraW5nX2dldChzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gcS5nZXQoKSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX2dldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlcykKKworICAgIGRlZiB0ZXN0X2dldF93aXRoX3B1dHRlcnMoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUoMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLl9wdXR0ZXJzLmFwcGVuZCgoMiwgd2FpdGVyKSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdGVyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2FpdGVyLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfZ2V0X3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgc3RhcnRlZCA9IGxvY2tzLkV2ZW50KGxvb3A9bG9vcCkKKyAgICAgICAgZmluaXNoZWQgPSBGYWxzZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgZmluaXNoZWQKKyAgICAgICAgICAgIHN0YXJ0ZWQuc2V0KCkKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gcS5nZXQoKQorICAgICAgICAgICAgZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMC4wMSwgcS5wdXRfbm93YWl0LCAxKQorICAgICAgICAgICAgcXVldWVfZ2V0X3Rhc2sgPSB0YXNrcy5UYXNrKHF1ZXVlX2dldCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0YXJ0ZWQud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmlzaGVkKQorICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBxdWV1ZV9nZXRfdGFzaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmlzaGVkKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX3B1dCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX2dldChzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisKKyAgICBkZWYgdGVzdF9ub25ibG9ja2luZ19nZXRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhxdWV1ZXMuRW1wdHksIHEuZ2V0X25vd2FpdCkKKworICAgIGRlZiB0ZXN0X2dldF9jYW5jZWxsZWQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA2MSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHRhc2tzLndhaXRfZm9yKHEuZ2V0KCksIDAuMDUxLCBsb29wPWxvb3ApKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGdldF90YXNrID0gdGFza3MuVGFzayhxdWV1ZV9nZXQoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcCgwLjAxLCBsb29wPWxvb3ApICAjIGxldCB0aGUgdGFzayBzdGFydAorICAgICAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZ2V0X3Rhc2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDYsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NhbmNlbGxlZF9yYWNlKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhxLmdldCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICB0MS5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgcS5wdXRfbm93YWl0KCdhJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIucmVzdWx0KCksICdhJykKKworICAgIGRlZiB0ZXN0X2dldF93aXRoX3dhaXRpbmdfcHV0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCwgbWF4c2l6ZT0xKQorICAgICAgICB0YXNrcy5UYXNrKHEucHV0KCdhJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrcy5UYXNrKHEucHV0KCdiJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLmdldCgpKSwgJ2InKQorCisKK2NsYXNzIFF1ZXVlUHV0VGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfcHV0KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX3B1dCgpOgorICAgICAgICAgICAgIyBObyBtYXhzaXplLCB3b24ndCBibG9jay4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5wdXQoMSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX3B1dCgpKQorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfcHV0X3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKG1heHNpemU9MSwgbG9vcD1sb29wKQorICAgICAgICBzdGFydGVkID0gbG9ja3MuRXZlbnQobG9vcD1sb29wKQorICAgICAgICBmaW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICBub25sb2NhbCBmaW5pc2hlZAorICAgICAgICAgICAgc3RhcnRlZC5zZXQoKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgyKQorICAgICAgICAgICAgZmluaXNoZWQgPSBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMC4wMSwgcS5nZXRfbm93YWl0KQorICAgICAgICAgICAgcXVldWVfcHV0X3Rhc2sgPSB0YXNrcy5UYXNrKHF1ZXVlX3B1dCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0YXJ0ZWQud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmlzaGVkKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxdWV1ZV9wdXRfdGFzaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmlzaGVkKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX2dldCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfcHV0KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX3B1dF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHF1ZXVlcy5GdWxsLCBxLnB1dF9ub3dhaXQsIDIpCisKKyAgICBkZWYgdGVzdF9wdXRfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX3B1dCgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gcS5nZXQoKSkKKworICAgICAgICB0ID0gdGFza3MuVGFzayhxdWV1ZV9wdXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcHV0X2NhbmNlbGxlZF9yYWNlKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wLCBtYXhzaXplPTEpCisKKyAgICAgICAgdGFza3MuVGFzayhxLnB1dCgnYScpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFza3MuVGFzayhxLnB1dCgnYycpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdCA9IHRhc2tzLlRhc2socS5wdXQoJ2InKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldF9ub3dhaXQoKSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0X25vd2FpdCgpLCAnYycpCisKKyAgICBkZWYgdGVzdF9wdXRfd2l0aF93YWl0aW5nX2dldHRlcnMoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLnB1dCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCksICdhJykKKworCitjbGFzcyBMaWZvUXVldWVUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgdGVzdF9vcmRlcihzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5MaWZvUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsyLCAzLCAxXSwgaXRlbXMpCisKKworY2xhc3MgUHJpb3JpdHlRdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlByaW9yaXR5UXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgaXRlbXMpCisKKworY2xhc3MgSm9pbmFibGVRdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X3Rhc2tfZG9uZV91bmRlcmZsb3coc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcS50YXNrX2RvbmUpCisKKyAgICBkZWYgdGVzdF90YXNrX2RvbmUoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGFjY3VtdWxhdG9yID0gMAorCisgICAgICAgICMgVHdvIHdvcmtlcnMgZ2V0IGl0ZW1zIGZyb20gdGhlIHF1ZXVlIGFuZCBjYWxsIHRhc2tfZG9uZSBhZnRlciBlYWNoLgorICAgICAgICAjIEpvaW4gdGhlIHF1ZXVlIGFuZCBhc3NlcnQgYWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuCisgICAgICAgIHJ1bm5pbmcgPSBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgd29ya2VyKCk6CisgICAgICAgICAgICBub25sb2NhbCBhY2N1bXVsYXRvcgorCisgICAgICAgICAgICB3aGlsZSBydW5uaW5nOgorICAgICAgICAgICAgICAgIGl0ZW0gPSB5aWVsZCBmcm9tIHEuZ2V0KCkKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBpdGVtCisgICAgICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKDIpOgorICAgICAgICAgICAgICAgIHRhc2tzLlRhc2sod29ya2VyKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEuam9pbigpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHJhbmdlKDEwMCkpLCBhY2N1bXVsYXRvcikKKworICAgICAgICAjIGNsb3NlIHJ1bm5pbmcgZ2VuZXJhdG9ycworICAgICAgICBydW5uaW5nID0gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMCkKKworICAgIGRlZiB0ZXN0X2pvaW5fZW1wdHlfcXVldWUoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICAjIFRlc3QgdGhhdCBhIHF1ZXVlIGpvaW4oKXMgc3VjY2Vzc2Z1bGx5LCBhbmQgYmVmb3JlIGFueXRoaW5nIGVsc2UKKyAgICAgICAgIyAoZG9uZSB0d2ljZSBmb3IgaW5zdXJhbmNlKS4KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBqb2luKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHEuam9pbigpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEuam9pbigpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShqb2luKCkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuSm9pbmFibGVRdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCcpCisKKyAgICAgICAgcS5fdW5maW5pc2hlZF90YXNrcyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCB0YXNrcz0yJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTdkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSwxNTQxIEBACisiIiJUZXN0cyBmb3Igc2VsZWN0b3JfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGVycm5vCitpbXBvcnQgZ2MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpby5wcm90b2NvbHMgaW1wb3J0IERhdGFncmFtUHJvdG9jb2wsIFByb3RvY29sCitmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBCYXNlU2VsZWN0b3JFdmVudExvb3AKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvclRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yU3NsVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0CisKKworY2xhc3MgVGVzdEJhc2VTZWxlY3RvckV2ZW50TG9vcChCYXNlU2VsZWN0b3JFdmVudExvb3ApOgorCisgICAgZGVmIF9tYWtlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgc2VsZi5fc3NvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLl9jc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyArPSAxCisKKworY2xhc3MgQmFzZVNlbGVjdG9yRXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBUZXN0QmFzZVNlbGVjdG9yRXZlbnRMb29wKHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorCisgICAgZGVmIHRlc3RfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChtLCBtKSwgX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQobSwgbSwgbSwgbSksIF9TZWxlY3RvclNzbFRyYW5zcG9ydCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5zc2wnLCBOb25lKQorICAgIGRlZiB0ZXN0X21ha2Vfc3NsX3RyYW5zcG9ydF93aXRob3V0X3NzbF9lcnJvcihzZWxmKToKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQobSwgbSwgbSwgbSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzc29jayA9IHNlbGYubG9vcC5fc3NvY2sKKyAgICAgICAgc3NvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKyAgICAgICAgY3NvY2sgPSBzZWxmLmxvb3AuX2Nzb2NrCisgICAgICAgIGNzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxCisgICAgICAgIHJlbW92ZV9yZWFkZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSBzZWxlY3RvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fY3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc3NvY2spCisgICAgICAgIHNlbGVjdG9yLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNzb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGNzb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKDcpCisKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX25vX3NlbGVjdG9yKHNlbGYpOgorICAgICAgICBzc29jayA9IHNlbGYubG9vcC5fc3NvY2sKKyAgICAgICAgY3NvY2sgPSBzZWxmLmxvb3AuX2Nzb2NrCisgICAgICAgIHJlbW92ZV9yZWFkZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSBOb25lCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1vdmVfcmVhZGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fc29ja2V0cGFpcikKKworICAgIGRlZiB0ZXN0X3JlYWRfZnJvbV9zZWxmX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Nzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9yZWFkX2Zyb21fc2VsZigpKQorCisgICAgZGVmIHRlc3RfcmVhZF9mcm9tX3NlbGZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Nzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5fcmVhZF9mcm9tX3NlbGYpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl93cml0ZV90b19zZWxmKCkpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9jc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZikKKworICAgIGRlZiB0ZXN0X3NvY2tfcmVjdihzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfcmVjdihzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChmLCBGYWxzZSwgc29jaywgMTAyNCkKKworICAgIGRlZiB0ZXN0X19zb2NrX3JlY3ZfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBGYWxzZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLnJlY3YuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIFRydWUsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCksIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3JlY3ZfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCBzZWxmLmxvb3AuX3NvY2tfcmVjdiwgZiwgVHJ1ZSwgc29jaywgMTAyNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIGVyciA9IHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydElzKGVyciwgZi5leGNlcHRpb24oKSkKKworICAgIGRlZiB0ZXN0X3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsX25vZGF0YShzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzb2NrLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc29ja19zZW5kYWxsLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLnNlbmQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIFRydWUsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCksIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ2RhdGEnKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfaW50ZXJydXB0ZWQoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgZXJyID0gc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZi5leGNlcHRpb24oKSwgZXJyKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYid0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9ub25lKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwsIGYsIFRydWUsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3Rfc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QoZiwgRmFsc2UsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY29ubmVjdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0X2NhbmNlbGVkX2Z1dChzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QoZiwgRmFsc2UsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5jb25uZWN0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfdW5yZWdpc3RlcihzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmdldHNvY2tvcHQucmV0dXJuX3ZhbHVlID0gZXJybm8uRUFHQUlOCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QoZiwgVHJ1ZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QsIGYsCisgICAgICAgICAgICAgVHJ1ZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19jb25uZWN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5nZXRzb2Nrb3B0LnJldHVybl92YWx1ZSA9IGVycm5vLkVOT1RDT05OCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZi5leGNlcHRpb24oKSwgT1NFcnJvcikKKworICAgIGRlZiB0ZXN0X3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2FjY2VwdChzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoZiwgRmFsc2UsIHNvY2spLCBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNvbm4gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5yZXR1cm5fdmFsdWUgPSBjb25uLCAoJzEyNy4wLjAuMScsIDEwMDApCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjb25uLCAoJzEyNy4wLjAuMScsIDEwMDApKSwgZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoRmFsc2UsKSwgY29ubi5zZXRibG9ja2luZy5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suYWNjZXB0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgVHJ1ZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX2FjY2VwdCwgZiwgVHJ1ZSwgc29jayksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBlcnIgPSBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgRmFsc2UsIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLCBmLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3RfYWRkX3JlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHcpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICByZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhZGVyLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdGVyLCB3KQorCisgICAgZGVmIHRlc3RfYWRkX3JlYWRlcl9leGlzdGluZ193cml0ZXIoc2VsZik6CisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHIuX2NhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXRlciwgdykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9yZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3JlYWRlcl9yZWFkX3dyaXRlKHNlbGYpOgorICAgICAgICByZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfcmVhZGVyX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcigxKSkKKworICAgIGRlZiB0ZXN0X2FkZF93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgZmQsIG1hc2ssIChyLCB3KSA9IHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCB3Ll9jYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X2FkZF93cml0ZXJfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgd3JpdGVyKSkKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyaXRlci5jYW5jZWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLCByKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCB3Ll9jYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci51bnJlZ2lzdGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXJfcmVhZF93cml0ZShzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFEIHwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgKHJlYWRlciwgd3JpdGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCBOb25lKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfd3JpdGVyX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3JlYWQoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHJlYWRlci5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgTm9uZSkpLAorICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCldKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9hZGRfY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgocmVhZGVyKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfcmVhZF9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHJlYWRlci5jYW5jZWxsZWQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKAorICAgICAgICAgICAgWyhzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIChyZWFkZXIsIE5vbmUpKSwKKyAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCldKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoMSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3dyaXRlKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIuX2NhbmNlbGxlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKAorICAgICAgICAgICAgWyhzZWxlY3RvcnMuU2VsZWN0b3JLZXkoMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsIHdyaXRlcikpLAorICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpXSkKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF93aXRoKHdyaXRlcikKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3dyaXRlX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyLmNhbmNlbGxlZCA9IFRydWUKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSldKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoMSkKKworCitjbGFzcyBTZWxlY3RvclRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChQcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHIuX2xvb3AsIHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ci5fc29jaywgc2VsZi5zb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyLl9zb2NrX2ZkLCA3KQorCisgICAgZGVmIHRlc3RfYWJvcnQoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHRyLmFib3J0KCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzddKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbN10pCisKKyAgICBkZWYgdGVzdF9jbG9zZV93cml0ZV9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fYnVmZmVyLmFwcGVuZChiJ2RhdGEnKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fYnVmZmVyLmFwcGVuZChiJzEnKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcig3LCB1bml0dGVzdC5tb2NrLnNlbnRpbmVsKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB1bml0dGVzdC5tb2NrLnNlbnRpbmVsKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgY29sbGVjdGlvbnMuZGVxdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgICAgICAjIHNlY29uZCBjbG9zZSBzaG91bGQgbm90IHJlbW92ZSByZWFkZXIKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbN10pCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5sb2cubG9nZ2VyLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3Ioc2VsZiwgbV9leGMpOgorICAgICAgICBleGMgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvcihleGMpCisKKyAgICAgICAgbV9leGMuYXNzZXJ0X2NhbGxlZF93aXRoKCdGYXRhbCBlcnJvciBmb3IgJXMnLCB0cikKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChleGMpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIGV4YyA9IE9TRXJyb3IoKQorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGV4YykKKworICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXhjKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3NvY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLnByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYucHJvdG9jb2wpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLmxvb3ApKSkKKworCitjbGFzcyBTZWxlY3RvclNvY2tldFRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChQcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29ja19mZCA9IHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgZnV0KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZnV0LnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSg3IGluIHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEnKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lb2Yoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInJworICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lb2Zfa2VlcF9vcGVuKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQucmV0dXJuX3ZhbHVlID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0LmNsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2FpbihzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnbG9nZ2luZy5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfdHJ5YWdhaW5faW50ZXJydXB0ZWQoc2VsZiwgbV9leGMpOgorICAgICAgICBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9jb25uX3Jlc2V0KHNlbGYsIG1fZXhjKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnbG9nZ2luZy5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfZXJyKHNlbGYsIG1fZXhjKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGEpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYnVmZmVyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKGInZGF0YTEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGExJywgYidkYXRhMiddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWwoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5kZXF1ZShbYid0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsX25vbmUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICB0cmFuc3BvcnQuX2Nvbm5fbG9zdCA9IDEKKworICAgICAgICBzZWxmLnNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdzdHInKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLnNlbmQuY2FsbF9hcmdzWzBdLCAoZGF0YSwpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfY2xvc2luZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfcGFydGlhbChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfcGFydGlhbF9ub25lKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9leGNlcHRpb25fYW5kX2Nsb3NlKHNlbGYsIG1fbG9nKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgcmVtb3ZlX3dyaXRlciA9IHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICByZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2tfZmQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bi5hc3NlcnRfY2FsbGVkX3dpdGgoc29ja2V0LlNIVVRfV1IpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxfY291bnQsIDEpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9lb2YpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxlZCkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBsYW1iZGEgXzogNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIuY2xvc2UoKQorCisKK0B1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKK2NsYXNzIFNlbGVjdG9yU3NsVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKFByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisgICAgICAgIHNlbGYuc3Nsc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMQorICAgICAgICBzZWxmLnNzbGNvbnRleHQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNzbGNvbnRleHQud3JhcF9zb2NrZXQucmV0dXJuX3ZhbHVlID0gc2VsZi5zc2xzb2NrCisKKyAgICBkZWYgX21ha2Vfb25lKHNlbGYsIGNyZWF0ZV93YWl0ZXI9Tm9uZSk6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNzbFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBzZWxmLnNzbGNvbnRleHQpCisgICAgICAgIHNlbGYuc29jay5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLnNzbGNvbnRleHQucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZXNldF9jb3VudGVycygpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCwKKyAgICAgICAgICAgIHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suZG9faGFuZHNoYWtlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoMSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YWl0ZXIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9vbl9oYW5kc2hha2VfcmVhZGVyX3JldHJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suZG9faGFuZHNoYWtlLnNpZGVfZWZmZWN0ID0gc3NsLlNTTFdhbnRSZWFkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV93cml0ZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcigxLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9leGMoc2VsZik6CisgICAgICAgIGV4YyA9IFZhbHVlRXJyb3IoKQorICAgICAgICBzZWxmLnNzbHNvY2suZG9faGFuZHNoYWtlLnNpZGVfZWZmZWN0ID0gZXhjCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNzbFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBzZWxmLnNzbGNvbnRleHQpCisgICAgICAgIHRyYW5zcG9ydC5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3dhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLCB0cmFuc3BvcnQuX3dhaXRlci5leGNlcHRpb24oKSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9iYXNlX2V4YyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgdHJhbnNwb3J0Ll93YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhjID0gQmFzZUV4Y2VwdGlvbigpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBleGMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQmFzZUV4Y2VwdGlvbiwgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll93YWl0ZXIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzKGV4YywgdHJhbnNwb3J0Ll93YWl0ZXIuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9wYXVzZV9yZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoMSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgxIGluIHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoMSwgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZChiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfc3RyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdzdHInKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fYnVmZmVyLCBjb2xsZWN0aW9ucy5kZXF1ZSgpKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYidkYXRhJywpLCBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV93cml0ZV93YW50c19yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV93YW50c19yZWFkID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3YucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3ZfY29ubl9yZXNldChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfcmVjdl9yZXRyeShzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2sucmVjdi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBJbnRlcnJ1cHRlZEVycm9yCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfcmVjdl93cml0ZShzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gc3NsLlNTTFdhbnRXcml0ZUVycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll9yZWFkX3dhbnRzX3dyaXRlKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCh0cmFuc3BvcnQuX3NvY2tfZmQpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fc29ja19mZCwgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfcmVjdl9leGMoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmQoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGEnXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX25vbmUoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhMWRhdGEyJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YTEnLCBiJ2RhdGEyJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKFtiJ3RhMWRhdGEyJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfY2xvc2luZ19wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfY2xvc2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YSddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2Nsb3NpbmdfZW1wdHlfYnVmZmVyKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfcmV0cnkoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhJ10pCisKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuZGVxdWUoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfcmVhZChzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKFtiJ2RhdGEnXSkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gc3NsLlNTTFdhbnRSZWFkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5fd3JpdGVfd2FudHNfcmVhZCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHRyYW5zcG9ydC5fc29ja19mZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfZXhjKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBjb2xsZWN0aW9ucy5kZXF1ZShbYidkYXRhJ10pCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLmRlcXVlKCksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfcmVhZF93YW50c193cml0ZShzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF93YW50c193cml0ZSA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0cmFuc3BvcnQuX3NvY2tfZmQsIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0ci53cml0ZV9lb2YpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFsxXSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUgb3Igbm90IHNzbC5IQVNfU05JLCAnTm8gU05JIHN1cHBvcnQnKQorICAgIGRlZiB0ZXN0X3NlcnZlcl9ob3N0bmFtZShzZWxmKToKKyAgICAgICAgX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nbG9jYWxob3N0JykKKyAgICAgICAgc2VsZi5zc2xjb250ZXh0LndyYXBfc29ja2V0LmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYuc29jaywgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UsIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdsb2NhbGhvc3QnKQorCisKK2NsYXNzIFNlbGVjdG9yU3NsV2l0aG91dFNzbFRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5zc2wnLCBOb25lKQorICAgIGRlZiB0ZXN0X3NzbF90cmFuc3BvcnRfcmVxdWlyZXNfc3NsX21vZHVsZShzZWxmKToKKyAgICAgICAgTW9jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoTW9jaygpLCBNb2NrKCksIE1vY2soKSwgTW9jaygpKQorCisKK2NsYXNzIFNlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woRGF0YWdyYW1Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKHNwZWNfc2V0PXNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdmZyb20ucmV0dXJuX3ZhbHVlID0gKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQpKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YWdyYW1fcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3RyeWFnYWluKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lcnIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnJlY3Zmcm9tLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3NlbmR0byhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGInJywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQ1KSldLCBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19idWZmZXIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNDUpKV0sIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfc2VuZHRvX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisKKyAgICAgICAgdHJhbnNwb3J0Ll9hZGRyZXNzID0gKCcxMjMnLCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19jb25uZWN0aW9uX3JlZnVzZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2Nvbm5lY3Rpb25fcmVmdXNlZF9jb25uZWN0ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgKCcwLjAuMC4wJywgMSkpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sICdzdHInLCAoKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19jb25uZWN0ZWRfYWRkcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgKCcwLjAuMC4wJywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sIGInc3RyJywgKCcwLjAuMC4wJywgMikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgYWRkcmVzcz0oMSwpKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGInZGF0YScsICgxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8ucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfY2xvc2luZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGRhdGEsICgpKSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuc29jay5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKFsoYidkYXRhMScsICgpKSwgKGInZGF0YTInLCAoKSldKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCkpLCAoYidkYXRhMicsICgpKV0sCisgICAgICAgICAgICBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoKSkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfY29ubmVjdGlvbl9yZWZ1c2VkKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YScsICgpKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfY29ubmVjdGlvbl9yZWZ1c2VkX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsICgnMC4wLjAuMCcsIDEpKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoKSkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5sb2cubG9nZ2VyLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3JfY29ubmVjdGVkKHNlbGYsIG1fZXhjKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgKCcwLjAuMC4wJywgMSkpCisgICAgICAgIGVyciA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yKGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX3JlZnVzZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgbV9leGMuYXNzZXJ0X2NhbGxlZF93aXRoKCdGYXRhbCBlcnJvciBmb3IgJXMnLCB0cmFuc3BvcnQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NlbGVjdG9ycy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NlbGVjdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjViM2VjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JzLnB5CkBAIC0wLDAgKzEsMTQ5IEBACisiIiJUZXN0cyBmb3Igc2VsZWN0b3JzLnB5LiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JzCisKKworY2xhc3MgRmFrZVNlbGVjdG9yKHNlbGVjdG9ycy5CYXNlU2VsZWN0b3IpOgorICAgICIiIlRyaXZpYWwgbm9uLWFic3RyYWN0IHN1YmNsYXNzIG9mIEJhc2VTZWxlY3Rvci4iIiIKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEJhc2VTZWxlY3RvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfdG9fZmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAsIHNlbGVjdG9ycy5fZmlsZW9ial90b19mZCgxMCkpCisKKyAgICAgICAgZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGYuZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAsIHNlbGVjdG9ycy5fZmlsZW9ial90b19mZChmKSkKKworICAgICAgICBmLmZpbGVuby5zaWRlX2VmZmVjdCA9IEF0dHJpYnV0ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGVjdG9ycy5fZmlsZW9ial90b19mZCwgZikKKworICAgIGRlZiB0ZXN0X3NlbGVjdG9yX2tleV9yZXByKHNlbGYpOgorICAgICAgICBrZXkgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoMTAsIDEwLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICJTZWxlY3RvcktleShmaWxlb2JqPTEwLCBmZD0xMCwgZXZlbnRzPTEsIGRhdGE9Tm9uZSkiLCByZXByKGtleSkpCisKKyAgICBkZWYgdGVzdF9yZWdpc3RlcihzZWxmKToKKyAgICAgICAgZm9iaiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZvYmouZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgcyA9IEZha2VTZWxlY3RvcigpCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIoZm9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrZXksIHNlbGVjdG9ycy5TZWxlY3RvcktleSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZmQsIDEwKQorICAgICAgICBzZWxmLmFzc2VydElzKGtleSwgcy5fZmRfdG9fa2V5WzEwXSkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX3Vua25vd25fZXZlbnQoc2VsZik6CisgICAgICAgIHMgPSBGYWtlU2VsZWN0b3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlZ2lzdGVyLCB1bml0dGVzdC5tb2NrLk1vY2soKSwgOTk5OTk5KQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfYWxyZWFkeV9yZWdpc3RlcmVkKHNlbGYpOgorICAgICAgICBmb2JqID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZm9iai5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBzID0gRmFrZVNlbGVjdG9yKCkKKyAgICAgICAgcy5yZWdpc3Rlcihmb2JqLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucmVnaXN0ZXIsIGZvYmosIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3RlcihzZWxmKToKKyAgICAgICAgZm9iaiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZvYmouZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgcyA9IEZha2VTZWxlY3RvcigpCisgICAgICAgIHMucmVnaXN0ZXIoZm9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHMudW5yZWdpc3Rlcihmb2JqKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuX2ZkX3RvX2tleSkKKworICAgIGRlZiB0ZXN0X3VucmVnaXN0ZXJfdW5rbm93bihzZWxmKToKKyAgICAgICAgZm9iaiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZvYmouZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgcyA9IEZha2VTZWxlY3RvcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnVucmVnaXN0ZXIsIGZvYmopCisKKyAgICBkZWYgdGVzdF9tb2RpZnlfdW5rbm93bihzZWxmKToKKyAgICAgICAgZm9iaiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZvYmouZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgcyA9IEZha2VTZWxlY3RvcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLm1vZGlmeSwgZm9iaiwgMSkKKworICAgIGRlZiB0ZXN0X21vZGlmeShzZWxmKToKKyAgICAgICAgZm9iaiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZvYmouZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgcyA9IEZha2VTZWxlY3RvcigpCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIoZm9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIGtleTIgPSBzLm1vZGlmeShmb2JqLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmV2ZW50cywga2V5Mi5ldmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoZm9iaiwgMTAsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwgTm9uZSksCisgICAgICAgICAgICBzLmdldF9rZXkoZm9iaikpCisKKyAgICBkZWYgdGVzdF9tb2RpZnlfZGF0YShzZWxmKToKKyAgICAgICAgZm9iaiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZvYmouZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgZDEgPSBvYmplY3QoKQorICAgICAgICBkMiA9IG9iamVjdCgpCisKKyAgICAgICAgcyA9IEZha2VTZWxlY3RvcigpCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIoZm9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGQxKQorICAgICAgICBrZXkyID0gcy5tb2RpZnkoZm9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5ldmVudHMsIGtleTIuZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5kYXRhLCBrZXkyLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoZm9iaiwgMTAsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBkMiksCisgICAgICAgICAgICBzLmdldF9rZXkoZm9iaikpCisKKyAgICBkZWYgdGVzdF9tb2RpZnlfc2FtZShzZWxmKToKKyAgICAgICAgZm9iaiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZvYmouZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgZGF0YSA9IG9iamVjdCgpCisKKyAgICAgICAgcyA9IEZha2VTZWxlY3RvcigpCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIoZm9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGRhdGEpCisgICAgICAgIGtleTIgPSBzLm1vZGlmeShmb2JqLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhrZXksIGtleTIpCisKKyAgICBkZWYgdGVzdF9zZWxlY3Qoc2VsZik6CisgICAgICAgIHMgPSBGYWtlU2VsZWN0b3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBzLnNlbGVjdCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzID0gRmFrZVNlbGVjdG9yKCkKKyAgICAgICAgcy5yZWdpc3RlcigxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLl9mZF90b19rZXkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHMgPSBGYWtlU2VsZWN0b3IoKQorCisgICAgICAgIHdpdGggcyBhcyBzZWw6CisgICAgICAgICAgICBzZWwucmVnaXN0ZXIoMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLl9mZF90b19rZXkpCisKKyAgICBkZWYgdGVzdF9rZXlfZnJvbV9mZChzZWxmKToKKyAgICAgICAgcyA9IEZha2VTZWxlY3RvcigpCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIoMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhrZXksIHMuX2tleV9mcm9tX2ZkKDEpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzLl9rZXlfZnJvbV9mZCgxMCkpCisKKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IsICdmaWxlbm8nKToKKyAgICAgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IoKS5maWxlbm8oKSwgaW50KQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdHJlYW1zLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWUyMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpAQCAtMCwwICsxLDM2NCBAQAorIiIiVGVzdHMgZm9yIHN0cmVhbXMucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHN0cmVhbXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIFN0cmVhbVJlYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIERBVEEgPSBiJ2xpbmUxXG5saW5lMlxubGluZTNcbicKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMganVzdCBpbiBjYXNlIGlmIHdlIGhhdmUgdHJhbnNwb3J0IGNsb3NlIGNhbGxiYWNrcworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnN0cmVhbXMuZXZlbnRzJykKKyAgICBkZWYgdGVzdF9jdG9yX2dsb2JhbF9sb29wKHNlbGYsIG1fZXZlbnRzKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIoKQorICAgICAgICBzZWxmLmFzc2VydElzKHN0cmVhbS5fbG9vcCwgbV9ldmVudHMuZ2V0X2V2ZW50X2xvb3AucmV0dXJuX3ZhbHVlKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc3RyZWFtcy5vcGVuX2Nvbm5lY3Rpb24oKmh0dHBkLmFkZHJlc3MsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICB3cml0ZXIud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykKKyAgICAgICAgICAgIGYgPSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidIVFRQLzEuMCAyMDAgT0tcclxuJykKKyAgICAgICAgICAgIGYgPSByZWFkZXIucmVhZCgpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuZW5kc3dpdGgoYidcclxuXHJcblRlc3QgbWVzc2FnZScpKQorCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X29wZW5fY29ubmVjdGlvbl9ub19sb29wX3NzbChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICAgICAgZiA9IHN0cmVhbXMub3Blbl9jb25uZWN0aW9uKCpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpKQorICAgICAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKQorICAgICAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5lbmRzd2l0aChiJ1xyXG5cclxuVGVzdCBtZXNzYWdlJykpCisKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9vcGVuX2Nvbm5lY3Rpb25fZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGYgPSBzdHJlYW1zLm9wZW5fY29ubmVjdGlvbigqaHR0cGQuYWRkcmVzcywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHdyaXRlci5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KFplcm9EaXZpc2lvbkVycm9yKCkpCisgICAgICAgICAgICBmID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9mZWVkX2VtcHR5X2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X2ZlZWRfZGF0YV9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5EQVRBKSwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZF96ZXJvKHNlbGYpOgorICAgICAgICAjIFJlYWQgemVybyBieXRlcy4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5EQVRBKSwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgIyBSZWFkIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVhZF90YXNrID0gdGFza3MuVGFzayhzdHJlYW0ucmVhZCgzMCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2xpbmVfYnJlYWtzKHNlbGYpOgorICAgICAgICAjIFJlYWQgYnl0ZXMgd2l0aG91dCBsaW5lIGJyZWFrcy4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lMScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lMicpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoNSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUxJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2VvZihzZWxmKToKKyAgICAgICAgIyBSZWFkIGJ5dGVzLCBzdG9wIGF0IGVvZi4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWQoMTAyNCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfZW9mKHNlbGYpOgorICAgICAgICAjIFJlYWQgYWxsIGJ5dGVzIHVudGlsIGVvZi4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWQoLTEpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazFcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidjaHVuazFcbmNodW5rMicsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZVxuJykKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWQoMikpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgIyBSZWFkIG9uZSBsaW5lLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMSAnKQorICAgICAgICByZWFkX3Rhc2sgPSB0YXNrcy5UYXNrKHN0cmVhbS5yZWFkbGluZSgpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazIgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazMgJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidcbiBjaHVuazQnKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rMSBjaHVuazIgY2h1bmszIFxuJywgbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYidcbiBjaHVuazQnKS0xLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9saW1pdF93aXRoX2V4aXN0aW5nX2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKDMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbmUxXG5saW5lMlxuJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2xpbmUyXG4nXSwgbGlzdChzdHJlYW0uX2J1ZmZlcikpCisKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIoMywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYiduZTEnKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InbGknXSwgbGlzdChzdHJlYW0uX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGltaXQoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKDcsIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMScpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazNcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InY2h1bmszXG4nXSwgbGlzdChzdHJlYW0uX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGluZV9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEFbOjZdKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQVs2Ol0pCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUxXG4nLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpIC0gbGVuKGInbGluZTFcbicpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9lb2Yoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInc29tZSBkYXRhJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKworICAgICAgICBsaW5lID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ3NvbWUgZGF0YScsIGxpbmUpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9lbXB0eV9lb2Yoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgbGluZSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfYnl0ZV9jb3VudChzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoNykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUyXG5sJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxlbihzZWxmLkRBVEEpIC0gbGVuKGInbGluZTFcbicpIC0gbGVuKGInbGluZTJcbmwnKSwKKyAgICAgICAgICAgIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZVxuJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV96ZXJvX29yX2xlc3Moc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMgKHplcm8gb3IgbGVzcykuCisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGV4YWN0bHkoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRleGFjdGx5KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuREFUQSksIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5KHNlbGYpOgorICAgICAgICAjIFJlYWQgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBuID0gMiAqIGxlbihzZWxmLkRBVEEpCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRleGFjdGx5KG4pLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBICsgc2VsZi5EQVRBLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV9lb2Yoc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMgKGVvZikuCisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuID0gMiAqIGxlbihzZWxmLkRBVEEpCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRleGFjdGx5KG4pLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRleGFjdGx5KDIpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3RyZWFtLmV4Y2VwdGlvbigpKQorCisgICAgICAgIGV4YyA9IFZhbHVlRXJyb3IoKQorICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLmV4Y2VwdGlvbigpLCBleGMpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fd2FpdGVyKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzZXRfZXJyKCk6CisgICAgICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcmVhZGxpbmUoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3RyZWFtLnJlYWRsaW5lKCkKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soc2V0X2VycigpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW3QxLCB0Ml0sIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MS5yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fY2FuY2VsKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiByZWFkX2FfbGluZSgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzdHJlYW0ucmVhZGxpbmUoKQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHJlYWRfYV9saW5lKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGxpbmUgZmFpbHMgaWYgc2V0X2V4Y2VwdGlvbigpIGlzbid0IGNhcmVmdWwuCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcignbWVzc2FnZScpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdHJlYW0uX3dhaXRlciwgTm9uZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZiMDUzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkKQEAgLTAsMCArMSwxNTE4IEBACisiIiJUZXN0cyBmb3IgdGFza3MucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBNb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGFza3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIER1bW15OgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ0R1bW15KCknCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgVGFza1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2xhc3Moc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHJldHVybiAnb2snCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICB0ID0gdGFza3MuVGFzayhub3RtdWNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBsb29wKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2FzeW5jX2Nvcm91dGluZShzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdCA9IHRhc2tzLmFzeW5jKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICB0ID0gdGFza3MuYXN5bmMobm90bXVjaCgpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgbG9vcCkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9hc3luY19mdXR1cmUoc2VsZik6CisgICAgICAgIGZfb3JpZyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX29yaWcuc2V0X3Jlc3VsdCgna28nKQorCisgICAgICAgIGYgPSB0YXNrcy5hc3luYyhmX29yaWcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksICdrbycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgZl9vcmlnKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmID0gdGFza3MuYXN5bmMoZl9vcmlnLCBsb29wPWxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKGZfb3JpZywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgZl9vcmlnKQorCisgICAgZGVmIHRlc3RfYXN5bmNfdGFzayhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdF9vcmlnID0gdGFza3MuVGFzayhub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ID0gdGFza3MuYXN5bmModF9vcmlnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnb2snKQorICAgICAgICBzZWxmLmFzc2VydElzKHQsIHRfb3JpZykKKworICAgICAgICBsb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdCA9IHRhc2tzLmFzeW5jKHRfb3JpZywgbG9vcD1sb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgICAgIHQgPSB0YXNrcy5hc3luYyh0X29yaWcsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQsIHRfb3JpZykKKworICAgIGRlZiB0ZXN0X2FzeW5jX25laXRoZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRhc2tzLmFzeW5jKCdvaycpCisKKyAgICBkZWYgdGVzdF90YXNrX3JlcHIoc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKyAgICAgICAgICAgIHJldHVybiAnYWJjJworCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQuYWRkX2RvbmVfY2FsbGJhY2soRHVtbXkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAnVGFzayg8bm90bXVjaD4pPFBFTkRJTkcsIFtEdW1teSgpXT4nKQorICAgICAgICB0LmNhbmNlbCgpICAjIERvZXMgbm90IHRha2UgaW1tZWRpYXRlIGVmZmVjdCEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAnVGFzayg8bm90bXVjaD4pPENBTkNFTExJTkcsIFtEdW1teSgpXT4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICdUYXNrKDxub3RtdWNoPik8Q0FOQ0VMTEVEPicpCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAiVGFzayg8bm90bXVjaD4pPHJlc3VsdD0nYWJjJz4iKQorCisgICAgZGVmIHRlc3RfdGFza19yZXByX2N1c3RvbShzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFQoZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVFtdJworCisgICAgICAgIGNsYXNzIE15VGFzayh0YXNrcy5UYXNrLCBUKToKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX3JlcHJfXygpCisKKyAgICAgICAgZ2VuID0gY29ybygpCisgICAgICAgIHQgPSBNeVRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAnVFtdKDxjb3JvPiknKQorICAgICAgICBnZW4uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdGFza19iYXNpY3Moc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBhID0geWllbGQgZnJvbSBpbm5lcjEoKQorICAgICAgICAgICAgYiA9IHlpZWxkIGZyb20gaW5uZXIyKCkKKyAgICAgICAgICAgIHJldHVybiBhK2IKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcjEoKToKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyMigpOgorICAgICAgICAgICAgcmV0dXJuIDEwMDAKKworICAgICAgICB0ID0gb3V0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCksIDEwNDIpCisKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2soKSwgbG9vcD1sb29wKQorICAgICAgICBsb29wLmNhbGxfc29vbih0LmNhbmNlbCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF95aWVsZChzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgc3RhcnQgY29ybworICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2lubmVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZgorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIHN0YXJ0IHRhc2sKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfYm90aF90YXNrX2FuZF9pbm5lcl9mdXR1cmUoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgdC5jYW5jZWwoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfdGFza19jYXRjaGluZyhzZWxmKToKKyAgICAgICAgZnV0MSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQxKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0MS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDIpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQyLmNhbmNlbGxlZCgpKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3Rhc2tfaWdub3Jpbmcoc2VsZik6CisgICAgICAgIGZ1dDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0MiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQzID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIGZ1dDMKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQxKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0MS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDIpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQyLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQzKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0My5zZXRfcmVzdWx0KDQyKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQzLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfY3VycmVudF90YXNrKHNlbGYpOgorICAgICAgICBsb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuX211c3RfY2FuY2VsKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgICAgICMgVGhlIHNsZWVwIHNob3VsZCBiZSBjYW5jZWxsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDEwMCwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0Ll9tdXN0X2NhbmNlbCkgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X3N0b3Bfd2hpbGVfcnVuX2luX2NvbXBsZXRlKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4zLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICB4ID0gMAorICAgICAgICB3YWl0ZXJzID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICBub25sb2NhbCB4CisgICAgICAgICAgICB3aGlsZSB4IDwgMTA6CisgICAgICAgICAgICAgICAgd2FpdGVycy5hcHBlbmQodGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApKQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyc1stMV0KKyAgICAgICAgICAgICAgICB4ICs9IDEKKyAgICAgICAgICAgICAgICBpZiB4ID09IDI6CisgICAgICAgICAgICAgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMywgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBjbG9zZSBnZW5lcmF0b3JzCisgICAgICAgIGZvciB3IGluIHdhaXRlcnM6CisgICAgICAgICAgICB3LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjIsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuNCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMiwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgICAgIGZ1dCA9IHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuVGltZW91dEVycm9yKToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXRfZm9yKGZ1dCwgMC4xLCBsb29wPWxvb3ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgd2FpdCBmb3IgcmVzdWx0CisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgdGFza3Mud2FpdF9mb3IoZnV0LCAwLjMsIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnZG9uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX3dpdGhfZ2xvYmFsX2xvb3Aoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1dCA9IHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXRfZm9yKGZ1dCwgMC4wMSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIHRhc2tzLndhaXQoW2IsIGFdLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYSwgYl0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIERvaW5nIGl0IGFnYWluIHNob3VsZCB0YWtlIG5vIHRpbWUgYW5kIGV4ZXJjaXNlIGEgZGlmZmVyZW50IHBhdGguCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3dhaXRfd2l0aF9nbG9iYWxfbG9vcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMTUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4wMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIHRhc2tzLndhaXQoW2IsIGFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2EsIGJdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgdGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3dhaXRfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICB0YXNrcy53YWl0KHNldCgpLCBsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgdGFza3Mud2FpdChbdGFza3Muc2xlZXAoMTAuMCwgbG9vcD1zZWxmLmxvb3ApXSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3doZW49LTEsIGxvb3A9c2VsZi5sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfY29tcGxldGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICB0YXNrID0gdGFza3MuVGFzaygKKyAgICAgICAgICAgIHRhc2tzLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj10YXNrcy5GSVJTVF9DT01QTEVURUQsCisgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCksCisgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShiLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfcmVhbGx5X2RvbmUoc2VsZik6CisgICAgICAgICMgdGhlcmUgaXMgcG9zc2liaWxpdHkgdGhhdCBzb21lIHRhc2tzIGluIHRoZSBwZW5kaW5nIGxpc3QKKyAgICAgICAgIyBiZWNhbWUgZG9uZSBidXQgdGhlaXIgY2FsbGJhY2tzIGhhdmVuJ3QgYWxsIGJlZW4gY2FsbGVkIHlldAorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8yKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBhID0gdGFza3MuVGFzayhjb3JvMSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soY29ybzIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKAorICAgICAgICAgICAgdGFza3Mud2FpdChbYiwgYV0sIHJldHVybl93aGVuPXRhc2tzLkZJUlNUX0NPTVBMRVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YSwgYn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShiLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9maXJzdF9leGNlcHRpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICAjIGZpcnN0X2V4Y2VwdGlvbiwgdGFzayBhbHJlYWR5IGhhcyBleGNlcHRpb24KKyAgICAgICAgYSA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMTAuMCwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGV4YygpOgorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ2VycicpCisKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soZXhjKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2soCisgICAgICAgICAgICB0YXNrcy53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49dGFza3MuRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApLAorICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtifSwgZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YX0sIHBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMCwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfZXhjZXB0aW9uX2luX3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgIyBmaXJzdF9leGNlcHRpb24sIGV4Y2VwdGlvbiBkdXJpbmcgd2FpdGluZworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZXhjKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCdlcnInKQorCisgICAgICAgIGIgPSB0YXNrcy5UYXNrKGV4YygpLCBsb29wPWxvb3ApCisgICAgICAgIHRhc2sgPSB0YXNrcy53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49dGFza3MuRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aXRoX2V4Y2VwdGlvbihzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMTUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ3JlYWxseScpCisKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soc2xlZXBlcigpLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSB0YXNrcy53YWl0KFtiLCBhXSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZG9uZSksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldCgpKQorICAgICAgICAgICAgZXJyb3JzID0gc2V0KGYgZm9yIGYgaW4gZG9uZSBpZiBmLmV4Y2VwdGlvbigpIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3JzKSwgMSkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3dpdGhfdGltZW91dChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjExCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gdGFza3Mud2FpdChbYiwgYV0sIHRpbWVvdXQ9MC4xMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2FdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KFtiXSkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjExLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9jb25jdXJyZW50X2NvbXBsZXRlKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIHRhc2tzLndhaXQoW2IsIGFdLCB0aW1lb3V0PTAuMSwgbG9vcD1sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldChbYl0pKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwLjAxCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKyAgICAgICAgY29tcGxldGVkID0gc2V0KCkKKyAgICAgICAgdGltZV9zaGlmdGVkID0gRmFsc2UKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKGR0LCB4KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHRpbWVfc2hpZnRlZAorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcChkdCwgbG9vcD1sb29wKQorICAgICAgICAgICAgY29tcGxldGVkLmFkZCh4KQorICAgICAgICAgICAgaWYgbm90IHRpbWVfc2hpZnRlZCBhbmQgJ2EnIGluIGNvbXBsZXRlZCBhbmQgJ2InIGluIGNvbXBsZXRlZDoKKyAgICAgICAgICAgICAgICB0aW1lX3NoaWZ0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMC4xNCkKKyAgICAgICAgICAgIHJldHVybiB4CisKKyAgICAgICAgYSA9IHNsZWVwZXIoMC4wMSwgJ2EnKQorICAgICAgICBiID0gc2xlZXBlcigwLjAxLCAnYicpCisgICAgICAgIGMgPSBzbGVlcGVyKDAuMTUsICdjJykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiB0YXNrcy5hc19jb21wbGV0ZWQoW2IsIGMsIGFdLCBsb29wPWxvb3ApOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoKHlpZWxkIGZyb20gZikpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBpbiByZXNbOjJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2InIGluIHJlc1s6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzJdLCAnYycpCisKKyAgICAgICAgIyBEb2luZyBpdCBhZ2FpbiBzaG91bGQgdGFrZSBubyB0aW1lIGFuZCBleGVyY2lzZSBhIGRpZmZlcmVudCBwYXRoLgorICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX3dpdGhfdGltZW91dChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTIsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAyCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3Muc2xlZXAoMC4xLCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLnNsZWVwKDAuMTUsICdiJywgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIHRhc2tzLmFzX2NvbXBsZXRlZChbYSwgYl0sIHRpbWVvdXQ9MC4xMiwgbG9vcD1sb29wKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoMSwgdikpCisgICAgICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuVGltZW91dEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoMiwgZXhjKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAyLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzBdLCAoMSwgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMV1bMF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHJlc1sxXVsxXSwgZnV0dXJlcy5UaW1lb3V0RXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTIsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Mud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfcmV2ZXJzZV93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5zbGVlcCgwLjA1LCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLnNsZWVwKDAuMTAsICdiJywgbG9vcD1sb29wKQorICAgICAgICBmcyA9IHthLCBifQorICAgICAgICBmdXRzID0gbGlzdCh0YXNrcy5hc19jb21wbGV0ZWQoZnMsIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZ1dHMpLCAyKQorCisgICAgICAgIHggPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXRzWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMC4wNSkKKyAgICAgICAgeSA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTAsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX2NvbmN1cnJlbnQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IHRhc2tzLnNsZWVwKDAuMDUsICdhJywgbG9vcD1sb29wKQorICAgICAgICBiID0gdGFza3Muc2xlZXAoMC4wNSwgJ2InLCBsb29wPWxvb3ApCisgICAgICAgIGZzID0ge2EsIGJ9CisgICAgICAgIGZ1dHMgPSBsaXN0KHRhc2tzLmFzX2NvbXBsZXRlZChmcywgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnV0cyksIDIpCisgICAgICAgIHdhaXRlciA9IHRhc2tzLndhaXQoZnV0cywgbG9vcD1sb29wKQorICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmLnJlc3VsdCgpIGZvciBmIGluIGRvbmUpLCB7J2EnLCAnYid9KQorCisgICAgZGVmIHRlc3Rfc2xlZXAoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wNQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKGR0LCBhcmcpOgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcChkdC8yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKGR0LzIsIGFyZywgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHNsZWVwZXIoMC4xLCAneWVhaCcpLCBsb29wPWxvb3ApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAneWVhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3NsZWVwX2NhbmNlbChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDEwLjAsICd5ZWFoJywgbG9vcD1sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGhhbmRsZSA9IE5vbmUKKyAgICAgICAgb3JpZ19jYWxsX2xhdGVyID0gbG9vcC5jYWxsX2xhdGVyCisKKyAgICAgICAgZGVmIGNhbGxfbGF0ZXIoc2VsZiwgZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICAgICBub25sb2NhbCBoYW5kbGUKKyAgICAgICAgICAgIGhhbmRsZSA9IG9yaWdfY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgICAgIGxvb3AuY2FsbF9sYXRlciA9IGNhbGxfbGF0ZXIKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFuZGxlLl9jYW5jZWxsZWQpCisKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYW5kbGUuX2NhbmNlbGxlZCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2FuY2VsX3NsZWVwaW5nX3Rhc2soc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDUwMDAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHNsZWVwZnV0ID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwKGR0KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHNsZWVwZnV0CisgICAgICAgICAgICBzbGVlcGZ1dCA9IHRhc2tzLnNsZWVwKGR0LCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNsZWVwZnV0CisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZG9pdCgpOgorICAgICAgICAgICAgc2xlZXBlciA9IHRhc2tzLlRhc2soc2xlZXAoNTAwMCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjEsIHNsZWVwZXIuY2FuY2VsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2xlZXBlcgorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjYW5jZWxsZWQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2xlcHQgaW4nCisKKyAgICAgICAgZG9lciA9IGRvaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGRvZXIpLCAnY2FuY2VsbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfdGFza19jYW5jZWxfd2FpdGVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICB0YXNrID0gdGFza3MuVGFzayhjb3JvKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0YXNrLl9mdXRfd2FpdGVyLCBmdXQpCisKKyAgICAgICAgdGFzay5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0YXNrLl9mdXRfd2FpdGVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfc3RlcF9pbl9jb21wbGV0ZWRfdGFzayhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdrbycKKworICAgICAgICBnZW4gPSBub3RtdWNoKCkKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzay5zZXRfcmVzdWx0KCdvaycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRhc2suX3N0ZXApCisgICAgICAgIGdlbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zdGVwX3Jlc3VsdChzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgeWllbGQgTm9uZQorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgcmV0dXJuICdrbycKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgbm90bXVjaCgpKQorCisgICAgZGVmIHRlc3Rfc3RlcF9yZXN1bHRfZnV0dXJlKHNlbGYpOgorICAgICAgICAjIElmIGNvcm91dGluZSByZXR1cm5zIGZ1dHVyZSwgdGFzayB3YWl0cyBvbiB0aGlzIGZ1dHVyZS4KKworICAgICAgICBjbGFzcyBGdXQoZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHNlbGYuY2JfYWRkZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dkcykKKworICAgICAgICAgICAgZGVmIGFkZF9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgICAgICAgICBzZWxmLmNiX2FkZGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHN1cGVyKCkuYWRkX2RvbmVfY2FsbGJhY2soZm4pCisKKyAgICAgICAgZnV0ID0gRnV0KGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICBub25sb2NhbCByZXN1bHQKKyAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZnV0CisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sod2FpdF9mb3JfZnV0dXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYl9hZGRlZCkKKworICAgICAgICByZXMgPSBvYmplY3QoKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChyZXMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlcywgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX3dpdGhfYmFzZWV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXV0Y2goKToKKyAgICAgICAgICAgIHJhaXNlIEJhc2VFeGNlcHRpb24oKQorCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKG5vdG11dGNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0YXNrLl9zdGVwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRhc2suZXhjZXB0aW9uKCksIEJhc2VFeGNlcHRpb24pCisKKyAgICBkZWYgdGVzdF9iYXNlZXhjZXB0aW9uX2R1cmluZ19jYW5jZWwoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDEwLCBsb29wPWxvb3ApCisKKyAgICAgICAgYmFzZV9leGMgPSBCYXNlRXhjZXB0aW9uKCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdXRjaCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2xlZXBlcigpCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBiYXNlX2V4YworCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKG5vdG11dGNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgICAgIHRhc2suY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmRvbmUoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5LCBsb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHRhc2suZXhjZXB0aW9uKCksIGJhc2VfZXhjKQorCisgICAgZGVmIHRlc3RfaXNjb3JvdXRpbmVmdW5jdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGZuKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuKSkKKworICAgICAgICBkZWYgZm4xKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhc2tzLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4xKSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmbjIoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuMikpCisKKyAgICBkZWYgdGVzdF95aWVsZF92c195aWVsZF9mcm9tKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2Zvcl9mdXR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkIGZ1dAorCisgICAgICAgIHRhc2sgPSB3YWl0X2Zvcl9mdXR1cmUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorCisgICAgZGVmIHRlc3RfeWllbGRfdnNfeWllbGRfZnJvbV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICBnZW4gPSBjb3JvKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBnZW4KKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZ2VuLmNsb3NlKCkKKworICAgICAgICB0YXNrID0gd2FpdF9mb3JfZnV0dXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3RfY29yb3V0aW5lX25vbl9nZW5fZnVuY3Rpb24oc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgICAgIHJldHVybiAndGVzdCcKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodGFza3MuaXNjb3JvdXRpbmVmdW5jdGlvbihmdW5jKSkKKworICAgICAgICBjb3JvID0gZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrcy5pc2Nvcm91dGluZShjb3JvKSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAndGVzdCcpCisKKyAgICBkZWYgdGVzdF9jb3JvdXRpbmVfbm9uX2dlbl9mdW5jdGlvbl9yZXR1cm5fZnV0dXJlKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmdW5jKCk6CisgICAgICAgICAgICByZXR1cm4gZnV0CisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoJ3Rlc3QnKQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhmdW5jKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2soY29ybygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDIucmVzdWx0KCkpCisKKyAgICAjIFNvbWUgdGhvcm91Z2ggdGVzdHMgZm9yIGNhbmNlbGxhdGlvbiBwcm9wYWdhdGlvbiB0aHJvdWdoCisgICAgIyBjb3JvdXRpbmVzLCB0YXNrcyBhbmQgd2FpdCgpLgorCisgICAgZGVmIHRlc3RfeWllbGRfZnV0dXJlX3Bhc3Nlc19jYW5jZWwoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGNhbmNlbHMgaW5uZXIoKSBjYW5jZWxzIHdhaXRlci4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwcm9vZiArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdnb3QgcGFzdCBzbGVlcCgpIGluIGlubmVyKCknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gaW5uZXIoKQorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcHJvb2YgKz0gMTAwICAjIEV4cGVjdCB0aGlzIHBhdGguCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb29mICs9IDEwCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDEwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3dhaXRfZG9lc19ub3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgIyBDYW5jZWxsaW5nIG91dGVyKCkgbWFrZXMgd2FpdCgpIHJldHVybiBlYXJseSwgbGVhdmVzIGlubmVyKCkKKyAgICAgICAgIyBydW5uaW5nLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgZCwgcCA9IHlpZWxkIGZyb20gdGFza3Mud2FpdChbaW5uZXIoKV0sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvb2YgKz0gMTAwCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGYpCisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX3Jlc3VsdChzZWxmKToKKyAgICAgICAgaW5uZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSB0YXNrcy5zaGllbGQoaW5uZXIpCisgICAgICAgIGlubmVyLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUob3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGlubmVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG91dGVyID0gdGFza3Muc2hpZWxkKGlubmVyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCdleHBlY3RlZCcpCisgICAgICAgIGlubmVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvdXRlci5leGNlcHRpb24oKSwgZXhjKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgaW5uZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSB0YXNrcy5zaGllbGQoaW5uZXIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBpbm5lci5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dGVyLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX3Nob3J0Y3V0KHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Muc2hpZWxkKGZ1dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9lZmZlY3Qoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGRvZXMgbm90IGFmZmVjdCBpbm5lcigpLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zaGllbGQoaW5uZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBwcm9vZiArPSAxMDAKKworICAgICAgICBmID0gdGFza3MuYXN5bmMob3V0ZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2dhdGhlcihzZWxmKToKKyAgICAgICAgY2hpbGQxID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNoaWxkMiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwYXJlbnQgPSB0YXNrcy5nYXRoZXIoY2hpbGQxLCBjaGlsZDIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IHRhc2tzLnNoaWVsZChwYXJlbnQsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRlci5jYW5jZWxsZWQoKSkKKyAgICAgICAgY2hpbGQxLnNldF9yZXN1bHQoMSkKKyAgICAgICAgY2hpbGQyLnNldF9yZXN1bHQoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50LnJlc3VsdCgpLCBbMSwgMl0pCisKKyAgICBkZWYgdGVzdF9nYXRoZXJfc2hpZWxkKHNlbGYpOgorICAgICAgICBjaGlsZDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY2hpbGQyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGlubmVyMSA9IHRhc2tzLnNoaWVsZChjaGlsZDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBpbm5lcjIgPSB0YXNrcy5zaGllbGQoY2hpbGQyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50ID0gdGFza3MuZ2F0aGVyKGlubmVyMSwgaW5uZXIyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHBhcmVudC5jYW5jZWwoKQorICAgICAgICAjIFRoaXMgc2hvdWxkIGNhbmNlbCBpbm5lcjEgYW5kIGlubmVyMiBidXQgYm90IGNoaWxkMSBhbmQgY2hpbGQyLgorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhcmVudC5leGNlcHRpb24oKSwgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlubmVyMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlubmVyMi5jYW5jZWxsZWQoKSkKKyAgICAgICAgY2hpbGQxLnNldF9yZXN1bHQoMSkKKyAgICAgICAgY2hpbGQyLnNldF9yZXN1bHQoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKworY2xhc3MgR2F0aGVyVGVzdHNCYXNlOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9uZV9sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYub3RoZXJfbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLm9uZV9sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5vdGhlcl9sb29wLmNsb3NlKCkKKworICAgIGRlZiBfcnVuX2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgIHdoaWxlIGxvb3AuX3JlYWR5OgorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgZGVmIF9jaGVja19zdWNjZXNzKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgYSwgYiwgYyA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMpLCAqKmt3YXJncykKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBiLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYS5zZXRfcmVzdWx0KDIpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IuY2FsbGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgWzIsIDEsIDNdKQorCisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfc3VjY2VzcygpCisgICAgICAgIHNlbGYuX2NoZWNrX3N1Y2Nlc3MocmV0dXJuX2V4Y2VwdGlvbnM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRfZXhjZXB0aW9uX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3N1Y2Nlc3MocmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X29uZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQsIGUgPSBbZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSg1KV0KKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKCpzZWxmLndyYXBfZnV0dXJlcyhhLCBiLCBjLCBkLCBlKSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBiLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5leGNlcHRpb24oKSwgZXhjKQorICAgICAgICAjIERvZXMgbm90aGluZworICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgZC5jYW5jZWwoKQorICAgICAgICBlLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCkpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5fZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDQpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGV4YzIgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBiLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYy5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgYS5zZXRfcmVzdWx0KDMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfZXhjZXB0aW9uKGV4YzIpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbMywgMSwgZXhjLCBleGMyXSkKKworCitjbGFzcyBGdXR1cmVHYXRoZXJUZXN0cyhHYXRoZXJUZXN0c0Jhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB3cmFwX2Z1dHVyZXMoc2VsZiwgKmZ1dHVyZXMpOgorICAgICAgICByZXR1cm4gZnV0dXJlcworCisgICAgZGVmIF9jaGVja19lbXB0eV9zZXF1ZW5jZShzZWxmLCBzZXFfb3JfaXRlcik6CisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZXZlbnRzLnNldF9ldmVudF9sb29wLCBOb25lKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlcV9vcl9pdGVyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0LCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgW10pCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcigqc2VxX29yX2l0ZXIsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfZW1wdHlfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKFtdKQorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZSgoKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZW1wdHlfc2VxdWVuY2Uoc2V0KCkpCisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKGl0ZXIoIiIpKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaGV0ZXJvZ2Vub3VzX2Z1dHVyZXMoc2VsZik6CisgICAgICAgIGZ1dDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGZ1dDIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRhc2tzLmdhdGhlcihmdXQxLCBmdXQyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdGFza3MuZ2F0aGVyKGZ1dDEsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaG9tb2dlbm91c19mdXR1cmVzKHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub3RoZXJfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcigqY2hpbGRyZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKmNoaWxkcmVuLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICBkZWYgdGVzdF9vbmVfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICBhLCBiLCBjLCBkLCBlID0gW2Z1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoNSldCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcihhLCBiLCBjLCBkLCBlKQorICAgICAgICBjYiA9IE1vY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBiLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0LmV4Y2VwdGlvbigpLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKQorICAgICAgICAjIERvZXMgbm90aGluZworICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgZC5jYW5jZWwoKQorICAgICAgICBlLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCkpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRfZXhjZXB0aW9uX29uZV9jYW5jZWxsYXRpb24oc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQsIGUsIGYgPSBbZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDYpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoYSwgYiwgYywgZCwgZSwgZiwgcmV0dXJuX2V4Y2VwdGlvbnM9VHJ1ZSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBhLnNldF9yZXN1bHQoMSkKKyAgICAgICAgemRlID0gWmVyb0RpdmlzaW9uRXJyb3IoKQorICAgICAgICBiLnNldF9leGNlcHRpb24oemRlKQorICAgICAgICBjLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfcmVzdWx0KDMpCisgICAgICAgIGUuY2FuY2VsKCkKKyAgICAgICAgcnRlID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKHJ0ZSkKKyAgICAgICAgcmVzID0gc2VsZi5vbmVfbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzWzJdLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzWzRdLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKQorICAgICAgICByZXNbMl0gPSByZXNbNF0gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMSwgemRlLCBOb25lLCAzLCBOb25lLCBydGVdKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisKKworY2xhc3MgQ29yb3V0aW5lR2F0aGVyVGVzdHMoR2F0aGVyVGVzdHNCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5vbmVfbG9vcCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHdyYXBfZnV0dXJlcyhzZWxmLCAqZnV0dXJlcyk6CisgICAgICAgIGNvcm9zID0gW10KKyAgICAgICAgZm9yIGZ1dCBpbiBmdXR1cmVzOgorICAgICAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGNvcm8oZnV0PWZ1dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dCkKKyAgICAgICAgICAgIGNvcm9zLmFwcGVuZChjb3JvKCkpCisgICAgICAgIHJldHVybiBjb3JvcworCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfbG9vcF9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHJldHVybiAnYWJjJworICAgICAgICBnZW4xID0gY29ybygpCisgICAgICAgIGdlbjIgPSBjb3JvKCkKKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKGdlbjEsIGdlbjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm9uZV9sb29wKQorICAgICAgICBnZW4xLmNsb3NlKCkKKyAgICAgICAgZ2VuMi5jbG9zZSgpCisgICAgICAgIGdlbjMgPSBjb3JvKCkKKyAgICAgICAgZ2VuNCA9IGNvcm8oKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoZ2VuMywgZ2VuNCwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIGdlbjMuY2xvc2UoKQorICAgICAgICBnZW40LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NhbmNlbGxhdGlvbl9icm9hZGNhc3Qoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGNhbmNlbHMgYWxsIGNoaWxkcmVuLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgICAgIHByb29mICs9IDEKKworICAgICAgICBjaGlsZDEgPSB0YXNrcy5hc3luYyhpbm5lcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGNoaWxkMiA9IHRhc2tzLmFzeW5jKGlubmVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgZ2F0aGVyZXIgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mLCBnYXRoZXJlcgorICAgICAgICAgICAgZ2F0aGVyZXIgPSB0YXNrcy5nYXRoZXIoY2hpbGQxLCBjaGlsZDIsIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZ2F0aGVyZXIKKyAgICAgICAgICAgIHByb29mICs9IDEwMAorCisgICAgICAgIGYgPSB0YXNrcy5hc3luYyhvdXRlcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLm9uZV9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdhdGhlcmVyLmNhbmNlbCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdGVyLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQyLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDApCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fbWFya2luZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB0aGUgZmlyc3QgbGluZSBtYXJrZWQgIk1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4iCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoZik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2hvdWxkIG5vdCBiZSBpZ25vcmVkJykKKworICAgICAgICBhID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBiID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLmdhdGhlcihpbm5lcihhKSwgaW5uZXIoYiksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKworICAgICAgICBmID0gdGFza3MuYXN5bmMob3V0ZXIoKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIGEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIGIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBSdW50aW1lRXJyb3IpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3RyYW5zcG9ydHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90cmFuc3BvcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjQ0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90cmFuc3BvcnRzLnB5CkBAIC0wLDAgKzEsNTkgQEAKKyIiIlRlc3RzIGZvciB0cmFuc3BvcnRzLnB5LiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdHJhbnNwb3J0cworCisKK2NsYXNzIFRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2N0b3JfZXh0cmFfaXNfbm9uZShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0cy5UcmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fZXh0cmEsIHt9KQorCisgICAgZGVmIHRlc3RfZ2V0X2V4dHJhX2luZm8oc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KHsnZXh0cmEnOiAnaW5mbyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpbmZvJywgdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdleHRyYScpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3Vua25vd24nKSkKKworICAgICAgICBkZWZhdWx0ID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkZWZhdWx0LCB0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3Vua25vd24nLCBkZWZhdWx0KSkKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXMoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGVsaW5lcyhbJ2xpbmUxJywgJ2xpbmUyJywgJ2xpbmUzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgdHJhbnNwb3J0LndyaXRlLmNhbGxfY291bnQpCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LndyaXRlX2VvZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmNhbl93cml0ZV9lb2YpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5wYXVzZV9yZWFkaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmFib3J0KQorCisgICAgZGVmIHRlc3RfZGdyYW1fbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSB0cmFuc3BvcnRzLkRhdGFncmFtVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCAnZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5hYm9ydCkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfdHJhbnNwb3J0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0cy5TdWJwcm9jZXNzVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3BpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3BpcGVfdHJhbnNwb3J0LCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuc2VuZF9zaWduYWwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC50ZXJtaW5hdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5raWxsKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF91bml4X2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWU3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF91bml4X2V2ZW50cy5weQpAQCAtMCwwICsxLDc4MSBAQAorIiIiVGVzdHMgZm9yIHVuaXhfZXZlbnRzLnB5LiIiIgorCitpbXBvcnQgZ2MKK2ltcG9ydCBlcnJubworaW1wb3J0IGlvCitpbXBvcnQgcHByaW50CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnVU5JWCBvbmx5JykKKworCitmcm9tIGFzeW5jaW8gaW1wb3J0IGV2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBmdXR1cmVzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHByb3RvY29scworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHVuaXhfZXZlbnRzCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc2lnbmFsLCAnU2lnbmFscyBhcmUgbm90IHN1cHBvcnRlZCcpCitjbGFzcyBTZWxlY3RvckV2ZW50TG9vcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdW5peF9ldmVudHMuU2VsZWN0b3JFdmVudExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX3NpZ25hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYubG9vcC5fY2hlY2tfc2lnbmFsLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLl9jaGVja19zaWduYWwsIHNpZ25hbC5OU0lHICsgMSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9zaWduYWxfbm9faGFuZGxlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9oYW5kbGVfc2lnbmFsKHNpZ25hbC5OU0lHICsgMSwgKCkpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfc2lnbmFsX2NhbmNlbGxlZF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBoID0gZXZlbnRzLkhhbmRsZSh1bml0dGVzdC5tb2NrLk1vY2soKSwgKCkpCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnNbc2lnbmFsLk5TSUcgKyAxXSA9IGgKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5faGFuZGxlX3NpZ25hbChzaWduYWwuTlNJRyArIDEsICgpKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfd2l0aChzaWduYWwuTlNJRyArIDEpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9zZXR1cF9lcnJvcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBjYikKKyAgICAgICAgaCA9IHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzLmdldChzaWduYWwuU0lHSFVQKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShoLCBldmVudHMuSGFuZGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLl9jYWxsYmFjaywgY2IpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9pbnN0YWxsX2Vycm9yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgZGVmIHNldF93YWtldXBfZmQoZmQpOgorICAgICAgICAgICAgaWYgZmQgPT0gLTE6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQgPSBzZXRfd2FrZXVwX2ZkCisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FRkFVTFQKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBFcnIsCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLAorICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9pbnN0YWxsX2Vycm9yMihzZWxmLCBtX2xvZ2dpbmcsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FSU5WQUwKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnNbc2lnbmFsLlNJR0hVUF0gPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLAorICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nZ2luZy5pbmZvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmNhbGxfY291bnQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyX2luc3RhbGxfZXJyb3IzKHNlbGYsIG1fbG9nZ2luZywgbV9zaWduYWwpOgorICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVJTlZBTAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLAorICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nZ2luZy5pbmZvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmNhbGxfY291bnQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc2lnbmFsLnNpZ25hbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoc2lnbmFsLlNJR0hVUCwgbV9zaWduYWwuU0lHX0RGTCksIG1fc2lnbmFsLnNpZ25hbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcl8yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIG1fc2lnbmFsLlNJR0lOVCA9IHNpZ25hbC5TSUdJTlQKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnNbc2lnbmFsLlNJR0hVUF0gPSBvYmplY3QoKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnJlc2V0X21vY2soKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NpZ25hbC5zaWduYWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKHNpZ25hbC5TSUdJTlQsIG1fc2lnbmFsLmRlZmF1bHRfaW50X2hhbmRsZXIpLAorICAgICAgICAgICAgbV9zaWduYWwuc2lnbmFsLmNhbGxfYXJnc1swXSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfY2xlYW51cF9lcnJvcihzZWxmLCBtX2xvZ2dpbmcsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQuc2lkZV9lZmZlY3QgPSBWYWx1ZUVycm9yCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2dnaW5nLmluZm8pCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcl9lcnJvcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCBzaWduYWwuU0lHSFVQKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfZXJyb3IyKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUlOVkFMCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCBzaWduYWwuU0lHSFVQKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLldURVJNU0lHJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuV0VYSVRTVEFUVVMnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5XSUZTSUdOQUxFRCcpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLldJRkVYSVRFRCcpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndhaXRwaWQnKQorICAgIGRlZiB0ZXN0X19zaWdfY2hsZChzZWxmLCBtX3dhaXRwaWQsIG1fV0lGRVhJVEVELCBtX1dJRlNJR05BTEVELAorICAgICAgICAgICAgICAgICAgICAgICBtX1dFWElUU1RBVFVTLCBtX1dURVJNU0lHKToKKyAgICAgICAgbV93YWl0cGlkLnNpZGVfZWZmZWN0ID0gWyg3LCBvYmplY3QoKSksIENoaWxkUHJvY2Vzc0Vycm9yXQorICAgICAgICBtX1dJRkVYSVRFRC5yZXR1cm5fdmFsdWUgPSBUcnVlCisgICAgICAgIG1fV0lGU0lHTkFMRUQucmV0dXJuX3ZhbHVlID0gRmFsc2UKKyAgICAgICAgbV9XRVhJVFNUQVRVUy5yZXR1cm5fdmFsdWUgPSAzCisgICAgICAgIHRyYW5zcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc3VicHJvY2Vzc2VzWzddID0gdHJhbnNwCisKKyAgICAgICAgc2VsZi5sb29wLl9zaWdfY2hsZCgpCisgICAgICAgIHRyYW5zcC5fcHJvY2Vzc19leGl0ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuV1RFUk1TSUcnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5XRVhJVFNUQVRVUycpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLldJRlNJR05BTEVEJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuV0lGRVhJVEVEJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud2FpdHBpZCcpCisgICAgZGVmIHRlc3RfX3NpZ19jaGxkX3NpZ25hbChzZWxmLCBtX3dhaXRwaWQsIG1fV0lGRVhJVEVELCBtX1dJRlNJR05BTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9XRVhJVFNUQVRVUywgbV9XVEVSTVNJRyk6CisgICAgICAgIG1fd2FpdHBpZC5zaWRlX2VmZmVjdCA9IFsoNywgb2JqZWN0KCkpLCBDaGlsZFByb2Nlc3NFcnJvcl0KKyAgICAgICAgbV9XSUZFWElURUQucmV0dXJuX3ZhbHVlID0gRmFsc2UKKyAgICAgICAgbV9XSUZTSUdOQUxFRC5yZXR1cm5fdmFsdWUgPSBUcnVlCisgICAgICAgIG1fV1RFUk1TSUcucmV0dXJuX3ZhbHVlID0gMQorICAgICAgICB0cmFuc3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3N1YnByb2Nlc3Nlc1s3XSA9IHRyYW5zcAorCisgICAgICAgIHNlbGYubG9vcC5fc2lnX2NobGQoKQorICAgICAgICB0cmFuc3AuX3Byb2Nlc3NfZXhpdGVkLmFzc2VydF9jYWxsZWRfd2l0aCgtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX1dFWElUU1RBVFVTLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5XVEVSTVNJRycpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLldFWElUU1RBVFVTJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuV0lGU0lHTkFMRUQnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5XSUZFWElURUQnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53YWl0cGlkJykKKyAgICBkZWYgdGVzdF9fc2lnX2NobGRfemVyb19waWQoc2VsZiwgbV93YWl0cGlkLCBtX1dJRkVYSVRFRCwgbV9XSUZTSUdOQUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9XRVhJVFNUQVRVUywgbV9XVEVSTVNJRyk6CisgICAgICAgIG1fd2FpdHBpZC5zaWRlX2VmZmVjdCA9IFsoMCwgb2JqZWN0KCkpLCBDaGlsZFByb2Nlc3NFcnJvcl0KKyAgICAgICAgdHJhbnNwID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zdWJwcm9jZXNzZXNbN10gPSB0cmFuc3AKKworICAgICAgICBzZWxmLmxvb3AuX3NpZ19jaGxkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3AuX3Byb2Nlc3NfZXhpdGVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX1dJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX1dJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9XVEVSTVNJRy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9XRVhJVFNUQVRVUy5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuV1RFUk1TSUcnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5XRVhJVFNUQVRVUycpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLldJRlNJR05BTEVEJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuV0lGRVhJVEVEJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud2FpdHBpZCcpCisgICAgZGVmIHRlc3RfX3NpZ19jaGxkX25vdF9yZWdpc3RlcmVkX3N1YnByb2Nlc3Moc2VsZiwgbV93YWl0cGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV0lGRVhJVEVELCBtX1dJRlNJR05BTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV0VYSVRTVEFUVVMsIG1fV1RFUk1TSUcpOgorICAgICAgICBtX3dhaXRwaWQuc2lkZV9lZmZlY3QgPSBbKDcsIG9iamVjdCgpKSwgQ2hpbGRQcm9jZXNzRXJyb3JdCisgICAgICAgIG1fV0lGRVhJVEVELnJldHVybl92YWx1ZSA9IFRydWUKKyAgICAgICAgbV9XSUZTSUdOQUxFRC5yZXR1cm5fdmFsdWUgPSBGYWxzZQorICAgICAgICBtX1dFWElUU1RBVFVTLnJldHVybl92YWx1ZSA9IDMKKworICAgICAgICBzZWxmLmxvb3AuX3NpZ19jaGxkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX1dURVJNU0lHLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5XVEVSTVNJRycpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLldFWElUU1RBVFVTJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuV0lGU0lHTkFMRUQnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5XSUZFWElURUQnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53YWl0cGlkJykKKyAgICBkZWYgdGVzdF9fc2lnX2NobGRfdW5rbm93bl9zdGF0dXMoc2VsZiwgbV93YWl0cGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dJRkVYSVRFRCwgbV9XSUZTSUdOQUxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9XRVhJVFNUQVRVUywgbV9XVEVSTVNJRyk6CisgICAgICAgIG1fd2FpdHBpZC5zaWRlX2VmZmVjdCA9IFsoNywgb2JqZWN0KCkpLCBDaGlsZFByb2Nlc3NFcnJvcl0KKyAgICAgICAgbV9XSUZFWElURUQucmV0dXJuX3ZhbHVlID0gRmFsc2UKKyAgICAgICAgbV9XSUZTSUdOQUxFRC5yZXR1cm5fdmFsdWUgPSBGYWxzZQorICAgICAgICB0cmFuc3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3N1YnByb2Nlc3Nlc1s3XSA9IHRyYW5zcAorCisgICAgICAgIHNlbGYubG9vcC5fc2lnX2NobGQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwLl9wcm9jZXNzX2V4aXRlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5sb2dnZXInKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5XVEVSTVNJRycpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLldFWElUU1RBVFVTJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuV0lGU0lHTkFMRUQnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5XSUZFWElURUQnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53YWl0cGlkJykKKyAgICBkZWYgdGVzdF9fc2lnX2NobGRfdW5rbm93bl9zdGF0dXNfaW5faGFuZGxlcihzZWxmLCBtX3dhaXRwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9XSUZFWElURUQsIG1fV0lGU0lHTkFMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9XRVhJVFNUQVRVUywgbV9XVEVSTVNJRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xvZyk6CisgICAgICAgIG1fd2FpdHBpZC5zaWRlX2VmZmVjdCA9IEV4Y2VwdGlvbgorICAgICAgICB0cmFuc3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3N1YnByb2Nlc3Nlc1s3XSA9IHRyYW5zcAorCisgICAgICAgIHNlbGYubG9vcC5fc2lnX2NobGQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcC5fcHJvY2Vzc19leGl0ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX1dURVJNU0lHLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX1dFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgbV9sb2cuZXhjZXB0aW9uLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICdVbmtub3duIGV4Y2VwdGlvbiBpbiBTSUdDSExEIGhhbmRsZXInKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndhaXRwaWQnKQorICAgIGRlZiB0ZXN0X19zaWdfY2hsZF9wcm9jZXNzX2Vycm9yKHNlbGYsIG1fd2FpdHBpZCk6CisgICAgICAgIG1fd2FpdHBpZC5zaWRlX2VmZmVjdCA9IENoaWxkUHJvY2Vzc0Vycm9yCisgICAgICAgIHNlbGYubG9vcC5fc2lnX2NobGQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV93YWl0cGlkLmNhbGxlZCkKKworCitjbGFzcyBVbml4UmVhZFBpcGVUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2wocHJvdG9jb2xzLlByb3RvY29sKQorICAgICAgICBzZWxmLnBpcGUgPSB1bml0dGVzdC5tb2NrLk1vY2soc3BlY19zZXQ9aW8uUmF3SU9CYXNlKQorICAgICAgICBzZWxmLnBpcGUuZmlsZW5vLnJldHVybl92YWx1ZSA9IDUKKworICAgICAgICBmY250bF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnZmNudGwuZmNudGwnKQorICAgICAgICBmY250bF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZjbnRsX3BhdGNoZXIuc3RvcCkKKworICAgICAgICBmc3RhdF9wYXRjaGVyID0gdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuZnN0YXQnKQorICAgICAgICBtX2ZzdGF0ID0gZnN0YXRfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc3Quc3RfbW9kZSA9IHN0YXQuU19JRklGTworICAgICAgICBtX2ZzdGF0LnJldHVybl92YWx1ZSA9IHN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmc3RhdF9wYXRjaGVyLnN0b3ApCisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHkoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIG1fcmVhZC5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfZW9mKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBtX3JlYWQucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfYmxvY2tlZChzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgbV9yZWFkLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5leGNlcHRpb24nKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeV9lcnJvcihzZWxmLCBtX3JlYWQsIG1fbG9nZXhjKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICBtX3JlYWQuc2lkZV9lZmZlY3QgPSBlcnIKKyAgICAgICAgdHIuX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHRyLl9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBtX2xvZ2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoJ0ZhdGFsIGVycm9yIGZvciAlcycsIHRyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3BhdXNlX3JlYWRpbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDUsIG0pCisgICAgICAgIHRyLnBhdXNlX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3Jlc3VtZV9yZWFkaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIuX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci5fY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2VfYWxyZWFkeV9jbG9zaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2Nsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gb2JqZWN0KCkKKyAgICAgICAgdHIuX2Nsb3NlKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X19jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0X3dpdGhfZXJyKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLnByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYucHJvdG9jb2wpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLmxvb3ApKSkKKworCitjbGFzcyBVbml4V3JpdGVQaXBlVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKHByb3RvY29scy5CYXNlUHJvdG9jb2wpCisgICAgICAgIHNlbGYucGlwZSA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzcGVjX3NldD1pby5SYXdJT0Jhc2UpCisgICAgICAgIHNlbGYucGlwZS5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNQorCisgICAgICAgIGZjbnRsX3BhdGNoZXIgPSB1bml0dGVzdC5tb2NrLnBhdGNoKCdmY250bC5mY250bCcpCisgICAgICAgIGZjbnRsX3BhdGNoZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZmNudGxfcGF0Y2hlci5zdG9wKQorCisgICAgICAgIGZzdGF0X3BhdGNoZXIgPSB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5mc3RhdCcpCisgICAgICAgIG1fZnN0YXQgPSBmc3RhdF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzdC5zdF9tb2RlID0gc3RhdC5TX0lGSUZPCisgICAgICAgIG1fZnN0YXQucmV0dXJuX3ZhbHVlID0gc3QKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZzdGF0X3BhdGNoZXIuc3RvcCkKKworICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdXQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9jYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWwoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDIKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ3RhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2J1ZmZlcihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ3ByZXZpb3VzJ10KKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3dyaXRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ3ByZXZpb3VzJywgYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2FnYWluKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5sb2dnZXInKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXJyKHNlbGYsIG1fd3JpdGUsIG1fbG9nKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gZXJyCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHRyLl9jb25uX2xvc3QpCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCB0ci5fY29ubl9sb3N0KQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICAjIFRoaXMgaXMgYSBiaXQgb3ZlcnNwZWNpZmllZC4gOi0oCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgJ3BpcGUgY2xvc2VkIGJ5IHBlZXIgb3Igb3Mud3JpdGUocGlwZSwgZGF0YSkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9jbG9zZShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpICAjIHBpcGUgd2FzIGNsb3NlZCBieSBwZWVyCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDIpCisKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYucGlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHkoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9wYXJ0aWFsKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAzCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9hZ2FpbihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfZW1wdHkoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmxvZy5sb2dnZXIuZXhjZXB0aW9uJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9lcnIoc2VsZiwgbV93cml0ZSwgbV9sb2dleGMpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IGVyciA9IE9TRXJyb3IoKQorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIG1fbG9nZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgnRmF0YWwgZXJyb3IgZm9yICVzJywgdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdHIuX2Nvbm5fbG9zdCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9jbG9zaW5nKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X2Fib3J0KHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIHRyLmFib3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3dyaXRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBOb25lCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5wcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLnByb3RvY29sKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5sb29wKSkpCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Rfd2l0aF9lcnIoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLnByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYucHJvdG9jb2wpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLmxvb3ApKSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGVfZW9mID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci53cml0ZV9lb2YuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci53cml0ZV9lb2YgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLndyaXRlX2VvZi5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9wZW5kaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYXRhJ10KKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTE0N2RlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkKQEAgLTAsMCArMSwxMzkgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdXaW5kb3dzIG9ubHknKQorCitpbXBvcnQgX3dpbmFwaQorCitpbXBvcnQgYXN5bmNpbworCitmcm9tIGFzeW5jaW8gaW1wb3J0IHdpbmRvd3NfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHN0cmVhbXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IF9vdmVybGFwcGVkCisKKworY2xhc3MgVXBwZXJQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5idWYgPSBbXQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFucyk6CisgICAgICAgIHNlbGYudHJhbnMgPSB0cmFucworCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYnVmLmFwcGVuZChkYXRhKQorICAgICAgICBpZiBiJ1xuJyBpbiBkYXRhOgorICAgICAgICAgICAgc2VsZi50cmFucy53cml0ZShiJycuam9pbihzZWxmLmJ1ZikudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnMuY2xvc2UoKQorCisKK2NsYXNzIFByb2FjdG9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB3aW5kb3dzX2V2ZW50cy5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wID0gTm9uZQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIGEsIGIgPSBzZWxmLmxvb3AuX3NvY2tldHBhaXIoKQorICAgICAgICB0cmFucyA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KGEsIHByb3RvY29scy5Qcm90b2NvbCgpKQorICAgICAgICBmID0gYXN5bmNpby5hc3luYyhzZWxmLmxvb3Auc29ja19yZWN2KGIsIDEwMCkpCisgICAgICAgIHRyYW5zLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksIGInJykKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9iaW5kKHNlbGYpOgorICAgICAgICBBRERSRVNTID0gcidcXC5ccGlwZVx0ZXN0X2RvdWJsZV9iaW5kLSVzJyAlIG9zLmdldHBpZCgpCisgICAgICAgIHNlcnZlcjEgPSB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKEFERFJFU1MpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yKToKKyAgICAgICAgICAgIHNlcnZlcjIgPSB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKEFERFJFU1MpCisgICAgICAgIHNlcnZlcjEuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGlwZShzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLl90ZXN0X3BpcGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdkb25lJykKKworICAgIGRlZiBfdGVzdF9waXBlKHNlbGYpOgorICAgICAgICBBRERSRVNTID0gcidcXC5ccGlwZVxfdGVzdF9waXBlLSVzJyAlIG9zLmdldHBpZCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIHByb3RvY29scy5Qcm90b2NvbCwgQUREUkVTUykKKworICAgICAgICBbc2VydmVyXSA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN0YXJ0X3NlcnZpbmdfcGlwZSgKKyAgICAgICAgICAgIFVwcGVyUHJvdG8sIEFERFJFU1MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZXJ2ZXIsIHdpbmRvd3NfZXZlbnRzLlBpcGVTZXJ2ZXIpCisKKyAgICAgICAgY2xpZW50cyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgc3RyZWFtX3JlYWRlciA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvdG9jb2wgPSBzdHJlYW1zLlN0cmVhbVJlYWRlclByb3RvY29sKHN0cmVhbV9yZWFkZXIpCisgICAgICAgICAgICB0cmFucywgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogcHJvdG9jb2wsIEFERFJFU1MpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnMsIHRyYW5zcG9ydHMuVHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90b2NvbCwgcHJvdG8pCisgICAgICAgICAgICBjbGllbnRzLmFwcGVuZCgoc3RyZWFtX3JlYWRlciwgdHJhbnMpKQorCisgICAgICAgIGZvciBpLCAociwgdykgaW4gZW51bWVyYXRlKGNsaWVudHMpOgorICAgICAgICAgICAgdy53cml0ZSgnbG93ZXIte31cbicuZm9ybWF0KGkpLmVuY29kZSgpKQorCisgICAgICAgIGZvciBpLCAociwgdykgaW4gZW51bWVyYXRlKGNsaWVudHMpOgorICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBmcm9tIHIucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZSwgJ0xPV0VSLXt9XG4nLmZvcm1hdChpKS5lbmNvZGUoKSkKKyAgICAgICAgICAgIHcuY2xvc2UoKQorCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIHByb3RvY29scy5Qcm90b2NvbCwgQUREUkVTUykKKworICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl9oYW5kbGUoc2VsZik6CisgICAgICAgIGV2ZW50ID0gX292ZXJsYXBwZWQuQ3JlYXRlRXZlbnQoTm9uZSwgVHJ1ZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChfd2luYXBpLkNsb3NlSGFuZGxlLCBldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIHVuc2V0IGV2ZW50IHdpdGggMC4ycyB0aW1lb3V0OworICAgICAgICAjIHJlc3VsdCBzaG91bGQgYmUgRmFsc2UgYXQgdGltZW91dAorICAgICAgICBmID0gc2VsZi5sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoZXZlbnQsIDAuMikKKyAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgZWxhcHNlZCA9IHNlbGYubG9vcC50aW1lKCkgLSBzdGFydAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjE4IDwgZWxhcHNlZCA8IDAuMjIsIGVsYXBzZWQpCisKKyAgICAgICAgX292ZXJsYXBwZWQuU2V0RXZlbnQoZXZlbnQpCisKKyAgICAgICAgIyBXYWl0IGZvciBmb3Igc2V0IGV2ZW50OworICAgICAgICAjIHJlc3VsdCBzaG91bGQgYmUgVHJ1ZSBpbW1lZGlhdGVseQorICAgICAgICBmID0gc2VsZi5sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoZXZlbnQsIDEwKQorICAgICAgICBzdGFydCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBlbGFwc2VkID0gc2VsZi5sb29wLnRpbWUoKSAtIHN0YXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSBlbGFwc2VkIDwgMC4wMiwgZWxhcHNlZCkKKworICAgICAgICBfb3ZlcmxhcHBlZC5SZXNldEV2ZW50KGV2ZW50KQorCisgICAgICAgICMgV2FpdCBmb3IgdW5zZXQgZXZlbnQgd2l0aCBhIGNhbmNlbGxlZCBmdXR1cmU7CisgICAgICAgICMgQ2FuY2VsbGVkRXJyb3Igc2hvdWxkIGJlIHJhaXNlZCBpbW1lZGlhdGVseQorICAgICAgICBmID0gc2VsZi5sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoZXZlbnQsIDEwKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHN0YXJ0ID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBlbGFwc2VkID0gc2VsZi5sb29wLnRpbWUoKSAtIHN0YXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IGVsYXBzZWQgPCAwLjAyLCBlbGFwc2VkKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c191dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDEzZmJkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c191dGlscy5weQpAQCAtMCwwICsxLDE0MCBAQAorIiIiVGVzdHMgZm9yIHdpbmRvd191dGlscyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdXaW5kb3dzIG9ubHknKQorCitpbXBvcnQgX3dpbmFwaQorCitmcm9tIGFzeW5jaW8gaW1wb3J0IHdpbmRvd3NfdXRpbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgX292ZXJsYXBwZWQKKworCitjbGFzcyBXaW5zb2NrZXRwYWlyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfd2luc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgc3NvY2ssIGNzb2NrID0gd2luZG93c191dGlscy5zb2NrZXRwYWlyKCkKKworICAgICAgICBjc29jay5zZW5kKGIneHh4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ3h4eCcsIHNzb2NrLnJlY3YoMTAyNCkpCisKKyAgICAgICAgY3NvY2suY2xvc2UoKQorICAgICAgICBzc29jay5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby53aW5kb3dzX3V0aWxzLnNvY2tldCcpCisgICAgZGVmIHRlc3Rfd2luc29ja2V0cGFpcl9leGMoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmdldHNvY2tuYW1lLnJldHVybl92YWx1ZSA9ICgnJywgMTIzNDUpCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuYWNjZXB0LnJldHVybl92YWx1ZSA9IG9iamVjdCgpLCBvYmplY3QoKQorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmNvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIpCisKKworY2xhc3MgUGlwZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BpcGVfb3ZlcmxhcHBlZChzZWxmKToKKyAgICAgICAgaDEsIGgyID0gd2luZG93c191dGlscy5waXBlKG92ZXJsYXBwZWQ9KFRydWUsIFRydWUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdjEgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YxLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5lcnJvciwgMCkKKworICAgICAgICAgICAgb3YxLlJlYWRGaWxlKGgxLCAxMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3YxLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5lcnJvciwgX3dpbmFwaS5FUlJPUl9JT19QRU5ESU5HKQorICAgICAgICAgICAgRVJST1JfSU9fSU5DT01QTEVURSA9IDk5NgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG92MS5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIEVSUk9SX0lPX0lOQ09NUExFVEUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZXhwZWN0ZWQgRVJST1JfSU9fSU5DT01QTEVURScpCisKKyAgICAgICAgICAgIG92MiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjIucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YyLmVycm9yLCAwKQorCisgICAgICAgICAgICBvdjIuV3JpdGVGaWxlKGgyLCBiImhlbGxvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3YyLmVycm9yLCB7MCwgX3dpbmFwaS5FUlJPUl9JT19QRU5ESU5HfSkKKworICAgICAgICAgICAgcmVzID0gX3dpbmFwaS5XYWl0Rm9yTXVsdGlwbGVPYmplY3RzKFtvdjIuZXZlbnRdLCBGYWxzZSwgMTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjEucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmVycm9yLCBFUlJPUl9JT19JTkNPTVBMRVRFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjIucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3YyLmVycm9yLCB7MCwgX3dpbmFwaS5FUlJPUl9JT19QRU5ESU5HfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmdldHJlc3VsdCgpLCBiImhlbGxvIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDEpCisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgyKQorCisgICAgZGVmIHRlc3RfcGlwZV9oYW5kbGUoc2VsZik6CisgICAgICAgIGgsIF8gPSB3aW5kb3dzX3V0aWxzLnBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgVHJ1ZSkpCisgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoXykKKyAgICAgICAgcCA9IHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZShoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZmlsZW5vKCksIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5oYW5kbGUsIGgpCisKKyAgICAgICAgIyBjaGVjayBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgcCBjbG9zZXMgaGFuZGxlCisgICAgICAgIGRlbCBwCisgICAgICAgIHRlc3Quc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCA2KSAgICAgIyBFUlJPUl9JTlZBTElEX0hBTkRMRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdleHBlY3RlZCBFUlJPUl9JTlZBTElEX0hBTkRMRScpCisKKworY2xhc3MgUG9wZW5UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9wb3BlbihzZWxmKToKKyAgICAgICAgY29tbWFuZCA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgcyA9IHN5cy5zdGRpbi5yZWFkbGluZSgpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHMudXBwZXIoKSkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ3N0ZGVycicpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgbXNnID0gYiJibGFoXG4iCisKKyAgICAgICAgcCA9IHdpbmRvd3NfdXRpbHMuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb21tYW5kXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49d2luZG93c191dGlscy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9d2luZG93c191dGlscy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9d2luZG93c191dGlscy5QSVBFKQorCisgICAgICAgIGZvciBmIGluIFtwLnN0ZGluLCBwLnN0ZG91dCwgcC5zdGRlcnJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZSkKKworICAgICAgICBvdmluID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgIG92b3V0ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgIG92ZXJyID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisKKyAgICAgICAgb3Zpbi5Xcml0ZUZpbGUocC5zdGRpbi5oYW5kbGUsIG1zZykKKyAgICAgICAgb3ZvdXQuUmVhZEZpbGUocC5zdGRvdXQuaGFuZGxlLCAxMDApCisgICAgICAgIG92ZXJyLlJlYWRGaWxlKHAuc3RkZXJyLmhhbmRsZSwgMTAwKQorCisgICAgICAgIGV2ZW50cyA9IFtvdmluLmV2ZW50LCBvdm91dC5ldmVudCwgb3ZlcnIuZXZlbnRdCisgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvck11bHRpcGxlT2JqZWN0cyhldmVudHMsIFRydWUsIDIwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBfd2luYXBpLldBSVRfT0JKRUNUXzApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3ZvdXQucGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdmVyci5wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92aW4ucGVuZGluZykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92aW4uZ2V0cmVzdWx0KCksIGxlbihtc2cpKQorICAgICAgICBvdXQgPSBvdm91dC5nZXRyZXN1bHQoKS5yc3RyaXAoKQorICAgICAgICBlcnIgPSBvdmVyci5nZXRyZXN1bHQoKS5yc3RyaXAoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4ob3V0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihlcnIpLCAwKQorICAgICAgICAjIGFsbG93IGZvciBwYXJ0aWFsIHJlYWRzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cudXBwZXIoKS5yc3RyaXAoKS5zdGFydHN3aXRoKG91dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiInN0ZGVyciIuc3RhcnRzd2l0aChlcnIpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdHMudHh0IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTQ3NzIxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RzLnR4dApAQCAtMCwwICsxLDE0IEBACit0ZXN0X2FzeW5jaW8udGVzdF9iYXNlX2V2ZW50cwordGVzdF9hc3luY2lvLnRlc3RfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF9mdXR1cmVzCit0ZXN0X2FzeW5jaW8udGVzdF9sb2NrcwordGVzdF9hc3luY2lvLnRlc3RfcHJvYWN0b3JfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF9xdWV1ZXMKK3Rlc3RfYXN5bmNpby50ZXN0X3NlbGVjdG9yX2V2ZW50cwordGVzdF9hc3luY2lvLnRlc3Rfc2VsZWN0b3JzCit0ZXN0X2FzeW5jaW8udGVzdF9zdHJlYW1zCit0ZXN0X2FzeW5jaW8udGVzdF90YXNrcwordGVzdF9hc3luY2lvLnRlc3RfdHJhbnNwb3J0cwordGVzdF9hc3luY2lvLnRlc3RfdW5peF9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X3dpbmRvd3NfZXZlbnRzCit0ZXN0X2FzeW5jaW8udGVzdF93aW5kb3dzX3V0aWxzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQppbmRleCA1ZDA2MzJlLi4wODRkMjQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKQEAgLTE5LDYgKzE5LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKK1RJTUVPVVQgPSAzCiBIQVNfVU5JWF9TT0NLRVRTID0gaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJykKIAogY2xhc3MgZHVtbXlzb2NrZXQ6CkBAIC0zOTUsNyArMzk2LDEwIEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgaWYgdC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCisKIAogCiBjbGFzcyBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsKERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzKToKQEAgLTc0MCw3ICs3NDQsMTIgQEAKICAgICAgICAgcy5jcmVhdGVfc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LmZhbWlseSwgc2VsZi5mYW1pbHkpCiAgICAgICAgIFNPQ0tfTk9OQkxPQ0sgPSBnZXRhdHRyKHNvY2tldCwgJ1NPQ0tfTk9OQkxPQ0snLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0spCisgICAgICAgIHNvY2tfdHlwZSA9IHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0sKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocy5zb2NrZXQudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tfdHlwZSB8IHNvY2tldC5TT0NLX0NMT0VYRUMsIHNvY2tfdHlwZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tfdHlwZSkKIAogICAgIGRlZiB0ZXN0X2JpbmQoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzU0LDcgKzc2Myw3IEBACiAgICAgICAgIHMyID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCiAgICAgICAgIHMyLmNyZWF0ZV9zb2NrZXQoc2VsZi5mYW1pbHkpCiAgICAgICAgICMgRUFERFJJTlVTRSBpbmRpY2F0ZXMgdGhlIHNvY2tldCB3YXMgY29ycmVjdGx5IGJvdW5kCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgczIuYmluZCwgKHNlbGYuYWRkclswXSwgcG9ydCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHMyLmJpbmQsIChzZWxmLmFkZHJbMF0sIHBvcnQpKQogCiAgICAgZGVmIHRlc3Rfc2V0X3JldXNlX2FkZHIoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzYyLDcgKzc3MSw3IEBACiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgdW5pdHRlc3Quc2tpcCgiU09fUkVVU0VBRERSIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGlmIFNPX1JFVVNFQUREUiBzdWNjZWVkZWQgZm9yIHNvY2sgd2UgZXhwZWN0IGFzeW5jb3JlCkBAIC03ODcsNyArNzk2LDExIEBACiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhOiBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD01MDApKQogICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICBzZWxmLmFkZENsZWFudXAodC5qb2luKQorICAgICAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgICAgIGlmIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQogCiAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzZWxmLmZhbWlseSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgcy5zZXR0aW1lb3V0KC4yKQpAQCAtNzk1LDcgKzgwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soJ2lpJywgMSwgMCkpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KHNlcnZlci5hZGRyZXNzKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CmluZGV4IDMwYzNiNGEuLmI2NDEwMTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaW8KIGltcG9ydCBhdGV4aXQKK2ltcG9ydCBfdGVzdGNhcGkKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiAjIyMgaGVscGVycwpAQCAtMjMsNyArMjQsOSBAQAogZGVmIHJhaXNlMigpOgogICAgIHJhaXNlIFN5c3RlbUVycm9yCiAKLWNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgR2VuZXJhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBzZWxmLnNhdmVfc3RkZXJyID0gc3lzLnN0ZGVycgpAQCAtMTQxLDggKzE0NCw0MyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFs1XSkKIAogCitjbGFzcyBTdWJpbnRlcnByZXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2xlYWsoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IHNob3dzIGEgbGVhayBpbiByZWZsZWFrIG1vZGUgaWYgYXRleGl0IGRvZXNuJ3QKKyAgICAgICAgIyB0YWtlIGNhcmUgdG8gZnJlZSBjYWxsYmFja3MgaW4gaXRzIHBlci1zdWJpbnRlcnByZXRlciBtb2R1bGUKKyAgICAgICAgIyBzdGF0ZS4KKyAgICAgICAgbiA9IGF0ZXhpdC5fbmNhbGxiYWNrcygpCisgICAgICAgIGNvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGYpCisgICAgICAgICAgICBkZWwgYXRleGl0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0ID0gX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRleGl0Ll9uY2FsbGJhY2tzKCksIG4pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfbGVha19yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBTaW1pbGFyIHRvIHRoZSBhYm92ZSwgYnV0IHdpdGggYSByZWZjeWNsZSB0aHJvdWdoIHRoZSBhdGV4aXQKKyAgICAgICAgIyBtb2R1bGUuCisgICAgICAgIG4gPSBhdGV4aXQuX25jYWxsYmFja3MoKQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihmKQorICAgICAgICAgICAgYXRleGl0Ll9fYXRleGl0ID0gYXRleGl0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0ID0gX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRleGl0Ll9uY2FsbGJhY2tzKCksIG4pCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weSBiL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weQppbmRleCBhOTJjZjg3Li5jZjBlZjdiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CkBAIC01LDEzICs1LDE4IEBACiBkZWYgcGFjayh3aWR0aCwgZGF0YSk6CiAgICAgcmV0dXJuIGInJy5qb2luKHYudG9fYnl0ZXMod2lkdGgsIHN5cy5ieXRlb3JkZXIsIHNpZ25lZD1UcnVlKSBmb3IgdiBpbiBkYXRhKQogCi1wYWNrcyA9IHt3OiAobGFtYmRhICpkYXRhLCB3aWR0aD13OiBwYWNrKHdpZHRoLCBkYXRhKSkgZm9yIHcgaW4gKDEsIDIsIDQpfQotbWF4dmFsdWVzID0ge3c6ICgxIDw8ICg4ICogdyAtIDEpKSAtIDEgZm9yIHcgaW4gKDEsIDIsIDQpfQotbWludmFsdWVzID0ge3c6IC0xIDw8ICg4ICogdyAtIDEpIGZvciB3IGluICgxLCAyLCA0KX0KK2RlZiB1bnBhY2sod2lkdGgsIGRhdGEpOgorICAgIHJldHVybiBbaW50LmZyb21fYnl0ZXMoZGF0YVtpOiBpICsgd2lkdGhdLCBzeXMuYnl0ZW9yZGVyLCBzaWduZWQ9VHJ1ZSkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgd2lkdGgpXQorCitwYWNrcyA9IHt3OiAobGFtYmRhICpkYXRhLCB3aWR0aD13OiBwYWNrKHdpZHRoLCBkYXRhKSkgZm9yIHcgaW4gKDEsIDIsIDMsIDQpfQorbWF4dmFsdWVzID0ge3c6ICgxIDw8ICg4ICogdyAtIDEpKSAtIDEgZm9yIHcgaW4gKDEsIDIsIDMsIDQpfQorbWludmFsdWVzID0ge3c6IC0xIDw8ICg4ICogdyAtIDEpIGZvciB3IGluICgxLCAyLCAzLCA0KX0KIAogZGF0YXMgPSB7CiAgICAgMTogYidceDAwXHgxMlx4NDVceGJiXHg3Zlx4ODBceGZmJywKICAgICAyOiBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2NywgMHg3ZmZmLCAtMHg4MDAwLCAtMSksCisgICAgMzogcGFja3NbM10oMCwgMHgxMjM0NTYsIDB4NDU2Nzg5LCAtMHg0NTY3ODksIDB4N2ZmZmZmLCAtMHg4MDAwMDAsIC0xKSwKICAgICA0OiBwYWNrc1s0XSgwLCAweDEyMzQ1Njc4LCAweDQ1Njc4OWFiLCAtMHg0NTY3ODlhYiwKICAgICAgICAgICAgICAgICAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwgLTEpLAogfQpAQCAtMTksNiArMjQsNyBAQAogSU5WQUxJRF9EQVRBID0gWwogICAgIChiJ2FiYycsIDApLAogICAgIChiJ2FiYycsIDIpLAorICAgIChiJ2FiJywgMyksCiAgICAgKGInYWJjJywgNCksCiBdCiAKQEAgLTI2LDcgKzMyLDcgQEAKIGNsYXNzIFRlc3RBdWRpb29wKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X21heChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYicnLCB3KSwgMCkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChwKDUpLCB3KSwgNSkKQEAgLTM2LDcgKzQyLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoZGF0YXNbd10sIHcpLCAtbWludmFsdWVzW3ddKQogCiAgICAgZGVmIHRlc3RfbWlubWF4KHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChiJycsIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCkBAIC01MCw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaW52YWx1ZXNbd10sIG1heHZhbHVlc1t3XSkpCiAKICAgICBkZWYgdGVzdF9tYXhwcChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChiJycsIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKHBhY2tzW3ddKCpyYW5nZSgxMDApKSwgdyksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAocGFja3Nbd10oOSwgMTAsIDUsIDUsIDAsIDEpLCB3KSwgMTApCkBAIC01OCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heHZhbHVlc1t3XSAtIG1pbnZhbHVlc1t3XSkKIAogICAgIGRlZiB0ZXN0X2F2ZyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcoYicnLCB3KSwgMCkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKDUpLCB3KSwgNSkKQEAgLTc0LDE2ICs4MCwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDYwMDAwMDAwKQogCiAgICAgZGVmIHRlc3RfYXZncHAoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoYicnLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbMV0sIDEpLCAxOTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1syXSwgMiksIDUwNTM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbM10sIDMpLCAxMjkzNzA5NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzRdLCA0KSwgMzMxMTg5NzAwMikKIAogICAgIGRlZiB0ZXN0X3JtcyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYicnLCB3KSwgMCkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhwKCpyYW5nZSgxMDApKSwgdyksIDU3KQpAQCAtOTMsMTAgKzEwMCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbWludmFsdWVzW3ddLCBkZWx0YT0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzFdLCAxKSwgNzcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbMl0sIDIpLCAyMDAwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1szXSwgMyksIDUxMjA1MjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbNF0sIDQpLCAxMzEwODU0MTUyKQogCiAgICAgZGVmIHRlc3RfY3Jvc3Moc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYicnLCB3KSwgLTEpCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhwKDAsIDEsIDIpLCB3KSwgMCkKQEAgLTEwNiw3ICsxMTQsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pLCB3KSwgMSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoYicnLCBiJycsIHcpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzW3ddLCBiJ1wwJyAqIGxlbihkYXRhc1t3XSksIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKQEAgLTExNCwxMiArMTIyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwXHgyNFx4N2ZceDgwXHg3Zlx4ODBceGZlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1syXSwgZGF0YXNbMl0sIDIpLAogICAgICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MjQ2OCwgMHg3ZmZmLCAtMHg4MDAwLCAweDdmZmYsIC0weDgwMDAsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1szXSwgZGF0YXNbM10sIDMpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MjQ2OGFjLCAweDdmZmZmZiwgLTB4ODAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbNF0sIGRhdGFzWzRdLCA0KSwKICAgICAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDI0NjhhY2YwLCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0yKSkKIAogICAgIGRlZiB0ZXN0X2JpYXMoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBmb3IgYmlhcyBpbiAwLCAxLCAtMSwgMTI3LCAtMTI4LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhiJycsIHcsIGJpYXMpLCBiJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzFdLCAxLCAxKSwKQEAgLTEzOCw2ICsxNDksMTcgQEAKICAgICAgICAgICAgICAgICBwYWNrc1syXSgtMSwgMHgxMjMzLCAweDQ1NjYsIC0weDQ1NjgsIDB4N2ZmZSwgMHg3ZmZmLCAtMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzJdLCAyLCAtMHg4MDAwMDAwMCksCiAgICAgICAgICAgICAgICAgZGF0YXNbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzNdLCAzLCAxKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgxLCAweDEyMzQ1NywgMHg0NTY3OGEsIC0weDQ1Njc4OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtMHg4MDAwMDAsIC0weDdmZmZmZiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzNdLCAzLCAtMSksCisgICAgICAgICAgICAgICAgcGFja3NbM10oLTEsIDB4MTIzNDU1LCAweDQ1Njc4OCwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZlLCAweDdmZmZmZiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgMHg3ZmZmZmZmZiksCisgICAgICAgICAgICAgICAgcGFja3NbM10oLTEsIDB4MTIzNDU1LCAweDQ1Njc4OCwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZlLCAweDdmZmZmZiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgLTB4ODAwMDAwMDApLAorICAgICAgICAgICAgICAgIGRhdGFzWzNdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1s0XSwgNCwgMSksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMSwgMHgxMjM0NTY3OSwgMHg0NTY3ODlhYywgLTB4NDU2Nzg5YWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODAwMDAwMDAsIC0weDdmZmZmZmZmLCAwKSkKQEAgLTE1Miw5OCArMTc0LDExNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAwLCAweDdmZmZmZmZmKSkKIAogICAgIGRlZiB0ZXN0X2xpbjJsaW4oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1t3XSwgdywgdyksIGRhdGFzW3ddKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCAyKSwKICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MTIwMCwgMHg0NTAwLCAtMHg0NTAwLCAweDdmMDAsIC0weDgwMDAsIC0weDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCAzKSwKKyAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MTIwMDAwLCAweDQ1MDAwMCwgLTB4NDUwMDAwLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZjAwMDAsIC0weDgwMDAwMCwgLTB4MTAwMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1sxXSwgMSwgNCksCiAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMDAwMDAwLCAweDQ1MDAwMDAwLCAtMHg0NTAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAsIC0weDgwMDAwMDAwLCAtMHgxMDAwMDAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMl0sIDIsIDEpLAogICAgICAgICAgICAgYidceDAwXHgxMlx4NDVceGJhXHg3Zlx4ODBceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMl0sIDIsIDMpLAorICAgICAgICAgICAgcGFja3NbM10oMCwgMHgxMjM0MDAsIDB4NDU2NzAwLCAtMHg0NTY3MDAsCisgICAgICAgICAgICAgICAgICAgICAweDdmZmYwMCwgLTB4ODAwMDAwLCAtMHgxMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgNCksCiAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMzQwMDAwLCAweDQ1NjcwMDAwLCAtMHg0NTY3MDAwMCwKICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZjAwMDAsIC0weDgwMDAwMDAwLCAtMHgxMDAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzNdLCAzLCAxKSwKKyAgICAgICAgICAgIGInXHgwMFx4MTJceDQ1XHhiYVx4N2ZceDgwXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzNdLCAzLCAyKSwKKyAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MTIzNCwgMHg0NTY3LCAtMHg0NTY4LCAweDdmZmYsIC0weDgwMDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDQpLAorICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgxMjM0NTYwMCwgMHg0NTY3ODkwMCwgLTB4NDU2Nzg5MDAsCisgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZjAwLCAtMHg4MDAwMDAwMCwgLTB4MTAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbNF0sIDQsIDEpLAogICAgICAgICAgICAgYidceDAwXHgxMlx4NDVceGJhXHg3Zlx4ODBceGZmJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbNF0sIDQsIDIpLAogICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjM0LCAweDQ1NjcsIC0weDQ1NjgsIDB4N2ZmZiwgLTB4ODAwMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMyksCisgICAgICAgICAgICBwYWNrc1szXSgwLCAweDEyMzQ1NiwgMHg0NTY3ODksIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmLCAtMHg4MDAwMDAsIC0xKSkKIAogICAgIGRlZiB0ZXN0X2FkcGNtMmxpbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDEsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDBceDAwXHgwMFx4ZmZceDAwXHhmZicsICgtMTc5LCA0MCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgMiwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2tzWzJdKDAsIDB4YiwgMHgyOSwgLTB4MTYsIDB4NzIsIC0weGIzKSwgKC0xNzksIDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCAzLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAocGFja3NbM10oMCwgMHhiMDAsIDB4MjkwMCwgLTB4MTYwMCwgMHg3MjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMHhiMzAwKSwgKC0xNzksIDQwKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCA0LCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja3NbNF0oMCwgMHhiMDAwMCwgMHgyOTAwMDAsIC0weDE2MDAwMCwgMHg3MjAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0weGIzMDAwMCksICgtMTc5LCA0MCkpKQogCiAgICAgICAgICMgVmVyeSBjdXJzb3J5IHRlc3QKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidcMCcgKiA1LCB3LCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXDAnICogdyAqIDEwLCAoMCwgMCkpKQogCiAgICAgZGVmIHRlc3RfbGluMmFkcGNtKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzFdLCAxLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoLTIyMSwgMzkpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1syXSwgMiwgTm9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzRdLCA0LCBOb25lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoMzEsIDM5KSkpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzW3ddLCB3LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQogCiAgICAgICAgICMgVmVyeSBjdXJzb3J5IHRlc3QKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oYidcMCcgKiB3ICogMTAsIHcsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiA1LCAoMCwgMCkpKQogCiAgICAgZGVmIHRlc3RfbGluMmFsYXcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1sxXSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDVhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzJdLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbNF0sIDQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbd10sIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQogCiAgICAgZGVmIHRlc3RfYWxhdzJsaW4oc2VsZik6CiAgICAgICAgIGVuY29kZWQgPSBiJ1x4MDBceDAzXHgyNFx4MmFceDUxXHg1NFx4NTVceDU4XHg2Ylx4NzFceDdmJ1wKICAgICAgICAgICAgICAgICAgIGInXHg4MFx4ODNceGE0XHhhYVx4ZDFceGQ0XHhkNVx4ZDhceGViXHhmMVx4ZmYnCiAgICAgICAgIHNyYyA9IFstNjg4LCAtNzIwLCAtMjI0MCwgLTQwMzIsIC05LCAtMywgLTEsIC0yNywgLTI0NCwgLTgyLCAtMTA2LAogICAgICAgICAgICAgICAgNjg4LCA3MjAsIDIyNDAsIDQwMzIsIDksIDMsIDEsIDI3LCAyNDQsIDgyLCAxMDZdCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDEzIGZvciB4IGluIHNyYykpKQogCiAgICAgICAgIGVuY29kZWQgPSBieXRlcyhyYW5nZSgyNTYpKQotICAgICAgICBmb3IgdyBpbiAyLCA0OgorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgogICAgICAgICAgICAgZGVjb2RlZCA9IGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkZWNvZGVkLCB3KSwgZW5jb2RlZCkKIAogICAgIGRlZiB0ZXN0X2xpbjJ1bGF3KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbMV0sIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg2NycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1syXSwgMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzRdLCA0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4N2UnKQorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzW3ddLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKIAogICAgIGRlZiB0ZXN0X3VsYXcybGluKHNlbGYpOgogICAgICAgICBlbmNvZGVkID0gYidceDAwXHgwZVx4MjhceDNmXHg1N1x4NmFceDc2XHg3Y1x4N2VceDdmJ1wKICAgICAgICAgICAgICAgICAgIGInXHg4MFx4OGVceGE4XHhiZlx4ZDdceGVhXHhmNlx4ZmNceGZlXHhmZicKICAgICAgICAgc3JjID0gWy04MDMxLCAtNDQ0NywgLTE0NzEsIC00OTUsIC0xNjMsIC01MywgLTE4LCAtNiwgLTIsIDAsCiAgICAgICAgICAgICAgICA4MDMxLCA0NDQ3LCAxNDcxLCA0OTUsIDE2MywgNTMsIDE4LCA2LCAyLCAwXQotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKGVuY29kZWQsIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxNCBmb3IgeCBpbiBzcmMpKSkKIAogICAgICAgICAjIEN1cnJlbnQgdS1sYXcgaW1wbGVtZW50YXRpb24gaGFzIHR3byBjb2RlcyBmbyAwOiAweDdmIGFuZCAweGZmLgogICAgICAgICBlbmNvZGVkID0gYnl0ZXMocmFuZ2UoMTI3KSkgKyBieXRlcyhyYW5nZSgxMjgsIDI1NikpCi0gICAgICAgIGZvciB3IGluIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CiAgICAgICAgICAgICBkZWNvZGVkID0gYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRlY29kZWQsIHcpLCBlbmNvZGVkKQogCiAgICAgZGVmIHRlc3RfbXVsKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChiJycsIHcsIDIpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzW3ddLCB3LCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcMCcgKiBsZW4oZGF0YXNbd10pKQpAQCAtMjUzLDEyICsyOTEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDBceDI0XHg3Zlx4ODBceDdmXHg4MFx4ZmUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzJdLCAyLCAyKSwKICAgICAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDI0NjgsIDB4N2ZmZiwgLTB4ODAwMCwgMHg3ZmZmLCAtMHg4MDAwLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbM10sIDMsIDIpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MjQ2OGFjLCAweDdmZmZmZiwgLTB4ODAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmLCAtMHg4MDAwMDAsIC0yKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1s0XSwgNCwgMiksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgyNDY4YWNmMCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0yKSkKIAogICAgIGRlZiB0ZXN0X3JhdGVjdihzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCA1LCA4MDAwLCA4MDAwLCBOb25lKSwKQEAgLTI3Miw3ICszMTMsNyBAQAogICAgICAgICBkMiwgc3RhdGUgPSBhdWRpb29wLnJhdGVjdihiJ1x4MDBceDAxXHgwMicsIDEsIDEsIDgwMDAsIDE2MDAwLCBzdGF0ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSArIGQyLCBiJ1wwMDBcMDAwXDAwMVwwMDFcMDAyXDAwMVwwMDBcMDAwXDAwMVwwMDFcMDAyJykKIAotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZDAsIHN0YXRlMCA9IGF1ZGlvb3AucmF0ZWN2KGRhdGFzW3ddLCB3LCAxLCA4MDAwLCAxNjAwMCwgTm9uZSkKICAgICAgICAgICAgIGQsIHN0YXRlID0gYicnLCBOb25lCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YXNbd10pLCB3KToKQEAgLTI4MywxMyArMzI0LDEzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBzdGF0ZTApCiAKICAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UoYicnLCB3KSwgYicnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UocGFja3Nbd10oMCwgMSwgMiksIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrc1t3XSgyLCAxLCAwKSkKIAogICAgIGRlZiB0ZXN0X3RvbW9ubyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGRhdGExID0gZGF0YXNbd10KICAgICAgICAgICAgIGRhdGEyID0gYnl0ZWFycmF5KDIgKiBsZW4oZGF0YTEpKQogICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CkBAIC0zMDEsNyArMzQyLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8oZGF0YTIsIHcsIDAuNSwgMC41KSwgZGF0YTEpCiAKICAgICBkZWYgdGVzdF90b3N0ZXJlbyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGRhdGExID0gZGF0YXNbd10KICAgICAgICAgICAgIGRhdGEyID0gYnl0ZWFycmF5KDIgKiBsZW4oZGF0YTEpKQogICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CkBAIC0zMjgsNyArMzY5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRtYXgoZGF0YXNbMl0sIDEpLCA1KQogCiAgICAgZGVmIHRlc3RfZ2V0c2FtcGxlKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZGF0YSA9IHBhY2tzW3ddKDAsIDEsIC0xLCBtYXh2YWx1ZXNbd10sIG1pbnZhbHVlc1t3XSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMCksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDEpLCAxKQpAQCAtMzY4LDcgKzQwOSw3IEBACiAgICAgZGVmIHRlc3Rfd3JvbmdzaXplKHNlbGYpOgogICAgICAgICBkYXRhID0gYidhYmNkZWZnaCcKICAgICAgICAgc3RhdGUgPSBOb25lCi0gICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgMywgNSwgMTAyNCk6CisgICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgNSwgMTAyNCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLnVsYXcybGluLCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5hbGF3MmxpbiwgZGF0YSwgc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYWRwY20ybGluLCBkYXRhLCBzaXplLCBzdGF0ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5IGIvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKaW5kZXggMTM2OTVkZS4uNTRmMzkyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkKQEAgLTUsMTAgKzUsMjEgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKLQoraW1wb3J0IHN0cnVjdAorZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKIAogCiBjbGFzcyBMZWdhY3lCYXNlNjRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIExlZ2FjeSBBUEkgaXMgbm90IGFzIHBlcm1pc3NpdmUgYXMgdGhlIG1vZGVybiBBUEkKKyAgICBkZWYgY2hlY2tfdHlwZV9lcnJvcnMoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgW10pCisgICAgICAgIG11bHRpZGltZW5zaW9uYWwgPSBtZW1vcnl2aWV3KGIiMTIzNCIpLmNhc3QoJ0InLCAoMiwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgbXVsdGlkaW1lbnNpb25hbCkKKyAgICAgICAgaW50X2RhdGEgPSBtZW1vcnl2aWV3KGIiMTIzNCIpLmNhc3QoJ0knKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGludF9kYXRhKQorCiAgICAgZGVmIHRlc3RfZW5jb2RlYnl0ZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYiJ3d3cucHl0aG9uLm9yZyIpLCBiImQzZDNMbkI1ZEdodmJpNXZjbWM9XG4iKQpAQCAtMjQsNyArMzUsOSBAQAogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT1cbiIpCiAgICAgICAgICMgTm9uLWJ5dGVzCiAgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhieXRlYXJyYXkoYidhYmMnKSksIGInWVdKalxuJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuZW5jb2RlYnl0ZXMsICIiKQorICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMobWVtb3J5dmlldyhiJ2FiYycpKSwgYidZV0pqXG4nKQorICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYXJyYXkoJ0InLCBiJ2FiYycpKSwgYidZV0pqXG4nKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGVfZXJyb3JzKGJhc2U2NC5lbmNvZGVieXRlcykKIAogICAgIGRlZiB0ZXN0X2RlY29kZWJ5dGVzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTQxLDcgKzU0LDkgQEAKICAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGInJyksIGInJykKICAgICAgICAgIyBOb24tYnl0ZXMKICAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGJ5dGVhcnJheShiJ1lXSmpcbicpKSwgYidhYmMnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5kZWNvZGVieXRlcywgIiIpCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhtZW1vcnl2aWV3KGInWVdKalxuJykpLCBiJ2FiYycpCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhhcnJheSgnQicsIGInWVdKalxuJykpLCBiJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9lcnJvcnMoYmFzZTY0LmRlY29kZWJ5dGVzKQogCiAgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTczLDYgKzg4LDM4IEBACiAKIAogY2xhc3MgQmFzZVhZVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBNb2Rlcm4gQVBJIGNvbXBsZXRlbHkgaWdub3JlcyBleHBvcnRlZCBkaW1lbnNpb24gYW5kIGZvcm1hdCBkYXRhIGFuZAorICAgICMgdHJlYXRzIGFueSBidWZmZXIgYXMgYSBzdHJlYW0gb2YgYnl0ZXMKKyAgICBkZWYgY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIFtdKQorCisgICAgZGVmIGNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhzZWxmLCBmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBbXSkKKworICAgIGRlZiBjaGVja19vdGhlcl90eXBlcyhzZWxmLCBmLCBieXRlc19kYXRhLCBleHBlY3RlZCk6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShmKGJ5dGVhcnJheShieXRlc19kYXRhKSksIGV4cGVjdGVkKQorICAgICAgICBlcShmKG1lbW9yeXZpZXcoYnl0ZXNfZGF0YSkpLCBleHBlY3RlZCkKKyAgICAgICAgZXEoZihhcnJheSgnQicsIGJ5dGVzX2RhdGEpKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfbm9uYnl0ZV9lbGVtZW50X2Zvcm1hdChiYXNlNjQuYjY0ZW5jb2RlLCBieXRlc19kYXRhKQorICAgICAgICBzZWxmLmNoZWNrX211bHRpZGltZW5zaW9uYWwoYmFzZTY0LmI2NGVuY29kZSwgYnl0ZXNfZGF0YSkKKworICAgIGRlZiBjaGVja19tdWx0aWRpbWVuc2lvbmFsKHNlbGYsIGYsIGRhdGEpOgorICAgICAgICBwYWRkaW5nID0gYiJceDAwIiBpZiBsZW4oZGF0YSkgJSAyIGVsc2UgYiIiCisgICAgICAgIGJ5dGVzX2RhdGEgPSBkYXRhICsgcGFkZGluZyAjIE1ha2Ugc3VyZSBjYXN0IHdvcmtzCisgICAgICAgIHNoYXBlID0gKGxlbihieXRlc19kYXRhKSAvLyAyLCAyKQorICAgICAgICBtdWx0aWRpbWVuc2lvbmFsID0gbWVtb3J5dmlldyhieXRlc19kYXRhKS5jYXN0KCdCJywgc2hhcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihtdWx0aWRpbWVuc2lvbmFsKSwgZihieXRlc19kYXRhKSkKKworICAgIGRlZiBjaGVja19ub25ieXRlX2VsZW1lbnRfZm9ybWF0KHNlbGYsIGYsIGRhdGEpOgorICAgICAgICBwYWRkaW5nID0gYiJceDAwIiAqICgoNCAtIGxlbihkYXRhKSkgJSA0KQorICAgICAgICBieXRlc19kYXRhID0gZGF0YSArIHBhZGRpbmcgIyBNYWtlIHN1cmUgY2FzdCB3b3JrcworICAgICAgICBpbnRfZGF0YSA9IG1lbW9yeXZpZXcoYnl0ZXNfZGF0YSkuY2FzdCgnSScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihpbnRfZGF0YSksIGYoYnl0ZXNfZGF0YSkpCisKKwogICAgIGRlZiB0ZXN0X2I2NGVuY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgICMgVGVzdCBkZWZhdWx0IGFscGhhYmV0CkBAIC05MCwxMyArMTM3LDE2IEBACiAgICAgICAgICAgIGIiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PSIpCiAgICAgICAgICMgVGVzdCB3aXRoIGFyYml0cmFyeSBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1iJyokJyksIGInMDFhKmIkY2QnKQotICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVhcnJheShiJ2FiY2QnKSksIGInWVdKalpBPT0nKQogICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9Ynl0ZWFycmF5KGInKiQnKSksCiAgICAgICAgICAgIGInMDFhKmIkY2QnKQotICAgICAgICAjIENoZWNrIGlmIHBhc3NpbmcgYSBzdHIgb2JqZWN0IHJhaXNlcyBhbiBlcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iNjRlbmNvZGUsICIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iNjRlbmNvZGUsIGIiIiwgYWx0Y2hhcnM9IiIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1tZW1vcnl2aWV3KGInKiQnKSksCisgICAgICAgICAgIGInMDFhKmIkY2QnKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9YXJyYXkoJ0InLCBiJyokJykpLAorICAgICAgICAgICBiJzAxYSpiJGNkJykKKyAgICAgICAgIyBOb24tYnl0ZXMKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjY0ZW5jb2RlLCBiJ2FiY2QnLCBiJ1lXSmpaQT09JykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmI2NGVuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZW5jb2RlLCBiIiIsIGFsdGNoYXJzPSIqJCIpCiAgICAgICAgICMgVGVzdCBzdGFuZGFyZCBhbHBoYWJldAogICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGIid3d3LnB5dGhvbi5vcmciKSwgYiJkM2QzTG5CNWRHaHZiaTV2Y21jPSIpCiAgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoYiJhIiksIGIiWVE9PSIpCkBAIC0xMTAsMTUgKzE2MCwxNSBAQAogICAgICAgICAgICBiIlJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXakF4TWpNME5UIgogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT0iKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGJ5dGVhcnJheShiJ2FiY2QnKSksIGInWVdKalpBPT0nKQotICAgICAgICAjIENoZWNrIGlmIHBhc3NpbmcgYSBzdHIgb2JqZWN0IHJhaXNlcyBhbiBlcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmNkJywgYidZV0pqWkE9PScpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUpCiAgICAgICAgICMgVGVzdCB3aXRoICdVUkwgc2FmZScgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnKSwgYicwMWEtYl9jZCcpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZShieXRlYXJyYXkoYidceGQzVlx4YmVvXHhmN1x4MWQnKSksIGInMDFhLWJfY2QnKQotICAgICAgICAjIENoZWNrIGlmIHBhc3NpbmcgYSBzdHIgb2JqZWN0IHJhaXNlcyBhbiBlcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYicwMWEtYl9jZCcpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSkKIAogICAgIGRlZiB0ZXN0X2I2NGRlY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0xNDEsNyArMTkxLDggQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoYnl0ZWFycmF5KGIiWVdKaiIpKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iNjRkZWNvZGUsIGIiWVdKaiIsIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmI2NGRlY29kZSkKIAogICAgICAgICAjIFRlc3Qgd2l0aCBhcmJpdHJhcnkgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICB0ZXN0c19hbHRjaGFycyA9IHsoYicwMWEqYiRjZCcsIGInKiQnKTogYidceGQzVlx4YmVvXHhmN1x4MWQnLApAQCAtMTYwLDcgKzIxMSw4IEBACiAgICAgICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGJ5dGVhcnJheShiIllXSmoiKSksIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlLCBiIllXSmoiLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUpCiAKICAgICAgICAgIyBUZXN0IHdpdGggJ1VSTCBzYWZlJyBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIHRlc3RzX3VybHNhZmUgPSB7YicwMWEtYl9jZCc6IGInXHhkM1ZceGJlb1x4ZjdceDFkJywKQEAgLTE3MCw3ICsyMjIsOSBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShieXRlYXJyYXkoYicwMWEtYl9jZCcpKSwgYidceGQzVlx4YmVvXHhmN1x4MWQnKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSwgYicwMWEtYl9jZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQzVlx4YmVvXHhmN1x4MWQnKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUpCiAKICAgICBkZWYgdGVzdF9iNjRkZWNvZGVfcGFkZGluZ19lcnJvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJhc2U2NC5iNjRkZWNvZGUsIGInYWJjJykKQEAgLTIwNSw4ICsyNTksOCBAQAogICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGInYWJjZCcpLCBiJ01GUkdHWkE9JykKICAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZShiJ2FiY2RlJyksIGInTUZSR0daREYnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGJ5dGVhcnJheShiJ2FiY2QnKSksIGInTUZSR0daQT0nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iMzJlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMzJlbmNvZGUsIGInYWJjZCcsIGInTUZSR0daQT0nKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjMyZW5jb2RlKQogCiAgICAgZGVmIHRlc3RfYjMyZGVjb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTIyMiw3ICsyNzYsOCBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZShieXRlYXJyYXkoYidNRlJHRz09PScpKSwgYidhYmMnKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMzJkZWNvZGUsIGInTUZSR0c9PT0nLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iMzJkZWNvZGUpCiAKICAgICBkZWYgdGVzdF9iMzJkZWNvZGVfY2FzZWZvbGQoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjc3LDggKzMzMiw5IEBACiAgICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoYidceDAxXHgwMlx4YWJceGNkXHhlZicpLCBiJzAxMDJBQkNERUYnKQogICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKGInXHgwMCcpLCBiJzAwJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZShieXRlYXJyYXkoYidceDAxXHgwMlx4YWJceGNkXHhlZicpKSwgYicwMTAyQUJDREVGJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjE2ZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjE2ZW5jb2RlLCBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAxMDJBQkNERUYnKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjE2ZW5jb2RlKQogCiAgICAgZGVmIHRlc3RfYjE2ZGVjb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI5Myw3ICszNDksMTUgQEAKICAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShiJzAxMDJhYmNkZWYnLCBUcnVlKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCiAgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoJzAxMDJhYmNkZWYnLCBUcnVlKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYnl0ZWFycmF5KGIiMDEwMkFCQ0RFRiIpKSwgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIxNmRlY29kZSwgYiIwMTAyQUJDREVGIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIxNmRlY29kZSkKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShieXRlYXJyYXkoYiIwMTAyYWJjZGVmIiksIFRydWUpLAorICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShtZW1vcnl2aWV3KGIiMDEwMmFiY2RlZiIpLCBUcnVlKSwKKyAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYXJyYXkoJ0InLCBiIjAxMDJhYmNkZWYiKSwgVHJ1ZSksCisgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQogCiAgICAgZGVmIHRlc3RfZGVjb2RlX25vbmFzY2lpX3N0cihzZWxmKToKICAgICAgICAgZGVjb2RlX2Z1bmNzID0gKGJhc2U2NC5iNjRkZWNvZGUsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jpc2VjdC5weSBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CmluZGV4IDdiOWJkMTkuLjU4MGE5NjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CkBAIC03LDcgKzcsNyBAQAogY19iaXNlY3QgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2Jpc2VjdCcsIGZyZXNoPVsnX2Jpc2VjdCddKQogCiBjbGFzcyBSYW5nZShvYmplY3QpOgotICAgICIiIkEgdHJpdmlhbCByYW5nZSgpLWxpa2Ugb2JqZWN0IHdpdGhvdXQgYW55IGludGVnZXIgd2lkdGggbGltaXRhdGlvbnMuIiIiCisgICAgIiIiQSB0cml2aWFsIHJhbmdlKCktbGlrZSBvYmplY3QgdGhhdCBoYXMgYW4gaW5zZXJ0KCkgbWV0aG9kLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgc3RvcCk6CiAgICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAogICAgICAgICBzZWxmLnN0b3AgPSBzdG9wCkBAIC0xMjAsMTAgKzEyMCwxMCBAQAogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2xvKHNlbGYpOgogICAgICAgICAjIElzc3VlIDMzMDEKICAgICAgICAgbW9kID0gc2VsZi5tb2R1bGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKIAogICAgIGRlZiB0ZXN0X2xhcmdlX3JhbmdlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDEzNDk2CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weSBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CmluZGV4IDA0ZTNmNjEuLjE2Njc4NDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CkBAIC00MjkwLDkgKzQyOTAsNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgbWVtb3J5dmlldywgeCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEJ1ZmZlclByb3RvY29sKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCBjMzQyYTQzLi4yNDExYzliIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC00NjQsNiArNDY0LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBib21bOjJdICsgYidhJykKIAorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBldmFsLCAiZm9vIiwge30sIFgoKSkKKwogICAgIGRlZiB0ZXN0X2dlbmVyYWxfZXZhbChzZWxmKToKICAgICAgICAgIyBUZXN0cyB0aGF0IGdlbmVyYWwgbWFwcGluZ3MgY2FuIGJlIHVzZWQgZm9yIHRoZSBsb2NhbHMgYXJndW1lbnQKIApAQCAtNTc5LDcgKzU4NCwxMCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIGZyb3plbmRpY3RfZXJyb3IoImZyb3plbmRpY3QgaXMgcmVhZG9ubHkiKQogCiAgICAgICAgICMgcmVhZC1vbmx5IGJ1aWx0aW5zCi0gICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQorICAgICAgICBpZiBpc2luc3RhbmNlKF9fYnVpbHRpbnNfXywgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBmcm96ZW5fYnVpbHRpbnMgPSBmcm96ZW5kaWN0KF9fYnVpbHRpbnNfXy5fX2RpY3RfXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQogICAgICAgICBjb2RlID0gY29tcGlsZSgiX19idWlsdGluc19fWydzdXBlcmdsb2JhbCddPTI7IHByaW50KHN1cGVyZ2xvYmFsKSIsICJ0ZXN0IiwgImV4ZWMiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmcm96ZW5kaWN0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLCBjb2RlLCB7J19fYnVpbHRpbnNfXyc6IGZyb3plbl9idWlsdGluc30pCkBAIC04MzksOCArODQ3LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIuMCwgMyksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEuMCwgMiwgMyksIDMpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF4LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF4LCAoKSkKKyAgICAgICAgY2xhc3MgQmFkU2VxOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1heCwgQmFkU2VxKCkpCisKICAgICAgICAgZm9yIHN0bXQgaW4gKAogICAgICAgICAgICAgIm1heChrZXk9aW50KSIsICAgICAgICAgICAgICAgICAjIG5vIGFyZ3MKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lKSIsCisgICAgICAgICAgICAibWF4KDEsIDIsIGRlZmF1bHQ9Tm9uZSkiLCAgICAgICMgcmVxdWlyZSBjb250YWluZXIgZm9yIGRlZmF1bHQKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lLCBrZXk9aW50KSIsCiAgICAgICAgICAgICAibWF4KDEsIGtleT1pbnQpIiwgICAgICAgICAgICAgICMgc2luZ2xlIGFyZyBub3QgaXRlcmFibGUKICAgICAgICAgICAgICJtYXgoMSwgMiwga2V5c3RvbmU9aW50KSIsICAgICAgIyB3cm9uZyBrZXl3b3JkCiAgICAgICAgICAgICAibWF4KDEsIDIsIGtleT1pbnQsIGFiYz1pbnQpIiwgICMgdHdvIG1hbnkga2V5d29yZHMKQEAgLTg1Nyw2ICs4NzYsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGtleT1uZWcpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIsIGtleT1uZWcpLCAxKSAgICAgIyB0d28gZWxlbXMKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD1Ob25lKSwgTm9uZSkgICAgIyB6ZXJvIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsKSwgZGVmYXVsdD1Ob25lKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGRlZmF1bHQ9Tm9uZSksIDIpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsIDIpLCBkZWZhdWx0PTMsIGtleT1uZWcpLCAxKQorCiAgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDApIGZvciBpIGluIHJhbmdlKDEwMCldCiAgICAgICAgIGtleXMgPSBkaWN0KChlbGVtLCByYW5kb20ucmFuZHJhbmdlKDUwKSkgZm9yIGVsZW0gaW4gZGF0YSkKICAgICAgICAgZiA9IGtleXMuX19nZXRpdGVtX18KQEAgLTg4Myw2ICs5MDksOSBAQAogCiAgICAgICAgIGZvciBzdG10IGluICgKICAgICAgICAgICAgICJtaW4oa2V5PWludCkiLCAgICAgICAgICAgICAgICAgIyBubyBhcmdzCisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSkiLAorICAgICAgICAgICAgIm1pbigxLCAyLCBkZWZhdWx0PU5vbmUpIiwgICAgICAjIHJlcXVpcmUgY29udGFpbmVyIGZvciBkZWZhdWx0CisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSwga2V5PWludCkiLAogICAgICAgICAgICAgIm1pbigxLCBrZXk9aW50KSIsICAgICAgICAgICAgICAjIHNpbmdsZSBhcmcgbm90IGl0ZXJhYmxlCiAgICAgICAgICAgICAibWluKDEsIDIsIGtleXN0b25lPWludCkiLCAgICAgICMgd3Jvbmcga2V5d29yZAogICAgICAgICAgICAgIm1pbigxLCAyLCBrZXk9aW50LCBhYmM9aW50KSIsICAjIHR3byBtYW55IGtleXdvcmRzCkBAIC04OTksNiArOTI4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBrZXk9bmVnKSwgMikgICAgIyB0d28gZWxlbSBpdGVyYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigxLCAyLCBrZXk9bmVnKSwgMikgICAgICMgdHdvIGVsZW1zCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9Tm9uZSksIE5vbmUpICAgICMgemVybyBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCksIGRlZmF1bHQ9Tm9uZSksIDEpICAgICAjIG9uZSBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBkZWZhdWx0PU5vbmUpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9MSwga2V5PW5lZyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCAyKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMikKKwogICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwKSBmb3IgaSBpbiByYW5nZSgxMDApXQogICAgICAgICBrZXlzID0gZGljdCgoZWxlbSwgcmFuZG9tLnJhbmRyYW5nZSg1MCkpIGZvciBlbGVtIGluIGRhdGEpCiAgICAgICAgIGYgPSBrZXlzLl9fZ2V0aXRlbV9fCkBAIC05NDAsMjkgKzk3NiwyNSBAQAogICAgIGRlZiB3cml0ZV90ZXN0ZmlsZShzZWxmKToKICAgICAgICAgIyBOQiB0aGUgZmlyc3QgNCBsaW5lcyBhcmUgYWxzbyB1c2VkIHRvIHRlc3QgaW5wdXQsIGJlbG93CiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgdHJ5OgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBmcC53cml0ZSgnMSsxXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKQogICAgICAgICAgICAgZnAud3JpdGUoJy5cbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnRGVhciBKb2huXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1hYWCcqMTAwKQogICAgICAgICAgICAgZnAud3JpdGUoJ1lZWScqMTAwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICdyJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGZwOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJzErMVxuJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJ0RlYXInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgxMDApLCAnIEpvaG5cbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoMzAwKSwgJ1hYWCcqMTAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkKDEwMDApLCAnWVlZJyoxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgZGVmIHRlc3Rfb3Blbl9kZWZhdWx0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICBvbGRfZW52aXJvbiA9IGRpY3Qob3MuZW52aXJvbikKQEAgLTk3NywxNSArMTAwOSwxNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgICAgICBjdXJyZW50X2xvY2FsZV9lbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKICAgICAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5lbmNvZGluZywgY3VycmVudF9sb2NhbGVfZW5jb2RpbmcpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCiAgICAgICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShvbGRfZW52aXJvbikKIAorICAgIGRlZiB0ZXN0X29wZW5fbm9uX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBmaWxlb2JqID0gb3BlbihfX2ZpbGVfXykKKyAgICAgICAgd2l0aCBmaWxlb2JqOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUoZmlsZW9iai5maWxlbm8oKSkpCisKICAgICBkZWYgdGVzdF9vcmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCcgJyksIDMyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZCgnQScpLCA2NSkKQEAgLTEwOTYsNyArMTEzMCw2IEBACiAgICAgICAgICAgICBzeXMuc3RkaW4gPSBzYXZlc3RkaW4KICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlc3Rkb3V0CiAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MocHR5LCAidGhlIHB0eSBhbmQgc2lnbmFsIG1vZHVsZXMgbXVzdCBiZSBhdmFpbGFibGUiKQogICAgIGRlZiBjaGVja19pbnB1dF90dHkoc2VsZiwgcHJvbXB0LCB0ZXJtaW5hbF9pbnB1dCwgc3RkaW9fZW5jb2Rpbmc9Tm9uZSk6CkBAIC0xNDc2LDE3ICsxNTA5LDExIEBACiAgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgIyBJc3N1ZSAjNzk5NDogb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzCiAgICAgICAgICMgIGRlcHJlY2F0ZWQKLSAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlX3dhcm5pbmcpOgotICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQotICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlX3dhcm5pbmc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdbMF0ubWVzc2FnZSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLCBzdHIod1swXS5tZXNzYWdlKSkKKyAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlKToKKyAgICAgICAgICAgIGlmIHNob3VsZF9yYWlzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZvcm1hdCwgb2JqLCBmbXRfc3RyKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQogCiAgICAgICAgIGZtdF9zdHJzID0gWycnLCAncyddCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CmluZGV4IDM1MjBlODMuLjg0N2M3YTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQpAQCAtMjg4LDggKzI4OCwyMiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4obHN0KSwgYiJhYmMiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4odHVwbGUobHN0KSksIGIiYWJjIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKGl0ZXIobHN0KSksIGIiYWJjIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIi4iKS5qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi5jZCIpCi0gICAgICAgICMgWFhYIG1vcmUuLi4KKyAgICAgICAgZG90X2pvaW4gPSBzZWxmLnR5cGUydGVzdChiIi46Iikuam9pbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFttZW1vcnl2aWV3KGIiYWIiKSwgYiJjZCJdKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtiImFiIiwgbWVtb3J5dmlldyhiImNkIildKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtieXRlYXJyYXkoYiJhYiIpLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBieXRlYXJyYXkoYiJjZCIpXSksIGIiYWIuOmNkIikKKyAgICAgICAgIyBTdHJlc3MgaXQgd2l0aCBtYW55IGl0ZW1zCisgICAgICAgIHNlcSA9IFtiImFiYyJdICogMTAwMAorICAgICAgICBleHBlY3RlZCA9IGIiYWJjIiArIGIiLjphYmMiICogOTk5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oc2VxKSwgZXhwZWN0ZWQpCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgd2hlbiBzb21lIGl0ZW0gaW4gdGhlIG1pZGRsZSBvZiB0aGUKKyAgICAgICAgIyBzZXF1ZW5jZSBoYXMgdGhlIHdyb25nIHR5cGUuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFtieXRlYXJyYXkoYiJhYiIpLCAiY2QiLCBiImVmIl0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFttZW1vcnl2aWV3KGIiYWIiKSwgImNkIiwgYiJlZiJdKQogCiAgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKQEAgLTc1OSw3ICs3NzMsNyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0Zm4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgpAQCAtODk1LDYgKzkwOSwxNSBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICBiWzM6NF0gPSBlbGVtCiAKKyAgICBkZWYgdGVzdF9zZXRzbGljZV9leHRlbmQoc2VsZik6CisgICAgICAgICMgRXhlcmNpc2UgdGhlIHJlc2l6aW5nIGxvZ2ljIChzZWUgaXNzdWUgIzE5MDg3KQorICAgICAgICBiID0gYnl0ZWFycmF5KHJhbmdlKDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMDApKSkKKyAgICAgICAgZGVsIGJbOjEwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QocmFuZ2UoMTAsIDEwMCkpKQorICAgICAgICBiLmV4dGVuZChyYW5nZSgxMDAsIDExMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMCwgMTEwKSkpCisKICAgICBkZWYgdGVzdF9leHRlbmRlZF9zZXRfZGVsX3NsaWNlKHNlbGYpOgogICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDE5LCAzMDAsIDE8PDMzMywgLTEsIC0yLCAtMzEsIC0zMDApCiAgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgpAQCAtMTI3NCw2ICsxMjk3LDExIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbCBpcyBub3QgbmV3dmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIrJyByZXR1cm5lZCB2YWwgb24gYSBtdXRhYmxlIG9iamVjdCcpCisgICAgICAgIHNlcCA9IHNlbGYubWFyc2hhbChiJycpCisgICAgICAgIG5ld3ZhbCA9IHNlcC5qb2luKFt2YWxdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHZhbCwgbmV3dmFsKQorCiAKIGNsYXNzIEZpeGVkU3RyaW5nVGVzdCh0ZXN0LnN0cmluZ190ZXN0cy5CYXNlVGVzdCk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnoyLnB5IGIvTGliL3Rlc3QvdGVzdF9iejIucHkKaW5kZXggNjc2NGU1OS4uOGQ5M2UyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iejIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iejIucHkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24zCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGJpZ21lbXRlc3QsIF80RworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGJpZ21lbXRlc3QsIF80RwogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KQEAgLTksNiArOSw3IEBACiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHVubGluawogCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwpAQCAtMTksMTAgKzIwLDEwIEBACiBiejIgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2J6MicpCiBmcm9tIGJ6MiBpbXBvcnQgQloyRmlsZSwgQloyQ29tcHJlc3NvciwgQloyRGVjb21wcmVzc29yCiAKLWhhc19jbWRsaW5lX2J1bnppcDIgPSBzeXMucGxhdGZvcm0gbm90IGluICgid2luMzIiLCAib3MyZW14IikKIAogY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICJCYXNlIGZvciBvdGhlciB0ZXN0Y2FzZXMuIgorCiAgICAgVEVYVF9MSU5FUyA9IFsKICAgICAgICAgYidyb290Ong6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9iYXNoXG4nLAogICAgICAgICBiJ2Jpbjp4OjE6MTpiaW46L2JpbjpcbicsCkBAIC01MSwxMyArNTIsMTcgQEAKICAgICBFTVBUWV9EQVRBID0gYidCWmg5XHgxN3JFOFBceDkwXHgwMFx4MDBceDAwXHgwMCcKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IFRFU1RGTgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5maWxlbmFtZSk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5maWxlbmFtZSkKIAotICAgIGlmIGhhc19jbWRsaW5lX2J1bnppcDI6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCisgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCisgICAgZWxzZToKICAgICAgICAgZGVmIGRlY29tcHJlc3Moc2VsZiwgZGF0YSk6CiAgICAgICAgICAgICBwb3AgPSBzdWJwcm9jZXNzLlBvcGVuKCJidW56aXAyIiwgc2hlbGw9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLApAQCAtNzEsMzEgKzc2LDIxIEBACiAgICAgICAgICAgICAgICAgcmV0ID0gYnoyLmRlY29tcHJlc3MoZGF0YSkKICAgICAgICAgICAgIHJldHVybiByZXQKIAotICAgIGVsc2U6Ci0gICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCi0gICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgotICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCiAKIGNsYXNzIEJaMkZpbGVUZXN0KEJhc2VUZXN0KToKLSAgICAiVGVzdCBCWjJGaWxlIHR5cGUgbWlzY2VsbGFuZW91cyBtZXRob2RzLiIKKyAgICAiVGVzdCB0aGUgQloyRmlsZSBjbGFzcy4iCiAKICAgICBkZWYgY3JlYXRlVGVtcEZpbGUoc2VsZiwgc3RyZWFtcz0xKToKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuREFUQSAqIHN0cmVhbXMpCiAKICAgICBkZWYgdGVzdEJhZEFyZ3Moc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoMTIzLjQ1NikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJ6IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJyeCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAicmJ0IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQloyRmlsZSwgMTIzLjQ1NikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsICJ6IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsICJyeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCAicmJ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MTApCiAKICAgICBkZWYgdGVzdFJlYWQoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQpAQCAtMjE2LDkgKzIxMSw4IEBACiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQogICAgICAgICBiejJmLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5fX25leHRfXykKLSAgICAgICAgIyBUaGlzIGNhbGwgd2lsbCBkZWFkbG9jayBpZiB0aGUgYWJvdmUgLl9fbmV4dF9fIGNhbGwgZmFpbGVkIHRvCi0gICAgICAgICMgcmVsZWFzZSB0aGUgbG9jay4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgYnoyZikKKyAgICAgICAgIyBUaGlzIGNhbGwgd2lsbCBkZWFkbG9jayBpZiB0aGUgYWJvdmUgY2FsbCBmYWlsZWQgdG8gcmVsZWFzZSB0aGUgbG9jay4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5yZWFkbGluZXMpCiAKICAgICBkZWYgdGVzdFdyaXRlKHNlbGYpOgpAQCAtMjYyLDggKzI1Niw4IEBACiAgICAgICAgICAgICBiejJmLndyaXRlKGIiYWJjIikKIAogICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInIiKSBhcyBiejJmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnoyZi53cml0ZSwgYiJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnoyZi53cml0ZSwgYiJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQogCiAgICAgZGVmIHRlc3RBcHBlbmQoc2VsZik6CiAgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGJ6MmY6CkBAIC0zODEsNyArMzc1LDcgQEAKICAgICAgICAgICAgIGJ6MmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLnNlZWthYmxlKQogCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgbW9kZT0idyIpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgInciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ6MmYuc2Vla2FibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQwNyw3ICs0MDEsNyBAQAogICAgICAgICAgICAgYnoyZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYucmVhZGFibGUpCiAKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCBtb2RlPSJ3IikKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCAidyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYnoyZi5yZWFkYWJsZSgpKQogICAgICAgICBmaW5hbGx5OgpAQCAtNDI0LDcgKzQxOCw3IEBACiAgICAgICAgICAgICBiejJmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi53cml0YWJsZSkKIAotICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksIG1vZGU9InciKQorICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksICJ3IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ6MmYud3JpdGFibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQzOCw3ICs0MzIsNyBAQAogICAgICAgICAgICAgZGVsIG8KIAogICAgIGRlZiB0ZXN0T3Blbk5vbmV4aXN0ZW50KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBCWjJGaWxlLCAiL25vbi9leGlzdGVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIEJaMkZpbGUsICIvbm9uL2V4aXN0ZW50IikKIAogICAgIGRlZiB0ZXN0UmVhZGxpbmVzTm9OZXdsaW5lKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMTkxMDQzOiByZWFkbGluZXMoKSBmYWlscyBvbiBhIGZpbGUgY29udGFpbmluZyBubyBuZXdsaW5lLgpAQCAtNDc4LDcgKzQ3Miw3IEBACiAgICAgICAgICMgSXNzdWUgIzcyMDU6IFVzaW5nIGEgQloyRmlsZSBmcm9tIHNldmVyYWwgdGhyZWFkcyBzaG91bGRuJ3QgZGVhZGxvY2suCiAgICAgICAgIGRhdGEgPSBiIjEiICogMioqMjAKICAgICAgICAgbnRocmVhZHMgPSAxMAotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgZGVmIGNvbXAoKToKICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQpAQCAtNDg5LDI4ICs0ODMsMjcgQEAKICAgICAgICAgICAgICAgICB0LmpvaW4oKQogCiAgICAgZGVmIHRlc3RXaXRob3V0VGhyZWFkaW5nKHNlbGYpOgotICAgICAgICBiejIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoImJ6MiIsIGJsb2NrZWQ9KCJ0aHJlYWRpbmciLCkpCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgbW9kdWxlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCJiejIiLCBibG9ja2VkPSgidGhyZWFkaW5nIiwpKQorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiYWJjIikKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiYyIpCiAKICAgICBkZWYgdGVzdE1peGVkSXRlcmF0aW9uQW5kUmVhZHMoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICBsaW5lbGVuID0gbGVuKHNlbGYuVEVYVF9MSU5FU1swXSkKICAgICAgICAgaGFsZmxlbiA9IGxpbmVsZW4gLy8gMgotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkKGhhbGZsZW4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1swXVtoYWxmbGVuOl0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbbGluZWxlbjpdKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkbGluZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1sxXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZSgpLCBzZWxmLlRFWFRfTElORVNbMl0pCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CiAgICAgICAgICAgICBiejJmLnJlYWRsaW5lcygpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgotICAgICAgICAgICAgICAgIG5leHQoYnoyZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGJ6MmYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmVzKCksIFtdKQogCiAgICAgZGVmIHRlc3RNdWx0aVN0cmVhbU9yZGVyaW5nKHNlbGYpOgpAQCAtNTc4LDYgKzU3MSwyMCBAQAogICAgICAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFs1MDAtMTUwOl0pCiAKKyAgICBkZWYgdGVzdF9yZWFkX3RydW5jYXRlZChzZWxmKToKKyAgICAgICAgIyBEcm9wIHRoZSBlb3NfbWFnaWMgZmllbGQgKDYgYnl0ZXMpIGFuZCBDUkMgKDQgYnl0ZXMpLgorICAgICAgICB0cnVuY2F0ZWQgPSBzZWxmLkRBVEFbOi0xMF0KKyAgICAgICAgd2l0aCBCWjJGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oc2VsZi5URVhUKSksIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSA0LWJ5dGUgZmlsZSBoZWFkZXIsIGFuZCBibG9jayBoZWFkZXIgb2YgYXQgbGVhc3QgMTQ2IGJpdHMuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIyKToKKyAgICAgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKKwogY2xhc3MgQloyQ29tcHJlc3NvclRlc3QoQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0Q29tcHJlc3Moc2VsZik6CiAgICAgICAgIGJ6MmMgPSBCWjJDb21wcmVzc29yKCkKQEAgLTcxMyw5NyArNzIwLDEyMiBAQAogCiAKIGNsYXNzIE9wZW5UZXN0KEJhc2VUZXN0KToKKyAgICAiVGVzdCB0aGUgb3BlbiBmdW5jdGlvbi4iCisKKyAgICBkZWYgb3BlbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gYnoyLm9wZW4oKmFyZ3MsICoqa3dhcmdzKQorCiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3YiIsICJ4YiIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieGIiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQogCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgidyIsICJ4Iik6CisgICAgICAgICAgICBpZiBtb2RlID09ICJ4IjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCiAKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQogICAgICAgICB0ZXh0X25hdGl2ZV9lb2wgPSB0ZXh0LnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgImF0IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3dCIsICJ4dCIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieHQiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYXQiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCAqIDIpCisKKyAgICBkZWYgdGVzdF94X21vZGUoc2VsZik6CisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIsICJ4dCIpOgorICAgICAgICAgICAgdW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9maWxlb2JqKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInIiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyYiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJydCIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJ0IikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9iYWRfcGFyYW1zKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW52YWxpZCBwYXJhbWV0ZXIgY29tYmluYXRpb25zLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgIndidCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgbmV3bGluZT0iXG4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ3YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3Blbiwgc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIG5ld2xpbmU9IlxuIikKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3Qgbm9uLWRlZmF1bHQgZW5jb2RpbmcuCiAgICAgICAgIHRleHQgPSBzZWxmLlRFWFQuZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgIHRleHRfbmF0aXZlX2VvbCA9IHRleHQucmVwbGFjZSgiXG4iLCBvcy5saW5lc2VwKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJ1dGYtMTYtbGUiKQorICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoInV0Zi0xNi1sZSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcl9oYW5kbGVyKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2l0aCBub24tZGVmYXVsdCBlbmNvZGluZyBlcnJvciBoYW5kbGVyLgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiZm9vXHhmZmJhciIpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiKSBcCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikgXAogICAgICAgICAgICAgICAgIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiZm9vYmFyIikKIAogICAgIGRlZiB0ZXN0X25ld2xpbmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB3aXRoIGV4cGxpY2l0IG5ld2xpbmUgKHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgZGlzYWJsZWQpLgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIG5ld2xpbmU9IlxuIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IiwgbmV3bGluZT0iXG4iKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgbmV3bGluZT0iXHIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdGV4dF0pCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYXBpLnB5IGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CmluZGV4IGYxZWE1YTkuLjk5YjVmOGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhcGkucHkKQEAgLTksNiArOSw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGV4dHdyYXAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogdHJ5OgogICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCkBAIC00NCw3ICs0NSw3IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogICAgIGRlZiB0ZXN0X25vX0ZhdGFsRXJyb3JfaW5maW5pdGVfbG9vcChzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6CisgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBfdGVzdGNhcGk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfdGVzdGNhcGkuY3Jhc2hfbm9fY3VycmVudF90aHJlYWQoKSddLApAQCAtMTkzLDYgKzE5NCw5IEBACiAgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3N1Ym1pdChsLCBuKQogICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc193YWl0KGwsIG4pCiAKKworY2xhc3MgU3ViaW50ZXJwcmV0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKwogICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6CiAgICAgICAgIGltcG9ydCBidWlsdGlucwogICAgICAgICByLCB3ID0gb3MucGlwZSgpCkBAIC0yMDgsNDIgKzIxMiw4OSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwaWNrbGUubG9hZChmKSwgaWQoc3lzLm1vZHVsZXMpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwaWNrbGUubG9hZChmKSwgaWQoYnVpbHRpbnMpKQogCisKICMgQnVnICM2MDEyCiBjbGFzcyBUZXN0NjAxMih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmFyZ3BhcnNpbmcoIkhlbGxvIiwgIldvcmxkIiksIDEpCiAKIAotY2xhc3MgRW1iZWRkaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitAdW5pdHRlc3Quc2tpcElmKAorICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKKyAgICAiaW50ZXJwcmV0ZXIgZW1iZWRkaW5nIHRlc3RzIGFyZW4ndCBidWlsdCB1bmRlciBXaW5kb3dzIikKK2NsYXNzIEVtYmVkZGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFhYWCBvbmx5IHRlc3RlZCB1bmRlciBVbml4IGNoZWNrb3V0cwogCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAidGVzdCBkb2Vzbid0IHdvcmsgdW5kZXIgV2luZG93cyIpCi0gICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKLSAgICAgICAgIyBYWFggb25seSB0ZXN0ZWQgdW5kZXIgVW5peCBjaGVja291dHMKKyAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGJhc2VwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSkKLSAgICAgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgc2VsZi50ZXN0X2V4ZSA9IGV4ZSA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgIk1vZHVsZXMiLCAiX3Rlc3RlbWJlZCIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhleGUpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgZG9lc24ndCBleGlzdCIgJSBleGUpCiAgICAgICAgICMgVGhpcyBpcyBuZWVkZWQgb3RoZXJ3aXNlIHdlIGdldCBhIGZhdGFsIGVycm9yOgogICAgICAgICAjICJQeV9Jbml0aWFsaXplOiBVbmFibGUgdG8gZ2V0IHRoZSBsb2NhbGUgZW5jb2RpbmcKICAgICAgICAgIyBMb29rdXBFcnJvcjogbm8gY29kZWMgc2VhcmNoIGZ1bmN0aW9ucyByZWdpc3RlcmVkOiBjYW4ndCBmaW5kIGVuY29kaW5nIgorICAgICAgICBzZWxmLm9sZGN3ZCA9IG9zLmdldGN3ZCgpCiAgICAgICAgIG9zLmNoZGlyKGJhc2VwYXRoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGUgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJNb2R1bGVzIiwgIl90ZXN0ZW1iZWQiKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4ZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgZG9lc24ndCBleGlzdCIgJSBleGUpCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbZXhlXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmV0dXJuY29kZSAlZCwgc3RkZXJyIGlzICVyIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwLnJldHVybmNvZGUsIGVycikpCi0gICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgICAgIHByaW50KG91dC5kZWNvZGUoJ2xhdGluMScpKQotICAgICAgICAgICAgICAgIHByaW50KGVyci5kZWNvZGUoJ2xhdGluMScpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkY3dkKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy5jaGRpcihzZWxmLm9sZGN3ZCkKKworICAgIGRlZiBydW5fZW1iZWRkZWRfaW50ZXJwcmV0ZXIoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJSdW5zIGEgdGVzdCBpbiB0aGUgZW1iZWRkZWQgaW50ZXJwcmV0ZXIiIiIKKyAgICAgICAgY21kID0gW3NlbGYudGVzdF9leGVdCisgICAgICAgIGNtZC5leHRlbmQoYXJncykKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAob3V0LCBlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmV0dXJuY29kZSAlZCwgc3RkZXJyIGlzICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHAucmV0dXJuY29kZSwgZXJyKSkKKyAgICAgICAgcmV0dXJuIG91dC5kZWNvZGUoImxhdGluMSIpLCBlcnIuZGVjb2RlKCJsYXRpbjEiKQorCisgICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGp1c3QgYSAiZG9uJ3QgY3Jhc2giIHRlc3QKKyAgICAgICAgb3V0LCBlcnIgPSBzZWxmLnJ1bl9lbWJlZGRlZF9pbnRlcnByZXRlcigpCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgICAgIHByaW50KGVycikKKworICAgIGRlZiB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBDaGVja3MgZm9yY2VkIGNvbmZpZ3VyYXRpb24gb2YgZW1iZWRkZWQgaW50ZXJwcmV0ZXIgSU8gc3RyZWFtcworICAgICAgICBvdXQsIGVyciA9IHNlbGYucnVuX2VtYmVkZGVkX2ludGVycHJldGVyKCJmb3JjZWRfaW9fZW5jb2RpbmciKQorICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICBwcmludChlcnIpCisgICAgICAgIGV4cGVjdGVkX291dHB1dCA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgIC0tLSBVc2UgZGVmYXVsdHMgLS0tCisgICAgICAgIEV4cGVjdGVkIGVuY29kaW5nOiBkZWZhdWx0CisgICAgICAgIEV4cGVjdGVkIGVycm9yczogZGVmYXVsdAorICAgICAgICBzdGRpbjogezAuX19zdGRpbl9fLmVuY29kaW5nfTpzdHJpY3QKKyAgICAgICAgc3Rkb3V0OiB7MC5fX3N0ZG91dF9fLmVuY29kaW5nfTpzdHJpY3QKKyAgICAgICAgc3RkZXJyOiB7MC5fX3N0ZGVycl9fLmVuY29kaW5nfTpiYWNrc2xhc2hyZXBsYWNlCisgICAgICAgIC0tLSBTZXQgZXJyb3JzIG9ubHkgLS0tCisgICAgICAgIEV4cGVjdGVkIGVuY29kaW5nOiBkZWZhdWx0CisgICAgICAgIEV4cGVjdGVkIGVycm9yczogc3Vycm9nYXRlZXNjYXBlCisgICAgICAgIHN0ZGluOiB7MC5fX3N0ZGluX18uZW5jb2Rpbmd9OnN1cnJvZ2F0ZWVzY2FwZQorICAgICAgICBzdGRvdXQ6IHswLl9fc3Rkb3V0X18uZW5jb2Rpbmd9OnN1cnJvZ2F0ZWVzY2FwZQorICAgICAgICBzdGRlcnI6IHswLl9fc3RkZXJyX18uZW5jb2Rpbmd9OmJhY2tzbGFzaHJlcGxhY2UKKyAgICAgICAgLS0tIFNldCBlbmNvZGluZyBvbmx5IC0tLQorICAgICAgICBFeHBlY3RlZCBlbmNvZGluZzogbGF0aW4tMQorICAgICAgICBFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHQKKyAgICAgICAgc3RkaW46IGxhdGluLTE6c3RyaWN0CisgICAgICAgIHN0ZG91dDogbGF0aW4tMTpzdHJpY3QKKyAgICAgICAgc3RkZXJyOiBsYXRpbi0xOmJhY2tzbGFzaHJlcGxhY2UKKyAgICAgICAgLS0tIFNldCBlbmNvZGluZyBhbmQgZXJyb3JzIC0tLQorICAgICAgICBFeHBlY3RlZCBlbmNvZGluZzogbGF0aW4tMQorICAgICAgICBFeHBlY3RlZCBlcnJvcnM6IHN1cnJvZ2F0ZWVzY2FwZQorICAgICAgICBzdGRpbjogbGF0aW4tMTpzdXJyb2dhdGVlc2NhcGUKKyAgICAgICAgc3Rkb3V0OiBsYXRpbi0xOnN1cnJvZ2F0ZWVzY2FwZQorICAgICAgICBzdGRlcnI6IGxhdGluLTE6YmFja3NsYXNocmVwbGFjZSIiIikuZm9ybWF0KHN5cykKKyAgICAgICAgIyBUaGlzIGlzIHVzZWZ1bCBpZiB3ZSBldmVyIHRyaXAgb3ZlciBvZGQgcGxhdGZvcm0gYmVoYXZpb3VyCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZXhwZWN0ZWRfb3V0cHV0KQogCiBjbGFzcyBTa2lwaXRlbVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zNTQsNyArNDA1LDggQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KENBUElUZXN0LCBUZXN0UGVuZGluZ0NhbGxzLCBUZXN0NjAxMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBFbWJlZGRpbmdUZXN0LCBTa2lwaXRlbVRlc3QsIFRlc3RUaHJlYWRTdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBFbWJlZGRpbmdUZXN0cywgU2tpcGl0ZW1UZXN0LCBUZXN0VGhyZWFkU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgU3ViaW50ZXJwcmV0ZXJUZXN0KQogCiAgICAgZm9yIG5hbWUgaW4gZGlyKF90ZXN0Y2FwaSk6CiAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgndGVzdF8nKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CmluZGV4IGE4OWQ3ZTQuLjMyN2MxNDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQpAQCAtNCw2ICs0LDcgQEAKIAogaW1wb3J0IHRlc3Quc3VwcG9ydCwgdW5pdHRlc3QKIGltcG9ydCBvcworaW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0ZW1wZmlsZQpAQCAtNDEsOCArNDIsMTAgQEAKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHZlcnNpb24gPSAoJ1B5dGhvbiAlZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSkuZW5jb2RlKCJhc2NpaSIpCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1WJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5zdGFydHN3aXRoKHZlcnNpb24pKQorICAgICAgICBmb3Igc3dpdGNoIGluICctVicsICctLXZlcnNpb24nOgorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzd2l0Y2gpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5zdGFydHN3aXRoKHZlcnNpb24pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5zdGFydHN3aXRoKHZlcnNpb24pKQogCiAgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKICAgICAgICAgIyAtdiBjYXVzZXMgaW1wb3J0cyB0byB3cml0ZSB0byBzdGRlcnIuICBJZiB0aGUgd3JpdGUgdG8KQEAgLTU0LDE0ICs1Nyw0OSBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInc3RhY2sgb3ZlcmZsb3cnLCBlcnIpCiAKICAgICBkZWYgdGVzdF94b3B0aW9ucyhzZWxmKToKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLl94b3B0aW9ucyknKQotICAgICAgICBvcHRzID0gZXZhbChvdXQuc3BsaXRsaW5lcygpWzBdKQorICAgICAgICBkZWYgZ2V0X3hvcHRpb25zKCphcmdzKToKKyAgICAgICAgICAgICMgdXNlIHN1YnByb2Nlc3MgbW9kdWxlIGRpcmVjdGx5IGJlY2F1c2UgdGVzdC5zY3JpcHRfaGVscGVyIGFkZHMKKyAgICAgICAgICAgICMgIi1YIGZhdWx0aGFuZGxlciIgdG8gdGhlIGNvbW1hbmQgbGluZQorICAgICAgICAgICAgYXJncyA9IChzeXMuZXhlY3V0YWJsZSwgJy1FJykgKyBhcmdzCisgICAgICAgICAgICBhcmdzICs9ICgnLWMnLCAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLl94b3B0aW9ucyknKQorICAgICAgICAgICAgb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJncykKKyAgICAgICAgICAgIG9wdHMgPSBldmFsKG91dC5zcGxpdGxpbmVzKClbMF0pCisgICAgICAgICAgICByZXR1cm4gb3B0cworCisgICAgICAgIG9wdHMgPSBnZXRfeG9wdGlvbnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIHt9KQotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKAotICAgICAgICAgICAgJy1YYScsICctWGI9YyxkPWUnLCAnLWMnLCAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLl94b3B0aW9ucyknKQotICAgICAgICBvcHRzID0gZXZhbChvdXQuc3BsaXRsaW5lcygpWzBdKQorCisgICAgICAgIG9wdHMgPSBnZXRfeG9wdGlvbnMoJy1YYScsICctWGI9YyxkPWUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIHsnYSc6IFRydWUsICdiJzogJ2MsZD1lJ30pCiAKKyAgICBkZWYgdGVzdF9zaG93cmVmY291bnQoc2VsZik6CisgICAgICAgIGRlZiBydW5fcHl0aG9uKCphcmdzKToKKyAgICAgICAgICAgICMgdGhpcyBpcyBzaW1pbGFyIHRvIGFzc2VydF9weXRob25fb2sgYnV0IGRvZXNuJ3Qgc3RyaXAKKyAgICAgICAgICAgICMgdGhlIHJlZmNvdW50IGZyb20gc3RkZXJyLiAgSXQgY2FuIGJlIHJlcGxhY2VkIG9uY2UKKyAgICAgICAgICAgICMgYXNzZXJ0X3B5dGhvbl9vayBzdG9wcyBkb2luZyB0aGF0LgorICAgICAgICAgICAgY21kID0gW3N5cy5leGVjdXRhYmxlXQorICAgICAgICAgICAgY21kLmV4dGVuZChhcmdzKQorICAgICAgICAgICAgUElQRSA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUpCisgICAgICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQorICAgICAgICAgICAgcmMgPSBwLnJldHVybmNvZGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgICAgICByZXR1cm4gcmMsIG91dCwgZXJyCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLl94b3B0aW9ucyknCisgICAgICAgICMgbm9ybWFsbHkgdGhlIHJlZmNvdW50IGlzIGhpZGRlbgorICAgICAgICByYywgb3V0LCBlcnIgPSBydW5fcHl0aG9uKCctYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnJzdHJpcCgpLCBiJ3t9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKyAgICAgICAgIyAiLVggc2hvd3JlZmNvdW50IiBzaG93cyB0aGUgcmVmY291bnQsIGJ1dCBvbmx5IGluIGRlYnVnIGJ1aWxkcworICAgICAgICByYywgb3V0LCBlcnIgPSBydW5fcHl0aG9uKCctWCcsICdzaG93cmVmY291bnQnLCAnLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5yc3RyaXAoKSwgYiJ7J3Nob3dyZWZjb3VudCc6IFRydWV9IikKKyAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6ICAjIGRlYnVnIGJ1aWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgYnInXlxbXGQrIHJlZnMsIFxkKyBibG9ja3NcXScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCiAgICAgZGVmIHRlc3RfcnVuX21vZHVsZShzZWxmKToKICAgICAgICAgIyBUZXN0IGV4cGVjdGVkIG9wZXJhdGlvbiBvZiB0aGUgJy1tJyBzd2l0Y2gKICAgICAgICAgIyBTd2l0Y2ggbmVlZHMgYW4gYXJndW1lbnQKQEAgLTcwLDkgKzEwOCw5IEBACiAgICAgICAgIGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAnZm5vcmQ0MzUyMHh5eicpCiAgICAgICAgICMgQ2hlY2sgdGhlIHJ1bnB5IG1vZHVsZSBhbHNvIGdpdmVzIGFuIGVycm9yIGZvcgogICAgICAgICAjIGEgbm9uZXhpc3RlbnQgbW9kdWxlCi0gICAgICAgIGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAncnVucHknLCAnZm5vcmQ0MzUyMHh5eicpLAorICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3J1bnB5JywgJ2Zub3JkNDM1MjB4eXonKQogICAgICAgICAjIEFsbCBnb29kIGlmIG1vZHVsZSBpcyBsb2NhdGVkIGFuZCBydW4gc3VjY2Vzc2Z1bGx5Ci0gICAgICAgIGFzc2VydF9weXRob25fb2soJy1tJywgJ3RpbWVpdCcsICctbicsICcxJyksCisgICAgICAgIGFzc2VydF9weXRob25fb2soJy1tJywgJ3RpbWVpdCcsICctbicsICcxJykKIAogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGVfYnVnMTc2NDQwNyhzZWxmKToKICAgICAgICAgIyAtbSBhbmQgLWkgbmVlZCB0byBwbGF5IHdlbGwgdG9nZXRoZXIKQEAgLTIxMyw2ICsyNTEsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXRoMS5lbmNvZGUoJ2FzY2lpJyksIG91dCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXRoMi5lbmNvZGUoJ2FzY2lpJyksIG91dCkKIAorICAgIGRlZiB0ZXN0X2VtcHR5X1BZVEhPTlBBVEhfaXNzdWUxNjMwOShzZWxmKToKKyAgICAgICAgIyBPbiBQb3NpeCwgaXQgaXMgZG9jdW1lbnRlZCB0aGF0IHNldHRpbmcgUEFUSCB0byB0aGUKKyAgICAgICAgIyBlbXB0eSBzdHJpbmcgaXMgZXF1aXZhbGVudCB0byBub3Qgc2V0dGluZyBQQVRIIGF0IGFsbCwKKyAgICAgICAgIyB3aGljaCBpcyBhbiBleGNlcHRpb24gdG8gdGhlIHJ1bGUgdGhhdCBpbiBhIHN0cmluZyBsaWtlCisgICAgICAgICMgIi9iaW46Oi91c3IvYmluIiB0aGUgZW1wdHkgc3RyaW5nIGluIHRoZSBtaWRkbGUgZ2V0cworICAgICAgICAjIGludGVycHJldGVkIGFzICcuJworICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIHBhdGggPSAiOiIuam9pbihzeXMucGF0aCkKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLmVuY29kZSgiYXNjaWkiLCAiYmFja3NsYXNocmVwbGFjZSIpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShwYXRoKSIiIgorICAgICAgICByYzEsIG91dDEsIGVycjEgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIFBZVEhPTlBBVEg9IiIpCisgICAgICAgIHJjMiwgb3V0MiwgZXJyMiA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwgX19pc29sYXRlZD1GYWxzZSkKKyAgICAgICAgIyByZWdhcmRpbmcgdG8gUG9zaXggc3BlY2lmaWNhdGlvbiwgb3V0cHV0cyBzaG91bGQgYmUgZXF1YWwKKyAgICAgICAgIyBmb3IgZW1wdHkgYW5kIHVuc2V0IFBZVEhPTlBBVEgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQxLCBvdXQyKQorCiAgICAgZGVmIHRlc3RfZGlzcGxheWhvb2tfdW5lbmNvZGFibGUoc2VsZik6CiAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoJ2FzY2lpJywgJ2xhdGluLTEnLCAndXRmLTgnKToKICAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCkBAIC0yOTAsNyArMzQ1LDcgQEAKICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgb3V0KQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyci5kZWNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdFeGNlcHRpb24gT1NFcnJvcjogLiogaWdub3JlZCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4Y2VwdGlvbiBpZ25vcmVkIGluLipcbk9TRXJyb3I6IC4qJykKIAogICAgIGRlZiB0ZXN0X2Nsb3NlZF9zdGRvdXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzEzNDQ0OiBpZiBzdGRvdXQgaGFzIGJlZW4gZXhwbGljaXRseSBjbG9zZWQsIHdlIHNob3VsZApAQCAtMzg1LDYgKzQ0MCwzMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgb3V0KQogCiAKKyAgICBkZWYgdGVzdF9pc29sYXRlZG1vZGUoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1JJykKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLUlFcycpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1JJywgJy1jJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgZmxhZ3MgYXMgZjsgJworICAgICAgICAgICAgJ3ByaW50KGYubm9fdXNlcl9zaXRlLCBmLmlnbm9yZV9lbnZpcm9ubWVudCwgZi5pc29sYXRlZCknLAorICAgICAgICAgICAgIyBkdW1teXZhciB0byBwcmV2ZW50IGV4dHJhbm91cyAtRQorICAgICAgICAgICAgZHVtbXl2YXI9IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGInMSAxIDEnKQorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2N3ZCgpIGFzIHRtcGRpcjoKKyAgICAgICAgICAgIGZha2UgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAidXVpZC5weSIpCisgICAgICAgICAgICBtYWluID0gb3MucGF0aC5qb2luKHRtcGRpciwgIm1haW4ucHkiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZha2UsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJyYWlzZSBSdW50aW1lRXJyb3IoJ2lzb2xhdGVkIG1vZGUgdGVzdCcpXG4iKQorICAgICAgICAgICAgd2l0aCBvcGVuKG1haW4sICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJpbXBvcnQgdXVpZFxuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJwcmludCgnb2snKVxuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsIG1haW5dLCBjd2Q9dG1wZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCkKKyAgICAgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFtzeXMuZXhlY3V0YWJsZSwgIi1JIiwgbWFpbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9dG1wZGlyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgYiJvayIpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KENtZExpbmVUZXN0KQogICAgIHRlc3Quc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5IGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKaW5kZXggYjQyNjliOS4uZjgwNGQ4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICBpZiBub3QgX19kZWJ1Z19fOgogICAgICAgICAgICAgY21kX2xpbmVfc3dpdGNoZXMgKz0gKCctJyArICdPJyAqIHN5cy5mbGFncy5vcHRpbWl6ZSwpCiAgICAgICAgIHJ1bl9hcmdzID0gY21kX2xpbmVfc3dpdGNoZXMgKyAoc2NyaXB0X25hbWUsKSArIHR1cGxlKGV4YW1wbGVfYXJncykKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygqcnVuX2FyZ3MpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKnJ1bl9hcmdzLCBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQgKyBlcnIsIGV4cGVjdGVkX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgZXhwZWN0ZWRfcGF0aDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9wYWNrYWdlLCBleHBlY3RlZF9sb2FkZXIpCkBAIC0yOTQsNyArMjk0LDcgQEAKICAgICAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCiAgICAgICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpciwgImltcG9ydCBzeXM7IHByaW50KCdpbml0X2FyZ3YwPT0lcicgJSBzeXMuYXJndlswXSkiKQogICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ3NjcmlwdCcpCi0gICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGVzdF9wa2cuc2NyaXB0JywgKmV4YW1wbGVfYXJncykKKyAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0ZXN0X3BrZy5zY3JpcHQnLCAqZXhhbXBsZV9hcmdzLCBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgogICAgICAgICAgICAgICAgICAgICBwcmludChvdXQpCiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAiaW5pdF9hcmd2MD09JXIiICUgJy1tJwpAQCAtMzExLDcgKzMxMSw4IEBACiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCItYyIsICJ3IikgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCiAgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBwcmludCgic3lzLnBhdGhbMF09PSVyIiAlIHN5cy5wYXRoWzBdKScpCisgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoInN5cy5wYXRoWzBdPT0lciIgJSBzeXMucGF0aFswXSknLAorICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludChvdXQpCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gInN5cy5wYXRoWzBdPT0lciIgJSAnJwpAQCAtMzI1LDcgKzMyNiw4IEBACiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChwYXRoPXNjcmlwdF9kaXIpOgogICAgICAgICAgICAgICAgIHdpdGggb3BlbigiLW0iLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoImRhdGEiKQotICAgICAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdvdGhlcicsICpleGFtcGxlX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ290aGVyJywgKmV4YW1wbGVfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgJycsICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weQppbmRleCBhZGVmMTcwLi41ZmQyMWRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkKQEAgLTY0LDYgKzY0LDIwIEBACiAgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShob29rLmNhbGxlZCkKIAorICAgIGRlZiB0ZXN0X2Jhbm5lcihzZWxmKToKKyAgICAgICAgIyB3aXRoIGJhbm5lcgorICAgICAgICBzZWxmLmluZnVuYy5zaWRlX2VmZmVjdCA9IEVPRkVycm9yKCdGaW5pc2hlZCcpCisgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdChiYW5uZXI9J0ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxscyksIDIpCisgICAgICAgIGJhbm5lcl9jYWxsID0gc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFubmVyX2NhbGwsIFsnd3JpdGUnLCAoJ0Zvb1xuJywpLCB7fV0pCisKKyAgICAgICAgIyBubyBiYW5uZXIKKyAgICAgICAgc2VsZi5zdGRlcnIucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYuaW5mdW5jLnNpZGVfZWZmZWN0ID0gRU9GRXJyb3IoJ0ZpbmlzaGVkJykKKyAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KGJhbm5lcj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzKSwgMSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEludGVyYWN0aXZlQ29uc29sZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CmluZGV4IGZkODg1MDUuLjg0ODA0YmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQpAQCAtODc1LDggKzg3NSw2IEBACiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICBkYXRhLmRlY29kZShlbmNvZGluZywgInRlc3QucmVwbGFjaW5nIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29kZWNDYWxsYmFja1Rlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKaW5kZXggMzUxNzA1Ny4uNWNlZjRkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKQEAgLTg0MCw5ICs4NDAsMTAgQEAKICAgICAgICAgICAgIChiJ2ErLy8vLywrSUt3LWInLCAnYVx1ZmZmZlx1ZmZmZFx1MjBhY2InKSwKICAgICAgICAgXQogICAgICAgICBmb3IgcmF3LCBleHBlY3RlZCBpbiB0ZXN0czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl83X2RlY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi03JywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChyYXc9cmF3KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy51dGZfN19kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZGVjb2RlKCd1dGYtNycsICdyZXBsYWNlJyksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcVTAwMDEwNEEwJy5lbmNvZGUoc2VsZi5lbmNvZGluZyksIGInKzJBSGNvQS0nKQpAQCAtMjMxNCw2ICsyMzE1LDI0IEBACiAgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKIAorICAgIGRlZiB0ZXN0X2J1ZmZlcl9hcGlfdXNhZ2Uoc2VsZik6CisgICAgICAgICMgV2UgY2hlY2sgYWxsIHRoZSB0cmFuc2Zvcm0gY29kZWNzIGFjY2VwdCBtZW1vcnl2aWV3IGlucHV0CisgICAgICAgICMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZworICAgICAgICAjIGFuZCBhbHNvIHRoYXQgdGhleSByb3VuZHRyaXAgY29ycmVjdGx5CisgICAgICAgIG9yaWdpbmFsID0gYiIxMjM0NVx4ODAiCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgorICAgICAgICAgICAgZGF0YSA9IG9yaWdpbmFsCisgICAgICAgICAgICB2aWV3ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICAgICAgZGF0YSA9IGNvZGVjcy5lbmNvZGUoZGF0YSwgZW5jb2RpbmcpCisgICAgICAgICAgICB2aWV3X2VuY29kZWQgPSBjb2RlY3MuZW5jb2RlKHZpZXcsIGVuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aWV3X2VuY29kZWQsIGRhdGEpCisgICAgICAgICAgICB2aWV3ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICAgICAgZGF0YSA9IGNvZGVjcy5kZWNvZGUoZGF0YSwgZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIG9yaWdpbmFsKQorICAgICAgICAgICAgdmlld19kZWNvZGVkID0gY29kZWNzLmRlY29kZSh2aWV3LCBlbmNvZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlld19kZWNvZGVkLCBkYXRhKQorCisKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICd3aW4zMicsCiAgICAgICAgICAgICAgICAgICAgICAnY29kZSBwYWdlcyBhcmUgc3BlY2lmaWMgdG8gV2luZG93cycpCkBAIC0yMzI0LDggKzIzNDMsOCBAQAogICAgIGRlZiB0ZXN0X2ludmFsaWRfY29kZV9wYWdlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb2RlY3MuY29kZV9wYWdlX2VuY29kZSwgLTEsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIC0xLCBiJ2EnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZW5jb2RlLCAxMjMsICdhJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgMTIzLCBiJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2VuY29kZSwgMTIzLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCAxMjMsIGInYScpCiAKICAgICBkZWYgdGVzdF9jb2RlX3BhZ2VfbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChVbmljb2RlRW5jb2RlRXJyb3IsICdjcDkzMicsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODljN2E4Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmssIHVubG9hZAotaW1wb3J0IGltcG9ydGxpYiwgb3MsIHN5cwotCi1jbGFzcyBDb2RpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgotICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nJwotICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQotCi0gICAgZGVmIHRlc3RfYmFkX2NvZGluZzIoc2VsZik6Ci0gICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcyJwotICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQotCi0gICAgZGVmIHZlcmlmeV9iYWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIF9faW1wb3J0X18sICd0ZXN0LicgKyBtb2R1bGVfbmFtZSkKLQotICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQotICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgotICAgICAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGJ5dGVzLCBmaWxlbmFtZSwgJ2V4ZWMnKQotCi0gICAgZGVmIHRlc3RfZXhlY192YWxpZF9jb2Rpbmcoc2VsZik6Ci0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGInIyBjb2Rpbmc6IGNwOTQ5XG5hID0gIlx4YWFceGE3IlxuJywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sICdcdTMwNDcnKQotCi0gICAgZGVmIHRlc3RfZmlsZV9wYXJzZShzZWxmKToKLSAgICAgICAgIyBpc3N1ZTExMzQ6IGFsbCBlbmNvZGluZ3Mgb3V0c2lkZSBsYXRpbi0xIGFuZCB1dGYtOCBmYWlsIG9uCi0gICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MgYW5kIGxvbmcgbGluZXMgKD41MTIgY29sdW1ucykKLSAgICAgICAgdW5sb2FkKFRFU1RGTikKLSAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAiLnB5IgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz0iY3AxMjUyIikKLSAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBmOgotICAgICAgICAgICAgICAgIGYud3JpdGUoIiMgLSotIGNvZGluZzogY3AxMjUyIC0qLVxuIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKCInJydBIHNob3J0IHN0cmluZ1xuIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKCInJydcbiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgiJ0EgdmVyeSBsb25nIHN0cmluZyAlcydcbiIgJSAoIlgiICogMTAwMCkpCi0KLSAgICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCi0gICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQotICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lKQotICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgImMiKQotICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgIm8iKQotICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKLQotICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgotICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQotICAgICAgICBpbnB1dCA9ICIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcikgYXMgYzoKLSAgICAgICAgICAgIGNvbXBpbGUoaW5wdXQsICI8c3RyaW5nPiIsICJleGVjIikKLSAgICAgICAgZXhwZWN0ZWQgPSAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGUyIGluIHBvc2l0aW9uIDE2OiAiIFwKLSAgICAgICAgICAgICAgICAgICAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuZXhjZXB0aW9uLmFyZ3NbMF0uc3RhcnRzd2l0aChleHBlY3RlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtc2c9Yy5leGNlcHRpb24uYXJnc1swXSkKLQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKaW5kZXggZmY1Mjc1NS4uNTZlODEyMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CkBAIC0xMTIsNiArMTEyLDM4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChkKSwgZGljdChhPTEsIGI9MiwgYz0zMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChkLml0ZW1zKCkpLCBkaWN0KGE9MSwgYj0yLCBjPTMwKSkKIAorICAgIGRlZiB0ZXN0X25ld19jaGlsZChzZWxmKToKKyAgICAgICAgJ1Rlc3RzIGZvciBjaGFuZ2VzIGZvciBpc3N1ZSAjMTY2MTMuJworICAgICAgICBjID0gQ2hhaW5NYXAoKQorICAgICAgICBjWydhJ10gPSAxCisgICAgICAgIGNbJ2InXSA9IDIKKyAgICAgICAgbSA9IHsnYic6MjAsICdjJzogMzB9CisgICAgICAgIGQgPSBjLm5ld19jaGlsZChtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubWFwcywgW3snYic6MjAsICdjJzozMH0sIHsnYSc6MSwgJ2InOjJ9XSkgICMgY2hlY2sgaW50ZXJuYWwgc3RhdGUKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtLCBkLm1hcHNbMF0pCisKKyAgICAgICAgIyBVc2UgYSBkaWZmZXJlbnQgbWFwIHRoYW4gYSBkaWN0CisgICAgICAgIGNsYXNzIGxvd2VyZGljdChkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQorICAgICAgICAgICAgICAgIHJldHVybiBkaWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKyAgICAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5fX2NvbnRhaW5zX18oc2VsZiwga2V5KQorCisgICAgICAgIGMgPSBDaGFpbk1hcCgpCisgICAgICAgIGNbJ2EnXSA9IDEKKyAgICAgICAgY1snYiddID0gMgorICAgICAgICBtID0gbG93ZXJkaWN0KGI9MjAsIGM9MzApCisgICAgICAgIGQgPSBjLm5ld19jaGlsZChtKQorICAgICAgICBzZWxmLmFzc2VydElzKG0sIGQubWFwc1swXSkKKyAgICAgICAgZm9yIGtleSBpbiAnYWJjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGNvbnRhaW5zCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgZCkKKyAgICAgICAgZm9yIGssIHYgaW4gZGljdChhPTEsIEI9MjAsIEM9MzAsIHo9MTAwKS5pdGVtcygpOiAgICAgICAgICAgICAjIGNoZWNrIGdldAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChrLCAxMDApLCB2KQorCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgTmFtZWQgVHVwbGVzCkBAIC03NTAsNiArNzgyLDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNhbXBsZSwgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmFuZ2UoMTApLCBTZXF1ZW5jZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MocmFuZ2UsIFNlcXVlbmNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1lbW9yeXZpZXcoYiIiKSwgU2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKG1lbW9yeXZpZXcsIFNlcXVlbmNlKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3RyLCBTZXF1ZW5jZSkpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhTZXF1ZW5jZSwgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsICdfX2xlbl9fJywKICAgICAgICAgICAgICdfX2dldGl0ZW1fXycpCkBAIC05MDQsMjMgKzkzOCwyNiBAQAogICAgICAgICB3b3JkcyA9IENvdW50ZXIoJ3doaWNoIHdpdGNoIGhhZCB3aGljaCB3aXRjaGVzIHdyaXN0IHdhdGNoJy5zcGxpdCgpKQogICAgICAgICB1cGRhdGVfdGVzdCA9IENvdW50ZXIoKQogICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUod29yZHMpCi0gICAgICAgIGZvciBpLCBkdXAgaW4gZW51bWVyYXRlKFsKLSAgICAgICAgICAgICAgICAgICAgd29yZHMuY29weSgpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmNvcHkod29yZHMpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KHdvcmRzKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMCkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDIpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgLTEpKSwKLSAgICAgICAgICAgICAgICAgICAgZXZhbChyZXByKHdvcmRzKSksCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV90ZXN0LAotICAgICAgICAgICAgICAgICAgICBDb3VudGVyKHdvcmRzKSwKLSAgICAgICAgICAgICAgICAgICAgXSk6Ci0gICAgICAgICAgICBtc2cgPSAoaSwgZHVwLCB3b3JkcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdXAgaXMgbm90IHdvcmRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIHdvcmRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwKSwgbGVuKHdvcmRzKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkdXApLCB0eXBlKHdvcmRzKSkKKyAgICAgICAgZm9yIGxhYmVsLCBkdXAgaW4gWworICAgICAgICAgICAgICAgICAgICAoJ3dvcmRzLmNvcHkoKScsIHdvcmRzLmNvcHkoKSksCisgICAgICAgICAgICAgICAgICAgICgnY29weS5jb3B5KHdvcmRzKScsIGNvcHkuY29weSh3b3JkcykpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvcHkuZGVlcGNvcHkod29yZHMpJywgY29weS5kZWVwY29weSh3b3JkcykpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDApKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAwKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDEpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDIpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgLTEpKSksCisgICAgICAgICAgICAgICAgICAgICgnZXZhbChyZXByKHdvcmRzKSknLCBldmFsKHJlcHIod29yZHMpKSksCisgICAgICAgICAgICAgICAgICAgICgndXBkYXRlX3Rlc3QnLCB1cGRhdGVfdGVzdCksCisgICAgICAgICAgICAgICAgICAgICgnQ291bnRlcih3b3JkcyknLCBDb3VudGVyKHdvcmRzKSksCisgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChsYWJlbD1sYWJlbCk6CisgICAgICAgICAgICAgICAgbXNnID0gIlxuY29weTogJXNcbndvcmRzOiAlcyIgJSAoZHVwLCB3b3JkcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgd29yZHMsIG1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgd29yZHMpCiAKICAgICBkZWYgdGVzdF9jb3B5X3N1YmNsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBNeUNvdW50ZXIoQ291bnRlcik6CkBAIC0xMDQzLDggKzEwODAsMTAgQEAKICAgICAgICAgIyB0ZXN0IGZpZGVsaXR5IHRvIHRoZSBwdXJlIHB5dGhvbiB2ZXJzaW9uCiAgICAgICAgIGMgPSBDb3VudGVyU3ViY2xhc3NXaXRoU2V0SXRlbSgnYWJyYWNhZGFicmEnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChjKSwgeydhJzogNSwgJ2InOiAyLCAnYyc6IDEsICdkJzogMSwgJ3InOjIgfSkKICAgICAgICAgYyA9IENvdW50ZXJTdWJjbGFzc1dpdGhHZXQoJ2FicmFjYWRhYnJhJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoYyksIHsnYSc6IDUsICdiJzogMiwgJ2MnOiAxLCAnZCc6IDEsICdyJzoyIH0pCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTEyMDUsMjQgKzEyNDQsMjggQEAKICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKICAgICAgICAgdXBkYXRlX3Rlc3QgPSBPcmRlcmVkRGljdCgpCiAgICAgICAgIHVwZGF0ZV90ZXN0LnVwZGF0ZShvZCkKLSAgICAgICAgZm9yIGksIGR1cCBpbiBlbnVtZXJhdGUoWwotICAgICAgICAgICAgICAgICAgICBvZC5jb3B5KCksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuY29weShvZCksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuZGVlcGNvcHkob2QpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAwKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDEpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAzKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIC0xKSksCi0gICAgICAgICAgICAgICAgICAgIGV2YWwocmVwcihvZCkpLAotICAgICAgICAgICAgICAgICAgICB1cGRhdGVfdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgT3JkZXJlZERpY3Qob2QpLAotICAgICAgICAgICAgICAgICAgICBdKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdXAgaXMgbm90IG9kKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIG9kKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGR1cC5pdGVtcygpKSwgbGlzdChvZC5pdGVtcygpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbihvZCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZHVwKSwgdHlwZShvZCkpCisgICAgICAgIGZvciBsYWJlbCwgZHVwIGluIFsKKyAgICAgICAgICAgICAgICAgICAgKCdvZC5jb3B5KCknLCBvZC5jb3B5KCkpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvcHkuY29weShvZCknLCBjb3B5LmNvcHkob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb3B5LmRlZXBjb3B5KG9kKScsIGNvcHkuZGVlcGNvcHkob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAwKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMCkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAxKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAyKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAzKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMykpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIC0xKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ2V2YWwocmVwcihvZCkpJywgZXZhbChyZXByKG9kKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3VwZGF0ZV90ZXN0JywgdXBkYXRlX3Rlc3QpLAorICAgICAgICAgICAgICAgICAgICAoJ09yZGVyZWREaWN0KG9kKScsIE9yZGVyZWREaWN0KG9kKSksCisgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChsYWJlbD1sYWJlbCk6CisgICAgICAgICAgICAgICAgbXNnID0gIlxuY29weTogJXNcbm9kOiAlcyIgJSAoZHVwLCBvZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgb2QsIG1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgb2QpCiAKICAgICBkZWYgdGVzdF95YW1sX2xpbmthZ2Uoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgX19yZWR1Y2VfXyBpcyBzZXR1cCBpbiBhIHdheSB0aGF0IHN1cHBvcnRzIFB5WUFNTCdzIGR1bXAoKSBmZWF0dXJlLgpAQCAtMTIzNyw5ICsxMjgwLDE4IEBACiAgICAgICAgICMgZG8gbm90IHNhdmUgaW5zdGFuY2UgZGljdGlvbmFyeSBpZiBub3QgbmVlZGVkCiAgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCiAgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kLl9fcmVkdWNlX18oKSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9kLl9fcmVkdWNlX18oKVsyXSkKICAgICAgICAgb2QueCA9IDEwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kLl9fcmVkdWNlX18oKSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG9kLl9fcmVkdWNlX18oKVsyXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9yZWN1cnNpdmUoc2VsZik6CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZFsxXSA9IG9kCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgtMSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGR1cCA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIHByb3RvKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZHVwLCBvZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkdXAua2V5cygpKSwgWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhkdXBbMV0sIGR1cCkKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIG9kID0gT3JkZXJlZERpY3QoWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weSBiL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkKaW5kZXggZTQwNWI4YS4uYTI0ZTNhZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5CkBAIC0xLDQgKzEsNCBAQAotaW1wb3J0IHVuaXR0ZXN0LCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAogaW1wb3J0IGNvbG9yc3lzCiAKIGRlZiBmcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApOgpAQCAtNjksOCArNjksMzIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoaGxzLCBjb2xvcnN5cy5yZ2JfdG9faGxzKCpyZ2IpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbChyZ2IsIGNvbG9yc3lzLmhsc190b19yZ2IoKmhscykpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KENvbG9yc3lzVGVzdCkKKyAgICBkZWYgdGVzdF95aXFfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBmb3IgciBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICBmb3IgZyBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICAgICAgZm9yIGIgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgICAgICAgICByZ2IgPSAociwgZywgYikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc3lzLnlpcV90b19yZ2IoKmNvbG9yc3lzLnJnYl90b195aXEoKnJnYikpCisgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3lpcV92YWx1ZXMoc2VsZik6CisgICAgICAgIHZhbHVlcyA9IFsKKyAgICAgICAgICAgICMgcmdiLCB5aXEKKyAgICAgICAgICAgICgoMC4wLCAwLjAsIDAuMCksICgwLjAsIDAuMCwgMC4wKSksICMgYmxhY2sKKyAgICAgICAgICAgICgoMC4wLCAwLjAsIDEuMCksICgwLjExLCAtMC4zMjE3LCAwLjMxMjEpKSwgIyBibHVlCisgICAgICAgICAgICAoKDAuMCwgMS4wLCAwLjApLCAoMC41OSwgLTAuMjc3MywgLTAuNTI1MSkpLCAjIGdyZWVuCisgICAgICAgICAgICAoKDAuMCwgMS4wLCAxLjApLCAoMC43LCAtMC41OTksIC0wLjIxMykpLCAjIGN5YW4KKyAgICAgICAgICAgICgoMS4wLCAwLjAsIDAuMCksICgwLjMsIDAuNTk5LCAwLjIxMykpLCAjIHJlZAorICAgICAgICAgICAgKCgxLjAsIDAuMCwgMS4wKSwgKDAuNDEsIDAuMjc3MywgMC41MjUxKSksICMgcHVycGxlCisgICAgICAgICAgICAoKDEuMCwgMS4wLCAwLjApLCAoMC44OSwgMC4zMjE3LCAtMC4zMTIxKSksICMgeWVsbG93CisgICAgICAgICAgICAoKDEuMCwgMS4wLCAxLjApLCAoMS4wLCAwLjAsIDAuMCkpLCAjIHdoaXRlCisgICAgICAgICAgICAoKDAuNSwgMC41LCAwLjUpLCAoMC41LCAwLjAsIDAuMCkpLCAjIGdyZXkKKyAgICAgICAgXQorICAgICAgICBmb3IgKHJnYiwgeWlxKSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKHlpcSwgY29sb3JzeXMucmdiX3RvX3lpcSgqcmdiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwocmdiLCBjb2xvcnN5cy55aXFfdG9fcmdiKCp5aXEpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKaW5kZXggYmE5ZmU0Ni4uMjEyMmFkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQpAQCAtMSwxMSArMSwxMiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IGNvbXBpbGVhbGwKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdApAQCAtMTgsMTEgKzE5LDExIEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgICBzZWxmLnNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QucHknKQotICAgICAgICBzZWxmLmJjX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCkKKyAgICAgICAgc2VsZi5iY19wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuc291cmNlX3BhdGgsICd3JykgYXMgZmlsZToKICAgICAgICAgICAgIGZpbGUud3JpdGUoJ3ggPSAxMjNcbicpCiAgICAgICAgIHNlbGYuc291cmNlX3BhdGgyID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QyLnB5JykKLSAgICAgICAgc2VsZi5iY19wYXRoMiA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMikKKyAgICAgICAgc2VsZi5iY19wYXRoMiA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgyKQogICAgICAgICBzaHV0aWwuY29weWZpbGUoc2VsZi5zb3VyY2VfcGF0aCwgc2VsZi5zb3VyY2VfcGF0aDIpCiAgICAgICAgIHNlbGYuc3ViZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3N1YmRpcicpCiAgICAgICAgIG9zLm1rZGlyKHNlbGYuc3ViZGlyZWN0b3J5KQpAQCAtMzYsNyArMzcsNyBAQAogICAgICAgICB3aXRoIG9wZW4oc2VsZi5iY19wYXRoLCAncmInKSBhcyBmaWxlOgogICAgICAgICAgICAgZGF0YSA9IGZpbGUucmVhZCg4KQogICAgICAgICBtdGltZSA9IGludChvcy5zdGF0KHNlbGYuc291cmNlX3BhdGgpLnN0X210aW1lKQotICAgICAgICBjb21wYXJlID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIG10aW1lKQorICAgICAgICBjb21wYXJlID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIsIG10aW1lKQogICAgICAgICByZXR1cm4gZGF0YSwgY29tcGFyZQogCiAgICAgZGVmIHJlY3JlYXRpb25fY2hlY2soc2VsZiwgbWV0YWRhdGEpOgpAQCAtNTcsNyArNTgsOCBAQAogCiAgICAgZGVmIHRlc3RfbXRpbWUoc2VsZik6CiAgICAgICAgICMgVGVzdCBhIGNoYW5nZSBpbiBtdGltZSBsZWFkcyB0byBhIG5ldyAucHljLgotICAgICAgICBzZWxmLnJlY3JlYXRpb25fY2hlY2soc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIDEpKQorICAgICAgICBzZWxmLnJlY3JlYXRpb25fY2hlY2soc3RydWN0LnBhY2soJzw0c2wnLCBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSkKIAogICAgIGRlZiB0ZXN0X21hZ2ljX251bWJlcihzZWxmKToKICAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCkBAIC05NywxNCArOTksMTQgQEAKICAgICAgICAgIyBpbnRlcnByZXRlcidzIGNyZWF0ZXMgdGhlIGNvcnJlY3QgZmlsZSBuYW1lcwogICAgICAgICBvcHRpbWl6ZSA9IDEgaWYgX19kZWJ1Z19fIGVsc2UgMAogICAgICAgICBjb21waWxlYWxsLmNvbXBpbGVfZGlyKHNlbGYuZGlyZWN0b3J5LCBxdWlldD1UcnVlLCBvcHRpbWl6ZT1vcHRpbWl6ZSkKLSAgICAgICAgY2FjaGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZCkpCi0gICAgICAgIGNhY2hlZDIgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZDIgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZDIpKQotICAgICAgICBjYWNoZWQzID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICBjYWNoZWQzID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShjYWNoZWQzKSkKIAogCkBAIC0xNTIsMTAgKzE1NCwxMiBAQAogICAgICAgICByZXR1cm4gcmMsIG91dCwgZXJyCiAKICAgICBkZWYgYXNzZXJ0Q29tcGlsZWQoc2VsZiwgZm4pOgotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZuKSkpCisgICAgICAgIHBhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHBhdGgpKQogCiAgICAgZGVmIGFzc2VydE5vdENvbXBpbGVkKHNlbGYsIGZuKToKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZm4pKSkKKyAgICAgICAgcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHBhdGgpKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5fY2xlYW51cCkKQEAgLTE5MCw4ICsxOTQsOCBAQAogICAgICAgICAgICAgICAgIFsnLW0nLCAnY29tcGlsZWFsbCcsICctcScsIHNlbGYucGtnZGlyXSkpCiAgICAgICAgICAgICAjIFZlcmlmeSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3J5IGNvbnRlbnRzLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucGtnZGlyX2NhY2hlZGlyKSkKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc29ydGVkKGJhc2UuZm9ybWF0KGltcC5nZXRfdGFnKCksIGV4dCkgZm9yIGJhc2UgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnX19pbml0X18ue30ue30nLCAnYmFyLnt9Lnt9JykpCisgICAgICAgICAgICBleHBlY3RlZCA9IHNvcnRlZChiYXNlLmZvcm1hdChzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLCBleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYmFzZSBpbiAoJ19faW5pdF9fLnt9Lnt9JywgJ2Jhci57fS57fScpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob3MubGlzdGRpcihzZWxmLnBrZ2Rpcl9jYWNoZWRpcikpLCBleHBlY3RlZCkKICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZXJlIGFyZSBubyAucHljIGZpbGVzIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShbZm4gZm9yIGZuIGluIG9zLmxpc3RkaXIoc2VsZi5wa2dkaXIpCkBAIC0yMjQsNyArMjI4LDcgQEAKIAogICAgIGRlZiB0ZXN0X2ZvcmNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKCctcScsIHNlbGYucGtnZGlyKQotICAgICAgICBweWNwYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuYmFyZm4pCisgICAgICAgIHB5Y3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLmJhcmZuKQogICAgICAgICAjIHNldCBhdGltZS9tdGltZSBiYWNrd2FyZCB0byBhdm9pZCBmaWxlIHRpbWVzdGFtcCByZXNvbHV0aW9uIGlzc3VlcwogICAgICAgICBvcy51dGltZShweWNwYXRoLCAodGltZS50aW1lKCktNjAsKSoyKQogICAgICAgICBtdGltZSA9IG9zLnN0YXQocHljcGF0aCkuc3RfbXRpbWUKQEAgLTI4OCwxMCArMjkyLDEwIEBACiAgICAgICAgIGJhemZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2JheicsICdyYWlzZSBFeGNlcHRpb24nKQogICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKCctcScsICctZCcsICdkaW5zZGFsZScsIHNlbGYucGtnZGlyKQogICAgICAgICBmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5wa2dkaXIsICdiaW5nJywgJ2ltcG9ydCBiYXonKQotICAgICAgICBweWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCisgICAgICAgIHB5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhemZuKQogICAgICAgICBvcy5yZW5hbWUocHljLCBvcy5wYXRoLmpvaW4oc2VsZi5wa2dkaXIsICdiYXoucHljJykpCiAgICAgICAgIG9zLnJlbW92ZShiYXpmbikKLSAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoZm4pCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKGZuLCBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgYidGaWxlICJkaW5zZGFsZScpCiAKICAgICBkZWYgdGVzdF9pbmNsdWRlX2JhZF9maWxlKHNlbGYpOgpAQCAtMjk5LDcgKzMwMyw3IEBACiAgICAgICAgICAgICAnLWknLCBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdub3N1Y2hmaWxlJyksIHNlbGYucGtnZGlyKQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dCwgYidycm9yLipub3N1Y2hmaWxlJykKICAgICAgICAgc2VsZi5hc3NlcnROb3RSZWdleChlcnIsIGInVHJhY2ViYWNrJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnZGlyX2NhY2hlZGlyKSkpCiAKICAgICBkZWYgdGVzdF9pbmNsdWRlX2ZpbGVfd2l0aF9hcmcoc2VsZik6CkBAIC0zNTYsMTMgKzM2MCw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCBiIkNhbid0IGxpc3QgJ2JhZGZpbGVuYW1lJyIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICBDb21tYW5kTGluZVRlc3RzLAotICAgICAgICBDb21waWxlYWxsVGVzdHMsCi0gICAgICAgIEVuY29kaW5nVGVzdCwKLSAgICAgICAgKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQppbmRleCAxYmY0MDk3Li5mODBkN2FjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CkBAIC0yMjAsNiArMjIwLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBPUyhOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBOUyhOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBOUygxLjUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKDEpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiMSsxMGoiKSwgMSsxMGopCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxMCksIDEwKzBqKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy5weQppbmRleCAzOTIzMGUxLi5hN2U5NDVjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy5weQpAQCAtMTUsNiArMTUsNyBAQAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKIAogZnJvbSBjb25jdXJyZW50IGltcG9ydCBmdXR1cmVzCiBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcy5fYmFzZSBpbXBvcnQgKApAQCAtNTIsNiArNTMsMTEgQEAKICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogCitjbGFzcyBNeU9iamVjdChvYmplY3QpOgorICAgIGRlZiBteV9tZXRob2Qoc2VsZik6CisgICAgICAgIHBhc3MKKworCiBjbGFzcyBFeGVjdXRvck1peGluOgogICAgIHdvcmtlcl9jb3VudCA9IDUKIApAQCAtMzk2LDYgKzQwMiwyMiBAQAogICAgICAgICBzZWxmLmV4ZWN1dG9yLm1hcChzdHIsIFsyXSAqIChzZWxmLndvcmtlcl9jb3VudCArIDEpKQogICAgICAgICBzZWxmLmV4ZWN1dG9yLnNodXRkb3duKCkKIAorICAgIEB0ZXN0LnN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfbm9fc3RhbGVfcmVmZXJlbmNlcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTYyODQ6IGNoZWNrIHRoYXQgdGhlIGV4ZWN1dG9ycyBkb24ndCB1bm5lY2Vzc2FyaWx5IGhhbmcgb250bworICAgICAgICAjIHJlZmVyZW5jZXMuCisgICAgICAgIG15X29iamVjdCA9IE15T2JqZWN0KCkKKyAgICAgICAgbXlfb2JqZWN0X2NvbGxlY3RlZCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIG15X29iamVjdF9jYWxsYmFjayA9IHdlYWtyZWYucmVmKAorICAgICAgICAgICAgbXlfb2JqZWN0LCBsYW1iZGEgb2JqOiBteV9vYmplY3RfY29sbGVjdGVkLnNldCgpKQorICAgICAgICAjIERlbGliZXJhdGVseSBkaXNjYXJkaW5nIHRoZSBmdXR1cmUuCisgICAgICAgIHNlbGYuZXhlY3V0b3Iuc3VibWl0KG15X29iamVjdC5teV9tZXRob2QpCisgICAgICAgIGRlbCBteV9vYmplY3QKKworICAgICAgICBjb2xsZWN0ZWQgPSBteV9vYmplY3RfY29sbGVjdGVkLndhaXQodGltZW91dD01LjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2xsZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAiU3RhbGUgcmVmZXJlbmNlIG5vdCBjb2xsZWN0ZWQgd2l0aGluIHRpbWVvdXQuIikKKwogCiBjbGFzcyBUaHJlYWRQb29sRXhlY3V0b3JUZXN0KFRocmVhZFBvb2xNaXhpbiwgRXhlY3V0b3JUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbWFwX3N1Ym1pdHNfd2l0aG91dF9pdGVyYXRpb24oc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKaW5kZXggOWU0NWY3MC4uOTE2YWM4MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQpAQCAtMSw1ICsxLDYgQEAKICIiIlVuaXQgdGVzdHMgZm9yIGNvbnRleHRsaWIucHksIGFuZCBvdGhlciBjb250ZXh0IG1hbmFnZXJzLiIiIgogCitpbXBvcnQgaW8KIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC0xMDAsMTUgKzEwMSwyNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX25hbWVfXywnYmF6JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouZm9vLCAnYmFyJykKIAotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCi0gICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKICAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9kb2NfYXR0cmliKHNlbGYpOgogICAgICAgICBiYXogPSBzZWxmLl9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fZG9jX18sICJXaGVlISIpCiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jc3RyaW5nX2dpdmVuX2NtX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgYmF6ID0gc2VsZi5fY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoKShOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX2RvY19fLCAiV2hlZSEiKQorCisKIGNsYXNzIENsb3NpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICAjIFhYWCBUaGlzIG5lZWRzIG1vcmUgd29yaworICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBjbG9zaW5nLl9fZG9jX18KKyAgICAgICAgb2JqID0gY2xvc2luZyhOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCiAKICAgICBkZWYgdGVzdF9jbG9zaW5nKHNlbGYpOgogICAgICAgICBzdGF0ZSA9IFtdCkBAIC0yMDQsNiArMjE1LDcgQEAKIAogCiBjbGFzcyBteWNvbnRleHQoQ29udGV4dERlY29yYXRvcik6CisgICAgIiIiRXhhbXBsZSBkZWNvcmF0aW9uLWNvbXBhdGlibGUgY29udGV4dCBtYW5hZ2VyIGZvciB0ZXN0aW5nIiIiCiAgICAgc3RhcnRlZCA9IEZhbHNlCiAgICAgZXhjID0gTm9uZQogICAgIGNhdGNoID0gRmFsc2UKQEAgLTIxOSw2ICsyMzEsMTMgQEAKIAogY2xhc3MgVGVzdENvbnRleHREZWNvcmF0b3IodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IG15Y29udGV4dC5fX2RvY19fCisgICAgICAgIG9iaiA9IG15Y29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fZG9jX18sIGNtX2RvY3N0cmluZykKKwogICAgIGRlZiB0ZXN0X2NvbnRleHRkZWNvcmF0b3Ioc2VsZik6CiAgICAgICAgIGNvbnRleHQgPSBteWNvbnRleHQoKQogICAgICAgICB3aXRoIGNvbnRleHQgYXMgcmVzdWx0OgpAQCAtMzcyLDYgKzM5MSwxMyBAQAogCiBjbGFzcyBUZXN0RXhpdFN0YWNrKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBFeGl0U3RhY2suX19kb2NfXworICAgICAgICBvYmogPSBFeGl0U3RhY2soKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKICAgICBkZWYgdGVzdF9ub19yZXNvdXJjZXMoc2VsZik6CiAgICAgICAgIHdpdGggRXhpdFN0YWNrKCk6CiAgICAgICAgICAgICBwYXNzCkBAIC02MzEsMTAgKzY1NywxMDEgQEAKICAgICAgICAgc3RhY2sucHVzaChjbSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhzdGFjay5fZXhpdF9jYWxsYmFja3NbLTFdLCBjbSkKIAorY2xhc3MgVGVzdFJlZGlyZWN0U3Rkb3V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotIyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSB0ZXN0IGFjdHVhbGx5IHJ1biB1bmRlciByZWdydGVzdC5weSEKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gcmVkaXJlY3Rfc3Rkb3V0Ll9fZG9jX18KKyAgICAgICAgb2JqID0gcmVkaXJlY3Rfc3Rkb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fZG9jX18sIGNtX2RvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X3JlZGlyZWN0X3RvX3N0cmluZ19pbyhzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgbXNnID0gIkNvbnNpZGVyIGFuIEFQSSBsaWtlIGhlbHAoKSwgd2hpY2ggcHJpbnRzIGRpcmVjdGx5IHRvIHN0ZG91dCIKKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZik6CisgICAgICAgICAgICBwcmludChtc2cpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIG1zZykKKworICAgIGRlZiB0ZXN0X2VudGVyX3Jlc3VsdF9pc190YXJnZXQoc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpIGFzIGVudGVyX3Jlc3VsdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZW50ZXJfcmVzdWx0LCBmKQorCisgICAgZGVmIHRlc3RfY21faXNfcmV1c2FibGUoc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdyaXRlX3RvX2YgPSByZWRpcmVjdF9zdGRvdXQoZikKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIkhlbGxvIiwgZW5kPSIgIikKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIldvcmxkISIpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiSGVsbG8gV29ybGQhXG4iKQorCisgICAgIyBJZiB0aGlzIGlzIGV2ZXIgbWFkZSByZWVudHJhbnQsIHVwZGF0ZSB0aGUgcmV1c2FibGUtYnV0LW5vdC1yZWVudHJhbnQKKyAgICAjIGV4YW1wbGUgYXQgdGhlIGVuZCBvZiB0aGUgY29udGV4dGxpYiBkb2NzIGFjY29yZGluZ2x5LgorICAgIGRlZiB0ZXN0X25lc3RlZF9yZWVudHJ5X2ZhaWxzKHNlbGYpOgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3cml0ZV90b19mID0gcmVkaXJlY3Rfc3Rkb3V0KGYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsICJDYW5ub3QgcmVlbnRlciIpOgorICAgICAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgICAgIHByaW50KCJIZWxsbyIsIGVuZD0iICIpCisgICAgICAgICAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiV29ybGQhIikKKworCitjbGFzcyBUZXN0U3VwcHJlc3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHN1cHByZXNzLl9fZG9jX18KKyAgICAgICAgb2JqID0gc3VwcHJlc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZXN1bHRfZnJvbV9lbnRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhWYWx1ZUVycm9yKSBhcyBlbnRlcl9yZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlbnRlcl9yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9ub19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLCA1KSwgMzIpCisKKyAgICBkZWYgdGVzdF9leGFjdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2hpZXJhcmNoeShzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhMb29rdXBFcnJvcik6CisgICAgICAgICAgICAnSGVsbG8nWzUwXQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzdXBwcmVzcygpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZXhjZXB0aW9uX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoWmVyb0RpdmlzaW9uRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhaZXJvRGl2aXNpb25FcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBpZ25vcmVfZXhjZXB0aW9ucyA9IHN1cHByZXNzKEV4Y2VwdGlvbikKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIGxlbig1KQorICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOgorICAgICAgICAgICAgMS8wCisgICAgICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOiAjIENoZWNrIG5lc3RlZCB1c2FnZQorICAgICAgICAgICAgICAgIGxlbig1KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQppbmRleCA1Njc2NjY4Li5jM2ViN2ZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKQEAgLTYsOSArNiwxMSBAQAogIyByaXAgb2ZmIGFsbCBpbnRlcmVzdGluZyBzdHVmZiBmcm9tIHRlc3RfcHJvZmlsZQogaW1wb3J0IGNQcm9maWxlCiBmcm9tIHRlc3QudGVzdF9wcm9maWxlIGltcG9ydCBQcm9maWxlVGVzdCwgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQKK2Zyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMKIAogY2xhc3MgQ1Byb2ZpbGVUZXN0KFByb2ZpbGVUZXN0KToKICAgICBwcm9maWxlcmNsYXNzID0gY1Byb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gY1Byb2ZpbGUKICAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gIntidWlsdC1pbiBtZXRob2QgbWF4fSIKIAogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKaW5kZXggY2ZiNzM0MS4uNjI0ZDcwMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CkBAIC0xLDExICsxLDcgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKLWRlZiBzZXRVcE1vZHVsZSgpOgotICAgICMgdGhpcyBpbXBvcnQgd2lsbCByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCBpZiBfY3J5cHQgZG9lc24ndCBleGlzdCwKLSAgICAjIHNvIGl0IGhhcyB0byBiZSBkb25lIGluIHNldFVwTW9kdWxlIGZvciB0ZXN0IGRpc2NvdmVyeSB0byB3b3JrCi0gICAgZ2xvYmFsIGNyeXB0Ci0gICAgY3J5cHQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKK2NyeXB0ID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjcnlwdCcpCiAKIGNsYXNzIENyeXB0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nzdi5weSBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CmluZGV4IDVlMjg1ODYuLjU1OWU1MWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CkBAIC0xMzYsMTIgKzEzNiwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAxMDsKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKICAgICAgICAgICAgICAgICBpZiBpID4gMjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLl93cml0ZV90ZXN0LCBCYWRMaXN0KCksICcnKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIEJhZExpc3QoKSwgJycpCiAgICAgICAgIGNsYXNzIEJhZEl0ZW06CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIFtCYWRJdGVtKCldLCAnJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIFtCYWRJdGVtKCldLCAnJykKIAogICAgIGRlZiB0ZXN0X3dyaXRlX2JpZ2ZpZWxkKHNlbGYpOgogICAgICAgICAjIFRoaXMgZXhlcmNpc2VzIHRoZSBidWZmZXIgcmVhbGxvYyBmdW5jdGlvbmFsaXR5CkBAIC0xODYsOSArMTg2LDkgQEAKICAgICBkZWYgdGVzdF93cml0ZXJvd3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEJyb2tlbkZpbGU6CiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYnVmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKEJyb2tlbkZpbGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgd3JpdGVyLndyaXRlcm93cywgW1snYSddXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd3JpdGVyLndyaXRlcm93cywgW1snYSddXSkKIAogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoIncrIiwgbmV3bGluZT0nJykgYXMgZmlsZW9iajoKICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaikKQEAgLTMwOCw2ICszMDgsMTUgQEAKICAgICAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZmlsZW9iaikpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LCByb3dzW2ldKQogCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX2VzY2FwZWRfdW5xdW90ZWRfbmV3bGluZXMoc2VsZik6CisgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgidysiLCBuZXdsaW5lPScnKSBhcyBmaWxlb2JqOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUsZXNjYXBlY2hhcj0iXFwiKQorICAgICAgICAgICAgcm93cyA9IFtbJ2FcbmInLCdiJ10sWydjJywneFxyXG5kJ11dCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3dzKHJvd3MpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZmlsZW9iaixxdW90aW5nPWNzdi5RVU9URV9OT05FLGVzY2FwZWNoYXI9IlxcIikpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LHJvd3NbaV0pCisKIGNsYXNzIFRlc3REaWFsZWN0UmVnaXN0cnkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X2JhZGFyZ3Moc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2Lmxpc3RfZGlhbGVjdHMsIE5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CmluZGV4IDI0M2EwYWYuLjFjNTc3NzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIHJldHVybiBrZXlzCiAKICAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi5tb2R1bGUuZXJyb3IsIElPRXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLm1vZHVsZS5lcnJvciwgT1NFcnJvcikpCiAKICAgICBkZWYgdGVzdF9hbnlkYm1fbm90X2V4aXN0aW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYm0uZXJyb3IsIGRibS5vcGVuLCBfZm5hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKaW5kZXggNzFiOTNhNi4uYWM4YTdiZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQpAQCAtMjkwLDcgKzI5MCw2IEBACiAgICAgICAgIGdsb2JhbCBza2lwX2V4cGVjdGVkCiAgICAgICAgIGlmIHNraXBfZXhwZWN0ZWQ6CiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdAotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHdpdGggb3BlbihmaWxlKSBhcyBmOgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCdcclxuJywgJycpLnJlcGxhY2UoJ1xuJywgJycpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5IGIvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQppbmRleCBhODQ4N2QyLi43YmZmMWQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKQEAgLTU0Myw4ICs1NDMsOCBAQAogICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCiAgICAgICAgIGNoZWNrKGRlcXVlKCksIGJhc2VzaXplICsgYmxvY2tzaXplKQogICAgICAgICBjaGVjayhkZXF1ZSgnYScpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKLSAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKEJMT0NLTEVOIC8vIDIpKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCi0gICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAvLyAyICsgMSkpLCBiYXNlc2l6ZSArIDIgKiBibG9ja3NpemUpCisgICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAtIDEpKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCisgICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIEJMT0NLTEVOKSwgYmFzZXNpemUgKyAyICogYmxvY2tzaXplKQogICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoNDIgKiBCTE9DS0xFTikpLCBiYXNlc2l6ZSArIDQzICogYmxvY2tzaXplKQogCiBjbGFzcyBUZXN0VmFyaW91c0l0ZXJhdG9yQXJncyh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5IGIvTGliL3Rlc3QvdGVzdF9kZXNjci5weQppbmRleCAzNzc2Mzg5Li41OTVkNTQwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKQEAgLTE3ODksNiArMTc4OSw3IEBACiAgICAgICAgICAgICAoIl9fdHJ1bmNfXyIsIGludCwgemVybywgc2V0KCksIHt9KSwKICAgICAgICAgICAgICgiX19jZWlsX18iLCBtYXRoLmNlaWwsIHplcm8sIHNldCgpLCB7fSksCiAgICAgICAgICAgICAoIl9fZGlyX18iLCBkaXIsIGVtcHR5X3NlcSwgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19yb3VuZF9fIiwgcm91bmQsIHplcm8sIHNldCgpLCB7fSksCiAgICAgICAgICAgICBdCiAKICAgICAgICAgY2xhc3MgQ2hlY2tlcihvYmplY3QpOgpAQCAtMjI0OSw3ICsyMjUwLDkgQEAKICAgICAgICAgbWluc3RhbmNlID0gTSgibSIpCiAgICAgICAgIG1pbnN0YW5jZS5iID0gMgogICAgICAgICBtaW5zdGFuY2UuYSA9IDEKLSAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBkaXIobWluc3RhbmNlKSBpZiB4IG5vdCBpbiBbIl9fbmFtZV9fIiwgIl9fZG9jX18iXV0KKyAgICAgICAgZGVmYXVsdF9hdHRyaWJ1dGVzID0gWydfX25hbWVfXycsICdfX2RvY19fJywgJ19fcGFja2FnZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJ10KKyAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBkaXIobWluc3RhbmNlKSBpZiB4IG5vdCBpbiBkZWZhdWx0X2F0dHJpYnV0ZXNdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXMsIFsnYScsICdiJ10pCiAKICAgICAgICAgY2xhc3MgTTIoTSk6CkBAIC0zNzMzLDE4ICszNzM2LDggQEAKICAgICAgICAgIyBidWcpLgogICAgICAgICBkZWwgYwogCi0gICAgICAgICMgSWYgdGhhdCBkaWRuJ3QgYmxvdyB1cCwgaXQncyBhbHNvIGludGVyZXN0aW5nIHRvIHNlZSB3aGV0aGVyIGNsZWFyaW5nCi0gICAgICAgICMgdGhlIGxhc3QgY29udGFpbmVyIHNsb3Qgd29ya3M6IHRoYXQgd2lsbCBhdHRlbXB0IHRvIGRlbGV0ZSBjIGFnYWluLAotICAgICAgICAjIHdoaWNoIHdpbGwgY2F1c2UgYyB0byBnZXQgYXBwZW5kZWQgYmFjayB0byB0aGUgY29udGFpbmVyIGFnYWluCi0gICAgICAgICMgImR1cmluZyIgdGhlIGRlbC4gIChPbiBub24tQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbnMsIGhvd2V2ZXIsIF9fZGVsX18KLSAgICAgICAgIyBpcyB0eXBpY2FsbHkgbm90IGNhbGxlZCBhZ2Fpbi4pCiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEMuY29udGFpbmVyKSwgMSkKLSAgICAgICAgZGVsIEMuY29udGFpbmVyWy0xXQotICAgICAgICBpZiBzdXBwb3J0LmNoZWNrX2ltcGxfZGV0YWlsKCk6Ci0gICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oQy5jb250YWluZXIpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmNvbnRhaW5lclstMV0uYXR0ciwgNDIpCiAKICAgICAgICAgIyBNYWtlIGMgbW9ydGFsIGFnYWluLCBzbyB0aGF0IHRoZSB0ZXN0IGZyYW1ld29yayB3aXRoIC1sIGRvZXNuJ3QgcmVwb3J0CiAgICAgICAgICMgaXQgYXMgYSBsZWFrLgpAQCAtNDUyNCw2ICs0NTE3LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZS5fX2RpY3RfX1snX19xdWFsbmFtZV9fJ10uX19zZXRfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCAnT2luaycpCiAKKyAgICAgICAgZ2xvYmFsIFkKKyAgICAgICAgY2xhc3MgWToKKyAgICAgICAgICAgIGNsYXNzIEluc2lkZToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5fX3F1YWxuYW1lX18sICdZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLkluc2lkZS5fX3F1YWxuYW1lX18sICdZLkluc2lkZScpCisKICAgICBkZWYgdGVzdF9xdWFsbmFtZV9kaWN0KHNlbGYpOgogICAgICAgICBucyA9IHsnX19xdWFsbmFtZV9fJzogJ3NvbWUubmFtZSd9CiAgICAgICAgIHRwID0gdHlwZSgnRm9vJywgKCksIG5zKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5IGIvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5CmluZGV4IGJlZjRlMTguLjQwZWJlZWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RldnBvbGwucHkKQEAgLTIsMTMgKzIsMTcgQEAKIAogIyBJbml0aWFsIHRlc3RzIGFyZSBjb3BpZWQgYXMgaXMgZnJvbSAidGVzdF9wb2xsLnB5IgogCi1pbXBvcnQgb3MsIHNlbGVjdCwgcmFuZG9tLCB1bml0dGVzdCwgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0CiAKIHRyeToKICAgICBzZWxlY3QuZGV2cG9sbAogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzZWxlY3QuZGV2cG9sbCBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X2RldnBvbGwiKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzZWxlY3QuZGV2cG9sbCBub3QgZGVmaW5lZCIpCiAKIAogZGVmIGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIGZsYWcpOgpAQCAtODcsNiArOTEsMzYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcG9sbHN0ZXIucG9sbCwgMSA8PCA2MykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcG9sbHN0ZXIucG9sbCwgMSA8PCA2NCkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBvcGVuX2ZpbGUgPSBvcGVuKF9fZmlsZV9fLCAicmIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3Blbl9maWxlLmNsb3NlKQorICAgICAgICBmZCA9IG9wZW5fZmlsZS5maWxlbm8oKQorICAgICAgICBkZXZwb2xsID0gc2VsZWN0LmRldnBvbGwoKQorCisgICAgICAgICMgdGVzdCBmaWxlbm8oKSBtZXRob2QgYW5kIGNsb3NlZCBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRldnBvbGwuZmlsZW5vKCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkZXZwb2xsLmNsb3NlZCkKKworICAgICAgICAjIHRlc3QgY2xvc2UoKQorICAgICAgICBkZXZwb2xsLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRldnBvbGwuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLmZpbGVubykKKworICAgICAgICAjIGNsb3NlKCkgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZQorICAgICAgICBkZXZwb2xsLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbnMgbXVzdCBmYWlsIHdpdGggVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5tb2RpZnksIGZkLCBzZWxlY3QuUE9MTElOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLnBvbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwucmVnaXN0ZXIsIGZkLCBmZCwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC51bnJlZ2lzdGVyLCBmZCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZGV2cG9sbCA9IHNlbGVjdC5kZXZwb2xsKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGRldnBvbGwuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGRldnBvbGwuZmlsZW5vKCkpLCBGYWxzZSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KERldlBvbGxUZXN0cykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaXMucHkgYi9MaWIvdGVzdC90ZXN0X2Rpcy5weQppbmRleCBkMTM1NWJiLi44NjEwYzVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Rpcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Rpcy5weQpAQCAtMSwxMSArMSwxMyBAQAogIyBNaW5pbWFsIHRlc3RzIGZvciBkaXMgbW9kdWxlCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNhcHR1cmVkX3N0ZG91dAorZnJvbSB0ZXN0LmJ5dGVjb2RlX2hlbHBlciBpbXBvcnQgQnl0ZWNvZGVUZXN0Q2FzZQogaW1wb3J0IGRpZmZsaWIKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwogaW1wb3J0IGRpcwogaW1wb3J0IGlvCitpbXBvcnQgdHlwZXMKIAogY2xhc3MgX0M6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjIsMTIgKzI0LDEyIEBACiAiIiIgJSAoX0MuX19pbml0X18uX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLCkKIAogZGlzX2NfaW5zdGFuY2VfbWV0aG9kX2J5dGVzID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAxICgxKQotICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQotICAgICAgICAgIDYgQ09NUEFSRV9PUCAgICAgICAgICAyICg9PSkKLSAgICAgICAgICA5IExPQURfRkFTVCAgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDE1IExPQURfQ09OU1QgICAgICAgICAgMCAoMCkKKyAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgNiBDT01QQVJFX09QICAgICAgICAgICAgICAgMiAoPT0pCisgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgICAgICAwICgwKQorICAgICAgICAgMTUgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKDApCiAgICAgICAgICAxOCBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC00OCwxMSArNTAsMTEgQEAKIAogCiBkaXNfZl9jb19jb2RlID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAwICgwKQotICAgICAgICAgIDMgTE9BRF9GQVNUICAgICAgICAgICAwICgwKQotICAgICAgICAgIDYgQ0FMTF9GVU5DVElPTiAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQorICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKDApCisgICAgICAgICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgICA2IENBTExfRlVOQ1RJT04gICAgICAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQogICAgICAgICAgIDkgUE9QX1RPUAotICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQorICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC0yOTQsMjkgKzI5NiwxNiBAQAogQXJndW1lbnQgY291bnQ6ICAgIDEKIEt3LW9ubHkgYXJndW1lbnRzOiAwCiBOdW1iZXIgb2YgbG9jYWxzOiAgMQotU3RhY2sgc2l6ZTogICAgICAgIDQKK1N0YWNrIHNpemU6ICAgICAgICAzCiBGbGFnczogICAgICAgICAgICAgT1BUSU1JWkVELCBORVdMT0NBTFMsIE5PRlJFRQogQ29uc3RhbnRzOgogICAgMDogJXIKLSAgIDE6ICdfX2Z1bmNfXycKLSAgIDI6ICdfX2NvZGVfXycKLSAgIDM6ICc8Y29kZV9pbmZvPicKLSAgIDQ6ICdjb19jb2RlJwotICAgNTogImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICUlcyBvYmplY3RzIgotJXNOYW1lczoKLSAgIDA6IGhhc2F0dHIKLSAgIDE6IF9fZnVuY19fCi0gICAyOiBfX2NvZGVfXwotICAgMzogaXNpbnN0YW5jZQotICAgNDogc3RyCi0gICA1OiBfdHJ5X2NvbXBpbGUKLSAgIDY6IF9mb3JtYXRfY29kZV9pbmZvCi0gICA3OiBUeXBlRXJyb3IKLSAgIDg6IHR5cGUKLSAgIDk6IF9fbmFtZV9fCitOYW1lczoKKyAgIDA6IF9mb3JtYXRfY29kZV9pbmZvCisgICAxOiBfZ2V0X2NvZGVfb2JqZWN0CiBWYXJpYWJsZSBuYW1lczoKLSAgIDA6IHgiIiIgJSAoKCdGb3JtYXR0ZWQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuJywgJyAgIDY6IE5vbmVcbicpCi0gICAgICAgICAgICAgIGlmIHN5cy5mbGFncy5vcHRpbWl6ZSA8IDIgZWxzZSAoTm9uZSwgJycpKQorICAgMDogeCIiIiAlICgoJ0Zvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4nLCkKKyAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMiBlbHNlIChOb25lLCkpCiAKIEBzdGF0aWNtZXRob2QKIGRlZiB0cmlja3koeCwgeSwgej1UcnVlLCAqYXJncywgYywgZCwgZT1bXSwgKiprd2RzKToKQEAgLTM4MCw3ICszNjksNyBAQAogCiBjb2RlX2luZm9fZXhwcl9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTM5Myw3ICszODIsNyBAQAogCiBjb2RlX2luZm9fc2ltcGxlX3N0bXRfc3RyID0gIiIiXAogTmFtZTogICAgICAgICAgICAgIDxtb2R1bGU+Ci1GaWxlbmFtZTogICAgICAgICAgPGNvZGVfaW5mbz4KK0ZpbGVuYW1lOiAgICAgICAgICA8ZGlzYXNzZW1ibHk+CiBBcmd1bWVudCBjb3VudDogICAgMAogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAwCkBAIC00MDcsNyArMzk2LDcgQEAKIAogY29kZV9pbmZvX2NvbXBvdW5kX3N0bXRfc3RyID0gIiIiXAogTmFtZTogICAgICAgICAgICAgIDxtb2R1bGU+Ci1GaWxlbmFtZTogICAgICAgICAgPGNvZGVfaW5mbz4KK0ZpbGVuYW1lOiAgICAgICAgICA8ZGlzYXNzZW1ibHk+CiBBcmd1bWVudCBjb3VudDogICAgMAogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAwCkBAIC00NDEsNiArNDMwLDkgQEAKICAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgICAgIGRpcy5zaG93X2NvZGUoeCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0cHV0LmdldHZhbHVlKCksIGV4cGVjdGVkKyJcbiIpCisgICAgICAgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICBkaXMuc2hvd19jb2RlKHgsIGZpbGU9b3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9jb2RlX2luZm9fb2JqZWN0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpcy5jb2RlX2luZm8sIG9iamVjdCgpKQpAQCAtNDQ5LDggKzQ0MSwyODkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXMucHJldHR5X2ZsYWdzKDApLCAnMHgwJykKIAogCisjIEZvZGRlciBmb3IgaW5zdHJ1Y3Rpb24gaW50cm9zcGVjdGlvbiB0ZXN0cworIyAgIEVkaXRpbmcgYW55IG9mIHRoZXNlIG1heSByZXF1aXJlIHJlY2FsY3VsYXRpbmcgdGhlIGV4cGVjdGVkIG91dHB1dAorZGVmIG91dGVyKGE9MSwgYj0yKToKKyAgICBkZWYgZihjPTMsIGQ9NCk6CisgICAgICAgIGRlZiBpbm5lcihlPTUsIGY9Nik6CisgICAgICAgICAgICBwcmludChhLCBiLCBjLCBkLCBlLCBmKQorICAgICAgICBwcmludChhLCBiLCBjLCBkKQorICAgICAgICByZXR1cm4gaW5uZXIKKyAgICBwcmludChhLCBiLCAnJywgMSwgW10sIHt9LCAiSGVsbG8gd29ybGQhIikKKyAgICByZXR1cm4gZgorCitkZWYganVtcHkoKToKKyAgICAjIFRoaXMgd29uJ3QgYWN0dWFsbHkgcnVuIChidXQgdGhhdCdzIE9LLCB3ZSBvbmx5IGRpc2Fzc2VtYmxlIGl0KQorICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgcHJpbnQoaSkKKyAgICAgICAgaWYgaSA8IDQ6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBpID4gNjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkkgY2FuIGhheiBlbHNlIGNsYXVzZT8iKQorICAgIHdoaWxlIGk6CisgICAgICAgIHByaW50KGkpCisgICAgICAgIGkgLT0gMQorICAgICAgICBpZiBpID4gNjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGkgPCA0OgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiV2hvIGxldCBsb2xjYXR6IGludG8gdGhpcyB0ZXN0IHN1aXRlPyIpCisgICAgdHJ5OgorICAgICAgICAxIC8gMAorICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgcHJpbnQoIkhlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4iKQorICAgIGVsc2U6CisgICAgICAgIHdpdGggaSBhcyBkb2RneToKKyAgICAgICAgICAgIHByaW50KCJOZXZlciByZWFjaCB0aGlzIikKKyAgICBmaW5hbGx5OgorICAgICAgICBwcmludCgiT0ssIG5vdyB3ZSdyZSBkb25lIikKKworIyBFbmQgZm9kZGVyIGZvciBvcGluZm8gZ2VuZXJhdGlvbiB0ZXN0cworZXhwZWN0ZWRfb3V0ZXJfb2Zmc2V0ID0gMSAtIG91dGVyLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vCitleHBlY3RlZF9qdW1weV9vZmZzZXQgPSAxIC0ganVtcHkuX19jb2RlX18uY29fZmlyc3RsaW5lbm8KK2NvZGVfb2JqZWN0X2YgPSBvdXRlci5fX2NvZGVfXy5jb19jb25zdHNbM10KK2NvZGVfb2JqZWN0X2lubmVyID0gY29kZV9vYmplY3RfZi5jb19jb25zdHNbM10KKworIyBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSB1c2VmdWwgdG8gcmVnZW5lcmF0ZSB0aGUgZXhwZWN0ZWQgcmVzdWx0cyBhZnRlcgorIyBlaXRoZXIgdGhlIGZvZGRlciBpcyBtb2RpZmllZCBvciB0aGUgYnl0ZWNvZGUgZ2VuZXJhdGlvbiBjaGFuZ2VzCisjIEFmdGVyIHJlZ2VuZXJhdGlvbiwgdXBkYXRlIHRoZSByZWZlcmVuY2VzIHRvIGNvZGVfb2JqZWN0X2YgYW5kCisjIGNvZGVfb2JqZWN0X2lubmVyIGJlZm9yZSByZXJ1bm5pbmcgdGhlIHRlc3RzCisKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIsIGxpbmVfb2Zmc2V0PWV4cGVjdGVkX291dGVyX29mZnNldCkKKyNwcmludCgnZXhwZWN0ZWRfb3BpbmZvX291dGVyID0gW1xuICAnLAorICAgICAgIycsXG4gICcuam9pbihtYXAoc3RyLCBfaW5zdHJ1Y3Rpb25zKSksICcsXG5dJywgc2VwPScnKQorI19pbnN0cnVjdGlvbnMgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhvdXRlcigpLCBsaW5lX29mZnNldD1leHBlY3RlZF9vdXRlcl9vZmZzZXQpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19mID0gW1xuICAnLAorICAgICAgIycsXG4gICcuam9pbihtYXAoc3RyLCBfaW5zdHJ1Y3Rpb25zKSksICcsXG5dJywgc2VwPScnKQorI19pbnN0cnVjdGlvbnMgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhvdXRlcigpKCksIGxpbmVfb2Zmc2V0PWV4cGVjdGVkX291dGVyX29mZnNldCkKKyNwcmludCgnZXhwZWN0ZWRfb3BpbmZvX2lubmVyID0gW1xuICAnLAorICAgICAgIycsXG4gICcuam9pbihtYXAoc3RyLCBfaW5zdHJ1Y3Rpb25zKSksICcsXG5dJywgc2VwPScnKQorI19pbnN0cnVjdGlvbnMgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhqdW1weSwgbGluZV9vZmZzZXQ9ZXhwZWN0ZWRfanVtcHlfb2Zmc2V0KQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9fanVtcHkgPSBbXG4gICcsCisgICAgICAjJyxcbiAgJy5qb2luKG1hcChzdHIsIF9pbnN0cnVjdGlvbnMpKSwgJyxcbl0nLCBzZXA9JycpCisKKworSW5zdHJ1Y3Rpb24gPSBkaXMuSW5zdHJ1Y3Rpb24KK2V4cGVjdGVkX29waW5mb19vdXRlciA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTEsIGFyZ3ZhbD0zLCBhcmdyZXByPSczJywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTIsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTIsIGFyZ3ZhbD00LCBhcmdyZXByPSc0Jywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MCwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTEsIGFyZ3ZhbD0nYicsIGFyZ3JlcHI9J2InLCBvZmZzZXQ9OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX1RVUExFJywgb3Bjb2RlPTEwMiwgYXJnPTIsIGFyZ3ZhbD0yLCBhcmdyZXByPScnLCBvZmZzZXQ9MTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD1jb2RlX29iamVjdF9mLCBhcmdyZXByPXJlcHIoY29kZV9vYmplY3RfZiksIG9mZnNldD0xNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NCwgYXJndmFsPSdvdXRlci48bG9jYWxzPi5mJywgYXJncmVwcj0iJ291dGVyLjxsb2NhbHM+LmYnIiwgb2Zmc2V0PTE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTUFLRV9DTE9TVVJFJywgb3Bjb2RlPTEzNCwgYXJnPTIsIGFyZ3ZhbD0yLCBhcmdyZXByPScnLCBvZmZzZXQ9MjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTVE9SRV9GQVNUJywgb3Bjb2RlPTEyNSwgYXJnPTIsIGFyZ3ZhbD0nZicsIGFyZ3JlcHI9J2YnLCBvZmZzZXQ9MjQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MjcsIHN0YXJ0c19saW5lPTcsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTAsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9MzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTEsIGFyZ3ZhbD0nYicsIGFyZ3JlcHI9J2InLCBvZmZzZXQ9MzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0nJywgYXJncmVwcj0iJyciLCBvZmZzZXQ9MzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTYsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTM5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlVJTERfTElTVCcsIG9wY29kZT0xMDMsIGFyZz0wLCBhcmd2YWw9MCwgYXJncmVwcj0nJywgb2Zmc2V0PTQyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlVJTERfTUFQJywgb3Bjb2RlPTEwNSwgYXJnPTAsIGFyZ3ZhbD0wLCBhcmdyZXByPScnLCBvZmZzZXQ9NDUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTcsIGFyZ3ZhbD0nSGVsbG8gd29ybGQhJywgYXJncmVwcj0iJ0hlbGxvIHdvcmxkISciLCBvZmZzZXQ9NDgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTcsIGFyZ3ZhbD03LCBhcmdyZXByPSc3IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTUxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01NCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0yLCBhcmd2YWw9J2YnLCBhcmdyZXByPSdmJywgb2Zmc2V0PTU1LCBzdGFydHNfbGluZT04LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUkVUVVJOX1ZBTFVFJywgb3Bjb2RlPTgzLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCitleHBlY3RlZF9vcGluZm9fZiA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTEsIGFyZ3ZhbD01LCBhcmdyZXByPSc1Jywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTIsIGFyZ3ZhbD02LCBhcmdyZXByPSc2Jywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MiwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTMsIGFyZ3ZhbD0nYicsIGFyZ3JlcHI9J2InLCBvZmZzZXQ9OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0wLCBhcmd2YWw9J2MnLCBhcmdyZXByPSdjJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTEsIGFyZ3ZhbD0nZCcsIGFyZ3JlcHI9J2QnLCBvZmZzZXQ9MTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9UVVBMRScsIG9wY29kZT0xMDIsIGFyZz00LCBhcmd2YWw9NCwgYXJncmVwcj0nJywgb2Zmc2V0PTE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9Y29kZV9vYmplY3RfaW5uZXIsIGFyZ3JlcHI9cmVwcihjb2RlX29iamVjdF9pbm5lciksIG9mZnNldD0yMSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NCwgYXJndmFsPSdvdXRlci48bG9jYWxzPi5mLjxsb2NhbHM+LmlubmVyJywgYXJncmVwcj0iJ291dGVyLjxsb2NhbHM+LmYuPGxvY2Fscz4uaW5uZXInIiwgb2Zmc2V0PTI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTUFLRV9DTE9TVVJFJywgb3Bjb2RlPTEzNCwgYXJnPTIsIGFyZ3ZhbD0yLCBhcmdyZXByPScnLCBvZmZzZXQ9MjcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTVE9SRV9GQVNUJywgb3Bjb2RlPTEyNSwgYXJnPTIsIGFyZ3ZhbD0naW5uZXInLCBhcmdyZXByPSdpbm5lcicsIG9mZnNldD0zMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTAsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0zMywgc3RhcnRzX2xpbmU9NSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MiwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD0zNiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MywgYXJndmFsPSdiJywgYXJncmVwcj0nYicsIG9mZnNldD0zOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MCwgYXJndmFsPSdjJywgYXJncmVwcj0nYycsIG9mZnNldD00Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MSwgYXJndmFsPSdkJywgYXJncmVwcj0nZCcsIG9mZnNldD00NSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9NCwgYXJndmFsPTQsIGFyZ3JlcHI9JzQgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9NDgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTUxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTIsIGFyZ3ZhbD0naW5uZXInLCBhcmdyZXByPSdpbm5lcicsIG9mZnNldD01Miwgc3RhcnRzX2xpbmU9NiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1JFVFVSTl9WQUxVRScsIG9wY29kZT04MywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKK10KKworZXhwZWN0ZWRfb3BpbmZvX2lubmVyID0gWworICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTAsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0wLCBzdGFydHNfbGluZT00LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0wLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTEsIGFyZ3ZhbD0nYicsIGFyZ3JlcHI9J2InLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MiwgYXJndmFsPSdjJywgYXJncmVwcj0nYycsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0zLCBhcmd2YWw9J2QnLCBhcmdyZXByPSdkJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0nZScsIGFyZ3JlcHI9J2UnLCBvZmZzZXQ9MTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MSwgYXJndmFsPSdmJywgYXJncmVwcj0nZicsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9NiwgYXJndmFsPTYsIGFyZ3JlcHI9JzYgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1JFVFVSTl9WQUxVRScsIG9wY29kZT04MywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKK10KKworZXhwZWN0ZWRfb3BpbmZvX2p1bXB5ID0gWworICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX0xPT1AnLCBvcGNvZGU9MTIwLCBhcmc9NzQsIGFyZ3ZhbD03NywgYXJncmVwcj0ndG8gNzcnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9MywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTAsIGFyZ3ZhbD0ncmFuZ2UnLCBhcmdyZXByPSdyYW5nZScsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9MTAsIGFyZ3JlcHI9JzEwJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdHRVRfSVRFUicsIG9wY29kZT02OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdGT1JfSVRFUicsIG9wY29kZT05MywgYXJnPTUwLCBhcmd2YWw9NjYsIGFyZ3JlcHI9J3RvIDY2Jywgb2Zmc2V0PTEzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTVE9SRV9GQVNUJywgb3Bjb2RlPTEyNSwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTksIHN0YXJ0c19saW5lPTQsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0yMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjksIHN0YXJ0c19saW5lPTUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTIsIGFyZ3ZhbD00LCBhcmdyZXByPSc0Jywgb2Zmc2V0PTMyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz0wLCBhcmd2YWw9JzwnLCBhcmdyZXByPSc8Jywgb2Zmc2V0PTM1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9NDcsIGFyZ3ZhbD00NywgYXJncmVwcj0nJywgb2Zmc2V0PTM4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NDEsIHN0YXJ0c19saW5lPTYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MCwgYXJndmFsPTQ3LCBhcmdyZXByPSd0byA0NycsIG9mZnNldD00NCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTQ3LCBzdGFydHNfbGluZT03LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD02LCBhcmdyZXByPSc2Jywgb2Zmc2V0PTUwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz00LCBhcmd2YWw9Jz4nLCBhcmdyZXByPSc+Jywgb2Zmc2V0PTUzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTU2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlJFQUtfTE9PUCcsIG9wY29kZT04MCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTksIHN0YXJ0c19saW5lPTgsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD02MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTYzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD02Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTY3LCBzdGFydHNfbGluZT0xMCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NCwgYXJndmFsPSdJIGNhbiBoYXogZWxzZSBjbGF1c2U/JywgYXJncmVwcj0iJ0kgY2FuIGhheiBlbHNlIGNsYXVzZT8nIiwgb2Zmc2V0PTcwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD03Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9MT09QJywgb3Bjb2RlPTEyMCwgYXJnPTc0LCBhcmd2YWw9MTU0LCBhcmdyZXByPSd0byAxNTQnLCBvZmZzZXQ9NzcsIHN0YXJ0c19saW5lPTExLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD04MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTQzLCBhcmd2YWw9MTQzLCBhcmdyZXByPScnLCBvZmZzZXQ9ODMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9ODYsIHN0YXJ0c19saW5lPTEyLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9ODksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTkyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD05NSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTk2LCBzdGFydHNfbGluZT0xMywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEnLCBvZmZzZXQ9OTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdJTlBMQUNFX1NVQlRSQUNUJywgb3Bjb2RlPTU2LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xMDIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTVE9SRV9GQVNUJywgb3Bjb2RlPTEyNSwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MTAzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MTA2LCBzdGFydHNfbGluZT0xNCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPTYsIGFyZ3JlcHI9JzYnLCBvZmZzZXQ9MTA5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz00LCBhcmd2YWw9Jz4nLCBhcmdyZXByPSc+Jywgb2Zmc2V0PTExMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTEyNCwgYXJndmFsPTEyNCwgYXJncmVwcj0nJywgb2Zmc2V0PTExNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTExOCwgc3RhcnRzX2xpbmU9MTUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MCwgYXJndmFsPTEyNCwgYXJncmVwcj0ndG8gMTI0Jywgb2Zmc2V0PTEyMSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEyNCwgc3RhcnRzX2xpbmU9MTYsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MiwgYXJndmFsPTQsIGFyZ3JlcHI9JzQnLCBvZmZzZXQ9MTI3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz0wLCBhcmd2YWw9JzwnLCBhcmdyZXByPSc8Jywgb2Zmc2V0PTEzMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xMzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCUkVBS19MT09QJywgb3Bjb2RlPTgwLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xMzYsIHN0YXJ0c19saW5lPTE3LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTM3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTQwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNDMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0xNDQsIHN0YXJ0c19saW5lPTE5LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz02LCBhcmd2YWw9J1dobyBsZXQgbG9sY2F0eiBpbnRvIHRoaXMgdGVzdCBzdWl0ZT8nLCBhcmdyZXByPSInV2hvIGxldCBsb2xjYXR6IGludG8gdGhpcyB0ZXN0IHN1aXRlPyciLCBvZmZzZXQ9MTQ3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0xNTAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE1Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX0ZJTkFMTFknLCBvcGNvZGU9MTIyLCBhcmc9NzIsIGFyZ3ZhbD0yMjksIGFyZ3JlcHI9J3RvIDIyOScsIG9mZnNldD0xNTQsIHN0YXJ0c19saW5lPTIwLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9FWENFUFQnLCBvcGNvZGU9MTIxLCBhcmc9MTIsIGFyZ3ZhbD0xNzIsIGFyZ3JlcHI9J3RvIDE3MicsIG9mZnNldD0xNTcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTE2MCwgc3RhcnRzX2xpbmU9MjEsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTcsIGFyZ3ZhbD0wLCBhcmdyZXByPScwJywgb2Zmc2V0PTE2Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JJTkFSWV9UUlVFX0RJVklERScsIG9wY29kZT0yNywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTY2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNjcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE2OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfRk9SV0FSRCcsIG9wY29kZT0xMTAsIGFyZz0yOCwgYXJndmFsPTIwMCwgYXJncmVwcj0ndG8gMjAwJywgb2Zmc2V0PTE2OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0RVUF9UT1AnLCBvcGNvZGU9NCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTcyLCBzdGFydHNfbGluZT0yMiwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MiwgYXJndmFsPSdaZXJvRGl2aXNpb25FcnJvcicsIGFyZ3JlcHI9J1plcm9EaXZpc2lvbkVycm9yJywgb2Zmc2V0PTE3Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MTAsIGFyZ3ZhbD0nZXhjZXB0aW9uIG1hdGNoJywgYXJncmVwcj0nZXhjZXB0aW9uIG1hdGNoJywgb2Zmc2V0PTE3Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTE5OSwgYXJndmFsPTE5OSwgYXJncmVwcj0nJywgb2Zmc2V0PTE3OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTgyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4NCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0xODUsIHN0YXJ0c19saW5lPTIzLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz04LCBhcmd2YWw9J0hlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4nLCBhcmdyZXByPSInSGVyZSB3ZSBnbywgaGVyZSB3ZSBnbywgaGVyZSB3ZSBnby4uLiciLCBvZmZzZXQ9MTg4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0xOTEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE5NCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9FWENFUFQnLCBvcGNvZGU9ODksIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE5NSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfRk9SV0FSRCcsIG9wY29kZT0xMTAsIGFyZz0yNiwgYXJndmFsPTIyNSwgYXJncmVwcj0ndG8gMjI1Jywgb2Zmc2V0PTE5Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0VORF9GSU5BTExZJywgb3Bjb2RlPTg4LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTIwMCwgc3RhcnRzX2xpbmU9MjUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX1dJVEgnLCBvcGNvZGU9MTQzLCBhcmc9MTcsIGFyZ3ZhbD0yMjMsIGFyZ3JlcHI9J3RvIDIyMycsIG9mZnNldD0yMDMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTVE9SRV9GQVNUJywgb3Bjb2RlPTEyNSwgYXJnPTEsIGFyZ3ZhbD0nZG9kZ3knLCBhcmdyZXByPSdkb2RneScsIG9mZnNldD0yMDYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MjA5LCBzdGFydHNfbGluZT0yNiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9OSwgYXJndmFsPSdOZXZlciByZWFjaCB0aGlzJywgYXJncmVwcj0iJ05ldmVyIHJlYWNoIHRoaXMnIiwgb2Zmc2V0PTIxMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIxOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjIwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nV0lUSF9DTEVBTlVQJywgb3Bjb2RlPTgxLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMjMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0VORF9GSU5BTExZJywgb3Bjb2RlPTg4LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMjQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIyNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yMjYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MjI5LCBzdGFydHNfbGluZT0yOCwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xMCwgYXJndmFsPSJPSywgbm93IHdlJ3JlIGRvbmUiLCBhcmdyZXByPSciT0ssIG5vdyB3ZVwncmUgZG9uZSInLCBvZmZzZXQ9MjMyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0yMzUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIzOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0VORF9GSU5BTExZJywgb3Bjb2RlPTg4LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTI0MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1JFVFVSTl9WQUxVRScsIG9wY29kZT04MywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjQzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2NsYXNzIEluc3RydWN0aW9uVGVzdHMoQnl0ZWNvZGVUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfb3V0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Qnl0ZWNvZGVFeGFjdGx5TWF0Y2hlcyhvdXRlciwgZXhwZWN0ZWRfb3BpbmZvX291dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9vZmZzZXQ9ZXhwZWN0ZWRfb3V0ZXJfb2Zmc2V0KQorCisgICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpOgorICAgICAgICAgICAgZiA9IG91dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRCeXRlY29kZUV4YWN0bHlNYXRjaGVzKGYsIGV4cGVjdGVkX29waW5mb19mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9vZmZzZXQ9ZXhwZWN0ZWRfb3V0ZXJfb2Zmc2V0KQorCisgICAgZGVmIHRlc3RfZG91Ymx5X25lc3RlZChzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAgICAgICAgIGlubmVyID0gb3V0ZXIoKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0Qnl0ZWNvZGVFeGFjdGx5TWF0Y2hlcyhpbm5lciwgZXhwZWN0ZWRfb3BpbmZvX2lubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9vZmZzZXQ9ZXhwZWN0ZWRfb3V0ZXJfb2Zmc2V0KQorCisgICAgZGVmIHRlc3RfanVtcHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Qnl0ZWNvZGVFeGFjdGx5TWF0Y2hlcyhqdW1weSwgZXhwZWN0ZWRfb3BpbmZvX2p1bXB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9vZmZzZXQ9ZXhwZWN0ZWRfanVtcHlfb2Zmc2V0KQorCitjbGFzcyBCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbnN0YW50aWF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBmdW5jdGlvbiwgbWV0aG9kLCBjb2RlIHN0cmluZyBhbmQgY29kZSBvYmplY3QKKyAgICAgICAgZm9yIG9iaiBpbiBbX2YsIF9DKDEpLl9faW5pdF9fLCAiYT0xIiwgX2YuX19jb2RlX19dOgorICAgICAgICAgICAgYiA9IGRpcy5CeXRlY29kZShvYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYi5jb2Rlb2JqLCB0eXBlcy5Db2RlVHlwZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpcy5CeXRlY29kZSwgb2JqZWN0KCkpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb24oc2VsZik6CisgICAgICAgIGIgPSBkaXMuQnl0ZWNvZGUoX2YpCisgICAgICAgIGZvciBpbnN0ciBpbiBiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluc3RyLCBkaXMuSW5zdHJ1Y3Rpb24pCisKKyAgICAgICAgYXNzZXJ0IGxlbihsaXN0KGIpKSA+IDAgICMgSXRlcmF0aW5nIHNob3VsZCB5aWVsZCBhdCBsZWFzdCAxIGluc3RydWN0aW9uCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSAxMDAwCisgICAgICAgIGZvciB4LCBleHBlY3RlZCBpbiBDb2RlSW5mb1Rlc3RzLnRlc3RfcGFpcnM6CisgICAgICAgICAgICBiID0gZGlzLkJ5dGVjb2RlKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGIuaW5mbygpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Rpc3BsYXlfY29kZShzZWxmKToKKyAgICAgICAgYiA9IGRpcy5CeXRlY29kZShfZikKKyAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBiLmRpc3BsYXlfY29kZShmaWxlPW91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gb3V0cHV0LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZGlzX2Yuc3BsaXRsaW5lcygpKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoRGlzVGVzdHMsIENvZGVJbmZvVGVzdHMpCisgICAgcnVuX3VuaXR0ZXN0KERpc1Rlc3RzLCBDb2RlSW5mb1Rlc3RzLCBJbnN0cnVjdGlvblRlc3RzLCBCeXRlY29kZVRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKaW5kZXggOGY4YzdjNy4uZDRmZjA0OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQpAQCAtMTQwOSw4ICsxNDA5LDQwIEBACiAgICAgICAgIDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCiAKLUZvciB0aGUgcHVycG9zZXMgb2YgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSwgdW5leHBlY3RlZCBleGNlcHRpb25zCi1jb3VudCBhcyBmYWlsdXJlczoKK1RoZSBGQUlMX0ZBU1QgZmxhZyBjYXVzZXMgdGhlIHJ1bm5lciB0byBleGl0IGFmdGVyIHRoZSBmaXJzdCBmYWlsaW5nIGV4YW1wbGUsCitzbyBzdWJzZXF1ZW50IGV4YW1wbGVzIGFyZSBub3QgZXZlbiBhdHRlbXB0ZWQ6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVAorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK1NwZWNpZnlpbmcgYm90aCBGQUlMX0ZBU1QgYW5kIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgaXMgZXF1aXZhbGVudCB0bworRkFJTF9GQVNUIG9ubHk6CisKKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkZBSUxfRkFTVCB8IGRvY3Rlc3QuUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50KDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgYm90aCBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIGFuZCBGQUlMX0ZBU1QsIHVuZXhwZWN0ZWQKK2V4Y2VwdGlvbnMgY291bnQgYXMgZmFpbHVyZXM6CiAKICAgICA+Pj4gZGVmIGYoeCk6CiAgICAgLi4uICAgICByJycnCkBAIC0xNDM3LDYgKzE0NjksMTcgQEAKICAgICAgICAgLi4uCiAgICAgICAgIFZhbHVlRXJyb3I6IDIKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5GQUlMX0ZBU1QKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKDIpICMgZmlyc3QgZmFpbHVyZQorICAgIEV4Y2VwdGlvbiByYWlzZWQ6CisgICAgICAgIC4uLgorICAgICAgICBWYWx1ZUVycm9yOiAyCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQogCiBOZXcgb3B0aW9uIGZsYWdzIGNhbiBhbHNvIGJlIHJlZ2lzdGVyZWQsIHZpYSByZWdpc3Rlcl9vcHRpb25mbGFnKCkuICBIZXJlCiB3ZSByZWFjaCBpbnRvIGRvY3Rlc3QncyBpbnRlcm5hbHMgYSBiaXQuCkBAIC0yNTUzLDYgKzI1OTYsMjQwIEBACiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQogICAgICIiIgogCitkZWYgdGVzdF9DTEkoKTogciIiIgorVGhlIGRvY3Rlc3QgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIHJ1biBkb2N0ZXN0cyBhZ2FpbnN0IGFuIGFyYml0cmFyeSBmaWxlLgorVGhlc2UgdGVzdHMgdGVzdCB0aGlzIENMSSBmdW5jdGlvbmFsaXR5LgorCitXZSdsbCB1c2UgdGhlIHN1cHBvcnQgbW9kdWxlJ3Mgc2NyaXB0X2hlbHBlcnMgZm9yIHRoaXMsIGFuZCB3cml0ZSBhIHRlc3QgZmlsZXMKK3RvIGEgdGVtcCBkaXIgdG8gcnVuIHRoZSBjb21tYW5kIGFnYWluc3QuICBEdWUgdG8gYSBjdXJyZW50IGxpbWl0YXRpb24gaW4KK3NjcmlwdF9oZWxwZXJzLCB0aG91Z2gsIHdlIG5lZWQgYSBsaXR0bGUgdXRpbGl0eSBmdW5jdGlvbiB0byB0dXJuIHRoZSByZXR1cm5lZAorb3V0cHV0IGludG8gc29tZXRoaW5nIHdlIGNhbiBkb2N0ZXN0IGFnYWluc3Q6CisKKyAgICA+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+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9uZXdfZ2V0dGVyX25ld19kb2NzdHJpbmcoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIEBzcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgY2xhc3MgRm9vQmFzZShvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEZvbzIoRm9vQmFzZSk6CisgICAgICAgICAgICBzcGFtID0gRm9vQmFzZS5fX2RpY3RfX1snc3BhbSddCisgICAgICAgICAgICBAc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19pbml0X18ucHkKaW5kZXggZjIwNmFjZS4uZDg4OTZlZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19faW5pdF9fLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBlbWFpbAogZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBjb21wYXQzMgpAQCAtNDIsNiArNDMsOCBAQAogICAgICMgaGVyZSB3ZSBtYWtlIG1pbmltYWwgY2hhbmdlcyBpbiB0aGUgdGVzdF9lbWFpbCB0ZXN0cyBjb21wYXJlZCB0byB0aGVpcgogICAgICMgcHJlLTMuMyBzdGF0ZS4KICAgICBwb2xpY3kgPSBjb21wYXQzMgorICAgICMgTGlrZXdpc2UsIHRoZSBkZWZhdWx0IG1lc3NhZ2Ugb2JqZWN0IGlzIE1lc3NhZ2UuCisgICAgbWVzc2FnZSA9IE1lc3NhZ2UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3cpCkBAIC01NCwxMSArNTcsMjMgQEAKICAgICAgICAgd2l0aCBvcGVuZmlsZShmaWxlbmFtZSkgYXMgZnA6CiAgICAgICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnAsIHBvbGljeT1zZWxmLnBvbGljeSkKIAotICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9TWVzc2FnZSwgcG9saWN5PU5vbmUpOgorICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9Tm9uZSwgcG9saWN5PU5vbmUpOgogICAgICAgICBpZiBwb2xpY3kgaXMgTm9uZToKICAgICAgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5CisgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLm1lc3NhZ2UKICAgICAgICAgcmV0dXJuIGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoc3RyaW5nLCBtZXNzYWdlLCBwb2xpY3k9cG9saWN5KQogCisgICAgZGVmIF9ieXRlc19tc2coc2VsZiwgYnl0ZXN0cmluZywgbWVzc2FnZT1Ob25lLCBwb2xpY3k9Tm9uZSk6CisgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgorICAgICAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kKKyAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYubWVzc2FnZQorICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKGJ5dGVzdHJpbmcsIG1lc3NhZ2UsIHBvbGljeT1wb2xpY3kpCisKKyAgICBkZWYgX21ha2VfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWVzc2FnZShwb2xpY3k9c2VsZi5wb2xpY3kpCisKICAgICBkZWYgX2J5dGVzX3JlcHIoc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBbcmVwcih4KSBmb3IgeCBpbiBiLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSldCiAKQEAgLTEyMyw2ICsxMzgsNyBAQAogCiAgICAgIiIiCiAgICAgcGFyYW1kaWN0cyA9IHt9CisgICAgdGVzdGVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJ19wYXJhbXMnKToKICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGF0dHIsICdrZXlzJyk6CkBAIC0xMzQsNyArMTUwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGRbbl0gPSB4CiAgICAgICAgICAgICAgICAgYXR0ciA9IGQKICAgICAgICAgICAgIHBhcmFtZGljdHNbbmFtZVs6LTddICsgJ19hc18nXSA9IGF0dHIKKyAgICAgICAgaWYgJ19hc18nIGluIG5hbWU6CisgICAgICAgICAgICB0ZXN0ZXJzW25hbWUuc3BsaXQoJ19hc18nKVswXSArICdfYXNfJ10uYXBwZW5kKG5hbWUpCiAgICAgdGVzdGZ1bmNzID0ge30KKyAgICBmb3IgbmFtZSBpbiBwYXJhbWRpY3RzOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiB0ZXN0ZXJzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gdGVzdGVyIGZvdW5kIGZvciB7fSIuZm9ybWF0KG5hbWUpKQorICAgIGZvciBuYW1lIGluIHRlc3RlcnM6CisgICAgICAgIGlmIG5hbWUgbm90IGluIHBhcmFtZGljdHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBwYXJhbXMgZm91bmQgZm9yIHt9Ii5mb3JtYXQobmFtZSkpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGZvciBwYXJhbXNuYW1lLCBwYXJhbXNkaWN0IGluIHBhcmFtZGljdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwYXJhbXNuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjI5ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsNzk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlLCBwYXJhbWV0ZXJpemUKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Citmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgQ29udGVudE1hbmFnZXIsIHJhd19kYXRhX21hbmFnZXIKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0Q29udGVudE1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdAorICAgIG1lc3NhZ2UgPSBFbWFpbE1lc3NhZ2UKKworICAgIGdldF9rZXlfcGFyYW1zID0geworICAgICAgICAnZnVsbF90eXBlJzogICAgICAgICgxLCAndGV4dC9wbGFpbicsKSwKKyAgICAgICAgJ21haW50eXBlX29ubHknOiAgICAoMiwgJ3RleHQnLCksCisgICAgICAgICdudWxsX2tleSc6ICAgICAgICAgKDMsICcnLCksCisgICAgICAgIH0KKworICAgIGRlZiBnZXRfa2V5X2FzX2dldF9jb250ZW50X2tleShzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGZvb19nZXR0ZXIobXNnLCBmb289Tm9uZSk6CisgICAgICAgICAgICBiYXIgPSBtc2dbJ1gtQmFyLUhlYWRlciddCisgICAgICAgICAgICByZXR1cm4gZm9vLCBiYXIKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtWydYLUJhci1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSwgZm9vPSdiYXInKSwgKCdiYXInLCAnZm9vJykpCisKKyAgICBkZWYgZ2V0X2tleV9hc19nZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBiYXJfZ2V0dGVyKG1zZyk6CisgICAgICAgICAgICByZXR1cm4gbXNnWydYLUJhci1IZWFkZXInXQorICAgICAgICBkZWYgZm9vX2dldHRlcihtc2cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZ1snWC1Gb28tSGVhZGVyJ10KKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIGZvciBwcmVjZWRlbmNlLCBrZXkgaW4gc2VsZi5nZXRfa2V5X3BhcmFtcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHByZWNlZGVuY2UgPiBvcmRlcjoKKyAgICAgICAgICAgICAgICBjbS5hZGRfZ2V0X2hhbmRsZXIoa2V5LCBiYXJfZ2V0dGVyKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgbVsnWC1CYXItSGVhZGVyJ10gPSAnYmFyJworICAgICAgICBtWydYLUZvby1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSksICgnZm9vJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9yYWlzZXNfaWZfdW5rbm93bl9taW1ldHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoS2V5RXJyb3IsICd0ZXh0L3BsYWluJyk6CisgICAgICAgICAgICBjbS5nZXRfY29udGVudChtKQorCisgICAgY2xhc3MgQmFzZVRoaW5nKHN0cik6CisgICAgICAgIHBhc3MKKyAgICBiYXNlb2JqZWN0X2Z1bGxfcGF0aCA9IF9fbmFtZV9fICsgJy4nICsgJ1Rlc3RDb250ZW50TWFuYWdlci5CYXNlVGhpbmcnCisgICAgY2xhc3MgVGhpbmcoQmFzZVRoaW5nKToKKyAgICAgICAgcGFzcworICAgIHRlc3RvYmplY3RfZnVsbF9wYXRoID0gX19uYW1lX18gKyAnLicgKyAnVGVzdENvbnRlbnRNYW5hZ2VyLlRoaW5nJworCisgICAgc2V0X2tleV9wYXJhbXMgPSB7CisgICAgICAgICd0eXBlJzogICAgICAgICAgICAgKDAsICBUaGluZywpLAorICAgICAgICAnZnVsbF9wYXRoJzogICAgICAgICgxLCAgdGVzdG9iamVjdF9mdWxsX3BhdGgsKSwKKyAgICAgICAgJ3F1YWxuYW1lJzogICAgICAgICAoMiwgICdUZXN0Q29udGVudE1hbmFnZXIuVGhpbmcnLCksCisgICAgICAgICduYW1lJzogICAgICAgICAgICAgKDMsICAnVGhpbmcnLCksCisgICAgICAgICdiYXNlX3R5cGUnOiAgICAgICAgKDQsICBCYXNlVGhpbmcsKSwKKyAgICAgICAgJ2Jhc2VfZnVsbF9wYXRoJzogICAoNSwgIGJhc2VvYmplY3RfZnVsbF9wYXRoLCksCisgICAgICAgICdiYXNlX3F1YWxuYW1lJzogICAgKDYsICAnVGVzdENvbnRlbnRNYW5hZ2VyLkJhc2VUaGluZycsKSwKKyAgICAgICAgJ2Jhc2VfbmFtZSc6ICAgICAgICAoNywgICdCYXNlVGhpbmcnLCksCisgICAgICAgICdzdHJfdHlwZSc6ICAgICAgICAgKDgsICBzdHIsKSwKKyAgICAgICAgJ3N0cl9mdWxsX3BhdGgnOiAgICAoOSwgICdidWlsdGlucy5zdHInLCksCisgICAgICAgICdzdHJfbmFtZSc6ICAgICAgICAgKDEwLCAnc3RyJywpLCAgICMgc3RyIG5hbWUgYW5kIHF1YWxuYW1lIGFyZSB0aGUgc2FtZQorICAgICAgICAnbnVsbF9rZXknOiAgICAgICAgICgxMSwgTm9uZSwpLAorICAgICAgICB9CisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXkoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqLCBmb289Tm9uZSk6CisgICAgICAgICAgICBtc2dbJ1gtRm9vLUhlYWRlciddID0gZm9vCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQob2JqKQorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgZm9vX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaiwgZm9vPSdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ1gtRm9vLUhlYWRlciddLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksIG1zZ19vYmopCisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqKToKKyAgICAgICAgICAgIG1zZ1snWC1Gb29CYXItSGVhZGVyJ10gPSAnZm9vJworICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKG9iaikKKyAgICAgICAgZGVmIGJhcl9zZXR0ZXIobXNnLCBvYmopOgorICAgICAgICAgICAgbXNnWydYLUZvb0Jhci1IZWFkZXInXSA9ICdiYXInCisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBjbS5hZGRfc2V0X2hhbmRsZXIoa2V5LCBmb29fc2V0dGVyKQorICAgICAgICBmb3IgcHJlY2VkZW5jZSwga2V5IGluIHNlbGYuZ2V0X2tleV9wYXJhbXMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBwcmVjZWRlbmNlID4gb3JkZXI6CisgICAgICAgICAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgYmFyX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydYLUZvb0Jhci1IZWFkZXInXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgpLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX3Vua25vd25fdHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtc2dfb2JqID0gc2VsZi5UaGluZygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChLZXlFcnJvciwgc2VsZi50ZXN0b2JqZWN0X2Z1bGxfcGF0aCk6CisgICAgICAgICAgICBjbS5zZXRfY29udGVudChtLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX2NhbGxlZF9vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L2ZvbycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgJ3Rlc3QnKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfY2FsbHNfY2xlYXJfY29udGVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1bJ0NvbnRlbnQtRm9vJ10gPSAnYmFyJworICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L2h0bWwnCisgICAgICAgIG1bJ1RvJ10gPSAndGVzdCcKKyAgICAgICAgbS5zZXRfcGF5bG9hZCgnYWJjJykKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9zZXRfaGFuZGxlcihzdHIsIGxhbWJkYSAqYXJncywgKiprdzogTm9uZSkKKyAgICAgICAgbS5zZXRfY29udGVudCgneHl6JywgY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LUZvbyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LVR5cGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydUbyddLCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0UmF3RGF0YU1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisgICAgIyBOb3RlOiB0aGVzZSB0ZXN0cyBhcmUgZGVwZW5kZW50IG9uIHRoZSBvcmRlciBpbiB3aGljaCBoZWFkZXJzIGFyZSBhZGRlZAorICAgICMgdG8gdGhlIG1lc3NhZ2Ugb2JqZWN0cyBieSB0aGUgY29kZS4gIFRoZXJlJ3Mgbm8gZGVmaW5lZCBvcmRlcmluZyBpbgorICAgICMgUkZDNTMyMi9NSU1FLCBzbyB0aGlzIG1ha2VzIHRoZSB0ZXN0cyBtb3JlIGZyYWdpbGUgdGhhbiB0aGUgc3RhbmRhcmRzCisgICAgIyByZXF1aXJlLiAgSG93ZXZlciwgaWYgdGhlIGhlYWRlciBvcmRlciBjaGFuZ2VzIGl0IGlzIGJlc3QgdG8gdW5kZXJzdGFuZAorICAgICMgKndoeSosIGFuZCBtYWtlIHN1cmUgaXQgaXNuJ3QgYSBzdWJ0bGUgYnVnIGluIHdoYXRldmVyIGNoYW5nZSB3YXMKKyAgICAjIGFwcGxpZWQuCisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShtYXhfbGluZV9sZW5ndGg9NjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyPXJhd19kYXRhX21hbmFnZXIpCisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW4oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc2ljIHRleHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfaHRtbChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgIDxwPkJhc2ljIHRleHQuPC9wPgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8cD5CYXNpYyB0ZXh0LjwvcD5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9sYXRpbjEoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9ieXRlc19tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1sYXRpbjEKKworICAgICAgICAgICAgQmFzw6xjIHTDq3h0LgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2xhdGluMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fbGF0aW4xX3F1b3RlZF9wcmludGFibGUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9ImxhdGluLTEiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisKKyAgICAgICAgICAgIEJhcz1FQ2MgdD1FQnh0LgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLCAiQmFzw6xjIHTDq3h0LlxuIikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X3BsYWluX3V0ZjhfYmFzZTY0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ289CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgQmFzPWMzPWFjYyB0PWMzPWFieHQ9ZmQuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHTvv70uXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZV9pZ25vcmVfZXJyb3JzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgICAgICBCYXM9YzM9YWNjIHQ9YzM9YWJ4dD1mZC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtLCBlcnJvcnM9J2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fdXRmOF9iYXNlNjRfcmVjb3ZlcmFibGVfYmFkX0NURV9kYXRhKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ29ceEZGPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0sIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZm9vPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X25vbl90ZXh0KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHt9CisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgWW05bmRYTWdaR0YwWVE9PQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobWFpbnR5cGU9bWFpbnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChtYWludHlwZSsnL2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgYiJib2d1cyBkYXRhIikKKworICAgIGRlZiB0ZXN0X2dldF9ub25fdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFltOW5kWE1nWkdGMFlRPT0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZXJyb3JzPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X3JhaXNlc19vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorCisgICAgZGVmIHRlc3RfZ2V0X21lc3NhZ2VfcmZjODIyX2FuZF9leHRlcm5hbF9ib2R5KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2Uve30KKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIGFuIGV4YW1wbGUgbWVzc2FnZQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChzdWJ0eXBlKSkKKyAgICAgICAgICAgICAgICBzdWJfbXNnID0gcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJfbXNnLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KHN1Yl9tc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGV4YW1wbGUgbWVzc2FnZVxuIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl9tc2dbJ3RvJ10sICdmb29AZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX21zZ1snZnJvbSddLmFkZHJlc3Nlc1swXS51c2VybmFtZSwgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9nZXRfbWVzc2FnZV9ub25fcmZjODIyX29yX2V4dGVybmFsX2JvZHlfeWllbGRzX2J5dGVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3BhcnRpYWwKKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIFRoZSByZWFsIGJvZHkgaXMgaW4gYW5vdGhlciBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pWzoxMF0sIGInVG86IGZvb0BleCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9wbGFpbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2h0bWwoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIjxwPlNpbXBsZSBtZXNzYWdlLjwvcD5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBzdWJ0eXBlPSdodG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIDxwPlNpbXBsZSBtZXNzYWdlLjwvcD4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2NoYXJzZXRfbGF0aW5fMShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgY2hhcnNldD0nbGF0aW4tMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X3Nob3J0X2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiZXQgbMOgIGlsIGVzdCBtb250w6kgc3VyIG1vaSBldCBpbCBjb21tZW5jZSDDoCBtJ8OpdG8uXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIGV0IGzDoCBpbCBlc3QgbW9udMOpIHN1ciBtb2kgZXQgaWwgY29tbWVuY2Ugw6AgbSfDqXRvLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2xvbmdfbGluZV9taW5pbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgICIgw6AgbSfDqXRvLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAnXG4nKjEwICsgKAorICAgICAgICAgICAgICAgICAgImonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiIKKyAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgIiDDoCBtJ8OpdG8uXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9tYXhpbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICDDocOgw6TDqcOoxJnDtsWRLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0XzExX2xpbmVzX21heGltYWxfbm9uX2FzY2lpX2hldXJpc3RpY3Moc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gJ1xuJyoxMCArICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgw6HDoMOkw6nDqMSZw7bFkS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAoIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEuXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIHc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09veEpuRAorICAgICAgICAgICAgdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09vCisgICAgICAgICAgICB4Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VEQKKyAgICAgICAgICAgIHFjT294Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZworICAgICAgICAgICAgdzZURHFjT294Sm5EdHNXUkxnbz0KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgIyBZZXMsIGl0IGNob29zZXMgIndyb25nIiBoZXJlLiAgSXQncyBhIGhldXJpc3RpYy4gIFNvIHRoaXMgcmVzdWx0CisgICAgICAgICMgY291bGQgY2hhbmdlIGlmIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBoZXVyaXN0aWMuCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gKCdcbicqMTAgKworICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCAiXG4iKjEwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkS5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPQorICAgICAgICAgICAgPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PQorICAgICAgICAgICAgPUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPQorICAgICAgICAgICAgPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PQorICAgICAgICAgICAgPUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PQorICAgICAgICAgICAgPTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPQorICAgICAgICAgICAgPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPQorICAgICAgICAgICAgPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PQorICAgICAgICAgICAgPUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PQorICAgICAgICAgICAgPTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PQorICAgICAgICAgICAgPUM1PTkxLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9ub25fYXNjaWlfd2l0aF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X2FuZF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkZvcndhcmRlZCBtZXNzYWdlIgorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudFsnVG8nXSA9ICdweXRob25Adml2YXJpdW0ub3JnJworICAgICAgICBjb250ZW50WydGcm9tJ10gPSAncG9saWNlQG1vbnR5Lm9yZycKKyAgICAgICAgY29udGVudFsnU3ViamVjdCddID0gImdldCBiYWNrIGluIHlvdXIgYm94IgorICAgICAgICBjb250ZW50LnNldF9jb250ZW50KCJPciBmYWNlIHRoZSBjb21meSBjaGFpci4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRm9yd2FyZGVkIG1lc3NhZ2UKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgVG86IHB5dGhvbkB2aXZhcml1bS5vcmcKKyAgICAgICAgICAgIEZyb206IHBvbGljZUBtb250eS5vcmcKKyAgICAgICAgICAgIFN1YmplY3Q6IGdldCBiYWNrIGluIHlvdXIgYm94CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgT3IgZmFjZSB0aGUgY29tZnkgY2hhaXIuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBwYXlsb2FkID0gbS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGF5bG9hZCwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwYXlsb2FkKSwgc3RyKGNvbnRlbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5nZXRfY29udGVudCgpLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0uZ2V0X2NvbnRlbnQoKSksIHN0cihjb250ZW50KSkKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlX3dpdGhfbm9uX2FzY2lpX2FuZF9jb2VyY2lvbl90b183Yml0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkVzY2FwZSByZXBvcnQiCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50WydUbyddID0gJ3BvbGljZUBtb250eS5vcmcnCisgICAgICAgIGNvbnRlbnRbJ0Zyb20nXSA9ICd2aWN0aW1AbW9udHkub3JnJworICAgICAgICBjb250ZW50WydTdWJqZWN0J10gPSAiSGVscCIKKyAgICAgICAgY29udGVudC5zZXRfY29udGVudCgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisKKyAgICAgICAgICAgIGonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcml1bS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICAjIFRoZSBjaG9pY2Ugb2YgYmFzZTY0IGZvciB0aGUgYm9keSBlbmNvZGluZyBpcyBiZWNhdXNlIGdlbmVyYXRvcgorICAgICAgICAjIGRvZXNuJ3QgYm90aGVyIHdpdGggaGV1cmlzdGljcyBhbmQgdXNlcyBpdCB1bmNvbmRpdGlvbmFsbHkgZm9yIHV0Zi04CisgICAgICAgICMgdGV4dC4KKyAgICAgICAgIyBYWFg6IHRoZSBmaXJzdCBjdGUgc2hvdWxkIGJlIDdiaXQsIHRvby4uLnRoYXQncyBhIGdlbmVyYXRvciBidWcuCisgICAgICAgICMgWFhYOiB0aGUgbGluZSBsZW5ndGggaW4gdGhlIGJvZHkgYWxzbyBsb29rcyBsaWtlIGEgZ2VuZXJhdG9yIGJ1Zy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmFzX3N0cmluZyhtYXhoZWFkZXJsZW49c2VsZi5wb2xpY3kubWF4X2xpbmVfbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgYWlkaGFTQjFiaUJ3Y205aWJNT29iV1VnWkdVZ2NIbDBhRzl1TGlCcGJDQmxjM1FnYzI5eWRHa2daR1VnYzI5dUlIWnBkbUZ5YVhWdAorICAgICAgICAgICAgTGdvPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uZ2V0X2NvbnRlbnQoKSwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtLmdldF9jb250ZW50KCkpLCBzdHIoY29udGVudCkpCisKKyAgICBkZWYgdGVzdF9zZXRfbWVzc2FnZV9pbnZhbGlkX2N0ZV9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgZm9yIGN0ZSBpbiAncXVvdGVkLXByaW50YWJsZSBiYXNlNjQnLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY3RlPWN0ZSwgc3VidHlwZT1zdWJ0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBhcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gc3RyKGFyLmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdGUsIGV4YykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisgICAgICAgIHN1YnR5cGUgPSAnZXh0ZXJuYWwtYm9keScKKyAgICAgICAgZm9yIGN0ZSBpbiAnOGJpdCBiaW5hcnknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjdGU9Y3RlLCBzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYXI6CisgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICBleGMgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3RlLCBleGMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisKKyAgICBkZWYgdGVzdF9zZXRfaW1hZ2VfanBnKHNlbGYpOgorICAgICAgICBmb3IgY29udGVudCBpbiAoYiJib2d1cyBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiImJvZ3VzIGNvbnRlbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJib2d1cyBjb250ZW50IikpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY29udGVudD1jb250ZW50KToKKyAgICAgICAgICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsICdpbWFnZScsICdqcGVnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnCisgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCisgICAgICAgICAgICAgICAgICAgIFltOW5kWE1nWTI5dWRHVnVkQT09CisgICAgICAgICAgICAgICAgICAgICIiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgY29udGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hdWRpb19haWZfd2l0aF9xdW90ZWRfcHJpbnRhYmxlX2N0ZShzZWxmKToKKyAgICAgICAgIyBXaHkgeW91IHdvdWxkIHVzZSBxcCwgSSBkb24ndCBrbm93LCBidXQgaXQgaXMgdGVjaG5pY2FsbHkgc3VwcG9ydGVkLgorICAgICAgICAjIFhYWDogdGhlIGluY29ycmVjdCBsaW5lIGxlbmd0aCBpcyBiZWNhdXNlIGJpbmFzY2lpLmIyYV9xcCBkb2Vzbid0CisgICAgICAgICMgc3VwcG9ydCBhIGxpbmUgbGVuZ3RoIHBhcmFtZXRlciwgYnV0IHdlIG11c3QgdXNlIGl0IHRvIGdldCBuZXdsaW5lCisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgICMgWFhYOiB3aGF0IGFib3V0IHRoYXQgbGFjayBvZiB0YWlsaW5nIG5ld2xpbmU/ICBEbyB3ZSBhY3R1YWxseSBoYW5kbGUKKyAgICAgICAgIyB0aGF0IGNvcnJlY3RseSBpbiBhbGwgY2FzZXM/ICBUaGF0IGlzLCBpZiB0aGUgKnNvdXJjZSogaGFzIGFuCisgICAgICAgICMgdW5lbmNvZGVkIG5ld2xpbmUsIGRvIHdlIGFkZCBhbiBleHRyYSBuZXdsaW5lIHRvIHRoZSByZXR1cm5lZCBwYXlsb2FkCisgICAgICAgICMgb3Igbm90PyAgQW5kIGNhbiB0aGF0IGFjdHVhbGx5IGJlIGRpc2FtYmlndWF0ZWQgYmFzZWQgb24gdGhlIFJGQz8KKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAnYXVkaW8nLCAnYWlmJywgY3RlPSdxdW90ZWQtcHJpbnRhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogYXVkaW8vYWlmCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBiPUZGZ3VzPTA5Y29uPTBBdD0wRGVudD0yMHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eno9CisgICAgICAgICAgICB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiIiIpLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF92aWRlb19tcGVnX3dpdGhfYmluYXJ5X2N0ZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAndmlkZW8nLCAnbXBlZycsIGN0ZT0nYmluYXJ5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdmlkZW8vbXBlZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSArCisgICAgICAgICAgICAjIFhYWDogdGhlIHNlY29uZCBcbiBvdWdodCB0byBiZSBhIFxyLCBidXQgZ2VuZXJhdG9yIGdldHMgaXQgd3JvbmcuCisgICAgICAgICAgICAjIFRISVMgTUVBTlMgV0UgRE9OJ1QgQUNUVUFMTFkgU1VQUE9SVCBUSEUgJ2JpbmFyeScgQ1RFLgorICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnQgenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JyArCisgICAgICAgICAgICBiJ3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hcHBsaWNhdGlvbl9vY3RldF9zdHJlYW1fd2l0aF84Yml0X2N0ZShzZWxmKToKKyAgICAgICAgIyBJbiA4Yml0IG1vZGUsIHVuaXZlcmFsIGxpbmUgZW5kIGxvZ2ljIGFwcGxpZXMuICBJdCBpcyB1cCB0byB0aGUKKyAgICAgICAgIyBhcHBsaWNhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpbmVzIGFyZSBzaG9ydCBlbm91Z2g7IHdlIGRvbid0IGNoZWNrLgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9IGInYlx4RkZndXNcdGNvblxudFxyZW50XG4nICsgYid6Jyo2MCArIGInXG4nCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgJ2FwcGxpY2F0aW9uJywgJ29jdGV0LXN0cmVhbScsIGN0ZT0nOGJpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2FzY2lpJykgKworICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnRcbicgKworICAgICAgICAgICAgYid6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enpcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfZnJvbV9oZWFkZXJfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIGhlYWRlcl9mYWN0b3J5ID0gc2VsZi5wb2xpY3kuaGVhZGVyX2ZhY3RvcnkKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJUbyIsICJmb29AZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJGcm9tIiwgImZvb0BleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoIlN1YmplY3QiLCAiSSdtIHRhbGtpbmcgdG8gbXlzZWxmLiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBJJ20gdGFsa2luZyB0byBteXNlbGYuCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFNpbXBsZSBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX2Zyb21fc3RyaW5ncyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAiWC1Gb28tSGVhZGVyOiBmb28iLAorICAgICAgICAgICAgIlgtQmFyLUhlYWRlcjogYmFyIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBYLUZvby1IZWFkZXI6IGZvbworICAgICAgICAgICAgWC1CYXItSGVhZGVyOiBiYXIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgU2ltcGxlIG1lc3NhZ2UuCisgICAgICAgICAgICAiIiIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfd2l0aF9pbnZhbGlkX2R1cGxpY2F0ZV9zdHJpbmdfaGVhZGVyX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnQ29udGVudC1UeXBlJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGZvby9iYXIiLCkKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zZXRfaGVhZGVyc193aXRoX2ludmFsaWRfZHVwbGljYXRlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ0NvbnRlbnQtVHlwZScpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgICAgICBoZWFkZXJfZmFjdG9yeSgiQ29udGVudC1UeXBlIiwgIiBmb28vYmFyIiksKQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX3N0cmluZ19oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdhQGZhaXJseUBAaW52YWxpZEBhZGRyZXNzJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICdUbzogYUBmYWlybHlAQGludmFsaWRAYWRkcmVzcycsKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHByaW50KG1bJ1RvJ10uZGVmZWN0cykKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoJ1RvJywgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKSwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcHJpbnQobVsnVG8nXS5kZWZlY3RzKQorCisgICAgZGVmIHRlc3Rfc2V0X2Rpc3Bvc2l0aW9uX2lubGluZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgdGVzdF9zZXRfZGlzcG9zaXRpb25fYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdhdHRhY2htZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdhdHRhY2htZW50JykKKworICAgIGRlZiB0ZXN0X3NldF9kaXNwb3NpdGlvbl9mb28oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBkaXNwb3NpdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdmb28nKQorCisgICAgIyBYWFg6IHdlIHNob3VsZCBoYXZlIGEgJ3N0cmljdCcgcG9saWN5IG1vZGUgKGJleW9uZCByYWlzZV9vbl9kZWZlY3QpIHRoYXQKKyAgICAjIHdvdWxkIGNhdXNlICdmb28nIGFib3ZlIHRvIHJhaXNlLgorCisgICAgZGVmIHRlc3Rfc2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J2Jhci50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWU9ImJhci50eHQiJykKKworICAgIGRlZiB0ZXN0X3NldF9maWxlbmFtZV9hbmRfZGlzcG9zaXRpb25faW5saW5lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiYXIudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmU7IGZpbGVuYW1lPSJiYXIudHh0IicpCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uX2FzY2lpX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J8OhYsOhcsOuLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsKKyAgICAgICAgICAgICBmaWxlbmFtZSo9dXRmLTgnJyVDMyVBMWIlQzMlQTFyJUMzJUFFLnR4dAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgZm9vCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGNvbnRlbnRfb2JqZWN0X3BhcmFtcyA9IHsKKyAgICAgICAgJ3RleHRfcGxhaW4nOiAoJ2NvbnRlbnQnLCAoKSksCisgICAgICAgICd0ZXh0X2h0bWwnOiAoJ2NvbnRlbnQnLCAoJ2h0bWwnLCkpLAorICAgICAgICAnYXBwbGljYXRpb25fb2N0ZXRfc3RyZWFtJzogKGInY29udGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhcHBsaWNhdGlvbicsICdvY3RldF9zdHJlYW0nKSksCisgICAgICAgICdpbWFnZV9qcGVnJzogKGInY29udGVudCcsICgnaW1hZ2UnLCAnanBlZycpKSwKKyAgICAgICAgJ21lc3NhZ2VfcmZjODIyJzogKG1lc3NhZ2UoKSwgKCkpLAorICAgICAgICAnbWVzc2FnZV9leHRlcm5hbF9ib2R5JzogKG1lc3NhZ2UoKSwgKCdleHRlcm5hbC1ib2R5JywpKSwKKyAgICAgICAgfQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2hlYWRlcl9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGhlYWRlcnM9KAorICAgICAgICAgICAgJ1RvOiBmb29AZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Zyb206IGJhckBzaW1wbGUubmV0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsndG8nXSwgJ2Zvb0BleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnZnJvbSddLCAnYmFyQHNpbXBsZS5uZXQnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2Rpc3Bvc2l0aW9uX2lubGluZV9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfbm9uX2FzY2lpX2ZpbGVuYW1lX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiw6FyLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lOyBmaWxlbmFtZT0iYsOhci50eHQiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9maWxlbmFtZSgpLCAiYsOhci50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXS5wYXJhbXNbJ2ZpbGVuYW1lJ10sICJiw6FyLnR4dCIpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfY2lkX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgY2lkPSdzb21lX3JhbmRvbV9zdHVmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1JRCddLCAnc29tZV9yYW5kb21fc3R1ZmYnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX3BhcmFtc19yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHBhcmFtcyA9IHsnZm9vJzogJ2LDoXInLCAnYWJjJzogJ3h5eid9CisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIHBhcmFtcz1wYXJhbXMpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdHIpOgorICAgICAgICAgICAgcGFyYW1zWydjaGFyc2V0J10gPSAndXRmLTgnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1UeXBlJ10ucGFyYW1zLCBwYXJhbXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weQppbmRleCA5MDRjMDZhLi5iNjJhODg5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZW1haWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CkBAIC0yNDksMTUgKzI0OSw0MiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1RPJyBpbiBtc2cpCiAKICAgICBkZWYgdGVzdF9hc19zdHJpbmcoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCiAgICAgICAgIHdpdGggb3BlbmZpbGUoJ21zZ18wMS50eHQnKSBhcyBmcDoKICAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKLSAgICAgICAgZXEodGV4dCwgc3RyKG1zZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgc3RyKG1zZykpCiAgICAgICAgIGZ1bGxyZXByID0gbXNnLmFzX3N0cmluZyh1bml4ZnJvbT1UcnVlKQogICAgICAgICBsaW5lcyA9IGZ1bGxyZXByLnNwbGl0KCdcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lc1swXS5zdGFydHN3aXRoKCdGcm9tICcpKQotICAgICAgICBlcSh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgTkwuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYXNfc3RyaW5nX3BvbGljeShzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgbmV3cG9saWN5ID0gbXNnLnBvbGljeS5jbG9uZShsaW5lc2VwPSdcclxuJykKKyAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfc3RyaW5nKHBvbGljeT1uZXdwb2xpY3kpCisgICAgICAgIHMgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3IocywgcG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdWxscmVwciwgcy5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXMoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCisgICAgICAgIHdpdGggb3BlbmZpbGUoJ21zZ18wMS50eHQnKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYnl0ZXMobXNnKSkKKyAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfYnl0ZXModW5peGZyb209VHJ1ZSkKKyAgICAgICAgbGluZXMgPSBmdWxscmVwci5zcGxpdChiJ1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoYidGcm9tICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInXG4nLmpvaW4obGluZXNbMTpdKSkKKworICAgIGRlZiB0ZXN0X2FzX2J5dGVzX3BvbGljeShzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgbmV3cG9saWN5ID0gbXNnLnBvbGljeS5jbG9uZShsaW5lc2VwPSdcclxuJykKKyAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfYnl0ZXMocG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgcyA9IEJ5dGVzSU8oKQorICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3Iocyxwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bGxyZXByLCBzLmdldHZhbHVlKCkpCiAKICAgICAjIHRlc3RfaGVhZGVycmVnaXN0cnkuVGVzdENvbnRlbnRUeXBlSGVhZGVyLmJhZF9wYXJhbXMKICAgICBkZWYgdGVzdF9iYWRfcGFyYW0oc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfaGVhZGVycmVnaXN0cnkucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfaGVhZGVycmVnaXN0cnkucHkKaW5kZXggZjgyOWY4My4uZjJkZjM3MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weQpAQCAtNjYxLDcgKzY2MSw3IEBACiAgICAgICAgICAgICAndGV4dC9wbGFpbjsgbmFtZT0iYXNjaWlfaXNfdGhlX2RlZmF1bHQiJyksCiAKICAgICAgICAgJ3JmYzIyMzFfYmFkX2NoYXJhY3Rlcl9pbl9jaGFyc2V0X3BhcmFtZXRlcl92YWx1ZSc6ICgKLSAgICAgICAgICAgICJ0ZXh0L3BsYWluOyBjaGFyc2V0Kj1hc2NpaScndXRmLTglRTIlODAlOUQiLAorICAgICAgICAgICAgInRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVGMSVGMiVGMyIsCiAgICAgICAgICAgICAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAncGxhaW4nLApAQCAtNjY5LDYgKzY2OSwxOCBAQAogICAgICAgICAgICAgW2Vycm9ycy5VbmRlY29kYWJsZUJ5dGVzRGVmZWN0XSwKICAgICAgICAgICAgICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOFx1RkZGRFx1RkZGRFx1RkZGRCInKSwKIAorICAgICAgICAncmZjMjIzMV91dGZfOF9pbl9zdXBwb3NlZGx5X2FzY2lpX2NoYXJzZXRfcGFyYW1ldGVyX3ZhbHVlJzogKAorICAgICAgICAgICAgInRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVFMiU4MCU5RCIsCisgICAgICAgICAgICAndGV4dC9wbGFpbicsCisgICAgICAgICAgICAndGV4dCcsCisgICAgICAgICAgICAncGxhaW4nLAorICAgICAgICAgICAgeydjaGFyc2V0JzogJ3V0Zi044oCdJ30sCisgICAgICAgICAgICBbZXJyb3JzLlVuZGVjb2RhYmxlQnl0ZXNEZWZlY3RdLAorICAgICAgICAgICAgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi044oCdIicsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgIyBYWFg6IGlmIHRoZSBhYm92ZSB3ZXJlICpyZSpmb2xkZWQsIGl0IHdvdWxkIGdldCB0YWdnZWQgYXMgdXRmLTgKKyAgICAgICAgICAgICMgaW5zdGVhZCBvZiBhc2NpaSBpbiB0aGUgcGFyYW0sIHNpbmNlIGl0IG5vdyBjb250YWlucyBub24tQVNDSUkuCisKICAgICAgICAgJ3JmYzIyMzFfZW5jb2RlZF90aGVuX3VuZW5jb2RlZF9zZWdtZW50cyc6ICgKICAgICAgICAgICAgICgnYXBwbGljYXRpb24veC1mb287JwogICAgICAgICAgICAgICAgICdcdG5hbWUqMCo9InVzLWFzY2lpXCdlbi11c1wnTXkiOycKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9tZXNzYWdlLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkKaW5kZXggOGNjM2Y4MC4uZTBlYmI4YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkKQEAgLTEsNiArMSwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGV4dHdyYXAKIGZyb20gZW1haWwgaW1wb3J0IHBvbGljeQotZnJvbSB0ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UKK2Zyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgRW1haWxNZXNzYWdlLCBNSU1FUGFydAorZnJvbSB0ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UsIHBhcmFtZXRlcml6ZQorCisKKyMgSGVscGVyLgorZGVmIGZpcnN0KGl0ZXJhYmxlKToKKyAgICByZXR1cm4gbmV4dChmaWx0ZXIobGFtYmRhIHg6IHggaXMgbm90IE5vbmUsIGl0ZXJhYmxlKSwgTm9uZSkKIAogCiBjbGFzcyBUZXN0KFRlc3RFbWFpbEJhc2UpOgpAQCAtMTQsNSArMjEsNzM4IEBACiAgICAgICAgICAgICBtWydUbyddID0gJ3h5ekBhYmMnCiAKIAorQHBhcmFtZXRlcml6ZQorY2xhc3MgVGVzdEVtYWlsTWVzc2FnZUJhc2U6CisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdAorCisgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSB0cmlwbGUgKHJlbGF0ZWQsIGh0bWwsIHBsYWluKSBvZiBpbmRpY2VzIGludG8gdGhlCisgICAgIyBsaXN0IHJldHVybmVkIGJ5ICd3YWxrJyBjYWxsZWQgb24gYSBNZXNzYWdlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHRoaXJkLgorICAgICMgVGhlIGluZGljZXMgaW5kaWNhdGUgd2hpY2ggcGFydCBzaG91bGQgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgcGFydC10eXBlCisgICAgIyB3aGVuIHBhc3NlZCB0byBnZXRfYm9keSAoaWU6IHRoZSAiZmlyc3QiIHBhcnQgb2YgdGhhdCB0eXBlIGluIHRoZQorICAgICMgbWVzc2FnZSkuICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBpbmRpY2VzIGludG8gdGhlICd3YWxrJyBsaXN0CisgICAgIyBvZiB0aGUgYXR0YWNobWVudHMgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgYnkgYSBjYWxsIHRvCisgICAgIyAnaXRlcl9hdHRhY2htZW50cycuICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGluZGljZXMgaW50byAnd2FsaycKKyAgICAjIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGEgY2FsbCB0byAnaXRlcl9wYXJ0cycuICBOb3RlIHRoYXQgdGhlIGZpcnN0CisgICAgIyBpdGVtIHJldHVybmVkIGJ5ICd3YWxrJyBpcyB0aGUgTWVzc2FnZSBpdHNlbGYuCisKKyAgICBtZXNzYWdlX3BhcmFtcyA9IHsKKworICAgICAgICAnZW1wdHlfbWVzc2FnZSc6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCAwKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAiIiksCisKKyAgICAgICAgJ25vbl9taW1lX3BsYWluJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIDApLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorCisgICAgICAgICAgICAgICAgc2ltcGxlIHRleHQgYm9keQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdtaW1lX25vbl90ZXh0JzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIE5vbmUpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKworICAgICAgICAgICAgICAgIGJvZ3VzIGJvZHkuCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ3BsYWluX2h0bWxfYWx0ZXJuYXRpdmUnOiAoCisgICAgICAgICAgICAoTm9uZSwgMiwgMSksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICBwcmVhbWJsZQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ3BsYWluX2h0bWxfbWl4ZWQnOiAoCisgICAgICAgICAgICAoTm9uZSwgMiwgMSksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICBwcmVhbWJsZQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9hdHRhY2htZW50X21peGVkJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIDEpLAorICAgICAgICAgICAgKDIsKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAnaHRtbF90ZXh0X2F0dGFjaG1lbnRfbWl4ZWQnOiAoCisgICAgICAgICAgICAoTm9uZSwgMiwgTm9uZSksCisgICAgICAgICAgICAoMSwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogQXRUYUNobWVudAorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdodG1sX3RleHRfYXR0YWNobWVudF9pbmxpbmVfbWl4ZWQnOiAoCisgICAgICAgICAgICAoTm9uZSwgMiwgMSksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IEluTGluZQorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICMgUkZDIDIzODcKKyAgICAgICAgJ3JlbGF0ZWQnOiAoCisgICAgICAgICAgICAoMCwgMSwgTm9uZSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iPT09IjsgdHlwZT10ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbWFnZTE+CisKKyAgICAgICAgICAgICAgICBib2d1cyBkYXRhCisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBUaGlzIG1lc3NhZ2Ugc3RydWN0dXJlIHdpbGwgcHJvYmFibHkgbmV2ZXIgYmUgc2VlbiBpbiB0aGUgd2lsZCwgYnV0CisgICAgICAgICMgaXQgcHJvdmVzIHdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGV4dCBwYXJ0cyBiYXNlZCBvbiAnc3RhcnQnLiAgVGhlCisgICAgICAgICMgY29udGVudCB3b3VsZCBub3QsIG9mIGNvdXJzZSwgYWN0dWFsbHkgd29yayA6KQorICAgICAgICAncmVsYXRlZF93aXRoX3N0YXJ0JzogKAorICAgICAgICAgICAgKDAsIDIsIE5vbmUpLAorICAgICAgICAgICAgKDEsKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9Ij09PSI7IHR5cGU9dGV4dC9odG1sOworICAgICAgICAgICAgICAgICBzdGFydD0iPGJvZHk+IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbmNsdWRlPgorCisgICAgICAgICAgICAgICAgdXNlbGVzcyB0ZXh0CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGJvZHk+CisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKyAgICAgICAgICAgICAgICA8IS0tI2luY2x1ZGUgZmlsZT0iPGluY2x1ZGU+Ii0tPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisKKyAgICAgICAgJ21peGVkX2FsdGVybmF0aXZlX3BsYWluX3JlbGF0ZWQnOiAoCisgICAgICAgICAgICAoMywgNCwgMiksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9IisrKyIKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iX19fIgorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMUBjaWQ+CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS1fX18tLQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogQXR0YWNIbWVuVAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICMgVGhpcyBzdHJ1Y3R1cmUgc3VnZ2VzdGVkIGJ5IFN0ZXBoZW4gSi4gVHVybmJ1bGwuLi5tYXkgbm90IGV4aXN0L2JlCisgICAgICAgICMgc3VwcG9ydGVkIGluIHRoZSB3aWxkLCBidXQgd2Ugd2FudCB0byBzdXBwb3J0IGl0LgorICAgICAgICAnbWl4ZWRfcmVsYXRlZF9hbHRlcm5hdGl2ZV9wbGFpbl9odG1sJzogKAorICAgICAgICAgICAgKDEsIDQsIDMpLAorICAgICAgICAgICAgKDYsIDcpLAorICAgICAgICAgICAgKDEsIDYsIDcpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9IisrKyIKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS1fX18tLQorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbWFnZTFAY2lkPgorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tKysrLS0KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGFub3RoZXIgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFNhbWUgdGhpbmcsIGJ1dCBwcm92aW5nIHdlIG9ubHkgbG9vayBhdCB0aGUgcm9vdCBwYXJ0LCB3aGljaCBpcyB0aGUKKyAgICAgICAgIyBmaXJzdCBvbmUgaWYgdGhlcmUgaXNuJ3QgYW55IHN0YXJ0IHBhcmFtZXRlci4gIFRoYXQgaXMsIHRoaXMgaXMgYQorICAgICAgICAjIGJyb2tlbiByZWxhdGVkLgorICAgICAgICAnbWl4ZWRfcmVsYXRlZF9hbHRlcm5hdGl2ZV9wbGFpbl9odG1sX3dyb25nX29yZGVyJzogKAorICAgICAgICAgICAgKDEsIE5vbmUsIE5vbmUpLAorICAgICAgICAgICAgKDYsIDcpLAorICAgICAgICAgICAgKDEsIDYsIDcpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9IisrKyIKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxQGNpZD4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iX19fIgorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tX19fLS0KKworICAgICAgICAgICAgICAgIC0tKysrLS0KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGFub3RoZXIgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAnbWVzc2FnZV9yZmM4MjInOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCisKKyAgICAgICAgICAgICAgICBUbzogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgRnJvbTogcm9ib3RAZXhhbXAuY29tCisKKyAgICAgICAgICAgICAgICB0aGlzIGlzIGEgbWVzc2FnZSBib2R5LgorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdtaXhlZF90ZXh0X21lc3NhZ2VfcmZjODIyJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIDEpLAorICAgICAgICAgICAgKDIsKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgWW91ciBtZXNzYWdlIGhhcyBib3VuY2VkLCBzZXIuCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKworICAgICAgICAgICAgICAgIFRvOiBiYXJAZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBGcm9tOiByb2JvdEBleGFtcC5jb20KKworICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBtZXNzYWdlIGJvZHkuCisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIH0KKworICAgIGRlZiBtZXNzYWdlX2FzX2dldF9ib2R5KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBhbGxwYXJ0cyA9IGxpc3QobS53YWxrKCkpCisgICAgICAgIGV4cGVjdGVkID0gW05vbmUgaWYgbiBpcyBOb25lIGVsc2UgYWxscGFydHNbbl0gZm9yIG4gaW4gYm9keV9wYXJ0c10KKyAgICAgICAgcmVsYXRlZCA9IDA7IGh0bWwgPSAxOyBwbGFpbiA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KCksIGZpcnN0KGV4cGVjdGVkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRlZCcsICdodG1sJywgJ3BsYWluJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdodG1sJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkW3JlbGF0ZWQ6aHRtbCsxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3JlbGF0ZWQnLCAncGxhaW4nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoW2V4cGVjdGVkW3JlbGF0ZWRdLCBleHBlY3RlZFtwbGFpbl1dKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgnaHRtbCcsICdwbGFpbicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtodG1sOnBsYWluKzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PVsncmVsYXRlZCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFtyZWxhdGVkXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PVsnaHRtbCddKSwgZXhwZWN0ZWRbaHRtbF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD1bJ3BsYWluJ10pLCBleHBlY3RlZFtwbGFpbl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3BsYWluJywgJ2h0bWwnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbcGxhaW46aHRtbC0xOi0xXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3BsYWluJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoW2V4cGVjdGVkW3BsYWluXSwgZXhwZWN0ZWRbcmVsYXRlZF1dKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgnaHRtbCcsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkW2h0bWw6Oi0xXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3BsYWluJywgJ2h0bWwnLCAncmVsYXRlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFs6Oi0xXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ2h0bWwnLCAncGxhaW4nLCAncmVsYXRlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbaHRtbF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkW3BsYWluXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbcmVsYXRlZF1dKSkKKworICAgIGRlZiBtZXNzYWdlX2FzX2l0ZXJfYXR0YWNobWVudChzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgYWxscGFydHMgPSBsaXN0KG0ud2FsaygpKQorICAgICAgICBhdHRhY2htZW50cyA9IFthbGxwYXJ0c1tuXSBmb3IgbiBpbiBhdHRhY2htZW50c10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9hdHRhY2htZW50cygpKSwgYXR0YWNobWVudHMpCisKKyAgICBkZWYgbWVzc2FnZV9hc19pdGVyX3BhcnRzKHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBhbGxwYXJ0cyA9IGxpc3QobS53YWxrKCkpCisgICAgICAgIHBhcnRzID0gW2FsbHBhcnRzW25dIGZvciBuIGluIHBhcnRzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX3BhcnRzKCkpLCBwYXJ0cykKKworICAgIGNsYXNzIF9UZXN0Q29udGVudE1hbmFnZXI6CisgICAgICAgIGRlZiBnZXRfY29udGVudChzZWxmLCBtc2csICphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJldHVybiBtc2csIGFyZ3MsIGt3CisgICAgICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csICphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHNlbGYubXNnID0gbXNnCisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgICAgICBzZWxmLmt3ID0ga3cKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X3dpdGhfY20oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudChjb250ZW50X21hbmFnZXI9Y20pLCAobSwgKCksIHt9KSkKKyAgICAgICAgbXNnLCBhcmdzLCBrdyA9IG0uZ2V0X2NvbnRlbnQoJ2ZvbycsIGNvbnRlbnRfbWFuYWdlcj1jbSwgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9kZWZhdWx0X2NtX2NvbWVzX2Zyb21fcG9saWN5KHNlbGYpOgorICAgICAgICBwID0gcG9saWN5LmRlZmF1bHQuY2xvbmUoY29udGVudF9tYW5hZ2VyPXNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpKQorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJywgcG9saWN5PXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCAobSwgKCksIHt9KSkKKyAgICAgICAgbXNnLCBhcmdzLCBrdyA9IG0uZ2V0X2NvbnRlbnQoJ2ZvbycsIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfd2l0aF9jbShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCB7fSkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgY29udGVudF9tYW5hZ2VyPWNtLCBiYXI9MSwgaz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5hcmdzLCAoJ2ZvbycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5rdywgZGljdChiYXI9MSwgaz0yKSkKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RlZmF1bHRfY21fY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgcCA9IHBvbGljeS5kZWZhdWx0LmNsb25lKGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycsIHBvbGljeT1wKQorICAgICAgICBtLnNldF9jb250ZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIHt9KQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBiYXI9MSwgaz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5hcmdzLCAoJ2ZvbycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5rdywgZGljdChiYXI9MSwgaz0yKSkKKworICAgICMgb3V0Y29tZSBpcyB3aGV0aGVyIHh4eF9tZXRob2Qgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IgZXJyb3Igd2hlbiBjYWxsZWQKKyAgICAjIG9uIG11bHRpcGFydC9zdWJ0eXBlLiAgQmxhbmsgb3V0Y29tZSBtZWFucyBpdCBkZXBlbmRzIG9uIHh4eCAoYWRkCisgICAgIyBzdWNjZWVkcywgbWFrZSByYWlzZXMpLiAgTm90ZTogJ25vbmUnIG1lYW5zIHRoZXJlIGFyZSBjb250ZW50LXR5cGUKKyAgICAjIGhlYWRlcnMgYnV0IHBheWxvYWQgaXMgTm9uZS4uLnRoaXMgaGFwcGVuaW5nIGluIHByYWN0aWNlIHdvdWxkIGJlIHZlcnkKKyAgICAjIHVudXN1YWwsIHNvIHRyZWF0aW5nIGl0IGFzIGlmIHRoZXJlIHdlcmUgY29udGVudCBzZWVtcyByZWFzb25hYmxlLgorICAgICMgICAgbWV0aG9kICAgICAgICAgIHN1YnR5cGUgICAgICAgICAgIG91dGNvbWUKKyAgICBzdWJ0eXBlX3BhcmFtcyA9ICgKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAnbm9fY29udGVudCcsICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAnbm9uZScsICAgICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAncGxhaW4nLCAgICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAncmVsYXRlZCcsICAgICAgICAnJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ2FsdGVybmF0aXZlJywgICAgJ3JhaXNlcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdtaXhlZCcsICAgICAgICAgICdyYWlzZXMnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAnbm9fY29udGVudCcsICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAnbm9uZScsICAgICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAncGxhaW4nLCAgICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAncmVsYXRlZCcsICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAnYWx0ZXJuYXRpdmUnLCAgICAnJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ21peGVkJywgICAgICAgICAgJ3JhaXNlcycpLAorICAgICAgICAoJ21peGVkJywgICAgICAgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ21peGVkJywgICAgICAgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ21peGVkJywgICAgICAgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ21peGVkJywgICAgICAgICdyZWxhdGVkJywgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ21peGVkJywgICAgICAgICdhbHRlcm5hdGl2ZScsICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ21peGVkJywgICAgICAgICdtaXhlZCcsICAgICAgICAgICcnKSwKKyAgICAgICAgKQorCisgICAgZGVmIF9tYWtlX3N1YnR5cGVfdGVzdF9tZXNzYWdlKHNlbGYsIHN1YnR5cGUpOgorICAgICAgICBtID0gc2VsZi5tZXNzYWdlKCkKKyAgICAgICAgcGF5bG9hZCA9IE5vbmUKKyAgICAgICAgbXNnX2hlYWRlcnMgPSAgWworICAgICAgICAgICAgKCdUbycsICdmb29AYmFyLmNvbScpLAorICAgICAgICAgICAgKCdGcm9tJywgJ2JhckBmb28uY29tJyksCisgICAgICAgICAgICBdCisgICAgICAgIGlmIHN1YnR5cGUgIT0gJ25vX2NvbnRlbnQnOgorICAgICAgICAgICAgKCdjb250ZW50LXNoYWRvdycsICdMb2dydXMnKSwKKyAgICAgICAgbXNnX2hlYWRlcnMuYXBwZW5kKCgnWC1SYW5kb20tSGVhZGVyJywgJ0NvcndpbicpKQorICAgICAgICBpZiBzdWJ0eXBlID09ICd0ZXh0JzoKKyAgICAgICAgICAgIHBheWxvYWQgPSAnJworICAgICAgICAgICAgbXNnX2hlYWRlcnMuYXBwZW5kKCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKSkKKyAgICAgICAgICAgIG0uc2V0X3BheWxvYWQoJycpCisgICAgICAgIGVsaWYgc3VidHlwZSAhPSAnbm9fY29udGVudCc6CisgICAgICAgICAgICBwYXlsb2FkID0gW10KKyAgICAgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ0NvbnRlbnQtVHlwZScsICdtdWx0aXBhcnQvJyArIHN1YnR5cGUpKQorICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdYLVRydW1wJywgJ1JhbmRvbScpKQorICAgICAgICBtLnNldF9wYXlsb2FkKHBheWxvYWQpCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBtc2dfaGVhZGVyczoKKyAgICAgICAgICAgIG1bbmFtZV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gbSwgbXNnX2hlYWRlcnMsIHBheWxvYWQKKworICAgIGRlZiBfY2hlY2tfZGlzYWxsb3dlZF9zdWJ0eXBlX3JhaXNlcyhzZWxmLCBtLCBtZXRob2RfbmFtZSwgc3VidHlwZSwgbWV0aG9kKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBhcjoKKyAgICAgICAgICAgIGdldGF0dHIobSwgbWV0aG9kKSgpCisgICAgICAgIGV4Y190ZXh0ID0gc3RyKGFyLmV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGNfdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtZXRob2RfbmFtZSwgZXhjX3RleHQpCisKKyAgICBkZWYgX2NoZWNrX21ha2VfbXVsdGlwYXJ0KHNlbGYsIG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkKToKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBtc2dfaGVhZGVyczoKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lLmxvd2VyKCkuc3RhcnRzd2l0aCgnY29udGVudC0nKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bbmFtZV0sIHZhbHVlKQorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obSksIGNvdW50KzEpICMgKzEgZm9yIG5ldyBDb250ZW50LVR5cGUKKyAgICAgICAgcGFydCA9IG5leHQobS5pdGVyX3BhcnRzKCkpCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICBpZiBuYW1lLmxvd2VyKCkuc3RhcnRzd2l0aCgnY29udGVudC0nKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRbbmFtZV0sIHZhbHVlKQorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFydCksIGNvdW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnQuZ2V0X3BheWxvYWQoKSwgcGF5bG9hZCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX21ha2Uoc2VsZiwgbWV0aG9kLCBzdWJ0eXBlLCBvdXRjb21lKToKKyAgICAgICAgbSwgbXNnX2hlYWRlcnMsIHBheWxvYWQgPSBzZWxmLl9tYWtlX3N1YnR5cGVfdGVzdF9tZXNzYWdlKHN1YnR5cGUpCisgICAgICAgIG1ha2VfbWV0aG9kID0gJ21ha2VfJyArIG1ldGhvZAorICAgICAgICBpZiBvdXRjb21lIGluICgnJywgJ3JhaXNlcycpOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfZGlzYWxsb3dlZF9zdWJ0eXBlX3JhaXNlcyhtLCBtZXRob2QsIHN1YnR5cGUsIG1ha2VfbWV0aG9kKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGdldGF0dHIobSwgbWFrZV9tZXRob2QpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X21haW50eXBlKCksICdtdWx0aXBhcnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCBtZXRob2QpCisgICAgICAgIGlmIHN1YnR5cGUgPT0gJ25vX2NvbnRlbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5nZXRfcGF5bG9hZCgpKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5pdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfaGVhZGVycyArIFsoJ0NvbnRlbnQtVHlwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwYXJ0LycrbWV0aG9kKV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtLmdldF9wYXlsb2FkKCkpLCAxKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfbWFrZV9tdWx0aXBhcnQobSwgbXNnX2hlYWRlcnMsIHBheWxvYWQpCisKKyAgICBkZWYgc3VidHlwZV9hc19tYWtlX3dpdGhfYm91bmRhcnkoc2VsZiwgbWV0aG9kLCBzdWJ0eXBlLCBvdXRjb21lKToKKyAgICAgICAgIyBEb2luZyBhbGwgdmFyaWF0aW9uIGlzIGEgYml0IG9mIG92ZXJraWxsLi4uCisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UoKQorICAgICAgICBpZiBvdXRjb21lIGluICgnJywgJ3JhaXNlcycpOgorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0LycgKyBzdWJ0eXBlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIGdldGF0dHIobSwgJ21ha2VfJyArIG1ldGhvZCkoKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHN1YnR5cGUgPT0gJ3BsYWluJzoKKyAgICAgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCisgICAgICAgIGVsaWYgc3VidHlwZSAhPSAnbm9fY29udGVudCc6CisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvJyArIHN1YnR5cGUKKyAgICAgICAgZ2V0YXR0cihtLCAnbWFrZV8nICsgbWV0aG9kKShib3VuZGFyeT0iYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm91bmRhcnkoKSwgJ2FiYycpCisKKyAgICBkZWYgdGVzdF9wb2xpY3lfb25fcGFydF9tYWRlX2J5X21ha2VfY29tZXNfZnJvbV9tZXNzYWdlKHNlbGYpOgorICAgICAgICBmb3IgbWV0aG9kIGluICgnbWFrZV9yZWxhdGVkJywgJ21ha2VfYWx0ZXJuYXRpdmUnLCAnbWFrZV9taXhlZCcpOgorICAgICAgICAgICAgbSA9IHNlbGYubWVzc2FnZShwb2xpY3k9c2VsZi5wb2xpY3kuY2xvbmUoY29udGVudF9tYW5hZ2VyPSdmb28nKSkKKyAgICAgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCisgICAgICAgICAgICBnZXRhdHRyKG0sIG1ldGhvZCkoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKDApLnBvbGljeS5jb250ZW50X21hbmFnZXIsICdmb28nKQorCisgICAgY2xhc3MgX1Rlc3RTZXRDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgY29udGVudCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgbXNnWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKGNvbnRlbnQpCisKKyAgICBkZWYgc3VidHlwZV9hc19hZGQoc2VsZiwgbWV0aG9kLCBzdWJ0eXBlLCBvdXRjb21lKToKKyAgICAgICAgbSwgbXNnX2hlYWRlcnMsIHBheWxvYWQgPSBzZWxmLl9tYWtlX3N1YnR5cGVfdGVzdF9tZXNzYWdlKHN1YnR5cGUpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdFNldENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgYWRkX21ldGhvZCA9ICdhZGRfYXR0YWNobWVudCcgaWYgbWV0aG9kPT0nbWl4ZWQnIGVsc2UgJ2FkZF8nICsgbWV0aG9kCisgICAgICAgIGlmIG91dGNvbWUgPT0gJ3JhaXNlcyc6CisgICAgICAgICAgICBzZWxmLl9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKG0sIG1ldGhvZCwgc3VidHlwZSwgYWRkX21ldGhvZCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBnZXRhdHRyKG0sIGFkZF9tZXRob2QpKCd0ZXN0JywgY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ211bHRpcGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9zdWJ0eXBlKCksIG1ldGhvZCkKKyAgICAgICAgaWYgbWV0aG9kID09IHN1YnR5cGUgb3Igc3VidHlwZSA9PSAnbm9fY29udGVudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtLmdldF9wYXlsb2FkKCkpLCAxKQorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICBwYXJ0ID0gbS5nZXRfcGF5bG9hZCgpWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtLmdldF9wYXlsb2FkKCkpLCAyKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfbWFrZV9tdWx0aXBhcnQobSwgbXNnX2hlYWRlcnMsIHBheWxvYWQpCisgICAgICAgICAgICBwYXJ0ID0gbS5nZXRfcGF5bG9hZCgpWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydC5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9wYXlsb2FkKCksICd0ZXN0JykKKyAgICAgICAgaWYgbWV0aG9kPT0nbWl4ZWQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdhdHRhY2htZW50JykKKyAgICAgICAgZWxpZiBtZXRob2Q9PSdyZWxhdGVkJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydFsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgT3RoZXJ3aXNlIHdlIGRvbid0IGd1ZXNzLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFydFsnQ29udGVudC1EaXNwb3NpdGlvbiddKQorCisgICAgY2xhc3MgX1Rlc3RTZXRSYWlzaW5nQ29udGVudE1hbmFnZXI6CisgICAgICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csIGNvbnRlbnQsICphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigndGVzdCcpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2NvbnRlbnRfbWFuYWdlcl9mb3JfYWRkX2NvbWVzX2Zyb21fcG9saWN5KHNlbGYpOgorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RTZXRSYWlzaW5nQ29udGVudE1hbmFnZXIoKQorICAgICAgICBtID0gc2VsZi5tZXNzYWdlKHBvbGljeT1zZWxmLnBvbGljeS5jbG9uZShjb250ZW50X21hbmFnZXI9Y20pKQorICAgICAgICBmb3IgbWV0aG9kIGluICgnYWRkX3JlbGF0ZWQnLCAnYWRkX2FsdGVybmF0aXZlJywgJ2FkZF9hdHRhY2htZW50Jyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbikgYXMgYXI6CisgICAgICAgICAgICAgICAgZ2V0YXR0cihtLCBtZXRob2QpKCcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYXIuZXhjZXB0aW9uKSwgJ3Rlc3QnKQorCisgICAgZGVmIG1lc3NhZ2VfYXNfY2xlYXIoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIG0uY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlbXMoKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtLmdldF9wYXlsb2FkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZXJfcGFydHMoKSksIFtdKQorCisgICAgZGVmIG1lc3NhZ2VfYXNfY2xlYXJfY29udGVudChzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgZXhwZWN0ZWRfaGVhZGVycyA9IFtoIGZvciBoIGluIG0ua2V5cygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGgubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpXQorICAgICAgICBtLmNsZWFyX2NvbnRlbnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5rZXlzKCkpLCBleHBlY3RlZF9oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtLmdldF9wYXlsb2FkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZXJfcGFydHMoKSksIFtdKQorCisgICAgZGVmIHRlc3RfaXNfYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnaW5saW5lJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uaXNfYXR0YWNobWVudCkKKyAgICAgICAgbS5yZXBsYWNlX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCkKKyAgICAgICAgbS5yZXBsYWNlX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdBdFRhY2hNZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCkKKworCisKK2NsYXNzIFRlc3RFbWFpbE1lc3NhZ2UoVGVzdEVtYWlsTWVzc2FnZUJhc2UsIFRlc3RFbWFpbEJhc2UpOgorICAgIG1lc3NhZ2UgPSBFbWFpbE1lc3NhZ2UKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2FkZHNfTUlNRV9WZXJzaW9uKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydNSU1FLVZlcnNpb24nXSwgJzEuMCcpCisKKyAgICBjbGFzcyBfTUlNRV9WZXJzaW9uX2FkZGluZ19DTToKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgbXNnWydNSU1FLVZlcnNpb24nXSA9ICcxLjAnCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF9kb2VzX25vdF9kdXBsaWNhdGVfTUlNRV9WZXJzaW9uKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9NSU1FX1ZlcnNpb25fYWRkaW5nX0NNKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTUlNRS1WZXJzaW9uJywgbSkKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnTUlNRS1WZXJzaW9uJ10sICcxLjAnKQorCisKK2NsYXNzIFRlc3RNSU1FUGFydChUZXN0RW1haWxNZXNzYWdlQmFzZSwgVGVzdEVtYWlsQmFzZSk6CisgICAgIyBEb2luZyB0aGUgZnVsbCB0ZXN0IHJ1biBoZXJlIG1heSBzZWVtIGEgYml0IHJlZHVuZGFudCwgc2luY2UgdGhlIHR3bworICAgICMgY2xhc3NlcyBhcmUgYWxtb3N0IGlkZW50aWNhbC4gIEJ1dCB3aGF0IGlmIHRoZXkgZHJpZnQgYXBhcnQ/ICBTbyB3ZSBkbworICAgICMgdGhlIGZ1bGwgdGVzdHMgc28gdGhhdCBhbnkgZnV0dXJlIGRyaWZ0IGRvZXNuJ3QgaW50cm9kdWNlIGJ1Z3MuCisgICAgbWVzc2FnZSA9IE1JTUVQYXJ0CisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF9kb2VzX25vdF9hZGRfTUlNRV9WZXJzaW9uKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTUlNRS1WZXJzaW9uJywgbSkKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9wb2xpY3kucHkKaW5kZXggOTgzYmQ0OS4uMDZhZDVmMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5CkBAIC0zMCw2ICszMCw3IEBACiAgICAgICAgICdyYWlzZV9vbl9kZWZlY3QnOiAgICAgICAgICBGYWxzZSwKICAgICAgICAgJ2hlYWRlcl9mYWN0b3J5JzogICAgICAgICAgIGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5oZWFkZXJfZmFjdG9yeSwKICAgICAgICAgJ3JlZm9sZF9zb3VyY2UnOiAgICAgICAgICAgICdsb25nJywKKyAgICAgICAgJ2NvbnRlbnRfbWFuYWdlcic6ICAgICAgICAgIGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5jb250ZW50X21hbmFnZXIsCiAgICAgICAgIH0pCiAKICAgICAjIEZvciBlYWNoIHBvbGljeSB1bmRlciB0ZXN0LCB3ZSBnaXZlIGhlcmUgd2hhdCB3ZSBleHBlY3QgdGhlIGRlZmF1bHRzIHRvCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3RvcnR1cmVfdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5CmluZGV4IDU0NGIxYmIuLjE5Y2Y2NGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5CkBAIC0yNyw3ICsyNyw3IEBACiAjIFByZXZlbnQgdGhpcyB0ZXN0IGZyb20gcnVubmluZyBpbiB0aGUgUHl0aG9uIGRpc3RybwogdHJ5OgogICAgIG9wZW5maWxlKCdjcmlzcGluLXRvcnR1cmUudHh0JykKLWV4Y2VwdCBJT0Vycm9yOgorZXhjZXB0IE9TRXJyb3I6CiAgICAgcmFpc2UgVGVzdFNraXBwZWQKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VudW0ucHkgYi9MaWIvdGVzdC90ZXN0X2VudW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhMzFiOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZW51bS5weQpAQCAtMCwwICsxLDEzMTQgQEAKK2ltcG9ydCBlbnVtCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IHB5ZG9jCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citmcm9tIGVudW0gaW1wb3J0IEVudW0sIEludEVudW0sIEVudW1NZXRhLCB1bmlxdWUKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHBpY2tsZSBpbXBvcnQgZHVtcHMsIGxvYWRzLCBQaWNrbGluZ0Vycm9yCisKKyMgZm9yIHBpY2tsZSB0ZXN0cwordHJ5OgorICAgIGNsYXNzIFN0b29nZXMoRW51bSk6CisgICAgICAgIExBUlJZID0gMQorICAgICAgICBDVVJMWSA9IDIKKyAgICAgICAgTU9FID0gMworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgU3Rvb2dlcyA9IGV4YworCit0cnk6CisgICAgY2xhc3MgSW50U3Rvb2dlcyhpbnQsIEVudW0pOgorICAgICAgICBMQVJSWSA9IDEKKyAgICAgICAgQ1VSTFkgPSAyCisgICAgICAgIE1PRSA9IDMKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIEludFN0b29nZXMgPSBleGMKKwordHJ5OgorICAgIGNsYXNzIEZsb2F0U3Rvb2dlcyhmbG9hdCwgRW51bSk6CisgICAgICAgIExBUlJZID0gMS4zOQorICAgICAgICBDVVJMWSA9IDIuNzIKKyAgICAgICAgTU9FID0gMy4xNDI1OTYKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIEZsb2F0U3Rvb2dlcyA9IGV4YworCisjIGZvciBwaWNrbGUgdGVzdCBhbmQgc3ViY2xhc3MgdGVzdHMKK3RyeToKKyAgICBjbGFzcyBTdHJFbnVtKHN0ciwgRW51bSk6CisgICAgICAgICdhY2NlcHRzIG9ubHkgc3RyaW5nIHZhbHVlcycKKyAgICBjbGFzcyBOYW1lKFN0ckVudW0pOgorICAgICAgICBCREZMID0gJ0d1aWRvIHZhbiBSb3NzdW0nCisgICAgICAgIEZMVUZMID0gJ0JhcnJ5IFdhcnNhdycKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIE5hbWUgPSBleGMKKwordHJ5OgorICAgIFF1ZXN0aW9uID0gRW51bSgnUXVlc3Rpb24nLCAnd2hvIHdoYXQgd2hlbiB3aGVyZSB3aHknLCBtb2R1bGU9X19uYW1lX18pCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBRdWVzdGlvbiA9IGV4YworCit0cnk6CisgICAgQW5zd2VyID0gRW51bSgnQW5zd2VyJywgJ2hpbSB0aGlzIHRoZW4gdGhlcmUgYmVjYXVzZScpCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBBbnN3ZXIgPSBleGMKKworIyBmb3IgZG9jdGVzdHMKK3RyeToKKyAgICBjbGFzcyBGcnVpdChFbnVtKToKKyAgICAgICAgdG9tYXRvID0gMQorICAgICAgICBiYW5hbmEgPSAyCisgICAgICAgIGNoZXJyeSA9IDMKK2V4Y2VwdCBFeGNlcHRpb246CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RIZWxwZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIF9pc19kZXNjcmlwdG9yLCBfaXNfc3VuZGVyLCBfaXNfZHVuZGVyCisKKyAgICBkZWYgdGVzdF9pc19kZXNjcmlwdG9yKHNlbGYpOgorICAgICAgICBjbGFzcyBmb286CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBhdHRyIGluICgnX19nZXRfXycsJ19fc2V0X18nLCdfX2RlbGV0ZV9fJyk6CisgICAgICAgICAgICBvYmogPSBmb28oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnVtLl9pc19kZXNjcmlwdG9yKG9iaikpCisgICAgICAgICAgICBzZXRhdHRyKG9iaiwgYXR0ciwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnVtLl9pc19kZXNjcmlwdG9yKG9iaikpCisKKyAgICBkZWYgdGVzdF9pc19zdW5kZXIoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnX2FfJywgJ19hYV8nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnVtLl9pc19zdW5kZXIocykpCisKKyAgICAgICAgZm9yIHMgaW4gKCdhJywgJ2FfJywgJ19hJywgJ19fYScsICdhX18nLCAnX19hX18nLCAnX2FfXycsICdfX2FfJywgJ18nLAorICAgICAgICAgICAgICAgICdfXycsICdfX18nLCAnX19fXycsICdfX19fXycsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW51bS5faXNfc3VuZGVyKHMpKQorCisgICAgZGVmIHRlc3RfaXNfZHVuZGVyKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoJ19fYV9fJywgJ19fYWFfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX2R1bmRlcihzKSkKKyAgICAgICAgZm9yIHMgaW4gKCdhJywgJ2FfJywgJ19hJywgJ19fYScsICdhX18nLCAnX2FfJywgJ19hX18nLCAnX19hXycsICdfJywKKyAgICAgICAgICAgICAgICAnX18nLCAnX19fJywgJ19fX18nLCAnX19fX18nLCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVudW0uX2lzX2R1bmRlcihzKSkKKworCitjbGFzcyBUZXN0RW51bSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBTZWFzb24oRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBTVU1NRVIgPSAyCisgICAgICAgICAgICBBVVRVTU4gPSAzCisgICAgICAgICAgICBXSU5URVIgPSA0CisgICAgICAgIHNlbGYuU2Vhc29uID0gU2Vhc29uCisKKyAgICAgICAgY2xhc3MgS29uc3RhbnRzKGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIEUgPSAyLjcxODI4MTgKKyAgICAgICAgICAgIFBJID0gMy4xNDE1OTI2CisgICAgICAgICAgICBUQVUgPSAyICogUEkKKyAgICAgICAgc2VsZi5Lb25zdGFudHMgPSBLb25zdGFudHMKKworICAgICAgICBjbGFzcyBHcmFkZXMoSW50RW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDAKKyAgICAgICAgc2VsZi5HcmFkZXMgPSBHcmFkZXMKKworICAgICAgICBjbGFzcyBEaXJlY3Rpb25hbChzdHIsIEVudW0pOgorICAgICAgICAgICAgRUFTVCA9ICdlYXN0JworICAgICAgICAgICAgV0VTVCA9ICd3ZXN0JworICAgICAgICAgICAgTk9SVEggPSAnbm9ydGgnCisgICAgICAgICAgICBTT1VUSCA9ICdzb3V0aCcKKyAgICAgICAgc2VsZi5EaXJlY3Rpb25hbCA9IERpcmVjdGlvbmFsCisKKyAgICAgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQorICAgICAgICBjbGFzcyBIb2xpZGF5KGRhdGUsIEVudW0pOgorICAgICAgICAgICAgTkVXX1lFQVIgPSAyMDEzLCAxLCAxCisgICAgICAgICAgICBJREVTX09GX01BUkNIID0gMjAxMywgMywgMTUKKyAgICAgICAgc2VsZi5Ib2xpZGF5ID0gSG9saWRheQorCisgICAgZGVmIHRlc3RfZGlyX29uX2NsYXNzKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2V0KGRpcihTZWFzb24pKSwKKyAgICAgICAgICAgIHNldChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbWVtYmVyc19fJywgJ19fbW9kdWxlX18nLAorICAgICAgICAgICAgICAgICdTUFJJTkcnLCAnU1VNTUVSJywgJ0FVVFVNTicsICdXSU5URVInXSksCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kaXJfb25faXRlbShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNldChkaXIoU2Vhc29uLldJTlRFUikpLAorICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsICduYW1lJywgJ3ZhbHVlJ10pLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZGlyX3dpdGhfYWRkZWRfYmVoYXZpb3Ioc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QoRW51bSk6CisgICAgICAgICAgICB0aGlzID0gJ3RoYXQnCisgICAgICAgICAgICB0aGVzZSA9ICd0aG9zZScKKyAgICAgICAgICAgIGRlZiB3b3dzZXIoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiV293c2VyISBJJ20gJXMhIiAlIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZXQoZGlyKFRlc3QpKSwKKyAgICAgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJywgJ3RoaXMnLCAndGhlc2UnXSksCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChkaXIoVGVzdC50aGlzKSksCisgICAgICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsICduYW1lJywgJ3ZhbHVlJywgJ3dvd3NlciddKSwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9lbnVtX2luX2VudW1fb3V0KHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbihTZWFzb24uV0lOVEVSKSwgU2Vhc29uLldJTlRFUikKKworICAgIGRlZiB0ZXN0X2VudW1fdmFsdWUoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU2Vhc29uLlNQUklORy52YWx1ZSwgMSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1fdmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSW50U3Rvb2dlcy5DVVJMWS52YWx1ZSwgMikKKworICAgIGRlZiB0ZXN0X2VudW0oc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIGxzdCA9IGxpc3QoU2Vhc29uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU2Vhc29uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU2Vhc29uKSwgNCwgU2Vhc29uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgW1NlYXNvbi5TUFJJTkcsIFNlYXNvbi5TVU1NRVIsIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5XSU5URVJdLCBsc3QpCisKKyAgICAgICAgZm9yIGksIHNlYXNvbiBpbiBlbnVtZXJhdGUoJ1NQUklORyBTVU1NRVIgQVVUVU1OIFdJTlRFUicuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU2Vhc29uKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUsIGdldGF0dHIoU2Vhc29uLCBzZWFzb24pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLnZhbHVlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIHNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgU2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICdTZWFzb24uJyArIHNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIHJlcHIoZSksCisgICAgICAgICAgICAgICAgICAgICc8U2Vhc29uLnswfTogezF9PicuZm9ybWF0KHNlYXNvbiwgaSksCisgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3ZhbHVlX25hbWUoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU2Vhc29uLlNQUklORy5uYW1lLCAnU1BSSU5HJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLnZhbHVlLCAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcubmFtZSA9ICdpbnZpZXJubycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBTZWFzb24uU1BSSU5HLnZhbHVlID0gMgorCisgICAgZGVmIHRlc3RfY2hhbmdpbmdfbWVtYmVyKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5XSU5URVIgPSAncmVhbGx5IGNvbGQnCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZGVsZXRpb24oc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIEFVVFVNTiA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKworICAgICAgICAgICAgZGVmIHNwYW0oY2xzKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoU2Vhc29uLCAnc3BhbScpKQorICAgICAgICBkZWwgU2Vhc29uLnNwYW0KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKFNlYXNvbiwgJ3NwYW0nKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBTZWFzb24uU1BSSU5HCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFNlYXNvbi5EUlkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgU2Vhc29uLlNQUklORy5uYW1lCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX25hbWVzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgV3JvbmcoRW51bSk6CisgICAgICAgICAgICAgICAgbXJvID0gOQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgV3JvbmcoRW51bSk6CisgICAgICAgICAgICAgICAgX2NyZWF0ZV89IDExCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfZ2V0X21peGluc18gPSA5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfZmluZF9uZXdfID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgV3JvbmcoRW51bSk6CisgICAgICAgICAgICAgICAgX2FueV9uYW1lXyA9IDkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEluKFNlYXNvbi5BVVRVTU4sIFNlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigzLCBTZWFzb24pCisKKyAgICAgICAgdmFsID0gU2Vhc29uKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odmFsLCBTZWFzb24pCisKKyAgICAgICAgY2xhc3MgT3RoZXJFbnVtKEVudW0pOgorICAgICAgICAgICAgb25lID0gMTsgdHdvID0gMgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKE90aGVyRW51bS50d28sIFNlYXNvbikKKworICAgIGRlZiB0ZXN0X2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBTZWFzb24uU1BSSU5HIDwgU2Vhc29uLldJTlRFUgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBTZWFzb24uU1BSSU5HID4gNAorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoU2Vhc29uLlNQUklORywgMSkKKworICAgICAgICBjbGFzcyBQYXJ0KEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgQ0xJUCA9IDIKKyAgICAgICAgICAgIEJBUlJFTCA9IDMKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFNlYXNvbi5TUFJJTkcsIFBhcnQuU1BSSU5HKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBTZWFzb24uU1BSSU5HIDwgUGFydC5DTElQCisKKyAgICBkZWYgdGVzdF9lbnVtX2R1cGxpY2F0ZXMoc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIEFVVFVNTiA9IEZBTEwgPSAzCisgICAgICAgICAgICBXSU5URVIgPSA0CisgICAgICAgICAgICBBTk9USEVSX1NQUklORyA9IDEKKyAgICAgICAgbHN0ID0gbGlzdChTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICBbU2Vhc29uLlNQUklORywgU2Vhc29uLlNVTU1FUiwKKyAgICAgICAgICAgICBTZWFzb24uQVVUVU1OLCBTZWFzb24uV0lOVEVSLAorICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTZWFzb24uRkFMTCwgU2Vhc29uLkFVVFVNTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uRkFMTC52YWx1ZSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uQVVUVU1OLnZhbHVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbigzKSwgU2Vhc29uLkFVVFVNTikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTZWFzb24oMSksIFNlYXNvbi5TUFJJTkcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU2Vhc29uLkZBTEwubmFtZSwgJ0FVVFVNTicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW2sgZm9yIGssdiBpbiBTZWFzb24uX19tZW1iZXJzX18uaXRlbXMoKSBpZiB2Lm5hbWUgIT0ga10sCisgICAgICAgICAgICAgICAgWydGQUxMJywgJ0FOT1RIRVJfU1BSSU5HJ10sCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZHVwbGljYXRlX25hbWUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgICAgIHJlZCA9IDQKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgICAgICBkZWYgcmVkKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3JlZCcKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgICAgICBkZWYgcmVkKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3JlZGRlcicKKyAgICAgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICAgICAgYmx1ZSA9IDMKKworCisgICAgZGVmIHRlc3RfZW51bV93aXRoX3ZhbHVlX25hbWUoc2VsZik6CisgICAgICAgIGNsYXNzIEh1aChFbnVtKToKKyAgICAgICAgICAgIG5hbWUgPSAxCisgICAgICAgICAgICB2YWx1ZSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxpc3QoSHVoKSwKKyAgICAgICAgICAgIFtIdWgubmFtZSwgSHVoLnZhbHVlXSwKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKEh1aC5uYW1lKSwgSHVoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEh1aC5uYW1lLm5hbWUsICduYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIdWgubmFtZS52YWx1ZSwgMSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7fScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoICd7On0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6fScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6MjB9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6MjB9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezpeMjB9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6XjIwfScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6PjIwfScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7Oj4yMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7OjwyMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezo8MjB9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2N1c3RvbShzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdEZsb2F0KGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDEuMAorICAgICAgICAgICAgdHdvID0gMi4wCisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Rlc3RGbG9hdCBzdWNjZXNzIScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30nLmZvcm1hdChUZXN0RmxvYXQub25lKSwgJ1Rlc3RGbG9hdCBzdWNjZXNzIScpCisKKyAgICBkZWYgYXNzZXJ0Rm9ybWF0SXNWYWx1ZShzZWxmLCBzcGVjLCBtZW1iZXIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuZm9ybWF0KG1lbWJlciksIHNwZWMuZm9ybWF0KG1lbWJlci52YWx1ZSkpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9kYXRlKHNlbGYpOgorICAgICAgICBIb2xpZGF5ID0gc2VsZi5Ib2xpZGF5CisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgne30nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezp9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MjB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6XjIwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oj4yMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo8MjB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6JVkgJW19JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6JVkgJW0gJU06MDB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1fZmxvYXQoc2VsZik6CisgICAgICAgIEtvbnN0YW50cyA9IHNlbGYuS29uc3RhbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgne30nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6XjIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6bn0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6NS4yfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpmfScsIEtvbnN0YW50cy5UQVUpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9pbnQoc2VsZik6CisgICAgICAgIEdyYWRlcyA9IHNlbGYuR3JhZGVzCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgne30nLCBHcmFkZXMuQykKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7On0nLCBHcmFkZXMuQykKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjIwfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6XjIwfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PjIwfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PDIwfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6K30nLCBHcmFkZXMuQykKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjA4WH0nLCBHcmFkZXMuQykKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OmJ9JywgR3JhZGVzLkMpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9zdHIoc2VsZik6CisgICAgICAgIERpcmVjdGlvbmFsID0gc2VsZi5EaXJlY3Rpb25hbAorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3t9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7On0nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MjB9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Ol4yMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PjIwfScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo8MjB9JywgRGlyZWN0aW9uYWwuV0VTVCkKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIGRhdGVzID0ge30KKyAgICAgICAgZGF0ZXNbU2Vhc29uLldJTlRFUl0gPSAnMTIyNScKKyAgICAgICAgZGF0ZXNbU2Vhc29uLlNQUklOR10gPSAnMDMxNScKKyAgICAgICAgZGF0ZXNbU2Vhc29uLlNVTU1FUl0gPSAnMDcwNCcKKyAgICAgICAgZGF0ZXNbU2Vhc29uLkFVVFVNTl0gPSAnMTAzMScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRlc1tTZWFzb24uQVVUVU1OXSwgJzEwMzEnKQorCisgICAgZGVmIHRlc3RfaW50ZW51bV9mcm9tX3NjcmF0Y2goc2VsZik6CisgICAgICAgIGNsYXNzIHBoeShpbnQsIEVudW0pOgorICAgICAgICAgICAgcGkgPSAzCisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX2luaGVyaXRlZChzZWxmKToKKyAgICAgICAgY2xhc3MgSW50RW51bShpbnQsIEVudW0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBwaHkoSW50RW51bSk6CisgICAgICAgICAgICBwaSA9IDMKKyAgICAgICAgICAgIHRhdSA9IDIgKiBwaQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0ZW51bV9mcm9tX3NjcmF0Y2goc2VsZik6CisgICAgICAgIGNsYXNzIHBoeShmbG9hdCwgRW51bSk6CisgICAgICAgICAgICBwaSA9IDMuMTQxNTkyNgorICAgICAgICAgICAgdGF1ID0gMiAqIHBpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3RfZmxvYXRlbnVtX2luaGVyaXRlZChzZWxmKToKKyAgICAgICAgY2xhc3MgRmxvYXRFbnVtKGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgcGh5KEZsb2F0RW51bSk6CisgICAgICAgICAgICBwaSA9IDMuMTQxNTkyNgorICAgICAgICAgICAgdGF1ID0gMiAqIHBpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3Rfc3RyZW51bV9mcm9tX3NjcmF0Y2goc2VsZik6CisgICAgICAgIGNsYXNzIHBoeShzdHIsIEVudW0pOgorICAgICAgICAgICAgcGkgPSAnUGknCisgICAgICAgICAgICB0YXUgPSAnVGF1JworICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X3N0cmVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBTdHJFbnVtKHN0ciwgRW51bSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIHBoeShTdHJFbnVtKToKKyAgICAgICAgICAgIHBpID0gJ1BpJworICAgICAgICAgICAgdGF1ID0gJ1RhdScKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKworICAgIGRlZiB0ZXN0X2ludGVudW0oc2VsZik6CisgICAgICAgIGNsYXNzIFdlZWtEYXkoSW50RW51bSk6CisgICAgICAgICAgICBTVU5EQVkgPSAxCisgICAgICAgICAgICBNT05EQVkgPSAyCisgICAgICAgICAgICBUVUVTREFZID0gMworICAgICAgICAgICAgV0VETkVTREFZID0gNAorICAgICAgICAgICAgVEhVUlNEQVkgPSA1CisgICAgICAgICAgICBGUklEQVkgPSA2CisgICAgICAgICAgICBTQVRVUkRBWSA9IDcKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnYScsICdiJywgJ2MnXVtXZWVrRGF5Lk1PTkRBWV0sICdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaSBmb3IgaSBpbiByYW5nZShXZWVrRGF5LlRVRVNEQVkpXSwgWzAsIDEsIDJdKQorCisgICAgICAgIGxzdCA9IGxpc3QoV2Vla0RheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFdlZWtEYXkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihXZWVrRGF5KSwgNykKKyAgICAgICAgdGFyZ2V0ID0gJ1NVTkRBWSBNT05EQVkgVFVFU0RBWSBXRURORVNEQVkgVEhVUlNEQVkgRlJJREFZIFNBVFVSREFZJworICAgICAgICB0YXJnZXQgPSB0YXJnZXQuc3BsaXQoKQorICAgICAgICBmb3IgaSwgd2Vla2RheSBpbiBlbnVtZXJhdGUodGFyZ2V0LCAxKToKKyAgICAgICAgICAgIGUgPSBXZWVrRGF5KGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCB3ZWVrZGF5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBXZWVrRGF5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QuaW5kZXgoZSkrMSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDwgZSA8IDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFdlZWtEYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUsIEVudW0pCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX2R1cGxpY2F0ZXMoc2VsZik6CisgICAgICAgIGNsYXNzIFdlZWtEYXkoSW50RW51bSk6CisgICAgICAgICAgICBTVU5EQVkgPSAxCisgICAgICAgICAgICBNT05EQVkgPSAyCisgICAgICAgICAgICBUVUVTREFZID0gVEVVU0RBWSA9IDMKKyAgICAgICAgICAgIFdFRE5FU0RBWSA9IDQKKyAgICAgICAgICAgIFRIVVJTREFZID0gNQorICAgICAgICAgICAgRlJJREFZID0gNgorICAgICAgICAgICAgU0FUVVJEQVkgPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoV2Vla0RheS5URVVTREFZLCBXZWVrRGF5LlRVRVNEQVkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoV2Vla0RheSgzKS5uYW1lLCAnVFVFU0RBWScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2sgZm9yIGssdiBpbiBXZWVrRGF5Ll9fbWVtYmVyc19fLml0ZW1zKCkKKyAgICAgICAgICAgICAgICBpZiB2Lm5hbWUgIT0ga10sIFsnVEVVU0RBWScsIF0pCisKKyAgICBkZWYgdGVzdF9waWNrbGVfZW51bShzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShTdG9vZ2VzLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgU3Rvb2dlcworICAgICAgICBzZWxmLmFzc2VydElzKFN0b29nZXMuQ1VSTFksIGxvYWRzKGR1bXBzKFN0b29nZXMuQ1VSTFkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTdG9vZ2VzLCBsb2FkcyhkdW1wcyhTdG9vZ2VzKSkpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfaW50KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEludFN0b29nZXMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBJbnRTdG9vZ2VzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoSW50U3Rvb2dlcy5DVVJMWSwgbG9hZHMoZHVtcHMoSW50U3Rvb2dlcy5DVVJMWSkpKQorICAgICAgICBzZWxmLmFzc2VydElzKEludFN0b29nZXMsIGxvYWRzKGR1bXBzKEludFN0b29nZXMpKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9mbG9hdChzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShGbG9hdFN0b29nZXMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBGbG9hdFN0b29nZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGbG9hdFN0b29nZXMuQ1VSTFksIGxvYWRzKGR1bXBzKEZsb2F0U3Rvb2dlcy5DVVJMWSkpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZsb2F0U3Rvb2dlcywgbG9hZHMoZHVtcHMoRmxvYXRTdG9vZ2VzKSkpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfZW51bV9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShBbnN3ZXIsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBBbnN3ZXIKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBbnN3ZXIuaGltLCBsb2FkcyhkdW1wcyhBbnN3ZXIuaGltKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoQW5zd2VyLCBsb2FkcyhkdW1wcyhBbnN3ZXIpKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtX2Z1bmN0aW9uX3dpdGhfbW9kdWxlKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKFF1ZXN0aW9uLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgUXVlc3Rpb24KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhRdWVzdGlvbi53aG8sIGxvYWRzKGR1bXBzKFF1ZXN0aW9uLndobykpKQorICAgICAgICBzZWxmLmFzc2VydElzKFF1ZXN0aW9uLCBsb2FkcyhkdW1wcyhRdWVzdGlvbikpKQorCisgICAgZGVmIHRlc3RfZXhwbG9kaW5nX3BpY2tsZShzZWxmKToKKyAgICAgICAgQmFkUGlja2xlID0gRW51bSgnQmFkUGlja2xlJywgJ2RpbGwgc3dlZXQgYnJlYWQtbi1idXR0ZXInKQorICAgICAgICBlbnVtLl9tYWtlX2NsYXNzX3VucGlja2xhYmxlKEJhZFBpY2tsZSkKKyAgICAgICAgZ2xvYmFscygpWydCYWRQaWNrbGUnXSA9IEJhZFBpY2tsZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkdW1wcyhCYWRQaWNrbGUuZGlsbCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhQaWNrbGluZ0Vycm9yKToKKyAgICAgICAgICAgIGR1bXBzKEJhZFBpY2tsZSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ19lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBTa2lsbExldmVsKHN0ciwgRW51bSk6CisgICAgICAgICAgICBtYXN0ZXIgPSAnd2hhdCBpcyB0aGUgc291bmQgb2Ygb25lIGhhbmQgY2xhcHBpbmc/JworICAgICAgICAgICAgam91cm5leW1hbiA9ICd3aHkgZGlkIHRoZSBjaGlja2VuIGNyb3NzIHRoZSByb2FkPycKKyAgICAgICAgICAgIGFwcHJlbnRpY2UgPSAna25vY2ssIGtub2NrIScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTa2lsbExldmVsLmFwcHJlbnRpY2UsICdrbm9jaywga25vY2shJykKKworICAgIGRlZiB0ZXN0X2dldGF0dHJfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgY2xhc3MgUGVyaW9kKEVudW0pOgorICAgICAgICAgICAgbW9ybmluZyA9IDEKKyAgICAgICAgICAgIG5vb24gPSAyCisgICAgICAgICAgICBldmVuaW5nID0gMworICAgICAgICAgICAgbmlnaHQgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUGVyaW9kKDIpLCBQZXJpb2Qubm9vbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKFBlcmlvZCwgJ25pZ2h0JyksIFBlcmlvZC5uaWdodCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQZXJpb2RbJ21vcm5pbmcnXSwgUGVyaW9kLm1vcm5pbmcpCisKKyAgICBkZWYgdGVzdF9nZXRhdHRyX2R1bmRlcihzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIoU2Vhc29uLCAnX19lcV9fJykpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb25fb3JkZXIoc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFVVFVNTiA9IDMKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KFNlYXNvbiksCisgICAgICAgICAgICAgICAgW1NlYXNvbi5TVU1NRVIsIFNlYXNvbi5XSU5URVIsIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5TUFJJTkddLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3JldmVyc2VkX2l0ZXJhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KHJldmVyc2VkKHNlbGYuU2Vhc29uKSksCisgICAgICAgICAgICAgICAgW3NlbGYuU2Vhc29uLldJTlRFUiwgc2VsZi5TZWFzb24uQVVUVU1OLCBzZWxmLlNlYXNvbi5TVU1NRVIsCisgICAgICAgICAgICAgICAgIHNlbGYuU2Vhc29uLlNQUklOR10KKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9zdHJpbmcoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcpCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9zdHJpbmdfbGlzdChzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKCdTdW1tZXJNb250aCcsIFsnanVuZScsICdqdWx5JywgJ2F1Z3VzdCddKQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlLnZhbHVlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25faXRlcmFibGUoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgKKyAgICAgICAgICAgICAgICAnU3VtbWVyTW9udGgnLAorICAgICAgICAgICAgICAgICgoJ2p1bmUnLCAxKSwgKCdqdWx5JywgMiksICgnYXVndXN0JywgMykpCisgICAgICAgICAgICAgICAgKQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlLnZhbHVlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25fZnJvbV9kaWN0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oCisgICAgICAgICAgICAgICAgJ1N1bW1lck1vbnRoJywKKyAgICAgICAgICAgICAgICBPcmRlcmVkRGljdCgoKCdqdW5lJywgMSksICgnanVseScsIDIpLCAoJ2F1Z3VzdCcsIDMpKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl90eXBlKHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgJ2p1bmUganVseSBhdWd1c3QnLCB0eXBlPWludCkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl90eXBlX2Zyb21fc3ViY2xhc3Moc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gSW50RW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcpCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Npbmcoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoTmFtZSwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIE5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOYW1lLkJERkwsICdHdWlkbyB2YW4gUm9zc3VtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE5hbWUuQkRGTCwgTmFtZSgnR3VpZG8gdmFuIFJvc3N1bScpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5hbWUuQkRGTCwgZ2V0YXR0cihOYW1lLCAnQkRGTCcpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5hbWUuQkRGTCwgbG9hZHMoZHVtcHMoTmFtZS5CREZMKSkpCisKKyAgICBkZWYgdGVzdF9leHRlbmRpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICAgICAgbWFnZW50YSA9IDUKKyAgICAgICAgICAgICAgICB5ZWxsb3cgPSA2CisKKyAgICBkZWYgdGVzdF9leGNsdWRlX21ldGhvZHMoc2VsZik6CisgICAgICAgIGNsYXNzIHdoYXRldmVyKEVudW0pOgorICAgICAgICAgICAgdGhpcyA9ICd0aGF0JworICAgICAgICAgICAgdGhlc2UgPSAndGhvc2UnCisgICAgICAgICAgICBkZWYgcmVhbGx5KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnbm8sIG5vdCAlcycgJSBzZWxmLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodHlwZSh3aGF0ZXZlci5yZWFsbHkpLCB3aGF0ZXZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aGF0ZXZlci50aGlzLnJlYWxseSgpLCAnbm8sIG5vdCB0aGF0JykKKworICAgIGRlZiB0ZXN0X3dyb25nX2luaGVyaXRhbmNlX29yZGVyKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtLCBzdHIpOgorICAgICAgICAgICAgICAgIE5vdEhlcmUgPSAnZXJyb3IgYmVmb3JlIHRoaXMgcG9pbnQnCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX3RyYW5zaXRpdml0eShzZWxmKToKKyAgICAgICAgY2xhc3MgbnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgb25lID0gMQorICAgICAgICAgICAgdHdvID0gMgorICAgICAgICAgICAgdGhyZWUgPSAzCisgICAgICAgIGNsYXNzIG51bWVybyhJbnRFbnVtKToKKyAgICAgICAgICAgIHVubyA9IDEKKyAgICAgICAgICAgIGRvcyA9IDIKKyAgICAgICAgICAgIHRyZXMgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtYmVyLm9uZSwgbnVtZXJvLnVubykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1iZXIudHdvLCBudW1lcm8uZG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlci50aHJlZSwgbnVtZXJvLnRyZXMpCisKKyAgICBkZWYgdGVzdF93cm9uZ19lbnVtX2luX2NhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoRW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoRW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBNb25vY2hyb21lLCBHZW5kZXIubWFsZSkKKworICAgIGRlZiB0ZXN0X3dyb25nX2VudW1faW5fbWl4ZWRfY2FsbChzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShJbnRFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIE1vbm9jaHJvbWUsIEdlbmRlci5tYWxlKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfZW51bV9pbl9jYWxsXzEoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoSW50RW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoSW50RW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydElzKE1vbm9jaHJvbWUoR2VuZGVyLmZlbWFsZSksIE1vbm9jaHJvbWUud2hpdGUpCisKKyAgICBkZWYgdGVzdF9taXhlZF9lbnVtX2luX2NhbGxfMihzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTW9ub2Nocm9tZShHZW5kZXIubWFsZSksIE1vbm9jaHJvbWUuYmxhY2spCisKKyAgICBkZWYgdGVzdF9mbHVmbF9lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBGbHVmbG51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZi52YWx1ZSkKKyAgICAgICAgY2xhc3MgTWFpbE1hbk9wdGlvbnMoRmx1ZmxudW0pOgorICAgICAgICAgICAgb3B0aW9uMSA9IDEKKyAgICAgICAgICAgIG9wdGlvbjIgPSAyCisgICAgICAgICAgICBvcHRpb24zID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChNYWlsTWFuT3B0aW9ucy5vcHRpb24xKSwgMSkKKworICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24oc2VsZik6CisgICAgICAgIGNsYXNzIE51bWJlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDEwMAorICAgICAgICAgICAgdHdvID0gMjAwCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTnVtYmVyLm9uZS5fbWVtYmVyX3R5cGVfLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTnVtYmVyLl9tZW1iZXJfdHlwZV8sIGludCkKKyAgICAgICAgY2xhc3MgU3RyaW5nKHN0ciwgRW51bSk6CisgICAgICAgICAgICB5YXJuID0gJ3NvZnQnCisgICAgICAgICAgICByb3BlID0gJ3JvdWdoJworICAgICAgICAgICAgd2lyZSA9ICdoYXJkJworICAgICAgICBzZWxmLmFzc2VydElzKFN0cmluZy55YXJuLl9tZW1iZXJfdHlwZV8sIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTdHJpbmcuX21lbWJlcl90eXBlXywgc3RyKQorICAgICAgICBjbGFzcyBQbGFpbihFbnVtKToKKyAgICAgICAgICAgIHZhbmlsbGEgPSAnd2hpdGUnCisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUGxhaW4udmFuaWxsYS5fbWVtYmVyX3R5cGVfLCBvYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUGxhaW4uX21lbWJlcl90eXBlXywgb2JqZWN0KQorCisgICAgZGVmIHRlc3Rfbm9fc3VjaF9lbnVtX21lbWJlcihzZWxmKToKKyAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBDb2xvcig0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIENvbG9yWydjaGFydHJldXNlJ10KKworICAgIGRlZiB0ZXN0X25ld19yZXByKHNlbGYpOgorICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImRvbid0IHlvdSBqdXN0IGxvdmUgc2hhZGVzIG9mICVzPyIgJSBzZWxmLm5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXByKENvbG9yLmJsdWUpLAorICAgICAgICAgICAgICAgICJkb24ndCB5b3UganVzdCBsb3ZlIHNoYWRlcyBvZiBibHVlPyIsCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX3JlcHIoc2VsZik6CisgICAgICAgIGNsYXNzIE15RW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIk15IG5hbWUgaXMgJXMuIiAlIHNlbGYubmFtZQorICAgICAgICBjbGFzcyBNeUludEVudW0oaW50LCBNeUVudW0pOgorICAgICAgICAgICAgdGhpcyA9IDEKKyAgICAgICAgICAgIHRoYXQgPSAyCisgICAgICAgICAgICB0aGVvdGhlciA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE15SW50RW51bS50aGF0KSwgIk15IG5hbWUgaXMgdGhhdC4iKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfbWl4aW5fbXJvKHNlbGYpOgorICAgICAgICBjbGFzcyBhdXRvX2VudW0odHlwZShFbnVtKSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhtZXRhY2xzLCBjbHMsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICAgICAgICAgIHRlbXAgPSB0eXBlKGNsYXNzZGljdCkoKQorICAgICAgICAgICAgICAgIG5hbWVzID0gc2V0KGNsYXNzZGljdC5fbWVtYmVyX25hbWVzKQorICAgICAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHYgPSBjbGFzc2RpY3Rba10KKyAgICAgICAgICAgICAgICAgICAgaWYgdiBpcyBFbGxpcHNpczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gdgorICAgICAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgICAgICAgICAgdGVtcFtrXSA9IHYKKyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBjbGFzc2RpY3QuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wW2tdID0gdgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihhdXRvX2VudW0sIG1ldGFjbHMpLl9fbmV3X18oCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhY2xzLCBjbHMsIGJhc2VzLCB0ZW1wKQorCisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXJlZEVudW0oRW51bSwgbWV0YWNsYXNzPWF1dG9fZW51bSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQXV0b0ludEVudW0oSW50RW51bSwgbWV0YWNsYXNzPWF1dG9fZW51bSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdEF1dG9OdW1iZXIoQXV0b051bWJlcmVkRW51bSk6CisgICAgICAgICAgICBhID0gLi4uCisgICAgICAgICAgICBiID0gMworICAgICAgICAgICAgYyA9IC4uLgorCisgICAgICAgIGNsYXNzIFRlc3RBdXRvSW50KEF1dG9JbnRFbnVtKToKKyAgICAgICAgICAgIGEgPSAuLi4KKyAgICAgICAgICAgIGIgPSAzCisgICAgICAgICAgICBjID0gLi4uCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhfZ2V0bmV3YXJncyhzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIF9hcmdzID0gYXJncworICAgICAgICAgICAgICAgIG5hbWUsICphcmdzID0gYXJncworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5hbWUgYW5kIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgICAgICBzZWxmID0gaW50Ll9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPSBfYXJncworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FyZ3MKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbmFtZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRuYW1lCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyByZXByKCkgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBuYW1lIGFuZCB0eXBlIGluZm8KKyAgICAgICAgICAgICAgICByZXR1cm4gInt9KHshcn0sIHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Ll9fcmVwcl9fKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBzdHIoKSBpcyB1bmNoYW5nZWQsIGV2ZW4gaWYgaXQgcmVsaWVzIG9uIHRoZSByZXByKCkgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICBiYXNlID0gaW50CisgICAgICAgICAgICAgICAgYmFzZV9zdHIgPSBiYXNlLl9fc3RyX18KKyAgICAgICAgICAgICAgICBpZiBiYXNlX3N0ci5fX29iamNsYXNzX18gaXMgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5fX3JlcHJfXyhzZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3N0cihzZWxmKQorICAgICAgICAgICAgIyBmb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBkZWZpbmUgb25lIG9wZXJhdG9yIHRoYXQKKyAgICAgICAgICAgICMgcHJvcGFnYXRlcyBleHByZXNzaW9ucworICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBpbnQoc2VsZikgKyBpbnQoIG90aGVyKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgTmFtZWRJbnQpIGFuZCBpc2luc3RhbmNlKG90aGVyLCBOYW1lZEludCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lZEludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcoezB9ICsgezF9KScuZm9ybWF0KHNlbGYuX19uYW1lX18sIG90aGVyLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wCisKKyAgICAgICAgY2xhc3MgTkVJKE5hbWVkSW50LCBFbnVtKToKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRzKGR1bXBzKE5JNSkpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5FSS55LnZhbHVlLCAyKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRzKGR1bXBzKE5FSS55KSksIE5FSS55KQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRob3V0X2dldG5ld2FyZ3Moc2VsZik6CisgICAgICAgIGNsYXNzIE5hbWVkSW50KGludCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5FSS55LnZhbHVlLCAyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkdW1wcyhORUkueCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhQaWNrbGluZ0Vycm9yKToKKyAgICAgICAgICAgIGR1bXBzKE5FSSkKKworICAgIGRlZiB0ZXN0X3R1cGxlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBTb21lVHVwbGUodHVwbGUsIEVudW0pOgorICAgICAgICAgICAgZmlyc3QgPSAoMSwgJ2ZvciB0aGUgbW9uZXknKQorICAgICAgICAgICAgc2Vjb25kID0gKDIsICdmb3IgdGhlIHNob3cnKQorICAgICAgICAgICAgdGhpcmQgPSAoMywgJ2ZvciB0aGUgbXVzaWMnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoU29tZVR1cGxlLmZpcnN0KSwgU29tZVR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoU29tZVR1cGxlLnNlY29uZCwgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZVR1cGxlLnRoaXJkLCAoMywgJ2ZvciB0aGUgbXVzaWMnKSkKKyAgICAgICAgZ2xvYmFscygpWydTb21lVHVwbGUnXSA9IFNvbWVUdXBsZQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRzKGR1bXBzKFNvbWVUdXBsZS5maXJzdCkpLCBTb21lVHVwbGUuZmlyc3QpCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfdmFsdWVzX2dpdmVfdW5pcXVlX2VudW1faXRlbXMoc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgICAgICAgICBmaXJzdCA9ICgpCisgICAgICAgICAgICBzZWNvbmQgPSAoKQorICAgICAgICAgICAgdGhpcmQgPSAoKQorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgICAgICAgICAgICAgIG9iaiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgICAgICAgICBvYmouX3ZhbHVlXyA9IHZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLl92YWx1ZV8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgbGlzdChBdXRvTnVtYmVyKSwKKyAgICAgICAgICAgICAgICBbQXV0b051bWJlci5maXJzdCwgQXV0b051bWJlci5zZWNvbmQsIEF1dG9OdW1iZXIudGhpcmRdLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoQXV0b051bWJlci5zZWNvbmQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEF1dG9OdW1iZXIudGhpcmQudmFsdWUsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoQXV0b051bWJlcigxKSwgQXV0b051bWJlci5maXJzdCkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9uZXdfZnJvbV9lbmhhbmNlZF9lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBBdXRvTnVtYmVyKEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgICAgICAgICAgICAgIG9iaiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgICAgICAgICBvYmouX3ZhbHVlXyA9IHZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLl92YWx1ZV8pCisgICAgICAgIGNsYXNzIENvbG9yKEF1dG9OdW1iZXIpOgorICAgICAgICAgICAgcmVkID0gKCkKKyAgICAgICAgICAgIGdyZWVuID0gKCkKKyAgICAgICAgICAgIGJsdWUgPSAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoQ29sb3IpLCBbQ29sb3IucmVkLCBDb2xvci5ncmVlbiwgQ29sb3IuYmx1ZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtYXAoaW50LCBDb2xvcikpLCBbMSwgMiwgM10pCisKKyAgICBkZWYgdGVzdF9pbmhlcml0ZWRfbmV3X2Zyb21fbWl4ZWRfZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcihJbnRFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBsZW4oY2xzLl9fbWVtYmVyc19fKSArIDEKKyAgICAgICAgICAgICAgICBvYmogPSBpbnQuX19uZXdfXyhjbHMsIHZhbHVlKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGNsYXNzIENvbG9yKEF1dG9OdW1iZXIpOgorICAgICAgICAgICAgcmVkID0gKCkKKyAgICAgICAgICAgIGdyZWVuID0gKCkKKyAgICAgICAgICAgIGJsdWUgPSAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoQ29sb3IpLCBbQ29sb3IucmVkLCBDb2xvci5ncmVlbiwgQ29sb3IuYmx1ZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtYXAoaW50LCBDb2xvcikpLCBbMSwgMiwgM10pCisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX21peGluKHNlbGYpOgorICAgICAgICBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlXyA+PSBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPiBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPD0gb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfIDwgb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKEdyYWRlLkEsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKEdyYWRlLkYsIEdyYWRlLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhHcmFkZS5ELCBHcmFkZS5BKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChHcmFkZS5CLCBHcmFkZS5CKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kaW5nMihzZWxmKToKKyAgICAgICAgY2xhc3MgU2hhZGUoRW51bSk6CisgICAgICAgICAgICBkZWYgc2hhZGUoc2VsZik6CisgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5uYW1lKQorICAgICAgICBjbGFzcyBDb2xvcihTaGFkZSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIE1vcmVDb2xvcihDb2xvcik6CisgICAgICAgICAgICAgICAgY3lhbiA9IDQKKyAgICAgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgICAgIHllbGxvdyA9IDYKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZzMoc2VsZik6CisgICAgICAgIGNsYXNzIFNoYWRlKEVudW0pOgorICAgICAgICAgICAgZGVmIHNoYWRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKKyAgICAgICAgY2xhc3MgQ29sb3IoU2hhZGUpOgorICAgICAgICAgICAgZGVmIGhleChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVzIGhleGxpZmllZCEnICUgc2VsZi52YWx1ZQorICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgY3lhbiA9IDQKKyAgICAgICAgICAgIG1hZ2VudGEgPSA1CisgICAgICAgICAgICB5ZWxsb3cgPSA2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9yZUNvbG9yLm1hZ2VudGEuaGV4KCksICc1IGhleGxpZmllZCEnKQorCisKKyAgICBkZWYgdGVzdF9ub19kdXBsaWNhdGVzKHNlbGYpOgorICAgICAgICBjbGFzcyBVbmlxdWVFbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBjbHMgPSBzZWxmLl9fY2xhc3NfXworICAgICAgICAgICAgICAgIGlmIGFueShzZWxmLnZhbHVlID09IGUudmFsdWUgZm9yIGUgaW4gY2xzKToKKyAgICAgICAgICAgICAgICAgICAgYSA9IHNlbGYubmFtZQorICAgICAgICAgICAgICAgICAgICBlID0gY2xzKHNlbGYudmFsdWUpLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpYXNlcyBub3QgYWxsb3dlZCBpbiBVbmlxdWVFbnVtOiAgJXIgLS0+ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGEsIGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBjbGFzcyBDb2xvcihVbmlxdWVFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKFVuaXF1ZUVudW0pOgorICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgICAgIGdyZW5lID0gMgorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgY2xhc3MgUGxhbmV0KEVudW0pOgorICAgICAgICAgICAgTUVSQ1VSWSA9ICgzLjMwM2UrMjMsIDIuNDM5N2U2KQorICAgICAgICAgICAgVkVOVVMgICA9ICg0Ljg2OWUrMjQsIDYuMDUxOGU2KQorICAgICAgICAgICAgRUFSVEggICA9ICg1Ljk3NmUrMjQsIDYuMzc4MTRlNikKKyAgICAgICAgICAgIE1BUlMgICAgPSAoNi40MjFlKzIzLCAzLjM5NzJlNikKKyAgICAgICAgICAgIEpVUElURVIgPSAoMS45ZSsyNywgICA3LjE0OTJlNykKKyAgICAgICAgICAgIFNBVFVSTiAgPSAoNS42ODhlKzI2LCA2LjAyNjhlNykKKyAgICAgICAgICAgIFVSQU5VUyAgPSAoOC42ODZlKzI1LCAyLjU1NTllNykKKyAgICAgICAgICAgIE5FUFRVTkUgPSAoMS4wMjRlKzI2LCAyLjQ3NDZlNykKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXNzLCByYWRpdXMpOgorICAgICAgICAgICAgICAgIHNlbGYubWFzcyA9IG1hc3MgICAgICAgIyBpbiBraWxvZ3JhbXMKKyAgICAgICAgICAgICAgICBzZWxmLnJhZGl1cyA9IHJhZGl1cyAgICMgaW4gbWV0ZXJzCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBzdXJmYWNlX2dyYXZpdHkoc2VsZik6CisgICAgICAgICAgICAgICAgIyB1bml2ZXJzYWwgZ3Jhdml0YXRpb25hbCBjb25zdGFudCAgKG0zIGtnLTEgcy0yKQorICAgICAgICAgICAgICAgIEcgPSA2LjY3MzAwRS0xMQorICAgICAgICAgICAgICAgIHJldHVybiBHICogc2VsZi5tYXNzIC8gKHNlbGYucmFkaXVzICogc2VsZi5yYWRpdXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoUGxhbmV0LkVBUlRILnN1cmZhY2VfZ3Jhdml0eSwgMiksIDkuODApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGxhbmV0LkVBUlRILnZhbHVlLCAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpKQorCisgICAgZGVmIHRlc3Rfbm9uaGFzaF92YWx1ZShzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlckluQUxpc3QoRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gW2xlbihjbHMuX19tZW1iZXJzX18pICsgMV0KKyAgICAgICAgICAgICAgICBvYmogPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgY2xhc3MgQ29sb3JJbkFMaXN0KEF1dG9OdW1iZXJJbkFMaXN0KToKKyAgICAgICAgICAgIHJlZCA9ICgpCisgICAgICAgICAgICBncmVlbiA9ICgpCisgICAgICAgICAgICBibHVlID0gKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KENvbG9ySW5BTGlzdCksIFtDb2xvckluQUxpc3QucmVkLCBDb2xvckluQUxpc3QuZ3JlZW4sIENvbG9ySW5BTGlzdC5ibHVlXSkKKyAgICAgICAgZm9yIGVudW0sIHZhbHVlIGluIHppcChDb2xvckluQUxpc3QsIHJhbmdlKDMpKToKKyAgICAgICAgICAgIHZhbHVlICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW51bS52YWx1ZSwgW3ZhbHVlXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoQ29sb3JJbkFMaXN0KFt2YWx1ZV0pLCBlbnVtKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RpbmdfdHlwZXNfcmVzb2x2ZWRfaW5fbmV3KHNlbGYpOgorICAgICAgICBjbGFzcyBMYWJlbGxlZEludEVudW0oaW50LCBFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHZhbHVlLCBsYWJlbCA9IGFyZ3MKKyAgICAgICAgICAgICAgICBvYmogPSBpbnQuX19uZXdfXyhjbHMsIHZhbHVlKQorICAgICAgICAgICAgICAgIG9iai5sYWJlbCA9IGxhYmVsCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKworICAgICAgICBjbGFzcyBMYWJlbGxlZExpc3QoTGFiZWxsZWRJbnRFbnVtKToKKyAgICAgICAgICAgIHVucHJvY2Vzc2VkID0gKDEsICJVbnByb2Nlc3NlZCIpCisgICAgICAgICAgICBwYXltZW50X2NvbXBsZXRlID0gKDIsICJQYXltZW50IENvbXBsZXRlIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoTGFiZWxsZWRMaXN0KSwgW0xhYmVsbGVkTGlzdC51bnByb2Nlc3NlZCwgTGFiZWxsZWRMaXN0LnBheW1lbnRfY29tcGxldGVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExhYmVsbGVkTGlzdC51bnByb2Nlc3NlZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMYWJlbGxlZExpc3QoMSksIExhYmVsbGVkTGlzdC51bnByb2Nlc3NlZCkKKworCitjbGFzcyBUZXN0VW5pcXVlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaXF1ZV9jbGVhbihzZWxmKToKKyAgICAgICAgQHVuaXF1ZQorICAgICAgICBjbGFzcyBDbGVhbihFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgICAgIHR3byA9ICdkb3MnCisgICAgICAgICAgICB0cmVzID0gNC4wCisgICAgICAgIEB1bmlxdWUKKyAgICAgICAgY2xhc3MgQ2xlYW5lcihJbnRFbnVtKToKKyAgICAgICAgICAgIHNpbmdsZSA9IDEKKyAgICAgICAgICAgIGRvdWJsZSA9IDIKKyAgICAgICAgICAgIHRyaXBsZSA9IDMKKworICAgIGRlZiB0ZXN0X3VuaXF1ZV9kaXJ0eShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd0cmVzLipvbmUnKToKKyAgICAgICAgICAgIEB1bmlxdWUKKyAgICAgICAgICAgIGNsYXNzIERpcnR5KEVudW0pOgorICAgICAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgICAgICAgICB0d28gPSAnZG9zJworICAgICAgICAgICAgICAgIHRyZXMgPSAxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgICAgICBWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICdkb3VibGUuKnNpbmdsZS4qdHVya2V5Lip0cmlwbGUnLAorICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICBAdW5pcXVlCisgICAgICAgICAgICBjbGFzcyBEaXJ0aWVyKEludEVudW0pOgorICAgICAgICAgICAgICAgIHNpbmdsZSA9IDEKKyAgICAgICAgICAgICAgICBkb3VibGUgPSAxCisgICAgICAgICAgICAgICAgdHJpcGxlID0gMworICAgICAgICAgICAgICAgIHR1cmtleSA9IDMKKworCitleHBlY3RlZF9oZWxwX291dHB1dCA9ICIiIgorSGVscCBvbiBjbGFzcyBDb2xvciBpbiBtb2R1bGUgJXM6CisKK2NsYXNzIENvbG9yKGVudW0uRW51bSkKKyB8ICBNZXRob2QgcmVzb2x1dGlvbiBvcmRlcjoKKyB8ICAgICAgQ29sb3IKKyB8ICAgICAgZW51bS5FbnVtCisgfCAgICAgIGJ1aWx0aW5zLm9iamVjdAorIHxceDIwXHgyMAorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCBoZXJlOgorIHxceDIwXHgyMAorIHwgIGJsdWUgPSA8Q29sb3IuYmx1ZTogMz4KKyB8XHgyMFx4MjAKKyB8ICBncmVlbiA9IDxDb2xvci5ncmVlbjogMj4KKyB8XHgyMFx4MjAKKyB8ICByZWQgPSA8Q29sb3IucmVkOiAxPgorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGRlc2NyaXB0b3JzIGluaGVyaXRlZCBmcm9tIGVudW0uRW51bToKKyB8XHgyMFx4MjAKKyB8ICBuYW1lCisgfCAgICAgIFRoZSBuYW1lIG9mIHRoZSBFbnVtIG1lbWJlci4KKyB8XHgyMFx4MjAKKyB8ICB2YWx1ZQorIHwgICAgICBUaGUgdmFsdWUgb2YgdGhlIEVudW0gbWVtYmVyLgorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGRlc2NyaXB0b3JzIGluaGVyaXRlZCBmcm9tIGVudW0uRW51bU1ldGE6CisgfFx4MjBceDIwCisgfCAgX19tZW1iZXJzX18KKyB8ICAgICAgUmV0dXJucyBhIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUtPnZhbHVlLgorIHxceDIwXHgyMFx4MjBceDIwXHgyMFx4MjAKKyB8ICAgICAgVGhpcyBtYXBwaW5nIGxpc3RzIGFsbCBlbnVtIG1lbWJlcnMsIGluY2x1ZGluZyBhbGlhc2VzLiBOb3RlIHRoYXQgdGhpcworIHwgICAgICBpcyBhIHJlYWQtb25seSB2aWV3IG9mIHRoZSBpbnRlcm5hbCBtYXBwaW5nLgorIiIiLnN0cmlwKCkKKworY2xhc3MgVGVzdFN0ZExpYih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgcmVkID0gMQorICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgYmx1ZSA9IDMKKworICAgIGRlZiB0ZXN0X3B5ZG9jKHNlbGYpOgorICAgICAgICAjIGluZGlyZWN0bHkgdGVzdCBfX29iamNsYXNzX18KKyAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX2hlbHBfb3V0cHV0ICUgX19uYW1lX18KKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKHNlbGYuQ29sb3IpCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgZGVmIHRlc3RfaW5zcGVjdF9nZXRtZW1iZXJzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBkaWN0KCgKKyAgICAgICAgICAgICAgICAoJ19fY2xhc3NfXycsIEVudW1NZXRhKSwKKyAgICAgICAgICAgICAgICAoJ19fZG9jX18nLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoJ19fbWVtYmVyc19fJywgc2VsZi5Db2xvci5fX21lbWJlcnNfXyksCisgICAgICAgICAgICAgICAgKCdfX21vZHVsZV9fJywgX19uYW1lX18pLAorICAgICAgICAgICAgICAgICgnYmx1ZScsIHNlbGYuQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgKCdncmVlbicsIHNlbGYuQ29sb3IuZ3JlZW4pLAorICAgICAgICAgICAgICAgICgnbmFtZScsIEVudW0uX19kaWN0X19bJ25hbWUnXSksCisgICAgICAgICAgICAgICAgKCdyZWQnLCBzZWxmLkNvbG9yLnJlZCksCisgICAgICAgICAgICAgICAgKCd2YWx1ZScsIEVudW0uX19kaWN0X19bJ3ZhbHVlJ10pLAorICAgICAgICAgICAgICAgICkpCisgICAgICAgIHJlc3VsdCA9IGRpY3QoaW5zcGVjdC5nZXRtZW1iZXJzKHNlbGYuQ29sb3IpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcy5rZXlzKCksIHJlc3VsdC5rZXlzKCkpCisgICAgICAgIGZhaWxlZCA9IEZhbHNlCisgICAgICAgIGZvciBrIGluIHZhbHVlcy5rZXlzKCk6CisgICAgICAgICAgICBpZiByZXN1bHRba10gIT0gdmFsdWVzW2tdOgorICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICBwcmludCgnXG4lc1xuICAgICBrZXk6ICVzXG4gIHJlc3VsdDogJXNcbmV4cGVjdGVkOiAlc1xuJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgKCc9JyAqIDc1LCBrLCByZXN1bHRba10sIHZhbHVlc1trXSwgJz0nICogNzUpLCBzZXA9JycpCisgICAgICAgICAgICAgICAgZmFpbGVkID0gVHJ1ZQorICAgICAgICBpZiBmYWlsZWQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlc3VsdCBkb2VzIG5vdCBlcXVhbCBleHBlY3RlZCwgc2VlIHByaW50IGFib3ZlIikKKworICAgIGRlZiB0ZXN0X2luc3BlY3RfY2xhc3NpZnlfY2xhc3NfYXR0cnMoc2VsZik6CisgICAgICAgICMgaW5kaXJlY3RseSB0ZXN0IF9fb2JqY2xhc3NfXworICAgICAgICBmcm9tIGluc3BlY3QgaW1wb3J0IEF0dHJpYnV0ZQorICAgICAgICB2YWx1ZXMgPSBbCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fY2xhc3NfXycsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1vYmplY3QsIG9iamVjdD1FbnVtTWV0YSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fZG9jX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PU5vbmUpLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX21lbWJlcnNfXycsIGtpbmQ9J3Byb3BlcnR5JywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bU1ldGEsIG9iamVjdD1FbnVtTWV0YS5fX21lbWJlcnNfXyksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fbW9kdWxlX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PV9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nYmx1ZScsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1zZWxmLkNvbG9yLCBvYmplY3Q9c2VsZi5Db2xvci5ibHVlKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nZ3JlZW4nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IuZ3JlZW4pLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdyZWQnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IucmVkKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nbmFtZScsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1FbnVtLCBvYmplY3Q9RW51bS5fX2RpY3RfX1snbmFtZSddKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0ndmFsdWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bSwgb2JqZWN0PUVudW0uX19kaWN0X19bJ3ZhbHVlJ10pLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgdmFsdWVzLnNvcnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLm5hbWUpCisgICAgICAgIHJlc3VsdCA9IGxpc3QoaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhzZWxmLkNvbG9yKSkKKyAgICAgICAgcmVzdWx0LnNvcnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLm5hbWUpCisgICAgICAgIGZhaWxlZCA9IEZhbHNlCisgICAgICAgIGZvciB2LCByIGluIHppcCh2YWx1ZXMsIHJlc3VsdCk6CisgICAgICAgICAgICBpZiByICE9IHY6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1xuJXNcbiVzXG4lc1xuJXNcbicgJSAoJz0nICogNzUsIHIsIHYsICc9JyAqIDc1KSwgc2VwPScnKQorICAgICAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICAgICAgaWYgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZXN1bHQgZG9lcyBub3QgZXF1YWwgZXhwZWN0ZWQsIHNlZSBwcmludCBhYm92ZSIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CmluZGV4IDJlOTA0Y2YuLmEyZDE4ZDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CkBAIC0xLDQgKzEsNSBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBzeXMKIGltcG9ydCBwaWNrbGUKIApAQCAtMTY4LDE1ICsxNjksMTIgQEAKICAgICAgICAgeCA9IHJhbmdlKDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXZlcnNlZCh4KSksIHR5cGUoaXRlcih4KSkpCiAKLSAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9sZW4oc2VsZik6Ci0gICAgICAgICMgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIG5vdCBhbiBpbnRlcmZhY2UgcmVxdWlyZW1lbnQKLSAgICAgICAgZnJvbSB0ZXN0LnRlc3RfaXRlcmxlbiBpbXBvcnQgbGVuCiAgICAgICAgIGZvciBzIGluICgnaGVsbG8nLCB0dXBsZSgnaGVsbG8nKSwgbGlzdCgnaGVsbG8nKSwgcmFuZ2UoNSkpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV2ZXJzZWQocykpLCBsZW4ocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJldmVyc2VkKHMpKSwgbGVuKHMpKQogICAgICAgICAgICAgciA9IHJldmVyc2VkKHMpCiAgICAgICAgICAgICBsaXN0KHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQociksIDApCiAgICAgICAgIGNsYXNzIFNlcVdpdGhXZWlyZExlbjoKICAgICAgICAgICAgIGNhbGxlZCA9IEZhbHNlCiAgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKQEAgLTE4Nyw3ICsxODUsNyBAQAogICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXgKICAgICAgICAgciA9IHJldmVyc2VkKFNlcVdpdGhXZWlyZExlbigpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGVuLCByKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgb3BlcmF0b3IubGVuZ3RoX2hpbnQsIHIpCiAKIAogICAgIGRlZiB0ZXN0X2djKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lcG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKaW5kZXggN2Y5NTQ3Zi4uNjQ1OWZiYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CkBAIC0yMSwxMCArMjEsMTEgQEAKICIiIgogVGVzdHMgZm9yIGVwb2xsIHdyYXBwZXIuCiAiIiIKLWltcG9ydCBzb2NrZXQKIGltcG9ydCBlcnJubwotaW1wb3J0IHRpbWUKK2ltcG9ydCBvcwogaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKQEAgLTMzLDcgKzM0LDcgQEAKIAogdHJ5OgogICAgIHNlbGVjdC5lcG9sbCgpCi1leGNlcHQgSU9FcnJvciBhcyBlOgorZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NZUzoKICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgZXBvbGwoKSIpCiAgICAgcmFpc2UKQEAgLTU2LDcgKzU3LDcgQEAKICAgICAgICAgY2xpZW50LnNldGJsb2NraW5nKEZhbHNlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHNlbGYuc2VydmVyU29ja2V0LmdldHNvY2tuYW1lKClbMV0pKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUlOUFJPR1JFU1MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiQ29ubmVjdCBzaG91bGQgaGF2ZSByYWlzZWQgRUlOUFJPR1JFU1MiKQpAQCAtODcsNiArODgsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxlY3QuZXBvbGwsIFsnZm9vJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCB7fSkKIAorICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxlY3QuZXBvbGwoMTYpIGFzIGVwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGVwLmZpbGVubygpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGVwLmZpbGVubykKKwogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKICAgICAgICAgc2VydmVyLCBjbGllbnQgPSBzZWxmLl9jb25uZWN0ZWRfcGFpcigpCiAKQEAgLTExNSwxMiArMTIzLDEyIEBACiAgICAgICAgICAgICAjIFZhbHVlRXJyb3I6IGZpbGUgZGVzY3JpcHRvciBjYW5ub3QgYmUgYSBuZWdhdGl2ZSBpbnRlZ2VyICgtMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGVwLnJlZ2lzdGVyLCAtMSwKICAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKLSAgICAgICAgICAgICMgSU9FcnJvcjogW0Vycm5vIDldIEJhZCBmaWxlIGRlc2NyaXB0b3IKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGVwLnJlZ2lzdGVyLCAxMDAwMCwKKyAgICAgICAgICAgICMgT1NFcnJvcjogW0Vycm5vIDldIEJhZCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGVwLnJlZ2lzdGVyLCAxMDAwMCwKICAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKICAgICAgICAgICAgICMgcmVnaXN0ZXJpbmcgdHdpY2UgYWxzbyByYWlzZXMgYW4gZXhjZXB0aW9uCiAgICAgICAgICAgICBlcC5yZWdpc3RlcihzZXJ2ZXIsIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZXAucmVnaXN0ZXIsIHNlcnZlciwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGVwLnJlZ2lzdGVyLCBzZXJ2ZXIsCiAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBlcC5jbG9zZSgpCkBAIC0xNDIsNyArMTUwLDcgQEAKICAgICAgICAgZXAuY2xvc2UoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlcDIucG9sbCgxLCA0KQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVCQURGLCBlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJlcG9sbCBvbiBjbG9zZWQgZmQgZGlkbid0IHJhaXNlIEVCQURGIikKQEAgLTIxOCw2ICsyMjYsMzYgQEAKICAgICAgICAgc2VydmVyLmNsb3NlKCkKICAgICAgICAgZXAudW5yZWdpc3RlcihmZCkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBvcGVuX2ZpbGUgPSBvcGVuKF9fZmlsZV9fLCAicmIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3Blbl9maWxlLmNsb3NlKQorICAgICAgICBmZCA9IG9wZW5fZmlsZS5maWxlbm8oKQorICAgICAgICBlcG9sbCA9IHNlbGVjdC5lcG9sbCgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXBvbGwuZmlsZW5vKCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcG9sbC5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAgZXBvbGwuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXBvbGwuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgZXBvbGwuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5tb2RpZnksIGZkLCBzZWxlY3QuRVBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwucG9sbCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5yZWdpc3RlciwgZmQsIHNlbGVjdC5FUE9MTElOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC51bnJlZ2lzdGVyLCBmZCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZXBvbGwuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGVwb2xsLmZpbGVubygpKSwgRmFsc2UpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RFUG9sbCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5IGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CmluZGV4IDFhZDdmOTcuLmYwODUxYmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKQEAgLTgsOCArOCw4IEBACiBpbXBvcnQgZXJybm8KIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIGNhcHR1cmVkX291dHB1dCwgY2hlY2tfaW1wbF9kZXRhaWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNweXRob25fb25seSwgZ2NfY29sbGVjdCwgcnVuX3VuaXR0ZXN0LCBub190cmFjaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3dhcm5pbmdzLCBjcHl0aG9uX29ubHksIGdjX2NvbGxlY3QsIHJ1bl91bml0dGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fdHJhY2luZywgdW5saW5rKQogCiBjbGFzcyBOYWl2ZUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKQEAgLTI0NCwyMiArMjQ0LDIyIEBACiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgMSl9KSwKICAgICAgICAgICAgIChTeXN0ZW1FeGl0LCAoJ2ZvbycsKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCksICdjb2RlJyA6ICdmb28nfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywpLCAnZmlsZW5hbWUnIDogTm9uZSwKICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6IE5vbmUsICdzdHJlcnJvcicgOiBOb25lfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCAnYmFyJyksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicpLCAnZmlsZW5hbWUnIDogTm9uZSwKICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6ICdmb28nLCAnc3RyZXJyb3InIDogJ2Jhcid9KSwKLSAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JyksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6ICdiYXonLAogICAgICAgICAgICAgICAgICAnZXJybm8nIDogJ2ZvbycsICdzdHJlcnJvcicgOiAnYmFyJ30pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonLCAncXV1eCcpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonLCAncXV1eCcpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKX0pLAotICAgICAgICAgICAgKEVudmlyb25tZW50RXJyb3IsICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInKSwKICAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICdlcnJubycgOiAnZXJybm9TdHInLAogICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJ30pLAotICAgICAgICAgICAgKEVudmlyb25tZW50RXJyb3IsICgxLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoMSwgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgxLCAnc3RyRXJyb3JTdHInKSwgJ2Vycm5vJyA6IDEsCiAgICAgICAgICAgICAgICAgICdzdHJlcnJvcicgOiAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJ30pLAogICAgICAgICAgICAgKFN5bnRheEVycm9yLCAoKSwgeydtc2cnIDogTm9uZSwgJ3RleHQnIDogTm9uZSwKQEAgLTQwOSw3ICs0MDksNyBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlLl9fY29udGV4dF9fKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlLl9fY2F1c2VfXykKIAotICAgICAgICBjbGFzcyBNeUV4Y2VwdGlvbihFbnZpcm9ubWVudEVycm9yKToKKyAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oT1NFcnJvcik6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgZSA9IE15RXhjZXB0aW9uKCkKQEAgLTk0NywxMyArOTQ3LDExIEBACiAKICAgICBkZWYgdGVzdF9ub25fc3RyX2FyZ3VtZW50KHNlbGYpOgogICAgICAgICAjIElzc3VlICMxNTc3OAotICAgICAgICBhcmcgPSBiJ2FiYycKLSAgICAgICAgZXhjID0gSW1wb3J0RXJyb3IoYXJnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhcmcpLCBzdHIoZXhjKSkKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIEJ5dGVzV2FybmluZyksIHF1aWV0PVRydWUpOgorICAgICAgICAgICAgYXJnID0gYidhYmMnCisgICAgICAgICAgICBleGMgPSBJbXBvcnRFcnJvcihhcmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhcmcpLCBzdHIoZXhjKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvblRlc3RzLCBJbXBvcnRFcnJvclRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQppbmRleCA3NzBlNzBjLi5lYmQ5OWVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQpAQCAtMTksMTggKzE5LDYgQEAKIAogVElNRU9VVCA9IDAuNQogCi10cnk6Ci0gICAgZnJvbSByZXNvdXJjZSBpbXBvcnQgc2V0cmxpbWl0LCBSTElNSVRfQ09SRSwgZXJyb3IgYXMgcmVzb3VyY2VfZXJyb3IKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwcmVwYXJlX3N1YnByb2Nlc3MgPSBOb25lCi1lbHNlOgotICAgIGRlZiBwcmVwYXJlX3N1YnByb2Nlc3MoKToKLSAgICAgICAgIyBkb24ndCBjcmVhdGUgY29yZSBmaWxlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNldHJsaW1pdChSTElNSVRfQ09SRSwgKDAsIDApKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlX2Vycm9yKToKLSAgICAgICAgICAgIHBhc3MKLQogZGVmIGV4cGVjdGVkX3RyYWNlYmFjayhsaW5lbm8xLCBsaW5lbm8yLCBoZWFkZXIsIG1pbl9jb3VudD0xKToKICAgICByZWdleCA9IGhlYWRlcgogICAgIHJlZ2V4ICs9ICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAlcyBpbiBmdW5jXG4nICUgbGluZW5vMQpAQCAtNTksMTAgKzQ3LDggQEAKICAgICAgICAgYnVpbGQsIGFuZCByZXBsYWNlICJDdXJyZW50IHRocmVhZCAweDAwMDA3ZjhkOGZiZDk3MDAiIGJ5ICJDdXJyZW50CiAgICAgICAgIHRocmVhZCBYWFgiLgogICAgICAgICAiIiIKLSAgICAgICAgb3B0aW9ucyA9IHt9Ci0gICAgICAgIGlmIHByZXBhcmVfc3VicHJvY2VzczoKLSAgICAgICAgICAgIG9wdGlvbnNbJ3ByZWV4ZWNfZm4nXSA9IHByZXBhcmVfc3VicHJvY2VzcwotICAgICAgICBwcm9jZXNzID0gc2NyaXB0X2hlbHBlci5zcGF3bl9weXRob24oJy1jJywgY29kZSwgKipvcHRpb25zKQorICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgcHJvY2VzcyA9IHNjcmlwdF9oZWxwZXIuc3Bhd25fcHl0aG9uKCctYycsIGNvZGUpCiAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCiAgICAgICAgIGV4aXRjb2RlID0gcHJvY2Vzcy53YWl0KCkKICAgICAgICAgb3V0cHV0ID0gc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKHN0ZG91dCkKQEAgLTg2LDkgKzcyLDkgQEAKICAgICAgICAgUmFpc2UgYW4gZXJyb3IgaWYgdGhlIG91dHB1dCBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuCiAgICAgICAgICIiIgogICAgICAgICBpZiBhbGxfdGhyZWFkczoKLSAgICAgICAgICAgIGhlYWRlciA9ICdDdXJyZW50IHRocmVhZCBYWFgnCisgICAgICAgICAgICBoZWFkZXIgPSAnQ3VycmVudCB0aHJlYWQgWFhYIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KScKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGhlYWRlciA9ICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpJworICAgICAgICAgICAgaGVhZGVyID0gJ1N0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KScKICAgICAgICAgcmVnZXggPSAiIiIKIF5GYXRhbCBQeXRob24gZXJyb3I6IHtuYW1lfQogCkBAIC0xMDEsOCArODcsNyBAQAogICAgICAgICAgICAgaGVhZGVyPXJlLmVzY2FwZShoZWFkZXIpKQogICAgICAgICBpZiBvdGhlcl9yZWdleDoKICAgICAgICAgICAgIHJlZ2V4ICs9ICd8JyArIG90aGVyX3JlZ2V4Ci0gICAgICAgIHdpdGggc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICAgICAgb3V0cHV0LCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlLCBmaWxlbmFtZSkKKyAgICAgICAgb3V0cHV0LCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlLCBmaWxlbmFtZSkKICAgICAgICAgb3V0cHV0ID0gJ1xuJy5qb2luKG91dHB1dCkKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQsIHJlZ2V4KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV4aXRjb2RlLCAwKQpAQCAtMjMyLDggKzIxNyw3IEBACiBmYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQogIiIiLnN0cmlwKCkKICAgICAgICAgbm90X2V4cGVjdGVkID0gJ0ZhdGFsIFB5dGhvbiBlcnJvcicKLSAgICAgICAgd2l0aCBzdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgICAgICBzdGRlcnIsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUpCisgICAgICAgIHN0ZGVyciwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSkKICAgICAgICAgc3RkZXIgPSAnXG4nLmpvaW4oc3RkZXJyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobm90X2V4cGVjdGVkIG5vdCBpbiBzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAiJXIgaXMgcHJlc2VudCBpbiAlciIgJSAobm90X2V4cGVjdGVkLCBzdGRlcnIpKQpAQCAtMjY0LDE2ICsyNDgsMzQgQEAKICAgICBkZWYgdGVzdF9kaXNhYmxlZF9ieV9kZWZhdWx0KHNlbGYpOgogICAgICAgICAjIEJ5IGRlZmF1bHQsIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGRpc2FibGVkCiAgICAgICAgIGNvZGUgPSAiaW1wb3J0IGZhdWx0aGFuZGxlcjsgcHJpbnQoZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWQoKSkiCi0gICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKLSAgICAgICAgc3Rkb3V0ID0gKHN0ZG91dCArIHN0ZGVycikuc3RyaXAoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYiJGYWxzZSIpCisgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICctRScsICctYycsIGNvZGUpCisgICAgICAgICMgZG9uJ3QgdXNlIGFzc2VydF9weXRob25fb2soKSBiZWNhdXNlIGl0IGFsd2F5cyBlbmFibGUgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIkZhbHNlIikKIAogICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBUZXN0IHB5dGhvbiAtWCBmYXVsdGhhbmRsZXIKICAgICAgICAgY29kZSA9ICJpbXBvcnQgZmF1bHRoYW5kbGVyOyBwcmludChmYXVsdGhhbmRsZXIuaXNfZW5hYmxlZCgpKSIKLSAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLVgiLCAiZmF1bHRoYW5kbGVyIiwgIi1jIiwgY29kZSkKLSAgICAgICAgc3Rkb3V0ID0gKHN0ZG91dCArIHN0ZGVycikuc3RyaXAoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYiJUcnVlIikKKyAgICAgICAgYXJncyA9IChzeXMuZXhlY3V0YWJsZSwgIi1FIiwgIi1YIiwgImZhdWx0aGFuZGxlciIsICItYyIsIGNvZGUpCisgICAgICAgICMgZG9uJ3QgdXNlIGFzc2VydF9weXRob25fb2soKSBiZWNhdXNlIGl0IGFsd2F5cyBlbmFibGUgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIlRydWUiKQorCisgICAgZGVmIHRlc3RfZW52X3ZhcihzZWxmKToKKyAgICAgICAgIyBlbXB0eSBlbnYgdmFyCisgICAgICAgIGNvZGUgPSAiaW1wb3J0IGZhdWx0aGFuZGxlcjsgcHJpbnQoZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWQoKSkiCisgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGUpCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsnUFlUSE9ORkFVTFRIQU5ETEVSJ10gPSAnJworICAgICAgICAjIGRvbid0IHVzZSBhc3NlcnRfcHl0aG9uX29rKCkgYmVjYXVzZSBpdCBhbHdheXMgZW5hYmxlIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJGYWxzZSIpCisKKyAgICAgICAgIyBub24tZW1wdHkgZW52IHZhcgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTkZBVUxUSEFORExFUiddID0gJzEnCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIlRydWUiKQogCiAgICAgZGVmIGNoZWNrX2R1bXBfdHJhY2ViYWNrKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiCkBAIC0zMDQsNyArMzA2LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVubyA9IDgKICAgICAgICAgZXhwZWN0ZWQgPSBbCi0gICAgICAgICAgICAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAorICAgICAgICAgICAgJ1N0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lICVzIGluIGZ1bmNCJyAlIGxpbmVubywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAxMSBpbiBmdW5jQScsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMTMgaW4gPG1vZHVsZT4nCkBAIC0zMzYsNyArMzM4LDcgQEAKICAgICAgICAgICAgIGZ1bmNfbmFtZT1mdW5jX25hbWUsCiAgICAgICAgICkKICAgICAgICAgZXhwZWN0ZWQgPSBbCi0gICAgICAgICAgICAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAorICAgICAgICAgICAgJ1N0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTonLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDQgaW4gJXMnICUgdHJ1bmNhdGVkLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDYgaW4gPG1vZHVsZT4nCiAgICAgICAgIF0KQEAgLTM5MCwxMyArMzkyLDEzIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsaW5lbm8gPSAxMAogICAgICAgICByZWdleCA9ICIiIgotXlRocmVhZCAweFswLTlhLWZdKzoKK15UaHJlYWQgMHhbMC05YS1mXSsgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAoPzogIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gW19hLXpdKwogKXt7MSwzfX0gIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyMyBpbiBydW4KICAgRmlsZSAiLip0aHJlYWRpbmcucHkiLCBsaW5lIFswLTldKyBpbiBfYm9vdHN0cmFwX2lubmVyCiAgIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gX2Jvb3RzdHJhcAogCi1DdXJyZW50IHRocmVhZCBYWFg6CitDdXJyZW50IHRocmVhZCBYWFggXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6CiAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSB7bGluZW5vfSBpbiBkdW1wCiAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyOCBpbiA8bW9kdWxlPiQKICIiIi5zdHJpcCgpCkBAIC00NTksNyArNDYxLDcgQEAKICAgICAgICAgICAgIGNvdW50ID0gbG9vcHMKICAgICAgICAgICAgIGlmIHJlcGVhdDoKICAgICAgICAgICAgICAgICBjb3VudCAqPSAyCi0gICAgICAgICAgICBoZWFkZXIgPSByJ1RpbWVvdXQgXCglc1wpIVxuVGhyZWFkIDB4WzAtOWEtZl0rOlxuJyAlIHRpbWVvdXRfc3RyCisgICAgICAgICAgICBoZWFkZXIgPSByJ1RpbWVvdXQgXCglc1wpIVxuVGhyZWFkIDB4WzAtOWEtZl0rIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJyAlIHRpbWVvdXRfc3RyCiAgICAgICAgICAgICByZWdleCA9IGV4cGVjdGVkX3RyYWNlYmFjayg5LCAyMCwgaGVhZGVyLCBtaW5fY291bnQ9Y291bnQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHRyYWNlLCByZWdleCkKICAgICAgICAgZWxzZToKQEAgLTU2MSw5ICs1NjMsOSBAQAogICAgICAgICB0cmFjZSA9ICdcbicuam9pbih0cmFjZSkKICAgICAgICAgaWYgbm90IHVucmVnaXN0ZXI6CiAgICAgICAgICAgICBpZiBhbGxfdGhyZWFkczoKLSAgICAgICAgICAgICAgICByZWdleCA9ICdDdXJyZW50IHRocmVhZCBYWFg6XG4nCisgICAgICAgICAgICAgICAgcmVnZXggPSAnQ3VycmVudCB0aHJlYWQgWFhYIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZWdleCA9ICdUcmFjZWJhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nCisgICAgICAgICAgICAgICAgcmVnZXggPSAnU3RhY2sgXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nCiAgICAgICAgICAgICByZWdleCA9IGV4cGVjdGVkX3RyYWNlYmFjayg3LCAyOCwgcmVnZXgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHRyYWNlLCByZWdleCkKICAgICAgICAgZWxzZToKQEAgLTU5MCw4ICs1OTIsNSBAQAogICAgICAgICBzZWxmLmNoZWNrX3JlZ2lzdGVyKGNoYWluPVRydWUpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZhdWx0SGFuZGxlclRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5IGIvTGliL3Rlc3QvdGVzdF9mY250bC5weQppbmRleCBiOGNkYTJmLi5jODE2ZDk3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKQEAgLTEsNyArMSw0IEBACiAiIiJUZXN0IHByb2dyYW0gZm9yIHRoZSBmY250bCBDIG1vZHVsZS4KLQotT1MvMitFTVggZG9lc24ndCBzdXBwb3J0IHRoZSBmaWxlIGxvY2tpbmcgb3BlcmF0aW9ucy4KLQogIiIiCiBpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBvcwpAQCAtMzksOCArMzYsNiBAQAogICAgICAgICBsb2NrZGF0YSA9IHN0cnVjdC5wYWNrKCdxcWloaGknLCAwLCAwLCAwLCBmY250bC5GX1dSTENLLCAwLCAwKQogICAgIGVsaWYgc3lzLnBsYXRmb3JtIGluIFsnYWl4MycsICdhaXg0JywgJ2hwLXV4QicsICd1bml4d2FyZTcnXToKICAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygnaGhsbGxpaScsIGZjbnRsLkZfV1JMQ0ssIDAsIDAsIDAsIDAsIDAsIDApCi0gICAgZWxpZiBzeXMucGxhdGZvcm0gaW4gWydvczJlbXgnXToKLSAgICAgICAgbG9ja2RhdGEgPSBOb25lCiAgICAgZWxzZToKICAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygnaGgnK3N0YXJ0X2xlbisnaGgnLCBmY250bC5GX1dSTENLLCAwLCAwLCAwLCAwLCAwKQogICAgIGlmIGxvY2tkYXRhOgpAQCAtNjYsMTggKzYxLDIwIEBACiAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVEZMLCBvcy5PX05PTkJMT0NLKQogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoJ1N0YXR1cyBmcm9tIGZjbnRsIHdpdGggT19OT05CTE9DSzogJywgcnYpCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gWydvczJlbXgnXToKLSAgICAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCi0gICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50KCdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KSkKKyAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYuZmlsZW5vKCksIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KSkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2ZjbnRsX2ZpbGVfZGVzY3JpcHRvcihzZWxmKToKICAgICAgICAgIyBhZ2FpbiwgYnV0IHBhc3MgdGhlIGZpbGUgcmF0aGVyIHRoYW4gbnVtZXJpYyBkZXNjcmlwdG9yCiAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAnd2InKQogICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZiwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiBbJ29zMmVteCddOgotICAgICAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdTdGF0dXMgZnJvbSBmY250bCB3aXRoIE9fTk9OQkxPQ0s6ICcsIHJ2KQorICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZiwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ1N0cmluZyBmcm9tIGZjbnRsIHdpdGggRl9TRVRMS1c6ICcsIHJlcHIocnYpKQogICAgICAgICBzZWxmLmYuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfZmNudGxfYmFkX2ZpbGUoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKaW5kZXggNzZiMTY5NC4uZDU0ZTk3NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQpAQCAtODcsNyArODcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQogCiAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT1NFcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0UmVhZFdoZW5Xcml0aW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5mLnJlYWQpCiAKIGNsYXNzIENBdXRvRmlsZVRlc3RzKEF1dG9GaWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBvcGVuID0gaW8ub3BlbgpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICAgICAgZCA9IGludChmLnJlYWQoKS5kZWNvZGUoImFzY2lpIikpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvciBzZXR0aW5nIGJ1ZmZlciBzaXplICVkOiAlcycgJSAocywgc3RyKG1zZykpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKaW5kZXggMDk1OTk3OS4uYzdjYjNmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQpAQCAtMSw0ICsxLDMgQEAKLQogaW1wb3J0IG9zLCBmaWxlY21wLCBzaHV0aWwsIHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydApAQCAtNDAsMTUgKzM5LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLmRpciksCiAgICAgICAgICAgICAgICAgICAgICJGaWxlIGFuZCBkaXJlY3RvcnkgY29tcGFyZSBhcyBlcXVhbCIpCiAKKyAgICBkZWYgdGVzdF9jYWNoZV9jbGVhcihzZWxmKToKKyAgICAgICAgZmlyc3RfY29tcGFyZSA9IGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNoYWxsb3c9RmFsc2UpCisgICAgICAgIHNlY29uZF9jb21wYXJlID0gZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfZGlmZiwgc2hhbGxvdz1GYWxzZSkKKyAgICAgICAgZmlsZWNtcC5jbGVhcl9jYWNoZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZWNtcC5fY2FjaGUpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FjaGUgbm90IGNsZWFyZWQgYWZ0ZXIgY2FsbGluZyBjbGVhcl9jYWNoZSIpCisKIGNsYXNzIERpckNvbXBhcmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKICAgICAgICAgc2VsZi5kaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyJykKICAgICAgICAgc2VsZi5kaXJfc2FtZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdkaXItc2FtZScpCiAgICAgICAgIHNlbGYuZGlyX2RpZmYgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyLWRpZmYnKQorCisgICAgICAgICMgQW5vdGhlciBkaXIgaXMgY3JlYXRlZCB1bmRlciBkaXJfc2FtZSwgYnV0IGl0IGhhcyBhIG5hbWUgZnJvbSB0aGUKKyAgICAgICAgIyBpZ25vcmVkIGxpc3Qgc28gaXQgc2hvdWxkIG5vdCBhZmZlY3QgdGVzdGluZyByZXN1bHRzLgorICAgICAgICBzZWxmLmRpcl9pZ25vcmVkID0gb3MucGF0aC5qb2luKHNlbGYuZGlyX3NhbWUsICcuaGcnKQorCiAgICAgICAgIHNlbGYuY2FzZWluc2Vuc2l0aXZlID0gb3MucGF0aC5ub3JtY2FzZSgnQScpID09IG9zLnBhdGgubm9ybWNhc2UoJ2EnKQogICAgICAgICBkYXRhID0gJ0NvbnRlbnRzIG9mIGZpbGUgZ28gaGVyZS5cbicKLSAgICAgICAgZm9yIGRpciBpbiBbc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmZdOgorICAgICAgICBmb3IgZGlyIGluIChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgc2VsZi5kaXJfZGlmZiwgc2VsZi5kaXJfaWdub3JlZCk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpciwgVHJ1ZSkKICAgICAgICAgICAgIG9zLm1rZGlyKGRpcikKICAgICAgICAgICAgIGlmIHNlbGYuY2FzZWluc2Vuc2l0aXZlIGFuZCBkaXIgaXMgc2VsZi5kaXJfc2FtZToKQEAgLTY0LDkgKzc1LDExIEBACiAgICAgICAgIG91dHB1dC5jbG9zZSgpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXIpCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJfc2FtZSkKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcl9kaWZmKQorICAgICAgICBmb3IgZGlyIGluIChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgc2VsZi5kaXJfZGlmZik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpcikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaWdub3JlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbignLmhnJywgZmlsZWNtcC5ERUZBVUxUX0lHTk9SRVMpCiAKICAgICBkZWYgdGVzdF9jbXBmaWxlcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyLCBbJ2ZpbGUnXSkgPT0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKaW5kZXggMWU3MDY0MS4uYzVlNTdkNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKQEAgLTI3NSw4ICsyNzUsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiIl0pCiAgICAgICAgICAgICB3aXRoIEZpbGVJbnB1dChmaWxlcz10MSkgYXMgZmk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5fZmlsZXMsICgpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSkKQEAgLTgzNSwyMiArODM1LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyhrd2FyZ3MucG9wKCdlbmNvZGluZycpLCBlbmNvZGluZykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrd2FyZ3MpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoCi0gICAgICAgIEJ1ZmZlclNpemVzVGVzdHMsCi0gICAgICAgIEZpbGVJbnB1dFRlc3RzLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pbnB1dCwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfY2xvc2UsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X25leHRmaWxlLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbmFtZSwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbm8sCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2lzZmlyc3RsaW5lLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pc3N0ZGluLAotICAgICAgICBUZXN0X2hvb2tfY29tcHJlc3NlZCwKLSAgICAgICAgVGVzdF9ob29rX2VuY29kZWQsCi0gICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CmluZGV4IGY5MWNjYWEuLmU2Nzg3NjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CkBAIC0xNDUsMTYgKzE0NSwxNiBAQAogICAgICAgICAjIFVuaXggY2FsbHMgZGlyY2hlY2soKSBhbmQgcmV0dXJucyAiW0Vycm5vIDIxXTogSXMgYSBkaXJlY3RvcnkiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIF9GaWxlSU8oJy4nLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUuZXJybm8sIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZmlsZW5hbWUsICIuIikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIElPRXJyb3IiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgT1NFcnJvciIpCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgInRlc3Qgb25seSB3b3JrcyBvbiBhIFBPU0lYLWxpa2Ugc3lzdGVtIikKICAgICBkZWYgdGVzdE9wZW5EaXJGRChzZWxmKToKICAgICAgICAgZmQgPSBvcy5vcGVuKCcuJywgb3MuT19SRE9OTFkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBfRmlsZUlPKGZkLCAncicpCiAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlTRElSKQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC0xODQsMTQgKzE4NCwxNCBAQAogICAgICAgICAgICAgb3MuY2xvc2UoZi5maWxlbm8oKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmdW5jKHNlbGYsIGYpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVCQURGKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBJT0Vycm9yIikKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBPU0Vycm9yIikKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiB3cmFwcGVyCiAKQEAgLTIzOCw3ICsyMzgsNyBAQAogICAgIGRlZiBSZW9wZW5Gb3JSZWFkKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCiAgICAgICAgIG9zLmNsb3NlKHNlbGYuZi5maWxlbm8oKSkKQEAgLTI4Niw3ICsyODYsNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBmID0gX0ZpbGVJTygiL2Rldi90dHkiLCAiYSIpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgV2hlbiBydW4gaW4gYSBjcm9uIGpvYiB0aGVyZSBqdXN0IGFyZW4ndCBhbnkKICAgICAgICAgICAgICAgICAgICAgIyB0dHlzLCBzbyBza2lwIHRoZSB0ZXN0LiAgVGhpcyBhbHNvIGhhbmRsZXMgb3RoZXIKICAgICAgICAgICAgICAgICAgICAgIyBPUydlcyB0aGF0IGRvbid0IHN1cHBvcnQgL2Rldi90dHkuCkBAIC0zNjIsNyArMzYyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgX0ZpbGVJTywgbWFrZV9iYWRfZmQoKSkKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtc3ZjcnQuZ2V0X29zZmhhbmRsZSwgbWFrZV9iYWRfZmQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zdmNydC5nZXRfb3NmaGFuZGxlLCBtYWtlX2JhZF9mZCgpKQogICAgICAgICAjIElzc3VlIDE1OTg5CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX0ZpbGVJTywgX3Rlc3RjYXBpLklOVF9NQVggKyAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sIF90ZXN0Y2FwaS5JTlRfTUlOIC0gMSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9maW5hbGl6YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjOWI4NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5CkBAIC0wLDAgKzEsNTEzIEBACisiIiIKK1Rlc3RzIGZvciBvYmplY3QgZmluYWxpemF0aW9uIHNlbWFudGljcywgYXMgb3V0bGluZWQgaW4gUEVQIDQ0Mi4KKyIiIgorCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGdjCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2ltcG9ydCBfdGVzdGNhcGkKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIE5vbkdDU2ltcGxlQmFzZToKKyAgICAiIiIKKyAgICBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHRoZSBvYmplY3RzIHVuZGVyIHRlc3QsIGVxdWlwcGVkIHdpdGggdmFyaW91cworICAgIHRlc3RpbmcgZmVhdHVyZXMuCisgICAgIiIiCisKKyAgICBzdXJ2aXZvcnMgPSBbXQorICAgIGRlbF9jYWxscyA9IFtdCisgICAgdHBfZGVsX2NhbGxzID0gW10KKyAgICBlcnJvcnMgPSBbXQorCisgICAgX2NsZWFuaW5nID0gRmFsc2UKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NsZWFudXAoY2xzKToKKyAgICAgICAgY2xzLnN1cnZpdm9ycy5jbGVhcigpCisgICAgICAgIGNscy5lcnJvcnMuY2xlYXIoKQorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGNscy5kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICBjbHMudHBfZGVsX2NhbGxzLmNsZWFyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHRlc3QoY2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHVzZSBhcm91bmQgYWxsIGZpbmFsaXphdGlvbiB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CisgICAgICAgICAgICBjbHMuZGVsX2NhbGxzLmNsZWFyKCkKKyAgICAgICAgICAgIGNscy50cF9kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICAgICAgTm9uR0NTaW1wbGVCYXNlLl9jbGVhbmluZyA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBpZiBjbHMuZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBjbHMuZXJyb3JzWzBdCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIE5vbkdDU2ltcGxlQmFzZS5fY2xlYW5pbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgY2xzLl9jbGVhbnVwKCkKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgb2JqZWN0IGlzIHNhbmUgKG5vbi1icm9rZW4pLgorICAgICAgICAiIiIKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUEVQIDQ0MiBmaW5hbGl6ZXIuICBSZWNvcmQgdGhhdCB0aGlzIHdhcyBjYWxsZWQsIGNoZWNrIHRoZQorICAgICAgICBvYmplY3QgaXMgaW4gYSBzYW5lIHN0YXRlLCBhbmQgaW52b2tlIGEgc2lkZSBlZmZlY3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVfZWZmZWN0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHNpZGUgZWZmZWN0IGNhbGxlZCBvbiBkZXN0cnVjdGlvbi4KKyAgICAgICAgIiIiCisKKworY2xhc3MgU2ltcGxlQmFzZShOb25HQ1NpbXBsZUJhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmlkXyA9IGlkKHNlbGYpCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5pZF8gPT0gaWQoc2VsZikKKworCitjbGFzcyBOb25HQyhOb25HQ1NpbXBsZUJhc2UpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKK2NsYXNzIE5vbkdDUmVzdXJyZWN0b3IoTm9uR0NTaW1wbGVCYXNlKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzdXJyZWN0IHNlbGYgYnkgc3RvcmluZyBzZWxmIGluIGEgY2xhc3Mtd2lkZSBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zdXJ2aXZvcnMuYXBwZW5kKHNlbGYpCisKK2NsYXNzIFNpbXBsZShTaW1wbGVCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFNpbXBsZVJlc3VycmVjdG9yKE5vbkdDUmVzdXJyZWN0b3IsIFNpbXBsZUJhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0QmFzZToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZ2MuZ2FyYmFnZVs6XSA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgdGVzdHMgaGVyZSBzaG91bGQgcHV0IGFueXRoaW5nIGluIGdjLmdhcmJhZ2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nYXJiYWdlLCBbXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzZWxmLm9sZF9nYXJiYWdlCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiBhc3NlcnRfZGVsX2NhbGxzKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKFNpbXBsZUJhc2UuZGVsX2NhbGxzKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgYXNzZXJ0X3RwX2RlbF9jYWxscyhzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChTaW1wbGVCYXNlLnRwX2RlbF9jYWxscyksIHNvcnRlZChpZHMpKQorCisgICAgZGVmIGFzc2VydF9zdXJ2aXZvcnMoc2VsZiwgaWRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaWQoeCkgZm9yIHggaW4gU2ltcGxlQmFzZS5zdXJ2aXZvcnMpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBhc3NlcnRfZ2FyYmFnZShzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpZCh4KSBmb3IgeCBpbiBnYy5nYXJiYWdlKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgY2xlYXJfc3Vydml2b3JzKHNlbGYpOgorICAgICAgICBTaW1wbGVCYXNlLnN1cnZpdm9ycy5jbGVhcigpCisKKworY2xhc3MgU2ltcGxlRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIHdpdGhvdXQgcmVmY3ljbGVzLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFNpbXBsZSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTaW1wbGVSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uX2djKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChzKSkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9ub25fZ2NfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHMpKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMgKiAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKworCitjbGFzcyBTZWxmQ3ljbGVCYXNlOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5yZWYgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGFzc2VydCBzZWxmLnJlZiBpcyBzZWxmCisKK2NsYXNzIFNpbXBsZVNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgU2VsZkN5Y2xlUmVzdXJyZWN0b3IoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlUmVzdXJyZWN0b3IpOgorICAgIHBhc3MKKworY2xhc3MgU3VpY2lkYWxTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGxpY2l0bHkgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmVmID0gTm9uZQorCisKK2NsYXNzIFNlbGZDeWNsZUZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhbiBvYmplY3QgaGF2aW5nIGEgc2luZ2xlIGN5Y2xpYyByZWZlcmVuY2UgdG8KKyAgICBpdHNlbGYuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2ltcGxlU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBfX2RlbF9fIGNhbiByZXN1cnJlY3QgdGhlIG9iamVjdCBiZWluZyBmaW5hbGl6ZWQuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2VsZkN5Y2xlUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICAjIFhYWCBpcyB0aGlzIGRlc2lyYWJsZT8KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgICMgV2hlbiB0cnlpbmcgdG8gZGVzdHJveSB0aGUgb2JqZWN0IGEgc2Vjb25kIHRpbWUsIF9fZGVsX18KKyAgICAgICAgICAgICMgaXNuJ3QgY2FsbGVkIGFueW1vcmUgKGFuZCB0aGUgb2JqZWN0IGlzbid0IHJlc3VycmVjdGVkKS4KKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9zdWljaWRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIEdDIGlzIGFibGUgdG8gZGVhbCB3aXRoIGFuIG9iamVjdCB0aGF0IGtpbGxzIGl0cyBsYXN0CisgICAgICAgICMgcmVmZXJlbmNlIGR1cmluZyBfX2RlbF9fLgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFN1aWNpZGFsU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKworY2xhc3MgQ2hhaW5lZEJhc2U6CisKKyAgICBkZWYgY2hhaW4oc2VsZiwgbGVmdCk6CisgICAgICAgIHNlbGYuc3VpY2lkZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIGxlZnQucmlnaHQgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGlmIHNlbGYuc3VpY2lkZWQ6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLnJpZ2h0IGlzIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxlZnQgPSBzZWxmLmxlZnQKKyAgICAgICAgICAgIGlmIGxlZnQuc3VpY2lkZWQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlZnQucmlnaHQgaXMgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVmdC5yaWdodCBpcyBzZWxmCisgICAgICAgICAgICByaWdodCA9IHNlbGYucmlnaHQKKyAgICAgICAgICAgIGlmIHJpZ2h0LnN1aWNpZGVkOgorICAgICAgICAgICAgICAgIGFzc2VydCByaWdodC5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJpZ2h0LmxlZnQgaXMgc2VsZgorCitjbGFzcyBTaW1wbGVDaGFpbmVkKENoYWluZWRCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgQ2hhaW5lZFJlc3VycmVjdG9yKENoYWluZWRCYXNlLCBTaW1wbGVSZXN1cnJlY3Rvcik6CisgICAgcGFzcworCitjbGFzcyBTdWljaWRhbENoYWluZWQoQ2hhaW5lZEJhc2UsIFNpbXBsZSk6CisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBFeHBsaWNpdGx5IGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1aWNpZGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxlZnQgPSBOb25lCisgICAgICAgIHNlbGYucmlnaHQgPSBOb25lCisKKworY2xhc3MgQ3ljbGVDaGFpbkZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhIGN5Y2xpYyBjaGFpbi4gIFRoZXNlIHRlc3RzIGFyZSBzaW1pbGFyIGluCisgICAgc3Bpcml0IHRvIHRoZSBzZWxmLWN5Y2xlIHRlc3RzIGFib3ZlLCBidXQgdGhlIGNvbGxlY3RhYmxlIG9iamVjdAorICAgIGdyYXBoIGlzbid0IHRyaXZpYWwgYW55bW9yZS4KKyAgICAiIiIKKworICAgIGRlZiBidWlsZF9jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgbm9kZXMgPSBbY2xzKCkgZm9yIGNscyBpbiBjbGFzc2VzXQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obm9kZXMpKToKKyAgICAgICAgICAgIG5vZGVzW2ldLmNoYWluKG5vZGVzW2ktMV0pCisgICAgICAgIHJldHVybiBub2RlcworCisgICAgZGVmIGNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oc2VsZiwgY2xhc3Nlcyk6CisgICAgICAgIE4gPSBsZW4oY2xhc3NlcykKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIG5vZGVzID0gc2VsZi5idWlsZF9jaGFpbihjbGFzc2VzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3cigpIGZvciB3ciBpbiB3cnNdLCBbTm9uZV0gKiBOKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorCisgICAgZGVmIGNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgTiA9IGxlbihjbGFzc2VzKQorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmJ1aWxkX2NoYWluKGNsYXNzZXMpCisgICAgICAgICAgICBOID0gbGVuKG5vZGVzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgc3Vydml2b3JfaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzIGlmIGlzaW5zdGFuY2UocywgU2ltcGxlUmVzdXJyZWN0b3IpXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoc3Vydml2b3JfaWRzKQorICAgICAgICAgICAgIyBYWFggZGVzaXJhYmxlPworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbd3IoKSBmb3Igd3IgaW4gd3JzXSwgW05vbmVdICogTikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU2ltcGxlQ2hhaW5lZF0gKiAzKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91c19yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKFtDaGFpbmVkUmVzdXJyZWN0b3JdICogMykKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXNfc3VpY2lkYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU3VpY2lkYWxDaGFpbmVkXSAqIDMpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfc3VpY2lkYWxfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oW1N1aWNpZGFsQ2hhaW5lZCwgU2ltcGxlQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3N1aWNpZGFsX3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW1N1aWNpZGFsQ2hhaW5lZF0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3Rfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkXSAqIDIpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfcmVzdXJyZWN0X3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkLCBTdWljaWRhbENoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3RfdGhyZWUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW0NoYWluZWRSZXN1cnJlY3Rvcl0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMiArIFtTdWljaWRhbENoYWluZWRdICogMikKKworCisjIE5PVEU6IHRoZSB0cF9kZWwgc2xvdCBpc24ndCBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCwgc28gd2UgaGF2ZSB0byBjYWxsCisjIHdpdGhfdHBfZGVsKCkgZm9yIGVhY2ggaW5zdGFudGlhdGVkIGNsYXNzLgorCitjbGFzcyBMZWdhY3lCYXNlKFNpbXBsZUJhc2UpOgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRG8gbm90IGludm9rZSBzaWRlX2VmZmVjdCBoZXJlLCBzaW5jZSB3ZSBhcmUgbm93IGV4ZXJjaXNpbmcKKyAgICAgICAgICAgICMgdGhlIHRwX2RlbCBzbG90LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCisgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMZWdhY3kgKHByZS1QRVAgNDQyKSBmaW5hbGl6ZXIsIG1hcHBlZCB0byBhIHRwX2RlbCBzbG90LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYudHBfZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgICAgICAgICAgc2VsZi5zaWRlX2VmZmVjdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3koTGVnYWN5QmFzZSk6CisgICAgcGFzcworCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lSZXN1cnJlY3RvcihMZWdhY3lCYXNlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlc3VycmVjdCBzZWxmIGJ5IHN0b3Jpbmcgc2VsZiBpbiBhIGNsYXNzLXdpZGUgbGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3Vydml2b3JzLmFwcGVuZChzZWxmKQorCitAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgTGVnYWN5QmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIExlZ2FjeUZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBvYmplY3RzIHdpdGggYSB0cF9kZWwuCisgICAgIiIiCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgVGhlc2UgdGVzdHMgbmVlZCB0byBjbGVhbiB1cCBhIGJpdCBtb3JlLCBzaW5jZSB0aGV5IGNyZWF0ZQorICAgICAgICAjIHVuY29sbGVjdGFibGUgb2JqZWN0cy4KKyAgICAgICAgZ2MuZ2FyYmFnZS5jbGVhcigpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeShzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBMZWdhY3koKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBMZWdhY3lSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICAjIHdlYWtyZWZzIGFyZSBjbGVhcmVkIGJlZm9yZSB0cF9kZWwgaXMgY2FsbGVkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdXJ2aXZvcnMoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcyAqIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoaWRzKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfc2VsZl9jeWNsZShzZWxmKToKKyAgICAgICAgIyBTZWxmLWN5Y2xlcyB3aXRoIGxlZ2FjeSBmaW5hbGl6ZXJzIGVuZCB1cCBpbiBnYy5nYXJiYWdlLgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeVNlbGZDeWNsZSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9nYXJiYWdlKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3IoKSwgTm9uZSkKKyAgICAgICAgICAgICMgQnJlYWsgdGhlIGN5Y2xlIHRvIGFsbG93IGNvbGxlY3Rpb24KKyAgICAgICAgICAgIGdjLmdhcmJhZ2VbMF0ucmVmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydF9nYXJiYWdlKFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5IGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQppbmRleCA4MTkyYzM4Li5lMDYyNmRmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKQEAgLTEsNyArMSw3IEBACiAiIiJUaGlzIHRlc3QgY2hlY2tzIGZvciBjb3JyZWN0IGZvcmsoKSBiZWhhdmlvci4KICIiIgogCi1pbXBvcnQgaW1wCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkgYi9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQppbmRleCBiZDE1OWY1Li4yOTMzMGY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQpAQCAtMzA3LDI3ICszMDcsNDEgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgb2xkbG9jKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfb3B0aW1pc2F0aW9ucyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICJhYmNkZSIgIyA1IGNoYXJhY3RlcnMKIAorICAgICAgICBzZWxmLmFzc2VydElzKCIlcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlLjVzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiUuMTBzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiUxcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlNXMiICUgdGV4dCwgdGV4dCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZvcm1hdFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDpzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDouNXN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOi4xMHN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOjFzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDo1c30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKIAorICAgICAgICBzZWxmLmFzc2VydElzKHRleHQgJSAoKSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXh0LmZvcm1hdCgpLCB0ZXh0KQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfcHJlY2lzaW9uKHNlbGYpOgotICAgICAgICBJTlRfTUFYID0gMjE0NzQ4MzY0NworICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgSU5UX01BWAogCiAgICAgICAgIGYgPSAxLjIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoZiwgIi4wZiIpLCAiMSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGYsICIuM2YiKSwgIjEuMjAwIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIGZvcm1hdChmLCAiLiVzZiIgJSAoSU5UX01BWCArIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAicHJlY2lzaW9uIHRvbyBiaWciKQogCiAgICAgICAgIGMgPSBjb21wbGV4KGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGYsICIuMGYiKSwgIjEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChmLCAiLjNmIiksICIxLjIwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGMsICIuMGYiKSwgIjErMGoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChjLCAiLjNmIiksICIxLjIwMCswLjAwMGoiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgZm9ybWF0KGYsICIuJXNmIiAlIChJTlRfTUFYICsgMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJwcmVjaXNpb24gdG9vIGJpZyIpCisgICAgICAgICAgICBmb3JtYXQoYywgIi4lc2YiICUgKElOVF9NQVggKyAxKSkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQppbmRleCAxZmFkOTIxLi4zMzM2NTMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQpAQCAtMTQ2LDkgKzE0NiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigtMC4wKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDM2MDI4Nzk3MDE4OTYzOTY4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKDAuMSkpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgIyBidWcgMTY0Njk6IGVycm9yIHR5cGVzIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggZmxvYXQgLT4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBmbG9hdCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RJbml0RnJvbURlY2ltYWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDExLCAxMCksCkBAIC0xNTcsMTAgKzE1OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMy41ZS0yJykpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcuMDAwZTIwJykpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRiwgRGVjaW1hbCgnc25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBEZWNpbWFsKCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RGcm9tU3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1LCAxKSwgX2NvbXBvbmVudHMoRigiNSIpKSkKQEAgLTI0OCwxNCArMjUwLDE1IEBACiAKICAgICAgICAgaW5mID0gMWUxMDAwCiAgICAgICAgIG5hbiA9IGluZiAtIGluZgorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBmbG9hdCAtPiBpbnQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIGluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgLWluZiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1pbmYgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgLWluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIG5hbikKIAogICAgIGRlZiB0ZXN0RnJvbURlY2ltYWwoc2VsZik6CkBAIC0yNjgsMTcgKzI3MSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLSBGKDEsIDEwKiozMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiMC4iICsgIjkiICogMzApKSkKIAorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBJbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgiaW5mIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAogICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwsIERlY2ltYWwoIi1pbmYiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgibmFuIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHNOYU4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBzTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgic25hbiIpKQogCiAgICAgZGVmIHRlc3RMaW1pdERlbm9taW5hdG9yKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFtZS5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkNTc4MAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKQEAgLTAsMCArMSwxMTYgQEAKK2ltcG9ydCBnYworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgorCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKworCitjbGFzcyBDbGVhclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBmcmFtZS5jbGVhcigpLgorICAgICIiIgorCisgICAgZGVmIGlubmVyKHNlbGYsIHg9NSwgKiprd2FyZ3MpOgorICAgICAgICAxLzAKKworICAgIGRlZiBvdXRlcihzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuaW5uZXIoKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjID0gZQorICAgICAgICByZXR1cm4gZXhjCisKKyAgICBkZWYgY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhzZWxmLCB0Yik6CisgICAgICAgICIiIgorICAgICAgICBDbGVhciBhbGwgZnJhbWVzIGluIGEgdHJhY2ViYWNrLgorICAgICAgICAiIiIKKyAgICAgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0Yi50Yl9mcmFtZS5jbGVhcigpCisgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKKworICAgIGRlZiB0ZXN0X2NsZWFyX2xvY2FscyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IEMoKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgIGV4YyA9IHNlbGYub3V0ZXIoYz1jKQorICAgICAgICBkZWwgYworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICAjIEEgcmVmZXJlbmNlIHRvIGMgaXMgaGVsZCB0aHJvdWdoIHRoZSBmcmFtZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChOb25lLCB3cigpKQorICAgICAgICBzZWxmLmNsZWFyX3RyYWNlYmFja19mcmFtZXMoZXhjLl9fdHJhY2ViYWNrX18pCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgICMgVGhlIHJlZmVyZW5jZSB3YXMgcmVsZWFzZWQgYnkgLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOb25lLCB3cigpKQorCisgICAgZGVmIHRlc3RfY2xlYXJfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBlbmRseSA9IEZhbHNlCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICBub25sb2NhbCBlbmRseQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICAgICAgaW5uZXIoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBlbmRseSA9IFRydWUKKyAgICAgICAgZ2VuID0gZygpCisgICAgICAgIG5leHQoZ2VuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVuZGx5KQorICAgICAgICAjIENsZWFyaW5nIHRoZSBmcmFtZSBjbG9zZXMgdGhlIGdlbmVyYXRvcgorICAgICAgICBnZW4uZ2lfZnJhbWUuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZW5kbHkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9leGVjdXRpbmcoc2VsZik6CisgICAgICAgICMgQXR0ZW1wdGluZyB0byBjbGVhciBhbiBleGVjdXRpbmcgZnJhbWUgaXMgZm9yYmlkZGVuLgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBmID0gZS5fX3RyYWNlYmFja19fLnRiX2ZyYW1lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGYuY2xlYXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmLmZfYmFjay5jbGVhcigpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9leGVjdXRpbmdfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICAjIEF0dGVtcHRpbmcgdG8gY2xlYXIgYW4gZXhlY3V0aW5nIGdlbmVyYXRvciBmcmFtZSBpcyBmb3JiaWRkZW4uCisgICAgICAgIGVuZGx5ID0gRmFsc2UKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGVuZGx5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmID0gZS5fX3RyYWNlYmFja19fLnRiX2ZyYW1lCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBmLmNsZWFyKCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGYuZl9iYWNrLmNsZWFyKCkKKyAgICAgICAgICAgICAgICB5aWVsZCBmCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGVuZGx5ID0gVHJ1ZQorICAgICAgICBnZW4gPSBnKCkKKyAgICAgICAgZiA9IG5leHQoZ2VuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVuZGx5KQorICAgICAgICAjIENsZWFyaW5nIHRoZSBmcmFtZSBjbG9zZXMgdGhlIGdlbmVyYXRvcgorICAgICAgICBmLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVuZGx5KQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfY2xlYXJfcmVmY3ljbGVzKHNlbGYpOgorICAgICAgICAjIC5jbGVhcigpIGRvZXNuJ3QgbGVhdmUgYW55IHJlZmN5Y2xlIGJlaGluZAorICAgICAgICB3aXRoIHN1cHBvcnQuZGlzYWJsZV9nYygpOgorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBjID0gQygpCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMpCisgICAgICAgICAgICBleGMgPSBzZWxmLm91dGVyKGM9YykKKyAgICAgICAgICAgIGRlbCBjCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KE5vbmUsIHdyKCkpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3RyYWNlYmFja19mcmFtZXMoZXhjLl9fdHJhY2ViYWNrX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKE5vbmUsIHdyKCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weSBiL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CmluZGV4IGZkNjc2MWMuLjRjNTBjYjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGV4cGVjdC5hZGQoJ3NwYW0nKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19waGVsbG9fXy5fX3BhdGhfXywgW19fcGhlbGxvX18uX19uYW1lX19dKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX3BoZWxsb19fLl9fcGF0aF9fLCBbXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdIZWxsbyB3b3JsZCFcbicpCiAKICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CkBAIC03Miw4ICs3Miw2IEBACiAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19waGVsbG9fXyddCiAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19waGVsbG9fXy5zcGFtJ10KIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChGcm96ZW5UZXN0cykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQppbmRleCA0Njg2MTgzLi5jMGI1MzdhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQpAQCAtMjEsNiArMjEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IEhPU1QsIEhPU1R2NgogdGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCitUSU1FT1VUID0gMwogIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgb3ZlciB0aGUgZGF0YSBjaGFubmVsIHdoZW4KICMgUkVUUiwgTElTVCwgTkxTVCwgTUxTRCBjb21tYW5kcyBhcmUgaXNzdWVkCiBSRVRSX0RBVEEgPSAnYWJjZGUxMjM0NVxyXG4nICogMTAwMApAQCAtMTI2LDcgKzEyNyw3IEBACiAgICAgICAgIGFkZHIgPSBsaXN0KG1hcChpbnQsIGFyZy5zcGxpdCgnLCcpKSkKICAgICAgICAgaXAgPSAnJWQuJWQuJWQuJWQnICV0dXBsZShhZGRyWzo0XSkKICAgICAgICAgcG9ydCA9IChhZGRyWzRdICogMjU2KSArIGFkZHJbNV0KLSAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTIpCisgICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIocywgYmFzZWNsYXNzPXNlbGYpCiAgICAgICAgIHNlbGYucHVzaCgnMjAwIGFjdGl2ZSBkYXRhIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKQogCkBAIC0xMzQsNyArMTM1LDcgQEAKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKICAgICAgICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCiAgICAgICAgICAgICBzb2NrLmxpc3Rlbig1KQotICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KFRJTUVPVVQpCiAgICAgICAgICAgICBpcCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVs6Ml0KICAgICAgICAgICAgIGlwID0gaXAucmVwbGFjZSgnLicsICcsJyk7IHAxID0gcG9ydCAvIDI1NjsgcDIgPSBwb3J0ICUgMjU2CiAgICAgICAgICAgICBzZWxmLnB1c2goJzIyNyBlbnRlcmluZyBwYXNzaXZlIG1vZGUgKCVzLCVkLCVkKScgJShpcCwgcDEsIHAyKSkKQEAgLTE0NCw3ICsxNDUsNyBAQAogICAgIGRlZiBjbWRfZXBydChzZWxmLCBhcmcpOgogICAgICAgICBhZiwgaXAsIHBvcnQgPSBhcmcuc3BsaXQoYXJnWzBdKVsxOi0xXQogICAgICAgICBwb3J0ID0gaW50KHBvcnQpCi0gICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0yKQorICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQogICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKIApAQCAtMTUyLDcgKzE1Myw3IEBACiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmJpbmQoKHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMF0sIDApKQogICAgICAgICAgICAgc29jay5saXN0ZW4oNSkKLSAgICAgICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgICAgIHNvY2suc2V0dGltZW91dChUSU1FT1VUKQogICAgICAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQogICAgICAgICAgICAgc2VsZi5wdXNoKCcyMjkgZW50ZXJpbmcgZXh0ZW5kZWQgcGFzc2l2ZSBtb2RlICh8fHwlZHwpJyAlcG9ydCkKICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzb2NrLmFjY2VwdCgpCkBAIC0zMjcsNyArMzI4LDcgQEAKICAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzQxLDcgKzM0Miw3IEBACiAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICMgQW55ICJzb2NrZXQgZXJyb3IiIGNvcnJlc3BvbmRzIHRvIGEgU1NMX0VSUk9SX1NZU0NBTEwgcmV0dXJuCiAgICAgICAgICAgICAgICAgIyBmcm9tIE9wZW5TU0wncyBTU0xfc2h1dGRvd24oKSwgY29ycmVzcG9uZGluZyB0byBhCiAgICAgICAgICAgICAgICAgIyBjbG9zZWQgc29ja2V0IGNvbmRpdGlvbi4gU2VlIGFsc286CkBAIC00NjAsNyArNDYxLDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlGVFBTZXJ2ZXIoKEhPU1QsIDApKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTQ4OCw3ICs0ODksNyBAQAogCiAgICAgZGVmIHRlc3RfYWxsX2Vycm9ycyhzZWxmKToKICAgICAgICAgZXhjZXB0aW9ucyA9IChmdHBsaWIuZXJyb3JfcmVwbHksIGZ0cGxpYi5lcnJvcl90ZW1wLCBmdHBsaWIuZXJyb3JfcGVybSwKLSAgICAgICAgICAgICAgICAgICAgICBmdHBsaWIuZXJyb3JfcHJvdG8sIGZ0cGxpYi5FcnJvciwgSU9FcnJvciwgRU9GRXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgZnRwbGliLmVycm9yX3Byb3RvLCBmdHBsaWIuRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yKQogICAgICAgICBmb3IgeCBpbiBleGNlcHRpb25zOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJhaXNlIHgoJ2V4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gYWxsX2Vycm9ycyBzZXQnKQpAQCAtNjc4LDcgKzY3OSw3IEBACiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKLSAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgIyBJUHY0IGlzIGluIHVzZSwganVzdCBtYWtlIHN1cmUgc2VuZF9lcHN2IGhhcyBub3QgYmVlbiB1c2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ3Bhc3YnKQpAQCAtNjkxLDEyICs2OTIsMTIgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgIyBiYXNlIHRlc3QKLSAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpIGFzIHNlbGYuY2xpZW50OgogICAgICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQpAQCAtNzA0LDcgKzcwNSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQogCiAgICAgICAgICMgUVVJVCBzZW50IGluc2lkZSB0aGUgd2l0aCBibG9jawotICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkgYXMgc2VsZi5jbGllbnQ6CiAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQpAQCAtNzE0LDcgKzcxNSw3IEBACiAgICAgICAgICMgZm9yY2UgYSB3cm9uZyByZXNwb25zZSBjb2RlIHRvIGJlIHNlbnQgb24gUVVJVDogZXJyb3JfcGVybQogICAgICAgICAjIGlzIGV4cGVjdGVkIGFuZCB0aGUgY29ubmVjdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBjbG9zZWQKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD1USU1FT1VUKSBhcyBzZWxmLmNsaWVudDoKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5uZXh0X3Jlc3BvbnNlID0gJzU1MCBlcnJvciBvbiBxdWl0JwpAQCAtNzM2LDcgKzczNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPShIT1NULCBwb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQuc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNzQ3LDcgKzc0OCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNvdWxkbid0IGJpbmQgdG8gcG9ydCAlZCIgJSBwb3J0KQogICAgICAgICAgICAgcmFpc2UKQEAgLTc4NCw3ICs3ODUsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVHY2LCAwKSwgYWY9c29ja2V0LkFGX0lORVQ2KQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTgwMSw3ICs4MDIsNyBAQAogCiAgICAgZGVmIHRlc3RfbWFrZXBhc3Yoc2VsZik6CiAgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLmNsaWVudC5tYWtlcGFzdigpCi0gICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCAxMCkKKyAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ2Vwc3YnKQogCkBAIC04MjcsNyArODI4LDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgIyBlbmFibGUgVExTCiAgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQpAQCAtODQwLDcgKzg0MSw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15VExTX0ZUUFNlcnZlcigoSE9TVCwgMCkpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC05MDAsNyArOTAxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnRwbGliLkZUUF9UTFMsIGNlcnRmaWxlPUNFUlRGSUxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKIAotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKGNvbnRleHQ9Y3R4LCB0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCkBAIC0xMDE0LDggKzEwMTUsMTkgQEAKICAgICAgICAgZnRwLmNsb3NlKCkKIAogCitjbGFzcyBUZXN0TmV0cmNEZXByZWNhdGlvbihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKCksIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudlsnSE9NRSddID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIG9wZW4oJy5uZXRyYycsICd3JykuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgZnRwbGliLk5ldHJjKCkKKworCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFtUZXN0RlRQQ2xhc3MsIFRlc3RUaW1lb3V0c10KKyAgICB0ZXN0cyA9IFtUZXN0RlRQQ2xhc3MsIFRlc3RUaW1lb3V0cywgVGVzdE5ldHJjRGVwcmVjYXRpb25dCiAgICAgaWYgc3VwcG9ydC5JUFY2X0VOQUJMRUQ6CiAgICAgICAgIHRlc3RzLmFwcGVuZChUZXN0SVB2NkVudmlyb25tZW50KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weSBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CmluZGV4IGM4ZWQ4MzAuLjUwOTRmN2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CkBAIC03LDYgKzcsMTEgQEAKICAgICBkZWYgaW5uZXJfZnVuY3Rpb24oKToKICAgICAgICAgY2xhc3MgTG9jYWxDbGFzczoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2xvYmFsIGlubmVyX2dsb2JhbF9mdW5jdGlvbgorICAgICAgICBkZWYgaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uKCk6CisgICAgICAgICAgICBkZWYgaW5uZXJfZnVuY3Rpb24yKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGlubmVyX2Z1bmN0aW9uMgogICAgICAgICByZXR1cm4gTG9jYWxDbGFzcwogICAgIHJldHVybiBsYW1iZGE6IGlubmVyX2Z1bmN0aW9uCiAKQEAgLTExNiw2ICsxMjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9mdW5jdGlvbigpKCkoKS5fX3F1YWxuYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsb2JhbF9mdW5jdGlvbi48bG9jYWxzPi5pbm5lcl9mdW5jdGlvbi48bG9jYWxzPi5Mb2NhbENsYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24uX19xdWFsbmFtZV9fLCAnaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24oKS5fX3F1YWxuYW1lX18sICdpbm5lcl9nbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24yJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdjJwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX3F1YWxuYW1lX18sICdjJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdkJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQppbmRleCBkYjFlOTM0Li5jYjQ5M2JmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQpAQCAtMSw1NyArMSw1NCBAQAotaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IHBlcm11dGF0aW9ucwogaW1wb3J0IHBpY2tsZQogZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZQoraW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKIAotQHN0YXRpY21ldGhvZAotZGVmIFB5dGhvblBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgotICAgICdQdXJlIFB5dGhvbiBhcHByb3hpbWF0aW9uIG9mIHBhcnRpYWwoKScKLSAgICBkZWYgbmV3ZnVuYygqZmFyZ3MsICoqZmtleXdvcmRzKToKLSAgICAgICAgbmV3a2V5d29yZHMgPSBrZXl3b3Jkcy5jb3B5KCkKLSAgICAgICAgbmV3a2V5d29yZHMudXBkYXRlKGZrZXl3b3JkcykKLSAgICAgICAgcmV0dXJuIGZ1bmMoKihhcmdzICsgZmFyZ3MpLCAqKm5ld2tleXdvcmRzKQotICAgIG5ld2Z1bmMuZnVuYyA9IGZ1bmMKLSAgICBuZXdmdW5jLmFyZ3MgPSBhcmdzCi0gICAgbmV3ZnVuYy5rZXl3b3JkcyA9IGtleXdvcmRzCi0gICAgcmV0dXJuIG5ld2Z1bmMKK2ltcG9ydCBmdW5jdG9vbHMKKworcHlfZnVuY3Rvb2xzID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdmdW5jdG9vbHMnLCBibG9ja2VkPVsnX2Z1bmN0b29scyddKQorY19mdW5jdG9vbHMgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2Z1bmN0b29scycsIGZyZXNoPVsnX2Z1bmN0b29scyddKQorCitkZWNpbWFsID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdkZWNpbWFsJywgZnJlc2g9WydfZGVjaW1hbCddKQorCiAKIGRlZiBjYXB0dXJlKCphcmdzLCAqKmt3KToKICAgICAiIiJjYXB0dXJlIGFsbCBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cyIiIgogICAgIHJldHVybiBhcmdzLCBrdwogCisKIGRlZiBzaWduYXR1cmUocGFydCk6CiAgICAgIiIiIHJldHVybiB0aGUgc2lnbmF0dXJlIG9mIGEgcGFydGlhbCBvYmplY3QgIiIiCiAgICAgcmV0dXJuIChwYXJ0LmZ1bmMsIHBhcnQuYXJncywgcGFydC5rZXl3b3JkcywgcGFydC5fX2RpY3RfXykKIAotY2xhc3MgVGVzdFBhcnRpYWwodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgdGhldHlwZSA9IGZ1bmN0b29scy5wYXJ0aWFsCitjbGFzcyBUZXN0UGFydGlhbDoKIAogICAgIGRlZiB0ZXN0X2Jhc2ljX2V4YW1wbGVzKHNlbGYpOgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKHApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoMywgNCwgYj0zMCwgYz00MCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgxLCAyLCAzLCA0KSwgZGljdChhPTEwLCBiPTMwLCBjPTQwKSkpCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUobWFwLCBsYW1iZGEgeDogeCoxMCkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChtYXAsIGxhbWJkYSB4OiB4KjEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocChbMSwyLDMsNF0pKSwgWzEwLCAyMCwgMzAsIDQwXSkKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6Ci0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQogICAgICAgICAjIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJlYWRhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5mdW5jLCBjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYXJncywgKDEsIDIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2V5d29yZHMsIGRpY3QoYT0xMCwgYj0yMCkpCiAgICAgICAgICMgYXR0cmlidXRlcyBzaG91bGQgbm90IGJlIHdyaXRhYmxlCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYudGhldHlwZSwgdHlwZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYucGFydGlhbCwgdHlwZSk6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdmdW5jJywgbWFwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2FyZ3MnLCAoMSwgMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAna2V5d29yZHMnLCBkaWN0KGE9MSwgYj0yKSkKIAotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGhleCkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChoZXgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRlbCBwLl9fZGljdF9fCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CkBAIC02MCw5ICs1Nyw5IEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoJ3BhcnRpYWwgb2JqZWN0IGFsbG93ZWQgX19kaWN0X18gdG8gYmUgZGVsZXRlZCcpCiAKICAgICBkZWYgdGVzdF9hcmd1bWVudF9jaGVja2luZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnRoZXR5cGUpICAgICAjIG5lZWQgYXQgbGVhc3QgYSBmdW5jIGFyZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGFydGlhbCkgICAgICMgbmVlZCBhdCBsZWFzdCBhIGZ1bmMgYXJnCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYudGhldHlwZSgyKSgpCisgICAgICAgICAgICBzZWxmLnBhcnRpYWwoMikoKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgpAQCAtNzMsNyArNzAsNyBAQAogICAgICAgICBkZWYgZnVuYyhhPTEwLCBiPTIwKToKICAgICAgICAgICAgIHJldHVybiBhCiAgICAgICAgIGQgPSB7J2EnOjN9Ci0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoZnVuYywgYT01KQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGZ1bmMsIGE9NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCoqZCksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydhJzozfSkKICAgICAgICAgcChiPTcpCkBAIC04MiwyMCArNzksMjAgQEAKICAgICBkZWYgdGVzdF9hcmdfY29tYmluYXRpb25zKHNlbGYpOgogICAgICAgICAjIGV4ZXJjaXNlIHNwZWNpYWwgY29kZSBwYXRocyBmb3IgemVybyBhcmdzIGluIGVpdGhlciBwYXJ0aWFsCiAgICAgICAgICMgb2JqZWN0IG9yIHRoZSBjYWxsZXIKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHt9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDEsMiksICgoMSwyKSwge30pKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCksICgoMSwyKSwge30pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoMyw0KSwgKCgxLDIsMyw0KSwge30pKQogCiAgICAgZGVmIHRlc3Rfa3dfY29tYmluYXRpb25zKHNlbGYpOgogICAgICAgICAjIGV4ZXJjaXNlIHNwZWNpYWwgY29kZSBwYXRocyBmb3Igbm8ga2V5d29yZCBhcmdzIGluCiAgICAgICAgICMgZWl0aGVyIHRoZSBwYXJ0aWFsIG9iamVjdCBvciB0aGUgY2FsbGVyCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocChhPTEpLCAoKCksIHsnYSc6MX0pKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIGE9MSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCBhPTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHsnYSc6MX0pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYj0yKSwgKCgpLCB7J2EnOjEsICdiJzoyfSkpCiAgICAgICAgICMga2V5d29yZCBhcmdzIGluIHRoZSBjYWxsIG92ZXJyaWRlIHRob3NlIGluIHRoZSBwYXJ0aWFsIG9iamVjdApAQCAtMTA0LDcgKzEwMSw3IEBACiAgICAgZGVmIHRlc3RfcG9zaXRpb25hbChzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQogICAgICAgICBmb3IgYXJncyBpbiBbKCksICgwLCksICgwLDEpLCAoMCwxLDIpLCAoMCwxLDIsMyldOgotICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncykKKyAgICAgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgKmFyZ3MpCiAgICAgICAgICAgICBleHBlY3RlZCA9IGFyZ3MgKyAoJ3gnLCkKICAgICAgICAgICAgIGdvdCwgZW1wdHkgPSBwKCd4JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCA9PSBnb3QgYW5kIGVtcHR5ID09IHt9KQpAQCAtMTEyLDE0ICsxMDksMTQgQEAKICAgICBkZWYgdGVzdF9rZXl3b3JkKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgY29ycmVjdGx5CiAgICAgICAgIGZvciBhIGluIFsnYScsIDAsIE5vbmUsIDMuNV06Ci0gICAgICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIGE9YSkKKyAgICAgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgYT1hKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J2EnOmEsJ3gnOk5vbmV9CiAgICAgICAgICAgICBlbXB0eSwgZ290ID0gcCh4PU5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgPT0gZ290IGFuZCBlbXB0eSA9PSAoKSkKIAogICAgIGRlZiB0ZXN0X25vX3NpZGVfZWZmZWN0cyhzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cyB0aGF0IGFmZmVjdCBzdWJzZXF1ZW50IGNhbGxzCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgMCwgYT0xKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDAsIGE9MSkKICAgICAgICAgYXJnczEsIGt3MSA9IHAoMSwgYj0yKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJnczEgPT0gKDAsMSkgYW5kIGt3MSA9PSB7J2EnOjEsJ2InOjJ9KQogICAgICAgICBhcmdzMiwga3cyID0gcCgpCkBAIC0xMjgsMTMgKzEyNSwxMyBAQAogICAgIGRlZiB0ZXN0X2Vycm9yX3Byb3BhZ2F0aW9uKHNlbGYpOgogICAgICAgICBkZWYgZih4LCB5KToKICAgICAgICAgICAgIHggLyB5Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiwgMSwgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiwgMSksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiksIDEsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiwgeT0wKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYucGFydGlhbChmLCAxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYucGFydGlhbChmLCAxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYucGFydGlhbChmKSwgMSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYucGFydGlhbChmLCB5PTApLCAxKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShpbnQsIGJhc2U9MTYpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoaW50LCBiYXNlPTE2KQogICAgICAgICBwID0gcHJveHkoZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZ1bmMsIHAuZnVuYykKICAgICAgICAgZiA9IE5vbmUKQEAgLTE0MiwzOSArMTM5LDQ1IEBACiAKICAgICBkZWYgdGVzdF93aXRoX2JvdW5kX2FuZF91bmJvdW5kX21ldGhvZHMoc2VsZik6CiAgICAgICAgIGRhdGEgPSBsaXN0KG1hcChzdHIsIHJhbmdlKDEwKSkpCi0gICAgICAgIGpvaW4gPSBzZWxmLnRoZXR5cGUoc3RyLmpvaW4sICcnKQorICAgICAgICBqb2luID0gc2VsZi5wYXJ0aWFsKHN0ci5qb2luLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGRhdGEpLCAnMDEyMzQ1Njc4OScpCi0gICAgICAgIGpvaW4gPSBzZWxmLnRoZXR5cGUoJycuam9pbikKKyAgICAgICAgam9pbiA9IHNlbGYucGFydGlhbCgnJy5qb2luKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oZGF0YSksICcwMTIzNDU2Nzg5JykKIAorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhjX2Z1bmN0b29scywgJ3JlcXVpcmVzIHRoZSBDIF9mdW5jdG9vbHMgbW9kdWxlJykKK2NsYXNzIFRlc3RQYXJ0aWFsQyhUZXN0UGFydGlhbCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGlmIGNfZnVuY3Rvb2xzOgorICAgICAgICBwYXJ0aWFsID0gY19mdW5jdG9vbHMucGFydGlhbAorCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgYXJncyA9IChvYmplY3QoKSwgb2JqZWN0KCkpCiAgICAgICAgIGFyZ3NfcmVwciA9ICcsICcuam9pbihyZXByKGEpIGZvciBhIGluIGFyZ3MpCiAgICAgICAgIGt3YXJncyA9IHsnYSc6IG9iamVjdCgpLCAnYic6IG9iamVjdCgpfQogICAgICAgICBrd2FyZ3NfcmVwciA9ICcsICcuam9pbigiJXM9JXIiICUgKGssIHYpIGZvciBrLCB2IGluIGt3YXJncy5pdGVtcygpKQotICAgICAgICBpZiBzZWxmLnRoZXR5cGUgaXMgZnVuY3Rvb2xzLnBhcnRpYWw6CisgICAgICAgIGlmIHNlbGYucGFydGlhbCBpcyBjX2Z1bmN0b29scy5wYXJ0aWFsOgogICAgICAgICAgICAgbmFtZSA9ICdmdW5jdG9vbHMucGFydGlhbCcKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLnRoZXR5cGUuX19uYW1lX18KKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLnBhcnRpYWwuX19uYW1lX18KIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30oeyFyfSknLmZvcm1hdChuYW1lLCBjYXB0dXJlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQogCi0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKmFyZ3MpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUsIGFyZ3NfcmVwciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICoqa3dhcmdzKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICoqa3dhcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBrd2FyZ3NfcmVwciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBhcmdzX3JlcHIsIGt3YXJnc19yZXByKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgotICAgICAgICBmID0gc2VsZi50aGV0eXBlKHNpZ25hdHVyZSwgJ2FzZGYnLCBiYXI9VHJ1ZSkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCiAgICAgICAgIGYuYWRkX3NvbWV0aGluZ190b19fZGljdF9fID0gVHJ1ZQogICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCkBAIC0xOTMsMjggKzE5NiwyNiBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4ge30KICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShvYmplY3QpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwob2JqZWN0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICJuZXcgc3R5bGUgZ2V0YXJncyBmb3JtYXQgYnV0IGFyZ3VtZW50IGlzIG5vdCBhIHR1cGxlIiwKICAgICAgICAgICAgICAgICBmLl9fc2V0c3RhdGVfXywgQmFkU2VxdWVuY2UoKSkKIAotY2xhc3MgUGFydGlhbFN1YmNsYXNzKGZ1bmN0b29scy5wYXJ0aWFsKToKLSAgICBwYXNzCiAKLWNsYXNzIFRlc3RQYXJ0aWFsU3ViY2xhc3MoVGVzdFBhcnRpYWwpOgorY2xhc3MgVGVzdFBhcnRpYWxQeShUZXN0UGFydGlhbCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHBhcnRpYWwgPSBzdGF0aWNtZXRob2QocHlfZnVuY3Rvb2xzLnBhcnRpYWwpCiAKLSAgICB0aGV0eXBlID0gUGFydGlhbFN1YmNsYXNzCiAKLWNsYXNzIFRlc3RQeXRob25QYXJ0aWFsKFRlc3RQYXJ0aWFsKToKK2lmIGNfZnVuY3Rvb2xzOgorICAgIGNsYXNzIFBhcnRpYWxTdWJjbGFzcyhjX2Z1bmN0b29scy5wYXJ0aWFsKToKKyAgICAgICAgcGFzcwogCi0gICAgdGhldHlwZSA9IFB5dGhvblBhcnRpYWwKIAotICAgICMgdGhlIHB5dGhvbiB2ZXJzaW9uIGhhc24ndCBhIG5pY2UgcmVwcgotICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6IHBhc3MKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfZnVuY3Rvb2xzLCAncmVxdWlyZXMgdGhlIEMgX2Z1bmN0b29scyBtb2R1bGUnKQorY2xhc3MgVGVzdFBhcnRpYWxDU3ViY2xhc3MoVGVzdFBhcnRpYWxDKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgcGFydGlhbCA9IFBhcnRpYWxTdWJjbGFzcwogCi0gICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaXNuJ3QgcGlja2xhYmxlCi0gICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOiBwYXNzCi0gICAgZGVmIHRlc3Rfc2V0c3RhdGVfcmVmY291bnQoc2VsZik6IHBhc3MKIAogY2xhc3MgVGVzdFVwZGF0ZVdyYXBwZXIodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yMjMsMTkgKzIyNCwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQ9ZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUyk6CiAgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyB3ZXJlIGFzc2lnbmVkCiAgICAgICAgIGZvciBuYW1lIGluIGFzc2lnbmVkOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIod3JhcHBlciwgbmFtZSkgaXMgZ2V0YXR0cih3cmFwcGVkLCBuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cih3cmFwcGVyLCBuYW1lKSwgZ2V0YXR0cih3cmFwcGVkLCBuYW1lKSkKICAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIHdlcmUgdXBkYXRlZAogICAgICAgICBmb3IgbmFtZSBpbiB1cGRhdGVkOgogICAgICAgICAgICAgd3JhcHBlcl9hdHRyID0gZ2V0YXR0cih3cmFwcGVyLCBuYW1lKQogICAgICAgICAgICAgd3JhcHBlZF9hdHRyID0gZ2V0YXR0cih3cmFwcGVkLCBuYW1lKQogICAgICAgICAgICAgZm9yIGtleSBpbiB3cmFwcGVkX2F0dHI6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZWRfYXR0cltrZXldIGlzIHdyYXBwZXJfYXR0cltrZXldKQorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gIl9fZGljdF9fIiBhbmQga2V5ID09ICJfX3dyYXBwZWRfXyI6CisgICAgICAgICAgICAgICAgICAgICMgX193cmFwcGVkX18gaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIHVwZGF0ZSBjb2RlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVkX2F0dHJba2V5XSwgd3JhcHBlcl9hdHRyW2tleV0pCisgICAgICAgICMgQ2hlY2sgX193cmFwcGVkX18KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVkKQorCiAKICAgICBkZWYgX2RlZmF1bHRfdXBkYXRlKHNlbGYpOgogICAgICAgICBkZWYgZihhOidUaGlzIGlzIGEgbmV3IGFubm90YXRpb24nKToKICAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGYuYXR0ciA9ICdUaGlzIGlzIGFsc28gYSB0ZXN0JworICAgICAgICBmLl9fd3JhcHBlZF9fID0gIlRoaXMgaXMgYSBiYWxkIGZhY2VkIGxpZSIKICAgICAgICAgZGVmIHdyYXBwZXIoYjonVGhpcyBpcyB0aGUgcHJpb3IgYW5ub3RhdGlvbicpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZikKQEAgLTMyMiw2ICszMzAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUod3JhcHBlci5fX2RvY19fLnN0YXJ0c3dpdGgoJ21heCgnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fYW5ub3RhdGlvbnNfXywge30pCiAKKwogY2xhc3MgVGVzdFdyYXBzKFRlc3RVcGRhdGVXcmFwcGVyKToKIAogICAgIGRlZiBfZGVmYXVsdF91cGRhdGUoc2VsZik6CkBAIC0zMjksMTQgKzMzOCwxNSBAQAogICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYWxzbyBhIHRlc3QnCisgICAgICAgIGYuX193cmFwcGVkX18gPSAiVGhpcyBpcyBzdGlsbCBhIGJhbGQgZmFjZWQgbGllIgogICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGYpCiAgICAgICAgIGRlZiB3cmFwcGVyKCk6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmKQogICAgICAgICByZXR1cm4gd3JhcHBlciwgZgogCiAgICAgZGVmIHRlc3RfZGVmYXVsdF91cGRhdGUoc2VsZik6CiAgICAgICAgIHdyYXBwZXIsIGYgPSBzZWxmLl9kZWZhdWx0X3VwZGF0ZSgpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICdmJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fcXVhbG5hbWVfXywgZi5fX3F1YWxuYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhbHNvIGEgdGVzdCcpCkBAIC0zODIsNiArMzkyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGEgZGlmZmVyZW50IHRlc3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuZGljdF9hdHRyLCBmLmRpY3RfYXR0cikKIAorCiBjbGFzcyBUZXN0UmVkdWNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmdW5jID0gZnVuY3Rvb2xzLnJlZHVjZQogCkBAIC00NjIsMjQgKzQ3MywyOSBAQAogICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoYWRkLCBkKSwgIiIuam9pbihkLmtleXMoKSkpCiAKLWNsYXNzIFRlc3RDbXBUb0tleSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFRlc3RDbXBUb0tleToKIAogICAgIGRlZiB0ZXN0X2NtcF90b19rZXkoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSgzKSwga2V5KDMpKQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoa2V5KDMpLCBrZXkoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGtleSgzKSwga2V5KDMpKQorCiAgICAgICAgIGRlZiBjbXAyKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIGludCh4KSAtIGludCh5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAyKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkoNC4wKSwga2V5KCc0JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhrZXkoMiksIGtleSgnMzUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoa2V5KDIpLCBrZXkoJzM1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5KDIpLCBrZXkoJzM1JykpCiAKICAgICBkZWYgdGVzdF9jbXBfdG9fa2V5X2FyZ3VtZW50cyhzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXA9Y21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KG9iaj0zKSwga2V5KG9iaj0zKSkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGtleShvYmo9MyksIGtleShvYmo9MSkpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpKToKQEAgLTQ4NywxMCArNTAzLDEwIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpKToKICAgICAgICAgICAgIDEgPCBrZXkoMykgICAgIyBsaHMgaXMgbm90IGEgSyBvYmplY3QKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoKSAgICAgICAgICAgICAjIHRvbyBmZXcgYXJncworICAgICAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KCkgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSwgTm9uZSkgICAjIHRvbyBtYW55IGFyZ3MKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSkKKyAgICAgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxLCBOb25lKSAgICMgdG9vIG1hbnkgYXJncworICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAga2V5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBmZXcgYXJncwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CkBAIC00OTksNyArNTE1LDcgQEAKICAgICBkZWYgdGVzdF9iYWRfY21wKHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgIGtleSgzKSA+IGtleSgxKQogCkBAIC01MTQsMTMgKzUzMCwxMyBAQAogICAgIGRlZiB0ZXN0X29ial9maWVsZChzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXA9Y21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KDUwKS5vYmosIDUwKQogCiAgICAgZGVmIHRlc3Rfc29ydF9pbnQoc2VsZik6CiAgICAgICAgIGRlZiBteWNtcCh4LCB5KToKICAgICAgICAgICAgIHJldHVybiB5IC0geAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyYW5nZSg1KSwga2V5PWZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKSksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJhbmdlKDUpLCBrZXk9c2VsZi5jbXBfdG9fa2V5KG15Y21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWzQsIDMsIDIsIDEsIDBdKQogCiAgICAgZGVmIHRlc3Rfc29ydF9pbnRfc3RyKHNlbGYpOgpAQCAtNTI4LDE4ICs1NDQsMjkgQEAKICAgICAgICAgICAgIHgsIHkgPSBpbnQoeCksIGludCh5KQogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCiAgICAgICAgIHZhbHVlcyA9IFs1LCAnMycsIDcsIDIsICcwJywgJzEnLCA0LCAnMTAnLCAxXQotICAgICAgICB2YWx1ZXMgPSBzb3J0ZWQodmFsdWVzLCBrZXk9ZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApKQorICAgICAgICB2YWx1ZXMgPSBzb3J0ZWQodmFsdWVzLCBrZXk9c2VsZi5jbXBfdG9fa2V5KG15Y21wKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaW50KHZhbHVlKSBmb3IgdmFsdWUgaW4gdmFsdWVzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNCwgNSwgNywgMTBdKQogCiAgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKICAgICAgICAgZGVmIG15Y21wKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIHkgLSB4Ci0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkobXljbXApCiAgICAgICAgIGsgPSBrZXkoMTApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgaykKICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGssIGNvbGxlY3Rpb25zLkhhc2hhYmxlKQogCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfZnVuY3Rvb2xzLCAncmVxdWlyZXMgdGhlIEMgX2Z1bmN0b29scyBtb2R1bGUnKQorY2xhc3MgVGVzdENtcFRvS2V5QyhUZXN0Q21wVG9LZXksIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgY21wX3RvX2tleSA9IGNfZnVuY3Rvb2xzLmNtcF90b19rZXkKKworCitjbGFzcyBUZXN0Q21wVG9LZXlQeShUZXN0Q21wVG9LZXksIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbXBfdG9fa2V5ID0gc3RhdGljbWV0aG9kKHB5X2Z1bmN0b29scy5jbXBfdG9fa2V5KQorCisKIGNsYXNzIFRlc3RUb3RhbE9yZGVyaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2x0KHNlbGYpOgpAQCAtNTU3LDYgKzU4NCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgxKSA+IEEoMikpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19sZShzZWxmKToKICAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwpAQCAtNTczLDYgKzYwMSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgxKSA+PSBBKDIpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ3Qoc2VsZik6CiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKQEAgLTU4OSw2ICs2MTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMikgPCBBKDEpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ2Uoc2VsZik6CiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKQEAgLTYwNSw2ICs2MzUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMikgPD0gQSgxKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX25vX292ZXJ3cml0ZShzZWxmKToKICAgICAgICAgIyBuZXcgbWV0aG9kcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBleGlzdGluZwpAQCAtNjI0LDI3ICs2NTUsMTE4IEBACiAgICAgICAgICAgICBjbGFzcyBBOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0X2J1Z18xMDA0MihzZWxmKToKKyAgICBkZWYgdGVzdF90eXBlX2Vycm9yX3doZW5fbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICAjIGJ1ZyAxMDA0MjsgZW5zdXJlIHN0YWNrIG92ZXJmbG93IGRvZXMgbm90IG9jY3VyCisgICAgICAgICMgd2hlbiBkZWNvcmF0ZWQgdHlwZXMgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKLSAgICAgICAgY2xhc3MgVGVzdFRPOgorICAgICAgICBjbGFzcyBJbXBsZW1lbnRzTGVzc1RoYW46CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgogICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGVzdFRPKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW4pOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGVzdFRPKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW4pOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCi0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIFRlc3RUTyg4KSA8PSAoKQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0dyZWF0ZXJUaGFuOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW4pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDw9IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMVCA8IDEiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbigtMSkgPCAxCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxUIDwgTEUiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbigwKSA8IEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oMCkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTFQgPCBHVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuKDEpIDwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDEpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxFIDw9IExUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDIpIDw9IEltcGxlbWVudHNMZXNzVGhhbigyKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMRSA8PSBHRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbygzKSA8PSBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDMpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdUID4gR0UiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbig0KSA+IEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oNCkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR1QgPiBMVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDUpID4gSW1wbGVtZW50c0xlc3NUaGFuKDUpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdFID49IEdUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDYpID49IEltcGxlbWVudHNHcmVhdGVyVGhhbig2KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHRSA+PSBMRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyg3KSA+PSBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDcpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdFIHdoZW4gZXF1YWwiKToKKyAgICAgICAgICAgIGEgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOCkKKyAgICAgICAgICAgIGIgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBhID49IGIKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTEUgd2hlbiBlcXVhbCIpOgorICAgICAgICAgICAgYSA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg5KQorICAgICAgICAgICAgYiA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGEgPD0gYgogCiBjbGFzcyBUZXN0TFJVKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2xydShzZWxmKToKICAgICAgICAgZGVmIG9yaWcoeCwgeSk6Ci0gICAgICAgICAgICByZXR1cm4gMyp4K3kKKyAgICAgICAgICAgIHJldHVybiAzICogeCArIHkKICAgICAgICAgZiA9IGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT0yMCkob3JpZykKICAgICAgICAgaGl0cywgbWlzc2VzLCBtYXhzaXplLCBjdXJyc2l6ZSA9IGYuY2FjaGVfaW5mbygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4c2l6ZSwgMjApCkBAIC03NDksNyArODcxLDcgQEAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1c2VyX2Z1bmN0aW9uIGV4Y2VwdGlvbnMgZ2V0IHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQKICAgICAgICAgIyBjcmVhdGluZyBhIGhhcmQtdG8tcmVhZCBjaGFpbmVkIGV4Y2VwdGlvbi4KICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMxNzcKLSAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEwMCk6CisgICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMjgpOgogICAgICAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZSkKICAgICAgICAgICAgIGRlZiBmdW5jKGkpOgogICAgICAgICAgICAgICAgIHJldHVybiAnYWJjJ1tpXQpAQCAtNzYyLDcgKzg4NCw3IEBACiAgICAgICAgICAgICAgICAgZnVuYygxNSkKIAogICAgIGRlZiB0ZXN0X2xydV93aXRoX3R5cGVzKHNlbGYpOgotICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTAwKToKKyAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEyOCk6CiAgICAgICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPW1heHNpemUsIHR5cGVkPVRydWUpCiAgICAgICAgICAgICBkZWYgc3F1YXJlKHgpOgogICAgICAgICAgICAgICAgIHJldHVybiB4ICogeApAQCAtNzc3LDYgKzg5OSwzNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXVhcmUuY2FjaGVfaW5mbygpLmhpdHMsIDQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxdWFyZS5jYWNoZV9pbmZvKCkubWlzc2VzLCA0KQogCisgICAgZGVmIHRlc3RfbHJ1X3dpdGhfa2V5d29yZF9hcmdzKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCisgICAgICAgIGRlZiBmaWIobik6CisgICAgICAgICAgICBpZiBuIDwgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICAgICAgcmV0dXJuIGZpYihuPW4tMSkgKyBmaWIobj1uLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbZmliKG49bnVtYmVyKSBmb3IgbnVtYmVyIGluIHJhbmdlKDE2KV0sCisgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCwgNTUsIDg5LCAxNDQsIDIzMywgMzc3LCA2MTBdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPTEyOCwgY3VycnNpemU9MTYpKQorICAgICAgICBmaWIuY2FjaGVfY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTAsIG1pc3Nlcz0wLCBtYXhzaXplPTEyOCwgY3VycnNpemU9MCkpCisKKyAgICBkZWYgdGVzdF9scnVfd2l0aF9rZXl3b3JkX2FyZ3NfbWF4c2l6ZV9ub25lKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPU5vbmUpCisgICAgICAgIGRlZiBmaWIobik6CisgICAgICAgICAgICBpZiBuIDwgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICAgICAgcmV0dXJuIGZpYihuPW4tMSkgKyBmaWIobj1uLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2ZpYihuPW51bWJlcikgZm9yIG51bWJlciBpbiByYW5nZSgxNildLAorICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTE2KSkKKyAgICAgICAgZmliLmNhY2hlX2NsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MCwgbWF4c2l6ZT1Ob25lLCBjdXJyc2l6ZT0wKSkKKwogICAgIGRlZiB0ZXN0X25lZWRfZm9yX3Jsb2NrKHNlbGYpOgogICAgICAgICAjIFRoaXMgd2lsbCBkZWFkbG9jayBvbiBhbiBMUlUgY2FjaGUgdGhhdCB1c2VzIGEgcmVndWxhciBsb2NrCiAKQEAgLTgwMiwxNyArOTU0LDQ5MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZUVxKDIpKSAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoZSBjb3JyZWN0IHJldHVybiB2YWx1ZQogCiAKK2NsYXNzIFRlc3RTaW5nbGVEaXNwYXRjaCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2ltcGxlX292ZXJsb2FkcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBkZWYgZ19pbnQoaSk6CisgICAgICAgICAgICByZXR1cm4gImludGVnZXIiCisgICAgICAgIGcucmVnaXN0ZXIoaW50LCBnX2ludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKCJzdHIiKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoMSksICJpbnRlZ2VyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKFsxLDIsM10pLCAiYmFzZSIpCisKKyAgICBkZWYgdGVzdF9tcm8oc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRChDLCBCKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGdfQShhKToKKyAgICAgICAgICAgIHJldHVybiAiQSIKKyAgICAgICAgZGVmIGdfQihiKToKKyAgICAgICAgICAgIHJldHVybiAiQiIKKyAgICAgICAgZy5yZWdpc3RlcihBLCBnX0EpCisgICAgICAgIGcucmVnaXN0ZXIoQiwgZ19CKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoQSgpKSwgIkEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoQigpKSwgIkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoQygpKSwgIkEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoRCgpKSwgIkIiKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfZGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIEBnLnJlZ2lzdGVyKGludCkKKyAgICAgICAgZGVmIGdfaW50KGkpOgorICAgICAgICAgICAgcmV0dXJuICJpbnQgJXMiICUgKGksKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoIiIpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygxMiksICJpbnQgMTIiKQorICAgICAgICBzZWxmLmFzc2VydElzKGcuZGlzcGF0Y2goaW50KSwgZ19pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZy5kaXNwYXRjaChvYmplY3QpLCBnLmRpc3BhdGNoKHN0cikpCisgICAgICAgICMgTm90ZTogaW4gdGhlIGFzc2VydCBhYm92ZSB0aGlzIGlzIG5vdCBnLgorICAgICAgICAjIEBzaW5nbGVkaXNwYXRjaCByZXR1cm5zIHRoZSB3cmFwcGVyLgorCisgICAgZGVmIHRlc3Rfd3JhcHBpbmdfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgIlNpbXBsZSB0ZXN0IgorICAgICAgICAgICAgcmV0dXJuICJUZXN0IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcuX19uYW1lX18sICJnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLl9fZG9jX18sICJTaW1wbGUgdGVzdCIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhkZWNpbWFsLCAncmVxdWlyZXMgX2RlY2ltYWwnKQorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2NfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAZy5yZWdpc3RlcihkZWNpbWFsLkRlY2ltYWxFeGNlcHRpb24pCisgICAgICAgIGRlZiBfKG9iaik6CisgICAgICAgICAgICByZXR1cm4gb2JqLmFyZ3MKKyAgICAgICAgc3VibiA9IGRlY2ltYWwuU3Vibm9ybWFsKCJFeHBvbmVudCA8IEVtaW4iKQorICAgICAgICBybmQgPSBkZWNpbWFsLlJvdW5kZWQoIk51bWJlciBnb3Qgcm91bmRlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzdWJuKSwgKCJFeHBvbmVudCA8IEVtaW4iLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhybmQpLCAoIk51bWJlciBnb3Qgcm91bmRlZCIsKSkKKyAgICAgICAgQGcucmVnaXN0ZXIoZGVjaW1hbC5TdWJub3JtYWwpCisgICAgICAgIGRlZiBfKG9iaik6CisgICAgICAgICAgICByZXR1cm4gIlRvbyBzbWFsbCB0byBjYXJlLiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHN1Ym4pLCAiVG9vIHNtYWxsIHRvIGNhcmUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHJuZCksICgiTnVtYmVyIGdvdCByb3VuZGVkIiwpKQorCisgICAgZGVmIHRlc3RfY29tcG9zZV9tcm8oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgZXhhbXBsZXMgaW4gdGhpcyB0ZXN0IGRlcGVuZCBvbiBoYXlzdGFjayBvcmRlcmluZy4KKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIG1ybyA9IGZ1bmN0b29scy5fY29tcG9zZV9tcm8KKyAgICAgICAgYmFzZXMgPSBbYy5TZXF1ZW5jZSwgYy5NdXRhYmxlTWFwcGluZywgYy5NYXBwaW5nLCBjLlNldF0KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKGRpY3QsIGhheXN0YWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbZGljdCwgYy5NdXRhYmxlTWFwcGluZywgYy5NYXBwaW5nLCBjLlNpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsIG9iamVjdF0pCisgICAgICAgIGJhc2VzID0gW2MuQ29udGFpbmVyLCBjLk1hcHBpbmcsIGMuTXV0YWJsZU1hcHBpbmcsIGMuT3JkZXJlZERpY3RdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhjLkNoYWluTWFwLCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW2MuQ2hhaW5NYXAsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorCisgICAgICAgICMgSWYgdGhlcmUncyBhIGdlbmVyaWMgZnVuY3Rpb24gd2l0aCBpbXBsZW1lbnRhdGlvbnMgcmVnaXN0ZXJlZCBmb3IKKyAgICAgICAgIyBib3RoIFNpemVkIGFuZCBDb250YWluZXIsIHBhc3NpbmcgYSBkZWZhdWx0ZGljdCB0byBpdCByZXN1bHRzIGluIGFuCisgICAgICAgICMgYW1iaWd1b3VzIGRpc3BhdGNoIHdoaWNoIHdpbGwgY2F1c2UgYSBSdW50aW1lRXJyb3IgKHNlZQorICAgICAgICAjIHRlc3RfbXJvX2NvbmZsaWN0cykuCisgICAgICAgIGJhc2VzID0gW2MuQ29udGFpbmVyLCBjLlNpemVkLCBzdHJdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhjLmRlZmF1bHRkaWN0LCBbYy5TaXplZCwgYy5Db250YWluZXIsIHN0cl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtjLmRlZmF1bHRkaWN0LCBkaWN0LCBjLlNpemVkLCBjLkNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF0pCisKKyAgICAgICAgIyBNdXRhYmxlU2VxdWVuY2UgYmVsb3cgaXMgcmVnaXN0ZXJlZCBkaXJlY3RseSBvbiBELiBJbiBvdGhlciB3b3JkcywgaXQKKyAgICAgICAgIyBwcmVjZWVkcyBNdXRhYmxlTWFwcGluZyB3aGljaCBtZWFucyBzaW5nbGUgZGlzcGF0Y2ggd2lsbCBhbHdheXMKKyAgICAgICAgIyBjaG9vc2UgTXV0YWJsZVNlcXVlbmNlIGhlcmUuCisgICAgICAgIGNsYXNzIEQoYy5kZWZhdWx0ZGljdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGMuTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKEQpCisgICAgICAgIGJhc2VzID0gW2MuTXV0YWJsZVNlcXVlbmNlLCBjLk11dGFibGVNYXBwaW5nXQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oRCwgYmFzZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtELCBjLk11dGFibGVTZXF1ZW5jZSwgYy5TZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZGVmYXVsdGRpY3QsIGRpY3QsIGMuTXV0YWJsZU1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLk1hcHBpbmcsIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0XSkKKworICAgICAgICAjIENvbnRhaW5lciBhbmQgQ2FsbGFibGUgYXJlIHJlZ2lzdGVyZWQgb24gZGlmZmVyZW50IGJhc2UgY2xhc3NlcyBhbmQKKyAgICAgICAgIyBhIGdlbmVyaWMgZnVuY3Rpb24gc3VwcG9ydGluZyBib3RoIHNob3VsZCBhbHdheXMgcGljayB0aGUgQ2FsbGFibGUKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBpZiBhIEMgaW5zdGFuY2UgaXMgcGFzc2VkLgorICAgICAgICBjbGFzcyBDKGMuZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYmFzZXMgPSBbYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXIsIGMuTWFwcGluZ10KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKEMsIGhheXN0YWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbQywgYy5DYWxsYWJsZSwgYy5kZWZhdWx0ZGljdCwgZGljdCwgYy5NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5TaXplZCwgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsIG9iamVjdF0pCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl9hYmMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBkID0geyJhIjogImIifQorICAgICAgICBsID0gWzEsIDIsIDNdCisgICAgICAgIHMgPSB7b2JqZWN0KCksIE5vbmV9CisgICAgICAgIGYgPSBmcm96ZW5zZXQocykKKyAgICAgICAgdCA9ICgxLCAyLCAzKQorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJiYXNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgb2JqOiAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nLCBsYW1iZGEgb2JqOiAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkNoYWluTWFwLCBsYW1iZGEgb2JqOiAiY2hhaW5tYXAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpICAjIGlycmVsZXZhbnQgQUJDcyByZWdpc3RlcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVTZXF1ZW5jZSwgbGFtYmRhIG9iajogIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVTZXQsIGxhbWJkYSBvYmo6ICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NYXBwaW5nLCBsYW1iZGEgb2JqOiAibWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikgICMgbm90IHNwZWNpZmljIGVub3VnaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXF1ZW5jZSwgbGFtYmRhIG9iajogInNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXQsIGxhbWJkYSBvYmo6ICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoZGljdCwgbGFtYmRhIG9iajogImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihsaXN0LCBsYW1iZGEgb2JqOiAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihzZXQsIGxhbWJkYSBvYmo6ICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3Rlcihmcm96ZW5zZXQsIGxhbWJkYSBvYmo6ICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKHR1cGxlLCBsYW1iZGEgb2JqOiAidHVwbGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgImZyb3plbi1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJ0dXBsZSIpCisKKyAgICBkZWYgdGVzdF9jM19hYmMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBtcm8gPSBmdW5jdG9vbHMuX2MzX21ybworICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMCAgICMgaW1wbGllcyBTaXplZAorICAgICAgICBAYy5Db250YWluZXIucmVnaXN0ZXIKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBEKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzICAgIyB1bnJlbGF0ZWQKKyAgICAgICAgY2xhc3MgWChELCBDLCBCKToKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzICAgIyBpbXBsaWVzIENhbGxhYmxlCisgICAgICAgIGV4cGVjdGVkID0gW1gsIGMuQ2FsbGFibGUsIEQsIEMsIGMuQ29udGFpbmVyLCBCLCBjLlNpemVkLCBBLCBvYmplY3RdCisgICAgICAgIGZvciBhYmNzIGluIHBlcm11dGF0aW9ucyhbYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXJdKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXJvKFgsIGFiY3M9YWJjcyksIGV4cGVjdGVkKQorICAgICAgICAjIHVucmVsYXRlZCBBQkNzIGRvbid0IGFwcGVhciBpbiB0aGUgcmVzdWx0aW5nIE1STworICAgICAgICBtYW55X2FiY3MgPSBbYy5NYXBwaW5nLCBjLlNpemVkLCBjLkNhbGxhYmxlLCBjLkNvbnRhaW5lciwgYy5JdGVyYWJsZV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtcm8oWCwgYWJjcz1tYW55X2FiY3MpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X21yb19jb25mbGljdHMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIGNsYXNzIE8oYy5TaXplZCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBvID0gTygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgImJhc2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuSXRlcmFibGUsIGxhbWJkYSBhcmc6ICJpdGVyYWJsZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5Db250YWluZXIsIGxhbWJkYSBhcmc6ICJjb250YWluZXIiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2l6ZWQsIGxhbWJkYSBhcmc6ICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXQsIGxhbWJkYSBhcmc6ICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJzaXplZCIpCisgICAgICAgIGMuSXRlcmFibGUucmVnaXN0ZXIoTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKSAgICMgYmVjYXVzZSBpdCdzIGV4cGxpY2l0bHkgaW4gX19tcm9fXworICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihPKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJzaXplZCIpICAgIyBzZWUgYWJvdmU6IFNpemVkIGlzIGluIF9fbXJvX18KKyAgICAgICAgYy5TZXQucmVnaXN0ZXIoTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2V0IikgICAgICMgYmVjYXVzZSBjLlNldCBpcyBhIHN1YmNsYXNzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGMuU2l6ZWQgYW5kIGMuQ29udGFpbmVyCisgICAgICAgIGNsYXNzIFA6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHAgPSBQKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHApLCAiYmFzZSIpCisgICAgICAgIGMuSXRlcmFibGUucmVnaXN0ZXIoUCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHApLCAiaXRlcmFibGUiKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihQKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgcmVfb25lOgorICAgICAgICAgICAgZyhwKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgc3RyKHJlX29uZS5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5JdGVyYWJsZSc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkl0ZXJhYmxlJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgUShjLlNpemVkKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHEgPSBRKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHEpLCAic2l6ZWQiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKFEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIF9fbXJvX18KKyAgICAgICAgYy5TZXQucmVnaXN0ZXIoUSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHEpLCAic2V0IikgICAgICMgYmVjYXVzZSBjLlNldCBpcyBhIHN1YmNsYXNzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGMuU2l6ZWQgYW5kIGMuSXRlcmFibGUKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgaChhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAaC5yZWdpc3RlcihjLlNpemVkKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJzaXplZCIKKyAgICAgICAgQGgucmVnaXN0ZXIoYy5Db250YWluZXIpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImNvbnRhaW5lciIKKyAgICAgICAgIyBFdmVuIHRob3VnaCBTaXplZCBhbmQgQ29udGFpbmVyIGFyZSBleHBsaWNpdCBiYXNlcyBvZiBNdXRhYmxlTWFwcGluZywKKyAgICAgICAgIyB0aGlzIEFCQyBpcyBpbXBsaWNpdGx5IHJlZ2lzdGVyZWQgb24gZGVmYXVsdGRpY3Qgd2hpY2ggbWFrZXMgYWxsIG9mCisgICAgICAgICMgTXV0YWJsZU1hcHBpbmcncyBiYXNlcyBpbXBsaWNpdCBhcyB3ZWxsIGZyb20gZGVmYXVsdGRpY3QncworICAgICAgICAjIHBlcnNwZWN0aXZlLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgcmVfdHdvOgorICAgICAgICAgICAgaChjLmRlZmF1bHRkaWN0KGxhbWJkYTogMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICBzdHIocmVfdHdvLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAoKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4iKSwKKyAgICAgICAgICAgICAoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuU2l6ZWQnPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiIpKSwKKyAgICAgICAgKQorICAgICAgICBjbGFzcyBSKGMuZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjLk11dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihSKQorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBpKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIEBpLnJlZ2lzdGVyKGMuTXV0YWJsZU1hcHBpbmcpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gIm1hcHBpbmciCisgICAgICAgIEBpLnJlZ2lzdGVyKGMuTXV0YWJsZVNlcXVlbmNlKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJzZXF1ZW5jZSIKKyAgICAgICAgciA9IFIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkociksICJzZXF1ZW5jZSIpCisgICAgICAgIGNsYXNzIFM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIFQoUywgYy5TaXplZCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICB0ID0gVCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCh0KSwgInNpemVkIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKHQpLCAic2l6ZWQiKSAgICMgYmVjYXVzZSBpdCdzIGV4cGxpY2l0bHkgaW4gdGhlIE1STworICAgICAgICBjbGFzcyBVOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgdSA9IFUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgodSksICJzaXplZCIpICAgIyBpbXBsaWNpdCBTaXplZCBzdWJjbGFzcyBpbmZlcnJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmcm9tIHRoZSBleGlzdGVuY2Ugb2YgX19sZW5fXygpCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKFUpCisgICAgICAgICMgVGhlcmUgaXMgbm8gcHJlZmVyZW5jZSBmb3IgcmVnaXN0ZXJlZCB2ZXJzdXMgaW5mZXJyZWQgQUJDcy4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX3RocmVlOgorICAgICAgICAgICAgaCh1KQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgc3RyKHJlX3RocmVlLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAoKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4iKSwKKyAgICAgICAgICAgICAoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuU2l6ZWQnPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiIpKSwKKyAgICAgICAgKQorICAgICAgICBjbGFzcyBWKGMuU2l6ZWQsIFMpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgaihhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAai5yZWdpc3RlcihTKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJzIgorICAgICAgICBAai5yZWdpc3RlcihjLkNvbnRhaW5lcikKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiY29udGFpbmVyIgorICAgICAgICB2ID0gVigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaih2KSwgInMiKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihWKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGoodiksICJjb250YWluZXIiKSAgICMgYmVjYXVzZSBpdCBlbmRzIHVwIHJpZ2h0IGFmdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTaXplZCBpbiB0aGUgTVJPCisKKyAgICBkZWYgdGVzdF9jYWNoZV9pbnZhbGlkYXRpb24oc2VsZik6CisgICAgICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IFVzZXJEaWN0CisgICAgICAgIGNsYXNzIFRyYWNpbmdEaWN0KFVzZXJEaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHN1cGVyKFRyYWNpbmdEaWN0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfb3BzID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLmdldF9vcHMgPSBbXQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5kYXRhW2tleV0KKyAgICAgICAgICAgICAgICBzZWxmLmdldF9vcHMuYXBwZW5kKGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfb3BzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgc2VsZi5kYXRhW2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZGF0YS5jbGVhcigpCisgICAgICAgIF9vcmlnX3drZCA9IGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeQorICAgICAgICB0ZCA9IFRyYWNpbmdEaWN0KCkKKyAgICAgICAgZnVuY3Rvb2xzLldlYWtLZXlEaWN0aW9uYXJ5ID0gbGFtYmRhOiB0ZAorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBkID0ge30KKyAgICAgICAgbCA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtkaWN0XSwgZy5yZWdpc3RyeVtvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLCBnLnJlZ2lzdHJ5W29iamVjdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtsaXN0XSwgZy5yZWdpc3RyeVtvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sIHRkLmRhdGFbbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3RdKQorICAgICAgICBnLnJlZ2lzdGVyKGxpc3QsIGxhbWJkYSBhcmc6ICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLl9maW5kX2ltcGwoZGljdCwgZy5yZWdpc3RyeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5fZmluZF9pbXBsKGxpc3QsIGcucmVnaXN0cnkpKQorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjLk11dGFibGVNYXBwaW5nLnJlZ2lzdGVyKFgpICAgIyBXaWxsIG5vdCBpbnZhbGlkYXRlIHRoZSBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm90IHVzaW5nIEFCQ3MgeWV0LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgYXJnOiAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdCwgbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBnLmRpc3BhdGNoKGxpc3QpCisgICAgICAgIGcuZGlzcGF0Y2goZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdCwgbGlzdCwgZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBjLk11dGFibGVTZXQucmVnaXN0ZXIoWCkgICAgICAgIyBXaWxsIGludmFsaWRhdGUgdGhlIGNhY2hlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDIpICAgIyBTdGFsZSBjYWNoZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nLCBsYW1iZGEgYXJnOiAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBnLnJlZ2lzdGVyKGRpY3QsIGxhbWJkYSBhcmc6ICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBnLl9jbGVhcl9jYWNoZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMCkKKyAgICAgICAgZnVuY3Rvb2xzLldlYWtLZXlEaWN0aW9uYXJ5ID0gX29yaWdfd2tkCisKKwogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHRlc3RfY2xhc3NlcyA9ICgKLSAgICAgICAgVGVzdFBhcnRpYWwsCi0gICAgICAgIFRlc3RQYXJ0aWFsU3ViY2xhc3MsCi0gICAgICAgIFRlc3RQeXRob25QYXJ0aWFsLAorICAgICAgICBUZXN0UGFydGlhbEMsCisgICAgICAgIFRlc3RQYXJ0aWFsUHksCisgICAgICAgIFRlc3RQYXJ0aWFsQ1N1YmNsYXNzLAogICAgICAgICBUZXN0VXBkYXRlV3JhcHBlciwKICAgICAgICAgVGVzdFRvdGFsT3JkZXJpbmcsCi0gICAgICAgIFRlc3RDbXBUb0tleSwKKyAgICAgICAgVGVzdENtcFRvS2V5QywKKyAgICAgICAgVGVzdENtcFRvS2V5UHksCiAgICAgICAgIFRlc3RXcmFwcywKICAgICAgICAgVGVzdFJlZHVjZSwKICAgICAgICAgVGVzdExSVSwKKyAgICAgICAgVGVzdFNpbmdsZURpc3BhdGNoLAogICAgICkKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weSBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CmluZGV4IGEwYzE1NmYuLmJlYWM5OTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5CkBAIC04Miw2ICs4MiwxNCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKIAorICAgIGRlZiB0ZXN0X2JhZGZ1dHVyZTEwKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmUxMAorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlMTAiLCAnMycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKKwogICAgIGRlZiB0ZXN0X3BhcnNlcmhhY2soc2VsZik6CiAgICAgICAgICMgdGVzdCB0aGF0IHRoZSBwYXJzZXIuYzo6ZnV0dXJlX2hhY2sgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQKICAgICAgICAgIyBOb3RlOiBhbHRob3VnaCB0aGlzIHRlc3QgbXVzdCBwYXNzLCBpdCdzIG5vdCB0ZXN0aW5nIHRoZSBvcmlnaW5hbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nYy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKaW5kZXggYzU5YjcyZS4uZThmNTJhNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2djLnB5CkBAIC0xLDYgKzEsOSBAQAoraW1wb3J0IF90ZXN0Y2FwaQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHZlcmJvc2UsIHJlZmNvdW50X3Rlc3QsIHJ1bl91bml0dGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcF9weXRob25fc3RkZXJyKQorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIG1ha2Vfc2NyaXB0LCB0ZW1wX2RpcgorCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IGdjCkBAIC0zOCw2ICs0MSw3IEBACiAgICAgICAgICMgZ2MgY29sbGVjdHMgaXQuCiAgICAgICAgIHNlbGYud3IgPSB3ZWFrcmVmLnJlZihDMTA1NTgyMCg2NjYpLCBpdF9oYXBwZW5lZCkKIAorQF90ZXN0Y2FwaS53aXRoX3RwX2RlbAogY2xhc3MgVW5jb2xsZWN0YWJsZShvYmplY3QpOgogICAgICIiIkNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZSB3aXRoIG11bHRpcGxlIF9fZGVsX18gbWV0aG9kcy4KIApAQCAtNTAsNyArNTQsNyBAQAogICAgICAgICAgICAgc2VsZi5wYXJ0bmVyID0gVW5jb2xsZWN0YWJsZShwYXJ0bmVyPXNlbGYpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnBhcnRuZXIgPSBwYXJ0bmVyCi0gICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CiAgICAgICAgIHBhc3MKIAogIyMjIFRlc3RzCkBAIC0xMzksMTEgKzE0MywxMiBAQAogICAgICAgICBkZWwgYQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGdjLmNvbGxlY3QoKSwgMCkKIAotICAgIGRlZiB0ZXN0X2ZpbmFsaXplcihzZWxmKToKKyAgICBkZWYgdGVzdF9sZWdhY3lfZmluYWxpemVyKHNlbGYpOgogICAgICAgICAjIEEoKSBpcyB1bmNvbGxlY3RhYmxlIGlmIGl0IGlzIHBhcnQgb2YgYSBjeWNsZSwgbWFrZSBzdXJlIGl0IHNob3dzIHVwCiAgICAgICAgICMgaW4gZ2MuZ2FyYmFnZS4KKyAgICAgICAgQF90ZXN0Y2FwaS53aXRoX3RwX2RlbAogICAgICAgICBjbGFzcyBBOgotICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOiBwYXNzCiAgICAgICAgIGNsYXNzIEI6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBBKCkKQEAgLTE2MywxMSArMTY4LDEyIEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoImRpZG4ndCBmaW5kIG9iaiBpbiBnYXJiYWdlIChmaW5hbGl6ZXIpIikKICAgICAgICAgZ2MuZ2FyYmFnZS5yZW1vdmUob2JqKQogCi0gICAgZGVmIHRlc3RfZmluYWxpemVyX25ld2NsYXNzKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xlZ2FjeV9maW5hbGl6ZXJfbmV3Y2xhc3Moc2VsZik6CiAgICAgICAgICMgQSgpIGlzIHVuY29sbGVjdGFibGUgaWYgaXQgaXMgcGFydCBvZiBhIGN5Y2xlLCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAKICAgICAgICAgIyBpbiBnYy5nYXJiYWdlLgorICAgICAgICBAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCiAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgX190cF9kZWxfXyhzZWxmKTogcGFzcwogICAgICAgICBjbGFzcyBCKG9iamVjdCk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBBKCkKQEAgLTU2OCwxMiArNTc0LDE0IEBACiAgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCiAgICAgICAgIGNvZGUgPSAiIiJpZiAxOgogICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgICAgICBAX3Rlc3RjYXBpLndpdGhfdHBfZGVsCiAgICAgICAgICAgICBjbGFzcyBYOgogICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICI8WCAlJXI+IiAlJSBzZWxmLm5hbWUKLSAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBkZWYgX190cF9kZWxfXyhzZWxmKToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICAgICB4ID0gWCgnZmlyc3QnKQpAQCAtNjEwLDYgKzYxOCw2NiBAQAogICAgICAgICBzdGRlcnIgPSBydW5fY29tbWFuZChjb2RlICUgImdjLkRFQlVHX1NBVkVBTEwiKQogICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIidW5jb2xsZWN0YWJsZSBvYmplY3RzIGF0IHNodXRkb3duIiwgc3RkZXJyKQogCisgICAgZGVmIHRlc3RfZ2NfbWFpbl9tb2R1bGVfYXRfc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgQ3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlIHRocm91Z2ggdGhlIF9fbWFpbl9fIG1vZHVsZSBhbmQgY2hlY2sKKyAgICAgICAgIyBpdCBnZXRzIGNvbGxlY3RlZCBhdCBpbnRlcnByZXRlciBzaHV0ZG93bi4KKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgd2Vha3JlZgorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ19fZGVsX18gY2FsbGVkJykKKyAgICAgICAgICAgIGwgPSBbQygpXQorICAgICAgICAgICAgbC5hcHBlbmQobCkKKyAgICAgICAgICAgICIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGInX19kZWxfXyBjYWxsZWQnKQorCisgICAgZGVmIHRlc3RfZ2Nfb3JkaW5hcnlfbW9kdWxlX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCB3aXRoIGEgbm9uLV9fbWFpbl9fIG1vZHVsZS4KKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2R1bGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgICAgIGltcG9ydCB3ZWFrcmVmCisgICAgICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnX19kZWxfXyBjYWxsZWQnKQorICAgICAgICAgICAgICAgIGwgPSBbQygpXQorICAgICAgICAgICAgICAgIGwuYXBwZW5kKGwpCisgICAgICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsICVyKQorICAgICAgICAgICAgICAgIGltcG9ydCBnY3Rlc3QKKyAgICAgICAgICAgICAgICAiIiIgJSAoc2NyaXB0X2RpciwpCisgICAgICAgICAgICBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCAnZ2N0ZXN0JywgbW9kdWxlKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgYidfX2RlbF9fIGNhbGxlZCcpCisKKyAgICBkZWYgdGVzdF9nZXRfc3RhdHMoc2VsZik6CisgICAgICAgIHN0YXRzID0gZ2MuZ2V0X3N0YXRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RhdHMpLCAzKQorICAgICAgICBmb3Igc3QgaW4gc3RhdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3QsIGRpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiY29sbGVjdGVkIiwgImNvbGxlY3Rpb25zIiwgInVuY29sbGVjdGFibGUifSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0WyJjb2xsZWN0ZWQiXSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0WyJjb2xsZWN0aW9ucyJdLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RbInVuY29sbGVjdGFibGUiXSwgMCkKKyAgICAgICAgIyBDaGVjayB0aGF0IGNvbGxlY3Rpb24gY291bnRzIGFyZSBpbmNyZW1lbnRlZCBjb3JyZWN0bHkKKyAgICAgICAgaWYgZ2MuaXNlbmFibGVkKCk6CisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoZ2MuZW5hYmxlKQorICAgICAgICAgICAgZ2MuZGlzYWJsZSgpCisgICAgICAgIG9sZCA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIGdjLmNvbGxlY3QoMCkKKyAgICAgICAgbmV3ID0gZ2MuZ2V0X3N0YXRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMF1bImNvbGxlY3Rpb25zIl0sIG9sZFswXVsiY29sbGVjdGlvbnMiXSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzFdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMV1bImNvbGxlY3Rpb25zIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzJdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMl1bImNvbGxlY3Rpb25zIl0pCisgICAgICAgIGdjLmNvbGxlY3QoMikKKyAgICAgICAgbmV3ID0gZ2MuZ2V0X3N0YXRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMF1bImNvbGxlY3Rpb25zIl0sIG9sZFswXVsiY29sbGVjdGlvbnMiXSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzFdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMV1bImNvbGxlY3Rpb25zIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzJdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMl1bImNvbGxlY3Rpb25zIl0gKyAxKQorCiAKIGNsYXNzIEdDQ2FsbGJhY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZGIucHkgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQppbmRleCAyODRjOGQ4Li42MjRlM2QzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dkYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQpAQCAtNSw2ICs1LDcgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBwcHJpbnQKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3lzY29uZmlnCkBAIC0xNyw2ICsxOCw3IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgX3RocmVhZCA9IE5vbmUKIAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBmaW5kZmlsZSwgcHl0aG9uX2lzX29wdGltaXplZAogCiB0cnk6CkBAIC0xNjUsNiArMTY3LDcgQEAKICAgICAgICAgICAgICdsaW51eC1nYXRlLnNvJywKICAgICAgICAgICAgICdEbyB5b3UgbmVlZCAic2V0IHNvbGliLXNlYXJjaC1wYXRoIiBvciAnCiAgICAgICAgICAgICAnInNldCBzeXNyb290Ij8nLAorICAgICAgICAgICAgJ3dhcm5pbmc6IFNvdXJjZSBmaWxlIGlzIG1vcmUgcmVjZW50IHRoYW4gZXhlY3V0YWJsZS4nLAogICAgICAgICAgICAgKQogICAgICAgICBmb3IgbGluZSBpbiBlcnJsaW5lczoKICAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoaWdub3JlX3BhdHRlcm5zKToKQEAgLTMwNyw2ICszMTAsOCBAQAogCiAgICAgZGVmIHRlc3Rfc2V0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHNldHMnCisgICAgICAgIGlmIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24pIDwgKDcsIDMpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicHJldHR5LXByaW50aW5nIG9mIHNldHMgbmVlZHMgZ2RiIDcuMyBvciBsYXRlciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldChbJ2EnLCAnYiddKSwgInsnYScsICdiJ30iKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KFs0LCA1LCA2XSksICJ7NCwgNSwgNn0iKQpAQCAtMzIwLDYgKzMyNSw4IEBACiAKICAgICBkZWYgdGVzdF9mcm96ZW5zZXRzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZnJvemVuc2V0cycKKyAgICAgICAgaWYgKGdkYl9tYWpvcl92ZXJzaW9uLCBnZGJfbWlub3JfdmVyc2lvbikgPCAoNywgMyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJwcmV0dHktcHJpbnRpbmcgb2YgZnJvemVuc2V0cyBuZWVkcyBnZGIgNy4zIG9yIGxhdGVyIikKICAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldCgpKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KFsnYScsICdiJ10pLCAiZnJvemVuc2V0KHsnYScsICdiJ30pIikKICAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldChbNCwgNSwgNl0pLCAiZnJvemVuc2V0KHs0LCA1LCA2fSkiKQpAQCAtODM3LDYgKzg0NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciIuKlxuYSA9IDFcbmIgPSAyXG5jID0gM1xuLioiKQogCiBkZWYgdGVzdF9tYWluKCk6CisgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICBwcmludCgiR0RCIHZlcnNpb246IikKKyAgICAgICAgZm9yIGxpbmUgaW4gb3MuZnNkZWNvZGUoZ2RiX3ZlcnNpb24pLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHByaW50KCIgIiAqIDQgKyBsaW5lKQogICAgIHJ1bl91bml0dGVzdChQcmV0dHlQcmludFRlc3RzLAogICAgICAgICAgICAgICAgICBQeUxpc3RUZXN0cywKICAgICAgICAgICAgICAgICAgU3RhY2tOYXZpZ2F0aW9uVGVzdHMsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkgYi9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKaW5kZXggOTU4MDU0YS4uNGU5MjExNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQpAQCAtMSwzICsxLDU1IEBACitpbXBvcnQgZ2MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKKworY2xhc3MgRmluYWxpemF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mcmFtZV9yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgICMgQSBnZW5lcmF0b3IgZnJhbWUgY2FuIGJlIHJlc3VycmVjdGVkIGJ5IGEgZ2VuZXJhdG9yJ3MgZmluYWxpemF0aW9uLgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICBub25sb2NhbCBmcmFtZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZykKKyAgICAgICAgbmV4dChnKQorICAgICAgICBkZWwgZworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcmFtZSkKKyAgICAgICAgZGVsIGZyYW1lCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBBIGdlbmVyYXRvciBjYXVnaHQgaW4gYSByZWZjeWNsZSBnZXRzIGZpbmFsaXplZCBhbnl3YXkuCisgICAgICAgIG9sZF9nYXJiYWdlID0gZ2MuZ2FyYmFnZVs6XQorICAgICAgICBmaW5hbGl6ZWQgPSBGYWxzZQorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICBub25sb2NhbCBmaW5hbGl6ZWQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBnID0geWllbGQKKyAgICAgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZpbmFsaXplZCA9IFRydWUKKworICAgICAgICBnID0gZ2VuKCkKKyAgICAgICAgbmV4dChnKQorICAgICAgICBnLnNlbmQoZykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHN5cy5nZXRyZWZjb3VudChnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5hbGl6ZWQpCisgICAgICAgIGRlbCBnCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5hbGl6ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuZ2FyYmFnZSwgb2xkX2dhcmJhZ2UpCisKKwogdHV0b3JpYWxfdGVzdHMgPSAiIiIKIExldCdzIHRyeSBhIHNpbXBsZSBnZW5lcmF0b3I6CiAKQEAgLTE3MjksOSArMTc4MSw3IEBACiA+Pj4gZyA9IGYoKQogPj4+IG5leHQoZykKID4+PiBkZWwgZwotPj4+IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdGFydHN3aXRoKAotLi4uICAgICAiRXhjZXB0aW9uIFJ1bnRpbWVFcnJvcjogJ2dlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQnIGluICIKLS4uLiApCis+Pj4gIlJ1bnRpbWVFcnJvcjogZ2VuZXJhdG9yIGlnbm9yZWQgR2VuZXJhdG9yRXhpdCIgaW4gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpCiBUcnVlCiA+Pj4gc3lzLnN0ZGVyciA9IG9sZAogCkBAIC0xODQxLDIyICsxODkxLDIzIEBACiAuLi4gICAgIHN5cy5zdGRlcnIgPSBpby5TdHJpbmdJTygpCiAuLi4gICAgIGNsYXNzIExlYWtlcjoKIC4uLiAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotLi4uICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorLi4uICAgICAgICAgICAgIGRlZiBpbnZva2UobWVzc2FnZSk6CisuLi4gICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtZXNzYWdlKQorLi4uICAgICAgICAgICAgIGludm9rZSgidGVzdCIpCiAuLi4KIC4uLiAgICAgbCA9IExlYWtlcigpCiAuLi4gICAgIGRlbCBsCiAuLi4gICAgIGVyciA9IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCi0uLi4gICAgIGVyci5zdGFydHN3aXRoKAotLi4uICAgICAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6IFJ1bnRpbWVFcnJvcigpIGluIDwiCi0uLi4gICAgICkKLS4uLiAgICAgZXJyLmVuZHN3aXRoKCI+IGlnbm9yZWQiKQotLi4uICAgICBsZW4oZXJyLnNwbGl0bGluZXMoKSkKKy4uLiAgICAgIkV4Y2VwdGlvbiBpZ25vcmVkIGluIiBpbiBlcnIKKy4uLiAgICAgIlJ1bnRpbWVFcnJvcjogdGVzdCIgaW4gZXJyCisuLi4gICAgICJUcmFjZWJhY2siIGluIGVycgorLi4uICAgICAiaW4gaW52b2tlIiBpbiBlcnIKIC4uLiBmaW5hbGx5OgogLi4uICAgICBzeXMuc3RkZXJyID0gb2xkCiBUcnVlCiBUcnVlCi0xCi0KK1RydWUKK1RydWUKIAogCiBUaGVzZSByZWZsZWFrIHRlc3RzIHNob3VsZCBwZXJoYXBzIGJlIGluIGEgdGVzdGZpbGUgb2YgdGhlaXIgb3duLApAQCAtMTg4MSw2ICsxOTMyLDcgQEAKICMgc28gdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBpbiBib3RoIHdheXMgb2YgcnVubmluZyByZWdydGVzdC4KIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHRlc3RfZ2VuZXJhdG9ycworICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9nZW5lcmF0b3JzLCB2ZXJib3NlKQogCiAjIFRoaXMgcGFydCBpc24ndCBuZWVkZWQgZm9yIHJlZ3J0ZXN0LCBidXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3QgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQppbmRleCBmZDhiYzU3Li5lOTY3ODk3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKQEAgLTE4OCwxMiArMTg4LDkzIEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoc3VwcG9ydC5URVNURk4pCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jcmVhdGVfZmlsZShmaWxlbmFtZSk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYidmb28nKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUodGVzdF9mbiwgdGVzdF9mbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuKQorCisgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluaworICAgIGRlZiB0ZXN0X3NhbWVmaWxlX29uX3N5bWxpbmsoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2FtZWZpbGVfb25fbGlua19mdW5jKG9zLnN5bWxpbmspCisKKyAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhvcy5saW5rKQorCisgICAgZGVmIF90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhzZWxmLCBmdW5jKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCisKKyAgICAgICAgICAgIGZ1bmModGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjEpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCisKKyAgICBkZWYgdGVzdF9zYW1lc3RhdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQorICAgICAgICAgICAgdGVzdF9mbnMgPSBbdGVzdF9mbl0qMgorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbikKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9zYW1lc3RhdF9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVzdGF0X29uX2xpbmtfZnVuYyhvcy5zeW1saW5rKQorCisgICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMob3MubGluaykKKworICAgIGRlZiBfdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQorICAgICAgICAgICAgdGVzdF9mbnMgPSAodGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgZnVuYygqdGVzdF9mbnMpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZXN0YXQoKnN0YXRzKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4xKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgZGVmIHRlc3Rfc2FtZW9wZW5maWxlKHNlbGYpOgorICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgIHdpdGggb3BlbihmbmFtZSwgIndiIikgYXMgYSwgb3BlbihmbmFtZSwgIndiIikgYXMgYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZW9wZW5maWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmZpbGVubygpLCBiLmZpbGVubygpKSkKKwogY2xhc3MgVGVzdEdlbmVyaWNUZXN0KEdlbmVyaWNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBJc3N1ZSAxNjg1MjogR2VuZXJpY1Rlc3QgY2FuJ3QgaW5oZXJpdCBmcm9tIHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgIyBmb3IgdGVzdCBkaXNjb3ZlcnkgcHVycG9zZXM7IENvbW1vblRlc3QgaW5oZXJpdHMgZnJvbSBHZW5lcmljVGVzdAogICAgICMgYW5kIGlzIG9ubHkgbWVhbnQgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVycy4KICAgICBwYXRobW9kdWxlID0gZ2VuZXJpY3BhdGgKIAorCiAjIEZvbGxvd2luZyBUZXN0Q2FzZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcnVuIGZyb20gdGVzdF9nZW5lcmljcGF0aC4KICMgSXQgaXMgaW5oZXJpdGVkIGJ5IG90aGVyIHRlc3QgbW9kdWxlcyAobWFjcGF0aCwgbnRwYXRoLCBwb3NpeHBhdGgpLgogCkBAIC0zMjIsNyArNDAzLDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5lZWQgc3VwcG9ydC5URVNURk5fTk9OQVNDSUkiKQogCi0gICAgICAgICMgVGVzdCBub24tQVNDSUksIG5vbi1VVEY4IGJ5dGVzIGluIHRoZSBwYXRoLgogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkgYi9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CmluZGV4IDQ4Y2E5NGUuLmJlZWE3NmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQpAQCAtMSwzOCArMSw0MCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2tleXdvcmRzLCBnZXRhcmdzX2tleXdvcmRfb25seQordHJ5OgorICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wsIGdldGFyZ3NfSworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldGFyZ3NfTCA9IE5vbmUgIyBQWV9MT05HX0xPTkcgbm90IGF2YWlsYWJsZQogCi0iIiIKLT4gSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgY291bnRlcnByb3Bvc2FsLiBUaGlzIGFsc28gY2hhbmdlcyBzb21lIG9mCi0+IHRoZSBvdGhlciBmb3JtYXQgY29kZXMgdG8gYmUgYSBsaXR0bGUgbW9yZSByZWd1bGFyLgotPgotPiBDb2RlIEMgdHlwZSBSYW5nZSBjaGVjawotPgotPiBiIHVuc2lnbmVkIGNoYXIgMC4uVUNIQVJfTUFYCi0+IGggc2lnbmVkIHNob3J0IFNIUlRfTUlOLi5TSFJUX01BWAotPiBCIHVuc2lnbmVkIGNoYXIgbm9uZSAqKgotPiBIIHVuc2lnbmVkIHNob3J0IG5vbmUgKioKLT4gayAqIHVuc2lnbmVkIGxvbmcgbm9uZQotPiBJICogdW5zaWduZWQgaW50IDAuLlVJTlRfTUFYCi0KLQotPiBpIGludCBJTlRfTUlOLi5JTlRfTUFYCi0+IGwgbG9uZyBMT05HX01JTi4uTE9OR19NQVgKLQotPiBLICogdW5zaWduZWQgbG9uZyBsb25nIG5vbmUKLT4gTCBsb25nIGxvbmcgTExPTkdfTUlOLi5MTE9OR19NQVgKLQotPiBOb3RlczoKLT4KLT4gKiBOZXcgZm9ybWF0IGNvZGVzLgotPgotPiAqKiBDaGFuZ2VkIGZyb20gcHJldmlvdXMgInJhbmdlLWFuZC1hLWhhbGYiIHRvICJub25lIjsgdGhlCi0+IHJhbmdlLWFuZC1hLWhhbGYgY2hlY2tpbmcgd2Fzbid0IHBhcnRpY3VsYXJseSB1c2VmdWwuCi0KLVBsdXMgYSBDIEFQSSBvciB0d28sIGUuZy4gUHlJbnRfQXNMb25nTWFzaygpIC0+Ci11bnNpZ25lZCBsb25nIGFuZCBQeUludF9Bc0xvbmdMb25nTWFzaygpIC0+IHVuc2lnbmVkCi1sb25nIGxvbmcgKGlmIHRoYXQgZXhpc3RzKS4KLSIiIgorIyA+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvdW50ZXJwcm9wb3NhbC4gVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZgorIyA+IHRoZSBvdGhlciBmb3JtYXQgY29kZXMgdG8gYmUgYSBsaXR0bGUgbW9yZSByZWd1bGFyLgorIyA+CisjID4gQ29kZSBDIHR5cGUgUmFuZ2UgY2hlY2sKKyMgPgorIyA+IGIgdW5zaWduZWQgY2hhciAwLi5VQ0hBUl9NQVgKKyMgPiBoIHNpZ25lZCBzaG9ydCBTSFJUX01JTi4uU0hSVF9NQVgKKyMgPiBCIHVuc2lnbmVkIGNoYXIgbm9uZSAqKgorIyA+IEggdW5zaWduZWQgc2hvcnQgbm9uZSAqKgorIyA+IGsgKiB1bnNpZ25lZCBsb25nIG5vbmUKKyMgPiBJICogdW5zaWduZWQgaW50IDAuLlVJTlRfTUFYCisjCisjCisjID4gaSBpbnQgSU5UX01JTi4uSU5UX01BWAorIyA+IGwgbG9uZyBMT05HX01JTi4uTE9OR19NQVgKKyMKKyMgPiBLICogdW5zaWduZWQgbG9uZyBsb25nIG5vbmUKKyMgPiBMIGxvbmcgbG9uZyBMTE9OR19NSU4uLkxMT05HX01BWAorIworIyA+IE5vdGVzOgorIyA+CisjID4gKiBOZXcgZm9ybWF0IGNvZGVzLgorIyA+CisjID4gKiogQ2hhbmdlZCBmcm9tIHByZXZpb3VzICJyYW5nZS1hbmQtYS1oYWxmIiB0byAibm9uZSI7IHRoZQorIyA+IHJhbmdlLWFuZC1hLWhhbGYgY2hlY2tpbmcgd2Fzbid0IHBhcnRpY3VsYXJseSB1c2VmdWwuCisjCisjIFBsdXMgYSBDIEFQSSBvciB0d28sIGUuZy4gUHlJbnRfQXNMb25nTWFzaygpIC0+CisjIHVuc2lnbmVkIGxvbmcgYW5kIFB5SW50X0FzTG9uZ0xvbmdNYXNrKCkgLT4gdW5zaWduZWQKKyMgbG9uZyBsb25nIChpZiB0aGF0IGV4aXN0cykuCiAKIExBUkdFID0gMHg3RkZGRkZGRgogVkVSWV9MQVJHRSA9IDB4RkYwMDAwMTIxMjEyMTIxMjEyMTIxMjQyCkBAIC0xODQsNiArMTg2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19uLCBWRVJZX0xBUkdFKQogCiAKK0B1bml0dGVzdC5za2lwSWYoZ2V0YXJnc19MIGlzIE5vbmUsICdQWV9MT05HX0xPTkcgaXMgbm90IGF2YWlsYWJsZScpCiBjbGFzcyBMb25nTG9uZ19UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfTChzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfTApAQCAtNTM2LDI0ICs1MzksNSBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZXRhcmdzX1pfaGFzaChOb25lKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbCi0gICAgICAgIFNpZ25lZF9UZXN0Q2FzZSwKLSAgICAgICAgVW5zaWduZWRfVGVzdENhc2UsCi0gICAgICAgIEJvb2xlYW5fVGVzdENhc2UsCi0gICAgICAgIFR1cGxlX1Rlc3RDYXNlLAotICAgICAgICBLZXl3b3Jkc19UZXN0Q2FzZSwKLSAgICAgICAgS2V5d29yZE9ubHlfVGVzdENhc2UsCi0gICAgICAgIEJ5dGVzX1Rlc3RDYXNlLAotICAgICAgICBVbmljb2RlX1Rlc3RDYXNlLAotICAgIF0KLSAgICB0cnk6Ci0gICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wsIGdldGFyZ3NfSwotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcyAjIFBZX0xPTkdfTE9ORyBub3QgYXZhaWxhYmxlCi0gICAgZWxzZToKLSAgICAgICAgdGVzdHMuYXBwZW5kKExvbmdMb25nX1Rlc3RDYXNlKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZXRwYXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRwYXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzFiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2dldHBhc3MucHkKQEAgLTAsMCArMSwxNTUgQEAKK2ltcG9ydCBnZXRwYXNzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8KK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCit0cnk6CisgICAgaW1wb3J0IHRlcm1pb3MKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0ZXJtaW9zID0gTm9uZQordHJ5OgorICAgIGltcG9ydCBwd2QKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwd2QgPSBOb25lCisKK0Btb2NrLnBhdGNoKCdvcy5lbnZpcm9uJykKK2NsYXNzIEdldHBhc3NHZXR1c2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91c2VybmFtZV90YWtlc191c2VybmFtZV9mcm9tX2VudihzZWxmLCBlbnZpcm9uKToKKyAgICAgICAgZXhwZWN0ZWRfbmFtZSA9ICdzb21lX25hbWUnCisgICAgICAgIGVudmlyb24uZ2V0LnJldHVybl92YWx1ZSA9IGV4cGVjdGVkX25hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9uYW1lLCBnZXRwYXNzLmdldHVzZXIoKSkKKworICAgIGRlZiB0ZXN0X3VzZXJuYW1lX3ByaW9yaXRpZXNfb2ZfZW52X3ZhbHVlcyhzZWxmLCBlbnZpcm9uKToKKyAgICAgICAgZW52aXJvbi5nZXQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBnZXRwYXNzLmdldHVzZXIoKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6ICMgaW4gY2FzZSB0aGVyZSdzIG5vIHB3ZCBtb2R1bGUKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGVudmlyb24uZ2V0LmNhbGxfYXJnc19saXN0LAorICAgICAgICAgICAgW21vY2suY2FsbCh4KSBmb3IgeCBpbiAoJ0xPR05BTUUnLCAnVVNFUicsICdMTkFNRScsICdVU0VSTkFNRScpXSkKKworICAgIGRlZiB0ZXN0X3VzZXJuYW1lX2ZhbGxzX2JhY2tfdG9fcHdkKHNlbGYsIGVudmlyb24pOgorICAgICAgICBleHBlY3RlZF9uYW1lID0gJ3NvbWVfbmFtZScKKyAgICAgICAgZW52aXJvbi5nZXQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICBpZiBwd2Q6CisgICAgICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmdldHVpZCcpIGFzIHVpZCwgXAorICAgICAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdwd2QuZ2V0cHd1aWQnKSBhcyBnZXRwdzoKKyAgICAgICAgICAgICAgICB1aWQucmV0dXJuX3ZhbHVlID0gNDIKKyAgICAgICAgICAgICAgICBnZXRwdy5yZXR1cm5fdmFsdWUgPSBbZXhwZWN0ZWRfbmFtZV0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRwYXNzLmdldHVzZXIoKSkKKyAgICAgICAgICAgICAgICBnZXRwdy5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0MikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBnZXRwYXNzLmdldHVzZXIpCisKKworY2xhc3MgR2V0cGFzc1Jhd2lucHV0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mbHVzaGVzX3N0cmVhbV9hZnRlcl9wcm9tcHQoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlIDE3MDMKKyAgICAgICAgc3RyZWFtID0gbW9jay5Nb2NrKHNwZWM9U3RyaW5nSU8pCisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oJ2lucHV0X3N0cmluZycpCisgICAgICAgIGdldHBhc3MuX3Jhd19pbnB1dCgnc29tZV9wcm9tcHQnLCBzdHJlYW0sIGlucHV0PWlucHV0KQorICAgICAgICBzdHJlYW0uZmx1c2guYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQorCisgICAgZGVmIHRlc3RfdXNlc19zdGRlcnJfYXNfZGVmYXVsdChzZWxmKToKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygnaW5wdXRfc3RyaW5nJykKKyAgICAgICAgcHJvbXB0ID0gJ3NvbWVfcHJvbXB0JworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3N5cy5zdGRlcnInKSBhcyBzdGRlcnI6CisgICAgICAgICAgICBnZXRwYXNzLl9yYXdfaW5wdXQocHJvbXB0LCBpbnB1dD1pbnB1dCkKKyAgICAgICAgICAgIHN0ZGVyci53cml0ZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChwcm9tcHQpCisKKyAgICBAbW9jay5wYXRjaCgnc3lzLnN0ZGluJykKKyAgICBkZWYgdGVzdF91c2VzX3N0ZGluX2FzX2RlZmF1bHRfaW5wdXQoc2VsZiwgbW9ja19pbnB1dCk6CisgICAgICAgIG1vY2tfaW5wdXQucmVhZGxpbmUucmV0dXJuX3ZhbHVlID0gJ2lucHV0X3N0cmluZycKKyAgICAgICAgZ2V0cGFzcy5fcmF3X2lucHV0KHN0cmVhbT1TdHJpbmdJTygpKQorICAgICAgICBtb2NrX2lucHV0LnJlYWRsaW5lLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworICAgIGRlZiB0ZXN0X3JhaXNlc19vbl9lbXB0eV9pbnB1dChzZWxmKToKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGdldHBhc3MuX3Jhd19pbnB1dCwgaW5wdXQ9aW5wdXQpCisKKyAgICBkZWYgdGVzdF90cmltc190cmFpbGluZ19uZXdsaW5lKHNlbGYpOgorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCd0ZXN0XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0JywgZ2V0cGFzcy5fcmF3X2lucHV0KGlucHV0PWlucHV0KSkKKworCisjIFNvbWUgb2YgdGhlc2UgdGVzdHMgYXJlIGEgYml0IHdoaXRlLWJveC4gIFRoZSBmdW5jdGlvbmFsIHJlcXVpcmVtZW50IGlzIHRoYXQKKyMgdGhlIHBhc3N3b3JkIGlucHV0IGJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIHR0eSwgYW5kIHRoYXQgaXQgbm90IGJlIGVjaG9lZAorIyBvbiB0aGUgc2NyZWVuLCB1bmxlc3Mgd2UgYXJlIGZhbGxpbmcgYmFjayB0byBzdGRlcnIvc3RkaW4uCisKKyMgU29tZSBvZiB0aGVzZSBtaWdodCBydW4gb24gcGxhdGZvcm1zIHdpdGhvdXQgdGVybWlvcywgYnV0IHBsYXkgaXQgc2FmZS4KK0B1bml0dGVzdC5za2lwVW5sZXNzKHRlcm1pb3MsICd0ZXN0cyByZXF1aXJlIHN5c3RlbSB3aXRoIHRlcm1pb3MnKQorY2xhc3MgVW5peEdldHBhc3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VzZXNfdHR5X2RpcmVjdGx5KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ29zLm9wZW4nKSBhcyBvcGVuLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnaW8uRmlsZUlPJykgYXMgZmlsZWlvLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnaW8uVGV4dElPV3JhcHBlcicpIGFzIHRleHRpbzoKKyAgICAgICAgICAgICMgQnkgc2V0dGluZyBvcGVuJ3MgcmV0dXJuIHZhbHVlIHRvIE5vbmUgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwKKyAgICAgICAgICAgICMgc2tpcCBjb2RlIHdlIGRvbid0IGNhcmUgYWJvdXQgaW4gdGhpcyB0ZXN0LiAgV2UgY2FuIG1vY2sgdGhpcyBvdXQKKyAgICAgICAgICAgICMgZnVsbHkgaWYgYW4gYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIHdvcmtzIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgb3Blbi5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICBnZXRwYXNzLnVuaXhfZ2V0cGFzcygpCisgICAgICAgICAgICBvcGVuLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCcvZGV2L3R0eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fUkRXUiB8IG9zLk9fTk9DVFRZKQorICAgICAgICAgICAgZmlsZWlvLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKG9wZW4ucmV0dXJuX3ZhbHVlLCAndysnKQorICAgICAgICAgICAgdGV4dGlvLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZpbGVpby5yZXR1cm5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9yZXNldHNfdGVybWlvcyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLkZpbGVJTycpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnaW8uVGV4dElPV3JhcHBlcicpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y2dldGF0dHInKSBhcyB0Y2dldGF0dHIsIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCd0ZXJtaW9zLnRjc2V0YXR0cicpIGFzIHRjc2V0YXR0cjoKKyAgICAgICAgICAgIG9wZW4ucmV0dXJuX3ZhbHVlID0gMworICAgICAgICAgICAgZmFrZV9hdHRycyA9IFsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NV0KKyAgICAgICAgICAgIHRjZ2V0YXR0ci5yZXR1cm5fdmFsdWUgPSBsaXN0KGZha2VfYXR0cnMpCisgICAgICAgICAgICBnZXRwYXNzLnVuaXhfZ2V0cGFzcygpCisgICAgICAgICAgICB0Y3NldGF0dHIuYXNzZXJ0X2NhbGxlZF93aXRoKDMsIG1vY2suQU5ZLCBmYWtlX2F0dHJzKQorCisgICAgZGVmIHRlc3RfZmFsbHNfYmFja190b19mYWxsYmFja19pZl90ZXJtaW9zX3JhaXNlcyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLkZpbGVJTycpIGFzIGZpbGVpbywgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLlRleHRJT1dyYXBwZXInKSBhcyB0ZXh0aW8sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCd0ZXJtaW9zLnRjZ2V0YXR0cicpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y3NldGF0dHInKSBhcyB0Y3NldGF0dHIsIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdnZXRwYXNzLmZhbGxiYWNrX2dldHBhc3MnKSBhcyBmYWxsYmFjazoKKyAgICAgICAgICAgIG9wZW4ucmV0dXJuX3ZhbHVlID0gMworICAgICAgICAgICAgZmlsZWlvLnJldHVybl92YWx1ZSA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgdGNzZXRhdHRyLnNpZGVfZWZmZWN0ID0gdGVybWlvcy5lcnJvcgorICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3MoKQorICAgICAgICAgICAgZmFsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ1Bhc3N3b3JkOiAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGlvLnJldHVybl92YWx1ZSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoZXNfc3RyZWFtX2FmdGVyX2lucHV0KHNlbGYpOgorICAgICAgICAjIGlzc3VlIDcyMDgKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLkZpbGVJTycpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnaW8uVGV4dElPV3JhcHBlcicpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y2dldGF0dHInKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3Rlcm1pb3MudGNzZXRhdHRyJyk6CisgICAgICAgICAgICBvcGVuLnJldHVybl92YWx1ZSA9IDMKKyAgICAgICAgICAgIG1vY2tfc3RyZWFtID0gbW9jay5Nb2NrKHNwZWM9U3RyaW5nSU8pCisgICAgICAgICAgICBnZXRwYXNzLnVuaXhfZ2V0cGFzcyhzdHJlYW09bW9ja19zdHJlYW0pCisgICAgICAgICAgICBtb2NrX3N0cmVhbS5mbHVzaC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgZGVmIHRlc3RfZmFsbHNfYmFja190b19zdGRpbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3Nfb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3N5cy5zdGRpbicsIHNwZWM9U3RyaW5nSU8pIGFzIHN0ZGluOgorICAgICAgICAgICAgb3Nfb3Blbi5zaWRlX2VmZmVjdCA9IElPRXJyb3IKKyAgICAgICAgICAgIHN0ZGluLmZpbGVuby5zaWRlX2VmZmVjdCA9IEF0dHJpYnV0ZUVycm9yCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhnZXRwYXNzLkdldFBhc3NXYXJuaW5nKToKKyAgICAgICAgICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3MoKQorICAgICAgICAgICAgc3RkaW4ucmVhZGxpbmUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignV2FybmluZycsIHN0ZGVyci5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUGFzc3dvcmQ6Jywgc3RkZXJyLmdldHZhbHVlKCkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weSBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDVlYWM5MjEuLmFlYWZjNjUKLS0tIGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpAQCAtMTMxLDYgKzEzMSwxNCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCB6dHh0OiBicmVhawogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBiJ2EnKjIwMSkKIAorICAgIGRlZiB0ZXN0X2V4Y2x1c2l2ZV93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGExICogNTApCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YTEgKiA1MCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAneGInKQorCiAgICAgZGVmIHRlc3RfYnVmZmVyZWRfcmVhZGVyKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3NDcxOiBhIEd6aXBGaWxlIGNhbiBiZSB3cmFwcGVkIGluIGEgQnVmZmVyZWRSZWFkZXIgZm9yCiAgICAgICAgICMgcGVyZm9ybWFuY2UuCkBAIC0yMDYsNiArMjE0LDkgQEAKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3JiJykKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4JykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3hiJykKIAogICAgIGRlZiB0ZXN0XzE2NDc0ODQoc2VsZik6CiAgICAgICAgIGZvciBtb2RlIGluICgnd2InLCAncmInKToKQEAgLTM4OSw2ICs0MDAsMjAgQEAKICAgICAgICAgICAgIGRhdGFjID0gZ3ppcC5jb21wcmVzcyhkYXRhKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnemlwLmRlY29tcHJlc3MoZGF0YWMpLCBkYXRhKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBkYXRhMSo1MAorICAgICAgICAjIERyb3AgdGhlIENSQyAoNCBieXRlcykgYW5kIGZpbGUgc2l6ZSAoNCBieXRlcykuCisgICAgICAgIHRydW5jYXRlZCA9IGd6aXAuY29tcHJlc3MoZGF0YSlbOi04XQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oZGF0YSkpLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKyAgICAgICAgIyBJbmNvbXBsZXRlIDEwLWJ5dGUgaGVhZGVyLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCAxMCk6CisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKICAgICBkZWYgdGVzdF9yZWFkX3dpdGhfZXh0cmEoc2VsZik6CiAgICAgICAgICMgR3ppcCBkYXRhIHdpdGggYW4gZXh0cmEgZmllbGQKICAgICAgICAgZ3pkYXRhID0gKGInXHgxZlx4OGJceDA4XHgwNFx4YjJceDE3Y1FceDAyXHhmZicKQEAgLTQwMCwzNSArNDI1LDU5IEBACiBjbGFzcyBUZXN0T3BlbihCYXNlVGVzdCk6CiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMSAqIDUwCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHVuY29tcHJlc3NlZCkKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCAqIDIpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KICAgICAgICAgdW5jb21wcmVzc2VkID0gZGF0YTEgKiA1MAorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQgKiAyKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieCIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMS5kZWNvZGUoImFzY2lpIikgKiA1MAogICAgICAgICB1bmNvbXByZXNzZWRfcmF3ID0gdW5jb21wcmVzc2VkLnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKQEAgLTQ2Myw2ICs1MTIsOCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CmluZGV4IGYzMzg1ZjYuLjRhNWVhN2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKQEAgLTE4LDExICsxOCwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdCwgaW1wb3J0X2ZyZXNoX21vZHVsZQogCiAjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPwogQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKIAorY19oYXNobGliID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnaGFzaGxpYicsIGZyZXNoPVsnX2hhc2hsaWInXSkKK3B5X2hhc2hsaWIgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdoYXNobGliJywgYmxvY2tlZD1bJ19oYXNobGliJ10pCiAKIGRlZiBoZXhzdHIocyk6CiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgYnl0ZXMpLCByZXByKHMpCkBAIC0zNiw3ICszOCwxMCBAQAogY2xhc3MgSGFzaExpYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzdXBwb3J0ZWRfaGFzaF9uYW1lcyA9ICggJ21kNScsICdNRDUnLCAnc2hhMScsICdTSEExJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTIyNCcsICdTSEEyMjQnLCAnc2hhMjU2JywgJ1NIQTI1NicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzODQnLCAnU0hBMzg0JywgJ3NoYTUxMicsICdTSEE1MTInICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTM4NCcsICdTSEEzODQnLCAnc2hhNTEyJywgJ1NIQTUxMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzXzIyNCcsICdzaGEzXzI1NicsICdzaGEzXzM4NCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzXzUxMicsICdTSEEzXzIyNCcsICdTSEEzXzI1NicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTSEEzXzM4NCcsICdTSEEzXzUxMicgKQogCiAgICAgIyBJc3N1ZSAjMTQ2OTM6IGZhbGxiYWNrIG1vZHVsZXMgYXJlIGFsd2F5cyBjb21waWxlZCB1bmRlciBQT1NJWAogICAgIF93YXJuX29uX2V4dGVuc2lvbl9pbXBvcnQgPSBvcy5uYW1lID09ICdwb3NpeCcgb3IgQ09NUElMRURfV0lUSF9QWURFQlVHCkBAIC03MiwyNyArNzcsMzcgQEAKICAgICAgICAgaWYgX2hhc2hsaWI6CiAgICAgICAgICAgICAjIFRoZXNlIHR3byBhbGdvcml0aG1zIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCB3aGVuIHRoaXMgbW9kdWxlCiAgICAgICAgICAgICAjIGlzIGNvbXBpbGVkLiAgSWYgbm90LCBzb21ldGhpbmcgd2FzIGNvbXBpbGVkIHdyb25nLgotICAgICAgICAgICAgYXNzZXJ0IGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX21kNScpCi0gICAgICAgICAgICBhc3NlcnQgaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfc2hhMScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfbWQ1JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfc2hhMScpKQogICAgICAgICAgICAgZm9yIGFsZ29yaXRobSwgY29uc3RydWN0b3JzIGluIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3QuaXRlbXMoKToKICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGdldGF0dHIoX2hhc2hsaWIsICdvcGVuc3NsXycrYWxnb3JpdGhtLCBOb25lKQogICAgICAgICAgICAgICAgIGlmIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcnMuYWRkKGNvbnN0cnVjdG9yKQogCisgICAgICAgIGRlZiBhZGRfYnVpbHRpbl9jb25zdHJ1Y3RvcihuYW1lKToKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gZ2V0YXR0cihoYXNobGliLCAiX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciIpKG5hbWUpCisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W25hbWVdLmFkZChjb25zdHJ1Y3RvcikKKwogICAgICAgICBfbWQ1ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX21kNScpCiAgICAgICAgIGlmIF9tZDU6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydtZDUnXS5hZGQoX21kNS5tZDUpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3RvcignbWQ1JykKICAgICAgICAgX3NoYTEgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhMScpCiAgICAgICAgIGlmIF9zaGExOgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMSddLmFkZChfc2hhMS5zaGExKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTEnKQogICAgICAgICBfc2hhMjU2ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTI1NicpCiAgICAgICAgIGlmIF9zaGEyNTY6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyMjQnXS5hZGQoX3NoYTI1Ni5zaGEyMjQpCi0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyNTYnXS5hZGQoX3NoYTI1Ni5zaGEyNTYpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMjI0JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEyNTYnKQogICAgICAgICBfc2hhNTEyID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTUxMicpCiAgICAgICAgIGlmIF9zaGE1MTI6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEzODQnXS5hZGQoX3NoYTUxMi5zaGEzODQpCi0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGE1MTInXS5hZGQoX3NoYTUxMi5zaGE1MTIpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMzg0JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGE1MTInKQorICAgICAgICBfc2hhMyA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGEzJykKKyAgICAgICAgaWYgX3NoYTM6CisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhM18yMjQnKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTNfMjU2JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEzXzM4NCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhM181MTInKQogCiAgICAgICAgIHN1cGVyKEhhc2hMaWJUZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0xMjEsOCArMTM2LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaGxpYi5uZXcsIDEpCiAKICAgICBkZWYgdGVzdF9nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IgPSBoYXNobGliLl9fZGljdF9fWwotICAgICAgICAgICAgICAgICdfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yJ10KKyAgICAgICAgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IgPSBnZXRhdHRyKGhhc2hsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcicpCisgICAgICAgIGJ1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUgPSBnZXRhdHRyKGhhc2hsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgJ3Rlc3QnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgX21kNQpAQCAtMTMwLDYgKzE0Nyw4IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgVGhpcyBmb3JjZXMgYW4gSW1wb3J0RXJyb3IgZm9yICJpbXBvcnQgX21kNSIgc3RhdGVtZW50cwogICAgICAgICBzeXMubW9kdWxlc1snX21kNSddID0gTm9uZQorICAgICAgICAjIGNsZWFyIHRoZSBjYWNoZQorICAgICAgICBidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlLmNsZWFyKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsICdtZDUnKQogICAgICAgICBmaW5hbGx5OgpAQCAtMTM4LDEzICsxNTcsMjMgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfbWQ1J10KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgMykKKyAgICAgICAgY29uc3RydWN0b3IgPSBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcignbWQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25zdHJ1Y3RvciwgX21kNS5tZDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGJ1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUpLCBbJ01ENScsICdtZDUnXSkKIAogICAgIGRlZiB0ZXN0X2hleGRpZ2VzdChzZWxmKToKICAgICAgICAgZm9yIGNvbnMgaW4gc2VsZi5oYXNoX2NvbnN0cnVjdG9yczoKICAgICAgICAgICAgIGggPSBjb25zKCkKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGguZGlnZXN0KCksIGJ5dGVzKSwgbmFtZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGguZGlnZXN0KCksIGJ5dGVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXhzdHIoaC5kaWdlc3QoKSksIGguaGV4ZGlnZXN0KCkpCiAKKyAgICBkZWYgdGVzdF9uYW1lX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgZm9yIGNvbnMgaW4gc2VsZi5oYXNoX2NvbnN0cnVjdG9yczoKKyAgICAgICAgICAgIGggPSBjb25zKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLm5hbWUsIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaC5uYW1lLCBzZWxmLnN1cHBvcnRlZF9oYXNoX25hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsIGhhc2hsaWIubmV3KGgubmFtZSkubmFtZSkKKwogICAgIGRlZiB0ZXN0X2xhcmdlX3VwZGF0ZShzZWxmKToKICAgICAgICAgYWFzID0gYidhJyAqIDEyOAogICAgICAgICBiZWVzID0gYidiJyAqIDEyNwpAQCAtMjA1LDYgKzIzNCwxMCBAQAogICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTI1NicpCiAgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnc2hhMzg0JykKICAgICAgICAgc2VsZi5jaGVja19ub191bmljb2RlKCdzaGE1MTInKQorICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTNfMjI0JykKKyAgICAgICAgc2VsZi5jaGVja19ub191bmljb2RlKCdzaGEzXzI1NicpCisgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnc2hhM18zODQnKQorICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTNfNTEyJykKIAogICAgIGRlZiBjaGVja19ibG9ja3NpemVfbmFtZShzZWxmLCBuYW1lLCBibG9ja19zaXplPTAsIGRpZ2VzdF9zaXplPTApOgogICAgICAgICBjb25zdHJ1Y3RvcnMgPSBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W25hbWVdCkBAIC0yMTMsOCArMjQ2LDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5ibG9ja19zaXplLCBibG9ja19zaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmRpZ2VzdF9zaXplLCBkaWdlc3Rfc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZGlnZXN0KCkpLCBkaWdlc3Rfc2l6ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5uYW1lLmxvd2VyKCksIG5hbWUubG93ZXIoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZS5zcGxpdCgiXyIpWzBdLCByZXByKG0pLmxvd2VyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICMgc3BsaXQgZm9yIHNoYTNfNTEyIC8gX3NoYTMuc2hhMyBvYmplY3QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZS5zcGxpdCgiXyIpWzBdLCByZXByKG0pKQogCiAgICAgZGVmIHRlc3RfYmxvY2tzaXplX25hbWUoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ21kNScsIDY0LCAxNikKQEAgLTIyMyw2ICsyNTcsMTAgQEAKICAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnc2hhMjU2JywgNjQsIDMyKQogICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzODQnLCAxMjgsIDQ4KQogICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGE1MTInLCAxMjgsIDY0KQorICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzXzIyNCcsIE5vdEltcGxlbWVudGVkLCAyOCkKKyAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnc2hhM18yNTYnLCBOb3RJbXBsZW1lbnRlZCwgMzIpCisgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ3NoYTNfMzg0JywgTm90SW1wbGVtZW50ZWQsIDQ4KQorICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzXzUxMicsIE5vdEltcGxlbWVudGVkLCA2NCkKIAogICAgIGRlZiB0ZXN0X2Nhc2VfbWQ1XzAoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ21kNScsIGInJywgJ2Q0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlJykKQEAgLTM1OCw2ICszOTYsMTA4IEBACiAgICAgICAgICAgImU3MTg0ODNkMGNlNzY5NjQ0ZTJlNDJjN2JjMTViNDYzOGUxZjk4YjEzYjIwNDQyODU2MzJhODAzYWZhOTczZWIiKwogICAgICAgICAgICJkZTBmZjI0NDg3N2VhNjBhNGNiMDQzMmNlNTc3YzMxYmViMDA5YzVjMmM0OWFhMmU0ZWFkYjIxN2FkOGNjMDliIikKIAorICAgICMgU0hBLTMgZmFtaWx5CisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzIyNCcsIGIiIiwKKyAgICAgICAgICAiRjcxODM3NTAyQkE4RTEwODM3QkREOEQzNjVBREI4NTU5MTg5NTYwMkZDNTUyQjQ4QjczOTBBQkQiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzIyNCcsIGJ5dGVzLmZyb21oZXgoIkNDIiksCisgICAgICAgICAgIkE5Q0FCNTlFQjQwQTEwQjI0NjI5MEYyRDYwODZFMzJFMzY4OUZBRjFEMjZCNDcwQzg5OUYyODAyIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yMjRfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yMjQnLCBieXRlcy5mcm9taGV4KCI0MUZCIiksCisgICAgICAgICAgIjYxNUJBMzY3QUZEQzM1QUFDMzk3QkM3RUI1RDU4RDEwNkE3MzRCMjQ5ODZENUQ5NzhGRUZENjJDIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yMjRfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yMjQnLCBieXRlcy5mcm9taGV4KAorICAgICAgICAgICAgIjQzM0M1MzAzMTMxNjI0QzAwMjFEODY4QTMwODI1NDc1RThEMEJEMzA1MkEwMjIxODAzOThGNENBNDQyM0I5IisKKyAgICAgICAgICAgICI4MjE0QjZCRUFBQzIxQzg4MDdBMkMzM0Y4QzkzQkQ0MkIwOTJDQzFCMDZDRURGMzIyNEQ1RUQxRUMyOTc4NCIrCisgICAgICAgICAgICAiNDQ0RjIyRTA4QTU1QUE1ODU0MkI1MjRCMDJDRDNENUQ1RjY5MDdBRkU3MUM1RDc0NjIyMjRBM0Y5RDlFNTMiKworICAgICAgICAgICAgIkU3RTA4NDZEQ0JCNENFIiksCisgICAgICAgICAgIjYyQjEwRjFCNjIzNkVCQzJEQTcyOTU3NzQyQThENEU0OEUyMTNCNUY4OTM0NjA0QkZENEQyQzNBIikKKworICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHICsgNSwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF9odWdlKHNlbGYsIHNpemUpOgorICAgICAgICBpZiBzaXplID09IF80RyArIDU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yMjQnLCBiJ0EnKnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnNThlZjYwMDU3YzlkZGRiNmE4NzQ3N2U5YWNlNWEyNmYwZDlkYjAxODgxY2Y5YjEwYTlmOGMyMjQnKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAjIDMyLWJpdCBhcmNoCisKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yNTZfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yNTYnLCBiIiIsCisgICAgICAgICAgIkM1RDI0NjAxODZGNzIzM0M5MjdFN0RCMkRDQzcwM0MwRTUwMEI2NTNDQTgyMjczQjdCRkFEODA0NUQ4NUE0NzAiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzI1Nl8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzI1NicsIGJ5dGVzLmZyb21oZXgoIkNDIiksCisgICAgICAgICAgIkVFQUQ2REJGQzczNDBBNTZDQUVEQzA0NDY5NkExNjg4NzA1NDlBNkE3RjZGNTY5NjFFODRBNTRCRDk5NzBCOEEiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzI1Nl8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzI1NicsIGJ5dGVzLmZyb21oZXgoIjQxRkIiKSwKKyAgICAgICAgICAiQThFQUNFREE0RDQ3QjMyODFBNzk1QUQ5RTFFQTIxMjJCNDA3QkFGOUFBQkNCOUUxOEI1NzE3Qjc4NzM1MzdEMiIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjU2XzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMjU2JywgYnl0ZXMuZnJvbWhleCgKKyAgICAgICAgICAgICI0MzNDNTMwMzEzMTYyNEMwMDIxRDg2OEEzMDgyNTQ3NUU4RDBCRDMwNTJBMDIyMTgwMzk4RjRDQTQ0MjNCOSIrCisgICAgICAgICAgICAiODIxNEI2QkVBQUMyMUM4ODA3QTJDMzNGOEM5M0JENDJCMDkyQ0MxQjA2Q0VERjMyMjRENUVEMUVDMjk3ODQiKworICAgICAgICAgICAgIjQ0NEYyMkUwOEE1NUFBNTg1NDJCNTI0QjAyQ0QzRDVENUY2OTA3QUZFNzFDNUQ3NDYyMjI0QTNGOUQ5RTUzIisKKyAgICAgICAgICAgICJFN0UwODQ2RENCQjRDRSIpLAorICAgICAgICAgICJDRTg3QTUxNzNCRkZEOTIzOTkyMjE2NThGODAxRDQ1QzI5NEQ5MDA2RUU5RjNGOUQ0MTlDOEQ0Mjc3NDhEQzQxIikKKworCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzM4NF8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzM4NCcsIGIiIiwKKyAgICAgICAgICAiMkMyMzE0NkE2M0EyOUFDRjk5RTczQjg4RjhDMjRFQUE3REM2MEFBNzcxNzgwQ0NDMDA2QUZCRkE4RkUyNDc5QiIrCisgICAgICAgICAgIjJERDJCMjEzNjIzMzc0NDFBQzEyQjUxNTkxMTk1N0ZGIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18zODRfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18zODQnLCBieXRlcy5mcm9taGV4KCJDQyIpLAorICAgICAgICAgICIxQjg0RTYyQTQ2RTVBMjAxODYxNzU0QUY1REM5NUM0QTFBNjlDQUY0QTc5NkFFNDA1NjgwMTYxRTI5NTcyNjQxIisKKyAgICAgICAgICAiRjVGQTFFODY0MUQ3OTU4MzM2RUU3QjExQzU4RjczRTkiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzM4NF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzM4NCcsIGJ5dGVzLmZyb21oZXgoIjQxRkIiKSwKKyAgICAgICAgICAiNDk1Q0NFMjcxNENENzJDOEM1M0MzMzYzRDIyQzU4QjU1OTYwRkUyNkJFMEJGM0JCQzdBMzMxNkRENTYzQUQxRCIrCisgICAgICAgICAgIkI4NDEwRTc1RUVGRUE2NTVFMzlENDY3MEVDMEIxNzkyIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18zODRfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18zODQnLCBieXRlcy5mcm9taGV4KAorICAgICAgICAgICAgIjQzM0M1MzAzMTMxNjI0QzAwMjFEODY4QTMwODI1NDc1RThEMEJEMzA1MkEwMjIxODAzOThGNENBNDQyM0I5IisKKyAgICAgICAgICAgICI4MjE0QjZCRUFBQzIxQzg4MDdBMkMzM0Y4QzkzQkQ0MkIwOTJDQzFCMDZDRURGMzIyNEQ1RUQxRUMyOTc4NCIrCisgICAgICAgICAgICAiNDQ0RjIyRTA4QTU1QUE1ODU0MkI1MjRCMDJDRDNENUQ1RjY5MDdBRkU3MUM1RDc0NjIyMjRBM0Y5RDlFNTMiKworICAgICAgICAgICAgIkU3RTA4NDZEQ0JCNENFIiksCisgICAgICAgICAgIjEzNTExNDUwOERENjNFMjc5RTcwOUMyNkY3ODE3QzA0ODI3NjZDREU0OTEzMkUzRURGMkVFREQ4OTk2RjRFMzUiKworICAgICAgICAgICI5NkQxODQxMDBCMzg0ODY4MjQ5RjFEOEI4RkRBQTJDOSIpCisKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM181MTJfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM181MTInLCBiIiIsCisgICAgICAgICAgIjBFQUI0MkRFNEMzQ0VCOTIzNUZDOTFBQ0ZGRTc0NkIyOUMyOUE4QzM2NkI3QzYwRTRFNjdDNDY2RjM2QTQzMDQiKworICAgICAgICAgICJDMDBGQTlDQUY5RDg3OTc2QkE0NjlCQ0JFMDY3MTNCNDM1RjA5MUVGMjc2OUZCMTYwQ0RBQjMzRDM2NzA2ODBFIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM181MTJfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM181MTInLCBieXRlcy5mcm9taGV4KCJDQyIpLAorICAgICAgICAgICI4NjMwQzEzQ0JEMDY2RUE3NEJCRTdGRTQ2OEZFQzFERUUxMEVEQzEyNTRGQjRDMUI3QzVGRDY5QjY0NkU0NDE2IisKKyAgICAgICAgICAiMEI4Q0UwMUQwNUEwOTA4Q0E3OTBERkIwODBGNEI1MTNCQzNCNjIyNUVDRTdBODEwMzcxNDQxQTVBQzY2NkVCOSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfNTEyXzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfNTEyJywgYnl0ZXMuZnJvbWhleCgiNDFGQiIpLAorICAgICAgICAgICI1NTFEQTYyMzZGOEI5NkZDRTlGOTdGMTE5MEU5MDEzMjRGMEI0NUUwNkRCQkI1Q0RCODM1NUQ2RUQxREMzNEIzIisKKyAgICAgICAgICAiRjBFQUU3RENCNjg2MjJGRjIzMkZBM0NFQ0UwRDQ2MTZDREVCMzkzMUY5MzgwMzY2MkEyOERGMUNENTM1QjczMSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfNTEyXzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfNTEyJywgYnl0ZXMuZnJvbWhleCgKKyAgICAgICAgICAgICI0MzNDNTMwMzEzMTYyNEMwMDIxRDg2OEEzMDgyNTQ3NUU4RDBCRDMwNTJBMDIyMTgwMzk4RjRDQTQ0MjNCOSIrCisgICAgICAgICAgICAiODIxNEI2QkVBQUMyMUM4ODA3QTJDMzNGOEM5M0JENDJCMDkyQ0MxQjA2Q0VERjMyMjRENUVEMUVDMjk3ODQiKworICAgICAgICAgICAgIjQ0NEYyMkUwOEE1NUFBNTg1NDJCNTI0QjAyQ0QzRDVENUY2OTA3QUZFNzFDNUQ3NDYyMjI0QTNGOUQ5RTUzIisKKyAgICAgICAgICAgICJFN0UwODQ2RENCQjRDRSIpLAorICAgICAgICAgICI1MjdEMjhFMzQxRTZCMTRGNDY4NEFEQjRCODI0QzQ5NkM2NDgyRTUxMTQ5NTY1RDNEMTcyMjY4Mjg4ODQzMDZCIisKKyAgICAgICAgICAiNTFENjE0OEE3MjYyMkMyQjc1RjVEMzUxMEI3OTlEOEJEQzAzRUFFREU0NTM2NzZBNkVDOEZFMDNBMUFEMEVBQiIpCisKKwogICAgIGRlZiB0ZXN0X2dpbChzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGluZ3Mgd29yayBmaW5lIHdpdGggYW4gaW5wdXQgbGFyZ2VyIHRoYW4gdGhlIHNpemUgcmVxdWlyZWQKICAgICAgICAgIyBmb3IgbXVsdGl0aHJlYWRlZCBvcGVyYXRpb24gKHdoaWNoIGlzIGhhcmR3aXJlZCB0byAyMDQ4KS4KQEAgLTQwNiw4ICs1NDYsOCBAQAogICAgICAgICBldmVudHMgPSBbXQogICAgICAgICBmb3IgdGhyZWFkbnVtIGluIHJhbmdlKG51bV90aHJlYWRzKToKICAgICAgICAgICAgIGNodW5rX3NpemUgPSBsZW4oZGF0YSkgLy8gKDEwKip0aHJlYWRudW0pCi0gICAgICAgICAgICBhc3NlcnQgY2h1bmtfc2l6ZSA+IDAKLSAgICAgICAgICAgIGFzc2VydCBjaHVua19zaXplICUgbGVuKHNtYWxsZXN0X2RhdGEpID09IDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihjaHVua19zaXplLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaHVua19zaXplICUgbGVuKHNtYWxsZXN0X2RhdGEpLCAwKQogICAgICAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChldmVudCkKICAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWhhc2hfaW5fY2h1bmtzLApAQCAtNDE4LDggKzU1OCw5NSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaGFzaCwgaGFzaGVyLmhleGRpZ2VzdCgpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSGFzaExpYlRlc3RDYXNlKQorCitjbGFzcyBLREZUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBwYmtkZjJfdGVzdF92ZWN0b3JzID0gWworICAgICAgICAoYidwYXNzd29yZCcsIGInc2FsdCcsIDEsIE5vbmUpLAorICAgICAgICAoYidwYXNzd29yZCcsIGInc2FsdCcsIDIsIE5vbmUpLAorICAgICAgICAoYidwYXNzd29yZCcsIGInc2FsdCcsIDQwOTYsIE5vbmUpLAorICAgICAgICAjIHRvbyBzbG93LCBpdCB0YWtlcyBvdmVyIGEgbWludXRlIG9uIGEgZmFzdCBDUFUuCisgICAgICAgICMoYidwYXNzd29yZCcsIGInc2FsdCcsIDE2Nzc3MjE2LCBOb25lKSwKKyAgICAgICAgKGIncGFzc3dvcmRQQVNTV09SRHBhc3N3b3JkJywgYidzYWx0U0FMVHNhbHRTQUxUc2FsdFNBTFRzYWx0U0FMVHNhbHQnLAorICAgICAgICAgNDA5NiwgLTEpLAorICAgICAgICAoYidwYXNzXDB3b3JkJywgYidzYVwwbHQnLCA0MDk2LCAxNiksCisgICAgXQorCisgICAgcGJrZGYyX3Jlc3VsdHMgPSB7CisgICAgICAgICJzaGExIjogWworICAgICAgICAgICAgIyBvZmZpY2FsIHRlc3QgdmVjdG9ycyBmcm9tIFJGQyA2MDcwCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnMGM2MGM4MGY5NjFmMGU3MWYzYTliNTI0YWY2MDEyMDYyZmUwMzdhNicpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdlYTZjMDE0ZGM3MmQ2ZjhjY2QxZWQ5MmFjZTFkNDFmMGQ4ZGU4OTU3JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzRiMDA3OTAxYjc2NTQ4OWFiZWFkNDlkOTI2ZjcyMWQwNjVhNDI5YzEnKSwgTm9uZSksCisgICAgICAgICAgICAjKGJ5dGVzLmZyb21oZXgoJ2VlZmUzZDYxY2Q0ZGE0ZTRlOTk0NWIzZDZiYTIxNThjMjYzNGU5ODQnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnM2QyZWVjNGZlNDFjODQ5YjgwYzhkODM2NjJjMGU0NGE4YjI5MWE5NjRjJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2YyZjA3MDM4JyksIDI1KSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc1NmZhNmFhNzU1NDgwOTlkY2MzN2Q3ZjAzNDI1ZTBjMycpLCBOb25lKSxdLAorICAgICAgICAic2hhMjU2IjogWworICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzEyMGZiNmNmZmNmOGIzMmM0M2U3MjI1MjU2YzRmODM3JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E4NjU0OGM5MmNjYzM1NDgwODA1OTg3Y2I3MGJlMTdiJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2FlNGQwYzk1YWY2YjQ2ZDMyZDBhZGZmOTI4ZjA2ZGQwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzJhMzAzZjhlZjNjMjUxZGZkNmUyZDg1YTk1NDc0YzQzJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2M1ZTQ3OGQ1OTI4OGM4NDFhYTUzMGRiNjg0NWM0YzhkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk2Mjg5M2EwMDFjZTRlMTFhNDk2Mzg3M2FhOTgxMzRhJyksIE5vbmUpLAorICAgICAgICAgICAgIyhieXRlcy5mcm9taGV4KCdjZjgxYzY2ZmU4Y2ZjMDRkMWYzMWVjYjY1ZGFiNDA4OScKKyAgICAgICAgICAgICMgICAgICAgICAgICAgICAnZjdmMTc5ZTg5YjNiMGJjYjE3YWQxMGUzYWM2ZWJhNDYnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnMzQ4Yzg5ZGJjYmQzMmIyZjMyZDgxNGI4MTE2ZTg0Y2YyYjE3JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzM0N2ViYzE4MDAxODFjNGUyYTFmYjhkZDUzZTFjNjM1NTE4YzdkYWM0N2U5JyksIDQwKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc4OWI2OWQwNTE2ZjgyOTg5M2M2OTYyMjY2NTBhODY4NycpLCBOb25lKSxdLAorICAgICAgICAic2hhNTEyIjogWworICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzg2N2Y3MGNmMWFkZTAyY2ZmMzc1MjU5OWEzYTUzZGM0YWYzNGM3YTY2OTgxNWFlNScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdkNTEzNTU0ZTFjOGNmMjUyYzAyZDQ3MGEyODVhMDUwMWJhZDk5OWJmZTk0M2MwOGYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDUwMjM1ZDdkNjhiMWRhNTVlNjNmNzNiNjBhNTdmY2UnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZTFkOWMxNmFhNjgxNzA4YTQ1ZjVjN2M0ZTIxNWNlYjY2ZTAxMWEyZTlmMDA0MDcxJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzNmMThhZWZkYjg2NmQ1M2NmNzZjYWIyODY4YTM5YjlmNzg0MGVkY2U0ZmVmNWE4MicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZTY3MzM1Yzc3YTYwNjhlMDQxMTI3NTRmMjdjY2Y0ZScpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdkMTk3YjFiMzNkYjAxNDNlMDE4YjEyZjNkMWQxNDc5ZTZjZGViZGNjOTdjNWMwZjgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnN2Y2OTAyZTA3MmY0NTdiNTE0M2YzMDYwMjY0MWIzZDU1Y2QzMzU5ODhjYjM2Yjg0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzM3NjA2MGVjZDUzMmUwMzliNzQyYTIzOTQzNGFmMmQ1JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzhjMDUxMWY0YzZlNTk3YzZhYzYzMTVkOGYwMzYyZTIyNWYzYzUwMTQ5NWJhMjNiOCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc2OGMwMDUxNzRkYzRlZTcxMTE1YjU5ZjllNjBjZDk1MzJmYTMzZTBmNzVhZWZlMzAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMjI1YzU4M2ExODZjZDgyYmQ0ZGFlYTk3MjRhM2QzYjgnKSwgNjQpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzlkOWU5YzRjZDIxZmU0YmUyNGQ1YjgyNDRjNzU5NjY1JyksIE5vbmUpLF0sCisgICAgfQorCisgICAgZGVmIF90ZXN0X3Bia2RmMl9obWFjKHNlbGYsIHBia2RmMik6CisgICAgICAgIGZvciBkaWdlc3RfbmFtZSwgcmVzdWx0cyBpbiBzZWxmLnBia2RmMl9yZXN1bHRzLml0ZW1zKCk6CisgICAgICAgICAgICBmb3IgaSwgdmVjdG9yIGluIGVudW1lcmF0ZShzZWxmLnBia2RmMl90ZXN0X3ZlY3RvcnMpOgorICAgICAgICAgICAgICAgIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuID0gdmVjdG9yCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIG92ZXJ3cml0ZV9ka2xlbiA9IHJlc3VsdHNbaV0KKyAgICAgICAgICAgICAgICBpZiBvdmVyd3JpdGVfZGtsZW46CisgICAgICAgICAgICAgICAgICAgIGRrbGVuID0gb3ZlcndyaXRlX2RrbGVuCisgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuKSkKKyAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIG1lbW9yeXZpZXcocGFzc3dvcmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KHNhbHQpLCByb3VuZHMsIGRrbGVuKQorICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgYnl0ZWFycmF5KHBhc3N3b3JkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KHNhbHQpLCByb3VuZHMsIGRrbGVuKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBpZiBka2xlbiBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGJrZGYyLCBiJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCAncGFzcycsICdzYWx0JywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxLCAtMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd1bnN1cHBvcnRlZCBoYXNoIHR5cGUnKToKKyAgICAgICAgICAgIHBia2RmMigndW5rbm93bicsIGIncGFzcycsIGInc2FsdCcsIDEpCisKKyAgICBkZWYgdGVzdF9wYmtkZjJfaG1hY19weShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYmtkZjJfaG1hYyhweV9oYXNobGliLnBia2RmMl9obWFjKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjX2hhc2hsaWIsICdwYmtkZjJfaG1hYycpLAorICAgICAgICAgICAgICAgICAgICAgJyAgIHRlc3QgcmVxdWlyZXMgT3BlblNTTCA+IDEuMCcpCisgICAgZGVmIHRlc3RfcGJrZGYyX2htYWNfYyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYmtkZjJfaG1hYyhjX2hhc2hsaWIucGJrZGYyX2htYWMpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9obWFjLnB5IGIvTGliL3Rlc3QvdGVzdF9obWFjLnB5CmluZGV4IDRjYTdjZWMuLmVmZDYzYWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2htYWMucHkKQEAgLTI1Myw2ICsyNTMsMjAgQEAKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dCBhcmd1bWVudCByYWlzZWQgZXhjZXB0aW9uLiIpCiAKKyAgICBkZWYgdGVzdF93aXRoX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhieXRlYXJyYXkoYiJrZXkiKSwgYnl0ZWFycmF5KGIiaGFzaCB0aGlzISIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLCAnMzQzMjViNjM5ZGE0Y2ZkOTU3MzViMzgxZTI4Y2I4NjQnKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCBieXRlYXJyYXkgYXJndW1lbnRzIHJhaXNlZCBleGNlcHRpb24uIikKKworICAgIGRlZiB0ZXN0X3dpdGhfbWVtb3J5dmlld19tc2coc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJrZXkiLCBtZW1vcnl2aWV3KGIiaGFzaCB0aGlzISIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLCAnMzQzMjViNjM5ZGE0Y2ZkOTU3MzViMzgxZTI4Y2I4NjQnKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCBtZW1vcnl2aWV3IG1zZyByYWlzZWQgZXhjZXB0aW9uLiIpCisKICAgICBkZWYgdGVzdF93aXRobW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0IGFuZCBkaWdlc3QgbW9kdWxlLgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKaW5kZXggZjNjMjdjMi4uMzFjMGI2YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQpAQCAtMjcsOCArMjcsMTAgQEAKICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAogICAgICAgICBzZWxmLmZpbGVjbGFzcyA9IGZpbGVjbGFzcwogICAgICAgICBzZWxmLmRhdGEgPSBiJycKKyAgICAgICAgc2VsZi5zZW5kYWxsX2NhbGxzID0gMAogCiAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc2VuZGFsbF9jYWxscyArPSAxCiAgICAgICAgIHNlbGYuZGF0YSArPSBkYXRhCiAKICAgICBkZWYgbWFrZWZpbGUoc2VsZiwgbW9kZSwgYnVmc2l6ZT1Ob25lKToKQEAgLTQ1LDcgKzQ3LDcgQEAKIAogICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgogICAgICAgICBpZiBzZWxmLnBpcGVfdHJpZ2dlciBpbiBkYXRhOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVQSVBFLCAiZ290Y2hhIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRVBJUEUsICJnb3RjaGEiKQogICAgICAgICBzZWxmLmRhdGEgKz0gZGF0YQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtNTk3LDcgKzU5OSw3IEBACiAgICAgICAgICAgICBiIkNvbnRlbnQtTGVuZ3RoIikKICAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbigiZXhhbXBsZS5jb20iKQogICAgICAgICBjb25uLnNvY2sgPSBzb2NrCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBjb25uLnJlcXVlc3QoIlBVVCIsICIvdXJsIiwgImJvZHkiKSkKICAgICAgICAgcmVzcCA9IGNvbm4uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQwMSwgcmVzcC5zdGF0dXMpCkBAIC02NDMsNiArNjQ1LDI4IEBACiAgICAgICAgIHJlc3AuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5jbG9zZWQpCiAKKyAgICBkZWYgdGVzdF9kZWxheWVkX2Fja19vcHQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5hZ2xlL2RlbGF5ZWRfYWNrIG9wdGltaXN0YWlvbiB3b3JrcyBjb3JyZWN0bHkuCisKKyAgICAgICAgIyBGb3Igc21hbGwgcGF5bG9hZHMsIGl0IHNob3VsZCBjb2FsZXNjZSB0aGUgYm9keSB3aXRoCisgICAgICAgICMgaGVhZGVycywgcmVzdWx0aW5nIGluIGEgc2luZ2xlIHNlbmRhbGwoKSBjYWxsCisgICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoTm9uZSkKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBib2R5ID0gYid4JyAqIChjb25uLm1zcyAtIDEpCisgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvJywgYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnNlbmRhbGxfY2FsbHMsIDEpCisKKyAgICAgICAgIyBGb3IgbGFyZ2UgcGF5bG9hZHMsIGl0IHNob3VsZCBzZW5kIHRoZSBoZWFkZXJzIGFuZAorICAgICAgICAjIHRoZW4gdGhlIGJvZHksIHJlc3VsdGluZyBpbiBtb3JlIHRoYW4gb25lIHNlbmRhbGwoKQorICAgICAgICAjIGNhbGwKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGJvZHkgPSBiJ3gnICogY29ubi5tc3MKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc29jay5zZW5kYWxsX2NhbGxzLCAxKQorCiBjbGFzcyBPZmZsaW5lVGVzdChUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVzcG9uc2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsaWVudC5yZXNwb25zZXNbY2xpZW50Lk5PVF9GT1VORF0sICJOb3QgRm91bmQiKQpAQCAtNzMzLDcgKzc1Nyw3IEBACiAKICAgICBkZWYgbWFrZV9zZXJ2ZXIoc2VsZiwgY2VydGZpbGUpOgogICAgICAgICBmcm9tIHRlc3Quc3NsX3NlcnZlcnMgaW1wb3J0IG1ha2VfaHR0cHNfc2VydmVyCi0gICAgICAgIHJldHVybiBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZSkKKyAgICAgICAgcmV0dXJuIG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPWNlcnRmaWxlKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyBzaW1wbGUgdGVzdCB0byBjaGVjayBpdCdzIHN0b3JpbmcgdGhlIHRpbWVvdXQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CmluZGV4IDlkZDI3NzguLmIyYmNlMWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQpAQCAtOTIsNiArOTIsMTMgQEAKICAgICAgICAgZGVmIGRvX0tFWUVSUk9SKHNlbGYpOgogICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDk5OSkKIAorICAgICAgICBkZWYgZG9fTk9URk9VTkQoc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0KQorCisgICAgICAgIGRlZiBkb19FWFBMQUlORVJST1Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoOTk5LCAiU2hvcnQgTWVzc2FnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYSBsb25nIFxuIGV4cGxhaW5hdGlvbiIpCisKICAgICAgICAgZGVmIGRvX0NVU1RPTShzZWxmKToKICAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSg5OTkpCiAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJykKQEAgLTIwMyw2ICsyMTAsMTIgQEAKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDk5OSkKIAorICAgIGRlZiB0ZXN0X3JldHVybl9leHBsYWluX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdFWFBMQUlORVJST1InLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQocmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSkpCisKICAgICBkZWYgdGVzdF9sYXRpbjFfaGVhZGVyKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdMQVRJTk9ORUhFQURFUicsICcvJywgaGVhZGVycz17CiAgICAgICAgICAgICAnWC1TcGVjaWFsLUluY29taW5nJzogICAgICAgJ8OEcmdlciBtaXQgVW5pY29kZScKQEAgLTIxMSw2ICsyMjQsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0aGVhZGVyKCdYLVNwZWNpYWwnKSwgJ0TDpG5nZXJvdXMgTWluZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnJlYWQoKSwgJ8OEcmdlciBtaXQgVW5pY29kZScuZW5jb2RlKCd1dGYtOCcpKQogCisgICAgZGVmIHRlc3RfZXJyb3JfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2MDg4OiBzdGFuZGFyZCBlcnJvciByZXNwb25zZXMgc2hvdWxkIGhhdmUgYSBjb250ZW50LWxlbmd0aAorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdOT1RGT1VORCcsICcvJykKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwNCkKKyAgICAgICAgZGF0YSA9IHJlcy5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQocmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSksIGxlbihkYXRhKSkKKwogCiBjbGFzcyBTaW1wbGVIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKICAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQppbmRleCBkYWE4YWZlLi44MWJmZDFmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgTmFrZWQgc29ja2V0cyByZXR1cm4gZW1wdHkgc3RyaW5ncy4uCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgICAgbGluZSArPSBwYXJ0Ci0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgLi5idXQgU1NMU29ja2V0cyByYWlzZSBleGNlcHRpb25zLgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKGInXHJcbicpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQppbmRleCBiNTZlZmUzLi5jZjI3YTcxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQpAQCAtMSwxNCArMSwyOSBAQAotaW1wb3J0IGltcAordHJ5OgorICAgIGltcG9ydCBfdGhyZWFkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3RocmVhZCA9IE5vbmUKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliIGltcG9ydCB1dGlsCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncword2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICBpbXBvcnQgaW1wCiAKKworZGVmIHJlcXVpcmVzX2xvYWRfZHluYW1pYyhtZXRoKToKKyAgICAiIiJEZWNvcmF0b3IgdG8gc2tpcCBhIHRlc3QgaWYgbm90IHJ1bm5pbmcgdW5kZXIgQ1B5dGhvbiBvciBsYWNraW5nCisgICAgaW1wLmxvYWRfZHluYW1pYygpLiIiIgorICAgIG1ldGggPSBzdXBwb3J0LmNweXRob25fb25seShtZXRoKQorICAgIHJldHVybiB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykobWV0aCkKKworCitAdW5pdHRlc3Quc2tpcElmKF90aHJlYWQgaXMgTm9uZSwgJ190aHJlYWQgbW9kdWxlIGlzIHJlcXVpcmVkJykKIGNsYXNzIExvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJWZXJ5IGJhc2ljIHRlc3Qgb2YgaW1wb3J0IGxvY2sgZnVuY3Rpb25zLiIiIgpAQCAtMjA4LDkgKzIyMyw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9yaWdfcGF0aCwgbmV3X29zLnBhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdfZ2V0ZW52LCBuZXdfb3MuZ2V0ZW52KQogCi0gICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5Ci0gICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihpbXAsICdsb2FkX2R5bmFtaWMnKSwKLSAgICAgICAgICAgICAgICAgICAgICdpbXAubG9hZF9keW5hbWljKCkgcmVxdWlyZWQnKQorICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKICAgICBkZWYgdGVzdF9pc3N1ZTE1ODI4X2xvYWRfZXh0ZW5zaW9ucyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNTgyOCBwaWNrZWQgdXAgdGhhdCB0aGUgYWRhcHRlciBiZXR3ZWVuIHRoZSBvbGQgaW1wIEFQSQogICAgICAgICAjIGFuZCBpbXBvcnRsaWIgY291bGRuJ3QgaGFuZGxlIEMgZXh0ZW5zaW9ucwpAQCAtMjIyLDYgKzIzNSwyMiBAQAogICAgICAgICBtb2QgPSBpbXAubG9hZF9tb2R1bGUoZXhhbXBsZSwgKngpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLl9fbmFtZV9fLCBleGFtcGxlKQogCisgICAgQHJlcXVpcmVzX2xvYWRfZHluYW1pYworICAgIGRlZiB0ZXN0X2lzc3VlMTY0MjFfbXVsdGlwbGVfbW9kdWxlc19pbl9vbmVfZGxsKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE2NDIxOiBsb2FkaW5nIHNldmVyYWwgbW9kdWxlcyBmcm9tIHRoZSBzYW1lIGNvbXBpbGVkIGZpbGUgZmFpbHMKKyAgICAgICAgbSA9ICdfdGVzdGltcG9ydG11bHRpcGxlJworICAgICAgICBmaWxlb2JqLCBwYXRobmFtZSwgZGVzY3JpcHRpb24gPSBpbXAuZmluZF9tb2R1bGUobSkKKyAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgIG1vZDAgPSBpbXAubG9hZF9keW5hbWljKG0sIHBhdGhuYW1lKQorICAgICAgICBtb2QxID0gaW1wLmxvYWRfZHluYW1pYygnX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28nLCBwYXRobmFtZSkKKyAgICAgICAgbW9kMiA9IGltcC5sb2FkX2R5bmFtaWMoJ190ZXN0aW1wb3J0bXVsdGlwbGVfYmFyJywgcGF0aG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kMC5fX25hbWVfXywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QxLl9fbmFtZV9fLCAnX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZDIuX19uYW1lX18sICdfdGVzdGltcG9ydG11bHRpcGxlX2JhcicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgaW1wLmxvYWRfZHluYW1pYygnbm9uZXhpc3RlbnQnLCBwYXRobmFtZSkKKworICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKICAgICBkZWYgdGVzdF9sb2FkX2R5bmFtaWNfSW1wb3J0RXJyb3JfcGF0aChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTU1OTU0OSBhZGRlZCBgbmFtZWAgYW5kIGBwYXRoYCBhdHRyaWJ1dGVzIHRvIEltcG9ydEVycm9yCiAgICAgICAgICMgaW4gb3JkZXIgdG8gcHJvdmlkZSBiZXR0ZXIgZGV0YWlsLiBJc3N1ZSAjMTA4NTQgaW1wbGVtZW50ZWQgdGhvc2UKQEAgLTIzMywxNCArMjYyLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aCwgZXJyLmV4Y2VwdGlvbi5wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGVyci5leGNlcHRpb24ubmFtZSkKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQotICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCi0gICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGVfZXh0ZW5zaW9uX2ZpbGVfaXNfTm9uZShzZWxmKToKICAgICAgICAgIyBXaGVuIGxvYWRpbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSBhbmQgdGhlIGZpbGUgaXMgTm9uZSwgb3BlbiBvbmUKICAgICAgICAgIyBvbiB0aGUgYmVoYWxmIG9mIGltcC5sb2FkX2R5bmFtaWMoKS4KICAgICAgICAgIyBJc3N1ZSAjMTU5MDIKLSAgICAgICAgbmFtZSA9ICdfaGVhcHEnCisgICAgICAgIG5hbWUgPSAnX3Rlc3RpbXBvcnRtdWx0aXBsZScKICAgICAgICAgZm91bmQgPSBpbXAuZmluZF9tb2R1bGUobmFtZSkKICAgICAgICAgaWYgZm91bmRbMF0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmb3VuZFswXS5jbG9zZSgpCkBAIC0yNDgsNiArMjc1LDE1IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaW1wLmxvYWRfbW9kdWxlKG5hbWUsIE5vbmUsICpmb3VuZFsxOl0pCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLAorICAgICAgICAidGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlbiB3cml0aW5nIGJ5dGVjb2RlIikKKyAgICBkZWYgdGVzdF9idWc3NzMyKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoKToKKyAgICAgICAgICAgIHNvdXJjZSA9IHN1cHBvcnQuVEVTVEZOICsgJy5weScKKyAgICAgICAgICAgIG9zLm1rZGlyKHNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICdeTm8gbW9kdWxlJywKKyAgICAgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsIHN1cHBvcnQuVEVTVEZOLCBbIi4iXSkKKwogICAgIGRlZiB0ZXN0X211bHRpcGxlX2NhbGxzX3RvX2dldF9kYXRhKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxODc1NTogbWFrZSBzdXJlIG11bHRpcGxlIGNhbGxzIHRvIGdldF9kYXRhKCkgY2FuIHN1Y2NlZWQuCiAgICAgICAgIGxvYWRlciA9IGltcC5fTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoJ2ltcCcsIGltcC5fX2ZpbGVfXywKQEAgLTI5MywyMiArMzI5LDYgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAnaHRtbCcpOgogICAgICAgICAgICAgaW1wLnJlbG9hZChwYXJzZXIpCiAKLSAgICBkZWYgdGVzdF9tb2R1bGVfcmVwbGFjZWQoc2VsZik6Ci0gICAgICAgICMgc2VlICMxODY5OAotICAgICAgICBkZWYgY29kZSgpOgotICAgICAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCd0b3BfbGV2ZWwnKQotICAgICAgICAgICAgbW9kdWxlLnNwYW0gPSAzCi0gICAgICAgICAgICBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10gPSBtb2R1bGUKLSAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eyd0b3BfbGV2ZWwnOiBjb2RlfSkKLSAgICAgICAgd2l0aCBtb2NrOgotICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndG9wX2xldmVsJykKLSAgICAgICAgICAgICAgICByZWxvYWRlZCA9IGltcC5yZWxvYWQobW9kdWxlKQotICAgICAgICAgICAgICAgIGFjdHVhbCA9IHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLnNwYW0sIDMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5zcGFtLCAzKQotCiAKIGNsYXNzIFBFUDMxNDdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgb2YgUEVQIDMxNDcuIiIiCkBAIC00NjEsMjAgKzQ4MSw1IEBACiAgICAgICAgICAgICBvcy5ybWRpcihuYW1lKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFsKLSAgICAgICAgSW1wb3J0VGVzdHMsCi0gICAgICAgIFBFUDMxNDdUZXN0cywKLSAgICAgICAgUmVsb2FkVGVzdHMsCi0gICAgICAgIE51bGxJbXBvcnRlclRlc3RzLAotICAgICAgICBdCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgX3RocmVhZAotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChMb2NrVGVzdHMpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CmluZGV4IGRmMDhlNmEuLmU4ODE0MWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CkBAIC0xLDggKzEsOCBAQAogIyBXZSBpbXBvcnQgaW1wb3J0bGliICpBU0FQKiBpbiBvcmRlciB0byB0ZXN0ICMxNTM4NgogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBmcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBfZ2V0X3NvdXJjZWZpbGUKIGltcG9ydCBidWlsdGlucwotaW1wb3J0IGltcAogZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliLmltcG9ydF8gaW1wb3J0IHV0aWwgYXMgaW1wb3J0bGliX3V0aWwKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKQEAgLTIyLDcgKzIyLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoCiAgICAgRW52aXJvbm1lbnRWYXJHdWFyZCwgVEVTVEZOLCBjaGVja193YXJuaW5ncywgZm9yZ2V0LCBpc19qeXRob24sCiAgICAgbWFrZV9sZWdhY3lfcHljLCBybXRyZWUsIHJ1bl91bml0dGVzdCwgc3dhcF9hdHRyLCBzd2FwX2l0ZW0sIHRlbXBfdW1hc2ssCi0gICAgdW5saW5rLCB1bmxvYWQsIGNyZWF0ZV9lbXB0eV9maWxlLCBjcHl0aG9uX29ubHkpCisgICAgdW5saW5rLCB1bmxvYWQsIGNyZWF0ZV9lbXB0eV9maWxlLCBjcHl0aG9uX29ubHksIFRFU1RGTl9VTkVOQ09EQUJMRSkKIGZyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogCiAKQEAgLTcwLDggKzcwLDYgQEAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHVubG9hZChURVNURk4pCiAKLSAgICBzZXRVcCA9IHRlYXJEb3duCi0KICAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2aXR5KHNlbGYpOgogICAgICAgICAjIEJyaWVmIGRpZ3Jlc3Npb24gdG8gdGVzdCB0aGF0IGltcG9ydCBpcyBjYXNlLXNlbnNpdGl2ZTogIGlmIHdlIGdvdAogICAgICAgICAjIHRoaXMgZmFyLCB3ZSBrbm93IGZvciBzdXJlIHRoYXQgInJhbmRvbSIgZXhpc3RzLgpAQCAtMTI5LDE2ICsxMjcsNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAKLSAgICBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCi0gICAgZGVmIHRlc3RfYnVnNzczMihzZWxmKToKLSAgICAgICAgc291cmNlID0gVEVTVEZOICsgJy5weScKLSAgICAgICAgb3MubWtkaXIoc291cmNlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAnXk5vIG1vZHVsZScsCi0gICAgICAgICAgICAgICAgaW1wLmZpbmRfbW9kdWxlLCBURVNURk4sIFsiLiJdKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3Mucm1kaXIoc291cmNlKQotCiAgICAgZGVmIHRlc3RfbW9kdWxlX3dpdGhfbGFyZ2Vfc3RhY2soc2VsZiwgbW9kdWxlPSdsb25nbGlzdCcpOgogICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTU2MTg1OC4KICAgICAgICAgZmlsZW5hbWUgPSBtb2R1bGUgKyAnLnB5JwpAQCAtMTYxLDE2ICsxNDksMjQgQEAKICAgICAgICAgc3lzLnBhdGguYXBwZW5kKCcnKQogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogCisgICAgICAgIG5hbWVzcGFjZSA9IHt9CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1ha2VfbGVnYWN5X3B5YyhmaWxlbmFtZSkKICAgICAgICAgICAgICMgVGhpcyB1c2VkIHRvIGNyYXNoLgotICAgICAgICAgICAgZXhlYygnaW1wb3J0ICcgKyBtb2R1bGUpCisgICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIG1vZHVsZSwgTm9uZSwgbmFtZXNwYWNlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgIyBDbGVhbnVwLgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWy0xXQogICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgJ2MnKQogICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgJ28nKQogCisgICAgICAgICAgICAjIFJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGUgKHVubG9hZCB0aGUgbW9kdWxlKQorICAgICAgICAgICAgbmFtZXNwYWNlLmNsZWFyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X2ZhaWxpbmdfaW1wb3J0X3N0aWNrcyhzZWxmKToKICAgICAgICAgc291cmNlID0gVEVTVEZOICsgIi5weSIKICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgpAQCAtMjI1LDcgKzIyMSw3IEBACiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgiYSA9IDEwXG5iPTIwLy8wXG4iKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgaW1wLnJlbG9hZCwgbW9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGltcG9ydGxpYi5yZWxvYWQsIG1vZCkKICAgICAgICAgICAgICMgQnV0IHdlIHN0aWxsIGV4cGVjdCB0aGUgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzLgogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KFRFU1RGTikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kLCBOb25lLCAiZXhwZWN0ZWQgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzIikKQEAgLTI4MCw3ICsyNzYsNyBAQAogICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgaW1wb3J0IGltcAorICAgICAgICAgICAgICAgICAgaW1wb3J0IGltcG9ydGxpYgogICAgICAgICAgICAgc3lzLmFyZ3YuaW5zZXJ0KDAsIEMoKSkKICAgICAgICAgICAgICIiIikpCiAgICAgICAgIHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayh0ZXN0Zm4pCkBAIC0yOTEsNyArMjg3LDcgQEAKICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc291cmNlID0gVEVTVEZOICsgIi5weSIKLSAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHRyeToKQEAgLTMyMiw2ICszMTgsMTQgQEAKICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJJbXBvcnRFcnJvciIsIHN0ZG91dCkKIAorICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0X21lc3NhZ2VfZm9yX25vbmV4aXN0ZW50X21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAiXk5vIG1vZHVsZSBuYW1lZCAnYm9ndXMnIik6CisgICAgICAgICAgICBmcm9tIGJvZ3VzIGltcG9ydCBmb28KKworICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0X21lc3NhZ2VfZm9yX2V4aXN0aW5nX21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAiXmNhbm5vdCBpbXBvcnQgbmFtZSAnYm9ndXMnIik6CisgICAgICAgICAgICBmcm9tIHJlIGltcG9ydCBib2d1cworCiAKIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKIGNsYXNzIEZpbGVQZXJtaXNzaW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzMyLDcgKzMzNiw3IEBACiAgICAgZGVmIHRlc3RfY3JlYXRpb25fbW9kZShzZWxmKToKICAgICAgICAgbWFzayA9IDBvMDIyCiAgICAgICAgIHdpdGggdGVtcF91bWFzayhtYXNrKSwgX3JlYWR5X3RvX2ltcG9ydCgpIGFzIChuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCiAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiX19pbXBvcnRfXyBkaWQgbm90IHJlc3VsdCBpbiBjcmVhdGlvbiBvZiAiCkBAIC0zNTAsNyArMzU0LDcgQEAKICAgICAgICAgIyBwZXJtaXNzaW9ucyBvZiAucHljIHNob3VsZCBtYXRjaCB0aG9zZSBvZiAucHksIHJlZ2FyZGxlc3Mgb2YgbWFzawogICAgICAgICBtb2RlID0gMG82MDAKICAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKDBvMDIyKSwgX3JlYWR5X3RvX2ltcG9ydCgpIGFzIChuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCiAgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBtb2RlKQogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKQEAgLTM2NSw3ICszNjksNyBAQAogICAgIGRlZiB0ZXN0X2NhY2hlZF9yZWFkb25seShzZWxmKToKICAgICAgICAgbW9kZSA9IDBvNDAwCiAgICAgICAgIHdpdGggdGVtcF91bWFzaygwbzAyMiksIF9yZWFkeV90b19pbXBvcnQoKSBhcyAobmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQogICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgbW9kZSkKICAgICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjYWNoZWRfcGF0aCk6CkBAIC00MDUsNyArNDA5LDcgQEAKICAgICAgICAgICAgICAgICBieXRlY29kZV9vbmx5ID0gcGF0aCArICJjIgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9vbmx5ID0gcGF0aCArICJvIgotICAgICAgICAgICAgb3MucmVuYW1lKGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKSwgYnl0ZWNvZGVfb25seSkKKyAgICAgICAgICAgIG9zLnJlbmFtZShpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKSwgYnl0ZWNvZGVfb25seSkKICAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ueCwgJ3Jld3JpdHRlbicpCiAKQEAgLTQyNyw3ICs0MzEsNyBAQAogIiIiCiAgICAgZGlyX25hbWUgPSBvcy5wYXRoLmFic3BhdGgoVEVTVEZOKQogICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihkaXJfbmFtZSwgbW9kdWxlX25hbWUpICsgb3MuZXh0c2VwICsgInB5IgotICAgIGNvbXBpbGVkX25hbWUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9uYW1lKQorICAgIGNvbXBpbGVkX25hbWUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX25hbWUpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc3lzX3BhdGggPSBzeXMucGF0aFs6XQpAQCAtNDg4LDcgKzQ5Miw3IEBACiAgICAgICAgICAgICBoZWFkZXIgPSBmLnJlYWQoMTIpCiAgICAgICAgICAgICBjb2RlID0gbWFyc2hhbC5sb2FkKGYpCiAgICAgICAgIGNvbnN0YW50cyA9IGxpc3QoY29kZS5jb19jb25zdHMpCi0gICAgICAgIGZvcmVpZ25fY29kZSA9IHRlc3RfbWFpbi5fX2NvZGVfXworICAgICAgICBmb3JlaWduX2NvZGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZS5fX2NvZGVfXwogICAgICAgICBwb3MgPSBjb25zdGFudHMuaW5kZXgoMSkKICAgICAgICAgY29uc3RhbnRzW3Bvc10gPSBmb3JlaWduX2NvZGUKICAgICAgICAgY29kZSA9IHR5cGUoY29kZSkoY29kZS5jb19hcmdjb3VudCwgY29kZS5jb19rd29ubHlhcmdjb3VudCwKQEAgLTYzMCw3ICs2MzQsNyBAQAogY2xhc3MgUHljYWNoZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRlc3QgdGhlIHZhcmlvdXMgUEVQIDMxNDcgcmVsYXRlZCBiZWhhdmlvcnMuCiAKLSAgICB0YWcgPSBpbXAuZ2V0X3RhZygpCisgICAgdGFnID0gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZwogCiAgICAgZGVmIF9jbGVhbihzZWxmKToKICAgICAgICAgZm9yZ2V0KFRFU1RGTikKQEAgLTY3OCwxMCArNjgyLDExIEBACiAgICAgICAgICMgV2l0aCBQRVAgMzE0NyBjYWNoZSBsYXlvdXQsIHJlbW92aW5nIHRoZSBzb3VyY2UgYnV0IGxlYXZpbmcgdGhlIHB5YwogICAgICAgICAjIGZpbGUgZG9lcyBub3Qgc2F0aXNmeSB0aGUgaW1wb3J0LgogICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2UpCisgICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhweWNfZmlsZSkpCiAgICAgICAgIG9zLnJlbW92ZShzZWxmLnNvdXJjZSkKICAgICAgICAgZm9yZ2V0KFRFU1RGTikKKyAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIFRFU1RGTikKIAogICAgIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKQEAgLTcwMyw3ICs3MDgsNyBAQAogICAgIGRlZiB0ZXN0X19fY2FjaGVkX18oc2VsZik6CiAgICAgICAgICMgTW9kdWxlcyBub3cgYWxzbyBoYXZlIGFuIF9fY2FjaGVkX18gdGhhdCBwb2ludHMgdG8gdGhlIHB5YyBmaWxlLgogICAgICAgICBtID0gX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKFRFU1RGTiArICcucHknKQorICAgICAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKFRFU1RGTiArICcucHknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgcHljX2ZpbGUpKQogCiAgICAgQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQpAQCAtNzM4LDEwICs3NDMsMTAgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgbSA9IF9faW1wb3J0X18oJ3BlcDMxNDcuZm9vJykKLSAgICAgICAgaW5pdF9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgIGluaXRfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnX19pbml0X18ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGluaXRfcHljKSkKLSAgICAgICAgZm9vX3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCisgICAgICAgIGZvb19weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLm1vZHVsZXNbJ3BlcDMxNDcuZm9vJ10uX19jYWNoZWRfXywKICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBmb29fcHljKSkKIApAQCAtNzY1LDEwICs3NzAsMTAgQEAKICAgICAgICAgdW5sb2FkKCdwZXAzMTQ3JykKICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgbSA9IF9faW1wb3J0X18oJ3BlcDMxNDcuZm9vJykKLSAgICAgICAgaW5pdF9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgIGluaXRfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnX19pbml0X18ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGluaXRfcHljKSkKLSAgICAgICAgZm9vX3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCisgICAgICAgIGZvb19weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLm1vZHVsZXNbJ3BlcDMxNDcuZm9vJ10uX19jYWNoZWRfXywKICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBmb29fcHljKSkKIApAQCAtODUyLDcgKzg1Nyw2IEBACiAgICAgICAgIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbJ19mcm96ZW5faW1wb3J0bGliJ10KICAgICAgICAgc2VsZi5hc3NlcnRJcyhtYWNoaW5lcnkuRmlsZUZpbmRlciwgbW9kLkZpbGVGaW5kZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoaW1wLm5ld19tb2R1bGUsIG1vZC5uZXdfbW9kdWxlKQogCiAKIEBjcHl0aG9uX29ubHkKQEAgLTEwNDgsMTcgKzEwNTIsMTYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGUgPSBvbGRfbG9hZF9tb2R1bGUKIAotCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgcnVuX3VuaXR0ZXN0KEltcG9ydFRlc3RzLCBQeWNhY2hlVGVzdHMsIEZpbGVQZXJtaXNzaW9uVGVzdHMsCi0gICAgICAgICAgICAgICAgIFB5Y1Jld3JpdGluZ1Rlc3RzLCBQYXRoc1Rlc3RzLCBSZWxhdGl2ZUltcG9ydFRlc3RzLAotICAgICAgICAgICAgICAgICBPdmVycmlkaW5nSW1wb3J0QnVpbHRpblRlc3RzLAotICAgICAgICAgICAgICAgICBJbXBvcnRsaWJCb290c3RyYXBUZXN0cywgR2V0U291cmNlZmlsZVRlc3RzLAotICAgICAgICAgICAgICAgICBUZXN0U3ltYm9saWNhbGx5TGlua2VkUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgSW1wb3J0VHJhY2ViYWNrVGVzdHMpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVEVTVEZOX1VORU5DT0RBQkxFLCAnbmVlZCBURVNURk5fVU5FTkNPREFCTEUnKQorICAgIGRlZiB0ZXN0X3VuZW5jb2RhYmxlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMTYxOTogVGhlIFB5dGhvbiBwYXJzZXIgYW5kIHRoZSBpbXBvcnQgbWFjaGluZXJ5IG11c3Qgbm90CisgICAgICAgICMgZW5jb2RlIGZpbGVuYW1lcywgZXNwZWNpYWxseSBvbiBXaW5kb3dzCisgICAgICAgIHB5bmFtZSA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoJycsIFRFU1RGTl9VTkVOQ09EQUJMRSwgJ3Bhc3MnKQorICAgICAgICBuYW1lID0gcHluYW1lWzotM10KKyAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCItYyIsICJtb2QgPSBfX2ltcG9ydF9fKCVhKSIgJSBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICMgVGVzdCBuZWVkcyB0byBiZSBhIHBhY2thZ2UsIHNvIHdlIGNhbiBkbyByZWxhdGl2ZSBpbXBvcnRzLgotICAgIGZyb20gdGVzdC50ZXN0X2ltcG9ydCBpbXBvcnQgdGVzdF9tYWluCi0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTIyZDFhLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotaW1wb3J0IHN5cwotaW1wb3J0IGltcAotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotCi0KLXRlc3Rfc3JjID0gIiIiXAotZGVmIGdldF9uYW1lKCk6Ci0gICAgcmV0dXJuIF9fbmFtZV9fCi1kZWYgZ2V0X2ZpbGUoKToKLSAgICByZXR1cm4gX19maWxlX18KLSIiIgotCi1hYnNpbXAgPSAiaW1wb3J0IHN1YlxuIgotcmVsaW1wID0gImZyb20gLiBpbXBvcnQgc3ViXG4iCi1kZWVwcmVsaW1wID0gImZyb20gLi4uLiBpbXBvcnQgc3ViXG4iCi1mdXRpbXAgPSAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnRcbiIKLQotcmVsb2FkX3NyYyA9IHRlc3Rfc3JjKyIiIlwKLXJlbG9hZGVkID0gVHJ1ZQotIiIiCi0KLXRlc3RfY28gPSBjb21waWxlKHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi1yZWxvYWRfY28gPSBjb21waWxlKHJlbG9hZF9zcmMsICI8Pz8/PiIsICJleGVjIikKLQotdGVzdDJfb2xkYWJzX2NvID0gY29tcGlsZShhYnNpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfbmV3YWJzX2NvID0gY29tcGlsZShmdXRpbXAgKyBhYnNpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfbmV3cmVsX2NvID0gY29tcGlsZShyZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfZGVlcHJlbF9jbyA9IGNvbXBpbGUoZGVlcHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi10ZXN0Ml9mdXRyZWxfY28gPSBjb21waWxlKGZ1dGltcCArIHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi0KLXRlc3RfcGF0aCA9ICIhISFfdGVzdF8hISEiCi0KLQotY2xhc3MgVGVzdEltcG9ydGVyOgotCi0gICAgbW9kdWxlcyA9IHsKLSAgICAgICAgImhvb2t0ZXN0bW9kdWxlIjogKEZhbHNlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZSI6IChUcnVlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIiOiAoVHJ1ZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlciI6IChUcnVlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5vbGRhYnMiOiAoRmFsc2UsIHRlc3QyX29sZGFic19jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3YWJzIjogKEZhbHNlLCB0ZXN0Ml9uZXdhYnNfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld3JlbCI6IChGYWxzZSwgdGVzdDJfbmV3cmVsX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCI6IChUcnVlLCB0ZXN0Ml9kZWVwcmVsX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5mdXRyZWwiOiAoRmFsc2UsIHRlc3QyX2Z1dHJlbF9jbyksCi0gICAgICAgICJzdWIiOiAoRmFsc2UsIHRlc3RfY28pLAotICAgICAgICAicmVsb2FkbW9kdWxlIjogKEZhbHNlLCB0ZXN0X2NvKSwKLSAgICB9Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD10ZXN0X3BhdGgpOgotICAgICAgICBpZiBwYXRoICE9IHRlc3RfcGF0aDoKLSAgICAgICAgICAgICMgaWYgb3VyIGNsYXNzIGlzIG9uIHN5cy5wYXRoX2hvb2tzLCB3ZSBtdXN0IHJhaXNlCi0gICAgICAgICAgICAjIEltcG9ydEVycm9yIGZvciBhbnkgcGF0aCBpdGVtIHRoYXQgd2UgY2FuJ3QgaGFuZGxlLgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLSAgICAgICAgc2VsZi5wYXRoID0gcGF0aAotCi0gICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLm1vZHVsZXM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIGlzcGtnLCBjb2RlID0gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLGltcC5uZXdfbW9kdWxlKGZ1bGxuYW1lKSkKLSAgICAgICAgbW9kLl9fZmlsZV9fID0gIjwlcz4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KLSAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIGlmIGlzcGtnOgotICAgICAgICAgICAgbW9kLl9fcGF0aF9fID0gc2VsZi5fZ2V0X19wYXRoX18oKQotICAgICAgICBleGVjKGNvZGUsIG1vZC5fX2RpY3RfXykKLSAgICAgICAgcmV0dXJuIG1vZAotCi0KLWNsYXNzIE1ldGFJbXBvcnRlcihUZXN0SW1wb3J0ZXIpOgotICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBbXQotCi1jbGFzcyBQYXRoSW1wb3J0ZXIoVGVzdEltcG9ydGVyKToKLSAgICBkZWYgX2dldF9fcGF0aF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gW3NlbGYucGF0aF0KLQotCi1jbGFzcyBJbXBvcnRCbG9ja2VyOgotICAgICIiIlBsYWNlIGFuIEltcG9ydEJsb2NrZXIgaW5zdGFuY2Ugb24gc3lzLm1ldGFfcGF0aCBhbmQgeW91Ci0gICAgY2FuIGJlIHN1cmUgdGhlIG1vZHVsZXMgeW91IHNwZWNpZmllZCBjYW4ndCBiZSBpbXBvcnRlZCwgZXZlbgotICAgIGlmIGl0J3MgYSBidWlsdGluLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbmFtZXN0b2Jsb2NrKToKLSAgICAgICAgc2VsZi5uYW1lc3RvYmxvY2sgPSBkaWN0LmZyb21rZXlzKG5hbWVzdG9ibG9jaykKLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGlmIGZ1bGxuYW1lIGluIHNlbGYubmFtZXN0b2Jsb2NrOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiSSBkYXJlIHlvdSIpCi0KLQotY2xhc3MgSW1wV3JhcHBlcjoKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lIGFuZCBub3Qgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgc3VibmFtZSA9IGZ1bGxuYW1lLnNwbGl0KCIuIilbLTFdCi0gICAgICAgIGlmIHN1Ym5hbWUgIT0gZnVsbG5hbWUgYW5kIHNlbGYucGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgaWYgc2VsZi5wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICBwYXRoID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGF0aCA9IFtzZWxmLnBhdGhdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZpbGUsIGZpbGVuYW1lLCBzdHVmZiA9IGltcC5maW5kX21vZHVsZShzdWJuYW1lLCBwYXRoKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gSW1wTG9hZGVyKGZpbGUsIGZpbGVuYW1lLCBzdHVmZikKLQotCi1jbGFzcyBJbXBMb2FkZXI6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgZmlsZW5hbWUsIHN0dWZmKToKLSAgICAgICAgc2VsZi5maWxlID0gZmlsZQotICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKLSAgICAgICAgc2VsZi5zdHVmZiA9IHN0dWZmCi0KLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBtb2QgPSBpbXAubG9hZF9tb2R1bGUoZnVsbG5hbWUsIHNlbGYuZmlsZSwgc2VsZi5maWxlbmFtZSwgc2VsZi5zdHVmZikKLSAgICAgICAgaWYgc2VsZi5maWxlOgotICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmICAjIGZvciBpbnRyb3NwZWN0aW9uCi0gICAgICAgIHJldHVybiBtb2QKLQotCi1jbGFzcyBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYucGF0aCA9IHN5cy5wYXRoWzpdCi0gICAgICAgIHNlbGYubWV0YV9wYXRoID0gc3lzLm1ldGFfcGF0aFs6XQotICAgICAgICBzZWxmLnBhdGhfaG9va3MgPSBzeXMucGF0aF9ob29rc1s6XQotICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCi0gICAgICAgIHNlbGYubW9kdWxlc19iZWZvcmUgPSBzdXBwb3J0Lm1vZHVsZXNfc2V0dXAoKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYucGF0aAotICAgICAgICBzeXMubWV0YV9wYXRoWzpdID0gc2VsZi5tZXRhX3BhdGgKLSAgICAgICAgc3lzLnBhdGhfaG9va3NbOl0gPSBzZWxmLnBhdGhfaG9va3MKLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQotICAgICAgICBzdXBwb3J0Lm1vZHVsZXNfY2xlYW51cCgqc2VsZi5tb2R1bGVzX2JlZm9yZSkKLQotCi1jbGFzcyBJbXBvcnRIb29rc1Rlc3RDYXNlKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKLQotICAgIGRlZiBkb1Rlc3RJbXBvcnRzKHNlbGYsIGltcG9ydGVyPU5vbmUpOgotICAgICAgICBpbXBvcnQgaG9va3Rlc3Rtb2R1bGUKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLnN1YgotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdG1vZHVsZS5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdG1vZHVsZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlciIpCi0gICAgICAgIGlmIGltcG9ydGVyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdG1vZHVsZS5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLl9fbG9hZGVyX18sIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLl9fbG9hZGVyX18sIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLQotICAgICAgICBUZXN0SW1wb3J0ZXIubW9kdWxlc1sncmVsb2FkbW9kdWxlJ10gPSAoRmFsc2UsIHRlc3RfY28pCi0gICAgICAgIGltcG9ydCByZWxvYWRtb2R1bGUKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHJlbG9hZG1vZHVsZSwncmVsb2FkZWQnKSkKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm5ld3JlbAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld3JlbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld3JlbC5zdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Rlc3RwYWNrYWdlLnN1YikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuc3ViZXN0IGFzIHN1YmVzdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YmVzdC5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YmVzdC5zdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Rlc3RwYWNrYWdlLnN1YikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbC5zdWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Rlc3RwYWNrYWdlLnN1YikKLQotICAgICAgICBpbXBvcnQgc3ViCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLmdldF9uYW1lKCksICJzdWIiKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uub2xkYWJzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm9sZGFicy5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uub2xkYWJzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uub2xkYWJzLnN1Yiwgc3ViKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UubmV3YWJzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld2Ficy5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3YWJzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3YWJzLnN1Yiwgc3ViKQotCi0gICAgZGVmIHRlc3RNZXRhUGF0aChzZWxmKToKLSAgICAgICAgaSA9IE1ldGFJbXBvcnRlcigpCi0gICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGkpCi0gICAgICAgIHNlbGYuZG9UZXN0SW1wb3J0cyhpKQotCi0gICAgZGVmIHRlc3RQYXRoSG9vayhzZWxmKToKLSAgICAgICAgc3lzLnBhdGhfaG9va3MuaW5zZXJ0KDAsIFBhdGhJbXBvcnRlcikKLSAgICAgICAgc3lzLnBhdGguYXBwZW5kKHRlc3RfcGF0aCkKLSAgICAgICAgc2VsZi5kb1Rlc3RJbXBvcnRzKCkKLQotICAgIGRlZiB0ZXN0QmxvY2tlcihzZWxmKToKLSAgICAgICAgbW5hbWUgPSAiZXhjZXB0aW9ucyIgICMgYW4gYXJiaXRyYXJ5IGhhcm1sZXNzIGJ1aWx0aW4gbW9kdWxlCi0gICAgICAgIHN1cHBvcnQudW5sb2FkKG1uYW1lKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChJbXBvcnRCbG9ja2VyKG1uYW1lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIG1uYW1lKQotCi0gICAgZGVmIHRlc3RJbXBXcmFwcGVyKHNlbGYpOgotICAgICAgICBpID0gSW1wV3JhcHBlcigpCi0gICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGkpCi0gICAgICAgIHN5cy5wYXRoX2hvb2tzLmluc2VydCgwLCBJbXBXcmFwcGVyKQotICAgICAgICBtbmFtZXMgPSAoCi0gICAgICAgICAgICAiY29sb3JzeXMiLCAidXJsbGliLnBhcnNlIiwgImRpc3R1dGlscy5jb3JlIiwgInN5cyIsCi0gICAgICAgICkKLSAgICAgICAgZm9yIG1uYW1lIGluIG1uYW1lczoKLSAgICAgICAgICAgIHBhcmVudCA9IG1uYW1lLnNwbGl0KCIuIilbMF0KLSAgICAgICAgICAgIGZvciBuIGluIGxpc3Qoc3lzLm1vZHVsZXMpOgotICAgICAgICAgICAgICAgIGlmIG4uc3RhcnRzd2l0aChwYXJlbnQpOgotICAgICAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbl0KLSAgICAgICAgZm9yIG1uYW1lIGluIG1uYW1lczoKLSAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKG1uYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbIl9fZHVtbXlfXyJdKQotICAgICAgICAgICAgIyB0byBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgaGFuZGxlZCB0aGUgaW1wb3J0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtLCAiX19sb2FkZXJfXyIpKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChJbXBvcnRIb29rc1Rlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkKaW5kZXggMmMxN2FjMy4uYjlmZjM0NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYWJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weQpAQCAtMiw3ICsyLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorY2xhc3MgRmluZGVyVGVzdHMobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKIAogICAgICIiIkJhc2ljIHRlc3RzIGZvciBhIGZpbmRlciB0byBwYXNzLiIiIgogCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBhc3MKIAogCi1jbGFzcyBMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSwgbWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKK2NsYXNzIExvYWRlclRlc3RzKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkKaW5kZXggMTQ2NTM4ZC4uYWExZWE0MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDExICsxLDEzIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBidWlsdGluX3V0aWwKIAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCisKIGNsYXNzIEZpbmRlclRlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJUZXN0IGZpbmRfbW9kdWxlKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCkBAIC0xMyw3ICsxNSw3IEBACiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbW1vbiBjYXNlLgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBmb3VuZCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCkKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CkBAIC0zNCwyMiArMzYsMTkgQEAKIAogICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CiAgICAgICAgIGFzc2VydCAnaW1wb3J0bGliJyBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCi0gICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ2ltcG9ydGxpYicpCisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZSgnaW1wb3J0bGliJykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCiAgICAgZGVmIHRlc3RfaWdub3JlX3BhdGgoc2VsZik6CiAgICAgICAgICMgVGhlIHZhbHVlIGZvciAncGF0aCcgc2hvdWxkIGFsd2F5cyB0cmlnZ2VyIGEgZmFpbGVkIGltcG9ydC4KICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSwKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsncGtnJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKK0Zyb3plbl9GaW5kZXJUZXN0cywgU291cmNlX0ZpbmRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkKaW5kZXggOGUxODZlNy4uNGVlOGRjNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDkgKzEsOSBAQAotaW1wb3J0IGltcG9ydGxpYgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgYnVpbHRpbl91dGlsCiAKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdApAQCAtMTMsOCArMTMsOSBAQAogCiAgICAgIiIiVGVzdCBsb2FkX21vZHVsZSgpIGZvciBidWlsdC1pbiBtb2R1bGVzLiIiIgogCi0gICAgdmVyaWZpY2F0aW9uID0geydfX25hbWVfXyc6ICdlcnJubycsICdfX3BhY2thZ2VfXyc6ICcnLAotICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXJ9CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmaWNhdGlvbiA9IHsnX19uYW1lX18nOiAnZXJybm8nLCAnX19wYWNrYWdlX18nOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXJ9CiAKICAgICBkZWYgdmVyaWZ5KHNlbGYsIG1vZHVsZSk6CiAgICAgICAgICIiIlZlcmlmeSB0aGF0IHRoZSBtb2R1bGUgbWF0Y2hlcyBhZ2FpbnN0IHdoYXQgaXQgc2hvdWxkIGhhdmUuIiIiCkBAIC0yMyw4ICsyNCw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fbmFtZV9fLCBzeXMubW9kdWxlcykKIAotICAgIGxvYWRfbW9kdWxlID0gc3RhdGljbWV0aG9kKGxhbWJkYSBuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKG5hbWUpKQorICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbW1vbiBjYXNlLgpAQCAtNjEsNDUgKzYyLDQ3IEBACiAgICAgZGVmIHRlc3RfYWxyZWFkeV9pbXBvcnRlZChzZWxmKToKICAgICAgICAgIyBVc2luZyB0aGUgbmFtZSBvZiBhIG1vZHVsZSBhbHJlYWR5IGltcG9ydGVkIGJ1dCBub3QgYSBidWlsdC1pbiBzaG91bGQKICAgICAgICAgIyBzdGlsbCBmYWlsLgotICAgICAgICBhc3NlcnQgaGFzYXR0cihpbXBvcnRsaWIsICdfX2ZpbGVfXycpICAjIE5vdCBhIGJ1aWx0LWluLgorICAgICAgICBhc3NlcnQgaGFzYXR0cih1bml0dGVzdCwgJ19fZmlsZV9fJykgICMgTm90IGEgYnVpbHQtaW4uCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZSgnaW1wb3J0bGliJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ2ltcG9ydGxpYicpCisgICAgICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICd1bml0dGVzdCcpCiAKIAotY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCisKKworY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIEluc3BlY3RMb2FkZXIgbWV0aG9kcyBmb3IgQnVpbHRpbkltcG9ydGVyLiIiIgogCiAgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CiAgICAgICAgICMgVGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5nZXRfY29kZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0KQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKICAgICAgICAgIyBUaGVyZSBpcyBubyBzb3VyY2UuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X3NvdXJjZShidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9zb3VyY2UoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgQ2Fubm90IGJlIGEgcGFja2FnZS4KLSAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5pc19wYWNrYWdlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuaXNfcGFja2FnZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9ub3RfYnVpbHRpbihzZWxmKToKICAgICAgICAgIyBNb2R1bGVzIG5vdCBidWlsdC1pbiBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWV0aF9uYW1lKQorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1ldGhfbmFtZSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CiAgICAgICAgICAgICBtZXRob2QoYnVpbHRpbl91dGlsLkJBRF9OQU1FKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhidWlsdGluX3V0aWwuQkFEX05BTUUpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChMb2FkZXJUZXN0cywgSW5zcGVjdExvYWRlclRlc3RzKQorRnJvemVuX0luc3BlY3RMb2FkZXJUZXN0cywgU291cmNlX0luc3BlY3RMb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBJbnNwZWN0TG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKaW5kZXggNzZjNTNlNC4uYmI3NDMyMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CkBAIC0xLDIyICsxLDI1IEBACi1pbXBvcnQgaW1wCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCisKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBleHRfdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIAorCitAdW5pdHRlc3Quc2tpcElmKGV4dF91dGlsLkZJTEVOQU1FIGlzIE5vbmUsICdfdGVzdGNhcGkgbm90IGF2YWlsYWJsZScpCiBAdXRpbC5jYXNlX2luc2Vuc2l0aXZlX3Rlc3RzCi1jbGFzcyBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEV4dGVuc2lvbk1vZHVsZUNhc2VTZW5zaXRpdml0eVRlc3Q6CiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZik6CiAgICAgICAgIGdvb2RfbmFtZSA9IGV4dF91dGlsLk5BTUUKICAgICAgICAgYmFkX25hbWUgPSBnb29kX25hbWUudXBwZXIoKQogICAgICAgICBhc3NlcnQgZ29vZF9uYW1lICE9IGJhZF9uYW1lCi0gICAgICAgIGZpbmRlciA9IF9ib290c3RyYXAuRmlsZUZpbmRlcihleHRfdXRpbC5QQVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfYm9vdHN0cmFwLkV4dGVuc2lvbkZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ib290c3RyYXAuRVhURU5TSU9OX1NVRkZJWEVTKSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihleHRfdXRpbC5QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShiYWRfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZlKHNlbGYpOgpAQCAtMzcsMTQgKzQwLDEwIEBACiAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLmZpbmRfbW9kdWxlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGxvYWRlciwgJ2xvYWRfbW9kdWxlJykpCiAKLQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBpZiBleHRfdXRpbC5GSUxFTkFNRSBpcyBOb25lOgotICAgICAgICByZXR1cm4KLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0KQorRnJvemVuX0V4dGVuc2lvbkNhc2VTZW5zaXRpdml0eSwgU291cmNlX0V4dGVuc2lvbkNhc2VTZW5zaXRpdml0eSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0LAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQppbmRleCBhNjNjZmRiLi4xMGU3OGNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDE3ICsxLDIwIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKK2Zyb20gLi4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgdW5pdHRlc3QKIAorCiBjbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCB0aGUgZmluZGVyIGZvciBleHRlbnNpb24gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIGltcG9ydGVyID0gbWFjaGluZXJ5LkZpbGVGaW5kZXIodXRpbC5QQVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCisgICAgICAgIGltcG9ydGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcih1dGlsLlBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKICAgICAgICAgcmV0dXJuIGltcG9ydGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpAQCAtMzYsMTEgKzM5LDkgQEAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmZpbmRfbW9kdWxlKCdhc2RmamtsOycpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKaW5kZXggY2E1YWYyMC4uMWU4YWZiYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQpAQCAtMSw4ICsxLDkgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBleHRfdXRpbAogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCiAKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEzLDggKzE0LDggQEAKICAgICAiIiJUZXN0IGxvYWRfbW9kdWxlKCkgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLiIiIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLmxvYWRlciA9IG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dF91dGlsLk5BTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQorICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQogCiAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgcmV0dXJuIHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQpAQCAtMzYsNyArMzcsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXh0X3V0aWwuTkFNRSwgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLl9fbG9hZGVyX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgTm8gZXh0ZW5zaW9uIG1vZHVsZSBhcyBfX2luaXRfXyBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCkBAIC02NCwxNiArNjUsMTUgQEAKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShleHRfdXRpbC5OQU1FKSkKLSAgICAgICAgZm9yIHN1ZmZpeCBpbiBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgorICAgICAgICBmb3Igc3VmZml4IGluIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUzoKICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3NvbWUnLCAncGF0aCcsICdwa2cnLCAnX19pbml0X18nICsgc3VmZml4KQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoJ3BrZycsIHBhdGgpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKCdwa2cnLCBwYXRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvYWRlci5pc19wYWNrYWdlKCdwa2cnKSkKIAorRnJvemVuX0xvYWRlclRlc3RzLCBTb3VyY2VfTG9hZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTG9hZGVyVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KExvYWRlclRlc3RzKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQppbmRleCAxZDk2OWExLi40OWQ2NzM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CkBAIC0xLDMyICsxLDMyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Citmcm9tIC4uIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsCiAKK21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBQYXRoSG9va1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFBhdGhIb29rVGVzdHM6CiAKICAgICAiIiJUZXN0IHRoZSBwYXRoIGhvb2sgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLiIiIgogICAgICMgWFhYIFNob3VsZCBpdCBvbmx5IHN1Y2NlZWQgZm9yIHByZS1leGlzdGluZyBkaXJlY3Rvcmllcz8KICAgICAjIFhYWCBTaG91bGQgaXQgb25seSB3b3JrIGZvciBkaXJlY3RvcmllcyBjb250YWluaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGU/CiAKICAgICBkZWYgaG9vayhzZWxmLCBlbnRyeSk6Ci0gICAgICAgIHJldHVybiBtYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soKG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpKGVudHJ5KQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soCisgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpKGVudHJ5KQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgIyBQYXRoIGhvb2sgc2hvdWxkIGhhbmRsZSBhIGRpcmVjdG9yeSB3aGVyZSBhIGtub3duIGV4dGVuc2lvbiBtb2R1bGUKICAgICAgICAgIyBleGlzdHMuCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYuaG9vayh1dGlsLlBBVEgpLCAnZmluZF9tb2R1bGUnKSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQYXRoSG9va1Rlc3RzKQorRnJvemVuX1BhdGhIb29rc1Rlc3RzLCBTb3VyY2VfUGF0aEhvb2tzVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXRoSG9va1Rlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKaW5kZXggYTI2NmRkOS4uOGQwODlmMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKQEAgLTEsNCArMSwzIEBACi1pbXBvcnQgaW1wCiBmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weQppbmRleCBmYTBjMmEwLi4xZDM3YzcyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5CkBAIC00LDcgKzQsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgRmluZGVyVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKK2NsYXNzIEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBhYmMuRmluZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCBmaW5kaW5nIGZyb3plbiBtb2R1bGVzLiIiIgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkKaW5kZXggNGI4ZWMxNS4uZWIxZjAxNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weQpAQCAtMSwxMSArMSwxMyBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQotaW1wb3J0IGltcAotaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQKIAotY2xhc3MgTG9hZGVyVGVzdHMoYWJjLkxvYWRlclRlc3RzKToKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dAoraW1wb3J0IHR5cGVzCisKKworY2xhc3MgTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIGFiYy5Mb2FkZXJUZXN0cyk6CiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX2hlbGxvX18nKSwgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgpAQCAtMjQsNyArMjYsNyBAQAogICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fJykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfX3BoZWxsb19fJywKICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICdfX3BoZWxsb19fJywKLSAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFsnX19waGVsbG9fXyddLAorICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW10sCiAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgpAQCAtODUsNyArODcsNyBAQAogICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CiAgICAgICAgICAgICBjb2RlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9jb2RlKG5hbWUpCi0gICAgICAgICAgICBtb2QgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgZXhlYyhjb2RlLCBtb2QuX19kaWN0X18pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2QsICdpbml0aWFsaXplZCcpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fbG9hZGVyX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1ZGFhMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5CkBAIC0wLDAgKzEsNDQgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gLi4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAorCisKK2NsYXNzIExvYWRlck1vY2s6CisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICBzeXMubW9kdWxlc1tmdWxsbmFtZV0gPSBzZWxmLm1vZHVsZQorICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworCitjbGFzcyBMb2FkZXJBdHRyaWJ1dGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9fX2xvYWRlcl9fX21pc3Npbmcoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBsb2FkZXIgPSBMb2FkZXJNb2NrKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnYmxhaCcpLCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2xvYWRlcl0pOgorICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKworICAgIGRlZiB0ZXN0X19fbG9hZGVyX19faXNfTm9uZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gTm9uZQorICAgICAgICBsb2FkZXIgPSBMb2FkZXJNb2NrKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnYmxhaCcpLCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2xvYWRlcl0pOgorICAgICAgICAgICAgcmV0dXJuZWRfbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkKaW5kZXggM2Q0Y2Q5NC4uYmY3NDkzNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5CkBAIC0xLDcgKzEsNyBAQAogZnJvbSAuLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRsaWJfdGVzdF91dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIApAQCAtMzcsNyArMzcsNyBAQAogICAgIGRlZiB0ZXN0X25vbmV4aXN0ZW50X2Zyb21saXN0X2VudHJ5KHNlbGYpOgogICAgICAgICAjIElmIHNvbWV0aGluZyBpbiBmcm9tbGlzdCBkb2Vzbid0IGV4aXN0LCB0aGF0J3Mgb2theS4KICAgICAgICAgIyBpc3N1ZTE1NzE1Ci0gICAgICAgIG1vZCA9IGltcC5uZXdfbW9kdWxlKCdmaW5lJykKKyAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZSgnZmluZScpCiAgICAgICAgIG1vZC5fX3BhdGhfXyA9IFsnWFhYJ10KICAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W0JhZExvYWRlckZpbmRlcl0pOgogICAgICAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLnVuY2FjaGUoJ2ZpbmUnKToKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgIyBJZiBzb21ldGhpbmcgaW4gZnJvbWxpc3QgdHJpZ2dlcnMgYW4gZXhjZXB0aW9uIG5vdCByZWxhdGVkIHRvIG5vdAogICAgICAgICAjIGV4aXN0aW5nLCBsZXQgdGhhdCBleGNlcHRpb24gcHJvcGFnYXRlLgogICAgICAgICAjIGlzc3VlMTUzMTYKLSAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUoJ2ZpbmUnKQorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdmaW5lJykKICAgICAgICAgbW9kLl9fcGF0aF9fID0gWydYWFgnXQogICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bQmFkTG9hZGVyRmluZGVyXSk6CiAgICAgICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwudW5jYWNoZSgnZmluZScpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CmluZGV4IGMxNmMzMzcuLmU0NDA1NjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKQEAgLTEsNyArMSw2IEBACiAiIiJUZXN0IHRoYXQgdGhlIHNlbWFudGljcyByZWxhdGluZyB0byB0aGUgJ2Zyb21saXN0JyBhcmd1bWVudCBhcmUgY29ycmVjdC4iIiIKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAotaW1wb3J0IGltcAogaW1wb3J0IHVuaXR0ZXN0CiAKIGNsYXNzIFJldHVyblZhbHVlKHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKaW5kZXggZDgyYjdmNi4uOTgzOTFiZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKQEAgLTgyLDExICs4MiwxMSBAQAogICAgICAgICBwYXRoID0gJycKICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX21vZHVsZXMobW9kdWxlKQotICAgICAgICBob29rID0gaW1wb3J0X3V0aWwubW9ja19wYXRoX2hvb2sob3MuY3VyZGlyLCBpbXBvcnRlcj1pbXBvcnRlcikKKyAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKG9zLmdldGN3ZCgpLCBpbXBvcnRlcj1pbXBvcnRlcikKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoPVtwYXRoXSwgcGF0aF9ob29rcz1baG9va10pOgogICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5jdXJkaXIsIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5nZXRjd2QoKSwgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCiAKICAgICBkZWYgdGVzdF9Ob25lX29uX3N5c19wYXRoKHNlbGYpOgogICAgICAgICAjIFB1dHRpbmcgTm9uZSBpbiBzeXMucGF0aFswXSBjYXVzZWQgYW4gaW1wb3J0IHJlZ3Jlc3Npb24gZnJvbSBQeXRob24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDkxMmI2Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MDYgKzAsMCBAQAotaW1wb3J0IGltcG9ydGxpYgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYwotCi1mcm9tIC4uIGltcG9ydCBhYmMgYXMgdGVzdGluZ19hYmMKLWZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotCi1pbXBvcnQgaW1wCi1pbXBvcnQgaW5zcGVjdAotaW1wb3J0IGlvCi1pbXBvcnQgbWFyc2hhbAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdHlwZXMKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHdhcm5pbmdzCi0KLQotY2xhc3MgU291cmNlT25seUxvYWRlck1vY2soYWJjLlNvdXJjZUxvYWRlcik6Ci0KLSAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCi0gICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX2NhY2hlZF9fLCBfX3BhY2thZ2VfXywgIgotICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6Ci0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHNlbGYucGF0aCA9PSBwYXRoCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gJzxtb2R1bGU+JwotCi0KLWNsYXNzIFNvdXJjZUxvYWRlck1vY2soU291cmNlT25seUxvYWRlck1vY2spOgotCi0gICAgc291cmNlX210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG1hZ2ljPWltcC5nZXRfbWFnaWMoKSk6Ci0gICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aCkKLSAgICAgICAgc2VsZi5ieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5zb3VyY2Vfc2l6ZSA9IGxlbihzZWxmLnNvdXJjZSkKLSAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShtYWdpYykKLSAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5zb3VyY2VfbXRpbWUpKQotICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLnNvdXJjZV9zaXplKSkKLSAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNlbGYuc291cmNlLCBzZWxmLnBhdGgsICdleGVjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCi0gICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZXMoZGF0YSkKLSAgICAgICAgc2VsZi53cml0dGVuID0ge30KLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCA9PSBzZWxmLnBhdGg6Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQotICAgICAgICBlbGlmIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgotICAgICAgICBhc3NlcnQgcGF0aCA9PSBzZWxmLnBhdGgKLSAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnNvdXJjZV9tdGltZSwgJ3NpemUnOiBzZWxmLnNvdXJjZV9zaXplfQotCi0gICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgotICAgICAgICBzZWxmLndyaXR0ZW5bcGF0aF0gPSBieXRlcyhkYXRhKQotICAgICAgICByZXR1cm4gcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGgKLQotCi1jbGFzcyBQeUxvYWRlck1vY2soYWJjLlB5TG9hZGVyKToKLQotICAgICMgR2xvYmFscyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIGZvciBhbGwgbW9kdWxlcy4KLSAgICBzb3VyY2UgPSAoYiJfID0gJzo6Jy5qb2luKFtfX25hbWVfXywgX19maWxlX18sIF9fcGFja2FnZV9fLCAiCi0gICAgICAgICAgICAgIGIicmVwcihfX2xvYWRlcl9fKV0pIikKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiVGFrZSBhIGRpY3Qgb2YgJ21vZHVsZV9uYW1lOiBwYXRoJyBwYWlyaW5ncy4KLQotICAgICAgICBQYXRocyBzaG91bGQgaGF2ZSBubyBmaWxlIGV4dGVuc2lvbiwgYWxsb3dpbmcgcGFja2FnZXMgdG8gYmUgZGVub3RlZCBieQotICAgICAgICBlbmRpbmcgaW4gJ19faW5pdF9fJy4KLQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5tb2R1bGVfcGF0aHMgPSBkYXRhCi0gICAgICAgIHNlbGYucGF0aF90b19tb2R1bGUgPSB7dmFsOmtleSBmb3Iga2V5LHZhbCBpbiBkYXRhLml0ZW1zKCl9Ci0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggbm90IGluIHNlbGYucGF0aF90b19tb2R1bGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF9maWxlbmFtZShuYW1lKSkKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdID09ICdfX2luaXRfXycKLQotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJTaWxlbmNlIGRlcHJlY2F0aW9uIHdhcm5pbmcuIiIiCi0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCi0gICAgICAgICAgICBwYXRoID0gc3VwZXIoKS5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgICAgIGFzc2VydCBsZW4odykgPT0gMQotICAgICAgICAgICAgYXNzZXJ0IGlzc3ViY2xhc3Mod1swXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmKToKLSAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKLQotCi1jbGFzcyBQeUxvYWRlckNvbXBhdE1vY2soUHlMb2FkZXJNb2NrKToKLQotICAgICIiIk1vY2sgdGhhdCBtYXRjaGVzIHdoYXQgaXMgc3VnZ2VzdGVkIHRvIGhhdmUgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlCi0gICAgZnJvbSBQeXRob24gMy4xIG9ud2FyZHMuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW2Z1bGxuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotCi0gICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIFB5UHljTG9hZGVyTW9jayhhYmMuUHlQeWNMb2FkZXIsIFB5TG9hZGVyTW9jayk6Ci0KLSAgICBkZWZhdWx0X210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgYmM9e30pOgotICAgICAgICAiIiJJbml0aWFsaXplIG1vY2suCi0KLSAgICAgICAgJ2JjJyBpcyBhIGRpY3Qga2V5ZWQgb24gYSBtb2R1bGUncyBuYW1lLiBUaGUgdmFsdWUgaXMgZGljdCB3aXRoCi0gICAgICAgIHBvc3NpYmxlIGtleXMgb2YgJ3BhdGgnLCAnbXRpbWUnLCAnbWFnaWMnLCBhbmQgJ2JjJy4gRXhjZXB0IGZvciAncGF0aCcsCi0gICAgICAgIGVhY2ggb2YgdGhvc2Uga2V5cyBjb250cm9sIGlmIGFueSBwYXJ0IG9mIGNyZWF0ZWQgYnl0ZWNvZGUgaXMgdG8KLSAgICAgICAgZGV2aWF0ZSBmcm9tIGRlZmF1bHQgdmFsdWVzLgotCi0gICAgICAgICIiIgotICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNvdXJjZSkKLSAgICAgICAgc2VsZi5tb2R1bGVfYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLnBhdGhfdG9fYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGggPSB7fQotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBiYy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5wYXRoX3RvX2J5dGVjb2RlW2RhdGFbJ3BhdGgnXV0gPSBuYW1lCi0gICAgICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGhbbmFtZV0gPSBkYXRhWydwYXRoJ10KLSAgICAgICAgICAgIG1hZ2ljID0gZGF0YS5nZXQoJ21hZ2ljJywgaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3dfbG9uZyhkYXRhLmdldCgnbXRpbWUnLCBzZWxmLmRlZmF1bHRfbXRpbWUpKQotICAgICAgICAgICAgc291cmNlX3NpemUgPSBpbXBvcnRsaWIuX3dfbG9uZyhsZW4oc2VsZi5zb3VyY2UpICYgMHhGRkZGRkZGRikKLSAgICAgICAgICAgIGlmICdiYycgaW4gZGF0YToKLSAgICAgICAgICAgICAgICBiYyA9IGRhdGFbJ2JjJ10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYmMgPSBzZWxmLmNvbXBpbGVfYmMobmFtZSkKLSAgICAgICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gbWFnaWMgKyBtdGltZSArIHNvdXJjZV9zaXplICsgYmMKLQotICAgIGRlZiBjb21waWxlX2JjKHNlbGYsIG5hbWUpOgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYubW9kdWxlX3BhdGhzLmdldChuYW1lLCAnPHRlc3Q+Jykgb3IgJzx0ZXN0PicKLSAgICAgICAgY29kZSA9IGNvbXBpbGUoc2VsZi5zb3VyY2UsIHNvdXJjZV9wYXRoLCAnZXhlYycpCi0gICAgICAgIHJldHVybiBtYXJzaGFsLmR1bXBzKGNvZGUpCi0KLSAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1lIGluIHNlbGYubW9kdWxlX3BhdGhzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdF9tdGltZQotICAgICAgICBlbGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiBieXRlY29kZV9wYXRoKHNlbGYsIG5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5ieXRlY29kZV90b19wYXRoW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfcGF0aHM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBuYW1lLCBieXRlY29kZSk6Ci0gICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gYnl0ZWNvZGUKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCBpbiBzZWxmLnBhdGhfdG9fbW9kdWxlOgotICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgZWxpZiBwYXRoIGluIHNlbGYucGF0aF90b19ieXRlY29kZToKLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLnBhdGhfdG9fYnl0ZWNvZGVbcGF0aF0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmlzX3BhY2thZ2UobmFtZSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAnX19pbml0X18nIGluIHNlbGYuYnl0ZWNvZGVfdG9fcGF0aFtuYW1lXQotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIG5hbWUpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzdXBlcigpLmdldF9jb2RlKG5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgbGVuKHcpID09IDEKLSAgICAgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAotCi1jbGFzcyBQeUxvYWRlclRlc3RzKHRlc3RpbmdfYWJjLkxvYWRlclRlc3RzKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyLiIiIgotCi0gICAgbW9ja2VyID0gUHlMb2FkZXJNb2NrCi0KLSAgICBkZWYgZXFfYXR0cnMoc2VsZiwgb2IsICoqa3dhcmdzKToKLSAgICAgICAgZm9yIGF0dHIsIHZhbCBpbiBrd2FyZ3MuaXRlbXMoKToKLSAgICAgICAgICAgIGZvdW5kID0gZ2V0YXR0cihvYiwgYXR0cikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgInt9IGF0dHJpYnV0ZToge30gIT0ge30iLmZvcm1hdChhdHRyLCBmb3VuZCwgdmFsKSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8bW9kdWxlPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignJywgJ3BhdGgnLCAndG8nLCAnbW9kdWxlJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189JycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8cGtnPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsIG5hbWUsICdfX2luaXRfXycpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsCi0gICAgICAgICAgICAgICAgX19wYXRoX189W29zLnBhdGguZGlybmFtZShwYXRoKV0sIF9fcGFja2FnZV9fPW5hbWUsCi0gICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAncGtnLm1vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdwa2cnLCAnbW9kJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189J3BrZycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKQotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBsb2FkZWRfbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWRfbW9kdWxlLCBtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW25hbWVdLCBtb2R1bGUpCi0gICAgICAgIHJldHVybiBtb2NrLCBuYW1lCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBuYW1lID0gIm1vZCIKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKLSAgICAgICAgbW9kdWxlLmJsYWggPSBOb25lCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tuYW1lXSwgbW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYmxhaCcpKQotICAgICAgICByZXR1cm4gbW9jawotCi0gICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICJtb2QiCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICByZXR1cm4gbW9jawotCi0KLWNsYXNzIFB5TG9hZGVyQ29tcGF0VGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgdGhlIHN1Z2dlc3RlZCBjb2RlIHRvIG1ha2UgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlIGZyb20KLSAgICBQeXRob24gMy4xIGZvcndhcmQgd29ya3MuIiIiCi0KLSAgICBtb2NrZXIgPSBQeUxvYWRlckNvbXBhdE1vY2sKLQotCi1jbGFzcyBQeUxvYWRlckludGVyZmFjZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gc291cmNlX3BhdGgoKQotICAgIGRvZXNuJ3QgcmV0dXJuIGEgcGF0aCBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkLiIiIgotCi0gICAgZGVmIHRlc3Rfbm9fc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgTm8gc291cmNlIHBhdGggc2hvdWxkIGxlYWQgdG8gSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHt9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfaXNfTm9uZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX3dpdGhfc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgZ2V0X2ZpbGVuYW1lKCkgc2hvdWxkIHJldHVybiB3aGF0IHNvdXJjZV9wYXRoKCkgcmV0dXJucy4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnc291cmNlJykKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9maWxlbmFtZShuYW1lKSwgcGF0aCkKLQotICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZV9ub19zb3VyY2VfcGF0aChzZWxmKToKLSAgICAgICAgIyBnZXRfZmlsZW5hbWUoKSBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IgaWYgc291cmNlX3BhdGggcmV0dXJucyBOb25lLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmdldF9maWxlbmFtZShuYW1lKQotCi0KLWNsYXNzIFB5UHljTG9hZGVyVGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlci4iIiIKLQotICAgIG1vY2tlciA9IFB5UHljTG9hZGVyTW9jawotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiB2ZXJpZnlfYnl0ZWNvZGUoc2VsZiwgbW9jaywgbmFtZSk6Ci0gICAgICAgIGFzc2VydCBuYW1lIGluIG1vY2subW9kdWxlX3BhdGhzCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3JfbG9uZyhtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs0OjhdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCAxKQotICAgICAgICBzb3VyY2Vfc2l6ZSA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzg6MTJdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vY2suc291cmNlKSAmIDB4RkZGRkZGRkYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLl9yX2xvbmcoc291cmNlX3NpemUpKQotICAgICAgICBiYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzEyOl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYywgbW9jay5jb21waWxlX2JjKG5hbWUpKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X3BhY2thZ2UoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG1vY2ssIG5hbWUgPSBzdXBlcigpLnRlc3RfbGFja2luZ19wYXJlbnQoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZV9yZXVzZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZSgpCi0KLSAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3RfdW5sb2FkYWJsZSgpCi0KLQotY2xhc3MgUHlQeWNMb2FkZXJJbnRlcmZhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IGZvciB0aGUgaW50ZXJmYWNlIG9mIGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lX2NoZWNrKHNlbGYsIHNyY19wYXRoLCBiY19wYXRoLCBleHBlY3QpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogc3JjX3BhdGh9LCB7bmFtZTogeydwYXRoJzogYmNfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIGFzc2VydCBtb2NrLnNvdXJjZV9wYXRoKG5hbWUpID09IHNyY19wYXRoCi0gICAgICAgICAgICBhc3NlcnQgbW9jay5ieXRlY29kZV9wYXRoKG5hbWUpID09IGJjX3BhdGgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfZmlsZW5hbWUobmFtZSksIGV4cGVjdCkKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdoZW4gc291cmNlIGFuZCBieXRlY29kZSBwYXRocyBwcmVzZW50LCByZXR1cm4gdGhlIHNvdXJjZSBwYXRoLgotICAgICAgICBzZWxmLmdldF9maWxlbmFtZV9jaGVjaygnc291cmNlX3BhdGgnLCAnYmNfcGF0aCcsICdzb3VyY2VfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX3NvdXJjZV9ub19iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIHNvdXJjZSBidXQgbm8gYmMsIHJldHVybiBzb3VyY2UgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soJ3NvdXJjZV9wYXRoJywgTm9uZSwgJ3NvdXJjZV9wYXRoJykKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfbm9fc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdpdGggbm90IHNvdXJjZSBidXQgYmMsIHJldHVybiB0aGUgYmMgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soTm9uZSwgJ2JjX3BhdGgnLCAnYmNfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX25vX3NvdXJjZV9vcl9iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIG5vIHNvdXJjZSBvciBiYywgcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwge25hbWU6IHsncGF0aCc6IE5vbmV9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2suZ2V0X2ZpbGVuYW1lKG5hbWUpCi0KLQotY2xhc3MgU2tpcFdyaXRpbmdCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgdGhhdCBieXRlY29kZSBpcyBwcm9wZXJseSBoYW5kbGVkIGJhc2VkIG9uCi0gICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBkb250X3dyaXRlX2J5dGVjb2RlCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydElzTm90KG5hbWUgaW4gbW9jay5tb2R1bGVfYnl0ZWNvZGUsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KFRydWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KEZhbHNlKQotCi0KLWNsYXNzIFJlZ2VuZXJhdGVkQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgYnl0ZWNvZGUgaXMgcmVnZW5lcmF0ZWQgYXMgZXhwZWN0ZWQuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHRlc3RfZGlmZmVyZW50X21hZ2ljKHNlbGYpOgotICAgICAgICAjIEEgZGlmZmVyZW50IG1hZ2ljIG51bWJlciBzaG91bGQgbGVhZCB0byBuZXcgYnl0ZWNvZGUuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYWRfbWFnaWMgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGFzc2VydCBiYWRfbWFnaWMgIT0gaW1wLmdldF9tYWdpYygpCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2QuYnl0ZWNvZGUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFnaWMnOiBiYWRfbWFnaWN9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdGVzdF9vbGRfbXRpbWUoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgd2l0aCBhbiBvbGRlciBtdGltZSBzaG91bGQgYmUgcmVnZW5lcmF0ZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBvbGRfbXRpbWUgPSBQeVB5Y0xvYWRlck1vY2suZGVmYXVsdF9tdGltZSAtIDEKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSwKLSAgICAgICAgICAgICAgICB7bmFtZTogeydwYXRoJzogJ3BhdGgvdG8vbW9kLmJ5dGVjb2RlJywgJ210aW1lJzogb2xkX210aW1lfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtdGltZSA9IGltcG9ydGxpYi5fcl9sb25nKG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzQ6OF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWUsIFB5UHljTG9hZGVyTW9jay5kZWZhdWx0X210aW1lKQotCi0KLWNsYXNzIEJhZEJ5dGVjb2RlRmFpbHVyZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgaW1wb3J0IGZhaWx1cmVzIHdoZW4gdGhlcmUgaXMgbm8gc291cmNlIGFuZCBwYXJ0cyBvZiB0aGUgYnl0ZWNvZGUKLSAgICBpcyBiYWQuIiIiCi0KLSAgICBkZWYgdGVzdF9iYWRfbWFnaWMoc2VsZik6Ci0gICAgICAgICMgQSBiYWQgbWFnaWMgbnVtYmVyIHNob3VsZCBsZWFkIHRvIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmFkX21hZ2ljID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiYyA9IHtuYW1lOgotICAgICAgICAgICAgICAgIHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwKLSAgICAgICAgICAgICAgICAgJ21hZ2ljJzogYmFkX21hZ2ljfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgTWlzc2luZyBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhbiBFT0ZFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJjID0ge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwgJ2JjJzogYicnfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfYmFkX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIE1hbGZvcm1lZCBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhIFZhbHVlRXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYyA9IHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksICdiYyc6IGInMTIzNCd9fQotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwgYmMpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1kZWYgcmFpc2VfSW1wb3J0RXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKLSAgICByYWlzZSBJbXBvcnRFcnJvcgotCi1jbGFzcyBNaXNzaW5nUGF0aHNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHdoYXQgaGFwcGVucyB3aGVuIGEgc291cmNlIG9yIGJ5dGVjb2RlIHBhdGggZG9lcyBub3QgZXhpc3QgKGVpdGhlcgotICAgIGZyb20gKl9wYXRoIHJldHVybmluZyBOb25lIG9yIHJhaXNpbmcgSW1wb3J0RXJyb3IpLiIiIgotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfTm9uZShzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBzaG91bGQgYmUgdXNlZCB3aGVuIHNvdXJjZV9wYXRoIHJldHVybnMgTm9uZSwgYWxvbmcgd2l0aAotICAgICAgICAjIF9fZmlsZV9fIGJlaW5nIHNldCB0byB0aGUgYnl0ZWNvZGUgcGF0aC4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJ5dGVjb2RlX3BhdGggPSAncGF0aC90by9tb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCB7bmFtZTogeydwYXRoJzogYnl0ZWNvZGVfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIGJ5dGVjb2RlX3BhdGgpCi0KLSAgICAjIFRlc3RpbmcgZm9yIGJ5dGVjb2RlX3BhdGggcmV0dXJuaW5nIE5vbmUgaGFuZGxlZCBieSBhbGwgdGVzdHMgd2hlcmUgbm8KLSAgICAjIGJ5dGVjb2RlIGluaXRpYWxseSBleGlzdHMuCi0KLSAgICBkZWYgdGVzdF9hbGxfcGF0aHNfTm9uZShzZWxmKToKLSAgICAgICAgIyBJZiBhbGwgKl9wYXRoIG1ldGhvZHMgcmV0dXJuIE5vbmUsIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zb3VyY2VfcGF0aF9JbXBvcnRFcnJvcihzZWxmKToKLSAgICAgICAgIyBBbiBJbXBvcnRFcnJvciBmcm9tIHNvdXJjZV9wYXRoIHNob3VsZCB0cmlnZ2VyIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7fSwge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZCcpfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV9wYXRoX0ltcG9ydEVycm9yKHNlbGYpOgotICAgICAgICAjIEFuIEltcG9ydEVycm9yIGZyb20gYnl0ZWNvZGVfcGF0aCBzaG91bGQgdHJpZ2dlciBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIGJhZF9tZXRoID0gdHlwZXMuTWV0aG9kVHlwZShyYWlzZV9JbXBvcnRFcnJvciwgbW9jaykKLSAgICAgICAgbW9jay5ieXRlY29kZV9wYXRoID0gYmFkX21ldGgKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZiwgKiwgaXNfcGFja2FnZT1UcnVlLCAqKmt3YXJncyk6Ci0gICAgICAgIHNlbGYucGFja2FnZSA9ICdwa2cnCi0gICAgICAgIGlmIGlzX3BhY2thZ2U6Ci0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnX19pbml0X18ucHknKQotICAgICAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5wYWNrYWdlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCi0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnLicuam9pbihbJ21vZCcsICdweSddKSkKLSAgICAgICAgICAgIHNlbGYubmFtZSA9ICcuJy5qb2luKFtzZWxmLnBhY2thZ2UsIG1vZHVsZV9uYW1lXSkKLSAgICAgICAgc2VsZi5jYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubG9hZGVyX21vY2soc2VsZi5wYXRoLCAqKmt3YXJncykKLQotICAgIGRlZiB2ZXJpZnlfbW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBzZWxmLmxvYWRlcikKLSAgICAgICAgdmFsdWVzID0gbW9kdWxlLl8uc3BsaXQoJzo6JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF0sIHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV0sIHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMl0sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1szXSwgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1s0XSwgcmVwcihzZWxmLmxvYWRlcikpCi0KLSAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QpOgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYucGF0aAotICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYuY2FjaGVkCi0gICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNlbGYucGFja2FnZQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYubG9hZGVyCi0gICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtdCi0gICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKLQotCi1jbGFzcyBTb3VyY2VPbmx5TG9hZGVyVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgotCi0gICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBmb3Igc291cmNlLW9ubHkgbG9hZGluZy4KLQotICAgIFJlbG9hZCB0ZXN0aW5nIGlzIHN1YnN1bWVkIGJ5IHRoZSB0ZXN0cyBmb3IKLSAgICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KLQotICAgICIiIgotCi0gICAgbG9hZGVyX21vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jawotCi0gICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLgotICAgICAgICAjIElmIGFuIElPRXJyb3IgaXMgcmFpc2VkIGJ5IGdldF9kYXRhIHRoZW4gcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIGV4cGVjdGVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLnNvdXJjZS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSksIGV4cGVjdGVkX3NvdXJjZSkKLSAgICAgICAgZGVmIHJhaXNlX0lPRXJyb3IocGF0aCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhID0gcmFpc2VfSU9FcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBzZWxmLm5hbWUpCi0KLSAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgotICAgICAgICAjIFByb3Blcmx5IGRldGVjdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSArICcuX19pbml0X18nKSkKLQotICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgotICAgICAgICAjIFZlcmlmeSB0aGUgY29kZSBvYmplY3QgaXMgY3JlYXRlZC4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKLSAgICAgICAgIyBMb2FkaW5nIGEgbW9kdWxlIHNob3VsZCBzZXQgX19uYW1lX18sIF9fbG9hZGVyX18sIF9fcGFja2FnZV9fLAotICAgICAgICAjIF9fcGF0aF9fIChmb3IgcGFja2FnZXMpLCBfX2ZpbGVfXywgYW5kIF9fY2FjaGVkX18uCi0gICAgICAgICMgVGhlIG1vZHVsZSBzaG91bGQgYWxzbyBiZSBwdXQgaW50byBzeXMubW9kdWxlcy4KLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhdGhfXywgW29zLnBhdGguZGlybmFtZShzZWxmLnBhdGgpXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzeXMubW9kdWxlcykKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2Vfc2V0dGluZ3Moc2VsZik6Ci0gICAgICAgICMgX19wYWNrYWdlX18gbmVlZHMgdG8gYmUgc2V0LCB3aGlsZSBfX3BhdGhfXyBpcyBzZXQgb24gaWYgdGhlIG1vZHVsZQotICAgICAgICAjIGlzIGEgcGFja2FnZS4KLSAgICAgICAgIyBUZXN0aW5nIHRoZSB2YWx1ZXMgZm9yIGEgcGFja2FnZSBhcmUgY292ZXJlZCBieSB0ZXN0X2xvYWRfbW9kdWxlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCi0KLSAgICBkZWYgdGVzdF9nZXRfc291cmNlX2VuY29kaW5nKHNlbGYpOgotICAgICAgICAjIFNvdXJjZSBpcyBjb25zaWRlcmVkIGVuY29kZWQgaW4gVVRGLTggYnkgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlCi0gICAgICAgICMgc3BlY2lmaWVkIGJ5IGFuIGVuY29kaW5nIGxpbmUuCi0gICAgICAgIHNvdXJjZSA9ICJfID0gJ8O8JyIKLSAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLSAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBsYXRpbi0xXG5fID0gw7wiCi0gICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLQotCi1AdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAic3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgaXMgdHJ1ZSIpCi1jbGFzcyBTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKLQotICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIncyB1c2Ugb2YgYnl0ZWNvZGUuCi0KLSAgICBTb3VyY2Utb25seSB0ZXN0aW5nIGhhbmRsZWQgYnkgU291cmNlT25seUxvYWRlclRlc3RzLgotCi0gICAgIiIiCi0KLSAgICBsb2FkZXJfbW9jayA9IFNvdXJjZUxvYWRlck1vY2sKLQotICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCwgKiwgYnl0ZWNvZGVfd3JpdHRlbj1GYWxzZSk6Ci0gICAgICAgIHN1cGVyKCkudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0gICAgICAgIGlmIGJ5dGVjb2RlX3dyaXR0ZW46Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX3NpemUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgotICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKLSAgICAgICAgIyBTYW5pdHkgY2hlY2sKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKLSAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgotICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKLSAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCi0gICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCi0gICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCi0KLSAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKLSAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCi0gICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKLSAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0KLSAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCi0gICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCi0KLSAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKLSAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgotICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCi0gICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLnNldF9kYXRhCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18uc2V0X2RhdGEKLSAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCi0KLSAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKLSAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgSU9FcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KLSAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgotICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgICAgICByYWlzZSBleGMKLSAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCi0KLSAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQotICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJwotICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0KLSAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jaygibW9kLmZpbGUiKQotICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IExhdGluLTFcbng9J8O8JyIKLSAgICAgICAgYXNzZXJ0IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKSAhPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCi0gICAgICAgIHJldHVybmVkX3NvdXJjZSA9IG1vY2suZ2V0X3NvdXJjZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQotCi0gICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgotICAgICAgICAjIFBFUCAzMDIgc2F5cyB1bml2ZXJzYWwgbmV3bGluZXMgc2hvdWxkIGJlIHVzZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKLSAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKLQotCi1jbGFzcyBBYnN0cmFjdE1ldGhvZEltcGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoZSBjb25jcmV0ZSBhYnN0cmFjdG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMuIiIiCi0KLSAgICBjbGFzcyBNZXRhUGF0aEZpbmRlcihhYmMuTWV0YVBhdGhGaW5kZXIpOgotICAgICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aCkKLQotICAgIGNsYXNzIFBhdGhFbnRyeUZpbmRlcihhYmMuUGF0aEVudHJ5RmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShfKQotCi0gICAgICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9sb2FkZXIoXykKLQotICAgIGNsYXNzIEZpbmRlcihhYmMuRmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCi0KLSAgICBjbGFzcyBMb2FkZXIoYWJjLkxvYWRlcik6Ci0gICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICBzdXBlcigpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgICAgIHN1cGVyKCkubW9kdWxlX3JlcHIobW9kdWxlKQotCi0gICAgY2xhc3MgUmVzb3VyY2VMb2FkZXIoTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9kYXRhKF8pCi0KLSAgICBjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlciwgYWJjLkluc3BlY3RMb2FkZXIpOgotICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuaXNfcGFja2FnZShfKQotCi0gICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X2NvZGUoXykKLQotICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X3NvdXJjZShfKQotCi0gICAgY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5nZXRfZmlsZW5hbWUoXykKLQotICAgIGNsYXNzIFNvdXJjZUxvYWRlcihSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyLCBhYmMuU291cmNlTG9hZGVyKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgUHlMb2FkZXIoUmVzb3VyY2VMb2FkZXIsIEluc3BlY3RMb2FkZXIsIGFiYy5QeUxvYWRlcik6Ci0gICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuc291cmNlX3BhdGgoXykKLQotICAgIGNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyLCBhYmMuUHlQeWNMb2FkZXIpOgotICAgICAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuYnl0ZWNvZGVfcGF0aChfKQotCi0gICAgICAgIGRlZiBzb3VyY2VfbXRpbWUoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLnNvdXJjZV9tdGltZShfKQotCi0gICAgICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBfLCBfMik6Ci0gICAgICAgICAgICBzdXBlcigpLndyaXRlX2J5dGVjb2RlKF8sIF8yKQotCi0gICAgZGVmIHJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYsIGlucywgKmFyZ3MpOgotICAgICAgICBmb3IgbWV0aG9kX25hbWUgaW4gYXJnczoKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoaW5zLCBtZXRob2RfbmFtZSkKLSAgICAgICAgICAgIGFyZ19jb3VudCA9IGxlbihpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG1ldGhvZClbMF0pIC0gMQotICAgICAgICAgICAgYXJncyA9IFsnJ10gKiBhcmdfY291bnQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtZXRob2QoKmFyZ3MpCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1zZyA9ICJ7fS57fSBkaWQgbm90IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IiCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZy5mb3JtYXQoaW5zLl9fY2xhc3NfXy5fX25hbWVfXywgbWV0aG9kX25hbWUpKQotCi0gICAgZGVmIHRlc3RfTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuTG9hZGVyKCksICdsb2FkX21vZHVsZScpCi0KLSAgICAjIFhYWCBtaXNwbGFjZWQ7IHNob3VsZCBiZSBzb21ld2hlcmUgZWxzZQotICAgIGRlZiB0ZXN0X0ZpbmRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkZpbmRlcigpLCAnZmluZF9tb2R1bGUnKQotCi0gICAgZGVmIHRlc3RfUmVzb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5SZXNvdXJjZUxvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZGF0YScpCi0KLSAgICBkZWYgdGVzdF9JbnNwZWN0TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuSW5zcGVjdExvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19wYWNrYWdlJywgJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnKQotCi0gICAgZGVmIHRlc3RfRXhlY3V0aW9uTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuRXhlY3V0aW9uTG9hZGVyKCksICdsb2FkX21vZHVsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX3BhY2thZ2UnLCAnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9maWxlbmFtZScpCi0KLSAgICBkZWYgdGVzdF9Tb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIGlucyA9IHNlbGYuU291cmNlTG9hZGVyKCkKLSAgICAgICAgIyBSZXF1aXJlZCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCAnZ2V0X2ZpbGVuYW1lJywgJ2dldF9kYXRhJykKLSAgICAgICAgIyBPcHRpb25hbCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCdwYXRoX3N0YXRzJywgJ3NldF9kYXRhJykKLQotICAgIGRlZiB0ZXN0X1B5TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuUHlMb2FkZXIoKSwgJ3NvdXJjZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2RhdGEnLCAnaXNfcGFja2FnZScpCi0KLSAgICBkZWYgdGVzdF9QeVB5Y0xvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLlB5UHljTG9hZGVyKCksICdzb3VyY2VfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9tdGltZScsICdieXRlY29kZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdGVfYnl0ZWNvZGUnKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFB5TG9hZGVyVGVzdHMsIFB5TG9hZGVyQ29tcGF0VGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5TG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5UHljTG9hZGVyVGVzdHMsIFB5UHljTG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cywgUmVnZW5lcmF0ZWRCeXRlY29kZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cywgTWlzc2luZ1BhdGhzVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZU9ubHlMb2FkZXJUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0TWV0aG9kSW1wbFRlc3RzKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CmluZGV4IDI0MTE3M2YuLmJiNzhkMmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQpAQCAtMSw5ICsxLDkgQEAKICIiIlRlc3QgY2FzZS1zZW5zaXRpdml0eSAoUEVQIDIzNSkuIiIiCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCi1pbXBvcnQgaW1wCisKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCBhcyB0ZXN0X3N1cHBvcnQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKaW5kZXggZDU5OTY5YS4uOWUwMzVlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKQEAgLTEsMjQgKzEsMjUgQEAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBpbXBvcnRsaWIuYWJjCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKIGltcG9ydCBlcnJubwotaW1wb3J0IGltcAogaW1wb3J0IG1hcnNoYWwKIGltcG9ydCBvcwogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdGF0CiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbWFrZV9sZWdhY3lfcHljCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbWFrZV9sZWdhY3lfcHljLCB1bmxvYWQKIAogCi1jbGFzcyBTaW1wbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFNpbXBsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsIGFiYy5Mb2FkZXJUZXN0cyk6CiAKICAgICAiIiJTaG91bGQgaGF2ZSBubyBpc3N1ZSBpbXBvcnRpbmcgYSBzb3VyY2UgbW9kdWxlIFtiYXNpY10uIEFuZCBpZiB0aGVyZSBpcwogICAgIGEgc3ludGF4IGVycm9yLCBpdCBzaG91bGQgcmFpc2UgYSBTeW50YXhFcnJvciBbc3ludGF4IGVycm9yXS4KQEAgLTI2LDIzICsyNywxMyBAQAogICAgICIiIgogCiAgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGVfQVBJKHNlbGYpOgotICAgICAgICAjIElmIGZ1bGxuYW1lIGlzIG5vdCBzcGVjaWZpZWQgdGhhdCBhc3N1bWUgc2VsZi5uYW1lIGlzIGRlc2lyZWQuCi0gICAgICAgIGNsYXNzIFRlc3Rlck1peGluKGltcG9ydGxpYi5hYmMuTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6IHJldHVybiBmdWxsbmFtZQotICAgICAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6IHJldHVybiAnPG1vZHVsZT4nCisgICAgICAgIGNsYXNzIFRlc3RlcihpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6IHJldHVybiAnYXR0ciA9IDQyJworICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6IHJldHVybiBGYWxzZQogCi0gICAgICAgIGNsYXNzIFRlc3RlcihpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIsIFRlc3Rlck1peGluKToKLSAgICAgICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKTogcGFzcwotICAgICAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6IHBhc3MKLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIF8pOiBwYXNzCi0KLSAgICAgICAgbmFtZSA9ICdtb2RfbmFtZScKLSAgICAgICAgbG9hZGVyID0gVGVzdGVyKG5hbWUsICdzb21lX3BhdGgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGxvYWRlci5sb2FkX21vZHVsZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGxvYWRlci5sb2FkX21vZHVsZShOb25lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKGxvYWRlci5uYW1lICsgJ1hYWCcpCisgICAgICAgIGxvYWRlciA9IFRlc3RlcignYmxhaCcsICdibGFoLnB5JykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubG9hZCwgJ2JsYWgnKQorICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoKSAgIyBTaG91bGQgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbi4KIAogICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZV9BUEkoc2VsZik6CiAgICAgICAgICMgSWYgZnVsbG5hbWUgaXMgbm90IHNldCB0aGVuIGFzc3VtZSBzZWxmLnBhdGggaXMgZGVzaXJlZC4KQEAgLTEyMiw3ICsxMTMsNyBAQAogICAgICAgICB2YWx1ZSA9ICc8dGVzdD4nCiAgICAgICAgIG5hbWUgPSAnX3RlbXAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMobmFtZSkgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIG9yaWdfbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIG9yaWdfbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKICAgICAgICAgICAgICAgICBzZXRhdHRyKG9yaWdfbW9kdWxlLCBhdHRyLCB2YWx1ZSkKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nW25hbWVdLCAndycpIGFzIGZpbGU6CkBAIC0xNTQsMTEgKzE0NSwxMSBAQAogICAgICAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIGZpbGVfcGF0aCkKICAgICAgICAgICAgICAgICBtb2QgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfcGF0aCwgbW9kLl9fZmlsZV9fKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCksCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLl9fY2FjaGVkX18pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZV9wYXRoKQotICAgICAgICAgICAgcHljYWNoZSA9IG9zLnBhdGguZGlybmFtZShpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSkKKyAgICAgICAgICAgIHB5Y2FjaGUgPSBvcy5wYXRoLmRpcm5hbWUoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHB5Y2FjaGUpOgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocHljYWNoZSkKIApAQCAtMTY3LDcgKzE1OCw3IEBACiAgICAgICAgICMgdHJ1bmNhdGVkIHJhdGhlciB0aGFuIHJhaXNlIGFuIE92ZXJmbG93RXJyb3IuCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHNvdXJjZSA9IG1hcHBpbmdbJ190ZW1wJ10KLSAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoInggPSA1IikKICAgICAgICAgICAgIHRyeToKQEAgLTE4Niw2ICsxNzcsMTEgQEAKICAgICAgICAgICAgICMgVGhlIHB5YyBmaWxlIHdhcyBjcmVhdGVkLgogICAgICAgICAgICAgb3Muc3RhdChjb21waWxlZCkKIAorICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdnb29kIG5hbWUnLCB7fSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoJ2JhZCBuYW1lJykKKwogCiBjbGFzcyBCYWRCeXRlY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yMDQsNyArMjAwLDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGlmIG5vdCBkZWxfc291cmNlOgotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy51bmxpbmsobWFwcGluZ1tuYW1lXSkKICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBtYWtlX2xlZ2FjeV9weWMobWFwcGluZ1tuYW1lXSkKQEAgLTMzMiw3ICszMjgsOCBAQAogICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nW25hbWVdLCBuYW1lKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGJ5dGVjb2RlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlY29kZV9maWxlLnJlYWQoNCksIGltcC5nZXRfbWFnaWMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUikKIAogICAgICAgICBzZWxmLl90ZXN0X2JhZF9tYWdpYyh0ZXN0KQogCkBAIC0zODIsNyArMzc5LDcgQEAKICAgICAgICAgemVyb3MgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3IrYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS5zZWVrKDQpCiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS53cml0ZSh6ZXJvcykKQEAgLTQwMCw3ICszOTcsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICAjIENyZWF0ZSBieXRlY29kZSB0aGF0IHdpbGwgbmVlZCB0byBiZSByZS1jcmVhdGVkLgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIHdpdGggb3BlbihieXRlY29kZV9wYXRoLCAncitiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoMCkKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLndyaXRlKGInXHgwMFx4MDBceDAwXHgwMCcpCkBAIC00MDgsNyArNDA1LDcgQEAKICAgICAgICAgICAgIG9zLmNobW9kKGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIElPRXJyb3IhCisgICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIE9TRXJyb3IhCiAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICMgTWFrZSB3cml0YWJsZSBmb3IgZXZlbnR1YWwgY2xlYW4tdXAuCkBAIC00NzMsMTMgKzQ3MCw2IEBACiAgICAgICAgIHNlbGYuX3Rlc3Rfbm9uX2NvZGVfbWFyc2hhbChkZWxfc291cmNlPVRydWUpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoU2ltcGxlVGVzdCwKLSAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0LAotICAgICAgICAgICAgICAgICBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0Ci0gICAgICAgICAgICAgICAgKQotCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weQppbmRleCA4ZTQ5ODY4Li45ZDZjZWMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5CkBAIC0zLDcgKzMsNiBAQAogCiBmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBpbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzdGF0CkBAIC0xNCw3ICsxMyw3IEBACiBpbXBvcnQgd2FybmluZ3MKIAogCi1jbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgorY2xhc3MgRmluZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJGb3IgYSB0b3AtbGV2ZWwgbW9kdWxlLCBpdCBzaG91bGQganVzdCBiZSBmb3VuZCBkaXJlY3RseSBpbiB0aGUKICAgICBkaXJlY3RvcnkgYmVpbmcgc2VhcmNoZWQuIFRoaXMgaXMgdHJ1ZSBmb3IgYSBkaXJlY3Rvcnkgd2l0aCBzb3VyY2UKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQppbmRleCA2YTc4NzkyLi5kMzIwZjhlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CkBAIC0xLDcgKzEsNiBAQAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWltcG9ydCBpbXAKIGltcG9ydCB1bml0dGVzdAogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3V0aWwucHkKaW5kZXggYWU2NTY2My4uNjNjZDI1YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3V0aWwucHkKQEAgLTIsNyArMiw2IEBACiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGVycm5vCiBpbXBvcnQgZnVuY3Rvb2xzCi1pbXBvcnQgaW1wCiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYWJjLnB5CmluZGV4IGM2MjBjMzcuLjk3OWE0ODEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYWJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYWJjLnB5CkBAIC0xLDkgKzEsMjEgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBhYmMKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2ltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGlvCitpbXBvcnQgbWFyc2hhbAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiAKK2Zyb20gLiBpbXBvcnQgdXRpbAogCitmcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitmcm96ZW5fYWJjLCBzb3VyY2VfYWJjID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIuYWJjJykKK2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorCisjIyMjIyBJbmhlcml0YW5jZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogY2xhc3MgSW5oZXJpdGFuY2VUZXN0czoKIAogICAgICIiIlRlc3QgdGhhdCB0aGUgc3BlY2lmaWVkIGNsYXNzIGlzIGEgc3ViY2xhc3Mvc3VwZXJjbGFzcyBvZiB0aGUgZXhwZWN0ZWQKQEAgLTE0LDggKzI2LDE5IEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuc3VwZXJjbGFzc2VzID0gW2dldGF0dHIoc2VsZi5hYmMsIGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjbGFzc19uYW1lIGluIHNlbGYuc3VwZXJjbGFzc19uYW1lc10KKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnc3ViY2xhc3NfbmFtZXMnKToKKyAgICAgICAgICAgICMgQmVjYXVzZSB0ZXN0LnN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgpIGNyZWF0ZXMgYSBuZXcKKyAgICAgICAgICAgICMgaW1wb3J0bGliLl9ib290c3RyYXAgcGVyIG1vZHVsZSwgaW5oZXJpdGFuY2UgY2hlY2tzIGZhaWwgd2hlbgorICAgICAgICAgICAgIyBjaGVja2luZyBhY3Jvc3MgbW9kdWxlIGJvdW5kYXJpZXMgKGkuZS4gdGhlIF9ib290c3RyYXAgaW4gYWJjIGlzCisgICAgICAgICAgICAjIG5vdCB0aGUgc2FtZSBhcyB0aGUgb25lIGluIG1hY2hpbmVyeSkuIFRoYXQgbWVhbnMgc3RlYWxpbmcgb25lIG9mCisgICAgICAgICAgICAjIHRoZSBtb2R1bGVzIGZyb20gdGhlIG90aGVyIHRvIG1ha2Ugc3VyZSB0aGUgc2FtZSBpbnN0YW5jZSBpcyB1c2VkLgorICAgICAgICAgICAgc2VsZi5zdWJjbGFzc2VzID0gW2dldGF0dHIoc2VsZi5hYmMubWFjaGluZXJ5LCBjbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2xhc3NfbmFtZSBpbiBzZWxmLnN1YmNsYXNzX25hbWVzXQogICAgICAgICBhc3NlcnQgc2VsZi5zdWJjbGFzc2VzIG9yIHNlbGYuc3VwZXJjbGFzc2VzLCBzZWxmLl9fY2xhc3NfXwotICAgICAgICBzZWxmLl9fdGVzdCA9IGdldGF0dHIoYWJjLCBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgdGVzdGluZyA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLnBhcnRpdGlvbignXycpWzJdCisgICAgICAgIHNlbGYuX190ZXN0ID0gZ2V0YXR0cihzZWxmLmFiYywgdGVzdGluZykKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IHRoZSBleHBlY3RlZCBzdWJjbGFzc2VzIGluaGVyaXQuCkBAIC0yOSw3NSArNTIsOTU4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLl9fdGVzdCwgc3VwZXJjbGFzcyksCiAgICAgICAgICAgICAgICAiezB9IGlzIG5vdCBhIHN1cGVyY2xhc3Mgb2YgezF9Ii5mb3JtYXQoc3VwZXJjbGFzcywgc2VsZi5fX3Rlc3QpKQogCitkZWYgY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKGJhc2VfY2xhc3MpOgorICAgIGRlZiBzZXRfZnJvemVuKG5zKToKKyAgICAgICAgbnNbJ2FiYyddID0gZnJvemVuX2FiYworICAgIGRlZiBzZXRfc291cmNlKG5zKToKKyAgICAgICAgbnNbJ2FiYyddID0gc291cmNlX2FiYwogCi1jbGFzcyBNZXRhUGF0aEZpbmRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkZpbmRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LlBhdGhGaW5kZXIsIG1hY2hpbmVyeS5XaW5kb3dzUmVnaXN0cnlGaW5kZXJdCi0KLQotY2xhc3MgUGF0aEVudHJ5RmluZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuRmluZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbbWFjaGluZXJ5LkZpbGVGaW5kZXJdCi0KLQotY2xhc3MgTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1YmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyXQotCi0KLWNsYXNzIFJlc291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuTG9hZGVyXQotCi0KLWNsYXNzIEluc3BlY3RMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5Mb2FkZXJdCi0gICAgc3ViY2xhc3NlcyA9IFthYmMuUHlMb2FkZXIsIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsCi0gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwgbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXJdCi0KLQotY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuSW5zcGVjdExvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW2FiYy5QeUxvYWRlcl0KLQotCi1jbGFzcyBGaWxlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwgbWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyXQotCi0KLWNsYXNzIFNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLlJlc291cmNlTG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXJdCi0KLQotY2xhc3MgUHlMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5Mb2FkZXIsIGFiYy5SZXNvdXJjZUxvYWRlciwgYWJjLkV4ZWN1dGlvbkxvYWRlcl0KLQotCi1jbGFzcyBQeVB5Y0xvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyXQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAgICAgY2xhc3NlcyA9IFtdCi0gICAgZm9yIGNsYXNzXyBpbiBnbG9iYWxzKCkudmFsdWVzKCk6Ci0gICAgICAgIGlmIChpbnNwZWN0LmlzY2xhc3MoY2xhc3NfKSBhbmQKLSAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKGNsYXNzXywgdW5pdHRlc3QuVGVzdENhc2UpIGFuZAotICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoY2xhc3NfLCBJbmhlcml0YW5jZVRlc3RzKSk6Ci0gICAgICAgICAgICBjbGFzc2VzLmFwcGVuZChjbGFzc18pCi0gICAgcnVuX3VuaXR0ZXN0KCpjbGFzc2VzKQorICAgIGZvciBwcmVmaXgsIG5zX3NldCBpbiBbKCdGcm96ZW4nLCBzZXRfZnJvemVuKSwgKCdTb3VyY2UnLCBzZXRfc291cmNlKV06CisgICAgICAgIGNsYXNzZXMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcygnXycuam9pbihbcHJlZml4LCBiYXNlX2NsYXNzLl9fbmFtZV9fXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFzZV9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19ib2R5PW5zX3NldCkpCisgICAgcmV0dXJuIGNsYXNzZXMKKworCitjbGFzcyBNZXRhUGF0aEZpbmRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydGaW5kZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydCdWlsdGluSW1wb3J0ZXInLCAnRnJvemVuSW1wb3J0ZXInLCAnUGF0aEZpbmRlcicsCisgICAgICAgICAgICAgICAgICAgICAgJ1dpbmRvd3NSZWdpc3RyeUZpbmRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKE1ldGFQYXRoRmluZGVyKQorRnJvemVuX01ldGFQYXRoRmluZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX01ldGFQYXRoRmluZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgUGF0aEVudHJ5RmluZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0ZpbmRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0ZpbGVGaW5kZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhQYXRoRW50cnlGaW5kZXIpCitGcm96ZW5fUGF0aEVudHJ5RmluZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX1BhdGhFbnRyeUZpbmRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFJlc291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0xvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKFJlc291cmNlTG9hZGVyKQorRnJvemVuX1Jlc291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX1Jlc291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgSW5zcGVjdExvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydMb2FkZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydCdWlsdGluSW1wb3J0ZXInLCAnRnJvemVuSW1wb3J0ZXInLCAnRXh0ZW5zaW9uRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKEluc3BlY3RMb2FkZXIpCitGcm96ZW5fSW5zcGVjdExvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9JbnNwZWN0TG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0luc3BlY3RMb2FkZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydFeHRlbnNpb25GaWxlTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoRXhlY3V0aW9uTG9hZGVyKQorRnJvemVuX0V4ZWN1dGlvbkxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9FeGVjdXRpb25Mb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBGaWxlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ1Jlc291cmNlTG9hZGVyJywgJ0V4ZWN1dGlvbkxvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ1NvdXJjZUZpbGVMb2FkZXInLCAnU291cmNlbGVzc0ZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhGaWxlTG9hZGVyKQorRnJvemVuX0ZpbGVMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfRmlsZUxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydSZXNvdXJjZUxvYWRlcicsICdFeGVjdXRpb25Mb2FkZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydTb3VyY2VGaWxlTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoU291cmNlTG9hZGVyKQorRnJvemVuX1NvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9Tb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworIyMjIyMgRGVmYXVsdCByZXR1cm4gdmFsdWVzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2RlZiBtYWtlX2FiY19zdWJjbGFzc2VzKGJhc2VfY2xhc3MpOgorICAgIGNsYXNzZXMgPSBbXQorICAgIGZvciBraW5kLCBhYmMgaW4gWygnRnJvemVuJywgZnJvemVuX2FiYyksICgnU291cmNlJywgc291cmNlX2FiYyldOgorICAgICAgICBuYW1lID0gJ18nLmpvaW4oW2tpbmQsIGJhc2VfY2xhc3MuX19uYW1lX19dKQorICAgICAgICBiYXNlX2NsYXNzZXMgPSBiYXNlX2NsYXNzLCBnZXRhdHRyKGFiYywgYmFzZV9jbGFzcy5fX25hbWVfXykKKyAgICAgICAgY2xhc3Nlcy5hcHBlbmQodHlwZXMubmV3X2NsYXNzKG5hbWUsIGJhc2VfY2xhc3NlcykpCisgICAgcmV0dXJuIGNsYXNzZXMKKworZGVmIG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKGJhc2VfY2xhc3MsIHRlc3RfY2xhc3MpOgorICAgIGZyb3plbl9jbGFzcywgc291cmNlX2NsYXNzID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhiYXNlX2NsYXNzKQorICAgIHRlc3RzID0gW10KKyAgICBmb3IgcHJlZml4LCBjbGFzc19pbl90ZXN0IGluIFsoJ0Zyb3plbicsIGZyb3plbl9jbGFzcyksICgnU291cmNlJywgc291cmNlX2NsYXNzKV06CisgICAgICAgIGRlZiBzZXRfbnMobnMpOgorICAgICAgICAgICAgbnNbJ2lucyddID0gY2xhc3NfaW5fdGVzdCgpCisgICAgICAgIHRlc3RzLmFwcGVuZCh0eXBlcy5uZXdfY2xhc3MoJ18nLmpvaW4oW3ByZWZpeCwgdGVzdF9jbGFzcy5fX25hbWVfX10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19ib2R5PXNldF9ucykpCisgICAgcmV0dXJuIHRlc3RzCisKKworY2xhc3MgTWV0YVBhdGhGaW5kZXI6CisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5maW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aCkKKworRnJvemVuX01QRiwgU291cmNlX01QRiA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoTWV0YVBhdGhGaW5kZXIpCisKKworY2xhc3MgTWV0YVBhdGhGaW5kZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfZmluZF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgRGVmYXVsdCBzaG91bGQgcmV0dXJuIE5vbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuaW5zLmZpbmRfbW9kdWxlKCdzb21ldGhpbmcnLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgorICAgICAgICAjIENhbGxpbmcgdGhlIG1ldGhvZCBpcyBhIG5vLW9wLgorICAgICAgICBzZWxmLmlucy5pbnZhbGlkYXRlX2NhY2hlcygpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhNZXRhUGF0aEZpbmRlciwgTWV0YVBhdGhGaW5kZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX01QRkRlZmF1bHRUZXN0cywgU291cmNlX01QRkRlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgUGF0aEVudHJ5RmluZGVyOgorCisgICAgZGVmIGZpbmRfbG9hZGVyKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZmluZF9sb2FkZXIoZnVsbG5hbWUpCisKK0Zyb3plbl9QRUYsIFNvdXJjZV9QRUYgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFBhdGhFbnRyeUZpbmRlcikKKworCitjbGFzcyBQYXRoRW50cnlGaW5kZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfZmluZF9sb2FkZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUsIFtdKSwgc2VsZi5pbnMuZmluZF9sb2FkZXIoJ3NvbWV0aGluZycpKQorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuaW5zLmZpbmRfbW9kdWxlKCdzb21ldGhpbmcnKSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgorICAgICAgICAjIFNob3VsZCBiZSBhIG5vLW9wLgorICAgICAgICBzZWxmLmlucy5pbnZhbGlkYXRlX2NhY2hlcygpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhQYXRoRW50cnlGaW5kZXIsIFBhdGhFbnRyeUZpbmRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fUEVGRGVmYXVsdFRlc3RzLCBTb3VyY2VfUEVGRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBMb2FkZXI6CisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKKworCitGcm96ZW5fTCwgU291cmNlX0wgPSBtYWtlX2FiY19zdWJjbGFzc2VzKExvYWRlcikKKworCitjbGFzcyBMb2FkZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMubG9hZF9tb2R1bGUoJ3NvbWV0aGluZycpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcihzZWxmKToKKyAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5tb2R1bGVfcmVwcihtb2QpCisgICAgICAgIG9yaWdpbmFsX3JlcHIgPSByZXByKG1vZCkKKyAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmLmlucworICAgICAgICAjIFNob3VsZCBzdGlsbCByZXR1cm4gYSBwcm9wZXIgcmVwci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobW9kKSkKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKExvYWRlciwgTG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9MRGVmYXVsdFRlc3RzLCBTb3VyY2VMRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBSZXNvdXJjZUxvYWRlcihMb2FkZXIpOgorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQorCisKK0Zyb3plbl9STCwgU291cmNlX1JMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhSZXNvdXJjZUxvYWRlcikKKworCitjbGFzcyBSZXNvdXJjZUxvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9nZXRfZGF0YShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9kYXRhKCcvc29tZS9wYXRoJykKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKFJlc291cmNlTG9hZGVyLCBSZXNvdXJjZUxvYWRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fUkxEZWZhdWx0VGVzdHMsIFNvdXJjZV9STERlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgSW5zcGVjdExvYWRlcihMb2FkZXIpOgorCisgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5pc19wYWNrYWdlKGZ1bGxuYW1lKQorCisgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfc291cmNlKGZ1bGxuYW1lKQorCisKK0Zyb3plbl9JTCwgU291cmNlX0lMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhJbnNwZWN0TG9hZGVyKQorCisKK2NsYXNzIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5pc19wYWNrYWdlKCdibGFoJykKKworICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X3NvdXJjZSgnYmxhaCcpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhJbnNwZWN0TG9hZGVyLCBJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9JTERlZmF1bHRUZXN0cywgU291cmNlX0lMRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5zcGVjdExvYWRlcik6CisKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorCitGcm96ZW5fRUwsIFNvdXJjZV9FTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoRXhlY3V0aW9uTG9hZGVyKQorCisKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X2ZpbGVuYW1lKCdibGFoJykKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKEV4ZWN1dGlvbkxvYWRlciwgSW5zcGVjdExvYWRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fRUxEZWZhdWx0VGVzdHMsIFNvdXJjZV9FTERlZmF1bHRzVGVzdHMgPSB0ZXN0cworCisjIyMjIyBMb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2xhc3MgTG9hZGVyQ29uY3JldGVNZXRob2RUZXN0czoKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlci5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKKworCitjbGFzcyBGcm96ZW5fTG9hZGVyQ29uY3JlYXRlTWV0aG9kVGVzdHMoTG9hZGVyQ29uY3JldGVNZXRob2RUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIExvYWRlclN1YmNsYXNzID0gRnJvemVuX0wKKworY2xhc3MgU291cmNlX0xvYWRlckNvbmNyZWF0ZU1ldGhvZFRlc3RzKExvYWRlckNvbmNyZXRlTWV0aG9kVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9MCisKKworIyMjIyMgSW5zcGVjdExvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0czoKKworICAgIGRlZiBzb3VyY2VfdG9fbW9kdWxlKHNlbGYsIGRhdGEsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiIkhlbHAgd2l0aCBzb3VyY2VfdG9fY29kZSgpIHRlc3RzLiIiIgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKGRhdGEsIHBhdGgpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICByZXR1cm4gbW9kdWxlCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgU2luY2UgY29tcGlsZSgpIGNhbiBoYW5kbGUgc3RyaW5ncywgc28gc2hvdWxkIHNvdXJjZV90b19jb2RlKCkuCisgICAgICAgIHNvdXJjZSA9ICdhdHRyID0gNDInCisgICAgICAgIG1vZHVsZSA9IHNlbGYuc291cmNlX3RvX21vZHVsZShzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2F0dHInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9ieXRlcyhzZWxmKToKKyAgICAgICAgIyBTaW5jZSBjb21waWxlKCkgY2FuIGhhbmRsZSBieXRlcywgc28gc2hvdWxkIHNvdXJjZV90b19jb2RlKCkuCisgICAgICAgIHNvdXJjZSA9IGInYXR0ciA9IDQyJworICAgICAgICBtb2R1bGUgPSBzZWxmLnNvdXJjZV90b19tb2R1bGUoc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdhdHRyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfcGF0aChzZWxmKToKKyAgICAgICAgIyBTcGVjaWZ5aW5nIGEgcGF0aCBzaG91bGQgc2V0IGl0IGZvciB0aGUgY29kZSBvYmplY3QuCisgICAgICAgIHBhdGggPSAncGF0aC90by9zb21ld2hlcmUnCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZSgnJywgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCBwYXRoKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfbm9fcGF0aChzZWxmKToKKyAgICAgICAgIyBOb3Qgc2V0dGluZyBhIHBhdGggc2hvdWxkIHN0aWxsIHdvcmsgYW5kIGJlIHNldCB0byA8c3RyaW5nPiBzaW5jZSB0aGF0CisgICAgICAgICMgaXMgYSBwcmUtZXhpc3RpbmcgcHJhY3RpY2UgYXMgYSBkZWZhdWx0IHRvIGNvbXBpbGUoKS4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3RyaW5nPicpCisKKworY2xhc3MgRnJvemVuX0lMU291cmNlVG9Db2RlVGVzdHMoSW5zcGVjdExvYWRlclNvdXJjZVRvQ29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gRnJvemVuX0lMCisKK2NsYXNzIFNvdXJjZV9JTFNvdXJjZVRvQ29kZVRlc3RzKEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKK2NsYXNzIEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHM6CisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHN1Y2Nlc3MuCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzLCAnZ2V0X3NvdXJjZScpIGFzIG1vY2tlZDoKKyAgICAgICAgICAgIG1vY2tlZC5yZXR1cm5fdmFsdWUgPSAnYXR0ciA9IDQyJworICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9pc19Ob25lKHNlbGYpOgorICAgICAgICAjIElmIGdldF9zb3VyY2UoKSBpcyBOb25lIHRoZW4gdGhpcyBzaG91bGQgYmUgTm9uZS4KKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcywgJ2dldF9zb3VyY2UnKSBhcyBtb2NrZWQ6CisgICAgICAgICAgICBtb2NrZWQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvZGUpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2Vfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICAjIElmIHRoZXJlIGlzIG5vIHNvdXJjZSB0aGVuIHRoZXJlIGlzIG5vIGNvZGUgb2JqZWN0LgorICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKworCitjbGFzcyBGcm96ZW5fSUxHZXRDb2RlVGVzdHMoSW5zcGVjdExvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxHZXRDb2RlVGVzdHMoSW5zcGVjdExvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKK2NsYXNzIEluc3BlY3RMb2FkZXJJbml0TW9kdWxlVGVzdHM6CisKKyAgICBkZWYgbW9ja19pc19wYWNrYWdlKHNlbGYsIHJldHVybl92YWx1ZSk6CisgICAgICAgIHJldHVybiBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcywgJ2lzX3BhY2thZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXJldHVybl92YWx1ZSkKKworICAgIGRlZiBpbml0X21vZHVsZV9hdHRycyhzZWxmLCBuYW1lKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgIGxvYWRlci5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgIyBJZiBhIHBhY2thZ2UsIHRoZW4gX19wYWNrYWdlX18gPT0gX19uYW1lX18sIF9fcGF0aF9fID09IFtdCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2lzX3BhY2thZ2UoVHJ1ZSk6CisgICAgICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGF0aF9fLCBbXSkKKworICAgIGRlZiB0ZXN0X3RvcGxldmVsKHNlbGYpOgorICAgICAgICAjIElmIGEgbW9kdWxlIGlzIHRvcC1sZXZlbCwgX19wYWNrYWdlX18gPT0gJycKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfaXNfcGFja2FnZShGYWxzZSk6CisgICAgICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJycpCisKKyAgICBkZWYgdGVzdF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgICMgSWYgYSBtb2R1bGUgaXMgY29udGFpbmVkIHdpdGhpbiBhIHBhY2thZ2UgdGhlbiBzZXQgX19wYWNrYWdlX18gdG8gdGhlCisgICAgICAgICMgcGFja2FnZSBuYW1lLgorICAgICAgICB3aXRoIHNlbGYubW9ja19pc19wYWNrYWdlKEZhbHNlKToKKyAgICAgICAgICAgIG5hbWUgPSAncGtnLm1vZCcKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAncGtnJykKKworICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2VfSW1wb3J0RXJyb3Ioc2VsZik6CisgICAgICAgICMgSWYgaXNfcGFja2FnZSgpIHJhaXNlcyBJbXBvcnRFcnJvciwgX19wYWNrYWdlX18gc2hvdWxkIGJlIE5vbmUgYW5kCisgICAgICAgICMgX19wYXRoX18gc2hvdWxkIG5vdCBiZSBzZXQuCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2lzX3BhY2thZ2UoRmFsc2UpIGFzIG1vY2tlZF9tZXRob2Q6CisgICAgICAgICAgICBtb2NrZWRfbWV0aG9kLnNpZGVfZWZmZWN0ID0gSW1wb3J0RXJyb3IKKyAgICAgICAgICAgIG5hbWUgPSAnbW9kJworICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0X21vZHVsZV9hdHRycyhuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobW9kdWxlLl9fcGFja2FnZV9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisKKworY2xhc3MgRnJvemVuX0lMSW5pdE1vZHVsZVRlc3RzKEluc3BlY3RMb2FkZXJJbml0TW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKKworY2xhc3MgU291cmNlX0lMSW5pdE1vZHVsZVRlc3RzKEluc3BlY3RMb2FkZXJJbml0TW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyTG9hZE1vZHVsZVRlc3RzOgorCisgICAgIiIiVGVzdCBJbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlKCkuIiIiCisKKyAgICBtb2R1bGVfbmFtZSA9ICdibGFoJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnVubG9hZChzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxvYWQsIHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgbW9ja19nZXRfY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzLCAnZ2V0X2NvZGUnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfSW1wb3J0RXJyb3Ioc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2NvZGUoKSByYWlzZXMgSW1wb3J0RXJyb3IsIGl0IHNob3VsZCBwcm9wYWdhdGUuCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2dldF9jb2RlKCkgYXMgbW9ja2VkX2dldF9jb2RlOgorICAgICAgICAgICAgbW9ja2VkX2dldF9jb2RlLnNpZGVfZWZmZWN0ID0gSW1wb3J0RXJyb3IKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX05vbmUoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2NvZGUoKSByZXR1cm5zIE5vbmUsIHJhaXNlIEltcG9ydEVycm9yLgorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmV0dXJuZWQoc2VsZik6CisgICAgICAgICMgVGhlIGxvYWRlZCBtb2R1bGUgc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAgICBjb2RlID0gY29tcGlsZSgnYXR0ciA9IDQyJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5yZXR1cm5fdmFsdWUgPSBjb2RlCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLCBzeXMubW9kdWxlc1tzZWxmLm1vZHVsZV9uYW1lXSkKKworCitjbGFzcyBGcm96ZW5fSUxMb2FkTW9kdWxlVGVzdHMoSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxMb2FkTW9kdWxlVGVzdHMoSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKKyMjIyMjIEV4ZWN1dGlvbkxvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHM6CisKKyAgICBkZWYgbW9ja19tZXRob2RzKHNlbGYsICosIGdldF9zb3VyY2U9RmFsc2UsIGdldF9maWxlbmFtZT1GYWxzZSk6CisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IE5vbmUsIE5vbmUKKyAgICAgICAgaWYgZ2V0X3NvdXJjZToKKyAgICAgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQgPSBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfc291cmNlJykKKyAgICAgICAgaWYgZ2V0X2ZpbGVuYW1lOgorICAgICAgICAgICAgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZmlsZW5hbWUnKQorICAgICAgICByZXR1cm4gc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0CisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgcGF0aCA9ICdibGFoLnB5JworICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBzZWxmLm1vY2tfbWV0aG9kcygKKyAgICAgICAgICAgICAgICBnZXRfc291cmNlPVRydWUsIGdldF9maWxlbmFtZT1UcnVlKQorICAgICAgICB3aXRoIHNvdXJjZV9tb2NrX2NvbnRleHQgYXMgc291cmNlX21vY2ssIGZpbGVuYW1lX21vY2tfY29udGV4dCBhcyBuYW1lX21vY2s6CisgICAgICAgICAgICBzb3VyY2VfbW9jay5yZXR1cm5fdmFsdWUgPSAnYXR0ciA9IDQyJworICAgICAgICAgICAgbmFtZV9tb2NrLnJldHVybl92YWx1ZSA9IHBhdGgKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgcGF0aCkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9pc19Ob25lKHNlbGYpOgorICAgICAgICAjIElmIGdldF9zb3VyY2UoKSBpcyBOb25lIHRoZW4gdGhpcyBzaG91bGQgYmUgTm9uZS4KKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgXyA9IHNlbGYubW9ja19tZXRob2RzKGdldF9zb3VyY2U9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIG1vY2tlZDoKKyAgICAgICAgICAgIG1vY2tlZC5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb2RlKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBzb3VyY2UgdGhlbiB0aGVyZSBpcyBubyBjb2RlIG9iamVjdC4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX25vX3BhdGgoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2ZpbGVuYW1lKCkgcmFpc2VzIEltcG9ydEVycm9yIHRoZW4gc2ltcGx5IHNraXAgc2V0dGluZyB0aGUgcGF0aAorICAgICAgICAjIG9uIHRoZSBjb2RlIG9iamVjdC4KKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gc2VsZi5tb2NrX21ldGhvZHMoCisgICAgICAgICAgICAgICAgZ2V0X3NvdXJjZT1UcnVlLCBnZXRfZmlsZW5hbWU9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIHNvdXJjZV9tb2NrLCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgYXMgbmFtZV9tb2NrOgorICAgICAgICAgICAgc291cmNlX21vY2sucmV0dXJuX3ZhbHVlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIG5hbWVfbW9jay5zaWRlX2VmZmVjdCA9IEltcG9ydEVycm9yCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3RyaW5nPicpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKworY2xhc3MgRnJvemVuX0VMR2V0Q29kZVRlc3RzKEV4ZWN1dGlvbkxvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzID0gRnJvemVuX0VMCisKK2NsYXNzIFNvdXJjZV9FTEdldENvZGVUZXN0cyhFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBFeGVjdXRpb25Mb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9FTAorCisKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlckluaXRNb2R1bGVUZXN0czoKKworICAgIGRlZiBtb2NrX2lzX3BhY2thZ2Uoc2VsZiwgcmV0dXJuX3ZhbHVlKToKKyAgICAgICAgcmV0dXJuIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MsICdpc19wYWNrYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1yZXR1cm5fdmFsdWUpCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiBtb2NrX21ldGhvZHMoc2VsZiwgaXNfcGFja2FnZSwgZmlsZW5hbWUpOgorICAgICAgICBpc19wYWNrYWdlX21hbmFnZXIgPSBzZWxmLm1vY2tfaXNfcGFja2FnZShpc19wYWNrYWdlKQorICAgICAgICBnZXRfZmlsZW5hbWVfbWFuYWdlciA9IG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MsCisgICAgICAgICAgICAgICAgJ2dldF9maWxlbmFtZScsIHJldHVybl92YWx1ZT1maWxlbmFtZSkKKyAgICAgICAgd2l0aCBpc19wYWNrYWdlX21hbmFnZXIgYXMgbW9ja19pc19wYWNrYWdlOgorICAgICAgICAgICAgd2l0aCBnZXRfZmlsZW5hbWVfbWFuYWdlciBhcyBtb2NrX2dldF9maWxlbmFtZToKKyAgICAgICAgICAgICAgICB5aWVsZCB7J2lzX3BhY2thZ2UnOiBtb2NrX2lzX3BhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZmlsZW5hbWUnOiBtb2NrX2dldF9maWxlbmFtZX0KKworICAgIGRlZiB0ZXN0X3RvcGxldmVsKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSBfX2xvYWRlcl9fLCBfX2ZpbGVfXywgYW5kIF9fcGFja2FnZV9fOyBubyBfX3BhdGhfXy4KKyAgICAgICAgbmFtZSA9ICdibGFoJworICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdzb21lJywgJ3BhdGgnLCAne30ucHknLmZvcm1hdChuYW1lKSkKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbWV0aG9kcyhGYWxzZSwgcGF0aCk6CisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIGxvYWRlci5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSBfX2xvYWRlcl9fLCBfX2ZpbGVfXywgX19wYWNrYWdlX18sIGFuZCBfX3BhdGhfXy4KKyAgICAgICAgbmFtZSA9ICdwa2cnCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3NvbWUnLCAncGtnJywgJ19faW5pdF9fLnB5JykKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbWV0aG9kcyhUcnVlLCBwYXRoKToKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sICdwa2cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhdGhfXywgW29zLnBhdGguZGlybmFtZShwYXRoKV0pCisKKyAgICBkZWYgdGVzdF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IF9fcGFja2FnZV9fIGFuZCBub3QgX19wYXRoX187IHRlc3RfdG9wbGV2ZWwoKSB0YWtlcyBjYXJlIG9mCisgICAgICAgICMgb3RoZXIgYXR0cmlidXRlcy4KKyAgICAgICAgbmFtZSA9ICdwa2cuc3VibW9kdWxlJworICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdzb21lJywgJ3BrZycsICdzdWJtb2R1bGUucHknKQorICAgICAgICB3aXRoIHNlbGYubW9ja19tZXRob2RzKEZhbHNlLCBwYXRoKToKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sICdwa2cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisKKyAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWVfSW1wb3J0RXJyb3Ioc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2ZpbGVuYW1lKCkgcmFpc2VzIEltcG9ydEVycm9yLCBkb24ndCBzZXQgX19maWxlX18uCisgICAgICAgIG5hbWUgPSAnYmxhaCcKKyAgICAgICAgcGF0aCA9ICdibGFoLnB5JworICAgICAgICB3aXRoIHNlbGYubW9ja19tZXRob2RzKEZhbHNlLCBwYXRoKSBhcyBtb2NrZWRfbWV0aG9kczoKKyAgICAgICAgICAgIG1vY2tlZF9tZXRob2RzWydnZXRfZmlsZW5hbWUnXS5zaWRlX2VmZmVjdCA9IEltcG9ydEVycm9yCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIGxvYWRlci5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2ZpbGVfXycpKQorCisKK2NsYXNzIEZyb3plbl9FTEluaXRNb2R1bGVUZXN0cyhFeGVjdXRpb25Mb2FkZXJJbml0TW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBFeGVjdXRpb25Mb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9FTAorCitjbGFzcyBTb3VyY2VfRUxJbml0TW9kdWxlVGVzdHMoRXhlY3V0aW9uTG9hZGVySW5pdE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfRUwKKworCisjIyMjIyBTb3VyY2VMb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2xhc3MgU291cmNlTG9hZGVyOgorCisgICAgIyBHbG9iYWxzIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgZm9yIGFsbCBtb2R1bGVzLgorICAgIHNvdXJjZSA9IChiIl8gPSAnOjonLmpvaW4oW19fbmFtZV9fLCBfX2ZpbGVfXywgX19jYWNoZWRfXywgX19wYWNrYWdlX18sICIKKyAgICAgICAgICAgICAgYiJyZXByKF9fbG9hZGVyX18pXSkiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggIT0gc2VsZi5wYXRoOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKKworICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKKyAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKKworCitGcm96ZW5fU291cmNlT25seUwsIFNvdXJjZV9Tb3VyY2VPbmx5TCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoU291cmNlTG9hZGVyKQorCisKK2NsYXNzIFNvdXJjZUxvYWRlcihTb3VyY2VMb2FkZXIpOgorCisgICAgc291cmNlX210aW1lID0gMQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG1hZ2ljPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHBhdGgpCisgICAgICAgIHNlbGYuYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuc291cmNlX3NpemUgPSBsZW4oc2VsZi5zb3VyY2UpCisgICAgICAgIGlmIG1hZ2ljIGlzIE5vbmU6CisgICAgICAgICAgICBtYWdpYyA9IHNlbGYudXRpbC5NQUdJQ19OVU1CRVIKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShtYWdpYykKKyAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5zb3VyY2VfbXRpbWUpKQorICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLnNvdXJjZV9zaXplKSkKKyAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNlbGYuc291cmNlLCBzZWxmLnBhdGgsICdleGVjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCisgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQorICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZXMoZGF0YSkKKyAgICAgICAgc2VsZi53cml0dGVuID0ge30KKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCA9PSBzZWxmLnBhdGg6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQorICAgICAgICBlbGlmIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKworICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoICE9IHNlbGYucGF0aDoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnNvdXJjZV9tdGltZSwgJ3NpemUnOiBzZWxmLnNvdXJjZV9zaXplfQorCisgICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgorICAgICAgICBzZWxmLndyaXR0ZW5bcGF0aF0gPSBieXRlcyhkYXRhKQorICAgICAgICByZXR1cm4gcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGgKKworCitGcm96ZW5fU0wsIFNvdXJjZV9TTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoU291cmNlTG9hZGVyKQorRnJvemVuX1NMLnV0aWwgPSBmcm96ZW5fdXRpbAorU291cmNlX1NMLnV0aWwgPSBzb3VyY2VfdXRpbAorRnJvemVuX1NMLmluaXQgPSBmcm96ZW5faW5pdAorU291cmNlX1NMLmluaXQgPSBzb3VyY2VfaW5pdAorCisKK2NsYXNzIFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzOgorCisgICAgZGVmIHNldFVwKHNlbGYsICosIGlzX3BhY2thZ2U9VHJ1ZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnBhY2thZ2UgPSAncGtnJworICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IHNlbGYucGFja2FnZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnbW9kJworICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJy4nLmpvaW4oWydtb2QnLCAncHknXSkpCisgICAgICAgICAgICBzZWxmLm5hbWUgPSAnLicuam9pbihbc2VsZi5wYWNrYWdlLCBtb2R1bGVfbmFtZV0pCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLmxvYWRlcl9tb2NrKHNlbGYucGF0aCwgKiprd2FyZ3MpCisKKyAgICBkZWYgdmVyaWZ5X21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNlbGYucGFja2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19sb2FkZXJfXywgc2VsZi5sb2FkZXIpCisgICAgICAgIHZhbHVlcyA9IG1vZHVsZS5fLnNwbGl0KCc6OicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzFdLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzJdLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbM10sIHNlbGYucGFja2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbNF0sIHJlcHIoc2VsZi5sb2FkZXIpKQorCisgICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0KToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShzZWxmLm5hbWUpCisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYucGF0aAorICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYuY2FjaGVkCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNlbGYucGFja2FnZQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYubG9hZGVyCisgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtdCisgICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKworCitjbGFzcyBTb3VyY2VPbmx5TG9hZGVyVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBmb3Igc291cmNlLW9ubHkgbG9hZGluZy4KKworICAgIFJlbG9hZCB0ZXN0aW5nIGlzIHN1YnN1bWVkIGJ5IHRoZSB0ZXN0cyBmb3IKKyAgICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KKworICAgICIiIgorCisgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLgorICAgICAgICAjIElmIGFuIE9TRXJyb3IgaXMgcmFpc2VkIGJ5IGdldF9kYXRhIHRoZW4gcmFpc2UgSW1wb3J0RXJyb3IuCisgICAgICAgIGV4cGVjdGVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLnNvdXJjZS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSksIGV4cGVjdGVkX3NvdXJjZSkKKyAgICAgICAgZGVmIHJhaXNlX09TRXJyb3IocGF0aCk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhID0gcmFpc2VfT1NFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBzZWxmLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFByb3Blcmx5IGRldGVjdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlLgorICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQorICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSArICcuX19pbml0X18nKSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGUgY29kZSBvYmplY3QgaXMgY3JlYXRlZC4KKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIGNvbXBpbGVkIGNvZGUgb2JqZWN0LgorICAgICAgICBjb2RlID0gc2VsZi5sb2FkZXIuc291cmNlX3RvX2NvZGUoc2VsZi5sb2FkZXIuc291cmNlLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZSkKKworICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlKHNlbGYpOgorICAgICAgICAjIExvYWRpbmcgYSBtb2R1bGUgc2hvdWxkIHNldCBfX25hbWVfXywgX19sb2FkZXJfXywgX19wYWNrYWdlX18sCisgICAgICAgICMgX19wYXRoX18gKGZvciBwYWNrYWdlcyksIF9fZmlsZV9fLCBhbmQgX19jYWNoZWRfXy4KKyAgICAgICAgIyBUaGUgbW9kdWxlIHNob3VsZCBhbHNvIGJlIHB1dCBpbnRvIHN5cy5tb2R1bGVzLgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGF0aF9fLCBbb3MucGF0aC5kaXJuYW1lKHNlbGYucGF0aCldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyBfX3BhY2thZ2VfXyBuZWVkcyB0byBiZSBzZXQsIHdoaWxlIF9fcGF0aF9fIGlzIHNldCBvbiBpZiB0aGUgbW9kdWxlCisgICAgICAgICMgaXMgYSBwYWNrYWdlLgorICAgICAgICAjIFRlc3RpbmcgdGhlIHZhbHVlcyBmb3IgYSBwYWNrYWdlIGFyZSBjb3ZlcmVkIGJ5IHRlc3RfbG9hZF9tb2R1bGUuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKworICAgIGRlZiB0ZXN0X2dldF9zb3VyY2VfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgU291cmNlIGlzIGNvbnNpZGVyZWQgZW5jb2RlZCBpbiBVVEYtOCBieSBkZWZhdWx0IHVubGVzcyBvdGhlcndpc2UKKyAgICAgICAgIyBzcGVjaWZpZWQgYnkgYW4gZW5jb2RpbmcgbGluZS4KKyAgICAgICAgc291cmNlID0gIl8gPSAnw7wnIgorICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IGxhdGluLTFcbl8gPSDDvCIKKyAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorCisKK2NsYXNzIEZyb3plbl9Tb3VyY2VPbmx5TFRlc3RzKFNvdXJjZU9ubHlMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gRnJvemVuX1NvdXJjZU9ubHlMCisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKK2NsYXNzIFNvdXJjZV9Tb3VyY2VPbmx5TFRlc3RzKFNvdXJjZU9ubHlMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gU291cmNlX1NvdXJjZU9ubHlMCisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgInN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUiKQorY2xhc3MgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6CisKKyAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyJ3MgdXNlIG9mIGJ5dGVjb2RlLgorCisgICAgU291cmNlLW9ubHkgdGVzdGluZyBoYW5kbGVkIGJ5IFNvdXJjZU9ubHlMb2FkZXJUZXN0cy4KKworICAgICIiIgorCisgICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0LCAqLCBieXRlY29kZV93cml0dGVuPUZhbHNlKToKKyAgICAgICAgc3VwZXIoKS52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgaWYgYnl0ZWNvZGVfd3JpdHRlbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgICAgICBkYXRhID0gYnl0ZWFycmF5KHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCisgICAgICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX3NpemUpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKKworICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgorICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKyAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKKyAgICAgICAgIyBTYW5pdHkgY2hlY2sKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgorICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKKyAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCisgICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCisgICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCisKKyAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKKyAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCisgICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKKyAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisKKyAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgorICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCisgICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCisKKyAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKKyAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgorICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCisgICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLm1ybygpWzFdLnNldF9kYXRhCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18ubXJvKClbMV0uc2V0X2RhdGEKKyAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5tcm8oKVsxXS5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCisKKyAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgT1NFcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgorICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCisKKyAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQorICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKworCitjbGFzcyBGcm96ZW5fU0xCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IEZyb3plbl9TTAorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VTTEJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gU291cmNlX1NMCisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHM6CisKKyAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCisgICAgICAgIG5hbWUgPSAnbW9kJworICAgICAgICBtb2NrID0gc2VsZi5Tb3VyY2VPbmx5TG9hZGVyTW9jaygnbW9kLmZpbGUnKQorICAgICAgICBzb3VyY2UgPSAneCA9ICLDvCInCisgICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X2RlY29kZWRfc291cmNlKHNlbGYpOgorICAgICAgICAjIERlY29kaW5nIHNob3VsZCB3b3JrLgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soIm1vZC5maWxlIikKKyAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBMYXRpbi0xXG54PSfDvCciCisgICAgICAgIGFzc2VydCBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgIyBQRVAgMzAyIHNheXMgdW5pdmVyc2FsIG5ld2xpbmVzIHNob3VsZCBiZSB1c2VkLgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKKyAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKKworCitjbGFzcyBGcm96ZW5fU291cmNlT25seUxHZXRTb3VyY2VUZXN0cyhTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gRnJvemVuX1NvdXJjZU9ubHlMCisKK2NsYXNzIFNvdXJjZV9Tb3VyY2VPbmx5TEdldFNvdXJjZVRlc3RzKFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgU291cmNlT25seUxvYWRlck1vY2sgPSBTb3VyY2VfU291cmNlT25seUwKKworCitjbGFzcyBTb3VyY2VMb2FkZXJJbml0TW9kdWxlQXR0clRlc3RzOgorCisgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzKCkuIiIiCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRycyhzZWxmKToKKyAgICAgICAgIyBJZiBfX2ZpbGVfXyBzZXQsIF9fY2FjaGVkX18gPT0gaW1wb3J0bGliLnV0aWwuY2FjaGVkX2Zyb21fc291cmNlKF9fZmlsZV9fKS4KKyAgICAgICAgbmFtZSA9ICdibGFoJworICAgICAgICBwYXRoID0gJ2JsYWgucHknCisgICAgICAgIGxvYWRlciA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2socGF0aCkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICBsb2FkZXIuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKSkKKworICAgIGRlZiB0ZXN0X25vX2dldF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgIyBObyBfX2ZpbGVfXywgbm8gX19jYWNoZWRfXy4KKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLlNvdXJjZU9ubHlMb2FkZXJNb2NrLCAnZ2V0X2ZpbGVuYW1lJykgYXMgbW9ja2VkOgorICAgICAgICAgICAgbW9ja2VkLnNpZGVfZWZmZWN0ID0gSW1wb3J0RXJyb3IKKyAgICAgICAgICAgIG5hbWUgPSAnYmxhaCcKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soJ2JsYWgucHknKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCisKKworY2xhc3MgRnJvemVuX1NMSW5pdE1vZHVsZUF0dHJUZXN0cyhTb3VyY2VMb2FkZXJJbml0TW9kdWxlQXR0clRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgU291cmNlT25seUxvYWRlck1vY2sgPSBGcm96ZW5fU291cmNlT25seUwKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworICAgICMgRGlmZmljdWx0IHRvIHRlc3QgdW5kZXIgc291cmNlIHRoYW5rcyB0byBjcm9zcy1tb2R1bGUgbW9ja2luZyBuZWVkcy4KKyAgICBAbW9jay5wYXRjaCgnaW1wb3J0bGliLl9ib290c3RyYXAuY2FjaGVfZnJvbV9zb3VyY2UnKQorICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZiwgbW9ja19jYWNoZV9mcm9tX3NvdXJjZSk6CisgICAgICAgICMgSWYgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoKSByYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvciBkb24ndCBzZXQKKyAgICAgICAgIyBfX2NhY2hlZF9fLgorICAgICAgICBtb2NrX2NhY2hlX2Zyb21fc291cmNlLnNpZGVfZWZmZWN0ID0gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgIHBhdGggPSAnYmxhaC5weScKKyAgICAgICAgbG9hZGVyID0gc2VsZi5Tb3VyY2VPbmx5TG9hZGVyTW9jayhwYXRoKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgIGxvYWRlci5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19jYWNoZWRfXycpKQorCisKK2NsYXNzIFNvdXJjZV9TTEluaXRNb2R1bGVBdHRyVGVzdHMoU291cmNlTG9hZGVySW5pdE1vZHVsZUF0dHJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gU291cmNlX1NvdXJjZU9ubHlMCisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CmluZGV4IGIxYTU4OTQuLjUxMjY2MzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CkBAIC0xLDE0ICsxLDE3IEBACiBmcm9tIC4gaW1wb3J0IHV0aWwKLWltcG9ydCBpbXAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKKworZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKworaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBJbXBvcnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBJbXBvcnRNb2R1bGVUZXN0czoKIAogICAgICIiIlRlc3QgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUuIiIiCiAKQEAgLTE2LDcgKzE5LDcgQEAKICAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIHRvcC1sZXZlbCBtb2R1bGUuCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAndG9wX2xldmVsJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMjYsNyArMjksNyBAQAogICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9zaGFsbG93X3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMzgsMTcgKzQxLDE3IEBACiAgICAgICAgIHJlbGF0aXZlX25hbWUgPSAnLnswfScuZm9ybWF0KG1vZHVsZV9uYW1lKQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIGFic29sdXRlX25hbWUpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBhYnNvbHV0ZV9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGVlcF9yZWxhdGl2ZV9wYWNrYWdlX2ltcG9ydChzZWxmKToKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmIuX19pbml0X18nLCAnYS5jJ10KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2EnKQotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdhLmInKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuLmMnLCAnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYScpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EuYicpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy4uYycsICdhLmInKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnYS5jJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX2ltcG9ydF93aXRoX3BhY2thZ2Uoc2VsZik6CkBAIC01OSwxNSArNjIsMTUgQEAKICAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocGtnX25hbWUpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUocGtnX25hbWUpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRfd29fcGFja2FnZShzZWxmKToKICAgICAgICAgIyBSZWxhdGl2ZSBpbXBvcnRzIGNhbm5vdCBoYXBwZW4gd2l0aG91dCB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGJlaW5nCiAgICAgICAgICMgc2V0LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLnN1cHBvcnQnKQorICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy5zdXBwb3J0JykKIAogCiAgICAgZGVmIHRlc3RfbG9hZGVkX29uY2Uoc2VsZik6CkBAIC03Niw3ICs3OSw3IEBACiAgICAgICAgICMgbW9kdWxlIGN1cnJlbnRseSBiZWluZyBpbXBvcnRlZC4KICAgICAgICAgYl9sb2FkX2NvdW50ID0gMAogICAgICAgICBkZWYgbG9hZF9hKCk6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhLmInKQogICAgICAgICBkZWYgbG9hZF9iKCk6CiAgICAgICAgICAgICBub25sb2NhbCBiX2xvYWRfY291bnQKICAgICAgICAgICAgIGJfbG9hZF9jb3VudCArPSAxCkBAIC04NCwxMSArODcsMTcgQEAKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmInXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCptb2R1bGVzLCBtb2R1bGVfY29kZT1jb2RlKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYS5iJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiX2xvYWRfY291bnQsIDEpCiAKK2NsYXNzIEZyb3plbl9JbXBvcnRNb2R1bGVUZXN0cyhJbXBvcnRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAogCi1jbGFzcyBGaW5kTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU291cmNlX0ltcG9ydE1vZHVsZVRlc3RzKEltcG9ydE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisKKworY2xhc3MgRmluZExvYWRlclRlc3RzOgogCiAgICAgY2xhc3MgRmFrZU1ldGFGaW5kZXI6CiAgICAgICAgIEBzdGF0aWNtZXRob2QKQEAgLTk4LDI5ICsxMDcsNDMgQEAKICAgICAgICAgIyBJZiBhIG1vZHVsZSB3aXRoIF9fbG9hZGVyX18gaXMgaW4gc3lzLm1vZHVsZXMsIHRoZW4gcmV0dXJuIGl0LgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJwogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBmb3VuZCA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBmb3VuZCkKIAogICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19Ob25lKHNlbGYpOgogICAgICAgICAjIElmIHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18gaXMgTm9uZSwgcmFpc2UgVmFsdWVFcnJvci4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19ub3Rfc2V0KHNlbGYpOgorICAgICAgICAjIFNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICMgSXNzdWUgIzE3MDk5CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5maW5kX2xvYWRlcihuYW1lKQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgIyBSZXR1cm4gdGhlIGxvYWRlciBmb3VuZCBvbiBzeXMubWV0YV9wYXRoLgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSksIGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBOb25lKSwgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpKQogCiAgICAgZGVmIHRlc3Rfc3VjY2Vzc19wYXRoKHNlbGYpOgogICAgICAgICAjIFNlYXJjaGluZyBvbiBhIHBhdGggc2hvdWxkIHdvcmsuCkBAIC0xMjksMTQgKzE1MiwxNzIgQEAKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIHBhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUsIHBhdGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUsIHBhdGgpKQogCiAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKICAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuZmluZF9sb2FkZXIoJ25ldmVyZ29pbmd0b2ZpbmR0aGlzbW9kdWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuaW5pdC5maW5kX2xvYWRlcignbmV2ZXJnb2luZ3RvZmluZHRoaXNtb2R1bGUnKSkKKworY2xhc3MgRnJvemVuX0ZpbmRMb2FkZXJUZXN0cyhGaW5kTG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKworY2xhc3MgU291cmNlX0ZpbmRMb2FkZXJUZXN0cyhGaW5kTG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKIAogCi1jbGFzcyBJbnZhbGlkYXRlQ2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBSZWxvYWRUZXN0czoKKworICAgICIiIlRlc3QgbW9kdWxlIHJlbG9hZGluZyBmb3IgYnVpbHRpbiBhbmQgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgZm9yIG1vZCBpbiAoJ3Rva2VuaXplJywgJ3RpbWUnLCAnbWFyc2hhbCcpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobW9kdWxlPW1vZCk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KG1vZCk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG1vZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwbGFjZWQoc2VsZik6CisgICAgICAgIGRlZiBjb2RlKCk6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICBtb2R1bGUuc3BhbSA9IDMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXSA9IG1vZHVsZQorICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3RvcF9sZXZlbCc6IGNvZGV9KQorICAgICAgICB3aXRoIG1vY2s6CisgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgYWN0dWFsID0gc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwuc3BhbSwgMykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbG9hZGVkLnNwYW0sIDMpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbWlzc2luZ19sb2FkZXIoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC5DbGVhbkltcG9ydCgndHlwZXMnKToKKyAgICAgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICAgICAgbG9hZGVyID0gdHlwZXMuX19sb2FkZXJfXworICAgICAgICAgICAgZGVsIHR5cGVzLl9fbG9hZGVyX18KKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZCh0eXBlcykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgdHlwZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzWyd0eXBlcyddLCB0eXBlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVsb2FkZWQuX19sb2FkZXJfXy5wYXRoLCBsb2FkZXIucGF0aCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sb2FkZXJfcmVwbGFjZWQoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC5DbGVhbkltcG9ydCgndHlwZXMnKToKKyAgICAgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICAgICAgdHlwZXMuX19sb2FkZXJfXyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQodHlwZXMpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocmVsb2FkZWQuX19sb2FkZXJfXywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIHR5cGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1sndHlwZXMnXSwgdHlwZXMpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbG9jYXRpb25fY2hhbmdlZChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoTm9uZSkgYXMgY3dkOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ3NwYW0nKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRGlyc09uU3lzUGF0aChjd2QpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSArICcucHknKQorICAgICAgICAgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2ZpbGVfXyc6IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogY2FjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5zX18nOiBfX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5jcmVhdGVfZW1wdHlfZmlsZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBucyA9IHZhcnMobW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBkZWwgbnNbJ19faW5pdGlhbGl6aW5nX18nXQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5wYXRoLCBwYXRoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgICAgICAgICBpbml0X3BhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19maWxlX18nOiBpbml0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogY2FjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbb3MucGF0aC5kaXJuYW1lKGluaXRfcGF0aCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5zX18nOiBfX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgbnMgPSB2YXJzKHJlbG9hZGVkKQorICAgICAgICAgICAgICAgICAgICBkZWwgbnNbJ19faW5pdGlhbGl6aW5nX18nXQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbmFtZXNwYWNlX2NoYW5nZWQoc2VsZik6CisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoTm9uZSkgYXMgY3dkOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ3NwYW0nKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRGlyc09uU3lzUGF0aChjd2QpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgICAgICAgICBiYWRfcGF0aCA9IG9zLnBhdGguam9pbihjd2QsIG5hbWUsICdfX2luaXQucHknKQorICAgICAgICAgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoYmFkX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0geydfX25hbWVfXyc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2RvY19fJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihuYW1lKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oYmFkX3BhdGgsICd3JykgYXMgaW5pdF9maWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9maWxlLndyaXRlKCdlZ2dzID0gTm9uZScpCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIGRlbCBuc1snX19pbml0aWFsaXppbmdfXyddCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBucy5wb3AoJ19fcGF0aF9fJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFtvcy5wYXRoLmRpcm5hbWUoYmFkX3BhdGgpXSkpCisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBhIE5hbWVzcGFjZUxvYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnBhdGgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogaW5pdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IGNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW29zLnBhdGguZGlybmFtZShpbml0X3BhdGgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluc19fJzogX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWdncyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKGJhZF9wYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhyZWxvYWRlZCkKKyAgICAgICAgICAgICAgICAgICAgZGVsIG5zWydfX2luaXRpYWxpemluZ19fJ10KKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbnMucG9wKCdfX2xvYWRlcl9fJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5wYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisKK2NsYXNzIEZyb3plbl9SZWxvYWRUZXN0cyhSZWxvYWRUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VfUmVsb2FkVGVzdHMoUmVsb2FkVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBJbnZhbGlkYXRlQ2FjaGVUZXN0czoKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9jYWxsZWQoc2VsZik6CiAgICAgICAgICMgSWYgZGVmaW5lZCB0aGUgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQuCkBAIC0xNTUsNDggKzMzNiw1NCBAQAogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5fX2RlbGl0ZW1fXyhrZXkpKQogICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtrZXldID0gcGF0aF9pbnMKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc3lzLm1ldGFfcGF0aC5yZW1vdmUobWV0YV9pbnMpKQotICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0YV9pbnMuY2FsbGVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0aF9pbnMuY2FsbGVkKQogCiAgICAgZGVmIHRlc3RfbWV0aG9kX2xhY2tpbmcoc2VsZik6CiAgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIG5vIGlzc3VlcyBpZiB0aGUgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLgogICAgICAgICBrZXkgPSAnZ29iYmxlZGVlZ29vaycKLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVba2V5XSA9IGltcC5OdWxsSW1wb3J0ZXIoJ2FiYycpCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW2tleV0gPSBOb25lCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLl9fZGVsaXRlbV9fKGtleSkpCi0gICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpICAjIFNob3VsZG4ndCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkgICMgU2hvdWxkbid0IHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorCitjbGFzcyBGcm96ZW5fSW52YWxpZGF0ZUNhY2hlVGVzdHMoSW52YWxpZGF0ZUNhY2hlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKworY2xhc3MgU291cmNlX0ludmFsaWRhdGVDYWNoZVRlc3RzKEludmFsaWRhdGVDYWNoZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CiAKIAogY2xhc3MgRnJvemVuSW1wb3J0bGliVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfbm9fZnJvemVuX2ltcG9ydGxpYihzZWxmKToKICAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byBpbXBvcnQgdy9vIF9mcm96ZW5faW1wb3J0bGliIGJlaW5nIGRlZmluZWQuCi0gICAgICAgIG1vZHVsZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnaW1wb3J0bGliJywgYmxvY2tlZD1bJ19mcm96ZW5faW1wb3J0bGliJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShtb2R1bGUuX19sb2FkZXJfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcikpCisgICAgICAgICMgQ2FuJ3QgZG8gYW4gaXNpbnN0YW5jZSgpIGNoZWNrIHNpbmNlIHNlcGFyYXRlIGNvcGllcyBvZiBpbXBvcnRsaWIKKyAgICAgICAgIyBtYXkgaGF2ZSBiZWVuIHVzZWQgZm9yIGltcG9ydCwgc28ganVzdCBjaGVjayB0aGUgbmFtZSBpcyBub3QgZm9yIHRoZQorICAgICAgICAjIGZyb3plbiBsb2FkZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc291cmNlX2luaXQuX19sb2FkZXJfXy5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zyb3plbkltcG9ydGVyJykKIAogCi1jbGFzcyBTdGFydHVwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU3RhcnR1cFRlc3RzOgogCiAgICAgZGVmIHRlc3RfZXZlcnlvbmVfaGFzX19fbG9hZGVyX18oc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE3MDk4OiBhbGwgbW9kdWxlcyBzaG91bGQgaGF2ZSBfX2xvYWRlcl9fIGRlZmluZWQuCiAgICAgICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKToKLSAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRsaWIubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXykKLSAgICAgICAgICAgICAgICBlbGlmIGltcC5pc19mcm96ZW4obmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0bGliLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGxhY2tzIGEgX19sb2FkZXJfXyBhdHRyaWJ1dGUnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUobmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2R1bGUuX19sb2FkZXJfXywgTm9uZSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoSW1wb3J0TW9kdWxlVGVzdHMsCi0gICAgICAgICAgICAgICAgIEZpbmRMb2FkZXJUZXN0cywKLSAgICAgICAgICAgICAgICAgSW52YWxpZGF0ZUNhY2hlVGVzdHMsCi0gICAgICAgICAgICAgICAgIEZyb3plbkltcG9ydGxpYlRlc3RzLAotICAgICAgICAgICAgICAgICBTdGFydHVwVGVzdHMpCitjbGFzcyBGcm96ZW5fU3RhcnR1cFRlc3RzKFN0YXJ0dXBUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKworY2xhc3MgU291cmNlX1N0YXJ0dXBUZXN0cyhTdGFydHVwVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkKaW5kZXggYzM3M2IxMS4uZGM5N2JhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5CkBAIC0xLDQgKzEsOCBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2Jvb3RzdHJhcCA9IGZyb3plbl9pbml0Ll9ib290c3RyYXAKK3NvdXJjZV9ib290c3RyYXAgPSBzb3VyY2VfaW5pdC5fYm9vdHN0cmFwCisKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEzLDE0ICsxNyw5IEBACiBlbHNlOgogICAgIGZyb20gdGVzdCBpbXBvcnQgbG9ja190ZXN0cwogCi0KLUxvY2tUeXBlID0gX2Jvb3RzdHJhcC5fTW9kdWxlTG9jawotRGVhZGxvY2tFcnJvciA9IF9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKLQotCiBpZiB0aHJlYWRpbmcgaXMgbm90IE5vbmU6Ci0gICAgY2xhc3MgTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgotICAgICAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZChsYW1iZGE6IExvY2tUeXBlKCJzb21lX2xvY2siKSkKKyAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzOgorICAgICAgICBsb2NrdHlwZSA9IGNsYXNzbWV0aG9kKGxhbWJkYSBjbHM6IGNscy5Mb2NrVHlwZSgic29tZV9sb2NrIikpCiAKICAgICAgICAgIyBfaXNfb3duZWQoKSB1bnN1cHBvcnRlZAogICAgICAgICB0ZXN0X19pc19vd25lZCA9IE5vbmUKQEAgLTM0LDEzICszMywyMSBAQAogICAgICAgICAjIF9yZWxlYXNlX3NhdmUoKSB1bnN1cHBvcnRlZAogICAgICAgICB0ZXN0X3JlbGVhc2Vfc2F2ZV91bmFjcXVpcmVkID0gTm9uZQogCisgICAgY2xhc3MgRnJvemVuX01vZHVsZUxvY2tBc1JMb2NrVGVzdHMoTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywgbG9ja190ZXN0cy5STG9ja1Rlc3RzKToKKyAgICAgICAgTG9ja1R5cGUgPSBmcm96ZW5fYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisKKyAgICBjbGFzcyBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLCBsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgICAgICBMb2NrVHlwZSA9IHNvdXJjZV9ib290c3RyYXAuX01vZHVsZUxvY2sKKwogZWxzZToKLSAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcGFzcwogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQotY2xhc3MgRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEZWFkbG9ja0F2b2lkYW5jZVRlc3RzOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC01NSw3ICs2Miw3IEBACiAKICAgICBkZWYgcnVuX2RlYWRsb2NrX2F2b2lkYW5jZV90ZXN0KHNlbGYsIGNyZWF0ZV9kZWFkbG9jayk6CiAgICAgICAgIE5MT0NLUyA9IDEwCi0gICAgICAgIGxvY2tzID0gW0xvY2tUeXBlKHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KKyAgICAgICAgbG9ja3MgPSBbc2VsZi5Mb2NrVHlwZShzdHIoaSkpIGZvciBpIGluIHJhbmdlKE5MT0NLUyldCiAgICAgICAgIHBhaXJzID0gWyhsb2Nrc1tpXSwgbG9ja3NbKGkrMSklTkxPQ0tTXSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KICAgICAgICAgaWYgY3JlYXRlX2RlYWRsb2NrOgogICAgICAgICAgICAgTlRIUkVBRFMgPSBOTE9DS1MKQEAgLTY3LDcgKzc0LDcgQEAKICAgICAgICAgICAgICIiIlRyeSB0byBhY3F1aXJlIHRoZSBsb2NrLiBSZXR1cm4gVHJ1ZSBvbiBzdWNjZXNzLCBGYWxzZSBvbiBkZWFkbG9jay4iIiIKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBsb2NrLmFjcXVpcmUoKQotICAgICAgICAgICAgZXhjZXB0IERlYWRsb2NrRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgc2VsZi5EZWFkbG9ja0Vycm9yOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtOTksMzAgKzEwNiw1MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMuY291bnQoKFRydWUsIEZhbHNlKSksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cy5jb3VudCgoVHJ1ZSwgVHJ1ZSkpLCBsZW4ocmVzdWx0cykpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorY2xhc3MgRnJvemVuX0RlYWRsb2NrQXZvaWRhbmNlVGVzdHMoRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIExvY2tUeXBlID0gZnJvemVuX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworICAgIERlYWRsb2NrRXJyb3IgPSBmcm96ZW5fYm9vdHN0cmFwLl9EZWFkbG9ja0Vycm9yCiAKLWNsYXNzIExpZmV0aW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCitjbGFzcyBTb3VyY2VfRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyhEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgTG9ja1R5cGUgPSBzb3VyY2VfYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisgICAgRGVhZGxvY2tFcnJvciA9IHNvdXJjZV9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKKworCitjbGFzcyBMaWZldGltZVRlc3RzOgogCiAgICAgZGVmIHRlc3RfbG9ja19saWZldGltZShzZWxmKToKICAgICAgICAgbmFtZSA9ICJ4eXp6eSIKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCi0gICAgICAgIGxvY2sgPSBfYm9vdHN0cmFwLl9nZXRfbW9kdWxlX2xvY2sobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgbG9jayA9IHNlbGYuYm9vdHN0cmFwLl9nZXRfbW9kdWxlX2xvY2sobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQogICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGxvY2spCiAgICAgICAgIGRlbCBsb2NrCiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCiAKICAgICBkZWYgdGVzdF9hbGxfbG9ja3Moc2VsZik6CiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKF9ib290c3RyYXAuX21vZHVsZV9sb2NrcyksIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKworY2xhc3MgRnJvemVuX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKKworY2xhc3MgU291cmNlX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKIAogCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIERlYWRsb2NrQXZvaWRhbmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGlmZXRpbWVUZXN0cykKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5fRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5fTGlmZXRpbWVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfTGlmZXRpbWVUZXN0cykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5CmluZGV4IGVmYzg5NzcuLjJhYzU3ZGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkKQEAgLTEsMjMgKzEsMTI5IEBACiBmcm9tIGltcG9ydGxpYiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAotaW1wb3J0IGltcAorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKworaW1wb3J0IG9zCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAogCi1jbGFzcyBNb2R1bGVGb3JMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEZWNvZGVTb3VyY2VCeXRlc1Rlc3RzOgorCisgICAgc291cmNlID0gInN0cmluZyA9J8O8JyIKKworICAgIGRlZiB0ZXN0X3V0OF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLnNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpLCBzZWxmLnNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3NwZWNpZmllZF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc291cmNlID0gJyMgY29kaW5nPWxhdGluLTFcbicgKyBzZWxmLnNvdXJjZQorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKKyAgICAgICAgYXNzZXJ0IHNvdXJjZV9ieXRlcyAhPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKSwgc291cmNlKQorCisgICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSAnXHJcbicuam9pbihbc2VsZi5zb3VyY2UsIHNlbGYuc291cmNlXSkKKyAgICAgICAgc291cmNlX2J5dGVzID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5kZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJy5qb2luKFtzZWxmLnNvdXJjZSwgc2VsZi5zb3VyY2VdKSkKKworRnJvemVuX0RlY29kZVNvdXJjZUJ5dGVzVGVzdHMsIFNvdXJjZV9EZWNvZGVTb3VyY2VCeXRlc1Rlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRGVjb2RlU291cmNlQnl0ZXNUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKKworCitjbGFzcyBNb2R1bGVUb0xvYWRUZXN0czoKKworICAgIG1vZHVsZV9uYW1lID0gJ01vZHVsZU1hbmFnZXJUZXN0X21vZHVsZScKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC51bmxvYWQoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5sb2FkLCBzZWxmLm1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfbmV3X21vZHVsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGEgbmV3IG1vZHVsZSBpcyBjcmVhdGVkLCBpbnNlcnRlZCBpbnRvIHN5cy5tb2R1bGVzLCBoYXMKKyAgICAgICAgIyBfX2luaXRpYWxpemluZ19fIHNldCB0byBUcnVlIGFmdGVyIGVudGVyaW5nIHRoZSBjb250ZXh0IG1hbmFnZXIsCisgICAgICAgICMgYW5kIF9faW5pdGlhbGl6aW5nX18gc2V0IHRvIEZhbHNlIGFmdGVyIGV4aXRpbmcuCisgICAgICAgIHdpdGggc2VsZi51dGlsLm1vZHVsZV90b19sb2FkKHNlbGYubW9kdWxlX25hbWUpIGFzIG1vZHVsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5tb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW3NlbGYubW9kdWxlX25hbWVdLCBtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobW9kdWxlLl9faW5pdGlhbGl6aW5nX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9kdWxlLl9faW5pdGlhbGl6aW5nX18pCisKKyAgICBkZWYgdGVzdF9uZXdfbW9kdWxlX2ZhaWxlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBtb2R1bGUgaXMgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYudXRpbC5tb2R1bGVfdG9fbG9hZChzZWxmLm1vZHVsZV9uYW1lKSBhcyBtb2R1bGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm1vZHVsZV9uYW1lLCBzeXMubW9kdWxlcykKKyAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb24KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5tb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2ltcG9ydGxpYi51dGlsLm1vZHVsZV90b19sb2FkIHN3YWxsb3dlZCBhbiBleGNlcHRpb24nKQorCisgICAgZGVmIHRlc3RfcmVsb2FkKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgc2FtZSBtb2R1bGUgaXMgaW4gc3lzLm1vZHVsZXMuCisgICAgICAgIGNyZWF0ZWRfbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICBzeXMubW9kdWxlc1tzZWxmLm1vZHVsZV9uYW1lXSA9IGNyZWF0ZWRfbW9kdWxlCisgICAgICAgIHdpdGggc2VsZi51dGlsLm1vZHVsZV90b19sb2FkKHNlbGYubW9kdWxlX25hbWUpIGFzIG1vZHVsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLCBjcmVhdGVkX21vZHVsZSkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9mYWlsZWQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBtb2R1bGUgd2FzIGxlZnQgaW4gc3lzLm1vZHVsZXMuCisgICAgICAgIGNyZWF0ZWRfbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICBzeXMubW9kdWxlc1tzZWxmLm1vZHVsZV9uYW1lXSA9IGNyZWF0ZWRfbW9kdWxlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi51dGlsLm1vZHVsZV90b19sb2FkKHNlbGYubW9kdWxlX25hbWUpIGFzIG1vZHVsZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5tb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2ltcG9ydGxpYi51dGlsLm1vZHVsZV90b19sb2FkIHN3YWxsb3dlZCBhbiBleGNlcHRpb24nKQorCisgICAgZGVmIHRlc3RfcmVzZXRfbmFtZShzZWxmKToKKyAgICAgICAgIyBJZiByZXNldF9uYW1lIGlzIHRydWUgdGhlbiBtb2R1bGUuX19uYW1lX18gPSBuYW1lLCBlbHNlIGxlYXZlIGl0IGJlLgorICAgICAgICBvZGRfbmFtZSA9ICdub3QgeW91ciB0eXBpY2FsIG5hbWUnCisgICAgICAgIGNyZWF0ZWRfbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICBjcmVhdGVkX21vZHVsZS5fX25hbWVfXyA9IG9kZF9uYW1lCisgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYubW9kdWxlX25hbWVdID0gY3JlYXRlZF9tb2R1bGUKKyAgICAgICAgd2l0aCBzZWxmLnV0aWwubW9kdWxlX3RvX2xvYWQoc2VsZi5tb2R1bGVfbmFtZSkgYXMgbW9kdWxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNlbGYubW9kdWxlX25hbWUpCisgICAgICAgIGNyZWF0ZWRfbW9kdWxlLl9fbmFtZV9fID0gb2RkX25hbWUKKyAgICAgICAgd2l0aCBzZWxmLnV0aWwubW9kdWxlX3RvX2xvYWQoc2VsZi5tb2R1bGVfbmFtZSwgcmVzZXRfbmFtZT1GYWxzZSkgYXMgbW9kdWxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG9kZF9uYW1lKQorCitGcm96ZW5fTW9kdWxlVG9Mb2FkVGVzdHMsIFNvdXJjZV9Nb2R1bGVUb0xvYWRUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE1vZHVsZVRvTG9hZFRlc3RzLAorICAgICAgICB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisKK2NsYXNzIE1vZHVsZUZvckxvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyLiIiIgogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyKGNscywgZnVuYyk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBjbHMudXRpbC5tb2R1bGVfZm9yX2xvYWRlcihmdW5jKQorCisgICAgZGVmIHRlc3Rfd2FybmluZyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgcmFpc2UgYSBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIHdoZW4gdXNlZC4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIGZ1bmMgPSBzZWxmLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHg6IHgpCisKICAgICBkZWYgcmV0dXJuX21vZHVsZShzZWxmLCBuYW1lKToKLSAgICAgICAgZnhuID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcihsYW1iZGEgc2VsZiwgbW9kdWxlOiBtb2R1bGUpCisgICAgICAgIGZ4biA9IHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHNlbGYsIG1vZHVsZTogbW9kdWxlKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG5hbWUpCiAKICAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHNlbGYsIG5hbWUpOgogICAgICAgICBkZWYgdG9fd3JhcChzZWxmLCBtb2R1bGUpOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLSAgICAgICAgZnhuID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcih0b193cmFwKQorICAgICAgICBmeG4gPSBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyKHRvX3dyYXApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ4bihzZWxmLCBuYW1lKQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0zNSwxMiArMTQxLDIzIEBACiAKICAgICBkZWYgdGVzdF9yZWxvYWQoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGEgbW9kdWxlIGlzIHJldXNlZCBpZiBhbHJlYWR5IGluIHN5cy5tb2R1bGVzLgorICAgICAgICBjbGFzcyBGYWtlTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIEBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyCisgICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCiAgICAgICAgIG5hbWUgPSAnYS5iLmMnCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdhLmIuYycpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2EuYi5jJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSA0MgorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSA0MgogICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIHJldHVybmVkX21vZHVsZSA9IHNlbGYucmV0dXJuX21vZHVsZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyID0gRmFrZUxvYWRlcigpCisgICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmV0dXJuZWRfbW9kdWxlLCBzeXMubW9kdWxlc1tuYW1lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBuYW1lKQogCiAgICAgZGVmIHRlc3RfbmV3X21vZHVsZV9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhIG1vZHVsZSBpcyByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMgaWYgYWRkZWQgYnV0IGFuCkBAIC01Myw3ICsxNzAsNyBAQAogICAgIGRlZiB0ZXN0X3JlbG9hZF9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhIGZhaWx1cmUgb24gcmVsb2FkIGxlYXZlcyB0aGUgbW9kdWxlIGluLXBsYWNlLgogICAgICAgICBuYW1lID0gJ2EuYi5jJwotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgc2VsZi5yYWlzZV9leGNlcHRpb24obmFtZSkKQEAgLTYxLDcgKzE3OCw3IEBACiAKICAgICBkZWYgdGVzdF9kZWNvcmF0b3JfYXR0cnMoc2VsZik6CiAgICAgICAgIGRlZiBmeG4oc2VsZiwgbW9kdWxlKTogcGFzcwotICAgICAgICB3cmFwcGVkID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcihmeG4pCisgICAgICAgIHdyYXBwZWQgPSBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyKGZ4bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fbmFtZV9fLCBmeG4uX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX3F1YWxuYW1lX18sIGZ4bi5fX3F1YWxuYW1lX18pCiAKQEAgLTg3LDcgKzIwNCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fcGtnID0gaXNfcGFja2FnZQogICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BrZwotICAgICAgICAgICAgQHV0aWwubW9kdWxlX2Zvcl9sb2FkZXIKKyAgICAgICAgICAgIEBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyCiAgICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCiAKQEAgLTEwNyw4ICsyMjQsMTEgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBuYW1lKQogCitGcm96ZW5fTW9kdWxlRm9yTG9hZGVyVGVzdHMsIFNvdXJjZV9Nb2R1bGVGb3JMb2FkZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE1vZHVsZUZvckxvYWRlclRlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCi1jbGFzcyBTZXRQYWNrYWdlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBTZXRQYWNrYWdlVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLnV0aWwuc2V0X3BhY2thZ2UuIiIiCiAKQEAgLTExNiw3ICsyMzYsNyBAQAogICAgICAgICAiIiJWZXJpZnkgdGhlIG1vZHVsZSBoYXMgdGhlIGV4cGVjdGVkIHZhbHVlIGZvciBfX3BhY2thZ2VfXyBhZnRlcgogICAgICAgICBwYXNzaW5nIHRocm91Z2ggc2V0X3BhY2thZ2UuIiIiCiAgICAgICAgIGZ4biA9IGxhbWJkYTogbW9kdWxlCi0gICAgICAgIHdyYXBwZWQgPSB1dGlsLnNldF9wYWNrYWdlKGZ4bikKKyAgICAgICAgd3JhcHBlZCA9IHNlbGYudXRpbC5zZXRfcGFja2FnZShmeG4pCiAgICAgICAgIHdyYXBwZWQoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgbW9kdWxlLl9fcGFja2FnZV9fKQpAQCAtMTI0LDI2ICsyNDQsMjYgQEAKICAgICBkZWYgdGVzdF90b3BfbGV2ZWwoc2VsZik6CiAgICAgICAgICMgX19wYWNrYWdlX18gc2hvdWxkIGJlIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIGEgdG9wLWxldmVsIG1vZHVsZS4KICAgICAgICAgIyBJbXBsaWNpdGx5IHRlc3RzIHdoZW4gcGFja2FnZSBpcyBzZXQgdG8gTm9uZS4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ21vZHVsZScpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZHVsZScpCiAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IE5vbmUKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAnJykKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgVGVzdCBzZXR0aW5nIF9fcGFja2FnZV9fIGZvciBhIHBhY2thZ2UuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdwa2cnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwa2cnKQogICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbJzxwYXRoPiddCiAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IE5vbmUKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3N1Ym1vZHVsZShzZWxmKToKICAgICAgICAgIyBUZXN0IF9fcGFja2FnZV9fIGZvciBhIG1vZHVsZSBpbiBhIHBhY2thZ2UuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdwa2cubW9kJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgncGtnLm1vZCcpCiAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IE5vbmUKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3NldHRpbmdfaWZfbWlzc2luZyhzZWxmKToKICAgICAgICAgIyBfX3BhY2thZ2VfXyBzaG91bGQgYmUgc2V0IGlmIGl0IGlzIG1pc3NpbmcuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdtb2QnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2QnKQogICAgICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJyk6CiAgICAgICAgICAgICBkZWxhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAnJykKQEAgLTE1MSw1OCArMjcxLDIzMCBAQAogICAgIGRlZiB0ZXN0X2xlYXZpbmdfYWxvbmUoc2VsZik6CiAgICAgICAgICMgSWYgX19wYWNrYWdlX18gaXMgc2V0IGFuZCBub3QgTm9uZSB0aGVuIGxlYXZlIGl0IGFsb25lLgogICAgICAgICBmb3IgdmFsdWUgaW4gKFRydWUsIEZhbHNlKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdtb2QnKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnbW9kJykKICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHZhbHVlCiAgICAgICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsIHZhbHVlKQogCiAgICAgZGVmIHRlc3RfZGVjb3JhdG9yX2F0dHJzKHNlbGYpOgogICAgICAgICBkZWYgZnhuKG1vZHVsZSk6IHBhc3MKLSAgICAgICAgd3JhcHBlZCA9IHV0aWwuc2V0X3BhY2thZ2UoZnhuKQorICAgICAgICB3cmFwcGVkID0gc2VsZi51dGlsLnNldF9wYWNrYWdlKGZ4bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fbmFtZV9fLCBmeG4uX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX3F1YWxuYW1lX18sIGZ4bi5fX3F1YWxuYW1lX18pCiAKK0Zyb3plbl9TZXRQYWNrYWdlVGVzdHMsIFNvdXJjZV9TZXRQYWNrYWdlVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBTZXRQYWNrYWdlVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKLWNsYXNzIFJlc29sdmVOYW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBTZXRMb2FkZXJUZXN0czoKKworICAgICIiIlRlc3RzIGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXIoKS4iIiIKKworICAgIGNsYXNzIER1bW15TG9hZGVyOgorICAgICAgICBAdXRpbC5zZXRfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKyAgICBkZWYgdGVzdF9ub19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbG9hZGVyLmxvYWRfbW9kdWxlKCdibGFoJykuX19sb2FkZXJfXykKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9pc19Ob25lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLkR1bW15TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3Rfbm90X3Jlc2V0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLkR1bW15TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCitjbGFzcyBGcm96ZW5fU2V0TG9hZGVyVGVzdHMoU2V0TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBEdW1teUxvYWRlcjoKKyAgICAgICAgQGZyb3plbl91dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworY2xhc3MgU291cmNlX1NldExvYWRlclRlc3RzKFNldExvYWRlclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgRHVtbXlMb2FkZXI6CisgICAgICAgIEBzb3VyY2VfdXRpbC5zZXRfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKworY2xhc3MgUmVzb2x2ZU5hbWVUZXN0czoKIAogICAgICIiIlRlc3RzIGltcG9ydGxpYi51dGlsLnJlc29sdmVfbmFtZSgpLiIiIgogCiAgICAgZGVmIHRlc3RfYWJzb2x1dGUoc2VsZik6CiAgICAgICAgICMgYmFjb24KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCB1dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsIE5vbmUpKQogCiAgICAgZGVmIHRlc3RfYWJvc2x1dGVfd2l0aGluX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgYmFjb24gaW4gc3BhbQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsICdzcGFtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhY29uJywgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCAnc3BhbScpKQogCiAgICAgZGVmIHRlc3Rfbm9fcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuYmFjb24gaW4gJycKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnJykKKyAgICAgICAgICAgIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICcnKQogCiAgICAgZGVmIHRlc3RfaW5fcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuYmFjb24gaW4gc3BhbQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzcGFtLmVnZ3MuYmFjb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnc3BhbS5lZ2dzJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLmJhY29uJywgJ3NwYW0uZWdncycpKQogCiAgICAgZGVmIHRlc3Rfb3RoZXJfcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuLmJhY29uIGluIHNwYW0uYmFjb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3BhbS5iYWNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy4uYmFjb24nLCAnc3BhbS5lZ2dzJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtLmVnZ3MnKSkKIAogICAgIGRlZiB0ZXN0X2VzY2FwZShzZWxmKToKICAgICAgICAgIyAuLmJhY29uIGluIHNwYW0KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0nKQorICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtJykKKworRnJvemVuX1Jlc29sdmVOYW1lVGVzdHMsIFNvdXJjZV9SZXNvbHZlTmFtZVRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUmVzb2x2ZU5hbWVUZXN0cywKKyAgICAgICAgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgICAgICBNb2R1bGVGb3JMb2FkZXJUZXN0cywKLSAgICAgICAgICAgIFNldFBhY2thZ2VUZXN0cywKLSAgICAgICAgICAgIFJlc29sdmVOYW1lVGVzdHMKLSAgICAgICAgKQorY2xhc3MgTWFnaWNOdW1iZXJUZXN0czoKKworICAgIGRlZiB0ZXN0X2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBTaG91bGQgYmUgNCBieXRlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi51dGlsLk1BR0lDX05VTUJFUiksIDQpCisKKyAgICBkZWYgdGVzdF9pbmNvcnBvcmF0ZXNfcm4oc2VsZik6CisgICAgICAgICMgVGhlIG1hZ2ljIG51bWJlciB1c2VzIFxyXG4gdG8gY29tZSBvdXQgd3Jvbmcgd2hlbiBzcGxpdHRpbmcgb24gbGluZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnV0aWwuTUFHSUNfTlVNQkVSLmVuZHN3aXRoKGInXHJcbicpKQorCitGcm96ZW5fTWFnaWNOdW1iZXJUZXN0cywgU291cmNlX01hZ2ljTnVtYmVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBNYWdpY051bWJlclRlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisKK2NsYXNzIFBFUDMxNDdUZXN0czoKKworICAgICIiIlRlc3RzIG9mIFBFUCAzMTQ3LXJlbGF0ZWQgZnVuY3Rpb25zOiBjYWNoZV9mcm9tX3NvdXJjZSBhbmQgc291cmNlX2Zyb21fY2FjaGUuIiIiCisKKyAgICB0YWcgPSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIG5vdCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIG5vdCBiZSBOb25lJykKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIFBFUCAzMTQ3CisgICAgICAgICMgZGVmaW5lZCAucHljIGZpbGUgKGkuZS4gdW5kZXIgX19weWNhY2hlX18pLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfbm9fY2FjaGVfdGFnKHNlbGYpOgorICAgICAgICAjIE5vIGNhY2hlIHRhZyBtZWFucyBOb3RJbXBsZW1lbnRlZEVycm9yLgorICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKHN5cy5pbXBsZW1lbnRhdGlvbiwgJ2NhY2hlX3RhZycsIE5vbmUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ3doYXRldmVyLnB5JykKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX25vX2RvdChzZWxmKToKKyAgICAgICAgIyBEaXJlY3Rvcnkgd2l0aCBhIGRvdCwgZmlsZW5hbWUgd2l0aG91dCBkb3QuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2Zvby5iYXInLCAnZmlsZScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vLmJhcicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZXt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgVHJ1ZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX29wdGltaXplZChzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIFBFUCAzMTQ3CisgICAgICAgICMgZGVmaW5lZCAucHlvIGZpbGUgKGkuZS4gdW5kZXIgX19weWNhY2hlX18pLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHlvJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBGYWxzZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX2N3ZChzZWxmKToKKyAgICAgICAgcGF0aCA9ICdmb28ucHknCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignX19weWNhY2hlX18nLCAnZm9vLnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgVHJ1ZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX292ZXJyaWRlKHNlbGYpOgorICAgICAgICAjIFdoZW4gZGVidWdfb3ZlcnJpZGUgaXMgbm90IE5vbmUsIGl0IGNhbiBiZSBhbnkgdHJ1ZS1pc2ggb3IgZmFsc2UtaXNoCisgICAgICAgICMgdmFsdWUuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6LnB5JykKKyAgICAgICAgcGFydGlhbF9leHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmF6Lnt9LnB5Jy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBbXSksIHBhcnRpYWxfZXhwZWN0ICsgJ28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBbMTddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsX2V4cGVjdCArICdjJykKKyAgICAgICAgIyBIb3dldmVyIGlmIHRoZSBib29sLWlzaG5lc3MgY2FuJ3QgYmUgZGV0ZXJtaW5lZCwgdGhlIGV4Y2VwdGlvbgorICAgICAgICAjIHByb3BhZ2F0ZXMuCisgICAgICAgIGNsYXNzIEJlYXJpc2g6CisgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6IHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJy9mb28vYmFyL2Jhei5weScsIEJlYXJpc2goKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLnNlcCA9PSAnXFwnIGFuZCBvcy5hbHRzZXAgPT0gJy8nLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgbWVhbmluZ2Z1bCBvbmx5IHdoZXJlIG9zLmFsdHNlcCBpcyBkZWZpbmVkJykKKyAgICBkZWYgdGVzdF9zZXBfYWx0c2VwX2FuZF9zZXBfY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgV2luZG93cyBwYXRoIGFuZCBQRVAgMzE0NyB3aGVyZSBzZXAgaXMgcmlnaHQgb2YgYWx0c2VwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCdcXGZvb1xcYmFyXFxiYXovcXV4LnB5JywgVHJ1ZSksCisgICAgICAgICAgICAnXFxmb29cXGJhclxcYmF6XFxfX3B5Y2FjaGVfX1xccXV4Lnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgbm90IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgdG8gbm90IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnTm9uZScpCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGUoc2VsZik6CisgICAgICAgICMgR2l2ZW4gdGhlIHBhdGggdG8gYSBQRVAgMzE0NyBkZWZpbmVkIC5weWMgZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvCisgICAgICAgICMgaXRzIHNvdXJjZS4gIFRoaXMgdGVzdHMgdGhlIGdvb2QgcGF0aC4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9ub19jYWNoZV90YWcoc2VsZik6CisgICAgICAgICMgSWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lLCByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdibGFoJywgJ19fcHljYWNoZV9fJywgJ3doYXRldmVyLnB5YycpCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoc3lzLmltcGxlbWVudGF0aW9uLCAnY2FjaGVfdGFnJywgTm9uZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZShwYXRoKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfYmFkX3BhdGgoc2VsZik6CisgICAgICAgICMgV2hlbiB0aGUgcGF0aCB0byBhIHB5YyBmaWxlIGlzIG5vdCBpbiBQRVAgMzE0NyBmb3JtYXQsIGEgVmFsdWVFcnJvcgorICAgICAgICAjIGlzIHJhaXNlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsICcvZm9vL2Jhci9iYXpxdXgucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX3NsYXNoKHNlbGYpOgorICAgICAgICAjIE5vIHNsYXNoZXMgYXQgYWxsIGluIHBhdGggLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJ2Zvby5jcHl0aG9uLTMyLnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV90b29fZmV3X2RvdHMoc2VsZik6CisgICAgICAgICMgVG9vIGZldyBkb3RzIGluIGZpbmFsIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsICdfX3B5Y2FjaGVfXy9mb28ucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX3Rvb19tYW55X2RvdHMoc2VsZik6CisgICAgICAgICMgVG9vIG1hbnkgZG90cyBpbiBmaW5hbCBwYXRoIGNvbXBvbmVudCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLAorICAgICAgICAgICAgJ19fcHljYWNoZV9fL2Zvby5jcHl0aG9uLTMyLmZvby5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fX3B5Y2FjaGVfXyhzZWxmKToKKyAgICAgICAgIyBBbm90aGVyIHByb2JsZW0gd2l0aCB0aGUgcGF0aCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLAorICAgICAgICAgICAgJy9mb28vYmFyL2Zvby5jcHl0aG9uLTMyLmZvby5weWMnKQorCitGcm96ZW5fUEVQMzE0N1Rlc3RzLCBTb3VyY2VfUEVQMzE0N1Rlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUEVQMzE0N1Rlc3RzLAorICAgICAgICB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5CmluZGV4IGVmMzJmN2QuLmNiMDhjZTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weQpAQCAtMSw5ICsxLDI5IEBACiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCi1pbXBvcnQgaW1wCiBpbXBvcnQgb3MucGF0aAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworCisKK2RlZiBpbXBvcnRfaW1wb3J0bGliKG1vZHVsZV9uYW1lKToKKyAgICAiIiJJbXBvcnQgYSBtb2R1bGUgZnJvbSBpbXBvcnRsaWIgYm90aCB3LyBhbmQgdy9vIF9mcm96ZW5faW1wb3J0bGliLiIiIgorICAgIGZyZXNoID0gKCdpbXBvcnRsaWInLCkgaWYgJy4nIGluIG1vZHVsZV9uYW1lIGVsc2UgKCkKKyAgICBmcm96ZW4gPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUobW9kdWxlX25hbWUpCisgICAgc291cmNlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKG1vZHVsZV9uYW1lLCBmcmVzaD1mcmVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tlZD0oJ19mcm96ZW5faW1wb3J0bGliJywpKQorICAgIHJldHVybiBmcm96ZW4sIHNvdXJjZQorCisKK2RlZiB0ZXN0X2JvdGgodGVzdF9jbGFzcywgKiprd2FyZ3MpOgorICAgIGZyb3plbl90ZXN0cyA9IHR5cGVzLm5ld19jbGFzcygnRnJvemVuXycrdGVzdF9jbGFzcy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSkKKyAgICBzb3VyY2VfdGVzdHMgPSB0eXBlcy5uZXdfY2xhc3MoJ1NvdXJjZV8nK3Rlc3RfY2xhc3MuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSkpCisgICAgZm9yIGF0dHIsIChmcm96ZW5fdmFsdWUsIHNvdXJjZV92YWx1ZSkgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgIHNldGF0dHIoZnJvemVuX3Rlc3RzLCBhdHRyLCBmcm96ZW5fdmFsdWUpCisgICAgICAgIHNldGF0dHIoc291cmNlX3Rlc3RzLCBhdHRyLCBzb3VyY2VfdmFsdWUpCisgICAgcmV0dXJuIGZyb3plbl90ZXN0cywgc291cmNlX3Rlc3RzCiAKIAogQ0FTRV9JTlNFTlNJVElWRV9GUyA9IFRydWUKQEAgLTk4LDcgKzExOCw3IEBACiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IG5hbWUucnNwbGl0KCcuJywgMSlbMF0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IGltcG9ydF9uYW1lCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShpbXBvcnRfbmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoaW1wb3J0X25hbWUpCiAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKICAgICAgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICc8bW9jayBfX2ZpbGVfXz4nCiAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBwYWNrYWdlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkgYi9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKaW5kZXggNWNiZWM5Yi4uOWQzNDkwNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQpAQCAtOCwxMCArOCwxNiBAQAogaW1wb3J0IGNvbGxlY3Rpb25zCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbXBvcnRsaWIKIGZyb20gb3MucGF0aCBpbXBvcnQgbm9ybWNhc2UKK3RyeToKKyAgICBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgVGhyZWFkUG9vbEV4ZWN1dG9yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgVGhyZWFkUG9vbEV4ZWN1dG9yID0gTm9uZQogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIERpcnNPblN5c1BhdGgKLQorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQogZnJvbSB0ZXN0IGltcG9ydCBpbnNwZWN0X2ZvZGRlciBhcyBtb2QKIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIyIGFzIG1vZDIKIApAQCAtMTIwLDcgKzEyNiw2IEBACiAgICAgZGVmIHRlc3RfZ2V0X3Nsb3RfbWVtYmVycyhzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgX19zbG90c19fID0gKCJhIiwgImIiKQotCiAgICAgICAgIHggPSBDKCkKICAgICAgICAgeC5hID0gNDIKICAgICAgICAgbWVtYmVycyA9IGRpY3QoaW5zcGVjdC5nZXRtZW1iZXJzKHgpKQpAQCAtNDE4LDE0ICs0MjMsMTQgQEAKICAgICAgICAgICAgIHVuaWNvZGVkYXRhLl9fZmlsZV9fWy00Ol0gaW4gKCIucHljIiwgIi5weW8iKSwKICAgICAgICAgInVuaWNvZGVkYXRhIGlzIG5vdCBhbiBleHRlcm5hbCBiaW5hcnkgbW9kdWxlIikKICAgICBkZWYgdGVzdF9maW5kc291cmNlX2JpbmFyeShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIHVuaWNvZGVkYXRhKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIHVuaWNvZGVkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgdW5pY29kZWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgdW5pY29kZWRhdGEpCiAKICAgICBkZWYgdGVzdF9maW5kc291cmNlX2NvZGVfaW5fbGluZWNhY2hlKHNlbGYpOgogICAgICAgICBsaW5lcyA9IFsieD0xIl0KICAgICAgICAgY28gPSBjb21waWxlKGxpbmVzWzBdLCAiX2R5bmFtaWNhbGx5X2NyZWF0ZWRfZmlsZSIsICJleGVjIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCBjbykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIGNvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIGNvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgY28pCiAgICAgICAgIGxpbmVjYWNoZS5jYWNoZVtjby5jb19maWxlbmFtZV0gPSAoMSwgTm9uZSwgbGluZXMsIGNvLmNvX2ZpbGVuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZmluZHNvdXJjZShjbyksIChsaW5lcywwKSkKQEAgLTQ2MywxMyArNDY4LDEzIEBACiAgICAgQSBicm9rZW4gZGF0YSBkZXNjcmlwdG9yLiBTZWUgYnVnICMxNzg1LgogICAgICIiIgogICAgIGRlZiBfX2dldF9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRfXyBkYXRhIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBkYXRhIGRlc2NyaXB0b3IiKQogCiAgICAgZGVmIF9fc2V0X18oKmFyZ3MpOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKIAogICAgIGRlZiBfX2dldGF0dHJfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0YXR0cl9fIGRhdGEgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIGRhdGEgZGVzY3JpcHRvciIpCiAKIAogY2xhc3MgX0Jyb2tlbk1ldGhvZERlc2NyaXB0b3Iob2JqZWN0KToKQEAgLTQ3NywxMCArNDgyLDEwIEBACiAgICAgQSBicm9rZW4gbWV0aG9kIGRlc2NyaXB0b3IuIFNlZSBidWcgIzE3ODUuCiAgICAgIiIiCiAgICAgZGVmIF9fZ2V0X18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldF9fIG1ldGhvZCBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gbWV0aG9kIGRlc2NyaXB0b3IiKQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRhdHRyX18gbWV0aG9kIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBtZXRob2QgZGVzY3JpcHRvciIpCiAKIAogIyBIZWxwZXIgZm9yIHRlc3RpbmcgY2xhc3NpZnlfY2xhc3NfYXR0cnMuCkBAIC02NTAsNiArNjU1LDg4IEBACiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGJ1aWx0aW4sIHR5cGUpOgogICAgICAgICAgICAgICAgIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoYnVpbHRpbikKIAorICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X0R5bmFtaWNDbGFzc0F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdoYW0nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgVkEobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGhhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2VnZ3MnCisgICAgICAgIHNob3VsZF9maW5kX2RjYSA9IGluc3BlY3QuQXR0cmlidXRlKCdoYW0nLCAnZGF0YScsIFZBLCBWQS5fX2RpY3RfX1snaGFtJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmRfZGNhLCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKFZBKSkKKyAgICAgICAgc2hvdWxkX2ZpbmRfZ2EgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnaGFtJywgJ2RhdGEnLCBNZXRhLCAnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmRfZ2EsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoVkEpKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfbWV0YWNsYXNzX2NsYXNzX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGZpc2ggPSAnc2xhcCcKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZXNfXycsICdfX25hbWVfXycsICdmaXNoJ10KKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzaG91bGRfZmluZCA9IGluc3BlY3QuQXR0cmlidXRlKCdmaXNoJywgJ2RhdGEnLCBNZXRhLCAnc2xhcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmQsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQ2xhc3MpKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfVmlydHVhbEF0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnQk9PTSddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSdCT09NJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyKG5hbWUpCisgICAgICAgIGNsYXNzIENsYXNzKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2hvdWxkX2ZpbmQgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnQk9PTScsICdkYXRhJywgTWV0YSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmQsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQ2xhc3MpKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfVmlydHVhbEF0dHJpYnV0ZV9tdWx0aV9jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhMSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnb25lJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J29uZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTIodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ3R3byddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0d28nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIE1ldGEzKE1ldGExLCBNZXRhMik6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KHNvcnRlZChzZXQoWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0aHJlZSddICsKKyAgICAgICAgICAgICAgICAgICAgTWV0YTEuX19kaXJfXyhjbHMpICsgTWV0YTIuX19kaXJfXyhjbHMpKSkpCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0aHJlZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MxKG1ldGFjbGFzcz1NZXRhMSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIENsYXNzMihDbGFzczEsIG1ldGFjbGFzcz1NZXRhMyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2hvdWxkX2ZpbmQxID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ29uZScsICdkYXRhJywgTWV0YTEsIDEpCisgICAgICAgIHNob3VsZF9maW5kMiA9IGluc3BlY3QuQXR0cmlidXRlKCd0d28nLCAnZGF0YScsIE1ldGEyLCAyKQorICAgICAgICBzaG91bGRfZmluZDMgPSBpbnNwZWN0LkF0dHJpYnV0ZSgndGhyZWUnLCAnZGF0YScsIE1ldGEzLCAzKQorICAgICAgICBjY2EgPSBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKENsYXNzMikKKyAgICAgICAgZm9yIHNmIGluIChzaG91bGRfZmluZDEsIHNob3VsZF9maW5kMiwgc2hvdWxkX2ZpbmQzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2YsIGNjYSkKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X2NsYXNzX2F0dHJzX3dpdGhfYnVnZ3lfZGlyKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19uYW1lX18nLCAnbWlzc2luZyddCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhdHRycyA9IFthWzBdIGZvciBhIGluIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQyldCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21pc3NpbmcnLCBhdHRycykKKwogICAgIGRlZiB0ZXN0X2dldG1lbWJlcnNfZGVzY3JpcHRvcnMoc2VsZik6CiAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKICAgICAgICAgICAgIGRkID0gX0Jyb2tlbkRhdGFEZXNjcmlwdG9yKCkKQEAgLTY5Myw2ICs3ODAsMjggQEAKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBiLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoYikpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdmJywgYi5mKSwgaW5zcGVjdC5nZXRtZW1iZXJzKGIsIGluc3BlY3QuaXNtZXRob2QpKQogCisgICAgZGVmIHRlc3RfZ2V0bWVtYmVyc19WaXJ0dWFsQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKGNscywgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnZWdncyc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc2NyYW1ibGVkJworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIEEobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGVnZ3Moc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzcGFtJworICAgICAgICBzZWxmLmFzc2VydEluKCgnZWdncycsICdzY3JhbWJsZWQnKSwgaW5zcGVjdC5nZXRtZW1iZXJzKEEpKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZWdncycsICdzcGFtJyksIGluc3BlY3QuZ2V0bWVtYmVycyhBKCkpKQorCisgICAgZGVmIHRlc3RfZ2V0bWVtYmVyc193aXRoX2J1Z2d5X2RpcihzZWxmKToKKyAgICAgICAgY2xhc3MgTSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbmFtZV9fJywgJ21pc3NpbmcnXQorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYXR0cnMgPSBbYVswXSBmb3IgYSBpbiBpbnNwZWN0LmdldG1lbWJlcnMoQyldCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21pc3NpbmcnLCBhdHRycykKKwogCiBfZ2xvYmFsX3JlZiA9IG9iamVjdCgpCiBjbGFzcyBUZXN0R2V0Q2xvc3VyZVZhcnModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTA4MCw2ICsxMTg5LDE1IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKFRoaW5nLCAneCcpLCBUaGluZy54KQogCisgICAgZGVmIHRlc3RfY2xhc3NWaXJ0dWFsQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBUaGluZyhvYmplY3QpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIHgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3gKKyAgICAgICAgICAgIF94ID0gb2JqZWN0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoVGhpbmcsICd4JyksIFRoaW5nLl9fZGljdF9fWyd4J10pCisKICAgICBkZWYgdGVzdF9pbmhlcml0ZWRfY2xhc3NhdHRyaWJ1dGUoc2VsZik6CiAgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CiAgICAgICAgICAgICB4ID0gb2JqZWN0KCkKQEAgLTE3MzYsNiArMTg1NCwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdiJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogCisgICAgICAgICMgVGVzdCB3ZSBoYW5kbGUgX19zaWduYXR1cmVfXyBwYXJ0d2F5IGRvd24gdGhlIHdyYXBwZXIgc3RhY2sKKyAgICAgICAgZGVmIHdyYXBwZWRfZm9vX2NhbGwoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd3JhcHBlZF9mb29fY2FsbC5fX3dyYXBwZWRfXyA9IEZvby5fX2NhbGxfXworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUod3JhcHBlZF9mb29fY2FsbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKwogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9jbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhKToKQEAgLTE4NTAsNiArMTk3OSwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKFdyYXBwZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorICAgICAgICAjIHdyYXBwZXIgbG9vcDoKKyAgICAgICAgV3JhcHBlZC5fX3dyYXBwZWRfXyA9IFdyYXBwZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd3cmFwcGVyIGxvb3AnKToKKyAgICAgICAgICAgIHNlbGYuc2lnbmF0dXJlKFdyYXBwZWQpCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fbGFtYmRhcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZSgobGFtYmRhIGE9MTA6IGEpKSwKQEAgLTIzMDEsNiArMjQzNCwxMDMgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChiYSwgYmE0KQogCiAKK2NsYXNzIFRlc3RVbndyYXAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW53cmFwX29uZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYSArIGIKKyAgICAgICAgd3JhcHBlciA9IGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT0yMCkoZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnNwZWN0LnVud3JhcCh3cmFwcGVyKSwgZnVuYykKKworICAgIGRlZiB0ZXN0X3Vud3JhcF9zZXZlcmFsKHNlbGYpOgorICAgICAgICBkZWYgZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICB3cmFwcGVyID0gZnVuYworICAgICAgICBmb3IgX18gaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgQGZ1bmN0b29scy53cmFwcyh3cmFwcGVyKQorICAgICAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3JhcHBlci5fX3dyYXBwZWRfXywgZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnNwZWN0LnVud3JhcCh3cmFwcGVyKSwgZnVuYykKKworICAgIGRlZiB0ZXN0X3N0b3Aoc2VsZik6CisgICAgICAgIGRlZiBmdW5jMShhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMxKQorICAgICAgICBkZWYgZnVuYzIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jMikKKyAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZnVuYzIuc3RvcF9oZXJlID0gMQorICAgICAgICB1bndyYXBwZWQgPSBpbnNwZWN0LnVud3JhcCh3cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wPShsYW1iZGEgZjogaGFzYXR0cihmLCAic3RvcF9oZXJlIikpKQorICAgICAgICBzZWxmLmFzc2VydElzKHVud3JhcHBlZCwgZnVuYzIpCisKKyAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMxKCk6IHBhc3MKKyAgICAgICAgZnVuYzEuX193cmFwcGVkX18gPSBmdW5jMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgaW5zcGVjdC51bndyYXAoZnVuYzEpCisKKyAgICAgICAgZGVmIGZ1bmMyKCk6IHBhc3MKKyAgICAgICAgZnVuYzIuX193cmFwcGVkX18gPSBmdW5jMQorICAgICAgICBmdW5jMS5fX3dyYXBwZWRfXyA9IGZ1bmMyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBpbnNwZWN0LnVud3JhcChmdW5jMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd3cmFwcGVyIGxvb3AnKToKKyAgICAgICAgICAgIGluc3BlY3QudW53cmFwKGZ1bmMyKQorCisgICAgZGVmIHRlc3RfdW5oYXNoYWJsZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoKTogcGFzcworICAgICAgICBmdW5jLl9fd3JhcHBlZF9fID0gTm9uZQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lCisgICAgICAgICAgICBfX3dyYXBwZWRfXyA9IGZ1bmMKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5zcGVjdC51bndyYXAoQygpKSkKKworY2xhc3MgVGVzdE1haW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X29ubHlfc291cmNlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pdHRlc3QnKQorICAgICAgICBsaW5lcyA9IG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgIyBpZ25vcmUgdGhlIGZpbmFsIG5ld2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s6LTFdLCBpbnNwZWN0LmdldHNvdXJjZShtb2R1bGUpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoVGhyZWFkUG9vbEV4ZWN1dG9yIGlzIE5vbmUsCisgICAgICAgICAgICAndGhyZWFkcyByZXF1aXJlZCB0byB0ZXN0IF9fcXVhbG5hbWVfXyBmb3Igc291cmNlIGZpbGVzJykKKyAgICBkZWYgdGVzdF9xdWFsbmFtZV9zb3VyY2Uoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ2luc3BlY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25jdXJyZW50LmZ1dHVyZXM6VGhyZWFkUG9vbEV4ZWN1dG9yJykKKyAgICAgICAgbGluZXMgPSBvdXQuZGVjb2RlKCkuc3BsaXRsaW5lcygpCisgICAgICAgICMgaWdub3JlIHRoZSBmaW5hbCBuZXdsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXNbOi0xXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmdldHNvdXJjZShUaHJlYWRQb29sRXhlY3V0b3IpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5zKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICBfLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAnaW5zcGVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMnKQorICAgICAgICBsaW5lcyA9IGVyci5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJDYW4ndCBnZXQgaW5mbyBmb3IgYnVpbHRpbiBtb2R1bGVzLiJdKQorCisgICAgZGVmIHRlc3RfZGV0YWlscyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3VuaXR0ZXN0JykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnaW5zcGVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuaXR0ZXN0JywgJy0tZGV0YWlscycpCisgICAgICAgIG91dHB1dCA9IG91dC5kZWNvZGUoKQorICAgICAgICAjIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgb24gdGhlIG91dHB1dAorICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX25hbWVfXywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX2ZpbGVfXywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX2NhY2hlZF9fLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisKKworCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoCiAgICAgICAgIFRlc3REZWNvcmF0b3JzLCBUZXN0UmV0cmlldmluZ1NvdXJjZUNvZGUsIFRlc3RPbmVsaW5lcnMsIFRlc3RCdWdneUNhc2VzLApAQCAtMjMwOCw3ICsyNTM4LDcgQEAKICAgICAgICAgVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zLCBUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzLAogICAgICAgICBUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgVGVzdEdldGF0dHJTdGF0aWMsIFRlc3RHZXRHZW5lcmF0b3JTdGF0ZSwKICAgICAgICAgVGVzdE5vRU9MLCBUZXN0U2lnbmF0dXJlT2JqZWN0LCBUZXN0U2lnbmF0dXJlQmluZCwgVGVzdFBhcmFtZXRlck9iamVjdCwKLSAgICAgICAgVGVzdEJvdW5kQXJndW1lbnRzLCBUZXN0R2V0Q2xvc3VyZVZhcnMKKyAgICAgICAgVGVzdEJvdW5kQXJndW1lbnRzLCBUZXN0R2V0Q2xvc3VyZVZhcnMsIFRlc3RVbndyYXAsIFRlc3RNYWluCiAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbnQucHkgYi9MaWIvdGVzdC90ZXN0X2ludC5weQppbmRleCBjMTk4YmNjLi40ZTAwNjIyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ludC5weQpAQCAtMjI4LDYgKzIyOCw0NyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgYmFzZT0xMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIGJhc2U9MCkKIAorICAgIGRlZiB0ZXN0X2ludF9iYXNlX2xpbWl0cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdGluZyB0aGUgc3VwcG9ydGVkIGxpbWl0cyBvZiB0aGUgaW50KCkgYmFzZSBwYXJhbWV0ZXIuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwJywgNSksIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgMzcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCAtOTA5KSAgIyBBbiBvbGQgbWFnaWMgdmFsdWUgYmFzZSBmcm9tIFB5dGhvbiAyLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgYmFzZT0wLSgyKioyMzQpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgYmFzZT0yKioyMzQpCisgICAgICAgICMgQmFzZXMgMiB0aHJvdWdoIDM2IGFyZSBzdXBwb3J0ZWQuCisgICAgICAgIGZvciBiYXNlIGluIHJhbmdlKDIsMzcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAnLCBiYXNlPWJhc2UpLCAwKQorCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfYmFkX3R5cGVzKHNlbGYpOgorICAgICAgICAiIiJOb3QgaW50ZWdlciB0eXBlcyBhcmUgbm90IHZhbGlkIGJhc2VzOyBpc3N1ZTE2NzcyLiIiIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCA1LjUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDUuMCkKKworICAgIGRlZiB0ZXN0X2ludF9iYXNlX2luZGV4YWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTXlJbmRleGFibGUob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKyAgICAgICAgIyBDaGVjayBvdXQgb2YgcmFuZ2UgYmFzZXMuCisgICAgICAgIGZvciBiYXNlIGluIDIqKjEwMCwgLTIqKjEwMCwgMSwgMzc6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGludCgnNDMnLCBiYXNlKQorCisgICAgICAgICMgQ2hlY2sgaW4tcmFuZ2UgYmFzZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDEnLCBiYXNlPU15SW5kZXhhYmxlKDIpKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMScsIGJhc2U9TXlJbmRleGFibGUoMTApKSwgMTAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAxJywgYmFzZT1NeUluZGV4YWJsZSgzNikpLCAxICsgMzYqKjIpCisKICAgICBkZWYgdGVzdF9ub25fbnVtZXJpY19pbnB1dF90eXBlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHBvc3NpYmxlIG5vbi1udW1lcmljIHR5cGVzIGZvciB0aGUgYXJndW1lbnQgeCwgaW5jbHVkaW5nCiAgICAgICAgICMgc3ViY2xhc3NlcyBvZiB0aGUgZXhwbGljaXRseSBkb2N1bWVudGVkIGFjY2VwdGVkIHR5cGVzLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pby5weSBiL0xpYi90ZXN0L3Rlc3RfaW8ucHkKaW5kZXggOWI4OTIwMi4uYzFlYTZmMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lvLnB5CkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gMQotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogCiBjbGFzcyBDQ2xvc2VGYWlsdXJlSU8oQ2xvc2VGYWlsdXJlSU8sIGlvLlJhd0lPQmFzZSk6CiAgICAgcGFzcwpAQCAtNjAxLDkgKzYwMSw5IEBACiAgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICBmLmZsdXNoID0gYmFkX2ZsdXNoCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGYuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKQEAgLTc2Miw3ICs3NjIsNyBAQAogICAgICAgICBpZiBzOgogICAgICAgICAgICAgIyBUaGUgZGVzdHJ1Y3RvciAqbWF5KiBoYXZlIHByaW50ZWQgYW4gdW5yYWlzYWJsZSBlcnJvciwgY2hlY2sgaXQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuc3BsaXRsaW5lcygpKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBJT0Vycm9yOiAiKSwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBPU0Vycm9yOiAiKSwgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKCIgaWdub3JlZCIpLCBzKQogCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKQEAgLTc3OCwyMiArNzc4LDIyIEBACiAgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgcmF3LmZsdXNoID0gYmFkX2ZsdXNoCiAgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2ZsdXNoJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2ZsdXNoJykKICAgICAgICAgZGVmIGJhZF9jbG9zZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignY2xvc2UnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY2xvc2UnKQogICAgICAgICByYXcuY2xvc2UgPSBiYWRfY2xvc2UKICAgICAgICAgYiA9IHNlbGYudHAocmF3KQogICAgICAgICBiLmZsdXNoID0gYmFkX2ZsdXNoCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgZXJyOiAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgZXJyOiAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgICAgICBiLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhjZXB0aW9uLmFyZ3MsICgnY2xvc2UnLCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXy5hcmdzLCAoJ2ZsdXNoJywpKQpAQCAtODMzLDYgKzgzMywxNCBAQAogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoYnVmaW8pLCBzaXplICsgYnVmc2l6ZTIpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9idWZmZXJfZnJlZWluZyhzZWxmKSA6CisgICAgICAgIGJ1ZnNpemUgPSA0MDk2CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUpCisgICAgICAgIHNpemUgPSBzeXMuZ2V0c2l6ZW9mKGJ1ZmlvKSAtIGJ1ZnNpemUKKyAgICAgICAgYnVmaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoYnVmaW8pLCBzaXplKQogCiBjbGFzcyBCdWZmZXJlZFJlYWRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UsIENvbW1vbkJ1ZmZlcmVkVGVzdHMpOgogICAgIHJlYWRfbW9kZSA9ICJyYiIKQEAgLTEwMDcsOCArMTAxNSw4IEBACiAgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKToKICAgICAgICAgcmF3aW8gPSBzZWxmLk1pc2JlaGF2ZWRSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnNlZWssIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnRlbGwpCiAKICAgICBkZWYgdGVzdF9ub19leHRyYW5lb3VzX3JlYWQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzk1NTA7IHdoZW4gdGhlIHJhdyBJTyBvYmplY3QgaGFzIHNhdGlzZmllZCB0aGUgcmVhZCByZXF1ZXN0LApAQCAtMTA1OSwxNyArMTA2NywxOCBAQAogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCiAgICAgICAgICMgX3B5aW8uQnVmZmVyZWRSZWFkZXIgc2VlbXMgdG8gaW1wbGVtZW50IHJlYWRpbmcgZGlmZmVyZW50LCBzbyB0aGF0CiAgICAgICAgICMgY2hlY2tpbmcgdGhpcyBpcyBub3Qgc28gZWFzeS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8ucmVhZCwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnJlYWQsIDEwKQogCiAgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpOgogICAgICAgICAjIEMgQnVmZmVyZWRSZWFkZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLgogICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbnRvIGdjLmdhcmJhZ2UgaW5zdGVhZAotICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKLSAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCi0gICAgICAgIGYuZiA9IGYKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQotICAgICAgICBkZWwgZgotICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSZXNvdXJjZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQorICAgICAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBmLmYgPSBmCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgICAgICBkZWwgZgorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCiAKICAgICBkZWYgdGVzdF9hcmdzX2Vycm9yKHNlbGYpOgpAQCAtMTMxMiw5ICsxMzIxLDkgQEAKICAgICBkZWYgdGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpOgogICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKCkKICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvLCA1KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5zZWVrLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby50ZWxsKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby53cml0ZSwgYiJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby53cml0ZSwgYiJhYmNkZWYiKQogCiAgICAgZGVmIHRlc3RfbWF4X2J1ZmZlcl9zaXplX3JlbW92YWwoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKQEAgLTEzMjMsMTEgKzEzMzIsMTEgQEAKICAgICBkZWYgdGVzdF93cml0ZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBkZWYgYmFkX3dyaXRlKGIpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgcmF3LndyaXRlID0gYmFkX3dyaXRlCiAgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKICAgICAgICAgYi53cml0ZShiJ3NwYW0nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuY2xvc2VkKQogCiAKQEAgLTEzNTgsMTMgKzEzNjcsMTQgQEAKICAgICAgICAgIyBDIEJ1ZmZlcmVkV3JpdGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZCwgYW5kIGNvbGxlY3RpbmcgdGhlbSBmbHVzaGVzCiAgICAgICAgICMgYWxsIGRhdGEgdG8gZGlzay4KICAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW50byBnYy5nYXJiYWdlIGluc3RlYWQKLSAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCi0gICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQotICAgICAgICBmLndyaXRlKGIiMTIzeHh4IikKLSAgICAgICAgZi54ID0gZgotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCi0gICAgICAgIGRlbCBmCi0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCisgICAgICAgICAgICBmID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIGYud3JpdGUoYiIxMjN4eHgiKQorICAgICAgICAgICAgZi54ID0gZgorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICAgICAgZGVsIGYKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiMTIzeHh4IikKQEAgLTEzOTcsMTQgKzE0MDcsMTQgQEAKICAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLnRwLCBOb3RSZWFkYWJsZSgpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLnRwLCBOb3RSZWFkYWJsZSgpLCBzZWxmLk1vY2tSYXdJTygpKQogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfd2l0aF9ub3Rfd3JpdGVhYmxlKHNlbGYpOgogICAgICAgICBjbGFzcyBOb3RXcml0ZWFibGUoTW9ja1Jhd0lPKToKICAgICAgICAgICAgIGRlZiB3cml0YWJsZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLnRwLCBzZWxmLk1vY2tSYXdJTygpLCBOb3RXcml0ZWFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi50cCwgc2VsZi5Nb2NrUmF3SU8oKSwgTm90V3JpdGVhYmxlKCkpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmNkZWYiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKQEAgLTIxNjUsNyArMjE3NSw3IEBACiAgICAgICAgIGlmIHM6CiAgICAgICAgICAgICAjIFRoZSBkZXN0cnVjdG9yICptYXkqIGhhdmUgcHJpbnRlZCBhbiB1bnJhaXNhYmxlIGVycm9yLCBjaGVjayBpdAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5zcGxpdGxpbmVzKCkpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIElPRXJyb3I6ICIpLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIE9TRXJyb3I6ICIpLCBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoIiBpZ25vcmVkIiksIHMpCiAKICAgICAjIFN5c3RlbWF0aWMgdGVzdHMgb2YgdGhlIHRleHQgSS9PIEFQSQpAQCAtMjIzNyw3ICsyMjQ3LDcgQEAKICAgICAgICAgZi5zZWVrKDApCiAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsICJceGZmXG4iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZi50ZWxsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi50ZWxsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwMikKICAgICAgICAgZi5jbG9zZSgpCiAKQEAgLTIzNDEsNyArMjM1MSw3IEBACiAgICAgICAgICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihVblJlYWRhYmxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHR4dC5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB0eHQucmVhZCkKIAogICAgIGRlZiB0ZXN0X3JlYWRfb25lX2J5X29uZShzZWxmKToKICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiIkFBXHJcbkJCIikpCkBAIC0yNTE2LDkgKzI1MjYsOSBAQAogICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICB0eHQuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdHh0LmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHR4dC5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUodHh0LmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgpAQCAtMjU5OSwxNCArMjYwOSwxNSBAQAogICAgICAgICAjIEMgVGV4dElPV3JhcHBlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcwogICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCiAgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGluIGdjLmdhcmJhZ2UgaW5zdGVhZC4KLSAgICAgICAgcmF3aW8gPSBpby5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHJhd2lvKQotICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCi0gICAgICAgIHQud3JpdGUoIjQ1NmRlZiIpCi0gICAgICAgIHQueCA9IHQKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0KQotICAgICAgICBkZWwgdAotICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSZXNvdXJjZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHJhd2lvID0gaW8uRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIocmF3aW8pCisgICAgICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgICAgICB0LndyaXRlKCI0NTZkZWYiKQorICAgICAgICAgICAgdC54ID0gdAorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0KQorICAgICAgICAgICAgZGVsIHQKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiNDU2ZGVmIikKQEAgLTI4OTYsNyArMjkwNyw3IEBACiAgICAgICAgICAgICBmb3IgZmQgaW4gZmRzOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXBfZmRzKQpAQCAtMzA2MiwxNSArMzA3MywxOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aW8gPSBzZWxmLmlvLm9wZW4odywgKipmZG9wZW5fa3dhcmdzKQogICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKICAgICAgICAgICAgICMgRmlsbCB0aGUgcGlwZSBlbm91Z2ggdGhhdCB0aGUgd3JpdGUgd2lsbCBiZSBibG9ja2luZy4KICAgICAgICAgICAgICMgSXQgd2lsbCBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgdGltZXIgYXJtZWQgYWJvdmUuICBTaW5jZSB0aGUKICAgICAgICAgICAgICMgb3RoZXIgdGhyZWFkIGhhcyByZWFkIG9uZSBieXRlLCB0aGUgbG93LWxldmVsIHdyaXRlIHdpbGwKICAgICAgICAgICAgICMgcmV0dXJuIHdpdGggYSBzdWNjZXNzZnVsIChwYXJ0aWFsKSByZXN1bHQgcmF0aGVyIHRoYW4gYW4gRUlOVFIuCiAgICAgICAgICAgICAjIFRoZSBidWZmZXJlZCBJTyBsYXllciBtdXN0IGNoZWNrIGZvciBwZW5kaW5nIHNpZ25hbAogICAgICAgICAgICAgIyBoYW5kbGVycywgd2hpY2ggaW4gdGhpcyBjYXNlIHdpbGwgaW52b2tlIGFsYXJtX2ludGVycnVwdCgpLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICB3aW8ud3JpdGUsIGl0ZW0gKiAoc3VwcG9ydC5QSVBFX01BWF9TSVpFIC8vIGxlbihpdGVtKSArIDEpKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lvLndyaXRlLCBpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCiAgICAgICAgICAgICB0LmpvaW4oKQogICAgICAgICAgICAgIyBXZSBnb3Qgb25lIGJ5dGUsIGdldCBhbm90aGVyIG9uZSBhbmQgY2hlY2sgdGhhdCBpdCBpc24ndCBhCiAgICAgICAgICAgICAjIHJlcGVhdCBvZiB0aGUgZmlyc3Qgb25lLgpAQCAtMzA4NCw3ICszMDk4LDcgQEAKICAgICAgICAgICAgICMgYnVmZmVyLCBhbmQgYmxvY2sgYWdhaW4uCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2lvLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTMyMTIsNyArMzIyNiw3IEBACiAgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGNvdWxkIGJsb2NrIChpbiBjYXNlIG9mIGZhaWx1cmUpLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5IGIvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQppbmRleCA1MzFjOWFmLi5lZmU5ZjUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKQEAgLTgsNyArOCw3IEBACiAKIHRyeToKICAgICB0dHkgPSBvcGVuKCIvZGV2L3R0eSIsICJyYiIpCi1leGNlcHQgSU9FcnJvcjoKK2V4Y2VwdCBPU0Vycm9yOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJVbmFibGUgdG8gb3BlbiAvZGV2L3R0eSIpCiBlbHNlOgogICAgICMgU2tpcCBpZiBhbm90aGVyIHByb2Nlc3MgaXMgaW4gZm9yZWdyb3VuZApAQCAtODYsOCArODYsNiBAQAogICAgICAgICAgICAgb3MuY2xvc2UobWZkKQogICAgICAgICAgICAgb3MuY2xvc2Uoc2ZkKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KElvY3RsVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKaW5kZXggOTljNTRmMS4uZjNiMTU2NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKQEAgLTEzMTksNiArMTMxOSwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKAogICAgICAgICAgICAgICAgICcxMjcuNDIuMC4wLzE2JykuaXNfbG9vcGJhY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMjguMC4wLjAnKS5pc19sb29wYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAwLjY0LjAuMC8xMCcpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykuaXNfZ2xvYmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTkyLjAuMi4xMjgvMjUnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzE5Mi4wLjMuMC8yNCcpLmlzX2dsb2JhbCkKIAogICAgICAgICAjIHRlc3QgYWRkcmVzc2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzAuMC4wLjAnKS5pc191bnNwZWNpZmllZCkKQEAgLTEzODQsNiArMTM5MiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnOjoxJykuaXNfdW5zcGVjaWZpZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCc6Oi8xMjcnKS5pc191bnNwZWNpZmllZCkKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzIwMDE6OjEvMTI4JykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcyMDA6OjEvMTI4JykuaXNfZ2xvYmFsKQogICAgICAgICAjIHRlc3QgYWRkcmVzc2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJ2ZmZmY6OicpLmlzX211bHRpY2FzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfYWRkcmVzcygyKioxMjggLSAxKS5pc19tdWx0aWNhc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKaW5kZXggOTEwMWY2Yy4uMTUyZjVmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQpAQCAtNDUsMzEgKzQ1LDIxIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gaXRlcnRvb2xzIGltcG9ydCByZXBlYXQKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCi1mcm9tIGJ1aWx0aW5zIGltcG9ydCBsZW4gYXMgX2xlbgorZnJvbSBvcGVyYXRvciBpbXBvcnQgbGVuZ3RoX2hpbnQKIAogbiA9IDEwCiAKLWRlZiBsZW4ob2JqKToKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBfbGVuKG9iaikKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIG5vdGU6IHRoaXMgaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKLSAgICAgICAgICAgICMgZG9uJ3QgcmVseSBvbiBpdCBpbiB5b3VyIG93biBwcm9ncmFtcwotICAgICAgICAgICAgcmV0dXJuIG9iai5fX2xlbmd0aF9oaW50X18oKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKIAogY2xhc3MgVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnM6CiAKICAgICBkZWYgdGVzdF9pbnZhcmlhbnQoc2VsZik6CiAgICAgICAgIGl0ID0gc2VsZi5pdAogICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZSgxLCBuKzEpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBpKQogICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKIGNsYXNzIFRlc3RUZW1wb3JhcmlseUltbXV0YWJsZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucyk6CiAKQEAgLTc4LDEyICs2OCwxMiBAQAogICAgICAgICAjIGxlbmd0aCBpbW11dGFiaWxpdHkgIGR1cmluZyBpdGVyYXRpb24KIAogICAgICAgICBpdCA9IHNlbGYuaXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbikKICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuLTEpCiAgICAgICAgIHNlbGYubXV0YXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBuZXh0LCBpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKIAogIyMgLS0tLS0tLSBDb25jcmV0ZSBUeXBlIFRlc3RzIC0tLS0tLS0KIApAQCAtOTIsMTAgKzgyLDYgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuaXQgPSByZXBlYXQoTm9uZSwgbikKIAotICAgIGRlZiB0ZXN0X25vX2xlbl9mb3JfaW5maW5pdGVfcmVwZWF0KHNlbGYpOgotICAgICAgICAjIFRoZSByZXBlYXQoKSBvYmplY3QgY2FuIGFsc28gYmUgaW5maW5pdGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJlcGVhdChOb25lKSkKLQogY2xhc3MgVGVzdFhyYW5nZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTY3LDE0ICsxNTMsMTUgQEAKICAgICAgICAgaXQgPSBpdGVyKGQpCiAgICAgICAgIG5leHQoaXQpCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpCiAgICAgICAgIGQuYXBwZW5kKG4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0xKSAgIyBncm93IHdpdGggYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMSkgICMgZ3JvdyB3aXRoIGFwcGVuZAogICAgICAgICBkWzE6XSA9IFtdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQogICAgICAgICBkLmV4dGVuZChyYW5nZSgyMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCisKIAogY2xhc3MgVGVzdExpc3RSZXZlcnNlZChUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xODYsMzIgKzE3Myw0MSBAQAogICAgICAgICBpdCA9IHJldmVyc2VkKGQpCiAgICAgICAgIG5leHQoaXQpCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpCiAgICAgICAgIGQuYXBwZW5kKG4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKSAgIyBpZ25vcmUgYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMikgICMgaWdub3JlIGFwcGVuZAogICAgICAgICBkWzE6XSA9IFtdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKSAgIyBjb25maXJtIGludmFyaWFudAogICAgICAgICBkLmV4dGVuZChyYW5nZSgyMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKICMjIC0tIENoZWNrIHRvIG1ha2Ugc3VyZSBleGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCBieSBfX2xlbmd0aF9oaW50X18oKQogCiAKIGNsYXNzIEJhZExlbihvYmplY3QpOgotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGVsbG8nKQogCisKIGNsYXNzIEJhZExlbmd0aEhpbnQob2JqZWN0KToKLSAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKwogICAgIGRlZiBfX2xlbmd0aF9oaW50X18oc2VsZik6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGVsbG8nKQogCisKIGNsYXNzIE5vbmVMZW5ndGhIaW50KG9iamVjdCk6Ci0gICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisKICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKwogCiBjbGFzcyBUZXN0TGVuZ3RoSGludEV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CmluZGV4IDUxNGE2YjcuLjI2NzJiMDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CkBAIC0xNzI5LDkgKzE3MjksOCBAQAogY2xhc3MgTGVuZ3RoVHJhbnNwYXJlbmN5KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKLSAgICAgICAgZnJvbSB0ZXN0LnRlc3RfaXRlcmxlbiBpbXBvcnQgbGVuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcGVhdChOb25lLCA1MCkpLCA1MCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJlcGVhdChOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSwgNTApKSwgNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQocmVwZWF0KE5vbmUpLCAxMiksIDEyKQogCiBjbGFzcyBSZWdyZXNzaW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkKaW5kZXggZDIzZTI4NS4uMzVjMDJkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2RlY29kZS5weQpAQCAtMSw1ICsxLDUgQEAKIGltcG9ydCBkZWNpbWFsCi1mcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIEJ5dGVzSU8KIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiBmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CiAKQEAgLTcwLDUgKzcwLDI2IEBACiAgICAgICAgIG1zZyA9ICdlc2NhcGUnCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCBzKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9pbnB1dF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSAndGhlIEpTT04gb2JqZWN0IG11c3QgYmUgc3RyJworICAgICAgICBmb3IgdmFsdWUgaW4gWzEsIDMuMTQsIGInYnl0ZXMnLCBiJ1x4ZmZceDAwJywgW10sIHt9LCBOb25lXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2csIHNlbGYubG9hZHMsIHZhbHVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoQnl0ZXNJTyhiJ1sxLDIsM10nKSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ193aXRoX3V0ZjhfYm9tKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg5NTgKKyAgICAgICAgYm9tX2pzb24gPSAiWzEsMiwzXSIuZW5jb2RlKCd1dGYtOC1zaWcnKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZHMoYm9tX2pzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JPTScsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoU3RyaW5nSU8oYm9tX2pzb24pKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCT00nLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgQk9NIGlzIG5vdCBkZXRlY3RlZCBpbiB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nCisgICAgICAgIGJvbV9pbl9zdHIgPSAnInt9IicuZm9ybWF0KCcnLmVuY29kZSgndXRmLTgtc2lnJykuZGVjb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYm9tX2luX3N0ciksICdcdWZlZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuanNvbi5sb2FkKFN0cmluZ0lPKGJvbV9pbl9zdHIpKSwgJ1x1ZmVmZicpCisKIGNsYXNzIFRlc3RQeURlY29kZShUZXN0RGVjb2RlLCBQeVRlc3QpOiBwYXNzCiBjbGFzcyBUZXN0Q0RlY29kZShUZXN0RGVjb2RlLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2VudW0ucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZjQxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5CkBAIC0wLDAgKzEsMTIwIEBACitmcm9tIGVudW0gaW1wb3J0IEVudW0sIEludEVudW0KK2Zyb20gbWF0aCBpbXBvcnQgaXNuYW4KK2Zyb20gdGVzdC50ZXN0X2pzb24gaW1wb3J0IFB5VGVzdCwgQ1Rlc3QKKworU01BTEwgPSAxCitCSUcgPSAxPDwzMgorSFVHRSA9IDE8PDY0CitSRUFMTFlfSFVHRSA9IDE8PDk2CisKK2NsYXNzIEJpZ051bShJbnRFbnVtKToKKyAgICBzbWFsbCA9IFNNQUxMCisgICAgYmlnID0gQklHCisgICAgaHVnZSA9IEhVR0UKKyAgICByZWFsbHlfaHVnZSA9IFJFQUxMWV9IVUdFCisKK0UgPSAyLjcxODI4MQorUEkgPSAzLjE0MTU5MworVEFVID0gMiAqIFBJCisKK2NsYXNzIEZsb2F0TnVtKGZsb2F0LCBFbnVtKToKKyAgICBlID0gRQorICAgIHBpID0gUEkKKyAgICB0YXUgPSBUQVUKKworSU5GID0gZmxvYXQoJ2luZicpCitORUdfSU5GID0gZmxvYXQoJy1pbmYnKQorTkFOID0gZmxvYXQoJ25hbicpCisKK2NsYXNzIFdpZXJkTnVtKGZsb2F0LCBFbnVtKToKKyAgICBpbmYgPSBJTkYKKyAgICBuZWdfaW5mID0gTkVHX0lORgorICAgIG5hbiA9IE5BTgorCitjbGFzcyBUZXN0RW51bToKKworICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKKyAgICAgICAgZm9yIGVudW0gaW4gRmxvYXROdW06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIHJlcHIoZW51bS52YWx1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorCisgICAgZGVmIHRlc3Rfd2VpcmRfZmxvYXRzKHNlbGYpOgorICAgICAgICBmb3IgZW51bSwgZXhwZWN0ZWQgaW4gemlwKFdpZXJkTnVtLCAoJ0luZmluaXR5JywgJy1JbmZpbml0eScsICdOYU4nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIGV4cGVjdGVkKQorICAgICAgICAgICAgaWYgbm90IGlzbmFuKGVudW0pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oZmxvYXQoc2VsZi5kdW1wcyhlbnVtKSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpKSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgIGZvciBlbnVtIGluIEJpZ051bToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhlbnVtKSwgc3RyKGVudW0udmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisKKyAgICBkZWYgdGVzdF9saXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMobGlzdChCaWdOdW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoW1NNQUxMLCBCSUcsIEhVR0UsIFJFQUxMWV9IVUdFXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoQmlnTnVtKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoQmlnTnVtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoRmxvYXROdW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoW0UsIFBJLCBUQVVdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMobGlzdChGbG9hdE51bSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KEZsb2F0TnVtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoV2llcmROdW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdbSW5maW5pdHksIC1JbmZpbml0eSwgTmFOXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoV2llcmROdW0pKSlbOjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoV2llcmROdW0pWzoyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSkpWzJdKSkKKworICAgIGRlZiB0ZXN0X2RpY3Rfa2V5cyhzZWxmKToKKyAgICAgICAgcywgYiwgaCwgciA9IEJpZ051bQorICAgICAgICBlLCBwLCB0ID0gRmxvYXROdW0KKyAgICAgICAgaSwgaiwgbiA9IFdpZXJkTnVtCisgICAgICAgIGQgPSB7CisgICAgICAgICAgICBzOid0aW55JywgYjonbGFyZ2UnLCBoOidsYXJnZXInLCByOidsYXJnZXN0JywKKyAgICAgICAgICAgIGU6IkV1bGVyJ3MgbnVtYmVyIiwgcDoncGknLCB0Oid0YXUnLAorICAgICAgICAgICAgaTonSW5maW5pdHknLCBqOictSW5maW5pdHknLCBuOidOYU4nLAorICAgICAgICAgICAgfQorICAgICAgICBuZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoU01BTEwpXSwgJ3RpbnknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3N0cihCSUcpXSwgJ2xhcmdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoSFVHRSldLCAnbGFyZ2VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoUkVBTExZX0hVR0UpXSwgJ2xhcmdlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3JlcHIoRSldLCAiRXVsZXIncyBudW1iZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3JlcHIoUEkpXSwgJ3BpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKFRBVSldLCAndGF1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnSW5maW5pdHknXSwgJ0luZmluaXR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnLUluZmluaXR5J10sICctSW5maW5pdHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydOYU4nXSwgJ05hTicpCisKKyAgICBkZWYgdGVzdF9kaWN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZCA9IGRpY3QoCisgICAgICAgICAgICAgICAgdGlueT1CaWdOdW0uc21hbGwsCisgICAgICAgICAgICAgICAgbGFyZ2U9QmlnTnVtLmJpZywKKyAgICAgICAgICAgICAgICBsYXJnZXI9QmlnTnVtLmh1Z2UsCisgICAgICAgICAgICAgICAgbGFyZ2VzdD1CaWdOdW0ucmVhbGx5X2h1Z2UsCisgICAgICAgICAgICAgICAgZT1GbG9hdE51bS5lLAorICAgICAgICAgICAgICAgIHBpPUZsb2F0TnVtLnBpLAorICAgICAgICAgICAgICAgIHRhdT1GbG9hdE51bS50YXUsCisgICAgICAgICAgICAgICAgaT1XaWVyZE51bS5pbmYsCisgICAgICAgICAgICAgICAgaj1XaWVyZE51bS5uZWdfaW5mLAorICAgICAgICAgICAgICAgIG49V2llcmROdW0ubmFuLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgbmQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3RpbnknXSwgU01BTEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlJ10sIEJJRykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnbGFyZ2VyJ10sIEhVR0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlc3QnXSwgUkVBTExZX0hVR0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2UnXSwgRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsncGknXSwgUEkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3RhdSddLCBUQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2knXSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydqJ10sIE5FR19JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihuZFsnbiddKSkKKworY2xhc3MgVGVzdFB5RW51bShUZXN0RW51bSwgUHlUZXN0KTogcGFzcworY2xhc3MgVGVzdENFbnVtKFRlc3RFbnVtLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5CmluZGV4IDNkZDg3N2EuLjdjYWFmZGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gdGVzdC50ZXN0X2pzb24gaW1wb3J0IFB5VGVzdCwgQ1Rlc3QKK2ltcG9ydCByZQogCiAjIDIwMDctMTAtMDUKIEpTT05ET0NTID0gWwpAQCAtMTAwLDYgKzEwMSw5NCBAQAogICAgICAgICAjVGhpcyBpcyBmb3IgcHl0aG9uIGVuY29kZXIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmR1bXBzLCBkYXRhLCBpbmRlbnQ9VHJ1ZSkKIAorICAgIGRlZiB0ZXN0X3RydW5jYXRlZF9pbnB1dChzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnJywgJ0V4cGVjdGluZyB2YWx1ZScsIDApLAorICAgICAgICAgICAgKCdbJywgJ0V4cGVjdGluZyB2YWx1ZScsIDEpLAorICAgICAgICAgICAgKCdbNDInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAzKSwKKyAgICAgICAgICAgICgnWzQyLCcsICdFeHBlY3RpbmcgdmFsdWUnLCA0KSwKKyAgICAgICAgICAgICgnWyInLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCdbInNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCdbInNwYW0iJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1sic3BhbSIsJywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCd7JywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgneyInLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCd7InNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCd7InNwYW0iJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ3sic3BhbSI6JywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMTApLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyLCcsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMTEpLAorICAgICAgICBdCisgICAgICAgIHRlc3RfY2FzZXMgKz0gWworICAgICAgICAgICAgKCciJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAwKSwKKyAgICAgICAgICAgICgnInNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDApLAorICAgICAgICBdCisgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gXChjaGFyIHsyfVwpJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHJlLmVzY2FwZShtc2cpLCBpZHggKyAxLCBpZHgpLAorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX2RhdGEoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJ1ssJywgJ0V4cGVjdGluZyB2YWx1ZScsIDEpLAorICAgICAgICAgICAgKCd7InNwYW0iOlt9JywgJ0V4cGVjdGluZyB2YWx1ZScsIDkpLAorICAgICAgICAgICAgKCdbNDI6JywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMyksCisgICAgICAgICAgICAoJ1s0MiAic3BhbSInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCA0KSwKKyAgICAgICAgICAgICgnWzQyLF0nLCAnRXhwZWN0aW5nIHZhbHVlJywgNCksCisgICAgICAgICAgICAoJ3sic3BhbSI6WzQyfScsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgnWyJdJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtIjonLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgnWyJzcGFtIixdJywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCd7OicsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3ssJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgnezQyJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgnW3tdJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAyKSwKKyAgICAgICAgICAgICgneyJzcGFtIiwnLCAiRXhwZWN0aW5nICc6JyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgneyJzcGFtIn0nLCAiRXhwZWN0aW5nICc6JyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgnW3sic3BhbSJdJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgOCksCisgICAgICAgICAgICAoJ3sic3BhbSI6fScsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgnW3sic3BhbSI6XScsICdFeHBlY3RpbmcgdmFsdWUnLCA5KSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MiAiaGFtIicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgnW3sic3BhbSI6NDJdJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMTEpLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyLH0nLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDExKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbXNnLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ157MH06IGxpbmUgMSBjb2x1bW4gezF9IFwoY2hhciB7Mn1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfZXh0cmFfZGF0YShzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnW11dJywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgne319JywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgnW10sW10nLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICAgICAgKCd7fSx7fScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgIF0KKyAgICAgICAgdGVzdF9jYXNlcyArPSBbCisgICAgICAgICAgICAoJzQyLCJzcGFtIicsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJyJzcGFtIiw0MicsICdFeHRyYSBkYXRhJywgNiksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIG1zZywgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideezB9OiBsaW5lIDEgY29sdW1uIHsxfSAtIGxpbmUgMSBjb2x1bW4gezJ9JworICAgICAgICAgICAgICAgIHInIFwoY2hhciB7M30gLSB7NH1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgbGVuKGRhdGEpICsgMSwgaWR4LCBsZW4oZGF0YSkpLAorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9saW5lY29sKHNlbGYpOgorICAgICAgICB0ZXN0X2Nhc2VzID0gWworICAgICAgICAgICAgKCchJywgMSwgMSwgMCksCisgICAgICAgICAgICAoJyAhJywgMSwgMiwgMSksCisgICAgICAgICAgICAoJ1xuIScsIDIsIDEsIDEpLAorICAgICAgICAgICAgKCdcbiAgXG5cbiAgICAgIScsIDQsIDYsIDEwKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbGluZSwgY29sLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ15FeHBlY3RpbmcgdmFsdWU6IGxpbmUgezB9IGNvbHVtbiB7MX0nCisgICAgICAgICAgICAgICAgcicgXChjaGFyIHsyfVwpJCcuZm9ybWF0KGxpbmUsIGNvbCwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQogCiBjbGFzcyBUZXN0UHlGYWlsKFRlc3RGYWlsLCBQeVRlc3QpOiBwYXNzCiBjbGFzcyBUZXN0Q0ZhaWwoVGVzdEZhaWwsIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5CmluZGV4IGE0ZDRkMjAuLmUwNzg1NmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9pbmRlbnQucHkKQEAgLTMyLDYgKzMyLDggQEAKICAgICAgICAgZDEgPSBzZWxmLmR1bXBzKGgpCiAgICAgICAgIGQyID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9Miwgc29ydF9rZXlzPVRydWUsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCiAgICAgICAgIGQzID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9J1x0Jywgc29ydF9rZXlzPVRydWUsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCisgICAgICAgIGQ0ID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9Miwgc29ydF9rZXlzPVRydWUpCisgICAgICAgIGQ1ID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9J1x0Jywgc29ydF9rZXlzPVRydWUpCiAKICAgICAgICAgaDEgPSBzZWxmLmxvYWRzKGQxKQogICAgICAgICBoMiA9IHNlbGYubG9hZHMoZDIpCkBAIC00Miw2ICs0NCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDMsIGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGV4cGVjdC5leHBhbmR0YWJzKDIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQzLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDQsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQ1LCBkMykKIAogICAgIGRlZiB0ZXN0X2luZGVudDAoc2VsZik6CiAgICAgICAgIGggPSB7MzogMX0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weSBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk5ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9rZXl3b3JkLnB5CkBAIC0wLDAgKzEsMTM4IEBACitpbXBvcnQga2V5d29yZAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBmaWxlY21wCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGV4dHdyYXAKKworS0VZV09SRF9GSUxFICAgICAgICAgICAgID0gc3VwcG9ydC5maW5kZmlsZSgna2V5d29yZC5weScpCitHUkFNTUFSX0ZJTEUgICAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uJywgJy4uJywgJ1B5dGhvbicsICdncmFtaW5pdC5jJykKK1RFU1RfUFlfRklMRSAgICAgICAgICAgICA9ICdrZXl3b3JkX3Rlc3QucHknCitHUkFNTUFSX1RFU1RfRklMRSAgICAgICAgPSAnZ3JhbWluaXRfdGVzdC5jJworUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTID0gJ21pbmltYWxfa2V5d29yZC5weScKK05PTkVYSVNURU5UX0ZJTEUgICAgICAgICA9ICdub3RfaGVyZS50eHQnCisKKworY2xhc3MgVGVzdF9pc2tleXdvcmQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RydWVfaXNfYV9rZXl3b3JkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5d29yZC5pc2tleXdvcmQoJ1RydWUnKSkKKworICAgIGRlZiB0ZXN0X3VwcGVyY2FzZV90cnVlX2lzX25vdF9hX2tleXdvcmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoJ1RSVUUnKSkKKworICAgIGRlZiB0ZXN0X25vbmVfdmFsdWVfaXNfbm90X2Ffa2V5d29yZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrZXl3b3JkLmlza2V5d29yZChOb25lKSkKKworICAgICMgVGhpcyBpcyBwcm9iYWJseSBhbiBhY2NpZGVudCBvZiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgYnV0IHNob3VsZCBiZQorICAgICMgcHJlc2VydmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgIGRlZiB0ZXN0X2NoYW5naW5nX3RoZV9rd2xpc3RfZG9lc19ub3RfYWZmZWN0X2lza2V5d29yZChzZWxmKToKKyAgICAgICAgb2xkbGlzdCA9IGtleXdvcmQua3dsaXN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZXRhdHRyLCBrZXl3b3JkLCAna3dsaXN0Jywgb2xkbGlzdCkKKyAgICAgICAga2V5d29yZC5rd2xpc3QgPSBbJ2l0cycsICdhbGwnLCAnZWdncycsICdiZWFucycsICdhbmQnLCAnYScsICdzbGljZSddCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoJ2VnZ3MnKSkKKworCitjbGFzcyBUZXN0S2V5d29yZEdlbmVyYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoc2VsZiwgc291cmNlX2ZpbGUsIGRlc3RfZmlsZSk6CisgICAgICAgIHdpdGggb3Blbihzb3VyY2VfZmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIG5sID0gbGluZXNbMF1bbGVuKGxpbmVzWzBdLnN0cmlwKCkpOl0KKyAgICAgICAgd2l0aCBvcGVuKGRlc3RfZmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKGxpbmVzWzpsaW5lcy5pbmRleChiIiMtLXN0YXJ0IGtleXdvcmRzLS0iICsgbmwpICsgMV0pCisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKGxpbmVzW2xpbmVzLmluZGV4KGIiIy0tZW5kIGtleXdvcmRzLS0iICsgbmwpOl0pCisKKyAgICBkZWYgX2dlbmVyYXRlX2tleXdvcmRzKHNlbGYsIGdyYW1tYXJfZmlsZSwgdGFyZ2V0X2tleXdvcmRfcHlfZmlsZSk6CisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWVdPUkRfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9rZXl3b3JkX3B5X2ZpbGVdLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRlcnIgPSBwcm9jLmNvbW11bmljYXRlKClbMV0KKyAgICAgICAgcmV0dXJuIHByb2MucmV0dXJuY29kZSwgc3RkZXJyCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBvcy5wYXRoLmV4aXN0cyhHUkFNTUFSX0ZJTEUpLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qgb25seSB3b3JrcyBmcm9tIHNvdXJjZSBidWlsZCBkaXJlY3RvcnknKQorICAgIGRlZiB0ZXN0X3JlYWxfZ3JhbW1hcl9hbmRfa2V5d29yZF9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgYicnKSwgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMoR1JBTU1BUl9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX1BZX0ZJTEUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpKQorCisgICAgZGVmIHRlc3RfZ3JhbW1hcihzZWxmKToKKyAgICAgICAgc2VsZi5fY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgd2l0aCBvcGVuKEdSQU1NQVJfVEVTVF9GSUxFLCAndycpIGFzIGZwOgorICAgICAgICAgICAgIyBTb21lIG9mIHRoZXNlIGFyZSBwcm9iYWJseSBpbXBsZW1lbnRhdGlvbiBhY2NpZGVudHMuCisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgezIsIDF9LAorICAgICAgICAgICAgICAgICAgICB7MTEsICJlbmNvZGluZ19kZWNsIiwgMCwgMiwgc3RhdGVzXzc5LAorICAgICAgICAgICAgICAgICAgICAgIlwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCIKKyAgICAgICAgICAgICAgICAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJqZWxsbyJ9LAorICAgICAgICAgICAgICAgICAgICB7MzI2LCAwfSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJ0dXJuaXAifSwKKyAgICAgICAgICAgICAgICBcdHsxLCAiVGhpcyBvbmUgaXMgdGFiIGluZGVudGVkIgorICAgICAgICAgICAgICAgICAgICB7Mjc4LCAwfSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJjcmF6eSBidXQgbGVnYWwiCisgICAgICAgICAgICAgICAgImFsc28gbGVnYWwiIHsxLCAiCisgICAgICAgICAgICAgICAgICAgIHsxLCAiY29udGludWUifSwKKyAgICAgICAgICAgICAgICAgICB7MSwgImxlbW9uIn0sCisgICAgICAgICAgICAgICAgICAgICB7MSwgInRvbWF0byJ9LAorICAgICAgICAgICAgICAgIHsxLCAid2lnaWkifSwKKyAgICAgICAgICAgICAgICAgICAgezEsICdubyBnb29kJ30KKyAgICAgICAgICAgICAgICAgICAgezI4MywgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAgInRvbyBtYW55IHNwYWNlcyJ9IiIiKSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBHUkFNTUFSX1RFU1RfRklMRSkKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMoR1JBTU1BUl9URVNUX0ZJTEUsIFRFU1RfUFlfRklMRSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAiICAgICAgICAnVGhpcyBvbmUgaXMgdGFiIGluZGVudGVkJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2Fsc28gbGVnYWwnLCIsCisgICAgICAgICAgICAiICAgICAgICAnY29udGludWUnLCIsCisgICAgICAgICAgICAiICAgICAgICAnY3JhenkgYnV0IGxlZ2FsJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2plbGxvJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2xlbW9uJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ3RvbWF0bycsIiwKKyAgICAgICAgICAgICIgICAgICAgICd0dXJuaXAnLCIsCisgICAgICAgICAgICAiICAgICAgICAnd2lnaWknLCIsCisgICAgICAgICAgICBdCisgICAgICAgIHdpdGggb3BlbihURVNUX1BZX0ZJTEUpIGFzIGZwOgorICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHN0YXJ0ID0gbGluZXMuaW5kZXgoIiMtLXN0YXJ0IGtleXdvcmRzLS0iKSArIDEKKyAgICAgICAgZW5kID0gbGluZXMuaW5kZXgoIiMtLWVuZCBrZXl3b3Jkcy0tIikKKyAgICAgICAgYWN0dWFsID0gbGluZXNbc3RhcnQ6ZW5kXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9ncmFtbWFyX3Jlc3VsdHNfaW5fbm9fa2V5d29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRob3V0X2dlbmVyYXRlZF9rZXl3b3JkcyhLRVlXT1JEX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCBiJycpLCBzZWxmLl9nZW5lcmF0ZV9rZXl3b3Jkcyhvcy5kZXZudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX1BZX0ZJTEUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoVEVTVF9QWV9GSUxFLCBQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMpKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZHNfcHlfd2l0aG91dF9tYXJrZXJzX3Byb2R1Y2VzX2Vycm9yKHNlbGYpOgorICAgICAgICByYywgc3RkZXJyID0gc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMob3MuZGV2bnVsbCwgb3MuZGV2bnVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChzdGRlcnIsIGInZG9lcyBub3QgY29udGFpbiBmb3JtYXQgbWFya2VycycpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2dyYW1tYXJfZmlsZV9wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKE5PTkVYSVNURU5UX0ZJTEUsIEtFWVdPUkRfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChzdGRlcnIsIGInKD9tcyknICsgTk9ORVhJU1RFTlRfRklMRS5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X21pc3Npbmdfa2V5d29yZHNfcHlfZmlsZV9wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKG9zLmRldm51bGwsIE5PTkVYSVNURU5UX0ZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJyg/bXMpJyArIE5PTkVYSVNURU5UX0ZJTEUuZW5jb2RlKCkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CmluZGV4IDA1MDNhN2YuLmU0YTQ0YzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQpAQCAtMTc2LDYgKzE3NiwxOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBfX2EKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCkuZigpLCA0MikKIAorICAgIGRlZiB0ZXN0X2RlZmF1bHRfZXZhbHVhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgMTY5NjcKKyAgICAgICAgYSA9IDQyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBkZWYgZih2PWEsIHg9YiwgKiwgeT1jLCB6PWQpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyLmV4Y2VwdGlvbiksICJuYW1lICdiJyBpcyBub3QgZGVmaW5lZCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBmID0gbGFtYmRhIHY9YSwgeD1iLCAqLCB5PWMsIHo9ZDogTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIuZXhjZXB0aW9uKSwgIm5hbWUgJ2InIGlzIG5vdCBkZWZpbmVkIikKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KEtleXdvcmRPbmx5QXJnVGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5IGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKaW5kZXggZTVlNjA1OC4uYmFmZGViYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgY2xpZW50LnNldGJsb2NraW5nKEZhbHNlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgI3JhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCkBAIC0xODUsNiArMTg1LDMzIEBACiAgICAgICAgIGIuY2xvc2UoKQogICAgICAgICBrcS5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAga3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoa3F1ZXVlLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa3F1ZXVlLmNsb3NlZCkKKworICAgICAgICAjIHRlc3QgY2xvc2UoKQorICAgICAgICBrcXVldWUuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoa3F1ZXVlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwga3F1ZXVlLmZpbGVubykKKworICAgICAgICAjIGNsb3NlKCkgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZQorICAgICAgICBrcXVldWUuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBrcXVldWUuY29udHJvbCwgTm9uZSwgNCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAga3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChrcXVldWUuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGtxdWV1ZS5maWxlbm8oKSksIEZhbHNlKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0S1F1ZXVlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CmluZGV4IDYzZWU2OTcuLjViMjc2ZTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgICAgICMgU2Vla2luZyBpcyBub3QgZW5vdWdoIG9mIGEgdGVzdDogeW91IG11c3Qgd3JpdGUgYW5kIGZsdXNoLCB0b28hCiAgICAgICAgICAgICBmLndyaXRlKGIneCcpCiAgICAgICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhcmdlZmlsZSBzdXBwb3J0IikKICAgICAgICAgZmluYWxseToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weSBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQppbmRleCBhZTRjYTE4Li5mZmQwYzhiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CkBAIC0yNiw2ICsyNiw3IEBACiBpbXBvcnQgbG9nZ2luZy5jb25maWcKIAogaW1wb3J0IGNvZGVjcworaW1wb3J0IGNvbmZpZ3BhcnNlcgogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgaW8KQEAgLTU4LDcgKzU5LDkgQEAKICAgICBpbXBvcnQgc210cGQKICAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UsIHBhcnNlX3FzCiAgICAgZnJvbSBzb2NrZXRzZXJ2ZXIgaW1wb3J0IChUaHJlYWRpbmdVRFBTZXJ2ZXIsIERhdGFncmFtUmVxdWVzdEhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIsIFN0cmVhbVJlcXVlc3RIYW5kbGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLCBTdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1VuaXhTdHJlYW1TZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdVbml4RGF0YWdyYW1TZXJ2ZXIpCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogdHJ5OgpAQCAtNzUsMTMgKzc4LDEyIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogCi0KIGNsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIkJhc2UgY2xhc3MgZm9yIGxvZ2dpbmcgdGVzdHMuIiIiCiAKICAgICBsb2dfZm9ybWF0ID0gIiUobmFtZSlzIC0+ICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3Ll0rKSAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcdy5dKykgLT4gKFx3Kyk6IChcZCspJCIKICAgICBtZXNzYWdlX251bSA9IDAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTkzLDcgKzk1LDggQEAKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcnMgPSBsb2dnaW5nLl9oYW5kbGVycy5jb3B5KCkKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcl9saXN0ID0gbG9nZ2luZy5faGFuZGxlckxpc3RbOl0KICAgICAgICAgICAgIHNlbGYuc2F2ZWRfbG9nZ2VycyA9IHNhdmVkX2xvZ2dlcnMgPSBsb2dnZXJfZGljdC5jb3B5KCkKLSAgICAgICAgICAgIHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMgPSBsb2dnaW5nLl9sZXZlbE5hbWVzLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5zYXZlZF9uYW1lX3RvX2xldmVsID0gbG9nZ2luZy5fbmFtZVRvTGV2ZWwuY29weSgpCisgICAgICAgICAgICBzZWxmLnNhdmVkX2xldmVsX3RvX25hbWUgPSBsb2dnaW5nLl9sZXZlbFRvTmFtZS5jb3B5KCkKICAgICAgICAgICAgIHNlbGYubG9nZ2VyX3N0YXRlcyA9IGxvZ2dlcl9zdGF0ZXMgPSB7fQogICAgICAgICAgICAgZm9yIG5hbWUgaW4gc2F2ZWRfbG9nZ2VyczoKICAgICAgICAgICAgICAgICBsb2dnZXJfc3RhdGVzW25hbWVdID0gZ2V0YXR0cihzYXZlZF9sb2dnZXJzW25hbWVdLApAQCAtMTM1LDggKzEzOCwxMCBAQAogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnNldExldmVsKHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCkKICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2dnaW5nLl9sZXZlbE5hbWVzLmNsZWFyKCkKLSAgICAgICAgICAgIGxvZ2dpbmcuX2xldmVsTmFtZXMudXBkYXRlKHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMpCisgICAgICAgICAgICBsb2dnaW5nLl9sZXZlbFRvTmFtZS5jbGVhcigpCisgICAgICAgICAgICBsb2dnaW5nLl9sZXZlbFRvTmFtZS51cGRhdGUoc2VsZi5zYXZlZF9sZXZlbF90b19uYW1lKQorICAgICAgICAgICAgbG9nZ2luZy5fbmFtZVRvTGV2ZWwuY2xlYXIoKQorICAgICAgICAgICAgbG9nZ2luZy5fbmFtZVRvTGV2ZWwudXBkYXRlKHNlbGYuc2F2ZWRfbmFtZV90b19sZXZlbCkKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLmNsZWFyKCkKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLnVwZGF0ZShzZWxmLnNhdmVkX2hhbmRsZXJzKQogICAgICAgICAgICAgbG9nZ2luZy5faGFuZGxlckxpc3RbOl0gPSBzZWxmLnNhdmVkX2hhbmRsZXJfbGlzdApAQCAtMTUwLDEyICsxNTUsMTIgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKIAotICAgIGRlZiBhc3NlcnRfbG9nX2xpbmVzKHNlbGYsIGV4cGVjdGVkX3ZhbHVlcywgc3RyZWFtPU5vbmUpOgorICAgIGRlZiBhc3NlcnRfbG9nX2xpbmVzKHNlbGYsIGV4cGVjdGVkX3ZhbHVlcywgc3RyZWFtPU5vbmUsIHBhdD1Ob25lKToKICAgICAgICAgIiIiTWF0Y2ggdGhlIGNvbGxlY3RlZCBsb2cgbGluZXMgYWdhaW5zdCB0aGUgcmVndWxhciBleHByZXNzaW9uCiAgICAgICAgIHNlbGYuZXhwZWN0ZWRfbG9nX3BhdCwgYW5kIGNvbXBhcmUgdGhlIGV4dHJhY3RlZCBncm91cCB2YWx1ZXMgdG8KICAgICAgICAgdGhlIGV4cGVjdGVkX3ZhbHVlcyBsaXN0IG9mIHR1cGxlcy4iIiIKICAgICAgICAgc3RyZWFtID0gc3RyZWFtIG9yIHNlbGYuc3RyZWFtCi0gICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoc2VsZi5leHBlY3RlZF9sb2dfcGF0KQorICAgICAgICBwYXQgPSByZS5jb21waWxlKHBhdCBvciBzZWxmLmV4cGVjdGVkX2xvZ19wYXQpCiAgICAgICAgIGFjdHVhbF9saW5lcyA9IHN0cmVhbS5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhY3R1YWxfbGluZXMpLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSkKICAgICAgICAgZm9yIGFjdHVhbCwgZXhwZWN0ZWQgaW4gemlwKGFjdHVhbF9saW5lcywgZXhwZWN0ZWRfdmFsdWVzKToKQEAgLTQzMCw3ICs0MzUsNyBAQAogICAgICIiIlRlc3QgdmFyaW91cyBmaWx0ZXJpbmcgcG9zc2liaWxpdGllcyB3aXRoIGN1c3RvbSBsb2dnaW5nIGxldmVscy4iIiIKIAogICAgICMgU2tpcCB0aGUgbG9nZ2VyIG5hbWUgZ3JvdXAuCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCkBAIC01NjAsNyArNTY1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZmFjaWxpdHksIGguTE9HX1VTRVIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgudW5peHNvY2tldCkKICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6ICMgc3lzbG9nZCBtaWdodCBub3QgYmUgYXZhaWxhYmxlCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogIyBzeXNsb2dkIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZvciBtZXRob2QgaW4gKCdHRVQnLCAnUE9TVCcsICdQVVQnKToKICAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAnUFVUJzoKQEAgLTY0Nyw0MSArNjUyLDYgQEAKICMgLS0gaWYgaXQgcHJvdmVzIHRvIGJlIG9mIHdpZGVyIHV0aWxpdHkgdGhhbiBqdXN0IHRlc3RfbG9nZ2luZwogCiBpZiB0aHJlYWRpbmc6Ci0gICAgY2xhc3MgVGVzdFNNVFBDaGFubmVsKHNtdHBkLlNNVFBDaGFubmVsKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMgZGVyaXZlZCBjbGFzcyBoYXMgaGFkIHRvIGJlIGNyZWF0ZWQgYmVjYXVzZSBzbXRwZCBkb2VzIG5vdAotICAgICAgICBzdXBwb3J0IHVzZSBvZiBjdXN0b20gY2hhbm5lbCBtYXBzLCBhbHRob3VnaCB0aGV5IGFyZSBhbGxvd2VkIGJ5Ci0gICAgICAgIGFzeW5jb3JlJ3MgZGVzaWduLiBJc3N1ZSAjMTE5NTkgaGFzIGJlZW4gcmFpc2VkIHRvIGFkZHJlc3MgdGhpcywKLSAgICAgICAgYW5kIGlmIHJlc29sdmVkIHNhdGlzZmFjdG9yaWx5LCBzb21lIG9mIHRoaXMgY29kZSBjYW4gYmUgcmVtb3ZlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm4sIGFkZHIsIHNvY2ttYXApOgotICAgICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uLCBzb2NrbWFwKQotICAgICAgICAgICAgc2VsZi5zbXRwX3NlcnZlciA9IHNlcnZlcgotICAgICAgICAgICAgc2VsZi5jb25uID0gY29ubgotICAgICAgICAgICAgc2VsZi5hZGRyID0gYWRkcgotICAgICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJlY2VpdmVkX2xpbmVzID0gW10KLSAgICAgICAgICAgIHNlbGYuc210cF9zdGF0ZSA9IHNlbGYuQ09NTUFORAotICAgICAgICAgICAgc2VsZi5zZWVuX2dyZWV0aW5nID0gJycKLSAgICAgICAgICAgIHNlbGYubWFpbGZyb20gPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJjcHR0b3MgPSBbXQotICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9kYXRhID0gJycKLSAgICAgICAgICAgIHNlbGYuZnFkbiA9IHNvY2tldC5nZXRmcWRuKCkKLSAgICAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYucGVlciA9IGNvbm4uZ2V0cGVlcm5hbWUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgIyBhIHJhY2UgY29uZGl0aW9uICBtYXkgb2NjdXIgaWYgdGhlIG90aGVyIGVuZCBpcyBjbG9zaW5nCi0gICAgICAgICAgICAgICAgIyBiZWZvcmUgd2UgY2FuIGdldCB0aGUgcGVlcm5hbWUKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSAhPSBlcnJuby5FTk9UQ09OTjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYucHVzaCgnMjIwICVzICVzJyAlIChzZWxmLmZxZG4sIHNtdHBkLl9fdmVyc2lvbl9fKSkKLSAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYidcclxuJykKLSAgICAgICAgICAgIHNlbGYuZXh0ZW5kZWRfc210cCA9IEZhbHNlCi0KLQogICAgIGNsYXNzIFRlc3RTTVRQU2VydmVyKHNtdHBkLlNNVFBTZXJ2ZXIpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgdGVzdCBTTVRQIHNlcnZlci4KQEAgLTcwMiwzNyArNjcyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA6ZnVuYzpgYXN5bmNvcmUubG9vcGAuIFRoaXMgYXZvaWRzIGNoYW5naW5nIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgOm1vZDpgYXN5bmNvcmVgIG1vZHVsZSdzIGdsb2JhbCBzdGF0ZS4KICAgICAgICAgIiIiCi0gICAgICAgIGNoYW5uZWxfY2xhc3MgPSBUZXN0U01UUENoYW5uZWwKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkciwgaGFuZGxlciwgcG9sbF9pbnRlcnZhbCwgc29ja21hcCk6Ci0gICAgICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBhZGRyCi0gICAgICAgICAgICBzZWxmLl9yZW1vdGVhZGRyID0gTm9uZQotICAgICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnNvY2ttYXAgPSBzb2NrbWFwCi0gICAgICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIG1hcD1zb2NrbWFwKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZygwKQotICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NvY2tldChzb2NrLCBtYXA9c29ja21hcCkKLSAgICAgICAgICAgICAgICAjIHRyeSB0byByZS11c2UgYSBzZXJ2ZXIgcG9ydCBpZiBwb3NzaWJsZQotICAgICAgICAgICAgICAgIHNlbGYuc2V0X3JldXNlX2FkZHIoKQotICAgICAgICAgICAgICAgIHNlbGYuYmluZChhZGRyKQotICAgICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQotICAgICAgICAgICAgICAgIHNlbGYubGlzdGVuKDUpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHNtdHBkLlNNVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgYWRkciwgTm9uZSwgbWFwPXNvY2ttYXApCisgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVyID0gaGFuZGxlcgogICAgICAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQogICAgICAgICAgICAgc2VsZi5wb2xsX2ludGVydmFsID0gcG9sbF9pbnRlcnZhbAogCi0gICAgICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6Ci0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIFJlZGVmaW5lZCBvbmx5IGJlY2F1c2UgdGhlIGJhc2UgY2xhc3MgZG9lcyBub3QgcGFzcyBpbiBhCi0gICAgICAgICAgICBtYXAsIGZvcmNpbmcgdXNlIG9mIGEgZ2xvYmFsIGluIDptb2Q6YGFzeW5jb3JlYC4KLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLnNvY2ttYXApCi0KICAgICAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIERlbGVnYXRlcyB0byB0aGUgaGFuZGxlciBwYXNzZWQgaW4gdG8gdGhlIHNlcnZlcidzIGNvbnN0cnVjdG9yLgpAQCAtNzYzLDggKzcxMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZ1bmM6YGFzeW5jb3JlLmxvb3BgLgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYXN5bmNvcmUubG9vcChwb2xsX2ludGVydmFsLCBtYXA9c2VsZi5zb2NrbWFwKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvcjoKKyAgICAgICAgICAgICAgICBhc3luY29yZS5sb29wKHBvbGxfaW50ZXJ2YWwsIG1hcD1zZWxmLl9tYXApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjIE9uIEZyZWVCU0QgOCwgY2xvc2luZyB0aGUgc2VydmVyIHJlcGVhdGFibHkKICAgICAgICAgICAgICAgICAjIHJhaXNlcyB0aGlzIGVycm9yLiBXZSBzd2FsbG93IGl0IGlmIHRoZQogICAgICAgICAgICAgICAgICMgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4KQEAgLTg3MSw3ICs4MTgsNyBAQAogICAgICAgICAgICAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuc3NsY3R4OgogICAgICAgICAgICAgICAgICAgICBzb2NrID0gc2VsZi5zc2xjdHgud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgIyBzb2NrZXQgZXJyb3JzIGFyZSBzaWxlbmNlZCBieSB0aGUgY2FsbGVyLCBwcmludCB0aGVtIGhlcmUKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJHb3QgYW4gZXJyb3I6XG4lc1xuIiAlIGUpCiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTkwOCw2ICs4NTUsOSBAQAogICAgICAgICAgICAgc3VwZXIoVGVzdFRDUFNlcnZlciwgc2VsZikuc2VydmVyX2JpbmQoKQogICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQogCisgICAgY2xhc3MgVGVzdFVuaXhTdHJlYW1TZXJ2ZXIoVGVzdFRDUFNlcnZlcik6CisgICAgICAgIGFkZHJlc3NfZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKwogICAgIGNsYXNzIFRlc3RVRFBTZXJ2ZXIoQ29udHJvbE1peGluLCBUaHJlYWRpbmdVRFBTZXJ2ZXIpOgogICAgICAgICAiIiIKICAgICAgICAgQSBVRFAgc2VydmVyIHdoaWNoIGlzIGNvbnRyb2xsYWJsZSB1c2luZyA6Y2xhc3M6YENvbnRyb2xNaXhpbmAuCkBAIC05MzcsNyArODg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZGF0YToKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcihEZWxlZ2F0aW5nVURQUmVxdWVzdEhhbmRsZXIsIHNlbGYpLmZpbmlzaCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLl9jbG9zZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTk1NSw2ICs5MDUsOSBAQAogICAgICAgICAgICAgc3VwZXIoVGVzdFVEUFNlcnZlciwgc2VsZikuc2VydmVyX2Nsb3NlKCkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKIAorICAgIGNsYXNzIFRlc3RVbml4RGF0YWdyYW1TZXJ2ZXIoVGVzdFVEUFNlcnZlcik6CisgICAgICAgIGFkZHJlc3NfZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKwogIyAtIGVuZCBvZiBzZXJ2ZXJfaGVscGVyIHNlY3Rpb24KIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKQEAgLTk5MSw3ICs5NDQsNyBAQAogICAgICIiIlRlc3RzIGZvciB0aGUgTWVtb3J5SGFuZGxlci4iIiIKIAogICAgICMgRG8gbm90IGJvdGhlciB3aXRoIGEgbG9nZ2VyIG5hbWUgZ3JvdXAuCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCkBAIC0xMDQ0LDcgKzk5Nyw3IEBACiAKICAgICAiIiJSZWFkaW5nIGxvZ2dpbmcgY29uZmlnIGZyb20gYSAuaW5pLXN0eWxlIGNvbmZpZyBmaWxlLiIiIgogCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHddKykgXCtcKyAoW1x3XSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFx3KykgXCtcKyAoXHcrKSQiCiAKICAgICAjIGNvbmZpZzAgaXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLgogICAgIGNvbmZpZzAgPSAiIiIKQEAgLTEyOTIsNiArMTI0NSwyNCBAQAogICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgogICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQogCisgICAgZGVmIHRlc3RfY29uZmlnMF91c2luZ19jcF9vayhzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgZmlsZSB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKHRleHR3cmFwLmRlZGVudChzZWxmLmNvbmZpZzApKQorICAgICAgICAgICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgICAgIGNwLnJlYWRfZmlsZShmaWxlKQorICAgICAgICAgICAgbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZyhjcCkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgICAgICMgV29uJ3Qgb3V0cHV0IGFueXRoaW5nCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgIyBPdXRwdXRzIGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKwogICAgIGRlZiB0ZXN0X2NvbmZpZzFfb2soc2VsZiwgY29uZmlnPWNvbmZpZzEpOgogICAgICAgICAjIEEgY29uZmlnIGZpbGUgZGVmaW5pbmcgYSBzdWItcGFyc2VyIGFzIHdlbGwuCiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgpAQCAtMTM4MSw3ICsxMzUyLDcgQEAKIAogICAgIGRlZiB0ZXN0X2xvZ2dlcl9kaXNhYmxpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuZGlzYWJsZV90ZXN0KQotICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignZm9vJykKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3NvbWVfcHJpc3RpbmVfbG9nZ2VyJykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2dnZXIuZGlzYWJsZWQpCiAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuZGlzYWJsZV90ZXN0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUobG9nZ2VyLmRpc2FibGVkKQpAQCAtMTM5NCwxNyArMTM2NSwyMyBAQAogCiAgICAgIiIiVGVzdCBmb3IgU29ja2V0SGFuZGxlciBvYmplY3RzLiIiIgogCisgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VENQU2VydmVyCisgICAgICAgIGFkZHJlc3MgPSAoJ2xvY2FsaG9zdCcsIDApCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICIiIlNldCB1cCBhIFRDUCBzZXJ2ZXIgdG8gcmVjZWl2ZSBsb2cgbWVzc2FnZXMsIGFuZCBhIFNvY2tldEhhbmRsZXIKICAgICAgICAgcG9pbnRpbmcgdG8gdGhhdCBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBwb3J0LiIiIgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBhZGRyID0gKCdsb2NhbGhvc3QnLCAwKQotICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IFRlc3RUQ1BTZXJ2ZXIoYWRkciwgc2VsZi5oYW5kbGVfc29ja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wMSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbGFzcyhzZWxmLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfc29ja2V0LCAwLjAxKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZXJ2ZXIucmVhZHkud2FpdCgpCi0gICAgICAgIHNlbGYuc29ja19oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyKCdsb2NhbGhvc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCkKKyAgICAgICAgaGNscyA9IGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgdHVwbGUpOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIE5vbmUpCiAgICAgICAgIHNlbGYubG9nX291dHB1dCA9ICcnCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5zb2NrX2hkbHIpCkBAIC0xNDQ0LDM1ICsxNDIxLDY5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2dfb3V0cHV0LCAic3BhbVxuZWdnc1xuIikKIAogICAgIGRlZiB0ZXN0X25vc2VydmVyKHNlbGYpOgorICAgICAgICAjIEF2b2lkIHRpbWluZy1yZWxhdGVkIGZhaWx1cmVzIGR1ZSB0byBTb2NrZXRIYW5kbGVyJ3Mgb3duIGhhcmQtd2lyZWQKKyAgICAgICAgIyBvbmUtc2Vjb25kIHRpbWVvdXQgb24gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKCkgKGlzc3VlICMxNjI2NCkuCisgICAgICAgIHNlbGYuc29ja19oZGxyLnJldHJ5U3RhcnQgPSAyLjUKICAgICAgICAgIyBLaWxsIHRoZSBzZXJ2ZXIKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgyLjApCi0gICAgICAgICNUaGUgbG9nZ2luZyBjYWxsIHNob3VsZCB0cnkgdG8gY29ubmVjdCwgd2hpY2ggc2hvdWxkIGZhaWwKKyAgICAgICAgIyBUaGUgbG9nZ2luZyBjYWxsIHNob3VsZCB0cnkgdG8gY29ubmVjdCwgd2hpY2ggc2hvdWxkIGZhaWwKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdEZWxpYmVyYXRlIG1pc3Rha2UnKQogICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgogICAgICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5leGNlcHRpb24oJ05ldmVyIHNlbnQnKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmVycm9yKCdOZXZlciBzZW50LCBlaXRoZXInKQogICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrX2hkbHIucmV0cnlUaW1lID4gbm93KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc2VsZi5zb2NrX2hkbHIucmV0cnlUaW1lLCBub3cpCiAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5zb2NrX2hkbHIucmV0cnlUaW1lIC0gbm93ICsgMC4wMDEpCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZXJyb3IoJ05vciB0aGlzJykKIAorZGVmIF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCk6CisgICAgZmQsIGZuID0gdGVtcGZpbGUubWtzdGVtcChwcmVmaXg9J3Rlc3RfbG9nZ2luZ18nLCBzdWZmaXg9Jy5zb2NrJykKKyAgICBvcy5jbG9zZShmZCkKKyAgICAjIGp1c3QgbmVlZCBhIG5hbWUgLSBmaWxlIGNhbid0IGJlIHByZXNlbnQsIG9yIHdlJ2xsIGdldCBhbgorICAgICMgJ2FkZHJlc3MgYWxyZWFkeSBpbiB1c2UnIGVycm9yLgorICAgIG9zLnJlbW92ZShmbikKKyAgICByZXR1cm4gZm4KKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFVuaXhTb2NrZXRIYW5kbGVyVGVzdChTb2NrZXRIYW5kbGVyVGVzdCk6CisKKyAgICAiIiJUZXN0IGZvciBTb2NrZXRIYW5kbGVyIHdpdGggdW5peCBzb2NrZXRzLiIiIgorCisgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VW5peFN0cmVhbVNlcnZlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uIGluIHRoZSBiYXNlIGNsYXNzCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCkKKyAgICAgICAgU29ja2V0SGFuZGxlclRlc3Quc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgU29ja2V0SGFuZGxlclRlc3QudGVhckRvd24oc2VsZikKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuYWRkcmVzcykKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIERhdGFncmFtSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogCiAgICAgIiIiVGVzdCBmb3IgRGF0YWdyYW1IYW5kbGVyLiIiIgogCisgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VURQU2VydmVyCisgICAgICAgIGFkZHJlc3MgPSAoJ2xvY2FsaG9zdCcsIDApCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICIiIlNldCB1cCBhIFVEUCBzZXJ2ZXIgdG8gcmVjZWl2ZSBsb2cgbWVzc2FnZXMsIGFuZCBhIERhdGFncmFtSGFuZGxlcgogICAgICAgICBwb2ludGluZyB0byB0aGF0IHNlcnZlcidzIGFkZHJlc3MgYW5kIHBvcnQuIiIiCiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCi0gICAgICAgIGFkZHIgPSAoJ2xvY2FsaG9zdCcsIDApCi0gICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gVGVzdFVEUFNlcnZlcihhZGRyLCBzZWxmLmhhbmRsZV9kYXRhZ3JhbSwgMC4wMSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbGFzcyhzZWxmLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAgICAgICAgIHNlcnZlci5yZWFkeS53YWl0KCkKLSAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBsb2dnaW5nLmhhbmRsZXJzLkRhdGFncmFtSGFuZGxlcignbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCkKKyAgICAgICAgaGNscyA9IGxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCB0dXBsZSk6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgTm9uZSkKICAgICAgICAgc2VsZi5sb2dfb3V0cHV0ID0gJycKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0pCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnNvY2tfaGRscikKQEAgLTE1MDcsMjEgKzE1MTgsNDQgQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVW5peERhdGFncmFtSGFuZGxlclRlc3QoRGF0YWdyYW1IYW5kbGVyVGVzdCk6CisKKyAgICAiIiJUZXN0IGZvciBEYXRhZ3JhbUhhbmRsZXIgdXNpbmcgVW5peCBzb2NrZXRzLiIiIgorCisgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VW5peERhdGFncmFtU2VydmVyCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgb3ZlcnJpZGUgdGhlIGRlZmluaXRpb24gaW4gdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgc2VsZi5hZGRyZXNzID0gX2dldF90ZW1wX2RvbWFpbl9zb2NrZXQoKQorICAgICAgICBEYXRhZ3JhbUhhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIERhdGFncmFtSGFuZGxlclRlc3QudGVhckRvd24oc2VsZikKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuYWRkcmVzcykKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFN5c0xvZ0hhbmRsZXJUZXN0KEJhc2VUZXN0KToKIAogICAgICIiIlRlc3QgZm9yIFN5c0xvZ0hhbmRsZXIgdXNpbmcgVURQLiIiIgogCisgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VURQU2VydmVyCisgICAgICAgIGFkZHJlc3MgPSAoJ2xvY2FsaG9zdCcsIDApCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICIiIlNldCB1cCBhIFVEUCBzZXJ2ZXIgdG8gcmVjZWl2ZSBsb2cgbWVzc2FnZXMsIGFuZCBhIFN5c0xvZ0hhbmRsZXIKICAgICAgICAgcG9pbnRpbmcgdG8gdGhhdCBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBwb3J0LiIiIgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBhZGRyID0gKCdsb2NhbGhvc3QnLCAwKQotICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IFRlc3RVRFBTZXJ2ZXIoYWRkciwgc2VsZi5oYW5kbGVfZGF0YWdyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAxKQorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IHNlbGYuc2VydmVyX2NsYXNzKHNlbGYuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhZ3JhbSwgMC4wMSkKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VydmVyLnJlYWR5LndhaXQoKQotICAgICAgICBzZWxmLnNsX2hkbHIgPSBsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIoKCdsb2NhbGhvc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5wb3J0KSkKKyAgICAgICAgaGNscyA9IGxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgdHVwbGUpOgorICAgICAgICAgICAgc2VsZi5zbF9oZGxyID0gaGNscygoJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2xfaGRsciA9IGhjbHMoc2VydmVyLnNlcnZlcl9hZGRyZXNzKQogICAgICAgICBzZWxmLmxvZ19vdXRwdXQgPSAnJwogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuc2xfaGRscikKQEAgLTE1NTksNiArMTU5MywyMyBAQAogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBVbml4U3lzTG9nSGFuZGxlclRlc3QoU3lzTG9nSGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgU3lzTG9nSGFuZGxlciB3aXRoIFVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhEYXRhZ3JhbVNlcnZlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uIGluIHRoZSBiYXNlIGNsYXNzCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCkKKyAgICAgICAgU3lzTG9nSGFuZGxlclRlc3Quc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgU3lzTG9nSGFuZGxlclRlc3QudGVhckRvd24oc2VsZikKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuYWRkcmVzcykKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEhUVFBIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAgICAgIiIiVGVzdCBmb3IgSFRUUEhhbmRsZXIuIiIiCiAKQEAgLTE3NzksNyArMTgzMCw3IEBACiAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQogICAgICAgICAgICAgcyA9IHN0cmVhbS5nZXR2YWx1ZSgpCiAgICAgICAgICAgICBoLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmZpbmQoIlVzZXJXYXJuaW5nOiBJJ20gd2FybmluZyB5b3UuLi5cbiIpID4gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzLmZpbmQoIlVzZXJXYXJuaW5nOiBJJ20gd2FybmluZyB5b3UuLi5cbiIpLCAwKQogCiAgICAgICAgICAgICAjU2VlIGlmIGFuIGV4cGxpY2l0IGZpbGUgdXNlcyB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGFfZmlsZSA9IGlvLlN0cmluZ0lPKCkKQEAgLTE4MTcsNyArMTg2OCw3IEBACiAKICAgICAiIiJSZWFkaW5nIGxvZ2dpbmcgY29uZmlnIGZyb20gYSBkaWN0aW9uYXJ5LiIiIgogCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHddKykgXCtcKyAoW1x3XSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFx3KykgXCtcKyAoXHcrKSQiCiAKICAgICAjIGNvbmZpZzAgaXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLgogICAgIGNvbmZpZzAgPSB7CkBAIC0yMzg5LDYgKzI0NDAsMzIgQEAKICAgICAgICAgfSwKICAgICB9CiAKKyAgICAjIEFzIGNvbmZpZzAsIGJ1dCB3aXRoIHByb3BlcnRpZXMKKyAgICBjb25maWcxNCA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICAgICAgJy4nOiB7CisgICAgICAgICAgICAgICAgICAgICdmb28nOiAnYmFyJywKKyAgICAgICAgICAgICAgICAgICAgJ3Rlcm1pbmF0b3InOiAnIVxuJywKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKICAgICBvdXRfb2Zfb3JkZXIgPSB7CiAgICAgICAgICJ2ZXJzaW9uIjogMSwKICAgICAgICAgImZvcm1hdHRlcnMiOiB7CkBAIC0yNjU2LDExICsyNzMzLDIwIEBACiAgICAgZGVmIHRlc3RfY29uZmlnMTNfZmFpbHVyZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcxMykKIAorICAgIGRlZiB0ZXN0X2NvbmZpZzE0X29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMTQpCisgICAgICAgICAgICBoID0gbG9nZ2luZy5faGFuZGxlcnNbJ2hhbmQxJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5mb28sICdiYXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnRlcm1pbmF0b3IsICchXG4nKQorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdFeGNsYW1hdGlvbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0cHV0LmdldHZhbHVlKCkuZW5kc3dpdGgoJ0V4Y2xhbWF0aW9uIVxuJykpCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdsaXN0ZW4oKSBuZWVkcyB0aHJlYWRpbmcgdG8gd29yaycpCi0gICAgZGVmIHNldHVwX3ZpYV9saXN0ZW5lcihzZWxmLCB0ZXh0KToKKyAgICBkZWYgc2V0dXBfdmlhX2xpc3RlbmVyKHNlbGYsIHRleHQsIHZlcmlmeT1Ob25lKToKICAgICAgICAgdGV4dCA9IHRleHQuZW5jb2RlKCJ1dGYtOCIpCiAgICAgICAgICMgQXNrIGZvciBhIHJhbmRvbWx5IGFzc2lnbmVkIHBvcnQgKGJ5IHVzaW5nIHBvcnQgMCkKLSAgICAgICAgdCA9IGxvZ2dpbmcuY29uZmlnLmxpc3RlbigwKQorICAgICAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDAsIHZlcmlmeSkKICAgICAgICAgdC5zdGFydCgpCiAgICAgICAgIHQucmVhZHkud2FpdCgpCiAgICAgICAgICMgTm93IGdldCB0aGUgcG9ydCBhbGxvY2F0ZWQKQEAgLTI3MjAsNiArMjgwNiw2OSBAQAogICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgogICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdF9saXN0ZW5fdmVyaWZ5KHNlbGYpOgorCisgICAgICAgIGRlZiB2ZXJpZnlfZmFpbChzdHVmZik6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGRlZiB2ZXJpZnlfcmV2ZXJzZShzdHVmZik6CisgICAgICAgICAgICByZXR1cm4gc3R1ZmZbOjotMV0KKworICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgdG9fc2VuZCA9IHRleHR3cmFwLmRlZGVudChDb25maWdGaWxlVGVzdC5jb25maWcxKQorICAgICAgICAjIEZpcnN0LCBzcGVjaWZ5IGEgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2lsbCBmYWlsLgorICAgICAgICAjIFdlIGV4cGVjdCB0byBzZWUgbm8gb3V0cHV0LCBzaW5jZSBvdXIgY29uZmlndXJhdGlvbgorICAgICAgICAjIG5ldmVyIHRvb2sgZWZmZWN0LgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmQsIHZlcmlmeV9mYWlsKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBoYXMgdGhlIHN0dWZmIHdlIGxvZ2dlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgXSwgcGF0PXIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIikKKworICAgICAgICAjIE5vdywgcGVyZm9ybSBubyB2ZXJpZmljYXRpb24uIE91ciBjb25maWd1cmF0aW9uCisgICAgICAgICMgc2hvdWxkIHRha2UgZWZmZWN0LgorCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodG9fc2VuZCkgICAgIyBubyB2ZXJpZnkgY2FsbGFibGUgc3BlY2lmaWVkCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICczJyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzQnKSwKKyAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IHN0aWxsIGhhcyB0aGUgc3R1ZmYgd2UgbG9nZ2VkIGJlZm9yZS4KKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgXSwgcGF0PXIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIikKKworICAgICAgICAjIE5vdywgcGVyZm9ybSB2ZXJpZmljYXRpb24gd2hpY2ggdHJhbnNmb3JtcyB0aGUgYnl0ZXMuCisKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0b19zZW5kWzo6LTFdLCB2ZXJpZnlfcmV2ZXJzZSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzUnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnNicpLAorICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgc3RpbGwgaGFzIHRoZSBzdHVmZiB3ZSBsb2dnZWQgYmVmb3JlLgorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICBdLCBwYXQ9ciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiKQorCiAgICAgZGVmIHRlc3Rfb3V0X29mX29yZGVyKHNlbGYpOgogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLm91dF9vZl9vcmRlcikKICAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdteW1vZHVsZScpLmhhbmRsZXJzWzBdCkBAIC0yNzc5LDE0ICsyOTI4LDE0IEBACiAgICAgICAgIGwyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RlZi5naGknKQogICAgICAgICBjMSA9IHIuZ2V0Q2hpbGQoJ3h5eicpCiAgICAgICAgIGMyID0gci5nZXRDaGlsZCgndXZ3Lnh5eicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMSBpcyBsb2dnaW5nLmdldExvZ2dlcigneHl6JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBsb2dnaW5nLmdldExvZ2dlcigndXZ3Lnh5eicpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMxLCBsb2dnaW5nLmdldExvZ2dlcigneHl6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzIsIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd1dncueHl6JykpCiAgICAgICAgIGMxID0gbDEuZ2V0Q2hpbGQoJ2RlZicpCiAgICAgICAgIGMyID0gYzEuZ2V0Q2hpbGQoJ2doaScpCiAgICAgICAgIGMzID0gbDEuZ2V0Q2hpbGQoJ2RlZi5naGknKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmLmdoaScpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgYzMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzEsIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzIsIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmLmdoaScpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMyLCBjMykKIAogCiBjbGFzcyBEZXJpdmVkTG9nUmVjb3JkKGxvZ2dpbmcuTG9nUmVjb3JkKToKQEAgLTI4MjksNyArMjk3OCw3IEBACiAKIGNsYXNzIFF1ZXVlSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogICAgICMgRG8gbm90IGJvdGhlciB3aXRoIGEgbG9nZ2VyIG5hbWUgZ3JvdXAuCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCkBAIC0zMTIzLDEzICszMjcyLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzAgLSByZWxlYXNlJywgc2VsZi5jYWxsZWRbLTFdKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9pb2Vycm9yX2luX2FjcXVpcmUoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnYWNxdWlyZScsIElPRXJyb3IpCisgICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnYWNxdWlyZScsIE9TRXJyb3IpCiAKICAgICBkZWYgdGVzdF93aXRoX2lvZXJyb3JfaW5fZmx1c2goc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnZmx1c2gnLCBJT0Vycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2ZsdXNoJywgT1NFcnJvcikKIAogICAgIGRlZiB0ZXN0X3dpdGhfaW9lcnJvcl9pbl9jbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdjbG9zZScsIElPRXJyb3IpCisgICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnY2xvc2UnLCBPU0Vycm9yKQogCiAgICAgZGVmIHRlc3Rfd2l0aF92YWx1ZWVycm9yX2luX2FjcXVpcmUoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnYWNxdWlyZScsIFZhbHVlRXJyb3IpCkBAIC0zMzM2LDYgKzM0ODUsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLnJvb3QubGV2ZWwsIHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCkKIAogICAgIGRlZiB0ZXN0X2ZpbGVuYW1lKHNlbGYpOgorCisgICAgICAgIGRlZiBjbGVhbnVwKGgxLCBoMiwgZm4pOgorICAgICAgICAgICAgaDEuY2xvc2UoKQorICAgICAgICAgICAgaDIuY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorCiAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9J3Rlc3QubG9nJykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dnaW5nLnJvb3QuaGFuZGxlcnMpLCAxKQpAQCAtMzM0MywxNyArMzQ5OCwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaGFuZGxlciwgbG9nZ2luZy5GaWxlSGFuZGxlcikKIAogICAgICAgICBleHBlY3RlZCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoJ3Rlc3QubG9nJywgJ2EnKQotICAgICAgICBzZWxmLmFkZENsZWFudXAoZXhwZWN0ZWQuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5zdHJlYW0ubW9kZSwgZXhwZWN0ZWQuc3RyZWFtLm1vZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5zdHJlYW0ubmFtZSwgZXhwZWN0ZWQuc3RyZWFtLm5hbWUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwLCBoYW5kbGVyLCBleHBlY3RlZCwgJ3Rlc3QubG9nJykKIAogICAgIGRlZiB0ZXN0X2ZpbGVtb2RlKHNlbGYpOgorCisgICAgICAgIGRlZiBjbGVhbnVwKGgxLCBoMiwgZm4pOgorICAgICAgICAgICAgaDEuY2xvc2UoKQorICAgICAgICAgICAgaDIuY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorCiAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9J3Rlc3QubG9nJywgZmlsZW1vZGU9J3diJykKIAogICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5yb290LmhhbmRsZXJzWzBdCiAgICAgICAgIGV4cGVjdGVkID0gbG9nZ2luZy5GaWxlSGFuZGxlcigndGVzdC5sb2cnLCAnd2InKQotICAgICAgICBzZWxmLmFkZENsZWFudXAoZXhwZWN0ZWQuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5zdHJlYW0ubW9kZSwgZXhwZWN0ZWQuc3RyZWFtLm1vZGUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwLCBoYW5kbGVyLCBleHBlY3RlZCwgJ3Rlc3QubG9nJykKIAogICAgIGRlZiB0ZXN0X3N0cmVhbShzZWxmKToKICAgICAgICAgc3RyZWFtID0gaW8uU3RyaW5nSU8oKQpAQCAtMzgwOSw2ICszOTcwLDYzIEBACiAgICAgICAgIGFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm4sICdXNycsIGRlbGF5PVRydWUpCiAKKyAgICBkZWYgdGVzdF9jb21wdXRlX3JvbGxvdmVyX2RhaWx5X2F0dGltZShzZWxmKToKKyAgICAgICAgY3VycmVudFRpbWUgPSAwCisgICAgICAgIGF0VGltZSA9IGRhdGV0aW1lLnRpbWUoMTIsIDAsIDApCisgICAgICAgIHJoID0gbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIoCisgICAgICAgICAgICBzZWxmLmZuLCB3aGVuPSdNSUROSUdIVCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIHV0Yz1UcnVlLAorICAgICAgICAgICAgYXRUaW1lPWF0VGltZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKGN1cnJlbnRUaW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGN1cnJlbnRUaW1lICsgMTIgKiA2MCAqIDYwKQorCisgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIoY3VycmVudFRpbWUgKyAxMyAqIDYwICogNjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgY3VycmVudFRpbWUgKyAzNiAqIDYwICogNjApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByaC5jbG9zZSgpCisKKyAgICAjQHVuaXR0ZXN0LnNraXBJZihUcnVlLCAnVGVtcG9yYXJpbHkgc2tpcHBlZCB3aGlsZSBmYWlsdXJlcyBpbnZlc3RpZ2F0ZWQuJykKKyAgICBkZWYgdGVzdF9jb21wdXRlX3JvbGxvdmVyX3dlZWtseV9hdHRpbWUoc2VsZik6CisgICAgICAgIGN1cnJlbnRUaW1lID0gaW50KHRpbWUudGltZSgpKQorICAgICAgICB0b2RheSA9IGN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUgJSA4NjQwMAorCisgICAgICAgIGF0VGltZSA9IGRhdGV0aW1lLnRpbWUoMTIsIDAsIDApCisKKyAgICAgICAgd2RheSA9IHRpbWUuZ210aW1lKHRvZGF5KS50bV93ZGF5CisgICAgICAgIGZvciBkYXkgaW4gcmFuZ2UoNyk6CisgICAgICAgICAgICByaCA9IGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKAorICAgICAgICAgICAgICAgIHNlbGYuZm4sIHdoZW49J1clZCcgJSBkYXksIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIHV0Yz1UcnVlLAorICAgICAgICAgICAgICAgIGF0VGltZT1hdFRpbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgd2RheSA+IGRheToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgcm9sbG92ZXIgZGF5IGhhcyBhbHJlYWR5IHBhc3NlZCB0aGlzIHdlZWssIHNvIHdlCisgICAgICAgICAgICAgICAgICAgICMgZ28gb3ZlciBpbnRvIG5leHQgd2VlaworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICg3IC0gd2RheSArIGRheSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IChkYXkgLSB3ZGF5KQorICAgICAgICAgICAgICAgICMgQXQgdGhpcyBwb2ludCBleHBlY3RlZCBpcyBpbiBkYXlzIGZyb20gbm93LCBjb252ZXJ0IHRvIHNlY29uZHMKKyAgICAgICAgICAgICAgICBleHBlY3RlZCAqPSAyNCAqIDYwICogNjAKKyAgICAgICAgICAgICAgICAjIEFkZCBpbiB0aGUgcm9sbG92ZXIgdGltZQorICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IDEyICogNjAgKiA2MAorICAgICAgICAgICAgICAgICMgQWRkIGluIGFkanVzdG1lbnQgZm9yIHRvZGF5CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKz0gdG9kYXkKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIodG9kYXkpCisgICAgICAgICAgICAgICAgaWYgYWN0dWFsICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnZmFpbGVkIGluIHRpbWV6b25lOiAlZCcgJSB0aW1lLnRpbWV6b25lKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnbG9jYWwgdmFyczogJXMnICUgbG9jYWxzKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIGlmIGRheSA9PSB3ZGF5OgorICAgICAgICAgICAgICAgICAgICAjIGdvZXMgaW50byBmb2xsb3dpbmcgd2VlaworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCArPSA3ICogMjQgKiA2MCAqIDYwCisgICAgICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKHRvZGF5ICsgMTMgKiA2MCAqIDYwKQorICAgICAgICAgICAgICAgIGlmIGFjdHVhbCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZhaWxlZCBpbiB0aW1lem9uZTogJWQnICUgdGltZS50aW1lem9uZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2xvY2FsIHZhcnM6ICVzJyAlIGxvY2FscygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmguY2xvc2UoKQorCisKIGRlZiBzZWNzKCoqa3cpOgogICAgIHJldHVybiBkYXRldGltZS50aW1lZGVsdGEoKiprdykgLy8gZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MSkKIApAQCAtMzg2Nyw3ICs0MDg1LDcgQEAKICAgICAgICAgaC5oYW5kbGUocikKICAgICAgICAgaC5jbG9zZSgpCiAgICAgICAgICMgTm93IHNlZSBpZiB0aGUgZXZlbnQgaXMgcmVjb3JkZWQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bV9yZWNzIDwgd2luMzJldnRsb2cuR2V0TnVtYmVyT2ZFdmVudExvZ1JlY29yZHMoZWxoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG51bV9yZWNzLCB3aW4zMmV2dGxvZy5HZXROdW1iZXJPZkV2ZW50TG9nUmVjb3JkcyhlbGgpKQogICAgICAgICBmbGFncyA9IHdpbjMyZXZ0bG9nLkVWRU5UTE9HX0JBQ0tXQVJEU19SRUFEIHwgXAogICAgICAgICAgICAgICAgIHdpbjMyZXZ0bG9nLkVWRU5UTE9HX1NFUVVFTlRJQUxfUkVBRAogICAgICAgICBmb3VuZCA9IEZhbHNlCkBAIC0zOTAwLDcgKzQxMTgsOCBAQAogICAgICAgICAgICAgICAgICBTTVRQSGFuZGxlclRlc3QsIEZpbGVIYW5kbGVyVGVzdCwgUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsCiAgICAgICAgICAgICAgICAgIExhc3RSZXNvcnRUZXN0LCBMb2dSZWNvcmRUZXN0LCBFeGNlcHRpb25UZXN0LAogICAgICAgICAgICAgICAgICBTeXNMb2dIYW5kbGVyVGVzdCwgSFRUUEhhbmRsZXJUZXN0LCBOVEV2ZW50TG9nSGFuZGxlclRlc3QsCi0gICAgICAgICAgICAgICAgIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlclRlc3QKKyAgICAgICAgICAgICAgICAgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdCwgVW5peFNvY2tldEhhbmRsZXJUZXN0LAorICAgICAgICAgICAgICAgICBVbml4RGF0YWdyYW1IYW5kbGVyVGVzdCwgVW5peFN5c0xvZ0hhbmRsZXJUZXN0CiAgICAgICAgICAgICAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sb25nLnB5IGIvTGliL3Rlc3QvdGVzdF9sb25nLnB5CmluZGV4IGJhZjFkNmEuLjZjMzBmZWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xvbmcucHkKQEAgLTEwNzksNyArMTA3OSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgyNTYpLnRvX2J5dGVzLCAxLCAnYmlnJywgc2lnbmVkPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgyNTYpLnRvX2J5dGVzLCAxLCAnbGl0dGxlJywgc2lnbmVkPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2xpdHRsZScsIHNpZ25lZD1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoLTEpLnRvX2J5dGVzLCAyLCAnYmlnJywgc2lnbmVkPUZhbHNlKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKC0xKS50b19ieXRlcywgMiwgJ2JpZycsIHNpZ25lZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKC0xKS50b19ieXRlcywgMiwgJ2xpdHRsZScsIHNpZ25lZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCkudG9fYnl0ZXMoMCwgJ2JpZycpLCBiJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEpLnRvX2J5dGVzKDUsICdiaWcnKSwgYidceDAwXHgwMFx4MDBceDAwXHgwMScpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2x6bWEucHkgYi9MaWIvdGVzdC90ZXN0X2x6bWEucHkKaW5kZXggYWQ5MDQ1Ni4uMjZkMTlkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sem1hLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbHptYS5weQpAQCAtMzcxLDYgKzM3MSw4IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTygpLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTygpLCAieCIpIGFzIGY6CisgICAgICAgICAgICBwYXNzCiAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTygpLCAiYSIpIGFzIGY6CiAgICAgICAgICAgICBwYXNzCiAKQEAgLTM5OCwxMyArNDAwLDI5IEBACiAgICAgICAgICAgICB3aXRoIExaTUFGaWxlKFRFU1RGTiwgImFiIik6CiAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIHRlc3RfaW5pdF93aXRoX3hfbW9kZShzZWxmKToKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgVEVTVEZOKQorICAgICAgICBmb3IgbW9kZSBpbiAoIngiLCAieGIiKToKKyAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICB3aXRoIExaTUFGaWxlKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RfaW5pdF9iYWRfbW9kZShzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICgzLCAieCIpKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgIiIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAieCIpCisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAieHQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgIngrIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJyeCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAid3giKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInJ0IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKQEAgLTY3OCw2ICs2OTYsMjAgQEAKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFpbOjEyOF0pKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCkKIAorICAgIGRlZiB0ZXN0X3JlYWRfdHJ1bmNhdGVkKHNlbGYpOgorICAgICAgICAjIERyb3Agc3RyZWFtIGZvb3RlcjogQ1JDICg0IGJ5dGVzKSwgaW5kZXggc2l6ZSAoNCBieXRlcyksCisgICAgICAgICMgZmxhZ3MgKDIgYnl0ZXMpIGFuZCBtYWdpYyBudW1iZXIgKDIgYnl0ZXMpLgorICAgICAgICB0cnVuY2F0ZWQgPSBDT01QUkVTU0VEX1haWzotMTJdCisgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCkKKyAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oSU5QVVQpKSwgSU5QVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorICAgICAgICAjIEluY29tcGxldGUgMTItYnl0ZSBoZWFkZXIuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEyKToKKyAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWRbOmldKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorCiAgICAgZGVmIHRlc3RfcmVhZF9iYWRfYXJncyhzZWxmKToKICAgICAgICAgZiA9IExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWikpCiAgICAgICAgIGYuY2xvc2UoKQpAQCAtMTAxNyw4ICsxMDQ5LDYgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICIiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgIngiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgInJidCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQpAQCAtMTA2Nyw2ICsxMDk3LDE2IEBACiAgICAgICAgICAgICB3aXRoIGx6bWEub3BlbihiaW8sICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKCksIFt0ZXh0XSkKIAorICAgIGRlZiB0ZXN0X3hfbW9kZShzZWxmKToKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgVEVTVEZOKQorICAgICAgICBmb3IgbW9kZSBpbiAoIngiLCAieGIiLCAieHQiKToKKyAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICB3aXRoIGx6bWEub3BlbihURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIGx6bWEub3BlbihURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKIAogY2xhc3MgTWlzY2VsbGFuZW91c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5IGIvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CmluZGV4IDM5ZTg2NDMuLjZjNjc5Y2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKQEAgLTU5Niw3ICs1OTYsNyBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBUZXN0TWFpbGJveC5zZXRVcChzZWxmKQotICAgICAgICBpZiBvcy5uYW1lIGluICgnbnQnLCAnb3MyJykgb3Igc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nOgorICAgICAgICBpZiAob3MubmFtZSA9PSAnbnQnKSBvciAoc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nKToKICAgICAgICAgICAgIHNlbGYuX2JveC5jb2xvbiA9ICchJwogCiAgICAgZGVmIGFzc2VydE1haWxib3hFbXB0eShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQppbmRleCA3ZTM3ZjM5Li4yNTVlYjg3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CkBAIC0yNCwzNyArMjQsMTMgQEAKIAogY2xhc3MgSW50VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIEhlbHBlck1peGluKToKICAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhlIGZ1bGwgcmFuZ2Ugb2YgUHl0aG9uIGludHMuCi0gICAgICAgIG4gPSBzeXMubWF4c2l6ZQorICAgICAgICAjIFRlc3QgYSByYW5nZSBvZiBQeXRob24gaW50cyBsYXJnZXIgdGhhbiB0aGUgbWFjaGluZSB3b3JkIHNpemUuCisgICAgICAgIG4gPSBzeXMubWF4c2l6ZSAqKiAyCiAgICAgICAgIHdoaWxlIG46CiAgICAgICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gKC1uLCBuKToKICAgICAgICAgICAgICAgICBzZWxmLmhlbHBlcihleHBlY3RlZCkKICAgICAgICAgICAgIG4gPSBuID4+IDEKIAotICAgIGRlZiB0ZXN0X2ludDY0KHNlbGYpOgotICAgICAgICAjIFNpbXVsYXRlIGludCBtYXJzaGFsaW5nIG9uIGEgNjQtYml0IGJveC4gIFRoaXMgaXMgbW9zdCBpbnRlcmVzdGluZyBpZgotICAgICAgICAjIHdlJ3JlIHJ1bm5pbmcgdGhlIHRlc3Qgb24gYSAzMi1iaXQgYm94LCBvZiBjb3Vyc2UuCi0KLSAgICAgICAgZGVmIHRvX2xpdHRsZV9lbmRpYW5fc3RyaW5nKHZhbHVlLCBuYnl0ZXMpOgotICAgICAgICAgICAgYiA9IGJ5dGVhcnJheSgpCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuYnl0ZXMpOgotICAgICAgICAgICAgICAgIGIuYXBwZW5kKHZhbHVlICYgMHhmZikKLSAgICAgICAgICAgICAgICB2YWx1ZSA+Pj0gOAotICAgICAgICAgICAgcmV0dXJuIGIKLQotICAgICAgICBtYXhpbnQ2NCA9ICgxIDw8IDYzKSAtIDEKLSAgICAgICAgbWluaW50NjQgPSAtbWF4aW50NjQtMQotCi0gICAgICAgIGZvciBiYXNlIGluIG1heGludDY0LCBtaW5pbnQ2NCwgLW1heGludDY0LCAtKG1pbmludDY0ID4+IDEpOgotICAgICAgICAgICAgd2hpbGUgYmFzZToKLSAgICAgICAgICAgICAgICBzID0gYidJJyArIHRvX2xpdHRsZV9lbmRpYW5fc3RyaW5nKGJhc2UsIDgpCi0gICAgICAgICAgICAgICAgZ290ID0gbWFyc2hhbC5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgZ290KQotICAgICAgICAgICAgICAgIGlmIGJhc2UgPT0gLTE6ICAjIGEgZml4ZWQtcG9pbnQgZm9yIHNoaWZ0aW5nIHJpZ2h0IDEKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDAKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBiYXNlID4+PSAxCi0KICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICBmb3IgYiBpbiAoVHJ1ZSwgRmFsc2UpOgogICAgICAgICAgICAgc2VsZi5oZWxwZXIoYikKQEAgLTIwMSwxMCArMTc3LDE0IEBACiAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0X2xvYWRzX3JlY3Vyc2lvbihzZWxmKToKKyAgICBkZWYgdGVzdF9sb2Fkc18yeF9jb2RlKHNlbGYpOgogICAgICAgICBzID0gYidjJyArIChiJ1gnICogNCo0KSArIGIneycgKiAyKioyMAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmxvYWRzLCBzKQogCisgICAgZGVmIHRlc3RfbG9hZHNfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBzID0gYidjJyArIChiJ1gnICogNCo1KSArIGIneycgKiAyKioyMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmxvYWRzLCBzKQorCiAgICAgZGVmIHRlc3RfcmVjdXJzaW9uX2xpbWl0KHNlbGYpOgogICAgICAgICAjIENyZWF0ZSBhIGRlZXBseSBuZXN0ZWQgc3RydWN0dXJlLgogICAgICAgICBoZWFkID0gbGFzdCA9IFtdCkBAIC0yODIsMTUgKzI2MiwyMCBAQAogCiAgICAgZGVmIHRlc3RfYmFkX3JlYWRlcihzZWxmKToKICAgICAgICAgY2xhc3MgQmFkUmVhZGVyKGlvLkJ5dGVzSU8pOgotICAgICAgICAgICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6Ci0gICAgICAgICAgICAgICAgYiA9IHN1cGVyKCkucmVhZChuKQorICAgICAgICAgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGJ1Zik6CisgICAgICAgICAgICAgICAgbiA9IHN1cGVyKCkucmVhZGludG8oYnVmKQogICAgICAgICAgICAgICAgIGlmIG4gaXMgbm90IE5vbmUgYW5kIG4gPiA0OgotICAgICAgICAgICAgICAgICAgICBiICs9IGInICcgKiAxMCoqNgotICAgICAgICAgICAgICAgIHJldHVybiBiCisgICAgICAgICAgICAgICAgICAgIG4gKz0gMTAqKjYKKyAgICAgICAgICAgICAgICByZXR1cm4gbgogICAgICAgICBmb3IgdmFsdWUgaW4gKDEuMCwgMWosIGInMDEyMzQ1Njc4OScsICcwMTIzNDU2Nzg5Jyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmxvYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWRSZWFkZXIobWFyc2hhbC5kdW1wcyh2YWx1ZSkpKQogCisgICAgZGVmIF90ZXN0X2VvZihzZWxmKToKKyAgICAgICAgZGF0YSA9IG1hcnNoYWwuZHVtcHMoKCJoZWxsbyIsICJkb2xseSIsIE5vbmUpKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIG1hcnNoYWwubG9hZHMsIGRhdGFbMDogaV0pCisKIExBUkdFX1NJWkUgPSAyKiozMQogcG9pbnRlcl9zaXplID0gOCBpZiBzeXMubWF4c2l6ZSA+IDB4RkZGRkZGRkYgZWxzZSA0CiAKQEAgLTMzNSw2ICszMjAsMTIyIEBACiAgICAgZGVmIHRlc3RfYnl0ZWFycmF5KHNlbGYsIHNpemUpOgogICAgICAgICBzZWxmLmNoZWNrX3VubWFyc2hhbGxhYmxlKGJ5dGVhcnJheShzaXplKSkKIAorZGVmIENvbGxlY3RPYmplY3RJRHMoaWRzLCBvYmopOgorICAgICIiIkNvbGxlY3Qgb2JqZWN0IGlkcyBzZWVuIGluIGEgc3RydWN0dXJlIiIiCisgICAgaWYgaWQob2JqKSBpbiBpZHM6CisgICAgICAgIHJldHVybgorICAgIGlkcy5hZGQoaWQob2JqKSkKKyAgICBpZiBpc2luc3RhbmNlKG9iaiwgKGxpc3QsIHR1cGxlLCBzZXQsIGZyb3plbnNldCkpOgorICAgICAgICBmb3IgZSBpbiBvYmo6CisgICAgICAgICAgICBDb2xsZWN0T2JqZWN0SURzKGlkcywgZSkKKyAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBkaWN0KToKKyAgICAgICAgZm9yIGssIHYgaW4gb2JqLml0ZW1zKCk6CisgICAgICAgICAgICBDb2xsZWN0T2JqZWN0SURzKGlkcywgaykKKyAgICAgICAgICAgIENvbGxlY3RPYmplY3RJRHMoaWRzLCB2KQorICAgIHJldHVybiBsZW4oaWRzKQorCitjbGFzcyBJbnN0YW5jaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIEhlbHBlck1peGluKToKKyAgICBpbnRvYmogPSAxMjMzMjEKKyAgICBmbG9hdG9iaiA9IDEuMjM0NQorICAgIHN0cm9iaiA9ICJhYmNkZSIqMworICAgIGRpY3RvYmogPSB7ImhlbGxvIjpmbG9hdG9iaiwgImdvb2RieWUiOmZsb2F0b2JqLCBmbG9hdG9iajoiaGVsbG8ifQorCisgICAgZGVmIGhlbHBlcjMoc2VsZiwgcnNhbXBsZSwgcmVjdXJzaXZlPUZhbHNlLCBzaW1wbGU9RmFsc2UpOgorICAgICAgICAjd2UgaGF2ZSB0d28gaW5zdGFuY2VzCisgICAgICAgIHNhbXBsZSA9IChyc2FtcGxlLCByc2FtcGxlKQorCisgICAgICAgIG4wID0gQ29sbGVjdE9iamVjdElEcyhzZXQoKSwgc2FtcGxlKQorCisgICAgICAgIHMzID0gbWFyc2hhbC5kdW1wcyhzYW1wbGUsIDMpCisgICAgICAgIG4zID0gQ29sbGVjdE9iamVjdElEcyhzZXQoKSwgbWFyc2hhbC5sb2FkcyhzMykpCisKKyAgICAgICAgI3NhbWUgbnVtYmVyIG9mIGluc3RhbmNlcyBnZW5lcmF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMywgbjApCisKKyAgICAgICAgaWYgbm90IHJlY3Vyc2l2ZToKKyAgICAgICAgICAgICNjYW4gY29tcGFyZSB3aXRoIHZlcnNpb24gMgorICAgICAgICAgICAgczIgPSBtYXJzaGFsLmR1bXBzKHNhbXBsZSwgMikKKyAgICAgICAgICAgIG4yID0gQ29sbGVjdE9iamVjdElEcyhzZXQoKSwgbWFyc2hhbC5sb2FkcyhzMikpCisgICAgICAgICAgICAjb2xkIGZvcm1hdCBnZW5lcmF0ZWQgbW9yZSBpbnN0YW5jZXMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihuMiwgbjApCisKKyAgICAgICAgICAgICNpZiBjb21wbGV4IG9iamVjdHMgYXJlIGluIHRoZXJlLCBvbGQgZm9ybWF0IGlzIGxhcmdlcgorICAgICAgICAgICAgaWYgbm90IHNpbXBsZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKHMyKSwgbGVuKHMzKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKHMyKSwgbGVuKHMzKSkKKworICAgIGRlZiB0ZXN0SW50KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmludG9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuaW50b2JqLCBzaW1wbGU9VHJ1ZSkKKworICAgIGRlZiB0ZXN0RmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuaGVscGVyKHNlbGYuZmxvYXRvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmZsb2F0b2JqKQorCisgICAgZGVmIHRlc3RTdHIoc2VsZik6CisgICAgICAgIHNlbGYuaGVscGVyKHNlbGYuc3Ryb2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5zdHJvYmopCisKKyAgICBkZWYgdGVzdERpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuaGVscGVyKHNlbGYuZGljdG9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuZGljdG9iaikKKworICAgIGRlZiB0ZXN0TW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oX19maWxlX18sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBjb2RlID0gZi5yZWFkKCkKKyAgICAgICAgaWYgX19maWxlX18uZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoY29kZSwgX19maWxlX18sICJleGVjIikKKyAgICAgICAgc2VsZi5oZWxwZXIoY29kZSkKKyAgICAgICAgc2VsZi5oZWxwZXIzKGNvZGUpCisKKyAgICBkZWYgdGVzdFJlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgZCA9IGRpY3Qoc2VsZi5kaWN0b2JqKQorICAgICAgICBkWyJzZWxmIl0gPSBkCisgICAgICAgIHNlbGYuaGVscGVyMyhkLCByZWN1cnNpdmU9VHJ1ZSkKKyAgICAgICAgbCA9IFtzZWxmLmRpY3RvYmpdCisgICAgICAgIGwuYXBwZW5kKGwpCisgICAgICAgIHNlbGYuaGVscGVyMyhsLCByZWN1cnNpdmU9VHJ1ZSkKKworY2xhc3MgQ29tcGF0aWJpbGl0eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgdmVyc2lvbik6CisgICAgICAgIHdpdGggb3BlbihfX2ZpbGVfXywgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGNvZGUgPSBmLnJlYWQoKQorICAgICAgICBpZiBfX2ZpbGVfXy5lbmRzd2l0aCgiLnB5Iik6CisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShjb2RlLCBfX2ZpbGVfXywgImV4ZWMiKQorICAgICAgICBkYXRhID0gbWFyc2hhbC5kdW1wcyhjb2RlLCB2ZXJzaW9uKQorICAgICAgICBtYXJzaGFsLmxvYWRzKGRhdGEpCisKKyAgICBkZWYgdGVzdDBUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMCkKKworICAgIGRlZiB0ZXN0MVRvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgxKQorCisgICAgZGVmIHRlc3QyVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDIpCisKKyAgICBkZWYgdGVzdDNUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMykKKworY2xhc3MgSW50ZXJuaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIEhlbHBlck1peGluKToKKyAgICBzdHJvYmogPSAidGhpcyBpcyBhbiBpbnRlcm5lZCBzdHJpbmciCisgICAgc3Ryb2JqID0gc3lzLmludGVybihzdHJvYmopCisKKyAgICBkZWYgdGVzdEludGVybihzZWxmKToKKyAgICAgICAgcyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhzZWxmLnN0cm9iaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2VsZi5zdHJvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQocyksIGlkKHNlbGYuc3Ryb2JqKSkKKyAgICAgICAgczIgPSBzeXMuaW50ZXJuKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQoczIpLCBpZChzKSkKKworICAgIGRlZiB0ZXN0Tm9JbnRlcm4oc2VsZik6CisgICAgICAgIHMgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoc2VsZi5zdHJvYmosIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNlbGYuc3Ryb2JqKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMpLCBpZChzZWxmLnN0cm9iaikpCisgICAgICAgIHMyID0gc3lzLmludGVybihzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMyKSwgaWQocykpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEludFRlc3RDYXNlLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weSBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKaW5kZXggZDYxMWEzMS4uNGRlNGY2NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQorKysgYi9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CkBAIC01MjAsMTIgKzUyMCwxMiBAQAogICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3NlZWsoc2VsZik6CiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTMsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0xLCAyKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAxLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgLTMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIC0xLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAxLCAyKQogCiAgICAgZGVmIHRlc3RfdGV4dGlvX3Byb3BlcnRpZXMoc2VsZik6CiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weSBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQppbmRleCBlZTZiMTVhLi5mZmQ0ZjU4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CkBAIC0zNTIsNiArMzUyLDE1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKExbMF0sIGIpCiAKKyAgICBkZWYgdGVzdF9yZXZlcnNlZChzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgYiA9IHRwKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgICAgICBhc2xpc3QgPSBsaXN0KHJldmVyc2VkKG0udG9saXN0KCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKG0pKSwgYXNsaXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKG0pKSwgbGlzdChtWzo6LTFdKSkKKworCiAjIFZhcmlhdGlvbnMgb24gc291cmNlIG9iamVjdHMgZm9yIHRoZSBidWZmZXI6IGJ5dGVzLWxpa2Ugb2JqZWN0cywgdGhlbiBhcnJheXMKICMgd2l0aCBpdGVtc2l6ZSA+IDEuCiAjIE5PVEU6IHN1cHBvcnQgZm9yIG11bHRpLWRpbWVuc2lvbmFsIG9iamVjdHMgaXMgdW5pbXBsZW1lbnRlZC4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW1hcC5weSBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQppbmRleCBkMDY2MzY4Li5iMWNjOTczIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21tYXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CkBAIC0xLDExICsxLDEyIEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlLCB1bmxpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzLCBfMkcsIF80RykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXMsIF8yRywgXzRHLCBnY19jb2xsZWN0KQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cworaW1wb3J0IHdlYWtyZWYKIAogIyBTa2lwIHRlc3QgaWYgd2UgY2FuJ3QgaW1wb3J0IG1tYXAuCiBtbWFwID0gaW1wb3J0X21vZHVsZSgnbW1hcCcpCkBAIC0yNDUsNyArMjQ2LDcgQEAKIAogICAgIGRlZiB0ZXN0X2JhZF9maWxlX2Rlc2Moc2VsZik6CiAgICAgICAgICMgVHJ5IG9wZW5pbmcgYSBiYWQgZmlsZSBkZXNjcmlwdG9yLi4uCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1tYXAuZXJyb3IsIG1tYXAubW1hcCwgLTIsIDQwOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1tYXAubW1hcCwgLTIsIDQwOTYpCiAKICAgICBkZWYgdGVzdF90b3VnaGVyX2ZpbmQoc2VsZik6CiAgICAgICAgICMgRG8gYSB0b3VnaGVyIC5maW5kKCkgdGVzdC4gIFNGIGJ1ZyA1MTU5NDMgcG9pbnRlZCBvdXQgdGhhdCwgaW4gMi4yLApAQCAtNjU4LDcgKzY1OSw3IEBACiAgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDApCiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtLnJlc2l6ZSgwKSAjIHdpbGwgcmFpc2UgV2luZG93c0Vycm9yCisgICAgICAgICAgICAgICAgbS5yZXNpemUoMCkgIyB3aWxsIHJhaXNlIE9TRXJyb3IKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICB0cnk6CkBAIC02NzMsNyArNjc0LDcgQEAKICAgICAgICAgICAgICMgcGFyYW1ldGVycyB0byBfZ2V0X29zZmhhbmRsZS4KICAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKG1tYXAuZXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAocy5maWxlbm8oKSwgMTApCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQpAQCAtNjg0LDE0ICs2ODUsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgdGhlIElPRXJyb3IgZ2V0cyBwYXNzZWQgdGhyb3VnaAorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgT1NFcnJvciBnZXRzIHBhc3NlZCB0aHJvdWdoCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBleGM6CiAgICAgICAgICAgICB3aXRoIG1tYXAubW1hcCgtMSwgMTApIGFzIG06Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgSU9FcnJvciwKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIGV4Y2VwdGlvbiByYWlzZWQgaW4gY29udGV4dCBtYW5hZ2VyIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICAjIENoZWNrIG1tYXAgb2JqZWN0cyBhcmUgd2Vha3JlZmFibGUKKyAgICAgICAgbW0gPSBtbWFwLm1tYXAoLTEsIDE2KQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG1tKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIG1tKQorICAgICAgICBkZWwgbW0KKyAgICAgICAgZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKwogY2xhc3MgTGFyZ2VNbWFwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNzA5LDcgKzcxOSw3IEBACiAgICAgICAgICAgICBmLnNlZWsobnVtX3plcm9lcykKICAgICAgICAgICAgIGYud3JpdGUodGFpbCkKICAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE92ZXJmbG93RXJyb3IpOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIE92ZXJmbG93RXJyb3IpOgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGxhcmdlZmlsZSBzdXBwb3J0IikKICAgICAgICAgcmV0dXJuIGYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKaW5kZXggZTVhMjUyNS4uNWE5YjUwMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKQEAgLTEsNiArMSw4IEBACiAjIFRlc3QgdGhlIG1vZHVsZSB0eXBlCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBnY19jb2xsZWN0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCiBpbXBvcnQgc3lzCiBNb2R1bGVUeXBlID0gdHlwZShzeXMpCkBAIC0zMyw3ICszNSwxMCBAQAogICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLCB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogTm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fcGFja2FnZV9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X2FzY2lpX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBBU0NJSSBkb2NzdHJpbmcKQEAgLTQxLDcgKzQ2LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MifSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZX0pCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBVbmljb2RlIGRvY3N0cmluZwpAQCAtNDksNyArNTUsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sICJmb29kb2NcdTEyMzQiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvY1x1MTIzNCJ9KQorICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jXHUxMjM0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X3JlaW5pdChzZWxmKToKICAgICAgICAgIyBSZWluaXRpYWxpemF0aW9uIHNob3VsZCBub3QgcmVwbGFjZSB0aGUgX19kaWN0X18KQEAgLTYxLDEwICs2OCwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uYmFyLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIiwgImJhciI6IDQyfSkKKyAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLCAiYmFyIjogNDIsCisgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9vLl9fZGljdF9fIGlzIGQpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCiAgICAgZGVmIHRlc3RfZG9udF9jbGVhcl9kaWN0KHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSA3MTQwLgogICAgICAgICBkZWYgZigpOgpAQCAtODksNiArOTYsMTQgQEAKICAgICAgICAgZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzdHJveWVkLCBbMV0pCiAKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICBtID0gTW9kdWxlVHlwZSgiZm9vIikKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihtKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIG0pCisgICAgICAgIGRlbCBtCisgICAgICAgIGdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl9taW5pbWFsKHNlbGYpOgogICAgICAgICAjIHJlcHJzIHdoZW4gbW9kdWxlcyBoYXZlIG5vIF9fZmlsZV9fLCBfX25hbWVfXywgb3IgX19sb2FkZXJfXwogICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKQEAgLTExMCwxMyArMTI1LDE5IEBACiAgICAgICAgIG0uX19maWxlX18gPSAnL3RtcC9mb28ucHknCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtKSwgIjxtb2R1bGUgJz8nIGZyb20gJy90bXAvZm9vLnB5Jz4iKQogCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9sb2FkZXJfYXNfTm9uZShzZWxmKToKKyAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCisgICAgICAgIGFzc2VydCBtLl9fbG9hZGVyX18gaXMgTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8bW9kdWxlICdmb28nPiIpCisKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2JhcmVfbG9hZGVyX2J1dF9ub19uYW1lKHNlbGYpOgogICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKICAgICAgICAgZGVsIG0uX19uYW1lX18KICAgICAgICAgIyBZZXMsIGEgY2xhc3Mgbm90IGFuIGluc3RhbmNlLgogICAgICAgICBtLl9fbG9hZGVyX18gPSBCYXJlTG9hZGVyCisgICAgICAgIGxvYWRlcl9yZXByID0gcmVwcihCYXJlTG9hZGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJz8nICg8Y2xhc3MgJ3Rlc3QudGVzdF9tb2R1bGUuQmFyZUxvYWRlcic+KT4iKQorICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJz8nICh7fSk+Ii5mb3JtYXQobG9hZGVyX3JlcHIpKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9mdWxsX2xvYWRlcl9idXRfbm9fbmFtZShzZWxmKToKICAgICAgICAgIyBtLl9fbG9hZGVyX18ubW9kdWxlX3JlcHIoKSB3aWxsIGZhaWwgYmVjYXVzZSB0aGUgbW9kdWxlIGhhcyBubwpAQCAtMTI2LDE1ICsxNDcsMTcgQEAKICAgICAgICAgZGVsIG0uX19uYW1lX18KICAgICAgICAgIyBZZXMsIGEgY2xhc3Mgbm90IGFuIGluc3RhbmNlLgogICAgICAgICBtLl9fbG9hZGVyX18gPSBGdWxsTG9hZGVyCisgICAgICAgIGxvYWRlcl9yZXByID0gcmVwcihGdWxsTG9hZGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJz8nICg8Y2xhc3MgJ3Rlc3QudGVzdF9tb2R1bGUuRnVsbExvYWRlcic+KT4iKQorICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJz8nICh7fSk+Ii5mb3JtYXQobG9hZGVyX3JlcHIpKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9iYXJlX2xvYWRlcihzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gQmFyZUxvYWRlcgorICAgICAgICBtb2R1bGVfcmVwciA9IHJlcHIoQmFyZUxvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICdmb28nICg8Y2xhc3MgJ3Rlc3QudGVzdF9tb2R1bGUuQmFyZUxvYWRlcic+KT4iKQorICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJ2ZvbycgKHt9KT4iLmZvcm1hdChtb2R1bGVfcmVwcikpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2Z1bGxfbG9hZGVyKHNlbGYpOgogICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKQEAgLTE2Nyw2ICsxOTAsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzoyNV0sICI8bW9kdWxlICd1bml0dGVzdCcgZnJvbSAnIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy0xMzpdLCAiX19pbml0X18ucHknPiIpCiAKKyAgICBkZWYgdGVzdF9tb2R1bGVfZmluYWxpemF0aW9uX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIE1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucyBzaG91bGQgc3RpbGwgYmUgYXZhaWxhYmxlIGR1cmluZyBzaHV0ZG93bgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsICJmcm9tIHRlc3QgaW1wb3J0IGZpbmFsX2EiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycikKKyAgICAgICAgbGluZXMgPSBvdXQuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGxpbmVzKSwgeworICAgICAgICAgICAgYiJ4ID0gYSIsCisgICAgICAgICAgICBiInggPSBiIiwKKyAgICAgICAgICAgIGIiZmluYWxfYS54ID0gYSIsCisgICAgICAgICAgICBiImZpbmFsX2IueCA9IGIiLAorICAgICAgICAgICAgYiJsZW4gPSBsZW4iLAorICAgICAgICAgICAgYiJzaHV0aWwucm10cmVlID0gcm10cmVlIn0pCisKICAgICAjIGZyb3plbiBhbmQgbmFtZXNwYWNlIG1vZHVsZSByZXBycyBhcmUgdGVzdGVkIGluIGltcG9ydGxpYi4KIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQppbmRleCBmZWI3YmQ1Li45MTE0OGE2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKQEAgLTE3Niw1NyArMTc2LDI4IEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4pCiAKIGNsYXNzIFRlc3RfU3RyZWFtV3JpdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpZiBsZW4oJ1xVMDAwMTIzNDUnKSA9PSAyOiAjIFVDUzIKLSAgICAgICAgZGVmIHRlc3RfZ2IxODAzMChzZWxmKToKLSAgICAgICAgICAgIHM9IGlvLkJ5dGVzSU8oKQotICAgICAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ2diMTgwMzAnKShzKQotICAgICAgICAgICAgYy53cml0ZSgnMTIzJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyMycpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4OTA3XHg5NTknKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceDkwN1x4OTU5JykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzFdICsgJ1xVMDAwMTIzNDUnICsgJ1x1YWMwMFx1MDBhYycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDkwN1x4OTU5XHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgYy5yZXNldCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDkwN1x4OTU5XHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKKyAgICBkZWYgdGVzdF9nYjE4MDMwKHNlbGYpOgorICAgICAgICBzPSBpby5CeXRlc0lPKCkKKyAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ2diMTgwMzAnKShzKQorICAgICAgICBjLndyaXRlKCcxMjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQorICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHg5MDdceDk1OScpCisgICAgICAgIGMud3JpdGUoJ1x1YWMwMFx1MDBhYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKIAotICAgICAgICBkZWYgdGVzdF91dGZfOChzZWxmKToKLSAgICAgICAgICAgIHM9IGlvLkJ5dGVzSU8oKQotICAgICAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04JykocykKLSAgICAgICAgICAgIGMud3JpdGUoJzEyMycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceGYwXHg5Mlx4OGRceDg1JykKLQotICAgICAgICAgICAgIyBQeXRob24gdXRmLTggY29kZWMgY2FuJ3QgYnVmZmVyIHN1cnJvZ2F0ZSBwYWlycyB5ZXQuCi0gICAgICAgICAgICBpZiAwOgotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnKQotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzFdICsgJ1xVMDAwMTIzNDUnICsgJ1x1YWMwMFx1MDBhYycpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWMnKQotICAgICAgICAgICAgICAgIGMucmVzZXQoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhY1x4ZWRceGEwXHg4OCcpCi0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMV0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjXHhlZFx4YTBceDg4XHhlZFx4YmRceDg1JykKLQotICAgIGVsc2U6ICMgVUNTNAotICAgICAgICBwYXNzCisgICAgZGVmIHRlc3RfdXRmXzgoc2VsZik6CisgICAgICAgIHM9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcigndXRmLTgnKShzKQorICAgICAgICBjLndyaXRlKCcxMjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQorICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHhmMFx4OTJceDhkXHg4NScpCisgICAgICAgIGMud3JpdGUoJ1x1YWMwMFx1MDBhYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1JworICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhYycpCiAKICAgICBkZWYgdGVzdF9zdHJlYW13cml0ZXJfc3Ryd3JpdGUoc2VsZik6CiAgICAgICAgIHMgPSBpby5CeXRlc0lPKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmsucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZjRlNzUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrLnB5CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcKKwordGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcuaW5zdGFsbF90ZXN0c19pbl9tb2R1bGVfZGljdChnbG9iYWxzKCksICdmb3JrJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5M2EwNGEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyLnB5CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcKKwordGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcuaW5zdGFsbF90ZXN0c19pbl9tb2R1bGVfZGljdChnbG9iYWxzKCksICdmb3Jrc2VydmVyJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX3NwYXduLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0YWU5ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX3NwYXduLnB5CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcKKwordGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcuaW5zdGFsbF90ZXN0c19pbl9tb2R1bGVfZGljdChnbG9iYWxzKCksICdzcGF3bicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5IGIvTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weQppbmRleCA3MDY3YjEyLi40NTcwYmVlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKQEAgLTEsNyArMSwxMSBAQAotaW1wb3J0IHN5cwogaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCB1bml0dGVzdAorZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBpbXBvcnQgTmFtZXNwYWNlTG9hZGVyCitpbXBvcnQgaW1wb3J0bGliLmFiYworaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliIGltcG9ydCB1dGlsCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CkBAIC0yODYsOSArMjkwLDI0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYV90ZXN0LmF0dHIsICdpbiBtb2R1bGUnKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoKk5hbWVzcGFjZVBhY2thZ2VUZXN0Ll9fc3ViY2xhc3Nlc19fKCkpCitjbGFzcyBBQkNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9hZGVyID0gTmFtZXNwYWNlTG9hZGVyKCdmb28nLCBbJ3BrZyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb2FkZXIuaXNfcGFja2FnZSgnZm9vJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5sb2FkZXIuZ2V0X2NvZGUoJ2ZvbycpLCB0eXBlcy5Db2RlVHlwZSkpCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLmdldF9zb3VyY2UoJ2ZvbycpLCAnJykKKworICAgIGRlZiB0ZXN0X2FiY19pc2luc3RhbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLmxvYWRlciwgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyKSkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKaW5kZXggNWFiODdjNC4uZDAwYzlkYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQpAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VydmVyLmhlbHAoKQotICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CmluZGV4IDI4ZWRlMzQuLmFiMmVlYjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdGRhdGEgPSBvcGVuX3VybHJlc291cmNlKFRFU1REQVRBVVJMLCBlbmNvZGluZz0idXRmLTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPWNoZWNrX3ZlcnNpb24pCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIFRFU1REQVRBVVJMKQogICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdGRhdGEuY2xvc2UpCiAgICAgICAgIGZvciBsaW5lIGluIHRlc3RkYXRhOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQppbmRleCBmODA5ODc2Li4yODVlZjYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X250cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQpAQCAtMjU2LDYgKzI1Niw0MCBAQAogICAgICAgICAgICAgICAgICAgICAjIGRpYWxvZ3MgKCM0ODA0KQogICAgICAgICAgICAgICAgICAgICBudHBhdGguc2FtZW9wZW5maWxlKC0xLCAtMSkKIAorICAgIGRlZiB0ZXN0X2lzbW91bnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIkM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJjOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJDOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJcXFxcLlxcYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFwuXFxDOlxcIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJDOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiImM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJDOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXC5cXGM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXC5cXEM6XFwiKSkKKworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShudHBhdGguaXNtb3VudChkKSkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBjdXJyZW50IGZvbGRlciBpc24ndCB0aGUgcm9vdCBmb2xkZXIKKyAgICAgICAgICAgICMgKG9yIGFueSBvdGhlciB2b2x1bWUgcm9vdCkuIFRoZSBkcml2ZS1yZWxhdGl2ZQorICAgICAgICAgICAgIyBsb2NhdGlvbnMgYmVsb3cgY2Fubm90IHRoZW4gcmVmZXIgdG8gbW91bnQgcG9pbnRzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBkcml2ZSwgcGF0aCA9IG50cGF0aC5zcGxpdGRyaXZlKHN5cy5leGVjdXRhYmxlKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qob3MucGF0aC5kaXJuYW1lKHN5cy5leGVjdXRhYmxlKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShudHBhdGguaXNtb3VudChkcml2ZS5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGRyaXZlLnVwcGVyKCkpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFxsb2NhbGhvc3RcXGMkIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFxsb2NhbGhvc3RcXGMkXFwiKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXGxvY2FsaG9zdFxcYyQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIlxcXFxsb2NhbGhvc3RcXGMkXFwiKSkKIAogY2xhc3MgTnRDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHBhdGhtb2R1bGUgPSBudHBhdGgKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQppbmRleCA2Mzg0MzcwLi40Nzg1MTA3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CkBAIC00LDcgKzQsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBpZiBub3QgaGFzYXR0cihvcywgIm9wZW5wdHkiKToKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTm8gb3BlbnB0eSgpIGF2YWlsYWJsZS4iKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5vcGVucHR5KCkgbm90IGF2YWlsYWJsZS4iKQogCiAKIGNsYXNzIE9wZW5wdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CmluZGV4IGZhNjA4YjkuLmFiNThhOTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQpAQCAtMSw4ICsxLDEwIEBACi1pbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAorcHlfb3BlcmF0b3IgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ29wZXJhdG9yJywgYmxvY2tlZD1bJ19vcGVyYXRvciddKQorY19vcGVyYXRvciA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnb3BlcmF0b3InLCBmcmVzaD1bJ19vcGVyYXRvciddKQorCiBjbGFzcyBTZXExOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsc3QpOgogICAgICAgICBzZWxmLmxzdCA9IGxzdApAQCAtMzIsOCArMzQsOSBAQAogICAgICAgICByZXR1cm4gb3RoZXIgKiBzZWxmLmxzdAogCiAKLWNsYXNzIE9wZXJhdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZToKICAgICBkZWYgdGVzdF9sdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0LCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubHQoMSwgMCkpCkBAIC00NCw2ICs0Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sdCgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfbGUoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmxlKDEsIDApKQpAQCAtNTQsNiArNTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCkBAIC02Nyw2ICs3Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X25lKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCkBAIC04MCw2ICs4Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ2Uoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMCkpCkBAIC05MCw2ICs5Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ2UoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2d0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QsIDFqLCAyaikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmd0KDEsIDApKQpAQCAtMTAwLDIyICsxMDgsMjYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5ndCgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFicywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5hYnMoLTEpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmFicygxKSwgMSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hZGQsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hZGQoMywgNCkgPT0gNykKIAogICAgIGRlZiB0ZXN0X2JpdHdpc2VfYW5kKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYW5kXykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYW5kXygweGYsIDB4YSkgPT0gMHhhKQogCiAgICAgZGVmIHRlc3RfY29uY2F0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdCgncHknLCAndGhvbicpID09ICdweXRob24nKQpAQCAtMTI1LDEyICsxMzcsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQsIDEzLCAyOSkKIAogICAgIGRlZiB0ZXN0X2NvdW50T2Yoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb3VudE9mKFsxLCAyLCAxLCAzLCAxLCA0XSwgMykgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCA1KSA9PSAwKQogCiAgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gWzQsIDMsIDIsIDFdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsaXRlbSwgYSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhLCBOb25lKQpAQCAtMTM4LDMzICsxNTIsMzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzQsIDIsIDFdKQogCiAgICAgZGVmIHRlc3RfZmxvb3JkaXYoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF90cnVlZGl2KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IudHJ1ZWRpdig1LCAyKSA9PSAyLjUpCiAKICAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSByYW5nZSgxMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIGEsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZXRpdGVtKGEsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF9pbmRleE9mKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaW5kZXhPZihbNCwgMywgMiwgMV0sIDMpID09IDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIFs0LCAzLCAyLCAxXSwgMCkKIAogICAgIGRlZiB0ZXN0X2ludmVydChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbnZlcnQsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaW52KDQpLCAtNSkKIAogICAgIGRlZiB0ZXN0X2xzaGlmdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHNoaWZ0KDUsIDEpID09IDEwKQpAQCAtMTcyLDE2ICsxOTIsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IubHNoaWZ0LCAyLCAtMSkKIAogICAgIGRlZiB0ZXN0X21vZChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tb2QsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubW9kKDUsIDIpID09IDEpCiAKICAgICBkZWYgdGVzdF9tdWwoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubXVsLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubXVsKDUsIDIpID09IDEwKQogCiAgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lZywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5uZWcoNSksIC01KQpAQCAtMTkwLDExICsyMTMsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5uZWcoLTApLCAwKQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9vcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5vcl8sIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5vcl8oMHhhLCAweDUpID09IDB4ZikKIAogICAgIGRlZiB0ZXN0X3BvcyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3MsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IucG9zKDUpLCA1KQpAQCAtMjAzLDE0ICsyMjgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3MoLTApLCAwKQogCiAgICAgZGVmIHRlc3RfcG93KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3coMyw1KSwgMyoqNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX3Bvd19fKDMsNSksIDMqKjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgMSwgMiwgMykKIAogICAgIGRlZiB0ZXN0X3JzaGlmdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucnNoaWZ0KDUsIDEpID09IDIpCkBAIC0yMTgsMTIgKzI0NCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIDIsIC0xKQogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb250YWlucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb250YWlucywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5jb250YWlucyhyYW5nZSg0KSwgNSkpCiAKICAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBsaXN0KHJhbmdlKDMpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgTm9uZSwgTm9uZSkKQEAgLTIzMiwxMSArMjYwLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEsIDQsIDIpCiAKICAgICBkZWYgdGVzdF9zdWIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc3ViLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc3ViKDUsIDIpID09IDMpCiAKICAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTI0OCwxMSArMjc4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IudHJ1dGgoW10pKQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV94b3Ioc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IueG9yLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IueG9yKDB4YiwgMHhjKSA9PSAweDcpCiAKICAgICBkZWYgdGVzdF9pcyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfKQpAQCAtMjYwLDYgKzI5Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNfKGEsYykpCiAKICAgICBkZWYgdGVzdF9pc19ub3Qoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IGIgPSAneHl6cGRxJwogICAgICAgICBjID0gYVs6M10gKyBiWzM6XQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzX25vdCkKQEAgLTI2Nyw2ICszMDAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNfbm90KGEsYykpCiAKICAgICBkZWYgdGVzdF9hdHRyZ2V0dGVyKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBBKCkKQEAgLTMxNiw2ICszNTAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksICgnYXJ0aHVyJywgJ3Rob21hcycsICdqb2huc29uJykpCiAKICAgICBkZWYgdGVzdF9pdGVtZ2V0dGVyKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSAnQUJDREUnCiAgICAgICAgIGYgPSBvcGVyYXRvci5pdGVtZ2V0dGVyKDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgJ0MnKQpAQCAtMzUwLDEyICszODUsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pdGVtZ2V0dGVyKDIsICd4JywgNSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9tZXRob2RjYWxsZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tZXRob2RjYWxsZXIpCiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBkZWYgZm9vKHNlbGYsICphcmdzLCAqKmt3ZHMpOgogICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWzBdICsgYXJnc1sxXQogICAgICAgICAgICAgZGVmIGJhcihzZWxmLCBmPTQyKToKICAgICAgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICAgICAgZGVmIGJheigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICByZXR1cm4ga3dkc1snbmFtZSddLCBrd2RzWydzZWxmJ10KICAgICAgICAgYSA9IEEoKQogICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdmb28nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBmLCBhKQpAQCAtMzY2LDggKzQwNCwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEsIGEpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JhcicsIGY9NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCA1KQorICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdiYXonLCBuYW1lPSdzcGFtJywgc2VsZj0nZWdncycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdzcGFtJywgJ2VnZ3MnKSkKIAogICAgIGRlZiB0ZXN0X2lucGxhY2Uoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9faWFkZF9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImlhZGQiCiAgICAgICAgICAgICBkZWYgX19pYW5kX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWFuZCIKQEAgLTM5NiwzNyArNDM3LDQ4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXRydWVkaXYgKGMsIDUpLCAiaXRydWVkaXYiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLml4b3IgICAgIChjLCA1KSwgIml4b3IiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmljb25jYXQgIChjLCBjKSwgImlhZGQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWFkZF9fICAgICAoYywgNSksICJpYWRkIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lhbmRfXyAgICAgKGMsIDUpLCAiaWFuZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pZmxvb3JkaXZfXyhjLCA1KSwgImlmbG9vcmRpdiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbHNoaWZ0X18gIChjLCA1KSwgImlsc2hpZnQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW1vZF9fICAgICAoYywgNSksICJpbW9kIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ltdWxfXyAgICAgKGMsIDUpLCAiaW11bCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pb3JfXyAgICAgIChjLCA1KSwgImlvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcG93X18gICAgIChjLCA1KSwgImlwb3ciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXJzaGlmdF9fICAoYywgNSksICJpcnNoaWZ0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lzdWJfXyAgICAgKGMsIDUpLCAiaXN1YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pdHJ1ZWRpdl9fIChjLCA1KSwgIml0cnVlZGl2IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2l4b3JfXyAgICAgKGMsIDUpLCAiaXhvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pY29uY2F0X18gIChjLCBjKSwgImlhZGQiKQogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRlc3RfY2xhc3NlcyA9ICgKLSAgICAgICAgT3BlcmF0b3JUZXN0Q2FzZSwKLSAgICApCisgICAgZGVmIHRlc3RfbGVuZ3RoX2hpbnQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHR5cGUoc2VsZi52YWx1ZSkgaXMgdHlwZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi52YWx1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCiAKLSAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKLSAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKLSAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvdW50cykpOgotICAgICAgICAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKLSAgICAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBwcmludChjb3VudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoW10sIDIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KGl0ZXIoWzEsIDIsIDNdKSksIDMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKDIpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKE5vdEltcGxlbWVudGVkKSwgNCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoWChUeXBlRXJyb3IpLCAxMiksIDEyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBvcGVyYXRvci5sZW5ndGhfaGludChYKCJhYmMiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoLTIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoTG9va3VwRXJyb3IpKQorCisgICAgZGVmIHRlc3RfZHVuZGVyX2lzX29yaWdpbmFsKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCisKKyAgICAgICAgbmFtZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBkaXIob3BlcmF0b3IpIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ18nKV0KKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBvcmlnID0gZ2V0YXR0cihvcGVyYXRvciwgbmFtZSkKKyAgICAgICAgICAgIGR1bmRlciA9IGdldGF0dHIob3BlcmF0b3IsICdfXycgKyBuYW1lLnN0cmlwKCdfJykgKyAnX18nLCBOb25lKQorICAgICAgICAgICAgaWYgZHVuZGVyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZHVuZGVyLCBvcmlnKQorCitjbGFzcyBQeU9wZXJhdG9yVGVzdENhc2UoT3BlcmF0b3JUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHB5X29wZXJhdG9yCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfb3BlcmF0b3IsICdyZXF1aXJlcyBfb3BlcmF0b3InKQorY2xhc3MgQ09wZXJhdG9yVGVzdENhc2UoT3BlcmF0b3JUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IGNfb3BlcmF0b3IKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKaW5kZXggNzhkZTI3OC4uOTQ3MzAxMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CkBAIC03MzAsNyArNzMwLDcgQEAKICAgICBkZWYgdGVzdF9zaG9ydF9hbmRfbG9uZ19vcHRpb25fc3BsaXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgInh5eiIsICItLWZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICd4eXonLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IFsiYmFyIl19LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCiAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfbG9uZ19vcHRpb25fYXBwZW5kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLWZvbz1iYXIiLCAiLWIiLCAiMTIzIiwgIi0tZm9vIiwgImJheiJdLApAQCAtNzQwLDE1ICs3NDAsMTUgQEAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfb25lX3Bvc2l0aW9uYWxfYXJnKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICJmb28iLCAiYmFyIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiZm9vIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiYmFyIl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJiYXIiXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9jb25zdW1lc19zZXBhcmF0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgIi0tIiwgImZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItLSIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSkKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiLS1mb28iLCAiYmFyIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiLS0iLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IFsiYmFyIl19LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCiAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fam9pbmVkX2FuZF9zZXBhcmF0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hYiIsICItLSIsICItLWZvbyIsICJiYXIiXSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkgYi9MaWIvdGVzdC90ZXN0X29zLnB5CmluZGV4IGQyNDI0ZDcuLjgxYTRkOWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcy5weQpAQCAtMjQsNiArMjQsOSBAQAogaW1wb3J0IHN0YXQKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBkZWNpbWFsCitpbXBvcnQgZnJhY3Rpb25zCitpbXBvcnQgcGlja2xlCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMzIsNiArMzUsMTAgQEAKICAgICBpbXBvcnQgcmVzb3VyY2UKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICByZXNvdXJjZSA9IE5vbmUKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmY250bCA9IE5vbmUKIAogZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIApAQCAtMjU4LDYgKzI2NSwxMyBAQAogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXRfYXR0cmlidXRlcyhmbmFtZSkKIAorICAgIGRlZiB0ZXN0X3N0YXRfcmVzdWx0X3BpY2tsZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gb3Muc3RhdChzZWxmLmZuYW1lKQorICAgICAgICBwID0gcGlja2xlLmR1bXBzKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4MDNjb3NcbnN0YXRfcmVzdWx0XG4nLCBwKQorICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHVucGlja2xlZCkKKwogICAgIGRlZiB0ZXN0X3N0YXR2ZnNfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJzdGF0dmZzIik6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTI2Nyw3ICsyODEsNyBAQAogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBPbiBBdGhlT1MsIGdsaWJjIGFsd2F5cyByZXR1cm5zIEVOT1NZUwogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3Muc3RhdHZmcygpIGZhaWxlZCB3aXRoIEVOT1NZUycpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgZGlyZWN0IGFjY2VzcyB3b3JrcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5mX2JmcmVlLCByZXN1bHRbM10pCkBAIC0zMDQsNiArMzE4LDIxIEBACiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3RhdHZmcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIG9zLnN0YXR2ZnMoKSIpCisgICAgZGVmIHRlc3Rfc3RhdHZmc19yZXN1bHRfcGlja2xlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBvcy5zdGF0dmZzKHNlbGYuZm5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAjIE9uIEF0aGVPUywgZ2xpYmMgYWx3YXlzIHJldHVybnMgRU5PU1lTCisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NZUzoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5zdGF0dmZzKCkgZmFpbGVkIHdpdGggRU5PU1lTJykKKworICAgICAgICBwID0gcGlja2xlLmR1bXBzKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4MDNjb3NcbnN0YXR2ZnNfcmVzdWx0XG4nLCBwKQorICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHVucGlja2xlZCkKKwogICAgIGRlZiB0ZXN0X3V0aW1lX2RpcihzZWxmKToKICAgICAgICAgZGVsdGEgPSAxMDAwMDAwCiAgICAgICAgIHN0ID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikKQEAgLTQ3Niw5ICs1MDUsOSBAQAogICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCBhbiBvcGVuIGZpbGUgY2FuIGJlIHN0YXQnZWQKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zdGF0KHIiYzpccGFnZWZpbGUuc3lzIikKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IDI6ICMgZmlsZSBkb2VzIG5vdCBleGlzdDsgY2Fubm90IHJ1biB0ZXN0Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MgIyBmaWxlIGRvZXMgbm90IGV4aXN0OyBjYW5ub3QgcnVuIHRlc3QKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJDb3VsZCBub3Qgc3RhdCBwYWdlZmlsZS5zeXMiKQogCiAgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJwaXBlIiksICJyZXF1aXJlcyBvcy5waXBlKCkiKQpAQCAtODczLDYgKzkwMiwxNyBAQAogICAgICAgICBvcy5tYWtlZGlycyhwYXRoLCBtb2RlPW1vZGUsIGV4aXN0X29rPVRydWUpCiAgICAgICAgIG9zLnVtYXNrKG9sZF9tYXNrKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2Nob3duJyksICd0ZXN0IG5lZWRzIG9zLmNob3duJykKKyAgICBkZWYgdGVzdF9jaG93bl91aWRfZ2lkX2FyZ3VtZW50c19tdXN0X2JlX2luZGV4KHNlbGYpOgorICAgICAgICBzdGF0ID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgdWlkID0gc3RhdC5zdF91aWQKKyAgICAgICAgZ2lkID0gc3RhdC5zdF9naWQKKyAgICAgICAgZm9yIHZhbHVlIGluICgtMS4wLCAtMWosIGRlY2ltYWwuRGVjaW1hbCgtMSksIGZyYWN0aW9ucy5GcmFjdGlvbigtMiwgMikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5jaG93biwgc3VwcG9ydC5URVNURk4sIHZhbHVlLCBnaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLmNob3duLCBzdXBwb3J0LlRFU1RGTiwgdWlkLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob3MuY2hvd24oc3VwcG9ydC5URVNURk4sIHVpZCwgZ2lkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob3MuY2hvd24oc3VwcG9ydC5URVNURk4sIC0xLCAtMSkpCisKICAgICBkZWYgdGVzdF9leGlzdF9va19zX2lzZ2lkX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgJ2RpcjEnKQogICAgICAgICBTX0lTR0lEID0gc3RhdC5TX0lTR0lECkBAIC0xMTI5LDI3ICsxMTY5LDI3IEBACiAKIGNsYXNzIFdpbjMyRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnJlbmFtZSwgc3VwcG9ydC5URVNURk4sIHN1cHBvcnQuVEVTVEZOKyIuYmFrIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVuYW1lLCBzdXBwb3J0LlRFU1RGTiwgc3VwcG9ydC5URVNURk4rIi5iYWsiKQogCiAgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnJlbW92ZSwgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnJlbW92ZSwgc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9jaGRpcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5jaGRpciwgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLmNoZGlyLCBzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X21rZGlyKHNlbGYpOgogICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgInciKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLm1rZGlyLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLm1rZGlyLCBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgb3MudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfdXRpbWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MudXRpbWUsIHN1cHBvcnQuVEVTVEZOLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy51dGltZSwgc3VwcG9ydC5URVNURk4sIE5vbmUpCiAKICAgICBkZWYgdGVzdF9jaG1vZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5jaG1vZCwgc3VwcG9ydC5URVNURk4sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLmNobW9kLCBzdXBwb3J0LlRFU1RGTiwgMCkKIAogY2xhc3MgVGVzdEludmFsaWRGRCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc2luZ2xlcyA9IFsiZmNoZGlyIiwgImR1cCIsICJmZG9wZW4iLCAiZmRhdGFzeW5jIiwgImZzdGF0IiwKQEAgLTEyNzcsMzEgKzEzMTcsMzEgQEAKICAgICAgICAgaWYgaGFzYXR0cihvcywgJ3NldHVpZCcpOgogICAgICAgICAgICAgZGVmIHRlc3Rfc2V0dWlkKHNlbGYpOgogICAgICAgICAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXR1aWQsIDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldHVpZCwgMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXR1aWQsIDE8PDMyKQogCiAgICAgICAgIGlmIGhhc2F0dHIob3MsICdzZXRnaWQnKToKICAgICAgICAgICAgIGRlZiB0ZXN0X3NldGdpZChzZWxmKToKICAgICAgICAgICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwIGFuZCBub3QgSEFWRV9XSEVFTF9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGdpZCwgMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0Z2lkLCAwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldGdpZCwgMTw8MzIpCiAKICAgICAgICAgaWYgaGFzYXR0cihvcywgJ3NldGV1aWQnKToKICAgICAgICAgICAgIGRlZiB0ZXN0X3NldGV1aWQoc2VsZik6CiAgICAgICAgICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGV1aWQsIDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldGV1aWQsIDApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0ZXVpZCwgMTw8MzIpCiAKICAgICAgICAgaWYgaGFzYXR0cihvcywgJ3NldGVnaWQnKToKICAgICAgICAgICAgIGRlZiB0ZXN0X3NldGVnaWQoc2VsZik6CiAgICAgICAgICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRlZ2lkLCAwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRlZ2lkLCAwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldGVnaWQsIDE8PDMyKQogCiAgICAgICAgIGlmIGhhc2F0dHIob3MsICdzZXRyZXVpZCcpOgogICAgICAgICAgICAgZGVmIHRlc3Rfc2V0cmV1aWQoc2VsZik6CiAgICAgICAgICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHJldWlkLCAwLCAwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRyZXVpZCwgMCwgMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZXVpZCwgMTw8MzIsIDApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmV1aWQsIDAsIDE8PDMyKQogCkBAIC0xMzE1LDcgKzEzNTUsNyBAQAogICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc2V0cmVnaWQnKToKICAgICAgICAgICAgIGRlZiB0ZXN0X3NldHJlZ2lkKHNlbGYpOgogICAgICAgICAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0cmVnaWQsIDAsIDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldHJlZ2lkLCAwLCAwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJlZ2lkLCAxPDwzMiwgMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZWdpZCwgMCwgMTw8MzIpCiAKQEAgLTE1MTksNiArMTU1OSw1MiBAQAogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgV2luMzJMaXN0ZGlyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgbGlzdGRpciBvbiBXaW5kb3dzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIGRpcl9uYW1lID0gJ1NVQiVkJyAlIGkKKyAgICAgICAgICAgIGRpcl9wYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBkaXJfbmFtZSkKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9ICdGSUxFJWQnICUgaQorICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBmaWxlX25hbWUpCisgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJfcGF0aCkKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJJJ20gJXMgYW5kIHByb3VkIG9mIGl0LiBCbGFtZSB0ZXN0X29zLlxuIiAlIGZpbGVfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocy5leHRlbmQoW2Rpcl9uYW1lLCBmaWxlX25hbWVdKQorICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMuc29ydCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9saXN0ZGlyX25vX2V4dGVuZGVkX3BhdGgoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2hlbiB0aGUgcGF0aCBpcyBub3QgYW4gImV4dGVuZGVkIiBwYXRoLiIiIgorICAgICAgICAjIHVuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihzdXBwb3J0LlRFU1RGTikpLAorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocykKKyAgICAgICAgIyBieXRlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKG9zLmZzZW5jb2RlKHN1cHBvcnQuVEVTVEZOKSkpLAorICAgICAgICAgICAgICAgIFtvcy5mc2VuY29kZShwYXRoKSBmb3IgcGF0aCBpbiBzZWxmLmNyZWF0ZWRfcGF0aHNdKQorCisgICAgZGVmIHRlc3RfbGlzdGRpcl9leHRlbmRlZF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdoZW4gdGhlIHBhdGggc3RhcnRzIHdpdGggJ1xcXFw/XFwnLiIiIgorICAgICAgICAjIFNlZTogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM2NTI0Nyh2PXZzLjg1KS5hc3B4I21heHBhdGgKKyAgICAgICAgIyB1bmljb2RlCisgICAgICAgIHBhdGggPSAnXFxcXD9cXCcgKyBvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIocGF0aCkpLAorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocykKKyAgICAgICAgIyBieXRlcworICAgICAgICBwYXRoID0gYidcXFxcP1xcJyArIG9zLmZzZW5jb2RlKG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIocGF0aCkpLAorICAgICAgICAgICAgICAgIFtvcy5mc2VuY29kZShwYXRoKSBmb3IgcGF0aCBpbiBzZWxmLmNyZWF0ZWRfcGF0aHNdKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQogQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluawogY2xhc3MgV2luMzJTeW1saW5rVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGZpbGVsaW5rID0gJ2ZpbGVsaW5rdGVzdCcKQEAgLTIxNzksNiArMjI2NSwxOTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCiAKK2NsYXNzIE9TRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBTdHIoc3RyKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmJ5dGVzX2ZpbGVuYW1lcyA9IFtdCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMgPSBbXQorICAgICAgICBpZiBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlY29kZWQgPSBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVjb2RlZCA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMuYXBwZW5kKGRlY29kZWQpCisgICAgICAgIHNlbGYudW5pY29kZV9maWxlbmFtZXMuYXBwZW5kKFN0cihkZWNvZGVkKSkKKyAgICAgICAgaWYgc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbmNvZGVkID0gc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVuY29kZWQgPSBvcy5mc2VuY29kZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5ieXRlc19maWxlbmFtZXMuYXBwZW5kKGVuY29kZWQpCisgICAgICAgIHNlbGYuYnl0ZXNfZmlsZW5hbWVzLmFwcGVuZChtZW1vcnl2aWV3KGVuY29kZWQpKQorCisgICAgICAgIHNlbGYuZmlsZW5hbWVzID0gc2VsZi5ieXRlc19maWxlbmFtZXMgKyBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzCisKKyAgICBkZWYgdGVzdF9vc2Vycm9yX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBmdW5jcyA9IFsKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuY2hkaXIsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuY2htb2QsIDBvNzc3KSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubHN0YXQsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Mub3Blbiwgb3MuT19SRE9OTFkpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5ybWRpciwpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5zdGF0LCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnVubGluaywpLAorICAgICAgICBdCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLnJlbmFtZSwgYiJkc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLnJlcGxhY2UsIGIiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLnJlbmFtZSwgImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCAiZHN0IiksCisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTY0MTQ6IERvbid0IHRlc3QgdW5kZWNvZGFibGUgbmFtZXMgd2l0aCBsaXN0ZGlyKCkKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2Ugb2YgYSBXaW5kb3dzIGJ1Zy4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBXaXRoIHRoZSBBTlNJIGNvZGUgcGFnZSA5MzIsIG9zLmxpc3RkaXIoYidceGU3JykgcmV0dXJuIGFuCisgICAgICAgICAgICAgICAgIyBlbXB0eSBsaXN0IChpbnN0ZWFkIG9mIGZhaWxpbmcpLCB3aGVyZWFzIG9zLmxpc3RkaXIoYidceGZmJykKKyAgICAgICAgICAgICAgICAjIHJhaXNlcyBhIEZpbGVOb3RGb3VuZEVycm9yLiBJdCBsb29rcyBsaWtlIGEgV2luZG93cyBidWc6CisgICAgICAgICAgICAgICAgIyBiJ1x4ZTcnIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgRmluZEZpcnN0RmlsZUEoYidceGU3JykKKyAgICAgICAgICAgICAgICAjIGZhaWxzIHdpdGggRVJST1JfRklMRV9OT1RfRk9VTkQgKDIpLCBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgIyBFUlJPUl9QQVRIX05PVF9GT1VORCAoMykuCisgICAgICAgICAgICAgICAgKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLmxpc3RkaXIsKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdW5jcy5leHRlbmQoKAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubGlzdGRpciwpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MucmVuYW1lLCAiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCAiZHN0IiksCisgICAgICAgICAgICApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hvd24iKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmNob3duLCAwLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaG93biIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNob3duLCAwLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInRydW5jYXRlIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy50cnVuY2F0ZSwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjaGZsYWdzIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaGZsYWdzLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaGZsYWdzIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5sY2hmbGFncywgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjaHJvb3QiKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmNocm9vdCwpKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGluayIpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmJ5dGVzX2ZpbGVuYW1lcywgb3MubGluaywgYiJkc3QiKSkKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLmxpbmssICJkc3QiKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGluaywgImRzdCIpKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGlzdHhhdHRyIik6CisgICAgICAgICAgICBmdW5jcy5leHRlbmQoKAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MubGlzdHhhdHRyLCksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5nZXR4YXR0ciwgInVzZXIudGVzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Muc2V0eGF0dHIsICJ1c2VyLnRlc3QiLCBiJ3VzZXInKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnJlbW92ZXhhdHRyLCAidXNlci50ZXN0IiksCisgICAgICAgICAgICApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGNobW9kIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5sY2htb2QsIDBvNzc3KSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInJlYWRsaW5rIik6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLnJlYWRsaW5rLCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLnJlYWRsaW5rLCkpCisKKyAgICAgICAgZm9yIGZpbGVuYW1lcywgZnVuYywgKmZ1bmNfYXJncyBpbiBmdW5jczoKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZ1bmMobmFtZSwgKmZ1bmNfYXJncykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLmZpbGVuYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHRocm93biBieSB7fSIuZm9ybWF0KGZ1bmMpKQorCitjbGFzcyBDUFVDb3VudFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jcHVfY291bnQoc2VsZik6CisgICAgICAgIGNwdXMgPSBvcy5jcHVfY291bnQoKQorICAgICAgICBpZiBjcHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNwdXMsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihjcHVzLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIENQVXMiKQorCisKK2NsYXNzIEZESW5oZXJpdGFuY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZ2V0X3NldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBGYWxzZSkKKworICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoZmNudGwgaXMgTm9uZSwgIm5lZWQgZmNudGwiKQorICAgIGRlZiB0ZXN0X2dldF9pbmhlcml0YWJsZV9jbG9leGVjKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIEZhbHNlKQorCisgICAgICAgICMgY2xlYXIgRkRfQ0xPRVhFQyBmbGFnCisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpCisgICAgICAgIGZsYWdzICY9IH5mY250bC5GRF9DTE9FWEVDCisgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBmbGFncykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9zZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZEX0NMT0VYRUMpCisKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCkKKworICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgRmFsc2UpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAncGlwZScpLCAibmVlZCBvcy5waXBlKCkiKQorICAgIGRlZiB0ZXN0X3BpcGUoc2VsZik6CisgICAgICAgIHJmZCwgd2ZkID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcmZkKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHdmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUocmZkKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHdmZCksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZHVwKHNlbGYpOgorICAgICAgICBmZDEgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZDEpCisKKyAgICAgICAgZmQyID0gb3MuZHVwKGZkMSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMiksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2R1cDInKSwgIm5lZWQgb3MuZHVwMigpIikKKyAgICBkZWYgdGVzdF9kdXAyKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorCisgICAgICAgICMgaW5oZXJpdGFibGUgYnkgZGVmYXVsdAorICAgICAgICBmZDIgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZHVwMihmZCwgZmQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQyKSwgVHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMikKKworICAgICAgICAjIGZvcmNlIG5vbi1pbmhlcml0YWJsZQorICAgICAgICBmZDMgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZHVwMihmZCwgZmQzLCBpbmhlcml0YWJsZT1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMyksIEZhbHNlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQzKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ29wZW5wdHknKSwgIm5lZWQgb3Mub3BlbnB0eSgpIikKKyAgICBkZWYgdGVzdF9vcGVucHR5KHNlbGYpOgorICAgICAgICBtYXN0ZXJfZmQsIHNsYXZlX2ZkID0gb3Mub3BlbnB0eSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgbWFzdGVyX2ZkKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHNsYXZlX2ZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoc2xhdmVfZmQpLCBGYWxzZSkKKworCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKQEAgLTIxOTYsNiArMjQ3Myw3IEBACiAgICAgICAgIFBvc2l4VWlkR2lkVGVzdHMsCiAgICAgICAgIFBlcDM4M1Rlc3RzLAogICAgICAgICBXaW4zMktpbGxUZXN0cywKKyAgICAgICAgV2luMzJMaXN0ZGlyVGVzdHMsCiAgICAgICAgIFdpbjMyU3ltbGlua1Rlc3RzLAogICAgICAgICBOb25Mb2NhbFN5bWxpbmtUZXN0cywKICAgICAgICAgRlNFbmNvZGluZ1Rlc3RzLApAQCAtMjIwOCw3ICsyNDg2LDEwIEBACiAgICAgICAgIEV4dGVuZGVkQXR0cmlidXRlVGVzdHMsCiAgICAgICAgIFdpbjMyRGVwcmVjYXRlZEJ5dGVzQVBJLAogICAgICAgICBUZXJtc2l6ZVRlc3RzLAorICAgICAgICBPU0Vycm9yVGVzdHMsCiAgICAgICAgIFJlbW92ZURpcnNUZXN0cywKKyAgICAgICAgQ1BVQ291bnRUZXN0cywKKyAgICAgICAgRkRJbmhlcml0YW5jZVRlc3RzLAogICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkgYi9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CmluZGV4IDM5MDhhMDUuLmM5ZTJhMjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgIGRlZiBwbGF5X3NvdW5kX2ZpbGUoc2VsZiwgZGF0YSwgcmF0ZSwgc3NpemUsIG5jaGFubmVscyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRzcCA9IG9zc2F1ZGlvZGV2Lm9wZW4oJ3cnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChtc2cpCkBAIC0xOTAsNyArMTkwLDcgQEAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CiAgICAgICAgIGRzcCA9IG9zc2F1ZGlvZGV2Lm9wZW4oJ3cnKQotICAgIGV4Y2VwdCAob3NzYXVkaW9kZXYuZXJyb3IsIElPRXJyb3IpIGFzIG1zZzoKKyAgICBleGNlcHQgKG9zc2F1ZGlvZGV2LmVycm9yLCBPU0Vycm9yKSBhcyBtc2c6CiAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0RFViwgZXJybm8uRUJVU1kpOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZGIucHkgYi9MaWIvdGVzdC90ZXN0X3BkYi5weQppbmRleCAwMzA4NGU0Li43OTkzZDAyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BkYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BkYi5weQpAQCAtMSw5ICsxLDkgQEAKICMgQSB0ZXN0IHN1aXRlIGZvciBwZGI7IG5vdCB2ZXJ5IGNvbXByZWhlbnNpdmUgYXQgdGhlIG1vbWVudC4KIAogaW1wb3J0IGRvY3Rlc3QKLWltcG9ydCBpbXAKIGltcG9ydCBwZGIKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRleHR3cmFwCkBAIC0yMDUsNyArMjA1LDggQEAKICAgICAuLi4gICAgICdlbmFibGUgMScsCiAgICAgLi4uICAgICAnY2xlYXIgMScsCiAgICAgLi4uICAgICAnY29tbWFuZHMgMicsCi0gICAgLi4uICAgICAncHJpbnQgNDInLAorICAgIC4uLiAgICAgJ3AgIjQyIicsCisgICAgLi4uICAgICAncHJpbnQoIjQyIiwgNyo2KScsICAgICAjIElzc3VlIDE4NzY0IChub3QgYWJvdXQgYnJlYWtwb2ludHMpCiAgICAgLi4uICAgICAnZW5kJywKICAgICAuLi4gICAgICdjb250aW51ZScsICAjIHdpbGwgc3RvcCBhdCBicmVha3BvaW50IDIgKGxpbmUgNCkKICAgICAuLi4gICAgICdjbGVhcicsICAgICAjIGNsZWFyIGFsbCEKQEAgLTI1MiwxMSArMjUzLDEzIEBACiAgICAgKFBkYikgY2xlYXIgMQogICAgIERlbGV0ZWQgYnJlYWtwb2ludCAxIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MwogICAgIChQZGIpIGNvbW1hbmRzIDIKLSAgICAoY29tKSBwcmludCA0MgorICAgIChjb20pIHAgIjQyIgorICAgIChjb20pIHByaW50KCI0MiIsIDcqNikKICAgICAoY29tKSBlbmQKICAgICAoUGRiKSBjb250aW51ZQogICAgIDEKLSAgICA0MgorICAgICc0MicKKyAgICA0MiA0MgogICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPig0KXRlc3RfZnVuY3Rpb24oKQogICAgIC0+IHByaW50KDIpCiAgICAgKFBkYikgY2xlYXIKQEAgLTQ2NCw3ICs0NjcsNyBAQAogCiAKICMgTW9kdWxlIGZvciB0ZXN0aW5nIHNraXBwaW5nIG9mIG1vZHVsZSB0aGF0IG1ha2VzIGEgY2FsbGJhY2sKLW1vZCA9IGltcC5uZXdfbW9kdWxlKCdtb2R1bGVfdG9fc2tpcCcpCittb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2R1bGVfdG9fc2tpcCcpCiBleGVjKCdkZWYgZm9vX3BvbnkoY2FsbGJhY2spOiB4ID0gMTsgY2FsbGJhY2soKTsgcmV0dXJuIE5vbmUnLCBtb2QuX19kaWN0X18pCiAKIApAQCAtNjE3LDYgKzYyMCwzNiBAQAogICAgICAgICBzdGRlcnIgPSBzdGRlcnIgYW5kIGJ5dGVzLmRlY29kZShzdGRlcnIpCiAgICAgICAgIHJldHVybiBzdGRvdXQsIHN0ZGVycgogCisgICAgZGVmIF9hc3NlcnRfZmluZF9mdW5jdGlvbihzZWxmLCBmaWxlX2NvbnRlbnQsIGZ1bmNfbmFtZSwgZXhwZWN0ZWQpOgorICAgICAgICBmaWxlX2NvbnRlbnQgPSB0ZXh0d3JhcC5kZWRlbnQoZmlsZV9jb250ZW50KQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShmaWxlX2NvbnRlbnQpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBOb25lIGlmIG5vdCBleHBlY3RlZCBlbHNlICgKKyAgICAgICAgICAgIGV4cGVjdGVkWzBdLCBzdXBwb3J0LlRFU1RGTiwgZXhwZWN0ZWRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBleHBlY3RlZCwgcGRiLmZpbmRfZnVuY3Rpb24oZnVuY19uYW1lLCBzdXBwb3J0LlRFU1RGTikpCisKKyAgICBkZWYgdGVzdF9maW5kX2Z1bmN0aW9uX2VtcHR5X2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKCcnLCAnZm9vJywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZnVuY3Rpb25fZm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKAorICAgICAgICAgICAgIiIiXAorICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIHF1dXgoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAnYmFyJywKKyAgICAgICAgICAgICgnYmFyJywgNCksCisgICAgICAgICkKKwogICAgIGRlZiB0ZXN0X2lzc3VlNzk2NChzZWxmKToKICAgICAgICAgIyBvcGVuIHRoZSBmaWxlIGFzIGJpbmFyeSBzbyB3ZSBjYW4gZm9yY2UgXHJcbiBuZXdsaW5lCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKaW5kZXggMWNhY2RlYS4uNTAyNTc5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKQEAgLTUsNDQgKzUsMjggQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBtYXRoIGltcG9ydCBjb3B5c2lnbgogCi1kZWYgZGlzYXNzZW1ibGUoZnVuYyk6Ci0gICAgZiA9IFN0cmluZ0lPKCkKLSAgICB0bXAgPSBzeXMuc3Rkb3V0Ci0gICAgc3lzLnN0ZG91dCA9IGYKLSAgICB0cnk6Ci0gICAgICAgIGRpcy5kaXMoZnVuYykKLSAgICBmaW5hbGx5OgotICAgICAgICBzeXMuc3Rkb3V0ID0gdG1wCi0gICAgcmVzdWx0ID0gZi5nZXR2YWx1ZSgpCi0gICAgZi5jbG9zZSgpCi0gICAgcmV0dXJuIHJlc3VsdAorZnJvbSB0ZXN0LmJ5dGVjb2RlX2hlbHBlciBpbXBvcnQgQnl0ZWNvZGVUZXN0Q2FzZQogCi1kZWYgZGlzX3NpbmdsZShsaW5lKToKLSAgICByZXR1cm4gZGlzYXNzZW1ibGUoY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpKQotCi0KLWNsYXNzIFRlc3RUcmFuZm9ybXModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVGVzdFRyYW5mb3JtcyhCeXRlY29kZVRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3Vub3Qoc2VsZik6CiAgICAgICAgICMgVU5BUllfTk9UIFBPUF9KVU1QX0lGX0ZBTFNFICAtLT4gIFBPUF9KVU1QX0lGX1RSVUUnCiAgICAgICAgIGRlZiB1bm90KHgpOgogICAgICAgICAgICAgaWYgbm90IHggPT0gMjoKICAgICAgICAgICAgICAgICBkZWwgeAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZSh1bm90KQotICAgICAgICBmb3IgZWxlbSBpbiAoJ1VOQVJZX05PVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCi0gICAgICAgIGZvciBlbGVtIGluICgnUE9QX0pVTVBfSUZfVFJVRScsKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUodW5vdCwgJ1VOQVJZX05PVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZSh1bm90LCAnUE9QX0pVTVBfSUZfRkFMU0UnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUodW5vdCwgJ1BPUF9KVU1QX0lGX1RSVUUnKQogCiAgICAgZGVmIHRlc3RfZWxpbV9pbnZlcnNpb25fb2ZfaXNfb3JfaW4oc2VsZik6Ci0gICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnbm90IGEgaXMgYicsICcoaXMgbm90KScsKSwKLSAgICAgICAgICAgICgnbm90IGEgaW4gYicsICcobm90IGluKScsKSwKLSAgICAgICAgICAgICgnbm90IGEgaXMgbm90IGInLCAnKGlzKScsKSwKLSAgICAgICAgICAgICgnbm90IGEgbm90IGluIGInLCAnKGluKScsKSwKKyAgICAgICAgZm9yIGxpbmUsIGNtcF9vcCBpbiAoCisgICAgICAgICAgICAoJ25vdCBhIGlzIGInLCAnaXMgbm90JywpLAorICAgICAgICAgICAgKCdub3QgYSBpbiBiJywgJ25vdCBpbicsKSwKKyAgICAgICAgICAgICgnbm90IGEgaXMgbm90IGInLCAnaXMnLCksCisgICAgICAgICAgICAoJ25vdCBhIG5vdCBpbiBiJywgJ2luJywpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdDT01QQVJFX09QJywgY21wX29wKQogCiAgICAgZGVmIHRlc3RfZ2xvYmFsX2FzX2NvbnN0YW50KHNlbGYpOgogICAgICAgICAjIExPQURfR0xPQkFMIE5vbmUvVHJ1ZS9GYWxzZSAgLS0+ICBMT0FEX0NPTlNUIE5vbmUvVHJ1ZS9GYWxzZQpAQCAtNTYsMTcgKzQwLDE0IEBACiAgICAgICAgIGRlZiBoKHgpOgogICAgICAgICAgICAgRmFsc2UKICAgICAgICAgICAgIHJldHVybiB4Ci0gICAgICAgIGZvciBmdW5jLCBuYW1lIGluICgoZiwgJ05vbmUnKSwgKGcsICdUcnVlJyksIChoLCAnRmFsc2UnKSk6Ci0gICAgICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmdW5jKQotICAgICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0dMT0JBTCcsKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICcoJytuYW1lKycpJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgIGZvciBmdW5jLCBlbGVtIGluICgoZiwgTm9uZSksIChnLCBUcnVlKSwgKGgsIEZhbHNlKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZnVuYywgJ0xPQURfR0xPQkFMJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmdW5jLCAnTE9BRF9DT05TVCcsIGVsZW0pCiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAnQWRkaW5nIGEgZG9jc3RyaW5nIG1hZGUgdGhpcyB0ZXN0IGZhaWwgaW4gUHkyLjUuMCcKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0xPQURfQ09OU1QnLCBkaXNhc3NlbWJsZShmKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9HTE9CQUwnLCBkaXNhc3NlbWJsZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdMT0FEX0dMT0JBTCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmLCAnTE9BRF9DT05TVCcsIE5vbmUpCiAKICAgICBkZWYgdGVzdF93aGlsZV9vbmUoc2VsZik6CiAgICAgICAgICMgU2tpcCBvdmVyOiAgTE9BRF9DT05TVCB0cnVlY29uc3QgIFBPUF9KVU1QX0lGX0ZBTFNFIHh4CkBAIC03NCwxMSArNTUsMTAgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmV0dXJuIGxpc3QKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCBlbGVtKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ0pVTVBfQUJTT0xVVEUnLCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmLCBlbGVtKQogCiAgICAgZGVmIHRlc3RfcGFja191bnBhY2soc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTg2LDI4ICs2NiwzMCBAQAogICAgICAgICAgICAgKCdhLCBiID0gYSwgYicsICdST1RfVFdPJywpLAogICAgICAgICAgICAgKCdhLCBiLCBjID0gYSwgYiwgYycsICdST1RfVEhSRUUnLCksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOUEFDS19UVVBMRScsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsJycsJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdVTlBBQ0tfVFVQTEUnKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl90dXBsZXNfb2ZfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJ2EgPSAxLDIsMycsICcoKDEsIDIsIDMpKScpLAotICAgICAgICAgICAgKCcoImEiLCJiIiwiYyIpJywgIigoJ2EnLCAnYicsICdjJykpIiksCi0gICAgICAgICAgICAoJ2EsYixjID0gMSwyLDMnLCAnKCgxLCAyLCAzKSknKSwKLSAgICAgICAgICAgICgnKE5vbmUsIDEsIE5vbmUpJywgJygoTm9uZSwgMSwgTm9uZSkpJyksCi0gICAgICAgICAgICAoJygoMSwgMiksIDMsIDQpJywgJygoKDEsIDIpLCAzLCA0KSknKSwKKyAgICAgICAgICAgICgnYSA9IDEsMiwzJywgKDEsIDIsIDMpKSwKKyAgICAgICAgICAgICgnKCJhIiwiYiIsImMiKScsICgnYScsICdiJywgJ2MnKSksCisgICAgICAgICAgICAoJ2EsYixjID0gMSwyLDMnLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCcoTm9uZSwgMSwgTm9uZSknLCAoTm9uZSwgMSwgTm9uZSkpLAorICAgICAgICAgICAgKCcoKDEsIDIpLCAzLCA0KScsICgoMSwgMiksIDMsIDQpKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwnJywnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1RVUExFJykKIAogICAgICAgICAjIExvbmcgdHVwbGVzIHNob3VsZCBiZSBmb2xkZWQgdG9vLgotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKHJlcHIodHVwbGUocmFuZ2UoMTAwMDApKSkpCisgICAgICAgIGNvZGUgPSBjb21waWxlKHJlcHIodHVwbGUocmFuZ2UoMTAwMDApKSksJycsJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQogICAgICAgICAjIE9uZSBMT0FEX0NPTlNUIGZvciB0aGUgdHVwbGUsIG9uZSBmb3IgdGhlIE5vbmUgcmV0dXJuIHZhbHVlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLmNvdW50KCdMT0FEX0NPTlNUJyksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorICAgICAgICBsb2FkX2NvbnN0cyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnTE9BRF9DT05TVCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvYWRfY29uc3RzKSwgMikKIAogICAgICAgICAjIEJ1ZyAxMDUzODE5OiAgVHVwbGUgb2YgY29uc3RhbnRzIG1pc2lkZW50aWZpZWQgd2hlbiBwcmVzZW50ZWQgd2l0aDoKICAgICAgICAgIyAuIC4gLiBvcGNvZGVfd2l0aF9hcmcgMTAwICAgdW5hcnlfb3Bjb2RlICAgQlVJTERfVFVQTEUgMSAgLiAuIC4KQEAgLTEyOSwxNCArMTExLDE0IEBACiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9saXN0c19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKICAgICAgICAgICAgICMgaW4vbm90IGluIGNvbnN0YW50cyB3aXRoIEJVSUxEX0xJU1Qgc2hvdWxkIGJlIGZvbGRlZCB0byBhIHR1cGxlOgotICAgICAgICAgICAgKCdhIGluIFsxLDIsM10nLCAnKDEsIDIsIDMpJyksCi0gICAgICAgICAgICAoJ2Egbm90IGluIFsiYSIsImIiLCJjIl0nLCAiKCgnYScsICdiJywgJ2MnKSkiKSwKLSAgICAgICAgICAgICgnYSBpbiBbTm9uZSwgMSwgTm9uZV0nLCAnKChOb25lLCAxLCBOb25lKSknKSwKLSAgICAgICAgICAgICgnYSBub3QgaW4gWygxLCAyKSwgMywgNF0nLCAnKCgoMSwgMiksIDMsIDQpKScpLAorICAgICAgICAgICAgKCdhIGluIFsxLDIsM10nLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCdhIG5vdCBpbiBbImEiLCJiIiwiYyJdJywgKCdhJywgJ2InLCAnYycpKSwKKyAgICAgICAgICAgICgnYSBpbiBbTm9uZSwgMSwgTm9uZV0nLCAoTm9uZSwgMSwgTm9uZSkpLAorICAgICAgICAgICAgKCdhIG5vdCBpbiBbKDEsIDIpLCAzLCA0XScsICgoMSwgMiksIDMsIDQpKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX0xJU1QnLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9MSVNUJykKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2Zfc2V0c19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTE0NywxOCArMTI5LDkgQEAKICAgICAgICAgICAgICgnYSBub3QgaW4geygxLCAyKSwgMywgNH0nLCBmcm96ZW5zZXQoeygxLCAyKSwgMywgNH0pKSwKICAgICAgICAgICAgICgnYSBpbiB7MSwgMiwgMywgMywgMiwgMX0nLCBmcm96ZW5zZXQoezEsIDIsIDN9KSksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfU0VUJywgYXNtKQotCi0gICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBmcm96ZW5zZXQgJ2VsZW0nIGlzIGluIHRoZSBkaXNhc3NlbWJseQotICAgICAgICAgICAgIyBUaGUgb3JkZXJpbmcgb2YgdGhlIGVsZW1lbnRzIGluIHJlcHIoIGZyb3plbnNldCApIGlzbid0Ci0gICAgICAgICAgICAjIGd1YXJhbnRlZWQsIHNvIHdlIGp1bXAgdGhyb3VnaCBzb21lIGhvb3BzIHRvIGVuc3VyZSB0aGF0IHdlIGhhdmUKLSAgICAgICAgICAgICMgdGhlIGZyb3plbnNldCB3ZSBleHBlY3Q6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmcm96ZW5zZXQnLCBhc20pCi0gICAgICAgICAgICAjIEV4dHJhY3QgdGhlIGZyb3plbnNldCBsaXRlcmFsIGZyb20gdGhlIGRpc2Fzc2VtYmx5OgotICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHInLiooZnJvemVuc2V0XCh7Lip9XCkpLionLCBhc20sIHJlLkRPVEFMTCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKG0uZ3JvdXAoMSkpLCBlbGVtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9TRVQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKIAogICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSByZXN1bHRpbmcgY29kZSBhY3R1YWxseSB3b3JrczoKICAgICAgICAgZGVmIGYoYSk6CkBAIC0xNzYsOTggKzE0OSwxMDMgQEAKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfYmlub3BzX29uX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCdhID0gMiszKzQnLCAnKDkpJyksICAgICAgICAgICAgICAgICAgICMgY2hhaW5lZCBmb2xkCi0gICAgICAgICAgICAoJyJAIio0JywgIignQEBAQCcpIiksICAgICAgICAgICAgICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCi0gICAgICAgICAgICAoJ2E9ImFiYyIgKyAiZGVmIicsICIoJ2FiY2RlZicpIiksICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCi0gICAgICAgICAgICAoJ2EgPSAzKio0JywgJyg4MSknKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcG93ZXIKLSAgICAgICAgICAgICgnYSA9IDMqNCcsICcoMTIpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtdWx0aXBseQotICAgICAgICAgICAgKCdhID0gMTMvLzQnLCAnKDMpJyksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGZsb29yIGRpdmlkZQotICAgICAgICAgICAgKCdhID0gMTQlNCcsICcoMiknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsbwotICAgICAgICAgICAgKCdhID0gMiszJywgJyg1KScpLCAgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFkZAotICAgICAgICAgICAgKCdhID0gMTMtNCcsICcoOSknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHN1YnRyYWN0Ci0gICAgICAgICAgICAoJ2EgPSAoMTIsMTMpWzFdJywgJygxMyknKSwgICAgICAgICAgICAgIyBiaW5hcnkgc3Vic2NyCi0gICAgICAgICAgICAoJ2EgPSAxMyA8PCAyJywgJyg1MiknKSwgICAgICAgICAgICAgICAgIyBiaW5hcnkgbHNoaWZ0Ci0gICAgICAgICAgICAoJ2EgPSAxMyA+PiAyJywgJygzKScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcnNoaWZ0Ci0gICAgICAgICAgICAoJ2EgPSAxMyAmIDcnLCAnKDUpJyksICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYW5kCi0gICAgICAgICAgICAoJ2EgPSAxMyBeIDcnLCAnKDEwKScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgeG9yCi0gICAgICAgICAgICAoJ2EgPSAxMyB8IDcnLCAnKDE1KScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgb3IKKyAgICAgICAgICAgICgnYSA9IDIrMys0JywgOSksICAgICAgICAgICAgICAgICAgICMgY2hhaW5lZCBmb2xkCisgICAgICAgICAgICAoJyJAIio0JywgJ0BAQEAnKSwgICAgICAgICAgICAgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKKyAgICAgICAgICAgICgnYT0iYWJjIiArICJkZWYiJywgJ2FiY2RlZicpLCAgICAgICMgY2hlY2sgc3RyaW5nIG9wcworICAgICAgICAgICAgKCdhID0gMyoqNCcsIDgxKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcG93ZXIKKyAgICAgICAgICAgICgnYSA9IDMqNCcsIDEyKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG11bHRpcGx5CisgICAgICAgICAgICAoJ2EgPSAxMy8vNCcsIDMpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBmbG9vciBkaXZpZGUKKyAgICAgICAgICAgICgnYSA9IDE0JTQnLCAyKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsbworICAgICAgICAgICAgKCdhID0gMiszJywgNSksICAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYWRkCisgICAgICAgICAgICAoJ2EgPSAxMy00JywgOSksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBzdWJ0cmFjdAorICAgICAgICAgICAgKCdhID0gKDEyLDEzKVsxXScsIDEzKSwgICAgICAgICAgICAgIyBiaW5hcnkgc3Vic2NyCisgICAgICAgICAgICAoJ2EgPSAxMyA8PCAyJywgNTIpLCAgICAgICAgICAgICAgICAjIGJpbmFyeSBsc2hpZnQKKyAgICAgICAgICAgICgnYSA9IDEzID4+IDInLCAzKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHJzaGlmdAorICAgICAgICAgICAgKCdhID0gMTMgJiA3JywgNSksICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYW5kCisgICAgICAgICAgICAoJ2EgPSAxMyBeIDcnLCAxMCksICAgICAgICAgICAgICAgICAjIGJpbmFyeSB4b3IKKyAgICAgICAgICAgICgnYSA9IDEzIHwgNycsIDE1KSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IG9yCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JJTkFSWV8nKSkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHVuZm9sZGFibGVzIGFyZSBza2lwcGVkCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9MisiYiInKQotICAgICAgICBzZWxmLmFzc2VydEluKCcoMiknLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignYicpIiwgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnYT0yKyJiIicsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ2InKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgbGFyZ2Ugc2VxdWVuY2VzIGRvIG5vdCByZXN1bHQgZnJvbSBmb2xkaW5nCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9IngiKjEwMDAnKQotICAgICAgICBzZWxmLmFzc2VydEluKCcoMTAwMCknLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCdhPSJ4IioxMDAwJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAxMDAwKQogCiAgICAgZGVmIHRlc3RfYmluYXJ5X3N1YnNjcl9vbl91bmljb2RlKHNlbGYpOgogICAgICAgICAjIHZhbGlkIGNvZGUgZ2V0IG9wdGltaXplZAotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciZm9vIlswXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignZicpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciXHUwMDYxXHVmZmZmIlsxXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignXFx1ZmZmZicpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciXFUwMDAxMjM0NWFiY2RlZiJbM10nKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ2MnKSIsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJmb28iWzBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnZicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQklOQVJZX1NVQlNDUicpCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciXHUwMDYxXHVmZmZmIlsxXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ1x1ZmZmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCdCSU5BUllfU1VCU0NSJykKKworICAgICAgICAjIFdpdGggUEVQIDM5Mywgbm9uLUJNUCBjaGFyIGdldCBvcHRpbWl6ZWQKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJcVTAwMDEyMzQ1IlswXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ1xVMDAwMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQogCiAgICAgICAgICMgaW52YWxpZCBjb2RlIGRvZXNuJ3QgZ2V0IG9wdGltaXplZAogICAgICAgICAjIG91dCBvZiByYW5nZQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciZnV1IlsxMF0nKQotICAgICAgICBzZWxmLmFzc2VydEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnImZ1dSJbMTBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl91bmFyeW9wc19vbl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnLTAuNScsICcoLTAuNSknKSwgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCi0gICAgICAgICAgICAoJy0wLjAnLCAnKC0wLjApJyksICAgICAgICAgICAgICAgICAgICAgIyAtMC4wCi0gICAgICAgICAgICAoJy0oMS4wLTEuMCknLCcoLTAuMCknKSwgICAgICAgICAgICAgICAgIyAtMC4wIGFmdGVyIGZvbGRpbmcKLSAgICAgICAgICAgICgnLTAnLCAnKDApJyksICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0wCi0gICAgICAgICAgICAoJ34tMicsICcoMSknKSwgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKLSAgICAgICAgICAgICgnKzEnLCAnKDEpJyksICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IHBvc2l0aXZlCisgICAgICAgICAgICAoJy0wLjUnLCAtMC41KSwgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCisgICAgICAgICAgICAoJy0wLjAnLCAtMC4wKSwgICAgICAgICAgICAgICAgICAgICAjIC0wLjAKKyAgICAgICAgICAgICgnLSgxLjAtMS4wKScsIC0wLjApLCAgICAgICAgICAgICAgICMgLTAuMCBhZnRlciBmb2xkaW5nCisgICAgICAgICAgICAoJy0wJywgMCksICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0wCisgICAgICAgICAgICAoJ34tMicsIDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICAgICAgKCcrMScsIDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBwb3NpdGl2ZQogICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCiAKICAgICAgICAgIyBDaGVjayB0aGF0IC0wLjAgd29ya3MgYWZ0ZXIgbWFyc2hhbGluZwogICAgICAgICBkZWYgbmVnemVybygpOgogICAgICAgICAgICAgcmV0dXJuIC0oMS4wLTEuMCkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBkaXNhc3NlbWJsZShuZWd6ZXJvKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHlzaWduKDEuMCwgbmVnemVybygpKSA8IDApCisgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ1VOQVJZXycpKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdW5mb2xkYWJsZXMgYXJlIHNraXBwZWQKLSAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCctImFiYyInLCAiKCdhYmMnKSIpLCAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKLSAgICAgICAgICAgICgnfiJhYmMiJywgIignYWJjJykiKSwgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICBmb3IgbGluZSwgZWxlbSwgb3BuYW1lIGluICgKKyAgICAgICAgICAgICgnLSJhYmMiJywgJ2FiYycsICdVTkFSWV9ORUdBVElWRScpLAorICAgICAgICAgICAgKCd+ImFiYyInLCAnYWJjJywgJ1VOQVJZX0lOVkVSVCcpLAogICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1VOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgb3BuYW1lKQogCiAgICAgZGVmIHRlc3RfZWxpbV9leHRyYV9yZXR1cm4oc2VsZik6CiAgICAgICAgICMgUkVUVVJOIExPQURfQ09OU1QgTm9uZSBSRVRVUk4gIC0tPiAgUkVUVVJOCiAgICAgICAgIGRlZiBmKHgpOgogICAgICAgICAgICAgcmV0dXJuIHgKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9DT05TVCcsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignKE5vbmUpJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdMT0FEX0NPTlNUJywgTm9uZSkKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMSkKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF90b19yZXR1cm4oc2VsZik6CiAgICAgICAgICMgSlVNUF9GT1JXQVJEIHRvIFJFVFVSTiAtLT4gIFJFVFVSTgogICAgICAgICBkZWYgZihjb25kLCB0cnVlX3ZhbHVlLCBmYWxzZV92YWx1ZSk6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZV92YWx1ZSBpZiBjb25kIGVsc2UgZmFsc2VfdmFsdWUKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0FCU09MVVRFJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfQUJTT0xVVEUnKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAyKQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjEoc2VsZik6CiAgICAgICAgICMgRWxpbWluYXRlIGRlYWQgY29kZToganVtcHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJucyBjYW4ndCBiZSByZWFjaGVkCkBAIC0yODAsNDggKzI1OCw1MyBAQAogICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAogICAgICAgICAgICAgICAgIHJldHVybiA1CiAgICAgICAgICAgICByZXR1cm4gNgotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCA2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfRk9SV0FSRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9BQlNPTFVURScpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDYpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfYWZ0ZXJfcmV0dXJuMihzZWxmKToKICAgICAgICAgIyBFbGltaW5hdGUgZGVhZCBjb2RlOiBqdW1wcyBpbW1lZGlhdGVseSBhZnRlciByZXR1cm5zIGNhbid0IGJlIHJlYWNoZWQKICAgICAgICAgZGVmIGYoY29uZDEsIGNvbmQyKToKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiA0Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQogICAgICAgICAjIFRoZXJlIHNob3VsZCBiZSBvbmUganVtcCBmb3IgdGhlIHdoaWxlIGxvb3AuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ0pVTVBfQUJTT0xVVEUnKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnSlVNUF9BQlNPTFVURSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAxKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAyKQogCiAgICAgZGVmIHRlc3RfbWFrZV9mdW5jdGlvbl9kb2VzbnRfYmFpbChzZWxmKToKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgIGRlZiBnKCktPjErMToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByZXR1cm4gZwotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfQUREJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0JJTkFSWV9BREQnKQogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRfZm9sZGluZyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTEyNDQ6IGFnZ3Jlc3NpdmUgY29uc3RhbnQgZm9sZGluZy4KICAgICAgICAgZXhwcnMgPSBbCi0gICAgICAgICAgICAiMyAqIC01IiwKLSAgICAgICAgICAgICItMyAqIDUiLAotICAgICAgICAgICAgIjIgKiAoMyAqIDQpIiwKLSAgICAgICAgICAgICIoMiAqIDMpICogNCIsCi0gICAgICAgICAgICAiKC0xLCAyLCAzKSIsCi0gICAgICAgICAgICAiKDEsIC0yLCAzKSIsCi0gICAgICAgICAgICAiKDEsIDIsIC0zKSIsCi0gICAgICAgICAgICAiKDEsIDIsIC0zKSAqIDYiLAotICAgICAgICAgICAgImxhbWJkYSB4OiB4IGluIHsoMyAqIC01KSArICgtMSAtIDYpLCAoMSwgLTIsIDMpICogMiwgTm9uZX0iLAorICAgICAgICAgICAgJzMgKiAtNScsCisgICAgICAgICAgICAnLTMgKiA1JywKKyAgICAgICAgICAgICcyICogKDMgKiA0KScsCisgICAgICAgICAgICAnKDIgKiAzKSAqIDQnLAorICAgICAgICAgICAgJygtMSwgMiwgMyknLAorICAgICAgICAgICAgJygxLCAtMiwgMyknLAorICAgICAgICAgICAgJygxLCAyLCAtMyknLAorICAgICAgICAgICAgJygxLCAyLCAtMykgKiA2JywKKyAgICAgICAgICAgICdsYW1iZGEgeDogeCBpbiB7KDMgKiAtNSkgKyAoLTEgLSA2KSwgKDEsIC0yLCAzKSAqIDIsIE5vbmV9JywKICAgICAgICAgXQogICAgICAgICBmb3IgZSBpbiBleHByczoKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGFzbSwgZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20sIGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF8nLCBhc20sIGUpCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShlLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnQklOQVJZXycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JVSUxEXycpKQorCiAKIGNsYXNzIFRlc3RCdWdsZXRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzQzLDcgKzMyNiw3IEBACiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIAogICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgogICAgICAgICBpbXBvcnQgZ2MKICAgICAgICAgY291bnRzID0gW05vbmVdICogNQogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjRhZTM4Ni4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSMgLSotIGNvZGluZzoga29pOC1yIC0qLQotCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotCi1jbGFzcyBQRVAyNjNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3BlcDI2MyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICLwydTPziIuZW5jb2RlKCJ1dGYtOCIpLAotICAgICAgICAgICAgYidceGQwXHg5Zlx4ZDBceGI4XHhkMVx4ODJceGQwXHhiZVx4ZDBceGJkJwotICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAiXPAiLmVuY29kZSgidXRmLTgiKSwKLSAgICAgICAgICAgIGInXFxceGQwXHg5ZicKLSAgICAgICAgKQotCi0gICAgZGVmIHRlc3RfY29tcGlsZXN0cmluZyhzZWxmKToKLSAgICAgICAgIyBzZWUgIzE4ODIKLSAgICAgICAgYyA9IGNvbXBpbGUoYiJcbiMgY29kaW5nOiB1dGYtOFxudSA9ICdceGMzXHhiMydcbiIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyd1J10sICdceGYzJykKLQotICAgIGRlZiB0ZXN0X2lzc3VlMjMwMShzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29tcGlsZShiIiMgY29kaW5nOiBjcDkzMlxucHJpbnQgJ1x4OTRceDRlJyIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIHY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudGV4dCwgInByaW50ICdcdTVlNzQnXG4iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCkKLQotICAgIGRlZiB0ZXN0X2lzc3VlNDYyNihzZWxmKToKLSAgICAgICAgYyA9IGNvbXBpbGUoIiMgY29kaW5nPWxhdGluLTFcblx1MDBjNiA9ICdcdTAwYzYnIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhjLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ1x4YzYnXSwgJ1x4YzYnKQotCi0gICAgZGVmIHRlc3RfaXNzdWUzMjk3KHNlbGYpOgotICAgICAgICBjID0gY29tcGlsZSgiYSwgYiA9ICdcVTAwMDEwMTBGJywgJ1xcVTAwMDEwMTBGJyIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIGRbJ2InXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZFsnYSddKSwgbGVuKGRbJ2InXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNjaWkoZFsnYSddKSwgYXNjaWkoZFsnYiddKSkKLQotICAgIGRlZiB0ZXN0X2lzc3VlNzgyMChzZWxmKToKLSAgICAgICAgIyBFbnN1cmUgdGhhdCBjaGVja19ib20oKSByZXN0b3JlcyBhbGwgYnl0ZXMgaW4gdGhlIHJpZ2h0IG9yZGVyIGlmCi0gICAgICAgICMgY2hlY2tfYm9tKCkgZmFpbHMgaW4gcHlkZWJ1ZyBtb2RlOiBhIGJ1ZmZlciBzdGFydHMgd2l0aCB0aGUgZmlyc3QKLSAgICAgICAgIyBieXRlIG9mIGEgdmFsaWQgQk9NLCBidXQgbmV4dCBieXRlcyBhcmUgZGlmZmVyZW50Ci0KLSAgICAgICAgIyBvbmUgYnl0ZSBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTE2LUxFIEJPTQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgYidceGZmXHgyMCcpCi0KLSAgICAgICAgIyB0d28gYnl0ZXMgaW4gY29tbW9uIHdpdGggdGhlIFVURi04IEJPTQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgYidceGVmXHhiYlx4MjAnKQotCi0gICAgZGVmIHRlc3RfZXJyb3JfbWVzc2FnZShzZWxmKToKLSAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmZcbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogdXRmLTggLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2Zha2UnKToKLSAgICAgICAgICAgIGNvbXBpbGUoYicjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2lzby04ODU5LTE1Jyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCi0gICAgICAgICAgICAgICAgICAgICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnQk9NJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCi0gICAgICAgICAgICAgICAgICAgICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgotICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnQk9NJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQRVAyNjNUZXN0KQotCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQppbmRleCA0YjE2Y2JiLi45YmFlNmRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQpAQCAtOTksMTAgKzk5LDYgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleHBlY3RlZF9leGNlcHRpb24pIGFzIGM6CiAgICAgICAgICAgICBmbihmaWxlbmFtZSkKICAgICAgICAgZXhjX2ZpbGVuYW1lID0gYy5leGNlcHRpb24uZmlsZW5hbWUKLSAgICAgICAgIyBsaXN0ZGlyIG1heSBhcHBlbmQgYSB3aWxkY2FyZCB0byB0aGUgZmlsZW5hbWUKLSAgICAgICAgaWYgZm4gaXMgb3MubGlzdGRpciBhbmQgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICBleGNfZmlsZW5hbWUsIF8sIHdpbGRjYXJkID0gZXhjX2ZpbGVuYW1lLnJwYXJ0aXRpb24ob3Muc2VwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aWxkY2FyZCwgJyouKicpCiAgICAgICAgIGlmIGNoZWNrX2ZpbGVuYW1lOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNfZmlsZW5hbWUsIGZpbGVuYW1lLCAiRnVuY3Rpb24gJyVzKCVhKSBmYWlsZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCBiYWQgZmlsZW5hbWUgaW4gdGhlIGV4Y2VwdGlvbjogJWEiICUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMzUyLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkKaW5kZXggNTU4Y2RiNS4uN2M5OGM0NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkKQEAgLTEsNyArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IHdhcm5pbmdzCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgb3MKIGZyb20gcGxhdGZvcm0gaW1wb3J0IHN5c3RlbSBhcyBwbGF0Zm9ybV9zeXN0ZW0KIApAQCAtMTgwLDggKzE3OSw2IEBACiAgICAgICAgICMgQ2F0Y2hpbmcgYSBzdHJpbmcgaXMgYmFkLgogICAgICAgICBzZWxmLmNhdGNoX2ZhaWxzKCJzcGFtIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25DbGFzc1Rlc3RzLCBVc2FnZVRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CmluZGV4IGE4NDI2YjUuLjM3MGIyYWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSBpbXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCitmcm9tIGltcG9ydGxpYi51dGlsIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUKIAogY2xhc3MgVGVzdEltcG9ydCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkKaW5kZXggZmQwNjYxNC4uMWY0ODg1MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQpAQCAtMSwxMiArMSwxMiBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgdW5sb2FkLCBjaGVja193YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgcGtndXRpbAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB6aXBmaWxlCiAKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIGNsYXNzIE15VGVzdExvYWRlcihvYmplY3QpOgogICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAgICAgIyBDcmVhdGUgYW4gZW1wdHkgbW9kdWxlCi0gICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLCBpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCisgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLCB0eXBlcy5Nb2R1bGVUeXBlKGZ1bGxuYW1lKSkKICAgICAgICAgICAgIG1vZC5fX2ZpbGVfXyA9ICI8JXM+IiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAgICAgICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYKICAgICAgICAgICAgICMgTWFrZSBpdCBhIHBhY2thZ2UKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQppbmRleCBmOThhMjgwLi5hMWU1YzNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CkBAIC0xLDYgKzEsNyBAQAogIyBUZXN0IGNhc2UgZm9yIHRoZSBvcy5wb2xsKCkgZnVuY3Rpb24KIAogaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHNlbGVjdAogaW1wb3J0IF90ZXN0Y2FwaQpAQCAtMTUsNyArMTYsNyBAQAogdHJ5OgogICAgIHNlbGVjdC5wb2xsCiBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5wb2xsIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3RfcG9sbCIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNlbGVjdC5wb2xsIG5vdCBkZWZpbmVkIikKIAogCiBkZWYgZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgZmxhZyk6CkBAIC03NiwxMyArNzcsMTEgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZnMsIFtNU0ddICogTlVNX1BJUEVTKQogCi0gICAgZGVmIHBvbGxfdW5pdF90ZXN0cyhzZWxmKToKKyAgICBkZWYgdGVzdF9wb2xsX3VuaXRfdGVzdHMoc2VsZik6CiAgICAgICAgICMgcmV0dXJucyBOVkFMIGZvciBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcgotICAgICAgICBGRCA9IDQyCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmNsb3NlKEZEKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgRkQsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgb3MuY2xvc2UoRkQpCisgICAgICAgIG9zLmNsb3NlKHcpCiAgICAgICAgIHAgPSBzZWxlY3QucG9sbCgpCiAgICAgICAgIHAucmVnaXN0ZXIoRkQpCiAgICAgICAgIHIgPSBwLnBvbGwoKQpAQCAtMTI1LDcgKzEyNCw5IEBACiAKICAgICBkZWYgdGVzdF9wb2xsMihzZWxmKToKICAgICAgICAgY21kID0gJ2ZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvIGVjaG8gdGVzdGluZy4uLjsgc2xlZXAgMTsgZG9uZScKLSAgICAgICAgcCA9IG9zLnBvcGVuKGNtZCwgJ3InKQorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnNpemU9MCkKKyAgICAgICAgcCA9IHByb2Muc3Rkb3V0CiAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQogICAgICAgICBwb2xsc3Rlci5yZWdpc3RlciggcCwgc2VsZWN0LlBPTExJTiApCiAgICAgICAgIGZvciB0b3V0IGluICgwLCAxMDAwLCAyMDAwLCA0MDAwLCA4MDAwLCAxNjAwMCkgKyAoLTEsKSoxMDoKQEAgLTEzNSw3ICsxMzYsNyBAQAogICAgICAgICAgICAgZmQsIGZsYWdzID0gZmRsaXN0WzBdCiAgICAgICAgICAgICBpZiBmbGFncyAmIHNlbGVjdC5QT0xMSFVQOgogICAgICAgICAgICAgICAgIGxpbmUgPSBwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBsaW5lICE9ICIiOgorICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gYiIiOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Vycm9yOiBwaXBlIHNlZW1zIHRvIGJlIGNsb3NlZCwgYnV0IHN0aWxsIHJldHVybnMgZGF0YScpCiAgICAgICAgICAgICAgICAgY29udGludWUKIApAQCAtMTQzLDYgKzE0NCw3IEBACiAgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQogICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgYid0ZXN0aW5nLi4uXG4nKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgZnJvbSBzZWxlY3QucG9sbDogJXMnICUgZmRsaXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQppbmRleCAyOGU2YTZiLi5kZDUxYWM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQpAQCAtMTgsNiArMTgsMTMgQEAKIEhPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAogUE9SVCA9IDAKIAorU1VQUE9SVFNfU1NMID0gRmFsc2UKK2lmIGhhc2F0dHIocG9wbGliLCAnUE9QM19TU0wnKToKKyAgICBpbXBvcnQgc3NsCisKKyAgICBTVVBQT1JUU19TU0wgPSBUcnVlCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJrZXljZXJ0LnBlbSIpCisKICMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIHdoZW4gTElTVCBhbmQgUkVUUiBjb21tYW5kcyBhcmUgaXNzdWVkCiBMSVNUX1JFU1AgPSBiJzEgMVxyXG4yIDJcclxuMyAzXHJcbjQgNFxyXG41IDVcclxuLlxyXG4nCiBSRVRSX1JFU1AgPSBiIiIiRnJvbTogcG9zdG1hc3RlckBweXRob24ub3JnXApAQCAtMzMsMTEgKzQwLDE1IEBACiAKIGNsYXNzIER1bW15UE9QM0hhbmRsZXIoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CiAKKyAgICBDQVBBUyA9IHsnVUlETCc6IFtdLCAnSU1QTEVNRU5UQVRJT04nOiBbJ3B5dGhvbi10ZXN0bGliLXBvcC1zZXJ2ZXInXX0KKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uKQogICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKGIiXHJcbiIpCiAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KICAgICAgICAgc2VsZi5wdXNoKCcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuIDx0aW1lc3RhbXA+JykKKyAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gRmFsc2UKKyAgICAgICAgc2VsZi50bHNfc3RhcnRpbmcgPSBGYWxzZQogCiAgICAgZGVmIGNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5pbl9idWZmZXIuYXBwZW5kKGRhdGEpCkBAIC0xMTIsNiArMTIzLDY1IEBACiAgICAgICAgIHNlbGYucHVzaCgnK09LIGNsb3NpbmcuJykKICAgICAgICAgc2VsZi5jbG9zZV93aGVuX2RvbmUoKQogCisgICAgZGVmIF9nZXRfY2FwYXMoc2VsZik6CisgICAgICAgIF9jYXBhcyA9IGRpY3Qoc2VsZi5DQVBBUykKKyAgICAgICAgaWYgbm90IHNlbGYudGxzX2FjdGl2ZSBhbmQgU1VQUE9SVFNfU1NMOgorICAgICAgICAgICAgX2NhcGFzWydTVExTJ10gPSBbXQorICAgICAgICByZXR1cm4gX2NhcGFzCisKKyAgICBkZWYgY21kX2NhcGEoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgQ2FwYWJpbGl0eSBsaXN0IGZvbGxvd3MnKQorICAgICAgICBpZiBzZWxmLl9nZXRfY2FwYXMoKToKKyAgICAgICAgICAgIGZvciBjYXAsIHBhcmFtcyBpbiBzZWxmLl9nZXRfY2FwYXMoKS5pdGVtcygpOgorICAgICAgICAgICAgICAgIF9sbiA9IFtjYXBdCisgICAgICAgICAgICAgICAgaWYgcGFyYW1zOgorICAgICAgICAgICAgICAgICAgICBfbG4uZXh0ZW5kKHBhcmFtcykKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJyAnLmpvaW4oX2xuKSkKKyAgICAgICAgc2VsZi5wdXNoKCcuJykKKworICAgIGlmIFNVUFBPUlRTX1NTTDoKKworICAgICAgICBkZWYgY21kX3N0bHMoc2VsZiwgYXJnKToKKyAgICAgICAgICAgIGlmIHNlbGYudGxzX2FjdGl2ZSBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJytPSyBCZWdpbiBUTFMgbmVnb3RpYXRpb24nKQorICAgICAgICAgICAgICAgIHRsc19zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29ja2V0LCBjZXJ0ZmlsZT1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPUZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYuZGVsX2NoYW5uZWwoKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NvY2tldCh0bHNfc29jaykKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi50bHNfc3RhcnRpbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3Rsc19oYW5kc2hha2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJy1FUlIgQ29tbWFuZCBub3QgcGVybWl0dGVkIHdoZW4gVExTIGFjdGl2ZScpCisKKyAgICAgICAgZGVmIF9kb190bHNfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IEZhbHNlCisKKyAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi50bHNfc3RhcnRpbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fdGxzX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5oYW5kbGVfcmVhZChzZWxmKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKIAogY2xhc3MgRHVtbXlQT1AzU2VydmVyKGFzeW5jb3JlLmRpc3BhdGNoZXIsIHRocmVhZGluZy5UaHJlYWQpOgogCkBAIC0yMzYsMTkgKzMwNiwzNSBAQAogICAgICAgICBzZWxmLmNsaWVudC51aWRsKCkKICAgICAgICAgc2VsZi5jbGllbnQudWlkbCgnZm9vJykKIAorICAgIGRlZiB0ZXN0X2NhcGEoc2VsZik6CisgICAgICAgIGNhcGEgPSBzZWxmLmNsaWVudC5jYXBhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdJTVBMRU1FTlRBVElPTicgaW4gY2FwYS5rZXlzKCkpCisKICAgICBkZWYgdGVzdF9xdWl0KHNlbGYpOgogICAgICAgICByZXNwID0gc2VsZi5jbGllbnQucXVpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmNsaWVudC5zb2NrKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmNsaWVudC5maWxlKQogCisgICAgaWYgU1VQUE9SVFNfU1NMOgogCi1TVVBQT1JUU19TU0wgPSBGYWxzZQotaWYgaGFzYXR0cihwb3BsaWIsICdQT1AzX1NTTCcpOgotICAgIGltcG9ydCBzc2wKKyAgICAgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTVExTJyBpbiBjYXBhLmtleXMoKSkKIAotICAgIFNVUFBPUlRTX1NTTCA9IFRydWUKLSAgICBDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwgImtleWNlcnQucGVtIikKKyAgICAgICAgZGVmIHRlc3Rfc3RscyhzZWxmKToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gYicrT0sgQmVnaW4gVExTIG5lZ290aWF0aW9uJworICAgICAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCBleHBlY3RlZCkKKworICAgICAgICBkZWYgdGVzdF9zdGxzX2NvbnRleHQoc2VsZik6CisgICAgICAgICAgICBleHBlY3RlZCA9IGInK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicKKyAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5zdGxzKGNvbnRleHQ9Y3R4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCBleHBlY3RlZCkKKworCitpZiBTVVBQT1JUU19TU0w6CiAKICAgICBjbGFzcyBEdW1teVBPUDNfU1NMSGFuZGxlcihEdW1teVBPUDNIYW5kbGVyKToKIApAQCAtMjYwLDM0ICszNDYsMTMgQEAKICAgICAgICAgICAgIHNlbGYuZGVsX2NoYW5uZWwoKQogICAgICAgICAgICAgc2VsZi5zZXRfc29ja2V0KHNzbF9zb2NrZXQpCiAgICAgICAgICAgICAjIE11c3QgdHJ5IGhhbmRzaGFrZSBiZWZvcmUgY2FsbGluZyBwdXNoKCkKLSAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IFRydWUKKyAgICAgICAgICAgIHNlbGYudGxzX3N0YXJ0aW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fZG9fdGxzX2hhbmRzaGFrZSgpCiAgICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKGIiXHJcbiIpCiAgICAgICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCiAgICAgICAgICAgICBzZWxmLnB1c2goJytPSyBkdW1teSBwb3AzIHNlcnZlciByZWFkeS4gPHRpbWVzdGFtcD4nKQogCi0gICAgICAgIGRlZiBfZG9fc3NsX2hhbmRzaGFrZShzZWxmKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5kb19oYW5kc2hha2UoKQotICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBGYWxzZQotCi0gICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3NzbF9hY2NlcHRpbmc6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIER1bW15UE9QM0hhbmRsZXIuaGFuZGxlX3JlYWQoc2VsZikKLQogCiAgICAgY2xhc3MgVGVzdFBPUDNfU1NMQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CiAgICAgICAgICMgcmVwZWF0IHByZXZpb3VzIHRlc3RzIGJ5IHVzaW5nIHBvcGxpYi5QT1AzX1NTTApAQCAtMzE4LDYgKzM4Myw0NSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmNsaWVudC5zb2NrLmNvbnRleHQsIGN0eCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaWVudC5ub29wKCkuc3RhcnRzd2l0aChiJytPSycpKQogCisgICAgICAgIGRlZiB0ZXN0X3N0bHMoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhwb3BsaWIuZXJyb3JfcHJvdG8sIHNlbGYuY2xpZW50LnN0bHMpCisKKyAgICAgICAgdGVzdF9zdGxzX2NvbnRleHQgPSB0ZXN0X3N0bHMKKworICAgICAgICBkZWYgdGVzdF9zdGxzX2NhcGEoc2VsZik6CisgICAgICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdTVExTJyBpbiBjYXBhLmtleXMoKSkKKworCisgICAgY2xhc3MgVGVzdFBPUDNfVExTQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CisgICAgICAgICMgcmVwZWF0IHByZXZpb3VzIHRlc3RzIGJ5IHVzaW5nIHBvcGxpYi5QT1AzLnN0bHMoKQorCisgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlQT1AzU2VydmVyKChIT1NULCBQT1JUKSkKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDMoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCwgdGltZW91dD0zKQorICAgICAgICAgICAgc2VsZi5jbGllbnQuc3RscygpCisKKyAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5jbGllbnQuZmlsZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5jbGllbnQuc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBwb3BsaWIuZXJyb3JfcHJvdG86CisgICAgICAgICAgICAgICAgICAgICMgaGFwcGVucyBpbiB0aGUgdGVzdF90b29fbG9uZ19saW5lcyBjYXNlOyB0aGUgb3ZlcmxvbmcKKyAgICAgICAgICAgICAgICAgICAgIyByZXNwb25zZSB3aWxsIGJlIHRyZWF0ZWQgYXMgcmVzcG9uc2UgdG8gUVVJVCBhbmQgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgICAgICBkZWYgdGVzdF9zdGxzKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5zdGxzKQorCisgICAgICAgIHRlc3Rfc3Rsc19jb250ZXh0ID0gdGVzdF9zdGxzCisKKyAgICAgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiJ1NUTFMnIGluIGNhcGEua2V5cygpKQorCiAKIGNsYXNzIFRlc3RUaW1lb3V0cyhUZXN0Q2FzZSk6CiAKQEAgLTM3Nyw2ICs0ODEsNyBAQAogICAgIHRlc3RzID0gW1Rlc3RQT1AzQ2xhc3MsIFRlc3RUaW1lb3V0c10KICAgICBpZiBTVVBQT1JUU19TU0w6CiAgICAgICAgIHRlc3RzLmFwcGVuZChUZXN0UE9QM19TU0xDbGFzcykKKyAgICAgICAgdGVzdHMuYXBwZW5kKFRlc3RQT1AzX1RMU0NsYXNzKQogICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgdHJ5OgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CmluZGV4IDRkOWUxZjUuLjZjZDMzOTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQpAQCAtNTYzLDggKzU2MywxMCBAQAogICAgICAgICByLCB3ID0gb3MucGlwZTIob3MuT19DTE9FWEVDfG9zLk9fTk9OQkxPQ0spCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwociwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwodywgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUodykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bCh3LCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCiAgICAgICAgICMgdHJ5IHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBwaXBlOiB0aGlzIHNob3VsZCBmYWlsLCBub3QgYmxvY2sKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVhZCwgciwgMSkKICAgICAgICAgIyB0cnkgYSB3cml0ZSBiaWcgZW5vdWdoIHRvIGZpbGwtdXAgdGhlIHBpcGU6IHRoaXMgc2hvdWxkIGVpdGhlcgpAQCAtNjA3LDcgKzYwOSw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUsIG5ld19zdC5zdF9mbGFncykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9wZW4odGFyZ2V0X2ZpbGUsICd3KycpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcG9zaXguY2hmbGFncyh0YXJnZXRfZmlsZSwgc3Quc3RfZmxhZ3MpCkBAIC02NjQsNDEgKzY2NiwzOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpLCBpdGVtX3R5cGUpCiAKICAgICBkZWYgdGVzdF9nZXRjd2RfbG9uZ19wYXRobmFtZXMoc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdnZXRjd2QnKToKLSAgICAgICAgICAgIGRpcm5hbWUgPSAnZ2V0Y3dkLXRlc3QtZGlyZWN0b3J5LTAxMjM0NTY3ODlhYmNkZWYtMDEyMzQ1Njc4OTBhYmNkZWYnCi0gICAgICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgYmFzZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICcuZ2V0Y3dkJworICAgICAgICBkaXJuYW1lID0gJ2dldGN3ZC10ZXN0LWRpcmVjdG9yeS0wMTIzNDU2Nzg5YWJjZGVmLTAxMjM0NTY3ODkwYWJjZGVmJworICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBiYXNlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pICsgJy5nZXRjd2QnCiAKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5ta2RpcihiYXNlX3BhdGgpCi0gICAgICAgICAgICAgICAgb3MuY2hkaXIoYmFzZV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0OgotIyAgICAgICAgICAgICAgIEp1c3QgcmV0dXJuaW5nIG5vdGhpbmcgaW5zdGVhZCBvZiB0aGUgU2tpcFRlc3QgZXhjZXB0aW9uLAotIyAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHRlc3QgcmVzdWx0cyBpbiBFcnJvciBpbiB0aGF0IGNhc2UuCi0jICAgICAgICAgICAgICAgSXMgdGhhdCBvaz8KLSMgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciB0ZXN0aW5nIikKLSAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWtkaXIoYmFzZV9wYXRoKQorICAgICAgICAgICAgb3MuY2hkaXIoYmFzZV9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjICBKdXN0IHJldHVybmluZyBub3RoaW5nIGluc3RlYWQgb2YgdGhlIFNraXBUZXN0IGV4Y2VwdGlvbiwgYmVjYXVzZQorICAgICAgICAgICAgIyAgdGhlIHRlc3QgcmVzdWx0cyBpbiBFcnJvciBpbiB0aGF0IGNhc2UuICBJcyB0aGF0IG9rPworICAgICAgICAgICAgIyAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciB0ZXN0aW5nIikKKyAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICAgICAgICAgZGVmIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoID0gMCk6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiKQorICAgICAgICAgICAgZGVmIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoID0gMCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm1rZGlyIGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IHN1ZmZpY2llbnRseSBkZWVwIGZvciBnZXRjd2QgdGVzdCIpCiAKLSAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoZGlybmFtZSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfcGF0aF9sZW5ndGggPCAxMDI3OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoICsgbGVuKGRpcm5hbWUpICsgMSkKLSAgICAgICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKCcuLicpCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5nZXRjd2QoKQorICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BhdGhfbGVuZ3RoIDwgMTAyNzoKKyAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoICsgbGVuKGRpcm5hbWUpICsgMSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLi4nKQorICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQogCi0gICAgICAgICAgICAgICAgX2NyZWF0ZV9hbmRfZG9fZ2V0Y3dkKGRpcm5hbWUpCisgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSkKIAotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy5jaGRpcihjdXJkaXIpCi0gICAgICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUoYmFzZV9wYXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUoYmFzZV9wYXRoKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2dldGdyb3VwbGlzdCcpLCAidGVzdCBuZWVkcyBwb3NpeC5nZXRncm91cGxpc3QoKSIpCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwd2QsICdnZXRwd3VpZCcpLCAidGVzdCBuZWVkcyBwd2QuZ2V0cHd1aWQoKSIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CmluZGV4IDBlN2Q4NjYuLjQxMjg0OWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CkBAIC0xODYsNjMgKzE4Niw2IEBACiAgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfY3JlYXRlX2ZpbGUoZmlsZW5hbWUpOgotICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKGInZm9vJykKLQotICAgIGRlZiB0ZXN0X3NhbWVmaWxlKHNlbGYpOgotICAgICAgICB0ZXN0X2ZuID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lZmlsZSh0ZXN0X2ZuLCB0ZXN0X2ZuKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguc2FtZWZpbGUpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKAotICAgICAgICBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCi0gICAgICAgICJwb3NpeHBhdGguc2FtZWZpbGUgZG9lcyBub3Qgd29yayBvbiBsaW5rcyBpbiBXaW5kb3dzIikKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAic3ltbGluayIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHN5bWxpbmsgaW1wbGVtZW50YXRpb24iKQotICAgIGRlZiB0ZXN0X3NhbWVmaWxlX29uX2xpbmtzKHNlbGYpOgotICAgICAgICB0ZXN0X2ZuMSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCi0KLSAgICAgICAgb3Muc3ltbGluayh0ZXN0X2ZuMSwgdGVzdF9mbjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbjEsIHRlc3RfZm4yKSkKLSAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQotCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4yKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvc2l4cGF0aC5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQotCi0KLSAgICBkZWYgdGVzdF9zYW1lc3RhdChzZWxmKToKLSAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCi0gICAgICAgIHRlc3RfZm5zID0gW3Rlc3RfZm5dKjIKLSAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZXN0YXQoKnN0YXRzKSkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoCi0gICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKLSAgICAgICAgInBvc2l4cGF0aC5zYW1lc3RhdCBkb2VzIG5vdCB3b3JrIG9uIGxpbmtzIGluIFdpbmRvd3MiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJzeW1saW5rIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgc3ltbGluayBpbXBsZW1lbnRhdGlvbiIpCi0gICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fbGlua3Moc2VsZik6Ci0gICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMSkKLSAgICAgICAgdGVzdF9mbnMgPSAodGVzdF9mbjEsIHRlc3RfZm4yKQotICAgICAgICBvcy5zeW1saW5rKCp0ZXN0X2ZucykKLSAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZXN0YXQoKnN0YXRzKSkKLSAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQotCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4yKQotICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3NpeHBhdGguc2FtZXN0YXQoKnN0YXRzKSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5zYW1lc3RhdCkKLQogICAgIGRlZiB0ZXN0X2lzbW91bnQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzbW91bnQoIi8iKSwgVHJ1ZSkKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgpAQCAtNTk1LDExICs1MzgsNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZ2V0Y3dkYiA9IHJlYWxfZ2V0Y3dkYgogCi0gICAgZGVmIHRlc3Rfc2FtZW9wZW5maWxlKHNlbGYpOgotICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHdpdGggb3BlbihmbmFtZSwgIndiIikgYXMgYSwgb3BlbihmbmFtZSwgIndiIikgYXMgYjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZW9wZW5maWxlKGEuZmlsZW5vKCksIGIuZmlsZW5vKCkpKQotCiAKIGNsYXNzIFBvc2l4Q29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBwYXRobW9kdWxlID0gcG9zaXhwYXRoCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BwcmludC5weSBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CmluZGV4IGE4NTI5OGUuLjNkMzY0YzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CkBAIC0xLDMgKzEsNSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKwogaW1wb3J0IHBwcmludAogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CkBAIC01MzAsNiArNTMyLDU0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZGljdC5mcm9ta2V5cyhrZXlzLCAwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3slcjogMCwgJXI6IDB9JyAlIHR1cGxlKHNvcnRlZChrZXlzLCBrZXk9aWQpKSkKIAorICAgIGRlZiB0ZXN0X3N0cl93cmFwKHNlbGYpOgorICAgICAgICAjIHBwcmludCB0cmllcyB0byB3cmFwIHN0cmluZ3MgaW50ZWxsaWdlbnRseQorICAgICAgICBmb3ggPSAndGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciBhIGxhenkgZG9nJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGZveCwgd2lkdGg9MjApLCAiIiJcCisndGhlIHF1aWNrIGJyb3duICcKKydmb3gganVtcGVkIG92ZXIgJworJ2EgbGF6eSBkb2cnIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHsnYSc6IDEsICdiJzogZm94LCAnYyc6IDJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTI2KSwgIiIiXAoreydhJzogMSwKKyAnYic6ICd0aGUgcXVpY2sgYnJvd24gJworICAgICAgJ2ZveCBqdW1wZWQgb3ZlciAnCisgICAgICAnYSBsYXp5IGRvZycsCisgJ2MnOiAyfSIiIikKKyAgICAgICAgIyBXaXRoIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzCisgICAgICAgICMgLSBcbiBhbHdheXMgdHJpZ2dlcnMgYSBuZXcgbGluZSBpbiB0aGUgcHByaW50CisgICAgICAgICMgLSBcdCBhbmQgXG4gYXJlIGVzY2FwZWQKKyAgICAgICAgIyAtIG5vbi1BU0NJSSBpcyBhbGxvd2VkCisgICAgICAgICMgLSBhbiBhcG9zdHJvcGhlIGRvZXNuJ3QgZGlzcnVwdCB0aGUgcHByaW50CisgICAgICAgIHNwZWNpYWwgPSAiUG9ydG9ucyBkaXggYm9ucyBcIndoaXNreXNcIlxuw6AgbCdhdm9jYXQgZ291amF0XHQgcXVpIGZ1bWFpdCBhdSB6b28iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoc3BlY2lhbCwgd2lkdGg9MjApLCAiIiJcCisnUG9ydG9ucyBkaXggYm9ucyAnCisnIndoaXNreXMiXFxuJworIsOgIGwnYXZvY2F0ICIKKydnb3VqYXRcXHQgcXVpICcKKydmdW1haXQgYXUgem9vJyIiIikKKyAgICAgICAgIyBBbiB1bndyYXBwYWJsZSBzdHJpbmcgaXMgZm9ybWF0dGVkIGFzIGl0cyByZXByCisgICAgICAgIHVud3JhcHBhYmxlID0gIngiICogMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQodW53cmFwcGFibGUsIHdpZHRoPTgwKSwgcmVwcih1bndyYXBwYWJsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoJycpLCAiJyciKQorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHBwcmludCBpcyBhIHVzYWJsZSByZXByCisgICAgICAgIHNwZWNpYWwgKj0gMTAKKyAgICAgICAgZm9yIHdpZHRoIGluIHJhbmdlKDMsIDQwKToKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IHBwcmludC5wZm9ybWF0KHNwZWNpYWwsIHdpZHRoPXdpZHRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIoIiArIGZvcm1hdHRlZCArICIpIiksIHNwZWNpYWwpCisKKyAgICBkZWYgdGVzdF9jb21wYWN0KHNlbGYpOgorICAgICAgICBvID0gKFtsaXN0KHJhbmdlKGkgKiBpKSkgZm9yIGkgaW4gcmFuZ2UoNSldICsKKyAgICAgICAgICAgICBbbGlzdChyYW5nZShpKSkgZm9yIGkgaW4gcmFuZ2UoNildKQorICAgICAgICBleHBlY3RlZCA9ICIiIlwKK1tbXSwgWzBdLCBbMCwgMSwgMiwgM10sCisgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdLAorIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywKKyAgMTQsIDE1XSwKKyBbXSwgWzBdLCBbMCwgMV0sIFswLCAxLCAyXSwgWzAsIDEsIDIsIDNdLAorIFswLCAxLCAyLCAzLCA0XV0iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChvLCB3aWR0aD00OCwgY29tcGFjdD1UcnVlKSwgZXhwZWN0ZWQpCisKIAogY2xhc3MgRG90dGVkUHJldHR5UHJpbnRlcihwcHJpbnQuUHJldHR5UHJpbnRlcik6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkgYi9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CmluZGV4IDlkNmRiZWEuLjdlZWEzNDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcmludC5weQpAQCAtMSw2MiArMSw1NSBAQAotIiIiVGVzdCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcHJpbnQgZnVuY3Rpb24uCi0iIiIKLQotIyBJbiAyLjYsIHRoaXMgZ2l2ZXMgdXMgdGhlIGJlaGF2aW9yIHdlIHdhbnQuICBJbiAzLjAsIGl0IGhhcwotIyAgbm8gZnVuY3Rpb24sIGJ1dCBpdCBzdGlsbCBtdXN0IHBhcnNlIGNvcnJlY3RseS4KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KLQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKLXRyeToKLSAgICAjIDMueAotICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyAyLngKLSAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIE5vdERlZmluZWQgPSBvYmplY3QoKQogCiAjIEEgZGlzcGF0Y2ggdGFibGUgYWxsIDggY29tYmluYXRpb25zIG9mIHByb3ZpZGluZwotIyAgc2VwLCBlbmQsIGFuZCBmaWxlCisjIHNlcCwgZW5kLCBhbmQgZmlsZS4KICMgSSB1c2UgdGhpcyBtYWNoaW5lcnkgc28gdGhhdCBJJ20gbm90IGp1c3QgcGFzc2luZyBkZWZhdWx0Ci0jICB2YWx1ZXMgdG8gcHJpbnQsIEknbSBlaXRoZXIgcGFzc2luZyBvciBub3QgcGFzc2luZyBpbiB0aGUKLSMgIGFyZ3VtZW50cworIyB2YWx1ZXMgdG8gcHJpbnQsIEknbSBlaXRoZXIgcGFzc2luZyBvciBub3QgcGFzc2luZyBpbiB0aGUKKyMgYXJndW1lbnRzLgogZGlzcGF0Y2ggPSB7CiAgICAgKEZhbHNlLCBGYWxzZSwgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KCphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludCgqYXJncyksCiAgICAgKEZhbHNlLCBGYWxzZSwgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZmlsZT1maWxlLCAqYXJncyksCiAgICAgKEZhbHNlLCBUcnVlLCAgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCAqYXJncyksCiAgICAgKEZhbHNlLCBUcnVlLCAgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCiAgICAgKFRydWUsICBGYWxzZSwgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCAqYXJncyksCiAgICAgKFRydWUsICBGYWxzZSwgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZmlsZT1maWxlLCAqYXJncyksCiAgICAgKFRydWUsICBUcnVlLCAgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCAqYXJncyksCiAgICAgKFRydWUsICBUcnVlLCAgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCi0gICAgfQorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorfQorCiAKICMgQ2xhc3MgdXNlZCB0byB0ZXN0IF9fc3RyX18gYW5kIHByaW50CiBjbGFzcyBDbGFzc1dpdGhfX3N0cl9fOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKICAgICAgICAgc2VsZi54ID0geAorCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLngKIAotY2xhc3MgVGVzdFByaW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGFyZ3MsCi0gICAgICAgICAgICBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQsIGZpbGU9Tm90RGVmaW5lZCk6Ci0gICAgICAgICMgQ2FwdHVyZSBzeXMuc3Rkb3V0IGluIGEgU3RyaW5nSU8uICBDYWxsIHByaW50IHdpdGggYXJncywKLSAgICAgICAgIyAgYW5kIHdpdGggc2VwLCBlbmQsIGFuZCBmaWxlLCBpZiB0aGV5J3JlIGRlZmluZWQuICBSZXN1bHQKLSAgICAgICAgIyAgbXVzdCBtYXRjaCBleHBlY3RlZC4KIAotICAgICAgICAjIExvb2sgdXAgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiBpZiBzZXAsIGVuZCwgYW5kIGZpbGUKLSAgICAgICAgIyAgYXJlIGRlZmluZWQKK2NsYXNzIFRlc3RQcmludCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcHJpbnQgZnVuY3Rpb24uIiIiCisKKyAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGFyZ3MsCisgICAgICAgICAgICAgIHNlcD1Ob3REZWZpbmVkLCBlbmQ9Tm90RGVmaW5lZCwgZmlsZT1Ob3REZWZpbmVkKToKKyAgICAgICAgIyBDYXB0dXJlIHN5cy5zdGRvdXQgaW4gYSBTdHJpbmdJTy4gIENhbGwgcHJpbnQgd2l0aCBhcmdzLAorICAgICAgICAjIGFuZCB3aXRoIHNlcCwgZW5kLCBhbmQgZmlsZSwgaWYgdGhleSdyZSBkZWZpbmVkLiAgUmVzdWx0CisgICAgICAgICMgbXVzdCBtYXRjaCBleHBlY3RlZC4KKworICAgICAgICAjIExvb2sgdXAgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiBpZiBzZXAsIGVuZCwKKyAgICAgICAgIyBhbmQgZmlsZSBhcmUgZGVmaW5lZC4KICAgICAgICAgZm4gPSBkaXNwYXRjaFsoc2VwIGlzIG5vdCBOb3REZWZpbmVkLAogICAgICAgICAgICAgICAgICAgICAgICBlbmQgaXMgbm90IE5vdERlZmluZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgbm90IE5vdERlZmluZWQpXQpAQCAtNjksNyArNjIsNyBAQAogICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgogICAgICAgICBkZWYgeChleHBlY3RlZCwgYXJncywgc2VwPU5vdERlZmluZWQsIGVuZD1Ob3REZWZpbmVkKToKICAgICAgICAgICAgICMgUnVuIHRoZSB0ZXN0IDIgd2F5czogbm90IHVzaW5nIGZpbGUsIGFuZCB1c2luZwotICAgICAgICAgICAgIyAgZmlsZSBkaXJlY3RlZCB0byBhIFN0cmluZ0lPCisgICAgICAgICAgICAjIGZpbGUgZGlyZWN0ZWQgdG8gYSBTdHJpbmdJTy4KIAogICAgICAgICAgICAgc2VsZi5jaGVjayhleHBlY3RlZCwgYXJncywgc2VwPXNlcCwgZW5kPWVuZCkKIApAQCAtMTAxLDExICs5NCw2IEBACiAgICAgICAgIHgoJypcbicsIChDbGFzc1dpdGhfX3N0cl9fKCcqJyksKSkKICAgICAgICAgeCgnYWJjIDFcbicsIChDbGFzc1dpdGhfX3N0cl9fKCdhYmMnKSwgMSkpCiAKLSMgICAgICAgICMgMi54IHVuaWNvZGUgdGVzdHMKLSMgICAgICAgIHgodScxIDJcbicsICgnMScsIHUnMicpKQotIyAgICAgICAgeCh1J3VcMTIzNFxuJywgKHUndVwxMjM0JywpKQotIyAgICAgICAgeCh1JyAgYWJjIDFcbicsICgnICcsIENsYXNzV2l0aF9fc3RyX18odSdhYmMnKSwgMSkpCi0KICAgICAgICAgIyBlcnJvcnMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcmludCwgJycsIHNlcD0zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByaW50LCAnJywgZW5kPTMpCkBAIC0xMTMsMTIgKzEwMSwxNCBAQAogCiAgICAgZGVmIHRlc3RfcHJpbnRfZmx1c2goc2VsZik6CiAgICAgICAgICMgb3BlcmF0aW9uIG9mIHRoZSBmbHVzaCBmbGFnCi0gICAgICAgIGNsYXNzIGZpbGVsaWtlKCk6CisgICAgICAgIGNsYXNzIGZpbGVsaWtlOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdHRlbiA9ICcnCiAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaGVkID0gMAorCiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKICAgICAgICAgICAgICAgICBzZWxmLndyaXR0ZW4gKz0gc3RyCisKICAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgICAgICBzZWxmLmZsdXNoZWQgKz0gMQogCkBAIC0xMzAsMTUgKzEyMCwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmx1c2hlZCwgMikKIAogICAgICAgICAjIGVuc3VyZSBleGNlcHRpb25zIGZyb20gZmx1c2ggYXJlIHBhc3NlZCB0aHJvdWdoCi0gICAgICAgIGNsYXNzIG5vZmx1c2goKToKKyAgICAgICAgY2xhc3Mgbm9mbHVzaDoKICAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBzdHIpOgogICAgICAgICAgICAgICAgIHBhc3MKKwogICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHByaW50LCAxLCBmaWxlPW5vZmx1c2goKSwgZmx1c2g9VHJ1ZSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQcmludCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CmluZGV4IGNkN2VjNTguLjFmYzNjNDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKQEAgLTMsOSArMywxMSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHBzdGF0cwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKIGZyb20gZGlmZmxpYiBpbXBvcnQgdW5pZmllZF9kaWZmCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmsKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKIAogaW1wb3J0IHByb2ZpbGUKIGZyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMsIHRpbWVyCkBAIC0xNCw5ICsxNiwxMyBAQAogY2xhc3MgUHJvZmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgcHJvZmlsZXJjbGFzcyA9IHByb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gcHJvZmlsZQogICAgIG1ldGhvZG5hbWVzID0gWydwcmludF9zdGF0cycsICdwcmludF9jYWxsZXJzJywgJ3ByaW50X2NhbGxlZXMnXQogICAgIGV4cGVjdGVkX21heF9vdXRwdXQgPSAnOjAobWF4KScKIAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKwogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgogICAgICAgICByZXR1cm4gX1Byb2ZpbGVPdXRwdXQKIApAQCAtNzQsNiArODAsMTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5leHBlY3RlZF9tYXhfb3V0cHV0LCByZXMsCiAgICAgICAgICAgICAgICAgIlByb2ZpbGluZyB7MCFyfSBkaWRuJ3QgcmVwb3J0IG1heDpcbnsxfSIuZm9ybWF0KHN0bXQsIHJlcykpCiAKKyAgICBkZWYgdGVzdF9ydW4oc2VsZik6CisgICAgICAgIHdpdGggc2lsZW50KCk6CisgICAgICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bigiaW50KCcxJykiKQorICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bigiaW50KCcxJykiLCBmaWxlbmFtZT1URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhURVNURk4pKQorCisgICAgZGVmIHRlc3RfcnVuY3R4KHNlbGYpOgorICAgICAgICB3aXRoIHNpbGVudCgpOgorICAgICAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW5jdHgoInRlc3RmdW5jKCkiLCBnbG9iYWxzKCksIGxvY2FscygpKQorICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bmN0eCgidGVzdGZ1bmMoKSIsIGdsb2JhbHMoKSwgbG9jYWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9VEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKKwogCiBkZWYgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQoZmlsZW5hbWUsIGNscyk6CiAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yc3RyaXAoJ2NvJykKQEAgLTk1LDYgKzExNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICBtZXRob2QsIHJlc3VsdHNbaSsxXSkpCiAgICAgICAgIGYud3JpdGUoJ1xuaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjpcbiAgICBtYWluKClcbicpCiAKK0Bjb250ZXh0bWFuYWdlcgorZGVmIHNpbGVudCgpOgorICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICB0cnk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFByb2ZpbGVUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wdHkucHkgYi9MaWIvdGVzdC90ZXN0X3B0eS5weQppbmRleCAyOTI5N2Y4Li44OTE2ODYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B0eS5weQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICAgICAgICAgICAjI2RlYnVnKCJSZWFkaW5nIGZyb20gbWFzdGVyX2ZkIG5vdyB0aGF0IHRoZSBjaGlsZCBoYXMgZXhpdGVkIikKICAgICAgICAgICAgICMjdHJ5OgogICAgICAgICAgICAgIyMgICAgczEgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKLSAgICAgICAgICAgICMjZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgIyNleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMjICAgIHBhc3MKICAgICAgICAgICAgICMjZWxzZToKICAgICAgICAgICAgICMjICAgIHJhaXNlIFRlc3RGYWlsZWQoIlJlYWQgZnJvbSBtYXN0ZXJfZmQgZGlkIG5vdCByYWlzZSBleGNlcHRpb24iKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CmluZGV4IGYzYzFhNmEuLjE1NGMwOGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKQEAgLTEsNyArMSw5IEBACi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcwogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCkBAIC0xMyw3ICsxNSw3IEBACiAgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgIHNlbGYuc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdC5weScpCiAgICAgICAgIHNlbGYucHljX3BhdGggPSBzZWxmLnNvdXJjZV9wYXRoICsgJ2MnCi0gICAgICAgIHNlbGYuY2FjaGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoKQorICAgICAgICBzZWxmLmNhY2hlX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoKQogICAgICAgICBzZWxmLmN3ZF9kcml2ZSA9IG9zLnBhdGguc3BsaXRkcml2ZShvcy5nZXRjd2QoKSlbMF0KICAgICAgICAgIyBJbiB0aGVzZSB0ZXN0cyB3ZSBjb21wdXRlIHJlbGF0aXZlIHBhdGhzLiAgV2hlbiB1c2luZyBXaW5kb3dzLCB0aGUKICAgICAgICAgIyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHBhdGggYW5kIHRoZSAnc2VsZi5zb3VyY2VfcGF0aCcgbWlnaHQgYmUKQEAgLTM1LDYgKzM3LDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnB5Y19wYXRoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLmNhY2hlX3BhdGgpKQogCisgICAgZGVmIHRlc3RfZG9fbm90X292ZXJ3cml0ZV9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgIyBJbiB0aGUgZmFjZSBvZiBhIGNmaWxlIGFyZ3VtZW50IGJlaW5nIGEgc3ltbGluaywgYmFpbCBvdXQuCisgICAgICAgICMgSXNzdWUgIzE3MjIyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5weWNfcGF0aCArICcuYWN0dWFsJywgc2VsZi5weWNfcGF0aCkKKyAgICAgICAgZXhjZXB0IChOb3RJbXBsZW1lbnRlZEVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25lZWQgdG8gYmUgYWJsZSB0byBjcmVhdGUgYSBzeW1saW5rIGZvciBhIGZpbGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNsaW5rKHNlbGYucHljX3BhdGgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYucHljX3BhdGgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5kZXZudWxsKSBvciBvcy5wYXRoLmlzZmlsZShvcy5kZXZudWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBvcy5kZXZudWxsIGFuZCBmb3IgaXQgdG8gYmUgYSBub24tcmVndWxhciBmaWxlJykKKyAgICBkZWYgdGVzdF9kb19ub3Rfb3ZlcndyaXRlX25vbnJlZ3VsYXJfZmlsZXMoc2VsZik6CisgICAgICAgICMgSW4gdGhlIGZhY2Ugb2YgYSBjZmlsZSBhcmd1bWVudCBiZWluZyBhIG5vbi1yZWd1bGFyIGZpbGUsIGJhaWwgb3V0LgorICAgICAgICAjIElzc3VlICMxNzIyMgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgb3MuZGV2bnVsbCkKKwogICAgIGRlZiB0ZXN0X2NhY2hlX3BhdGgoc2VsZik6CiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKQEAgLTU0LDggKzc2LDIyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnB5Y19wYXRoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLmNhY2hlX3BhdGgpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUHlDb21waWxlVGVzdHMpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKG9zLCAnZ2V0ZXVpZCcpIGFuZCBvcy5nZXRldWlkKCkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICdub24tcm9vdCB1c2VyIHJlcXVpcmVkJykKKyAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywKKyAgICAgICAgICAgICAgICAgICAgICdjYW5ub3QgY29udHJvbCBkaXJlY3RvcnkgcGVybWlzc2lvbnMgb24gV2luZG93cycpCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uc19wcm9wYWdhdGUoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZXhjZXB0aW9ucyByYWlzZWQgdGhhbmtzIHRvIGlzc3VlcyB3aXRoIHdyaXRpbmcKKyAgICAgICAgIyBieXRlY29kZS4KKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTcyNDQKKyAgICAgICAgbW9kZSA9IG9zLnN0YXQoc2VsZi5kaXJlY3RvcnkpCisgICAgICAgIG9zLmNobW9kKHNlbGYuZGlyZWN0b3J5LCBzdGF0LlNfSVJFQUQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYucHljX3BhdGgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaG1vZChzZWxmLmRpcmVjdG9yeSwgbW9kZS5zdF9tb2RlKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5IGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKaW5kZXggZTgzOTg5ZS4uODhhZmY4OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdweWNsYnInKQogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdhc3QnKQogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdkb2N0ZXN0JywgaWdub3JlPSgiVGVzdFJlc3VsdHMiLCAiX1Nwb29mT3V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvY1Rlc3RDYXNlIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEb2NUZXN0Q2FzZSIsICdfRG9jVGVzdFN1aXRlJykpCiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2RpZmZsaWInLCBpZ25vcmU9KCJNYXRjaCIsKSkKIAogICAgIGRlZiB0ZXN0X2RlY29yYXRvcnMoc2VsZik6CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgY20oJ3JhbmRvbScsIGlnbm9yZT0oJ1JhbmRvbScsKSkgICMgZnJvbSBfcmFuZG9tIGltcG9ydCBSYW5kb20gYXMgQ29yZUdlbmVyYXRvcgogICAgICAgICBjbSgnY2dpJywgaWdub3JlPSgnbG9nJywpKSAgICAgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKICAgICAgICAgY20oJ3BpY2tsZScpCi0gICAgICAgIGNtKCdhaWZjJywgaWdub3JlPSgnb3BlbmZwJywpKSAgIyBzZXQgd2l0aCA9IGluIG1vZHVsZQorICAgICAgICBjbSgnYWlmYycsIGlnbm9yZT0oJ29wZW5mcCcsICdfYWlmY19wYXJhbXMnKSkgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKICAgICAgICAgY20oJ3NyZV9wYXJzZScsIGlnbm9yZT0oJ2R1bXAnLCkpICMgZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCiAgICAgICAgIGNtKCdwZGInKQogICAgICAgICBjbSgncHlkb2MnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weSBiL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKaW5kZXggY2RjYzcwNy4uMmQxMDFhYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CkBAIC0xMSw2ICsxMSw3IEBACiBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgdGVzdC5zdXBwb3J0CiBpbXBvcnQgdGltZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB4bWwuZXRyZWUKIGltcG9ydCB0ZXh0d3JhcApAQCAtMjksMTAgKzMwLDYgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKLSMgSnVzdCBpbiBjYXNlIHN5cy5tb2R1bGVzWyJ0ZXN0Il0gaGFzIHRoZSBvcHRpb25hbCBhdHRyaWJ1dGUgX19sb2FkZXJfXy4KLWlmIGhhc2F0dHIocHlkb2NfbW9kLCAiX19sb2FkZXJfXyIpOgotICAgIGRlbCBweWRvY19tb2QuX19sb2FkZXJfXwotCiBpZiB0ZXN0LnN1cHBvcnQuSEFWRV9ET0NTVFJJTkdTOgogICAgIGV4cGVjdGVkX2RhdGFfZG9jc3RyaW5ncyA9ICgKICAgICAgICAgJ2RpY3Rpb25hcnkgZm9yIGluc3RhbmNlIHZhcmlhYmxlcyAoaWYgZGVmaW5lZCknLApAQCAtMjEyLDYgKzIwOSw3NSBAQAogIyBvdXRwdXQgcGF0dGVybiBmb3IgbW9kdWxlIHdpdGggYmFkIGltcG9ydHMKIGJhZGltcG9ydF9wYXR0ZXJuID0gInByb2JsZW0gaW4gJXMgLSBJbXBvcnRFcnJvcjogTm8gbW9kdWxlIG5hbWVkICVyIgogCitleHBlY3RlZF9keW5hbWljYXR0cmlidXRlX3BhdHRlcm4gPSAiIiIKK0hlbHAgb24gY2xhc3MgREEgaW4gbW9kdWxlICVzOgorCitjbGFzcyBEQShidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBkZWZpbmVkIGhlcmU6CisgfFx4MjBceDIwCisgfCAgX19kaWN0X18lcworIHxceDIwXHgyMAorIHwgIF9fd2Vha3JlZl9fJXMKKyB8XHgyMFx4MjAKKyB8ICBoYW0KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhOgorIHxceDIwXHgyMAorIHwgIGhhbSA9ICdzcGFtJworIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMSA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzcyBpbiBtb2R1bGUgJXM6CisKK2NsYXNzIENsYXNzKGJ1aWx0aW5zLm9iamVjdCkKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGE6CisgfFx4MjBceDIwCisgfCAgTElGRSA9IDQyCisiIiIuc3RyaXAoKQorCitleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4yID0gIiIiCitIZWxwIG9uIGNsYXNzIENsYXNzMSBpbiBtb2R1bGUgJXM6CisKK2NsYXNzIENsYXNzMShidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhMToKKyB8XHgyMFx4MjAKKyB8ICBvbmUgPSAxCisiIiIuc3RyaXAoKQorCitleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4zID0gIiIiCitIZWxwIG9uIGNsYXNzIENsYXNzMiBpbiBtb2R1bGUgJXM6CisKK2NsYXNzIENsYXNzMihDbGFzczEpCisgfCAgTWV0aG9kIHJlc29sdXRpb24gb3JkZXI6CisgfCAgICAgIENsYXNzMgorIHwgICAgICBDbGFzczEKKyB8ICAgICAgYnVpbHRpbnMub2JqZWN0CisgfFx4MjBceDIwCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhMToKKyB8XHgyMFx4MjAKKyB8ICBvbmUgPSAxCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTM6CisgfFx4MjBceDIwCisgfCAgdGhyZWUgPSAzCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTI6CisgfFx4MjBceDIwCisgfCAgdHdvID0gMgorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfbWlzc2luZ2F0dHJpYnV0ZV9wYXR0ZXJuID0gIiIiCitIZWxwIG9uIGNsYXNzIEMgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDKGJ1aWx0aW5zLm9iamVjdCkKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZToKKyB8XHgyMFx4MjAKKyB8ICBoZXJlID0gJ3ByZXNlbnQhJworIiIiLnN0cmlwKCkKKwogZGVmIHJ1bl9weWRvYyhtb2R1bGVfbmFtZSwgKmFyZ3MsICoqZW52KToKICAgICAiIiIKICAgICBSdW5zIHB5ZG9jIG9uIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiBSZXR1cm5zIHRoZSBzdHJpcHBlZApAQCAtNDIxLDYgKzQ4NywzMSBAQAogICAgICAgICAgICAgc3lub3BzaXMgPSBweWRvYy5zeW5vcHNpcyhURVNURk4sIHt9KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeW5vcHNpcywgJ2xpbmUgMTogaFx4ZTknKQogCisgICAgZGVmIHRlc3Rfc3BsaXRkb2Nfd2l0aF9kZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgZXhhbXBsZV9zdHJpbmcgPSAiSSBBbSBBIERvY1xuXG5cbkhlcmUgaXMgbXkgZGVzY3JpcHRpb24iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlkb2Muc3BsaXRkb2MoZXhhbXBsZV9zdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnSSBBbSBBIERvYycsICdcbkhlcmUgaXMgbXkgZGVzY3JpcHRpb24nKSkKKworICAgIGRlZiB0ZXN0X2lzX29iamVjdF9vcl9tZXRob2Qoc2VsZik6CisgICAgICAgIGRvYyA9IHB5ZG9jLkRvYygpCisgICAgICAgICMgQm91bmQgTWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShweWRvYy5faXNfc29tZV9tZXRob2QoZG9jLmZhaWwpKQorICAgICAgICAjIE1ldGhvZCBEZXNjcmlwdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShweWRvYy5faXNfc29tZV9tZXRob2QoaW50Ll9fYWRkX18pKQorICAgICAgICAjIFN0cmluZworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHB5ZG9jLl9pc19zb21lX21ldGhvZCgiSSBhbSBub3QgYSBtZXRob2QiKSkKKworICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Vfd2hlbl9ub3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQudGVtcF9jd2QoKSBhcyB0ZXN0X2RpcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHlkb2MuaXNwYWNrYWdlKHRlc3RfZGlyKSkKKworICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Vfd2hlbl9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2N3ZCgpIGFzIHRlc3RfZGlyOgorICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RfZGlyLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgb3Blbihpbml0X3BhdGgsICd3JykuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB5ZG9jLmlzcGFja2FnZSh0ZXN0X2RpcikpCisgICAgICAgICAgICBvcy5yZW1vdmUoaW5pdF9wYXRoKQorCiAgICAgZGVmIHRlc3RfYWxsbWV0aG9kcyhzZWxmKToKICAgICAgICAgIyBpc3N1ZSAxNzQ3NjogYWxsbWV0aG9kcyB3YXMgbm8gbG9uZ2VyIHJldHVybmluZyB1bmJvdW5kIG1ldGhvZHMuCiAgICAgICAgICMgVGhpcyB0ZXN0IGlzIGEgYml0IGZyYWdpbGUgaW4gdGhlIGZhY2Ugb2YgY2hhbmdlcyB0byBvYmplY3QgYW5kIHR5cGUsCkBAIC02MTUsNiArNzA2LDEyNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChweWRvYy5IZWxwZXIua2V5d29yZHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZChrZXl3b3JkLmt3bGlzdCkpCiAKK2NsYXNzIFB5ZG9jV2l0aE1ldGFDbGFzc2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0dHJhY2UnKSBhbmQgc3lzLmdldHRyYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAndHJhY2UgZnVuY3Rpb24gaW50cm9kdWNlcyBfX2xvY2Fsc19fIHVuZXhwZWN0ZWRseScpCisgICAgZGVmIHRlc3RfRHluYW1pY0NsYXNzQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2hhbSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc3BhbScKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBEQShtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgaGFtKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZWdncycKKyAgICAgICAgZXhwZWN0ZWRfdGV4dF9kYXRhX2RvY3N0cmluZ3MgPSB0dXBsZSgnXG4gfCAgICAgICcgKyBzIGlmIHMgZWxzZSAnJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBleHBlY3RlZF9kYXRhX2RvY3N0cmluZ3MpCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihEQSkKKyAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX2R5bmFtaWNhdHRyaWJ1dGVfcGF0dGVybiAlICgKKyAgICAgICAgICAgICAgICAoX19uYW1lX18sKSArIGV4cGVjdGVkX3RleHRfZGF0YV9kb2NzdHJpbmdzWzoyXSkKKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0dHJhY2UnKSBhbmQgc3lzLmdldHRyYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAndHJhY2UgZnVuY3Rpb24gaW50cm9kdWNlcyBfX2xvY2Fsc19fIHVuZXhwZWN0ZWRseScpCisgICAgZGVmIHRlc3RfdmlydHVhbENsYXNzQXR0cmlidXRlV2l0aE9uZU1ldGEoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ0xJRkUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nTElGRSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cihuYW1lKQorICAgICAgICBjbGFzcyBDbGFzcyhtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihDbGFzcykKKyAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjEgJSBfX25hbWVfXworICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF92aXJ0dWFsQ2xhc3NBdHRyaWJ1dGVXaXRoVHdvTWV0YShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YTEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ29uZSddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSdvbmUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIE1ldGEyKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0d28nXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0ndHdvJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMyhNZXRhMSwgTWV0YTIpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdChzb3J0ZWQoc2V0KAorICAgICAgICAgICAgICAgICAgICBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ3RocmVlJ10gKworICAgICAgICAgICAgICAgICAgICBNZXRhMS5fX2Rpcl9fKGNscykgKyBNZXRhMi5fX2Rpcl9fKGNscykpKSkKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3RocmVlJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBDbGFzczEobWV0YWNsYXNzPU1ldGExKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQ2xhc3MyKENsYXNzMSwgbWV0YWNsYXNzPU1ldGEzKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmFpbDEgPSBmYWlsMiA9IEZhbHNlCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihDbGFzczEpCisgICAgICAgIGV4cGVjdGVkX3RleHQxID0gZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMiAlIF9fbmFtZV9fCisgICAgICAgIHJlc3VsdDEgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdDEgIT0gZXhwZWN0ZWRfdGV4dDE6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0MSwgcmVzdWx0MSkKKyAgICAgICAgICAgIGZhaWwxID0gVHJ1ZQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MyKQorICAgICAgICBleHBlY3RlZF90ZXh0MiA9IGV4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjMgJSBfX25hbWVfXworICAgICAgICByZXN1bHQyID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQyICE9IGV4cGVjdGVkX3RleHQyOgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dDIsIHJlc3VsdDIpCisgICAgICAgICAgICBmYWlsMiA9IFRydWUKKyAgICAgICAgaWYgZmFpbDEgb3IgZmFpbDI6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X2J1Z2d5X2RpcihzZWxmKToKKyAgICAgICAgY2xhc3MgTSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbmFtZV9fJywgJ21pc3NpbmcnLCAnaGVyZSddCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgaGVyZSA9ICdwcmVzZW50IScKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKEMpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9taXNzaW5nYXR0cmlidXRlX3BhdHRlcm4gJSBfX25hbWVfXworICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKwogQHJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRyeToKQEAgLTYyNCw2ICs4MzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5ZG9jU2VydmVyVGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1VybEhhbmRsZXJUZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RIZWxwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlkb2NXaXRoTWV0YUNsYXNzZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgIGZpbmFsbHk6CiAgICAgICAgIHJlYXBfY2hpbGRyZW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQppbmRleCBmYWNkZGIxLi40OWEzZjdiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQpAQCAtMSwxMCArMSwxMiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHdhcm5pbmdzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAogZnJvbSBtYXRoIGltcG9ydCBsb2csIGV4cCwgcGksIGZzdW0sIHNpbgogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTQ2LDYgKzQ4LDQ4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2VlZCwgMSwgMiwgMywgNCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlKHNlbGYuZ2VuKSwgW10pCiAKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLl91cmFuZG9tJykgIyBvcy51cmFuZG9tCisgICAgZGVmIHRlc3Rfc2VlZF93aGVuX3JhbmRvbW5lc3Nfc291cmNlX25vdF9mb3VuZChzZWxmLCB1cmFuZG9tX21vY2spOgorICAgICAgICAjIFJhbmRvbS5zZWVkKCkgdXNlcyB0aW1lLnRpbWUoKSB3aGVuIGFuIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMKKyAgICAgICAgIyByYW5kb21uZXNzIHNvdXJjZSBpcyBub3QgZm91bmQuIFRvIHRlc3QgdGhpcyBvbiBtYWNoaW5lcyB3ZXJlIGl0CisgICAgICAgICMgZXhpc3RzLCBydW4gdGhlIGFib3ZlIHRlc3QsIHRlc3Rfc2VlZGFyZ3MoKSwgYWdhaW4gYWZ0ZXIgbW9ja2luZworICAgICAgICAjIG9zLnVyYW5kb20oKSBzbyB0aGF0IGl0IHJhaXNlcyB0aGUgZXhjZXB0aW9uIGV4cGVjdGVkIHdoZW4gdGhlCisgICAgICAgICMgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgdXJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZWxmLnRlc3Rfc2VlZGFyZ3MoKQorCisgICAgZGVmIHRlc3Rfc2h1ZmZsZShzZWxmKToKKyAgICAgICAgc2h1ZmZsZSA9IHNlbGYuZ2VuLnNodWZmbGUKKyAgICAgICAgbHN0ID0gW10KKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbXSkKKyAgICAgICAgbHN0ID0gWzM3XQorICAgICAgICBzaHVmZmxlKGxzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFszN10pCisgICAgICAgIHNlcXMgPSBbbGlzdChyYW5nZShuKSkgZm9yIG4gaW4gcmFuZ2UoMTApXQorICAgICAgICBzaHVmZmxlZF9zZXFzID0gW2xpc3QocmFuZ2UobikpIGZvciBuIGluIHJhbmdlKDEwKV0KKyAgICAgICAgZm9yIHNodWZmbGVkX3NlcSBpbiBzaHVmZmxlZF9zZXFzOgorICAgICAgICAgICAgc2h1ZmZsZShzaHVmZmxlZF9zZXEpCisgICAgICAgIGZvciAoc2VxLCBzaHVmZmxlZF9zZXEpIGluIHppcChzZXFzLCBzaHVmZmxlZF9zZXFzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIGxlbihzaHVmZmxlZF9zZXEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VxKSwgc2V0KHNodWZmbGVkX3NlcSkpCisgICAgICAgICMgVGhlIGFib3ZlIHRlc3RzIGFsbCB3b3VsZCBwYXNzIGlmIHRoZSBzaHVmZmxlIHdhcyBhCisgICAgICAgICMgbm8tb3AuIFRoZSBmb2xsb3dpbmcgbm9uLWRldGVybWluaXN0aWMgdGVzdCBjb3ZlcnMgdGhhdC4gIEl0CisgICAgICAgICMgYXNzZXJ0cyB0aGF0IHRoZSBzaHVmZmxlZCBzZXF1ZW5jZSBvZiAxMDAwIGRpc3RpbmN0IGVsZW1lbnRzCisgICAgICAgICMgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgb25lLiBBbHRob3VnaCB0aGVyZSBpcworICAgICAgICAjIG1hdGhlbWF0aWNhbGx5IGEgbm9uLXplcm8gcHJvYmFiaWxpdHkgdGhhdCB0aGlzIGNvdWxkCisgICAgICAgICMgYWN0dWFsbHkgaGFwcGVuIGluIGEgZ2VudWluZWx5IHJhbmRvbSBzaHVmZmxlLCBpdCBpcworICAgICAgICAjIGNvbXBsZXRlbHkgbmVnbGlnaWJsZSwgZ2l2ZW4gdGhhdCB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlCisgICAgICAgICMgcGVybXV0YXRpb25zIG9mIDEwMDAgb2JqZWN0cyBpcyAxMDAwISAoZmFjdG9yaWFsIG9mIDEwMDApLAorICAgICAgICAjIHdoaWNoIGlzIGNvbnNpZGVyYWJseSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF0b21zIGluIHRoZQorICAgICAgICAjIHVuaXZlcnNlLi4uCisgICAgICAgIGxzdCA9IGxpc3QocmFuZ2UoMTAwMCkpCisgICAgICAgIHNodWZmbGVkX2xzdCA9IGxpc3QocmFuZ2UoMTAwMCkpCisgICAgICAgIHNodWZmbGUoc2h1ZmZsZWRfbHN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHN0ICE9IHNodWZmbGVkX2xzdCkKKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc3QgIT0gc2h1ZmZsZWRfbHN0KQorCiAgICAgZGVmIHRlc3RfY2hvaWNlKHNlbGYpOgogICAgICAgICBjaG9pY2UgPSBzZWxmLmdlbi5jaG9pY2UKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKQEAgLTY1LDYgKzEwOSw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih1bmlxKSwgaykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmlxIDw9IHNldChwb3B1bGF0aW9uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdlbi5zYW1wbGUoW10sIDApLCBbXSkgICMgdGVzdCBlZGdlIGNhc2UgTj09az09MAorICAgICAgICAjIEV4Y2VwdGlvbiByYWlzZWQgaWYgc2l6ZSBvZiBzYW1wbGUgZXhjZWVkcyB0aGF0IG9mIHBvcHVsYXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5nZW4uc2FtcGxlLCBwb3B1bGF0aW9uLCBOKzEpCiAKICAgICBkZWYgdGVzdF9zYW1wbGVfZGlzdHJpYnV0aW9uKHNlbGYpOgogICAgICAgICAjIEZvciB0aGUgZW50aXJlIGFsbG93YWJsZSByYW5nZSBvZiAwIDw9IGsgPD0gTiwgdmFsaWRhdGUgdGhhdApAQCAtMjA1LDYgKzI1MSwyNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocmFuZ2Uoc3RhcnQsc3RvcCkpLAogICAgICAgICAgICAgICAgIHNldChbc2VsZi5nZW4ucmFuZHJhbmdlKHN0YXJ0LHN0b3ApIGZvciBpIGluIHJhbmdlKDEwMCldKSkKIAorICAgIGRlZiB0ZXN0X3JhbmRyYW5nZV9ub251bml0X3N0ZXAoc2VsZik6CisgICAgICAgIHJpbnQgPSBzZWxmLmdlbi5yYW5kcmFuZ2UoMCwgMTAsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmludCwgKDAsIDIsIDQsIDYsIDgpKQorICAgICAgICByaW50ID0gc2VsZi5nZW4ucmFuZHJhbmdlKDAsIDIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmludCwgMCkKKworICAgIGRlZiB0ZXN0X3JhbmRyYW5nZV9lcnJvcnMoc2VsZik6CisgICAgICAgIHJhaXNlcyA9IHBhcnRpYWwoc2VsZi5hc3NlcnRSYWlzZXMsIFZhbHVlRXJyb3IsIHNlbGYuZ2VuLnJhbmRyYW5nZSkKKyAgICAgICAgIyBFbXB0eSByYW5nZQorICAgICAgICByYWlzZXMoMywgMykKKyAgICAgICAgcmFpc2VzKC03MjEpCisgICAgICAgIHJhaXNlcygwLCAxMDAsIC0xMikKKyAgICAgICAgIyBOb24taW50ZWdlciBzdGFydC9zdG9wCisgICAgICAgIHJhaXNlcygzLjE0MTU5KQorICAgICAgICByYWlzZXMoMCwgMi43MTgyOCkKKyAgICAgICAgIyBaZXJvIGFuZCBub24taW50ZWdlciBzdGVwCisgICAgICAgIHJhaXNlcygwLCA0MiwgMCkKKyAgICAgICAgcmFpc2VzKDAsIDQyLCAzLjE0MTU5KQorCiAgICAgZGVmIHRlc3RfZ2VucmFuZGJpdHMoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHJhbmdlcwogICAgICAgICBmb3IgayBpbiByYW5nZSgxLCAxMDAwKToKQEAgLTI3NCw2ICszMzksMTYgQEAKICAgICAgICAgIyBMYXN0IGVsZW1lbnQgcy9iIGFuIGludCBhbHNvCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgyLCAoMCwpKjYyNCsoJ2EnLCksIE5vbmUpKQogCisgICAgICAgICMgTGl0dGxlIHRyaWNrIHRvIG1ha2UgInR1cGxlKHggJSAoMioqMzIpIGZvciB4IGluIGludGVybmFsc3RhdGUpIgorICAgICAgICAjIHJhaXNlIFZhbHVlRXJyb3IuIEkgY2Fubm90IHRoaW5rIG9mIGEgc2ltcGxlIHdheSB0byBhY2hpZXZlIHRoaXMsIHNvCisgICAgICAgICMgSSBhbSBvcHRpbmcgZm9yIHVzaW5nIGEgZ2VuZXJhdG9yIGFzIHRoZSBtaWRkbGUgYXJndW1lbnQgb2Ygc2V0c3RhdGUKKyAgICAgICAgIyB3aGljaCBhdHRlbXB0cyB0byBjYXN0IGEgTmFOIHRvIGludGVnZXIuCisgICAgICAgIHN0YXRlX3ZhbHVlcyA9IHNlbGYuZ2VuLmdldHN0YXRlKClbMV0KKyAgICAgICAgc3RhdGVfdmFsdWVzID0gbGlzdChzdGF0ZV92YWx1ZXMpCisgICAgICAgIHN0YXRlX3ZhbHVlc1stMV0gPSBmbG9hdCgnbmFuJykKKyAgICAgICAgc3RhdGUgPSAoaW50KHgpIGZvciB4IGluIHN0YXRlX3ZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDIsIHN0YXRlLCBOb25lKSkKKwogICAgIGRlZiB0ZXN0X3JlZmVyZW5jZUltcGxlbWVudGF0aW9uKHNlbGYpOgogICAgICAgICAjIENvbXBhcmUgdGhlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIHJlc3VsdHMgZnJvbSB0aGUgb3JpZ2luYWwKICAgICAgICAgIyBjb2RlLiAgQ3JlYXRlIDIwMDAgNTMtYml0IHByZWNpc2lvbiByYW5kb20gZmxvYXRzLiAgQ29tcGFyZSBvbmx5CkBAIC00MTMsNiArNDg4LDM4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIG51bWJpdHMpICAgICAgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKmsgPiBuID4gMioqKGstMSkpICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KIAorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdyYW5kb20uUmFuZG9tLnJhbmRvbScpCisgICAgZGVmIHRlc3RfcmFuZGJlbG93X292ZXJyaWRlbl9yYW5kb20oc2VsZiwgcmFuZG9tX21vY2spOgorICAgICAgICAjIFJhbmRvbS5fcmFuZGJlbG93KCkgY2FuIG9ubHkgdXNlIHJhbmRvbSgpIHdoZW4gdGhlIGJ1aWx0LWluIG9uZQorICAgICAgICAjIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnV0IG5vIG5ldyBnZXRyYW5kYml0cygpIG1ldGhvZCB3YXMgc3VwcGxpZWQuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gcmFuZG9tLlN5c3RlbVJhbmRvbSgpLnJhbmRvbQorICAgICAgICBtYXhzaXplID0gMTw8cmFuZG9tLkJQRgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgIyBQb3B1bGF0aW9uIHJhbmdlIHRvbyBsYXJnZSAobiA+PSBtYXhzaXplKQorICAgICAgICAgICAgc2VsZi5nZW4uX3JhbmRiZWxvdyhtYXhzaXplKzEsIG1heHNpemUgPSBtYXhzaXplKQorICAgICAgICBzZWxmLmdlbi5fcmFuZGJlbG93KDU2NDAsIG1heHNpemUgPSBtYXhzaXplKQorCisgICAgICAgICMgVGhpcyBtaWdodCBiZSBnb2luZyB0b28gZmFyIHRvIHRlc3QgYSBzaW5nbGUgbGluZSwgYnV0IGJlY2F1c2Ugb2Ygb3VyCisgICAgICAgICMgbm9ibGUgYWltIG9mIGFjaGlldmluZyAxMDAlIHRlc3QgY292ZXJhZ2Ugd2UgbmVlZCB0byB3cml0ZSBhIGNhc2UgaW4KKyAgICAgICAgIyB3aGljaCB0aGUgZm9sbG93aW5nIGxpbmUgaW4gUmFuZG9tLl9yYW5kYmVsb3coKSBnZXRzIGV4ZWN1dGVkOgorICAgICAgICAjCisgICAgICAgICMgcmVtID0gbWF4c2l6ZSAlIG4KKyAgICAgICAgIyBsaW1pdCA9IChtYXhzaXplIC0gcmVtKSAvIG1heHNpemUKKyAgICAgICAgIyByID0gcmFuZG9tKCkKKyAgICAgICAgIyB3aGlsZSByID49IGxpbWl0OgorICAgICAgICAjICAgICByID0gcmFuZG9tKCkgIyA8PT0gKlRoaXMgbGluZSogPD09PAorICAgICAgICAjCisgICAgICAgICMgVGhlcmVmb3JlLCB0byBndWFyYW50ZWUgdGhhdCB0aGUgd2hpbGUgbG9vcCBpcyBleGVjdXRlZCBhdCBsZWFzdAorICAgICAgICAjIG9uY2UsIHdlIG5lZWQgdG8gbW9jayByYW5kb20oKSBzbyB0aGF0IGl0IHJldHVybnMgYSBudW1iZXIgZ3JlYXRlcgorICAgICAgICAjIHRoYW4gJ2xpbWl0JyB0aGUgZmlyc3QgdGltZSBpdCBnZXRzIGNhbGxlZC4KKworICAgICAgICBuID0gNDIKKyAgICAgICAgZXBzaWxvbiA9IDAuMDEKKyAgICAgICAgbGltaXQgPSAobWF4c2l6ZSAtIChtYXhzaXplICUgbikpIC8gbWF4c2l6ZQorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFtsaW1pdCArIGVwc2lsb24sIGxpbWl0IC0gZXBzaWxvbl0KKyAgICAgICAgc2VsZi5nZW4uX3JhbmRiZWxvdyhuLCBtYXhzaXplID0gbWF4c2l6ZSkKKwogICAgIGRlZiB0ZXN0X3JhbmRyYW5nZV9idWdfMTU5MDg5MShzZWxmKToKICAgICAgICAgc3RhcnQgPSAxMDAwMDAwMDAwMDAwCiAgICAgICAgIHN0b3AgPSAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwCkBAIC01MzAsNiArNjM3LDEwNiBAQAogICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTUpCiAgICAgICAgIHJhbmRvbS52b25taXNlc3ZhcmlhdGUoMCwgMWUxMDApCiAKKyAgICBkZWYgdGVzdF9nYW1tYXZhcmlhdGVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIEJvdGggYWxwaGEgYW5kIGJldGEgbXVzdCBiZSA+IDAuMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByYW5kb20uZ2FtbWF2YXJpYXRlLCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgMCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgMSwgLTMpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLlJhbmRvbS5yYW5kb20nKQorICAgIGRlZiB0ZXN0X2dhbW1hdmFyaWF0ZV9mdWxsX2NvZGVfY292ZXJhZ2Uoc2VsZiwgcmFuZG9tX21vY2spOgorICAgICAgICAjIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgcG9zc2liaWxpdGllcyBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIG9mIHJhbmRvbS5nYW1tYXZhcmlhdGUoKSwgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiAnYWxwaGEnLiBXaGF0IHdlCisgICAgICAgICMgYXJlIGdvaW5nIHRvIGRvIGhlcmUgaXMgdG8gZml4IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgcmFuZG9tKCkgdG8KKyAgICAgICAgIyBnZW5lcmF0ZSB0ZXN0IGNhc2VzIHRoYXQgcHJvdmlkZSAxMDAlIGxpbmUgY292ZXJhZ2Ugb2YgdGhlIG1ldGhvZC4KKworICAgICAgICAjICMxOiBhbHBoYSA+IDEuMDogd2Ugd2FudCB0aGUgZmlyc3QgcmFuZG9tIG51bWJlciB0byBiZSBvdXRzaWRlIHRoZQorICAgICAgICAjIFsxZS03LCAuOTk5OTk5OV0gcmFuZ2UsIHNvIHRoYXQgdGhlIGNvbnRpbnVlIHN0YXRlbWVudCBleGVjdXRlcworICAgICAgICAjIG9uY2UuIFRoZSB2YWx1ZXMgb2YgdTEgYW5kIHUyIHdpbGwgYmUgMC41IGFuZCAwLjMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbMWUtOCwgMC41LCAwLjNdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZSgxLjEsIDIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXR1cm5lZF92YWx1ZSwgMi41MykKKworICAgICAgICAjICMyOiBhbHBoYSA9PSAxOiBmaXJzdCByYW5kb20gbnVtYmVyIGxlc3MgdGhhbiAxZS03IHRvIHRoYXQgdGhlIGJvZHkKKyAgICAgICAgIyBvZiB0aGUgd2hpbGUgbG9vcCBleGVjdXRlcyBvbmNlLiBUaGVuIHJhbmRvbS5yYW5kb20oKSByZXR1cm5zIDAuNDUsCisgICAgICAgICMgd2hpY2ggY2F1c2VzIHdoaWxlIHRvIHN0b3AgbG9vcGluZyBhbmQgdGhlIGFsZ29yaXRobSB0byB0ZXJtaW5hdGUuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gWzFlLTgsIDAuNDVdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZSgxLjAsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDIuNTA3MzE0MTY2MTIzODAzKQorCisgICAgICAgICMgIzM6IDAgPCBhbHBoYSA8IDEuIFRoaXMgaXMgdGhlIG1vc3QgY29tcGxleCByZWdpb24gb2YgY29kZSB0byBjb3ZlciwKKyAgICAgICAgIyBhcyB0aGVyZSBhcmUgbXVsdGlwbGUgaWYtZWxzZSBzdGF0ZW1lbnRzLiBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGUKKyAgICAgICAgIyBzb3VyY2UgY29kZSwgYW5kIGRldGVybWluZSB0aGUgdmFsdWVzIHRoYXQgd2UgbmVlZCBhY2NvcmRpbmdseToKKyAgICAgICAgIworICAgICAgICAjIHdoaWxlIDE6CisgICAgICAgICMgICAgIHUgPSByYW5kb20oKQorICAgICAgICAjICAgICBiID0gKF9lICsgYWxwaGEpL19lCisgICAgICAgICMgICAgIHAgPSBiKnUKKyAgICAgICAgIyAgICAgaWYgcCA8PSAxLjA6ICMgPD09PSAoQSkKKyAgICAgICAgIyAgICAgICAgIHggPSBwICoqICgxLjAvYWxwaGEpCisgICAgICAgICMgICAgIGVsc2U6ICMgPD09PSAoQikKKyAgICAgICAgIyAgICAgICAgIHggPSAtX2xvZygoYi1wKS9hbHBoYSkKKyAgICAgICAgIyAgICAgdTEgPSByYW5kb20oKQorICAgICAgICAjICAgICBpZiBwID4gMS4wOiAjIDw9PT0gKEMpCisgICAgICAgICMgICAgICAgICBpZiB1MSA8PSB4ICoqIChhbHBoYSAtIDEuMCk6ICMgPD09PSAoRCkKKyAgICAgICAgIyAgICAgICAgICAgICBicmVhaworICAgICAgICAjICAgICBlbGlmIHUxIDw9IF9leHAoLXgpOiAjIDw9PT0gKEUpCisgICAgICAgICMgICAgICAgICBicmVhaworICAgICAgICAjIHJldHVybiB4ICogYmV0YQorICAgICAgICAjCisgICAgICAgICMgRmlyc3QsIHdlIHdhbnQgKEEpIHRvIGJlIFRydWUuIEZvciB0aGF0IHdlIG5lZWQgdGhhdDoKKyAgICAgICAgIyBiKnJhbmRvbSgpIDw9IDEuMAorICAgICAgICAjIHIxID0gcmFuZG9tKCkgPD0gMS4wIC8gYgorICAgICAgICAjCisgICAgICAgICMgV2Ugbm93IGdldCB0byB0aGUgc2Vjb25kIGlmLWVsc2UgYnJhbmNoLCBhbmQgaGVyZSwgc2luY2UgcCA8PSAxLjAsCisgICAgICAgICMgKEMpIGlzIEZhbHNlIGFuZCB3ZSB0YWtlIHRoZSBlbGlmIGJyYW5jaCwgKEUpLiBGb3IgaXQgdG8gYmUgVHJ1ZSwKKyAgICAgICAgIyBzbyB0aGF0IHRoZSBicmVhayBpcyBleGVjdXRlZCwgd2UgbmVlZCB0aGF0OgorICAgICAgICAjIHIyID0gcmFuZG9tKCkgPD0gX2V4cCgteCkKKyAgICAgICAgIyByMiA8PSBfZXhwKC0ocCAqKiAoMS4wL2FscGhhKSkpCisgICAgICAgICMgcjIgPD0gX2V4cCgtKChiKnIxKSAqKiAoMS4wL2FscGhhKSkpCisKKyAgICAgICAgX2UgPSByYW5kb20uX2UKKyAgICAgICAgX2V4cCA9IHJhbmRvbS5fZXhwCisgICAgICAgIF9sb2cgPSByYW5kb20uX2xvZworICAgICAgICBhbHBoYSA9IDAuMzUKKyAgICAgICAgYmV0YSA9IDEuNDUKKyAgICAgICAgYiA9IChfZSArIGFscGhhKS9fZQorICAgICAgICBlcHNpbG9uID0gMC4wMQorCisgICAgICAgIHIxID0gMC44ODU5Mjk2NDQxNTY2ICMgMS4wIC8gYgorICAgICAgICByMiA9IDAuMzY3ODc5NDQxMTcxNCAjIF9leHAoLSgoYipyMSkgKiogKDEuMC9hbHBoYSkpKQorCisgICAgICAgICMgVGhlc2UgZm91ciAicmFuZG9tIiB2YWx1ZXMgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgdHJhY2U6CisgICAgICAgICMgKEEpIFRydWUsIChFKSBGYWxzZSAtLT4gW25leHQgaXRlcmF0aW9uIG9mIHdoaWxlXQorICAgICAgICAjIChBKSBUcnVlLCAoRSkgVHJ1ZSAtLT4gW3doaWxlIGxvb3AgYnJlYWtzXQorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFtyMSwgcjIgKyBlcHNpbG9uLCByMSwgcjJdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZShhbHBoYSwgYmV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXR1cm5lZF92YWx1ZSwgMS40NDk5OTk5OTk5OTk3NTQ0KQorCisgICAgICAgICMgTGV0J3Mgbm93IG1ha2UgKEEpIGJlIEZhbHNlLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB3aGVuIHdlIGdldCB0byB0aGUKKyAgICAgICAgIyBzZWNvbmQgaWYtZWxzZSAncCcgaXMgZ3JlYXRlciB0aGFuIDEsIHNvIChDKSBldmFsdWF0ZXMgdG8gVHJ1ZS4gV2UKKyAgICAgICAgIyBub3cgZW5jb3VudGVyIGEgc2Vjb25kIGlmIHN0YXRlbWVudCwgKEQpLCB3aGljaCBpbiBvcmRlciB0byBleGVjdXRlCisgICAgICAgICMgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOgorICAgICAgICAjIHIyIDw9IHggKiogKGFscGhhIC0gMS4wKQorICAgICAgICAjIHIyIDw9ICgtX2xvZygoYi1wKS9hbHBoYSkpICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgIyByMiA8PSAoLV9sb2coKGItKGIqcjEpKS9hbHBoYSkpICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgcjEgPSAwLjg5NTkyOTY0NDE1NjYgIyAoMS4wIC8gYikgKyBlcHNpbG9uIC0tIHNvIHRoYXQgKEEpIGlzIEZhbHNlCisgICAgICAgIHIyID0gMC45NDQ1NDAwNDA4ODk4MTQxCisKKyAgICAgICAgIyBBbmQgdGhlc2UgZm91ciB2YWx1ZXMgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgdHJhY2U6CisgICAgICAgICMgKEIpIGFuZCAoQykgVHJ1ZSwgKEQpIEZhbHNlIC0tPiBbbmV4dCBpdGVyYXRpb24gb2Ygd2hpbGVdCisgICAgICAgICMgKEIpIGFuZCAoQykgVHJ1ZSwgKEQpIFRydWUgW3doaWxlIGxvb3AgYnJlYWtzXQorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFtyMSwgcjIgKyBlcHNpbG9uLCByMSwgcjJdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZShhbHBoYSwgYmV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXR1cm5lZF92YWx1ZSwgMS41ODMwMzQ5NTYxNzYwNzgxKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20uZ2FtbWF2YXJpYXRlJykKKyAgICBkZWYgdGVzdF9iZXRhdmFyaWF0ZV9yZXR1cm5femVybyhzZWxmLCBnYW1tYXZhcmlhdGVfbW9jayk6CisgICAgICAgICMgYmV0YXZhcmlhdGUoKSByZXR1cm5zIHplcm8gd2hlbiB0aGUgR2FtbWEgZGlzdHJpYnV0aW9uCisgICAgICAgICMgdGhhdCBpdCB1c2VzIGludGVybmFsbHkgcmV0dXJucyB0aGlzIHNhbWUgdmFsdWUuCisgICAgICAgIGdhbW1hdmFyaWF0ZV9tb2NrLnJldHVybl92YWx1ZSA9IDAuMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMCwgcmFuZG9tLmJldGF2YXJpYXRlKDIuNzE4MjgsIDMuMTQxNTkpKQogCiBjbGFzcyBUZXN0TW9kdWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdE1hZ2ljQ29uc3RhbnRzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yYW5nZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKaW5kZXggMmExM2JmZS4uZjA4ODM4NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgSU4oKSkKIAogICAgICAgICAjIFRlc3QgdXNlIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzIGluIHNsaWNlIGluZGljZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgxMClbOkkoNSldKSwgbGlzdChyYW5nZSg1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMTApWzpJKDUpXSwgcmFuZ2UoNSkpCiAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgogICAgICAgICAgICAgcmFuZ2UoMCwgMTApWzpJWCgpXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmUucHkKaW5kZXggZjA5MzgxMi4uOGQ2M2ZhYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CkBAIC0zLDEwICszLDEyIEBACiBpbXBvcnQgaW8KIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgoraW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX2NvbnN0YW50cwogaW1wb3J0IHN5cwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKICMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYwpAQCAtMTUsMTAgKzE3LDI2IEBACiAjIHdoYXQgeW91J3JlIGRvaW5nLiBTb21lIG9mIHRoZXNlIHRlc3RzIHdlcmUgY2FyZWZ1bGx5IG1vZGVsZWQgdG8KICMgY292ZXIgbW9zdCBvZiB0aGUgY29kZS4KIAotaW1wb3J0IHVuaXR0ZXN0CitjbGFzcyBTKHN0cik6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIFMoc3VwZXIoKS5fX2dldGl0ZW1fXyhpbmRleCkpCisKK2NsYXNzIEIoYnl0ZXMpOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBCKHN1cGVyKCkuX19nZXRpdGVtX18oaW5kZXgpKQogCiBjbGFzcyBSZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0LCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3QsIG1zZykKKyAgICAgICAgZGVmIHJlY3Vyc2UoYWN0dWFsLCBleHBlY3QpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgIGZvciB4LCB5IGluIHppcChhY3R1YWwsIGV4cGVjdCk6CisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2UoeCwgeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGFjdHVhbCksIHR5cGUoZXhwZWN0KSwgbXNnKQorICAgICAgICByZWN1cnNlKGFjdHVhbCwgZXhwZWN0KQorCiAgICAgZGVmIHRlc3Rfa2VlcF9idWZmZXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1ZyAxNDIxMgogICAgICAgICBiID0gYnl0ZWFycmF5KGIneCcpCkBAIC01Myw2ICs3MSwxNSBAQAogICAgICAgICByZXR1cm4gc3RyKGludF92YWx1ZSArIDEpCiAKICAgICBkZWYgdGVzdF9iYXNpY19yZV9zdWIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCAnYScsICd4eXonKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCBTKCdhJyksIFMoJ3h5eicpKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoYid5JywgYidhJywgYid4eXonKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIEIoYidhJyksIEIoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBieXRlYXJyYXkoYidhJyksIGJ5dGVhcnJheShiJ3h5eicpKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIG1lbW9yeXZpZXcoYidhJyksIG1lbW9yeXZpZXcoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgZm9yIHkgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Yih5LCAnYScsICd4JXN6JyAlIHkpLCAneGF6JykKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigiKD9pKWIrIiwgIngiLCAiYmJiYiBCQkJCIiksICd4IHgnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihyJ1xkKycsIHNlbGYuYnVtcF9udW0sICcwOC4yIC0yIDIzeDk5eScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICc5LjMgLTMgMjR4MTAweScpCkBAIC0yMTAsMTAgKzIzNywyOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIqIiwgIngiLCAieHl6IiwgMiksICgneHh4eXonLCAyKSkKIAogICAgIGRlZiB0ZXN0X3JlX3NwbGl0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6IiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJycsICdjJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIjoqIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gIjphOmI6OmMiLCBTKCI6YTpiOjpjIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoIjoiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnYScsICdiJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiOmE6Yjo6YyIsIEIoYiI6YTpiOjpjIiksIGJ5dGVhcnJheShiIjphOmI6OmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiIjphOmI6OmMiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoYiI6Iiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYicnLCBiJ2EnLCBiJ2InLCBiJycsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiOioiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJycsIGInYScsIGInYicsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYic6JywgYidhJywgYic6JywgYidiJywgYic6OicsIGInYyddKQorICAgICAgICBmb3IgYSwgYiwgYyBpbiAoIlx4ZTBceGRmXHhlNyIsICJcdTA0MzBcdTA0MzFcdTA0MzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlxVMDAwMWQ0OWNcVTAwMDFkNDllXFUwMDAxZDRiNSIpOgorICAgICAgICAgICAgc3RyaW5nID0gIjolczolczo6JXMiICUgKGEsIGIsIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwgWycnLCBhLCBiLCAnJywgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksIFsnJywgYSwgYiwgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsIGEsICc6JywgYiwgJzo6JywgY10pCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKD86OiopIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDopKiIsICI6YTpiOjpjIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6JywgJ2MnXSkKQEAgLTIzNSwyMiArMjgxLDUzIEBACiAKICAgICBkZWYgdGVzdF9yZV9maW5kYWxsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIjorIiwgImFiYyIpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOispIiwgImE6Yjo6Yzo6OmQiKSwgWyI6IiwgIjo6IiwgIjo6OiJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIig6KSg6KikiLCAiYTpiOjpjOjo6ZCIpLCBbKCI6IiwgIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI6IiwgIjoiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6OiIpXSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAiYTpiOjpjOjo6ZCIsIFMoImE6Yjo6Yzo6OmQiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCI6KyIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyI6IiwgIjo6IiwgIjo6OiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCIoOikoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCI6IiwgIiIpLCAoIjoiLCAiOiIpLCAoIjoiLCAiOjoiKV0pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiYTpiOjpjOjo6ZCIsIEIoYiJhOmI6OmM6OjpkIiksIGJ5dGVhcnJheShiImE6Yjo6Yzo6OmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiImE6Yjo6Yzo6OmQiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIjorIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYiI6IiwgYiI6OiIsIGIiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiIjoiLCBiIjo6IiwgYiI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKGIiKDopKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhiIjoiLCBiIiIpLCAoYiI6IiwgYiI6IiksIChiIjoiLCBiIjo6IildKQorICAgICAgICBmb3IgeCBpbiAoIlx4ZTAiLCAiXHUwNDMwIiwgIlxVMDAwMWQ0OWMiKToKKyAgICAgICAgICAgIHh4ID0geCAqIDIKKyAgICAgICAgICAgIHh4eCA9IHggKiAzCisgICAgICAgICAgICBzdHJpbmcgPSAiYSVzYiVzYyVzZCIgJSAoeCwgeHgsIHh4eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiJXMrIiAlIHgsIHN0cmluZyksIFt4LCB4eCwgeHh4XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKCVzKykiICUgeCwgc3RyaW5nKSwgW3gsIHh4LCB4eHhdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoJXMpKCVzKikiICUgKHgsIHgpLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHgsICIiKSwgKHgsIHgpLCAoeCwgeHgpXSkKIAogICAgIGRlZiB0ZXN0X2J1Z18xMTc2MTIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbChyIihhfChiKSkiLCAiYWJhIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWygiYSIsICIiKSwoImIiLCAiYiIpLCgiYSIsICIiKV0pCiAKICAgICBkZWYgdGVzdF9yZV9tYXRjaChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsICdhJykuZ3JvdXBzKCksICgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoYSknLCAnYScpLmdyb3VwcygpLCAoJ2EnLCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDApLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEpLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEsIDEpLCAoJ2EnLCAnYScpKQorICAgICAgICBmb3Igc3RyaW5nIGluICdhJywgUygnYScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cHMoKSwgKCdhJywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiBiJ2EnLCBCKGInYScpLCBieXRlYXJyYXkoYidhJyksIG1lbW9yeXZpZXcoYidhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXBzKCksIChiJ2EnLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgYidhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwKDEpLCBiJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXAoMSwgMSksIChiJ2EnLCBiJ2EnKSkKKyAgICAgICAgZm9yIGEgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGEsIGEpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXBzKCksIChhLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwKDApLCBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKCVzKScgJSBhLCBhKS5ncm91cCgxKSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXAoMSwgMSksIChhLCBhKSkKIAogICAgICAgICBwYXQgPSByZS5jb21waWxlKCcoKGEpfChiKSkoYyk/JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2EnKS5ncm91cHMoKSwgKCdhJywgJ2EnLCBOb25lLCBOb25lKSkKQEAgLTEwNTMsNiArMTEzMCwyOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZShwYXR0ZXJuLCByZS5TKS5maW5kYWxsKGIneHl6JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYid4eXonXSwgbXNnPXBhdHRlcm4pCiAKKyAgICBkZWYgdGVzdF9tYXRjaF9yZXByKHNlbGYpOgorICAgICAgICBmb3Igc3RyaW5nIGluICdbYWJyYWNhZGFicmFdJywgUygnW2FicmFjYWRhYnJhXScpOgorICAgICAgICAgICAgbSA9IHJlLnNlYXJjaChyJyguKykoLio/KVwxJywgc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhbj0oMSwgMTIpLCBtYXRjaD0nYWJyYWNhZGFicmEnPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShtKS5fX21vZHVsZV9fLCB0eXBlKG0pLl9fcXVhbG5hbWVfXykpCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGInW2FicmFjYWRhYnJhXScsIEIoYidbYWJyYWNhZGFicmFdJyksCisgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiJ1thYnJhY2FkYWJyYV0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiJ1thYnJhY2FkYWJyYV0nKSk6CisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKHJiJyguKykoLio/KVwxJywgc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhbj0oMSwgMTIpLCBtYXRjaD1iJ2FicmFjYWRhYnJhJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUobSkuX19tb2R1bGVfXywgdHlwZShtKS5fX3F1YWxuYW1lX18pKQorCisgICAgICAgIGZpcnN0LCBzZWNvbmQgPSBsaXN0KHJlLmZpbmRpdGVyKCIoYWEpfChiYikiLCAiYWEgYmIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZpcnN0KSwgIjwlcy4lcyBvYmplY3Q7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhbj0oMCwgMiksIG1hdGNoPSdhYSc+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUoc2Vjb25kKS5fX21vZHVsZV9fLCB0eXBlKGZpcnN0KS5fX3F1YWxuYW1lX18pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2Vjb25kKSwgIjwlcy4lcyBvYmplY3Q7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhbj0oMywgNSksIG1hdGNoPSdiYic+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUoc2Vjb25kKS5fX21vZHVsZV9fLCB0eXBlKHNlY29uZCkuX19xdWFsbmFtZV9fKSkKKwogCiAgICAgZGVmIHRlc3RfYnVnXzI1Mzcoc2VsZik6CiAgICAgICAgICMgaXNzdWUgMjUzNzogZW1wdHkgc3VibWF0Y2hlcwpAQCAtMTA2NCw2ICsxMTYzLDIyIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdyb3VwKDEpLCAiIikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoMiksICJ5IikKIAorCitjbGFzcyBJbXBsZW1lbnRhdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgcmUgbW9kdWxlLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfb3ZlcmxhcF90YWJsZShzZWxmKToKKyAgICAgICAgZiA9IHNyZV9jb21waWxlLl9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiIiksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImEiKSwgWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiY2QiKSwgWzAsIDAsIDAsIDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFhYWEiKSwgWzAsIDEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiYWJiYSIpLCBbMCwgMCwgMSwgMiwgMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiYWJjYWJkYWMiKSwgWzAsIDAsIDAsIDEsIDIsIDAsIDEsIDBdKQorCisKIGRlZiBydW5fcmVfdGVzdHMoKToKICAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKICAgICBpZiB2ZXJib3NlOgpAQCAtMTE5Myw3ICsxMzA4LDcgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFJlVGVzdHMpCisgICAgcnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogICAgIHJ1bl9yZV90ZXN0cygpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9yZWdydGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzk4YTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9yZWdydGVzdC5weQpAQCAtMCwwICsxLDI3NSBAQAorIiIiCitUZXN0cyBvZiByZWdydGVzdC5weS4KKyIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBmYXVsdGhhbmRsZXIKK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgcmVncnRlc3QsIHN1cHBvcnQKKworY2xhc3MgUGFyc2VBcmdzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCByZWdydGVzdCdzIGFyZ3VtZW50IHBhcnNpbmcuIiIiCisKKyAgICBkZWYgY2hlY2tFcnJvcihzZWxmLCBhcmdzLCBtc2cpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyLCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgIHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obXNnLCBlcnIuZ2V0dmFsdWUoKSkKKworICAgIGRlZiB0ZXN0X2hlbHAoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1oJywgJy0taGVscCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0LCBcCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICAgICAgcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUnVuIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLicsIG91dC5nZXR2YWx1ZSgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihmYXVsdGhhbmRsZXIsICdkdW1wX3RyYWNlYmFja19sYXRlcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIoKSByZXF1aXJlZCIpCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdGltZW91dCcsICc0LjInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy50aW1lb3V0LCA0LjIpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tdGltZW91dCddLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10aW1lb3V0JywgJ2ZvbyddLCAnaW52YWxpZCBmbG9hdCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS13YWl0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy53YWl0KQorCisgICAgZGVmIHRlc3Rfc2xhdmVhcmdzKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1zbGF2ZWFyZ3MnLCAnW1tdLCB7fV0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zbGF2ZWFyZ3MsICdbW10sIHt9XScpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tc2xhdmVhcmdzJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3Rfc3RhcnQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1TJywgJy0tc3RhcnQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZm9vJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zdGFydCwgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctdiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDEpCisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctdnZ2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMykKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdmVyYm9zZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDEpCisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXZlcmJvc2UnXSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMykKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZTIoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy13JywgJy0tdmVyYm9zZTInOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMudmVyYm9zZTIpCisKKyAgICBkZWYgdGVzdF92ZXJib3NlMyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVcnLCAnLS12ZXJib3NlMyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy52ZXJib3NlMykKKworICAgIGRlZiB0ZXN0X3F1aWV0KHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctcScsICctLXF1aWV0JzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnF1aWV0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKworICAgIGRlZiB0ZXN0X3Nsb3coc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1vJywgJy0tc2xvdyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5wcmludF9zbG93KQorCisgICAgZGVmIHRlc3RfaGVhZGVyKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1oZWFkZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmhlYWRlcikKKworICAgIGRlZiB0ZXN0X3JhbmRvbWl6ZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXInLCAnLS1yYW5kb21pemUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucmFuZG9taXplKQorCisgICAgZGVmIHRlc3RfcmFuZHNlZWQoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXJhbmRzZWVkJywgJzEyMzQ1J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMucmFuZG9tX3NlZWQsIDEyMzQ1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucmFuZG9taXplKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXJhbmRzZWVkJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXJhbmRzZWVkJywgJ2ZvbyddLCAnaW52YWxpZCBpbnQgdmFsdWUnKQorCisgICAgZGVmIHRlc3RfZnJvbWZpbGUoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1mJywgJy0tZnJvbWZpbGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZm9vJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5mcm9tZmlsZSwgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbycsICctcyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfZXhjbHVkZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXgnLCAnLS1leGNsdWRlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmV4Y2x1ZGUpCisKKyAgICBkZWYgdGVzdF9zaW5nbGUoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1zJywgJy0tc2luZ2xlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnNpbmdsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJy1mJywgJ2ZvbyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfbWF0Y2goc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1tJywgJy0tbWF0Y2gnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAncGF0dGVybiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMubWF0Y2hfdGVzdHMsICdwYXR0ZXJuJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfZmFpbGZhc3Qoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1HJywgJy0tZmFpbGZhc3QnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnLXYnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZmFpbGZhc3QpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnLVcnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZmFpbGZhc3QpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVcnKQorCisgICAgZGVmIHRlc3RfdXNlKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctdScsICctLXVzZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdndWksbmV0d29yayddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgWydndWknLCAnbmV0d29yayddKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2d1aSxub25lLG5ldHdvcmsnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9yZXNvdXJjZXMsIFsnbmV0d29yayddKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbGlzdChyZWdydGVzdC5SRVNPVVJDRV9OQU1FUykKKyAgICAgICAgICAgICAgICBleHBlY3RlZC5yZW1vdmUoJ2d1aScpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnYWxsLC1ndWknXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9yZXNvdXJjZXMsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb28nXSwgJ2ludmFsaWQgcmVzb3VyY2UnKQorCisgICAgZGVmIHRlc3RfbWVtbGltaXQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1NJywgJy0tbWVtbGltaXQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNEcnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLm1lbWxpbWl0LCAnNEcnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF90ZXN0ZGlyKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS10ZXN0ZGlyJywgJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRlc3RkaXIsIG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCAnZm9vJykpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tdGVzdGRpciddLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3J1bmxlYWtzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctTCcsICctLXJ1bmxlYWtzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnJ1bmxlYWtzKQorCisgICAgZGVmIHRlc3RfaHVudHJsZWFrcyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVInLCAnLS1odW50cmxlYWtzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzonXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmh1bnRybGVha3MsICg1LCA0LCAncmVmbG9nLnR4dCcpKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzY6J10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNiwgNCwgJ3JlZmxvZy50eHQnKSkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc6MyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDUsIDMsICdyZWZsb2cudHh0JykpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNjozOmxlYWtzLmxvZyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDYsIDMsICdsZWFrcy5sb2cnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnNiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZHMgMiBvciAzIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vOiddLCAnaW52YWxpZCBodW50cmxlYWtzIHZhbHVlJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJzY6Zm9vJ10sICdpbnZhbGlkIGh1bnRybGVha3MgdmFsdWUnKQorCisgICAgZGVmIHRlc3RfbXVsdGlwcm9jZXNzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctaicsICctLW11bHRpcHJvY2Vzcyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICcyJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy51c2VfbXAsIDIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbyddLCAnaW52YWxpZCBpbnQgdmFsdWUnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctVCddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctbCddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctTScsICc0RyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfY292ZXJhZ2Uoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1UJywgJy0tY292ZXJhZ2UnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMudHJhY2UpCisKKyAgICBkZWYgdGVzdF9jb3ZlcmRpcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUQnLCAnLS1jb3ZlcmRpcic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmNvdmVyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsICdmb28nKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3Rfbm9jb3ZlcmRpcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLU4nLCAnLS1ub2NvdmVyZGlyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobnMuY292ZXJkaXIpCisKKyAgICBkZWYgdGVzdF90aHJlc2hvbGQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy10JywgJy0tdGhyZXNob2xkJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzEwMDAnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRocmVzaG9sZCwgMTAwMCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9ub3dpbmRvd3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1uJywgJy0tbm93aW5kb3dzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLm5vd2luZG93cykKKworICAgIGRlZiB0ZXN0X2ZvcmV2ZXIoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1GJywgJy0tZm9yZXZlcic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mb3JldmVyKQorCisKKyAgICBkZWYgdGVzdF91bnJlY29nbml6ZWRfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0teHh4J10sICd1c2FnZTonKQorCisgICAgZGVmIHRlc3RfbG9uZ19vcHRpb25fX3BhcnRpYWwoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKworICAgIGRlZiB0ZXN0X3R3b19vcHRpb25zKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1xdWlldCcsICctLWV4Y2x1ZGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnF1aWV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5leGNsdWRlKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX3dpdGhfZW1wdHlfc3RyaW5nX3ZhbHVlKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1zdGFydCcsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zdGFydCwgJycpCisKKyAgICBkZWYgdGVzdF9hcmcoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWydmb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hcmdzLCBbJ2ZvbyddKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX2FuZF9hcmcoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aWV0JywgJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hcmdzLCBbJ2ZvbyddKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKaW5kZXggNTg5ZWNkZC4uMTA0ZTNiNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQpAQCAtMywxMSArMywxMSBAQAogICBOaWNrIE1hdGhld3NvbgogIiIiCiAKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUsIHZlcmJvc2UKQEAgLTI0MSw3ICsyNDEsOCBAQAogICAgICAgICBzb3VyY2VfcGF0aF9sZW4gKz0gMiAqIChsZW4oc2VsZi5sb25nbmFtZSkgKyAxKQogICAgICAgICAjIGEgcGF0aCBzZXBhcmF0b3IgKyBgbW9kdWxlX25hbWVgICsgIi5weSIKICAgICAgICAgc291cmNlX3BhdGhfbGVuICs9IGxlbihtb2R1bGVfbmFtZSkgKyAxICsgbGVuKCIucHkiKQotICAgICAgICBjYWNoZWRfcGF0aF9sZW4gPSBzb3VyY2VfcGF0aF9sZW4gKyBsZW4oaW1wLmNhY2hlX2Zyb21fc291cmNlKCJ4LnB5IikpIC0gbGVuKCJ4LnB5IikKKyAgICAgICAgY2FjaGVkX3BhdGhfbGVuID0gKHNvdXJjZV9wYXRoX2xlbiArCisgICAgICAgICAgICBsZW4oaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoIngucHkiKSkgLSBsZW4oIngucHkiKSkKICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnIGFuZCBjYWNoZWRfcGF0aF9sZW4gPj0gMjU4OgogICAgICAgICAgICAgIyBVbmRlciBXaW5kb3dzLCB0aGUgbWF4IHBhdGggbGVuIGlzIDI2MCBpbmNsdWRpbmcgQydzIHRlcm1pbmF0aW5nCiAgICAgICAgICAgICAjIE5VTCBjaGFyYWN0ZXIuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5IGIvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQppbmRleCAwY2Y2MWNiLi4wMDYxOThmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKQEAgLTEsMyArMSw2IEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHN5cworaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHRpbWUKQEAgLTYxLDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoLjEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW1pdF9zZXQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgaWYgbGltaXRfc2V0OgpAQCAtMTI5LDYgKzEzMiwyNyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGFnZXNpemUsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGFnZXNpemUsIDApCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2xpbnV4JywgJ3Rlc3QgcmVxdWlyZXMgTGludXgnKQorICAgIGRlZiB0ZXN0X2xpbnV4X2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgZm9yIGF0dHIgaW4gWydNU0dRVUVVRScsICdOSUNFJywgJ1JUUFJJTycsICdSVFRJTUUnLCAnU0lHUEVORElORyddOgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLnN1cHByZXNzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2V0YXR0cihyZXNvdXJjZSwgJ1JMSU1JVF8nICsgYXR0ciksIGludCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocmVzb3VyY2UsICdwcmxpbWl0JyksICdubyBwcmxpbWl0JykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19saW51eF92ZXJzaW9uKDIsIDYsIDM2KQorICAgIGRlZiB0ZXN0X3BybGltaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVzb3VyY2UucHJsaW1pdCkKKyAgICAgICAgaWYgb3MuZ2V0ZXVpZCgpICE9IDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IsIHJlc291cmNlLnBybGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCByZXNvdXJjZS5STElNSVRfQVMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb2Nlc3NMb29rdXBFcnJvciwgcmVzb3VyY2UucHJsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIHJlc291cmNlLlJMSU1JVF9BUykKKyAgICAgICAgbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0FTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc291cmNlLnBybGltaXQoMCwgcmVzb3VyY2UuUkxJTUlUX0FTKSwgbGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzb3VyY2UucHJsaW1pdCgwLCByZXNvdXJjZS5STElNSVRfQVMsIGxpbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCkKKworCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUmVzb3VyY2VUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5IGIvTGliL3Rlc3QvdGVzdF9ydW5weS5weQppbmRleCAyZGRiYTM0Li4xNmUyZTEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKQEAgLTU3NSwxMiArNTc1LDUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WydzJ10sICJub24tQVNDSUk6IGhceGU5IikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KAotICAgICAgICAgICAgICAgICBFeGVjdXRpb25MYXllclRlc3RDYXNlLAotICAgICAgICAgICAgICAgICBSdW5Nb2R1bGVUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgUnVuUGF0aFRlc3RDYXNlCi0gICAgICAgICAgICAgICAgICkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zY2hlZC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkKaW5kZXggMDcwODg2ZC4uYzZhYmYzZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zY2hlZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5CkBAIC0xOTcsOCArMTk3LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBbXSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENhc2UpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkgYi9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CmluZGV4IDI2Y2UwNDIuLmIzMjU1NDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zY29wZS5weQpAQCAtNzE1LDYgKzcxNSwxOSBAQAogICAgICAgICBkZWYgYigpOgogICAgICAgICAgICAgZ2xvYmFsIGEKIAorICAgIGRlZiB0ZXN0Q2xhc3NOYW1lc3BhY2VPdmVycmlkZXNDbG9zdXJlKHNlbGYpOgorICAgICAgICAjIFNlZSAjMTc4NTMuCisgICAgICAgIHggPSA0MgorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgbG9jYWxzKClbIngiXSA9IDQzCisgICAgICAgICAgICB5ID0geAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgueSwgNDMpCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBsb2NhbHMoKVsieCJdID0gNDMKKyAgICAgICAgICAgIGRlbCB4CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihYLCAieCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDQyKQorCiAgICAgQGNweXRob25fb25seQogICAgIGRlZiB0ZXN0Q2VsbExlYWsoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTc5MjcuCkBAIC03NDMsMTAgKzc1Niw2IEBACiAgICAgICAgIGRlbCB0ZXN0ZXIKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVmKCkpCiAKLSAgICBkZWYgdGVzdF9fQ2xhc3NfX0dsb2JhbChzZWxmKToKLSAgICAgICAgcyA9ICJjbGFzcyBYOlxuICAgIGdsb2JhbCBfX2NsYXNzX19cbiAgICBkZWYgZihzZWxmKTogc3VwZXIoKSIKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV4ZWMsIHMpCi0KIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChTY29wZVRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkgYi9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weQppbmRleCBkZGI5YTBmLi44ZjlhMWM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKLUB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtWzozXSBpbiAoJ3dpbicsICdvczInLCAncmlzY29zJyksCitAdW5pdHRlc3Quc2tpcElmKChzeXMucGxhdGZvcm1bOjNdPT0nd2luJyksCiAgICAgICAgICAgICAgICAgICJjYW4ndCBlYXNpbHkgdGVzdCBvbiB0aGlzIHN5c3RlbSIpCiBjbGFzcyBTZWxlY3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtmZF0sIFtdLCBbXSwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmVycm5vLCBlcnJuby5FQkFERikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleGNlcHRpb24gbm90IHJhaXNlZCIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NlbGVjdG9ycy5weSBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0b3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDQ4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3NlbGVjdG9ycy5weQpAQCAtMCwwICsxLDQxOSBAQAoraW1wb3J0IGVycm5vCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2VsZWN0b3JzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGltZSBpbXBvcnQgc2xlZXAKK2ltcG9ydCB1bml0dGVzdAordHJ5OgorICAgIGZyb20gdGltZSBpbXBvcnQgbW9ub3RvbmljIGFzIHRpbWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgdGltZQordHJ5OgorICAgIGltcG9ydCByZXNvdXJjZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHJlc291cmNlID0gTm9uZQorCisKK2lmIGhhc2F0dHIoc29ja2V0LCAnc29ja2V0cGFpcicpOgorICAgIHNvY2tldHBhaXIgPSBzb2NrZXQuc29ja2V0cGFpcgorZWxzZToKKyAgICBkZWYgc29ja2V0cGFpcihmYW1pbHk9c29ja2V0LkFGX0lORVQsIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz0wKToKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pIGFzIGw6CisgICAgICAgICAgICBsLmJpbmQoKHN1cHBvcnQuSE9TVCwgMCkpCisgICAgICAgICAgICBsLmxpc3RlbigzKQorICAgICAgICAgICAgYyA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjLmNvbm5lY3QobC5nZXRzb2NrbmFtZSgpKQorICAgICAgICAgICAgICAgIGNhZGRyID0gYy5nZXRzb2NrbmFtZSgpCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgYSwgYWRkciA9IGwuYWNjZXB0KCkKKyAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB0aGF0IHdlJ3ZlIGdvdCB0aGUgY29ycmVjdCBjbGllbnQKKyAgICAgICAgICAgICAgICAgICAgaWYgYWRkciA9PSBjYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjLCBhCisgICAgICAgICAgICAgICAgICAgIGEuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgYy5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKworCitkZWYgZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgZmxhZyk6CisgICAgbWF0Y2ggPSBbXQorICAgIGZvciBrZXksIGV2ZW50cyBpbiByZWFkeToKKyAgICAgICAgaWYgZXZlbnRzICYgZmxhZzoKKyAgICAgICAgICAgIG1hdGNoLmFwcGVuZChrZXkuZmlsZW9iaikKKyAgICByZXR1cm4gbWF0Y2gKKworCitjbGFzcyBCYXNlU2VsZWN0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9yZWdpc3RlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsICJkYXRhIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtleSwgc2VsZWN0b3JzLlNlbGVjdG9yS2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5maWxlb2JqLCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZmQsIHJkLmZpbGVubygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5ldmVudHMsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5kYXRhLCAiZGF0YSIpCisKKyAgICAgICAgIyByZWdpc3RlciBhbiB1bmtub3duIGV2ZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMucmVnaXN0ZXIsIDAsIDk5OTk5OSkKKworICAgICAgICAjIHJlZ2lzdGVyIGFuIGludmFsaWQgRkQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yZWdpc3RlciwgLTEwLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIHJlZ2lzdGVyIHR3aWNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnJlZ2lzdGVyLCByZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyByZWdpc3RlciB0aGUgc2FtZSBGRCwgYnV0IHdpdGggYSBkaWZmZXJlbnQgb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnJlZ2lzdGVyLCByZC5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICBkZWYgdGVzdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorCisgICAgICAgICMgdW5yZWdpc3RlciBhbiB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnVucmVnaXN0ZXIsIDk5OTk5OSkKKworICAgICAgICAjIHVucmVnaXN0ZXIgdHdpY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMudW5yZWdpc3RlciwgcmQpCisKKyAgICBkZWYgdGVzdF9tb2RpZnkoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgbW9kaWZ5IGV2ZW50cworICAgICAgICBrZXkyID0gcy5tb2RpZnkocmQsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuZXZlbnRzLCBrZXkyLmV2ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkyLCBzLmdldF9rZXkocmQpKQorCisgICAgICAgIHMudW5yZWdpc3RlcihyZCkKKworICAgICAgICAjIG1vZGlmeSBkYXRhCisgICAgICAgIGQxID0gb2JqZWN0KCkKKyAgICAgICAgZDIgPSBvYmplY3QoKQorCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBkMSkKKyAgICAgICAga2V5MiA9IHMubW9kaWZ5KHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmV2ZW50cywga2V5Mi5ldmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmRhdGEsIGtleTIuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkyLCBzLmdldF9rZXkocmQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTIuZGF0YSwgZDIpCisKKyAgICAgICAgIyBtb2RpZnkgdW5rbm93biBmaWxlIG9iagorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5tb2RpZnksIDk5OTk5OSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKworICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIHdyKQorCisgICAgZGVmIHRlc3RfZ2V0X2tleShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsICJkYXRhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXksIHMuZ2V0X2tleShyZCkpCisKKyAgICAgICAgIyB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIDk5OTk5OSkKKworICAgIGRlZiB0ZXN0X2dldF9tYXAoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIGtleXMgPSBzLmdldF9tYXAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoa2V5cyksIFtdKQorICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydEluKHJkLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwga2V5c1tyZF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoa2V5cyksIFtyZC5maWxlbm8oKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzLnZhbHVlcygpKSwgW2tleV0pCisKKyAgICAgICAgIyB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAga2V5c1s5OTk5OTldCisKKyAgICAgICAgIyBSZWFkLW9ubHkgbWFwcGluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkZWwga2V5c1tyZF0KKworICAgIGRlZiB0ZXN0X3NlbGVjdChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHdyX2tleSA9IHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKworICAgICAgICByZXN1bHQgPSBzLnNlbGVjdCgpCisgICAgICAgIGZvciBrZXksIGV2ZW50cyBpbiByZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShrZXksIHNlbGVjdG9ycy5TZWxlY3RvcktleSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZlbnRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldmVudHMgJiB+KHNlbGVjdG9ycy5FVkVOVF9SRUFEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyh3cl9rZXksIHNlbGVjdG9ycy5FVkVOVF9XUklURSldLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIHdpdGggcyBhcyBzZWw6CisgICAgICAgICAgICBzZWwucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgc2VsLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIHdyKQorCisgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIGlmIGhhc2F0dHIocywgJ2ZpbGVubycpOgorICAgICAgICAgICAgZmQgPSBzLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmZCwgaW50KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGZkLCAwKQorCisgICAgZGVmIHRlc3Rfc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgTlVNX1NPQ0tFVFMgPSAxMgorICAgICAgICBNU0cgPSBiIiBUaGlzIGlzIGEgdGVzdC4iCisgICAgICAgIE1TR19MRU4gPSBsZW4oTVNHKQorICAgICAgICByZWFkZXJzID0gW10KKyAgICAgICAgd3JpdGVycyA9IFtdCisgICAgICAgIHIydyA9IHt9CisgICAgICAgIHcyciA9IHt9CisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX1NPQ0tFVFMpOgorICAgICAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisgICAgICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgIHJlYWRlcnMuYXBwZW5kKHJkKQorICAgICAgICAgICAgd3JpdGVycy5hcHBlbmQod3IpCisgICAgICAgICAgICByMndbcmRdID0gd3IKKyAgICAgICAgICAgIHcyclt3cl0gPSByZAorCisgICAgICAgIGJ1ZnMgPSBbXQorCisgICAgICAgIHdoaWxlIHdyaXRlcnM6CisgICAgICAgICAgICByZWFkeSA9IHMuc2VsZWN0KCkKKyAgICAgICAgICAgIHJlYWR5X3dyaXRlcnMgPSBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBpZiBub3QgcmVhZHlfd3JpdGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIHNvY2tldHMgcmVhZHkgZm9yIHdyaXRpbmciKQorICAgICAgICAgICAgd3IgPSByYW5kb20uY2hvaWNlKHJlYWR5X3dyaXRlcnMpCisgICAgICAgICAgICB3ci5zZW5kKE1TRykKKworICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgICAgIHJlYWR5ID0gcy5zZWxlY3QoKQorICAgICAgICAgICAgICAgIHJlYWR5X3JlYWRlcnMgPSBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgICAgIGlmIHJlYWR5X3JlYWRlcnM6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIyB0aGVyZSBtaWdodCBiZSBhIGRlbGF5IGJldHdlZW4gdGhlIHdyaXRlIHRvIHRoZSB3cml0ZSBlbmQgYW5kCisgICAgICAgICAgICAgICAgIyB0aGUgcmVhZCBlbmQgaXMgcmVwb3J0ZWQgcmVhZHkKKyAgICAgICAgICAgICAgICBzbGVlcCgwLjEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gc29ja2V0cyByZWFkeSBmb3IgcmVhZGluZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3MnJbd3JdXSwgcmVhZHlfcmVhZGVycykKKyAgICAgICAgICAgIHJkID0gcmVhZHlfcmVhZGVyc1swXQorICAgICAgICAgICAgYnVmID0gcmQucmVjdihNU0dfTEVOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgTVNHX0xFTikKKyAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGJ1ZikKKyAgICAgICAgICAgIHMudW5yZWdpc3RlcihyMndbcmRdKQorICAgICAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorICAgICAgICAgICAgd3JpdGVycy5yZW1vdmUocjJ3W3JkXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZnMsIFtNU0ddICogTlVNX1NPQ0tFVFMpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgIHQgPSB0aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocy5zZWxlY3QoMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihzLnNlbGVjdCgtMSkpKQorICAgICAgICBzZWxmLmFzc2VydExlc3ModGltZSgpIC0gdCwgMC41KQorCisgICAgICAgIHMudW5yZWdpc3Rlcih3cikKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHQgPSB0aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnNlbGVjdCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnNlbGVjdCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh0aW1lKCkgLSB0LCAwLjUpCisKKyAgICAgICAgdDAgPSB0aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnNlbGVjdCgxKSkKKyAgICAgICAgdDEgPSB0aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuNSA8IHQxIC0gdDAgPCAxLjUsIHQxIC0gdDApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgImFsYXJtIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbC5hbGFybSgpIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QiKQorICAgIGRlZiB0ZXN0X3NlbGVjdF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIG9yaWdfYWxybV9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgbGFtYmRhICphcmdzOiBOb25lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLnNpZ25hbCwgc2lnbmFsLlNJR0FMUk0sIG9yaWdfYWxybV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLmFsYXJtLCAwKQorCisgICAgICAgIHNpZ25hbC5hbGFybSgxKQorCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICB0ID0gdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zZWxlY3QoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh0aW1lKCkgLSB0LCAyLjUpCisKKworY2xhc3MgU2NhbGFibGVTZWxlY3Rvck1peEluOgorCisgICAgIyBzZWUgaXNzdWUgIzE4OTYzIGZvciB3aHkgaXQncyBza2lwcGVkIG9uIG9sZGVyIE9TIFggdmVyc2lvbnMKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA1KQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHJlc291cmNlLCAiVGVzdCBuZWVkcyByZXNvdXJjZSBtb2R1bGUiKQorICAgIGRlZiB0ZXN0X2Fib3ZlX2ZkX3NldHNpemUoc2VsZik6CisgICAgICAgICMgQSBzY2FsYWJsZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIHdpdGggbW9yZSB0aGFuCisgICAgICAgICMgRkRfU0VUU0laRSBmaWxlIGRlc2NyaXB0b3JzLiBTaW5jZSB3ZSBkb24ndCBrbm93IHRoZSB2YWx1ZSwgd2UganVzdAorICAgICAgICAjIHRyeSB0byBzZXQgdGhlIHNvZnQgUkxJTUlUX05PRklMRSB0byB0aGUgaGFyZCBSTElNSVRfTk9GSUxFIGNlaWxpbmcuCisgICAgICAgIHNvZnQsIGhhcmQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX05PRklMRSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUsIChoYXJkLCBoYXJkKSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXNvdXJjZS5zZXRybGltaXQsIHJlc291cmNlLlJMSU1JVF9OT0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvZnQsIGhhcmQpKQorICAgICAgICAgICAgTlVNX0ZEUyA9IGhhcmQKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIE5VTV9GRFMgPSBzb2Z0CisKKyAgICAgICAgIyBndWFyZCBmb3IgYWxyZWFkeSBhbGxvY2F0ZWQgRkRzIChzdGRpbiwgc3Rkb3V0Li4uKQorICAgICAgICBOVU1fRkRTIC09IDMyCisKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1fRkRTIC8vIDIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyB0b28gbWFueSBGRHMsIHNraXAgLSBub3RlIHRoYXQgd2Ugc2hvdWxkIG9ubHkgY2F0Y2ggRU1GSUxFCisgICAgICAgICAgICAgICAgIyBoZXJlLCBidXQgYXBwYXJlbnRseSAqQlNEIGFuZCBTb2xhcmlzIGNhbiBmYWlsIHVwb24gY29ubmVjdCgpCisgICAgICAgICAgICAgICAgIyBvciBiaW5kKCkgd2l0aCBFQUREUk5PVEFWQUlMLCBzbyBsZXQncyBiZSBzYWZlCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiRkQgbGltaXQgcmVhY2hlZCIpCisKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TUEM6CisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBjYW4gYmUgcmFpc2VkIGJ5IGVwb2xsIGlmIHdlIGdvIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgIyBmcy5lcG9sbC5tYXhfdXNlcl93YXRjaGVzIHN5c2N0bAorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJGRCBsaW1pdCByZWFjaGVkIikKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlVNX0ZEUyAvLyAyLCBsZW4ocy5zZWxlY3QoKSkpCisKKworY2xhc3MgRGVmYXVsdFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UpOgorCisgICAgU0VMRUNUT1IgPSBzZWxlY3RvcnMuRGVmYXVsdFNlbGVjdG9yCisKKworY2xhc3MgU2VsZWN0U2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSk6CisKKyAgICBTRUxFQ1RPUiA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyksCisgICAgICAgICAgICAgICAgICAgICAiVGVzdCBuZWVkcyBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yIikKK2NsYXNzIFBvbGxTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlLCBTY2FsYWJsZVNlbGVjdG9yTWl4SW4pOgorCisgICAgU0VMRUNUT1IgPSBnZXRhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicsIE5vbmUpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdFcG9sbFNlbGVjdG9yJyksCisgICAgICAgICAgICAgICAgICAgICAiVGVzdCBuZWVkcyBzZWxlY3RvcnMuRXBvbGxTZWxlY3RvciIpCitjbGFzcyBFcG9sbFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UsIFNjYWxhYmxlU2VsZWN0b3JNaXhJbik6CisKKyAgICBTRUxFQ1RPUiA9IGdldGF0dHIoc2VsZWN0b3JzLCAnRXBvbGxTZWxlY3RvcicsIE5vbmUpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9yKSIpCitjbGFzcyBLcXVldWVTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlLCBTY2FsYWJsZVNlbGVjdG9yTWl4SW4pOgorCisgICAgU0VMRUNUT1IgPSBnZXRhdHRyKHNlbGVjdG9ycywgJ0txdWV1ZVNlbGVjdG9yJywgTm9uZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbRGVmYXVsdFNlbGVjdG9yVGVzdENhc2UsIFNlbGVjdFNlbGVjdG9yVGVzdENhc2UsCisgICAgICAgICAgICAgUG9sbFNlbGVjdG9yVGVzdENhc2UsIEVwb2xsU2VsZWN0b3JUZXN0Q2FzZSwKKyAgICAgICAgICAgICBLcXVldWVTZWxlY3RvclRlc3RDYXNlXQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKyAgICBzdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5IGIvTGliL3Rlc3QvdGVzdF9zZXQucHkKaW5kZXggZDAyZTQyNy4uMTNjZWZlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZXQucHkKQEAgLTg0OCw4ICs4NDgsNiBAQAogICAgICAgICBmb3IgdiBpbiBzZWxmLnNldDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgc2VsZi52YWx1ZXMpCiAgICAgICAgIHNldGl0ZXIgPSBpdGVyKHNlbGYuc2V0KQotICAgICAgICAjIG5vdGU6IF9fbGVuZ3RoX2hpbnRfXyBpcyBhbiBpbnRlcm5hbCB1bmRvY3VtZW50ZWQgQVBJLAotICAgICAgICAjIGRvbid0IHJlbHkgb24gaXQgaW4geW91ciBvd24gcHJvZ3JhbXMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRpdGVyLl9fbGVuZ3RoX2hpbnRfXygpLCBsZW4oc2VsZi5zZXQpKQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5CmluZGV4IDEzYzEyNjUuLmJkNTFkODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5CkBAIC0xNDgsNiArMTQ4LDE5IEBACiAgICAgICAgIHAyID0gZFtlbmNvZGVka2V5XQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAxLCBwMikgICMgV3JpdGUgY3JlYXRlcyBuZXcgb2JqZWN0IGluIHN0b3JlCiAKKyAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBkMSA9IHt9CisgICAgICAgIHdpdGggc2hlbHZlLlNoZWxmKGQxLCBwcm90b2NvbD0yLCB3cml0ZWJhY2s9RmFsc2UpIGFzIHM6CisgICAgICAgICAgICBzWydrZXkxJ10gPSBbMSwyLDMsNF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCBbMSwyLDMsNF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGVuLCBzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzWydrZXkxJ10KKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0Nsb3NlZCBzaGVsZiBzaG91bGQgbm90IGZpbmQgYSBrZXknKQogCiBmcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkgYi9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQppbmRleCA5YWY3ZGE3Li4wZmJlMDc4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQpAQCAtMTgsNyArMTgsOCBAQAogICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgZ2V0X2FyY2hpdmVfZm9ybWF0cywgRXJyb3IsIHVucGFja19hcmNoaXZlLAogICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBSZWdpc3RyeUVycm9yLAotICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyX3VucGFja19mb3JtYXQsIGdldF91bnBhY2tfZm9ybWF0cykKKyAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBnZXRfdW5wYWNrX2Zvcm1hdHMsCisgICAgICAgICAgICAgICAgICAgIFNhbWVGaWxlRXJyb3IpCiBpbXBvcnQgdGFyZmlsZQogaW1wb3J0IHdhcm5pbmdzCiAKQEAgLTc0MiwxNCArNzQzLDE0IEBACiAgICAgICAgIG9zLmNobW9kKHJlc3RyaWN0aXZlX3N1YmRpciwgMG82MDApCiAKICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIGRzdF9kaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9zLnN0YXQoc3JjX2Rpcikuc3RfbW9kZSwgb3Muc3RhdChkc3RfZGlyKS5zdF9tb2RlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5zdGF0KG9zLnBhdGguam9pbihzcmNfZGlyLCAncGVybWlzc2l2ZS50eHQnKSkuc3RfbW9kZSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHNyY19kaXIpLnN0X21vZGUsIG9zLnN0YXQoZHN0X2Rpcikuc3RfbW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KG9zLnBhdGguam9pbihzcmNfZGlyLCAncGVybWlzc2l2ZS50eHQnKSkuc3RfbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9zLnN0YXQob3MucGF0aC5qb2luKHNyY19kaXIsICdyZXN0cmljdGl2ZS50eHQnKSkuc3RfbW9kZSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KG9zLnBhdGguam9pbihzcmNfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdyZXN0cmljdGl2ZS50eHQnKSkuc3RfbW9kZSkKICAgICAgICAgcmVzdHJpY3RpdmVfc3ViZGlyX2RzdCA9IG9zLnBhdGguam9pbihkc3RfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguc3BsaXQocmVzdHJpY3RpdmVfc3ViZGlyKVsxXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3Muc3RhdChyZXN0cmljdGl2ZV9zdWJkaXIpLnN0X21vZGUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChyZXN0cmljdGl2ZV9zdWJkaXIpLnN0X21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyX2RzdCkuc3RfbW9kZSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdsaW5rJyksICdyZXF1aXJlcyBvcy5saW5rJykKQEAgLTc2NSw3ICs3NjYsNyBAQAogICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoJ2NoZWRkYXInKQogICAgICAgICAgICAgb3MubGluayhzcmMsIGRzdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5TYW1lRmlsZUVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQogICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCkBAIC03ODUsNyArNzg2LDcgQEAKICAgICAgICAgICAgICMgdG8gVEVTVEZOL1RFU1RGTi9jaGVlc2UsIHdoaWxlIGl0IHNob3VsZCBwb2ludCBhdAogICAgICAgICAgICAgIyBURVNURk4vY2hlZXNlLgogICAgICAgICAgICAgb3Muc3ltbGluaygnY2hlZXNlJywgZHN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlNhbWVGaWxlRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2NoZWRkYXInKQogICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKQEAgLTEyOTIsNiArMTI5MywxNiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocnYpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfZmlsZShzcmNfZmlsZSksIHJlYWRfZmlsZShkc3RfZmlsZSkpCiAKKyAgICBkZWYgdGVzdF9jb3B5ZmlsZV9zYW1lX2ZpbGUoc2VsZik6CisgICAgICAgICMgY29weWZpbGUoKSBzaG91bGQgcmFpc2UgU2FtZUZpbGVFcnJvciBpZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbgorICAgICAgICAjIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNyY19maWxlID0gb3MucGF0aC5qb2luKHNyY19kaXIsICdmb28nKQorICAgICAgICB3cml0ZV9maWxlKHNyY19maWxlLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2FtZUZpbGVFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmNfZmlsZSwgc3JjX2ZpbGUpCisgICAgICAgICMgQnV0IEVycm9yIHNob3VsZCB3b3JrIHRvbywgdG8gc3RheSBiYWNrd2FyZCBjb21wYXRpYmxlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmNfZmlsZSwgc3JjX2ZpbGUpCisKICAgICBkZWYgdGVzdF9jb3B5dHJlZV9yZXR1cm5fdmFsdWUoc2VsZik6CiAgICAgICAgICMgY29weXRyZWUgcmV0dXJucyBpdHMgZGVzdGluYXRpb24gcGF0aC4KICAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCkBAIC0xNTg3LDcgKzE1OTgsNyBAQAogICAgICAgICAgICAgc2VsZi5fZXhpdGVkX3dpdGggPSBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiCiAgICAgICAgICAgICBpZiBzZWxmLl9yYWlzZV9pbl9leGl0OgogICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlZCA9IFRydWUKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDYW5ub3QgY2xvc2UiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNhbm5vdCBjbG9zZSIpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3VwcHJlc3NfYXRfZXhpdAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtMTYwMSwxMiArMTYxMiwxMiBAQAogICAgIGRlZiB0ZXN0X3dfc291cmNlX29wZW5fZmFpbHMoc2VsZik6CiAgICAgICAgIGRlZiBfb3BlbihmaWxlbmFtZSwgbW9kZT0ncicpOgogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ3NyY2ZpbGUnOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0Nhbm5vdCBvcGVuICJzcmNmaWxlIicpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignQ2Fubm90IG9wZW4gInNyY2ZpbGUiJykKICAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgogCiAgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzaHV0aWwuY29weWZpbGUsICdzcmNmaWxlJywgJ2Rlc3RmaWxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCiAKICAgICBkZWYgdGVzdF93X2Rlc3Rfb3Blbl9mYWlscyhzZWxmKToKIApAQCAtMTYxNiwxNCArMTYyNywxNCBAQAogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ3NyY2ZpbGUnOgogICAgICAgICAgICAgICAgIHJldHVybiBzcmNmaWxlCiAgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnZGVzdGZpbGUnOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInKQogICAgICAgICAgICAgYXNzZXJ0IDAgICMgc2hvdWxkbid0IHJlYWNoIGhlcmUuCiAKICAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQogCiAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSgnc3JjZmlsZScsICdkZXN0ZmlsZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgSU9FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIE9TRXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMV0uYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInLCkpCiAKQEAgLTE2NDUsNyArMTY1Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX2VudGVyZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXN0ZmlsZS5fcmFpc2VkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgSU9FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIE9TRXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMV0uYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Nhbm5vdCBjbG9zZScsKSkKIApAQCAtMTY2Myw3ICsxNjc0LDcgQEAKIAogICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX2VudGVyZWQpCkBAIC0xNzM0LDkgKzE3NDUsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RTaHV0aWwsIFRlc3RNb3ZlLCBUZXN0Q29weUZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVGVybXNpemVUZXN0cywgVGVzdFdoaWNoKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CmluZGV4IDliNGJhNTAuLjM1MzBkOGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CkBAIC0xNSw5ICsxNSw2IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCi1pZiBzeXMucGxhdGZvcm0gaW4gKCdvczInLCAncmlzY29zJyk6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybSkKLQogCiBjbGFzcyBIYW5kbGVyQkNhbGxlZChFeGNlcHRpb24pOgogICAgIHBhc3MKQEAgLTM2LDcgKzMzLDcgQEAKIGRlZiBpZ25vcmluZ19laW50cihfX2Z1bmMsICphcmdzLCAqKmt3YXJncyk6CiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gX19mdW5jKCphcmdzLCAqKmt3YXJncykKLSAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICByZXR1cm4gTm9uZQpAQCAtMjc4LDYgKzI3NSw1NyBAQAogCiAgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKIAorICAgIGRlZiB0ZXN0X3dha2V1cF93cml0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTYxMDU6IHdyaXRlKCkgZXJyb3JzIGluIHRoZSBDIHNpZ25hbCBoYW5kbGVyIHNob3VsZCBub3QKKyAgICAgICAgIyBwYXNzIHNpbGVudGx5LgorICAgICAgICAjIFVzZSBhIHN1YnByb2Nlc3MgdG8gaGF2ZSBvbmx5IG9uZSB0aHJlYWQuCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaW1wb3J0IGZjbnRsCisgICAgICAgIGltcG9ydCBvcworICAgICAgICBpbXBvcnQgc2lnbmFsCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZGVycgorCisgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKHIsIGZjbnRsLkZfR0VURkwsIDApCisgICAgICAgIGZjbnRsLmZjbnRsKHIsIGZjbnRsLkZfU0VURkwsIGZsYWdzIHwgb3MuT19OT05CTE9DSykKKworICAgICAgICAjIFNldCB3YWtldXBfZmQgYSByZWFkLW9ubHkgZmlsZSBkZXNjcmlwdG9yIHRvIHRyaWdnZXIgdGhlIGVycm9yCisgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyOgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoNS4wKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAjIEFuIGlnbm9yZWQgZXhjZXB0aW9uIHNob3VsZCBoYXZlIGJlZW4gcHJpbnRlZCBvdXQgb24gc3RkZXJyCisgICAgICAgICAgICBlcnIgPSBlcnIuZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgKCdFeGNlcHRpb24gaWdub3JlZCB3aGVuIHRyeWluZyB0byB3cml0ZSB0byB0aGUgc2lnbmFsIHdha2V1cCBmZCcKKyAgICAgICAgICAgICAgICBub3QgaW4gZXJyKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihlcnIpCisgICAgICAgICAgICBpZiAoJ09TRXJyb3I6IFtFcnJubyAlZF0nICUgZXJybm8uRUJBREYpIG5vdCBpbiBlcnI6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlplcm9EaXZpc2lvbkVycm9yIG5vdCByYWlzZWQiKQorICAgICAgICAiIiIKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy53cml0ZShyLCBiJ3gnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIk9TIGRvZXNuJ3QgcmVwb3J0IHdyaXRlKCkgZXJyb3Igb24gdGhlIHJlYWQgZW5kIG9mIGEgcGlwZSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShyKQorICAgICAgICAgICAgb3MuY2xvc2UodykKKworICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisKICAgICBkZWYgdGVzdF93YWtldXBfZmRfZWFybHkoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfd2FrZXVwKCIiImRlZiB0ZXN0KCk6CiAgICAgICAgICAgICBpbXBvcnQgc2VsZWN0CkBAIC0zMTUsMTAgKzM2MywxMCBAQAogICAgICAgICAgICAgIyBXZSBhdHRlbXB0IHRvIGdldCBhIHNpZ25hbCBkdXJpbmcgdGhlIHNlbGVjdCBjYWxsCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbcmVhZF0sIFtdLCBbXSwgVElNRU9VVF9GVUxMKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJzZWxlY3QuZXJyb3Igbm90IHJhaXNlZCIpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPU0Vycm9yIG5vdCByYWlzZWQiKQogICAgICAgICAgICAgYWZ0ZXJfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICBkdCA9IGFmdGVyX3RpbWUgLSBiZWZvcmVfdGltZQogICAgICAgICAgICAgaWYgZHQgPj0gVElNRU9VVF9IQUxGOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaXRlLnB5IGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CmluZGV4IGMyOTRjNjUuLmNiN2MzOTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpdGUucHkKQEAgLTIzMSwxMSArMjMxLDcgQEAKICAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IFsneG94byddCiAgICAgICAgIGRpcnMgPSBzaXRlLmdldHNpdGVwYWNrYWdlcygpCiAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDEpCi0gICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnTGliJywgJ3NpdGUtcGFja2FnZXMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCi0gICAgICAgIGVsaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIikpOgogICAgICAgICAgICAgIyBPUyBYIGZyYW1ld29yayBidWlsZHMKICAgICAgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ1B5dGhvbi5mcmFtZXdvcmsnXQpAQCAtNDMyLDUgKzQyOCwzOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIDIwMCwgbXNnPSJDYW4ndCBmaW5kICIgKyB1cmwpCiAKIAorY2xhc3MgU3RhcnR1cEltcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YXJ0dXBfaW1wb3J0cyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3RzIGNoZWNrcyB3aGljaCBtb2R1bGVzIGFyZSBsb2FkZWQgYnkgUHl0aG9uIHdoZW4gaXQKKyAgICAgICAgIyBpbml0aWFsbHkgc3RhcnRzIHVwb24gc3RhcnR1cC4KKyAgICAgICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1JJywgJy12JywgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoc2V0KHN5cy5tb2R1bGVzKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LmRlY29kZSgndXRmLTgnKQorICAgICAgICBzdGRlcnIgPSBzdGRlcnIuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIG1vZHVsZXMgPSBldmFsKHN0ZG91dCkKKworICAgICAgICBzZWxmLmFzc2VydEluKCdzaXRlJywgbW9kdWxlcykKKworICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTIwNQorICAgICAgICByZV9tb2RzID0geydyZScsICdfc3JlJywgJ3NyZV9jb21waWxlJywgJ3NyZV9jb25zdGFudHMnLCAnc3JlX3BhcnNlJ30KKyAgICAgICAgIyBfb3N4X3N1cHBvcnQgdXNlcyB0aGUgcmUgbW9kdWxlIGluIG1hbnkgcGxhY3MKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2R1bGVzLmludGVyc2VjdGlvbihyZV9tb2RzKSwgc3RkZXJyKQorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU5NTQ4CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xvY2FsZScsIG1vZHVsZXMsIHN0ZGVycikKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTkyMDkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2NvcHlyZWcnLCBtb2R1bGVzLCBzdGRlcnIpCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5MjE4PgorICAgICAgICBjb2xsZWN0aW9uX21vZHMgPSB7J19jb2xsZWN0aW9ucycsICdjb2xsZWN0aW9ucycsICdmdW5jdG9vbHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYXBxJywgJ2l0ZXJ0b29scycsICdrZXl3b3JkJywgJ29wZXJhdG9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXBybGliJywgJ3R5cGVzJywgJ3dlYWtyZWYnfQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1vZHVsZXMuaW50ZXJzZWN0aW9uKGNvbGxlY3Rpb25fbW9kcyksIHN0ZGVycikKKworCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbGljZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKaW5kZXggMmRmOTI3MS4uOTIwM2Q1ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbGljZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CkBAIC00LDggKzQsNzAgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSBwaWNrbGUgaW1wb3J0IGxvYWRzLCBkdW1wcwogCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBzeXMKIAorCitkZWYgZXZhbHVhdGVfc2xpY2VfaW5kZXgoYXJnKToKKyAgICAiIiIKKyAgICBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIHNsaWNlIGFyZ3VtZW50IHRvIGFuIGludGVnZXIsIGFuZCByYWlzZQorICAgIFR5cGVFcnJvciB3aXRoIGEgc3VpdGFibGUgbWVzc2FnZSBvbiBmYWlsdXJlLgorCisgICAgIiIiCisgICAgaWYgaGFzYXR0cihhcmcsICdfX2luZGV4X18nKToKKyAgICAgICAgcmV0dXJuIG9wZXJhdG9yLmluZGV4KGFyZykKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAic2xpY2UgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yICIKKyAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpCisKK2RlZiBzbGljZV9pbmRpY2VzKHNsaWNlLCBsZW5ndGgpOgorICAgICIiIgorICAgIFJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHNsaWNlLmluZGljZXMgbWV0aG9kLgorCisgICAgIiIiCisgICAgIyBDb21wdXRlIHN0ZXAgYW5kIGxlbmd0aCBhcyBpbnRlZ2Vycy4KKyAgICBsZW5ndGggPSBvcGVyYXRvci5pbmRleChsZW5ndGgpCisgICAgc3RlcCA9IDEgaWYgc2xpY2Uuc3RlcCBpcyBOb25lIGVsc2UgZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2xpY2Uuc3RlcCkKKworICAgICMgUmFpc2UgVmFsdWVFcnJvciBmb3IgbmVnYXRpdmUgbGVuZ3RoIG9yIHplcm8gc3RlcC4KKyAgICBpZiBsZW5ndGggPCAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsZW5ndGggc2hvdWxkIG5vdCBiZSBuZWdhdGl2ZSIpCisgICAgaWYgc3RlcCA9PSAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzbGljZSBzdGVwIGNhbm5vdCBiZSB6ZXJvIikKKworICAgICMgRmluZCBsb3dlciBhbmQgdXBwZXIgYm91bmRzIGZvciBzdGFydCBhbmQgc3RvcC4KKyAgICBsb3dlciA9IC0xIGlmIHN0ZXAgPCAwIGVsc2UgMAorICAgIHVwcGVyID0gbGVuZ3RoIC0gMSBpZiBzdGVwIDwgMCBlbHNlIGxlbmd0aAorCisgICAgIyBDb21wdXRlIHN0YXJ0LgorICAgIGlmIHNsaWNlLnN0YXJ0IGlzIE5vbmU6CisgICAgICAgIHN0YXJ0ID0gdXBwZXIgaWYgc3RlcCA8IDAgZWxzZSBsb3dlcgorICAgIGVsc2U6CisgICAgICAgIHN0YXJ0ID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2xpY2Uuc3RhcnQpCisgICAgICAgIHN0YXJ0ID0gbWF4KHN0YXJ0ICsgbGVuZ3RoLCBsb3dlcikgaWYgc3RhcnQgPCAwIGVsc2UgbWluKHN0YXJ0LCB1cHBlcikKKworICAgICMgQ29tcHV0ZSBzdG9wLgorICAgIGlmIHNsaWNlLnN0b3AgaXMgTm9uZToKKyAgICAgICAgc3RvcCA9IGxvd2VyIGlmIHN0ZXAgPCAwIGVsc2UgdXBwZXIKKyAgICBlbHNlOgorICAgICAgICBzdG9wID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2xpY2Uuc3RvcCkKKyAgICAgICAgc3RvcCA9IG1heChzdG9wICsgbGVuZ3RoLCBsb3dlcikgaWYgc3RvcCA8IDAgZWxzZSBtaW4oc3RvcCwgdXBwZXIpCisKKyAgICByZXR1cm4gc3RhcnQsIHN0b3AsIHN0ZXAKKworCisjIENsYXNzIHByb3ZpZGluZyBhbiBfX2luZGV4X18gbWV0aG9kLiAgVXNlZCBmb3IgdGVzdGluZyBzbGljZS5pbmRpY2VzLgorCitjbGFzcyBNeUluZGV4YWJsZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworCiBjbGFzcyBTbGljZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CkBAIC03NSw2ICsxMzcsMjIgQEAKICAgICAgICAgcyA9IHNsaWNlKG9iaikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RvcCBpcyBvYmopCiAKKyAgICBkZWYgY2hlY2tfaW5kaWNlcyhzZWxmLCBzbGljZSwgbGVuZ3RoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWN0dWFsID0gc2xpY2UuaW5kaWNlcyhsZW5ndGgpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgYWN0dWFsID0gInZhbHVlZXJyb3IiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc2xpY2VfaW5kaWNlcyhzbGljZSwgbGVuZ3RoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gInZhbHVlZXJyb3IiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKworICAgICAgICBpZiBsZW5ndGggPj0gMCBhbmQgc2xpY2Uuc3RlcCAhPSAwOgorICAgICAgICAgICAgYWN0dWFsID0gcmFuZ2UoKnNsaWNlLmluZGljZXMobGVuZ3RoKSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gcmFuZ2UobGVuZ3RoKVtzbGljZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKwogICAgIGRlZiB0ZXN0X2luZGljZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSAgICAgICAgICAgKS5pbmRpY2VzKDEwKSwgKDAsIDEwLCAgMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgIE5vbmUsICAyKS5pbmRpY2VzKDEwKSwgKDAsIDEwLCAgMikpCkBAIC0xMDgsNyArMTg2LDQxIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKDEwKSlbOjpzeXMubWF4c2l6ZSAtIDFdLCBbMF0pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2xpY2UoTm9uZSkuaW5kaWNlcywgMTw8MTAwKQorICAgICAgICAjIENoZWNrIGEgdmFyaWV0eSBvZiBzdGFydCwgc3RvcCwgc3RlcCBhbmQgbGVuZ3RoIHZhbHVlcywgaW5jbHVkaW5nCisgICAgICAgICMgdmFsdWVzIGV4Y2VlZGluZyBzeXMubWF4c2l6ZSAoc2VlIGlzc3VlICMxNDc5NCkuCisgICAgICAgIHZhbHMgPSBbTm9uZSwgLTIqKjEwMCwgLTIqKjMwLCAtNTMsIC03LCAtMSwgMCwgMSwgNywgNTMsIDIqKjMwLCAyKioxMDBdCisgICAgICAgIGxlbmd0aHMgPSBbMCwgMSwgNywgNTMsIDIqKjMwLCAyKioxMDBdCisgICAgICAgIGZvciBzbGljZV9hcmdzIGluIGl0ZXJ0b29scy5wcm9kdWN0KHZhbHMsIHJlcGVhdD0zKToKKyAgICAgICAgICAgIHMgPSBzbGljZSgqc2xpY2VfYXJncykKKyAgICAgICAgICAgIGZvciBsZW5ndGggaW4gbGVuZ3RoczoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2luZGljZXMocywgbGVuZ3RoKQorICAgICAgICBzZWxmLmNoZWNrX2luZGljZXMoc2xpY2UoMCwgMTAsIDEpLCAtMykKKworICAgICAgICAjIE5lZ2F0aXZlIGxlbmd0aCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoTm9uZSkuaW5kaWNlcygtMSkKKworICAgICAgICAjIFplcm8gc3RlcCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAsIDApLmluZGljZXMoNSkKKworICAgICAgICAjIFVzaW5nIGEgc3RhcnQsIHN0b3Agb3Igc3RlcCBvciBsZW5ndGggdGhhdCBjYW4ndCBiZSBpbnRlcnByZXRlZCBhcyBhbgorICAgICAgICAjIGludGVnZXIgc2hvdWxkIGdpdmUgYSBUeXBlRXJyb3IgLi4uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAuMCwgMTAsIDEpLmluZGljZXMoNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAuMCwgMSkuaW5kaWNlcyg1KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMCwgMS4wKS5pbmRpY2VzKDUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLCAxKS5pbmRpY2VzKDUuMCkKKworICAgICAgICAjIC4uLiBidXQgaXQgc2hvdWxkIGJlIGZpbmUgdG8gdXNlIGEgY3VzdG9tIGNsYXNzIHRoYXQgcHJvdmlkZXMgaW5kZXguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIDEpLmluZGljZXMoNSksICgwLCA1LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShNeUluZGV4YWJsZSgwKSwgMTAsIDEpLmluZGljZXMoNSksICgwLCA1LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgwLCBNeUluZGV4YWJsZSgxMCksIDEpLmluZGljZXMoNSksICgwLCA1LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgwLCAxMCwgTXlJbmRleGFibGUoMSkpLmluZGljZXMoNSksICgwLCA1LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgwLCAxMCwgMSkuaW5kaWNlcyhNeUluZGV4YWJsZSg1KSksICgwLCA1LCAxKSkKIAogICAgIGRlZiB0ZXN0X3NldHNsaWNlX3dpdGhvdXRfZ2V0c2xpY2Uoc2VsZik6CiAgICAgICAgIHRtcCA9IFtdCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKaW5kZXggOGQxZGJiZi4uYTUwMWY0MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQpAQCAtMjIyLDcgKzIyMiw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAuc291cmNlX2FkZHJlc3MsICgnMTI3LjAuMC4xJywgcG9ydCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAubG9jYWxfaG9zdG5hbWUsICdsb2NhbGhvc3QnKQogICAgICAgICAgICAgc210cC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUFERFJJTlVTRToKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjb3VsZG4ndCBiaW5kIHRvIHBvcnQgJWQiICUgcG9ydCkKICAgICAgICAgICAgIHJhaXNlCkBAIC01MjQsMTIgKzUyNCw2IEBACiAKIGNsYXNzIE5vbkNvbm5lY3RpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNtdHBsaWIuc29ja2V0ID0gbW9ja19zb2NrZXQKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc210cGxpYi5zb2NrZXQgPSBzb2NrZXQKLQogICAgIGRlZiB0ZXN0Tm90Q29ubmVjdGVkKHNlbGYpOgogICAgICAgICAjIFRlc3QgdmFyaW91cyBvcGVyYXRpb25zIG9uIGFuIHVuY29ubmVjdGVkIFNNVFAgb2JqZWN0IHRoYXQKICAgICAgICAgIyBzaG91bGQgcmFpc2UgZXhjZXB0aW9ucyAoYXQgcHJlc2VudCB0aGUgYXR0ZW1wdCBpbiBTTVRQLnNlbmQKQEAgLTU0MSwxMCArNTM1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdHAuc2VuZCwgJ3Rlc3QgbXNnJykKIAogICAgIGRlZiB0ZXN0Tm9ubnVtZXJpY1BvcnQoc2VsZik6Ci0gICAgICAgICMgY2hlY2sgdGhhdCBub24tbnVtZXJpYyBwb3J0IHJhaXNlcyBzb2NrZXQuZXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobW9ja19zb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUCwKKyAgICAgICAgIyBjaGVjayB0aGF0IG5vbi1udW1lcmljIHBvcnQgcmFpc2VzIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc210cGxpYi5TTVRQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxob3N0IiwgImJvZ3VzIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobW9ja19zb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUCwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc210cGxpYi5TTVRQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxob3N0OmJvZ3VzIikKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NuZGhkci5weSBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CmluZGV4IDEwMDQ2ODguLjVlMGFiZTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CkBAIC0xMiw3ICsxMiw3IEBACiAgICAgICAgICAgICAoJ3NuZGhkci5oY29tJywgKCdoY29tJywgMjIwNTAuMCwgMSwgLTEsIDgpKSwKICAgICAgICAgICAgICgnc25kaGRyLnNuZHQnLCAoJ3NuZHQnLCA0NDEwMCwgMSwgNSwgOCkpLAogICAgICAgICAgICAgKCdzbmRoZHIudm9jJywgKCd2b2MnLCAwLCAxLCAtMSwgOCkpLAotICAgICAgICAgICAgKCdzbmRoZHIud2F2JywgKCd3YXYnLCA0NDEwMCwgMiwgLTEsIDE2KSksCisgICAgICAgICAgICAoJ3NuZGhkci53YXYnLCAoJ3dhdicsIDQ0MTAwLCAyLCA1LCAxNikpLAogICAgICAgICApOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBmaW5kZmlsZShmaWxlbmFtZSwgc3ViZGlyPSJzbmRoZHJkYXRhIikKICAgICAgICAgICAgIHdoYXQgPSBzbmRoZHIud2hhdChmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5IGIvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKaW5kZXggYjk1ZTFhYi4uZTk5NWM5OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKQEAgLTIsNyArMiw2IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHVuaXR0ZXN0LmNhc2UgaW1wb3J0IF9FeHBlY3RlZEZhaWx1cmUKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgaW8KQEAgLTI0LDEzICsyMywxMyBAQAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN0cnVjdAogdHJ5OgotICAgIGltcG9ydCBmY250bAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZjbnRsID0gRmFsc2UKLXRyeToKICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gRmFsc2UKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmY250bCA9IE5vbmUKIAogSE9TVCA9IHN1cHBvcnQuSE9TVAogTVNHID0gJ01pY2hhZWwgR2lsZml4IHdhcyBoZXJlXHUxMjM0XHJcbicuZW5jb2RlKCd1dGYtOCcpICMjIHRlc3QgdW5pY29kZSBzdHJpbmcgYW5kIGNhcnJpYWdlIHJldHVybgpAQCAtNDYsNyArNDUsNyBAQAogICAgICIiIkNoZWNrIHdoZXRoZXIgQ0FOIHNvY2tldHMgYXJlIHN1cHBvcnRlZCBvbiB0aGlzIGhvc3QuIiIiCiAgICAgdHJ5OgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHNvY2tldC5lcnJvciwgT1NFcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIGVsc2U6CiAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTIxLDEyICsxMjAsNDIgQEAKICAgICBpbnRlcmZhY2UgPSAndmNhbjAnCiAgICAgYnVmc2l6ZSA9IDEyOAogCisgICAgIiIiVGhlIENBTiBmcmFtZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8bGludXgvY2FuLmg+OgorCisgICAgc3RydWN0IGNhbl9mcmFtZSB7CisgICAgICAgIGNhbmlkX3QgY2FuX2lkOyAgLyogMzIgYml0IENBTl9JRCArIEVGRi9SVFIvRVJSIGZsYWdzICovCisgICAgICAgIF9fdTggICAgY2FuX2RsYzsgLyogZGF0YSBsZW5ndGggY29kZTogMCAuLiA4ICovCisgICAgICAgIF9fdTggICAgZGF0YVs4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisgICAgfTsKKyAgICAiIiIKKyAgICBjYW5fZnJhbWVfZm10ID0gIj1JQjN4OHMiCisgICAgY2FuX2ZyYW1lX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoY2FuX2ZyYW1lX2ZtdCkKKworICAgICIiIlRoZSBCcm9hZGNhc3QgTWFuYWdlbWVudCBDb21tYW5kIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgICAgaW4gPGxpbnV4L2Nhbi9iY20uaD46CisKKyAgICBzdHJ1Y3QgYmNtX21zZ19oZWFkIHsKKyAgICAgICAgX191MzIgb3Bjb2RlOworICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgX191MzIgY291bnQ7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIGl2YWwxLCBpdmFsMjsKKyAgICAgICAgY2FuaWRfdCBjYW5faWQ7CisgICAgICAgIF9fdTMyIG5mcmFtZXM7CisgICAgICAgIHN0cnVjdCBjYW5fZnJhbWUgZnJhbWVzWzBdOworICAgIH0KKworICAgIGBiY21fbXNnX2hlYWRgIG11c3QgYmUgOCBieXRlcyBhbGlnbmVkIGJlY2F1c2Ugb2YgdGhlIGBmcmFtZXNgIG1lbWJlciAoc2VlCisgICAgYHN0cnVjdCBjYW5fZnJhbWVgIGRlZmluaXRpb24pLiBNdXN0IHVzZSBuYXRpdmUgbm90IHN0YW5kYXJkIHR5cGVzIGZvciBwYWNraW5nLgorICAgICIiIgorICAgIGJjbV9jbWRfbXNnX2ZtdCA9ICJAM0k0bDJJIgorICAgIGJjbV9jbWRfbXNnX2ZtdCArPSAieCIgKiAoc3RydWN0LmNhbGNzaXplKGJjbV9jbWRfbXNnX2ZtdCkgJSA4KQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnMuY2xvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucy5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25ldHdvcmsgaW50ZXJmYWNlIGAlc2AgZG9lcyBub3QgZXhpc3QnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJmYWNlKQogCkBAIC0yNDIsOSArMjcxLDYgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdF9mdW5jIG11c3QgYmUgYSBjYWxsYWJsZSBmdW5jdGlvbiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RfZnVuYygpCi0gICAgICAgIGV4Y2VwdCBfRXhwZWN0ZWRGYWlsdXJlOgotICAgICAgICAgICAgIyBXZSBkZWxpYmVyYXRlbHkgaWdub3JlIGV4cGVjdGVkIGZhaWx1cmVzCi0gICAgICAgICAgICBwYXNzCiAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChlKQogICAgICAgICBmaW5hbGx5OgpAQCAtMjk1LDcgKzMyMSw3IEBACiAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNsaS5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgc2tpcFRlc3Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaGVyZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGluIHRoZQogICAgICAgICAgICAgIyBzZXJ2ZXIgaW5zdGVhZAogICAgICAgICAgICAgcGFzcwpAQCAtNTQzLDExICs1NjksNyBAQAogY2xhc3MgSW5ldDZUZXN0QmFzZShJbmV0VGVzdEJhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIElQdjYgc29ja2V0IHRlc3RzLiIiIgogCi0gICAgIyBEb24ndCB1c2UgImxvY2FsaG9zdCIgaGVyZSAtIGl0IG1heSBub3QgaGF2ZSBhbiBJUHY2IGFkZHJlc3MKLSAgICAjIGFzc2lnbmVkIHRvIGl0IGJ5IGRlZmF1bHQgKGUuZy4gaW4gL2V0Yy9ob3N0cyksIGFuZCBpZiBzb21lb25lCi0gICAgIyBoYXMgYXNzaWduZWQgaXQgYW4gSVB2NC1tYXBwZWQgYWRkcmVzcywgdGhlbiBpdCdzIHVubGlrZWx5IHRvCi0gICAgIyB3b3JrIHdpdGggdGhlIGZ1bGwgSVB2NiBBUEkuCi0gICAgaG9zdCA9ICI6OjEiCisgICAgaG9zdCA9IHN1cHBvcnQuSE9TVHY2CiAKIGNsYXNzIFVEUDZUZXN0QmFzZShJbmV0NlRlc3RCYXNlKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBVRFAtb3Zlci1JUHY2IHRlc3RzLiIiIgpAQCAtNjA4LDcgKzYzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBvYmogaW4gYXJnc10KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKmNhbGxhcmdzKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFhYWDogY2hlY2sgZXJybm8/CiAgICAgICAgICAgICBlcnIgPSBzdHIoZSkKICAgICAgICAgZWxzZToKQEAgLTYyNiw4ICs2NDgsMTcgQEAKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzKS5zdGFydHN3aXRoKCI8c29ja2V0LnNvY2tldCBvYmplY3QiKSkKKyAgICAgICAgd2l0aCBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmQ9JWknICUgcy5maWxlbm8oKSwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZhbWlseT0laScgJSBzb2NrZXQuQUZfSU5FVCwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3R5cGU9JWknICUgc29ja2V0LlNPQ0tfU1RSRUFNLCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncHJvdG89MCcsIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdyYWRkcicsIHJlcHIocykpCisgICAgICAgICAgICBzLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xhZGRyJywgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyKHMuZ2V0c29ja25hbWUoKSksIHJlcHIocykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1tjbG9zZWRdJywgcmVwcihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGFkZHInLCByZXByKHMpKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKQEAgLTY0NSwxMSArNjc2LDExIEBACiAgICAgZGVmIHRlc3RTb2NrZXRFcnJvcihzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNvY2tldCBtb2R1bGUgZXhjZXB0aW9ucwogICAgICAgICBtc2cgPSAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uICglcykuIgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuZXJyb3InKToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdPU0Vycm9yJyk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuaGVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5nYWllcnJvcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmdhaWVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZ2FpZXJyb3IKIAogICAgIGRlZiB0ZXN0U2VuZHRvRXJyb3JzKHNlbGYpOgpAQCAtNzEyLDEzICs3NDMsMTMgQEAKICAgICAgICAgaG9zdG5hbWUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpcCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3RuYW1lKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXAuZmluZCgnLicpID49IDAsICJFcnJvciByZXNvbHZpbmcgaG9zdCB0byBpcC4iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBobmFtZSwgYWxpYXNlcywgaXBhZGRycyA9IHNvY2tldC5nZXRob3N0YnlhZGRyKGlwKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgYSBzaW1pbGFyIHByb2JsZW0gYXMgYWJvdmU7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgYWxsX2hvc3RfbmFtZXMgPSBbaG9zdG5hbWUsIGhuYW1lXSArIGFsaWFzZXMKQEAgLTcyNiwxMyArNzU3LDI3IEBACiAgICAgICAgIGlmIG5vdCBmcWhuIGluIGFsbF9ob3N0X25hbWVzOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0ZXN0aW5nIGhvc3QgcmVzb2x1dGlvbiBtZWNoYW5pc21zLiAoZnFkbjogJXMsIGFsbDogJXMpIiAlIChmcWhuLCByZXByKGFsbF9ob3N0X25hbWVzKSkpCiAKKyAgICBkZWYgdGVzdF9ob3N0X3Jlc29sdXRpb24oc2VsZik6CisgICAgICAgIGZvciBhZGRyIGluIFsnMC4xLjEufjEnLCAnMSsuMS4xLjEnLCAnOjoxcScsICc6OjE6OjInLAorICAgICAgICAgICAgICAgICAgICAgJzE6MToxOjE6MToxOjE6MToxJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuZ2V0aG9zdGJ5bmFtZSwgYWRkcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRob3N0YnlhZGRyLCBhZGRyKQorCisgICAgICAgIGZvciBhZGRyIGluIFtzdXBwb3J0LkhPU1QsICcxMC4wLjAuMScsICcyNTUuMjU1LjI1NS4yNTUnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja2V0LmdldGhvc3RieW5hbWUoYWRkciksIGFkZHIpCisKKyAgICAgICAgIyB3ZSBkb24ndCB0ZXN0IHN1cHBvcnQuSE9TVHY2IGJlY2F1c2UgdGhlcmUncyBhIGNoYW5jZSBpdCBkb2Vzbid0IGhhdmUKKyAgICAgICAgIyBhIG1hdGNoaW5nIG5hbWUgZW50cnkgKGUuZy4gJ2lwNi1sb2NhbGhvc3QnKQorICAgICAgICBmb3IgaG9zdCBpbiBbc3VwcG9ydC5IT1NUXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdCwgc29ja2V0LmdldGhvc3RieWFkZHIoaG9zdClbMl0pCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5zZXRob3N0bmFtZSgpIikKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ2dldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5nZXRob3N0bmFtZSgpIikKICAgICBkZWYgdGVzdF9zZXRob3N0bmFtZShzZWxmKToKICAgICAgICAgb2xkaG4gPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0aG9zdG5hbWUoJ25ldycpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBFUk06CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBzaG91bGQgYmUgcnVuIGFzIHJvb3QiKQogICAgICAgICAgICAgZWxzZToKQEAgLTc2Niw4ICs4MTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuaWZfbmFtZWluZGV4KCkgbm90IGF2YWlsYWJsZS4nKQogICAgIGRlZiB0ZXN0SW52YWxpZEludGVyZmFjZU5hbWVJbmRleChzZWxmKToKICAgICAgICAgIyB0ZXN0IG5vbmV4aXN0ZW50IGludGVyZmFjZSBpbmRleC9uYW1lCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2tldC5pZl9uYW1ldG9pbmRleCwgJ19ERUFEQkVFRicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5pZl9pbmRleHRvbmFtZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmlmX25hbWV0b2luZGV4LCAnX0RFQURCRUVGJykKICAgICAgICAgIyB0ZXN0IHdpdGggaW52YWxpZCB2YWx1ZXMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAnX0RFQURCRUVGJykKQEAgLTc4OCw3ICs4MzMsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIE9uIHNvbWUgdmVyc2lvbnMsIHRoaXMgY3Jhc2hlcyB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgICAgICAgICBzb2NrZXQuZ2V0bmFtZWluZm8oKCd4JywgMCwgMCwgMCksIDApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3ROdG9IKHNlbGYpOgpAQCAtODM1LDE3ICs4ODAsMTcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSwgJ3RjcCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBUcnkgc2FtZSBjYWxsIHdpdGggb3B0aW9uYWwgcHJvdG9jb2wgb21pdHRlZAogICAgICAgICBwb3J0MiA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UpCiAgICAgICAgIGVxKHBvcnQsIHBvcnQyKQogICAgICAgICAjIFRyeSB1ZHAsIGJ1dCBkb24ndCBiYXJmIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdWRwcG9ydCA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UsICd1ZHAnKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHVkcHBvcnQgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlcSh1ZHBwb3J0LCBwb3J0KQpAQCAtOTAxLDcgKzk0Niw3IEBACiAgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9wdG9uKEFGX0lORVQsIGEpCiAKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBmdW5jLGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGZ1bmMsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1x4MDBceDAwXHgwMFx4MDAnLCBmKCcwLjAuMC4wJykpCkBAIC05MzYsNyArOTgxLDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVUNiwgYSkKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGYsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidceDAwJyAqIDE2LCBmKCc6OicpKQpAQCAtOTg1LDcgKzEwMzAsNyBAQAogICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgaW5ldF9udG9hIGFzIGYsIGluZXRfbnRvcCwgQUZfSU5FVAogICAgICAgICBnID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVULCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGZ1bmMsYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjAuMS4wJywgZihiJ1x4MDFceDAwXHgwMVx4MDAnKSkKQEAgLTEwMTQsNyArMTA1OSw3IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGxhbWJkYSBhOiBpbmV0X250b3AoQUZfSU5FVDYsIGEpCiAgICAgICAgIGFzc2VydEludmFsaWQgPSBsYW1iZGEgYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZiwgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc6OicsIGYoYidceDAwJyAqIDE2KSkKQEAgLTEwNDIsNyArMTA4Nyw3IEBACiAgICAgICAgICMgQXQgbGVhc3QgZm9yIGVDb3MuICBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgUy8zOTAgdG8gcGFzcy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbXlfaXBfYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmFzc2VydEluKG5hbWVbMF0sICgiMC4wLjAuMCIsIG15X2lwX2FkZHIpLCAnJXMgaW52YWxpZCcgJSBuYW1lWzBdKQpAQCAtMTA2OSwxMyArMTExNCwxOSBAQAogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzb2NrLnNldHRpbWVvdXQoMSkKICAgICAgICAgc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kLCBiInNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrLnNlbmQsIGIic3BhbSIpCiAKICAgICBkZWYgdGVzdE5ld0F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgdGVzdGluZyAuZmFtaWx5LCAudHlwZSBhbmQgLnByb3RvY29sCisKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmZhbWlseSwgc29ja2V0LkFGX0lORVQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay50eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnU09DS19DTE9FWEVDJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNvY2sudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09DS19TVFJFQU0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnByb3RvLCAwKQogICAgICAgICBzb2NrLmNsb3NlKCkKIApAQCAtMTEyOCw5ICsxMTc5LDEyIEBACiAgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCA4MCkKICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUpCiAgICAgICAgICMgdGVzdCBmYW1pbHkgYW5kIHNvY2t0eXBlIGZpbHRlcnMKLSAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgc29ja2V0LkFGX0lORVQpCi0gICAgICAgIGZvciBmYW1pbHksIF8sIF8sIF8sIF8gaW4gaW5mb3M6CisgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBfLCBfLCBfIGluIGluZm9zOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZmFtaWx5KSwgJ0FkZHJlc3NGYW1pbHkuQUZfSU5FVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHR5cGUpLCAnU29ja2V0VHlwZS5TT0NLX1NUUkVBTScpCiAgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgZm9yIF8sIHNvY2t0eXBlLCBfLCBfLCBfIGluIGluZm9zOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrdHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQpAQCAtMTE3Miw3ICsxMjI2LDcgQEAKIAogICAgIGRlZiB0ZXN0X2dldG5hbWVpbmZvKHNlbGYpOgogICAgICAgICAjIG9ubHkgSVAgYWRkcmVzc2VzIGFyZSBhbGxvd2VkCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLCAoJ21haWwucHl0aG9uLm9yZycsMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywgKCdtYWlsLnB5dGhvbi5vcmcnLDApLCAwKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmsgaXMgbm90IGVuYWJsZWQnKQpAQCAtMTI4NCwxMCArMTMzOCwzMSBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiAgICAgZGVmIHRlc3RfZmxvd2luZm8oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCc6OjEnLDAsIDB4ZmZmZmZmZmYpLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydC5IT1NUdjYsIDAsIDB4ZmZmZmZmZmYpLCAwKQogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzLmJpbmQsICgnOjoxJywgMCwgLTEwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHMuYmluZCwgKHN1cHBvcnQuSE9TVHY2LCAwLCAtMTApKQogCisgICAgZGVmIHRlc3Rfc3RyX2Zvcl9lbnVtcyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgQUZfKiBhbmQgU09DS18qIGNvbnN0YW50cyBoYXZlIGVudW0tbGlrZSBzdHJpbmcKKyAgICAgICAgIyByZXBycy4KKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzLmZhbWlseSksICdBZGRyZXNzRmFtaWx5LkFGX0lORVQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocy50eXBlKSwgJ1NvY2tldFR5cGUuU09DS19TVFJFQU0nKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICdXaWxsIG5vdCB3b3JrIG9uIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X3Vrbm93bl9zb2NrZXRfZmFtaWx5X3JlcHIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdoZW4gY3JlYXRlZCB3aXRoIGEgZmFtaWx5IHRoYXQncyBub3Qgb25lIG9mIHRoZSBrbm93bgorICAgICAgICAjIEFGXyovU09DS18qIGNvbnN0YW50cywgc29ja2V0LmZhbWlseSBqdXN0IHJldHVybnMgdGhlIG51bWJlci4KKyAgICAgICAgIworICAgICAgICAjIFRvIGRvIHRoaXMgd2UgZm9vbCBzb2NrZXQuc29ja2V0IGludG8gYmVsaWV2aW5nIGl0IGFscmVhZHkgaGFzIGFuCisgICAgICAgICMgb3BlbiBmZCBiZWNhdXNlIG9uIHRoaXMgcGF0aCBpdCBkb2Vzbid0IGFjdHVhbGx5IHZlcmlmeSB0aGUgZmFtaWx5IGFuZAorICAgICAgICAjIHR5cGUgYW5kIHBvcHVsYXRlcyB0aGUgc29ja2V0IG9iamVjdC4KKyAgICAgICAgIworICAgICAgICAjIE9uIFdpbmRvd3MgdGhpcyB0cmljayB3b24ndCB3b3JrLCBzbyB0aGUgdGVzdCBpcyBza2lwcGVkLgorICAgICAgICBmZCwgXyA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5PTQyNDI0LCB0eXBlPTEzMzMxLCBmaWxlbm89ZmQpIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmFtaWx5LCA0MjQyNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy50eXBlLCAxMzMzMSkKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9TT0NLRVRfQ0FOLCAnU29ja2V0Q2FuIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljQ0FOVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMjk3LDEwICsxMzcyLDM1IEBACiAgICAgICAgIHNvY2tldC5QRl9DQU4KICAgICAgICAgc29ja2V0LkNBTl9SQVcKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RCQ01Db25zdGFudHMoc2VsZik6CisgICAgICAgIHNvY2tldC5DQU5fQkNNCisKKyAgICAgICAgIyBvcGNvZGVzCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NFVFVQICAgICAjIGNyZWF0ZSAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzaworICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9ERUxFVEUgICAgIyByZW1vdmUgKGN5Y2xpYykgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfUkVBRCAgICAgICMgcmVhZCBwcm9wZXJ0aWVzIG9mIChjeWNsaWMpIHRyYW5zbWlzc2lvbiB0YXNrCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NFTkQgICAgICAjIHNlbmQgb25lIENBTiBmcmFtZQorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9TRVRVUCAgICAgIyBjcmVhdGUgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX0RFTEVURSAgICAjIHJlbW92ZSBSWCBjb250ZW50IGZpbHRlciBzdWJzY3JpcHRpb24KKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfUkVBRCAgICAgICMgcmVhZCBwcm9wZXJ0aWVzIG9mIFJYIGNvbnRlbnQgZmlsdGVyIHN1YnNjcmlwdGlvbgorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9TVEFUVVMgICAgIyByZXBseSB0byBUWF9SRUFEIHJlcXVlc3QKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfRVhQSVJFRCAgICMgbm90aWZpY2F0aW9uIG9uIHBlcmZvcm1lZCB0cmFuc21pc3Npb25zIChjb3VudD0wKQorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9TVEFUVVMgICAgIyByZXBseSB0byBSWF9SRUFEIHJlcXVlc3QKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfVElNRU9VVCAgICMgY3ljbGljIG1lc3NhZ2UgaXMgYWJzZW50CisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX0NIQU5HRUQgICAjIHVwZGF0ZWQgQ0FOIGZyYW1lIChkZXRlY3RlZCBjb250ZW50IGNoYW5nZSkKKwogICAgIGRlZiB0ZXN0Q3JlYXRlU29ja2V0KHNlbGYpOgogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuQ0FOX1JBVykgYXMgczoKICAgICAgICAgICAgIHBhc3MKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RDcmVhdGVCQ01Tb2NrZXQoc2VsZik6CisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pIGFzIHM6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdEJpbmRBbnkoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgogICAgICAgICAgICAgcy5iaW5kKCgnJywgKSkKQEAgLTEzMDgsNyArMTQwOCw3IEBACiAgICAgZGVmIHRlc3RUb29Mb25nSW50ZXJmYWNlTmFtZShzZWxmKToKICAgICAgICAgIyBtb3N0IHN5c3RlbXMgbGltaXQgSUZOQU1TSVogdG8gMTYsIHRha2UgMTAyNCB0byBiZSBzdXJlCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzb2NrZXQuZXJyb3IsICdpbnRlcmZhY2UgbmFtZSB0b28gbG9uZycsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE9TRXJyb3IsICdpbnRlcmZhY2UgbmFtZSB0b28gbG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYmluZCwgKCd4JyAqIDEwMjQsKSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX1JBV19MT09QQkFDSyIpLApAQCAtMTMzMywxOSArMTQzMyw4IEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9TT0NLRVRfQ0FOLCAnU29ja2V0Q2FuIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKLUB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBDQU5UZXN0KFRocmVhZGVkQ0FOU29ja2V0VGVzdCk6CiAKLSAgICAiIiJUaGUgQ0FOIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIDxsaW51eC9jYW4uaD46Ci0KLSAgICBzdHJ1Y3QgY2FuX2ZyYW1lIHsKLSAgICAgICAgY2FuaWRfdCBjYW5faWQ7ICAvKiAzMiBiaXQgQ0FOX0lEICsgRUZGL1JUUi9FUlIgZmxhZ3MgKi8KLSAgICAgICAgX191OCAgICBjYW5fZGxjOyAvKiBkYXRhIGxlbmd0aCBjb2RlOiAwIC4uIDggKi8KLSAgICAgICAgX191OCAgICBkYXRhWzhdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKLSAgICB9OwotICAgICIiIgotICAgIGNhbl9mcmFtZV9mbXQgPSAiPUlCM3g4cyIKLQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CiAgICAgICAgIFRocmVhZGVkQ0FOU29ja2V0VGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCiAKQEAgLTEzOTQsNiArMTQ4Myw0NiBAQAogICAgICAgICBzZWxmLmNmMiA9IHNlbGYuYnVpbGRfY2FuX2ZyYW1lKDB4MTIsIGInXHg5OVx4MjJceDMzJykKICAgICAgICAgc2VsZi5jbGkuc2VuZChzZWxmLmNmMikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIF90ZXN0QkNNKHNlbGYpOgorICAgICAgICBjZiwgYWRkciA9IHNlbGYuY2xpLnJlY3Zmcm9tKHNlbGYuYnVmc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNmLCBjZikKKyAgICAgICAgY2FuX2lkLCBjYW5fZGxjLCBkYXRhID0gc2VsZi5kaXNzZWN0X2Nhbl9mcmFtZShjZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNhbl9pZCwgY2FuX2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGF0YSwgZGF0YSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RCQ00oc2VsZik6CisgICAgICAgIGJjbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfREdSQU0sIHNvY2tldC5DQU5fQkNNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYmNtLmNsb3NlKQorICAgICAgICBiY20uY29ubmVjdCgoc2VsZi5pbnRlcmZhY2UsKSkKKyAgICAgICAgc2VsZi5jYW5faWQgPSAweDEyMworICAgICAgICBzZWxmLmRhdGEgPSBieXRlcyhbMHhjMCwgMHhmZiwgMHhlZV0pCisgICAgICAgIHNlbGYuY2YgPSBzZWxmLmJ1aWxkX2Nhbl9mcmFtZShzZWxmLmNhbl9pZCwgc2VsZi5kYXRhKQorICAgICAgICBvcGNvZGUgPSBzb2NrZXQuQ0FOX0JDTV9UWF9TRU5ECisgICAgICAgIGZsYWdzID0gMAorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgaXZhbDFfc2Vjb25kcyA9IGl2YWwxX3VzZWMgPSBpdmFsMl9zZWNvbmRzID0gaXZhbDJfdXNlYyA9IDAKKyAgICAgICAgYmNtX2Nhbl9pZCA9IDB4MDIyMgorICAgICAgICBuZnJhbWVzID0gMQorICAgICAgICBhc3NlcnQgbGVuKHNlbGYuY2YpID09IDE2CisgICAgICAgIGhlYWRlciA9IHN0cnVjdC5wYWNrKHNlbGYuYmNtX2NtZF9tc2dfZm10LAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUsCisgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgaXZhbDFfc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgaXZhbDFfdXNlYywKKyAgICAgICAgICAgICAgICAgICAgaXZhbDJfc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgaXZhbDJfdXNlYywKKyAgICAgICAgICAgICAgICAgICAgYmNtX2Nhbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgbmZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBoZWFkZXJfcGx1c19mcmFtZSA9IGhlYWRlciArIHNlbGYuY2YKKyAgICAgICAgYnl0ZXNfc2VudCA9IGJjbS5zZW5kKGhlYWRlcl9wbHVzX2ZyYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzX3NlbnQsIGxlbihoZWFkZXJfcGx1c19mcmFtZSkpCisKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9TT0NLRVRfUkRTLCAnUkRTIHNvY2tldHMgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQmFzaWNSRFNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE2MDgsNyArMTczNyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwgZmlsZW5vKQogICAgICAgICAjIGNsaV9jb25uIGNhbm5vdCBiZSB1c2VkIGFueW1vcmUuLi4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2xpX2Nvbm4uX2Nsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKICAgICAgICAgc2VsZi5jbGlfY29ubi5jbG9zZSgpCiAgICAgICAgICMgLi4uYnV0IHdlIGNhbiBjcmVhdGUgYW5vdGhlciBzb2NrZXQgdXNpbmcgdGhlIChzdGlsbCBvcGVuKQogICAgICAgICAjIGZpbGUgZGVzY3JpcHRvcgpAQCAtMTk3Nyw3ICsyMTA2LDcgQEAKICAgICBkZWYgX3Rlc3RTZW5kbXNnRXhjZXNzQ21zZ1JlamVjdChzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAiQ01TR19TUEFDRSIpOgogICAgICAgICAgICAgIyBDYW4gb25seSBzZW5kIG9uZSBpdGVtCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgICAgIHNlbGYuc2VuZG1zZ1RvU2VydmVyKFtNU0ddLCBbKDAsIDAsIGIiIiksICgwLCAwLCBiIiIpXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNtLmV4Y2VwdGlvbi5lcnJubykKICAgICAgICAgc2VsZi5zZW5kVG9TZXJ2ZXIoYiJkb25lIikKQEAgLTE5ODgsNyArMjExNyw3IEBACiAKICAgICBkZWYgX3Rlc3RTZW5kbXNnQWZ0ZXJDbG9zZShzZWxmKToKICAgICAgICAgc2VsZi5jbGlfc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIsIFtNU0ddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLnNlbmRtc2dUb1NlcnZlciwgW01TR10pCiAKIAogY2xhc3MgU2VuZG1zZ1N0cmVhbVRlc3RzKFNlbmRtc2dUZXN0cyk6CkBAIC0yMDMyLDcgKzIxNjEsNyBAQAogICAgIEB0ZXN0U2VuZG1zZ0RvbnRXYWl0LmNsaWVudF9za2lwCiAgICAgZGVmIF90ZXN0U2VuZG1zZ0RvbnRXYWl0KHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZG1zZ1RvU2VydmVyKFtiImEiKjUxMl0sIFtdLCBzb2NrZXQuTVNHX0RPTlRXQUlUKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjbS5leGNlcHRpb24uZXJybm8sCkBAIC0yMDUyLDkgKzIxODEsOSBAQAogICAgICAgICBwYXNzCiAKICAgICBkZWYgX3Rlc3RTZW5kbXNnTm9EZXN0QWRkcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgW01TR10pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtNU0ddLCBbXSwgMCwgTm9uZSkKIAogCkBAIC0yMTQwLDcgKzIyNjksNyBAQAogICAgIGRlZiB0ZXN0UmVjdm1zZ0FmdGVyQ2xvc2Uoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCByZWN2bXNnW19pbnRvXSgpIGZhaWxzIG9uIGEgY2xvc2VkIHNvY2tldC4KICAgICAgICAgc2VsZi5zZXJ2X3NvY2suY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuZG9SZWN2bXNnLCBzZWxmLnNlcnZfc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5kb1JlY3Ztc2csIHNlbGYuc2Vydl9zb2NrLCAxMDI0KQogCiAgICAgZGVmIF90ZXN0UmVjdm1zZ0FmdGVyQ2xvc2Uoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTI1ODYsNyArMjcxNSw3IEBACiAgICAgICAgICMgY2FsbCBmYWlscywganVzdCBzZW5kIG1zZyB3aXRoIG5vIGFuY2lsbGFyeSBkYXRhLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcihbbXNnXSwgYW5jZGF0YSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBDaGVjayB0aGF0IGl0IHdhcyB0aGUgc3lzdGVtIGNhbGwgdGhhdCBmYWlsZWQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLmVycm5vLCBpbnQpCiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcihbbXNnXSkKQEAgLTI5NjQsNyArMzA5Myw3IEBACiAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSgiaSIsIFtzZWxmLnRyYWZmaWNfY2xhc3NdKS50b2J5dGVzKCkgKyBiIlx4MDAiKSwKICAgICAgICAgICAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUExJTUlULAogICAgICAgICAgICAgICAgICAgYXJyYXkuYXJyYXkoImkiLCBbc2VsZi5ob3BfbGltaXRdKSldKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5lcnJubywgaW50KQogICAgICAgICAgICAgbmJ5dGVzID0gc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoCiAgICAgICAgICAgICAgICAgW01TR10sCkBAIC0zNDIyLDEwICszNTUxLDEwIEBACiAgICAgICAgIHNlbGYuc2Vydi5zZXR0aW1lb3V0KHNlbGYudGltZW91dCkKIAogICAgIGRlZiBjaGVja0ludGVycnVwdGVkUmVjdihzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAjIENoZWNrIHRoYXQgZnVuYygqYXJncywgKiprd2FyZ3MpIHJhaXNlcyBzb2NrZXQuZXJyb3Igd2l0aCBhbgorICAgICAgICAjIENoZWNrIHRoYXQgZnVuYygqYXJncywgKiprd2FyZ3MpIHJhaXNlcyBPU0Vycm9yIHdpdGggYW4KICAgICAgICAgIyBlcnJubyBvZiBFSU5UUiB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLgogICAgICAgICBzZWxmLnNldEFsYXJtKHNlbGYuYWxhcm1fdGltZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjbS5leGNlcHRpb24sIHNvY2tldC50aW1lb3V0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVFIpCkBAIC0zNDgyLDkgKzM2MTEsOSBAQAogCiAgICAgZGVmIGNoZWNrSW50ZXJydXB0ZWRTZW5kKHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncyksIHJ1biBpbiBhIGxvb3AsIHJhaXNlcwotICAgICAgICAjIHNvY2tldC5lcnJvciB3aXRoIGFuIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYQorICAgICAgICAjIE9TRXJyb3Igd2l0aCBhbiBlcnJubyBvZiBFSU5UUiB3aGVuIGludGVycnVwdGVkIGJ5IGEKICAgICAgICAgIyBzaWduYWwuCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgc2VsZi5zZXRBbGFybShzZWxmLmFsYXJtX3RpbWUpCiAgICAgICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCkBAIC0zNTgxLDcgKzM3MTAsNyBAQAogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc2Vydi5hY2NlcHQoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmQgLSBzdGFydCkgPCAxLjAsICJFcnJvciBzZXR0aW5nIG5vbi1ibG9ja2luZyBtb2RlLiIpCkBAIC0zNjA2LDcgKzM3MzUsNyBAQAogICAgICAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc2Vydi5hY2NlcHQoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIGNyZWF0aW5nIHdpdGggbm9uLWJsb2NraW5nIG1vZGUuIikKQEAgLTM2MzYsNyArMzc2NSw3IEBACiAgICAgICAgIHNlbGYuc2Vydi5zZXRibG9ja2luZygwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIGFjY2VwdC4iKQpAQCAtMzY2Niw3ICszNzk1LDcgQEAKICAgICAgICAgY29ubi5zZXRibG9ja2luZygwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YobGVuKE1TRykpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIHJlY3YuIikKQEAgLTM3NDksNyArMzg3OCw3IEBACiAgICAgICAgICMgRmlyc3QgcmVhZCByYWlzZXMgYSB0aW1lb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBzZWxmLnJlYWRfZmlsZS5yZWFkLCAxKQogICAgICAgICAjIFNlY29uZCByZWFkIGlzIGRpc2FsbG93ZWQKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjdHg6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY3R4OgogICAgICAgICAgICAgc2VsZi5yZWFkX2ZpbGUucmVhZCgxKQogICAgICAgICBzZWxmLmFzc2VydEluKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiLCBzdHIoY3R4LmV4Y2VwdGlvbikpCiAKQEAgLTM4NDEsNyArMzk3MCw3IEBACiAgICAgICAgIHNlbGYucmVhZF9maWxlLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5yZWFkX2ZpbGUuZmlsZW5vKQogICAgICAgICBzZWxmLmNsaV9jb25uLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLmdldHNvY2tuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9jb25uLmdldHNvY2tuYW1lKQogCiAgICAgZGVmIF90ZXN0UmVhbENsb3NlKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC0zODc4LDcgKzQwMDcsNyBAQAogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfcmFpc2VfZWludHIoKToKLSAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVJTlRSLCAiaW50ZXJydXB0ZWQiKQorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlRSLCAiaW50ZXJydXB0ZWQiKQogCiAgICAgZGVmIF90ZXh0aW93cmFwX21vY2tfc29ja2V0KHNlbGYsIG1vY2ssIGJ1ZmZlcmluZz0tMSk6CiAgICAgICAgIHJhdyA9IHNvY2tldC5Tb2NrZXRJTyhtb2NrLCAiciIpCkBAIC0zOTkwLDcgKzQxMTksNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgc2VsZi5yZWFkX21zZykKICAgICAgICAgIyAuLi51bnRpbCB0aGUgZmlsZSBpcyBpdHNlbGYgY2xvc2VkCiAgICAgICAgIHNlbGYucmVhZF9maWxlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKIAogICAgIGRlZiBfdGVzdE1ha2VmaWxlQ2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVfZmlsZS53cml0ZShzZWxmLndyaXRlX21zZykKQEAgLTQxMzksNyArNDI2OCw3IEBACiAgICAgICAgIHBvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQogICAgICAgICBjbGkgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGkuY2xvc2UpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGNsaS5jb25uZWN0KChIT1NULCBwb3J0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVDT05OUkVGVVNFRCkKIApAQCAtNDE0Nyw3ICs0Mjc2LDcgQEAKICAgICAgICAgIyBJc3N1ZSAjOTc5MjogZXJyb3JzIHJhaXNlZCBieSBjcmVhdGVfY29ubmVjdGlvbigpIHNob3VsZCBoYXZlCiAgICAgICAgICMgYSBwcm9wZXIgZXJybm8gYXR0cmlidXRlLgogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBwb3J0KSkKIAogICAgICAgICAjIElzc3VlICMxNjI1NzogY3JlYXRlX2Nvbm5lY3Rpb24oKSBjYWxscyBnZXRhZGRyaW5mbygpIGFnYWluc3QKQEAgLTQyOTUsNyArNDQyNCw3IEBACiAgICAgICAgICAgICBmb28gPSBzZWxmLnNlcnYuYWNjZXB0KCkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdGltZW91dCBpbnN0ZWFkIG9mIGVycm9yIChUQ1ApIikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBvayA9IFRydWUKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdW5leHBlY3RlZCBleGNlcHRpb24gKFRDUCkiKQpAQCAtNDM1Miw3ICs0NDgxLDcgQEAKICAgICAgICAgICAgIGZvbyA9IHNlbGYuc2Vydi5yZWN2KDEwMjQpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHRpbWVvdXQgaW5zdGVhZCBvZiBlcnJvciAoVURQKSIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgb2sgPSBUcnVlCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIChVRFApIikKQEAgLTQzNjIsMTAgKzQ0OTEsMTAgQEAKIGNsYXNzIFRlc3RFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0RXhjZXB0aW9uVHJlZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmVycm9yLCBFeGNlcHRpb24pKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBzb2NrZXQuZXJyb3IpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZ2FpZXJyb3IsIHNvY2tldC5lcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC50aW1lb3V0LCBzb2NrZXQuZXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhPU0Vycm9yLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBPU0Vycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmdhaWVycm9yLCBPU0Vycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LnRpbWVvdXQsIE9TRXJyb3IpKQogCiBjbGFzcyBUZXN0TGludXhBYnN0cmFjdE5hbWVzcGFjZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTQzOTEsNyArNDUyMCw3IEBACiAgICAgZGVmIHRlc3ROYW1lT3ZlcmZsb3coc2VsZik6CiAgICAgICAgIGFkZHJlc3MgPSAiXHgwMCIgKyAiaCIgKiBzZWxmLlVOSVhfUEFUSF9NQVgKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHMuYmluZCwgYWRkcmVzcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHMuYmluZCwgYWRkcmVzcykKIAogICAgIGRlZiB0ZXN0U3RyTmFtZShzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IGFuIGFic3RyYWN0IG5hbWUgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZy4KQEAgLTQ2MzAsNyArNDc1OSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCiAgICAgICAgICMgZXhjZXB0aW9uIGluc2lkZSB3aXRoIGJsb2NrCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2suc2VuZGFsbCwgYidmb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCiAKICAgICBkZWYgdGVzdENyZWF0ZUNvbm5lY3Rpb25CYXNlKHNlbGYpOgpAQCAtNDY1OCwxOSArNDc4Nyw3NiBAQAogICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzKSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2suc2VuZGFsbCwgYidmb28nKQogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiU09DS19DTE9FWEVDIiksCi0gICAgICAgICAgICAgICAgICAgICAiU09DS19DTE9FWEVDIG5vdCBkZWZpbmVkIikKLUB1bml0dGVzdC5za2lwVW5sZXNzKGZjbnRsLCAibW9kdWxlIGZjbnRsIG5vdCBhdmFpbGFibGUiKQotY2xhc3MgQ2xvZXhlY0NvbnN0YW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBJbmhlcml0YW5jZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiU09DS19DTE9FWEVDIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNPQ0tfQ0xPRVhFQyBub3QgZGVmaW5lZCIpCiAgICAgQHN1cHBvcnQucmVxdWlyZXNfbGludXhfdmVyc2lvbigyLCA2LCAyOCkKICAgICBkZWYgdGVzdF9TT0NLX0NMT0VYRUMoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX0NMT0VYRUMpIGFzIHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy50eXBlICYgc29ja2V0LlNPQ0tfQ0xPRVhFQykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChzLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuZ2V0X2luaGVyaXRhYmxlKCkpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9kdXAoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgbmV3c29jayA9IHNvY2suZHVwKCkKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBuZXdzb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3c29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9zZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgc29jay5zZXRfaW5oZXJpdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgVHJ1ZSkKKworICAgICAgICAgICAgc29jay5zZXRfaW5oZXJpdGFibGUoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3RfZ2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorCisgICAgICAgICAgICAjIGNsZWFyIEZEX0NMT0VYRUMgZmxhZworICAgICAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkKKyAgICAgICAgICAgIGZsYWdzICY9IH5mY250bC5GRF9DTE9FWEVDCisgICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgZmxhZ3MpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoZmNudGwgaXMgTm9uZSwgIm5lZWQgZmNudGwiKQorICAgIGRlZiB0ZXN0X3NldF9pbmhlcml0YWJsZV9jbG9leGVjKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5GRF9DTE9FWEVDKQorCisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKQorCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgInNvY2tldHBhaXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZCBzb2NrZXQuc29ja2V0cGFpcigpIikKKyAgICBkZWYgdGVzdF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzMSwgczIgPSBzb2NrZXQuc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzMS5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMyLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMi5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX05PTkJMT0NLIiksCkBAIC00ODM5LDcgKzUwMjUsNyBAQAogICAgICAgICBOZXR3b3JrQ29ubmVjdGlvbkF0dHJpYnV0ZXNUZXN0LAogICAgICAgICBOZXR3b3JrQ29ubmVjdGlvbkJlaGF2aW91clRlc3QsCiAgICAgICAgIENvbnRleHRNYW5hZ2Vyc1Rlc3QsCi0gICAgICAgIENsb2V4ZWNDb25zdGFudFRlc3QsCisgICAgICAgIEluaGVyaXRhbmNlVGVzdCwKICAgICAgICAgTm9uYmxvY2tDb25zdGFudFRlc3QKICAgICBdKQogICAgIGlmIGhhc2F0dHIoc29ja2V0LCAic29ja2V0cGFpciIpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQppbmRleCA0NjQwNTdlLi4wMmM2YzFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQpAQCAtMiw4ICsyLDggQEAKIFRlc3Qgc3VpdGUgZm9yIHNvY2tldHNlcnZlci4KICIiIgogCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgaW1wCiBpbXBvcnQgb3MKIGltcG9ydCBzZWxlY3QKIGltcG9ydCBzaWduYWwKQEAgLTI3LDcgKzI3LDcgQEAKIEhPU1QgPSB0ZXN0LnN1cHBvcnQuSE9TVAogCiBIQVZFX1VOSVhfU09DS0VUUyA9IGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpCi1IQVZFX0ZPUktJTkcgPSBoYXNhdHRyKG9zLCAiZm9yayIpIGFuZCBvcy5uYW1lICE9ICJvczIiCitIQVZFX0ZPUktJTkcgPSBoYXNhdHRyKG9zLCAiZm9yayIpCiAKIGRlZiBzaWduYWxfYWxhcm0obik6CiAgICAgIiIiQ2FsbCBzaWduYWwuYWxhcm0gd2hlbiBpdCBleGlzdHMgKGkuZS4gbm90IG9uIFdpbmRvd3MpLiIiIgpAQCAtODIsNyArODIsNyBAQAogICAgICAgICBmb3IgZm4gaW4gc2VsZi50ZXN0X2ZpbGVzOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzWzpdID0gW10KIApAQCAtOTMsMjEgKzkzLDcgQEAKICAgICAgICAgICAgICMgWFhYOiBXZSBuZWVkIGEgd2F5IHRvIHRlbGwgQUZfVU5JWCB0byBwaWNrIGl0cyBvd24gbmFtZQogICAgICAgICAgICAgIyBsaWtlIEFGX0lORVQgcHJvdmlkZXMgcG9ydD09MC4KICAgICAgICAgICAgIGRpciA9IE5vbmUKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgICAgICAgICAgZGlyID0gJ1xzb2NrZXQnCiAgICAgICAgICAgICBmbiA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J3VuaXhfc29ja2V0LicsIGRpcj1kaXIpCi0gICAgICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgICAgICMgQUZfVU5JWCBzb2NrZXQgbmFtZXMgb24gT1MvMiByZXF1aXJlIGEgc3BlY2lmaWMgcHJlZml4Ci0gICAgICAgICAgICAgICAgIyB3aGljaCBjYW4ndCBpbmNsdWRlIGEgZHJpdmUgbGV0dGVyIGFuZCBtdXN0IGFsc28gdXNlCi0gICAgICAgICAgICAgICAgIyBiYWNrc2xhc2hlcyBhcyBkaXJlY3Rvcnkgc2VwYXJhdG9ycwotICAgICAgICAgICAgICAgIGlmIGZuWzFdID09ICc6JzoKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmblsyOl0KLSAgICAgICAgICAgICAgICBpZiBmblswXSBpbiAob3Muc2VwLCBvcy5hbHRzZXApOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuWzE6XQotICAgICAgICAgICAgICAgIGlmIG9zLnNlcCA9PSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm4ucmVwbGFjZShvcy5zZXAsIG9zLmFsdHNlcCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuLnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCiAgICAgICAgICAgICBzZWxmLnRlc3RfZmlsZXMuYXBwZW5kKGZuKQogICAgICAgICAgICAgcmV0dXJuIGZuCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5ZDJiMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CkBAIC0wLDAgKzEsMTM1IEBACisjIC0qLSBjb2Rpbmc6IGtvaTgtciAtKi0KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmssIHVubG9hZAoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2NsYXNzIFNvdXJjZUVuY29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9wZXAyNjMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAi8MnUz84iLmVuY29kZSgidXRmLTgiKSwKKyAgICAgICAgICAgIGInXHhkMFx4OWZceGQwXHhiOFx4ZDFceDgyXHhkMFx4YmVceGQwXHhiZCcKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIlzwIi5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICBiJ1xcXHhkMFx4OWYnCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVzdHJpbmcoc2VsZik6CisgICAgICAgICMgc2VlICMxODgyCisgICAgICAgIGMgPSBjb21waWxlKGIiXG4jIGNvZGluZzogdXRmLThcbnUgPSAnXHhjM1x4YjMnXG4iLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsndSddLCAnXHhmMycpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTIzMDEoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbXBpbGUoYiIjIGNvZGluZzogY3A5MzJcbnByaW50ICdceDk0XHg0ZSciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyB2OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnRleHQsICJwcmludCAnXHU1ZTc0J1xuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTQ2MjYoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlKCIjIGNvZGluZz1sYXRpbi0xXG5cdTAwYzYgPSAnXHUwMGM2JyIsICJkdW1teSIsICJleGVjIikKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGV4ZWMoYywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydceGM2J10sICdceGM2JykKKworICAgIGRlZiB0ZXN0X2lzc3VlMzI5NyhzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGUoImEsIGIgPSAnXFUwMDAxMDEwRicsICdcXFUwMDAxMDEwRiciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCBkWydiJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRbJ2EnXSksIGxlbihkWydiJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKGRbJ2EnXSksIGFzY2lpKGRbJ2InXSkpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTc4MjAoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgY2hlY2tfYm9tKCkgcmVzdG9yZXMgYWxsIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlciBpZgorICAgICAgICAjIGNoZWNrX2JvbSgpIGZhaWxzIGluIHB5ZGVidWcgbW9kZTogYSBidWZmZXIgc3RhcnRzIHdpdGggdGhlIGZpcnN0CisgICAgICAgICMgYnl0ZSBvZiBhIHZhbGlkIEJPTSwgYnV0IG5leHQgYnl0ZXMgYXJlIGRpZmZlcmVudAorCisgICAgICAgICMgb25lIGJ5dGUgaW4gY29tbW9uIHdpdGggdGhlIFVURi0xNi1MRSBCT00KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGInXHhmZlx4MjAnKQorCisgICAgICAgICMgdHdvIGJ5dGVzIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtOCBCT00KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGInXHhlZlx4YmJceDIwJykKKworICAgIGRlZiB0ZXN0X2Vycm9yX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGNvbXBpbGUoYicjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmXG4nLCAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6CisgICAgICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdpc28tODg1OS0xNScpOgorICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLAorICAgICAgICAgICAgICAgICAgICAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ0JPTScpOgorICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLAorICAgICAgICAgICAgICAgICAgICAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2Zha2UnKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ0JPTScpOgorICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKKworICAgIGRlZiB0ZXN0X2JhZF9jb2Rpbmcoc2VsZik6CisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcnCisgICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nMihzZWxmKToKKyAgICAgICAgbW9kdWxlX25hbWUgPSAnYmFkX2NvZGluZzInCisgICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCisKKyAgICBkZWYgdmVyaWZ5X2JhZF9tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgX19pbXBvcnRfXywgJ3Rlc3QuJyArIG1vZHVsZV9uYW1lKQorCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG1vZHVsZV9uYW1lICsgJy5weScpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CisgICAgICAgICAgICBieXRlcyA9IGZwLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgYnl0ZXMsIGZpbGVuYW1lLCAnZXhlYycpCisKKyAgICBkZWYgdGVzdF9leGVjX3ZhbGlkX2NvZGluZyhzZWxmKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGV4ZWMoYicjIGNvZGluZzogY3A5NDlcbmEgPSAiXHhhYVx4YTciXG4nLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgJ1x1MzA0NycpCisKKyAgICBkZWYgdGVzdF9maWxlX3BhcnNlKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTEzNDogYWxsIGVuY29kaW5ncyBvdXRzaWRlIGxhdGluLTEgYW5kIHV0Zi04IGZhaWwgb24KKyAgICAgICAgIyBtdWx0aWxpbmUgc3RyaW5ncyBhbmQgbG9uZyBsaW5lcyAoPjUxMiBjb2x1bW5zKQorICAgICAgICB1bmxvYWQoVEVTVEZOKQorICAgICAgICBmaWxlbmFtZSA9IFRFU1RGTiArICIucHkiCisgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPSJjcDEyNTIiKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiIyAtKi0gY29kaW5nOiBjcDEyNTIgLSotXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIicnJ0Egc2hvcnQgc3RyaW5nXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIicnJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInQSB2ZXJ5IGxvbmcgc3RyaW5nICVzJ1xuIiAlICgiWCIgKiAxMDAwKSkKKworICAgICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUpCisgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAiYyIpCisgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAibyIpCisgICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZXJyb3JfZnJvbV9zdHJpbmcoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2Mjg5CisgICAgICAgIGlucHV0ID0gIiMgY29kaW5nOiBhc2NpaVxuXE57U05PV01BTn0iLmVuY29kZSgndXRmLTgnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKSBhcyBjOgorICAgICAgICAgICAgY29tcGlsZShpbnB1dCwgIjxzdHJpbmc+IiwgImV4ZWMiKQorICAgICAgICBleHBlY3RlZCA9ICInYXNjaWknIGNvZGVjIGNhbid0IGRlY29kZSBieXRlIDB4ZTIgaW4gcG9zaXRpb24gMTY6ICIgXAorICAgICAgICAgICAgICAgICAgICJvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpIgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5leGNlcHRpb24uYXJnc1swXS5zdGFydHN3aXRoKGV4cGVjdGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1jLmV4Y2VwdGlvbi5hcmdzWzBdKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NzbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CmluZGV4IDA2ZDQ1OTguLmIxY2I4YzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CkBAIC02LDYgKzYsNyBAQAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHRpbWUKK2ltcG9ydCBkYXRldGltZQogaW1wb3J0IGdjCiBpbXBvcnQgb3MKIGltcG9ydCBlcnJubwpAQCAtMTcsMTYgKzE4LDExIEBACiBpbXBvcnQgd2Vha3JlZgogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgZnVuY3Rvb2xzCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiAKIHNzbCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgic3NsIikKIAotUFJPVE9DT0xTID0gWwotICAgIHNzbC5QUk9UT0NPTF9TU0x2MywKLSAgICBzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEKLV0KLWlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKLSAgICBQUk9UT0NPTFMuYXBwZW5kKHNzbC5QUk9UT0NPTF9TU0x2MikKLQorUFJPVE9DT0xTID0gc29ydGVkKHNzbC5fUFJPVE9DT0xfTkFNRVMpCiBIT1NUID0gc3VwcG9ydC5IT1NUCiAKIGRhdGFfZmlsZSA9IGxhbWJkYSBuYW1lOiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgbmFtZSkKQEAgLTQ4LDYgKzQ0LDExIEBACiBDQVBBVEggPSBkYXRhX2ZpbGUoImNhcGF0aCIpCiBCWVRFU19DQVBBVEggPSBvcy5mc2VuY29kZShDQVBBVEgpCiAKKyMgVHdvIGtleXMgYW5kIGNlcnRzIHNpZ25lZCBieSB0aGUgc2FtZSBDQSAoZm9yIFNOSSB0ZXN0cykKK1NJR05FRF9DRVJURklMRSA9IGRhdGFfZmlsZSgia2V5Y2VydDMucGVtIikKK1NJR05FRF9DRVJURklMRTIgPSBkYXRhX2ZpbGUoImtleWNlcnQ0LnBlbSIpCitTSUdOSU5HX0NBID0gZGF0YV9maWxlKCJweWNhY2VydC5wZW0iKQorCiBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQgPSBkYXRhX2ZpbGUoImh0dHBzX3N2bl9weXRob25fb3JnX3Jvb3QucGVtIikKIAogRU1QVFlDRVJUID0gZGF0YV9maWxlKCJudWxsY2VydC5wZW0iKQpAQCAtNjAsNiArNjEsNyBAQAogREhGSUxFID0gZGF0YV9maWxlKCJkaDUxMi5wZW0iKQogQllURVNfREhGSUxFID0gb3MuZnNlbmNvZGUoREhGSUxFKQogCisKIGRlZiBoYW5kbGVfZXJyb3IocHJlZml4KToKICAgICBleGNfZm9ybWF0ID0gJyAnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpKSkKICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC03Myw2ICs3NSwxOSBAQAogICAgICMgMC45LjdoIG9yIGhpZ2hlcgogICAgIHJldHVybiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPj0gKDAsIDksIDcsIDgsIDE1KQogCitkZWYgYXNuMXRpbWUoY2VydF90aW1lKToKKyAgICAjIFNvbWUgdmVyc2lvbnMgb2YgT3BlblNTTCBpZ25vcmUgc2Vjb25kcywgc2VlICMxODIwNworICAgICMgMC45LjguaQorICAgIGlmIHNzbC5fT1BFTlNTTF9BUElfVkVSU0lPTiA9PSAoMCwgOSwgOCwgOSwgMTUpOgorICAgICAgICBmbXQgPSAiJWIgJWQgJUg6JU06JVMgJVkgR01UIgorICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lKGNlcnRfdGltZSwgZm10KQorICAgICAgICBkdCA9IGR0LnJlcGxhY2Uoc2Vjb25kPTApCisgICAgICAgIGNlcnRfdGltZSA9IGR0LnN0cmZ0aW1lKGZtdCkKKyAgICAgICAgIyAlZCBhZGRzIGxlYWRpbmcgemVybyBidXQgQVNOMV9USU1FX3ByaW50KCkgdXNlcyBsZWFkaW5nIHNwYWNlCisgICAgICAgIGlmIGNlcnRfdGltZVs0XSA9PSAiMCI6CisgICAgICAgICAgICBjZXJ0X3RpbWUgPSBjZXJ0X3RpbWVbOjRdICsgIiAiICsgY2VydF90aW1lWzU6XQorCisgICAgcmV0dXJuIGNlcnRfdGltZQogCiAjIElzc3VlICM5NDE1OiBVYnVudHUgaGlqYWNrcyB0aGVpciBPcGVuU1NMIGFuZCBmb3JjZWZ1bGx5IGRpc2FibGVzIFNTTHYyCiBkZWYgc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbChmdW5jKToKQEAgLTkwLDE0ICsxMDUsMTIgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gZnVuYwogCituZWVkc19zbmkgPSB1bml0dGVzdC5za2lwVW5sZXNzKHNzbC5IQVNfU05JLCAiU05JIHN1cHBvcnQgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorCiAKIGNsYXNzIEJhc2ljU29ja2V0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgotICAgICAgICAjc3NsLlBST1RPQ09MX1NTTHYyCi0gICAgICAgIHNzbC5QUk9UT0NPTF9TU0x2MjMKLSAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYzCi0gICAgICAgIHNzbC5QUk9UT0NPTF9UTFN2MQogICAgICAgICBzc2wuQ0VSVF9OT05FCiAgICAgICAgIHNzbC5DRVJUX09QVElPTkFMCiAgICAgICAgIHNzbC5DRVJUX1JFUVVJUkVECkBAIC0xNzUsOCArMTg4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uTmFtZScsICdQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbicpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnbG9jYWxob3N0JyksKSkKICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RBZnRlciddLCAnT2N0ICA1IDIzOjAxOjU2IDIwMjAgR01UJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RCZWZvcmUnXSwgJ09jdCAgOCAyMzowMTo1NiAyMDEwIEdNVCcpCisgICAgICAgICMgTm90ZSB0aGUgbmV4dCB0aHJlZSBhc3NlcnRzIHdpbGwgZmFpbCBpZiB0aGUga2V5cyBhcmUgcmVnZW5lcmF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RBZnRlciddLCBhc24xdGltZSgnT2N0ICA1IDIzOjAxOjU2IDIwMjAgR01UJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnbm90QmVmb3JlJ10sIGFzbjF0aW1lKCdPY3QgIDggMjM6MDE6NTYgMjAxMCBHTVQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydzZXJpYWxOdW1iZXInXSwgJ0Q3QzczODE5MTlBRkMyNEUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ3N1YmplY3QnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnY291bnRyeU5hbWUnLCAnWFknKSwpLApAQCAtMjc2LDE1ICsyOTAsMTUgQEAKIAogICAgIGRlZiB0ZXN0X3dyYXBwZWRfdW5jb25uZWN0ZWQoc2VsZik6CiAgICAgICAgICMgTWV0aG9kcyBvbiBhbiB1bmNvbm5lY3RlZCBTU0xTb2NrZXQgcHJvcGFnYXRlIHRoZSBvcmlnaW5hbAotICAgICAgICAjIHNvY2tldC5lcnJvciByYWlzZSBieSB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgorICAgICAgICAjIE9TRXJyb3IgcmFpc2UgYnkgdGhlIHVuZGVybHlpbmcgc29ja2V0IG9iamVjdC4KICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCiAgICAgICAgIHdpdGggc3NsLndyYXBfc29ja2V0KHMpIGFzIHNzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2LCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2X2ludG8sIGJ5dGVhcnJheShiJ3gnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdmZyb20sIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3Zmcm9tX2ludG8sIGJ5dGVhcnJheShiJ3gnKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3Muc2VuZCwgYid4JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3Muc2VuZHRvLCBiJ3gnLCAoJzAuMC4wLjAnLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3YsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5yZWN2X2ludG8sIGJ5dGVhcnJheShiJ3gnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3Zmcm9tLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdmZyb21faW50bywgYnl0ZWFycmF5KGIneCcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3Muc2VuZCwgYid4JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnNlbmR0bywgYid4JywgKCcwLjAuMC4wJywgMCkpCiAKICAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgogICAgICAgICAjIElzc3VlICM4NTI0OiB3aGVuIGNyZWF0aW5nIGFuIFNTTCBzb2NrZXQsIHRoZSB0aW1lb3V0IG9mIHRoZQpAQCAtMzA5LDE1ICszMjMsMTUgQEAKICAgICAgICAgd2l0aCBzc2wud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSwgY2VydGZpbGU9Q0VSVEZJTEUpIGFzIHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYW4ndCBjb25uZWN0IGluIHNlcnZlci1zaWRlIG1vZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0LCAoSE9TVCwgODA4MCkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1DRVJURklMRSwga2V5ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1XUk9OR0NFUlQsIGtleWZpbGU9V1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQpAQCAtNDg5LDE1ICs1MDMsNDggQEAKICAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ociwgc3RyKGNtLndhcm5pbmcuYXJnc1swXSkpCiAKKyAgICBkZWYgdGVzdF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzID0gc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhdGhzKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhdGhzLCBzc2wuRGVmYXVsdFZlcmlmeVBhdGhzKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9ESVIiXSA9IENBUEFUSAorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9GSUxFIl0gPSBDRVJURklMRQorICAgICAgICAgICAgcGF0aHMgPSBzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FmaWxlLCBDRVJURklMRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FwYXRoLCBDQVBBVEgpCisKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBzcGVjaWZpYyIpCisgICAgZGVmIHRlc3RfZW51bV9jZXJ0X3N0b3JlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5YNTA5X0FTTl9FTkNPRElORywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUEtDU183X0FTTl9FTkNPRElORywgMHgwMDAxMDAwMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5lbnVtX2NlcnRfc3RvcmUoIkNBIiksCisgICAgICAgICAgICBzc2wuZW51bV9jZXJ0X3N0b3JlKCJDQSIsICJjZXJ0aWZpY2F0ZSIpKQorICAgICAgICBzc2wuZW51bV9jZXJ0X3N0b3JlKCJDQSIsICJjcmwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5lbnVtX2NlcnRfc3RvcmUoIlJPT1QiKSwKKyAgICAgICAgICAgIHNzbC5lbnVtX2NlcnRfc3RvcmUoIlJPT1QiLCAiY2VydGlmaWNhdGUiKSkKKyAgICAgICAgc3NsLmVudW1fY2VydF9zdG9yZSgiUk9PVCIsICJjcmwiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLmVudW1fY2VydF9zdG9yZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBzc2wuZW51bV9jZXJ0X3N0b3JlLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLmVudW1fY2VydF9zdG9yZSwgIkNBIiwgIndyb25nIikKKworICAgICAgICBjYSA9IHNzbC5lbnVtX2NlcnRfc3RvcmUoIkNBIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNhLCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2FbMF0sIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjYVswXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjYVswXVswXSwgYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjYVswXVsxXSwgaW50KQorCiBjbGFzcyBDb250ZXh0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgotICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjMpCi0gICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgZm9yIHByb3RvY29sIGluIFBST1RPQ09MUzoKKyAgICAgICAgICAgIHNzbC5TU0xDb250ZXh0KHByb3RvY29sKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5TU0xDb250ZXh0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuU1NMQ29udGV4dCwgLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5TU0xDb250ZXh0LCA0MikKQEAgLTU1Nyw3ICs2MDQsNyBAQAogICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQogICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFLCBrZXlmaWxlPUNFUlRGSUxFKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2NlcnRfY2hhaW4sIGtleWZpbGU9Q0VSVEZJTEUpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKFdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIlBFTSBsaWIiKToKQEAgLTY0Miw3ICs2ODksNyBAQAogICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1CWVRFU19DRVJURklMRSwgY2FwYXRoPU5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBOb25lKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhXUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJQRU0gbGliIik6CkBAIC03MDAsNiArNzQ3LDc1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfZWNkaF9jdXJ2ZSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfZWNkaF9jdXJ2ZSwgYiJmb28iKQogCisgICAgQG5lZWRzX3NuaQorICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorCisgICAgICAgICMgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2sgZXhwZWN0cyBhIGNhbGxhYmxlLCBvciBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgY3R4KQorCisgICAgICAgIGRlZiBkdW1teWNhbGxiYWNrKHNvY2ssIHNlcnZlcm5hbWUsIGN0eCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhOb25lKQorICAgICAgICBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soZHVtbXljYWxsYmFjaykKKworICAgIEBuZWVkc19zbmkKKyAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgUmVmZXJlbmNlIGN5Y2xlcyB0aHJvdWdoIHRoZSBzZXJ2ZXJuYW1lIGNhbGxiYWNrIGFyZSBkZXRlY3RlZAorICAgICAgICAjIGFuZCBjbGVhcmVkLgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGRlZiBkdW1teWNhbGxiYWNrKHNvY2ssIHNlcnZlcm5hbWUsIGN0eCwgY3ljbGU9Y3R4KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGR1bW15Y2FsbGJhY2spCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoY3R4KQorICAgICAgICBkZWwgY3R4LCBkdW1teWNhbGxiYWNrCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jZXJ0X3N0b3JlX3N0YXRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDAsICdjcmwnOiAwLCAneDUwOSc6IDB9KQorICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAwLCAnY3JsJzogMCwgJ3g1MDknOiAwfSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLAorICAgICAgICAgICAgeyd4NTA5X2NhJzogMCwgJ2NybCc6IDAsICd4NTA5JzogMX0pCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAxLCAnY3JsJzogMCwgJ3g1MDknOiAyfSkKKworICAgIGRlZiB0ZXN0X2dldF9jYV9jZXJ0cyhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoKSwgW10pCisgICAgICAgICMgQ0VSVEZJTEUgaXMgbm90IGZsYWdnZWQgYXMgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiBDQTpUUlVFCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgIyBidXQgU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUIGlzIGEgQ0EgY2VydAorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksCisgICAgICAgICAgICBbeydpc3N1ZXInOiAoKCgnb3JnYW5pemF0aW9uTmFtZScsICdSb290IENBJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ2h0dHA6Ly93d3cuY2FjZXJ0Lm9yZycpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdDQSBDZXJ0IFNpZ25pbmcgQXV0aG9yaXR5JyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdlbWFpbEFkZHJlc3MnLCAnc3VwcG9ydEBjYWNlcnQub3JnJyksKSksCisgICAgICAgICAgICAgICdub3RBZnRlcic6IGFzbjF0aW1lKCdNYXIgMjkgMTI6Mjk6NDkgMjAzMyBHTVQnKSwKKyAgICAgICAgICAgICAgJ25vdEJlZm9yZSc6IGFzbjF0aW1lKCdNYXIgMzAgMTI6Mjk6NDkgMjAwMyBHTVQnKSwKKyAgICAgICAgICAgICAgJ3NlcmlhbE51bWJlcic6ICcwMCcsCisgICAgICAgICAgICAgICdzdWJqZWN0JzogKCgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUm9vdCBDQScpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbmFsVW5pdE5hbWUnLCAnaHR0cDovL3d3dy5jYWNlcnQub3JnJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdDQSBDZXJ0IFNpZ25pbmcgQXV0aG9yaXR5JyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnZW1haWxBZGRyZXNzJywgJ3N1cHBvcnRAY2FjZXJ0Lm9yZycpLCkpLAorICAgICAgICAgICAgICAndmVyc2lvbic6IDN9XSkKKworICAgICAgICB3aXRoIG9wZW4oU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKSBhcyBmOgorICAgICAgICAgICAgcGVtID0gZi5yZWFkKCkKKyAgICAgICAgZGVyID0gc3NsLlBFTV9jZXJ0X3RvX0RFUl9jZXJ0KHBlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKFRydWUpLCBbZGVyXSkKKwogCiBjbGFzcyBTU0xFcnJvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTAxNSw2ICsxMTMxLDIyIEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfZ2V0X2NhX2NlcnRzX2NhcGF0aChzZWxmKToKKyAgICAgICAgIyBjYXBhdGggY2VydHMgYXJlIGxvYWRlZCBvbiByZXF1ZXN0CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FwYXRoPUNBUEFUSCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgICAgIHMgPSBjdHgud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpCisgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN0eC5nZXRfY2FfY2VydHMoKSksIDEpCisKIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTExNDIsNyArMTI3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IHJlYWQgJXIgKCVzKSwgc2VuZGluZyBiYWNrICVyICglcykuLi5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChtc2csIGN0eXBlLCBtc2cubG93ZXIoKSwgY3R5cGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobXNnLmxvd2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIuY2hhdHR5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9lcnJvcigiVGVzdCBzZXJ2ZXIgZmFpbHVyZTpcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTEyNTIsNyArMTM4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTM1NiwxOSArMTQ4OCwxOSBAQAogICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5TU0xFcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbnNvY2tldC5lcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHg6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuT1NFcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgeC5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcSU9FcnJvciBpcyAlc1xuIiAlIHN0cih4KSkKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXE9TRXJyb3IgaXMgJXNcbiIgJSBzdHIoeCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJVc2Ugb2YgaW52YWxpZCBjZXJ0IHNob3VsZCBoYXZlIGZhaWxlZCEiKQogCiAgICAgZGVmIHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsIGluZGF0YT1iIkZPT1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLCBzbmlfbmFtZT1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIExhdW5jaCBhIHNlcnZlciwgY29ubmVjdCBhIGNsaWVudCB0byBpdCBhbmQgdHJ5IHZhcmlvdXMgcmVhZHMKICAgICAgICAgYW5kIHdyaXRlcy4KQEAgLTEzNzgsNyArMTUxMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9Y2hhdHR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSkKICAgICAgICAgd2l0aCBzZXJ2ZXI6Ci0gICAgICAgICAgICB3aXRoIGNsaWVudF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgIHdpdGggY2xpZW50X2NvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c25pX25hbWUpIGFzIHM6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCiAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBbaW5kYXRhLCBieXRlYXJyYXkoaW5kYXRhKSwgbWVtb3J5dmlldyhpbmRhdGEpXToKICAgICAgICAgICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKQEAgLTE0MDIsNiArMTUzNSw3IEBACiAgICAgICAgICAgICAgICAgc3RhdHMudXBkYXRlKHsKICAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzaW9uJzogcy5jb21wcmVzc2lvbigpLAogICAgICAgICAgICAgICAgICAgICAnY2lwaGVyJzogcy5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BlZXJjZXJ0Jzogcy5nZXRwZWVyY2VydCgpLAogICAgICAgICAgICAgICAgICAgICAnY2xpZW50X25wbl9wcm90b2NvbCc6IHMuc2VsZWN0ZWRfbnBuX3Byb3RvY29sKCkKICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTQyNywxMiArMTU2MSwxNSBAQAogICAgICAgICBjbGllbnRfY29udGV4dC5vcHRpb25zID0gc3NsLk9QX0FMTCB8IGNsaWVudF9vcHRpb25zCiAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc2VydmVyX3Byb3RvY29sKQogICAgICAgICBzZXJ2ZXJfY29udGV4dC5vcHRpb25zID0gc3NsLk9QX0FMTCB8IHNlcnZlcl9vcHRpb25zCisKKyAgICAgICAgIyBOT1RFOiB3ZSBtdXN0IGVuYWJsZSAiQUxMIiBjaXBoZXJzIG9uIHRoZSBjbGllbnQsIG90aGVyd2lzZSBhbgorICAgICAgICAjIFNTTHYyMyBjbGllbnQgd2lsbCBzZW5kIGFuIFNTTHYzIGhlbGxvIChyYXRoZXIgdGhhbiBTU0x2MikKKyAgICAgICAgIyBzdGFydGluZyBmcm9tIE9wZW5TU0wgMS4wLjAgKHNlZSBpc3N1ZSAjODMyMikuCisgICAgICAgIGlmIGNsaWVudF9jb250ZXh0LnByb3RvY29sID09IHNzbC5QUk9UT0NPTF9TU0x2MjM6CisgICAgICAgICAgICBjbGllbnRfY29udGV4dC5zZXRfY2lwaGVycygiQUxMIikKKwogICAgICAgICBmb3IgY3R4IGluIChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQpOgogICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gY2VydHNyZXFzCi0gICAgICAgICAgICAjIE5PVEU6IHdlIG11c3QgZW5hYmxlICJBTEwiIGNpcGhlcnMsIG90aGVyd2lzZSBhbiBTU0x2MjMgY2xpZW50Ci0gICAgICAgICAgICAjIHdpbGwgc2VuZCBhbiBTU0x2MyBoZWxsbyAocmF0aGVyIHRoYW4gU1NMdjIpIHN0YXJ0aW5nIGZyb20KLSAgICAgICAgICAgICMgT3BlblNTTCAxLjAuMCAoc2VlIGlzc3VlICM4MzIyKS4KLSAgICAgICAgICAgIGN0eC5zZXRfY2lwaGVycygiQUxMIikKICAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQogICAgICAgICB0cnk6CkBAIC0xNDQzLDcgKzE1ODAsNyBAQAogICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgogICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3M6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3Mgb3IgZS5lcnJubyAhPSBlcnJuby5FQ09OTlJFU0VUOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGVsc2U6CkBAIC0xNDYyLDEwICsxNTk5LDExIEBACiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogICAgICAgICAgICAgZm9yIHByb3RvY29sIGluIFBST1RPQ09MUzoKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQocHJvdG9jb2wpCi0gICAgICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCi0gICAgICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KGNvbnRleHQsIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG9jb2w9c3NsLl9QUk9UT0NPTF9OQU1FU1twcm90b2NvbF0pOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQocHJvdG9jb2wpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY29udGV4dCwgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCiAKICAgICAgICAgZGVmIHRlc3RfZ2V0cGVlcmNlcnQoc2VsZik6CiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC0xNDc2LDggKzE2MTQsMTQgQEAKICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQogICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2hhdHR5PUZhbHNlKQogICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6Ci0gICAgICAgICAgICAgICAgcyA9IGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKQorICAgICAgICAgICAgICAgIHMgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAjIGdldHBlZXJjZXJ0KCkgcmFpc2UgVmFsdWVFcnJvciB3aGlsZSB0aGUgaGFuZHNoYWtlIGlzbid0CisgICAgICAgICAgICAgICAgIyBkb25lLgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHMuZG9faGFuZHNoYWtlKCkKICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQogICAgICAgICAgICAgICAgIGNpcGhlciA9IHMuY2lwaGVyKCkKQEAgLTE1MTcsNyArMTY2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFka2V5LnBlbSIpKQogCiAgICAgICAgIGRlZiB0ZXN0X3J1ZGVfc2h1dGRvd24oc2VsZik6Ci0gICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBJT0Vycm9yCisgICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBPU0Vycm9yCiAgICAgICAgICAgICBpbiB0aGUgY2xpZW50IHdoZW4gYXR0ZW1wdGluZyBoYW5kc2hha2UuCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKQEAgLTE1NDUsNyArMTY4OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUud2FpdCgpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zb2NrID0gc3NsLndyYXBfc29ja2V0KGMpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnY29ubmVjdGluZyB0byBjbG9zZWQgU1NMIHNvY2tldCBzaG91bGQgaGF2ZSBmYWlsZWQnKQpAQCAtMTU4OCw3ICsxNzMyLDcgQEAKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgeDoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZmFpbHMgb24gc29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuU1NMICgwLjkuN2wsIGZvciBpbnN0YW5jZSkKICAgICAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKQEAgLTE2NDgsNiArMTc5Miw0OSBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxKQogCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3NsLCAiUFJPVE9DT0xfVExTdjFfMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVExTIHZlcnNpb24gMS4xIG5vdCBzdXBwb3J0ZWQuIikKKyAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfdGxzdjFfMShzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MS4xIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMuCisgICAgICAgICAgICAgICBUZXN0aW5nIGFnYWluc3Qgb2xkZXIgVExTIHZlcnNpb25zLiIiIgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIFRydWUpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjFfMSkKKworICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBUcnVlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQorCisKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzc2wsICJQUk9UT0NPTF9UTFN2MV8yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUTFMgdmVyc2lvbiAxLjIgbm90IHN1cHBvcnRlZC4iKQorICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF90bHN2MV8yKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhIFRMU3YxLjIgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgIFRlc3RpbmcgYWdhaW5zdCBvbGRlciBUTFMgdmVyc2lvbnMuIiIiCisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjN8c3NsLk9QX05PX1NTTHYyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19TU0x2M3xzc2wuT1BfTk9fU1NMdjIsKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYyLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxXzIpCisKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgRmFsc2UpCisKICAgICAgICAgZGVmIHRlc3Rfc3RhcnR0bHMoc2VsZik6CiAgICAgICAgICAgICAiIiJTd2l0Y2hpbmcgZnJvbSBjbGVhciB0ZXh0IHRvIGVuY3J5cHRlZCBhbmQgYmFjayBhZ2Fpbi4iIiIKICAgICAgICAgICAgIG1zZ3MgPSAoYiJtc2cgMSIsIGIiTVNHIDIiLCBiIlNUQVJUVExTIiwgYiJNU0cgMyIsIGIibXNnIDQiLCBiIkVORFRMUyIsIGIibXNnIDUiLCBiIm1zZyA2IikKQEAgLTE3MDgsNyArMTg5NSw3IEBACiAKICAgICAgICAgZGVmIHRlc3Rfc29ja2V0c2VydmVyKHNlbGYpOgogICAgICAgICAgICAgIiIiVXNpbmcgYSBTb2NrZXRTZXJ2ZXIgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgU1NMIGNvbm5lY3Rpb25zLiIiIgotICAgICAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgQ0VSVEZJTEUpCisgICAgICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZT1DRVJURklMRSkKICAgICAgICAgICAgICMgdHJ5IHRvIGNvbm5lY3QKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicpCkBAIC0xOTY0LDYgKzIxNTEsMjAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZW1vdGUsIHNzbC5TU0xTb2NrZXQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlZXIsIGNsaWVudF9hZGRyKQogCisgICAgICAgIGRlZiB0ZXN0X2dldHBlZXJjZXJ0X2Vub3Rjb25uKHNlbGYpOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHNvY2suZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9UQ09OTikKKworICAgICAgICBkZWYgdGVzdF9kb19oYW5kc2hha2VfZW5vdGNvbm4oc2VsZik6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgc29jay5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9UQ09OTikKKwogICAgICAgICBkZWYgdGVzdF9kZWZhdWx0X2NpcGhlcnMoc2VsZik6CiAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKICAgICAgICAgICAgIHRyeToKQEAgLTE5NzUsNyArMjE3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlKSBhcyBzZXJ2ZXI6CiAgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoT1NFcnJvciwgc3NsLlNTTEVycm9yKSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm5vIHNoYXJlZCBjaXBoZXIiLCBzdHIoc2VydmVyLmNvbm5fZXJyb3JzWzBdKSkKIApAQCAtMjEwOCw2ICsyMzA5LDEyNCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc3RhdHNbJ3NlcnZlcl9ucG5fcHJvdG9jb2xzJ10pIGVsc2UgJ25vdGhpbmcnCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfcmVzdWx0LCBleHBlY3RlZCwgbXNnICUgKHNlcnZlcl9yZXN1bHQsICJzZXJ2ZXIiKSkKIAorICAgICAgICBkZWYgc25pX2NvbnRleHRzKHNlbGYpOgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFKQorICAgICAgICAgICAgb3RoZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIG90aGVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRTIpCisgICAgICAgICAgICBjbGllbnRfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTSUdOSU5HX0NBKQorICAgICAgICAgICAgcmV0dXJuIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dAorCisgICAgICAgIGRlZiBjaGVja19jb21tb25fbmFtZShzZWxmLCBzdGF0cywgbmFtZSk6CisgICAgICAgICAgICBjZXJ0ID0gc3RhdHNbJ3BlZXJjZXJ0J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCgnY29tbW9uTmFtZScsIG5hbWUpLCksIGNlcnRbJ3N1YmplY3QnXSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIHNlcnZlcm5hbWVfY2Ioc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIGNhbGxzLmFwcGVuZCgoc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCkpCisgICAgICAgICAgICAgICAgaWYgc2VydmVyX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNzbF9zb2NrLmNvbnRleHQgPSBvdGhlcl9jb250ZXh0CisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhzZXJ2ZXJuYW1lX2NiKQorCisgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgIyBUaGUgaG9zdG5hbWUgd2FzIGZldGNoZWQgcHJvcGVybHksIGFuZCB0aGUgY2VydGlmaWNhdGUgd2FzCisgICAgICAgICAgICAjIGNoYW5nZWQgZm9yIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgWygic3VwZXJtZXNzYWdlIiwgc2VydmVyX2NvbnRleHQpXSkKKyAgICAgICAgICAgICMgQ0VSVEZJTEU0IHdhcyBzZWxlY3RlZAorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2Zha2Vob3N0bmFtZScpCisKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgICMgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHNlcnZlcl9uYW1lPU5vbmUKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9Tm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFsoTm9uZSwgc2VydmVyX2NvbnRleHQpXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29tbW9uX25hbWUoc3RhdHMsICdsb2NhbGhvc3QnKQorCisgICAgICAgICAgICAjIENoZWNrIGRpc2FibGluZyB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKE5vbmUpCisKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J25vdGZ1bm55JykKKyAgICAgICAgICAgICMgQ2VydGlmaWNhdGUgZGlkbid0IGNoYW5nZQorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2xvY2FsaG9zdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbXSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja19hbGVydChzZWxmKToKKyAgICAgICAgICAgICMgUmV0dXJuaW5nIGEgVExTIGFsZXJ0IGlzIHJlZmxlY3RlZCB0byB0aGUgY29ubmVjdGluZyBjbGllbnQKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3JldHVybmluZ19hbGVydChzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNzbC5BTEVSVF9ERVNDUklQVElPTl9BQ0NFU1NfREVOSUVECisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9yZXR1cm5pbmdfYWxlcnQpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVhc29uLCAnVExTVjFfQUxFUlRfQUNDRVNTX0RFTklFRCcpCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfcmFpc2luZyhzZWxmKToKKyAgICAgICAgICAgICMgUmFpc2luZyBmYWlscyB0aGUgY29ubmVjdGlvbiB3aXRoIGEgVExTIGhhbmRzaGFrZSBmYWlsdXJlIGFsZXJ0LgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgY2JfcmFpc2luZyhzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9yYWlzaW5nKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY20sIFwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1NTTFYzX0FMRVJUX0hBTkRTSEFLRV9GQUlMVVJFJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlplcm9EaXZpc2lvbkVycm9yIiwgc3RkZXJyLmdldHZhbHVlKCkpCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfd3JvbmdfcmV0dXJuX3R5cGUoc2VsZik6CisgICAgICAgICAgICAjIFJldHVybmluZyB0aGUgd3JvbmcgcmV0dXJuIHR5cGUgdGVybWluYXRlcyB0aGUgVExTIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICMgd2l0aCBhbiBpbnRlcm5hbCBlcnJvciBhbGVydC4KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3dyb25nX3JldHVybl90eXBlKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3dyb25nX3JldHVybl90eXBlKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY20sIFwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1RMU1YxX0FMRVJUX0lOVEVSTkFMX0VSUk9SJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlR5cGVFcnJvciIsIHN0ZGVyci5nZXR2YWx1ZSgpKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWRfd3JpdGVfYWZ0ZXJfY2xvc2VfcmFpc2VzX3ZhbHVlcnJvcihzZWxmKToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2hhdHR5PUZhbHNlKQorCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBzID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlYWQsIDEwMjQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy53cml0ZSwgYidoZWxsbycpCisKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPUZhbHNlKToKICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC0yMTI3LDEwICsyNDQ2LDE2IEBACiAgICAgICAgICAgICAoc3NsLk9QRU5TU0xfVkVSU0lPTiwgc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPKSkKICAgICAgICAgcHJpbnQoIiAgICAgICAgICB1bmRlciAlcyIgJSBwbGF0KQogICAgICAgICBwcmludCgiICAgICAgICAgIEhBU19TTkkgPSAlciIgJSBzc2wuSEFTX1NOSSkKKyAgICAgICAgcHJpbnQoIiAgICAgICAgICBPUF9BTEwgPSAweCU4eCIgJSBzc2wuT1BfQUxMKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCgiICAgICAgICAgIE9QX05PX1RMU3YxXzEgPSAweCU4eCIgJSBzc2wuT1BfTk9fVExTdjFfMSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcwogCiAgICAgZm9yIGZpbGVuYW1lIGluIFsKICAgICAgICAgQ0VSVEZJTEUsIFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCwgQllURVNfQ0VSVEZJTEUsCiAgICAgICAgIE9OTFlDRVJULCBPTkxZS0VZLCBCWVRFU19PTkxZQ0VSVCwgQllURVNfT05MWUtFWSwKKyAgICAgICAgU0lHTkVEX0NFUlRGSUxFLCBTSUdORURfQ0VSVEZJTEUyLCBTSUdOSU5HX0NBLAogICAgICAgICBCQURDRVJULCBCQURLRVksIEVNUFRZQ0VSVF06CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CiAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgY2VydGlmaWNhdGUgZmlsZSAlciIgJSBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weQppbmRleCBlYjNmMDdhLi5hZjZjZWQ0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0YXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGF0LnB5CkBAIC0xLDkgKzEsMTMgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9mcmVzaF9tb2R1bGUKLWltcG9ydCBzdGF0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBpbXBvcnRfZnJlc2hfbW9kdWxlCiAKLWNsYXNzIFRlc3RGaWxlbW9kZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjX3N0YXQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdzdGF0JywgZnJlc2g9Wydfc3RhdCddKQorcHlfc3RhdCA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3N0YXQnLCBibG9ja2VkPVsnX3N0YXQnXSkKKworY2xhc3MgVGVzdEZpbGVtb2RlOgorICAgIHN0YXRtb2QgPSBOb25lCisKICAgICBmaWxlX2ZsYWdzID0geydTRl9BUFBFTkQnLCAnU0ZfQVJDSElWRUQnLCAnU0ZfSU1NVVRBQkxFJywgJ1NGX05PVU5MSU5LJywKICAgICAgICAgICAgICAgICAgICdTRl9TTkFQU0hPVCcsICdVRl9BUFBFTkQnLCAnVUZfQ09NUFJFU1NFRCcsICdVRl9ISURERU4nLAogICAgICAgICAgICAgICAgICAgJ1VGX0lNTVVUQUJMRScsICdVRl9OT0RVTVAnLCAnVUZfTk9VTkxJTksnLCAnVUZfT1BBUVVFJ30KQEAgLTYzLDE3ICs2NywxNyBAQAogICAgICAgICAgICAgc3RfbW9kZSA9IG9zLmxzdGF0KGZuYW1lKS5zdF9tb2RlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdF9tb2RlID0gb3Muc3RhdChmbmFtZSkuc3RfbW9kZQotICAgICAgICBtb2Rlc3RyID0gc3RhdC5maWxlbW9kZShzdF9tb2RlKQorICAgICAgICBtb2Rlc3RyID0gc2VsZi5zdGF0bW9kLmZpbGVtb2RlKHN0X21vZGUpCiAgICAgICAgIHJldHVybiBzdF9tb2RlLCBtb2Rlc3RyCiAKICAgICBkZWYgYXNzZXJ0U19JUyhzZWxmLCBuYW1lLCBtb2RlKToKICAgICAgICAgIyB0ZXN0IGZvcm1hdCwgbHN0cmlwIGlzIGZvciBTX0lGSUZPCi0gICAgICAgIGZtdCA9IGdldGF0dHIoc3RhdCwgIlNfSUYiICsgbmFtZS5sc3RyaXAoIkYiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSUZNVChtb2RlKSwgZm10KQorICAgICAgICBmbXQgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwgIlNfSUYiICsgbmFtZS5sc3RyaXAoIkYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JRk1UKG1vZGUpLCBmbXQpCiAgICAgICAgICMgdGVzdCB0aGF0IGp1c3Qgb25lIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQogICAgICAgICB0ZXN0bmFtZSA9ICJTX0lTIiArIG5hbWUKICAgICAgICAgZm9yIGZ1bmNuYW1lIGluIHNlbGYuZm9ybWF0X2Z1bmNzOgotICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoc3RhdCwgZnVuY25hbWUsIE5vbmUpCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGZ1bmNuYW1lLCBOb25lKQogICAgICAgICAgICAgaWYgZnVuYyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGlmIGZ1bmNuYW1lID09IHRlc3RuYW1lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGZ1bmNuYW1lKQpAQCAtOTEsMzUgKzk1LDM1IEBACiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctcnd4LS0tLS0tJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJXWFUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lNT0RFKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JUldYVSkKIAogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzA3MCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy0tLS1yd3gtLS0nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUldYRykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lSV1hHKQogCiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvMDA3KQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyLCAnLS0tLS0tLXJ3eCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSV1hPKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0bW9kLlNfSVJXWE8pCiAKICAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgMG80NDQpCiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctci0tci0tci0tJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLCAwbzQ0NCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksIDBvNDQ0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzcwMCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0cls6M10sICctcncnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSUZNVChzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lGUkVHKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JRk1UKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JRlJFRykKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgb3MubWtkaXIoVEVTVEZOKQpAQCAtMTY1LDI1ICsxNjksMzQgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnN0YXRfc3RydWN0Lml0ZW1zKCk6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbW9kdmFsdWUsIGtleSkKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5wZXJtaXNzaW9uX2JpdHMuaXRlbXMoKToKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBtb2R2YWx1ZSwga2V5KQogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZmlsZV9mbGFnczoKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdmFsdWUsIGludCkKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmZvcm1hdHM6Ci0gICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc3RhdCwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHZhbHVlLCBpbnQpCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5mb3JtYXRfZnVuY3M6Ci0gICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShmdW5jKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygwKSwgMCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3RGaWxlbW9kZSkKK2NsYXNzIFRlc3RGaWxlbW9kZUNTdGF0KFRlc3RGaWxlbW9kZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXRtb2QgPSBjX3N0YXQKKworICAgIGZvcm1hdHMgPSBUZXN0RmlsZW1vZGUuZm9ybWF0cyB8IHsnU19JRkRPT1InLCAnU19JRlBPUlQnLCAnU19JRldIVCd9CisgICAgZm9ybWF0X2Z1bmNzID0gVGVzdEZpbGVtb2RlLmZvcm1hdF9mdW5jcyB8IHsnU19JU0RPT1InLCAnU19JU1BPUlQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NfSVNXSFQnfQorCisKK2NsYXNzIFRlc3RGaWxlbW9kZVB5U3RhdChUZXN0RmlsZW1vZGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGF0bW9kID0gcHlfc3RhdAorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhdGlzdGljcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RhdGlzdGljcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWIzNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5CkBAIC0wLDAgKzEsMTUzNCBAQAorIiIiVGVzdCBzdWl0ZSBmb3Igc3RhdGlzdGljcyBtb2R1bGUsIGluY2x1ZGluZyBoZWxwZXIgTnVtZXJpY1Rlc3RDYXNlIGFuZAorYXBwcm94X2VxdWFsIGZ1bmN0aW9uLgorCisiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZGVjaW1hbAoraW1wb3J0IGRvY3Rlc3QKK2ltcG9ydCBtYXRoCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKK2Zyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbgorCisKKyMgTW9kdWxlIHRvIGJlIHRlc3RlZC4KK2ltcG9ydCBzdGF0aXN0aWNzCisKKworIyA9PT0gSGVscGVyIGZ1bmN0aW9ucyBhbmQgY2xhc3MgPT09CisKK2RlZiBfY2FsY19lcnJvcnMoYWN0dWFsLCBleHBlY3RlZCk6CisgICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3JzIGJldHdlZW4gdHdvIG51bWJlcnMuCisKKyAgICA+Pj4gX2NhbGNfZXJyb3JzKDEwMCwgNzUpCisgICAgKDI1LCAwLjI1KQorICAgID4+PiBfY2FsY19lcnJvcnMoMTAwLCAxMDApCisgICAgKDAsIDAuMCkKKworICAgIFJldHVybnMgdGhlIChhYnNvbHV0ZSBlcnJvciwgcmVsYXRpdmUgZXJyb3IpIGJldHdlZW4gdGhlIHR3byBhcmd1bWVudHMuCisgICAgIiIiCisgICAgYmFzZSA9IG1heChhYnMoYWN0dWFsKSwgYWJzKGV4cGVjdGVkKSkKKyAgICBhYnNfZXJyID0gYWJzKGFjdHVhbCAtIGV4cGVjdGVkKQorICAgIHJlbF9lcnIgPSBhYnNfZXJyL2Jhc2UgaWYgYmFzZSBlbHNlIGZsb2F0KCdpbmYnKQorICAgIHJldHVybiAoYWJzX2VyciwgcmVsX2VycikKKworCitkZWYgYXBwcm94X2VxdWFsKHgsIHksIHRvbD0xZS0xMiwgcmVsPTFlLTcpOgorICAgICIiImFwcHJveF9lcXVhbCh4LCB5IFssIHRvbCBbLCByZWxdXSkgPT4gVHJ1ZXxGYWxzZQorCisgICAgUmV0dXJuIFRydWUgaWYgbnVtYmVycyB4IGFuZCB5IGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLCB0byB3aXRoaW4gc29tZQorICAgIG1hcmdpbiBvZiBlcnJvciwgb3RoZXJ3aXNlIHJldHVybiBGYWxzZS4gTnVtYmVycyB3aGljaCBjb21wYXJlIGVxdWFsCisgICAgd2lsbCBhbHNvIGNvbXBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIHggaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byB5IGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcyBsZXNzIHRoYW4KKyAgICBhbiBhYnNvbHV0ZSBlcnJvciB0b2wgb3IgYSByZWxhdGl2ZSBlcnJvciByZWwsIHdoaWNoZXZlciBpcyBiaWdnZXIuCisKKyAgICBJZiBnaXZlbiwgYm90aCB0b2wgYW5kIHJlbCBtdXN0IGJlIGZpbml0ZSwgbm9uLW5lZ2F0aXZlIG51bWJlcnMuIElmIG5vdAorICAgIGdpdmVuLCBkZWZhdWx0IHZhbHVlcyBhcmUgdG9sPTFlLTEyIGFuZCByZWw9MWUtNy4KKworICAgID4+PiBhcHByb3hfZXF1YWwoMS4yNTg5LCAxLjI1ODcsIHRvbD0wLjAwMDMsIHJlbD0wKQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEuMjU4OSwgMS4yNTg3LCB0b2w9MC4wMDAxLCByZWw9MCkKKyAgICBGYWxzZQorCisgICAgQWJzb2x1dGUgZXJyb3IgaXMgZGVmaW5lZCBhcyBhYnMoeC15KTsgaWYgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKyAgICB0b2wsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIFJlbGF0aXZlIGVycm9yIGlzIGRlZmluZWQgYXMgYWJzKCh4LXkpL3gpIG9yIGFicygoeC15KS95KSwgd2hpY2hldmVyIGlzCisgICAgc21hbGxlciwgcHJvdmlkZWQgeCBvciB5IGFyZSBub3QgemVyby4gSWYgdGhhdCBmaWd1cmUgaXMgbGVzcyB0aGFuIG9yCisgICAgZXF1YWwgdG8gcmVsLCB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICBDb21wbGV4IG51bWJlcnMgYXJlIG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQuIElmIHlvdSB3aXNoIHRvIGNvbXBhcmUgdG8KKyAgICBjb21wbGV4IG51bWJlcnMsIGV4dHJhY3QgdGhlaXIgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIGFuZCBjb21wYXJlIHRoZW0KKyAgICBpbmRpdmlkdWFsbHkuCisKKyAgICBOQU5zIGFsd2F5cyBjb21wYXJlIHVuZXF1YWwsIGV2ZW4gd2l0aCB0aGVtc2VsdmVzLiBJbmZpbml0aWVzIGNvbXBhcmUKKyAgICBhcHByb3hpbWF0ZWx5IGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaWduIChib3RoIHBvc2l0aXZlIG9yIGJvdGgKKyAgICBuZWdhdGl2ZSkuIEluZmluaXRpZXMgd2l0aCBkaWZmZXJlbnQgc2lnbnMgY29tcGFyZSB1bmVxdWFsOyBzbyBkbworICAgIGNvbXBhcmlzb25zIG9mIGluZmluaXRpZXMgd2l0aCBmaW5pdGUgbnVtYmVycy4KKyAgICAiIiIKKyAgICBpZiB0b2wgPCAwIG9yIHJlbCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Vycm9yIHRvbGVyYW5jZXMgbXVzdCBiZSBub24tbmVnYXRpdmUnKQorICAgICMgTkFOcyBhcmUgbmV2ZXIgZXF1YWwgdG8gYW55dGhpbmcsIGFwcHJveGltYXRlbHkgb3Igb3RoZXJ3aXNlLgorICAgIGlmIG1hdGguaXNuYW4oeCkgb3IgbWF0aC5pc25hbih5KToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBOdW1iZXJzIHdoaWNoIGNvbXBhcmUgZXF1YWwgYWxzbyBjb21wYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCisgICAgaWYgeCA9PSB5OgorICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugb2YgdHdvIGluZmluaXRpZXMgd2l0aCB0aGUgc2FtZSBzaWduLgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGlmIG1hdGguaXNpbmYoeCkgb3IgbWF0aC5pc2luZih5KToKKyAgICAgICAgIyBUaGlzIGluY2x1ZGVzIHRoZSBjYXNlIG9mIHR3byBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24sIG9yCisgICAgICAgICMgb25lIGluZmluaXR5IGFuZCBvbmUgZmluaXRlIG51bWJlci4KKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBUd28gZmluaXRlIG51bWJlcnMuCisgICAgYWN0dWFsX2Vycm9yID0gYWJzKHggLSB5KQorICAgIGFsbG93ZWRfZXJyb3IgPSBtYXgodG9sLCByZWwqbWF4KGFicyh4KSwgYWJzKHkpKSkKKyAgICByZXR1cm4gYWN0dWFsX2Vycm9yIDw9IGFsbG93ZWRfZXJyb3IKKworCisjIFRoaXMgY2xhc3MgZXhpc3RzIG9ubHkgYXMgc29tZXdoZXJlIHRvIHN0aWNrIGEgZG9jc3RyaW5nIGNvbnRhaW5pbmcKKyMgZG9jdGVzdHMuIFRoZSBmb2xsb3dpbmcgZG9jc3RyaW5nIGFuZCB0ZXN0cyB3ZXJlIG9yaWdpbmFsbHkgaW4gYSBzZXBhcmF0ZQorIyBtb2R1bGUuIE5vdyB0aGF0IGl0IGhhcyBiZWVuIG1lcmdlZCBpbiBoZXJlLCBJIG5lZWQgc29tZXdoZXJlIHRvIGhhbmcgdGhlLgorIyBkb2NzdHJpbmcuIFVsdGltYXRlbHksIHRoaXMgY2xhc3Mgd2lsbCBkaWUsIGFuZCB0aGUgaW5mb3JtYXRpb24gYmVsb3cgd2lsbAorIyBlaXRoZXIgYmVjb21lIHJlZHVuZGFudCwgb3IgYmUgbW92ZWQgaW50byBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlcy4KK2NsYXNzIF9Eb05vdGhpbmc6CisgICAgIiIiCisgICAgV2hlbiBkb2luZyBudW1lcmljIHdvcmssIGVzcGVjaWFsbHkgd2l0aCBmbG9hdHMsIGV4YWN0IGVxdWFsaXR5IGlzIG9mdGVuCisgICAgbm90IHdoYXQgeW91IHdhbnQuIER1ZSB0byByb3VuZC1vZmYgZXJyb3IsIGl0IGlzIG9mdGVuIGEgYmFkIGlkZWEgdG8gdHJ5CisgICAgdG8gY29tcGFyZSBmbG9hdHMgd2l0aCBlcXVhbGl0eS4gSW5zdGVhZCB0aGUgdXN1YWwgcHJvY2VkdXJlIGlzIHRvIHRlc3QKKyAgICB0aGVtIHdpdGggc29tZSAoaG9wZWZ1bGx5IHNtYWxsISkgYWxsb3dhbmNlIGZvciBlcnJvci4KKworICAgIFRoZSBgYGFwcHJveF9lcXVhbGBgIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBlaXRoZXIgYW4gYWJzb2x1dGUKKyAgICBlcnJvciB0b2xlcmFuY2UsIG9yIGEgcmVsYXRpdmUgZXJyb3IsIG9yIGJvdGguCisKKyAgICBBYnNvbHV0ZSBlcnJvciB0b2xlcmFuY2VzIGFyZSBzaW1wbGUsIGJ1dCB5b3UgbmVlZCB0byBrbm93IHRoZSBtYWduaXR1ZGUKKyAgICBvZiB0aGUgcXVhbnRpdGllcyBiZWluZyBjb21wYXJlZDoKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1LCAxMi4zNDYsIHRvbD0xZS0zKQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NWU2LCAxMi4zNDZlNiwgdG9sPTFlLTMpICAjIHRvbCBpcyB0b28gc21hbGwuCisgICAgRmFsc2UKKworICAgIFJlbGF0aXZlIGVycm9ycyBhcmUgbW9yZSBzdWl0YWJsZSB3aGVuIHRoZSB2YWx1ZXMgeW91IGFyZSBjb21wYXJpbmcgY2FuCisgICAgdmFyeSBpbiBtYWduaXR1ZGU6CisKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NSwgMTIuMzQ2LCByZWw9MWUtNCkKKyAgICBUcnVlCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDVlNiwgMTIuMzQ2ZTYsIHJlbD0xZS00KQorICAgIFRydWUKKworICAgIGJ1dCBhIG5haXZlIGltcGxlbWVudGF0aW9uIG9mIHJlbGF0aXZlIGVycm9yIHRlc3RpbmcgY2FuIHJ1biBpbnRvIHRyb3VibGUKKyAgICBhcm91bmQgemVyby4KKworICAgIElmIHlvdSBzdXBwbHkgYm90aCBhbiBhYnNvbHV0ZSB0b2xlcmFuY2UgYW5kIGEgcmVsYXRpdmUgZXJyb3IsIHRoZQorICAgIGNvbXBhcmlzb24gc3VjY2VlZHMgaWYgZWl0aGVyIGluZGl2aWR1YWwgdGVzdCBzdWNjZWVkczoKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1ZTYsIDEyLjM0NmU2LCB0b2w9MWUtMywgcmVsPTFlLTQpCisgICAgVHJ1ZQorCisgICAgIiIiCisgICAgcGFzcworCisKKworIyBXZSBwcmVmZXIgdGhpcyBmb3IgdGVzdGluZyBudW1lcmljIHZhbHVlcyB0aGF0IG1heSBub3QgYmUgZXhhY3RseSBlcXVhbCwKKyMgYW5kIGF2b2lkIHVzaW5nIFRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsLCBiZWNhdXNlIGl0IHN1Y2tzIDotKQorCitjbGFzcyBOdW1lcmljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlVuaXQgdGVzdCBjbGFzcyBmb3IgbnVtZXJpYyB3b3JrLgorCisgICAgVGhpcyBzdWJjbGFzc2VzIFRlc3RDYXNlLiBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgbWV0aG9kCisgICAgYGBUZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbGBgLCAgYGBhc3NlcnRBcHByb3hFcXVhbGBgIGlzIHByb3ZpZGVkLgorICAgICIiIgorICAgICMgQnkgZGVmYXVsdCwgd2UgZXhwZWN0IGV4YWN0IGVxdWFsaXR5LCB1bmxlc3Mgb3ZlcnJpZGRlbi4KKyAgICB0b2wgPSByZWwgPSAwCisKKyAgICBkZWYgYXNzZXJ0QXBwcm94RXF1YWwoCisgICAgICAgICAgICBzZWxmLCBmaXJzdCwgc2Vjb25kLCB0b2w9Tm9uZSwgcmVsPU5vbmUsIG1zZz1Ob25lCisgICAgICAgICAgICApOgorICAgICAgICAiIiJUZXN0IHBhc3NlcyBpZiBgYGZpcnN0YGAgYW5kIGBgc2Vjb25kYGAgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCisKKyAgICAgICAgVGhpcyB0ZXN0IHBhc3NlcyBpZiBgYGZpcnN0YGAgYW5kIGBgc2Vjb25kYGAgYXJlIGVxdWFsIHRvCisgICAgICAgIHdpdGhpbiBgYHRvbGBgLCBhbiBhYnNvbHV0ZSBlcnJvciwgb3IgYGByZWxgYCwgYSByZWxhdGl2ZSBlcnJvci4KKworICAgICAgICBJZiBlaXRoZXIgYGB0b2xgYCBvciBgYHJlbGBgIGFyZSBOb25lIG9yIG5vdCBnaXZlbiwgdGhleSBkZWZhdWx0IHRvCisgICAgICAgIHRlc3QgYXR0cmlidXRlcyBvZiB0aGUgc2FtZSBuYW1lIChieSBkZWZhdWx0LCAwKS4KKworICAgICAgICBUaGUgb2JqZWN0cyBtYXkgYmUgZWl0aGVyIG51bWJlcnMsIG9yIHNlcXVlbmNlcyBvZiBudW1iZXJzLiBTZXF1ZW5jZXMKKyAgICAgICAgYXJlIHRlc3RlZCBlbGVtZW50LWJ5LWVsZW1lbnQuCisKKyAgICAgICAgPj4+IGNsYXNzIE15VGVzdChOdW1lcmljVGVzdENhc2UpOgorICAgICAgICAuLi4gICAgIGRlZiB0ZXN0X251bWJlcihzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAgeCA9IDEuMC82CisgICAgICAgIC4uLiAgICAgICAgIHkgPSBzdW0oW3hdKjYpCisgICAgICAgIC4uLiAgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoeSwgMS4wLCB0b2w9MWUtMTUpCisgICAgICAgIC4uLiAgICAgZGVmIHRlc3Rfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIC4uLiAgICAgICAgIGEgPSBbMS4wMDEsIDEuMDAxZS0xMCwgMS4wMDFlMTBdCisgICAgICAgIC4uLiAgICAgICAgIGIgPSBbMS4wLCAxZS0xMCwgMWUxMF0KKyAgICAgICAgLi4uICAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChhLCBiLCByZWw9MWUtMykKKyAgICAgICAgLi4uCisgICAgICAgID4+PiBpbXBvcnQgdW5pdHRlc3QKKyAgICAgICAgPj4+IGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPICAjIFN1cHByZXNzIHRlc3QgcnVubmVyIG91dHB1dC4KKyAgICAgICAgPj4+IHN1aXRlID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShNeVRlc3QpCisgICAgICAgID4+PiB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSkucnVuKHN1aXRlKQorICAgICAgICA8dW5pdHRlc3QucnVubmVyLlRleHRUZXN0UmVzdWx0IHJ1bj0yIGVycm9ycz0wIGZhaWx1cmVzPTA+CisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHRvbCBpcyBOb25lOgorICAgICAgICAgICAgdG9sID0gc2VsZi50b2wKKyAgICAgICAgaWYgcmVsIGlzIE5vbmU6CisgICAgICAgICAgICByZWwgPSBzZWxmLnJlbAorICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShmaXJzdCwgY29sbGVjdGlvbnMuU2VxdWVuY2UpIGFuZAorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2Uoc2Vjb25kLCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX2FwcHJveF9zZXEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfYXBwcm94X251bQorICAgICAgICBjaGVjayhmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgbXNnKQorCisgICAgZGVmIF9jaGVja19hcHByb3hfc2VxKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBtc2cpOgorICAgICAgICBpZiBsZW4oZmlyc3QpICE9IGxlbihzZWNvbmQpOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAoCisgICAgICAgICAgICAgICAgInNlcXVlbmNlcyBkaWZmZXIgaW4gbGVuZ3RoOiAlZCBpdGVtcyAhPSAlZCBpdGVtcyIKKyAgICAgICAgICAgICAgICAlIChsZW4oZmlyc3QpLCBsZW4oc2Vjb25kKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorICAgICAgICBmb3IgaSwgKGEsZSkgaW4gZW51bWVyYXRlKHppcChmaXJzdCwgc2Vjb25kKSk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19hcHByb3hfbnVtKGEsIGUsIHRvbCwgcmVsLCBtc2csIGkpCisKKyAgICBkZWYgX2NoZWNrX2FwcHJveF9udW0oc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIG1zZywgaWR4PU5vbmUpOgorICAgICAgICBpZiBhcHByb3hfZXF1YWwoZmlyc3QsIHNlY29uZCwgdG9sLCByZWwpOgorICAgICAgICAgICAgIyBUZXN0IHBhc3Nlcy4gUmV0dXJuIGVhcmx5LCB3ZSBhcmUgZG9uZS4KKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgT3RoZXJ3aXNlIHdlIGZhaWxlZC4KKyAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl9tYWtlX3N0ZF9lcnJfbXNnKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBpZHgpCisgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2Vfc3RkX2Vycl9tc2coZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCk6CisgICAgICAgICMgQ3JlYXRlIHRoZSBzdGFuZGFyZCBlcnJvciBtZXNzYWdlIGZvciBhcHByb3hfZXF1YWwgZmFpbHVyZXMuCisgICAgICAgIGFzc2VydCBmaXJzdCAhPSBzZWNvbmQKKyAgICAgICAgdGVtcGxhdGUgPSAoCisgICAgICAgICAgICAnICAlciAhPSAlclxuJworICAgICAgICAgICAgJyAgdmFsdWVzIGRpZmZlciBieSBtb3JlIHRoYW4gdG9sPSVyIGFuZCByZWw9JXJcbicKKyAgICAgICAgICAgICcgIC0+IGFic29sdXRlIGVycm9yID0gJXJcbicKKyAgICAgICAgICAgICcgIC0+IHJlbGF0aXZlIGVycm9yID0gJXInCisgICAgICAgICAgICApCisgICAgICAgIGlmIGlkeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGhlYWRlciA9ICdudW1lcmljIHNlcXVlbmNlcyBmaXJzdCBkaWZmZXIgYXQgaW5kZXggJWQuXG4nICUgaWR4CisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGhlYWRlciArIHRlbXBsYXRlCisgICAgICAgICMgQ2FsY3VsYXRlIGFjdHVhbCBlcnJvcnM6CisgICAgICAgIGFic19lcnIsIHJlbF9lcnIgPSBfY2FsY19lcnJvcnMoZmlyc3QsIHNlY29uZCkKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlICUgKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBhYnNfZXJyLCByZWxfZXJyKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09CisjID09PSBUZXN0IHRoZSBoZWxwZXJzID09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKworCisjIC0tLSBUZXN0cyBmb3IgYXBwcm94X2VxdWFsIC0tLQorCitjbGFzcyBBcHByb3hFcXVhbFN5bW1ldHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHN5bW1ldHJ5IG9mIGFwcHJveF9lcXVhbC4KKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3N5bW1ldHJ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYXBwcm94X2VxdWFsIHRyZWF0cyByZWxhdGl2ZSBlcnJvciBzeW1tZXRyaWNhbGx5LgorICAgICAgICAjIChhLWIpL2EgaXMgdXN1YWxseSBub3QgZXF1YWwgdG8gKGEtYikvYi4gRW5zdXJlIHRoYXQgdGhpcworICAgICAgICAjIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICAjCisgICAgICAgICMgICBOb3RlOiB0aGUgcmVhc29uIGZvciB0aGlzIHRlc3QgaXMgdGhhdCBhbiBlYXJseSB2ZXJzaW9uCisgICAgICAgICMgICBvZiBhcHByb3hfZXF1YWwgd2FzIG5vdCBzeW1tZXRyaWMuIEEgcmVsYXRpdmUgZXJyb3IgdGVzdAorICAgICAgICAjICAgd291bGQgcGFzcywgb3IgZmFpbCwgZGVwZW5kaW5nIG9uIHdoaWNoIHZhbHVlIHdhcyBwYXNzZWQKKyAgICAgICAgIyAgIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICAgICAgIworICAgICAgICBhcmdzMSA9IFsyNDU2LCAzNy44LCAtMTIuNDUsIERlY2ltYWwoJzIuNTQnKSwgRnJhY3Rpb24oMTcsIDU0KV0KKyAgICAgICAgYXJnczIgPSBbMjQ1OSwgMzcuMiwgLTEyLjQxLCBEZWNpbWFsKCcyLjU5JyksIEZyYWN0aW9uKDE1LCA1NCldCisgICAgICAgIGFzc2VydCBsZW4oYXJnczEpID09IGxlbihhcmdzMikKKyAgICAgICAgZm9yIGEsIGIgaW4gemlwKGFyZ3MxLCBhcmdzMik6CisgICAgICAgICAgICBzZWxmLmRvX3JlbGF0aXZlX3N5bW1ldHJ5KGEsIGIpCisKKyAgICBkZWYgZG9fcmVsYXRpdmVfc3ltbWV0cnkoc2VsZiwgYSwgYik6CisgICAgICAgIGEsIGIgPSBtaW4oYSwgYiksIG1heChhLCBiKQorICAgICAgICBhc3NlcnQgYSA8IGIKKyAgICAgICAgZGVsdGEgPSBiIC0gYSAgIyBUaGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB2YWx1ZXMuCisgICAgICAgIHJlbF9lcnIxLCByZWxfZXJyMiA9IGFicyhkZWx0YS9hKSwgYWJzKGRlbHRhL2IpCisgICAgICAgICMgQ2hvb3NlIGFuIGVycm9yIG1hcmdpbiBoYWxmd2F5IGJldHdlZW4gdGhlIHR3by4KKyAgICAgICAgcmVsID0gKHJlbF9lcnIxICsgcmVsX2VycjIpLzIKKyAgICAgICAgIyBOb3cgc2VlIHRoYXQgdmFsdWVzIGEgYW5kIGIgY29tcGFyZSBhcHByb3ggZXF1YWwgcmVnYXJkbGVzcyBvZgorICAgICAgICAjIHdoaWNoIGlzIGdpdmVuIGZpcnN0LgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGEsIGIsIHRvbD0wLCByZWw9cmVsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChiLCBhLCB0b2w9MCwgcmVsPXJlbCkpCisKKyAgICBkZWYgdGVzdF9zeW1tZXRyeShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYXBwcm94X2VxdWFsKGEsIGIpID09IGFwcHJveF9lcXVhbChiLCBhKQorICAgICAgICBhcmdzID0gWy0yMywgLTIsIDUsIDEwNywgOTM1NjhdCisgICAgICAgIGRlbHRhID0gMgorICAgICAgICBmb3IgeCBpbiBhcmdzOgorICAgICAgICAgICAgZm9yIHR5cGVfIGluIChpbnQsIGZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbik6CisgICAgICAgICAgICAgICAgeCA9IHR5cGVfKHgpKjEwMAorICAgICAgICAgICAgICAgIHkgPSB4ICsgZGVsdGEKKyAgICAgICAgICAgICAgICByID0gYWJzKGRlbHRhL21heCh4LCB5KSkKKyAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBmaXZlIGNhc2VzIHRvIGNoZWNrOgorICAgICAgICAgICAgICAgICMgMSkgYWN0dWFsIGVycm9yIDw9IHRvbCwgPD0gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSwgcmVsPXIpCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSsxLCByZWw9MipyKQorICAgICAgICAgICAgICAgICMgMikgYWN0dWFsIGVycm9yID4gdG9sLCA+IHJlbAorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEtMSwgcmVsPXIvMikKKyAgICAgICAgICAgICAgICAjIDMpIGFjdHVhbCBlcnJvciA8PSB0b2wsID4gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YSwgcmVsPXIvMikKKyAgICAgICAgICAgICAgICAjIDQpIGFjdHVhbCBlcnJvciA+IHRvbCwgPD0gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YS0xLCByZWw9cikKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLTEsIHJlbD0yKnIpCisgICAgICAgICAgICAgICAgIyA1KSBleGFjdCBlcXVhbGl0eSB0ZXN0CisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHgsIHRvbD0wLCByZWw9MCkKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPTAsIHJlbD0wKQorCisgICAgZGVmIGRvX3N5bW1ldHJ5X3Rlc3Qoc2VsZiwgYSwgYiwgdG9sLCByZWwpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJhcHByb3hfZXF1YWwgY29tcGFyaXNvbnMgZG9uJ3QgbWF0Y2ggZm9yICVyIgorICAgICAgICBmbGFnMSA9IGFwcHJveF9lcXVhbChhLCBiLCB0b2wsIHJlbCkKKyAgICAgICAgZmxhZzIgPSBhcHByb3hfZXF1YWwoYiwgYSwgdG9sLCByZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZzEsIGZsYWcyLCB0ZW1wbGF0ZS5mb3JtYXQoKGEsIGIsIHRvbCwgcmVsKSkpCisKKworY2xhc3MgQXBwcm94RXF1YWxFeGFjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGUgYXBwcm94X2VxdWFsIGZ1bmN0aW9uIHdpdGggZXhhY3RseSBlcXVhbCB2YWx1ZXMuCisgICAgIyBFcXVhbCB2YWx1ZXMgc2hvdWxkIGNvbXBhcmUgYXMgYXBwcm94aW1hdGVseSBlcXVhbC4KKyAgICAjIFRlc3QgY2FzZXMgZm9yIGV4YWN0bHkgZXF1YWwgdmFsdWVzLCB3aGljaCBzaG91bGQgY29tcGFyZSBhcHByb3gKKyAgICAjIGVxdWFsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm9yIHRvbGVyYW5jZXMgZ2l2ZW4uCisKKyAgICBkZWYgZG9fZXhhY3RseV9lcXVhbF90ZXN0KHNlbGYsIHgsIHRvbCwgcmVsKToKKyAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKHgsIHgsIHRvbD10b2wsIHJlbD1yZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsICdlcXVhbGl0eSBmYWlsdXJlIGZvciB4PSVyJyAlIHgpCisgICAgICAgIHJlc3VsdCA9IGFwcHJveF9lcXVhbCgteCwgLXgsIHRvbD10b2wsIHJlbD1yZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQsICdlcXVhbGl0eSBmYWlsdXJlIGZvciB4PSVyJyAlIC14KQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBpbnQgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBmb3IgbiBpbiBbNDIsIDE5NzQwLCAxNDk3NCwgMjMwLCAxNzk1LCA3MDAyNDUsIDM2NTg3XToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4sIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgZmxvYXQgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBmb3IgeCBpbiBbMC40MiwgMS45NzQwLCAxNDk3LjQsIDIzLjAsIDE3OS41LCA3MC4wMjQ1LCAzNi41ODddOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBGcmFjdGlvbiB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBmb3IgZiBpbiBbRigxLCAyKSwgRigwKSwgRig1LCAzKSwgRig5LCA3KSwgRigzNSwgMzYpLCBGKDMsIDcpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGYsIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBEZWNpbWFsIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbC4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZm9yIGQgaW4gbWFwKEQsICI4LjIgMzEuMjc0IDkxMi4wNCAxNi43NDUgMS4yMDQ3Ii5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGQsIDAsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Fic29sdXRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZm9yIG4gaW4gWzE2LCAxMDEzLCAxMzcyLCAxMTk4LCA5NzEsIDRdOgorICAgICAgICAgICAgIyBUZXN0IGFzIGludHMuCisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChuLCAwLjAxLCAwKQorICAgICAgICAgICAgIyBUZXN0IGFzIGZsb2F0cy4KKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4vMTAsIDAuMDEsIDApCisgICAgICAgICAgICAjIFRlc3QgYXMgRnJhY3Rpb25zLgorICAgICAgICAgICAgZiA9IEZyYWN0aW9uKG4sIDEyMzQpCisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChmLCAwLjAxLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9hYnNvbHV0ZV9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGVxdWFsIERlY2ltYWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KERlY2ltYWwoIjMuNTcxIiksIERlY2ltYWwoIjAuMDEiKSwgMCkKKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoLURlY2ltYWwoIjgxLjM5NzEiKSwgRGVjaW1hbCgiMC4wMSIpLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9yZWxhdGl2ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgZm9yIHggaW4gWzgzNDcsIDEwMS4zLCAtNzkxMC4yOCwgRnJhY3Rpb24oNSwgMjEpXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KHgsIDAsIDAuMDEpCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KERlY2ltYWwoIjExLjY4IiksIDAsIERlY2ltYWwoIjAuMDEiKSkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfYm90aChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXF1YWwgdmFsdWVzIGFyZSBlcXVhbCB3aGVuIGJvdGggdG9sIGFuZCByZWwgYXJlIGdpdmVuLgorICAgICAgICBmb3IgeCBpbiBbNDEwMTcsIDE2Ljc0MiwgLTgxMy4wMiwgRnJhY3Rpb24oMywgOCldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMC4xLCAwLjAxKQorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdChEKCI3LjIiKSwgRCgiMC4xIiksIEQoIjAuMDEiKSkKKworCitjbGFzcyBBcHByb3hFcXVhbFVuZXF1YWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFVuZXF1YWwgdmFsdWVzIHNob3VsZCBjb21wYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZXMuCisgICAgIyBUZXN0IGNhc2VzIGZvciB1bmVxdWFsIHZhbHVlcywgd2l0aCBleGFjdCBlcXVhbGl0eSB0ZXN0LgorCisgICAgZGVmIGRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KHNlbGYsIHgpOgorICAgICAgICBmb3IgYSBpbiAoeCwgLXgpOgorICAgICAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKGEsIGErMSwgdG9sPTAsIHJlbD0wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQsICdpbmVxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgYSkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdW5lcXVhbCBpbnQgdmFsdWVzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciBuIGluIFs5NTEsIDU3MjMwNSwgNDc4LCA5MTcsIDE3MjQwXToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QobikKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfdW5lcXVhbF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCB1bmVxdWFsIGZsb2F0IHZhbHVlcyBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlLgorICAgICAgICBmb3IgeCBpbiBbOS41MSwgNTcyMy4wNSwgNDcuOCwgOS4xNywgMTcuMjRdOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdCh4KQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdW5lcXVhbCBGcmFjdGlvbnMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGZvciBmIGluIFtGKDEsIDUpLCBGKDcsIDkpLCBGKDEyLCAxMSksIEYoMTAxLCA5OTAyMyldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChmKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB1bmVxdWFsIERlY2ltYWxzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMy4xNDE1IDI5OC4xMiAzLjQ3IDE4Ljk5NiAwLjAwMjQ1Ii5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV91bmVxdWFsX3Rlc3QoZCkKKworCitjbGFzcyBBcHByb3hFcXVhbEluZXhhY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEluZXhhY3QgdGVzdCBjYXNlcyBmb3IgYXBwcm94X2Vycm9yLgorICAgICMgVGVzdCBjYXNlcyB3aGVuIGNvbXBhcmluZyB0d28gdmFsdWVzIHRoYXQgYXJlIG5vdCBleGFjdGx5IGVxdWFsLgorCisgICAgIyA9PT0gQWJzb2x1dGUgZXJyb3IgdGVzdHMgPT09CisKKyAgICBkZWYgZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHNlbGYsIHgsIGRlbHRhKToKKyAgICAgICAgdGVtcGxhdGUgPSAiVGVzdCBmYWlsdXJlIGZvciB4PXshcn0sIHk9eyFyfSIKKyAgICAgICAgZm9yIHkgaW4gKHggKyBkZWx0YSwgeCAtIGRlbHRhKToKKyAgICAgICAgICAgIG1zZyA9IHRlbXBsYXRlLmZvcm1hdCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9MipkZWx0YSwgcmVsPTApLCBtc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbCh4LCB5LCB0b2w9ZGVsdGEvMiwgcmVsPTApLCBtc2cpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGludHMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZm9yIG4gaW4gWy0xMDczNywgLTE5NzUsIC03LCAtMiwgMCwgMSwgOSwgMzcsIDQyMywgOTg3NCwgMjM3ODkxMTBdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QobiwgMTApCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChuLCAyKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2Fic29sdXRlX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIGZsb2F0cyB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbLTI4NC4xMjYsIC05Ny4xLCAtMy40LCAtMi4xNSwgMC41LCAxLjAsIDcuOCwgNC4yMywgMzgxNy40XToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDEuNSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDAuMDEpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCh4LCAwLjAwMDEpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRnJhY3Rpb25zIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGRlbHRhID0gRnJhY3Rpb24oMSwgMjkpCisgICAgICAgIG51bWVyYXRvcnMgPSBbLTg0LCAtMTUsIC0yLCAtMSwgMCwgMSwgNSwgMTcsIDIzLCAzNCwgNzFdCisgICAgICAgIGZvciBmIGluIChGcmFjdGlvbihuLCAyOSkgZm9yIG4gaW4gbnVtZXJhdG9ycyk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChmLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KGYsIGZsb2F0KGRlbHRhKSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFwcHJveGltYXRlIGVxdWFsaXR5IG9mIERlY2ltYWxzIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGRlbHRhID0gRGVjaW1hbCgiMC4wMSIpCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMS4wIDMuNSAzNi4wOCA2MS43OSA3OTEyLjM2NDgiLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoZCwgZGVsdGEpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdCgtZCwgZGVsdGEpCisKKyAgICBkZWYgdGVzdF9jcm9zc196ZXJvKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBjYXNlIG9mIHRoZSB0d28gdmFsdWVzIGhhdmluZyBvcHBvc2l0ZSBzaWducy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCgxZS01LCAtMWUtNSwgdG9sPTFlLTQsIHJlbD0wKSkKKworICAgICMgPT09IFJlbGF0aXZlIGVycm9yIHRlc3RzID09PQorCisgICAgZGVmIGRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChzZWxmLCB4LCBkZWx0YSk6CisgICAgICAgIHRlbXBsYXRlID0gIlRlc3QgZmFpbHVyZSBmb3IgeD17IXJ9LCB5PXshcn0iCisgICAgICAgIGZvciB5IGluICh4KigxK2RlbHRhKSwgeCooMS1kZWx0YSkpOgorICAgICAgICAgICAgbXNnID0gdGVtcGxhdGUuZm9ybWF0KHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0wLCByZWw9MipkZWx0YSksIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0wLCByZWw9ZGVsdGEvMiksIG1zZykKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgaW50cyB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNjQsIDQ3LCB0b2w9MCwgcmVsPTAuMzYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDY0LCA0NywgdG9sPTAsIHJlbD0wLjM3KSkKKyAgICAgICAgIyAtLS0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg0NDksIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNDQ4LCA1MTIsIHRvbD0wLCByZWw9MC4xMjUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbCg0NDcsIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgZmxvYXRzIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgZm9yIHggaW4gWy0xNzguMzQsIC0wLjEsIDAuMSwgMS4wLCAzNi45NywgMjg0Ny4xMzYsIDkxNDUuMDc0XToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHgsIDAuMDIpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdCh4LCAwLjAwMDEpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRnJhY3Rpb25zIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRlbHRhID0gRnJhY3Rpb24oMywgOCkKKyAgICAgICAgZm9yIGYgaW4gW0YoMywgODQpLCBGKDE3LCAzMCksIEYoNDksIDUwKSwgRig5MiwgODUpXToKKyAgICAgICAgICAgIGZvciBkIGluIChkZWx0YSwgZmxvYXQoZGVsdGEpKToKKyAgICAgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChmLCBkKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KC1mLCBkKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX3JlbGF0aXZlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRGVjaW1hbHMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgZCBpbiBtYXAoRGVjaW1hbCwgIjAuMDIgMS4wIDUuNyAxMy42NyA5NC4xMzggOTEwMjcuOTMyMSIuc3BsaXQoKSk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdChkLCBEZWNpbWFsKCIwLjAwMSIpKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoLWQsIERlY2ltYWwoIjAuMDUiKSkKKworICAgICMgPT09IEJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yIHRlc3RzID09PQorCisgICAgIyBUaGVyZSBhcmUgZm91ciBjYXNlcyB0byBjb25zaWRlcjoKKyAgICAjICAgMSkgYWN0dWFsIGVycm9yIDw9IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yCisgICAgIyAgIDIpIGFjdHVhbCBlcnJvciA8PSBhYnNvbHV0ZSBlcnJvciBidXQgPiByZWxhdGl2ZSBlcnJvcgorICAgICMgICAzKSBhY3R1YWwgZXJyb3IgPD0gcmVsYXRpdmUgZXJyb3IgYnV0ID4gYWJzb2x1dGUgZXJyb3IKKyAgICAjICAgNCkgYWN0dWFsIGVycm9yID4gYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IKKworICAgIGRlZiBkb19jaGVja19ib3RoKHNlbGYsIGEsIGIsIHRvbCwgcmVsLCB0b2xfZmxhZywgcmVsX2ZsYWcpOgorICAgICAgICBjaGVjayA9IHNlbGYuYXNzZXJ0VHJ1ZSBpZiB0b2xfZmxhZyBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD10b2wsIHJlbD0wKSkKKyAgICAgICAgY2hlY2sgPSBzZWxmLmFzc2VydFRydWUgaWYgcmVsX2ZsYWcgZWxzZSBzZWxmLmFzc2VydEZhbHNlCisgICAgICAgIGNoZWNrKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9MCwgcmVsPXJlbCkpCisgICAgICAgIGNoZWNrID0gc2VsZi5hc3NlcnRUcnVlIGlmICh0b2xfZmxhZyBvciByZWxfZmxhZykgZWxzZSBzZWxmLmFzc2VydEZhbHNlCisgICAgICAgIGNoZWNrKGFwcHJveF9lcXVhbChhLCBiLCB0b2w9dG9sLCByZWw9cmVsKSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoMShzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA8PSBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDcuOTU1LCA3Ljk1MiwgMC4wMDQsIDMuOGUtNCwgVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKC03LjM4NywgLTcuMzg2LCAwLjAwMiwgMC4wMDAyLCBUcnVlLCBUcnVlKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgyKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IGFic29sdXRlIGVycm9yIGJ1dCA+IHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwNCwgMy43ZS00LCBUcnVlLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoMyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA8PSByZWxhdGl2ZSBlcnJvciBidXQgPiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDcuOTU1LCA3Ljk1MiwgMC4wMDEsIDMuOGUtNCwgRmFsc2UsIFRydWUpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYm90aDQoc2VsZik6CisgICAgICAgICMgVGVzdCBhY3R1YWwgZXJyb3IgPiBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDIuNzgsIDIuNzUsIDAuMDEsIDAuMDAxLCBGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCg5NzEuNDQsIDk3MS40NywgMC4wMiwgM2UtNSwgRmFsc2UsIEZhbHNlKQorCisKK2NsYXNzIEFwcHJveEVxdWFsU3BlY2lhbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgYXBwcm94X2VxdWFsIHdpdGggTkFOcyBhbmQgSU5GcyBhbmQgemVyb2VzLgorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICBmb3IgdHlwZV8gaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGluZiA9IHR5cGVfKCdpbmYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChpbmYsIGluZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGluZiwgaW5mLCAwLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoaW5mLCBpbmYsIDEsIDAuMDEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCgtaW5mLCAtaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKGluZiwgLWluZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbChpbmYsIDEwMDApKQorCisgICAgZGVmIHRlc3RfbmFuKHNlbGYpOgorICAgICAgICBmb3IgdHlwZV8gaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIG5hbiA9IHR5cGVfKCduYW4nKQorICAgICAgICAgICAgZm9yIG90aGVyIGluIChuYW4sIHR5cGVfKCdpbmYnKSwgMTAwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwobmFuLCBvdGhlcikpCisKKyAgICBkZWYgdGVzdF9mbG9hdF96ZXJvZXMoc2VsZik6CisgICAgICAgIG56ZXJvID0gbWF0aC5jb3B5c2lnbigwLjAsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKG56ZXJvLCAwLjAsIHRvbD0wLjEsIHJlbD0wLjEpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF96ZXJvZXMoc2VsZik6CisgICAgICAgIG56ZXJvID0gRGVjaW1hbCgiLTAuMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwobnplcm8sIERlY2ltYWwoMCksIHRvbD0wLjEsIHJlbD0wLjEpKQorCisKK2NsYXNzIFRlc3RBcHByb3hFcXVhbEVycm9ycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IGVycm9yIGNvbmRpdGlvbnMgb2YgYXBwcm94X2VxdWFsLgorCisgICAgZGVmIHRlc3RfYmFkX3RvbChzZWxmKToKKyAgICAgICAgIyBUZXN0IG5lZ2F0aXZlIHRvbCByYWlzZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFwcHJveF9lcXVhbCwgMTAwLCAxMDAsIC0xLCAwLjEpCisKKyAgICBkZWYgdGVzdF9iYWRfcmVsKHNlbGYpOgorICAgICAgICAjIFRlc3QgbmVnYXRpdmUgcmVsIHJhaXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXBwcm94X2VxdWFsLCAxMDAsIDEwMCwgMSwgLTAuMSkKKworCisjIC0tLSBUZXN0cyBmb3IgTnVtZXJpY1Rlc3RDYXNlIC0tLQorCisjIFRoZSBmb3JtYXR0aW5nIHJvdXRpbmUgdGhhdCBnZW5lcmF0ZXMgdGhlIGVycm9yIG1lc3NhZ2VzIGlzIGNvbXBsZXggZW5vdWdoCisjIHRoYXQgaXQgdG9vIG5lZWRzIHRlc3RpbmcuCisKK2NsYXNzIFRlc3ROdW1lcmljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlIGV4YWN0IHdvcmRpbmcgb2YgTnVtZXJpY1Rlc3RDYXNlIGVycm9yIG1lc3NhZ2VzIGlzICpub3QqIGd1YXJhbnRlZWQsCisgICAgIyBidXQgd2UgbmVlZCB0byBnaXZlIHRoZW0gc29tZSBzb3J0IG9mIHRlc3QgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUKKyAgICAjIGdlbmVyYXRlZCBjb3JyZWN0bHkuIEFzIGEgY29tcHJvbWlzZSwgd2UgbG9vayBmb3Igc3BlY2lmaWMgc3Vic3RyaW5ncworICAgICMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgZm91bmQgZXZlbiBpZiB0aGUgb3ZlcmFsbCBlcnJvciBtZXNzYWdlIGNoYW5nZXMuCisKKyAgICBkZWYgZG9fdGVzdChzZWxmLCBhcmdzKToKKyAgICAgICAgYWN0dWFsX21zZyA9IE51bWVyaWNUZXN0Q2FzZS5fbWFrZV9zdGRfZXJyX21zZygqYXJncykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmdlbmVyYXRlX3N1YnN0cmluZ3MoKmFyZ3MpCisgICAgICAgIGZvciBzdWJzdHJpbmcgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN1YnN0cmluZywgYWN0dWFsX21zZykKKworICAgIGRlZiB0ZXN0X251bWVyaWN0ZXN0Y2FzZV9pc190ZXN0Y2FzZShzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBOdW1lcmljVGVzdENhc2UgYWN0dWFsbHkgaXMgYSBUZXN0Q2FzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTnVtZXJpY1Rlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSkpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tc2dfbnVtZXJpYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmb3IgbnVtZXJpYyBjb21wYXJpc29ucy4KKyAgICAgICAgYXJncyA9ICgyLjUsIDQuMCwgMC41LCAwLjI1LCBOb25lKQorICAgICAgICBzZWxmLmRvX3Rlc3QoYXJncykKKworICAgIGRlZiB0ZXN0X2Vycm9yX21zZ19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBlcnJvciBtZXNzYWdlIGdlbmVyYXRlZCBmb3Igc2VxdWVuY2UgY29tcGFyaXNvbnMuCisgICAgICAgIGFyZ3MgPSAoMy43NSwgOC4yNSwgMS4yNSwgMC41LCA3KQorICAgICAgICBzZWxmLmRvX3Rlc3QoYXJncykKKworICAgIGRlZiBnZW5lcmF0ZV9zdWJzdHJpbmdzKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBpZHgpOgorICAgICAgICAiIiJSZXR1cm4gc3Vic3RyaW5ncyB3ZSBleHBlY3QgdG8gc2VlIGluIGVycm9yIG1lc3NhZ2VzLiIiIgorICAgICAgICBhYnNfZXJyLCByZWxfZXJyID0gX2NhbGNfZXJyb3JzKGZpcnN0LCBzZWNvbmQpCisgICAgICAgIHN1YnN0cmluZ3MgPSBbCisgICAgICAgICAgICAgICAgJ3RvbD0lcicgJSB0b2wsCisgICAgICAgICAgICAgICAgJ3JlbD0lcicgJSByZWwsCisgICAgICAgICAgICAgICAgJ2Fic29sdXRlIGVycm9yID0gJXInICUgYWJzX2VyciwKKyAgICAgICAgICAgICAgICAncmVsYXRpdmUgZXJyb3IgPSAlcicgJSByZWxfZXJyLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgaWR4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3Vic3RyaW5ncy5hcHBlbmQoJ2RpZmZlciBhdCBpbmRleCAlZCcgJSBpZHgpCisgICAgICAgIHJldHVybiBzdWJzdHJpbmdzCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09IFRlc3RzIGZvciB0aGUgc3RhdGlzdGljcyBtb2R1bGUgPT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK2NsYXNzIEdsb2JhbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBzdGF0aXN0aWNzCisgICAgZXhwZWN0ZWRfbWV0YWRhdGEgPSBbIl9fZG9jX18iLCAiX19hbGxfXyJdCisKKyAgICBkZWYgdGVzdF9tZXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2YgbWV0YWRhdGEuCisgICAgICAgIGZvciBtZXRhIGluIHNlbGYuZXhwZWN0ZWRfbWV0YWRhdGE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLm1vZHVsZSwgbWV0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIG5vdCBwcmVzZW50IiAlIG1ldGEpCisKKyAgICBkZWYgdGVzdF9jaGVja19hbGwoc2VsZik6CisgICAgICAgICMgQ2hlY2sgZXZlcnl0aGluZyBpbiBfX2FsbF9fIGV4aXN0cyBhbmQgaXMgcHVibGljLgorICAgICAgICBtb2R1bGUgPSBzZWxmLm1vZHVsZQorICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGUuX19hbGxfXzoKKyAgICAgICAgICAgICMgTm8gcHJpdmF0ZSBuYW1lcyBpbiBfX2FsbF9fOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuYW1lLnN0YXJ0c3dpdGgoIl8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaXZhdGUgbmFtZSAiJXMiIGluIF9fYWxsX18nICUgbmFtZSkKKyAgICAgICAgICAgICMgQW5kIGFueXRoaW5nIGluIF9fYWxsX18gbXVzdCBleGlzdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmcgbmFtZSAiJXMiIGluIF9fYWxsX18nICUgbmFtZSkKKworCitjbGFzcyBEb2NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZG9jX3Rlc3RzKHNlbGYpOgorICAgICAgICBmYWlsZWQsIHRyaWVkID0gZG9jdGVzdC50ZXN0bW9kKHN0YXRpc3RpY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih0cmllZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYWlsZWQsIDApCisKK2NsYXNzIFN0YXRpc3RpY3NFcnJvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2hhc19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVycm1zZyA9ICgKKyAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgU3RhdGlzdGljc0Vycm9yIHRvIGJlIGEgVmFsdWVFcnJvciwgYnV0IGdvdCBhIgorICAgICAgICAgICAgICAgICIgc3ViY2xhc3Mgb2YgJXIgaW5zdGVhZC4iCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzdGF0aXN0aWNzLCAnU3RhdGlzdGljc0Vycm9yJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgICAgICAgICBlcnJtc2cgJSBzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvci5fX2Jhc2VfXworICAgICAgICAgICAgICAgICkKKworCisjID09PSBUZXN0cyBmb3IgcHJpdmF0ZSB1dGlsaXR5IGZ1bmN0aW9ucyA9PT0KKworY2xhc3MgRXhhY3RSYXRpb1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBfZXhhY3RfcmF0aW8gdXRpbGl0eS4KKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gKC0yMCwgLTMsIDAsIDUsIDk5LCAxMCoqMjApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbyhpKSwgKGksIDEpKQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb24oc2VsZik6CisgICAgICAgIG51bWVyYXRvcnMgPSAoLTUsIDEsIDEyLCAzOCkKKyAgICAgICAgZm9yIG4gaW4gbnVtZXJhdG9yczoKKyAgICAgICAgICAgIGYgPSBGcmFjdGlvbihuLCAzNykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oZiksIChuLCAzNykpCisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbygwLjEyNSksICgxLCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbygxLjEyNSksICg5LCA4KSkKKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMTAwLCAxMDApIGZvciBfIGluIHJhbmdlKDEwMCldCisgICAgICAgIGZvciB4IGluIGRhdGE6CisgICAgICAgICAgICBudW0sIGRlbiA9IHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIG51bS9kZW4pCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsKHNlbGYpOgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBfZXhhY3RfcmF0aW8gPSBzdGF0aXN0aWNzLl9leGFjdF9yYXRpbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9leGFjdF9yYXRpbyhEKCIwLjEyNSIpKSwgKDEyNSwgMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2V4YWN0X3JhdGlvKEQoIjEyLjM0NSIpKSwgKDEyMzQ1LCAxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZXhhY3RfcmF0aW8oRCgiLTEuOTgiKSksICgtMTk4LCAxMDApKQorCisKK2NsYXNzIERlY2ltYWxUb1JhdGlvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9kZWNpbWFsX3RvX3JhdGlvIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICBkZWYgdGVzdFNwZWNpYWxzUmFpc2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5BTnMgYW5kIElORnMgcmFpc2UgVmFsdWVFcnJvci4KKyAgICAgICAgIyBOb24tc3BlY2lhbCB2YWx1ZXMgYXJlIGNvdmVyZWQgYnkgX2V4YWN0X3JhdGlvIGFib3ZlLgorICAgICAgICBmb3IgZCBpbiAoRGVjaW1hbCgnTkFOJyksIERlY2ltYWwoJ3NOQU4nKSwgRGVjaW1hbCgnSU5GJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbywgZCkKKworCisKKyMgPT09IFRlc3RzIGZvciBwdWJsaWMgZnVuY3Rpb25zID09PQorCitjbGFzcyBVbml2YXJpYXRlQ29tbW9uTWl4aW46CisgICAgIyBDb21tb24gdGVzdHMgZm9yIG1vc3QgdW5pdmFyaWF0ZSBmdW5jdGlvbnMgdGhhdCB0YWtlIGEgZGF0YSBhcmd1bWVudC4KKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgICMgRmFpbCBpZiBnaXZlbiBubyBhcmd1bWVudHMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgIyBGYWlsIHdoZW4gdGhlIGRhdGEgYXJndW1lbnQgKGZpcnN0IGFyZ3VtZW50KSBpcyBlbXB0eS4KKyAgICAgICAgZm9yIGVtcHR5IGluIChbXSwgKCksIGl0ZXIoW10pKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGVtcHR5KQorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGludCBkYXRhIGZvciB2YXJpb3VzIHRlc3RzLiIiIgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMCkpCisgICAgICAgIHdoaWxlIGRhdGEgPT0gc29ydGVkKGRhdGEpOgorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X25vX2lucGxhY2VfbW9kaWZpY2F0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IG1vZGlmeSBpdHMgaW5wdXQgZGF0YS4KKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSAhPSAxICAjIE5lY2Vzc2FyeSB0byBhdm9pZCBpbmZpbml0ZSBsb29wLgorICAgICAgICBhc3NlcnQgZGF0YSAhPSBzb3J0ZWQoZGF0YSkKKyAgICAgICAgc2F2ZWQgPSBkYXRhWzpdCisgICAgICAgIGFzc2VydCBkYXRhIGlzIG5vdCBzYXZlZAorICAgICAgICBfID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGRhdGEsIHNhdmVkLCAiZGF0YSBoYXMgYmVlbiBtb2RpZmllZCIpCisKKyAgICBkZWYgdGVzdF9vcmRlcl9kb2VzbnRfbWF0dGVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgb3JkZXIgb2YgZGF0YSBwb2ludHMgZG9lc24ndCBjaGFuZ2UgdGhlIHJlc3VsdC4KKworICAgICAgICAjIENBVVRJT046IGR1ZSB0byBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMsIHRoZSByZXN1bHQgYWN0dWFsbHkKKyAgICAgICAgIyBtYXkgZGVwZW5kIG9uIHRoZSBvcmRlci4gQ29uc2lkZXIgdGhpcyB0ZXN0IHJlcHJlc2VudGluZyBhbiBpZGVhbC4KKyAgICAgICAgIyBUbyBhdm9pZCB0aGlzIHRlc3QgZmFpbGluZywgb25seSB0ZXN0IHdpdGggZXhhY3QgdmFsdWVzIHN1Y2ggYXMgaW50cworICAgICAgICAjIG9yIEZyYWN0aW9ucy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCAzLCAzLCA0LCA1LCA2XSoxMDAKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgYWN0dWFsID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworICAgIGRlZiB0ZXN0X3R5cGVfb2ZfZGF0YV9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgdHlwZSBvZiBpdGVyYWJsZSBkYXRhIGRvZXNuJ3QgZWZmZWN0IHRoZSByZXN1bHQuCisgICAgICAgIGNsYXNzIE15TGlzdChsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTXlUdXBsZSh0dXBsZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBnZW5lcmF0b3IoZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gKG9iaiBmb3Igb2JqIGluIGRhdGEpCisgICAgICAgIGRhdGEgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIGZvciBraW5kIGluIChsaXN0LCB0dXBsZSwgaXRlciwgTXlMaXN0LCBNeVR1cGxlLCBnZW5lcmF0b3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGtpbmQoZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yYW5nZV9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmdW5jdGlvbnMgd29yayB3aXRoIHJhbmdlIG9iamVjdHMuCisgICAgICAgIGRhdGEgPSByYW5nZSgyMCwgNTAsIDMpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGxpc3QoZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2JhZF9hcmdfdHlwZXMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZ1bmN0aW9uIHJhaXNlcyB3aGVuIGdpdmVuIGRhdGEgb2YgdGhlIHdyb25nIHR5cGUuCisKKyAgICAgICAgIyBEb24ndCByb2xsIHRoZSBmb2xsb3dpbmcgaW50byBhIGxvb3AgbGlrZSB0aGlzOgorICAgICAgICAjICAgZm9yIGJhZCBpbiBsaXN0X29mX2JhZDoKKyAgICAgICAgIyAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKGJhZCkKKyAgICAgICAgIworICAgICAgICAjIFNpbmNlIGFzc2VydFJhaXNlcyBkb2Vzbid0IHNob3cgdGhlIGFyZ3VtZW50cyB0aGF0IGNhdXNlZCB0aGUgdGVzdAorICAgICAgICAjIGZhaWx1cmUsIGl0IGlzIHZlcnkgZGlmZmljdWx0IHRvIGRlYnVnIHRoZXNlIHRlc3QgZmFpbHVyZXMgd2hlbiB0aGUKKyAgICAgICAgIyBmb2xsb3dpbmcgYXJlIGluIGEgbG9vcC4KKyAgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcihOb25lKQorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKDIzKQorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKDQyLjApCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3Iob2JqZWN0KCkpCisKKyAgICBkZWYgY2hlY2tfZm9yX3R5cGVfZXJyb3Ioc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgKmFyZ3MpCisKKyAgICBkZWYgdGVzdF90eXBlX29mX2RhdGFfZWxlbWVudChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGUgdHlwZSBvZiBkYXRhIGVsZW1lbnRzIGRvZXNuJ3QgYWZmZWN0IHRoZSBudW1lcmljIHJlc3VsdC4KKyAgICAgICAgIyBUaGlzIGlzIGEgd2Vha2VyIHRlc3QgdGhhbiBVbml2YXJpYXRlVHlwZU1peGluLnRlc3RUeXBlc0NvbnNlcnZlZCwKKyAgICAgICAgIyBiZWNhdXNlIGl0IGNoZWNrcyB0aGUgbnVtZXJpYyByZXN1bHQgYnkgZXF1YWxpdHksIGJ1dCBub3QgYnkgdHlwZS4KKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19hZGRfXyhvdGhlcikpCisgICAgICAgICAgICBfX3JhZGRfXyA9IF9fYWRkX18KKworICAgICAgICByYXcgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKHJhdykKKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBNeUZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbik6CisgICAgICAgICAgICBkYXRhID0gW2tpbmQoeCkgZm9yIHggaW4gcmF3XQorICAgICAgICAgICAgcmVzdWx0ID0gdHlwZShleHBlY3RlZCkoc2VsZi5mdW5jKGRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisKK2NsYXNzIFVuaXZhcmlhdGVUeXBlTWl4aW46CisgICAgIiIiTWl4aW4gY2xhc3MgZm9yIHR5cGUtY29uc2VydmluZyBmdW5jdGlvbnMuCisKKyAgICBUaGlzIG1peGluIGNsYXNzIGhvbGRzIHRlc3QocykgZm9yIGZ1bmN0aW9ucyB3aGljaCBjb25zZXJ2ZSB0aGUgdHlwZSBvZgorICAgIGluZGl2aWR1YWwgZGF0YSBwb2ludHMuIEUuZy4gdGhlIG1lYW4gb2YgYSBsaXN0IG9mIEZyYWN0aW9ucyBzaG91bGQgaXRzZWxmCisgICAgYmUgYSBGcmFjdGlvbi4KKworICAgIE5vdCBhbGwgdGVzdHMgdG8gZG8gd2l0aCB0eXBlcyBuZWVkIGdvIGluIHRoaXMgY2xhc3MuIE9ubHkgdGhvc2UgdGhhdAorICAgIHJlbHkgb24gdGhlIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgc2FtZSB0eXBlIGFzIGl0cyBpbnB1dCBkYXRhLgorICAgICIiIgorICAgIGRlZiB0ZXN0X3R5cGVzX2NvbnNlcnZlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZnVuY3Rpb25zIGtlZXBzIHRoZSBzYW1lIHR5cGUgYXMgdGhlaXIgZGF0YSBwb2ludHMuCisgICAgICAgICMgKEV4Y2x1ZGVzIG1peGVkIGRhdGEgdHlwZXMuKSBUaGlzIG9ubHkgdGVzdHMgdGhlIHR5cGUgb2YgdGhlIHJldHVybgorICAgICAgICAjIHJlc3VsdCwgbm90IHRoZSB2YWx1ZS4KKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19zdWJfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19yc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19yc3ViX18ob3RoZXIpKQorICAgICAgICAgICAgZGVmIF9fcG93X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpKHN1cGVyKCkuX19wb3dfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX2FkZF9fKG90aGVyKSkKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgICAgIGRhdGEgPSBzZWxmLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgRGVjaW1hbCwgRnJhY3Rpb24sIE15RmxvYXQpOgorICAgICAgICAgICAgZCA9IFtraW5kKHgpIGZvciB4IGluIGRhdGFdCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyZXN1bHQpLCBraW5kKQorCisKK2NsYXNzIFRlc3RTdW0oTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlQ29tbW9uTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdCBjYXNlcyBmb3Igc3RhdGlzdGljcy5fc3VtKCkgZnVuY3Rpb24uCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MuX3N1bQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSB0ZXN0IGZvciBlbXB0eSBkYXRhLgorICAgICAgICBmb3IgZGF0YSBpbiAoW10sICgpLCBpdGVyKFtdKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIzKSwgMjMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyLjMpLCAyLjMpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMSwgNSwgMywgLTQsIC04LCAyMCwgNDIsIDFdKSwgNjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFs0LCAyLCAzLCAtOCwgN10sIDEwMDApLCAxMDA4KQorCisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMC4yNV0qMjApLCA1LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFswLjEyNSwgMC4yNSwgMC41LCAwLjc1XSwgMS41KSwgMy4xMjUpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbRnJhY3Rpb24oMSwgMTAwMCldKjUwMCksIEZyYWN0aW9uKDEsIDIpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgiMC4wMDEiKSwgRCgiNS4yNDYiKSwgRCgiMS43MDIiKSwgRCgiLTAuMDI1IiksCisgICAgICAgICAgICAgICAgRCgiMy45NzQiKSwgRCgiMi4zMjgiKSwgRCgiNC42MTciKSwgRCgiMi44NDMiKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEZWNpbWFsKCIyMC42ODYiKSkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfd2l0aF9tYXRoX2ZzdW0oc2VsZik6CisgICAgICAgICMgQ29tcGFyZSB3aXRoIHRoZSBtYXRoLmZzdW0gZnVuY3Rpb24uCisgICAgICAgICMgSWRlYWxseSB3ZSBvdWdodCB0byBnZXQgdGhlIGV4YWN0IHNhbWUgcmVzdWx0LCBidXQgc29tZXRpbWVzCisgICAgICAgICMgd2UgZGlmZmVyIGJ5IGEgdmVyeSBzbGlnaHQgYW1vdW50IDotKAorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0xMDAsIDEwMDApIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgbWF0aC5mc3VtKGRhdGEpLCByZWw9MmUtMTYpCisKKyAgICBkZWYgdGVzdF9zdGFydF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIG9wdGlvbmFsIHN0YXJ0IGFyZ3VtZW50IHdvcmtzIGNvcnJlY3RseS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgxLCAxMDAwKSBmb3IgXyBpbiByYW5nZSgxMDApXQorICAgICAgICB0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCs0Miwgc2VsZi5mdW5jKGRhdGEsIDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LTIzLCBzZWxmLmZ1bmMoZGF0YSwgLTIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KzFlMjAsIHNlbGYuZnVuYyhkYXRhLCAxZTIwKSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ3NfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2Ygc3RyaW5ncyBzaG91bGQgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzXSwgJzk5OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgMywgJzk5OSddKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2YgYnl0ZXMgc2hvdWxkIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgM10sIGInOTk5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzLCBiJzk5OSddKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfc3VtKHNlbGYpOgorICAgICAgICAjIE1peGVkIHN1bXMgYXJlIGFsbG93ZWQuCisKKyAgICAgICAgIyBDYXJlZnVsIGhlcmU6IG9yZGVyIG1hdHRlcnMuIENhbid0IG1peCBGcmFjdGlvbiBhbmQgRGVjaW1hbCBkaXJlY3RseSwKKyAgICAgICAgIyBvbmx5IGFmdGVyIHRoZXkncmUgY29udmVydGVkIHRvIGZsb2F0LgorICAgICAgICBkYXRhID0gWzEsIDIsIEZyYWN0aW9uKDEsIDIpLCAzLjAsIERlY2ltYWwoIjAuMjUiKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDYuNzUpCisKKworY2xhc3MgU3VtSW50ZXJuYWxzVGVzdChOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdCBpbnRlcm5hbHMgb2YgdGhlIHN1bSBmdW5jdGlvbi4KKworICAgIGRlZiB0ZXN0X2lnbm9yZV9pbnN0YW5jZV9mbG9hdF9tZXRob2Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IF9fZmxvYXRfXyBtZXRob2RzIG9uIGRhdGEgaW5zdGFuY2VzIGFyZSBpZ25vcmVkLgorCisgICAgICAgICMgUHl0aG9uIHR5cGljYWxseSBjYWxscyBfX2R1bmRlcl9fIG1ldGhvZHMgb24gdGhlIGNsYXNzLCBub3QgdGhlCisgICAgICAgICMgaW5zdGFuY2UuIFRoZSBgYHN1bWBgIGltcGxlbWVudGF0aW9uIGNhbGxzIF9fZmxvYXRfXyBkaXJlY3RseS4gVG8KKyAgICAgICAgIyBiZXR0ZXIgbWF0Y2ggdGhlIGJlaGF2aW91ciBvZiBQeXRob24sIHdlIGNhbGwgaXQgb25seSBvbiB0aGUgY2xhc3MsCisgICAgICAgICMgbm90IHRoZSBpbnN0YW5jZS4gVGhpcyB0ZXN0IHdpbGwgZmFpbCBpZiBzb21lYm9keSAiZml4ZXMiIHRoYXQgY29kZS4KKworICAgICAgICAjIENyZWF0ZSBhIGZha2UgX19mbG9hdF9fIG1ldGhvZC4KKyAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd0ZXN0IGZhaWxzJykKKworICAgICAgICAjIEluamVjdCBpdCBpbnRvIGFuIGluc3RhbmNlLgorICAgICAgICBjbGFzcyBNeU51bWJlcihGcmFjdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHggPSBNeU51bWJlcigzKQorICAgICAgICB4Ll9fZmxvYXRfXyA9IHR5cGVzLk1ldGhvZFR5cGUoX19mbG9hdF9fLCB4KQorCisgICAgICAgICMgQ2hlY2sgaXQgd29ya3MgYXMgZXhwZWN0ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB4Ll9fZmxvYXRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh4KSwgMy4wKQorICAgICAgICAjIEFuZCBub3cgdGVzdCB0aGUgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fc3VtKFsxLjAsIDIuMCwgeCwgNC4wXSksIDEwLjApCisKKworY2xhc3MgU3VtVG9ydHVyZVRlc3QoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90b3J0dXJlKHNlbGYpOgorICAgICAgICAjIFRpbSBQZXRlcnMnIHRvcnR1cmUgdGVzdCBmb3Igc3VtLCBhbmQgdmFyaWFudHMgb2Ygc2FtZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzEsIDFlMTAwLCAxLCAtMWUxMDBdKjEwMDAwKSwgMjAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzFlMTAwLCAxLCAxLCAtMWUxMDBdKjEwMDAwKSwgMjAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbCgKKyAgICAgICAgICAgIHN0YXRpc3RpY3MuX3N1bShbMWUtMTAwLCAxLCAxZS0xMDAsIC0xXSoxMDAwMCksIDIuMGUtOTYsIHJlbD01ZS0xNgorICAgICAgICAgICAgKQorCisKK2NsYXNzIFN1bVNwZWNpYWxWYWx1ZXMoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3QgdGhhdCBzdW0gd29ya3MgY29ycmVjdGx5IHdpdGggSUVFRS03NTQgc3BlY2lhbCB2YWx1ZXMuCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgbmFuID0gdHlwZV8oJ25hbicpCisgICAgICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIG5hbiwgMl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocmVzdWx0KSwgdHlwZV8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIGNoZWNrX2luZmluaXR5KHNlbGYsIHgsIGluZik6CisgICAgICAgICIiIkNoZWNrIHggaXMgYW4gaW5maW5pdHkgb2YgdGhlIHNhbWUgdHlwZSBhbmQgc2lnbiBhcyBpbmYuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKHgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoeCksIHR5cGUoaW5mKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID4gMCwgaW5mID4gMCkKKyAgICAgICAgYXNzZXJ0IHggPT0gaW5mCisKKyAgICBkZWYgZG9fdGVzdF9pbmYoc2VsZiwgaW5mKToKKyAgICAgICAgIyBBZGRpbmcgYSBzaW5nbGUgaW5maW5pdHkgZ2l2ZXMgaW5maW5pdHkuCisgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgMiwgaW5mLCAzXSkKKyAgICAgICAgc2VsZi5jaGVja19pbmZpbml0eShyZXN1bHQsIGluZikKKyAgICAgICAgIyBBZGRpbmcgdHdvIGluZmluaXRpZXMgb2YgdGhlIHNhbWUgc2lnbiBhbHNvIGdpdmVzIGluZmluaXR5LgorICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIDIsIGluZiwgMywgaW5mLCA0XSkKKyAgICAgICAgc2VsZi5jaGVja19pbmZpbml0eShyZXN1bHQsIGluZikKKworICAgIGRlZiB0ZXN0X2Zsb2F0X2luZihzZWxmKToKKyAgICAgICAgaW5mID0gZmxvYXQoJ2luZicpCisgICAgICAgIGZvciBzaWduIGluICgrMSwgLTEpOgorICAgICAgICAgICAgc2VsZi5kb190ZXN0X2luZihzaWduKmluZikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfaW5mKHNlbGYpOgorICAgICAgICBpbmYgPSBEZWNpbWFsKCdpbmYnKQorICAgICAgICBmb3Igc2lnbiBpbiAoKzEsIC0xKToKKyAgICAgICAgICAgIHNlbGYuZG9fdGVzdF9pbmYoc2lnbippbmYpCisKKyAgICBkZWYgdGVzdF9mbG9hdF9taXNtYXRjaGVkX2luZnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFkZGluZyB0d28gaW5maW5pdGllcyBvZiBvcHBvc2l0ZSBzaWduIGdpdmVzIGEgTkFOLgorICAgICAgICBpbmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgcmVzdWx0ID0gc3RhdGlzdGljcy5fc3VtKFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9taXNtYXRjaGVkX2luZnNfdG9fbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIERlY2ltYWwgSU5GcyB3aXRoIG9wcG9zaXRlIHNpZ24gcmV0dXJucyBOQU4uCisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGRhdGEgPSBbMSwgMiwgaW5mLCAzLCAtaW5mLCA0XQorICAgICAgICB3aXRoIGRlY2ltYWwubG9jYWxjb250ZXh0KGRlY2ltYWwuRXh0ZW5kZWRDb250ZXh0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHN0YXRpc3RpY3MuX3N1bShkYXRhKSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX21pc21hdGNoZWRfaW5mc190b19uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBhZGRpbmcgRGVjaW1hbCBJTkZzIHdpdGggb3Bwb3NpdGUgc2lnbiByYWlzZXMgSW52YWxpZE9wZXJhdGlvbi4KKyAgICAgICAgaW5mID0gRGVjaW1hbCgnaW5mJykKKyAgICAgICAgZGF0YSA9IFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdCisgICAgICAgIHdpdGggZGVjaW1hbC5sb2NhbGNvbnRleHQoZGVjaW1hbC5CYXNpY0NvbnRleHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLCBzdGF0aXN0aWNzLl9zdW0sIGRhdGEpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX3NuYW5fcmFpc2VzKHNlbGYpOgorICAgICAgICAjIEFkZGluZyBzTkFOIHNob3VsZCByYWlzZSBJbnZhbGlkT3BlcmF0aW9uLgorICAgICAgICBzTkFOID0gRGVjaW1hbCgnc05BTicpCisgICAgICAgIGRhdGEgPSBbMSwgc05BTiwgMl0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLCBzdGF0aXN0aWNzLl9zdW0sIGRhdGEpCisKKworIyA9PT0gVGVzdHMgZm9yIGF2ZXJhZ2VzID09PQorCitjbGFzcyBBdmVyYWdlTWl4aW4oVW5pdmFyaWF0ZUNvbW1vbk1peGluKToKKyAgICAjIE1peGluIGNsYXNzIGhvbGRpbmcgY29tbW9uIHRlc3RzIGZvciBhdmVyYWdlcy4KKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBBdmVyYWdlIG9mIGEgc2luZ2xlIHZhbHVlIGlzIHRoZSB2YWx1ZSBpdHNlbGYuCisgICAgICAgIGZvciB4IGluICgyMywgNDIuNSwgMS4zZTE1LCBGcmFjdGlvbigxNSwgMTkpLCBEZWNpbWFsKCcwLjI4JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoW3hdKSwgeCkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBUaGUgYXZlcmFnZSBvZiBhIHNpbmdsZSByZXBlYXRlZCB2YWx1ZSBpcyB0aGUgdmFsdWUgaXRzZWxmLgorICAgICAgICBmb3IgeCBpbiAoMy41LCAxNywgMi41ZTE1LCBGcmFjdGlvbig2MSwgNjcpLCBEZWNpbWFsKCc0Ljk3MTInKSk6CisgICAgICAgICAgICBmb3IgY291bnQgaW4gKDIsIDUsIDEwLCAyMCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IFt4XSpjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCB4KQorCisKK2NsYXNzIFRlc3RNZWFuKE51bWVyaWNUZXN0Q2FzZSwgQXZlcmFnZU1peGluLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVhbgorCisgICAgZGVmIHRlc3RfdG9ydHVyZV9wZXAoc2VsZik6CisgICAgICAgICMgIlRvcnR1cmUgVGVzdCIgZnJvbSBQRVAtNDUwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMWUxMDAsIDEsIDMsIC0xZTEwMF0pLCAxKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbnRzLgorICAgICAgICBkYXRhID0gWzAsIDEsIDIsIDMsIDMsIDMsIDQsIDUsIDUsIDYsIDcsIDcsIDcsIDcsIDgsIDldCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0LjgxMjUpCisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggZmxvYXRzLgorICAgICAgICBkYXRhID0gWzE3LjI1LCAxOS43NSwgMjAuMCwgMjEuNSwgMjEuNzUsIDIzLjI1LCAyNS4xMjUsIDI3LjVdCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAyMi4wMTU2MjUpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbnRzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoIjEuNjM0IiksIEQoIjIuNTE3IiksIEQoIjMuOTEyIiksIEQoIjQuMDcyIiksIEQoIjUuODEzIildCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCIzLjU4OTYiKSkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgMiksIEYoMiwgMyksIEYoMywgNCksIEYoNCwgNSksIEYoNSwgNiksIEYoNiwgNyksIEYoNywgOCldCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDE0NzksIDE5NjApKQorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGluZmluaXRpZXMuCisgICAgICAgIHJhdyA9IFsxLCAzLCA1LCA3LCA5XSAgIyBVc2Ugb25seSBpbnRzLCB0byBhdm9pZCBUeXBlRXJyb3IgbGF0ZXIuCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBmb3Igc2lnbiBpbiAoMSwgLTEpOgorICAgICAgICAgICAgICAgIGluZiA9IGtpbmQoImluZiIpKnNpZ24KKyAgICAgICAgICAgICAgICBkYXRhID0gcmF3ICsgW2luZl0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZihyZXN1bHQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBpbmYpCisKKyAgICBkZWYgdGVzdF9taXNtYXRjaGVkX2luZnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW5maW5pdGllcyBvZiBvcHBvc2l0ZSBzaWduLgorICAgICAgICBkYXRhID0gWzIsIDQsIDYsIGZsb2F0KCdpbmYnKSwgMSwgMywgNSwgZmxvYXQoJy1pbmYnKV0KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggTkFOcy4KKyAgICAgICAgcmF3ID0gWzEsIDMsIDUsIDcsIDldICAjIFVzZSBvbmx5IGludHMsIHRvIGF2b2lkIFR5cGVFcnJvciBsYXRlci4KKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGluZiA9IGtpbmQoIm5hbiIpCisgICAgICAgICAgICBkYXRhID0gcmF3ICsgW2luZl0KKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X2JpZ19kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIGEgbGFyZ2UgY29uc3RhbnQgdG8gZXZlcnkgZGF0YSBwb2ludC4KKyAgICAgICAgYyA9IDFlOQorICAgICAgICBkYXRhID0gWzMuNCwgNC41LCA0LjksIDYuNywgNi44LCA3LjIsIDguMCwgOC4xLCA5LjRdCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpICsgYworICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgIT0gYworICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoW3grYyBmb3IgeCBpbiBkYXRhXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZG91YmxlZF9kYXRhKHNlbGYpOgorICAgICAgICAjIE1lYW4gb2YgW2EsYixjLi4uel0gc2hvdWxkIGJlIHNhbWUgYXMgZm9yIFthLGEsYixiLGMsYy4uLnosel0uCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTMsIDUpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBhY3R1YWwgPSBzZWxmLmZ1bmMoZGF0YSoyKQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdE1lZGlhbihOdW1lcmljVGVzdENhc2UsIEF2ZXJhZ2VNaXhpbik6CisgICAgIyBDb21tb24gdGVzdHMgZm9yIG1lZGlhbiBhbmQgYWxsIG1lZGlhbi4qIGZ1bmN0aW9ucy4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICAiIiJPdmVybG9hZCBtZXRob2QgZnJvbSBVbml2YXJpYXRlQ29tbW9uTWl4aW4uIiIiCisgICAgICAgIGRhdGEgPSBzdXBlcigpLnByZXBhcmVfZGF0YSgpCisgICAgICAgIGlmIGxlbihkYXRhKSUyICE9IDE6CisgICAgICAgICAgICBkYXRhLmFwcGVuZCgyKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHRlc3RfZXZlbl9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgaW50IGRhdGEgcG9pbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjUpCisKKyAgICBkZWYgdGVzdF9vZGRfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3aXRoIGFuIG9kZCBudW1iZXIgb2YgaW50IGRhdGEgcG9pbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDYsIDldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0KQorCisgICAgZGVmIHRlc3Rfb2RkX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigzLCA3KSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpLCBGKDYsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigxLCAyKSkKKworICAgIGRlZiB0ZXN0X29kZF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMi41JyksIEQoJzMuMScpLCBEKCc0LjInKSwgRCgnNS43JyksIEQoJzUuOCcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnNC4yJykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMS4yJyksIEQoJzIuNScpLCBEKCczLjEnKSwgRCgnNC4yJyksIEQoJzUuNycpLCBEKCc1LjgnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzMuNjUnKSkKKworCitjbGFzcyBUZXN0TWVkaWFuRGF0YVR5cGUoTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3QgY29uc2VydmF0aW9uIG9mIGRhdGEgZWxlbWVudCB0eXBlIGZvciBtZWRpYW4uCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbgorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTUpKQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICB3aGlsZSBkYXRhID09IHNvcnRlZChkYXRhKToKKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHJldHVybiBkYXRhCisKKworY2xhc3MgVGVzdE1lZGlhbkxvdyhUZXN0TWVkaWFuLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuX2xvdworCisgICAgZGVmIHRlc3RfZXZlbl9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2xvdyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMpCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9sb3cgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNyksIEYoMiwgNyksIEYoMywgNyksIEYoNCwgNyksIEYoNSwgNyksIEYoNiwgNyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDMsIDcpKQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9sb3cgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcxLjEnKSwgRCgnMi4yJyksIEQoJzMuMycpLCBEKCc0LjQnKSwgRCgnNS41JyksIEQoJzYuNicpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnMy4zJykpCisKKworY2xhc3MgVGVzdE1lZGlhbkhpZ2goVGVzdE1lZGlhbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbl9oaWdoCisKKyAgICBkZWYgdGVzdF9ldmVuX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5faGlnaCB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQpCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9oaWdoIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpLCBGKDYsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRig0LCA3KSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5faGlnaCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzEuMScpLCBEKCcyLjInKSwgRCgnMy4zJyksIEQoJzQuNCcpLCBEKCc1LjUnKSwgRCgnNi42JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCc0LjQnKSkKKworCitjbGFzcyBUZXN0TWVkaWFuR3JvdXBlZChUZXN0TWVkaWFuKToKKyAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQuCisgICAgIyBEb2Vzbid0IGNvbnNlcnZlIGRhdGEgZWxlbWVudCB0eXBlcywgc28gZG9uJ3QgdXNlIFRlc3RNZWRpYW5UeXBlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW5fZ3JvdXBlZAorCisgICAgZGVmIHRlc3Rfb2RkX251bWJlcl9yZXBlYXRlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbi5ncm91cGVkIHdpdGggcmVwZWF0ZWQgbWVkaWFuIHZhbHVlcy4KKyAgICAgICAgZGF0YSA9IFsxMiwgMTMsIDE0LCAxNCwgMTQsIDE1LCAxNV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDE0KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMTIsIDEzLCAxNCwgMTQsIDE0LCAxNCwgMTVdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAxMy44NzUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFs1LCAxMCwgMTAsIDE1LCAyMCwgMjAsIDIwLCAyMCwgMjUsIDI1LCAzMF0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgNSksIDE5LjM3NSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzE2LCAxOCwgMTgsIDE4LCAxOCwgMjAsIDIwLCAyMCwgMjIsIDIyLCAyMiwgMjQsIDI0LCAyNiwgMjhdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIpLCAyMC42NjY2NjY2NywgdG9sPTFlLTgpCisKKyAgICBkZWYgdGVzdF9ldmVuX251bWJlcl9yZXBlYXRlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbi5ncm91cGVkIHdpdGggcmVwZWF0ZWQgbWVkaWFuIHZhbHVlcy4KKyAgICAgICAgZGF0YSA9IFs1LCAxMCwgMTAsIDE1LCAyMCwgMjAsIDIwLCAyNSwgMjUsIDMwXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhLCA1KSwgMTkuMTY2NjY2NjcsIHRvbD0xZS04KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMiwgMywgNCwgNCwgNCwgNV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuODMzMzMzMzMsIHRvbD0xZS04KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMiwgMywgMywgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNiwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQuNSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzMsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDYsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0Ljc1KQorCisgICAgZGVmIHRlc3RfcmVwZWF0ZWRfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIG1ldGhvZCBmcm9tIEF2ZXJhZ2VNaXhpbi4KKyAgICAgICAgIyBZZXQgYWdhaW4sIGZhaWx1cmUgb2YgbWVkaWFuX2dyb3VwZWQgdG8gY29uc2VydmUgdGhlIGRhdGEgdHlwZQorICAgICAgICAjIGNhdXNlcyBtZSBoZWFkYWNoZXMgOi0oCisgICAgICAgIGZvciB4IGluICg1LjMsIDY4LCA0LjNlMTcsIEZyYWN0aW9uKDI5LCAxMDEpLCBEZWNpbWFsKCczMi45NzE0JykpOgorICAgICAgICAgICAgZm9yIGNvdW50IGluICgyLCA1LCAxMCwgMjApOgorICAgICAgICAgICAgICAgIGRhdGEgPSBbeF0qY291bnQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZmxvYXQoeCkpCisKKyAgICBkZWYgdGVzdF9vZGRfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRig1LCA0KSwgRig5LCA0KSwgRigxMywgNCksIEYoMTMsIDQpLCBGKDE3LCA0KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuMCkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoNSwgNCksIEYoOSwgNCksIEYoMTMsIDQpLCBGKDEzLCA0KSwgRigxNywgNCksIEYoMTcsIDQpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy4yNSkKKworICAgIGRlZiB0ZXN0X29kZF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCc1LjUnKSwgRCgnNi41JyksIEQoJzYuNScpLCBEKCc3LjUnKSwgRCgnOC41JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA2Ljc1KQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnNS41JyksIEQoJzUuNScpLCBEKCc2LjUnKSwgRCgnNi41JyksIEQoJzcuNScpLCBEKCc4LjUnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDYuNSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gW0QoJzUuNScpLCBEKCc1LjUnKSwgRCgnNi41JyksIEQoJzcuNScpLCBEKCc3LjUnKSwgRCgnOC41JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA3LjApCisKKyAgICBkZWYgdGVzdF9pbnRlcnZhbChzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdpdGggaW50ZXJ2YWwgYXJndW1lbnQuCisgICAgICAgIGRhdGEgPSBbMi4yNSwgMi41LCAyLjUsIDIuNzUsIDIuNzUsIDMuMCwgMy4wLCAzLjI1LCAzLjUsIDMuNzVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDAuMjUpLCAyLjg3NSkKKyAgICAgICAgZGF0YSA9IFsyLjI1LCAyLjUsIDIuNSwgMi43NSwgMi43NSwgMi43NSwgMy4wLCAzLjAsIDMuMjUsIDMuNSwgMy43NV0KKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMC4yNSksIDIuODMzMzMzMzMsIHRvbD0xZS04KQorICAgICAgICBkYXRhID0gWzIyMCwgMjIwLCAyNDAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjgwLCAyODAsIDMwMCwgMzIwLCAzNDBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIwKSwgMjY1LjApCisKKworY2xhc3MgVGVzdE1vZGUoTnVtZXJpY1Rlc3RDYXNlLCBBdmVyYWdlTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdCBjYXNlcyBmb3IgdGhlIGRpc2NyZXRlIHZlcnNpb24gb2YgbW9kZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubW9kZQorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgIiIiT3ZlcmxvYWQgbWV0aG9kIGZyb20gVW5pdmFyaWF0ZUNvbW1vbk1peGluLiIiIgorICAgICAgICAjIE1ha2Ugc3VyZSB0ZXN0IGRhdGEgaGFzIGV4YWN0bHkgb25lIG1vZGUuCisgICAgICAgIHJldHVybiBbMSwgMSwgMSwgMSwgMywgNCwgNywgOSwgMCwgOCwgMl0KKworICAgIGRlZiB0ZXN0X3JhbmdlX2RhdGEoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgdGVzdCBmcm9tIFVuaXZhcmlhdGVDb21tb25NaXhpbi4KKyAgICAgICAgZGF0YSA9IHJhbmdlKDIwLCA1MCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworICAgIGRlZiB0ZXN0X25vbWluYWxfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgd2l0aCBub21pbmFsIGRhdGEuCisgICAgICAgIGRhdGEgPSAnYWJjYmRiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgJ2InKQorICAgICAgICBkYXRhID0gJ2ZlIGZpIGZvIGZ1bSBmaSBmaScuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgJ2ZpJykKKworICAgIGRlZiB0ZXN0X2Rpc2NyZXRlX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIHdpdGggZGlzY3JldGUgbnVtZXJpYyBkYXRhLgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMCkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGQgPSBkYXRhICsgW2ldCisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZCksIGkpCisKKyAgICBkZWYgdGVzdF9iaW1vZGFsX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIHdpdGggYmltb2RhbCBkYXRhLgorICAgICAgICBkYXRhID0gWzEsIDEsIDIsIDIsIDIsIDIsIDMsIDQsIDUsIDYsIDYsIDYsIDYsIDcsIDgsIDksIDldCisgICAgICAgIGFzc2VydCBkYXRhLmNvdW50KDIpID09IGRhdGEuY291bnQoNikgPT0gNAorICAgICAgICAjIENoZWNrIGZvciBhbiBleGNlcHRpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF91bmlxdWVfZGF0YV9mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSBleGNlcHRpb24gd2hlbiBkYXRhIHBvaW50cyBhcmUgYWxsIHVuaXF1ZS4KKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBkYXRhKQorCisgICAgZGVmIHRlc3Rfbm9uZV9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBtb2RlIHJhaXNlcyBUeXBlRXJyb3IgaWYgZ2l2ZW4gTm9uZSBhcyBkYXRhLgorCisgICAgICAgICMgVGhpcyB0ZXN0IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBtb2RlIHVzZXMKKyAgICAgICAgIyBjb2xsZWN0aW9ucy5Db3VudGVyLCB3aGljaCBhY2NlcHRzIE5vbmUgYW5kIHJldHVybnMgYW4gZW1wdHkgZGljdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIE5vbmUpCisKKworIyA9PT0gVGVzdHMgZm9yIHZhcmlhbmNlcyBhbmQgc3RhbmRhcmQgZGV2aWF0aW9ucyA9PT0KKworY2xhc3MgVmFyaWFuY2VTdGRldk1peGluKFVuaXZhcmlhdGVDb21tb25NaXhpbik6CisgICAgIyBNaXhpbiBjbGFzcyBob2xkaW5nIGNvbW1vbiB0ZXN0cyBmb3IgdmFyaWFuY2UgYW5kIHN0ZCBkZXYuCisKKyAgICAjIFN1YmNsYXNzZXMgc2hvdWxkIGluaGVyaXQgZnJvbSB0aGlzIGJlZm9yZSBOdW1lcmljVGVzdENsYXNzLCBpbiBvcmRlcgorICAgICMgdG8gc2VlIHRoZSByZWwgYXR0cmlidXRlIGJlbG93LiBTZWUgdGVzdFNoaWZ0RGF0YSBmb3IgYW4gZXhwbGFuYXRpb24uCisKKyAgICByZWwgPSAxZS0xMgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIERldmlhdGlvbiBvZiBhIHNpbmdsZSB2YWx1ZSBpcyB6ZXJvLgorICAgICAgICBmb3IgeCBpbiAoMTEsIDE5LjgsIDQuNmUxNCwgRnJhY3Rpb24oMjEsIDM0KSwgRGVjaW1hbCgnOC4zOTInKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbeF0pLCAwKQorCisgICAgZGVmIHRlc3RfcmVwZWF0ZWRfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIFRoZSBkZXZpYXRpb24gb2YgYSBzaW5nbGUgcmVwZWF0ZWQgdmFsdWUgaXMgemVyby4KKyAgICAgICAgZm9yIHggaW4gKDcuMiwgNDksIDguMWUxNSwgRnJhY3Rpb24oMywgNyksIERlY2ltYWwoJzYyLjQ4MDInKSk6CisgICAgICAgICAgICBmb3IgY291bnQgaW4gKDIsIDMsIDUsIDE1KToKKyAgICAgICAgICAgICAgICBkYXRhID0gW3hdKmNvdW50CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDApCisKKyAgICBkZWYgdGVzdF9kb21haW5fZXJyb3JfcmVncmVzc2lvbihzZWxmKToKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGEgZG9tYWluIGVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgIyAoVGhhbmtzIHRvIEdlcmVteSBDb25kcmEuKQorICAgICAgICBkYXRhID0gWzAuMTIzNDU2Nzg5MDEyMzQ1XSoxMDAwMAorICAgICAgICAjIEFsbCB0aGUgaXRlbXMgYXJlIGlkZW50aWNhbCwgc28gdmFyaWFuY2Ugc2hvdWxkIGJlIGV4YWN0bHkgemVyby4KKyAgICAgICAgIyBXZSBhbGxvdyBzb21lIHNtYWxsIHJvdW5kLW9mZiBlcnJvciwgYnV0IG5vdCBtdWNoLgorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChyZXN1bHQsIDAuMCwgdG9sPTVlLTE3KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChyZXN1bHQsIDApICAjIEEgbmVnYXRpdmUgcmVzdWx0IG11c3QgZmFpbC4KKworICAgIGRlZiB0ZXN0X3NoaWZ0X2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHNoaWZ0aW5nIHRoZSBkYXRhIGJ5IGEgY29uc3RhbnQgYW1vdW50IGRvZXMgbm90IGFmZmVjdAorICAgICAgICAjIHRoZSB2YXJpYW5jZSBvciBzdGRldi4gT3IgYXQgbGVhc3Qgbm90IG11Y2guCisKKyAgICAgICAgIyBEdWUgdG8gcm91bmRpbmcsIHRoaXMgdGVzdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBpZGVhbC4gV2UgYWxsb3cKKyAgICAgICAgIyBzb21lIHRvbGVyYW5jZSBhd2F5IGZyb20gIm5vIGNoYW5nZSBhdCBhbGwiIGJ5IHNldHRpbmcgdG9sIGFuZC9vciByZWwKKyAgICAgICAgIyBhdHRyaWJ1dGVzLiBTdWJjbGFzc2VzIG1heSBzZXQgdGlnaHRlciBvciBsb29zZXIgZXJyb3IgdG9sZXJhbmNlcy4KKyAgICAgICAgcmF3ID0gWzEuMDMsIDEuMjcsIDEuOTQsIDIuMDQsIDIuNTgsIDMuMTQsIDQuNzUsIDQuOTgsIDUuNDIsIDYuNzhdCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKHJhdykKKyAgICAgICAgIyBEb24ndCBzZXQgc2hpZnQgdG9vIGhpZ2gsIHRoZSBiaWdnZXIgaXQgaXMsIHRoZSBtb3JlIHJvdW5kaW5nIGVycm9yLgorICAgICAgICBzaGlmdCA9IDFlNQorICAgICAgICBkYXRhID0gW3ggKyBzaGlmdCBmb3IgeCBpbiByYXddCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NoaWZ0X2RhdGFfZXhhY3Qoc2VsZik6CisgICAgICAgICMgTGlrZSB0ZXN0X3NoaWZ0X2RhdGEsIGJ1dCByZXN1bHQgaXMgYWx3YXlzIGV4YWN0LgorICAgICAgICByYXcgPSBbMSwgMywgMywgNCwgNSwgNywgOSwgMTAsIDExLCAxNl0KKyAgICAgICAgYXNzZXJ0IGFsbCh4PT1pbnQoeCkgZm9yIHggaW4gcmF3KQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhyYXcpCisgICAgICAgIHNoaWZ0ID0gMTAqKjkKKyAgICAgICAgZGF0YSA9IFt4ICsgc2hpZnQgZm9yIHggaW4gcmF3XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pdGVyX2xpc3Rfc2FtZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgaXRlciBkYXRhIGFuZCBsaXN0IGRhdGEgZ2l2ZSB0aGUgc2FtZSByZXN1bHQuCisKKyAgICAgICAgIyBUaGlzIGlzIGFuIGV4cGxpY2l0IHRlc3QgdGhhdCBpdGVyYXRvcnMgYW5kIGxpc3RzIGFyZSB0cmVhdGVkIHRoZQorICAgICAgICAjIHNhbWU7IGp1c3RpZmljYXRpb24gZm9yIHRoaXMgdGVzdCBvdmVyIGFuZCBhYm92ZSB0aGUgc2ltaWxhciB0ZXN0CisgICAgICAgICMgaW4gVW5pdmFyaWF0ZUNvbW1vbk1peGluIGlzIHRoYXQgYW4gZWFybGllciBkZXNpZ24gaGFkIHZhcmlhbmNlIGFuZAorICAgICAgICAjIGZyaWVuZHMgc3dhcCBiZXR3ZWVuIG9uZS0gYW5kIHR3by1wYXNzIGFsZ29yaXRobXMsIHdoaWNoIHdvdWxkCisgICAgICAgICMgc29tZXRpbWVzIGdpdmUgZGlmZmVyZW50IHJlc3VsdHMuCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTMsIDgpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhpdGVyKGRhdGEpKSwgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdFBWYXJpYW5jZShWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0cyBmb3IgcG9wdWxhdGlvbiB2YXJpYW5jZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MucHZhcmlhbmNlCisKKyAgICBkZWYgdGVzdF9leGFjdF91bmlmb3JtKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIHZhcmlhbmNlIGFnYWluc3QgYW4gZXhhY3QgcmVzdWx0IGZvciB1bmlmb3JtIGRhdGEuCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwMDAwKSkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgZXhwZWN0ZWQgPSAoMTAwMDAqKjIgLSAxKS8xMiAgIyBFeGFjdCB2YWx1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHBvcHVsYXRpb24gdmFyaWFuY2Ugd2l0aCBpbnQgZGF0YS4KKyAgICAgICAgZGF0YSA9IFs0LCA3LCAxMywgMTZdCisgICAgICAgIGV4YWN0ID0gMjIuNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhhY3QpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3B1bGF0aW9uIHZhcmlhbmNlIHdpdGggRnJhY3Rpb24gZGF0YS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA0KSwgRigxLCA0KSwgRigzLCA0KSwgRig3LCA0KV0KKyAgICAgICAgZXhhY3QgPSBGKDMsIDgpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIEZyYWN0aW9uKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3B1bGF0aW9uIHZhcmlhbmNlIHdpdGggRGVjaW1hbCBkYXRhLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoIjEyLjEiKSwgRCgiMTIuMiIpLCBEKCIxMi41IiksIEQoIjEyLjkiKV0KKyAgICAgICAgZXhhY3QgPSBEKCcwLjA5Njg3NScpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIERlY2ltYWwpCisKKworY2xhc3MgVGVzdFZhcmlhbmNlKFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3RzIGZvciBzYW1wbGUgdmFyaWFuY2UuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnZhcmlhbmNlCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgbWV0aG9kIGZyb20gVmFyaWFuY2VTdGRldk1peGluLgorICAgICAgICBmb3IgeCBpbiAoMzUsIDI0LjcsIDguMmUxNSwgRnJhY3Rpb24oMTksIDMwKSwgRGVjaW1hbCgnNC4yMDg0JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgW3hdKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHNhbXBsZSB2YXJpYW5jZSB3aXRoIGludCBkYXRhLgorICAgICAgICBkYXRhID0gWzQsIDcsIDEzLCAxNl0KKyAgICAgICAgZXhhY3QgPSAzMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhhY3QpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBzYW1wbGUgdmFyaWFuY2Ugd2l0aCBGcmFjdGlvbiBkYXRhLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDQpLCBGKDEsIDQpLCBGKDMsIDQpLCBGKDcsIDQpXQorICAgICAgICBleGFjdCA9IEYoMSwgMikKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRnJhY3Rpb24pCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHNhbXBsZSB2YXJpYW5jZSB3aXRoIERlY2ltYWwgZGF0YS4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKDIpLCBEKDIpLCBEKDcpLCBEKDkpXQorICAgICAgICBleGFjdCA9IDQqRCgnOS41JykvRCgzKQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBEZWNpbWFsKQorCisKK2NsYXNzIFRlc3RQU3RkZXYoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdHMgZm9yIHBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5wc3RkZXYKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG9fdmFyaWFuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHN0ZGV2IGlzLCBpbiBmYWN0LCB0aGUgc3F1YXJlIHJvb3Qgb2YgdmFyaWFuY2UuCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTE3LCAyNCkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gbWF0aC5zcXJ0KHN0YXRpc3RpY3MucHZhcmlhbmNlKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdFN0ZGV2KFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3RzIGZvciBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5zdGRldgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIG1ldGhvZCBmcm9tIFZhcmlhbmNlU3RkZXZNaXhpbi4KKyAgICAgICAgZm9yIHggaW4gKDgxLCAyMDMuNzQsIDMuOWUxNCwgRnJhY3Rpb24oNSwgMjEpLCBEZWNpbWFsKCczNS43MTknKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBbeF0pCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvX3ZhcmlhbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzdGRldiBpcywgaW4gZmFjdCwgdGhlIHNxdWFyZSByb290IG9mIHZhcmlhbmNlLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0yLCA5KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBtYXRoLnNxcnQoc3RhdGlzdGljcy52YXJpYW5jZShkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisKKyMgPT09IFJ1biB0ZXN0cyA9PT0KKworZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgaWdub3JlKToKKyAgICAiIiJVc2VkIGZvciBkb2N0ZXN0L3VuaXR0ZXN0IGludGVncmF0aW9uLiIiIgorICAgIHRlc3RzLmFkZFRlc3RzKGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCkpCisgICAgcmV0dXJuIHRlc3RzCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CmluZGV4IDE0MDU3ZWIuLjY1MTBjMzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQpAQCAtMTc2LDggKzE3Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZVswXSwgZVsyXSkpCiAgICAgICAgICAgICAgICAgICAgIHByaW50KCIgIEV4cGVjdGVkICVzLCBidXQgZ290ICVzIiAlIChlWzFdLCByZXN1bHQpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyZnRpbWVUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CmluZGV4IDUwY2FlMDUuLjAxMDdlZWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CkBAIC0xLDQgKzEsNiBAQAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgYWJjCiBpbXBvcnQgYXJyYXkKK2ltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCkBAIC02LDcgKzgsNiBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIElTQklHRU5ESUFOID0gc3lzLmJ5dGVvcmRlciA9PSAiYmlnIgotSVMzMkJJVCA9IHN5cy5tYXhzaXplID09IDB4N2ZmZmZmZmYKIAogaW50ZWdlcl9jb2RlcyA9ICdiJywgJ0InLCAnaCcsICdIJywgJ2knLCAnSScsICdsJywgJ0wnLCAncScsICdRJywgJ24nLCAnTicKIGJ5dGVvcmRlcnMgPSAnJywgJ0AnLCAnPScsICc8JywgJz4nLCAnIScKQEAgLTQ4OSw3ICs0OTAsNyBAQAogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CiAgICAgICAgIGNsYXNzIEV4cGxvZGluZ0Jvb2wob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogICAgICAgICBmb3IgcHJlZml4IGluIHR1cGxlKCI8PiE9IikrKCcnLCk6CiAgICAgICAgICAgICBmYWxzZSA9ICgpLCBbXSwgW10sICcnLCAwCiAgICAgICAgICAgICB0cnVlID0gWzFdLCAndGVzdCcsIDUsIC0xLCAweGZmZmZmZmZmKzEsIDB4ZmZmZmZmZmYvMgpAQCAtNTIwLDEwICs1MjEsMTAgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKHByZWZpeCArICc/JywgRXhwbG9kaW5nQm9vbCgpKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgSU9FcnJvcjogc3RydWN0LnBhY2soJXIsICIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIE9TRXJyb3I6IHN0cnVjdC5wYWNrKCVyLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBsb2RpbmdCb29sKCkpIiAlIChwcmVmaXggKyAnPycpKQogCiAgICAgICAgIGZvciBjIGluIFtiJ1x4MDEnLCBiJ1x4N2YnLCBiJ1x4ZmYnLCBiJ1x4MGYnLCBiJ1x4ZjAnXToKQEAgLTUzNiwxMCArNTM3LDYgQEAKICAgICAgICAgaHVnZWNvdW50MiA9ICd7fWJ7fUgnLmZvcm1hdChzeXMubWF4c2l6ZS8vMiwgc3lzLm1heHNpemUvLzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LmNhbGNzaXplLCBodWdlY291bnQyKQogCi0gICAgaWYgSVMzMkJJVDoKLSAgICAgICAgZGVmIHRlc3RfY3Jhc2hlcihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBzdHJ1Y3QucGFjaywgIjM1NzkxMzk0MWIiLCAiYSIpCi0KICAgICBkZWYgdGVzdF90cmFpbGluZ19jb3VudGVyKHNlbGYpOgogICAgICAgICBzdG9yZSA9IGFycmF5LmFycmF5KCdiJywgYicgJyoxMDApCiAKQEAgLTU3Niw3ICs1NzMsNyBAQAogICAgICAgICAjIFRoZSBzaXplIG9mICdQeVN0cnVjdE9iamVjdCcKICAgICAgICAgdG90YWxzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnMm4zUCcpCiAgICAgICAgICMgVGhlIHNpemUgdGFrZW4gdXAgYnkgdGhlICdmb3JtYXRjb2RlJyBkeW5hbWljIGFycmF5Ci0gICAgICAgIHRvdGFsc2l6ZSArPSBzdHJ1Y3QuY2FsY3NpemUoJ1AybjBQJykgKiAobnVtYmVyX29mX2NvZGVzICsgMSkKKyAgICAgICAgdG90YWxzaXplICs9IHN0cnVjdC5jYWxjc2l6ZSgnUDNuMFAnKSAqIChudW1iZXJfb2ZfY29kZXMgKyAxKQogICAgICAgICBzdXBwb3J0LmNoZWNrX3NpemVvZihzZWxmLCBzdHJ1Y3QuU3RydWN0KGZvcm1hdF9zdHIpLCB0b3RhbHNpemUpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKQEAgLTU4NywxNCArNTg0LDg0IEBACiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCdCJyAqIDEyMzQsIDEyMzQpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCdmZCcsIDIpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCd4eHh4eHh4eHh4eHh4eCcsIDApCi0gICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcxMDBIJywgMTAwKQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTAwSCcsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcxODdzJywgMSkKICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzIwcCcsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcwcycsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcwYycsIDApCiAKKworY2xhc3MgVW5wYWNrSXRlcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0cyBmb3IgaXRlcmF0aXZlIHVucGFja2luZyAoc3RydWN0LlN0cnVjdC5pdGVyX3VucGFjaykuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Qoc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2tfaXRlcmF0b3IoaXQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBhYmMuSXRlcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXQsIGFiYy5JdGVyYWJsZSkKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5pYmNwJykKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIiIikKKyAgICAgICAgX2NoZWNrX2l0ZXJhdG9yKGl0KQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYiIxMjM0NTY3IikKKyAgICAgICAgX2NoZWNrX2l0ZXJhdG9yKGl0KQorICAgICAgICAjIFdyb25nIGJ5dGVzIGxlbmd0aAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICBzLml0ZXJfdW5wYWNrKGIiMTIzNDU2IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyMzQ1Njc4IikKKyAgICAgICAgIyBaZXJvLWxlbmd0aCBzdHJ1Y3QKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz4nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICBzLml0ZXJfdW5wYWNrKGIiIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyIikKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGUoc2VsZik6CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+SUInKQorICAgICAgICBiID0gYnl0ZXMocmFuZ2UoMSwgMTYpKQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDEwMjAzMDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwNjA3MDgwOSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwYjBjMGQwZSwgMTUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisKKyAgICBkZWYgdGVzdF9hcmJpdHJhcnlfYnVmZmVyKHNlbGYpOgorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPklCJykKKyAgICAgICAgYiA9IGJ5dGVzKHJhbmdlKDEsIDExKSkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKG1lbW9yeXZpZXcoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDAxMDIwMzA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDYwNzA4MDksIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorCisgICAgZGVmIHRlc3RfbGVuZ3RoX2hpbnQoc2VsZik6CisgICAgICAgIGxoID0gb3BlcmF0b3IubGVuZ3RoX2hpbnQKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5JQicpCisgICAgICAgIGIgPSBieXRlcyhyYW5nZSgxLCAxNikpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMykKKyAgICAgICAgbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDIpCisgICAgICAgIG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAxKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAwKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2Z1bmMoc2VsZik6CisgICAgICAgICMgU2FuaXR5IGNoZWNrIGZvciB0aGUgZ2xvYmFsIHN0cnVjdC5pdGVyX3VucGFjaygpCisgICAgICAgIGl0ID0gc3RydWN0Lml0ZXJfdW5wYWNrKCc+SUInLCBieXRlcyhyYW5nZSgxLCAxMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwMTAyMDMwNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDA2MDcwODA5LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RydWN0VGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQppbmRleCBhODllOTU1Li4zNTNkMGVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAjIG9zLnN0YXQoKSBnaXZlcyBhIGNvbXBsaWNhdGVkIHN0cnVjdCBzZXF1ZW5jZS4KICAgICAgICAgc3QgPSBvcy5zdGF0KF9fZmlsZV9fKQogICAgICAgICByZXAgPSByZXByKHN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwLnN0YXJ0c3dpdGgob3MubmFtZSArICIuc3RhdF9yZXN1bHQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5zdGFydHN3aXRoKCJvcy5zdGF0X3Jlc3VsdCIpKQogICAgICAgICBzZWxmLmFzc2VydEluKCJzdF9tb2RlPSIsIHJlcCkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfaW5vPSIsIHJlcCkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfZGV2PSIsIHJlcCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQppbmRleCA0YzlmMjliLi44NDA1NzdkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CkBAIC0xOSwxMCArMTksNiBAQAogaW1wb3J0IHRleHR3cmFwCiAKIHRyeToKLSAgICBpbXBvcnQgcmVzb3VyY2UKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICByZXNvdXJjZSA9IE5vbmUKLXRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQpAQCAtMTYyLDggKzE1OCwyOCBAQAogICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0JERkwnLCBvdXRwdXQpCiAKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkaW5fYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGNhbiBiZSBjYWxsZWQgd2l0aCBzdGRpbiBzZXQgdG8gYSBmaWxlCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKKyAgICAgICAgdGYud3JpdGUoYidwZWFyJykKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkudXBwZXIoKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRpbj10ZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BFQVInLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfaW5wdXRfYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGNhbiBiZSBjYWxsZWQgd2l0aCBpbnB1dCBzZXQgdG8gYSBzdHJpbmcKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpLnVwcGVyKCkpIl0sCisgICAgICAgICAgICAgICAgaW5wdXQ9YidwZWFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BFQVInLCBvdXRwdXQpCisKICAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3Rkb3V0X2FyZyhzZWxmKToKLSAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiBzdGRlcnIgcmVkaXJlY3RlZCB0byBzdGRvdXQKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSByZWZ1c2VzIHRvIGFjY2VwdCAnc3Rkb3V0JyBhcmd1bWVudAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQoJ3dpbGwgbm90IGJlIHJ1bicpIl0sCkBAIC0xNzEsNiArMTg3LDIwIEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igd2hlbiBzdGRvdXQgYXJnIHN1cHBsaWVkLiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0ZG91dCcsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCiAKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkaW5fd2l0aF9pbnB1dF9hcmcoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgcmVmdXNlcyB0byBhY2NlcHQgJ3N0ZGluJyB3aXRoICdpbnB1dCcKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRmLmNsb3NlKQorICAgICAgICB0Zi53cml0ZShiJ3BlYXInKQorICAgICAgICB0Zi5zZWVrKDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCgnd2lsbCBub3QgYmUgcnVuJykiXSwKKyAgICAgICAgICAgICAgICAgICAgc3RkaW49dGYsIGlucHV0PWInaGFyZScpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igd2hlbiBzdGRpbiBhbmQgaW5wdXQgYXJncyBzdXBwbGllZC4iKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzdGRpbicsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lucHV0JywgYy5leGNlcHRpb24uYXJnc1swXSkKKwogICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF90aW1lb3V0KHNlbGYpOgogICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHdpdGggdGltZW91dCBhcmcKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLlRpbWVvdXRFeHBpcmVkKSBhcyBjOgpAQCAtODUzLDggKzg4Myw5IEBACiAgICAgICAgICMKICAgICAgICAgIyBVVEYtMTYgYW5kIFVURi0zMi1CRSBhcmUgc3VmZmljaWVudCB0byBjaGVjayBib3RoIHdpdGggQk9NIGFuZAogICAgICAgICAjIHdpdGhvdXQsIGFuZCBVVEYtMTYgYW5kIFVURi0zMi4KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBbJ3V0Zi0xNicsICd1dGYtMzItYmUnXToKLSAgICAgICAgICAgIG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZworICAgICAgICAgICAgb2xkX2dldHByZWZlcnJlZGVuY29kaW5nID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcKICAgICAgICAgICAgICMgSW5kaXJlY3RseSB2aWEgaW8uVGV4dElPV3JhcHBlciwgUG9wZW4oKSBkZWZhdWx0cyB0bwogICAgICAgICAgICAgIyBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpIGFuZCBlYXJsaWVyIGluIFB5dGhvbiAzLjIgdG8KICAgICAgICAgICAgICMgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkuCkBAIC04NjUsNyArODk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcpCiAgICAgICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGdldHByZWZlcnJlZGVuY29kaW5nCisgICAgICAgICAgICAgICAgX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBnZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgICAgICMgV2Ugc2V0IHN0ZGluIHRvIGJlIG5vbi1Ob25lIGJlY2F1c2UsIGFzIG9mIHRoaXMgd3JpdGluZywKICAgICAgICAgICAgICAgICAjIGEgZGlmZmVyZW50IGNvZGUgcGF0aCBpcyB1c2VkIHdoZW4gdGhlIG51bWJlciBvZiBwaXBlcyBpcwogICAgICAgICAgICAgICAgICMgemVybyBvciBvbmUuCkBAIC04NzQsNyArOTA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKGlucHV0PScnKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBvbGRfZ2V0cHJlZmVycmVkZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICcxXG4yXG4zXG40JykKIAogICAgIGRlZiB0ZXN0X25vX2xlYWtpbmcoc2VsZik6CkBAIC05ODIsOCArMTAxMyw3IEBACiAgICAgICAgICMgdmFsdWUgZm9yIHRoYXQgbGltaXQsIGJ1dCBXaW5kb3dzIGhhcyAyMDQ4LCBzbyB3ZSBsb29wCiAgICAgICAgICMgMTAyNCB0aW1lcyAoZWFjaCBjYWxsIGxlYWtlZCB0d28gZmRzKS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAyNCk6Ci0gICAgICAgICAgICAjIFdpbmRvd3MgcmFpc2VzIElPRXJyb3IuICBPdGhlcnMgcmFpc2UgT1NFcnJvci4KLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRW52aXJvbm1lbnRFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgYzoKICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsnbm9uZXhpc3RpbmdfaV9ob3BlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKQEAgLTExMTQsNDcgKzExNDQsNiBAQAogICAgICAgICBmZHNfYWZ0ZXJfZXhjZXB0aW9uID0gb3MubGlzdGRpcihmZF9kaXJlY3RvcnkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRzX2JlZm9yZV9wb3BlbiwgZmRzX2FmdGVyX2V4Y2VwdGlvbikKIAotCi0jIGNvbnRleHQgbWFuYWdlcgotY2xhc3MgX1N1cHByZXNzQ29yZUZpbGVzKG9iamVjdCk6Ci0gICAgIiIiVHJ5IHRvIHByZXZlbnQgY29yZSBmaWxlcyBmcm9tIGJlaW5nIGNyZWF0ZWQuIiIiCi0gICAgb2xkX2xpbWl0ID0gTm9uZQotCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgIiIiVHJ5IHRvIHNhdmUgcHJldmlvdXMgdWxpbWl0LCB0aGVuIHNldCBpdCB0byAoMCwgMCkuIiIiCi0gICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYub2xkX2xpbWl0ID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFKQotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgKDAsIDApKQotICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZS5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlICdDcmFzaCBSZXBvcnRlcicgb24gT1NYIHdhcyBjb25maWd1cmVkCi0gICAgICAgICAgICAjIGluICdEZXZlbG9wZXInIG1vZGUgYW5kIHdhcm4gdGhhdCBpdCB3aWxsIGdldCB0cmlnZ2VyZWQKLSAgICAgICAgICAgICMgd2hlbiBpdCBpcy4KLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgdXNlZCBpbiB0ZXN0cwotICAgICAgICAgICAgIyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG5leHQgbWFuYWdlci4KLSAgICAgICAgICAgIHZhbHVlID0gc3VicHJvY2Vzcy5Qb3BlbihbJy91c3IvYmluL2RlZmF1bHRzJywgJ3JlYWQnLAotICAgICAgICAgICAgICAgICAgICAnY29tLmFwcGxlLkNyYXNoUmVwb3J0ZXInLCAnRGlhbG9nVHlwZSddLAotICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCi0gICAgICAgICAgICBpZiB2YWx1ZS5zdHJpcCgpID09IGInZGV2ZWxvcGVyJzoKLSAgICAgICAgICAgICAgICBwcmludCgidGhpcyB0ZXN0cyB0cmlnZ2VycyB0aGUgQ3Jhc2ggUmVwb3J0ZXIsICIKLSAgICAgICAgICAgICAgICAgICAgICAidGhhdCBpcyBpbnRlbnRpb25hbCIsIGVuZD0nJykKLSAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLQotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgICIiIlJldHVybiBjb3JlIGZpbGUgYmVoYXZpb3IgdG8gZGVmYXVsdC4iIiIKLSAgICAgICAgaWYgc2VsZi5vbGRfbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsIHNlbGYub2xkX2xpbWl0KQotICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZS5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0KIEB1bml0dGVzdC5za2lwSWYobXN3aW5kb3dzLCAiUE9TSVggc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgUE9TSVhQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKIApAQCAtMTI0Myw3ICsxMjMyLDcgQEAKIAogICAgIGRlZiB0ZXN0X3J1bl9hYm9ydChzZWxmKToKICAgICAgICAgIyByZXR1cm5jb2RlIGhhbmRsZXMgc2lnbmFsIHRlcm1pbmF0aW9uCi0gICAgICAgIHdpdGggX1N1cHByZXNzQ29yZUZpbGVzKCk6CisgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBvczsgb3MuYWJvcnQoKSddKQogICAgICAgICAgICAgcC53YWl0KCkKQEAgLTEyNjYsNyArMTI1NSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1yYWlzZV9pdCkKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5fcG9zaXhzdWJwcm9jZXNzLAogICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgYSBWYWx1ZUVycm9yIGZyb20gdGhlIHByZWV4ZWNfZm4iKQpAQCAtMTMwNiw5ICsxMjk1LDEwIEBACiAgICAgICAgICIiIklzc3VlMTYxNDA6IERvbid0IGRvdWJsZSBjbG9zZSBwaXBlcyBvbiBwcmVleGVjIGVycm9yLiIiIgogCiAgICAgICAgIGRlZiByYWlzZV9pdCgpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJmb3JjZSB0aGUgX2V4ZWN1dGVfY2hpbGQoKSBlcnJwaXBlX2RhdGEgcGF0aC4iKQorICAgICAgICAgICAgcmFpc2Ugc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJmb3JjZSB0aGUgX2V4ZWN1dGVfY2hpbGQoKSBlcnJwaXBlX2RhdGEgcGF0aC4iKQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvcik6CiAgICAgICAgICAgICBzZWxmLl9UZXN0RXhlY3V0ZUNoaWxkUG9wZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwYXNzIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCkBAIC0xNTA3LDE2ICsxNDk3LDI4IEBACiAgICAgICAgICMgVGVybWluYXRpbmcgYSBkZWFkIHByb2Nlc3MKICAgICAgICAgc2VsZi5fa2lsbF9kZWFkX3Byb2Nlc3MoJ3Rlcm1pbmF0ZScpCiAKKyAgICBkZWYgX3NhdmVfZmRzKHNlbGYsIHNhdmVfZmRzKToKKyAgICAgICAgZmRzID0gW10KKyAgICAgICAgZm9yIGZkIGluIHNhdmVfZmRzOgorICAgICAgICAgICAgaW5oZXJpdGFibGUgPSBvcy5nZXRfaW5oZXJpdGFibGUoZmQpCisgICAgICAgICAgICBzYXZlZCA9IG9zLmR1cChmZCkKKyAgICAgICAgICAgIGZkcy5hcHBlbmQoKGZkLCBzYXZlZCwgaW5oZXJpdGFibGUpKQorICAgICAgICByZXR1cm4gZmRzCisKKyAgICBkZWYgX3Jlc3RvcmVfZmRzKHNlbGYsIGZkcyk6CisgICAgICAgIGZvciBmZCwgc2F2ZWQsIGluaGVyaXRhYmxlIGluIGZkczoKKyAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIGZkLCBpbmhlcml0YWJsZT1pbmhlcml0YWJsZSkKKyAgICAgICAgICAgIG9zLmNsb3NlKHNhdmVkKQorCiAgICAgZGVmIGNoZWNrX2Nsb3NlX3N0ZF9mZHMoc2VsZiwgZmRzKToKICAgICAgICAgIyBJc3N1ZSAjOTkwNTogdGVzdCB0aGF0IHN1YnByb2Nlc3MgcGlwZXMgc3RpbGwgd29yayBwcm9wZXJseSB3aXRoCiAgICAgICAgICMgc29tZSBzdGFuZGFyZCBmZHMgY2xvc2VkCiAgICAgICAgIHN0ZGluID0gMAotICAgICAgICBuZXdmZHMgPSBbXQotICAgICAgICBmb3IgYSBpbiBmZHM6Ci0gICAgICAgICAgICBiID0gb3MuZHVwKGEpCi0gICAgICAgICAgICBuZXdmZHMuYXBwZW5kKGIpCi0gICAgICAgICAgICBpZiBhID09IDA6Ci0gICAgICAgICAgICAgICAgc3RkaW4gPSBiCisgICAgICAgIHNhdmVkX2ZkcyA9IHNlbGYuX3NhdmVfZmRzKGZkcykKKyAgICAgICAgZm9yIGZkLCBzYXZlZCwgaW5oZXJpdGFibGUgaW4gc2F2ZWRfZmRzOgorICAgICAgICAgICAgaWYgZmQgPT0gMDoKKyAgICAgICAgICAgICAgICBzdGRpbiA9IHNhdmVkCisgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKQEAgLTE1MzEsMTAgKzE1MzMsNyBAQAogICAgICAgICAgICAgZXJyID0gc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKGVycikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG91dCwgZXJyKSwgKGInYXBwbGUnLCBiJ29yYW5nZScpKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZm9yIGIsIGEgaW4gemlwKG5ld2ZkcywgZmRzKToKLSAgICAgICAgICAgICAgICBvcy5kdXAyKGIsIGEpCi0gICAgICAgICAgICBmb3IgYiBpbiBuZXdmZHM6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UoYikKKyAgICAgICAgICAgIHNlbGYuX3Jlc3RvcmVfZmRzKHNhdmVkX2ZkcykKIAogICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkXzAoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMF0pCkBAIC0xNTc0LDcgKzE1NzMsNyBAQAogICAgICAgICAgICAgb3MubHNlZWsodGVtcF9mZHNbMV0sIDAsIDApCiAKICAgICAgICAgICAgICMgbW92ZSB0aGUgc3RhbmRhcmQgZmlsZSBkZXNjcmlwdG9ycyBvdXQgb2YgdGhlIHdheQotICAgICAgICAgICAgc2F2ZWRfZmRzID0gW29zLmR1cChmZCkgZm9yIGZkIGluIHJhbmdlKDMpXQorICAgICAgICAgICAgc2F2ZWRfZmRzID0gc2VsZi5fc2F2ZV9mZHMocmFuZ2UoMykpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgIyBkdXBsaWNhdGUgdGhlIGZpbGUgb2JqZWN0cyBvdmVyIHRoZSBzdGFuZGFyZCBmZCdzCiAgICAgICAgICAgICAgICAgZm9yIGZkLCB0ZW1wX2ZkIGluIGVudW1lcmF0ZSh0ZW1wX2Zkcyk6CkBAIC0xNTkwLDEwICsxNTg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXRlbXBfZmRzWzBdKQogICAgICAgICAgICAgICAgIHAud2FpdCgpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICMgcmVzdG9yZSB0aGUgb3JpZ2luYWwgZmQncyB1bmRlcm5lYXRoIHN5cy5zdGRpbiwgZXRjLgotICAgICAgICAgICAgICAgIGZvciBzdGQsIHNhdmVkIGluIGVudW1lcmF0ZShzYXZlZF9mZHMpOgotICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKHNhdmVkLCBzdGQpCi0gICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKHNhdmVkKQorICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3RvcmVfZmRzKHNhdmVkX2ZkcykKIAogICAgICAgICAgICAgZm9yIGZkIGluIHRlbXBfZmRzOgogICAgICAgICAgICAgICAgIG9zLmxzZWVrKGZkLCAwLCAwKQpAQCAtMTYxNyw3ICsxNjEzLDcgQEAKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm5hbWUpCiAKICAgICAgICAgICAgICMgc2F2ZSBhIGNvcHkgb2YgdGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMKLSAgICAgICAgICAgIHNhdmVkX2ZkcyA9IFtvcy5kdXAoZmQpIGZvciBmZCBpbiByYW5nZSgzKV0KKyAgICAgICAgICAgIHNhdmVkX2ZkcyA9IHNlbGYuX3NhdmVfZmRzKHJhbmdlKDMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgZHVwbGljYXRlIHRoZSB0ZW1wIGZpbGVzIG92ZXIgdGhlIHN0YW5kYXJkIGZkJ3MgMCwgMSwgMgogICAgICAgICAgICAgICAgIGZvciBmZCwgdGVtcF9mZCBpbiBlbnVtZXJhdGUodGVtcF9mZHMpOgpAQCAtMTY0Myw5ICsxNjM5LDcgQEAKICAgICAgICAgICAgICAgICBvdXQgPSBvcy5yZWFkKHN0ZG91dF9ubywgMTAyNCkKICAgICAgICAgICAgICAgICBlcnIgPSBzdXBwb3J0LnN0cmlwX3B5dGhvbl9zdGRlcnIob3MucmVhZChzdGRlcnJfbm8sIDEwMjQpKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmb3Igc3RkLCBzYXZlZCBpbiBlbnVtZXJhdGUoc2F2ZWRfZmRzKToKLSAgICAgICAgICAgICAgICAgICAgb3MuZHVwMihzYXZlZCwgc3RkKQotICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShzYXZlZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXN0b3JlX2ZkcyhzYXZlZF9mZHMpCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiImdvdCBTVERJTiIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiJlcnIiKQpAQCAtMTY3NywxMiArMTY3MSwxMiBAQAogICAgICAgICAgICAgIyBQdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMga2VlcHMgdGhlIG1lc3NhZ2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICJzdXJyb2dhdGU6XHVEQ2ZmIikKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAjIF9wb3NpeHN1YnByb2Nlc3MgdXNlcyBhIGRlZmF1bHQgbWVzc2FnZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3VicHJvY2Vzcy5fcG9zaXhzdWJwcm9jZXNzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgIkV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBwcmVleGVjX2ZuLiIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igb3IgUnVudGltZUVycm9yIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVmFsdWVFcnJvciBvciBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvciIpCiAKICAgICBkZWYgdGVzdF91bmRlY29kYWJsZV9lbnYoc2VsZik6CiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluICgoJ3Rlc3QnLCAnYWJjXHVEQ0ZGJyksICgndGVzdFx1RENGRicsICc0MicpKToKQEAgLTE4MTYsNiArMTgxMCw5IEBACiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQogICAgICAgICAgICAgb3Blbl9mZHMuYWRkKGZkKQogCisgICAgICAgIGZvciBmZCBpbiBvcGVuX2ZkczoKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZCwgVHJ1ZSkKKwogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsIGZkX3N0YXR1c10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGNsb3NlX2Zkcz1GYWxzZSkKICAgICAgICAgb3V0cHV0LCBpZ25vcmVkID0gcC5jb21tdW5pY2F0ZSgpCkBAIC0xODYwLDYgKzE4NTcsOCBAQAogICAgICAgICAgICAgZmRzID0gb3MucGlwZSgpCiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkc1swXSkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmRzWzFdKQorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkc1swXSwgVHJ1ZSkKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZHNbMV0sIFRydWUpCiAgICAgICAgICAgICBvcGVuX2Zkcy51cGRhdGUoZmRzKQogCiAgICAgICAgIGZvciBmZCBpbiBvcGVuX2ZkczoKQEAgLTE4ODIsNiArMTg4MSwzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPUZhbHNlLCBwYXNzX2Zkcz0oZmQsICkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb3ZlcnJpZGluZyBjbG9zZV9mZHMnLCBzdHIoY29udGV4dC53YXJuaW5nKSkKIAorICAgIGRlZiB0ZXN0X3Bhc3NfZmRzX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSBzdXBwb3J0LmZpbmRmaWxlKCJmZF9zdGF0dXMucHkiLCBzdWJkaXI9InN1YnByb2Nlc3NkYXRhIikKKworICAgICAgICBpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgaW5oZXJpdGFibGUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoaW5oZXJpdGFibGUsIFRydWUpCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShub25faW5oZXJpdGFibGUsIEZhbHNlKQorICAgICAgICBwYXNzX2ZkcyA9IChpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCBzY3JpcHRdCisgICAgICAgIGFyZ3MgKz0gbGlzdChtYXAoc3RyLCBwYXNzX2ZkcykpCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPXBhc3NfZmRzKQorICAgICAgICBvdXRwdXQsIGlnbm9yZWQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZmRzID0gc2V0KG1hcChpbnQsIG91dHB1dC5zcGxpdChiJywnKSkpCisKKyAgICAgICAgIyB0aGUgaW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgYmUgaW5oZXJpdGVkLCBzbyBpdHMgaW5oZXJpdGFibGUKKyAgICAgICAgIyBmbGFnIG11c3QgYmUgc2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzIGFmdGVyIGZvcmsoKSBhbmQgYmVmb3JlIGV4ZWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkcywgc2V0KHBhc3NfZmRzKSwgIm91dHB1dD0lYSIgJSBvdXRwdXQpCisKKyAgICAgICAgIyBpbmhlcml0YWJsZSBmbGFnIG11c3Qgbm90IGJlIGNoYW5nZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGluaGVyaXRhYmxlKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUobm9uX2luaGVyaXRhYmxlKSwgRmFsc2UpCisKICAgICBkZWYgdGVzdF9zdGRvdXRfc3RkaW5fYXJlX3NpbmdsZV9pbm91dF9mZChzZWxmKToKICAgICAgICAgd2l0aCBpby5vcGVuKG9zLmRldm51bGwsICJyKyIpIGFzIGlub3V0OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoMCkiXSwKQEAgLTE5NjksNyArMTk5NCw3IEBACiAgICAgICAgICMgbGV0IHNvbWUgdGltZSBmb3IgdGhlIHByb2Nlc3MgdG8gZXhpdCwgYW5kIGNyZWF0ZSBhIG5ldyBQb3BlbjogdGhpcwogICAgICAgICAjIHNob3VsZCB0cmlnZ2VyIHRoZSB3YWl0KCkgb2YgcAogICAgICAgICB0aW1lLnNsZWVwKDAuMikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFbnZpcm9ubWVudEVycm9yKSBhcyBjOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2M6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CmluZGV4IGUwOGNmMDEuLjJkYTNhYzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CkBAIC0xLDE5ICsxLDI2IEBACiAiIiJEbyBhIG1pbmltYWwgdGVzdCBvZiBhbGwgdGhlIG1vZHVsZXMgdGhhdCBhcmVuJ3Qgb3RoZXJ3aXNlIHRlc3RlZC4iIiIKLQotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogCiBjbGFzcyBUZXN0VW50ZXN0ZWRNb2R1bGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9hdF9sZWFzdF9pbXBvcnRfdW50ZXN0ZWRfbW9kdWxlcyhzZWxmKToKKyAgICBkZWYgdGVzdF91bnRlc3RlZF9tb2R1bGVzX2Nhbl9iZV9pbXBvcnRlZChzZWxmKToKKyAgICAgICAgdW50ZXN0ZWQgPSAoJ2JkYicsICdlbmNvZGluZ3MnLCAnZm9ybWF0dGVyJywgJ2ltZ2hkcicsCisgICAgICAgICAgICAgICAgICAgICdudHVybDJwYXRoJywgJ3RhYm5hbm55JykKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpOgotICAgICAgICAgICAgaW1wb3J0IGJkYgotICAgICAgICAgICAgaW1wb3J0IGNnaXRiCisgICAgICAgICAgICBmb3IgbmFtZSBpbiB1bnRlc3RlZDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGVzdC50ZXN0X3t9Jy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IHVuaXR0ZXN0LlNraXBUZXN0OgorICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne30gaGFzIHRlc3RzIGV2ZW4gdGhvdWdoIHRlc3Rfc3VuZHJ5IGNsYWltcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3RoZXJ3aXNlJy5mb3JtYXQobmFtZSkpCiAKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuYmNwcGNvbXBpbGVyCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jeWd3aW5jY29tcGlsZXIKLSAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuZW14Y2NvbXBpbGVyCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmZpbGVsaXN0CiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CiAgICAgICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5tc3ZjY29tcGlsZXIKQEAgLTM5LDI4ICs0NiwxNCBAQAogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLnNkaXN0CiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkCiAKLSAgICAgICAgICAgIGltcG9ydCBlbmNvZGluZ3MKLSAgICAgICAgICAgIGltcG9ydCBmb3JtYXR0ZXIKLSAgICAgICAgICAgIGltcG9ydCBnZXRwYXNzCiAgICAgICAgICAgICBpbXBvcnQgaHRtbC5lbnRpdGllcwotICAgICAgICAgICAgaW1wb3J0IGltZ2hkcgotICAgICAgICAgICAgaW1wb3J0IGtleXdvcmQKLSAgICAgICAgICAgIGltcG9ydCBtYWlsY2FwCi0gICAgICAgICAgICBpbXBvcnQgbnR1cmwycGF0aAotICAgICAgICAgICAgaW1wb3J0IG9zMmVteHBhdGgKLSAgICAgICAgICAgIGltcG9ydCBwc3RhdHMKLSAgICAgICAgICAgIGltcG9ydCBweV9jb21waWxlCi0gICAgICAgICAgICBpbXBvcnQgc25kaGRyCi0gICAgICAgICAgICBpbXBvcnQgdGFibmFubnkKKwogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCB0dHkgICAgICMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzCisgICAgICAgICAgICAgICAgaW1wb3J0IHR0eSAgIyBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJza2lwcGluZyB0dHkiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0VW50ZXN0ZWRNb2R1bGVzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9zdXBlci5weQppbmRleCAxZTI3MmVlLi4zN2ZjMmQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIGNsYXNzIFRlc3RTdXBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgVGhpcyBmaXhlcyB0aGUgZGFtYWdlIHRoYXQgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyBkb2VzLgorICAgICAgICBub25sb2NhbCBfX2NsYXNzX18KKyAgICAgICAgX19jbGFzc19fID0gVGVzdFN1cGVyCisKICAgICBkZWYgdGVzdF9iYXNpY3Nfd29ya2luZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuZigpLCAnQUJDRCcpCiAKQEAgLTgxLDggKzg2LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5mKCksICdBRScpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCi0gICAgZGVmIHRlc3RfX19jbGFzc19fX3NldChzZWxmKToKKyAgICBkZWYgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyhzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzEyMzcwCiAgICAgICAgIGNsYXNzIFgoQSk6CiAgICAgICAgICAgICBkZWYgZihzZWxmKToKQEAgLTkxLDYgKzk1LDMxIEBACiAgICAgICAgIHggPSBYKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmYoKSwgJ0EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCA0MTMpCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICB4ID0gX19jbGFzc19fCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXworICAgICAgICBzZWxmLmFzc2VydElzKFgueCwgdHlwZShzZWxmKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGVjKCIiImNsYXNzIFg6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAgICAgX19jbGFzc19fIiIiLCBnbG9iYWxzKCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZS5leGNlcHRpb24pLCBOYW1lRXJyb3IpICMgTm90IFVuYm91bmRMb2NhbEVycm9yCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBnbG9iYWwgX19jbGFzc19fCisgICAgICAgICAgICBfX2NsYXNzX18gPSA0MgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxzKClbIl9fY2xhc3NfXyJdLCA0MikKKyAgICAgICAgZGVsIGdsb2JhbHMoKVsiX19jbGFzc19fIl0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19jbGFzc19fIiwgWC5fX2RpY3RfXykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIG5vbmxvY2FsIF9fY2xhc3NfXworICAgICAgICAgICAgX19jbGFzc19fID0gNDIKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19jbGFzc19fLCA0MikKIAogICAgIGRlZiB0ZXN0X19fY2xhc3NfX19pbnN0YW5jZW1ldGhvZChzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzE0ODU3CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKaW5kZXggNGVkYjFhOC4uMTZiNjYwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQpAQCAtMzA2LDYgKzMwNiw3IEBACiAgICAgIyBhcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MKICAgICAjIGNhbl9zeW1saW5rCiAgICAgIyBza2lwX3VubGVzc19zeW1saW5rCisgICAgIyBTdXBwcmVzc0NyYXNoUmVwb3J0CiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQppbmRleCA1OTI2YjY5Li5hOWQzNjI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQpAQCAtMzMsNyArMzMsNyBAQAogCiA+Pj4gTm9uZSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIGtleXdvcmQKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8ga2V5d29yZAogCiBJdCdzIGEgc3ludGF4IGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgdHVwbGUuICBXaHkgaXNuJ3QgaXQgYW4KIGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgbGlzdD8gIEl0IHdpbGwgYWx3YXlzIHJhaXNlIHNvbWUgZXJyb3IgYXQKQEAgLTIzMyw3ICsyMzMsNyBAQAogU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgogPj4+IE5vbmUgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBrZXl3b3JkCiA+Pj4gZigpICs9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQppbmRleCBiYzRjMGFkLi44NDM3NzQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtNiw2ICs2LDggQEAKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgZ2MKK2ltcG9ydCBzeXNjb25maWcKIAogIyBjb3VudCB0aGUgbnVtYmVyIG9mIHRlc3QgcnVucywgdXNlZCB0byBjcmVhdGUgdW5pcXVlCiAjIHN0cmluZ3MgdG8gaW50ZXJuIGluIHRlc3RfaW50ZXJuKCkKQEAgLTI0OCw3ICsyNTAsNyBAQAogCiAgICAgICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQoJWQpCiAgICAgICAgICAgICBmKCkiIiIpCi0gICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKICAgICAgICAgICAgIGZvciBpIGluICg1MCwgMTAwMCk6CiAgICAgICAgICAgICAgICAgc3ViID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGUgJSBpXSwKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKQEAgLTQ4MCw3ICs0ODIsNyBAQAogICAgIGRlZiB0ZXN0X3RocmVhZF9pbmZvKHNlbGYpOgogICAgICAgICBpbmZvID0gc3lzLnRocmVhZF9pbmZvCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGluZm8pLCAzKQotICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubmFtZSwgKCdudCcsICdvczInLCAncHRocmVhZCcsICdzb2xhcmlzJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5mby5uYW1lLCAoJ250JywgJ3B0aHJlYWQnLCAnc29sYXJpcycsIE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubG9jaywgKCdzZW1hcGhvcmUnLCAnbXV0ZXgrY29uZCcsIE5vbmUpKQogCiAgICAgZGVmIHRlc3RfNDM1ODEoc2VsZik6CkBAIC01MTMsNyArNTE1LDcgQEAKICAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwKICAgICAgICAgICAgICAgICAgImluc3BlY3QiLCAiaW50ZXJhY3RpdmUiLCAib3B0aW1pemUiLCAiZG9udF93cml0ZV9ieXRlY29kZSIsCiAgICAgICAgICAgICAgICAgICJub191c2VyX3NpdGUiLCAibm9fc2l0ZSIsICJpZ25vcmVfZW52aXJvbm1lbnQiLCAidmVyYm9zZSIsCi0gICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIpCisgICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIsICJpc29sYXRlZCIpCiAgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCkBAIC01NDIsNiArNTQ0LDQyIEBACiAgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJz8nKQogCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImFzY2lpIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludChjaHIoMHhhMikpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmljb2RlRW5jb2RlRXJyb3I6JywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJiIidceGEyJyIsIGVycikKKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJhc2NpaToiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGEyKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1VuaWNvZGVFbmNvZGVFcnJvcjonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmIiJ1x4YTInIiwgZXJyKQorCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gIjpzdXJyb2dhdGVlc2NhcGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGRjYmQpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYidceGJkJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgT1Mgc3VwcG9ydCBvZiBub24tQVNDSUkgZW5jb2RpbmdzJykKKyAgICBkZWYgdGVzdF9pb2VuY29kaW5nX25vbmFzY2lpKHNlbGYpOgorICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCisKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmludCglYSknICUgdGVzdC5zdXBwb3J0LkZTX05PTkFTQ0lJXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIG9zLmZzZW5jb2RlKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSkpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5iYXNlX3ByZWZpeCAhPSBzeXMucHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QgaXMgbm90IHZlbnYtY29tcGF0aWJsZScpCiAgICAgZGVmIHRlc3RfZXhlY3V0YWJsZShzZWxmKToKQEAgLTYwOSw2ICs2NDcsMzYgQEAKICAgICAgICAgcmV0LCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJmcmVlIFB5RGljdE9iamVjdHMiLCBlcnIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHN5cywgImdldGFsbG9jYXRlZGJsb2NrcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzIHVuYXZhaWxhYmxlIG9uIHRoaXMgYnVpbGQiKQorICAgIGRlZiB0ZXN0X2dldGFsbG9jYXRlZGJsb2NrcyhzZWxmKToKKyAgICAgICAgIyBTb21lIHNhbml0eSBjaGVja3MKKyAgICAgICAgd2l0aF9weW1hbGxvYyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignV0lUSF9QWU1BTExPQycpCisgICAgICAgIGEgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGEpLCBpbnQpCisgICAgICAgIGlmIHdpdGhfcHltYWxsb2M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYSwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2hlbiBXSVRIX1BZTUFMTE9DIGlzbid0IGF2YWlsYWJsZSwgd2UgZG9uJ3Qga25vdyBhbnl0aGluZworICAgICAgICAgICAgIyBhYm91dCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbjogdGhlIGZ1bmN0aW9uIG1pZ2h0CisgICAgICAgICAgICAjIHJldHVybiAwIG9yIHNvbWV0aGluZyBncmVhdGVyLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYSwgMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBXaGlsZSB3ZSBjb3VsZCBpbWFnaW5lIGEgUHl0aG9uIHNlc3Npb24gd2hlcmUgdGhlIG51bWJlciBvZgorICAgICAgICAgICAgIyBtdWx0aXBsZSBidWZmZXIgb2JqZWN0cyB3b3VsZCBleGNlZWQgdGhlIHNoYXJpbmcgb2YgcmVmZXJlbmNlcywKKyAgICAgICAgICAgICMgaXQgaXMgdW5saWtlbHkgdG8gaGFwcGVuIGluIGEgbm9ybWFsIHRlc3QgcnVuLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGEsIHN5cy5nZXR0b3RhbHJlZmNvdW50KCkpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgZ2V0dG90YWxyZWZjb3VudCgpIG5vdCBhdmFpbGFibGUKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGIgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYiwgYSkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGMgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjLCByYW5nZShiIC0gNTAsIGIgKyA1MCkpCisKKwogY2xhc3MgU2l6ZW9mVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC02NTMsNyArNzIxLDcgQEAKICAgICAgICAgc2FtcGxlcyA9IFtiJycsIGIndScqMTAwMDAwXQogICAgICAgICBmb3Igc2FtcGxlIGluIHNhbXBsZXM6CiAgICAgICAgICAgICB4ID0gYnl0ZWFycmF5KHNhbXBsZSkKLSAgICAgICAgICAgIGNoZWNrKHgsIHZzaXplKCdpblAnKSArIHguX19hbGxvY19fKCkpCisgICAgICAgICAgICBjaGVjayh4LCB2c2l6ZSgnbjJQaScpICsgeC5fX2FsbG9jX18oKSkKICAgICAgICAgIyBieXRlYXJyYXlfaXRlcmF0b3IKICAgICAgICAgY2hlY2soaXRlcihieXRlYXJyYXkoKSksIHNpemUoJ25QJykpCiAgICAgICAgICMgY2VsbApAQCAtNzMyLDcgKzgwMCw3IEBACiAgICAgICAgIG5mcmVlcyA9IGxlbih4LmZfY29kZS5jb19mcmVldmFycykKICAgICAgICAgZXh0cmFzID0geC5mX2NvZGUuY29fc3RhY2tzaXplICsgeC5mX2NvZGUuY29fbmxvY2FscyArXAogICAgICAgICAgICAgICAgICAgbmNlbGxzICsgbmZyZWVzIC0gMQotICAgICAgICBjaGVjayh4LCB2c2l6ZSgnMTJQM2knICsgQ09fTUFYQkxPQ0tTKiczaScgKyAnUCcgKyBleHRyYXMqJ1AnKSkKKyAgICAgICAgY2hlY2soeCwgdnNpemUoJzEzUDNpYycgKyBDT19NQVhCTE9DS1MqJzNpJyArICdQJyArIGV4dHJhcyonUCcpKQogICAgICAgICAjIGZ1bmN0aW9uCiAgICAgICAgIGRlZiBmdW5jKCk6IHBhc3MKICAgICAgICAgY2hlY2soZnVuYywgc2l6ZSgnMTJQJykpCkBAIC03NzgsNyArODQ2LDcgQEAKICAgICAgICAgIyBtZW1vcnl2aWV3CiAgICAgICAgIGNoZWNrKG1lbW9yeXZpZXcoYicnKSwgc2l6ZSgnUG5pbiAyUDJuMmk1UCAzY1BuJykpCiAgICAgICAgICMgbW9kdWxlCi0gICAgICAgIGNoZWNrKHVuaXR0ZXN0LCBzaXplKCdQblAnKSkKKyAgICAgICAgY2hlY2sodW5pdHRlc3QsIHNpemUoJ1BuUFBQJykpCiAgICAgICAgICMgTm9uZQogICAgICAgICBjaGVjayhOb25lLCBzaXplKCcnKSkKICAgICAgICAgIyBOb3RJbXBsZW1lbnRlZFR5cGUKQEAgLTgzMiwxMSArOTAwLDExIEBACiAgICAgICAgIGNoZWNrKCgxLDIsMyksIHZzaXplKCcnKSArIDMqc2VsZi5QKQogICAgICAgICAjIHR5cGUKICAgICAgICAgIyBzdGF0aWMgdHlwZTogUHlUeXBlT2JqZWN0Ci0gICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUEknKQorICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJUCcpCiAgICAgICAgIGNoZWNrKGludCwgcykKICAgICAgICAgIyAoUHlUeXBlT2JqZWN0ICsgUHlOdW1iZXJNZXRob2RzICsgUHlNYXBwaW5nTWV0aG9kcyArCiAgICAgICAgICMgIFB5U2VxdWVuY2VNZXRob2RzICsgUHlCdWZmZXJQcm9jcyArIDRQKQotICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJJykgKyBzdHJ1Y3QuY2FsY3NpemUoJzM0UCAzUCAxMFAgMlAgNFAnKQorICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJUCcpICsgc3RydWN0LmNhbGNzaXplKCczNFAgM1AgMTBQIDJQIDRQJykKICAgICAgICAgIyBTZXBhcmF0ZSBibG9jayBmb3IgUHlEaWN0S2V5c09iamVjdCB3aXRoIDQgZW50cmllcwogICAgICAgICBzICs9IHN0cnVjdC5jYWxjc2l6ZSgiMm5QbiIpICsgNCpzdHJ1Y3QuY2FsY3NpemUoIm4yUCIpCiAgICAgICAgICMgY2xhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKaW5kZXggMDNmNjdmZC4uMjk2ODYwNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKIAogICAgIGRlZiB0ZXN0X2dldF9zY2hlbWVfbmFtZXMoc2VsZik6Ci0gICAgICAgIHdhbnRlZCA9ICgnbnQnLCAnbnRfdXNlcicsICdvczInLCAnb3MyX2hvbWUnLCAnb3N4X2ZyYW1ld29ya191c2VyJywKKyAgICAgICAgd2FudGVkID0gKCdudCcsICdudF91c2VyJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCiAgICAgICAgICAgICAgICAgICAncG9zaXhfaG9tZScsICdwb3NpeF9wcmVmaXgnLCAncG9zaXhfdXNlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3NjaGVtZV9uYW1lcygpLCB3YW50ZWQpCiAKQEAgLTMwNSwxNCArMzA1LDEzIEBACiAgICAgICAgIGlmICdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnIGluIGVudjoKICAgICAgICAgICAgIGRlbCBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnLCAndycpIGFzIGRldm51bGxfZnA6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCi0gICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAotICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsX2ZwLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCkBAIC0zMjUsMjAgKzMyNCwxOSBAQAogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjEnCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnKSBhcyBkZXZfbnVsbDoKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKLSAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCi0gICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgc3RkZXJyPWRldl9udWxsLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCi0gICAgICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RfcGxhdGZvcm0gPSB0ZXN0X3BsYXRmb3JtLmRlY29kZSgndXRmLTgnKQotICAgICAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwKKyAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHRlc3RfcGxhdGZvcm0gPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gdGVzdF9wbGF0Zm9ybS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15X3BsYXRmb3JtLCB0ZXN0X3BsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteV9wbGF0Zm9ybSwgdGVzdF9wbGF0Zm9ybSkKIAogICAgIGRlZiB0ZXN0X3NyY2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgSXNzdWVzICMxNTMyMiwgIzE1MzY0LgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CmluZGV4IDIzODE3NWYuLjJmMmJmNmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKQEAgLTE3MzIsMjAgKzE3MzIsMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKIAogICAgIGRlZiB0ZXN0X2Nsb3NlZChzZWxmKToKLSAgICAgICAgIyBUaGUgX19lbnRlcl9fKCkgbWV0aG9kIGlzIHN1cHBvc2VkIHRvIHJhaXNlIElPRXJyb3IKKyAgICAgICAgIyBUaGUgX19lbnRlcl9fKCkgbWV0aG9kIGlzIHN1cHBvc2VkIHRvIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBpZiB0aGUgVGFyRmlsZSBvYmplY3QgaXMgYWxyZWFkeSBjbG9zZWQuCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lKQogICAgICAgICB0YXIuY2xvc2UoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgogICAgICAgICAgICAgd2l0aCB0YXI6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgotICAgICAgICAjIFRlc3QgaWYgdGhlIElPRXJyb3IgZXhjZXB0aW9uIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5LgorICAgICAgICAjIFRlc3QgaWYgdGhlIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbikgYXMgZXhjOgogICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSkgYXMgdGFyOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIElPRXJyb3IsCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBleGNlcHRpb24gcmFpc2VkIGluIGNvbnRleHQgbWFuYWdlciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5IGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKaW5kZXggY2YxZmNmOS4uY2Y3MTdkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90Y2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKQEAgLTI1NCw0MCArMjU0LDYgQEAKICAgICAgICAgZm9yIGFyZywgcmVzIGluIHRlc3RjYXNlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXQoYXJnKSwgcmVzLCBtc2c9YXJnKQogCi0gICAgZGVmIHRlc3RfbWVyZ2Uoc2VsZik6Ci0gICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJ21lcmdlIGlzIGRlcHJlY2F0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgotICAgICAgICAgICAgbWVyZ2UgPSBzZWxmLmludGVycC50ay5tZXJnZQotICAgICAgICAgICAgY2FsbCA9IHNlbGYuaW50ZXJwLnRrLmNhbGwKLSAgICAgICAgICAgIHRlc3RjYXNlcyA9IFsKLSAgICAgICAgICAgICAgICAoKCksICcnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywpLCAnYScpLAotICAgICAgICAgICAgICAgICgoMiwpLCAnMicpLAotICAgICAgICAgICAgICAgICgoJycsKSwgJ3t9JyksCi0gICAgICAgICAgICAgICAgKCd7JywgJ1xceycpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnYicsICdjJyksICdhIGIgYycpLAotICAgICAgICAgICAgICAgICgoJyAnLCAnXHQnLCAnXHInLCAnXG4nKSwgJ3sgfSB7XHR9IHtccn0ge1xufScpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnICcsICdjJyksICdhIHsgfSBjJyksCi0gICAgICAgICAgICAgICAgKCgnYScsICfigqwnKSwgJ2Eg4oKsJyksCi0gICAgICAgICAgICAgICAgKCgnYScsICdcVTAwMDEwNGEyJyksICdhIFxVMDAwMTA0YTInKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgYidceGUyXHg4Mlx4YWMnKSwgJ2Eg4oKsJyksCi0gICAgICAgICAgICAgICAgKCgnYScsICgnYicsICdjJykpLCAnYSB7YiBjfScpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAyKSwgJ2EgMicpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAzLjQpLCAnYSAzLjQnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgKDIsIDMuNCkpLCAnYSB7MiAzLjR9JyksCi0gICAgICAgICAgICAgICAgKCgpLCAnJyksCi0gICAgICAgICAgICAgICAgKChjYWxsKCdsaXN0JywgMSwgJzInLCAoMy40LCkpLCksICd7MSAyIDMuNH0nKSwKLSAgICAgICAgICAgIF0KLSAgICAgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKLSAgICAgICAgICAgICAgICB0ZXN0Y2FzZXMgKz0gWwotICAgICAgICAgICAgICAgICAgICAoKGNhbGwoJ2RpY3QnLCAnY3JlYXRlJywgMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSksKSwKLSAgICAgICAgICAgICAgICAgICAgICd7MTIg4oKsIOKCrCAzLjR9JyksCi0gICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgZm9yIGFyZ3MsIHJlcyBpbiB0ZXN0Y2FzZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXJnZSgqYXJncyksIHJlcywgbXNnPWFyZ3MpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIG1lcmdlLCBiJ1x4ODAnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBtZXJnZSwgJ1x1ZGM4MCcpCi0KIAogY2xhc3MgQmlnbWVtVGNsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKaW5kZXggYzlmMmNjYi4uYmEzMzA2NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKQEAgLTEsMTAgKzEsOSBAQAogaW1wb3J0IHNvY2tldAotaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNlbGVjdG9ycwogaW1wb3J0IHRlbG5ldGxpYgogaW1wb3J0IHRpbWUKIGltcG9ydCBjb250ZXh0bGliCiAKLWltcG9ydCB1bml0dGVzdAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogdGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQpAQCAtMTEyLDQwICsxMTEsMzIgQEAKICAgICAgICAgc2VsZi5fbWVzc2FnZXMgKz0gb3V0LmdldHZhbHVlKCkKICAgICAgICAgcmV0dXJuCiAKLWRlZiBtb2NrX3NlbGVjdCgqc19hcmdzKToKLSAgICBibG9jayA9IEZhbHNlCi0gICAgZm9yIGwgaW4gc19hcmdzOgotICAgICAgICBmb3IgZm9iIGluIGw6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZvYiwgVGVsbmV0QWxpa2UpOgotICAgICAgICAgICAgICAgIGJsb2NrID0gZm9iLnNvY2suYmxvY2sKLSAgICBpZiBibG9jazoKLSAgICAgICAgcmV0dXJuIFtbXSwgW10sIFtdXQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBzX2FyZ3MKLQotY2xhc3MgTW9ja1BvbGxlcihvYmplY3QpOgotICAgIHRlc3RfY2FzZSA9IE5vbmUgICMgU2V0IGR1cmluZyBUZXN0Q2FzZSBzZXRVcC4KK2NsYXNzIE1vY2tTZWxlY3RvcihzZWxlY3RvcnMuQmFzZVNlbGVjdG9yKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzID0gW10KKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYua2V5cyA9IHt9CiAKLSAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmQsIGV2ZW50bWFzayk6Ci0gICAgICAgIHNlbGYudGVzdF9jYXNlLmFzc2VydFRydWUoaGFzYXR0cihmZCwgJ2ZpbGVubycpLCBmZCkKLSAgICAgICAgc2VsZi50ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoZXZlbnRtYXNrLCBzZWxlY3QuUE9MTElOfHNlbGVjdC5QT0xMUFJJKQotICAgICAgICBzZWxmLl9maWxlX29ianMuYXBwZW5kKGZkKQorICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGtleSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleShmaWxlb2JqLCAwLCBldmVudHMsIGRhdGEpCisgICAgICAgIHNlbGYua2V5c1tmaWxlb2JqXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CiAKLSAgICBkZWYgcG9sbChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICBrZXkgPSBzZWxmLmtleXMucG9wKGZpbGVvYmopCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKICAgICAgICAgYmxvY2sgPSBGYWxzZQotICAgICAgICBmb3IgZm9iIGluIHNlbGYuX2ZpbGVfb2JqczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm9iLCBUZWxuZXRBbGlrZSk6Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSBmb2Iuc29jay5ibG9jaworICAgICAgICBmb3IgZmlsZW9iaiBpbiBzZWxmLmtleXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVvYmosIFRlbG5ldEFsaWtlKToKKyAgICAgICAgICAgICAgICBibG9jayA9IGZpbGVvYmouc29jay5ibG9jaworICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gemlwKHNlbGYuX2ZpbGVfb2JqcywgW3NlbGVjdC5QT0xMSU5dKmxlbihzZWxmLl9maWxlX29ianMpKQorICAgICAgICAgICAgcmV0dXJuIFsoa2V5LCBrZXkuZXZlbnRzKSBmb3Iga2V5IGluIHNlbGYua2V5cy52YWx1ZXMoKV0KIAotICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZkKToKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzLnJlbW92ZShmZCkKIAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKIGRlZiB0ZXN0X3NvY2tldChyZWFkcyk6CkBAIC0xNTksNyArMTUwLDcgQEAKICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uID0gb2xkX2Nvbm4KICAgICByZXR1cm4KIAotZGVmIHRlc3RfdGVsbmV0KHJlYWRzPSgpLCBjbHM9VGVsbmV0QWxpa2UsIHVzZV9wb2xsPU5vbmUpOgorZGVmIHRlc3RfdGVsbmV0KHJlYWRzPSgpLCBjbHM9VGVsbmV0QWxpa2UpOgogICAgICcnJyByZXR1cm4gYSB0ZWxuZXRsaWIuVGVsbmV0IG9iamVjdCB0aGF0IHVzZXMgYSBTb2NrZXRTdHViIHdpdGgKICAgICAgICAgcmVhZHMgcXVldWVkIHVwIHRvIGJlIHJlYWQgJycnCiAgICAgZm9yIHggaW4gcmVhZHM6CkBAIC0xNjcsMjkgKzE1OCwxNCBAQAogICAgIHdpdGggdGVzdF9zb2NrZXQocmVhZHMpOgogICAgICAgICB0ZWxuZXQgPSBjbHMoJ2R1bW15JywgMCkKICAgICAgICAgdGVsbmV0Ll9tZXNzYWdlcyA9ICcnICMgZGVidWdsZXZlbCBvdXRwdXQKLSAgICAgICAgaWYgdXNlX3BvbGwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiB1c2VfcG9sbCBhbmQgbm90IHRlbG5ldC5faGFzX3BvbGw6Ci0gICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NlbGVjdC5wb2xsKCkgcmVxdWlyZWQuJykKLSAgICAgICAgICAgIHRlbG5ldC5faGFzX3BvbGwgPSB1c2VfcG9sbAogICAgIHJldHVybiB0ZWxuZXQKIAotCiBjbGFzcyBFeHBlY3RBbmRSZWFkVGVzdENhc2UoVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5vbGRfc2VsZWN0ID0gc2VsZWN0LnNlbGVjdAotICAgICAgICBzZWxlY3Quc2VsZWN0ID0gbW9ja19zZWxlY3QKLSAgICAgICAgc2VsZi5vbGRfcG9sbCA9IEZhbHNlCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgotICAgICAgICAgICAgc2VsZi5vbGRfcG9sbCA9IHNlbGVjdC5wb2xsCi0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IE1vY2tQb2xsZXIKLSAgICAgICAgICAgIE1vY2tQb2xsZXIudGVzdF9jYXNlID0gc2VsZgotCisgICAgICAgIHNlbGYub2xkX3NlbGVjdG9yID0gdGVsbmV0bGliLl9UZWxuZXRTZWxlY3RvcgorICAgICAgICB0ZWxuZXRsaWIuX1RlbG5ldFNlbGVjdG9yID0gTW9ja1NlbGVjdG9yCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBpZiBzZWxmLm9sZF9wb2xsOgotICAgICAgICAgICAgTW9ja1BvbGxlci50ZXN0X2Nhc2UgPSBOb25lCi0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IHNlbGYub2xkX3BvbGwKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IHNlbGYub2xkX3NlbGVjdAotCisgICAgICAgIHRlbG5ldGxpYi5fVGVsbmV0U2VsZWN0b3IgPSBzZWxmLm9sZF9zZWxlY3RvcgogCiBjbGFzcyBSZWFkVGVzdHMoRXhwZWN0QW5kUmVhZFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZWFkX3VudGlsKHNlbGYpOgpAQCAtMjA4LDIyICsxODQsNiBAQAogICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoYidtYXRjaCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0KQogCi0gICAgZGVmIHRlc3RfcmVhZF91bnRpbF93aXRoX3BvbGwoc2VsZik6Ci0gICAgICAgICIiIlVzZSBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0ZWxuZXQucmVhZF91bnRpbCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9VHJ1ZSkKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHNlbGVjdCgpIGNhbGwuJykKLSAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKGInbWF0Y2gnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInJy5qb2luKHdhbnRbOi0xXSkpCi0KLSAgICBkZWYgdGVzdF9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnNlbGVjdCgpIHRvIGltcGxlbWVudCB0ZWxuZXQucmVhZF91bnRpbCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9RmFsc2UpCi0gICAgICAgIGlmIHNlbGYub2xkX3BvbGw6Ci0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHBvbGwoKSBjYWxsLicpCi0gICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbChiJ21hdGNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQogCiAgICAgZGVmIHRlc3RfcmVhZF9hbGwoc2VsZik6CiAgICAgICAgICIiIgpAQCAtNDI3LDIzICszODcsNiBAQAogICAgICAgICAoXyxfLGRhdGEpID0gdGVsbmV0LmV4cGVjdChbYidtYXRjaCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInJy5qb2luKHdhbnRbOi0xXSkpCiAKLSAgICBkZWYgdGVzdF9leHBlY3Rfd2l0aF9wb2xsKHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGVsbmV0LmV4cGVjdCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9VHJ1ZSkKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHNlbGVjdCgpIGNhbGwuJykKLSAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCi0gICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfc2VsZWN0KHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnNlbGVjdCgpIHRvIGltcGxlbWVudCB0ZWxuZXQuZXhwZWN0KCkuIiIiCi0gICAgICAgIHdhbnQgPSBbYid4JyAqIDEwLCBiJ21hdGNoJywgYid5JyAqIDEwXQotICAgICAgICB0ZWxuZXQgPSB0ZXN0X3RlbG5ldCh3YW50LCB1c2VfcG9sbD1GYWxzZSkKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9sbDoKLSAgICAgICAgICAgIHNlbGVjdC5wb2xsID0gbGFtYmRhICpfOiBzZWxmLmZhaWwoJ3VuZXhwZWN0ZWQgcG9sbCgpIGNhbGwuJykKLSAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChHZW5lcmFsVGVzdHMsIFJlYWRUZXN0cywgV3JpdGVUZXN0cywgT3B0aW9uVGVzdHMsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQppbmRleCA0ZmY1NmI4Li5hYzRkODYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKQEAgLTM2LDcgKzM2LDcgQEAKICMgQ29tbW9uIGZ1bmN0aW9uYWxpdHkuCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgc3RyX2NoZWNrID0gcmUuY29tcGlsZShyIlthLXpBLVowLTlfLV17Nn0kIikKKyAgICBzdHJfY2hlY2sgPSByZS5jb21waWxlKHIiXlthLXowLTlfLV17OH0kIikKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlciA9IHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKQpAQCAtNjMsNyArNjMsNyBAQAogCiAgICAgICAgIG5iYXNlID0gbmJhc2VbbGVuKHByZSk6bGVuKG5iYXNlKS1sZW4oc3VmKV0KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3RyX2NoZWNrLm1hdGNoKG5iYXNlKSwKLSAgICAgICAgICAgICAgICAgICAgICJyYW5kb20gc3RyaW5nICclcycgZG9lcyBub3QgbWF0Y2ggL15bYS16QS1aMC05Xy1dezZ9JC8iCisgICAgICAgICAgICAgICAgICAgICAicmFuZG9tIHN0cmluZyAnJXMnIGRvZXMgbm90IG1hdGNoIF5bYS16MC05Xy1dezh9JCIKICAgICAgICAgICAgICAgICAgICAgICUgbmJhc2UpCiAKIApAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgICAgICAgICAgIyB2aWEgYW55IGJ1Z3MgYWJvdmUKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgb3MuY2xvc2UocmVhZF9mZCkKICAgICAgICAgICAgIG9zLmNsb3NlKHdyaXRlX2ZkKQpAQCAtMTkxLDcgKzE5MSw3IEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIG9zLmVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihkaXJuYW1lLCBjYW5kKQpAQCAtMzMyLDcgKzMzMiw3IEBACiAgICAgICAgIGZpbGUgPSBzZWxmLmRvX2NyZWF0ZSgpCiAgICAgICAgIG1vZGUgPSBzdGF0LlNfSU1PREUob3Muc3RhdChmaWxlLm5hbWUpLnN0X21vZGUpCiAgICAgICAgIGV4cGVjdGVkID0gMG82MDAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14Jyk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKICAgICAgICAgICAgICMgcmVwbGljYXRlIHRoZSAndXNlcicgYml0cy4KICAgICAgICAgICAgIHVzZXIgPSBleHBlY3RlZCA+PiA2CkBAIC0zNTAsNiArMzUwLDcgQEAKICAgICAgICAgICAgIHY9InEiCiAKICAgICAgICAgZmlsZSA9IHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmlsZS5mZCksIEZhbHNlKQogICAgICAgICBmZCA9ICIlZCIgJSBmaWxlLmZkCiAKICAgICAgICAgdHJ5OgpAQCAtMzY2LDcgKzM2Nyw3IEBACiAgICAgICAgICMgT24gV2luZG93cyBhIHNwYXduKiAvcGF0aC8gd2l0aCBlbWJlZGRlZCBzcGFjZXMgc2hvdWxkbid0IGJlIHF1b3RlZCwKICAgICAgICAgIyBidXQgYW4gYXJnIHdpdGggZW1iZWRkZWQgc3BhY2VzIHNob3VsZCBiZSBkZWNvcmF0ZWQgd2l0aCBkb3VibGUKICAgICAgICAgIyBxdW90ZXMgb24gZWFjaCBlbmQKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgZGVjb3JhdGVkID0gJyIlcyInICUgc3lzLmV4ZWN1dGFibGUKICAgICAgICAgICAgIHRlc3RlciA9ICciJXMiJyAlIHRlc3RlcgogICAgICAgICBlbHNlOgpAQCAtNDc3LDYgKzQ3OCwyMCBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCiAKKyAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2ZShzZWxmKToKKyAgICAgICAgIyBnZXR0ZW1wZGlyIHNob3VsZCBub3QgZmxhdHRlbiBpdHMgY2FzZQorICAgICAgICAjIGV2ZW4gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtCisgICAgICAgIGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCItVGVtcCIpCisgICAgICAgIF90ZW1wZGlyLCB0ZW1wZmlsZS50ZW1wZGlyID0gdGVtcGZpbGUudGVtcGRpciwgTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgICAgICAjIEZha2UgdGhlIGZpcnN0IGVudiB2YXIgd2hpY2ggaXMgY2hlY2tlZCBhcyBhIGNhbmRpZGF0ZQorICAgICAgICAgICAgICAgIGVudlsiVE1QRElSIl0gPSBjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksIGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0ZW1wZmlsZS50ZW1wZGlyID0gX3RlbXBkaXIKKyAgICAgICAgICAgIHN1cHBvcnQucm1kaXIoY2FzZV9zZW5zaXRpdmVfdGVtcGRpcikKKwogCiBjbGFzcyBUZXN0TWtzdGVtcChCYXNlVGVzdENhc2UpOgogICAgICIiIlRlc3QgbWtzdGVtcCgpLiIiIgpAQCAtNTY2LDcgKzU4MSw3IEBACiAgICAgICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZGlyKS5zdF9tb2RlKQogICAgICAgICAgICAgbW9kZSAmPSAwbzc3NyAjIE1hc2sgb2ZmIHN0aWNreSBiaXRzIGluaGVyaXRlZCBmcm9tIC90bXAKICAgICAgICAgICAgIGV4cGVjdGVkID0gMG83MDAKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKICAgICAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCiAgICAgICAgICAgICAgICAgdXNlciA9IGV4cGVjdGVkID4+IDYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkgYi9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CmluZGV4IGM4NmY1Y2YuLjFiYmE3N2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQpAQCAtOSw5ICs5LDggQEAKICMKIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAotZnJvbSB0ZXh0d3JhcCBpbXBvcnQgVGV4dFdyYXBwZXIsIHdyYXAsIGZpbGwsIGRlZGVudCwgaW5kZW50Citmcm9tIHRleHR3cmFwIGltcG9ydCBUZXh0V3JhcHBlciwgd3JhcCwgZmlsbCwgZGVkZW50LCBpbmRlbnQsIHNob3J0ZW4KIAogCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDMwLDYgKzQyOSw5MCBAQAogICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNywgWyJhYSBceGU0XHhlNC0iLCAiXHhlNFx4ZTQiXSkKIAogCitjbGFzcyBNYXhMaW5lc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisgICAgdGV4dCA9ICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIEknbSBnbGFkIHRvIGhlYXIgaXQhIgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0wKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MikKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTMsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCA4MCwgW3NlbGYudGV4dF0sIG1heF9saW5lcz0xKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZSB5b3UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIGZpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJkYXk/ICBJJ20iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJnbGFkIHRvIGhlYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpdCEiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz02KQorCisgICAgZGVmIHRlc3Rfc3BhY2VzKHNlbGYpOgorICAgICAgICAjIHN0cmlwIHNwYWNlcyBiZWZvcmUgcGxhY2Vob2xkZXIKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgeW91IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBmaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF5PyBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTQpCisgICAgICAgICMgcGxhY2Vob2xkZXIgYXQgdGhlIHN0YXJ0IG9mIGxpbmUKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIpCisgICAgICAgICMgZmluYWwgc3BhY2VzCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQgKyAnICcgKiAxMCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgeW91IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBmaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF5PyAgSSdtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xhZCB0byBoZWFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaXQhIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NikKKworICAgIGRlZiB0ZXN0X3BsYWNlaG9sZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8uLi4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Jy4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScuLi4nKQorICAgICAgICAjIGxvbmcgcGxhY2Vob2xkZXIgYW5kIGluZGVudGF0aW9uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB3cmFwKHNlbGYudGV4dCwgMTYsIGluaXRpYWxfaW5kZW50PScgICAgJywKKyAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTEsIHBsYWNlaG9sZGVyPScgW3RydW5jYXRlZF0uLi4nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgd3JhcChzZWxmLnRleHQsIDE2LCBzdWJzZXF1ZW50X2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yLCBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICBbIiAgICBIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICIgIFt0cnVuY2F0ZWRdLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PScgICAgJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnRfaW5kZW50PScgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICBbIiAgW3RydW5jYXRlZF0uLi4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9pbmRlbnQ9JyAgJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnRfaW5kZW50PScgICAgJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScgW3RydW5jYXRlZF0uLi4nKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCA4MCwgW3NlbGYudGV4dF0sIHBsYWNlaG9sZGVyPScuJyAqIDEwMDApCisKKwogY2xhc3MgTG9uZ1dvcmRUZXN0Q2FzZSAoQmFzZVRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYud3JhcHBlciA9IFRleHRXcmFwcGVyKCkKQEAgLTQ5MCw2ICs1NzMsMTQgQEAKICAgICAgICAgcmVzdWx0ID0gd3JhcChzZWxmLnRleHQsIHdpZHRoPTMwLCBicmVha19sb25nX3dvcmRzPTApCiAgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCiAKKyAgICBkZWYgdGVzdF9tYXhfbGluZXNfbG9uZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbJ0RpZCB5b3Ugc2F5ICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyJzdXBlcmNhbGlmcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FnaWxpc3RpY2V4cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1suLi5dJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NCkKKwogCiBjbGFzcyBJbmRlbnRUZXN0Q2FzZXMoQmFzZVRlc3RDYXNlKToKIApAQCAtNzc3LDEyICs4NjgsNjIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZW50KHRleHQsIHByZWZpeCwgcHJlZGljYXRlKSwgZXhwZWN0KQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChXcmFwVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb25nV29yZFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZW50VGVzdENhc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVkZW50VGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRlbnRUZXN0Q2FzZSkKK2NsYXNzIFNob3J0ZW5UZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX3Nob3J0ZW4oc2VsZiwgdGV4dCwgd2lkdGgsIGV4cGVjdCwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBzaG9ydGVuKHRleHQsIHdpZHRoLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5jaGVjayhyZXN1bHQsIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgIyBTaW1wbGUgY2FzZToganVzdCB3b3Jkcywgc3BhY2VzLCBhbmQgYSBiaXQgb2YgcHVuY3R1YXRpb24KKyAgICAgICAgdGV4dCA9ICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gSSdtIGdsYWQgdG8gaGVhciBpdCEiCisKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE4LCAiSGVsbG8gdGhlcmUsIFsuLi5dIikKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIGxlbih0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIGxlbih0ZXh0KSAtIDEsCisgICAgICAgICAgICAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/ICIKKyAgICAgICAgICAgICJJJ20gZ2xhZCB0byBbLi4uXSIpCisKKyAgICBkZWYgdGVzdF9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgdGV4dCA9ICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gSSdtIGdsYWQgdG8gaGVhciBpdCEiCisKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE3LCAiSGVsbG8gdGhlcmUsJCQiLCBwbGFjZWhvbGRlcj0nJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTgsICJIZWxsbyB0aGVyZSwgaG93JCQiLCBwbGFjZWhvbGRlcj0nJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTgsICJIZWxsbyB0aGVyZSwgJCQiLCBwbGFjZWhvbGRlcj0nICQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIGxlbih0ZXh0KSwgdGV4dCwgcGxhY2Vob2xkZXI9JyQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIGxlbih0ZXh0KSAtIDEsCisgICAgICAgICAgICAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/ICIKKyAgICAgICAgICAgICJJJ20gZ2xhZCB0byBoZWFyJCQiLCBwbGFjZWhvbGRlcj0nJCQnKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oIiIsIDYsICIiKQorCisgICAgZGVmIHRlc3Rfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgIyBXaGl0ZXNwYWNlIGNvbGxhcHNpbmcKKyAgICAgICAgdGV4dCA9ICIiIgorICAgICAgICAgICAgVGhpcyBpcyBhICBwYXJhZ3JhcGggdGhhdCAgYWxyZWFkeSBoYXMKKyAgICAgICAgICAgIGxpbmUgYnJlYWtzIGFuZCBcdCB0YWJzIHRvby4iIiIKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDYyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGFscmVhZHkgaGFzIGxpbmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJlYWtzIGFuZCB0YWJzIHRvby4iKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgNjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGEgcGFyYWdyYXBoIHRoYXQgYWxyZWFkeSBoYXMgbGluZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicmVha3MgYW5kIFsuLi5dIikKKworICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oImhlbGxvICAgICAgd29ybGQhICAiLCAxMiwgImhlbGxvIHdvcmxkISIpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiaGVsbG8gICAgICB3b3JsZCEgICIsIDExLCAiaGVsbG8gWy4uLl0iKQorICAgICAgICAjIFRoZSBsZWFkaW5nIHNwYWNlIGlzIHRyaW1tZWQgZnJvbSB0aGUgcGxhY2Vob2xkZXIKKyAgICAgICAgIyAoaXQgd291bGQgYmUgdWdseSBvdGhlcndpc2UpLgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oImhlbGxvICAgICAgd29ybGQhICAiLCAxMCwgIlsuLi5dIikKKworICAgIGRlZiB0ZXN0X3dpZHRoX3Rvb19zbWFsbF9mb3JfcGxhY2Vob2xkZXIoc2VsZik6CisgICAgICAgIHNob3J0ZW4oIngiICogMjAsIHdpZHRoPTgsIHBsYWNlaG9sZGVyPSIoLi4uLi4uKSIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzaG9ydGVuKCJ4IiAqIDIwLCB3aWR0aD04LCBwbGFjZWhvbGRlcj0iKC4uLi4uLi4pIikKKworICAgIGRlZiB0ZXN0X2ZpcnN0X3dvcmRfdG9vX2xvbmdfYnV0X3BsYWNlaG9sZGVyX2ZpdHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiSGVsbG9vIiwgNSwgIlsuLi5dIikKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZC5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CmluZGV4IGExOTFlMTUuLmY5YTcyMWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIHRocmVhZC5zdGFja19zaXplKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhyZWFkLnN0YWNrX3NpemUoKSwgMCwgInN0YWNrX3NpemUgbm90IHJlc2V0IHRvIGRlZmF1bHQiKQogCi0gICAgICAgIGlmIG9zLm5hbWUgbm90IGluICgibnQiLCAib3MyIiwgInBvc2l4Iik6CisgICAgICAgIGlmIG9zLm5hbWUgbm90IGluICgibnQiLCAicG9zaXgiKToKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIHRzc19zdXBwb3J0ZWQgPSBUcnVlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CmluZGV4IDZjMjk2NWIuLjNkOTYxYjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CkBAIC01LDggKzUsOCBAQAogIyBjb21wbGFpbnMgc2V2ZXJhbCB0aW1lcyBhYm91dCBtb2R1bGUgcmFuZG9tIGhhdmluZyBubyBhdHRyaWJ1dGUKICMgcmFuZHJhbmdlLCBhbmQgdGhlbiBQeXRob24gaGFuZ3MuCiAKK2ltcG9ydCBfaW1wIGFzIGltcAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weQppbmRleCAwZWJlYjM5Li43YmQzMDgyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weQpAQCAtMTEsNiArMTEsNyBAQAogaW1wb3J0IHN5cwogX3RocmVhZCA9IGltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQogdGhyZWFkaW5nID0gaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKK2ltcG9ydCBfdGVzdGNhcGkKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCkBAIC0yMCw2ICsyMSwxNSBAQAogCiBmcm9tIHRlc3QgaW1wb3J0IGxvY2tfdGVzdHMKIAorCisjIEJldHdlZW4gZm9yaygpIGFuZCBleGVjKCksIG9ubHkgYXN5bmMtc2FmZSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgKGlzc3VlcworIyAjMTIzMTYgYW5kICMxMTg3MCksIGFuZCBmb3JrKCkgZnJvbSBhIHdvcmtlciB0aHJlYWQgaXMga25vd24gdG8gdHJpZ2dlcgorIyBwcm9ibGVtcyB3aXRoIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgKGlzc3VlICMzODYzKTogc2tpcCBwcm9ibGVtYXRpYyB0ZXN0cworIyBvbiBwbGF0Zm9ybXMga25vd24gdG8gYmVoYXZlIGJhZGx5LgorcGxhdGZvcm1zX3RvX3NraXAgPSAoJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ25ldGJzZDUnLAorICAgICAgICAgICAgICAgICAgICAgJ2hwLXV4MTEnKQorCisKICMgQSB0cml2aWFsIG11dGFibGUgY291bnRlci4KIGNsYXNzIENvdW50ZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC05OSw3ICsxMDksNyBAQAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoJ3dhaXRpbmcgZm9yIGFsbCB0YXNrcyB0byBjb21wbGV0ZScpCiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0LmpvaW4oTlVNVEFTS1MpCisgICAgICAgICAgICB0LmpvaW4oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0LmlzX2FsaXZlKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHQuaWRlbnQsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuaWRlbnQgaXMgTm9uZSkKQEAgLTQ2Nyw2ICs0NzcsMTI3IEBACiAgICAgICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cykKIAorICAgIGRlZiB0ZXN0X21haW5fdGhyZWFkKHNlbGYpOgorICAgICAgICBtYWluID0gdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWluLm5hbWUsICdNYWluVGhyZWFkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWluLmlkZW50LCB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWluLmlkZW50LCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodGhyZWFkaW5nLm1haW5fdGhyZWFkKCkuaWRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50KQorICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgdGguam9pbigpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAidGVzdCBuZWVkcyBvcy5mb3JrKCkiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICd3YWl0cGlkJyksICJ0ZXN0IG5lZWRzIG9zLndhaXRwaWQoKSIpCisgICAgZGVmIHRlc3RfbWFpbl90aHJlYWRfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MsIHRocmVhZGluZworCisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgIG1haW4gPSB0aHJlYWRpbmcubWFpbl90aHJlYWQoKQorICAgICAgICAgICAgICAgIHByaW50KG1haW4ubmFtZSkKKyAgICAgICAgICAgICAgICBwcmludChtYWluLmlkZW50ID09IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50KQorICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgIiIiCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorICAgICAgICBkYXRhID0gb3V0LmRlY29kZSgpLnJlcGxhY2UoJ1xyJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIk1haW5UaHJlYWRcblRydWVcblRydWVcbiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJ0ZXN0IG5lZWRzIG9zLmZvcmsoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3dhaXRwaWQnKSwgInRlc3QgbmVlZHMgb3Mud2FpdHBpZCgpIikKKyAgICBkZWYgdGVzdF9tYWluX3RocmVhZF9hZnRlcl9mb3JrX2Zyb21fbm9ubWFpbl90aHJlYWQoc2VsZik6CisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zLCB0aHJlYWRpbmcsIHN5cworCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBtYWluID0gdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5uYW1lKQorICAgICAgICAgICAgICAgICAgICBwcmludChtYWluLmlkZW50ID09IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50KQorICAgICAgICAgICAgICAgICAgICBwcmludChtYWluLmlkZW50ID09IHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgIyBzdGRvdXQgaXMgZnVsbHkgYnVmZmVyZWQgYmVjYXVzZSBub3QgYSB0dHksCisgICAgICAgICAgICAgICAgICAgICMgd2UgaGF2ZSB0byBmbHVzaCBiZWZvcmUgZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChwaWQsIDApCisKKyAgICAgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgICAgIHRoLmpvaW4oKQorICAgICAgICAiIiIKKyAgICAgICAgXywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgIGRhdGEgPSBvdXQuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiVGhyZWFkLTFcblRydWVcblRydWVcbiIpCisKKyAgICBkZWYgdGVzdF90c3RhdGVfbG9jayhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBUaHJlYWQgb2JqZWN0cy4KKyAgICAgICAgc3RhcnRlZCA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIGZpbmlzaCA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHN0YXJ0ZWQucmVsZWFzZSgpCisgICAgICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICMgVGhlIHRzdGF0ZSBsb2NrIGlzIE5vbmUgdW50aWwgdGhlIHRocmVhZCBpcyBzdGFydGVkCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX3RzdGF0ZV9sb2NrLCBOb25lKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuaXNfYWxpdmUoKSkKKyAgICAgICAgIyBUaGUgdHN0YXRlIGxvY2sgY2FuJ3QgYmUgYWNxdWlyZWQgd2hlbiB0aGUgdGhyZWFkIGlzIHJ1bm5pbmcKKyAgICAgICAgIyAob3Igc3VzcGVuZGVkKS4KKyAgICAgICAgdHN0YXRlX2xvY2sgPSB0Ll90c3RhdGVfbG9jaworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRzdGF0ZV9sb2NrLmFjcXVpcmUodGltZW91dD0wKSwgRmFsc2UpCisgICAgICAgIGZpbmlzaC5yZWxlYXNlKCkKKyAgICAgICAgIyBXaGVuIHRoZSB0aHJlYWQgZW5kcywgdGhlIHN0YXRlX2xvY2sgY2FuIGJlIHN1Y2Nlc3NmdWxseQorICAgICAgICAjIGFjcXVpcmVkLgorICAgICAgICBzZWxmLmFzc2VydFRydWUodHN0YXRlX2xvY2suYWNxdWlyZSh0aW1lb3V0PTUpLCBGYWxzZSkKKyAgICAgICAgIyBCdXQgaXNfYWxpdmUoKSBpcyBzdGlsbCBUcnVlOiAgd2UgaG9sZCBfdHN0YXRlX2xvY2sgbm93LCB3aGljaAorICAgICAgICAjIHByZXZlbnRzIGlzX2FsaXZlKCkgZnJvbSBrbm93aW5nIHRoZSB0aHJlYWQncyBlbmQtb2YtbGlmZSBDIGNvZGUKKyAgICAgICAgIyBpcyBkb25lLgorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5pc19hbGl2ZSgpKQorICAgICAgICAjIExldCBpc19hbGl2ZSgpIGZpbmQgb3V0IHRoZSBDIGNvZGUgaXMgZG9uZS4KKyAgICAgICAgdHN0YXRlX2xvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5pc19hbGl2ZSgpKQorICAgICAgICAjIEFuZCB2ZXJpZnkgdGhlIHRocmVhZCBkaXNwb3NlZCBvZiBfdHN0YXRlX2xvY2suCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Ll90c3RhdGVfbG9jayBpcyBOb25lKQorCisgICAgZGVmIHRlc3RfcmVwcl9zdG9wcGVkKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0ICJzdG9wcGVkIiBzaG93cyB1cCBpbiByZXByKFRocmVhZCkgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgc3RhcnRlZCA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIGZpbmlzaCA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHN0YXJ0ZWQucmVsZWFzZSgpCisgICAgICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigic3RhcnRlZCIsIHJlcHIodCkpCisgICAgICAgIGZpbmlzaC5yZWxlYXNlKCkKKyAgICAgICAgIyAic3RvcHBlZCIgc2hvdWxkIGFwcGVhciBpbiB0aGUgcmVwciBpbiBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuCisgICAgICAgICMgSW1wbGVtZW50YXRpb24gZGV0YWlsOiAgYXMgb2YgdGhpcyB3cml0aW5nLCB0aGF0J3MgdHJpdmlhbGx5IHRydWUKKyAgICAgICAgIyBpZiAuam9pbigpIGlzIGNhbGxlZCwgYW5kIGFsbW9zdCB0cml2aWFsbHkgdHJ1ZSBpZiAuaXNfYWxpdmUoKSBpcworICAgICAgICAjIGNhbGxlZC4gIFRoZSBkZXRhaWwgd2UncmUgdGVzdGluZyBoZXJlIGlzIHRoYXQgInN0b3BwZWQiIHNob3dzIHVwCisgICAgICAgICMgImFsbCBvbiBpdHMgb3duIi4KKyAgICAgICAgTE9PS0lOR19GT1IgPSAic3RvcHBlZCIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNTAwKToKKyAgICAgICAgICAgIGlmIExPT0tJTkdfRk9SIGluIHJlcHIodCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihMT09LSU5HX0ZPUiwgcmVwcih0KSkgIyB3ZSB3YWl0ZWQgYXQgbGVhc3QgNSBzZWNvbmRzCiAKICAgICBkZWYgdGVzdF9Cb3VuZGVkU2VtYXBob3JlX2xpbWl0KHNlbGYpOgogICAgICAgICAjIEJvdW5kZWRTZW1hcGhvcmUgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IgaWYgcmVsZWFzZWQgdG9vIG9mdGVuLgpAQCAtNDg4LDEzICs2MTksNiBAQAogCiBjbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bihCYXNlVGVzdENhc2UpOgogCi0gICAgIyBCZXR3ZWVuIGZvcmsoKSBhbmQgZXhlYygpLCBvbmx5IGFzeW5jLXNhZmUgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIChpc3N1ZXMKLSAgICAjICMxMjMxNiBhbmQgIzExODcwKSwgYW5kIGZvcmsoKSBmcm9tIGEgd29ya2VyIHRocmVhZCBpcyBrbm93biB0byB0cmlnZ2VyCi0gICAgIyBwcm9ibGVtcyB3aXRoIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgKGlzc3VlICMzODYzKTogc2tpcCBwcm9ibGVtYXRpYyB0ZXN0cwotICAgICMgb24gcGxhdGZvcm1zIGtub3duIHRvIGJlaGF2ZSBiYWRseS4KLSAgICBwbGF0Zm9ybXNfdG9fc2tpcCA9ICgnZnJlZWJzZDQnLCAnZnJlZWJzZDUnLCAnZnJlZWJzZDYnLCAnbmV0YnNkNScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ29zMmVteCcsICdocC11eDExJykKLQogICAgIGRlZiBfcnVuX2FuZF9qb2luKHNlbGYsIHNjcmlwdCk6CiAgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CiAgICAgICAgICAgICBpbXBvcnQgc3lzLCBvcywgdGltZSwgdGhyZWFkaW5nCkBAIC01NjYsMTQ0ICs2OTAsOCBAQAogICAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3J1bl9hbmRfam9pbihzY3JpcHQpCiAKLSAgICBkZWYgYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNlbGYsIHNjcmlwdCwgZXhwZWN0ZWRfb3V0cHV0KToKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBzY3JpcHQpCi0gICAgICAgIGRhdGEgPSBvdXQuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9vdXRwdXQpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQotICAgIGRlZiB0ZXN0XzRfam9pbmluZ19hY3Jvc3NfZm9ya19pbl93b3JrZXJfdGhyZWFkKHNlbGYpOgotICAgICAgICAjIFRoZXJlIHVzZWQgdG8gYmUgYSBwb3NzaWJsZSBkZWFkbG9jayB3aGVuIGZvcmtpbmcgZnJvbSBhIGNoaWxkCi0gICAgICAgICMgdGhyZWFkLiAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2NjQzLgotCi0gICAgICAgICMgVGhlIHNjcmlwdCB0YWtlcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICAgICAgICAjIC0gVGhlIG1haW4gdGhyZWFkIGluIHRoZSBwYXJlbnQgcHJvY2VzcyBzdGFydHMgYSBuZXcgdGhyZWFkIGFuZCB0aGVuCi0gICAgICAgICMgICB0cmllcyB0byBqb2luIGl0LgotICAgICAgICAjIC0gVGhlIGpvaW4gb3BlcmF0aW9uIGFjcXVpcmVzIHRoZSBMb2NrIGluc2lkZSB0aGUgdGhyZWFkJ3MgX2Jsb2NrCi0gICAgICAgICMgICBDb25kaXRpb24uICAoU2VlIHRocmVhZGluZy5weTpUaHJlYWQuam9pbigpLikKLSAgICAgICAgIyAtIFdlIHN0dWIgb3V0IHRoZSBhY3F1aXJlIG1ldGhvZCBvbiB0aGUgY29uZGl0aW9uIHRvIGZvcmNlIGl0IHRvIHdhaXQKLSAgICAgICAgIyAgIHVudGlsIHRoZSBjaGlsZCB0aHJlYWQgZm9ya3MuICAoU2VlIExPQ0sgQUNRVUlSRUQgSEVSRSkKLSAgICAgICAgIyAtIFRoZSBjaGlsZCB0aHJlYWQgZm9ya3MuICAoU2VlIExPQ0sgSEVMRCBhbmQgV09SS0VSIFRIUkVBRCBGT1JLUwotICAgICAgICAjICAgSEVSRSkKLSAgICAgICAgIyAtIFRoZSBtYWluIHRocmVhZCBvZiB0aGUgcGFyZW50IHByb2Nlc3MgZW50ZXJzIENvbmRpdGlvbi53YWl0KCksCi0gICAgICAgICMgICB3aGljaCByZWxlYXNlcyB0aGUgbG9jayBvbiB0aGUgY2hpbGQgdGhyZWFkLgotICAgICAgICAjIC0gVGhlIGNoaWxkIHByb2Nlc3MgcmV0dXJucy4gIFdpdGhvdXQgdGhlIG5lY2Vzc2FyeSBmaXgsIHdoZW4gdGhlCi0gICAgICAgICMgICBtYWluIHRocmVhZCBvZiB0aGUgY2hpbGQgcHJvY2VzcyAod2hpY2ggdXNlZCB0byBiZSB0aGUgY2hpbGQgdGhyZWFkCi0gICAgICAgICMgICBpbiB0aGUgcGFyZW50IHByb2Nlc3MpIGF0dGVtcHRzIHRvIGV4aXQsIGl0IHdpbGwgdHJ5IHRvIGFjcXVpcmUgdGhlCi0gICAgICAgICMgICBsb2NrIGluIHRoZSBUaHJlYWQuX2Jsb2NrIENvbmRpdGlvbiBvYmplY3QgYW5kIGhhbmcsIGJlY2F1c2UgdGhlCi0gICAgICAgICMgICBsb2NrIHdhcyBoZWxkIGFjcm9zcyB0aGUgZm9yay4KLQotICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgotICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lLCB0aHJlYWRpbmcKLQotICAgICAgICAgICAgZmluaXNoX2pvaW4gPSBGYWxzZQotICAgICAgICAgICAgc3RhcnRfZm9yayA9IEZhbHNlCi0KLSAgICAgICAgICAgIGRlZiB3b3JrZXIoKToKLSAgICAgICAgICAgICAgICAjIFdhaXQgdW50aWwgdGhpcyB0aHJlYWQncyBsb2NrIGlzIGFjcXVpcmVkIGJlZm9yZSBmb3JraW5nIHRvCi0gICAgICAgICAgICAgICAgIyBjcmVhdGUgdGhlIGRlYWRsb2NrLgotICAgICAgICAgICAgICAgIGdsb2JhbCBmaW5pc2hfam9pbgotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydF9mb3JrOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICAgICAgIyBMT0NLIEhFTEQ6IE1haW4gdGhyZWFkIGhvbGRzIGxvY2sgYWNyb3NzIHRoaXMgY2FsbC4KLSAgICAgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQotICAgICAgICAgICAgICAgIGZpbmlzaF9qb2luID0gVHJ1ZQotICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgUGFyZW50IHByb2Nlc3MganVzdCB3YWl0cyBmb3IgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgIG9zLndhaXRwaWQoY2hpbGRwaWQsIDApCi0gICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIHNob3VsZCBqdXN0IHJldHVybi4KLQotICAgICAgICAgICAgdyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdvcmtlcikKLQotICAgICAgICAgICAgIyBTdHViIG91dCB0aGUgcHJpdmF0ZSBjb25kaXRpb24gdmFyaWFibGUncyBsb2NrIGFjcXVpcmUgbWV0aG9kLgotICAgICAgICAgICAgIyBUaGlzIGFjcXVpcmVzIHRoZSBsb2NrIGFuZCB0aGVuIHdhaXRzIHVudGlsIHRoZSBjaGlsZCBoYXMgZm9ya2VkCi0gICAgICAgICAgICAjIGJlZm9yZSByZXR1cm5pbmcsIHdoaWNoIHdpbGwgcmVsZWFzZSB0aGUgbG9jayBzb29uIGFmdGVyLiAgSWYKLSAgICAgICAgICAgICMgc29tZW9uZSBlbHNlIHRyaWVzIHRvIGZpeCB0aGlzIHRlc3QgY2FzZSBieSBhY3F1aXJpbmcgdGhpcyBsb2NrCi0gICAgICAgICAgICAjIGJlZm9yZSBmb3JraW5nIGluc3RlYWQgb2YgcmVzZXR0aW5nIGl0LCB0aGUgdGVzdCBjYXNlIHdpbGwKLSAgICAgICAgICAgICMgZGVhZGxvY2sgd2hlbiBpdCBzaG91bGRuJ3QuCi0gICAgICAgICAgICBjb25kaXRpb24gPSB3Ll9ibG9jawotICAgICAgICAgICAgb3JpZ19hY3F1aXJlID0gY29uZGl0aW9uLmFjcXVpcmUKLSAgICAgICAgICAgIGNhbGxfY291bnRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgICAgIGNhbGxfY291bnQgPSAwCi0gICAgICAgICAgICBkZWYgbXlfYWNxdWlyZSgpOgotICAgICAgICAgICAgICAgIGdsb2JhbCBjYWxsX2NvdW50Ci0gICAgICAgICAgICAgICAgZ2xvYmFsIHN0YXJ0X2ZvcmsKLSAgICAgICAgICAgICAgICBvcmlnX2FjcXVpcmUoKSAgIyBMT0NLIEFDUVVJUkVEIEhFUkUKLSAgICAgICAgICAgICAgICBzdGFydF9mb3JrID0gVHJ1ZQotICAgICAgICAgICAgICAgIGlmIGNhbGxfY291bnQgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgbm90IGZpbmlzaF9qb2luOgotICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAgIyBXT1JLRVIgVEhSRUFEIEZPUktTIEhFUkUKLSAgICAgICAgICAgICAgICB3aXRoIGNhbGxfY291bnRfbG9jazoKLSAgICAgICAgICAgICAgICAgICAgY2FsbF9jb3VudCArPSAxCi0gICAgICAgICAgICBjb25kaXRpb24uYWNxdWlyZSA9IG15X2FjcXVpcmUKLQotICAgICAgICAgICAgdy5zdGFydCgpCi0gICAgICAgICAgICB3LmpvaW4oKQotICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiBtYWluJykKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydFNjcmlwdEhhc091dHB1dChzY3JpcHQsICJlbmQgb2YgbWFpblxuIikKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCi0gICAgZGVmIHRlc3RfNV9jbGVhcl93YWl0ZXJfbG9ja3NfdG9fYXZvaWRfY3Jhc2goc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBhIHNwYXduZWQgdGhyZWFkIHRoYXQgZm9ya3MgZG9lc24ndCBzZWdmYXVsdCBvbiBjZXJ0YWluCi0gICAgICAgICMgcGxhdGZvcm1zLCBuYW1lbHkgT1MgWC4gIFRoaXMgdXNlZCB0byBoYXBwZW4gaWYgdGhlcmUgd2FzIGEgd2FpdGVyCi0gICAgICAgICMgbG9jayBpbiB0aGUgdGhyZWFkJ3MgY29uZGl0aW9uIHZhcmlhYmxlJ3Mgd2FpdGVycyBsaXN0LiAgRXZlbiB0aG91Z2gKLSAgICAgICAgIyB3ZSBrbm93IHRoZSBsb2NrIHdpbGwgYmUgaGVsZCBhY3Jvc3MgdGhlIGZvcmssIGl0IGlzIG5vdCBzYWZlIHRvCi0gICAgICAgICMgcmVsZWFzZSBsb2NrcyBoZWxkIGFjcm9zcyBmb3JrcyBvbiBhbGwgcGxhdGZvcm1zLCBzbyByZWxlYXNpbmcgdGhlCi0gICAgICAgICMgd2FpdGVyIGxvY2sgY2F1c2VkIGEgc2VnZmF1bHQgb24gT1MgWC4gIEZ1cnRoZXJtb3JlLCBzaW5jZSBsb2NrcyBvbgotICAgICAgICAjIE9TIFggYXJlIChhcyBvZiB0aGlzIHdyaXRpbmcpIGltcGxlbWVudGVkIHdpdGggYSBtdXRleCArIGNvbmRpdGlvbgotICAgICAgICAjIHZhcmlhYmxlIGluc3RlYWQgb2YgYSBzZW1hcGhvcmUsIHdoaWxlIHdlIGtub3cgdGhhdCB0aGUgUHl0aG9uLWxldmVsCi0gICAgICAgICMgbG9jayB3aWxsIGJlIGFjcXVpcmVkLCB3ZSBjYW4ndCBrbm93IGlmIHRoZSBpbnRlcm5hbCBtdXRleCB3aWxsIGJlCi0gICAgICAgICMgYWNxdWlyZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZvcmsuCi0KLSAgICAgICAgc2NyaXB0ID0gIiIiaWYgVHJ1ZToKLSAgICAgICAgICAgIGltcG9ydCBvcywgdGltZSwgdGhyZWFkaW5nCi0KLSAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBGYWxzZQotCi0gICAgICAgICAgICBkZWYgd29ya2VyKCk6Ci0gICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoZSBtYWluIHRocmVhZCBoYXMgYXR0ZW1wdGVkIHRvIGpvaW4gdGhpcyB0aHJlYWQKLSAgICAgICAgICAgICAgICAjIGJlZm9yZSBjb250aW51aW5nLgotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydF9mb3JrOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKLSAgICAgICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgotICAgICAgICAgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzIGp1c3Qgd2FpdHMgZm9yIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICAoY3BpZCwgcmMpID0gb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNwaWQgPT0gY2hpbGRwaWQKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJjID09IDAKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiB3b3JrZXIgdGhyZWFkJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCi0KLSAgICAgICAgICAgICMgU3R1YiBvdXQgdGhlIHByaXZhdGUgY29uZGl0aW9uIHZhcmlhYmxlJ3MgX3JlbGVhc2Vfc2F2ZSBtZXRob2QuCi0gICAgICAgICAgICAjIFRoaXMgcmVsZWFzZXMgdGhlIGNvbmRpdGlvbidzIGxvY2sgYW5kIGZsaXBzIHRoZSBnbG9iYWwgdGhhdAotICAgICAgICAgICAgIyBjYXVzZXMgdGhlIHdvcmtlciB0byBmb3JrLiAgQXQgdGhpcyBwb2ludCwgdGhlIHByb2JsZW1hdGljIHdhaXRlcgotICAgICAgICAgICAgIyBsb2NrIGhhcyBiZWVuIGFjcXVpcmVkIG9uY2UgYnkgdGhlIHdhaXRlciBhbmQgaGFzIGJlZW4gcHV0IG9udG8KLSAgICAgICAgICAgICMgdGhlIHdhaXRlcnMgbGlzdC4KLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IHcuX2Jsb2NrCi0gICAgICAgICAgICBvcmlnX3JlbGVhc2Vfc2F2ZSA9IGNvbmRpdGlvbi5fcmVsZWFzZV9zYXZlCi0gICAgICAgICAgICBkZWYgbXlfcmVsZWFzZV9zYXZlKCk6Ci0gICAgICAgICAgICAgICAgZ2xvYmFsIHN0YXJ0X2ZvcmsKLSAgICAgICAgICAgICAgICBvcmlnX3JlbGVhc2Vfc2F2ZSgpCi0gICAgICAgICAgICAgICAgIyBXYWl0ZXIgbG9jayBoZWxkIGhlcmUsIGNvbmRpdGlvbiBsb2NrIHJlbGVhc2VkLgotICAgICAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBUcnVlCi0gICAgICAgICAgICBjb25kaXRpb24uX3JlbGVhc2Vfc2F2ZSA9IG15X3JlbGVhc2Vfc2F2ZQotCi0gICAgICAgICAgICB3LnN0YXJ0KCkKLSAgICAgICAgICAgIHcuam9pbigpCi0gICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4gdGhyZWFkJykKLSAgICAgICAgICAgICIiIgotICAgICAgICBvdXRwdXQgPSAiZW5kIG9mIHdvcmtlciB0aHJlYWRcbmVuZCBvZiBtYWluIHRocmVhZFxuIgotICAgICAgICBzZWxmLmFzc2VydFNjcmlwdEhhc091dHB1dChzY3JpcHQsIG91dHB1dCkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCi0gICAgZGVmIHRlc3RfNl9kYWVtb25fdGhyZWFkcyhzZWxmKToKKyAgICBkZWYgdGVzdF80X2RhZW1vbl90aHJlYWRzKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgYSBkYWVtb24gdGhyZWFkIGNhbm5vdCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIgb24gc2h1dGRvd24KICAgICAgICAgIyBieSBtYW5pcHVsYXRpbmcgaW50ZXJuYWwgc3RydWN0dXJlcyB0aGF0IGFyZSBiZWluZyBkaXNwb3NlZCBvZiBpbgogICAgICAgICAjIHRoZSBtYWluIHRocmVhZC4KQEAgLTc2OSw2ICs3NTcsMTExIEBACiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgICAgICB0LmpvaW4oKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgZGVmIHRlc3RfY2xlYXJfdGhyZWFkc19zdGF0ZXNfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcwOTQ6IGNoZWNrIHRoYXQgdGhyZWFkcyBzdGF0ZXMgYXJlIGNsZWFyZWQgYWZ0ZXIgZm9yaygpCisKKyAgICAgICAgIyBzdGFydCBhIGJ1bmNoIG9mIHRocmVhZHMKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDE2KToKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGEgOiB0aW1lLnNsZWVwKDAuMykpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRocmVhZHMgc3RhdGVzIGhhdmUgYmVlbiBjbGVhcmVkCisgICAgICAgICAgICBpZiBsZW4oc3lzLl9jdXJyZW50X2ZyYW1lcygpKSA9PSAxOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisKK2NsYXNzIFN1YmludGVycFRocmVhZGluZ1Rlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90aHJlYWRzX2pvaW4oc2VsZik6CisgICAgICAgICMgTm9uLWRhZW1vbiB0aHJlYWRzIHNob3VsZCBiZSBqb2luZWQgYXQgc3ViaW50ZXJwcmV0ZXIgc2h1dGRvd24KKyAgICAgICAgIyAoaXNzdWUgIzE4ODA4KQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgIyBTbGVlcCBhIGJpdCBzbyB0aGF0IHRoZSB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyB3aGVuCisgICAgICAgICAgICAgICAgIyBQeV9FbmRJbnRlcnByZXRlciBpcyBjYWxsZWQuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICAgICAgICAgIG9zLndyaXRlKCVkLCBiIngiKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Zikuc3RhcnQoKQorICAgICAgICAgICAgIiIiICUgKHcsKQorICAgICAgICByZXQgPSBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgIyBUaGUgdGhyZWFkIHdhcyBqb2luZWQgcHJvcGVybHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChyLCAxKSwgYiJ4IikKKworICAgIGRlZiB0ZXN0X3RocmVhZHNfam9pbl8yKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIGRlbGF5IGdldHMgaW50cm9kdWNlZCBhZnRlciB0aGUgdGhyZWFkJ3MKKyAgICAgICAgIyBQeXRob24gY29kZSByZXR1cm5lZCBidXQgYmVmb3JlIHRoZSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZC4KKyAgICAgICAgIyBUbyBhY2hpZXZlIHRoaXMsIHdlIHJlZ2lzdGVyIGEgdGhyZWFkLWxvY2FsIG9iamVjdCB3aGljaCBzbGVlcHMKKyAgICAgICAgIyBhIGJpdCB3aGVuIGRlYWxsb2NhdGVkLgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGNsYXNzIFNsZWVwZXI6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKKworICAgICAgICAgICAgdGxzID0gdGhyZWFkaW5nLmxvY2FsKCkKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIFNsZWVwIGEgYml0IHNvIHRoYXQgdGhlIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgICAgICAgICAgICAgdGxzLnggPSBTbGVlcGVyKCkKKyAgICAgICAgICAgICAgICBvcy53cml0ZSglZCwgYiJ4IikKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIiAlICh3LCkKKyAgICAgICAgcmV0ID0gX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgICMgVGhlIHRocmVhZCB3YXMgam9pbmVkIHByb3Blcmx5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQociwgMSksIGIieCIpCisKKyAgICBkZWYgdGVzdF9kYWVtb25fdGhyZWFkc19mYXRhbF9lcnJvcihzZWxmKToKKyAgICAgICAgc3ViaW50ZXJwX2NvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgICAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGFlbW9uIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZiwgZGFlbW9uPVRydWUpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKworICAgICAgICAgICAgX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoJXIpCisgICAgICAgICAgICAiIiIgJSAoc3ViaW50ZXJwX2NvZGUsKQorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoIi1jIiwgc2NyaXB0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJGYXRhbCBQeXRob24gZXJyb3I6IFB5X0VuZEludGVycHJldGVyOiAiCisgICAgICAgICAgICAgICAgICAgICAgIm5vdCB0aGUgbGFzdCB0aHJlYWQiLCBlcnIuZGVjb2RlKCkpCisKIAogY2xhc3MgVGhyZWFkaW5nRXhjZXB0aW9uVGVzdHMoQmFzZVRlc3RDYXNlKToKICAgICAjIEEgUnVudGltZUVycm9yIHNob3VsZCBiZSByYWlzZWQgaWYgVGhyZWFkLnN0YXJ0KCkgaXMgY2FsbGVkCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKaW5kZXggZjk3NWE3NS4uYjEwMDRlNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQpAQCAtOCw3ICs4LDcgQEAKIHRocmVhZCA9IGltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQogaW1wb3J0IHRpbWUKIAotaWYgc3lzLnBsYXRmb3JtWzozXSBpbiAoJ3dpbicsICdvczInKSBvciBzeXMucGxhdGZvcm09PSdyaXNjb3MnOgoraWYgKHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicpOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW4ndCB0ZXN0IHNpZ25hbCBvbiAlcyIgJSBzeXMucGxhdGZvcm0pCiAKIHByb2Nlc3NfcGlkID0gb3MuZ2V0cGlkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQppbmRleCBkY2YyMDFiLi43MDNjNDNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgICAgIHNvY2suY29ubmVjdCgod2hpdGVob2xlKSkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FQ09OTlJFRlVTRUQ6CiAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CmluZGV4IDViY2UyYWYuLjk2ZWY5NTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CkBAIC0xNTAsMzAgKzE1MCw3NCBAQAogCiBjbGFzcyBUcmFjZWJhY2tGb3JtYXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0KHNlbGYpOgorICAgIGRlZiBzb21lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2JsYWgnKQorCisgICAgZGVmIGNoZWNrX3RyYWNlYmFja19mb3JtYXQoc2VsZiwgY2xlYW51cF9mdW5jPU5vbmUpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcignYmxhaCcpCisgICAgICAgICAgICBzZWxmLnNvbWVfZXhjZXB0aW9uKCkKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgdHlwZV8sIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBjbGVhbnVwX2Z1bmMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBDbGVhciB0aGUgaW5uZXIgZnJhbWVzLCBub3QgdGhpcyBvbmUKKyAgICAgICAgICAgICAgICBjbGVhbnVwX2Z1bmModGIudGJfbmV4dCkKICAgICAgICAgICAgIHRyYWNlYmFja19mbXQgPSAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJyArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfdGIodGIpKQogICAgICAgICAgICAgZmlsZV8gPSBTdHJpbmdJTygpCiAgICAgICAgICAgICB0cmFjZWJhY2tfcHJpbnQodGIsIGZpbGVfKQogICAgICAgICAgICAgcHl0aG9uX2ZtdCAgPSBmaWxlXy5nZXR2YWx1ZSgpCisgICAgICAgICAgICAjIENhbGwgYWxsIF90YiBhbmQgX2V4YyBmdW5jdGlvbnMKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyB0YnN0ZGVycjoKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfdGIodGIpCisgICAgICAgICAgICB0YmZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfdGIodGIsIGZpbGU9dGJmaWxlKQorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIGV4Y3N0ZGVycjoKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgIGV4Y2ZtdCA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgICAgIGV4Y2ZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9ZXhjZmlsZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJ1bmFibGUgdG8gY3JlYXRlIHRlc3QgdHJhY2ViYWNrIHN0cmluZyIpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBQeXRob24gYW5kIHRoZSB0cmFjZWJhY2sgbW9kdWxlIGZvcm1hdCB0aGUgc2FtZSB0aGluZwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFja19mbXQsIHB5dGhvbl9mbXQpCisgICAgICAgICMgTm93IHZlcmlmeSB0aGUgX3RiIGZ1bmMgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGJzdGRlcnIuZ2V0dmFsdWUoKSwgdGJmaWxlLmdldHZhbHVlKCkpCisgICAgICAgICMgTm93IHZlcmlmeSB0aGUgX2V4YyBmdW5jIG91dHB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y3N0ZGVyci5nZXR2YWx1ZSgpLCBleGNmaWxlLmdldHZhbHVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjZm10LCBleGNmaWxlLmdldHZhbHVlKCkpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgdHJhY2ViYWNrIGlzIHByb3Blcmx5IGluZGVudGVkLgogICAgICAgICB0Yl9saW5lcyA9IHB5dGhvbl9mbXQuc3BsaXRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgMykKLSAgICAgICAgYmFubmVyLCBsb2NhdGlvbiwgc291cmNlX2xpbmUgPSB0Yl9saW5lcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0Yl9saW5lcyksIDUpCisgICAgICAgIGJhbm5lciA9IHRiX2xpbmVzWzBdCisgICAgICAgIGxvY2F0aW9uLCBzb3VyY2VfbGluZSA9IHRiX2xpbmVzWy0yOl0KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhbm5lci5zdGFydHN3aXRoKCdUcmFjZWJhY2snKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2F0aW9uLnN0YXJ0c3dpdGgoJyAgRmlsZScpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc291cmNlX2xpbmUuc3RhcnRzd2l0aCgnICAgIHJhaXNlJykpCiAKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3RyYWNlYmFja19mb3JtYXQoKQorCisgICAgZGVmIHRlc3RfdHJhY2ViYWNrX2Zvcm1hdF93aXRoX2NsZWFyZWRfZnJhbWVzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgdHJhY2ViYWNrIGZvcm1hdHRpbmcgYWxzbyB3b3JrcyB3aXRoIGEgY2xlYXIoKWVkIGZyYW1lCisgICAgICAgIGRlZiBjbGVhbnVwX3RiKHRiKToKKyAgICAgICAgICAgIHRiLnRiX2ZyYW1lLmNsZWFyKCkKKyAgICAgICAgc2VsZi5jaGVja190cmFjZWJhY2tfZm9ybWF0KGNsZWFudXBfdGIpCisKKyAgICBkZWYgdGVzdF9zdGFja19mb3JtYXQoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IF9zdGFjayBmdW5jdGlvbnMuIE5vdGUgd2UgaGF2ZSB0byB1c2UgX2dldGZyYW1lKDEpIHRvCisgICAgICAgICMgY29tcGFyZSB0aGVtIHdpdGhvdXQgdGhpcyBmcmFtZSBhcHBlYXJpbmcgaW4gdGhlIG91dHB1dAorICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgc3RzdGRlcnI6CisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKyAgICAgICAgc3RmaWxlID0gU3RyaW5nSU8oKQorICAgICAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSwgZmlsZT1zdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RzdGRlcnIuZ2V0dmFsdWUoKSwgc3RmaWxlLmdldHZhbHVlKCkpCisKKyAgICAgICAgc3RmbXQgPSB0cmFjZWJhY2suZm9ybWF0X3N0YWNrKHN5cy5fZ2V0ZnJhbWUoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHN0ZGVyci5nZXR2YWx1ZSgpLCAiIi5qb2luKHN0Zm10KSkKKwogCiBjYXVzZV9tZXNzYWdlID0gKAogICAgICJcblRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2UgIgpAQCAtMzQ0LDYgKzM4OCwzNiBAQAogICAgICAgICByZXR1cm4gcy5nZXR2YWx1ZSgpCiAKIAorY2xhc3MgTWlzY1RyYWNlYmFja0Nhc2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjCisgICAgIyBDaGVjayBub24tcHJpbnRpbmcgZnVuY3Rpb25zIGluIHRyYWNlYmFjayBtb2R1bGUKKyAgICAjCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBtaWRkbGUoKQorICAgICAgICBkZWYgbWlkZGxlKCk6CisgICAgICAgICAgICBpbm5lcigpCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgaSA9IDEKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dGVyKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHlwZV8sIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCisKKyAgICAgICAgIyBJbml0aWFsIGFzc2VydGlvbjogdGhlcmUncyBvbmUgbG9jYWwgaW4gdGhlIGlubmVyIGZyYW1lLgorICAgICAgICBpbm5lcl9mcmFtZSA9IHRiLnRiX25leHQudGJfbmV4dC50Yl9uZXh0LnRiX2ZyYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGlubmVyX2ZyYW1lLmZfbG9jYWxzKSwgMSkKKworICAgICAgICAjIENsZWFyIHRyYWNlYmFjayBmcmFtZXMKKyAgICAgICAgdHJhY2ViYWNrLmNsZWFyX2ZyYW1lcyh0YikKKworICAgICAgICAjIExvY2FsIHZhcmlhYmxlIGRpY3Qgc2hvdWxkIG5vdyBiZSBlbXB0eS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaW5uZXJfZnJhbWUuZl9sb2NhbHMpLCAwKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkgYi9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CmluZGV4IDNlZTRjNmIuLmVjMTA3NTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQpAQCAtMiw2ICsyLDcgQEAKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcnVuX3dpdGhfbG9jYWxlCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwpAQCAtMTA3Nyw5ICsxMDc4LDE5IEBACiAgICAgICAgIG5zMiA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCiAgICAgICAgIG5zMi54ID0gInNwYW0iCiAgICAgICAgIG5zMi5feSA9IDUKKyAgICAgICAgbmFtZSA9ICJuYW1lc3BhY2UiCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksICJuYW1lc3BhY2Uodz0zLCB4PTEsIHk9MikiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgIm5hbWVzcGFjZShfeT01LCB4PSdzcGFtJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwgIntuYW1lfSh3PTMsIHg9MSwgeT0yKSIuZm9ybWF0KG5hbWU9bmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLCAie25hbWV9KF95PTUsIHg9J3NwYW0nKSIuZm9ybWF0KG5hbWU9bmFtZSkpCisKKyAgICBkZWYgdGVzdF9lcXVhbChzZWxmKToKKyAgICAgICAgbnMxID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKHg9MSkKKyAgICAgICAgbnMyID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkKKyAgICAgICAgbnMyLnggPSAxCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKSwgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMxLCBuczIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobnMyLCB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKSkKIAogICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKICAgICAgICAgbnMxID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKGE9MSwgYj0yKQpAQCAtMTExNywxMSArMTEyOCwxMiBAQAogICAgICAgICBuczEuc3BhbSA9IG5zMQogICAgICAgICBuczIuc3BhbSA9IG5zMwogICAgICAgICBuczMuc3BhbSA9IG5zMgorICAgICAgICBuYW1lID0gIm5hbWVzcGFjZSIKKyAgICAgICAgcmVwcjEgPSAie25hbWV9KGM9J2Nvb2tpZScsIHNwYW09e25hbWV9KC4uLikpIi5mb3JtYXQobmFtZT1uYW1lKQorICAgICAgICByZXByMiA9ICJ7bmFtZX0oc3BhbT17bmFtZX0oc3BhbT17bmFtZX0oLi4uKSwgeD0xKSkiLmZvcm1hdChuYW1lPW5hbWUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVzcGFjZShjPSdjb29raWUnLCBzcGFtPW5hbWVzcGFjZSguLi4pKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lc3BhY2Uoc3BhbT1uYW1lc3BhY2Uoc3BhbT1uYW1lc3BhY2UoLi4uKSwgeD0xKSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwgcmVwcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLCByZXByMikKIAogICAgIGRlZiB0ZXN0X2FzX2RpY3Qoc2VsZik6CiAgICAgICAgIG5zID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKHNwYW09J3NwYW1zcGFtc3BhbScpCkBAIC0xMTQ0LDYgKzExNTYsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHNwYW0pLCBTcGFtKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMoc3BhbSksIHsnaGFtJzogOCwgJ2VnZ3MnOiA5fSkKIAorICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgbnMgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoYnJlYWtmYXN0PSJzcGFtIiwgbHVuY2g9InNwYW0iKQorCisgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcG5hbWUgPSAicHJvdG9jb2wge30iLmZvcm1hdChwcm90b2NvbCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuc19waWNrbGVkID0gcGlja2xlLmR1bXBzKG5zLCBwcm90b2NvbCkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IocG5hbWUpIGZyb20gZQorICAgICAgICAgICAgbnNfcm91bmR0cmlwID0gcGlja2xlLmxvYWRzKG5zX3BpY2tsZWQpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIG5zX3JvdW5kdHJpcCwgcG5hbWUpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChUeXBlc1Rlc3RzLCBNYXBwaW5nUHJveHlUZXN0cywgQ2xhc3NDcmVhdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91Y24ucHkgYi9MaWIvdGVzdC90ZXN0X3Vjbi5weQppbmRleCAyZTYzNzQ1Li41OWJkZTc0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Vjbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Vjbi5weQpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RkYXRhID0gc3VwcG9ydC5vcGVuX3VybHJlc291cmNlKHVybCwgZW5jb2Rpbmc9InV0Zi04IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPWNoZWNrX3ZlcnNpb24pCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIHVybCkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3RkYXRhLmNsb3NlKQogICAgICAgICBmb3IgbGluZSBpbiB0ZXN0ZGF0YToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQppbmRleCA5ZGMzNDM4Li5jOGZhN2YzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC03LDYgKzcsNyBAQAogIiIiIyIKIGltcG9ydCBfc3RyaW5nCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTMxLDYgKzMyLDE2IEBACiAgICAgICAgIHJldHVybiBOb25lCiBjb2RlY3MucmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKQogCitkZWYgZHVwbGljYXRlX3N0cmluZyh0ZXh0KToKKyAgICAiIiIKKyAgICBUcnkgdG8gZ2V0IGEgZnJlc2ggY2xvbmUgb2YgdGhlIHNwZWNpZmllZCB0ZXh0OgorICAgIG5ldyBvYmplY3Qgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgorCisgICAgVGhpcyBpcyBhIGJlc3QtZWZmb3J0OiBsYXRpbjEgc2luZ2xlIGxldHRlcnMgYW5kIHRoZSBlbXB0eQorICAgIHN0cmluZyAoJycpIGFyZSBzaW5nbGV0b25zIGFuZCBjYW5ub3QgYmUgY2xvbmVkLgorICAgICIiIgorICAgIHJldHVybiB0ZXh0LmVuY29kZSgpLmRlY29kZSgpCisKIGNsYXNzIFVuaWNvZGVUZXN0KHN0cmluZ190ZXN0cy5Db21tb25UZXN0LAogICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QsCiAgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVUZXN0LApAQCAtODYzLDExICs4NzQsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpkfScuZm9ybWF0KEcoJ2RhdGEnKSksICdHKGRhdGEpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezAhc30nLmZvcm1hdChHKCdkYXRhJykpLCAnc3RyaW5nIGlzIGRhdGEnKQogCi0gICAgICAgIG1zZyA9ICdvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMgZGVwcmVjYXRlZCcKLSAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKChtc2csIERlcHJlY2F0aW9uV2FybmluZykpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMHN9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6PjE1c30nLmZvcm1hdChHKCdkYXRhJykpLCAnIHN0cmluZyBpcyBkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnezA6XjEwfScuZm9ybWF0LCBFKCdkYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOl4xMHN9Jy5mb3JtYXQsIEUoJ2RhdGEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnezA6PjE1c30nLmZvcm1hdCwgRygnZGF0YScpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswOmRhdGU6ICVZLSVtLSVkfSIuZm9ybWF0KEkoeWVhcj0yMDA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPTgsCkBAIC05MDMsNyArOTEyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswIi5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7MC59Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MC59Ii5mb3JtYXQsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7MFt9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFt9Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFt9Ii5mb3JtYXQsIFtdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgICAiezBdfSIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAuW119Ii5mb3JtYXQsIDApCkBAIC05NTUsNiArOTY0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1t7fV19Ii5mb3JtYXQoeyJ7fSI6IDV9KSwgIjUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W3t9XX0iLmZvcm1hdCh7Int9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbe119Ii5mb3JtYXQoeyJ7IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbfV19Ii5mb3JtYXQoeyJ9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbW119Ii5mb3JtYXQoeyJbIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbIV19Ii5mb3JtYXQoeyIhIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXt9Yn0iLmZvcm1hdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXtifSIuZm9ybWF0LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIntbfSIuZm9ybWF0LCA0MikKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdF9tYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuZm9ybWF0X21hcCh7fSksICcnKQpAQCAtMTEwNyw2ICsxMTI0LDM4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyUuMXMnICUgImFceGU5XHUyMGFjIiwgJ2EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclLjJzJyAlICJhXHhlOVx1MjBhYyIsICdhXHhlOScpCiAKKyAgICBkZWYgdGVzdF9mb3JtYXR0aW5nX3dpdGhfZW51bShzZWxmKToKKyAgICAgICAgIyBpc3N1ZTE4NzgwCisgICAgICAgIGltcG9ydCBlbnVtCisgICAgICAgIGNsYXNzIEZsb2F0KGZsb2F0LCBlbnVtLkVudW0pOgorICAgICAgICAgICAgUEkgPSAzLjE0MTU5MjYKKyAgICAgICAgY2xhc3MgSW50KGVudW0uSW50RW51bSk6CisgICAgICAgICAgICBJREVTID0gMTUKKyAgICAgICAgY2xhc3MgU3RyKHN0ciwgZW51bS5FbnVtKToKKyAgICAgICAgICAgIEFCQyA9ICdhYmMnCisgICAgICAgICMgVGVzdGluZyBVbmljb2RlIGZvcm1hdHRpbmcgc3RyaW5ncy4uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlcywgJXMiICUgKFN0ci5BQkMsIFN0ci5BQkMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTdHIuQUJDLCBTdHIuQUJDJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJXMsICVzLCAlZCwgJWksICV1LCAlZiwgJTUuMmYiICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChTdHIuQUJDLCBTdHIuQUJDLAorICAgICAgICAgICAgICAgICAgICAgICAgIEludC5JREVTLCBJbnQuSURFUywgSW50LklERVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQuUEksIEZsb2F0LlBJKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU3RyLkFCQywgU3RyLkFCQywgMTUsIDE1LCAxNSwgMy4xNDE1OTMsICAzLjE0JykKKworICAgICAgICAjIGZvcm1hdHRpbmcgam9icyBkZWxlZ2F0ZWQgZnJvbSB0aGUgc3RyaW5nIGltcGxlbWVudGF0aW9uOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylzLi4uJyAlIHsnZm9vJzpTdHIuQUJDfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uU3RyLkFCQy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOkludC5JREVTfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uSW50LklERVMuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylpLi4uJyAlIHsnZm9vJzpJbnQuSURFU30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLjE1Li4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pZC4uLicgJSB7J2Zvbyc6SW50LklERVN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4xNS4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXUuLi4nICUgeydmb28nOkludC5JREVTLCAnZGVmJzpGbG9hdC5QSX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLjE1Li4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pZi4uLicgJSB7J2Zvbyc6RmxvYXQuUEksJ2RlZic6MTIzfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMy4xNDE1OTMuLi4nKQorCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfZm9ybWF0dGluZ19odWdlX3ByZWNpc2lvbihzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IElOVF9NQVgKQEAgLTIwMDQsOSArMjA1MywxMCBAQAogICAgICMgVGVzdCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpCiAgICAgZGVmIHRlc3RfZnJvbV9mb3JtYXQoc2VsZik6CiAgICAgICAgIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKLSAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IChweXRob25hcGksIHB5X29iamVjdCwKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0ICgKKyAgICAgICAgICAgIHB5dGhvbmFwaSwgcHlfb2JqZWN0LCBzaXplb2YsCiAgICAgICAgICAgICBjX2ludCwgY19sb25nLCBjX2xvbmdsb25nLCBjX3NzaXplX3QsCi0gICAgICAgICAgICBjX3VpbnQsIGNfdWxvbmcsIGNfdWxvbmdsb25nLCBjX3NpemVfdCkKKyAgICAgICAgICAgIGNfdWludCwgY191bG9uZywgY191bG9uZ2xvbmcsIGNfc2l6ZV90LCBjX3ZvaWRfcCkKICAgICAgICAgbmFtZSA9ICJQeVVuaWNvZGVfRnJvbUZvcm1hdCIKICAgICAgICAgX1B5VW5pY29kZV9Gcm9tRm9ybWF0ID0gZ2V0YXR0cihweXRob25hcGksIG5hbWUpCiAgICAgICAgIF9QeVVuaWNvZGVfRnJvbUZvcm1hdC5yZXN0eXBlID0gcHlfb2JqZWN0CkBAIC0yMDE3LDkgKzIwNjcsMTMgQEAKICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Gcm9tRm9ybWF0KGZvcm1hdCwgKmNhcmdzKQogCisgICAgICAgIGRlZiBjaGVja19mb3JtYXQoZXhwZWN0ZWQsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGZvcm1hdCwgKmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCB0ZXh0KQorCiAgICAgICAgICMgYXNjaWkgZm9ybWF0LCBub24tYXNjaWkgYXJndW1lbnQKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInYXNjaWlceDdmPSVVJywgJ3VuaWNvZGVceGU5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAnYXNjaWlceDdmPXVuaWNvZGVceGU5JykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhc2NpaVx4N2Y9dW5pY29kZVx4ZTknLAorICAgICAgICAgICAgICAgICAgICAgYidhc2NpaVx4N2Y9JVUnLCAndW5pY29kZVx4ZTknKQogCiAgICAgICAgICMgbm9uLWFzY2lpIGZvcm1hdCwgYXNjaWkgYXJndW1lbnQ6IGVuc3VyZSB0aGF0IFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpCiAgICAgICAgICMgcmFpc2VzIGFuIGVycm9yCkBAIC0yMDI5LDY0ICsyMDgzLDIwNSBAQAogICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQsIGIndW5pY29kZVx4ZTk9JXMnLCAnYXNjaWknKQogCiAgICAgICAgICMgdGVzdCAiJWMiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclYycsIGNfaW50KDB4YWJjZCkpLCAnXHVhYmNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHgxMGZmZmYpKSwgJ1xVMDAxMGZmZmYnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1x1YWJjZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyVjJywgY19pbnQoMHhhYmNkKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcVTAwMTBmZmZmJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMnLCBjX2ludCgweDEwZmZmZikpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHgxMTAwMDApKQogICAgICAgICAjIElzc3VlICMxODE4MwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclYyVjJywgY19pbnQoMHgxMDAwMCksIGNfaW50KDB4MTAwMDAwKSksCi0gICAgICAgICAgICAnXFUwMDAxMDAwMFxVMDAxMDAwMDAnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1xVMDAwMTAwMDBcVTAwMTAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMlYycsIGNfaW50KDB4MTAwMDApLCBjX2ludCgweDEwMDAwMCkpCiAKICAgICAgICAgIyB0ZXN0ICIlIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJScpLCAnJScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJScpLCAnJScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJXMnKSwgJyVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ1slJV0nKSwgJ1slXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJSVzJywgYidhYmMnKSwgJyVhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUnLAorICAgICAgICAgICAgICAgICAgICAgYiclJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSUnKQorICAgICAgICBjaGVja19mb3JtYXQoJyVzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSVzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdbJV0nLAorICAgICAgICAgICAgICAgICAgICAgYidbJSVdJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclYWJjJywKKyAgICAgICAgICAgICAgICAgICAgIGInJSUlcycsIGInYWJjJykKKworICAgICAgICAjIHRydW5jYXRlZCBzdHJpbmcKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhYmMnLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNzJywgYidhYmNkZWYnKQorICAgICAgICBjaGVja19mb3JtYXQoJ2FiY1tcdWZmZmQnLAorICAgICAgICAgICAgICAgICAgICAgYiclLjVzJywgJ2FiY1tcdTIwYWNdJy5lbmNvZGUoJ3V0ZjgnKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXFx1MjBhY0FCQyciLAorICAgICAgICAgICAgICAgICAgICAgYiclQScsICdcdTIwYWNBQkMnKQorICAgICAgICBjaGVja19mb3JtYXQoIidcXHUyMCIsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNUEnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXHUyMGFjQUJDJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyVSJywgJ1x1MjBhY0FCQycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgiJ1x1MjBhY0EiLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNSJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNTJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNVJywgJ1x1MjBhY0FCQ0RFRicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHUyMGFjQUInLAorICAgICAgICAgICAgICAgICAgICAgYiclLjNWJywgJ1x1MjBhY0FCQ0RFRicsIE5vbmUpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnYWJjW1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNVYnLCBOb25lLCAnYWJjW1x1MjBhY10nLmVuY29kZSgndXRmOCcpKQorCisgICAgICAgICMgZm9sbG93aW5nIHRlc3RzIGNvbWVzIGZyb20gIzczMzAKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlUworICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1UycsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlMnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yUycsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJVIKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgICdhYmMnIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lOFInLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4zUicsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAnYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjNSJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlQQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgJ2FiYyciLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU4QScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9J2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjNBJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuM0EnLCAnYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVzCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVzJywgYidhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMnMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICBhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuMnMnLCBiJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlVQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlUnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yVScsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJVYKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgYWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNVYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9YWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuMlYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJWJywgJ2FiYycsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgMTIzIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNVYnLCBOb25lLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0xMiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVicsIE5vbmUsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIDEyIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4yVicsIE5vbmUsIGInMTIzJykKIAogICAgICAgICAjIHRlc3QgaW50ZWdlciBmb3JtYXRzICglaSwgJWQsICV1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTAzaScsIGNfaW50KDEwKSksICcwMTAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTAuNGknLCBjX2ludCgxMCkpLCAnMDAxMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclaScsIGNfaW50KC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxpJywgY19sb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsaScsIGNfbG9uZ2xvbmcoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclemknLCBjX3NzaXplX3QoLTEyMykpLCAnLTEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMDEwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTAzaScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcwMDEwJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTAuNGknLCBjX2ludCgxMCkpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVpJywgY19pbnQoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsaScsIGNfbG9uZygtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsaScsIGNfbG9uZ2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV6aScsIGNfc3NpemVfdCgtMTIzKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWQnLCBjX2ludCgtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsZCcsIGNfbG9uZygtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsbGQnLCBjX2xvbmdsb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJXpkJywgY19zc2l6ZV90KC0xMjMpKSwgJy0xMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclZCcsIGNfaW50KC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGQnLCBjX2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclemQnLCBjX3NzaXplX3QoLTEyMykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV1JywgY191aW50KDEyMykpLCAnMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVsdScsIGNfdWxvbmcoMTIzKSksICcxMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsdScsIGNfdWxvbmdsb25nKDEyMykpLCAnMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV6dScsIGNfc2l6ZV90KDEyMykpLCAnMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYicldScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsdScsIGNfdWxvbmcoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGx1JywgY191bG9uZ2xvbmcoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclenUnLCBjX3NpemVfdCgxMjMpKQorCisgICAgICAgICMgdGVzdCBsb25nIG91dHB1dAorICAgICAgICBtaW5fbG9uZ2xvbmcgPSAtKDIgKiogKDggKiBzaXplb2YoY19sb25nbG9uZykgLSAxKSkKKyAgICAgICAgbWF4X2xvbmdsb25nID0gLW1pbl9sb25nbG9uZyAtIDEKKyAgICAgICAgY2hlY2tfZm9ybWF0KHN0cihtaW5fbG9uZ2xvbmcpLAorICAgICAgICAgICAgICAgICAgICAgYiclbGxkJywgY19sb25nbG9uZyhtaW5fbG9uZ2xvbmcpKQorICAgICAgICBjaGVja19mb3JtYXQoc3RyKG1heF9sb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKG1heF9sb25nbG9uZykpCisgICAgICAgIG1heF91bG9uZ2xvbmcgPSAyICoqICg4ICogc2l6ZW9mKGNfdWxvbmdsb25nKSkgLSAxCisgICAgICAgIGNoZWNrX2Zvcm1hdChzdHIobWF4X3Vsb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbHUnLCBjX3Vsb25nbG9uZyhtYXhfdWxvbmdsb25nKSkKKyAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclcCcsIGNfdm9pZF9wKC0xKSkKKworICAgICAgICAjIHRlc3QgcGFkZGluZyAod2lkdGggYW5kL29yIHByZWNpc2lvbikKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDAsICcwJyksCisgICAgICAgICAgICAgICAgICAgICBiJyUuMTAwaScsIGNfaW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgwaScsIGNfaW50KDEyMykpCisKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEwdScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTEwMHUnLCBjX3VpbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB1JywgY191aW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgwdScsIGNfdWludCgxMjMpKQorCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTAxMHgnLCBjX2ludCgweDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAweCcsIGNfaW50KDB4MTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB4JywgY19pbnQoMHgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoODAsICcwJykucmp1c3QoMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJTEwMC44MHgnLCBjX2ludCgweDEyMykpCiAKICAgICAgICAgIyB0ZXN0ICVBCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlQTolQScsICdhYmNceGU5XHVhYmNkXFUwMDEwZmZmZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgciIlQTonYWJjXHhlOVx1YWJjZFxVMDAxMGZmZmYnIikKKyAgICAgICAgY2hlY2tfZm9ybWF0KHIiJUE6J2FiY1x4ZTlcdWFiY2RcVTAwMTBmZmZmJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyUlQTolQScsICdhYmNceGU5XHVhYmNkXFUwMDEwZmZmZicpCiAKICAgICAgICAgIyB0ZXN0ICVWCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCAnYWJjJywgYid4eXonKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1hYmMnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgJ2FiYycsIGIneHl6JykKIAogICAgICAgICAjIFRlc3Qgc3RyaW5nIGRlY29kZSBmcm9tIHBhcmFtZXRlciBvZiAlcyB1c2luZyB1dGYtOC4KICAgICAgICAgIyBiJ1x4ZTRceGJhXHhiYVx4ZTZceGIwXHg5MScgaXMgdXRmLTggZW5jb2RlZCBieXRlIHNlcXVlbmNlIG9mCiAgICAgICAgICMgJ1x1NGViYVx1NmMxMScKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGIncmVwcj0lVicsIE5vbmUsIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAncmVwcj1cdTRlYmFcdTZjMTEnKQorICAgICAgICBjaGVja19mb3JtYXQoJ3JlcHI9XHU0ZWJhXHU2YzExJywKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lVicsIE5vbmUsIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJykKIAogICAgICAgICAjVGVzdCByZXBsYWNlIGVycm9yIGhhbmRsZXIuCi0gICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCBOb25lLCBiJ2FiY1x4ZmYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiY1x1ZmZmZCcpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1hYmNcdWZmZmQnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgTm9uZSwgYidhYmNceGZmJykKIAogICAgICAgICAjIG5vdCBzdXBwb3J0ZWQ6IGNvcHkgdGhlIHJhdyBmb3JtYXQgc3RyaW5nLiB0aGVzZSB0ZXN0cyBhcmUganVzdCBoZXJlCiAgICAgICAgICMgdG8gY2hlY2sgZm9yIGNyYXNocyBhbmQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGFzIHNwZWNpZmljYXRpb25zCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclMSVzJywgYidhYmMnKSwgJyVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUxYWJjJyksICclMWFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclK2knLCBjX2ludCgxMCkpLCAnJStpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUuJXMnLCBiJ2FiYycpLCAnJS4lcycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJXMnLAorICAgICAgICAgICAgICAgICAgICAgYiclMSVzJywgYidhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUxYWJjJywKKyAgICAgICAgICAgICAgICAgICAgIGInJTFhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUraScsCisgICAgICAgICAgICAgICAgICAgICBiJyUraScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclLiVzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJS4lcycsIGInYWJjJykKIAogICAgICMgVGVzdCBQeVVuaWNvZGVfQXNXaWRlQ2hhcigpCiAgICAgZGVmIHRlc3RfYXN3aWRlY2hhcihzZWxmKToKQEAgLTIyMTAsNiArMjQwNSw4MCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYWJjLCBhYmNkZWYpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYmNkZWYuZGVjb2RlKCd1bmljb2RlX2ludGVybmFsJyksIHRleHQpCiAKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzYxNQorICAgICAgICBOID0gMTAKKyAgICAgICAgYXNjaWkgPSAnYScgKiBOCisgICAgICAgIGFzY2lpMiA9ICd6JyAqIE4KKyAgICAgICAgbGF0aW4gPSAnXHg4MCcgKiBOCisgICAgICAgIGxhdGluMiA9ICdceGZmJyAqIE4KKyAgICAgICAgYm1wID0gJ1x1MDEwMCcgKiBOCisgICAgICAgIGJtcDIgPSAnXHVmZmZmJyAqIE4KKyAgICAgICAgYXN0cmFsID0gJ1xVMDAxMDAwMDAnICogTgorICAgICAgICBhc3RyYWwyID0gJ1xVMDAxMGZmZmYnICogTgorICAgICAgICBzdHJpbmdzID0gKAorICAgICAgICAgICAgYXNjaWksIGFzY2lpMiwKKyAgICAgICAgICAgIGxhdGluLCBsYXRpbjIsCisgICAgICAgICAgICBibXAsIGJtcDIsCisgICAgICAgICAgICBhc3RyYWwsIGFzdHJhbDIpCisgICAgICAgIGZvciB0ZXh0MSwgdGV4dDIgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhzdHJpbmdzLCAyKToKKyAgICAgICAgICAgIGVxdWFsID0gKHRleHQxIGlzIHRleHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0MSA9PSB0ZXh0MiwgZXF1YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQxICE9IHRleHQyLCBub3QgZXF1YWwpCisKKyAgICAgICAgICAgIGlmIGVxdWFsOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0MSA8PSB0ZXh0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGV4dDEgPj0gdGV4dDIpCisKKyAgICAgICAgICAgICAgICAjIHRleHQxIGlzIHRleHQyOiBkdXBsaWNhdGUgc3RyaW5ncyB0byBza2lwIHRoZSAic3RyMSA9PSBzdHIyIgorICAgICAgICAgICAgICAgICMgb3B0aW1pemF0aW9uIGluIHVuaWNvZGVfY29tcGFyZV9lcSgpIGFuZCByZWFsbHkgY29tcGFyZQorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHBlciBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBjb3B5MSA9IGR1cGxpY2F0ZV9zdHJpbmcodGV4dDEpCisgICAgICAgICAgICAgICAgY29weTIgPSBkdXBsaWNhdGVfc3RyaW5nKHRleHQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY29weTEsIGNvcHkyKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkxID09IGNvcHkyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29weTEgIT0gY29weTIpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weTEgPD0gY29weTIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkyID49IGNvcHkyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzY2lpID49IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXNjaWkgPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluIDwgbGF0aW4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGF0aW4gPCBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXRpbiA8IGFzdHJhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxhdGluID49IGxhdGluMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsYXRpbiA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibXAgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBhc3RyYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN0cmFsIDwgYXN0cmFsMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJhbCA+PSBhc3RyYWwyKQorCiAKIGNsYXNzIFN0cmluZ01vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2Zvcm1hdHRlcl9wYXJzZXIoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQppbmRleCA5OWFhMDAzLi43MDdiMzBlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKQEAgLTIxLDcgKzIxLDcgQEAKIGNsYXNzIFVuaWNvZGVNZXRob2RzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnYmY3YTc4ZjFhNTMyNDIxYjUwMzM2MDAxMDJlMjNhOTIwNDRkYmJhOScKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2U3NGU4NzhkZTcxYjZlNzgwZmZhYzI3MTc4NWMzY2I1OGY2MjUxZjMnCiAKICAgICBkZWYgdGVzdF9tZXRob2RfY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGggPSBoYXNobGliLnNoYTEoKQpAQCAtODAsNyArODAsNyBAQAogY2xhc3MgVW5pY29kZUZ1bmN0aW9uc1Rlc3QoVW5pY29kZURhdGFiYXNlVGVzdCk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnMTdmZTJmMTJiNzg4ZTRmZmY1NDc5YjQ2OWM0NDA0YmI2ZWNmODQxZicKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2YwYjc0ZDI2Nzc2MzMxY2M3YmRjM2E0Njk4ZjAzN2Q3M2YyY2VlMmInCiAgICAgZGVmIHRlc3RfZnVuY3Rpb25fY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGRhdGEgPSBbXQogICAgICAgICBoID0gaGFzaGxpYi5zaGExKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKaW5kZXggN2EzNGEwNS4uOTRmNjQwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKQEAgLTE2LDYgKzE2LDcgQEAKIGZyb20gYmFzZTY0IGltcG9ydCBiNjRlbmNvZGUKIGltcG9ydCBjb2xsZWN0aW9ucwogCisKIGRlZiBoZXhlc2NhcGUoY2hhcik6CiAgICAgIiIiRXNjYXBlIGNoYXIgYXMgUkZDIDIzOTYgc3BlY2lmaWVzIiIiCiAgICAgaGV4X3JlcHIgPSBoZXgob3JkKGNoYXIpKVsyOl0udXBwZXIoKQpAQCAtMjM4LDcgKzIzOSw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tfcmVhZChiIjEuMSIpCiAKICAgICBkZWYgdGVzdF9yZWFkX2JvZ3VzKHNlbGYpOgotICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgSU9FcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KKyAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIE9TRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCiAgICAgICAgIHNlbGYuZmFrZWh0dHAoYicnJ0hUVFAvMS4xIDQwMSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZAogRGF0ZTogV2VkLCAwMiBKYW4gMjAwOCAwMzowMzo1NCBHTVQKIFNlcnZlcjogQXBhY2hlLzEuMy4zMyAoRGViaWFuIEdOVS9MaW51eCkgbW9kX3NzbC8yLjguMjIgT3BlblNTTC8wLjkuN2UKQEAgLTI0NiwxMiArMjQ3LDEyIEBACiBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCiAnJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vcHl0aG9uLm9yZy8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9weXRob24ub3JnLyIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZF9yZWRpcmVjdChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIElPRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCisgICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBPU0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgogICAgICAgICBzZWxmLmZha2VodHRwKGInJydIVFRQLzEuMSAzMDIgRm91bmQKIERhdGU6IFdlZCwgMDIgSmFuIDIwMDggMDM6MDM6NTQgR01UCiBTZXJ2ZXI6IEFwYWNoZS8xLjMuMzMgKERlYmlhbiBHTlUvTGludXgpIG1vZF9zc2wvMi44LjIyIE9wZW5TU0wvMC45LjdlCkBAIC0yNjYsMTkgKzI2NywyMCBAQAogICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X3NvY2tldChzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgcmFpc2VzIElPRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRvZXMgbm90IHNlbmQgYW55CisgICAgICAgICMgdXJsb3BlbigpIHJhaXNlcyBPU0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBkb2VzIG5vdCBzZW5kIGFueQogICAgICAgICAjIGRhdGEuICgjMTY4MDIzMCkKICAgICAgICAgc2VsZi5mYWtlaHR0cChiJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHVybG9wZW4sICJodHRwOi8vc29tZXRoaW5nIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCiAKICAgICBkZWYgdGVzdF9taXNzaW5nX2xvY2FsZmlsZShzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciAjMTA4MzYKLSAgICAgICAgIyAzLjMgLSBVUkxFcnJvciBpcyBub3QgY2FwdHVyZWQsIGV4cGxpY2l0IElPRXJyb3IgaXMgcmFpc2VkLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcikgYXMgZToKICAgICAgICAgICAgIHVybG9wZW4oJ2ZpbGU6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24ucmVhc29uKQogCiAgICAgZGVmIHRlc3RfZmlsZV9ub3RleGlzdHMoc2VsZik6CiAgICAgICAgIGZkLCB0bXBfZmlsZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQpAQCAtMjkxLDIwICsyOTMsMjEgQEAKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICAgICAgb3MudW5saW5rKHRtcF9maWxlKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHRtcF9maWxlKSkKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpOgogICAgICAgICAgICAgdXJsb3Blbih0bXBfZmlsZXVybCkKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub2hvc3Qoc2VsZik6CiAgICAgICAgIHRlc3RfZnRwX3VybCA9ICdmdHA6Ly8vcGF0aCcKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKHRlc3RfZnRwX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogICAgIGRlZiB0ZXN0X2Z0cF9ub25leGlzdGluZyhzZWxmKToKLSAgICAgICAgIyAzLjMgLSBJT0Vycm9yIGluc3RlYWQgb2YgVVJMRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKCdmdHA6Ly9sb2NhbGhvc3QvYS9maWxlL3doaWNoL2RvZXNub3QvZXhpc3RzLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogCiAgICAgZGVmIHRlc3RfdXNlcnBhc3NfaW51cmwoc2VsZik6CkBAIC0zNDEsNiArMzQ0LDc5IEBACiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIoKQogCitjbGFzcyB1cmxvcGVuX0RhdGFUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIGRhdGEgVVJMLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIHRleHQgY29udGFpbmluZyBVUkwgc3BlY2lhbC0gYW5kIHVuaWNvZGUtY2hhcmFjdGVycworICAgICAgICBzZWxmLnRleHQgPSAidGVzdCBkYXRhIFVSTHMgOjssJT0mIFx1MDBmNiBcdTAwYzQgIgorICAgICAgICAjIDJ4MSBwaXhlbCBSR0IgUE5HIGltYWdlIHdpdGggb25lIGJsYWNrIGFuZCBvbmUgd2hpdGUgcGl4ZWwKKyAgICAgICAgc2VsZi5pbWFnZSA9ICgKKyAgICAgICAgICAgIGInXHg4OVBOR1xyXG5ceDFhXG5ceDAwXHgwMFx4MDBccklIRFJceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAxXHgwOFx4MDJceDAwXHgwMFx4MDB7QFx4ZThceGRkXHgwMFx4MDBceDAwXHgwMXNSR0JceDAwXHhhZScKKyAgICAgICAgICAgIGInXHhjZVx4MWNceGU5XHgwMFx4MDBceDAwXHgwZklEQVRceDA4XHhkN2NgYGBceGY4XHhmZlx4ZmY/XHgwMCcKKyAgICAgICAgICAgIGInXHgwNlx4MDFceDAyXHhmZVxuby9ceDFlXHgwMFx4MDBceDAwXHgwMElFTkRceGFlQmBceDgyJykKKworICAgICAgICBzZWxmLnRleHRfdXJsID0gKAorICAgICAgICAgICAgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVURi04LHRlc3QlMjBkYXRhJTIwVVJMcyUyMCUzQSUzQiUyQyUyNSUzIgorICAgICAgICAgICAgIkQlMjYlMjAlQzMlQjYlMjAlQzMlODQlMjAiKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NCA9ICgKKyAgICAgICAgICAgICJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1JU08tODg1OS0xO2Jhc2U2NCxkR1Z6ZENCa1lYUmhJRlZTVEhNZ09qcyIKKyAgICAgICAgICAgICJzSlQwbUlQWWd4Q0ElM0QiKQorICAgICAgICAjIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMIHRoYXQgY29udGFpbnMgaWdub3JhYmxlIHNwYWNlcywKKyAgICAgICAgIyBzdWNoIGFzICJcbiIsICIgIiwgIiUwQSIsIGFuZCAiJTIwIi4KKyAgICAgICAgc2VsZi5pbWFnZV91cmwgPSAoCisgICAgICAgICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFCQ0FJQUFBQjdcbiIKKyAgICAgICAgICAgICJRT2pkQUFBQUFYTlNSMElBcnM0YzZRQUFBQTlKUkVGVUNOZGolMEFZR0JnJTJCUC8vUHdBR0FRTCUyQkNtOCAiCisgICAgICAgICAgICAidkhnQUFBQUJKUlU1RXJrSmdnZyUzRCUzRCUwQSUyMCIpCisKKyAgICAgICAgc2VsZi50ZXh0X3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLnRleHRfdXJsKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigKKyAgICAgICAgICAgIHNlbGYudGV4dF91cmxfYmFzZTY0KQorICAgICAgICBzZWxmLmltYWdlX3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLmltYWdlX3VybCkKKworICAgIGRlZiB0ZXN0X2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgb2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBoYXMgdGhlIHNwZWNpZmllZCBtZXRob2RzCisgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiLAorICAgICAgICAgICAgICAgICAgICAgImNsb3NlIiwgImluZm8iLCAiZ2V0dXJsIiwgImdldGNvZGUiLCAiX19pdGVyX18iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYudGV4dF91cmxfcmVzcCwgYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSB1cmxvcGVuKCkgbGFja3MgJXMgYXR0cmlidXRlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cikKKworICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRleHRfdXJsX3Jlc3AuaW5mbygpLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ0lTTy04ODU5LTEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5pbmZvKClbJ2NvbnRlbnQtbGVuZ3RoJ10sCisgICAgICAgICAgICBzdHIobGVuKHNlbGYuaW1hZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJkYXRhOiwiKS5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ1VTLUFTQ0lJJyldKQorCisgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi50ZXh0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLmdldHVybCgpLAorICAgICAgICAgICAgc2VsZi50ZXh0X3VybF9iYXNlNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi5pbWFnZV91cmwpCisKKyAgICBkZWYgdGVzdF9yZWFkX3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpKVsnY2hhcnNldCddKSwgc2VsZi50ZXh0KQorCisgICAgZGVmIHRlc3RfcmVhZF90ZXh0X2Jhc2U2NChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AuaW5mbygpLmdldF9wYXJhbXMoKSlbJ2NoYXJzZXQnXSksCisgICAgICAgICAgICBzZWxmLnRleHQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2ltYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW1hZ2VfdXJsX3Jlc3AucmVhZCgpLCBzZWxmLmltYWdlKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19jb21tYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcix1cmxsaWIucmVxdWVzdC51cmxvcGVuLCdkYXRhOnRleHQvcGxhaW4nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9iYXNlNjRfZGF0YShzZWxmKToKKyAgICAgICAgIyBtaXNzaW5nIHBhZGRpbmcgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsdXJsbGliLnJlcXVlc3QudXJsb3BlbiwnZGF0YTo7YmFzZTY0LENnPScpCisKIGNsYXNzIHVybHJldHJpZXZlX0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCB1cmxsaWIudXJscmV0cmlldmUoKSBvbiBsb2NhbCBmaWxlcyIiIgogCkBAIC0xMjkxLDYgKzEzNjcsNyBAQAogIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLmZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCiAjICAgICAgICAgZnRwLmNsb3NlKCkKIAorCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlVuaXQgdGVzdHMgZm9yIHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QuIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQppbmRleCAzM2Y5MGY0Li5kYmQxYzYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CkBAIC0xMSw2ICsxMSw3IEBACiAjIFRoZSBwcm94eSBieXBhc3MgbWV0aG9kIGltcG9ydGVkIGJlbG93IGhhcyBsb2dpYyBzcGVjaWZpYyB0byB0aGUgT1NYCiAjIHByb3h5IGNvbmZpZyBkYXRhIHN0cnVjdHVyZSBidXQgaXMgdGVzdGFibGUgb24gYWxsIHBsYXRmb3Jtcy4KIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IFJlcXVlc3QsIE9wZW5lckRpcmVjdG9yLCBfcHJveHlfYnlwYXNzX21hY29zeF9zeXNjb25mCitmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UKIGltcG9ydCB1cmxsaWIuZXJyb3IKIAogIyBYWFgKQEAgLTExOCw2ICsxMTksMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVxLmdldF9oZWFkZXIoIk5vdC10aGVyZSIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJOb3QtdGhlcmUiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCiAKKyAgICAgICAgcmVxLnJlbW92ZV9oZWFkZXIoIlNwYW0tZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVxLmhhc19oZWFkZXIoIlNwYW0tZWdncyIpKQorCisgICAgICAgIHJlcS5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iLCAiRWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXEuaGFzX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKSkKKworICAgICAgICByZXEucmVtb3ZlX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcS5oYXNfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIpKQorCiAKICAgICBkZWYgdGVzdF9wYXNzd29yZF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICBtZ3IgPSB1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3IoKQpAQCAtMjgzLDYgKzI5Myw3IEBACiAgICAgICAgIHNlbGYucmVxX2hlYWRlcnMgPSBbXQogICAgICAgICBzZWxmLmRhdGEgPSBOb25lCiAgICAgICAgIHNlbGYucmFpc2Vfb25fZW5kaGVhZGVycyA9IEZhbHNlCisgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMgPSB7fQogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGhvc3QsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKQEAgLTMxMCw4ICszMjEsNyBAQAogICAgICAgICBpZiBib2R5OgogICAgICAgICAgICAgc2VsZi5kYXRhID0gYm9keQogICAgICAgICBpZiBzZWxmLnJhaXNlX29uX2VuZGhlYWRlcnM6Ci0gICAgICAgICAgICBpbXBvcnQgc29ja2V0Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgZGVmIGdldHJlc3BvbnNlKHNlbGYpOgogICAgICAgICByZXR1cm4gTW9ja0hUVFBSZXNwb25zZShNb2NrRmlsZSgpLCB7fSwgMjAwLCAiT0siKQogCkBAIC01OTYsMjcgKzYwNiw2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3NbMV0gaXMgTm9uZSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGFyZ3NbMV0sIE1vY2tSZXNwb25zZSkpCiAKLSAgICBkZWYgdGVzdF9tZXRob2RfZGVwcmVjYXRpb25zKHNlbGYpOgotICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIikKLQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5hZGRfZGF0YSgiZGF0YSIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9kYXRhKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuaGFzX2RhdGEoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfaG9zdCgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9zZWxlY3RvcigpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmlzX3VudmVyaWZpYWJsZSgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9vcmlnaW5fcmVxX2hvc3QoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfdHlwZSgpCi0KLQogZGVmIHNhbmVwYXRobmFtZTJ1cmwocGF0aCk6CiAgICAgdHJ5OgogICAgICAgICBwYXRoLmVuY29kZSgidXRmLTgiKQpAQCAtODExLDcgKzgwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkZvbyIsICJiYXIiKSwgKCJTcGFtIiwgImVnZ3MiKV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHAuZGF0YSwgZGF0YSkKIAotICAgICAgICAjIGNoZWNrIHNvY2tldC5lcnJvciBjb252ZXJ0ZWQgdG8gVVJMRXJyb3IKKyAgICAgICAgIyBjaGVjayBPU0Vycm9yIGNvbnZlcnRlZCB0byBVUkxFcnJvcgogICAgICAgICBodHRwLnJhaXNlX29uX2VuZGhlYWRlcnMgPSBUcnVlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvciwgaC5kb19vcGVuLCBodHRwLCByZXEpCiAKQEAgLTkxNiw2ICs5MDUsMzYgQEAKICAgICAgICAgICAgIHBfZHNfcmVxID0gaC5kb19yZXF1ZXN0Xyhkc19yZXEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBfZHNfcmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sImV4YW1wbGUuY29tIikKIAorICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX3NldHRlcihzZWxmKToKKyAgICAgICAgIyBDaGVja3MgdG8gZW5zdXJlIHRoYXQgY29tcG9uZW50cyBhcmUgc2V0IGNvcnJlY3RseSBhZnRlciBzZXR0aW5nIHRoZQorICAgICAgICAjIGZ1bGxfdXJsIG9mIGEgUmVxdWVzdCBvYmplY3QKKworICAgICAgICB1cmxzID0gWworICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyI2JheicsCisgICAgICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXImc3BhbT1lZ2dzI2Jhc2gnLAorICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgIF0KKworICAgICAgICAjIHRlc3RpbmcgYSByZXVzYWJsZSByZXF1ZXN0IGluc3RhbmNlLCBidXQgdGhlIHVybCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgIyByZXF1aXJlZCwgc28ganVzdCB1c2UgYSBkdW1teSBvbmUgdG8gaW5zdGFudGlhdGUKKyAgICAgICAgciA9IFJlcXVlc3QoJ2h0dHA6Ly9leGFtcGxlLmNvbScpCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHIuZnVsbF91cmwgPSB1cmwKKyAgICAgICAgICAgIHBhcnNlZCA9IHVybHBhcnNlKHVybCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldF9mdWxsX3VybCgpLCB1cmwpCisgICAgICAgICAgICAjIGZ1bGxfdXJsIHNldHRlciB1c2VzIHNwbGl0dGFnIHRvIHNwbGl0IGludG8gY29tcG9uZW50cy4KKyAgICAgICAgICAgICMgc3BsaXR0YWcgc2V0cyB0aGUgZnJhZ21lbnQgYXMgTm9uZSB3aGlsZSB1cmxwYXJzZSBzZXRzIGl0IHRvICcnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZnJhZ21lbnQgb3IgJycsIHBhcnNlZC5mcmFnbWVudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2Uoci5nZXRfZnVsbF91cmwoKSkucXVlcnksIHBhcnNlZC5xdWVyeSkKKworICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX2RlbGV0ZXIoc2VsZik6CisgICAgICAgIHIgPSBSZXF1ZXN0KCdodHRwOi8vd3d3LmV4YW1wbGUuY29tJykKKyAgICAgICAgZGVsIHIuZnVsbF91cmwKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mdWxsX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mcmFnbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnNlbGVjdG9yLCAnJykKKwogICAgIGRlZiB0ZXN0X2ZpeHBhdGhfaW5fd2VpcmR1cmxzKHNlbGYpOgogICAgICAgICAjIElzc3VlNDQ5MzogdXJsbGliMiB0byBzdXBwbHkgJy8nIHdoZW4gdG8gdXJscyB3aGVyZSBwYXRoIGRvZXMgbm90CiAgICAgICAgICMgc3RhcnQgd2l0aCcvJwpAQCAtMTQxNSw2ICsxNDM0LDIxIEBACiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15SFRUUEhhbmRsZXIpCiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15T3RoZXJIVFRQSGFuZGxlcikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzIG5ldHdvcmsgYWNjZXNzJykKKyAgICBkZWYgdGVzdF9pc3N1ZTE2NDY0KHNlbGYpOgorICAgICAgICBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoKQorICAgICAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXF1ZXN0LmRhdGEpCisKKyAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCwgIjEiLmVuY29kZSgidXMtYXNjaWkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjEiLCByZXF1ZXN0LmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEiLCByZXF1ZXN0LmdldF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpCisKKyAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCwgIjEyMzQ1Njc4OTAiLmVuY29kZSgidXMtYXNjaWkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjEyMzQ1Njc4OTAiLCByZXF1ZXN0LmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEwIiwgcmVxdWVzdC5nZXRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpKQorCiAgICAgZGVmIHRlc3RfSFRUUEVycm9yX2ludGVyZmFjZShzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIElzc3VlIDEzMjExIHJldmVhbHMgdGhhdCBIVFRQRXJyb3IgZGlkbid0IGltcGxlbWVudCB0aGUgVVJMRXJyb3IKQEAgLTE0MjYsMjMgKzE0NjAsMzEgQEAKICAgICAgICAgZXJyID0gdXJsbGliLmVycm9yLkhUVFBFcnJvcih1cmwsIGNvZGUsIG1zZywgaGRycywgZnApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVyciwgJ3JlYXNvbicpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5yZWFzb24sICdzb21ldGhpbmcgYmFkIGhhcHBlbmVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAnaGRycycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5oZHJzLCAnQ29udGVudC1MZW5ndGg6IDQyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAnaGVhZGVycycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5oZWFkZXJzLCAnQ29udGVudC1MZW5ndGg6IDQyJykKICAgICAgICAgZXhwZWN0ZWRfZXJybXNnID0gJ0hUVFAgRXJyb3IgJXM6ICVzJyAlIChlcnIuY29kZSwgZXJyLm1zZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgZXhwZWN0ZWRfZXJybXNnKQogCi0KIGNsYXNzIFJlcXVlc3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgUHV0UmVxdWVzdChSZXF1ZXN0KToKKyAgICAgICAgbWV0aG9kPSdQVVQnCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZ2V0ID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKICAgICAgICAgc2VsZi5wb3N0ID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17IlgtVGVzdCI6ICJ0ZXN0In0pCisgICAgICAgIHNlbGYuaGVhZCA9IFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsIG1ldGhvZD0nSEVBRCcpCisgICAgICAgIHNlbGYucHV0ID0gc2VsZi5QdXRSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iKQorICAgICAgICBzZWxmLmZvcmNlX3Bvc3QgPSBzZWxmLlB1dFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCisgICAgICAgICAgICBtZXRob2Q9IlBPU1QiKQogCiAgICAgZGVmIHRlc3RfbWV0aG9kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5wb3N0LmdldF9tZXRob2QoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiR0VUIiwgc2VsZi5nZXQuZ2V0X21ldGhvZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJIRUFEIiwgc2VsZi5oZWFkLmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUFVUIiwgc2VsZi5wdXQuZ2V0X21ldGhvZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5mb3JjZV9wb3N0LmdldF9tZXRob2QoKSkKIAogICAgIGRlZiB0ZXN0X2RhdGEoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5nZXQuZGF0YSkKQEAgLTE0NTEsNiArMTQ5MywyNSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5nZXQuZGF0YSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKIAorICAgICMgaXNzdWUgMTY0NjQKKyAgICAjIGlmIHdlIGNoYW5nZSBkYXRhIHdlIG5lZWQgdG8gcmVtb3ZlIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcgorICAgICMgKGNhdXNlIGl0J3MgbW9zdCBwcm9iYWJseSBjYWxjdWxhdGVkIGZvciBwcmV2aW91cyB2YWx1ZSkKKyAgICBkZWYgdGVzdF9zZXR0aW5nX2RhdGFfc2hvdWxkX3JlbW92ZV9jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgc2VsZi5nZXQuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LWxlbmd0aCJdKQorICAgICAgICBzZWxmLmdldC5kYXRhID0gInNwYW0iCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisKKyAgICAjIGlzc3VlIDE3NDg1IHNhbWUgZm9yIGRlbGV0aW5nIGRhdGEuCisgICAgZGVmIHRlc3RfZGVsZXRpbmdfZGF0YV9zaG91bGRfcmVtb3ZlX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICBzZWxmLmdldC5kYXRhID0gJ2ZvbycKKyAgICAgICAgc2VsZi5nZXQuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC1sZW5ndGgiXSkKKyAgICAgICAgZGVsIHNlbGYuZ2V0LmRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKwogICAgIGRlZiB0ZXN0X2dldF9mdWxsX3VybChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldC5nZXRfZnVsbF91cmwoKSkKQEAgLTE0OTIsMjEgKzE1NTMsMTMgQEAKICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9mdWxsX3VybCgpLCB1cmwpCiAKLSAgICBkZWYgdGVzdF9IVFRQRXJyb3JfaW50ZXJmYWNlX2NhbGwoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBJc3N1ZSAxNTcwMSAtIEhUVFBFcnJvciBpbnRlcmZhY2UgaGFzIGluZm8gbWV0aG9kIGF2YWlsYWJsZSBmcm9tIFVSTEVycm9yCi0gICAgICAgICIiIgotICAgICAgICBlcnIgPSB1cmxsaWIucmVxdWVzdC5IVFRQRXJyb3IobXNnPSJzb21ldGhpbmcgYmFkIGhhcHBlbmVkIiwgdXJsPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU9Tm9uZSwgaGRycz0nQ29udGVudC1MZW5ndGg6NDInLCBmcD1Ob25lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdyZWFzb24nKSkKLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoZXJyLCAncmVhc29uJykKLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoZXJyLCAnaW5mbycpCi0gICAgICAgIGFzc2VydCBjYWxsYWJsZShlcnIuaW5mbykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXJyLmluZm8oKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ2Vyci5pbmZvIGNhbGwgZmFpbGVkLicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmluZm8oKSwgIkNvbnRlbnQtTGVuZ3RoOjQyIikKKyAgICBkZWYgdGVzdF91cmxfZnVsbHVybF9nZXRfZnVsbF91cmwoc2VsZik6CisgICAgICAgIHVybHMgPSBbJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcnLAorICAgICAgICAgICAgICAgICdodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXJsbGliMi5odG1sI09LJywKKyAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy5weXRob24ub3JnLz9xcz1xdWVyeSNmcmFnbWVudD10cnVlJyBdCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2Z1bGxfdXJsKCksIHJlcS5mdWxsX3VybCkKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF91cmxsaWIyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKaW5kZXggYjFhYTE1OC4uMDgyNTBjMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQpAQCAtOSw3ICs5LDEwIEBACiBpbXBvcnQgaGFzaGxpYgogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiB0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCi0KK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQogCiBoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogIyBTZWxmLXNpZ25lZCBjZXJ0IGZpbGUgZm9yICdsb2NhbGhvc3QnCkBAIC0xNyw2ICsyMCw3IEBACiAjIFNlbGYtc2lnbmVkIGNlcnQgZmlsZSBmb3IgJ2Zha2Vob3N0bmFtZScKIENFUlRfZmFrZWhvc3RuYW1lID0gb3MucGF0aC5qb2luKGhlcmUsICdrZXljZXJ0Mi5wZW0nKQogCisKICMgTG9vcGJhY2sgaHR0cCBzZXJ2ZXIgaW5mcmFzdHJ1Y3R1cmUKIAogY2xhc3MgTG9vcGJhY2tIdHRwU2VydmVyKGh0dHAuc2VydmVyLkhUVFBTZXJ2ZXIpOgpAQCAtMzUzLDEyICszNTcsMTUgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKFRlc3RVcmxvcGVuLCBzZWxmKS5zZXRVcCgpCiAgICAgICAgICMgSWdub3JlIHByb3hpZXMgZm9yIGxvY2FsaG9zdCB0ZXN0cy4KKyAgICAgICAgc2VsZi5vbGRfZW52aXJvbiA9IG9zLmVudmlyb24uY29weSgpCiAgICAgICAgIG9zLmVudmlyb25bJ05PX1BST1hZJ10gPSAnKicKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGlmIHNlbGYuc2VydmVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisgICAgICAgIG9zLmVudmlyb24uY2xlYXIoKQorICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShzZWxmLm9sZF9lbnZpcm9uKQogICAgICAgICBzdXBlcihUZXN0VXJsb3Blbiwgc2VsZikudGVhckRvd24oKQogCiAgICAgZGVmIHVybG9wZW4oc2VsZiwgdXJsLCBkYXRhPU5vbmUsICoqa3dhcmdzKToKQEAgLTM4NiwxNCArMzkzLDE0IEBACiAgICAgICAgIGhhbmRsZXIucG9ydCA9IHBvcnQKICAgICAgICAgcmV0dXJuIGhhbmRsZXIKIAotICAgIGRlZiBzdGFydF9odHRwc19zZXJ2ZXIoc2VsZiwgcmVzcG9uc2VzPU5vbmUsIGNlcnRmaWxlPUNFUlRfbG9jYWxob3N0KToKKyAgICBkZWYgc3RhcnRfaHR0cHNfc2VydmVyKHNlbGYsIHJlc3BvbnNlcz1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHVybGxpYi5yZXF1ZXN0LCAnSFRUUFNIYW5kbGVyJyk6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdzc2wgc3VwcG9ydCByZXF1aXJlZCcpCiAgICAgICAgIGZyb20gdGVzdC5zc2xfc2VydmVycyBpbXBvcnQgbWFrZV9odHRwc19zZXJ2ZXIKICAgICAgICAgaWYgcmVzcG9uc2VzIGlzIE5vbmU6CiAgICAgICAgICAgICByZXNwb25zZXMgPSBbKDIwMCwgW10sIGIid2UgY2FyZSBhIGJpdCIpXQogICAgICAgICBoYW5kbGVyID0gR2V0UmVxdWVzdEhhbmRsZXIocmVzcG9uc2VzKQotICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZT1jZXJ0ZmlsZSwgaGFuZGxlcl9jbGFzcz1oYW5kbGVyKQorICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBoYW5kbGVyX2NsYXNzPWhhbmRsZXIsICoqa3dhcmdzKQogICAgICAgICBoYW5kbGVyLnBvcnQgPSBzZXJ2ZXIucG9ydAogICAgICAgICByZXR1cm4gaGFuZGxlcgogCkBAIC00ODMsNiArNDkwLDIxIEBACiAgICAgICAgICAgICBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzL2JpemFycmUiICUgaGFuZGxlci5wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNhZGVmYXVsdD1UcnVlKQogCisgICAgZGVmIHRlc3RfaHR0cHNfc25pKHNlbGYpOgorICAgICAgICBpZiBzc2wgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNzbCBtb2R1bGUgcmVxdWlyZWQiKQorICAgICAgICBpZiBub3Qgc3NsLkhBU19TTkk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJTTkkgc3VwcG9ydCByZXF1aXJlZCBpbiBPcGVuU1NMIikKKyAgICAgICAgc25pX25hbWUgPSBOb25lCisgICAgICAgIGRlZiBjYl9zbmkoc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgbm9ubG9jYWwgc25pX25hbWUKKyAgICAgICAgICAgIHNuaV9uYW1lID0gc2VydmVyX25hbWUKKyAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl9zbmkpCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X2h0dHBzX3NlcnZlcihjb250ZXh0PWNvbnRleHQsIGNlcnRmaWxlPUNFUlRfbG9jYWxob3N0KQorICAgICAgICBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmlfbmFtZSwgImxvY2FsaG9zdCIpCisKICAgICBkZWYgdGVzdF9zZW5kaW5nX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X3NlcnZlcigpCiAgICAgICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoImh0dHA6Ly9sb2NhbGhvc3Q6JXMvIiAlIGhhbmRsZXIucG9ydCwKQEAgLTUyOSw3ICs1NTEsNyBAQAogICAgICAgICAjIHNvIHdlIHJ1biB0aGUgdGVzdCBvbmx5IHdoZW4gLXVuZXR3b3JrLy11YWxsIGlzIHNwZWNpZmllZCB0bwogICAgICAgICAjIG1pdGlnYXRlIHRoZSBwcm9ibGVtIGEgYml0IChzZWUgIzE3NTY0KQogICAgICAgICBzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHaXZlbiB0aGF0IGJvdGggVmVyaVNpZ24gYW5kIHZhcmlvdXMgSVNQcyBoYXZlIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHBhc3Qgb3IgYXJlIHByZXNlbnRseSBoaWphY2tpbmcgdmFyaW91cyBpbnZhbGlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9tYWluIG5hbWUgcmVxdWVzdHMgaW4gYW4gYXR0ZW1wdCB0byBib29zdCB0cmFmZmljCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKaW5kZXggN2YzYzkzYS4uZmJhM2NlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQpAQCAtMTY0LDYgKzE2NCwxNCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0dXJsKCksCiAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCNnbG9zc2FyeSIpCiAKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF91cmxfd2l0aGZyYWcoc2VsZik6CisgICAgICAgIHJlZGlyZWN0X3VybF93aXRoX2ZyYWcgPSAiaHR0cDovL2JpdGx5LmNvbS91cmxsaWJyZWRpcmVjdHRlc3QiCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQocmVkaXJlY3RfdXJsX3dpdGhfZnJhZyk6CisgICAgICAgICAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHJlZGlyZWN0X3VybF93aXRoX2ZyYWcpCisgICAgICAgICAgICByZXMgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldHVybCgpLAorICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvZ2xvc3NhcnkuaHRtbCN0ZXJtLWdsb2JhbC1pbnRlcnByZXRlci1sb2NrIikKKwogICAgIGRlZiB0ZXN0X2N1c3RvbV9oZWFkZXJzKHNlbGYpOgogICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgpAQCAtMjE2LDcgKzIyNCw3IEBACiAgICAgICAgICAgICAgICAgZGVidWcodXJsKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZiA9IHVybG9wZW4odXJsLCByZXEsIFRJTUVPVVQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyKQogICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF9lcnI6CiAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAoIkRpZG4ndCBnZXQgZXhwZWN0ZWQgZXJyb3IocykgJXMgZm9yICVzICVzLCBnb3QgJXM6ICVzIiAlCkBAIC0zMzAsMzUgKzMzOCw2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuZnAucmF3Ll9zb2NrLmdldHRpbWVvdXQoKSwgNjApCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLCAicmVxdWlyZXMgU1NMIHN1cHBvcnQiKQotY2xhc3MgSFRUUFNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9zbmkoc2VsZik6Ci0gICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgZGlzYWJsZWQgLSB0ZXN0IHNlcnZlciBuZWVkZWQiKQotICAgICAgICAjIENoZWNrcyB0aGF0IFNlcnZlciBOYW1lIEluZGljYXRpb24gd29ya3MsIGlmIHN1cHBvcnRlZCBieSB0aGUKLSAgICAgICAgIyBPcGVuU1NMIGxpbmtlZCB0by4KLSAgICAgICAgIyBUaGUgc3NsIG1vZHVsZSBpdHNlbGYgZG9lc24ndCBoYXZlIHNlcnZlci1zaWRlIHN1cHBvcnQgZm9yIFNOSSwKLSAgICAgICAgIyBzbyB3ZSByZWx5IG9uIGEgdGhpcmQtcGFydHkgdGVzdCBzaXRlLgotICAgICAgICBleHBlY3Rfc25pID0gc3NsLkhBU19TTkkKLSAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgiWFhYIik6Ci0gICAgICAgICAgICB1ID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiWFhYIikKLSAgICAgICAgICAgIGNvbnRlbnRzID0gdS5yZWFkYWxsKCkKLSAgICAgICAgICAgIGlmIGV4cGVjdF9zbmk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIkdyZWF0IiwgY29udGVudHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiIlVuZm9ydHVuYXRlbHkiLCBjb250ZW50cykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiIkdyZWF0IiwgY29udGVudHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIlVuZm9ydHVuYXRlbHkiLCBjb250ZW50cykKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQXV0aFRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBTVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJOZXR3b3JrVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VTb2NrZXRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHN1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQppbmRleCAyMGVmY2E2Li5iNjg4OGYzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQpAQCAtMTI0LDE2ICsxMjQsMTUgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgVGhpcyBoYXBwZW5zIHdpdGggc29tZSBvdmVyemVhbG91cyBETlMgcHJvdmlkZXJzIHN1Y2ggYXMgT3BlbkROUwogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgc2hvdWxkIG5vdCByZXNvbHZlIGZvciB0ZXN0IHRvIHdvcmsiICUgYm9ndXNfZG9tYWluKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNGIHBhdGNoIDgwOTkxNTogIEluIFNlcCAyMDAzLCBWZXJpU2lnbiBzdGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgaGlnaGphY2tpbmcgaW52YWxpZCAuY29tIGFuZCAubmV0IGFkZHJlc3NlcyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJvb3N0IHRyYWZmaWMgdG8gdGhlaXIgb3duIHNpdGUuICBUaGlzIHRlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFydGVkIGZhaWxpbmcgdGhlbi4gIE9uZSBob3BlcyB0aGUgLmludmFsaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb21haW4gd2lsbCBiZSBzcGFyZWQgdG8gc2VydmUgaXRzIGRlZmluZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwdXJwb3NlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVybGxpYi51cmxvcGVuLCAiaHR0cDovL3d3dy5zYWRmbGtqc2FzYWRmLmNvbS8iKQotICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC51cmxvcGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3NhZGZsa2pzYXNmLmkubnZhbGkuZC8iKQorICAgICAgICBmYWlsdXJlX2V4cGxhbmF0aW9uID0gKCdvcGVuaW5nIGFuIGludmFsaWQgVVJMIGRpZCBub3QgcmFpc2UgT1NFcnJvcjsgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYW4gYmUgY2F1c2VkIGJ5IGEgYnJva2VuIEROUyBzZXJ2ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoZS5nLiByZXR1cm5zIDQwNCBvciBoaWphY2tzIHBhZ2UpJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtc2c9ZmFpbHVyZV9leHBsYW5hdGlvbik6CisgICAgICAgICAgICAjIFNGIHBhdGNoIDgwOTkxNTogIEluIFNlcCAyMDAzLCBWZXJpU2lnbiBzdGFydGVkIGhpZ2hqYWNraW5nCisgICAgICAgICAgICAjIGludmFsaWQgLmNvbSBhbmQgLm5ldCBhZGRyZXNzZXMgdG8gYm9vc3QgdHJhZmZpYyB0byB0aGVpciBvd24KKyAgICAgICAgICAgICMgc2l0ZS4gIFRoaXMgdGVzdCBzdGFydGVkIGZhaWxpbmcgdGhlbi4gIE9uZSBob3BlcyB0aGUgLmludmFsaWQKKyAgICAgICAgICAgICMgZG9tYWluIHdpbGwgYmUgc3BhcmVkIHRvIHNlcnZlIGl0cyBkZWZpbmVkIHB1cnBvc2UuCisgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJodHRwOi8vc2FkZmxranNhc2YuaS5udmFsaS5kLyIpCiAKIAogY2xhc3MgdXJscmV0cmlldmVOZXR3b3JrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKaW5kZXggMzc4YTQyNy4uYzkzOGYwOSAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CkBAIC04NDcsNiArODQ3LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucGF0aCwgJzg2My0xMjM0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXJhbXMsICdwaG9uZS1jb250ZXh0PSsxLTkxNC01NTUnKQogCisgICAgZGVmIHRlc3RfdW53cmFwKHNlbGYpOgorICAgICAgICB1cmwgPSB1cmxsaWIucGFyc2UudW53cmFwKCc8VVJMOnR5cGU6Ly9ob3N0L3BhdGg+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmwsICd0eXBlOi8vaG9zdC9wYXRoJykKKworICAgIGRlZiB0ZXN0X1F1b3Rlcl9yZXByKHNlbGYpOgorICAgICAgICBxdW90ZXIgPSB1cmxsaWIucGFyc2UuUXVvdGVyKHVybGxpYi5wYXJzZS5fQUxXQVlTX1NBRkUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1F1b3RlcicsIHJlcHIocXVvdGVyKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVXJsUGFyc2VUZXN0Q2FzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdmVudi5weSBiL0xpYi90ZXN0L3Rlc3RfdmVudi5weQppbmRleCAwZmFlODhiLi5kYmJlMTU3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ZlbnYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF92ZW52LnB5CkBAIC0xMDksMTMgKzEwOSw2OCBAQAogICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGV4cGVjdGVkLmVuY29kZSgpKQogCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIEVOVl9TVUJESVJTID0gKAorICAgICAgICAgICAgKCdTY3JpcHRzJywpLAorICAgICAgICAgICAgKCdJbmNsdWRlJywpLAorICAgICAgICAgICAgKCdMaWInLCksCisgICAgICAgICAgICAoJ0xpYicsICdzaXRlLXBhY2thZ2VzJyksCisgICAgICAgICkKKyAgICBlbHNlOgorICAgICAgICBFTlZfU1VCRElSUyA9ICgKKyAgICAgICAgICAgICgnYmluJywpLAorICAgICAgICAgICAgKCdpbmNsdWRlJywpLAorICAgICAgICAgICAgKCdsaWInLCksCisgICAgICAgICAgICAoJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSksCisgICAgICAgICAgICAoJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwgJ3NpdGUtcGFja2FnZXMnKSwKKyAgICAgICAgKQorCisgICAgZGVmIGNyZWF0ZV9jb250ZW50cyhzZWxmLCBwYXRocywgZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHNvbWUgZmlsZXMgaW4gdGhlIGVudmlyb25tZW50IHdoaWNoIGFyZSB1bnJlbGF0ZWQKKyAgICAgICAgdG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgICAgICIiIgorICAgICAgICBmb3Igc3ViZGlycyBpbiBwYXRoczoKKyAgICAgICAgICAgIGQgPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqc3ViZGlycykKKyAgICAgICAgICAgIG9zLm1rZGlyKGQpCisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihkLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInU3RpbGwgaGVyZT8nKQorCiAgICAgZGVmIHRlc3Rfb3ZlcndyaXRlX2V4aXN0aW5nKHNlbGYpOgogICAgICAgICAiIiIKLSAgICAgICAgVGVzdCBjb250cm9sIG9mIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGVudmlyb25tZW50IGRpcmVjdG9yeS4KKyAgICAgICAgVGVzdCBjcmVhdGluZyBlbnZpcm9ubWVudCBpbiBhbiBleGlzdGluZyBkaXJlY3RvcnkuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQorICAgICAgICBzZWxmLmNyZWF0ZV9jb250ZW50cyhzZWxmLkVOVl9TVUJESVJTLCAnZm9vJykKKyAgICAgICAgdmVudi5jcmVhdGUoc2VsZi5lbnZfZGlyKQorICAgICAgICBmb3Igc3ViZGlycyBpbiBzZWxmLkVOVl9TVUJESVJTOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqKHN1YmRpcnMgKyAoJ2ZvbycsKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm4pKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGInU3RpbGwgaGVyZT8nKQorCiAgICAgICAgIGJ1aWxkZXIgPSB2ZW52LkVudkJ1aWxkZXIoY2xlYXI9VHJ1ZSkKICAgICAgICAgYnVpbGRlci5jcmVhdGUoc2VsZi5lbnZfZGlyKQorICAgICAgICBmb3Igc3ViZGlycyBpbiBzZWxmLkVOVl9TVUJESVJTOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqKHN1YmRpcnMgKyAoJ2ZvbycsKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGZuKSkKKworICAgIGRlZiBjbGVhcl9kaXJlY3Rvcnkoc2VsZiwgcGF0aCk6CisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocGF0aCwgZm4pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmbikgb3Igb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2Rpcihmbik6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmbikKKworICAgIGRlZiB0ZXN0X3Vub3ZlcndyaXRhYmxlX2ZhaWxzKHNlbGYpOgorICAgICAgICAjY3JlYXRlIGEgZmlsZSBjbGFzaGluZyB3aXRoIGRpcmVjdG9yaWVzIGluIHRoZSBlbnYgZGlyCisgICAgICAgIGZvciBwYXRocyBpbiBzZWxmLkVOVl9TVUJESVJTWzozXToKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHNlbGYuZW52X2RpciwgKnBhdGhzKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE9TRXJyb3IpLCB2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9kaXJlY3Rvcnkoc2VsZi5lbnZfZGlyKQogCiAgICAgZGVmIHRlc3RfdXBncmFkZShzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5IGIvTGliL3Rlc3QvdGVzdF93YWl0My5weQppbmRleCBiZDA2YzhkLi5mNmEwNjVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKQEAgLTcsMTUgKzcsMTEgQEAKIGZyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuCiAKLXRyeToKLSAgICBvcy5mb3JrCi1leGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLmZvcmsgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIpCitpZiBub3QgaGFzYXR0cihvcywgJ2ZvcmsnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3MuZm9yayBub3QgZGVmaW5lZCIpCiAKLXRyeToKLSAgICBvcy53YWl0MwotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy53YWl0MyBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQzIikKK2lmIG5vdCBoYXNhdHRyKG9zLCAnd2FpdDMnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3Mud2FpdDMgbm90IGRlZmluZWQiKQogCiBjbGFzcyBXYWl0M1Rlc3QoRm9ya1dhaXQpOgogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5IGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQppbmRleCA0NjRmZjQwLi4xM2M3ZGYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKQEAgLTMzMSw2ICszMzEsMTkgQEAKICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuX19uYW1lX18gPSBtb2R1bGVfbmFtZQogICAgICAgICAgICAgc3lzLmFyZ3YgPSBhcmd2CiAKKyAgICBkZWYgdGVzdF93YXJuX2V4cGxpY2l0X25vbl9hc2NpaV9maWxlbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiAoIm5vbmFzY2lpXHhlOVx1MjBhYyIsICJzdXJyb2dhdGVcdWRjODAiKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLmZzZW5jb2RlKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdCgidGV4dCIsIFVzZXJXYXJuaW5nLCBmaWxlbmFtZSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLmZpbGVuYW1lLCBmaWxlbmFtZSkKKwogICAgIGRlZiB0ZXN0X3dhcm5fZXhwbGljaXRfdHlwZV9lcnJvcnMoc2VsZik6CiAgICAgICAgICMgd2Fybl9leHBsaWNpdCgpIHNob3VsZCBlcnJvciBvdXQgZ3JhY2VmdWxseSBpZiBpdCBpcyBnaXZlbiBvYmplY3RzCiAgICAgICAgICMgb2YgdGhlIHdyb25nIHR5cGVzLgpAQCAtNzg4LDYgKzgwMSwyNSBAQAogICAgICAgICAgICAgICAgIGVudj1lbnYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldGNvZGUsIDApCiAKK2NsYXNzIEZpbmFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbmFsaXphdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTk0MjE6IHdhcm5pbmdzLndhcm4oKSBzaG91bGQgbm90IGNyYXNoCisgICAgICAgICMgZHVyaW5nIFB5dGhvbiBmaW5hbGl6YXRpb24KKyAgICAgICAgY29kZSA9ICIiIgoraW1wb3J0IHdhcm5pbmdzCit3YXJuID0gd2FybmluZ3Mud2FybgorCitjbGFzcyBBOgorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICB3YXJuKCJ0ZXN0IikKKworYT1BKCkKKyAgICAgICAgIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgIyBub3RlOiAiX19tYWluX18iIGZpbGVuYW1lIGlzIG5vdCBjb3JyZWN0LCBpdCBzaG91bGQgYmUgdGhlIG5hbWUKKyAgICAgICAgIyBvZiB0aGUgc2NyaXB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJ19fbWFpbl9fOjc6IFVzZXJXYXJuaW5nOiB0ZXN0JykKKwogCiBkZWYgc2V0VXBNb2R1bGUoKToKICAgICBweV93YXJuaW5ncy5vbmNlcmVnaXN0cnkuY2xlYXIoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5IGIvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CmluZGV4IDU3MWUzM2YuLjU1MWQ5NWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKQEAgLTcsMTEgKzcsMTUgQEAKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgY29weQogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgogCiAjIFVzZWQgaW4gUmVmZXJlbmNlc1Rlc3RDYXNlLnRlc3RfcmVmX2NyZWF0ZWRfZHVyaW5nX2RlbCgpIC4KIHJlZl9mcm9tX2RlbCA9IE5vbmUKIAorIyBVc2VkIGJ5IEZpbmFsaXplVGVzdENhc2UgYXMgYSBnbG9iYWwgdGhhdCBtYXkgYmUgcmVwbGFjZWQgYnkgTm9uZQorIyB3aGVuIHRoZSBpbnRlcnByZXRlciBzaHV0cyBkb3duLgorX2dsb2JhbF92YXIgPSAnZm9vYmFyJworCiBjbGFzcyBDOgogICAgIGRlZiBtZXRob2Qoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTQ3LDYgKzUxLDExIEBACiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5hcmcpCisgICAgZGVmIHNvbWVfbWV0aG9kKHNlbGYpOgorICAgICAgICByZXR1cm4gNAorICAgIGRlZiBvdGhlcl9tZXRob2Qoc2VsZik6CisgICAgICAgIHJldHVybiA1CisKIAogY2xhc3MgUmVmQ3ljbGU6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtNzk3LDYgKzgwNiwzMCBAQAogICAgICAgICBkZWwgcm9vdAogICAgICAgICBnYy5jb2xsZWN0KCkKIAorICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgeCA9IE9iamVjdCgxKQorICAgICAgICBjYWxsYmFjayA9IGxhbWJkYSByZWY6IE5vbmUKKyAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKHgsIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlZjEuX19jYWxsYmFja19fLCBjYWxsYmFjaykKKworICAgICAgICByZWYyID0gd2Vha3JlZi5yZWYoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVmMi5fX2NhbGxiYWNrX18pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19hdHRyaWJ1dGVfYWZ0ZXJfZGVsZXRpb24oc2VsZik6CisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYoeCwgc2VsZi5jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVmLl9fY2FsbGJhY2tfXykKKyAgICAgICAgZGVsIHgKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVmLl9fY2FsbGJhY2tfXykKKworICAgIGRlZiB0ZXN0X3NldF9jYWxsYmFja19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGEgcmVmOiBOb25lCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZih4LCBjYWxsYmFjaykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICByZWYxLl9fY2FsbGJhY2tfXyA9IGxhbWJkYSByZWY6IE5vbmUKKwogCiBjbGFzcyBTdWJjbGFzc2FibGVXZWFrcmVmVGVzdENhc2UoVGVzdEJhc2UpOgogCkBAIC05MDEsNiArOTM0LDE0MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2JjYWxsZWQsIDApCiAKIAorY2xhc3MgV2Vha01ldGhvZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfc3ViY2xhc3Moc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIE9iamVjdCBzdWJjbGFzcyBvdmVycmlkaW5nIGBzb21lX21ldGhvZGAuIiIiCisgICAgICAgIGNsYXNzIEMoT2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBzb21lX21ldGhvZChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNgorICAgICAgICByZXR1cm4gQworCisgICAgZGVmIHRlc3RfYWxpdmUoc2VsZik6CisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uociwgd2Vha3JlZi5SZWZlcmVuY2VUeXBlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocigpLCB0eXBlKG8uc29tZV9tZXRob2QpKQorICAgICAgICBzZWxmLmFzc2VydElzKHIoKS5fX3NlbGZfXywgbykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCkuX19mdW5jX18sIG8uc29tZV9tZXRob2QuX19mdW5jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocigpKCksIDQpCisKKyAgICBkZWYgdGVzdF9vYmplY3RfZGVhZChzZWxmKToKKyAgICAgICAgbyA9IE9iamVjdCgxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QpCisgICAgICAgIGRlbCBvCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHIoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X21ldGhvZF9kZWFkKHNlbGYpOgorICAgICAgICBDID0gc2VsZi5fc3ViY2xhc3MoKQorICAgICAgICBvID0gQygxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QpCisgICAgICAgIGRlbCBDLnNvbWVfbWV0aG9kCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHIoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3doZW5fb2JqZWN0X2RlYWQoc2VsZik6CisgICAgICAgICMgVGVzdCBjYWxsYmFjayBiZWhhdmlvdXIgd2hlbiBvYmplY3QgZGllcyBmaXJzdC4KKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICBkZWYgY2IoYXJnKToKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChhcmcpCisgICAgICAgIG8gPSBDKDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCwgY2IpCisgICAgICAgIGRlbCBvCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisgICAgICAgICMgQ2FsbGJhY2sgaXMgb25seSBjYWxsZWQgb25jZS4KKyAgICAgICAgQy5zb21lX21ldGhvZCA9IE9iamVjdC5zb21lX21ldGhvZAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW3JdKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfd2hlbl9tZXRob2RfZGVhZChzZWxmKToKKyAgICAgICAgIyBUZXN0IGNhbGxiYWNrIGJlaGF2aW91ciB3aGVuIG1ldGhvZCBkaWVzIGZpcnN0LgorICAgICAgICBDID0gc2VsZi5fc3ViY2xhc3MoKQorICAgICAgICBjYWxscyA9IFtdCisgICAgICAgIGRlZiBjYihhcmcpOgorICAgICAgICAgICAgY2FsbHMuYXBwZW5kKGFyZykKKyAgICAgICAgbyA9IEMoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kLCBjYikKKyAgICAgICAgZGVsIEMuc29tZV9tZXRob2QKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKyAgICAgICAgIyBDYWxsYmFjayBpcyBvbmx5IGNhbGxlZCBvbmNlLgorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW3JdKQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfbm9fY3ljbGVzKHNlbGYpOgorICAgICAgICAjIEEgV2Vha01ldGhvZCBkb2Vzbid0IGNyZWF0ZSBhbnkgcmVmZXJlbmNlIGN5Y2xlIHRvIGl0c2VsZi4KKyAgICAgICAgbyA9IE9iamVjdCgxKQorICAgICAgICBkZWYgY2IoXyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCwgY2IpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocikKKyAgICAgICAgZGVsIHIKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIGRlZiBfZXEoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhICE9IGIpCisgICAgICAgIGRlZiBfbmUoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYSAhPSBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhID09IGIpCisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgeSA9IE9iamVjdCgxKQorICAgICAgICBhID0gd2Vha3JlZi5XZWFrTWV0aG9kKHguc29tZV9tZXRob2QpCisgICAgICAgIGIgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5zb21lX21ldGhvZCkKKyAgICAgICAgYyA9IHdlYWtyZWYuV2Vha01ldGhvZCh4Lm90aGVyX21ldGhvZCkKKyAgICAgICAgZCA9IHdlYWtyZWYuV2Vha01ldGhvZCh5Lm90aGVyX21ldGhvZCkKKyAgICAgICAgIyBPYmplY3RzIGVxdWFsLCBzYW1lIG1ldGhvZAorICAgICAgICBfZXEoYSwgYikKKyAgICAgICAgX2VxKGMsIGQpCisgICAgICAgICMgT2JqZWN0cyBlcXVhbCwgZGlmZmVyZW50IG1ldGhvZAorICAgICAgICBfbmUoYSwgYykKKyAgICAgICAgX25lKGEsIGQpCisgICAgICAgIF9uZShiLCBjKQorICAgICAgICBfbmUoYiwgZCkKKyAgICAgICAgIyBPYmplY3RzIHVuZXF1YWwsIHNhbWUgb3IgZGlmZmVyZW50IG1ldGhvZAorICAgICAgICB6ID0gT2JqZWN0KDIpCisgICAgICAgIGUgPSB3ZWFrcmVmLldlYWtNZXRob2Qoei5zb21lX21ldGhvZCkKKyAgICAgICAgZiA9IHdlYWtyZWYuV2Vha01ldGhvZCh6Lm90aGVyX21ldGhvZCkKKyAgICAgICAgX25lKGEsIGUpCisgICAgICAgIF9uZShhLCBmKQorICAgICAgICBfbmUoYiwgZSkKKyAgICAgICAgX25lKGIsIGYpCisgICAgICAgIGRlbCB4LCB5LCB6CisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAjIERlYWQgV2Vha01ldGhvZHMgY29tcGFyZSBieSBpZGVudGl0eQorICAgICAgICByZWZzID0gYSwgYiwgYywgZCwgZSwgZgorICAgICAgICBmb3IgcSBpbiByZWZzOgorICAgICAgICAgICAgZm9yIHIgaW4gcmVmczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEgPT0gciwgcSBpcyByKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSAhPSByLCBxIGlzIG5vdCByKQorCisgICAgZGVmIHRlc3RfaGFzaGluZyhzZWxmKToKKyAgICAgICAgIyBBbGl2ZSBXZWFrTWV0aG9kcyBhcmUgaGFzaGFibGUgaWYgdGhlIHVuZGVybHlpbmcgb2JqZWN0IGlzCisgICAgICAgICMgaGFzaGFibGUuCisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgeSA9IE9iamVjdCgxKQorICAgICAgICBhID0gd2Vha3JlZi5XZWFrTWV0aG9kKHguc29tZV9tZXRob2QpCisgICAgICAgIGIgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5zb21lX21ldGhvZCkKKyAgICAgICAgYyA9IHdlYWtyZWYuV2Vha01ldGhvZCh5Lm90aGVyX21ldGhvZCkKKyAgICAgICAgIyBTaW5jZSBXZWFrTWV0aG9kIG9iamVjdHMgYXJlIGVxdWFsLCB0aGUgaGFzaGVzIHNob3VsZCBiZSBlcXVhbC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYXNoKGIpKQorICAgICAgICBoYSA9IGhhc2goYSkKKyAgICAgICAgIyBEZWFkIFdlYWtNZXRob2RzIHJldGFpbiB0aGVpciBvbGQgaGFzaCB2YWx1ZQorICAgICAgICBkZWwgeCwgeQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGIpLCBoYSkKKyAgICAgICAgIyBJZiBpdCB3YXNuJ3QgaGFzaGVkIHdoZW4gYWxpdmUsIGEgZGVhZCBXZWFrTWV0aG9kIGNhbm5vdCBiZSBoYXNoZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgYykKKworCiBjbGFzcyBNYXBwaW5nVGVzdENhc2UoVGVzdEJhc2UpOgogCiAgICAgQ09VTlQgPSAxMApAQCAtMTM4OCw2ICsxNTU1LDE1MSBAQAogICAgIGRlZiBfcmVmZXJlbmNlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fX3JlZi5jb3B5KCkKIAorCitjbGFzcyBGaW5hbGl6ZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIEE6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfY29sbGVjdF9pZl9uZWNlc3Nhcnkoc2VsZik6CisgICAgICAgICMgd2UgY3JlYXRlIG5vIHJlZi1jeWNsZXMgc28gaW4gQ1B5dGhvbiBubyBnYyBzaG91bGQgYmUgbmVlZGVkCisgICAgICAgIGlmIHN5cy5pbXBsZW1lbnRhdGlvbi5uYW1lICE9ICdjcHl0aG9uJzoKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9maW5hbGl6ZShzZWxmKToKKyAgICAgICAgZGVmIGFkZCh4LHkseik6CisgICAgICAgICAgICByZXMuYXBwZW5kKHggKyB5ICsgeikKKyAgICAgICAgICAgIHJldHVybiB4ICsgeSArIHoKKworICAgICAgICBhID0gc2VsZi5BKCkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmID0gd2Vha3JlZi5maW5hbGl6ZShhLCBhZGQsIDY3LCA0Mywgej04OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCAoYSwgYWRkLCAoNjcsNDMpLCB7J3onOjg5fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCAxOTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmRldGFjaCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxpdmUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgWzE5OV0pCisKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZiA9IHdlYWtyZWYuZmluYWxpemUoYSwgYWRkLCA2NywgNDMsIDg5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCAoYSwgYWRkLCAoNjcsNDMsODkpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgKGEsIGFkZCwgKDY3LDQzLDg5KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFtdKQorCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIGYgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIGFkZCwgeD02NywgeT00Mywgej04OSkKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxOTldKQorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLkEoKQorICAgICAgICByZXMgPSBbXQorCisgICAgICAgIGYxID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjEnKQorICAgICAgICBmMiA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2YyJykKKyAgICAgICAgZjMgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmMycpCisgICAgICAgIGY0ID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjQnKQorICAgICAgICBmNSA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2Y1JykKKworICAgICAgICAjIG1ha2Ugc3VyZSBmaW5hbGl6ZXJzIGNhbiBrZWVwIHRoZW1zZWx2ZXMgYWxpdmUKKyAgICAgICAgZGVsIGYxLCBmNAorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMi5hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYzLmFsaXZlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjUuYWxpdmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGY1LmRldGFjaCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGY1LmFsaXZlKQorCisgICAgICAgIGY1KCkgICAgICAgICAgICAgICAgICAgICAgICMgbm90aGluZyBiZWNhdXNlIHByZXZpb3VzbHkgdW5yZWdpc3RlcmVkCisgICAgICAgIHJlcy5hcHBlbmQoJ0EnKQorICAgICAgICBmMygpICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2YzJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMy5hbGl2ZSkKKyAgICAgICAgcmVzLmFwcGVuZCgnQicpCisgICAgICAgIGYzKCkgICAgICAgICAgICAgICAgICAgICAgICMgbm90aGluZyBiZWNhdXNlIHByZXZpb3VzbHkgY2FsbGVkCisgICAgICAgIHJlcy5hcHBlbmQoJ0MnKQorICAgICAgICBkZWwgYQorICAgICAgICBzZWxmLl9jb2xsZWN0X2lmX25lY2Vzc2FyeSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT4gcmVzLmFwcGVuZCgnZjQnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2YyJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjIuYWxpdmUpCisgICAgICAgIHJlcy5hcHBlbmQoJ0QnKQorICAgICAgICBmMigpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IGNhbGxlZCBieSBnYworCisgICAgICAgIGV4cGVjdGVkID0gWydBJywgJ2YzJywgJ0InLCAnQycsICdmNCcsICdmMicsICdmMScsICdEJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYWxsX2ZyZWVkKHNlbGYpOgorICAgICAgICAjIHdlIHdhbnQgYSB3ZWFrcmVmYWJsZSBzdWJjbGFzcyBvZiB3ZWFrcmVmLmZpbmFsaXplCisgICAgICAgIGNsYXNzIE15RmluYWxpemVyKHdlYWtyZWYuZmluYWxpemUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGEgPSBzZWxmLkEoKQorICAgICAgICByZXMgPSBbXQorICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoMTIzKQorICAgICAgICBmID0gTXlGaW5hbGl6ZXIoYSwgY2FsbGJhY2spCisKKyAgICAgICAgd3JfY2FsbGJhY2sgPSB3ZWFrcmVmLnJlZihjYWxsYmFjaykKKyAgICAgICAgd3JfZiA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgIGRlbCBjYWxsYmFjaywgZgorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHdyX2NhbGxiYWNrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHdyX2YoKSkKKworICAgICAgICBkZWwgYQorICAgICAgICBzZWxmLl9jb2xsZWN0X2lmX25lY2Vzc2FyeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3JfY2FsbGJhY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3JfZigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgWzEyM10pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcnVuX2luX2NoaWxkKGNscyk6CisgICAgICAgIGRlZiBlcnJvcigpOgorICAgICAgICAgICAgIyBDcmVhdGUgYW4gYXRleGl0IGZpbmFsaXplciBmcm9tIGluc2lkZSBhIGZpbmFsaXplciBjYWxsZWQKKyAgICAgICAgICAgICMgYXQgZXhpdC4gIFRoaXMgc2hvdWxkIGJlIHRoZSBuZXh0IHRvIGJlIHJ1bi4KKyAgICAgICAgICAgIGcxID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIHByaW50LCAnZzEnKQorICAgICAgICAgICAgcHJpbnQoJ2YzIGVycm9yJykKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgICMgY2xzIHNob3VsZCBzdGF5IGFsaXZlIHRpbGwgYXRleGl0IGNhbGxiYWNrcyBydW4KKyAgICAgICAgZjEgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmMScsIF9nbG9iYWxfdmFyKQorICAgICAgICBmMiA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2YyJywgX2dsb2JhbF92YXIpCisgICAgICAgIGYzID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIGVycm9yKQorICAgICAgICBmNCA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2Y0JywgX2dsb2JhbF92YXIpCisKKyAgICAgICAgYXNzZXJ0IGYxLmF0ZXhpdCA9PSBUcnVlCisgICAgICAgIGYyLmF0ZXhpdCA9IEZhbHNlCisgICAgICAgIGFzc2VydCBmMy5hdGV4aXQgPT0gVHJ1ZQorICAgICAgICBhc3NlcnQgZjQuYXRleGl0ID09IFRydWUKKworICAgIGRlZiB0ZXN0X2F0ZXhpdChzZWxmKToKKyAgICAgICAgcHJvZyA9ICgnZnJvbSB0ZXN0LnRlc3Rfd2Vha3JlZiBpbXBvcnQgRmluYWxpemVUZXN0Q2FzZTsnKworICAgICAgICAgICAgICAgICdGaW5hbGl6ZVRlc3RDYXNlLnJ1bl9pbl9jaGlsZCgpJykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCctYycsIHByb2cpCisgICAgICAgIG91dCA9IG91dC5kZWNvZGUoJ2FzY2lpJykuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBbJ2Y0IGZvb2JhcicsICdmMyBlcnJvcicsICdnMScsICdmMSBmb29iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGInWmVyb0RpdmlzaW9uRXJyb3InIGluIGVycikKKworCiBsaWJyZWZ0ZXN0ID0gIiIiIERvY3Rlc3QgZm9yIGV4YW1wbGVzIGluIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZTogd2Vha3JlZi5yc3QKIAogPj4+IGltcG9ydCB3ZWFrcmVmCkBAIC0xNDc2LDEwICsxNzg4LDEyIEBACiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIFJlZmVyZW5jZXNUZXN0Q2FzZSwKKyAgICAgICAgV2Vha01ldGhvZFRlc3RDYXNlLAogICAgICAgICBNYXBwaW5nVGVzdENhc2UsCiAgICAgICAgIFdlYWtWYWx1ZURpY3Rpb25hcnlUZXN0Q2FzZSwKICAgICAgICAgV2Vha0tleURpY3Rpb25hcnlUZXN0Q2FzZSwKICAgICAgICAgU3ViY2xhc3NhYmxlV2Vha3JlZlRlc3RDYXNlLAorICAgICAgICBGaW5hbGl6ZVRlc3RDYXNlLAogICAgICAgICApCiAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChzeXMubW9kdWxlc1tfX25hbWVfX10pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5IGIvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkKaW5kZXggY2I0Y2RlOS4uZWY0Y2U1NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkKQEAgLTgsNyArOCw3IEBACiBmcm9tIHBsYXRmb3JtIGltcG9ydCBtYWNoaW5lCiAKICMgRG8gdGhpcyBmaXJzdCBzbyB0ZXN0IHdpbGwgYmUgc2tpcHBlZCBpZiBtb2R1bGUgZG9lc24ndCBleGlzdAotc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd3aW5yZWcnKQorc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd3aW5yZWcnLCByZXF1aXJlZF9vbj1bJ3dpbiddKQogIyBOb3cgaW1wb3J0IGV2ZXJ5dGhpbmcKIGZyb20gd2lucmVnIGltcG9ydCAqCiAKQEAgLTU3LDEzICs1NywxMyBAQAogICAgIGRlZiBkZWxldGVfdHJlZShzZWxmLCByb290LCBzdWJrZXkpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoa2V5ID0gT3BlbktleShyb290LCBzdWJrZXksIEtFWV9BTExfQUNDRVNTKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgc3Via2V5IGRvZXMgbm90IGV4aXN0CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdWJzdWJrZXkgPSBFbnVtS2V5KGhrZXksIDApCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBubyBtb3JlIHN1YmtleXMKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgc2VsZi5kZWxldGVfdHJlZShoa2V5LCBzdWJzdWJrZXkpCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgICAgIFF1ZXJ5SW5mb0tleShpbnRfc3ViX2tleSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiSXQgYXBwZWFycyB0aGUgQ2xvc2VLZXkoKSBmdW5jdGlvbiBkb2VzICIKICAgICAgICAgICAgICAgICAgICAgICAibm90IGNsb3NlIHRoZSBhY3R1YWwga2V5ISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyAuLi4gYW5kIGNsb3NlIHRoYXQga2V5IHRoYXQgd2F5IDotKQogICAgICAgICBpbnRfa2V5ID0gaW50KGtleSkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgUXVlcnlJbmZvS2V5KGludF9rZXkpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkl0IGFwcGVhcnMgdGhlIGtleS5DbG9zZSgpIGZ1bmN0aW9uICIKICAgICAgICAgICAgICAgICAgICAgICAiZG9lcyBub3QgY2xvc2UgdGhlIGFjdHVhbCBrZXkhIikKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIF9yZWFkX3Rlc3RfZGF0YShzZWxmLCByb290X2tleSwgc3Via2V5c3RyPSJzdWJfa2V5IiwgT3BlbktleT1PcGVuS2V5KToKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBFbnVtVmFsdWUoc3ViX2tleSwgaW5kZXgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhIGluIHRlc3RfZGF0YSwgVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3QgcmVhZCBiYWNrIHRoZSBjb3JyZWN0IHRlc3QgZGF0YSIpCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgRW51bUtleShrZXksIDEpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIldhcyBhYmxlIHRvIGdldCBhIHNlY29uZCBrZXkgd2hlbiBJIG9ubHkgaGF2ZSBvbmUhIikKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGtleS5DbG9zZSgpCkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgICMgU2hvdWxkbnQgYmUgYWJsZSB0byBkZWxldGUgaXQgdHdpY2UhCiAgICAgICAgICAgICBEZWxldGVLZXkoa2V5LCBzdWJrZXlzdHIpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkRlbGV0aW5nIHRoZSBrZXkgdHdpY2Ugc3VjY2VlZGVkIikKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBrZXkuQ2xvc2UoKQogICAgICAgICBEZWxldGVLZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCkBAIC0xNzksNyArMTc5LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAga2V5ID0gT3BlbktleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ291bGQgb3BlbiB0aGUgbm9uLWV4aXN0ZW50IGtleSIpCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6ICMgVXNlIHRoaXMgZXJyb3IgbmFtZSB0aGlzIHRpbWUKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICMgVXNlIHRoaXMgZXJyb3IgbmFtZSB0aGlzIHRpbWUKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfdGVzdF9hbGwoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIpOgpAQCAtMjMwLDcgKzIzMCw3IEBACiAKICAgICBkZWYgdGVzdF9pbmV4aXN0YW50X3JlbW90ZV9yZWdpc3RyeShzZWxmKToKICAgICAgICAgY29ubmVjdCA9IGxhbWJkYTogQ29ubmVjdFJlZ2lzdHJ5KCJhYmNkZWZnaGlqa2wiLCBIS0VZX0NVUlJFTlRfVVNFUikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjb25uZWN0KQogCiAgICAgZGVmIHRlc3RFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3Moc2VsZik6CiAgICAgICAgIHIgPSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MoIiV3aW5kaXIlXFx0ZXN0IikKQEAgLTI0Miw4ICsyNDIsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIENvbm5lY3RSZWdpc3RyeShOb25lLCBIS0VZX0xPQ0FMX01BQ0hJTkUpIGFzIGg6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoLmhhbmRsZSwgMCkKLSAgICAgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhhbmRsZSwgMCkKIAogICAgIGRlZiB0ZXN0X2NoYW5naW5nX3ZhbHVlKHNlbGYpOgpAQCAtNDA3LDcgKzQwNyw3IEBACiAgICAgICAgICAgICAgICAgb3Blbl9mYWlsID0gbGFtYmRhOiBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzY0S0VZKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3Blbl9mYWlsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9wZW5fZmFpbCkKIAogICAgICAgICAgICAgIyBOb3cgZXhwbGljaXRseSBvcGVuIHRoZSA2NC1iaXQgdmVyc2lvbiBvZiB0aGUga2V5CiAgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogICAgICAgICAgICAgb3Blbl9mYWlsID0gbGFtYmRhOiBPcGVuS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3Blbl9mYWlsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Blbl9mYWlsKQogCiAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgMzItYml0IGtleSBpcyBhY3R1YWxseSB0aGVyZQogICAgICAgICAgICAgd2l0aCBPcGVuS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkgYi9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CmluZGV4IGViN2Y3NWYuLjYxZDg2NGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQpAQCAtMjIsNyArMjIsNyBAQAogICAgICAgICBrZXkgPSB3aW5yZWcuT3BlbktleUV4KHdpbnJlZy5IS0VZX0NVUlJFTlRfVVNFUiwKICAgICAgICAgICAgICAgICAiQXBwRXZlbnRzXFNjaGVtZXNcQXBwc1wuRGVmYXVsdFx7MH1cLkRlZmF1bHQiLmZvcm1hdChzb3VuZCkpCiAgICAgICAgIHJldHVybiB3aW5yZWcuRW51bVZhbHVlKGtleSwgMClbMV0gIT0gIiIKLSAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKIAogY2xhc3MgQmVlcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQppbmRleCA1NDk2NTM0Li42MTRlNTk4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQpAQCAtMTAsNiArMTAsNyBAQAogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdlYWtyZWYKIApAQCAtMjQwLDcgKzI0MSw2IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFVC5YTUwsIEVULmZyb21zdHJpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuUEksIEVULlByb2Nlc3NpbmdJbnN0cnVjdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFVC5YTUxQYXJzZXIsIEVULlhNTFRyZWVCdWlsZGVyKQogCiAgICAgZGVmIHRlc3Rfc2ltcGxlb3BzKHNlbGYpOgogICAgICAgICAjIEJhc2ljIG1ldGhvZCBzYW5pdHkgY2hlY2tzLgpAQCAtNDMzLDE1ICs0MzMsNiBAQAogICAgICAgICAgICAgICAgICcgICA8ZW1wdHktZWxlbWVudCAvPlxuJwogICAgICAgICAgICAgICAgICc8L3Jvb3Q+JykKIAotICAgICAgICBwYXJzZXIgPSBFVC5YTUxUcmVlQnVpbGRlcigpICMgMS4yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgc2VsZi5zZXJpYWxpemVfY2hlY2socGFyc2VyLmNsb3NlKCksCi0gICAgICAgICAgICAgICAgJzxyb290PlxuJwotICAgICAgICAgICAgICAgICcgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PlxuJwotICAgICAgICAgICAgICAgICcgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWxcbicKLSAgICAgICAgICAgICAgICAnICAgPGVtcHR5LWVsZW1lbnQgLz5cbicKLSAgICAgICAgICAgICAgICAnPC9yb290PicpCi0KICAgICAgICAgdGFyZ2V0ID0gRVQuVHJlZUJ1aWxkZXIoKQogICAgICAgICBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PXRhcmdldCkKICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKQEAgLTk1OSw2ICs5NTAsMTYwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJpYWxpemVkLCBleHBlY3RlZCkKIAogCitjbGFzcyBYTUxQdWxsUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2ZlZWQoc2VsZiwgcGFyc2VyLCBkYXRhLCBjaHVua19zaXplPU5vbmUpOgorICAgICAgICBpZiBjaHVua19zaXplIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCBjaHVua19zaXplKToKKyAgICAgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhW2k6aStjaHVua19zaXplXSkKKworICAgIGRlZiBhc3NlcnRfZXZlbnRfdGFncyhzZWxmLCBwYXJzZXIsIGV4cGVjdGVkKToKKyAgICAgICAgZXZlbnRzID0gcGFyc2VyLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGFjdGlvbiwgZWxlbS50YWcpIGZvciBhY3Rpb24sIGVsZW0gaW4gZXZlbnRzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWwoc2VsZik6CisgICAgICAgIGZvciBjaHVua19zaXplIGluIChOb25lLCAxLCA1KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNodW5rX3NpemU9Y2h1bmtfc2l6ZSk6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHJvb3Q+XG4gIDxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbFxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIsIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICAgICAgICAgKCdlbmQnLCAnZWxlbWVudCcpLAorICAgICAgICAgICAgICAgICAgICAoJ2VuZCcsICdlbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAncm9vdCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2ZlZWRfd2hpbGVfaXRlcmF0aW5nKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKCkKKyAgICAgICAgaXQgPSBwYXJzZXIucmVhZF9ldmVudHMoKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50PlxuIikKKyAgICAgICAgYWN0aW9uLCBlbGVtID0gbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYWN0aW9uLCBlbGVtLnRhZyksICgnZW5kJywgJ2VsZW1lbnQnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iKQorICAgICAgICBhY3Rpb24sIGVsZW0gPSBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhY3Rpb24sIGVsZW0udGFnKSwgKCdlbmQnLCAncm9vdCcpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgorICAgICAgICAgICAgbmV4dChpdCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWxfd2l0aF9ucyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QgeG1sbnM9J25hbWVzcGFjZSc+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVtcHR5LWVsZW1lbnQvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICgnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne25hbWVzcGFjZX1lbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAne25hbWVzcGFjZX1yb290JyldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X25zX2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydC1ucycsICdlbmQtbnMnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290IHhtbG5zPSduYW1lc3BhY2UnPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxpc3QocGFyc2VyLnJlYWRfZXZlbnRzKCkpLAorICAgICAgICAgICAgWygnc3RhcnQtbnMnLCAoJycsICduYW1lc3BhY2UnKSldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKSwgWygnZW5kLW5zJywgTm9uZSldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCAnZW5kJykpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnZW5kJywgJ3tmb299ZW1wdHktZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne2Zvb31lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD4iKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ2VuZCcsICdyb290JyldKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5jbG9zZSgpKQorCisgICAgZGVmIHRlc3RfZXZlbnRzX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBldmVudHMgY2FuIGJlIHNvbWUgc2VxdWVuY2UgdGhhdCdzIG5vdCBqdXN0IGEgdHVwbGUgb3IgbGlzdAorICAgICAgICBldmVudHNldCA9IHsnZW5kJywgJ3N0YXJ0J30KKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9ZXZlbnRzZXQpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGZvbz5iYXI8L2Zvbz4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZm9vJyksICgnZW5kJywgJ2ZvbycpXSkKKworICAgICAgICBjbGFzcyBEdW1teUl0ZXI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5ldmVudHMgPSBpdGVyKFsnc3RhcnQnLCAnZW5kJywgJ3N0YXJ0LW5zJ10pCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLmV2ZW50cykKKworICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKGV2ZW50cz1EdW1teUl0ZXIoKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8Zm9vPmJhcjwvZm9vPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdmb28nKSwgKCdlbmQnLCAnZm9vJyldKQorCisKKyAgICBkZWYgdGVzdF91bmtub3duX2V2ZW50KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydCcsICdlbmQnLCAnYm9ndXMnKSkKKworCiAjCiAjIHhpbmNsdWRlIHRlc3RzIChzYW1wbGVzIGZyb20gYXBwZW5kaXggQyBvZiB0aGUgeGluY2x1ZGUgc3BlY2lmaWNhdGlvbikKIApAQCAtMTMwMCw3ICsxNDQ1LDcgQEAKICAgICAgICAgIyBEb24ndCBjcmFzaCB3aGVuIHVzaW5nIGN1c3RvbSBlbnRpdGllcy4KIAogICAgICAgICBFTlRJVElFUyA9IHsncnNxdW8nOiAnXHUyMDE5JywgJ2xzcXVvJzogJ1x1MjAxOCd9Ci0gICAgICAgIHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKICAgICAgICAgcGFyc2VyLmVudGl0eS51cGRhdGUoRU5USVRJRVMpCiAgICAgICAgIHBhcnNlci5mZWVkKCIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uIFNZU1RFTSAicGFwLXYxNS0yMDAxLTAxLTMxLmR0ZCIgW10+CkBAIC0xNjM4LDYgKzE3ODMsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbmQoJy4vdGFnW2xhc3QoKS0xXScpLmF0dHJpYlsnY2xhc3MnXSwgJ2MnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZmluZCgnLi90YWdbbGFzdCgpLTJdJykuYXR0cmliWydjbGFzcyddLCAnYicpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1stMV0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCktMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCkrMV0nKQorCiAgICAgZGVmIHRlc3RfZmluZGFsbChzZWxmKToKICAgICAgICAgZSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgICAgICBlWzJdID0gRVQuWE1MKFNBTVBMRV9TRUNUSU9OKQpAQCAtMTg5Nyw3ICsyMDQ3LDcgQEAKICAgICAgICAgIyBNaW1pY2sgU2ltcGxlVEFMJ3MgYmVoYXZpb3VyIChpc3N1ZSAjMTYwODkpOiBib3RoIHZlcnNpb25zIG9mCiAgICAgICAgICMgVHJlZUJ1aWxkZXIgc2hvdWxkIGJlIGFibGUgdG8gY29wZSB3aXRoIGEgc3ViY2xhc3Mgb2YgdGhlCiAgICAgICAgICMgcHVyZSBQeXRob24gRWxlbWVudCBjbGFzcy4KLSAgICAgICAgYmFzZSA9IEVULl9FbGVtZW50CisgICAgICAgIGJhc2UgPSBFVC5fRWxlbWVudF9QeQogICAgICAgICAjIE5vdCBmcm9tIGEgQyBleHRlbnNpb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQogICAgICAgICAjIEZvcmNlIHNvbWUgbXVsdGlwbGUgaW5oZXJpdGFuY2Ugd2l0aCBhIEMgY2xhc3MgdG8gbWFrZSB0aGluZ3MKQEAgLTIyNTYsNiArMjQwNiwxOCBAQAogICAgICAgICAgICAgRVQudG9zdHJpbmcocm9vdCwgJ3V0Zi0xNicpLAogICAgICAgICAgICAgYicnLmpvaW4oRVQudG9zdHJpbmdsaXN0KHJvb3QsICd1dGYtMTYnKSkpCiAKKyAgICBkZWYgdGVzdF9zaG9ydF9lbXB0eV9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgcm9vdCA9IEVULmZyb21zdHJpbmcoJzx0YWc+YTx4IC8+Yjx5PjwveT5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJyksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9RmFsc2UpLAorICAgICAgICAgICAgJzx0YWc+YTx4PjwveD5iPHk+PC95PmM8L3RhZz4nKQorCiAKIGNsYXNzIFBhcnNlRXJyb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKQEAgLTIzMjEsOCArMjQ4MywxMSBAQAogCiAgICAgIyBUZXN0IHRoYXQgdGhlIEMgYWNjZWxlcmF0b3Igd2FzIG5vdCBpbXBvcnRlZCBmb3IgcHlFVAogICAgIGRlZiB0ZXN0X2NvcnJlY3RfaW1wb3J0X3B5RVQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlFVC5FbGVtZW50Ll9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5RVQuU3ViRWxlbWVudC5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKKyAgICAgICAgIyBUaGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW4gUHl0aG9uIGNvZGUgaXMgdHlwZXMuRnVuY3Rpb25UeXBlLAorICAgICAgICAjIHdoaWxlIHRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgX2VsZW1lbnR0cmVlIGlzCisgICAgICAgICMgPGNsYXNzICd3cmFwcGVyX2Rlc2NyaXB0b3InPgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlFVC5FbGVtZW50Ll9faW5pdF9fLCB0eXBlcy5GdW5jdGlvblR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShweUVULlhNTFBhcnNlci5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIzOTIsNiArMjU1Nyw3IEBACiAgICAgICAgIEVsZW1lbnRJdGVyVGVzdCwKICAgICAgICAgVHJlZUJ1aWxkZXJUZXN0LAogICAgICAgICBYTUxQYXJzZXJUZXN0LAorICAgICAgICBYTUxQdWxsUGFyc2VyVGVzdCwKICAgICAgICAgQnVnc1Rlc3QsCiAgICAgICAgIF0KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKaW5kZXggYmNhYTcyNC4uYjNmZjdhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cywgc3RydWN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfZnJlc2hfbW9kdWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCiBjRVQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLApAQCAtMzMsMTQgKzM0LDIyIEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoY0VULCAncmVxdWlyZXMgX2VsZW1lbnR0cmVlJykKK0BzdXBwb3J0LmNweXRob25fb25seQogY2xhc3MgVGVzdEFjY2VsZXJhdG9ySW1wb3J0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCB0aGF0IHRoZSBDIGFjY2VsZXJhdG9yIHdhcyBpbXBvcnRlZCwgYXMgZXhwZWN0ZWQKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVQoc2VsZik6CisgICAgICAgICMgU3ViRWxlbWVudCBpcyBhIGZ1bmN0aW9uIHNvIGl0IHJldGFpbnMgX2VsZW1lbnR0cmVlIGFzIGl0cyBtb2R1bGUuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VULlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVRfYWxpYXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VUX2FsaWFzLlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKKyAgICBkZWYgdGVzdF9wYXJzZXJfY29tZXNfZnJvbV9DKHNlbGYpOgorICAgICAgICAjIFRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbiBQeXRob24gY29kZSBpcyB0eXBlcy5GdW5jdGlvblR5cGUsCisgICAgICAgICMgd2hpbGUgdGhlIHR5cGUgb2YgbWV0aG9kcyBkZWZpbmVkIGluc2lkZSBfZWxlbWVudHRyZWUgaXMKKyAgICAgICAgIyA8Y2xhc3MgJ3dyYXBwZXJfZGVzY3JpcHRvcic+CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjRVQuRWxlbWVudC5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQorCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGNFVCwgJ3JlcXVpcmVzIF9lbGVtZW50dHJlZScpCiBAc3VwcG9ydC5jcHl0aG9uX29ubHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKaW5kZXggY2M1MjI1OS4uOTliM2VkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTE1LDYgKzE1LDEwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogdHJ5OgorICAgIGltcG9ydCBnemlwCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3ppcCA9IE5vbmUKK3RyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQpAQCAtMjE2LDcgKzIyMCw3IEBACiAgICAgICAgICAgICB4bWxycGMuY2xpZW50LlNlcnZlclByb3h5KCdodHRwczovL2xvY2FsaG9zdDo5OTk5JykuYmFkX2Z1bmN0aW9uKCkKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc19zc2wsICJ4bWxycGMgY2xpZW50J3MgZXJyb3Igd2l0aCBTU0wgc3VwcG9ydCIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc19zc2wpCiAKIGNsYXNzIEhlbHBlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM3Niw2ICszODAsMTEgQEAKICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Rpdic6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nCiAKKyAgICAgICAgY2xhc3MgRml4dHVyZToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXREYXRhKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICc0MicKKwogICAgIGRlZiBteV9mdW5jdGlvbigpOgogICAgICAgICAnJydUaGlzIGlzIG15IGZ1bmN0aW9uJycnCiAgICAgICAgIHJldHVybiBUcnVlCkBAIC00MDcsNyArNDE2LDggQEAKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihwb3cpCiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgseTogeCt5LCAnYWRkJykKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihteV9mdW5jdGlvbikKLSAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnN0YW5jZShUZXN0SW5zdGFuY2VDbGFzcygpKQorICAgICAgICB0ZXN0SW5zdGFuY2UgPSBUZXN0SW5zdGFuY2VDbGFzcygpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UodGVzdEluc3RhbmNlLCBhbGxvd19kb3R0ZWRfbmFtZXM9VHJ1ZSkKICAgICAgICAgZXZ0LnNldCgpCiAKICAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cwpAQCAtNTAwLDcgKzUxMCw3IEBACiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBleGNfbWVzcyA9IGUuaGVhZGVycy5nZXQoJ1gtZXhjZXB0aW9uJykKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICMgSWdub3JlIHNvY2tldC5lcnJvcnMgaGVyZS4KKyAgICAgICAgIyBJZ25vcmUgT1NFcnJvcnMgaGVyZS4KICAgICAgICAgZXhjX21lc3MgPSBzdHIoZSkKIAogICAgIGlmIGV4Y19tZXNzIGFuZCAndGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnIGluIGV4Y19tZXNzLmxvd2VyKCk6CkBAIC01MTUsNyArNTI1LDcgQEAKICAgICAgICAgZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcChzZWxmKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKS5teV9mdW5jdGlvbigpCi0gICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChyZWFzb24pCkBAIC01NTMsNyArNTYzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNTY2LDcgKzU3Niw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoc3RhcnRfc3RyaW5nLCBlbmRfc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc3RyaW5nICsgZW5kX3N0cmluZykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC01ODcsMTIgKzU5NywxMyBAQAogICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24xKHNlbGYpOgogICAgICAgICBleHBlY3RlZF9tZXRob2RzID0gc2V0KFsncG93JywgJ2RpdicsICdteV9mdW5jdGlvbicsICdhZGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLmxpc3RNZXRob2RzJywgJ3N5c3RlbS5tZXRob2RIZWxwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUnLCAnc3lzdGVtLm11bHRpY2FsbCddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLm1ldGhvZFNpZ25hdHVyZScsICdzeXN0ZW0ubXVsdGljYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpeHR1cmUnXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBtZXRoID0gcC5zeXN0ZW0ubGlzdE1ldGhvZHMoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobWV0aCksIGV4cGVjdGVkX21ldGhvZHMpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjA1LDcgKzYxNiw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIGRpdmhlbHAgPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZoZWxwLCAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02MTksNyArNjMwLDcgQEAKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbXlmdW5jdGlvbiA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ215X2Z1bmN0aW9uJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlmdW5jdGlvbiwgJ1RoaXMgaXMgbXkgZnVuY3Rpb24nKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTYzMiw3ICs2NDMsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBkaXZzaWcgPSBwLnN5c3RlbS5tZXRob2RTaWduYXR1cmUoJ2RpdicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdnNpZywgJ3NpZ25hdHVyZXMgbm90IHN1cHBvcnRlZCcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjQ5LDcgKzY2MCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZF9yZXN1bHQsIDIrMykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93X3Jlc3VsdCwgNioqOCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2X3Jlc3VsdCwgMTI3Ly80MikKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02NzAsNyArNjgxLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnJlc3VsdHNbMF1bJ2ZhdWx0U3RyaW5nJ10sCiAgICAgICAgICAgICAgICAgJzxjbGFzcyBcJ0V4Y2VwdGlvblwnPjptZXRob2QgInRoaXNfaXNfbm90X2V4aXN0cyIgJwogICAgICAgICAgICAgICAgICdpcyBub3Qgc3VwcG9ydGVkJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02ODYsNiArNjk3LDEyIEBACiAgICAgICAgICMgVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0aW1lb3V0LgogICAgICAgICBzZWxmLnRlc3Rfc2ltcGxlMSgpCiAKKyAgICBkZWYgdGVzdF9hbGxvd19kb3R0ZWRfbmFtZXNfdHJ1ZShzZWxmKToKKyAgICAgICAgIyBYWFggYWxzbyBuZWVkIGFsbG93X2RvdHRlZF9uYW1lc19mYWxzZSB0ZXN0LgorICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC9SUEMyIiAlIChBRERSLCBQT1JUKSkKKyAgICAgICAgZGF0YSA9IHNlcnZlci5GaXh0dXJlLmdldERhdGEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICc0MicpCisKICAgICBkZWYgdGVzdF91bmljb2RlX2hvc3Qoc2VsZik6CiAgICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovLyVzOiVkL1JQQzIiICUgKEFERFIsIFBPUlQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5hZGQoImEiLCAiXHhlOSIpLCAiYVx4ZTkiKQpAQCAtNzkzLDYgKzgxMCw3IEBACiAKICNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgZ3ppcCBlbmNvZGluZyB3b3JrcyBpbiBib3RoIGRpcmVjdGlvbnMKICMoZm9yIGEgcmVxdWVzdCBhbmQgdGhlIHJlc3BvbnNlKQorQHVuaXR0ZXN0LnNraXBJZihnemlwIGlzIE5vbmUsICdyZXF1aXJlcyBnemlwJykKIGNsYXNzIEd6aXBTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgogICAgICNhIHJlcXVlc3QgaGFuZGxlciB0aGF0IHN1cHBvcnRzIGtlZXAtYWxpdmUgYW5kIGxvZ3MgcmVxdWVzdHMgaW50byBhCiAgICAgI2NsYXNzIHZhcmlhYmxlCkBAIC05MjMsNyArOTQxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtOTM2LDcgKzk1NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgcC5wb3coNiw4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKSBhbmQgaGFzYXR0cihlLCAiaGVhZGVycyIpOgogICAgICAgICAgICAgICAgICMgVGhlIHR3byBzZXJ2ZXItc2lkZSBlcnJvciBoZWFkZXJzIHNob3VsZG4ndCBiZSBzZW50IGJhY2sgaW4gdGhpcyBjYXNlCkBAIC05NTYsNyArOTc0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBwLnBvdyg2LDgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpIGFuZCBoYXNhdHRyKGUsICJoZWFkZXJzIik6CiAgICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgZ2V0IGVycm9yIGluZm8gaW4gdGhlIHJlc3BvbnNlCkBAIC0xMDg0LDIzICsxMTAyLDEzIEBACiAKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgotICAgIHhtbHJwY190ZXN0cyA9IFtYTUxSUENUZXN0Q2FzZSwgSGVscGVyVGVzdENhc2UsIERhdGVUaW1lVGVzdENhc2UsCi0gICAgICAgICBCaW5hcnlUZXN0Q2FzZSwgRmF1bHRUZXN0Q2FzZV0KLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoU2ltcGxlU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIpCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgZ3ppcAotICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEd6aXBTZXJ2ZXJUZXN0Q2FzZSkKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgI2d6aXAgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNlcnZlclByb3h5VGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChGYWlsaW5nU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChDR0lIYW5kbGVyVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAorICAgICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2UsIFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlLAorICAgICAgICAgICAgU2ltcGxlU2VydmVyVGVzdENhc2UsIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSwKKyAgICAgICAgICAgIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMiwgR3ppcFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgTXVsdGlQYXRoU2VydmVyVGVzdENhc2UsIFNlcnZlclByb3h5VGVzdENhc2UsIEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgIENHSUhhbmRsZXJUZXN0Q2FzZSkKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp4bWxycGNfdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weQppbmRleCBkZmI1ZjlhLi4wMGFjYTE5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGNfbmV0LnB5CkBAIC05LDMyICs5LDcgQEAKIAogaW1wb3J0IHhtbHJwYy5jbGllbnQgYXMgeG1scnBjbGliCiAKLWNsYXNzIEN1cnJlbnRUaW1lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9jdXJyZW50X3RpbWUoc2VsZik6Ci0gICAgICAgICMgR2V0IHRoZSBjdXJyZW50IHRpbWUgZnJvbSB4bWxycGMuY29tLiAgVGhpcyBjb2RlIGV4ZXJjaXNlcwotICAgICAgICAjIHRoZSBtaW5pbWFsIEhUVFAgZnVuY3Rpb25hbGl0eSBpbiB4bWxycGNsaWIuCi0gICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWUueG1scnBjLmNvbSBpcyB1bnJlbGlhYmxlIikKLSAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vdGltZS54bWxycGMuY29tL1JQQzIiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0MCA9IHNlcnZlci5jdXJyZW50VGltZS5nZXRDdXJyZW50VGltZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5ldHdvcmsgZXJyb3I6ICVzIiAlIGUpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIFBlcmZvcm0gYSBtaW5pbWFsIHNhbml0eSBjaGVjayBvbiB0aGUgcmVzdWx0LCBqdXN0IHRvIGJlIHN1cmUKLSAgICAgICAgIyB0aGUgcmVxdWVzdCBtZWFucyB3aGF0IHdlIHRoaW5rIGl0IG1lYW5zLgotICAgICAgICB0MSA9IHhtbHJwY2xpYi5EYXRlVGltZSgpCi0KLSAgICAgICAgZHQwID0geG1scnBjbGliLl9kYXRldGltZV90eXBlKHQwLnZhbHVlKQotICAgICAgICBkdDEgPSB4bWxycGNsaWIuX2RhdGV0aW1lX3R5cGUodDEudmFsdWUpCi0gICAgICAgIGlmIGR0MCA+IGR0MToKLSAgICAgICAgICAgIGRlbHRhID0gZHQwIC0gZHQxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWx0YSA9IGR0MSAtIGR0MAotICAgICAgICAjIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHN5c3RlbSB0aW1lIGhlcmUgYW5kIHRoZSBzeXN0ZW0KLSAgICAgICAgIyB0aW1lIG9uIHRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCBiZSB0b28gYmlnLgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVsdGEuZGF5cyA8PSAxKQorY2xhc3MgUHl0aG9uQnVpbGRlcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3B5dGhvbl9idWlsZGVycyhzZWxmKToKICAgICAgICAgIyBHZXQgdGhlIGxpc3Qgb2YgYnVpbGRlcnMgZnJvbSB0aGUgWE1MUlBDIGJ1aWxkYm90IGludGVyZmFjZSBhdApAQCAtNDIsNyArMTcsNyBAQAogICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly9idWlsZGJvdC5weXRob24ub3JnL2FsbC94bWxycGMvIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYnVpbGRlcnMgPSBzZXJ2ZXIuZ2V0QWxsQnVpbGRlcnMoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZXR3b3JrIGVycm9yOiAlcyIgJSBlKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNlcnZlcignY2xvc2UnKSgpKQpAQCAtNTUsNyArMzAsNyBAQAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ3VycmVudFRpbWVUZXN0KQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFB5dGhvbkJ1aWxkZXJzVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CmluZGV4IGFkMGMwYjcuLjcyNDliMTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKQEAgLTEsNyArMSw3IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdGltZQogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN0cnVjdApAQCAtNTU3LDcgKzU1Nyw3IEBACiAgICAgICAgICAgICAgICAgaWYgb3MuYWx0c2VwIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBwYXRoX3NwbGl0LmV4dGVuZChmbi5zcGxpdChvcy5hbHRzZXApKQogICAgICAgICAgICAgICAgIGlmICdfX3B5Y2FjaGVfXycgaW4gcGF0aF9zcGxpdDoKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBpbXAuc291cmNlX2Zyb21fY2FjaGUoZm4pCisgICAgICAgICAgICAgICAgICAgIGZuID0gaW1wb3J0bGliLnV0aWwuc291cmNlX2Zyb21fY2FjaGUoZm4pCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgZm4gPSBmbls6LTFdCiAKQEAgLTU5MSw2ICs1OTEsMzQgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWRJbignZW1haWwvX19pbml0X18ucHknLCBuYW1lcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWRJbignZW1haWwvbWltZS90ZXh0LnB5JywgbmFtZXMpCiAKKyAgICBkZWYgdGVzdF93cml0ZV9maWx0ZXJlZF9weXRob25fcGFja2FnZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHRlc3QKKyAgICAgICAgcGFja2FnZWRpciA9IG9zLnBhdGguZGlybmFtZSh0ZXN0Ll9fZmlsZV9fKQorCisgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CisKKyAgICAgICAgICAgICMgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIHRlc3QgZm9sZGVyIGdpdmVzIGVycm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAjIChvbiB0aGUgYmFkc3ludGF4Xy4uLiBmaWxlcykKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgcmVwb3J0U0lPOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKKyAgICAgICAgICAgIHJlcG9ydFN0ciA9IHJlcG9ydFNJTy5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1N5bnRheEVycm9yJyBpbiByZXBvcnRTdHIpCisKKyAgICAgICAgICAgICMgdGhlbiBjaGVjayB0aGF0IHRoZSBmaWx0ZXIgd29ya3Mgb24gdGhlIHdob2xlIHBhY2thZ2UKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgcmVwb3J0U0lPOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpciwgZmlsdGVyZnVuYz1sYW1iZGEgd2hhdGV2ZXI6IEZhbHNlKQorICAgICAgICAgICAgcmVwb3J0U3RyID0gcmVwb3J0U0lPLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU3ludGF4RXJyb3InIG5vdCBpbiByZXBvcnRTdHIpCisKKyAgICAgICAgICAgICMgdGhlbiBjaGVjayB0aGF0IHRoZSBmaWx0ZXIgd29ya3Mgb24gaW5kaXZpZHVhbCBmaWxlcworICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyByZXBvcnRTSU86CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyLCBmaWx0ZXJmdW5jPWxhbWJkYSBmbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCcgbm90IGluIGZuKQorICAgICAgICAgICAgcmVwb3J0U3RyID0gcmVwb3J0U0lPLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGlmIHJlcG9ydFN0cjoKKyAgICAgICAgICAgICAgICBwcmludChyZXBvcnRTdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1N5bnRheEVycm9yJyBub3QgaW4gcmVwb3J0U3RyKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfd2l0aF9vcHRpbWl6YXRpb24oc2VsZik6CiAgICAgICAgIGltcG9ydCBlbWFpbAogICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKGVtYWlsLl9fZmlsZV9fKQpAQCAtNjAwLDcgKzYyOCw3IEBACiAgICAgICAgIGV4dCA9ICcucHlvJyBpZiBvcHRsZXZlbCA9PSAxIGVsc2UgJy5weWMnCiAKICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgXAotICAgICAgICAgICAgICAgICB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIsIG9wdGltaXplPW9wdGxldmVsKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIsIG9wdGltaXplPW9wdGxldmVsKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKIAogICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCkBAIC02MzAsNiArNjU4LDI2IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIpCiAKKyAgICBkZWYgdGVzdF93cml0ZV9weXRob25fZGlyZWN0b3J5X2ZpbHRlcmVkKHNlbGYpOgorICAgICAgICBvcy5ta2RpcihURVNURk4yKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QxLnB5IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoInByaW50KDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MiAqIDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KFRFU1RGTjIsIGZpbHRlcmZ1bmM9bGFtYmRhIGZuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgZm4uZW5kc3dpdGgoJ21vZDIucHknKSkKKworICAgICAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWRJbignbW9kMS5weScsIG5hbWVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21vZDIucHknLCBuYW1lcykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfbm9uX3B5ZmlsZShzZWxmKToKICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKQEAgLTczMywyNSArNzgxLDI1IEBACiAgICAgZGVmIHRlc3RfZXh0cmFjdF9oYWNrZXJzX2FyY25hbWVzX3dpbmRvd3Nfb25seShzZWxmKToKICAgICAgICAgIiIiVGVzdCBjb21iaW5hdGlvbiBvZiBwYXRoIGZpeGluZyBhbmQgd2luZG93cyBuYW1lIHNhbml0aXphdGlvbi4iIiIKICAgICAgICAgd2luZG93c19oYWNrbmFtZXMgPSBbCi0gICAgICAgICAgICAgICAgKHInLi5cZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLi5cL2Zvb1wvYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidmb28vXC4uXC9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ2Zvb1wvLi4vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzpmb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOi8vZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzpcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcY29ua3lcbW91bnRwb2ludFxmb29cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFxcY29ua3lcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vY29ua3kvL21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXGNvbmt5XFxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy8/L0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcP1xDOlxmb29cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOi8uLi9DOi9mb28vYmFyJywgJ0NfL2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidhOmJcYzxkPmV8ZiJnP2gqaScsICdiL2NfZF9lX2ZfZ19oX2knKSwKLSAgICAgICAgICAgICAgICAoJy4uLy4uL2Zvby4uLy4uL2JhLi5yJywgJ2Zvby9iYS4ucicpLAorICAgICAgICAgICAgKHInLi5cZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicuLlwvZm9vXC9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInZm9vL1wuLlwvYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2Zvb1wvLi4vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOmZvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzovZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOi8vZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOlxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ1xcY29ua3lcbW91bnRwb2ludFxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy8vL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ1xcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy8vY29ua3kvL21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ1xcY29ua3lcXG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy8vPy9DOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ1xcP1xDOlxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6Ly4uL0M6L2Zvby9iYXInLCAnQ18vZm9vL2JhcicpLAorICAgICAgICAgICAgKHInYTpiXGM8ZD5lfGYiZz9oKmknLCAnYi9jX2RfZV9mX2dfaF9pJyksCisgICAgICAgICAgICAoJy4uLy4uL2Zvby4uLy4uL2JhLi5yJywgJ2Zvby9iYS4ucicpLAogICAgICAgICBdCiAgICAgICAgIHNlbGYuX3Rlc3RfZXh0cmFjdF9oYWNrZXJzX2FyY25hbWVzKHdpbmRvd3NfaGFja25hbWVzKQogCkBAIC04NzcsMTAgKzkyNSwxMCBAQAogICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX3ZlcnNpb24oc2VsZik6CiAgICAgICAgICMgRmlsZSBoYXMgYW4gZXh0cmFjdF92ZXJzaW9uIG9mIDEyMAogICAgICAgICBkYXRhID0gKGInUEtceDAzXHgwNHhceDAwXHgwMFx4MDBceDAwXHgwMCFwXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhQS1x4MDFceDAyeFx4MDN4XHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDAwIXBceGExQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNicKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMC9ceDAwXHgwMFx4MDBceDFmXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhQS1x4MDFceDAyeFx4MDN4XHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDAhcFx4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDYnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMC9ceDAwXHgwMFx4MDBceDFmXHgwMFx4MDBceDAwXHgwMFx4MDAnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW8uQnl0ZXNJTyhkYXRhKSwgJ3InKQpAQCAtOTEzLDcgKzk2MSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ2EnKSBhcyB6ZjoKICAgICAgICAgICAgICAgICB6Zi53cml0ZXN0cihmaWxlbmFtZSwgY29udGVudCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdDb3VsZCBub3QgYXBwZW5kIGRhdGEgdG8gYSBub24tZXhpc3RlbnQgemlwIGZpbGUuJykKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKQEAgLTk4NSw3ICsxMDMzLDcgQEAKICAgICAgICAgZnAuc2VlaygwLCAwKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZmlsZS5pc196aXBmaWxlKGZwKSkKIAotICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19JT0Vycm9yKHNlbGYpOgorICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19PU0Vycm9yKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIGEgcGFydGlhbGx5LWNvbnN0cnVjdGVkCiAgICAgICAgICMgWmlwRmlsZSBpbnN0YW5jZSBpcyBmaW5hbGl6ZWQ7IHRoaXMgdGVzdHMgZm9yIHJlZ3Jlc3Npb24gb24gU0YgdHJhY2tlcgogICAgICAgICAjIGJ1ZyAjNDAzODcxLgpAQCAtOTk3LDcgKzEwNDUsNyBAQAogICAgICAgICAjIGl0IGlzIGlnbm9yZWQsIGJ1dCB0aGUgdXNlciBzaG91bGQgYmUgc3VmZmljaWVudGx5IGFubm95ZWQgYnkKICAgICAgICAgIyB0aGUgbWVzc2FnZSBvbiB0aGUgb3V0cHV0IHRoYXQgcmVncmVzc2lvbiB3aWxsIGJlIG5vdGljZWQKICAgICAgICAgIyBxdWlja2x5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCiAKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlX3JhaXNlc19CYWRaaXBGaWxlKHNlbGYpOgogICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKQEAgLTEwNjYsMTEgKzExMTQsMTEgQEAKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9jb21wcmVzc2lvbihzZWxmKToKICAgICAgICAgIyBkYXRhIGlzIGRlY2xhcmVkIGFzIHNocnVuaywgYnV0IGFjdHVhbGx5IGRlZmxhdGVkCiAgICAgICAgIGRhdGEgPSAoYidQS1x4MDNceDA0Llx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFx4MDNceDAwUEtceDAxJwotICAgICAgICBiJ1x4MDIuXHgwMy5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJwotICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiJ1x4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAnCi0gICAgICAgIGInL1x4MDBceDAwXHgwMCFceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgICAgICAgICAgYidceDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFx4MDNceDAwUEtceDAxJworICAgICAgICAgICAgICAgIGInXHgwMi5ceDAzLlx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAnCisgICAgICAgICAgICAgICAgYicvXHgwMFx4MDBceDAwIVx4MDBceDAwXHgwMFx4MDBceDAwJykKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyhkYXRhKSwgJ3InKSBhcyB6aXBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgemlwZi5vcGVuLCAneCcpCiAKQEAgLTExODQsNyArMTIzMiw3IEBACiAgICAgZGVmIHRlc3Rfb3Blbl9lbXB0eV9maWxlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE3MTA3MDM6IENoZWNrIHRoYXQgb3BlbmluZyBhIGZpbGUgd2l0aCBsZXNzIHRoYW4gMjIgYnl0ZXMKICAgICAgICAgIyByYWlzZXMgYSBCYWRaaXBGaWxlIGV4Y2VwdGlvbiAocmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzbHkgdW5oZWxwZnVsCi0gICAgICAgICMgSU9FcnJvcikKKyAgICAgICAgIyBPU0Vycm9yKQogICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwRmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICdyJykKQEAgLTEyMzIsNTcgKzEyODAsNTcgQEAKIGNsYXNzIFN0b3JlZEJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX1NUT1JFRAogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXDAwM1wwMDRcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6cicKLSAgICAgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCi0gICAgICAgICAgICBiJ2lsZWhlbGxvLEF3b3JsZFAnCi0gICAgICAgICAgICBiJ0tcMDAxXDAwMlwwMjRcMDAzXDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OicKLSAgICAgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKLSAgICAgICAgICAgIGInXDBcMFwwXDBcMFwwXDBcMjAwXDAwMVwwXDBcMFwwMDBhZmknCi0gICAgICAgICAgICBiJ2xlUEtcMDA1XDAwNlwwXDBcMFwwXDAwMVwwXDAwMVwwMDAzXDAwMCcKLSAgICAgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJykKKyAgICAgICAgYidQS1wwMDNcMDA0XDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OnInCisgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCisgICAgICAgIGInaWxlaGVsbG8sQXdvcmxkUCcKKyAgICAgICAgYidLXDAwMVwwMDJcMDI0XDAwM1wwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzonCisgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKKyAgICAgICAgYidcMFwwXDBcMFwwXDBcMFwyMDBcMDAxXDBcMFwwXDAwMGFmaScKKyAgICAgICAgYidsZVBLXDAwNVwwMDZcMFwwXDBcMFwwMDFcMFwwMDFcMDAwM1wwMDAnCisgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJykKIAogQHJlcXVpcmVzX3psaWIKIGNsYXNzIERlZmxhdGVCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9ERUZMQVRFRAogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBufVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCi0gICAgICAgICAgICBiJz1ceDEzXHgwMFBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDA4XHgwMG4nCi0gICAgICAgICAgICBiJ31ceDBjPUZBS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDUnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCi0gICAgICAgICAgICBiJ1x4MDBhZmlsZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAnCi0gICAgICAgICAgICBiJ1x4MDFceDAwM1x4MDBceDAwXHgwMDNceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMFx4MDBceDA4XHgwMG59XHgwYz1GQScKKyAgICAgICAgYidLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCisgICAgICAgIGInPVx4MTNceDAwUEtceDAxXHgwMlx4MTRceDAzXHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbicKKyAgICAgICAgYid9XHgwYz1GQUtFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1JworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHgwMGFmaWxlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCcKKyAgICAgICAgYidceDAxXHgwMDNceDAwXHgwMFx4MDAzXHgwMFx4MDBceDAwXHgwMFx4MDAnKQogCiBAcmVxdWlyZXNfYnoyCiBjbGFzcyBCemlwMkJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX0JaSVAyCiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0U4XHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKLSAgICAgICAgICAgIGInaWxlQlpoOTFBWSZTWVx4ZDRceGE4XHhjYScKLSAgICAgICAgICAgIGInXHg3Zlx4MDBceDAwXHgwZlx4MTFceDgwQFx4MDBceDA2RFx4OTBceDgwIFx4MDAgXHhhNScKLSAgICAgICAgICAgIGInUFx4ZDkhXHgwM1x4MDNceDEzXHgxM1x4MTNceDg5XHhhOVx4YTlceGMydTU6XHg5ZicKLSAgICAgICAgICAgIGInXHg4Ylx4YjkiXHg5YyhIalRlP1x4ODBQS1x4MDFceDAyXHgxNCcKLSAgICAgICAgICAgIGInXHgwM1x4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQUtFOCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMCBceDgwXHg4MFx4ODFceDAwXHgwMFx4MDBceDAwYWZpbGVQSycKLSAgICAgICAgICAgIGInXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMFx4MDBbXHgwMCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRThceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZUJaaDkxQVkmU1lceGQ0XHhhOFx4Y2EnCisgICAgICAgIGInXHg3Zlx4MDBceDAwXHgwZlx4MTFceDgwQFx4MDBceDA2RFx4OTBceDgwIFx4MDAgXHhhNScKKyAgICAgICAgYidQXHhkOSFceDAzXHgwM1x4MTNceDEzXHgxM1x4ODlceGE5XHhhOVx4YzJ1NTpceDlmJworICAgICAgICBiJ1x4OGJceGI5Ilx4OWMoSGpUZT9ceDgwUEtceDAxXHgwMlx4MTQnCisgICAgICAgIGInXHgwM1x4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQUtFOCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWxlUEsnCisgICAgICAgIGInXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMFx4MDBbXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwJykKIAogQHJlcXVpcmVzX2x6bWEKIGNsYXNzIEx6bWFCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9MWk1BCiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKLSAgICAgICAgICAgIGInaWxlXHRceDA0XHgwNVx4MDBdXHgwMFx4MDBceDAwXHgwNFx4MDA0XHgxOUknCi0gICAgICAgICAgICBiJ1x4ZWVceDhkXHhlOVx4MTdceDg5OjNgXHRxIS44XHgwMFBLJwotICAgICAgICAgICAgYidceDAxXHgwMlx4MTRceDAzXHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJwotICAgICAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsJwotICAgICAgICAgICAgYidlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwM1x4MDBceDAwJwotICAgICAgICAgICAgYidceDAwPlx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJworICAgICAgICBiJ0tFXHgxYlx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCisgICAgICAgIGInaWxlXHRceDA0XHgwNVx4MDBdXHgwMFx4MDBceDAwXHgwNFx4MDA0XHgxOUknCisgICAgICAgIGInXHhlZVx4OGRceGU5XHgxN1x4ODk6M2BcdHEhLjhceDAwUEsnCisgICAgICAgIGInXHgwMVx4MDJceDE0XHgwM1x4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWwnCisgICAgICAgIGInZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMCcKKyAgICAgICAgYidceDAwPlx4MDBceDAwXHgwMFx4MDBceDAwJykKIAogCiBjbGFzcyBEZWNyeXB0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTI5MSwyMiArMTMzOSwyMiBAQAogICAgIFpJUCBmaWxlLiIiIgogCiAgICAgZGF0YSA9ICgKLSAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDBceDFhXHgwMCcKLSAgICBiJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwMHRlc3QudHh0XHhmYVx4MTBceGEwZ2x5fFx4ZmEtXHhjNVx4YzA9XHhmOXknCi0gICAgYidceDE4XHhlMFx4YThyXHhiM1p9TGdceGJjXHhhZVx4Zjl8XHg5Ylx4MTlceGU0XHg4Ylx4YmFceGJiKVx4OGNceGIwXHhkYmwnCi0gICAgYidQS1x4MDFceDAyXHgxNFx4MDBceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDAnCi0gICAgYidceDFhXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCBceDAwXHhiNlx4ODEnCi0gICAgYidceDAwXHgwMFx4MDBceDAwdGVzdC50eHRQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDA2XHgwMCcKLSAgICBiJ1x4MDBceDAwTFx4MDBceDAwXHgwMFx4MDBceDAwJyApCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMFx4MWFceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwMHRlc3QudHh0XHhmYVx4MTBceGEwZ2x5fFx4ZmEtXHhjNVx4YzA9XHhmOXknCisgICAgICAgIGInXHgxOFx4ZTBceGE4clx4YjNafUxnXHhiY1x4YWVceGY5fFx4OWJceDE5XHhlNFx4OGJceGJhXHhiYilceDhjXHhiMFx4ZGJsJworICAgICAgICBiJ1BLXHgwMVx4MDJceDE0XHgwMFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDFhXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCBceDAwXHhiNlx4ODEnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMHRlc3QudHh0UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwNlx4MDAnCisgICAgICAgIGInXHgwMFx4MDBMXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKICAgICBkYXRhMiA9ICgKLSAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDInCi0gICAgYidceDAwXHgwMFx4MDRceDAwXHgxNVx4MDB6ZXJvVVRcdFx4MDBceDAzXHhkNlx4OGJceDkyR1x4ZGFceDhiXHg5MkdVeFx4MDQnCi0gICAgYidceDAwXHhlOFx4MDNceGU4XHgwM1x4Yzc8TVx4YjVhXHhjZVhceGEzWSZceDhie29FXHhkN1x4OWRceDhjXHg5OFx4MDJceGMwJwotICAgIGInUEtceDA3XHgwOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFBLXHgwMVx4MDJceDE3XHgwMycKLSAgICBiJ1x4MTRceDAwXHRceDAwXHgwOFx4MDBceGNmfTM4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJwotICAgIGInXHgwNFx4MDBcclx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4YTRceDgxXHgwMFx4MDBceDAwXHgwMHplJwotICAgIGIncm9VVFx4MDVceDAwXHgwM1x4ZDZceDhiXHg5MkdVeFx4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxJwotICAgIGInXHgwMFx4MDFceDAwP1x4MDBceDAwXHgwMFtceDAwXHgwMFx4MDBceDAwXHgwMCcgKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDInCisgICAgICAgIGInXHgwMFx4MDBceDA0XHgwMFx4MTVceDAwemVyb1VUXHRceDAwXHgwM1x4ZDZceDhiXHg5MkdceGRhXHg4Ylx4OTJHVXhceDA0JworICAgICAgICBiJ1x4MDBceGU4XHgwM1x4ZThceDAzXHhjNzxNXHhiNWFceGNlWFx4YTNZJlx4OGJ7b0VceGQ3XHg5ZFx4OGNceDk4XHgwMlx4YzAnCisgICAgICAgIGInUEtceDA3XHgwOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFBLXHgwMVx4MDJceDE3XHgwMycKKyAgICAgICAgYidceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKKyAgICAgICAgYidceDA0XHgwMFxyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhhNFx4ODFceDAwXHgwMFx4MDBceDAwemUnCisgICAgICAgIGIncm9VVFx4MDVceDAwXHgwM1x4ZDZceDhiXHg5MkdVeFx4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxJworICAgICAgICBiJ1x4MDBceDAxXHgwMD9ceDAwXHgwMFx4MDBbXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKIAogICAgIHBsYWluID0gYid6aXBmaWxlLnB5IGVuY3J5cHRpb24gdGVzdCcKICAgICBwbGFpbjIgPSBiJ1x4MDAnKjUxMgpAQCAtMTY2OCw2ICsxNzE2LDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfTFpNQQogCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CmluZGV4IGY3Y2I4YjkuLjNmMTYwNDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CkBAIC0xLDEzICsxLDEyIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBtYXJzaGFsCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9pbXBvcnRob29rcyBpbXBvcnQgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UsIHRlc3Rfc3JjLCB0ZXN0X2NvCiAKIGZyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZSwgWmlwSW5mbywgWklQX1NUT1JFRCwgWklQX0RFRkxBVEVECiAKQEAgLTE3LDYgKzE2LDE0IEBACiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IGlvCiBmcm9tIHRyYWNlYmFjayBpbXBvcnQgZXh0cmFjdF90YiwgZXh0cmFjdF9zdGFjaywgcHJpbnRfdGIKKwordGVzdF9zcmMgPSAiIiJcCitkZWYgZ2V0X25hbWUoKToKKyAgICByZXR1cm4gX19uYW1lX18KK2RlZiBnZXRfZmlsZSgpOgorICAgIHJldHVybiBfX2ZpbGVfXworIiIiCit0ZXN0X2NvID0gY29tcGlsZSh0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQogcmFpc2Vfc3JjID0gJ2RlZiBkb19yYWlzZSgpOiByYWlzZSBUeXBlRXJyb3JcbicKIAogZGVmIG1ha2VfcHljKGNvLCBtdGltZSwgc2l6ZSk6CkBAIC0yNyw3ICszNCw4IEBACiAgICAgICAgICAgICBtdGltZSA9IGludChtdGltZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG10aW1lID0gaW50KC0weDEwMDAwMDAwMCArIGludChtdGltZSkpCi0gICAgcHljID0gaW1wLmdldF9tYWdpYygpICsgc3RydWN0LnBhY2soIjxpaSIsIGludChtdGltZSksIHNpemUgJiAweEZGRkZGRkZGKSArIGRhdGEKKyAgICBweWMgPSAoaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSICsKKyAgICAgICAgc3RydWN0LnBhY2soIjxpaSIsIGludChtdGltZSksIHNpemUgJiAweEZGRkZGRkZGKSArIGRhdGEpCiAgICAgcmV0dXJuIHB5YwogCiBkZWYgbW9kdWxlX3BhdGhfdG9fZG90dGVkX25hbWUocGF0aCk6CkBAIC00MiwxMCArNTAsMjcgQEAKIFRFU1RQQUNLMiA9ICJ6aXB0ZXN0cGFja2FnZTIiCiBURU1QX1pJUCA9IG9zLnBhdGguYWJzcGF0aCgianVuazk1MTQyLnppcCIpCiAKLXB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKFRFU1RNT0QgKyAnLnB5JykKK3B5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVE1PRCArICcucHknKQogcHljX2V4dCA9ICgnLnB5YycgaWYgX19kZWJ1Z19fIGVsc2UgJy5weW8nKQogCiAKK2NsYXNzIEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5tZXRhX3BhdGggPSBzeXMubWV0YV9wYXRoWzpdCisgICAgICAgIHNlbGYucGF0aF9ob29rcyA9IHN5cy5wYXRoX2hvb2tzWzpdCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgc2VsZi5tb2R1bGVzX2JlZm9yZSA9IHN1cHBvcnQubW9kdWxlc19zZXR1cCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5wYXRoCisgICAgICAgIHN5cy5tZXRhX3BhdGhbOl0gPSBzZWxmLm1ldGFfcGF0aAorICAgICAgICBzeXMucGF0aF9ob29rc1s6XSA9IHNlbGYucGF0aF9ob29rcworICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCisgICAgICAgIHN1cHBvcnQubW9kdWxlc19jbGVhbnVwKCpzZWxmLm1vZHVsZXNfYmVmb3JlKQorCisKIGNsYXNzIFVuY29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKIAogICAgIGNvbXByZXNzaW9uID0gWklQX1NUT1JFRApAQCAtMTk2LDYgKzIyMSw3IEBACiAgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCiAgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6aW5mby5jb21tZW50ID0gYiJzcGFtIgogICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCiAgICAgICAgICAgICB6LmNsb3NlKCkKIApAQCAtMjQ1LDYgKzI3MSw3IEBACiAgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCiAgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6aW5mby5jb21tZW50ID0gYiJlZ2dzIgogICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCiAgICAgICAgICAgICB6LmNsb3NlKCkKIApAQCAtNDU5LDcgKzQ4Niw3IEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmxvYWRfbW9kdWxlLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmdldF9jb2RlLCAnYWJjJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHouZ2V0X2RhdGEsICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgei5nZXRfZGF0YSwgJ2FiYycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5nZXRfc291cmNlLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmlzX3BhY2thZ2UsICdhYmMnKQogICAgICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKaW5kZXggZjdmMzM5OC4uODRiYTVlMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CkBAIC0yMjcsMTMgKzIyNywxNSBAQAogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbihzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgInRlc3RfemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAnX19tYWluX18ucHknKQogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbih6aXBfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weSBiL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKaW5kZXggOTJlYmQ5NS4uYWZlNTBkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQorKysgYi9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIG9zLndyaXRlKGZkLCBiImJsYXQiKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBTdWNjZXNzIC0tIGNvdWxkIG5vdCB3cml0ZSB0byBmZC4KICAgICAgICAgc3lzLmV4aXQoMCkKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3RleHR3cmFwLnB5IGIvTGliL3RleHR3cmFwLnB5CmluZGV4IDcwMjRkNGQuLjI0ODkxODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXh0d3JhcC5weQorKysgYi9MaWIvdGV4dHdyYXAucHkKQEAgLTcsNyArNyw3IEBACiAKIGltcG9ydCByZQogCi1fX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCddCitfX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCcsICdzaG9ydGVuJ10KIAogIyBIYXJkY29kZSB0aGUgcmVjb2duaXplZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gdGhlIFVTLUFTQ0lJCiAjIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gIFRoZSBtYWluIHJlYXNvbiBmb3IgZG9pbmcgdGhpcyBpcyB0aGF0IGluCkBAIC02Miw2ICs2MiwxMCBAQAogICAgICAgICBjb21wb3VuZCB3b3Jkcy4KICAgICAgIGRyb3Bfd2hpdGVzcGFjZSAoZGVmYXVsdDogdHJ1ZSkKICAgICAgICAgRHJvcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gbGluZXMuCisgICAgICBtYXhfbGluZXMgKGRlZmF1bHQ6IE5vbmUpCisgICAgICAgIFRydW5jYXRlIHdyYXBwZWQgbGluZXMuCisgICAgICBwbGFjZWhvbGRlciAoZGVmYXVsdDogJyBbLi4uXScpCisgICAgICAgIEFwcGVuZCB0byB0aGUgbGFzdCBsaW5lIG9mIHRydW5jYXRlZCB0ZXh0LgogICAgICIiIgogCiAgICAgdW5pY29kZV93aGl0ZXNwYWNlX3RyYW5zID0ge30KQEAgLTEwNCw3ICsxMDgsMTAgQEAKICAgICAgICAgICAgICAgICAgYnJlYWtfbG9uZ193b3Jkcz1UcnVlLAogICAgICAgICAgICAgICAgICBkcm9wX3doaXRlc3BhY2U9VHJ1ZSwKICAgICAgICAgICAgICAgICAgYnJlYWtfb25faHlwaGVucz1UcnVlLAotICAgICAgICAgICAgICAgICB0YWJzaXplPTgpOgorICAgICAgICAgICAgICAgICB0YWJzaXplPTgsCisgICAgICAgICAgICAgICAgICosCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz1Ob25lLAorICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFsuLi5dJyk6CiAgICAgICAgIHNlbGYud2lkdGggPSB3aWR0aAogICAgICAgICBzZWxmLmluaXRpYWxfaW5kZW50ID0gaW5pdGlhbF9pbmRlbnQKICAgICAgICAgc2VsZi5zdWJzZXF1ZW50X2luZGVudCA9IHN1YnNlcXVlbnRfaW5kZW50CkBAIC0xMTUsNiArMTIyLDggQEAKICAgICAgICAgc2VsZi5kcm9wX3doaXRlc3BhY2UgPSBkcm9wX3doaXRlc3BhY2UKICAgICAgICAgc2VsZi5icmVha19vbl9oeXBoZW5zID0gYnJlYWtfb25faHlwaGVucwogICAgICAgICBzZWxmLnRhYnNpemUgPSB0YWJzaXplCisgICAgICAgIHNlbGYubWF4X2xpbmVzID0gbWF4X2xpbmVzCisgICAgICAgIHNlbGYucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcgogCiAKICAgICAjIC0tIFByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjIzLDYgKzIzMiwxMyBAQAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGlmIHNlbGYud2lkdGggPD0gMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgd2lkdGggJXIgKG11c3QgYmUgPiAwKSIgJSBzZWxmLndpZHRoKQorICAgICAgICBpZiBzZWxmLm1heF9saW5lcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYubWF4X2xpbmVzID4gMToKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSBzZWxmLnN1YnNlcXVlbnRfaW5kZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZGVudCA9IHNlbGYuaW5pdGlhbF9pbmRlbnQKKyAgICAgICAgICAgIGlmIGxlbihpbmRlbnQpICsgbGVuKHNlbGYucGxhY2Vob2xkZXIubHN0cmlwKCkpID4gc2VsZi53aWR0aDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwbGFjZWhvbGRlciB0b28gbGFyZ2UgZm9yIG1heCB3aWR0aCIpCiAKICAgICAgICAgIyBBcnJhbmdlIGluIHJldmVyc2Ugb3JkZXIgc28gaXRlbXMgY2FuIGJlIGVmZmljaWVudGx5IHBvcHBlZAogICAgICAgICAjIGZyb20gYSBzdGFjayBvZiBjaHVja3MuCkBAIC0yNjUsMTggKzI4MSw0NyBAQAogICAgICAgICAgICAgIyBmaXQgb24gKmFueSogbGluZSAobm90IGp1c3QgdGhpcyBvbmUpLgogICAgICAgICAgICAgaWYgY2h1bmtzIGFuZCBsZW4oY2h1bmtzWy0xXSkgPiB3aWR0aDoKICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfbG9uZ193b3JkKGNodW5rcywgY3VyX2xpbmUsIGN1cl9sZW4sIHdpZHRoKQorICAgICAgICAgICAgICAgIGN1cl9sZW4gPSBzdW0obWFwKGxlbiwgY3VyX2xpbmUpKQogCiAgICAgICAgICAgICAjIElmIHRoZSBsYXN0IGNodW5rIG9uIHRoaXMgbGluZSBpcyBhbGwgd2hpdGVzcGFjZSwgZHJvcCBpdC4KICAgICAgICAgICAgIGlmIHNlbGYuZHJvcF93aGl0ZXNwYWNlIGFuZCBjdXJfbGluZSBhbmQgY3VyX2xpbmVbLTFdLnN0cmlwKCkgPT0gJyc6CisgICAgICAgICAgICAgICAgY3VyX2xlbiAtPSBsZW4oY3VyX2xpbmVbLTFdKQogICAgICAgICAgICAgICAgIGRlbCBjdXJfbGluZVstMV0KIAotICAgICAgICAgICAgIyBDb252ZXJ0IGN1cnJlbnQgbGluZSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbiBsaXN0Ci0gICAgICAgICAgICAjIG9mIGFsbCBsaW5lcyAocmV0dXJuIHZhbHVlKS4KICAgICAgICAgICAgIGlmIGN1cl9saW5lOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnJy5qb2luKGN1cl9saW5lKSkKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi5tYXhfbGluZXMgaXMgTm9uZSBvcgorICAgICAgICAgICAgICAgICAgICBsZW4obGluZXMpICsgMSA8IHNlbGYubWF4X2xpbmVzIG9yCisgICAgICAgICAgICAgICAgICAgIChub3QgY2h1bmtzIG9yCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmRyb3Bfd2hpdGVzcGFjZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIGxlbihjaHVua3MpID09IDEgYW5kCisgICAgICAgICAgICAgICAgICAgICBub3QgY2h1bmtzWzBdLnN0cmlwKCkpIGFuZCBjdXJfbGVuIDw9IHdpZHRoKToKKyAgICAgICAgICAgICAgICAgICAgIyBDb252ZXJ0IGN1cnJlbnQgbGluZSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbgorICAgICAgICAgICAgICAgICAgICAjIGxpc3Qgb2YgYWxsIGxpbmVzIChyZXR1cm4gdmFsdWUpLgorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgJycuam9pbihjdXJfbGluZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgY3VyX2xpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyX2xpbmVbLTFdLnN0cmlwKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xlbiArIGxlbihzZWxmLnBsYWNlaG9sZGVyKSA8PSB3aWR0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xpbmUuYXBwZW5kKHNlbGYucGxhY2Vob2xkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcnLmpvaW4oY3VyX2xpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGVuIC09IGxlbihjdXJfbGluZVstMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY3VyX2xpbmVbLTFdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X2xpbmUgPSBsaW5lc1stMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKHByZXZfbGluZSkgKyBsZW4oc2VsZi5wbGFjZWhvbGRlcikgPD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1stMV0gPSBwcmV2X2xpbmUgKyBzZWxmLnBsYWNlaG9sZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgc2VsZi5wbGFjZWhvbGRlci5sc3RyaXAoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICByZXR1cm4gbGluZXMKIAorICAgIGRlZiBfc3BsaXRfY2h1bmtzKHNlbGYsIHRleHQpOgorICAgICAgICB0ZXh0ID0gc2VsZi5fbXVuZ2Vfd2hpdGVzcGFjZSh0ZXh0KQorICAgICAgICByZXR1cm4gc2VsZi5fc3BsaXQodGV4dCkKIAogICAgICMgLS0gUHVibGljIGludGVyZmFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI4OSw4ICszMzQsNyBAQAogICAgICAgICBhbmQgYWxsIG90aGVyIHdoaXRlc3BhY2UgY2hhcmFjdGVycyAoaW5jbHVkaW5nIG5ld2xpbmUpIGFyZQogICAgICAgICBjb252ZXJ0ZWQgdG8gc3BhY2UuCiAgICAgICAgICIiIgotICAgICAgICB0ZXh0ID0gc2VsZi5fbXVuZ2Vfd2hpdGVzcGFjZSh0ZXh0KQotICAgICAgICBjaHVua3MgPSBzZWxmLl9zcGxpdCh0ZXh0KQorICAgICAgICBjaHVua3MgPSBzZWxmLl9zcGxpdF9jaHVua3ModGV4dCkKICAgICAgICAgaWYgc2VsZi5maXhfc2VudGVuY2VfZW5kaW5nczoKICAgICAgICAgICAgIHNlbGYuX2ZpeF9zZW50ZW5jZV9lbmRpbmdzKGNodW5rcykKICAgICAgICAgcmV0dXJuIHNlbGYuX3dyYXBfY2h1bmtzKGNodW5rcykKQEAgLTMzMiw2ICszNzYsMjEgQEAKICAgICB3ID0gVGV4dFdyYXBwZXIod2lkdGg9d2lkdGgsICoqa3dhcmdzKQogICAgIHJldHVybiB3LmZpbGwodGV4dCkKIAorZGVmIHNob3J0ZW4odGV4dCwgd2lkdGgsICoqa3dhcmdzKToKKyAgICAiIiJDb2xsYXBzZSBhbmQgdHJ1bmNhdGUgdGhlIGdpdmVuIHRleHQgdG8gZml0IGluIHRoZSBnaXZlbiB3aWR0aC4KKworICAgIFRoZSB0ZXh0IGZpcnN0IGhhcyBpdHMgd2hpdGVzcGFjZSBjb2xsYXBzZWQuICBJZiBpdCB0aGVuIGZpdHMgaW4KKyAgICB0aGUgKndpZHRoKiwgaXQgaXMgcmV0dXJuZWQgYXMgaXMuICBPdGhlcndpc2UsIGFzIG1hbnkgd29yZHMKKyAgICBhcyBwb3NzaWJsZSBhcmUgam9pbmVkIGFuZCB0aGVuIHRoZSBwbGFjZWhvbGRlciBpcyBhcHBlbmRlZDo6CisKKyAgICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMikKKyAgICAgICAgJ0hlbGxvIHdvcmxkIScKKyAgICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMSkKKyAgICAgICAgJ0hlbGxvIFsuLi5dJworICAgICIiIgorICAgIHcgPSBUZXh0V3JhcHBlcih3aWR0aD13aWR0aCwgbWF4X2xpbmVzPTEsICoqa3dhcmdzKQorICAgIHJldHVybiB3LmZpbGwoJyAnLmpvaW4odGV4dC5zdHJpcCgpLnNwbGl0KCkpKQorCiAKICMgLS0gTG9vc2VseSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9MaWIvdGhyZWFkaW5nLnB5IGIvTGliL3RocmVhZGluZy5weQppbmRleCA2MjVjOWI5Li5kOTA3Yzg5IDEwMDY0NAotLS0gYS9MaWIvdGhyZWFkaW5nLnB5CisrKyBiL0xpYi90aHJlYWRpbmcucHkKQEAgLTEwLDYgKzEwLDExIEBACiAgICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCiBmcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YyBhcyBfZm9ybWF0X2V4YwogZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldAorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZSBhcyBfaXNsaWNlCit0cnk6CisgICAgZnJvbSBfY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlIGFzIF9kZXF1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlIGFzIF9kZXF1ZQogCiAjIE5vdGUgcmVnYXJkaW5nIFBFUCA4IGNvbXBsaWFudCBuYW1lcwogIyAgVGhpcyB0aHJlYWRpbmcgbW9kZWwgd2FzIG9yaWdpbmFsbHkgaW5zcGlyZWQgYnkgSmF2YSwgYW5kIGluaGVyaXRlZApAQCAtMjgsNiArMzMsNyBAQAogIyBSZW5hbWUgc29tZSBzdHVmZiBzbyAiZnJvbSB0aHJlYWRpbmcgaW1wb3J0ICoiIGlzIHNhZmUKIF9zdGFydF9uZXdfdGhyZWFkID0gX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkCiBfYWxsb2NhdGVfbG9jayA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaworX3NldF9zZW50aW5lbCA9IF90aHJlYWQuX3NldF9zZW50aW5lbAogZ2V0X2lkZW50ID0gX3RocmVhZC5nZXRfaWRlbnQKIFRocmVhZEVycm9yID0gX3RocmVhZC5lcnJvcgogdHJ5OgpAQCAtMTMyLDcgKzEzOCw3IEBACiAgICAgICAgICIiIgogICAgICAgICBtZSA9IGdldF9pZGVudCgpCiAgICAgICAgIGlmIHNlbGYuX293bmVyID09IG1lOgotICAgICAgICAgICAgc2VsZi5fY291bnQgPSBzZWxmLl9jb3VudCArIDEKKyAgICAgICAgICAgIHNlbGYuX2NvdW50ICs9IDEKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgIHJjID0gc2VsZi5fYmxvY2suYWNxdWlyZShibG9ja2luZywgdGltZW91dCkKICAgICAgICAgaWYgcmM6CkBAIC0yMjQsNyArMjMwLDcgQEAKICAgICAgICAgICAgIHNlbGYuX2lzX293bmVkID0gbG9jay5faXNfb3duZWQKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLl93YWl0ZXJzID0gW10KKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IF9kZXF1ZSgpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbG9jay5fX2VudGVyX18oKQpAQCAtMzMyLDE0ICszMzgsMTQgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLl9pc19vd25lZCgpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3Qgbm90aWZ5IG9uIHVuLWFjcXVpcmVkIGxvY2siKQotICAgICAgICBfX3dhaXRlcnMgPSBzZWxmLl93YWl0ZXJzCi0gICAgICAgIHdhaXRlcnMgPSBfX3dhaXRlcnNbOm5dCi0gICAgICAgIGlmIG5vdCB3YWl0ZXJzOgorICAgICAgICBhbGxfd2FpdGVycyA9IHNlbGYuX3dhaXRlcnMKKyAgICAgICAgd2FpdGVyc190b19ub3RpZnkgPSBfZGVxdWUoX2lzbGljZShhbGxfd2FpdGVycywgbikpCisgICAgICAgIGlmIG5vdCB3YWl0ZXJzX3RvX25vdGlmeToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnM6CisgICAgICAgIGZvciB3YWl0ZXIgaW4gd2FpdGVyc190b19ub3RpZnk6CiAgICAgICAgICAgICB3YWl0ZXIucmVsZWFzZSgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgX193YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisgICAgICAgICAgICAgICAgYWxsX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIApAQCAtNDE0LDcgKzQyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBzZWxmLl9jb25kLndhaXQodGltZW91dCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBzZWxmLl92YWx1ZSAtIDEKKyAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCiAgICAgICAgICAgICAgICAgcmMgPSBUcnVlCiAgICAgICAgIHJldHVybiByYwogCkBAIC00MjgsNyArNDM0LDcgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBzZWxmLl9jb25kOgotICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBzZWxmLl92YWx1ZSArIDEKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlICs9IDEKICAgICAgICAgICAgIHNlbGYuX2NvbmQubm90aWZ5KCkKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6CkBAIC03MjMsMTUgKzcyOSwxMyBAQAogX2NvdW50ZXIgPSAwCiBkZWYgX25ld25hbWUodGVtcGxhdGU9IlRocmVhZC0lZCIpOgogICAgIGdsb2JhbCBfY291bnRlcgotICAgIF9jb3VudGVyID0gX2NvdW50ZXIgKyAxCisgICAgX2NvdW50ZXIgKz0gMQogICAgIHJldHVybiB0ZW1wbGF0ZSAlIF9jb3VudGVyCiAKICMgQWN0aXZlIHRocmVhZCBhZG1pbmlzdHJhdGlvbgogX2FjdGl2ZV9saW1ib19sb2NrID0gX2FsbG9jYXRlX2xvY2soKQogX2FjdGl2ZSA9IHt9ICAgICMgbWFwcyB0aHJlYWQgaWQgdG8gVGhyZWFkIG9iamVjdAogX2xpbWJvID0ge30KLQotIyBGb3IgZGVidWcgYW5kIGxlYWsgdGVzdGluZwogX2RhbmdsaW5nID0gV2Vha1NldCgpCiAKICMgTWFpbiBjbGFzcyBmb3IgdGhyZWFkcwpAQCAtNzkwLDI4ICs3OTQsMzUgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gY3VycmVudF90aHJlYWQoKS5kYWVtb24KICAgICAgICAgc2VsZi5faWRlbnQgPSBOb25lCisgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gTm9uZQogICAgICAgICBzZWxmLl9zdGFydGVkID0gRXZlbnQoKQotICAgICAgICBzZWxmLl9zdG9wcGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5fYmxvY2sgPSBDb25kaXRpb24oTG9jaygpKQorICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5faW5pdGlhbGl6ZWQgPSBUcnVlCiAgICAgICAgICMgc3lzLnN0ZGVyciBpcyBub3Qgc3RvcmVkIGluIHRoZSBjbGFzcyBsaWtlCiAgICAgICAgICMgc3lzLmV4Y19pbmZvIHNpbmNlIGl0IGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gaW5zdGFuY2VzCiAgICAgICAgIHNlbGYuX3N0ZGVyciA9IF9zeXMuc3RkZXJyCisgICAgICAgICMgRm9yIGRlYnVnZ2luZyBhbmQgX2FmdGVyX2ZvcmsoKQogICAgICAgICBfZGFuZ2xpbmcuYWRkKHNlbGYpCiAKLSAgICBkZWYgX3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYpOgorICAgIGRlZiBfcmVzZXRfaW50ZXJuYWxfbG9ja3Moc2VsZiwgaXNfYWxpdmUpOgogICAgICAgICAjIHByaXZhdGUhICBDYWxsZWQgYnkgX2FmdGVyX2ZvcmsoKSB0byByZXNldCBvdXIgaW50ZXJuYWwgbG9ja3MgYXMKICAgICAgICAgIyB0aGV5IG1heSBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGxlYWRpbmcgdG8gYSBkZWFkbG9jayBvciBjcmFzaC4KLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX2Jsb2NrJyk6ICAjIER1bW15VGhyZWFkIGRlbGV0ZXMgX2Jsb2NrCi0gICAgICAgICAgICBzZWxmLl9ibG9jay5fX2luaXRfXygpCiAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKCkKKyAgICAgICAgaWYgaXNfYWxpdmU6CisgICAgICAgICAgICBzZWxmLl9zZXRfdHN0YXRlX2xvY2soKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgdGhyZWFkIGlzbid0IGFsaXZlIGFmdGVyIGZvcms6IGl0IGRvZXNuJ3QgaGF2ZSBhIHRzdGF0ZQorICAgICAgICAgICAgIyBhbnltb3JlLgorICAgICAgICAgICAgc2VsZi5faXNfc3RvcHBlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gTm9uZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBhc3NlcnQgc2VsZi5faW5pdGlhbGl6ZWQsICJUaHJlYWQuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCIKICAgICAgICAgc3RhdHVzID0gImluaXRpYWwiCiAgICAgICAgIGlmIHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCk6CiAgICAgICAgICAgICBzdGF0dXMgPSAic3RhcnRlZCIKLSAgICAgICAgaWYgc2VsZi5fc3RvcHBlZDoKKyAgICAgICAgc2VsZi5pc19hbGl2ZSgpICMgZWFzeSB3YXkgdG8gZ2V0IC5faXNfc3RvcHBlZCBzZXQgd2hlbiBhcHByb3ByaWF0ZQorICAgICAgICBpZiBzZWxmLl9pc19zdG9wcGVkOgogICAgICAgICAgICAgc3RhdHVzID0gInN0b3BwZWQiCiAgICAgICAgIGlmIHNlbGYuX2RhZW1vbmljOgogICAgICAgICAgICAgc3RhdHVzICs9ICIgZGFlbW9uIgpAQCAtODg0LDkgKzg5NSwxOCBAQAogICAgIGRlZiBfc2V0X2lkZW50KHNlbGYpOgogICAgICAgICBzZWxmLl9pZGVudCA9IGdldF9pZGVudCgpCiAKKyAgICBkZWYgX3NldF90c3RhdGVfbG9jayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCBhIGxvY2sgb2JqZWN0IHdoaWNoIHdpbGwgYmUgcmVsZWFzZWQgYnkgdGhlIGludGVycHJldGVyIHdoZW4KKyAgICAgICAgdGhlIHVuZGVybHlpbmcgdGhyZWFkIHN0YXRlIChzZWUgcHlzdGF0ZS5oKSBnZXRzIGRlbGV0ZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IF9zZXRfc2VudGluZWwoKQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jay5hY3F1aXJlKCkKKwogICAgIGRlZiBfYm9vdHN0cmFwX2lubmVyKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQorICAgICAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKICAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuc2V0KCkKICAgICAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgogICAgICAgICAgICAgICAgIF9hY3RpdmVbc2VsZi5faWRlbnRdID0gc2VsZgpAQCAtOTQxLDcgKzk2MSw2IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3RvcCgpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGNhbGwgc2VsZi5fZGVsZXRlKCkgYmVjYXVzZSBpdCBhbHNvCiAgICAgICAgICAgICAgICAgICAgICMgZ3JhYnMgX2FjdGl2ZV9saW1ib19sb2NrLgpAQCAtOTUwLDEwICs5NjksMjcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIF9zdG9wKHNlbGYpOgotICAgICAgICBzZWxmLl9ibG9jay5hY3F1aXJlKCkKLSAgICAgICAgc2VsZi5fc3RvcHBlZCA9IFRydWUKLSAgICAgICAgc2VsZi5fYmxvY2subm90aWZ5X2FsbCgpCi0gICAgICAgIHNlbGYuX2Jsb2NrLnJlbGVhc2UoKQorICAgICAgICAjIEFmdGVyIGNhbGxpbmcgLl9zdG9wKCksIC5pc19hbGl2ZSgpIHJldHVybnMgRmFsc2UgYW5kIC5qb2luKCkgcmV0dXJucworICAgICAgICAjIGltbWVkaWF0ZWx5LiAgLl90c3RhdGVfbG9jayBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBjYWxsaW5nIC5fc3RvcCgpLgorICAgICAgICAjCisgICAgICAgICMgTm9ybWFsIGNhc2U6ICBDIGNvZGUgYXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZQorICAgICAgICAjIChyZWxlYXNlX3NlbnRpbmVsIGluIF90aHJlYWRtb2R1bGUuYykgcmVsZWFzZXMgLl90c3RhdGVfbG9jaywgYW5kCisgICAgICAgICMgdGhhdCdzIGRldGVjdGVkIGJ5IG91ciAuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCksIGNhbGxlZCBieSAuam9pbigpCisgICAgICAgICMgYW5kIC5pc19hbGl2ZSgpLiAgQW55IG51bWJlciBvZiB0aHJlYWRzIF9tYXlfIGNhbGwgLl9zdG9wKCkKKyAgICAgICAgIyBzaW11bHRhbmVvdXNseSAoZm9yIGV4YW1wbGUsIGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIGJsb2NrZWQgaW4KKyAgICAgICAgIyAuam9pbigpIGNhbGxzKSwgYW5kIHRoZXkncmUgbm90IHNlcmlhbGl6ZWQuICBUaGF0J3MgaGFybWxlc3MgLQorICAgICAgICAjIHRoZXknbGwganVzdCBtYWtlIHJlZHVuZGFudCByZWJpbmRpbmdzIG9mIC5faXNfc3RvcHBlZCBhbmQKKyAgICAgICAgIyAuX3RzdGF0ZV9sb2NrLiAgT2JzY3VyZTogIHdlIHJlYmluZCAuX3RzdGF0ZV9sb2NrIGxhc3Qgc28gdGhhdCB0aGUKKyAgICAgICAgIyAiYXNzZXJ0IHNlbGYuX2lzX3N0b3BwZWQiIGluIC5fd2FpdF9mb3JfdHN0YXRlX2xvY2soKSBhbHdheXMgd29ya3MKKyAgICAgICAgIyAodGhlIGFzc2VydCBpcyBleGVjdXRlZCBvbmx5IGlmIC5fdHN0YXRlX2xvY2sgaXMgTm9uZSkuCisgICAgICAgICMKKyAgICAgICAgIyBTcGVjaWFsIGNhc2U6ICBfbWFpbl90aHJlYWQgcmVsZWFzZXMgLl90c3RhdGVfbG9jayB2aWEgdGhpcworICAgICAgICAjIG1vZHVsZSdzIF9zaHV0ZG93bigpIGZ1bmN0aW9uLgorICAgICAgICBsb2NrID0gc2VsZi5fdHN0YXRlX2xvY2sKKyAgICAgICAgaWYgbG9jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFzc2VydCBub3QgbG9jay5sb2NrZWQoKQorICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gVHJ1ZQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IE5vbmUKIAogICAgIGRlZiBfZGVsZXRlKHNlbGYpOgogICAgICAgICAiUmVtb3ZlIGN1cnJlbnQgdGhyZWFkIGZyb20gdGhlIGRpY3Qgb2YgY3VycmVudGx5IHJ1bm5pbmcgdGhyZWFkcy4iCkBAIC0xMDIxLDIwICsxMDU3LDI2IEBACiAgICAgICAgIGlmIHNlbGYgaXMgY3VycmVudF90aHJlYWQoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IGpvaW4gY3VycmVudCB0aHJlYWQiKQogCi0gICAgICAgIHNlbGYuX2Jsb2NrLmFjcXVpcmUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BwZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jsb2NrLndhaXQoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0Ci0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BwZWQ6Ci0gICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gZGVhZGxpbmUgLSBfdGltZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIGRlbGF5IDw9IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ibG9jay53YWl0KGRlbGF5KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fYmxvY2sucmVsZWFzZSgpCisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlIGJlaGF2aW9yIG9mIGEgbmVnYXRpdmUgdGltZW91dCBpc24ndCBkb2N1bWVudGVkLCBidXQKKyAgICAgICAgICAgICMgaGlzdG9yaWNhbGx5IC5qb2luKHRpbWVvdXQ9eCkgZm9yIHg8MCBoYXMgYWN0ZWQgYXMgaWYgdGltZW91dD0wCisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jayh0aW1lb3V0PW1heCh0aW1lb3V0LCAwKSkKKworICAgIGRlZiBfd2FpdF9mb3JfdHN0YXRlX2xvY2soc2VsZiwgYmxvY2s9VHJ1ZSwgdGltZW91dD0tMSk6CisgICAgICAgICMgSXNzdWUgIzE4ODA4OiB3YWl0IGZvciB0aGUgdGhyZWFkIHN0YXRlIHRvIGJlIGdvbmUuCisgICAgICAgICMgQXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZSwgYWZ0ZXIgYWxsIGtub3dsZWRnZSBvZiB0aGUgdGhyZWFkCisgICAgICAgICMgaXMgcmVtb3ZlZCBmcm9tIEMgZGF0YSBzdHJ1Y3R1cmVzLCBDIGNvZGUgcmVsZWFzZXMgb3VyIF90c3RhdGVfbG9jay4KKyAgICAgICAgIyBUaGlzIG1ldGhvZCBwYXNzZXMgaXRzIGFyZ3VtZW50cyB0byBfdHN0YXRlX2xvY2suYXF1aXJlKCkuCisgICAgICAgICMgSWYgdGhlIGxvY2sgaXMgYWNxdWlyZWQsIHRoZSBDIGNvZGUgaXMgZG9uZSwgYW5kIHNlbGYuX3N0b3AoKSBpcworICAgICAgICAjIGNhbGxlZC4gIFRoYXQgc2V0cyAuX2lzX3N0b3BwZWQgdG8gVHJ1ZSwgYW5kIC5fdHN0YXRlX2xvY2sgdG8gTm9uZS4KKyAgICAgICAgbG9jayA9IHNlbGYuX3RzdGF0ZV9sb2NrCisgICAgICAgIGlmIGxvY2sgaXMgTm9uZTogICMgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQgdGhlIEMgY29kZSBpcyBkb25lCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5faXNfc3RvcHBlZAorICAgICAgICBlbGlmIGxvY2suYWNxdWlyZShibG9jaywgdGltZW91dCk6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgc2VsZi5fc3RvcCgpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgbmFtZShzZWxmKToKQEAgLTEwNzMsNyArMTExNSwxMCBAQAogCiAgICAgICAgICIiIgogICAgICAgICBhc3NlcnQgc2VsZi5faW5pdGlhbGl6ZWQsICJUaHJlYWQuX19pbml0X18oKSBub3QgY2FsbGVkIgotICAgICAgICByZXR1cm4gc2VsZi5fc3RhcnRlZC5pc19zZXQoKSBhbmQgbm90IHNlbGYuX3N0b3BwZWQKKyAgICAgICAgaWYgc2VsZi5faXNfc3RvcHBlZCBvciBub3Qgc2VsZi5fc3RhcnRlZC5pc19zZXQoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jayhGYWxzZSkKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9pc19zdG9wcGVkCiAKICAgICBpc0FsaXZlID0gaXNfYWxpdmUKIApAQCAtMTE0OSwyNSArMTE5NCwxMiBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT0iTWFpblRocmVhZCIsIGRhZW1vbj1GYWxzZSkKKyAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKICAgICAgICAgICAgIF9hY3RpdmVbc2VsZi5faWRlbnRdID0gc2VsZgogCi0gICAgZGVmIF9leGl0ZnVuYyhzZWxmKToKLSAgICAgICAgc2VsZi5fc3RvcCgpCi0gICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICB3aGlsZSB0OgotICAgICAgICAgICAgdC5qb2luKCkKLSAgICAgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICBzZWxmLl9kZWxldGUoKQotCi1kZWYgX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCk6Ci0gICAgZm9yIHQgaW4gZW51bWVyYXRlKCk6Ci0gICAgICAgIGlmIG5vdCB0LmRhZW1vbiBhbmQgdC5pc19hbGl2ZSgpOgotICAgICAgICAgICAgcmV0dXJuIHQKLSAgICByZXR1cm4gTm9uZQotCiAKICMgRHVtbXkgdGhyZWFkIGNsYXNzIHRvIHJlcHJlc2VudCB0aHJlYWRzIG5vdCBzdGFydGVkIGhlcmUuCiAjIFRoZXNlIGFyZW4ndCBnYXJiYWdlIGNvbGxlY3RlZCB3aGVuIHRoZXkgZGllLCBub3IgY2FuIHRoZXkgYmUgd2FpdGVkIGZvci4KQEAgLTExODIsMTEgKzEyMTQsNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9X25ld25hbWUoIkR1bW15LSVkIiksIGRhZW1vbj1UcnVlKQogCi0gICAgICAgICMgVGhyZWFkLl9ibG9jayBjb25zdW1lcyBhbiBPUy1sZXZlbCBsb2NraW5nIHByaW1pdGl2ZSwgd2hpY2gKLSAgICAgICAgIyBjYW4gbmV2ZXIgYmUgdXNlZCBieSBhIF9EdW1teVRocmVhZC4gIFNpbmNlIGEgX0R1bW15VGhyZWFkCi0gICAgICAgICMgaW5zdGFuY2UgaXMgaW1tb3J0YWwsIHRoYXQncyBiYWQsIHNvIHJlbGVhc2UgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgZGVsIHNlbGYuX2Jsb2NrCi0KICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKQEAgLTEyNDgsNyArMTI3NSw0MCBAQAogIyBhbmQgbWFrZSBpdCBhdmFpbGFibGUgZm9yIHRoZSBpbnRlcnByZXRlcgogIyAoUHlfTWFpbikgYXMgdGhyZWFkaW5nLl9zaHV0ZG93bi4KIAotX3NodXRkb3duID0gX01haW5UaHJlYWQoKS5fZXhpdGZ1bmMKK19tYWluX3RocmVhZCA9IF9NYWluVGhyZWFkKCkKKworZGVmIF9zaHV0ZG93bigpOgorICAgICMgT2JzY3VyZTogIG90aGVyIHRocmVhZHMgbWF5IGJlIHdhaXRpbmcgdG8gam9pbiBfbWFpbl90aHJlYWQuICBUaGF0J3MKKyAgICAjIGR1YmlvdXMsIGJ1dCBzb21lIGNvZGUgZG9lcyBpdC4gIFdlIGNhbid0IHdhaXQgZm9yIEMgY29kZSB0byByZWxlYXNlCisgICAgIyB0aGUgbWFpbiB0aHJlYWQncyB0c3RhdGVfbG9jayAtIHRoYXQgd29uJ3QgaGFwcGVuIHVudGlsIHRoZSBpbnRlcnByZXRlcgorICAgICMgaXMgbmVhcmx5IGRlYWQuICBTbyB3ZSByZWxlYXNlIGl0IGhlcmUuICBOb3RlIHRoYXQganVzdCBjYWxsaW5nIF9zdG9wKCkKKyAgICAjIGlzbid0IGVub3VnaDogIG90aGVyIHRocmVhZHMgbWF5IGFscmVhZHkgYmUgd2FpdGluZyBvbiBfdHN0YXRlX2xvY2suCisgICAgdGxvY2sgPSBfbWFpbl90aHJlYWQuX3RzdGF0ZV9sb2NrCisgICAgIyBUaGUgbWFpbiB0aHJlYWQgaXNuJ3QgZmluaXNoZWQgeWV0LCBzbyBpdHMgdGhyZWFkIHN0YXRlIGxvY2sgY2FuJ3QgaGF2ZQorICAgICMgYmVlbiByZWxlYXNlZC4KKyAgICBhc3NlcnQgdGxvY2sgaXMgbm90IE5vbmUKKyAgICBhc3NlcnQgdGxvY2subG9ja2VkKCkKKyAgICB0bG9jay5yZWxlYXNlKCkKKyAgICBfbWFpbl90aHJlYWQuX3N0b3AoKQorICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIHdoaWxlIHQ6CisgICAgICAgIHQuam9pbigpCisgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIF9tYWluX3RocmVhZC5fZGVsZXRlKCkKKworZGVmIF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpOgorICAgIGZvciB0IGluIGVudW1lcmF0ZSgpOgorICAgICAgICBpZiBub3QgdC5kYWVtb24gYW5kIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHJldHVybiB0CisgICAgcmV0dXJuIE5vbmUKKworZGVmIG1haW5fdGhyZWFkKCk6CisgICAgIiIiUmV0dXJuIHRoZSBtYWluIHRocmVhZCBvYmplY3QuCisKKyAgICBJbiBub3JtYWwgY29uZGl0aW9ucywgdGhlIG1haW4gdGhyZWFkIGlzIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUKKyAgICBQeXRob24gaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQuCisgICAgIiIiCisgICAgcmV0dXJuIF9tYWluX3RocmVhZAogCiAjIGdldCB0aHJlYWQtbG9jYWwgaW1wbGVtZW50YXRpb24sIGVpdGhlciBmcm9tIHRoZSB0aHJlYWQKICMgbW9kdWxlLCBvciBmcm9tIHRoZSBweXRob24gZmFsbGJhY2sKQEAgLTEyNjYsMjUgKzEzMjYsMzEgQEAKIAogICAgICMgUmVzZXQgX2FjdGl2ZV9saW1ib19sb2NrLCBpbiBjYXNlIHdlIGZvcmtlZCB3aGlsZSB0aGUgbG9jayB3YXMgaGVsZAogICAgICMgYnkgYW5vdGhlciAobm9uLWZvcmtlZCkgdGhyZWFkLiAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTg3NDkwMAotICAgIGdsb2JhbCBfYWN0aXZlX2xpbWJvX2xvY2sKKyAgICBnbG9iYWwgX2FjdGl2ZV9saW1ib19sb2NrLCBfbWFpbl90aHJlYWQKICAgICBfYWN0aXZlX2xpbWJvX2xvY2sgPSBfYWxsb2NhdGVfbG9jaygpCiAKICAgICAjIGZvcmsoKSBvbmx5IGNvcGllZCB0aGUgY3VycmVudCB0aHJlYWQ7IGNsZWFyIHJlZmVyZW5jZXMgdG8gb3RoZXJzLgogICAgIG5ld19hY3RpdmUgPSB7fQogICAgIGN1cnJlbnQgPSBjdXJyZW50X3RocmVhZCgpCisgICAgX21haW5fdGhyZWFkID0gY3VycmVudAogICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgotICAgICAgICBmb3IgdGhyZWFkIGluIF9lbnVtZXJhdGUoKToKKyAgICAgICAgIyBEYW5nbGluZyB0aHJlYWQgaW5zdGFuY2VzIG11c3Qgc3RpbGwgaGF2ZSB0aGVpciBsb2NrcyByZXNldCwKKyAgICAgICAgIyBiZWNhdXNlIHNvbWVvbmUgbWF5IGpvaW4oKSB0aGVtLgorICAgICAgICB0aHJlYWRzID0gc2V0KF9lbnVtZXJhdGUoKSkKKyAgICAgICAgdGhyZWFkcy51cGRhdGUoX2RhbmdsaW5nKQorICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAgICAgICAgICAjIEFueSBsb2NrL2NvbmRpdGlvbiB2YXJpYWJsZSBtYXkgYmUgY3VycmVudGx5IGxvY2tlZCBvciBpbiBhbgogICAgICAgICAgICAgIyBpbnZhbGlkIHN0YXRlLCBzbyB3ZSByZWluaXRpYWxpemUgdGhlbS4KLSAgICAgICAgICAgIHRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoKQogICAgICAgICAgICAgaWYgdGhyZWFkIGlzIGN1cnJlbnQ6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSBpcyBvbmx5IG9uZSBhY3RpdmUgdGhyZWFkLiBXZSByZXNldCB0aGUgaWRlbnQgdG8KICAgICAgICAgICAgICAgICAjIGl0cyBuZXcgdmFsdWUgc2luY2UgaXQgY2FuIGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKFRydWUpCiAgICAgICAgICAgICAgICAgaWRlbnQgPSBnZXRfaWRlbnQoKQogICAgICAgICAgICAgICAgIHRocmVhZC5faWRlbnQgPSBpZGVudAogICAgICAgICAgICAgICAgIG5ld19hY3RpdmVbaWRlbnRdID0gdGhyZWFkCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgQWxsIHRoZSBvdGhlcnMgYXJlIGFscmVhZHkgc3RvcHBlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKEZhbHNlKQogICAgICAgICAgICAgICAgIHRocmVhZC5fc3RvcCgpCiAKICAgICAgICAgX2xpbWJvLmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi90aW1laXQucHkgYi9MaWIvdGltZWl0LnB5CmluZGV4IDRmN2QyOGYuLmVhZDIwMzAgMTAwNjQ0Ci0tLSBhL0xpYi90aW1laXQucHkKKysrIGIvTGliL3RpbWVpdC5weQpAQCAtMzEsMzggKzMxLDI5IEBACiBJZiAtbiBpcyBub3QgZ2l2ZW4sIGEgc3VpdGFibGUgbnVtYmVyIG9mIGxvb3BzIGlzIGNhbGN1bGF0ZWQgYnkgdHJ5aW5nCiBzdWNjZXNzaXZlIHBvd2VycyBvZiAxMCB1bnRpbCB0aGUgdG90YWwgdGltZSBpcyBhdCBsZWFzdCAwLjIgc2Vjb25kcy4KIAotVGhlIGRpZmZlcmVuY2UgaW4gZGVmYXVsdCB0aW1lciBmdW5jdGlvbiBpcyBiZWNhdXNlIG9uIFdpbmRvd3MsCi1jbG9jaygpIGhhcyBtaWNyb3NlY29uZCBncmFudWxhcml0eSBidXQgdGltZSgpJ3MgZ3JhbnVsYXJpdHkgaXMgMS82MHRoCi1vZiBhIHNlY29uZDsgb24gVW5peCwgY2xvY2soKSBoYXMgMS8xMDB0aCBvZiBhIHNlY29uZCBncmFudWxhcml0eSBhbmQKLXRpbWUoKSBpcyBtdWNoIG1vcmUgcHJlY2lzZS4gIE9uIGVpdGhlciBwbGF0Zm9ybSwgdGhlIGRlZmF1bHQgdGltZXIKLWZ1bmN0aW9ucyBtZWFzdXJlIHdhbGwgY2xvY2sgdGltZSwgbm90IHRoZSBDUFUgdGltZS4gIFRoaXMgbWVhbnMgdGhhdAotb3RoZXIgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgY29tcHV0ZXIgbWF5IGludGVyZmVyZSB3aXRoIHRoZQotdGltaW5nLiAgVGhlIGJlc3QgdGhpbmcgdG8gZG8gd2hlbiBhY2N1cmF0ZSB0aW1pbmcgaXMgbmVjZXNzYXJ5IGlzIHRvCi1yZXBlYXQgdGhlIHRpbWluZyBhIGZldyB0aW1lcyBhbmQgdXNlIHRoZSBiZXN0IHRpbWUuICBUaGUgLXIgb3B0aW9uIGlzCi1nb29kIGZvciB0aGlzOyB0aGUgZGVmYXVsdCBvZiAzIHJlcGV0aXRpb25zIGlzIHByb2JhYmx5IGVub3VnaCBpbiBtb3N0Ci1jYXNlcy4gIE9uIFVuaXgsIHlvdSBjYW4gdXNlIGNsb2NrKCkgdG8gbWVhc3VyZSBDUFUgdGltZS4KLQogTm90ZTogdGhlcmUgaXMgYSBjZXJ0YWluIGJhc2VsaW5lIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBleGVjdXRpbmcgYQotcGFzcyBzdGF0ZW1lbnQuICBUaGUgY29kZSBoZXJlIGRvZXNuJ3QgdHJ5IHRvIGhpZGUgaXQsIGJ1dCB5b3Ugc2hvdWxkCi1iZSBhd2FyZSBvZiBpdC4gIFRoZSBiYXNlbGluZSBvdmVyaGVhZCBjYW4gYmUgbWVhc3VyZWQgYnkgaW52b2tpbmcgdGhlCi1wcm9ncmFtIHdpdGhvdXQgYXJndW1lbnRzLgorcGFzcyBzdGF0ZW1lbnQuICBJdCBkaWZmZXJzIGJldHdlZW4gdmVyc2lvbnMuICBUaGUgY29kZSBoZXJlIGRvZXNuJ3QgdHJ5Cit0byBoaWRlIGl0LCBidXQgeW91IHNob3VsZCBiZSBhd2FyZSBvZiBpdC4gIFRoZSBiYXNlbGluZSBvdmVyaGVhZCBjYW4gYmUKK21lYXN1cmVkIGJ5IGludm9raW5nIHRoZSBwcm9ncmFtIHdpdGhvdXQgYXJndW1lbnRzLgogCi1UaGUgYmFzZWxpbmUgb3ZlcmhlYWQgZGlmZmVycyBiZXR3ZWVuIFB5dGhvbiB2ZXJzaW9ucyEgIEFsc28sIHRvCi1mYWlybHkgY29tcGFyZSBvbGRlciBQeXRob24gdmVyc2lvbnMgdG8gUHl0aG9uIDIuMywgeW91IG1heSB3YW50IHRvCi11c2UgcHl0aG9uIC1PIGZvciB0aGUgb2xkZXIgdmVyc2lvbnMgdG8gYXZvaWQgdGltaW5nIFNFVF9MSU5FTk8KLWluc3RydWN0aW9ucy4KK0NsYXNzZXM6CisKKyAgICBUaW1lcgorCitGdW5jdGlvbnM6CisKKyAgICB0aW1laXQoc3RyaW5nLCBzdHJpbmcpIC0+IGZsb2F0CisgICAgcmVwZWF0KHN0cmluZywgc3RyaW5nKSAtPiBsaXN0CisgICAgZGVmYXVsdF90aW1lcigpIC0+IGZsb2F0CisKICIiIgogCiBpbXBvcnQgZ2MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi10cnk6Ci0gICAgaW1wb3J0IGl0ZXJ0b29scwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgTXVzdCBiZSBhbiBvbGRlciBQeXRob24gdmVyc2lvbiAoc2VlIHRpbWVpdCgpIGJlbG93KQotICAgIGl0ZXJ0b29scyA9IE5vbmUKK2ltcG9ydCBpdGVydG9vbHMKIAotX19hbGxfXyA9IFsiVGltZXIiXQorX19hbGxfXyA9IFsiVGltZXIiLCAidGltZWl0IiwgInJlcGVhdCIsICJkZWZhdWx0X3RpbWVyIl0KIAogZHVtbXlfc3JjX25hbWUgPSAiPHRpbWVpdC1zcmM+IgogZGVmYXVsdF9udW1iZXIgPSAxMDAwMDAwCkBAIC0xODAsMTAgKzE3MSw3IEBACiAgICAgICAgIHRvIG9uZSBtaWxsaW9uLiAgVGhlIG1haW4gc3RhdGVtZW50LCB0aGUgc2V0dXAgc3RhdGVtZW50IGFuZAogICAgICAgICB0aGUgdGltZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGl0ZXJ0b29sczoKLSAgICAgICAgICAgIGl0ID0gaXRlcnRvb2xzLnJlcGVhdChOb25lLCBudW1iZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdCA9IFtOb25lXSAqIG51bWJlcgorICAgICAgICBpdCA9IGl0ZXJ0b29scy5yZXBlYXQoTm9uZSwgbnVtYmVyKQogICAgICAgICBnY29sZCA9IGdjLmlzZW5hYmxlZCgpCiAgICAgICAgIGdjLmRpc2FibGUoKQogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9fX2luaXRfXy5weSBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CmluZGV4IDIxOTFjYTcuLjcyOGZmNDIgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5CisrKyBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CkBAIC0yMTgxLDQ1ICsyMTgxLDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2ludm9rZScpCiAKLQotIyBJbmRpY2VzOgotIyBYWFggSSBkb24ndCBsaWtlIHRoZXNlIC0tIHRha2UgdGhlbSBhd2F5Ci1kZWYgQXRFbmQoKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0RW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcmV0dXJuICdlbmQnCi0KLQotZGVmIEF0SW5zZXJ0KCphcmdzKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0SW5zZXJ0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcyA9ICdpbnNlcnQnCi0gICAgZm9yIGEgaW4gYXJnczoKLSAgICAgICAgaWYgYTogcyA9IHMgKyAoJyAnICsgYSkKLSAgICByZXR1cm4gcwotCi0KLWRlZiBBdFNlbEZpcnN0KCk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdFNlbEZpcnN0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcmV0dXJuICdzZWwuZmlyc3QnCi0KLQotZGVmIEF0U2VsTGFzdCgpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRTZWxMYXN0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcmV0dXJuICdzZWwubGFzdCcKLQotCi1kZWYgQXQoeCwgeT1Ob25lKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgaWYgeSBpcyBOb25lOgotICAgICAgICByZXR1cm4gJ0AlcicgJSAoeCwpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICdAJXIsJXInICUgKHgsIHkpCi0KLQogY2xhc3MgQ2FudmFzKFdpZGdldCwgWFZpZXcsIFlWaWV3KToKICAgICAiIiJDYW52YXMgd2lkZ2V0IHRvIGRpc3BsYXkgZ3JhcGhpY2FsIGVsZW1lbnRzIGxpa2UgbGluZXMgb3IgdGV4dC4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIGNuZj17fSwgKiprdyk6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5IGIvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weQppbmRleCAzZmZiMjUyLi5hNzFhZmIyIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5CisrKyBiL0xpYi90a2ludGVyL2ZpbGVkaWFsb2cucHkKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgICAgICBkaXIsIHBhdCA9IHNlbGYuZ2V0X2ZpbHRlcigpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLm1hc3Rlci5iZWxsKCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcgpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGRpcik6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHB3ZCA9IE5vbmUKICAgICAgICAgICAgIGlmIHB3ZDoKICAgICAgICAgICAgICAgICBkaXIgPSBvcy5wYXRoLmpvaW4ocHdkLCBkaXIpCmRpZmYgLS1naXQgYS9MaWIvdG9rZW4ucHkgYi9MaWIvdG9rZW4ucHkKaW5kZXggMzFmYWUwYS4uNzQ3MGM4YyAxMDA3NTUKLS0tIGEvTGliL3Rva2VuLnB5CisrKyBiL0xpYi90b2tlbi5weQpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBvdXRGaWxlTmFtZSA9IGFyZ3NbMV0KICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihpbkZpbGVOYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBsaW5lcyA9IGZwLnJlYWQoKS5zcGxpdCgiXG4iKQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0OgogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKG91dEZpbGVOYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoMikKICAgICBmb3JtYXQgPSBmcC5yZWFkKCkuc3BsaXQoIlxuIikKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgIGZvcm1hdFtzdGFydDplbmRdID0gbGluZXMKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihvdXRGaWxlTmFtZSwgJ3cnKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoNCkKICAgICBmcC53cml0ZSgiXG4iLmpvaW4oZm9ybWF0KSkKZGlmZiAtLWdpdCBhL0xpYi90b2tlbml6ZS5weSBiL0xpYi90b2tlbml6ZS5weQppbmRleCBmMWU2MWQ4Li45MWY4ZTQ3IDEwMDY0NAotLS0gYS9MaWIvdG9rZW5pemUucHkKKysrIGIvTGliL3Rva2VuaXplLnB5CkBAIC02NzAsNyArNjcwLDcgQEAKICAgICAgICAgZXJyb3IoZXJyLmFyZ3NbMF0sIGZpbGVuYW1lLCAobGluZSwgY29sdW1uKSkKICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXJyOgogICAgICAgICBlcnJvcihlcnIsIGZpbGVuYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIGVycm9yKGVycikKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgIHByaW50KCJpbnRlcnJ1cHRlZFxuIikKZGlmZiAtLWdpdCBhL0xpYi90cmFjZS5weSBiL0xpYi90cmFjZS5weQppbmRleCBjMDliMzY1Li4wOWZlOWVlIDEwMDY0NAotLS0gYS9MaWIvdHJhY2UucHkKKysrIGIvTGliL3RyYWNlLnB5CkBAIC0yMzgsNyArMjM4LDcgQEAKICAgICAgICAgICAgICAgICBjb3VudHMsIGNhbGxlZGZ1bmNzLCBjYWxsZXJzID0gXAogICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWQob3BlbihzZWxmLmluZmlsZSwgJ3JiJykpCiAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGUoc2VsZi5fX2NsYXNzX18oY291bnRzLCBjYWxsZWRmdW5jcywgY2FsbGVycykpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yLCBWYWx1ZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yLCBWYWx1ZUVycm9yKSBhcyBlcnI6CiAgICAgICAgICAgICAgICAgcHJpbnQoKCJTa2lwcGluZyBjb3VudHMgZmlsZSAlcjogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuaW5maWxlLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQogCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcCgoc2VsZi5jb3VudHMsIHNlbGYuY2FsbGVkZnVuY3MsIHNlbGYuY2FsbGVycyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbihzZWxmLm91dGZpbGUsICd3YicpLCAxKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50KCJDYW4ndCBzYXZlIGNvdW50cyBmaWxlcyBiZWNhdXNlICVzIiAlIGVyciwgZmlsZT1zeXMuc3RkZXJyKQogCiAgICAgZGVmIHdyaXRlX3Jlc3VsdHNfZmlsZShzZWxmLCBwYXRoLCBsaW5lcywgbG5vdGFiLCBsaW5lc19oaXQsIGVuY29kaW5nPU5vbmUpOgpAQCAtMzU2LDcgKzM1Niw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3V0ZmlsZSA9IG9wZW4ocGF0aCwgInciLCBlbmNvZGluZz1lbmNvZGluZykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCgoInRyYWNlOiBDb3VsZCBub3Qgb3BlbiAlciBmb3Igd3JpdGluZzogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0gc2tpcHBpbmciICUgKHBhdGgsIGVycikpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICByZXR1cm4gMCwgMApAQCAtNDM3LDcgKzQzNyw3IEBACiAgICAgICAgIHdpdGggdG9rZW5pemUub3BlbihmaWxlbmFtZSkgYXMgZjoKICAgICAgICAgICAgIHByb2cgPSBmLnJlYWQoKQogICAgICAgICAgICAgZW5jb2RpbmcgPSBmLmVuY29kaW5nCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgcHJpbnQoKCJOb3QgcHJpbnRpbmcgY292ZXJhZ2UgZGF0YSBmb3IgJXI6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIGVycikpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIHJldHVybiB7fQpAQCAtODAyLDcgKzgwMiw3IEBACiAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBOb25lLAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdC5ydW5jdHgoY29kZSwgZ2xvYnMsIGdsb2JzKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIF9lcnJfZXhpdCgiQ2Fubm90IHJ1biBmaWxlICVyIGJlY2F1c2U6ICVzIiAlIChzeXMuYXJndlswXSwgZXJyKSkKICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CiAgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdHJhY2ViYWNrLnB5IGIvTGliL3RyYWNlYmFjay5weQppbmRleCBiMTNiZmUyLi4zYjJjYWU3IDEwMDY0NAotLS0gYS9MaWIvdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90cmFjZWJhY2sucHkKQEAgLTIsMjYgKzIsMzIgQEAKIAogaW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IHN5cworaW1wb3J0IG9wZXJhdG9yCiAKIF9fYWxsX18gPSBbJ2V4dHJhY3Rfc3RhY2snLCAnZXh0cmFjdF90YicsICdmb3JtYXRfZXhjZXB0aW9uJywKICAgICAgICAgICAgJ2Zvcm1hdF9leGNlcHRpb25fb25seScsICdmb3JtYXRfbGlzdCcsICdmb3JtYXRfc3RhY2snLAogICAgICAgICAgICAnZm9ybWF0X3RiJywgJ3ByaW50X2V4YycsICdmb3JtYXRfZXhjJywgJ3ByaW50X2V4Y2VwdGlvbicsCi0gICAgICAgICAgICdwcmludF9sYXN0JywgJ3ByaW50X3N0YWNrJywgJ3ByaW50X3RiJ10KKyAgICAgICAgICAgJ3ByaW50X2xhc3QnLCAncHJpbnRfc3RhY2snLCAncHJpbnRfdGInLAorICAgICAgICAgICAnY2xlYXJfZnJhbWVzJ10KIAotZGVmIF9wcmludChmaWxlLCBzdHI9JycsIHRlcm1pbmF0b3I9J1xuJyk6Ci0gICAgZmlsZS53cml0ZShzdHIrdGVybWluYXRvcikKKyMKKyMgRm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgbGlzdHMgb2YgdHJhY2ViYWNrIGxpbmVzLgorIwogCitkZWYgX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpOgorICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgorICAgICAgICBpdGVtID0gJyAgRmlsZSAie30iLCBsaW5lIHt9LCBpbiB7fVxuJy5mb3JtYXQoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkKKyAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtICsgJyAgICB7fVxuJy5mb3JtYXQobGluZS5zdHJpcCgpKQorICAgICAgICB5aWVsZCBpdGVtCiAKIGRlZiBwcmludF9saXN0KGV4dHJhY3RlZF9saXN0LCBmaWxlPU5vbmUpOgogICAgICIiIlByaW50IHRoZSBsaXN0IG9mIHR1cGxlcyBhcyByZXR1cm5lZCBieSBleHRyYWN0X3RiKCkgb3IKICAgICBleHRyYWN0X3N0YWNrKCkgYXMgYSBmb3JtYXR0ZWQgc3RhY2sgdHJhY2UgdG8gdGhlIGdpdmVuIGZpbGUuIiIiCiAgICAgaWYgZmlsZSBpcyBOb25lOgogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgotICAgICAgICBfcHJpbnQoZmlsZSwKLSAgICAgICAgICAgICAgICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLGxpbmVubyxuYW1lKSkKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgIF9wcmludChmaWxlLCAnICAgICVzJyAlIGxpbmUuc3RyaXAoKSkKKyAgICBmb3IgaXRlbSBpbiBfZm9ybWF0X2xpc3RfaXRlcihleHRyYWN0ZWRfbGlzdCk6CisgICAgICAgIHByaW50KGl0ZW0sIGZpbGU9ZmlsZSwgZW5kPSIiKQogCiBkZWYgZm9ybWF0X2xpc3QoZXh0cmFjdGVkX2xpc3QpOgogICAgICIiIkZvcm1hdCBhIGxpc3Qgb2YgdHJhY2ViYWNrIGVudHJ5IHR1cGxlcyBmb3IgcHJpbnRpbmcuCkBAIC0zMywxNCArMzksNDQgQEAKICAgICB0aGUgc3RyaW5ncyBtYXkgY29udGFpbiBpbnRlcm5hbCBuZXdsaW5lcyBhcyB3ZWxsLCBmb3IgdGhvc2UgaXRlbXMKICAgICB3aG9zZSBzb3VyY2UgdGV4dCBsaW5lIGlzIG5vdCBOb25lLgogICAgICIiIgotICAgIGxpc3QgPSBbXQotICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgotICAgICAgICBpdGVtID0gJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiAlc1xuJyAlIChmaWxlbmFtZSxsaW5lbm8sbmFtZSkKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgIGl0ZW0gPSBpdGVtICsgJyAgICAlc1xuJyAlIGxpbmUuc3RyaXAoKQotICAgICAgICBsaXN0LmFwcGVuZChpdGVtKQotICAgIHJldHVybiBsaXN0CisgICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpKQogCisjCisjIFByaW50aW5nIGFuZCBFeHRyYWN0aW5nIFRyYWNlYmFja3MuCisjCisKKyMgZXh0cmFjdG9yIHRha2VzIGN1cnIgYW5kIG5lZWRzIHRvIHJldHVybiBhIHR1cGxlIG9mOgorIyAtIEZyYW1lIG9iamVjdAorIyAtIExpbmUgbnVtYmVyCisjIC0gTmV4dCBpdGVtIChzYW1lIHR5cGUgYXMgY3VycikKKyMgSW4gcHJhY3RpY2UsIGN1cnIgaXMgZWl0aGVyIGEgdHJhY2ViYWNrIG9yIGEgZnJhbWUuCitkZWYgX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcihjdXJyLCBsaW1pdCwgZXh0cmFjdG9yKToKKyAgICBpZiBsaW1pdCBpcyBOb25lOgorICAgICAgICBsaW1pdCA9IGdldGF0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnLCBOb25lKQorCisgICAgbiA9IDAKKyAgICB3aGlsZSBjdXJyIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgorICAgICAgICBmLCBsaW5lbm8sIG5leHRfaXRlbSA9IGV4dHJhY3RvcihjdXJyKQorICAgICAgICBjbyA9IGYuZl9jb2RlCisgICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKKyAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKKworICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKKyAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQorCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gTm9uZQorCisgICAgICAgIHlpZWxkIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKQorICAgICAgICBjdXJyID0gbmV4dF9pdGVtCisgICAgICAgIG4gKz0gMQorCitkZWYgX2V4dHJhY3RfdGJfaXRlcih0YiwgbGltaXQpOgorICAgIHJldHVybiBfZXh0cmFjdF90Yl9vcl9zdGFja19pdGVyKAorICAgICAgICAgICAgICAgIHRiLCBsaW1pdCwKKyAgICAgICAgICAgICAgICBvcGVyYXRvci5hdHRyZ2V0dGVyKCJ0Yl9mcmFtZSIsICJ0Yl9saW5lbm8iLCAidGJfbmV4dCIpKQogCiBkZWYgcHJpbnRfdGIodGIsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgdXAgdG8gJ2xpbWl0JyBzdGFjayB0cmFjZSBlbnRyaWVzIGZyb20gdGhlIHRyYWNlYmFjayAndGInLgpAQCAtNTAsMjkgKzg2LDExIEBACiAgICAgJ2ZpbGUnIHNob3VsZCBiZSBhbiBvcGVuIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdCB3aXRoIGEgd3JpdGUoKQogICAgIG1ldGhvZC4KICAgICAiIiIKLSAgICBpZiBmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICd0cmFjZWJhY2tsaW1pdCcpOgotICAgICAgICAgICAgbGltaXQgPSBzeXMudHJhY2ViYWNrbGltaXQKLSAgICBuID0gMAotICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgotICAgICAgICBmID0gdGIudGJfZnJhbWUKLSAgICAgICAgbGluZW5vID0gdGIudGJfbGluZW5vCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQotICAgICAgICBuYW1lID0gY28uY29fbmFtZQotICAgICAgICBfcHJpbnQoZmlsZSwKLSAgICAgICAgICAgICAgICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQotICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQotICAgICAgICBpZiBsaW5lOiBfcHJpbnQoZmlsZSwgJyAgICAnICsgbGluZS5zdHJpcCgpKQotICAgICAgICB0YiA9IHRiLnRiX25leHQKLSAgICAgICAgbiA9IG4rMQorICAgIHByaW50X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQ9bGltaXQpLCBmaWxlPWZpbGUpCiAKIGRlZiBmb3JtYXRfdGIodGIsIGxpbWl0PU5vbmUpOgogICAgICIiIkEgc2hvcnRoYW5kIGZvciAnZm9ybWF0X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQpKScuIiIiCi0gICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0KSkKKyAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQ9bGltaXQpKQogCiBkZWYgZXh0cmFjdF90Yih0YiwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiUmV0dXJuIGxpc3Qgb2YgdXAgdG8gbGltaXQgcHJlLXByb2Nlc3NlZCBlbnRyaWVzIGZyb20gdHJhY2ViYWNrLgpAQCAtODUsMjYgKzEwMywxMSBAQAogICAgIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2Ugc3RyaXBwZWQ7IGlmIHRoZSBzb3VyY2UgaXMgbm90CiAgICAgYXZhaWxhYmxlIGl0IGlzIE5vbmUuCiAgICAgIiIiCi0gICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICd0cmFjZWJhY2tsaW1pdCcpOgotICAgICAgICAgICAgbGltaXQgPSBzeXMudHJhY2ViYWNrbGltaXQKLSAgICBsaXN0ID0gW10KLSAgICBuID0gMAotICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgotICAgICAgICBmID0gdGIudGJfZnJhbWUKLSAgICAgICAgbGluZW5vID0gdGIudGJfbGluZW5vCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQotICAgICAgICBuYW1lID0gY28uY29fbmFtZQotICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQotICAgICAgICBpZiBsaW5lOiBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgIGVsc2U6IGxpbmUgPSBOb25lCi0gICAgICAgIGxpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKLSAgICAgICAgdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgIG4gPSBuKzEKLSAgICByZXR1cm4gbGlzdAorICAgIHJldHVybiBsaXN0KF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0PWxpbWl0KSkKIAorIworIyBFeGNlcHRpb24gZm9ybWF0dGluZyBhbmQgb3V0cHV0LgorIwogCiBfY2F1c2VfbWVzc2FnZSA9ICgKICAgICAiXG5UaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlICIKQEAgLTEzMiw5ICsxMzUsMjMgQEAKICAgICBpdHMuYXBwZW5kKFsoZXhjLCBjdXN0b21fdGIgb3IgZXhjLl9fdHJhY2ViYWNrX18pXSkKICAgICAjIGl0ZXJ0b29scy5jaGFpbiBpcyBpbiBhbiBleHRlbnNpb24gbW9kdWxlIGFuZCBtYXkgYmUgdW5hdmFpbGFibGUKICAgICBmb3IgaXQgaW4gaXRzOgotICAgICAgICBmb3IgeCBpbiBpdDoKLSAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgeWllbGQgZnJvbSBpdAogCitkZWYgX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pOgorICAgIGlmIGNoYWluOgorICAgICAgICB2YWx1ZXMgPSBfaXRlcl9jaGFpbih2YWx1ZSwgdGIpCisgICAgZWxzZToKKyAgICAgICAgdmFsdWVzID0gWyh2YWx1ZSwgdGIpXQorCisgICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICAjIFRoaXMgaXMgYSBjYXVzZS9jb250ZXh0IG1lc3NhZ2UgbGluZQorICAgICAgICAgICAgeWllbGQgdmFsdWUgKyAnXG4nCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiB0YjoKKyAgICAgICAgICAgIHlpZWxkICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9mb3JtYXRfbGlzdF9pdGVyKF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0PWxpbWl0KSkKKyAgICAgICAgeWllbGQgZnJvbSBfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIodHlwZSh2YWx1ZSksIHZhbHVlKQogCiBkZWYgcHJpbnRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiUHJpbnQgZXhjZXB0aW9uIHVwIHRvICdsaW1pdCcgc3RhY2sgdHJhY2UgZW50cmllcyBmcm9tICd0YicgdG8gJ2ZpbGUnLgpAQCAtMTQ5LDIwICsxNjYsOCBAQAogICAgICIiIgogICAgIGlmIGZpbGUgaXMgTm9uZToKICAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKLSAgICBpZiBjaGFpbjoKLSAgICAgICAgdmFsdWVzID0gX2l0ZXJfY2hhaW4odmFsdWUsIHRiKQotICAgIGVsc2U6Ci0gICAgICAgIHZhbHVlcyA9IFsodmFsdWUsIHRiKV0KLSAgICBmb3IgdmFsdWUsIHRiIGluIHZhbHVlczoKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgICAgICAgIF9wcmludChmaWxlLCB2YWx1ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHRiOgotICAgICAgICAgICAgX3ByaW50KGZpbGUsICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6JykKLSAgICAgICAgICAgIHByaW50X3RiKHRiLCBsaW1pdCwgZmlsZSkKLSAgICAgICAgbGluZXMgPSBmb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZSh2YWx1ZSksIHZhbHVlKQotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIF9wcmludChmaWxlLCBsaW5lLCAnJykKKyAgICBmb3IgbGluZSBpbiBfZm9ybWF0X2V4Y2VwdGlvbl9pdGVyKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBjaGFpbik6CisgICAgICAgIHByaW50KGxpbmUsIGZpbGU9ZmlsZSwgZW5kPSIiKQogCiBkZWYgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJGb3JtYXQgYSBzdGFjayB0cmFjZSBhbmQgdGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KQEAgLTE3MywyMCArMTc4LDcgQEAKICAgICB0aGVzZSBsaW5lcyBhcmUgY29uY2F0ZW5hdGVkIGFuZCBwcmludGVkLCBleGFjdGx5IHRoZSBzYW1lIHRleHQgaXMKICAgICBwcmludGVkIGFzIGRvZXMgcHJpbnRfZXhjZXB0aW9uKCkuCiAgICAgIiIiCi0gICAgbGlzdCA9IFtdCi0gICAgaWYgY2hhaW46Ci0gICAgICAgIHZhbHVlcyA9IF9pdGVyX2NoYWluKHZhbHVlLCB0YikKLSAgICBlbHNlOgotICAgICAgICB2YWx1ZXMgPSBbKHZhbHVlLCB0YildCi0gICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZCh2YWx1ZSArICdcbicpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiB0YjoKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKCdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nKQotICAgICAgICAgICAgbGlzdC5leHRlbmQoZm9ybWF0X3RiKHRiLCBsaW1pdCkpCi0gICAgICAgIGxpc3QuZXh0ZW5kKGZvcm1hdF9leGNlcHRpb25fb25seSh0eXBlKHZhbHVlKSwgdmFsdWUpKQotICAgIHJldHVybiBsaXN0CisgICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pKQogCiBkZWYgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV0eXBlLCB2YWx1ZSk6CiAgICAgIiIiRm9ybWF0IHRoZSBleGNlcHRpb24gcGFydCBvZiBhIHRyYWNlYmFjay4KQEAgLTIwNCwxMCArMTk2LDE0IEBACiAgICAgc3RyaW5nIGluIHRoZSBsaXN0LgogCiAgICAgIiIiCisgICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKGV0eXBlLCB2YWx1ZSkpCisKK2RlZiBfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIoZXR5cGUsIHZhbHVlKToKICAgICAjIEdyYWNlZnVsbHkgaGFuZGxlICh0aGUgd2F5IFB5dGhvbiAyLjQgYW5kIGVhcmxpZXIgZGlkKSB0aGUgY2FzZSBvZgogICAgICMgYmVpbmcgY2FsbGVkIHdpdGggKE5vbmUsIE5vbmUpLgogICAgIGlmIGV0eXBlIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiBbX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpXQorICAgICAgICB5aWVsZCBfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKGV0eXBlLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuCiAKICAgICBzdHlwZSA9IGV0eXBlLl9fbmFtZV9fCiAgICAgc21vZCA9IGV0eXBlLl9fbW9kdWxlX18KQEAgLTIxNSwyNiArMjExLDI2IEBACiAgICAgICAgIHN0eXBlID0gc21vZCArICcuJyArIHN0eXBlCiAKICAgICBpZiBub3QgaXNzdWJjbGFzcyhldHlwZSwgU3ludGF4RXJyb3IpOgotICAgICAgICByZXR1cm4gW19mb3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUsIHZhbHVlKV0KKyAgICAgICAgeWllbGQgX2Zvcm1hdF9maW5hbF9leGNfbGluZShzdHlwZSwgdmFsdWUpCisgICAgICAgIHJldHVybgogCiAgICAgIyBJdCB3YXMgYSBzeW50YXggZXJyb3I7IHNob3cgZXhhY3RseSB3aGVyZSB0aGUgcHJvYmxlbSB3YXMgZm91bmQuCi0gICAgbGluZXMgPSBbXQogICAgIGZpbGVuYW1lID0gdmFsdWUuZmlsZW5hbWUgb3IgIjxzdHJpbmc+IgogICAgIGxpbmVubyA9IHN0cih2YWx1ZS5saW5lbm8pIG9yICc/JwotICAgIGxpbmVzLmFwcGVuZCgnICBGaWxlICIlcyIsIGxpbmUgJXNcbicgJSAoZmlsZW5hbWUsIGxpbmVubykpCisgICAgeWllbGQgJyAgRmlsZSAie30iLCBsaW5lIHt9XG4nLmZvcm1hdChmaWxlbmFtZSwgbGluZW5vKQorCiAgICAgYmFkbGluZSA9IHZhbHVlLnRleHQKICAgICBvZmZzZXQgPSB2YWx1ZS5vZmZzZXQKICAgICBpZiBiYWRsaW5lIGlzIG5vdCBOb25lOgotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlc1xuJyAlIGJhZGxpbmUuc3RyaXAoKSkKKyAgICAgICAgeWllbGQgJyAgICB7fVxuJy5mb3JtYXQoYmFkbGluZS5zdHJpcCgpKQogICAgICAgICBpZiBvZmZzZXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBjYXJldHNwYWNlID0gYmFkbGluZS5yc3RyaXAoJ1xuJylbOm9mZnNldF0ubHN0cmlwKCkKICAgICAgICAgICAgICMgbm9uLXNwYWNlIHdoaXRlc3BhY2UgKGxpa2VzIHRhYnMpIG11c3QgYmUga2VwdCBmb3IgYWxpZ25tZW50CiAgICAgICAgICAgICBjYXJldHNwYWNlID0gKChjLmlzc3BhY2UoKSBhbmQgYyBvciAnICcpIGZvciBjIGluIGNhcmV0c3BhY2UpCiAgICAgICAgICAgICAjIG9ubHkgdGhyZWUgc3BhY2VzIHRvIGFjY291bnQgZm9yIG9mZnNldDEgPT0gcG9zIDAKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgJXNeXG4nICUgJycuam9pbihjYXJldHNwYWNlKSkKKyAgICAgICAgICAgIHlpZWxkICcgICB7fV5cbicuZm9ybWF0KCcnLmpvaW4oY2FyZXRzcGFjZSkpCiAgICAgbXNnID0gdmFsdWUubXNnIG9yICI8bm8gZGV0YWlsIGF2YWlsYWJsZT4iCi0gICAgbGluZXMuYXBwZW5kKCIlczogJXNcbiIgJSAoc3R5cGUsIG1zZykpCi0gICAgcmV0dXJuIGxpbmVzCisgICAgeWllbGQgInt9OiB7fVxuIi5mb3JtYXQoc3R5cGUsIG1zZykKIAogZGVmIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKToKICAgICB2YWx1ZXN0ciA9IF9zb21lX3N0cih2YWx1ZSkKQEAgLTI1MCwzOCArMjQ2LDM0IEBACiAgICAgZXhjZXB0OgogICAgICAgICByZXR1cm4gJzx1bnByaW50YWJsZSAlcyBvYmplY3Q+JyAlIHR5cGUodmFsdWUpLl9fbmFtZV9fCiAKLQogZGVmIHByaW50X2V4YyhsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlNob3J0aGFuZCBmb3IgJ3ByaW50X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCksIGxpbWl0LCBmaWxlKScuIiIiCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIHRyeToKLSAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHByaW50X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgZmlsZSwgY2hhaW4pCi0gICAgZmluYWxseToKLSAgICAgICAgZXR5cGUgPSB2YWx1ZSA9IHRiID0gTm9uZQotCisgICAgcHJpbnRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGZpbGU9ZmlsZSwgY2hhaW49Y2hhaW4pCiAKIGRlZiBmb3JtYXRfZXhjKGxpbWl0PU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIkxpa2UgcHJpbnRfZXhjKCkgYnV0IHJldHVybiBhIHN0cmluZy4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICByZXR1cm4gJycuam9pbigKLSAgICAgICAgICAgIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKSkKLSAgICBmaW5hbGx5OgotICAgICAgICBldHlwZSA9IHZhbHVlID0gdGIgPSBOb25lCi0KKyAgICByZXR1cm4gIiIuam9pbihmb3JtYXRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGNoYWluPWNoYWluKSkKIAogZGVmIHByaW50X2xhc3QobGltaXQ9Tm9uZSwgZmlsZT1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciAncHJpbnRfZXhjZXB0aW9uKHN5cy5sYXN0X3R5cGUsCiAgICAgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywgbGltaXQsIGZpbGUpJy4iIiIKICAgICBpZiBub3QgaGFzYXR0cihzeXMsICJsYXN0X3R5cGUiKToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gbGFzdCBleGNlcHRpb24iKQotICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKICAgICBwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywKICAgICAgICAgICAgICAgICAgICAgbGltaXQsIGZpbGUsIGNoYWluKQogCisjCisjIFByaW50aW5nIGFuZCBFeHRyYWN0aW5nIFN0YWNrcy4KKyMKKworZGVmIF9leHRyYWN0X3N0YWNrX2l0ZXIoZiwgbGltaXQ9Tm9uZSk6CisgICAgcmV0dXJuIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoCisgICAgICAgICAgICAgICAgZiwgbGltaXQsIGxhbWJkYSBmOiAoZiwgZi5mX2xpbmVubywgZi5mX2JhY2spKQorCitkZWYgX2dldF9zdGFjayhmKToKKyAgICBpZiBmIGlzIE5vbmU6CisgICAgICAgIGYgPSBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfYmFjaworICAgIHJldHVybiBmCiAKIGRlZiBwcmludF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgYSBzdGFjayB0cmFjZSBmcm9tIGl0cyBpbnZvY2F0aW9uIHBvaW50LgpAQCAtMjkwLDIxICsyODIsMTEgQEAKICAgICBzdGFjayBmcmFtZSBhdCB3aGljaCB0byBzdGFydC4gVGhlIG9wdGlvbmFsICdsaW1pdCcgYW5kICdmaWxlJwogICAgIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHByaW50X2V4Y2VwdGlvbigpLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIHByaW50X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCksIGZpbGUpCisgICAgcHJpbnRfbGlzdChleHRyYWN0X3N0YWNrKF9nZXRfc3RhY2soZiksIGxpbWl0PWxpbWl0KSwgZmlsZT1maWxlKQogCiBkZWYgZm9ybWF0X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAnZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpJy4iIiIKLSAgICBpZiBmIGlzIE5vbmU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpCisgICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3Rfc3RhY2soX2dldF9zdGFjayhmKSwgbGltaXQ9bGltaXQpKQogCiBkZWYgZXh0cmFjdF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUpOgogICAgICIiIkV4dHJhY3QgdGhlIHJhdyB0cmFjZWJhY2sgZnJvbSB0aGUgY3VycmVudCBzdGFjayBmcmFtZS4KQEAgLTMxNSwyNyArMjk3LDE2IEBACiAgICAgbGluZSBudW1iZXIsIGZ1bmN0aW9uIG5hbWUsIHRleHQpLCBhbmQgdGhlIGVudHJpZXMgYXJlIGluIG9yZGVyCiAgICAgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0IHN0YWNrIGZyYW1lLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKKyAgICBzdGFjayA9IGxpc3QoX2V4dHJhY3Rfc3RhY2tfaXRlcihfZ2V0X3N0YWNrKGYpLCBsaW1pdD1saW1pdCkpCisgICAgc3RhY2sucmV2ZXJzZSgpCisgICAgcmV0dXJuIHN0YWNrCisKK2RlZiBjbGVhcl9mcmFtZXModGIpOgorICAgICJDbGVhciBhbGwgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIGZyYW1lcyBvZiBhIHRyYWNlYmFjay4iCisgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0Jyk6Ci0gICAgICAgICAgICBsaW1pdCA9IHN5cy50cmFjZWJhY2tsaW1pdAotICAgIGxpc3QgPSBbXQotICAgIG4gPSAwCi0gICAgd2hpbGUgZiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgbGluZW5vID0gZi5mX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBlbHNlOiBsaW5lID0gTm9uZQotICAgICAgICBsaXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCi0gICAgICAgIGYgPSBmLmZfYmFjawotICAgICAgICBuID0gbisxCi0gICAgbGlzdC5yZXZlcnNlKCkKLSAgICByZXR1cm4gbGlzdAorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBJZ25vcmUgdGhlIGV4Y2VwdGlvbiByYWlzZWQgaWYgdGhlIGZyYW1lIGlzIHN0aWxsIGV4ZWN1dGluZy4KKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CmRpZmYgLS1naXQgYS9MaWIvdHVydGxlLnB5IGIvTGliL3R1cnRsZS5weQppbmRleCBjNmViZmE1Li5hYjdiNmJhIDEwMDY0NAotLS0gYS9MaWIvdHVydGxlLnB5CisrKyBiL0xpYi90dXJ0bGUucHkKQEAgLTM4NDMsMTggKzM4NDMsMTggQEAKICAgICAgICAga2V5ID0gIlR1cnRsZS4iK21ldGhvZG5hbWUKICAgICAgICAgZG9jc2RpY3Rba2V5XSA9IGV2YWwoa2V5KS5fX2RvY19fCiAKLSAgICBmID0gb3BlbigiJXMucHkiICUgZmlsZW5hbWUsInciKQotICAgIGtleXMgPSBzb3J0ZWQoW3ggZm9yIHggaW4gZG9jc2RpY3Qua2V5cygpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKLSAgICBmLndyaXRlKCdkb2NzZGljdCA9IHtcblxuJykKLSAgICBmb3Iga2V5IGluIGtleXNbOi0xXToKKyAgICB3aXRoIG9wZW4oIiVzLnB5IiAlIGZpbGVuYW1lLCJ3IikgYXMgZjoKKyAgICAgICAga2V5cyA9IHNvcnRlZChbeCBmb3IgeCBpbiBkb2NzZGljdC5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKKyAgICAgICAgZi53cml0ZSgnZG9jc2RpY3QgPSB7XG5cbicpCisgICAgICAgIGZvciBrZXkgaW4ga2V5c1s6LTFdOgorICAgICAgICAgICAgZi53cml0ZSgnJXMgOlxuJyAlIHJlcHIoa2V5KSkKKyAgICAgICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGtleSA9IGtleXNbLTFdCiAgICAgICAgIGYud3JpdGUoJyVzIDpcbicgJSByZXByKGtleSkpCi0gICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCi0gICAga2V5ID0ga2V5c1stMV0KLSAgICBmLndyaXRlKCclcyA6XG4nICUgcmVwcihrZXkpKQotICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIlxuXG4nICUgZG9jc2RpY3Rba2V5XSkKLSAgICBmLndyaXRlKCJ9XG4iKQotICAgIGYuY2xvc2UoKQorICAgICAgICBmLndyaXRlKCcgICAgICAgICIiIiVzXG4iIiJcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGYud3JpdGUoIn1cbiIpCisgICAgICAgIGYuY2xvc2UoKQogCiBkZWYgcmVhZF9kb2NzdHJpbmdzKGxhbmcpOgogICAgICIiIlJlYWQgaW4gZG9jc3RyaW5ncyBmcm9tIGxhbmctc3BlY2lmaWMgZG9jc3RyaW5nIGRpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weSBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CmluZGV4IGNiZjNhZWIuLmExNDY4NGMgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CkBAIC02LDcgKzYsNyBAQAogZnJvbSBpZGxlbGliLlBlcmNvbGF0b3IgaW1wb3J0IFBlcmNvbGF0b3IKIGZyb20gaWRsZWxpYi5Db2xvckRlbGVnYXRvciBpbXBvcnQgQ29sb3JEZWxlZ2F0b3IKIGZyb20gaWRsZWxpYi50ZXh0VmlldyBpbXBvcnQgdmlld19maWxlICMgVGV4dFZpZXdlcgotZnJvbSBpbXAgaW1wb3J0IHJlbG9hZAorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHJlbG9hZAogCiBpbXBvcnQgdHVydGxlCiBpbXBvcnQgdGltZQpkaWZmIC0tZ2l0IGEvTGliL3R5cGVzLnB5IGIvTGliL3R5cGVzLnB5CmluZGV4IGNmZDA5ZWEuLjdlNGZlYzIgMTAwNjQ0Ci0tLSBhL0xpYi90eXBlcy5weQorKysgYi9MaWIvdHlwZXMucHkKQEAgLTk5LDMgKzk5LDYwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBhIChub24tc3RyaWN0KSBzdWJjbGFzcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAib2YgdGhlIG1ldGFjbGFzc2VzIG9mIGFsbCBpdHMgYmFzZXMiKQogICAgIHJldHVybiB3aW5uZXIKKworY2xhc3MgRHluYW1pY0NsYXNzQXR0cmlidXRlOgorICAgICIiIlJvdXRlIGF0dHJpYnV0ZSBhY2Nlc3Mgb24gYSBjbGFzcyB0byBfX2dldGF0dHJfXy4KKworICAgIFRoaXMgaXMgYSBkZXNjcmlwdG9yLCB1c2VkIHRvIGRlZmluZSBhdHRyaWJ1dGVzIHRoYXQgYWN0IGRpZmZlcmVudGx5IHdoZW4KKyAgICBhY2Nlc3NlZCB0aHJvdWdoIGFuIGluc3RhbmNlIGFuZCB0aHJvdWdoIGEgY2xhc3MuICBJbnN0YW5jZSBhY2Nlc3MgcmVtYWlucworICAgIG5vcm1hbCwgYnV0IGFjY2VzcyB0byBhbiBhdHRyaWJ1dGUgdGhyb3VnaCBhIGNsYXNzIHdpbGwgYmUgcm91dGVkIHRvIHRoZQorICAgIGNsYXNzJ3MgX19nZXRhdHRyX18gbWV0aG9kOyB0aGlzIGlzIGRvbmUgYnkgcmFpc2luZyBBdHRyaWJ1dGVFcnJvci4KKworICAgIFRoaXMgYWxsb3dzIG9uZSB0byBoYXZlIHByb3BlcnRpZXMgYWN0aXZlIG9uIGFuIGluc3RhbmNlLCBhbmQgaGF2ZSB2aXJ0dWFsCisgICAgYXR0cmlidXRlcyBvbiB0aGUgY2xhc3Mgd2l0aCB0aGUgc2FtZSBuYW1lIChzZWUgRW51bSBmb3IgYW4gZXhhbXBsZSkuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmdldD1Ob25lLCBmc2V0PU5vbmUsIGZkZWw9Tm9uZSwgZG9jPU5vbmUpOgorICAgICAgICBzZWxmLmZnZXQgPSBmZ2V0CisgICAgICAgIHNlbGYuZnNldCA9IGZzZXQKKyAgICAgICAgc2VsZi5mZGVsID0gZmRlbAorICAgICAgICAjIG5leHQgdHdvIGxpbmVzIG1ha2UgRHluYW1pY0NsYXNzQXR0cmlidXRlIGFjdCB0aGUgc2FtZSBhcyBwcm9wZXJ0eQorICAgICAgICBzZWxmLl9fZG9jX18gPSBkb2Mgb3IgZmdldC5fX2RvY19fCisgICAgICAgIHNlbGYub3ZlcndyaXRlX2RvYyA9IGRvYyBpcyBOb25lCisgICAgICAgICMgc3VwcG9ydCBmb3IgYWJzdHJhY3QgbWV0aG9kcworICAgICAgICBzZWxmLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gYm9vbChnZXRhdHRyKGZnZXQsICdfX2lzYWJzdHJhY3RtZXRob2RfXycsIEZhbHNlKSkKKworICAgIGRlZiBfX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcmNsYXNzPU5vbmUpOgorICAgICAgICBpZiBpbnN0YW5jZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fX2lzYWJzdHJhY3RtZXRob2RfXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoKQorICAgICAgICBlbGlmIHNlbGYuZmdldCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoInVucmVhZGFibGUgYXR0cmlidXRlIikKKyAgICAgICAgcmV0dXJuIHNlbGYuZmdldChpbnN0YW5jZSkKKworICAgIGRlZiBfX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSk6CisgICAgICAgIGlmIHNlbGYuZnNldCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImNhbid0IHNldCBhdHRyaWJ1dGUiKQorICAgICAgICBzZWxmLmZzZXQoaW5zdGFuY2UsIHZhbHVlKQorCisgICAgZGVmIF9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpOgorICAgICAgICBpZiBzZWxmLmZkZWwgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJjYW4ndCBkZWxldGUgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mZGVsKGluc3RhbmNlKQorCisgICAgZGVmIGdldHRlcihzZWxmLCBmZ2V0KToKKyAgICAgICAgZmRvYyA9IGZnZXQuX19kb2NfXyBpZiBzZWxmLm92ZXJ3cml0ZV9kb2MgZWxzZSBOb25lCisgICAgICAgIHJlc3VsdCA9IHR5cGUoc2VsZikoZmdldCwgc2VsZi5mc2V0LCBzZWxmLmZkZWwsIGZkb2Mgb3Igc2VsZi5fX2RvY19fKQorICAgICAgICByZXN1bHQub3ZlcndyaXRlX2RvYyA9IHNlbGYub3ZlcndyaXRlX2RvYworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgc2V0dGVyKHNlbGYsIGZzZXQpOgorICAgICAgICByZXN1bHQgPSB0eXBlKHNlbGYpKHNlbGYuZmdldCwgZnNldCwgc2VsZi5mZGVsLCBzZWxmLl9fZG9jX18pCisgICAgICAgIHJlc3VsdC5vdmVyd3JpdGVfZG9jID0gc2VsZi5vdmVyd3JpdGVfZG9jCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBkZWxldGVyKHNlbGYsIGZkZWwpOgorICAgICAgICByZXN1bHQgPSB0eXBlKHNlbGYpKHNlbGYuZmdldCwgc2VsZi5mc2V0LCBmZGVsLCBzZWxmLl9fZG9jX18pCisgICAgICAgIHJlc3VsdC5vdmVyd3JpdGVfZG9jID0gc2VsZi5vdmVyd3JpdGVfZG9jCisgICAgICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC9fX21haW5fXy5weQppbmRleCA3OThlYmMwLi4yNjYzMTc4IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKKysrIGIvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5CkBAIC0xMyw3ICsxMyw2IEBACiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKLWZyb20gLm1haW4gaW1wb3J0IG1haW4sIFRlc3RQcm9ncmFtLCBVU0FHRV9BU19NQUlOCi1UZXN0UHJvZ3JhbS5VU0FHRSA9IFVTQUdFX0FTX01BSU4KK2Zyb20gLm1haW4gaW1wb3J0IG1haW4sIFRlc3RQcm9ncmFtCiAKIG1haW4obW9kdWxlPU5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvY2FzZS5weSBiL0xpYi91bml0dGVzdC9jYXNlLnB5CmluZGV4IGY1NmFmNTUuLjdlZDkzMmYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9jYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC9jYXNlLnB5CkBAIC0zLDE0ICszLDE2IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBwcHJpbnQKIGltcG9ydCByZQogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb250ZXh0bGliCiAKIGZyb20gLiBpbXBvcnQgcmVzdWx0CiBmcm9tIC51dGlsIGltcG9ydCAoc3RyY2xhc3MsIHNhZmVfcmVwciwgX2NvdW50X2RpZmZfYWxsX3B1cnBvc2UsCi0gICAgICAgICAgICAgICAgICAgX2NvdW50X2RpZmZfaGFzaGFibGUpCisgICAgICAgICAgICAgICAgICAgX2NvdW50X2RpZmZfaGFzaGFibGUsIF9jb21tb25fc2hvcnRlbl9yZXByKQogCiBfX3VuaXR0ZXN0ID0gVHJ1ZQogCkBAIC0yNiwxNyArMjgsMTEgQEAKICAgICBpbnN0ZWFkIG9mIHJhaXNpbmcgdGhpcyBkaXJlY3RseS4KICAgICAiIiIKIAotY2xhc3MgX0V4cGVjdGVkRmFpbHVyZShFeGNlcHRpb24pOgorY2xhc3MgX1Nob3VsZFN0b3AoRXhjZXB0aW9uKToKICAgICAiIiIKLSAgICBSYWlzZSB0aGlzIHdoZW4gYSB0ZXN0IGlzIGV4cGVjdGVkIHRvIGZhaWwuCi0KLSAgICBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICBUaGUgdGVzdCBzaG91bGQgc3RvcC4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfaW5mbyk6Ci0gICAgICAgIHN1cGVyKF9FeHBlY3RlZEZhaWx1cmUsIHNlbGYpLl9faW5pdF9fKCkKLSAgICAgICAgc2VsZi5leGNfaW5mbyA9IGV4Y19pbmZvCi0KIGNsYXNzIF9VbmV4cGVjdGVkU3VjY2VzcyhFeGNlcHRpb24pOgogICAgICIiIgogICAgIFRoZSB0ZXN0IHdhcyBzdXBwb3NlZCB0byBmYWlsLCBidXQgaXQgZGlkbid0IQpAQCAtNDQsMTMgKzQwLDQwIEBACiAKIAogY2xhc3MgX091dGNvbWUob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3VsdD1Ob25lKToKKyAgICAgICAgc2VsZi5leHBlY3RpbmdfZmFpbHVyZSA9IEZhbHNlCisgICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0CisgICAgICAgIHNlbGYucmVzdWx0X3N1cHBvcnRzX3N1YnRlc3RzID0gaGFzYXR0cihyZXN1bHQsICJhZGRTdWJUZXN0IikKICAgICAgICAgc2VsZi5zdWNjZXNzID0gVHJ1ZQotICAgICAgICBzZWxmLnNraXBwZWQgPSBOb25lCi0gICAgICAgIHNlbGYudW5leHBlY3RlZFN1Y2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuc2tpcHBlZCA9IFtdCiAgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlID0gTm9uZQogICAgICAgICBzZWxmLmVycm9ycyA9IFtdCi0gICAgICAgIHNlbGYuZmFpbHVyZXMgPSBbXQorCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgdGVzdFBhcnRFeGVjdXRvcihzZWxmLCB0ZXN0X2Nhc2UsIGlzVGVzdD1GYWxzZSk6CisgICAgICAgIG9sZF9zdWNjZXNzID0gc2VsZi5zdWNjZXNzCisgICAgICAgIHNlbGYuc3VjY2VzcyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IFNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5za2lwcGVkLmFwcGVuZCgodGVzdF9jYXNlLCBzdHIoZSkpKQorICAgICAgICBleGNlcHQgX1Nob3VsZFN0b3A6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIHNlbGYuZXhwZWN0aW5nX2ZhaWx1cmU6CisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmUgPSBleGNfaW5mbworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdF9jYXNlLCBleGNfaW5mbykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLnJlc3VsdF9zdXBwb3J0c19zdWJ0ZXN0cyBhbmQgc2VsZi5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdF9jYXNlLCBOb25lKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IHNlbGYuc3VjY2VzcyBhbmQgb2xkX3N1Y2Nlc3MKIAogCiBkZWYgX2lkKG9iaik6CkBAIC04OCwyMiArMTExLDI2IEBACiAgICAgICAgIHJldHVybiBza2lwKHJlYXNvbikKICAgICByZXR1cm4gX2lkCiAKLQotZGVmIGV4cGVjdGVkRmFpbHVyZShmdW5jKToKLSAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCi0gICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICByYWlzZSBfRXhwZWN0ZWRGYWlsdXJlKHN5cy5leGNfaW5mbygpKQotICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MKLSAgICByZXR1cm4gd3JhcHBlcgorZGVmIGV4cGVjdGVkRmFpbHVyZSh0ZXN0X2l0ZW0pOgorICAgIHRlc3RfaXRlbS5fX3VuaXR0ZXN0X2V4cGVjdGluZ19mYWlsdXJlX18gPSBUcnVlCisgICAgcmV0dXJuIHRlc3RfaXRlbQogCiAKLWNsYXNzIF9Bc3NlcnRSYWlzZXNCYXNlQ29udGV4dChvYmplY3QpOgorY2xhc3MgX0Jhc2VUZXN0Q2FzZUNvbnRleHQ6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKToKKyAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKworICAgIGRlZiBfcmFpc2VGYWlsdXJlKHNlbGYsIHN0YW5kYXJkTXNnKToKKyAgICAgICAgbXNnID0gc2VsZi50ZXN0X2Nhc2UuX2Zvcm1hdE1lc3NhZ2Uoc2VsZi5tc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLnRlc3RfY2FzZS5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworCitjbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVjdGVkLCB0ZXN0X2Nhc2UsIGNhbGxhYmxlX29iaj1Ob25lLAogICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleD1Ob25lKToKKyAgICAgICAgX0Jhc2VUZXN0Q2FzZUNvbnRleHQuX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKQogICAgICAgICBzZWxmLmV4cGVjdGVkID0gZXhwZWN0ZWQKICAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKICAgICAgICAgaWYgY2FsbGFibGVfb2JqIGlzIG5vdCBOb25lOgpAQCAtMTE4LDEwICsxNDUsNiBAQAogICAgICAgICBzZWxmLmV4cGVjdGVkX3JlZ2V4ID0gZXhwZWN0ZWRfcmVnZXgKICAgICAgICAgc2VsZi5tc2cgPSBOb25lCiAKLSAgICBkZWYgX3JhaXNlRmFpbHVyZShzZWxmLCBzdGFuZGFyZE1zZyk6Ci0gICAgICAgIG1zZyA9IHNlbGYudGVzdF9jYXNlLl9mb3JtYXRNZXNzYWdlKHNlbGYubXNnLCBzdGFuZGFyZE1zZykKLSAgICAgICAgcmFpc2Ugc2VsZi50ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCi0KICAgICBkZWYgaGFuZGxlKHNlbGYsIG5hbWUsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIElmIGNhbGxhYmxlX29iaiBpcyBOb25lLCBhc3NlcnRSYWlzZXMvV2FybnMgaXMgYmVpbmcgdXNlZCBhcyBhCkBAIC0xMzUsNyArMTU4LDYgQEAKICAgICAgICAgICAgIGNhbGxhYmxlX29iaigqYXJncywgKiprd2FyZ3MpCiAKIAotCiBjbGFzcyBfQXNzZXJ0UmFpc2VzQ29udGV4dChfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQpOgogICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydFJhaXNlcyogbWV0aG9kcy4iIiIKIApAQCAtMjE3LDYgKzIzOSw3NCBAQAogICAgICAgICAgICAgc2VsZi5fcmFpc2VGYWlsdXJlKCJ7fSBub3QgdHJpZ2dlcmVkIi5mb3JtYXQoZXhjX25hbWUpKQogCiAKKworX0xvZ2dpbmdXYXRjaGVyID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX0xvZ2dpbmdXYXRjaGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJyZWNvcmRzIiwgIm91dHB1dCJdKQorCisKK2NsYXNzIF9DYXB0dXJpbmdIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgIiIiCisgICAgQSBsb2dnaW5nIGhhbmRsZXIgY2FwdHVyaW5nIGFsbCAocmF3IGFuZCBmb3JtYXR0ZWQpIGxvZ2dpbmcgb3V0cHV0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gX0xvZ2dpbmdXYXRjaGVyKFtdLCBbXSkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgc2VsZi53YXRjaGVyLnJlY29yZHMuYXBwZW5kKHJlY29yZCkKKyAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQorICAgICAgICBzZWxmLndhdGNoZXIub3V0cHV0LmFwcGVuZChtc2cpCisKKworCitjbGFzcyBfQXNzZXJ0TG9nc0NvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgorICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydExvZ3MoKS4iIiIKKworICAgIExPR0dJTkdfRk9STUFUID0gIiUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlLCBsb2dnZXJfbmFtZSwgbGV2ZWwpOgorICAgICAgICBfQmFzZVRlc3RDYXNlQ29udGV4dC5fX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UpCisgICAgICAgIHNlbGYubG9nZ2VyX25hbWUgPSBsb2dnZXJfbmFtZQorICAgICAgICBpZiBsZXZlbDoKKyAgICAgICAgICAgIHNlbGYubGV2ZWwgPSBsb2dnaW5nLl9uYW1lVG9MZXZlbC5nZXQobGV2ZWwsIGxldmVsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICBzZWxmLm1zZyA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5sb2dnZXJfbmFtZSwgbG9nZ2luZy5Mb2dnZXIpOgorICAgICAgICAgICAgbG9nZ2VyID0gc2VsZi5sb2dnZXIgPSBzZWxmLmxvZ2dlcl9uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIgPSBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKHNlbGYubG9nZ2VyX25hbWUpCisgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKHNlbGYuTE9HR0lOR19GT1JNQVQpCisgICAgICAgIGhhbmRsZXIgPSBfQ2FwdHVyaW5nSGFuZGxlcigpCisgICAgICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gaGFuZGxlci53YXRjaGVyCisgICAgICAgIHNlbGYub2xkX2hhbmRsZXJzID0gbG9nZ2VyLmhhbmRsZXJzWzpdCisgICAgICAgIHNlbGYub2xkX2xldmVsID0gbG9nZ2VyLmxldmVsCisgICAgICAgIHNlbGYub2xkX3Byb3BhZ2F0ZSA9IGxvZ2dlci5wcm9wYWdhdGUKKyAgICAgICAgbG9nZ2VyLmhhbmRsZXJzID0gW2hhbmRsZXJdCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChzZWxmLmxldmVsKQorICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIud2F0Y2hlcgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRiKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaGFuZGxlcnMgPSBzZWxmLm9sZF9oYW5kbGVycworICAgICAgICBzZWxmLmxvZ2dlci5wcm9wYWdhdGUgPSBzZWxmLm9sZF9wcm9wYWdhdGUKKyAgICAgICAgc2VsZi5sb2dnZXIuc2V0TGV2ZWwoc2VsZi5vbGRfbGV2ZWwpCisgICAgICAgIGlmIGV4Y190eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBsZXQgdW5leHBlY3RlZCBleGNlcHRpb25zIHBhc3MgdGhyb3VnaAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGxlbihzZWxmLndhdGNoZXIucmVjb3JkcykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgKKyAgICAgICAgICAgICAgICAibm8gbG9ncyBvZiBsZXZlbCB7fSBvciBoaWdoZXIgdHJpZ2dlcmVkIG9uIHt9IgorICAgICAgICAgICAgICAgIC5mb3JtYXQobG9nZ2luZy5nZXRMZXZlbE5hbWUoc2VsZi5sZXZlbCksIHNlbGYubG9nZ2VyLm5hbWUpKQorCisKIGNsYXNzIFRlc3RDYXNlKG9iamVjdCk6CiAgICAgIiIiQSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHNpbmdsZSB0ZXN0IGNhc2VzLgogCkBAIC0yNzAsNyArMzYwLDcgQEAKICAgICAgICAgICAgbm90IGhhdmUgYSBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUKLSAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBOb25lCisgICAgICAgIHNlbGYuX291dGNvbWUgPSBOb25lCiAgICAgICAgIHNlbGYuX3Rlc3RNZXRob2REb2MgPSAnTm8gdGVzdCcKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgbWV0aG9kTmFtZSkKQEAgLTI4Myw2ICszNzMsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZERvYyA9IHRlc3RNZXRob2QuX19kb2NfXwogICAgICAgICBzZWxmLl9jbGVhbnVwcyA9IFtdCisgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBOb25lCiAKICAgICAgICAgIyBNYXAgdHlwZXMgdG8gY3VzdG9tIGFzc2VydEVxdWFsIGZ1bmN0aW9ucyB0aGF0IHdpbGwgY29tcGFyZQogICAgICAgICAjIGluc3RhbmNlcyBvZiBzYWlkIHR5cGUgaW4gbW9yZSBkZXRhaWwgdG8gZ2VuZXJhdGUgYSBtb3JlIHVzZWZ1bApAQCAtMzcwLDQ0ICs0NjEsODAgQEAKICAgICAgICAgcmV0dXJuICI8JXMgdGVzdE1ldGhvZD0lcz4iICUgXAogICAgICAgICAgICAgICAgKHN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCiAKLSAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCByZWFzb24pOgorICAgIGRlZiBfYWRkU2tpcChzZWxmLCByZXN1bHQsIHRlc3RfY2FzZSwgcmVhc29uKToKICAgICAgICAgYWRkU2tpcCA9IGdldGF0dHIocmVzdWx0LCAnYWRkU2tpcCcsIE5vbmUpCiAgICAgICAgIGlmIGFkZFNraXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBhZGRTa2lwKHNlbGYsIHJlYXNvbikKKyAgICAgICAgICAgIGFkZFNraXAodGVzdF9jYXNlLCByZWFzb24pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRTa2lwIG1ldGhvZCwgc2tpcHMgbm90IHJlcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsIDIpCi0gICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3ModGVzdF9jYXNlKQogCi0gICAgZGVmIF9leGVjdXRlVGVzdFBhcnQoc2VsZiwgZnVuY3Rpb24sIG91dGNvbWUsIGlzVGVzdD1GYWxzZSk6CisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgc3ViVGVzdChzZWxmLCBtc2c9Tm9uZSwgKipwYXJhbXMpOgorICAgICAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgZW5jbG9zZWQgYmxvY2sKKyAgICAgICAgb2YgY29kZSBpbiBhIHN1YnRlc3QgaWRlbnRpZmllZCBieSB0aGUgb3B0aW9uYWwgbWVzc2FnZSBhbmQKKyAgICAgICAga2V5d29yZCBwYXJhbWV0ZXJzLiAgQSBmYWlsdXJlIGluIHRoZSBzdWJ0ZXN0IG1hcmtzIHRoZSB0ZXN0CisgICAgICAgIGNhc2UgYXMgZmFpbGVkIGJ1dCByZXN1bWVzIGV4ZWN1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NlZAorICAgICAgICBibG9jaywgYWxsb3dpbmcgZnVydGhlciB0ZXN0IGNvZGUgdG8gYmUgZXhlY3V0ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHM6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBhcmVudCA9IHNlbGYuX3N1YnRlc3QKKyAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICBwYXJhbXNfbWFwID0gY29sbGVjdGlvbnMuQ2hhaW5NYXAocGFyYW1zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyYW1zX21hcCA9IHBhcmVudC5wYXJhbXMubmV3X2NoaWxkKHBhcmFtcykKKyAgICAgICAgc2VsZi5fc3VidGVzdCA9IF9TdWJUZXN0KHNlbGYsIG1zZywgcGFyYW1zX21hcCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuY3Rpb24oKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBvdXRjb21lLnNraXBwZWQgPSBzdHIoZSkKLSAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBpZiBpc1Rlc3Q6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcyA9IGV4Y19pbmZvCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChleGNfaW5mbykKLSAgICAgICAgZXhjZXB0IF9FeHBlY3RlZEZhaWx1cmU6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgaWYgaXNUZXN0OgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlID0gZXhjX2luZm8KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKGV4Y19pbmZvKQotICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIG91dGNvbWUuZmFpbHVyZXMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgd2l0aCBzZWxmLl9vdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZi5fc3VidGVzdCwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX291dGNvbWUucmVzdWx0CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lIGFuZCByZXN1bHQuZmFpbGZhc3Q6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9TaG91bGRTdG9wCisgICAgICAgICAgICBlbGlmIHNlbGYuX291dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICMgSWYgdGhlIHRlc3QgaXMgZXhwZWN0aW5nIGEgZmFpbHVyZSwgd2UgcmVhbGx5IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAjIHN0b3Agbm93IGFuZCByZWdpc3RlciB0aGUgZXhwZWN0ZWQgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICByYWlzZSBfU2hvdWxkU3RvcAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3VidGVzdCA9IHBhcmVudAorCisgICAgZGVmIF9mZWVkRXJyb3JzVG9SZXN1bHQoc2VsZiwgcmVzdWx0LCBlcnJvcnMpOgorICAgICAgICBmb3IgdGVzdCwgZXhjX2luZm8gaW4gZXJyb3JzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXN0LCBfU3ViVGVzdCk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1YlRlc3QodGVzdC50ZXN0X2Nhc2UsIHRlc3QsIGV4Y19pbmZvKQorICAgICAgICAgICAgZWxpZiBleGNfaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGV4Y19pbmZvWzBdLCBzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZSh0ZXN0LCBleGNfaW5mbykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3IodGVzdCwgZXhjX2luZm8pCisKKyAgICBkZWYgX2FkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCByZXN1bHQsIGV4Y19pbmZvKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlID0gcmVzdWx0LmFkZEV4cGVjdGVkRmFpbHVyZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRFeHBlY3RlZEZhaWx1cmUgbWV0aG9kLCByZXBvcnRpbmcgYXMgcGFzc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIGV4Y19pbmZvKQorCisgICAgZGVmIF9hZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCByZXN1bHQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IHJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2VzcworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICAjIFdlIG5lZWQgdG8gcGFzcyBhbiBhY3R1YWwgZXhjZXB0aW9uIGFuZCB0cmFjZWJhY2sgdG8gYWRkRmFpbHVyZSwKKyAgICAgICAgICAgICMgb3RoZXJ3aXNlIHRoZSBsZWdhY3kgcmVzdWx0IGNhbiBjaG9rZS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MgZnJvbSBOb25lCisgICAgICAgICAgICBleGNlcHQgX1VuZXhwZWN0ZWRTdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZikKIAogICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0PU5vbmUpOgogICAgICAgICBvcmlnX3Jlc3VsdCA9IHJlc3VsdApAQCAtNDI2LDQ2ICs1NTMsMzggQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBza2lwX3doeSA9IChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ2V0YXR0cih0ZXN0TWV0aG9kLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpKQotICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBza2lwX3doeSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc2VsZiwgc2tpcF93aHkpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4cGVjdGluZ19mYWlsdXJlID0gZ2V0YXR0cih0ZXN0TWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdW5pdHRlc3RfZXhwZWN0aW5nX2ZhaWx1cmVfXyIsIEZhbHNlKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRjb21lID0gX091dGNvbWUoKQotICAgICAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBvdXRjb21lCisgICAgICAgICAgICBvdXRjb21lID0gX091dGNvbWUocmVzdWx0KQorICAgICAgICAgICAgc2VsZi5fb3V0Y29tZSA9IG91dGNvbWUKIAotICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYuc2V0VXAsIG91dGNvbWUpCisgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldFVwKCkKICAgICAgICAgICAgIGlmIG91dGNvbWUuc3VjY2VzczoKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQodGVzdE1ldGhvZCwgb3V0Y29tZSwgaXNUZXN0PVRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYudGVhckRvd24sIG91dGNvbWUpCisgICAgICAgICAgICAgICAgb3V0Y29tZS5leHBlY3RpbmdfZmFpbHVyZSA9IGV4cGVjdGluZ19mYWlsdXJlCisgICAgICAgICAgICAgICAgd2l0aCBvdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZiwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCkKKyAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGluZ19mYWlsdXJlID0gRmFsc2UKKyAgICAgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZWFyRG93bigpCiAKICAgICAgICAgICAgIHNlbGYuZG9DbGVhbnVwcygpCisgICAgICAgICAgICBmb3IgdGVzdCwgcmVhc29uIGluIG91dGNvbWUuc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgdGVzdCwgcmVhc29uKQorICAgICAgICAgICAgc2VsZi5fZmVlZEVycm9yc1RvUmVzdWx0KHJlc3VsdCwgb3V0Y29tZS5lcnJvcnMpCiAgICAgICAgICAgICBpZiBvdXRjb21lLnN1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5za2lwcGVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgb3V0Y29tZS5za2lwcGVkKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmVycm9yczoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIGV4Y19pbmZvKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBleGNfaW5mbykKLSAgICAgICAgICAgICAgICBpZiBvdXRjb21lLnVuZXhwZWN0ZWRTdWNjZXNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IGdldGF0dHIocmVzdWx0LCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCBOb25lKQotICAgICAgICAgICAgICAgICAgICBpZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgaWYgZXhwZWN0aW5nX2ZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkRXhwZWN0ZWRGYWlsdXJlKHJlc3VsdCwgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcykKLQotICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRFeHBlY3RlZEZhaWx1cmUgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZEV4cGVjdGVkRmFpbHVyZScsIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGFkZEV4cGVjdGVkRmFpbHVyZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZEV4cGVjdGVkRmFpbHVyZSBtZXRob2QsIHJlcG9ydGluZyBhcyBwYXNzZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRVbmV4cGVjdGVkU3VjY2VzcyhyZXN1bHQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQpAQCAtNDc3LDExICs1OTYsMTEgQEAKICAgICBkZWYgZG9DbGVhbnVwcyhzZWxmKToKICAgICAgICAgIiIiRXhlY3V0ZSBhbGwgY2xlYW51cCBmdW5jdGlvbnMuIE5vcm1hbGx5IGNhbGxlZCBmb3IgeW91IGFmdGVyCiAgICAgICAgIHRlYXJEb3duLiIiIgotICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgb3IgX091dGNvbWUoKQorICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZSBvciBfT3V0Y29tZSgpCiAgICAgICAgIHdoaWxlIHNlbGYuX2NsZWFudXBzOgogICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3MsIGt3YXJncyA9IHNlbGYuX2NsZWFudXBzLnBvcCgpCi0gICAgICAgICAgICBwYXJ0ID0gbGFtYmRhOiBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQocGFydCwgb3V0Y29tZSkKKyAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKIAogICAgICAgICAjIHJldHVybiB0aGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICAgICAgICAjIGV2ZW4gdGhvdWdoIHdlIG5vIGxvbmdlciB1cyBpdCBpbnRlcm5hbGx5CkBAIC02MDAsNiArNzE5LDI4IEBACiAgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0V2FybnNDb250ZXh0KGV4cGVjdGVkX3dhcm5pbmcsIHNlbGYsIGNhbGxhYmxlX29iaikKICAgICAgICAgcmV0dXJuIGNvbnRleHQuaGFuZGxlKCdhc3NlcnRXYXJucycsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKQogCisgICAgZGVmIGFzc2VydExvZ3Moc2VsZiwgbG9nZ2VyPU5vbmUsIGxldmVsPU5vbmUpOgorICAgICAgICAiIiJGYWlsIHVubGVzcyBhIGxvZyBtZXNzYWdlIG9mIGxldmVsICpsZXZlbCogb3IgaGlnaGVyIGlzIGVtaXR0ZWQKKyAgICAgICAgb24gKmxvZ2dlcl9uYW1lKiBvciBpdHMgY2hpbGRyZW4uICBJZiBvbWl0dGVkLCAqbGV2ZWwqIGRlZmF1bHRzIHRvCisgICAgICAgIElORk8gYW5kICpsb2dnZXIqIGRlZmF1bHRzIHRvIHRoZSByb290IGxvZ2dlci4KKworICAgICAgICBUaGlzIG1ldGhvZCBtdXN0IGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIGFuZCB3aWxsIHlpZWxkCisgICAgICAgIGEgcmVjb3JkaW5nIG9iamVjdCB3aXRoIHR3byBhdHRyaWJ1dGVzOiBgb3V0cHV0YCBhbmQgYHJlY29yZHNgLgorICAgICAgICBBdCB0aGUgZW5kIG9mIHRoZSBjb250ZXh0IG1hbmFnZXIsIHRoZSBgb3V0cHV0YCBhdHRyaWJ1dGUgd2lsbAorICAgICAgICBiZSBhIGxpc3Qgb2YgdGhlIG1hdGNoaW5nIGZvcm1hdHRlZCBsb2cgbWVzc2FnZXMgYW5kIHRoZQorICAgICAgICBgcmVjb3Jkc2AgYXR0cmlidXRlIHdpbGwgYmUgYSBsaXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIExvZ1JlY29yZAorICAgICAgICBvYmplY3RzLgorCisgICAgICAgIEV4YW1wbGU6OgorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygnZm9vJywgbGV2ZWw9J0lORk8nKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuaW5mbygnZmlyc3QgbWVzc2FnZScpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKS5lcnJvcignc2Vjb25kIG1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX0Fzc2VydExvZ3NDb250ZXh0KHNlbGYsIGxvZ2dlciwgbGV2ZWwpCisKICAgICBkZWYgX2dldEFzc2VydEVxdWFsaXR5RnVuYyhzZWxmLCBmaXJzdCwgc2Vjb25kKToKICAgICAgICAgIiIiR2V0IGEgZGV0YWlsZWQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgdGhlIHR5cGVzIG9mIHRoZSB0d28gYXJncy4KIApAQCAtNjI5LDcgKzc3MCw3IEBACiAgICAgZGVmIF9iYXNlQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgogICAgICAgICAiIiJUaGUgZGVmYXVsdCBhc3NlcnRFcXVhbCBpbXBsZW1lbnRhdGlvbiwgbm90IHR5cGUgc3BlY2lmaWMuIiIiCiAgICAgICAgIGlmIG5vdCBmaXJzdCA9PSBzZWNvbmQ6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwgc2FmZV9yZXByKHNlY29uZCkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQogICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKIApAQCAtNzY0LDE0ICs5MDUsOSBAQAogICAgICAgICAgICAgaWYgc2VxMSA9PSBzZXEyOgogICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICAgICBzZXExX3JlcHIgPSBzYWZlX3JlcHIoc2VxMSkKLSAgICAgICAgICAgIHNlcTJfcmVwciA9IHNhZmVfcmVwcihzZXEyKQotICAgICAgICAgICAgaWYgbGVuKHNlcTFfcmVwcikgPiAzMDoKLSAgICAgICAgICAgICAgICBzZXExX3JlcHIgPSBzZXExX3JlcHJbOjMwXSArICcuLi4nCi0gICAgICAgICAgICBpZiBsZW4oc2VxMl9yZXByKSA+IDMwOgotICAgICAgICAgICAgICAgIHNlcTJfcmVwciA9IHNlcTJfcmVwcls6MzBdICsgJy4uLicKLSAgICAgICAgICAgIGVsZW1lbnRzID0gKHNlcV90eXBlX25hbWUuY2FwaXRhbGl6ZSgpLCBzZXExX3JlcHIsIHNlcTJfcmVwcikKLSAgICAgICAgICAgIGRpZmZlcmluZyA9ICclc3MgZGlmZmVyOiAlcyAhPSAlc1xuJyAlIGVsZW1lbnRzCisgICAgICAgICAgICBkaWZmZXJpbmcgPSAnJXNzIGRpZmZlcjogJXMgIT0gJXNcbicgJSAoCisgICAgICAgICAgICAgICAgICAgIChzZXFfdHlwZV9uYW1lLmNhcGl0YWxpemUoKSwpICsKKyAgICAgICAgICAgICAgICAgICAgX2NvbW1vbl9zaG9ydGVuX3JlcHIoc2VxMSwgc2VxMikpCiAKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1pbihsZW4xLCBsZW4yKSk6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtOTI5LDcgKzEwNjUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZDIsIGRpY3QsICdTZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgZGljdGlvbmFyeScpCiAKICAgICAgICAgaWYgZDEgIT0gZDI6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGQxLCBUcnVlKSwgc2FmZV9yZXByKGQyLCBUcnVlKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIF9jb21tb25fc2hvcnRlbl9yZXByKGQxLCBkMikKICAgICAgICAgICAgIGRpZmYgPSAoJ1xuJyArICdcbicuam9pbihkaWZmbGliLm5kaWZmKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDEpLnNwbGl0bGluZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGQyKS5zcGxpdGxpbmVzKCkpKSkKQEAgLTEwMTMsOCArMTE0OSw3IEBACiAgICAgICAgICAgICBpZiBsZW4oZmlyc3RsaW5lcykgPT0gMSBhbmQgZmlyc3Quc3RyaXAoJ1xyXG4nKSA9PSBmaXJzdDoKICAgICAgICAgICAgICAgICBmaXJzdGxpbmVzID0gW2ZpcnN0ICsgJ1xuJ10KICAgICAgICAgICAgICAgICBzZWNvbmRsaW5lcyA9IFtzZWNvbmQgKyAnXG4nXQotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCwgVHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCwgVHJ1ZSkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgZGlmZiA9ICdcbicgKyAnJy5qb2luKGRpZmZsaWIubmRpZmYoZmlyc3RsaW5lcywgc2Vjb25kbGluZXMpKQogICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2Uoc3RhbmRhcmRNc2csIGRpZmYpCiAgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKQEAgLTEyMTIsMyArMTM0NywzOSBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc2NyaXB0aW9uCiAgICAgICAgIGRvYyA9IHNlbGYuX3Rlc3RGdW5jLl9fZG9jX18KICAgICAgICAgcmV0dXJuIGRvYyBhbmQgZG9jLnNwbGl0KCJcbiIpWzBdLnN0cmlwKCkgb3IgTm9uZQorCisKK2NsYXNzIF9TdWJUZXN0KFRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UsIG1lc3NhZ2UsIHBhcmFtcyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxmLnRlc3RfY2FzZSA9IHRlc3RfY2FzZQorICAgICAgICBzZWxmLnBhcmFtcyA9IHBhcmFtcworICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24gPSB0ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbgorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInN1YnRlc3RzIGNhbm5vdCBiZSBydW4gZGlyZWN0bHkiKQorCisgICAgZGVmIF9zdWJEZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBpZiBzZWxmLl9tZXNzYWdlOgorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCJbe31dIi5mb3JtYXQoc2VsZi5fbWVzc2FnZSkpCisgICAgICAgIGlmIHNlbGYucGFyYW1zOgorICAgICAgICAgICAgcGFyYW1zX2Rlc2MgPSAnLCAnLmpvaW4oCisgICAgICAgICAgICAgICAgInt9PXshcn0iLmZvcm1hdChrLCB2KQorICAgICAgICAgICAgICAgIGZvciAoaywgdikgaW4gc29ydGVkKHNlbGYucGFyYW1zLml0ZW1zKCkpKQorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCIoe30pIi5mb3JtYXQocGFyYW1zX2Rlc2MpKQorICAgICAgICByZXR1cm4gIiAiLmpvaW4ocGFydHMpIG9yICcoPHN1YnRlc3Q+KScKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSB7fSIuZm9ybWF0KHNlbGYudGVzdF9jYXNlLmlkKCksIHNlbGYuX3N1YkRlc2NyaXB0aW9uKCkpCisKKyAgICBkZWYgc2hvcnREZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBzdWJ0ZXN0LCBvciBOb25lIGlmIG5vCisgICAgICAgIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHByb3ZpZGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9jYXNlLnNob3J0RGVzY3JpcHRpb24oKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAie30ge30iLmZvcm1hdChzZWxmLnRlc3RfY2FzZSwgc2VsZi5fc3ViRGVzY3JpcHRpb24oKSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkgYi9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5CmluZGV4IDlhYjI2YzEuLmU4NzJmY2MgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQpAQCAtMzQsNiArMzQsMTQgQEAKICAgICBUZXN0Q2xhc3MgPSB0eXBlKGNsYXNzbmFtZSwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCiAgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQogCitkZWYgX21ha2Vfc2tpcHBlZF90ZXN0KG1ldGhvZG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcyk6CisgICAgQGNhc2Uuc2tpcChzdHIoZXhjZXB0aW9uKSkKKyAgICBkZWYgdGVzdFNraXBwZWQoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBhdHRycyA9IHttZXRob2RuYW1lOiB0ZXN0U2tpcHBlZH0KKyAgICBUZXN0Q2xhc3MgPSB0eXBlKCJNb2R1bGVTa2lwcGVkIiwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCisgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQorCiBkZWYgX2p5dGhvbl9hd2FyZV9zcGxpdGV4dChwYXRoKToKICAgICBpZiBwYXRoLmxvd2VyKCkuZW5kc3dpdGgoJyRweS5jbGFzcycpOgogICAgICAgICByZXR1cm4gcGF0aFs6LTldCkBAIC0xNjksNiArMTc3LDkgQEAKICAgICAgICAgVGhlIHBhdHRlcm4gaXMgZGVsaWJlcmF0ZWx5IG5vdCBzdG9yZWQgYXMgYSBsb2FkZXIgYXR0cmlidXRlIHNvIHRoYXQKICAgICAgICAgcGFja2FnZXMgY2FuIGNvbnRpbnVlIGRpc2NvdmVyeSB0aGVtc2VsdmVzLiB0b3BfbGV2ZWxfZGlyIGlzIHN0b3JlZCBzbwogICAgICAgICBsb2FkX3Rlc3RzIGRvZXMgbm90IG5lZWQgdG8gcGFzcyB0aGlzIGFyZ3VtZW50IGluIHRvIGxvYWRlci5kaXNjb3ZlcigpLgorCisgICAgICAgIFBhdGhzIGFyZSBzb3J0ZWQgYmVmb3JlIGJlaW5nIGltcG9ydGVkIHRvIGVuc3VyZSByZXByb2R1Y2libGUgZXhlY3V0aW9uCisgICAgICAgIG9yZGVyIGV2ZW4gb24gZmlsZXN5c3RlbXMgd2l0aCBub24tYWxwaGFiZXRpY2FsIG9yZGVyaW5nIGxpa2UgZXh0My80LgogICAgICAgICAiIiIKICAgICAgICAgc2V0X2ltcGxpY2l0X3RvcCA9IEZhbHNlCiAgICAgICAgIGlmIHRvcF9sZXZlbF9kaXIgaXMgTm9uZSBhbmQgc2VsZi5fdG9wX2xldmVsX2RpciBpcyBub3QgTm9uZToKQEAgLTI0NSw3ICsyNTYsNyBAQAogCiAgICAgZGVmIF9maW5kX3Rlc3RzKHNlbGYsIHN0YXJ0X2RpciwgcGF0dGVybik6CiAgICAgICAgICIiIlVzZWQgYnkgZGlzY292ZXJ5LiBZaWVsZHMgdGVzdCBzdWl0ZXMgaXQgbG9hZHMuIiIiCi0gICAgICAgIHBhdGhzID0gb3MubGlzdGRpcihzdGFydF9kaXIpCisgICAgICAgIHBhdGhzID0gc29ydGVkKG9zLmxpc3RkaXIoc3RhcnRfZGlyKSkKIAogICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzdGFydF9kaXIsIHBhdGgpCkBAIC0yNTksNiArMjcwLDggQEAKICAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5fZ2V0X25hbWVfZnJvbV9wYXRoKGZ1bGxfcGF0aCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IGNhc2UuU2tpcFRlc3QgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgX21ha2Vfc2tpcHBlZF90ZXN0KG5hbWUsIGUsIHNlbGYuc3VpdGVDbGFzcykKICAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX2ZhaWxlZF9pbXBvcnRfdGVzdChuYW1lLCBzZWxmLnN1aXRlQ2xhc3MpCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTI5MSw4ICszMDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0cyBsb2FkZWQgZnJvbSBwYWNrYWdlIGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3RzCiAgICAgICAgICAgICAgICAgICAgICMgcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX2ZpbmRfdGVzdHMoZnVsbF9wYXRoLCBwYXR0ZXJuKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX3Rlc3RzKGZ1bGxfcGF0aCwgcGF0dGVybikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBsb2FkX3Rlc3RzKHNlbGYsIHRlc3RzLCBwYXR0ZXJuKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21haW4ucHkgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQppbmRleCBlYWQ2NDkzLi4xODBkZjg2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbWFpbi5weQorKysgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlVuaXR0ZXN0IG1haW4gcHJvZ3JhbSIiIgogCiBpbXBvcnQgc3lzCi1pbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBhcmdwYXJzZQogaW1wb3J0IG9zCiAKIGZyb20gLiBpbXBvcnQgbG9hZGVyLCBydW5uZXIKQEAgLTksNTMgKzksMjAgQEAKIAogX191bml0dGVzdCA9IFRydWUKIAotRkFJTEZBU1QgICAgID0gIiAgLWYsIC0tZmFpbGZhc3QgICBTdG9wIG9uIGZpcnN0IGZhaWx1cmVcbiIKLUNBVENIQlJFQUsgICA9ICIgIC1jLCAtLWNhdGNoICAgICAgQ2F0Y2ggY29udHJvbC1DIGFuZCBkaXNwbGF5IHJlc3VsdHNcbiIKLUJVRkZFUk9VVFBVVCA9ICIgIC1iLCAtLWJ1ZmZlciAgICAgQnVmZmVyIHN0ZG91dCBhbmQgc3RkZXJyIGR1cmluZyB0ZXN0IHJ1bnNcbiIKLQotVVNBR0VfQVNfTUFJTiA9ICIiIlwKLVVzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0c10KLQotT3B0aW9uczoKLSAgLWgsIC0taGVscCAgICAgICBTaG93IHRoaXMgbWVzc2FnZQotICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0Ci0gIC1xLCAtLXF1aWV0ICAgICAgTWluaW1hbCBvdXRwdXQKLSUoZmFpbGZhc3QpcyUoY2F0Y2hicmVhaylzJShidWZmZXIpcworTUFJTl9FWEFNUExFUyA9ICIiIlwKIEV4YW1wbGVzOgotICAlKHByb2dOYW1lKXMgdGVzdF9tb2R1bGUgICAgICAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIHRlc3RfbW9kdWxlCi0gICUocHJvZ05hbWUpcyBtb2R1bGUuVGVzdENsYXNzICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gbW9kdWxlLlRlc3RDbGFzcwotICAlKHByb2dOYW1lKXMgbW9kdWxlLkNsYXNzLnRlc3RfbWV0aG9kICAtIHJ1biBzcGVjaWZpZWQgdGVzdCBtZXRob2QKLQotW3Rlc3RzXSBjYW4gYmUgYSBsaXN0IG9mIGFueSBudW1iZXIgb2YgdGVzdCBtb2R1bGVzLCBjbGFzc2VzIGFuZCB0ZXN0Ci1tZXRob2RzLgotCi1BbHRlcm5hdGl2ZSBVc2FnZTogJShwcm9nTmFtZSlzIGRpc2NvdmVyIFtvcHRpb25zXQotCi1PcHRpb25zOgotICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMgIC1zIGRpcmVjdG9yeSAgICAgRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpCi0gIC1wIHBhdHRlcm4gICAgICAgUGF0dGVybiB0byBtYXRjaCB0ZXN0IGZpbGVzICgndGVzdCoucHknIGRlZmF1bHQpCi0gIC10IGRpcmVjdG9yeSAgICAgVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0IHRvCi0gICAgICAgICAgICAgICAgICAgc3RhcnQgZGlyZWN0b3J5KQotCi1Gb3IgdGVzdCBkaXNjb3ZlcnkgYWxsIHRlc3QgbW9kdWxlcyBtdXN0IGJlIGltcG9ydGFibGUgZnJvbSB0aGUgdG9wCi1sZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuCisgICUocHJvZylzIHRlc3RfbW9kdWxlICAgICAgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSB0ZXN0X21vZHVsZQorICAlKHByb2cpcyBtb2R1bGUuVGVzdENsYXNzICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gbW9kdWxlLlRlc3RDbGFzcworICAlKHByb2cpcyBtb2R1bGUuQ2xhc3MudGVzdF9tZXRob2QgIC0gcnVuIHNwZWNpZmllZCB0ZXN0IG1ldGhvZAogIiIiCiAKLVVTQUdFX0ZST01fTU9EVUxFID0gIiIiXAotVXNhZ2U6ICUocHJvZ05hbWUpcyBbb3B0aW9uc10gW3Rlc3RdIFsuLi5dCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMKK01PRFVMRV9FWEFNUExFUyA9ICIiIlwKIEV4YW1wbGVzOgotICAlKHByb2dOYW1lKXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKLSAgJShwcm9nTmFtZSlzIE15VGVzdFN1aXRlICAgICAgICAgICAgICAgICAgIC0gcnVuIHN1aXRlICdNeVRlc3RTdWl0ZScKLSAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgICAgIC0gcnVuIE15VGVzdENhc2UudGVzdFNvbWV0aGluZwotICAlKHByb2dOYW1lKXMgTXlUZXN0Q2FzZSAgICAgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE15VGVzdENhc2UKKyAgJShwcm9nKXMgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHJ1biBkZWZhdWx0IHNldCBvZiB0ZXN0cworICAlKHByb2cpcyBNeVRlc3RTdWl0ZSAgICAgICAgICAgICAgIC0gcnVuIHN1aXRlICdNeVRlc3RTdWl0ZScKKyAgJShwcm9nKXMgTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nICAtIHJ1biBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcKKyAgJShwcm9nKXMgTXlUZXN0Q2FzZSAgICAgICAgICAgICAgICAtIHJ1biBhbGwgJ3Rlc3QqJyB0ZXN0IG1ldGhvZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE15VGVzdENhc2UKICIiIgogCiBkZWYgX2NvbnZlcnRfbmFtZShuYW1lKToKQEAgLTgyLDEwICs0OSwxMSBAQAogICAgICIiIkEgY29tbWFuZC1saW5lIHByb2dyYW0gdGhhdCBydW5zIGEgc2V0IG9mIHRlc3RzOyB0aGlzIGlzIHByaW1hcmlseQogICAgICAgIGZvciBtYWtpbmcgdGVzdCBtb2R1bGVzIGNvbnZlbmllbnRseSBleGVjdXRhYmxlLgogICAgICIiIgotICAgIFVTQUdFID0gVVNBR0VfRlJPTV9NT0RVTEUKLQogICAgICMgZGVmYXVsdHMgZm9yIHRlc3RpbmcKKyAgICBtb2R1bGU9Tm9uZQorICAgIHZlcmJvc2l0eSA9IDEKICAgICBmYWlsZmFzdCA9IGNhdGNoYnJlYWsgPSBidWZmZXIgPSBwcm9nTmFtZSA9IHdhcm5pbmdzID0gTm9uZQorICAgIF9kaXNjb3ZlcnlfcGFyc2VyID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZHVsZT0nX19tYWluX18nLCBkZWZhdWx0VGVzdD1Ob25lLCBhcmd2PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXI9Tm9uZSwgdGVzdExvYWRlcj1sb2FkZXIuZGVmYXVsdFRlc3RMb2FkZXIsCkBAIC0xMjcsNDQgKzk1LDQ3IEBACiAgICAgZGVmIHVzYWdlRXhpdChzZWxmLCBtc2c9Tm9uZSk6CiAgICAgICAgIGlmIG1zZzoKICAgICAgICAgICAgIHByaW50KG1zZykKLSAgICAgICAgdXNhZ2UgPSB7J3Byb2dOYW1lJzogc2VsZi5wcm9nTmFtZSwgJ2NhdGNoYnJlYWsnOiAnJywgJ2ZhaWxmYXN0JzogJycsCi0gICAgICAgICAgICAgICAgICdidWZmZXInOiAnJ30KLSAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCAhPSBGYWxzZToKLSAgICAgICAgICAgIHVzYWdlWydmYWlsZmFzdCddID0gRkFJTEZBU1QKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrICE9IEZhbHNlOgotICAgICAgICAgICAgdXNhZ2VbJ2NhdGNoYnJlYWsnXSA9IENBVENIQlJFQUsKLSAgICAgICAgaWYgc2VsZi5idWZmZXIgIT0gRmFsc2U6Ci0gICAgICAgICAgICB1c2FnZVsnYnVmZmVyJ10gPSBCVUZGRVJPVVRQVVQKLSAgICAgICAgcHJpbnQoc2VsZi5VU0FHRSAlIHVzYWdlKQorICAgICAgICBpZiBzZWxmLl9kaXNjb3ZlcnlfcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9pbml0QXJnUGFyc2VycygpCisgICAgICAgIHNlbGYuX3ByaW50X2hlbHAoKQogICAgICAgICBzeXMuZXhpdCgyKQogCisgICAgZGVmIF9wcmludF9oZWxwKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIHNlbGYubW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludChzZWxmLl9tYWluX3BhcnNlci5mb3JtYXRfaGVscCgpKQorICAgICAgICAgICAgcHJpbnQoTUFJTl9FWEFNUExFUyAlIHsncHJvZyc6IHNlbGYucHJvZ05hbWV9KQorICAgICAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KHNlbGYuX21haW5fcGFyc2VyLmZvcm1hdF9oZWxwKCkpCisgICAgICAgICAgICBwcmludChNT0RVTEVfRVhBTVBMRVMgJSB7J3Byb2cnOiBzZWxmLnByb2dOYW1lfSkKKwogICAgIGRlZiBwYXJzZUFyZ3Moc2VsZiwgYXJndik6Ci0gICAgICAgIGlmICgobGVuKGFyZ3YpID4gMSBhbmQgYXJndlsxXS5sb3dlcigpID09ICdkaXNjb3ZlcicpIG9yCi0gICAgICAgICAgICAobGVuKGFyZ3YpID09IDEgYW5kIHNlbGYubW9kdWxlIGlzIE5vbmUpKToKLSAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShhcmd2WzI6XSkKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9pbml0QXJnUGFyc2VycygpCisgICAgICAgIGlmIHNlbGYubW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBsZW4oYXJndikgPiAxIGFuZCBhcmd2WzFdLmxvd2VyKCkgPT0gJ2Rpc2NvdmVyJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsyOl0pCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLl9tYWluX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdLCBzZWxmKQorICAgICAgICAgICAgaWYgbm90IHNlbGYudGVzdHM6CisgICAgICAgICAgICAgICAgIyB0aGlzIGFsbG93cyAicHl0aG9uIC1tIHVuaXR0ZXN0IC12IiB0byBzdGlsbCB3b3JrIGZvcgorICAgICAgICAgICAgICAgICMgdGVzdCBkaXNjb3ZlcnkuCisgICAgICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KFtdKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIucGFyc2VfYXJncyhhcmd2WzE6XSwgc2VsZikKIAotICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRPcHRQYXJzZXIoKQotICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCi0gICAgICAgIHNlbGYuX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhvcHRpb25zKQotCi0gICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBzZWxmLm1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgIyB0aGlzIGFsbG93cyAicHl0aG9uIC1tIHVuaXR0ZXN0IC12IiB0byBzdGlsbCB3b3JrIGZvcgotICAgICAgICAgICAgIyB0ZXN0IGRpc2NvdmVyeS4gVGhpcyBtZWFucyAtYyAvIC1iIC8gLXYgLyAtZiBvcHRpb25zIHdpbGwKLSAgICAgICAgICAgICMgYmUgaGFuZGxlZCB0d2ljZSwgd2hpY2ggaXMgaGFybWxlc3MgYnV0IG5vdCBpZGVhbC4KLSAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShhcmd2WzE6XSkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBzZWxmLmRlZmF1bHRUZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICAjIGNyZWF0ZVRlc3RzIHdpbGwgbG9hZCB0ZXN0cyBmcm9tIHNlbGYubW9kdWxlCi0gICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IE5vbmUKLSAgICAgICAgZWxpZiBsZW4oYXJncykgPiAwOgotICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBfY29udmVydF9uYW1lcyhhcmdzKQorICAgICAgICBpZiBzZWxmLnRlc3RzOgorICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBfY29udmVydF9uYW1lcyhzZWxmLnRlc3RzKQogICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgICAgICAgICAjIHRvIHN1cHBvcnQgcHl0aG9uIC1tIHVuaXR0ZXN0IC4uLgogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlID0gTm9uZQotICAgICAgICBlbHNlOgorICAgICAgICBlbGlmIHNlbGYuZGVmYXVsdFRlc3QgaXMgTm9uZToKKyAgICAgICAgICAgICMgY3JlYXRlVGVzdHMgd2lsbCBsb2FkIHRlc3RzIGZyb20gc2VsZi5tb2R1bGUKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gTm9uZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0VGVzdCwgc3RyKToKICAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gKHNlbGYuZGVmYXVsdFRlc3QsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBsaXN0KHNlbGYuZGVmYXVsdFRlc3QpCiAgICAgICAgIHNlbGYuY3JlYXRlVGVzdHMoKQogCiAgICAgZGVmIGNyZWF0ZVRlc3RzKHNlbGYpOgpAQCAtMTc0LDc2ICsxNDUsODQgQEAKICAgICAgICAgICAgIHNlbGYudGVzdCA9IHNlbGYudGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoc2VsZi50ZXN0TmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlKQogCi0gICAgZGVmIF9nZXRPcHRQYXJzZXIoc2VsZik6Ci0gICAgICAgIGltcG9ydCBvcHRwYXJzZQotICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQotICAgICAgICBwYXJzZXIucHJvZyA9IHNlbGYucHJvZ05hbWUKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcScsICctLXF1aWV0JywgZGVzdD0ncXVpZXQnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdRdWlldCBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGRlZiBfaW5pdEFyZ1BhcnNlcnMoc2VsZik6CisgICAgICAgIHBhcmVudF9wYXJzZXIgPSBzZWxmLl9nZXRQYXJlbnRBcmdQYXJzZXIoKQorICAgICAgICBzZWxmLl9tYWluX3BhcnNlciA9IHNlbGYuX2dldE1haW5BcmdQYXJzZXIocGFyZW50X3BhcnNlcikKKyAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciA9IHNlbGYuX2dldERpc2NvdmVyeUFyZ1BhcnNlcihwYXJlbnRfcGFyc2VyKQogCi0gICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6Ci0gICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWYnLCAnLS1mYWlsZmFzdCcsIGRlc3Q9J2ZhaWxmYXN0JywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N0b3Agb24gZmlyc3QgZmFpbCBvciBlcnJvcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgIT0gRmFsc2U6Ci0gICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jYXRjaCcsIGRlc3Q9J2NhdGNoYnJlYWsnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2F0Y2ggY3RybC1DIGFuZCBkaXNwbGF5IHJlc3VsdHMgc28gZmFyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYnVmZmVyJywgZGVzdD0nYnVmZmVyJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0J1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBkZWYgX2dldFBhcmVudEFyZ1BhcnNlcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgZGVzdD0ndmVyYm9zaXR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBkZXN0PSd2ZXJib3NpdHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1F1aWV0IG91dHB1dCcpCisKKyAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mYWlsZmFzdCcsIGRlc3Q9J2ZhaWxmYXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3RvcCBvbiBmaXJzdCBmYWlsIG9yIGVycm9yJykKKyAgICAgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgaXMgTm9uZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1jJywgJy0tY2F0Y2gnLCBkZXN0PSdjYXRjaGJyZWFrJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2F0Y2ggY3RybC1DIGFuZCBkaXNwbGF5IHJlc3VsdHMgc28gZmFyJykKKyAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuYnVmZmVyIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1ZmZlcicsIGRlc3Q9J2J1ZmZlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0J1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdHMnKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBGYWxzZQorCiAgICAgICAgIHJldHVybiBwYXJzZXIKIAotICAgIGRlZiBfc2V0QXR0cmlidXRlc0Zyb21PcHRpb25zKHNlbGYsIG9wdGlvbnMpOgotICAgICAgICAjIG9ubHkgc2V0IG9wdGlvbnMgZnJvbSB0aGUgcGFyc2luZyBoZXJlCi0gICAgICAgICMgaWYgdGhleSB3ZXJlbid0IHNldCBleHBsaWNpdGx5IGluIHRoZSBjb25zdHJ1Y3RvcgotICAgICAgICBpZiBzZWxmLmZhaWxmYXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gb3B0aW9ucy5mYWlsZmFzdAotICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IG9wdGlvbnMuY2F0Y2hicmVhawotICAgICAgICBpZiBzZWxmLmJ1ZmZlciBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcgorICAgIGRlZiBfZ2V0TWFpbkFyZ1BhcnNlcihzZWxmLCBwYXJlbnQpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICBwYXJzZXIucHJvZyA9IHNlbGYucHJvZ05hbWUKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAgPSBzZWxmLl9wcmludF9oZWxwCiAKLSAgICAgICAgaWYgb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAyCi0gICAgICAgIGVsaWYgb3B0aW9ucy5xdWlldDoKLSAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMAorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd0ZXN0cycsIG5hcmdzPScqJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhIGxpc3Qgb2YgYW55IG51bWJlciBvZiB0ZXN0IG1vZHVsZXMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NlcyBhbmQgdGVzdCBtZXRob2RzLicpCiAKLSAgICBkZWYgX2FkZERpc2NvdmVyeU9wdGlvbnMoc2VsZiwgcGFyc2VyKToKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc3RhcnQtZGlyZWN0b3J5JywgZGVzdD0nc3RhcnQnLCBkZWZhdWx0PScuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpIikKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGF0dGVybicsIGRlc3Q9J3BhdHRlcm4nLCBkZWZhdWx0PSd0ZXN0Ki5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdHRlcm4gdG8gbWF0Y2ggdGVzdHMgKCd0ZXN0Ki5weScgZGVmYXVsdCkiKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvIHN0YXJ0IGRpcmVjdG9yeSknKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBkZWYgX2dldERpc2NvdmVyeUFyZ1BhcnNlcihzZWxmLCBwYXJlbnQpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICBwYXJzZXIucHJvZyA9ICclcyBkaXNjb3ZlcicgJSBzZWxmLnByb2dOYW1lCisgICAgICAgIHBhcnNlci5lcGlsb2cgPSAoJ0ZvciB0ZXN0IGRpc2NvdmVyeSBhbGwgdGVzdCBtb2R1bGVzIG11c3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRhYmxlIGZyb20gdGhlIHRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgdGhlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAncHJvamVjdC4nKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1zJywgJy0tc3RhcnQtZGlyZWN0b3J5JywgZGVzdD0nc3RhcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcGF0dGVybicsIGRlc3Q9J3BhdHRlcm4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdHRlcm4gdG8gbWF0Y2ggdGVzdHMgKCd0ZXN0Ki5weScgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdCcsICctLXRvcC1sZXZlbC1kaXJlY3RvcnknLCBkZXN0PSd0b3AnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdHMgdG8gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0IGRpcmVjdG9yeSknKQorICAgICAgICBmb3IgYXJnIGluICgnc3RhcnQnLCAncGF0dGVybicsICd0b3AnKToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoYXJnLCBuYXJncz0nPycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisKKyAgICAgICAgcmV0dXJuIHBhcnNlcgogCiAgICAgZGVmIF9kb19kaXNjb3Zlcnkoc2VsZiwgYXJndiwgTG9hZGVyPU5vbmUpOgotICAgICAgICBpZiBMb2FkZXIgaXMgTm9uZToKLSAgICAgICAgICAgIExvYWRlciA9IGxhbWJkYTogc2VsZi50ZXN0TG9hZGVyCisgICAgICAgIHNlbGYuc3RhcnQgPSAnLicKKyAgICAgICAgc2VsZi5wYXR0ZXJuID0gJ3Rlc3QqLnB5JworICAgICAgICBzZWxmLnRvcCA9IE5vbmUKKyAgICAgICAgaWYgYXJndiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgaGFuZGxlIGNvbW1hbmQgbGluZSBhcmdzIGZvciB0ZXN0IGRpc2NvdmVyeQorICAgICAgICAgICAgaWYgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgZm9yIHRlc3RpbmcKKyAgICAgICAgICAgICAgICBzZWxmLl9pbml0QXJnUGFyc2VycygpCisgICAgICAgICAgICBzZWxmLl9kaXNjb3ZlcnlfcGFyc2VyLnBhcnNlX2FyZ3MoYXJndiwgc2VsZikKIAotICAgICAgICAjIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGVzdCBkaXNjb3ZlcnkKLSAgICAgICAgc2VsZi5wcm9nTmFtZSA9ICclcyBkaXNjb3ZlcicgJSBzZWxmLnByb2dOYW1lCi0gICAgICAgIHBhcnNlciA9IHNlbGYuX2dldE9wdFBhcnNlcigpCi0gICAgICAgIHNlbGYuX2FkZERpc2NvdmVyeU9wdGlvbnMocGFyc2VyKQotCi0gICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQotICAgICAgICBpZiBsZW4oYXJncykgPiAzOgotICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQoKQotCi0gICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiB6aXAoKCdzdGFydCcsICdwYXR0ZXJuJywgJ3RvcCcpLCBhcmdzKToKLSAgICAgICAgICAgIHNldGF0dHIob3B0aW9ucywgbmFtZSwgdmFsdWUpCi0KLSAgICAgICAgc2VsZi5fc2V0QXR0cmlidXRlc0Zyb21PcHRpb25zKG9wdGlvbnMpCi0KLSAgICAgICAgc3RhcnRfZGlyID0gb3B0aW9ucy5zdGFydAotICAgICAgICBwYXR0ZXJuID0gb3B0aW9ucy5wYXR0ZXJuCi0gICAgICAgIHRvcF9sZXZlbF9kaXIgPSBvcHRpb25zLnRvcAotCi0gICAgICAgIGxvYWRlciA9IExvYWRlcigpCi0gICAgICAgIHNlbGYudGVzdCA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXIsIHBhdHRlcm4sIHRvcF9sZXZlbF9kaXIpCisgICAgICAgIGxvYWRlciA9IHNlbGYudGVzdExvYWRlciBpZiBMb2FkZXIgaXMgTm9uZSBlbHNlIExvYWRlcigpCisgICAgICAgIHNlbGYudGVzdCA9IGxvYWRlci5kaXNjb3ZlcihzZWxmLnN0YXJ0LCBzZWxmLnBhdHRlcm4sIHNlbGYudG9wKQogCiAgICAgZGVmIHJ1blRlc3RzKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWs6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvbW9jay5weSBiL0xpYi91bml0dGVzdC9tb2NrLnB5CmluZGV4IDA3Mzg2OWEuLmRjNWMwMzMgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9tb2NrLnB5CisrKyBiL0xpYi91bml0dGVzdC9tb2NrLnB5CkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IHBwcmludAogaW1wb3J0IHN5cwotZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMsIHBhcnRpYWwKIAogCiBCYXNlRXhjZXB0aW9ucyA9IChCYXNlRXhjZXB0aW9uLCkKQEAgLTY2LDU1ICs2Niw0NSBAQAogKQogCiAKLWRlZiBfZ2V0c2lnbmF0dXJlKGZ1bmMsIHNraXBmaXJzdCwgaW5zdGFuY2U9RmFsc2UpOgotICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgdHlwZSkgYW5kIG5vdCBpbnN0YW5jZToKK2RlZiBfZ2V0X3NpZ25hdHVyZV9vYmplY3QoZnVuYywgYXNfaW5zdGFuY2UsIGVhdF9zZWxmKToKKyAgICAiIiIKKyAgICBHaXZlbiBhbiBhcmJpdHJhcnksIHBvc3NpYmx5IGNhbGxhYmxlIG9iamVjdCwgdHJ5IHRvIGNyZWF0ZSBhIHN1aXRhYmxlCisgICAgc2lnbmF0dXJlIG9iamVjdC4KKyAgICBSZXR1cm4gYSAocmVkdWNlZCBmdW5jLCBzaWduYXR1cmUpIHR1cGxlLCBvciBOb25lLgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgdHlwZSkgYW5kIG5vdCBhc19pbnN0YW5jZToKKyAgICAgICAgIyBJZiBpdCdzIGEgdHlwZSBhbmQgc2hvdWxkIGJlIG1vZGVsbGVkIGFzIGEgdHlwZSwgdXNlIF9faW5pdF9fLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdW5jID0gZnVuYy5fX2luaXRfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2tpcGZpcnN0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBTa2lwIHRoZSBgc2VsZmAgYXJndW1lbnQgaW4gX19pbml0X18KKyAgICAgICAgZWF0X3NlbGYgPSBUcnVlCiAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShmdW5jLCBGdW5jdGlvblR5cGVzKToKLSAgICAgICAgIyBmb3IgY2xhc3NlcyB3aGVyZSBpbnN0YW5jZSBpcyBUcnVlIHdlIGVuZCB1cCBoZXJlIHRvbworICAgICAgICAjIElmIHdlIHJlYWxseSB3YW50IHRvIG1vZGVsIGFuIGluc3RhbmNlIG9mIHRoZSBwYXNzZWQgdHlwZSwKKyAgICAgICAgIyBfX2NhbGxfXyBzaG91bGQgYmUgbG9va2VkIHVwLCBub3QgX19pbml0X18uCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ1bmMgPSBmdW5jLl9fY2FsbF9fCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgIGlmIGVhdF9zZWxmOgorICAgICAgICBzaWdfZnVuYyA9IHBhcnRpYWwoZnVuYywgTm9uZSkKKyAgICBlbHNlOgorICAgICAgICBzaWdfZnVuYyA9IGZ1bmMKICAgICB0cnk6Ci0gICAgICAgIGFyZ3NwZWMgPSBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKGZ1bmMpCi0gICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgIyBDIGZ1bmN0aW9uIC8gbWV0aG9kLCBwb3NzaWJseSBpbmhlcml0ZWQgb2JqZWN0KCkuX19pbml0X18KLSAgICAgICAgcmV0dXJuCi0KLSAgICByZWdhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seSwga3dvbmx5ZGVmLCBhbm4gPSBhcmdzcGVjCi0KLQotICAgICMgaW5zdGFuY2UgbWV0aG9kcyBhbmQgY2xhc3NtZXRob2RzIG5lZWQgdG8gbG9zZSB0aGUgc2VsZiBhcmd1bWVudAotICAgIGlmIGdldGF0dHIoZnVuYywgJ19fc2VsZl9fJywgTm9uZSkgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJlZ2FyZ3MgPSByZWdhcmdzWzE6XQotICAgIGlmIHNraXBmaXJzdDoKLSAgICAgICAgIyB0aGlzIGNvbmRpdGlvbiBhbmQgdGhlIGFib3ZlIG9uZSBhcmUgbmV2ZXIgYm90aCBUcnVlIC0gd2h5PwotICAgICAgICByZWdhcmdzID0gcmVnYXJnc1sxOl0KLQotICAgIHNpZ25hdHVyZSA9IGluc3BlY3QuZm9ybWF0YXJnc3BlYygKLSAgICAgICAgcmVnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLAotICAgICAgICBrd29ubHksIGt3b25seWRlZiwgYW5uLCBmb3JtYXR2YWx1ZT1sYW1iZGEgdmFsdWU6ICIiKQotICAgIHJldHVybiBzaWduYXR1cmVbMTotMV0sIGZ1bmMKKyAgICAgICAgcmV0dXJuIGZ1bmMsIGluc3BlY3Quc2lnbmF0dXJlKHNpZ19mdW5jKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAjIENlcnRhaW4gY2FsbGFibGUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgaW5zcGVjdC5zaWduYXR1cmUoKQorICAgICAgICByZXR1cm4gTm9uZQogCiAKIGRlZiBfY2hlY2tfc2lnbmF0dXJlKGZ1bmMsIG1vY2ssIHNraXBmaXJzdCwgaW5zdGFuY2U9RmFsc2UpOgotICAgIGlmIG5vdCBfY2FsbGFibGUoZnVuYyk6CisgICAgc2lnID0gX2dldF9zaWduYXR1cmVfb2JqZWN0KGZ1bmMsIGluc3RhbmNlLCBza2lwZmlyc3QpCisgICAgaWYgc2lnIGlzIE5vbmU6CiAgICAgICAgIHJldHVybgotCi0gICAgcmVzdWx0ID0gX2dldHNpZ25hdHVyZShmdW5jLCBza2lwZmlyc3QsIGluc3RhbmNlKQotICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICByZXR1cm4KLSAgICBzaWduYXR1cmUsIGZ1bmMgPSByZXN1bHQKLQotICAgICMgY2FuJ3QgdXNlIHNlbGYgYmVjYXVzZSAic2VsZiIgaXMgY29tbW9uIGFzIGFuIGFyZ3VtZW50IG5hbWUKLSAgICAjIHVuZm9ydHVuYXRlbHkgZXZlbiBub3QgaW4gdGhlIGZpcnN0IHBsYWNlCi0gICAgc3JjID0gImxhbWJkYSBfbW9ja19zZWxmLCAlczogTm9uZSIgJSBzaWduYXR1cmUKLSAgICBjaGVja3NpZyA9IGV2YWwoc3JjLCB7fSkKKyAgICBmdW5jLCBzaWcgPSBzaWcKKyAgICBkZWYgY2hlY2tzaWcoX21vY2tfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2lnLmJpbmQoKmFyZ3MsICoqa3dhcmdzKQogICAgIF9jb3B5X2Z1bmNfZGV0YWlscyhmdW5jLCBjaGVja3NpZykKICAgICB0eXBlKG1vY2spLl9tb2NrX2NoZWNrX3NpZyA9IGNoZWNrc2lnCiAKQEAgLTE2NiwxNSArMTU2LDEyIEBACiAgICAgICAgIHJldHVybgogCiAgICAgc2tpcGZpcnN0ID0gaXNpbnN0YW5jZShvcmlnaW5hbCwgdHlwZSkKLSAgICByZXN1bHQgPSBfZ2V0c2lnbmF0dXJlKG9yaWdpbmFsLCBza2lwZmlyc3QsIGluc3RhbmNlKQorICAgIHJlc3VsdCA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChvcmlnaW5hbCwgaW5zdGFuY2UsIHNraXBmaXJzdCkKICAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgIyB3YXMgYSBDIGZ1bmN0aW9uIChlLmcuIG9iamVjdCgpLl9faW5pdF9fICkgdGhhdCBjYW4ndCBiZSBtb2NrZWQKICAgICAgICAgcmV0dXJuCi0KLSAgICBzaWduYXR1cmUsIGZ1bmMgPSByZXN1bHQKLQotICAgIHNyYyA9ICJsYW1iZGEgJXM6IE5vbmUiICUgc2lnbmF0dXJlCi0gICAgY2hlY2tzaWcgPSBldmFsKHNyYywge30pCisgICAgZnVuYywgc2lnID0gcmVzdWx0CisgICAgZGVmIGNoZWNrc2lnKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNpZy5iaW5kKCphcmdzLCAqKmt3YXJncykKICAgICBfY29weV9mdW5jX2RldGFpbHMoZnVuYywgY2hlY2tzaWcpCiAKICAgICBuYW1lID0gb3JpZ2luYWwuX19uYW1lX18KQEAgLTM2OCw3ICszNTUsNyBAQAogICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgIHNlbGYsIHNwZWM9Tm9uZSwgd3JhcHM9Tm9uZSwgbmFtZT1Ob25lLCBzcGVjX3NldD1Ob25lLAogICAgICAgICAgICAgcGFyZW50PU5vbmUsIF9zcGVjX3N0YXRlPU5vbmUsIF9uZXdfbmFtZT0nJywgX25ld19wYXJlbnQ9Tm9uZSwKLSAgICAgICAgICAgICoqa3dhcmdzCisgICAgICAgICAgICBfc3BlY19hc19pbnN0YW5jZT1GYWxzZSwgX2VhdF9zZWxmPU5vbmUsICoqa3dhcmdzCiAgICAgICAgICk6CiAgICAgICAgIGlmIF9uZXdfcGFyZW50IGlzIE5vbmU6CiAgICAgICAgICAgICBfbmV3X3BhcmVudCA9IHBhcmVudApAQCAtMzgyLDggKzM2OSwxMCBAQAogICAgICAgICBpZiBzcGVjX3NldCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNwZWMgPSBzcGVjX3NldAogICAgICAgICAgICAgc3BlY19zZXQgPSBUcnVlCisgICAgICAgIGlmIF9lYXRfc2VsZiBpcyBOb25lOgorICAgICAgICAgICAgX2VhdF9zZWxmID0gcGFyZW50IGlzIG5vdCBOb25lCiAKLSAgICAgICAgc2VsZi5fbW9ja19hZGRfc3BlYyhzcGVjLCBzcGVjX3NldCkKKyAgICAgICAgc2VsZi5fbW9ja19hZGRfc3BlYyhzcGVjLCBzcGVjX3NldCwgX3NwZWNfYXNfaW5zdGFuY2UsIF9lYXRfc2VsZikKIAogICAgICAgICBfX2RpY3RfX1snX21vY2tfY2hpbGRyZW4nXSA9IHt9CiAgICAgICAgIF9fZGljdF9fWydfbW9ja193cmFwcyddID0gd3JhcHMKQEAgLTQyOCwyMCArNDE3LDI2IEBACiAgICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQpCiAKIAotICAgIGRlZiBfbW9ja19hZGRfc3BlYyhzZWxmLCBzcGVjLCBzcGVjX3NldCk6CisgICAgZGVmIF9tb2NrX2FkZF9zcGVjKHNlbGYsIHNwZWMsIHNwZWNfc2V0LCBfc3BlY19hc19pbnN0YW5jZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX2VhdF9zZWxmPUZhbHNlKToKICAgICAgICAgX3NwZWNfY2xhc3MgPSBOb25lCisgICAgICAgIF9zcGVjX3NpZ25hdHVyZSA9IE5vbmUKIAogICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBub3QgX2lzX2xpc3Qoc3BlYyk6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNwZWMsIHR5cGUpOgogICAgICAgICAgICAgICAgIF9zcGVjX2NsYXNzID0gc3BlYwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBfc3BlY19jbGFzcyA9IF9nZXRfY2xhc3Moc3BlYykKKyAgICAgICAgICAgIHJlcyA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zcGVjX2FzX2luc3RhbmNlLCBfZWF0X3NlbGYpCisgICAgICAgICAgICBfc3BlY19zaWduYXR1cmUgPSByZXMgYW5kIHJlc1sxXQogCiAgICAgICAgICAgICBzcGVjID0gZGlyKHNwZWMpCiAKICAgICAgICAgX19kaWN0X18gPSBzZWxmLl9fZGljdF9fCiAgICAgICAgIF9fZGljdF9fWydfc3BlY19jbGFzcyddID0gX3NwZWNfY2xhc3MKICAgICAgICAgX19kaWN0X19bJ19zcGVjX3NldCddID0gc3BlY19zZXQKKyAgICAgICAgX19kaWN0X19bJ19zcGVjX3NpZ25hdHVyZSddID0gX3NwZWNfc2lnbmF0dXJlCiAgICAgICAgIF9fZGljdF9fWydfbW9ja19tZXRob2RzJ10gPSBzcGVjCiAKIApAQCAtNjk1LDcgKzY5MCw2IEBACiAgICAgICAgIHNlbGYuX21vY2tfY2hpbGRyZW5bbmFtZV0gPSBfZGVsZXRlZAogCiAKLQogICAgIGRlZiBfZm9ybWF0X21vY2tfY2FsbF9zaWduYXR1cmUoc2VsZiwgYXJncywga3dhcmdzKToKICAgICAgICAgbmFtZSA9IHNlbGYuX21vY2tfbmFtZSBvciAnbW9jaycKICAgICAgICAgcmV0dXJuIF9mb3JtYXRfY2FsbF9zaWduYXR1cmUobmFtZSwgYXJncywga3dhcmdzKQpAQCAtNzExLDYgKzcwNSwyOCBAQAogICAgICAgICByZXR1cm4gbWVzc2FnZSAlIChleHBlY3RlZF9zdHJpbmcsIGFjdHVhbF9zdHJpbmcpCiAKIAorICAgIGRlZiBfY2FsbF9tYXRjaGVyKHNlbGYsIF9jYWxsKToKKyAgICAgICAgIiIiCisgICAgICAgIEdpdmVuIGEgY2FsbCAob3Igc2ltcGx5IGEgKGFyZ3MsIGt3YXJncykgdHVwbGUpLCByZXR1cm4gYQorICAgICAgICBjb21wYXJpc29uIGtleSBzdWl0YWJsZSBmb3IgbWF0Y2hpbmcgd2l0aCBvdGhlciBjYWxscy4KKyAgICAgICAgVGhpcyBpcyBhIGJlc3QgZWZmb3J0IG1ldGhvZCB3aGljaCByZWxpZXMgb24gdGhlIHNwZWMncyBzaWduYXR1cmUsCisgICAgICAgIGlmIGF2YWlsYWJsZSwgb3IgZmFsbHMgYmFjayBvbiB0aGUgYXJndW1lbnRzIHRoZW1zZWx2ZXMuCisgICAgICAgICIiIgorICAgICAgICBzaWcgPSBzZWxmLl9zcGVjX3NpZ25hdHVyZQorICAgICAgICBpZiBzaWcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBsZW4oX2NhbGwpID09IDI6CisgICAgICAgICAgICAgICAgbmFtZSA9ICcnCisgICAgICAgICAgICAgICAgYXJncywga3dhcmdzID0gX2NhbGwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSwgYXJncywga3dhcmdzID0gX2NhbGwKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSwgc2lnLmJpbmQoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJldHVybiBlLndpdGhfdHJhY2ViYWNrKE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gX2NhbGwKKworCiAgICAgZGVmIGFzc2VydF9jYWxsZWRfd2l0aChfbW9ja19zZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiJhc3NlcnQgdGhhdCB0aGUgbW9jayB3YXMgY2FsbGVkIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuCiAKQEAgLTcyMSw5ICs3MzcsMTQgQEAKICAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZm9ybWF0X21vY2tfY2FsbF9zaWduYXR1cmUoYXJncywga3dhcmdzKQogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0V4cGVjdGVkIGNhbGw6ICVzXG5Ob3QgY2FsbGVkJyAlIChleHBlY3RlZCwpKQogCi0gICAgICAgIGlmIHNlbGYuY2FsbF9hcmdzICE9IChhcmdzLCBrd2FyZ3MpOgorICAgICAgICBkZWYgX2Vycm9yX21lc3NhZ2UoKToKICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdF9tb2NrX2ZhaWx1cmVfbWVzc2FnZShhcmdzLCBrd2FyZ3MpCi0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihtc2cpCisgICAgICAgICAgICByZXR1cm4gbXNnCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fY2FsbF9tYXRjaGVyKChhcmdzLCBrd2FyZ3MpKQorICAgICAgICBhY3R1YWwgPSBzZWxmLl9jYWxsX21hdGNoZXIoc2VsZi5jYWxsX2FyZ3MpCisgICAgICAgIGlmIGV4cGVjdGVkICE9IGFjdHVhbDoKKyAgICAgICAgICAgIGNhdXNlID0gZXhwZWN0ZWQgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgRXhjZXB0aW9uKSBlbHNlIE5vbmUKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKF9lcnJvcl9tZXNzYWdlKCkpIGZyb20gY2F1c2UKIAogCiAgICAgZGVmIGFzc2VydF9jYWxsZWRfb25jZV93aXRoKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CkBAIC03NDcsMTggKzc2OCwyMSBAQAogCiAgICAgICAgIElmIGBhbnlfb3JkZXJgIGlzIFRydWUgdGhlbiB0aGUgY2FsbHMgY2FuIGJlIGluIGFueSBvcmRlciwgYnV0CiAgICAgICAgIHRoZXkgbXVzdCBhbGwgYXBwZWFyIGluIGBtb2NrX2NhbGxzYC4iIiIKKyAgICAgICAgZXhwZWN0ZWQgPSBbc2VsZi5fY2FsbF9tYXRjaGVyKGMpIGZvciBjIGluIGNhbGxzXQorICAgICAgICBjYXVzZSA9IGV4cGVjdGVkIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIEV4Y2VwdGlvbikgZWxzZSBOb25lCisgICAgICAgIGFsbF9jYWxscyA9IF9DYWxsTGlzdChzZWxmLl9jYWxsX21hdGNoZXIoYykgZm9yIGMgaW4gc2VsZi5tb2NrX2NhbGxzKQogICAgICAgICBpZiBub3QgYW55X29yZGVyOgotICAgICAgICAgICAgaWYgY2FsbHMgbm90IGluIHNlbGYubW9ja19jYWxsczoKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkIG5vdCBpbiBhbGxfY2FsbHM6CiAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICdDYWxscyBub3QgZm91bmQuXG5FeHBlY3RlZDogJXJcbicKICAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbDogJXInICUgKGNhbGxzLCBzZWxmLm1vY2tfY2FsbHMpCi0gICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkgZnJvbSBjYXVzZQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgYWxsX2NhbGxzID0gbGlzdChzZWxmLm1vY2tfY2FsbHMpCisgICAgICAgIGFsbF9jYWxscyA9IGxpc3QoYWxsX2NhbGxzKQogCiAgICAgICAgIG5vdF9mb3VuZCA9IFtdCi0gICAgICAgIGZvciBrYWxsIGluIGNhbGxzOgorICAgICAgICBmb3Iga2FsbCBpbiBleHBlY3RlZDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhbGxfY2FsbHMucmVtb3ZlKGthbGwpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKQEAgLTc2Niw3ICs3OTAsNyBAQAogICAgICAgICBpZiBub3RfZm91bmQ6CiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKICAgICAgICAgICAgICAgICAnJXIgbm90IGFsbCBmb3VuZCBpbiBjYWxsIGxpc3QnICUgKHR1cGxlKG5vdF9mb3VuZCksKQotICAgICAgICAgICAgKQorICAgICAgICAgICAgKSBmcm9tIGNhdXNlCiAKIAogICAgIGRlZiBhc3NlcnRfYW55X2NhbGwoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTc3NSwxMiArNzk5LDE0IEBACiAgICAgICAgIFRoZSBhc3NlcnQgcGFzc2VzIGlmIHRoZSBtb2NrIGhhcyAqZXZlciogYmVlbiBjYWxsZWQsIHVubGlrZQogICAgICAgICBgYXNzZXJ0X2NhbGxlZF93aXRoYCBhbmQgYGFzc2VydF9jYWxsZWRfb25jZV93aXRoYCB0aGF0IG9ubHkgcGFzcyBpZgogICAgICAgICB0aGUgY2FsbCBpcyB0aGUgbW9zdCByZWNlbnQgb25lLiIiIgotICAgICAgICBrYWxsID0gY2FsbCgqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGlmIGthbGwgbm90IGluIHNlbGYuY2FsbF9hcmdzX2xpc3Q6CisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fY2FsbF9tYXRjaGVyKChhcmdzLCBrd2FyZ3MpKQorICAgICAgICBhY3R1YWwgPSBbc2VsZi5fY2FsbF9tYXRjaGVyKGMpIGZvciBjIGluIHNlbGYuY2FsbF9hcmdzX2xpc3RdCisgICAgICAgIGlmIGV4cGVjdGVkIG5vdCBpbiBhY3R1YWw6CisgICAgICAgICAgICBjYXVzZSA9IGV4cGVjdGVkIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIEV4Y2VwdGlvbikgZWxzZSBOb25lCiAgICAgICAgICAgICBleHBlY3RlZF9zdHJpbmcgPSBzZWxmLl9mb3JtYXRfbW9ja19jYWxsX3NpZ25hdHVyZShhcmdzLCBrd2FyZ3MpCiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKICAgICAgICAgICAgICAgICAnJXMgY2FsbCBub3QgZm91bmQnICUgZXhwZWN0ZWRfc3RyaW5nCi0gICAgICAgICAgICApCisgICAgICAgICAgICApIGZyb20gY2F1c2UKIAogCiAgICAgZGVmIF9nZXRfY2hpbGRfbW9jayhzZWxmLCAqKmt3KToKQEAgLTg1MCwxMSArODc2LDEyIEBACiAgICAgICAgIHNlbGYgPSBfbW9ja19zZWxmCiAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQogICAgICAgICBzZWxmLmNhbGxfY291bnQgKz0gMQotICAgICAgICBzZWxmLmNhbGxfYXJncyA9IF9DYWxsKChhcmdzLCBrd2FyZ3MpLCB0d289VHJ1ZSkKLSAgICAgICAgc2VsZi5jYWxsX2FyZ3NfbGlzdC5hcHBlbmQoX0NhbGwoKGFyZ3MsIGt3YXJncyksIHR3bz1UcnVlKSkKLQogICAgICAgICBfbmV3X25hbWUgPSBzZWxmLl9tb2NrX25ld19uYW1lCiAgICAgICAgIF9uZXdfcGFyZW50ID0gc2VsZi5fbW9ja19uZXdfcGFyZW50CisKKyAgICAgICAgX2NhbGwgPSBfQ2FsbCgoYXJncywga3dhcmdzKSwgdHdvPVRydWUpCisgICAgICAgIHNlbGYuY2FsbF9hcmdzID0gX2NhbGwKKyAgICAgICAgc2VsZi5jYWxsX2FyZ3NfbGlzdC5hcHBlbmQoX2NhbGwpCiAgICAgICAgIHNlbGYubW9ja19jYWxscy5hcHBlbmQoX0NhbGwoKCcnLCBhcmdzLCBrd2FyZ3MpKSkKIAogICAgICAgICBzZWVuID0gc2V0KCkKQEAgLTkwOSw4ICs5MzYsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgICAgICAgICAgcmV0X3ZhbCA9IGVmZmVjdCgqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBpZiByZXRfdmFsIGlzIERFRkFVTFQ6Ci0gICAgICAgICAgICAgICAgcmV0X3ZhbCA9IHNlbGYucmV0dXJuX3ZhbHVlCiAKICAgICAgICAgaWYgKHNlbGYuX21vY2tfd3JhcHMgaXMgbm90IE5vbmUgYW5kCiAgICAgICAgICAgICAgc2VsZi5fbW9ja19yZXR1cm5fdmFsdWUgaXMgREVGQVVMVCk6CkBAIC0yMDMwLDYgKzIwNTUsOCBAQAogICAgIGVsaWYgc3BlYyBpcyBOb25lOgogICAgICAgICAjIE5vbmUgd2UgbW9jayB3aXRoIGEgbm9ybWFsIG1vY2sgd2l0aG91dCBhIHNwZWMKICAgICAgICAgX2t3YXJncyA9IHt9CisgICAgaWYgX2t3YXJncyBhbmQgaW5zdGFuY2U6CisgICAgICAgIF9rd2FyZ3NbJ19zcGVjX2FzX2luc3RhbmNlJ10gPSBUcnVlCiAKICAgICBfa3dhcmdzLnVwZGF0ZShrd2FyZ3MpCiAKQEAgLTIwOTYsMTAgKzIxMjMsMTIgQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3BlYywgRnVuY3Rpb25UeXBlcyk6CiAgICAgICAgICAgICAgICAgcGFyZW50ID0gbW9jay5tb2NrCiAKLSAgICAgICAgICAgIG5ldyA9IE1hZ2ljTW9jayhwYXJlbnQ9cGFyZW50LCBuYW1lPWVudHJ5LCBfbmV3X25hbWU9ZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ld19wYXJlbnQ9cGFyZW50LCAqKmt3YXJncykKLSAgICAgICAgICAgIG1vY2suX21vY2tfY2hpbGRyZW5bZW50cnldID0gbmV3CiAgICAgICAgICAgICBza2lwZmlyc3QgPSBfbXVzdF9za2lwKHNwZWMsIGVudHJ5LCBpc190eXBlKQorICAgICAgICAgICAga3dhcmdzWydfZWF0X3NlbGYnXSA9IHNraXBmaXJzdAorICAgICAgICAgICAgbmV3ID0gTWFnaWNNb2NrKHBhcmVudD1wYXJlbnQsIG5hbWU9ZW50cnksIF9uZXdfbmFtZT1lbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV3X3BhcmVudD1wYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgICAgICAgICBtb2NrLl9tb2NrX2NoaWxkcmVuW2VudHJ5XSA9IG5ldwogICAgICAgICAgICAgX2NoZWNrX3NpZ25hdHVyZShvcmlnaW5hbCwgbmV3LCBza2lwZmlyc3Q9c2tpcGZpcnN0KQogCiAgICAgICAgICMgc28gZnVuY3Rpb25zIGNyZWF0ZWQgd2l0aCBfc2V0X3NpZ25hdHVyZSBiZWNvbWUgaW5zdGFuY2UgYXR0cmlidXRlcywKQEAgLTIxMTMsNiArMjE0MiwxMCBAQAogCiAKIGRlZiBfbXVzdF9za2lwKHNwZWMsIGVudHJ5LCBpc190eXBlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gd2hldGhlciB3ZSBzaG91bGQgc2tpcCB0aGUgZmlyc3QgYXJndW1lbnQgb24gc3BlYydzIGBlbnRyeWAKKyAgICBhdHRyaWJ1dGUuCisgICAgIiIiCiAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3BlYywgdHlwZSk6CiAgICAgICAgIGlmIGVudHJ5IGluIGdldGF0dHIoc3BlYywgJ19fZGljdF9fJywge30pOgogICAgICAgICAgICAgIyBpbnN0YW5jZSBhdHRyaWJ1dGUgLSBzaG91bGRuJ3Qgc2tpcApAQCAtMjEyNSw3ICsyMTU4LDEyIEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgKHN0YXRpY21ldGhvZCwgY2xhc3NtZXRob2QpKToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gaXNfdHlwZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZ2V0YXR0cihyZXN1bHQsICdfX2dldF9fJywgTm9uZSksIE1ldGhvZFdyYXBwZXJUeXBlcyk6CisgICAgICAgICAgICAjIE5vcm1hbCBtZXRob2QgPT4gc2tpcCBpZiBsb29rZWQgdXAgb24gdHlwZQorICAgICAgICAgICAgIyAoaWYgbG9va2VkIHVwIG9uIGluc3RhbmNlLCBzZWxmIGlzIGFscmVhZHkgc2tpcHBlZCkKKyAgICAgICAgICAgIHJldHVybiBpc190eXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICMgc2hvdWxkbid0IGdldCBoZXJlIHVubGVzcyBmdW5jdGlvbiBpcyBhIGR5bmFtaWNhbGx5IHByb3ZpZGVkIGF0dHJpYnV0ZQogICAgICMgWFhYWCB1bnRlc3RlZCBiZWhhdmlvdXIKQEAgLTIxNTksOSArMjE5NywzMSBAQAogICAgIHR5cGUoQU5ZLl9fZXFfXyksCiApCiAKK01ldGhvZFdyYXBwZXJUeXBlcyA9ICgKKyAgICB0eXBlKEFOWS5fX2VxX18uX19nZXRfXyksCispCisKIAogZmlsZV9zcGVjID0gTm9uZQogCitkZWYgX2l0ZXJhdGVfcmVhZF9kYXRhKHJlYWRfZGF0YSk6CisgICAgIyBIZWxwZXIgZm9yIG1vY2tfb3BlbjoKKyAgICAjIFJldHJpZXZlIGxpbmVzIGZyb20gcmVhZF9kYXRhIHZpYSBhIGdlbmVyYXRvciBzbyB0aGF0IHNlcGFyYXRlIGNhbGxzIHRvCisgICAgIyByZWFkbGluZSwgcmVhZCwgYW5kIHJlYWRsaW5lcyBhcmUgcHJvcGVybHkgaW50ZXJsZWF2ZWQKKyAgICBkYXRhX2FzX2xpc3QgPSBbJ3t9XG4nLmZvcm1hdChsKSBmb3IgbCBpbiByZWFkX2RhdGEuc3BsaXQoJ1xuJyldCisKKyAgICBpZiBkYXRhX2FzX2xpc3RbLTFdID09ICdcbic6CisgICAgICAgICMgSWYgdGhlIGxhc3QgbGluZSBlbmRlZCBpbiBhIG5ld2xpbmUsIHRoZSBsaXN0IGNvbXByZWhlbnNpb24gd2lsbCBoYXZlIGFuCisgICAgICAgICMgZXh0cmEgZW50cnkgdGhhdCdzIGp1c3QgYSBuZXdsaW5lLiAgUmVtb3ZlIHRoaXMuCisgICAgICAgIGRhdGFfYXNfbGlzdCA9IGRhdGFfYXNfbGlzdFs6LTFdCisgICAgZWxzZToKKyAgICAgICAgIyBJZiB0aGVyZSB3YXNuJ3QgYW4gZXh0cmEgbmV3bGluZSBieSBpdHNlbGYsIHRoZW4gdGhlIGZpbGUgYmVpbmcKKyAgICAgICAgIyBlbXVsYXRlZCBkb2Vzbid0IGhhdmUgYSBuZXdsaW5lIHRvIGVuZCB0aGUgbGFzdCBsaW5lICByZW1vdmUgdGhlCisgICAgICAgICMgbmV3bGluZSB0aGF0IG91ciBuYWl2ZSBmb3JtYXQoKSBhZGRlZAorICAgICAgICBkYXRhX2FzX2xpc3RbLTFdID0gZGF0YV9hc19saXN0Wy0xXVs6LTFdCisKKyAgICBmb3IgbGluZSBpbiBkYXRhX2FzX2xpc3Q6CisgICAgICAgIHlpZWxkIGxpbmUKIAogZGVmIG1vY2tfb3Blbihtb2NrPU5vbmUsIHJlYWRfZGF0YT0nJyk6CiAgICAgIiIiCkBAIC0yMTcyLDkgKzIyMzIsMjcgQEAKICAgICBkZWZhdWx0KSB0aGVuIGEgYE1hZ2ljTW9ja2Agd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UsIHdpdGggdGhlIEFQSSBsaW1pdGVkCiAgICAgdG8gbWV0aG9kcyBvciBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBvbiBzdGFuZGFyZCBmaWxlIGhhbmRsZXMuCiAKLSAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIGByZWFkYCBtZXRob2Qgb2YgdGhlIGZpbGUgaGFuZGxlIHRvIHJldHVybi4KLSAgICBUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgorICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgYHJlYWRgIG1ldGhvZGRsaW5lYCwgYW5kIGByZWFkbGluZXNgIG9mIHRoZQorICAgIGZpbGUgaGFuZGxlIHRvIHJldHVybi4gIFRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCiAgICAgIiIiCisgICAgZGVmIF9yZWFkbGluZXNfc2lkZV9lZmZlY3QoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUKKyAgICAgICAgcmV0dXJuIGxpc3QoX2RhdGEpCisKKyAgICBkZWYgX3JlYWRfc2lkZV9lZmZlY3QoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZQorICAgICAgICByZXR1cm4gJycuam9pbihfZGF0YSkKKworICAgIGRlZiBfcmVhZGxpbmVfc2lkZV9lZmZlY3QoKToKKyAgICAgICAgaWYgaGFuZGxlLnJlYWRsaW5lLnJldHVybl92YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgeWllbGQgaGFuZGxlLnJlYWRsaW5lLnJldHVybl92YWx1ZQorICAgICAgICBmb3IgbGluZSBpbiBfZGF0YToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworCiAgICAgZ2xvYmFsIGZpbGVfc3BlYwogICAgIGlmIGZpbGVfc3BlYyBpcyBOb25lOgogICAgICAgICBpbXBvcnQgX2lvCkBAIC0yMTg0LDkgKzIyNjIsMTggQEAKICAgICAgICAgbW9jayA9IE1hZ2ljTW9jayhuYW1lPSdvcGVuJywgc3BlYz1vcGVuKQogCiAgICAgaGFuZGxlID0gTWFnaWNNb2NrKHNwZWM9ZmlsZV9zcGVjKQotICAgIGhhbmRsZS53cml0ZS5yZXR1cm5fdmFsdWUgPSBOb25lCiAgICAgaGFuZGxlLl9fZW50ZXJfXy5yZXR1cm5fdmFsdWUgPSBoYW5kbGUKLSAgICBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgPSByZWFkX2RhdGEKKworICAgIF9kYXRhID0gX2l0ZXJhdGVfcmVhZF9kYXRhKHJlYWRfZGF0YSkKKworICAgIGhhbmRsZS53cml0ZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgPSBOb25lCisKKyAgICBoYW5kbGUucmVhZC5zaWRlX2VmZmVjdCA9IF9yZWFkX3NpZGVfZWZmZWN0CisgICAgaGFuZGxlLnJlYWRsaW5lLnNpZGVfZWZmZWN0ID0gX3JlYWRsaW5lX3NpZGVfZWZmZWN0KCkKKyAgICBoYW5kbGUucmVhZGxpbmVzLnNpZGVfZWZmZWN0ID0gX3JlYWRsaW5lc19zaWRlX2VmZmVjdAogCiAgICAgbW9jay5yZXR1cm5fdmFsdWUgPSBoYW5kbGUKICAgICByZXR1cm4gbW9jawpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKaW5kZXggOTdlNTQyNi4uZjNmNGI2NyAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQorKysgYi9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5CkBAIC0xMjEsNiArMTIxLDIyIEBACiAgICAgICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5kKCh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCiAgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKIAorICAgIEBmYWlsZmFzdAorICAgIGRlZiBhZGRTdWJUZXN0KHNlbGYsIHRlc3QsIHN1YnRlc3QsIGVycik6CisgICAgICAgICIiIkNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgc3VidGVzdC4KKyAgICAgICAgJ2VycicgaXMgTm9uZSBpZiB0aGUgc3VidGVzdCBlbmRlZCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBpdCdzIGEKKyAgICAgICAgdHVwbGUgb2YgdmFsdWVzIGFzIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpLgorICAgICAgICAiIiIKKyAgICAgICAgIyBCeSBkZWZhdWx0LCB3ZSBkb24ndCBkbyBhbnl0aGluZyB3aXRoIHN1Y2Nlc3NmdWwgc3VidGVzdHMsIGJ1dAorICAgICAgICAjIG1vcmUgc29waGlzdGljYXRlZCB0ZXN0IHJlc3VsdHMgbWlnaHQgd2FudCB0byByZWNvcmQgdGhlbS4KKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhlcnJbMF0sIHRlc3QuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgZXJyb3JzID0gc2VsZi5mYWlsdXJlcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJvcnMgPSBzZWxmLmVycm9ycworICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3VidGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQorICAgICAgICAgICAgc2VsZi5fbWlycm9yT3V0cHV0ID0gVHJ1ZQorCiAgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CiAgICAgICAgICJDYWxsZWQgd2hlbiBhIHRlc3QgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiCiAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9zdWl0ZS5weSBiL0xpYi91bml0dGVzdC9zdWl0ZS5weQppbmRleCBjZGU1ZDM4Li5jYTgyNzY1IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKKysrIGIvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CkBAIC0xNiw2ICsxNiw4IEBACiBjbGFzcyBCYXNlVGVzdFN1aXRlKG9iamVjdCk6CiAgICAgIiIiQSBzaW1wbGUgdGVzdCBzdWl0ZSB0aGF0IGRvZXNuJ3QgcHJvdmlkZSBjbGFzcyBvciBtb2R1bGUgc2hhcmVkIGZpeHR1cmVzLgogICAgICIiIgorICAgIF9jbGVhbnVwID0gVHJ1ZQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzPSgpKToKICAgICAgICAgc2VsZi5fdGVzdHMgPSBbXQogICAgICAgICBzZWxmLmFkZFRlc3RzKHRlc3RzKQpAQCAtNTcsMTIgKzU5LDIyIEBACiAgICAgICAgICAgICBzZWxmLmFkZFRlc3QodGVzdCkKIAogICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0KToKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKKyAgICAgICAgZm9yIGluZGV4LCB0ZXN0IGluIGVudW1lcmF0ZShzZWxmKToKICAgICAgICAgICAgIGlmIHJlc3VsdC5zaG91bGRTdG9wOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2NsZWFudXA6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlVGVzdEF0SW5kZXgoaW5kZXgpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAorICAgIGRlZiBfcmVtb3ZlVGVzdEF0SW5kZXgoc2VsZiwgaW5kZXgpOgorICAgICAgICAiIiJTdG9wIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIFRlc3RDYXNlIGF0IGluZGV4LiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl90ZXN0c1tpbmRleF0gPSBOb25lCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAjIHN1cHBvcnQgZm9yIHN1aXRlIGltcGxlbWVudGF0aW9ucyB0aGF0IGhhdmUgb3ZlcnJpZGVuIHNlbGYuX3Rlc3QKKyAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKICAgICAgICAgcmV0dXJuIHNlbGYucnVuKCphcmdzLCAqKmt3ZHMpCiAKQEAgLTg3LDcgKzk5LDcgQEAKICAgICAgICAgaWYgZ2V0YXR0cihyZXN1bHQsICdfdGVzdFJ1bkVudGVyZWQnLCBGYWxzZSkgaXMgRmFsc2U6CiAgICAgICAgICAgICByZXN1bHQuX3Rlc3RSdW5FbnRlcmVkID0gdG9wTGV2ZWwgPSBUcnVlCiAKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKKyAgICAgICAgZm9yIGluZGV4LCB0ZXN0IGluIGVudW1lcmF0ZShzZWxmKToKICAgICAgICAgICAgIGlmIHJlc3VsdC5zaG91bGRTdG9wOgogICAgICAgICAgICAgICAgIGJyZWFrCiAKQEAgLTEwNiw2ICsxMTgsOSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0ZXN0LmRlYnVnKCkKIAorICAgICAgICAgICAgaWYgc2VsZi5fY2xlYW51cDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVUZXN0QXRJbmRleChpbmRleCkKKwogICAgICAgICBpZiB0b3BMZXZlbDoKICAgICAgICAgICAgIHNlbGYuX3RlYXJEb3duUHJldmlvdXNDbGFzcyhOb25lLCByZXN1bHQpCiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVNb2R1bGVUZWFyRG93bihyZXN1bHQpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC90ZXN0L19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZDA1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC9fX21haW5fXy5weQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgorICAgICMgdG9wIGxldmVsIGRpcmVjdG9yeSBjYWNoZWQgb24gbG9hZGVyIGluc3RhbmNlCisgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgcGF0dGVybiA9IHBhdHRlcm4gb3IgInRlc3RfKi5weSIKKyAgICAjIFdlIGFyZSBpbnNpZGUgdW5pdHRlc3QudGVzdCwgc28gdGhlIHRvcC1sZXZlbCBpcyB0d28gbm90Y2hlcyB1cAorICAgIHRvcF9sZXZlbF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHRoaXNfZGlyKSkKKyAgICBwYWNrYWdlX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX2xldmVsX2Rpcj10b3BfbGV2ZWxfZGlyKQorICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCisgICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CmluZGV4IGRiZTRkZGMuLjAyZThmM2EgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUHJvYmxlbSBoYXNoaW5nICVzIGFuZCAlczogJXMiICUgKG9ial8xLCBvYmpfMiwgZSkpCiAKIAotY2xhc3MgTG9nZ2luZ1Jlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KToKK2NsYXNzIF9CYXNlTG9nZ2luZ1Jlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nKToKICAgICAgICAgc2VsZi5fZXZlbnRzID0gbG9nCiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgZGVmIHN0YXJ0VGVzdFJ1bihzZWxmKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RhcnRUZXN0UnVuJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RhcnRUZXN0UnVuKCkKKyAgICAgICAgc3VwZXIoKS5zdGFydFRlc3RSdW4oKQogCiAgICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdCcpCkBAIC02MCw3ICs2MCw3IEBACiAKICAgICBkZWYgc3RvcFRlc3RSdW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0UnVuJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RvcFRlc3RSdW4oKQorICAgICAgICBzdXBlcigpLnN0b3BUZXN0UnVuKCkKIAogICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRmFpbHVyZScpCkBAIC02OCw3ICs2OCw3IEBACiAKICAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1Y2Nlc3MnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRTdWNjZXNzKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZFN1Y2Nlc3MoKmFyZ3MpCiAKICAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFcnJvcicpCkBAIC03NiwxNSArNzYsMzkgQEAKIAogICAgIGRlZiBhZGRTa2lwKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU2tpcCcpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFNraXAoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkU2tpcCgqYXJncykKIAogICAgIGRlZiBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFeHBlY3RlZEZhaWx1cmUnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRFeHBlY3RlZEZhaWx1cmUoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkRXhwZWN0ZWRGYWlsdXJlKCphcmdzKQogCiAgICAgZGVmIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRVbmV4cGVjdGVkU3VjY2VzcygqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRVbmV4cGVjdGVkU3VjY2VzcygqYXJncykKKworCitjbGFzcyBMZWdhY3lMb2dnaW5nUmVzdWx0KF9CYXNlTG9nZ2luZ1Jlc3VsdCk6CisgICAgIiIiCisgICAgQSBsZWdhY3kgVGVzdFJlc3VsdCBpbXBsZW1lbnRhdGlvbiwgd2l0aG91dCBhbiBhZGRTdWJUZXN0IG1ldGhvZCwKKyAgICB3aGljaCByZWNvcmRzIGl0cyBtZXRob2QgY2FsbHMuCisgICAgIiIiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWRkU3ViVGVzdChzZWxmKToKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKworCitjbGFzcyBMb2dnaW5nUmVzdWx0KF9CYXNlTG9nZ2luZ1Jlc3VsdCk6CisgICAgIiIiCisgICAgQSBUZXN0UmVzdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHJlY29yZHMgaXRzIG1ldGhvZCBjYWxscy4KKyAgICAiIiIKKworICAgIGRlZiBhZGRTdWJUZXN0KHNlbGYsIHRlc3QsIHN1YnRlc3QsIGVycik6CisgICAgICAgIGlmIGVyciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3ViVGVzdFN1Y2Nlc3MnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3ViVGVzdEZhaWx1cmUnKQorICAgICAgICBzdXBlcigpLmFkZFN1YlRlc3QodGVzdCwgc3VidGVzdCwgZXJyKQogCiAKIGNsYXNzIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKaW5kZXggNzkzMWNhZC4uYWYwOGQ1YSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQpAQCAtMzYxLDMgKzM2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ14icmVnZXgiIGRvZXMgbm90IG1hdGNoICJmb28iJCcsICdeb29wcyQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeInJlZ2V4IiBkb2VzIG5vdCBtYXRjaCAiZm9vIiQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeInJlZ2V4IiBkb2VzIG5vdCBtYXRjaCAiZm9vIiA6IG9vcHMkJ10pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CmluZGV4IDc1NTMyZjQuLjBiZjFhMjIgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weQpAQCAtMjgyLDMgKzI4Miw3IEBACiAgICAgImlmIHRocmVhZHMgaGF2ZSBiZWVuIHVzZWQiKQogY2xhc3MgVGVzdEJyZWFrU2lnbmFsRGVmYXVsdChUZXN0QnJlYWspOgogICAgIGludF9oYW5kbGVyID0gc2lnbmFsLlNJR19ERkwKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CmluZGV4IGQxNzE0NTEuLjlhYTlmZDEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKQEAgLTEsOCArMSwxMCBAQAoraW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBkaWZmbGliCiBpbXBvcnQgcHByaW50CiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCB3ZWFrcmVmCiBpbXBvcnQgaW5zcGVjdApAQCAtMTMsOSArMTUsMTUgQEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIC5zdXBwb3J0IGltcG9ydCAoCi0gICAgVGVzdEVxdWFsaXR5LCBUZXN0SGFzaGluZywgTG9nZ2luZ1Jlc3VsdCwKKyAgICBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nLCBMb2dnaW5nUmVzdWx0LCBMZWdhY3lMb2dnaW5nUmVzdWx0LAogICAgIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuCiApCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3RkZXJyCisKKworbG9nX2ZvbyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKQorbG9nX2Zvb2JhciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28uYmFyJykKK2xvZ19xdXV4ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3F1dXgnKQogCiAKIGNsYXNzIFRlc3Qob2JqZWN0KToKQEAgLTI5Nyw2ICszMDUsOTggQEAKIAogICAgICAgICBGb28oJ3Rlc3QnKS5ydW4oKQogCisgICAgZGVmIF9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0cyhzZWxmLCByZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKToKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gWzEsIDIsIDNdOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiBbMiwgM106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoaj1qKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSAqIGogPT0gNjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZXN0JykKKyAgICAgICAgICAgICAgICAxIC8gMAorCisgICAgICAgICMgT3JkZXIgaXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgIyBpPTEgPT4gc3VidGVzdCBmYWlsdXJlCisgICAgICAgICMgaT0yLCBqPTIgPT4gc3VidGVzdCBzdWNjZXNzCisgICAgICAgICMgaT0yLCBqPTMgPT4gc3VidGVzdCBlcnJvcgorICAgICAgICAjIGk9Mywgaj0yID0+IHN1YnRlc3QgZXJyb3IKKyAgICAgICAgIyBpPTMsIGo9MyA9PiBzdWJ0ZXN0IHN1Y2Nlc3MKKyAgICAgICAgIyB0b3BsZXZlbCA9PiBlcnJvcgorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RGYWlsdXJlJywgJ2FkZFN1YlRlc3RTdWNjZXNzJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RGYWlsdXJlJywgJ2FkZFN1YlRlc3RGYWlsdXJlJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RTdWNjZXNzJywgJ2FkZEVycm9yJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX2xlZ2FjeShzZWxmKToKKyAgICAgICAgIyBXaXRoIGEgbGVnYWN5IHJlc3VsdCBvYmplY3QgKHdpdGhvdXQgYSBhZGRTdWJUZXN0IG1ldGhvZCksCisgICAgICAgICMgdGV4dCBleGVjdXRpb24gc3RvcHMgYWZ0ZXIgdGhlIGZpcnN0IHN1YnRlc3QgZmFpbHVyZS4KKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTGVnYWN5TG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRGYWlsdXJlJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIF9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHNlbGYsIHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpOgorICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBbMSwgMl06CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9aSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiBbMiwgM106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoaj1qKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgICMgVGhlIDYgc3VidGVzdCBzdWNjZXNzZXMgYXJlIGluZGl2aWR1YWxseSByZWNvcmRlZCwgaW4gYWRkaXRpb24KKyAgICAgICAgIyB0byB0aGUgd2hvbGUgdGVzdCBzdWNjZXNzLgorICAgICAgICBleHBlY3RlZCA9IChbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJ10KKyAgICAgICAgICAgICAgICAgICAgKyA2ICogWydhZGRTdWJUZXN0U3VjY2VzcyddCisgICAgICAgICAgICAgICAgICAgICsgWydhZGRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3MocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3NfbGVnYWN5KHNlbGYpOgorICAgICAgICAjIFdpdGggYSBsZWdhY3kgcmVzdWx0LCBvbmx5IHRoZSB3aG9sZSB0ZXN0IHN1Y2Nlc3MgaXMgcmVjb3JkZWQuCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExlZ2FjeUxvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3VjY2VzcycsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3MocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX2ZhaWxmYXN0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9MSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT0yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0RmFpbHVyZScsICdzdG9wVGVzdCddCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKwogICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgogICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCiAgICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCkBAIC03MjksMTggKzgyOSwxOCBAQAogCiAgICAgICAgICMgc2V0IGEgbG93ZXIgdGhyZXNob2xkIHZhbHVlIGFuZCBhZGQgYSBjbGVhbnVwIHRvIHJlc3RvcmUgaXQKICAgICAgICAgb2xkX3RocmVzaG9sZCA9IHNlbGYuX2RpZmZUaHJlc2hvbGQKLSAgICAgICAgc2VsZi5fZGlmZlRocmVzaG9sZCA9IDIqKjgKKyAgICAgICAgc2VsZi5fZGlmZlRocmVzaG9sZCA9IDIqKjUKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc2V0YXR0cihzZWxmLCAnX2RpZmZUaHJlc2hvbGQnLCBvbGRfdGhyZXNob2xkKSkKIAogICAgICAgICAjIHVuZGVyIHRoZSB0aHJlc2hvbGQ6IGRpZmYgbWFya2VyICheKSBpbiBlcnJvciBtZXNzYWdlCi0gICAgICAgIHMgPSAneCcgKiAoMioqNykKKyAgICAgICAgcyA9ICd4JyAqICgyKio0KQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ14nLCBzdHIoY20uZXhjZXB0aW9uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQogCiAgICAgICAgICMgb3ZlciB0aGUgdGhyZXNob2xkOiBkaWZmIG5vdCB1c2VkIGFuZCBtYXJrZXIgKF4pIG5vdCBpbiBlcnJvciBtZXNzYWdlCi0gICAgICAgIHMgPSAneCcgKiAoMioqOSkKKyAgICAgICAgcyA9ICd4JyAqICgyKio2KQogICAgICAgICAjIGlmIHRoZSBwYXRoIHRoYXQgdXNlcyBkaWZmbGliIGlzIHRha2VuLCBfdHJ1bmNhdGVNZXNzYWdlIHdpbGwgYmUKICAgICAgICAgIyBjYWxsZWQgLS0gcmVwbGFjZSBpdCB3aXRoIGV4cGxvZGluZ1RydW5jYXRpb24gdG8gdmVyaWZ5IHRoYXQgdGhpcwogICAgICAgICAjIGRvZXNuJ3QgaGFwcGVuCkBAIC03NTcsNiArODU3LDM3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICclciAhPSAlcicgJSAoczEsIHMyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQogCisgICAgZGVmIHRlc3RBc3NlcnRFcXVhbF9zaG9ydGVuKHNlbGYpOgorICAgICAgICAjIHNldCBhIGxvd2VyIHRocmVzaG9sZCB2YWx1ZSBhbmQgYWRkIGEgY2xlYW51cCB0byByZXN0b3JlIGl0CisgICAgICAgIG9sZF90aHJlc2hvbGQgPSBzZWxmLl9kaWZmVGhyZXNob2xkCisgICAgICAgIHNlbGYuX2RpZmZUaHJlc2hvbGQgPSAwCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNldGF0dHIoc2VsZiwgJ19kaWZmVGhyZXNob2xkJywgb2xkX3RocmVzaG9sZCkpCisKKyAgICAgICAgcyA9ICd4JyAqIDEwMAorICAgICAgICBzMSwgczIgPSBzICsgJ2EnLCBzICsgJ2InCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbMzUgY2hhcnNdJyArICd4JyAqIDYxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJXNhJyAhPSAnJXNiJyIgJSAoYywgYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKKworICAgICAgICBwID0gJ3knICogNTAKKyAgICAgICAgczEsIHMyID0gcyArICdhJyArIHAsIHMgKyAnYicgKyBwCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbODUgY2hhcnNdeHh4eHh4eHh4eHgnCisgICAgICAgICNwcmludCgpCisgICAgICAgICNwcmludChzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIiclc2ElcycgIT0gJyVzYiVzJyIgJSAoYywgcCwgYywgcCkpCisKKyAgICAgICAgcCA9ICd5JyAqIDEwMAorICAgICAgICBzMSwgczIgPSBzICsgJ2EnICsgcCwgcyArICdiJyArIHAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCisgICAgICAgIGMgPSAneHh4eFs5MSBjaGFyc114eHh4eCcKKyAgICAgICAgZCA9ICd5JyAqIDQwICsgJ1s1NiBjaGFyc115eXl5JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAiJyVzYSVzJyAhPSAnJXNiJXMnIiAlIChjLCBkLCBjLCBkKSkKKwogICAgIGRlZiB0ZXN0QXNzZXJ0Q291bnRFcXVhbChzZWxmKToKICAgICAgICAgYSA9IG9iamVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChbMSwgMiwgM10sIFszLCAyLCAxXSkKQEAgLTExNTksNiArMTI5MCw5NCBAQAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFJ1bnRpbWVXYXJuaW5nLCAibysiKToKICAgICAgICAgICAgICAgICAgICAgX3J1bnRpbWVfd2FybigiYmFyeiIpCiAKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiBhc3NlcnROb1N0ZGVycihzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRlcnIoKSBhcyBidWY6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5nZXR2YWx1ZSgpLCAiIikKKworICAgIGRlZiBhc3NlcnRMb2dSZWNvcmRzKHNlbGYsIHJlY29yZHMsIG1hdGNoZXMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWNvcmRzKSwgbGVuKG1hdGNoZXMpKQorICAgICAgICBmb3IgcmVjLCBtYXRjaCBpbiB6aXAocmVjb3JkcywgbWF0Y2hlcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVjLCBsb2dnaW5nLkxvZ1JlY29yZCkKKyAgICAgICAgICAgIGZvciBrLCB2IGluIG1hdGNoLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHJlYywgayksIHYpCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NEZWZhdWx0cyhzZWxmKToKKyAgICAgICAgIyBkZWZhdWx0czogcm9vdCBsb2dnZXIsIGxldmVsIElORk8KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvZ19mb28uaW5mbygiMSIpCisgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5kZWJ1ZygiMiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJJTkZPOmZvbzoxIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydExvZ1JlY29yZHMoY20ucmVjb3JkcywgW3snbmFtZSc6ICdmb28nfV0pCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NUd29NYXRjaGluZ01lc3NhZ2VzKHNlbGYpOgorICAgICAgICAjIFNhbWUsIGJ1dCB3aXRoIHR3byBtYXRjaGluZyBsb2cgbWVzc2FnZXMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvZ19mb28uaW5mbygiMSIpCisgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5kZWJ1ZygiMiIpCisgICAgICAgICAgICAgICAgbG9nX3F1dXgud2FybmluZygiMyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJJTkZPOmZvbzoxIiwgIldBUk5JTkc6cXV1eDozIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydExvZ1JlY29yZHMoY20ucmVjb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3snbmFtZSc6ICdmb28nfSwgeyduYW1lJzogJ3F1dXgnfV0pCisKKyAgICBkZWYgY2hlY2tBc3NlcnRMb2dzUGVyTGV2ZWwoc2VsZiwgbGV2ZWwpOgorICAgICAgICAjIENoZWNrIGxldmVsIGZpbHRlcmluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxldmVsPWxldmVsKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dfZm9vLndhcm5pbmcoIjEiKQorICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZXJyb3IoIjIiKQorICAgICAgICAgICAgICAgIGxvZ19xdXV4LmNyaXRpY2FsKCIzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIkVSUk9SOmZvby5iYXI6MiIsICJDUklUSUNBTDpxdXV4OjMiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeyduYW1lJzogJ2Zvby5iYXInfSwgeyduYW1lJzogJ3F1dXgnfV0pCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NQZXJMZXZlbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMZXZlbChsb2dnaW5nLkVSUk9SKQorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxldmVsKCdFUlJPUicpCisKKyAgICBkZWYgY2hlY2tBc3NlcnRMb2dzUGVyTG9nZ2VyKHNlbGYsIGxvZ2dlcik6CisgICAgICAgICMgQ2hlY2sgcGVyLWxvZ2dlciBmaXRlcmluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxldmVsPSdERUJVRycpIGFzIG91dGVyX2NtOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxvZ2dlciwgbGV2ZWw9J0RFQlVHJykgYXMgY206CisgICAgICAgICAgICAgICAgICAgIGxvZ19mb28uaW5mbygiMSIpCisgICAgICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZGVidWcoIjIiKQorICAgICAgICAgICAgICAgICAgICBsb2dfcXV1eC53YXJuaW5nKCIzIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJJTkZPOmZvbzoxIiwgIkRFQlVHOmZvby5iYXI6MiJdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3snbmFtZSc6ICdmb28nfSwgeyduYW1lJzogJ2Zvby5iYXInfV0pCisgICAgICAgICAgICAjIFRoZSBvdXRlciBjYXRjaGFsbCBjYXVnaHQgdGhlIHF1dXggbG9nCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dGVyX2NtLm91dHB1dCwgWyJXQVJOSU5HOnF1dXg6MyJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzUGVyTG9nZ2VyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxvZ2dlcihsb2dnaW5nLmdldExvZ2dlcignZm9vJykpCisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTG9nZ2VyKCdmb28nKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRmFpbHVyZU5vTG9ncyhzZWxmKToKKyAgICAgICAgIyBGYWlsdXJlIGR1ZSB0byBubyBsb2dzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0ZhaWx1cmVMZXZlbFRvb0hpZ2goc2VsZik6CisgICAgICAgICMgRmFpbHVyZSBkdWUgdG8gbGV2ZWwgdG9vIGhpZ2gKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobGV2ZWw9J1dBUk5JTkcnKToKKyAgICAgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0ZhaWx1cmVNaXNtYXRjaGluZ0xvZ2dlcihzZWxmKToKKyAgICAgICAgIyBGYWlsdXJlIGR1ZSB0byBtaXNtYXRjaGluZyBsb2dnZXIgKGFuZCB0aGUgbG9nZ2VkIG1lc3NhZ2UgaXMKKyAgICAgICAgIyBwYXNzZWQgdGhyb3VnaCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ3F1dXgnLCBsZXZlbD0nRVJST1InKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygnZm9vJyk6CisgICAgICAgICAgICAgICAgICAgIGxvZ19xdXV4LmVycm9yKCIxIikKKwogICAgIGRlZiB0ZXN0RGVwcmVjYXRlZE1ldGhvZE5hbWVzKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBkZXByZWNhdGVkIG1ldGhvZHMgcmFpc2UgYSBEZXByZWNhdGlvbldhcm5pbmcuIFNlZSAjOTQyNC4KQEAgLTEzMTMsMyArMTUzMiw3IEBACiAgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CiAgICAgICAgICAgICBkZWwgY2FzZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3cigpKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CmluZGV4IGNjYzdkYjIuLmQ0ZWZmNDAgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CkBAIC0xLDEyICsxLDEzIEBACiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIGltcG9ydCB1bml0dGVzdAogCiAKIGNsYXNzIFRlc3RhYmxlVGVzdFByb2dyYW0odW5pdHRlc3QuVGVzdFByb2dyYW0pOgotICAgIG1vZHVsZSA9ICdfX21haW5fXycKKyAgICBtb2R1bGUgPSBOb25lCiAgICAgZXhpdCA9IFRydWUKICAgICBkZWZhdWx0VGVzdCA9IGZhaWxmYXN0ID0gY2F0Y2hicmVhayA9IGJ1ZmZlciA9IE5vbmUKICAgICB2ZXJib3NpdHkgPSAxCkBAIC00Niw5ICs0Nyw5IEBACiAgICAgICAgIGRlZiByZXN0b3JlX2lzZGlyKCk6CiAgICAgICAgICAgICBvcy5wYXRoLmlzZGlyID0gb3JpZ2luYWxfaXNkaXIKIAotICAgICAgICBwYXRoX2xpc3RzID0gW1sndGVzdDEucHknLCAndGVzdDIucHknLCAnbm90X2FfdGVzdC5weScsICd0ZXN0X2RpcicsCisgICAgICAgIHBhdGhfbGlzdHMgPSBbWyd0ZXN0Mi5weScsICd0ZXN0MS5weScsICdub3RfYV90ZXN0LnB5JywgJ3Rlc3RfZGlyJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QuZm9vJywgJ3Rlc3Qtbm90LWEtbW9kdWxlLnB5JywgJ2Fub3RoZXJfZGlyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgWyd0ZXN0My5weScsICd0ZXN0NC5weScsIF1dCisgICAgICAgICAgICAgICAgICAgICAgWyd0ZXN0NC5weScsICd0ZXN0My5weScsIF1dCiAgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgcGF0aDogcGF0aF9saXN0cy5wb3AoMCkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfbGlzdGRpcikKIApAQCAtNzAsNiArNzEsOCBAQAogICAgICAgICBsb2FkZXIuX3RvcF9sZXZlbF9kaXIgPSB0b3BfbGV2ZWwKICAgICAgICAgc3VpdGUgPSBsaXN0KGxvYWRlci5fZmluZF90ZXN0cyh0b3BfbGV2ZWwsICd0ZXN0Ki5weScpKQogCisgICAgICAgICMgVGhlIHRlc3Qgc3VpdGVzIGZvdW5kIHNob3VsZCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgZm9yIHJlbGlhYmxlCisgICAgICAgICMgZXhlY3V0aW9uIG9yZGVyLgogICAgICAgICBleHBlY3RlZCA9IFtuYW1lICsgJyBtb2R1bGUgdGVzdHMnIGZvciBuYW1lIGluCiAgICAgICAgICAgICAgICAgICAgICgndGVzdDEnLCAndGVzdDInKV0KICAgICAgICAgZXhwZWN0ZWQuZXh0ZW5kKFsoJ3Rlc3RfZGlyLiVzJyAlIG5hbWUpICsgJyBtb2R1bGUgdGVzdHMnIGZvciBuYW1lIGluCkBAIC0xMzIsNiArMTM1LDcgQEAKICAgICAgICAgIyBhbmQgZGlyZWN0bHkgZnJvbSB0aGUgdGVzdF9kaXJlY3RvcnkyIHBhY2thZ2UKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2xvYWRfdGVzdHMnLCAndGVzdF9kaXJlY3RvcnkyJyArICcgbW9kdWxlIHRlc3RzJ10pCisgICAgICAgICMgVGhlIHRlc3QgbW9kdWxlIHBhdGhzIHNob3VsZCBiZSBzb3J0ZWQgZm9yIHJlbGlhYmxlIGV4ZWN1dGlvbiBvcmRlcgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5wYXRocywgWyd0ZXN0X2RpcmVjdG9yeScsICd0ZXN0X2RpcmVjdG9yeTInXSkKIAogICAgICAgICAjIGxvYWRfdGVzdHMgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZSB3aXRoIGxvYWRlciwgdGVzdHMgYW5kIHBhdHRlcm4KQEAgLTE4NCwxMSArMTg4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZmluZF90ZXN0c19hcmdzLCBbKHN0YXJ0X2RpciwgJ3BhdHRlcm4nKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4odG9wX2xldmVsX2Rpciwgc3lzLnBhdGgpCiAKLSAgICBkZWYgdGVzdF9kaXNjb3Zlcl93aXRoX21vZHVsZXNfdGhhdF9mYWlsX3RvX2ltcG9ydChzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KKyAgICBkZWYgc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKHNlbGYsIGZha2VmaWxlKToKICAgICAgICAgbGlzdGRpciA9IG9zLmxpc3RkaXIKLSAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBfOiBbJ3Rlc3RfdGhpc19kb2VzX25vdF9leGlzdC5weSddCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogW2Zha2VmaWxlXQogICAgICAgICBpc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQogICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBfOiBUcnVlCiAgICAgICAgIG9yaWdfc3lzX3BhdGggPSBzeXMucGF0aFs6XQpAQCAtMTk4LDYgKzIwMCwxMSBAQAogICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlKQogCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHNlbGYuc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKCd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknKQorCiAgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCcuJykKICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5nZXRjd2QoKSwgc3lzLnBhdGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKQEAgLTIwNiw2MiArMjEzLDc0IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgdGVzdC50ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QoKQogCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVfdGhhdF9yYWlzZXNfU2tpcFRlc3Rfb25faW1wb3J0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBkZWYgX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NraXBwZXJvbycpCisgICAgICAgIGxvYWRlci5fZ2V0X21vZHVsZV9mcm9tX25hbWUgPSBfZ2V0X21vZHVsZV9mcm9tX25hbWUKKworICAgICAgICBzZWxmLnNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cygndGVzdF9za2lwX2R1bW15LnB5JykKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAxKQorCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX3BhcnNlQXJncyhzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQogCiAgICAgICAgIGFyZ3MgPSBbXQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgYXJncy5leHRlbmQoYXJndikKLSAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5CisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGFyZ3MuYXBwZW5kCiAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJ2Rpc2NvdmVyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1tdXSkKIAorICAgICAgICBhcmdzWzpdID0gW10KICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnZGlzY292ZXInLCAnZm9vJywgJ2JhciddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnZm9vJywgJ2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbJ2ZvbycsICdiYXInXV0pCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZGlzY292ZXJfYnlfZGVmYXVsdChzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLm1vZHVsZSA9IE5vbmUKIAotICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCi0gICAgICAgIGRlZiBkb19kaXNjb3ZlcnkoYXJndik6Ci0gICAgICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJndiwgW10pCi0gICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGRvX2Rpc2NvdmVyeQorICAgICAgICBhcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5idWZmZXIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uY2F0Y2hicmVhaywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5mYWlsZmFzdCwgRmFsc2UpCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZGlzY292ZXJfYnlfZGVmYXVsdF93aXRoX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKLSAgICAgICAgcHJvZ3JhbS5tb2R1bGUgPSBOb25lCiAKLSAgICAgICAgYXJncyA9IFsnc29tZXRoaW5nJywgJy12JywgJy1iJywgJy12JywgJy1jJywgJy1mJ10KLSAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3YsIGFyZ3NbMTpdKQotICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKLSAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorICAgICAgICBhcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnLXYnLCAnLWInLCAnLXYnLCAnLWMnLCAnLWYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbW11dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAyKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uYnVmZmVyLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uY2F0Y2hicmVhaywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmZhaWxmYXN0LCBUcnVlKQogCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZG9fZGlzY292ZXJ5X3Rvb19tYW55X2FyZ3VtZW50cyhzZWxmKToKLSAgICAgICAgY2xhc3MgU3RvcChFeGNlcHRpb24pOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBkZWYgdXNhZ2VFeGl0KCk6Ci0gICAgICAgICAgICByYWlzZSBTdG9wCi0KICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLnVzYWdlRXhpdCA9IHVzYWdlRXhpdAogICAgICAgICBwcm9ncmFtLnRlc3RMb2FkZXIgPSBOb25lCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVyciwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgogICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCiAgICAgICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKDIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndXNhZ2U6Jywgc3RkZXJyLmdldHZhbHVlKCkpCiAKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfdXNlc19kZWZhdWx0X2xvYWRlcihzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9pbml0QXJnUGFyc2VycygpCiAKICAgICAgICAgY2xhc3MgTG9hZGVyKG9iamVjdCk6CiAgICAgICAgICAgICBhcmdzID0gW10KZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQppbmRleCA5Y2U1ZWUzLi5kN2ZlMDdhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CkBAIC0xNDIsMyArMTQyLDcgQEAKICAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lLCBkZXNjcmlwdGlvbj1kZXNjKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5zaG9ydERlc2NyaXB0aW9uKCksICJ0aGlzIHRlc3RzIGZvbyIpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKaW5kZXggZjFmOGVjZC4uYjE3ODJhMiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKQEAgLTEzMDYsMyArMTMwNiw3IEBACiAgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fZGVmYXVsdF92YWx1ZShzZWxmKToKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2FkZXIuc3VpdGVDbGFzcyBpcyB1bml0dGVzdC5UZXN0U3VpdGUpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQppbmRleCA4YTRiM2ZhLi4zMjk0Mjk4IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CkBAIC0yLDYgKzIsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKIApAQCAtNjQsNiArNjUsNDEgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3MoCiAgICAgICAgICAgICAgICAgW3NlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RfVGVzdFByb2dyYW0uRm9vQmFyKV0pCiAKKyAgICAgICAgZGVmIGxvYWRUZXN0c0Zyb21OYW1lcyhzZWxmLCBuYW1lcywgbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3MoCisgICAgICAgICAgICAgICAgW3NlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RfVGVzdFByb2dyYW0uRm9vQmFyKV0pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0VGVzdF93aXRoX3N0cmluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgRmFrZVJ1bm5lcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBvbGRfYXJndiA9IHN5cy5hcmd2CisgICAgICAgIHN5cy5hcmd2ID0gWydmYWtldGVzdCddCisgICAgICAgIHJ1bm5lciA9IEZha2VSdW5uZXIoKQorICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QuVGVzdFByb2dyYW0odGVzdFJ1bm5lcj1ydW5uZXIsIGV4aXQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VGVzdD0ndW5pdHRlc3QudGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisgICAgICAgIHN5cy5hcmd2ID0gb2xkX2FyZ3YKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VuaXR0ZXN0LnRlc3QnLCksIHByb2dyYW0udGVzdE5hbWVzKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdFRlc3Rfd2l0aF9pdGVyYWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgRmFrZVJ1bm5lcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBvbGRfYXJndiA9IHN5cy5hcmd2CisgICAgICAgIHN5cy5hcmd2ID0gWydmYWtldGVzdCddCisgICAgICAgIHJ1bm5lciA9IEZha2VSdW5uZXIoKQorICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QuVGVzdFByb2dyYW0oCisgICAgICAgICAgICB0ZXN0UnVubmVyPXJ1bm5lciwgZXhpdD1GYWxzZSwKKyAgICAgICAgICAgIGRlZmF1bHRUZXN0PVsndW5pdHRlc3QudGVzdCcsICd1bml0dGVzdC50ZXN0MiddLAorICAgICAgICAgICAgdGVzdExvYWRlcj1zZWxmLkZvb0JhckxvYWRlcigpKQorICAgICAgICBzeXMuYXJndiA9IG9sZF9hcmd2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyd1bml0dGVzdC50ZXN0JywgJ3VuaXR0ZXN0LnRlc3QyJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGVzdE5hbWVzKQogCiAgICAgZGVmIHRlc3RfTm9uRXhpdChzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0Lm1haW4oZXhpdD1GYWxzZSwKQEAgLTE1MSwyMCArMTg3LDM4IEBACiAgICAgICAgICAgICBpZiBhdHRyID09ICdjYXRjaCcgYW5kIG5vdCBoYXNJbnN0YWxsSGFuZGxlcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogCisgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIE5vbmUpCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIEZhbHNlKQorCisgICAgICAgICAgICBmYWxzZSA9IFtdCisgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIGZhbHNlKQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBmYWxzZSkKKworICAgICAgICAgICAgdHJ1ZSA9IFs0Ml0KKyAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgdHJ1ZSkKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgdHJ1ZSkKKwogICAgICAgICAgICAgc2hvcnRfb3B0ID0gJy0lcycgJSBhcmdbMF0KICAgICAgICAgICAgIGxvbmdfb3B0ID0gJy0tJXMnICUgYXJnCiAgICAgICAgICAgICBmb3Igb3B0IGluIHNob3J0X29wdCwgbG9uZ19vcHQ6CiAgICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBOb25lKQotCiAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIocHJvZ3JhbSwgYXR0cikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBUcnVlKQogCi0gICAgICAgICAgICBmb3Igb3B0IGluIHNob3J0X29wdCwgbG9uZ19vcHQ6Ci0gICAgICAgICAgICAgICAgbm90X25vbmUgPSBvYmplY3QoKQotICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgbm90X25vbmUpCisgICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBGYWxzZSkKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyLCBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzLCAoMiwpKQogCi0gICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBub3Rfbm9uZSkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIFRydWUpCisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVyciwgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKDIsKSkKIAogICAgIGRlZiB0ZXN0V2FybmluZyhzZWxmKToKICAgICAgICAgIiIiVGVzdCB0aGUgd2FybmluZ3MgYXJndW1lbnQiIiIKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkKaW5kZXggMWM1OGU2MS4uNmRkOWJiMCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkKQEAgLTIyNyw2ICsyMjcsNDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RfY2FzZSBpcyB0ZXN0KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZm9ybWF0dGVkX2V4Yywgc3RyKQogCisgICAgZGVmIHRlc3RfYWRkU3ViVGVzdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgc3VidGVzdAorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xKToKKyAgICAgICAgICAgICAgICAgICAgc3VidGVzdCA9IHNlbGYuX3N1YnRlc3QKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvX3R1cGxlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgIyBSZWdpc3RlciBhbiBlcnJvciBieSBoYW5kICh0byBjaGVjayB0aGUgQVBJKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBleGNfaW5mb190dXBsZSkKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgdHJpZ2dlciBhIGZhaWx1cmUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzb21lIHJlY29nbml6YWJsZSBmYWlsdXJlIikKKworICAgICAgICBzdWJ0ZXN0ID0gTm9uZQorICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXN0X2Nhc2UsIHN1YnRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlplcm9EaXZpc2lvbkVycm9yIiwgZm9ybWF0dGVkX2V4YykKKyAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmZhaWx1cmVzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCBzdWJ0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJzb21lIHJlY29nbml6YWJsZSBmYWlsdXJlIiwgZm9ybWF0dGVkX2V4YykKKwogICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgogICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtMjM0LDYgKzI2OCwzNyBAQAogICAgICAgICAgICAgICAgICd0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nICgnICsgX19uYW1lX18gKwogICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KScpCiAKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xLCBiYXI9Mik6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCisgICAgICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKScpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdzb21lIG1lc3NhZ2UnKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKKyAgICAgICAgICAgICAgICAgICAgJy5UZXN0X1Rlc3RSZXN1bHQpIFtzb21lIG1lc3NhZ2VdJykKKworICAgIGRlZiB0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZ0FuZFBhcmFtcyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZ0FuZFBhcmFtcyAnCisgICAgICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpICg8c3VidGVzdD4pJykKKworICAgIGRlZiB0ZXN0R2V0TmVzdGVkU3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYmFyPTIpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0TmVzdGVkU3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKScpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcoc2VsZik6CkBAIC0yNDcsNiArMzEyLDE4IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLiIiIgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyAnCisgICAgICAgICAgICAgICAgJygnICsgX19uYW1lX18gKyAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSlcbicKKyAgICAgICAgICAgICAgICAnVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4nKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nKHNlbGYpOgogICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyIGRvY3N0cmluZy4KICAgICAgICAgVGhlIHNlY29uZCBsaW5lIG9mIHRoZSBkb2NzdHJpbmcuCkBAIC0yNTksNiArMzM2LDIxIEBACiAgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJwogICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgZG9jc3RyaW5nLgorICAgICAgICBUaGUgc2Vjb25kIGxpbmUgb2YgdGhlIGRvY3N0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xLCBiYXI9Mik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICgndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpIChiYXI9MiwgZm9vPTEpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJworICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCisKICAgICBkZWYgdGVzdFN0YWNrRnJhbWVUcmltbWluZyhzZWxmKToKICAgICAgICAgY2xhc3MgRnJhbWUob2JqZWN0KToKICAgICAgICAgICAgIGNsYXNzIHRiX2ZyYW1lKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CmluZGV4IGUyMmU2YmMuLmVmMWMxYWY5IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQpAQCAtNSw2ICs1LDcgQEAKIGltcG9ydCBzdWJwcm9jZXNzCiAKIGltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdC5jYXNlIGltcG9ydCBfT3V0Y29tZQogCiBmcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bgogCkBAIC00MiwxMiArNDMsOCBAQAogICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBjbGFzcyBNb2NrT3V0Y29tZShvYmplY3QpOgotICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKLSAgICAgICAgICAgIGVycm9ycyA9IFtdCi0KICAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQotICAgICAgICB0ZXN0Ll9vdXRjb21lRm9yRG9DbGVhbnVwcyA9IE1vY2tPdXRjb21lCisgICAgICAgIG91dGNvbWUgPSB0ZXN0Ll9vdXRjb21lID0gX091dGNvbWUoKQogCiAgICAgICAgIGV4YzEgPSBFeGNlcHRpb24oJ2ZvbycpCiAgICAgICAgIGV4YzIgPSBFeGNlcHRpb24oJ2JhcicpCkBAIC02MSw5ICs1OCwxMCBAQAogICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0LmRvQ2xlYW51cHMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShNb2NrT3V0Y29tZS5zdWNjZXNzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dGNvbWUuc3VjY2VzcykKIAotICAgICAgICAoVHlwZTEsIGluc3RhbmNlMSwgXyksIChUeXBlMiwgaW5zdGFuY2UyLCBfKSA9IHJldmVyc2VkKE1vY2tPdXRjb21lLmVycm9ycykKKyAgICAgICAgKChfLCAoVHlwZTEsIGluc3RhbmNlMSwgXykpLAorICAgICAgICAgKF8sIChUeXBlMiwgaW5zdGFuY2UyLCBfKSkpID0gcmV2ZXJzZWQob3V0Y29tZS5lcnJvcnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKFR5cGUxLCBpbnN0YW5jZTEpLCAoRXhjZXB0aW9uLCBleGMxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoVHlwZTIsIGluc3RhbmNlMiksIChFeGNlcHRpb24sIGV4YzIpKQogCkBAIC0zNDEsMyArMzM5LDcgQEAKICAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKICAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoZikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5zdHJlYW0uc3RyZWFtIGlzIGYpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKaW5kZXggYjhkNWFhNC4uMzkyZjk1ZSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKQEAgLTQ5NCwxNCArNDk0LDEzIEBACiAgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCiAgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQogCi0gICAgICAgIF9zdWl0ZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIHN1aXRlLmFkZFRlc3QoX3N1aXRlKQotCiAgICAgICAgIG1lc3NhZ2VzID0gKCdzZXRVcE1vZHVsZScsICd0ZWFyRG93bk1vZHVsZScsICdzZXRVcENsYXNzJywgJ3RlYXJEb3duQ2xhc3MnLCAndGVzdF9zb21ldGhpbmcnKQogICAgICAgICBmb3IgcGhhc2UsIG1zZyBpbiBlbnVtZXJhdGUobWVzc2FnZXMpOgorICAgICAgICAgICAgX3N1aXRlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3QpCisgICAgICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbX3N1aXRlXSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb24sIG1zZyk6CiAgICAgICAgICAgICAgICAgc3VpdGUuZGVidWcoKQogCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weQppbmRleCA5NTIyNDBlLi5lMThjYWE0IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKQEAgLTI5LDYgKzI5LDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWQsIFsodGVzdCwgInRlc3RpbmciKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQogCisgICAgZGVmIHRlc3Rfc2tpcHBpbmdfc3VidGVzdHMoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9za2lwX21lKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGE9MSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGI9Mik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIDEiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIDIiKQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAgMyIpCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X3NraXBfbWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbJ3N0YXJ0VGVzdCcsICdhZGRTa2lwJywgJ2FkZFNraXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRTa2lwJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMykKKyAgICAgICAgc3VidGVzdCwgbXNnID0gcmVzdWx0LnNraXBwZWRbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csICJza2lwIDEiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VidGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3VidGVzdCwgdGVzdCkKKyAgICAgICAgc3VidGVzdCwgbXNnID0gcmVzdWx0LnNraXBwZWRbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csICJza2lwIDIiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VidGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3VidGVzdCwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZFsyXSwgKHRlc3QsICJza2lwIDMiKSkKKwogICAgIGRlZiB0ZXN0X3NraXBwaW5nX2RlY29yYXRvcnMoc2VsZik6CiAgICAgICAgIG9wX3RhYmxlID0gKCh1bml0dGVzdC5za2lwVW5sZXNzLCBGYWxzZSwgVHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICh1bml0dGVzdC5za2lwSWYsIFRydWUsIEZhbHNlKSkKQEAgLTk1LDYgKzEyMCwzMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKIAorICAgIGRlZiB0ZXN0X2V4cGVjdGVkX2ZhaWx1cmVfc3VidGVzdHMoc2VsZik6CisgICAgICAgICMgQSBmYWlsdXJlIGluIGFueSBzdWJ0ZXN0IGNvdW50cyBhcyB0aGUgZXhwZWN0ZWQgZmFpbHVyZSBvZiB0aGUKKyAgICAgICAgIyB3aG9sZSB0ZXN0LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgc3VjY2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaGVscCBtZSEiKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgZG9lc24ndCBnZXQgZXhlY3V0ZWQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgY29tZSBoZXJlIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfZGllIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsICdhZGRTdWJUZXN0U3VjY2VzcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKwogICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2VzcyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKQEAgLTExMCw2ICsxNjAsMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudW5leHBlY3RlZFN1Y2Nlc3NlcywgW3Rlc3RdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKIAorICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2Vzc19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgIyBTdWNjZXNzIGluIGFsbCBzdWJ0ZXN0cyBjb3VudHMgYXMgdGhlIHVuZXhwZWN0ZWQgc3VjY2VzcyBvZgorICAgICAgICAjIHRoZSB3aG9sZSB0ZXN0LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgc3VjY2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgU28gZG9lcyB0aGlzIG9uZQorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X2RpZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdFN1Y2Nlc3MnLCAnYWRkU3ViVGVzdFN1Y2Nlc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuZmFpbHVyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsIFt0ZXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKICAgICBkZWYgdGVzdF9za2lwX2RvZXNudF9ydW5fc2V0dXAoc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICB3YXNTZXRVcCA9IEZhbHNlCkBAIC0xNDcsMyArMjIxLDcgQEAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQogICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQppbmRleCAyZGI5NzhkLi41NGNlYzZlIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKQEAgLTEsNiArMSw4IEBACiBpbXBvcnQgdW5pdHRlc3QKIAoraW1wb3J0IGdjCiBpbXBvcnQgc3lzCitpbXBvcnQgd2Vha3JlZgogZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgVGVzdEVxdWFsaXR5CiAKIApAQCAtMzAwLDcgKzMwMiw1NCBAQAogICAgICAgICAjIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCB0aGlzIGxpbmUgd2lsbCBub3QgY3Jhc2gKICAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKIAorICAgIGRlZiB0ZXN0X3JlbW92ZV90ZXN0X2F0X2luZGV4KHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKIAorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc3VpdGUuX3Rlc3RzID0gWzEsIDIsIDNdCisgICAgICAgIHN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleCgxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIE5vbmUsIDNdLCBzdWl0ZS5fdGVzdHMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfdGVzdF9hdF9pbmRleF9ub3RfaW5kZXhhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLl90ZXN0cyA9IE5vbmUKKworICAgICAgICAjIGlmIF9yZW1vdmVBdEluZGV4IHJhaXNlcyBmb3Igbm9uaXRlcmFibGVzIHRoaXMgbmV4dCBsaW5lIHdpbGwgYnJlYWsKKyAgICAgICAgc3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4KDIpCisKKyAgICBkZWYgYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bihzZWxmLCBUZXN0U3VpdGVDbGFzcyk6CisgICAgICAgIGlmIG5vdCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlN1aXRlIGNsZWFudXAgaXMgZGlzYWJsZWQiKQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0X25vdGhpbmcnKQorICAgICAgICB3cmVmID0gd2Vha3JlZi5yZWYodGVzdCkKKworICAgICAgICBzdWl0ZSA9IFRlc3RTdWl0ZUNsYXNzKFt3cmVmKCldKQorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorCisgICAgICAgIGRlbCB0ZXN0CisKKyAgICAgICAgIyBmb3IgdGhlIGJlbmVmaXQgb2Ygbm9uLXJlZmVyZW5jZSBjb3VudGluZyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIFtOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3JlZigpKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX0Jhc2VUZXN0U3VpdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bih1bml0dGVzdC5CYXNlVGVzdFN1aXRlKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSkKIAogICAgIGRlZiB0ZXN0X2Jhc2V0ZXN0c3VpdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzYzLDYgKzQxMiw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Ll90ZXN0UnVuRW50ZXJlZCkKIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzYzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgorICAgICMgdG9wIGxldmVsIGRpcmVjdG9yeSBjYWNoZWQgb24gbG9hZGVyIGluc3RhbmNlCisgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgcGF0dGVybiA9IHBhdHRlcm4gb3IgInRlc3QqLnB5IgorICAgICMgV2UgYXJlIGluc2lkZSB1bml0dGVzdC50ZXN0LnRlc3Rtb2NrLCBzbyB0aGUgdG9wLWxldmVsIGlzIHRocmVlIG5vdGNoZXMgdXAKKyAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUodGhpc19kaXIpKSkKKyAgICBwYWNrYWdlX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX2xldmVsX2Rpcj10b3BfbGV2ZWxfZGlyKQorICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCisgICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weQppbmRleCA3YjJkZDAwLi41MzkwYTRlIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5CkBAIC0xNDUsMyArMTQ1LDcgQEAKICAgICAgICAgbW9jay53aWJibGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jay53aWJibGUsICdzb21lJywgICdhcmdzJykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQppbmRleCA4YmZiMjkzLi44YjJlOTZkIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQpAQCAtMzM3LDkgKzMzNywxMCBAQAogCiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgZm9yIHNwZWMgaW4gKFNvbWVDbGFzcywgU29tZUNsYXNzKCkpOgotICAgICAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhzcGVjKQotICAgICAgICAgICAgc2VsZi5fY2hlY2tfc29tZWNsYXNzX21vY2sobW9jaykKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhTb21lQ2xhc3MpCisgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoU29tZUNsYXNzKCkpCisgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCiAKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9hdXRvc3BlY19yZXR1cm5fdmFsdWUoc2VsZik6CkBAIC01NzYsMTAgKzU3NywxMCBAQAogCiAgICAgZGVmIHRlc3Rfc3BlY19pbmhlcml0YW5jZV9mb3JfY2xhc3NlcyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgYShzZWxmKToKKyAgICAgICAgICAgIGRlZiBhKHNlbGYsIHgpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGNsYXNzIEJhcihvYmplY3QpOgotICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYsIHkpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgY2xhc3NfbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhGb28pCkBAIC01ODcsMjYgKzU4OCwzMCBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm90KGNsYXNzX21vY2ssIGNsYXNzX21vY2soKSkKIAogICAgICAgICBmb3IgdGhpc19tb2NrIGluIGNsYXNzX21vY2ssIGNsYXNzX21vY2soKToKLSAgICAgICAgICAgIHRoaXNfbW9jay5hKCkKLSAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRoaXNfbW9jay5hLCAnZm9vJykKKyAgICAgICAgICAgIHRoaXNfbW9jay5hKHg9NSkKKyAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCh4PTUpCisgICAgICAgICAgICB0aGlzX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGhpc19tb2NrLmEsICdmb28nLCAnYmFyJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCB0aGlzX21vY2ssICdiJykKIAogICAgICAgICBpbnN0YW5jZV9tb2NrID0gY3JlYXRlX2F1dG9zcGVjKEZvbygpKQotICAgICAgICBpbnN0YW5jZV9tb2NrLmEoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrLmEsICdmb28nKQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEoNSkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCg1KQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKHg9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrLmEsICdmb28nLCAnYmFyJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIGluc3RhbmNlX21vY2ssICdiJykKIAogICAgICAgICAjIFRoZSByZXR1cm4gdmFsdWUgaXNuJ3QgaXNuJ3QgY2FsbGFibGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrKQogCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoeT02KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgaW5zdGFuY2VfbW9jay5CYXIsICdnJykKIAotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZi5hc3NlcnRfY2FsbGVkX3dpdGgoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mLmFzc2VydF9jYWxsZWRfd2l0aCh5PTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBpbnN0YW5jZV9tb2NrLkJhcigpLCAnZycpCiAKIApAQCAtNjYzLDEyICs2NjgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQogICAgICAgICBtb2NrKDEsIDIpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIGI9MikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIpCiAKICAgICAgICAgZi5mID0gZgogICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jay5mKQogICAgICAgICBtb2NrLmYoMywgNCkKICAgICAgICAgbW9jay5mLmFzc2VydF9jYWxsZWRfd2l0aCgzLCA0KQorICAgICAgICBtb2NrLmYuYXNzZXJ0X2NhbGxlZF93aXRoKGE9MywgYj00KQogCiAKICAgICBkZWYgdGVzdF9za2lwX2F0dHJpYnV0ZWVycm9ycyhzZWxmKToKQEAgLTcwNCw5ICs3MTIsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQogICAgICAgICBtb2NrKDEpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSkKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLCAyKQogCiAgICAgICAgIG1vY2soNCwgNSkKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoNCwgNSkKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT00LCBiPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwgYT01LCBiPTQpCiAKIAogICAgIGRlZiB0ZXN0X2NsYXNzX3dpdGhfbm9faW5pdChzZWxmKToKQEAgLTcxOSwyNCArNzMxLDI3IEBACiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfY2FsbGFibGUoc2VsZik6CiAgICAgICAgIGNsYXNzIENhbGxhYmxlKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGEpOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKENhbGxhYmxlKQotICAgICAgICBtb2NrKCkKLSAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCisgICAgICAgIG1vY2soMSwgMikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxLCAyKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHg9MSwgeT0yKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2ssICdhJykKIAotICAgICAgICBpbnN0YW5jZSA9IG1vY2soKQorICAgICAgICBpbnN0YW5jZSA9IG1vY2soMSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZSkKICAgICAgICAgaW5zdGFuY2UoYT0nYScpCisgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCdhJykKICAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0nYScpCiAgICAgICAgIGluc3RhbmNlKCdhJykKICAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF93aXRoKCdhJykKKyAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF93aXRoKGE9J2EnKQogCi0gICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoQ2FsbGFibGUoKSkKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhDYWxsYWJsZSgxLCAyKSkKICAgICAgICAgbW9jayhhPSdhJykKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPSdhJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQpAQCAtNzc5LDcgKzc5NCwxMSBAQAogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBhID0gY3JlYXRlX2F1dG9zcGVjKEZvbykKKyAgICAgICAgYS5mKDEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGY9MTApCiAgICAgICAgIGEuZihzZWxmPTEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQogICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGY9MTApCiAKIApkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weQppbmRleCAzZDA3NzZjLi44OTg5ZDliIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weQpAQCAtMjUsNiArMjUsMTggQEAKICAgICBfX25leHRfXyA9IG5leHQKIAogCitjbGFzcyBTb21ldGhpbmcob2JqZWN0KToKKyAgICBkZWYgbWV0aChzZWxmLCBhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY21ldGgoY2xzLCBhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNtZXRoKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKwogCiBjbGFzcyBNb2NrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTI3Myw2ICsyODUsNDMgQEAKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMywgYT0nZmlzaCcsIGI9J25vdGhpbmcnKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKyAgICAgICAgIyBFeHBlY3RlZCBjYWxsIGRvZXNuJ3QgbWF0Y2ggdGhlIHNwZWMncyBzaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgY206CisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfd2l0aF9tZXRob2Rfc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIF9jaGVjayhtb2NrKToKKyAgICAgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzKQorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nKCkubWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nLmNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5jbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nLnNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5zbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisKKwogICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfb25jZV93aXRoKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCiAgICAgICAgIG1vY2soKQpAQCAtMjk3LDYgKzM0NiwyOSBAQAogICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfb25jZV93aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPTEsIGI9MiwgYz0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisgICAgICAgICMgRXhwZWN0ZWQgY2FsbCBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisgICAgICAgICMgTW9jayBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgPT4gYWx3YXlzIGZhaWxzCisgICAgICAgIG1vY2soNCwgNSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICA0LCA1LCA2KQorCisKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfYWNjZXNzX3JldHVybnNfbW9ja3Moc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgc29tZXRoaW5nID0gbW9jay5zb21ldGhpbmcKQEAgLTk5NSw2ICsxMDY3LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9oYXNfY2FsbHNfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrKDQsIDUsIGM9NiwgZD03KQorICAgICAgICBtb2NrKDEwLCAxMSwgYz0xMikKKyAgICAgICAgY2FsbHMgPSBbCisgICAgICAgICAgICAoJycsICgxLCAyLCAzKSwge30pLAorICAgICAgICAgICAgKCcnLCAoNCwgNSwgNiksIHsnZCc6IDd9KSwKKyAgICAgICAgICAgICgoMTAsIDExLCAxMiksIHt9KSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMsIGFueV9vcmRlcj1UcnVlKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgIyBSZXZlcnNlZCBvcmRlcgorICAgICAgICBjYWxscyA9IGxpc3QocmV2ZXJzZWQoY2FsbHMpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscykKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0sIGFueV9vcmRlcj1UcnVlKQorCisKICAgICBkZWYgdGVzdF9hc3NlcnRfYW55X2NhbGwoc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgbW9jaygxLCAyKQpAQCAtMTAyMSw2ICsxMTI2LDI2IEBACiAgICAgICAgICkKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2FueV9jYWxsX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jayg0LCA1LCBjPTYsIGQ9NykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoNCwgNSwgNiwgNykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoYT00LCBiPTUsIGM9NiwgZD03KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfYW55X2NhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorICAgICAgICAjIEV4cGVjdGVkIGNhbGwgZG9lc24ndCBtYXRjaCB0aGUgc3BlYydzIHNpZ25hdHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKGU9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbi5fX2NhdXNlX18sIFR5cGVFcnJvcikKKworCiAgICAgZGVmIHRlc3RfbW9ja19jYWxsc19jcmVhdGVfYXV0b3NwZWMoc2VsZik6CiAgICAgICAgIGRlZiBmKGEsIGIpOgogICAgICAgICAgICAgcGFzcwpAQCAtMTI3NCw2ICsxMzk5LDUgQEAKICAgICAgICAgICAgIG1vY2suZm9vCiAKIAotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5CmluZGV4IGMxMDkxYjQuLmMxYmMzNGYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkKQEAgLTE3ODAsNiArMTc4MCw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3MucGF0aCwgcGF0aCkKIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0d2l0aC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CmluZGV4IDBhMGNmYWQuLmY1NGUwNTEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CkBAIC0xNzIsNSArMTcyLDg4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKIAogCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZGF0YShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlYWRsaW5lIHdpbGwgcmV0dXJuIGFsbCB0aGUgbGluZXMgZnJvbSB0aGUgZmFrZSBmaWxlCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICBsaW5lMiA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgbGluZTMgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMiwgJ2JhclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMywgJ2JhelxuJykKKworICAgICAgICAjIENoZWNrIHRoYXQgd2UgcHJvcGVybHkgZW11bGF0ZSBhIGZpbGUgdGhhdCBkb2Vzbid0IGVuZCBpbiBhIG5ld2xpbmUKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2ZvbycpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKKworCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVtdWxhdGluZyBhIGZpbGUgdGhhdCBlbmRzIGluIGEgbmV3bGluZSBjaGFyYWN0ZXIgd29ya3MKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmb29cbicsICdiYXJcbicsICdiYXpcbiddKQorCisgICAgICAgICMgVGVzdCB0aGF0IGZpbGVzIHdpdGhvdXQgYSBmaW5hbCBuZXdsaW5lIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkKKyAgICAgICAgIyBlbXVsYXRlZAorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJheicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ2Zvb1xuJywgJ2JhclxuJywgJ2JheiddKQorCisKKyAgICBkZWYgdGVzdF9tb2NrX29wZW5fcmVhZF93aXRoX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIEF0IG9uZSBwb2ludCBjYWxsaW5nIHJlYWQgd2l0aCBhbiBhcmd1bWVudCB3YXMgYnJva2VuCisgICAgICAgICMgZm9yIG1vY2tzIHJldHVybmVkIGJ5IG1vY2tfb3BlbgorICAgICAgICBzb21lX2RhdGEgPSAnZm9vXG5iYXJcbmJheicKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9c29tZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2soKS5yZWFkKDEwKSwgc29tZV9kYXRhKQorCisKKyAgICBkZWYgdGVzdF9pbnRlcmxlYXZlZF9yZWFkcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyByZWFkLCByZWFkbGluZSwgYW5kIHJlYWRsaW5lcyBwdWxscyBkYXRhCisgICAgICAgICMgc2VxdWVudGlhbGx5IGZyb20gdGhlIGRhdGEgd2UgcHJlbG9hZCB3aXRoCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICByZXN0ID0gaC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxLCAnZm9vXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3QsIFsnYmFyXG4nLCAnYmF6XG4nXSkKKworICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJhelxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICBsaW5lMSA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgcmVzdCA9IGgucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTEsICdmb29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdCwgJ2JhclxuYmF6XG4nKQorCisKKyAgICBkZWYgdGVzdF9vdmVycmlkaW5nX3JldHVybl92YWx1ZXMoc2VsZik6CisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb28nKQorICAgICAgICBoYW5kbGUgPSBtb2NrKCkKKworICAgICAgICBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgPSAnYmFyJworICAgICAgICBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlID0gJ2JhcicKKyAgICAgICAgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgPSBbJ2JhciddCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZCgpLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmUoKSwgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lcygpLCBbJ2JhciddKQorCisgICAgICAgICMgY2FsbCByZXBlYXRlZGx5IHRvIGNoZWNrIHRoYXQgYSBTdG9wSXRlcmF0aW9uIGlzIG5vdCBwcm9wYWdhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lKCksICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZSgpLCAnYmFyJykKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3V0aWwucHkgYi9MaWIvdW5pdHRlc3QvdXRpbC5weQppbmRleCBjY2RmMGI4Li5hZWU0OThmIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdXRpbC5weQorKysgYi9MaWIvdW5pdHRlc3QvdXRpbC5weQpAQCAtMSwxMCArMSw0NyBAQAogIiIiVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucy4iIiIKIAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgT3JkZXJlZERpY3QKK2Zyb20gb3MucGF0aCBpbXBvcnQgY29tbW9ucHJlZml4CiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKIF9NQVhfTEVOR1RIID0gODAKK19QTEFDRUhPTERFUl9MRU4gPSAxMgorX01JTl9CRUdJTl9MRU4gPSA1CitfTUlOX0VORF9MRU4gPSA1CitfTUlOX0NPTU1PTl9MRU4gPSA1CitfTUlOX0RJRkZfTEVOID0gX01BWF9MRU5HVEggLSBcCisgICAgICAgICAgICAgICAoX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9DT01NT05fTEVOICsKKyAgICAgICAgICAgICAgICBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9FTkRfTEVOKQorYXNzZXJ0IF9NSU5fRElGRl9MRU4gPj0gMAorCitkZWYgX3Nob3J0ZW4ocywgcHJlZml4bGVuLCBzdWZmaXhsZW4pOgorICAgIHNraXAgPSBsZW4ocykgLSBwcmVmaXhsZW4gLSBzdWZmaXhsZW4KKyAgICBpZiBza2lwID4gX1BMQUNFSE9MREVSX0xFTjoKKyAgICAgICAgcyA9ICclc1slZCBjaGFyc10lcycgJSAoc1s6cHJlZml4bGVuXSwgc2tpcCwgc1tsZW4ocykgLSBzdWZmaXhsZW46XSkKKyAgICByZXR1cm4gcworCitkZWYgX2NvbW1vbl9zaG9ydGVuX3JlcHIoKmFyZ3MpOgorICAgIGFyZ3MgPSB0dXBsZShtYXAoc2FmZV9yZXByLCBhcmdzKSkKKyAgICBtYXhsZW4gPSBtYXgobWFwKGxlbiwgYXJncykpCisgICAgaWYgbWF4bGVuIDw9IF9NQVhfTEVOR1RIOgorICAgICAgICByZXR1cm4gYXJncworCisgICAgcHJlZml4ID0gY29tbW9ucHJlZml4KGFyZ3MpCisgICAgcHJlZml4bGVuID0gbGVuKHByZWZpeCkKKworICAgIGNvbW1vbl9sZW4gPSBfTUFYX0xFTkdUSCAtIFwKKyAgICAgICAgICAgICAgICAgKG1heGxlbiAtIHByZWZpeGxlbiArIF9NSU5fQkVHSU5fTEVOICsgX1BMQUNFSE9MREVSX0xFTikKKyAgICBpZiBjb21tb25fbGVuID4gX01JTl9DT01NT05fTEVOOgorICAgICAgICBhc3NlcnQgX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9DT01NT05fTEVOICsgXAorICAgICAgICAgICAgICAgKG1heGxlbiAtIHByZWZpeGxlbikgPCBfTUFYX0xFTkdUSAorICAgICAgICBwcmVmaXggPSBfc2hvcnRlbihwcmVmaXgsIF9NSU5fQkVHSU5fTEVOLCBjb21tb25fbGVuKQorICAgICAgICByZXR1cm4gdHVwbGUocHJlZml4ICsgc1twcmVmaXhsZW46XSBmb3IgcyBpbiBhcmdzKQorCisgICAgcHJlZml4ID0gX3Nob3J0ZW4ocHJlZml4LCBfTUlOX0JFR0lOX0xFTiwgX01JTl9DT01NT05fTEVOKQorICAgIHJldHVybiB0dXBsZShwcmVmaXggKyBfc2hvcnRlbihzW3ByZWZpeGxlbjpdLCBfTUlOX0RJRkZfTEVOLCBfTUlOX0VORF9MRU4pCisgICAgICAgICAgICAgICAgIGZvciBzIGluIGFyZ3MpCisKIGRlZiBzYWZlX3JlcHIob2JqLCBzaG9ydD1GYWxzZSk6CiAgICAgdHJ5OgogICAgICAgICByZXN1bHQgPSByZXByKG9iaikKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvZXJyb3IucHkgYi9MaWIvdXJsbGliL2Vycm9yLnB5CmluZGV4IGI3MTJlYmIuLjQ1YjcxNjkgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvZXJyb3IucHkKKysrIGIvTGliL3VybGxpYi9lcnJvci5weQpAQCAtMSw2ICsxLDYgQEAKICIiIkV4Y2VwdGlvbiBjbGFzc2VzIHJhaXNlZCBieSB1cmxsaWIuCiAKLVRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBpcyBVUkxFcnJvciwgd2hpY2ggaW5oZXJpdHMgZnJvbSBJT0Vycm9yLiAgSXQKK1RoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBpcyBVUkxFcnJvciwgd2hpY2ggaW5oZXJpdHMgZnJvbSBPU0Vycm9yLiAgSXQKIGRvZXNuJ3QgZGVmaW5lIGFueSBiZWhhdmlvciBvZiBpdHMgb3duLCBidXQgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbAogZXhjZXB0aW9ucyBkZWZpbmVkIGluIHRoaXMgcGFja2FnZS4KIApAQCAtMTcsMTEgKzE3LDExIEBACiAKIAogIyBkbyB0aGVzZSBlcnJvciBjbGFzc2VzIG1ha2Ugc2Vuc2U/Ci0jIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIElPRXJyb3Igc3R1ZmYgaXMgb3ZlcnJpZGRlbi4gIHdlIGp1c3Qgd2FudCB0byBiZQorIyBtYWtlIHN1cmUgYWxsIG9mIHRoZSBPU0Vycm9yIHN0dWZmIGlzIG92ZXJyaWRkZW4uICB3ZSBqdXN0IHdhbnQgdG8gYmUKICMgc3VidHlwZXMuCiAKLWNsYXNzIFVSTEVycm9yKElPRXJyb3IpOgotICAgICMgVVJMRXJyb3IgaXMgYSBzdWItdHlwZSBvZiBJT0Vycm9yLCBidXQgaXQgZG9lc24ndCBzaGFyZSBhbnkgb2YKK2NsYXNzIFVSTEVycm9yKE9TRXJyb3IpOgorICAgICMgVVJMRXJyb3IgaXMgYSBzdWItdHlwZSBvZiBPU0Vycm9yLCBidXQgaXQgZG9lc24ndCBzaGFyZSBhbnkgb2YKICAgICAjIHRoZSBpbXBsZW1lbnRhdGlvbi4gIG5lZWQgdG8gb3ZlcnJpZGUgX19pbml0X18gYW5kIF9fc3RyX18uCiAgICAgIyBJdCBzZXRzIHNlbGYuYXJncyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIEVudmlyb25tZW50RXJyb3IKICAgICAjIHN1YmNsYXNzZXMsIGJ1dCBhcmdzIGRvZXNuJ3QgaGF2ZSB0aGUgdHlwaWNhbCBmb3JtYXQgd2l0aCBlcnJubyBpbgpAQCAtNjEsOSArNjEsMTMgQEAKICAgICBkZWYgcmVhc29uKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5tc2cKIAotICAgIGRlZiBpbmZvKHNlbGYpOgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoZWFkZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5oZHJzCiAKKyAgICBAaGVhZGVycy5zZXR0ZXIKKyAgICBkZWYgaGVhZGVycyhzZWxmLCBoZWFkZXJzKToKKyAgICAgICAgc2VsZi5oZHJzID0gaGVhZGVycwogCiAjIGV4Y2VwdGlvbiByYWlzZWQgd2hlbiBkb3dubG9hZGVkIHNpemUgZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGgKIGNsYXNzIENvbnRlbnRUb29TaG9ydEVycm9yKFVSTEVycm9yKToKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvcGFyc2UucHkgYi9MaWIvdXJsbGliL3BhcnNlLnB5CmluZGV4IDlhMmRmNDEuLjUzMjhiOWQgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcGFyc2UucHkKKysrIGIvTGliL3VybGxpYi9wYXJzZS5weQpAQCAtODQ2LDcgKzg0Niw2IEBACiAgICAgIiIic3BsaXR0eXBlKCd0eXBlOm9wYXF1ZXN0cmluZycpIC0tPiAndHlwZScsICdvcGFxdWVzdHJpbmcnLiIiIgogICAgIGdsb2JhbCBfdHlwZXByb2cKICAgICBpZiBfdHlwZXByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF90eXBlcHJvZyA9IHJlLmNvbXBpbGUoJ14oW14vOl0rKTonKQogCiAgICAgbWF0Y2ggPSBfdHlwZXByb2cubWF0Y2godXJsKQpAQCAtODYwLDcgKzg1OSw2IEBACiAgICAgIiIic3BsaXRob3N0KCcvL2hvc3RbOnBvcnRdL3BhdGgnKSAtLT4gJ2hvc3RbOnBvcnRdJywgJy9wYXRoJy4iIiIKICAgICBnbG9iYWwgX2hvc3Rwcm9nCiAgICAgaWYgX2hvc3Rwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfaG9zdHByb2cgPSByZS5jb21waWxlKCdeLy8oW14vP10qKSguKikkJykKIAogICAgIG1hdGNoID0gX2hvc3Rwcm9nLm1hdGNoKHVybCkKQEAgLTg3Nyw3ICs4NzUsNiBAQAogICAgICIiInNwbGl0dXNlcigndXNlcls6cGFzc3dkXUBob3N0Wzpwb3J0XScpIC0tPiAndXNlcls6cGFzc3dkXScsICdob3N0Wzpwb3J0XScuIiIiCiAgICAgZ2xvYmFsIF91c2VycHJvZwogICAgIGlmIF91c2VycHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3VzZXJwcm9nID0gcmUuY29tcGlsZSgnXiguKilAKC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfdXNlcnByb2cubWF0Y2goaG9zdCkKQEAgLTg4OSw3ICs4ODYsNiBAQAogICAgICIiInNwbGl0cGFzc3dkKCd1c2VyOnBhc3N3ZCcpIC0+ICd1c2VyJywgJ3Bhc3N3ZCcuIiIiCiAgICAgZ2xvYmFsIF9wYXNzd2Rwcm9nCiAgICAgaWYgX3Bhc3N3ZHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9wYXNzd2Rwcm9nID0gcmUuY29tcGlsZSgnXihbXjpdKik6KC4qKSQnLHJlLlMpCiAKICAgICBtYXRjaCA9IF9wYXNzd2Rwcm9nLm1hdGNoKHVzZXIpCkBAIC05MDIsNyArODk4LDYgQEAKICAgICAiIiJzcGxpdHBvcnQoJ2hvc3Q6cG9ydCcpIC0tPiAnaG9zdCcsICdwb3J0Jy4iIiIKICAgICBnbG9iYWwgX3BvcnRwcm9nCiAgICAgaWYgX3BvcnRwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfcG9ydHByb2cgPSByZS5jb21waWxlKCdeKC4qKTooWzAtOV0rKSQnKQogCiAgICAgbWF0Y2ggPSBfcG9ydHByb2cubWF0Y2goaG9zdCkKQEAgLTkxNyw3ICs5MTIsNiBAQAogICAgIFJldHVybiBOb25lIGlmICc6JyBidXQgbm90IGEgdmFsaWQgbnVtYmVyLiIiIgogICAgIGdsb2JhbCBfbnBvcnRwcm9nCiAgICAgaWYgX25wb3J0cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX25wb3J0cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopOiguKikkJykKIAogICAgIG1hdGNoID0gX25wb3J0cHJvZy5tYXRjaChob3N0KQpAQCAtOTM2LDcgKzkzMCw2IEBACiAgICAgIiIic3BsaXRxdWVyeSgnL3BhdGg/cXVlcnknKSAtLT4gJy9wYXRoJywgJ3F1ZXJ5Jy4iIiIKICAgICBnbG9iYWwgX3F1ZXJ5cHJvZwogICAgIGlmIF9xdWVyeXByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9xdWVyeXByb2cgPSByZS5jb21waWxlKCdeKC4qKVw/KFteP10qKSQnKQogCiAgICAgbWF0Y2ggPSBfcXVlcnlwcm9nLm1hdGNoKHVybCkKQEAgLTk0OCw3ICs5NDEsNiBAQAogICAgICIiInNwbGl0dGFnKCcvcGF0aCN0YWcnKSAtLT4gJy9wYXRoJywgJ3RhZycuIiIiCiAgICAgZ2xvYmFsIF90YWdwcm9nCiAgICAgaWYgX3RhZ3Byb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF90YWdwcm9nID0gcmUuY29tcGlsZSgnXiguKikjKFteI10qKSQnKQogCiAgICAgbWF0Y2ggPSBfdGFncHJvZy5tYXRjaCh1cmwpCkBAIC05NjYsNyArOTU4LDYgQEAKICAgICAiIiJzcGxpdHZhbHVlKCdhdHRyPXZhbHVlJykgLS0+ICdhdHRyJywgJ3ZhbHVlJy4iIiIKICAgICBnbG9iYWwgX3ZhbHVlcHJvZwogICAgIGlmIF92YWx1ZXByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF92YWx1ZXByb2cgPSByZS5jb21waWxlKCdeKFtePV0qKT0oLiopJCcpCiAKICAgICBtYXRjaCA9IF92YWx1ZXByb2cubWF0Y2goYXR0cikKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvcmVxdWVzdC5weSBiL0xpYi91cmxsaWIvcmVxdWVzdC5weQppbmRleCBhNzQ0NWQxLi5iY2ViMzI5IDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL3JlcXVlc3QucHkKKysrIGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5CkBAIC0xOCw3ICsxOCw3IEBACiB1cmxsaWIuICBwYXNzIHRoZSB1cmwgYW5kIG9wdGlvbmFsbHkgZGF0YSB0byBwb3N0IHRvIGFuIEhUVFAgVVJMLCBhbmQKIGdldCBhIGZpbGUtbGlrZSBvYmplY3QgYmFjay4gIE9uZSBkaWZmZXJlbmNlIGlzIHRoYXQgeW91IGNhbiBhbHNvIHBhc3MKIGEgUmVxdWVzdCBpbnN0YW5jZSBpbnN0ZWFkIG9mIFVSTC4gIFJhaXNlcyBhIFVSTEVycm9yIChzdWJjbGFzcyBvZgotSU9FcnJvcik7IGZvciBIVFRQIGVycm9ycywgcmFpc2VzIGFuIEhUVFBFcnJvciwgd2hpY2ggY2FuIGFsc28gYmUKK09TRXJyb3IpOyBmb3IgSFRUUCBlcnJvcnMsIHJhaXNlcyBhbiBIVFRQRXJyb3IsIHdoaWNoIGNhbiBhbHNvIGJlCiB0cmVhdGVkIGFzIGEgdmFsaWQgcmVzcG9uc2UuCiAKIGJ1aWxkX29wZW5lciAtLSBGdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgT3BlbmVyRGlyZWN0b3IgaW5zdGFuY2UuCkBAIC0xMDMsNyArMTAzLDggQEAKIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCAoCiAgICAgdXJscGFyc2UsIHVybHNwbGl0LCB1cmxqb2luLCB1bndyYXAsIHF1b3RlLCB1bnF1b3RlLAogICAgIHNwbGl0dHlwZSwgc3BsaXRob3N0LCBzcGxpdHBvcnQsIHNwbGl0dXNlciwgc3BsaXRwYXNzd2QsCi0gICAgc3BsaXRhdHRyLCBzcGxpdHF1ZXJ5LCBzcGxpdHZhbHVlLCBzcGxpdHRhZywgdG9fYnl0ZXMsIHVybHVucGFyc2UpCisgICAgc3BsaXRhdHRyLCBzcGxpdHF1ZXJ5LCBzcGxpdHZhbHVlLCBzcGxpdHRhZywgdG9fYnl0ZXMsCisgICAgdW5xdW90ZV90b19ieXRlcywgdXJsdW5wYXJzZSkKIGZyb20gdXJsbGliLnJlc3BvbnNlIGltcG9ydCBhZGRpbmZvdXJsLCBhZGRjbG9zZWhvb2sKIAogIyBjaGVjayBmb3IgU1NMCkBAIC0xMjEsNyArMTIyLDcgQEAKICAgICAnSFRUUFBhc3N3b3JkTWdyJywgJ0hUVFBQYXNzd29yZE1ncldpdGhEZWZhdWx0UmVhbG0nLAogICAgICdBYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXInLCAnSFRUUEJhc2ljQXV0aEhhbmRsZXInLCAnUHJveHlCYXNpY0F1dGhIYW5kbGVyJywKICAgICAnQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlcicsICdIVFRQRGlnZXN0QXV0aEhhbmRsZXInLCAnUHJveHlEaWdlc3RBdXRoSGFuZGxlcicsCi0gICAgJ0hUVFBIYW5kbGVyJywgJ0ZpbGVIYW5kbGVyJywgJ0ZUUEhhbmRsZXInLCAnQ2FjaGVGVFBIYW5kbGVyJywKKyAgICAnSFRUUEhhbmRsZXInLCAnRmlsZUhhbmRsZXInLCAnRlRQSGFuZGxlcicsICdDYWNoZUZUUEhhbmRsZXInLCAnRGF0YUhhbmRsZXInLAogICAgICdVbmtub3duSGFuZGxlcicsICdIVFRQRXJyb3JQcm9jZXNzb3InLAogICAgICMgRnVuY3Rpb25zCiAgICAgJ3VybG9wZW4nLCAnaW5zdGFsbF9vcGVuZXInLCAnYnVpbGRfb3BlbmVyJywKQEAgLTIyNyw3ICsyMjgsNyBAQAogICAgIGZvciB0ZW1wX2ZpbGUgaW4gX3VybF90ZW1wZmlsZXM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayh0ZW1wX2ZpbGUpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlbCBfdXJsX3RlbXBmaWxlc1s6XQpAQCAtMjU4LDI0ICsyNTksNjAgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkYXRhPU5vbmUsIGhlYWRlcnM9e30sCiAgICAgICAgICAgICAgICAgIG9yaWdpbl9yZXFfaG9zdD1Ob25lLCB1bnZlcmlmaWFibGU9RmFsc2UsCiAgICAgICAgICAgICAgICAgIG1ldGhvZD1Ob25lKToKLSAgICAgICAgIyB1bndyYXAoJzxVUkw6dHlwZTovL2hvc3QvcGF0aD4nKSAtLT4gJ3R5cGU6Ly9ob3N0L3BhdGgnCi0gICAgICAgIHNlbGYuZnVsbF91cmwgPSB1bndyYXAodXJsKQotICAgICAgICBzZWxmLmZ1bGxfdXJsLCBzZWxmLmZyYWdtZW50ID0gc3BsaXR0YWcoc2VsZi5mdWxsX3VybCkKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAgICAgICBzZWxmLmZ1bGxfdXJsID0gdXJsCiAgICAgICAgIHNlbGYuaGVhZGVycyA9IHt9CisgICAgICAgIHNlbGYudW5yZWRpcmVjdGVkX2hkcnMgPSB7fQorICAgICAgICBzZWxmLl9kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICAgICAgIHNlbGYuX3R1bm5lbF9ob3N0ID0gTm9uZQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBoZWFkZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLmFkZF9oZWFkZXIoa2V5LCB2YWx1ZSkKLSAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycyA9IHt9CiAgICAgICAgIGlmIG9yaWdpbl9yZXFfaG9zdCBpcyBOb25lOgogICAgICAgICAgICAgb3JpZ2luX3JlcV9ob3N0ID0gcmVxdWVzdF9ob3N0KHNlbGYpCiAgICAgICAgIHNlbGYub3JpZ2luX3JlcV9ob3N0ID0gb3JpZ2luX3JlcV9ob3N0CiAgICAgICAgIHNlbGYudW52ZXJpZmlhYmxlID0gdW52ZXJpZmlhYmxlCi0gICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCisgICAgICAgIGlmIG1ldGhvZDoKKyAgICAgICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZnVsbF91cmwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZnJhZ21lbnQ6CisgICAgICAgICAgICByZXR1cm4gJ3t9I3t9Jy5mb3JtYXQoc2VsZi5fZnVsbF91cmwsIHNlbGYuZnJhZ21lbnQpCisgICAgICAgIHJldHVybiBzZWxmLl9mdWxsX3VybAorCisgICAgQGZ1bGxfdXJsLnNldHRlcgorICAgIGRlZiBmdWxsX3VybChzZWxmLCB1cmwpOgorICAgICAgICAjIHVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpIC0tPiAndHlwZTovL2hvc3QvcGF0aCcKKyAgICAgICAgc2VsZi5fZnVsbF91cmwgPSB1bndyYXAodXJsKQorICAgICAgICBzZWxmLl9mdWxsX3VybCwgc2VsZi5mcmFnbWVudCA9IHNwbGl0dGFnKHNlbGYuX2Z1bGxfdXJsKQogICAgICAgICBzZWxmLl9wYXJzZSgpCiAKKyAgICBAZnVsbF91cmwuZGVsZXRlcgorICAgIGRlZiBmdWxsX3VybChzZWxmKToKKyAgICAgICAgc2VsZi5fZnVsbF91cmwgPSBOb25lCisgICAgICAgIHNlbGYuZnJhZ21lbnQgPSBOb25lCisgICAgICAgIHNlbGYuc2VsZWN0b3IgPSAnJworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRhdGEoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kYXRhCisKKyAgICBAZGF0YS5zZXR0ZXIKKyAgICBkZWYgZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgZGF0YSAhPSBzZWxmLl9kYXRhOgorICAgICAgICAgICAgc2VsZi5fZGF0YSA9IGRhdGEKKyAgICAgICAgICAgICMgaXNzdWUgMTY0NjQKKyAgICAgICAgICAgICMgaWYgd2UgY2hhbmdlIGRhdGEgd2UgbmVlZCB0byByZW1vdmUgY29udGVudC1sZW5ndGggaGVhZGVyCisgICAgICAgICAgICAjIChjYXVzZSBpdCdzIG1vc3QgcHJvYmFibHkgY2FsY3VsYXRlZCBmb3IgcHJldmlvdXMgdmFsdWUpCisgICAgICAgICAgICBpZiBzZWxmLmhhc19oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIik6CisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpCisKKyAgICBAZGF0YS5kZWxldGVyCisgICAgZGVmIGRhdGEoc2VsZik6CisgICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKKwogICAgIGRlZiBfcGFyc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYudHlwZSwgcmVzdCA9IHNwbGl0dHlwZShzZWxmLmZ1bGxfdXJsKQorICAgICAgICBzZWxmLnR5cGUsIHJlc3QgPSBzcGxpdHR5cGUoc2VsZi5fZnVsbF91cmwpCiAgICAgICAgIGlmIHNlbGYudHlwZSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB1cmwgdHlwZTogJXIiICUgc2VsZi5mdWxsX3VybCkKICAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnNlbGVjdG9yID0gc3BsaXRob3N0KHJlc3QpCkBAIC0yODQsNjIgKzMyMSwxMSBAQAogCiAgICAgZGVmIGdldF9tZXRob2Qoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kLiIiIgotICAgICAgICBpZiBzZWxmLm1ldGhvZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1ldGhvZAotICAgICAgICBlbGlmIHNlbGYuZGF0YSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiAiUE9TVCIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiR0VUIgorICAgICAgICBkZWZhdWx0X21ldGhvZCA9ICJQT1NUIiBpZiBzZWxmLmRhdGEgaXMgbm90IE5vbmUgZWxzZSAiR0VUIgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAnbWV0aG9kJywgZGVmYXVsdF9tZXRob2QpCiAKICAgICBkZWYgZ2V0X2Z1bGxfdXJsKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmZyYWdtZW50OgotICAgICAgICAgICAgcmV0dXJuICclcyMlcycgJSAoc2VsZi5mdWxsX3VybCwgc2VsZi5mcmFnbWVudCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmZ1bGxfdXJsCi0KLSAgICAjIEJlZ2luIGRlcHJlY2F0ZWQgbWV0aG9kcwotCi0gICAgZGVmIGFkZF9kYXRhKHNlbGYsIGRhdGEpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5hZGRfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQotCi0gICAgZGVmIGhhc19kYXRhKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5oYXNfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSBpcyBub3QgTm9uZQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZGF0YQotCi0gICAgZGVmIGdldF90eXBlKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfdHlwZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYudHlwZQotCi0gICAgZGVmIGdldF9ob3N0KHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfaG9zdCBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuaG9zdAotCi0gICAgZGVmIGdldF9zZWxlY3RvcihzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuZ2V0X3NlbGVjdG9yIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RvcgotCi0gICAgZGVmIGlzX3VudmVyaWZpYWJsZShzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuaXNfdW52ZXJpZmlhYmxlIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi51bnZlcmlmaWFibGUKLQotICAgIGRlZiBnZXRfb3JpZ2luX3JlcV9ob3N0KHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfb3JpZ2luX3JlcV9ob3N0IG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5vcmlnaW5fcmVxX2hvc3QKLQotICAgICMgRW5kIGRlcHJlY2F0ZWQgbWV0aG9kcworICAgICAgICByZXR1cm4gc2VsZi5mdWxsX3VybAogCiAgICAgZGVmIHNldF9wcm94eShzZWxmLCBob3N0LCB0eXBlKToKICAgICAgICAgaWYgc2VsZi50eXBlID09ICdodHRwcycgYW5kIG5vdCBzZWxmLl90dW5uZWxfaG9zdDoKQEAgLTM2OSw2ICszNTUsMTAgQEAKICAgICAgICAgICAgIGhlYWRlcl9uYW1lLAogICAgICAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycy5nZXQoaGVhZGVyX25hbWUsIGRlZmF1bHQpKQogCisgICAgZGVmIHJlbW92ZV9oZWFkZXIoc2VsZiwgaGVhZGVyX25hbWUpOgorICAgICAgICBzZWxmLmhlYWRlcnMucG9wKGhlYWRlcl9uYW1lLCBOb25lKQorICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLnBvcChoZWFkZXJfbmFtZSwgTm9uZSkKKwogICAgIGRlZiBoZWFkZXJfaXRlbXMoc2VsZik6CiAgICAgICAgIGhkcnMgPSBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLmNvcHkoKQogICAgICAgICBoZHJzLnVwZGF0ZShzZWxmLmhlYWRlcnMpCkBAIC01MzEsNyArNTIxLDggQEAKICAgICBvcGVuZXIgPSBPcGVuZXJEaXJlY3RvcigpCiAgICAgZGVmYXVsdF9jbGFzc2VzID0gW1Byb3h5SGFuZGxlciwgVW5rbm93bkhhbmRsZXIsIEhUVFBIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICBIVFRQRGVmYXVsdEVycm9ySGFuZGxlciwgSFRUUFJlZGlyZWN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3Nvcl0KKyAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgRGF0YUhhbmRsZXJdCiAgICAgaWYgaGFzYXR0cihodHRwLmNsaWVudCwgIkhUVFBTQ29ubmVjdGlvbiIpOgogICAgICAgICBkZWZhdWx0X2NsYXNzZXMuYXBwZW5kKEhUVFBTSGFuZGxlcikKICAgICBza2lwID0gc2V0KCkKQEAgLTEyNDYsMTEgKzEyMzcsMTcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoLnJlcXVlc3QocmVxLmdldF9tZXRob2QoKSwgcmVxLnNlbGVjdG9yLCByZXEuZGF0YSwgaGVhZGVycykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgogICAgICAgICAgICAgaC5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihlcnIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByID0gaC5nZXRyZXNwb25zZSgpCisgICAgICAgICAgICAjIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc2VuZCB1cyBhICdDb25uZWN0aW9uOiBjbG9zZScgaGVhZGVyLAorICAgICAgICAgICAgIyBIVFRQQ29ubmVjdGlvbiBhc3N1bWVzIHRoZSBzb2NrZXQgc2hvdWxkIGJlIGxlZnQgb3Blbi4gTWFudWFsbHkKKyAgICAgICAgICAgICMgbWFyayB0aGUgc29ja2V0IHRvIGJlIGNsb3NlZCB3aGVuIHRoaXMgcmVzcG9uc2Ugb2JqZWN0IGdvZXMgYXdheS4KKyAgICAgICAgICAgIGlmIGguc29jazoKKyAgICAgICAgICAgICAgICBoLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGguc29jayA9IE5vbmUKIAogICAgICAgICByLnVybCA9IHJlcS5nZXRfZnVsbF91cmwoKQogICAgICAgICAjIFRoaXMgbGluZSByZXBsYWNlcyB0aGUgLm1zZyBhdHRyaWJ1dGUgb2YgdGhlIEhUVFBSZXNwb25zZQpAQCAtMTQ0NSw3ICsxNDQyLDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBob3N0ID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHJhaXNlIFVSTEVycm9yKG1zZykKICAgICAgICAgcGF0aCwgYXR0cnMgPSBzcGxpdGF0dHIocmVxLnNlbGVjdG9yKQogICAgICAgICBkaXJzID0gcGF0aC5zcGxpdCgnLycpCkBAIC0xNTMxLDYgKzE1MjgsMzYgQEAKICAgICAgICAgc2VsZi5jYWNoZS5jbGVhcigpCiAgICAgICAgIHNlbGYudGltZW91dC5jbGVhcigpCiAKK2NsYXNzIERhdGFIYW5kbGVyKEJhc2VIYW5kbGVyKToKKyAgICBkZWYgZGF0YV9vcGVuKHNlbGYsIHJlcSk6CisgICAgICAgICMgZGF0YSBVUkxzIGFzIHNwZWNpZmllZCBpbiBSRkMgMjM5Ny4KKyAgICAgICAgIworICAgICAgICAjIGlnbm9yZXMgUE9TVGVkIGRhdGEKKyAgICAgICAgIworICAgICAgICAjIHN5bnRheDoKKyAgICAgICAgIyBkYXRhdXJsICAgOj0gImRhdGE6IiBbIG1lZGlhdHlwZSBdIFsgIjtiYXNlNjQiIF0gIiwiIGRhdGEKKyAgICAgICAgIyBtZWRpYXR5cGUgOj0gWyB0eXBlICIvIiBzdWJ0eXBlIF0gKiggIjsiIHBhcmFtZXRlciApCisgICAgICAgICMgZGF0YSAgICAgIDo9ICp1cmxjaGFyCisgICAgICAgICMgcGFyYW1ldGVyIDo9IGF0dHJpYnV0ZSAiPSIgdmFsdWUKKyAgICAgICAgdXJsID0gcmVxLmZ1bGxfdXJsCisKKyAgICAgICAgc2NoZW1lLCBkYXRhID0gdXJsLnNwbGl0KCI6IiwxKQorICAgICAgICBtZWRpYXR5cGUsIGRhdGEgPSBkYXRhLnNwbGl0KCIsIiwxKQorCisgICAgICAgICMgZXZlbiBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTHMgbWlnaHQgYmUgcXVvdGVkIHNvIHVucXVvdGUgaW4gYW55IGNhc2U6CisgICAgICAgIGRhdGEgPSB1bnF1b3RlX3RvX2J5dGVzKGRhdGEpCisgICAgICAgIGlmIG1lZGlhdHlwZS5lbmRzd2l0aCgiO2Jhc2U2NCIpOgorICAgICAgICAgICAgZGF0YSA9IGJhc2U2NC5kZWNvZGVieXRlcyhkYXRhKQorICAgICAgICAgICAgbWVkaWF0eXBlID0gbWVkaWF0eXBlWzotN10KKworICAgICAgICBpZiBub3QgbWVkaWF0eXBlOgorICAgICAgICAgICAgbWVkaWF0eXBlID0gInRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSIKKworICAgICAgICBoZWFkZXJzID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygiQ29udGVudC10eXBlOiAlc1xuQ29udGVudC1sZW5ndGg6ICVkXG4iICUKKyAgICAgICAgICAgIChtZWRpYXR5cGUsIGxlbihkYXRhKSkpCisKKyAgICAgICAgcmV0dXJuIGFkZGluZm91cmwoaW8uQnl0ZXNJTyhkYXRhKSwgaGVhZGVycywgdXJsKQorCiAKICMgQ29kZSBtb3ZlIGZyb20gdGhlIG9sZCB1cmxsaWIgbW9kdWxlCiAKQEAgLTE2NTQsMjAgKzE2ODEsMjAgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBuYW1lKSh1cmwpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIG5hbWUpKHVybCwgZGF0YSkKLSAgICAgICAgZXhjZXB0IEhUVFBFcnJvcjoKKyAgICAgICAgZXhjZXB0IChIVFRQRXJyb3IsIFVSTEVycm9yKToKICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKIAogICAgIGRlZiBvcGVuX3Vua25vd24oc2VsZiwgZnVsbHVybCwgZGF0YT1Ob25lKToKICAgICAgICAgIiIiT3ZlcnJpZGFibGUgaW50ZXJmYWNlIHRvIG9wZW4gdW5rbm93biBVUkwgdHlwZS4iIiIKICAgICAgICAgdHlwZSwgdXJsID0gc3BsaXR0eXBlKGZ1bGx1cmwpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoJ3VybCBlcnJvcicsICd1bmtub3duIHVybCB0eXBlJywgdHlwZSkKKyAgICAgICAgcmFpc2UgT1NFcnJvcigndXJsIGVycm9yJywgJ3Vua25vd24gdXJsIHR5cGUnLCB0eXBlKQogCiAgICAgZGVmIG9wZW5fdW5rbm93bl9wcm94eShzZWxmLCBwcm94eSwgZnVsbHVybCwgZGF0YT1Ob25lKToKICAgICAgICAgIiIiT3ZlcnJpZGFibGUgaW50ZXJmYWNlIHRvIG9wZW4gdW5rbm93biBVUkwgdHlwZS4iIiIKICAgICAgICAgdHlwZSwgdXJsID0gc3BsaXR0eXBlKGZ1bGx1cmwpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoJ3VybCBlcnJvcicsICdpbnZhbGlkIHByb3h5IGZvciAlcycgJSB0eXBlLCBwcm94eSkKKyAgICAgICAgcmFpc2UgT1NFcnJvcigndXJsIGVycm9yJywgJ2ludmFsaWQgcHJveHkgZm9yICVzJyAlIHR5cGUsIHByb3h5KQogCiAgICAgIyBFeHRlcm5hbCBpbnRlcmZhY2UKICAgICBkZWYgcmV0cmlldmUoc2VsZiwgdXJsLCBmaWxlbmFtZT1Ob25lLCByZXBvcnRob29rPU5vbmUsIGRhdGE9Tm9uZSk6CkBAIC0xNjgzLDcgKzE3MTAsNyBAQAogICAgICAgICAgICAgICAgIGhkcnMgPSBmcC5pbmZvKCkKICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDJwYXRobmFtZShzcGxpdGhvc3QodXJsMSlbMV0pLCBoZHJzCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBmcCA9IHNlbGYub3Blbih1cmwsIGRhdGEpCiAgICAgICAgIHRyeToKQEAgLTE3NzYsNyArMTgwMyw3IEBACiAgICAgICAgICAgICAgICAgaWYgcHJveHlfYnlwYXNzKHJlYWxob3N0KToKICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHJlYWxob3N0CiAKLSAgICAgICAgaWYgbm90IGhvc3Q6IHJhaXNlIElPRXJyb3IoJ2h0dHAgZXJyb3InLCAnbm8gaG9zdCBnaXZlbicpCisgICAgICAgIGlmIG5vdCBob3N0OiByYWlzZSBPU0Vycm9yKCdodHRwIGVycm9yJywgJ25vIGhvc3QgZ2l2ZW4nKQogCiAgICAgICAgIGlmIHByb3h5X3Bhc3N3ZDoKICAgICAgICAgICAgIHByb3h5X3Bhc3N3ZCA9IHVucXVvdGUocHJveHlfcGFzc3dkKQpAQCAtMTg0OSw3ICsxODc2LDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuaHR0cF9lcnJvcl9kZWZhdWx0KHVybCwgZnAsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycykKIAogICAgIGRlZiBodHRwX2Vycm9yX2RlZmF1bHQoc2VsZiwgdXJsLCBmcCwgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzKToKLSAgICAgICAgIiIiRGVmYXVsdCBlcnJvciBoYW5kbGVyOiBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgcmFpc2UgSU9FcnJvci4iIiIKKyAgICAgICAgIiIiRGVmYXVsdCBlcnJvciBoYW5kbGVyOiBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgcmFpc2UgT1NFcnJvci4iIiIKICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICByYWlzZSBIVFRQRXJyb3IodXJsLCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMsIE5vbmUpCiAKQEAgLTE5NzYsNyArMjAwMyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIFt0eXBlLCBkYXRhXSA9IHVybC5zcGxpdCgnLCcsIDEpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQogICAgICAgICBpZiBub3QgdHlwZToKICAgICAgICAgICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJJwogICAgICAgICBzZW1pID0gdHlwZS5yZmluZCgnOycpCkBAIC0yNDI1LDcgKzI0NTIsNyBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgaG9zdElQID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdG9ubHkpCiAgICAgICAgICAgICAgICAgICAgIGhvc3RJUCA9IGlwMm51bShob3N0SVApCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgYmFzZSA9IGlwMm51bShtLmdyb3VwKDEpKQpAQCAtMjUxMSw3ICsyNTM4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3hpZXNbJ2h0dHBzJ10gPSAnaHR0cHM6Ly8lcycgJSBwcm94eVNlcnZlcgogICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllc1snZnRwJ10gPSAnZnRwOi8vJXMnICUgcHJveHlTZXJ2ZXIKICAgICAgICAgICAgIGludGVybmV0U2V0dGluZ3MuQ2xvc2UoKQotICAgICAgICBleGNlcHQgKFdpbmRvd3NFcnJvciwgVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICAgICAgIyBFaXRoZXIgcmVnaXN0cnkga2V5IG5vdCBmb3VuZCBldGMsIG9yIHRoZSB2YWx1ZSBpbiBhbgogICAgICAgICAgICAgIyB1bmV4cGVjdGVkIGZvcm1hdC4KICAgICAgICAgICAgICMgcHJveGllcyBhbHJlYWR5IHNldCB1cCB0byBiZSBlbXB0eSBzbyBub3RoaW5nIHRvIGRvCkBAIC0yNTQxLDcgKzI1NjgsNyBAQAogICAgICAgICAgICAgcHJveHlPdmVycmlkZSA9IHN0cih3aW5yZWcuUXVlcnlWYWx1ZUV4KGludGVybmV0U2V0dGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm94eU92ZXJyaWRlJylbMF0pCiAgICAgICAgICAgICAjIF5eXl4gUmV0dXJuZWQgYXMgVW5pY29kZSBidXQgcHJvYmxlbXMgaWYgbm90IGNvbnZlcnRlZCB0byBBU0NJSQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIGlmIG5vdCBwcm94eUVuYWJsZSBvciBub3QgcHJveHlPdmVycmlkZToKICAgICAgICAgICAgIHJldHVybiAwCkBAIC0yNTUyLDEzICsyNTc5LDEzIEBACiAgICAgICAgICAgICBhZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUocmF3SG9zdCkKICAgICAgICAgICAgIGlmIGFkZHIgIT0gcmF3SG9zdDoKICAgICAgICAgICAgICAgICBob3N0LmFwcGVuZChhZGRyKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnFkbiA9IHNvY2tldC5nZXRmcWRuKHJhd0hvc3QpCiAgICAgICAgICAgICBpZiBmcWRuICE9IHJhd0hvc3Q6CiAgICAgICAgICAgICAgICAgaG9zdC5hcHBlbmQoZnFkbikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgbWFrZSBhIGNoZWNrIHZhbHVlIGxpc3QgZnJvbSB0aGUgcmVnaXN0cnkgZW50cnk6IHJlcGxhY2UgdGhlCiAgICAgICAgICMgJzxsb2NhbD4nIHN0cmluZyBieSB0aGUgbG9jYWxob3N0IGVudHJ5IGFuZCB0aGUgY29ycmVzcG9uZGluZwpkaWZmIC0tZ2l0IGEvTGliL3V1aWQucHkgYi9MaWIvdXVpZC5weQppbmRleCA5MjI2ZmQ0Li45MzI1NGVjIDEwMDY0NAotLS0gYS9MaWIvdXVpZC5weQorKysgYi9MaWIvdXVpZC5weQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICBpZiBsZW4oYnl0ZXMpICE9IDE2OgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2J5dGVzIGlzIG5vdCBhIDE2LWNoYXIgc3RyaW5nJykKICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ5dGVzLCBieXRlc18pLCByZXByKGJ5dGVzKQotICAgICAgICAgICAgaW50ID0gaW50XygoJyUwMngnKjE2KSAlIHR1cGxlKGJ5dGVzKSwgMTYpCisgICAgICAgICAgICBpbnQgPSBpbnRfLmZyb21fYnl0ZXMoYnl0ZXMsIGJ5dGVvcmRlcj0nYmlnJykKICAgICAgICAgaWYgZmllbGRzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgbGVuKGZpZWxkcykgIT0gNjoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdmaWVsZHMgaXMgbm90IGEgNi10dXBsZScpCkBAIC0zMjksNyArMzI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHdvcmRzW2ldIGluIGh3X2lkZW50aWZpZXJzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW2dldF9pbmRleChpKV0ucmVwbGFjZSgnOicsICcnKSwgMTYpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgcmV0dXJuIE5vbmUKIApAQCAtMzcxLDcgKzM3MSw3IEBACiAgICAgZm9yIGRpciBpbiBkaXJzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwaXBlID0gb3MucG9wZW4ob3MucGF0aC5qb2luKGRpciwgJ2lwY29uZmlnJykgKyAnIC9hbGwnKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKZGlmZiAtLWdpdCBhL0xpYi92ZW52L19faW5pdF9fLnB5IGIvTGliL3ZlbnYvX19pbml0X18ucHkKaW5kZXggZTIxOWZlOS4uNWE3MDYxMyAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvX19pbml0X18ucHkKKysrIGIvTGliL3ZlbnYvX19pbml0X18ucHkKQEAgLTgwLDYgKzgwLDE0IEBACiAgICAgICAgICAgICBzZWxmLnNldHVwX3NjcmlwdHMoY29udGV4dCkKICAgICAgICAgICAgIHNlbGYucG9zdF9zZXR1cChjb250ZXh0KQogCisgICAgZGVmIGNsZWFyX2RpcmVjdG9yeShzZWxmLCBwYXRoKToKKyAgICAgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihwYXRoLCBmbikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZuKSBvciBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZuKToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGZuKQorCiAgICAgZGVmIGVuc3VyZV9kaXJlY3RvcmllcyhzZWxmLCBlbnZfZGlyKToKICAgICAgICAgIiIiCiAgICAgICAgIENyZWF0ZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBlbnZpcm9ubWVudC4KQEAgLTkxLDExICs5OSwxMSBAQAogICAgICAgICBkZWYgY3JlYXRlX2lmX25lZWRlZChkKToKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkKToKICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzbGluayhkKSBvciBvcy5wYXRoLmlzZmlsZShkKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcicgJSBkKQogCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGVudl9kaXIpIGFuZCBub3QgKHNlbGYuY2xlYXIgb3Igc2VsZi51cGdyYWRlKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0RpcmVjdG9yeSBleGlzdHM6ICVzJyAlIGVudl9kaXIpCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGVudl9kaXIpIGFuZCBzZWxmLmNsZWFyOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShlbnZfZGlyKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9kaXJlY3RvcnkoZW52X2RpcikKICAgICAgICAgY29udGV4dCA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCiAgICAgICAgIGNvbnRleHQuZW52X2RpciA9IGVudl9kaXIKICAgICAgICAgY29udGV4dC5lbnZfbmFtZSA9IG9zLnBhdGguc3BsaXQoZW52X2RpcilbMV0KQEAgLTI1Myw3ICsyNjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgcHJvY2Vzc2VkLgogICAgICAgICAiIiIKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX0RJUl9fJywgY29udGV4dC5lbnZfZGlyKQotICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfTkFNRV9fJywgY29udGV4dC5wcm9tcHQpCisgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9OQU1FX18nLCBjb250ZXh0LmVudl9uYW1lKQorICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfUFJPTVBUX18nLCBjb250ZXh0LnByb21wdCkKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX0JJTl9OQU1FX18nLCBjb250ZXh0LmJpbl9uYW1lKQogICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfUFlUSE9OX18nLCBjb250ZXh0LmVudl9leGUpCiAgICAgICAgIHJldHVybiB0ZXh0CkBAIC0zNjAsMTcgKzM2OSwyMiBAQAogICAgICAgICAgICAgdXNlX3N5bWxpbmtzID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHVzZV9zeW1saW5rcyA9IFRydWUKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zeW1saW5rcycsIGRlZmF1bHQ9dXNlX3N5bWxpbmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3N5bWxpbmtzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcnkgdG8gdXNlIHN5bWxpbmtzIHJhdGhlciB0aGFuIGNvcGllcywgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doZW4gc3ltbGlua3MgYXJlIG5vdCB0aGUgZGVmYXVsdCBmb3IgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBwbGF0Zm9ybS4nKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXN5bWxpbmtzJywgZGVmYXVsdD11c2Vfc3ltbGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdzeW1saW5rcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcnkgdG8gdXNlIHN5bWxpbmtzIHJhdGhlciB0aGFuIGNvcGllcywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hlbiBzeW1saW5rcyBhcmUgbm90IHRoZSBkZWZhdWx0IGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgcGxhdGZvcm0uJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWNvcGllcycsIGRlZmF1bHQ9bm90IHVzZV9zeW1saW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZXN0PSdzeW1saW5rcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcnkgdG8gdXNlIGNvcGllcyByYXRoZXIgdGhhbiBzeW1saW5rcywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZlbiB3aGVuIHN5bWxpbmtzIGFyZSB0aGUgZGVmYXVsdCBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHBsYXRmb3JtLicpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2xlYXInLCBkZWZhdWx0PUZhbHNlLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2NsZWFyJywgaGVscD0nRGVsZXRlIHRoZSBlbnZpcm9ubWVudCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXJlY3RvcnkgaWYgaXQgYWxyZWFkeSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGlzdHMuIElmIG5vdCBzcGVjaWZpZWQgYW5kICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBkaXJlY3RvcnkgZXhpc3RzLCBhbiBlcnJvcicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpcyByYWlzZWQuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdjbGVhcicsIGhlbHA9J0RlbGV0ZSB0aGUgY29udGVudHMgb2YgdGhlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vudmlyb25tZW50IGRpcmVjdG9yeSBpZiBpdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbHJlYWR5IGV4aXN0cywgYmVmb3JlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vudmlyb25tZW50IGNyZWF0aW9uLicpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXBncmFkZScsIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndXBncmFkZScsIGhlbHA9J1VwZ3JhZGUgdGhlIGVudmlyb25tZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdG9yeSB0byB1c2UgdGhpcyB2ZXJzaW9uICcKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKaW5kZXggMWM1ZWY5OC4uYjE1ZGVjYiAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKQEAgLTEsMjUgKzEsNDAgQEAKK2Z1bmN0aW9uIGdsb2JhbDpkZWFjdGl2YXRlIChbc3dpdGNoXSROb25EZXN0cnVjdGl2ZSkgew0KKyAgICAjIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCisgICAgaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQorICAgICAgICBjb3B5LWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCBmdW5jdGlvbjpwcm9tcHQNCisgICAgICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCisgICAgfQ0KKw0KKyAgICBpZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSkgew0KKyAgICAgICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQorICAgIH0NCisNCisgICAgaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCisgICAgICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCisgICAgICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSA0KKyAgICB9DQorDQorICAgIGlmIChUZXN0LVBhdGggZW52OlZJUlRVQUxfRU5WKSB7DQorICAgICAgICByZW1vdmUtaXRlbSBlbnY6VklSVFVBTF9FTlYNCisgICAgfQ0KKw0KKyAgICBpZiAoISROb25EZXN0cnVjdGl2ZSkgew0KKyAgICAgICAgIyBTZWxmIGRlc3RydWN0IQ0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246ZGVhY3RpdmF0ZQ0KKyAgICB9DQorfQ0KKw0KK2RlYWN0aXZhdGUgLW5vbmRlc3RydWN0aXZlDQorCiAkZW52OlZJUlRVQUxfRU5WPSJfX1ZFTlZfRElSX18iDQogDQotIyBSZXZlcnQgdG8gb3JpZ2luYWwgdmFsdWVzDQotaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQotICAgIGNvcHktaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUIGZ1bmN0aW9uOnByb21wdA0KLSAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgZW52OlBZVEhPTkhPTUUNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QQVRIKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIDQotfQ0KLQ0KICMgU2V0IHRoZSBwcm9tcHQgdG8gaW5jbHVkZSB0aGUgZW52IG5hbWUNCisjIE1ha2Ugc3VyZSBfT0xEX1ZJUlRVQUxfUFJPTVBUIGlzIGdsb2JhbA0KK2Z1bmN0aW9uIGdsb2JhbDpfT0xEX1ZJUlRVQUxfUFJPTVBUIHsiIn0NCiBjb3B5LWl0ZW0gZnVuY3Rpb246cHJvbXB0IGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi1mdW5jdGlvbiBwcm9tcHQgew0KLSAgICBXcml0ZS1Ib3N0IC1Ob05ld2xpbmUgLUZvcmVncm91bmRDb2xvciBHcmVlbiAnW19fVkVOVl9OQU1FX19dJw0KK2Z1bmN0aW9uIGdsb2JhbDpwcm9tcHQgew0KKyAgICBXcml0ZS1Ib3N0IC1Ob05ld2xpbmUgLUZvcmVncm91bmRDb2xvciBHcmVlbiAnX19WRU5WX1BST01QVF9fJw0KICAgICBfT0xEX1ZJUlRVQUxfUFJPTVBUDQogfQ0KIA0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEgYi9MaWIvdmVudi9zY3JpcHRzL250L0RlYWN0aXZhdGUucHMxCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDFlOTZiLi4wMDAwMDAwCi0tLSBhL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCi1pZiAoVGVzdC1QYXRoIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQpIHsNCi0gICAgY29weS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQgZnVuY3Rpb246cHJvbXB0DQotICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCBlbnY6UEFUSA0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEgNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6VklSVFVBTF9FTlYpIHsNCi0gICAgcmVtb3ZlLWl0ZW0gZW52OlZJUlRVQUxfRU5WDQotfQ0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0IGIvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKaW5kZXggM2NlYmUyNi4uOWVhYjE0NyAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKQEAgLTE0LDcgKzE0LDcgQEAKICkNCiANCiBzZXQgIl9PTERfVklSVFVBTF9QUk9NUFQ9JVBST01QVCUiDQotc2V0ICJQUk9NUFQ9X19WRU5WX05BTUVfXyVQUk9NUFQlIg0KK3NldCAiUFJPTVBUPV9fVkVOVl9QUk9NUFRfXyVQUk9NUFQlIg0KIA0KIGlmIGRlZmluZWQgUFlUSE9OSE9NRSAoDQogICAgIHNldCAiX09MRF9WSVJUVUFMX1BZVEhPTkhPTUU9JVBZVEhPTkhPTUUlIg0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlCmluZGV4IGMyNDE0NTAuLjdiYmZmZDkgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZQpAQCAtNTQsOCArNTQsOCBAQAogCiBpZiBbIC16ICIkVklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiIF0gOyB0aGVuCiAgICAgX09MRF9WSVJUVUFMX1BTMT0iJFBTMSIKLSAgICBpZiBbICJ4X19WRU5WX05BTUVfXyIgIT0geCBdIDsgdGhlbgotCVBTMT0iX19WRU5WX05BTUVfXyRQUzEiCisgICAgaWYgWyAieF9fVkVOVl9QUk9NUFRfXyIgIT0geCBdIDsgdGhlbgorCVBTMT0iX19WRU5WX1BST01QVF9fJFBTMSIKICAgICBlbHNlCiAgICAgaWYgWyAiYGJhc2VuYW1lIFwiJFZJUlRVQUxfRU5WXCJgIiA9ICJfXyIgXSA7IHRoZW4KICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaCBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuY3NoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDc5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaApAQCAtMCwwICsxLDM3IEBACisjIFRoaXMgZmlsZSBtdXN0IGJlIHVzZWQgd2l0aCAic291cmNlIGJpbi9hY3RpdmF0ZS5jc2giICpmcm9tIGNzaCouCisjIFlvdSBjYW5ub3QgcnVuIGl0IGRpcmVjdGx5LgorIyBDcmVhdGVkIGJ5IERhdmlkZSBEaSBCbGFzaSA8ZGF2aWRlZGJAZ21haWwuY29tPi4KKyMgUG9ydGVkIHRvIFB5dGhvbiAzLjMgdmVudiBieSBBbmRyZXcgU3ZldGxvdiA8YW5kcmV3LnN2ZXRsb3ZAZ21haWwuY29tPgorCithbGlhcyBkZWFjdGl2YXRlICd0ZXN0ICQ/X09MRF9WSVJUVUFMX1BBVEggIT0gMCAmJiBzZXRlbnYgUEFUSCAiJF9PTERfVklSVFVBTF9QQVRIIiAmJiB1bnNldCBfT0xEX1ZJUlRVQUxfUEFUSDsgcmVoYXNoOyB0ZXN0ICQ/X09MRF9WSVJUVUFMX1BST01QVCAhPSAwICYmIHNldCBwcm9tcHQ9IiRfT0xEX1ZJUlRVQUxfUFJPTVBUIiAmJiB1bnNldCBfT0xEX1ZJUlRVQUxfUFJPTVBUOyB1bnNldGVudiBWSVJUVUFMX0VOVjsgdGVzdCAiXCE6KiIgIT0gIm5vbmRlc3RydWN0aXZlIiAmJiB1bmFsaWFzIGRlYWN0aXZhdGUnCisKKyMgVW5zZXQgaXJyZWxhdmVudCB2YXJpYWJsZXMuCitkZWFjdGl2YXRlIG5vbmRlc3RydWN0aXZlCisKK3NldGVudiBWSVJUVUFMX0VOViAiX19WRU5WX0RJUl9fIgorCitzZXQgX09MRF9WSVJUVUFMX1BBVEg9IiRQQVRIIgorc2V0ZW52IFBBVEggIiRWSVJUVUFMX0VOVi9fX1ZFTlZfQklOX05BTUVfXzokUEFUSCIKKworCitzZXQgX09MRF9WSVJUVUFMX1BST01QVD0iJHByb21wdCIKKworaWYgKCEgIiQ/VklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiKSB0aGVuCisgICAgaWYgKCJfX1ZFTlZfTkFNRV9fIiAhPSAiIikgdGhlbgorICAgICAgICBzZXQgZW52X25hbWUgPSAiX19WRU5WX05BTUVfXyIKKyAgICBlbHNlCisgICAgICAgIGlmIChgYmFzZW5hbWUgIlZJUlRVQUxfRU5WImAgPT0gIl9fIikgdGhlbgorICAgICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnpldGFkZXYuY29tL3NvZnR3YXJlL2FzcGVuLworICAgICAgICAgICAgc2V0IGVudl9uYW1lID0gYGJhc2VuYW1lIFxgZGlybmFtZSAiJFZJUlRVQUxfRU5WIlxgYAorICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXQgZW52X25hbWUgPSBgYmFzZW5hbWUgIiRWSVJUVUFMX0VOViJgCisgICAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgICBzZXQgcHJvbXB0ID0gIlskZW52X25hbWVdICRwcm9tcHQiCisgICAgdW5zZXQgZW52X25hbWUKK2VuZGlmCisKK2FsaWFzIHB5ZG9jIHB5dGhvbiAtbSBweWRvYworCityZWhhc2gKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaCBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTM5MWFhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5maXNoCkBAIC0wLDAgKzEsNzQgQEAKKyMgVGhpcyBmaWxlIG11c3QgYmUgdXNlZCB3aXRoICIuIGJpbi9hY3RpdmF0ZS5maXNoIiAqZnJvbSBmaXNoKiAoaHR0cDovL2Zpc2hzaGVsbC5vcmcpCisjIHlvdSBjYW5ub3QgcnVuIGl0IGRpcmVjdGx5CisKK2Z1bmN0aW9uIGRlYWN0aXZhdGUgIC1kICJFeGl0IHZpcnR1YWxlbnYgYW5kIHJldHVybiB0byBub3JtYWwgc2hlbGwgZW52aXJvbm1lbnQiCisgICAgIyByZXNldCBvbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgaWYgdGVzdCAtbiAiJF9PTERfVklSVFVBTF9QQVRIIgorICAgICAgICBzZXQgLWd4IFBBVEggJF9PTERfVklSVFVBTF9QQVRICisgICAgICAgIHNldCAtZSBfT0xEX1ZJUlRVQUxfUEFUSAorICAgIGVuZAorICAgIGlmIHRlc3QgLW4gIiRfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSIKKyAgICAgICAgc2V0IC1neCBQWVRIT05IT01FICRfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQorICAgICAgICBzZXQgLWUgX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUKKyAgICBlbmQKKworICAgIGlmIHRlc3QgLW4gIiRfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFIgorICAgICAgICBmdW5jdGlvbnMgLWUgZmlzaF9wcm9tcHQKKyAgICAgICAgc2V0IC1lIF9PTERfRklTSF9QUk9NUFRfT1ZFUlJJREUKKyAgICAgICAgLiAoIGJlZ2luCisgICAgICAgICAgICAgICAgcHJpbnRmICJmdW5jdGlvbiBmaXNoX3Byb21wdFxuXHQjIgorICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyBfb2xkX2Zpc2hfcHJvbXB0CisgICAgICAgICAgICBlbmQgfCBwc3ViICkKKyAgICAgICAgZnVuY3Rpb25zIC1lIF9vbGRfZmlzaF9wcm9tcHQKKyAgICBlbmQKKworICAgIHNldCAtZSBWSVJUVUFMX0VOVgorICAgIGlmIHRlc3QgIiRhcmd2WzFdIiAhPSAibm9uZGVzdHJ1Y3RpdmUiCisgICAgICAgICMgU2VsZiBkZXN0cnVjdCEKKyAgICAgICAgZnVuY3Rpb25zIC1lIGRlYWN0aXZhdGUKKyAgICBlbmQKK2VuZAorCisjIHVuc2V0IGlycmVsYXZlbnQgdmFyaWFibGVzCitkZWFjdGl2YXRlIG5vbmRlc3RydWN0aXZlCisKK3NldCAtZ3ggVklSVFVBTF9FTlYgIl9fVkVOVl9ESVJfXyIKKworc2V0IC1neCBfT0xEX1ZJUlRVQUxfUEFUSCAkUEFUSAorc2V0IC1neCBQQVRIICIkVklSVFVBTF9FTlYvX19WRU5WX0JJTl9OQU1FX18iICRQQVRICisKKyMgdW5zZXQgUFlUSE9OSE9NRSBpZiBzZXQKK2lmIHNldCAtcSBQWVRIT05IT01FCisgICAgc2V0IC1neCBfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSAkUFlUSE9OSE9NRQorICAgIHNldCAtZSBQWVRIT05IT01FCitlbmQKKworaWYgdGVzdCAteiAiJFZJUlRVQUxfRU5WX0RJU0FCTEVfUFJPTVBUIgorICAgICMgZmlzaCB1c2VzIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhbiBlbnYgdmFyIHRvIGdlbmVyYXRlIHRoZSBwcm9tcHQuCisKKyAgICAjIHNhdmUgdGhlIGN1cnJlbnQgZmlzaF9wcm9tcHQgZnVuY3Rpb24gYXMgdGhlIGZ1bmN0aW9uIF9vbGRfZmlzaF9wcm9tcHQKKyAgICAuICggYmVnaW4KKyAgICAgICAgICAgIHByaW50ZiAiZnVuY3Rpb24gX29sZF9maXNoX3Byb21wdFxuXHQjIgorICAgICAgICAgICAgZnVuY3Rpb25zIGZpc2hfcHJvbXB0CisgICAgICAgIGVuZCB8IHBzdWIgKQorCisgICAgIyB3aXRoIHRoZSBvcmlnaW5hbCBwcm9tcHQgZnVuY3Rpb24gcmVuYW1lZCwgd2UgY2FuIG92ZXJyaWRlIHdpdGggb3VyIG93bi4KKyAgICBmdW5jdGlvbiBmaXNoX3Byb21wdAorICAgICAgICAjIFByb21wdCBvdmVycmlkZT8KKyAgICAgICAgaWYgdGVzdCAtbiAiX19WRU5WX1BST01QVF9fIgorICAgICAgICAgICAgcHJpbnRmICIlcyVzJXMiICJfX1ZFTlZfUFJPTVBUX18iIChzZXRfY29sb3Igbm9ybWFsKSAoX29sZF9maXNoX3Byb21wdCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKyAgICAgICAgIyAuLi5PdGhlcndpc2UsIHByZXBlbmQgZW52CisgICAgICAgIHNldCAtbCBfY2hlY2tiYXNlIChiYXNlbmFtZSAiJFZJUlRVQUxfRU5WIikKKyAgICAgICAgaWYgdGVzdCAkX2NoZWNrYmFzZSA9ICJfXyIKKyAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBc3BlbiBtYWdpYyBkaXJlY3RvcmllcworICAgICAgICAgICAgIyBzZWUgaHR0cDovL3d3dy56ZXRhZGV2LmNvbS9zb2Z0d2FyZS9hc3Blbi8KKyAgICAgICAgICAgIHByaW50ZiAiJXNbJXNdJXMgJXMiIChzZXRfY29sb3IgLWIgYmx1ZSB3aGl0ZSkgKGJhc2VuYW1lIChkaXJuYW1lICIkVklSVFVBTF9FTlYiKSkgKHNldF9jb2xvciBub3JtYWwpIChfb2xkX2Zpc2hfcHJvbXB0KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYgIiVzKCVzKSVzJXMiIChzZXRfY29sb3IgLWIgYmx1ZSB3aGl0ZSkgKGJhc2VuYW1lICIkVklSVFVBTF9FTlYiKSAoc2V0X2NvbG9yIG5vcm1hbCkgKF9vbGRfZmlzaF9wcm9tcHQpCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgc2V0IC1neCBfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFICIkVklSVFVBTF9FTlYiCitlbmQKZGlmZiAtLWdpdCBhL0xpYi93YXJuaW5ncy5weSBiL0xpYi93YXJuaW5ncy5weQppbmRleCBlZGJiYjVlLi5hNDI3ZTM1IDEwMDY0NAotLS0gYS9MaWIvd2FybmluZ3MucHkKKysrIGIvTGliL3dhcm5pbmdzLnB5CkBAIC0xLDkgKzEsNSBAQAogIiIiUHl0aG9uIHBhcnQgb2YgdGhlIHdhcm5pbmdzIHN1YnN5c3RlbS4iIiIKIAotIyBOb3RlOiBmdW5jdGlvbiBsZXZlbCBpbXBvcnRzIHNob3VsZCAqbm90KiBiZSB1c2VkCi0jIGluIHRoaXMgbW9kdWxlIGFzIGl0IG1heSBjYXVzZSBpbXBvcnQgbG9jayBkZWFkbG9jay4KLSMgU2VlIGJ1ZyA2ODM2NTguCi1pbXBvcnQgbGluZWNhY2hlCiBpbXBvcnQgc3lzCiAKIF9fYWxsX18gPSBbIndhcm4iLCAic2hvd3dhcm5pbmciLCAiZm9ybWF0d2FybmluZyIsICJmaWx0ZXJ3YXJuaW5ncyIsCkBAIC0xNiwxMSArMTIsMTIgQEAKICAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKICAgICB0cnk6CiAgICAgICAgIGZpbGUud3JpdGUoZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgbGluZSkpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MgIyB0aGUgZmlsZSAocHJvYmFibHkgc3RkZXJyKSBpcyBpbnZhbGlkIC0gdGhpcyB3YXJuaW5nIGdldHMgbG9zdC4KIAogZGVmIGZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGxpbmU9Tm9uZSk6CiAgICAgIiIiRnVuY3Rpb24gdG8gZm9ybWF0IGEgd2FybmluZyB0aGUgc3RhbmRhcmQgd2F5LiIiIgorICAgIGltcG9ydCBsaW5lY2FjaGUKICAgICBzID0gICIlczolczogJXM6ICVzXG4iICUgKGZpbGVuYW1lLCBsaW5lbm8sIGNhdGVnb3J5Ll9fbmFtZV9fLCBtZXNzYWdlKQogICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vKSBpZiBsaW5lIGlzIE5vbmUgZWxzZSBsaW5lCiAgICAgaWYgbGluZToKQEAgLTIzMyw2ICsyMzAsNyBAQAogCiAgICAgIyBQcmltZSB0aGUgbGluZWNhY2hlIGZvciBmb3JtYXR0aW5nLCBpbiBjYXNlIHRoZQogICAgICMgImZpbGUiIGlzIGFjdHVhbGx5IGluIGEgemlwZmlsZSBvciBzb21ldGhpbmcuCisgICAgaW1wb3J0IGxpbmVjYWNoZQogICAgIGxpbmVjYWNoZS5nZXRsaW5lcyhmaWxlbmFtZSwgbW9kdWxlX2dsb2JhbHMpCiAKICAgICBpZiBhY3Rpb24gPT0gImVycm9yIjoKZGlmZiAtLWdpdCBhL0xpYi93YXZlLnB5IGIvTGliL3dhdmUucHkKaW5kZXggYTFkYWVhZC4uMGU2NjI4YiAxMDA2NDQKLS0tIGEvTGliL3dhdmUucHkKKysrIGIvTGliL3dhdmUucHkKQEAgLTE4LDcgKzE4LDcgQEAKICAgICAgIGdldGNvbXB0eXBlKCkgICAtLSByZXR1cm5zIGNvbXByZXNzaW9uIHR5cGUgKCdOT05FJyBmb3IgbGluZWFyIHNhbXBsZXMpCiAgICAgICBnZXRjb21wbmFtZSgpICAgLS0gcmV0dXJucyBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSAoJ25vdCBjb21wcmVzc2VkJyBsaW5lYXIgc2FtcGxlcykKLSAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCisgICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIG5hbWVkdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmUgaW4gdGhlIGFib3ZlIG9yZGVyCiAgICAgICBnZXRtYXJrZXJzKCkgICAgLS0gcmV0dXJucyBOb25lIChmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIGFpZmMgbW9kdWxlKQpAQCAtODIsMTQgKzgyLDEzIEBACiAKIF9hcnJheV9mbXRzID0gTm9uZSwgJ2InLCAnaCcsIE5vbmUsICdpJwogCi0jIERldGVybWluZSBlbmRpYW4tbmVzcwogaW1wb3J0IHN0cnVjdAotaWYgc3RydWN0LnBhY2soImgiLCAxKSA9PSBiIlwwMDBcMDAxIjoKLSAgICBiaWdfZW5kaWFuID0gMQotZWxzZToKLSAgICBiaWdfZW5kaWFuID0gMAotCitpbXBvcnQgc3lzCiBmcm9tIGNodW5rIGltcG9ydCBDaHVuaworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorCitfd2F2ZV9wYXJhbXMgPSBuYW1lZHR1cGxlKCdfd2F2ZV9wYXJhbXMnLAorICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQogCiBjbGFzcyBXYXZlX3JlYWQ6CiAgICAgIiIiVmFyaWFibGVzIHVzZWQgaW4gdGhpcyBjbGFzczoKQEAgLTE2OCw2ICsxNjcsMTMgQEAKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTIwNiw5ICsyMTIsOSBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY29tcG5hbWUKIAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLCBcCi0gICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTIzMSw3ICsyMzcsNyBAQAogICAgICAgICAgICAgc2VsZi5fZGF0YV9zZWVrX25lZWRlZCA9IDAKICAgICAgICAgaWYgbmZyYW1lcyA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPiAxIGFuZCBiaWdfZW5kaWFuOgorICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPiAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgogICAgICAgICAgICAgIyB1bmZvcnR1bmF0ZWx5IHRoZSBmcm9tZmlsZSgpIG1ldGhvZCBkb2VzIG5vdCB0YWtlCiAgICAgICAgICAgICAjIHNvbWV0aGluZyB0aGF0IG9ubHkgbG9va3MgbGlrZSBhIGZpbGUgb2JqZWN0LCBzbwogICAgICAgICAgICAgIyB3ZSBoYXZlIHRvIHJlYWNoIGludG8gdGhlIGlubmFyZHMgb2YgdGhlIGNodW5rIG9iamVjdApAQCAtMzI1LDYgKzMzMSwxMiBAQAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTM5OSw4ICs0MTEsOCBAQAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9uY2hhbm5lbHMgb3Igbm90IHNlbGYuX3NhbXB3aWR0aCBvciBub3Qgc2VsZi5fZnJhbWVyYXRlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ25vdCBhbGwgcGFyYW1ldGVycyBzZXQnKQotICAgICAgICByZXR1cm4gc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9zYW1wd2lkdGgsIHNlbGYuX2ZyYW1lcmF0ZSwgXAotICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLAorICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUpCiAKICAgICBkZWYgc2V0bWFyayhzZWxmLCBpZCwgcG9zLCBuYW1lKToKICAgICAgICAgcmFpc2UgRXJyb3IoJ3NldG1hcmsoKSBub3Qgc3VwcG9ydGVkJykKQEAgLTQxOSw3ICs0MzEsNyBAQAogICAgICAgICBuZnJhbWVzID0gbGVuKGRhdGEpIC8vIChzZWxmLl9zYW1wd2lkdGggKiBzZWxmLl9uY2hhbm5lbHMpCiAgICAgICAgIGlmIHNlbGYuX2NvbnZlcnQ6CiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fY29udmVydChkYXRhKQotICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPiAxIGFuZCBiaWdfZW5kaWFuOgorICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPiAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgogICAgICAgICAgICAgaW1wb3J0IGFycmF5CiAgICAgICAgICAgICBkYXRhID0gYXJyYXkuYXJyYXkoX2FycmF5X2ZtdHNbc2VsZi5fc2FtcHdpZHRoXSwgZGF0YSkKICAgICAgICAgICAgIGFzc2VydCBkYXRhLml0ZW1zaXplID09IHNlbGYuX3NhbXB3aWR0aApkaWZmIC0tZ2l0IGEvTGliL3dlYWtyZWYucHkgYi9MaWIvd2Vha3JlZi5weQppbmRleCBmY2I2Yjc0Li5mNmE0MGNhIDEwMDY0NAotLS0gYS9MaWIvd2Vha3JlZi5weQorKysgYi9MaWIvd2Vha3JlZi5weQpAQCAtMjEsMTMgKzIxLDY5IEBACiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0LCBfSXRlcmF0aW9uR3VhcmQKIAogaW1wb3J0IGNvbGxlY3Rpb25zICAjIEltcG9ydCBhZnRlciBfd2Vha3JlZiB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnQuCitpbXBvcnQgc3lzCitpbXBvcnQgaXRlcnRvb2xzCiAKIFByb3h5VHlwZXMgPSAoUHJveHlUeXBlLCBDYWxsYWJsZVByb3h5VHlwZSkKIAogX19hbGxfXyA9IFsicmVmIiwgInByb3h5IiwgImdldHdlYWtyZWZjb3VudCIsICJnZXR3ZWFrcmVmcyIsCiAgICAgICAgICAgICJXZWFrS2V5RGljdGlvbmFyeSIsICJSZWZlcmVuY2VUeXBlIiwgIlByb3h5VHlwZSIsCiAgICAgICAgICAgICJDYWxsYWJsZVByb3h5VHlwZSIsICJQcm94eVR5cGVzIiwgIldlYWtWYWx1ZURpY3Rpb25hcnkiLAotICAgICAgICAgICAiV2Vha1NldCJdCisgICAgICAgICAgICJXZWFrU2V0IiwgIldlYWtNZXRob2QiLCAiZmluYWxpemUiXQorCisKK2NsYXNzIFdlYWtNZXRob2QocmVmKToKKyAgICAiIiIKKyAgICBBIGN1c3RvbSBgd2Vha3JlZi5yZWZgIHN1YmNsYXNzIHdoaWNoIHNpbXVsYXRlcyBhIHdlYWsgcmVmZXJlbmNlIHRvCisgICAgYSBib3VuZCBtZXRob2QsIHdvcmtpbmcgYXJvdW5kIHRoZSBsaWZldGltZSBwcm9ibGVtIG9mIGJvdW5kIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAiX2Z1bmNfcmVmIiwgIl9tZXRoX3R5cGUiLCAiX2FsaXZlIiwgIl9fd2Vha3JlZl9fIgorCisgICAgZGVmIF9fbmV3X18oY2xzLCBtZXRoLCBjYWxsYmFjaz1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqID0gbWV0aC5fX3NlbGZfXworICAgICAgICAgICAgZnVuYyA9IG1ldGguX19mdW5jX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBib3VuZCBtZXRob2QsIG5vdCB7fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHR5cGUobWV0aCkpKSBmcm9tIE5vbmUKKyAgICAgICAgZGVmIF9jYihhcmcpOgorICAgICAgICAgICAgIyBUaGUgc2VsZi13ZWFrcmVmIHRyaWNrIGlzIG5lZWRlZCB0byBhdm9pZCBjcmVhdGluZyBhIHJlZmVyZW5jZQorICAgICAgICAgICAgIyBjeWNsZS4KKyAgICAgICAgICAgIHNlbGYgPSBzZWxmX3dyKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2FsaXZlOgorICAgICAgICAgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soc2VsZikKKyAgICAgICAgc2VsZiA9IHJlZi5fX25ld19fKGNscywgb2JqLCBfY2IpCisgICAgICAgIHNlbGYuX2Z1bmNfcmVmID0gcmVmKGZ1bmMsIF9jYikKKyAgICAgICAgc2VsZi5fbWV0aF90eXBlID0gdHlwZShtZXRoKQorICAgICAgICBzZWxmLl9hbGl2ZSA9IFRydWUKKyAgICAgICAgc2VsZl93ciA9IHJlZihzZWxmKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICBvYmogPSBzdXBlcigpLl9fY2FsbF9fKCkKKyAgICAgICAgZnVuYyA9IHNlbGYuX2Z1bmNfcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIE5vbmUgb3IgZnVuYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ldGhfdHlwZShmdW5jLCBvYmopCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgV2Vha01ldGhvZCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxpdmUgb3Igbm90IG90aGVyLl9hbGl2ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiBpcyBvdGhlcgorICAgICAgICAgICAgcmV0dXJuIHJlZi5fX2VxX18oc2VsZiwgb3RoZXIpIGFuZCBzZWxmLl9mdW5jX3JlZiA9PSBvdGhlci5fZnVuY19yZWYKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgV2Vha01ldGhvZCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxpdmUgb3Igbm90IG90aGVyLl9hbGl2ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiBpcyBub3Qgb3RoZXIKKyAgICAgICAgICAgIHJldHVybiByZWYuX19uZV9fKHNlbGYsIG90aGVyKSBvciBzZWxmLl9mdW5jX3JlZiAhPSBvdGhlci5fZnVuY19yZWYKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIF9faGFzaF9fID0gcmVmLl9faGFzaF9fCiAKIAogY2xhc3MgV2Vha1ZhbHVlRGljdGlvbmFyeShjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CkBAIC0xNTMsOCArMjA5LDcgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBfSXRlcmF0aW9uR3VhcmQoc2VsZik6Ci0gICAgICAgICAgICBmb3Igd3IgaW4gc2VsZi5kYXRhLnZhbHVlcygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHdyCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuZGF0YS52YWx1ZXMoKQogCiAgICAgZGVmIHZhbHVlcyhzZWxmKToKICAgICAgICAgd2l0aCBfSXRlcmF0aW9uR3VhcmQoc2VsZik6CkBAIC0zODMsMyArNDM4LDE0MCBAQAogICAgICAgICAgICAgICAgIGRbcmVmKGtleSwgc2VsZi5fcmVtb3ZlKV0gPSB2YWx1ZQogICAgICAgICBpZiBsZW4oa3dhcmdzKToKICAgICAgICAgICAgIHNlbGYudXBkYXRlKGt3YXJncykKKworCitjbGFzcyBmaW5hbGl6ZToKKyAgICAiIiJDbGFzcyBmb3IgZmluYWxpemF0aW9uIG9mIHdlYWtyZWZhYmxlIG9iamVjdHMKKworICAgIGZpbmFsaXplKG9iaiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKSByZXR1cm5zIGEgY2FsbGFibGUgZmluYWxpemVyCisgICAgb2JqZWN0IHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gb2JqIGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBUaGUKKyAgICBmaXJzdCB0aW1lIHRoZSBmaW5hbGl6ZXIgaXMgY2FsbGVkIGl0IGV2YWx1YXRlcyBmdW5jKCphcmcsICoqa3dhcmdzKQorICAgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIEFmdGVyIHRoaXMgdGhlIGZpbmFsaXplciBpcyBkZWFkLCBhbmQKKyAgICBjYWxsaW5nIGl0IGp1c3QgcmV0dXJucyBOb25lLgorCisgICAgV2hlbiB0aGUgcHJvZ3JhbSBleGl0cyBhbnkgcmVtYWluaW5nIGZpbmFsaXplcnMgZm9yIHdoaWNoIHRoZQorICAgIGF0ZXhpdCBhdHRyaWJ1dGUgaXMgdHJ1ZSB3aWxsIGJlIHJ1biBpbiByZXZlcnNlIG9yZGVyIG9mIGNyZWF0aW9uLgorICAgIEJ5IGRlZmF1bHQgYXRleGl0IGlzIHRydWUuCisgICAgIiIiCisKKyAgICAjIEZpbmFsaXplciBvYmplY3RzIGRvbid0IGhhdmUgYW55IHN0YXRlIG9mIHRoZWlyIG93bi4gIFRoZXkgYXJlCisgICAgIyBqdXN0IHVzZWQgYXMga2V5cyB0byBsb29rdXAgX0luZm8gb2JqZWN0cyBpbiB0aGUgcmVnaXN0cnkuICBUaGlzCisgICAgIyBlbnN1cmVzIHRoYXQgdGhleSBjYW5ub3QgYmUgcGFydCBvZiBhIHJlZi1jeWNsZS4KKworICAgIF9fc2xvdHNfXyA9ICgpCisgICAgX3JlZ2lzdHJ5ID0ge30KKyAgICBfc2h1dGRvd24gPSBGYWxzZQorICAgIF9pbmRleF9pdGVyID0gaXRlcnRvb2xzLmNvdW50KCkKKyAgICBfZGlydHkgPSBGYWxzZQorICAgIF9yZWdpc3RlcmVkX3dpdGhfYXRleGl0ID0gRmFsc2UKKworICAgIGNsYXNzIF9JbmZvOgorICAgICAgICBfX3Nsb3RzX18gPSAoIndlYWtyZWYiLCAiZnVuYyIsICJhcmdzIiwgImt3YXJncyIsICJhdGV4aXQiLCAiaW5kZXgiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3JlZ2lzdGVyZWRfd2l0aF9hdGV4aXQ6CisgICAgICAgICAgICAjIFdlIG1heSByZWdpc3RlciB0aGUgZXhpdCBmdW5jdGlvbiBtb3JlIHRoYW4gb25jZSBiZWNhdXNlCisgICAgICAgICAgICAjIG9mIGEgdGhyZWFkIHJhY2UsIGJ1dCB0aGF0IGlzIGhhcm1sZXNzCisgICAgICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5fZXhpdGZ1bmMpCisgICAgICAgICAgICBmaW5hbGl6ZS5fcmVnaXN0ZXJlZF93aXRoX2F0ZXhpdCA9IFRydWUKKyAgICAgICAgaW5mbyA9IHNlbGYuX0luZm8oKQorICAgICAgICBpbmZvLndlYWtyZWYgPSByZWYob2JqLCBzZWxmKQorICAgICAgICBpbmZvLmZ1bmMgPSBmdW5jCisgICAgICAgIGluZm8uYXJncyA9IGFyZ3MKKyAgICAgICAgaW5mby5rd2FyZ3MgPSBrd2FyZ3Mgb3IgTm9uZQorICAgICAgICBpbmZvLmF0ZXhpdCA9IFRydWUKKyAgICAgICAgaW5mby5pbmRleCA9IG5leHQoc2VsZi5faW5kZXhfaXRlcikKKyAgICAgICAgc2VsZi5fcmVnaXN0cnlbc2VsZl0gPSBpbmZvCisgICAgICAgIGZpbmFsaXplLl9kaXJ0eSA9IFRydWUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBfPU5vbmUpOgorICAgICAgICAiIiJJZiBhbGl2ZSB0aGVuIG1hcmsgYXMgZGVhZCBhbmQgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKTsKKyAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBOb25lIiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5wb3Aoc2VsZiwgTm9uZSkKKyAgICAgICAgaWYgaW5mbyBhbmQgbm90IHNlbGYuX3NodXRkb3duOgorICAgICAgICAgICAgcmV0dXJuIGluZm8uZnVuYygqaW5mby5hcmdzLCAqKihpbmZvLmt3YXJncyBvciB7fSkpCisKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAiIiJJZiBhbGl2ZSB0aGVuIG1hcmsgYXMgZGVhZCBhbmQgcmV0dXJuIChvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncyk7CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZSIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIG9iaiA9IGluZm8gYW5kIGluZm8ud2Vha3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZSBhbmQgc2VsZi5fcmVnaXN0cnkucG9wKHNlbGYsIE5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIChvYmosIGluZm8uZnVuYywgaW5mby5hcmdzLCBpbmZvLmt3YXJncyBvciB7fSkKKworICAgIGRlZiBwZWVrKHNlbGYpOgorICAgICAgICAiIiJJZiBhbGl2ZSB0aGVuIHJldHVybiAob2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MpOworICAgICAgICBvdGhlcndpc2UgcmV0dXJuIE5vbmUiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBvYmogPSBpbmZvIGFuZCBpbmZvLndlYWtyZWYoKQorICAgICAgICBpZiBvYmogaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gKG9iaiwgaW5mby5mdW5jLCBpbmZvLmFyZ3MsIGluZm8ua3dhcmdzIG9yIHt9KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFsaXZlKHNlbGYpOgorICAgICAgICAiIiJXaGV0aGVyIGZpbmFsaXplciBpcyBhbGl2ZSIiIgorICAgICAgICByZXR1cm4gc2VsZiBpbiBzZWxmLl9yZWdpc3RyeQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGF0ZXhpdChzZWxmKToKKyAgICAgICAgIiIiV2hldGhlciBmaW5hbGl6ZXIgc2hvdWxkIGJlIGNhbGxlZCBhdCBleGl0IiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgcmV0dXJuIGJvb2woaW5mbykgYW5kIGluZm8uYXRleGl0CisKKyAgICBAYXRleGl0LnNldHRlcgorICAgIGRlZiBhdGV4aXQoc2VsZiwgdmFsdWUpOgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIGlmIGluZm86CisgICAgICAgICAgICBpbmZvLmF0ZXhpdCA9IGJvb2wodmFsdWUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgb2JqID0gaW5mbyBhbmQgaW5mby53ZWFrcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gJzwlcyBvYmplY3QgYXQgJSN4OyBkZWFkPicgJSAodHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJzwlcyBvYmplY3QgYXQgJSN4OyBmb3IgJXIgYXQgJSN4PicgJSBcCisgICAgICAgICAgICAgICAgKHR5cGUoc2VsZikuX19uYW1lX18sIGlkKHNlbGYpLCB0eXBlKG9iaikuX19uYW1lX18sIGlkKG9iaikpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3NlbGVjdF9mb3JfZXhpdChjbHMpOgorICAgICAgICAjIFJldHVybiBsaXZlIGZpbmFsaXplcnMgbWFya2VkIGZvciBleGl0LCBvbGRlc3QgZmlyc3QKKyAgICAgICAgTCA9IFsoZixpKSBmb3IgKGYsaSkgaW4gY2xzLl9yZWdpc3RyeS5pdGVtcygpIGlmIGkuYXRleGl0XQorICAgICAgICBMLnNvcnQoa2V5PWxhbWJkYSBpdGVtOml0ZW1bMV0uaW5kZXgpCisgICAgICAgIHJldHVybiBbZiBmb3IgKGYsaSkgaW4gTF0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZXhpdGZ1bmMoY2xzKToKKyAgICAgICAgIyBBdCBzaHV0ZG93biBpbnZva2UgZmluYWxpemVycyBmb3Igd2hpY2ggYXRleGl0IGlzIHRydWUuCisgICAgICAgICMgVGhpcyBpcyBjYWxsZWQgb25jZSBhbGwgb3RoZXIgbm9uLWRhZW1vbmljIHRocmVhZHMgaGF2ZSBiZWVuCisgICAgICAgICMgam9pbmVkLgorICAgICAgICByZWVuYWJsZV9nYyA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGNscy5fcmVnaXN0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICAgICAgaWYgZ2MuaXNlbmFibGVkKCk6CisgICAgICAgICAgICAgICAgICAgIHJlZW5hYmxlX2djID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgICAgICAgICBwZW5kaW5nID0gTm9uZQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGlmIHBlbmRpbmcgaXMgTm9uZSBvciBmaW5hbGl6ZS5fZGlydHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nID0gY2xzLl9zZWxlY3RfZm9yX2V4aXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUuX2RpcnR5ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBlbmRpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmID0gcGVuZGluZy5wb3AoKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGdjIGlzIGRpc2FibGVkLCBzbyAoYXNzdW1pbmcgbm8gZGFlbW9uaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhyZWFkcykgdGhlIGZvbGxvd2luZyBpcyB0aGUgb25seSBsaW5lIGluCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZnVuY3Rpb24gd2hpY2ggbWlnaHQgdHJpZ2dlciBjcmVhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIyBvZiBhIG5ldyBmaW5hbGl6ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZiBub3QgaW4gY2xzLl9yZWdpc3RyeQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBwcmV2ZW50IGFueSBtb3JlIGZpbmFsaXplcnMgZnJvbSBleGVjdXRpbmcgZHVyaW5nIHNodXRkb3duCisgICAgICAgICAgICBmaW5hbGl6ZS5fc2h1dGRvd24gPSBUcnVlCisgICAgICAgICAgICBpZiByZWVuYWJsZV9nYzoKKyAgICAgICAgICAgICAgICBnYy5lbmFibGUoKQpkaWZmIC0tZ2l0IGEvTGliL3dlYmJyb3dzZXIucHkgYi9MaWIvd2ViYnJvd3Nlci5weQppbmRleCA5NDVlZGE0Li4yNzE0YmQxIDEwMDY0NAotLS0gYS9MaWIvd2ViYnJvd3Nlci5weQorKysgYi9MaWIvd2ViYnJvd3Nlci5weQpAQCAtNSw2ICs1LDcgQEAKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgc2hsZXgKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdGF0CiBpbXBvcnQgc3VicHJvY2VzcwpAQCAtODMsNyArODQsNyBAQAogCiAgICAgIiIiCiAgICAgY21kID0gYnJvd3Nlci5zcGxpdCgpWzBdCi0gICAgaWYgbm90IF9pc2NvbW1hbmQoY21kKToKKyAgICBpZiBub3Qgc2h1dGlsLndoaWNoKGNtZCk6CiAgICAgICAgIHJldHVybiBbTm9uZSwgTm9uZV0KICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShjbWQpCiAgICAgdHJ5OgpAQCAtMTAyLDM4ICsxMDMsNiBAQAogICAgIHJldHVybiBbTm9uZSwgTm9uZV0KIAogCi1pZiBzeXMucGxhdGZvcm1bOjNdID09ICJ3aW4iOgotICAgIGRlZiBfaXNleGVjdXRhYmxlKGNtZCk6Ci0gICAgICAgIGNtZCA9IGNtZC5sb3dlcigpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNtZCkgYW5kIGNtZC5lbmRzd2l0aCgoIi5leGUiLCAiLmJhdCIpKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGZvciBleHQgaW4gIi5leGUiLCAiLmJhdCI6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQgKyBleHQpOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotZWxzZToKLSAgICBkZWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQpOgotICAgICAgICAgICAgbW9kZSA9IG9zLnN0YXQoY21kKVtzdGF0LlNUX01PREVdCi0gICAgICAgICAgICBpZiBtb2RlICYgc3RhdC5TX0lYVVNSIG9yIG1vZGUgJiBzdGF0LlNfSVhHUlAgb3IgbW9kZSAmIHN0YXQuU19JWE9USDoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotZGVmIF9pc2NvbW1hbmQoY21kKToKLSAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBjbWQgaXMgZXhlY3V0YWJsZSBvciBjYW4gYmUgZm91bmQgb24gdGhlIGV4ZWN1dGFibGUKLSAgICBzZWFyY2ggcGF0aC4iIiIKLSAgICBpZiBfaXNleGVjdXRhYmxlKGNtZCk6Ci0gICAgICAgIHJldHVybiBUcnVlCi0gICAgcGF0aCA9IG9zLmVudmlyb24uZ2V0KCJQQVRIIikKLSAgICBpZiBub3QgcGF0aDoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgZm9yIGQgaW4gcGF0aC5zcGxpdChvcy5wYXRoc2VwKToKLSAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKGQsIGNtZCkKLSAgICAgICAgaWYgX2lzZXhlY3V0YWJsZShleGUpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gRmFsc2UKLQotCiAjIEdlbmVyYWwgcGFyZW50IGNsYXNzZXMKIAogY2xhc3MgQmFzZUJyb3dzZXIob2JqZWN0KToKQEAgLTQxOCwxMSArMzg3LDExIEBACiAgICAgICAgICAgICAjIG5lZWQgdG8gUElORyBlYWNoIG9uZSB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0J3MgbGl2ZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHMuY29ubmVjdChmbikKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjIG5vIGdvb2Q7IGF0dGVtcHQgdG8gY2xlYW4gaXQgb3V0LCBidXQgZG9uJ3QgZmFpbDoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmbikKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gcwpAQCAtNDUzLDIyICs0MjIsMjIgQEAKIGRlZiByZWdpc3Rlcl9YX2Jyb3dzZXJzKCk6CiAKICAgICAjIHVzZSB4ZGctb3BlbiBpZiBhcm91bmQKLSAgICBpZiBfaXNjb21tYW5kKCJ4ZGctb3BlbiIpOgorICAgIGlmIHNodXRpbC53aGljaCgieGRnLW9wZW4iKToKICAgICAgICAgcmVnaXN0ZXIoInhkZy1vcGVuIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoInhkZy1vcGVuIikpCiAKICAgICAjIFRoZSBkZWZhdWx0IEdOT01FMyBicm93c2VyCi0gICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgX2lzY29tbWFuZCgiZ3Zmcy1vcGVuIik6CisgICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgc2h1dGlsLndoaWNoKCJndmZzLW9wZW4iKToKICAgICAgICAgcmVnaXN0ZXIoImd2ZnMtb3BlbiIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJndmZzLW9wZW4iKSkKIAogICAgICMgVGhlIGRlZmF1bHQgR05PTUUgYnJvd3NlcgotICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIF9pc2NvbW1hbmQoImdub21lLW9wZW4iKToKKyAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBzaHV0aWwud2hpY2goImdub21lLW9wZW4iKToKICAgICAgICAgcmVnaXN0ZXIoImdub21lLW9wZW4iLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigiZ25vbWUtb3BlbiIpKQogCiAgICAgIyBUaGUgZGVmYXVsdCBLREUgYnJvd3NlcgotICAgIGlmICJLREVfRlVMTF9TRVNTSU9OIiBpbiBvcy5lbnZpcm9uIGFuZCBfaXNjb21tYW5kKCJrZm1jbGllbnQiKToKKyAgICBpZiAiS0RFX0ZVTExfU0VTU0lPTiIgaW4gb3MuZW52aXJvbiBhbmQgc2h1dGlsLndoaWNoKCJrZm1jbGllbnQiKToKICAgICAgICAgcmVnaXN0ZXIoImtmbWNsaWVudCIsIEtvbnF1ZXJvciwgS29ucXVlcm9yKCJrZm1jbGllbnQiKSkKIAotICAgIGlmIF9pc2NvbW1hbmQoIngtd3d3LWJyb3dzZXIiKToKKyAgICBpZiBzaHV0aWwud2hpY2goIngtd3d3LWJyb3dzZXIiKToKICAgICAgICAgcmVnaXN0ZXIoIngtd3d3LWJyb3dzZXIiLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigieC13d3ctYnJvd3NlciIpKQogCiAgICAgIyBUaGUgTW96aWxsYS9OZXRzY2FwZSBicm93c2VycwpAQCAtNDc2LDM5ICs0NDUsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgIm1vemlsbGEtZmlyZWJpcmQiLCAiZmlyZWJpcmQiLAogICAgICAgICAgICAgICAgICAgICAiaWNld2Vhc2VsIiwgImljZWFwZSIsCiAgICAgICAgICAgICAgICAgICAgICJzZWFtb25rZXkiLCAibW96aWxsYSIsICJuZXRzY2FwZSIpOgotICAgICAgICBpZiBfaXNjb21tYW5kKGJyb3dzZXIpOgorICAgICAgICBpZiBzaHV0aWwud2hpY2goYnJvd3Nlcik6CiAgICAgICAgICAgICByZWdpc3Rlcihicm93c2VyLCBOb25lLCBNb3ppbGxhKGJyb3dzZXIpKQogCiAgICAgIyBLb25xdWVyb3Iva2ZtLCB0aGUgS0RFIGJyb3dzZXIuCi0gICAgaWYgX2lzY29tbWFuZCgia2ZtIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJrZm0iKToKICAgICAgICAgcmVnaXN0ZXIoImtmbSIsIEtvbnF1ZXJvciwgS29ucXVlcm9yKCJrZm0iKSkKLSAgICBlbGlmIF9pc2NvbW1hbmQoImtvbnF1ZXJvciIpOgorICAgIGVsaWYgc2h1dGlsLndoaWNoKCJrb25xdWVyb3IiKToKICAgICAgICAgcmVnaXN0ZXIoImtvbnF1ZXJvciIsIEtvbnF1ZXJvciwgS29ucXVlcm9yKCJrb25xdWVyb3IiKSkKIAogICAgICMgR25vbWUncyBHYWxlb24gYW5kIEVwaXBoYW55CiAgICAgZm9yIGJyb3dzZXIgaW4gKCJnYWxlb24iLCAiZXBpcGhhbnkiKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgR2FsZW9uKGJyb3dzZXIpKQogCiAgICAgIyBTa2lwc3RvbmUsIGFub3RoZXIgR3RrL01vemlsbGEgYmFzZWQgYnJvd3NlcgotICAgIGlmIF9pc2NvbW1hbmQoInNraXBzdG9uZSIpOgorICAgIGlmIHNodXRpbC53aGljaCgic2tpcHN0b25lIik6CiAgICAgICAgIHJlZ2lzdGVyKCJza2lwc3RvbmUiLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3Nlcigic2tpcHN0b25lIikpCiAKICAgICAjIEdvb2dsZSBDaHJvbWUvQ2hyb21pdW0gYnJvd3NlcnMKICAgICBmb3IgYnJvd3NlciBpbiAoImdvb2dsZS1jaHJvbWUiLCAiY2hyb21lIiwgImNocm9taXVtIiwgImNocm9taXVtLWJyb3dzZXIiKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgQ2hyb21lKGJyb3dzZXIpKQogCiAgICAgIyBPcGVyYSwgcXVpdGUgcG9wdWxhcgotICAgIGlmIF9pc2NvbW1hbmQoIm9wZXJhIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJvcGVyYSIpOgogICAgICAgICByZWdpc3Rlcigib3BlcmEiLCBOb25lLCBPcGVyYSgib3BlcmEiKSkKIAogICAgICMgTmV4dCwgTW9zYWljIC0tIG9sZCBidXQgc3RpbGwgaW4gdXNlLgotICAgIGlmIF9pc2NvbW1hbmQoIm1vc2FpYyIpOgorICAgIGlmIHNodXRpbC53aGljaCgibW9zYWljIik6CiAgICAgICAgIHJlZ2lzdGVyKCJtb3NhaWMiLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigibW9zYWljIikpCiAKICAgICAjIEdyYWlsLCB0aGUgUHl0aG9uIGJyb3dzZXIuIERvZXMgYW55Ym9keSBzdGlsbCB1c2UgaXQ/Ci0gICAgaWYgX2lzY29tbWFuZCgiZ3JhaWwiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImdyYWlsIik6CiAgICAgICAgIHJlZ2lzdGVyKCJncmFpbCIsIEdyYWlsLCBOb25lKQogCiAjIFByZWZlciBYIGJyb3dzZXJzIGlmIHByZXNlbnQKQEAgLTUxNywxOCArNDg2LDE4IEBACiAKICMgQWxzbyB0cnkgY29uc29sZSBicm93c2VycwogaWYgb3MuZW52aXJvbi5nZXQoIlRFUk0iKToKLSAgICBpZiBfaXNjb21tYW5kKCJ3d3ctYnJvd3NlciIpOgorICAgIGlmIHNodXRpbC53aGljaCgid3d3LWJyb3dzZXIiKToKICAgICAgICAgcmVnaXN0ZXIoInd3dy1icm93c2VyIiwgTm9uZSwgR2VuZXJpY0Jyb3dzZXIoInd3dy1icm93c2VyIikpCiAgICAgIyBUaGUgTGlua3MvZWxpbmtzIGJyb3dzZXJzIDxodHRwOi8vYXJ0YXgua2FybGluLm1mZi5jdW5pLmN6L35taWt1bGFzL2xpbmtzLz4KLSAgICBpZiBfaXNjb21tYW5kKCJsaW5rcyIpOgorICAgIGlmIHNodXRpbC53aGljaCgibGlua3MiKToKICAgICAgICAgcmVnaXN0ZXIoImxpbmtzIiwgTm9uZSwgR2VuZXJpY0Jyb3dzZXIoImxpbmtzIikpCi0gICAgaWYgX2lzY29tbWFuZCgiZWxpbmtzIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJlbGlua3MiKToKICAgICAgICAgcmVnaXN0ZXIoImVsaW5rcyIsIE5vbmUsIEVsaW5rcygiZWxpbmtzIikpCiAgICAgIyBUaGUgTHlueCBicm93c2VyIDxodHRwOi8vbHlueC5pc2Mub3JnLz4sIDxodHRwOi8vbHlueC5icm93c2VyLm9yZy8+Ci0gICAgaWYgX2lzY29tbWFuZCgibHlueCIpOgorICAgIGlmIHNodXRpbC53aGljaCgibHlueCIpOgogICAgICAgICByZWdpc3RlcigibHlueCIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJseW54IikpCiAgICAgIyBUaGUgdzNtIGJyb3dzZXIgPGh0dHA6Ly93M20uc291cmNlZm9yZ2UubmV0Lz4KLSAgICBpZiBfaXNjb21tYW5kKCJ3M20iKToKKyAgICBpZiBzaHV0aWwud2hpY2goInczbSIpOgogICAgICAgICByZWdpc3RlcigidzNtIiwgTm9uZSwgR2VuZXJpY0Jyb3dzZXIoInczbSIpKQogCiAjCkBAIC01NDAsNyArNTA5LDcgQEAKICAgICAgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZSh1cmwpCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBbRXJyb3IgMjJdIE5vIGFwcGxpY2F0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICAgIyBmaWxlIGZvciB0aGlzIG9wZXJhdGlvbjogJzxVUkw+JwogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtNTU4LDcgKzUyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludGVybmV0IEV4cGxvcmVyXFxJRVhQTE9SRS5FWEUiKQogICAgIGZvciBicm93c2VyIGluICgiZmlyZWZveCIsICJmaXJlYmlyZCIsICJzZWFtb25rZXkiLCAibW96aWxsYSIsCiAgICAgICAgICAgICAgICAgICAgICJuZXRzY2FwZSIsICJvcGVyYSIsIGlleHBsb3JlKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoYnJvd3NlcikpCiAKICMKQEAgLTY0NCwxNyArNjEzLDYgQEAKICAgICByZWdpc3RlcigiTWFjT1NYIiwgTm9uZSwgTWFjT1NYT1NBU2NyaXB0KCdkZWZhdWx0JyksIC0xKQogCiAKLSMKLSMgUGxhdGZvcm0gc3VwcG9ydCBmb3IgT1MvMgotIwotCi1pZiBzeXMucGxhdGZvcm1bOjNdID09ICJvczIiIGFuZCBfaXNjb21tYW5kKCJuZXRzY2FwZSIpOgotICAgIF90cnlvcmRlciA9IFtdCi0gICAgX2Jyb3dzZXJzID0ge30KLSAgICByZWdpc3Rlcigib3MybmV0c2NhcGUiLCBOb25lLAotICAgICAgICAgICAgIEdlbmVyaWNCcm93c2VyKFsic3RhcnQiLCAibmV0c2NhcGUiLCAiJXMiXSksIC0xKQotCi0KICMgT0ssIG5vdyB0aGF0IHdlIGtub3cgd2hhdCB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIG9yZGVycyBmb3IgZWFjaAogIyBwbGF0Zm9ybSBhcmUsIGFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlbSB3aXRoIHRoZSBCUk9XU0VSIHZhcmlhYmxlLgogaWYgIkJST1dTRVIiIGluIG9zLmVudmlyb246CmRpZmYgLS1naXQgYS9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkgYi9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKaW5kZXggZjA3NGFiOS4uODFlMmRmNyAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CisrKyBiL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQpAQCAtOTA1LDExICs5MDUsOCBAQAogICAgICAgICBidWlsZGVyID0gRXhwYXRCdWlsZGVyKCkKIAogICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgc3RyKToKLSAgICAgICAgZnAgPSBvcGVuKGZpbGUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGUsICdyYicpIGFzIGZwOgogICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci5wYXJzZUZpbGUoZnApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgZWxzZToKICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci5wYXJzZUZpbGUoZmlsZSkKICAgICByZXR1cm4gcmVzdWx0CkBAIC05MzksMTEgKzkzNiw4IEBACiAgICAgICAgIGJ1aWxkZXIgPSBGcmFnbWVudEJ1aWxkZXIoY29udGV4dCkKIAogICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgc3RyKToKLSAgICAgICAgZnAgPSBvcGVuKGZpbGUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGUsICdyYicpIGFzIGZwOgogICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci5wYXJzZUZpbGUoZnApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgZWxzZToKICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci5wYXJzZUZpbGUoZmlsZSkKICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQppbmRleCA2Y2MxYjQ0Li43M2U0OTFlIDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKQEAgLTcxLDggKzcxLDggQEAKICMgQHJldHVybiBUaGUgZXhwYW5kZWQgcmVzb3VyY2UuICBJZiB0aGUgcGFyc2UgbW9kZSBpcyAieG1sIiwgdGhpcwogIyAgICBpcyBhbiBFbGVtZW50VHJlZSBpbnN0YW5jZS4gIElmIHRoZSBwYXJzZSBtb2RlIGlzICJ0ZXh0IiwgdGhpcwogIyAgICBpcyBhIFVuaWNvZGUgc3RyaW5nLiAgSWYgdGhlIGxvYWRlciBmYWlscywgaXQgY2FuIHJldHVybiBOb25lCi0jICAgIG9yIHJhaXNlIGFuIElPRXJyb3IgZXhjZXB0aW9uLgotIyBAdGhyb3dzIElPRXJyb3IgSWYgdGhlIGxvYWRlciBmYWlscyB0byBsb2FkIHRoZSByZXNvdXJjZS4KKyMgICAgb3IgcmFpc2UgYW4gT1NFcnJvciBleGNlcHRpb24uCisjIEB0aHJvd3MgT1NFcnJvciBJZiB0aGUgbG9hZGVyIGZhaWxzIHRvIGxvYWQgdGhlIHJlc291cmNlLgogCiBkZWYgZGVmYXVsdF9sb2FkZXIoaHJlZiwgcGFyc2UsIGVuY29kaW5nPU5vbmUpOgogICAgIGlmIHBhcnNlID09ICJ4bWwiOgpAQCAtOTUsNyArOTUsNyBAQAogIyAgICAgdGhhdCBpbXBsZW1lbnRzIHRoZSBzYW1lIGludGVyZmFjZSBhcyA8Yj5kZWZhdWx0X2xvYWRlcjwvYj4uCiAjIEB0aHJvd3MgRmF0YWxJbmNsdWRlRXJyb3IgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRvIGluY2x1ZGUgYSBnaXZlbgogIyAgICAgcmVzb3VyY2UsIG9yIGlmIHRoZSB0cmVlIGNvbnRhaW5zIG1hbGZvcm1lZCBYSW5jbHVkZSBlbGVtZW50cy4KLSMgQHRocm93cyBJT0Vycm9yIElmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBsb2FkIGEgZ2l2ZW4gcmVzb3VyY2UuCisjIEB0aHJvd3MgT1NFcnJvciBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdG8gbG9hZCBhIGdpdmVuIHJlc291cmNlLgogCiBkZWYgaW5jbHVkZShlbGVtLCBsb2FkZXI9Tm9uZSk6CiAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQppbmRleCBlNzAxNWM3Li5kOTE0ZGRiIDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKQEAgLTEwNSwxNCArMTA1LDEyIEBACiBkZWYgcHJlcGFyZV9zdGFyKG5leHQsIHRva2VuKToKICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CiAgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKLSAgICAgICAgICAgIGZvciBlIGluIGVsZW06Ci0gICAgICAgICAgICAgICAgeWllbGQgZQorICAgICAgICAgICAgeWllbGQgZnJvbSBlbGVtCiAgICAgcmV0dXJuIHNlbGVjdAogCiBkZWYgcHJlcGFyZV9zZWxmKG5leHQsIHRva2VuKToKICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6Ci0gICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKLSAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgeWllbGQgZnJvbSByZXN1bHQKICAgICByZXR1cm4gc2VsZWN0CiAKIGRlZiBwcmVwYXJlX2Rlc2NlbmRhbnQobmV4dCwgdG9rZW4pOgpAQCAtMTc2LDcgKzE3NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgZWxlbS5nZXQoa2V5KSA9PSB2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQogICAgICAgICByZXR1cm4gc2VsZWN0Ci0gICAgaWYgc2lnbmF0dXJlID09ICItIiBhbmQgbm90IHJlLm1hdGNoKCJcZCskIiwgcHJlZGljYXRlWzBdKToKKyAgICBpZiBzaWduYXR1cmUgPT0gIi0iIGFuZCBub3QgcmUubWF0Y2goIlwtP1xkKyQiLCBwcmVkaWNhdGVbMF0pOgogICAgICAgICAjIFt0YWddCiAgICAgICAgIHRhZyA9IHByZWRpY2F0ZVswXQogICAgICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CkBAIC0xODQsNyArMTgyLDcgQEAKICAgICAgICAgICAgICAgICBpZiBlbGVtLmZpbmQodGFnKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQogICAgICAgICByZXR1cm4gc2VsZWN0Ci0gICAgaWYgc2lnbmF0dXJlID09ICItPSciIGFuZCBub3QgcmUubWF0Y2goIlxkKyQiLCBwcmVkaWNhdGVbMF0pOgorICAgIGlmIHNpZ25hdHVyZSA9PSAiLT0nIiBhbmQgbm90IHJlLm1hdGNoKCJcLT9cZCskIiwgcHJlZGljYXRlWzBdKToKICAgICAgICAgIyBbdGFnPSd2YWx1ZSddCiAgICAgICAgIHRhZyA9IHByZWRpY2F0ZVswXQogICAgICAgICB2YWx1ZSA9IHByZWRpY2F0ZVstMV0KQEAgLTE5OCw3ICsxOTYsMTAgQEAKICAgICBpZiBzaWduYXR1cmUgPT0gIi0iIG9yIHNpZ25hdHVyZSA9PSAiLSgpIiBvciBzaWduYXR1cmUgPT0gIi0oKS0iOgogICAgICAgICAjIFtpbmRleF0gb3IgW2xhc3QoKV0gb3IgW2xhc3QoKS1pbmRleF0KICAgICAgICAgaWYgc2lnbmF0dXJlID09ICItIjoKKyAgICAgICAgICAgICMgW2luZGV4XQogICAgICAgICAgICAgaW5kZXggPSBpbnQocHJlZGljYXRlWzBdKSAtIDEKKyAgICAgICAgICAgIGlmIGluZGV4IDwgMDoKKyAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiWFBhdGggcG9zaXRpb24gPj0gMSBleHBlY3RlZCIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBwcmVkaWNhdGVbMF0gIT0gImxhc3QiOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBmdW5jdGlvbiIpCkBAIC0yMDcsNiArMjA4LDggQEAKICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbnQocHJlZGljYXRlWzJdKSAtIDEKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoInVuc3VwcG9ydGVkIGV4cHJlc3Npb24iKQorICAgICAgICAgICAgICAgIGlmIGluZGV4ID4gLTI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJYUGF0aCBvZmZzZXQgZnJvbSBsYXN0KCkgbXVzdCBiZSBuZWdhdGl2ZSIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGluZGV4ID0gLTEKICAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKaW5kZXggYThlNTcyOS4uY2FiNDE1YyAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CkBAIC0xLDI4ICsxLDQ3IEBACisiIiJMaWdodHdlaWdodCBYTUwgc3VwcG9ydCBmb3IgUHl0aG9uLgorCisgWE1MIGlzIGFuIGluaGVyZW50bHkgaGllcmFyY2hpY2FsIGRhdGEgZm9ybWF0LCBhbmQgdGhlIG1vc3QgbmF0dXJhbCB3YXkgdG8KKyByZXByZXNlbnQgaXQgaXMgd2l0aCBhIHRyZWUuICBUaGlzIG1vZHVsZSBoYXMgdHdvIGNsYXNzZXMgZm9yIHRoaXMgcHVycG9zZToKKworICAgIDEuIEVsZW1lbnRUcmVlIHJlcHJlc2VudHMgdGhlIHdob2xlIFhNTCBkb2N1bWVudCBhcyBhIHRyZWUgYW5kCisKKyAgICAyLiBFbGVtZW50IHJlcHJlc2VudHMgYSBzaW5nbGUgbm9kZSBpbiB0aGlzIHRyZWUuCisKKyBJbnRlcmFjdGlvbnMgd2l0aCB0aGUgd2hvbGUgZG9jdW1lbnQgKHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8vZnJvbSBmaWxlcykgYXJlCisgdXN1YWxseSBkb25lIG9uIHRoZSBFbGVtZW50VHJlZSBsZXZlbC4gIEludGVyYWN0aW9ucyB3aXRoIGEgc2luZ2xlIFhNTCBlbGVtZW50CisgYW5kIGl0cyBzdWItZWxlbWVudHMgYXJlIGRvbmUgb24gdGhlIEVsZW1lbnQgbGV2ZWwuCisKKyBFbGVtZW50IGlzIGEgZmxleGlibGUgY29udGFpbmVyIG9iamVjdCBkZXNpZ25lZCB0byBzdG9yZSBoaWVyYXJjaGljYWwgZGF0YQorIHN0cnVjdHVyZXMgaW4gbWVtb3J5LiBJdCBjYW4gYmUgZGVzY3JpYmVkIGFzIGEgY3Jvc3MgYmV0d2VlbiBhIGxpc3QgYW5kIGEKKyBkaWN0aW9uYXJ5LiAgRWFjaCBFbGVtZW50IGhhcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdDoKKworICAgICd0YWcnIC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZWxlbWVudCdzIG5hbWUuCisKKyAgICAnYXR0cmlidXRlcycgLSBhIFB5dGhvbiBkaWN0aW9uYXJ5IHN0b3JpbmcgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLgorCisgICAgJ3RleHQnIC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZWxlbWVudCdzIHRleHQgY29udGVudC4KKworICAgICd0YWlsJyAtIGFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIHRleHQgYWZ0ZXIgdGhlIGVsZW1lbnQncyBlbmQgdGFnLgorCisgICAgQW5kIGEgbnVtYmVyIG9mIGNoaWxkIGVsZW1lbnRzIHN0b3JlZCBpbiBhIFB5dGhvbiBzZXF1ZW5jZS4KKworIFRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIEVsZW1lbnQgY29uc3RydWN0b3IsCisgb3IgdGhlIFN1YkVsZW1lbnQgZmFjdG9yeSBmdW5jdGlvbi4KKworIFlvdSBjYW4gYWxzbyB1c2UgdGhlIEVsZW1lbnRUcmVlIGNsYXNzIHRvIHdyYXAgYW4gZWxlbWVudCBzdHJ1Y3R1cmUKKyBhbmQgY29udmVydCBpdCB0byBhbmQgZnJvbSBYTUwuCisKKyIiIgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCiAjCiAjIEVsZW1lbnRUcmVlCi0jICRJZDogRWxlbWVudFRyZWUucHkgMzQ0MCAyMDA4LTA3LTE4IDE0OjQ1OjAxWiBmcmVkcmlrICQKLSMKLSMgbGlnaHQtd2VpZ2h0IFhNTCBzdXBwb3J0IGZvciBQeXRob24gMi4zIGFuZCBsYXRlci4KLSMKLSMgaGlzdG9yeSAoc2luY2UgMS4yLjYpOgotIyAyMDA1LTExLTEyIGZsICAgYWRkZWQgdG9zdHJpbmdsaXN0L2Zyb21zdHJpbmdsaXN0IGhlbHBlcnMKLSMgMjAwNi0wNy0wNSBmbCAgIG1lcmdlZCBpbiBzZWxlY3RlZCBjaGFuZ2VzIGZyb20gdGhlIDEuMyBzYW5kYm94Ci0jIDIwMDYtMDctMDUgZmwgICByZW1vdmVkIHN1cHBvcnQgZm9yIDIuMSBhbmQgZWFybGllcgotIyAyMDA3LTA2LTIxIGZsICAgYWRkZWQgZGVwcmVjYXRpb24vZnV0dXJlIHdhcm5pbmdzCi0jIDIwMDctMDgtMjUgZmwgICBhZGRlZCBkb2N0eXBlIGhvb2ssIGFkZGVkIHBhcnNlciB2ZXJzaW9uIGF0dHJpYnV0ZSBldGMKLSMgMjAwNy0wOC0yNiBmbCAgIGFkZGVkIG5ldyBzZXJpYWxpemVyIGNvZGUgKGJldHRlciBuYW1lc3BhY2UgaGFuZGxpbmcsIGV0YykKLSMgMjAwNy0wOC0yNyBmbCAgIHdhcm4gZm9yIGJyb2tlbiAvdGFnIHNlYXJjaGVzIG9uIHRyZWUgbGV2ZWwKLSMgMjAwNy0wOS0wMiBmbCAgIGFkZGVkIGh0bWwvdGV4dCBtZXRob2RzIHRvIHNlcmlhbGl6ZXIgKGV4cGVyaW1lbnRhbCkKLSMgMjAwNy0wOS0wNSBmbCAgIGFkZGVkIG1ldGhvZCBhcmd1bWVudCB0byB0b3N0cmluZy90b3N0cmluZ2xpc3QKLSMgMjAwNy0wOS0wNiBmbCAgIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nCi0jIDIwMDctMDktMTMgZmwgICBhZGRlZCBpdGVydGV4dCwgaXRlcmZpbmQ7IGFzc29ydGVkIGNsZWFudXBzCi0jIDIwMDctMTItMTUgZmwgICBhZGRlZCBDMTROIGhvb2tzLCBjb3B5IG1ldGhvZCAoZXhwZXJpbWVudGFsKQotIwogIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBieSBGcmVkcmlrIEx1bmRoLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgZnJlZHJpa0BweXRob253YXJlLmNvbQogIyBodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tCi0jCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBFbGVtZW50VHJlZSB0b29sa2l0IGlzCiAjCkBAIC01MSw5ICs3MCw2IEBACiAjIE9GIFRISVMgU09GVFdBUkUuCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KLQogX19hbGxfXyA9IFsKICAgICAjIHB1YmxpYyBzeW1ib2xzCiAgICAgIkNvbW1lbnQiLApAQCAtNjksMzQgKzg1LDEyIEBACiAgICAgIlRyZWVCdWlsZGVyIiwKICAgICAiVkVSU0lPTiIsCiAgICAgIlhNTCIsICJYTUxJRCIsCi0gICAgIlhNTFBhcnNlciIsICJYTUxUcmVlQnVpbGRlciIsCisgICAgIlhNTFBhcnNlciIsCiAgICAgInJlZ2lzdGVyX25hbWVzcGFjZSIsCiAgICAgXQogCiBWRVJTSU9OID0gIjEuMy4wIgogCi0jIwotIyBUaGUgPGI+RWxlbWVudDwvYj4gdHlwZSBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QsIGRlc2lnbmVkIHRvCi0jIHN0b3JlIGhpZXJhcmNoaWNhbCBkYXRhIHN0cnVjdHVyZXMgaW4gbWVtb3J5LiBUaGUgdHlwZSBjYW4gYmUKLSMgZGVzY3JpYmVkIGFzIGEgY3Jvc3MgYmV0d2VlbiBhIGxpc3QgYW5kIGEgZGljdGlvbmFyeS4KLSMgPHA+Ci0jIEVhY2ggZWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6Ci0jIDx1bD4KLSMgPGxpPmEgPGk+dGFnPC9pPi4gVGhpcyBpcyBhIHN0cmluZyBpZGVudGlmeWluZyB3aGF0IGtpbmQgb2YgZGF0YQotIyB0aGlzIGVsZW1lbnQgcmVwcmVzZW50cyAodGhlIGVsZW1lbnQgdHlwZSwgaW4gb3RoZXIgd29yZHMpLjwvbGk+Ci0jIDxsaT5hIG51bWJlciBvZiA8aT5hdHRyaWJ1dGVzPC9pPiwgc3RvcmVkIGluIGEgUHl0aG9uIGRpY3Rpb25hcnkuPC9saT4KLSMgPGxpPmEgPGk+dGV4dDwvaT4gc3RyaW5nLjwvbGk+Ci0jIDxsaT5hbiBvcHRpb25hbCA8aT50YWlsPC9pPiBzdHJpbmcuPC9saT4KLSMgPGxpPmEgbnVtYmVyIG9mIDxpPmNoaWxkIGVsZW1lbnRzPC9pPiwgc3RvcmVkIGluIGEgUHl0aG9uIHNlcXVlbmNlPC9saT4KLSMgPC91bD4KLSMKLSMgVG8gY3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHVzZSB0aGUge0BsaW5rICNFbGVtZW50fSBjb25zdHJ1Y3RvcgotIyBvciB0aGUge0BsaW5rICNTdWJFbGVtZW50fSBmYWN0b3J5IGZ1bmN0aW9uLgotIyA8cD4KLSMgVGhlIHtAbGluayAjRWxlbWVudFRyZWV9IGNsYXNzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYW4gZWxlbWVudAotIyBzdHJ1Y3R1cmUsIGFuZCBjb252ZXJ0IGl0IGZyb20gYW5kIHRvIFhNTC4KLSMjCi0KIGltcG9ydCBzeXMKIGltcG9ydCByZQogaW1wb3J0IHdhcm5pbmdzCkBAIC0xMDYsODEgKzEwMCw2OCBAQAogZnJvbSAuIGltcG9ydCBFbGVtZW50UGF0aAogCiAKLSMjCi0jIFBhcnNlciBlcnJvci4gIFRoaXMgaXMgYSBzdWJjbGFzcyBvZiA8Yj5TeW50YXhFcnJvcjwvYj4uCi0jIDxwPgotIyBJbiBhZGRpdGlvbiB0byB0aGUgZXhjZXB0aW9uIHZhbHVlLCBhbiBleGNlcHRpb24gaW5zdGFuY2UgY29udGFpbnMgYQotIyBzcGVjaWZpYyBleGNlcHRpb24gY29kZSBpbiB0aGUgPGI+Y29kZTwvYj4gYXR0cmlidXRlLCBhbmQgdGhlIGxpbmUgYW5kCi0jIGNvbHVtbiBvZiB0aGUgZXJyb3IgaW4gdGhlIDxiPnBvc2l0aW9uPC9iPiBhdHRyaWJ1dGUuCi0KIGNsYXNzIFBhcnNlRXJyb3IoU3ludGF4RXJyb3IpOgorICAgICIiIkFuIGVycm9yIHdoZW4gcGFyc2luZyBhbiBYTUwgZG9jdW1lbnQuCisKKyAgICBJbiBhZGRpdGlvbiB0byBpdHMgZXhjZXB0aW9uIHZhbHVlLCBhIFBhcnNlRXJyb3IgY29udGFpbnMKKyAgICB0d28gZXh0cmEgYXR0cmlidXRlczoKKyAgICAgICAgJ2NvZGUnICAgICAtIHRoZSBzcGVjaWZpYyBleGNlcHRpb24gY29kZQorICAgICAgICAncG9zaXRpb24nIC0gdGhlIGxpbmUgYW5kIGNvbHVtbiBvZiB0aGUgZXJyb3IKKworICAgICIiIgogICAgIHBhc3MKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBDaGVja3MgaWYgYW4gb2JqZWN0IGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBlbGVtZW50IG9iamVjdC4KLSMKLSMgQHBhcmFtIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0jIEByZXR1cm4gQSB0cnVlIHZhbHVlIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBvYmplY3QuCi0jIEBkZWZyZXR1cm4gZmxhZwogCiBkZWYgaXNlbGVtZW50KGVsZW1lbnQpOgotICAgICMgRklYTUU6IG5vdCBzdXJlIGFib3V0IHRoaXM7Ci0gICAgIyBpc2luc3RhbmNlKGVsZW1lbnQsIEVsZW1lbnQpIG9yIGxvb2sgZm9yIHRhZy9hdHRyaWIvdGV4dCBhdHRyaWJ1dGVzCisgICAgIiIiUmV0dXJuIFRydWUgaWYgKmVsZW1lbnQqIGFwcGVhcnMgdG8gYmUgYW4gRWxlbWVudC4iIiIKICAgICByZXR1cm4gaGFzYXR0cihlbGVtZW50LCAndGFnJykKIAotIyMKLSMgRWxlbWVudCBjbGFzcy4gIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgRWxlbWVudCBpbnRlcmZhY2UsIGFuZAotIyBwcm92aWRlcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZS4KLSMgPHA+Ci0jIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlCi0jIGVpdGhlciBBU0NJSSBzdHJpbmdzIChvcmRpbmFyeSBQeXRob24gc3RyaW5ncyBjb250YWluaW5nIG9ubHkgNy1iaXQKLSMgQVNDSUkgY2hhcmFjdGVycykgb3IgVW5pY29kZSBzdHJpbmdzLgotIwotIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0jIEBwYXJhbSBhdHRyaWIgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCi0jIEBwYXJhbSAqKmV4dHJhIEFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0jIEBzZWUgRWxlbWVudAotIyBAc2VlIFN1YkVsZW1lbnQKLSMgQHNlZSBDb21tZW50Ci0jIEBzZWUgUHJvY2Vzc2luZ0luc3RydWN0aW9uCiAKIGNsYXNzIEVsZW1lbnQ6Ci0gICAgIyA8dGFnIGF0dHJpYj50ZXh0PGNoaWxkLz4uLi48L3RhZz50YWlsCisgICAgIiIiQW4gWE1MIGVsZW1lbnQuCiAKLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgRWxlbWVudCB0YWcuCisgICAgVGhpcyBjbGFzcyBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFbGVtZW50IGludGVyZmFjZS4KKworICAgIEFuIGVsZW1lbnQncyBsZW5ndGggaXMgaXRzIG51bWJlciBvZiBzdWJlbGVtZW50cy4gIFRoYXQgbWVhbnMgaWYgeW91CisgICAgeW91IHdhbnQgdG8gY2hlY2sgaWYgYW4gZWxlbWVudCBpcyB0cnVseSBlbXB0eSwgeW91IHNob3VsZCBjaGVjayBCT1RICisgICAgaXRzIGxlbmd0aCBBTkQgaXRzIHRleHQgYXR0cmlidXRlLgorCisgICAgVGhlIGVsZW1lbnQgdGFnLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIKKyAgICBieXRlcyBvciBzdHJpbmdzLgorCisgICAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4gICphdHRyaWIqIGlzIGFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgY29udGFpbmluZworICAgIGVsZW1lbnQgYXR0cmlidXRlcy4gKmV4dHJhKiBhcmUgYWRkaXRpb25hbCBlbGVtZW50IGF0dHJpYnV0ZXMgZ2l2ZW4gYXMKKyAgICBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgIEV4YW1wbGUgZm9ybToKKyAgICAgICAgPHRhZyBhdHRyaWI+dGV4dDxjaGlsZC8+Li4uPC90YWc+dGFpbAorCisgICAgIiIiCiAKICAgICB0YWcgPSBOb25lCi0KLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgRWxlbWVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeS4gIFdoZXJlIHBvc3NpYmxlLCB1c2UKLSAgICAjIHtAbGluayAjRWxlbWVudC5nZXR9LAotICAgICMge0BsaW5rICNFbGVtZW50LnNldH0sCi0gICAgIyB7QGxpbmsgI0VsZW1lbnQua2V5c30sIGFuZAotICAgICMge0BsaW5rICNFbGVtZW50Lml0ZW1zfSB0byBhY2Nlc3MKLSAgICAjIGVsZW1lbnQgYXR0cmlidXRlcy4KKyAgICAiIiJUaGUgZWxlbWVudCdzIG5hbWUuIiIiCiAKICAgICBhdHRyaWIgPSBOb25lCi0KLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgVGV4dCBiZWZvcmUgZmlyc3Qgc3ViZWxlbWVudC4gIFRoaXMgaXMgZWl0aGVyIGEKLSAgICAjIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZSB3YXMgbm8gdGV4dCwgdGhpcwotICAgICMgYXR0cmlidXRlIG1heSBiZSBlaXRoZXIgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbgotICAgICMgdGhlIHBhcnNlci4KKyAgICAiIiJEaWN0aW9uYXJ5IG9mIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4iIiIKIAogICAgIHRleHQgPSBOb25lCisgICAgIiIiCisgICAgVGV4dCBiZWZvcmUgZmlyc3Qgc3ViZWxlbWVudC4gVGhpcyBpcyBlaXRoZXIgYSBzdHJpbmcgb3IgdGhlIHZhbHVlIE5vbmUuCisgICAgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIG5vIHRleHQsIHRoaXMgYXR0cmlidXRlIG1heSBiZSBlaXRoZXIKKyAgICBOb25lIG9yIHRoZSBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbiB0aGUgcGFyc2VyLgogCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIFRleHQgYWZ0ZXIgdGhpcyBlbGVtZW50J3MgZW5kIHRhZywgYnV0IGJlZm9yZSB0aGUKLSAgICAjIG5leHQgc2libGluZyBlbGVtZW50J3Mgc3RhcnQgdGFnLiAgVGhpcyBpcyBlaXRoZXIgYSBzdHJpbmcgb3IKLSAgICAjIHRoZSB2YWx1ZSBOb25lLiAgTm90ZSB0aGF0IGlmIHRoZXJlIHdhcyBubyB0ZXh0LCB0aGlzIGF0dHJpYnV0ZQotICAgICMgbWF5IGJlIGVpdGhlciBOb25lIG9yIGFuIGVtcHR5IHN0cmluZywgZGVwZW5kaW5nIG9uIHRoZSBwYXJzZXIuCisgICAgIiIiCiAKLSAgICB0YWlsID0gTm9uZSAjIHRleHQgYWZ0ZXIgZW5kIHRhZywgaWYgYW55CisgICAgdGFpbCA9IE5vbmUKKyAgICAiIiIKKyAgICBUZXh0IGFmdGVyIHRoaXMgZWxlbWVudCdzIGVuZCB0YWcsIGJ1dCBiZWZvcmUgdGhlIG5leHQgc2libGluZyBlbGVtZW50J3MKKyAgICBzdGFydCB0YWcuICBUaGlzIGlzIGVpdGhlciBhIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZQorICAgIHdhcyBubyB0ZXh0LCB0aGlzIGF0dHJpYnV0ZSBtYXkgYmUgZWl0aGVyIE5vbmUgb3IgYW4gZW1wdHkgc3RyaW5nLAorICAgIGRlcGVuZGluZyBvbiB0aGUgcGFyc2VyLgogCi0gICAgIyBjb25zdHJ1Y3RvcgorICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXR0cmliLCBkaWN0KToKQEAgLTE5NSwzNiArMTc2LDMwIEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIjxFbGVtZW50ICVzIGF0IDB4JXg+IiAlIChyZXByKHNlbGYudGFnKSwgaWQoc2VsZikpCiAKLSAgICAjIwotICAgICMgQ3JlYXRlcyBhIG5ldyBlbGVtZW50IG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoaXMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIEVsZW1lbnQgdGFnLgotICAgICMgQHBhcmFtIGF0dHJpYiBFbGVtZW50IGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGEgZGljdGlvbmFyeS4KLSAgICAjIEByZXR1cm4gQSBuZXcgZWxlbWVudCBpbnN0YW5jZS4KLQogICAgIGRlZiBtYWtlZWxlbWVudChzZWxmLCB0YWcsIGF0dHJpYik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBlbGVtZW50IHdpdGggdGhlIHNhbWUgdHlwZS4KKworICAgICAgICAqdGFnKiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBlbGVtZW50IG5hbWUuCisgICAgICAgICphdHRyaWIqIGlzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBlbGVtZW50IGF0dHJpYnV0ZXMuCisKKyAgICAgICAgRG8gbm90IGNhbGwgdGhpcyBtZXRob2QsIHVzZSB0aGUgU3ViRWxlbWVudCBmYWN0b3J5IGZ1bmN0aW9uIGluc3RlYWQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyh0YWcsIGF0dHJpYikKIAotICAgICMjCi0gICAgIyAoRXhwZXJpbWVudGFsKSBDb3BpZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gIFRoaXMgY3JlYXRlcyBhCi0gICAgIyBzaGFsbG93IGNvcHk7IHN1YmVsZW1lbnRzIHdpbGwgYmUgc2hhcmVkIHdpdGggdGhlIG9yaWdpbmFsIHRyZWUuCi0gICAgIwotICAgICMgQHJldHVybiBBIG5ldyBlbGVtZW50IGluc3RhbmNlLgotCiAgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgICIiIlJldHVybiBjb3B5IG9mIGN1cnJlbnQgZWxlbWVudC4KKworICAgICAgICBUaGlzIGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkuIFN1YmVsZW1lbnRzIHdpbGwgYmUgc2hhcmVkIHdpdGggdGhlCisgICAgICAgIG9yaWdpbmFsIHRyZWUuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGVsZW0gPSBzZWxmLm1ha2VlbGVtZW50KHNlbGYudGFnLCBzZWxmLmF0dHJpYikKICAgICAgICAgZWxlbS50ZXh0ID0gc2VsZi50ZXh0CiAgICAgICAgIGVsZW0udGFpbCA9IHNlbGYudGFpbAogICAgICAgICBlbGVtWzpdID0gc2VsZgogICAgICAgICByZXR1cm4gZWxlbQogCi0gICAgIyMKLSAgICAjIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWJlbGVtZW50cy4gIE5vdGUgdGhhdCB0aGlzIG9ubHkgY291bnRzCi0gICAgIyBmdWxsIGVsZW1lbnRzOyB0byBjaGVjayBpZiB0aGVyZSdzIGFueSBjb250ZW50IGluIGFuIGVsZW1lbnQsIHlvdQotICAgICMgaGF2ZSB0byBjaGVjayBib3RoIHRoZSBsZW5ndGggYW5kIHRoZSA8Yj50ZXh0PC9iPiBhdHRyaWJ1dGUuCi0gICAgIwotICAgICMgQHJldHVybiBUaGUgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLgotCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fY2hpbGRyZW4pCiAKQEAgLTIzNiwyMyArMjExLDkgQEAKICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9jaGlsZHJlbikgIT0gMCAjIGVtdWxhdGUgb2xkIGJlaGF2aW91ciwgZm9yIG5vdwogCi0gICAgIyMKLSAgICAjIFJldHVybnMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gcmV0dXJuLgotICAgICMgQHJldHVybiBUaGUgZ2l2ZW4gc3ViZWxlbWVudC4KLSAgICAjIEBleGNlcHRpb24gSW5kZXhFcnJvciBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdC4KLQogICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlbltpbmRleF0KIAotICAgICMjCi0gICAgIyBSZXBsYWNlcyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byByZXBsYWNlLgotICAgICMgQHBhcmFtIGVsZW1lbnQgVGhlIG5ldyBlbGVtZW50IHZhbHVlLgotICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgotCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCBlbGVtZW50KToKICAgICAgICAgIyBpZiBpc2luc3RhbmNlKGluZGV4LCBzbGljZSk6CiAgICAgICAgICMgICAgIGZvciBlbHQgaW4gZWxlbWVudDoKQEAgLTI2MSw3NiArMjIyLDYyIEBACiAgICAgICAgICMgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW5baW5kZXhdID0gZWxlbWVudAogCi0gICAgIyMKLSAgICAjIERlbGV0ZXMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gZGVsZXRlLgotICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgotCiAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICAgZGVsIHNlbGYuX2NoaWxkcmVuW2luZGV4XQogCi0gICAgIyMKLSAgICAjIEFkZHMgYSBzdWJlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50LiAgSW4gZG9jdW1lbnQgb3JkZXIsCi0gICAgIyB0aGUgbmV3IGVsZW1lbnQgd2lsbCBhcHBlYXIgYWZ0ZXIgdGhlIGxhc3QgZXhpc3Rpbmcgc3ViZWxlbWVudCAob3IKLSAgICAjIGRpcmVjdGx5IGFmdGVyIHRoZSB0ZXh0LCBpZiBpdCdzIHRoZSBmaXJzdCBzdWJlbGVtZW50KSwgYnV0IGJlZm9yZQotICAgICMgdGhlIGVuZCB0YWcgZm9yIHRoaXMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBhZGQuCisgICAgZGVmIGFwcGVuZChzZWxmLCBzdWJlbGVtZW50KToKKyAgICAgICAgIiIiQWRkICpzdWJlbGVtZW50KiB0byB0aGUgZW5kIG9mIHRoaXMgZWxlbWVudC4KIAotICAgIGRlZiBhcHBlbmQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KGVsZW1lbnQpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuLmFwcGVuZChlbGVtZW50KQorICAgICAgICBUaGUgbmV3IGVsZW1lbnQgd2lsbCBhcHBlYXIgaW4gZG9jdW1lbnQgb3JkZXIgYWZ0ZXIgdGhlIGxhc3QgZXhpc3RpbmcKKyAgICAgICAgc3ViZWxlbWVudCAob3IgZGlyZWN0bHkgYWZ0ZXIgdGhlIHRleHQsIGlmIGl0J3MgdGhlIGZpcnN0IHN1YmVsZW1lbnQpLAorICAgICAgICBidXQgYmVmb3JlIHRoZSBlbmQgdGFnIGZvciB0aGlzIGVsZW1lbnQuCiAKLSAgICAjIwotICAgICMgQXBwZW5kcyBzdWJlbGVtZW50cyBmcm9tIGEgc2VxdWVuY2UuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnRzIEEgc2VxdWVuY2Ugb2JqZWN0IHdpdGggemVybyBvciBtb3JlIGVsZW1lbnRzLgotICAgICMgQHNpbmNlIDEuMworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoc3ViZWxlbWVudCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4uYXBwZW5kKHN1YmVsZW1lbnQpCiAKICAgICBkZWYgZXh0ZW5kKHNlbGYsIGVsZW1lbnRzKToKKyAgICAgICAgIiIiQXBwZW5kIHN1YmVsZW1lbnRzIGZyb20gYSBzZXF1ZW5jZS4KKworICAgICAgICAqZWxlbWVudHMqIGlzIGEgc2VxdWVuY2Ugd2l0aCB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgogICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW4uZXh0ZW5kKGVsZW1lbnRzKQogCi0gICAgIyMKLSAgICAjIEluc2VydHMgYSBzdWJlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGlzIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoZXJlIHRvIGluc2VydCB0aGUgbmV3IHN1YmVsZW1lbnQuCi0KLSAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCBlbGVtZW50KToKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBlbGVtZW50KQorICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIHN1YmVsZW1lbnQpOgorICAgICAgICAiIiJJbnNlcnQgKnN1YmVsZW1lbnQqIGF0IHBvc2l0aW9uICppbmRleCouIiIiCisgICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KHN1YmVsZW1lbnQpCisgICAgICAgIHNlbGYuX2NoaWxkcmVuLmluc2VydChpbmRleCwgc3ViZWxlbWVudCkKIAogICAgIGRlZiBfYXNzZXJ0X2lzX2VsZW1lbnQoc2VsZiwgZSk6CiAgICAgICAgICMgTmVlZCB0byByZWZlciB0byB0aGUgYWN0dWFsIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiwgbm90IHRoZQogICAgICAgICAjIHNoYWRvd2luZyBDIGltcGxlbWVudGF0aW9uLgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBfRWxlbWVudCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIF9FbGVtZW50X1B5KToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgYW4gRWxlbWVudCwgbm90ICVzJyAlIHR5cGUoZSkuX19uYW1lX18pCiAKLSAgICAjIwotICAgICMgUmVtb3ZlcyBhIG1hdGNoaW5nIHN1YmVsZW1lbnQuICBVbmxpa2UgdGhlIDxiPmZpbmQ8L2I+IG1ldGhvZHMsCi0gICAgIyB0aGlzIG1ldGhvZCBjb21wYXJlcyBlbGVtZW50cyBiYXNlZCBvbiBpZGVudGl0eSwgbm90IG9uIHRhZwotICAgICMgdmFsdWUgb3IgY29udGVudHMuICBUbyByZW1vdmUgc3ViZWxlbWVudHMgYnkgb3RoZXIgbWVhbnMsIHRoZQotICAgICMgZWFzaWVzdCB3YXkgaXMgb2Z0ZW4gdG8gdXNlIGEgbGlzdCBjb21wcmVoZW5zaW9uIHRvIHNlbGVjdCB3aGF0Ci0gICAgIyBlbGVtZW50cyB0byBrZWVwLCBhbmQgdXNlIHNsaWNlIGFzc2lnbm1lbnQgdG8gdXBkYXRlIHRoZSBwYXJlbnQKLSAgICAjIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnQgV2hhdCBlbGVtZW50IHRvIHJlbW92ZS4KLSAgICAjIEBleGNlcHRpb24gVmFsdWVFcnJvciBJZiBhIG1hdGNoaW5nIGVsZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLgorICAgIGRlZiByZW1vdmUoc2VsZiwgc3ViZWxlbWVudCk6CisgICAgICAgICIiIlJlbW92ZSBtYXRjaGluZyBzdWJlbGVtZW50LgogCi0gICAgZGVmIHJlbW92ZShzZWxmLCBlbGVtZW50KToKKyAgICAgICAgVW5saWtlIHRoZSBmaW5kIG1ldGhvZHMsIHRoaXMgbWV0aG9kIGNvbXBhcmVzIGVsZW1lbnRzIGJhc2VkIG9uCisgICAgICAgIGlkZW50aXR5LCBOT1QgT04gdGFnIHZhbHVlIG9yIGNvbnRlbnRzLiAgVG8gcmVtb3ZlIHN1YmVsZW1lbnRzIGJ5CisgICAgICAgIG90aGVyIG1lYW5zLCB0aGUgZWFzaWVzdCB3YXkgaXMgdG8gdXNlIGEgbGlzdCBjb21wcmVoZW5zaW9uIHRvCisgICAgICAgIHNlbGVjdCB3aGF0IGVsZW1lbnRzIHRvIGtlZXAsIGFuZCB0aGVuIHVzZSBzbGljZSBhc3NpZ25tZW50IHRvIHVwZGF0ZQorICAgICAgICB0aGUgcGFyZW50IGVsZW1lbnQuCisKKyAgICAgICAgVmFsdWVFcnJvciBpcyByYWlzZWQgaWYgYSBtYXRjaGluZyBlbGVtZW50IGNvdWxkIG5vdCBiZSBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuLnJlbW92ZShlbGVtZW50KQotCi0gICAgIyMKLSAgICAjIChEZXByZWNhdGVkKSBSZXR1cm5zIGFsbCBzdWJlbGVtZW50cy4gIFRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQKLSAgICAjIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMKLSAgICAjIEByZXR1cm4gQSBsaXN0IG9mIHN1YmVsZW1lbnRzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCisgICAgICAgIHNlbGYuX2NoaWxkcmVuLnJlbW92ZShzdWJlbGVtZW50KQogCiAgICAgZGVmIGdldGNoaWxkcmVuKHNlbGYpOgorICAgICAgICAiIiIoRGVwcmVjYXRlZCkgUmV0dXJuIGFsbCBzdWJlbGVtZW50cy4KKworICAgICAgICBFbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAiVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKICAgICAgICAgICAgICJVc2UgJ2xpc3QoZWxlbSknIG9yIGl0ZXJhdGlvbiBvdmVyIGVsZW0gaW5zdGVhZC4iLApAQCAtMzM4LDEzMSArMjg1LDEyOCBAQAogICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fY2hpbGRyZW4KIAotICAgICMjCi0gICAgIyBGaW5kcyB0aGUgZmlyc3QgbWF0Y2hpbmcgc3ViZWxlbWVudCwgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQgb3IgTm9uZQotCiAgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIHRleHQgZm9yIHRoZSBmaXJzdCBtYXRjaGluZyBzdWJlbGVtZW50LCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCi0gICAgIyAgICAgZGVmYXVsdCB2YWx1ZSBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudAotICAgICMgICAgIGlzIGZvdW5kLCBidXQgaGFzIG5vIHRleHQgY29udGVudCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbgotICAgICMgICAgIGVtcHR5IHN0cmluZy4KLSAgICAjIEBkZWZyZXR1cm4gc3RyaW5nCi0KICAgICBkZWYgZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdD1Ob25lLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIHRleHQgZm9yIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKmRlZmF1bHQqIGlzIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGV4dCBjb250ZW50IG9mIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIGRlZmF1bHQgdmFsdWUgaWYKKyAgICAgICAgbm9uZSB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgYW4gZWxlbWVudCBpcyBmb3VuZCBoYXZpbmcgbm8gdGV4dAorICAgICAgICBjb250ZW50LCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybnMgbGlzdCBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmRhbGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9yIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAotICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIyBAZGVmcmV0dXJuIGEgZ2VuZXJhdGVkIHNlcXVlbmNlIG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gYW4gaXRlcmFibGUgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBSZXNldHMgYW4gZWxlbWVudC4gIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgc3ViZWxlbWVudHMsIGNsZWFycwotICAgICMgYWxsIGF0dHJpYnV0ZXMsIGFuZCBzZXRzIHRoZSA8Yj50ZXh0PC9iPiBhbmQgPGI+dGFpbDwvYj4gYXR0cmlidXRlcwotICAgICMgdG8gTm9uZS4KLQogICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgIiIiUmVzZXQgZWxlbWVudC4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHN1YmVsZW1lbnRzLCBjbGVhcnMgYWxsIGF0dHJpYnV0ZXMsIGFuZCBzZXRzCisgICAgICAgIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMgdG8gTm9uZS4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5hdHRyaWIuY2xlYXIoKQogICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IFtdCiAgICAgICAgIHNlbGYudGV4dCA9IHNlbGYudGFpbCA9IE5vbmUKIAotICAgICMjCi0gICAgIyBHZXRzIGFuIGVsZW1lbnQgYXR0cmlidXRlLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIuZ2V0PC9iPiwgYnV0Ci0gICAgIyBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4KLSAgICAjCi0gICAgIyBAcGFyYW0ga2V5IFdoYXQgYXR0cmlidXRlIHRvIGxvb2sgZm9yLgotICAgICMgQHBhcmFtIGRlZmF1bHQgV2hhdCB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgotICAgICMgQHJldHVybiBUaGUgYXR0cmlidXRlIHZhbHVlLCBvciB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgdGhlCi0gICAgIyAgICAgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCi0gICAgIyBAZGVmcmV0dXJuIHN0cmluZyBvciBOb25lCi0KICAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiR2V0IGVsZW1lbnQgYXR0cmlidXRlLgorCisgICAgICAgIEVxdWl2YWxlbnQgdG8gYXR0cmliLmdldCwgYnV0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUgdGhpcyBhCisgICAgICAgIGJpdCBtb3JlIGVmZmljaWVudGx5LiAgKmtleSogaXMgd2hhdCBhdHRyaWJ1dGUgdG8gbG9vayBmb3IsIGFuZAorICAgICAgICAqZGVmYXVsdCogaXMgd2hhdCB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgorCisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYXR0cmlidXRlIHZhbHVlLCBvciB0aGUgZGVmYXVsdCBpZgorICAgICAgICBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXR0cmliLmdldChrZXksIGRlZmF1bHQpCiAKLSAgICAjIwotICAgICMgU2V0cyBhbiBlbGVtZW50IGF0dHJpYnV0ZS4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliW2tleV0gPSB2YWx1ZTwvYj4sCi0gICAgIyBidXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZSB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgIwotICAgICMgQHBhcmFtIGtleSBXaGF0IGF0dHJpYnV0ZSB0byBzZXQuCi0gICAgIyBAcGFyYW0gdmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLQogICAgIGRlZiBzZXQoc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIlNldCBlbGVtZW50IGF0dHJpYnV0ZS4KKworICAgICAgICBFcXVpdmFsZW50IHRvIGF0dHJpYltrZXldID0gdmFsdWUsIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlCisgICAgICAgIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4gICprZXkqIGlzIHdoYXQgYXR0cmlidXRlIHRvIHNldCwgYW5kCisgICAgICAgICp2YWx1ZSogaXMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB0byBzZXQgaXQgdG8uCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuYXR0cmliW2tleV0gPSB2YWx1ZQogCi0gICAgIyMKLSAgICAjIEdldHMgYSBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcy4gIFRoZSBuYW1lcyBhcmUgcmV0dXJuZWQgaW4gYW4KLSAgICAjIGFyYml0cmFyeSBvcmRlciAoanVzdCBsaWtlIGZvciBhbiBvcmRpbmFyeSBQeXRob24gZGljdGlvbmFyeSkuCi0gICAgIyBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5rZXlzKCk8L2I+LgotICAgICMKLSAgICAjIEByZXR1cm4gQSBsaXN0IG9mIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIHN0cmluZ3MKLQogICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAiIiJHZXQgbGlzdCBvZiBhdHRyaWJ1dGUgbmFtZXMuCisKKyAgICAgICAgTmFtZXMgYXJlIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlciwganVzdCBsaWtlIGFuIG9yZGluYXJ5CisgICAgICAgIFB5dGhvbiBkaWN0LiAgRXF1aXZhbGVudCB0byBhdHRyaWIua2V5cygpCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmF0dHJpYi5rZXlzKCkKIAotICAgICMjCi0gICAgIyBHZXRzIGVsZW1lbnQgYXR0cmlidXRlcywgYXMgYSBzZXF1ZW5jZS4gIFRoZSBhdHRyaWJ1dGVzIGFyZQotICAgICMgcmV0dXJuZWQgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIuaXRlbXMoKTwvYj4uCi0gICAgIwotICAgICMgQHJldHVybiBBIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMgZm9yIGFsbCBhdHRyaWJ1dGVzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIChzdHJpbmcsIHN0cmluZykgdHVwbGVzCi0KICAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgICIiIkdldCBlbGVtZW50IGF0dHJpYnV0ZXMgYXMgYSBzZXF1ZW5jZS4KKworICAgICAgICBUaGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQgaW4gYXJiaXRyYXJ5IG9yZGVyLiAgRXF1aXZhbGVudCB0bworICAgICAgICBhdHRyaWIuaXRlbXMoKS4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIChuYW1lLCB2YWx1ZSkgdHVwbGVzLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hdHRyaWIuaXRlbXMoKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSB0cmVlIGl0ZXJhdG9yLiAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhpcyBlbGVtZW50Ci0gICAgIyBhbmQgYWxsIHN1YmVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlciwgYW5kIHJldHVybnMgYWxsIGVsZW1lbnRzCi0gICAgIyB3aXRoIGEgbWF0Y2hpbmcgdGFnLgotICAgICMgPHA+Ci0gICAgIyBJZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgbmV3IG9yIHJlbW92ZWQKLSAgICAjIGVsZW1lbnRzIG1heSBvciBtYXkgbm90IGJlIGluY2x1ZGVkLiAgVG8gZ2V0IGEgc3RhYmxlIHNldCwgdXNlIHRoZQotICAgICMgbGlzdCgpIGZ1bmN0aW9uIG9uIHRoZSBpdGVyYXRvciwgYW5kIGxvb3Agb3ZlciB0aGUgcmVzdWx0aW5nIGxpc3QuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBXaGF0IHRhZ3MgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykuCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGluZyBlbGVtZW50cy4KLSAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKLQogICAgIGRlZiBpdGVyKHNlbGYsIHRhZz1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIHRyZWUgaXRlcmF0b3IuCisKKyAgICAgICAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhlIGVsZW1lbnQgYW5kIGFsbCBzdWJlbGVtZW50cyBpbiBkb2N1bWVudAorICAgICAgICBvcmRlciwgcmV0dXJuaW5nIGFsbCBlbGVtZW50cyB3aXRoIGEgbWF0Y2hpbmcgdGFnLgorCisgICAgICAgIElmIHRoZSB0cmVlIHN0cnVjdHVyZSBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLCBuZXcgb3IgcmVtb3ZlZAorICAgICAgICBlbGVtZW50cyBtYXkgb3IgbWF5IG5vdCBiZSBpbmNsdWRlZC4gIFRvIGdldCBhIHN0YWJsZSBzZXQsIHVzZSB0aGUKKyAgICAgICAgbGlzdCgpIGZ1bmN0aW9uIG9uIHRoZSBpdGVyYXRvciwgYW5kIGxvb3Agb3ZlciB0aGUgcmVzdWx0aW5nIGxpc3QuCisKKyAgICAgICAgKnRhZyogaXMgd2hhdCB0YWdzIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGluZyBlbGVtZW50cy4KKworICAgICAgICAiIiIKICAgICAgICAgaWYgdGFnID09ICIqIjoKICAgICAgICAgICAgIHRhZyA9IE5vbmUKICAgICAgICAgaWYgdGFnIGlzIE5vbmUgb3Igc2VsZi50YWcgPT0gdGFnOgogICAgICAgICAgICAgeWllbGQgc2VsZgogICAgICAgICBmb3IgZSBpbiBzZWxmLl9jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciBlIGluIGUuaXRlcih0YWcpOgotICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZS5pdGVyKHRhZykKIAogICAgICMgY29tcGF0aWJpbGl0eQogICAgIGRlZiBnZXRpdGVyYXRvcihzZWxmLCB0YWc9Tm9uZSk6CkBAIC00NzQsNzggKzQxOCw2NyBAQAogICAgICAgICApCiAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcih0YWcpKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSB0ZXh0IGl0ZXJhdG9yLiAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhpcyBlbGVtZW50Ci0gICAgIyBhbmQgYWxsIHN1YmVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlciwgYW5kIHJldHVybnMgYWxsIGlubmVyCi0gICAgIyB0ZXh0LgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3IgY29udGFpbmluZyBhbGwgaW5uZXIgdGV4dC4KLSAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKLQogICAgIGRlZiBpdGVydGV4dChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHRleHQgaXRlcmF0b3IuCisKKyAgICAgICAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhlIGVsZW1lbnQgYW5kIGFsbCBzdWJlbGVtZW50cyBpbiBkb2N1bWVudAorICAgICAgICBvcmRlciwgcmV0dXJuaW5nIGFsbCBpbm5lciB0ZXh0LgorCisgICAgICAgICIiIgogICAgICAgICB0YWcgPSBzZWxmLnRhZwogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YWcsIHN0cikgYW5kIHRhZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnRleHQ6CiAgICAgICAgICAgICB5aWVsZCBzZWxmLnRleHQKICAgICAgICAgZm9yIGUgaW4gc2VsZjoKLSAgICAgICAgICAgIGZvciBzIGluIGUuaXRlcnRleHQoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzCisgICAgICAgICAgICB5aWVsZCBmcm9tIGUuaXRlcnRleHQoKQogICAgICAgICAgICAgaWYgZS50YWlsOgogICAgICAgICAgICAgICAgIHlpZWxkIGUudGFpbAogCi0jIGNvbXBhdGliaWxpdHkKLV9FbGVtZW50ID0gX0VsZW1lbnRJbnRlcmZhY2UgPSBFbGVtZW50Ci0KLSMjCi0jIFN1YmVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQKLSMgYXBwZW5kcyBpdCB0byBhbiBleGlzdGluZyBlbGVtZW50LgotIyA8cD4KLSMgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUKLSMgZWl0aGVyIDgtYml0IEFTQ0lJIHN0cmluZ3Mgb3IgVW5pY29kZSBzdHJpbmdzLgotIwotIyBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgZWxlbWVudC4KLSMgQHBhcmFtIHRhZyBUaGUgc3ViZWxlbWVudCBuYW1lLgotIyBAcGFyYW0gYXR0cmliIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgotIyBAcGFyYW0gKipleHRyYSBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgotIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgU3ViRWxlbWVudChwYXJlbnQsIHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKToKKyAgICAiIiJTdWJlbGVtZW50IGZhY3Rvcnkgd2hpY2ggY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQgYXBwZW5kcyBpdAorICAgIHRvIGFuIGV4aXN0aW5nIHBhcmVudC4KKworICAgIFRoZSBlbGVtZW50IHRhZywgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyCisgICAgYnl0ZXMgb3IgVW5pY29kZSBzdHJpbmdzLgorCisgICAgKnBhcmVudCogaXMgdGhlIHBhcmVudCBlbGVtZW50LCAqdGFnKiBpcyB0aGUgc3ViZWxlbWVudHMgbmFtZSwgKmF0dHJpYiogaXMKKyAgICBhbiBvcHRpb25hbCBkaXJlY3RvcnkgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMsICpleHRyYSogYXJlCisgICAgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAgIiIiCiAgICAgYXR0cmliID0gYXR0cmliLmNvcHkoKQogICAgIGF0dHJpYi51cGRhdGUoZXh0cmEpCiAgICAgZWxlbWVudCA9IHBhcmVudC5tYWtlZWxlbWVudCh0YWcsIGF0dHJpYikKICAgICBwYXJlbnQuYXBwZW5kKGVsZW1lbnQpCiAgICAgcmV0dXJuIGVsZW1lbnQKIAotIyMKLSMgQ29tbWVudCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwKLSMgZWxlbWVudCB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgY29tbWVudCBieSB0aGUgc3RhbmRhcmQKLSMgc2VyaWFsaXplci4KLSMgPHA+Ci0jIFRoZSBjb21tZW50IHN0cmluZyBjYW4gYmUgZWl0aGVyIGFuIDgtYml0IEFTQ0lJIHN0cmluZyBvciBhIFVuaWNvZGUKLSMgc3RyaW5nLgotIwotIyBAcGFyYW0gdGV4dCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50IHN0cmluZy4KLSMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBjb21tZW50LgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogZGVmIENvbW1lbnQodGV4dD1Ob25lKToKKyAgICAiIiJDb21tZW50IGVsZW1lbnQgZmFjdG9yeS4KKworICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudCB3aGljaCB0aGUgc3RhbmRhcmQgc2VyaWFsaXplcgorICAgIHNlcmlhbGl6ZXMgYXMgYW4gWE1MIGNvbW1lbnQuCisKKyAgICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWVudCBzdHJpbmcuCisKKyAgICAiIiIKICAgICBlbGVtZW50ID0gRWxlbWVudChDb21tZW50KQogICAgIGVsZW1lbnQudGV4dCA9IHRleHQKICAgICByZXR1cm4gZWxlbWVudAogCi0jIwotIyBQSSBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudAotIyB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBieSB0aGUgc3RhbmRhcmQKLSMgc2VyaWFsaXplci4KLSMKLSMgQHBhcmFtIHRhcmdldCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSB0YXJnZXQuCi0jIEBwYXJhbSB0ZXh0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIGNvbnRlbnRzLCBpZiBhbnkuCi0jIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZSwgcmVwcmVzZW50aW5nIGEgUEkuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRhcmdldCwgdGV4dD1Ob25lKToKKyAgICAiIiJQcm9jZXNzaW5nIEluc3RydWN0aW9uIGVsZW1lbnQgZmFjdG9yeS4KKworICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudCB3aGljaCB0aGUgc3RhbmRhcmQgc2VyaWFsaXplcgorICAgIHNlcmlhbGl6ZXMgYXMgYW4gWE1MIGNvbW1lbnQuCisKKyAgICAqdGFyZ2V0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLCAqdGV4dCogaXMgYQorICAgIHN0cmluZyBjb250YWluaW5nIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGNvbnRlbnRzLCBpZiBhbnkuCisKKyAgICAiIiIKICAgICBlbGVtZW50ID0gRWxlbWVudChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCiAgICAgZWxlbWVudC50ZXh0ID0gdGFyZ2V0CiAgICAgaWYgdGV4dDoKQEAgLTU1NCwxNyArNDg3LDIxIEBACiAKIFBJID0gUHJvY2Vzc2luZ0luc3RydWN0aW9uCiAKLSMjCi0jIFFOYW1lIHdyYXBwZXIuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYSBRTmFtZSBhdHRyaWJ1dGUgdmFsdWUsIGluCi0jIG9yZGVyIHRvIGdldCBwcm9wZXIgbmFtZXNwYWNlIGhhbmRsaW5nIG9uIG91dHB1dC4KLSMKLSMgQHBhcmFtIHRleHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgUU5hbWUgdmFsdWUsIGluIHRoZSBmb3JtIHt1cml9bG9jYWwsCi0jICAgICBvciwgaWYgdGhlIHRhZyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIFVSSSBwYXJ0IG9mIGEgUU5hbWUuCi0jIEBwYXJhbSB0YWcgT3B0aW9uYWwgdGFnLiAgSWYgZ2l2ZW4sIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcwotIyAgICAgYW4gVVJJLCBhbmQgdGhpcyBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBhIGxvY2FsIG5hbWUuCi0jIEByZXR1cm4gQW4gb3BhcXVlIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZSBRTmFtZS4KIAogY2xhc3MgUU5hbWU6CisgICAgIiIiUXVhbGlmaWVkIG5hbWUgd3JhcHBlci4KKworICAgIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gd3JhcCBhIFFOYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpbiBvcmRlciB0byBnZXQKKyAgICBwcm9wZXIgbmFtZXNwYWNlIGhhbmRpbmcgb24gb3V0cHV0LgorCisgICAgKnRleHRfb3JfdXJpKiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBRTmFtZSB2YWx1ZSBlaXRoZXIgaW4gdGhlIGZvcm0KKyAgICB7dXJpfWxvY2FsLCBvciBpZiB0aGUgdGFnIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgVVJJIHBhcnQgb2YgYSBRTmFtZS4KKworICAgICp0YWcqIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHdoaWNoIGlmIGdpdmVuLCB3aWxsIG1ha2UgdGhlIGZpcnN0CisgICAgYXJndW1lbnQgKHRleHRfb3JfdXJpKSBiZSBpbnRlcnByZXRlZCBhcyBhIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgKHRhZykKKyAgICBiZSBpbnRlcnByZXRlZCBhcyBhIGxvY2FsIG5hbWUuCisKKyAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dF9vcl91cmksIHRhZz1Ob25lKToKICAgICAgICAgaWYgdGFnOgogICAgICAgICAgICAgdGV4dF9vcl91cmkgPSAieyVzfSVzIiAlICh0ZXh0X29yX3VyaSwgdGFnKQpAQCAtNjAyLDYzICs1MzksNjUgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBFbGVtZW50VHJlZSB3cmFwcGVyIGNsYXNzLiAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGVudGlyZSBlbGVtZW50Ci0jIGhpZXJhcmNoeSwgYW5kIGFkZHMgc29tZSBleHRyYSBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tCi0jIHN0YW5kYXJkIFhNTC4KLSMKLSMgQHBhcmFtIGVsZW1lbnQgT3B0aW9uYWwgcm9vdCBlbGVtZW50LgotIyBAa2V5cGFyYW0gZmlsZSBPcHRpb25hbCBmaWxlIGhhbmRsZSBvciBmaWxlIG5hbWUuICBJZiBnaXZlbiwgdGhlCi0jICAgICB0cmVlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoaXMgWE1MIGZpbGUuCiAKIGNsYXNzIEVsZW1lbnRUcmVlOgorICAgICIiIkFuIFhNTCBlbGVtZW50IGhpZXJhcmNoeS4KIAorICAgIFRoaXMgY2xhc3MgYWxzbyBwcm92aWRlcyBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tCisgICAgc3RhbmRhcmQgWE1MLgorCisgICAgKmVsZW1lbnQqIGlzIGFuIG9wdGlvbmFsIHJvb3QgZWxlbWVudCBub2RlLAorICAgICpmaWxlKiBpcyBhbiBvcHRpb25hbCBmaWxlIGhhbmRsZSBvciBmaWxlIG5hbWUgb2YgYW4gWE1MIGZpbGUgd2hvc2UKKyAgICBjb250ZW50cyB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdHJlZSB3aXRoLgorCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQ9Tm9uZSwgZmlsZT1Ob25lKToKICAgICAgICAgIyBhc3NlcnQgZWxlbWVudCBpcyBOb25lIG9yIGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9yb290ID0gZWxlbWVudCAjIGZpcnN0IG5vZGUKICAgICAgICAgaWYgZmlsZToKICAgICAgICAgICAgIHNlbGYucGFyc2UoZmlsZSkKIAotICAgICMjCi0gICAgIyBHZXRzIHRoZSByb290IGVsZW1lbnQgZm9yIHRoaXMgdHJlZS4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBnZXRyb290KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gcm9vdCBlbGVtZW50IG9mIHRoaXMgdHJlZS4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QKIAotICAgICMjCi0gICAgIyBSZXBsYWNlcyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGlzIHRyZWUuICBUaGlzIGRpc2NhcmRzIHRoZQotICAgICMgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdHJlZSwgYW5kIHJlcGxhY2VzIGl0IHdpdGggdGhlIGdpdmVuCi0gICAgIyBlbGVtZW50LiAgVXNlIHdpdGggY2FyZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudCBBbiBlbGVtZW50IGluc3RhbmNlLgotCiAgICAgZGVmIF9zZXRyb290KHNlbGYsIGVsZW1lbnQpOgorICAgICAgICAiIiJSZXBsYWNlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHRyZWUuCisKKyAgICAgICAgVGhpcyB3aWxsIGRpc2NhcmQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQKKyAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudC4gIFVzZSB3aXRoIGNhcmUhCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9yb290ID0gZWxlbWVudAogCi0gICAgIyMKLSAgICAjIExvYWRzIGFuIGV4dGVybmFsIFhNTCBkb2N1bWVudCBpbnRvIHRoaXMgZWxlbWVudCB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBzb3VyY2UgQSBmaWxlIG5hbWUgb3IgZmlsZSBvYmplY3QuICBJZiBhIGZpbGUgb2JqZWN0IGlzCi0gICAgIyAgICAgZ2l2ZW4sIGl0IG9ubHkgaGFzIHRvIGltcGxlbWVudCBhIDxiPnJlYWQobik8L2I+IG1ldGhvZC4KLSAgICAjIEBrZXlwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSAgICAjICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSAgICAjIEByZXR1cm4gVGhlIGRvY3VtZW50IHJvb3QgZWxlbWVudC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotICAgICMgQGV4Y2VwdGlvbiBQYXJzZUVycm9yIElmIHRoZSBwYXJzZXIgZmFpbHMgdG8gcGFyc2UgdGhlIGRvY3VtZW50LgotCiAgICAgZGVmIHBhcnNlKHNlbGYsIHNvdXJjZSwgcGFyc2VyPU5vbmUpOgorICAgICAgICAiIiJMb2FkIGV4dGVybmFsIFhNTCBkb2N1bWVudCBpbnRvIGVsZW1lbnQgdHJlZS4KKworICAgICAgICAqc291cmNlKiBpcyBhIGZpbGUgbmFtZSBvciBmaWxlIG9iamVjdCwgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyCisgICAgICAgIGluc3RhbmNlIHRoYXQgZGVmYXVsdHMgdG8gWE1MUGFyc2VyLgorCisgICAgICAgIFBhcnNlRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBwYXJzZXIgZmFpbHMgdG8gcGFyc2UgdGhlIGRvY3VtZW50LgorCisgICAgICAgIFJldHVybnMgdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc291cmNlIGRvY3VtZW50LgorCisgICAgICAgICIiIgogICAgICAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQogICAgICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICJyZWFkIik6CiAgICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZSwgInJiIikKICAgICAgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgbm90IHBhcnNlcjoKLSAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCi0gICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgaWYgcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBJZiBubyBwYXJzZXIgd2FzIHNwZWNpZmllZCwgY3JlYXRlIGEgZGVmYXVsdCBYTUxQYXJzZXIKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIoKQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIocGFyc2VyLCAnX3BhcnNlX3dob2xlJyk6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIGRlZmF1bHQgWE1MUGFyc2VyLCB3aGVuIGl0IGNvbWVzIGZyb20gYW4gYWNjZWxlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICMgY2FuIGRlZmluZSBhbiBpbnRlcm5hbCBfcGFyc2Vfd2hvbGUgQVBJIGZvciBlZmZpY2llbmN5LgorICAgICAgICAgICAgICAgICAgICAjIEl0IGNhbiBiZSB1c2VkIHRvIHBhcnNlIHRoZSB3aG9sZSBzb3VyY2Ugd2l0aG91dCBmZWVkaW5nCisgICAgICAgICAgICAgICAgICAgICMgaXQgd2l0aCBjaHVua3MuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuX3BhcnNlX3dob2xlKHNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkKDY1NTM2KQogICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgICBicmVhawpAQCAtNjY5LDE1ICs2MDgsMTUgQEAKICAgICAgICAgICAgIGlmIGNsb3NlX3NvdXJjZToKICAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSB0cmVlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBlbGVtZW50LiAgVGhlIGl0ZXJhdG9yIGxvb3BzCi0gICAgIyBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGlzIHRyZWUsIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgV2hhdCB0YWdzIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yLgotICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgotCiAgICAgZGVmIGl0ZXIoc2VsZiwgdGFnPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgYW5kIHJldHVybiB0cmVlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBlbGVtZW50LgorCisgICAgICAgIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGlzIHRyZWUsIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICp0YWcqIGlzIGEgc3RyaW5nIHdpdGggdGhlIHRhZyBuYW1lIHRvIGl0ZXJhdGUgb3ZlcgorICAgICAgICAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKS4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyKHRhZykKIApAQCAtNjkxLDE1ICs2MzAsMTcgQEAKICAgICAgICAgKQogICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXIodGFnKSkKIAotICAgICMjCi0gICAgIyBTYW1lIGFzIGdldHJvb3QoKS5maW5kKHBhdGgpLCBzdGFydGluZyBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQgb3IgTm9uZQotCiAgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuZmluZChwYXRoKSwgd2hpY2ggaXMgRWxlbWVudC5maW5kKCkKKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTcxMSwxOSArNjUyLDE3IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kKHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZHRleHQocGF0aCksIHN0YXJ0aW5nIGF0IHRoZSByb290IG9mIHRoZSB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCi0gICAgIyAgICAgZGVmYXVsdCB2YWx1ZSBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudAotICAgICMgICAgIGlzIGZvdW5kLCBidXQgaGFzIG5vIHRleHQgY29udGVudCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbgotICAgICMgICAgIGVtcHR5IHN0cmluZy4KLSAgICAjIEBkZWZyZXR1cm4gc3RyaW5nCi0KICAgICBkZWYgZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdD1Ob25lLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICBTYW1lIGFzIGdldHJvb3QoKS5maW5kdGV4dChwYXRoKSwgIHdoaWNoIGlzIEVsZW1lbnQuZmluZHRleHQoKQorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aApAQCAtNzM1LDE2ICs2NzQsMTcgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmR0ZXh0KHBhdGgsIGRlZmF1bHQsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZGFsbChwYXRoKSwgc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvciBpdGVyYXRvciBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmRhbGwocGF0aCksIHdoaWNoIGlzIEVsZW1lbnQuZmluZGFsbCgpLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiBsaXN0IGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCkBAIC03NTYsMTcgKzY5NiwxNyBAQAogICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZGFsbChwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLml0ZXJmaW5kKHBhdGgpLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBvciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBhIGdlbmVyYXRlZCBzZXF1ZW5jZSBvZiBFbGVtZW50IGluc3RhbmNlcwotCiAgICAgZGVmIGl0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuaXRlcmZpbmQocGF0aCksIHdoaWNoIGlzIGVsZW1lbnQuaXRlcmZpbmQoKQorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiBhbiBpdGVyYWJsZSB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTc3OCwyNiArNzE4LDM1IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyZmluZChwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIFdyaXRlcyB0aGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSwgYXMgWE1MLgotICAgICMKLSAgICAjIEBkZWYgd3JpdGUoZmlsZSwgKipvcHRpb25zKQotICAgICMgQHBhcmFtIGZpbGUgQSBmaWxlIG5hbWUsIG9yIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciB3cml0aW5nLgotICAgICMgQHBhcmFtICoqb3B0aW9ucyBPcHRpb25zLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KLSAgICAjIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotICAgICMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCi0gICAgIyBAa2V5cGFyYW0geG1sX2RlY2xhcmF0aW9uIENvbnRyb2xzIGlmIGFuIFhNTCBkZWNsYXJhdGlvbiBzaG91bGQKLSAgICAjICAgICBiZSBhZGRlZCB0byB0aGUgZmlsZS4gIFVzZSBGYWxzZSBmb3IgbmV2ZXIsIFRydWUgZm9yIGFsd2F5cywKLSAgICAjICAgICBOb25lIGZvciBvbmx5IGlmIG5vdCBVUy1BU0NJSSBvciBVVEYtOCBvciBVbmljb2RlLiAgTm9uZSBpcyBkZWZhdWx0LgotICAgICMgQGtleXBhcmFtIGRlZmF1bHRfbmFtZXNwYWNlIFNldHMgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSAoZm9yICJ4bWxucyIpLgotICAgICMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSAgICAjICAgICAiYzE0biI7IGRlZmF1bHQgaXMgInhtbCIpLgotCiAgICAgZGVmIHdyaXRlKHNlbGYsIGZpbGVfb3JfZmlsZW5hbWUsCiAgICAgICAgICAgICAgIGVuY29kaW5nPU5vbmUsCiAgICAgICAgICAgICAgIHhtbF9kZWNsYXJhdGlvbj1Ob25lLAogICAgICAgICAgICAgICBkZWZhdWx0X25hbWVzcGFjZT1Ob25lLAotICAgICAgICAgICAgICBtZXRob2Q9Tm9uZSk6CisgICAgICAgICAgICAgIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKKyAgICAgICAgIiIiV3JpdGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSBhcyBYTUwuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICpmaWxlX29yX2ZpbGVuYW1lKiAtLSBmaWxlIG5hbWUgb3IgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHdyaXRpbmcKKworICAgICAgICAgICplbmNvZGluZyogLS0gdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdDogVVMtQVNDSUkpCisKKyAgICAgICAgICAqeG1sX2RlY2xhcmF0aW9uKiAtLSBib29sIGluZGljYXRpbmcgaWYgYW4gWE1MIGRlY2xhcmF0aW9uIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBvdXRwdXQuIElmIE5vbmUsIGFuIFhNTCBkZWNsYXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFkZGVkIGlmIGVuY29kaW5nIElTIE5PVCBlaXRoZXIgb2Y6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVMtQVNDSUksIFVURi04LCBvciBVbmljb2RlCisKKyAgICAgICAgICAqZGVmYXVsdF9uYW1lc3BhY2UqIC0tIHNldHMgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSAoZm9yICJ4bWxucyIpCisKKyAgICAgICAgICAqbWV0aG9kKiAtLSBlaXRoZXIgInhtbCIgKGRlZmF1bHQpLCAiaHRtbCwgInRleHQiLCBvciAiYzE0biIKKworICAgICAgICAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogLS0gY29udHJvbHMgdGhlIGZvcm1hdHRpbmcgb2YgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbiBubyBjb250ZW50LiBJZiBUcnVlIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhleSBhcmUgZW1pdHRlZCBhcyBhIHNpbmdsZSBzZWxmLWNsb3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLCBvdGhlcndpc2UgdGhleSBhcmUgZW1pdHRlZCBhcyBhIHBhaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHN0YXJ0L2VuZCB0YWdzCisKKyAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBtZXRob2Q6CiAgICAgICAgICAgICBtZXRob2QgPSAieG1sIgogICAgICAgICBlbGlmIG1ldGhvZCBub3QgaW4gX3NlcmlhbGl6ZToKQEAgLTgyNSw3ICs3NzQsOCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBxbmFtZXMsIG5hbWVzcGFjZXMgPSBfbmFtZXNwYWNlcyhzZWxmLl9yb290LCBkZWZhdWx0X25hbWVzcGFjZSkKICAgICAgICAgICAgICAgICBzZXJpYWxpemUgPSBfc2VyaWFsaXplW21ldGhvZF0KLSAgICAgICAgICAgICAgICBzZXJpYWxpemUod3JpdGUsIHNlbGYuX3Jvb3QsIHFuYW1lcywgbmFtZXNwYWNlcykKKyAgICAgICAgICAgICAgICBzZXJpYWxpemUod3JpdGUsIHNlbGYuX3Jvb3QsIHFuYW1lcywgbmFtZXNwYWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAKICAgICBkZWYgd3JpdGVfYzE0bihzZWxmLCBmaWxlKToKICAgICAgICAgIyBseG1sLmV0cmVlIGNvbXBhdGliaWxpdHkuICB1c2Ugb3V0cHV0IG1ldGhvZCBpbnN0ZWFkCkBAIC05NDcsNyArODk3LDggQEAKICAgICAgICAgICAgIGFkZF9xbmFtZSh0ZXh0LnRleHQpCiAgICAgcmV0dXJuIHFuYW1lcywgbmFtZXNwYWNlcwogCi1kZWYgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcyk6CitkZWYgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcywKKyAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cywgKiprd2FyZ3MpOgogICAgIHRhZyA9IGVsZW0udGFnCiAgICAgdGV4dCA9IGVsZW0udGV4dAogICAgIGlmIHRhZyBpcyBDb21tZW50OgpAQCAtOTYwLDcgKzkxMSw4IEBACiAgICAgICAgICAgICBpZiB0ZXh0OgogICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCkpCiAgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgotICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUpCisgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1zaG9ydF9lbXB0eV9lbGVtZW50cykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHdyaXRlKCI8IiArIHRhZykKICAgICAgICAgICAgIGl0ZW1zID0gbGlzdChlbGVtLml0ZW1zKCkpCkBAIC05ODIsMTIgKzkzNCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgdiA9IF9lc2NhcGVfYXR0cmliKHYpCiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCIgJXM9XCIlc1wiIiAlIChxbmFtZXNba10sIHYpKQotICAgICAgICAgICAgaWYgdGV4dCBvciBsZW4oZWxlbSk6CisgICAgICAgICAgICBpZiB0ZXh0IG9yIGxlbihlbGVtKSBvciBub3Qgc2hvcnRfZW1wdHlfZWxlbWVudHM6CiAgICAgICAgICAgICAgICAgd3JpdGUoIj4iKQogICAgICAgICAgICAgICAgIGlmIHRleHQ6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCkpCiAgICAgICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKLSAgICAgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgICAgICAgICAgICAgd3JpdGUoIjwvIiArIHRhZyArICI+IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgd3JpdGUoIiAvPiIpCkBAIC0xMDAyLDcgKzk1NSw3IEBACiBleGNlcHQgTmFtZUVycm9yOgogICAgIHBhc3MKIAotZGVmIF9zZXJpYWxpemVfaHRtbCh3cml0ZSwgZWxlbSwgcW5hbWVzLCBuYW1lc3BhY2VzKToKK2RlZiBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcywgKiprd2FyZ3MpOgogICAgIHRhZyA9IGVsZW0udGFnCiAgICAgdGV4dCA9IGVsZW0udGV4dAogICAgIGlmIHRhZyBpcyBDb21tZW50OgpAQCAtMTA2NiwxOCArMTAxOSwxOSBAQAogIyAgICJjMTRuIjogX3NlcmlhbGl6ZV9jMTRuLAogfQogCi0jIwotIyBSZWdpc3RlcnMgYSBuYW1lc3BhY2UgcHJlZml4LiAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueQotIyBleGlzdGluZyBtYXBwaW5nIGZvciBlaXRoZXIgdGhlIGdpdmVuIHByZWZpeCBvciB0aGUgbmFtZXNwYWNlIFVSSQotIyB3aWxsIGJlIHJlbW92ZWQuCi0jCi0jIEBwYXJhbSBwcmVmaXggTmFtZXNwYWNlIHByZWZpeC4KLSMgQHBhcmFtIHVyaSBOYW1lc3BhY2UgdXJpLiAgVGFncyBhbmQgYXR0cmlidXRlcyBpbiB0aGlzIG5hbWVzcGFjZQotIyAgICAgd2lsbCBiZSBzZXJpYWxpemVkIHdpdGggdGhlIGdpdmVuIHByZWZpeCwgaWYgYXQgYWxsIHBvc3NpYmxlLgotIyBAZXhjZXB0aW9uIFZhbHVlRXJyb3IgSWYgdGhlIHByZWZpeCBpcyByZXNlcnZlZCwgb3IgaXMgb3RoZXJ3aXNlCi0jICAgICBpbnZhbGlkLgogCiBkZWYgcmVnaXN0ZXJfbmFtZXNwYWNlKHByZWZpeCwgdXJpKToKKyAgICAiIiJSZWdpc3RlciBhIG5hbWVzcGFjZSBwcmVmaXguCisKKyAgICBUaGUgcmVnaXN0cnkgaXMgZ2xvYmFsLCBhbmQgYW55IGV4aXN0aW5nIG1hcHBpbmcgZm9yIGVpdGhlciB0aGUKKyAgICBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkgd2lsbCBiZSByZW1vdmVkLgorCisgICAgKnByZWZpeCogaXMgdGhlIG5hbWVzcGFjZSBwcmVmaXgsICp1cmkqIGlzIGEgbmFtZXNwYWNlIHVyaS4gVGFncyBhbmQKKyAgICBhdHRyaWJ1dGVzIGluIHRoaXMgbmFtZXNwYWNlIHdpbGwgYmUgc2VyaWFsaXplZCB3aXRoIHByZWZpeCBpZiBwb3NzaWJsZS4KKworICAgIFZhbHVlRXJyb3IgaXMgcmFpc2VkIGlmIHByZWZpeCBpcyByZXNlcnZlZCBvciBpcyBpbnZhbGlkLgorCisgICAgIiIiCiAgICAgaWYgcmUubWF0Y2goIm5zXGQrJCIsIHByZWZpeCk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByZWZpeCBmb3JtYXQgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSIpCiAgICAgZm9yIGssIHYgaW4gbGlzdChfbmFtZXNwYWNlX21hcC5pdGVtcygpKToKQEAgLTExNTMsNDAgKzExMDcsMjcgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKLSMgc3ViZWxlbWVudHMuICBJZiBlbmNvZGluZyBpcyAidW5pY29kZSIsIHRoZSByZXR1cm4gdHlwZSBpcyBhIHN0cmluZzsKLSMgb3RoZXJ3aXNlIGl0IGlzIGEgYnl0ZXMgYXJyYXkuCi0jCi0jIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotIyAgICAgVXNlICJ1bmljb2RlIiB0byByZXR1cm4gYSBVbmljb2RlIHN0cmluZy4KLSMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCi0jIEByZXR1cm4gQW4gKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgotIyBAZGVmcmV0dXJuIHN0cmluZworZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpOgorICAgICIiIkdlbmVyYXRlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBYTUwgZWxlbWVudC4KIAotZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lKToKKyAgICBBbGwgc3ViZWxlbWVudHMgYXJlIGluY2x1ZGVkLiAgSWYgZW5jb2RpbmcgaXMgInVuaWNvZGUiLCBhIHN0cmluZworICAgIGlzIHJldHVybmVkLiBPdGhlcndpc2UgYSBieXRlc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAgKmVsZW1lbnQqIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UsICplbmNvZGluZyogaXMgYW4gb3B0aW9uYWwgb3V0cHV0CisgICAgZW5jb2RpbmcgZGVmYXVsdGluZyB0byBVUy1BU0NJSSwgKm1ldGhvZCogaXMgYW4gb3B0aW9uYWwgb3V0cHV0IHdoaWNoIGNhbgorICAgIGJlIG9uZSBvZiAieG1sIiAoZGVmYXVsdCksICJodG1sIiwgInRleHQiIG9yICJjMTRuIi4KKworICAgIFJldHVybnMgYW4gKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgorCisgICAgIiIiCiAgICAgc3RyZWFtID0gaW8uU3RyaW5nSU8oKSBpZiBlbmNvZGluZyA9PSAndW5pY29kZScgZWxzZSBpby5CeXRlc0lPKCkKLSAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kKQorICAgIEVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN0cmVhbSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgcmV0dXJuIHN0cmVhbS5nZXR2YWx1ZSgpCiAKLSMjCi0jIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAotIyBzdWJlbGVtZW50cy4KLSMKLSMgQHBhcmFtIGVsZW1lbnQgQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCi0jICAgICBVc2UgInVuaWNvZGUiIHRvIHJldHVybiBhIFVuaWNvZGUgc3RyaW5nLgotIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgotIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KLSMgQHJldHVybiBBIHNlcXVlbmNlIG9iamVjdCBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KLSMgQGRlZnJldHVybiBzZXF1ZW5jZQotIyBAc2luY2UgMS4zCi0KIGNsYXNzIF9MaXN0RGF0YVN0cmVhbShpby5CdWZmZXJlZElPQmFzZSk6Ci0gICAgIiIiIEFuIGF1eGlsaWFyeSBzdHJlYW0gYWNjdW11bGF0aW5nIGludG8gYSBsaXN0IHJlZmVyZW5jZQotICAgICIiIgorICAgICIiIkFuIGF1eGlsaWFyeSBzdHJlYW0gYWNjdW11bGF0aW5nIGludG8gYSBsaXN0IHJlZmVyZW5jZS4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbHN0KToKICAgICAgICAgc2VsZi5sc3QgPSBsc3QKIApAQCAtMTIwMiwyMiArMTE0MywyNSBAQAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gbGVuKHNlbGYubHN0KQogCi1kZWYgdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lKToKK2RlZiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9Tm9uZSwgbWV0aG9kPU5vbmUsICosCisgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpOgogICAgIGxzdCA9IFtdCiAgICAgc3RyZWFtID0gX0xpc3REYXRhU3RyZWFtKGxzdCkKLSAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kKQorICAgIEVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN0cmVhbSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgcmV0dXJuIGxzdAogCi0jIwotIyBXcml0ZXMgYW4gZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuICBUaGlzCi0jIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KLSMgPHA+Ci0jIFRoZSBleGFjdCBvdXRwdXQgZm9ybWF0IGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEluIHRoaXMKLSMgdmVyc2lvbiwgaXQncyB3cml0dGVuIGFzIGFuIG9yZGluYXJ5IFhNTCBmaWxlLgotIwotIyBAcGFyYW0gZWxlbSBBbiBlbGVtZW50IHRyZWUgb3IgYW4gaW5kaXZpZHVhbCBlbGVtZW50LgogCiBkZWYgZHVtcChlbGVtKToKKyAgICAiIiJXcml0ZSBlbGVtZW50IHRyZWUgb3IgZWxlbWVudCBzdHJ1Y3R1cmUgdG8gc3lzLnN0ZG91dC4KKworICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgorCisgICAgKmVsZW0qIGlzIGVpdGhlciBhbiBFbGVtZW50VHJlZSwgb3IgYSBzaW5nbGUgRWxlbWVudC4gIFRoZSBleGFjdCBvdXRwdXQKKyAgICBmb3JtYXQgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiAgSW4gdGhpcyB2ZXJzaW9uLCBpdCdzIHdyaXR0ZW4gYXMgYW4KKyAgICBvcmRpbmFyeSBYTUwgZmlsZS4KKworICAgICIiIgogICAgICMgZGVidWdnaW5nCiAgICAgaWYgbm90IGlzaW5zdGFuY2UoZWxlbSwgRWxlbWVudFRyZWUpOgogICAgICAgICBlbGVtID0gRWxlbWVudFRyZWUoZWxlbSkKQEAgLTEyMjksMTQ0ICsxMTczLDE2OSBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBwYXJzaW5nCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgaW50byBhbiBlbGVtZW50IHRyZWUuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBbiBFbGVtZW50VHJlZSBpbnN0YW5jZQogCiBkZWYgcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGludG8gZWxlbWVudCB0cmVlLgorCisgICAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLAorICAgICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZSBkZWZhdWx0aW5nIHRvIFhNTFBhcnNlci4KKworICAgIFJldHVybiBhbiBFbGVtZW50VHJlZSBpbnN0YW5jZS4KKworICAgICIiIgogICAgIHRyZWUgPSBFbGVtZW50VHJlZSgpCiAgICAgdHJlZS5wYXJzZShzb3VyY2UsIHBhcnNlcikKICAgICByZXR1cm4gdHJlZQogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHksIGFuZCByZXBvcnRzCi0jIHdoYXQncyBnb2luZyBvbiB0byB0aGUgdXNlci4KLSMKLSMgQHBhcmFtIHNvdXJjZSBBIGZpbGVuYW1lIG9yIGZpbGUgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBldmVudHMgQSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIElmIG9taXR0ZWQsIG9ubHkgImVuZCIKLSMgICAgIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEEgKGV2ZW50LCBlbGVtKSBpdGVyYXRvci4KIAogZGVmIGl0ZXJwYXJzZShzb3VyY2UsIGV2ZW50cz1Ob25lLCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiSW5jcmVtZW50YWxseSBwYXJzZSBYTUwgZG9jdW1lbnQgaW50byBFbGVtZW50VHJlZS4KKworICAgIFRoaXMgY2xhc3MgYWxzbyByZXBvcnRzIHdoYXQncyBnb2luZyBvbiB0byB0aGUgdXNlciBiYXNlZCBvbiB0aGUKKyAgICAqZXZlbnRzKiBpdCBpcyBpbml0aWFsaXplZCB3aXRoLiAgVGhlIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzCisgICAgInN0YXJ0IiwgImVuZCIsICJzdGFydC1ucyIgYW5kICJlbmQtbnMiICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0CisgICAgZGV0YWlsZWQgbmFtZXNwYWNlIGluZm9ybWF0aW9uKS4gIElmICpldmVudHMqIGlzIG9taXR0ZWQsIG9ubHkKKyAgICAiZW5kIiBldmVudHMgYXJlIHJlcG9ydGVkLgorCisgICAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLCAqZXZlbnRzKiBpcworICAgIGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2ssICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4KKworICAgIFJldHVybnMgYW4gaXRlcmF0b3IgcHJvdmlkaW5nIChldmVudCwgZWxlbSkgcGFpcnMuCisKKyAgICAiIiIKICAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQogICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCiAgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKLSAgICBpZiBub3QgcGFyc2VyOgotICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgcmV0dXJuIF9JdGVyUGFyc2VJdGVyYXRvcihzb3VyY2UsIGV2ZW50cywgcGFyc2VyLCBjbG9zZV9zb3VyY2UpCiAKKworY2xhc3MgWE1MUHVsbFBhcnNlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudHM9Tm9uZSwgKiwgX3BhcnNlcj1Ob25lKToKKyAgICAgICAgIyBUaGUgX3BhcnNlciBhcmd1bWVudCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIG11c3Qgbm90IGJlIHJlbGllZAorICAgICAgICAjIHVwb24gaW4gdXNlciBjb2RlLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3NzQxIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgIyBfZWxlbWVudHRyZWUuYyBleHBlY3RzIGEgbGlzdCwgbm90IGEgZGVxdWUKKyAgICAgICAgc2VsZi5fZXZlbnRzX3F1ZXVlID0gW10KKyAgICAgICAgc2VsZi5faW5kZXggPSAwCisgICAgICAgIHNlbGYuX3BhcnNlciA9IF9wYXJzZXIgb3IgWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQorICAgICAgICAjIHdpcmUgdXAgdGhlIHBhcnNlciBmb3IgZXZlbnQgcmVwb3J0aW5nCisgICAgICAgIGlmIGV2ZW50cyBpcyBOb25lOgorICAgICAgICAgICAgZXZlbnRzID0gKCJlbmQiLCkKKyAgICAgICAgc2VsZi5fcGFyc2VyLl9zZXRldmVudHMoc2VsZi5fZXZlbnRzX3F1ZXVlLCBldmVudHMpCisKKyAgICBkZWYgZmVlZChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiRmVlZCBlbmNvZGVkIGRhdGEgdG8gcGFyc2VyLiIiIgorICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZlZWQoKSBjYWxsZWQgYWZ0ZXIgZW5kIG9mIHN0cmVhbSIpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZXZlbnRzX3F1ZXVlLmFwcGVuZChleGMpCisKKyAgICBkZWYgX2Nsb3NlX2FuZF9yZXR1cm5fcm9vdChzZWxmKToKKyAgICAgICAgIyBpdGVycGFyc2UgbmVlZHMgdGhpcyB0byBzZXQgaXRzIHJvb3QgYXR0cmlidXRlIHByb3Blcmx5IDooCisgICAgICAgIHJvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKQorICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCisgICAgICAgIHJldHVybiByb290CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkZpbmlzaCBmZWVkaW5nIGRhdGEgdG8gcGFyc2VyLgorCisgICAgICAgIFVubGlrZSBYTUxQYXJzZXIsIGRvZXMgbm90IHJldHVybiB0aGUgcm9vdCBlbGVtZW50LiBVc2UKKyAgICAgICAgcmVhZF9ldmVudHMoKSB0byBjb25zdW1lIGVsZW1lbnRzIGZyb20gWE1MUHVsbFBhcnNlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Nsb3NlX2FuZF9yZXR1cm5fcm9vdCgpCisKKyAgICBkZWYgcmVhZF9ldmVudHMoc2VsZik6CisgICAgICAgICIiIkl0ZXJhdGUgb3ZlciBjdXJyZW50bHkgYXZhaWxhYmxlIChldmVudCwgZWxlbSkgcGFpcnMuCisKKyAgICAgICAgRXZlbnRzIGFyZSBjb25zdW1lZCBmcm9tIHRoZSBpbnRlcm5hbCBldmVudCBxdWV1ZSBhcyB0aGV5IGFyZQorICAgICAgICByZXRyaWV2ZWQgZnJvbSB0aGUgaXRlcmF0b3IuCisgICAgICAgICIiIgorICAgICAgICBldmVudHMgPSBzZWxmLl9ldmVudHNfcXVldWUKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGluZGV4ID0gc2VsZi5faW5kZXgKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBldmVudCA9IGV2ZW50c1tzZWxmLl9pbmRleF0KKyAgICAgICAgICAgICAgICAjIEF2b2lkIHJldGFpbmluZyByZWZlcmVuY2VzIHRvIHBhc3QgZXZlbnRzCisgICAgICAgICAgICAgICAgZXZlbnRzW3NlbGYuX2luZGV4XSA9IE5vbmUKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpbmRleCArPSAxCisgICAgICAgICAgICAjIENvbXBhY3QgdGhlIGxpc3QgaW4gYSBPKDEpIGFtb3J0aXplZCBmYXNoaW9uCisgICAgICAgICAgICAjIEFzIG5vdGVkIGFib3ZlLCBfZWxlbWVudHJlZS5jIG5lZWRzIGEgbGlzdCwgbm90IGEgZGVxdWUKKyAgICAgICAgICAgIGlmIGluZGV4ICogMiA+PSBsZW4oZXZlbnRzKToKKyAgICAgICAgICAgICAgICBldmVudHNbOmluZGV4XSA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gaW5kZXgKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgcmFpc2UgZXZlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgZXZlbnQKKworCiBjbGFzcyBfSXRlclBhcnNlSXRlcmF0b3I6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlLCBldmVudHMsIHBhcnNlciwgY2xvc2Vfc291cmNlPUZhbHNlKToKKyAgICAgICAgIyBVc2UgdGhlIGludGVybmFsLCB1bmRvY3VtZW50ZWQgX3BhcnNlciBhcmd1bWVudCBmb3Igbm93OyBXaGVuIHRoZQorICAgICAgICAjIHBhcnNlciBhcmd1bWVudCBvZiBpdGVycGFyc2UgaXMgcmVtb3ZlZCwgdGhpcyBjYW4gYmUga2lsbGVkLgorICAgICAgICBzZWxmLl9wYXJzZXIgPSBYTUxQdWxsUGFyc2VyKGV2ZW50cz1ldmVudHMsIF9wYXJzZXI9cGFyc2VyKQogICAgICAgICBzZWxmLl9maWxlID0gc291cmNlCiAgICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBjbG9zZV9zb3VyY2UKLSAgICAgICAgc2VsZi5fZXZlbnRzID0gW10KLSAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQogICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290ID0gTm9uZQotICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKLSAgICAgICAgIyB3aXJlIHVwIHRoZSBwYXJzZXIgZm9yIGV2ZW50IHJlcG9ydGluZwotICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXIuX3BhcnNlcgotICAgICAgICBhcHBlbmQgPSBzZWxmLl9ldmVudHMuYXBwZW5kCi0gICAgICAgIGlmIGV2ZW50cyBpcyBOb25lOgotICAgICAgICAgICAgZXZlbnRzID0gWyJlbmQiXQotICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgotICAgICAgICAgICAgaWYgZXZlbnQgPT0gInN0YXJ0IjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBhdHRyaWJfaW4sIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydD1zZWxmLl9wYXJzZXIuX3N0YXJ0X2xpc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgc3RhcnQodGFnLCBhdHRyaWJfaW4pKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGF0dHJpYl9pbiwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXNlbGYuX3BhcnNlci5fc3RhcnQpOgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgc3RhcnQodGFnLCBhdHRyaWJfaW4pKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICBlbGlmIGV2ZW50ID09ICJlbmQiOgotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kPXNlbGYuX3BhcnNlci5fZW5kKToKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgZW5kKHRhZykpKQotICAgICAgICAgICAgICAgIHBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gInN0YXJ0LW5zIjoKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIHVyaSwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQpOgotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCAocHJlZml4IG9yICIiLCB1cmkgb3IgIiIpKSkKLSAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gImVuZC1ucyI6Ci0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCk6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIE5vbmUpKQotICAgICAgICAgICAgICAgIHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBldmVudCAlciIgJSBldmVudCkKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpdGVtID0gc2VsZi5fZXZlbnRzW3NlbGYuX2luZGV4XQotICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ICs9IDEKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlbQotICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgaWYgc2VsZi5fZXJyb3I6Ci0gICAgICAgICAgICAgICAgZSA9IHNlbGYuX2Vycm9yCi0gICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgcmFpc2UgZQotICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5fcGFyc2VyLnJlYWRfZXZlbnRzKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50CisgICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIuX3BhcnNlciBpcyBOb25lOgogICAgICAgICAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zZV9maWxlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAgICAgICAgICAgICAjIGxvYWQgZXZlbnQgYnVmZmVyCi0gICAgICAgICAgICBkZWwgc2VsZi5fZXZlbnRzWzpdCi0gICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoMTYzODQpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2ICogMTAyNCkKICAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gZXhjCisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHNlbGYuX3BhcnNlci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuX2Nsb3NlX2FuZF9yZXR1cm5fcm9vdCgpCiAKICAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHN0cmluZyBjb25zdGFudC4gIFRoaXMgZnVuY3Rpb24gY2FuCi0jIGJlIHVzZWQgdG8gZW1iZWQgIlhNTCBsaXRlcmFscyIgaW4gUHl0aG9uIGNvZGUuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50CiAKIGRlZiBYTUwodGV4dCwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHN0cmluZyBjb25zdGFudC4KKworICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZW1iZWQgIlhNTCBMaXRlcmFscyIgaW4gUHl0aG9uIGNvZGUuCisKKyAgICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YSwgKnBhcnNlciogaXMgYW4KKyAgICBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UsIGRlZmF1bHRpbmcgdG8gdGhlIHN0YW5kYXJkIFhNTFBhcnNlci4KKworICAgIFJldHVybnMgYW4gRWxlbWVudCBpbnN0YW5jZS4KKworICAgICIiIgogICAgIGlmIG5vdCBwYXJzZXI6CiAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBwYXJzZXIuZmVlZCh0ZXh0KQogICAgIHJldHVybiBwYXJzZXIuY2xvc2UoKQogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgY29uc3RhbnQsIGFuZCBhbHNvIHJldHVybnMKLSMgYSBkaWN0aW9uYXJ5IHdoaWNoIG1hcHMgZnJvbSBlbGVtZW50IGlkOnMgdG8gZWxlbWVudHMuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIGFuIEVsZW1lbnQgaW5zdGFuY2UgYW5kIGEgZGljdGlvbmFyeS4KLSMgQGRlZnJldHVybiAoRWxlbWVudCwgZGljdGlvbmFyeSkKIAogZGVmIFhNTElEKHRleHQsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzdHJpbmcgY29uc3RhbnQgZm9yIGl0cyBJRHMuCisKKyAgICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YSwgKnBhcnNlciogaXMgYW4KKyAgICBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UsIGRlZmF1bHRpbmcgdG8gdGhlIHN0YW5kYXJkIFhNTFBhcnNlci4KKworICAgIFJldHVybnMgYW4gKEVsZW1lbnQsIGRpY3QpIHR1cGxlLCBpbiB3aGljaCB0aGUKKyAgICBkaWN0IG1hcHMgZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLgorCisgICAgIiIiCiAgICAgaWYgbm90IHBhcnNlcjoKICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIHBhcnNlci5mZWVkKHRleHQpCkBAIC0xMzc4LDI3ICsxMzQ3LDE4IEBACiAgICAgICAgICAgICBpZHNbaWRdID0gZWxlbQogICAgIHJldHVybiB0cmVlLCBpZHMKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgU2FtZSBhcyB7QGxpbmsgI1hNTH0uCi0jCi0jIEBkZWYgZnJvbXN0cmluZyh0ZXh0KQotIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50Ci0KKyMgUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc3RyaW5nIGNvbnN0YW50LiAgQWxpYXMgZm9yIFhNTCgpLgogZnJvbXN0cmluZyA9IFhNTAogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzLgotIwotIyBAcGFyYW0gc2VxdWVuY2UgQSBsaXN0IG9yIG90aGVyIHNlcXVlbmNlIGNvbnRhaW5pbmcgWE1MIGRhdGEgZnJhZ21lbnRzLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKLSMgQHNpbmNlIDEuMwotCiBkZWYgZnJvbXN0cmluZ2xpc3Qoc2VxdWVuY2UsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzLgorCisgICAgKnNlcXVlbmNlKiBpcyBhIGxpc3Qgb2Ygb3RoZXIgc2VxdWVuY2UsICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlcgorICAgIGluc3RhbmNlLCBkZWZhdWx0aW5nIHRvIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICBpZiBub3QgcGFyc2VyOgogICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgZm9yIHRleHQgaW4gc2VxdWVuY2U6CkBAIC0xNDA3LDE5ICsxMzY3LDIwIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgR2VuZXJpYyBlbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyLiAgVGhpcyBidWlsZGVyIGNvbnZlcnRzIGEgc2VxdWVuY2UKLSMgb2Yge0BsaW5rICNUcmVlQnVpbGRlci5zdGFydH0sIHtAbGluayAjVHJlZUJ1aWxkZXIuZGF0YX0sIGFuZCB7QGxpbmsKLSMgI1RyZWVCdWlsZGVyLmVuZH0gbWV0aG9kIGNhbGxzIHRvIGEgd2VsbC1mb3JtZWQgZWxlbWVudCBzdHJ1Y3R1cmUuCi0jIDxwPgotIyBZb3UgY2FuIHVzZSB0aGlzIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTAotIyBwYXJzZXIsIG9yIGEgcGFyc2VyIGZvciBzb21lIG90aGVyIFhNTC1saWtlIGZvcm1hdC4KLSMKLSMgQHBhcmFtIGVsZW1lbnRfZmFjdG9yeSBPcHRpb25hbCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkKLSMgICAgaXMgY2FsbGVkIHRvIGNyZWF0ZSBuZXcgRWxlbWVudCBpbnN0YW5jZXMsIGFzIG5lY2Vzc2FyeS4KIAogY2xhc3MgVHJlZUJ1aWxkZXI6CisgICAgIiIiR2VuZXJpYyBlbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyLgogCisgICAgVGhpcyBidWlsZGVyIGNvbnZlcnRzIGEgc2VxdWVuY2Ugb2Ygc3RhcnQsIGRhdGEsIGFuZCBlbmQgbWV0aG9kCisgICAgY2FsbHMgdG8gYSB3ZWxsLWZvcm1lZCBlbGVtZW50IHN0cnVjdHVyZS4KKworICAgIFlvdSBjYW4gdXNlIHRoaXMgY2xhc3MgdG8gYnVpbGQgYW4gZWxlbWVudCBzdHJ1Y3R1cmUgdXNpbmcgYSBjdXN0b20gWE1MCisgICAgcGFyc2VyLCBvciBhIHBhcnNlciBmb3Igc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuCisKKyAgICAqZWxlbWVudF9mYWN0b3J5KiBpcyBhbiBvcHRpb25hbCBlbGVtZW50IGZhY3Rvcnkgd2hpY2ggaXMgY2FsbGVkCisgICAgdG8gY3JlYXRlIG5ldyBFbGVtZW50IGluc3RhbmNlcywgYXMgbmVjZXNzYXJ5LgorCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnRfZmFjdG9yeT1Ob25lKToKICAgICAgICAgc2VsZi5fZGF0YSA9IFtdICMgZGF0YSBjb2xsZWN0b3IKICAgICAgICAgc2VsZi5fZWxlbSA9IFtdICMgZWxlbWVudCBzdGFjawpAQCAtMTQyOSwxNCArMTM5MCw4IEBACiAgICAgICAgICAgICBlbGVtZW50X2ZhY3RvcnkgPSBFbGVtZW50CiAgICAgICAgIHNlbGYuX2ZhY3RvcnkgPSBlbGVtZW50X2ZhY3RvcnkKIAotICAgICMjCi0gICAgIyBGbHVzaGVzIHRoZSBidWlsZGVyIGJ1ZmZlcnMsIGFuZCByZXR1cm5zIHRoZSB0b3BsZXZlbCBkb2N1bWVudAotICAgICMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiRmx1c2ggYnVpbGRlciBidWZmZXJzIGFuZCByZXR1cm4gdG9wbGV2ZWwgZG9jdW1lbnQgRWxlbWVudC4iIiIKICAgICAgICAgYXNzZXJ0IGxlbihzZWxmLl9lbGVtKSA9PSAwLCAibWlzc2luZyBlbmQgdGFncyIKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xhc3QgaXMgbm90IE5vbmUsICJtaXNzaW5nIHRvcGxldmVsIGVsZW1lbnQiCiAgICAgICAgIHJldHVybiBzZWxmLl9sYXN0CkBAIC0xNDUzLDI0ICsxNDA4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3QudGV4dCA9IHRleHQKICAgICAgICAgICAgIHNlbGYuX2RhdGEgPSBbXQogCi0gICAgIyMKLSAgICAjIEFkZHMgdGV4dCB0byB0aGUgY3VycmVudCBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSBkYXRhIEEgc3RyaW5nLiAgVGhpcyBzaG91bGQgYmUgZWl0aGVyIGFuIDgtYml0IHN0cmluZwotICAgICMgICAgY29udGFpbmluZyBBU0NJSSB0ZXh0LCBvciBhIFVuaWNvZGUgc3RyaW5nLgotCiAgICAgZGVmIGRhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkFkZCB0ZXh0IHRvIGN1cnJlbnQgZWxlbWVudC4iIiIKICAgICAgICAgc2VsZi5fZGF0YS5hcHBlbmQoZGF0YSkKIAotICAgICMjCi0gICAgIyBPcGVucyBhIG5ldyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgVGhlIGVsZW1lbnQgbmFtZS4KLSAgICAjIEBwYXJhbSBhdHRyaWIgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgotICAgICMgQHJldHVybiBUaGUgb3BlbmVkIGVsZW1lbnQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBzdGFydChzZWxmLCB0YWcsIGF0dHJzKToKKyAgICAgICAgIiIiT3BlbiBuZXcgZWxlbWVudCBhbmQgcmV0dXJuIGl0LgorCisgICAgICAgICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUsICphdHRycyogaXMgYSBkaWN0IGNvbnRhaW5pbmcgZWxlbWVudAorICAgICAgICBhdHRyaWJ1dGVzLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLl9mbHVzaCgpCiAgICAgICAgIHNlbGYuX2xhc3QgPSBlbGVtID0gc2VsZi5fZmFjdG9yeSh0YWcsIGF0dHJzKQogICAgICAgICBpZiBzZWxmLl9lbGVtOgpAQCAtMTQ3OSwxNCArMTQyNywxMiBAQAogICAgICAgICBzZWxmLl90YWlsID0gMAogICAgICAgICByZXR1cm4gZWxlbQogCi0gICAgIyMKLSAgICAjIENsb3NlcyB0aGUgY3VycmVudCBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgVGhlIGVsZW1lbnQgbmFtZS4KLSAgICAjIEByZXR1cm4gVGhlIGNsb3NlZCBlbGVtZW50LgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgZW5kKHNlbGYsIHRhZyk6CisgICAgICAgICIiIkNsb3NlIGFuZCByZXR1cm4gY3VycmVudCBFbGVtZW50LgorCisgICAgICAgICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2ZsdXNoKCkKICAgICAgICAgc2VsZi5fbGFzdCA9IHNlbGYuX2VsZW0ucG9wKCkKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xhc3QudGFnID09IHRhZyxcCkBAIC0xNDk1LDIwICsxNDQxLDE4IEBACiAgICAgICAgIHNlbGYuX3RhaWwgPSAxCiAgICAgICAgIHJldHVybiBzZWxmLl9sYXN0CiAKLSMjCi0jIEVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIgZm9yIFhNTCBzb3VyY2UgZGF0YSwgYmFzZWQgb24gdGhlCi0jIDxiPmV4cGF0PC9iPiBwYXJzZXIuCi0jCi0jIEBrZXlwYXJhbSB0YXJnZXQgVGFyZ2V0IG9iamVjdC4gIElmIG9taXR0ZWQsIHRoZSBidWlsZGVyIHVzZXMgYW4KLSMgICAgIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCB7QGxpbmsgI1RyZWVCdWlsZGVyfSBjbGFzcy4KLSMgQGtleXBhcmFtIGh0bWwgUHJlZGVmaW5lIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZAotIyAgICAgYnkgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBlbmNvZGluZy4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzCi0jICAgICB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZS4KLSMgQHNlZSAjRWxlbWVudFRyZWUKLSMgQHNlZSAjVHJlZUJ1aWxkZXIKIAorIyBhbHNvIHNlZSBFbGVtZW50VHJlZSBhbmQgVHJlZUJ1aWxkZXIKIGNsYXNzIFhNTFBhcnNlcjoKKyAgICAiIiJFbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEgYmFzZWQgb24gdGhlIGV4cGF0IHBhcnNlci4KKworICAgICpodG1sKiBhcmUgcHJlZGVmaW5lZCBIVE1MIGVudGl0aWVzIChub3Qgc3VwcG9ydGVkIGN1cnJlbnRseSksCisgICAgKnRhcmdldCogaXMgYW4gb3B0aW9uYWwgdGFyZ2V0IG9iamVjdCB3aGljaCBkZWZhdWx0cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUKKyAgICBzdGFuZGFyZCBUcmVlQnVpbGRlciBjbGFzcywgKmVuY29kaW5nKiBpcyBhbiBvcHRpb25hbCBlbmNvZGluZyBzdHJpbmcKKyAgICB3aGljaCBpZiBnaXZlbiwgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlIFhNTCBmaWxlOgorICAgIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMKKworICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGh0bWw9MCwgdGFyZ2V0PU5vbmUsIGVuY29kaW5nPU5vbmUpOgogICAgICAgICB0cnk6CkBAIC0xNTQxLDE5ICsxNDg1LDEwIEBACiAgICAgICAgICAgICBwYXJzZXIuQ29tbWVudEhhbmRsZXIgPSB0YXJnZXQuY29tbWVudAogICAgICAgICBpZiBoYXNhdHRyKHRhcmdldCwgJ3BpJyk6CiAgICAgICAgICAgICBwYXJzZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciA9IHRhcmdldC5waQotICAgICAgICAjIGxldCBleHBhdCBkbyB0aGUgYnVmZmVyaW5nLCBpZiBzdXBwb3J0ZWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgICMgdXNlIG5ldy1zdHlsZSBhdHRyaWJ1dGUgaGFuZGxpbmcsIGlmIHN1cHBvcnRlZAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgaWYgaGFzYXR0cih0YXJnZXQsICdzdGFydCcpOgotICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5fc3RhcnRfbGlzdAotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgICMgQ29uZmlndXJlIHB5ZXhwYXQ6IGJ1ZmZlcmluZywgbmV3LXN0eWxlIGF0dHJpYnV0ZSBoYW5kbGluZy4KKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQorICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCiAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAgICAgICAgIHNlbGYuZW50aXR5ID0ge30KICAgICAgICAgdHJ5OgpAQCAtMTU2MSw2ICsxNDk2LDM5IEBACiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MgIyB1bmtub3duCiAKKyAgICBkZWYgX3NldGV2ZW50cyhzZWxmLCBldmVudHNfcXVldWUsIGV2ZW50c190b19yZXBvcnQpOgorICAgICAgICAjIEludGVybmFsIEFQSSBmb3IgWE1MUHVsbFBhcnNlcgorICAgICAgICAjIGV2ZW50c190b19yZXBvcnQ6IGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGR1cmluZyBwYXJzaW5nIChzYW1lIGFzCisgICAgICAgICMgdGhlICpldmVudHMqIG9mIFhNTFB1bGxQYXJzZXIncyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgIyBldmVudHNfcXVldWU6IGEgbGlzdCBvZiBhY3R1YWwgcGFyc2luZyBldmVudHMgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZAorICAgICAgICAjIGJ5IHRoZSB1bmRlcmx5aW5nIHBhcnNlci4KKyAgICAgICAgIworICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXIKKyAgICAgICAgYXBwZW5kID0gZXZlbnRzX3F1ZXVlLmFwcGVuZAorICAgICAgICBmb3IgZXZlbnRfbmFtZSBpbiBldmVudHNfdG9fcmVwb3J0OgorICAgICAgICAgICAgaWYgZXZlbnRfbmFtZSA9PSAic3RhcnQiOgorICAgICAgICAgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCisgICAgICAgICAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgYXR0cmliX2luLCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXNlbGYuX3N0YXJ0KToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgc3RhcnQodGFnLCBhdHRyaWJfaW4pKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsaWYgZXZlbnRfbmFtZSA9PSAiZW5kIjoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kPXNlbGYuX2VuZCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIGVuZCh0YWcpKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbGlmIGV2ZW50X25hbWUgPT0gInN0YXJ0LW5zIjoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIHVyaSwgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIChwcmVmaXggb3IgIiIsIHVyaSBvciAiIikpKQorICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxpZiBldmVudF9uYW1lID09ICJlbmQtbnMiOgorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIE5vbmUpKQorICAgICAgICAgICAgICAgIHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBldmVudCAlciIgJSBldmVudF9uYW1lKQorCiAgICAgZGVmIF9yYWlzZWVycm9yKHNlbGYsIHZhbHVlKToKICAgICAgICAgZXJyID0gUGFyc2VFcnJvcih2YWx1ZSkKICAgICAgICAgZXJyLmNvZGUgPSB2YWx1ZS5jb2RlCkBAIC0xNTc4LDIxICsxNTQ2LDE2IEBACiAgICAgICAgICAgICBzZWxmLl9uYW1lc1trZXldID0gbmFtZQogICAgICAgICByZXR1cm4gbmFtZQogCi0gICAgZGVmIF9zdGFydChzZWxmLCB0YWcsIGF0dHJpYl9pbik6CisgICAgZGVmIF9zdGFydChzZWxmLCB0YWcsIGF0dHJfbGlzdCk6CisgICAgICAgICMgSGFuZGxlciBmb3IgZXhwYXQncyBTdGFydEVsZW1lbnRIYW5kbGVyLiBTaW5jZSBvcmRlcmVkX2F0dHJpYnV0ZXMKKyAgICAgICAgIyBpcyBzZXQsIHRoZSBhdHRyaWJ1dGVzIGFyZSByZXBvcnRlZCBhcyBhIGxpc3Qgb2YgYWx0ZXJuYXRpbmcKKyAgICAgICAgIyBhdHRyaWJ1dGUgbmFtZSx2YWx1ZS4KICAgICAgICAgZml4bmFtZSA9IHNlbGYuX2ZpeG5hbWUKICAgICAgICAgdGFnID0gZml4bmFtZSh0YWcpCiAgICAgICAgIGF0dHJpYiA9IHt9Ci0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGF0dHJpYl9pbi5pdGVtcygpOgotICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoa2V5KV0gPSB2YWx1ZQotICAgICAgICByZXR1cm4gc2VsZi50YXJnZXQuc3RhcnQodGFnLCBhdHRyaWIpCi0KLSAgICBkZWYgX3N0YXJ0X2xpc3Qoc2VsZiwgdGFnLCBhdHRyaWJfaW4pOgotICAgICAgICBmaXhuYW1lID0gc2VsZi5fZml4bmFtZQotICAgICAgICB0YWcgPSBmaXhuYW1lKHRhZykKLSAgICAgICAgYXR0cmliID0ge30KLSAgICAgICAgaWYgYXR0cmliX2luOgotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0dHJpYl9pbiksIDIpOgotICAgICAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGF0dHJpYl9pbltpXSldID0gYXR0cmliX2luW2krMV0KKyAgICAgICAgaWYgYXR0cl9saXN0OgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0dHJfbGlzdCksIDIpOgorICAgICAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGF0dHJfbGlzdFtpXSldID0gYXR0cl9saXN0W2krMV0KICAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LnN0YXJ0KHRhZywgYXR0cmliKQogCiAgICAgZGVmIF9lbmQoc2VsZiwgdGFnKToKQEAgLTE2NTAsMTUgKzE2MTMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2N0eXBlKG5hbWUsIHB1YmlkLCBzeXN0ZW1bMTotMV0pCiAgICAgICAgICAgICAgICAgc2VsZi5fZG9jdHlwZSA9IE5vbmUKIAotICAgICMjCi0gICAgIyAoRGVwcmVjYXRlZCkgSGFuZGxlcyBhIGRvY3R5cGUgZGVjbGFyYXRpb24uCi0gICAgIwotICAgICMgQHBhcmFtIG5hbWUgRG9jdHlwZSBuYW1lLgotICAgICMgQHBhcmFtIHB1YmlkIFB1YmxpYyBpZGVudGlmaWVyLgotICAgICMgQHBhcmFtIHN5c3RlbSBTeXN0ZW0gaWRlbnRpZmllci4KLQogICAgIGRlZiBkb2N0eXBlKHNlbGYsIG5hbWUsIHB1YmlkLCBzeXN0ZW0pOgotICAgICAgICAiIiJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4iIiIKKyAgICAgICAgIiIiKERlcHJlY2F0ZWQpICBIYW5kbGUgZG9jdHlwZSBkZWNsYXJhdGlvbgorCisgICAgICAgICpuYW1lKiBpcyB0aGUgRG9jdHlwZSBuYW1lLCAqcHViaWQqIGlzIHRoZSBwdWJsaWMgaWRlbnRpZmllciwKKyAgICAgICAgYW5kICpzeXN0ZW0qIGlzIHRoZSBzeXN0ZW0gaWRlbnRpZmllci4KKworICAgICAgICAiIiIKICAgICAgICAgd2FybmluZ3Mud2FybigKICAgICAgICAgICAgICJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4gIERlZmluZSBkb2N0eXBlKCkgIgogICAgICAgICAgICAgIm1ldGhvZCBvbiB0aGUgVHJlZUJ1aWxkZXIgdGFyZ2V0LiIsCkBAIC0xNjY4LDI0ICsxNjI5LDE1IEBACiAgICAgIyBzZW50aW5lbCwgaWYgZG9jdHlwZSBpcyByZWRlZmluZWQgaW4gYSBzdWJjbGFzcwogICAgIF9fZG9jdHlwZSA9IGRvY3R5cGUKIAotICAgICMjCi0gICAgIyBGZWVkcyBkYXRhIHRvIHRoZSBwYXJzZXIuCi0gICAgIwotICAgICMgQHBhcmFtIGRhdGEgRW5jb2RlZCBkYXRhLgotCiAgICAgZGVmIGZlZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkZlZWQgZW5jb2RlZCBkYXRhIHRvIHBhcnNlci4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoZGF0YSwgMCkKICAgICAgICAgZXhjZXB0IHNlbGYuX2Vycm9yIGFzIHY6CiAgICAgICAgICAgICBzZWxmLl9yYWlzZWVycm9yKHYpCiAKLSAgICAjIwotICAgICMgRmluaXNoZXMgZmVlZGluZyBkYXRhIHRvIHRoZSBwYXJzZXIuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBlbGVtZW50IHN0cnVjdHVyZS4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJGaW5pc2ggZmVlZGluZyBkYXRhIHRvIHBhcnNlciBhbmQgcmV0dXJuIGVsZW1lbnQgc3RydWN0dXJlLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiIiwgMSkgIyBlbmQgb2YgZGF0YQogICAgICAgICBleGNlcHQgc2VsZi5fZXJyb3IgYXMgdjoKQEAgLTE3MDQsMTAzICsxNjU2LDEyIEBACiAKICMgSW1wb3J0IHRoZSBDIGFjY2VsZXJhdG9ycwogdHJ5OgorICAgICMgRWxlbWVudCBpcyBnb2luZyB0byBiZSBzaGFkb3dlZCBieSB0aGUgQyBpbXBsZW1lbnRhdGlvbi4gV2UgbmVlZCB0byBrZWVwCisgICAgIyB0aGUgUHl0aG9uIHZlcnNpb24gb2YgaXQgYWNjZXNzaWJsZSBmb3Igc29tZSAiY3JlYXRpdmUiIGJ5IGV4dGVybmFsIGNvZGUKKyAgICAjIChzZWUgdGVzdHMpCisgICAgX0VsZW1lbnRfUHkgPSBFbGVtZW50CisKICAgICAjIEVsZW1lbnQsIFN1YkVsZW1lbnQsIFBhcnNlRXJyb3IsIFRyZWVCdWlsZGVyLCBYTUxQYXJzZXIKICAgICBmcm9tIF9lbGVtZW50dHJlZSBpbXBvcnQgKgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKLWVsc2U6Ci0gICAgIyBPdmVyd3JpdGUgJ0VsZW1lbnRUcmVlLnBhcnNlJyBhbmQgJ2l0ZXJwYXJzZScgdG8gdXNlIHRoZSBDIFhNTFBhcnNlcgotCi0gICAgY2xhc3MgRWxlbWVudFRyZWUoRWxlbWVudFRyZWUpOgotICAgICAgICBkZWYgcGFyc2Uoc2VsZiwgc291cmNlLCBwYXJzZXI9Tm9uZSk6Ci0gICAgICAgICAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAncmVhZCcpOgotICAgICAgICAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAncmInKQotICAgICAgICAgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBwYXJzZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoNjU1MzYpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5fcGFyc2Uoc291cmNlKQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yb290Ci0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGlmIGNsb3NlX3NvdXJjZToKLSAgICAgICAgICAgICAgICAgICAgc291cmNlLmNsb3NlKCkKLQotICAgIGNsYXNzIGl0ZXJwYXJzZToKLSAgICAgICAgIiIiUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHkuCi0KLSAgICAgICAgUmVwb3J0cyB3aGF04oCZcyBnb2luZyBvbiB0byB0aGUgdXNlci4gJ3NvdXJjZScgaXMgYSBmaWxlbmFtZSBvciBmaWxlCi0gICAgICAgIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLiAnZXZlbnRzJyBpcyBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLgotICAgICAgICBUaGUgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgInN0YXJ0IiwgImVuZCIsICJzdGFydC1ucyIgYW5kCi0gICAgICAgICJlbmQtbnMiICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkIG5hbWVzcGFjZQotICAgICAgICBpbmZvcm1hdGlvbikuIElmICdldmVudHMnIGlzIG9taXR0ZWQsIG9ubHkgImVuZCIgZXZlbnRzIGFyZSByZXBvcnRlZC4KLSAgICAgICAgJ3BhcnNlcicgaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiBJZiBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZAotICAgICAgICBYTUxQYXJzZXIgcGFyc2VyIGlzIHVzZWQuIFJldHVybnMgYW4gaXRlcmF0b3IgcHJvdmlkaW5nCi0gICAgICAgIChldmVudCwgZWxlbSkgcGFpcnMuCi0gICAgICAgICIiIgotCi0gICAgICAgIHJvb3QgPSBOb25lCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBldmVudHM9Tm9uZSwgcGFyc2VyPU5vbmUpOgotICAgICAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihmaWxlLCAncmVhZCcpOgotICAgICAgICAgICAgICAgIGZpbGUgPSBvcGVuKGZpbGUsICdyYicpCi0gICAgICAgICAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCi0gICAgICAgICAgICBzZWxmLl9ldmVudHMgPSBbXQotICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QgPSBOb25lCi0gICAgICAgICAgICBpZiBwYXJzZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCi0gICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKLSAgICAgICAgICAgIHNlbGYuX3BhcnNlci5fc2V0ZXZlbnRzKHNlbGYuX2V2ZW50cywgZXZlbnRzKQotCi0gICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpdGVtID0gc2VsZi5fZXZlbnRzW3NlbGYuX2luZGV4XQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCArPSAxCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCi0gICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZSA9IHNlbGYuX2Vycm9yCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQotICAgICAgICAgICAgICAgICAgICByYWlzZSBlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgIyBsb2FkIGV2ZW50IGJ1ZmZlcgotICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9ldmVudHNbOl0KLSAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2Mzg0KQotICAgICAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IGV4YwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCi0KLSAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotIyBjb21wYXRpYmlsaXR5Ci1YTUxUcmVlQnVpbGRlciA9IFhNTFBhcnNlcgotCi0jIHdvcmthcm91bmQgY2lyY3VsYXIgaW1wb3J0LgotdHJ5OgotICAgIGZyb20gRWxlbWVudEMxNE4gaW1wb3J0IF9zZXJpYWxpemVfYzE0bgotICAgIF9zZXJpYWxpemVbImMxNG4iXSA9IF9zZXJpYWxpemVfYzE0bgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi94bWxycGMvY2xpZW50LnB5IGIvTGliL3htbHJwYy9jbGllbnQucHkKaW5kZXggMGY5NTIyYS4uOWUwZjA2OSAxMDA2NDQKLS0tIGEvTGliL3htbHJwYy9jbGllbnQucHkKKysrIGIvTGliL3htbHJwYy9jbGllbnQucHkKQEAgLTEwNDUsNyArMTA0NSw3IEBACiAgICAgZ3pmID0gZ3ppcC5HemlwRmlsZShtb2RlPSJyYiIsIGZpbGVvYmo9ZikKICAgICB0cnk6CiAgICAgICAgIGRlY29kZWQgPSBnemYucmVhZCgpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgZGF0YSIpCiAgICAgZi5jbG9zZSgpCiAgICAgZ3pmLmNsb3NlKCkKQEAgLTExMzAsOCArMTEzMCw5IEBACiAgICAgICAgIGZvciBpIGluICgwLCAxKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zaW5nbGVfcmVxdWVzdChob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIHZlcmJvc2UpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgaSBvciBlLmVycm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRVNFVCwgZXJybm8uRUNPTk5BQk9SVEVELCBlcnJuby5FUElQRSk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGkgb3IgZS5lcnJubyBub3QgaW4gKGVycm5vLkVDT05OUkVTRVQsIGVycm5vLkVDT05OQUJPUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FUElQRSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBleGNlcHQgaHR0cC5jbGllbnQuQmFkU3RhdHVzTGluZTogI2Nsb3NlIGFmdGVyIHdlIHNlbnQgcmVxdWVzdAogICAgICAgICAgICAgICAgIGlmIGk6CkBAIC0xMzg1LDcgKzEzODYsNyBAQAogICAgICAgICAjIGdldCB0aGUgdXJsCiAgICAgICAgIHR5cGUsIHVyaSA9IHVybGxpYi5wYXJzZS5zcGxpdHR5cGUodXJpKQogICAgICAgICBpZiB0eXBlIG5vdCBpbiAoImh0dHAiLCAiaHR0cHMiKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInVuc3VwcG9ydGVkIFhNTC1SUEMgcHJvdG9jb2wiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigidW5zdXBwb3J0ZWQgWE1MLVJQQyBwcm90b2NvbCIpCiAgICAgICAgIHNlbGYuX19ob3N0LCBzZWxmLl9faGFuZGxlciA9IHVybGxpYi5wYXJzZS5zcGxpdGhvc3QodXJpKQogICAgICAgICBpZiBub3Qgc2VsZi5fX2hhbmRsZXI6CiAgICAgICAgICAgICBzZWxmLl9faGFuZGxlciA9ICIvUlBDMiIKZGlmZiAtLWdpdCBhL0xpYi94bWxycGMvc2VydmVyLnB5IGIvTGliL3htbHJwYy9zZXJ2ZXIucHkKaW5kZXggNzhjYTRlMC4uZDkxNDI4MiAxMDA2NDQKLS0tIGEvTGliL3htbHJwYy9zZXJ2ZXIucHkKKysrIGIvTGliL3htbHJwYy9zZXJ2ZXIucHkKQEAgLTU4NCwxMyArNTg0LDYgQEAKICAgICAgICAgU2ltcGxlWE1MUlBDRGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBhbGxvd19ub25lLCBlbmNvZGluZywgdXNlX2J1aWx0aW5fdHlwZXMpCiAgICAgICAgIHNvY2tldHNlcnZlci5UQ1BTZXJ2ZXIuX19pbml0X18oc2VsZiwgYWRkciwgcmVxdWVzdEhhbmRsZXIsIGJpbmRfYW5kX2FjdGl2YXRlKQogCi0gICAgICAgICMgW0J1ZyAjMTIyMjc5MF0gSWYgcG9zc2libGUsIHNldCBjbG9zZS1vbi1leGVjIGZsYWc7IGlmIGEKLSAgICAgICAgIyBtZXRob2Qgc3Bhd25zIGEgc3VicHJvY2VzcywgdGhlIHN1YnByb2Nlc3Mgc2hvdWxkbid0IGhhdmUKLSAgICAgICAgIyB0aGUgbGlzdGVuaW5nIHNvY2tldCBvcGVuLgotICAgICAgICBpZiBmY250bCBpcyBub3QgTm9uZSBhbmQgaGFzYXR0cihmY250bCwgJ0ZEX0NMT0VYRUMnKToKLSAgICAgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoc2VsZi5maWxlbm8oKSwgZmNudGwuRl9HRVRGRCkKLSAgICAgICAgICAgIGZsYWdzIHw9IGZjbnRsLkZEX0NMT0VYRUMKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKHNlbGYuZmlsZW5vKCksIGZjbnRsLkZfU0VURkQsIGZsYWdzKQogCiBjbGFzcyBNdWx0aVBhdGhYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyKToKICAgICAiIiJNdWx0aXBhdGggWE1MLVJQQyBTZXJ2ZXIKZGlmZiAtLWdpdCBhL0xpYi96aXBmaWxlLnB5IGIvTGliL3ppcGZpbGUucHkKaW5kZXggOTJjOThhYi4uY2EyNjExZCAxMDA2NDQKLS0tIGEvTGliL3ppcGZpbGUucHkKKysrIGIvTGliL3ppcGZpbGUucHkKQEAgLTYsNyArNiw3IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHJlCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgc3RhdApAQCAtMTY0LDcgKzE2NCw3IEBACiAgICAgdHJ5OgogICAgICAgICBpZiBfRW5kUmVjRGF0YShmcCk6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZSAgICAgICAgICMgZmlsZSBoYXMgY29ycmVjdCBtYWdpYyBudW1iZXIKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHJldHVybiBGYWxzZQogCkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NoZWNrX3ppcGZpbGUoZnApCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgICIiIgogICAgIHRyeToKICAgICAgICAgZnBpbi5zZWVrKG9mZnNldCAtIHNpemVFbmRDZW50RGlyNjRMb2NhdG9yLCAyKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIElmIHRoZSBzZWVrIGZhaWxzLCB0aGUgZmlsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gYSBaSVA2NAogICAgICAgICAjIGVuZC1vZi1hcmNoaXZlIHJlY29yZCwgc28ganVzdCByZXR1cm4gdGhlIGVuZCByZWNvcmQgd2Ugd2VyZSBnaXZlbi4KICAgICAgICAgcmV0dXJuIGVuZHJlYwpAQCAtMjExLDggKzIxMSw4IEBACiAgICAgaWYgbGVuKGRhdGEpICE9IHNpemVFbmRDZW50RGlyNjQ6CiAgICAgICAgIHJldHVybiBlbmRyZWMKICAgICBzaWcsIHN6LCBjcmVhdGVfdmVyc2lvbiwgcmVhZF92ZXJzaW9uLCBkaXNrX251bSwgZGlza19kaXIsIFwKLSAgICAgICAgICAgIGRpcmNvdW50LCBkaXJjb3VudDIsIGRpcnNpemUsIGRpcm9mZnNldCA9IFwKLSAgICAgICAgICAgIHN0cnVjdC51bnBhY2soc3RydWN0RW5kQXJjaGl2ZTY0LCBkYXRhKQorICAgICAgICBkaXJjb3VudCwgZGlyY291bnQyLCBkaXJzaXplLCBkaXJvZmZzZXQgPSBcCisgICAgICAgIHN0cnVjdC51bnBhY2soc3RydWN0RW5kQXJjaGl2ZTY0LCBkYXRhKQogICAgIGlmIHNpZyAhPSBzdHJpbmdFbmRBcmNoaXZlNjQ6CiAgICAgICAgIHJldHVybiBlbmRyZWMKIApAQCAtMjQyLDcgKzI0Miw3IEBACiAgICAgIyBmaWxlIGlmIHRoaXMgaXMgdGhlIGNhc2UpLgogICAgIHRyeToKICAgICAgICAgZnBpbi5zZWVrKC1zaXplRW5kQ2VudERpciwgMikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICBkYXRhID0gZnBpbi5yZWFkKCkKICAgICBpZiAobGVuKGRhdGEpID09IHNpemVFbmRDZW50RGlyIGFuZApAQCAtMjkyLDI2ICsyOTIsMjYgQEAKICAgICAiIiJDbGFzcyB3aXRoIGF0dHJpYnV0ZXMgZGVzY3JpYmluZyBlYWNoIGZpbGUgaW4gdGhlIFpJUCBhcmNoaXZlLiIiIgogCiAgICAgX19zbG90c19fID0gKAotICAgICAgICAgICAgJ29yaWdfZmlsZW5hbWUnLAotICAgICAgICAgICAgJ2ZpbGVuYW1lJywKLSAgICAgICAgICAgICdkYXRlX3RpbWUnLAotICAgICAgICAgICAgJ2NvbXByZXNzX3R5cGUnLAotICAgICAgICAgICAgJ2NvbW1lbnQnLAotICAgICAgICAgICAgJ2V4dHJhJywKLSAgICAgICAgICAgICdjcmVhdGVfc3lzdGVtJywKLSAgICAgICAgICAgICdjcmVhdGVfdmVyc2lvbicsCi0gICAgICAgICAgICAnZXh0cmFjdF92ZXJzaW9uJywKLSAgICAgICAgICAgICdyZXNlcnZlZCcsCi0gICAgICAgICAgICAnZmxhZ19iaXRzJywKLSAgICAgICAgICAgICd2b2x1bWUnLAotICAgICAgICAgICAgJ2ludGVybmFsX2F0dHInLAotICAgICAgICAgICAgJ2V4dGVybmFsX2F0dHInLAotICAgICAgICAgICAgJ2hlYWRlcl9vZmZzZXQnLAotICAgICAgICAgICAgJ0NSQycsCi0gICAgICAgICAgICAnY29tcHJlc3Nfc2l6ZScsCi0gICAgICAgICAgICAnZmlsZV9zaXplJywKLSAgICAgICAgICAgICdfcmF3X3RpbWUnLAotICAgICAgICApCisgICAgICAgICdvcmlnX2ZpbGVuYW1lJywKKyAgICAgICAgJ2ZpbGVuYW1lJywKKyAgICAgICAgJ2RhdGVfdGltZScsCisgICAgICAgICdjb21wcmVzc190eXBlJywKKyAgICAgICAgJ2NvbW1lbnQnLAorICAgICAgICAnZXh0cmEnLAorICAgICAgICAnY3JlYXRlX3N5c3RlbScsCisgICAgICAgICdjcmVhdGVfdmVyc2lvbicsCisgICAgICAgICdleHRyYWN0X3ZlcnNpb24nLAorICAgICAgICAncmVzZXJ2ZWQnLAorICAgICAgICAnZmxhZ19iaXRzJywKKyAgICAgICAgJ3ZvbHVtZScsCisgICAgICAgICdpbnRlcm5hbF9hdHRyJywKKyAgICAgICAgJ2V4dGVybmFsX2F0dHInLAorICAgICAgICAnaGVhZGVyX29mZnNldCcsCisgICAgICAgICdDUkMnLAorICAgICAgICAnY29tcHJlc3Nfc2l6ZScsCisgICAgICAgICdmaWxlX3NpemUnLAorICAgICAgICAnX3Jhd190aW1lJywKKyAgICApCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWU9Ik5vTmFtZSIsIGRhdGVfdGltZT0oMTk4MCwxLDEsMCwwLDApKToKICAgICAgICAgc2VsZi5vcmlnX2ZpbGVuYW1lID0gZmlsZW5hbWUgICAjIE9yaWdpbmFsIGZpbGUgbmFtZSBpbiBhcmNoaXZlCkBAIC0zNzYsNyArMzc2LDcgQEAKICAgICAgICAgaWYgemlwNjQ6CiAgICAgICAgICAgICBmbXQgPSAnPEhIUVEnCiAgICAgICAgICAgICBleHRyYSA9IGV4dHJhICsgc3RydWN0LnBhY2soZm10LAotICAgICAgICAgICAgICAgICAgICAxLCBzdHJ1Y3QuY2FsY3NpemUoZm10KS00LCBmaWxlX3NpemUsIGNvbXByZXNzX3NpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgc3RydWN0LmNhbGNzaXplKGZtdCktNCwgZmlsZV9zaXplLCBjb21wcmVzc19zaXplKQogICAgICAgICBpZiBmaWxlX3NpemUgPiBaSVA2NF9MSU1JVCBvciBjb21wcmVzc19zaXplID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICBpZiBub3QgemlwNjQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKCJGaWxlc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQpAQCAtMzk1LDEwICszOTUsMTAgQEAKICAgICAgICAgc2VsZi5jcmVhdGVfdmVyc2lvbiA9IG1heChtaW5fdmVyc2lvbiwgc2VsZi5jcmVhdGVfdmVyc2lvbikKICAgICAgICAgZmlsZW5hbWUsIGZsYWdfYml0cyA9IHNlbGYuX2VuY29kZUZpbGVuYW1lRmxhZ3MoKQogICAgICAgICBoZWFkZXIgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RGaWxlSGVhZGVyLCBzdHJpbmdGaWxlSGVhZGVyLAotICAgICAgICAgICAgICAgICBzZWxmLmV4dHJhY3RfdmVyc2lvbiwgc2VsZi5yZXNlcnZlZCwgZmxhZ19iaXRzLAotICAgICAgICAgICAgICAgICBzZWxmLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsIENSQywKLSAgICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICBsZW4oZmlsZW5hbWUpLCBsZW4oZXh0cmEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4dHJhY3RfdmVyc2lvbiwgc2VsZi5yZXNlcnZlZCwgZmxhZ19iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsIENSQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZmlsZW5hbWUpLCBsZW4oZXh0cmEpKQogICAgICAgICByZXR1cm4gaGVhZGVyICsgZmlsZW5hbWUgKyBleHRyYQogCiAgICAgZGVmIF9lbmNvZGVGaWxlbmFtZUZsYWdzKHNlbGYpOgpAQCAtNTExLDcgKzUxMSw3IEBACiAgICAgZGVmIF9pbml0KHNlbGYpOgogICAgICAgICBwcm9wcyA9IGx6bWEuX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyh7J2lkJzogbHptYS5GSUxURVJfTFpNQTF9KQogICAgICAgICBzZWxmLl9jb21wID0gbHptYS5MWk1BQ29tcHJlc3Nvcihsem1hLkZPUk1BVF9SQVcsIGZpbHRlcnM9WwotICAgICAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwgcHJvcHMpCisgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsIHByb3BzKQogICAgICAgICBdKQogICAgICAgICByZXR1cm4gc3RydWN0LnBhY2soJzxCQkgnLCA5LCA0LCBsZW4ocHJvcHMpKSArIHByb3BzCiAKQEAgLTU0Myw4ICs1NDMsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBiJycKIAogICAgICAgICAgICAgc2VsZi5fZGVjb21wID0gbHptYS5MWk1BRGVjb21wcmVzc29yKGx6bWEuRk9STUFUX1JBVywgZmlsdGVycz1bCi0gICAgICAgICAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkWzQ6NCArIHBzaXplXSkKKyAgICAgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWRbNDo0ICsgcHNpemVdKQogICAgICAgICAgICAgXSkKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl91bmNvbnN1bWVkWzQgKyBwc2l6ZTpdCiAgICAgICAgICAgICBkZWwgc2VsZi5fdW5jb25zdW1lZApAQCAtNTgwLDE1ICs1ODAsMTUgQEAKICAgICBlbGlmIGNvbXByZXNzaW9uID09IFpJUF9ERUZMQVRFRDoKICAgICAgICAgaWYgbm90IHpsaWI6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIHpsaWIgbW9kdWxlIikKKyAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSB6bGliIG1vZHVsZSIpCiAgICAgZWxpZiBjb21wcmVzc2lvbiA9PSBaSVBfQlpJUDI6CiAgICAgICAgIGlmIG5vdCBiejI6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGJ6MiBtb2R1bGUiKQorICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGJ6MiBtb2R1bGUiKQogICAgIGVsaWYgY29tcHJlc3Npb24gPT0gWklQX0xaTUE6CiAgICAgICAgIGlmIG5vdCBsem1hOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBsem1hIG1vZHVsZSIpCisgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgbHptYSBtb2R1bGUiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVGhhdCBjb21wcmVzc2lvbiBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCIpCiAKQEAgLTU5Niw3ICs1OTYsNyBAQAogZGVmIF9nZXRfY29tcHJlc3Nvcihjb21wcmVzc190eXBlKToKICAgICBpZiBjb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKICAgICAgICAgcmV0dXJuIHpsaWIuY29tcHJlc3NvYmooemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sCi0gICAgICAgICAgICAgemxpYi5ERUZMQVRFRCwgLTE1KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliLkRFRkxBVEVELCAtMTUpCiAgICAgZWxpZiBjb21wcmVzc190eXBlID09IFpJUF9CWklQMjoKICAgICAgICAgcmV0dXJuIGJ6Mi5CWjJDb21wcmVzc29yKCkKICAgICBlbGlmIGNvbXByZXNzX3R5cGUgPT0gWklQX0xaTUE6CkBAIC04MzYsOCArODM2LDggQEAKICAgICAgICAgICAgIG4gPSBtYXgobiwgc2VsZi5NSU5fUkVBRF9TSVpFKQogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKGRhdGEsIG4pCiAgICAgICAgICAgICBzZWxmLl9lb2YgPSAoc2VsZi5fZGVjb21wcmVzc29yLmVvZiBvcgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc19sZWZ0IDw9IDAgYW5kCi0gICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9kZWNvbXByZXNzb3IudW5jb25zdW1lZF90YWlsKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgPD0gMCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZGVjb21wcmVzc29yLnVuY29uc3VtZWRfdGFpbCkKICAgICAgICAgICAgIGlmIHNlbGYuX2VvZjoKICAgICAgICAgICAgICAgICBkYXRhICs9IHNlbGYuX2RlY29tcHJlc3Nvci5mbHVzaCgpCiAgICAgICAgIGVsc2U6CkBAIC05MTcsNyArOTE3LDcgQEAKICAgICAgICAgICAgIG1vZGVEaWN0ID0geydyJyA6ICdyYicsICd3JzogJ3diJywgJ2EnIDogJ3IrYid9CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcCA9IGlvLm9wZW4oZmlsZSwgbW9kZURpY3RbbW9kZV0pCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGlmIG1vZGUgPT0gJ2EnOgogICAgICAgICAgICAgICAgICAgICBtb2RlID0ga2V5ID0gJ3cnCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAgPSBpby5vcGVuKGZpbGUsIG1vZGVEaWN0W21vZGVdKQpAQCAtOTY4LDcgKzk2OCw3IEBACiAgICAgICAgIGZwID0gc2VsZi5mcAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlbmRyZWMgPSBfRW5kUmVjRGF0YShmcCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIpCiAgICAgICAgIGlmIG5vdCBlbmRyZWM6CiAgICAgICAgICAgICByYWlzZSBCYWRaaXBGaWxlKCJGaWxlIGlzIG5vdCBhIHppcCBmaWxlIikKQEAgLTEwMTYsOCArMTAxNiw4IEBACiAgICAgICAgICAgICB4LmNvbW1lbnQgPSBmcC5yZWFkKGNlbnRkaXJbX0NEX0NPTU1FTlRfTEVOR1RIXSkKICAgICAgICAgICAgIHguaGVhZGVyX29mZnNldCA9IGNlbnRkaXJbX0NEX0xPQ0FMX0hFQURFUl9PRkZTRVRdCiAgICAgICAgICAgICAoeC5jcmVhdGVfdmVyc2lvbiwgeC5jcmVhdGVfc3lzdGVtLCB4LmV4dHJhY3RfdmVyc2lvbiwgeC5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICB4LmZsYWdfYml0cywgeC5jb21wcmVzc190eXBlLCB0LCBkLAotICAgICAgICAgICAgICAgIHguQ1JDLCB4LmNvbXByZXNzX3NpemUsIHguZmlsZV9zaXplKSA9IGNlbnRkaXJbMToxMl0KKyAgICAgICAgICAgICB4LmZsYWdfYml0cywgeC5jb21wcmVzc190eXBlLCB0LCBkLAorICAgICAgICAgICAgIHguQ1JDLCB4LmNvbXByZXNzX3NpemUsIHguZmlsZV9zaXplKSA9IGNlbnRkaXJbMToxMl0KICAgICAgICAgICAgIGlmIHguZXh0cmFjdF92ZXJzaW9uID4gTUFYX0VYVFJBQ1RfVkVSU0lPTjoKICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJ6aXAgZmlsZSB2ZXJzaW9uICUuMWYiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4LmV4dHJhY3RfdmVyc2lvbiAvIDEwKSkKQEAgLTEwMjUsNyArMTAyNSw3IEBACiAgICAgICAgICAgICAjIENvbnZlcnQgZGF0ZS90aW1lIGNvZGUgdG8gKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbiwgc2VjKQogICAgICAgICAgICAgeC5fcmF3X3RpbWUgPSB0CiAgICAgICAgICAgICB4LmRhdGVfdGltZSA9ICggKGQ+PjkpKzE5ODAsIChkPj41KSYweEYsIGQmMHgxRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Pj4xMSwgKHQ+PjUpJjB4M0YsICh0JjB4MUYpICogMiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdD4+MTEsICh0Pj41KSYweDNGLCAodCYweDFGKSAqIDIgKQogCiAgICAgICAgICAgICB4Ll9kZWNvZGVFeHRyYSgpCiAgICAgICAgICAgICB4LmhlYWRlcl9vZmZzZXQgPSB4LmhlYWRlcl9vZmZzZXQgKyBjb25jYXQKQEAgLTExMDMsNyArMTEwMyw3IEBACiAgICAgICAgIGlmIGxlbihjb21tZW50KSA+PSBaSVBfTUFYX0NPTU1FTlQ6CiAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgIHByaW50KCdBcmNoaXZlIGNvbW1lbnQgaXMgdG9vIGxvbmc7IHRydW5jYXRpbmcgdG8gJWQgYnl0ZXMnCi0gICAgICAgICAgICAgICAgICAgICAgICAlIFpJUF9NQVhfQ09NTUVOVCkKKyAgICAgICAgICAgICAgICAgICAgICAlIFpJUF9NQVhfQ09NTUVOVCkKICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50WzpaSVBfTUFYX0NPTU1FTlRdCiAgICAgICAgIHNlbGYuX2NvbW1lbnQgPSBjb21tZW50CiAgICAgICAgIHNlbGYuX2RpZE1vZGlmeSA9IFRydWUKQEAgLTExMjEsNyArMTEyMSw3IEBACiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInB3ZDogZXhwZWN0ZWQgYnl0ZXMsIGdvdCAlcyIgJSB0eXBlKHB3ZCkpCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKICAgICAgICAgIyBPbmx5IG9wZW4gYSBuZXcgZmlsZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHdlIHdlcmUgbm90CiAgICAgICAgICMgZ2l2ZW4gYSBmaWxlIG9iamVjdCBpbiB0aGUgY29uc3RydWN0b3IKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3dyaXRlKCkgcmVxdWlyZXMgbW9kZSAidyIgb3IgImEiJykKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQogICAgICAgICBfY2hlY2tfY29tcHJlc3Npb24oemluZm8uY29tcHJlc3NfdHlwZSkKICAgICAgICAgaWYgemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxsb3daaXA2NDoKQEAgLTEzMDIsMTQgKzEzMDIsMTQgQEAKICAgICAgICAgaWYgemluZm8uaGVhZGVyX29mZnNldCA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKAotICAgICAgICAgICAgICAgICAgICAgICJaaXBmaWxlIHNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKKyAgICAgICAgICAgICAgICAgICAgIlppcGZpbGUgc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGZpbGVuYW1lLCBhcmNuYW1lPU5vbmUsIGNvbXByZXNzX3R5cGU9Tm9uZSk6CiAgICAgICAgICIiIlB1dCB0aGUgYnl0ZXMgZnJvbSBmaWxlbmFtZSBpbnRvIHRoZSBhcmNoaXZlIHVuZGVyIHRoZSBuYW1lCiAgICAgICAgIGFyY25hbWUuIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZW5hbWUpCiAgICAgICAgIGlzZGlyID0gc3RhdC5TX0lTRElSKHN0LnN0X21vZGUpCkBAIC0xMzU2LDcgKzEzNTYsNyBAQAogICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgPSAwCiAgICAgICAgICAgICAjIENvbXByZXNzZWQgc2l6ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gdW5jb21wcmVzc2VkIHNpemUKICAgICAgICAgICAgIHppcDY0ID0gc2VsZi5fYWxsb3daaXA2NCBhbmQgXAotICAgICAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKKyAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCiAgICAgICAgICAgICBmaWxlX3NpemUgPSAwCiAgICAgICAgICAgICB3aGlsZSAxOgpAQCAtMTQxMCw3ICsxNDEwLDcgQEAKIAogICAgICAgICBpZiBub3Qgc2VsZi5mcDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKICAgICAgICAgemluZm8uZmlsZV9zaXplID0gbGVuKGRhdGEpICAgICAgICAgICAgIyBVbmNvbXByZXNzZWQgc2l6ZQogICAgICAgICB6aW5mby5oZWFkZXJfb2Zmc2V0ID0gc2VsZi5mcC50ZWxsKCkgICAgIyBTdGFydCBvZiBoZWFkZXIgZGF0YQpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSB6aW5mby5maWxlX3NpemUKICAgICAgICAgemlwNjQgPSB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVCBvciBcCi0gICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUCisgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKICAgICAgICAgaWYgemlwNjQgYW5kIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgogICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKCJGaWxlc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQogICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoemlwNjQpKQpAQCAtMTQzOSw3ICsxNDM5LDcgQEAKICAgICAgICAgICAgICMgV3JpdGUgQ1JDIGFuZCBmaWxlIHNpemVzIGFmdGVyIHRoZSBmaWxlIGRhdGEKICAgICAgICAgICAgIGZtdCA9ICc8TFFRJyBpZiB6aXA2NCBlbHNlICc8TExMJwogICAgICAgICAgICAgc2VsZi5mcC53cml0ZShzdHJ1Y3QucGFjayhmbXQsIHppbmZvLkNSQywgemluZm8uY29tcHJlc3Nfc2l6ZSwKLSAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSkpCiAgICAgICAgIHNlbGYuZnAuZmx1c2goKQogICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZCh6aW5mbykKICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCkBAIC0xNDY1LDcgKzE0NjUsNyBAQAogICAgICAgICAgICAgICAgICAgICBkb3N0aW1lID0gZHRbM10gPDwgMTEgfCBkdFs0XSA8PCA1IHwgKGR0WzVdIC8vIDIpCiAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gW10KICAgICAgICAgICAgICAgICAgICAgaWYgemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKKyAgICAgICAgICAgICAgICAgICAgICAgb3IgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmZpbGVfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmFwcGVuZCh6aW5mby5jb21wcmVzc19zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gMHhmZmZmZmZmZgpAQCAtMTQ4NSw4ICsxNDg1LDggQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZXh0cmE6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIEFwcGVuZCBhIFpJUDY0IGZpZWxkIHRvIHRoZSBleHRyYSdzCiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kYXRhID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8SEgnICsgJ1EnKmxlbihleHRyYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEhIJyArICdRJypsZW4oZXh0cmEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKIAogICAgICAgICAgICAgICAgICAgICAgICAgbWluX3ZlcnNpb24gPSBaSVA2NF9WRVJTSU9OCiAKQEAgLTE1MDAsMjEgKzE1MDAsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGZsYWdfYml0cyA9IHppbmZvLl9lbmNvZGVGaWxlbmFtZUZsYWdzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRkaXIgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RDZW50cmFsRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0NlbnRyYWxEaXIsIGNyZWF0ZV92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfYml0cywgemluZm8uY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB6aW5mby5pbnRlcm5hbF9hdHRyLCB6aW5mby5leHRlcm5hbF9hdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBEZXByZWNhdGlvbldhcm5pbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgoc3RydWN0Q2VudHJhbERpciwgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHppbmZvLmZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih6aW5mby5maWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoY2VudGRpcikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShmaWxlbmFtZSkKQEAgLTE1MzEsMjIgKzE1MzEsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUgPiBaSVA2NF9MSU1JVCk6CiAgICAgICAgICAgICAgICAgICAgICMgTmVlZCB0byB3cml0ZSB0aGUgWklQNjQgZW5kLW9mLWFyY2hpdmUgcmVjb3JkcwogICAgICAgICAgICAgICAgICAgICB6aXA2NGVuZHJlYyA9IHN0cnVjdC5wYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NCwgc3RyaW5nRW5kQXJjaGl2ZTY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0LCA0NSwgNDUsIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0LCBzdHJpbmdFbmRBcmNoaXZlNjQsCisgICAgICAgICAgICAgICAgICAgICAgICA0NCwgNDUsIDQ1LCAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppcDY0ZW5kcmVjKQogCiAgICAgICAgICAgICAgICAgICAgIHppcDY0bG9jcmVjID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0TG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdFbmRBcmNoaXZlNjRMb2NhdG9yLCAwLCBwb3MyLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0TG9jYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0VuZEFyY2hpdmU2NExvY2F0b3IsIDAsIHBvczIsIDEpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRsb2NyZWMpCiAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJDb3VudCA9IG1pbihjZW50RGlyQ291bnQsIDB4RkZGRikKICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUgPSBtaW4oY2VudERpclNpemUsIDB4RkZGRkZGRkYpCiAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJPZmZzZXQgPSBtaW4oY2VudERpck9mZnNldCwgMHhGRkZGRkZGRikKIAogICAgICAgICAgICAgICAgIGVuZHJlYyA9IHN0cnVjdC5wYWNrKHN0cnVjdEVuZEFyY2hpdmUsIHN0cmluZ0VuZEFyY2hpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0LCBsZW4oc2VsZi5fY29tbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQsIGxlbihzZWxmLl9jb21tZW50KSkKICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGVuZHJlYykKICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHNlbGYuX2NvbW1lbnQpCiAgICAgICAgICAgICAgICAgc2VsZi5mcC5mbHVzaCgpCkBAIC0xNTY2LDcgKzE1NjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9YWxsb3daaXA2NCkKICAgICAgICAgc2VsZi5fb3B0aW1pemUgPSBvcHRpbWl6ZQogCi0gICAgZGVmIHdyaXRlcHkoc2VsZiwgcGF0aG5hbWUsIGJhc2VuYW1lPSIiKToKKyAgICBkZWYgd3JpdGVweShzZWxmLCBwYXRobmFtZSwgYmFzZW5hbWU9IiIsIGZpbHRlcmZ1bmM9Tm9uZSk6CiAgICAgICAgICIiIkFkZCBhbGwgZmlsZXMgZnJvbSAicGF0aG5hbWUiIHRvIHRoZSBaSVAgYXJjaGl2ZS4KIAogICAgICAgICBJZiBwYXRobmFtZSBpcyBhIHBhY2thZ2UgZGlyZWN0b3J5LCBzZWFyY2ggdGhlIGRpcmVjdG9yeSBhbmQKQEAgLTE1NzcsNyArMTU3NywxNCBAQAogICAgICAgICBhcmNoaXZlLiAgQWRkZWQgbW9kdWxlcyBhcmUgYWx3YXlzIG1vZHVsZS5weW8gb3IgbW9kdWxlLnB5Yy4KICAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBjb21waWxlIHRoZSBtb2R1bGUucHkgaW50byBtb2R1bGUucHljIGlmCiAgICAgICAgIG5lY2Vzc2FyeS4KKyAgICAgICAgSWYgZmlsdGVyZnVuYyhwYXRobmFtZSkgaXMgZ2l2ZW4sIGl0IGlzIGNhbGxlZCB3aXRoIGV2ZXJ5IGFyZ3VtZW50LgorICAgICAgICBXaGVuIGl0IGlzIEZhbHNlLCB0aGUgZmlsZSBvciBkaXJlY3RvcnkgaXMgc2tpcHBlZC4KICAgICAgICAgIiIiCisgICAgICAgIGlmIGZpbHRlcmZ1bmMgYW5kIG5vdCBmaWx0ZXJmdW5jKHBhdGhuYW1lKToKKyAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CisgICAgICAgICAgICAgICAgbGFiZWwgPSAncGF0aCcgaWYgb3MucGF0aC5pc2RpcihwYXRobmFtZSkgZWxzZSAnZmlsZScKKyAgICAgICAgICAgICAgICBwcmludCgnJXMgIiVzIiBza2lwcGVkIGJ5IGZpbHRlcmZ1bmMnICUgKGxhYmVsLCBwYXRobmFtZSkpCisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZGlyLCBuYW1lID0gb3MucGF0aC5zcGxpdChwYXRobmFtZSkKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRobmFtZSk6CiAgICAgICAgICAgICBpbml0bmFtZSA9IG9zLnBhdGguam9pbihwYXRobmFtZSwgIl9faW5pdF9fLnB5IikKQEAgLTE2MDIsMTAgKzE2MDksMTUgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihwYXRoLCAiX19pbml0X18ucHkiKSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgcGFja2FnZSBkaXJlY3RvcnksIGFkZCBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVweShwYXRoLCBiYXNlbmFtZSkgICMgUmVjdXJzaXZlIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlcHkocGF0aCwgYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmZ1bmM9ZmlsdGVyZnVuYykgICMgUmVjdXJzaXZlIGNhbGwKICAgICAgICAgICAgICAgICAgICAgZWxpZiBleHQgPT0gIi5weSI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWx0ZXJmdW5jIGFuZCBub3QgZmlsdGVyZnVuYyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnZmlsZSAiJXMiIHNraXBwZWQgYnkgZmlsdGVyZnVuYycgJSBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRoWzA6LTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiQWRkaW5nIiwgYXJjbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoZm5hbWUsIGFyY25hbWUpCkBAIC0xNjE3LDE1ICsxNjI5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aG5hbWUsIGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICByb290LCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBpZiBleHQgPT0gIi5weSI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWx0ZXJmdW5jIGFuZCBub3QgZmlsdGVyZnVuYyhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnZmlsZSAiJXMiIHNraXBwZWQgYnkgZmlsdGVyZnVuYycgJSBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRoWzA6LTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiQWRkaW5nIiwgYXJjbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoZm5hbWUsIGFyY25hbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBwYXRobmFtZVstMzpdICE9ICIucHkiOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAnRmlsZXMgYWRkZWQgd2l0aCB3cml0ZXB5KCkgbXVzdCBlbmQgd2l0aCAiLnB5IicpCisgICAgICAgICAgICAgICAgICAgICdGaWxlcyBhZGRlZCB3aXRoIHdyaXRlcHkoKSBtdXN0IGVuZCB3aXRoICIucHkiJykKICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKHBhdGhuYW1lWzA6LTNdLCBiYXNlbmFtZSkKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CiAgICAgICAgICAgICAgICAgcHJpbnQoIkFkZGluZyBmaWxlIiwgYXJjbmFtZSkKQEAgLTE2NTIsOCArMTY2OCw4IEBACiAgICAgICAgIGZpbGVfcHkgID0gcGF0aG5hbWUgKyAiLnB5IgogICAgICAgICBmaWxlX3B5YyA9IHBhdGhuYW1lICsgIi5weWMiCiAgICAgICAgIGZpbGVfcHlvID0gcGF0aG5hbWUgKyAiLnB5byIKLSAgICAgICAgcHljYWNoZV9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgVHJ1ZSkKLSAgICAgICAgcHljYWNoZV9weW8gPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgRmFsc2UpCisgICAgICAgIHB5Y2FjaGVfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgVHJ1ZSkKKyAgICAgICAgcHljYWNoZV9weW8gPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBGYWxzZSkKICAgICAgICAgaWYgc2VsZi5fb3B0aW1pemUgPT0gLTE6CiAgICAgICAgICAgICAjIGxlZ2FjeSBtb2RlOiB1c2Ugd2hhdGV2ZXIgZmlsZSBpcyBwcmVzZW50CiAgICAgICAgICAgICBpZiAob3MucGF0aC5pc2ZpbGUoZmlsZV9weW8pIGFuZApAQCAtMTc2NCw3ICsxNzgwLDcgQEAKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgICAgICAgICBmb3Igbm0gaW4gb3MubGlzdGRpcihwYXRoKToKICAgICAgICAgICAgICAgICAgICAgYWRkVG9aaXAoemYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHBhdGgsIG5tKSwgb3MucGF0aC5qb2luKHppcHBhdGgsIG5tKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHBhdGgsIG5tKSwgb3MucGF0aC5qb2luKHppcHBhdGgsIG5tKSkKICAgICAgICAgICAgICMgZWxzZTogaWdub3JlCiAKICAgICAgICAgd2l0aCBaaXBGaWxlKGFyZ3NbMV0sICd3JywgYWxsb3daaXA2ND1UcnVlKSBhcyB6ZjoKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0IGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKaW5kZXggMzg0NzBjNS4uNzQxOTRhNyAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKQEAgLTY1LDMwICs2NSwzMiBAQAogCiAgICAgICAgICogcmVhZGxpbmUgbW9kdWxlIGxpbmtzIHdpdGggQXBwbGUgQlNEIGVkaXRsaW5lIChsaWJlZGl0KQogCi0gICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LjE0IChvciBsYXRlcikgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZworICAgIC0gcmVxdWlyZXMgQWN0aXZlU3RhdGUgVGNsL1RrIDguNS4xNSAob3IgbGF0ZXIpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKIAotICAgICAgICAqIEJlZ2lubmluZyB3aXRoIFB5dGhvbiAzLjMuMywgdGhpcyBpbnN0YWxsZXIgbm93IGluY2x1ZGVzIGl0cyBvd24KKyAgICAgICAgKiBCZWdpbm5pbmcgd2l0aCBQeXRob24gMy40IGFscGhhMiwgdGhpcyBpbnN0YWxsZXIgbm93IGluY2x1ZGVzIGl0cyBvd24KICAgICAgICAgICBidWlsdGluIGNvcHkgb2YgVGNsIGFuZCBUayA4LjUuMTUgbGlicmFyaWVzIGFuZCB0aHVzIGlzIG5vIGxvbmdlcgogICAgICAgICAgIGRlcGVuZGVudCBvbiB0aGUgYnVnZ3kgcmVsZWFzZXMgb2YgQXF1YSBDb2NvYSBUayA4LjUgc2hpcHBlZCB3aXRoCiAgICAgICAgICAgT1MgWCAxMC42IG9yIG9uIGluc3RhbGxpbmcgYSBuZXdlciB0aGlyZC1wYXJ0eSB2ZXJzaW9uIG9mIFRjbC9UawotICAgICAgICAgIGluIC9MaWJyYXJ5L0ZyYW1ld29ya3MsIHN1Y2ggYXMgZnJvbSBBY3RpdmVTdGF0ZS4gIElmIGl0IGlzCi0gICAgICAgICAgbmVjZXNzYXJ5IHRvIGZhbGxiYWNrIHRvIHVzaW5nIGEgdGhpcmQtcGFydHkgVGNsL1RrIGJlY2F1c2Ugb2YKKyAgICAgICAgICBpbiAvTGlicmFyeS9GcmFtZXdvcmtzLCBzdWNoIGFzIGZyb20gQWN0aXZlU3RhdGUuICBCZWNhdXNlIHRoaXMKKyAgICAgICAgICBpcyBhIG5ldyBmZWF0dXJlLCBpdCBzaG91bGQgYmUgY29uc2lkZXJlZCBzb21ld2hhdCBleHBlcmltZW50YWwgYW5kCisgICAgICAgICAgc3ViamVjdCB0byBjaGFuZ2UgcHJpb3IgdG8gdGhlIGZpbmFsIHJlbGVhc2Ugb2YgUHl0aG9uIDMuNC4gIElmIGl0CisgICAgICAgICAgaXMgbmVjZXNzYXJ5IHRvIGZhbGxiYWNrIHRvIHVzaW5nIGEgdGhpcmQtcGFydHkgVGNsL1RrIGJlY2F1c2Ugb2YKICAgICAgICAgICBhIHByb2JsZW0gd2l0aCB0aGUgYnVpbHRpbiBUY2wvVGssIHRoZXJlIGlzIGEgYmFja3VwIHZlcnNpb24gb2YKICAgICAgICAgICB0aGUgX3RraW50ZXIgZXh0ZW5zaW9uIGluY2x1ZGVkIHdoaWNoIHdpbGwgZHluYW1pY2FsbHkgbGluayB0bwogICAgICAgICAgIFRjbCBhbmQgVGsgZnJhbWV3b3JrcyBpbiAvTGlicmFyeS9GcmFtZXdvcmtzIGFzIGluIHByZXZpb3VzIHJlbGVhc2VzLgotICAgICAgICAgIFRvIGVuYWJsZSAoZm9yIGFsbCB1c2VycyBvZiB0aGlzIFB5dGhvbiAzLjMpOjoKKyAgICAgICAgICBUbyBlbmFibGUgKGZvciBhbGwgdXNlcnMgb2YgdGhpcyBQeXRob24gMy40KTo6CiAKICAgICAgICAgICAgICAgc3VkbyBiYXNoCi0gICAgICAgICAgICAgIGNkIC9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8zLjMKLSAgICAgICAgICAgICAgY2QgLi9saWIvcHl0aG9uMy4zCisgICAgICAgICAgICAgIGNkIC9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8zLjQKKyAgICAgICAgICAgICAgY2QgLi9saWIvcHl0aG9uMy40CiAgICAgICAgICAgICAgIGNwIC1wIC4vbGliLXRraW50ZXIvbGlicmFyeS9fdGtpbnRlci5zbyAuL2xpYi1keW5sb2FkCiAgICAgICAgICAgICAgIGV4aXQKIAogICAgICAgICAgIFRvIHJlc3RvcmUgdXNpbmcgUHl0aG9uJ3MgYnVpbHRpbiB2ZXJzaW9ucyBvZiBUY2wgYW5kIFRrOjoKIAogICAgICAgICAgICAgICBzdWRvIGJhc2gKLSAgICAgICAgICAgICAgY2QgL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLzMuMwotICAgICAgICAgICAgICBjZCAuL2xpYi9weXRob24zLjMKKyAgICAgICAgICAgICAgY2QgL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLzMuNAorICAgICAgICAgICAgICBjZCAuL2xpYi9weXRob24zLjQKICAgICAgICAgICAgICAgY3AgLXAgLi9saWItdGtpbnRlci9idWlsdGluL190a2ludGVyLnNvIC4vbGliLWR5bmxvYWQKICAgICAgICAgICAgICAgZXhpdAogCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKaW5kZXggZTVjNDlmMC4uNGIzYmU5MSAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dApAQCAtMjIsNyArMjIsNyBAQAogSW5zdGFsbGluZyBhIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YgVGNsL1RrIGlzIG5vIGxvbmdlciByZXF1aXJlZAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1BcyBvZiBQeXRob24gMy4zLjMsIHRoZSAxMC42KyA2NC1iaXQgaW5zdGFsbGVyIG5vdworQmVnaW5uaW5nIHdpdGggUHl0aG9uIDMuNCBhbHBoYTIsIHRoZSAxMC42KyA2NC1iaXQgaW5zdGFsbGVyIG5vdwogY29tZXMgd2l0aCBpdHMgb3duIHByaXZhdGUgY29weSBvZiBUY2wgYW5kIFRrIDguNSBsaWJyYXJpZXMuICBGb3IKIHRoaXMgdmVyc2lvbiBvZiBQeXRob24sIGl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gaW5zdGFsbAogYSB0aGlyZC1wYXJ0eSB2ZXJzaW9uIG9mIFRjbC9UayA4LjUsIHN1Y2ggYXMgdGhvc2UgZnJvbSBBY3RpdmVTdGF0ZSwKQEAgLTMzLDYgKzMzLDEwIEBACiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSB0aGlyZC1wYXJ0eSBUY2wvVGsgaXMgaW5zdGFsbGVkLgogVGhlIDEwLjUrIDMyLWJpdC1vbmx5IGluc3RhbGxlciBjb250aW51ZXMgdG8gdXNlIFRjbC9UayA4LjQsCiBlaXRoZXIgYSB0aGlyZC1wYXJ0eSBvciBzeXN0ZW0tc3VwcGxpZWQgdmVyc2lvbi4KK1NpbmNlIHRoaXMgaXMgYSBuZXcgZmVhdHVyZSwgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgc29tZXdoYXQKK2V4cGVyaW1lbnRhbCBhbmQgc3ViamVjdCB0byBjaGFuZ2UgcHJpb3IgdG8gdGhlIGZpbmFsIHJlbGVhc2Ugb2YKK1B5dGhvbiAzLjQuICBQbGVhc2UgcmVwb3J0IGFueSBwcm9ibGVtcyBmb3VuZCB0byB0aGUgUHl0aG9uIGJ1ZwordHJhY2tlciBhdCBodHRwOi8vYnVncy5weXRob24ub3JnLgogCiBWaXNpdCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLwogZm9yIGN1cnJlbnQgaW5mb3JtYXRpb24gYWJvdXQgc3VwcG9ydGVkIGFuZCByZWNvbW1lbmRlZCB2ZXJzaW9ucyBvZgpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZiBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKaW5kZXggYzNiNGI3Yy4uNmM2NGY2ZiAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgorKysgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCkBAIC0xLDQgKzEsNCBAQAote1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMTg3XGNvY29hc3VicnRmNDAwCit7XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1Mlxjb2NvYXJ0ZjExODdcY29jb2FzdWJydGYzOTAKIFxjb2NvYXNjcmVlbmZvbnRzMXtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9CiB7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CiBccGFwZXJ3MTE5MDVccGFwZXJoMTY4MzdcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzk2NDBcdmlld2gxMDYyMFx2aWV3a2luZDAKQEAgLTI2LDYgKzI2LDYgQEAKIFwKIAogXGIgSU1QT1JUQU5UIGZvciB1c2VycyBvZiBJRExFIGFuZCB0a2ludGVyOgotXGIwICBBcyBvZiBQeXRob24gMy4zLjMsIGl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gaW5zdGFsbCB0aGlyZC1wYXJ0eSB2ZXJzaW9ucyBvZiB0aGUgCitcYjAgIEJlZ2lubmluZyB3aXRoIFB5dGhvbiAzLjQgYWxwaGEgMiwgaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byBpbnN0YWxsIHRoaXJkLXBhcnR5IHZlcnNpb25zIG9mIHRoZSAKIFxiIFRjbC9UawogXGIwICBwbGF0Zm9ybSBpbmRlcGVuZGVudCB3aW5kb3dpbmcgdG9vbGtpdC4gIFBsZWFzZSByZWFkIHRoZSBSZWFkTWUgZmlsZSBhbmQgdmlzaXQge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay8ifX17XGZsZHJzbHQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay99fSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdXBwb3J0ZWQgYW5kIHJlY29tbWVuZGVkIHZlcnNpb25zIG9mIFRjbC9UayBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgTWFjIE9TIFgufQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL01hYy9SRUFETUUgYi9NYWMvUkVBRE1FCmluZGV4IDkwMWEzMjQuLjYxNjM0ZTkgMTAwNjQ0Ci0tLSBhL01hYy9SRUFETUUKKysrIGIvTWFjL1JFQURNRQpAQCAtNyw3ICs3LDcgQEAKICAgICBSb25hbGQgT3Vzc29yZW4gKDIwMTAtMDQpLAogICAgIE5lZCBEZWlseSAoMjAxMi0wNikKIAotOlZlcnNpb246IDMuMy4wCis6VmVyc2lvbjogMy40LjAKIAogVGhpcyBkb2N1bWVudCBwcm92aWRlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHNvbWUgTWFjIE9TIFggc3BlY2lmaWMgZmVhdHVyZXMgaW4KIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgpAQCAtOTksNiArOTksOCBAQAogCiAgICogYGBpbnRlbGBgOgkgIGBgaTM4NmBgLCBgYHg4Nl82NGBgCiAKKyAgKiBgYGludGVsLTMyYGA6IGBgaTM4NmBgCisKICAgKiBgYDMyLWJpdGBgOiAgIGBgcHBjYGAsIGBgaTM4NmBgCiAKICAgKiBgYDMtd2F5YGA6CSAgYGBpMzg2YGAsIGBgeDg2XzY0YGAsIGBgcHBjYGAKQEAgLTEyNSw3ICsxMjcsNyBAQAogCiAgICogMTAuNyBhbmQgMTAuOCBTREtzIHdpdGggWGNvZGUgNCBzdXBwb3J0IGBgaW50ZWxgYCBvbmx5CiAKLVRoZSBtYWtlZmlsZSBmb3IgYSBmcmFtZXdvcmsgYnVpbGQgd2lsbCBhbHNvIGluc3RhbGwgYGBweXRob24zLjMtMzJgYAorVGhlIG1ha2VmaWxlIGZvciBhIGZyYW1ld29yayBidWlsZCB3aWxsIGFsc28gaW5zdGFsbCBgYHB5dGhvbjMuNC0zMmBgCiBiaW5hcmllcyB3aGVuIHRoZSB1bml2ZXJzYWwgYXJjaGl0ZWN0dXJlIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSAzMi1iaXQKIGFyY2hpdGVjdHVyZSAodGhhdCBpcywgZm9yIGFsbCBmbGF2b3JzIGJ1dCBgYDY0LWJpdGBgKS4KIApAQCAtMTQ5LDcgKzE1MSw3IEBACiBub3QgYXV0b21hdGljYWxseSBjYXJyeSB0aHJvdWdoIHRvIHN1YnByb2Nlc3NlcyBsYXVuY2hlZCBieSBwcm9ncmFtcyBhbmQgdGVzdHMKIHVuZGVyIHRoYXQgUHl0aG9uLiAgSWYgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgUHl0aG9uIGludGVycHJldGVycyBsYXVuY2hlZCBpbgogc3VicHJvY2Vzc2VzIGFsc28gcnVuIGluIDMyLWJpdC1tb2RlIGlmIHRoZSBtYWluIGludGVycHJldGVyIGRvZXMsIHVzZQotYSBgYHB5dGhvbjMuMy0zMmBgIGJpbmFyeSBhbmQgdXNlIHRoZSB2YWx1ZSBvZiBgYHN5cy5leGVjdXRhYmxlYGAgYXMgdGhlCithIGBgcHl0aG9uMy40LTMyYGAgYmluYXJ5IGFuZCB1c2UgdGhlIHZhbHVlIG9mIGBgc3lzLmV4ZWN1dGFibGVgYCBhcyB0aGUKIGBgc3VicHJvY2Vzc2BgIGBgUG9wZW5gYCBleGVjdXRhYmxlIHZhbHVlLgogCiAKQEAgLTE2OSw3ICsxNzEsNyBAQAogCiBBIHNlY29uZCByZWFzb24gZm9yIHVzaW5nIGZyYW1ld29ya3MgaXMgdGhhdCB0aGV5IHB1dCBQeXRob24tcmVsYXRlZCBpdGVtcyBpbgogb25seSB0d28gcGxhY2VzOiAiL0xpYnJhcnkvRnJhbWV3b3JrL1B5dGhvbi5mcmFtZXdvcmsiIGFuZCAKLSIvQXBwbGljYXRpb25zL1B5dGhvbiA8VkVSU0lPTj4iIHdoZXJlIGBgPFZFUlNJT04+YGAgY2FuIGJlIGUuZy4gIjMuMyIsCisiL0FwcGxpY2F0aW9ucy9QeXRob24gPFZFUlNJT04+IiB3aGVyZSBgYDxWRVJTSU9OPmBgIGNhbiBiZSBlLmcuICIzLjQiLAogIjIuNyIsIGV0Yy4gIFRoaXMgc2ltcGxpZmllcyBtYXR0ZXJzIGZvciB1c2VycyBpbnN0YWxsaW5nCiBQeXRob24gZnJvbSBhIGJpbmFyeSBkaXN0cmlidXRpb24gaWYgdGhleSB3YW50IHRvIGdldCByaWQgb2YgaXQgYWdhaW4uIE1vcmVvdmVyLAogZHVlIHRvIHRoZSB3YXkgZnJhbWV3b3JrcyB3b3JrLCBhIHVzZXIgd2l0aG91dCBhZG1pbiBwcml2aWxlZ2VzIGNhbiBpbnN0YWxsIGEKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjNhY2U0Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotIiIiU3VpdGUgSGVscCBJbmRleGluZyBUb29sIFN1aXRlOiBTcGVjaWFsIGV2ZW50cyB0aGF0IGp1c3QgdGhlIEhlbHAgSW5kZXhpbmcgVG9vbCBzdXBwb3J0cy4KLUxldmVsIDAsIHZlcnNpb24gMAotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdISVQgJwotCi1jbGFzcyBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzOgotCi0gICAgZGVmIHR1cm5fYW5jaG9yX2luZGV4aW5nKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ0dXJuIGFuY2hvciBpbmRleGluZzogVHVybnMgYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZi4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFx4ZDJvblx4ZDMgb3IgXHhkMm9mZlx4ZDMsIHRvIHR1cm4gYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd0QW5jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF90dXJuX3JlbW90ZV9yb290ID0gewotICAgICAgICAnd2l0aF9yb290X3VybCcgOiAnclVSTCcsCi0gICAgfQotCi0gICAgZGVmIHR1cm5fcmVtb3RlX3Jvb3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInR1cm4gcmVtb3RlIHJvb3Q6IFR1cm4gdXNhZ2Ugb2YgcmVtb3RlIHJvb3QgZm9yIGNvbnRlbnQgb24gdGhlIHdlYiBvbiBvciBvZmYuIElmIHR1cm5pbmcgXHhkMm9uXHhkMywgc3VwcGx5IGEgc3RyaW5nIGFzIHNlY29uZCBwYXJhbWV0ZXIuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBceGQyb25ceGQzIG9yIFx4ZDJvZmZceGQzLCB0byB0dXJuIHJlbW90ZSByb290IG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcm9vdF91cmw6IFRoZSByZW1vdGUgcm9vdCB0byB1c2UsIGluIHRoZSBmb3JtIG9mIFx4ZDJodHRwOi8vd3d3LmFwcGxlLmNvbS9oZWxwL1x4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3RSZW0nCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfdHVybl9yZW1vdGVfcm9vdCkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgdXNlX3Rva2VuaXplcihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidXNlIHRva2VuaXplcjogVGVsbHMgdGhlIGluZGV4aW5nIHRvb2wgd2hpY2ggdG9rZW5pemVyIHRvIHVzZS4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFNwZWNpZnkgXHhkMkVuZ2xpc2hceGQzLCBceGQyRXVyb3BlYW5ceGQzLCBceGQySmFwYW5lc2VceGQzLCBceGQyS29yZWFuXHhkMywgb3IgXHhkMlNpbXBsZVx4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3VUb2snCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotY2xhc3MgYXBwbGljYXRpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJhcHBsaWNhdGlvbiAtIEFwcGxpY2F0aW9uIGNsYXNzICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLWNsYXNzIF9Qcm9wX2lkbGVTdGF0dXMoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImlkbGVTdGF0dXMgLSAgIiIiCi0gICAgd2hpY2ggPSAnc0lkbCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1hcHBsaWNhdGlvbi5fc3VwZXJjbGFzc25hbWVzID0gW10KLWFwcGxpY2F0aW9uLl9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2lkbGVTdGF0dXMnIDogX1Byb3BfaWRsZVN0YXR1cywKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci19Ci0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc0lkbCcgOiBfUHJvcF9pZGxlU3RhdHVzLAotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNmFlNzAuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIiIiU3VpdGUgTWlzY2VsbGFuZW91cyBTdGFuZGFyZHM6IFVzZWZ1bCBldmVudHMgdGhhdCBhcmVuXHhkNXQgaW4gYW55IG90aGVyIHN1aXRlCi1MZXZlbCAwLCB2ZXJzaW9uIDAKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnbWlzYycKLQotY2xhc3MgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzOgotCi0gICAgZGVmIHJldmVydChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIicmV2ZXJ0OiBSZXZlcnQgYW4gb2JqZWN0IHRvIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIHZlcnNpb24KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IG9iamVjdCB0byByZXZlcnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnbWlzYycKLSAgICAgICAgX3N1YmNvZGUgPSAncnZydCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5ZmVlMC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0iIiJTdWl0ZSBSZXF1aXJlZCBTdWl0ZTogVGVybXMgdGhhdCBldmVyeSBhcHBsaWNhdGlvbiBzaG91bGQgc3VwcG9ydAotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ3JlcWQnCi0KLWZyb20gU3RkU3VpdGVzLlJlcXVpcmVkX1N1aXRlIGltcG9ydCAqCi1jbGFzcyBSZXF1aXJlZF9TdWl0ZV9FdmVudHMoUmVxdWlyZWRfU3VpdGVfRXZlbnRzKToKLQotICAgIHBhc3MKLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwYjYzYS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotIiIiU3VpdGUgU3RhbmRhcmQgU3VpdGU6IENvbW1vbiB0ZXJtcyBmb3IgbW9zdCBhcHBsaWNhdGlvbnMKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdDb1JlJwotCi1mcm9tIFN0ZFN1aXRlcy5TdGFuZGFyZF9TdWl0ZSBpbXBvcnQgKgotY2xhc3MgU3RhbmRhcmRfU3VpdGVfRXZlbnRzKFN0YW5kYXJkX1N1aXRlX0V2ZW50cyk6Ci0KLSAgICBfYXJnbWFwX2Nsb3NlID0gewotICAgICAgICAnc2F2aW5nJyA6ICdzYXZvJywKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgfQotCi0gICAgZGVmIGNsb3NlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJjbG9zZTogQ2xvc2UgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0cyB0byBjbG9zZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHNhdmluZzogc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGNoYW5nZXMgc2hvdWxkIGJlIHNhdmVkIGJlZm9yZSBjbG9zaW5nCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgaW5fOiB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZSBvYmplY3QKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY2xvcycKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jbG9zZSkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0gICAgICAgIGFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdzYXZvJywgX0VudW1fc2F2bykKLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBkYXRhX3NpemUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImRhdGEgc2l6ZTogUmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIHNpemUgaXMgdG8gYmUgcmV0dXJuZWQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGluIGJ5dGVzCi0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdkc2l6JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIGdldChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiZ2V0OiBHZXQgdGhlIGRhdGEgZm9yIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIGlzIHRvIGJlIHJldHVybmVkCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogVGhlIGRhdGEgZnJvbSB0aGUgb2JqZWN0Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdnZXRkJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9tYWtlID0gewotICAgICAgICAnbmV3JyA6ICdrb2NsJywKLSAgICAgICAgJ2F0JyA6ICdpbnNoJywKLSAgICAgICAgJ3dpdGhfZGF0YScgOiAnZGF0YScsCi0gICAgICAgICd3aXRoX3Byb3BlcnRpZXMnIDogJ3ByZHQnLAotICAgIH0KLQotICAgIGRlZiBtYWtlKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiIm1ha2U6IE1ha2UgYSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IG5ldzogdGhlIGNsYXNzIG9mIHRoZSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGF0OiB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9kYXRhOiB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvcGVydGllczogdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IE9iamVjdCBzcGVjaWZpZXIgZm9yIHRoZSBuZXcgZWxlbWVudAotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY3JlbCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9tYWtlKQotICAgICAgICBpZiBfbm9fb2JqZWN0IGlzIG5vdCBOb25lOiByYWlzZSBUeXBlRXJyb3IoJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnKQotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgb3BlbihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIib3BlbjogT3BlbiB0aGUgc3BlY2lmaWVkIG9iamVjdChzKQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBvcGVuLiBDYW4gYmUgYSBsaXN0IG9mIGZpbGVzIG9yIGFuIG9iamVjdCBzcGVjaWZpZXIuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2FldnQnCi0gICAgICAgIF9zdWJjb2RlID0gJ29kb2MnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgcHJpbnRfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJwcmludDogUHJpbnQgdGhlIHNwZWNpZmllZCBvYmplY3QocykKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gcHJpbnQuIENhbiBiZSBhIGxpc3Qgb2YgZmlsZXMgb3IgYW4gb2JqZWN0IHNwZWNpZmllci4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnYWV2dCcKLSAgICAgICAgX3N1YmNvZGUgPSAncGRvYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2F2ZSA9IHsKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgICAgICdhcycgOiAnZmx0cCcsCi0gICAgfQotCi0gICAgZGVmIHNhdmUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNhdmU6IHNhdmUgYSBzZXQgb2Ygb2JqZWN0cwotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBzYXZlLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGluXzogdGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgb2JqZWN0KHMpCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgYXM6IHRoZSBmaWxlIHR5cGUgb2YgdGhlIGRvY3VtZW50IGluIHdoaWNoIHRvIHNhdmUgdGhlIGRhdGEKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2F2ZScKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zYXZlKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2V0ID0gewotICAgICAgICAndG8nIDogJ2RhdGEnLAotICAgIH0KLQotICAgIGRlZiBzZXQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNldDogU2V0IGFuIG9iamVjdFx4ZDVzIGRhdGEKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gY2hhbmdlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgdG86IHRoZSBuZXcgdmFsdWUKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2V0ZCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZXQpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLWNsYXNzIGFwcGxpY2F0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiYXBwbGljYXRpb24gLSBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLSMgICAgICAgIGVsZW1lbnQgJ2N3aW4nIGFzIFsnaW5keCcsICduYW1lJywgJ3JlbGUnXQotIyAgICAgICAgZWxlbWVudCAnZG9jdScgYXMgWyduYW1lJ10KLQotY2xhc3Mgd2luZG93KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIid2luZG93IC0gQSBXaW5kb3cgIiIiCi0gICAgd2FudCA9ICdjd2luJwotY2xhc3MgX1Byb3BfYm91bmRzKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJib3VuZHMgLSB0aGUgYm91bmRhcnkgcmVjdGFuZ2xlIGZvciB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BibmQnCi0gICAgd2FudCA9ICdxZHJ0JwotY2xhc3MgX1Byb3BfY2xvc2VhYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJjbG9zZWFibGUgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIGNsb3NlIGJveD8gIiIiCi0gICAgd2hpY2ggPSAnaGNsYicKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9mbG9hdGluZyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiZmxvYXRpbmcgLSBEb2VzIHRoZSB3aW5kb3cgZmxvYXQ/ICIiIgotICAgIHdoaWNoID0gJ2lzZmwnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfaW5kZXgoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImluZGV4IC0gdGhlIG51bWJlciBvZiB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BpZHgnCi0gICAgd2FudCA9ICdsb25nJwotY2xhc3MgX1Byb3BfbW9kYWwoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm1vZGFsIC0gSXMgdGhlIHdpbmRvdyBtb2RhbD8gIiIiCi0gICAgd2hpY2ggPSAncG1vZCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9uYW1lKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJuYW1lIC0gdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncG5hbScKLSAgICB3YW50ID0gJ2l0eHQnCi1jbGFzcyBfUHJvcF9wb3NpdGlvbihhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicG9zaXRpb24gLSB1cHBlciBsZWZ0IGNvb3JkaW5hdGVzIG9mIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwcG9zJwotICAgIHdhbnQgPSAnUURwdCcKLWNsYXNzIF9Qcm9wX3Jlc2l6YWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicmVzaXphYmxlIC0gSXMgdGhlIHdpbmRvdyByZXNpemFibGU/ICIiIgotICAgIHdoaWNoID0gJ3Byc3onCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfdGl0bGVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ0aXRsZWQgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIHRpdGxlIGJhcj8gIiIiCi0gICAgd2hpY2ggPSAncHRpdCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF92aXNpYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ2aXNpYmxlIC0gaXMgdGhlIHdpbmRvdyB2aXNpYmxlPyAiIiIKLSAgICB3aGljaCA9ICdwdmlzJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3pvb21hYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tYWJsZSAtIElzIHRoZSB3aW5kb3cgem9vbWFibGU/ICIiIgotICAgIHdoaWNoID0gJ2lzem0nCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3Bfem9vbWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tZWQgLSBJcyB0aGUgd2luZG93IHpvb21lZD8gIiIiCi0gICAgd2hpY2ggPSAncHp1bScKLSAgICB3YW50ID0gJ2Jvb2wnCi0KLWNsYXNzIGRvY3VtZW50KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiZG9jdW1lbnQgLSBBIERvY3VtZW50ICIiIgotICAgIHdhbnQgPSAnZG9jdScKLWNsYXNzIF9Qcm9wX21vZGlmaWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJtb2RpZmllZCAtIEhhcyB0aGUgZG9jdW1lbnQgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCBzYXZlPyAiIiIKLSAgICB3aGljaCA9ICdpbW9kJwotICAgIHdhbnQgPSAnYm9vbCcKLWFwcGxpY2F0aW9uLl9zdXBlcmNsYXNzbmFtZXMgPSBbXQotYXBwbGljYXRpb24uX3ByaXZwcm9wZGljdCA9IHsKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci0gICAgJ2RvY3VtZW50JyA6IGRvY3VtZW50LAotICAgICd3aW5kb3cnIDogd2luZG93LAotfQotd2luZG93Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotd2luZG93Ll9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2JvdW5kcycgOiBfUHJvcF9ib3VuZHMsCi0gICAgJ2Nsb3NlYWJsZScgOiBfUHJvcF9jbG9zZWFibGUsCi0gICAgJ2Zsb2F0aW5nJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpbmRleCcgOiBfUHJvcF9pbmRleCwKLSAgICAnbW9kYWwnIDogX1Byb3BfbW9kYWwsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLSAgICAncG9zaXRpb24nIDogX1Byb3BfcG9zaXRpb24sCi0gICAgJ3Jlc2l6YWJsZScgOiBfUHJvcF9yZXNpemFibGUsCi0gICAgJ3RpdGxlZCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3Zpc2libGUnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAnem9vbWFibGUnIDogX1Byb3Bfem9vbWFibGUsCi0gICAgJ3pvb21lZCcgOiBfUHJvcF96b29tZWQsCi19Ci13aW5kb3cuX3ByaXZlbGVtZGljdCA9IHsKLX0KLWRvY3VtZW50Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotZG9jdW1lbnQuX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnbW9kaWZpZWQnIDogX1Byb3BfbW9kaWZpZWQsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLX0KLWRvY3VtZW50Ll9wcml2ZWxlbWRpY3QgPSB7Ci19Ci1fRW51bV9zYXZvID0gewotICAgICd5ZXMnIDogJ3llcyAnLCAgICAgIyBTYXZlIG9iamVjdHMgbm93Ci0gICAgJ25vJyA6ICdubyAgJywgICAgICAjIERvIG5vdCBzYXZlIG9iamVjdHMKLSAgICAnYXNrJyA6ICdhc2sgJywgICAgICMgQXNrIHRoZSB1c2VyIHdoZXRoZXIgdG8gc2F2ZQotfQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdjd2luJyA6IHdpbmRvdywKLSAgICAnZG9jdScgOiBkb2N1bWVudCwKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2hjbGInIDogX1Byb3BfY2xvc2VhYmxlLAotICAgICdpbW9kJyA6IF9Qcm9wX21vZGlmaWVkLAotICAgICdpc2ZsJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpc3ptJyA6IF9Qcm9wX3pvb21hYmxlLAotICAgICdwYm5kJyA6IF9Qcm9wX2JvdW5kcywKLSAgICAncGlkeCcgOiBfUHJvcF9pbmRleCwKLSAgICAncG1vZCcgOiBfUHJvcF9tb2RhbCwKLSAgICAncG5hbScgOiBfUHJvcF9uYW1lLAotICAgICdwcG9zJyA6IF9Qcm9wX3Bvc2l0aW9uLAotICAgICdwcnN6JyA6IF9Qcm9wX3Jlc2l6YWJsZSwKLSAgICAncHRpdCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3B2aXMnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAncHp1bScgOiBfUHJvcF96b29tZWQsCi19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc2F2bycgOiBfRW51bV9zYXZvLAotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzU5ZGY1Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSIiIgotUGFja2FnZSBnZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi0iIiIKLWltcG9ydCBhZXRvb2xzCi1FcnJvciA9IGFldG9vbHMuRXJyb3IKLWltcG9ydCBTdGFuZGFyZF9TdWl0ZQotaW1wb3J0IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZQotaW1wb3J0IG9kZHNfYW5kX2VuZHMKLWltcG9ydCBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcwotaW1wb3J0IFJlcXVpcmVkX1N1aXRlCi0KLQotX2NvZGVfdG9fbW9kdWxlID0gewotICAgICdDb1JlJyA6IFN0YW5kYXJkX1N1aXRlLAotICAgICdISVQgJyA6IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZSwKLSAgICAnT2RkcycgOiBvZGRzX2FuZF9lbmRzLAotICAgICdtaXNjJyA6IE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLAotICAgICdyZXFkJyA6IFJlcXVpcmVkX1N1aXRlLAotfQotCi0KLQotX2NvZGVfdG9fZnVsbG5hbWUgPSB7Ci0gICAgJ0NvUmUnIDogKCdIZWxwSW5kZXhpbmdUb29sLlN0YW5kYXJkX1N1aXRlJywgJ1N0YW5kYXJkX1N1aXRlJyksCi0gICAgJ0hJVCAnIDogKCdIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZScsICdIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUnKSwKLSAgICAnT2RkcycgOiAoJ0hlbHBJbmRleGluZ1Rvb2wub2Rkc19hbmRfZW5kcycsICdvZGRzX2FuZF9lbmRzJyksCi0gICAgJ21pc2MnIDogKCdIZWxwSW5kZXhpbmdUb29sLk1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJywgJ01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJyksCi0gICAgJ3JlcWQnIDogKCdIZWxwSW5kZXhpbmdUb29sLlJlcXVpcmVkX1N1aXRlJywgJ1JlcXVpcmVkX1N1aXRlJyksCi19Ci0KLWZyb20gU3RhbmRhcmRfU3VpdGUgaW1wb3J0ICoKLWZyb20gSGVscF9JbmRleGluZ19Ub29sX1N1aXRlIGltcG9ydCAqCi1mcm9tIG9kZHNfYW5kX2VuZHMgaW1wb3J0ICoKLWZyb20gTWlzY2VsbGFuZW91c19TdGFuZGFyZHMgaW1wb3J0ICoKLWZyb20gUmVxdWlyZWRfU3VpdGUgaW1wb3J0ICoKLQotZGVmIGdldGJhc2VjbGFzc2VzKHYpOgotICAgIGlmIG5vdCBnZXRhdHRyKHYsICdfcHJvcGRpY3QnLCBOb25lKToKLSAgICAgICAgdi5fcHJvcGRpY3QgPSB7fQotICAgICAgICB2Ll9lbGVtZGljdCA9IHt9Ci0gICAgICAgIGZvciBzdXBlcmNsYXNzbmFtZSBpbiBnZXRhdHRyKHYsICdfc3VwZXJjbGFzc25hbWVzJywgW10pOgotICAgICAgICAgICAgc3VwZXJjbGFzcyA9IGV2YWwoc3VwZXJjbGFzc25hbWUpCi0gICAgICAgICAgICBnZXRiYXNlY2xhc3NlcyhzdXBlcmNsYXNzKQotICAgICAgICAgICAgdi5fcHJvcGRpY3QudXBkYXRlKGdldGF0dHIoc3VwZXJjbGFzcywgJ19wcm9wZGljdCcsIHt9KSkKLSAgICAgICAgICAgIHYuX2VsZW1kaWN0LnVwZGF0ZShnZXRhdHRyKHN1cGVyY2xhc3MsICdfZWxlbWRpY3QnLCB7fSkpCi0gICAgICAgIHYuX3Byb3BkaWN0LnVwZGF0ZShnZXRhdHRyKHYsICdfcHJpdnByb3BkaWN0Jywge30pKQotICAgICAgICB2Ll9lbGVtZGljdC51cGRhdGUoZ2V0YXR0cih2LCAnX3ByaXZlbGVtZGljdCcsIHt9KSkKLQotaW1wb3J0IFN0ZFN1aXRlcwotCi0jCi0jIFNldCBwcm9wZXJ0eSBhbmQgZWxlbWVudCBkaWN0aW9uYXJpZXMgbm93IHRoYXQgYWxsIGNsYXNzZXMgaGF2ZSBiZWVuIGRlZmluZWQKLSMKLWdldGJhc2VjbGFzc2VzKHdpbmRvdykKLWdldGJhc2VjbGFzc2VzKGFwcGxpY2F0aW9uKQotZ2V0YmFzZWNsYXNzZXMoZG9jdW1lbnQpCi1nZXRiYXNlY2xhc3NlcyhhcHBsaWNhdGlvbikKLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2N3aW4nIDogd2luZG93LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdkb2N1JyA6IGRvY3VtZW50LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi0KLWNsYXNzIEhlbHBJbmRleGluZ1Rvb2woU3RhbmRhcmRfU3VpdGVfRXZlbnRzLAotICAgICAgICBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzLAotICAgICAgICBvZGRzX2FuZF9lbmRzX0V2ZW50cywKLSAgICAgICAgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzLAotICAgICAgICBSZXF1aXJlZF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIGFldG9vbHMuVGFsa1RvKToKLSAgICBfc2lnbmF0dXJlID0gJ2hpdGknCi0KLSAgICBfbW9kdWxlTmFtZSA9ICdIZWxwSW5kZXhpbmdUb29sJwpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlY2I5NS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSIiIlN1aXRlIG9kZHMgYW5kIGVuZHM6IFRoaW5ncyB0aGF0IHNob3VsZCBiZSBpbiBzb21lIHN0YW5kYXJkIHN1aXRlLCBidXQgYXJlblx4ZDV0Ci1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnT2RkcycKLQotY2xhc3Mgb2Rkc19hbmRfZW5kc19FdmVudHM6Ci0KLSAgICBkZWYgc2VsZWN0KHNlbGYsIF9vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNlbGVjdDogU2VsZWN0IHRoZSBzcGVjaWZpZWQgb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHRvIHNlbGVjdAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdtaXNjJwotICAgICAgICBfc3ViY29kZSA9ICdzbGN0JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9SRUFETUUgYi9NYWMvVG9vbHMvRG9jL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0ZDUzZC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUluIHRoaXMgZGlyZWN0b3J5IHlvdSBjYW4gYnVpbGQgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluIGEgZm9ybSB0aGF0Ci1pcyBzdWl0YWJsZSBmb3IgYWNjZXNzIHdpdGggQXBwbGUgSGVscCBWaWV3ZXIuIFRoaXMgd2lsbCBlbmFibGUgdGhlCi0iUHl0aG9uIERvY3VtZW50YXRpb24iIG1lbnUgZW50cmllcyBpbiB0aGUgTWFjUHl0aG9uIElERSBIZWxwIG1lbnUuCi0KLVVuZm9ydHVuYXRlbHkgdGhlIHByb2NlZHVyZSB0byBidWlsZCB0aGUgZG9jcyBpcyBub3QgdmVyeSBzdHJlYW1saW5lZC4KLQotRmlyc3QsIGVkaXQgc2V0dXAucHkuIEF0IHRoZSB0b3AsIGVkaXQgTUFKT1JfVkVSU0lPTiBhbmQgTUlOT1JfVkVSU0lPTiwKLWFuZCBjaGVjayB0aGF0IERFU1RESVIgbWFrZXMgc2Vuc2UuIFRoZSBkb2N1bWVudGF0aW9uIHdpbGwgYmUgaW5zdGFsbGVkCi1pbnNpZGUgUHl0aG9uSURFLmFwcC4KLQotSW4gRG9jQnVpbGQuaW5pdGlhbGl6ZV9vcHRpb25zLCBzZXQgc2VsZi5kb3dubG9hZCB0byBUcnVlIGlmIHlvdSB3YW50IHRvCi1kb3dubG9hZCB0aGUgZG9jcy4gU2V0IGl0IHRvIEZhbHNlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBkb2NzIGZyb20KLXRoZSBzb3VyY2UgdHJlZSwgYnV0IHRoaXMgcmVxdWlyZXMgTGFUZXggYW5kIGxvdHMgb2Ygb3RoZXIgc3R1ZmYuCi1Eb2FibGUsIGJ1dCBub3QgZWFzeS4KLQotU2Vjb25kLCBpZiB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGUgZG9jcyB5b3UgbWF5IG5lZWQgdG8gZG8gYSBjb3VwbGUKLW1vcmUgZWRpdHMuIFRoZSB3YXkgdGhlIGRvY3MgYXJlIHBhY2thZ2VkIHdpbGwgb2Z0ZW4gY2hhbmdlIGJldHdlZW4KLW1ham9yIHJlbGVhc2VzLiBGaWRkbGUgRG9jQnVpbGQuZG93bmxvYWREb2NzIHRvIG1ha2UgaXQgZG8gdGhlIHJpZ2h0Ci10aGluZyAoZG93bmxvYWQgdGhlIGRvY3MgZnJvbSBweXRob24ub3JnLCB1bnBhY2sgdGhlbSwgcmVuYW1lIHRoZQotZGlyZWN0b3J5IHRvICJidWlsZC9odG1sIikuCi0KLUFmdGVyIHRoZXNlIGVkaXRzIHlvdSBzaG91bGQgYmUgcmVhZHkgdG8gcm9sbC4gInB5dGhvbncgc2V0dXAucHkgYnVpbGQiCi1zaG91bGQgZG93bmxvYWQgYW5kIHVucGFjayAob3IgYnVpbGQpIHRoZSBkb2NzLiBOZXh0LCBpdCB3aWxsIGRvIHNvbWUKLW1hZ2ljIHRvIG1ha2UgdGhlIGRvY3MgaW5kZXhhYmxlLiBGaW5hbGx5LCBpdCB3aWxsIHJ1biB0aGUgQXBwbGUgSGVscAotSW5kZXhpbmcgVG9vbC4gKFRoaXMgbGFzdCBzdGVwIGlzIHRoZSByZWFzb24geW91IG11c3QgdXNlICJweXRob253IiBhcwotb3Bwb3NlZCB0byAicHl0aG9uIikuIFVzdWFsbHkgaXQgd2lsbCB0aW1lIG91dCB3aGlsZSB3YWl0aW5nIGZvciBBSElUIHRvCi1kbyBpdHMgd29yay4gV2FpdCB1bnRpbCBBSElUIGlzIGRvbmUuCi0KLU5vdyB5b3UncmUgcmVhZHkgdG8gaW5zdGFsbCB3aXRoICJweXRob24gc2V0dXAucHkgaW5zdGFsbCIuCi0KLUFmdGVyIHRoaXMgaXMgZG9uZSB0ZXN0IHlvdXIgd29yay4gRmlyZSB1cCBQeXRob25JREUsIGFuZCBjaGVjayB0aGF0Ci1IZWxwLT5QeXRob24gRG9jdW1lbnRhdGlvbiBicmluZ3MgdXAgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIEhlbHAgVmlld2VyLgotQWxzbyBvcGVuIGFuIElERSBlZGl0IHdpbmRvdywgdHlwZSBzb21ldGhpbmcgbGlrZSAiaW1wb3J0IHN5cyIsIHNlbGVjdAotImltcG9ydCIsIGFuZCB1c2UgSGVscC0+TG9va3VwIGluIFB5dGhvbiBEb2N1bWVudGF0aW9uIHRvIGNoZWNrIHRoYXQgdGhlCi1pbmRleCBoYXMgYmVlbiBnZW5lcmF0ZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weSBiL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNTE1MmMuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0jIEJ1aWxkIGFuZCBpbnN0YWxsIGFuIEFwcGxlIEhlbHAgVmlld2VyIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgUHl0aG9uCi0jIGRvY3VtZW50YXRpb24gaW50byB0aGUgZnJhbWV3b3JrLgotIyBDb2RlIGJ5IEJpbGwgRmFuY2hlciwgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgYnkgSmFjayBKYW5zZW4uCi0jCi0jIFlvdSBtdXN0IHJ1biB0aGlzIGFzIGEgdHdvLXN0ZXAgcHJvY2VzcwotIyAxLiBweXRob24gc2V0dXBEb2NzLnB5IGJ1aWxkCi0jIDIuIFdhaXQgZm9yIEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBmaW5pc2gKLSMgMy4gcHl0aG9uIHNldHVwRG9jcy5weSBpbnN0YWxsCi0jCi0jIFRvIGRvOgotIyAtIHRlc3Qgd2hldGhlciB0aGUgZG9jcyBhcmUgYXZhaWxhYmxlIGxvY2FsbHkgYmVmb3JlIGRvd25sb2FkaW5nCi0jIC0gZml4IGJ1aWxkRG9jc0Zyb21Tb3VyY2UKLSMgLSBHZXQgZG9jdW1lbnRhdGlvbiB2ZXJzaW9uIGZyb20gc3lzLnZlcnNpb24sIGZhbGxiYWNrIHRvIDIuMi4xCi0jIC0gU2VlIGlmIHdlIGNhbiBzb21laG93IGRldGVjdCB0aGF0IEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCBpcyBmaW5pc2hlZAotIyAtIGRhdGFfZmlsZXMgdG8gc2V0dXAoKSBkb2Vzbid0IHNlZW0gdGhlIHJpZ2h0IHdheSB0byBwYXNzIHRoZSBhcmd1bWVudHMKLSMKLWltcG9ydCBzeXMsIG9zLCByZQotZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkIGltcG9ydCBidWlsZAotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKLWZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgY29weV9maWxlCi1mcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgY29weV90cmVlCi1mcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IGxvZwotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnLCBkZXBfdXRpbAotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY2hhbmdlX3Jvb3QKLWltcG9ydCBIZWxwSW5kZXhpbmdUb29sCi1pbXBvcnQgQ2FyYm9uLkZpbGUKLWltcG9ydCB0aW1lCi0KLU1BSk9SX1ZFUlNJT049JzIuNCcKLU1JTk9SX1ZFUlNJT049JzIuNC4xJwotREVTVERJUj0nL0FwcGxpY2F0aW9ucy9NYWNQeXRob24tJXMvUHl0aG9uSURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9QeXRob25Eb2N1bWVudGF0aW9uJyAlIE1BSk9SX1ZFUlNJT04KLQotY2xhc3MgRG9jQnVpbGQoYnVpbGQpOgotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGJ1aWxkLmluaXRpYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBzZWxmLmJ1aWxkX2h0bWwgPSBOb25lCi0gICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5kb3dubG9hZCA9IDEKLSAgICAgICAgc2VsZi5kb2NfdmVyc2lvbiA9IE1JTk9SX1ZFUlNJT04gIyBPbmx5IG5lZWRlZCBpZiBkb3dubG9hZCBpcyB0cnVlCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgYnVpbGQuZmluYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2h0bWwgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfaHRtbCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsICdodG1sJykKLSAgICAgICAgaWYgc2VsZi5idWlsZF9kZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCAnUHl0aG9uRG9jdW1lbnRhdGlvbicpCi0KLSAgICBkZWYgc3Bhd24oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzcGF3bihhcmdzLCAxLCAgc2VsZi52ZXJib3NlLCBzZWxmLmRyeV9ydW4pCi0KLSAgICBkZWYgZG93bmxvYWREb2NzKHNlbGYpOgotICAgICAgICB3b3JrZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgIyBYWFggTm90ZTogdGhlIG5leHQgc3RyaW5ncyBtYXkgY2hhbmdlIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uCi0gICAgICAgIHVybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi9kb2MvJXMvaHRtbC0lcy50YXIuYnoyJyAlIFwKLSAgICAgICAgICAgICAgICAoc2VsZi5kb2NfdmVyc2lvbixzZWxmLmRvY192ZXJzaW9uKQotICAgICAgICB0YXJmaWxlID0gJ2h0bWwtJXMudGFyLmJ6MicgJSBzZWxmLmRvY192ZXJzaW9uCi0gICAgICAgIGRpcm5hbWUgPSAnUHl0aG9uLURvY3MtJXMnICUgc2VsZi5kb2NfdmVyc2lvbgotCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyVzOiBhbHJlYWR5IGV4aXN0cywgcGxlYXNlIHJlbW92ZSBhbmQgdHJ5IGFnYWluJyAlIHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLnNwYXduKCdjdXJsJywnLU8nLCB1cmwpCi0gICAgICAgIHNlbGYuc3Bhd24oJ3RhcicsICcteGpmJywgdGFyZmlsZSkKLSAgICAgICAgb3MucmVuYW1lKGRpcm5hbWUsICdodG1sJykKLSAgICAgICAgb3MuY2hkaXIod29ya2RpcikKLSMjICAgICAgICBwcmludCAiKiogUGxlYXNlIHVucGFjayAlcyIgJSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCB0YXJmaWxlKQotIyMgICAgICAgIHByaW50ICIqKiBVbnBhY2sgdGhlIGZpbGVzIGludG8gJXMiICUgc2VsZi5idWlsZF9odG1sCi0jIyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiWW91IG5lZWQgdG8gdW5wYWNrIHRoZSBkb2NzIG1hbnVhbGx5IgotCi0gICAgZGVmIGJ1aWxkRG9jc0Zyb21Tb3VyY2Uoc2VsZik6Ci0gICAgICAgIHNyY2RpciA9ICcuLi8uLi8uLicKLSAgICAgICAgZG9jZGlyID0gb3MucGF0aC5qb2luKHNyY2RpciwgJ0RvYycpCi0gICAgICAgIGh0bWxkaXIgPSBvcy5wYXRoLmpvaW4oZG9jZGlyLCAnaHRtbCcpCi0gICAgICAgIHNwYXduKCgnbWFrZScsJy0tZGlyZWN0b3J5JywgZG9jZGlyLCAnaHRtbCcpLCAxLCBzZWxmLnZlcmJvc2UsIHNlbGYuZHJ5X3J1bikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9odG1sKQotICAgICAgICBjb3B5X3RyZWUoaHRtbGRpciwgc2VsZi5idWlsZF9odG1sKQotCi0gICAgZGVmIGVuc3VyZUh0bWwoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgaWYgc2VsZi5kb3dubG9hZDoKLSAgICAgICAgICAgICAgICBzZWxmLmRvd25sb2FkRG9jcygpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYnVpbGREb2NzRnJvbVNvdXJjZSgpCi0KLSAgICBkZWYgaGFja0luZGV4KHNlbGYpOgotICAgICAgICBpbmRfaHRtbCA9ICdpbmRleC5odG1sJwotICAgICAgICAjcHJpbnQgJ3NlbGYuYnVpbGRfZGVzdCA9Jywgc2VsZi5idWlsZF9kZXN0Ci0gICAgICAgIGhhY2tlZEluZGV4ID0gZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCBpbmRfaHRtbCksJ3cnKQotICAgICAgICBvcmlnSW5kZXggPSBmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2h0bWwsaW5kX2h0bWwpKQotICAgICAgICByID0gcmUuY29tcGlsZSgnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uKjwvc3R5bGU+JywgcmUuRE9UQUxMKQotICAgICAgICBoYWNrZWRJbmRleC53cml0ZShyLnN1YignPE1FVEEgTkFNRT0iQXBwbGVUaXRsZSIgQ09OVEVOVD0iUHl0aG9uIERvY3VtZW50YXRpb24iPicsb3JpZ0luZGV4LnJlYWQoKSkpCi0KLSAgICBkZWYgaGFja0ZpbGUoc2VsZixkLGYpOgotICAgICAgICBvcmlnUGF0aCA9IG9zLnBhdGguam9pbihkLGYpCi0gICAgICAgIGFzc2VydChvcmlnUGF0aFs6bGVuKHNlbGYuYnVpbGRfaHRtbCldID09IHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3V0UGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsIGRbbGVuKHNlbGYuYnVpbGRfaHRtbCkrMTpdLCBmKQotICAgICAgICAobmFtZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoZikKLSAgICAgICAgaWYgb3MucGF0aC5pc2RpcihvcmlnUGF0aCk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChvdXRQYXRoKQotICAgICAgICBlbGlmIGV4dCA9PSAnLmh0bWwnOgotICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOiBwcmludCgnaGFja2luZyAlcyB0byAlcycgJSAob3JpZ1BhdGgsb3V0UGF0aCkpCi0gICAgICAgICAgICBoYWNrZWRGaWxlID0gZmlsZShvdXRQYXRoLCAndycpCi0gICAgICAgICAgICBvcmlnRmlsZSA9IGZpbGUob3JpZ1BhdGgsJ3InKQotICAgICAgICAgICAgaGFja2VkRmlsZS53cml0ZShzZWxmLnIuc3ViKCc8ZGw+PGR0PjxkZD4nLCBvcmlnRmlsZS5yZWFkKCkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29weV9maWxlKG9yaWdQYXRoLCBvdXRQYXRoKQotCi0gICAgZGVmIGhhY2tIdG1sKHNlbGYpOgotICAgICAgICBzZWxmLnIgPSByZS5jb21waWxlKCc8ZGw+PGRkPicpCi0gICAgICAgIG9zLndhbGsoc2VsZi5idWlsZF9odG1sLCBzZWxmLnZpc2l0LCBOb25lKQotCi0gICAgZGVmIHZpc2l0KHNlbGYsIGR1bW15LCBkaXJuYW1lLCBmaWxlbmFtZXMpOgotICAgICAgICBmb3IgZiBpbiBmaWxlbmFtZXM6Ci0gICAgICAgICAgICBzZWxmLmhhY2tGaWxlKGRpcm5hbWUsIGYpCi0KLSAgICBkZWYgbWFrZUhlbHBJbmRleChzZWxmKToKLSAgICAgICAgYXBwID0gJy9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAnCi0gICAgICAgIHNlbGYuc3Bhd24oJ29wZW4nLCAnLWEnLCBhcHAgLCBzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgIHByaW50KCJQbGVhc2Ugd2FpdCB1bnRpbCBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgZmluaXNoZXMgYmVmb3JlIGluc3RhbGxpbmciKQotCi0gICAgZGVmIG1ha2VIZWxwSW5kZXgoc2VsZik6Ci0gICAgICAgIGFwcCA9IEhlbHBJbmRleGluZ1Rvb2wuSGVscEluZGV4aW5nVG9vbChzdGFydD0xKQotICAgICAgICBhcHAub3BlbihDYXJib24uRmlsZS5GU1NwZWMoc2VsZi5idWlsZF9kZXN0KSkKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIHN0YXJ0Li4uIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgVGhpcyBpcyBiYWQgZGVzaWduIGluIHRoZSBzdWl0ZSBnZW5lcmF0aW9uIGNvZGUhCi0gICAgICAgICAgICBpZGxlID0gYXBwLl9nZXQoSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUuX1Byb3BfaWRsZVN0YXR1cygpKQotICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKLSAgICAgICAgICAgIGlmIG5vdCBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIGZpbmlzaC4uLiIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYmFkIGRlc2lnbiBpbiB0aGUgc3VpdGUgZ2VuZXJhdGlvbiBjb2RlIQotICAgICAgICAgICAgaWRsZSA9IGFwcC5fZ2V0KEhlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLl9Qcm9wX2lkbGVTdGF0dXMoKSkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCi0gICAgICAgICAgICBpZiBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLmVuc3VyZUh0bWwoKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBmaW5kIHNvdXJjZSBmb2xkZXIgZm9yIGRvY3VtZW50YXRpb24uIikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kZXN0KQotICAgICAgICBpZiBkZXBfdXRpbC5uZXdlcihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9odG1sLCdpbmRleC5odG1sJyksIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsJ2luZGV4Lmh0bWwnKSk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgICAgICBzZWxmLmhhY2tIdG1sKCkKLSAgICAgICAgICAgIHNlbGYuaGFja0luZGV4KCkKLSAgICAgICAgICAgIHNlbGYubWFrZUhlbHBJbmRleCgpCi0KLWNsYXNzIEFIVkRvY0luc3RhbGwoQ29tbWFuZCk6Ci0gICAgZGVzY3JpcHRpb24gPSAiaW5zdGFsbCBBcHBsZSBIZWxwIFZpZXdlciBodG1sIGZpbGVzIgotICAgIHVzZXJfb3B0aW9ucyA9IFsoJ2luc3RhbGwtZG9jPScsICdkJywKLSAgICAgICAgICAgICdkaXJlY3RvcnkgdG8gaW5zdGFsbCBIVE1MIHRyZWUnKSwKLSAgICAgICAgICAgICAoJ3Jvb3Q9JywgTm9uZSwKLSAgICAgICAgICAgICAiaW5zdGFsbCBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoaXMgYWx0ZXJuYXRlIHJvb3QgZGlyZWN0b3J5IiksCi0gICAgICAgICAgICBdCi0KLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBOb25lCi0gICAgICAgIHNlbGYuaW5zdGFsbF9kb2MgPSBOb25lCi0gICAgICAgIHNlbGYucHJlZml4ID0gTm9uZQotICAgICAgICBzZWxmLnJvb3QgPSBOb25lCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5zZXRfdW5kZWZpbmVkX29wdGlvbnMoJ2luc3RhbGwnLAotICAgICAgICAgICAgICAgICgncHJlZml4JywgJ3ByZWZpeCcpLAotICAgICAgICAgICAgICAgICgncm9vdCcsICdyb290JykpCi0jICAgICAgICAgICAgICAgaW1wb3J0IHBkYiA7IHBkYi5zZXRfdHJhY2UoKQotICAgICAgICBidWlsZF9jbWQgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGQnKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2Rlc3QgaXMgTm9uZToKLSAgICAgICAgICAgIGJ1aWxkX2NtZCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZCcpCi0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBidWlsZF9jbWQuYnVpbGRfZGVzdAotICAgICAgICBpZiBzZWxmLmluc3RhbGxfZG9jIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmluc3RhbGxfZG9jID0gb3MucGF0aC5qb2luKHNlbGYucHJlZml4LCBERVNURElSKQotICAgICAgICBwcmludCgnSU5TVEFMTCcsIHNlbGYuYnVpbGRfZGVzdCwgJy0+Jywgc2VsZi5pbnN0YWxsX2RvYykKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHByaW50KCJSdW5uaW5nIEluc3RhbGxlciIpCi0gICAgICAgIGluc3Rsb2MgPSBzZWxmLmluc3RhbGxfZG9jCi0gICAgICAgIGlmIHNlbGYucm9vdDoKLSAgICAgICAgICAgIGluc3Rsb2MgPSBjaGFuZ2Vfcm9vdChzZWxmLnJvb3QsIGluc3Rsb2MpCi0gICAgICAgIHNlbGYubWtwYXRoKGluc3Rsb2MpCi0gICAgICAgIGNvcHlfdHJlZShzZWxmLmJ1aWxkX2Rlc3QsIGluc3Rsb2MpCi0gICAgICAgIHByaW50KCJJbnN0YWxsYXRpb24gY29tcGxldGUiKQotCi1kZWYgbXVuZ2VWZXJzaW9uKGluZmlsZSwgb3V0ZmlsZSk6Ci0gICAgaSA9IGZpbGUoaW5maWxlLCdyJykKLSAgICBvID0gZmlsZShvdXRmaWxlLCd3JykKLSAgICBvLndyaXRlKHJlLnN1YignXCRcKFZFUlNJT05cKScsc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdWRVJTSU9OJyksaS5yZWFkKCkpKQotICAgIGkuY2xvc2UoKQotICAgIG8uY2xvc2UoKQotCi1kZWYgbWFpbigpOgotICAgICMgdHVybiBvZmYgd2FybmluZ3Mgd2hlbiBkZXByZWNhdGVkIG1vZHVsZXMgYXJlIGltcG9ydGVkCi0jIyAgICAgIGltcG9ydCB3YXJuaW5ncwotIyMgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIixjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCi0gICAgc2V0dXAobmFtZSA9ICdEb2N1bWVudGF0aW9uJywKLSAgICAgICAgICAgIHZlcnNpb24gPSAnJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sCi0gICAgICAgICAgICBjbWRjbGFzcyA9IHsnaW5zdGFsbF9kYXRhJzpBSFZEb2NJbnN0YWxsLCAnYnVpbGQnOkRvY0J1aWxkfSwKLSAgICAgICAgICAgIGRhdGFfZmlsZXMgPSBbJ2R1bW15J10sCi0gICAgICAgICAgICApCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvYnVuZGxlYnVpbGRlci5weSBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CmluZGV4IDZjYzEzMGYuLmY1Njc5ZDMgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CisrKyBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CkBAIC0yNzAsNyArMjcwLDcgQEAKIGRlbCBfX2xvYWQKICIiIgogCi1NQVlNSVNTX01PRFVMRVMgPSBbJ21hYycsICdvczInLCAnbnQnLCAnbnRwYXRoJywgJ2RvcycsICdkb3NwYXRoJywKK01BWU1JU1NfTU9EVUxFUyA9IFsnbWFjJywgJ250JywgJ250cGF0aCcsICdkb3MnLCAnZG9zcGF0aCcsCiAgICAgJ3dpbjMyYXBpJywgJ2NlJywgJ193aW5yZWcnLCAnbnR1cmwycGF0aCcsICdzaXRlY3VzdG9taXplJywKICAgICAnb3JnLnB5dGhvbi5jb3JlJywgJ3Jpc2NvcycsICdyaXNjb3NlbnZpcm9uJywgJ3Jpc2Nvc3BhdGgnCiBdCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5wcmUuaW4gYi9NYWtlZmlsZS5wcmUuaW4KaW5kZXggMjdkZDc1Zi4uZjM2ODdiMyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKyBiL01ha2VmaWxlLnByZS5pbgpAQCAtMTI3LDcgKzEyNyw2IEBACiAjIFN5bWJvbHMgdXNlZCBmb3IgdXNpbmcgc2hhcmVkIGxpYnJhcmllcwogU0hMSUJfU1VGRklYPQlAU0hMSUJfU1VGRklYQAogRVhUX1NVRkZJWD0JQEVYVF9TVUZGSVhACi1TTz0JCSQoU0hMSUJfU1VGRklYKQogTERTSEFSRUQ9CUBMRFNIQVJFREAgJChQWV9MREZMQUdTKQogQkxEU0hBUkVEPQlAQkxEU0hBUkVEQCAkKFBZX0xERkxBR1MpCiBMRENYWFNIQVJFRD0JQExEQ1hYU0hBUkVEQApAQCAtMjE2LDYgKzIxNSwxMiBAQAogUFJPRklMRV9UQVNLPQkkKHNyY2RpcikvVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5IC1uIDIgLS13aXRoLWdjIC0td2l0aC1zeXNjaGVjawogI1BST0ZJTEVfVEFTSz0JJChzcmNkaXIpL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CiAKKyMgcmVwb3J0IGZpbGVzIGZvciBnY292IC8gbGNvdiBjb3ZlcmFnZSByZXBvcnQKK0NPVkVSQUdFX0lORk89CSQoYWJzX2J1aWxkZGlyKS9jb3ZlcmFnZS5pbmZvCitDT1ZFUkFHRV9SRVBPUlQ9JChhYnNfYnVpbGRkaXIpL2xjb3YtcmVwb3J0CitDT1ZFUkFHRV9SRVBPUlRfT1BUSU9OUz0tLW5vLWJyYW5jaC1jb3ZlcmFnZSAtLXRpdGxlICJDUHl0aG9uIGxjb3YgcmVwb3J0IgorCisKICMgPT09IERlZmluaXRpb25zIGFkZGVkIGJ5IG1ha2VzZXR1cCA9PT0KIAogCkBAIC00NDQsNyArNDQ5LDcgQEAKIAogIyBEZWZhdWx0IHRhcmdldAogYWxsOgkJYnVpbGRfYWxsCi1idWlsZF9hbGw6CSQoQlVJTERQWVRIT04pIG9sZHNoYXJlZG1vZHMgc2hhcmVkbW9kcyBnZGJob29rcyBNb2R1bGVzL190ZXN0ZW1iZWQKK2J1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzIGdkYmhvb2tzIE1vZHVsZXMvX3Rlc3RlbWJlZCBweXRob24tY29uZmlnCiAKICMgQ29tcGlsZSBhIGJpbmFyeSB3aXRoIGdjYyBwcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24uCiBwcm9maWxlLW9wdDoKQEAgLTQ2OCwxMSArNDczLDQ4IEBACiBidWlsZF9hbGxfdXNlX3Byb2ZpbGU6CiAJJChNQUtFKSBhbGwgQ0ZMQUdTPSIkKENGTEFHUykgLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKIAorIyBDb21waWxlIGFuZCBydW4gd2l0aCBnY292CisuUEhPTlk9Y292ZXJhZ2UgY292ZXJhZ2UtbGNvdiBjb3ZlcmFnZS1yZXBvcnQKIGNvdmVyYWdlOgogCUBlY2hvICJCdWlsZGluZyB3aXRoIHN1cHBvcnQgZm9yIGNvdmVyYWdlIGNoZWNraW5nOiIKLQkkKE1BS0UpIGNsZWFuCisJJChNQUtFKSBjbGVhbiBwcm9maWxlLXJlbW92YWwKIAkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtTzAgLXBnIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIgTElCUz0iJChMSUJTKSAtbGdjb3YiCiAKK2NvdmVyYWdlLWxjb3Y6CisJQGVjaG8gIkNyZWF0aW5nIENvdmVyYWdlIEhUTUwgcmVwb3J0IHdpdGggTENPVjoiCisJQHJtIC1mICQoQ09WRVJBR0VfSU5GTykKKwlAcm0gLXJmICQoQ09WRVJBR0VfUkVQT1JUKQorCUBsY292IC0tY2FwdHVyZSAtLWRpcmVjdG9yeSAkKGFic19idWlsZGRpcikgXAorCSAgICAtLWJhc2UtZGlyZWN0b3J5ICQocmVhbHBhdGggJChhYnNfYnVpbGRkaXIpKSBcCisJICAgIC0tcGF0aCAkKHJlYWxwYXRoICQoYWJzX3NyY2RpcikpIFwKKwkgICAgLS1vdXRwdXQtZmlsZSAkKENPVkVSQUdFX0lORk8pCisJOiAjIHJlbW92ZSAzcmQgcGFydHkgbW9kdWxlcyBhbmQgc3lzdGVtIGhlYWRlcnMKKwlAbGNvdiAtLXJlbW92ZSAkKENPVkVSQUdFX0lORk8pIFwKKwkgICAgJyovTW9kdWxlcy9fY3R5cGVzL2xpYmZmaSovKicgXAorCSAgICAnKi9Nb2R1bGVzL19zaGEzL2tlY2Nhay8qJyBcCisJICAgICcqL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvKicgXAorCSAgICAnKi9Nb2R1bGVzL2V4cGF0LyonIFwKKwkgICAgJyovTW9kdWxlcy96bGliLyonIFwKKwkgICAgJyovSW5jbHVkZS8qJyBcCisJICAgICcvdXNyL2luY2x1ZGUvKicgXAorCSAgICAnL3Vzci9sb2NhbC9pbmNsdWRlLyonIFwKKwkgICAgLS1vdXRwdXQtZmlsZSAkKENPVkVSQUdFX0lORk8pCisJQGdlbmh0bWwgJChDT1ZFUkFHRV9JTkZPKSAtLW91dHB1dC1kaXJlY3RvcnkgJChDT1ZFUkFHRV9SRVBPUlQpIFwKKwkgICAgJChDT1ZFUkFHRV9SRVBPUlRfT1BUSU9OUykKKwlAZWNobworCUBlY2hvICJsY292IHJlcG9ydCBhdCAkKENPVkVSQUdFX1JFUE9SVCkvaW5kZXguaHRtbCIKKwlAZWNobworCitjb3ZlcmFnZS1yZXBvcnQ6CisJOiAjIGZvcmNlIHJlYnVpbGRpbmcgb2YgcGFyc2VyIGFuZCBpbXBvcnRsaWIKKwlAdG91Y2ggJChHUkFNTUFSX0lOUFVUKQorCUB0b3VjaCAkKHNyY2RpcikvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisJOiAjIGJ1aWxkIHdpdGggY292ZXJhZ2UgaW5mbworCSQoTUFLRSkgY292ZXJhZ2UKKwk6ICMgcnVuIHRlc3RzLCBpZ25vcmUgZmFpbHVyZXMKKwkkKFRFU1RSVU5ORVIpICQoVEVTVE9QVFMpIHx8IHRydWUKKwk6ICMgYnVpbGQgbGNvdiByZXBvcnQKKwkkKE1BS0UpIGNvdmVyYWdlLWxjb3YKIAogIyBCdWlsZCB0aGUgaW50ZXJwcmV0ZXIKICQoQlVJTERQWVRIT04pOglNb2R1bGVzL3B5dGhvbi5vICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoUFkzTElCUkFSWSkKQEAgLTY0Niw2ICs2ODgsOCBAQAogTW9kdWxlcy9fdGVzdGVtYmVkLm86ICQoc3JjZGlyKS9Nb2R1bGVzL190ZXN0ZW1iZWQuYwogCSQoTUFJTkNDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9fdGVzdGVtYmVkLmMKIAorTW9kdWxlcy9fc3JlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL19zcmUuYyAkKHNyY2RpcikvTW9kdWxlcy9zcmUuaCAkKHNyY2RpcikvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmggJChzcmNkaXIpL01vZHVsZXMvc3JlX2xpYi5oCisKIE1vZHVsZXMvcG9zaXhtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCiAKIE1vZHVsZXMvZ3JwbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dycG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKQEAgLTcxMywyNyArNzU3LDMxIEBACiAJCQkJJChzcmNkaXIpL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaAogCiBCWVRFU1RSX0RFUFMgPSBcCi0JCSQoc3JjZGlyKS9JbmNsdWRlL2J5dGVzX21ldGhvZHMuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2N0eXBlLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKIAotVU5JQ09ERV9ERVBTID0gJChCWVRFU1RSX0RFUFMpIFwKK1VOSUNPREVfREVQUyA9IFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKIApAQCAtNzUxLDkgKzc5OSw2IEBACiAKIFB5dGhvbi9jZXZhbC5vOiAkKE9QQ09ERVRBUkdFVFNfSCkgJChzcmNkaXIpL1B5dGhvbi9jZXZhbF9naWwuaAogCi1QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUubzogJChzcmNkaXIpL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jIFwKLQkJCQkkKEJZVEVTVFJfREVQUykKLQogUHl0aG9uL2Zyb3plbi5vOiBQeXRob24vaW1wb3J0bGliLmgKIAogT2JqZWN0cy90eXBlb2JqZWN0Lm86IE9iamVjdHMvdHlwZXNsb3RzLmluYwpAQCAtOTAwLDcgKzk0NSw5IEBACiAKIFFVSUNLVEVTVE9QVFM9CSQoVEVTVE9QVFMpIC14IHRlc3Rfc3VicHJvY2VzcyB0ZXN0X2lvIHRlc3RfbGliMnRvMyBcCiAJCXRlc3RfbXVsdGlieXRlY29kZWMgdGVzdF91cmxsaWIyX2xvY2FsbmV0IHRlc3RfaXRlcnRvb2xzIFwKLQkJdGVzdF9tdWx0aXByb2Nlc3NpbmcgdGVzdF9tYWlsYm94IHRlc3Rfc29ja2V0IHRlc3RfcG9sbCBcCisJCXRlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmsgdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24gXAorCQl0ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyIFwKKwkJdGVzdF9tYWlsYm94IHRlc3Rfc29ja2V0IHRlc3RfcG9sbCBcCiAJCXRlc3Rfc2VsZWN0IHRlc3RfemlwZmlsZSB0ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcwogcXVpY2t0ZXN0OglhbGwgcGxhdGZvcm0KIAkJJChURVNUUlVOTkVSKSAkKFFVSUNLVEVTVE9QVFMpCkBAIC05NTAsNyArOTk3LDcgQEAKIAkJZmk7IFwKIAkJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIHB5dGhvbiQoTERWRVJTSU9OKSQoRVhFKSBweXRob24kKFZFUlNJT04pJChFWEUpKTsgXAogCWZpCi0JaWYgdGVzdCAtZiAkKExETElCUkFSWSk7IHRoZW4gXAorCWlmIHRlc3QgLWYgJChMRExJQlJBUlkpICYmIHRlc3QgIiQoUFlUSE9ORlJBTUVXT1JLRElSKSIgPSAibm8tZnJhbWV3b3JrIiA7IHRoZW4gXAogCQlpZiB0ZXN0IC1uICIkKERMTExJQlJBUlkpIiA7IHRoZW4gXAogCQkJJChJTlNUQUxMX1NIQVJFRCkgJChETExMSUJSQVJZKSAkKERFU1RESVIpJChCSU5ESVIpOyBcCiAJCWVsc2UgXApAQCAtMTA0MCw2ICsxMDg3LDggQEAKIAkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQvY2hpbGQgXAogICAgICAgICAgICAgICAgIHRlc3QvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZSBcCiAgICAgICAgICAgICAgICAgdGVzdC9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdCBcCisJCWFzeW5jaW8gXAorCQl0ZXN0L3Rlc3RfYXN5bmNpbyBcCiAJCWNvbGxlY3Rpb25zIGNvbmN1cnJlbnQgY29uY3VycmVudC9mdXR1cmVzIGVuY29kaW5ncyBcCiAJCWVtYWlsIGVtYWlsL21pbWUgdGVzdC90ZXN0X2VtYWlsIHRlc3QvdGVzdF9lbWFpbC9kYXRhIFwKIAkJaHRtbCBqc29uIHRlc3QvdGVzdF9qc29uIGh0dHAgZGJtIHhtbHJwYyBcCkBAIC0xMTU4LDEwICsxMjA3LDE5IEBACiAJZmk7IFwKIAljZCAkKHNyY2RpcikvTGliLyQoUExBVERJUik7ICQoUlVOU0hBUkVEKSAuL3JlZ2VuCiAKLXB5dGhvbi1jb25maWc6ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4KK3B5dGhvbi1jb25maWc6ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gTWlzYy9weXRob24tY29uZmlnLnNoCiAJIyBTdWJzdGl0dXRpb24gaGFwcGVucyBoZXJlLCBhcyB0aGUgY29tcGxldGVseS1leHBhbmRlZCBCSU5ESVIKIAkjIGlzIG5vdCBhdmFpbGFibGUgaW4gY29uZmlndXJlCi0Jc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnCisJc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnLnB5CisJIyBSZXBsYWNlIG1ha2VmaWxlIGNvbXBhdC4gdmFyaWFibGUgcmVmZXJlbmNlcyB3aXRoIHNoZWxsIHNjcmlwdCBjb21wYXQuIG9uZXM7ICQoVkFSKSAtPiAke1ZBUn0KKwlzZWQgLWUgJ3MsXCQkKFwoW0EtWmEtejAtOV9dKlwpKSxcJCRce1wxXH0sZycgPCBNaXNjL3B5dGhvbi1jb25maWcuc2ggPnB5dGhvbi1jb25maWcKKwkjIE9uIERhcndpbiwgYWx3YXlzIHVzZSB0aGUgcHl0aG9uIHZlcnNpb24gb2YgdGhlIHNjcmlwdCwgdGhlIHNoZWxsCisJIyB2ZXJzaW9uIGRvZXNuJ3QgdXNlIHRoZSBjb21waWxlciBjdXN0b21pemF0aW9ucyB0aGF0IGFyZSBwcm92aWRlZAorCSMgaW4gcHl0aG9uIChfb3N4X3N1cHBvcnQucHkpLgorCWlmIHRlc3QgYHVuYW1lIC1zYCA9IERhcndpbjsgdGhlbiBcCisJCWNwIHB5dGhvbi1jb25maWcucHkgcHl0aG9uLWNvbmZpZzsgXAorCWZpCisKIAogIyBJbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGVzCiBJTkNMRElSU1RPTUFLRT0kKElOQ0xVREVESVIpICQoQ09ORklOQ0xVREVESVIpICQoSU5DTFVERVBZKSAkKENPTkZJTkNMVURFUFkpCkBAIC0xMjE5LDggKzEyNzcsOCBAQAogCSQoSU5TVEFMTF9EQVRBKSBNaXNjL3B5dGhvbi5wYyAkKERFU1RESVIpJChMSUJQQykvcHl0aG9uLSQoVkVSU0lPTikucGMKIAkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2RpcikvTW9kdWxlcy9tYWtlc2V0dXAgJChERVNURElSKSQoTElCUEwpL21ha2VzZXR1cAogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9pbnN0YWxsLXNoICQoREVTVERJUikkKExJQlBMKS9pbnN0YWxsLXNoCisJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZy5weSAkKERFU1RESVIpJChMSUJQTCkvcHl0aG9uLWNvbmZpZy5weQogCSQoSU5TVEFMTF9TQ1JJUFQpIHB5dGhvbi1jb25maWcgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTiktY29uZmlnCi0Jcm0gcHl0aG9uLWNvbmZpZwogCUBpZiBbIC1zIE1vZHVsZXMvcHl0aG9uLmV4cCAtYSBcCiAJCSJgZWNobyAkKE1BQ0hERVApIHwgc2VkICdzL15cKC4uLlwpLiovXDEvJ2AiID0gImFpeCIgXTsgdGhlbiBcCiAJCWVjaG87IGVjaG8gIkluc3RhbGxpbmcgc3VwcG9ydCBmaWxlcyBmb3IgYnVpbGRpbmcgc2hhcmVkIGV4dGVuc2lvbiBtb2R1bGVzIG9uIEFJWDoiOyBcCkBAIC0xNDAwLDYgKzE0NTgsOCBAQAogCiBwcm9maWxlLXJlbW92YWw6CiAJZmluZCAuIC1uYW1lICcqLmdjPz8nIC1leGVjIHJtIC1mIHt9ICc7JworCXJtIC1mICQoQ09WRVJBR0VfSU5GTykKKwlybSAtcmYgJChDT1ZFUkFHRV9SRVBPUlQpCiAKIGNsb2JiZXI6IGNsZWFuIHByb2ZpbGUtcmVtb3ZhbAogCS1ybSAtZiAkKEJVSUxEUFlUSE9OKSAkKFBHRU4pICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoRExMTElCUkFSWSkgXApAQCAtMTQwNyw2ICsxNDY3LDcgQEAKIAkJY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgcHljb25maWcuaCBNb2R1bGVzL2NvbmZpZy5jCiAJLXJtIC1yZiBidWlsZCBwbGF0Zm9ybQogCS1ybSAtcmYgJChQWVRIT05GUkFNRVdPUktESVIpCisJLXJtIC1mIHB5dGhvbi1jb25maWcucHkgcHl0aG9uLWNvbmZpZwogCiAjIE1ha2UgdGhpbmdzIGV4dHJhIGNsZWFuLCBiZWZvcmUgbWFraW5nIGEgZGlzdHJpYnV0aW9uOgogIyByZW1vdmUgYWxsIGdlbmVyYXRlZCBmaWxlcywgZXZlbiBNYWtlZmlsZVsucHJlXQpkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCmluZGV4IGQ1NmQ3OGUuLjI3ZmExMTUgMTAwNjQ0Ci0tLSBhL01pc2MvQUNLUworKysgYi9NaXNjL0FDS1MKQEAgLTU2LDYgKzU2LDcgQEAKIERvbm92YW4gQmFhcmRhCiBBcm5lIEJhYmVuaGF1c2VyaGVpZGUKIEF0dGlsYSBCYWJvCitNYXR0IEJhY2htYW5uCiBNYXJjaW4gQmFjaHJ5CiBBbGZvbnNvIEJhY2llcm8KIER3YXluZSBCYWlsZXkKQEAgLTEyMiw2ICsxMjMsNyBAQAogTWljaGFlbCBCaXJ0d2VsbAogU3R1YXJ0IEJpc2hvcAogUm95IEJpeGxlcgorRGFuaWVsIEJsYWNrCiBKb25hdGhhbiBCbGFjawogUmVuYXVkIEJsYW5jaAogTWlrZSBCbGFuZApAQCAtMTM5LDYgKzE0MSw3IEBACiBGb3Jlc3QgQm9uZAogR3JlZ29yeSBCb25kCiBNYXRpYXMgQm9yZGVzZQorSm9uYXMgQm9yZ3N0csO2bQogSnVyamVuIEJvcwogUGV0ZXIgQm9zY2gKIERhbiBCb3N3ZWxsCkBAIC0xNTMsOCArMTU2LDEwIEBACiBDaHJpc3RvcGhlciBCcmFubm9uCiBUZXJyZW5jZSBCcmFubm9uCiBHZXJtw6FuIE0uIEJyYXZvCitTdmVuIEJyYXVjaAogRXJpayBCcmF5CiBCcmlhbiBCcmF6aWwKK0RlbWlhbiBCcmVjaHQKIERhdmUgQnJlbm5hbgogVG9tIEJyaWRnbWFuCiBBbnRob255IEJyaWdncwpAQCAtMTcxLDkgKzE3NiwxMSBAQAogRnJhbmNpc2NvIE1hcnTDrW4gQnJ1Z3XDqQogSWFuIEJydW50bGV0dAogRmxvcmlzIEJydXlub29naGUKK01hdHQgQnJ5YW50CiBTdGFuIEJ1YnJvdXNraQogRXJpayBkZSBCdWVnZXIKIEphbi1IZWluIELDvGhybWFuCitMYXJzIEJ1aXRpbmNrCiBEaWNrIEJ1bHRlcm1hbgogQmlsbCBCdW1nYXJuZXIKIEppbW15IEJ1cmdldHQKQEAgLTE5Myw2ICsyMDAsNyBAQAogTWlrZSBDYXJsdG9uCiBQaWVycmUgQ2FycmllcgogVGVycnkgQ2Fycm9sbAorRWR3YXJkIENhdG11cgogTG9yZW56byBNLiBDYXR1Y2NpCiBEb25uIENhdmUKIENoYXJsZXMgQ2F6YWJvbgpAQCAtMjI3LDYgKzIzNSw3IEBACiBDcmFpZyBDaXRybwogR2lsbGVzIENpdmFyaW8KIENocmlzIENsYXJrCitMYXVyaWUgQ2xhcmstTWljaGFsZWsKIE1pa2UgQ2xhcmtzb24KIEFuZHJldyBDbGVnZwogQnJhZCBDbGVtZW50cwpAQCAtMzI0LDYgKzMzMyw3IEBACiBSb2JpbiBEdW5uCiBMdWtlIER1bnN0YW4KIFZpcmdpbCBEdXByYXMKK0JydW5vIER1cHVpcwogQW5keSBEdXN0bWFuCiBHYXJ5IER1emFuCiBFdWdlbmUgRHZ1cmVjaGVuc2tpCkBAIC0zMzIsNiArMzQyLDcgQEAKIFdhbHRlciBEw7Zyd2FsZAogSGFucyBFY2thcmR0CiBSb2RvbHBobyBFY2toYXJkdAorVWxyaWNoIEVja2hhcmR0CiBEYXZpZCBFZGVsc29obgogSm9obiBFZG1vbmRzCiBHcmFudCBFZHdhcmRzCkBAIC0zNDYsNiArMzU3LDcgQEAKIERhdmlkIEVseQogSmVmZiBFcGxlcgogVG9tIEVwcGVybHkKK0fDtmtjZW4gRXJhc2xhbgogU3RvZmZlbCBFcmFzbXVzCiBKw7xyZ2VuIEEuIEVyaGFyZAogTWljaGFlbCBFcm5zdApAQCAtNDI5LDYgKzQ0MSw3IEBACiBUaG9tYXMgR2VsbGVrdW0KIEdhYnJpZWwgR2VuZWxsaW5hCiBDaHJpc3RvcyBHZW9yZ2lvdQorRWxhemFyIEdlcnNodW5pCiBCZW4gR2VydHpmaWVsZAogTmFkaW0gR2hhem5hdmkKIERpbnUgR2hlcm1hbgpAQCAtNDM5LDYgKzQ1Miw3IEBACiBNYXR0IEdpdWNhCiBXaW0gR2xlbm4KIE1pY2hhZWwgR29kZXJiYXVlcgorSmVyb2VuIFZhbiBHb2V5CiBDaHJpc3RvcGggR29obGtlCiBUaW0gR29sZGVuCiBHdWlsaGVybWUgR29uw6dhbHZlcwpAQCAtNDU3LDYgKzQ3MSw3IEBACiBEYWcgR3J1bmVhdQogRmlsaXAgR3J1c3pjennFhHNraQogVGhvbWFzIEd1ZXR0bGVyCitBbnVqIEd1cHRhCiBNaWNoYWVsIEd1cmF2YWdlCiBMYXJzIEd1c3TDpGJlbAogVGhvbWFzIEfDvHR0bGVyCkBAIC00NjcsNiArNDgyLDcgQEAKIFJhc211cyBIYWhuCiBQZXRlciBIYWlnaHQKIFbDoWNsYXYgSGFpc21hbgorWmJpZ25pZXcgSGFsYXMKIFdhbGtlciBIYWxlIElWCiBCb2IgSGFsbGV5CiBKZXNzZSBIYWxsaW8KQEAgLTQ5Miw2ICs1MDgsNyBAQAogUnljaGFyZGUgSGF3a2VzCiBCZW4gSGF5ZGVuCiBKb2NoZW4gSGF5ZWsKK1RpbSBIZWFuZXkKIEhlbnJpayBIZWltYnVlcmdlcgogQ2hyaXN0aWFuIEhlaW1lcwogVGhvbWFzIEhlbGxlcgpAQCAtNTk2LDYgKzYxMyw3IEBACiBGcmVkcmlrIEpvaGFuc3NvbgogR3JlZ29yeSBLLiBKb2huc29uCiBLZW50IEpvaG5zb24KK01pY2hhZWwgSm9obnNvbgogU2ltb24gSm9obnN0b24KIE1hdHQgSm9pbmVyCiBUaG9tYXMgSm9sbGFucwpAQCAtNjE1LDYgKzYzMyw3IEBACiBTYXJhaCBLLgogU3VubnkgSwogQm9odXNsYXYgS2FicmRhCitBbGV4ZXkgS2FjaGF5ZXYKIEJvYiBLYWhuCiBLdXJ0IEIuIEthaXNlcgogVGFtaXRvIEthaml5YW1hCkBAIC02MzYsNiArNjU1LDcgQEAKIE1hZ251cyBLZXNzbGVyCiBMYXdyZW5jZSBLZXN0ZWxvb3QKIFZpdmVrIEtoZXJhCitEaGlydSBLaG9saWEKIE1hZHMgS2lpbGVyaWNoCiBKYXNvbiBLaWxsZW4KIEphbiBLaW0KQEAgLTY5MSw3ICs3MTEsOSBAQAogRXJubyBLdXVzZWxhCiBSb3NzIExhZ2Vyd2FsbAogQ2FtZXJvbiBMYWlyZAorRGF2aWQgTGFtCiBUaG9tYXMgTGFtYgorVmFsZXJpZSBMYW1iZXJ0CiBKZWFuLUJhcHRpc3RlICJKaWJhIiBMYW15CiBSb25hbiBMYW15CiBUb3JzdGVuIExhbmRzY2hvZmYKQEAgLTcyOCw5ICs3NTAsMTEgQEAKIE1hdGV1c3ogTGVuaWsKIEpvaG4gTGVudG9uCiBLb3N0eWFudHluIExlc2NoZW5rbworQmVubm8gTGVzbGllCiBDaHJpc3RvcGhlciBUdXIgTGVzbmlld3NraS1MYWFzCiBBbGFpbiBMZXVmcm95CiBNYXJrIExldmluc29uCitNYXJrIExldml0dAogV2lsbGlhbSBMZXdpcwogQWtpcmEgTGkKIFh1YW5qaSBMaQpAQCAtNzU0LDYgKzc3OCw3IEBACiBBbm5lIExvcmQKIFRvbSBMb3JlZG8KIEp1c3RpbiBMb3ZlCitOZWQgSmFja3NvbiBMb3ZlbHkKIEphc29uIExvd2UKIFRvbnkgTG93bmRzCiBSYXkgTG95emFnYQpAQCAtNzYyLDYgKzc4Nyw3IEBACiBGcmVkcmlrIEx1bmRoCiBaaG9uZ3l1ZSBMdW8KIE1hcmsgTHV0egorVGFyYXMgTHlhcHVuCiBKaW0gTHluY2gKIE1pa2FlbCBMeW5ndmlnCiBNYXJ0aW4gdm9uIEzDtndpcwpAQCAtNzcyLDkgKzc5OCwxMSBAQAogVGltIE1hY0tlbnppZQogTmljayBNYWNsYXJlbgogRG9uIE1hY01pbGxlbgorVG9tYXN6IE1hxIdrb3dpYWsKIFN0ZXZlIE1hamV3c2tpCiBHcnplZ29yeiBNYWthcmV3aWN6CiBEYXZpZCBNYWxjb2xtCitHcmVnIE1hbGNvbG0KIEtlbiBNYW5oZWltZXIKIFZsYWRpbWlyIE1hcmFuZ296b3YKIENvbGluIE1hcmMKQEAgLTc5Nyw3ICs4MjUsOSBAQAogRGlldGVyIE1hdXJlcgogRGFuaWVsIE1heQogTWFkaXNvbiBNYXkKK0x1Y2FzIE1heXN0cmUKIEFybmF1ZCBNYXppbgorTWF0dCBNY0NsdXJlCiBSZWJlY2NhIE1jQ3JlYXJ5CiBLaXJrIE1jRG9uYWxkCiBDaHJpcyBNY0Rvbm91Z2gKQEAgLTgzNyw2ICs4NjcsNyBAQAogRGFtaWVuIE1pbGxlcgogSmFzb24gVi4gTWlsbGVyCiBKYXkgVC4gTWlsbGVyCitLYXRpZSBNaWxsZXIKIFJvbWFuIE1pbG5lcgogSnVsaWVuIE1pb3R0ZQogQW5kcmlpIFYuIE1pc2hrb3Zza3lpCkBAIC04NDYsNiArODc3LDcgQEAKIEZsb3JpYW4gTWxhZGl0c2NoCiBEb3VnIE1vZW4KIFRoZSBEcmFnb24gRGUgTW9uc3luZQorQmFzdGllbiBNb250YWduZQogU2tpcCBNb250YW5hcm8KIFBldGVyIE1vb2R5CiBQYXVsIE1vb3JlCkBAIC04NTMsNiArODg1LDcgQEAKIEJlbiBNb3JnYW4KIERlcmVrIE1vcnIKIEphbWVzIEEgTW9ycmlzb24KK01hcnRpbiBNb3JyaXNvbgogRGVyZWsgTWNUYXZpc2ggTW91bmNlCiBBbGVzc2FuZHJvIE1vdXJhCiBQYWJsbyBNb3V6bwpAQCAtODY3LDYgKzkwMCw3IEBACiBMb3VpcyBNdW5ybwogUi4gRGF2aWQgTXVycmF5CiBNYXR0aSBNw6RraQorSsO2cmcgTcO8bGxlcgogRGFsZSBOYWdhdGEKIEpvaG4gTmFnbGUKIFRha2FoaXJvIE5ha2F5YW1hCkBAIC05MjksNiArOTYzLDcgQEAKIFRvZGQgUi4gUGFsbWVyCiBKdWFuIERhdmlkIEliw6HDsWV6IFBhbG9tYXIKIEphbiBQYWx1cworTWF0aGlhcyBQYW56ZW5iw7ZjawogTS4gUGFwaWxsb24KIFBldGVyIFBhcmVudGUKIEFsZXhhbmRyZSBQYXJlbnRlYXUKQEAgLTkzNyw2ICs5NzIsNyBAQAogSGVpa2tpIFBhcnRhbmVuCiBIYXJyaSBQYXNhbmVuCiBHYcOrbCBQYXNncmltYXVkCitBc2hpc2ggTml0aW4gUGF0aWwKIFJhbmR5IFBhdXNjaAogU2FtdWVsZSBQZWRyb25pCiBKdXN0aW4gUGVlbApAQCAtOTU1LDggKzk5MSwxMCBAQAogQmVuamFtaW4gUGV0ZXJzb24KIEpvZSBQZXRlcnNvbgogQ2hyaXMgUGV0cmlsbGkKK1JvdW1lbiBQZXRyb3YKIEJqb3JuIFBldHRlcnNlbgogSnVzdGluIEQuIFBldHRpdAorRXNhIFBldWhhCiBSb25ueSBQZmFubnNjaG1pZHQKIEdlb2ZmIFBoaWxicmljawogR2F2cmllIFBoaWxpcHNvbgpAQCAtOTcwLDEyICsxMDA4LDE1IEBACiBGcmFuw6dvaXMgUGluYXJkCiBUb20gUGluY2tuZXkKIFphY2ggUGluY3VzCitaZXJvIFBpcmFldXMKIE1pY2hhZWwgUGlvdHJvd3NraQogQW50b2luZSBQaXRyb3UKIEplYW4tRnJhbsOnb2lzIFBpw6lyb25uZQogT2xlZyBQbGFraG90bnl1awogUmVtaSBQb2ludGVsCitBcmllbCBQb2xpYWsKIEd1aWxoZXJtZSBQb2xvCitJbGxpYSBQb2xvc3VraGluCiBNaWNoYWVsIFBvbXJhbmluZwogTWFydGluIFBvb2wKIEl1c3RpbiBQb3AKQEAgLTk4NiwxOCArMTAyNywyMiBAQAogUGF1bCBQcmVzY29kCiBEb25vdmFuIFByZXN0b24KIFBhdWwgUHJpY2UKK0l1bGlpYSBQcm9za3VybmlhCiBKeXJraSBQdWxsaWFpbmVuCiBTdGV2ZSBQdXJjZWxsCiBFZHVhcmRvIFDDqXJlegogRmVybmFuZG8gUMOpcmV6CiBQaWVycmUgUXVlbnRlbAogQnJpYW4gUXVpbmxhbgorS2V2aW4gSmluZyBRaXUKIEFuZGVycyBRdmlzdAogVGhvbWFzIFJhY2hlbAorUmFtIFJhY2h1bQogSsOpcsO0bWUgUmFkaXgKIEJ1cnRvbiBSYWRvbnMKIEplZmYgUmFtbmFuaQogQnJvZGllIFJhbworU2Vua28gUmFzaWMKIEFudHRpIFJhc2luZW4KIFNyaWRoYXIgUmF0bmFrdW1hcgogWXNqIFJheQpAQCAtMTAyOSw3ICsxMDc0LDcgQEAKIEplYW4tQ2xhdWRlIFJpbWJhdWx0CiBWbGFkIFJpc2N1dGlhCiBXZXMgUmlzaGVsCi1EYW4gUml0aQorRGFuaWVsIFJpdGkKIEp1YW4gTS4gQmVsbG8gUml2YXMKIERhdmlkZSBSaXp6bwogQW50aG9ueSBSb2FjaApAQCAtMTE1OSw2ICsxMjA0LDcgQEAKIEtyYWdlbiBTaXRha2VyCiBNaWNoYWVsIFNsb2FuCiBOaWNrIFNsb2FuCitWw6FjbGF2IMWgbWlsYXVlcgogQ2hyaXN0b3BoZXIgU21pdGgKIEVyaWMgVi4gU21pdGgKIEdyZWdvcnkgUC4gU21pdGgKQEAgLTEyMTMsNiArMTI1OSw3IEBACiBQw6l0ZXIgU3phYsOzCiBBbWlyIFN6ZWtlbHkKIEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzCitIaWRlYWtpIFRha2FoYXNoaQogSW5kcmEgVGFsaXAKIE5laWwgVGFsbGltCiBHZW9mZiBUYWx2b2xhCkBAIC0xMjI0LDYgKzEyNzEsNyBAQAogTW9udHkgVGF5bG9yCiBBbmF0b2x5IFRlY2h0b25pawogTWlraGFpbCBUZXJla2hvdgorVmljdG9yIFRlcnLDs24KIFJpY2hhcmQgTS4gVGV3CiBUb2JpYXMgVGhlbGVuCiBGw6l2cnkgVGhpYmF1bHQKQEAgLTEyMzEsNiArMTI3OSw3IEBACiBOaWNvbGFzIE0uIFRoacOpcnkKIEphbWVzIFRob21hcwogUm9iaW4gVGhvbWFzCitCcmlhbiBUaG9ybmUKIFN0ZXBoZW4gVGhvcm5lCiBKZXJlbXkgVGh1cmdvb2QKIEVyaWMgVGllZGVtYW5uCkBAIC0xMzA5LDYgKzEzNTgsNyBAQAogUm9kcmlnbyBTdGVpbm11bGxlciBXYW5kZXJsZXkKIEtlIFdhbmcKIEdyZWcgV2FyZAorVG9tIFdhcmRpbGwKIFphY2hhcnkgV2FyZQogSm9uYXMgV2FnbmVyCiBCYXJyeSBXYXJzYXcKQEAgLTEzMzQsNiArMTM4NCw3IEBACiBGZWxpeCBXaWVtYW5uCiBHZXJyeSBXaWVuZXIKIEZyYW5rIFdpZXJ6Ymlja2kKK1NhbnRvc28gV2lqYXlhCiBCcnljZSAiWm9va28iIFdpbGNveC1PJ0hlYXJuCiBUaW1vdGh5IFdpbGQKIEpha3ViIFdpbGsKQEAgLTEzNjYsNiArMTQxNyw3IEBACiBHb3Jkb24gV29ybGV5CiBEYXJyZW4gV29ycmFsbAogVGhvbWFzIFdvdXRlcnMKK0RhbmllbCBXb3puaWFrCiBIZWlrbyBXdW5kcmFtCiBEb3VnIFd5YXR0CiBSb2JlcnQgWGlhbwpAQCAtMTM3OCw2ICsxNDMwLDcgQEAKIERhbm55IFlvbwogUm9yeSBZb3JrZQogR2VvcmdlIFlvc2hpZGEKK0thenVoaXJvIFlvc2hpZGEKIE1hc2F6dW1pIFlvc2hpa2F3YQogQXJuYXVkIFlzbWFsCiBCZXJuYXJkIFl1ZQpkaWZmIC0tZ2l0IGEvTWlzYy9ISVNUT1JZIGIvTWlzYy9ISVNUT1JZCmluZGV4IDAxYzYzNWIuLjQyODA3NjQgMTAwNjQ0Ci0tLSBhL01pc2MvSElTVE9SWQorKysgYi9NaXNjL0hJU1RPUlkKQEAgLTMsMTMgKzMsNDExMCBAQAogCiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHJlbGVhc2UgbWVzc2FnZXMgZm9yIHByZXZpb3VzIFB5dGhvbiByZWxlYXNlcy4KIEFzIHlvdSByZWFkIG9uIHlvdSBnbyBiYWNrIHRvIHRoZSBkYXJrIGFnZXMgb2YgUHl0aG9uJ3MgaGlzdG9yeS4KLShOb3RlOiBuZXdzIGFib3V0IDIuNWMyIGFuZCBsYXRlciAyLjUgcmVsZWFzZXMgaXMgaW4gdGhlIE1pc2MvTkVXUwotZmlsZSBvZiB0aGUgcmVsZWFzZTI1LW1haW50IGJyYW5jaC4pCiAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wPworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI5LVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTYwNDY6IEZpeCBsb2FkaW5nIHNvdXJjZWxlc3MgbGVnYWN5IC5weW8gZmlsZXMuCisKKy0gSXNzdWUgIzE2MDYwOiBGaXggcmVmY291bnRpbmcgYnVnIHdoZW4gX190cnVuY19fIHJldHVybnMgYW4gb2JqZWN0CisgIHdob3NlIF9faW50X18gZ2l2ZXMgYSBub24taW50ZWdlci4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjAxMjogRml4IGEgcmVncmVzc2lvbiBpbiBweWV4cGF0LiBUaGUgcGFyc2VyJ3MgVXNlRm9yZWlnbkRURCgpCisgIG1ldGhvZCBkb2Vzbid0IHJlcXVpcmUgYW4gYXJndW1lbnQgYWdhaW4uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDIzLVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU5MDA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBQeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcCgpLgorCistIElzc3VlICMxNTkyNjogRml4IGNyYXNoIGFmdGVyIG11bHRpcGxlIHJlaW5pdGlhbGl6YXRpb25zIG9mIHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTU4OTU6IEZpeCBGSUxFIHBvaW50ZXIgbGVhayBpbiBvbmUgZXJyb3IgYnJhbmNoIG9mCisgIFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKCkgd2hlbiBmaWxlbmFtZSBwb2ludHMgdG8gYSBweWMvcHlvIGZpbGUsIGNsb3NlaXQKKyAgaXMgZmFsc2UgYW4gYW5kIHNldF9tYWluX2xvYWRlcigpIGZhaWxzLgorCistIEZpeGVzIGZvciBhIGZldyBjcmFzaCBhbmQgbWVtb3J5IGxlYWsgcmVncmVzc2lvbnMgZm91bmQgYnkgQ292ZXJpdHkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4ODI6IENoYW5nZSBfZGVjaW1hbCB0byBhY2NlcHQgYW55IGNvZWZmaWNpZW50IHR1cGxlIHdoZW4KKyAgY29uc3RydWN0aW5nIGluZmluaXRpZXMuIFRoaXMgaXMgZG9uZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgd2l0aCBkZWNpbWFsLnB5OiBJbmZpbml0eSBjb2VmZmljaWVudHMgYXJlIHVuZGVmaW5lZCBpbiBfZGVjaW1hbAorICAoaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzcGVjaWZpY2F0aW9uKS4KKworLSBJc3N1ZSAjMTU5MjU6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gZW1haWwudXRpbCB3aGVyZSB0aGUgcGFyc2VkYXRlKCkgYW5kCisgIHBhcnNlZGF0ZV90eigpIGZ1bmN0aW9ucyBkaWQgbm90IHJldHVybiBOb25lIGFueW1vcmUgd2hlbiB0aGUgYXJndW1lbnQgY291bGQKKyAgbm90IGJlIHBhcnNlZC4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1OTczOiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBjb21wYXJpbmcgZGF0ZXRpbWUgdGltZXpvbmUKKyAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTU5Nzc6IEZpeCBtZW1vcnkgbGVhayBpbiBNb2R1bGVzL19zc2wuYyB3aGVuIHRoZSBmdW5jdGlvbgorICBfc2V0X25wbl9wcm90b2NvbHMoKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRoYW5rcyB0byBEYW5pZWwgU29tbWVybWFubi4KKworLSBJc3N1ZSAjMTU5Njk6IGZhdWx0aGFuZGxlciBtb2R1bGU6IHJlbmFtZSBkdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bworICBkdW1wX3RyYWNlYmFja19sYXRlcigpIGFuZCBjYW5jZWxfZHVtcF90cmFjZWJhY2tzX2xhdGVyKCkgdG8KKyAgY2FuY2VsX2R1bXBfdHJhY2ViYWNrX2xhdGVyKCkuCisKKy0gX2RlY2ltYWwgbW9kdWxlOiB1c2Ugb25seSBDIDg5IHN0eWxlIGNvbW1lbnRzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIFJlbGVhc2UgQ2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwOS1TZXAtMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEzOTkyOiBUaGUgdHJhc2hjYW4gbWVjaGFuaXNtIGlzIG5vdyB0aHJlYWQtc2FmZS4gIFRoaXMgZWxpbWluYXRlcworICBzcG9yYWRpYyBjcmFzaGVzIGluIG11bHRpLXRocmVhZCBwcm9ncmFtcyB3aGVuIHNldmVyYWwgbG9uZyBkZWFsbG9jYXRvcgorICBjaGFpbnMgcmFuIGNvbmN1cnJlbnRseSBhbmQgaW52b2x2ZWQgc3ViY2xhc3NlcyBvZiBidWlsdC1pbiBjb250YWluZXIKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzE1Nzg0OiBNb2RpZnkgT1NFcnJvci5fX3N0cl9fKCkgdG8gYmV0dGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgZXJybm8gZXJyb3IgbnVtYmVycyBhbmQgV2luZG93cyBlcnJvciBudW1iZXJzLgorCistIElzc3VlICMxNTc4MTogRml4IHR3byBzbWFsbCByYWNlIGNvbmRpdGlvbnMgaW4gaW1wb3J0J3MgbW9kdWxlIGxvY2tpbmcuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4NDc6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UsIHdoaWNoIGRpZCBub3QgYWNjZXB0IHR1cGxlcworICBhcyBhcmd1bWVudCBsaXN0cyBhbnltb3JlLgorCistIElzc3VlICMxNTgyODogUmVzdG9yZSBzdXBwb3J0IGZvciBDIGV4dGVuc2lvbnMgaW4gaW1wLmxvYWRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzE1MzQwOiBGaXggaW1wb3J0aW5nIHRoZSByYW5kb20gbW9kdWxlIHdoZW4gL2Rldi91cmFuZG9tIGNhbm5vdAorICBiZSBvcGVuZWQuICBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IHRoZSBoYXNoIHJhbmRvbWl6YXRpb24gcGF0Y2guCisKKy0gSXNzdWUgIzEwNjUwOiBEZXByZWNhdGUgdGhlIHdhdGNoZXhwIHBhcmFtZXRlciBvZiB0aGUgRGVjaW1hbC5xdWFudGl6ZSgpCisgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTU3ODU6IE1vZGlmeSB3aW5kb3cuZ2V0X3djaCgpIEFQSSBvZiB0aGUgY3Vyc2VzIG1vZHVsZTogcmV0dXJuCisgIGEgY2hhcmFjdGVyIGZvciBtb3N0IGtleXMsIGFuZCBhbiBpbnRlZ2VyIGZvciBzcGVjaWFsIGtleXMsIGluc3RlYWQgb2YKKyAgYWx3YXlzIHJldHVybmluZyBhbiBpbnRlZ2VyLiBTbyBpdCBpcyBub3cgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggc3BlY2lhbAorICBrZXlzIGxpa2Uga2V5cGFkIGtleXMuCisKKy0gSXNzdWUgIzE0MjIzOiBGaXggd2luZG93LmFkZGNoKCkgb2YgdGhlIGN1cnNlcyBtb2R1bGUgZm9yIHNwZWNpYWwgY2hhcmFjdGVycworICBsaWtlIGN1cnNlcy5BQ1NfSExJTkU6IHRoZSBQeXRob24gZnVuY3Rpb24gYWRkY2goaW50KSBhbmQgYWRkY2goYnl0ZXMpIGlzIG5vdworICBjYWxsaW5nIHRoZSBDIGZ1bmN0aW9uIHdhZGRjaCgpL212d2FkZGNoKCkgKGFzIGl0IHdhcyBkb25lIGluIFB5dGhvbiAzLjIpLAorICBpbnN0ZWFkIG9mIHdhZGRfd2NoKCkvbXZ3YWRkX3djaCgpLiBUaGUgUHl0aG9uIGZ1bmN0aW9uIGFkZGNoKHN0cikgaXMgc3RpbGwKKyAgY2FsbGluZyB0aGUgQyBmdW5jdGlvbiB3YWRkX3djaCgpL212d2FkZF93Y2goKSBpZiB0aGUgUHl0aG9uIGN1cnNlcyBpcyBsaW5rZWQKKyAgdG8gbGlibmN1cnNlc3cuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNTgyMjogUmVhbGx5IGVuc3VyZSAydG8zIGdyYW1tYXIgcGlja2xlcyBhcmUgcHJvcGVybHkgaW5zdGFsbGVkCisgIChyZXBsYWNlcyBmaXhlcyBmb3IgSXNzdWUgIzE1NjQ1KS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTgxNDogVGhlIG1lbW9yeXZpZXcgZW5oYW5jZW1lbnRzIGluIDMuMy4wIGFjY2lkZW50YWxseSBwZXJtaXR0ZWQKKyAgdGhlIGhhc2hpbmcgb2YgbXVsdGktZGltZW5zaW9uYWwgbWVtb3J2aWV3cyBhbmQgbWVtb3J5dmlld3Mgd2l0aCBtdWx0aS1ieXRlCisgIGl0ZW0gZm9ybWF0cy4gVGhlIGludGVuZGVkIHJlc3RyaWN0aW9ucyBoYXZlIG5vdyBiZWVuIGRvY3VtZW50ZWQgLSB0aGV5CisgIHdpbGwgYmUgY29ycmVjdGx5IGVuZm9yY2VkIGluIDMuMy4xCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI1LUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1NzM6IG1lbW9yeXZpZXcgY29tcGFyaXNvbnMgYXJlIG5vdyBwZXJmb3JtZWQgYnkgdmFsdWUgd2l0aCBmdWxsCisgIHN1cHBvcnQgZm9yIGFueSB2YWxpZCBzdHJ1Y3QgbW9kdWxlIGZvcm1hdCBkZWZpbml0aW9uLgorCistIElzc3VlICMxNTMxNjogV2hlbiBhbiBpdGVtIGluIHRoZSBmcm9tbGlzdCBmb3IgX19pbXBvcnRfXyBkb2Vzbid0IGV4aXN0LAorICBkb24ndCByYWlzZSBhbiBlcnJvciwgYnV0IGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYXMgcGFydCBvZiBhbiBpbXBvcnQgZG8KKyAgbGV0IHRoYXQgcHJvcGFnYXRlLgorCistIElzc3VlICMxNTc3ODogZW5zdXJlIHRoYXQgc3RyKEltcG9ydEVycm9yKG1zZykpIHJldHVybnMgYSBzdHIKKyAgZXZlbiB3aGVuIG1zZyBpc24ndCBhIHN0ci4KKworLSBJc3N1ZSAjMjA1MTogU291cmNlIGZpbGUgcGVybWlzc2lvbiBiaXRzIGFyZSBvbmNlIGFnYWluIGNvcnJlY3RseQorICBjb3BpZWQgdG8gdGhlIGNhY2hlZCBieXRlY29kZSBmaWxlLiAoVGhlIG1pZ3JhdGlvbiB0byBpbXBvcnRsaWIKKyAgcmVpbnRyb2R1Y2VkIHRoaXMgcHJvYmxlbSBiZWNhdXNlIHRoZXNlIHdhcyBubyByZWdyZXNzaW9uIHRlc3QuIEEgdGVzdAorICBoYXMgYmVlbiBhZGRlZCBhcyBwYXJ0IG9mIHRoaXMgcGF0Y2gpCisKKy0gSXNzdWUgIzE1NzYxOiBGaXggY3Jhc2ggd2hlbiBQWVRIT05FWEVDVVRBQkxFIGlzIHNldCBvbiBNYWMgT1MgWC4KKworLSBJc3N1ZSAjMTU3MjY6IEZpeCBpbmNvcnJlY3QgYm91bmRzIGNoZWNraW5nIGluIFB5U3RhdGVfRmluZE1vZHVsZS4KKyAgUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNTYwNDogVXBkYXRlIHVzZXMgb2YgUHlPYmplY3RfSXNUcnVlKCkgdG8gY2hlY2sgZm9yIGFuZCBoYW5kbGUKKyAgZXJyb3JzIGNvcnJlY3RseS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0ODQ2OiBpbXBvcnRsaWIuRmlsZUZpbmRlciBub3cgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUKKyAgZGlyZWN0b3J5IGJlaW5nIHNlYXJjaGVkIGlzIHJlbW92ZWQgYWZ0ZXIgYSBwcmV2aW91cyBpbXBvcnQgYXR0ZW1wdAorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzEzMzcwOiBFbnN1cmUgdGhhdCBjdHlwZXMgd29ya3Mgb24gTWFjIE9TIFggd2hlbiBQeXRob24gaXMKKyAgY29tcGlsZWQgdXNpbmcgdGhlIGNsYW5nIGNvbXBpbGVyCisKKy0gSXNzdWUgIzEzMDcyOiBUaGUgYXJyYXkgbW9kdWxlJ3MgJ3UnIGZvcm1hdCBjb2RlIGlzIG5vdyBkZXByZWNhdGVkIGFuZAorICB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDQuMC4KKworLSBJc3N1ZSAjMTU1NDQ6IEZpeCBEZWNpbWFsLl9fZmxvYXRfXyB0byB3b3JrIHdpdGggcGF5bG9hZC1jYXJyeWluZyBOYU5zLgorCistIElzc3VlICMxNTI0OTogQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBtYW5nbGVzIEZyb20gbGluZXMgKHdoZW4KKyAgcmVxdWVzdGVkKSBldmVuIGlmIHRoZSBib2R5IGNvbnRhaW5zIHVuZGVjb2RhYmxlIGJ5dGVzLgorCistIElzc3VlICMxNTc3NzogRml4IGEgcmVmbGVhayBpbiBfcG9zaXhzdWJwcm9jZXNzLgorCistIElzc3VlICMjNjY1MTk0OiBVcGRhdGUgZW1haWwudXRpbHMubG9jYWx0aW1lIHRvIHVzZSBkYXRldGltZS5hc3RpbWV6b25lIGFuZAorICBjb3JyZWN0bHkgaGFuZGxlIGhpc3RvcmljIGNoYW5nZXMgaW4gVVRDIG9mZnNldHMuCisKKy0gSXNzdWUgIzE1MTk5OiBGaXggSmF2YVNjcmlwdCdzIGRlZmF1bHQgTUlNRSB0eXBlIHRvIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQuCisgIFBhdGNoIGJ5IEJvaHVzbGF2IEthYnJkYS4KKworLSBJc3N1ZSAjMTI2NDM6IGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlIG5vdyByZXNwZWN0cyBzeXMuZXhjZXB0aG9vayB3aGVuCisgIGRpc3BsYXlpbmcgZXhjZXB0aW9ucyAoUGF0Y2ggYnkgQWFyb24gSWxlcykKKworLSBJc3N1ZSAjMTM1Nzk6IHN0cmluZy5Gb3JtYXR0ZXIgbm93IHVuZGVyc3RhbmRzIHRoZSAnYScgY29udmVyc2lvbiBzcGVjaWZpZXIuCisKKy0gSXNzdWUgIzE1NzkzOiBTdGFjayBjb3JydXB0aW9uIGluIHNzbC5SQU5EX2VnZCgpLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTU5NTogRml4IHN1YnByb2Nlc3MuUG9wZW4odW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgIGZvciBjZXJ0YWluIGxvY2FsZXMgKHV0Zi0xNiBhbmQgdXRmLTMyIGZhbWlseSkuIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgorCistIElzc3VlICMxNTQ3NzogSW4gY21hdGggYW5kIG1hdGggbW9kdWxlcywgYWRkIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aG9zZQorICBzeXN0ZW0tc3VwcGxpZWQgbG9nMXAgZnVuY3Rpb24gZG9lc24ndCByZXNwZWN0IHNpZ25zIG9mIHplcm9zLgorCistIElzc3VlICMxNTcxNTogaW1wb3J0bGliLl9faW1wb3J0X18oKSB3aWxsIHNpbGVuY2UgYW4gSW1wb3J0RXJyb3Igd2hlbiB0aGUgdXNlCisgIG9mIGZyb21saXN0IGxlYWRzIHRvIGEgZmFpbGVkIGltcG9ydC4KKworLSBJc3N1ZSAjMTQ2Njk6IEZpeCBwaWNrbGluZyBvZiBjb25uZWN0aW9ucyBhbmQgc29ja2V0cyBvbiBNYWNPU1gKKyAgYnkgc2VuZGluZy9yZWNlaXZpbmcgYW4gYWNrbm93bGVkZ21lbnQgYWZ0ZXIgZmlsZSBkZXNjcmlwdG9yIHRyYW5zZmVyLgorICBUZXN0UGlja2xpbmdDb25uZWN0aW9uIGhhcyBiZWVuIHJlZW5hYmxlZCBmb3IgTWFjT1NYLgorCistIElzc3VlICMxMTA2MjogRml4IGFkZGluZyBhIG1lc3NhZ2UgZnJvbSBmaWxlIHRvIEJhYnlsIG1haWxib3guCisKKy0gSXNzdWUgIzE1NjQ2OiBQcmV2ZW50IGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIgd2hlbiB1c2luZworICBtdWx0aXByb2Nlc3Npbmcgb24gV2luZG93cyB3aXRob3V0IHRoZSAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIKKyAgaWRpb20uCisKKy0gSXNzdWUgIzE1Njc4OiBGaXggSURMRSBtZW51cyB3aGVuIHN0YXJ0ZWQgZnJvbSBPUyBYIGNvbW1hbmQgbGluZQorICAoMy4zLjBiMiByZWdyZXNzaW9uKS4KKworQyBBUEkKKy0tLS0tCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDY3NDogQWRkIGEgZGlzY3Vzc2lvbiBvZiB0aGUganNvbiBtb2R1bGUncyBzdGFuZGFyZCBjb21wbGlhbmNlLgorICBQYXRjaCBieSBDaHJpcyBSZWJlcnQuCisKKy0gQ3JlYXRlIGEgJ0NvbmN1cnJlbnQgRXhlY3V0aW9uJyBzZWN0aW9uIGluIHRoZSBkb2NzLCBhbmQgc3BsaXQgdXAgdGhlCisgICdPcHRpb25hbCBPcGVyYXRpbmcgU3lzdGVtIFNlcnZpY2VzJyBzZWN0aW9uIHRvIHVzZSBhIG1vcmUgdXNlci1jZW50cmljCisgIGNsYXNzaWZpY2F0aW9uIHNjaGVtZSAoc3BsaXR0aW5nIHRoZW0gYWNyb3NzIHRoZSBuZXcgQ0Ugc2VjdGlvbiwgSVBDIGFuZAorICB0ZXh0IHByb2Nlc3NpbmcpLiBPcGVyYXRpbmcgc3lzdGVtIGxpbWl0YXRvbnMgY2FuIGJlIHJlZmxlY3RlZCB3aXRoCisgIHRoZSBTcGhpbnggYGA6cGxhdGZvcm06YGAgdGFnLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgYXMgcGFydCBvZiB0aGUgVGFibGUgb2YKKyAgQ29udGVudHMuCisKKy0gSXNzdWUgIzQ5NjY6IEJyaW5nIHRoZSBzZXF1ZW5jZSBkb2NzIHVwIHRvIGRhdGUgZm9yIHRoZSBQeTNrIHRyYW5zaXRpb24KKyAgYW5kIHRoZSBtYW55IGxhbmd1YWdlIGVuaGFuY2VtZW50cyBzaW5jZSB0aGV5IHdlcmUgb3JpZ2luYWwgd3JpdHRlbgorCistIFRoZSAicGF0aCBpbXBvcnRlciIgbWlzbm9tZXIgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBFcmljIFNub3cncworICBtb3JlLWF3a3dhcmQtYnV0LWF0LWxlYXN0LW5vdC13cm9uZyBzdWdnZXN0aW9uIG9mICJwYXRoIGJhc2VkIGZpbmRlciIgaW4KKyAgdGhlIGltcG9ydCBzeXN0ZW0gcmVmZXJlbmNlIGRvY3MKKworLSBJc3N1ZSAjMTU2NDA6IERvY3VtZW50IGltcG9ydGxpYi5hYmMuRmluZGVyIGFzIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzE1NjMwOiBBZGQgYW4gZXhhbXBsZSBmb3IgImNvbnRpbnVlIiBzdG10IGluIHRoZSB0dXRvcmlhbC4gUGF0Y2ggYnkKKyAgRGFuaWVsIEVsbGlzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTU3NDc6IFpGUyBhbHdheXMgcmV0dXJucyBFT1BOT1RTVVBQIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlCisgIFVGX0lNTVVUQUJMRSBmbGFnICh2aWEgZWl0aGVyIGNoZmxhZ3Mgb3IgbGNoZmxhZ3MpOyByZWZhY3RvciBhZmZlY3RlZAorICB0ZXN0cyBpbiB0ZXN0X3Bvc2l4LnB5IHRvIGFjY291bnQgZm9yIHRoaXMuCisKKy0gSXNzdWUgIzE1Mjg1OiBSZWZhY3RvciB0aGUgYXBwcm9hY2ggZm9yIHRlc3RpbmcgY29ubmVjdCB0aW1lb3V0cyB1c2luZworICB0d28gZXh0ZXJuYWwgaG9zdHMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgdHlwZQorICBvZiB0ZXN0LgorCistIElzc3VlICMxNTc0MzogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZCB1c2FnZSBpbiB1cmxsaWIgdGVzdHMuIFBhdGNoIGJ5CisgIEplZmYgS251cHAuCisKKy0gSXNzdWUgIzE1NjE1OiBBZGQgc29tZSB0ZXN0cyBmb3IgdGhlIGpzb24gbW9kdWxlJ3MgaGFuZGxpbmcgb2YgaW52YWxpZAorICBpbnB1dCBkYXRhLiAgUGF0Y2ggYnkgS3VzaGFsIERhcy4KKworQnVpbGQKKy0tLS0tCisKKy0gT3V0cHV0IGxpYiBmaWxlcyBmb3IgUEdPIGJ1aWxkIGludG8gUEdPIGRpcmVjdG9yeS4KKworLSBQaWNrIHVwIDMyLWJpdCBsYXVuY2hlciBmcm9tIFBHTyBkaXJlY3Rvcnkgb24gNjQtYml0IFBHTyBidWlsZC4KKworLSBEcm9wIFBDXHB5dGhvbl9udC5oIGFzIGl0J3Mgbm90IHVzZWQuIEFkZCBpbnB1dCBkZXBlbmRlbmN5IG9uIGN1c3RvbQorICBidWlsZCBzdGVwLgorCistIElzc3VlICMxNTUxMTogRHJvcCBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHB5dGhvbnh5LmxpYiBmcm9tIF9kZWNpbWFsCisgIGFtZDY0IGNvbmZpZ3VyYXRpb24uCisKKy0gQWRkIG1pc3NpbmcgUEdJL1BHTyBjb25maWd1cmF0aW9ucyBmb3IgcHl3bGF1bmNoZXIuCisKKy0gSXNzdWUgIzE1NjQ1OiBFbnN1cmUgMnRvMyBncmFtbWFyIHBpY2tsZXMgYXJlIHByb3Blcmx5IGluc3RhbGxlZC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBCZXRhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDEyLUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1Njg6IEZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mICJ5aWVsZCBmcm9tIiB3aGVuIFN0b3BJdGVyYXRpb24gaXMKKyAgcmFpc2VkIGJ5IGEgY3VzdG9tIGl0ZXJhdG9yLgorCistIElzc3VlICMxMzExOTogc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciBhcmUgbm93IHVzaW5nICJcclxuIiBuZXdsaW5lIG9uCisgIFdpbmRvd3MsIGFzIFB5dGhvbiAyLgorCistIElzc3VlICMxNTUzNDogRml4IHRoZSBmYXN0LXNlYXJjaCBmdW5jdGlvbiBmb3Igbm9uLUFTQ0lJIFVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTU1MDg6IEZpeCB0aGUgZG9jc3RyaW5nIGZvciBfX2ltcG9ydF9fIHRvIGhhdmUgdGhlIHByb3BlciBkZWZhdWx0CisgIHZhbHVlIG9mIDAgZm9yICdsZXZlbCcgYW5kIHRvIG5vdCBtZW50aW9uIG5lZ2F0aXZlIGxldmVscyBzaW5jZSB0aGV5IGFyZSBub3QKKyAgc3VwcG9ydGVkLgorCistIElzc3VlICMxNTQyNTogRWxpbWluYXRlZCB0cmFjZWJhY2sgbm9pc2UgZnJvbSBtb3JlIHNpdHVhdGlvbnMgaW52b2x2aW5nCisgIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ1Nzg6IFN1cHBvcnQgbW9kdWxlcyByZWdpc3RlcmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGFnYWluLgorCistIElzc3VlICMxNTQ2NjogU3RvcCB1c2luZyBUWVBFX0lOVDY0IGluIG1hcnNoYWwsIHRvIG1ha2UgaW1wb3J0bGliLmggKGFuZCBvdGhlcgorICBieXRlIGNvZGUgZmlsZXMpIGVxdWFsIGJldHdlZW4gMzItYml0IGFuZCA2NC1iaXQgc3lzdGVtcy4KKworLSBJc3N1ZSAjMTY5MjMzNTogTW92ZSBpbml0aWFsIGV4Y2VwdGlvbiBhcmdzIGFzc2lnbm1lbnQgdG8KKyAgIkJhc2VFeGNlcHRpb24uX19uZXdfXyIgdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMjgzNDogRml4IFB5QnVmZmVyX1RvQ29udGlndW91cygpIGZvciBub24tY29udGlndW91cyBhcnJheXMuCisKKy0gSXNzdWUgIzE1NDU2OiBGaXggY29kZSBfX3NpemVvZl9fIGFmdGVyICMxMjM5OSBjaGFuZ2UuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQwNDogUmVmbGVhayBpbiBQeU1ldGhvZE9iamVjdCByZXByLgorCistIElzc3VlICMxNTM5NDogQW4gaXNzdWUgaW4gUHlNb2R1bGVfQ3JlYXRlIHRoYXQgY2F1c2VkIHJlZmVyZW5jZXMgdG8gYmUgbGVha2VkCisgIG9uIHNvbWUgZXJyb3IgcGF0aHMgaGFzIGJlZW4gZml4ZWQuICBQYXRjaCBieSBKdWxpYSBMYXdhbGwuCisKKy0gSXNzdWUgIzE1MzY4OiBBbiBpc3N1ZSB0aGF0IGNhdXNlZCBieXRlY29kZSBnZW5lcmF0aW9uIHRvIGJlIG5vbi1kZXRlcm1pbmlzdGljCisgIGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICMxNTIwMjogQ29uc2lzdGVudGx5IHVzZSB0aGUgbmFtZSAiZm9sbG93X3N5bWxpbmtzIiBmb3IgbmV3IHBhcmFtZXRlcnMKKyAgaW4gb3MgYW5kIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MzE0OiBfX21haW5fXy5fX2xvYWRlcl9fIGlzIG5vdyBzZXQgY29ycmVjdGx5IGR1cmluZyBpbnRlcnByZXRlcgorICBzdGFydHVwLgorCistIElzc3VlICMxNTExMTogV2hlbiBhIG1vZHVsZSBpbXBvcnRlZCB1c2luZyAnZnJvbSBpbXBvcnQnIGhhcyBhbiBJbXBvcnRFcnJvcgorICBpbnNpZGUgaXRzZWxmLCBkb24ndCBtYXNrIHRoYXQgZmFjdCBiZWhpbmQgYSBnZW5lcmljIEltcG9ydEVycm9yIGZvciB0aGUKKyAgbW9kdWxlIGl0c2VsZi4KKworLSBJc3N1ZSAjMTUyOTM6IEFkZCBHQyBzdXBwb3J0IHRvIHRoZSBBU1QgYmFzZSBub2RlIHR5cGUuCisKKy0gSXNzdWUgIzE1MjkxOiBGaXggYSBtZW1vcnkgbGVhayB3aGVyZSBBU1Qgbm9kZXMgd2hlcmUgbm90IHByb3Blcmx5CisgIGRlYWxsb2NhdGVkLgorCistIElzc3VlICMxNTExMDogRml4IHRoZSB0cmFjZWJhY2tzIGdlbmVyYXRlZCBieSAiaW1wb3J0IHh4eCIgdG8gbm90IHNob3cgdGhlCisgIGltcG9ydGxpYiBzdGFjayBmcmFtZXMuCisKKy0gSXNzdWUgIzE1MDIwOiBUaGUgcHJvZ3JhbSBuYW1lIHVzZWQgdG8gc2VhcmNoIGZvciBQeXRob24ncyBwYXRoIGlzIG5vdworICAicHl0aG9uMyIgdW5kZXIgVW5peCwgbm90ICJweXRob24iLgorCistIElzc3VlICMxNTAzMzogRml4IHRoZSBleGl0IHN0YXR1cyBidWcgd2hlbiBtb2R1bGVzIGludm9rZWQgdXNpbmcgLW0gc3dpdGgsCisgIHJldHVybiB0aGUgcHJvcGVyIGZhaWx1cmUgcmV0dXJuIHZhbHVlICgxKS4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjMTUyMjk6IEFuIE9TRXJyb3Igc3ViY2xhc3Mgd2hvc2UgX19pbml0X18gZG9lc24ndCBjYWxsIGJhY2sKKyAgT1NFcnJvci5fX2luaXRfXyBjb3VsZCBwcm9kdWNlIGluY29tcGxldGUgaW5zdGFuY2VzLCBsZWFkaW5nIHRvIGNyYXNoZXMgd2hlbgorICBjYWxsaW5nIHN0cigpIG9uIHRoZW0uCisKKy0gSXNzdWUgMTUzMDc6IFZpcnR1YWwgZW52aXJvbm1lbnRzIG5vdyB1c2Ugc3ltbGlua3Mgd2l0aCBmcmFtZXdvcmsgYnVpbGRzIG9uCisgIE1hYyBPUyBYLCBsaWtlIG90aGVyIFBPU0lYIGJ1aWxkcy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNTQyNDogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgYXJyYXkgb2JqZWN0cy4gIFBhdGNoIGJ5CisgIEx1ZHdpZyBIw6RobmUuCisKKy0gSXNzdWUgIzE1NTc2OiBBbGxvdyBleHRlbnNpb24gbW9kdWxlcyB0byBhY3QgYXMgYSBwYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlLgorCistIElzc3VlICMxNTUwMjogSGF2ZSBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKSB3b3JrIG9uIHN5cy5tZXRhX3BhdGggaW5zdGVhZAorICBvZiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KKworLSBJc3N1ZSAjMTUxNjM6IFB5ZG9jIHNob3VsZG4ndCBsaXN0IF9fbG9hZGVyX18gYXMgbW9kdWxlIGRhdGEuCisKKy0gSXNzdWUgIzE1NDcxOiBEbyBub3QgdXNlIG11dGFibGUgb2JqZWN0cyBhcyBkZWZhdWx0cyBmb3IKKyAgaW1wb3J0bGliLl9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1NTk6IFRvIGF2b2lkIGEgcHJvYmxlbWF0aWMgZmFpbHVyZSBtb2RlIHdoZW4gcGFzc2VkIHRvIHRoZSBieXRlcworICBjb25zdHJ1Y3Rvciwgb2JqZWN0cyBpbiB0aGUgaXBhZGRyZXNzIG1vZHVsZSBubyBsb25nZXIgaW1wbGVtZW50IF9faW5kZXhfXworICAodGhleSBzdGlsbCBpbXBsZW1lbnQgX19pbnRfXyBhcyBhcHByb3ByaWF0ZSkKKworLSBJc3N1ZSAjMTU1NDY6IEZpeCBoYW5kbGluZyBvZiBwYXRob2xvZ2ljYWwgaW5wdXQgZGF0YSBpbiB0aGUgcGVlaygpIGFuZAorICByZWFkMSgpIG1ldGhvZHMgb2YgdGhlIEJaMkZpbGUsIEd6aXBGaWxlIGFuZCBMWk1BRmlsZSBjbGFzc2VzLgorCistIElzc3VlICMxMzA1MjogRml4IElETEUgY3Jhc2hpbmcgd2hlbiByZXBsYWNlIHN0cmluZyBpbiBTZWFyY2gvUmVwbGFjZSBkaWFsb2cKKyAgZW5kZWQgd2l0aCAnXCcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjY1NTogSW5zdGVhZCBvZiByZXF1aXJpbmcgYSBjdXN0b20gdHlwZSwgb3Muc2NoZWRfZ2V0YWZmaW5pdHkgYW5kCisgIG9zLnNjaGVkX3NldGFmZmluaXR5IG5vdyB1c2UgcmVndWxhciBzZXRzIG9mIGludGVnZXJzIHRvIHJlcHJlc2VudCB0aGUgQ1BVcyBhCisgIHByb2Nlc3MgaXMgcmVzdHJpY3RlZCB0by4KKworLSBJc3N1ZSAjMTU1Mzg6IEZpeCBjb21waWxhdGlvbiBvZiB0aGUgZ2V0bmFtZWluZm8oKSAvIGdldGFkZHJpbmZvKCkgZW11bGF0aW9uCisgIGNvZGUuICBQYXRjaCBieSBQaGlsaXBwIEhhZ2VtZWlzdGVyLgorCistIElzc3VlICMxNTUxOTogUHJvcGVybHkgZXhwb3NlIFdpbmRvd3NSZWdpc3RyeUZpbmRlciBpbiBpbXBvcnRsaWIgKGFuZCB1c2UgdGhlCisgIGNvcnJlY3QgdGVybSBmb3IgaXQpLiBPcmlnaW5hbCBwYXRjaCBieSBFcmljIFNub3cuCisKKy0gSXNzdWUgIzE1NTAyOiBCcmluZyB0aGUgaW1wb3J0bGliIEFCQ3MgaW50byBsaW5lIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisgIGltcG9ydCBwcm90b2NvbHMgZ2l2ZW4gUEVQIDQyMC4gT3JpZ2luYWwgcGF0Y2ggYnkgRXJpYyBTbm93LgorCistIElzc3VlICMxNTQ5OTogTGF1bmNoaW5nIGEgd2ViYnJvd3NlciBpbiBVbml4IHVzZWQgdG8gc2xlZXAgZm9yIGEgZmV3IHNlY29uZHMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9uIEJhcmtvdnNreS4KKworLSBJc3N1ZSAjMTU0NjM6IFRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlIHRydW5jYXRlcyBzdHJpbmdzIHRvIDUwMCBjaGFyYWN0ZXJzLAorICBpbnN0ZWFkIG9mIDEwMCwgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGxvbmcgZmlsZSBwYXRocy4KKworLSBJc3N1ZSAjNjA1NjogTWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHNldGJsb2NraW5nKFRydWUpIG9uIHRoZSBzb2NrZXRzIGl0CisgIHVzZXMuICBPcmlnaW5hbCBwYXRjaCBieSBKIERlcmVrIFdpbHNvbi4KKworLSBJc3N1ZSAjMTUzNjQ6IEZpeCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpIHRvIGJlIGFuIGFic29sdXRlIHBhdGguCisKKy0gSXNzdWUgIzE1MDQxOiBVcGRhdGUgInNlZSBhbHNvIiBsaXN0IGluIHRraW50ZXIgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTU0MTM6IG9zLnRpbWVzKCkgaGFkIGRpc2FwcGVhcmVkIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE1NDAyOiBBbiBpc3N1ZSBpbiB0aGUgc3RydWN0IG1vZHVsZSB0aGF0IGNhdXNlZCBzeXMuZ2V0c2l6ZW9mIHRvCisgIHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc3RydWN0LlN0cnVjdCBpbnN0YW5jZXMgaGFzIGJlZW4gZml4ZWQuICBJbml0aWFsCisgIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MjMyOiBXaGVuIG1hbmdsZV9mcm9tIGlzIFRydWUsIGVtYWlsLkdlbmVyYXRvciBub3cgY29ycmVjdGx5IG1hbmdsZXMKKyAgbGluZXMgdGhhdCBzdGFydCB3aXRoICdGcm9tICcgdGhhdCBvY2N1ciBpbiBhIE1JTUUgcHJlYW1ibGUgb3IgZXBpbG9ndWUuCisKKy0gSXNzdWUgIzE1MDk0OiBJbmNvcnJlY3RseSBwbGFjZWQgI2VuZGlmIGluIF90a2ludGVyLmMuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxMzkyMjogYXJncGFyc2Ugbm8gbG9uZ2VyIGluY29ycmVjdGx5IHN0cmlwcyAnLS0ncyB0aGF0IGFwcGVhciBhZnRlcgorICB0aGUgZmlyc3Qgb25lLgorCistIElzc3VlICMxMjM1MzogYXJncGFyc2Ugbm93IGNvcnJlY3RseSBoYW5kbGVzIG51bGwgYXJndW1lbnQgdmFsdWVzLgorCistIElzc3VlICMxMDAxNywgaXNzdWUgIzE0OTk4OiBGaXggVHlwZUVycm9yIHVzaW5nIHBwcmludCBvbiBkaWN0aW9uYXJpZXMgd2l0aAorICB1c2VyLWRlZmluZWQgdHlwZXMgYXMga2V5cyBvciBvdGhlciB1bm9yZGVyYWJsZSBrZXlzLgorCistIElzc3VlICMxNTM5NzogaW5zcGVjdC5nZXRtb2R1bGVuYW1lKCkgaXMgbm93IGJhc2VkIGRpcmVjdGx5IG9uIGltcG9ydGxpYiB2aWEgYQorICBuZXcgaW1wb3J0bGliLm1hY2hpbmVyeS5hbGxfc3VmZml4ZXMoKSBBUEkuCisKKy0gSXNzdWUgIzE0NjM1OiB0ZWxuZXRsaWIgd2lsbCB1c2UgcG9sbCgpIHJhdGhlciB0aGFuIHNlbGVjdCgpIHdoZW4gcG9zc2libGUgdG8KKyAgYXZvaWQgZmFpbGluZyBkdWUgdG8gdGhlIHNlbGVjdCgpIGZpbGUgZGVzY3JpcHRvciBsaW1pdC4KKworLSBJc3N1ZSAjMTUxODA6IENsYXJpZnkgcG9zaXhwYXRoLmpvaW4oKSBlcnJvciBtZXNzYWdlIHdoZW4gbWl4aW5nIHN0ciAmIGJ5dGVzLgorCistIElzc3VlICMxNTM0MzogcGtndXRpbCBub3cgaW5jbHVkZXMgYW4gaXRlcl9pbXBvcnRlcl9tb2R1bGVzIGltcGxlbWVudGF0aW9uIGZvcgorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgKHNpbWlsYXIgdG8gdGhlIHdheSBpdCBhbHJlYWR5IGhhbmRsZWQKKyAgemlwaW1wb3J0LnppcGltcG9ydGVyKS4KKworLSBJc3N1ZSAjMTUzMTQ6IHJ1bnB5IG5vdyBzZXRzIF9fbWFpbl9fLl9fbG9hZGVyX18gY29ycmVjdGx5LgorCistIElzc3VlICMxNTM1NzogVGhlIGltcG9ydCBlbXVsYXRpb24gaW4gcGtndXRpbCBpcyBub3cgZGVwcmVjYXRlZC4gcGtndXRpbCB1c2VzCisgIGltcG9ydGxpYiBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHRoZSBlbXVsYXRpb24uCisKKy0gSXNzdWUgIzE1MjMzOiBQeXRob24gbm93IGd1YXJhbnRlZXMgdGhhdCBjYWxsYWJsZXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBhdGV4aXQKKyAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGluIGEgZGV0ZXJtaW5pc3RpYyBvcmRlci4KKworLSBJc3N1ZSAjMTUyMzg6IHNodXRpbC5jb3B5c3RhdCBub3cgY29waWVzIExpbnV4ICJleHRlbmRlZCBhdHRyaWJ1dGVzIi4KKworLSBJc3N1ZSAjMTUyMzA6IHJ1bnB5LnJ1bl9wYXRoIG5vdyBjb3JyZWN0bHkgc2V0cyBfX3BhY2thZ2VfXyBhcyBkZXNjcmliZWQgaW4KKyAgdGhlIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzE1MzE1OiBTdXBwb3J0IFZTIDIwMTAgaW4gZGlzdHV0aWxzIGN5Z3dpbmNvbXBpbGVyLgorCistIElzc3VlICMxNTI5NDogRml4IGEgcmVncmVzc2lvbiBpbiBwa2d1dGlsLmV4dGVuZF9wYXRoKCkncyBoYW5kbGluZyBvZiBuZXN0ZWQKKyAgbmFtZXNwYWNlIHBhY2thZ2VzLgorCistIElzc3VlICMxNTA1NjogaW1wLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kIHNvdXJjZV9mcm9tX2NhY2hlKCkgcmFpc2UKKyAgTm90SW1wbGVtZW50ZWRFcnJvciB3aGVuIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgc2V0IHRvIE5vbmUuCisKKy0gSXNzdWUgIzE1MjU2OiBHcmFtbWF0aWNhbCBtaXN0YWtlIGluIGV4Y2VwdGlvbiByYWlzZWQgYnkgaW1wLmZpbmRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzU5MzE6IHdzZ2lyZWYgZW52aXJvbiB2YXJpYWJsZSBTRVJWRVJfU09GVFdBUkUgd2lsbCBzcGVjaWZ5IGFuCisgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRlcm0gbGlrZSBDUHl0aG9uLCBKeXRob24gaW5zdGVhZCBvZiBnZW5lcmljICJQeXRob24iLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJtYXhfYnVmZmVyX3NpemUiIG9mIEJ1ZmZlcmVkV3JpdGVyIGFuZAorICBCdWZmZXJlZFJXUGFpciwgZnJvbSB0aGUgaW8gbW9kdWxlLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJ2ZXJzaW9uIiBvZiBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci4KKworLSBJc3N1ZSAjMTQ4MTQ6IEltcGxlbWVudCBtb3JlIGNvbnNpc3RlbnQgb3JkZXJpbmcgYW5kIHNvcnRpbmcgYmVoYXZpb3VyIGZvcgorICBpcGFkZHJlc3Mgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ4MTQ6IGlwYWRkcmVzcyBuZXR3b3JrIG9iamVjdHMgY29ycmVjdGx5IHJldHVybiBOb3RJbXBsZW1lbnRlZCB3aGVuCisgIGNvbXBhcmVkIHRvIGFyYml0cmFyeSBvYmplY3RzIGluc3RlYWQgb2YgcmFpc2luZyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE0OTkwOiBDb3JyZWN0bHkgZmFpbCB3aXRoIFN5bnRheEVycm9yIG9uIGludmFsaWQgZW5jb2RpbmcgZGVjbGFyYXRpb24uCisKKy0gSXNzdWUgIzE0ODE0OiBpcGFkZHJlc3Mgbm93IHByb3ZpZGVzIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgd2hlbgorICBjb25zdHJ1Y3RpbmcgaW5zdGFuY2VzIGRpcmVjdGx5IChjaGFuZ2VzIHBlcm1pdHRlZCBkdXJpbmcgYmV0YSBkdWUgdG8KKyAgcHJvdmlzaW9uYWwgQVBJIHN0YXR1cykuCisKKy0gSXNzdWUgIzE1MjQ3OiBGaWxlSU8gbm93IHJhaXNlcyBhbiBlcnJvciB3aGVuIGdpdmVuIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50aW5nCisgIHRvIGEgZGlyZWN0b3J5LgorCistIElzc3VlICMxNTI2MTogU3RvcCBvcy5zdGF0KGZkKSBjcmFzaGluZyBvbiBXaW5kb3dzIHdoZW4gZmQgbm90IG9wZW4uCisKKy0gSXNzdWUgIzE1MTY2OiBJbXBsZW1lbnQgaW1wLmdldF90YWcoKSB1c2luZyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLgorCistIElzc3VlICMxNTIxMDogQ2F0Y2ggS2V5RXJyb3Igd2hlbiBpbXBvcnRsaWIuX19pbml0X18gY2FuJ3QgZmluZAorICBfZnJvemVuX2ltcG9ydGxpYiBpbiBzeXMubW9kdWxlcywgbm90IEltcG9ydEVycm9yLgorCistIElzc3VlICMxNTAzMDogaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBub3cgc3VwcG9ydHMgdGhlIG5ldyBzb3VyY2Ugc2l6ZQorICBoZWFkZXIgZmllbGQgaW4gLnB5YyBmaWxlcy4KKworLSBJc3N1ZSAjNTM0NjogUHJlc2VydmUgcGVybWlzc2lvbnMgb2YgbWJveCwgTU1ERiBhbmQgQmFieWwgbWFpbGJveCBmaWxlcyBvbgorICBmbHVzaCgpLgorCistIElzc3VlICMxMDU3MTogRml4IHRoZSAiLS1zaWduIiBvcHRpb24gb2YgZGlzdHV0aWxzJyB1cGxvYWQgY29tbWFuZC4gIFBhdGNoIGJ5CisgIEpha3ViIFdpbGsuCisKKy0gSXNzdWUgIzk1NTk6IElmIG1lc3NhZ2VzIHdlcmUgb25seSBhZGRlZCwgYSBuZXcgZmlsZSBpcyBubyBsb25nZXIgY3JlYXRlZCBhbmQKKyAgcmVuYW1lZCBvdmVyIHRoZSBvbGQgZmlsZSB3aGVuIGZsdXNoKCkgaXMgY2FsbGVkIG9uIGFuIG1ib3gsIE1NREYgb3IgQmFieWwKKyAgbWFpbGJveC4KKworLSBJc3N1ZSAxMDkyNDogRml4ZWQgY3J5cHQubWtzYWx0KCkgdG8gdXNlIGEgUk5HIHRoYXQgaXMgc3VpdGFibGUgZm9yCisgIGNyeXB0b2dyYXBoaWMgcHVycG9zZS4KKworLSBJc3N1ZSAjMTUxODQ6IEVuc3VyZSBjb25zaXN0ZW50IHJlc3VsdHMgb2YgT1MgWCBjb25maWd1cmF0aW9uIHRhaWxvcmluZyBmb3IKKyAgdW5pdmVyc2FsIGJ1aWxkcyBieSBmYWN0b3Jpbmcgb3V0IGNvbW1vbiBPUyBYLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zIGZyb20KKyAgc3lzY29uZmlnLCBkaXN0dXRpbHMuc3lzY29uZmlnLCBkaXN0dXRpbHMudXRpbCwgYW5kIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyCisgIGludG8gYSBuZXcgbW9kdWxlIF9vc3hfc3VwcG9ydC4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzE1NjEwOiBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeCgpIG5vdyB1c2VzIGEgJ2xldmVsJyBvZiAwIGluc3RlYWQgb2YgLTEuCisKKy0gSXNzdWVzICMxNTE2OSwgIzE0NTk5OiBTdHJpcCBvdXQgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YKKyAgaW1wLnNvdXJjZV9mcm9tX2NhY2hlKCkgdXNlZCBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSBhbmQKKyAgdXNlZCB0aGUgUHl0aG9uIGNvZGUgaW5zdGVhZC4gTGVhZHMgdG8gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoKSB0byBub3QKKyAgdHJ5IHRvIGluZmVyIHRoZSBzb3VyY2UgcGF0aCBmcm9tIHRoZSBieXRlY29kZSBwYXRoIGFzCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIGRvZXMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTY3NjogTm93ICJtbWFwIiBjaGVjayBmb3IgZW1wdHkgZmlsZXMgYmVmb3JlIGRvaW5nIHRoZQorICBvZmZzZXQgY2hlY2suICBQYXRjaCBieSBTdGV2ZW4gV2lsbGlzLgorCistIElzc3VlICM2NDkzOiBBbiBpc3N1ZSBpbiBjdHlwZXMgb24gV2luZG93cyB0aGF0IGNhdXNlZCBzdHJ1Y3R1cmUgYml0ZmllbGRzCisgIG9mIHR5cGUgY3R5cGVzLmNfdWludDMyIGFuZCB3aWR0aCAzMiB0byBpbmNvcnJlY3RseSBiZSBzZXQgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE1MTk0OiBVcGRhdGUgbGliZmZpIHRvIHRoZSAzLjAuMTEgcmVsZWFzZS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1NDU4OiBweXRob24tY29uZmlnIGdldHMgYSBuZXcgb3B0aW9uIC0tY29uZmlnZGlyIHRvIHByaW50IHRoZSAkTElCUEwKKyAgdmFsdWUuCisKKy0gTW92ZSBpbXBvcnRsaWIudGVzdC5iZW5jaG1hcmsgdG8gVG9vbHMvaW1wb3J0YmVuY2guCisKKy0gSXNzdWUgIzEyNjA1OiBUaGUgZ2RiIGhvb2tzIGZvciBkZWJ1Z2dpbmcgQ1B5dGhvbiAod2l0aGluIFRvb2xzL2dkYikgaGF2ZSBiZWVuCisgIGVuaGFuY2VkIHRvIHNob3cgaW5mb3JtYXRpb24gb24gbW9yZSBDIGZyYW1lcyByZWxldmFudCB0byBDUHl0aG9uIHdpdGhpbiB0aGUKKyAgInB5LWJ0IiBhbmQgInB5LWJ0LWZ1bGwiIGNvbW1hbmRzOgorCisgICogQyBmcmFtZXMgdGhhdCBhcmUgd2FpdGluZyBvbiB0aGUgR0lMCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZ2FyYmFnZS1jb2xsZWN0aW5nCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZHVlIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGEgUHlDRnVuY3Rpb24KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTQ0NDogVXNlIHByb3BlciBzcGVsbGluZyBmb3Igbm9uLUFTQ0lJIGNvbnRyaWJ1dG9yIG5hbWVzLiAgUGF0Y2gKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUyOTU6IFJlb3JnYW5pemUgYW5kIHJld3JpdGUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGltcG9ydCBzeXN0ZW0uCisKKy0gSXNzdWUgIzE1MjMwOiBDbGVhcmx5IGRvY3VtZW50IHNvbWUgb2YgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBydW5weSBtb2R1bGUgYW5kCisgIG51ZGdlIHJlYWRlcnMgdG93YXJkcyBpbXBvcnRsaWIgd2hlbiBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjMTUwNTM6IENvcHkgUHl0aG9uIDMuMyBpbXBvcnQgbG9jayBjaGFuZ2Ugbm90aWNlIHRvIGFsbCByZWxldmFudAorICBmdW5jdGlvbnMgaW4gaW1wIGluc3RlYWQgb2YganVzdCBhdCB0aGUgdG9wIG9mIHRoZSByZWxldmFudCBzZWN0aW9uLgorCistIElzc3VlICMxNTI4ODogTGluayB0byB0aGUgdGVybSAibG9hZGVyIiBpbiBub3RlcyBpbiBwa2d1dGlsIGFib3V0IGhvdyB0aGluZ3MKKyAgd29uJ3Qgd29yayBhcyBleHBlY3RlZCBpbiBQeXRob24gMy4zIGFuZCBtYXJrIHRoZSByZXF1aXNpdGUgZnVuY3Rpb25zIGFzCisgICJjaGFuZ2VkIiBzaW5jZSB0aGV5IHdpbGwgbm8gbG9uZ2VyIHdvcmsgd2l0aCBtb2R1bGVzIGRpcmVjdGx5IGltcG9ydGVkIGJ5CisgIGltcG9ydCBpdHNlbGYuCisKKy0gSXNzdWUgIzEzNTU3OiBDbGFyaWZ5IGVmZmVjdCBvZiBnaXZpbmcgdHdvIGRpZmZlcmVudCBuYW1lc3BhY2VzIHRvIGV4ZWMgb3IKKyAgZXhlY2ZpbGUoKS4KKworLSBJc3N1ZSAjMTUyNTA6IERvY3VtZW50IHRoYXQgZmlsZWNtcC5kaXJjbXAgY29tcGFyZXMgZmlsZXMgc2hhbGxvd2x5LiBQYXRjaAorICBjb250cmlidXRlZCBieSBDaHJpcyBKZXJkb25lay4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE1NDY3OiBNb3ZlIGhlbHBlcnMgZm9yIF9fc2l6ZW9mX18gdGVzdHMgaW50byB0ZXN0X3N1cHBvcnQuICBQYXRjaCBieQorICBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTMyMDogTWFrZSBpdGVyYXRpbmcgdGhlIGxpc3Qgb2YgdGVzdHMgdGhyZWFkLXNhZmUgd2hlbiBydW5uaW5nIHRlc3RzCisgIGluIG11bHRpcHJvY2VzcyBtb2RlLiBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KKworLSBJc3N1ZSAjMTUxNjg6IE1vdmUgaW1wb3J0bGliLnRlc3QgdG8gdGVzdC50ZXN0X2ltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTUwOTE6IFJlYWN0aXZhdGUgYSB0ZXN0IG9uIFVOSVggd2hpY2ggd2FzIGZhaWxpbmcgdGhhbmtzIHRvIGEKKyAgZm9yZ290dGVuIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIGNhbGwuCisKKy0gSXNzdWUgIzE1MjMwOiBBZG9wdGVkIGEgbW9yZSBzeXN0ZW1hdGljIGFwcHJvYWNoIGluIHRoZSBydW5weSB0ZXN0cy4KKworLSBJc3N1ZSAjMTUzMDA6IEVuc3VyZSB0aGUgdGVtcG9yYXJ5IHRlc3Qgd29ya2luZyBkaXJlY3RvcmllcyBhcmUgaW4gdGhlIHNhbWUKKyAgcGFyZW50IGZvbGRlciB3aGVuIHJ1bm5pbmcgdGVzdHMgaW4gbXVsdGlwcm9jZXNzIG1vZGUgZnJvbSBhIFB5dGhvbiBidWlsZC4KKyAgUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCisKKy0gSXNzdWUgIzE1Mjg0OiBTa2lwIHtzZW5kLHJlY3Z9bXNnIHRlc3RzIGluIHRlc3Rfc29ja2V0IHdoZW4gSVB2NiBpcyBub3QKKyAgZW5hYmxlZC4gUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIElzc3VlICMxNTI3NzogRml4IGEgcmVzb3VyY2UgbGVhayBpbiBzdXBwb3J0LnB5IHdoZW4gSVB2NiBpcyBkaXNhYmxlZC4gIFBhdGNoCisgIGJ5IEJyaWFuIEJyYXppbC4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzExNzE1OiBGaXggbXVsdGlhcmNoIGRldGVjdGlvbiB3aXRob3V0IGhhdmluZyBEZWJpYW4gZGV2ZWxvcG1lbnQgdG9vbHMKKyAgKGRwa2ctZGV2KSBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzE1MDM3OiBCdWlsZCBPUyBYIGluc3RhbGxlcnMgd2l0aCBsb2NhbCBjb3B5IG9mIG5jdXJzZXMgNS45IGxpYnJhcmllcworICB0byBhdm9pZCBjdXJzZXMudW5nZXRfd2NoIGJ1ZyBwcmVzZW50IGluIG9sZGVyIHZlcnNpb25zIG9mIG5jdXJzZXMgc3VjaCBhcworICB0aG9zZSBzaGlwcGVkIHdpdGggT1MgWC4KKworLSBJc3N1ZSAjMTU1NjA6IEZpeCBidWlsZGluZyBfc3FsaXRlMyBleHRlbnNpb24gb24gT1MgWCB3aXRoIGFuIFNESy4gIEFsc28sIGZvcgorICBPUyBYIGluc3RhbGxlcnMsIGVuc3VyZSBjb25zaXN0ZW50IHNxbGl0ZTMgYmVoYXZpb3IgYW5kIGZlYXR1cmUgYXZhaWxhYmlsaXR5CisgIGJ5IGJ1aWxkaW5nIGEgbG9jYWwgY29weSBvZiBsaWJzcWxpdGUzIHJhdGhlciB0aGFuIGRlcGVuZGluZyBvbiB0aGUgd2lkZSByYW5nZQorICBvZiB2ZXJzaW9ucyBzdXBwbGllZCB3aXRoIHZhcmlvdXMgT1MgWCByZWxlYXNlcy4KKworLSBJc3N1ZSAjODg0NzogRGlzYWJsZSBDT01EQVQgZm9sZGluZyBpbiBXaW5kb3dzIFBHTyBidWlsZHMuCisKKy0gSXNzdWUgIzE0MDE4OiBGaXggT1MgWCBUY2wvVGsgZnJhbWV3b3JrIGNoZWNraW5nIHdoZW4gdXNpbmcgT1MgWCBTREtzLgorCistIElzc3VlICMxNTQzMTogQWRkIF9mcmVlemVfaW1wb3J0bGliIHByb2plY3QgdG8gcmVnZW5lcmF0ZSBpbXBvcnRsaWIuaCBvbgorICBXaW5kb3dzLiBQYXRjaCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb24uCisKKy0gSXNzdWUgIzE0MTk3OiBGb3IgT1MgWCBmcmFtZXdvcmsgYnVpbGRzLCBlbnN1cmUgbGlua3MgdG8gdGhlIHNoYXJlZCBsaWJyYXJ5CisgIGFyZSBjcmVhdGVkIHdpdGggdGhlIHByb3BlciBBQkkgc3VmZml4LgorCistIElzc3VlICMxNDMzMDogRm9yIGNyb3NzIGJ1aWxkcywgZG9uJ3QgdXNlIGhvc3QgcHl0aG9uLCB1c2UgaG9zdCBzZWFyY2ggcGF0aHMKKyAgZm9yIGhvc3QgY29tcGlsZXIuCisKKy0gSXNzdWUgIzE1MjM1OiBBbGxvdyBCZXJrbGV5IERCIHZlcnNpb25zIHVwIHRvIDUuMyB0byBidWlsZCB0aGUgZGJtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUyNjg6IFNlYXJjaCBjdXJzZXMuaCBpbiAvdXNyL2luY2x1ZGUvbmN1cnNlc3cuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyNy1KdW4tMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gRml4IGEgKG1vc3QgbGlrZWx5KSB2ZXJ5IHJhcmUgbWVtb3J5IGxlYWsgd2hlbiBjYWxsaW5nIG1haW4oKSBhbmQgbm90IGJlaW5nCisgIGFibGUgdG8gZGVjb2RlIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LgorCistIElzc3VlICMxNDgxNTogVXNlIFB5X3NzaXplX3QgaW5zdGVhZCBvZiBsb25nIGZvciB0aGUgb2JqZWN0IGhhc2gsIHRvCisgIHByZXNlcnZlIGFsbCA2NCBiaXRzIG9mIGhhc2ggb24gV2luNjQuCisKKy0gSXNzdWUgIzEyMjY4OiBGaWxlIHJlYWRsaW5lLCByZWFkbGluZXMgYW5kIHJlYWQoKSBvciByZWFkYWxsKCkgbWV0aG9kcworICBubyBsb25nZXIgbG9zZSBkYXRhIHdoZW4gYW4gdW5kZXJseWluZyByZWFkIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkLgorICBJT0Vycm9yIGlzIG5vIGxvbmdlciByYWlzZWQgZHVlIHRvIGEgcmVhZCBzeXN0ZW0gY2FsbCByZXR1cm5pbmcgRUlOVFIKKyAgZnJvbSB3aXRoaW4gdGhlc2UgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTE2MjY6IEFkZCBfU2l6ZVQgZnVuY3Rpb25zIHRvIHN0YWJsZSBBQkkuCisKKy0gSXNzdWUgIzE1MTQ2OiBBZGQgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE1MTQyOiBGaXggcmVmZXJlbmNlIGxlYWsgd2hlbiBkZWFsbG9jYXRpbmcgaW5zdGFuY2VzIG9mIHR5cGVzCisgIGNyZWF0ZWQgdXNpbmcgUHlUeXBlX0Zyb21TcGVjKCkuCisKKy0gSXNzdWUgIzE1MDQyOiBBZGQgUHlTdGF0ZV9BZGRNb2R1bGUgYW5kIFB5U3RhdGVfUmVtb3ZlTW9kdWxlLiBBZGQgdmVyc2lvbgorICBndWFyZCBmb3IgUHlfTElNSVRFRF9BUEkgYWRkaXRpb25zLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzEwMDUzOiBEb24ndCBjbG9zZSBGRHMgd2hlbiBGaWxlSU8uX19pbml0X18gZmFpbHMuIExvb3NlbHkgYmFzZWQgb24KKyAgdGhlIHdvcmsgYnkgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzE1MDk2OiBSZW1vdmVkIHN1cHBvcnQgZm9yIHVyJycgYXMgdGhlIHJhdyBub3RhdGlvbiBpc24ndAorICBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIueCdzIHJhdyB1bmljb2RlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzNzgzOiBHZW5lcmF0b3Igb2JqZWN0cyBub3cgdXNlIHRoZSBpZGVudGlmaWVyIEFQSXMgaW50ZXJuYWxseQorCistIElzc3VlICMxNDg3NDogUmVzdG9yZSBjaGFybWFwIGRlY29kaW5nIHNwZWVkIHRvIHByZS1QRVAgMzkzIGxldmVscy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUwMjY6IHV0Zi0xNiBlbmNvZGluZyBpcyBub3cgc2lnbmlmaWNhbnRseSBmYXN0ZXIgKHVwIHRvIDEweCkuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzExMDIyOiBvcGVuKCkgYW5kIGlvLlRleHRJT1dyYXBwZXIgYXJlIG5vdyBjYWxsaW5nCisgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkgaW5zdGVhZCBvZiBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKQorICBpbiB0ZXh0IG1vZGUgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIERvbid0IGNoYW5nZSB0ZW1wb3JhcnkgdGhlCisgIGxvY2FsZSBlbmNvZGluZyB1c2luZyBsb2NhbGUuc2V0bG9jYWxlKCksIHVzZSB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcKKyAgaW5zdGVhZCBvZiB0aGUgdXNlciBwcmVmZXJyZWQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE0NjczOiBBZGQgRXJpYyBTbm93J3Mgc3lzLmltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNTAzODogT3B0aW1pemUgcHl0aG9uIExvY2tzIG9uIFdpbmRvd3MuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjOTgwMzogRG9uJ3QgY2xvc2UgSURMRSBvbiBzYXZpbmcgaWYgYnJlYWtwb2ludCBpcyBvcGVuLgorICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTIyODg6IENvbnNpZGVyICcwJyBhbmQgJzAuMCcgYXMgdmFsaWQgaW5pdGlhbHZhbHVlCisgIGZvciB0a2ludGVyIFNpbXBsZURpYWxvZy4KKworLSBJc3N1ZSAjMTU1MTI6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIHBhcnNlci4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0Njk6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIGRlcXVlIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg5OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBCeXRlc0lPIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg3OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBidWZmZXJlZCBJL08gb2JqZWN0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU1MTQ6IENvcnJlY3QgX19zaXplb2ZfXyBzdXBwb3J0IGZvciBjcHVfc2V0LgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE4NzogQnVnZml4OiByZW1vdmUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIHRlc3Rfc2h1dGlsIHdhcyBsZWF2aW5nCisgIGJlaGluZC4KKworLSBJc3N1ZSAjMTUxNzc6IEFkZGVkIGRpcl9mZCBwYXJhbWV0ZXIgdG8gb3MuZndhbGsoKS4KKworLSBJc3N1ZSAjMTUxNzY6IENsYXJpZmllZCBiZWhhdmlvciwgZG9jdW1lbnRhdGlvbiwgYW5kIGltcGxlbWVudGF0aW9uCisgIG9mIG9zLmxpc3RkaXIoKS4KKworLSBJc3N1ZSAjMTUwNjE6IFJlLWltcGxlbWVudGVkIGhtYWMuY29tcGFyZV9kaWdlc3QoKSBpbiBDIHRvIHByZXZlbnQgZnVydGhlcgorICB0aW1pbmcgYW5hbHlzaXMgYW5kIHRvIHN1cHBvcnQgYWxsIGJ1ZmZlciBwcm90b2NvbCBhd2FyZSBvYmplY3RzIGFzIHdlbGwgYXMKKyAgQVNDSUkgb25seSBzdHIgaW5zdGFuY2VzIHNhZmVseS4KKworLSBJc3N1ZSAjMTUxNjQ6IENoYW5nZSByZXR1cm4gdmFsdWUgb2YgcGxhdGZvcm0udW5hbWUoKSBmcm9tIGEKKyAgcGxhaW4gdHVwbGUgdG8gYSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlLgorCistIFN1cHBvcnQgTWFnZWlhIExpbnV4IGluIHRoZSBwbGF0Zm9ybSBtb2R1bGUuCisKKy0gSXNzdWUgIzExNjc4OiBTdXBwb3J0IEFyY2ggbGludXggaW4gdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUxMTg6IENoYW5nZSByZXR1cm4gdmFsdWUgb2Ygb3MudW5hbWUoKSBhbmQgb3MudGltZXMoKSBmcm9tCisgIHBsYWluIHR1cGxlcyB0byBpbW11dGFibGUgaXRlcmFibGUgb2JqZWN0cyB3aXRoIG5hbWVkIGF0dHJpYnV0ZXMKKyAgKHN0cnVjdHNlcSBvYmplY3RzKS4KKworLSBTcGVlZCB1cCBfZGVjaW1hbCBieSBhbm90aGVyIDEwLTE1JSBieSBjYWNoaW5nIHRoZSB0aHJlYWQgbG9jYWwgY29udGV4dAorICB0aGF0IHdhcyBsYXN0IGFjY2Vzc2VkLiBJbiB0aGUgcGkgYmVuY2htYXJrICg2NC1iaXQgcGxhdGZvcm0sIHByZWM9OSksCisgIF9kZWNpbWFsIGlzIG5vdyBvbmx5IDEuNXggc2xvd2VyIHRoYW4gZmxvYXQuCisKKy0gUmVtb3ZlIHRoZSBwYWNrYWdpbmcgbW9kdWxlLCB3aGljaCBpcyBub3QgcmVhZHkgZm9yIHByaW1lIHRpbWUuCisKKy0gSXNzdWUgIzE1MTU0OiBBZGQgImRpcl9mZCIgcGFyYW1ldGVyIHRvIG9zLnJtZGlyLCByZW1vdmUgInJtZGlyIgorICBwYXJhbWV0ZXIgZnJvbSBvcy5yZW1vdmUgLyBvcy51bmxpbmsuCisKKy0gSXNzdWUgIzQ0ODk6IEFkZCBhIHNodXRpbC5ybXRyZWUgdGhhdCBpc24ndCBzdXNjZXB0aWJsZSB0byBzeW1saW5rIGF0dGFja3MuCisgIEl0IGlzIHVzZWQgYXV0b21hdGljYWxseSBvbiBwbGF0Zm9ybXMgc3VwcG9ydGluZyB0aGUgbmVjZXNzYXJ5IG9zLm9wZW5hdCgpCisgIGFuZCBvcy51bmxpbmthdCgpIGZ1bmN0aW9ucy4gTWFpbiBjb2RlIGJ5IE1hcnRpbiB2b24gTMO2d2lzLgorCistIElzc3VlICMxNTE1NjogSFRNTFBhcnNlciBub3cgdXNlcyB0aGUgbmV3ICJodG1sLmVudGl0aWVzLmh0bWw1IiBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxMTExMzogYWRkIGEgbmV3ICJodG1sNSIgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBuYW1lZCBjaGFyYWN0ZXIKKyAgcmVmZXJlbmNlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZCBhbmQgdGhlIGVxdWl2YWxlbnQgVW5pY29kZQorICBjaGFyYWN0ZXIocykgdG8gdGhlIGh0bWwuZW50aXRpZXMgbW9kdWxlLgorCistIElzc3VlICMxNTExNDogdGhlIHN0cmljdCBtb2RlIG9mIEhUTUxQYXJzZXIgYW5kIHRoZSBIVE1MUGFyc2VFcnJvciBleGNlcHRpb24KKyAgYXJlIGRlcHJlY2F0ZWQgbm93IHRoYXQgdGhlIHBhcnNlciBpcyBhYmxlIHRvIHBhcnNlIGludmFsaWQgbWFya3VwLgorCistIElzc3VlICMzNjY1OiBcdSBhbmQgXFUgZXNjYXBlcyBhcmUgbm93IHN1cHBvcnRlZCBpbiB1bmljb2RlIHJlZ3VsYXIKKyAgZXhwcmVzc2lvbnMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE1MzogQWRkZWQgaW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHMgdG8gc2ltcGxpZnkgd2hpdGUgYm94CisgIHRlc3Rpbmcgb2YgZ2VuZXJhdG9yIHN0YXRlIHVwZGF0ZXMKKworLSBJc3N1ZSAjMTMwNjI6IEFkZGVkIGluc3BlY3QuZ2V0Y2xvc3VyZXZhcnMgdG8gc2ltcGxpZnkgdGVzdGluZyBzdGF0ZWZ1bAorICBjbG9zdXJlcworCistIElzc3VlICMxMTAyNDogRml4ZXMgYW5kIGFkZGl0aW9uYWwgdGVzdHMgZm9yIFRpbWUySW50ZXJuYWxkYXRlLgorCistIElzc3VlICMxNDYyNjogTGFyZ2UgcmVmYWN0b3Jpbmcgb2YgZnVuY3Rpb25zIC8gcGFyYW1ldGVycyBpbiB0aGUgb3MgbW9kdWxlLgorICBNYW55IGZ1bmN0aW9ucyBub3cgc3VwcG9ydCAiZGlyX2ZkIiBhbmQgImZvbGxvd19zeW1saW5rcyIgcGFyYW1ldGVyczsKKyAgc29tZSBhbHNvIHN1cHBvcnQgYWNjZXB0aW5nIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGluIHBsYWNlIG9mIGEgcGF0aAorICBzdHJpbmcuICBBZGRlZCBvcy5zdXBwb3J0XyogY29sbGVjdGlvbnMgYXMgTEJZTCBoZWxwZXJzLiAgUmVtb3ZlZCBtYW55CisgIGZ1bmN0aW9ucyBvbmx5IHByZXZpb3VzbHkgc2VlbiBpbiAzLjMgYWxwaGEgcmVsZWFzZXMgKG9mdGVuIHN0YXJ0aW5nIHdpdGgKKyAgImYiIG9yICJsIiwgb3IgZW5kaW5nIHdpdGggImF0IikuICBPcmlnaW5hbGx5IHN1Z2dlc3RlZCBieSBTZXJoaXkgU3RvcmNoYWthOworICBpbXBsZW1lbnRlZCBieSBMYXJyeSBIYXN0aW5ncy4KKworLSBJc3N1ZSAjMTUwMDg6IEltcGxlbWVudCBQRVAgMzYyICJTaWduYXR1cmUgT2JqZWN0cyIuCisgIFBhdGNoIGJ5IFl1cnkgU2VsaXZhbm92LgorCistIElzc3VlOiAjMTUxMzg6IGJhc2U2NC51cmxzYWZlX3tlbixkZX1jb2RlKCkgYXJlIG5vdyAzLTR4IGZhc3Rlci4KKworLSBJc3N1ZSAjNDQ0NTgyOiBBZGQgc2h1dGlsLndoaWNoLCBmb3IgZmluZGluZyBwcm9ncmFtcyBvbiB0aGUgc3lzdGVtIHBhdGguCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgRGVtYWluZSwgd2l0aCBsYXRlciBpdGVyYXRpb25zIGJ5IEphbiBLaWxsaWFuCisgIGFuZCBCcmlhbiBDdXJ0aW4uCisKKy0gSXNzdWUgIzE0ODM3OiBTU0wgZXJyb3JzIG5vdyBoYXZlIGBgbGlicmFyeWBgIGFuZCBgYHJlYXNvbmBgIGF0dHJpYnV0ZXMKKyAgZGVzY3JpYmluZyBwcmVjaXNlbHkgd2hhdCBoYXBwZW5lZCBhbmQgaW4gd2hpY2ggT3BlblNTTCBzdWJtb2R1bGUuICBUaGUKKyAgc3RyKCkgb2YgYSBTU0xFcnJvciBpcyBhbHNvIGVuaGFuY2VkIGFjY29yZGluZ2x5LgorCistIElzc3VlICM5NTI3OiBkYXRldGltZS5hc3RpbWV6b25lKCkgbWV0aG9kIHdpbGwgbm93IHN1cHBseSBhIGNsYXNzCisgIHRpbWV6b25lIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5c3RlbSBsb2NhbCB0aW1lem9uZSB3aGVuCisgIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTQ2NTM6IGVtYWlsLnV0aWxzLm1rdGltZV90eigpIG5vIGxvbmdlciByZWxpZXMgb24gc3lzdGVtCisgIG1rdGltZSgpIHdoZW4gdGltZXpvbmUgb2ZmZXN0IGlzIHN1cHBsaWVkLgorCistIElzc3VlICMxNDY4NDogemxpYi5jb21wcmVzc29iaigpIGFuZCB6bGliLmRlY29tcHJlc3NvYmooKSBub3cgc3VwcG9ydCB0aGUgdXNlCisgIG9mIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyaWVzLiBPcmlnaW5hbCBwYXRjaCBieSBTYW0gUnVzaGluZy4KKworLSBGaXggR3ppcEZpbGUncyBoYW5kbGluZyBvZiBmaWxlbmFtZXMgZ2l2ZW4gYXMgYnl0ZXMgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ3NzI6IFJldHVybiBkZXN0aW5hdGlvbiB2YWx1ZXMgZnJvbSBzb21lIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MDY0OiBJbXBsZW1lbnQgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIGZvciBtdWx0aXByb2Nlc3NpbmcgdHlwZXMKKworLSBJc3N1ZSAjMTUxMDE6IE1ha2UgcG9vbCBmaW5hbGl6ZXIgYXZvaWQgam9pbmluZyBjdXJyZW50IHRocmVhZC4KKworLSBJc3N1ZSAjMTQ2NTc6IFRoZSBmcm96ZW4gaW5zdGFuY2Ugb2YgaW1wb3J0bGliIHVzZWQgZm9yIGJvb3RzdHJhcCBpcyBub3cKKyAgYWxzbyB0aGUgbW9kdWxlIGltcG9ydGVkIGFzIGltcG9ydGxpYi5fYm9vdHN0cmFwLgorCistIElzc3VlICMxNDA1NTogQWRkIF9fc2l6ZW9mX18gc3VwcG9ydCB0byBfZWxlbWVudHRyZWUuCisKKy0gSXNzdWUgIzE1MDU0OiBBIGJ1ZyBpbiB0b2tlbml6ZS50b2tlbml6ZSB0aGF0IGNhdXNlZCBzdHJpbmcgbGl0ZXJhbHMKKyAgd2l0aCAnYicgcHJlZml4ZXMgdG8gYmUgaW5jb3JyZWN0bHkgdG9rZW5pemVkIGhhcyBiZWVuIGZpeGVkLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTAwNjogQWxsb3cgZXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIG5haXZlIGFuZCBhd2FyZQorICB0aW1lIG9yIGRhdGV0aW1lIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0OTgyOiBEb2N1bWVudCB0aGF0IHBrZ3V0aWwncyBpdGVyYXRpb24gZnVuY3Rpb25zIHJlcXVpcmUgdGhlCisgIG5vbi1zdGFuZGFyZCBpdGVyX21vZHVsZXMoKSBtZXRob2QgdG8gYmUgZGVmaW5lZCBieSBhbiBpbXBvcnRlciAoc29tZXRoaW5nCisgIHRoZSBpbXBvcnRsaWIgaW1wb3J0ZXJzIGRvIG5vdCBkZWZpbmUpLgorCistIElzc3VlICMxNTAzNjogTWFpbGJveCBubyBsb25nZXIgdGhyb3dzIGFuIGVycm9yIGlmIGEgZmx1c2ggaXMgZG9uZQorICBiZXR3ZWVuIG9wZXJhdGlvbnMgd2hlbiByZW1vdmluZyBvciBjaGFuZ2luZyBtdWx0aXBsZSBpdGVtcyBpbiBtYm94LAorICBNTURGLCBvciBCYWJ5bCBtYWlsYm94ZXMuCisKKy0gSXNzdWUgIzE0MDU5OiBJbXBsZW1lbnQgbXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIuCisKKy0gSXNzdWUgIzE1MDYxOiBUaGUgaW5hcHByb3ByaWF0ZWx5IG5hbWVkIGhtYWMuc2VjdXJlX2NvbXBhcmUgaGFzIGJlZW4KKyAgcmVuYW1lZCB0byBobWFjLmNvbXBhcmVfZGlnZXN0LCByZXN0cmljdGVkIHRvIG9wZXJhdGluZyBvbiBieXRlcyBpbnB1dHMKKyAgb25seSBhbmQgaGFkIGl0cyBkb2N1bWVudGF0aW9uIHVwZGF0ZWQgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgYm90aCBpdHMKKyAgaW50ZW50IGFuZCBpdHMgbGltaXRhdGlvbnMKKworLSBJc3N1ZSAjMTM4NDE6IE1ha2UgY2hpbGQgcHJvY2Vzc2VzIGV4aXQgdXNpbmcgc3lzLmV4aXQoKSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNDkzNjogY3Vyc2VzX3BhbmVsIHdhcyBjb252ZXJ0ZWQgdG8gUEVQIDMxMjEgYW5kIFBFUCAzODQgQVBJLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE2Njc1NDY6IE9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRtX3pvbmUgYW5kIHRtX2dtdG9mZiBmaWVsZHMKKyAgaW4gc3RydWN0IHRtLCB0aW1lLnN0cnVjdF90aW1lIG9iamVjdHMgcmV0dXJuZWQgYnkgdGltZS5nbXRpbWUoKSwKKyAgdGltZS5sb2NhbHRpbWUoKSBhbmQgdGltZS5zdHJwdGltZSgpIGZ1bmN0aW9ucyBub3cgaGF2ZSB0bV96b25lIGFuZAorICB0bV9nbXRvZmYgYXR0cmlidXRlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFBhdWwgQm9kZGllLgorCistIFJlbmFtZSBhZGp1c3RlZCBhdHRyaWJ1dGUgdG8gYWRqdXN0YWJsZSBpbiB0aW1lLmdldF9jbG9ja19pbmZvKCkgcmVzdWx0LgorCistIElzc3VlICMzNTE4OiBSZW1vdmUgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgQmFzZU1hbmFnZXIuZnJvbV9hZGRyZXNzKCkKKyAgbWV0aG9kLgorCistIElzc3VlICMxMzg1NzogQWRkZWQgdGV4dHdyYXAuaW5kZW50KCkgZnVuY3Rpb24gKGluaXRpYWwgcGF0Y2ggYnkgRXpyYQorICBCZXJjaCkKKworLSBJc3N1ZSAjMjczNjogQWRkZWQgZGF0ZXRpbWUudGltZXN0YW1wKCkgbWV0aG9kLgorCistIElzc3VlICMxMzg1NDogTWFrZSBtdWx0aXByb2Nlc3NpbmcgcHJvcGVybHkgaGFuZGxlIG5vbi1pbnRlZ2VyCisgIG5vbi1zdHJpbmcgYXJndW1lbnQgdG8gU3lzdGVtRXhpdC4KKworLSBJc3N1ZSAjMTIxNTc6IE1ha2UgcG9vbC5tYXAoKSBlbXB0eSBpdGVyYWJsZXMgY29ycmVjdGx5LiAgSW5pdGlhbAorICBwYXRjaCBieSBtb3VhZC4KKworLSBJc3N1ZSAjMTE4MjM6IGRpc2Fzc2VtYmx5IG5vdyBzaG93cyBhcmd1bWVudCBjb3VudHMgb24gY2FsbHMgd2l0aCBrZXl3b3JkIGFyZ3MuCisKKy0gSXNzdWUgIzE0NzExOiBvcy5zdGF0X2Zsb2F0X3RpbWVzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4KKworLSBMWk1BRmlsZSBub3cgYWNjZXB0cyB0aGUgbW9kZXMgInJiIi8id2IiLyJhYiIgYXMgc3lub255bXMgb2YgInIiLyJ3Ii8iYSIuCisKKy0gVGhlIGJ6MiBhbmQgbHptYSBtb2R1bGVzIG5vdyBlYWNoIGNvbnRhaW4gYW4gb3BlbigpIGZ1bmN0aW9uLCBhbGxvd2luZworICBjb21wcmVzc2VkIGZpbGVzIHRvIHJlYWRpbHkgYmUgb3BlbmVkIGluIHRleHQgbW9kZSBhcyB3ZWxsIGFzIGJpbmFyeSBtb2RlLgorCistIEJaMkZpbGUuX19pbml0X18oKSBhbmQgTFpNQUZpbGUuX19pbml0X18oKSBub3cgYWNjZXB0IGEgZmlsZSBvYmplY3QgYXMgdGhlaXIKKyAgZmlyc3QgYXJndW1lbnQsIHJhdGhlciB0aGFuIHJlcXVpcmluZyBhIHNlcGFyYXRlICJmaWxlb2JqIiBhcmd1bWVudC4KKworLSBnemlwLm9wZW4oKSBub3cgYWNjZXB0cyBmaWxlIG9iamVjdHMgYXMgd2VsbCBhcyBmaWxlbmFtZXMuCisKKy0gSXNzdWUgIzE0OTkyOiBvcy5tYWtlZGlycyhwYXRoLCBleGlzdF9vaz1UcnVlKSB3b3VsZCByYWlzZSBhbiBPU0Vycm9yCisgIHdoZW4gdGhlIHBhdGggZXhpc3RlZCBhbmQgaGFkIHRoZSBTX0lTR0lEIG1vZGUgYml0IHNldCB3aGVuIGl0IHdhcworICBub3QgZXhwbGljaXRseSBhc2tlZCBmb3IuICBUaGlzIGlzIG5vIGxvbmdlciBhbiBleGNlcHRpb24gYXMgbWtkaXIKKyAgY2Fubm90IGNvbnRyb2wgaWYgdGhlIE9TIHNldHMgdGhhdCBiaXQgZm9yIGl0IG9yIG5vdC4KKworLSBJc3N1ZSAjMTQ5ODk6IE1ha2UgdGhlIENHSSBlbmFibGUgb3B0aW9uIHRvIGh0dHAuc2VydmVyIGF2YWlsYWJsZSB2aWEgY29tbWFuZAorICBsaW5lLgorCistIElzc3VlICMxNDk4NzogQWRkIGEgbWlzc2luZyBpbXBvcnQgc3RhdGVtZW50IHRvIGluc3BlY3QuCisKKy0gSXNzdWUgIzEwNzk6IGVtYWlsLmhlYWRlci5kZWNvZGVfaGVhZGVyIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGFsbCB0aGUgZXhhbXBsZXMKKyAgaW4gUkZDMjA0Ny4gIFRoZXJlIGlzIGEgbmVjZXNzYXJ5IHZpc2libGUgYmVoYXZpb3IgY2hhbmdlOiB0aGUgbGVhZGluZyBhbmQvb3IKKyAgdHJhaWxpbmcgd2hpdGVzcGFjZSBvbiBBU0NJSSBwYXJ0cyBpcyBub3cgcHJlc2VydmVkLgorCistIElzc3VlICMxNDk2OTogQmV0dGVyIGhhbmRsaW5nIG9mIGV4Y2VwdGlvbiBjaGFpbmluZyBpbiBjb250ZXh0bGliLkV4aXRTdGFjaworCistIElzc3VlICMxNDk2MjogVXBkYXRlIHRleHQgY29sb3JpbmcgaW4gSURMRSBzaGVsbCB3aW5kb3cgYWZ0ZXIgY2hhbmdpbmcKKyAgb3B0aW9ucy4gIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNDk2MzogQ29udmVydCBjb250ZXh0bGliLkV4aXRTdGFjay5fX2V4aXRfXyB0byB1c2UgYW4gaXRlcmF0aXZlCisgIGFsZ29yaXRobSAoUGF0Y2ggYnkgQWxvbiBIb3JldikKKworLSBJc3N1ZSAjMTQ3ODU6IEFkZCBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSB0byBoZWxwIGRlYnVnIGxvdy1sZXZlbCBtZW1vcnkKKyAgYWxsb2NhdGlvbiBpc3N1ZXMKKworLSBJc3N1ZSAjMTQ0NDM6IEVuc3VyZSB0aGF0IC5weSBmaWxlcyBhcmUgYnl0ZS1jb21waWxlZCB3aXRoIHRoZSBjb3JyZWN0IFB5dGhvbgorICBleGVjdXRhYmxlIHdpdGhpbiBiZGlzdF9ycG0gZXZlbiBvbiBvbGRlciB2ZXJzaW9ucyBvZiBSUE0KKworQy1BUEkKKy0tLS0tCisKKy0gSXNzdWUgIzEzNzgzOiBJbmFkdmVydGVudCBhZGRpdGlvbnMgdG8gdGhlIHB1YmxpYyBDIEFQSSBpbiB0aGUgUEVQIDM4MAorICBpbXBsZW1lbnRhdGlvbiBoYXZlIGVpdGhlciBiZWVuIHJlbW92ZWQgb3IgbWFya2VkIGFzIHByaXZhdGUgaW50ZXJmYWNlcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1MDAwOiBTdXBwb3J0IHRoZSAidW5pcXVlIiB4MzIgYXJjaGl0ZWN0dXJlIGluIF9wb3NpeHN1YnByb2Nlc3MuYy4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTA4MTogRG9jdW1lbnQgUHlTdGF0ZV9GaW5kTW9kdWxlLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODE0OiBBZGRlZCBmaXJzdCBkcmFmdCBvZiBpcGFkZHJlc3MgbW9kdWxlIEFQSSByZWZlcmVuY2UKKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE0NzY5OiB0ZXN0X2NhcGkgbm93IGhhcyBTa2lwaXRlbVRlc3QsIHdoaWNoIGNsZXZlcmx5IGNoZWNrcworICBmb3IgInBhcml0eSIgYmV0d2VlbiBQeUFyZ19QYXJzZVR1cGxlKCkgYW5kIHRoZSBQeXRob24vZ2V0YXJncy5jIHN0YXRpYworICBmdW5jdGlvbiBza2lwaXRlbSgpIGZvciBhbGwgcG9zc2libGUgImZvcm1hdCB1bml0cyIuCisKKy0gdGVzdF9ubnRwbGliIG5vdyB0b2xlcmF0ZXMgYmVpbmcgcnVuIGZyb20gYmVoaW5kIE5OVFAgZ2F0ZXdheXMgdGhhdCBhZGQKKyAgIlgtQW50aXZpcnVzIiBoZWFkZXJzIHRvIGFydGljbGVzCisKKy0gSXNzdWUgIzE1MDQzOiB0ZXN0X2dkYiBpcyBub3cgc2tpcHBlZCBlbnRpcmVseSBpZiBnZGIgc2VjdXJpdHkgc2V0dGluZ3MKKyAgYmxvY2sgbG9hZGluZyBvZiB0aGUgZ2RiIGhvb2tzCisKKy0gSXNzdWUgIzE0OTYzOiBBZGQgdGVzdCBjYXNlcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nIGJlaGF2aW91cgorICBpbiBjb250ZXh0bGliLkV4aXRTdGFjayAoSW5pdGlhbCBwYXRjaCBieSBBbG9uIEhvcmV2KQorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTM1OTA6IEltcHJvdmUgc3VwcG9ydCBmb3IgT1MgWCBYY29kZSA0OgorICAgICogVHJ5IHRvIGF2b2lkIGJ1aWxkaW5nIFB5dGhvbiBvciBleHRlbnNpb24gbW9kdWxlcyB3aXRoIHByb2JsZW1hdGljCisgICAgICBsbHZtLWdjYyBjb21waWxlci4KKyAgICAqIFNpbmNlIFhjb2RlIDQgcmVtb3ZlcyBwcGMgc3VwcG9ydCwgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgbm93CisgICAgICBjaGVjayBmb3IgcHBjIGNvbXBpbGVyIHN1cHBvcnQgYW5kIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBwYyBhbmQKKyAgICAgIHBwYzY0IGFyY2hzIHdoZW4gbm90IGF2YWlsYWJsZS4KKyAgICAqIFNpbmNlIFhjb2RlIDQgbm8gbG9uZ2VyIGluc3RhbGwgU0RLcyBpbiBkZWZhdWx0IGxvY2F0aW9ucywKKyAgICAgIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIG5vdyByZXZlcnQgdG8gdXNpbmcgaW5zdGFsbGVkIGhlYWRlcnMKKyAgICAgIGFuZCBsaWJzIGlmIHRoZSBTREsgdXNlZCB0byBidWlsZCB0aGUgaW50ZXJwcmV0ZXIgaXMgbm90CisgICAgICBhdmFpbGFibGUuCisgICAgKiBVcGRhdGUgLi9jb25maWd1cmUgdG8gdXNlIGJldHRlciBkZWZhdWx0cyBmb3IgdW5pdmVyc2FsIGJ1aWxkczsKKyAgICAgIGluIHBhcnRpY3VsYXIsIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz15ZXMgdXNlcyB0aGUgWGNvZGUgZGVmYXVsdAorICAgICAgU0RLIGFuZCAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIG5vdyBkZWZhdWx0cyB0byAiaW50ZWwiIGlmIHBwYworICAgICAgbm90IGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTQyMjU6IEZpeCBVbmljb2RlIHN1cHBvcnQgZm9yIGN1cnNlcyAoIzEyNTY3KSBvbiBPUyBYCisKKy0gSXNzdWUgIzE0OTI4OiBGaXggaW1wb3J0bGliIGJvb3RzdHJhcCBpc3N1ZXMgYnkgdXNpbmcgYSBjdXN0b20gZXhlY3V0YWJsZQorICAoTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYikgdG8gYnVpbGQgUHl0aG9uL2ltcG9ydGxpYi5oLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDQ/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAzMS1NYXktMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0ODM1OiBNYWtlIHBsaXN0bGliIG91dHB1dCBlbXB0eSBhcnJheXMgJiBkaWN0cyBsaWtlIE9TIFguCisgIFBhdGNoIGJ5IFNpZG5leSBTYW4gTWFydMOtbi4KKworLSBJc3N1ZSAjMTQ3NDQ6IFVzZSB0aGUgbmV3IF9QeVVuaWNvZGVXcml0ZXIgaW50ZXJuYWwgQVBJIHRvIHNwZWVkIHVwCisgIHN0ciVhcmdzIGFuZCBzdHIuZm9ybWF0KGFyZ3MpLgorCistIElzc3VlICMxNDkzMDogTWFrZSBtZW1vcnl2aWV3IG9iamVjdHMgd2Vha3JlZmFibGUuCisKKy0gSXNzdWUgIzE0Nzc1OiBGaXggYSBwb3RlbnRpYWwgcXVhZHJhdGljIGRpY3QgYnVpbGQtdXAgZHVlIHRvIHRoZSBnYXJiYWdlCisgIGNvbGxlY3RvciByZXBlYXRlZGx5IHRyeWluZyB0byB1bnRyYWNrIGRpY3RzLgorCistIElzc3VlICMxNDg1NzogZml4IHJlZ3Jlc3Npb24gaW4gcmVmZXJlbmNlcyB0byBQRVAgMzEzNSBpbXBsaWNpdCBfX2NsYXNzX18KKyAgY2xvc3VyZSB2YXJpYWJsZSAoUmVvcGVucyBpc3N1ZSAjMTIzNzApCisKKy0gSXNzdWUgIzE0NzEyIChQRVAgNDA1KTogVmlydHVhbCBlbnZpcm9ubWVudHMuIEltcGxlbWVudGVkIGJ5IFZpbmF5IFNhamlwLgorCistIElzc3VlICMxNDY2MCAoUEVQIDQyMCk6IE5hbWVzcGFjZSBwYWNrYWdlcy4gSW1wbGVtZW50ZWQgYnkgRXJpYyBTbWl0aC4KKworLSBJc3N1ZSAjMTQ0OTQ6IEZpeCBfX2Z1dHVyZV9fLnB5IGFuZCBpdHMgZG9jdW1lbnRhdGlvbiB0byBub3RlIHRoYXQKKyAgYWJzb2x1dGUgaW1wb3J0cyBhcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaW4gMy4wIGluc3RlYWQgb2YgMi43LgorICBQYXRjaCBieSBTdmVuIE1hcm5hY2guCisKKy0gSXNzdWUgIzkyNjA6IEEgZmluZXItZ3JhaW5lZCBpbXBvcnQgbG9jay4gIE1vc3Qgb2YgdGhlIGltcG9ydCBzZXF1ZW5jZQorICBub3cgdXNlcyBwZXItbW9kdWxlIGxvY2tzIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgaW1wb3J0IGxvY2ssIGVsaW1pbmF0aW5nCisgIHdlbGwta25vd24gaXNzdWVzIHdpdGggdGhyZWFkcyBhbmQgaW1wb3J0cy4KKworLSBJc3N1ZSAjMTQ2MjQ6IFVURi0xNiBkZWNvZGluZyBpcyBub3cgM3ggdG8gNHggZmFzdGVyIG9uIHZhcmlvdXMgaW5wdXRzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIGFzZGxfc2VxIGFuZCBhc2RsX2ludF9zZXEgYXJlIG5vdyBQeV9zc2l6ZV90IHNpemVkLgorCistIElzc3VlICMxNDEzMyAoUEVQIDQxNSk6IEltcGxlbWVudCBzdXBwcmVzc2lvbiBvZiBfX2NvbnRleHRfXyBkaXNwbGF5IHdpdGggYW4KKyAgYXR0cmlidXRlIG9uIEJhc2VFeGNlcHRpb24uIFRoaXMgcmVwbGFjZXMgdGhlIG9yaWdpbmFsIG1lY2hhbmlzbSBvZiBQRVAgNDA5LgorCistIElzc3VlICMxNDQxNzogTXV0YXRpbmcgYSBkaWN0IGR1cmluZyBsb29rdXAgbm93IHJlc3RhcnRzIHRoZSBsb29rdXAgaW5zdGVhZAorICBvZiByYWlzaW5nIGEgUnVudGltZUVycm9yICh1bmRvZXMgaXNzdWUgIzE0MjA1KS4KKworLSBJc3N1ZSAjMTQ3Mzg6IFNwZWVkLXVwIFVURi04IGRlY29kaW5nIG9uIG5vbi1BU0NJSSBkYXRhLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQ3MDA6IEZpeCB0d28gYnJva2VuIGFuZCB1bmRlZmluZWQtYmVoYXZpb3VyLWluZHVjaW5nIG92ZXJmbG93IGNoZWNrcworICBpbiBvbGQtc3R5bGUgc3RyaW5nIGZvcm1hdHRpbmcuCisKKy0gSXNzdWUgIzE0NzA1OiBUaGUgUHlBcmdfUGFyc2UoKSBmYW1pbHkgb2YgZnVuY3Rpb25zIG5vdyBzdXBwb3J0IHRoZSAncCcgZm9ybWF0CisgIHVuaXQsIHdoaWNoIGFjY2VwdHMgYSAiYm9vbGVhbiBwcmVkaWNhdGUiIGFyZ3VtZW50LiAgSXQgY29udmVydHMgYW55IFB5dGhvbgorICB2YWx1ZSBpbnRvIGFuIGludGVnZXItLTAgaWYgaXQgaXMgImZhbHNlIiwgYW5kIDEgb3RoZXJ3aXNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0NjkwOiBVc2UgbW9ub3RvbmljIGNsb2NrIGluc3RlYWQgb2Ygc3lzdGVtIGNsb2NrIGluIHRoZSBzY2hlZCwKKyAgc3VicHJvY2VzcyBhbmQgdHJhY2UgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTQ5NTg6IENoYW5nZSBJRExFIHN5c3RheCBoaWdobGlnaHRpbmcgdG8gcmVjb2duaXplIGFsbCBzdHJpbmcgYW5kCisgIGJ5dGUgbGl0ZXJhbHMgc3VwcG9ydGVkIGluIFB5dGhvbiAzLjMuCisKKy0gSXNzdWUgIzEwOTk3OiBQcmV2ZW50IGEgZHVwbGljYXRlIGVudHJ5IGluIElETEUncyAiUmVjZW50IEZpbGVzIiBtZW51LgorCistIElzc3VlICMxNDQ0MzogVGVsbCBycG1idWlsZCB0byB1c2UgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBQeXRob24gaW4KKyAgYmRpc3RfcnBtLiBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxNDkyOTogU3RvcCBJZGxlIDMueCBmcm9tIGNsb3Npbmcgb24gVW5pY29kZSBkZWNvZGUgZXJyb3JzIHdoZW4KKyAgZ3JlcHBpbmcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjUxNTogZW1haWwgbm93IHJlZ2lzdGVycyBhIGRlZmVjdCBpZiBpdCBnZXRzIHRvIEVPRiB3aGlsZSBwYXJzaW5nCisgIGEgTUlNRSBwYXJ0IHdpdGhvdXQgc2VlaW5nIHRoZSBjbG9zaW5nIE1JTUUgYm91bmRhcnkuCisKKy0gSXNzdWUgIzEyNTEwOiBBdHRlbXB0aW5nIHRvIGdldCBpbnZhbGlkIHRvb2x0aXAgbm8gbG9uZ2VyIGNsb3NlcyBJZGxlLgorICBPdGhlciB0b29sdGlwc3MgaGF2ZSBiZWVuIGNvcnJlY3RlZCBvciBpbXByb3ZlZCBhbmQgdGhlIG51bWJlciBvZiB0ZXN0cworICBoYXMgYmVlbiB0cmlwbGVkLiBPcmlnaW5hbCBwYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTY3MjU2ODogZW1haWwgbm93IGFsd2F5cyBkZWNvZGVzIGJhc2U2NCBwYXlsb2FkcywgYWRkaW5nIHBhZGRpbmcgYW5kCisgIGlnbm9yaW5nIG5vbi1iYXNlNjQtYWxwaGFiZXQgY2hhcmFjdGVycyBpZiBuZWVkZWQsIGFuZCByZWdpc3RlcmluZyBkZWZlY3RzCisgIGZvciBhbnkgc3VjaCBwcm9ibGVtcy4KKworLSBJc3N1ZSAjMTQ5MjU6IGVtYWlsIG5vdyByZWdpc3RlcnMgYSBkZWZlY3Qgd2hlbiB0aGUgcGFyc2VyIGRlY2lkZXMgdGhhdCB0aGVyZQorICBpcyBhIG1pc3NpbmcgaGVhZGVyL2JvZHkgc2VwYXJhdG9yIGxpbmUuICBNYWxmb3JtZWRIZWFkZXJEZWZlY3QsIHdoaWNoIHRoZQorICBleGlzdGluZyBjb2RlIHdvdWxkIG5ldmVyIGFjdHVhbGx5IGdlbmVyYXRlLCBpcyBkZXByZWNhdGVkLgorCistIElzc3VlICMxMDM2NTogRmlsZSBvcGVuIGRpYWxvZyBub3cgd29ya3MgaW5zdGVhZCBvZiBjcmFzaGluZyBldmVuIHdoZW4KKyAgdGhlIHBhcmVudCB3aW5kb3cgaXMgY2xvc2VkIGJlZm9yZSB0aGUgZGlhbG9nLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjODczOTogVXBkYXRlZCBzbXRwZCB0byBzdXBwb3J0IFJGQyA1MzIxLCBhbmQgYWRkZWQgc3VwcG9ydCBmb3IgdGhlCisgIFJGQyAxODcwIFNJWkUgZXh0ZW5zaW9uLgorCistIElzc3VlICM2NjUxOTQ6IEFkZGVkIGEgbG9jYWx0aW1lIGZ1bmN0aW9uIHRvIGVtYWlsLnV0aWxzIHRvIHByb3ZpZGUgYW4KKyAgYXdhcmUgbG9jYWwgZGF0ZXRpbWUgZm9yIHVzZSBpbiBzZXR0aW5nIERhdGUgaGVhZGVycy4KKworLSBJc3N1ZSAjMTI1ODY6IEFkZGVkIG5ldyBwcm92aXNpb25hbCBwb2xpY2llcyB0aGF0IGltcGxlbWVudCBjb252ZW5pZW50CisgIHVuaWNvZGUgc3VwcG9ydCBmb3IgZW1haWwgaGVhZGVycy4gIFNlZSBXaGF0J3MgTmV3IGZvciBkZXRhaWxzLgorCistIElzc3VlICMxNDczMTogUmVmYWN0b3JlZCBlbWFpbCBQb2xpY3kgZnJhbWV3b3JrIHRvIHN1cHBvcnQgZnVsbCBiYWNrd2FyZAorICBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMiBieSBkZWZhdWx0IHlldCBhbGxvdyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZgorICBuZXcgZmVhdHVyZXMgdGhyb3VnaCBuZXcgcG9saWNpZXMuICBOb3RlIHRoYXQgUG9saWN5Lm11c3RfYmVfN2JpdCBpcyByZW5hbWVkCisgIHRvIGN0ZV90eXBlLgorCistIElzc3VlICMxNDg3NjogVXNlIHVzZXItc2VsZWN0ZWQgZm9udCBmb3IgaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24uCisKKy0gSXNzdWUgIzE0OTIwOiBGaXggdGhlIGhlbHAodXJsbGliLnBhcnNlKSBmYWlsdXJlIG9uIGxvY2FsZSBDIG9uIHRlcm1pbmFscy4KKyAgSGF2ZSBhc2NpaSBjaGFyYWN0ZXJzIGluIGhlbHAuCisKKy0gSXNzdWUgIzE0NTQ4OiBNYWtlIG11bHRpcHJvY2Vzc2luZyBmaW5hbGl6ZXJzIGNoZWNrIHBpZCBiZWZvcmUKKyAgcnVubmluZyB0byBjb3BlIHdpdGggcG9zc2liaWxpdHkgb2YgZ2MgcnVubmluZyBqdXN0IGFmdGVyIGZvcmsuCisKKy0gSXNzdWUgIzE0ODYzOiBVcGRhdGUgdGhlIGRvY3VtZW50YXRpb24gb2Ygb3MuZmRvcGVuKCkgdG8gcmVmbGVjdCB0aGUKKyAgZmFjdCB0aGF0IGl0J3Mgb25seSBhIHRoaW4gd3JhcHBlciBhcm91bmQgb3BlbigpIGFueW1vcmUuCisKKy0gSXNzdWUgIzE0MDM2OiBBZGQgYW4gYWRkaXRpb25hbCBjaGVjayB0byB2YWxpZGF0ZSB0aGF0IHBvcnQgaW4gdXJscGFyc2UgZG9lcworICBub3QgZ28gaW4gaWxsZWdhbCByYW5nZSBhbmQgcmV0dXJucyBOb25lLgorCistIElzc3VlICMxNDg2MjogQWRkIG1pc3NpbmcgbmFtZXMgdG8gb3MuX19hbGxfXworCistIElzc3VlICMxNDg3NTogVXNlIGZsb2F0KCdpbmYnKSBpbnN0ZWFkIG9mIGZsb2F0KCcxZTY2NjY2JykgaW4gdGhlIGpzb24gbW9kdWxlLgorCistIElzc3VlICMxMzU4NTogQWRkZWQgY29udGV4dGxpYi5FeGl0U3RhY2sKKworLSBQRVAgMzE0NCwgSXNzdWUgIzE0ODE0OiBBZGRlZCB0aGUgaXBhZGRyZXNzIG1vZHVsZQorCistIElzc3VlICMxNDQyNjogQ29ycmVjdCB0aGUgRGF0ZSBmb3JtYXQgaW4gRXhwaXJlcyBhdHRyaWJ1dGUgb2YgU2V0LUNvb2tpZQorICBIZWFkZXIgaW4gQ29va2llLnB5LgorCistIElzc3VlICMxNDU4ODogVGhlIHR5cGVzIG1vZHVsZSBub3cgcHJvdmlkZSBuZXdfY2xhc3MoKSBhbmQgcHJlcGFyZV9jbGFzcygpCisgIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFBFUCAzMTE1IGNvbXBsaWFudCBkeW5hbWljIGNsYXNzIGNyZWF0aW9uLiBQYXRjaCBieQorICBEYW5pZWwgVXJiYW4gYW5kIE5pY2sgQ29naGxhbi4KKworLSBJc3N1ZSAjMTMxNTI6IEFsbG93IHRvIHNwZWNpZnkgYSBjdXN0b20gdGFic2l6ZSBmb3IgZXhwYW5kaW5nIHRhYnMgaW4KKyAgdGV4dHdyYXAuIFBhdGNoIGJ5IEpvaG4gRmV1ZXJzdGVpbi4KKworLSBJc3N1ZSAjMTQ3MjE6IFNlbmQgdGhlIGNvcnJlY3QgJ0NvbnRlbnQtbGVuZ3RoOiAwJyBoZWFkZXIgd2hlbiB0aGUgYm9keSBpcyBhbgorICBlbXB0eSBzdHJpbmcgJycuIEluaXRpYWwgUGF0Y2ggY29udHJpYnV0ZWQgYnkgQXJ2ZSBLbnVkc2VuLgorCistIElzc3VlICMxNDA3MjogRml4IHBhcnNpbmcgb2YgJ3RlbCcgVVJJcyBpbiB1cmxwYXJzZSBieSBtYWtpbmcgdGhlIGNoZWNrIGZvcgorICBwb3J0cyBzdHJpY3Rlci4KKworLSBJc3N1ZSAjOTM3NDogR2VuZXJpYyBwYXJzaW5nIG9mIHF1ZXJ5IGFuZCBmcmFnbWVudCBwb3J0aW9ucyBvZiB1cmwgZm9yIGFueQorICBzY2hlbWUuIFN1cHBvcnRlZCBib3RoIGJ5IFJGQzM5ODYgYW5kIFJGQzIzOTYuCisKKy0gSXNzdWUgIzE0Nzk4OiBGaXggdGhlIGZ1bmN0aW9ucyBpbiBweWNsYnIgdG8gcmFpc2UgYW4gSW1wb3J0RXJyb3IKKyAgd2hlbiB0aGUgZmlyc3QgcGFydCBvZiBhIGRvdHRlZCBuYW1lIGlzIG5vdCBhIHBhY2thZ2UuIFBhdGNoIGJ5CisgIFhhdmllciBkZSBHYXllLgorCistIElzc3VlICMxMjA5ODogbXVsdGlwcm9jZXNzaW5nIG9uIFdpbmRvd3Mgbm93IHN0YXJ0cyBjaGlsZCBwcm9jZXNzZXMKKyAgdXNpbmcgdGhlIHNhbWUgc3lzLmZsYWdzIGFzIHRoZSBjdXJyZW50IHByb2Nlc3MuICBJbml0aWFsIHBhdGNoIGJ5CisgIFNlcmdleSBNZXplbnRzZXYuCisKKy0gSXNzdWUgIzEzMDMxOiBTbWFsbCBzcGVlZC11cCBmb3IgdGFyZmlsZSB3aGVuIHVuemlwcGluZyB0YXJmaWxlcy4KKyAgUGF0Y2ggYnkgSnVzdGluIFBlZWwuCisKKy0gSXNzdWUgIzE0NzgwOiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCkgbm93IGhhcyBhIGBgY2FkZWZhdWx0YGAgYXJndW1lbnQKKyAgdG8gdXNlIHRoZSBkZWZhdWx0IGNlcnRpZmljYXRlIHN0b3JlLiAgSW5pdGlhbCBwYXRjaCBieSBKYW1lcyBPYWtsZXkuCisKKy0gSXNzdWUgIzE0ODI5OiBGaXggYmlzZWN0IGFuZCByYW5nZSgpIGluZGV4aW5nIHdpdGggbGFyZ2UgaW5kaWNlcworICAoPj0gMiAqKiAzMikgdW5kZXIgNjQtYml0IFdpbmRvd3MuCisKKy0gSXNzdWUgIzE0NzMyOiBUaGUgX2NzdiBtb2R1bGUgbm93IHVzZXMgUEVQIDMxMjEgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODA5OiBBZGQgSFRUUCBzdGF0dXMgY29kZXMgaW50cm9kdWNlZCBieSBSRkMgNjU4NSB0byBodHRwLnNlcnZlcgorICBhbmQgaHR0cC5jbGllbnQuIFBhdGNoIGJ5IEV1bmdKdW4gWWkuCisKKy0gSXNzdWUgIzE0Nzc3OiB0a2ludGVyIG1heSByZXR1cm4gdW5kZWNvZGVkIFVURi04IGJ5dGVzIGFzIGEgc3RyaW5nIHdoZW4KKyAgYWNjZXNzaW5nIHRoZSBUayBjbGlwYm9hcmQuICBNb2RpZnkgY2xpcGJvYWRfZ2V0KCkgdG8gZmlyc3QgcmVxdWVzdCB0eXBlCisgIFVURjhfU1RSSU5HIHdoZW4gbm8gc3BlY2lmaWMgdHlwZSBpcyByZXF1ZXN0ZWQgaW4gYW4gWDExIHdpbmRvd2luZworICBlbnZpcm9ubWVudCwgZmFsbGluZyBiYWNrIHRvIHRoZSBjdXJyZW50IGRlZmF1bHQgdHlwZSBTVFJJTkcgaWYgdGhhdCBmYWlscy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzE0NzczOiBGaXggb3MuZndhbGsoKSBmYWlsaW5nIG9uIGRhbmdsaW5nIHN5bWxpbmtzLgorCistIElzc3VlICMxMjU0MTogQmUgbGVuaWVudCB3aXRoIHF1b3RlcyBhcm91bmQgUmVhbG0gZmllbGQgb2YgSFRUUCBCYXNpYworICBBdXRoZW50YXRpb24gaW4gdXJsbGliMi4KKworLSBJc3N1ZSAjMTQ4MDc6IG1vdmUgdW5kb2N1bWVudGVkIHRhcmZpbGUuZmlsZW1vZGUoKSB0byBzdGF0LmZpbGVtb2RlKCkgYW5kIGFkZAorICBkb2MgZW50cnkuIEFkZCB0YXJmaWxlLmZpbGVtb2RlIGFsaWFzIHdpdGggZGVwcmVjYXRpb24gd2FybmluZy4KKworLSBJc3N1ZSAjMTM4MTU6IFRhckZpbGUuZXh0cmFjdGZpbGUoKSBub3cgcmV0dXJucyBpby5CdWZmZXJlZFJlYWRlciBvYmplY3RzLgorCistIElzc3VlICMxNDUzMjogQWRkIGEgc2VjdXJlX2NvbXBhcmUoKSBoZWxwZXIgdG8gdGhlIGhtYWMgbW9kdWxlLCB0byBtaXRpZ2F0ZQorICB0aW1pbmcgYXR0YWNrcy4gUGF0Y2ggYnkgSm9uIE9iZXJoZWlkZS4KKworLSBBZGQgaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1lKCkuCisKKy0gSXNzdWUgIzE0MzY2OiBTdXBwb3J0IGx6bWEgY29tcHJlc3Npb24gaW4gemlwIGZpbGVzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMzk1OTogSW50cm9kdWNlIGltcG9ydGxpYi5maW5kX2xvYWRlcigpIGFuZCBkb2N1bWVudAorICBpbXAuZmluZF9tb2R1bGUvbG9hZF9tb2R1bGUgYXMgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTQwODI6IHNodXRpbC5jb3B5MigpIG5vdyBjb3BpZXMgZXh0ZW5kZWQgYXR0cmlidXRlcywgaWYgcG9zc2libGUuCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM5NTk6IE1ha2UgaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLmxvYWRfbW9kdWxlKCkvZ2V0X2ZpbGVuYW1lKCkgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5sb2FkX21vZHVsZSgpIGhhdmUgdGhlaXIgc2luZ2xlCisgIGFyZ3VtZW50IGJlIG9wdGlvbmFsLiBBbGxvd3MgZm9yIHRoZSByZXBsYWNlbWVudCAoYW5kIHRodXMgZGVwcmVjYXRpb24pIG9mCisgIGltcC5sb2FkX3NvdXJjZSgpL2xvYWRfcGFja2FnZSgpL2xvYWRfY29tcGlsZWQoKS4KKworLSBJc3N1ZSAjMTM5NTk6IGltcC5nZXRfc3VmZml4ZXMoKSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiB0aGUgbmV3CisgIGF0dHJpYnV0ZXMgb24gaW1wb3J0bGliLm1hY2hpbmVyeTogU09VUkNFX1NVRkZJWEVTLCBERUJVR19CWVRFQ09ERV9TVUZGSVhFUywKKyAgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTLCBCWVRFQ09ERV9TVUZGSVhFUywgYW5kIEVYVEVOU0lPTl9TVUZGSVhFUy4gVGhpcworICBsZWQgdG8gYW4gaW5kaXJlY3QgZGVwcmVjYXRpb24gb2YgaW5zcGVjdC5nZXRtb2R1bGVpbmZvKCkuCisKKy0gSXNzdWUgIzE0NjYyOiBQcmV2ZW50IHNodXRpbCBmYWlsdXJlcyBvbiBPUyBYIHdoZW4gZGVzdGluYXRpb24gZG9lcyBub3QKKyAgc3VwcG9ydCBjaGZsYWcgb3BlcmF0aW9ucy4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTQxNTc6IEZpeCB0aW1lLnN0cnB0aW1lIGZhaWxpbmcgd2l0aG91dCBhIHllYXIgb24gRmVicnVhcnkgMjl0aC4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNDc1MzogTWFrZSBtdWx0aXByb2Nlc3NpbmcncyBoYW5kbGluZyBvZiBuZWdhdGl2ZSB0aW1lb3V0cworICB0aGUgc2FtZSBhcyBpdCB3YXMgaW4gUHl0aG9uIDMuMi4KKworLSBJc3N1ZSAjMTQ1ODM6IEZpeCBpbXBvcnRsaWIgYnVnIHdoZW4gYSBwYWNrYWdlJ3MgX19pbml0X18ucHkgd291bGQgZmlyc3QKKyAgaW1wb3J0IG9uZSBvZiBpdHMgbW9kdWxlcyB0aGVuIHJhaXNlIGFuIGVycm9yLgorCistIElzc3VlICMxNDc0MTogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3IgRWxsaXBzaXMgKCcuLi4nKSBpbiBwYXJzZXIgbW9kdWxlLgorCistIElzc3VlICMxNDY5NzogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3Igc2V0IGRpc3BsYXlzIGFuZCBzZXQgY29tcHJlaGVuc2lvbnMgaW4KKyAgcGFyc2VyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTQ3MDE6IEZpeCBtaXNzaW5nIHN1cHBvcnQgZm9yICdyYWlzZSAuLi4gZnJvbScgaW4gcGFyc2VyIG1vZHVsZS4KKworLSBBZGQgc3VwcG9ydCBmb3IgdGltZW91dHMgdG8gdGhlIGFjcXVpcmUoKSBtZXRob2RzIG9mCisgIG11bHRpcHJvY2Vzc2luZydzIGxvY2svc2VtYXBob3JlL2NvbmRpdGlvbiBwcm94aWVzLgorCistIElzc3VlICMxMzk4OTogQWRkIHN1cHBvcnQgZm9yIHRleHQgbW9kZSB0byBnemlwLm9wZW4oKS4KKworLSBJc3N1ZSAjMTQxMjc6IFRoZSBvcy5zdGF0KCkgcmVzdWx0IG9iamVjdCBub3cgcHJvdmlkZXMgdGhyZWUgYWRkaXRpb25hbAorICBmaWVsZHM6IHN0X2N0aW1lX25zLCBzdF9tdGltZV9ucywgYW5kIHN0X2F0aW1lX25zLCBwcm92aWRpbmcgdGhvc2UgdGltZXMgYXMgYW4KKyAgaW50ZWdlciB3aXRoIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4gIFRoZSBmdW5jdGlvbnMgb3MudXRpbWUoKSwgb3MubHV0aW1lcygpLAorICBhbmQgb3MuZnV0aW1lcygpIG5vdyBhY2NlcHQgYSBuZXcgcGFyYW1ldGVyLCBucywgd2hpY2ggYWNjZXB0cyBtdGltZSBhbmQgYXRpbWUKKyAgYXMgaW50ZWdlcnMgd2l0aCBuYW5vc2Vjb25kIHJlc29sdXRpb24uCisKKy0gSXNzdWUgIzE0MTI3IGFuZCAjMTAxNDg6IHNodXRpbC5jb3B5c3RhdCBub3cgcHJlc2VydmVzIGV4YWN0IG10aW1lIGFuZCBhdGltZQorICBvbiBmaWxlc3lzdGVtcyBwcm92aWRpbmcgbmFub3NlY29uZCByZXNvbHV0aW9uLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTU6IEJyaW5nIFRvb2xzL3BhcnNlci91bnBhcnNlLnB5IHN1cHBvcnQgdXAgdG8gZGF0ZSB3aXRoCisgIHRoZSBQeXRob24gMy4zIEdyYW1tYXIuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNDQ3MjogVXBkYXRlIC5naXRpZ25vcmUuIFBhdGNoIGJ5IE1hdGVqIENlcGwuCisKKy0gVXBncmFkZSBXaW5kb3dzIGxpYnJhcnkgdmVyc2lvbnM6IGJ6aXAgMS4wLjYsIE9wZW5TU0wgMS4wLjFjLgorCistIElzc3VlICMxNDY5MzogVW5kZXIgbm9uLVdpbmRvd3MgcGxhdGZvcm1zLCBoYXNobGliJ3MgZmFsbGJhY2sgbW9kdWxlcyBhcmUKKyAgYWx3YXlzIGNvbXBpbGVkLCBldmVuIGlmIE9wZW5TU0wgaXMgcHJlc2VudCBhdCBidWlsZCB0aW1lLgorCistIElzc3VlICMxMzIxMDogV2luZG93cyBidWlsZCBub3cgdXNlcyBWUzIwMTAsIHBvcnRlZCBmcm9tIFZTMjAwOC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDU4ODogVGhlIGxhbmd1YWdlIHJlZmVyZW5jZSBub3cgYWNjdXJhdGVseSBkb2N1bWVudHMgdGhlIFB5dGhvbiAzCisgIGNsYXNzIGRlZmluaXRpb24gcHJvY2Vzcy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLgorCistIElzc3VlICMxNDk0MzogQ29ycmVjdCBhIGRlZmF1bHQgYXJndW1lbnQgdmFsdWUgZm9yIHdpbnJlZy5PcGVuS2V5CisgIGFuZCBjb3JyZWN0bHkgbGlzdCB0aGUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgZXhwbGFuYXRpb24uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDAxLU1heS0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTk6IEZpeCBjYWxsaW5nIHRoZSBjbGFzc21ldGhvZCBkZXNjcmlwdG9yIGRpcmVjdGx5LgorCistIElzc3VlICMxNDQzMzogUHJldmVudCBtc3ZjcnQgY3Jhc2ggaW4gaW50ZXJhY3RpdmUgcHJvbXB0IHdoZW4gc3RkaW4gaXMgY2xvc2VkLgorCistIElzc3VlICMxNDUyMTogTWFrZSByZXN1bHQgb2YgZmxvYXQoJ25hbicpIGFuZCBmbG9hdCgnLW5hbicpIG1vcmUgY29uc2lzdGVudAorICBhY3Jvc3MgcGxhdGZvcm1zLgorCistIElzc3VlICMxNDY0NjogX19pbXBvcnRfXygpIHNldHMgX19sb2FkZXJfXyBpZiB0aGUgbG9hZGVyIGRpZCBub3QuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5tZXRhX3BhdGguIElmCisgIHN5cy5tZXRhX3BhdGggaXMgZm91bmQgdG8gYmUgZW1wdHksIHJhaXNlIEltcG9ydFdhcm5pbmcuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5wYXRoX2hvb2tzLiBJZgorICBzeXMucGF0aF9ob29rcyBpcyBmb3VuZCB0byBiZSBlbXB0eSwgYSB3YXJuaW5nIHdpbGwgYmUgcmFpc2VkLiBOb25lIGlzIG5vdworICBpbnNlcnRlZCBpbnRvIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlmIG5vIGZpbmRlciB3YXMgZGlzY292ZXJlZC4gVGhpcyBhbHNvCisgIG1lYW5zIGltcC5OdWxsSW1wb3J0ZXIgaXMgbm8gbG9uZ2VyIGltcGxpY2l0bHkgdXNlZC4KKworLSBJc3N1ZSAjMTM5MDM6IEltcGxlbWVudCBQRVAgNDEyLiBJbmRpdmlkdWFsIGRpY3Rpb25hcnkgaW5zdGFuY2VzIGNhbiBub3cgc2hhcmUKKyAgdGhlaXIga2V5cyB3aXRoIG90aGVyIGRpY3Rpb25hcmllcy4gQ2xhc3NlcyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIHRvIHNoYXJlCisgIHRoZWlyIGluc3RhbmNlIGRpY3Rpb25hcnkga2V5cyBmb3IgaW1wcm92ZWQgbWVtb3J5IGFuZCBwZXJmb3JtYW5jZS4KKworLSBJc3N1ZSAjMTE2MDMgKGFnYWluKTogU2V0dGluZyBfX3JlcHJfXyB0byBfX3N0cl9fIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IKKyAgd2hlbiByZXByKCkgb3Igc3RyKCkgaXMgY2FsbGVkIG9uIHN1Y2ggYW4gb2JqZWN0LgorCistIElzc3VlICMxNDY1ODogRml4IGJpbmRpbmcgYSBzcGVjaWFsIG1ldGhvZCB0byBhIGJ1aWx0aW4gaW1wbGVtZW50YXRpb24gb2YgYQorICBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCisKKy0gSXNzdWUgIzE0NjMwOiBGaXggYSBtZW1vcnkgYWNjZXNzIGJ1ZyBmb3IgaW5zdGFuY2VzIG9mIGEgc3ViY2xhc3Mgb2YgaW50CisgIHdpdGggdmFsdWUgMC4KKworLSBJc3N1ZSAjMTQzMzk6IFNwZWVkIGltcHJvdmVtZW50cyB0byBiaW4sIG9jdCBhbmQgaGV4IGZ1bmN0aW9ucy4gIFBhdGNoIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0MDk4OiBOZXcgZnVuY3Rpb25zIFB5RXJyX0dldEV4Y0luZm8gYW5kIFB5RXJyX1NldEV4Y0luZm8uCisgIFBhdGNoIGJ5IFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzE0Mzg1OiBJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIHR5cGUgZm9yIHRoZSBfX2J1aWx0aW5zX18KKyAgbmFtZXNwYWNlLCBpbnN0ZWFkIG9mIGEgZGljdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHNhbmRib3hpbmcgZm9yIGV4YW1wbGUuCisgIFJhaXNlIGFsc28gYSBOYW1lRXJyb3IgaW5zdGVhZCBvZiBJbXBvcnRFcnJvciBpZiBfX2J1aWxkX2NsYXNzX18gbmFtZSBpZiBub3QKKyAgZm91bmQgaW4gX19idWlsdGluc19fLgorCistIElzc3VlICMxMjU5OTogQmUgbW9yZSBzdHJpY3QgaW4gYWNjZXB0aW5nIE5vbmUgY29tcGFyZWQgdG8gYSBmYWxzZS1saWtlCisgIG9iamVjdCBmb3IgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci4KKworLSBJc3N1ZSAjMTQ2MTI6IEZpeCBqdW1waW5nIGFyb3VuZCB3aXRoIGJsb2NrcyBieSBzZXR0aW5nIGZfbGluZW5vLgorCistIElzc3VlICMxNDU5MjogQXR0ZW1wdGluZyBhIHJlbGF0aXZlIGltcG9ydCB3L28gX19wYWNrYWdlX18gb3IgX19uYW1lX18gc2V0IGluCisgIGdsb2JhbHMgcmFpc2VzIGEgS2V5RXJyb3IuCisKKy0gSXNzdWUgIzE0NjA3OiBGaXgga2V5d29yZC1vbmx5IGFyZ3VtZW50cyB3aGljaCBzdGFydGVkIHdpdGggYGBfX2BgLgorCistIElzc3VlICMxMDg1NDogVGhlIEltcG9ydEVycm9yIHJhaXNlZCB3aGVuIGFuIGV4dGVuc2lvbiBtb2R1bGUgb24gV2luZG93cworICBmYWlscyB0byBpbXBvcnQgbm93IHVzZXMgdGhlIG5ldyBwYXRoIGFuZCBuYW1lIGF0dHJpYnV0ZXMgZnJvbQorICBJc3N1ZSAjMTU1OTU0OS4KKworLSBJc3N1ZSAjMTM4ODk6IENoZWNrIGFuZCAoaWYgbmVjZXNzYXJ5KSBzZXQgRlBVIGNvbnRyb2wgd29yZCBiZWZvcmUgY2FsbGluZworICBhbnkgb2YgdGhlIGR0b2EuYyBzdHJpbmcgPC0+IGZsb2F0IGNvbnZlcnNpb24gZnVuY3Rpb25zLCBvbiBNU1ZDIGJ1aWxkcyBvZgorICBQeXRob24uICBUaGlzIGZpeGVzIGlzc3VlcyB3aGVuIGVtYmVkZGluZyBQeXRob24gaW4gYSBEZWxwaGkgYXBwLgorCistIF9faW1wb3J0X18oKSBub3cgbWF0Y2hlcyBQRVAgMzI4IGFuZCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHRpbmcgJ2luZGV4JyB0byAwCisgIGluc3RlYWQgb2YgLTEgYW5kIHJlbW92aW5nIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKworLSBJc3N1ZSAjMjM3NzogTWFrZSBpbXBvcnRsaWIgdGhlIGltcGxlbWVudGF0aW9uIG9mIF9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1OTU0OTogSW1wb3J0RXJyb3Igbm93IGhhcyAnbmFtZScgYW5kICdwYXRoJyBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNldAorICB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cyB0byBpdHMgY29uc3RydWN0b3IuIFRoZXkgYXJlIGN1cnJlbnRseSBub3Qgc2V0IGJ5CisgIGltcG9ydCBhcyB0aGV5IGFyZSBtZWFudCBmb3IgdXNlIGJ5IGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ0NzQ6IFNhdmUgYW5kIHJlc3RvcmUgZXhjZXB0aW9uIHN0YXRlIGluIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKCkKKyAgd2hpbGUgd3JpdGluZyBlcnJvciBtZXNzYWdlIGlmIHRoZSB0aHJlYWQgbGVhdmVzIGEgdW5oYW5kbGVkIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTMwMTk6IEZpeCBwb3RlbnRpYWwgcmVmZXJlbmNlIGxlYWtzIGluIGJ5dGVhcnJheS5leHRlbmQoKS4gIFBhdGNoCisgIGJ5IFN1bWFuIFNhaGEuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQ3Njg6IG9zLnBhdGguZXhwYW5kdXNlcignfi9hJykgZG9lc24ndCB3b3JrcyBjb3JyZWN0bHkgd2hlbiBIT01FIGlzICcvJy4KKworLSBJc3N1ZSAjMTQzNzE6IFN1cHBvcnQgYnppcDIgaW4gemlwZmlsZSBtb2R1bGUuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMzE4MzogRml4IHBkYiBza2lwcGluZyBmcmFtZXMgYWZ0ZXIgaGl0dGluZyBhIGJyZWFrcG9pbnQgYW5kIHJ1bm5pbmcKKyAgc3RlcC4gIFBhdGNoIGJ5IFhhdmllciBkZSBHYXllLgorCistIElzc3VlICMxNDY5NjogRml4IHBhcnNlciBtb2R1bGUgdG8gdW5kZXJzdGFuZCAnbm9ubG9jYWwnIGRlY2xhcmF0aW9ucy4KKworLSBJc3N1ZSAjMTA5NDE6IEZpeCBpbWFwbGliLkludGVybmFsZGF0ZTJ0dXBsZSB0byBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0IG5lYXIKKyAgdGhlIERTVCB0cmFuc2l0aW9uLiAgUGF0Y2ggYnkgSm9lIFBldGVyc29uLgorCistIElzc3VlICM5MTU0OiBGaXggcGFyc2VyIG1vZHVsZSB0byB1bmRlcnN0YW5kIGZ1bmN0aW9uIGFubm90YXRpb25zLgorCistIElzc3VlICM2MDg1OiBJbiBodHRwLnNlcnZlci5weSBTaW1wbGVIVFRQU2VydmVyLmFkZHJlc3Nfc3RyaW5nIHJldHVybnMgdGhlCisgIGNsaWVudCBpcCBhZGRyZXNzIGluc3RlYWQgY2xpZW50IGhvc3RuYW1lLiBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzE0MzA5OiBEZXByZWNhdGUgdGltZS5jbG9jaygpLCB1c2UgdGltZS5wZXJmX2NvdW50ZXIoKSBvcgorICB0aW1lLnByb2Nlc3NfdGltZSgpIGluc3RlYWQuCisKKy0gSXNzdWUgIzE0NDI4OiBJbXBsZW1lbnQgdGhlIFBFUCA0MTguIEFkZCB0aW1lLmdldF9jbG9ja19pbmZvKCksCisgIHRpbWUucGVyZl9jb3VudGVyKCkgYW5kIHRpbWUucHJvY2Vzc190aW1lKCkgZnVuY3Rpb25zLCBhbmQgcmVuYW1lCisgIHRpbWUuc3RlYWR5KCkgdG8gdGltZS5tb25vdG9uaWMoKS4KKworLSBJc3N1ZSAjMTQ2NDY6IGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyKCkgbm93IHNldHMgX19sb2FkZXJfXyBhbmQKKyAgX19wYWNrYWdlX18gKHdoZW4gcG9zc2libGUpLgorCistIElzc3VlICMxNDY2NDogSXQgaXMgbm93IHBvc3NpYmxlIHRvIHVzZSBAdW5pdHRlc3Quc2tpcHtJZixVbmxlc3N9IG9uIGEKKyAgdGVzdCBjbGFzcyB0aGF0IGRvZXNuJ3QgaW5oZXJpdCBmcm9tIFRlc3RDYXNlIChpLmUuIGEgbWl4aW4pLgorCistIElzc3VlICM0ODkyOiBtdWx0aXByb2Nlc3NpbmcgQ29ubmVjdGlvbnMgY2FuIG5vdyBiZSB0cmFuc2ZlcnJlZCBvdmVyCisgIG11bHRpcHJvY2Vzc2luZyBDb25uZWN0aW9ucy4gIFBhdGNoIGJ5IFJpY2hhcmQgT3Vka2VyayAoc2J0KS4KKworLSBJc3N1ZSAjMTQxNjA6IFRhckZpbGUuZXh0cmFjdGZpbGUoKSBmYWlsZWQgdG8gcmVzb2x2ZSBzeW1ib2xpYyBsaW5rcyB3aGVuCisgIHRoZSBsaW5rcyB3ZXJlIG5vdCBsb2NhdGVkIGluIGFuIGFyY2hpdmUgc3ViZGlyZWN0b3J5LgorCistIElzc3VlICMxNDYzODogcHlkb2Mgbm93IHRyZWF0cyBub24tc3RyaW5nIF9fbmFtZV9fIHZhbHVlcyBhcyBpZiB0aGV5CisgIHdlcmUgbWlzc2luZywgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGVycm9yLgorCistIElzc3VlICMxMzY4NDogRml4IGh0dHBsaWIgdHVubmVsIGlzc3VlIG9mIGluZmluaXRlIGxvb3BzIGZvciBjZXJ0YWluIHNpdGVzCisgIHdoaWNoIHNlbmQgRU9GIHdpdGhvdXQgdHJhaWxpbmcgXHJcbi4KKworLSBJc3N1ZSAjMTQ2MDU6IEFkZCBpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIsIGltcG9ydGxpYi5tYWNoaW5lcnkuKEZpbGVGaW5kZXIsCisgIFNvdXJjZUZpbGVMb2FkZXIsIFNvdXJjZWxlc3NGaWxlTG9hZGVyLCBFeHRlbnNpb25GaWxlTG9hZGVyKS4KKworLSBJc3N1ZSAjMTM5NTk6IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgpL3NvdXJjZV9mcm9tX2NhY2hlKCkgbm93IGZvbGxvdworICBvcy5wYXRoLmpvaW4oKS9zcGxpdCgpIHNlbWFudGljcyBmb3IgcGF0aCBtYW5pcHVsYXRpb24gaW5zdGVhZCBvZiBpdHMgcHJpb3IsCisgIGN1c3RvbSBzZW1hbnRpY3Mgb2YgY2FyaW5nIHRoZSByaWdodC1tb3N0IHBhdGggc2VwYXJhdG9yIGZvcndhcmQgaW4gcGF0aAorICBqb2luaW5nLgorCistIElzc3VlICMyMTkzOiBBbGxvdyAiOiIgY2hhcmFjdGVyIGluIENvb2tpZSBOQU1FIHZhbHVlcy4KKworLSBJc3N1ZSAjMTQ2Mjk6IHRva2VuaXplci5kZXRlY3RfZW5jb2Rpbmcgd2lsbCBzcGVjaWZ5IHRoZSBmaWxlbmFtZSBpbiB0aGUKKyAgU3ludGF4RXJyb3IgZXhjZXB0aW9uIGlmIGZvdW5kIGF0IHJlYWRsaW5lLl9fc2VsZl9fLm5hbWUuCisKKy0gSXNzdWUgIzE0NjI5OiBSYWlzZSBTeW50YXhFcnJvciBpbiB0b2tlbml6ZXIuZGV0ZWN0X2VuY29kaW5nIGlmIHRoZQorICBmaXJzdCB0d28gbGluZXMgaGF2ZSBub24tVVRGLTggY2hhcmFjdGVycyB3aXRob3V0IGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uLgorCistIElzc3VlICMxNDMwODogRml4IGFuIGV4Y2VwdGlvbiB3aGVuIGEgImR1bW15IiB0aHJlYWQgaXMgaW4gdGhlIHRocmVhZGluZworICBtb2R1bGUncyBhY3RpdmUgbGlzdCBhZnRlciBhIGZvcmsoKS4KKworLSBJc3N1ZSAjMTE3NTA6IFRoZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgc2NhdHRlcmVkIGluIHRoZSBfc3VicHJvY2VzcyBhbmQKKyAgX211bHRpcHJvY2Vzc2luZy53aW4zMiBtb2R1bGVzIG5vdyBsaXZlIGluIGEgc2luZ2xlIG1vZHVsZSAiX3dpbmFwaSIuCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQwODc6IG11bHRpcHJvY2Vzc2luZzogYWRkIENvbmRpdGlvbi53YWl0X2ZvcigpLiBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0NTM4OiBIVE1MUGFyc2VyIGNhbiBub3cgcGFyc2UgY29ycmVjdGx5IHN0YXJ0IHRhZ3MgdGhhdCBjb250YWluCisgIGEgYmFyZSAnLycuCisKKy0gSXNzdWUgIzE0NDUyOiBTeXNMb2dIYW5kbGVyIG5vIGxvbmdlciBpbnNlcnRzIGEgVVRGLTggQk9NIGludG8gdGhlIG1lc3NhZ2UuCisKKy0gSXNzdWUgIzE0Mzg2OiBFeHBvc2UgdGhlIGRpY3RfcHJveHkgaW50ZXJuYWwgdHlwZSBhcyB0eXBlcy5NYXBwaW5nUHJveHlUeXBlLgorCistIElzc3VlICMxMzk1OTogTWFrZSBpbXAucmVsb2FkKCkgYWx3YXlzIHVzZSBhIG1vZHVsZSdzIF9fbG9hZGVyX18gdG8gcGVyZm9ybQorICB0aGUgcmVsb2FkLgorCistIElzc3VlICMxMzk1OTogQWRkIGltcC5weSBhbmQgcmVuYW1lIHRoZSBidWlsdC1pbiBtb2R1bGUgdG8gX2ltcCwgYWxsb3dpbmcgZm9yCisgIHJlLWltcGxlbWVudGluZyBwYXJ0cyBvZiB0aGUgbW9kdWxlIGluIHB1cmUgUHl0aG9uLgorCistIElzc3VlICMxMzQ5NjogRml4IHBvdGVudGlhbCBvdmVyZmxvdyBpbiBiaXNlY3QuYmlzZWN0IGFsZ29yaXRobSB3aGVuIGFwcGxpZWQKKyAgdG8gYSBjb2xsZWN0aW9uIG9mIHNpemUgPiBzeXMubWF4c2l6ZSAvIDIuCisKKy0gSGF2ZSBpbXBvcnRsaWIgdGFrZSBhZHZhbnRhZ2Ugb2YgSW1wb3J0RXJyb3IncyBuZXcgJ25hbWUnIGFuZCAncGF0aCcKKyAgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMTQzOTk6IHppcGZpbGUgbm93IHJlY29nbml6ZXMgdGhhdCB0aGUgYXJjaGl2ZSBoYXMgYmVlbiBtb2RpZmllZCBldmVuCisgIGlmIG9ubHkgdGhlIGNvbW1lbnQgaXMgY2hhbmdlZC4gIEluIGFkZGl0aW9uLCB0aGUgVHlwZUVycm9yIHRoYXQgcmVzdWx0cyBmcm9tCisgIHRyeWluZyB0byBzZXQgYSBub24tYmluYXJ5IHZhbHVlIGFzIGEgY29tbWVudCBpcyBub3cgcmFpc2VkIGF0IHRoZSB0aW1lCisgIHRoZSBjb21tZW50IGlzIHNldCByYXRoZXIgdGhhbiBhdCB0aGUgdGltZSB0aGUgemlwZmlsZSBpcyB3cml0dGVuLgorCistIHRyYWNlLkNvdmVyYWdlUmVzdWx0cy5pc19pZ25vcmVkX2ZpbGVuYW1lKCkgbm93IGlnbm9yZXMgYW55IG5hbWUgdGhhdCBzdGFydHMKKyAgd2l0aCAiPCIgYW5kIGVuZHMgd2l0aCAiPiIgaW5zdGVhZCBvZiBzcGVjaWFsLWNhc2luZyAiPHN0cmluZz4iIGFuZAorICAiPGRvY3Rlc3QgIi4KKworLSBJc3N1ZSAjMTI1Mzc6IFRoZSBtYWlsYm94IG1vZHVsZSBubyBsb25nZXIgZGVwZW5kcyBvbiBrbm93bGVkZ2Ugb2YgaW50ZXJuYWwKKyAgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgZW1haWwgcGFja2FnZSBNZXNzYWdlIG9iamVjdC4KKworLSBJc3N1ZSAjNzk3ODogc29ja2V0c2VydmVyIG5vdyByZXN0YXJ0cyB0aGUgc2VsZWN0KCkgY2FsbCB3aGVuIEVJTlRSIGlzCisgIHJldHVybmVkLiAgVGhpcyBhdm9pZHMgY3Jhc2hpbmcgdGhlIHNlcnZlciBsb29wIHdoZW4gYSBzaWduYWwgaXMgcmVjZWl2ZWQuCisgIFBhdGNoIGJ5IEplcnp5IEtvemVyYS4KKworLSBJc3N1ZSAjMTQ1MjI6IEF2b2lkIGR1cGxpY2F0aW5nIHNvY2tldCBoYW5kbGVzIGluIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLgorICBQYXRjaCBieSBzYnQuCisKKy0gRG9uJ3QgUHlfREVDUkVGIE5VTEwgdmFyaWFibGUgaW4gaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlci4KKworLSBJc3N1ZSAjODUxNTogU2V0IF9fZmlsZV9fIHdoZW4gcnVuIGZpbGUgaW4gSURMRS4KKyAgSW5pdGlhbCBwYXRjaCBieSBCcnVjZSBGcmVkZXJpa3Nlbi4KKworLSBJc3N1ZSAjMTQ0OTY6IEZpeCB3cm9uZyBuYW1lIGluIGlkbGVsaWIvdGFiYmVkcGFnZXMucHkuCisgIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KKworLSBJc3N1ZSAjMzAzMzogQWRkIGRpc3BsYXlvZiBwYXJhbWV0ZXIgdG8gdGtpbnRlciBmb250LiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTQ0ODI6IFJhaXNlIGEgVmFsdWVFcnJvciwgbm90IGEgTmFtZUVycm9yLCB3aGVuIHRyeWluZyB0byBjcmVhdGUKKyAgYSBtdWx0aXByb2Nlc3NpbmcgQ2xpZW50IG9yIExpc3RlbmVyIHdpdGggYW4gQUZfVU5JWCB0eXBlIGFkZHJlc3MgdW5kZXIKKyAgV2luZG93cy4gIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KKworLSBJc3N1ZSAjODAyMzEwOiBHZW5lcmF0ZSBhbHdheXMgdW5pcXVlIHRraW50ZXIgZm9udCBuYW1lcyBpZiBub3QgZGlyZWN0bHkgcGFzc2VkLgorCistIElzc3VlICMxNDE1MTogUmFpc2UgYSBWYWx1ZUVycm9yLCBub3QgYSBOYW1lRXJyb3IsIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZQorICBhIG11bHRpcHJvY2Vzc2luZyBDbGllbnQgb3IgTGlzdGVuZXIgd2l0aCBhbiBBRl9QSVBFIHR5cGUgYWRkcmVzcyB1bmRlcgorICBub24tV2luZG93cyBwbGF0Zm9ybXMuICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCisKKy0gSXNzdWUgIzE0NDkzOiBVc2UgZ3Zmcy1vcGVuIG9yIHhkZy1vcGVuIGluIHdlYmJyb3dzZXIuCisKK0J1aWxkCistLS0tLQorCistICJtYWtlIHRvdWNoIiB3aWxsIG5vdyB0b3VjaCBnZW5lcmF0ZWQgZmlsZXMgdGhhdCBhcmUgY2hlY2tlZCBpbnRvIE1lcmN1cmlhbCwKKyAgYWZ0ZXIgYSAiaGcgdXBkYXRlIiB3aGljaCBmYWlsZWQgdG8gYnJpbmcgdGhlIHRpbWVzdGFtcHMgaW50byB0aGUgcmlnaHQgb3JkZXIuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNDAyNjogSW4gdGVzdF9jbWRfbGluZV9zY3JpcHQsIGNoZWNrIHRoYXQgc3lzLmFyZ3YgaXMgcG9wdWxhdGVkCisgIGNvcnJlY3RseSBmb3IgdGhlIHZhcmlvdXMgaW52b2NhdGlvbiBhcHByb2FjaGVzIChQYXRjaCBieSBKYXNvbiBZZW8pCisKKy0gSXNzdWUgIzE0MDMyOiBGaXggaW5jb3JyZWN0IHZhcmlhYmxlIG5hbWUgaW4gdGVzdF9jbWRfbGluZV9zY3JpcHQgZGVidWdnaW5nCisgIG1lc3NhZ2UgKFBhdGNoIGJ5IEphc29uIFllbykKKworLSBJc3N1ZSAjMTQ1ODk6IFVwZGF0ZSBjZXJ0aWZpY2F0ZSBjaGFpbiBmb3Igc2hhMjU2LnRicy1pbnRlcm5ldC5jb20sIGZpeGluZworICBhIHRlc3QgZmFpbHVyZSBpbiB0ZXN0X3NzbC4KKworLSBJc3N1ZSAjMTQzNTU6IFJlZ3J0ZXN0IG5vdyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgdW5pdHRlc3QgdGVzdCBsb2FkaW5nLCBhbmQKKyAgd2lsbCB1c2UgaXQgaWYgYSB0ZXN0IGZpbGUgY29udGFpbnMgbm8gYHRlc3RfbWFpbmAgbWV0aG9kLgorCitUb29scyAvIERlbW9zCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzM1NjE6IFRoZSBXaW5kb3dzIGluc3RhbGxlciBub3cgaGFzIGFuIG9wdGlvbiwgb2ZmIGJ5IGRlZmF1bHQsIGZvcgorICBwbGFjaW5nIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uIGludG8gdGhlIHN5c3RlbSAiUGF0aCIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKy0gSXNzdWUgIzEzMTY1OiBzdHJpbmdiZW5jaCBpcyBub3cgYXZhaWxhYmxlIGluIHRoZSBUb29scy9zdHJpbmdiZW5jaCBmb2xkZXIuCisgIEl0IHVzZWQgdG8gbGl2ZSBpbiBpdHMgb3duIFNWTiBwcm9qZWN0LgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwMS1BcHItMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2ODMzNjg6IG9iamVjdC5fX25ld19fIGFuZCBvYmplY3QuX19pbml0X18gcmFpc2UgYSBUeXBlRXJyb3IgaWYgdGhleQorICBhcmUgcGFzc2VkIGFyZ3VtZW50cyBhbmQgdGhlaXIgY29tcGxlbWVudGFyeSBtZXRob2QgaXMgbm90IG92ZXJyaWRkZW4uCisKKy0gSXNzdWUgIzE0Mzc4OiBGaXggY29tcGlsaW5nIGFzdC5JbXBvcnRGcm9tIG5vZGVzIHdpdGggYSAiX19mdXR1cmVfXyIgc3RyaW5nIGFzCisgIHRoZSBtb2R1bGUgbmFtZSB0aGF0IHdhcyBub3QgaW50ZXJuZWQuCisKKy0gSXNzdWUgIzE0MzMxOiBVc2Ugc2lnbmlmaWNhbnRseSBsZXNzIHN0YWNrIHNwYWNlIHdoZW4gaW1wb3J0aW5nIG1vZHVsZXMgYnkKKyAgYWxsb2NhdGluZyBwYXRoIGJ1ZmZlcnMgb24gdGhlIGhlYXAgaW5zdGVhZCBvZiB0aGUgc3RhY2suCisKKy0gSXNzdWUgIzE0MzM0OiBQcmV2ZW50IGluIGEgc2VnZmF1bHQgaW4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fIHdoZW4gaXQgd2FzIG5vdAorICBwYXNzZWQgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTQ2OTYyOTogQWxsb3cgY3ljbGVzIHRocm91Z2ggYW4gb2JqZWN0J3MgX19kaWN0X18gc2xvdCB0byBiZQorICBjb2xsZWN0ZWQuIChGb3IgZXhhbXBsZSBpZiBgYHguX19kaWN0X18gaXMgeGBgKS4KKworLSBJc3N1ZSAjMTQyMDU6IGRpY3QgbG9va3VwIHJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiB0aGUgZGljdCBpcyBtb2RpZmllZAorICBkdXJpbmcgYSBsb29rdXAuCisKKy0gSXNzdWUgIzE0MjIwOiBXaGVuIGEgZ2VuZXJhdG9yIGlzIGRlbGVnYXRpbmcgdG8gYW5vdGhlciBpdGVyYXRvciB3aXRoIHRoZQorICB5aWVsZCBmcm9tIHN5bnRheCwgaXQgbmVlZHMgdG8gaGF2ZSBpdHMgYGBnaV9ydW5uaW5nYGAgZmxhZyBzZXQgdG8gVHJ1ZS4KKworLSBJc3N1ZSAjMTQ0MzU6IFJlbW92ZSBkZWRpY2F0ZWQgYmxvY2sgYWxsb2NhdG9yIGZyb20gZmxvYXRvYmplY3QuYyBhbmQgcmVseQorICBvbiB0aGUgUHlPYmplY3RfTWFsbG9jKCkgYXBpIGxpa2UgYWxsIG90aGVyIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0NDcxOiBGaXggYSBwb3NzaWJsZSBidWZmZXIgb3ZlcnJ1biBpbiB0aGUgd2lucmVnIG1vZHVsZS4KKworLSBJc3N1ZSAjMTQyODg6IEFsbG93IHRoZSBzZXJpYWxpemF0aW9uIG9mIGJ1aWx0aW4gaXRlcmF0b3JzCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQzMDA6IFVuZGVyIFdpbmRvd3MsIHNvY2tldHMgY3JlYXRlZCB1c2luZyBzb2NrZXQuZHVwKCkgbm93IGFsbG93CisgIG92ZXJsYXBwZWQgSS9PLiAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMzg3Mjogc29ja2V0LmRldGFjaCgpIG5vdyBtYXJrcyB0aGUgc29ja2V0IGNsb3NlZCAoYXMgbWlycm9yZWQKKyAgaW4gdGhlIHNvY2tldCByZXByKCkpLiAgUGF0Y2ggYnkgTWF0dCBKb2luZXIuCisKKy0gSXNzdWUgIzE0NDA2OiBGaXggYSByYWNlIGNvbmRpdGlvbiB3aGVuIHVzaW5nIGBgY29uY3VycmVudC5mdXR1cmVzLndhaXQoCisgIHJldHVybl93aGVuPUFMTF9DT01QTEVURUQpYGAuICBQYXRjaCBieSBNYXR0IEpvaW5lci4KKworLSBJc3N1ZSAjNTEzNjogZGVwcmVjYXRlIG9sZCwgdW51c2VkIGZ1bmN0aW9ucyBmcm9tIHRraW50ZXIuCisKKy0gSXNzdWUgIzE0NDA5OiBJRExFIG5vdyBwcm9wZXJseSBleGVjdXRlcyBjb21tYW5kcyBpbiB0aGUgU2hlbGwgd2luZG93CisgIHdoZW4gaXQgY2Fubm90IHJlYWQgdGhlIG5vcm1hbCBjb25maWcgZmlsZXMgb24gc3RhcnR1cCBhbmQKKyAgaGFzIHRvIHVzZSB0aGUgYnVpbHQtaW4gZGVmYXVsdCBrZXkgYmluZGluZ3MuCisgIFRoZXJlIHdhcyBwcmV2aW91c2x5IGEgYnVnIGluIG9uZSBvZiB0aGUgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzE0NDE2OiBzeXNsb2cgbm93IGRlZmluZXMgdGhlIExPR19PREVMQVkgYW5kIExPR19BVVRIUFJJViBjb25zdGFudHMKKyAgaWYgdGhleSBhcmUgZGVmaW5lZCBpbiA8c3lzbG9nLmg+LgorCistIElETEUgY2FuIGJlIGxhdW5jaGVkIGFzIHB5dGhvbiAtbSBpZGxlbGliCisKKy0gSXNzdWUgIzE0Mjk1OiBBZGQgdW5pdHRlc3QubW9jaworCistIElzc3VlICM3NjUyOiBBZGQgLS13aXRoLXN5c3RlbS1saWJtcGRlYyBvcHRpb24gdG8gY29uZmlndXJlIGZvciBsaW5raW5nCisgIHRoZSBfZGVjaW1hbCBtb2R1bGUgYWdhaW5zdCBhbiBpbnN0YWxsZWQgbGlibXBkZWMuCisKKy0gSXNzdWUgIzE0MzgwOiBNSU1FVGV4dCBub3cgZGVmYXVsdHMgdG8gdXRmLTggd2hlbiBwYXNzZWQgbm9uLUFTQ0lJIHVuaWNvZGUKKyAgd2l0aCBubyBjaGFyc2V0IHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTAzNDA6IGFzeW5jb3JlIC0gcHJvcGVybHkgaGFuZGxlIEVJTlZBTCBpbiBkaXNwYXRjaGVyIGNvbnN0cnVjdG9yIG9uCisgIE9TWDsgYXZvaWQgdG8gY2FsbCBoYW5kbGVfY29ubmVjdCBpbiBjYXNlIG9mIGEgZGlzY29ubmVjdGVkIHNvY2tldCB3aGljaAorICB3YXMgbm90IG1lYW50IHRvIGNvbm5lY3QuCisKKy0gSXNzdWUgIzE0MjA0OiBUaGUgc3NsIG1vZHVsZSBub3cgaGFzIHN1cHBvcnQgZm9yIHRoZSBOZXh0IFByb3RvY29sCisgIE5lZ290aWF0aW9uIGV4dGVuc2lvbiwgaWYgYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIE9wZW5TU0wgbGlicmFyeS4KKyAgUGF0Y2ggYnkgQ29saW4gTWFyYy4KKworLSBJc3N1ZSAjMzAzNTogVW51c2VkIGZ1bmN0aW9ucyBmcm9tIHRraW50ZXIgYXJlIG1hcmtlZCBhcyBwZW5kaW5nIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzEyNzU3OiBGaXggdGhlIHNraXBwaW5nIG9mIGRvY3Rlc3RzIHdoZW4gcHl0aG9uIGlzIHJ1biB3aXRoIC1PTyBzbworICB0aGF0IGl0IHdvcmtzIGluIHVuaXR0ZXN0J3MgdmVyYm9zZSBtb2RlIGFzIHdlbGwgYXMgbm9uLXZlcmJvc2UgbW9kZS4KKworLSBJc3N1ZSAjNzY1MjogSW50ZWdyYXRlIHRoZSBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGxpYm1wZGVjIGxpYnJhcnkgdG8gc3BlZWQKKyAgdXAgdGhlIGRlY2ltYWwgbW9kdWxlLiBQZXJmb3JtYW5jZSBnYWlucyBvZiB0aGUgbmV3IEMgaW1wbGVtZW50YXRpb24gYXJlCisgIGJldHdlZW4gMTB4IGFuZCAxMDB4LCBkZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9uLgorCistIElzc3VlICMzNTczOiBJRExFIGhhbmdzIHdoZW4gcGFzc2luZyBpbnZhbGlkIGNvbW1hbmQgbGluZSBhcmdzCisgIChkaXJlY3RvcnkoaWVzKSBpbnN0ZWFkIG9mIGZpbGUocykpIChQYXRjaCBieSBHdWlsaGVybWUgUG9sbykKKworLSBJc3N1ZSAjMTQyNjk6IFNNVFBEIG5vdyBjb25mb3JtcyB0byB0aGUgUkZDIGFuZCByZXF1aXJlcyBhIEhFTE8gY29tbWFuZAorICBiZWZvcmUgTUFJTCwgUkNQVCwgb3IgREFUQS4KKworLSBJc3N1ZSAjMTM2OTQ6IGFzeW5jaHJvbm91cyBjb25uZWN0IGluIGFzeW5jb3JlLmRpc3BhdGNoZXIgZG9lcyBub3Qgc2V0IGFkZHIKKyAgYXR0cmlidXRlLgorCistIElzc3VlICMxNDM0NDogZml4ZWQgdGhlIHJlcHIgb2YgZW1haWwucG9saWN5IG9iamVjdHMuCisKKy0gSXNzdWUgIzExNjg2OiBBZGRlZCBtaXNzaW5nIGVudHJpZXMgdG8gZW1haWwgcGFja2FnZSBfX2FsbF9fIGxpc3RzCisgIChtb3N0bHkgdGhlIG5ldyBCeXRlcyBjbGFzc2VzKS4KKworLSBJc3N1ZSAjMTQzMzU6IG11bHRpcHJvY2Vzc2luZydzIGN1c3RvbSBQaWNrbGVyIHN1YmNsYXNzIG5vdyBpbmhlcml0cyBmcm9tCisgIHRoZSBDLWFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uLiAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMDQ4NDogRml4IHRoZSBDR0lIVFRQU2VydmVyJ3MgUEFUSF9JTkZPIGhhbmRsaW5nIHByb2JsZW0uCisKKy0gSXNzdWUgIzExMTk5OiBGaXggdGhlIHdpdGggdXJsbGliIHdoaWNoIGhhbmdzIG9uIHBhcnRpY3VsYXIgZnRwIHVybHMuCisKKy0gSW1wcm92ZSB0aGUgbWVtb3J5IHV0aWxpemF0aW9uIGFuZCBzcGVlZCBvZiBmdW5jdG9vbHMubHJ1X2NhY2hlLgorCistIElzc3VlICMxNDIyMjogVXNlIHRoZSBuZXcgdGltZS5zdGVhZHkoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRpbWUudGltZSgpIGZvcgorICB0aW1lb3V0IGluIHF1ZXVlIGFuZCB0aHJlYWRpbmcgbW9kdWxlcyB0byBub3QgYmUgYWZmZWN0ZWQgb2Ygc3lzdGVtIHRpbWUKKyAgdXBkYXRlLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIGxpYjJ0bzMucHl0cmVlLkJhc2UuZ2V0X3ByZWZpeC9zZXRfcHJlZml4LgorCistIElzc3VlICMxNDIzNDogQ1ZFLTIwMTItMDg3NjogUmFuZG9taXplIGhhc2hlcyBvZiB4bWwgYXR0cmlidXRlcyBpbiB0aGUgaGFzaAorICB0YWJsZSBpbnRlcm5hbCB0byB0aGUgcHlleHBhdCBtb2R1bGUncyBjb3B5IG9mIHRoZSBleHBhdCBsaWJyYXJ5IHRvIGF2b2lkIGEKKyAgZGVuaWFsIG9mIHNlcnZpY2UgZHVlIHRvIGhhc2ggY29sbGlzaW9ucy4gIFBhdGNoIGJ5IERhdmlkIE1hbGNvbG0gd2l0aCBzb21lCisgIG1vZGlmaWNhdGlvbnMgYnkgdGhlIGV4cGF0IHByb2plY3QuCisKKy0gSXNzdWUgIzE0MjAwOiBJZGxlIHNoZWxsIGNyYXNoIG9uIHByaW50aW5nIG5vbi1CTVAgdW5pY29kZSBjaGFyYWN0ZXIuCisKKy0gSXNzdWUgIzEyODE4OiBmb3JtYXQgYWRkcmVzcyBubyBsb25nZXIgbmVlZGxlc3NseSBcIGVzY2FwZXMgKClzIGluIG5hbWVzIHdoZW4KKyAgdGhlIG5hbWUgZW5kcyB1cCBiZWluZyBxdW90ZWQuCisKKy0gSXNzdWUgIzE0MDYyOiBCeXRlc0dlbmVyYXRvciBub3cgY29ycmVjdGx5IGZvbGRzIEhlYWRlciBvYmplY3RzLAorICBpbmNsdWRpbmcgdXNpbmcgbGluZXNlcCB3aGVuIGZvbGRpbmcuCisKKy0gSXNzdWUgIzEzODM5OiBXaGVuIGludm9rZWQgb24gdGhlIGNvbW1hbmQtbGluZSwgdGhlIHBzdGF0cyBtb2R1bGUgbm93CisgIGFjY2VwdHMgc2V2ZXJhbCBmaWxlbmFtZXMgb2YgcHJvZmlsZSBzdGF0IGZpbGVzIGFuZCBtZXJnZXMgdGhlbSBhbGwuCisgIFBhdGNoIGJ5IE1hdHQgSm9pbmVyLgorCistIElzc3VlICMxNDI5MTogRW1haWwgbm93IGRlZmF1bHRzIHRvIHV0Zi04IGZvciBub24tQVNDSUkgdW5pY29kZSBoZWFkZXJzCisgIGluc3RlYWQgb2YgcmFpc2luZyBhbiBlcnJvci4gIFRoaXMgZml4ZXMgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIDIuNy4KKworLSBJc3N1ZSAjOTg5NzEyOiBTdXBwb3J0IHVzaW5nIFRrIHdpdGhvdXQgYSBtYWlubG9vcC4KKworLSBJc3N1ZSAjNTIxOTogUHJldmVudCBldmVudCBoYW5kbGVyIGNhc2NhZGUgaW4gSURMRS4KKworLSBJc3N1ZSAjMzgzNTogUmVmdXNlIHRvIHVzZSB1bnRocmVhZGVkIFRjbCBpbiB0aHJlYWRlZCBQeXRob24uCisKKy0gSXNzdWUgIzI4NDM6IEFkZCBuZXcgVGsgQVBJIHRvIFRraW50ZXIuCisKKy0gSXNzdWUgIzE0MTg0OiBJbmNyZWFzZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBzZWNvbmRhcnkgdGhyZWFkcyBvbgorICBNYWMgT1MgWCB0byBhdm9pZCBpbnRlcnByZXRlciBjcmFzaGVzIHdoZW4gdXNpbmcgdGhyZWFkcyBvbiAxMC43LgorCistIElzc3VlICMxNDE4MDogZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wKCksCisgIGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpCisgIG5vdyByYWlzZSBhbiBPU0Vycm9yIGluc3RlYWQgb2YgVmFsdWVFcnJvciBpZiBsb2NhbHRpbWUoKSBvciBnbXRpbWUoKSBmYWlsZWQuCisKKy0gSXNzdWUgIzE0MTgwOiB0aW1lLmN0aW1lKCksIGdtdGltZSgpLCB0aW1lLmxvY2FsdGltZSgpLAorICBkYXRldGltZS5kYXRlLmZyb210aW1lc3RhbXAoKSwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZAorICBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkgbm93IHJhaXNlcyBhbiBPdmVyZmxvd0Vycm9yLCBpbnN0ZWFkIG9mCisgIGEgVmFsdWVFcnJvciwgaWYgdGhlIHRpbWVzdGFtcCBkb2VzIG5vdCBmaXQgaW4gdGltZV90LgorCistIElzc3VlICMxNDE4MDogZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZAorICBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkgbm93IHJvdW5kIG1pY3Jvc2Vjb25kcyB0b3dhcmRzIHplcm8KKyAgaW5zdGVhZCBvZiByb3VuZGluZyB0byBuZWFyZXN0IHdpdGggdGllcyBnb2luZyBhd2F5IGZyb20gemVyby4KKworLSBJc3N1ZSAjMTA1NDM6IEZpeCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSB3aXRoIEp5dGhvbiBieXRlY29kZSBmaWxlcy4KKworLSBJc3N1ZSAjMTE3ODg2MzogU2VwYXJhdGUgaW5pdGlhbGlzYXRpb24gZnJvbSBzZXR0aW5nIHdoZW4gaW5pdGlhbGl6aW5nCisgIFRraW50ZXIuVmFyaWFibGVzOyBoYXJtb25pemUgZXhjZXB0aW9ucyB0byBWYWx1ZUVycm9yOyBvbmx5IGRlbGV0ZSB2YXJpYWJsZXMKKyAgdGhhdCBoYXZlIG5vdCBiZWVuIGRlbGV0ZWQ7IGFzc2VydCB0aGF0IHZhcmlhYmxlIG5hbWVzIGFyZSBzdHJpbmdzLgorCistIElzc3VlICMxNDEwNDogSW1wbGVtZW50IHRpbWUubW9ub3RvbmljKCkgb24gTWFjIE9TIFgsIHBhdGNoIHdyaXR0ZW4gYnkKKyAgTmljaG9sYXMgUmlsZXkuCisKKy0gSXNzdWUgIzEzMzk0OiB0aGUgYWlmYyBtb2R1bGUgbm93IHVzZXMgd2FybmluZ3Mud2FybigpIHRvIHNpZ25hbCB3YXJuaW5ncy4KKworLSBJc3N1ZSAjMTQyNTI6IEZpeCBzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZSgpIHRvIG5vdCByYWlzZSBhbiBlcnJvciB1bmRlcgorICBXaW5kb3dzIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGFscmVhZHkgZXhpdGVkLgorCistIElzc3VlICMxNDIyMzogY3Vyc2VzLmFkZGNoKCkgaXMgbm8gbW9yZSBsaW1pdGVkIHRvIHRoZSByYW5nZSAwLTI1NSB3aGVuIHRoZQorICBQeXRob24gY3Vyc2VzIGlzIG5vdCBsaW5rZWQgdG8gbGlibmN1cnNlc3cuIEl0IHdhcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZAorICBpbiBQeXRob24gMy4zYTEuCisKKy0gSXNzdWUgIzE0MTY4OiBDaGVjayBmb3IgcHJlc2VuY2Ugb2YgRWxlbWVudC5fYXR0cnMgaW4gbWluaWRvbSBiZWZvcmUKKyAgYWNjZXNzaW5nIGl0LgorCistIElzc3VlICMxMjMyODogRml4IG11bHRpcHJvY2Vzc2luZydzIHVzZSBvZiBvdmVybGFwcGVkIEkvTyBvbiBXaW5kb3dzLgorICBBbHNvLCBhZGQgYSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi53YWl0KHJsaXN0LCB0aW1lb3V0PU5vbmUpIGZ1bmN0aW9uCisgIGZvciBwb2xsaW5nIG11bHRpcGxlIG9iamVjdHMgYXQgb25jZS4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQwMDc6IEFjY2VwdCBpbmNvbXBsZXRlIFRyZWVCdWlsZGVyIG9iamVjdHMgKG1pc3Npbmcgc3RhcnQsIGVuZCwKKyAgZGF0YSBvciBjbG9zZSBtZXRob2QpIGZvciB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGFzIHdlbGwuCisgIERyb3AgdGhlIG5vLW9wIFRyZWVCdWlsZGVyKCkueG1sKCkgbWV0aG9kIGZyb20gdGhlIEMgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzE0MjEwOiBwZGIgbm93IGhhcyB0YWItY29tcGxldGlvbiBub3Qgb25seSBmb3IgY29tbWFuZCBuYW1lcywgYnV0CisgIGFsc28gZm9yIHRoZWlyIGFyZ3VtZW50cywgd2hlcmV2ZXIgcG9zc2libGUuCisKKy0gSXNzdWUgIzE0MzEwOiBTb2NrZXRzIGNhbiBub3cgYmUgd2l0aCBvdGhlciBwcm9jZXNzZXMgb24gV2luZG93cyB1c2luZworICB0aGUgYXBpIHNvY2tldC5zb2NrZXQuc2hhcmUoKSBhbmQgc29ja2V0LmZyb21zaGFyZSgpLgorCistIElzc3VlICMxMDU3NjogVGhlIGdjIG1vZHVsZSBub3cgaGFzIGEgJ2NhbGxiYWNrcycgbWVtYmVyIHRoYXQgd2lsbCBnZXQKKyAgY2FsbGVkIHdoZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIHRha2VzIHBsYWNlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTQ1NTc6IEZpeCBleHRlbnNpb25zIGJ1aWxkIG9uIEhQLVVYLiBQYXRjaCBieSBBZGkgUm9pYmFuLgorCistIElzc3VlICMxNDM4NzogRG8gbm90IGluY2x1ZGUgYWNjdS5oIGZyb20gUHl0aG9uLmguCisKKy0gSXNzdWUgIzE0MzU5OiBPbmx5IHVzZSBPX0NMT0VYRUMgaW4gX3Bvc2l4bW9kdWxlLmMgaWYgaXQgaXMgZGVmaW5lZC4KKyAgQmFzZWQgb24gcGF0Y2ggZnJvbSBIZXJ2w6kgQ29hdGFuaGF5LgorCistIElzc3VlICMxNDMyMTogRG8gbm90IHJ1biBwZ2VuIGR1cmluZyB0aGUgYnVpbGQgaWYgZmlsZXMgYXJlIHVwIHRvIGRhdGUuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQwMzQ6IGFkZGVkIHRoZSBhcmdwYXJzZSB0dXRvcmlhbC4KKworLSBJc3N1ZSAjMTQzMjQ6IEZpeCBjb25maWd1cmUgdGVzdHMgZm9yIGNyb3NzIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTQzMjc6IENhbGwgQUNfQ0FOT05JQ0FMX0hPU1QgaW4gY29uZmlndXJlLmFjIGFuZCBjaGVjayBpbgorICBjb25maWcue2d1ZXNzLHN1Yn0uIERvbid0IHVzZSB1bmFtZSBjYWxscyBmb3IgY3Jvc3MgYnVpbGRzLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjOTA0MTogQW4gaXNzdWUgaW4gY3R5cGVzLmNfbG9uZ2RvdWJsZSwgY3R5cGVzLmNfZG91YmxlLCBhbmQKKyAgY3R5cGVzLmNfZmxvYXQgdGhhdCBjYXVzZWQgYW4gaW5jb3JyZWN0IGV4Y2VwdGlvbiB0byBiZSByZXR1cm5lZCBpbiB0aGUKKyAgY2FzZSBvZiBvdmVyZmxvdyBoYXMgYmVlbiBmaXhlZC4KKworLSBJc3N1ZSAjMTQyMTI6IFRoZSByZSBtb2R1bGUgZGlkbid0IHJldGFpbiBhIHJlZmVyZW5jZSB0byBidWZmZXJzIGl0IHdhcworICBzY2FubmluZywgcmVzdWx0aW5nIGluIHNlZ2ZhdWx0cy4KKworLSBJc3N1ZSAjMTQyNTk6IFRoZSBmaW5kaXRlcigpIG1ldGhvZCBvZiByZSBvYmplY3RzIGRpZCBub3QgdGFrZSBhbnkKKyAga2V5d29yZCBhcmd1bWVudHMsIGNvbnRyYXJ5IHRvIHRoZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxMDE0MjogU3VwcG9ydCBmb3IgU0VFS19IT0xFL1NFRUtfREFUQSAoZm9yIGV4YW1wbGUsIHVuZGVyIFpGUykuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNDQ0MjogQWRkIG1pc3NpbmcgZXJybm8gaW1wb3J0IGluIHRlc3Rfc210cGxpYi4KKworLSBJc3N1ZSAjODMxNTogKHBhcnRpYWwgZml4KSBweXRob24gLW0gdW5pdHRlc3QgdGVzdC50ZXN0X2VtYWlsIG5vdyB3b3Jrcy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMDUtTWFyLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDE3MjogRml4IHJlZmVyZW5jZSBsZWFrIHdoZW4gbWFyc2hhbGxpbmcgYSBidWZmZXItbGlrZSBvYmplY3QKKyAgKG90aGVyIHRoYW4gYSBieXRlcyBvYmplY3QpLgorCistIElzc3VlICMxMzUyMTogZGljdC5zZXRkZWZhdWx0KCkgbm93IGRvZXMgb25seSBvbmUgbG9va3VwIGZvciB0aGUgZ2l2ZW4ga2V5LAorICBtYWtpbmcgaXQgImF0b21pYyIgZm9yIG1hbnkgcHVycG9zZXMuICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIFBFUCA0MDksIElzc3VlICM2MjEwOiAicmFpc2UgWCBmcm9tIE5vbmUiIGlzIG5vdyBzdXBwb3J0ZWQgYXMgYSBtZWFucyBvZgorICBzdXBwcmVzc2luZyB0aGUgZGlzcGxheSBvZiB0aGUgY2hhaW5lZCBleGNlcHRpb24gY29udGV4dC4gVGhlIGNoYWluZWQKKyAgY29udGV4dCBzdGlsbCByZW1haW5zIGF2YWlsYWJsZSBhcyB0aGUgX19jb250ZXh0X18gYXR0cmlidXRlLgorCistIElzc3VlICMxMDE4MTogTmV3IG1lbW9yeXZpZXcgaW1wbGVtZW50YXRpb24gZml4ZXMgbXVsdGlwbGUgb3duZXJzaGlwCisgIGFuZCBsaWZldGltZSBpc3N1ZXMgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFB5X2J1ZmZlciBtZW1iZXJzICgjOTk5MCkKKyAgYXMgd2VsbCBhcyBjcmFzaGVzICgjODMwNSwgIzc0MzMpLiBNYW55IG5ldyBmZWF0dXJlcyBoYXZlIGJlZW4gYWRkZWQKKyAgKFNlZSB3aGF0c25ldy8zLjMpLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZCBleHRlbnNpdmVseS4KKyAgVGhlIG5kYXJyYXkgdGVzdCBvYmplY3QgZnJvbSBfdGVzdGJ1ZmZlci5jIGltcGxlbWVudHMgYWxsIGFzcGVjdHMgb2YKKyAgUEVQLTMxMTgsIHNvIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgdG93YXJkcyB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24KKyAgb2YgdGhlIFBFUCBjYW4gcHJvY2VlZCBpbiBhIHRlc3QtZHJpdmVuIG1hbm5lci4KKworICBUaGFua3MgdG8gTmljayBDb2dobGFuLCBBbnRvaW5lIFBpdHJvdSBhbmQgUGF1bGkgVmlydGFuZW4gZm9yIHJldmlldworICBhbmQgbWFueSBpZGVhcy4KKworLSBJc3N1ZSAjMTI4MzQ6IEZpeCBpbmNvcnJlY3QgcmVzdWx0cyBvZiBtZW1vcnl2aWV3LnRvYnl0ZXMoKSBmb3IKKyAgbm9uLWNvbnRpZ3VvdXMgYXJyYXlzLgorCistIElzc3VlICM1MjMxOiBJbnRyb2R1Y2UgbWVtb3J5dmlldy5jYXN0KCkgbWV0aG9kIHRoYXQgYWxsb3dzIGNoYW5naW5nCisgIGZvcm1hdCBhbmQgc2hhcGUgd2l0aG91dCBtYWtpbmcgYSBjb3B5IG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KKworLSBJc3N1ZSAjMTQwODQ6IEZpeCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIHdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlIHdpdGggYQorICBiYWQgZW5jb2RpbmcuCisKKy0gVXBncmFkZSBVbmljb2RlIGRhdGEgdG8gVW5pY29kZSA2LjEuCisKKy0gSXNzdWUgIzE0MDQwOiBSZW1vdmUgcmFyZWx5IHVzZWQgZmlsZSBuYW1lIHN1ZmZpeGVzIGZvciBDIGV4dGVuc2lvbnMKKyAgKHVuZGVyIFBPU0lYIG1haW5seSkuCisKKy0gSXNzdWUgIzE0MDUxOiBBbGxvdyBhcmJpdHJhcnkgYXR0cmlidXRlcyB0byBiZSBzZXQgb2YgY2xhc3NtZXRob2QgYW5kCisgIHN0YXRpY21ldGhvZC4KKworLSBJc3N1ZSAjMTM3MDM6IG9DRVJULTIwMTEtMDAzOiBSYW5kb21pemUgaGFzaGVzIG9mIHN0ciBhbmQgYnl0ZXMgdG8gcHJvdGVjdAorICBhZ2FpbnN0IGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFja3MgZHVlIHRvIGhhc2ggY29sbGlzaW9ucyB3aXRoaW4gdGhlIGRpY3QgYW5kCisgIHNldCB0eXBlcy4gIFBhdGNoIGJ5IERhdmlkIE1hbGNvbG0sIGJhc2VkIG9uIHdvcmsgYnkgVmljdG9yIFN0aW5uZXIuCisKKy0gSXNzdWUgIzEzMDIwOiBGaXggYSByZWZlcmVuY2UgbGVhayB3aGVuIGFsbG9jYXRpbmcgYSBzdHJ1Y3RzZXF1ZW5jZSBvYmplY3QKKyAgZmFpbHMuICBQYXRjaCBieSBTdW1hbiBTYWhhLgorCistIElzc3VlICMxMzkwODogUmVhZHkgdHlwZXMgcmV0dXJuZWQgZnJvbSBQeVR5cGVfRnJvbVNwZWMuCisKKy0gSXNzdWUgIzExMjM1OiBGaXggT3ZlcmZsb3dFcnJvciB3aGVuIHRyeWluZyB0byBpbXBvcnQgYSBzb3VyY2UgZmlsZSB3aG9zZQorICBtb2RpZmljYXRpb24gdGltZSBkb2Vzbid0IGZpdCBpbiBhIDMyLWJpdCB0aW1lc3RhbXAuCisKKy0gSXNzdWUgIzEyNzA1OiBBIFN5bnRheEVycm9yIGV4Y2VwdGlvbiBpcyBub3cgcmFpc2VkIHdoZW4gYXR0ZW1wdGluZyB0bworICBjb21waWxlIG11bHRpcGxlIHN0YXRlbWVudHMgYXMgYSBzaW5nbGUgaW50ZXJhY3RpdmUgc3RhdGVtZW50LgorCistIEZpeCB0aGUgYnVpbHRpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gY29kZSB0byBzdG9yZSB0aGUgaW5pdCBmdW5jdGlvbiBmb3IKKyAgZnV0dXJlIHJlaW5pdGlhbGl6YXRpb24uCisKKy0gSXNzdWUgIzgwNTI6IFRoZSBwb3NpeCBzdWJwcm9jZXNzIG1vZHVsZSB3b3VsZCB0YWtlIGEgbG9uZyB0aW1lIGNsb3NpbmcKKyAgYWxsIHBvc3NpYmxlIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIGNoaWxkIHByb2Nlc3MgcmF0aGVyIHRoYW4ganVzdCBvcGVuCisgIGZpbGUgZGVzY3JpcHRvcnMuICBJdCBub3cgY2xvc2VzIG9ubHkgdGhlIG9wZW4gZmRzIGlmIHBvc3NpYmxlIGZvciB0aGUKKyAgZGVmYXVsdCBjbG9zZV9mZHM9VHJ1ZSBiZWhhdmlvci4KKworLSBJc3N1ZSAjMTM2Mjk6IFJlbnVtYmVyIHRoZSB0b2tlbnMgaW4gdG9rZW4uaCBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIGluZGV4ZXMKKyAgaW50byBfUHlQYXJzZXJfVG9rZW5OYW1lcy4KKworLSBJc3N1ZSAjMTM3NTI6IEFkZCBhIGNhc2Vmb2xkKCkgbWV0aG9kIHRvIHN0ci4KKworLSBJc3N1ZSAjMTM3NjE6IEFkZCBhICJmbHVzaCIga2V5d29yZCBhcmd1bWVudCB0byB0aGUgcHJpbnQoKSBmdW5jdGlvbiwKKyAgdXNlZCB0byBlbnN1cmUgZmx1c2hpbmcgdGhlIG91dHB1dCBzdHJlYW0uCisKKy0gSXNzdWUgIzEzNjQ1OiBweWMgZmlsZXMgbm93IGNvbnRhaW4gdGhlIHNpemUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlCisgIGNvZGUsIHRvIGF2b2lkIHRpbWVzdGFtcCBjb2xsaXNpb25zIChlc3BlY2lhbGx5IG9uIGZpbGVzeXN0ZW1zIHdpdGggYSBsb3cKKyAgdGltZXN0YW1wIHJlc29sdXRpb24pIHdoZW4gY2hlY2tpbmcgZm9yIGZyZXNobmVzcyBvZiB0aGUgYnl0ZWNvZGUuCisKKy0gUEVQIDM4MCwgSXNzdWUgIzExNjgyOiBBZGQgInlpZWxkIGZyb20gPHg+IiB0byBzdXBwb3J0IGVhc3kgZGVsZWdhdGlvbiB0bworICBzdWJnZW5lcmF0b3JzIChpbml0aWFsIHBhdGNoIGJ5IEdyZWcgRXdpbmcsIGludGVncmF0aW9uIGludG8gMy4zIGJ5CisgIFJlbmF1ZCBCbGFuY2gsIFJ5YW4gS2VsbHksIFpiaWduaWV3IErEmWRyemVqZXdza2ktU3ptZWsgYW5kIE5pY2sgQ29naGxhbikKKworLSBJc3N1ZSAjMTM3NDg6IFJhdyBieXRlcyBsaXRlcmFscyBjYW4gbm93IGJlIHdyaXR0ZW4gd2l0aCB0aGUgYGByYmBgIHByZWZpeAorICBhcyB3ZWxsIGFzIGBgYnJgYC4KKworLSBJc3N1ZSAjMTI3MzY6IFVzZSBmdWxsIHVuaWNvZGUgY2FzZSBtYXBwaW5ncyBmb3IgdXBwZXIsIGxvd2VyLCBhbmQgdGl0bGUgY2FzZS4KKworLSBJc3N1ZSAjMTI3NjA6IEFkZCBhIGNyZWF0ZSBtb2RlIHRvIG9wZW4oKS4gUGF0Y2ggYnkgRGF2aWQgVG93bnNoZW5kLgorCistIElzc3VlICMxMzczODogU2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2YgYnl0ZXMubG93ZXIoKSBhbmQgYnl0ZXMudXBwZXIoKS4KKworLSBJc3N1ZSAjMTM1Nzc6IEJ1aWx0LWluIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBub3cgaGF2ZSBhIF9fcXVhbG5hbWVfXy4KKyAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICM2Njk1OiBGdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiBydW5zIG5vdyBjbGVhciB0aGUgZnJlZWxpc3Qgb2Ygc2V0CisgIG9iamVjdHMuICBJbml0aWFsIHBhdGNoIGJ5IE1hdHRoaWFzIFRyb2ZmYWVzLgorCistIEZpeCBPU0Vycm9yLl9faW5pdF9fIGFuZCBPU0Vycm9yLl9fbmV3X18gc28gdGhhdCBlYWNoIG9mIHRoZW0gY2FuIGJlCisgIG92ZXJyaWRlbiBhbmQgdGFrZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoZm9sbG93dXAgdG8gaXNzdWUgIzEyNTU1KS4KKworLSBGaXggdGhlIGZpeCBmb3IgaXNzdWUgIzEyMTQ5OiBpdCB3YXMgaW5jb3JyZWN0LCBhbHRob3VnaCBpdCBoYWQgdGhlIHNpZGUKKyAgZWZmZWN0IG9mIGFwcGVhcmluZyB0byByZXNvbHZlIHRoZSBpc3N1ZS4gIFRoYW5rcyB0byBNYXJrIFNoYW5ub24gZm9yCisgIG5vdGljaW5nLgorCistIElzc3VlICMxMzUwNTogUGlja2xlIGJ5dGVzIG9iamVjdHMgaW4gYSB3YXkgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgKKyAgUHl0aG9uIDIgd2hlbiB1c2luZyBwcm90b2NvbHMgPD0gMi4KKworLSBJc3N1ZSAjMTExNDc6IEZpeCBhbiB1bnVzZWQgYXJndW1lbnQgaW4gX1B5X0FOTk9UQVRFX01FTU9SWV9PUkRFUi4gIChGaXgKKyAgZ2l2ZW4gYnkgQ2FtcGJlbGwgQmFydG9uKS4KKworLSBJc3N1ZSAjMTM1MDM6IFVzZSBhIG1vcmUgZWZmaWNpZW50IHJlZHVjdGlvbiBmb3JtYXQgZm9yIGJ5dGVhcnJheXMgd2l0aAorICBwaWNrbGUgcHJvdG9jb2wgPj0gMy4gIFRoZSBvbGQgcmVkdWN0aW9uIGZvcm1hdCBpcyBrZXB0IHdpdGggb2xkZXIgcHJvdG9jb2xzCisgIGluIG9yZGVyIHRvIGFsbG93IHVucGlja2xpbmcgdW5kZXIgUHl0aG9uIDIuICBQYXRjaCBieSBJcm1lbiBkZSBKb25nLgorCistIElzc3VlICM3MTExOiBQeXRob24gY2FuIG5vdyBiZSBydW4gd2l0aG91dCBhIHN0ZGluLCBzdGRvdXQgb3Igc3RkZXJyCisgIHN0cmVhbS4gIEl0IHdhcyBhbHJlYWR5IHRoZSBjYXNlIHdpdGggUHl0aG9uIDIuICBIb3dldmVyLCB0aGUgY29ycmVzcG9uZGluZworICBzeXMgbW9kdWxlIGVudHJpZXMgYXJlIG5vdyBzZXQgdG8gTm9uZSAoaW5zdGVhZCBvZiBhbiB1bnVzYWJsZSBmaWxlIG9iamVjdCkuCisKKy0gSXNzdWUgIzExODQ5OiBFbnN1cmUgdGhhdCBmcmVlKClkIG1lbW9yeSBhcmVuYXMgYXJlIHJlYWxseSByZWxlYXNlZAorICBvbiBQT1NJWCBzeXN0ZW1zIHN1cHBvcnRpbmcgYW5vbnltb3VzIG1lbW9yeSBtYXBwaW5ncy4gIFBhdGNoIGJ5CisgIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTM0NTI6IFB5VW5pY29kZV9FbmNvZGVEZWNpbWFsKCkgZG9lc24ndCBzdXBwb3J0IGVycm9yIGhhbmRsZXJzCisgIGRpZmZlcmVudCB0aGFuICJzdHJpY3QiIGFueW1vcmUuIFRoZSBjYWxsZXIgd2FzIHVuYWJsZSB0byBjb21wdXRlIHRoZQorICBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyOiBpdCBkZXBlbmRzIG9uIHRoZSBlcnJvciBoYW5kbGVyLgorCistIFBFUCAzMTU1IC8gaXNzdWUgIzEzNDQ4OiBRdWFsaWZpZWQgbmFtZSBmb3IgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLgorCistIElzc3VlICMxMzQzNjogRml4IGEgYm9ndXMgZXJyb3IgbWVzc2FnZSB3aGVuIGFuIEFTVCBvYmplY3Qgd2FzIHBhc3NlZAorICBhbiBpbnZhbGlkIGludGVnZXIgdmFsdWUuCisKKy0gSXNzdWUgIzEzNDExOiBtZW1vcnl2aWV3IG9iamVjdHMgYXJlIG5vdyBoYXNoYWJsZSB3aGVuIHRoZSB1bmRlcmx5aW5nCisgIG9iamVjdCBpcyBoYXNoYWJsZS4KKworLSBJc3N1ZSAjMTMzMzg6IEhhbmRsZSBhbGwgZW51bWVyYXRpb25zIGluIF9QeV9BTk5PVEFURV9NRU1PUllfT1JERVIKKyAgdG8gYWxsb3cgY29tcGlsaW5nIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggLVdzd2l0Y2gtZW51bSBvbiBnY2MuCisgIEluaXRpYWwgcGF0Y2ggYnkgRmxvcmlzIEJydXlub29naGUuCisKKy0gSXNzdWUgIzEwMjI3OiBBZGQgYW4gYWxsb2NhdGlvbiBjYWNoZSBmb3IgYSBzaW5nbGUgc2xpY2Ugb2JqZWN0LiAgUGF0Y2ggYnkKKyAgU3RlZmFuIEJlaG5lbC4KKworLSBJc3N1ZSAjMTMzOTM6IEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKCkgbm93IGFza3MgdGhlIGZ1bGwgcmVxdWVzdGVkIHNpemUgdG8KKyAgdGhlIHJhdyBzdHJlYW0gaW5zdGVhZCBvZiBsaW1pdGluZyBpdHNlbGYgdG8gdGhlIGJ1ZmZlciBzaXplLgorCistIElzc3VlICMxMzM5MjogV3JpdGluZyBhIHB5YyBmaWxlIHNob3VsZCBub3cgYmUgYXRvbWljIHVuZGVyIFdpbmRvd3MgYXMgd2VsbC4KKworLSBJc3N1ZSAjMTMzMzM6IFRoZSBVVEYtNyBkZWNvZGVyIG5vdyBhY2NlcHRzIGxvbmUgc3Vycm9nYXRlcyAodGhlIGVuY29kZXIKKyAgYWxyZWFkeSBhY2NlcHRzIHRoZW0pLgorCistIElzc3VlICMxMzM4OTogRnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzc2VzIG5vdyBjbGVhciB0aGUgZnJlZWxpc3RzIGZvcgorICBsaXN0IGFuZCBkaWN0IG9iamVjdHMuICBUaGV5IGFscmVhZHkgY2xlYXJlZCBvdGhlciBmcmVlbGlzdHMgaW4gdGhlCisgIGludGVycHJldGVyLgorCistIElzc3VlICMxMzMyNzogUmVtb3ZlIHRoZSBuZWVkIGZvciBhbiBleHBsaWNpdCBOb25lIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQKKyAgdG8gb3MudXRpbWUsIG9zLmx1dGltZXMsIG9zLmZ1dGltZXMsIG9zLmZ1dGltZW5zLCBvcy5mdXRpbWVzYXQsIGluCisgIG9yZGVyIHRvIHVwZGF0ZSB0byB0aGUgY3VycmVudCB0aW1lLiBBbHNvIGFkZGVkIGtleXdvcmQgYXJndW1lbnQKKyAgaGFuZGxpbmcgdG8gb3MudXRpbWVuc2F0IGluIG9yZGVyIHRvIHJlbW92ZSB0aGUgbmVlZCBmb3IgZXhwbGljaXQgTm9uZS4KKworLSBJc3N1ZSAjMTMzNTA6IFNpbXBsaWZ5IHNvbWUgQyBjb2RlIGJ5IHJlcGxhY2luZyBtb3N0IHVzYWdlcyBvZgorICBQeVVuaWNvZGVfRm9ybWF0IGJ5IFB5VW5pY29kZV9Gcm9tRm9ybWF0LgorCistIElzc3VlICMxMzM0MjogaW5wdXQoKSB1c2VkIHRvIGlnbm9yZSBzeXMuc3RkaW4ncyBhbmQgc3lzLnN0ZG91dCdzIHVuaWNvZGUKKyAgZXJyb3IgaGFuZGxlciBpbiBpbnRlcmFjdGl2ZSBtb2RlICh3aGVuIGNhbGxpbmcgaW50byBQeU9TX1JlYWRsaW5lKCkpLgorCistIElzc3VlICM5ODk2OiBBZGQgc3RhcnQsIHN0b3AsIGFuZCBzdGVwIGF0dHJpYnV0ZXMgdG8gcmFuZ2Ugb2JqZWN0cy4KKworLSBJc3N1ZSAjMTMzNDM6IEZpeCBhIFN5c3RlbUVycm9yIHdoZW4gYSBsYW1iZGEgZXhwcmVzc2lvbiB1c2VzIGEgZ2xvYmFsCisgIHZhcmlhYmxlIGluIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50OiBgYGxhbWJkYSAqLAorICBhcmc9R0xPQkFMX05BTUU6IE5vbmVgYAorCistIElzc3VlICMxMjc5NzogQWRkZWQgY3VzdG9tIG9wZW5lciBwYXJhbWV0ZXIgdG8gYnVpbHRpbiBvcGVuKCkgYW5kCisgIEZpbGVJTy5vcGVuKCkuCisKKy0gSXNzdWUgIzEwNTE5OiBBdm9pZCB1bm5lY2Vzc2FyeSByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgaW4KKyAgc2V0b2JqZWN0LmMuCisKKy0gSXNzdWUgIzEwMzYzOiBEZWFsbG9jYXRlIGdsb2JhbCBsb2NrcyBpbiBQeV9GaW5hbGl6ZSgpLgorCistIElzc3VlICMxMzAxODogRml4IHJlZmVyZW5jZSBsZWFrcyBpbiBlcnJvciBwYXRocyBpbiBkaWN0b2JqZWN0LmMuCisgIFBhdGNoIGJ5IFN1bWFuIFNhaGEuCisKKy0gSXNzdWUgIzEzMjAxOiBEZWZpbmUgJz09JyBhbmQgJyE9JyB0byBjb21wYXJlIHJhbmdlIG9iamVjdHMgYmFzZWQgb24KKyAgdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGV5IGRlZmluZSAoaW5zdGVhZCBvZiBjb21wYXJpbmcgYmFzZWQgb24KKyAgb2JqZWN0IGlkZW50aXR5KS4KKworLSBJc3N1ZSAjMTI5NDIzMjogSW4gYSBmZXcgY2FzZXMgaW52b2x2aW5nIG1ldGFjbGFzcyBpbmhlcml0YW5jZSwgdGhlCisgIGludGVycHJldGVyIHdvdWxkIHNvbWV0aW1lcyBpbnZva2UgdGhlIHdyb25nIG1ldGFjbGFzcyB3aGVuIGJ1aWxkaW5nIGEgbmV3CisgIGNsYXNzIG9iamVjdC4gVGhlc2UgY2FzZXMgbm93IGJlaGF2ZSBjb3JyZWN0bHkuIFBhdGNoIGJ5IERhbmllbCBVcmJhbi4KKworLSBJc3N1ZSAjMTI3NTM6IEFkZCBzdXBwb3J0IGZvciBVbmljb2RlIG5hbWUgYWxpYXNlcyBhbmQgbmFtZWQgc2VxdWVuY2VzLgorICBCb3RoIGBgdW5pY29kZWRhdGEubG9va3VwKClgYCBhbmQgJ1xOey4uLn0nIG5vdyByZXNvbHZlIGFsaWFzZXMsCisgIGFuZCBgYHVuaWNvZGVkYXRhLmxvb2t1cCgpYGAgcmVzb2x2ZXMgbmFtZWQgc2VxdWVuY2VzIHRvby4KKworLSBJc3N1ZSAjMTIxNzA6IFRoZSBjb3VudCgpLCBmaW5kKCksIHJmaW5kKCksIGluZGV4KCkgYW5kIHJpbmRleCgpIG1ldGhvZHMKKyAgb2YgYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIG5vdyBhY2NlcHQgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NQorICBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4gIFBhdGNoIGJ5IFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMjYwNDogVlRSQUNFIG1hY3JvIGV4cGFuZGVkIHRvIG5vLW9wIGluIF9zcmUuYyB0byBhdm9pZCBjb21waWxlcgorICB3YXJuaW5ncy4gUGF0Y2ggYnkgSm9zaCBUcmlwbGV0dCBhbmQgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEyMjgxOiBSZXdyaXRlIHRoZSBNQkNTIGNvZGVjIHRvIGhhbmRsZSBjb3JyZWN0bHkgcmVwbGFjZSBhbmQgaWdub3JlCisgIGVycm9yIGhhbmRsZXJzIG9uIGFsbCBXaW5kb3dzIHZlcnNpb25zLiBUaGUgTUJDUyBjb2RlYyBpcyBub3cgc3VwcG9ydGluZyBhbGwKKyAgZXJyb3IgaGFuZGxlcnMsIGluc3RlYWQgb2Ygb25seSByZXBsYWNlIHRvIGVuY29kZSBhbmQgaWdub3JlIHRvIGRlY29kZS4KKworLSBJc3N1ZSAjMTMxODg6IFdoZW4gY2FsbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgdHJhY2ViYWNrIGFyZ3VtZW50LAorICBnZW5lcmF0b3IudGhyb3coKSBub3cgZ2V0cyB0aGUgdHJhY2ViYWNrIGZyb20gdGhlIHBhc3NlZCBleGNlcHRpb24ncworICBgYF9fdHJhY2ViYWNrX19gYCBhdHRyaWJ1dGUuICBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTMxNDY6IFdyaXRpbmcgYSBweWMgZmlsZSBpcyBub3cgYXRvbWljIHVuZGVyIFBPU0lYLgorCistIElzc3VlICM3ODMzOiBFeHRlbnNpb24gbW9kdWxlcyBidWlsdCB1c2luZyBkaXN0dXRpbHMgb24gV2luZG93cyB3aWxsIG5vCisgIGxvbmdlciBpbmNsdWRlIGEgIm1hbmlmZXN0IiB0byBwcmV2ZW50IHRoZW0gZmFpbGluZyBhdCBpbXBvcnQgdGltZSBpbiBzb21lCisgIGVtYmVkZGVkIHNpdHVhdGlvbnMuCisKKy0gUEVQIDMxNTEgLyBpc3N1ZSAjMTI1NTU6IHJld29ya2luZyB0aGUgT1MgYW5kIElPIGV4Y2VwdGlvbiBoaWVyYXJjaHkuCisKKy0gSXNzdWUgIzEzNTYwOiBBZGQgUHlVbmljb2RlX0RlY29kZUxvY2FsZSgpLCBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlQW5kU2l6ZSgpCisgIGFuZCBQeVVuaWNvZGVfRW5jb2RlTG9jYWxlKCkgZnVuY3Rpb25zIHRvIHRoZSBDIEFQSSB0byBkZWNvZGUvZW5jb2RlIGZyb20vdG8KKyAgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLgorCistIEFkZCBpbnRlcm5hbCBBUEkgZm9yIHN0YXRpYyBzdHJpbmdzIChfUHlfaWRlbnRpZmllciBldCBhbC4pLgorCistIElzc3VlICMxMzA2MzogdGhlIFdpbmRvd3MgZXJyb3IgRVJST1JfTk9fREFUQSAobnVtYmVyZWQgMjMyIGFuZCBkZXNjcmliZWQKKyAgYXMgIlRoZSBwaXBlIGlzIGJlaW5nIGNsb3NlZCIpIGlzIG5vdyBtYXBwZWQgdG8gUE9TSVggZXJybm8gRVBJUEUKKyAgKHByZXZpb3VzbHkgRUlOVkFMKS4KKworLSBJc3N1ZSAjMTI5MTE6IEZpeCBtZW1vcnkgY29uc3VtcHRpb24gd2hlbiBjYWxjdWxhdGluZyB0aGUgcmVwcigpIG9mIGh1Z2UKKyAgdHVwbGVzIG9yIGxpc3RzLgorCistIFBFUCAzOTM6IGZsZXhpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbi4gVGhhbmtzIHRvIFRvcnN0ZW4gQmVja2VyIGZvciB0aGUKKyAgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwgYW5kIFZpY3RvciBTdGlubmVyIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcy4KKworLSBJc3N1ZSAjMTQwODE6IFRoZSAnc2VwJyBhbmQgJ21heHNwbGl0JyBwYXJhbWV0ZXIgdG8gc3RyLnNwbGl0LCBieXRlcy5zcGxpdCwKKyAgYW5kIGJ5dGVhcnJheS5zcGxpdCBtYXkgbm93IGJlIHBhc3NlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTMwMTI6IFRoZSAna2VlcGVuZHMnIHBhcmFtZXRlciB0byBzdHIuc3BsaXRsaW5lcyBtYXkgbm93IGJlIHBhc3NlZAorICBhcyBhIGtleXdvcmQgYXJndW1lbnQ6ICAibXlfc3RyaW5nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkiLiAgVGhlIHNhbWUKKyAgY2hhbmdlIGFsc28gYXBwbGllcyB0byBieXRlcy5zcGxpdGxpbmVzIGFuZCBieXRlYXJyYXkuc3BsaXRsaW5lcy4KKworLSBJc3N1ZSAjNzczMjogRG9uJ3Qgb3BlbiBhIGRpcmVjdG9yeSBhcyBhIGZpbGUgYW55bW9yZSB3aGlsZSBpbXBvcnRpbmcgYQorICBtb2R1bGUuIElnbm9yZSB0aGUgZGlyZWNvdHJ5IGlmIGl0cyBuYW1lIG1hdGNocyB0aGUgbW9kdWxlIG5hbWUgKGUuZy4KKyAgIl9faW5pdF9fLnB5IikgYW5kIHJhaXNlIGEgSW1wb3J0RXJyb3IgaW5zdGVhZC4KKworLSBJc3N1ZSAjMTMwMjE6IE1pc3NpbmcgZGVjcmVmIG9uIGFuIGVycm9yIHBhdGguICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IKKyAgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworLSBJc3N1ZSAjMTI5NzM6IEZpeCBvdmVyZmxvdyBjaGVja3MgdGhhdCByZWxpZWQgb24gdW5kZWZpbmVkIGJlaGF2aW91ciBpbgorICBsaXN0X3JlcGVhdCAobGlzdG9iamVjdC5jKSBhbmQgaXNsaWNlX25leHQgKGl0ZXJ0b29sc21vZHVsZS5jKS4gIFRoZXNlIGJ1Z3MKKyAgY2F1c2VkIHRlc3QgZmFpbHVyZXMgd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgQ2xhbmcuCisKKy0gSXNzdWUgIzEyOTA0OiBvcy51dGltZSwgb3MuZnV0aW1lcywgb3MubHV0aW1lcywgYW5kIG9zLmZ1dGltZXNhdCBub3cgd3JpdGUKKyAgYXRpbWUgYW5kIG10aW1lIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24gb24gbW9kZXJuIFBPU0lYIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI4MDI6IHRoZSBXaW5kb3dzIGVycm9yIEVSUk9SX0RJUkVDVE9SWSAobnVtYmVyZWQgMjY3KSBpcyBub3cKKyAgbWFwcGVkIHRvIFBPU0lYIGVycm5vIEVOT1RESVIgKHByZXZpb3VzbHkgRUlOVkFMKS4KKworLSBJc3N1ZSAjOTIwMDogVGhlIHN0ci5pcyogbWV0aG9kcyBub3cgd29yayB3aXRoIHN0cmluZ3MgdGhhdCBjb250YWluIG5vbi1CTVAKKyAgY2hhcmFjdGVycyBldmVuIGluIG5hcnJvdyBVbmljb2RlIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTI3OTE6IEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgZWFybHkgd2hlbiBhIGdlbmVyYXRvciBleGl0cyB3aXRoCisgIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTI3NzM6IE1ha2UgX19kb2NfXyBtdXRhYmxlIG9uIHVzZXItZGVmaW5lZCBjbGFzc2VzLgorCistIElzc3VlICMxMjc2NjogUmFpc2UgYSBWYWx1ZUVycm9yIHdoZW4gY3JlYXRpbmcgYSBjbGFzcyB3aXRoIGEgY2xhc3MgdmFyaWFibGUKKyAgdGhhdCBjb25mbGljdHMgd2l0aCBhIG5hbWUgaW4gX19zbG90c19fLgorCistIElzc3VlICMxMjI2NjogRml4IHN0ci5jYXBpdGFsaXplKCkgdG8gY29ycmVjdGx5IHVwcGVyY2FzZS9sb3dlcmNhc2UKKyAgdGl0bGVjYXNlZCBhbmQgY2FzZWQgbm9uLWxldHRlciBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxMjczMjogSW4gbmFycm93IHVuaWNvZGUgYnVpbGRzLCBhbGxvdyBVbmljb2RlIGlkZW50aWZpZXJzIHdoaWNoIGZhbGwKKyAgb3V0c2lkZSB0aGUgQk1QLgorCistIElzc3VlICMxMjU3NTogVmFsaWRhdGUgdXNlci1nZW5lcmF0ZWQgQVNUIGJlZm9yZSBpdCBpcyBjb21waWxlZC4KKworLSBNYWtlIHR5cGUoTm9uZSksIHR5cGUoRWxsaXBzaXMpLCBhbmQgdHlwZShOb3RJbXBsZW1lbnRlZCkgY2FsbGFibGUuIFRoZXkKKyAgcmV0dXJuIHRoZSByZXNwZWN0aXZlIHNpbmdsZXRvbiBpbnN0YW5jZXMuCisKKy0gRm9yYmlkIHN1bW1pbmcgYnl0ZXMgd2l0aCBzdW0oKS4KKworLSBWZXJpZnkgdGhlIHR5cGVzIG9mIEFTVCBzdHJpbmdzIGFuZCBpZGVudGlmaWVycyBwcm92aWRlZCBieSB0aGUgdXNlciBiZWZvcmUKKyAgY29tcGlsaW5nIHRoZW0uCisKKy0gSXNzdWUgIzEyNjQ3OiBUaGUgTm9uZSBvYmplY3Qgbm93IGhhcyBhIF9fYm9vbF9fKCkgbWV0aG9kIHRoYXQgcmV0dXJucyBGYWxzZS4KKyAgRm9ybWVybHksIGJvb2woTm9uZSkgcmV0dXJuZWQgRmFsc2Ugb25seSBiZWNhdXNlIG9mIHNwZWNpYWwgY2FzZSBsb2dpYworICBpbiBQeU9iamVjdF9Jc1RydWUoKS4KKworLSBJc3N1ZSAjMTI1Nzk6IHN0ci5mb3JtYXRfbWFwKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdXNlZCBvbiBhCisgIGZvcm1hdCBzdHJpbmcgdGhhdCBjb250YWlucyBwb3NpdGlvbmFsIGZpZWxkcy4gSW5pdGlhbCBwYXRjaCBieQorICBKdWxpYW4gQmVybWFuLgorCistIElzc3VlICMxMDI3MTogQWxsb3cgd2FybmluZ3Muc2hvd3dhcm5pbmcoKSBiZSBhbnkgY2FsbGFibGUuCisKKy0gSXNzdWUgIzExNjI3OiBGaXggc2VnZmF1bHQgd2hlbiBfX25ld19fIG9uIGEgZXhjZXB0aW9uIHJldHVybnMgYQorICBub24tZXhjZXB0aW9uIGNsYXNzLgorCistIElzc3VlICMxMjE0OTogVXBkYXRlIHRoZSBtZXRob2QgY2FjaGUgYWZ0ZXIgYSB0eXBlJ3MgZGljdGlvbmFyeSBnZXRzCisgIGNsZWFyZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiAgVGhpcyBmaXhlcyBhIHNlZ2ZhdWx0IHdoZW4gYW4gaW5zdGFuY2UKKyAgYW5kIGl0cyB0eXBlIGdldCBjYXVnaHQgaW4gYSByZWZlcmVuY2UgY3ljbGUsIGFuZCB0aGUgaW5zdGFuY2UncworICBkZWFsbG9jYXRvciBjYWxscyBvbmUgb2YgdGhlIG1ldGhvZHMgb24gdGhlIHR5cGUgKGUuZy4gd2hlbiBzdWJjbGFzc2luZworICBJT0Jhc2UpLiAgRGlhZ25vc2lzIGFuZCBwYXRjaCBieSBEYXZpZGUgUml6em8uCisKKy0gSXNzdWUgIzk2MTEsICM5MDE1OiBGaWxlSU8ucmVhZCgpIGNsYW1wcyB0aGUgbGVuZ3RoIHRvIElOVF9NQVggb24gV2luZG93cy4KKworLSBJc3N1ZSAjOTY0MjogVW5pZm9ybWl6ZSB0aGUgdGVzdHMgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgbWJjcyBjb2RlYywgYWRkCisgIGEgbmV3IEhBVkVfTUJDUyBkZWZpbmUuCisKKy0gSXNzdWUgIzk2NDI6IEZpeCBmaWxlc3lzdGVtIGVuY29kaW5nIGluaXRpYWxpemF0aW9uOiB1c2UgdGhlIEFOU0kgY29kZSBwYWdlCisgIG9uIFdpbmRvd3MgaWYgdGhlIG1iY3MgY29kZWMgaXMgbm90IGF2YWlsYWJsZSwgYW5kIGZhaWwgd2l0aCBhIGZhdGFsIGVycm9yIGlmCisgIHdlIGNhbm5vdCBnZXQgdGhlIGxvY2FsZSBlbmNvZGluZyAoaWYgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm90IGF2YWlsYWJsZSkKKyAgaW5zdGVhZCBvZiB1c2luZyBVVEYtOC4KKworLSBXaGVuIGEgZ2VuZXJhdG9yIHlpZWxkcywgZG8gbm90IHJldGFpbiB0aGUgY2FsbGVyJ3MgZXhjZXB0aW9uIHN0YXRlIG9uIHRoZQorICBnZW5lcmF0b3IuCisKKy0gSXNzdWUgIzEyNDc1OiBQcmV2ZW50IGdlbmVyYXRvcnMgZnJvbSBsZWFraW5nIHRoZWlyIGV4Y2VwdGlvbiBzdGF0ZSBpbnRvIHRoZQorICBjYWxsZXIncyBmcmFtZSBhcyB0aGV5IHJldHVybiBmb3IgdGhlIGxhc3QgdGltZS4KKworLSBJc3N1ZSAjMTIyOTE6IFlvdSBjYW4gbm93IGxvYWQgbXVsdGlwbGUgbWFyc2hhbGxlZCBvYmplY3RzIGZyb20gYSBzdHJlYW0sCisgIHdpdGggb3RoZXIgZGF0YSBpbnRlcmxlYXZlZCBiZXR3ZWVuIG1hcnNoYWxsZWQgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTIzNTY6IFdoZW4gcmVxdWlyZWQgcG9zaXRpb25hbCBvciBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIGFyZSBub3QKKyAgZ2l2ZW4sIHByb2R1Y2UgYSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIHdoaWNoIGluY2x1ZGVzIHRoZSBuYW1lKHMpIG9mIHRoZQorICBtaXNzaW5nIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTIzNzA6IEZpeCBzdXBlciB3aXRoIG5vIGFyZ3VtZW50cyB3aGVuIF9fY2xhc3NfXyBpcyBvdmVycmlkZW4gaW4gdGhlCisgIGNsYXNzIGJvZHkuCisKKy0gSXNzdWUgIzEyMDg0OiBvcy5zdGF0IG9uIFdpbmRvd3Mgbm93IHdvcmtzIHByb3Blcmx5IHdpdGggcmVsYXRpdmUgc3ltYm9saWMKKyAgbGlua3Mgd2hlbiBjYWxsZWQgZnJvbSBhbnkgZGlyZWN0b3J5LgorCistIExvb3NlbiB0eXBlIHJlc3RyaWN0aW9ucyBvbiB0aGUgX19kaXJfXyBtZXRob2QuIF9fZGlyX18gY2FuIG5vdyByZXR1cm4gYW55CisgIHNlcXVlbmNlLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGxpc3QgYW5kIHNvcnRlZCBieSBkaXIoKS4KKworLSBJc3N1ZSAjMTIyNjU6IE1ha2UgZXJyb3IgbWVzc2FnZXMgcHJvZHVjZWQgYnkgcGFzc2luZyBhbiBpbnZhbGlkIHNldCBvZgorICBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiBtb3JlIGluZm9ybWF0aXZlLgorCistIElzc3VlICMxMjIyNTogU3RpbGwgYWxsb3cgUHl0aG9uIHRvIGJ1aWxkIGlmIFB5dGhvbiBpcyBub3QgaW4gaXRzIGhnIHJlcG8gb3IKKyAgbWVyY3VyaWFsIGlzIG5vdCBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzExOTU6IG15X2ZnZXRzKCkgbm93IGFsd2F5cyBjbGVhcnMgZXJyb3JzIGJlZm9yZSBjYWxsaW5nIGZnZXRzKCkuIEZpeAorICB0aGUgZm9sbG93aW5nIGNhc2U6IHN5cy5zdGRpbi5yZWFkKCkgc3RvcHBlZCB3aXRoIENUUkwrZCAoZW5kIG9mIGZpbGUpLAorICByYXdfaW5wdXQoKSBpbnRlcnJ1cHRlZCBieSBDVFJMK2MuCisKKy0gSXNzdWUgIzEyMjE2OiBBbGxvdyB1bmV4cGVjdGVkIEVPRiBlcnJvcnMgdG8gaGFwcGVuIG9uIGFueSBsaW5lIG9mIHRoZSBmaWxlLgorCistIElzc3VlICMxMjE5OTogVGhlIFRyeUV4Y2VwdCBhbmQgVHJ5RmluYWxseSBhbmQgQVNUIG5vZGVzIGhhdmUgYmVlbiB1bmlmaWVkCisgIGludG8gYSBUcnkgbm9kZS4KKworLSBJc3N1ZSAjOTY3MDogSW5jcmVhc2UgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3Igc2Vjb25kYXJ5IHRocmVhZHMgb24KKyAgTWFjIE9TIFggYW5kIEZyZWVCU0QgdG8gcmVkdWNlIHRoZSBjaGFuY2VzIG9mIGEgY3Jhc2ggaW5zdGVhZCBvZiBhCisgICJtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCIgUnVudGltZUVycm9yIGV4Y2VwdGlvbi4KKyAgKHBhdGNoIGJ5IFJvbmFsZCBPdXNzb3JlbikKKworLSBJc3N1ZSAjMTIxMDY6IFRoZSB1c2Ugb2YgdGhlIG11bHRpcGxlLXdpdGggc2hvcnRoYW5kIHN5bnRheCBpcyBub3cgcmVmbGVjdGVkCisgIGluIHRoZSBBU1QuCisKKy0gSXNzdWUgIzEyMTkwOiBUcnkgdG8gdXNlIHRoZSBzYW1lIGZpbGVuYW1lIG9iamVjdCB3aGVuIGNvbXBpbGluZyB1bm1hcnNoYWxsaW5nCisgIGEgY29kZSBvYmplY3RzIGluIHRoZSBzYW1lIGZpbGUuCisKKy0gSXNzdWUgIzEyMTY2OiBNb3ZlIGltcGxlbWVudGF0aW9ucyBvZiBkaXIoKSBzcGVjaWFsaXplZCBmb3IgdmFyaW91cyB0eXBlcyBpbnRvCisgIHRoZSBfX2Rpcl9fKCkgbWV0aG9kcyBvZiB0aG9zZSB0eXBlcy4KKworLSBJc3N1ZSAjNTcxNTogSW4gc29ja2V0c2VydmVyLCBjbG9zZSB0aGUgc2VydmVyIHNvY2tldCBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KKworLSBDb3JyZWN0IGxvb2t1cCBvZiBfX2Rpcl9fIG9uIG9iamVjdHMuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBjYXVzZXMgZXJyb3JzCisgIGJlc2lkZXMgQXR0cmlidXRlRXJyb3IgZm91bmQgb24gbG9va3VwIHRvIGJlIHByb3BhZ2F0ZWQuCisKKy0gSXNzdWUgIzEyMDYwOiBVc2Ugc2lnX2F0b21pY190IHR5cGUgYW5kIHZvbGF0aWxlIGtleXdvcmQgaW4gdGhlIHNpZ25hbAorICBtb2R1bGUuIFBhdGNoIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxNzQ2NjU2OiBBZGRlZCB0aGUgaWZfbmFtZWluZGV4LCBpZl9pbmRleHRvbmFtZSwgaWZfbmFtZXRvaW5kZXgKKyAgbWV0aG9kcyB0byB0aGUgc29ja2V0IG1vZHVsZS4KKworLSBJc3N1ZSAjMTIwNDQ6IEZpeGVkIHN1YnByb2Nlc3MuUG9wZW4gd2hlbiB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIHRvCisgIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGVuZCB3aGVuIGV4aXRpbmcgdGhlIGNvbnRleHQgdG8gYXZvaWQgdW5pbnRlbnRpb25hbGx5CisgIGxlYXZpbmcgem9tYmllIHByb2Nlc3NlcyBhcm91bmQuCisKKy0gSXNzdWUgIzExOTU6IEZpeCBpbnB1dCgpIGlmIGl0IGlzIGludGVycnVwdGVkIGJ5IENUUkwrZCBhbmQgdGhlbiBDVFJMK2MsCisgIGNsZWFyIHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgYWZ0ZXIgQ1RSTCtkLgorCistIElzc3VlICMxODU2OiBBdm9pZCBjcmFzaGVzIGFuZCBsb2NrdXBzIHdoZW4gZGFlbW9uIHRocmVhZHMgcnVuIHdoaWxlIHRoZQorICBpbnRlcnByZXRlciBpcyBzaHV0dGluZyBkb3duOyBpbnN0ZWFkLCB0aGVzZSB0aHJlYWRzIGFyZSBub3cga2lsbGVkIHdoZW4KKyAgdGhleSB0cnkgdG8gdGFrZSB0aGUgR0lMLgorCistIElzc3VlICM5NzU2OiBXaGVuIGNhbGxpbmcgYSBtZXRob2QgZGVzY3JpcHRvciBvciBhIHNsb3Qgd3JhcHBlciBkZXNjcmlwdG9yLAorICB0aGUgY2hlY2sgb2YgdGhlIG9iamVjdCB0eXBlIGRvZXNuJ3QgcmVhZCB0aGUgX19jbGFzc19fIGF0dHJpYnV0ZSBhbnltb3JlLgorICBGaXggYSBjcmFzaCBpZiBhIGNsYXNzIG92ZXJyaWRlIGl0cyBfX2NsYXNzX18gYXR0cmlidXRlIChlLmcuIGEgcHJveHkgb2YgdGhlCisgIHN0ciB0eXBlKS4gUGF0Y2ggd3JpdHRlbiBieSBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzEwNTE3OiBBZnRlciBmb3JrKCksIHJlaW5pdGlhbGl6ZSB0aGUgVExTIHVzZWQgYnkgdGhlIFB5R0lMU3RhdGVfKgorICBBUElzLCB0byBhdm9pZCBhIGNyYXNoIHdpdGggdGhlIHB0aHJlYWQgaW1wbGVtZW50YXRpb24gaW4gUkhFTCA1LiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMDkxNDogSW5pdGlhbGl6ZSBjb3JyZWN0bHkgdGhlIGZpbGVzeXN0ZW0gY29kZWMgd2hlbiBjcmVhdGluZyBhIG5ldworICBzdWJpbnRlcnByZXRlciB0byBmaXggYSBib290c3RyYXAgaXNzdWUgd2l0aCBjb2RlY3MgaW1wbGVtZW50ZWQgaW4gUHl0aG9uLCBhcworICB0aGUgSVNPLTg4NTktMTUgY29kZWMuCisKKy0gSXNzdWUgIzExOTE4OiBPUy8yIGFuZCBWTVMgYXJlIG5vIG1vcmUgc3VwcG9ydGVkIGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YKKyAgbWFpbnRhaW5lci4KKworLSBJc3N1ZSAjNjc4MDogZml4IHN0YXJ0cy9lbmRzd2l0aCBlcnJvciBtZXNzYWdlIHRvIG1lbnRpb24gdGhhdCB0dXBsZXMgYXJlCisgIGFjY2VwdGVkIHRvby4KKworLSBJc3N1ZSAjNTA1NzogZml4IGEgYnVnIGluIHRoZSBwZWVwaG9sZXIgdGhhdCBsZWQgdG8gbm9uLXBvcnRhYmxlIHB5YyBmaWxlcworICBiZXR3ZWVuIG5hcnJvdyBhbmQgd2lkZSBidWlsZHMgd2hpbGUgb3B0aW1pemluZyBCSU5BUllfU1VCU0NSIG9uIG5vbi1CTVAKKyAgY2hhcnMgKGUuZy4gIlxVMDAwMTIzNDUiWzBdKS4KKworLSBJc3N1ZSAjMTE4NDU6IEZpeCB0eXBvIGluIHJhbmdlb2JqZWN0LmMgdGhhdCBjYXVzZWQgYSBjcmFzaCBpbgorICBjb21wdXRlX3NsaWNlX2luZGljZXMuICBQYXRjaCBieSBEYW5pZWwgVXJiYW4uCisKKy0gSXNzdWUgIzU2NzM6IEFkZGVkIGEgYHRpbWVvdXRgIGtleXdvcmQgYXJndW1lbnQgdG8gc3VicHJvY2Vzcy5Qb3Blbi53YWl0LAorICBzdWJwcm9jZXNzLlBvcGVuLmNvbW11bmljYXRlZCwgc3VicHJvY2Vzcy5jYWxsLCBzdWJwcm9jZXNzLmNoZWNrX2NhbGwsIGFuZAorICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dC4gIElmIHRoZSBibG9ja2luZyBvcGVyYXRpb24gdGFrZXMgbW9yZSB0aGFuIGB0aW1lb3V0YAorICBzZWNvbmRzLCB0aGUgYHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWRgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKy0gSXNzdWUgIzExNjUwOiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSByZXRyaWVzIGZnZXRzKCkgaWYgaXQgd2FzIGludGVycnVwdGVkCisgIChFSU5UUiksIGZvciBleGFtcGxlIGlmIHRoZSBwcm9ncmFtIGlzIHN0b3BwZWQgd2l0aCBDVFJMK3ogb24gTWFjIE9TIFguIFBhdGNoCisgIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzkzMTk6IEluY2x1ZGUgdGhlIGZpbGVuYW1lIGluICJOb24tVVRGOCBjb2RlIC4uLiIgc3ludGF4IGVycm9yLgorCistIElzc3VlICMxMDc4NTogU3RvcmUgdGhlIGZpbGVuYW1lIGFzIFVuaWNvZGUgaW4gdGhlIFB5dGhvbiBwYXJzZXIuCisKKy0gSXNzdWUgIzExNjE5OiBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUoKSBkb2Vzbid0IGVuY29kZSB0aGUgcGF0aCB0byBieXRlcworICBvbiBXaW5kb3dzLgorCistIElzc3VlICMxMDk5ODogUmVtb3ZlIG1lbnRpb25zIG9mIC1RLCBzeXMuZmxhZ3MuZGl2aXNpb25fd2FybmluZyBhbmQKKyAgUHlfRGl2aXNpb25XYXJuaW5nRmxhZyBsZWZ0IG92ZXIgZnJvbSBQeXRob24gMi4KKworLSBJc3N1ZSAjMTEyNDQ6IFJlbW92ZSBhbiB1bm5lY2Vzc2FyeSBwZWVwaG9sZXIgY2hlY2sgdGhhdCB3YXMgcHJldmVudGluZworICBuZWdhdGl2ZSB6ZXJvcyBmcm9tIGJlaW5nIGNvbnN0YW50LWZvbGRlZCBwcm9wZXJseS4KKworLSBJc3N1ZSAjMTEzOTU6IGlvLkZpbGVJTygpLndyaXRlKCkgY2xhbXBzIHRoZSBkYXRhIGxlbmd0aCB0byAzMiw3NjcgYnl0ZXMgb24KKyAgV2luZG93cyBpZiB0aGUgZmlsZSBpcyBhIFRUWSB0byB3b3JrYXJvdW5kIGEgV2luZG93cyBidWcuIFRoZSBXaW5kb3dzIGNvbnNvbGUKKyAgcmV0dXJucyBhbiBlcnJvciAoMTI6IG5vdCBlbm91Z2ggc3BhY2UgZXJyb3IpIG9uIHdyaXRpbmcgaW50byBzdGRvdXQgaWYKKyAgc3Rkb3V0IG1vZGUgaXMgYmluYXJ5IGFuZCB0aGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA2NiwwMDAgYnl0ZXMgKG9yIGxlc3MsCisgIGRlcGVuZGluZyBvbiBoZWFwIHVzYWdlKS4KKworLSBJc3N1ZSAjMTEzMjA6IGZpeCBib2d1cyBtZW1vcnkgbWFuYWdlbWVudCBpbiBNb2R1bGVzL2dldHBhdGguYywgbGVhZGluZyB0bworICBhIHBvc3NpYmxlIGNyYXNoIHdoZW4gY2FsbGluZyBQeV9TZXRQYXRoKCkuCisKKy0gSXNzdWUgIzExNDMyOiBBIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiBzdWJwcm9jZXNzLlBvcGVuIG9uIHBvc2l4IHN5c3RlbXMgd2l0aAorICAzLjIuMCB3aGVyZSB0aGUgc3Rkb3V0IG9yIHN0ZGVyciBmaWxlIGRlc2NyaXB0b3IgYmVpbmcgdGhlIHNhbWUgYXMgdGhlIHN0ZGluCisgIGZpbGUgZGVzY3JpcHRvciB3b3VsZCByYWlzZSBhbiBleGNlcHRpb24uIHdlYmJyb3dzZXIub3BlbiB3b3VsZCBmYWlsLiBmaXhlZC4KKworLSBJc3N1ZSAjOTg1NjogQ2hhbmdlIG9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZworICB0byBiZSBhIERlcHJlY2F0aW9uV2FybmluZy4gSW4gMy4yIGl0IHdhcyBhIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcuCisgIEluIDMuNCBpdCB3aWxsIGJlIGEgVHlwZUVycm9yLgorCistIElzc3VlICMxMTI0NDogVGhlIHBlZXBob2xlIG9wdGltaXplciBpcyBub3cgYWJsZSB0byBjb25zdGFudC1mb2xkCisgIGFyYml0cmFyaWx5IGNvbXBsZXggZXhwcmVzc2lvbnMuICBUaGlzIGFsc28gZml4ZXMgYSAzLjIgcmVncmVzc2lvbiB3aGVyZQorICBvcGVyYXRpb25zIGludm9sdmluZyBuZWdhdGl2ZSBudW1iZXJzIHdlcmUgbm90IGNvbnN0YW50LWZvbGRlZC4KKworLSBJc3N1ZSAjMTE0NTA6IERvbid0IHRydW5jYXRlIGhnIHZlcnNpb24gaW5mbyBpbiBQeV9HZXRCdWlsZEluZm8oKSB3aGVuCisgIHRoZXJlIGFyZSBtYW55IHRhZ3MgKGUuZy4gd2hlbiB1c2luZyBtcSkuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExMzM1OiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIGxpc3Quc29ydCB3aGVuIHRoZSBrZXkgZnVuY3Rpb24KKyAgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjODkyMzogV2hlbiBhIHN0cmluZyBpcyBlbmNvZGVkIHRvIFVURi04IGluIHN0cmljdCBtb2RlLCB0aGUgcmVzdWx0IGlzCisgIGNhY2hlZCBpbnRvIHRoZSBvYmplY3QuIEV4YW1wbGVzOiBzdHIuZW5jb2RlKCksIHN0ci5lbmNvZGUoJ3V0Zi04JyksCisgIFB5VW5pY29kZV9Bc1VURjhTdHJpbmcoKSBhbmQgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh1bmljb2RlLCAidXRmLTgiLAorICBOVUxMKS4KKworLSBJc3N1ZSAjMTA4MzE6IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgc3VwcG9ydHMgJWxpLCAlbGxpIGFuZCAlemkgZm9ybWF0cy4KKworLSBJc3N1ZSAjMTA4Mjk6IFJlZmFjdG9yIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCksIHVzZSB0aGUgc2FtZSBmdW5jdGlvbiB0byBwYXJzZQorICB0aGUgZm9ybWF0IHN0cmluZyBpbiB0aGUgMyBzdGVwcywgZml4IGNyYXNocyBvbiBpbnZhbGlkIGZvcm1hdCBzdHJpbmdzLgorCistIElzc3VlICMxMzAwNzogd2hpY2hkYiBzaG91bGQgcmVjb2duaXplIGdkYm0gMS45IG1hZ2ljIG51bWJlcnMuCisKKy0gSXNzdWUgIzExMjQ2OiBGaXggUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVWIikgdG8gZGVjb2RlIHRoZSBieXRlIHN0cmluZyBmcm9tCisgIFVURi04ICh3aXRoIHJlcGxhY2UgZXJyb3IgaGFuZGxlcikgaW5zdGVhZCBvZiBJU08tODg1OS0xIChpbiBzdHJpY3QgbW9kZSkuCisgIFBhdGNoIHdyaXR0ZW4gYnkgUmF5IEFsbGVuLgorCistIElzc3VlICMxMTI4NjogUmFpc2UgYSBWYWx1ZUVycm9yIGZyb20gY2FsbGluZyBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlciB3aXRoCisgIGEgYnVmZmVyIHN0cnVjdCBoYXZpbmcgYSBOVUxMIGRhdGEgcG9pbnRlci4KKworLSBJc3N1ZSAjMTEyNzI6IE9uIFdpbmRvd3MsIGlucHV0KCkgc3RyaXBzICdccicgKGFuZCBub3Qgb25seSAnXG4nKSwgYW5kCisgIHN5cy5zdGRpbiB1c2VzIHVuaXZlcnNhbCBuZXdsaW5lIChyZXBsYWNlICdcclxuJyBieSAnXG4nKS4KKworLSBJc3N1ZSAjMTE4Mjg6IHN0YXJ0c3dpdGggYW5kIGVuZHN3aXRoIG5vdyBhY2NlcHQgTm9uZSBhcyBzbGljZSBpbmRleC4KKyAgUGF0Y2ggYnkgVG9yc3RlbiBCZWNrZXIuCisKKy0gSXNzdWUgIzEwODMwOiBGaXggUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCIlYyIpIGZvciBub24tQk1QIGNoYXJhY3RlcnMgb24KKyAgbmFycm93IGJ1aWxkLgorCistIElzc3VlICMxMTE2ODogUmVtb3ZlIGZpbGVuYW1lIGRlYnVnIHZhcmlhYmxlIGZyb20gUHlFdmFsX0V2YWxGcmFtZUV4KCkuCisgIEl0IGVuY29kZWQgdGhlIFVuaWNvZGUgZmlsZW5hbWUgdG8gVVRGLTgsIGJ1dCB0aGUgZW5jb2RpbmcgZmFpbHMgb24KKyAgdW5kZWNvZGFibGUgZmlsZW5hbWUgKG9uIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzKSB3aGljaCByYWlzZXMgYW4gdW5leHBlY3RlZAorICBVbmljb2RlRW5jb2RlRXJyb3Igb24gcmVjdXJzaW9uIGxpbWl0LgorCistIElzc3VlICMxMTE4NzogUmVtb3ZlIGJvb3RzdHJhcCBjb2RlICh1c2UgQVNDSUkpIG9mCisgIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoKSwgaXQgd2FzIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIGZhbGxiYWNrICh1c2UgdGhlCisgIGxvY2FsZSBlbmNvZGluZykgaW4gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdCgpLgorCistIENoZWNrIGZvciBOVUxMIHJlc3VsdCBpbiBQeVR5cGVfRnJvbVNwZWMuCisKKy0gSXNzdWUgIzEwNTE2OiBOZXcgY29weSgpIGFuZCBjbGVhcigpIG1ldGhvZHMgZm9yIGxpc3RzIGFuZCBieXRlYXJyYXlzLgorCistIElzc3VlICMxMTM4NjogYnl0ZWFycmF5LnBvcCgpIG5vdyB0aHJvd3MgSW5kZXhFcnJvciB3aGVuIHRoZSBieXRlYXJyYXkgaXMKKyAgZW1wdHksIGluc3RlYWQgb2YgT3ZlcmZsb3dFcnJvci4KKworLSBJc3N1ZSAjMTIzODA6IFRoZSByanVzdCwgbGp1c3QgYW5kIGNlbnRlciBtZXRob2RzIG9mIGJ5dGVzIGFuZCBieXRlYXJyYXkKKyAgbm93IGFjY2VwdCBhIGJ5dGVhcnJheSBhcmd1bWVudC4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNDE5NTogQW4gaXNzdWUgdGhhdCBjYXVzZWQgd2Vha3JlZi5XZWFrU2V0IGluc3RhbmNlcyB0byBpbmNvcnJlY3RseQorICByZXR1cm4gVHJ1ZSBmb3IgYSBXZWFrU2V0IGluc3RhbmNlICdhJyBpbiBib3RoICdhIDwgYScgYW5kICdhID4gYScgaGFzIGJlZW4KKyAgZml4ZWQuCisKKy0gSXNzdWUgIzE0MTY2OiBQaWNrbGVyIG9iamVjdHMgbm93IGhhdmUgYW4gb3B0aW9uYWwgYGBkaXNwYXRjaF90YWJsZWBgCisgIGF0dHJpYnV0ZSB3aGljaCBhbGxvd3MgdG8gc2V0IGN1c3RvbSBwZXItcGlja2xlciByZWR1Y3Rpb24gZnVuY3Rpb25zLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0MTc3OiBtYXJzaGFsLmxvYWRzKCkgbm93IHJhaXNlcyBUeXBlRXJyb3Igd2hlbiBnaXZlbiBhbiB1bmljb2RlCisgIHN0cmluZy4gIFBhdGNoIGJ5IEd1aWxoZXJtZSBHb27Dp2FsdmVzLgorCistIElzc3VlICMxMzU1MDogUmVtb3ZlIHRoZSBkZWJ1ZyBtYWNoaW5lcnkgZnJvbSB0aGUgdGhyZWFkaW5nIG1vZHVsZTogcmVtb3ZlCisgIHZlcmJvc2UgYXJndW1lbnRzIGZyb20gYWxsIHRocmVhZGluZyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE0MTU5OiBGaXggdGhlIGxlbigpIG9mIHdlYWsgY29udGFpbmVycyAoV2Vha1NldCwgV2Vha0tleURpY3Rpb25hcnksCisgIFdlYWtWYWx1ZURpY3Rpb25hcnkpIHRvIHJldHVybiBhIGJldHRlciBhcHByb3hpbWF0aW9uIHdoZW4gc29tZSBvYmplY3RzCisgIGFyZSBkZWFkIG9yIGR5aW5nLiAgTW9yZW92ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3cgTygxKSByYXRoZXIgdGhhbgorICBPKG4pLgorCistIElzc3VlICMxMzEyNTogU2lsZW5jZSBzcHVyaW91cyB0ZXN0X2xpYjJ0bzMgb3V0cHV0IHdoZW4gaW4gbm9uLXZlcmJvc2UgbW9kZS4KKyAgUGF0Y2ggYnkgTWlraGFpbCBOb3Zpa292LgorCistIElzc3VlICMxMTg0MTogRml4IGNvbXBhcmlzb24gYnVnIHdpdGggJ3JjJyB2ZXJzaW9ucyBpbiBwYWNrYWdpbmcudmVyc2lvbi4KKyAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTM0NDc6IEFkZCBhIHRlc3QgZmlsZSB0byBob3N0IHJlZ3Jlc3Npb24gdGVzdHMgZm9yIGJ1Z3MgaW4gdGhlCisgIHNjcmlwdHMgZm91bmQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjNjg4NDogRml4IGxvbmctc3RhbmRpbmcgYnVncyB3aXRoIE1BTklGRVNULmluIHBhcnNpbmcgaW4gZGlzdHV0aWxzCisgIG9uIFdpbmRvd3MuICBBbHNvIGZpeGVkIGluIHBhY2thZ2luZy4KKworLSBJc3N1ZSAjODAzMzogc3FsaXRlMzogRml4IDY0LWJpdCBpbnRlZ2VyIGhhbmRsaW5nIGluIHVzZXIgZnVuY3Rpb25zCisgIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiBJbml0aWFsIHBhdGNoIGJ5IFBoaWxpcHBlIERldmFsa2VuZWVyLgorCistIEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIHNsYXNoZXMgaW4gdGhlIHN0YXJ0IHRhZy4KKworLSBJc3N1ZSAjMTM2NDE6IERlY29kaW5nIGZ1bmN0aW9ucyBpbiB0aGUgYmFzZTY0IG1vZHVsZSBub3cgYWNjZXB0IEFTQ0lJLW9ubHkKKyAgdW5pY29kZSBzdHJpbmdzLiAgUGF0Y2ggYnkgQ2F0YWxpbiBJYWNvYi4KKworLSBJc3N1ZSAjMTQwNDM6IFNwZWVkIHVwIGltcG9ydGxpYidzIF9GaWxlRmluZGVyIGJ5IGF0IGxlYXN0IDh4LCBhbmQgYWRkIGEKKyAgbmV3IGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIGZ1bmN0aW9uLgorCistIElzc3VlICMxNDAwMTogQ1ZFLTIwMTItMDg0NTogeG1scnBjOiBGaXggYW4gZW5kbGVzcyBsb29wIGluCisgIFNpbXBsZVhNTFJQQ1NlcnZlciB1cG9uIG1hbGZvcm1lZCBQT1NUIHJlcXVlc3QuCisKKy0gSXNzdWUgIzEzOTYxOiBNb3ZlIGltcG9ydGxpYiBvdmVyIHRvIHVzaW5nIG9zLnJlcGxhY2UoKSBmb3IgYXRvbWljIHJlbmFtaW5nLgorCistIERvIGF3YXkgd2l0aCBhbWJpZ3VvdXMgbGV2ZWwgdmFsdWVzIChhcyBzdWdnZXN0ZWQgYnkgUEVQIDMyOCkgaW4KKyAgaW1wb3J0bGliLl9faW1wb3J0X18oKSBieSByYWlzaW5nIFZhbHVlRXJyb3Igd2hlbiBsZXZlbCA8IDAuCisKKy0gSXNzdWUgIzI0ODk6IHB0eS5zcGF3biBjb3VsZCBjb25zdW1lIDEwMCUgY3B1IHdoZW4gaXQgZW5jb3VudGVyZWQgYW4gRU9GLgorCistIElzc3VlICMxMzAxNDogRml4IGEgcG9zc2libGUgcmVmZXJlbmNlIGxlYWsgaW4gU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkuCisKKy0gSXNzdWUgIzEzNzc3OiBBZGQgUEZfU1lTVEVNIHNvY2tldHMgb24gT1MgWC4KKyAgUGF0Y2ggYnkgTWljaGFlbCBHb2RlcmJhdWVyLgorCistIElzc3VlICMxMzAxNTogRml4IGEgcG9zc2libGUgcmVmZXJlbmNlIGxlYWsgaW4gZGVmYXVsdGRpY3QuX19yZXByX18uCisgIFBhdGNoIGJ5IFN1bWFuIFNhaGEuCisKKy0gSXNzdWUgIzEzMjYxMTM6IGRpc3R1dGlscycgYW5kIHBhY2thZ2luZydzIGJ1aWxkX2V4dCBjb21tYW5kcyBvcHRpb24gbm93CisgIGNvcnJlY3RseSBwYXJzZXMgbXVsdGlwbGUgdmFsdWVzIChzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSBvciBjb21tYXMpIGdpdmVuCisgIHRvIHRoZWlyIC0tbGlicmFyaWVzIG9wdGlvbi4KKworLSBJc3N1ZSAjMTAyODc6IG5udHBsaWIgbm93IHF1ZXJpZXMgdGhlIHNlcnZlcidzIENBUEFCSUxJVElFUyBmaXJzdCBiZWZvcmUKKyAgc2VuZGluZyBNT0RFIFJFQURFUiwgYW5kIG9ubHkgc2VuZHMgaXQgaWYgbm90IGFscmVhZHkgaW4gUkVBREVSIG1vZGUuCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM5OTM6IEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIGJyb2tlbiBlbmQgdGFncyB3aGVuCisgIHN0cmljdD1GYWxzZS4KKworLSBJc3N1ZSAjMTM5MzA6IGxpYjJ0bzMgbm93IHN1cHBvcnRzIHdyaXRpbmcgY29udmVydGVkIG91dHB1dCBmaWxlcyB0byBhbm90aGVyCisgIGRpcmVjdG9yeSB0cmVlIGFzIHdlbGwgYXMgY29weWluZyB1bmNoYW5nZWQgZmlsZXMgYW5kIGFsdGVyaW5nIHRoZSBmaWxlCisgIHN1ZmZpeC4KKworLSBJc3N1ZSAjOTc1MDogRml4IHNxbGl0ZTMuQ29ubmVjdGlvbi5pdGVyZHVtcCBvbiB0YWJsZXMgYW5kIGZpZWxkcworICB3aXRoIGEgbmFtZSB0aGF0IGlzIGEga2V5d29yZCBvciBjb250YWlucyBxdW90ZXMuIFBhdGNoIGJ5IE1hcmtvCisgIEtvaHRhbGEuCisKKy0gSXNzdWUgIzEwMjg3OiBubnRwbGliIG5vdyBxdWVyaWVzIHRoZSBzZXJ2ZXIncyBDQVBBQklMSVRJRVMgYWdhaW4gYWZ0ZXIKKyAgYXV0aGVudGljYXRpbmcgKHNpbmNlIHRoZSByZXN1bHQgbWF5IGNoYW5nZSwgYWNjb3JkaW5nIHRvIFJGQyA0NjQzKS4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzk4OTogRG9jdW1lbnQgdGhhdCBHemlwRmlsZSBkb2VzIG5vdCBzdXBwb3J0IHRleHQgbW9kZSwgYW5kIGdpdmUgYQorICBtb3JlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSB3aGVuIG9wZW5lZCB3aXRoIGFuIGludmFsaWQgbW9kZSBzdHJpbmcuCisKKy0gSXNzdWUgIzEzNTkwOiBPbiBPUyBYIDEwLjcgYW5kIDEwLjYgd2l0aCBYY29kZSA0LjIsIGJ1aWxkaW5nCisgIERpc3R1dGlscy1iYXNlZCBwYWNrYWdlcyB3aXRoIEMgZXh0ZW5zaW9uIG1vZHVsZXMgbWF5IGZhaWwgYmVjYXVzZQorICBBcHBsZSBoYXMgcmVtb3ZlZCBnY2MtNC4yLCB0aGUgdmVyc2lvbiB1c2VkIHRvIGJ1aWxkIHB5dGhvbi5vcmcKKyAgNjQtYml0LzMyLWJpdCBQeXRob25zLiAgSWYgdGhlIHVzZXIgZG9lcyBub3QgZXhwbGljaXRseSBvdmVycmlkZQorICB0aGUgZGVmYXVsdCBDIGNvbXBpbGVyIGJ5IHNldHRpbmcgdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlLAorICBEaXN0dXRpbHMgd2lsbCBub3cgYXR0ZW1wdCB0byBjb21waWxlIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggY2xhbmcKKyAgaWYgZ2NjLTQuMiBpcyByZXF1aXJlZCBidXQgbm90IGZvdW5kLiBBbHNvIGFzIGEgY29udmVuaWVuY2UsIGlmCisgIHRoZSB1c2VyIGRvZXMgZXhwbGljaXRseSBzZXQgQ0MsIHN1YnN0aXR1dGUgaXRzIHZhbHVlIGFzIHRoZSBkZWZhdWx0CisgIGNvbXBpbGVyIGluIHRoZSBEaXN0dXRpbHMgTERTSEFSRUQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IgT1MgWC4KKyAgKE5vdGUsIHRoZSBweXRob24ub3JnIDMyLWJpdC1vbmx5IFB5dGhvbnMgdXNlIGdjYy00LjAgYW5kIHRoZSAxMC40dQorICBTREssIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGF2YWlsYWJsZSBpbiBYY29kZSA0LiAgVGhpcyBjaGFuZ2UgZG9lcyBub3QKKyAgYXR0ZW1wdCB0byBvdmVycmlkZSBzZXR0aW5ncyB0byBzdXBwb3J0IHRoZWlyIHVzZSB3aXRoIFhjb2RlIDQuKQorCistIElzc3VlICMxMzk2MDogSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgYnJva2VuIGNvbW1lbnRzIHdoZW4KKyAgc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMzkyMTogVW5kb2N1bWVudCBhbmQgY2xlYW4gdXAgc3FsaXRlMy5PcHRpbWl6ZWRVbmljb2RlLAorICB3aGljaCBpcyBvYnNvbGV0ZSBpbiBQeXRob24gMy54LiBJdCdzIG5vdyBhbGlhc2VkIHRvIHN0ciBmb3IKKyAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKy0gV2hlbiAnJyBpcyBhIHBhdGggKGUuZy4gaW4gc3lzLnBhdGgpLCBtYWtlIHN1cmUgX19maWxlX18gdXNlcyB0aGUgY3VycmVudAorICB3b3JraW5nIGRpcmVjdG9yeSBpbnN0ZWFkIG9mICcnIGluIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTM2MDk6IEFkZCB0d28gZnVuY3Rpb25zIHRvIHF1ZXJ5IHRoZSB0ZXJtaW5hbCBzaXplOgorICBvcy5nZXRfdGVybWluYWxfc2l6ZSAobG93IGxldmVsKSBhbmQgc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplIChoaWdoIGxldmVsKS4KKyAgUGF0Y2ggYnkgWmJpZ25pZXcgSsSZZHJ6ZWpld3NraS1Tem1lay4KKworLSBJc3N1ZSAjMTM4NDU6IE9uIFdpbmRvd3MsIHRpbWUudGltZSgpIG5vdyB1c2VzIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCkKKyAgaW5zdGVhZCBvZiBmdGltZSgpIHRvIGhhdmUgYSByZXNvbHV0aW9uIG9mIDEwMCBucyBpbnN0ZWFkIG9mIDEgbXMgKHRoZSBjbG9jaworICBhY2N1cmFjeSBpcyBiZXR3ZWVuIDAuNSBtcyBhbmQgMTUgbXMpLgorCistIElzc3VlICMxMzg0NjogQWRkIHRpbWUubW9ub3RvbmljKCksIG1vbm90b25pYyBjbG9jay4KKworLSBJc3N1ZSAjODE4NDogbXVsdGlwcm9jZXNzaW5nOiBPbiBXaW5kb3dzLCBkb24ndCBzZXQgU09fUkVVU0VBRERSIG9uCisgIENvbm5lY3Rpb24gc29ja2V0cywgYW5kIHNldCBGSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRSBvbiBuYW1lZCBwaXBlcywgdG8KKyAgbWFrZSBzdXJlIHR3byBsaXN0ZW5lcnMgY2FuJ3QgYmluZCB0byB0aGUgc2FtZSBzb2NrZXQvcGlwZSAob3IgYW55IGV4aXN0aW5nCisgIHNvY2tldC9waXBlKS4KKworLSBJc3N1ZSAjMTA4MTE6IEZpeCByZWN1cnNpdmUgdXNhZ2Ugb2YgY3Vyc29ycy4gSW5zdGVhZCBvZiBjcmFzaGluZywKKyAgcmFpc2UgYSBQcm9ncmFtbWluZ0Vycm9yIG5vdy4KKworLSBJc3N1ZSAjMTA4ODE6IEZpeCB0ZXN0X3NpdGUgZmFpbHVyZSB3aXRoIE9TIFggZnJhbWV3b3JrIGJ1aWxkcy4KKworLSBJc3N1ZSAjOTY0NDM3OiBNYWtlIElETEUgaGVscCB3aW5kb3cgbm9uLW1vZGFsLgorICBQYXRjaCBieSBHdWlsaGVybWUgUG9sbyBhbmQgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzEzNzM0OiBBZGQgb3MuZndhbGsoKSwgYSBkaXJlY3Rvcnkgd2Fsa2luZyBmdW5jdGlvbiB5aWVsZGluZyBmaWxlCisgIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMyOTQ1OiBNYWtlIHRoZSBkaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQgYXdhcmUgb2YgYmRpc3RfcnBtIHByb2R1Y3RzLgorCistIElzc3VlICMxMzcxMjogcHlzZXR1cCBjcmVhdGUgc2hvdWxkIG5vdCBjb252ZXJ0IHBhY2thZ2VfZGF0YSB0byBleHRyYV9maWxlcy4KKworLSBJc3N1ZSAjMTE4MDU6IHBhY2thZ2VfZGF0YSBpbiBzZXR1cC5jZmcgc2hvdWxkIGFsbG93IG1vcmUgdGhhbiBvbmUgdmFsdWUuCisKKy0gSXNzdWUgIzEzOTMzOiBJRExFIGF1dG8tY29tcGxldGUgZGlkIG5vdCB3b3JrIHdpdGggc29tZSBpbXBvcnRlZAorICBtb2R1bGUsIGxpa2UgaGFzaGxpYi4gIChQYXRjaCBieSBSb2dlciBTZXJ3eSkKKworLSBJc3N1ZSAjMTM5MDE6IFByZXZlbnQgdGVzdF9kaXN0dXRpbHMgZmFpbHVyZXMgb24gT1MgWCB3aXRoIC0tZW5hYmxlLXNoYXJlZC4KKworLSBJc3N1ZSAjMTM2NzY6IEhhbmRsZSBzdHJpbmdzIHdpdGggZW1iZWRkZWQgemVyb3MgY29ycmVjdGx5IGluIHNxbGl0ZTMuCisKKy0gSXNzdWUgIzEzNTA2OiBBZGQgJycgdG8gcGF0aCBmb3IgSURMRSBTaGVsbCB3aGVuIHN0YXJ0ZWQgYW5kIHJlc3RhcnRlZCB3aXRoIFJlc3RhcnQgU2hlbGwuCisgIE9yaWdpbmFsIHBhdGNoZXMgYnkgTWFyY28gU2NhdGFnbGluaSBhbmQgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzg4Mjg6IEFkZCBuZXcgZnVuY3Rpb24gb3MucmVwbGFjZSgpLCBmb3IgY3Jvc3MtcGxhdGZvcm0gcmVuYW1pbmcKKyAgd2l0aCBvdmVyd3JpdGluZy4KKworLSBJc3N1ZSAjMTM4NDg6IG9wZW4oKSBhbmQgdGhlIEZpbGVJTyBjb25zdHJ1Y3RvciBub3cgY2hlY2sgZm9yIE5VTAorICBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIG5hbWUuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEzODA2OiBUaGUgc2l6ZSBjaGVjayBpbiBhdWRpb29wIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zIHdhcyB0b28KKyAgc3RyaWN0IGFuZCBjb3VsZCByZWplY3QgdmFsaWQgY29tcHJlc3NlZCBkYXRhLiAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KKworLSBJc3N1ZSAjMTM4MTI6IFdoZW4gYSBtdWx0aXByb2Nlc3NpbmcgUHJvY2VzcyBjaGlsZCByYWlzZXMgYW4gZXhjZXB0aW9uLAorICBmbHVzaCBzdGRlcnIgYWZ0ZXIgcHJpbnRpbmcgdGhlIGV4Y2VwdGlvbiB0cmFjZWJhY2suCisKKy0gSXNzdWUgIzEzODg1OiBDVkUtMjAxMS0zMzg5OiB0aGUgX3NzbCBtb2R1bGUgd291bGQgYWx3YXlzIGRpc2FibGUgdGhlIENCQworICBJViBhdHRhY2sgY291bnRlcm1lYXN1cmUuCisKKy0gSXNzdWUgIzEzODQ3OiB0aW1lLmxvY2FsdGltZSgpIGFuZCB0aW1lLmdtdGltZSgpIG5vdyByYWlzZSBhbiBPU0Vycm9yIGluc3RlYWQKKyAgb2YgVmFsdWVFcnJvciBvbiBmYWlsdXJlLiB0aW1lLmN0aW1lKCkgYW5kIHRpbWUuYXNjdGltZSgpIG5vdyByYWlzZXMgYW4KKyAgT1NFcnJvciBpZiBsb2NhbHRpbWUoKSBmYWlsZWQuIHRpbWUuY2xvY2soKSBub3cgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIHRoZQorICBwcm9jZXNzb3IgdGltZSB1c2VkIGlzIG5vdCBhdmFpbGFibGUgb3IgaXRzIHZhbHVlIGNhbm5vdCBiZSByZXByZXNlbnRlZAorCistIElzc3VlICMxMzg2MjogRml4IHNwdXJpb3VzIGZhaWx1cmUgaW4gdGVzdF96bGliIGR1ZSB0byBydW50aW1lL2NvbXBpbGUgdGltZQorICBtaW5vciB2ZXJzaW9ucyBub3QgbWF0Y2hpbmcuCisKKy0gSXNzdWUgIzEyODA0OiBGaXggdGVzdF9zb2NrZXQgYW5kIHRlc3RfdXJsbGliMm5ldCBmYWlsdXJlcyB3aGVuIHJ1bm5pbmcgdGVzdHMKKyAgb24gYSBzeXN0ZW0gd2l0aG91dCBpbnRlcm5ldCBhY2Nlc3MuCisKKy0gSXNzdWUgIzEzNzcyOiBJbiBvcy5zeW1saW5rKCkgdW5kZXIgV2luZG93cywgZG8gbm90IHRyeSB0byBndWVzcyB0aGUgbGluaworICB0YXJnZXQncyB0eXBlIChmaWxlIG9yIGRpcmVjdG9yeSkuICBUaGUgZGV0ZWN0aW9uIHdhcyBidWdneSBhbmQgbWFkZSB0aGUKKyAgY2FsbCBub24tYXRvbWljICh0aGVyZWZvcmUgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zKS4KKworLSBJc3N1ZSAjNjYzMTogRGlzYWxsb3cgcmVsYXRpdmUgZmlsZSBwYXRocyBpbiB1cmxsaWIgdXJsb3BlbiBtZXRob2RzLgorCistIElzc3VlICMxMzcyMjogQXZvaWQgc2lsZW5jaW5nIEltcG9ydEVycm9ycyB3aGVuIGluaXRpYWxpemluZyB0aGUgY29kZWNzCisgIHJlZ2lzdHJ5LgorCistIElzc3VlICMxMzc4MTogRml4IEd6aXBGaWxlIGJ1ZyB0aGF0IGNhdXNlZCBhbiBleGNlcHRpb24gdG8gYmUgcmFpc2VkIHdoZW4KKyAgb3BlbmluZyBmb3Igd3JpdGluZyB1c2luZyBhIGZpbGVvYmogcmV0dXJuZWQgYnkgb3MuZmRvcGVuKCkuCisKKy0gSXNzdWUgIzEzODAzOiBVbmRlciBTb2xhcmlzLCBkaXN0dXRpbHMgZG9lc24ndCBpbmNsdWRlIGJpdG5lc3MKKyAgaW4gdGhlIGRpcmVjdG9yeSBuYW1lLgorCistIElzc3VlICMxMDI3ODogQWRkIHRpbWUud2FsbGNsb2NrKCkgZnVuY3Rpb24sIG1vbm90b25pYyBjbG9jay4KKworLSBJc3N1ZSAjMTM4MDk6IEZpeCByZWdyZXNzaW9uIHdoZXJlIGJ6MiBtb2R1bGUgd291bGRuJ3Qgd29yayB3aGVuIHRocmVhZHMgYXJlCisgIGRpc2FibGVkLiBPcmlnaW5hbCBwYXRjaCBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KKworLSBJc3N1ZSAjMTM1ODk6IEZpeCBzb21lIHNlcmlhbGl6YXRpb24gcHJpbWl0aXZlcyBpbiB0aGUgYWlmYyBtb2R1bGUuCisgIFBhdGNoIGJ5IE9sZWcgUGxha2hvdG55dWsuCisKKy0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyB1c2VyOnBhc3N3b3JkIGR1cmluZyBCYXNpYworICBBdXRoZW50aWNhdGlvbi4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSm9vbmFzIEt1b3JpbGVodG8uCisKKy0gSXNzdWUgIzEzNzI2OiBGaXggdGhlIGFtYmlndW91cyAtUyBmbGFnIGluIHJlZ3J0ZXN0LiBJdCBpcyAtby8tLXNsb3cgZm9yIHNsb3cKKyAgdGVzdHMuCisKKy0gSXNzdWUgIzEyMzY0OiBGaXggYSBoYW5nIGluIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgorICBUaGUgaGFuZyB3b3VsZCBvY2N1ciB3aGVuIHJldHJpZXZpbmcgdGhlIHJlc3VsdCBvZiBhIHNjaGVkdWxlZCBmdXR1cmUgYWZ0ZXIKKyAgdGhlIGV4ZWN1dG9yIGhhZCBiZWVuIHNodXQgZG93bi4KKworLSBJc3N1ZSAjMTM1MDI6IHRocmVhZGluZzogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gRXZlbnQud2FpdCgpIHRoYXQgbWFkZSBpdAorICByZXR1cm4gRmFsc2Ugd2hlbiB0aGUgZXZlbnQgd2FzIHNldCBhbmQgY2xlYXJlZCByaWdodCBhZnRlci4KKworLSBJc3N1ZSAjOTk5MzogV2hlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgb24gZGlmZmVyZW50IGZpbGVzeXN0ZW1zLAorICBhbmQgdGhlIHNvdXJjZSBpcyBhIHN5bWxpbmssIHNodXRpbC5tb3ZlKCkgbm93IHJlY3JlYXRlcyBhIHN5bWxpbmsgb24gdGhlCisgIGRlc3RpbmF0aW9uIGluc3RlYWQgb2YgY29weWluZyB0aGUgZmlsZSBjb250ZW50cy4gIFBhdGNoIGJ5IEpvbmF0aGFuIE5pZWhvZgorICBhbmQgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMjkyNjogRml4IGEgYnVnIGluIHRhcmZpbGUncyBsaW5rIGV4dHJhY3Rpb24uCisKKy0gSXNzdWUgIzEzNjk2OiBGaXggdGhlIDMwMiBSZWxhdGl2ZSBVUkwgUmVkaXJlY3Rpb24gcHJvYmxlbS4KKworLSBJc3N1ZSAjMTM2MzY6IFdlYWsgY2lwaGVycyBhcmUgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHNzbCBtb2R1bGUKKyAgKGV4Y2VwdCB3aGVuIFNTTHYyIGlzIGV4cGxpY2l0bHkgYXNrZWQgZm9yKS4KKworLSBJc3N1ZSAjMTI3MTU6IEFkZCBhbiBvcHRpb25hbCBzeW1saW5rcyBhcmd1bWVudCB0byBzaHV0aWwgZnVuY3Rpb25zCisgIChjb3B5ZmlsZSwgY29weW1vZGUsIGNvcHlzdGF0LCBjb3B5LCBjb3B5MikuICBXaGVuIHRoYXQgcGFyYW1ldGVyIGlzCisgIHRydWUsIHN5bWxpbmtzIGFyZW4ndCBkZXJlZmVyZW5jZWQgYW5kIHRoZSBvcGVyYXRpb24gaW5zdGVhZCBhY3RzIG9uIHRoZQorICBzeW1saW5rIGl0c2VsZiAob3IgY3JlYXRlcyBvbmUsIGlmIHJlbGV2YW50KS4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBBZGQgYSBmbGFncyBwYXJhbWV0ZXIgdG8gc2VsZWN0LmVwb2xsLgorCistIElzc3VlICMxMzYyNjogQWRkIHN1cHBvcnQgZm9yIFNTTCBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UsIHRocm91Z2ggdGhlCisgIFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoKSBtZXRob2QgYW5kIHRoZSBzc2wuT1BfU0lOR0xFX0RIX1VTRSBvcHRpb24uCisKKy0gSXNzdWUgIzExMDA2OiBEb24ndCBpc3N1ZSBsb3cgbGV2ZWwgd2FybmluZyBpbiBzdWJwcm9jZXNzIHdoZW4gcGlwZTIoKSBmYWlscy4KKworLSBJc3N1ZSAjMTM2MjA6IFN1cHBvcnQgZm9yIENocm9tZSBicm93c2VyIGluIHdlYmJyb3dzZXIuICBQYXRjaCBjb250cmlidXRlZAorICBieSBBcm5hdWQgQ2FsbWV0dGVzLgorCistIElzc3VlICMxMTgyOTogRml4IGNvZGUgZXhlY3V0aW9uIGhvbGVzIGluIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgZm9yCisgIG1ldGFjbGFzc2VzIHdpdGggbWV0YWNsYXNzZXMuIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTI3MDg6IEFkZCBzdGFybWFwKCkgYW5kIHN0YXJtYXBfYXN5bmMoKSBtZXRob2RzIChzaW1pbGFyIHRvCisgIGl0ZXJ0b29scy5zdGFybWFwKCkpIHRvIG11bHRpcHJvY2Vzc2luZy5Qb29sLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNzg1OiBGaXggaW5zcGVjdCBhbmQgcHlkb2Mgd2l0aCBtaXNiZWhhdmluZyBkZXNjcmlwdG9ycy4KKworLSBJc3N1ZSAjMTM2Mzc6ICJhMmIiIGZ1bmN0aW9ucyBpbiB0aGUgYmluYXNjaWkgbW9kdWxlIG5vdyBhY2NlcHQgQVNDSUktb25seQorICB1bmljb2RlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzNjM0OiBBZGQgc3VwcG9ydCBmb3IgcXVlcnlpbmcgYW5kIGRpc2FibGluZyBTU0wgY29tcHJlc3Npb24uCisKKy0gSXNzdWUgIzEzNjI3OiBBZGQgc3VwcG9ydCBmb3IgU1NMIEVsbGlwdGljIEN1cnZlLWJhc2VkIERpZmZpZS1IZWxsbWFuCisgIGtleSBleGNoYW5nZSwgdGhyb3VnaCB0aGUgU1NMQ29udGV4dC5zZXRfZWNkaF9jdXJ2ZSgpIG1ldGhvZCBhbmQgdGhlCisgIHNzbC5PUF9TSU5HTEVfRUNESF9VU0Ugb3B0aW9uLgorCistIElzc3VlICMxMzYzNTogQWRkIHNzbC5PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UsIHNvIHRoYXQgU1NMIHNlcnZlcnMKKyAgY2hvb3NlIHRoZSBjaXBoZXIgYmFzZWQgb24gdGhlaXIgb3duIHByZWZlcmVuY2VzLCByYXRoZXIgdGhhbiBvbiB0aGUKKyAgY2xpZW50J3MuCisKKy0gSXNzdWUgIzExODEzOiBGaXggaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyBmb3IgbW9kdWxlcy4gUGF0Y2ggYnkgQW5kcmVhcworICBTdMO8aHJrLgorCistIElzc3VlICM3NTAyOiBGaXggZXF1YWxpdHkgY29tcGFyaXNvbiBmb3IgRG9jVGVzdENhc2UgaW5zdGFuY2VzLiAgUGF0Y2ggYnkKKyAgQ8OpZHJpYyBLcmllci4KKworLSBJc3N1ZSAjMTE4NzA6IHRocmVhZGluZzogUHJvcGVybHkgcmVpbml0aWFsaXplIHRocmVhZHMgaW50ZXJuYWwgbG9ja3MgYW5kCisgIGNvbmRpdGlvbiB2YXJpYWJsZXMgdG8gYXZvaWQgZGVhZGxvY2tzIGluIGNoaWxkIHByb2Nlc3Nlcy4KKworLSBJc3N1ZSAjODAzNTogdXJsbGliOiBGaXggYSBidWcgd2hlcmUgdGhlIGNsaWVudCBjb3VsZCByZW1haW4gc3R1Y2sgYWZ0ZXIgYQorICByZWRpcmVjdGlvbiBvciBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTM1NjA6IG9zLnN0cmVycm9yKCkgbm93IHVzZXMgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nIGluc3RlYWQgb2YKKyAgVVRGLTguCisKKy0gSXNzdWUgIzgzNzM6IFRoZSBmaWxlc3lzdGVtIHBhdGggb2YgQUZfVU5JWCBzb2NrZXRzIG5vdyB1c2VzIHRoZSBmaWxlc3lzdGVtCisgIGVuY29kaW5nIGFuZCB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIsIHJhdGhlciB0aGFuIFVURi04LiAgUGF0Y2gKKyAgYnkgRGF2aWQgV2F0c29uLgorCistIElzc3VlICMxMDM1MDogUmVhZCBhbmQgc2F2ZSBlcnJubyBiZWZvcmUgY2FsbGluZyBhIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0CisgIG92ZXJ3cml0ZSBpdC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEhhbGx2YXJkIEIgRnVydXNldGguCisKKy0gSXNzdWUgIzExNjEwOiBJbnRyb2R1Y2UgYSBtb3JlIGdlbmVyYWwgd2F5IHRvIGRlY2xhcmUgYWJzdHJhY3QgcHJvcGVydGllcy4KKworLSBJc3N1ZSAjMTM1OTE6IEEgYnVnIGluIGltcG9ydGxpYiBoYXMgYmVlbiBmaXhlZCB0aGF0IGNhdXNlZCBpbXBvcnRfbW9kdWxlCisgIHRvIGxvYWQgYSBtb2R1bGUgdHdpY2UuCisKKy0gSXNzdWUgIzQ2MjU6IElmIElETEUgY2Fubm90IHdyaXRlIHRvIGl0cyByZWNlbnQgZmlsZSBvciBicmVha3BvaW50IGZpbGVzLAorICBkaXNwbGF5IGEgbWVzc2FnZSBwb3B1cCBhbmQgY29udGludWUgcmF0aGVyIHRoYW4gY3Jhc2guICBPcmlnaW5hbCBwYXRjaCBieQorICBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTM0NDkgc2NoZWQuc2NoZWR1bGVyLnJ1bigpIG1ldGhvZCBoYXMgYSBuZXcgImJsb2NraW5nIiBwYXJhbWV0ZXIgd2hpY2gKKyAgd2hlbiBzZXQgdG8gRmFsc2UgbWFrZXMgcnVuKCkgZXhlY3V0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50cyBkdWUgdG8gZXhwaXJlCisgIHNvb25lc3QgKGlmIGFueSkgYW5kIHRoZW4gcmV0dXJuLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sw6AuCisKKy0gSXNzdWUgIzg2ODQgc2NoZWQuc2NoZWR1bGVyIGNsYXNzIGNhbiBiZSBzYWZlbHkgdXNlZCBpbiBtdWx0aS10aHJlYWRlZAorICBlbnZpcm9ubWVudHMuICBQYXRjaCBieSBKb3NpYWggQ2FybHNvbiBhbmQgR2lhbXBhb2xvIFJvZG9sw6AuCisKKy0gQWxpYXMgcmVzb3VyY2UuZXJyb3IgdG8gT1NFcnJvciBhbGEgUEVQIDMxNTEuCisKKy0gSXNzdWUgIzU2ODk6IEFkZCBzdXBwb3J0IGZvciBsem1hIGNvbXByZXNzaW9uIHRvIHRoZSB0YXJmaWxlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyNDg6IFR1cm4gMy4yJ3MgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyBpbnRvIDMuMydzCisgIERlcHJlY2F0aW9uV2FybmluZy4gIEl0IGNvdmVycyAnY2dpLmVzY2FwZScsICdpbXBvcnRsaWIuYWJjLlB5TG9hZGVyJywKKyAgJ2ltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXInLCAnbm50cGxpYi5OTlRQLnhndGl0bGUnLCAnbm50cGxpYi5OTlRQLnhwYXRoJywKKyAgYW5kIHByaXZhdGUgYXR0cmlidXRlcyBvZiAnc210cGQuU01UUENoYW5uZWwnLgorCistIElzc3VlICM1OTA1LCAjMTM1NjA6IHRpbWUuc3RyZnRpbWUoKSBpcyBub3cgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlCisgIGVuY29kaW5nLCBpbnN0ZWFkIG9mIFVURi04LCBpZiB0aGUgd2NzZnRpbWUoKSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICM4NjQxOiBVcGRhdGUgSURMRSAzIHN5bnRheCBjb2xvcmluZyB0byByZWNvZ25pemUgYiIuLiIgYW5kIG5vdCB1Ii4uIi4KKyAgUGF0Y2ggYnkgVGFsIEVpbmF0LgorCistIElzc3VlICMxMzQ2NDogQWRkIGEgcmVhZGludG8oKSBtZXRob2QgdG8gaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLiAgUGF0Y2gKKyAgYnkgSm9uIEt1aG4uCisKKy0gdGFyZmlsZS5weTogQ29ycmVjdGx5IGRldGVjdCBiemlwMiBjb21wcmVzc2VkIHN0cmVhbXMgd2l0aCBibG9ja3NpemVzCisgIG90aGVyIHRoYW4gOTAway4KKworLSBJc3N1ZSAjMTM0Mzk6IEZpeCBtYW55IGVycm9ycyBpbiB0dXJ0bGUgZG9jc3RyaW5ncy4KKworLSBJc3N1ZSAjNjcxNTogQWRkIGEgbW9kdWxlICdsem1hJyBmb3IgY29tcHJlc3Npb24gdXNpbmcgdGhlIExaTUEgYWxnb3JpdGhtLgorICBUaGFua3MgdG8gUGVyIMOYeXZpbmQgS2FybHNlbiBmb3IgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzEzNDg3OiBNYWtlIGluc3BlY3QuZ2V0bW9kdWxlIHJvYnVzdCBhZ2FpbnN0IGNoYW5nZXMgZG9uZSB0bworICBzeXMubW9kdWxlcyB3aGlsZSBpdCBpcyBpdGVyYXRpbmcgb3ZlciBpdC4KKworLSBJc3N1ZSAjMTI2MTg6IEZpeCBhIGJ1ZyB0aGF0IHByZXZlbnRlZCBweV9jb21waWxlIGZyb20gY3JlYXRpbmcgYnl0ZQorICBjb21waWxlZCBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBJbml0aWFsIHBhdGNoIGJ5IFNqb2VyZCBkZSBWcmllcy4KKworLSBJc3N1ZSAjMTM0NDQ6IFdoZW4gc3Rkb3V0IGhhcyBiZWVuIGNsb3NlZCBleHBsaWNpdGx5LCB3ZSBzaG91bGQgbm90IGF0dGVtcHQKKyAgdG8gZmx1c2ggaXQgYXQgc2h1dGRvd24gYW5kIHByaW50IGFuIGVycm9yLgorCistIElzc3VlICMxMjU2NzogVGhlIGN1cnNlcyBtb2R1bGUgdXNlcyBVbmljb2RlIGZ1bmN0aW9ucyBmb3IgVW5pY29kZSBhcmd1bWVudHMKKyAgd2hlbiBpdCBpcyBsaW5rZWQgdG8gdGhlIG5jdXJzZXMgbGlicmFyeS4gSXQgZW5jb2RlcyBhbHNvIFVuaWNvZGUgc3RyaW5ncyB0bworICB0aGUgbG9jYWxlIGVuY29kaW5nIGluc3RlYWQgb2YgVVRGLTguCisKKy0gSXNzdWUgIzEyODU2OiBFbnN1cmUgY2hpbGQgcHJvY2Vzc2VzIGRvIG5vdCBpbmhlcml0IHRoZSBwYXJlbnQncyByYW5kb20KKyAgc2VlZCBmb3IgZmlsZW5hbWUgZ2VuZXJhdGlvbiBpbiB0aGUgdGVtcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgQnJpYW4KKyAgSGFycmluZy4KKworLSBJc3N1ZSAjOTk1NzogU3Bvb2xlZFRlbXBvcmFyeUZpbGUudHJ1bmNhdGUoKSBub3cgYWNjZXB0cyBhbiBvcHRpb25hbCBzaXplCisgIHBhcmFtZXRlciwgYXMgb3RoZXIgZmlsZS1saWtlIG9iamVjdHMuICBQYXRjaCBieSBSeWFuIEtlbGx5LgorCistIElzc3VlICMxMzQ1ODogRml4IGEgbWVtb3J5IGxlYWsgaW4gdGhlIHNzbCBtb2R1bGUgd2hlbiBkZWNvZGluZyBhCisgIGNlcnRpZmljYXRlIHdpdGggYSBzdWJqZWN0QWx0TmFtZS4gIFBhdGNoIGJ5IFJvYmVydCBYaWFvLgorCistIElzc3VlICMxMzQxNTogb3MudW5zZXRlbnYoKSBkb2Vzbid0IGlnbm9yZSBlcnJvcnMgYW55bW9yZS4KKworLSBJc3N1ZSAjMTMyNDU6IHNjaGVkLnNjaGVkdWxlciBjbGFzcyBjb25zdHJ1Y3RvcidzIHRpbWVmdW5jIGFuZAorICBkZWxheWZ1bmN0IHBhcmFtZXRlcnMgYXJlIG5vdyBvcHRpb25hbC4KKyAgc2NoZWR1bGVyLmVudGVyIGFuZCBzY2hlZHVsZXIuZW50ZXJhYnMgbWV0aG9kcyBnYWluZWQgYSBuZXcga3dhcmdzIHBhcmFtZXRlci4KKyAgUGF0Y2ggY29udHJpYnV0ZWQgYnkgQ2hyaXMgQ2xhcmsuCisKKy0gSXNzdWUgIzEyMzI4OiBVbmRlciBXaW5kb3dzLCByZWZhY3RvciBoYW5kbGluZyBvZiBDdHJsLUMgZXZlbnRzIGFuZAorICBtYWtlIF9tdWx0aXByb2Nlc3Npbmcud2luMzIuV2FpdEZvck11bHRpcGxlT2JqZWN0cyBpbnRlcnJ1cHRpYmxlIHdoZW4KKyAgdGhlIHdhaXRfZmxhZyBwYXJhbWV0ZXIgaXMgZmFsc2UuICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEzMzIyOiBGaXggQnVmZmVyZWRXcml0ZXIud3JpdGUoKSB0byBlbnN1cmUgdGhhdCBCbG9ja2luZ0lPRXJyb3IgaXMKKyAgcmFpc2VkIHdoZW4gdGhlIHdyYXBwZWQgcmF3IGZpbGUgaXMgbm9uLWJsb2NraW5nIGFuZCB0aGUgd3JpdGUgd291bGQgYmxvY2suCisgIFByZXZpb3VzIGNvZGUgYXNzdW1lZCB0aGF0IHRoZSByYXcgd3JpdGUoKSB3b3VsZCByYWlzZSBCbG9ja2luZ0lPRXJyb3IsIGJ1dAorICBSYXdJT0Jhc2Uud3JpdGUoKSBpcyBkZWZpbmVkIHRvIHJldHVybmVkIE5vbmUgd2hlbiB0aGUgY2FsbCB3b3VsZCBibG9jay4KKyAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxMzM1ODogSFRNTFBhcnNlciBub3cgY2FsbHMgaGFuZGxlX2RhdGEgb25seSBvbmNlIGZvciBlYWNoIENEQVRBLgorCistIElzc3VlICM0MTQ3OiBtaW5pZG9tJ3MgdG9wcmV0dHl4bWwgbm8gbG9uZ2VyIGFkZHMgd2hpdGVzcGFjZSBhcm91bmQgYSB0ZXh0CisgIG5vZGUgd2hlbiBpdCBpcyB0aGUgb25seSBjaGlsZCBvZiBhbiBlbGVtZW50LiAgSW5pdGlhbCBwYXRjaCBieSBEYW4KKyAgS2VuaWdzYmVyZy4KKworLSBJc3N1ZSAjMTMzNzQ6IFRoZSBXaW5kb3dzIGJ5dGVzIEFQSSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIHRoZSBvcyBtb2R1bGUuIFVzZQorICBVbmljb2RlIGZpbGVuYW1lcyBpbnN0ZWFkIG9mIGJ5dGVzIGZpbGVuYW1lcyB0byBub3QgZGVwZW5kIG9uIHRoZSBBTlNJIGNvZGUKKyAgcGFnZSBhbnltb3JlIGFuZCB0byBzdXBwb3J0IGFueSBmaWxlbmFtZS4KKworLSBJc3N1ZSAjMTMyOTc6IFVzZSBieXRlcyB0eXBlIHRvIHNlbmQgYW5kIHJlY2VpdmUgYmluYXJ5IGRhdGEgdGhyb3VnaCBYTUxSUEMuCisKKy0gSXNzdWUgIzYzOTc6IFN1cHBvcnQgIi9kZXYvcG9sbCIgcG9sbGluZyBvYmplY3RzIGluIHNlbGVjdCBtb2R1bGUsCisgIHVuZGVyIFNvbGFyaXMgJiBkZXJpdmF0aXZlcy4KKworLSBJc3N1ZXMgIzE3NDU3NjEsICM3NTU2NzAsICMxMzM1NywgIzEyNjI5LCAjMTIwMDMxMzogSFRNTFBhcnNlciBub3cgY29ycmVjdGx5CisgIGhhbmRsZXMgbm9uLXZhbGlkIGF0dHJpYnV0ZXMsIGluY2x1ZGluZyBhZGphY2VudCBhbmQgdW5xdW90ZWQgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMTMxOTM6IEZpeCBkaXN0dXRpbHMuZmlsZWxpc3QuRmlsZUxpc3QgYW5kIHBhY2thZ2luZy5tYW5pZmVzdC5NYW5pZmVzdAorICB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxMzM4NDogUmVtb3ZlIHVubmVjZXNzYXJ5IF9fZnV0dXJlX18gaW1wb3J0IGluIExpYi9yYW5kb20ucHkKKworLSBJc3N1ZSAjMTMxNDk6IFNwZWVkIHVwIGFwcGVuZC1vbmx5IFN0cmluZ0lPIG9iamVjdHMuCisKKy0gSXNzdWUgIzEzMzczOiBtdWx0aXByb2Nlc3NpbmcuUXVldWUuZ2V0KCkgY291bGQgc29tZXRpbWVzIGJsb2NrIGluZGVmaW5pdGVseQorICB3aGVuIGNhbGxlZCB3aXRoIGEgdGltZW91dC4gIFBhdGNoIGJ5IEFybmF1ZCBZc21hbC4KKworLSBJc3N1ZSAjMTMyNTQ6IEZpeCBNYWlsZGlyIGluaXRpYWxpemF0aW9uIHNvIHRoYXQgbWFpbGRpciBjb250ZW50cworICBhcmUgcmVhZCBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzMwNjc6IGxvY2FsZS5zZXRsb2NhbGUoKSBub3cgcmFpc2VzIFR5cGVFcnJvciBpZiB0aGUgc2Vjb25kCisgIGFyZ3VtZW50IGlzIGFuIGludmFsaWQgaXRlcmFibGUuIEl0cyBkb2N1bWVudGF0aW9uIGFuZCBkb2NzdHJpbmcKKyAgd2VyZSBhbHNvIHVwZGF0ZWQuIEluaXRpYWwgcGF0Y2ggYnkgSnlya2kgUHVsbGlhaW5lbi4KKworLSBJc3N1ZSAjMTMxNDA6IEZpeCB0aGUgZGFlbW9uX3RocmVhZHMgYXR0cmlidXRlIG9mIFRocmVhZGluZ01peEluLgorCistIElzc3VlICMxMzMzOTogRml4IGNvbXBpbGUgZXJyb3IgaW4gcG9zaXhtb2R1bGUuYyBkdWUgdG8gbWlzc2luZyBzZW1pY29sb24uCisgIFRoYW5rcyB0byBSb2JlcnQgWGlhby4KKworLSBCeXRlIGNvbXBpbGF0aW9uIGluIHBhY2thZ2luZyBpcyBub3cgaXNvbGF0ZWQgZnJvbSB0aGUgY2FsbGluZyBQeXRob24gLUIgb3IKKyAgLU8gb3B0aW9ucywgaW5zdGVhZCBvZiBiZWluZyBkaXNhbGxvd2VkIHVuZGVyIC1CIG9yIGJ1Z2d5IHVuZGVyIC1PLgorCistIElzc3VlICMxMDU3MDogY3Vyc2VzLnB1dHAoKSBhbmQgY3Vyc2VzLnRwYXJtKCkgYXJlIG5vdyBleHBlY3RpbmcgYSBieXRlCisgIHN0cmluZywgaW5zdGVhZCBvZiBhIFVuaWNvZGUgc3RyaW5nLgorCistIElzc3VlICMxMzI5NTogaHR0cC5zZXJ2ZXIgbm93IHByb2R1Y2VzIHZhbGlkIEhUTUwgNC4wMSBzdHJpY3QuCisKKy0gSXNzdWUgIzI4OTI6IHByZXNlcnZlIGl0ZXJwYXJzZSBldmVudHMgaW4gY2FzZSBvZiBTeW50YXhFcnJvci4KKworLSBJc3N1ZSAjMTMyODc6IHVybGxpYi5yZXF1ZXN0IGFuZCB1cmxsaWIuZXJyb3Igbm93IGNvbnRhaW5zIGFuIF9fYWxsX18KKyAgYXR0cmlidXRlIHRvIGV4cG9zZSBvbmx5IHJlbGV2YW50IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4gIFBhdGNoIGJ5IEZsb3JlbnQKKyAgWGljbHVuYS4KKworLSBJc3N1ZSAjNjcwNjY0OiBGaXggSFRNTFBhcnNlciB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBjb250ZW50IG9mCisgIGBgPHNjcmlwdD4uLi48L3NjcmlwdD5gYCBhbmQgYGA8c3R5bGU+Li4uPC9zdHlsZT5gYC4KKworLSBJc3N1ZSAjMTA4MTc6IEZpeCB1cmxyZXRyaWV2ZSBmdW5jdGlvbiB0byByYWlzZSBDb250ZW50VG9vU2hvcnRFcnJvciBldmVuCisgIHdoZW4gcmVwb3J0aG9vayBpcyBOb25lLiBQYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxMzI5NjogRml4IElETEUgdG8gY2xlYXIgY29tcGlsZSBfX2Z1dHVyZV9fIGZsYWdzIG9uIHNoZWxsIHJlc3RhcnQuCisgIChQYXRjaCBieSBSb2dlciBTZXJ3eSkKKworLSBGaXggdGhlIHhtbHJwYy5jbGllbnQgdXNlciBhZ2VudCB0byByZXR1cm4gc29tZXRoaW5nIHNpbWlsYXIgdG8KKyAgdXJsbGliLnJlcXVlc3QgdXNlciBhZ2VudDogIlB5dGhvbi14bWxycGMvMy4zIi4KKworLSBJc3N1ZSAjMTMyOTM6IEJldHRlciBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIG1hcnNoYWwgYnl0ZXMgdXNpbmcKKyAgeG1scnBjLmNsaWVudC4KKworLSBJc3N1ZSAjMTMyOTE6IE5hbWVFcnJvciBpbiB4bWxycGMgcGFja2FnZS4KKworLSBJc3N1ZSAjMTMyNTg6IFVzZSBjYWxsYWJsZSgpIGJ1aWx0LWluIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgorCistIElzc3VlICMxMzI3MzogZml4IGEgYnVnIHRoYXQgcHJldmVudGVkIEhUTUxQYXJzZXIgdG8gcHJvcGVybHkgZGV0ZWN0IHNvbWUKKyAgdGFncyB3aGVuIHN0cmljdD1GYWxzZS4KKworLSBJc3N1ZSAjMTExODM6IEFkZCBmaW5lci1ncmFpbmVkIGV4Y2VwdGlvbnMgdG8gdGhlIHNzbCBtb2R1bGUsIHNvIHRoYXQKKyAgeW91IGRvbid0IGhhdmUgdG8gaW5zcGVjdCB0aGUgZXhjZXB0aW9uJ3MgYXR0cmlidXRlcyBpbiB0aGUgY29tbW9uIGNhc2UuCisKKy0gSXNzdWUgIzEzMjE2OiBBZGQgY3A2NTAwMSBjb2RlYywgdGhlIFdpbmRvd3MgVVRGLTggKENQX1VURjgpLgorCistIElzc3VlICMxMzIyNjogQWRkIFJUTERfeHh4IGNvbnN0YW50cyB0byB0aGUgb3MgbW9kdWxlLiBUaGVzZSBjb25zdGFudHMgY2FuIGJlCisgIHVzZWQgd2l0aCBzeXMuc2V0ZGxvcGVuZmxhZ3MoKS4KKworLSBJc3N1ZSAjMTAyNzg6IEFkZCBjbG9ja19nZXRyZXMoKSwgY2xvY2tfZ2V0dGltZSgpIGFuZCBDTE9DS194eHggY29uc3RhbnRzIHRvCisgIHRoZSB0aW1lIG1vZHVsZS4gdGltZS5jbG9ja19nZXR0aW1lKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSBwcm92aWRlcyBhCisgIG1vbm90b25pYyBjbG9jaworCistIElzc3VlICMxMDMzMjogbXVsdGlwcm9jZXNzaW5nOiBmaXggYSByYWNlIGNvbmRpdGlvbiB3aGVuIGEgUG9vbCBpcyBjbG9zZWQKKyAgYmVmb3JlIGFsbCB0YXNrcyBoYXZlIGNvbXBsZXRlZC4KKworLSBJc3N1ZSAjMTMyNTU6IHdyb25nIGRvY3N0cmluZ3MgaW4gYXJyYXkgbW9kdWxlLgorCistIElzc3VlICM4NTQwOiBSZW1vdmUgZGVwcmVjYXRlZCBDb250ZXh0Ll9jbGFtcCBhdHRyaWJ1dGUgaW4gRGVjaW1hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzEzMjM1OiBBZGRlZCBEZXByZWNhdGlvbldhcm5pbmcgdG8gbG9nZ2luZy53YXJuKCkgbWV0aG9kIGFuZCBmdW5jdGlvbi4KKworLSBJc3N1ZSAjOTE2ODogbm93IHNtdHBkIGlzIGFibGUgdG8gYmluZCBwcml2aWxlZ2VkIHBvcnQuCisKKy0gSXNzdWUgIzEyNTI5OiBmaXggY2dpLnBhcnNlX2hlYWRlciBpc3N1ZSBvbiBzdHJpbmdzIHdpdGggZG91YmxlLXF1b3RlcyBhbmQKKyAgc2VtaWNvbG9ucyB0b2dldGhlci4gUGF0Y2ggYnkgQmVuIERhcm5lbGwgYW5kIFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMzIyNzogZnVuY3Rvb2xzLmxydV9jYWNoZSgpIG5vdyBoYXMgYSBvcHRpb24gdG8gZGlzdGluZ3Vpc2gKKyAgY2FsbHMgd2l0aCBkaWZmZXJlbnQgYXJndW1lbnQgdHlwZXMuCisKKy0gSXNzdWUgIzYwOTA6IHppcGZpbGUgcmFpc2VzIGEgVmFsdWVFcnJvciB3aGVuIGEgZG9jdW1lbnQgd2l0aCBhIHRpbWVzdGFtcAorICBlYXJsaWVyIHRoYW4gMTk4MCBpcyBwcm92aWRlZC4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMTUwOiBzeXNjb25maWcgbm8gbG9uZ2VyIHBhcnNlcyB0aGUgTWFrZWZpbGUgYW5kIGNvbmZpZy5oIGZpbGVzCisgIHdoZW4gaW1wb3J0ZWQsIGluc3RlYWQgZG9pbmcgaXQgYXQgYnVpbGQgdGltZS4gIFRoaXMgbWFrZXMgaW1wb3J0aW5nCisgIHN5c2NvbmZpZyBmYXN0ZXIgYW5kIHJlZHVjZXMgUHl0aG9uIHN0YXJ0dXAgdGltZSBieSAyMCUuCisKKy0gSXNzdWUgIzEyNDQ4OiBzbXRwbGliIG5vdyBmbHVzaGVzIHN0ZG91dCB3aGlsZSBydW5uaW5nIGBgcHl0aG9uIC1tIHNtdHBsaWJgYAorICBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBwcm9tcHQgY29ycmVjdGx5LgorCistIElzc3VlICMxMjQ1NDogVGhlIG1haWxib3ggbW9kdWxlIGlzIG5vdyB1c2luZyBBU0NJSSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlCisgIGVuY29kaW5nLCB0byByZWFkIGFuZCB3cml0ZSAubWhfc2VxdWVuY2VzIGZpbGVzLgorCistIElzc3VlICMxMzE5NDogemxpYi5jb21wcmVzc29iaigpLmNvcHkoKSBhbmQgemxpYi5kZWNvbXByZXNzb2JqKCkuY29weSgpIGFyZQorICBub3cgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2NzMwMDc6IHVybGxpYi5yZXF1ZXN0IG5vdyBzdXBwb3J0cyBIRUFEIHJlcXVlc3QgdmlhIG5ldyBtZXRob2QgYXJndW1lbnQuCisgIFBhdGNoIGNvbnRyaWJ1dGlvbnMgYnkgRGF2aWQgU3RhbmVrLCBQYXRyaWNrIFdlc3RlcmhvZmYgYW5kIEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjMTIzODY6IHBhY2thZ2luZyBkb2VzIG5vdCBmYWlsIGFueW1vcmUgd2hlbiB3cml0aW5nIHRoZSBSRVNPVVJDRVMKKyAgZmlsZS4KKworLSBJc3N1ZSAjMTMxNTg6IEZpeCBkZWNvZGluZyBhbmQgZW5jb2Rpbmcgb2YgR05VIHRhciBzcGVjaWZpYyBiYXNlLTI1NiBudW1iZXIKKyAgZmllbGRzIGluIHRhcmZpbGUuCisKKy0gSXNzdWUgIzEzMDI1OiBtaW1ldHlwZXMgaXMgbm93IHJlYWRpbmcgTUlNRSB0eXBlcyB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcsCisgIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTA2NTM6IE9uIFdpbmRvd3MsIHVzZSBzdHJmdGltZSgpIGluc3RlYWQgb2Ygd2NzZnRpbWUoKSBiZWNhdXNlCisgIHdjc2Z0aW1lKCkgZG9lc24ndCBmb3JtYXQgdGltZSB6b25lIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTMxNTA6IFRoZSB0b2tlbml6ZSBtb2R1bGUgZG9lc24ndCBjb21waWxlIGxhcmdlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgYXQgc3RhcnR1cCBhbnltb3JlLgorCistIElzc3VlICMxMTE3MTogRml4IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lIHdoZW4gUHl0aG9uIHdhcworICBjb25maWd1cmVkIHdpdGggZGlmZmVyZW50IHByZWZpeCBhbmQgZXhlYy1wcmVmaXguCisKKy0gSXNzdWUgIzExMjU0OiBUZWFjaCBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyB0byBjb21waWxlIC5weWMgYW5kIC5weW8gZmlsZXMgaW4KKyAgUEVQIDMxNDctY29tcGxpYW50IF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLgorCistIElzc3VlICM3MzY3OiBGaXggcGtndXRpbC53YWxrX3BhdGhzIHRvIHNraXAgZGlyZWN0b3JpZXMgd2hvc2UKKyAgY29udGVudHMgY2Fubm90IGJlIHJlYWQuCisKKy0gSXNzdWUgIzMxNjM6IFRoZSBzdHJ1Y3QgbW9kdWxlIGdldHMgbmV3IGZvcm1hdCBjaGFyYWN0ZXJzICduJyBhbmQgJ04nCisgIHN1cHBvcnRpbmcgQyBpbnRlZ2VyIHR5cGVzIGBgc3NpemVfdGBgIGFuZCBgYHNpemVfdGBgLCByZXNwZWN0aXZlbHkuCisKKy0gSXNzdWUgIzEzMDk5OiBGaXggc3FsaXRlMy5DdXJzb3IubGFzdHJvd2lkIHVuZGVyIGEgVHVya2lzaCBsb2NhbGUuCisgIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzEzMDg3OiBCdWZmZXJlZFJlYWRlci5zZWVrKCkgbm93IGFsd2F5cyByYWlzZXMgVW5zdXBwb3J0ZWRPcGVyYXRpb24KKyAgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyB1bnNlZWthYmxlLCBldmVuIGlmIHRoZSBzZWVrIGNvdWxkIGJlCisgIHNhdGlzZmllZCB1c2luZyB0aGUgaW50ZXJuYWwgYnVmZmVyLiAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KKworLSBJc3N1ZSAjNzY4OTogQWxsb3cgcGlja2xpbmcgb2YgZHluYW1pY2FsbHkgY3JlYXRlZCBjbGFzc2VzIHdoZW4gdGhlaXIKKyAgbWV0YWNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCBjb3B5cmVnLiAgUGF0Y2ggYnkgTmljb2xhcyBNLiBUaGnDqXJ5IGFuZCBDcmFpZworICBDaXRyby4KKworLSBJc3N1ZSAjMTMwMzQ6IFdoZW4gZGVjb2Rpbmcgc29tZSBTU0wgY2VydGlmaWNhdGVzLCB0aGUgc3ViamVjdEFsdE5hbWUKKyAgZXh0ZW5zaW9uIGNvdWxkIGJlIHVucmVwb3J0ZWQuCisKKy0gSXNzdWUgIzk4NzE6IFByZXZlbnQgSURMRSAzIGNyYXNoIHdoZW4gZ2l2ZW4gYnl0ZSBzdGluZ3MKKyAgd2l0aCBpbnZhbGlkIGhleCBlc2NhcGUgc2VxdWVuY2VzLCBsaWtlIGInXHgwJy4KKyAgKE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4pCisKKy0gSXNzdWUgIzEyMzA2OiBFeHBvc2UgdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZiB0aGUgemxpYiBDIGxpYnJhcnkgYXMgYSBjb25zdGFudCwKKyAgWkxJQl9SVU5USU1FX1ZFUlNJT04sIGluIHRoZSB6bGliIG1vZHVsZS4gUGF0Y2ggYnkgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICMxMjk1OTogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwIHRvIGNvbGxlY3Rpb25zLl9fYWxsX18uCisKKy0gSXNzdWUgIzg5MzM6IGRpc3R1dGlscycgUEtHLUlORk8gZmlsZXMgYW5kIHBhY2thZ2luZydzIE1FVEFEQVRBIGZpbGVzIHdpbGwKKyAgbm93IGNvcnJlY3RseSByZXBvcnQgTWV0YWRhdGEtVmVyc2lvbjogMS4xIGluc3RlYWQgb2YgMS4wIGlmIGEgQ2xhc3NpZmllciBvcgorICBEb3dubG9hZC1VUkwgZmllbGQgaXMgcHJlc2VudC4KKworLSBJc3N1ZSAjMTI1Njc6IEFkZCBjdXJzZXMudW5nZXRfd2NoKCkgZnVuY3Rpb24uIFB1c2ggYSBjaGFyYWN0ZXIgc28gdGhlIG5leHQKKyAgZ2V0X3djaCgpIHdpbGwgcmV0dXJuIGl0LgorCistIElzc3VlICM5NTYxOiBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyBub3cgd3JpdGVzIGVnZy1pbmZvIGZpbGVzIHVzaW5nIFVURi04LAorICBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzgyODY6IFRoZSBkaXN0dXRpbHMgY29tbWFuZCBzZGlzdCB3aWxsIHByaW50IGEgd2FybmluZyBtZXNzYWdlIGluc3RlYWQKKyAgb2YgY3Jhc2hpbmcgd2hlbiBhbiBpbnZhbGlkIHBhdGggaXMgZ2l2ZW4gaW4gdGhlIG1hbmlmZXN0IHRlbXBsYXRlLgorCistIElzc3VlICMxMjg0MTogdGFyZmlsZSB1bm5lY2Vzc2FyaWx5IGNoZWNrZWQgdGhlIGV4aXN0ZW5jZSBvZiBudW1lcmljYWwgdXNlcgorICBhbmQgZ3JvdXAgaWRzIG9uIGV4dHJhY3Rpb24uIElmIG9uZSBvZiB0aGVtIGRpZCBub3QgZXhpc3QgdGhlIHJlc3BlY3RpdmUgaWQKKyAgb2YgdGhlIGN1cnJlbnQgdXNlciAoaS5lLiByb290KSB3YXMgdXNlZCBmb3IgdGhlIGZpbGUgYW5kIG93bmVyc2hpcAorICBpbmZvcm1hdGlvbiB3YXMgbG9zdC4KKworLSBJc3N1ZSAjMTI4ODg6IEZpeCBhIGJ1ZyBpbiBIVE1MUGFyc2VyLnVuZXNjYXBlIHRoYXQgcHJldmVudGVkIGl0IHRvIGVzY2FwZQorICBtb3JlIHRoYW4gMTI4IGVudGl0aWVzLiAgUGF0Y2ggYnkgUGV0ZXIgT3R0ZW4uCisKKy0gSXNzdWUgIzEyODc4OiBFeHBvc2UgYSBfX2RpY3RfXyBhdHRyaWJ1dGUgb24gaW8uSU9CYXNlIGFuZCBpdHMgc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTI2MzY6IElETEUgcmVhZHMgdGhlIGNvZGluZyBjb29raWUgd2hlbiBleGVjdXRpbmcgYSBQeXRob24gc2NyaXB0LgorCistIElzc3VlICMxMjQ5NDogT24gZXJyb3IsIGNhbGwoKSwgY2hlY2tfY2FsbCgpLCBjaGVja19vdXRwdXQoKSBhbmQKKyAgZ2V0c3RhdHVzb3V0cHV0KCkgZnVuY3Rpb25zIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBub3cga2lsbCB0aGUgcHJvY2VzcywKKyAgcmVhZCBpdHMgc3RhdHVzICh0byBhdm9pZCB6b21iaXMpIGFuZCBjbG9zZSBwaXBlcy4KKworLSBJc3N1ZSAjMTI3MjA6IEV4cG9zZSBsb3ctbGV2ZWwgTGludXggZXh0ZW5kZWQgZmlsZSBhdHRyaWJ1dGUgZnVuY3Rpb25zIGluIG9zLgorCistIElzc3VlICMxMDk0NjogVGhlIGRpc3R1dGlscyBjb21tYW5kcyBiZGlzdF9kdW1iLCBiZGlzdF93aW5pbnN0IGFuZCBiZGlzdF9tc2kKKyAgbm93IHJlc3BlY3QgYSAtLXNraXAtYnVpbGQgb3B0aW9uIGdpdmVuIHRvIGJkaXN0LiAgVGhlIHBhY2thZ2luZyBjb21tYW5kcworICB3ZXJlIGZpeGVkIHRvby4KKworLSBJc3N1ZSAjMTI4NDc6IEZpeCBhIGNyYXNoIHdpdGggbmVnYXRpdmUgUFVUIGFuZCBMT05HX0JJTlBVVCBhcmd1bWVudHMgaW4KKyAgdGhlIEMgcGlja2xlIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxMTU2NDogQXZvaWQgY3Jhc2hlcyB3aGVuIHRyeWluZyB0byBwaWNrbGUgaHVnZSBvYmplY3RzIG9yIGNvbnRhaW5lcnMKKyAgKG1vcmUgdGhhbiAyKiozMSBpdGVtcykuICBJbnN0ZWFkLCBpbiBtb3N0IGNhc2VzLCBhbiBPdmVyZmxvd0Vycm9yIGlzIHJhaXNlZC4KKworLSBJc3N1ZSAjMTIyODc6IEZpeCBhIHN0YWNrIGNvcnJ1cHRpb24gaW4gb3NzYXVkaW9kZXYgbW9kdWxlIHdoZW4gdGhlIEZEIGlzCisgIGdyZWF0ZXIgdGhhbiBGRF9TRVRTSVpFLgorCistIElzc3VlICMxMjgzOTogRml4IGNyYXNoIGluIHpsaWIgbW9kdWxlIGR1ZSB0byB2ZXJzaW9uIG1pc21hdGNoLgorICBGaXggYnkgUmljaGFyZCBNLiBUZXcuCisKKy0gSXNzdWUgIzk5MjM6IFRoZSBtYWlsY2FwIG1vZHVsZSBub3cgY29ycmVjdGx5IHVzZXMgdGhlIHBsYXRmb3JtIHBhdGgKKyAgc2VwYXJhdG9yIGZvciB0aGUgTUFJTENBUCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvbiBub24tUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMjgzNTogRm9sbG93IHVwIHRvICM2NTYwIHRoYXQgdW5jb25kaXRpb25hbGx5IHByZXZlbnRzIHVzZSBvZiB0aGUKKyAgdW5lbmNyeXB0ZWQgc2VuZG1zZy9yZWN2bXNnIEFQSXMgb24gU1NMIHdyYXBwZWQgc29ja2V0cy4gUGF0Y2ggYnkgRGF2aWQKKyAgV2F0c29uLgorCistIElzc3VlICMxMjgwMzogU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW4oKSBub3cgYWNjZXB0cyBhIHBhc3N3b3JkIGFyZ3VtZW50CisgIHRvIGJlIHVzZWQgaWYgdGhlIHByaXZhdGUga2V5IGlzIGVuY3J5cHRlZC4gIFBhdGNoIGJ5IEFkYW0gU2ltcGtpbnMuCisKKy0gSXNzdWUgIzExNjU3OiBGaXggc2VuZGluZyBmaWxlIGRlc2NyaXB0b3JzIG92ZXIgMjU1IG92ZXIgYSBtdWx0aXByb2Nlc3NpbmcKKyAgUGlwZS4KKworLSBJc3N1ZSAjMTI4MTE6IHRhYm5hbm55LmNoZWNrKCkgbm93IHByb21wdGx5IGNsb3NlcyBjaGVja2VkIGZpbGVzLiBQYXRjaCBieQorICBBbnRob255IEJyaWdncy4KKworLSBJc3N1ZSAjNjU2MDogVGhlIHNlbmRtc2cvcmVjdm1zZyBBUEkgaXMgbm93IGV4cG9zZWQgYnkgdGhlIHNvY2tldCBtb2R1bGUKKyAgd2hlbiBwcm92aWRlZCBieSB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSwgc3VwcG9ydGluZyBwcm9jZXNzaW5nIG9mCisgIGFuY2lsbGFyeSBkYXRhIGluIHB1cmUgUHl0aG9uIGNvZGUuIFBhdGNoIGJ5IERhdmlkIFdhdHNvbiBhbmQgSGVpa28gV3VuZHJhbS4KKworLSBJc3N1ZSAjMTIzMjY6IE9uIExpbnV4LCBzeXMucGxhdGZvcm0gZG9lc24ndCBjb250YWluIHRoZSBtYWpvciB2ZXJzaW9uCisgIGFueW1vcmUuIEl0IGlzIG5vdyBhbHdheXMgJ2xpbnV4JywgaW5zdGVhZCBvZiAnbGludXgyJyBvciAnbGludXgzJyBkZXBlbmRpbmcKKyAgb24gdGhlIExpbnV4IHZlcnNpb24gdXNlZCB0byBidWlsZCBQeXRob24uCisKKy0gSXNzdWUgIzEyMjEzOiBGaXggYSBidWZmZXJpbmcgYnVnIHdpdGggaW50ZXJsZWF2ZWQgcmVhZHMgYW5kIHdyaXRlcyB0aGF0CisgIGNvdWxkIGFwcGVhciBvbiBCdWZmZXJlZFJhbmRvbSBzdHJlYW1zLgorCistIElzc3VlICMxMjc3ODogUmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIEpTT04tZW5jb2RpbmcgYSBsYXJnZQorICBjb250YWluZXIgb2YgbWFueSBzbWFsbCBvYmplY3RzLgorCistIElzc3VlICMxMjY1MDogRml4IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBzdWJwcm9jZXNzLlBvcGVuIGNvdWxkIGxlYWsKKyAgcmVzb3VyY2VzIChGRC96b21iaWUpIHdoZW4ga2lsbGVkIGF0IHRoZSB3cm9uZyB0aW1lLgorCistIElzc3VlICMxMjc0NDogRml4IGluZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9mIGludGVnZXJzIGJldHdlZW4gMioqMzEgYW5kCisgIDIqKjYzIG9uIHN5c3RlbXMgd2l0aCBhIDY0LWJpdCBDICJsb25nIi4KKworLSBJc3N1ZSAjMTI2NDY6IEFkZCBhbiAnZW9mJyBhdHRyaWJ1dGUgdG8gemxpYi5EZWNvbXByZXNzLCB0byBtYWtlIGl0IGVhc2llciB0bworICBkZXRlY3QgdHJ1bmNhdGVkIGlucHV0IHN0cmVhbXMuCisKKy0gSXNzdWUgIzExNTEzOiBGaXggZXhjZXB0aW9uIGhhbmRsaW5nIGBgdGFyZmlsZS5UYXJGaWxlLmd6b3BlbigpYGAgd2hlbgorICB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLgorCistIElzc3VlICMxMjY4NzogRml4IGEgcG9zc2libGUgYnVmZmVyaW5nIGJ1ZyB3aGVuIHVucGlja2xpbmcgdGV4dCBtb2RlCisgIChwcm90b2NvbCAwLCBtb3N0bHkpIHBpY2tsZXMuCisKKy0gSXNzdWUgIzEwMDg3OiBGaXggdGhlIGh0bWwgb3V0cHV0IGZvcm1hdCBvZiB0aGUgY2FsZW5kYXIgbW9kdWxlLgorCistIElzc3VlICMxMjU0MDogUHJldmVudCB6b21iaWUgSURMRSBwcm9jZXNzZXMgb24gV2luZG93cyBkdWUgdG8gY2hhbmdlcworICBpbiBvcy5raWxsKCkuCisKKy0gSXNzdWUgIzEzMTIxOiBhZGQgc3VwcG9ydCBmb3IgaW5wbGFjZSBtYXRoIG9wZXJhdG9ycyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIEFkZCBzdXBwb3J0IGZvciB1bmFyeSBwbHVzIGFuZCB1bmFyeSBtaW51cyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIElzc3VlICMxMjY4MzogdXJscGFyc2UgdXBkYXRlZCB0byBpbmNsdWRlIHN2biBhcyBzY2hlbWVzIHRoYXQgdXNlcyByZWxhdGl2ZQorICBwYXRocy4gKHN2biBmcm9tIDEuNSBvbndhcmRzIHN1cHBvcnQgcmVsYXRpdmUgcGF0aCkuCisKKy0gSXNzdWUgIzEyNjU1OiBFeHBvc2UgZnVuY3Rpb25zIGZyb20gc2NoZWQuaCBpbiB0aGUgb3MgbW9kdWxlOiBzY2hlZF95aWVsZCgpLAorICBzY2hlZF9zZXRzY2hlZHVsZXIoKSwgc2NoZWRfZ2V0c2NoZWR1bGVyKCksIHNjaGVkX3NldHBhcmFtKCksCisgIHNjaGVkX2dldF9taW5fcHJpb3JpdHkoKSwgc2NoZWRfZ2V0X21heF9wcmlvcml0eSgpLCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwoKSwKKyAgc2NoZWRfZ2V0YWZmaW5pdHkoKSwgc2NoZWRfc2V0YWZmaW5pdHkoKS4KKworLSBBZGQgVGhyZWFkRXJyb3IgdG8gdGhyZWFkaW5nLl9fYWxsX18uCisKKy0gSXNzdWVzICMxMTEwNCwgIzg2ODg6IEZpeCB0aGUgYmVoYXZpb3Igb2YgZGlzdHV0aWxzJyBzZGlzdCBjb21tYW5kIHdpdGgKKyAgbWFudWFsbHktbWFpbnRhaW5lZCBNQU5JRkVTVCBmaWxlcy4KKworLSBJc3N1ZSAjMTEyODE6IHNtdHBsaWIuU1RNUCBnZXRzIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciwgd2hpY2ggYWRkcyB0aGUKKyAgYWJpbGl0eSB0byBiaW5kIHRvIHNwZWNpZmljIHNvdXJjZSBhZGRyZXNzIG9uIGEgbWFjaGluZSB3aXRoIG11bHRpcGxlCisgIGludGVyZmFjZXMuIFBhdGNoIGJ5IFBhdWxvIFNjYXJkaW5lLgorCistIElzc3VlICMxMjQ2NDogdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5LmNsZWFudXAoKSBzaG91bGQgbm90IGZvbGxvdworICBzeW1saW5rczogZml4IGl0LiBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjODg4NzogInB5ZG9jIHNvbWVidWlsdGluLnNvbWVtZXRob2QiIChvciBoZWxwKCdzb21lYnVpbHRpbi5zb21lbWV0aG9kJykKKyAgaW4gUHl0aG9uIGNvZGUpIG5vdyBmaW5kcyB0aGUgZG9jIG9mIHRoZSBtZXRob2QuCisKKy0gSXNzdWUgIzEwOTY4OiBSZW1vdmUgaW5kaXJlY3Rpb24gaW4gdGhyZWFkaW5nLiAgVGhlIHB1YmxpYyBuYW1lcyAoRXZlbnQsCisgIENvbmRpdGlvbiwgZXRjLikgdXNlZCB0byBiZSBmYWN0b3J5IGZ1bmN0aW9ucyByZXR1cm5pbmcgaW5zdGFuY2VzIG9mIGhpZGRlbgorICBjbGFzc2VzIChfRXZlbnQsIF9Db25kaXRpb24sIGV0Yy4pLCBiZWNhdXNlIChpZiBHdWlkbyByZWNhbGxzIGNvcnJlY3RseSkgdGhpcworICBjb2RlIHByZS1kYXRlcyB0aGUgYWJpbGl0eSB0byBzdWJjbGFzcyBleHRlbnNpb24gdHlwZXMuICBJdCBpcyBub3cgcG9zc2libGUKKyAgdG8gaW5oZXJpdCBmcm9tIHRoZXNlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgdG8gaW1wb3J0IHRoZSBwcml2YXRlCisgIHVuZGVyc2NvcmVkIG5hbWVzIGxpa2UgbXVsdGlwcm9jZXNzaW5nIGRpZC4KKworLSBJc3N1ZSAjOTcyMzogQWRkIHNobGV4LnF1b3RlIGZ1bmN0aW9ucywgdG8gZXNjYXBlIGZpbGVuYW1lcyBhbmQgY29tbWFuZAorICBsaW5lcy4KKworLSBJc3N1ZSAjMTI2MDM6IEZpeCBweWRvYy5zeW5vcHNpcygpIG9uIGZpbGVzIHdpdGggbm9uLW5lZ2F0aXZlIHN0X210aW1lLgorCistIElzc3VlICMxMjUxNDogVXNlIHRyeS9maW5hbGx5IHRvIGFzc3VyZSB0aGUgdGltZWl0IG1vZHVsZSByZXN0b3JlcyBnYXJiYWdlCisgIGNvbGxlY3Rpb25zIHdoZW4gaXQgaXMgZG9uZS4KKworLSBJc3N1ZSAjMTI2MDc6IEluIHN1YnByb2Nlc3MsIGZpeCBpc3N1ZSB3aGVyZSBpZiBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVyciBpcworICBnaXZlbiBhcyBhIGxvdyBmZCwgaXQgZ2V0cyBvdmVyd3JpdHRlbi4KKworLSBJc3N1ZSAjMTI1OTA6IElETEUgZWRpdG9yIHdpbmRvdyBub3cgYWx3YXlzIGRpc3BsYXlzIHRoZSBmaXJzdCBsaW5lCisgIHdoZW4gb3BlbmluZyBhIGxvbmcgZmlsZS4gIFdpdGggVGsgOC41LCB0aGUgZmlyc3QgbGluZSB3YXMgaGlkZGVuLgorCistIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZXMpCisgIENvbm5lY3Rpb246Y2xvc2UgaGVhZGVyLgorCistIElzc3VlICMxMjEwMjogRG9jdW1lbnQgdGhhdCBidWZmZXJlZCBmaWxlcyBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIGJlaW5nIHVzZWQKKyAgd2l0aCBtbWFwLiBQYXRjaCBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgorCistIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KKworLSBJc3N1ZSAjMTgxMzogRml4IGNvZGVjIGxvb2t1cCB1bmRlciBUdXJraXNoIGxvY2FsZXMuCisKKy0gSXNzdWUgIzEyNTkxOiBJbXByb3ZlIHN1cHBvcnQgb2YgInVuaXZlcnNhbCBuZXdsaW5lcyIgaW4gdGhlIHN1YnByb2Nlc3MKKyAgbW9kdWxlOiB0aGUgcGlwZWQgc3RyZWFtcyBjYW4gbm93IGJlIHByb3Blcmx5IHJlYWQgZnJvbSBvciB3cml0dGVuIHRvLgorCistIElzc3VlICMxMjU5MTogQWxsb3cgaW8uVGV4dElPV3JhcHBlciB0byB3b3JrIHdpdGggcmF3IElPIG9iamVjdHMgKHdpdGhvdXQKKyAgYSByZWFkMSgpIG1ldGhvZCksIGFuZCBhZGQgYSAqd3JpdGVfdGhyb3VnaCogcGFyYW1ldGVyIHRvIG1hbmRhdGUKKyAgdW5idWZmZXJlZCB3cml0ZXMuCisKKy0gSXNzdWUgIzEwODgzOiBGaXggc29ja2V0IGxlYWtzIGluIHVybGxpYi5yZXF1ZXN0IHdoZW4gdXNpbmcgRlRQLgorCistIElzc3VlICMxMjU5MjogTWFrZSBQeXRob24gYnVpbGQgb24gT3BlbkJTRCA1IChhbmQgZnV0dXJlIG1ham9yIHJlbGVhc2VzKS4KKworLSBJc3N1ZSAjMTIzNzI6IFBPU0lYIHNlbWFwaG9yZXMgYXJlIGJyb2tlbiBvbiBBSVg6IGRvbid0IHVzZSB0aGVtLgorCistIElzc3VlICMxMjU1MTogUHJvdmlkZSBhIGdldF9jaGFubmVsX2JpbmRpbmcoKSBtZXRob2Qgb24gU1NMIHNvY2tldHMgc28gYXMKKyAgdG8gZ2V0IGNoYW5uZWwgYmluZGluZyBkYXRhIGZvciB0aGUgY3VycmVudCBTU0wgc2Vzc2lvbiAob25seSB0aGUKKyAgInRscy11bmlxdWUiIGNoYW5uZWwgYmluZGluZyBpcyBpbXBsZW1lbnRlZCkuICBUaGlzIGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24KKyAgb2YgY2VydGFpbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgU0NSQU0tU0hBLTEtUExVUy4gIFBhdGNoIGJ5CisgIEphY2VrIEtvbmllY3pueS4KKworLSBJc3N1ZSAjNjY1MTk0OiBlbWFpbC51dGlscyBub3cgaGFzIGZvcm1hdF9kYXRldGltZSBhbmQgcGFyc2VkYXRlX3RvX2RhdGV0aW1lCisgIGZ1bmN0aW9ucywgYWxsb3dpbmcgZm9yIHJvdW5kIHRyaXBwaW5nIG9mIFJGQzI4MjIgZm9ybWF0IGRhdGVzLgorCistIElzc3VlICMxMjU3MTogQWRkIGEgcGxhdC1saW51eDMgZGlyZWN0b3J5IG1pcnJvcmluZyB0aGUgcGxhdC1saW51eDIKKyAgZGlyZWN0b3J5LCBzbyB0aGF0ICJpbXBvcnQgRExGQ04iIGFuZCBvdGhlciBzaW1pbGFyIGltcG9ydHMgd29yayBvbgorICBMaW51eCAzLjAuCisKKy0gSXNzdWUgIzc0ODQ6IHNtdHBsaWIgbm8gbG9uZ2VyIHB1dHMgPD4gYXJvdW5kIGFkZHJlc3NlcyBpbiBWUkZZIGFuZCBFWFBOCisgIGNvbW1hbmRzOyB0aGV5IGFyZW4ndCByZXF1aXJlZCBhbmQgaW4gZmFjdCBwb3N0Zml4IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IGZvcm0uCisKKy0gSXNzdWUgIzEyMjczOiBSZW1vdmUgYXN0Ll9fdmVyc2lvbl9fLiBBU1QgY2hhbmdlcyBjYW4gYmUgYWNjb3VudGVkIGZvciBieQorICBjaGVja2luZyBzeXMudmVyc2lvbl9pbmZvIG9yIHN5cy5fbWVyY3VyaWFsLgorCistIFNpbGVuY2Ugc3B1cmlvdXMgImJyb2tlbiBwaXBlIiB0cmFjZWJhY2tzIHdoZW4gc2h1dHRpbmcgZG93biBhCisgIFByb2Nlc3NQb29sRXhlY3V0b3IuCisKKy0gRml4IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcyBpbiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcgorICBieSBqb2luaW5nIGFsbCBxdWV1ZXMgYW5kIHByb2Nlc3NlcyB3aGVuIHNodXRkb3duKCkgaXMgY2FsbGVkLgorCistIElzc3VlICMxMTYwMzogRml4IGEgY3Jhc2ggd2hlbiBfX3N0cl9fIGlzIHJlYm91bmQgYXMgX19yZXByX18uICBQYXRjaCBieQorICBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzExMzIxOiBGaXggYSBjcmFzaCB3aXRoIG11bHRpcGxlIGltcG9ydHMgb2YgdGhlIF9waWNrbGUgbW9kdWxlIHdoZW4KKyAgZW1iZWRkaW5nIFB5dGhvbi4gIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjNjc1NTogQWRkIGdldF93Y2goKSBtZXRob2QgdG8gY3Vyc2VzLndpbmRvdyBjbGFzcy4gUGF0Y2ggYnkgScOxaWdvCisgIFNlcm5hLgorCistIEFkZCBjZ2kuY2xvc2Vsb2coKSBmdW5jdGlvbiB0byBjbG9zZSB0aGUgbG9nIGZpbGUuCisKKy0gSXNzdWUgIzEyNTAyOiBhc3luY29yZTogZml4IHBvbGxpbmcgbG9vcCB3aXRoIEFGX1VOSVggc29ja2V0cy4KKworLSBJc3N1ZSAjNDM3NjogY3R5cGVzIG5vdyBzdXBwb3J0cyBuZXN0ZWQgc3RydWN0dXJlcyBpbiBhIGVuZGlhbiBkaWZmZXJlbnQgdGhhbgorICB0aGUgcGFyZW50IHN0cnVjdHVyZS4gUGF0Y2ggYnkgVmxhZCBSaXNjdXRpYS4KKworLSBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlIF9DSFVOS19TSVpFIGF0dHJpYnV0ZSBvZiBhCisgIFRleHRJT1dyYXBwZXIgdG8gYSBodWdlIHZhbHVlLCBub3QgVHlwZUVycm9yLgorCistIElzc3VlICMxMjUwNDogQ2xvc2UgZmlsZSBoYW5kbGVzIGluIGEgdGltZWx5IG1hbm5lciBpbiBwYWNrYWdpbmcuZGF0YWJhc2UuCisgIFRoaXMgZml4ZXMgYSBidWcgd2l0aCB0aGUgcmVtb3ZlICh1bmluc3RhbGwpIGZlYXR1cmUgb24gV2luZG93cy4KKworLSBJc3N1ZXMgIzEyMTY5IGFuZCAjMTA1MTA6IEZhY3RvciBvdXQgY29kZSB1c2VkIGJ5IHZhcmlvdXMgcGFja2FnaW5nIGNvbW1hbmRzCisgIHRvIG1ha2UgSFRUUCBQT1NUIHJlcXVlc3RzLCBhbmQgbWFrZSBzdXJlIGl0IHVzZXMgQ1JMRi4KKworLSBJc3N1ZSAjMTIwMTY6IE11bHRpYnl0ZSBDSksgZGVjb2RlcnMgbm93IHJlc3luY2hyb25pemUgZmFzdGVyLiBUaGV5IG9ubHkKKyAgaWdub3JlIHRoZSBmaXJzdCBieXRlIG9mIGFuIGludmFsaWQgYnl0ZSBzZXF1ZW5jZS4gRm9yIGV4YW1wbGUsCisgIGInXHhmZlxuJy5kZWNvZGUoJ2diMjMxMicsICdyZXBsYWNlJykgZ2l2ZXMgJ1x1ZmZmZFxuJyBpbnN0ZWFkIG9mICdcdWZmZmQnLgorCistIElzc3VlICMxMjQ1OTogdGltZS5zbGVlcCgpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSBzbGVlcCBsZW5ndGggaXMKKyAgbmVnYXRpdmUsIGluc3RlYWQgb2YgYW4gaW5maW5pdGUgc2xlZXAgb24gV2luZG93cyBvciByYWlzaW5nIGFuIElPRXJyb3Igb24KKyAgTGludXggZm9yIGV4YW1wbGUsIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3VyIG9uIGFsbCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzEyNDUxOiBweWRvYzogaHRtbF9nZXRmaWxlKCkgbm93IHVzZXMgdG9rZW5pemUub3BlbigpIHRvIHN1cHBvcnQKKyAgUHl0aG9uIHNjcmlwdHMgdXNpbmcgYSBlbmNvZGluZyBkaWZmZXJlbnQgdGhhbiBVVEYtOCAocmVhZCB0aGUgY29kaW5nIGNvb2tpZQorICBvZiB0aGUgc2NyaXB0KS4KKworLSBJc3N1ZSAjMTI0OTM6IHN1YnByb2Nlc3M6IFBvcGVuLmNvbW11bmljYXRlKCkgbm93IGFsc28gaGFuZGxlcyBFSU5UUiBlcnJvcnMKKyAgaWYgdGhlIHByb2Nlc3MgaGFzIG9ubHkgb25lIHBpcGUuCisKKy0gSXNzdWUgIzEyNDY3OiB3YXJuaW5nczogZml4IGEgcmFjZSBjb25kaXRpb24gaWYgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgYXQKKyAgc2h1dGRvd24sIGlmIGdsb2JhbHMoKVsnX19maWxlX18nXSBpcyBOb25lLgorCistIElzc3VlICMxMjQ1MTogcHlkb2M6IGltcG9ydGZpbGUoKSBub3cgb3BlbnMgdGhlIFB5dGhvbiBzY3JpcHQgaW4gYmluYXJ5IG1vZGUsCisgIGluc3RlYWQgb2YgdGV4dCBtb2RlIHVzaW5nIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTI0NTE6IHJ1bnB5OiBydW5fcGF0aCgpIG5vdyBvcGVucyB0aGUgUHl0aG9uIHNjcmlwdCBpbiBiaW5hcnkgbW9kZSwKKyAgaW5zdGVhZCBvZiB0ZXh0IG1vZGUgdXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8gc3VwcG9ydCBvdGhlciBlbmNvZGluZ3MKKyAgdGhhbiBVVEYtOCAoc2NyaXB0cyB1c2luZyB0aGUgY29kaW5nIGNvb2tpZSkuCisKKy0gSXNzdWUgIzEyNDUxOiB4bWwuZG9tLnB1bGxkb206IHBhcnNlKCkgbm93IG9wZW5zIGZpbGVzIGluIGJpbmFyeSBtb2RlIGluc3RlYWQKKyAgb2YgdGhlIHRleHQgbW9kZSAodXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZykgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjE0NzogQWRqdXN0IHRoZSBuZXctaW4tMy4yIHNtdHBsaWIuc2VuZF9tZXNzYWdlIG1ldGhvZCBmb3IgYmV0dGVyCisgIGNvbmZvcm1hbmNlIHRvIHRoZSBSRkNzOiAgY29ycmVjdGx5IGhhbmRsZSBTZW5kZXIgYW5kIFJlc2VudC0gaGVhZGVycy4KKworLSBJc3N1ZSAjMTIzNTI6IEZpeCBhIGRlYWRsb2NrIGluIG11bHRpcHJvY2Vzc2luZy5IZWFwIHdoZW4gYSBibG9jayBpcyBmcmVlZCBieQorICB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2hpbGUgdGhlIEhlYXAgbG9jayBpcyBoZWxkLgorCistIElzc3VlICMxMjQ2MjogdGltZS5zbGVlcCgpIG5vdyBpbW1lZGlhdGVseSBjYWxscyB0aGUgKFB5dGhvbikgc2lnbmFsIGhhbmRsZXIKKyAgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIGluc3RlYWQgb2YgaGF2aW5nIHRvIHdhaXQgdW50aWwgdGhlIG5leHQKKyAgaW5zdHJ1Y3Rpb24uCisKKy0gSXNzdWUgIzEyNDQyOiBuZXcgc2h1dGlsLmRpc2tfdXNhZ2UgZnVuY3Rpb24sIHByb3ZpZGluZyB0b3RhbCwgdXNlZCBhbmQgZnJlZQorICBkaXNrIHNwYWNlIHN0YXRpc3RpY3MuCisKKy0gSXNzdWUgIzEyNDUxOiBUaGUgWEluY2x1ZGUgZGVmYXVsdCBsb2FkZXIgb2YgeG1sLmV0cmVlIG5vdyBkZWNvZGVzIGZpbGVzIGZyb20KKyAgVVRGLTggaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nIGlmIHRoZSBlbmNvZGluZyBpcyBub3Qgc3BlY2lmaWVkLiBJdCBub3cKKyAgYWxzbyBvcGVucyBYTUwgZmlsZXMgZm9yIHRoZSBwYXJzZXIgaW4gYmluYXJ5IG1vZGUgaW5zdGVhZCBvZiB0aGUgdGV4dCBtb2RlCisgIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTI0NTE6IGRvY3Rlc3QuZGVidWdfc2NyaXB0KCkgZG9lc24ndCBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZQorICBhbnltb3JlIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTI0NTE6IHB5ZG9jLnN5bm9wc2lzKCkgbm93IHJlYWRzIHRoZSBlbmNvZGluZyBjb29raWUgaWYgYXZhaWxhYmxlLAorICB0byByZWFkIHRoZSBQeXRob24gc2NyaXB0IGZyb20gdGhlIHJpZ2h0IGVuY29kaW5nLgorCistIElzc3VlICMxMjQ1MTogZGlzdHV0aWxzIG5vdyBvcGVucyB0aGUgc2V0dXAgc2NyaXB0IGluIGJpbmFyeSBtb2RlIHRvIHJlYWQgdGhlCisgIGVuY29kaW5nIGNvb2tpZSwgaW5zdGVhZCBvZiBvcGVuaW5nIGl0IGluIFVURi04LgorCistIElzc3VlICM5NTE2OiBPbiBNYWMgT1MgWCwgY2hhbmdlIERpc3R1dGlscyB0byBubyBsb25nZXIgZ2xvYmFsbHkgYXR0ZW1wdCB0bworICBjaGVjayBvciBzZXQgdGhlIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGhlCisgIGludGVycHJldGVyIHByb2Nlc3MuICBUaGlzIGNvdWxkIGNhdXNlIGZhaWx1cmVzIGluIG5vbi1EaXN0dXRpbHMgc3VicHJvY2Vzc2VzCisgIGFuZCB3YXMgdW5yZWxpYWJsZSBzaW5jZSB0ZXN0cyBvciB1c2VyIHByb2dyYW1zIGNvdWxkIG1vZGlmeSB0aGUgaW50ZXJwcmV0ZXIKKyAgZW52aXJvbm1lbnQgYWZ0ZXIgRGlzdHV0aWxzIHNldCBpdC4gIEluc3RlYWQsIGhhdmUgRGlzdHV0aWxzIHNldCB0aGUKKyAgZGVwbG95bWVudCB0YXJnZXQgb25seSBpbiB0aGUgZW52aXJvbm1lbnQgb2YgZWFjaCBidWlsZCBzdWJwcm9jZXNzLiAgSXQgaXMKKyAgc3RpbGwgcG9zc2libGUgdG8gZ2xvYmFsbHkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYnkgc2V0dGluZworICBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgYmVmb3JlIGxhdW5jaGluZyB0aGUgaW50ZXJwcmV0ZXI7IGl0cyB2YWx1ZSBtdXN0IGJlCisgIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUsIHRoZSB2YWx1ZSB3aXRoIHdoaWNoIHRoZSBpbnRlcnByZXRlcgorICB3YXMgYnVpbHQuICBBbHNvLCBpbXBsZW1lbnQgdGhlIHNhbWUgaGFuZGxpbmcgaW4gcGFja2FnaW5nLgorCistIElzc3VlICMxMjQyMjogSW4gdGhlIGNvcHkgbW9kdWxlLCBkb24ndCBzdG9yZSBvYmplY3RzIHRoYXQgYXJlIHRoZWlyIG93biBjb3B5CisgIGluIHRoZSBtZW1vIGRpY3QuCisKKy0gSXNzdWUgIzEyMzAzOiBBZGQgc2lnd2FpdGluZm8oKSBhbmQgc2lndGltZWR3YWl0KCkgdG8gdGhlIHNpZ25hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzEyNDA0OiBSZW1vdmUgQzg5IGluY29tcGF0aWJsZSBjb2RlIGZyb20gbW1hcCBtb2R1bGUuIFBhdGNoIGJ5IEFraXJhCisgIEtpdGFkYS4KKworLSBJc3N1ZSAjMTg3NDogZW1haWwgbm93IGRldGVjdHMgYW5kIHJlcG9ydHMgYXMgYSBkZWZlY3QgdGhlIHByZXNlbmNlIG9mCisgIGFueSBDVEUgb3RoZXIgdGhhbiA3Yml0LCA4Yml0LCBvciBiaW5hcnkgb24gYSBtdWx0aXBhcnQuCisKKy0gSXNzdWUgIzEyMzgzOiBGaXggc3VicHJvY2VzcyBtb2R1bGUgd2l0aCBlbnY9e306IGRvbid0IGNvcHkgdGhlIGVudmlyb25tZW50CisgIHZhcmlhYmxlcywgc3RhcnQgd2l0aCBhbiBlbXB0eSBlbnZpcm9ubWVudC4KKworLSBJc3N1ZSAjMTE2Mzc6IEZpeCBzdXBwb3J0IGZvciBpbXBvcnRpbmcgcGFja2FnaW5nIHNldHVwIGhvb2tzIGZyb20gdGhlCisgIHByb2plY3QgZGlyZWN0b3J5LgorCistIElzc3VlICM2NzcxOiBNb3ZlZCB0aGUgY3Vyc2VzLndyYXBwZXIgZnVuY3Rpb24gZnJvbSB0aGUgc2luZ2xlLWZ1bmN0aW9uCisgIHdyYXBwZXIgbW9kdWxlIGludG8gX19pbml0X18sIGVsaW1pbmF0aW5nIHRoZSBtb2R1bGUuICBTaW5jZSBfX2luaXRfXyB3YXMKKyAgYWxyZWFkeSBpbXBvcnRpbmcgdGhlIGZ1bmN0aW9uIHRvIGN1cnNlcy53cmFwcGVyLCB0aGVyZSBpcyBubyBBUEkgY2hhbmdlLgorCistIElzc3VlICMxMTU4NDogZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXIgbm8gbG9uZ2VyIGZhaWxzIGlmIHRoZSBoZWFkZXIKKyAgcGFzc2VkIHRvIGl0IGlzIGEgSGVhZGVyIG9iamVjdCwgYW5kIEhlYWRlci9tYWtlX2hlYWRlciBubyBsb25nZXIgZmFpbAorICBpZiBnaXZlbiBiaW5hcnkgdW5rbm93bi04Yml0IGlucHV0LgorCistIElzc3VlICMxMTcwMDogbWFpbGJveCBwcm94eSBvYmplY3QgY2xvc2UgbWV0aG9kcyBjYW4gbm93IGJlIGNhbGxlZCBtdWx0aXBsZQorICB0aW1lcyB3aXRob3V0IGVycm9yLgorCistIElzc3VlICMxMTc2NzogQ29ycmVjdCBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBtYWlsYm94J3MgX19nZXRpdGVtX18gbWV0aG9kLgorCistIElzc3VlICMxMjEzMzogQWJzdHJhY3RIVFRQSGFuZGxlci5kb19vcGVuKCkgb2YgdXJsbGliLnJlcXVlc3QgY2xvc2VzIHRoZSBIVFRQCisgIGNvbm5lY3Rpb24gaWYgaXRzIGdldHJlc3BvbnNlKCkgbWV0aG9kIGZhaWxzIHdpdGggYSBzb2NrZXQgZXJyb3IuIFBhdGNoCisgIHdyaXR0ZW4gYnkgRXppbyBNZWxvdHRpLgorCistIElzc3VlICMxMjI0MDogQWxsb3cgbXVsdGlwbGUgc2V0dXAgaG9va3MgaW4gcGFja2FnaW5nJ3Mgc2V0dXAuY2ZnIGZpbGVzLgorICBPcmlnaW5hbCBwYXRjaCBieSBFcmlrIEJyYXkuCisKKy0gSXNzdWUgIzkyODQ6IEFsbG93IGluc3BlY3QuZmluZHNvdXJjZSgpIHRvIGZpbmQgdGhlIHNvdXJjZSBvZiBkb2N0ZXN0CisgIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTE1OTU6IEZpeCBhc3NvcnRlZCBidWdzIGluIHBhY2thZ2luZy51dGlsLmNmZ190b19hcmdzLCBhCisgIGNvbXBhdGliaWxpdHkgaGVscGVyIGZvciB0aGUgZGlzdHV0aWxzLXBhY2thZ2luZyB0cmFuc2l0aW9uLiAgT3JpZ2luYWwgcGF0Y2gKKyAgYnkgRXJpayBCcmF5LgorCistIElzc3VlICMxMjI4NzogSW4gb3NzYXVkaW9kZXYsIGNoZWNrIHRoYXQgdGhlIGRldmljZSBpc24ndCBjbG9zZWQgaW4gc2V2ZXJhbAorICBtZXRob2RzLgorCistIElzc3VlICMxMjAwOTogRml4ZWQgcmVncmVzc2lvbiBpbiBuZXRyYyBmaWxlIGNvbW1lbnQgaGFuZGxpbmcuCisKKy0gSXNzdWUgIzEyMjQ2OiBXYXJuIGFuZCBmYWlsIHdoZW4gdHJ5aW5nIHRvIGluc3RhbGwgYSB0aGlyZC1wYXJ0eSBwcm9qZWN0IGZyb20KKyAgYW4gdW5pbnN0YWxsZWQgUHl0aG9uIChidWlsdCBpbiBhIHNvdXJjZSBjaGVja291dCkuICBPcmlnaW5hbCBwYXRjaCBieQorICBUc2hlcGFuZyBMZWtob25raG9iZS4KKworLSBJc3N1ZSAjMTA2OTQ6IHppcGZpbGUgbm93IGlnbm9yZXMgZ2FyYmFnZSBhdCB0aGUgZW5kIG9mIGEgemlwZmlsZS4KKworLSBJc3N1ZSAjMTIyODM6IEZpeGVkIHJlZ3Jlc3Npb24gaW4gc210cGxpYiBxdW90aW5nIG9mIGxlYWRpbmcgZG90cyBpbiBEQVRBLgorCistIElzc3VlICMxMDQyNDogQXJncGFyc2Ugbm93IGluY2x1ZGVzIHRoZSBuYW1lcyBvZiB0aGUgbWlzc2luZyByZXF1aXJlZAorICBhcmd1bWVudHMgaW4gdGhlIG1pc3NpbmcgYXJndW1lbnRzIGVycm9yIG1lc3NhZ2UuCisKKy0gSXNzdWUgIzEyMTY4OiBTeXNMb2dIYW5kbGVyIG5vdyBhbGxvd3MgTlVMIHRlcm1pbmF0aW9uIHRvIGJlIGNvbnRyb2xsZWQgdXNpbmcKKyAgYSBuZXcgJ2FwcGVuZF9udWwnIGF0dHJpYnV0ZSBvbiB0aGUgaGFuZGxlci4KKworLSBJc3N1ZSAjMTE1ODM6IFNwZWVkIHVwIG9zLnBhdGguaXNkaXIgb24gV2luZG93cyBieSB1c2luZyBHZXRGaWxlQXR0cmlidXRlcworICBpbnN0ZWFkIG9mIG9zLnN0YXQuCisKKy0gSXNzdWUgIzEyMDIxOiBNYWtlIG1tYXAncyByZWFkKCkgbWV0aG9kIGFyZ3VtZW50IG9wdGlvbmFsLiBQYXRjaCBieSBQZXRyaQorICBMZWh0aW5lbi4KKworLSBJc3N1ZSAjOTIwNTogY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3Igbm93IGRldGVjdHMga2lsbGVkCisgIGNoaWxkcmVuIGFuZCByYWlzZXMgQnJva2VuUHJvY2Vzc1Bvb2wgaW4gc3VjaCBhIHNpdHVhdGlvbi4gIFByZXZpb3VzbHkgaXQKKyAgd291bGQgcmVsaWFibHkgZnJlZXplL2RlYWRsb2NrLgorCistIElzc3VlICMxMjA0MDogRXhwb3NlIGEgbmV3IGF0dHJpYnV0ZSBgYHNlbnRpbmVsYGAgb24gaW5zdGFuY2VzIG9mCisgIGBgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NgYC4gIEFsc28sIGZpeCBQcm9jZXNzLmpvaW4oKSB0byBub3QgdXNlIHBvbGxpbmcKKyAgYW55bW9yZSwgd2hlbiBnaXZlbiBhIHRpbWVvdXQuCisKKy0gSXNzdWUgIzExODkzOiBSZW1vdmUgb2Jzb2xldGUgaW50ZXJuYWwgd3JhcHBlciBjbGFzcyBgYFNTTEZha2VGaWxlYGAgaW4gdGhlCisgIHNtdHBsaWIgbW9kdWxlLiAgUGF0Y2ggYnkgQ2F0YWxpbiBJYWNvYi4KKworLSBJc3N1ZSAjMTIwODA6IEZpeCBhIERlY2ltYWwucG93ZXIoKSBjYXNlIHRoYXQgdG9vayBhbiB1bnJlYXNvbmFibHkgbG9uZyB0aW1lCisgIHRvIGNvbXB1dGUuCisKKy0gSXNzdWUgIzEyMjIxOiBSZW1vdmUgX192ZXJzaW9uX18gYXR0cmlidXRlcyBmcm9tIHB5ZXhwYXQsIHBpY2tsZSwgdGFyZmlsZSwKKyAgcHlkb2MsIHRraW50ZXIsIGFuZCB4bWwucGFyc2Vycy5leHBhdC4gVGhpcyB3ZXJlIHVzZWxlc3MgdmVyc2lvbiBjb25zdGFudHMKKyAgbGVmdCBvdmVyIGZyb20gdGhlIE1lcmN1cmlhbCB0cmFuc2l0aW9uCisKKy0gTmFtZWQgdHVwbGVzIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIHZhcnMoKS4KKworLSBJc3N1ZSAjMTIwODU6IEZpeCBhbiBhdHRyaWJ1dGUgZXJyb3IgaW4gc3VicHJvY2Vzcy5Qb3BlbiBkZXN0cnVjdG9yIGlmIHRoZQorICBjb25zdHJ1Y3RvciBoYXMgZmFpbGVkLCBlLmcuIGJlY2F1c2Ugb2YgYW4gdW5kZWNsYXJlZCBrZXl3b3JkIGFyZ3VtZW50LiBQYXRjaAorICB3cml0dGVuIGJ5IE9sZWcgT3NobXlhbi4KKworLSBJc3N1ZSAjMTIwMjg6IE1ha2UgdGhyZWFkaW5nLl9nZXRfaWRlbnQoKSBwdWJsaWMsIHJlbmFtZSBpdCB0bworICB0aHJlYWRpbmcuZ2V0X2lkZW50KCkgYW5kIGRvY3VtZW50IGl0LiBUaGlzIGZ1bmN0aW9uIHdhcyBhbHJlYWR5IHVzZWQgdXNpbmcKKyAgX3RocmVhZC5nZXRfaWRlbnQoKS4KKworLSBJc3N1ZSAjMTIxNzE6IEluY3JlbWVudGFsRW5jb2Rlci5yZXNldCgpIG9mIENKSyBjb2RlY3MgKG11bHRpYnl0ZWNvZGVjKSBjYWxscworICBlbmNyZXNldCgpIGluc3RlYWQgb2YgZGVjcmVzZXQoKS4KKworLSBJc3N1ZSAjMTIyMTg6IFJlbW92ZWQgd3NnaXJlZi5lZ2ctaW5mby4KKworLSBJc3N1ZSAjMTIxOTY6IEFkZCBwaXBlMigpIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzk4NTA2NDogTWFrZSBwbGlzdGxpYiBtb3JlIHJlc2lsaWVudCB0byBmYXVsdHkgaW5wdXQgcGxpc3RzLgorICBQYXRjaCBieSBNaGVyIE1vdnNpc3lhbi4KKworLSBJc3N1ZSAjMTYyNTogQloyRmlsZSBhbmQgYnoyLmRlY29tcHJlc3MoKSBub3cgc3VwcG9ydCBtdWx0aS1zdHJlYW0gZmlsZXMuCisgIEluaXRpYWwgcGF0Y2ggYnkgTmlyIEFpZGVzLgorCistIElzc3VlICMxMjE3NTogQnVmZmVyZWRSZWFkZXIucmVhZCgtMSkgbm93IGNhbGxzIHJhdy5yZWFkYWxsKCkgaWYgYXZhaWxhYmxlLgorCistIElzc3VlICMxMjE3NTogRmlsZUlPLnJlYWRhbGwoKSBub3cgb25seSByZWFkcyB0aGUgZmlsZSBwb3NpdGlvbiBhbmQgc2l6ZQorICBvbmNlLgorCistIElzc3VlICMxMjE3NTogUmF3SU9CYXNlLnJlYWRhbGwoKSBub3cgcmV0dXJucyBOb25lIGlmIHJlYWQoKSByZXR1cm5zIE5vbmUuCisKKy0gSXNzdWUgIzEyMTc1OiBGaWxlSU8ucmVhZGFsbCgpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIGluc3RlYWQgb2YgYW4gSU9FcnJvcgorICBpZiB0aGUgZmlsZSBpcyBjbG9zZWQuCisKKy0gSXNzdWUgIzExMTA5OiBOZXcgc2VydmljZV9hY3Rpb24gbWV0aG9kIGZvciBCYXNlU2VydmVyLCB1c2VkIGJ5IEZvcmtpbmdNaXhJbgorICBjbGFzcyBmb3IgY2xlYW51cC4gSW5pdGlhbCBQYXRjaCBieSBKdXN0aW4gV2Fya2VudGluLgorCistIElzc3VlICMxMjA0NTogQXZvaWQgZHVwbGljYXRlIGV4ZWN1dGlvbiBvZiBjb21tYW5kIGluCisgIGN0eXBlcy51dGlsLl9nZXRfc29uYW1lKCkuICBQYXRjaCBieSBTaWppbiBKb3NlcGguCisKKy0gSXNzdWUgIzEwODE4OiBSZW1vdmUgdGhlIFRrIEdVSSBhbmQgdGhlIHNlcnZlKCkgZnVuY3Rpb24gb2YgdGhlIHB5ZG9jIG1vZHVsZSwKKyAgcHlkb2MgLWcgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yIGFuZCBpdCBoYXMgYSBuZXcgZW5oYW5jZWQgd2ViCisgIHNlcnZlci4KKworLSBJc3N1ZSAjMTQ0MTUzMDogSW4gaW1hcGxpYiwgcmVhZCB0aGUgZGF0YSBpbiBvbmUgY2h1bmsgdG8gc3BlZWQgdXAgbGFyZ2UKKyAgcmVhZHMgYW5kIHNpbXBsaWZ5IGNvZGUuCisKKy0gSXNzdWUgIzEyMDcwOiBGaXggdGhlIE1ha2VmaWxlIHBhcnNlciBvZiB0aGUgc3lzY29uZmlnIG1vZHVsZSB0byBoYW5kbGUKKyAgY29ycmVjdGx5IHJlZmVyZW5jZXMgdG8gImJvZ3VzIHZhcmlhYmxlIiAoZS5nLiAicHJlZml4PSQvb3B0L3B5dGhvbiIpLgorCistIElzc3VlICMxMjEwMDogRG9uJ3QgcmVzZXQgaW5jcmVtZW50YWwgZW5jb2RlcnMgb2YgQ0pLIGNvZGVjcyBhdCBlYWNoIGNhbGwgdG8KKyAgdGhlaXIgZW5jb2RlKCkgbWV0aG9kIGFueW1vcmUsIGJ1dCBjb250aW51ZSB0byBjYWxsIHRoZSByZXNldCgpIG1ldGhvZCBpZiB0aGUKKyAgZmluYWwgYXJndW1lbnQgaXMgVHJ1ZS4KKworLSBJc3N1ZSAjMTIwNDk6IEFkZCBSQU5EX2J5dGVzKCkgYW5kIFJBTkRfcHNldWRvX2J5dGVzKCkgZnVuY3Rpb25zIHRvIHRoZSBzc2wKKyAgbW9kdWxlLgorCistIElzc3VlICM2NTAxOiBvcy5kZXZpY2VfZW5jb2RpbmcoKSByZXR1cm5zIE5vbmUgb24gV2luZG93cyBpZiB0aGUgYXBwbGljYXRpb24KKyAgaGFzIG5vIGNvbnNvbGUuCisKKy0gSXNzdWUgIzEyMTA1OiBBZGQgT19DTE9FWEVDIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzEyMDc5OiBEZWNpbWFsKCdJbmZpbml0eScpLmZtYShEZWNpbWFsKCcwJyksICgzLjkxMjI0MzE4MTI2Nzg2ZSsxOSswaikpCisgIG5vdyByYWlzZXMgVHlwZUVycm9yIChyZWZsZWN0aW5nIHRoZSBpbnZhbGlkIHR5cGUgb2YgdGhlIDNyZCBhcmd1bWVudCkgcmF0aGVyCisgIHRoYW4gRGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uLgorCistIElzc3VlICMxMjEyNDogemlwaW1wb3J0IGRvZXNuJ3Qga2VlcCBhIHJlZmVyZW5jZSB0byB6bGliLmRlY29tcHJlc3MoKSBhbnltb3JlCisgIHRvIGJlIGFibGUgdG8gdW5sb2FkIHRoZSBtb2R1bGUuCisKKy0gQWRkIHRoZSBwYWNrYWdpbmcgbW9kdWxlLCBhbiBpbXByb3ZlZCBmb3JrIG9mIGRpc3R1dGlscyAoYWxzbyBrbm93biBhcworICBkaXN0dXRpbHMyKS4KKworLSBJc3N1ZSAjMTIwNjU6IGNvbm5lY3RfZXgoKSBvbiBhbiBTU0wgc29ja2V0IG5vdyByZXR1cm5zIHRoZSBvcmlnaW5hbCBlcnJubworICB3aGVuIHRoZSBzb2NrZXQncyB0aW1lb3V0IGV4cGlyZXMgKGl0IHVzZWQgdG8gcmV0dXJuIE5vbmUpLgorCistIElzc3VlICM4ODA5OiBUaGUgU01UUF9TU0wgY29uc3RydWN0b3IgYW5kIFNNVFAuc3RhcnR0bHMoKSBub3cgc3VwcG9ydAorICBwYXNzaW5nIGEgYGBjb250ZXh0YGAgYXJndW1lbnQgcG9pbnRpbmcgdG8gYW4gc3NsLlNTTENvbnRleHQgaW5zdGFuY2UuCisgIFBhdGNoIGJ5IEthc3VuIEhlcmF0aC4KKworLSBJc3N1ZSAjMTEwODg6IGRvbid0IGNyYXNoIHdoZW4gdXNpbmcgRjUgdG8gcnVuIGEgc2NyaXB0IGluIElETEUgb24gTWFjT1NYCisgIHdpdGggVGsgOC41LgorCistIElzc3VlICM5NTE2OiBJc3N1ZSAjOTUxNjogYXZvaWQgZXJyb3JzIGluIHN5c2NvbmZpZyB3aGVuIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICBpcyBzZXQgaW4gc2hlbGwuCisKKy0gSXNzdWUgIzg2NTA6IE1ha2UgemxpYiBtb2R1bGUgNjQtYml0IGNsZWFuLiBjb21wcmVzcygpLCBkZWNvbXByZXNzKCkgYW5kCisgIHRoZWlyIGluY3JlbWVudGFsIGNvdW50ZXJwYXJ0cyBub3cgcmFpc2UgT3ZlcmZsb3dFcnJvciBpZiBnaXZlbiBhbiBpbnB1dAorICBsYXJnZXIgdGhhbiA0R0IsIGluc3RlYWQgb2Ygc2lsZW50bHkgdHJ1bmNhdGluZyB0aGUgaW5wdXQgYW5kIHJldHVybmluZworICBhbiBpbmNvcnJlY3QgcmVzdWx0LgorCistIElzc3VlICMxMjA1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBjbGVhcnMgdGhlIHVuY29uc3VtZWRfdGFpbAorICBhdHRyaWJ1dGUgd2hlbiBjYWxsZWQgd2l0aG91dCBhIG1heF9sZW5ndGggYXJndW1lbnQuCisKKy0gSXNzdWUgIzEyMDYyOiBGaXggYSBmbHVzaGluZyBidWcgd2hlbiBkb2luZyBhIGNlcnRhaW4gdHlwZSBvZiBJL08gc2VxdWVuY2UKKyAgb24gYSBmaWxlIG9wZW5lZCBpbiByZWFkK3dyaXRlIG1vZGUgKG5hbWVseTogcmVhZGluZywgc2Vla2luZyBhIGJpdCBmb3J3YXJkLAorICB3cml0aW5nLCB0aGVuIHNlZWtpbmcgYmVmb3JlIHRoZSBwcmV2aW91cyB3cml0ZSBidXQgc3RpbGwgd2l0aGluIGJ1ZmZlcmVkCisgIGRhdGEsIGFuZCB3cml0aW5nIGFnYWluKS4KKworLSBJc3N1ZSAjOTk3MTogV3JpdGUgYW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlcmVkUmVhZGVyLnJlYWRpbnRvKCkuCisgIFBhdGNoIGJ5IEpvaG4gTydDb25ub3IuCisKKy0gSXNzdWUgIzEwMjg6IFRrIHJldHVybnMgaW52YWxpZCBVbmljb2RlIG51bGwgaW4gJUE6IFVuaWNvZGVEZWNvZGVFcnJvci4KKyAgV2l0aCBUayA8IDguNSBfdGtpbnRlci5jOlB5dGhvbkNtZCgpIHJhaXNlZCBVbmljb2RlRGVjb2RlRXJyb3IsIGNhdXNlZAorICBJRExFIHRvIGV4aXQuICBDb252ZXJ0ZWQgdG8gdmFsaWQgVW5pY29kZSBudWxsIGluIFB5dGhvbkNtZCgpLgorCistIElzc3VlICMxMTc5OTogdXJsbGliLnJlcXVlc3QgQXV0aGVudGljYXRpb24gSGFuZGxlcnMgd2lsbCByYWlzZSBhIFZhbHVlRXJyb3IKKyAgd2hlbiBwcmVzZW50ZWQgd2l0aCBhbiB1bnN1cHBvcnRlZCBBdXRoZW50aWNhdGlvbiBTY2hlbWUuIFBhdGNoIGNvbnRyaWJ1dGVkCisgIGJ5IFl1dmFsIEdyZWVuZmllbGQuCisKKy0gSXNzdWUgIzEwNDE5LCAjNjAxMTogYnVpbGRfc2NyaXB0cyBjb21tYW5kIG9mIGRpc3R1dGlscyBoYW5kbGVzIGNvcnJlY3RseQorICBub24tQVNDSUkgcGF0aCAocGF0aCB0byB0aGUgUHl0aG9uIGV4ZWN1dGFibGUpLiBPcGVuIGFuZCB3cml0ZSB0aGUgc2NyaXB0IGluCisgIGJpbmFyeSBtb2RlLCBidXQgZW5zdXJlIHRoYXQgdGhlIHNoZWJhbmcgaXMgZGVjb2RhYmxlIGZyb20gVVRGLTggYW5kIGZyb20gdGhlCisgIGVuY29kaW5nIG9mIHRoZSBzY3JpcHQuCisKKy0gSXNzdWUgIzg0OTg6IEluIHNvY2tldC5hY2NlcHQoKSwgYWxsb3cgdG8gc3BlY2lmeSAwIGFzIGEgYmFja2xvZyB2YWx1ZSBpbgorICBvcmRlciB0byBhY2NlcHQgZXhhY3RseSBvbmUgY29ubmVjdGlvbi4gIFBhdGNoIGJ5IERhbmllbCBFdmVycy4KKworLSBJc3N1ZSAjMTIwMTE6IHNpZ25hbC5zaWduYWwoKSBhbmQgc2lnbmFsLnNpZ2ludGVycnVwdCgpIHJhaXNlIGFuIE9TRXJyb3IsCisgIGluc3RlYWQgb2YgYSBSdW50aW1lRXJyb3I6IE9TRXJyb3IgaGFzIGFuIGVycm5vIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMzcwOTogYWRkIGEgZmx1c2hfaGVhZGVycyBtZXRob2QgdG8gQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgd2hpY2gKKyAgbWFuYWdlcyB0aGUgc2VuZGluZyBvZiBoZWFkZXJzIHRvIG91dHB1dCBzdHJlYW0gYW5kIGZsdXNoaW5nIHRoZSBpbnRlcm5hbAorICBoZWFkZXJzIGJ1ZmZlci4gUGF0Y2ggY29udHJpYnV0aW9uIGJ5IEFuZHJldyBTY2hhYWYKKworLSBJc3N1ZSAjMTE3NDM6IFJld3JpdGUgbXVsdGlwcm9jZXNzaW5nIGNvbm5lY3Rpb24gY2xhc3NlcyBpbiBwdXJlIFB5dGhvbi4KKworLSBJc3N1ZSAjMTExNjQ6IFN0b3AgdHJ5aW5nIHRvIHVzZSBfeG1scGx1cyBpbiB0aGUgeG1sIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE4ODg6IEFkZCBsb2cyIGZ1bmN0aW9uIHRvIG1hdGggbW9kdWxlLiBQYXRjaCB3cml0dGVuIGJ5IE1hcmsKKyAgRGlja2luc29uLgorCistIElzc3VlICMxMjAxMjogc3NsLlBST1RPQ09MX1NTTHYyIGJlY29tZXMgb3B0aW9uYWwuCisKKy0gSXNzdWUgIzg0MDc6IFRoZSBzaWduYWwgaGFuZGxlciB3cml0ZXMgdGhlIHNpZ25hbCBudW1iZXIgYXMgYSBzaW5nbGUgYnl0ZQorICBpbnN0ZWFkIG9mIGEgbnVsIGJ5dGUgaW50byB0aGUgd2FrZXVwIGZpbGUgZGVzY3JpcHRvci4gU28gaXQgaXMgcG9zc2libGUgdG8KKyAgd2FpdCBtb3JlIHRoYW4gb25lIHNpZ25hbCBhbmQga25vdyB3aGljaCBzaWduYWxzIHdlcmUgcmFpc2VkLgorCistIElzc3VlICM4NDA3OiBBZGQgcHRocmVhZF9raWxsKCksIHNpZ3BlbmRpbmcoKSBhbmQgc2lnd2FpdCgpIGZ1bmN0aW9ucyB0byB0aGUKKyAgc2lnbmFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE5Mjc6IFNNVFBfU1NMIG5vdyB1c2VzIHBvcnQgNDY1IGJ5IGRlZmF1bHQgYXMgZG9jdW1lbnRlZC4gIFBhdGNoCisgIGJ5IEthc3VuIEhlcmF0aC4KKworLSBJc3N1ZSAjMTIwMDI6IGZ0cGxpYidzIGFib3J0KCkgbWV0aG9kIHJhaXNlcyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzExOTE2OiBBZGQgYSBudW1iZXIgb2YgTWFjT1NYIHNwZWNpZmljIGRlZmluaXRpb25zIHRvIHRoZSBlcnJubyBtb2R1bGUuCisgIFBhdGNoIGJ5IFBpZXJyZSBDYXJyaWVyLgorCistIElzc3VlICMxMTk5OTogZml4ZWQgc3BvcmFkaWMgc3luYyBmYWlsdXJlIG1haWxib3guTWFpbGRpciBkdWUgdG8gaXRzIHRyeWluZyB0bworICBkZXRlY3QgbXRpbWUgY2hhbmdlcyBieSBjb21wYXJpbmcgdG8gdGhlIHN5c3RlbSBjbG9jayBpbnN0ZWFkIG9mIHRvIHRoZQorICBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgbXRpbWUuCisKKy0gSXNzdWUgIzExMDcyOiBhZGRlZCBNTFNEIGNvbW1hbmQgKFJGQy0zNjU5KSBzdXBwb3J0IHRvIGZ0cGxpYi4KKworLSBJc3N1ZSAjODgwODogVGhlIElNQVA0X1NTTCBjb25zdHJ1Y3RvciBub3cgYWxsb3dzIHBhc3NpbmcgYW4gU1NMQ29udGV4dAorICBwYXJhbWV0ZXIgdG8gY29udHJvbCBwYXJhbWV0ZXJzIG9mIHRoZSBzZWN1cmUgY2hhbm5lbC4gIFBhdGNoIGJ5IFNpamluCisgIEpvc2VwaC4KKworLSBudHBhdGguc2FtZWZpbGUgZmFpbGVkIHRvIG5vdGljZSB0aGF0ICJhLnR4dCIgYW5kICJBLlRYVCIgcmVmZXIgdG8gdGhlIHNhbWUKKyAgZmlsZSBvbiBXaW5kb3dzIFhQLiBBcyBub3RpY2VkIGluIGlzc3VlICMxMDY4NC4KKworLSBJc3N1ZSAjMTIwMDA6IFdoZW4gYSBTU0wgY2VydGlmaWNhdGUgaGFzIGEgc3ViamVjdEFsdE5hbWUgd2l0aG91dCBhbnkKKyAgZE5TTmFtZSBlbnRyeSwgc3NsLm1hdGNoX2hvc3RuYW1lKCkgc2hvdWxkIHVzZSB0aGUgc3ViamVjdCdzIGNvbW1vbk5hbWUuCisgIFBhdGNoIGJ5IE5pY29sYXMgQmFyZWlsLgorCistIElzc3VlICMxMDc3NTogYXNzZXJ0UmFpc2VzLCBhc3NlcnRSYWlzZXNSZWdleCwgYXNzZXJ0V2FybnMsIGFuZAorICBhc3NlcnRXYXJuc1JlZ2V4IG5vdyBhY2NlcHQgYSBrZXl3b3JkIGFyZ3VtZW50ICdtc2cnIHdoZW4gdXNlZCBhcyBjb250ZXh0CisgIG1hbmFnZXJzLiAgSW5pdGlhbCBwYXRjaCBieSBXaW5zdG9uIEV3ZXJ0LgorCistIElzc3VlICMxMDY4NDogc2h1dGlsLm1vdmUgdXNlZCB0byBkZWxldGUgYSBmb2xkZXIgb24gY2FzZSBpbnNlbnNpdGl2ZQorICBmaWxlc3lzdGVtcyB3aGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5hbWUgd2hlcmUgdGhlIHNhbWUgZXhjZXB0CisgIGZvciB0aGUgY2FzZS4KKworLSBJc3N1ZSAjMTE2NDc6IG9iamVjdHMgY3JlYXRlZCB1c2luZyBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyIG5vdyBzdXBwb3J0CisgIG1vcmUgdGhhbiBvbmUgY2FsbCB0byB0aGUgZnVuY3Rpb24gd2hlbiB1c2VkIGFzIGEgZGVjb3JhdG9yLiBJbml0aWFsIHBhdGNoCisgIGJ5IFlzaiBSYXkuCisKKy0gSXNzdWUgIzExOTMwOiBSZW1vdmVkIGRlcHJlY2F0ZWQgdGltZS5hY2NlcHQyZHllYXIgdmFyaWFibGUuCisgIFJlbW92ZWQgeWVhciA+PSAxMDAwIHJlc3RyaWN0aW9uIGZyb20gZGF0ZXRpbWUuc3RyZnRpbWUuCisKKy0gbG9nZ2luZzogZG9uJ3QgZGVmaW5lIFF1ZXVlTGlzdGVuZXIgaWYgUHl0aG9uIGhhcyBubyB0aHJlYWQgc3VwcG9ydC4KKworLSBmdW5jdG9vbHMuY21wX3RvX2tleSgpIG5vdyB3b3JrcyB3aXRoIGNvbGxlY3Rpb25zLkhhc2hhYmxlKCkuCisKKy0gSXNzdWUgIzExMjc3OiBtbWFwLm1tYXAoKSBjYWxscyBmY250bChmZCwgRl9GVUxMRlNZTkMpIG9uIE1hYyBPUyBYIHRvIGdldAorICBhcm91bmQgYSBtbWFwIGJ1ZyB3aXRoIHNwYXJzZSBmaWxlcy4gUGF0Y2ggd3JpdHRlbiBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgorCistIElzc3VlICM4NDA3OiBBZGQgc2lnbmFsLnB0aHJlYWRfc2lnbWFzaygpIGZ1bmN0aW9uIHRvIGZldGNoIGFuZC9vciBjaGFuZ2UgdGhlCisgIHNpZ25hbCBtYXNrIG9mIHRoZSBjYWxsaW5nIHRocmVhZC4KKworLSBJc3N1ZSAjMTE4NTg6IGNvbmZpZ3BhcnNlci5FeHRlbmRlZEludGVycG9sYXRpb24gZXhwZWN0ZWQgbG93ZXItY2FzZSBzZWN0aW9uCisgIG5hbWVzLgorCistIElzc3VlICMxMTMyNDogQ29uZmlnUGFyc2VyKGludGVycG9sYXRpb249Tm9uZSkgbm93IHdvcmtzIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTE4MTE6IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCkgaXMgbm93IElQdjYtY29tcGF0aWJsZS4gIFBhdGNoCisgIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTE3NjM6IGRvbid0IHVzZSBkaWZmbGliIGluIFRlc3RDYXNlLmFzc2VydE11bHRpTGluZUVxdWFsIGlmIHRoZQorICBzdHJpbmdzIGFyZSB0b28gbG9uZy4KKworLSBJc3N1ZSAjMTEyMzY6IGdldHBhc3MuZ2V0cGFzcyByZXNwb25kcyB0byBjdHJsLWMgb3IgY3RybC16IG9uIHRlcm1pbmFsLgorCistIElzc3VlICMxMTg1NjogU3BlZWQgdXAgcGFyc2luZyBvZiBKU09OIG51bWJlcnMuCisKKy0gSXNzdWUgIzExMDA1OiB0aHJlYWRpbmcuUkxvY2soKS5fcmVsZWFzZV9zYXZlKCkgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIHRoZQorICBsb2NrIHdhcyBub3QgYWNxdWlyZWQuCisKKy0gSXNzdWUgIzExMjU4OiBTcGVlZCB1cCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkoKSB1bmRlciBMaW51eCBieSBhIGZhY3RvcgorICBvZiA1IHRvIDEwLiAgSW5pdGlhbCBwYXRjaCBieSBKb25hcyBILgorCistIElzc3VlICMxMTM4MjogVHJpdmlhbCBzeXN0ZW0gY2FsbHMsIHN1Y2ggYXMgZHVwKCkgb3IgcGlwZSgpLCBuZWVkbid0CisgIHJlbGVhc2UgdGhlIEdJTC4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTEyMjM6IEFkZCB0aHJlYWRpbmcuX2luZm8oKSBmdW5jdGlvbiBwcm92aWRpbmcgaW5mb3JtYXRpb25zIGFib3V0CisgIHRoZSB0aHJlYWQgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzExNzMxOiBzaW1wbGlmeS9lbmhhbmNlIGVtYWlsIHBhcnNlci9nZW5lcmF0b3IgQVBJIGJ5IGludHJvZHVjaW5nCisgIHBvbGljeSBvYmplY3RzLgorCistIElzc3VlICMxMTc2ODogVGhlIHNpZ25hbCBoYW5kbGVyIG9mIHRoZSBzaWduYWwgbW9kdWxlIG9ubHkgY2FsbHMKKyAgUHlfQWRkUGVuZGluZ0NhbGwoKSBmb3IgdGhlIGZpcnN0IHNpZ25hbCB0byBmaXggYSBkZWFkbG9jayBvbiByZWVudHJhbnQgb3IKKyAgcGFyYWxsZWwgY2FsbHMuIFB5RXJyX1NldEludGVycnVwdCgpIHdyaXRlcyBhbHNvIGludG8gdGhlIHdha2UgdXAgZmlsZS4KKworLSBJc3N1ZSAjMTE0OTI6IGZpeCBzZXZlcmFsIGlzc3VlcyB3aXRoIGhlYWRlciBmb2xkaW5nIGluIHRoZSBlbWFpbCBwYWNrYWdlLgorCistIElzc3VlICMxMTg1MjogQWRkIG1pc3NpbmcgaW1wb3J0cyBhbmQgdXBkYXRlIHRlc3RzLgorCistIElzc3VlICMxMTg3NTogY29sbGVjdGlvbnMuT3JkZXJlZERpY3QncyBfX3JlZHVjZV9fIHdhcyB0ZW1wb3JhcmlseQorICBtdXRhdGluZyB0aGUgb2JqZWN0IGluc3RlYWQgb2YganVzdCB3b3JraW5nIG9uIGEgY29weS4KKworLSBJc3N1ZSAjMTE0Njc6IEZpeCB1cmxwYXJzZSBiZWhhdmlvciB3aGVuIGhhbmRsaW5nIHVybHMgd2hpY2ggY29udGFpbnMgc2NoZW1lCisgIHNwZWNpZmljIHBhcnQgb25seSBkaWdpdHMuIFBhdGNoIGJ5IFNhbnRvc28gV2lqYXlhLgorCistIGNvbGxlY3Rpb25zLkNvdW50ZXIoKS5jb3B5KCkgbm93IHdvcmtzIGNvcnJlY3RseSBmb3Igc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTE0NzQ6IEZpeCB0aGUgYnVnIHdpdGggdXJsMnBhdGhuYW1lKCkgaGFuZGxpbmcgb2YgJy9DfC8nIG9uIFdpbmRvd3MuCisgIFBhdGNoIGJ5IFNhbnRvc28gV2lqYXlhLgorCistIElzc3VlICMxMTY4NDogY29tcGxldGUgZW1haWwucGFyc2VyIGJ5dGVzIEFQSSBieSBhZGRpbmcgQnl0ZXNIZWFkZXJQYXJzZXIuCisKKy0gVGhlIGJ6MiBtb2R1bGUgbm93IGhhbmRsZXMgNEdpQisgaW5wdXQgYnVmZmVycyBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzkyMzM6IEZpeCBqc29uLmxvYWRzKCd7fScpIHRvIHJldHVybiBhIGRpY3QgKGluc3RlYWQgb2YgYSBsaXN0KSwgd2hlbgorICBfanNvbiBpcyBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICMxMTgzMDogUmVtb3ZlIHVubmVjZXNzYXJ5IGludHJvc3BlY3Rpb24gY29kZSBpbiB0aGUgZGVjaW1hbCBtb2R1bGUuCisKKy0gSXNzdWUgIzExNzAzOiB1cmxsaWIyLmdldHVybCgpIGRvZXMgbm90IHJldHVybiBjb3JyZWN0IHVybCB3aGVuIHRoZSBvcmlnaW5hbAorICB1cmwgY29udGFpbnMgI2ZyYWdtZW50LgorCistIElzc3VlICMxMDAxOTogRml4ZWQgcmVncmVzc2lvbiBpbiBqc29uIG1vZHVsZSB3aGVyZSBhbiBpbmRlbnQgb2YgMCBzdG9wcGVkCisgIGFkZGluZyBuZXdsaW5lcyBhbmQgYWN0ZWQgaW5zdGVhZCBsaWtlICdOb25lJy4KKworLSBJc3N1ZSAjMTExODY6IHB5ZG9jIGlnbm9yZXMgYSBtb2R1bGUgaWYgaXRzIG5hbWUgY29udGFpbnMgYSBzdXJyb2dhdGUKKyAgY2hhcmFjdGVyIGluIHRoZSBpbmRleCBvZiBtb2R1bGVzLgorCistIElzc3VlICMxMTgxNTogVXNlIGEgbGlnaHQtd2VpZ2h0IFNpbXBsZVF1ZXVlIGZvciB0aGUgcmVzdWx0IHF1ZXVlIGluCisgIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgorCistIElzc3VlICM1MTYyOiBUcmVhdCBzZXJ2aWNlcyBsaWtlIGZyb3plbiBleGVjdXRhYmxlcyB0byBhbGxvdyBjaGlsZCBzcGF3bmluZworICBmcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIG9uIFdpbmRvd3MuCisKKy0gbG9nZ2luZy5iYXNpY0NvbmZpZyBub3cgc3VwcG9ydHMgYW4gb3B0aW9uYWwgJ2hhbmRsZXJzJyBhcmd1bWVudCB0YWtpbmcgYW4KKyAgaXRlcmFibGUgb2YgaGFuZGxlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIHJvb3QgbG9nZ2VyLiBBZGRpdGlvbmFsIHBhcmFtZXRlcgorICBjaGVja3Mgd2VyZSBhbHNvIGFkZGVkIHRvIGJhc2ljQ29uZmlnLgorCistIElzc3VlICMxMTgxNDogRml4IGxpa2VseSB0eXBvIGluIG11bHRpcHJvY2Vzc2luZy5Qb29sLl90ZXJtaW5hdGUoKS4KKworLSBJc3N1ZSAjMTE3NDc6IEZpeCByYW5nZSBmb3JtYXR0aW5nIGluIGRpZmZsaWIuY29udGV4dF9kaWZmKCkgYW5kCisgIGRpZmZsaWIudW5pZmllZF9kaWZmKCkuCisKKy0gSXNzdWUgIzg0Mjg6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIG11bHRpcHJvY2Vzc2luZy5Qb29sIHdoZW4gdGVybWluYXRpbmcKKyAgd29ya2VyIHByb2Nlc3NlczogbmV3IHByb2Nlc3NlcyB3b3VsZCBiZSBzcGF3bmVkIHdoaWxlIHRoZSBwb29sIGlzIGJlaW5nCisgIHNodXQgZG93bi4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMjY1MDogcmUuZXNjYXBlKCkgbm8gbG9uZ2VyIGVzY2FwZXMgdGhlICdfJy4KKworLSBJc3N1ZSAjMTE3NTc6IHNlbGVjdC5zZWxlY3QoKSBub3cgcmFpc2VzIFZhbHVlRXJyb3Igd2hlbiBhIG5lZ2F0aXZlIHRpbWVvdXQKKyAgaXMgcGFzc2VkIChwcmV2aW91c2x5LCBhIHNlbGVjdC5lcnJvciB3aXRoIEVJTlZBTCB3b3VsZCBiZSByYWlzZWQpLiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICM3MzExOiBmaXggaHRtbC5wYXJzZXIgdG8gYWNjZXB0IG5vbi1BU0NJSSBhdHRyaWJ1dGUgdmFsdWVzLgorCistIElzc3VlICMxMTYwNTogZW1haWwucGFyc2VyLkJ5dGVzRmVlZFBhcnNlciB3YXMgaW5jb3JyZWN0bHkgY29udmVydGluZworICBtdWx0aXBhcnQgc3VicGFydHMgd2l0aCBhbiA4LWJpdCBDVEUgaW50byB1bmljb2RlIGluc3RlYWQgb2YgcHJlc2VydmluZyB0aGUKKyAgYnl0ZXMuCisKKy0gSXNzdWUgIzE2OTA2MDg6IGVtYWlsLnV0aWwuZm9ybWF0YWRkciBpcyBub3cgUkZDIDIwNDcgYXdhcmU6ICBpdCBub3cgaGFzIGEKKyAgY2hhcnNldCBwYXJhbWV0ZXIgdGhhdCBkZWZhdWx0cyB0byB1dGYtOCBhbmQgaXMgdXNlZCBhcyB0aGUgY2hhcnNldCBmb3IgUkZDCisgIDIwNDcgZW5jb2Rpbmcgd2hlbiB0aGUgcmVhbG5hbWUgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzEwOTYzOiBFbnN1cmUgdGhhdCBzdWJwcm9jZXNzLmNvbW11bmljYXRlKCkgbmV2ZXIgcmFpc2VzIEVQSVBFLgorCistIElzc3VlICMxMDc5MTogSW1wbGVtZW50IG1pc3NpbmcgbWV0aG9kIEd6aXBGaWxlLnJlYWQxKCksIGFsbG93aW5nIEd6aXBGaWxlCisgIHRvIGJlIHdyYXBwZWQgaW4gYSBUZXh0SU9XcmFwcGVyLiAgUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTcwNzogQWRkZWQgYSBmYXN0IEMgdmVyc2lvbiBvZiBmdW5jdG9vbHMuY21wX3RvX2tleSgpLgorICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxMTY4ODogQWRkIHNxbGl0ZTMuQ29ubmVjdGlvbi5zZXRfdHJhY2VfY2FsbGJhY2soKS4gIFBhdGNoIGJ5CisgIFRvcnN0ZW4gTGFuZHNjaG9mZi4KKworLSBJc3N1ZSAjMTE3NDY6IEZpeCBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpIHRvIGFjY2VwdCBlbGxpcHRpYyBjdXJ2ZQorICBwcml2YXRlIGtleXMuCisKKy0gSXNzdWUgIzU4NjM6IFJld3JpdGUgQloyRmlsZSBpbiBwdXJlIFB5dGhvbiwgYW5kIGFsbG93IGl0IHRvIGFjY2VwdAorICBmaWxlLWxpa2Ugb2JqZWN0cyB1c2luZyBhIG5ldyBgYGZpbGVvYmpgYCBjb25zdHJ1Y3RvciBhcmd1bWVudC4gIFBhdGNoIGJ5CisgIE5hZGVlbSBWYXdkYS4KKworLSB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRTYW1lRWxlbWVudHMgaGFzIGJlZW4gcmVtb3ZlZC4KKworLSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIGluaXRmc2VuY29kaW5nKCkgd2FzIG5vdAorICBjYWxsZWQgeWV0OiBkZXRlY3QgYm9vdHN0cmFwIChzdGFydHVwKSBpc3N1ZXMgZWFybGllci4KKworLSBJc3N1ZSAjMTEzOTM6IEFkZCB0aGUgbmV3IGZhdWx0aGFuZGxlciBtb2R1bGUuCisKKy0gSXNzdWUgIzExNjE4OiBGaXggdGhlIHRpbWVvdXQgbG9naWMgaW4gdGhyZWFkaW5nLkxvY2suYWNxdWlyZSgpIHVuZGVyIFdpbmRvd3MuCisKKy0gUmVtb3ZlZCB0aGUgJ3N0cmljdCcgYXJndW1lbnQgdG8gZW1haWwucGFyc2VyLlBhcnNlciwgd2hpY2ggaGFzIGJlZW4KKyAgZGVwcmVjYXRlZCBzaW5jZSBQeXRob24gMi40LgorCistIElzc3VlICMxMTI1NjogRml4IGluc3BlY3QuZ2V0Y2FsbGFyZ3Mgb24gZnVuY3Rpb25zIHRoYXQgdGFrZSBvbmx5IGtleXdvcmQKKyAgYXJndW1lbnRzLgorCistIElzc3VlICMxMTY5NjogRml4IElEIGdlbmVyYXRpb24gaW4gbXNpbGliLgorCistIGl0ZXJ0b29scy5hY2N1bXVsYXRlIG5vdyBzdXBwb3J0cyBhbiBvcHRpb25hbCAqZnVuYyogYXJndW1lbnQgZm9yCisgIGEgdXNlci1zdXBwbGllZCBiaW5hcnkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzExNjkyOiBSZW1vdmUgdW5uZWNlc3NhcnkgZGVtbyBmdW5jdGlvbnMgaW4gc3VicHJvY2VzcyBtb2R1bGUuCisKKy0gSXNzdWUgIzk2OTY6IEZpeCBleGNlcHRpb24gaW5jb3JyZWN0bHkgcmFpc2VkIGJ5IHhkcmxpYi5QYWNrZXIucGFja19pbnQgd2hlbgorICB0cnlpbmcgdG8gcGFjayBhIG5lZ2F0aXZlIChpbi1yYW5nZSkgaW50ZWdlci4KKworLSBJc3N1ZSAjMTE2NzU6IG11bHRpcHJvY2Vzc2luZy5bUmF3XUFycmF5IG9iamVjdHMgY3JlYXRlZCBmcm9tIGFuIGludGVnZXIgc2l6ZQorICBhcmUgbm93IHplcm9lZCBvbiBjcmVhdGlvbi4gIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyIHNwZWNpZmllZCBieSB0aGUKKyAgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNzYzOTogRml4IHNob3J0IGZpbGUgbmFtZSBnZW5lcmF0aW9uIGluIGJkaXN0X21zaQorCistIElzc3VlICMxMTY1OTogRml4IFJlc291cmNlV2FybmluZyBpbiB0ZXN0X3N1YnByb2Nlc3MgaW50cm9kdWNlZCBieSAjMTE0NTkuCisgIFBhdGNoIGJ5IEJlbiBIYXlkZW4uCisKKy0gSXNzdWUgIzExNjM1OiBEb24ndCB1c2UgcG9sbGluZyBpbiB3b3JrZXIgdGhyZWFkcyBhbmQgcHJvY2Vzc2VzIGxhdW5jaGVkIGJ5CisgIGNvbmN1cnJlbnQuZnV0dXJlcy4KKworLSBJc3N1ZSAjNjgxMTogQWxsb3cgaW1wb3J0bGliIHRvIGNoYW5nZSBhIGNvZGUgb2JqZWN0J3MgY29fZmlsZW5hbWUgYXR0cmlidXRlCisgIHRvIG1hdGNoIHRoZSBwYXRoIHRvIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBjdXJyZW50bHkgaXMsIG5vdCB3aGVyZSB0aGUgY29kZQorICBvYmplY3Qgb3JpZ2luYWxseSBjYW1lIGZyb20uCisKKy0gSXNzdWUgIzg3NTQ6IEhhdmUgaW1wb3J0bGliIHVzZSB0aGUgcmVwciBvZiBhIG1vZHVsZSBuYW1lIGluIGVycm9yIG1lc3NhZ2VzLgorCistIElzc3VlICMxMTU5MTogUHJldmVudCAiaW1wb3J0IHNpdGUiIGZyb20gbW9kaWZ5aW5nIHN5cy5wYXRoIHdoZW4gcHl0aG9uCisgIHdhcyBzdGFydGVkIHdpdGggLVMuCisKKy0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIG5vdyBhZGRzIGEgX3NvdXJjZSBhdHRyaWJ1dGUgdG8gdGhlIGdlbmVyYXRlZAorICBjbGFzcy4gIFRoaXMgbWFrZSB0aGUgc291cmNlIG1vcmUgYWNjZXNzaWJsZSB0aGFuIHRoZSBvdXRkYXRlZAorICAidmVyYm9zZSIgb3B0aW9uIHdoaWNoIHByaW50cyB0byBzdGRvdXQgYnV0IGRvZXNuJ3QgbWFrZSB0aGUgc291cmNlCisgIHN0cmluZyBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzExMzcxOiBNYXJrIGdldG9wdCBlcnJvciBtZXNzYWdlcyBhcyBsb2NhbGl6YWJsZS4gIFBhdGNoIGJ5IEZpbGlwCisgIEdydXN6Y3p5xYRza2kuCisKKy0gSXNzdWUgIzExMzMzOiBBZGQgX19zbG90c19fIHRvIGNvbGxlY3Rpb25zIEFCQ3MuCisKKy0gSXNzdWUgIzExNjI4OiBjbXBfdG9fa2V5IGdlbmVyYXRlZCBjbGFzcyBzaG91bGQgdXNlIF9fc2xvdHNfXy4KKworLSBJc3N1ZSAjMTE2NjY6IGxldCBoZWxwKCkgZGlzcGxheSBuYW1lZCB0dXBsZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzCisgIHRoYXQgc3RhcnQgd2l0aCBhIGxlYWRpbmcgdW5kZXJzY29yZS4KKworLSBJc3N1ZSAjMTE2NjI6IE1ha2UgdXJsbGliIGFuZCB1cmxsaWIyIGlnbm9yZSByZWRpcmVjdGlvbnMgaWYgdGhlCisgIHNjaGVtZSBpcyBub3QgSFRUUCwgSFRUUFMgb3IgRlRQIChDVkUtMjAxMS0xNTIxKS4KKworLSBJc3N1ZSAjNTUzNzogRml4IHRpbWUyaXNveigpIGFuZCB0aW1lMm5ldHNjYXBlKCkgZnVuY3Rpb25zIG9mCisgIGh0dHBsaWIuY29va2llamFyIGZvciBleHBpcmF0aW9uIHllYXIgZ3JlYXRlciB0aGFuIDIwMzggb24gMzItYml0IHN5c3RlbXMuCisKKy0gSXNzdWUgIzQzOTE6IFVzZSBwcm9wZXIgZ2V0dGV4dCBwbHVyYWwgZm9ybXMgaW4gb3B0cGFyc2UuCisKKy0gSXNzdWUgIzExMTI3OiBSYWlzZSBhIFR5cGVFcnJvciB3aGVuIHRyeWluZyB0byBwaWNrbGUgYSBzb2NrZXQgb2JqZWN0LgorCistIElzc3VlICMxMTU2MzogQ29ubmVjdGlvbjpjbG9zZSBoZWFkZXIgaXMgc2VudCBieSByZXF1ZXN0cyB1c2luZyBVUkxPcGVuZXIKKyAgY2xhc3Mgd2hpY2ggaGVscHMgaW4gY2xvc2luZyBvZiBzb2NrZXRzIGFmdGVyIGNvbm5lY3Rpb24gaXMgb3Zlci4gUGF0Y2gKKyAgY29udHJpYnV0aW9ucyBieSBKZWZmIE1jTmVpbCBhbmQgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTQ1OTogQSBgYGJ1ZnNpemVgYCB2YWx1ZSBvZiAwIGluIHN1YnByb2Nlc3MuUG9wZW4oKSByZWFsbHkgY3JlYXRlcworICB1bmJ1ZmZlcmVkIHBpcGVzLCBzdWNoIHRoYXQgc2VsZWN0KCkgd29ya3MgcHJvcGVybHkgb24gdGhlbS4KKworLSBJc3N1ZSAjNTQyMTogRml4IG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZSB3aGVuIG9uZSBvZiBzb2NrZXQuc2VuZHRvKCkncworICBhcmd1bWVudHMgaGFzIHRoZSB3cm9uZyB0eXBlLiAgUGF0Y2ggYnkgTmlraXRhIFZldG9zaGtpbi4KKworLSBJc3N1ZSAjMTA4MTI6IEFkZCBzb21lIGV4dHJhIHBvc2l4IGZ1bmN0aW9ucyB0byB0aGUgb3MgbW9kdWxlLgorCistIElzc3VlICMxMDk3OTogdW5pdHRlc3Qgc3Rkb3V0IGJ1ZmZlcmluZyBub3cgd29ya3Mgd2l0aCBjbGFzcyBhbmQgbW9kdWxlCisgIHNldHVwIGFuZCB0ZWFyZG93bi4KKworLSBJc3N1ZSAjMTE1Nzc6IGZpeCBSZXNvdXJjZVdhcm5pbmcgdHJpZ2dlcmVkIGJ5IGltcHJvdmVkIGJpbmhleCB0ZXN0IGNvdmVyYWdlCisKKy0gSXNzdWUgIzExMjQzOiBmaXggdGhlIHBhcmFtZXRlciBxdWVyeWluZyBtZXRob2RzIG9mIE1lc3NhZ2UgdG8gd29yayBpZgorICB0aGUgaGVhZGVycyBjb250YWluIHVuLWVuY29kZWQgbm9uLUFTQ0lJIGRhdGEuCisKKy0gSXNzdWUgIzExNDAxOiBmaXggaGFuZGxpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlOyB0aGlzIGZpeGVzIGEgcmVncmVzc2lvbgorICByZWxhdGl2ZSB0byBQeXRob24yIGFuZCB0aGUgcmVzdWx0IGlzIG5vdyB0aGUgc2FtZSBhcyBpdCB3YXMgaW4gUHl0aG9uMi4KKworLSBJc3N1ZSAjOTI5ODogYmFzZTY0IGJvZGllcyB3ZXJlbid0IGJlaW5nIGZvbGRlZCB0byBsaW5lIGxlbmd0aHMgbGVzcyB0aGFuIDc4LAorICB3aGljaCB3YXMgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIuICBVbmxpa2UgUHl0aG9uMiwgdGhlIGxhc3QgbGluZQorICBvZiB0aGUgZm9sZGVkIGJvZHkgbm93IGVuZHMgd2l0aCBhIGNhcnJpYWdlIHJldHVybi4KKworLSBJc3N1ZSAjMTE1NjA6IHNodXRpbC51bnBhY2tfYXJjaGl2ZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgdGhlIGZvcm1hdAorICBwYXJhbWV0ZXIuIFBhdGNoIGJ5IEV2YW4gRGFuZHJlYS4KKworLSBJc3N1ZSAjNTg3MDogQWRkIGBzdWJwcm9jZXNzLkRFVk5VTExgIGNvbnN0YW50LgorCistIElzc3VlICMxMTEzMzogZml4IHR3byBjYXNlcyB3aGVyZSBpbnNwZWN0LmdldGF0dHJfc3RhdGljIGNhbiB0cmlnZ2VyIGNvZGUKKyAgZXhlY3V0aW9uLiBQYXRjaCBieSBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzExNTY5OiB1c2UgYWJzb2x1dGUgcGF0aCB0byB0aGUgc3lzY3RsIGNvbW1hbmQgaW4gbXVsdGlwcm9jZXNzaW5nIHRvCisgIGVuc3VyZSB0aGF0IGl0IHdpbGwgYmUgZm91bmQgcmVnYXJkbGVzcyBvZiB0aGUgc2hlbGwgUEFUSC4gVGhpcyBlbnN1cmVzCisgIHRoYXQgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCB3b3JrcyBvbiBkZWZhdWx0IGluc3RhbGxzIG9mIE1hY09TWC4KKworLSBJc3N1ZSAjMTE1MDE6IGRpc3V0aWxzLmFyY2hpdmVfdXRpbHMubWFrZV96aXBmaWxlIG5vIGxvbmdlciBmYWlscyBpZiB6bGliIGlzCisgIG5vdCBpbnN0YWxsZWQuIEluc3RlYWQsIHRoZSB6aXBmaWxlLlpJUF9TVE9SRUQgY29tcHJlc3Npb24gaXMgdXNlZCB0byBjcmVhdGUKKyAgdGhlIFppcEZpbGUuIFBhdGNoIGJ5IE5hdGFsaWEgQi4gQmlkYXJ0LgorCistIElzc3VlICMxMTI4OTogYHNtdHAuU01UUGAgY2xhc3MgaXMgbm93IGEgY29udGV4dCBtYW5hZ2VyIHNvIGl0IGNhbiBiZSB1c2VkCisgIGluIGEgYHdpdGhgIHN0YXRlbWVudC4gIENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEuCisKKy0gSXNzdWUgIzExNTU0OiBGaXhlZCBzdXBwb3J0IGZvciBKYXBhbmVzZSBjb2RlY3M7IHByZXZpb3VzbHkgdGhlIGJvZHkgb3V0cHV0CisgIGVuY29kaW5nIHdhcyBub3QgZG9uZSBpZiBldWMtanAgb3Igc2hpZnQtamlzIHdhcyBzcGVjaWZpZWQgYXMgdGhlIGNoYXJzZXQuCisKKy0gSXNzdWUgIzExNTA5OiBTaWduaWZpY2FudGx5IGluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2YgZmlsZWlucHV0LgorICBQYXRjaCBieSBEZW52ZXIgQ29uZXliZWFyZSBhdCBQeUNvbiAyMDExIFNwcmludHMuCisKKy0gSXNzdWUgIzExNDA3OiBgVGVzdENhc2UucnVuYCByZXR1cm5zIHRoZSByZXN1bHQgb2JqZWN0IHVzZWQgb3IgY3JlYXRlZC4KKyAgQ29udHJpYnV0ZWQgYnkgSmFuYXRoYW4gSGFydGxleS4KKworLSBJc3N1ZSAjMTE1MDA6IEZpeGVkIGEgYnVnIGluIHRoZSBPUyBYIHByb3h5IGJ5cGFzcyBjb2RlIGZvciBmdWxseSBxdWFsaWZpZWQKKyAgSVAgYWRkcmVzc2VzIGluIHRoZSBwcm94eSBleGNlcHRpb24gbGlzdC4KKworLSBJc3N1ZSAjMTE0OTE6IGRibS5lcnJvciBpcyBubyBsb25nZXIgcmFpc2VkIHdoZW4gZGJtLm9wZW4gaXMgY2FsbGVkIHdpdGgKKyAgdGhlICJuIiBhcyB0aGUgZmxhZyBhcmd1bWVudCBhbmQgdGhlIGZpbGUgZXhpc3RzLiBUaGUgYmVoYXZpb3IgbWF0Y2hlcworICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZ2VuZXJhbCBsb2dpYy4KKworLSBJc3N1ZSAjMTE2MjQ3NzogUG9zdGVsIFByaW5jaXBsZSBhZGp1c3RtZW50IHRvIGVtYWlsIGRhdGUgcGFyc2luZzogaGFuZGxlIHRoZQorICBmYWN0IHRoYXQgc29tZSBub24tY29tcGxpYW50IE1VQXMgdXNlICcuJyBpbnN0ZWFkIG9mICc6JyBpbiB0aW1lIHNwZWNzLgorCistIElzc3VlICMxMTEzMTogRml4IHNpZ24gb2YgemVybyBpbiBkZWNpbWFsLkRlY2ltYWwgcGx1cyBhbmQgbWludXMKKyAgb3BlcmF0aW9ucyB3aGVuIHRoZSByb3VuZGluZyBtb2RlIGlzIFJPVU5EX0ZMT09SLgorCistIElzc3VlICM5OTM1OiBTcGVlZCB1cCBwaWNrbGluZyBvZiBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMuCisKKy0gSXNzdWUgIzU2MjI6IEZpeCBjdXJzZXMud3JhcHBlciB0byByYWlzZSBjb3JyZWN0IGV4Y2VwdGlvbiBpZiBjdXJzZXMKKyAgaW5pdGlhbGl6YXRpb24gZmFpbHMuCisKKy0gSXNzdWUgIzExNDA4OiBJbiB0aHJlYWRpbmcuTG9jay5hY3F1aXJlKCksIG9ubHkgY2FsbCBnZXR0aW1lb2ZkYXkoKSB3aGVuCisgIHJlYWxseSBuZWNlc3NhcnkuICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzExMzkxOiBXcml0aW5nIHRvIGEgbW1hcCBvYmplY3QgY3JlYXRlZCB3aXRoCisgIGBgbW1hcC5QUk9UX1JFQUR8bW1hcC5QUk9UX0VYRUNgYCB3b3VsZCBzZWdmYXVsdCBpbnN0ZWFkIG9mIHJhaXNpbmcgYQorICBUeXBlRXJyb3IuICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzk3OTU6IGFkZCBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgc3VwcG9ydCBmb3Igbm50cGxpYi5OTlRQIGNsYXNzLgorCistIElzc3VlICMxMTMwNjogbWFpbGJveCBpbiBjZXJ0YWluIGNhc2VzIGFkYXB0cyB0byBhbiBpbmFiaWxpdHkgdG8gb3BlbgorICBjZXJ0YWluIGZpbGVzIGluIHJlYWQtd3JpdGUgbW9kZS4gIFByZXZpb3VzbHkgaXQgZGV0ZWN0ZWQgdGhpcyBieQorICBjaGVja2luZyBmb3IgRUFDQ0VTLCBub3cgaXQgYWxzbyBjaGVja3MgZm9yIEVST0ZTLgorCistIElzc3VlICMxMTI2NTogYXN5bmNvcmUgbm93IGNvcnJlY3RseSBoYW5kbGVzIEVQSVBFLCBFQkFERiBhbmQgRUFHQUlOIGVycm9ycworICBvbiBhY2NlcHQoKSwgc2VuZCgpIGFuZCByZWN2KCkuCisKKy0gSXNzdWUgIzExMzc3OiBEZXByZWNhdGUgcGxhdGZvcm0ucG9wZW4oKSBhbmQgcmVpbXBsZW1lbnQgaXQgd2l0aCBvcy5wb3BlbigpLgorCistIElzc3VlICM4NTEzOiBPbiBVTklYLCBzdWJwcm9jZXNzIHN1cHBvcnRzIGJ5dGVzIGNvbW1hbmQgc3RyaW5nLgorCistIElzc3VlICMxMDg2NjogQWRkIHNvY2tldC5zZXRob3N0bmFtZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjMTExNDA6IExvY2sucmVsZWFzZSgpIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3Igd2hlbiBhdHRlbXB0aW5nCisgIHRvIHJlbGVhc2UgYW4gdW5hY3F1aXJlZCBsb2NrLCBhcyBjbGFpbWVkIGluIHRoZSB0aHJlYWRpbmcgZG9jdW1lbnRhdGlvbi4KKyAgVGhlIF90aHJlYWQuZXJyb3IgZXhjZXB0aW9uIGlzIG5vdyBhbiBhbGlhcyBvZiBSdW50aW1lRXJyb3IuICBQYXRjaCBieQorICBGaWxpcCBHcnVzemN6ecWEc2tpLiAgUGF0Y2ggZm9yIF9kdW1teV90aHJlYWQgYnkgQXltZXJpYyBBdWd1c3Rpbi4KKworLSBJc3N1ZSAjODU5NDogZnRwbGliIG5vdyBwcm92aWRlcyBhIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciB0byBzcGVjaWZ5IHdoaWNoCisgIChhZGRyZXNzLCBwb3J0KSB0byBiaW5kIHRvIGJlZm9yZSBjb25uZWN0aW5nLgorCistIElzc3VlICMxMTMyNjogQWRkIHRoZSBtaXNzaW5nIGNvbm5lY3RfZXgoKSBpbXBsZW1lbnRhdGlvbiBmb3IgU1NMIHNvY2tldHMsCisgIGFuZCBtYWtlIGl0IHdvcmsgZm9yIG5vbi1ibG9ja2luZyBjb25uZWN0cy4KKworLSBJc3N1ZSAjMTEyOTc6IEFkZCBjb2xsZWN0aW9ucy5DaGFpbk1hcCgpLgorCistIElzc3VlICMxMDc1NTogQWRkIHRoZSBwb3NpeC5mbGlzdGRpcigpIGZ1bmN0aW9uLiAgUGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzQ3NjE6IEFkZCB0aGUgYGAqYXQoKWBgIGZhbWlseSBvZiBmdW5jdGlvbnMgKG9wZW5hdCgpLCBldGMuKSB0byB0aGUKKyAgcG9zaXggbW9kdWxlLiAgUGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzczMjI6IFRyeWluZyB0byByZWFkIGZyb20gYSBzb2NrZXQncyBmaWxlLWxpa2Ugb2JqZWN0IGFmdGVyIGEgdGltZW91dAorICBvY2N1cnJlZCBub3cgcmFpc2VzIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbG9zaW5nIGRhdGEuCisKKy0gSXNzdWUgIzExMjkxOiBwb3BsaWIuUE9QIG5vIGxvbmdlciBzdXBwcmVzc2VzIGVycm9ycyBvbiBxdWl0KCkuCisKKy0gSXNzdWUgIzExMTc3OiBhc3luY29yZSdzIGNyZWF0ZV9zb2NrZXQoKSBhcmd1bWVudHMgY2FuIG5vdyBiZSBvbWl0dGVkLgorCistIElzc3VlICM2MDY0OiBBZGQgYSBgYGRhZW1vbmBgIGtleXdvcmQgYXJndW1lbnQgdG8gdGhlIHRocmVhZGluZy5UaHJlYWQKKyAgYW5kIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzIGNvbnN0cnVjdG9ycyBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUKKyAgZGVmYXVsdCBiZWhhdmlvdXIgb2YgaW5oZXJpdGluZyB0aGUgZGFlbW9uaWMgcHJvcGVydHkgZnJvbSB0aGUgY3VycmVudAorICB0aHJlYWQvcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTA5NTY6IEJ1ZmZlcmVkIEkvTyBjbGFzc2VzIHJldHJ5IHJlYWRpbmcgb3Igd3JpdGluZyBhZnRlciBhIHNpZ25hbAorICBoYXMgYXJyaXZlZCBhbmQgdGhlIGhhbmRsZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgorCistIElzc3VlICMxMDc4NDogTmV3IG9zLmdldHByaW9yaXR5KCkgYW5kIG9zLnNldHByaW9yaXR5KCkgZnVuY3Rpb25zLgorCistIElzc3VlICMxMTExNDogRml4IGNhdGFzdHJvcGhpYyBwZXJmb3JtYW5jZSBvZiB0ZWxsKCkgb24gdGV4dCBmaWxlcyAodXAKKyAgdG8gMTAwMHggZmFzdGVyIGluIHNvbWUgY2FzZXMpLiAgSXQgaXMgc3RpbGwgb25lIHRvIHR3byBvcmRlciBvZiBtYWduaXR1ZGVzCisgIHNsb3dlciB0aGFuIGJpbmFyeSB0ZWxsKCkuCisKKy0gSXNzdWUgIzEwODgyOiBBZGQgb3Muc2VuZGZpbGUgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzEwODY4OiBBbGxvdyB1c2FnZSBvZiB0aGUgcmVnaXN0ZXIgbWV0aG9kIG9mIGFuIEFCQyBhcyBhIGNsYXNzCisgIGRlY29yYXRvci4KKworLSBJc3N1ZSAjMTEyMjQ6IEZpeGVkIGEgcmVncmVzc2lvbiBpbiB0YXJmaWxlIHRoYXQgYWZmZWN0ZWQgdGhlIGZpbGUtbGlrZQorICBvYmplY3RzIHJldHVybmVkIGJ5IFRhckZpbGUuZXh0cmFjdGZpbGUoKSByZWdhcmRpbmcgcGVyZm9ybWFuY2UsIG1lbW9yeQorICBjb25zdW1wdGlvbiBhbmQgZmFpbHVyZXMgd2l0aCB0aGUgc3RyZWFtIGludGVyZmFjZS4KKworLSBJc3N1ZSAjMTA5MjQ6IEFkZGluZyBzYWx0IGFuZCBNb2R1bGFyIENyeXB0IEZvcm1hdCB0byBjcnlwdCBsaWJyYXJ5LgorICBNb3ZlZCBvbGQgQyB3cmFwcGVyIHRvIF9jcnlwdCwgYW5kIGFkZGVkIGEgUHl0aG9uIHdyYXBwZXIgd2l0aAorICBlbmhhbmNlZCBzYWx0IGdlbmVyYXRpb24gYW5kIHNpbXBsZXIgQVBJIGZvciBwYXNzd29yZCBnZW5lcmF0aW9uLgorCistIElzc3VlICMxMTA3NDogTWFrZSAndG9rZW5pemUnIHNvIGl0IGNhbiBiZSByZWxvYWRlZC4KKworLSBJc3N1ZSAjMTEwODU6IE1vdmVkIGNvbGxlY3Rpb25zIGFic3RyYWN0IGJhc2UgY2xhc3NlcyBpbnRvIGEgc2VwYXJhdGUKKyAgbW9kdWxlIGNhbGxlZCBjb2xsZWN0aW9ucy5hYmMsIGZvbGxvd2luZyB0aGUgcGF0dGVybiB1c2VkIGJ5IGltcG9ydGxpYi5hYmMuCisgIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdGhlIG5hbWVzIGFyZSBpbXBvcnRlZCBpbnRvIHRoZSBjb2xsZWN0aW9ucworICBtb2R1bGUuCisKKy0gSXNzdWUgIzQ2ODE6IEFsbG93IG1tYXAoKSB0byB3b3JrIG9uIGZpbGUgc2l6ZXMgYW5kIG9mZnNldHMgbGFyZ2VyIHRoYW4KKyAgNEdCLCBldmVuIG9uIDMyLWJpdCBidWlsZHMuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLCBhZGFwdGVkIGZvcgorICAzMi1iaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTExNjk6IGNvbXBpbGVhbGwgbW9kdWxlIHVzZXMgcmVwcigpIHRvIGZvcm1hdCBmaWxlbmFtZXMgYW5kIHBhdGhzIHRvCisgIGVzY2FwZSBzdXJyb2dhdGUgY2hhcmFjdGVycyBhbmQgc2hvdyBzcGFjZXMuCisKKy0gSXNzdWUgIzExMDg5OiBGaXggcGVyZm9ybWFuY2UgaXNzdWUgbGltaXRpbmcgdGhlIHVzZSBvZiBDb25maWdQYXJzZXIoKQorICB3aXRoIGxhcmdlIGNvbmZpZyBmaWxlcy4KKworLSBJc3N1ZSAjMTAyNzY6IEZpeCB0aGUgcmVzdWx0cyBvZiB6bGliLmNyYzMyKCkgYW5kIHpsaWIuYWRsZXIzMigpIG9uIGJ1ZmZlcnMKKyAgbGFyZ2VyIHRoYW4gNEdCLiAgUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTM4ODogQWRkZWQgYSBjbGVhcigpIG1ldGhvZCB0byBNdXRhYmxlU2VxdWVuY2UKKworLSBJc3N1ZSAjMTExNzQ6IEFkZCBhcmdwYXJzZS5NZXRhdmFyVHlwZUhlbHBGb3JtYXR0ZXIsIHdoaWNoIHVzZXMgdHlwZSBuYW1lcworICBmb3IgdGhlIG5hbWVzIG9mIG9wdGlvbmFsIGFuZCBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbiBoZWxwIG1lc3NhZ2VzLgorCistIElzc3VlICM5MzQ4OiBSYWlzZSBhbiBlYXJseSBlcnJvciBpZiBhcmdwYXJzZSBuYXJncyBhbmQgbWV0YXZhciBkb24ndCBtYXRjaC4KKworLSBJc3N1ZSAjODk4MjogSW1wcm92ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGFyZ3BhcnNlIE5hbWVzcGFjZSBvYmplY3QuCisKKy0gSXNzdWUgIzkzNDM6IERvY3VtZW50IHRoYXQgYXJncGFyc2UgcGFyZW50IHBhcnNlcnMgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZQorICB0aGVpciBjaGlsZHJlbi4KKworLSBJc3N1ZSAjOTAyNjogRml4IG9yZGVyIG9mIGFyZ3BhcnNlIHN1Yi1jb21tYW5kcyBpbiBoZWxwIG1lc3NhZ2VzLgorCistIElzc3VlICM5MzQ3OiBGaXggZm9ybWF0dGluZyBmb3IgdHVwbGVzIGluIGFyZ3BhcnNlIHR5cGU9IGVycm9yIG1lc3NhZ2VzLgorCistIElzc3VlICMxMjE5MTogQWRkZWQgc2h1dGlsLmNob3duKCkgdG8gY2hhbmdlIHVzZXIgYW5kL29yIGdyb3VwIG93bmVyIG9mIGEKKyAgZ2l2ZW4gcGF0aCBhbHNvIHNwZWNpZnlpbmcgdGhlaXIgbmFtZXMuCisKKy0gSXNzdWUgIzEzOTg4OiBUaGUgX2VsZW1lbnR0cmVlIGFjY2VsZXJhdG9yIGlzIHVzZWQgd2hlbmV2ZXIgYXZhaWxhYmxlLgorICBOb3cgeG1sLmV0cmVlLmNFbGVtZW50VHJlZSBiZWNvbWVzIGEgZGVwcmVjYXRlZCBhbGlhcyB0byBFbGVtZW50VHJlZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzY4MDc6IFJ1biBtc2lzdXBwb3J0Lm1hayBlYXJsaWVyLgorCistIElzc3VlICMxMDU4MDogTWlub3IgZ3JhbW1hciBjaGFuZ2UgaW4gV2luZG93cyBpbnN0YWxsZXIuCisKKy0gSXNzdWUgIzEzMzI2OiBDbGVhbiBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb3JyZWN0bHkgb24gT3BlbkJTRC4KKworLSBQRVAgMzkzOiB0aGUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtd2lkZS11bmljb2RlIGlzIHJlbW92ZWQuCisKKy0gSXNzdWUgIzEyODUyOiBTZXQgX1hPUEVOX1NPVVJDRSB0byA3MDAsIGluc3RlYWQgb2YgNjAwLCB0byBnZXQgUE9TSVggMjAwOAorICBmdW5jdGlvbnMgb24gT3BlbkJTRCAoZS5nLiBmZG9wZW5kaXIpLgorCistIElzc3VlICMxMTg2MzogUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBzeXN0ZW1zIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMgorICAoZm9sbG93aW5nIFBFUCAxMSkuICBUaGVzZSBzeXN0ZW1zIGFyZSBzeXN0ZW1zIHVzaW5nIE1hY2ggQyBUaHJlYWRzLAorICBTdW5PUyBsaWdodHdlaWdodCBwcm9jZXNzZXMsIEdOVSBwdGggdGhyZWFkcyBhbmQgSVJJWCB0aHJlYWRzLgorCistIElzc3VlICM4NzQ2OiBDb3JyZWN0IGZhdWx0eSBjb25maWd1cmUgY2hlY2tzIHNvIHRoYXQgb3MuY2hmbGFncygpIGFuZAorICBvcy5sY2hmbGFncygpIGFyZSBvbmNlIGFnYWluIGJ1aWx0IG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZXNlCisgIGZ1bmN0aW9ucyAoQlNEIGFuZCBPUyBYKS4gIEFsc28gYWRkIG5ldyBzdGF0IGZpbGUgZmxhZ3MgZm9yIE9TIFgKKyAgKFVGX0hJRERFTiBhbmQgVUZfQ09NUFJFU1NFRCkuCisKKy0gSXNzdWUgIzEwNjQ1OiBJbnN0YWxsaW5nIFB5dGhvbiBubyBsb25nZXIgY3JlYXRlcyBhCisgIFB5dGhvbi1YLlkuWi1weVguWS5lZ2ctaW5mbyBmaWxlIGluIHRoZSBsaWItZHlubG9hZCBkaXJlY3RvcnkuCisKKy0gRG8gbm90IGFjY2lkZW50YWxseSBpbmNsdWRlIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBzcWxpdGUuaCB0d2ljZSB3aGVuCisgIGJ1aWxkaW5nIHNxbGl0ZTMuCisKKy0gSXNzdWUgIzExMjE3OiBGb3IgNjQtYml0LzMyLWJpdCBNYWMgT1MgWCB1bml2ZXJzYWwgZnJhbWV3b3JrIGJ1aWxkcywKKyAgZW5zdXJlICJtYWtlIGluc3RhbGwiIGNyZWF0ZXMgc3ltbGlua3MgaW4gLS1wcmVmaXggYmluIGZvciB0aGUgIi0zMiIKKyAgZmlsZXMgaW4gdGhlIGZyYW1ld29yayBiaW4gZGlyZWN0b3J5IGxpa2UgdGhlIGluc3RhbGxlciBkb2VzLgorCistIElzc3VlICMxMTM0NzogVXNlIC0tbm8tYXMtbmVlZGVkIHdoZW4gbGlua2luZyBsaWJweXRob24zLnNvLgorCistIElzc3VlICMxMTQxMTogRml4ICdtYWtlIERFU1RESVI9JyB3aXRoIGEgcmVsYXRpdmUgZGVzdGluYXRpb24uCisKKy0gSXNzdWUgIzExMjY4OiBQcmV2ZW50IE1hYyBPUyBYIEluc3RhbGxlciBmYWlsdXJlIGlmIERvY3VtZW50YXRpb24KKyAgcGFja2FnZSBoYWQgcHJldmlvdXNseSBiZWVuIGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTE0OTU6IE9TRiBzdXBwb3J0IGlzIGVsaW1pbmF0ZWQuIEl0IHdhcyBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIuCisKKworSURMRQorLS0tLQorCistIElzc3VlICMxMTcxODogSURMRSdzIG9wZW4gbW9kdWxlIGRpYWxvZyBjb3VsZG4ndCBmaW5kIHRoZSBfX2luaXRfXy5weQorICBmaWxlIGluIGEgcGFja2FnZS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0MDUzOiBwYXRjaGNoZWNrLnB5ICgibWFrZSBwYXRjaGNoZWNrIikgbm93IHdvcmtzIHdpdGggTVEgcGF0Y2hlcy4KKyAgUGF0Y2ggYnkgRnJhbmNpc2NvIE1hcnTDrW4gQnJ1Z3XDqS4KKworLSBJc3N1ZSAjMTM5MzA6IDJ0bzMgaXMgbm93IGFibGUgdG8gd3JpdGUgaXRzIGNvbnZlcnRlZCBvdXRwdXQgZmlsZXMgdG8gYW5vdGhlcgorICBkaXJlY3RvcnkgdHJlZSBhcyB3ZWxsIGFzIGNvcHlpbmcgdW5jaGFuZ2VkIGZpbGVzIGFuZCBhbHRlcmluZyB0aGUgZmlsZQorICBzdWZmaXguICBTZWUgaXRzIG5ldyAtbywgLVcgYW5kIC0tYWRkLXN1ZmZpeCBvcHRpb25zLiAgVGhpcyBtYWtlcyBpdCBtb3JlCisgIHVzZWZ1bCBpbiBtYW55IGF1dG9tYXRlZCBjb2RlIHRyYW5zbGF0aW9uIHdvcmtmbG93cy4KKworLSBJc3N1ZSAjMTM2Mjg6IHB5dGhvbi1nZGIucHkgaXMgbm93IGFibGUgdG8gcmV0cmlldmUgbW9yZSBmcmFtZXMgaW4gdGhlIFB5dGhvbgorICB0cmFjZWJhY2sgaWYgUHl0aG9uIGlzIG9wdGltaXplZC4KKworLSBJc3N1ZSAjMTE5OTY6IGxpYnB5dGhvbiAoZ2RiKSwgcmVwbGFjZSAicHktYnQiIGNvbW1hbmQgYnkgInB5LWJ0LWZ1bGwiIGFuZAorICBhZGQgYSBzbWFydGVyICJweS1idCIgY29tbWFuZCBwcmludGluZyBhIGNsYXNzaWMgUHl0aG9uIHRyYWNlYmFjay4KKworLSBJc3N1ZSAjMTExNzk6IE1ha2UgY2NiZW5jaCB3b3JrIHVuZGVyIFB5dGhvbiAzLjEgYW5kIDIuNyBhZ2Fpbi4KKworLSBJc3N1ZSAjMTA2Mzk6IHJlaW5kZW50LnB5IG5vIGxvbmdlciBjb252ZXJ0cyBuZXdsaW5lcyBhbmQgd2lsbCByYWlzZQorICBhbiBlcnJvciBpZiBhdHRlbXB0aW5nIHRvIGNvbnZlcnQgYSBmaWxlIHdpdGggbWl4ZWQgbmV3bGluZXMuCisgICItLW5ld2xpbmUiIG9wdGlvbiBhZGRlZCB0byBzcGVjaWZ5IG5ldyBsaW5lIGNoYXJhY3Rlci4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEzODQwOiBUaGUgZXJyb3IgbWVzc2FnZSBwcm9kdWNlZCBieSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIKKyAgd2hlbiBnaXZlbiBhIFVuaWNvZGUgc3RyaW5nIGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICM5OTc1OiBzb2NrZXQ6IEZpeCBpbmNvcnJlY3QgdXNlIG9mIGZsb3dpbmZvIGFuZCBzY29wZV9pZC4gUGF0Y2ggYnkKKyAgVmlsbW9zIE5lYmVoYWouCisKKy0gSXNzdWUgIzc3Nzc6IHNvY2tldDogQWRkIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFBGX1JEUykgc3VwcG9ydC4KKworLSBJc3N1ZSAjMTMxNTk6IEZpbGVJTyBhbmQgQloyQ29tcHJlc3Nvci9CWjJEZWNvbXByZXNzb3Igbm93IHVzZSBhIGxpbmVhci10aW1lCisgIGJ1ZmZlciBncm93dGggc3RyYXRlZ3kgaW5zdGVhZCBvZiBhIHF1YWRyYXRpYy10aW1lIG9uZS4KKworLSBJc3N1ZSAjMTAxNDE6IHNvY2tldDogQWRkIFNvY2tldENBTiAoUEZfQ0FOKSBzdXBwb3J0LiBJbml0aWFsIHBhdGNoIGJ5CisgIE1hdHRoaWFzIEZ1Y2hzLCB1cGRhdGVkIGJ5IFRpYWdvIEdvbsOnYWx2ZXMuCisKKy0gSXNzdWUgIzEzMDcwOiBGaXggYSBjcmFzaCB3aGVuIGEgVGV4dElPV3JhcHBlciBjYXVnaHQgaW4gYSByZWZlcmVuY2UgY3ljbGUKKyAgd291bGQgYmUgZmluYWxpemVkIGFmdGVyIHRoZSByZWZlcmVuY2UgdG8gaXRzIHVuZGVybHlpbmcgQnVmZmVyZWRSV1BhaXIncworICB3cml0ZXIgZ290IGNsZWFyZWQgYnkgdGhlIEdDLgorCistIElzc3VlICMxMjg4MTogY3R5cGVzOiBGaXggc2VnZmF1bHQgd2l0aCBsYXJnZSBzdHJ1Y3R1cmUgZmllbGQgbmFtZXMuCisKKy0gSXNzdWUgIzEzMDU4OiBvc3NhdWRpb2RldjogZml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgb24gZXJyb3IuIFBhdGNoIGJ5CisgIFRob21hcyBKYXJvc2NoLgorCistIElzc3VlICMxMzAxMzogY3R5cGVzOiBGaXggYSByZWZlcmVuY2UgbGVhayBpbiBQeUNBcnJheVR5cGVfZnJvbV9jdHlwZS4KKyAgVGhhbmtzIHRvIFN1bWFuIFNhaGEgZm9yIGZpbmRpbmcgdGhlIGJ1ZyBhbmQgcHJvdmlkaW5nIGEgcGF0Y2guCisKKy0gSXNzdWUgIzEzMDIyOiBGaXg6IF9tdWx0aXByb2Nlc3NpbmcucmVjdmZkKCkgZG9lc24ndCBjaGVjayB0aGF0CisgIGZpbGUgZGVzY3JpcHRvciB3YXMgYWN0dWFsbHkgcmVjZWl2ZWQuCisKKy0gSXNzdWUgIzExNzI3MTE6IEFkZCAnbG9uZyBsb25nJyBzdXBwb3J0IHRvIHRoZSBhcnJheSBtb2R1bGUuCisgIEluaXRpYWwgcGF0Y2ggYnkgT3JlbiBUaXJvc2ggYW5kIEhpcm9rYXp1IFlhbWFtb3RvLgorCistIElzc3VlICMxMjQ4MzogY3R5cGVzOiBGaXggYSBjcmFzaCB3aGVuIHRoZSBkZXN0cnVjdGlvbiBvZiBhIGNhbGxiYWNrCisgIG9iamVjdCB0cmlnZ2VycyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCisKKy0gSXNzdWUgIzEyOTUwOiBGaXggcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzIGluIG11bHRpcHJvY2Vzc2luZywgdW5kZXIKKyAgT3BlbkluZGlhbmEvSWxsdW1vcy4KKworLSBJc3N1ZSAjMTI3NjQ6IEZpeCBhIGNyYXNoIGluIGN0eXBlcyB3aGVuIHRoZSBuYW1lIG9mIGEgU3RydWN0dXJlIGZpZWxkIGlzIG5vdAorICBhIHN0cmluZy4KKworLSBJc3N1ZSAjMTEyNDE6IHN1YmNsYXNzZXMgb2YgY3R5cGVzLkFycmF5IGNhbiBub3cgYmUgc3ViY2xhc3NlZC4KKworLSBJc3N1ZSAjOTY1MTogRml4IGEgY3Jhc2ggd2hlbiBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIoMCkgd2FzIHBhc3NlZCB0bworICBzb21lIGZ1bmN0aW9ucyBsaWtlIGZpbGUud3JpdGUoKS4KKworLSBJc3N1ZSAjMTAzMDk6IERlZmluZSBfR05VX1NPVVJDRSBzbyB0aGF0IG1yZW1hcCgpIGdldHMgdGhlIHByb3BlcgorICBzaWduYXR1cmUuICBXaXRob3V0IHRoaXMsIGFyY2hpdGVjdHVyZXMgd2hlcmUgc2l6ZW9mIHZvaWQqICE9IHNpemVvZiBpbnQgYXJlCisgIGJyb2tlbi4gIFBhdGNoIGdpdmVuIGJ5IEhhbGx2YXJkIEIgRnVydXNldGguCisKKy0gSXNzdWUgIzEyMDUxOiBGaXggc2VnZmF1bHQgaW4ganNvbi5kdW1wcygpIHdoaWxlIGVuY29kaW5nIGhpZ2hseS1uZXN0ZWQKKyAgb2JqZWN0cyB1c2luZyB0aGUgQyBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxMjAxNzogRml4IHNlZ2ZhdWx0IGluIGpzb24ubG9hZHMoKSB3aGlsZSBkZWNvZGluZyBoaWdobHktbmVzdGVkCisgIG9iamVjdHMgdXNpbmcgdGhlIEMgYWNjZWxlcmF0aW9ucy4KKworLSBJc3N1ZSAjMTgzODogUHJldmVudCBzZWdmYXVsdCBpbiBjdHlwZXMsIHdoZW4gX2FzX3BhcmFtZXRlcl8gb24gYSBjbGFzcyBpcyBzZXQKKyAgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTE2ODk6IEZpeCBhIHZhcmlhYmxlIHNjb3BpbmcgZXJyb3IgaW4gYW4gc3FsaXRlMyB0ZXN0CisKKy0gSXNzdWUgIzEzNzg2OiBSZW1vdmUgdW5pbXBsZW1lbnRlZCAndHJhY2UnIGxvbmcgb3B0aW9uIGZyb20gcmVncnRlc3QucHkuCisKKy0gSXNzdWUgIzEzNzI1OiBGaXggcmVncnRlc3QgdG8gcmVjb2duaXplIHRoZSBkb2N1bWVudGVkIC1kIGZsYWcuCisgIFBhdGNoIGJ5IEVybm8gVHVraWEuCisKKy0gSXNzdWUgIzEzMzA0OiBTa2lwIHRlc3QgY2FzZSBpZiB1c2VyIHNpdGUtcGFja2FnZXMgZGlzYWJsZWQgKC1zIG9yCisgIFBZVEhPTk5PVVNFUlNJVEUpLiAgKFBhdGNoIGJ5IENhcmwgTWV5ZXIpCisKKy0gSXNzdWUgIzU2NjE6IEFkZCBhIHRlc3QgZm9yIEVDT05OUkVTRVQvRVBJUEUgaGFuZGxpbmcgdG8gdGVzdF9hc3luY29yZS4gUGF0Y2gKKyAgYnkgWGF2aWVyIGRlIEdheWUuCisKKy0gSXNzdWUgIzEzMjE4OiBGaXggdGVzdF9zc2wgZmFpbHVyZXMgb24gRGViaWFuL1VidW50dS4KKworLSBSZS1lbmFibGUgbGliMnRvMydzIHRlc3RfcGFyc2VyLnB5IHRlc3RzLCB0aG91Z2ggd2l0aCBhbiBleHBlY3RlZCBmYWlsdXJlCisgIChzZWUgaXNzdWUgMTMxMjUpLgorCistIElzc3VlICMxMjY1NjogQWRkIHRlc3RzIGZvciBJUHY2IGFuZCBVbml4IHNvY2tldHMgdG8gdGVzdF9hc3luY29yZS4KKworLSBJc3N1ZSAjNjQ4NDogQWRkIHVuaXQgdGVzdHMgZm9yIG1haWxjYXAgbW9kdWxlIChwYXRjaCBieSBHcmVnb3J5IE5vZmkpCisKKy0gSXNzdWUgIzExNjUxOiBJbXByb3ZlIHRoZSBNYWtlZmlsZSB0ZXN0IHRhcmdldHMgdG8gcnVuIG1vcmUgb2YgdGhlIHRlc3Qgc3VpdGUKKyAgbW9yZSBxdWlja2x5LiBUaGUgLS1tdWx0aXByb2Nlc3Mgb3B0aW9uIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQsIHJlZHVjaW5nCisgIHRoZSBhbW91bnQgb2YgdGltZSBuZWVkZWQgdG8gcnVuIHRoZSB0ZXN0cy4gIm1ha2UgdGVzdCIgYW5kICJtYWtlIHF1aWNrdGVzdCIKKyAgbm93IGluY2x1ZGUgc29tZSByZXNvdXJjZS1pbnRlbnNpdmUgdGVzdHMsIGJ1dCBubyBsb25nZXIgcnVuIHRoZSB0ZXN0IHN1aXRlCisgIHR3aWNlIHRvIGNoZWNrIGZvciBidWdzIGluIC5weWMgZ2VuZXJhdGlvbi4gVG9vbHMvc2NyaXB0cy9ydW5fdGVzdC5weSBwcm92aWRlcworICBhbiBlYXN5IHBsYXRmb3JtLWluZGVwZW5kZW50IHdheSB0byBydW4gdGVzdCBzdWl0ZSB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzLgorCistIElzc3VlICMxMjMzMTogVGhlIHRlc3Qgc3VpdGUgZm9yIHRoZSBwYWNrYWdpbmcgbW9kdWxlIGNhbiBub3cgcnVuIGZyb20gYW4KKyAgaW5zdGFsbGVkIFB5dGhvbi4KKworLSBJc3N1ZSAjMTIzMzE6IFRoZSB0ZXN0IHN1aXRlIGZvciBsaWIydG8zIGNhbiBub3cgcnVuIGZyb20gYW4gaW5zdGFsbGVkCisgIFB5dGhvbi4KKworLSBJc3N1ZSAjMTI2MjY6IEluIHJlZ3J0ZXN0LCBhbGxvdyB0byBmaWx0ZXIgdGVzdHMgdXNpbmcgYSBnbG9iIGZpbHRlcgorICB3aXRoIHRoZSBgYC1tYGAgKG9yIGBgLS1tYXRjaGBgKSBvcHRpb24uICBUaGlzIHdvcmtzIHdpdGggYWxsIHRlc3QgY2FzZXMKKyAgdXNpbmcgdGhlIHVuaXR0ZXN0IG1vZHVsZS4gIFRoaXMgaXMgdXNlZnVsIHdpdGggbG9uZyB0ZXN0IHN1aXRlcworICBzdWNoIGFzIHRlc3RfaW8gb3IgdGVzdF9zdWJwcm9jZXNzLgorCistIElzc3VlICMxMjYyNDogSXQgaXMgbm93IHBvc3NpYmxlIHRvIGZhaWwgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUgd2hlbgorICBydW5uaW5nIGluIHZlcmJvc2UgbW9kZSAoYGAtdmBgIG9yIGBgLVdgYCksIGJ5IHVzaW5nIHRoZSBgYC0tZmFpbGZhc3RgYAorICAob3IgYGAtR2BgKSBvcHRpb24gdG8gcmVncnRlc3QuICBUaGlzIGlzIHVzZWZ1bCB3aXRoIGxvbmcgdGVzdCBzdWl0ZXMKKyAgc3VjaCBhcyB0ZXN0X2lvIG9yIHRlc3Rfc3VicHJvY2Vzcy4KKworLSBJc3N1ZSAjMTI1ODc6IENvcnJlY3QgZmF1bHR5IHRlc3QgZmlsZSBhbmQgcmVmZXJlbmNlIGluIHRlc3RfdG9rZW5pemUuCisgIChQYXRjaCBieSBSb2JlcnQgWGlhbykKKworLSBJc3N1ZSAjMTI1NzM6IEFkZCByZXNvdXJjZSBjaGVja3MgZm9yIGRhbmdsaW5nIFRocmVhZCBhbmQgUHJvY2VzcyBvYmplY3RzLgorCistIElzc3VlICMxMjU0OTogQ29ycmVjdCB0ZXN0X3BsYXRmb3JtIHRvIG5vdCBmYWlsIHdoZW4gT1MgWCByZXR1cm5zICd4ODZfNjQnCisgIGFzIHRoZSBwcm9jZXNzb3IgdHlwZSBvbiBzb21lIE1hYyBzeXN0ZW1zLgorCistIFNraXAgbmV0d29yayB0ZXN0cyB3aGVuIGdldGFkZHJpbmZvKCkgcmV0dXJucyBFQUlfQUdBSU4sIG1lYW5pbmcgYSB0ZW1wb3JhcnkKKyAgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24uCisKKy0gSXNzdWUgIzExODEyOiBTb2x2ZSB0cmFuc2llbnQgc29ja2V0IGZhaWx1cmUgdG8gY29ubmVjdCB0byAnbG9jYWxob3N0JworICBpbiB0ZXN0X3RlbG5ldGxpYi5weS4KKworLSBTb2x2ZWQgYSBwb3RlbnRpYWwgZGVhZGxvY2sgaW4gdGVzdF90ZWxuZXRsaWIucHkuIFJlbGF0ZWQgdG8gaXNzdWUgIzExODEyLgorCistIEF2b2lkIGZhaWxpbmcgaW4gdGVzdF9yb2JvdHBhcnNlciB3aGVuIG11ZWJsZXNtb3JhbGVkYS5jb20gaXMgZmxha3kgYW5kCisgIGFuIG92ZXJ6ZWFsb3VzIEROUyBzZXJ2aWNlIChlLmcuIE9wZW5ETlMpIHJlZGlyZWN0cyB0byBhIHBsYWNlaG9sZGVyCisgIFdlYiBzaXRlLgorCistIEF2b2lkIGZhaWxpbmcgaW4gdGVzdF91cmxsaWJuZXQudGVzdF9iYWRfYWRkcmVzcyB3aGVuIHNvbWUgb3ZlcnplYWxvdXMKKyAgRE5TIHNlcnZpY2UgKGUuZy4gT3BlbkROUykgcmVzb2x2ZXMgYSBub24tZXhpc3RlbnQgZG9tYWluIG5hbWUuICBUaGUgdGVzdAorICBpcyBub3cgc2tpcHBlZCBpbnN0ZWFkLgorCistIElzc3VlICMxMjQ0MDogV2hlbiB0ZXN0aW5nIHdoZXRoZXIgc29tZSBiaXRzIGluIFNTTENvbnRleHQub3B0aW9ucyBjYW4gYmUKKyAgcmVzZXQsIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuU1NMIGhlYWRlcnMgUHl0aG9uIHdhcyBjb21waWxlZCBhZ2FpbnN0LAorICByYXRoZXIgdGhhbiB0aGUgcnVudGltZSB2ZXJzaW9uIG9mIHRoZSBPcGVuU1NMIGxpYnJhcnkuCisKKy0gSXNzdWUgIzExNTEyOiBBZGQgYSB0ZXN0IHN1aXRlIGZvciB0aGUgY2dpdGIgbW9kdWxlLiBQYXRjaCBieSBSb2JiaWUgQ2xlbW9ucy4KKworLSBJc3N1ZSAjMTI0OTc6IEluc3RhbGwgdGVzdC9kYXRhIHRvIHByZXZlbnQgZmFpbHVyZXMgb2YgdGhlIHZhcmlvdXMgY29kZWNtYXBzCisgIHRlc3RzLgorCistIElzc3VlICMxMjQ5NjogSW5zdGFsbCB0ZXN0L2NhcGF0aCBkaXJlY3RvcnkgdG8gcHJldmVudCB0ZXN0X2Nvbm5lY3RfY2FwYXRoCisgIHRlc3RjYXNlIGZhaWx1cmUgaW4gdGVzdF9zc2wuCisKKy0gSXNzdWUgIzEyNDY5OiBSdW4gd2FrZXVwIGFuZCBwZW5kaW5nIHNpZ25hbCB0ZXN0cyBpbiBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZQorICB0ZXN0IGluIGEgZnJlc2ggcHJvY2VzcyB3aXRoIG9ubHkgb25lIHRocmVhZCBhbmQgdG8gbm90IGNoYW5nZSBzaWduYWwKKyAgaGFuZGxpbmcgb2YgdGhlIHBhcmVudCBwcm9jZXNzLgorCistIElzc3VlICM4NzE2OiBBdm9pZCBjcmFzaGVzIGNhdXNlZCBieSBBcXVhIFRrIG9uIE9TWCB3aGVuIGF0dGVtcHRpbmcgdG8gcnVuCisgIHRlc3RfdGsgb3IgdGVzdF90dGtfZ3Vpb25seSB1bmRlciBhIHVzZXJuYW1lIHRoYXQgaXMgbm90IGN1cnJlbnRseSBsb2dnZWQKKyAgaW4gdG8gdGhlIGNvbnNvbGUgd2luZG93c2VydmVyIChhcyBtYXkgYmUgdGhlIGNhc2UgdW5kZXIgYnVpbGRib3Qgb3Igc3NoKS4KKworLSBJc3N1ZSAjMTI0MDc6IEV4cGxpY2l0bHkgc2tpcCB0ZXN0X2NhcGkuRW1iZWRkaW5nVGVzdCB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxMjQwMDogcmVncnRlc3QgLVcgZG9lc24ndCByZXJ1biB0aGUgdGVzdHMgdHdpY2UgYW55bW9yZSwgYnV0IGNhcHR1cmVzCisgIHRoZSBvdXRwdXQgYW5kIGRpc3BsYXlzIGl0IG9uIGZhaWx1cmUgaW5zdGVhZC4gcmVncnRlc3QgLXYgZG9lc24ndCBwcmludCB0aGUKKyAgZXJyb3IgdHdpY2UgYW55bW9yZSBpZiB0aGVyZSBpcyBvbmx5IG9uZSBlcnJvci4KKworLSBJc3N1ZSAjMTIxNDE6IEluc3RhbGwgY29waWVzIG9mIHRlbXBsYXRlIEMgbW9kdWxlIGZpbGUgc28gdGhhdAorICB0ZXN0X2J1aWxkX2V4dCBvZiB0ZXN0X2Rpc3R1dGlscyBhbmQgdGVzdF9jb21tYW5kX2J1aWxkX2V4dCBvZgorICB0ZXN0X3BhY2thZ2luZyBhcmUgbm8gbG9uZ2VyIHNpbGVudGx5IHNraXBwZWQgd2hlbgorICBydW4gb3V0c2lkZSBvZiBhIGJ1aWxkIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjODc0NjogQWRkIGFkZGl0aW9uYWwgdGVzdHMgZm9yIG9zLmNoZmxhZ3MoKSBhbmQgb3MubGNoZmxhZ3MoKS4KKyAgUGF0Y2ggYnkgR2FycmV0dCBDb29wZXIuCisKKy0gSXNzdWUgIzEwNzM2OiBGaXggdGVzdF90dGsgdGVzdF93aWRnZXRzIGZhaWx1cmVzIHdpdGggQ29jb2EgVGsgOC41LjkKKyAgMi44ICsgIG9uIE1hYyBPUyBYLiAgKFBhdGNoIGJ5IFJvbmFsZCBPdXNzb3JlbikKKworLSBJc3N1ZSAjMTIwNTc6IEFkZCB0ZXN0cyBmb3IgSVNPIDIwMjIgY29kZWNzIChpc28yMDIyX2pwLCBpc28yMDIyX2pwXzIsCisgIGlzbzIwMjJfa3IpLgorCistIElzc3VlICMxMjA5NjogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gdGVzdF90aHJlYWRpbmcudGVzdF93YWl0Zm9yKCkuIFBhdGNoCisgIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTYxNDogaW1wb3J0IF9faGVsbG9fXyBwcmludHMgIkhlbGxvIFdvcmxkISIuIFBhdGNoIHdyaXR0ZW4gYnkKKyAgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICM1NzIzOiBJbXByb3ZlIGpzb24gdGVzdHMgdG8gYmUgZXhlY3V0ZWQgd2l0aCBhbmQgd2l0aG91dCBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxMjA0MTogTWFrZSB0ZXN0X3dhaXQzIG1vcmUgcm9idXN0LgorCistIElzc3VlICMxMTg3MzogQ2hhbmdlIHJlZ2V4IGluIHRlc3RfY29tcGlsZWFsbCB0byBmaXggb2NjYXNpb25hbCBmYWlsdXJlcyB3aGVuCisgIHdoZW4gdGhlIHJhbmRvbWx5IGdlbmVyYXRlZCB0ZW1wb3JhcnkgcGF0aCBoYXBwZW5lZCB0byBtYXRjaCB0aGUgcmVnZXguCisKKy0gSXNzdWUgIzExOTU4OiBGaXggRlRQIHRlc3RzIGZvciBJUHY2LCBiaW5kIHRvICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIuCisgIFBhdGNoIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzg0MDcsICMxMTg1OTogRml4IHRlc3RzIG9mIHRlc3RfaW8gdXNpbmcgdGhyZWFkcyBhbmQgYW4gYWxhcm06IHVzZQorICBwdGhyZWFkX3NpZ21hc2soKSB0byBlbnN1cmUgdGhhdCB0aGUgU0lHQUxSTSBzaWduYWwgaXMgcmVjZWl2ZWQgYnkgdGhlIG1haW4KKyAgdGhyZWFkLgorCistIElzc3VlICMxMTgxMTogRmFjdG9yIG91dCBkZXRlY3Rpb24gb2YgSVB2NiBzdXBwb3J0IG9uIHRoZSBjdXJyZW50IGhvc3QKKyAgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGFzIGBgdGVzdC5zdXBwb3J0LklQVjZfRU5BQkxFRGBgLiAgUGF0Y2ggYnkKKyAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMDkxNDogQWRkIGEgbWluaW1hbCBlbWJlZGRpbmcgdGVzdCB0byB0ZXN0X2NhcGkuCisKKy0gSXNzdWUgIzExMjIzOiBTa2lwIHRlc3RfbG9ja19hY3F1aXJlX2ludGVycnVwdGlvbigpIGFuZAorICB0ZXN0X3Jsb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKCkgb2YgdGVzdF90aHJlYWRzaWduYWxzIGlmIGEgdGhyZWFkIGxvY2sgaXMKKyAgaW1wbGVtZW50ZWQgdXNpbmcgYSBQT1NJWCBtdXRleCBhbmQgYSBQT1NJWCBjb25kaXRpb24gdmFyaWFibGUuIEEgUE9TSVgKKyAgY29uZGl0aW9uIHZhcmlhYmxlIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZS5nLiBvbiBMaW51eCwgdGhlCisgIGZ1dGV4IHN5c3RlbSBjYWxsIGlzIHJlc3RhcnRlZCkuCisKKy0gSXNzdWUgIzExNzkwOiBGaXggc3BvcmFkaWMgZmFpbHVyZXMgaW4gdGVzdF9tdWx0aXByb2Nlc3NpbmcuV2l0aFByb2Nlc3Nlc1Rlc3RDb25kaXRpb24uCisKKy0gRml4IHBvc3NpYmxlICJmaWxlIGFscmVhZHkgZXhpc3RzIiBlcnJvciB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIGluIHBhcmFsbGVsLgorCistIElzc3VlICMxMTcxOTogRml4IG1lc3NhZ2UgYWJvdXQgdW5leHBlY3RlZCB0ZXN0X21zaWxpYiBza2lwIG9uIG5vbi1XaW5kb3dzCisgIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTcyNzogQWRkIGEgLS10aW1lb3V0IG9wdGlvbiB0byByZWdydGVzdDogaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgorICBUSU1FT1VUIHNlY29uZHMsIGR1bXBzIHRoZSB0cmFjZWJhY2sgb2YgYWxsIHRocmVhZHMgYW5kIGV4aXRzLgorCistIElzc3VlICMxMTY1MzogZml4IC1XIHdpdGggLWogaW4gcmVncnRlc3QuCisKKy0gVGhlIGVtYWlsIHRlc3Qgc3VpdGUgbm93IGxpdmVzIGluIHRoZSBMaWIvdGVzdC90ZXN0X2VtYWlsIHBhY2thZ2UuICBUaGUgdGVzdAorICBoYXJuZXNzIGNvZGUgaGFzIGFsc28gYmVlbiBtb2Rlcm5pemVkIHRvIGFsbG93IHVzZSBvZiBuZXcgdW5pdHRlc3QgZmVhdHVyZXMuCisKKy0gcmVncnRlc3Qgbm93IGRpc2NvdmVycyB0ZXN0IHBhY2thZ2VzIGFzIHdlbGwgYXMgdGVzdCBtb2R1bGVzLgorCistIElzc3VlICMxMTU3NzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIGJpbmhleC5weS4gUGF0Y2ggYnkgQXJrYWR5IEtvcGx5YXJvdi4KKworLSBOZXcgdGVzdF9jcmFzaGVycyBhZGRlZCB0byBleGVyY2lzZSB0aGUgc2NyaXB0cyBpbiB0aGUgTGliL3Rlc3QvY3Jhc2hlcnMKKyAgZGlyZWN0b3J5IGFuZCBjb25maXJtIHRoZXkgZmFpbCBhcyBleHBlY3RlZAorCistIElzc3VlICMxMTU3ODogYWRkZWQgdGVzdCBmb3IgdGhlIHRpbWVpdCBtb2R1bGUuICBQYXRjaCBieSBNaWNoYWVsIEhlbnJ5LgorCistIElzc3VlICMxMTUwMzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIHBvc2l4cGF0aC5weS4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTUwNTogaW1wcm92ZXMgdGVzdCBjb3ZlcmFnZSBvZiBzdHJpbmcucHksIGluY3JlYXNlcyBncmFudWxhcml0eSBvZgorICBzdHJpbmcuRm9ybWF0dGVyIHRlc3RzLiBJbml0aWFsIHBhdGNoIGJ5IEFsaWNpYSBBcmxlbi4KKworLSBJc3N1ZSAjMTE1NDg6IEltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvZiB0aGUgc2h1dGlsIG1vZHVsZS4gUGF0Y2ggYnkKKyAgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTU1NDogUmVhY3RpdmF0ZWQgdGVzdF9lbWFpbF9jb2RlY3MuCisKKy0gSXNzdWUgIzExNTA1OiBpbXByb3ZlcyB0ZXN0IGNvdmVyYWdlIG9mIHN0cmluZy5weS4gUGF0Y2ggYnkgQWxpY2lhCisgIEFybGVuCisKKy0gSXNzdWUgIzExNDkwOiB0ZXN0X3N1YnByb2Nlc3M6dGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvciBubyBsb25nZXIgZ2l2ZXMgYQorICBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMgaW5hY2Nlc3NpYmxlLgorCistIElzc3VlICMxMTIyMzogRml4IHRlc3RfdGhyZWFkc2lnbmFscyB0byBmYWlsLCBub3QgaGFuZywgd2hlbiB0aGUKKyAgbm9uLXNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbiBvZiBsb2NrcyBpcyB1c2VkIHVuZGVyIFBPU0lYLgorCistIElzc3VlICMxMDkxMTogQWRkIHRlc3RzIG9uIENHSSB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBQYXRjaCB3cml0dGVuIGJ5CisgIFBpZXJyZSBRdWVudGVsLgorCistIElzc3VlICM5OTMxOiBGaXggaGFuZ3MgaW4gR1VJIHRlc3RzIHVuZGVyIFdpbmRvd3MgaW4gY2VydGFpbiBjb25kaXRpb25zLgorICBQYXRjaCBieSBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjMTA1MTI6IFByb3Blcmx5IGNsb3NlIHNvY2tldHMgdW5kZXIgdGVzdC50ZXN0X2NnaS4KKworLSBJc3N1ZSAjMTA5OTI6IE1ha2UgdGVzdHMgcGFzcyB1bmRlciBjb3ZlcmFnZS4KKworLSBJc3N1ZSAjMTA4MjY6IFByZXZlbnQgc3BvcmFkaWMgZmFpbHVyZSBpbiB0ZXN0X3N1YnByb2Nlc3Mgb24gU29sYXJpcyBkdWUKKyAgdG8gb3BlbiBkb29yIGZpbGVzLgorCistIElzc3VlICMxMDk5MDogUHJldmVudCB0ZXN0cyBmcm9tIGNsb2JiZXJpbmcgYSBzZXQgdHJhY2UgZnVuY3Rpb24uCisKK0MtQVBJCistLS0tLQorCistIEFkZCBQeU9iamVjdF9HZW5lcmljR2V0RGljdCBhbmQgUHlPYmplY3RfR2VuZXJpU2V0RGljdC4gVGhleSBhcmUgZ2VuZXJpYworICBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBvZiBhIGBgX19kaWN0X19gYCBkZXNjcmlwdG9yIG9mIEMKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzEzNzI3OiBBZGQgMyBtYWNyb3MgdG8gYWNjZXNzIFB5RGF0ZVRpbWVfRGVsdGEgbWVtYmVyczoKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfREFZUywgUHlEYXRlVGltZV9ERUxUQV9HRVRfU0VDT05EUywKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfTUlDUk9TRUNPTkRTLgorCistIElzc3VlICMxMDU0MjogQWRkIDQgbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzOiBQeV9VTklDT0RFX0lTX1NVUlJPR0FURSwKKyAgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURSwgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFLAorICBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUy4KKworLSBJc3N1ZSAjMTI3MjQ6IEFkZCBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQgbWFjcm8gZm9yIHJldHVybmluZyBOb3RJbXBsZW1lbnRlZC4KKworLSBQWV9QQVRDSExFVkVMX1JFVklTSU9OIGhhcyBiZWVuIHJlbW92ZWQsIHNpbmNlIGl0J3MgbWVhbmluZ2xlc3Mgd2l0aAorICBNZXJjdXJpYWwuCisKKy0gSXNzdWUgIzEyMTczOiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwgaXMgbm93IGBjb25zdAorICBjaGFyICpgIGluc3RlYWQgb2YgYGNoYXIgKmAuCisKKy0gSXNzdWUgIzEyMzgwOiBQeUFyZ19QYXJzZVR1cGxlIG5vdyBhY2NlcHRzIGEgYnl0ZWFycmF5IGZvciB0aGUgJ2MnIGZvcm1hdC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlcyAjMTM0OTEgYW5kICMxMzk5NTogRml4IG1hbnkgZXJyb3JzIGluIHNxbGl0ZTMgZG9jdW1lbnRhdGlvbi4KKyAgSW5pdGlhbCBwYXRjaCBmb3IgIzEzNDkxIGJ5IEpvaGFubmVzIFZvZ2VsLgorCistIElzc3VlICMxMzQwMjogRG9jdW1lbnQgYWJzb2x1dGVuZXNzIG9mIHN5cy5leGVjdXRhYmxlLgorCistIElzc3VlICMxMzg4MzogUFlUSE9OQ0FTRU9LIGFsc28gd29ya3Mgb24gT1MgWC4KKworLSBJc3N1ZSAjOTAyMTogQWRkIGFuIGludHJvZHVjdGlvbiB0byB0aGUgY29weSBtb2R1bGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNjAwNTogRXhhbXBsZXMgaW4gdGhlIHNvY2tldCBsaWJyYXJ5IGRvY3VtZW50YXRpb24gdXNlIHNlbmRhbGwsIHdoZXJlCisgIHJlbGV2YW50LCBpbnN0ZWFkIHNlbmQgbWV0aG9kLgorCistIElzc3VlICMxMjc5ODogVXBkYXRlZCB0aGUgbWltZXR5cGVzIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzEyOTQ5OiBEb2N1bWVudCB0aGUga3dvbmx5YXJnY291bnQgYXJndW1lbnQgZm9yIHRoZSBQeUNvZGVfTmV3CisgIEMgQVBJIGZ1bmN0aW9uLgorCistIElzc3VlICMxMzUxMzogRml4IGlvLklPQmFzZSBkb2N1bWVudGF0aW9uIHRvIGNvcnJlY3RseSBsaW5rIHRvIHRoZQorICBpby5JT0Jhc2UucmVhZGxpbmUgbWV0aG9kIGluc3RlYWQgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyMzc6IFJlb3JnYW5pc2Ugc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uIHRvIGVtcGhhc2lzZSBjb252ZW5pZW5jZQorICBmdW5jdGlvbnMgYW5kIHRoZSBtb3N0IGNvbW1vbmx5IG5lZWRlZCBhcmd1bWVudHMgdG8gUG9wZW4uCisKKy0gSXNzdWUgIzEzMTQxOiBEZW1vbnN0cmF0ZSByZWNvbW1lbmRlZCBzdHlsZSBmb3Igc29ja2V0c2VydmVyIGV4YW1wbGVzLgorCistIElzc3VlICMxMTgxODogRml4IHRlbXBmaWxlIGV4YW1wbGVzIGZvciBQeXRob24gMy4KKworCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCBhZjdiOTk0Li5lNTRhMTZjIDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC0yLDEwNSArMiw1MCBAQAogUHl0aG9uIE5ld3MKICsrKysrKysrKysrCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy40PwotPT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBCZXRhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpOb3QgeWV0IHJlbGVhc2VkLCBzZWUgc2VjdGlvbnMgYmVsb3cgZm9yIGNoYW5nZXMgcmVsZWFzZWQgaW4gMy4zLjIqCitQcm9qZWN0ZWQgcmVsZWFzZSBkYXRlOiAyMDEzLTExLTI0CiAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCi1MaWJyYXJ5Ci0tLS0tLS0tCistIElzc3VlICMxNzkzNjogRml4IE8obioqMikgYmVoYXZpb3VyIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIG1hbnkgc3ViY2xhc3NlcworICBvZiBhIGdpdmVuIHR5cGUuCiAKLS0gSXNzdWUgIzE5NDM1OiBGaXggZGlyZWN0b3J5IHRyYXZlcnNhbCBhdHRhY2sgb24gQ0dJSHR0cFJlcXVlc3RIYW5kbGVyLgorLSBJc3N1ZSAjMTk0Mjg6IHppcGltcG9ydCBub3cgaGFuZGxlcyBlcnJvcnMgd2hlbiByZWFkaW5nIHRydW5jYXRlZCBvciBpbnZhbGlkCisgIFpJUCBhcmNoaXZlLgogCi1UZXN0cwotLS0tLS0KKy0gSXNzdWUgIzE4NDA4OiBBZGQgYSBuZXcgUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoKSBmdW5jdGlvbiB0byBoYW5kbGUKKyAgZXhjZXB0aW9ucyB3aGVuIG1lcmdpbmcgZmFzdCBsb2NhbHMgaW50byBmX2xvY2FscyBvZiBhIGZyYW1lLgorICBQeUV2YWxfR2V0TG9jYWxzKCkgbm93IHJhaXNlcyBhbiBleGNlcHRpb24gYW5kIHJldHVybiBOVUxMIG9uIGZhaWx1cmUuCiAKLS0gSXNzdWUgIzE5MDg1OiBBZGRlZCBiYXNpYyB0ZXN0cyBmb3IgYWxsIHRraW50ZXIgd2lkZ2V0IG9wdGlvbnMuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjMgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI3LU9jdC0yMDEzKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KKy0gSXNzdWUgIzE5MzY5OiBPcHRpbWl6ZWQgdGhlIHVzYWdlIG9mIF9fbGVuZ3RoX2hpbnRfXygpLgogCiAtIElzc3VlICMxODYwMzogRW5zdXJlIHRoYXQgUHlPU19teXN0cmljbXAgYW5kIFB5T1NfbXlzdHJuaWNtcCBhcmUgaW4gdGhlCiAgIFB5dGhvbiBleGVjdXRhYmxlIGFuZCBub3QgcmVtb3ZlZCBieSB0aGUgbGlua2VyJ3Mgb3B0aW1pemVyLgogCi0tIElzc3VlICMxOTI3OTogVVRGLTcgZGVjb2RlciBubyBtb3JlIHByb2R1Y2VzIGlsbGVnYWwgc3RyaW5ncy4KLQotLSBGaXggbWFjcm8gZXhwYW5zaW9uIG9mIF9QeUVycl9PQ0NVUlJFRCgpLCBhbmQgbWFrZSBzdXJlIHRvIHVzZSBpdCBpbiBhdAotICBsZWFzdCBvbmUgcGxhY2Ugc28gYXMgdG8gYXZvaWQgcmVncmVzc2lvbnMuCi0KLS0gSXNzdWUgIzE5MDE0OiBtZW1vcnl2aWV3LmNhc3QoKSBpcyBub3cgYWxsb3dlZCBvbiB6ZXJvLWxlbmd0aCB2aWV3cy4KLQotLSBJc3N1ZSAjMTkwOTg6IFByZXZlbnQgb3ZlcmZsb3cgaW4gdGhlIGNvbXBpbGVyIHdoZW4gdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBzZXQKLSAgYWJzdXJkbHkgaGlnaC4KLQotLSBJc3N1ZSAjMTg5NDI6IHN5cy5fZGVidWdtYWxsb2NzdGF0cygpIG91dHB1dCB3YXMgZGFtYWdlZCBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxODY2NzogQWRkIG1pc3NpbmcgIkhBVkVfRkNIT1dOQVQiIHN5bWJvbCB0byBwb3NpeC5faGF2ZV9mdW5jdGlvbnMuCi0KLS0gSXNzdWUgIzE4MzY4OiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSBubyBsb25nZXIgbGVha3MgbWVtb3J5IHdoZW4gcmVhbGxvYygpCi0gIGZhaWxzLgotCi0tIElzc3VlICMxNjc0MTogRml4IGFuIGVycm9yIHJlcG9ydGluZyBpbiBpbnQoKS4KLQotLSBJc3N1ZSAjMTc4OTk6IEZpeCByYXJlIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG9zLmxpc3RkaXIoKS4KLQotLSBJc3N1ZSAjMTg1NTI6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBQeUFyZW5hX0FkZFB5T2JqZWN0KCkgaW4KLSAgb2JqMmFzdF9vYmplY3QoKS4KLQotLSBJc3N1ZSAjMTg1NjA6IEZpeCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHN1bSgpLgotCi0tIElzc3VlICMxNTkwNTogRml4IHRoZW9yZXRpY2FsIGJ1ZmZlciBvdmVyZmxvdyBpbiBoYW5kbGluZyBvZiBzeXMuYXJndlswXSwKLSAgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBpZiB0aGUgb3BlcmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBvYmV5IE1BWFBBVEhMRU4uCi0KLS0gSXNzdWUgIzE4MzQ0OiBGaXggcG90ZW50aWFsIHJlZi1sZWFrcyBpbiBfYnVmZmVyZWRyZWFkZXJfcmVhZF9hbGwoKS4KLQotLSBJc3N1ZSAjMTc4NzI6IEZpeCBhIHNlZ2ZhdWx0IGluIG1hcnNoYWwubG9hZCgpIHdoZW4gaW5wdXQgc3RyZWFtIHJldHVybnMKLSAgbW9yZSBieXRlcyB0aGFuIHJlcXVlc3RlZC4KLQotLSBJc3N1ZSAjMTg0MjY6IEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gQyBleHRlbnNpb24gaW1wb3J0IHdoZW4KLSAgUHlNb2R1bGVfR2V0RGVmKCkgcmV0dXJucyBhbiBlcnJvci4KLQotLSBJc3N1ZSAjMTgzMjg6IFJlb3JkZXIgb3BzIGluIFB5VGhyZWFkU3RhdGVfRGVsZXRlKigpIGZ1bmN0aW9ucy4gTm93IHRoZQotICB0c3RhdGUgaXMgZmlyc3QgcmVtb3ZlZCBmcm9tIFRMUyBhbmQgdGhlbiBkZWFsbG9jYXRlZC4KLQotLSBJc3N1ZSAjMTgxODQ6IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgYW5kIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIG5vdyByYWlzZQotICBPdmVyZmxvd0Vycm9yIHdoZW4gYW4gYXJndW1lbnQgb2YgJWMgZm9ybWF0IGlzIG91dCBvZiByYW5nZS4KLQotLSBJc3N1ZSAjMTgxMzc6IERldGVjdCBpbnRlZ2VyIG92ZXJmbG93IG9uIHByZWNpc2lvbiBpbiBmbG9hdC5fX2Zvcm1hdF9fKCkKLSAgYW5kIGNvbXBsZXguX19mb3JtYXRfXygpLgotCi0tIElzc3VlICMxODE4MzogRml4IHZhcmlvdXMgdW5pY29kZSBvcGVyYXRpb25zIG9uIHN0cmluZ3Mgd2l0aCBsYXJnZSB1bmljb2RlCi0gIGNvZGVwb2ludHMuCi0KLS0gSXNzdWUgIzE4MTgwOiBGaXggcmVmIGxlYWsgaW4gX1B5SW1wb3J0X0dldER5bkxvYWRXaW5kb3dzKCkuCi0KLS0gSXNzdWUgIzE4MDM4OiBTeW50YXhFcnJvciByYWlzZWQgZHVyaW5nIGNvbXBpbGF0aW9uIHNvdXJjZXMgd2l0aCBpbGxlZ2FsCi0gIGVuY29kaW5nIG5vdyBhbHdheXMgY29udGFpbnMgYW4gZW5jb2RpbmcgbmFtZS4KLQotLSBJc3N1ZSAjMTc2NDQ6IEZpeCBhIGNyYXNoIGluIHN0ci5mb3JtYXQgd2hlbiBjdXJseSBicmFjZXMgYXJlIHVzZWQgaW4gc3F1YXJlCi0gIGJyYWNrZXRzLgotCi0tIElzc3VlICMxNzk4MzogUmFpc2UgYSBTeW50YXhFcnJvciBmb3IgYSBgYGdsb2JhbCBfX2NsYXNzX19gYCBzdGF0ZW1lbnQgaW4gYQotICBjbGFzcyBib2R5LgotCi0tIElzc3VlICMxNzkyNzogRnJhbWUgb2JqZWN0cyBrZXB0IGFyZ3VtZW50cyBhbGl2ZSBpZiB0aGV5IGhhZCBiZWVuIGNvcGllZCBpbnRvCi0gIGEgY2VsbCwgZXZlbiBpZiB0aGUgY2VsbCB3YXMgY2xlYXJlZC4KKy0gSXNzdWUgIzE5MzA2OiBBZGQgZXh0cmEgaGludHMgdG8gdGhlIGZhdWx0aGFuZGxlciBtb2R1bGUncyBzdGFjaworICBkdW1wcyB0aGF0IHRoZXNlIGFyZSAidXBzaWRlIGRvd24iLgogCiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzE5Mzk1OiBSYWlzZSBhbiBleGNlcHRpb24gd2hlbiBhdHRlbXB0aW5nIHRvIHBpY2tsZSBhIGJ6MiBvciBsem1hCi0gIGNvbXByZXNzb3IvZGVjb21wcmVzc29yIG9iamVjdCwgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBwaWNrbGUgdGhhdCB3b3VsZAotICBjYXVzZSBhIHNlZ2ZhdWx0IHdoZW4gbG9hZGVkIGFuZCB1c2VkLgorLSBJc3N1ZSAjMTk0MTA6IFVuZG8gdGhlIHNwZWNpYWwtY2FzaW5nIHJlbW92YWwgb2YgJycgZm9yCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci4KKworLSBJc3N1ZSAjMTk0MjQ6IEZpeCB0aGUgd2FybmluZ3MgbW9kdWxlIHRvIGFjY2VwdCBmaWxlbmFtZSBjb250YWluaW5nIHN1cnJvZ2F0ZQorICBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxOTQzNTogRml4IGRpcmVjdG9yeSB0cmF2ZXJzYWwgYXR0YWNrIG9uIENHSUh0dHBSZXF1ZXN0SGFuZGxlci4KKworLSBJc3N1ZSAjMTkyMjc6IFJlbW92ZSBwdGhyZWFkX2F0Zm9yaygpIGhhbmRsZXIuIFRoZSBoYW5kbGVyIHdhcyBhZGRlZCB0bworICBzb2x2ZSAjMTg3NDcgYnV0IGhhcyBjYXVzZWQgaXNzdWVzLgorCistIElzc3VlICMxOTQyMDogRml4IHJlZmVyZW5jZSBsZWFrIGluIG1vZHVsZSBpbml0YWxpemF0aW9uIGNvZGUgb2YKKyAgX2hhc2hvcGVuc3NsLmMKKworLSBJc3N1ZSAjMTkzMjk6IE9wdGltaXplZCBjb21waWxpbmcgY2hhcnNldHMgaW4gcmVndWxhciBleHByZXNzaW9ucy4KIAogLSBJc3N1ZSAjMTkyMjc6IFRyeSB0byBmaXggZGVhZGxvY2tzIGNhdXNlZCBieSByZS1zZWVkaW5nIHRoZW4gT3BlblNTTAogICBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb24gZm9yaygpLgpAQCAtMTIzLDEyICs2OCwzMCBAQAogLSBJc3N1ZSAjMTYwMzk6IENWRS0yMDEzLTE3NTI6IENoYW5nZSB1c2Ugb2YgcmVhZGxpbmUgaW4gaW1hcGxpYiBtb2R1bGUgdG8gbGltaXQKICAgbGluZSBsZW5ndGguICBQYXRjaCBieSBFbWlsIExpbmQuCiAKKy0gSXNzdWUgIzE5MzMwOiB0aGUgdW5uZWNlc3Nhcnkgd3JhcHBlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKyAgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZXcgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXQgYW5kCisgIGNvbnRleHRsaWIuc3VwcHJlc3MgY29udGV4dCBtYW5hZ2Vycywgd2hpY2ggYWxzbyBlbnN1cmVzIHRoZXkgcHJvdmlkZQorICByZWFzb25hYmxlIGhlbHAoKSBvdXRwdXQgb24gaW5zdGFuY2VzCisKIC0gSXNzdWUgIzE5MzkzOiBGaXggc3ltdGFibGUuc3ltdGFibGUgZnVuY3Rpb24gdG8gbm90IGJlIGNvbmZ1c2VkIHdoZW4gdGhlcmUgYXJlCiAgIGZ1bmN0aW9ucyBvciBjbGFzc2VzIG5hbWVkICJ0b3AiLgogCistIElzc3VlICMxODY4NTogUmVzdG9yZSByZSBwZXJmb3JtYW5jZSB0byBwcmUtUEVQIDM5MyBsZXZlbHMuCisKIC0gSXNzdWUgIzE5MzM5OiB0ZWxuZXRsaWIgbW9kdWxlIGlzIG5vdyB1c2luZyB0aW1lLm1vbm90b25pYygpIHdoZW4gYXZhaWxhYmxlCiAgIHRvIGNvbXB1dGUgdGltZW91dC4KIAorLSBJc3N1ZSAjMTkzOTk6IGZpeCBzcG9yYWRpYyB0ZXN0X3N1YnByb2Nlc3MgZmFpbHVyZS4KKworLSBJc3N1ZSAjMTMyMzQ6IEZpeCBvcy5saXN0ZGlyIHRvIHdvcmsgd2l0aCBleHRlbmRlZCBwYXRocyBvbiBXaW5kb3dzLgorICBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KKworLSBJc3N1ZSAjMTkzNzU6IFRoZSBzaXRlIG1vZHVsZSBhZGRpbmcgYSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB0byBzeXMucGF0aCwKKyAgaWYgaXQgZXhpc3RzLCBpcyBub3cgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTkzNzk6IExhemlseSBpbXBvcnQgbGluZWNhY2hlIGluIHRoZSB3YXJuaW5ncyBtb2R1bGUsIHRvIG1ha2UKKyAgc3RhcnR1cCB3aXRoIHdhcm5pbmdzIGZhc3RlciB1bnRpbCBhIHdhcm5pbmcgZ2V0cyBwcmludGVkLgorCiAtIElzc3VlICMxOTI4ODogRml4ZWQgdGhlICJpbiIgb3BlcmF0b3Igb2YgZGJtLmdudSBkYXRhYmFzZXMgZm9yIHN0cmluZwogICBhcmd1bWVudC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzLgogCkBAIC0xMzcsNTIgKzEwMCwyMjIgQEAKIAogLSBJc3N1ZSAjMTkzMjc6IEZpeGVkIHRoZSB3b3JraW5nIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2l0aCB0b28gYmlnIGNoYXJzZXQuCiAKKy0gSXNzdWUgIzE3NDAwOiBOZXcgJ2lzX2dsb2JhbCcgYXR0cmlidXRlIGZvciBpcGFkZHJlc3MgdG8gdGVsbCBpZiBhbiBhZGRyZXNzCisgIGlzIGFsbG9jYXRlZCBieSBJQU5BIGZvciBnbG9iYWwgb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KKwogLSBJc3N1ZSAjMTkzNTA6IEluY3JlYXNpbmcgdGhlIHRlc3QgY292ZXJhZ2Ugb2YgbWFjdXJsMnBhdGguIFBhdGNoIGJ5IENvbGluCiAgIFdpbGxpYW1zLgogCistIElzc3VlICMxOTM2NTogT3B0aW1pemVkIHRoZSBwYXJzaW5nIG9mIGxvbmcgcmVwbGFjZW1lbnQgc3RyaW5nIGluIHJlLnN1YiooKQorICBmdW5jdGlvbnMuCisKIC0gSXNzdWUgIzE5MzUyOiBGaXggdW5pdHRlc3QgZGlzY292ZXJ5IHdoZW4gYSBtb2R1bGUgY2FuIGJlIHJlYWNoZWQKICAgdGhyb3VnaCBzZXZlcmFsIHBhdGhzIChlLmcuIHVuZGVyIERlYmlhbi9VYnVudHUgd2l0aCB2aXJ0dWFsZW52KS4KIAogLSBJc3N1ZSAjMTUyMDc6IEZpeCBtaW1ldHlwZXMgdG8gcmVhZCBmcm9tIGNvcnJlY3QgcGFydCBvZiBXaW5kb3dzIHJlZ2lzdHJ5CiAgIE9yaWdpbmFsIHBhdGNoIGJ5IERhdmUgQ2hhbWJlcnMKIAorLSBJc3N1ZSAjMTY1OTU6IEFkZCBwcmxpbWl0KCkgdG8gcmVzb3VyY2UgbW9kdWxlLgorCistIElzc3VlICMxOTMyNDogRXhwb3NlIExpbnV4LXNwZWNpZmljIGNvbnN0YW50cyBpbiByZXNvdXJjZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE3NDAwOiBpcGFkZHJlc3Mgc2hvdWxkIG1ha2UgaXQgZWFzeSB0byBpZGVudGlmeSByZmM2NTk4IGFkZHJlc3Nlcy4KKworLSBMb2FkIFNTTCdzIGVycm9yIHN0cmluZ3MgaW4gaGFzaGxpYi4KKworLSBJc3N1ZSAjMTg1Mjc6IFVwZ3JhZGUgaW50ZXJuYWwgY29weSBvZiB6bGliIHRvIDEuMi44LgorCistIElzc3VlICMxOTI3NDogQWRkIGEgZmlsdGVyZnVuYyBwYXJhbWV0ZXIgdG8gUHlaaXBGaWxlLndyaXRlcHkuCisKIC0gSXNzdWUgIzg5NjQ6IGZpeCBwbGF0Zm9ybS5fc3lzX3ZlcnNpb24gdG8gaGFuZGxlIElyb25QeXRob24gMi42Ky4KICAgUGF0Y2ggYnkgTWFydGluIE1hdHVzaWFrLgogCistIElzc3VlICMxOTQxMzogUmVzdG9yZSBwcmUtMy4zIHJlbG9hZCgpIHNlbWFudGljcyBvZiByZS1maW5kaW5nIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE4OTU4OiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGpzb24ubG9hZChzKSB3aGlsZSBwYXNzaW5nIGEgc3RyaW5nCisgIHRoYXQgc3RhcnRzIHdpdGggYSBVVEYtOCBCT00uCisKKy0gSXNzdWUgIzE5MzA3OiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGpzb24ubG9hZChzKSB3aGlsZSBwYXNzaW5nIG9iamVjdHMKKyAgb2YgdGhlIHdyb25nIHR5cGUuCisKIC0gSXNzdWUgIzE2MDM4OiBDVkUtMjAxMy0xNzUyOiBmdHBsaWI6IExpbWl0IGFtb3VudCBvZiBkYXRhIHJlYWQgYnkKICAgbGltaXRpbmcgdGhlIGNhbGwgdG8gcmVhZGxpbmUoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1pY2hhxYIKICAgSmFzdHJ6xJlic2tpIGFuZCBHaWFtcGFvbG8gUm9kb2xhLgogCistIElzc3VlICMxNzA4NzogSW1wcm92ZWQgdGhlIHJlcHIgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBvYmplY3RzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTkwODU6IEFkZGVkIGJhc2ljIHRlc3RzIGZvciBhbGwgdGtpbnRlciB3aWRnZXQgb3B0aW9ucy4KKworLSBJc3N1ZSAxOTM4NDogRml4IHRlc3RfcHlfY29tcGlsZSBmb3Igcm9vdCB1c2VyLCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxOTM1NjogQXZvaWQgdXNpbmcgYSBDIHZhcmlhYmxlZCBuYW1lZCAiX3NlbGYiLCBpdCdzIGEgcmVzZXJ2ZWQKKyAgd29yZCBpbiBzb21lIEMgY29tcGlsZXJzLgorCistIElzc3VlICMxNTc5MjogQ29ycmVjdCBidWlsZCBvcHRpb25zIG9uIFdpbjY0LiBQYXRjaCBieSBKZXJlbXkgS2xvdGguCisKKy0gSXNzdWUgIzE5MzczOiBBcHBseSB1cHN0cmVhbSBjaGFuZ2UgdG8gVGsgOC41LjE1IGZpeGluZyBPUyBYIDEwLjkKKyAgc2NyZWVuIHJlZnJlc2ggcHJvYmxlbSBmb3IgT1MgWCBpbnN0YWxsZXIgYnVpbGQuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxOTM5MDogQXJndW1lbnQgQ2xpbmljIG5vIGxvbmdlciBhY2NlcHRzIG1hbGZvcm1lZCBQeXRob24KKyAgYW5kIEMgaWRzLgorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSA0PworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTEwLTIwCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxOTMwMTogR2l2ZSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwbGljaXRseSBtYXJrZWQgZ2xvYmFsIGEKKyAgZ2xvYmFsIHF1YWxuYW1lLgorCistIElzc3VlICMxOTI3OTogVVRGLTcgZGVjb2RlciBubyBsb25nZXIgcHJvZHVjZXMgaWxsZWdhbCBzdHJpbmdzLgorCistIElzc3VlICMxNjYxMjogQWRkICJBcmd1bWVudCBDbGluaWMiLCBhIGNvbXBpbGUtdGltZSBwcmVwcm9jZXNzb3IgZm9yCisgIEMgZmlsZXMgdG8gZ2VuZXJhdGUgYXJndW1lbnQgcGFyc2luZyBjb2RlLiAgKFNlZSBQRVAgNDM2LikKKworLSBJc3N1ZSAjMTg4MTA6IFNoaWZ0IHN0YXQgY2FsbHMgaW4gaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIHN1Y2ggdGhhdAorICB0aGUgY29kZSBpcyBvcHRpbWlzdGljIHRoYXQgaWYgc29tZXRoaW5nIGV4aXN0cyBpbiBhIGRpcmVjdG9yeSBuYW1lZCBleGFjdGx5CisgIGxpa2UgdGhlIHBvc3NpYmxlIHBhY2thZ2UgYmVpbmcgc2VhcmNoZWQgZm9yIHRoYXQgaXQncyBpbiBhY3R1YWxpdHkgYQorICBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE4NDE2OiBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIgbm93IHRyZWF0cyAnJyBhcyB0aGUgY3dkIGFuZAorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgbm8gbG9uZ2VyIHNwZWNpYWwtY2FzZXMgJycgdG8gJy4nLiBUaGlzIGxlYWRzCisgIHRvIG1vZHVsZXMgaW1wb3J0ZWQgZnJvbSBjd2QgdG8gbm93IHBvc3Nlc3MgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGZvcgorICBfX2ZpbGVfXyAodGhpcyBkb2VzIG5vdCBhZmZlY3QgbW9kdWxlcyBzcGVjaWZpZWQgYnkgcGF0aCBvbiB0aGUgQ0xJIGJ1dCBpdAorICBkb2VzIGFmZmVjdCAtbS9ydW5weSkuIEl0IGFsc28gYWxsb3dzIEZpbGVGaW5kZXIgdG8gYmUgbW9yZSBjb25zaXN0ZW50IGJ5IG5vdAorICBoYXZpbmcgYW4gZWRnZSBjYXNlLgorCistIElzc3VlICM0NTU1OiBBbGwgZXhwb3J0ZWQgQyBzeW1ib2xzIGFyZSBub3cgcHJlZml4ZWQgd2l0aCBlaXRoZXIKKyAgIlB5IiBvciAiX1B5Ii4KKworLSBJc3N1ZSAjMTkyMTk6IFNwZWVkIHVwIG1hcnNoYWwubG9hZHMoKSwgYW5kIG1ha2UgcHljIGZpbGVzIHNsaWdodGx5CisgICg1JSB0byAxMCUpIHNtYWxsZXIuCisKKy0gSXNzdWUgIzE5MjIxOiBVcGdyYWRlIFVuaWNvZGUgZGF0YWJhc2UgdG8gdmVyc2lvbiA2LjMuMC4KKworLSBJc3N1ZSAjMTY3NDI6IFRoZSByZXN1bHQgb2YgdGhlIEMgY2FsbGJhY2sgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciBtdXN0CisgIG5vdyBiZSBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgUHlNZW1fUmF3TWFsbG9jKCkgb3IgUHlNZW1fUmF3UmVhbGxvYygpIChvciBOVUxMCisgIGlmIGFuIGVycm9yIG9jY3VycmVkKSwgaW5zdGVhZCBvZiBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgUHlNZW1fTWFsbG9jKCkgb3IKKyAgUHlNZW1fUmVhbGxvYygpLgorCistIElzc3VlICMxOTE5OTogUmVtb3ZlIGBgUHlUaHJlYWRTdGF0ZS50aWNrX2NvdW50ZXJgYCBmaWVsZAorCistIEZpeCBtYWNybyBleHBhbnNpb24gb2YgX1B5RXJyX09DQ1VSUkVEKCksIGFuZCBtYWtlIHN1cmUgdG8gdXNlIGl0IGluIGF0CisgIGxlYXN0IG9uZSBwbGFjZSBzbyBhcyB0byBhdm9pZCByZWdyZXNzaW9ucy4KKworLSBJc3N1ZSAjMTkwODc6IEltcHJvdmUgYnl0ZWFycmF5IGFsbG9jYXRpb24gaW4gb3JkZXIgdG8gYWxsb3cgY2hlYXAgcG9wcGluZworICBvZiBkYXRhIGF0IHRoZSBmcm9udCAoc2xpY2UgZGVsZXRpb24pLgorCistIElzc3VlICMxOTAxNDogbWVtb3J5dmlldy5jYXN0KCkgaXMgbm93IGFsbG93ZWQgb24gemVyby1sZW5ndGggdmlld3MuCisKKy0gSXNzdWUgIzE4NjkwOiBtZW1vcnl2aWV3IGlzIG5vdyBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyZWQgd2l0aAorICBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2UKKworLSBJc3N1ZSAjMTkwNzg6IG1lbW9yeXZpZXcgbm93IGNvcnJlY3RseSBzdXBwb3J0cyB0aGUgcmV2ZXJzZWQgYnVpbHRpbgorICAoUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKQorCitMaWJyYXJ5CistLS0tLS0tCisKIC0gSXNzdWUgIzE4MjM1OiBGaXggdGhlIHN5c2NvbmZpZyB2YXJpYWJsZXMgTERTSEFSRUQgYW5kIEJMRFNIQVJFRCB1bmRlciBBSVguCiAgIFBhdGNoIGJ5IERhdmlkIEVkZWxzb2huLgogCistIElzc3VlICMxODYwNjogQWRkIHRoZSBuZXcgInN0YXRpc3RpY3MiIG1vZHVsZSAoUEVQIDQ1MCkuICBDb250cmlidXRlZAorICBieSBTdGV2ZW4gRCdBcHJhbm8uCisKKy0gSXNzdWUgIzEyODY2OiBUaGUgYXVkaW9vcCBtb2R1bGUgbm93IHN1cHBvcnRzIDI0LWJpdCBzYW1wbGVzLgorCistIElzc3VlICMxOTI1NDogUHJvdmlkZSBhbiBvcHRpbWl6ZWQgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHBia2RmMl9obWFjLgorCistIElzc3VlcyAjMTkyMDEsICMxOTIyMiwgIzE5MjIzOiBBZGQgIngiIG1vZGUgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgaW4gb3BlbmluZworICBmaWxlIHRvIGJ6MiwgZ3ppcCBhbmQgbHptYSBtb2R1bGVzLiBQYXRjaGVzIGJ5IFRpbSBIZWFuZXkgYW5kIFZhanJhc2t5IEtvay4KKworLSBGaXggYSByZWZlcmVuY2UgY291bnQgbGVhayBpbiBfc3JlLgorCistIElzc3VlICMxOTI2MjogSW5pdGlhbCBjaGVjayBpbiBvZiB0aGUgJ2FzeW5jaW8nIHBhY2thZ2UgKGEuay5hLiBUdWxpcCwKKyAgYS5rLmEuIFBFUCAzMTU2KS4gIFRoZXJlIGFyZSBubyBkb2NzIHlldCwgYW5kIHRoZSBQRVAgaXMgc2xpZ2h0bHkKKyAgb3V0IG9mIGRhdGUgd2l0aCB0aGUgY29kZS4gIFRoaXMgbW9kdWxlIHdpbGwgaGF2ZSAqcHJvdmlzaW9uYWwqIHN0YXR1cworICBpbiBQeXRob24gMy40LgorCiAtIElzc3VlICMxOTI3NjogRml4ZWQgdGhlIHdhdmUgbW9kdWxlIG9uIDY0LWJpdCBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KIAorLSBJc3N1ZSAjMTkyNjY6IFJlbmFtZSB0aGUgbmV3LWluLTMuNCBgYGNvbnRleHRsaWIuaWdub3JlYGAgY29udGV4dCBtYW5hZ2VyCisgIHRvIGBgY29udGV4dGxpYi5zdXBwcmVzc2BgIGluIG9yZGVyIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIGV4aXN0aW5nCisgIGRlc2NyaXB0aW9ucyBvZiB0aGF0IG9wZXJhdGlvbiBlbHNld2hlcmUgaW4gdGhlIGxhbmd1YWdlIGFuZCBzdGFuZGFyZAorICBsaWJyYXJ5IGRvY3VtZW50YXRpb24gKFBhdGNoIGJ5IFplcm8gUGlyYWV1cykuCisKKy0gSXNzdWUgIzE4ODkxOiBDb21wbGV0ZWQgdGhlIG5ldyBlbWFpbCBwYWNrYWdlIChwcm92aXNpb25hbCkgQVBJIGFkZGl0aW9ucworICBieSBhZGRpbmcgbmV3IGNsYXNzZXMgRW1haWxNZXNzYWdlLCBNSU1FUGFydCwgYW5kIENvbnRlbnRNYW5hZ2VyLgorCistIElzc3VlICMxODI4MTogVW51c2VkIHN0YXQgY29uc3RhbnRzIHJlbW92ZWQgZnJvbSBgdGFyZmlsZWAuCisKKy0gSXNzdWUgIzE4NDY4OiBUaGUgcmUuc3BsaXQsIHJlLmZpbmRhbGwsIGFuZCByZS5zdWIgZnVuY3Rpb25zIGFuZCB0aGUgZ3JvdXAoKQorICBhbmQgZ3JvdXBzKCkgbWV0aG9kcyBvZiBtYXRjaCBvYmplY3Qgbm93IGFsd2F5cyByZXR1cm4gYSBzdHJpbmcgb3IgYSBieXRlcworICBvYmplY3QuCisKKy0gSXNzdWUgIzE4NzI1OiBUaGUgdGV4dHdyYXAgbW9kdWxlIG5vdyBzdXBwb3J0cyB0cnVuY2F0aW5nIG11bHRpbGluZSB0ZXh0LgorCiAtIElzc3VlICMxODc3NjogYXRleGl0IGNhbGxiYWNrcyBub3cgZGlzcGxheSB0aGVpciBmdWxsIHRyYWNlYmFjayB3aGVuIHRoZXkKICAgcmFpc2UgYW4gZXhjZXB0aW9uLgogCiAtIElzc3VlICMxNzgyNzogQWRkIHRoZSBtaXNzaW5nIGRvY3VtZW50YXRpb24gZm9yIGBgY29kZWNzLmVuY29kZWBgIGFuZAogICBgYGNvZGVjcy5kZWNvZGVgYC4KIAotLSBJc3N1ZSAjMTg0NTg6IFByZXZlbnQgY3Jhc2hlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGxpYmVkaXQuICBJdHMgcmVhZGxpbmUKLSAgZW11bGF0aW9uIGhhcyBjaGFuZ2VkIGZyb20gMC1iYXNlZCBpbmRleGluZyB0byAxLWJhc2VkIGxpa2UgZ251IHJlYWRsaW5lLgotICBPcmlnaW5hbCBwYXRjaCBieSBSb25hbGQgT3Vzc29yZW4uCistIElzc3VlICMxOTIxODogUmVuYW1lIGNvbGxlY3Rpb25zLmFiYyB0byBfY29sbGVjdGlvbnNfYWJjIGluIG9yZGVyIHRvCisgIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0LgogCi0tIElzc3VlICMxODkxOTogSWYgdGhlIGNsb3NlKCkgbWV0aG9kIG9mIGEgd3JpdGVyIGluIHRoZSBzdW5hdSBvciB3YXZlIG1vZHVsZQotICBmYWlsZWQsIHNlY29uZCBpbnZvY2F0aW9uIG9mIGNsb3NlKCkgYW5kIGRlc3RydWN0b3Igbm8gbW9yZSByYWlzZSBhbgotICBleGNlcHRpb24uCistIElzc3VlICMxODU4MjogQWRkICdwYmtkZjJfaG1hYycgdG8gdGhlIGhhc2hsaWIgbW9kdWxlLiBJdCBpbXBsZW1lbnRzIFBLQ1MjNQorICBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbnMgd2l0aCBITUFDIGFzIHBzZXVkb3JhbmRvbSBmdW5jdGlvbi4KIAogLSBJc3N1ZSAjMTkxMzE6IFRoZSBhaWZjIG1vZHVsZSBub3cgY29ycmVjdGx5IHJlYWRzIGFuZCB3cml0ZXMgc2FtcHdpZHRoIG9mCiAgIGNvbXByZXNzZWQgc3RyZWFtcy4KIAorLSBJc3N1ZSAjMTkyMDk6IFJlbW92ZSBpbXBvcnQgb2YgY29weXJlZyBmcm9tIHRoZSBvcyBtb2R1bGUgdG8gc3BlZWQgdXAKKyAgaW50ZXJwcmV0ZXIgc3RhcnR1cC4gc3RhdF9yZXN1bHQgYW5kIHN0YXR2ZnNfcmVzdWx0IGFyZSBub3cgaGFyZC1jb2RlZCB0bworICByZXNpZGUgaW4gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTkyMDU6IERvbid0IGltcG9ydCB0aGUgJ3JlJyBtb2R1bGUgaW4gc2l0ZSBhbmQgc3lzY29uZmlnIG1vZHVsZSB0bworICB0byBzcGVlZCB1cCBpbnRlcnByZXRlciBzdGFydC4KKworLSBJc3N1ZSAjOTU0ODogQWRkIGEgbWluaW1hbCAiX2Jvb3Rsb2NhbGUiIG1vZHVsZSB0aGF0IGlzIGltcG9ydGVkIGJ5IHRoZQorICBfaW8gbW9kdWxlIGluc3RlYWQgb2YgdGhlIGZ1bGwgbG9jYWxlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg3NjQ6IHJlbW92ZSB0aGUgJ3ByaW50JyBhbGlhcyBmb3IgdGhlIFBEQiAncCcgY29tbWFuZCBzbyB0aGF0IGl0IG5vCisgIGxvbmdlciBzaGFkb3dzIHRoZSBwcmludCBmdW5jdGlvbi4KKwogLSBJc3N1ZSAjMTkxNTg6ICBhIHJhcmUgcmFjZSBpbiBCb3VuZGVkU2VtYXBob3JlIGNvdWxkIGFsbG93IC5yZWxlYXNlKCkgdG9vCiAgIG9mdGVuLgogCistIElzc3VlICMxNTgwNTogQWRkIGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0KCkuCisKKy0gSXNzdWUgIzE4NzE2OiBEZXByZWNhdGUgdGhlIGZvcm1hdHRlciBtb2R1bGUuCisKIC0gSXNzdWUgIzE4MDM3OiAydG8zIG5vdyBlc2NhcGVzICdcdScgYW5kICdcVScgaW4gbmF0aXZlIHN0cmluZ3MuCiAKKy0gSXNzdWUgIzE3ODM5OiBiYXNlNjQuZGVjb2RlYnl0ZXMgYW5kIGJhc2U2NC5lbmNvZGVieXRlcyBub3cgYWNjZXB0IGFueQorICBvYmplY3QgdGhhdCBleHBvcnRzIGEgMSBkaW1lbnNpb25hbCBhcnJheSBvZiBieXRlcyAodGhpcyBtZWFucyB0aGUgc2FtZQorICBpcyBub3cgYWxzbyB0cnVlIGZvciBiYXNlNjRfY29kZWMpCisKKy0gSXNzdWUgIzE5MTMyOiBUaGUgcHByaW50IG1vZHVsZSBub3cgc3VwcG9ydHMgY29tcGFjdCBtb2RlLgorCiAtIElzc3VlICMxOTEzNzogVGhlIHBwcmludCBtb2R1bGUgbm93IGNvcnJlY3RseSBmb3JtYXRzIGluc3RhbmNlcyBvZiBzZXQgYW5kCiAgIGZyb3plbnNldCBzdWJjbGFzc2VzLgogCistIElzc3VlICMxMDA0MjogZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nIG5vdyBjb3JyZWN0bHkgaGFuZGxlcworICBOb3RJbXBsZW1lbnRlZCBiZWluZyByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyBjb21wYXJpc29uIGZ1bmN0aW9uIChQYXRjaAorICBieSBLYXRpZSBNaWxsZXIpCisKIC0gSXNzdWUgIzE5MDkyOiBjb250ZXh0bGliLkV4aXRTdGFjayBub3cgY29ycmVjdGx5IHJlcmFpc2VzIGV4Y2VwdGlvbnMKICAgZnJvbSB0aGUgX19leGl0X18gY2FsbGJhY2tzIG9mIGlubmVyIGNvbnRleHQgbWFuYWdlcnMgKFBhdGNoIGJ5IEhydm9qZQogICBOaWvFoWnEhykKQEAgLTE5MCwxNSArMzIzLDg5IEBACiAtIElzc3VlICMxMjY0MTogQXZvaWQgcGFzc2luZyAiLW1uby1jeWd3aW4iIHRvIHRoZSBtaW5ndzMyIGNvbXBpbGVyLCBleGNlcHQKICAgd2hlbiBuZWNlc3NhcnkuICBQYXRjaCBieSBPc2NhciBCZW5qYW1pbi4KIAotLSBJc3N1ZSAjMTg1OTQ6IFRoZSBmYXN0IHBhdGggZm9yIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSB3YXMgbmV2ZXIgdGFrZW4KLSAgZHVlIHRvIGFuIG92ZXItcmVzdHJpY3RpdmUgdHlwZSBjaGVjay4gIEFuZCB0aGUgZmFsbGJhY2sgcGF0aCBkaWQKLSAgbm90IGltcGxlbWVudCB0aGUgc2FtZSBhbGdvcml0aG0gYXMgdGhlIHB1cmUgcHl0aG9uIGNvZGUuCistIElzc3VlICM1ODQ1OiBJbiBzaXRlLnB5LCBvbmx5IGxvYWQgcmVhZGxpbmUgaGlzdG9yeSBmcm9tIH4vLnB5dGhvbl9oaXN0b3J5CisgIGlmIG5vIGhpc3RvcnkgaGFzIGJlZW4gcmVhZCBhbHJlYWR5LiAgVGhpcyBhdm9pZHMgZG91YmxlIHdyaXRlcyB0byB0aGUKKyAgaGlzdG9yeSBmaWxlIGF0IHNodXRkb3duLgogCiAtIFByb3Blcmx5IGluaXRpYWxpemUgYWxsIGZpZWxkcyBvZiBhIFNTTCBvYmplY3QgYWZ0ZXIgYWxsb2NhdGlvbi4KIAorLSBJc3N1ZSAjMTkwOTU6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIG5vdyByYWlzZXMgVmFsdWVFcnJvciB3aGVuIHRoZQorICBTU0wgaGFuZHNoYWtlIGhhc24ndCBiZWVuIGRvbmUuCisKIC0gSXNzdWUgIzQzNjY6IEZpeCBidWlsZGluZyBleHRlbnNpb25zIG9uIGFsbCBwbGF0Zm9ybXMgd2hlbiAtLWVuYWJsZS1zaGFyZWQKICAgaXMgdXNlZC4KIAorLSBJc3N1ZSAjMTkwMzA6IEZpeGVkIGBpbnNwZWN0LmdldG1lbWJlcnNgIGFuZCBgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRyc2AKKyAgdG8gYXR0ZW1wdCBhY3RpdmF0aW5nIGRlc2NyaXB0b3JzIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYSBfX2RpY3RfXyBzZWFyY2gKKyAgZm9yIGZhdWx0eSBkZXNjcmlwdG9ycy4gIGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzYCBubyBsb25nZXIgcmV0dXJucworICBBdHRyaWJ1dGVzIHdob3NlIGhvbWUgY2xhc3MgaXMgTm9uZS4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzE3NzI2NzM6IFRoZSB0eXBlIG9mIGBjaGFyKmAgYXJndW1lbnRzIG5vdyBjaGFuZ2VkIHRvIGBjb25zdCBjaGFyKmAuCisKKy0gSXNzdWUgIzE2MTI5OiBBZGRlZCBhIGBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nYCBwcmUtaW5pdGlhbGl6YXRpb24gQVBJCisgIHRvIGFsbG93IGVtYmVkZGluZyBhcHBsaWNhdGlvbnMgbGlrZSBCbGVuZGVyIHRvIGZvcmNlIGEgcGFydGljdWxhcgorICBlbmNvZGluZyBhbmQgZXJyb3IgaGFuZGxlciBmb3IgdGhlIHN0YW5kYXJkIElPIHN0cmVhbXMgKGluaXRpYWwgcGF0Y2ggYnkKKyAgQmFzdGllbiBNb250YWduZSkKKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE5Mjc1OiBGaXggdGVzdF9zaXRlIG9uIEFNRDY0IFNub3cgTGVvcGFyZAorCistIElzc3VlICMxNDQwNzogRml4IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IGluIHRlc3RfY29uY3VycmVudF9mdXR1cmVzLgorCistIElzc3VlICMxODkxOTogVW5pZmllZCBhbmQgZXh0ZW5kZWQgdGVzdHMgZm9yIGF1ZGlvIG1vZHVsZXM6IGFpZmMsIHN1bmF1IGFuZAorICB3YXZlLgorCistIElzc3VlICMxODcxNDogQWRkZWQgdGVzdHMgZm9yIGBgcGRiLmZpbmRfZnVuY3Rpb24oKWBgLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4NzU4OiBGaXhlZCBhbmQgaW1wcm92ZWQgY3Jvc3MtcmVmZXJlbmNlcy4KKworLSBJc3N1ZSAjMTg5NzI6IE1vZGVybml6ZSBlbWFpbCBleGFtcGxlcyBhbmQgdXNlIHRoZSBhcmdwYXJzZSBtb2R1bGUgaW4gdGhlbS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE5MTMwOiBDb3JyZWN0IFBDYnVpbGQvcmVhZG1lLnR4dCwgUHl0aG9uIDMuMyBhbmQgMy40IHJlcXVpcmUgVlMgMjAxMC4KKworLSBJc3N1ZSAjMTU2NjM6IFVwZGF0ZSBPUyBYIDEwLjYrIGluc3RhbGxlciB0byB1c2UgVGNsL1RrIDguNS4xNS4KKworLSBJc3N1ZSAjMTQ0OTk6IEZpeCBzZXZlcmFsIHByb2JsZW1zIHdpdGggT1MgWCB1bml2ZXJzYWwgYnVpbGQgc3VwcG9ydDoKKyAgICAxLiBwcGMgYXJjaCBkZXRlY3Rpb24gZm9yIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIGJyb2tlIHdpdGggWGNvZGUgNQorICAgIDIuIHBwYyBhcmNoIGRldGVjdGlvbiBpbiBjb25maWd1cmUgZGlkIG5vdCB3b3JrIG9uIE9TIFggMTAuNAorICAgIDMuIC1zeXNyb290IGFuZCAtYXJjaCBmbGFncyB3ZXJlIHVubmVjZXNzYXJpbHkgZHVwbGljYXRlZAorICAgIDQuIHRoZXJlIHdhcyBubyBvYnZpb3VzIHdheSB0byBjb25maWd1cmUgYW4gaW50ZWwtMzIgb25seSBidWlsZC4KKworLSBJc3N1ZSAjMTkwMTk6IENoYW5nZSB0aGUgT1MgWCBpbnN0YWxsZXIgYnVpbGQgc2NyaXB0IHRvIHVzZSBDRkxBR1MgaW5zdGVhZAorICBvZiBPUFQgZm9yIHNwZWNpYWwgYnVpbGQgb3B0aW9ucy4gIEJ5IHNldHRpbmcgT1BULCBzb21lIGNvbXBpbGVyLXNwZWNpZmljCisgIG9wdGlvbnMgbGlrZSAtZndyYXB2IHdlcmUgb3ZlcnJpZGRlbiBhbmQgdGh1cyBub3QgdXNlZCwgd2hpY2ggY291bGQgcmVzdWx0CisgIGluIGJyb2tlbiBpbnRlcnByZXRlcnMgd2hlbiBidWlsZGluZyB3aXRoIGNsYW5nLgorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA5LTI5CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODgxODogVGhlICJlbmNvZGluZ25hbWUiIHBhcnQgb2YgUFlUSE9OSU9FTkNPRElORyBpcyBub3cgb3B0aW9uYWwuCisKKy0gSXNzdWUgIzE5MDk4OiBQcmV2ZW50IG92ZXJmbG93IGluIHRoZSBjb21waWxlciB3aGVuIHRoZSByZWN1cnNpb24gbGltaXQgaXMgc2V0CisgIGFic3VyZGx5IGhpZ2guCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg5Mjk6IGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKClgIG5vdyBjb3JyZWN0bHkgZmluZHMgY2xhc3MKKyAgYXR0cmlidXRlcyByZXR1cm5lZCBieSBgZGlyKClgIHRoYXQgYXJlIGxvY2F0ZWQgaW4gdGhlIG1ldGFjbGFzcy4KKwogLSBJc3N1ZSAjMTg5NTA6IEZpeCBtaXNjZWxsYW5lb3VzIGJ1Z3MgaW4gdGhlIHN1bmF1IG1vZHVsZS4KICAgQXVfcmVhZC5yZWFkZnJhbWVzKCkgbm93IHVwZGF0ZXMgY3VycmVudCBmaWxlIHBvc2l0aW9uIGFuZCByZWFkcyBjb3JyZWN0CiAgIG51bWJlciBvZiBmcmFtZXMgZnJvbSBtdWx0aWNoYW5uZWwgc3RyZWFtLiAgQXVfd3JpdGUud3JpdGVmcmFtZXNyYXcoKSBub3cKQEAgLTIwNiwxNyArNDEzLDI5IEBACiAgIGludGVnZXIgKGFzIGluIFB5dGhvbiAyKS4gIEF1X3JlYWQgYW5kIEF1X3dyaXRlIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBmaWxlCiAgIG9iamVjdCBpZiBzdGFydCBmaWxlIHBvc2l0aW9uIGlzIG5vdCBhIHplcm8uCiAKKy0gSXNzdWUgIzE4NTk0OiBUaGUgZmFzdCBwYXRoIGZvciBjb2xsZWN0aW9ucy5Db3VudGVyKCkgd2FzIG5ldmVyIHRha2VuCisgIGR1ZSB0byBhbiBvdmVyLXJlc3RyaWN0aXZlIHR5cGUgY2hlY2suCisKIC0gSXNzdWUgIzE5MDUzOiBaaXBFeHRGaWxlLnJlYWQxKCkgd2l0aCBub24temVybyBhcmd1bWVudCBubyBtb3JlIHJldHVybnMgZW1wdHkKICAgYnl0ZXMgdW50aWwgZW5kIG9mIGRhdGEuCiAKLS0gSXNzdWUgIzE5MDI4OiBGaXhlZCB0a2ludGVyLlRrYXBwLm1lcmdlKCkgZm9yIG5vbi1zdHJpbmcgYXJndW1lbnRzLgorLSBsb2dnaW5nOiBhZGRlZCBzdXBwb3J0IGZvciBVbml4IGRvbWFpbiBzb2NrZXRzIHRvIFNvY2tldEhhbmRsZXIgYW5kCisgIERhdGFncmFtSGFuZGxlci4KKworLSBJc3N1ZSAjMTg5OTY6IFRlc3RDYXNlLmFzc2VydEVxdWFsKCkgbm93IG1vcmUgY2xldmVybHkgc2hvcnRlbiBkaWZmZXJpbmcKKyAgc3RyaW5ncyBpbiBlcnJvciByZXBvcnQuCisKKy0gSXNzdWUgIzE5MDM0OiByZXByKCkgZm9yIHRraW50ZXIuVGNsX09iaiBub3cgZXhwb3NlcyBzdHJpbmcgcmVwZXJlc2VudGF0aW9uLgorCistIElzc3VlICMxODk3ODogYGB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0YGAgbm93IGFsbG93cyB0aGUgbWV0aG9kIHRvIGJlCisgIGluZGljYXRlZCBvbiB0aGUgY2xhc3MgYW5kIG5vIGxvbmdlciBzZXRzIGl0IHRvIE5vbmUgaW4gYGBfX2luaXRfX2BgLgorCistIElzc3VlICMxODYyNjogdGhlIGluc3BlY3QgbW9kdWxlIG5vdyBvZmZlcnMgYSBiYXNpYyBjb21tYW5kIGxpbmUKKyAgaW50cm9zcGVjdGlvbiBpbnRlcmZhY2UgKEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKQogCiAtIElzc3VlICMzMDE1OiBGaXhlZCB0a2ludGVyIHdpdGggd2FudG9iamVjdD1GYWxzZS4gIEFueSBUY2wgY29tbWFuZCBjYWxsCiAgIHJldHVybmVkIGVtcHR5IHN0cmluZy4KIAotLSBJc3N1ZSAjMTgwNTA6IEZpeGVkIGFuIGluY29tcGF0aWJpbGl0eSBvZiB0aGUgcmUgbW9kdWxlIHdpdGggUHl0aG9uIDMuMy4wCi0gIGJpbmFyaWVzLgotCiAtIElzc3VlICMxOTAzNzogVGhlIG1haWxib3ggbW9kdWxlIG5vdyBtYWtlcyBhbGwgY2hhbmdlcyB0byBtYWlsZGlyIGZpbGVzCiAgIGJlZm9yZSBtb3ZpbmcgdGhlbSBpbnRvIHBsYWNlLCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBwcm9ncmFtcwogICB0aGF0IG1heSBiZSBhY2Nlc3NpbmcgdGhlIG1haWxkaXIgZGlyZWN0b3J5LgpAQCAtMjMwLDYgKzQ0OSwxMiBAQAogLSBJc3N1ZSAjMTg4NzM6IFRoZSB0b2tlbml6ZSBtb2R1bGUgbm93IGRldGVjdHMgUHl0aG9uIHNvdXJjZSBjb2RlIGVuY29kaW5nCiAgIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KIAorLSBJc3N1ZSAjMTc3NjQ6IEVuYWJsZSBodHRwLnNlcnZlciB0byBiaW5kIHRvIGEgdXNlciBzcGVjaWZpZWQgbmV0d29yaworICBpbnRlcmZhY2UuICBQYXRjaCBjb250cmlidXRlZCBieSBNYWx0ZSBTd2FydC4KKworLSBJc3N1ZSAjMTg5Mzc6IEFkZCBhbiBhc3NlcnRMb2dzKCkgY29udGV4dCBtYW5hZ2VyIHRvIHVuaXR0ZXN0LlRlc3RDYXNlCisgIHRvIGVuc3VyZSB0aGF0IGEgYmxvY2sgb2YgY29kZSBlbWl0cyBhIG1lc3NhZ2UgdXNpbmcgdGhlIGxvZ2dpbmcgbW9kdWxlLgorCiAtIElzc3VlICMxNzMyNDogRml4IGh0dHAuc2VydmVyJ3MgcmVxdWVzdCBoYW5kbGluZyBjYXNlIG9uIHRyYWlsaW5nICcvJy4gUGF0Y2gKICAgY29udHJpYnV0ZWQgYnkgVmFqcmFza3kgS29rLgogCkBAIC0yNDAsMzMgKzQ2NSwxNjkgQEAKICAgaWYgYWxsIG5lY2Vzc2FyeSBmdW5jdGlvbnMgYXJlIGFscmVhZHkgZm91bmQgaW4gbGlidXVpZC4KICAgUGF0Y2ggYnkgRXZnZW55IFNvbG9ndWJvdi4KIAorLSBUaGUgOmVudnZhcjpgUFlUSE9ORkFVTFRIQU5ETEVSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3cgb25seSBlbmFibGVzIHRoZQorICBmYXVsdGhhbmRsZXIgbW9kdWxlIGlmIHRoZSB2YXJpYWJsZSBpcyBub24tZW1wdHkuIFNhbWUgYmVoYXZpb3VyIHRoYW4gb3RoZXIKKyAgdmFyaWFibGVzIGxpa2UgOmVudnZhcjpgUFlUSE9ORE9OVFdSSVRFQllURUNPREVgLgorCistIElzc3VlICMxNTY1NTI1OiBOZXcgZnVuY3Rpb24gYGB0cmFjZWJhY2suY2xlYXJfZnJhbWVzYGAgd2lsbCBjbGVhcgorICB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIGFsbCB0aGUgc3RhY2sgZnJhbWVzIHJlZmVyZW5jZWQgYnkgYSB0cmFjZWJhY2sKKyAgb2JqZWN0LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTg5NTI6IEZpeCByZWdyZXNzaW9uIGluIHN1cHBvcnQgZGF0YSBkb3dubG9hZHMgaW50cm9kdWNlZCB3aGVuCisgIHRlc3Quc3VwcG9ydCB3YXMgY29udmVydGVkIHRvIGEgcGFja2FnZS4gUmVncmVzc2lvbiBub3RpY2VkIGJ5IFphY2hhcnkKKyAgV2FyZS4KKworSURMRQorLS0tLQorCistIElzc3VlICMxODg3MzogSURMRSBub3cgZGV0ZWN0cyBQeXRob24gc291cmNlIGNvZGUgZW5jb2Rpbmcgb25seSBpbiBjb21tZW50CisgIGxpbmVzLgorCistIElzc3VlICMxODk4ODogVGhlICJUYWIiIGtleSBub3cgd29ya3Mgd2hlbiBhIHdvcmQgaXMgYWxyZWFkeSBhdXRvY29tcGxldGVkLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE3MDAzOiBVbmlmaWVkIHRoZSBzaXplIGFyZ3VtZW50IG5hbWVzIGluIHRoZSBpbyBtb2R1bGUgd2l0aCBjb21tb24KKyAgcHJhY3RpY2UuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxODU5NjogU3VwcG9ydCB0aGUgdXNlIG9mIGFkZHJlc3Mgc2FuaXR5IGNoZWNraW5nIGluIHJlY2VudCB2ZXJzaW9ucworICBvZiBjbGFuZyBhbmQgR0NDIGJ5IGFwcHJvcHJpYXRlbHkgbWFya2luZyBrbm93biBmYWxzZSBhbGFybXMgaW4gdGhlIHNtYWxsCisgIG9iamVjdCBhbGxvY2F0b3IuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IERoaXJ1IEtob2xpYS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4ODczOiAydG8zIGFuZCB0aGUgZmluZG5vY29kaW5nLnB5IHNjcmlwdCBub3cgZGV0ZWN0IFB5dGhvbiBzb3VyY2UKKyAgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQgbGluZXMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQWxwaGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxMy0wOS0wOQorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg5NDI6IHN5cy5fZGVidWdtYWxsb2NzdGF0cygpIG91dHB1dCB3YXMgZGFtYWdlZCBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODc4MDogJS1mb3JtYXR0aW5nIG5vdyBwcmludHMgdmFsdWUgaW5zdGVhZCBvZiBzdHIgZm9yCisgIGludCBzdWJjbGFzc2VzIHdoZW4gdXNpbmcgJWQsICVpLCBhbmQgJXUgY29kZXMuCisKKy0gSXNzdWUgIzE4NTcxOiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEVQIDQ0NjogZmlsZSBkZXNjcmlwdG9ycyBhbmQgZmlsZQorICBoYW5kbGVzIGFyZSBub3cgY3JlYXRlZCBub24taW5oZXJpdGFibGU7IGFkZCBmdW5jdGlvbnMKKyAgb3MuZ2V0L3NldF9pbmhlcml0YWJsZSgpLCBvcy5nZXQvc2V0X2hhbmRsZV9pbmhlcml0YWJsZSgpIGFuZAorICBzb2NrZXQuc29ja2V0LmdldC9zZXRfaW5oZXJpdGFibGUoKS4KKworLSBJc3N1ZSAjMTE2MTk6IFRoZSBwYXJzZXIgYW5kIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvIG5vdCBlbmNvZGUgVW5pY29kZQorICBmaWxlbmFtZXMgYW55bW9yZSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODgwODogTm9uLWRhZW1vbiB0aHJlYWRzIGFyZSBub3cgYXV0b21hdGljYWxseSBqb2luZWQgd2hlbgorICBhIHN1Yi1pbnRlcnByZXRlciBpcyBzaHV0ZG93biAoaXQgd291bGQgcHJldmlvdXNseSBkdW1wIGEgZmF0YWwgZXJyb3IpLgorCistIFJlbW92ZSBzdXBwb3J0aW5nIGZvciBjb21waWxpbmcgb24gc3lzdGVtcyB3aXRob3V0IGdldGN3ZCgpLgorCistIElzc3VlICMxODc3NDogUmVtb3ZlIGxhc3QgYml0cyBvZiBHTlUgUFRIIHRocmVhZCBjb2RlIGFuZCB0aHJlYWRfcHRoLmguCisKKy0gSXNzdWUgIzE4NzcxOiBBZGQgb3B0aW1pemF0aW9uIHRvIHNldCBvYmplY3QgbG9va3VwcyB0byByZWR1Y2UgdGhlIGNvc3QKKyAgb2YgaGFzaCBjb2xsaXNpb25zLiAgVGhlIGNvcmUgaWRlYSBpcyB0byBpbnNwZWN0IGEgc2Vjb25kIGtleS9oYXNoIHBhaXIKKyAgZm9yIGVhY2ggY2FjaGUgbGluZSByZXRyaWV2ZWQuCisKKy0gSXNzdWUgIzE2MTA1OiBXaGVuIGEgc2lnbmFsIGhhbmRsZXIgZmFpbHMgdG8gd3JpdGUgdG8gdGhlIGZpbGUgZGVzY3JpcHRvcgorICByZWdpc3RlcmVkIHdpdGggYGBzaWduYWwuc2V0X3dha2V1cF9mZCgpYGAsIHJlcG9ydCBhbiBleGNlcHRpb24gaW5zdGVhZAorICBvZiBpZ25vcmluZyB0aGUgZXJyb3IuCisKKy0gSXNzdWUgIzE4NzIyOiBSZW1vdmUgdXNlcyBvZiB0aGUgInJlZ2lzdGVyIiBrZXl3b3JkIGluIEMgY29kZS4KKworLSBJc3N1ZSAjMTg2Njc6IEFkZCBtaXNzaW5nICJIQVZFX0ZDSE9XTkFUIiBzeW1ib2wgdG8gcG9zaXguX2hhdmVfZnVuY3Rpb25zLgorCistIElzc3VlICMxNjQ5OTogQWRkIGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIGlzb2xhdGVkIG1vZGUuCisKKy0gSXNzdWUgIzE1MzAxOiBQYXJzaW5nIGZkLCB1aWQsIGFuZCBnaWQgcGFyYW1ldGVycyBmb3IgYnVpbHRpbnMKKyAgaW4gTW9kdWxlcy9wb3NpeG1vZHVsZS5jIGlzIG5vdyBmYXIgbW9yZSByb2J1c3QuCisKKy0gSXNzdWUgIzE4MzY4OiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSBubyBsb25nZXIgbGVha3MgbWVtb3J5IHdoZW4gcmVhbGxvYygpCisgIGZhaWwuCisKKy0gSXNzdWUgIzE3OTM0OiBBZGQgYSBjbGVhcigpIG1ldGhvZCB0byBmcmFtZSBvYmplY3RzLCB0byBoZWxwIGNsZWFuIHVwCisgIGV4cGVuc2l2ZSBkZXRhaWxzIChsb2NhbCB2YXJpYWJsZXMpIGFuZCBicmVhayByZWZlcmVuY2UgY3ljbGVzLgorCistIElzc3VlICMxODc4MDogJS1mb3JtYXR0aW5nIGNvZGVzICVkLCAlaSwgYW5kICV1IG5vdyB0cmVhdCBpbnQtc3ViY2xhc3NlcworICBhcyBpbnQgKGRpc3BsYXlzIHZhbHVlIG9mIGludC1zdWJjbGFzcyBpbnN0ZWFkIG9mIHN0cihpbnQtc3ViY2xhc3MpICkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg4MDg6IFRocmVhZC5qb2luKCkgbm93IHdhaXRzIGZvciB0aGUgdW5kZXJseWluZyB0aHJlYWQgc3RhdGUgdG8KKyAgYmUgZGVzdHJveWVkIGJlZm9yZSByZXR1cm5pbmcuICBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgYWJvcnRzIGluCisgIFB5X0VuZEludGVycHJldGVyKCkgd2hlbiBzb21lIG5vbi1kYWVtb24gdGhyZWFkcyBhcmUgc3RpbGwgcnVubmluZy4KKworLSBJc3N1ZSAjMTg0NTg6IFByZXZlbnQgY3Jhc2hlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGxpYmVkaXQuICBJdHMgcmVhZGxpbmUKKyAgZW11bGF0aW9uIGhhcyBjaGFuZ2VkIGZyb20gMC1iYXNlZCBpbmRleGluZyB0byAxLWJhc2VkIGxpa2UgZ251IHJlYWRsaW5lLgorCistIElzc3VlICMxODg1MjogSGFuZGxlIGNhc2Ugb2YgYGByZWFkbGluZS5fX2RvY19fYGAgYmVpbmcgYGBOb25lYGAgaW4gdGhlIG5ldworICByZWFkbGluZSBhY3RpdmF0aW9uIGNvZGUgaW4gYGBzaXRlLnB5YGAuCisKIC0gSXNzdWUgIzE4NjcyOiBGaXhlZCBmb3JtYXQgc3BlY2lmaWVycyBmb3IgUHlfc3NpemVfdCBpbiBkZWJ1Z2dpbmcgb3V0cHV0IGluCiAgIHRoZSBfc3JlIG1vZHVsZS4KIAogLSBJc3N1ZSAjMTg4MzA6IGluc3BlY3QuZ2V0Y2xhc3N0cmVlKCkgbm8gbW9yZSBwcm9kdWNlcyBkdXBsaWNhdGVkIGVudHJpZXMgZXZlbgogICB3aGVuIGlucHV0IGxpc3QgY29udGFpbnMgZHVwbGljYXRlcy4KIAorLSBJc3N1ZSAjMTg4Nzg6IHN1bmF1Lm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuICBCYXNlZCBvbgorICBwYXRjaGVzIGJ5IENsYXVkaXUgUG9wYSBhbmQgUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlICMxODkwOTogRml4IF90a2ludGVyLnRrYXBwLmludGVycGFkZHIoKSBvbiBXaW5kb3dzIDY0LWJpdCwgZG9uJ3QgY2FzdAogICA2NC1iaXQgcG9pbnRlciB0byBsb25nICgzMiBiaXRzKS4KIAogLSBJc3N1ZSAjMTg4NzY6IFRoZSBGaWxlSU8ubW9kZSBhdHRyaWJ1dGUgbm93IGJldHRlciByZWZsZWN0cyB0aGUgYWN0dWFsIG1vZGUKICAgdW5kZXIgd2hpY2ggdGhlIGZpbGUgd2FzIG9wZW5lZC4gIFBhdGNoIGJ5IEVyaWsgQnJheS4KIAorLSBJc3N1ZSAjMTY4NTM6IEFkZCBuZXcgc2VsZWN0b3JzIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg4ODI6IEFkZCB0aHJlYWRpbmcubWFpbl90aHJlYWQoKSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTg5MDE6IFRoZSBzdW5hdSBnZXRwYXJhbXMgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbgorICBhIHBsYWluIHR1cGxlLiAgUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMxNzQ4NzogVGhlIHJlc3VsdCBvZiB0aGUgd2F2ZSBnZXRwYXJhbXMgbWV0aG9kIG5vdyBpcyBwaWNrbGVhYmxlIGFnYWluLgorICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE4NzU2OiBvcy51cmFuZG9tKCkgbm93IHVzZXMgYSBsYXppbHktb3BlbmVkIHBlcnNpc3RlbnQgZmlsZQorICBkZXNjcmlwdG9yLCBzbyBhcyB0byBhdm9pZCB1c2luZyBtYW55IGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBydW4gaW4KKyAgcGFyYWxsZWwgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgorCiAtIElzc3VlICMxODQxODogQWZ0ZXIgZm9yaygpLCByZWluaXQgYWxsIHRocmVhZHMgc3RhdGVzLCBub3Qgb25seSBhY3RpdmUgb25lcy4KICAgUGF0Y2ggYnkgQS4gSmVzc2UgSmlyeXUgRGF2aXMuCiAKKy0gSXNzdWUgIzE3OTc0OiBTd2l0Y2ggdW5pdHRlc3QgZnJvbSB1c2luZyBnZXRvcHQgdG8gdXNpbmcgYXJncGFyc2UuCisKKy0gSXNzdWUgIzExNzk4OiBUZXN0U3VpdGUgbm93IGRyb3BzIHJlZmVyZW5jZXMgdG8gb3duIHRlc3RzIGFmdGVyIGV4ZWN1dGlvbi4KKwogLSBJc3N1ZSAjMTY2MTE6IGh0dHAuY29va2llIG5vdyBjb3JyZWN0bHkgcGFyc2VzIHRoZSAnc2VjdXJlJyBhbmQgJ2h0dHBvbmx5JwogICBjb29raWUgZmxhZ3MuCiAKIC0gSXNzdWUgIzExOTczOiBGaXggYSBwcm9ibGVtIGluIGtldmVudC4gVGhlIGZsYWdzIGFuZCBmZmxhZ3MgZmllbGRzIGFyZSBub3cKICAgcHJvcGVybHkgaGFuZGxlZCBhcyB1bnNpZ25lZC4KIAorLSBJc3N1ZSAjMTg4MDc6IGBgcHl2ZW52YGAgbm93IHRha2VzIGEgLS1jb3BpZXMgYXJndW1lbnQgYWxsb3dpbmcgY29waWVzCisgIGluc3RlYWQgb2Ygc3ltbGlua3MgZXZlbiB3aGVyZSBzeW1saW5rcyBhcmUgYXZhaWxhYmxlIGFuZCB0aGUgZGVmYXVsdC4KKworLSBJc3N1ZSAjMTg1Mzg6IGBgcHl0aG9uIC1tIGRpc2BgIG5vdyB1c2VzIGFyZ3BhcnNlIGZvciBhcmd1bWVudCBwcm9jZXNzaW5nLgorICBQYXRjaCBieSBNaWNoZWxlIE9ycsO5LgorCistIElzc3VlICMxODM5NDogQ2xvc2UgY2dpLkZpZWxkU3RvcmFnZSdzIG9wdGlvbmFsIGZpbGUuCisKIC0gSXNzdWUgIzE3NzAyOiBPbiBlcnJvciwgb3MuZW52aXJvbmIgbm93IHJlbW92ZXMgc3VwcHJlc3MgdGhlIGV4Y2VwdCBjb250ZXh0CiAgIHdoZW4gcmFpc2luZyBhIG5ldyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBrZXkuCiAKLS0gSXNzdWUgIzE4NzU1OiBGaXhlZCB0aGUgbG9hZGVyIHVzZWQgaW4gaW1wIHRvIGFsbG93IGdldF9kYXRhKCkgdG8gYmUgY2FsbGVkCi0gIG11bHRpcGxlIHRpbWVzLgotCiAtIElzc3VlICMxNjgwOTogRml4ZWQgc29tZSB0a2ludGVyIGluY29tcGFiaWxpdGllcyB3aXRoIFRjbC9UayA4LjYuCiAKIC0gSXNzdWUgIzE2ODA5OiBUa2ludGVyJ3Mgc3BsaXRsaXN0KCkgYW5kIHNwbGl0KCkgbWV0aG9kcyBub3cgYWNjZXB0IFRjbF9PYmoKQEAgLTI3NSw2ICs2MzYsOSBAQAogLSBJc3N1ZSAjMTgzMjQ6IHNldF9wYXlsb2FkIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBiaW5hcnkgaW5wdXQuICBUaGlzIGFsc28KICAgc3VwZXJzZWRlcyB0aGUgcHJldmlvdXMgZml4ZXMgZm9yICMxNDM2MCwgIzE3MTcsIGFuZCAjMTY1NjQuCiAKKy0gSXNzdWUgIzE4Nzk0OiBBZGQgYSBmaWxlbm8oKSBtZXRob2QgYW5kIGEgY2xvc2VkIGF0dHJpYnV0ZSB0byBzZWxlY3QuZGV2cG9sbAorICBvYmplY3RzLgorCiAtIElzc3VlICMxNzExOTogRml4ZWQgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBwcm9jZXNzaW5nIGxhcmdlIHN0cmluZ3MgYW5kIHR1cGxlcwogICBpbiB0aGUgdGtpbnRlciBtb2R1bGUuCiAKQEAgLTI4NSw5ICs2NDksNiBAQAogLSBJc3N1ZSAjODg2NTogQ29uY3VycmVudCBpbnZvY2F0aW9uIG9mIHNlbGVjdC5wb2xsLnBvbGwoKSBub3cgcmFpc2VzIGEKICAgUnVudGltZUVycm9yIGV4Y2VwdGlvbi4gIFBhdGNoIGJ5IENocmlzdGlhbiBTY2h1YmVydC4KIAotLSBJc3N1ZSAjMTM0NjE6IEZpeCBhIGNyYXNoIGluIHRoZSBUZXh0SU9XcmFwcGVyLnRlbGwgbWV0aG9kIG9uIDY0LWJpdAotICBwbGF0Zm9ybXMuICBQYXRjaCBieSBZb2dlc2ggQ2hhdWRoYXJpLgotCiAtIElzc3VlICMxODc3NzogVGhlIHNzbCBtb2R1bGUgbm93IHVzZXMgdGhlIG5ldyBDUllQVE9fVEhSRUFESUQgQVBJIG9mCiAgIE9wZW5TU0wgMS4wLjArIGluc3RlYWQgb2YgdGhlIGRlcHJlY2F0ZWQgQ1JZUFRPIGlkIGNhbGxiYWNrIGZ1bmN0aW9uLgogCkBAIC0zMDIsNTAgKzY2Myw1OTkgQEAKICAgc3RyaW5ncyBmb3IgYGByZmM4MjJOYW1lYGAgKGVtYWlsKSwgYGBkTlNOYW1lYGAgKEROUykgYW5kCiAgIGBgdW5pZm9ybVJlc291cmNlSWRlbnRpZmllcmBgIChVUkkpLgogCistIElzc3VlICMxODcwMTogUmVtb3ZlIHN1cHBvcnQgb2Ygb2xkIENQeXRob24gdmVyc2lvbnMgKDwzLjApIGZyb20gQyBjb2RlLgorCiAtIElzc3VlICMxODc1NjogSW1wcm92ZSBlcnJvciByZXBvcnRpbmcgaW4gb3MudXJhbmRvbSgpIHdoZW4gdGhlIGZhaWx1cmUKICAgaXMgZHVlIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gL2Rldi91cmFuZG9tIG5vdCBleGlzdGluZyAoZm9yIGV4YW1wbGUsCiAgIGV4aGF1c3RpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBsaW1pdCkuCiAKKy0gSXNzdWUgIzE4NjczOiBBZGQgT19UTVBGSUxFIHRvIG9zIG1vZHVsZS4gT19UTVBGSUxFIHJlcXVpcmVzIExpbnV4IGtlcm5lbAorICAzLjExIG9yIG5ld2VyLiBJdCdzIG9ubHkgZGVmaW5lZCBvbiBzeXN0ZW0gd2l0aCAzLjExIHVhcGkgaGVhZGVycywgdG9vLgorCistIElzc3VlICMxODUzMjogQ2hhbmdlIHRoZSBidWlsdGluIGhhc2ggYWxnb3JpdGhtcycgbmFtZXMgdG8gbG93ZXIgY2FzZSBuYW1lcworICBhcyBwcm9taXNlZCBieSBoYXNobGliJ3MgZG9jdW1lbnRhdGlvbi4KKwogLSBJc3N1ZSAjMTg0MDU6IEltcHJvdmUgdGhlIGVudHJvcHkgb2YgY3J5cHQubWtzYWx0KCkuCiAKKy0gSXNzdWUgIzEyMDE1OiBUaGUgdGVtcGZpbGUgbW9kdWxlIG5vdyB1c2VzIGEgc3VmZml4IG9mIDggcmFuZG9tIGNoYXJhY3RlcnMKKyAgaW5zdGVhZCBvZiA2LCB0byByZWR1Y2UgdGhlIHJpc2sgb2YgZmlsZW5hbWUgY29sbGlzaW9uLiBUaGUgZW50cm9weSB3YXMKKyAgcmVkdWNlZCB3aGVuIHVwcGVyY2FzZSBsZXR0ZXJzIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBjaGFyc2V0IHVzZWQgdG8gZ2VuZXJhdGUKKyAgcmFuZG9tIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzE4NTg1OiBBZGQgOmZ1bmM6YHRleHR3cmFwLnNob3J0ZW5gIHRvIGNvbGxhcHNlIGFuZCB0cnVuY2F0ZSBhCisgIHBpZWNlIG9mIHRleHQgdG8gYSBnaXZlbiBsZW5ndGguCisKKy0gSXNzdWUgIzE4NTk4OiBUd2VhayBleGNlcHRpb24gbWVzc2FnZSBmb3IgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSB0bworICBpbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSB3aGVuIGEga2V5IGFyZ3VtZW50IGlzIG1pc3NpbmcuCisKIC0gSXNzdWUgIzE5MTUxOiBGaXggZG9jc3RyaW5nIGFuZCB1c2Ugb2YgX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkgdG8KICAgcmVmbGVjdCAyLXR1cGxlcy4KIAorLSBJc3N1ZSAjMTkxNTI6IEFkZCBFeHRlbnNpb25GaWxlTG9hZGVyLmdldF9maWxlbmFtZSgpLgorCiAtIElzc3VlICMxODY3NjogQ2hhbmdlICdwb3NpdGl2ZScgdG8gJ25vbi1uZWdhdGl2ZScgaW4gcXVldWUucHkgcHV0IGFuZCBnZXQKICAgZG9jc3RyaW5ncyBhbmQgVmFsdWVFcnJvciBtZXNzYWdlcy4gUGF0Y2ggYnkgWmhvbmd5dWUgTHVvCiAKLS0gSXNzdWUgIzE4NjgxOiBGaXggYSBOYW1lRXJyb3IgaW4gaW1wLnJlbG9hZCgpIChub3RpY2VkIGJ5IFdlaXpoYW8gTGkpLgorLSBGaXggcmVmY291bnRpbmcgaXNzdWUgd2l0aCBleHRlbnNpb24gdHlwZXMgaW4gdGtpbnRlci4KIAogLSBJc3N1ZSAjODExMjogeGxtcnBjLnNlcnZlcidzIERvY1hNTFJQQ1NlcnZlciBzZXJ2ZXIgbm8gbG9uZ2VyIHJhaXNlcyBhbiBlcnJvcgogICBpZiBtZXRob2RzIGhhdmUgYW5ub3RhdGlvbnM7IGl0IG5vdyBjb3JyZWN0bHkgZGlzcGxheXMgdGhlIGFubm90YXRpb25zLgogCistIElzc3VlICMxODYwMDogQWRkZWQgcG9saWN5IGFyZ3VtZW50IHRvIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19zdHJpbmcsCisgIGFuZCBhc19ieXRlcyBhbmQgX19ieXRlc19fIG1ldGhvZHMgdG8gTWVzc2FnZS4KKworLSBJc3N1ZSAjMTg2NzE6IE91dHB1dCBtb3JlIGluZm9ybWF0aW9uIHdoZW4gbG9nZ2luZyBleGNlcHRpb25zIG9jY3VyLgorCistIElzc3VlICMxODYyMTogUHJldmVudCB0aGUgc2l0ZSBtb2R1bGUncyBwYXRjaGVkIGJ1aWx0aW5zIGZyb20ga2VlcGluZworICB0b28gbWFueSByZWZlcmVuY2VzIGFsaXZlIGZvciB0b28gbG9uZy4KKworLSBJc3N1ZSAjNDg4NTogQWRkIHdlYWtyZWYgc3VwcG9ydCB0byBtbWFwIG9iamVjdHMuICBQYXRjaCBieSBWYWxlcmllIExhbWJlcnQuCisKKy0gSXNzdWUgIzg4NjA6IEZpeGVkIHJvdW5kaW5nIGluIHRpbWVkZWx0YSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTg4NDk6IEZpeGVkIGEgV2luZG93cy1zcGVjaWZpYyB0ZW1wZmlsZSBidWcgd2hlcmUgY29sbGlzaW9uIHdpdGggYW4KKyAgZXhpc3RpbmcgZGlyZWN0b3J5IGNhdXNlZCBta3N0ZW1wIGFuZCByZWxhdGVkIEFQSXMgdG8gZmFpbCBpbnN0ZWFkIG9mCisgIHJldHJ5aW5nLiBSZXBvcnQgYW5kIGZpeCBieSBWbGFkIFNoY2hlcmJpbmEuCisKKy0gSXNzdWUgIzE4OTIwOiBhcmdwYXJzZSdzIGRlZmF1bHQgZGVzdGluYXRpb24gZm9yIHRoZSB2ZXJzaW9uIGFjdGlvbiAoLXYsCisgIC0tdmVyc2lvbikgaGFzIGFsc28gYmVlbiBjaGFuZ2VkIHRvIHN0ZG91dCwgdG8gbWF0Y2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTg2MjM6IEZhY3RvciBvdXQgdGhlIF9TdXBwcmVzc0NvcmVGaWxlcyBjb250ZXh0IG1hbmFnZXIgaW50bworICB0ZXN0LnN1cHBvcnQuICBQYXRjaCBieSBWYWxlcmllIExhbWJlcnQuCisKKy0gSXNzdWUgIzEyMDM3OiBGaXggdGVzdF9lbWFpbCBmb3IgZGVza3RvcCBXaW5kb3dzLgorCistIElzc3VlICMxNTUwNzogdGVzdF9zdWJwcm9jZXNzJ3MgdGVzdF9zZW5kX3NpZ25hbCBjb3VsZCBmYWlsIGlmIHRoZSB0ZXN0CisgIHJ1bm5lciB3ZXJlIHJ1biBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcHJvY2VzcyBpbmhlcml0ZWQgYW4gaWdub3JlCisgIHNldHRpbmcgZm9yIFNJR0lOVC4gIFJlc3RvcmUgdGhlIFNJR0lOVCBoYW5kbGVyIHRvIHRoZSBkZXNpcmVkCisgIEtleWJvYXJkSW50ZXJydXB0IHJhaXNpbmcgb25lIGR1cmluZyB0aGF0IHRlc3QuCisKKy0gSXNzdWUgIzE2Nzk5OiBTd2l0Y2hlZCBmcm9tIGdldG9wdCB0byBhcmdwYXJzZSBzdHlsZSBpbiByZWdydGVzdCdzIGFyZ3VtZW50CisgIHBhcnNpbmcuICBBZGRlZCBtb3JlIHRlc3RzIGZvciByZWdydGVzdCdzIGFyZ3VtZW50IHBhcnNpbmcuCisKKy0gSXNzdWUgIzE4NzkyOiBVc2UgIjEyNy4wLjAuMSIgb3IgIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0IiBhcyBtdWNoIGFzCisgIHBvc3NpYmxlLCBzaW5jZSAibG9jYWxob3N0IiBnb2VzIHRocm91Z2ggYSBETlMgbG9va3VwIHVuZGVyIHJlY2VudCBXaW5kb3dzCisgIHZlcnNpb25zLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4NzQzOiBGaXggcmVmZXJlbmNlcyB0byBub24tZXhpc3RhbnQgIlN0cmluZ0lPIiBtb2R1bGUuCisKKy0gSXNzdWUgIzE4NzgzOiBSZW1vdmVkIGV4aXN0aW5nIG1lbnRpb25zIG9mIFB5dGhvbiBsb25nIHR5cGUgaW4gZG9jc3RyaW5ncywKKyAgZXJyb3IgbWVzc2FnZXMgYW5kIGNvbW1lbnRzLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTU4NDogUHJvdmlkZSBjb25maWd1cmUgb3B0aW9ucyB0byBvdmVycmlkZSBkZWZhdWx0IHNlYXJjaCBwYXRocyBmb3IKKyAgVGNsIGFuZCBUayB3aGVuIGJ1aWxkaW5nIF90a2ludGVyLgorCistIElzc3VlICMxNTY2MzogVGNsL1RrIDguNS4xNCBpcyBub3cgaW5jbHVkZWQgd2l0aCB0aGUgT1MgWCAxMC42KyA2NC0vMzItYml0CisgIGluc3RhbGxlci4gIEl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YKKyAgVGNsL1RrIDguNSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbXMgaW4gdGhlIEFwcGxlLXN1cHBsaWVkIFRjbC9UayA4LjUKKyAgc2hpcHBlZCBpbiBPUyBYIDEwLjYgYW5kIGxhdGVyIHJlbGVhc2VzLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg5MjI6IE5vdyBUaGUgTGliL3NtdHBkLnB5IGFuZCBUb29scy9pMThuL21zZ2ZtdC5weSBzY3JpcHRzIHdyaXRlCisgIHRoZWlyIHZlcnNpb24gc3RyaW5ncyB0byBzdGRvdXQsIGFuZCBub3QgdG8gc2RlcnIuCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMDgtMDMKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2NzQxOiBGaXggYW4gZXJyb3IgcmVwb3J0aW5nIGluIGludCgpLgorCistIElzc3VlICMxNzg5OTogRml4IHJhcmUgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gb3MubGlzdGRpcigpLgorCistIElzc3VlICMxMDI0MTogQ2xlYXIgZXh0ZW5zaW9uIG1vZHVsZSBkaWN0IGNvcGllcyBhdCBpbnRlcnByZXRlciBzaHV0ZG93bi4KKyAgUGF0Y2ggYnkgTmVpbCBTY2hlbWVuYXVlciwgbWluaW1hbGx5IG1vZGlmaWVkLgorCistIElzc3VlICM5MDM1OiBpc21vdW50IG5vdyByZWNvZ25pc2VzIHZvbHVtZXMgbW91bnRlZCBiZWxvdyBhIGRyaXZlIHJvb3QKKyAgb24gV2luZG93cy4gT3JpZ2luYWwgcGF0Y2ggYnkgQXRzdW8gSXNoaW1vdG8uCisKKy0gSXNzdWUgIzE4MjE0OiBJbXByb3ZlIGZpbmFsaXphdGlvbiBvZiBQeXRob24gbW9kdWxlcyB0byBhdm9pZCBzZXR0aW5nCisgIHRoZWlyIGdsb2JhbHMgdG8gTm9uZSwgaW4gbW9zdCBjYXNlcy4KKworLSBJc3N1ZSAjMTgxMTI6IFBFUCA0NDIgaW1wbGVtZW50YXRpb24gKHNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbikuCisKKy0gSXNzdWUgIzE4NTUyOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgUHlBcmVuYV9BZGRQeU9iamVjdCgpIGluCisgIG9iajJhc3Rfb2JqZWN0KCkuCisKKy0gSXNzdWUgIzE4NTYwOiBGaXggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzdW0oKS4KKworLSBJc3N1ZSAjMTg1MjA6IEFkZCBhIG5ldyBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigpIGZ1bmN0aW9uLCBzYW1lIHRoYW4KKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgpIGV4Y2VwdCB0aGF0IGl0IGhhcyBhIHJldHVybiB2YWx1ZSAoMCBvbiBzdWNjZXNzLAorICAtMSBvbiBlcnJvcikuCisKKy0gSXNzdWUgIzE1OTA1OiBGaXggdGhlb3JldGljYWwgYnVmZmVyIG92ZXJmbG93IGluIGhhbmRsaW5nIG9mIHN5cy5hcmd2WzBdLAorICBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGlmIHRoZSBvcGVyYXRpb24gc3lzdGVtIGRvZXMgbm90IG9iZXkgTUFYUEFUSExFTi4KKworLSBJc3N1ZSAjMTg0MDg6IEZpeCBtYW55IHZhcmlvdXMgYnVncyBpbiBjb2RlIGhhbmRsaW5nIGVycm9ycywgZXNwZWNpYWxseQorICBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIChNZW1vcnlFcnJvcikuCisKKy0gSXNzdWUgIzE4MzQ0OiBGaXggcG90ZW50aWFsIHJlZi1sZWFrcyBpbiBfYnVmZmVyZWRyZWFkZXJfcmVhZF9hbGwoKS4KKworLSBJc3N1ZSAjMTgzNDI6IFVzZSB0aGUgcmVwciBvZiBhIG1vZHVsZSBuYW1lIHdoZW4gYW4gaW1wb3J0IGZhaWxzIHdoZW4gdXNpbmcKKyAgYGBmcm9tIC4uLiBpbXBvcnQgLi4uYGAuCisKKy0gSXNzdWUgIzE3ODcyOiBGaXggYSBzZWdmYXVsdCBpbiBtYXJzaGFsLmxvYWQoKSB3aGVuIGlucHV0IHN0cmVhbSByZXR1cm5zCisgIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCisKKy0gSXNzdWUgIzE4MzM4OiBgcHl0aG9uIC0tdmVyc2lvbmAgbm93IHByaW50cyB2ZXJzaW9uIHN0cmluZyB0byBzdGRvdXQsIGFuZAorICBub3QgdG8gc3RkZXJyLiAgUGF0Y2ggYnkgQmVya2VyIFBla3NhZyBhbmQgTWljaGFlbCBEaWNrZW5zLgorCistIElzc3VlICMxODQyNjogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBDIGV4dGVuc2lvbiBpbXBvcnQgd2hlbgorICBQeU1vZHVsZV9HZXREZWYoKSByZXR1cm5zIGFuIGVycm9yLgorCistIElzc3VlICMxNzIwNjogT24gV2luZG93cywgaW5jcmVhc2UgdGhlIHN0YWNrIHNpemUgZnJvbSAyIE1CIHRvIDQuMiBNQiB0byBmaXgKKyAgYSBzdGFjayBvdmVyZmxvdyBpbiB0aGUgbWFyc2hhbCBtb2R1bGUgKGZpeCBhIGNyYXNoIGluIHRlc3RfbWFyc2hhbCkuCisgIFBhdGNoIHdyaXR0ZW4gYnkgSmVyZW15IEtsb3RoLgorCistIElzc3VlICMzMzI5OiBJbXBsZW1lbnQgdGhlIFBFUCA0NDU6IEFkZCBuZXcgQVBJcyB0byBjdXN0b21pemUgUHl0aG9uIG1lbW9yeQorICBhbGxvY2F0b3JzLgorCistIElzc3VlICMxODMyODogUmVvcmRlciBvcHMgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGUqKCkgZnVuY3Rpb25zLiBOb3cgdGhlCisgIHRzdGF0ZSBpcyBmaXJzdCByZW1vdmVkIGZyb20gVExTIGFuZCB0aGVuIGRlYWxsb2NhdGVkLgorCistIElzc3VlICMxMzQ4MzogVXNlIFZpcnR1YWxBbGxvYyBpbiBvYm1hbGxvYyBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODE4NDogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBhbmQgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgbm93IHJhaXNlCisgIE92ZXJmbG93RXJyb3Igd2hlbiBhbiBhcmd1bWVudCBvZiAlYyBmb3JtYXQgaXMgb3V0IG9mIHJhbmdlLgorCistIElzc3VlICMxODExMTogVGhlIG1pbigpIGFuZCBtYXgoKSBmdW5jdGlvbnMgbm93IHN1cHBvcnQgYSBkZWZhdWx0IGFyZ3VtZW50CisgIHRvIGJlIHJldHVybmVkIGluc3RlYWQgb2YgcmFpc2luZyBhIFZhbHVlRXJyb3Igb24gYW4gZW1wdHkgc2VxdWVuY2UuCisgIChDb250cmlidXRlZCBieSBKdWxpYW4gQmVybWFuLikKKworLSBJc3N1ZSAjMTgxMzc6IERldGVjdCBpbnRlZ2VyIG92ZXJmbG93IG9uIHByZWNpc2lvbiBpbiBmbG9hdC5fX2Zvcm1hdF9fKCkKKyAgYW5kIGNvbXBsZXguX19mb3JtYXRfXygpLgorCistIElzc3VlICMxODE4MzogRml4IHZhcmlvdXMgdW5pY29kZSBvcGVyYXRpb25zIG9uIHN0cmluZ3Mgd2l0aCBsYXJnZSB1bmljb2RlCisgIGNvZGVwb2ludHMuCisKKy0gSXNzdWUgIzE4MTgwOiBGaXggcmVmIGxlYWsgaW4gX1B5SW1wb3J0X0dldER5bkxvYWRXaW5kb3dzKCkuCisKKy0gSXNzdWUgIzE4MDM4OiBTeW50YXhFcnJvciByYWlzZWQgZHVyaW5nIGNvbXBpbGF0aW9uIHNvdXJjZXMgd2l0aCBpbGxlZ2FsCisgIGVuY29kaW5nIG5vdyBhbHdheXMgY29udGFpbnMgYW4gZW5jb2RpbmcgbmFtZS4KKworLSBJc3N1ZSAjMTc5MzE6IFJlc29sdmUgY29uZnVzaW9uIG9uIFdpbmRvd3MgYmV0d2VlbiBwaWRzIGFuZCBwcm9jZXNzCisgIGhhbmRsZXMuCisKKy0gVHdlYWsgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlIHdoZW4gdGhlIG1hZ2ljIG51bWJlciBvciBzaXplIHZhbHVlIGluIGEgYnl0ZWNvZGUKKyAgZmlsZSBpcyB0cnVuY2F0ZWQuCisKKy0gSXNzdWUgIzE3OTMyOiBGaXggYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBvbiBXaW5kb3dzIDY0LWJpdCBpbiBpdGVyYXRvcnM6CisgIGNoYW5nZSB0aGUgQyB0eXBlIG9mIHNlcWl0ZXJvYmplY3QuaXRfaW5kZXggZnJvbSBsb25nIHRvIFB5X3NzaXplX3QuCisKKy0gSXNzdWUgIzE4MDY1OiBEb24ndCBzZXQgX19wYXRoX18gdG8gdGhlIHBhY2thZ2UgbmFtZSBmb3IgZnJvemVuIHBhY2thZ2VzLgorCistIElzc3VlICMxODA4ODogV2hlbiByZWxvYWRpbmcgYSBtb2R1bGUsIHVuY29uZGl0aW9uYWxseSByZXNldCBhbGwgcmVsZXZhbnQKKyAgYXR0cmlidXRlcyBvbiB0aGUgbW9kdWxlIChlLmcuIF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywgX19maWxlX18sCisgIF9fY2FjaGVkX18pLgorCistIElzc3VlICMxNzkzNzogVHJ5IGhhcmRlciB0byBjb2xsZWN0IGN5Y2xpYyBnYXJiYWdlIGF0IHNodXRkb3duLgorCistIElzc3VlICMxMjM3MDogUHJldmVudCBjbGFzcyBib2RpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBfX2NsYXNzX18KKyAgY2xvc3VyZS4KKworLSBJc3N1ZSAjMTc2NDQ6IEZpeCBhIGNyYXNoIGluIHN0ci5mb3JtYXQgd2hlbiBjdXJseSBicmFjZXMgYXJlIHVzZWQgaW4gc3F1YXJlCisgIGJyYWNrZXRzLgorCistIElzc3VlICMxNzIzNzogRml4IGNyYXNoIGluIHRoZSBBU0NJSSBkZWNvZGVyIG9uIG02OGsuCisKKy0gSXNzdWUgIzE3OTI3OiBGcmFtZSBvYmplY3RzIGtlcHQgYXJndW1lbnRzIGFsaXZlIGlmIHRoZXkgaGFkIGJlZW4KKyAgY29waWVkIGludG8gYSBjZWxsLCBldmVuIGlmIHRoZSBjZWxsIHdhcyBjbGVhcmVkLgorCistIElzc3VlICMxNTQ1NDYzOiBBdCBzaHV0ZG93biwgZGVmZXIgZmluYWxpemF0aW9uIG9mIGNvZGVjIG1vZHVsZXMgc28KKyAgdGhhdCBzdGRlcnIgcmVtYWlucyB1c2FibGUuCisKKy0gSXNzdWUgIzczMzA6IEltcGxlbWVudCB3aWR0aCBhbmQgcHJlY2lzaW9uIChleDogIiU1LjNzIikgZm9yIHRoZSBmb3JtYXQKKyAgc3RyaW5nIG9mIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgZnVuY3Rpb24sIG9yaWdpbmFsIHBhdGNoIHdyaXR0ZW4gYnkgWXNqIFJheS4KKworLSBJc3N1ZSAjMTU0NTQ2MzogR2xvYmFsIHZhcmlhYmxlcyBjYXVnaHQgaW4gcmVmZXJlbmNlIGN5Y2xlcyBhcmUgbm93CisgIGdhcmJhZ2UtY29sbGVjdGVkIGF0IHNodXRkb3duLgorCistIElzc3VlICMxNzA5NDogQ2xlYXIgc3RhbGUgdGhyZWFkIHN0YXRlcyBhZnRlciBmb3JrKCkuICBOb3RlIHRoYXQgdGhpcworICBpcyBhIHBvdGVudGlhbGx5IGRpc3J1cHRpdmUgY2hhbmdlIHNpbmNlIGl0IG1heSByZWxlYXNlIHNvbWUgc3lzdGVtCisgIHJlc291cmNlcyB3aGljaCB3b3VsZCBvdGhlcndpc2UgcmVtYWluIHBlcnBldHVhbGx5IGFsaXZlIChlLmcuIGRhdGFiYXNlCisgIGNvbm5lY3Rpb25zIGtlcHQgaW4gdGhyZWFkLWxvY2FsIHN0b3JhZ2UpLgorCistIElzc3VlICMxNzQwODogQXZvaWQgdXNpbmcgYW4gb2Jzb2xldGUgaW5zdGFuY2Ugb2YgdGhlIGNvcHlyZWcgbW9kdWxlIHdoZW4KKyAgdGhlIGludGVycHJldGVyIGlzIHNodXRkb3duIGFuZCB0aGVuIHN0YXJ0ZWQgYWdhaW4uCisKKy0gSXNzdWUgIzU4NDU6IEVuYWJsZSB0YWItY29tcGxldGlvbiBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgYnkKKyAgZGVmYXVsdCwgdGhhbmtzIHRvIGEgbmV3IHN5cy5fX2ludGVyYWN0aXZlaG9va19fLgorCistIElzc3VlICMxNzExNSwxNzExNjogTW9kdWxlIGluaXRpYWxpemF0aW9uIG5vdyBpbmNsdWRlcyBzZXR0aW5nIF9fcGFja2FnZV9fIGFuZAorICBfX2xvYWRlcl9fIGF0dHJpYnV0ZXMgdG8gTm9uZS4KKworLSBJc3N1ZSAjMTc4NTM6IEVuc3VyZSBsb2NhbHMgb2YgYSBjbGFzcyB0aGF0IHNoYWRvdyBmcmVlIHZhcmlhYmxlcyBhbHdheXMgd2luCisgIG92ZXIgdGhlIGNsb3N1cmVzLgorCistIElzc3VlICMxNzg2MzogSW4gdGhlIGludGVyYWN0aXZlIGNvbnNvbGUsIGRvbid0IGxvb3AgZm9yZXZlciBpZiB0aGUgZW5jb2RpbmcKKyAgY2FuJ3QgYmUgZmV0Y2hlZCBmcm9tIHN0ZGluLgorCistIElzc3VlICMxNzg2NzogUmFpc2UgYW4gSW1wb3J0RXJyb3IgaWYgX19pbXBvcnRfXyBpcyBub3QgZm91bmQgaW4gX19idWlsdGluc19fLgorCistIElzc3VlICMxODY5ODogRW5zdXJlIGltcG9ydGxpYi5yZWxvYWQoKSByZXR1cm5zIHRoZSBtb2R1bGUgb3V0IG9mIHN5cy5tb2R1bGVzLgorCistIElzc3VlICMxNzg1NzogUHJldmVudCBidWlsZCBmYWlsdXJlcyB3aXRoIHByZS0zLjUuMCB2ZXJzaW9ucyBvZiBzcWxpdGUzLAorICBzdWNoIGFzIHdhcyBzaGlwcGVkIHdpdGggQ2VudG9zIDUgYW5kIE1hYyBPUyBYIDEwLjQuCisKKy0gSXNzdWUgIzE3NDEzOiBzeXMuc2V0dHJhY2UgY2FsbGJhY2tzIHdlcmUgYmVpbmcgcGFzc2VkIGEgc3RyaW5nIGluc3RlYWQgb2YgYW4KKyAgZXhjZXB0aW9uIGluc3RhbmNlIGZvciB0aGUgJ3ZhbHVlJyBlbGVtZW50IG9mIHRoZSBhcmcgdHVwbGUgaWYgdGhlIGV4Y2VwdGlvbgorICBvcmlnaW5hdGVkIGZyb20gQyBjb2RlOyBub3cgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGlzIGFsd2F5cyBwcm92aWRlZC4KKworLSBJc3N1ZSAjMTc3ODI6IEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIG9uIHBsYXRmb3JtcyB3aGVyZQorICBgYHN0cnVjdCB0aW1lc3BlY2BgJ3MgInR2X25zZWMiIG1lbWJlciBpcyBub3QgYSBDIGxvbmcuCisKKy0gSXNzdWUgIzE3NzIyOiBXaGVuIGxvb2tpbmcgdXAgX19yb3VuZF9fLCByZXNvbHZlIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMxNjA2MTogU3BlZWQgdXAgc3RyLnJlcGxhY2UoKSBmb3IgcmVwbGFjaW5nIDEtY2hhcmFjdGVyIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE3NzE1OiBGaXggc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gaW4gYSBfX3RydW5jX18KKyAgbWV0aG9kLgorCistIElzc3VlICMxNzY0MzogQWRkIF9fY2FsbGJhY2tfXyBhdHRyaWJ1dGUgdG8gd2Vha3JlZi5yZWYuCisKKy0gSXNzdWUgIzE2NDQ3OiBGaXhlZCBwb3RlbnRpYWwgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gc2V0dGluZyBfX25hbWVfXyBvbiBhCisgIGNsYXNzLgorCistIElzc3VlICMxNzY2OTogRml4IGNyYXNoIGludm9sdmluZyBmaW5hbGl6YXRpb24gb2YgZ2VuZXJhdG9ycyB1c2luZyB5aWVsZCBmcm9tLgorCistIElzc3VlICMxNDQzOTogUHl0aG9uIG5vdyBwcmludHMgdGhlIHRyYWNlYmFjayBvbiBydW5weSBmYWlsdXJlIGF0IHN0YXJ0dXAuCisKKy0gSXNzdWUgIzE3NDY5OiBGaXggX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpIGFuZCBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgd2hlbiBydW5uaW5nIG9uIHZhbGdyaW5kLgorCistIElzc3VlICMxNzYxOTogTWFrZSBpbnB1dCgpIGNoZWNrIGZvciBDdHJsLUMgY29ycmVjdGx5IG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE3MzU3OiBBZGQgbWlzc2luZyB2ZXJib3NpdHkgbWVzc2FnZXMgZm9yIC12Ly12diB0aGF0IHdlcmUgbG9zdCBkdXJpbmcKKyAgdGhlIGltcG9ydGxpYiB0cmFuc2l0aW9uLgorCistIElzc3VlICMxNzYxMDogRG9uJ3QgcmVseSBvbiBub24tc3RhbmRhcmQgYmVoYXZpb3Igb2YgdGhlIEMgcXNvcnQoKSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTczMjM6IFRoZSAiW1ggcmVmcywgWSBibG9ja3NdIiBwcmludGVkIGJ5IGRlYnVnIGJ1aWxkcyBoYXMgYmVlbgorICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgSXQgY2FuIGJlIHJlLWVuYWJsZWQgd2l0aCB0aGUgYC1YIHNob3dyZWZjb3VudGAgb3B0aW9uLgorCistIElzc3VlICMxNzMyODogRml4IHBvc3NpYmxlIHJlZmxlYWsgaW4gZGljdC5zZXRkZWZhdWx0LgorCistIElzc3VlICMxNzI3NTogQ29ycmVjdGVkIGNsYXNzIG5hbWUgaW4gaW5pdCBlcnJvciBtZXNzYWdlcyBvZiB0aGUgQyB2ZXJzaW9uIG9mCisgIEJ1ZmZlcmVkV3JpdGVyIGFuZCBCdWZmZXJlZFJhbmRvbS4KKworLSBJc3N1ZSAjNzk2MzogRml4ZWQgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHRoYXQgaXNzdWVkIHdoZW4gb2JqZWN0IGlzCisgIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjODc0NTogU21hbGwgc3BlZWQgdXAgemlwaW1wb3J0IG9uIFdpbmRvd3MuIFBhdGNoIGJ5IENhdGFsaW4gSWFjb2IuCisKKy0gSXNzdWUgIzUzMDg6IFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBtYXJzaGFsbGluZyB0b28gbGFyZ2Ugb2JqZWN0IChhIHNlcXVlbmNlCisgIHdpdGggc2l6ZSA+PSAyKiozMSksIGluc3RlYWQgb2YgcHJvZHVjaW5nIGlsbGVnYWwgbWFyc2hhbCBkYXRhLgorCistIElzc3VlICMxMjk4MzogQnl0ZXMgbGl0ZXJhbHMgd2l0aCBpbnZhbGlkIFx4IGVzY2FwZSBub3cgcmFpc2UgYSBTeW50YXhFcnJvcgorICBhbmQgYSBmdWxsIHRyYWNlYmFjayBpbmNsdWRpbmcgbGluZSBudW1iZXIuCisKKy0gSXNzdWUgIzE2OTY3OiBJbiBmdW5jdGlvbiBkZWZpbml0aW9uLCBldmFsdWF0ZSBwb3NpdGlvbmFsIGRlZmF1bHRzIGJlZm9yZQorICBrZXl3b3JkLW9ubHkgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzE3MTczOiBSZW1vdmUgdXNlcyBvZiBsb2NhbGUtZGVwZW5kZW50IEMgZnVuY3Rpb25zIChpc2FscGhhKCkgZXRjLikKKyAgaW4gdGhlIGludGVycHJldGVyLgorCistIElzc3VlICMxNzEzNzogV2hlbiBhbiBVbmljb2RlIHN0cmluZyBpcyByZXNpemVkLCB0aGUgaW50ZXJuYWwgd2lkZSBjaGFyYWN0ZXIKKyAgc3RyaW5nICh3c3RyKSBmb3JtYXQgaXMgbm93IGNsZWFyZWQuCisKKy0gSXNzdWUgIzE3MDQzOiBUaGUgdW5pY29kZS1pbnRlcm5hbCBkZWNvZGVyIG5vIGxvbmdlciByZWFkIHBhc3QgdGhlIGVuZCBvZgorICBpbnB1dCBidWZmZXIuCisKKy0gSXNzdWUgIzE3MDk4OiBBbGwgbW9kdWxlcyBub3cgaGF2ZSBfX2xvYWRlcl9fIHNldCBldmVuIGlmIHRoZXkgcHJlLWV4aXN0IHRoZQorICBib290c3RyYXBwaW5nIG9mIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTY5Nzk6IEZpeCBlcnJvciBoYW5kbGluZyBidWdzIGluIHRoZSB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTY3NzI6IFRoZSBiYXNlIGFyZ3VtZW50IHRvIHRoZSBpbnQgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMKKyAgZmxvYXRzLCBvciBvdGhlciBub24taW50ZWdlciBvYmplY3RzIHdpdGggYW4gX19pbnRfXyBtZXRob2QuICBPYmplY3RzCisgIHdpdGggYW4gX19pbmRleF9fIG1ldGhvZCBhcmUgbm93IGFjY2VwdGVkLgorCistIElzc3VlICMxMDE1NjogSW4gdGhlIGludGVycHJldGVyJ3MgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHVuaWNvZGUgZ2xvYmFscworICBhcmUgbm93IGluaXRpYWxpemVkIGR5bmFtaWNhbGx5IGFzIG5lZWRlZC4KKworLSBJc3N1ZSAjMTY5ODA6IEZpeCBwcm9jZXNzaW5nIG9mIGVzY2FwZWQgbm9uLWFzY2lpIGJ5dGVzIGluIHRoZQorICB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTY5NzU6IEZpeCBlcnJvciBoYW5kbGluZyBidWcgaW4gdGhlIGVzY2FwZS1kZWNvZGUgYnl0ZXMgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTQ4NTA6IE5vdyBhIGNoYXJtYXAgZGVjb2RlciB0cmVhdHMgVStGRkZFIGFzICJ1bmRlZmluZWQgbWFwcGluZyIKKyAgaW4gYW55IG1hcHBpbmcsIG5vdCBvbmx5IGluIGEgc3RyaW5nLgorCistIElzc3VlICMxNjczMDogaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vdyBubyBsb25nZXJzIHJhaXNlcyBhbgorICBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gcG9wdWxhdGUgaXRzIGNhY2hlIGFuZCBpdCBmaW5kcyBvdXQgdGhlIGRpcmVjdG9yeSBpcworICB1bnJlYWRhYmxlIG9yIGhhcyB0dXJuZWQgaW50byBhIGZpbGUuIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkKKyAgRGF2aWQgUHJpdGNoYXJkLgorCistIElzc3VlICMxNjkwNjogRml4IGEgbG9naWMgZXJyb3IgdGhhdCBwcmV2ZW50ZWQgbW9zdCBzdGF0aWMgc3RyaW5ncyBmcm9tIGJlaW5nCisgIGNsZWFyZWQuCisKKy0gSXNzdWUgIzExNDYxOiBGaXggdGhlIGluY3JlbWVudGFsIFVURi0xNiBkZWNvZGVyLiBPcmlnaW5hbCBwYXRjaCBieQorICBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KKworLSBJc3N1ZSAjMTY4NTY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIGNhbGxpbmcgcmVwcigpIG9uIGEgZGljdCB3aXRoCisgIGEga2V5IHdob3NlIHJlcHIgcmFpc2UgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNjM2NzogRml4IEZpbGVJTy5yZWFkYWxsKCkgb24gV2luZG93cyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gMiBHQi4KKworLSBJc3N1ZSAjMTY3NjE6IENhbGxpbmcgaW50KCkgd2l0aCBiYXNlIGFyZ3VtZW50IG9ubHkgbm93IHJhaXNlcyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE2NzU5OiBTdXBwb3J0IHRoZSBmdWxsIERXT1JEICh1bnNpZ25lZCBsb25nKSByYW5nZSBpbiBSZWcyUHkKKyAgd2hlbiByZXRyaWV2aW5nIGEgUkVHX0RXT1JEIHZhbHVlLiBUaGlzIGNvcnJlY3RzIGZ1bmN0aW9ucyBsaWtlCisgIHdpbnJlZy5RdWVyeVZhbHVlRXggdGhhdCBtYXkgaGF2ZSBiZWVuIHJldHVybmluZyB0cnVuY2F0ZWQgdmFsdWVzLgorCistIElzc3VlICMxNDQyMDogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUHkyUmVnCisgIHdoZW4gcGFzc2VkIGEgUkVHX0RXT1JEIHZhbHVlLiBGaXhlcyBPdmVyZmxvd0Vycm9yIGluIHdpbnJlZy5TZXRWYWx1ZUV4LgorCistIElzc3VlICMxMTkzOTogU2V0IHRoZSBzdF9kZXYgYXR0cmlidXRlIG9mIHN0YXRfcmVzdWx0IHRvIGFsbG93IFdpbmRvd3MgdG8KKyAgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG9zLnBhdGguc2FtZWZpbGUvc2FtZW9wZW5maWxlL3NhbWVzdGF0IGltcGxlbWVudGF0aW9ucworICB1c2VkIGJ5IG90aGVyIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTY3NzI6IFRoZSBpbnQoKSBjb25zdHJ1Y3RvcidzIHNlY29uZCBhcmd1bWVudCAoYmFzZSkgbm8gbG9uZ2VyCisgIGFjY2VwdHMgbm9uIGludGVnZXIgdmFsdWVzLiAgQ29uc2lzdGVudCB3aXRoIHRoZSBiZWhhdmlvciBpbiBQeXRob24gMi4KKworLSBJc3N1ZSAjMTQ0NzA6IFJlbW92ZSB3OXhwb3BlbiBzdXBwb3J0IHBlciBQRVAgMTEuCisKKy0gSXNzdWUgIzk4NTY6IFJlcGxhY2UgZGVwcmVjYXRpb24gd2FybmluZyB3aXRoIHJhaXNpbmcgVHlwZUVycm9yCisgIGluIG9iamVjdC5fX2Zvcm1hdF9fLiBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKy0gSXNzdWUgIzE2NTk3OiBJbiBidWZmZXJlZCBhbmQgdGV4dCBJTywgY2FsbCBjbG9zZSgpIG9uIHRoZSB1bmRlcmx5aW5nIHN0cmVhbQorICBpZiBpbnZva2luZyBmbHVzaCgpIGZhaWxzLgorCistIElzc3VlICMxNjcyMjogSW4gdGhlIGJ5dGVzKCkgY29uc3RydWN0b3IsIHRyeSB0byBjYWxsIF9fYnl0ZXNfXyBvbiB0aGUKKyAgYXJndW1lbnQgYmVmb3JlIF9faW5kZXhfXy4KKworLSBJc3N1ZSAjMTY0MjE6IGxvYWRpbmcgbXVsdGlwbGUgbW9kdWxlcyBmcm9tIG9uZSBzaGFyZWQgb2JqZWN0IGlzIG5vdworICBoYW5kbGVkIGNvcnJlY3RseSAocHJldmlvdXNseSwgdGhlIGZpcnN0IG1vZHVsZSBsb2FkZWQgZnJvbSB0aGF0IGZpbGUKKyAgd2FzIHNpbGVudGx5IHJldHVybmVkKS4gUGF0Y2ggYnkgVsOhY2xhdiDFoG1pbGF1ZXIuCisKKy0gSXNzdWUgIzE2NjAyOiBXaGVuIGEgd2Vha3JlZidzIHRhcmdldCB3YXMgcGFydCBvZiBhIGxvbmcgZGVhbGxvY2F0aW9uCisgIGNoYWluLCB0aGUgb2JqZWN0IGNvdWxkIHJlbWFpbiByZWFjaGFibGUgdGhyb3VnaCBpdHMgd2Vha3JlZiBldmVuIHRob3VnaAorICBpdHMgcmVmY291bnQgaGFkIGRyb3BwZWQgdG8gemVyby4KKworLSBJc3N1ZSAjMTY0OTU6IFJlbW92ZSBleHRyYW5lb3VzIE5VTEwgZW5jb2RpbmcgY2hlY2sgZnJvbSBieXRlc19kZWNvZGUoKS4KKworLSBJc3N1ZSAjMTY2MTk6IENyZWF0ZSBOYW1lQ29uc3RhbnQgQVNUIGNsYXNzIHRvIHJlcHJlc2VudCBOb25lLCBUcnVlLCBhbmQgRmFsc2UKKyAgbGl0ZXJhbHMuIEFzIGEgcmVzdWx0LCB0aGVzZSBjb25zdGFudHMgYXJlIG5ldmVyIGxvYWRlZCBhdCBydW50aW1lIGZyb20KKyAgYnVpbHRpbnMuCisKKy0gSXNzdWUgIzE2NDU1OiBPbiBGcmVlQlNEIGFuZCBTb2xhcmlzLCBpZiB0aGUgbG9jYWxlIGlzIEMsIHRoZQorICBBU0NJSS9zdXJyb2dhdGVlc2NhcGUgY29kZWMgaXMgbm93IHVzZWQsIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8KKyAgZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBUaGlzIGNoYW5nZSBmaXhlcyBpbmNvbnNpc3RlbmNpZXMgd2l0aAorICBvcy5mc2VuY29kZSgpIGFuZCBvcy5mc2RlY29kZSgpIGJlY2F1c2UgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMgYW5ub3VuY2VzIGFuCisgIEFTQ0lJIGxvY2FsZSBlbmNvZGluZywgd2hlcmVhcyB0aGUgSVNPLTg4NTktMSBlbmNvZGluZyBpcyB1c2VkIGluIHByYWN0aWNlLgorCistIElzc3VlICMxNjU2MjogT3B0aW1pemUgZGljdCBlcXVhbGl0eSB0ZXN0aW5nLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY1ODg6IFNpbGVuY2UgdW51c2VkLWJ1dC1zZXQgd2FybmluZ3MgaW4gUHl0aG9uL3RocmVhZF9wdGhyZWFkCisKKy0gSXNzdWUgIzE2NTkyOiBzdHJpbmdsaWJfYnl0ZXNfam9pbiBkb2Vzbid0IHJhaXNlIE1lbW9yeUVycm9yIG9uIGFsbG9jYXRpb24KKyAgZmFpbHVyZS4KKworLSBJc3N1ZSAjMTY1NDY6IEZpeDogYXN0LllpZWxkRnJvbSBhcmd1bWVudCBpcyBub3cgbWFuZGF0b3J5LgorCistIElzc3VlICMxNjUxNDogRml4IHJlZ3Jlc3Npb24gY2F1c2luZyBhIHRyYWNlYmFjayB3aGVuIHN5cy5wYXRoWzBdIGlzIE5vbmUKKyAgKGFjdHVhbGx5LCBhbnkgbm9uLXN0cmluZyBvciBub24tYnl0ZXMgdHlwZSkuCisKKy0gSXNzdWUgIzE2MzA2OiBGaXggbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB1bmtub3duIGNvbW1hbmQgbGluZQorICBwYXJhbWV0ZXJzIHdoZXJlIHBhc3NlZCB0byB0aGUgaW50ZXJwcmV0ZXIuICBQYXRjaCBieSBIaWV1IE5ndXllbi4KKworLSBJc3N1ZSAjMTYyMTU6IEZpeCBwb3RlbnRpYWwgZG91YmxlIG1lbW9yeSBmcmVlIGluIHN0ci5yZXBsYWNlKCkuICBQYXRjaAorICBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjI5MDogQSBmbG9hdCByZXR1cm4gdmFsdWUgZnJvbSB0aGUgX19jb21wbGV4X18gc3BlY2lhbCBtZXRob2QgaXMgbm8KKyAgbG9uZ2VyIGFjY2VwdGVkIGluIHRoZSBjb21wbGV4KCkgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzE2NDE2OiBPbiBNYWMgT1MgWCwgb3BlcmF0aW5nIHN5c3RlbSBkYXRhIGFyZSBub3cgYWx3YXlzCisgIGVuY29kZWQvZGVjb2RlZCB0by9mcm9tIFVURi04L3N1cnJvZ2F0ZWVzY2FwZSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nCisgICh3aGljaCBtYXkgYmUgQVNDSUkgaWYgbm8gbG9jYWxlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIHRvIGF2b2lkCisgIGluY29uc2lzdGVuY2llcyB3aXRoIG9zLmZzZW5jb2RlKCkgYW5kIG9zLmZzZGVjb2RlKCkgZnVuY3Rpb25zIHdoaWNoIGFyZQorICBhbHJlYWR5IHVzaW5nIFVURi04L3N1cnJvZ2F0ZWVzY2FwZS4KKworLSBJc3N1ZSAjMTY0NTM6IEZpeCBlcXVhbGl0eSB0ZXN0aW5nIG9mIGRlYWQgd2Vha3JlZiBvYmplY3RzLgorCistIElzc3VlICM5NTM1OiBGaXggcGVuZGluZyBzaWduYWxzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ1dCBub3QgeWV0CisgIGhhbmRsZWQgYnkgUHl0aG9uIHRvIG5vdCBwZXJzaXN0IGFmdGVyIG9zLmZvcmsoKSBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTQ3OTQ6IEZpeCBzbGljZS5pbmRpY2VzIHRvIHJldHVybiBjb3JyZWN0IHJlc3VsdHMgZm9yIGh1Z2UgdmFsdWVzLAorICByYXRoZXIgdGhhbiByYWlzaW5nIE92ZXJmbG93RXJyb3IuCisKKy0gSXNzdWUgIzE1MDAxOiBmaXggc2VnZmF1bHQgb24gImRlbCBzeXMubW9kdWxlc1snX19tYWluX18nXSIuIFBhdGNoIGJ5IFZpY3RvcgorICBTdGlubmVyLgorCistIElzc3VlICM4MjcxOiB0aGUgdXRmLTggZGVjb2RlciBub3cgb3V0cHV0cyB0aGUgY29ycmVjdCBudW1iZXIgb2YgVStGRkZECisgIGNoYXJhY3RlcnMgd2hlbiB1c2VkIHdpdGggdGhlICdyZXBsYWNlJyBlcnJvciBoYW5kbGVyIG9uIGludmFsaWQgdXRmLTgKKyAgc2VxdWVuY2VzLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSwgdGVzdHMgYnkgRXppbyBNZWxvdHRpLgorCistIElzc3VlICM1NzY1OiBBcHBseSBhIGhhcmQgcmVjdXJzaW9uIGxpbWl0IGluIHRoZSBjb21waWxlciBpbnN0ZWFkIG9mCisgIGJsb3dpbmcgdGhlIHN0YWNrIGFuZCBzZWdmYXVsdGluZy4gSW5pdGlhbCBwYXRjaCBieSBBbmRyZWEgR3JpZmZpbmkuCisKKy0gSXNzdWUgIzE2NDAyOiBXaGVuIHNsaWNpbmcgYSByYW5nZSwgZml4IHNoYWRvd2luZyBvZiBleGNlcHRpb25zIGZyb20KKyAgX19pbmRleF9fLgorCistIElzc3VlICMxNjMzNjogZml4IGlucHV0IGNoZWNraW5nIGluIHRoZSBzdXJyb2dhdGVwYXNzIGVycm9yIGhhbmRsZXIuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzg0MDE6IGFzc2lnbmluZyBhbiBpbnQgdG8gYSBieXRlYXJyYXkgc2xpY2UgKGUuZy4gYlszOjRdID0gNSkgbm93CisgIHJhaXNlcyBhbiBlcnJvci4KKworLSBJc3N1ZSAjNzMxNzogRGlzcGxheSBmdWxsIHRyYWNlYmFja3Mgd2hlbiBhbiBlcnJvciBvY2N1cnMgYXN5bmNocm9ub3VzbHkuCisgIFBhdGNoIGJ5IEFsb24gSG9yZXYgd2l0aCB1cGRhdGUgYnkgQWxleGV5IEthY2hheWV2LgorCistIElzc3VlICMxNjMwOTogTWFrZSBQWVRIT05QQVRIPSIiIGJlaGF2aW9yIHRoZSBzYW1lIGFzIGlmIFBZVEhPTlBBVEgKKyAgbm90IHNldCBhdCBhbGwuCisKKy0gSXNzdWUgIzEwMTg5OiBJbXByb3ZlIHRoZSBlcnJvciByZXBvcnRpbmcgb2YgU3ludGF4RXJyb3JzIHJlbGF0ZWQgdG8gZ2xvYmFsCisgIGFuZCBub25sb2NhbCBzdGF0ZW1lbnRzLgorCistIEZpeCBzZWdmYXVsdHMgb24gc2V0dGluZyBfX3F1YWxuYW1lX18gb24gYnVpbHRpbiB0eXBlcyBhbmQgYXR0ZW1wdGluZyB0bworICBkZWxldGUgaXQgb24gYW55IHR5cGUuCisKKy0gSXNzdWUgIzE0NjI1OiBSZXdyaXRlIHRoZSBVVEYtMzIgZGVjb2Rlci4gSXQgaXMgbm93IDN4IHRvIDR4IGZhc3Rlci4gUGF0Y2gKKyAgd3JpdHRlbiBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjM0NTogRml4IGFuIGluZmluaXRlIGxvb3Agd2hlbiBgYGZyb21rZXlzYGAgb24gYSBkaWN0IHN1YmNsYXNzCisgIHJlY2VpdmVkIGEgbm9uZW1wdHkgZGljdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTYyNzE6IEZpeCBzdHJhbmdlIGJ1Z3MgdGhhdCByZXN1bHRlZCBmcm9tIF9fcXVhbG5hbWVfXyBhcHBlYXJpbmcgaW4gYQorICBjbGFzcydzIF9fZGljdF9fIGFuZCBvbiB0eXBlLgorCistIElzc3VlICMxMjgwNTogTWFrZSBieXRlcy5qb2luIGFuZCBieXRlYXJyYXkuam9pbiBmYXN0ZXIgd2hlbiB0aGUgc2VwYXJhdG9yCisgIGlzIGVtcHR5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjNjA3NDogRW5zdXJlIGNhY2hlZCBieXRlY29kZSBmaWxlcyBjYW4gYWx3YXlzIGJlIHVwZGF0ZWQgYnkgdGhlCisgIHVzZXIgdGhhdCBjcmVhdGVkIHRoZW0sIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGUgaXMgcmVhZC1vbmx5LgorCistIElzc3VlICMxNTk1ODogYnl0ZXMuam9pbiBhbmQgYnl0ZWFycmF5LmpvaW4gbm93IGFjY2VwdCBhcmJpdHJhcnkgYnVmZmVyCisgIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0NzgzOiBJbXByb3ZlIGludCgpIGRvY3N0cmluZyBhbmQgc3dpdGNoIGRvY3N0cmluZ3MgZm9yIHN0cigpLAorICByYW5nZSgpLCBhbmQgc2xpY2UoKSB0byB1c2UgbXVsdGktbGluZSBzaWduYXR1cmVzLgorCistIElzc3VlICMxNjE2MDogU3ViY2xhc3Mgc3VwcG9ydCBub3cgd29ya3MgZm9yIHR5cGVzLlNpbXBsZU5hbWVzcGFjZS4KKworLSBVcGdyYWRlIFVuaWNvZGUgZGF0YSAoVUNEKSB0byB2ZXJzaW9uIDYuMi4KKworLSBJc3N1ZSAjMTUzNzk6IEZpeCBwYXNzaW5nIG9mIG5vbi1CTVAgY2hhcmFjdGVycyBhcyBpbnRlZ2VycyBmb3IgdGhlIGNoYXJtYXAKKyAgZGVjb2RlciAoYWxyZWFkeSB3b3JraW5nIGFzIHVuaWNvZGUgc3RyaW5ncykuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE0NDogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBoYW5kbGluZyBwb2ludGVycyBhcyBpbnRlZ2VyCisgIHZhbHVlcywgYnkgdXNpbmcgYFB5X3VpbnRwdHJfdGAgaW5zdGVhZCBvZiBgc2l6ZV90YC4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1OTY1OiBFeHBsaWNpdGx5IGNhc3QgYEFUX0ZEQ1dEYCBhcyAoaW50KS4gIFJlcXVpcmVkIG9uIFNvbGFyaXMgMTAKKyAgKHdoaWNoIGRlZmluZXMgYEFUX0ZEQ1dEYCBhcyBgYDB4ZmZkMTk1NTNgYCksIGhhcm1sZXNzIG9uIG90aGVyIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTU4Mzk6IENvbnZlcnQgU3lzdGVtRXJyb3JzIGluIGBzdXBlcigpYCB0byBSdW50aW1lRXJyb3JzLgorCistIElzc3VlICMxNTQ0ODogQnVmZmVyZWQgSU8gbm93IGZyZWVzIHRoZSBidWZmZXIgd2hlbiBjbG9zZWQsIGluc3RlYWQKKyAgb2Ygd2hlbiBkZWFsbG9jYXRpbmcuCisKKy0gSXNzdWUgIzE1ODQ2OiBGaXggU3lzdGVtRXJyb3Igd2hpY2ggaGFwcGVuZWQgd2hlbiB1c2luZyBgYXN0LnBhcnNlKClgIGluIGFuCisgIGV4Y2VwdGlvbiBoYW5kbGVyIG9uIGNvZGUgd2l0aCBzeW50YXggZXJyb3JzLgorCistIElzc3VlICMxNTg5NzogemlwaW1wb3J0LmMgZG9lc24ndCBjaGVjayByZXR1cm4gdmFsdWUgb2YgZnNlZWsoKS4KKyAgUGF0Y2ggYnkgRmVsaXBlIENydXouCisKKy0gSXNzdWUgIzE1ODAxOiBNYWtlIHN1cmUgbWFwcGluZ3MgcGFzc2VkIHRvICclJyBmb3JtYXR0aW5nIGFyZSBhY3R1YWxseQorICBzdWJzY3JpcHRhYmxlLgorCistIElzc3VlICMxNTExMTogX19pbXBvcnRfXyBzaG91bGQgcHJvcGFnYXRlIEltcG9ydEVycm9yIHdoZW4gcmFpc2VkIGFzIGEKKyAgc2lkZS1lZmZlY3Qgb2YgYSBtb2R1bGUgdHJpZ2dlcmVkIGZyb20gdXNpbmcgZnJvbWxpc3QuCisKKy0gSXNzdWUgIzE1MDIyOiBBZGQgcGlja2xlIGFuZCBjb21wYXJpc29uIHN1cHBvcnQgdG8gdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzEzNDYxOiBGaXggYSBjcmFzaCBpbiB0aGUgVGV4dElPV3JhcHBlci50ZWxsIG1ldGhvZCBvbiA2NC1iaXQKKyAgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaS4KKworLSBJc3N1ZSAjMTg2ODE6IEZpeCBhIE5hbWVFcnJvciBpbiBpbXBvcnRsaWIucmVsb2FkKCkgKG5vdGljZWQgYnkgV2VpemhhbyBMaSkuCisKKy0gSXNzdWUgIzE0MzIzOiBFeHBhbmRlZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUKKyAgUkdCIC0tIFlJUSBjb252ZXJzaW9ucyBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIEZDQyBOVFNDIHZlcnNpb25zLgorCiAtIElzc3VlICMxNzk5ODogRml4IGFuIGludGVybmFsIGVycm9yIGluIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUuCiAKIC0gSXNzdWUgIzE3NTU3OiBGaXggb3MuZ2V0Z3JvdXBzKCkgdG8gd29yayB3aXRoIHRoZSBtb2RpZmllZCBiZWhhdmlvciBvZgogICBnZXRncm91cHMoMikgb24gT1MgWCAxMC44LiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0ZXVzeiBMZW5pay4KIAorLSBJc3N1ZSAjMTg2MDg6IEF2b2lkIGtlZXBpbmcgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbGUgbW9kdWxlCisgIGluc2lkZSB0aGUgX2lvIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg2MTk6IEZpeCBhdGV4aXQgbGVha2luZyBjYWxsYmFja3MgcmVnaXN0ZXJlZCBmcm9tIHN1Yi1pbnRlcnByZXRlcnMsCisgIGFuZCBtYWtlIGl0IEdDLWF3YXJlLgorCistIElzc3VlICMxNTY5OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgdXNlcyBQRVAgMzEyMS1zdHlsZSBtb2R1bGUKKyAgaW5pdGlhbGl6YXRpb24sIHNvIGFzIHRvIHJlY2xhaW0gYWxsb2NhdGVkIHJlc291cmNlcyAoUHl0aG9uIGNhbGxiYWNrcykKKyAgYXQgc2h1dGRvd24uICBPcmlnaW5hbCBwYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE3NjE2OiB3YXZlLm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisKIC0gSXNzdWUgIzE4NTk5OiBGaXggbmFtZSBhdHRyaWJ1dGUgb2YgX3NoYTEuc2hhMSgpIG9iamVjdC4gSXQgbm93IHJldHVybnMKICAgJ1NIQTEnIGluc3RlYWQgb2YgJ1NIQScuCiAKKy0gSXNzdWUgIzEzMjY2OiBBZGRlZCBpbnNwZWN0LnVud3JhcCB0byBlYXNpbHkgdW5yYXZlbCBfX3dyYXBwZWRfXyBjaGFpbnMKKyAgKGluaXRpYWwgcGF0Y2ggYnkgRGFuaWVsIFVyYmFuIGFuZCBBYXJvbiBJbGVzKQorCiAtIElzc3VlICMxODU2MTogU2tpcCBuYW1lIGluIGN0eXBlcycgX2J1aWxkX2NhbGxhcmdzKCkgaWYgbmFtZSBpcyBOVUxMLgogCiAtIElzc3VlICMxODU1OTogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBlcnJvciBpbiBfcGlja2xlIG1vZHVsZQogCi0tIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBhIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgY2FsbCBpbgotICBjdHlwZXMnIFVfc2V0KCkuCistIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB0eXBlIG9mIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgaW4gY3R5cGUncworICBVX3NldCgpLgorCistIElzc3VlICMxNzgxODogYWlmYy5nZXRwYXJhbXMgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlLgogCiAtIElzc3VlICMxODU0OTogRWxpbWluYXRlIGRlYWQgY29kZSBpbiBzb2NrZXRfbnRvaGwoKQogCistIElzc3VlICMxODUzMDogUmVtb3ZlIGFkZGl0aW9uYWwgc3RhdCBjYWxsIGZyb20gcG9zaXhwYXRoLmlzbW91bnQuCisgIFBhdGNoIGJ5IEFsZXggR2F5bm9yLgorCiAtIElzc3VlICMxODUxNDogRml4IHVucmVhY2hhYmxlIFB5X0RFQ1JFRigpIGNhbGwgaW4gUHlDRGF0YV9Gcm9tQmFzZU9iaigpCiAKKy0gSXNzdWUgIzkxNzc6IENhbGxpbmcgcmVhZCgpIG9yIHdyaXRlKCkgbm93IHJhaXNlcyBWYWx1ZUVycm9yLCBub3QKKyAgQXR0cmlidXRlRXJyb3IsIG9uIGEgY2xvc2VkIFNTTCBzb2NrZXQuICBQYXRjaCBieSBTZW5rbyBSYXNpYy4KKwogLSBJc3N1ZSAjMTg1MTM6IEZpeCBiZWhhdmlvdXIgb2YgY21hdGgucmVjdCB3LnIudC4gc2lnbmVkIHplcm9zIG9uIE9TIFggMTAuOCArCiAgIGdjYy4KIAorLSBJc3N1ZSAjMTg0Nzk6IENoYW5nZWQgdmVudiBBY3RpdmF0ZS5wczEgdG8gbWFrZSBkZWFjdGl2YXRlIGEgZnVuY3Rpb24sIGFuZAorICByZW1vdmVkIERlYWN0aXZhdGUucHMxLgorCiAtIElzc3VlICMxODQ4MDogQWRkIG1pc3NpbmcgY2FsbCB0byBQeVR5cGVfUmVhZHkgdG8gdGhlIF9lbGVtZW50dHJlZSBleHRlbnNpb24uCiAKIC0gSXNzdWUgIzE3Nzc4OiBGaXggdGVzdCBkaXNjb3ZlcnkgZm9yIHRlc3RfbXVsdGlwcm9jZXNzaW5nLiAoUGF0Y2ggYnkKICAgWmFjaGFyeSBXYXJlLikKIAorLSBJc3N1ZSAjMTgzOTM6IFRoZSBwcml2YXRlIG1vZHVsZSBfZ2VzdGFsdCBhbmQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAgcGxhdGZvcm0uX21hY192ZXJfZ2VzdGFsdCwgcGxhdGZvcm0uX21hY192ZXJfbG9va3VwIGFuZAorICBwbGF0Zm9ybS5fYmNkMnN0ciBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYworICBpbnRlcmZhY2Ugb2YgdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTc0ODI6IGZ1bmN0b29scy51cGRhdGVfd3JhcHBlciAoYW5kIGZ1bmN0b29scy53cmFwcykgbm93IHNldCB0aGUKKyAgX193cmFwcGVkX18gYXR0cmlidXRlIGNvcnJlY3RseSBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGhhcyBhCisgIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZSBzZXQuCisKIC0gSXNzdWUgIzE4NDMxOiBUaGUgbmV3IGVtYWlsIGhlYWRlciBwYXJzZXIgbm93IGRlY29kZXMgUkZDMjA0NyBlbmNvZGVkIHdvcmRzCiAgIGluIHN0cnVjdHVyZWQgaGVhZGVycy4KIApAQCAtMzU5LDExICsxMjY5LDE4IEBACiAtIElzc3VlICMxODEwMTogVGNsLnNwbGl0KCkgbm93IHByb2Nlc3Mgc3RyaW5ncyBuZXN0ZWQgaW4gYSB0dXBsZSBhcyBpdAogICBkbyB3aXRoIGJ5dGUgc3RyaW5ncy4KIAorLSBJc3N1ZSAjMTgxMTY6IGdldHBhc3Mgd2FzIGFsd2F5cyBnZXR0aW5nIGFuIGVycm9yIHdoZW4gdGVzdGluZyAvZGV2L3R0eSwKKyAgYW5kIHRodXMgd2FzIGFsd2F5cyBmYWxsaW5nIGJhY2sgdG8gc3RkaW4uICBJdCBhbHNvIGxlYWtlZCBhbiBvcGVuIGZpbGUKKyAgd2hlbiBpdCBkaWQgc28uICBCb3RoIG9mIHRoZXNlIGlzc3VlcyBhcmUgbm93IGZpeGVkLgorCiAtIElzc3VlICMxNzE5ODogRml4IGEgTmFtZUVycm9yIGluIHRoZSBkYm0gbW9kdWxlLiAgUGF0Y2ggYnkgVmFsZW50aW5hCiAgIE11a2hhbWVkemhhbm92YS4KIAogLSBJc3N1ZSAjMTgwMTM6IEZpeCBjZ2kuRmllbGRTdG9yYWdlIHRvIHBhcnNlIHRoZSBXM0Mgc2FtcGxlIGZvcm0uCiAKKy0gSXNzdWUgIzE4MDIwOiBpbXByb3ZlIGh0bWwuZXNjYXBlIHNwZWVkIGJ5IGFuIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgUGF0Y2ggYnkgTWF0dCBCcnlhbnQuCisKIC0gSXNzdWUgIzE4MzQ3OiBFbGVtZW50VHJlZSdzIGh0bWwgc2VyaWFsaXplciBub3cgcHJlc2VydmVzIHRoZSBjYXNlIG9mCiAgIGNsb3NpbmcgdGFncy4KIApAQCAtMzc4LDYgKzEyOTUsOSBAQAogLSBJc3N1ZSAjMTgzMzk6IE5lZ2F0aXZlIGludHMga2V5cyBpbiB1bnBpY2tsZXIubWVtbyBkaWN0IG5vIGxvbmdlciBjYXVzZSBhCiAgIHNlZ2ZhdWx0IGluc2lkZSB0aGUgX3BpY2tsZSBDIGV4dGVuc2lvbi4KIAorLSBJc3N1ZSAxODI0MDogVGhlIEhNQUMgbW9kdWxlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGJ5dGVzIGFuZCBhY2NlcHRzCisgIGFueSBieXRlcy1saWtlIG9iamVjdCwgZS5nLiBtZW1vcnl2aWV3LiBPcmlnaW5hbCBwYXRjaCBieSBKb25hcyBCb3Jnc3Ryw7ZtLgorCiAtIElzc3VlICMxODIyNDogUmVtb3ZlZCBweWRvYyBzY3JpcHQgZnJvbSBjcmVhdGVkIHZlbnYsIGFzIGl0IGNhdXNlcyBwcm9ibGVtcwogICBvbiBXaW5kb3dzIGFuZCBhZGRzIG5vIHZhbHVlIG92ZXIgYW5kIGFib3ZlIHB5dGhvbiAtbSBweWRvYyAuLi4KIApAQCAtMzg4LDMxICsxMzA4LDkyIEBACiAtIElzc3VlICMxNDM2MDogZW5jb2RlX3F1b3ByaSBjYW4gbm93IGJlIHN1Y2Nlc3NmdWxseSB1c2VkIGFzIGFuIGVuY29kZXIKICAgd2hlbiBjb25zdHJ1Y3RpbmcgYSBNSU1FQXBwbGljYXRpb24gb2JqZWN0LgogCistIElzc3VlICMxMTM5MDogQWRkIC1vIGFuZCAtZiBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB0aGUgZG9jdGVzdCBDTEkgdG8KKyAgc3BlY2lmeSBkb2N0ZXN0IG9wdGlvbnMgKGFuZCBjb252ZXJ0IGl0IHRvIHVzaW5nIGFyZ3BhcnNlKS4KKwogLSBJc3N1ZSAjMTgxMzU6IHNzbC5TU0xTb2NrZXQud3JpdGUoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaWYgdGhlIGlucHV0CiAgIHN0cmluZyBpbiBsb25nZXIgdGhhbiAyIGdpZ2FieXRlcywgYW5kIHNzbC5TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpCiAgIHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIHBhc3N3b3JkIGlzIGxvbmdlciB0aGFuIDIgZ2lnYWJ5dGVzLiBUaGUgc3NsCiAgIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpYWwgd3JpdGUuCiAKKy0gSXNzdWUgIzExMDE2OiBBZGQgQyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdCBtb2R1bGUgYXMgX3N0YXQuCisKIC0gSXNzdWUgIzE4MjQ4OiBGaXggbGliZmZpIGJ1aWxkIG9uIEFJWC4KIAogLSBJc3N1ZSAjMTgyNTk6IERlY2xhcmUgc2V0aG9zdG5hbWUgaW4gc29ja2V0bW9kdWxlLmMgZm9yIEFJWAogCistIElzc3VlICMxODE0NzogQWRkIGRpYWdub3N0aWMgZnVuY3Rpb25zIHRvIHNzbC5TU0xDb250ZXh0KCkuIGdldF9jYV9saXN0KCkKKyAgbGlzdHMgYWxsIGxvYWRlZCBDQSBjZXJ0aWZpY2F0ZXMgYW5kIGNlcnRfc3RvcmVfc3RhdHMoKSByZXR1cm5zIGFtb3VudCBvZgorICBsb2FkZWQgWC41MDkgY2VydHMsIFguNTA5IENBIGNlcnRzIGFuZCBDUkxzLgorCiAtIElzc3VlICMxODE2NzogY2dpLkZpZWxkU3RvcmFnZSBubyBsb25nZXIgZmFpbHMgdG8gaGFuZGxlIG11bHRpcGFydC9mb3JtLWRhdGEKICAgd2hlbiBcclxuIGFwcGVhcnMgYXQgZW5kIG9mIDY1NTM1IGJ5dGVzIHdpdGhvdXQgb3RoZXIgbmV3bGluZXMuCiAKKy0gSXNzdWUgIzE4MDc2OiBJbnRyb2R1Y2UgaW1wb3J0bGliLnV0aWwuZGVjb2RlX3NvdXJjZSgpLgorLSBJc3N1ZSAjMTgzNTc6IGFkZCB0ZXN0cyBmb3IgZGljdHZpZXcgc2V0IGRpZmZlcmVuY2UuCisgIFBhdGNoIGJ5IEZyYXNlciBUd2VlZGFsZS4KKworLSBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5nZXRfc291cmNlKCkgbm8gbG9uZ2VyIGNoYW5nZXMgU3ludGF4RXJyb3Igb3IKKyAgVW5pY29kZURlY29kZUVycm9yIGludG8gSW1wb3J0RXJyb3IuCisKKy0gSXNzdWUgIzE4MDU4LCAxODA1NzogTWFrZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UgbG9hZGVyIG1lZXQgdGhlCisgIGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlciBBQkMsIGFsbG93aW5nIGZvciBuYW1lc3BhY2UgcGFja2FnZXMgdG8gd29yayB3aXRoCisgIHJ1bnB5LgorCistIElzc3VlICMxNzE3NzogVGhlIGltcCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4KKwogLSBzdWJwcm9jZXNzOiBQcmV2ZW50IGEgcG9zc2libGUgZG91YmxlIGNsb3NlIG9mIHBhcmVudCBwaXBlIGZkcyB3aGVuIHRoZQogICBzdWJwcm9jZXNzIGV4ZWMgcnVucyBpbnRvIGFuIGVycm9yLiAgUHJldmVudCBhIHJlZ3VsYXIgbXVsdGktY2xvc2Ugb2YgdGhlCiAgIC9kZXYvbnVsbCBmZCB3aGVuIGFueSBvZiBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgd2FzIHNldCB0byBERVZOVUxMLgogCistIElzc3VlICMxODE5NDogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kCisgIHNvdXJjZV9mcm9tX2NhY2hlKCkgd2hpbGUgZG9jdW1lbnRpbmcgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb25zIGluIGltcCBhcworICBkZXByZWNhdGVkLgorCistIElzc3VlICMxNzkwNzogRG9jdW1lbnQgaW1wLm5ld19tb2R1bGUoKSBhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZgorICB0eXBlcy5Nb2R1bGVUeXBlLgorCistIElzc3VlICMxODE5MjogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiBhbmQgZG9jdW1lbnQgYXMgZGVwcmVjYXRlZAorICBpbXAuZ2V0X21hZ2ljKCkuCisKKy0gSXNzdWUgIzE4MTQ5OiBBZGQgZmlsZWNtcC5jbGVhcl9jYWNoZSgpIHRvIG1hbnVhbGx5IGNsZWFyIHRoZSBmaWxlY21wIGNhY2hlLgorICBQYXRjaCBieSBNYXJrIExldml0dAorCistIElzc3VlICMxODE5MzogQWRkIGltcG9ydGxpYi5yZWxvYWQoKS4KKworLSBJc3N1ZSAjMTgxNTc6IFN0b3AgdXNpbmcgaW1wLmxvYWRfbW9kdWxlKCkgaW4gcHlkb2MuCisKIC0gSXNzdWUgIzE2MTAyOiBNYWtlIHV1aWQuX25ldGJpb3NfZ2V0bm9kZSgpIHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCiAKKy0gSXNzdWUgIzE3MTM0OiBBZGQgc3NsLmVudW1fY2VydF9zdG9yZSgpIGFzIGludGVyZmFjZSB0byBXaW5kb3dzJyBjZXJ0IHN0b3JlLgorCistIElzc3VlICMxODE0MzogSW1wbGVtZW50IHNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSBpbiBvcmRlciB0byBkZWJ1ZworICB0aGUgZGVmYXVsdCBsb2NhdGlvbnMgZm9yIGNhZmlsZSBhbmQgY2FwYXRoLgorCistIElzc3VlICMxNzMxNDogTW92ZSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBvdmVyIHRvIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTE5NTk6IFNNVFBTZXJ2ZXIgYW5kIFNNVFBDaGFubmVsIG5vdyB0YWtlIGFuIG9wdGlvbmFsIG1hcCwgdXNlIG9mCisgIHdoaWNoIGF2b2lkcyBhZmZlY3RpbmcgZ2xvYmFsIHN0YXRlLgorCiAtIElzc3VlICMxODEwOTogb3MudW5hbWUoKSBub3cgZGVjb2RlcyBmaWVsZHMgZnJvbSB0aGUgbG9jYWxlIGVuY29kaW5nLCBhbmQKICAgc29ja2V0LmdldGhvc3RuYW1lKCkgbm93IGRlY29kZXMgdGhlIGhvc3RuYW1lIGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZywKICAgaW5zdGVhZCBvZiB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcgaW4gc3RyaWN0IG1vZGUuCiAKKy0gSXNzdWUgIzE4MDg5OiBJbXBsZW1lbnQgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlLgorCistIElzc3VlICMxODA4ODogSW50cm9kdWNlIGltcG9ydGxpYi5hYmMuTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzIGZvciBzZXR0aW5nCisgIG1vZHVsZSBhdHRyaWJ1dGVzLiBMZWFkcyB0byB0aGUgcGVuZGluZyBkZXByZWNhdGlvbiBvZgorICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KKwogLSBJc3N1ZSAjMTc0MDM6IHVybGxpYi5wYXJzZS5yb2JvdHBhcnNlciBub3JtYWxpemVzIHRoZSB1cmxzIGJlZm9yZSBhZGRpbmcgdG8KICAgcnVsZWxpbmUuIFRoaXMgaGVscHMgaW4gaGFuZGxpbmcgY2VydGFpbiB0eXBlcyBpbnZhbGlkIHVybHMgaW4gYSBjb25zZXJ2YXRpdmUKLSAgbWFubmVyLgorICBtYW5uZXIuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IE1oZXIgTW92c2lzeWFuLgorCistIElzc3VlICMxODA3MDogSGF2ZSBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcigpIHNldCBhdHRyaWJ1dGVzCisgIHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBwcm9wZXJseSBzdXBwb3J0IHJlbG9hZGluZy4KKworLSBBZGRlZCBpbXBvcnRsaWIudXRpbC5tb2R1bGVfdG9fbG9hZCB0byByZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdG8gcHJvdmlkZSB0aGUKKyAgcHJvcGVyIG1vZHVsZSBvYmplY3QgdG8gbG9hZC4KIAogLSBJc3N1ZSAjMTgwMjU6IEZpeGVkIGEgc2VnZmF1bHQgaW4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGludG8oKSB3aGVuIHJhdwogICBzdHJlYW0ncyByZWFkKCkgcmV0dXJucyBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgpAQCAtNDIxLDMxICsxNDAyLDIwNCBAQAogICBub24tYWxwaGFiZXQgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZSBpbnB1dCBzdHJpbmcgdG8gY29uZm9ybSBhIGRvY3N0cmluZy4KICAgVXBkYXRlZCB0aGUgbW9kdWxlIGRvY3VtZW50YXRpb24uCiAKLS0gSXNzdWUgIzEzNzcyOiBSZXN0b3JlZCBkaXJlY3RvcnkgZGV0ZWN0aW9uIG9mIHRhcmdldHMgaW4gYGBvcy5zeW1saW5rYGAgb24KLSAgV2luZG93cywgd2hpY2ggd2FzIHRlbXBvcmFyaWx5IHJlbW92ZWQgaW4gUHl0aG9uIDMuMi4zIGR1ZSB0byBhbiBpbmNvbXBsZXRlCi0gIGltcGxlbWVudGF0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gbm93IHdvcmtzIGV2ZW4gaWYgdGhlIHN5bWxpbmsgaXMgY3JlYXRlZAotICBpbiBhIGxvY2F0aW9uIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorLSBJc3N1ZSAjMTgwNzI6IEltcGxlbWVudCBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGUoKSBhbmQKKyAgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIuZ2V0X2NvZGUoKS4KKworLSBJc3N1ZSAjODI0MDogU2V0IHRoZSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUiBmbGFnIG9uIFNTTAorICBzb2NrZXRzLgorCistIElzc3VlICMxNzI2OTogV29ya2Fyb3VuZCBmb3Igc29ja2V0LmdldGFkZHJpbmZvIGNyYXNoIG9uIE1hY09TIFgKKyAgd2l0aCBwb3J0IE5vbmUgb3IgIjAiIGFuZCBmbGFncyBBSV9OVU1FUklDU0VSVi4KIAogLSBJc3N1ZSAjMTY5ODY6IEVsZW1lbnRUcmVlIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGEgc3RyaW5nIGlucHV0IG5vdCBvbmx5IHdoZW4KICAgYW4gaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIFVURi04IG9yIFVTLUFTQ0lJLgogCistIElzc3VlICMxNzk5Njogc29ja2V0IG1vZHVsZSBub3cgZXhwb3NlcyBBRl9MSU5LIGNvbnN0YW50IG9uIEJTRCBhbmQgT1NYLgorCistIElzc3VlICMxNzkwMDogQWxsb3dlZCBwaWNrbGluZyBvZiByZWN1cnNpdmUgT3JkZXJlZERpY3RzLiAgRGVjcmVhc2VkIHBpY2tsZWQKKyAgc2l6ZSBhbmQgcGlja2xpbmcgdGltZS4KKworLSBJc3N1ZSAjMTc5MTQ6IEFkZCBvcy5jcHVfY291bnQoKS4gUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaSwgYmFzZWQgb24gYW4KKyAgaW5pdGlhbCBwYXRjaCBieSBUcmVudCBOZWxzb24uCisKIC0gSXNzdWUgIzE3ODEyOiBGaXhlZCBxdWFkcmF0aWMgY29tcGxleGl0eSBvZiBiYXNlNjQuYjMyZW5jb2RlKCkuCisgIE9wdGltaXplIGJhc2U2NC5iMzJlbmNvZGUoKSBhbmQgYmFzZTY0LmIzMmRlY29kZSgpIChzcGVlZCB1cCB0byAzeCkuCiAKIC0gSXNzdWUgIzE3OTgwOiBGaXggcG9zc2libGUgYWJ1c2Ugb2Ygc3NsLm1hdGNoX2hvc3RuYW1lKCkgZm9yIGRlbmlhbCBvZgogICBzZXJ2aWNlIHVzaW5nIGNlcnRpZmljYXRlcyB3aXRoIG1hbnkgd2lsZGNhcmRzIChDVkUtMjAxMy0yMDk5KS4KIAorLSBJc3N1ZSAjMTU3NTg6IEZpeCBGaWxlSU8ucmVhZGFsbCgpIHNvIGl0IG5vIGxvbmdlciBoYXMgTyhuKioyKSBjb21wbGV4aXR5LgorCistIElzc3VlICMxNDU5NjogVGhlIHN0cnVjdC5TdHJ1Y3QoKSBvYmplY3RzIG5vdyB1c2UgbW9yZSBjb21wYWN0IGltcGxlbWVudGF0aW9uLgorCiAtIElzc3VlICMxNzk4MTogQ2xvc2VkIHNvY2tldCBvbiBlcnJvciBpbiBTeXNMb2dIYW5kbGVyLgogCistIElzc3VlICMxNzk2NDogRml4IG9zLnN5c2NvbmYoKTogdGhlIHJldHVybiB0eXBlIG9mIHRoZSBDIHN5c2NvbmYoKSBmdW5jdGlvbgorICBpcyBsb25nLCBub3QgaW50LgorCiAtIEZpeCB0eXBvcyBpbiB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZS4KIAogLSBJc3N1ZSAjMTc3NTQ6IE1ha2UgY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KCkgaW5kZXBlbmRlbnQgb2YgdGhlIGxvY2FsZS4KIAogLSBJc3N1ZSAjMTc5Njg6IEZpeCBtZW1vcnkgbGVhayBpbiBvcy5saXN0eGF0dHIoKS4KIAotLSBJc3N1ZSAjMTcyNjk6IFdvcmthcm91bmQgZm9yIHNvY2tldC5nZXRhZGRyaW5mbyBjcmFzaCBvbiBNYWNPUyBYCi0gIHdpdGggcG9ydCBOb25lIG9yICIwIiBhbmQgZmxhZ3MgQUlfTlVNRVJJQ1NFUlYuCistIElzc3VlICMxNzYwNjogRml4ZWQgc3VwcG9ydCBvZiBlbmNvZGVkIGJ5dGUgc3RyaW5ncyBpbiB0aGUgWE1MR2VuZXJhdG9yCisgIGNoYXJhY3RlcnMoKSBhbmQgaWdub3JhYmxlV2hpdGVzcGFjZSgpIG1ldGhvZHMuICBPcmlnaW5hbCBwYXRjaCBieSBTZWJhc3RpYW4KKyAgT3J0aXogVmFzcXVlei4KIAotLSBJc3N1ZSAjMTg2OTg6IEVuc3VyZSBpbXAucmVsb2FkKCkgcmV0dXJucyB0aGUgbW9kdWxlIG91dCBvZiBzeXMubW9kdWxlcy4KKy0gSXNzdWUgIzE3NzMyOiBJZ25vcmUgZGlzdHV0aWxzLmNmZyBvcHRpb25zIHBlcnRhaW5pbmcgdG8gaW5zdGFsbCBwYXRocyBpZiBhCisgIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlLgorCistIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQorICBjb2RlY3Mub3BlbigpLgorCistIElzc3VlICMxNjYwMTogUmVzdGFydGluZyBpdGVyYXRpb24gb3ZlciB0YXJmaWxlIG5vIG1vcmUgY29udGludWVzIGZyb20gd2hlcmUKKyAgaXQgbGVmdCBvZmYuICBQYXRjaCBieSBNaWNoYWVsIEJpcnR3ZWxsLgorCistIElzc3VlICMxNzI4OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgcGxheXMgbmljZXIgd2l0aCBleHRlcm5hbCBtb2R1bGVzCisgIG9yIGFwcGxpY2F0aW9ucyBjaGFuZ2luZyB0aGUgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyBnbG9iYWwKKyAgdmFyaWFibGUuICBJbml0aWFsIHBhdGNoIGJ5IEJyYWRsZXkgRnJvZWhsZS4KKworLSBJc3N1ZSAjMTIxODE6IHNlbGVjdCBtb2R1bGU6IEZpeCBzdHJ1Y3Qga2V2ZW50IGRlZmluaXRpb24gb24gT3BlbkJTRCA2NC1iaXQKKyAgcGxhdGZvcm1zLiBQYXRjaCBieSBGZWRlcmljbyBTY2h3aW5kdC4KKworLSBJc3N1ZSAjMTE4MTY6IG11bHRpcGxlIGltcHJvdmVtZW50cyB0byB0aGUgZGlzIG1vZHVsZTogZ2V0X2luc3RydWN0aW9ucworICBnZW5lcmF0b3IsIGFiaWxpdHkgdG8gcmVkaXJlY3Qgb3V0cHV0IHRvIGEgZmlsZSwgQnl0ZWNvZGUgYW5kIEluc3RydWN0aW9uCisgIGFic3RyYWN0aW9ucy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLCBSeWFuIEtlbGx5IGFuZCBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTM4MzE6IEVtYmVkIHN0cmluZ2lmaWNhdGlvbiBvZiByZW1vdGUgdHJhY2ViYWNrIGluIGxvY2FsCisgIHRyYWNlYmFjayByYWlzZWQgd2hlbiBwb29sIHRhc2sgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTU1Mjg6IEFkZCB3ZWFrcmVmLmZpbmFsaXplIHRvIHN1cHBvcnQgZmluYWxpemF0aW9uIHVzaW5nCisgIHdlYWtyZWYgY2FsbGJhY2tzLgorCistIElzc3VlICMxNDE3MzogQXZvaWQgY3Jhc2hpbmcgd2hlbiByZWFkaW5nIGEgc2lnbmFsIGhhbmRsZXIgZHVyaW5nCisgIGludGVycHJldGVyIHNodXRkb3duLgorCistIElzc3VlICMxNTkwMjogRml4IGltcC5sb2FkX21vZHVsZSgpIGFjY2VwdGluZyBOb25lIGFzIGEgZmlsZSB3aGVuIGxvYWRpbmcgYW4KKyAgZXh0ZW5zaW9uIG1vZHVsZS4KKworLSBJc3N1ZSAjMTM3MjE6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIGFuZCBTU0xTb2NrZXQuZG9faGFuZHNoYWtlKCkgbm93CisgIHJhaXNlIGFuIE9TRXJyb3Igd2l0aCBFTk9UQ09OTiwgaW5zdGVhZCBvZiBhbiBBdHRyaWJ1dGVFcnJvciwgd2hlbiB0aGUKKyAgU1NMU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQuCisKKy0gSXNzdWUgIzE0Njc5OiBhZGQgYW4gX19hbGxfXyAodGhhdCBjb250YWlucyBvbmx5IEhUTUxQYXJzZXIpIHRvIGh0bWwucGFyc2VyLgorCistIElzc3VlICMxNzgwMjogRml4IGFuIFVuYm91bmRMb2NhbEVycm9yIGluIGh0bWwucGFyc2VyLiAgSW5pdGlhbCB0ZXN0cyBieQorICBUaG9tYXMgQmFybG93LgorCistIElzc3VlICMxNzM1ODogTW9kdWxlcyBsb2FkZWQgYnkgaW1wLmxvYWRfc291cmNlKCkgYW5kIGxvYWRfY29tcGlsZWQoKSAoYW5kIGJ5CisgIGV4dGVudGlvbiBsb2FkX21vZHVsZSgpKSBub3cgaGF2ZSBhIGJldHRlciBjaGFuY2Ugb2Ygd29ya2luZyB3aGVuIHJlbG9hZGVkLgorCistIElzc3VlICMxNzgwNDogTmV3IGZ1bmN0aW9uIGBgc3RydWN0Lml0ZXJfdW5wYWNrYGAgYWxsb3dzIGZvciBzdHJlYW1pbmcKKyAgc3RydWN0IHVucGFja2luZy4KKworLSBJc3N1ZSAjMTc4MzA6IFdoZW4ga2V5d29yZC5weSBpcyB1c2VkIHRvIHVwZGF0ZSBhIGtleXdvcmQgZmlsZSwgaXQgbm93CisgIHByZXNlcnZlcyB0aGUgbGluZSBlbmRpbmdzIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorCistIElzc3VlICMxNzI3MjogTWFraW5nIHRoZSB1cmxsaWIucmVxdWVzdCdzIFJlcXVlc3QuZnVsbF91cmwgYSBkZXNjcmlwdG9yLgorICBGaXhlcyBidWdzIHdpdGggYXNzaWdubWVudCB0byBmdWxsX3VybC4gUGF0Y2ggYnkgRGVtaWFuIEJyZWNodC4KKworLSBJc3N1ZSAjMTczNTM6IFBsaXN0bGliIGVtaXR0ZWQgZW1wdHkgZGF0YSB0YWdzIHdpdGggZGVlcGx5IG5lc3RlZCBkYXRhc3RydWN0dXJlcworCistIElzc3VlICMxMTcxNDogVXNlICd3aXRoJyBzdGF0ZW1lbnRzIHRvIGFzc3VyZSBhIFNlbWFwaG9yZSByZWxlYXNlcyBhCisgIGNvbmRpdGlvbiB2YXJpYWJsZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IFRob21hcyBSYWNoZWwuCisKKy0gSXNzdWUgIzE2NjI0OiBgc3VicHJvY2Vzcy5jaGVja19vdXRwdXRgIG5vdyBhY2NlcHRzIGFuIGBpbnB1dGAgYXJndW1lbnQsCisgIGFsbG93aW5nIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4gdG8gYmUgcHJvdmlkZWQgYXMgYSAoYnl0ZSkgc3RyaW5nLgorICBQYXRjaCBieSBaYWNrIFdlaW5iZXJnLgorCistIElzc3VlICMxNzc5NTogUmV2ZXJ0ZWQgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UgaW4gU3lzTG9nSGFuZGxlciB3aXRoCisgIFVuaXggZG9tYWluIHNvY2tldHMuCisKKy0gSXNzdWUgIzE2Njk0OiBBZGQgYSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgbW9kdWxlLgorICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzExMTgyOiByZW1vdmUgdGhlIHVudXNlZCBhbmQgdW5kb2N1bWVudGVkIHB5ZG9jLlNjYW5uZXIgY2xhc3MuCisgIFBhdGNoIGJ5IE1hcnRpbiBNb3JyaXNvbi4KKworLSBJc3N1ZSAjMTc3NDE6IEFkZCBFbGVtZW50VHJlZS5JbmNyZW1lbnRhbFBhcnNlciwgYW4gZXZlbnQtZHJpdmVuIHBhcnNlcgorICBmb3Igbm9uLWJsb2NraW5nIGFwcGxpY2F0aW9ucy4KKworLSBJc3N1ZSAjMTc1NTU6IEZpeCBGb3JrQXdhcmVUaHJlYWRMb2NrIHNvIHRoYXQgc2l6ZSBvZiBhZnRlciBmb3JrCisgIHJlZ2lzdHJ5IGRvZXMgbm90IGdyb3cgZXhwb25lbnRpYWxseSB3aXRoIGdlbmVyYXRpb24gb2YgcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTc3MDc6IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSdzIGdldCgpIG1ldGhvZCBkb2VzIG5vdCBibG9jayBmb3Igc2hvcnQKKyAgdGltZW91dHMuCisKKy0gSXN1c2UgIzE3NzIwOiBGaXggdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuVW5waWNrbGVyIHRvIGNvcnJlY3RseQorICBwcm9jZXNzIHRoZSBBUFBFTkRTIG9wY29kZSB3aGVuIGl0IGlzIHVzZWQgb24gbm9uLWxpc3Qgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTcwMTI6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBmYWxsYmFja3MgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgaWYgZW1wdHkgcGF0aCBhcmd1bWVudCBpcyBzcGVjaWZpZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNzcxMDogRml4IHBpY2tsZSByYWlzaW5nIGEgU3lzdGVtRXJyb3Igb24gYm9ndXMgaW5wdXQuCisKKy0gSXNzdWUgIzE3MzQxOiBJbmNsdWRlIHRoZSBpbnZhbGlkIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gcmUgYWJvdXQKKyAgaW52YWxpZCBncm91cCBuYW1lcy4KKworLSBJc3N1ZSAjMTc3MDI6IG9zLmVudmlyb24gbm93IHJhaXNlcyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudAorICB2YXJpYWJsZSBuYW1lIChzdHIgb24gVU5JWCksIGluc3RlYWQgb2YgdXNpbmcgdGhlIGVuY29kZWQgbmFtZSAoYnl0ZXMgb24KKyAgVU5JWCkuCisKKy0gSXNzdWUgIzE2MTYzOiBNYWtlIHRoZSBpbXBvcnRsaWIgYmFzZWQgdmVyc2lvbiBvZiBwa2d1dGlsLml0ZXJfaW1wb3J0ZXJzCisgIHdvcmsgZm9yIHN1Ym1vZHVsZXMuIEluaXRpYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTY4MDQ6IEZpeCBhIGJ1ZyBpbiB0aGUgJ3NpdGUnIG1vZHVsZSB0aGF0IGNhdXNlZCBydW5uaW5nCisgICdweXRob24gLVMgLW0gc2l0ZScgdG8gaW5jb3JyZWN0bHkgdGhyb3cgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNTQ4MDogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIGFuZCB1bnVzZWQgVFlQRV9JTlQ2NCBjb2RlIGZyb20gbWFyc2hhbC4KKyAgSW5pdGlhbCBwYXRjaCBieSBEYW5pZWwgUml0aS4KKworLSBJc3N1ZSAjMjExODogU01UUEV4Y2VwdGlvbiBpcyBub3cgYSBzdWJjbGFzcyBvZiBJT0Vycm9yLgorCistIElzc3VlICMxNzAxNjogR2V0IHJpZCBvZiBwb3NzaWJsZSBwb2ludGVyIHdyYXBhcm91bmRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cworICBpbiB0aGUgcmUgbW9kdWxlLiAgUGF0Y2ggYnkgTmlja29sYWkgWmVsZG92aWNoLgorCistIElzc3VlICMxNjY1ODogYWRkIG1pc3NpbmcgcmV0dXJuIHRvIEhUVFBDb25uZWN0aW9uLnNlbmQoKQorICBQYXRjaCBieSBKZWZmIEtudXBwLgorCistIElzc3VlICM5NTU2OiBBbGxvd2VkIHNwZWNpZnlpbmcgYSB0aW1lLW9mLWRheSBmb3IgYSBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIKKyAgdG8gcm90YXRlLgorCistIElzc3VlICMxNDk3MTogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm8gbG9uZ2VyIGdldHMgY29uZnVzZWQgd2hlbiBhIGZ1bmN0aW9uCisgIGhhcyBhIGRpZmZlcmVudCBfX25hbWVfXyB0aGFuIGl0cyBuYW1lIGluIHRoZSBUZXN0Q2FzZSBjbGFzcyBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxNzQ4NzogVGhlIHdhdmUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4KKyAgYSBwbGFpbiB0dXBsZS4KKworLSBJc3N1ZSAjMTc2NzU6IHNvY2tldCByZXByKCkgcHJvdmlkZXMgbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgKGlmIGFueSkuCisgIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnCisKKy0gSXNzdWUgIzE3MDkzOiBNYWtlIHRoZSBBQkNzIGluIGltcG9ydGxpYi5hYmMgcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBvciByYWlzZQorICByZWFzb25hYmxlIGV4Y2VwdGlvbnMgZm9yIHRoZWlyIG1ldGhvZHMgdG8gbWFrZSB0aGVtIG1vcmUgYW1lbmFibGUgdG8gc3VwZXIoKQorICBjYWxscy4KKworLSBJc3N1ZSAjMTc1NjY6IE1ha2UgaW1wb3J0bGliLmFiYy5Mb2FkZXIubW9kdWxlX3JlcHIoKSBvcHRpb25hbCBpbnN0ZWFkIG9mIGFuCisgIGFic3RyYWN0bWV0aG9kIGFuZCByYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igc28gYXMgdG8gYmUgaWdub3JlZCBieSBkZWZhdWx0LgorCistIElzc3VlICMxNzY3ODogUmVtb3ZlIHRoZSB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgaW4gaHR0cC9jb29raWVqYXIucHkuCisgIENoYW5naW5nIHRoZSB1c2FnZSBvZiBnZXRfb3JpZ2luX3JlcV9ob3N0KCkgdG8gb3JpZ2luX3JlcV9ob3N0LgorCistIElzc3VlICMxNzY2NjogRml4IHJlYWRpbmcgZ3ppcCBmaWxlcyB3aXRoIGFuIGV4dHJhIGZpZWxkLgorCistIElzc3VlICMxNjQ3NTogU3VwcG9ydCBvYmplY3QgaW5zdGFuY2luZywgcmVjdXJzaW9uIGFuZCBpbnRlcm5lZCBzdHJpbmdzCisgIGluIG1hcnNoYWwKKworLSBJc3N1ZSAjMTc1MDI6IFByb2Nlc3MgREVGQVVMVCB2YWx1ZXMgaW4gbW9jayBzaWRlX2VmZmVjdCB0aGF0IHJldHVybnMgaXRlcmF0b3IuCisKKy0gSXNzdWUgIzE2Nzk1OiBPbiB0aGUgYXN0LmFyZ3VtZW50cyBvYmplY3QsIHVuaWZ5IHZhcmFyZyB3aXRoIHZhcmFyZ2Fubm90YXRpb24KKyAgYW5kIGt3YXJnIGFuZCBrd2FyZ2Fubm90YXRpb24uIENoYW5nZSB0aGUgY29sdW1uIG9mZnNldCBvZiBhc3QuQXR0cmlidXRlIHRvIGJlCisgIGF0IHRoZSBhdHRyaWJ1dGUgbmFtZS4KKworLSBJc3N1ZSAjMTc0MzQ6IFByb3Blcmx5IHJhaXNlIGEgU3ludGF4RXJyb3Igd2hlbiBhIHN0cmluZyBvY2N1cnMgYmV0d2VlbiBmdXR1cmUKKyAgaW1wb3J0cy4KKworLSBJc3N1ZSAjMTcxMTc6IEltcG9ydCBhbmQgQGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXIgbm93IHNldCBfX2xvYWRlcl9fIHdoZW4KKyAgaXQgaGFzIGEgdmFsdWUgb2YgTm9uZSBvciB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZXhpc3QuCisKKy0gSXNzdWUgIzE3MDMyOiBUaGUgImdsb2JhbCIgaW4gdGhlICJOYW1lRXJyb3I6IGdsb2JhbCBuYW1lICd4JyBpcyBub3QgZGVmaW5lZCIKKyAgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiByZW1vdmVkLiAgUGF0Y2ggYnkgUmFtIFJhY2h1bS4KIAogLSBJc3N1ZSAjMTgwODA6IFdoZW4gYnVpbGRpbmcgYSBDIGV4dGVuc2lvbiBtb2R1bGUgb24gT1MgWCwgaWYgdGhlIGNvbXBpbGVyCiAgIGlzIG92ZXJyaWRlbiB3aXRoIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdXNlIHRoZSBuZXcgY29tcGlsZXIgYXMKQEAgLTQ1NSwzMSArMTYwOSw3MTggQEAKIC0gSXNzdWUgIzE4MTEzOiBGaXhlZCBhIHJlZmNvdW50IGxlYWsgaW4gdGhlIGN1cnNlcy5wYW5lbCBtb2R1bGUncwogICBzZXRfdXNlcnB0cigpIG1ldGhvZC4gIFJlcG9ydGVkIGJ5IEF0c3VvIElzaGltb3RvLgogCi0tIElzc3VlICMxODg0OTogRml4ZWQgYSBXaW5kb3dzLXNwZWNpZmljIHRlbXBmaWxlIGJ1ZyB3aGVyZSBjb2xsaXNpb24gd2l0aCBhbgotICBleGlzdGluZyBkaXJlY3RvcnkgY2F1c2VkIG1rc3RlbXAgYW5kIHJlbGF0ZWQgQVBJcyB0byBmYWlsIGluc3RlYWQgb2YKLSAgcmV0cnlpbmcuIFJlcG9ydCBhbmQgZml4IGJ5IFZsYWQgU2hjaGVyYmluYS4KKy0gSW1wbGVtZW50IFBFUCA0NDMgIlNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyIuCiAKLS0gSXNzdWUgIzE5NDAwOiBQcmV2ZW50IGV4dGVuc2lvbiBtb2R1bGUgYnVpbGQgZmFpbHVyZXMgd2l0aCBYY29kZSA1IG9uIE9TIFgKLSAgMTAuOCsgd2hlbiB1c2luZyBhIHVuaXZlcnNhbCBQeXRob24gdGhhdCBpbmNsdWRlZCBhIFBQQyBhcmNoaXRlY3R1cmUsCi0gIHN1Y2ggYXMgd2l0aCBhIHB5dGhvbi5vcmcgMzItYml0LW9ubHkgYmluYXJ5IGluc3RhbGxlci4KKy0gSW1wbGVtZW50IFBFUCA0MzUgIkFkZGluZyBhbiBFbnVtIHR5cGUgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5Ii4KIAotQyBBUEkKLS0tLS0tCistIElzc3VlICMxNTU5NjogRmFzdGVyIHBpY2tsaW5nIG9mIHVuaWNvZGUgc3RyaW5ncy4KIAotLSBJc3N1ZSAjMTgzNTE6IEZpeCB2YXJpb3VzIGlzc3VlcyB3aXRoIGEgaGVscGVyIGZ1bmN0aW9uIGluIGltcG9ydGxpYiB1c2VkCi0gIGJ5IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIChhbmQgdGh1cyBieSBleHRlbnNpb24KLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoKSBhbmQgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgpKS4KKy0gSXNzdWUgIzE3NTcyOiBBdm9pZCBjaGFpbmVkIGV4Y2VwdGlvbnMgd2hpbGUgcGFzc2luZyBiYWQgZGlyZWN0aXZlcyB0bworICB0aW1lLnN0cnB0aW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTc0MzU6IHRocmVhZGluZy5UaW1lcidzIF9faW5pdF9fIG1ldGhvZCBubyBsb25nZXIgdXNlcyBtdXRhYmxlCisgIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgYXJncyBhbmQga3dhcmdzIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzE3NTI2OiBmaXggYW4gSW5kZXhFcnJvciByYWlzZWQgd2hpbGUgcGFzc2luZyBjb2RlIHdpdGhvdXQgZmlsZW5hbWUgdG8KKyAgaW5zcGVjdC5maW5kc291cmNlKCkuICBJbml0aWFsIHBhdGNoIGJ5IFR5bGVyIERveWxlLgorCistIElzc3VlICMxNzU0MDogQWRkZWQgc3R5bGUgdG8gZm9ybWF0dGVyIGNvbmZpZ3VyYXRpb24gYnkgZGljdC4KKworLSBJc3N1ZSAjMTY2OTI6IFRoZSBzc2wgbW9kdWxlIG5vdyBzdXBwb3J0cyBUTFMgMS4xIGFuZCBUTFMgMS4yLiAgSW5pdGlhbAorICBwYXRjaCBieSBNaWNoZWxlIE9ycsO5LgorCistIElzc3VlICMxNzAyNTogbXVsdGlwcm9jZXNzaW5nOiBSZWR1Y2UgUXVldWUgYW5kIFNpbXBsZVF1ZXVlIGNvbnRlbnRpb24uCisKKy0gSXNzdWUgIzE3NTM2OiBBZGQgdG8gd2ViYnJvd3NlcidzIGJyb3dzZXIgbGlzdDogd3d3LWJyb3dzZXIsIHgtd3d3LWJyb3dzZXIsCisgIGljZXdlYXNlbCwgaWNlYXBlLgorCistIElzc3VlICMxNzE1MDogcHByaW50IG5vdyB1c2VzIGxpbmUgY29udGludWF0aW9ucyB0byB3cmFwIGxvbmcgc3RyaW5nCisgIGxpdGVyYWxzLgorCistIElzc3VlICMxNzQ4ODogQ2hhbmdlIHRoZSBzdWJwcm9jZXNzLlBvcGVuIGJ1ZnNpemUgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWUKKyAgZnJvbSB1bmJ1ZmZlcmVkICgwKSB0byBidWZmZXJpbmcgKC0xKSB0byBtYXRjaCB0aGUgYmVoYXZpb3IgZXhpc3RpbmcgY29kZQorICBleHBlY3RzIGFuZCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluIFB5dGhvbiAyIHRvIGF2b2lkCisgIGludHJvZHVjaW5nIGhhcmQgdG8gdHJhY2sgZG93biBidWdzLgorCistIElzc3VlICMxNzUyMTogQ29ycmVjdGVkIG5vbi1lbmFibGluZyBvZiBsb2dnZXIgZm9sbG93aW5nIHR3byBjYWxscyB0bworICBmaWxlQ29uZmlnKCkuCisKKy0gSXNzdWUgIzE3NTA4OiBDb3JyZWN0ZWQgTWVtb3J5SGFuZGxlciBjb25maWd1cmF0aW9uIGluIGRpY3RDb25maWcoKSB3aGVyZQorICB0aGUgdGFyZ2V0IGhhbmRsZXIgd2Fzbid0IGNvbmZpZ3VyZWQgZmlyc3QuCisKKy0gSXNzdWUgIzE3MjA5OiBjdXJzZXMud2luZG93LmdldF93Y2goKSBub3cgaGFuZGxlcyBjb3JyZWN0bHkgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgKENUUkwrYykuCisKKy0gSXNzdWUgIzU3MTM6IHNtdHBsaWIgbm93IGhhbmRsZXMgNDIxIChjbG9zaW5nIGNvbm5lY3Rpb24pIGVycm9yIGNvZGVzIHdoZW4KKyAgc2VuZGluZyBtYWlsIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBhbmQgcmVwb3J0aW5nIHRoZSA0MjEgZXJyb3IgY29kZSB2aWEgdGhlCisgIGV4Y2VwdGlvbiBhcHByb3ByaWF0ZSB0byB0aGUgY29tbWFuZCB0aGF0IHJlY2VpdmVkIHRoZSBlcnJvciByZXNwb25zZS4KKworLSBJc3N1ZSAjMTY5OTc6IHVuaXR0ZXN0LlRlc3RDYXNlIG5vdyBwcm92aWRlcyBhIHN1YlRlc3QoKSBjb250ZXh0IG1hbmFnZXIKKyAgdG8gcHJvY2VkdXJhbGx5IGdlbmVyYXRlLCBpbiBhbiBlYXN5IHdheSwgc21hbGwgdGVzdCBpbnN0YW5jZXMuCisKKy0gSXNzdWUgIzE3NDg1OiBBbHNvIGRlbGV0ZSB0aGUgUmVxdWVzdCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgdGhlIGRhdGEKKyAgYXR0cmlidXRlIGlzIGRlbGV0ZWQuICAoRm9sbG93IG9uIHRvIGlzc3VlIDE2NDY0KS4KKworLSBJc3N1ZSAjMTU5Mjc6IENWUyBub3cgY29ycmVjdGx5IHBhcnNlcyBlc2NhcGVkIG5ld2xpbmVzIGFuZCBjYXJyaWFnZQorICB3aGVuIHBhcnNpbmcgd2l0aCBxdW90aW5nIHR1cm5lZCBvZmYuCisKKy0gSXNzdWUgIzE3NDY3OiBhZGQgcmVhZGxpbmUgYW5kIHJlYWRsaW5lcyBzdXBwb3J0IHRvIG1vY2tfb3BlbiBpbgorICB1bml0dGVzdC5tb2NrLgorCistIElzc3VlICMxNzE5MjogVXBkYXRlIHRoZSBjdHlwZXMgbW9kdWxlJ3MgbGliZmZpIHRvIHYzLjAuMTMuICBUaGlzCisgIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBzdGFjayBtaXNhbGlnbm1lbnQgaXNzdWUgb24geDg2IGFuZCBpc3N1ZXMgb24KKyAgc29tZSBtb3JlIHJlY2VudCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzg4NjI6IEZpeGVkIGN1cnNlcyBjbGVhbnVwIHdoZW4gZ2V0a2V5IGlzIGludGVycnB1dGVkIGJ5IGEgc2lnbmFsLgorCistIElzc3VlICMxNzQ0MzogaW1hcGxpYi5JTUFQNF9zdHJlYW0gd2FzIHVzaW5nIHRoZSBkZWZhdWx0IHVuYnVmZmVyZWQgSU8KKyAgaW4gc3VicHJvY2VzcywgYnV0IHRoZSBpbWFwIGNvZGUgYXNzdW1lcyBidWZmZXJlZCBJTy4gIEluIFB5dGhvbjIgdGhpcworICB3b3JrZWQgYnkgYWNjaWRlbnQuICBJTUFQNF9zdHJlYW0gbm93IGV4cGxpY2l0bHkgdXNlcyBidWZmZXJlZCBJTy4KKworLSBJc3N1ZSAjMTc0NzY6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB1bmRvY3VtZW50ZWQgcHlkb2MKKyAgJ2FsbG1ldGhvZHMnOyBpdCB3YXMgbWlzc2luZyB1bmJvdW5kIG1ldGhvZHMgb24gdGhlIGNsYXNzLgorCistIElzc3VlICMxNzQ3NDogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZHMgb2YgUmVxdWVzdCBjbGFzcy4KKworLSBJc3N1ZSAjMTY3MDk6IHVuaXR0ZXN0IGRpc2NvdmVyIG9yZGVyIGlzIG5vLWxvbmdlciBmaWxlc3lzdGVtIHNwZWNpZmljLiBQYXRjaAorICBieSBKZWZmIFJhbW5hbmkuCisKKy0gVXNlIHRoZSBIVFRQUyBQeVBJIHVybCBmb3IgdXBsb2FkLCBvdmVycmlkaW5nIGFueSBwbGFpbiBIVFRQIFVSTCBpbiBweXBpcmMuCisKKy0gSXNzdWUgIzUwMjQ6IHNuZGhkci53aGljaGhkciBub3cgcmV0dXJucyB0aGUgZnJhbWUgY291bnQgZm9yIFdBViBmaWxlcworICByYXRoZXIgdGhhbiAtMS4KKworLSBJc3N1ZSAjMTc0NjA6IFJlbW92ZSB0aGUgc3RyaWN0IGFyZ3VtZW50IG9mIEhUVFBDb25uZWN0aW9uIGFuZCByZW1vdmluZyB0aGUKKyAgRGVwcmVjYXRpb25XYXJuaW5nIGJlaW5nIGlzc3VlZCBmcm9tIDMuMiBvbndhcmRzLgorCistIElzc3VlICMxNjg4MDogRG8gbm90IGFzc3VtZSBfaW1wLmxvYWRfZHluYW1pYygpIGlzIGRlZmluZWQgaW4gdGhlIGltcCBtb2R1bGUuCisKKy0gSXNzdWUgIzE2Mzg5OiBGaXhlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uIDMuMSBpbiB0aGUKKyAgY2FjaGluZyBvZiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLgorCistIEFkZGVkIG1pc3NpbmcgRmVlZFBhcnNlciBhbmQgQnl0ZXNGZWVkUGFyc2VyIHRvIGVtYWlsLnBhcnNlci5fX2FsbF9fLgorCistIElzc3VlICMxNzQzMTogRml4IG1pc3NpbmcgaW1wb3J0IG9mIEJ5dGVzRmVlZFBhcnNlciBpbiBlbWFpbC5wYXJzZXIuCisKKy0gSXNzdWUgIzEyOTIxOiBodHRwLnNlcnZlcidzIHNlbmRfZXJyb3IgdGFrZXMgYW4gZXhwbGFpbiBhcmd1bWVudCB0byBzZW5kIG1vcmUKKyAgaW5mb3JtYXRpb24gaW4gcmVzcG9uc2UuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEthcmwuCisKKy0gSXNzdWUgIzE3NDE0OiBBZGQgdGltZWl0LCByZXBlYXQsIGFuZCBkZWZhdWx0X3RpbWVyIHRvIHRpbWVpdC5fX2FsbF9fLgorCistIElzc3VlICMxMjg1MDg2OiBHZXQgcmlkIG9mIHRoZSByZWZjb3VudGluZyBoYWNrIGFuZCBzcGVlZCB1cAorICB1cmxsaWIucGFyc2UudW5xdW90ZSgpIGFuZCB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcygpLgorCistIElzc3VlICMxNzA5OTogSGF2ZSBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSByYWlzZSBWYWx1ZUVycm9yIHdoZW4gX19sb2FkZXJfXworICBpcyBub3Qgc2V0LCBoYXJtb25pemluZyB3aXRoIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgc2V0IHRvIE5vbmUuCisKKy0gRXhwb3NlIHRoZSBPX1BBVEggY29uc3RhbnQgaW4gdGhlIG9zIG1vZHVsZSBpZiBpdCBpcyBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE3MzY4OiBGaXggYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiB0aGUgUHl0aG9uIEpTT04gZGVjb2RlciB0aGF0IGNhdXNlZAorICBhIGZhaWx1cmUgd2hpbGUgZGVjb2RpbmcgZW1wdHkgb2JqZWN0IGxpdGVyYWxzIHdoZW4gb2JqZWN0X3BhaXJzX2hvb2sgd2FzCisgIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTczODU6IEZpeCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gdGhyZWFkaW5nLkNvbmRpdGlvbi4gIFRoZSBGSUZPCisgIHF1ZXVlIG5vdyB1c2VzIGEgZGVxdWUgaW5zdGVhZCBvZiBhIGxpc3QuCisKKy0gSXNzdWUgIzE1ODA2OiBBZGQgY29udGV4dGxpYi5pZ25vcmUoKS4gIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWFuYWdlciB0bworICBpZ25vcmUgc3BlY2lmaWVkIGV4Y2VwdGlvbnMsIHJlcGxhY2luZyB0aGUgImV4Y2VwdCBTb21lRXhjZXB0aW9uOiBwYXNzIiBpZGlvbS4KKworLSBJc3N1ZSAjMTQ2NDU6IFRoZSBlbWFpbCBnZW5lcmF0b3IgY2xhc3NlcyBub3cgcHJvZHVjZSBvdXRwdXQgdXNpbmcgdGhlCisgIHNwZWNpZmllZCBsaW5lc2VwIHRocm91Z2hvdXQuICBQcmV2aW91c2x5IGlmIHRoZSBwcm9sb2csIGVwaWxvZywgb3IKKyAgYm9keSB3ZXJlIHN0b3JlZCB3aXRoIGEgZGlmZmVyZW50IGxpbmVzZXAsIHRoYXQgbGluZXNlcCB3YXMgdXNlZC4gIFRoaXMKKyAgZml4IGNvcnJlY3RzIGFuIFJGQyBub24tY29tcGxpYW5jZSBpc3N1ZSB3aXRoIHNtdHBsaWIuc2VuZF9tZXNzYWdlLgorCistIElzc3VlICMxNzI3ODogRml4IGEgY3Jhc2ggaW4gaGVhcHEuaGVhcHB1c2goKSBhbmQgaGVhcHEuaGVhcHBvcCgpIHdoZW4KKyAgdGhlIGxpc3QgaXMgYmVpbmcgcmVzaXplZCBjb25jdXJyZW50bHkuCisKKy0gSXNzdWUgIzE2OTYyOiBVc2UgZ2V0ZGVudHM2NCBpbnN0ZWFkIG9mIHRoZSBvYnNvbGV0ZSBnZXRkZW50cyBzeXNjYWxsCisgIGluIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBvbiBMaW51eC4KKworLSBJc3N1ZSAjMTY5MzU6IHVuaXR0ZXN0IG5vdyBjb3VudHMgdGhlIG1vZHVsZSBhcyBza2lwcGVkIGlmIGl0IHJhaXNlcyBTa2lwVGVzdCwKKyAgaW5zdGVhZCBvZiBjb3VudGluZyBpdCBhcyBhbiBlcnJvci4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKworLSBJc3N1ZSAjMTcwMTg6IE1ha2UgUHJvY2Vzcy5qb2luKCkgcmV0cnkgaWYgb3Mud2FpdHBpZCgpIGZhaWxzIHdpdGggRUlOVFIuCisKKy0gSXNzdWUgIzE3MjIzOiBhcnJheSBtb2R1bGU6IEZpeCBhIGNyYXNoZXIgd2hlbiBjb252ZXJ0aW5nIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgaW52YWxpZCBjaGFyYWN0ZXJzIChvdXRzaWRlIHJhbmdlIFtVKzAwMDA7IFUrMTBmZmZmXSkgdG8gVW5pY29kZToKKyAgcmVwcihhcnJheSksIHN0cihhcnJheSkgYW5kIGFycmF5LnRvdW5pY29kZSgpLiBQYXRjaCB3cml0dGVuIGJ5IE1hbnVlbCBKYWNvYi4KKworLSBJc3N1ZSAjMTcxOTc6IHByb2ZpbGUvY1Byb2ZpbGUgbW9kdWxlcyByZWZhY3RvcmVkIHNvIHRoYXQgY29kZSBvZiBydW4oKSBhbmQKKyAgcnVuY3R4KCkgdXRpbGl0eSBmdW5jdGlvbnMgaXMgbm90IGR1cGxpY2F0ZWQgaW4gYm90aCBtb2R1bGVzLgorCistIElzc3VlICMxNDcyMDogc3FsaXRlMzogQ29udmVydCBkYXRldGltZSBtaWNyb3NlY29uZHMgY29ycmVjdGx5LgorICBQYXRjaCBieSBMb3dlIFRoaWRlcm1hbi4KKworLSBJc3N1ZSAjMTUxMzI6IEFsbG93IGEgbGlzdCBmb3IgdGhlIGRlZmF1bHRUZXN0IGFyZ3VtZW50IG9mCisgIHVuaXR0ZXN0LlRlc3RQcm9ncmFtLiBQYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxNzIyNTogSlNPTiBkZWNvZGVyIG5vdyBjb3VudHMgY29sdW1ucyBpbiB0aGUgZmlyc3QgbGluZSBzdGFydGluZworICB3aXRoIDEsIGFzIGluIG90aGVyIGxpbmVzLgorCistIElzc3VlICM2NjIzOiBBZGRlZCBleHBsaWNpdCBEZXByZWNhdGlvbldhcm5pbmcgZm9yIGZ0cGxpYi5uZXRyYywgd2hpY2ggaGFzCisgIGJlZW4gZGVwcmVjYXRlZCBhbmQgdW5kb2N1bWVudGVkIGZvciBhIGxvbmcgdGltZS4KKworLSBJc3N1ZSAjMTM3MDA6IEZpeCBieXRlL3N0cmluZyBoYW5kbGluZyBpbiBpbWFwbGliIGF1dGhlbnRpY2F0aW9uIHdoZW4gYW4KKyAgYXV0aG9iamVjdCBpcyBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzEzMTUzOiBUa2ludGVyIGZ1bmN0aW9ucyBub3cgcmFpc2UgVGNsRXJyb3IgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIHdoZW4KKyAgYSBzdHJpbmcgYXJndW1lbnQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIuCisKKy0gSXNzdWUgIzk2Njk6IFByb3RlY3QgcmUgYWdhaW5zdCBpbmZpbml0ZSBsb29wcyBvbiB6ZXJvLXdpZHRoIG1hdGNoaW5nIGluCisgIG5vbi1ncmVlZHkgcmVwZWF0LiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxMzE2OTogVGhlIG1heGltYWwgcmVwZXRpdGlvbiBudW1iZXIgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGJlZW4KKyAgaW5jcmVhc2VkIGZyb20gNjU1MzQgdG8gMjE0NzQ4MzY0NyAob24gMzItYml0IHBsYXRmb3JtKSBvciA0Mjk0OTY3Mjk0IChvbgorICA2NC1iaXQpLgorCistIElzc3VlICMxNzE0MzogRml4IGEgbWlzc2luZyBpbXBvcnQgaW4gdGhlIHRyYWNlIG1vZHVsZS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTUyMjA6IGVtYWlsLmZlZWRwYXJzZXIncyBsaW5lIHNwbGl0dGluZyBhbGdvcml0aG0gaXMgbm93IHNpbXBsZXIgYW5kCisgIGZhc3Rlci4KKworLSBJc3N1ZSAjMTY3NDM6IEZpeCBtbWFwIG92ZXJmbG93IGNoZWNrIG9uIDMyIGJpdCBXaW5kb3dzLgorCistIElzc3VlICMxNjk5Njogd2ViYnJvd3NlciBtb2R1bGUgbm93IHVzZXMgc2h1dGlsLndoaWNoKCkgdG8gZmluZCBhCisgIHdlYi1icm93c2VyIG9uIHRoZSBleGVjdXRhYmxlIHNlYXJjaCBwYXRoLgorCistIElzc3VlICMxNjgwMDogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIG5vIGxvbmdlciBsZWZ0IHRlbXBvcmFyeSBmaWxlcyB3aGVuCisgIHRoZSBkaXNrIGlzIGZ1bGwuICBPcmlnaW5hbCBwYXRjaCBieSBBbWlyIFN6ZWtlbHkuCisKKy0gSXNzdWUgIzE3MTkyOiBJbXBvcnQgbGliZmZpLTMuMC4xMi4KKworLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCisgIGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0IHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgorCistIElzc3VlICMxNzA1MjogdW5pdHRlc3QgZGlzY292ZXJ5IHNob3VsZCB1c2Ugc2VsZi50ZXN0TG9hZGVyLgorCistIElzc3VlICM0NTkxOiBVaWQgYW5kIGdpZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMioqMzEgYXJlIHN1cHBvcnRlZCBub3cuCisKKy0gSXNzdWUgIzE3MTQxOiByYW5kb20udm9ubWlzZXN2YXJpYXRlKCkgbm8gbW9yZSBoYW5ncyBmb3IgbGFyZ2Uga2FwcGFzLgorCistIElzc3VlICMxNzE0OTogRml4IHJhbmRvbS52b25taXNlc3ZhcmlhdGUgdG8gYWx3YXlzIHJldHVybiByZXN1bHRzIGluCisgIFswLCAyKm1hdGgucGldLgorCistIElzc3VlICMxNDcwNTQ4OiBYTUxHZW5lcmF0b3Igbm93IHdvcmtzIHdpdGggYmluYXJ5IG91dHB1dCBzdHJlYW1zLgorCistIElzc3VlICM2OTc1OiBvcy5wYXRoLnJlYWxwYXRoKCkgbm93IGNvcnJlY3RseSByZXNvbHZlcyBtdWx0aXBsZSBuZXN0ZWQKKyAgc3ltbGlua3Mgb24gUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMzc3Mzogc3FsaXRlMy5jb25uZWN0KCkgZ2V0cyBhIG5ldyBgdXJpYCBwYXJhbWV0ZXIgdG8gcGFzcyB0aGUKKyAgZmlsZW5hbWUgYXMgYSBVUkksIGFsbG93aW5nIHRvIHBhc3MgY3VzdG9tIG9wdGlvbnMuCisKKy0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgorICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfbm9vcCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KKworLSBJc3N1ZSAjMTAzNTU6IEluIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNsYXNzIG1vZGUsIG5hbWUsIGVuY29kaW5nIGFuZAorICBuZXdsaW5lcyBwcm9wZXJ0aWVzIG5vdyB3b3JrIGZvciB1bnJvbGxlZCBmaWxlcy4gIE9ic29sZXRlZCBhbmQgbmV2ZXIKKyAgd29ya2luZyBvbiBQeXRob24gMyB4cmVhZGxpbmUgbWV0aG9kIG5vdyByZW1vdmVkLgorCistIElzc3VlICMxNjY4NjogRml4ZWQgYSBsb3Qgb2YgYnVncyBpbiBhdWRpb29wIG1vZHVsZS4gIEZpeGVkIGNyYXNoZXMgaW4KKyAgYXZncHAoKSwgbWF4cHAoKSBhbmQgcmF0ZWN2KCkuICBGaXhlZCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGFkZCgpLCBiaWFzKCksCisgIGFuZCByYXRlY3YoKS4gIHJldmVyc2UoKSwgbGluMmxpbigpIGFuZCByYXRlY3YoKSBubyBtb3JlIGxvc2UgcHJlY2lzaW9uIGZvcgorICAzMi1iaXQgc2FtcGxlcy4gIG1heCgpIGFuZCBybXMoKSBubyBtb3JlIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQgYW5kCisgIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25zIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIDMyLWJpdCBzYW1wbGUgLTB4ODAwMDAwMDAuCisKKy0gSXNzdWUgIzE3MDczOiBGaXggc29tZSBpbnRlZ2VyIG92ZXJmbG93cyBpbiBzcWxpdGUzIG1vZHVsZS4KKworLSBJc3N1ZSAjMTY3MjM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIG5vIGxvbmdlciBtYXJrZWQgY2xvc2VkIHdoZW4gdGhlIGNvbm5lY3Rpb24KKyAgaXMgYXV0b21hdGljYWxseSBjbG9zZWQuCisKKy0gSXNzdWUgIzE1MzU5OiBBZGQgQ0FOX0JDTSBwcm90b2NvbCBzdXBwb3J0IHRvIHRoZSBzb2NrZXQgbW9kdWxlLiBQYXRjaCBieQorICBCcmlhbiBUaG9ybmUuCisKKy0gSXNzdWUgIzE2OTQ4OiBGaXggcXVvdGVkIHByaW50YWJsZSBib2R5IGVuY29kaW5nIGZvciBub24tbGF0aW4xIGNoYXJhY3RlcgorICBzZXRzIGluIHRoZSBlbWFpbCBwYWNrYWdlLgorCistIElzc3VlICMxNjgxMTogRml4IGZvbGRpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlIGluIHRoZSBwcm92aXNpb25hbCBlbWFpbAorICBwb2xpY2llcy4KKworLSBJc3N1ZSAjMTcxMzI6IFVwZGF0ZSBzeW1ib2wgZm9yICJ5aWVsZCBmcm9tIiBncmFtbWFyIGNoYW5nZXMuCisKKy0gSXNzdWUgIzE3MDc2OiBNYWtlIGNvcHlpbmcgb2YgeGF0dHJzIG1vcmUgcGVybWlzc2l2ZSBvZiBtaXNzaW5nIEZTIHN1cHBvcnQuCisgIFBhdGNoIGJ5IFRob21hcyBXb3V0ZXJzLgorCistIElzc3VlICMxNzA4OTogRXhwYXQgcGFyc2VyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgbm90IG9ubHkgd2hlbgorICBhbiBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgVVRGLTggb3IgVVMtQVNDSUkuICBJdCBub3cgYWNjZXB0cyBieXRlcyBhbmQKKyAgc3RyaW5ncyBsYXJnZXIgdGhhbiAyIEdpQi4KKworLSBJc3N1ZSAjNjA4MzogRml4IG11bHRpcGxlIHNlZ21lbnRhdGlvbiBmYXVsdHMgb2NjdXJlZCB3aGVuIFB5QXJnX1BhcnNlVHVwbGUKKyAgcGFyc2VzIG5lc3RlZCBtdXRhdGluZyBzZXF1ZW5jZS4KKworLSBJc3N1ZSAjNTI4OTogRml4IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSBvbiBTb2xhcmlzLgorCistIElzc3VlICMxNzEwNjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGluIGlvLlRleHRJT1dyYXBwZXIgd2hlbiBhbiB1bmRlcmx5aW5nCisgIHN0cmVhbSBvciBhIGRlY29kZXIgcHJvZHVjZXMgZGF0YSBvZiBhbiB1bmV4cGVjdGVkIHR5cGUgKGkuZS4gd2hlbgorICBpby5UZXh0SU9XcmFwcGVyIGluaXRpYWxpemVkIHdpdGggdGV4dCBzdHJlYW0gb3IgdXNlIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjKS4KKworLSBJc3N1ZSAjMTcwMTU6IFdoZW4gaXQgaGFzIGEgc3BlYywgYSBNb2NrIG9iamVjdCBub3cgaW5zcGVjdHMgaXRzIHNpZ25hdHVyZQorICB3aGVuIG1hdGNoaW5nIGNhbGxzLCBzbyB0aGF0IGFyZ3VtZW50cyBjYW4gYmUgbWF0Y2hlZCBwb3NpdGlvbmFsbHkgb3IKKyAgYnkgbmFtZS4KKworLSBJc3N1ZSAjMTU2MzM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIGlzIG5vdyBtYXJrIGNsb3NlZCB3aGVuIHRoZSBzZXJ2ZXIKKyAgc2VuZHMgbGVzcyB0aGFuIHRoZSBhZHZlcnRpc2VkIENvbnRlbnQtTGVuZ3RoLgorCistIElzc3VlICMxMjI2ODogVGhlIGlvIG1vZHVsZSBmaWxlIG9iamVjdCB3cml0ZSBtZXRob2RzIG5vIGxvbmdlciBhYm9ydCBlYXJseQorICB3aGVuIG9uZSBvZiBpdHMgd3JpdGUgc3lzdGVtIGNhbGxzIGlzIGludGVycnVwdGVkIChFSU5UUikuCisKKy0gSXNzdWUgIzY5NzI6IFRoZSB6aXBmaWxlIG1vZHVsZSBubyBsb25nZXIgb3ZlcndyaXRlcyBmaWxlcyBvdXRzaWRlIG9mCisgIGl0cyBkZXN0aW5hdGlvbiBwYXRoIHdoZW4gZXh0cmFjdGluZyBtYWxpY2lvdXMgemlwIGZpbGVzLgorCistIElzc3VlICM0ODQ0OiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwRmlsZSB3aGVuIG9wZW5zIGEgWklQIGZpbGUgd2l0aCBhbgorICBpbmNvbXBsZXRlICJFbmQgb2YgQ2VudHJhbCBEaXJlY3RvcnkiIHJlY29yZC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEd1aWxoZXJtZQorICBQb2xvIGFuZCBBbGFuIE1jSW50eXJlLgorCistIElzc3VlICMxNzA3MTogU2lnbmF0dXJlLmJpbmQoKSBub3cgd29ya3Mgd2hlbiBvbmUgb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzCisgIGlzIG5hbWVkIGBgc2VsZmBgLgorCistIElzc3VlICMxMjAwNDogRml4IGFuIGludGVybmFsIGVycm9yIGluIFB5WmlwRmlsZSB3aGVuIHdyaXRpbmcgYW4gaW52YWxpZAorICBQeXRob24gZmlsZS4gIFBhdGNoIGJ5IEJlbiBNb3JnYW4uCisKKy0gSGF2ZSBweV9jb21waWxlIHVzZSBpbXBvcnRsaWIgYXMgbXVjaCBhcyBwb3NzaWJsZSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLgorICBDb2RlIG5vdyByYWlzZXMgRmlsZUV4aXN0c0Vycm9yIGlmIHRoZSBmaWxlIHBhdGggdG8gYmUgdXNlZCBmb3IgdGhlCisgIGJ5dGUtY29tcGlsZWQgZmlsZSBpcyBhIHN5bWxpbmsgb3Igbm9uLXJlZ3VsYXIgZmlsZSBhcyBhIHdhcm5pbmcgdGhhdCBpbXBvcnQKKyAgd2lsbCBub3Qga2VlcCB0aGUgZmlsZSBwYXRoIHR5cGUgaWYgaXQgd3JpdGVzIHRvIHRoYXQgcGF0aC4KKworLSBJc3N1ZSAjMTgwMDIyOiBIYXZlIHNpdGUuYWRkcGFja2FnZSgpIGNvbnNpZGVyIGFscmVhZHkga25vd24gcGF0aHMgZXZlbiB3aGVuCisgIG5vbmUgYXJlIGV4cGxpY2l0bHkgcGFzc2VkIGluLiBCdWcgcmVwb3J0IGFuZCBmaXggYnkgS2lyaWxsLgorCistIElzc3VlICMxNjAyMTMzOiBvbiBNYWMgT1MgWCBhIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIChgYC0tZW5hYmxlLXNoYXJlZGBgKQorICBub3cgZmlsbHMgdGhlIGBgb3MuZW52aXJvbmBgIHZhcmlhYmxlIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTU1MDU6IGB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcmAgbm8gbG9uZ2VyIGFzc3VtZXMgU0lHSU5UIGhhbmRsZXIgaXMKKyAgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LgorCistIElzc3VlICMxMzQ1NDogRml4IGEgY3Jhc2ggd2hlbiBkZWxldGluZyBhbiBpdGVyYXRvciBjcmVhdGVkIGJ5IGl0ZXJ0b29scy50ZWUoKQorICBpZiBhbGwgb3RoZXIgaXRlcmF0b3JzIHdlcmUgdmVyeSBhZHZhbmNlZCBiZWZvcmUuCisKKy0gSXNzdWUgIzEyNDExOiBGaXggdG8gY2dpLnBhcnNlX211bHRpcGFydCB0byBjb3JyZWN0bHkgdXNlIGJ5dGVzIGJvdW5kYXJpZXMKKyAgYW5kIGJ5dGVzIGRhdGEuIFBhdGNoIGJ5IEpvbmFzIFdhZ25lci4KKworLSBJc3N1ZSAjMTY5NTc6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBzZWFyY2hlcyBhIGJhcmUgZmlsZSBuYW1lIGluIHRoZQorICBjdXJyZW50IGRpcmVjdG9yeSBvbiBVbml4IGFuZCBubyBsb25nZXIgc2VhcmNoZXMgYSByZWxhdGl2ZSBmaWxlIHBhdGggd2l0aAorICBhIGRpcmVjdG9yeSBwYXJ0IGluIFBBVEggZGlyZWN0b3JpZXMuICBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTE1OTA1MTogR3ppcEZpbGUgbm93IHJhaXNlcyBFT0ZFcnJvciB3aGVuIHJlYWRpbmcgYSBjb3JydXB0ZWQgZmlsZQorICB3aXRoIHRydW5jYXRlZCBoZWFkZXIgb3IgZm9vdGVyLgorCistIElzc3VlICMxNjk5Mzogc2h1dGlsLndoaWNoKCkgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZiB0aGUgcGF0aCBhbmQgZXh0ZW5zaW9uCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2OTkyOiBPbiBXaW5kb3dzIGluIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCB2YWxpZGF0ZSB0aGUgZmlsZQorICBkZXNjcmlwdG9yIGFyZ3VtZW50LgorCistIElzc3VlICMxNjQyMjogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgUHl0aG9uIHZlcnNpb24sIHRoZSBDIHZlcnNpb24gb2YKKyAgZGVjaW1hbCBub3cgdXNlcyBzdHJpbmdzIGluc3RlYWQgb2YgaW50ZWdlcnMgZm9yIHJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLgorCistIElzc3VlICMxNTg2MTogdGtpbnRlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggbGlzdHMgYW5kIHR1cGxlcyBjb250YWluaW5nCisgIHN0cmluZ3Mgd2l0aCB3aGl0ZXNwYWNlcywgYmFja3NsYXNoZXMgb3IgdW5iYWxhbmNlZCBicmFjZXMuCisKKy0gSXNzdWUgIzk3MjA6IHppcGZpbGUgbm93IHdyaXRlcyBjb3JyZWN0IGxvY2FsIGhlYWRlcnMgZm9yIGZpbGVzIGxhcmdlciB0aGFuCisgIDQgR2lCLgorCistIElzc3VlICMxNjk1NTogRml4IHRoZSBwb2xsKCkgbWV0aG9kIGZvciBtdWx0aXByb2Nlc3NpbmcncyBzb2NrZXQKKyAgY29ubmVjdGlvbnMgb24gV2luZG93cy4KKworLSBTU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zKCkgbm93IHByb3Blcmx5IGNsb3NlcyB0aGUgaW5wdXQgZmlsZS4KKworLSBJc3N1ZSAjMTUwMzE6IFJlZmFjdG9yIHNvbWUgLnB5YyBtYW5hZ2VtZW50IGNvZGUgdG8gY3V0IGRvd24gb24gY29kZQorICBkdXBsaWNhdGlvbi4gVGhhbmtzIHRvIFJvbmFuIExhbXkgZm9yIHRoZSByZXBvcnQgYW5kIHRha2luZyBhbiBpbml0aWFsIHN0YWIKKyAgYXQgdGhlIHByb2JsZW0uCisKKy0gSXNzdWUgIzE2Mzk4OiBPcHRpbWl6ZSBkZXF1ZS5yb3RhdGUoKSBzbyB0aGF0IGl0IG9ubHkgbW92ZXMgcG9pbnRlcnMKKyAgYW5kIGRvZXNuJ3QgdG91Y2ggdGhlIHVuZGVybHlpbmcgZGF0YSB3aXRoIGluY3JlZnMgYW5kIGRlY3JlZnMuCisKKy0gSXNzdWUgIzE2OTAwOiBJc3N1ZSBhIFJlc291cmNlV2FybmluZyB3aGVuIGFuIHNzbCBzb2NrZXQgaXMgbGVmdCB1bmNsb3NlZC4KKworLSBJc3N1ZSAjMTM4OTk6IFxBLCBcWiwgYW5kIFxCIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIEEsIFosIGFuZCBCIGxpdGVyYWxzCisgIHdoZW4gdXNlZCBpbnNpZGUgY2hhcmFjdGVyIGNsYXNzZXMgKGUuZy4gJ1tcQV0nKS4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTU1NDU6IEZpeCByZWdyZXNzaW9uIGluIHNxbGl0ZTMncyBpdGVyZHVtcCBtZXRob2Qgd2hlcmUgaXQgd2FzCisgIGZhaWxpbmcgaWYgdGhlIGNvbm5lY3Rpb24gdXNlZCBhIHJvdyBmYWN0b3J5IChzdWNoIGFzIHNxbGl0ZTMuUm93KSB0aGF0CisgIHByb2R1Y2VkIHVuc29ydGFibGUgb2JqZWN0cy4gKFJlZ3Jlc3Npb24gd2FzIGludHJvZHVjZWQgYnkgZml4IGZvciA5NzUwKS4KKworLSBmY250bDogYWRkIEZfRFVQRkRfQ0xPRVhFQyBjb25zdGFudCwgYXZhaWxhYmxlIG9uIExpbnV4IDIuNi4yNCsuCisKKy0gSXNzdWUgIzE1OTcyOiBGaXggZXJyb3IgbWVzc2FnZXMgd2hlbiBvcyBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgZmlsZSBuYW1lIG9yCisgIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIHRoZSBpbmNvcnJlY3QgdHlwZS4KKworLSBJc3N1ZSAjODEwOTogVGhlIHNzbCBtb2R1bGUgbm93IGhhcyBzdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBTTkksIHRoYW5rcworICB0byBhIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYCBtZXRob2QuICBQYXRjaCBieSBEYW5pZWwKKyAgQmxhY2suCisKKy0gSXNzdWUgIzE2ODYwOiBJbiB0ZW1wZmlsZSwgdXNlIE9fQ0xPRVhFQyB3aGVuIGF2YWlsYWJsZSB0byBzZXQgdGhlCisgIGNsb3NlLW9uLWV4ZWMgZmxhZyBhdG9taWNhbGx5LgorCistIElzc3VlICMxNjY3NDogcmFuZG9tLmdldHJhbmRiaXRzKCkgaXMgbm93IDIwLTQwJSBmYXN0ZXIgZm9yIHNtYWxsIGludGVnZXJzLgorCistIElzc3VlICMxNjAwOTogSlNPTiBlcnJvciBtZXNzYWdlcyBub3cgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uLgorCistIElzc3VlICMxNjgyODogRml4IGVycm9yIGluY29ycmVjdGx5IHJhaXNlZCBieSBiejIuY29tcHJlc3MoYicnKSBhbmQKKyAgYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3MoYicnKS4gSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gUGFja21hbi4KKworLSBJc3N1ZSAjMTY4MzM6IEluIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLCBkbyBub3QgY29uY2F0ZW5hdGUgdGhlIHJlcXVlc3QKKyAgaGVhZGVycyBhbmQgYm9keSB3aGVuIHRoZSBwYXlsb2FkIGV4Y2VlZHMgMTYgS0IsIHNpbmNlIGl0IGNhbiBjb25zdW1lIG1vcmUKKyAgbWVtb3J5IGZvciBubyBiZW5lZml0LiAgUGF0Y2ggYnkgQmVubm8gTGVzbGllLgorCistIElzc3VlICMxNjU0MTogdGtfc2V0UGFsZXR0ZSgpIG5vdyB3b3JrcyB3aXRoIGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgcGFyc2VyLnBvcGl0ZW0oKWAgbm8gbG9uZ2VyIHJhaXNlcyBWYWx1ZUVycm9yLgorICBUaGlzIG1ha2VzIGBwYXJzZXIuY2xlYW4oKWAgd29yayBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydzZWN0aW9uJ10gPSB7fWBgIG5vdyBwcmVzZXJ2ZXMKKyAgc2VjdGlvbiBvcmRlciB3aXRoaW4gdGhlIHBhcnNlci4gVGhpcyBtYWtlcyBgcGFyc2VyLnVwZGF0ZSgpYCBwcmVzZXJ2ZSBzZWN0aW9uCisgIG9yZGVyIGFzIHdlbGwuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydERUZBVUxUJ10gPSB7fWBgIG5vdyBjb3JyZWN0bHkKKyAgY2xlYXJzIHByZXZpb3VzIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbi4gU2FtZSBnb2VzIGZvcgorICBgYHBhcnNlci51cGRhdGUoeydERUZBVUxUJzoge319KWBgLgorCistIElzc3VlICM5NTg2OiBSZWRlZmluZSBTRU1fRkFJTEVEIG9uIE1hY09TWCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5LgorCistIElzc3VlICMxNjc4NzogSW5jcmVhc2UgYXN5bmNvcmUgYW5kIGFzeW5jaGF0IGRlZmF1bHQgb3V0cHV0IGJ1ZmZlcnMgc2l6ZSwgdG8KKyAgZGVjcmVhc2UgQ1BVIHVzYWdlIGFuZCBpbmNyZWFzZSB0aHJvdWdocHV0LgorCistIElzc3VlICMxMDUyNzogbWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGlmIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTY2ODg6IE5vdyByZWdleGVzIGNvbnRhaW5lZCBiYWNrcmVmZXJlbmNlcyBjb3JyZWN0bHkgd29yayB3aXRoCisgIG5vbi1BU0NJSSBzdHJpbmdzLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxNjQ4NjogTWFrZSBhaWZjIGZpbGVzIGFjdCBhcyBjb250ZXh0IG1hbmFnZXJzLgorCistIElzc3VlICMxNjQ4NTogTm93IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpZiBmaWxlIGhlYWRlciBwYXRjaGluZyBmYWlsZWQKKyAgb24gY2xvc2luZyBhbiBhaWZjIGZpbGUuCisKKy0gSXNzdWUgIzE2NjQwOiBSdW4gbGVzcyBjb2RlIHVuZGVyIGEgbG9jayBpbiBzY2hlZCBtb2R1bGUuCisKKy0gSXNzdWUgIzE2MTY1OiBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbm8gbG9uZ2VyIGJsb2NrcyBhIHNjaGVkdWxlciBmb3Igb3RoZXIKKyAgdGhyZWFkcy4KKworLSBJc3N1ZSAjMTY2NDE6IERlZmF1bHQgdmFsdWVzIG9mIHNjaGVkLnNjaGVkdWxlci5lbnRlcigpIGFyZSBubyBsb25nZXIKKyAgbW9kaWZpYWJsZS4KKworLSBJc3N1ZSAjMTY2MTg6IE1ha2UgZ2xvYi5nbG9iIG1hdGNoIGNvbnNpc3RlbnRseSBhY3Jvc3Mgc3RyaW5ncyBhbmQgYnl0ZXMKKyAgcmVnYXJkaW5nIGxlYWRpbmcgZG90cy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Nzg4OiBBZGQgc2FtZXN0YXQgdG8gTGliL250cGF0aC5weQorCistIElzc3VlICMxNjcxMzogUGFyc2luZyBvZiAndGVsJyB1cmxzIHVzaW5nIHVybHBhcnNlIHNlcGFyYXRlcyBwYXJhbXMgZnJvbQorICBwYXRoLgorCistIElzc3VlICMxNjQ0MzogQWRkIGRvY3N0cmluZ3MgdG8gcmVndWxhciBleHByZXNzaW9uIG1hdGNoIG9iamVjdHMuCisgIFBhdGNoIGJ5IEFudG9uIEthc3lhbm92LgorCistIElzc3VlICMxNTcwMTogRml4IEhUVFBFcnJvciBpbmZvIG1ldGhvZCBjYWxsIHRvIHJldHVybiB0aGUgaGVhZGVycyBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMTY3NTI6IEFkZCBhIG1pc3NpbmcgaW1wb3J0IHRvIG1vZHVsZWZpbmRlci4gUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTY2NDY6IGZ0cGxpYi5GVFAubWFrZXBvcnQoKSBtaWdodCBsb3NlIHNvY2tldCBlcnJvciBkZXRhaWxzLgorICAocGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSkKKworLSBJc3N1ZSAjMTY2MjY6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4gZ2xvYi5nbG9iKCkgb24gV2luZG93cyB3aGVuIHRoZQorICBwYXR0ZXJuIGNvbnRhaW5zIGEgd2lsZGNhcmQgaW4gdGhlIGRyaXZlIG9yIFVOQyBwYXRoLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU3ODM6IEV4Y2VwdCBmb3IgdGhlIG51bWJlciBtZXRob2RzLCB0aGUgQyB2ZXJzaW9uIG9mIGRlY2ltYWwgbm93CisgIHN1cHBvcnRzIGFsbCBOb25lIGRlZmF1bHQgdmFsdWVzIHByZXNlbnQgaW4gZGVjaW1hbC5weS4gVGhlc2UgdmFsdWVzIHdlcmUKKyAgbGFyZ2VseSB1bmRvY3VtZW50ZWQuCisKKy0gSXNzdWUgIzExMTc1OiBhcmdwYXJzZS5GaWxlVHlwZSBub3cgYWNjZXB0cyBlbmNvZGluZyBhbmQgZXJyb3JzCisgIGFyZ3VtZW50cy4gUGF0Y2ggYnkgTHVjYXMgTWF5c3RyZS4KKworLSBJc3N1ZSAjMTY0ODg6IGVwb2xsKCkgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgYHdpdGhgIHN0YXRlbWVudC4gIFBhdGNoCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Mjk4OiBJbiBIVFRQUmVzcG9uc2UucmVhZCgpLCBjbG9zZSB0aGUgc29ja2V0IHdoZW4gdGhlcmUgaXMgbm8KKyAgQ29udGVudC1MZW5ndGggYW5kIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgZmluaXNoZWQuICBQYXRjaCBieSBFcmFuCisgIFJ1bmRzdGVpbi4KKworLSBBZGQgYWJjLkFCQyBjbGFzcyB0byB1c2UgaW5oZXJpdGFuY2UgcmF0aGVyIHRoYW4gYSBkaXJlY3QgaW52b2NhdGlvbiBvZgorICBBQkNNZXRhIG1ldGFjbGFzcy4gUGF0Y2ggYnkgQnJ1bm8gRHVwdWlzLgorCistIEV4cG9zZSB0aGUgVENQX0ZBU1RPUEVOIGFuZCBNU0dfRkFTVE9QRU4gZmxhZ3MgaW4gc29ja2V0IHdoZW4gdGhleSdyZQorICBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE1NzAxOiBBZGQgYSAuaGVhZGVycyBhdHRyaWJ1dGUgdG8gdXJsbGliLmVycm9yLkhUVFBFcnJvci4gUGF0Y2gKKyAgY29udHJpYnV0ZWQgYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTU4NzI6IEZpeCAzLjMgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgZmQtYmFzZWQgc2h1dGlsLnJtdHJlZQorICB0aGF0IGNhdXNlZCBpdCB0byBub3QgaWdub3JlIGNlcnRhaW4gZXJyb3JzIHdoZW4gaWdub3JlX2Vycm9ycyB3YXMgc2V0LgorICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhIGFuZCBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjI0ODogRGlzYWJsZSBjb2RlIGV4ZWN1dGlvbiBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYnkKKyAgdGtpbnRlciB3aGVuIHRoZSAtRSBmbGFnIGlzIHBhc3NlZCB0byBQeXRob24uICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzEzMzkwOiBOZXcgZnVuY3Rpb24gOmZ1bmM6YHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKWAgcmV0dXJucyB0aGUKKyAgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgY3VycmVudGx5IGFsbG9jYXRlZC4KKworLSBJc3N1ZSAjMTY2Mjg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIGN0eXBlcy5yZXNpemUoKS4KKworLSBJc3N1ZSAjMTM2MTQ6IEZpeCBzZXR1cC5weSByZWdpc3RlciBmYWlsdXJlIHdpdGggaW52YWxpZCByc3QgaW4gZGVzY3JpcHRpb24uCisgIFBhdGNoIGJ5IEp1bGllbiBDb3VydGVhdSBhbmQgUGllcnJlIFBhdWwgTGVmZWJ2cmUuCisKKy0gSXNzdWUgIzEzNTEyOiBDcmVhdGUgfi8ucHlwaXJjIHNlY3VyZWx5IChDVkUtMjAxMS00OTQ0KS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgUGhpbGlwIEplbnZleSwgdGVzdGVkIGJ5IE1hZ2VpYSBhbmQgRGViaWFuLgorCistIElzc3VlICM3NzE5OiBNYWtlIGRpc3R1dGlscyBpZ25vcmUgYGAubmZzKmBgIGZpbGVzIGluc3RlYWQgb2YgY2hva2luZyBsYXRlcgorICBvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2lsZW50R2hvc3QgYW5kIEplZmYgUmFtbmFuaS4KKworLSBJc3N1ZSAjMTMxMjA6IEFsbG93IHRvIGNhbGwgcGRiLnNldF90cmFjZSgpIGZyb20gdGhyZWFkLgorICBQYXRjaCBieSBJbHlhIFNhbmRsZXIuCisKKy0gSXNzdWUgIzE2NTg1OiBNYWtlIENKSyBlbmNvZGVycyBzdXBwb3J0IGVycm9yIGhhbmRsZXJzIHRoYXQgcmV0dXJuIGJ5dGVzIHBlcgorICBQRVAgMzgzLgorCistIElzc3VlICMxMDE4MjogVGhlIHJlIG1vZHVsZSBkb2Vzbid0IHRydW5jYXRlIGluZGljZXMgdG8gMzIgYml0cyBhbnltb3JlLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjMzMzogdXNlICgiLCIsICI6ICIpIGFzIGRlZmF1bHQgc2VwYXJhdG9yIHdoZW4gaW5kZW50IGlzIHNwZWNpZmllZAorICB0byBhdm9pZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY1NzM6IEluIDJ0bzMsIHRyZWF0IGVudW1lcmF0ZSgpIGxpa2UgYSBjb25zdW1pbmcgY2FsbCwgc28gc3VwZXJmbHVvdXMKKyAgbGlzdCgpIGNhbGxzIGFyZW4ndCBhZGRlZCB0byBmaWx0ZXIoKSwgbWFwKCksIGFuZCB6aXAoKSB3aGljaCBhcmUgZGlyZWN0bHkKKyAgcGFzc2VkIGVudW1lcmF0ZSgpLgorCistIElzc3VlICMxMjg0ODogVGhlIHB1cmUgUHl0aG9uIHBpY2tsZSBpbXBsZW1lbnRhdGlvbiBub3cgdHJlYXRzIG9iamVjdAorICBsZW5ndGhzIGFzIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VycywgbGlrZSB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkb2VzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjQyMzogdXJsbGliLnJlcXVlc3Qgbm93IGhhcyBzdXBwb3J0IGZvciBgYGRhdGE6YGAgVVJMcy4gIFBhdGNoIGJ5CisgIE1hdGhpYXMgUGFuemVuYsO2Y2suCisKKy0gSXNzdWUgIzQ0NzM6IEFkZCBhIFBPUDMuc3RscygpIHRvIHN3aXRjaCBhIGNsZWFyLXRleHQgUE9QMyBzZXNzaW9uIGludG8KKyAgYW4gZW5jcnlwdGVkIFBPUDMgc2Vzc2lvbiwgb24gc3VwcG9ydGVkIHNlcnZlcnMuICBQYXRjaCBieSBMb3JlbnpvIENhdHVjY2kuCisKKy0gSXNzdWUgIzQ0NzM6IEFkZCBhIFBPUDMuY2FwYSgpIG1ldGhvZCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQKKyAgYnkgdGhlIFBPUDMgc2VydmVyLiAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICM0NDczOiBFbnN1cmUgdGhlIHNvY2tldCBpcyBzaHV0ZG93biBjbGVhbmx5IGluIFBPUDMuY2xvc2UoKS4KKyAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICMxNjUyMjogYWRkZWQgRkFJTF9GQVNUIGZsYWcgdG8gZG9jdGVzdC4KKworLSBJc3N1ZSAjMTU2Mjc6IEFkZCB0aGUgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLnNvdXJjZV90b19jb2RlKCkgbWV0aG9kLgorCistIElzc3VlICMxNjQwODogRml4IGZpbGUgZGVzY3JpcHRvcnMgbm90IGJlaW5nIGNsb3NlZCBpbiBlcnJvciBjb25kaXRpb25zCisgIGluIHRoZSB6aXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0NjMxOiBBZGQgYSBuZXcgOmNsYXNzOmB3ZWFrcmVmLldlYWtNZXRob2RgIHRvIHNpbXVsYXRlIHdlYWsKKyAgcmVmZXJlbmNlcyB0byBib3VuZCBtZXRob2RzLgorCistIElzc3VlICMxNjQ2OTogRml4IGV4Y2VwdGlvbnMgZnJvbSBmbG9hdCAtPiBGcmFjdGlvbiBhbmQgRGVjaW1hbCAtPiBGcmFjdGlvbgorICBjb252ZXJzaW9ucyBmb3Igc3BlY2lhbCB2YWx1ZXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRob3NlIGZvciBmbG9hdCAtPiBpbnQKKyAgYW5kIERlY2ltYWwgLT4gaW50LiAgUGF0Y2ggYnkgQWxleGV5IEthY2hheWV2LgorCistIElzc3VlICMxNjQ4MTogbXVsdGlwcm9jZXNzaW5nIG5vIGxvbmdlciBsZWFrcyBwcm9jZXNzIGhhbmRsZXMgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTI0Mjg6IEFkZCBhIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0b29scy5wYXJ0aWFsKCkuCisgIFBhdGNoIGJ5IEJyaWFuIFRob3JuZS4KKworLSBJc3N1ZSAjMTYxNDA6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgZG91YmxlIGNsb3NlcyBpdHMgY2hpbGQKKyAgc3VicHJvY2Vzcy5QSVBFIHBhcmVudCBmaWxlIGRlc2NyaXB0b3JzIG9uIGNoaWxkIGVycm9yIHByaW9yIHRvIGV4ZWMoKS4KKworLSBSZW1vdmUgYSBiYXJlIHByaW50IHRvIHN0ZG91dCBmcm9tIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSB0aGF0IGNvdWxkIGhhdmUKKyAgaGFwcGVuZWQgaWYgdGhlIGNoaWxkIHByb2Nlc3Mgd3JvdGUgZ2FyYmFnZSB0byBpdHMgcHJlLWV4ZWMgZXJyb3IgcGlwZS4KKworLSBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm93IHJhaXNlcyBpdHMgb3duIFN1YnByb2Nlc3NFcnJvciBpbnN0ZWFkIG9mIGEKKyAgUnVudGltZUVycm9yIGluIHZhcmlvdXMgZXJyb3Igc2l0dWF0aW9ucyB3aGljaCBzaG91bGQgbm90IG5vcm1hbGx5IGhhcHBlbi4KKworLSBJc3N1ZSAjMTYzMjc6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgbGVha3MgZmlsZSBkZXNjcmlwdG9ycworICB1c2VkIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGVzIHRvIHRoZSBjaGlsZCB3aGVuIGZvcmsoKSBmYWlscy4KKworLSBJc3N1ZSAjMTQzOTY6IEhhbmRsZSB0aGUgb2RkIHJhcmUgY2FzZSBvZiB3YWl0cGlkIHJldHVybmluZyAwIHdoZW4gbm90CisgIGV4cGVjdGVkIGluIHN1YnByb2Nlc3MuUG9wZW4ud2FpdCgpLgorCistIElzc3VlICMxNjQxMTogRml4IGEgYnVnIHdoZXJlIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbWlnaHQgdHJ5IHRvIGFjY2VzcworICBwcmV2aW91c2x5LWZyZWVkIG1lbW9yeS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNTc6IGZpeCBjYWxsaW5nIGFjY2VwdCgpIG9uIGEgU1NMU29ja2V0IGNyZWF0ZWQgdGhyb3VnaAorICBTU0xDb250ZXh0LndyYXBfc29ja2V0KCkuICBPcmlnaW5hbCBwYXRjaCBieSBKZWZmIE1jTmVpbC4KKworLSBJc3N1ZSAjMTY0MDk6IFRoZSByZXBvcnRob29rIGNhbGxiYWNrIG1hZGUgYnkgdGhlIGxlZ2FjeQorICB1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZSBBUEkgbm93IHByb3Blcmx5IHN1cHBsaWVzIGEgY29uc3RhbnQgbm9uLXplcm8KKyAgYmxvY2tfc2l6ZSBhcyBpdCBkaWQgaW4gUHl0aG9uIDMuMiBhbmQgMi43LiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZgorICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIucmV0cmlldmUuCisKKy0gSXNzdWUgIzE2NDMxOiBVc2UgdGhlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYSBEZWNpbWFsIHN1YnR5cGUKKyAgZnJvbSBhIERlY2ltYWwgYXJndW1lbnQuCisKKy0gSXNzdWUgIzE1NjQxOiBDbGVhbiB1cCBkZXByZWNhdGVkIGNsYXNzZXMgZnJvbSBpbXBvcnRsaWIKKyAgUGF0Y2ggYnkgVGFyYXMgTHlhcHVuLgorCistIElzc3VlICMxNjM1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBhY2N1bXVsYXRlcyBkYXRhIGZyb20KKyAgc3VjY2Vzc2l2ZSBjYWxscyBhZnRlciBFT0YgaW4gdW51c2VkX2RhdGEsIGluc3RlYWQgb2Ygb25seSBzYXZpbmcgdGhlIGFyZ3VtZW50CisgIHRvIHRoZSBsYXN0IGNhbGwuIGRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG5vdyBjb3JyZWN0bHkgc2V0cyB1bnVzZWRfZGF0YSBhbmQKKyAgdW5jb25zdW1lZF90YWlsLiBBIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgTWVtb3J5RXJyb3Igd2hlbiBzZXR0aW5nIHRoZQorICB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlIGhhcyBhbHNvIGJlZW4gZml4ZWQuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyNzU5OiBzcmVfcGFyc2Ugbm93IHJhaXNlcyBhIHByb3BlciBlcnJvciB3aGVuIHRoZSBuYW1lIG9mIHRoZSBncm91cAorICBpcyBtaXNzaW5nLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjE1MjogZml4IHRva2VuaXplIHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGNvZGUgd2hlbgorICBubyBuZXdsaW5lIGlzIGZvdW5kLiAgUGF0Y2ggYnkgTmVkIEJhdGNoZWxkZXIuCisKKy0gSXNzdWUgIzE2Mjg0OiBQcmV2ZW50IGtlZXBpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlcyB0byB3b3JrZXIgZnVuY3Rpb25zCisgIGluIGNvbmN1cnJlbnQuZnV0dXJlcyBUaHJlYWRQb29sRXhlY3V0b3IuCisKKy0gSXNzdWUgIzE2MjMwOiBGaXggYSBjcmFzaCBpbiBzZWxlY3Quc2VsZWN0KCkgd2hlbiBvbmUgdGhlIGxpc3RzIGNoYW5nZXMKKyAgc2l6ZSB3aGlsZSBpdGVyYXRlZCBvbi4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjI4OiBGaXggYSBjcmFzaCBpbiB0aGUganNvbiBtb2R1bGUgd2hlcmUgYSBsaXN0IGNoYW5nZXMgc2l6ZQorICB3aGlsZSBpdCBpcyBiZWluZyBlbmNvZGVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNTE6IE5ldyBmdW5jdGlvbiBnYy5nZXRfc3RhdHMoKSByZXR1cm5zIHBlci1nZW5lcmF0aW9uIGNvbGxlY3Rpb24KKyAgc3RhdGlzdGljcy4KKworLSBJc3N1ZSAjMTQ4OTc6IEVuaGFuY2UgZXJyb3IgbWVzc2FnZXMgb2Ygc3RydWN0LnBhY2sgYW5kCisgIHN0cnVjdC5wYWNrX2ludG8uIFBhdGNoIGJ5IE1hdHRpIE3DpGtpLgorCistIElzc3VlICMxNjMxNjogbWltZXR5cGVzIG5vdyByZWNvZ25pemVzIHRoZSAueHogYW5kIC50eHogKC50YXIueHopIGV4dGVuc2lvbnMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyODkwOiBjZ2l0YiBubyBsb25nZXIgcHJpbnRzIHNwdXJpb3VzIDxwPiB0YWdzIGluIHRleHQKKyAgbW9kZSB3aGVuIHRoZSBsb2dkaXIgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTYzMDc6IEZpeCBtdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXBfYXN5bmMgbm90IGNhbGxpbmcgaXRzIGNhbGxiYWNrcy4KKyAgUGF0Y2ggYnkgSmFubmUgS2FyaWxhLgorCistIElzc3VlICMxNjMwNTogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IG9jY3VycmluZyB3aGVuIGludGVycnVwdGluZworICBtYXRoLmZhY3RvcmlhbC4KKworLSBJc3N1ZSAjMTYxMTY6IEZpeCBpbmNsdWRlIGFuZCBsaWJyYXJ5IHBhdGhzIHRvIGJlIGNvcnJlY3Qgd2hlbiBidWlsZGluZyBDCisgIGV4dGVuc2lvbnMgaW4gdmVudnMuCisKKy0gSXNzdWUgIzE2MjQ1OiBGaXggdGhlIHZhbHVlIG9mIGEgZmV3IGVudGl0aWVzIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCisKKy0gSXNzdWUgIzE2MzAxOiBGaXggdGhlIGxvY2FsaG9zdCB2ZXJpZmljYXRpb24gaW4gdXJsbGliL3JlcXVlc3QucHkgZm9yIGZpbGU6Ly8KKyAgdXJscy4KKworLSBJc3N1ZSAjMTYyNTA6IEZpeCB0aGUgaW52b2NhdGlvbnMgb2YgVVJMRXJyb3Igd2hpY2ggaGFkIG1pc3BsYWNlZCBmaWxlbmFtZQorICBhdHRyaWJ1dGUgZm9yIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTA4MzY6IEZpeCBleGNlcHRpb24gcmFpc2VkIHdoZW4gZmlsZSBub3QgZm91bmQgaW4gdXJscmV0cmlldmUKKyAgSW5pdGlhbCBwYXRjaCBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzE0Mzk4OiBGaXggc2l6ZSB0cnVuY2F0aW9uIGFuZCBvdmVyZmxvdyBidWdzIGluIHRoZSBiejIgbW9kdWxlLgorCistIElzc3VlICMxMjY5MjogRml4IHJlc291cmNlIGxlYWsgaW4gdXJsbGliLnJlcXVlc3Qgd2hlbiB0YWxraW5nIHRvIGFuIEhUVFAKKyAgc2VydmVyIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhICJDb25uZWN0aW9uOiBjbG9zZSIgaGVhZGVyIGluIGl0cyByZXNwb25zZXMuCisKKy0gSXNzdWUgIzEyMDM0OiBGaXggYm9ndXMgY2FjaGluZyBvZiByZXN1bHQgaW4gY2hlY2tfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlLgorICBQYXRjaCBieSBBdHN1byBJc2hpbW90by4KKworLSBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIGBsem1hLkxaTUFGaWxlYC4KKworLSBJc3N1ZSAjMTYyMjA6IHdzZ2lyZWYgbm93IGFsd2F5cyBjYWxscyBjbG9zZSgpIG9uIGFuIGl0ZXJhYmxlIHJlc3BvbnNlLgorICBQYXRjaCBieSBCcmVudCBUdWJicy4KKworLSBJc3N1ZSAjMTYyNzA6IHVybGxpYiBtYXkgaGFuZyB3aGVuIHVzZWQgZm9yIHJldHJpZXZpbmcgZmlsZXMgdmlhIEZUUCBieSB1c2luZworICBhIGNvbnRleHQgbWFuYWdlci4gIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnLgorCistIElzc3VlICMxNjQ2MTogV2F2ZSBsaWJyYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGRlYWwgd2l0aCA0R0Igd2F2IGZpbGVzLAorICBhbmQgc2FtcGxlIHJhdGUgb2YgNDQxMDAgSHouCisKKy0gSXNzdWUgIzE2MTc2OiBQcm9wZXJseSBpZGVudGlmeSBXaW5kb3dzIDggdmlhIHBsYXRmb3JtLnBsYXRmb3JtKCkKKworLSBJc3N1ZSAjMTYwODg6IEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIncyBzZW5kX2Vycm9yIG1ldGhvZCBpbmNsdWRlcyBhCisgIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpbiBpdCdzIHJlc3BvbnNlIG5vdy4gUGF0Y2ggYnkgQW50b2luZSBQaXRyb3UuCisKKy0gSXNzdWUgIzE2MTE0OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIHByb3ZpZGVzIGEgbWlzbGVhZGluZyBlcnJvcgorICBtZXNzYWdlIHN0YXRpbmcgdGhhdCBhcmdzWzBdIGRpZCBub3QgZXhpc3Qgd2hlbiBlaXRoZXIgdGhlIGN3ZCBvciBleGVjdXRhYmxlCisgIGtleXdvcmQgYXJndW1lbnRzIHNwZWNpZmllZCBhIHBhdGggdGhhdCBkaWQgbm90IGV4aXN0LgorCistIElzc3VlICMxNjE2OTogRml4IGN0eXBlcy5XaW5FcnJvcigpJ3MgY29uZnVzaW9uIGJldHdlZW4gZXJybm8gYW5kIHdpbmVycm9yLgorCistIElzc3VlICMxNDkyNzA0OiBzaHV0aWwuY29weWZpbGUoKSByYWlzZXMgYSBkaXN0aW5jdCBTYW1lRmlsZUVycm9yIG5vdyBpZgorICBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiBQYXRjaCBieSBBdHN1byBJc2hpbW90by4KKworLSBJc3N1ZSAjMTM4OTY6IE1ha2Ugc2hlbGYgaW5zdGFuY2VzIHdvcmsgd2l0aCAnd2l0aCcgYXMgY29udGV4dCBtYW5hZ2Vycy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTU0MTc6IEFkZCBzdXBwb3J0IGZvciBjc2ggYW5kIGZpc2ggaW4gdmVudiBhY3RpdmF0aW9uIHNjcmlwdHMuCisKKy0gSXNzdWUgIzE0Mzc3OiBFbGVtZW50VHJlZS53cml0ZSBhbmQgc29tZSBvZiB0aGUgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucyBoYXZlCisgIGEgbmV3IHBhcmFtZXRlciAtICpzaG9ydF9lbXB0eV9lbGVtZW50cyouIEl0IGNvbnRyb2xzIGhvdyBlbGVtZW50cyB3aXRoIG5vCisgIGNvbnRlbnRzIGFyZSBlbWl0dGVkLgorCistIElzc3VlICMxNjA4OTogQWxsb3cgRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIgdG8gd29yayBhZ2FpbiB3aXRoIGEgbm9uLUVsZW1lbnQKKyAgZWxlbWVudF9mYWN0b3J5IChmaXhlcyBhIHJlZ3Jlc3Npb24gaW4gU2ltcGxlVEFMKS4KKworLSBJc3N1ZSAjOTY1MDogTGlzdCBjb21tb25seSB1c2VkIGZvcm1hdCBjb2RlcyBpbiB0aW1lLnN0cmZ0aW1lIGFuZAorICB0aW1lLnN0cnB0aW1lIGRvY3N0dGluZ3MuICBPcmlnaW5hbCBwYXRjaCBieSBNaWtlIEhveS4KKworLSBJc3N1ZSAjMTYwMzQ6IEZpeCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBpbiB0aGUgbmV3IGBiejIuQloyRmlsZWAKKyAgaW1wbGVtZW50YXRpb24uICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gYHB0eS5zcGF3bigpYCBub3cgcmV0dXJucyB0aGUgY2hpbGQgcHJvY2VzcyBzdGF0dXMgcmV0dXJuZWQgYnkgYG9zLndhaXRwaWQoKWAuCisKKy0gSXNzdWUgIzE1NzU2OiBgc3VicHJvY2Vzcy5wb2xsKClgIG5vdyBwcm9wZXJseSBoYW5kbGVzIGBlcnJuby5FQ0hJTERgIHRvCisgIHJldHVybiBhIHJldHVybmNvZGUgb2YgMCB3aGVuIHRoZSBjaGlsZCBoYXMgYWxyZWFkeSBleGl0ZWQgb3IgY2Fubm90IGJlIHdhaXRlZAorICBvbi4KKworLSBJc3N1ZSAjMTUzMjM6IEltcHJvdmUgZmFpbHVyZSBtZXNzYWdlIG9mIGBNb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKClgLgorCistIElzc3VlICMxNjA2NDogYGB1bml0dGVzdCAtbWBgIGNsYWltcyBleGVjdXRhYmxlIGlzICJweXRob24iLCBub3QgInB5dGhvbjMiLgorCistIElzc3VlICMxMjM3NjogUGFzcyBvbiBwYXJhbWV0ZXJzIGluIGBUZXh0VGVzdFJlc3VsdC5fX2luaXRfXygpYCBzdXBlciBjYWxsLgorCistIElzc3VlICMxNTIyMjogSW5zZXJ0IGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBtZXNzYWdlIGluIG1ib3ggbWFpbGJveGVzLgorCistIElzc3VlICMxNjAxMzogRml4IGBjc3YuUmVhZGVyYCBwYXJzaW5nIGlzc3VlIHdpdGggZW5kaW5nIHF1b3RlIGNoYXJhY3RlcnMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDIxOiBGaXggYW4gT3ZlcmZsb3dFcnJvciBpbiBgQ2FsZW5kYXIuaXRlcm1vbnRoZGF0ZXMoKWAgYWZ0ZXIKKyAgYGRhdGV0aW1lLk1BWFlFQVJgLiAgUGF0Y2ggYnkgQ8OpZHJpYyBLcmllci4KKworLSBJc3N1ZSAjMTYxMTI6IHBsYXRmb3JtLmFyY2hpdGVjdHVyZSBkb2VzIG5vdCBjb3JyZWN0bHkgZXNjYXBlIGFyZ3VtZW50IHRvCisgIC91c3IvYmluL2ZpbGUuICBQYXRjaCBieSBEYXZpZCBCZW5qYW1pbi4KKworLSBJc3N1ZSAjMTU5NzA6IGB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIG5vdyBzZXJpYWxpemVzIGNvcnJlY3RseSB0aGUgZW1wdHkgSFRNTAorICBlbGVtZW50cyAnbWV0YScgYW5kICdwYXJhbScuCisKKy0gSXNzdWUgIzE1ODQyOiBUaGUgYFNvY2tldElPLntyZWFkYWJsZSx3cml0YWJsZSxzZWVrYWJsZX1gIG1ldGhvZHMgbm93IHJhaXNlCisgIFZhbHVlRXJyb3Igd2hlbiB0aGUgZmlsZS1saWtlIG9iamVjdCBpcyBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgorCistIElzc3VlICMxNTg3NjogRml4IGEgcmVmbGVhayBpbiB0aGUgYGN1cnNlc2AgbW9kdWxlOiB3aW5kb3cuZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE1ODgxOiBGaXggYGF0ZXhpdGAgaG9vayBpbiBgbXVsdGlwcm9jZXNzaW5nYC4gIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzCisgIE1jRG9ub3VnaC4KKworLSBJc3N1ZSAjMTU4NDE6IFRoZSByZWFkYWJsZSgpLCB3cml0YWJsZSgpIGFuZCBzZWVrYWJsZSgpIG1ldGhvZHMgb2YKKyAgYGlvLkJ5dGVzSU9gIGFuZCBgaW8uU3RyaW5nSU9gIG9iamVjdHMgbm93IHJhaXNlIFZhbHVlRXJyb3Igd2hlbiB0aGUgb2JqZWN0CisgIGhhcyBiZWVuIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCisKKy0gSXNzdWUgIzE1NDQ3OiBVc2UgYHN1YnByb2Nlc3MuREVWTlVMTGAgaW4gd2ViYnJvd3NlciwgaW5zdGVhZCBvZiBvcGVuaW5nCisgIGBvcy5kZXZudWxsYCBleHBsaWNpdGx5IGFuZCBsZWF2aW5nIGl0IG9wZW4uCisKKy0gSXNzdWUgIzE1NTA5OiBgd2ViYnJvd3Nlci5Vbml4QnJvd3NlcmAgbm8gbG9uZ2VyIHBhc3NlcyBlbXB0eSBhcmd1bWVudHMgdG8KKyAgUG9wZW4gd2hlbiBgYCVhY3Rpb25gYCBzdWJzdGl0dXRpb25zIHByb2R1Y2UgZW1wdHkgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTI3NzYsIGlzc3VlICMxMTgzOTogQ2FsbCBgYXJncGFyc2VgIHR5cGUgZnVuY3Rpb24gKHNwZWNpZmllZCBieQorICBhZGRfYXJndW1lbnQpIG9ubHkgb25jZS4gQmVmb3JlLCB0aGUgdHlwZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHR3aWNlIGluIHRoZQorICBjYXNlIHdoZXJlIHRoZSBkZWZhdWx0IHdhcyBzcGVjaWZpZWQgYW5kIHRoZSBhcmd1bWVudCB3YXMgZ2l2ZW4gYXMgd2VsbC4gIFRoaXMKKyAgd2FzIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgZm9yIHRoZSBGaWxlVHlwZSB0eXBlLCBhcyBhIGRlZmF1bHQgZmlsZSB3b3VsZAorICBhbHdheXMgYmUgb3BlbmVkLCBldmVuIGlmIGEgZmlsZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzE1OTA2OiBGaXggYSByZWdyZXNzaW9uIGluIGFyZ3BhcnNlIGNhdXNlZCBieSB0aGUgcHJlY2VkaW5nIGNoYW5nZSwKKyAgd2hlbiBgYGFjdGlvbj0nYXBwZW5kJ2BgLCBgYHR5cGU9J3N0cidgYCBhbmQgYGBkZWZhdWx0PVtdYGAuCisKKy0gSXNzdWUgIzE2MTEzOiBBZGRlZCBzaGEzIG1vZHVsZSBiYXNlZCBvbiB0aGUgS2VjY2FrIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorICAzLjIuIFRoZSBgaGFzaGxpYmAgbW9kdWxlIGhhcyBmb3VyIGFkZGl0aW9uYWwgaGFzaCBhbGdvcml0aG1zOiBgc2hhM18yMjRgLAorICBgc2hhM18yNTZgLCBgc2hhM18zODRgIGFuZCBgc2hhM181MTJgLiBBcyBwYXJ0IG9mIHRoZSBwYXRjaCBzb21lIGNvbW1vbgorICBjb2RlIHdhcyBtb3ZlZCBmcm9tIF9oYXNob3BlbnNzbC5jIHRvIGhhc2hsaWIuaC4KKworLSBjdHlwZXMuY2FsbF9jb21tZXRob2Qgd2FzIHJlbW92ZWQsIHNpbmNlIGl0cyBvbmx5IHVzYWdlIHdhcyBpbiB0aGUgZGVmdW5jdAorICBzYW1wbGVzIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTY2OTI6IEFkZGVkIFRMU3YxLjEgYW5kIFRMU3YxLjIgc3VwcG9ydCBmb3IgdGhlIHNzbCBtb2R1bGVzLgorCistIElzc3VlICMxNjgzMjogYWRkIGFiYy5nZXRfY2FjaGVfdG9rZW4oKSB0byBleHBvc2UgY2FjaGUgdmFsaWRpdHkgY2hlY2tpbmcKKyAgc3VwcG9ydCBpbiBBQkNNZXRhLgogCiBJRExFCiAtLS0tCiAKLS0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKLSAgbGluZXMuCi0KLS0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCi0KLS0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgotCiAtIElzc3VlICMxODQyOTogRm9ybWF0IC8gRm9ybWF0IFBhcmFncmFwaCwgbm93IHdvcmtzIHdoZW4gY29tbWVudCBibG9ja3MKICAgYXJlIHNlbGVjdGVkLiBBcyB3aXRoIHRleHQgYmxvY2tzLCB0aGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgc2VsZWN0aW9uCiAgIG9ubHkgaW5jbHVkZXMgY29tcGxldGUgbGluZXMuCkBAIC01MTEsMzggKzIzNTIsNzMgQEAKIAogLSBJc3N1ZSAjMTQxNDY6IEhpZ2hsaWdodCBzb3VyY2UgbGluZSB3aGlsZSBkZWJ1Z2dpbmcgb24gV2luZG93cy4KIAorLSBJc3N1ZSAjMTc4Mzg6IEFsbG93IHN5cy5zdGRpbiB0byBiZSByZWFzc2lnbmVkLgorCistIElzc3VlICMxMzQ5NTogQXZvaWQgbG9hZGluZyB0aGUgY29sb3IgZGVsZWdhdG9yIHR3aWNlIGluIElETEUuCisKKy0gSXNzdWUgIzE3Nzk4OiBBbGxvdyBJRExFIHRvIGVkaXQgbmV3IGZpbGVzIHdoZW4gc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZS4KKworLSBJc3N1ZSAjMTQ3MzU6IFVwZGF0ZSBJRExFIGRvY3MgdG8gb21pdCAiQ29udHJvbC16IG9uIFdpbmRvd3MiLgorCiAtIElzc3VlICMxNzUzMjogQWx3YXlzIGluY2x1ZGUgT3B0aW9ucyBtZW51IGZvciBJRExFIG9uIE9TIFguCiAgIFBhdGNoIGJ5IEd1aWxoZXJtZSBTaW3DtWVzLgogCistIElzc3VlICMxNzU4NTogRml4ZWQgSURMRSByZWdyZXNzaW9uLiBOb3cgY2xvc2VzIHdoZW4gdXNpbmcgZXhpdCgpIG9yIHF1aXQoKS4KKworLSBJc3N1ZSAjMTc2NTc6IFNob3cgZnVsbCBUayB2ZXJzaW9uIGluIElETEUncyBhYm91dCBkaWFsb2cuCisgIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNzYxMzogUHJldmVudCB0cmFjZWJhY2sgd2hlbiByZW1vdmluZyBzeW50YXggY29sb3JpemVyIGluIElETEUuCisKKy0gSXNzdWUgIzEyMDc1ODk6IEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHBhdGNoIGZvciByaWdodC1jbGljayBtZW51IGluIElETEUuCisKKy0gSXNzdWUgIzE2ODg3OiBJRExFIG5vdyBhY2NlcHRzIENhbmNlbCBpbiB0YWJpZnkvdW50YWJpZnkgZGlhbG9nIGJveC4KKworLSBJc3N1ZSAjMTc2MjU6IEluIElETEUsIGNsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgorCistIElzc3VlICMxNDI1NDogSURMRSBub3cgaGFuZGxlcyByZWFkbGluZSBjb3JyZWN0bHkgYWNyb3NzIHNoZWxsIHJlc3RhcnRzLgorCistIElzc3VlICMxNzYxNDogSURMRSBubyBsb25nZXIgcmFpc2VzIGV4Y2VwdGlvbiB3aGVuIHF1aWNrbHkgY2xvc2luZyBhIGZpbGUuCisKKy0gSXNzdWUgIzY2OTg6IElETEUgbm93IG9wZW5zIGp1c3QgYW4gZWRpdG9yIHdpbmRvdyB3aGVuIGNvbmZpZ3VyZWQgdG8gZG8gc28uCisKKy0gSXNzdWUgIzg5MDA6IFVzaW5nIGtleWJvYXJkIHNob3J0Y3V0cyBpbiBJRExFIHRvIG9wZW4gYSBmaWxlIG5vIGxvbmdlcgorICByYWlzZXMgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICM2NjQ5OiBGaXhlZCBtaXNzaW5nIGV4aXQgc3RhdHVzIGluIElETEUuIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgorCistIElzc3VlICMxNzExNDogSURMRSBub3cgdXNlcyBub24tc3RyaWN0IGNvbmZpZyBwYXJzZXIuCisKKy0gSXNzdWUgIzkyOTA6IEluIElETEUgdGhlIHN5cy5zdGQqIHN0cmVhbXMgbm93IGltcGxlbWVudCBpby5UZXh0SU9CYXNlCisgIGludGVyZmFjZSBhbmQgc3VwcG9ydCBhbGwgbWFuZGF0b3J5IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuCisKKy0gSXNzdWUgIzUwNjY6IFVwZGF0ZSBJRExFIGRvY3MuIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNjgyOTogSURMRSBwcmludGluZyBubyBsb25nZXIgZmFpbHMgaWYgdGhlcmUgYXJlIHNwYWNlcyBvciBvdGhlcgorICBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgcGF0aC4KKworLSBJc3N1ZSAjMTY0OTE6IElETEUgbm93IHByaW50cyBjaGFpbmVkIGV4Y2VwdGlvbiB0cmFjZWJhY2tzLgorCistIElzc3VlICMxNjgxOTogSURMRSBtZXRob2QgY29tcGxldGlvbiBub3cgY29ycmVjdGx5IHdvcmtzIGZvciBieXRlcyBsaXRlcmFscy4KKworLSBJc3N1ZSAjMTY1MDQ6IElETEUgbm93IGNhdGNoZXMgU3ludGF4RXJyb3JzIHJhaXNlZCBieSB0b2tlbml6ZXIuIFBhdGNoIGJ5CisgIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNjUxMTogVXNlIGRlZmF1bHQgSURMRSB3aWR0aCBhbmQgaGVpZ2h0IGlmIGNvbmZpZyBwYXJhbSBpcyBub3QgdmFsaWQuCisgIFBhdGNoIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyMDc1ODk6IEFkZCBDdXQvQ29weS9QYXN0ZSBpdGVtcyB0byBJRExFIHJpZ2h0IGNsaWNrIENvbnRleHQgTWVudQorICBQYXRjaCBieSBUb2RkIFJvdml0by4KKworLSBJc3N1ZSAjMTYxMjM6IElETEUgLSBkZXByZWNhdGUgcnVubmluZyB3aXRob3V0IGEgc3VicHJvY2Vzcy4KKyAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKIFRlc3RzCiAtLS0tLQogCi0tIElzc3VlICMxNDQwNzogRml4IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IGluIHRlc3RfY29uY3VycmVudF9mdXR1cmVzLgotCi0tIElzc3VlICMxODkxOTogVW5pZmllZCBhbmQgZXh0ZW5kZWQgdGVzdHMgZm9yIGF1ZGlvIG1vZHVsZXM6IGFpZmMsIHN1bmF1IGFuZAotICB3YXZlLgotCi0tIElzc3VlICMxODk1MjogRml4IHJlZ3Jlc3Npb24gaW4gc3VwcG9ydCBkYXRhIGRvd25sb2FkcyBpbnRyb2R1Y2VkIHdoZW4KLSAgdGVzdC5zdXBwb3J0IHdhcyBjb252ZXJ0ZWQgdG8gYSBwYWNrYWdlLiBSZWdyZXNzaW9uIG5vdGljZWQgYnkgWmFjaGFyeQotICBXYXJlLgotCi0tIElzc3VlICMxMjAzNzogRml4IHRlc3RfZW1haWwgZm9yIGRlc2t0b3AgV2luZG93cy4KLQotLSBJc3N1ZSAjMTU1MDc6IHRlc3Rfc3VicHJvY2VzcydzIHRlc3Rfc2VuZF9zaWduYWwgY291bGQgZmFpbCBpZiB0aGUgdGVzdAotICBydW5uZXIgd2VyZSBydW4gaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIHByb2Nlc3MgaW5oZXJpdGVkIGFuIGlnbm9yZQotICBzZXR0aW5nIGZvciBTSUdJTlQuICBSZXN0b3JlIHRoZSBTSUdJTlQgaGFuZGxlciB0byB0aGUgZGVzaXJlZAotICBLZXlib2FyZEludGVycnVwdCByYWlzaW5nIG9uZSBkdXJpbmcgdGhhdCB0ZXN0LgotCi0tIElzc3VlICMxODc5MjogVXNlICIxMjcuMC4wLjEiIG9yICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIgYXMgbXVjaCBhcwotICBwb3NzaWJsZSwgc2luY2UgImxvY2FsaG9zdCIgZ29lcyB0aHJvdWdoIGEgRE5TIGxvb2t1cCB1bmRlciByZWNlbnQgV2luZG93cwotICB2ZXJzaW9ucy4KLQogLSBJc3N1ZSAjMTY2NjMxODogQWRkIGEgdGVzdCB0aGF0IHNodXRpbC5jb3B5dHJlZSgpIHJldGFpbnMgZGlyZWN0b3J5CiAgIHBlcm1pc3Npb25zLiAgUGF0Y2ggYnkgQ2F0aGVyaW5lIERldmxpbi4KIAotLSBJc3N1ZSAjMTgzNTc6IGFkZCB0ZXN0cyBmb3IgZGljdHZpZXcgc2V0IGRpZmZlcmVuY2UuCi0gIFBhdGNoIGJ5IEZyYXNlciBUd2VlZGFsZS4KLQogLSBJc3N1ZSAjMTgyNzM6IG1vdmUgdGhlIHRlc3RzIGluIExpYi90ZXN0L2pzb25fdGVzdHMgdG8gTGliL3Rlc3QvdGVzdF9qc29uCiAgIGFuZCBtYWtlIHRoZW0gZGlzY292ZXJhYmxlIGJ5IHVuaXR0ZXN0LiAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgogCkBAIC01NzQsMjg1ICsyNDUwLDEzIEBACiAKIC0gSXNzdWUgIzExMTg1OiBGaXggdGVzdF93YWl0NCB1bmRlciBBSVguICBQYXRjaCBieSBTw6liYXN0aWVuIFNhYmzDqS4KIAotLSBJc3N1ZSAjMTc2OTE6IHRlc3RfdW5pdm5ld2xpbmVzIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgotICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCistIElzc3VlICMxODIwNzogRml4IHRlc3Rfc3NsIGZvciBzb21lIHZlcnNpb25zIG9mIE9wZW5TU0wgdGhhdCBpZ25vcmUgc2Vjb25kcworICBpbiBBU04xX1RJTUUgZmllbGRzLgogCiAtIElzc3VlICMxODA5NDogdGVzdF91dWlkIG5vIG1vcmUgcmVwb3J0cyBza2lwcGVkIHRlc3RzIGFzIHBhc3NlZC4KIAotLSBJc3N1ZSAjMTE5OTU6IHRlc3RfcHlkb2MgZG9lc24ndCBpbXBvcnQgYWxsIHN5cy5wYXRoIG1vZHVsZXMgYW55bW9yZS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxOTM5MjogRG9jdW1lbnQgdGhhdCBgaW1wLnJlbG9hZCgpYCBub3cgYWxzbyByZXF1aXJlcyBgX19sb2FkZXJfX2AgdG8KLSAgYmUgc2V0IG9uIHRoZSBtb2R1bGUgYmVpbmcgcmVsb2FkZWQuCi0KLS0gSXNzdWUgIzE4NzU4OiBGaXhlZCBhbmQgaW1wcm92ZWQgY3Jvc3MtcmVmZXJlbmNlcy4KLQotLSBJc3N1ZSAjMTg3NDM6IEZpeCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGFudCAiU3RyaW5nSU8iIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTg3ODM6IFJlbW92ZWQgZXhpc3RpbmcgbWVudGlvbnMgb2YgUHl0aG9uIGxvbmcgdHlwZSBpbiBkb2NzdHJpbmdzLAotICBlcnJvciBtZXNzYWdlcyBhbmQgY29tbWVudHMuCi0KLS0gSXNzdWUgIzE3NzAxOiBJbXByb3Zpbmcgc3RyZnRpbWUgZG9jdW1lbnRhdGlvbi4KLQotLSBJc3N1ZSAjMTg0NDA6IENsYXJpZnkgdGhhdCBgaGFzaCgpYCBjYW4gdHJ1bmNhdGUgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4KLSAgb2JqZWN0J3MgY3VzdG9tIGBfX2hhc2hfXygpYCBtZXRob2QuCi0KLS0gSXNzdWUgIzE3OTUzOiBNZW50aW9uIHRoYXQgeW91IHNob3VsZG4ndCByZXBsYWNlIHN5cy5tb2R1bGVzIGFuZCBkZWxldGluZyBrZXkKLSAgaXRlbXMgd2lsbCBjYXVzZSBQeXRob24gdG8gbm90IGJlIGhhcHB5LgotCi0tIElzc3VlICMxNzg0NDogQWRkIGxpbmtzIHRvIGVuY29kZXJzIGFuZCBkZWNvZGVycyBmb3IgYnl0ZXMtdG8tYnl0ZXMgY29kZWNzLgotCi0tIElzc3VlICMxNDA5NzogaW1wcm92ZSB0aGUgImludHJvZHVjdGlvbiIgcGFnZSBvZiB0aGUgdHV0b3JpYWwuCi0KLS0gSXNzdWUgIzE3OTc3OiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNhZGVmYXVsdCBhcmd1bWVudCdzIGRlZmF1bHQgdmFsdWUKLSAgaW4gdXJsbGliLnJlcXVlc3QudXJsb3BlbigpIGlzIGZpeGVkIHRvIG1hdGNoIHRoZSBjb2RlLgotCi1Ub29scy9EZW1vcwotLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTg4NzM6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBkZXRlY3QgUHl0aG9uIHNvdXJjZQotICBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KLQotLSBJc3N1ZSAjMTg4MTc6IEZpeCBhIHJlc291cmNlIHdhcm5pbmcgaW4gTGliL2FpZmMucHkgZGVtby4KLQotLSBJc3N1ZSAjMTg0Mzk6IE1ha2UgcGF0Y2hjaGVjayB3b3JrIG9uIFdpbmRvd3MgZm9yIEFDS1MsIE5FV1MuCi0KLS0gSXNzdWUgIzE4NDQ4OiBGaXggYSB0eXBvIGluIFRvb2xzL2RlbW8vZWlmZmVsLnB5LgotCi0tIElzc3VlICMxODQ1NzogRml4ZWQgc2F2aW5nIG9mIGZvcm11bGFzIGFuZCBjb21wbGV4IG51bWJlcnMgaW4KLSAgVG9vbHMvZGVtby9zczEucHkuCi0KLS0gSXNzdWUgIzE4NDQ5OiBNYWtlIFRvb2xzL2RlbW8vc3MxLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuICBQYXRjaCBieQotICBGw6l2cnkgVGhpYmF1bHQuCi0KLS0gSXNzdWUgIzE1MjM5OiBNYWtlIG1rc3RyaW5ncHJlcC5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLgotCi0tIElzc3VlICMxMjk5MDogVGhlICJQeXRob24gTGF1bmNoZXIiIG9uIE9TWCBjb3VsZCBub3QgbGF1bmNoIHB5dGhvbiBzY3JpcHRzCi0gIHRoYXQgaGF2ZSBwYXRocyB0aGF0IGluY2x1ZGUgd2lkZSBjaGFyYWN0ZXJzLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTkzNTY6IEF2b2lkIHVzaW5nIGEgQyB2YXJpYWJsZWQgbmFtZWQgIl9zZWxmIiwgaXQncyBhIHJlc2VydmVkCi0gIHdvcmQgaW4gc29tZSBDIGNvbXBpbGVycy4KLQotLSBJc3N1ZSAjMTkxMzA6IENvcnJlY3QgUENidWlsZC9yZWFkbWUudHh0LCBQeXRob24gMy4zIGFuZCAzLjQgcmVxdWlyZSBWUyAyMDEwLgotCi0tIElzc3VlICMxNjA2NzogQWRkIGRlc2NyaXB0aW9uIGludG8gTVNJIGZpbGUgdG8gcmVwbGFjZSBpbnN0YWxsZXIncyB0ZW1wb3JhcnkgbmFtZS4KLQotLSBJc3N1ZSAjMTgyNTY6IENvbXBpbGF0aW9uIGZpeCBmb3IgcmVjZW50IEFJWCByZWxlYXNlcy4gIFBhdGNoIGJ5Ci0gIERhdmlkIEVkZWxzb2huLgotCi0tIElzc3VlICMxNTE3MjogRG9jdW1lbnQgTkFTTSAyLjEwKyBhcyByZXF1aXJlbWVudCBmb3IgYnVpbGRpbmcgT3BlblNTTCAxLjAuMQotICBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNTg0OiBQcm92aWRlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZm9yCi0gIFRjbCBhbmQgVGsgd2hlbiBidWlsZGluZyBfdGtpbnRlci4KLQotLSBJc3N1ZSAjMTU2NjM6IFRjbC9UayA4LjUuMTUgaXMgbm93IGluY2x1ZGVkIHdpdGggdGhlIE9TIFggMTAuNisKLSAgNjQtYml0LzMyLWJpdCBpbnN0YWxsZXIgZm9yIDEwLjYrLiAgSXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeQotICB0byBpbnN0YWxsIGEgdGhpcmQtcGFydHkgdmVyc2lvbiBvZiBUY2wvVGsgOC41IHRvIHdvcmsgYXJvdW5kIHRoZQotICBwcm9ibGVtcyBpbiB0aGUgQXBwbGUtc3VwcGxpZWQgVGNsL1RrIDguNSBzaGlwcGVkIGluIE9TIFggMTAuNgotICBhbmQgbGF0ZXIgcmVsZWFzZXMuCi0KLS0gSXNzdWUgIzE5MDE5OiBDaGFuZ2UgdGhlIE9TIFggaW5zdGFsbGVyIGJ1aWxkIHNjcmlwdCB0byB1c2UgQ0ZMQUdTIGluc3RlYWQKLSAgb2YgT1BUIGZvciBzcGVjaWFsIGJ1aWxkIG9wdGlvbnMuICBCeSBzZXR0aW5nIE9QVCwgc29tZSBjb21waWxlci1zcGVjaWZpYwotICBvcHRpb25zIGxpa2UgLWZ3cmFwdiB3ZXJlIG92ZXJyaWRkZW4gYW5kIHRodXMgbm90IHVzZWQsIHdoaWNoIGNvdWxkIHJlc3VsdAotICBpbiBicm9rZW4gaW50ZXJwcmV0ZXJzIHdoZW4gYnVpbGRpbmcgd2l0aCBjbGFuZy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAxMy1NYXktMjAxMyoKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3MjM3OiBGaXggY3Jhc2ggaW4gdGhlIEFTQ0lJIGRlY29kZXIgb24gbTY4ay4KLQotLSBJc3N1ZSAjMTc0MDg6IEF2b2lkIHVzaW5nIGFuIG9ic29sZXRlIGluc3RhbmNlIG9mIHRoZSBjb3B5cmVnIG1vZHVsZSB3aGVuCi0gIHRoZSBpbnRlcnByZXRlciBpcyBzaHV0ZG93biBhbmQgdGhlbiBzdGFydGVkIGFnYWluLgotCi0tIElzc3VlICMxNzg2MzogSW4gdGhlIGludGVyYWN0aXZlIGNvbnNvbGUsIGRvbid0IGxvb3AgZm9yZXZlciBpZiB0aGUgZW5jb2RpbmcKLSAgY2FuJ3QgYmUgZmV0Y2hlZCBmcm9tIHN0ZGluLgotCi0tIElzc3VlICMxNzg2NzogUmFpc2UgYW4gSW1wb3J0RXJyb3IgaWYgX19pbXBvcnRfXyBpcyBub3QgZm91bmQgaW4gX19idWlsdGluc19fLgotCi0tIElzc3VlICMxNzg1NzogUHJldmVudCBidWlsZCBmYWlsdXJlcyB3aXRoIHByZS0zLjUuMCB2ZXJzaW9ucyBvZiBzcWxpdGUzLAotICBzdWNoIGFzIHdhcyBzaGlwcGVkIHdpdGggQ2VudG9zIDUgYW5kIE1hYyBPUyBYIDEwLjQuCi0KLS0gSXNzdWUgIzE3NDEzOiBzeXMuc2V0dHJhY2UgY2FsbGJhY2tzIHdlcmUgYmVpbmcgcGFzc2VkIGEgc3RyaW5nIGluc3RlYWQgb2YgYW4KLSAgZXhjZXB0aW9uIGluc3RhbmNlIGZvciB0aGUgJ3ZhbHVlJyBlbGVtZW50IG9mIHRoZSBhcmcgdHVwbGUgaWYgdGhlIGV4Y2VwdGlvbgotICBvcmlnaW5hdGVkIGZyb20gQyBjb2RlOyBub3cgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGlzIGFsd2F5cyBwcm92aWRlZC4KLQotLSBJc3N1ZSAjMTc3ODI6IEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIG9uIHBsYXRmb3JtcyB3aGVyZQotICBgYHN0cnVjdCB0aW1lc3BlY2BgJ3MgInR2X25zZWMiIG1lbWJlciBpcyBub3QgYSBDIGxvbmcuCi0KLS0gSXNzdWUgIzE3NzE1OiBGaXggc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gaW4gYSBfX3RydW5jX18KLSAgbWV0aG9kLgotCi0tIElzc3VlICMxNjQ0NzogRml4ZWQgcG90ZW50aWFsIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHNldHRpbmcgX19uYW1lX18gb24gYQotICBjbGFzcy4KLQotLSBJc3N1ZSAjMTc2Njk6IEZpeCBjcmFzaCBpbnZvbHZpbmcgZmluYWxpemF0aW9uIG9mIGdlbmVyYXRvcnMgdXNpbmcgeWllbGQgZnJvbS4KLQotLSBJc3N1ZSAjMTc2MTk6IE1ha2UgaW5wdXQoKSBjaGVjayBmb3IgQ3RybC1DIGNvcnJlY3RseSBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNzYxMDogRG9uJ3QgcmVseSBvbiBub24tc3RhbmRhcmQgYmVoYXZpb3Igb2YgdGhlIEMgcXNvcnQoKSBmdW5jdGlvbi4KLQotLSBJc3N1ZSAjMTczNTc6IEFkZCBtaXNzaW5nIHZlcmJvc2l0eSBvdXRwdXQgd2hlbiB1c2luZyAtdi8tdnYuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc2MDY6IEZpeGVkIHN1cHBvcnQgb2YgZW5jb2RlZCBieXRlIHN0cmluZ3MgaW4gdGhlIFhNTEdlbmVyYXRvcgotICBjaGFyYWN0ZXJzKCkgYW5kIGlnbm9yYWJsZVdoaXRlc3BhY2UoKSBtZXRob2RzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgU2ViYXN0aWFuCi0gIE9ydGl6IFZhc3F1ZXouCi0KLS0gSXNzdWUgIzE3NzMyOiBJZ25vcmUgZGlzdHV0aWxzLmNmZyBvcHRpb25zIHBlcnRhaW5pbmcgdG8gaW5zdGFsbCBwYXRocyBpZiBhCi0gIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlLgotCi0tIElzc3VlICMxMTU5MDUxOiBCYWNrIG91dCBhIGZpeCBmb3IgaGFuZGxpbmcgY29ycnVwdGVkIGd6aXAgZmlsZXMgdGhhdAotICBicm9rZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLQotLSBJc3N1ZSAjMTc5MTU6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IG9mIHhtbC5zYXggd2l0aCBmaWxlIG9iamVjdHMgcmV0dXJuZWQgYnkKLSAgY29kZWNzLm9wZW4oKS4KLQotLSBJc3N1ZSAjMTY2MDE6IFJlc3RhcnRpbmcgaXRlcmF0aW9uIG92ZXIgdGFyZmlsZSBubyBtb3JlIGNvbnRpbnVlcyBmcm9tIHdoZXJlCi0gIGl0IGxlZnQgb2ZmLiAgUGF0Y2ggYnkgTWljaGFlbCBCaXJ0d2VsbC4KLQotLSBJc3N1ZSAjMTcyODk6IFRoZSByZWFkbGluZSBtb2R1bGUgbm93IHBsYXlzIG5pY2VyIHdpdGggZXh0ZXJuYWwgbW9kdWxlcwotICBvciBhcHBsaWNhdGlvbnMgY2hhbmdpbmcgdGhlIHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMgZ2xvYmFsCi0gIHZhcmlhYmxlLiAgSW5pdGlhbCBwYXRjaCBieSBCcmFkbGV5IEZyb2VobGUuCi0KLS0gSXNzdWUgIzEyMTgxOiBzZWxlY3QgbW9kdWxlOiBGaXggc3RydWN0IGtldmVudCBkZWZpbml0aW9uIG9uIE9wZW5CU0QgNjQtYml0Ci0gIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgRmVkZXJpY28gU2Nod2luZHQuCi0KLS0gSXNzdWUgIzE0MTczOiBBdm9pZCBjcmFzaGluZyB3aGVuIHJlYWRpbmcgYSBzaWduYWwgaGFuZGxlciBkdXJpbmcKLSAgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCi0KLS0gSXNzdWUgIzE2MzE2OiBtaW1ldHlwZXMgbm93IHJlY29nbml6ZXMgdGhlIC54eiBhbmQgLnR4eiAoLnRhci54eikgZXh0ZW5zaW9ucy4KLQotLSBJc3N1ZSAjMTU5MDI6IEZpeCBpbXAubG9hZF9tb2R1bGUoKSBhY2NlcHRpbmcgTm9uZSBhcyBhIGZpbGUgd2hlbiBsb2FkaW5nIGFuCi0gIGV4dGVuc2lvbiBtb2R1bGUuCi0KLS0gSXNzdWUgIzE3ODAyOiBGaXggYW4gVW5ib3VuZExvY2FsRXJyb3IgaW4gaHRtbC5wYXJzZXIuICBJbml0aWFsIHRlc3RzIGJ5Ci0gIFRob21hcyBCYXJsb3cuCi0KLS0gSXNzdWUgIzE1NTM1OiBGaXggbmFtZWR0dXBsZSBwaWNrbGVzIHdoaWNoIHdlcmUgcGlja2luZyB1cCB0aGUgT3JkZXJlZERpY3QKLSAgaW5zdGVhZCBvZiBqdXN0IHRoZSB1bmRlcmx5aW5nIHR1cGxlLgotCi0tIElzc3VlICMxNzE5MjogUmVzdG9yZSB0aGUgcGF0Y2ggZm9yIElzc3VlICMxMTcyOSB3aGljaCB3YXMgb21taXR0ZWQgaW4KLSAgMy4zLjEgd2hlbiB1cGRhdGluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIGxpYmZmaSB1c2VkIGJ5IGN0eXBlcy4gIFVwZGF0ZQotICBtYW55IGxpYmZmaSBmaWxlcyB0aGF0IHdlcmUgbWlzc2VkIGluIDMuMy4xJ3MgdXBkYXRlIHRvIGxpYmZmaS0zLjAuMTMuCi0KLS0gSXNzdWUgIzE3MzU4OiBNb2R1bGVzIGxvYWRlZCBieSBpbXAubG9hZF9zb3VyY2UoKSBhbmQgbG9hZF9jb21waWxlZCgpIChhbmQgYnkKLSAgZXh0ZW50aW9uIGxvYWRfbW9kdWxlKCkpIG5vdyBoYXZlIGEgYmV0dGVyIGNoYW5jZSBvZiB3b3JraW5nIHdoZW4gcmVsb2FkZWQuCi0KLS0gSXNzdWUgIzE3MzUzOiBQbGlzdGxpYiBlbWl0dGVkIGVtcHR5IGRhdGEgdGFncyB3aXRoIGRlZXBseSBuZXN0ZWQgZGF0YXN0cnVjdHVyZXMKLQotLSBJc3N1ZSAjMTE3MTQ6IFVzZSAnd2l0aCcgc3RhdGVtZW50cyB0byBhc3N1cmUgYSBTZW1hcGhvcmUgcmVsZWFzZXMgYQotICBjb25kaXRpb24gdmFyaWFibGUuICBPcmlnaW5hbCBwYXRjaCBieSBUaG9tYXMgUmFjaGVsLgotCi0tIElzc3VlICMxNzc5NTogUmV2ZXJ0ZWQgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UgaW4gU3lzTG9nSGFuZGxlciB3aXRoCi0gIFVuaXggZG9tYWluIHNvY2tldHMuCi0KLS0gSXNzdWUgIzE3NTU1OiBGaXggRm9ya0F3YXJlVGhyZWFkTG9jayBzbyB0aGF0IHNpemUgb2YgYWZ0ZXIgZm9yawotICByZWdpc3RyeSBkb2VzIG5vdCBncm93IGV4cG9uZW50aWFsbHkgd2l0aCBnZW5lcmF0aW9uIG9mIHByb2Nlc3MuCi0KLS0gSXNzdWUgIzE3NzA3OiBtdWx0aXByb2Nlc3NpbmcuUXVldWUncyBnZXQoKSBtZXRob2QgZG9lcyBub3QgYmxvY2sgZm9yIHNob3J0Ci0gIHRpbWVvdXRzLgotCi0tIElzdXNlICMxNzcyMDogRml4IHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgcGlja2xlLlVucGlja2xlciB0byBjb3JyZWN0bHkKLSAgcHJvY2VzcyB0aGUgQVBQRU5EUyBvcGNvZGUgd2hlbiBpdCBpcyB1c2VkIG9uIG5vbi1saXN0IG9iamVjdHMuCi0KLS0gSXNzdWUgIzE3MDEyOiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgZmFsbGJhY2tzIHRvIHRoZSBQQVRIIGVudmlyb25tZW50Ci0gIHZhcmlhYmxlIGlmIGVtcHR5IHBhdGggYXJndW1lbnQgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTc3MTA6IEZpeCBwaWNrbGUgcmFpc2luZyBhIFN5c3RlbUVycm9yIG9uIGJvZ3VzIGlucHV0LgotCi0tIElzc3VlICMxNzM0MTogSW5jbHVkZSB0aGUgaW52YWxpZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHJlIGFib3V0Ci0gIGludmFsaWQgZ3JvdXAgbmFtZXMuCi0KLS0gSXNzdWUgIzE3NzAyOiBvcy5lbnZpcm9uIG5vdyByYWlzZXMgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgbmFtZSAoc3RyIG9uIFVOSVgpLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbmNvZGVkIG5hbWUgKGJ5dGVzIG9uCi0gIFVOSVgpLgotCi0tIElzc3VlICMxNjE2MzogTWFrZSB0aGUgaW1wb3J0bGliIGJhc2VkIHZlcnNpb24gb2YgcGtndXRpbC5pdGVyX2ltcG9ydGVycwotICB3b3JrIGZvciBzdWJtb2R1bGVzLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCi0KLS0gSXNzdWUgIzE2ODA0OiBGaXggYSBidWcgaW4gdGhlICdzaXRlJyBtb2R1bGUgdGhhdCBjYXVzZWQgcnVubmluZwotICAncHl0aG9uIC1TIC1tIHNpdGUnIHRvIGluY29ycmVjdGx5IHRocm93IGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjMTcwMTY6IEdldCByaWQgb2YgcG9zc2libGUgcG9pbnRlciB3cmFwYXJvdW5kcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MKLSAgaW4gdGhlIHJlIG1vZHVsZS4gIFBhdGNoIGJ5IE5pY2tvbGFpIFplbGRvdmljaC4KLQotLSBJc3N1ZSAjMTY2NTg6IGFkZCBtaXNzaW5nIHJldHVybiB0byBIVFRQQ29ubmVjdGlvbi5zZW5kKCkKLSAgUGF0Y2ggYnkgSmVmZiBLbnVwcC4KLQotLSBJc3N1ZSAjMTQ5NzE6IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IG5vIGxvbmdlciBnZXRzIGNvbmZ1c2VkIHdoZW4gYSBmdW5jdGlvbgotICBoYXMgYSBkaWZmZXJlbnQgX19uYW1lX18gdGhhbiBpdHMgbmFtZSBpbiB0aGUgVGVzdENhc2UgY2xhc3MgZGljdGlvbmFyeS4KLQotLSBJc3N1ZSAjMTc2Nzg6IEZpeCBEZXByZWNhdGlvbldhcm5pbmcgaW4gdGhlIGh0dHAvY29va2llamFyLnB5IGJ5IGNoYW5naW5nIHRoZQotICB1c2FnZSBvZiBnZXRfb3JpZ2luX3JlcV9ob3N0KCkgdG8gb3JpZ2luX3JlcV9ob3N0LgotCi0tIElzc3VlICMxNzY2NjogRml4IHJlYWRpbmcgZ3ppcCBmaWxlcyB3aXRoIGFuIGV4dHJhIGZpZWxkLgotCi0tIElzc3VlICMxNzUwMjogUHJvY2VzcyBERUZBVUxUIHZhbHVlcyBpbiBtb2NrIHNpZGVfZWZmZWN0IHRoYXQgcmV0dXJucyBpdGVyYXRvci4KLSAgUGF0Y2ggYnkgTWljaGFlbCBGb29yZC4KLQotLSBJc3N1ZSAjMTc1NzI6IEF2b2lkIGNoYWluZWQgZXhjZXB0aW9ucyB3aGlsZSBwYXNzaW5nIGJhZCBkaXJlY3RpdmVzIHRvCi0gIHRpbWUuc3RycHRpbWUoKS4gIEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgotCi0tIElzc3VlICMxNzQzNTogdGhyZWFkaW5nLlRpbWVyJ3MgX19pbml0X18gbWV0aG9kIG5vIGxvbmdlciB1c2VzIG11dGFibGUKLSAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBhcmdzIGFuZCBrd2FyZ3MgcGFyYW1ldGVycy4KLQotLSBJc3N1ZSAjMTc1MjY6IGZpeCBhbiBJbmRleEVycm9yIHJhaXNlZCB3aGlsZSBwYXNzaW5nIGNvZGUgd2l0aG91dCBmaWxlbmFtZSB0bwotICBpbnNwZWN0LmZpbmRzb3VyY2UoKS4gIEluaXRpYWwgcGF0Y2ggYnkgVHlsZXIgRG95bGUuCi0KLS0gSXNzdWUgIzE2NTUwOiBVcGRhdGUgdGhlIG9wY29kZSBkZXNjcmlwdGlvbnMgb2YgcGlja2xldG9vbHMgdG8gdXNlIHVuc2lnbmVkCi0gIGludGVnZXJzIHdoZXJlIGFwcHJvcHJpYXRlLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzE3ODM4OiBBbGxvdyBzeXMuc3RkaW4gdG8gYmUgcmVhc3NpZ25lZC4KLQotLSBJc3N1ZSAjMTM0OTU6IEF2b2lkIGxvYWRpbmcgdGhlIGNvbG9yIGRlbGVnYXRvciB0d2ljZSBpbiBJRExFLgotCi0tIElzc3VlICMxNzc5ODogQWxsb3cgSURMRSB0byBlZGl0IG5ldyBmaWxlcyB3aGVuIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUuCi0KLS0gSXNzdWUgIzE0NzM1OiBVcGRhdGUgSURMRSBkb2NzIHRvIG9taXQgIkNvbnRyb2wteiBvbiBXaW5kb3dzIi4KLQotLSBJc3N1ZSAjMTc1ODU6IEZpeGVkIElETEUgcmVncmVzc2lvbi4gTm93IGNsb3NlcyB3aGVuIHVzaW5nIGV4aXQoKSBvciBxdWl0KCkuCi0KLS0gSXNzdWUgIzE3NjU3OiBTaG93IGZ1bGwgVGsgdmVyc2lvbiBpbiBJRExFJ3MgYWJvdXQgZGlhbG9nLgotICBQYXRjaCBieSBUb2RkIFJvdml0by4KLQotLSBJc3N1ZSAjMTc2MTM6IFByZXZlbnQgdHJhY2ViYWNrIHdoZW4gcmVtb3Zpbmcgc3ludGF4IGNvbG9yaXplciBpbiBJRExFLgotCi0tIElzc3VlICMxMjA3NTg5OiBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBwYXRjaCBmb3IgcmlnaHQtY2xpY2sgbWVudSBpbiBJRExFLgotCi0tIElzc3VlICMxNjg4NzogSURMRSBub3cgYWNjZXB0cyBDYW5jZWwgaW4gdGFiaWZ5L3VudGFiaWZ5IGRpYWxvZyBib3guCi0KLS0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KLQotLSBJc3N1ZSAjMTQyNTQ6IElETEUgbm93IGhhbmRsZXMgcmVhZGxpbmUgY29ycmVjdGx5IGFjcm9zcyBzaGVsbCByZXN0YXJ0cy4KLQotLSBJc3N1ZSAjMTc2MTQ6IElETEUgbm8gbG9uZ2VyIHJhaXNlcyBleGNlcHRpb24gd2hlbiBxdWlja2x5IGNsb3NpbmcgYSBmaWxlLgotCi0tIElzc3VlICM2Njk4OiBJRExFIG5vdyBvcGVucyBqdXN0IGFuIGVkaXRvciB3aW5kb3cgd2hlbiBjb25maWd1cmVkIHRvIGRvIHNvLgotCi0tIElzc3VlICM4OTAwOiBVc2luZyBrZXlib2FyZCBzaG9ydGN1dHMgaW4gSURMRSB0byBvcGVuIGEgZmlsZSBubyBsb25nZXIKLSAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjNjY0OTogRml4ZWQgbWlzc2luZyBleGl0IHN0YXR1cyBpbiBJRExFLiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotVGVzdHMKLS0tLS0tCistIElzc3VlICMxNzk5MjogQWRkIHRpbWVvdXRzIHRvIGFzeW5jb3JlIGFuZCBhc3luY2hhdCB0ZXN0cyBzbyB0aGF0IHRoZXkgd29uJ3QKKyAgYWNjaWRlbnRhbGx5IGhhbmcuCiAKIC0gSXNzdWUgIzE3ODMzOiBGaXggdGVzdF9nZGIgZmFpbHVyZXMgc2VlbiBvbiBtYWNoaW5lcyB3aGVyZSBkZWJ1ZyBzeW1ib2xzCiAgIGZvciBnbGliYyBhcmUgYXZhaWxhYmxlIChzZWVuIG9uIFBQQzY0IExpbnV4KS4KQEAgLTg2MCw2ICsyNDY0LDkgQEAKIC0gSXNzdWUgIzc4NTU6IEFkZCB0ZXN0cyBmb3IgY3R5cGVzL3dpbnJlZyBmb3IgaXNzdWVzIGZvdW5kIGluIElyb25QeXRob24uCiAgIEluaXRpYWwgcGF0Y2ggYnkgRGlubyBWaWVobGFuZC4KIAorLSBJc3N1ZSAjMTEwNzg6IHRlc3RfX19hbGxfXyBub3cgY2hlY2tzIGZvciBkdXBsaWNhdGVzIGluIF9fYWxsX18uCisgIEluaXRpYWwgcGF0Y2ggYnkgUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlICMxNzcxMjogRml4IHRlc3RfZ2RiIGZhaWx1cmVzIG9uIFVidW50dSAxMy4wNC4KIAogLSBJc3N1ZSAjMTc4MzU6IEZpeCB0ZXN0X2lvIHdoZW4gdGhlIGRlZmF1bHQgT1MgcGlwZSBidWZmZXIgc2l6ZSBpcyBsYXJnZXIKQEAgLTg3MSw2ICsyNDc4LDkgQEAKIC0gSXNzdWUgIzEyODIwOiBhZGQgdGVzdHMgZm9yIHRoZSB4bWwuZG9tLm1pbmljb21wYXQgbW9kdWxlLgogICBQYXRjaCBieSBKb2huIENoYW5kbGVyIGFuZCBQaGlsIENvbm5lbGwuCiAKKy0gSXNzdWUgIzE3NjkxOiB0ZXN0X3VuaXZuZXdsaW5lcyBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KKyAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCiAtIElzc3VlICMxNzc5MDogdGVzdF9zZXQgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIApAQCAtODg5LDcxNSArMjQ5OSw3IEBACiAtIElzc3VlICMxNzY5MjogdGVzdF9zcWxpdGUgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIAotLSBJc3N1ZSAjMTc4NDM6IFJlbW92ZWQgYnoyIHRlc3QgZGF0YSBmaWxlIHRoYXQgd2FzIHRyaWdnZXJpbmcgZmFsc2UtcG9zaXRpdmUKLSAgdmlydXMgd2FybmluZ3Mgd2l0aCBjZXJ0YWluIGFudGl2aXJ1cyBzb2Z0d2FyZS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNTk0MDogU3BlY2lmeSBlZmZlY3Qgb2YgbG9jYWxlIG9uIHRpbWUgZnVuY3Rpb25zLgotCi0tIElzc3VlICM2Njk2OiBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFByb2ZpbGUgb2JqZWN0cywgYW5kIGltcHJvdmUKLSAgcHJvZmlsZS9jUHJvZmlsZSBkb2NzLiAgUGF0Y2ggYnkgVG9tIFBpbmNrbmV5LgotCi0tIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQotICBjb2RlY3Mub3BlbigpLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTc1NDc6IEluIGNvbmZpZ3VyZSwgZXhwbGljaXRseSBwYXNzIC1XZm9ybWF0IGZvciB0aGUgYmVuZWZpdCBmb3IgR0NDCi0gIDQuOC4KLQotLSBJc3N1ZSAjMTc5NjI6IEJ1aWxkIHdpdGggT3BlblNTTCAxLjAuMWUgb24gV2luZG93cy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwNy1BcHItMjAxMyoKLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTUwOiBGaXggdGhlIC0tZW5hYmxlLXByb2ZpbGluZyBjb25maWd1cmUgc3dpdGNoLgotCi1JRExFCi0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMSByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjQtTWFyLTIwMTMqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNzMyODogRml4IHBvc3NpYmxlIHJlZmxlYWsgaW4gZGljdC5zZXRkZWZhdWx0LgotCi0tIElzc3VlICMxNzIyMzogRml4IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgpIGZvciBzdHJpbmcgb2YgMSBjaGFyYWN0ZXIgb3V0c2lkZQotICB0aGUgcmFuZ2UgVSswMDAwLVUrMTBmZmZmLgotCi0tIElzc3VlICMxNjkyMzM1OiBNb3ZlIGluaXRpYWwgYXJncyBhc3NpZ25tZW50IHRvCi0gIEJhc2VFeGNlcHRpb24uX19uZXdfXyB0byBoZWxwIHBpY2tsaW5nIG9mIG5haXZlIHN1YmNsYXNzZXMuCi0KLS0gSXNzdWUgIzE3Mjc1OiBDb3JyZWN0ZWQgY2xhc3MgbmFtZSBpbiBpbml0IGVycm9yIG1lc3NhZ2VzIG9mIHRoZSBDIHZlcnNpb24gb2YKLSAgQnVmZmVyZWRXcml0ZXIgYW5kIEJ1ZmZlcmVkUmFuZG9tLgotCi0tIElzc3VlICM3OTYzOiBGaXhlZCBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2UgdGhhdCBpc3N1ZWQgd2hlbiBvYmplY3QgaXMKLSAgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLgotCi0tIElzc3VlICM1MzA4OiBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gbWFyc2hhbGxpbmcgdG9vIGxhcmdlIG9iamVjdCAoYSBzZXF1ZW5jZQotICB3aXRoIHNpemUgPj0gMioqMzEpLCBpbnN0ZWFkIG9mIHByb2R1Y2luZyBpbGxlZ2FsIG1hcnNoYWwgZGF0YS4KLQotLSBJc3N1ZSAjMTI5ODM6IEJ5dGVzIGxpdGVyYWxzIHdpdGggaW52YWxpZCBceCBlc2NhcGUgbm93IHJhaXNlIGEgU3ludGF4RXJyb3IKLSAgYW5kIGEgZnVsbCB0cmFjZWJhY2sgaW5jbHVkaW5nIGxpbmUgbnVtYmVyLgotCi0tIElzc3VlICMxNzE3MzogUmVtb3ZlIHVzZXMgb2YgbG9jYWxlLWRlcGVuZGVudCBDIGZ1bmN0aW9ucyAoaXNhbHBoYSgpIGV0Yy4pCi0gIGluIHRoZSBpbnRlcnByZXRlci4KLQotLSBJc3N1ZSAjMTcxMzc6IFdoZW4gYW4gVW5pY29kZSBzdHJpbmcgaXMgcmVzaXplZCwgdGhlIGludGVybmFsIHdpZGUgY2hhcmFjdGVyCi0gIHN0cmluZyAod3N0cikgZm9ybWF0IGlzIG5vdyBjbGVhcmVkLgotCi0tIElzc3VlICMxNzA0MzogVGhlIHVuaWNvZGUtaW50ZXJuYWwgZGVjb2RlciBubyBsb25nZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YKLSAgaW5wdXQgYnVmZmVyLgotCi0tIElzc3VlICMxNzA5ODogQWxsIG1vZHVsZXMgbm93IGhhdmUgX19sb2FkZXJfXyBzZXQgZXZlbiBpZiB0aGV5IHByZS1leGlzdCB0aGUKLSAgYm9vdHN0cmFwcGluZyBvZiBpbXBvcnRsaWIuCi0KLS0gSXNzdWUgIzE2OTc5OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVncyBpbiB0aGUgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCi0KLS0gSXNzdWUgIzEwMTU2OiBJbiB0aGUgaW50ZXJwcmV0ZXIncyBpbml0aWFsaXphdGlvbiBwaGFzZSwgdW5pY29kZSBnbG9iYWxzCi0gIGFyZSBub3cgaW5pdGlhbGl6ZWQgZHluYW1pY2FsbHkgYXMgbmVlZGVkLgotCi0tIElzc3VlICMxNjk4MDogRml4IHByb2Nlc3Npbmcgb2YgZXNjYXBlZCBub24tYXNjaWkgYnl0ZXMgaW4gdGhlCi0gIHVuaWNvZGUtZXNjYXBlLWRlY29kZSBkZWNvZGVyLgotCi0tIElzc3VlICMxNjk3NTogRml4IGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiB0aGUgZXNjYXBlLWRlY29kZSBieXRlcyBkZWNvZGVyLgotCi0tIElzc3VlICMxNDg1MDogTm93IGEgY2hhcm1hcCBkZWNvZGVyIHRyZWF0cyBVK0ZGRkUgYXMgInVuZGVmaW5lZCBtYXBwaW5nIgotICBpbiBhbnkgbWFwcGluZywgbm90IG9ubHkgaW4gYSBzdHJpbmcuCi0KLS0gSXNzdWUgIzE2NzMwOiBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgbm93IG5vIGxvbmdlcnMgcmFpc2VzIGFuCi0gIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBwb3B1bGF0ZSBpdHMgY2FjaGUgYW5kIGl0IGZpbmRzIG91dCB0aGUgZGlyZWN0b3J5IGlzCi0gIHVucmVhZGFibGUgb3IgaGFzIHR1cm5lZCBpbnRvIGEgZmlsZS4gUmVwb3J0ZWQgYW5kIGRpYWdub3NlZCBieQotICBEYXZpZCBQcml0Y2hhcmQuCi0KLS0gSXNzdWUgIzE2OTA2OiBGaXggYSBsb2dpYyBlcnJvciB0aGF0IHByZXZlbnRlZCBtb3N0IHN0YXRpYyBzdHJpbmdzIGZyb20gYmVpbmcKLSAgY2xlYXJlZC4KLQotLSBJc3N1ZSAjMTE0NjE6IEZpeCB0aGUgaW5jcmVtZW50YWwgVVRGLTE2IGRlY29kZXIuIE9yaWdpbmFsIHBhdGNoIGJ5Ci0gIEFtYXVyeSBGb3JnZW90IGQnQXJjLgotCi0tIElzc3VlICMxNjg1NjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gY2FsbGluZyByZXByKCkgb24gYSBkaWN0IHdpdGgKLSAgYSBrZXkgd2hvc2UgcmVwciByYWlzZSBhbiBleGNlcHRpb24uCi0KLS0gSXNzdWUgIzE2MzY3OiBGaXggRmlsZUlPLnJlYWRhbGwoKSBvbiBXaW5kb3dzIGZvciBmaWxlcyBsYXJnZXIgdGhhbiAyIEdCLgotCi0tIElzc3VlICMxNjQ1NTogT24gRnJlZUJTRCBhbmQgU29sYXJpcywgaWYgdGhlIGxvY2FsZSBpcyBDLCB0aGUKLSAgQVNDSUkvc3Vycm9nYXRlZXNjYXBlIGNvZGVjIGlzIG5vdyB1c2VkLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvCi0gIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBjaGFuZ2UgZml4ZXMgaW5jb25zaXN0ZW5jaWVzIHdpdGgKLSAgb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBiZWNhdXNlIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zIGFubm91bmNlcyBhbgotICBBU0NJSSBsb2NhbGUgZW5jb2RpbmcsIHdoZXJlYXMgdGhlIElTTy04ODU5LTEgZW5jb2RpbmcgaXMgdXNlZCBpbiBwcmFjdGljZS4KLQotLSBJc3N1ZSAjMTY3NjE6IENhbGxpbmcgaW50KCkgd2l0aCBiYXNlIGFyZ3VtZW50IG9ubHkgbm93IHJhaXNlcyBUeXBlRXJyb3IuCi0KLS0gSXNzdWUgIzE2NzU5OiBTdXBwb3J0IHRoZSBmdWxsIERXT1JEICh1bnNpZ25lZCBsb25nKSByYW5nZSBpbiBSZWcyUHkKLSAgd2hlbiByZXRyaWV2aW5nIGEgUkVHX0RXT1JEIHZhbHVlLiBUaGlzIGNvcnJlY3RzIGZ1bmN0aW9ucyBsaWtlCi0gIHdpbnJlZy5RdWVyeVZhbHVlRXggdGhhdCBtYXkgaGF2ZSBiZWVuIHJldHVybmluZyB0cnVuY2F0ZWQgdmFsdWVzLgotCi0tIElzc3VlICMxNDQyMDogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUHkyUmVnCi0gIHdoZW4gcGFzc2VkIGEgUkVHX0RXT1JEIHZhbHVlLiBGaXhlcyBPdmVyZmxvd0Vycm9yIGluIHdpbnJlZy5TZXRWYWx1ZUV4LgotCi0tIElzc3VlICMxNjU5NzogSW4gYnVmZmVyZWQgYW5kIHRleHQgSU8sIGNhbGwgY2xvc2UoKSBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0KLSAgaWYgaW52b2tpbmcgZmx1c2goKSBmYWlscy4KLQotLSBJc3N1ZSAjMTY3MjI6IEluIHRoZSBieXRlcygpIGNvbnN0cnVjdG9yLCB0cnkgdG8gY2FsbCBfX2J5dGVzX18gb24gdGhlCi0gIGFyZ3VtZW50IGJlZm9yZSBfX2luZGV4X18uCi0KLS0gSXNzdWUgIzE2NjAyOiBXaGVuIGEgd2Vha3JlZidzIHRhcmdldCB3YXMgcGFydCBvZiBhIGxvbmcgZGVhbGxvY2F0aW9uCi0gIGNoYWluLCB0aGUgb2JqZWN0IGNvdWxkIHJlbWFpbiByZWFjaGFibGUgdGhyb3VnaCBpdHMgd2Vha3JlZiBldmVuIHRob3VnaAotICBpdHMgcmVmY291bnQgaGFkIGRyb3BwZWQgdG8gemVyby4KLQotLSBJc3N1ZSAjMTY0MTY6IE9uIE1hYyBPUyBYLCBvcGVyYXRpbmcgc3lzdGVtIGRhdGEgYXJlIG5vdyBhbHdheXMKLSAgZW5jb2RlZC9kZWNvZGVkIHRvL2Zyb20gVVRGLTgvc3Vycm9nYXRlZXNjYXBlLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcKLSAgKHdoaWNoIG1heSBiZSBBU0NJSSBpZiBubyBsb2NhbGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KSwgdG8gYXZvaWQKLSAgaW5jb25zaXN0ZW5jaWVzIHdpdGggb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBmdW5jdGlvbnMgd2hpY2ggYXJlCi0gIGFscmVhZHkgdXNpbmcgVVRGLTgvc3Vycm9nYXRlZXNjYXBlLgotCi0tIElzc3VlICMxNjU4ODogU2lsZW5jZSB1bnVzZWQtYnV0LXNldCB3YXJuaW5ncyBpbiBQeXRob24vdGhyZWFkX3B0aHJlYWQKLQotLSBJc3N1ZSAjMTY1NDY6IEZpeDogYXN0LllpZWxkRnJvbSBhcmd1bWVudCBpcyBub3cgbWFuZGF0b3J5LgotCi0tIElzc3VlICMxNjUxNDogRml4IHJlZ3Jlc3Npb24gY2F1c2luZyBhIHRyYWNlYmFjayB3aGVuIHN5cy5wYXRoWzBdIGlzIE5vbmUKLSAgKGFjdHVhbGx5LCBhbnkgbm9uLXN0cmluZyBvciBub24tYnl0ZXMgdHlwZSkuCi0KLS0gSXNzdWUgIzE2MzA2OiBGaXggbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB1bmtub3duIGNvbW1hbmQgbGluZQotICBwYXJhbWV0ZXJzIHdoZXJlIHBhc3NlZCB0byB0aGUgaW50ZXJwcmV0ZXIuICBQYXRjaCBieSBIaWV1IE5ndXllbi4KLQotLSBJc3N1ZSAjMTYyMTU6IEZpeCBwb3RlbnRpYWwgZG91YmxlIG1lbW9yeSBmcmVlIGluIHN0ci5yZXBsYWNlKCkuICBQYXRjaAotICBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQ1MzogRml4IGVxdWFsaXR5IHRlc3Rpbmcgb2YgZGVhZCB3ZWFrcmVmIG9iamVjdHMuCi0KLS0gSXNzdWUgIzk1MzU6IEZpeCBwZW5kaW5nIHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnV0IG5vdCB5ZXQKLSAgaGFuZGxlZCBieSBQeXRob24gdG8gbm90IHBlcnNpc3QgYWZ0ZXIgb3MuZm9yaygpIGluIHRoZSBjaGlsZCBwcm9jZXNzLgotCi0tIElzc3VlICMxNTAwMTogZml4IHNlZ2ZhdWx0IG9uICJkZWwgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10iLiBQYXRjaCBieSBWaWN0b3IKLSAgU3Rpbm5lci4KLQotLSBJc3N1ZSAjODI3MTogdGhlIHV0Zi04IGRlY29kZXIgbm93IG91dHB1dHMgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIFUrRkZGRAotICBjaGFyYWN0ZXJzIHdoZW4gdXNlZCB3aXRoIHRoZSAncmVwbGFjZScgZXJyb3IgaGFuZGxlciBvbiBpbnZhbGlkIHV0Zi04Ci0gIHNlcXVlbmNlcy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EsIHRlc3RzIGJ5IEV6aW8gTWVsb3R0aS4KLQotLSBJc3N1ZSAjNTc2NTogQXBwbHkgYSBoYXJkIHJlY3Vyc2lvbiBsaW1pdCBpbiB0aGUgY29tcGlsZXIgaW5zdGVhZCBvZgotICBibG93aW5nIHRoZSBzdGFjayBhbmQgc2VnZmF1bHRpbmcuIEluaXRpYWwgcGF0Y2ggYnkgQW5kcmVhIEdyaWZmaW5pLgotCi0tIElzc3VlICMxNjQwMjogV2hlbiBzbGljaW5nIGEgcmFuZ2UsIGZpeCBzaGFkb3dpbmcgb2YgZXhjZXB0aW9ucyBmcm9tCi0gIF9faW5kZXhfXy4KLQotLSBJc3N1ZSAjMTYzMzY6IGZpeCBpbnB1dCBjaGVja2luZyBpbiB0aGUgc3Vycm9nYXRlcGFzcyBlcnJvciBoYW5kbGVyLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICM4NDAxOiBhc3NpZ25pbmcgYW4gaW50IHRvIGEgYnl0ZWFycmF5IHNsaWNlIChlLmcuIGJbMzo0XSA9IDUpIG5vdwotICByYWlzZXMgYW4gZXJyb3IuCi0KLS0gRml4IHNlZ2ZhdWx0cyBvbiBzZXR0aW5nIF9fcXVhbG5hbWVfXyBvbiBidWlsdGluIHR5cGVzIGFuZCBhdHRlbXB0aW5nIHRvCi0gIGRlbGV0ZSBpdCBvbiBhbnkgdHlwZS4KLQotLSBJc3N1ZSAjMTYzNDU6IEZpeCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gYGBmcm9ta2V5c2BgIG9uIGEgZGljdCBzdWJjbGFzcwotICByZWNlaXZlZCBhIG5vbmVtcHR5IGRpY3QgZnJvbSB0aGUgY29uc3RydWN0b3IuCi0KLS0gSXNzdWUgIzE2MjcxOiBGaXggc3RyYW5nZSBidWdzIHRoYXQgcmVzdWx0ZWQgZnJvbSBfX3F1YWxuYW1lX18gYXBwZWFyaW5nIGluIGEKLSAgY2xhc3MncyBfX2RpY3RfXyBhbmQgb24gdHlwZS4KLQotLSBJc3N1ZSAjNjA3NDogRW5zdXJlIGNhY2hlZCBieXRlY29kZSBmaWxlcyBjYW4gYWx3YXlzIGJlIHVwZGF0ZWQgYnkgdGhlCi0gIHVzZXIgdGhhdCBjcmVhdGVkIHRoZW0sIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGUgaXMgcmVhZC1vbmx5LgotCi0tIElzc3VlICMxNDc4MzogSW1wcm92ZSBpbnQoKSBkb2NzdHJpbmcgYW5kIHN3aXRjaCBkb2NzdHJpbmdzIGZvciBzdHIoKSwKLSAgcmFuZ2UoKSwgYW5kIHNsaWNlKCkgdG8gdXNlIG11bHRpLWxpbmUgc2lnbmF0dXJlcy4KLQotLSBJc3N1ZSAjMTYxNjA6IFN1YmNsYXNzIHN1cHBvcnQgbm93IHdvcmtzIGZvciB0eXBlcy5TaW1wbGVOYW1lc3BhY2UuCi0KLS0gSXNzdWUgIzE1Mzc5OiBGaXggcGFzc2luZyBvZiBub24tQk1QIGNoYXJhY3RlcnMgYXMgaW50ZWdlcnMgZm9yIHRoZSBjaGFybWFwCi0gIGRlY29kZXIgKGFscmVhZHkgd29ya2luZyBhcyB1bmljb2RlIHN0cmluZ3MpLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTUxNDQ6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gaGFuZGxpbmcgcG9pbnRlcnMgYXMgaW50ZWdlcgotICB2YWx1ZXMsIGJ5IHVzaW5nIGBQeV91aW50cHRyX3RgIGluc3RlYWQgb2YgYHNpemVfdGAuICBQYXRjaCBieSBTZXJoaXkKLSAgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTk2NTogRXhwbGljaXRseSBjYXN0IGBBVF9GRENXRGAgYXMgKGludCkuICBSZXF1aXJlZCBvbiBTb2xhcmlzIDEwCi0gICh3aGljaCBkZWZpbmVzIGBBVF9GRENXRGAgYXMgYGAweGZmZDE5NTUzYGApLCBoYXJtbGVzcyBvbiBvdGhlciBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzE1ODM5OiBDb252ZXJ0IFN5c3RlbUVycm9ycyBpbiBgc3VwZXIoKWAgdG8gUnVudGltZUVycm9ycy4KLQotLSBJc3N1ZSAjMTU4NDY6IEZpeCBTeXN0ZW1FcnJvciB3aGljaCBoYXBwZW5lZCB3aGVuIHVzaW5nIGBhc3QucGFyc2UoKWAgaW4gYW4KLSAgZXhjZXB0aW9uIGhhbmRsZXIgb24gY29kZSB3aXRoIHN5bnRheCBlcnJvcnMuCi0KLS0gSXNzdWUgIzE1ODAxOiBNYWtlIHN1cmUgbWFwcGluZ3MgcGFzc2VkIHRvICclJyBmb3JtYXR0aW5nIGFyZSBhY3R1YWxseQotICBzdWJzY3JpcHRhYmxlLgotCi0tIElzc3VlICMxNTExMTogX19pbXBvcnRfXyBzaG91bGQgbGV0IEltcG9ydEVycm9yIHByb3BhZ2F0ZSB3aGVuIGEgbW9kdWxlIHRoYXQKLSAgaXMgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCBvZiB1c2luZyBmcm9tbGlzdCB0cmllcyB0byBpbXBvcnQgYSBtb2R1bGUKLSAgdGhhdCBjYW5ub3QgYmUgZm91bmQuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc1NDA6IEFkZGVkIHN0eWxlIHRvIGZvcm1hdHRlciBjb25maWd1cmF0aW9uIGJ5IGRpY3QuCi0KLS0gSXNzdWUgIzE3NTM2OiBBZGQgdG8gd2ViYnJvd3NlcidzIGJyb3dzZXIgbGlzdDogd3d3LWJyb3dzZXIsIHgtd3d3LWJyb3dzZXIsCi0gIGljZXdlYXNlbCwgaWNlYXBlLgotCi0tIElzc3VlICMxNzQ4ODogQ2hhbmdlIHRoZSBzdWJwcm9jZXNzLlBvcGVuIGJ1ZnNpemUgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWUKLSAgZnJvbSB1bmJ1ZmZlcmVkICgwKSB0byBidWZmZXJpbmcgKC0xKSB0byBtYXRjaCB0aGUgYmVoYXZpb3IgZXhpc3RpbmcgY29kZQotICBleHBlY3RzIGFuZCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluIFB5dGhvbiAyIHRvIGF2b2lkCi0gIGludHJvZHVjaW5nIGhhcmQgdG8gdHJhY2sgZG93biBidWdzLgotCi0tIElzc3VlICMxNzUyMTogQ29ycmVjdGVkIG5vbi1lbmFibGluZyBvZiBsb2dnZXIgZm9sbG93aW5nIHR3byBjYWxscyB0bwotICBmaWxlQ29uZmlnKCkuCi0KLS0gSXNzdWUgIzE3NTA4OiBDb3JyZWN0ZWQgTWVtb3J5SGFuZGxlciBjb25maWd1cmF0aW9uIGluIGRpY3RDb25maWcoKSB3aGVyZQotICB0aGUgdGFyZ2V0IGhhbmRsZXIgd2Fzbid0IGNvbmZpZ3VyZWQgZmlyc3QuCi0KLS0gSXNzdWUgIzE3MjA5OiBjdXJzZXMud2luZG93LmdldF93Y2goKSBub3cgaGFuZGxlcyBjb3JyZWN0bHkgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgKENUUkwrYykuCi0KLS0gSXNzdWUgIzU3MTM6IHNtdHBsaWIgbm93IGhhbmRsZXMgNDIxIChjbG9zaW5nIGNvbm5lY3Rpb24pIGVycm9yIGNvZGVzIHdoZW4KLSAgc2VuZGluZyBtYWlsIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBhbmQgcmVwb3J0aW5nIHRoZSA0MjEgZXJyb3IgY29kZSB2aWEgdGhlCi0gIGV4Y2VwdGlvbiBhcHByb3ByaWF0ZSB0byB0aGUgY29tbWFuZCB0aGF0IHJlY2VpdmVkIHRoZSBlcnJvciByZXNwb25zZS4KLQotLSBJc3N1ZSAjMTcxOTI6IFVwZGF0ZSB0aGUgY3R5cGVzIG1vZHVsZSdzIGxpYmZmaSB0byB2My4wLjEzLiAgVGhpcwotICBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgc3RhY2sgbWlzYWxpZ25tZW50IGlzc3VlIG9uIHg4NiBhbmQgaXNzdWVzIG9uCi0gIHNvbWUgbW9yZSByZWNlbnQgcGxhdGZvcm1zLgotCi0tIElzc3VlICM4ODYyOiBGaXhlZCBjdXJzZXMgY2xlYW51cCB3aGVuIGdldGtleSBpcyBpbnRlcnJwdXRlZCBieSBhIHNpZ25hbC4KLQotLSBJc3N1ZSAjMTc0NDM6IGltYXBsaWIuSU1BUDRfc3RyZWFtIHdhcyB1c2luZyB0aGUgZGVmYXVsdCB1bmJ1ZmZlcmVkIElPCi0gIGluIHN1YnByb2Nlc3MsIGJ1dCB0aGUgaW1hcCBjb2RlIGFzc3VtZXMgYnVmZmVyZWQgSU8uICBJbiBQeXRob24yIHRoaXMKLSAgd29ya2VkIGJ5IGFjY2lkZW50LiAgSU1BUDRfc3RyZWFtIG5vdyBleHBsaWNpdGx5IHVzZXMgYnVmZmVyZWQgSU8uCi0KLS0gSXNzdWUgIzE3NDc2OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdW5kb2N1bWVudGVkIHB5ZG9jCi0gICdhbGxtZXRob2RzJzsgaXQgd2FzIG1pc3NpbmcgdW5ib3VuZCBtZXRob2RzIG9uIHRoZSBjbGFzcy4KLQotLSBJc3N1ZSAjMTY4ODA6IERvIG5vdCBhc3N1bWUgX2ltcC5sb2FkX2R5bmFtaWMoKSBpcyBkZWZpbmVkIGluIHRoZSBpbXAgbW9kdWxlLgotCi0tIElzc3VlICMxNjM4OTogRml4ZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbiAzLjEgaW4gdGhlCi0gIGNhY2hpbmcgb2YgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucy4KLQotLSBJc3N1ZSAjMTc0MzE6IEZpeCBtaXNzaW5nIGltcG9ydCBvZiBCeXRlc0ZlZWRQYXJzZXIgaW4gZW1haWwucGFyc2VyLgotCi0tIElzc3VlICMxMjg1MDg2OiBHZXQgcmlkIG9mIHRoZSByZWZjb3VudGluZyBoYWNrIGFuZCBzcGVlZCB1cAotICB1cmxsaWIucGFyc2UudW5xdW90ZSgpIGFuZCB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcygpLgotCi0tIElzc3VlICMxNzM2ODogRml4IGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIFB5dGhvbiBKU09OIGRlY29kZXIgdGhhdCBjYXVzZWQKLSAgYSBmYWlsdXJlIHdoaWxlIGRlY29kaW5nIGVtcHR5IG9iamVjdCBsaXRlcmFscyB3aGVuIG9iamVjdF9wYWlyc19ob29rIHdhcwotICBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzE0NjQ1OiBUaGUgZW1haWwgZ2VuZXJhdG9yIGNsYXNzZXMgbm93IHByb2R1Y2Ugb3V0cHV0IHVzaW5nIHRoZQotICBzcGVjaWZpZWQgbGluZXNlcCB0aHJvdWdob3V0LiAgUHJldmlvdXNseSBpZiB0aGUgcHJvbG9nLCBlcGlsb2csIG9yCi0gIGJvZHkgd2VyZSBzdG9yZWQgd2l0aCBhIGRpZmZlcmVudCBsaW5lc2VwLCB0aGF0IGxpbmVzZXAgd2FzIHVzZWQuICBUaGlzCi0gIGZpeCBjb3JyZWN0cyBhbiBSRkMgbm9uLWNvbXBsaWFuY2UgaXNzdWUgd2l0aCBzbXRwbGliLnNlbmRfbWVzc2FnZS4KLQotLSBJc3N1ZSAjMTcyNzg6IEZpeCBhIGNyYXNoIGluIGhlYXBxLmhlYXBwdXNoKCkgYW5kIGhlYXBxLmhlYXBwb3AoKSB3aGVuCi0gIHRoZSBsaXN0IGlzIGJlaW5nIHJlc2l6ZWQgY29uY3VycmVudGx5LgotCi0tIElzc3VlICMxNjk2MjogVXNlIGdldGRlbnRzNjQgaW5zdGVhZCBvZiB0aGUgb2Jzb2xldGUgZ2V0ZGVudHMgc3lzY2FsbAotICBpbiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgb24gTGludXguCi0KLS0gSXNzdWUgIzE3MDE4OiBNYWtlIFByb2Nlc3Muam9pbigpIHJldHJ5IGlmIG9zLndhaXRwaWQoKSBmYWlscyB3aXRoIEVJTlRSLgotCi0tIElzc3VlICMxNzIyMzogYXJyYXkgbW9kdWxlOiBGaXggYSBjcmFzaGVyIHdoZW4gY29udmVydGluZyBhbiBhcnJheSBjb250YWluaW5nCi0gIGludmFsaWQgY2hhcmFjdGVycyAob3V0c2lkZSByYW5nZSBbVSswMDAwOyBVKzEwZmZmZl0pIHRvIFVuaWNvZGU6Ci0gIHJlcHIoYXJyYXkpLCBzdHIoYXJyYXkpIGFuZCBhcnJheS50b3VuaWNvZGUoKS4gUGF0Y2ggd3JpdHRlbiBieSBNYW51ZWwgSmFjb2IuCi0KLS0gSXNzdWUgIzE0NzIwOiBzcWxpdGUzOiBDb252ZXJ0IGRhdGV0aW1lIG1pY3Jvc2Vjb25kcyBjb3JyZWN0bHkuCi0gIFBhdGNoIGJ5IExvd2UgVGhpZGVybWFuLgotCi0tIElzc3VlICMxNzIyNTogSlNPTiBkZWNvZGVyIG5vdyBjb3VudHMgY29sdW1ucyBpbiB0aGUgZmlyc3QgbGluZSBzdGFydGluZwotICB3aXRoIDEsIGFzIGluIG90aGVyIGxpbmVzLgotCi0tIElzc3VlICMxMzcwMDogRml4IGJ5dGUvc3RyaW5nIGhhbmRsaW5nIGluIGltYXBsaWIgYXV0aGVudGljYXRpb24gd2hlbiBhbgotICBhdXRob2JqZWN0IGlzIHNwZWNpZmllZC4KLQotLSBJc3N1ZSAjMTMxNTM6IFRraW50ZXIgZnVuY3Rpb25zIG5vdyByYWlzZSBUY2xFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3Igd2hlbgotICBhIHN0cmluZyBhcmd1bWVudCBjb250YWlucyBub24tQk1QIGNoYXJhY3Rlci4KLQotLSBJc3N1ZSAjOTY2OTogUHJvdGVjdCByZSBhZ2FpbnN0IGluZmluaXRlIGxvb3BzIG9uIHplcm8td2lkdGggbWF0Y2hpbmcgaW4KLSAgbm9uLWdyZWVkeSByZXBlYXQuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzEzMTY5OiBUaGUgbWF4aW1hbCByZXBldGl0aW9uIG51bWJlciBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBoYXMgYmVlbgotICBpbmNyZWFzZWQgZnJvbSA2NTUzNCB0byAyMTQ3NDgzNjQ3IChvbiAzMi1iaXQgcGxhdGZvcm0pIG9yIDQyOTQ5NjcyOTQgKG9uCi0gIDY0LWJpdCkuCi0KLS0gSXNzdWUgIzE3MTQzOiBGaXggYSBtaXNzaW5nIGltcG9ydCBpbiB0aGUgdHJhY2UgbW9kdWxlLiAgSW5pdGlhbCBwYXRjaCBieQotICBCZXJrZXIgUGVrc2FnLgotCi0tIElzc3VlICMxNjc0MzogRml4IG1tYXAgb3ZlcmZsb3cgY2hlY2sgb24gMzIgYml0IFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2ODAwOiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkgbm8gbG9uZ2VyIGxlZnQgdGVtcG9yYXJ5IGZpbGVzIHdoZW4KLSAgdGhlIGRpc2sgaXMgZnVsbC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFtaXIgU3pla2VseS4KLQotLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCi0gIGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0IHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgotCi0tIElzc3VlICMxNzA1MjogdW5pdHRlc3QgZGlzY292ZXJ5IHNob3VsZCB1c2Ugc2VsZi50ZXN0TG9hZGVyLgotCi0tIElzc3VlICM0NTkxOiBVaWQgYW5kIGdpZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMioqMzEgYXJlIHN1cHBvcnRlZCBub3cuCi0KLS0gSXNzdWUgIzE3MTQxOiByYW5kb20udm9ubWlzZXN2YXJpYXRlKCkgbm8gbW9yZSBoYW5ncyBmb3IgbGFyZ2Uga2FwcGFzLgotCi0tIElzc3VlICMxNzE0OTogRml4IHJhbmRvbS52b25taXNlc3ZhcmlhdGUgdG8gYWx3YXlzIHJldHVybiByZXN1bHRzIGluCi0gIFswLCAyKm1hdGgucGldLgotCi0tIElzc3VlICMxNDcwNTQ4OiBYTUxHZW5lcmF0b3Igbm93IHdvcmtzIHdpdGggYmluYXJ5IG91dHB1dCBzdHJlYW1zLgotCi0tIElzc3VlICM2OTc1OiBvcy5wYXRoLnJlYWxwYXRoKCkgbm93IGNvcnJlY3RseSByZXNvbHZlcyBtdWx0aXBsZSBuZXN0ZWQKLSAgc3ltbGlua3Mgb24gUE9TSVggcGxhdGZvcm1zLgotCi0tIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKLSAgZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3Agd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCi0KLS0gSXNzdWUgIzEwMzU1OiBJbiBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjbGFzcyBtb2RlLCBuYW1lLCBlbmNvZGluZyBhbmQKLSAgbmV3bGluZXMgcHJvcGVydGllcyBub3cgd29yayBmb3IgdW5yb2xsZWQgZmlsZXMuICBPYnNvbGV0ZWQgYW5kIG5ldmVyCi0gIHdvcmtpbmcgb24gUHl0aG9uIDMgeHJlYWRsaW5lIG1ldGhvZCBub3cgcmVtb3ZlZC4KLQotLSBJc3N1ZSAjMTY2ODY6IEZpeGVkIGEgbG90IG9mIGJ1Z3MgaW4gYXVkaW9vcCBtb2R1bGUuICBGaXhlZCBjcmFzaGVzIGluCi0gIGF2Z3BwKCksIG1heHBwKCkgYW5kIHJhdGVjdigpLiAgRml4ZWQgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBhZGQoKSwgYmlhcygpLAotICBhbmQgcmF0ZWN2KCkuICByZXZlcnNlKCksIGxpbjJsaW4oKSBhbmQgcmF0ZWN2KCkgbm8gbW9yZSBsb3NlIHByZWNpc2lvbiBmb3IKLSAgMzItYml0IHNhbXBsZXMuICBtYXgoKSBhbmQgcm1zKCkgbm8gbW9yZSByZXR1cm5zIGEgbmVnYXRpdmUgcmVzdWx0IGFuZAotICB2YXJpb3VzIG90aGVyIGZ1bmN0aW9ucyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCAzMi1iaXQgc2FtcGxlIC0weDgwMDAwMDAwLgotCi0tIElzc3VlICMxNzA3MzogRml4IHNvbWUgaW50ZWdlciBvdmVyZmxvd3MgaW4gc3FsaXRlMyBtb2R1bGUuCi0KLS0gSXNzdWUgIzE2NzIzOiBodHRwbGliLkhUVFBSZXNwb25zZSBubyBsb25nZXIgbWFya2VkIGNsb3NlZCB3aGVuIHRoZSBjb25uZWN0aW9uCi0gIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkLgotCi0tIElzc3VlICMxNjk0ODogRml4IHF1b3RlZCBwcmludGFibGUgYm9keSBlbmNvZGluZyBmb3Igbm9uLWxhdGluMSBjaGFyYWN0ZXIKLSAgc2V0cyBpbiB0aGUgZW1haWwgcGFja2FnZS4KLQotLSBJc3N1ZSAjMTY4MTE6IEZpeCBmb2xkaW5nIG9mIGhlYWRlcnMgd2l0aCBubyB2YWx1ZSBpbiB0aGUgcHJvdmlzaW9uYWwgZW1haWwKLSAgcG9saWNpZXMuCi0KLS0gSXNzdWUgIzE3MTMyOiBVcGRhdGUgc3ltYm9sIGZvciAieWllbGQgZnJvbSIgZ3JhbW1hciBjaGFuZ2VzLgotCi0tIElzc3VlICMxNzA3NjogTWFrZSBjb3B5aW5nIG9mIHhhdHRycyBtb3JlIHBlcm1pc3NpdmUgb2YgbWlzc2luZyBGUyBzdXBwb3J0LgotICBQYXRjaCBieSBUaG9tYXMgV291dGVycy4KLQotLSBJc3N1ZSAjMTcwODk6IEV4cGF0IHBhcnNlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggc3RyaW5nIGlucHV0IG5vdCBvbmx5IHdoZW4KLSAgYW4gaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIFVURi04IG9yIFVTLUFTQ0lJLiAgSXQgbm93IGFjY2VwdHMgYnl0ZXMgYW5kCi0gIHN0cmluZ3MgbGFyZ2VyIHRoYW4gMiBHaUIuCi0KLS0gSXNzdWUgIzYwODM6IEZpeCBtdWx0aXBsZSBzZWdtZW50YXRpb24gZmF1bHRzIG9jY3VyZWQgd2hlbiBQeUFyZ19QYXJzZVR1cGxlCi0gIHBhcnNlcyBuZXN0ZWQgbXV0YXRpbmcgc2VxdWVuY2UuCi0KLS0gSXNzdWUgIzUyODk6IEZpeCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkgb24gU29sYXJpcy4KLQotLSBJc3N1ZSAjMTcxMDY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiBpby5UZXh0SU9XcmFwcGVyIHdoZW4gYW4gdW5kZXJseWluZwotICBzdHJlYW0gb3IgYSBkZWNvZGVyIHByb2R1Y2VzIGRhdGEgb2YgYW4gdW5leHBlY3RlZCB0eXBlIChpLmUuIHdoZW4KLSAgaW8uVGV4dElPV3JhcHBlciBpbml0aWFsaXplZCB3aXRoIHRleHQgc3RyZWFtIG9yIHVzZSBieXRlcy10by1ieXRlcyBjb2RlYykuCi0KLS0gSXNzdWUgIzE1NjMzOiBodHRwbGliLkhUVFBSZXNwb25zZSBpcyBub3cgbWFyayBjbG9zZWQgd2hlbiB0aGUgc2VydmVyCi0gIHNlbmRzIGxlc3MgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBDb250ZW50LUxlbmd0aC4KLQotLSBJc3N1ZSAjMTIyNjg6IFRoZSBpbyBtb2R1bGUgZmlsZSBvYmplY3Qgd3JpdGUgbWV0aG9kcyBubyBsb25nZXIgYWJvcnQgZWFybHkKLSAgd2hlbiBvbmUgb2YgaXRzIHdyaXRlIHN5c3RlbSBjYWxscyBpcyBpbnRlcnJ1cHRlZCAoRUlOVFIpLgotCi0tIElzc3VlICM2OTcyOiBUaGUgemlwZmlsZSBtb2R1bGUgbm8gbG9uZ2VyIG92ZXJ3cml0ZXMgZmlsZXMgb3V0c2lkZSBvZgotICBpdHMgZGVzdGluYXRpb24gcGF0aCB3aGVuIGV4dHJhY3RpbmcgbWFsaWNpb3VzIHppcCBmaWxlcy4KLQotLSBJc3N1ZSAjNDg0NDogWmlwRmlsZSBub3cgcmFpc2VzIEJhZFppcEZpbGUgd2hlbiBvcGVucyBhIFpJUCBmaWxlIHdpdGggYW4KLSAgaW5jb21wbGV0ZSAiRW5kIG9mIENlbnRyYWwgRGlyZWN0b3J5IiByZWNvcmQuICBPcmlnaW5hbCBwYXRjaCBieSBHdWlsaGVybWUKLSAgUG9sbyBhbmQgQWxhbiBNY0ludHlyZS4KLQotLSBJc3N1ZSAjMTcwNzE6IFNpZ25hdHVyZS5iaW5kKCkgbm93IHdvcmtzIHdoZW4gb25lIG9mIHRoZSBrZXl3b3JkIGFyZ3VtZW50cwotICBpcyBuYW1lZCBgYHNlbGZgYC4KLQotLSBJc3N1ZSAjMTIwMDQ6IEZpeCBhbiBpbnRlcm5hbCBlcnJvciBpbiBQeVppcEZpbGUgd2hlbiB3cml0aW5nIGFuIGludmFsaWQKLSAgUHl0aG9uIGZpbGUuICBQYXRjaCBieSBCZW4gTW9yZ2FuLgotCi0tIElzc3VlICMxNjAyMTMzOiBvbiBNYWMgT1MgWCBhIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIChgYC0tZW5hYmxlLXNoYXJlZGBgKQotICBub3cgZmlsbHMgdGhlIGBgb3MuZW52aXJvbmBgIHZhcmlhYmxlIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjMTU1MDU6IGB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcmAgbm8gbG9uZ2VyIGFzc3VtZXMgU0lHSU5UIGhhbmRsZXIgaXMKLSAgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LgotCi0tIElzc3VlICMxMzQ1NDogRml4IGEgY3Jhc2ggd2hlbiBkZWxldGluZyBhbiBpdGVyYXRvciBjcmVhdGVkIGJ5IGl0ZXJ0b29scy50ZWUoKQotICBpZiBhbGwgb3RoZXIgaXRlcmF0b3JzIHdlcmUgdmVyeSBhZHZhbmNlZCBiZWZvcmUuCi0KLS0gSXNzdWUgIzEyNDExOiBGaXggdG8gY2dpLnBhcnNlX211bHRpcGFydCB0byBjb3JyZWN0bHkgdXNlIGJ5dGVzIGJvdW5kYXJpZXMKLSAgYW5kIGJ5dGVzIGRhdGEuIFBhdGNoIGJ5IEpvbmFzIFdhZ25lci4KLQotLSBJc3N1ZSAjMTY5NTc6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBzZWFyY2hlcyBhIGJhcmUgZmlsZSBuYW1lIGluIHRoZQotICBjdXJyZW50IGRpcmVjdG9yeSBvbiBVbml4IGFuZCBubyBsb25nZXIgc2VhcmNoZXMgYSByZWxhdGl2ZSBmaWxlIHBhdGggd2l0aAotICBhIGRpcmVjdG9yeSBwYXJ0IGluIFBBVEggZGlyZWN0b3JpZXMuICBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KLQotLSBJc3N1ZSAjMTY5OTM6IHNodXRpbC53aGljaCgpIG5vdyBwcmVzZXJ2ZXMgdGhlIGNhc2Ugb2YgdGhlIHBhdGggYW5kIGV4dGVuc2lvbgotICBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNjk5MjogT24gV2luZG93cyBpbiBzaWduYWwuc2V0X3dha2V1cF9mZCwgdmFsaWRhdGUgdGhlIGZpbGUKLSAgZGVzY3JpcHRvciBhcmd1bWVudC4KLQotLSBJc3N1ZSAjMTY0MjI6IEZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFB5dGhvbiB2ZXJzaW9uLCB0aGUgQyB2ZXJzaW9uIG9mCi0gIGRlY2ltYWwgbm93IHVzZXMgc3RyaW5ncyBpbnN0ZWFkIG9mIGludGVnZXJzIGZvciByb3VuZGluZyBtb2RlIGNvbnN0YW50cy4KLQotLSBJc3N1ZSAjMTU4NjE6IHRraW50ZXIgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIGxpc3RzIGFuZCB0dXBsZXMgY29udGFpbmluZwotICBzdHJpbmdzIHdpdGggd2hpdGVzcGFjZXMsIGJhY2tzbGFzaGVzIG9yIHVuYmFsYW5jZWQgYnJhY2VzLgotCi0tIElzc3VlICMxMDUyNzogVXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGZvciBtdWx0aXByb2Nlc3NpbmcgcGlwZXMuCi0KLS0gSXNzdWUgIzk3MjA6IHppcGZpbGUgbm93IHdyaXRlcyBjb3JyZWN0IGxvY2FsIGhlYWRlcnMgZm9yIGZpbGVzIGxhcmdlciB0aGFuCi0gIDQgR2lCLgotCi0tIElzc3VlICMxNjk1NTogRml4IHRoZSBwb2xsKCkgbWV0aG9kIGZvciBtdWx0aXByb2Nlc3NpbmcncyBzb2NrZXQKLSAgY29ubmVjdGlvbnMgb24gV2luZG93cy4KLQotLSBTU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zKCkgbm93IHByb3Blcmx5IGNsb3NlcyB0aGUgaW5wdXQgZmlsZS4KLQotLSBJc3N1ZSAjMTY5MDA6IElzc3VlIGEgUmVzb3VyY2VXYXJuaW5nIHdoZW4gYW4gc3NsIHNvY2tldCBpcyBsZWZ0IHVuY2xvc2VkLgotCi0tIElzc3VlICMxMzg5OTogXEEsIFxaLCBhbmQgXEIgbm93IGNvcnJlY3RseSBtYXRjaCB0aGUgQSwgWiwgYW5kIEIgbGl0ZXJhbHMKLSAgd2hlbiB1c2VkIGluc2lkZSBjaGFyYWN0ZXIgY2xhc3NlcyAoZS5nLiAnW1xBXScpLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgotCi0tIElzc3VlICMxNTU0NTogRml4IHJlZ3Jlc3Npb24gaW4gc3FsaXRlMydzIGl0ZXJkdW1wIG1ldGhvZCB3aGVyZSBpdCB3YXMKLSAgZmFpbGluZyBpZiB0aGUgY29ubmVjdGlvbiB1c2VkIGEgcm93IGZhY3RvcnkgKHN1Y2ggYXMgc3FsaXRlMy5Sb3cpIHRoYXQKLSAgcHJvZHVjZWQgdW5zb3J0YWJsZSBvYmplY3RzLiAoUmVncmVzc2lvbiB3YXMgaW50cm9kdWNlZCBieSBmaXggZm9yIDk3NTApLgotCi0tIElzc3VlICMxNTk3MjogRml4IGVycm9yIG1lc3NhZ2VzIHdoZW4gb3MgZnVuY3Rpb25zIGV4cGVjdGluZyBhIGZpbGUgbmFtZSBvcgotICBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSB0aGUgaW5jb3JyZWN0IHR5cGUuCi0KLS0gSXNzdWUgIzE2ODI4OiBGaXggZXJyb3IgaW5jb3JyZWN0bHkgcmFpc2VkIGJ5IGJ6Mi5jb21wcmVzcyhiJycpIGFuZAotICBiejIuQloyQ29tcHJlc3Nvci5jb21wcmVzcyhiJycpLiBJbml0aWFsIHBhdGNoIGJ5IE1hcnRpbiBQYWNrbWFuLgotCi0tIElzc3VlICMxNjU0MTogdGtfc2V0UGFsZXR0ZSgpIG5vdyB3b3JrcyB3aXRoIGtleXdvcmQgYXJndW1lbnRzLgotCi0tIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgcGFyc2VyLnBvcGl0ZW0oKWAgbm8gbG9uZ2VyIHJhaXNlcyBWYWx1ZUVycm9yLgotICBUaGlzIG1ha2VzIGBwYXJzZXIuY2xlYW4oKWAgd29yayBjb3JyZWN0bHkuCi0KLS0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydzZWN0aW9uJ10gPSB7fWBgIG5vdyBwcmVzZXJ2ZXMKLSAgc2VjdGlvbiBvcmRlciB3aXRoaW4gdGhlIHBhcnNlci4gVGhpcyBtYWtlcyBgcGFyc2VyLnVwZGF0ZSgpYCBwcmVzZXJ2ZSBzZWN0aW9uCi0gIG9yZGVyIGFzIHdlbGwuCi0KLS0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydERUZBVUxUJ10gPSB7fWBgIG5vdyBjb3JyZWN0bHkKLSAgY2xlYXJzIHByZXZpb3VzIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbi4gU2FtZSBnb2VzIGZvcgotICBgYHBhcnNlci51cGRhdGUoeydERUZBVUxUJzoge319KWBgLgotCi0tIElzc3VlICM5NTg2OiBSZWRlZmluZSBTRU1fRkFJTEVEIG9uIE1hY09TWCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5LgotCi0tIElzc3VlICMxMDUyNzogbWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGlmIGF2YWlsYWJsZS4KLQotLSBJc3N1ZSAjMTY2ODg6IE5vdyByZWdleGVzIGNvbnRhaW5lZCBiYWNrcmVmZXJlbmNlcyBjb3JyZWN0bHkgd29yayB3aXRoCi0gIG5vbi1BU0NJSSBzdHJpbmdzLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgotCi0tIElzc3VlICMxNjQ4NTogTm93IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpZiBmaWxlIGhlYWRlciBwYXRjaGluZyBmYWlsZWQKLSAgb24gY2xvc2luZyBhbiBhaWZjIGZpbGUuCi0KLS0gSXNzdWUgIzE2MTY1OiBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbm8gbG9uZ2VyIGJsb2NrcyBhIHNjaGVkdWxlciBmb3Igb3RoZXIKLSAgdGhyZWFkcy4KLQotLSBJc3N1ZSAjMTY2NDE6IERlZmF1bHQgdmFsdWVzIG9mIHNjaGVkLnNjaGVkdWxlci5lbnRlcigpIGFyZSBubyBsb25nZXIKLSAgbW9kaWZpYWJsZS4KLQotLSBJc3N1ZSAjMTY2MTg6IE1ha2UgZ2xvYi5nbG9iIG1hdGNoIGNvbnNpc3RlbnRseSBhY3Jvc3Mgc3RyaW5ncyBhbmQgYnl0ZXMKLSAgcmVnYXJkaW5nIGxlYWRpbmcgZG90cy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NzEzOiBQYXJzaW5nIG9mICd0ZWwnIHVybHMgdXNpbmcgdXJscGFyc2Ugc2VwYXJhdGVzIHBhcmFtcyBmcm9tCi0gIHBhdGguCi0KLS0gSXNzdWUgIzE2NDQzOiBBZGQgZG9jc3RyaW5ncyB0byByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggb2JqZWN0cy4KLSAgUGF0Y2ggYnkgQW50b24gS2FzeWFub3YuCi0KLS0gSXNzdWUgIzE1NzAxOiBGaXggSFRUUEVycm9yIGluZm8gbWV0aG9kIGNhbGwgdG8gcmV0dXJuIHRoZSBoZWFkZXJzIGluZm9ybWF0aW9uLgotCi0tIElzc3VlICMxNjc1MjogQWRkIGEgbWlzc2luZyBpbXBvcnQgdG8gbW9kdWxlZmluZGVyLiBQYXRjaCBieSBCZXJrZXIgUGVrc2FnLgotCi0tIElzc3VlICMxNjY0NjogZnRwbGliLkZUUC5tYWtlcG9ydCgpIG1pZ2h0IGxvc2Ugc29ja2V0IGVycm9yIGRldGFpbHMuCi0gIChwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthKQotCi0tIElzc3VlICMxNjYyNjogRml4IGluZmluaXRlIHJlY3Vyc2lvbiBpbiBnbG9iLmdsb2IoKSBvbiBXaW5kb3dzIHdoZW4gdGhlCi0gIHBhdHRlcm4gY29udGFpbnMgYSB3aWxkY2FyZCBpbiB0aGUgZHJpdmUgb3IgVU5DIHBhdGguICBQYXRjaCBieSBTZXJoaXkKLSAgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTc4MzogRXhjZXB0IGZvciB0aGUgbnVtYmVyIG1ldGhvZHMsIHRoZSBDIHZlcnNpb24gb2YgZGVjaW1hbCBub3cKLSAgc3VwcG9ydHMgYWxsIE5vbmUgZGVmYXVsdCB2YWx1ZXMgcHJlc2VudCBpbiBkZWNpbWFsLnB5LiBUaGVzZSB2YWx1ZXMgd2VyZQotICBsYXJnZWx5IHVuZG9jdW1lbnRlZC4KLQotLSBJc3N1ZSAjMTYyOTg6IEluIEhUVFBSZXNwb25zZS5yZWFkKCksIGNsb3NlIHRoZSBzb2NrZXQgd2hlbiB0aGVyZSBpcyBubwotICBDb250ZW50LUxlbmd0aCBhbmQgdGhlIGluY29taW5nIHN0cmVhbSBpcyBmaW5pc2hlZC4gIFBhdGNoIGJ5IEVyYW4KLSAgUnVuZHN0ZWluLgotCi0tIElzc3VlICMxNTg3MjogRml4IDMuMyByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgdGhlIG5ldyBmZC1iYXNlZCBzaHV0aWwucm10cmVlCi0gIHRoYXQgY2F1c2VkIGl0IHRvIG5vdCBpZ25vcmUgY2VydGFpbiBlcnJvcnMgd2hlbiBpZ25vcmVfZXJyb3JzIHdhcyBzZXQuCi0gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEgYW5kIFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MjQ4OiBEaXNhYmxlIGNvZGUgZXhlY3V0aW9uIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBieQotICB0a2ludGVyIHdoZW4gdGhlIC1FIGZsYWcgaXMgcGFzc2VkIHRvIFB5dGhvbi4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KLQotLSBJc3N1ZSAjMTY2Mjg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIGN0eXBlcy5yZXNpemUoKS4KLQotLSBJc3N1ZSAjMTM2MTQ6IEZpeCBzZXR1cC5weSByZWdpc3RlciBmYWlsdXJlIHdpdGggaW52YWxpZCByc3QgaW4gZGVzY3JpcHRpb24uCi0gIFBhdGNoIGJ5IEp1bGllbiBDb3VydGVhdSBhbmQgUGllcnJlIFBhdWwgTGVmZWJ2cmUuCi0KLS0gSXNzdWUgIzEzNTEyOiBDcmVhdGUgfi8ucHlwaXJjIHNlY3VyZWx5IChDVkUtMjAxMS00OTQ0KS4gIEluaXRpYWwgcGF0Y2ggYnkKLSAgUGhpbGlwIEplbnZleSwgdGVzdGVkIGJ5IE1hZ2VpYSBhbmQgRGViaWFuLgotCi0tIElzc3VlICM3NzE5OiBNYWtlIGRpc3R1dGlscyBpZ25vcmUgYGAubmZzKmBgIGZpbGVzIGluc3RlYWQgb2YgY2hva2luZyBsYXRlcgotICBvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2lsZW50R2hvc3QgYW5kIEplZmYgUmFtbmFuaS4KLQotLSBJc3N1ZSAjMTMxMjA6IEFsbG93IHRvIGNhbGwgcGRiLnNldF90cmFjZSgpIGZyb20gdGhyZWFkLgotICBQYXRjaCBieSBJbHlhIFNhbmRsZXIuCi0KLS0gSXNzdWUgIzE2NTg1OiBNYWtlIENKSyBlbmNvZGVycyBzdXBwb3J0IGVycm9yIGhhbmRsZXJzIHRoYXQgcmV0dXJuIGJ5dGVzIHBlcgotICBQRVAgMzgzLgotCi0tIElzc3VlICMxMDE4MjogVGhlIHJlIG1vZHVsZSBkb2Vzbid0IHRydW5jYXRlIGluZGljZXMgdG8gMzIgYml0cyBhbnltb3JlLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjU3MzogSW4gMnRvMywgdHJlYXQgZW51bWVyYXRlKCkgbGlrZSBhIGNvbnN1bWluZyBjYWxsLCBzbyBzdXBlcmZsdW91cwotICBsaXN0KCkgY2FsbHMgYXJlbid0IGFkZGVkIHRvIGZpbHRlcigpLCBtYXAoKSwgYW5kIHppcCgpIHdoaWNoIGFyZSBkaXJlY3RseQotICBwYXNzZWQgZW51bWVyYXRlKCkuCi0KLS0gSXNzdWUgIzEyODQ4OiBUaGUgcHVyZSBQeXRob24gcGlja2xlIGltcGxlbWVudGF0aW9uIG5vdyB0cmVhdHMgb2JqZWN0Ci0gIGxlbmd0aHMgYXMgdW5zaWduZWQgMzItYml0IGludGVnZXJzLCBsaWtlIHRoZSBDIGltcGxlbWVudGF0aW9uIGRvZXMuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NDA4OiBGaXggZmlsZSBkZXNjcmlwdG9ycyBub3QgYmVpbmcgY2xvc2VkIGluIGVycm9yIGNvbmRpdGlvbnMKLSAgaW4gdGhlIHppcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY0ODE6IG11bHRpcHJvY2Vzc2luZyBubyBsb25nZXIgbGVha3MgcHJvY2VzcyBoYW5kbGVzIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2MTQwOiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIGRvdWJsZSBjbG9zZXMgaXRzIGNoaWxkCi0gIHN1YnByb2Nlc3MuUElQRSBwYXJlbnQgZmlsZSBkZXNjcmlwdG9ycyBvbiBjaGlsZCBlcnJvciBwcmlvciB0byBleGVjKCkuCi0KLS0gUmVtb3ZlIGEgYmFyZSBwcmludCB0byBzdGRvdXQgZnJvbSB0aGUgc3VicHJvY2VzcyBtb2R1bGUgdGhhdCBjb3VsZCBoYXZlCi0gIGhhcHBlbmVkIGlmIHRoZSBjaGlsZCBwcm9jZXNzIHdyb3RlIGdhcmJhZ2UgdG8gaXRzIHByZS1leGVjIGVycm9yIHBpcGUuCi0KLS0gSXNzdWUgIzE2MzI3OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIGxlYWtzIGZpbGUgZGVzY3JpcHRvcnMKLSAgdXNlZCBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciBwaXBlcyB0byB0aGUgY2hpbGQgd2hlbiBmb3JrKCkgZmFpbHMuCi0KLS0gSXNzdWUgIzE0Mzk2OiBIYW5kbGUgdGhlIG9kZCByYXJlIGNhc2Ugb2Ygd2FpdHBpZCByZXR1cm5pbmcgMCB3aGVuIG5vdAotICBleHBlY3RlZCBpbiBzdWJwcm9jZXNzLlBvcGVuLndhaXQoKS4KLQotLSBJc3N1ZSAjMTY0MTE6IEZpeCBhIGJ1ZyB3aGVyZSB6bGliLmRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG1pZ2h0IHRyeSB0byBhY2Nlc3MKLSAgcHJldmlvdXNseS1mcmVlZCBtZW1vcnkuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MzU3OiBmaXggY2FsbGluZyBhY2NlcHQoKSBvbiBhIFNTTFNvY2tldCBjcmVhdGVkIHRocm91Z2gKLSAgU1NMQ29udGV4dC53cmFwX3NvY2tldCgpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgSmVmZiBNY05laWwuCi0KLS0gSXNzdWUgIzE2NDA5OiBUaGUgcmVwb3J0aG9vayBjYWxsYmFjayBtYWRlIGJ5IHRoZSBsZWdhY3kKLSAgdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUgQVBJIG5vdyBwcm9wZXJseSBzdXBwbGllcyBhIGNvbnN0YW50IG5vbi16ZXJvCi0gIGJsb2NrX3NpemUgYXMgaXQgZGlkIGluIFB5dGhvbiAzLjIgYW5kIDIuNy4gIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YKLSAgdXJsbGliLnJlcXVlc3QuVVJMb3BlbmVyLnJldHJpZXZlLgotCi0tIElzc3VlICMxNjQzMTogVXNlIHRoZSB0eXBlIGluZm9ybWF0aW9uIHdoZW4gY29uc3RydWN0aW5nIGEgRGVjaW1hbCBzdWJ0eXBlCi0gIGZyb20gYSBEZWNpbWFsIGFyZ3VtZW50LgotCi0tIElzc3VlICMxNjM1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBhY2N1bXVsYXRlcyBkYXRhIGZyb20KLSAgc3VjY2Vzc2l2ZSBjYWxscyBhZnRlciBFT0YgaW4gdW51c2VkX2RhdGEsIGluc3RlYWQgb2Ygb25seSBzYXZpbmcgdGhlIGFyZ3VtZW50Ci0gIHRvIHRoZSBsYXN0IGNhbGwuIGRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG5vdyBjb3JyZWN0bHkgc2V0cyB1bnVzZWRfZGF0YSBhbmQKLSAgdW5jb25zdW1lZF90YWlsLiBBIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgTWVtb3J5RXJyb3Igd2hlbiBzZXR0aW5nIHRoZQotICB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlIGhhcyBhbHNvIGJlZW4gZml4ZWQuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzEyNzU5OiBzcmVfcGFyc2Ugbm93IHJhaXNlcyBhIHByb3BlciBlcnJvciB3aGVuIHRoZSBuYW1lIG9mIHRoZSBncm91cAotICBpcyBtaXNzaW5nLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjE1MjogZml4IHRva2VuaXplIHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGNvZGUgd2hlbgotICBubyBuZXdsaW5lIGlzIGZvdW5kLiAgUGF0Y2ggYnkgTmVkIEJhdGNoZWxkZXIuCi0KLS0gSXNzdWUgIzE2MjMwOiBGaXggYSBjcmFzaCBpbiBzZWxlY3Quc2VsZWN0KCkgd2hlbiBvbmUgdGhlIGxpc3RzIGNoYW5nZXMKLSAgc2l6ZSB3aGlsZSBpdGVyYXRlZCBvbi4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MjI4OiBGaXggYSBjcmFzaCBpbiB0aGUganNvbiBtb2R1bGUgd2hlcmUgYSBsaXN0IGNoYW5nZXMgc2l6ZQotICB3aGlsZSBpdCBpcyBiZWluZyBlbmNvZGVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTQ4OTc6IEVuaGFuY2UgZXJyb3IgbWVzc2FnZXMgb2Ygc3RydWN0LnBhY2sgYW5kCi0gIHN0cnVjdC5wYWNrX2ludG8uIFBhdGNoIGJ5IE1hdHRpIE3DpGtpLgotCi0tIElzc3VlICMxMjg5MDogY2dpdGIgbm8gbG9uZ2VyIHByaW50cyBzcHVyaW91cyA8cD4gdGFncyBpbiB0ZXh0Ci0gIG1vZGUgd2hlbiB0aGUgbG9nZGlyIG9wdGlvbiBpcyBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzE2MzA3OiBGaXggbXVsdGlwcm9jZXNzaW5nLlBvb2wubWFwX2FzeW5jIG5vdCBjYWxsaW5nIGl0cyBjYWxsYmFja3MuCi0gIFBhdGNoIGJ5IEphbm5lIEthcmlsYS4KLQotLSBJc3N1ZSAjMTYyNTA6IEZpeCBVUkxFcnJvciBpbnZvY2F0aW9uIHdpdGggcHJvcGVyIGFyZ3MuCi0KLS0gSXNzdWUgIzE2MTE2OiBGaXggaW5jbHVkZSBhbmQgbGlicmFyeSBwYXRocyB0byBiZSBjb3JyZWN0IHdoZW4gYnVpbGRpbmcgQwotICBleHRlbnNpb25zIGluIHZlbnZzLgotCi0tIElzc3VlICMxNjI0NTogRml4IHRoZSB2YWx1ZSBvZiBhIGZldyBlbnRpdGllcyBpbiBodG1sLmVudGl0aWVzLmh0bWw1LgotCi0tIElzc3VlICMxNDM5ODogRml4IHNpemUgdHJ1bmNhdGlvbiBhbmQgb3ZlcmZsb3cgYnVncyBpbiB0aGUgYnoyIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTYyMjA6IHdzZ2lyZWYgbm93IGFsd2F5cyBjYWxscyBjbG9zZSgpIG9uIGFuIGl0ZXJhYmxlIHJlc3BvbnNlLgotICBQYXRjaCBieSBCcmVudCBUdWJicy4KLQotLSBJc3N1ZSAjMTYyNzA6IHVybGxpYiBtYXkgaGFuZyB3aGVuIHVzZWQgZm9yIHJldHJpZXZpbmcgZmlsZXMgdmlhIEZUUCBieSB1c2luZwotICBhIGNvbnRleHQgbWFuYWdlci4gIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnLgotCi0tIElzc3VlICMxNjQ2MTogV2F2ZSBsaWJyYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGRlYWwgd2l0aCA0R0Igd2F2IGZpbGVzLAotICBhbmQgc2FtcGxlIHJhdGUgb2YgNDQxMDAgSHouCi0KLS0gSXNzdWUgIzE2MTc2OiBQcm9wZXJseSBpZGVudGlmeSBXaW5kb3dzIDggdmlhIHBsYXRmb3JtLnBsYXRmb3JtKCkKLQotLSBJc3N1ZSAjMTYxMTQ6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgcHJvdmlkZXMgYSBtaXNsZWFkaW5nIGVycm9yCi0gIG1lc3NhZ2Ugc3RhdGluZyB0aGF0IGFyZ3NbMF0gZGlkIG5vdCBleGlzdCB3aGVuIGVpdGhlciB0aGUgY3dkIG9yIGV4ZWN1dGFibGUKLSAga2V5d29yZCBhcmd1bWVudHMgc3BlY2lmaWVkIGEgcGF0aCB0aGF0IGRpZCBub3QgZXhpc3QuCi0KLS0gSXNzdWUgIzE2MTY5OiBGaXggY3R5cGVzLldpbkVycm9yKCkncyBjb25mdXNpb24gYmV0d2VlbiBlcnJubyBhbmQgd2luZXJyb3IuCi0KLS0gSXNzdWUgIzE2MDc2OiBNYWRlIF9lbGVtZW50dHJlZS5FbGVtZW50IHBpY2tsZWFibGUgaW4gYSB3YXkgdGhhdCBpcyBjb21wYXRpYmxlCi0gIHdpdGggdGhlIFB5dGhvbiBFbGVtZW50LiBQaWNrbGluZy91bnBpY2tsaW5nIG9mIHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Ci0gIHdvcmtzIGFnYWluIC0gdGhpcyB3YXMgYSB0ZW1wb3JhcnkgcmVncmVzc2lvbiBmcm9tIDMuMiB3aGVyZSB0aGUgYnktZGVmYXVsdAotICBpbXBvcnRlZCBfZWxlbWVudHRyZWUgaGFkIG5vIHBpY2tsaW5nIGNhcGFiaWxpdHkuCi0KLS0gSXNzdWUgIzE2MDg5OiBBbGxvdyBFbGVtZW50VHJlZS5UcmVlQnVpbGRlciB0byB3b3JrIGFnYWluIHdpdGggYSBub24tRWxlbWVudAotICBlbGVtZW50X2ZhY3RvcnkgKGZpeGVzIGEgcmVncmVzc2lvbiBpbiBTaW1wbGVUQUwpLgotCi0tIElzc3VlICMxNjkxMzogRml4IEVsZW1lbnQuaXRlcnRleHQoKSdzIGhhbmRsaW5nIG9mIHRleHQgd2l0aCBYTUwgZW50aXRpZXMuLAotCi0tIElzc3VlICMxNjAzNDogRml4IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGluIHRoZSBuZXcgYGJ6Mi5CWjJGaWxlYAotICBpbXBsZW1lbnRhdGlvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYxMTI6IHBsYXRmb3JtLmFyY2hpdGVjdHVyZSBkb2VzIG5vdCBjb3JyZWN0bHkgZXNjYXBlIGFyZ3VtZW50IHRvCi0gIC91c3IvYmluL2ZpbGUuICBQYXRjaCBieSBEYXZpZCBCZW5qYW1pbi4KLQotLSBJc3N1ZSAjMTU3NTY6IGBzdWJwcm9jZXNzLnBvbGwoKWAgbm93IHByb3Blcmx5IGhhbmRsZXMgYGVycm5vLkVDSElMRGAgdG8KLSAgcmV0dXJuIGEgcmV0dXJuY29kZSBvZiAwIHdoZW4gdGhlIGNoaWxkIGhhcyBhbHJlYWR5IGV4aXRlZCBvciBjYW5ub3QgYmUgd2FpdGVkCi0gIG9uLgotCi0tIElzc3VlICMxNTMyMzogSW1wcm92ZSBmYWlsdXJlIG1lc3NhZ2Ugb2YgYE1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKWAuCi0KLS0gSXNzdWUgIzE2MDY0OiBgYHVuaXR0ZXN0IC1tYGAgY2xhaW1zIGV4ZWN1dGFibGUgaXMgInB5dGhvbiIsIG5vdCAicHl0aG9uMyIuCi0KLS0gSXNzdWUgIzEyMzc2OiBQYXNzIG9uIHBhcmFtZXRlcnMgaW4gYFRleHRUZXN0UmVzdWx0Ll9faW5pdF9fKClgIHN1cGVyIGNhbGwuCi0KLS0gSXNzdWUgIzE1MjIyOiBJbnNlcnQgYmxhbmsgbGluZSBhZnRlciBlYWNoIG1lc3NhZ2UgaW4gbWJveCBtYWlsYm94ZXMuCi0KLS0gSXNzdWUgIzE2MDEzOiBGaXggYGNzdi5SZWFkZXJgIHBhcnNpbmcgaXNzdWUgd2l0aCBlbmRpbmcgcXVvdGUgY2hhcmFjdGVycy4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTU0MjE6IEZpeCBhbiBPdmVyZmxvd0Vycm9yIGluIGBDYWxlbmRhci5pdGVybW9udGhkYXRlcygpYCBhZnRlcgotICBgZGF0ZXRpbWUuTUFYWUVBUmAuICBQYXRjaCBieSBDw6lkcmljIEtyaWVyLgotCi0tIElzc3VlICMxNTk3MDogYHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgbm93IHNlcmlhbGl6ZXMgY29ycmVjdGx5IHRoZSBlbXB0eSBIVE1MCi0gIGVsZW1lbnRzICdtZXRhJyBhbmQgJ3BhcmFtJy4KLQotLSBJc3N1ZSAjMTU4NDI6IFRoZSBgU29ja2V0SU8ue3JlYWRhYmxlLHdyaXRhYmxlLHNlZWthYmxlfWAgbWV0aG9kcyBub3cgcmFpc2UKLSAgVmFsdWVFcnJvciB3aGVuIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGlzIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCi0KLS0gSXNzdWUgIzE1ODc2OiBGaXggYSByZWZsZWFrIGluIHRoZSBgY3Vyc2VzYCBtb2R1bGU6IHdpbmRvdy5lbmNvZGluZy4KLQotLSBJc3N1ZSAjMTU4ODE6IEZpeCBgYXRleGl0YCBob29rIGluIGBtdWx0aXByb2Nlc3NpbmdgLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2hyaXMKLSAgTWNEb25vdWdoLgotCi0tIElzc3VlICMxNTg0MTogVGhlIHJlYWRhYmxlKCksIHdyaXRhYmxlKCkgYW5kIHNlZWthYmxlKCkgbWV0aG9kcyBvZgotICBgaW8uQnl0ZXNJT2AgYW5kIGBpby5TdHJpbmdJT2Agb2JqZWN0cyBub3cgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHRoZSBvYmplY3QKLSAgaGFzIGJlZW4gY2xvc2VkLiAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYS4KLQotLSBJc3N1ZSAjMTU0NDc6IFVzZSBgc3VicHJvY2Vzcy5ERVZOVUxMYCBpbiB3ZWJicm93c2VyLCBpbnN0ZWFkIG9mIG9wZW5pbmcKLSAgYG9zLmRldm51bGxgIGV4cGxpY2l0bHkgYW5kIGxlYXZpbmcgaXQgb3Blbi4KLQotLSBJc3N1ZSAjMTU1MDk6IGB3ZWJicm93c2VyLlVuaXhCcm93c2VyYCBubyBsb25nZXIgcGFzc2VzIGVtcHR5IGFyZ3VtZW50cyB0bwotICBQb3BlbiB3aGVuIGBgJWFjdGlvbmBgIHN1YnN0aXR1dGlvbnMgcHJvZHVjZSBlbXB0eSBzdHJpbmdzLgotCi0tIElzc3VlICMxMjc3NiwgaXNzdWUgIzExODM5OiBDYWxsIGBhcmdwYXJzZWAgdHlwZSBmdW5jdGlvbiAoc3BlY2lmaWVkIGJ5Ci0gIGFkZF9hcmd1bWVudCkgb25seSBvbmNlLiAgQmVmb3JlLCB0aGUgdHlwZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHR3aWNlIGluIHRoZQotICBjYXNlIHdoZXJlIHRoZSBkZWZhdWx0IHdhcyBzcGVjaWZpZWQgYW5kIHRoZSBhcmd1bWVudCB3YXMgZ2l2ZW4gYXMgd2VsbC4gIFRoaXMKLSAgd2FzIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgZm9yIHRoZSBGaWxlVHlwZSB0eXBlLCBhcyBhIGRlZmF1bHQgZmlsZSB3b3VsZAotICBhbHdheXMgYmUgb3BlbmVkLCBldmVuIGlmIGEgZmlsZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0KLS0gSXNzdWUgIzE1OTA2OiBGaXggYSByZWdyZXNzaW9uIGluIGBhcmdwYXJzZWAgY2F1c2VkIGJ5IHRoZSBwcmVjZWRpbmcgY2hhbmdlLAotICB3aGVuIGBgYWN0aW9uPSdhcHBlbmQnYGAsIGBgdHlwZT0nc3RyJ2BgIGFuZCBgYGRlZmF1bHQ9W11gYC4KLQotSURMRQotLS0tLQotCi0tIElzc3VlICMxNzExNDogSURMRSBub3cgdXNlcyBub24tc3RyaWN0IGNvbmZpZyBwYXJzZXIuCi0KLS0gSXNzdWUgIzkyOTA6IEluIElETEUgdGhlIHN5cy5zdGQqIHN0cmVhbXMgbm93IGltcGxlbWVudCBpby5UZXh0SU9CYXNlCi0gIGludGVyZmFjZSBhbmQgc3VwcG9ydCBhbGwgbWFuZGF0b3J5IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuCi0KLS0gSXNzdWUgIzE2ODI5OiBJRExFIHByaW50aW5nIG5vIGxvbmdlciBmYWlscyBpZiB0aGVyZSBhcmUgc3BhY2VzIG9yIG90aGVyCi0gIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBwYXRoLgotCi0tIElzc3VlICMxNjQ5MTogSURMRSBub3cgcHJpbnRzIGNoYWluZWQgZXhjZXB0aW9uIHRyYWNlYmFja3MuCi0KLS0gSXNzdWUgIzE2ODE5OiBJRExFIG1ldGhvZCBjb21wbGV0aW9uIG5vdyBjb3JyZWN0bHkgd29ya3MgZm9yIGJ5dGVzIGxpdGVyYWxzLgotCi0tIElzc3VlICMxNjUwNDogSURMRSBub3cgY2F0Y2hlcyBTeW50YXhFcnJvcnMgcmFpc2VkIGJ5IHRva2VuaXplci4gUGF0Y2ggYnkKLSAgUm9nZXIgU2Vyd3kuCi0KLS0gSXNzdWUgIzE2NTExOiBVc2UgZGVmYXVsdCBJRExFIHdpZHRoIGFuZCBoZWlnaHQgaWYgY29uZmlnIHBhcmFtIGlzIG5vdCB2YWxpZC4KLSAgUGF0Y2ggU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTIwNzU4OTogQWRkIEN1dC9Db3B5L1Bhc3RlIGl0ZW1zIHRvIElETEUgcmlnaHQgY2xpY2sgQ29udGV4dCBNZW51Ci0gIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgotCi1UZXN0cwotLS0tLS0KKy0gSXNzdWUgIzExOTk1OiB0ZXN0X3B5ZG9jIGRvZXNuJ3QgaW1wb3J0IGFsbCBzeXMucGF0aCBtb2R1bGVzIGFueW1vcmUuCiAKIC0gSXNzdWUgIzE3NDQ4OiB0ZXN0X3NheCBub3cgc2tpcHMgaWYgdGhlcmUgYXJlIG5vIHhtbCBwYXJzZXJzIGF2YWlsYWJsZQogICBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gSW1wb3J0RXJyb3IuCkBAIC0xNjE2LDggKzI1MTgsMTUgQEAKIAogLSBJc3N1ZSAjMTM4OTg6IHRlc3Rfc3NsIG5vIGxvbmdlciBwcmludHMgYSBzcHVyaW91cyBzdGFjayB0cmFjZSBvbiBVYnVudHUuCiAKKy0gSXNzdWUgIzE3MjgzOiBTaGFyZSBjb2RlIGJldHdlZW4gYF9fbWFpbl9fLnB5YCBhbmQgYHJlZ3J0ZXN0LnB5YCBpbgorICBgTGliL3Rlc3RgLgorCiAtIElzc3VlICMxNzI0OTogY29udmVydCBhIHRlc3QgaW4gdGVzdF9jYXBpIHRvIHVzZSB1bml0dGVzdCBhbmQgcmVhcCB0aHJlYWRzLgogCistIElzc3VlICMxNzEwNzogVGVzdCBjbGllbnQtc2lkZSBTTkkgc3VwcG9ydCBpbiB1cmxsaWIucmVxdWVzdCB0aGFua3MgdG8KKyAgdGhlIG5ldyBzZXJ2ZXItc2lkZSBTTkkgc3VwcG9ydCBpbiB0aGUgc3NsIG1vZHVsZS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgRGFuaWVsIEJsYWNrLgorCiAtIElzc3VlICMxNzA0MTogRml4IHRlc3Rpbmcgd2hlbiBQeXRob24gaXMgY29uZmlndXJlZCB3aXRoIHRoZQogICAtLXdpdGhvdXQtZG9jLXN0cmluZ3MuCiAKQEAgLTE2MjUsNiArMjUzNCw4IEBACiAKIC0gSXNzdWUgIzE1NTM5OiBBZGRlZCByZWdyZXNzaW9uIHRlc3RzIGZvciBUb29scy9zY3JpcHRzL3BpbmRlbnQucHkuCiAKKy0gSXNzdWUgIzE2ODM2OiBFbmFibGUgSVB2NiBzdXBwb3J0IGV2ZW4gaWYgSVB2NiBpcyBkaXNhYmxlZCBvbiB0aGUgYnVpbGQgaG9zdC4KKwogLSBJc3N1ZSAjMTc0Nzk6IHRlc3RfaW8gbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIApAQCAtMTY4NCw2ICsyNTk1LDExIEBACiAKIC0gSXNzdWUgIzE2NzQ4OiB0ZXN0X2hlYXBxIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgogCistIElzc3VlICMxMDY0NjogVGVzdHMgcmVhcnJhbmdlZCBmb3Igb3Muc2FtZWZpbGUvc2FtZXN0YXQgdG8gY2hlY2sgZm9yIG5vdAorICBqdXN0IHN5bWxpbmtzIGJ1dCBhbHNvIGhhcmQgbGlua3MuCisKKy0gSXNzdWUgIzE1MzAyOiBTd2l0Y2ggcmVncnRlc3QgZnJvbSB1c2luZyBnZXRvcHQgdG8gdXNpbmcgYXJncGFyc2UuCisKIC0gSXNzdWUgIzE1MzI0OiBGaXggcmVncnRlc3QgcGFyc2luZyBvZiAtLWZyb21maWxlLCAtLW1hdGNoLCBhbmQgLS1yYW5kb21pemUKICAgb3B0aW9ucy4KIApAQCAtMTY5Myw2ICsyNjA5LDkgQEAKIC0gSXNzdWUgIzE2NjY0OiBBZGQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgZ2xvYidzIGJlaGF2aW91ciBjb25jZXJuaW5nIGVudHJpZXMKICAgc3RhcnRpbmcgd2l0aCBhICIuIi4gIFBhdGNoIGJ5IFNlYmFzdGlhbiBLcmVmdC4KIAorLSBJc3N1ZSAjMTMzOTA6IFRoZSBgYC1SYGAgb3B0aW9uIHRvIHJlZ3J0ZXN0IG5vdyBhbHNvIGNoZWNrcyBmb3IgbWVtb3J5CisgIGFsbG9jYXRpb24gbGVha3MsIHVzaW5nIDpmdW5jOmBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKClgLgorCiAtIElzc3VlICMxNjU1OTogQWRkIG1vcmUgdGVzdHMgZm9yIHRoZSBqc29uIG1vZHVsZSwgaW5jbHVkaW5nIHNvbWUgZnJvbSB0aGUKICAgb2ZmaWNpYWwgdGVzdCBzdWl0ZSBhdCBqc29uLm9yZy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKQEAgLTE3MTEsNyArMjYzMCw3IEBACiAtIElzc3VlICMxNTgwMjogRml4IHRlc3QgbG9naWMgaW4gYFRlc3RNYWlsZGlyLnRlc3RfY3JlYXRlX3RtcCgpYC4gUGF0Y2ggYnkKICAgU2VyaGl5IFN0b3JjaGFrYS4KIAotLSBJc3N1ZSAjMTU1NTc6IEFkZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBgd2ViYnJvd3NlcmAgbW9kdWxlLCB0aGFua3MgdG8gQW50b24KKy0gSXNzdWUgIzE1NTU3OiBBZGRlZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSB3ZWJicm93c2VyIG1vZHVsZSwgdGhhbmtzIHRvIEFudG9uCiAgIEJhcmtvdnNreS4KIAogLSBJc3N1ZSAjMTY2OTg6IFNraXAgcG9zaXggdGVzdF9nZXRncm91cHMgd2hlbiBidWlsdCB3aXRoIE9TIFgKQEAgLTE3MjAsNiArMjYzOSwzMCBAQAogQnVpbGQKIC0tLS0tCiAKKy0gSXNzdWUgIzE2MDY3OiBBZGQgZGVzY3JpcHRpb24gaW50byBNU0kgZmlsZSB0byByZXBsYWNlIGluc3RhbGxlcidzCisgIHRlbXBvcmFyeSBuYW1lLgorCistIElzc3VlICMxODI1NzogRml4IHJlYWRsaW5rIHVzYWdlIGluIHB5dGhvbi1jb25maWcuICBJbnN0YWxsIHRoZSBweXRob24KKyAgdmVyc2lvbiBhZ2FpbiBvbiBEYXJ3aW4uCisKKy0gSXNzdWUgIzE4NDgxOiBBZGQgQyBjb3ZlcmFnZSByZXBvcnRpbmcgd2l0aCBnY292IGFuZCBsY292LiBBIG5ldyBtYWtlIHRhcmdldAorICAiY292ZXJhZ2UtcmVwb3J0IiBjcmVhdGVzIGFuIGluc3RydW1lbnRlZCBQeXRob24gYnVpbGQsIHJ1bnMgdW5pdCB0ZXN0cworICBhbmQgY3JlYXRlcyBhIEhUTUwuIFRoZSByZXBvcnQgY2FuIGJlIHVwZGF0ZWQgd2l0aCAibWFrZSBjb3ZlcmFnZS1sY292Ii4KKworLSBJc3N1ZSAjMTc4NDU6IENsYXJpZmllZCB0aGUgbWVzc2FnZSBwcmludGVkIHdoZW4gc29tZSBtb2R1bGUgYXJlIG5vdCBidWlsdC4KKworLSBJc3N1ZSAjMTgyNTY6IENvbXBpbGF0aW9uIGZpeCBmb3IgcmVjZW50IEFJWCByZWxlYXNlcy4gIFBhdGNoIGJ5CisgIERhdmlkIEVkZWxzb2huLgorCistIElzc3VlICMxNzU0NzogSW4gY29uZmlndXJlLCBleHBsaWNpdGx5IHBhc3MgLVdmb3JtYXQgZm9yIHRoZSBiZW5lZml0IGZvciBHQ0MKKyAgNC44LgorCistIElzc3VlICMxNTE3MjogRG9jdW1lbnQgTkFTTSAyLjEwKyBhcyByZXF1aXJlbWVudCBmb3IgYnVpbGRpbmcgT3BlblNTTCAxLjAuMQorICBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzU5MTogVXNlIGxvd2VyY2FzZSBmaWxlbmFtZXMgd2hlbiBpbmNsdWRpbmcgV2luZG93cyBoZWFkZXIgZmlsZXMuCisgIFBhdGNoIGJ5IFJvdW1lbiBQZXRyb3YuCisKIC0gSXNzdWUgIzE3NTUwOiBGaXggdGhlIC0tZW5hYmxlLXByb2ZpbGluZyBjb25maWd1cmUgc3dpdGNoLgogCiAtIElzc3VlICMxNzQyNTogQnVpbGQgd2l0aCBvcGVuc3NsIDEuMC4xZCBvbiBXaW5kb3dzLgpAQCAtMTczNSw2ICsyNjc4LDEwIEBACiAKIC0gSXNzdWUgIzM3MTg6IFVzZSBBQ19BUkdfVkFSIHRvIHNldCBNQUNIREVQIGluIGNvbmZpZ3VyZS5hYy4KIAorLSBJc3N1ZSAjMTYyMzU6IEltcGxlbWVudCBweXRob24tY29uZmlnIGFzIGEgc2hlbGwgc2NyaXB0LgorCistIElzc3VlICMxNjc2OTogUmVtb3ZlIG91dGRhdGVkIFZpc3VhbCBTdHVkaW8gcHJvamVjdHMuCisKIC0gSXNzdWUgIzE3MDMxOiBGaXggcnVubmluZyByZWdlbiBpbiBjcm9zcyBidWlsZHMuCiAKIC0gSXNzdWUgIzM3NTQ6IGZpeCB0eXBvIGluIHB0aHJlYWQgQUNfQ0FDSEVfVkFMLgpAQCAtMTc0MiwxMiArMjY4OSwxNCBAQAogLSBJc3N1ZSAjMTU0ODQ6IEZpeCBfUFlUSE9OX1BST0pFQ1RfQkFTRSBmb3Igc3JjZGlyICE9IGJ1aWxkZGlyIGJ1aWxkczsKICAgdXNlIF9QWVRIT05fUFJPSkVDVF9CQVNFIGluIGRpc3R1dGlscy9zeXNjb25maWcucHkuCiAKKy0gRHJvcCBzdXBwb3J0IGZvciBXaW5kb3dzIDIwMDAuCisKIC0gSXNzdWUgIzE3MDI5OiBMZXQgaDJweSBzZWFyY2ggdGhlIG11bHRpYXJjaCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnkuCiAKIC0gSXNzdWUgIzE2OTUzOiBGaXggc29ja2V0IG1vZHVsZSBjb21waWxhdGlvbiBvbiBwbGF0Zm9ybXMgd2l0aAogICBIQVZFX0JST0tFTl9QT0xMLiBQYXRjaCBieSBKZWZmcmV5IEFybXN0cm9uZy4KIAotLSBJc3N1ZSAjMTY4MzY6IEVuYWJsZSBJUHY2IHN1cHBvcnQgZXZlbiBpZiBJUHY2IGlzIGRpc2FibGVkIG9uIHRoZSBidWlsZCBob3N0LgorLSBJc3N1ZSAjMTYzMjA6IFJlbW92ZSByZWR1bmRhbnQgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciBzdHJpbmdzIGFuZCBieXRlcy4KIAogLSBDcm9zcyBjb21waWxpbmcgbmVlZHMgaG9zdCBhbmQgYnVpbGQgc2V0dGluZ3MuIGNvbmZpZ3VyZSBubyBsb25nZXIKICAgY3JlYXRlcyBhIGJyb2tlbiBQWVRIT05fRk9SX0JVSUxEIHZhcmlhYmxlIHdoZW4gLS1idWlsZCBpcyBtaXNzaW5nLgpAQCAtMTc2OSw2ICsyNzE4LDggQEAKIC0gSXNzdWUgIzE1OTIzOiBGaXggYSBtaXN0YWtlIGluIGBgYXNkbF9jLnB5YGAgdGhhdCByZXN1bHRlZCBpbiBhIFR5cGVFcnJvcgogICBhZnRlciAyODAxYmY4NzVhMjQgKHNlZSAjMTU4MDEpLgogCistIElzc3VlICMxNjEzNTogUmVtb3ZlIE9TLzIgc3VwcG9ydC4KKwogLSBJc3N1ZSAjMTU4MTk6IE1ha2Ugc3VyZSB3ZSBjYW4gYnVpbGQgUHl0aG9uIG91dC1vZi10cmVlIGZyb20gYSByZWFkLW9ubHkKICAgc291cmNlIGRpcmVjdG9yeS4gIChTb21ld2hhdCByZWxhdGVkIHRvIGlzc3VlICM5ODYwLikKIApAQCAtMTc4MSwxMSArMjczMiw1NyBAQAogQy1BUEkKIC0tLS0tCiAKKy0gSXNzdWUgIzE4MzUxOiBGaXggdmFyaW91cyBpc3N1ZXMgaW4gYSBmdW5jdGlvbiBpbiBpbXBvcnRsaWIgcHJvdmlkZWQgdG8gaGVscAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSAoYW5kIHRodXMgYnkgZXh0ZW5zaW9uCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKCkgYW5kIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoKSkuCisKKy0gSXNzdWUgIzkzNjk6IFRoZSB0eXBlcyBvZiBgY2hhcipgIGFyZ3VtZW50cyBvZiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKSBhbmQKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZCgpIG5vdyBjaGFuZ2VkIHRvIGBjb25zdCBjaGFyKmAuICBCYXNlZCBvbiBwYXRjaGVzIGJ5CisgIErDtnJnIE3DvGxsZXIgYW5kIExhcnMgQnVpdGluY2suCisKKy0gSXNzdWUgIzE3MjA2OiBQeV9DTEVBUigpLCBQeV9ERUNSRUYoKSwgUHlfWElOQ1JFRigpIGFuZCBQeV9YREVDUkVGKCkgbm93CisgIGV4cGFuZCB0aGVpciBhcmd1bWVudHMgb25jZSBpbnN0ZWFkIG9mIG11bHRpcGxlIHRpbWVzLiAgUGF0Y2ggd3JpdHRlbiBieSBJbGxpYQorICBQb2xvc3VraGluLgorCistIElzc3VlICMxNzUyMjogQWRkIHRoZSBQeUdJTFN0YXRlX0NoZWNrKCkgQVBJLgorCistIElzc3VlICMxNzMyNzogQWRkIFB5RGljdF9TZXREZWZhdWx0LgorCiAtIElzc3VlICMxNjg4MTogRml4IFB5X0FSUkFZX0xFTkdUSCBtYWNybyBmb3IgR0NDIDwgMy4xLgogCistIElzc3VlICMxNTQyMjogR2V0IHJpZCBvZiBQeUNGdW5jdGlvbl9OZXcgbWFjcm8uIFVzZSBQeUNGdW5jdGlvbl9OZXdFeAorICBmdW5jdGlvbiAoUHlDRnVuY3Rpb25fTmV3IGZ1bmMgaXMgc3RpbGwgcHJlc2VudCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCisKKy0gSXNzdWUgIzE2NTA1OiBSZW1vdmUgdW51c2VkIFB5X1RQRkxBR1NfSU5UX1NVQkNMQVNTLgorCistIElzc3VlICMxNjA4NjogUHlUeXBlT2JqZWN0LnRwX2ZsYWdzIGFuZCBQeVR5cGVfU3BlYy5mbGFncyBhcmUgbm93IHVuc2lnbmVkCisgICh1bnNpZ25lZCBsb25nIGFuZCB1bnNpZ25lZCBpbnQpIHRvIGF2b2lkIGFuIHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aAorICBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgKCgxIDw8IDMxKS4gUHlUeXBlX0dldEZsYWdzKCkgcmVzdWx0IHR5cGUgaXMKKyAgbm93IHVuc2lnbmVkIHRvbyAodW5zaWduZWQgbG9uZywgaW5zdGVhZCBvZiBsb25nKS4KKworLSBJc3N1ZSAjMTYxNjY6IEFkZCBQWV9MSVRUTEVfRU5ESUFOIGFuZCBQWV9CSUdfRU5ESUFOIG1hY3JvcyBhbmQgdW5pZmllZAorICBlbmRpYW5uZXNzIGRldGVjdGlvbiBhbmQgaGFuZGxpbmcuCisKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMTc3MDE6IEltcHJvdmluZyBzdHJmdGltZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxODQ0MDogQ2xhcmlmeSB0aGF0IGBoYXNoKClgIGNhbiB0cnVuY2F0ZSB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbgorICBvYmplY3QncyBjdXN0b20gYF9faGFzaF9fKClgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTc4NDQ6IEFkZCBsaW5rcyB0byBlbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjcy4KKworLSBJc3N1ZSAjMTQwOTc6IGltcHJvdmUgdGhlICJpbnRyb2R1Y3Rpb24iIHBhZ2Ugb2YgdGhlIHR1dG9yaWFsLgorCistIElzc3VlICMxNzk3NzogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBjYWRlZmF1bHQgYXJndW1lbnQncyBkZWZhdWx0IHZhbHVlCisgIGluIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oKSBpcyBmaXhlZCB0byBtYXRjaCB0aGUgY29kZS4KKworLSBJc3N1ZSAjNjY5NjogYWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBQcm9maWxlIG9iamVjdHMsIGFuZCBpbXByb3ZlCisgIHByb2ZpbGUvY1Byb2ZpbGUgZG9jcy4gIFBhdGNoIGJ5IFRvbSBQaW5ja25leS4KKworLSBJc3N1ZSAjMTU5NDA6IFNwZWNpZnkgZWZmZWN0IG9mIGxvY2FsZSBvbiB0aW1lIGZ1bmN0aW9ucy4KKwogLSBJc3N1ZSAxNzUzODogRG9jdW1lbnQgWE1MIHZ1bG5lcmFiaWx0aWVzCiAKIC0gSXNzdWUgIzE2NjQyOiBzY2hlZC5zY2hlZHVsZXIgdGltZWZ1bmMgaW5pdGlhbCBkZWZhdWx0IGlzIHRpbWUubW9ub3RvbmljLgpAQCAtMTgzMCw4ICsyODI3LDggQEAKIAogLSBJc3N1ZSAjMTM1Mzg6IEltcHJvdmUgc3RyKCkgYW5kIG9iamVjdC5fX3N0cl9fKCkgZG9jdW1lbnRhdGlvbi4KIAotLSBJc3N1ZSAjMTY0ODk6IE1ha2UgaXQgY2xlYXJlciB0aGF0IGltcG9ydGxpYi5maW5kX2xvYWRlcigpIHJlcXVpcmVzIGFueSBhbmQKLSAgYWxsIHBhY2thZ2VzIHRvIGJlIHNlcGFyYXRlbHkgaW1wb3J0ZWQuCistIElzc3VlICMxNjQ4OTogTWFrZSBpdCBjbGVhcmVyIHRoYXQgaW1wb3J0bGliLmZpbmRfbG9hZGVyKCkgbmVlZHMgcGFyZW50CisgIHBhY2thZ2VzIHRvIGJlIGV4cGxpY2l0bHkgaW1wb3J0ZWQuCiAKIC0gSXNzdWUgIzE2NDAwOiBVcGRhdGUgdGhlIGRlc2NyaXB0aW9uIG9mIHdoaWNoIHZlcnNpb25zIG9mIGEgZ2l2ZW4gcGFja2FnZQogICBQeVBJIGRpc3BsYXlzLgpAQCAtMTg1NCw2ICsyODUxLDkgQEAKIC0gSXNzdWUgIzE2MTE1OiBJbXByb3ZlIHN1YnByb2Nlc3MuUG9wZW4oKSBkb2N1bWVudGF0aW9uIGFyb3VuZCBhcmdzLCBzaGVsbCwKICAgYW5kIGV4ZWN1dGFibGUgYXJndW1lbnRzLgogCistIElzc3VlICMxMzQ5ODogQ2xhcmlmeSBkb2NzIG9mIG9zLm1ha2VkaXJzKCkncyBleGlzdF9vayBhcmd1bWVudC4gIERvbmUgd2l0aAorICBncmVhdCBuYXRpdmUtc3BlYWtlciBoZWxwIGZyb20gUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlICMxNTUzMzogQ2xhcmlmeSBkb2NzIGFuZCBhZGQgdGVzdHMgZm9yIGBzdWJwcm9jZXNzLlBvcGVuKClgJ3MgY3dkCiAgIGFyZ3VtZW50LgogCkBAIC0xODc0LDYgKzI4NzQsMjcgQEAKIFRvb2xzL0RlbW9zCiAtLS0tLS0tLS0tLQogCistIElzc3VlICMxODgxNzogRml4IGEgcmVzb3VyY2Ugd2FybmluZyBpbiBMaWIvYWlmYy5weSBkZW1vLiAgUGF0Y2ggYnkKKyAgVmFqcmFza3kgS29rLgorCistIElzc3VlICMxODQzOTogTWFrZSBwYXRjaGNoZWNrIHdvcmsgb24gV2luZG93cyBmb3IgQUNLUywgTkVXUy4KKworLSBJc3N1ZSAjMTg0NDg6IEZpeCBhIHR5cG8gaW4gVG9vbHMvZGVtby9laWZmZWwucHkuCisKKy0gSXNzdWUgIzE4NDU3OiBGaXhlZCBzYXZpbmcgb2YgZm9ybXVsYXMgYW5kIGNvbXBsZXggbnVtYmVycyBpbgorICBUb29scy9kZW1vL3NzMS5weS4KKworLSBJc3N1ZSAjMTg0NDk6IE1ha2UgVG9vbHMvZGVtby9zczEucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4gIFBhdGNoIGJ5CisgIEbDqXZyeSBUaGliYXVsdC4KKworLSBJc3N1ZSAjMTI5OTA6IFRoZSAiUHl0aG9uIExhdW5jaGVyIiBvbiBPU1ggY291bGQgbm90IGxhdW5jaCBweXRob24gc2NyaXB0cworICB0aGF0IGhhdmUgcGF0aHMgdGhhdCBpbmNsdWRlIHdpZGUgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTUyMzk6IE1ha2UgbWtzdHJpbmdwcmVwLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCisKKy0gSXNzdWUgIzE3MDI4OiBBbGxvd2VkIFB5dGhvbiBhcmd1bWVudHMgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIFdpbmRvd3MKKyAgbGF1bmNoZXIuCisKIC0gSXNzdWUgIzE3MTU2OiBweWdldHRleHQucHkgbm93IHVzZXMgYW4gZW5jb2Rpbmcgb2Ygc291cmNlIGZpbGUgYW5kIGNvcnJlY3RseQogICB3cml0ZXMgYW5kIGVzY2FwZXMgbm9uLWFzY2lpIGNoYXJhY3RlcnMuCiAKQEAgLTE4ODIsOSArMjkwMywxOCBAQAogICBpbXByb3BlciBpbmRlbnRhdGlvbi4gIHBpbmRlbnQucHkgbm93IHdvcmtzIHdpdGggY29udGludWVkIGxpbmVzIGJyb2tlbiBhZnRlcgogICAiY2xhc3MiIG9yICJkZWYiIGtleXdvcmRzIGFuZCB3aXRoIGNvbnRpbnVhdGlvbnMgYXQgdGhlIHN0YXJ0IG9mIGxpbmUuCiAKLS0gSXNzdWUgIzE1Mzc4OiBGaXggVG9vbHMvdW5pY29kZS9jb21wYXJlY29kZWNzLnB5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKy0gSXNzdWUgIzExNzk3OiBBZGQgYSAydG8zIGZpeGVyIHRoYXQgbWFwcyByZWxvYWQoKSB0byBpbXAucmVsb2FkKCkuCiAKLS0gSXNzdWUgIzE2NDc2OiBGaXgganNvbi50b29sIHRvIGF2b2lkIGluY2x1ZGluZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorLSBJc3N1ZSAjMTA5NjY6IFJlbW92ZSB0aGUgY29uY2VwdCBvZiB1bmV4cGVjdGVkIHNraXBwZWQgdGVzdHMuCisKKy0gSXNzdWUgIzk4OTM6IFJlbW92ZWQgdGhlIE1pc2MvVmltIGRpcmVjdG9yeS4KKworLSBSZW1vdmVkIHRoZSBNaXNjL1RleHRNYXRlIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTYyNDU6IEFkZCB0aGUgVG9vbHMvc2NyaXB0cy9wYXJzZV9odG1sNV9lbnRpdGllcy5weSBzY3JpcHQgdG8gcGFyc2UKKyAgdGhlIGxpc3Qgb2YgSFRNTDUgZW50aXRpZXMgYW5kIHVwZGF0ZSB0aGUgaHRtbC5lbnRpdGllcy5odG1sNSBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxNTM3ODogRml4IFRvb2xzL3VuaWNvZGUvY29tcGFyZWNvZGVjcy5weS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKIC0gSXNzdWUgIzE2NTQ5OiBNYWtlIGpzb24udG9vbCB3b3JrIGFnYWluIG9uIFB5dGhvbiAzIGFuZCBhZGQgdGVzdHMuCiAgIEluaXRpYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZyBhbmQgU2VyaGl5IFN0b3JjaGFrYS4KQEAgLTE4OTIsNiArMjkyMiwxMiBAQAogLSBJc3N1ZSAjMTMzMDE6IHVzZSBhc3QubGl0ZXJhbF9ldmFsKCkgaW5zdGVhZCBvZiBldmFsKCkgaW4gVG9vbHMvaTE4bi9tc2dmbXQucHkKICAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KIAorV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMxODU2OTogVGhlIGluc3RhbGxlciBub3cgYWRkcyAucHkgdG8gdGhlIFBBVEhFWFQgdmFyaWFibGUgd2hlbiBleHRlbnNpb25zCisgIGFyZSByZWdpc3RlcmVkLiBQYXRjaCBieSBQYXVsIE1vb3JlLgorCiAKIFdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xOTc5LDYgKzMwMTUsOSBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMxNzE1ODogQWRkICdzeW1ib2xzJyB0byBoZWxwKCkgd2VsY29tZSBtZXNzYWdlOyBjbGFyaWZ5CisgICdtb2R1bGVzIHNwYW0nIG1lc3NhZ2VzLgorCiAtIElzc3VlICMxNTg0NzogRml4IGEgcmVncmVzc2lvbiBpbiBhcmdwYXJzZSwgd2hpY2ggZGlkIG5vdCBhY2NlcHQgdHVwbGVzIGFzCiAgIGFyZ3VtZW50IGxpc3RzIGFueW1vcmUuCiAKQEAgLTIwNTQsNiArMzA5Myw4IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gSXNzdWUgIzEzMjQ4OiByZW1vdmVkIGRlcHJlY2F0ZWQgYW5kIHVuZG9jdW1lbnRlZCBkaWZmbGliLmlzYmp1bmssIGlzYnBvcHVsYXIuCisKIC0gSXNzdWUgIzEzMzcwOiBFbnN1cmUgdGhhdCBjdHlwZXMgd29ya3Mgb24gTWFjIE9TIFggd2hlbiBQeXRob24gaXMgY29tcGlsZWQKICAgdXNpbmcgdGhlIGNsYW5nIGNvbXBpbGVyLgogCkBAIC0yNDY5LDYgKzM1MTAsMTAgQEAKIC0gSXNzdWUgIzE1MjUwOiBEb2N1bWVudCB0aGF0IGBmaWxlY21wLmRpcmNtcCgpYCBjb21wYXJlcyBmaWxlcyBzaGFsbG93bHkuIFBhdGNoCiAgIGNvbnRyaWJ1dGVkIGJ5IENocmlzIEplcmRvbmVrLgogCistIElzc3VlICMxNTQ0MjogRXhwb3NlIHRoZSBkZWZhdWx0IGxpc3Qgb2YgZGlyZWN0b3JpZXMgaWdub3JlZCBieQorICBgZmlsZWNtcC5kaXJjbXAoKWAgYXMgYSBtb2R1bGUgYXR0cmlidXRlLCBhbmQgZXhwYW5kIHRoZSBsaXN0IHRvIG1vcmUgbW9kZXJuCisgIHZhbHVlcy4KKwogVGVzdHMKIC0tLS0tCiAKQEAgLTI1ODEsOSArMzYyNiw2IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzE2MzA1OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgb2NjdXJyaW5nIHdoZW4gaW50ZXJydXB0aW5nCi0gIG1hdGguZmFjdG9yaWFsLgotCiAtIElzc3VlICMxMjI4ODogQ29uc2lkZXIgJzAnIGFuZCAnMC4wJyBhcyB2YWxpZCBpbml0aWFsdmFsdWUKICAgZm9yIHRraW50ZXIgU2ltcGxlRGlhbG9nLgogCkBAIC00Mjc4LDcgKzUzMjAsNyBAQAogLSBJc3N1ZSAjMTM1ODk6IEZpeCBzb21lIHNlcmlhbGl6YXRpb24gcHJpbWl0aXZlcyBpbiB0aGUgYWlmYyBtb2R1bGUuCiAgIFBhdGNoIGJ5IE9sZWcgUGxha2hvdG55dWsuCiAKLS0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyBgYHVzZXI6cGFzc3dvcmRgYCBkdXJpbmcgQmFzaWMKKy0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyB1c2VyOnBhc3N3b3JkIGR1cmluZyBCYXNpYwogICBBdXRoZW50aWNhdGlvbi4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSm9vbmFzIEt1b3JpbGVodG8uCiAKIC0gSXNzdWUgIzEyMzY0OiBGaXggYSBoYW5nIGluIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgpAQCAtNDczNyw4ICs1Nzc5LDggQEAKIC0gSXNzdWUgIzEyNjA3OiBJbiBzdWJwcm9jZXNzLCBmaXggaXNzdWUgd2hlcmUgaWYgc3RkaW4sIHN0ZG91dCBvciBzdGRlcnIgaXMKICAgZ2l2ZW4gYXMgYSBsb3cgZmQsIGl0IGdldHMgb3ZlcndyaXR0ZW4uCiAKLS0gSXNzdWUgIzEyNTc2OiBGaXggdXJsb3BlbiBiZWhhdmlvciBvbiBzaXRlcyB3aGljaCBkbyBub3Qgc2VuZCAob3Igb2JmdXNjYXRlKQotICBhIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIuCistIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZXMpCisgIENvbm5lY3Rpb246Y2xvc2UgaGVhZGVyLgogCiAtIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KIApAQCAtNTI5Niw2ICs2MzM4LDkgQEAKIC0gSXNzdWUgIzExNjM1OiBEb24ndCB1c2UgcG9sbGluZyBpbiB3b3JrZXIgdGhyZWFkcyBhbmQgcHJvY2Vzc2VzIGxhdW5jaGVkIGJ5CiAgIGNvbmN1cnJlbnQuZnV0dXJlcy4KIAorLSBJc3N1ZSAjNTg0NTogQXV0b21hdGljYWxseSByZWFkIHJlYWRsaW5lIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGNvbXBsZXRpb24KKyAgaW4gaW50ZXJhY3RpdmUgbW9kZS4KKwogLSBJc3N1ZSAjNjgxMTogQWxsb3cgaW1wb3J0bGliIHRvIGNoYW5nZSBhIGNvZGUgb2JqZWN0J3MgY29fZmlsZW5hbWUgYXR0cmlidXRlCiAgIHRvIG1hdGNoIHRoZSBwYXRoIHRvIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBjdXJyZW50bHkgaXMsIG5vdCB3aGVyZSB0aGUgY29kZQogICBvYmplY3Qgb3JpZ2luYWxseSBjYW1lIGZyb20uCkBAIC01MzMwLDcgKzYzNzUsNyBAQAogCiAtIElzc3VlICMxMTEyNzogUmFpc2UgYSBUeXBlRXJyb3Igd2hlbiB0cnlpbmcgdG8gcGlja2xlIGEgc29ja2V0IG9iamVjdC4KIAotLSBJc3N1ZSAjMTE1NjM6IGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIgaXMgc2VudCBieSByZXF1ZXN0cyB1c2luZyBVUkxPcGVuZXIKKy0gSXNzdWUgIzExNTYzOiBDb25uZWN0aW9uOmNsb3NlIGhlYWRlciBpcyBzZW50IGJ5IHJlcXVlc3RzIHVzaW5nIFVSTE9wZW5lcgogICBjbGFzcyB3aGljaCBoZWxwcyBpbiBjbG9zaW5nIG9mIHNvY2tldHMgYWZ0ZXIgY29ubmVjdGlvbiBpcyBvdmVyLiBQYXRjaAogICBjb250cmlidXRpb25zIGJ5IEplZmYgTWNOZWlsIGFuZCBOYWRlZW0gVmF3ZGEuCiAKQEAgLTU5MDYsNyArNjk1MSw3IEBACiAtIElzc3VlICMxMTUwNTogaW1wcm92ZXMgdGVzdCBjb3ZlcmFnZSBvZiBzdHJpbmcucHkuIFBhdGNoIGJ5IEFsaWNpYQogICBBcmxlbgogCi0tIElzc3VlICMxMTQ5MDogdGVzdF9zdWJwcm9jZXNzLnRlc3RfbGVha2luZ19mZHNfb25fZXJyb3Igbm8gbG9uZ2VyIGdpdmVzIGEKKy0gSXNzdWUgIzExNDkwOiB0ZXN0X3N1YnByb2Nlc3M6dGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvciBubyBsb25nZXIgZ2l2ZXMgYQogICBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMgaW5hY2Nlc3NpYmxlLgogCiAtIElzc3VlICMxMTIyMzogRml4IHRlc3RfdGhyZWFkc2lnbmFscyB0byBmYWlsLCBub3QgaGFuZywgd2hlbiB0aGUKZGlmZiAtLWdpdCBhL01pc2MvUkVBRE1FIGIvTWlzYy9SRUFETUUKaW5kZXggMTE4ZjZjNy4uZTc3ODBhMiAxMDA2NDQKLS0tIGEvTWlzYy9SRUFETUUKKysrIGIvTWlzYy9SRUFETUUKQEAgLTIyLDkgKzIyLDcgQEAKIFJFQURNRS5jb3Zlcml0eSAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgQ292ZXJpdHkncyBQcmV2ZW50IG9uIFB5dGhvbgogUkVBRE1FLnZhbGdyaW5kICAgICAgICAgSW5mb3JtYXRpb24gZm9yIFZhbGdyaW5kIHVzZXJzLCBzZWUgdmFsZ3JpbmQtcHl0aG9uLnN1cHAKIFJQTSAgICAgICAgICAgICAgICAgICAgIChPbGQpIHRvb2xzIHRvIGJ1aWxkIFJQTXMKLXN2bm1hcC50eHQgICAgICAgICAgICAgIE1hcCBvZiBvbGQgU1ZOIHJldnMgYW5kIGJyYW5jaGVzIHRvIGhnIGNoYW5nZXNldCBpZHMKIFNwZWNpYWxCdWlsZHMudHh0ICAgICAgIERlc2NyaWJlcyBleHRyYSBzeW1ib2xzIHlvdSBjYW4gc2V0IGZvciBkZWJ1ZyBidWlsZHMKLVRleHRNYXRlICAgICAgICAgICAgICAgIEEgVGV4dE1hdGUgYnVuZGxlIGZvciBQeXRob24gZGV2ZWxvcG1lbnQKK3N2bm1hcC50eHQgICAgICAgICAgICAgIE1hcCBvZiBvbGQgU1ZOIHJldnMgYW5kIGJyYW5jaGVzIHRvIGhnIGNoYW5nZXNldCBpZHMKIHZhbGdyaW5kLXB5dGhvbi5zdXBwICAgIFZhbGdyaW5kIHN1cHByZXNzaW9uIGZpbGUsIHNlZSBSRUFETUUudmFsZ3JpbmQKIHZncmluZGVmcyAgICAgICAgICAgICAgIFB5dGhvbiBjb25maWd1cmF0aW9uIGZvciB2Z3JpbmQgKGEgZ2VuZXJpYyBwcmV0dHkgcHJpbnRlcikKLVZpbSAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBkZXZlbG9wbWVudCB1dGlsaXRpZXMgZm9yIHRoZSBWaW0gZWRpdG9yCmRpZmYgLS1naXQgYS9NaXNjL1JQTS9weXRob24tMy4zLnNwZWMgYi9NaXNjL1JQTS9weXRob24tMy40LnNwZWMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gTWlzYy9SUE0vcHl0aG9uLTMuMy5zcGVjCnJlbmFtZSB0byBNaXNjL1JQTS9weXRob24tMy40LnNwZWMKaW5kZXggYzMyNDU1OS4uYTIzY2IyNyAxMDA2NDQKLS0tIGEvTWlzYy9SUE0vcHl0aG9uLTMuMy5zcGVjCisrKyBiL01pc2MvUlBNL3B5dGhvbi0zLjQuc3BlYwpAQCAtMzksOCArMzksOCBAQAogCiAlZGVmaW5lIG5hbWUgcHl0aG9uCiAjLS1zdGFydCBjb25zdGFudHMtLQotJWRlZmluZSB2ZXJzaW9uIDMuMy4zcmMxCi0lZGVmaW5lIGxpYnZlcnMgMy4zCislZGVmaW5lIHZlcnNpb24gMy40LjBhNAorJWRlZmluZSBsaWJ2ZXJzIDMuNAogIy0tZW5kIGNvbnN0YW50cy0tCiAlZGVmaW5lIHJlbGVhc2UgMXB5ZG90b3JnCiAlZGVmaW5lIF9fcHJlZml4IC91c3IKQEAgLTgzLDggKzgzLDcgQEAKIGxpYnJhcmllcywgYXMgd2VsbCBhcyB0byB2YXJpb3VzIHdpbmRvdyBzeXN0ZW1zLCBhbmQgaXMgZXh0ZW5zaWJsZSBpbiBDIG9yCiBDKysuIEl0IGlzIGFsc28gdXNhYmxlIGFzIGFuIGV4dGVuc2lvbiBsYW5ndWFnZSBmb3IgYXBwbGljYXRpb25zIHRoYXQgbmVlZAogYSBwcm9ncmFtbWFibGUgaW50ZXJmYWNlLiAgRmluYWxseSwgUHl0aG9uIGlzIHBvcnRhYmxlOiBpdCBydW5zIG9uIG1hbnkKLWJyYW5kcyBvZiBVTklYLCBvbiBQQ3MgdW5kZXIgV2luZG93cywgTVMtRE9TLCBhbmQgT1MvMiwgYW5kIG9uIHRoZQotTWFjLgorYnJhbmRzIG9mIFVOSVgsIG9uIFBDcyB1bmRlciBXaW5kb3dzLCBNUy1ET1MsIGFuZCBvbiB0aGUgTWFjLgogCiAlcGFja2FnZSBkZXZlbAogU3VtbWFyeTogVGhlIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzIG5lZWRlZCBmb3IgUHl0aG9uIGV4dGVuc2lvbiBkZXZlbG9wbWVudC4KZGlmZiAtLWdpdCBhL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQgYi9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CmluZGV4IGY4NjllN2MuLjY0NmFjMjMgMTAwNjQ0Ci0tLSBhL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKKysrIGIvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dApAQCAtMTA1LDcgKzEwNSw5IEBACiBwWy0yKlM6LVNdCiAgICAgTnVtYmVyIG9mIGJ5dGVzIG9yaWdpbmFsbHkgYXNrZWQgZm9yLiAgVGhpcyBpcyBhIHNpemVfdCwgYmlnLWVuZGlhbiAoZWFzaWVyCiAgICAgdG8gcmVhZCBpbiBhIG1lbW9yeSBkdW1wKS4KLXBbLVM6MF0KK3BbLVNdCisgICAgQVBJIElELiAgU2VlIFBFUCA0NDUuICBUaGlzIGlzIGEgY2hhcmFjdGVyLCBidXQgc2VlbXMgdW5kb2N1bWVudGVkLgorcFstUysxOjBdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIHVuZGVyLSB3cml0ZXMgYW5kIHJlYWRzLgogcFswOk5dCiAgICAgVGhlIHJlcXVlc3RlZCBtZW1vcnksIGZpbGxlZCB3aXRoIGNvcGllcyBvZiBDTEVBTkJZVEUsIHVzZWQgdG8gY2F0Y2gKZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24udG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZmFkYTguLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyEvdXNyL2Jpbi9weXRob24KLSIiIkdlbmVyYXRlIGNvZGUgdG8gd2FybiBhYm91dCBhIG1vZHVsZSdzIHJlbW92YWwgaW4gUHl0aG9uIDMuMC4KLQotWFhYIE5vdCBzdXBwb3J0ZWQ6Ci0tIE1vZHVsZSdzIGluIGEgcGFja2FnZSBkbyBub3QgaGF2ZSB0aGVpciBmdWxsIG5hbWUgZ2VuZXJhdGVkLgotLSBQYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlOyBzaG91bGQgZGV0ZWN0IGFuZCB1c2UgdGhlIHBhY2thZ2UncyBuYW1lIGluc3RlYWQuCi0KLSIiIgotcHlfdGVtcGxhdGUgPSAiIiJmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJucHkzawotd2FybnB5M2soInRoZSAkezE6JXN9IG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjAiLCBzdGFja2xldmVsPTIpCi1kZWwgd2FybnB5M2skMCIiIgotCi1jX3RlbXBsYXRlID0gIiIiCi1pZiAoUHlFcnJfV2FyblB5M2soInRoZSAkezE6JXN9IG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluICIKLSAgICAgICAgICAgICAgICAgICAiUHl0aG9uIDMuMCIsIDIpICZsdDsgMCkKLSAgICByZXR1cm47JDAiIiIKLQotCi1pbXBvcnQgaW1wCi1pbXBvcnQgb3MKLQotZmlsZV9uYW1lID0gb3MucGF0aC5zcGxpdChvcy5lbnZpcm9uWydUTV9GSUxFUEFUSCddKVsxXQotCi1weV9zdWZmaXhlcyA9IHJldmVyc2VkKHNvcnRlZCgoc3VmZml4WzBdIGZvciBzdWZmaXggaW4gaW1wLmdldF9zdWZmaXhlcygpIGlmIHN1ZmZpeFsyXSA9PSBpbXAuUFlfU09VUkNFKSwga2V5PWxlbikpCi1jX3N1ZmZpeGVzID0gcmV2ZXJzZWQoc29ydGVkKChvcy5wYXRoLnNwbGl0ZXh0KHN1ZmZpeFswXSlbMF0gKyAnLmMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWZmaXggaW4gaW1wLmdldF9zdWZmaXhlcygpIGlmIHN1ZmZpeFsyXSA9PSBpbXAuQ19FWFRFTlNJT04pLCBrZXk9bGVuKSkKLQotcGFpcmluZ3MgPSAoKHB5X3N1ZmZpeGVzLCBweV90ZW1wbGF0ZSksIChjX3N1ZmZpeGVzLCBjX3RlbXBsYXRlKSkKLQotZGVmIGNyZWF0ZV90ZW1wbGF0ZShzdWZmaXhlcywgdGVtcGxhdGUpOgotICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6Ci0gICAgICAgIGlmIG5vdCBmaWxlX25hbWUuZW5kc3dpdGgoc3VmZml4KToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIG1vZHVsZV9uYW1lID0gZmlsZV9uYW1lWzotbGVuKHN1ZmZpeCldCi0gICAgICAgIHJldHVybiB0ZW1wbGF0ZSAlIG1vZHVsZV9uYW1lCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotZm9yIHRlbXBsYXRlIGluIChjcmVhdGVfdGVtcGxhdGUoKnBhaXIpIGZvciBwYWlyIGluIHBhaXJpbmdzKToKLSAgICBpZiBub3QgdGVtcGxhdGU6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgcHJpbnQgdGVtcGxhdGUsCi0gICAgYnJlYWsKLWVsc2U6Ci0gICAgcHJpbnQgJ1hYWCBDb3VsZCBub3QgZ2VuZXJhdGUgY29kZS4nPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+MiB0byAzIC0gTW9kdWxlIERlbGV0aW9uPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPmluc2VydEFzU25pcHBldDwvc3RyaW5nPgotCTxrZXk+dGFiVHJpZ2dlcjwva2V5PgotCTxzdHJpbmc+MnRvM21vZGRlbDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+OTUxOUMyMkItNkFCOC00MUExLTk0RjYtMDc5RTBCNDVDMTQ3PC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkIERvY3MudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkIERvY3MudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTRkNTNiLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZCBEb2NzLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIFhYWCBMZW9wYXJkLXNwZWNpZmljIHVubGVzcyBoYXZlIGVhc3kgd2F5IHRvIHNwZWNpZmljIGFsdGVybmF0aXZlIFB5dGhvbiBleGVjdXRhYmxlLgotCi1jZCAkVE1fUFJPSkVDVF9ESVJFQ1RPUlkvRG9jCi1tYWtlIGh0bWwgMiZndDsmYW1wOzEgfCBwcmUKLQotcmVzY2FuX3Byb2plY3Q8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5ub25lPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5CdWlsZCBEb2NzPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPnNob3dBc0hUTUw8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPjZFRjE1MUU1LTcxNDktNEY4Mi04Nzk2LTBDQzQwRkU1ODlGQTwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZC50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmZkYTVjLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZC50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyBYWFggVE9ETwotIyAtIEhpZ2hsaWdodCBhbnkgY29tcGlsZXIgd2FybmluZ3MgZm9yIFB5dGhvbiBjb2RlLgotIyAtIFBvaW50IG91dCBpZiBjb21waWxlIGZhaWxlZC4KLQotY2QgJFRNX1BST0pFQ1RfRElSRUNUT1JZCi1tYWtlIC1zIC1qMiAyJmd0OyZhbXA7MSB8IHByZQotCi1yZXNjYW5fcHJvamVjdDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPm5vbmU8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPkJ1aWxkIFB5dGhvbjwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5zaG93QXNIVE1MPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5CNTQ1QkIxQi1BOEUxLTQyNkMtQjUwQS00MjZFNzhCOTZEMzg8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvR28gdG8gSXNzdWUudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0dvIHRvIElzc3VlLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVkMzBiYy4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvR28gdG8gSXNzdWUudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm9wZW4gImh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUkKGNhdCkiPC9zdHJpbmc+Ci0JPGtleT5mYWxsYmFja0lucHV0PC9rZXk+Ci0JPHN0cmluZz53b3JkPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+c2VsZWN0aW9uPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5HbyB0byBJc3N1ZTwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5kaXNjYXJkPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5GRDI1QThEQy0yMkRDLTRFRDQtQjIyMi1COTQzQzhBOTExN0Q8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBEb2NzLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIERvY3MudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFiZTQzLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIERvY3MudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgU2VhcmNoIG9yZGVyOgotIyAgLSBDdXJyZW50IHByb2plY3QuCi0jICAtIFRNX1BZVEhPTkRFVl9ET0NTLgotIyAgLSBPbmxpbmUgZG9jcyBpbiBkZXZlbG9wbWVudC4KLQotaHRtbF9pbmRleD0kVE1fUFJPSkVDVF9ESVJFQ1RPUlkvRG9jL2J1aWxkL2h0bWwvaW5kZXguaHRtbAotaWYgW1sgLWYgJGh0bWxfaW5kZXggXV07IHRoZW4KLQlvcGVuICRodG1sX2luZGV4Ci1lbGlmIFtbICRUTV9QWVRIT05ERVZfRE9DUyBdXTsgdGhlbgotCW9wZW4gJFRNX1BZVEhPTkRFVl9ET0NTCi1lbHNlCi0Jb3BlbiBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldi8KLWZpPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+a2V5RXF1aXZhbGVudDwva2V5PgotCTxzdHJpbmc+QEg8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPk9wZW4gRG9jczwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5kaXNjYXJkPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5CRjMzNkZGRi1FMTRELTRCRjEtQTE1Ni03MUNGNzY4QUMwMzQ8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBQRVAudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gUEVQLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY1NTMzYS4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBQRVAudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgWFhYIFdvcnRoIHN1cHBvcnRpbmcgdXNpbmcgYSBsb2NhbCBjb3B5PwotCi0jIER1bWIgbHVjayB0aGF0IGFuIHVucmVjb2duaXplZCBudW1iZXIgbGVhZHMgdG8gYSAwIGJlaW5nIHVzZWQuCi1vcGVuIGBwcmludGYgImh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtJTA0ZCIgJChjYXQpYDwvc3RyaW5nPgotCTxrZXk+ZmFsbGJhY2tJbnB1dDwva2V5PgotCTxzdHJpbmc+d29yZDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPnNlbGVjdGlvbjwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+T3BlbiBQRVA8L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+ZGlzY2FyZDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+RURCQjAzN0YtQUFFMy00NTEyLTg2M0YtRDlBQTgyQzlFNTFFPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0ICJhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9TbmlwcGV0cy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24gXDA1MGRvY3NcMDUxLnRtU25pcHBldCIgImIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL1NuaXBwZXRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiBcMDUwZG9jc1wwNTEudG1TbmlwcGV0IgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlOGJhZS4uMDAwMDAwMAotLS0gImEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL1NuaXBwZXRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiBcMDUwZG9jc1wwNTEudG1TbmlwcGV0IgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5jb250ZW50PC9rZXk+Ci0JPHN0cmluZz4uLiBkZXByZWNhdGVkOjogMi42Ci0gICBUaGUgOm1vZDpcYCR7MX1cYCBtb2R1bGUgaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy4wLgotJHswfTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+MiB0byAzIC0gTW9kdWxlIERlbGV0aW9uIChkb2NzKTwvc3RyaW5nPgotCTxrZXk+dGFiVHJpZ2dlcjwva2V5PgotCTxzdHJpbmc+MnRvM2RvY2RlbDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+MDU2ODQxMEQtRUFGMS00QUYzLUI2REUtOEFGMTMzQTkxODIxPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL2luZm8ucGxpc3QgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvaW5mby5wbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUxMGQ1ZC4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvaW5mby5wbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5tYWluTWVudTwva2V5PgotCTxkaWN0PgotCQk8a2V5Pml0ZW1zPC9rZXk+Ci0JCTxhcnJheT4KLQkJCTxzdHJpbmc+OTUxOUMyMkItNkFCOC00MUExLTk0RjYtMDc5RTBCNDVDMTQ3PC9zdHJpbmc+Ci0JCQk8c3RyaW5nPjA1Njg0MTBELUVBRjEtNEFGMy1CNkRFLThBRjEzM0E5MTgyMTwvc3RyaW5nPgotCQkJPHN0cmluZz4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L3N0cmluZz4KLQkJCTxzdHJpbmc+QjU0NUJCMUItQThFMS00MjZDLUI1MEEtNDI2RTc4Qjk2RDM4PC9zdHJpbmc+Ci0JCQk8c3RyaW5nPjZFRjE1MUU1LTcxNDktNEY4Mi04Nzk2LTBDQzQwRkU1ODlGQTwvc3RyaW5nPgotCQkJPHN0cmluZz4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L3N0cmluZz4KLQkJCTxzdHJpbmc+QkYzMzZGRkYtRTE0RC00QkYxLUExNTYtNzFDRjc2OEFDMDM0PC9zdHJpbmc+Ci0JCQk8c3RyaW5nPkZEMjVBOERDLTIyREMtNEVENC1CMjIyLUI5NDNDOEE5MTE3RDwvc3RyaW5nPgotCQkJPHN0cmluZz5FREJCMDM3Ri1BQUUzLTQ1MTItODYzRi1EOUFBODJDOUU1MUU8L3N0cmluZz4KLQkJPC9hcnJheT4KLQkJPGtleT5zdWJtZW51czwva2V5PgotCQk8ZGljdC8+Ci0JPC9kaWN0PgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+UHl0aG9uLURldjwvc3RyaW5nPgotCTxrZXk+b3JkZXJpbmc8L2tleT4KLQk8YXJyYXk+Ci0JCTxzdHJpbmc+OTUxOUMyMkItNkFCOC00MUExLTk0RjYtMDc5RTBCNDVDMTQ3PC9zdHJpbmc+Ci0JCTxzdHJpbmc+MDU2ODQxMEQtRUFGMS00QUYzLUI2REUtOEFGMTMzQTkxODIxPC9zdHJpbmc+Ci0JCTxzdHJpbmc+QjU0NUJCMUItQThFMS00MjZDLUI1MEEtNDI2RTc4Qjk2RDM4PC9zdHJpbmc+Ci0JCTxzdHJpbmc+NkVGMTUxRTUtNzE0OS00RjgyLTg3OTYtMENDNDBGRTU4OUZBPC9zdHJpbmc+Ci0JCTxzdHJpbmc+RkQyNUE4REMtMjJEQy00RUQ0LUIyMjItQjk0M0M4QTkxMTdEPC9zdHJpbmc+Ci0JCTxzdHJpbmc+QkYzMzZGRkYtRTE0RC00QkYxLUExNTYtNzFDRjc2OEFDMDM0PC9zdHJpbmc+Ci0JCTxzdHJpbmc+RURCQjAzN0YtQUFFMy00NTEyLTg2M0YtRDlBQTgyQzlFNTFFPC9zdHJpbmc+Ci0JPC9hcnJheT4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkE5MzJFQ0QxLUQ0M0EtNEY1Ny1CN0ZCLUExQ0VDM0I2NUQyMDwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVmltL3B5dGhvbi52aW0gYi9NaXNjL1ZpbS9weXRob24udmltCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWVlN2ViLi4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3B5dGhvbi52aW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotIiBBdXRvLWdlbmVyYXRlZCBWaW0gc3ludGF4IGZpbGUgZm9yIFB5dGhvbiAodHJ1bms6IHI2MDM3Nk0pLgotIgotIiBUbyB1c2U6IGNvcHkgb3Igc3ltbGluayB0byB+Ly52aW0vc3ludGF4L3B5dGhvbi52aW0KLQotCi1pZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQotICBmaW5pc2gKLWVuZGlmCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9hbGwiKQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzID0gMQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyA9IDEKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyA9IDEKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzID0gMQotZW5kaWYKLQotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIGFzIGFzc2VydCBicmVhayBjb250aW51ZSBkZWwgZXhjZXB0IGV4ZWMgZmluYWxseQotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIGdsb2JhbCBsYW1iZGEgcGFzcyBwcmludCByYWlzZSByZXR1cm4gdHJ5IHdpdGgKLXN5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudCAgICB5aWVsZAotCi1zeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQgICAgZGVmIGNsYXNzIG5leHRncm91cD1weXRob25GdW5jdGlvbiBza2lwd2hpdGUKLQotc3luIG1hdGNoIHB5dGhvbkZ1bmN0aW9uICAgICJbYS16QS1aX11bYS16QS1aMC05X10qIiBjb250YWluZWQKLQotc3luIGtleXdvcmQgcHl0aG9uUmVwZWF0ICAgIGZvciB3aGlsZQotCi1zeW4ga2V5d29yZCBweXRob25Db25kaXRpb25hbCAgICBpZiBlbGlmIGVsc2UKLQotc3luIGtleXdvcmQgcHl0aG9uT3BlcmF0b3IgICAgYW5kIGluIGlzIG5vdCBvcgotCi1zeW4ga2V5d29yZCBweXRob25QcmVDb25kaXQgICAgaW1wb3J0IGZyb20KLQotc3luIG1hdGNoIHB5dGhvbkNvbW1lbnQgICAgIiMuKiQiIGNvbnRhaW5zPXB5dGhvblRvZG8KLQotc3luIGtleXdvcmQgcHl0aG9uVG9kbyAgICBUT0RPIEZJWE1FIFhYWCBjb250YWluZWQKLQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPScrIGVuZD0rJysgc2tpcD0rXFxcXFx8XFwnKyBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0iKyBlbmQ9KyIrIHNraXA9K1xcXFxcfFxcIisgY29udGFpbnM9cHl0aG9uRXNjYXBlCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9IiIiKyBlbmQ9KyIiIisgIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPScnJysgZW5kPSsnJycrICBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdJysgZW5kPSsnKyBza2lwPStcXFxcXHxcXCcrIAotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0iKyBlbmQ9KyIrIHNraXA9K1xcXFxcfFxcIisgCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXSIiIisgZW5kPSsiIiIrICAKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdJycnKyBlbmQ9KycnJysgIAotCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICtcXFthYmZucnR2XCciXFxdKyBjb250YWluZWQKLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlxcXG9cezEsM30iIGNvbnRhaW5lZAotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICAiXFx4XHhcezJ9IiBjb250YWluZWQKLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlwoXFx1XHhcezR9XHxcXFVceFx7OH1cKSIgY29udGFpbmVkCi0KLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlxcJCIKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyIpCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8MHhceFwrW0xsXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8XGRcK1tMbGpKXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlwuXGRcK1woW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8XGRcK1wuXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiIKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXDxcZFwrXC5cZFwrXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiIKLQotZW5kaWYKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiKQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIEVsbGlwc2lzIEZhbHNlIE5vbmUgTm90SW1wbGVtZW50ZWQgVHJ1ZSBfX2RlYnVnX18KLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBfX2ltcG9ydF9fIGFicyBhbGwgYW55IGJvb2wKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBidWZmZXIgY2FsbGFibGUgY2hyIGNsYXNzbWV0aG9kIGNtcAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGNvbXBsZXggY29weXJpZ2h0IGNyZWRpdHMgZGVsYXR0ciBkaWN0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZGlyIGRpdm1vZCBlbnVtZXJhdGUgZXZhbCBleGVjIGV4aXQKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBmaWx0ZXIgZmxvYXQgZnJvemVuc2V0IGdldGF0dHIgZ2xvYmFscyBoYXNhdHRyCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgaGFzaCBoZWxwIGhleCBpZCBpbnQgaXNpbnN0YW5jZQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGlzc3ViY2xhc3MgaXRlciBsZW4gbGljZW5zZSBsaXN0IGxvY2FscyBtYXAKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBtYXggbWluIG9iamVjdCBvY3Qgb3BlbiBvcmQgcG93IHByb3BlcnR5IHF1aXQKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICByYW5nZSByZWxvYWQgcmVwciByZXZlcnNlZCByb3VuZAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHNldCBzZXRhdHRyIHNsaWNlIHNvcnRlZCBzdGF0aWNtZXRob2Qgc3RyIHN1bQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHN1cGVyIHRydW5jIHR1cGxlIHR5cGUgdW5pY29kZSB2YXJzIAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHppcAotCi1lbmRpZgotCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zIikKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEFyaXRobWV0aWNFcnJvciBBc3NlcnRpb25FcnJvciBBdHRyaWJ1dGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgQmFzZUV4Y2VwdGlvbiBEZXByZWNhdGlvbldhcm5pbmcgRU9GRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEVudmlyb25tZW50RXJyb3IgRXhjZXB0aW9uIEZsb2F0aW5nUG9pbnRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgRnV0dXJlV2FybmluZyBHZW5lcmF0b3JFeGl0IElPRXJyb3IgSW1wb3J0RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEltcG9ydFdhcm5pbmcgSW5kZW50YXRpb25FcnJvciBJbmRleEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBLZXlFcnJvciBLZXlib2FyZEludGVycnVwdCBMb29rdXBFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgTWVtb3J5RXJyb3IgTmFtZUVycm9yIE5vdEltcGxlbWVudGVkRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIE9TRXJyb3IgT3ZlcmZsb3dFcnJvciBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBSZWZlcmVuY2VFcnJvciBSdW50aW1lRXJyb3IgUnVudGltZVdhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFN5bnRheFdhcm5pbmcgU3lzdGVtRXJyb3IgU3lzdGVtRXhpdCBUYWJFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVHlwZUVycm9yIFVuYm91bmRMb2NhbEVycm9yIFVuaWNvZGVEZWNvZGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZUVuY29kZUVycm9yIFVuaWNvZGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yIFVuaWNvZGVXYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBVc2VyV2FybmluZyBWYWx1ZUVycm9yIFdhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFplcm9EaXZpc2lvbkVycm9yCi0KLWVuZGlmCi0KLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X3NwYWNlX2Vycm9ycyIpCi0gIHN5biBtYXRjaCBweXRob25TcGFjZUVycm9yICAgIGRpc3BsYXkgZXhjbHVkZW5sICJcU1xzXCskIm1zPXMrMQotICBzeW4gbWF0Y2ggcHl0aG9uU3BhY2VFcnJvciAgICBkaXNwbGF5ICIgXCtcdCIKLSAgc3luIG1hdGNoIHB5dGhvblNwYWNlRXJyb3IgICAgZGlzcGxheSAiXHRcKyAiCi0KLWVuZGlmCi0KLQotICBoaSBkZWYgbGluayBweXRob25TdGF0ZW1lbnQgU3RhdGVtZW50Ci0gIGhpIGRlZiBsaW5rIHB5dGhvblN0YXRlbWVudCBTdGF0ZW1lbnQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uRnVuY3Rpb24gRnVuY3Rpb24KLSAgaGkgZGVmIGxpbmsgcHl0aG9uUmVwZWF0IFJlcGVhdAotICBoaSBkZWYgbGluayBweXRob25Db25kaXRpb25hbCBDb25kaXRpb25hbAotICBoaSBkZWYgbGluayBweXRob25PcGVyYXRvciBPcGVyYXRvcgotICBoaSBkZWYgbGluayBweXRob25QcmVDb25kaXQgUHJlQ29uZGl0Ci0gIGhpIGRlZiBsaW5rIHB5dGhvbkNvbW1lbnQgQ29tbWVudAotICBoaSBkZWYgbGluayBweXRob25Ub2RvIFRvZG8KLSAgaGkgZGVmIGxpbmsgcHl0aG9uU3RyaW5nIFN0cmluZwotICBoaSBkZWYgbGluayBweXRob25Fc2NhcGUgU3BlY2lhbAotICBoaSBkZWYgbGluayBweXRob25Fc2NhcGUgU3BlY2lhbAotCi0gIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzIikKLSAgICBoaSBkZWYgbGluayBweXRob25OdW1iZXIgTnVtYmVyCi0gIGVuZGlmCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zIikKLSAgICBoaSBkZWYgbGluayBweXRob25CdWlsdGluIEZ1bmN0aW9uCi0gIGVuZGlmCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiKQotICAgIGhpIGRlZiBsaW5rIHB5dGhvbkV4Y2VwdGlvbiBFeGNlcHRpb24KLSAgZW5kaWYKLQotICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzIikKLSAgICBoaSBkZWYgbGluayBweXRob25TcGFjZUVycm9yIEVycm9yCi0gIGVuZGlmCi0KLQotIiBVbmNvbW1lbnQgdGhlICdtaW5saW5lcycgc3RhdGVtZW50IGxpbmUgYW5kIGNvbW1lbnQgb3V0IHRoZSAnbWF4bGluZXMnCi0iIHN0YXRlbWVudCBsaW5lOyBjaGFuZ2VzIGJlaGF2aW91ciB0byBsb29rIGF0IGxlYXN0IDIwMDAgbGluZXMgcHJldmlvdXNseSBmb3IKLSIgc3ludGF4IG1hdGNoZXMgaW5zdGVhZCBvZiBhdCBtb3N0IDIwMCBsaW5lcwotc3luIHN5bmMgbWF0Y2ggcHl0aG9uU3luYyBncm91cGhlcmUgTk9ORSAiKTokIgotc3luIHN5bmMgbWF4bGluZXM9MjAwCi0ic3luIHN5bmMgbWlubGluZXM9MjAwMAotCi1sZXQgYjpjdXJyZW50X3N5bnRheCA9ICJweXRob24iCmRpZmYgLS1naXQgYS9NaXNjL1ZpbS9zeW50YXhfdGVzdC5weSBiL01pc2MvVmltL3N5bnRheF90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDIwODY2Li4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3N5bnRheF90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotIiIiVGVzdCBmaWxlIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nIG9mIGVkaXRvcnMuCi0KLU1lYW50IHRvIGNvdmVyIGEgd2lkZSByYW5nZSBvZiBkaWZmZXJlbnQgdHlwZXMgb2Ygc3RhdGVtZW50cyBhbmQgZXhwcmVzc2lvbnMuCi1Ob3QgbmVjZXNzYXJpbHkgc2Vuc2ljYWwgb3IgY29tcHJlaGVuc2l2ZSAoYXNzdW1lIHRoYXQgaWYgb25lIGV4Y2VwdGlvbiBpcwotaGlnaGxpZ2h0ZWQgdGhhdCBhbGwgYXJlLCBmb3IgaW5zdGFuY2UpLgotCi1FeHRyYW5lb3VzIHRyYWlsaW5nIHdoaXRlc3BhY2UgY2FuJ3QgYmUgdGVzdGVkIGJlY2F1c2Ugb2Ygc3ZuIHByZS1jb21taXQgaG9vawotY2hlY2tzIGZvciBzdWNoIHRoaW5ncy4KLQotIiIiCi0jIENvbW1lbnQKLSMgT1BUSU9OQUw6IFhYWCBjYXRjaCB5b3VyIGF0dGVudGlvbgotCi0jIFN0YXRlbWVudHMKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQgICMgSW1wb3J0Ci1mcm9tIHN5cyBpbXBvcnQgcGF0aCBhcyB0aGluZwotYXNzZXJ0IFRydWUgIyBrZXl3b3JkCi1kZWYgZm9vKCk6ICAjIGZ1bmN0aW9uIGRlZmluaXRpb24KLSAgICByZXR1cm4gW10KLWNsYXNzIEJhcihvYmplY3QpOiAgIyBDbGFzcyBkZWZpbml0aW9uCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgcGFzcwotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHBhc3MKLWZvbygpICAjIFVOQ09MT1VSRUQ6IGZ1bmN0aW9uIGNhbGwKLXdoaWxlIEZhbHNlOiAgIyAnd2hpbGUnCi0gICAgY29udGludWUKLWZvciB4IGluIGZvbygpOiAgIyAnZm9yJwotICAgIGJyZWFrCi13aXRoIEJhcigpIGFzIHN0dWZmOgotICAgIHBhc3MKLWlmIEZhbHNlOiBwYXNzICAjICdpZicKLWVsaWYgRmFsc2U6IHBhc3MKLWVsc2U6IHBhc3MKLQotIyBDb25zdGFudHMKLSdzaW5nbGUtcXVvdGUnLCB1J3VuaWNvZGUnICMgU3RyaW5ncyBvZiBhbGwga2luZHM7IHByZWZpeGVzIG5vdCBoaWdobGlnaHRlZAotImRvdWJsZS1xdW90ZSIKLSIiInRyaXBsZSBkb3VibGUtcXVvdGUiIiIKLScnJ3RyaXBsZSBzaW5nbGUtcXVvdGUnJycKLXIncmF3JwotdXIndW5pY29kZSByYXcnCi0nZXNjYXBlXG4nCi0nXDA0JyAgIyBvY3RhbAotJ1x4RkYnICMgaGV4Ci0nXHUxMTExJyAjIHVuaWNvZGUgY2hhcmFjdGVyCi0xICAjIEludGVncmFsCi0xTAotMS4wICAjIEZsb2F0Ci0uMQotMSsyaiAgIyBDb21wbGV4Ci0KLSMgRXhwcmVzc2lvbnMKLTEgYW5kIDIgb3IgMyAgIyBCb29sZWFuIG9wZXJhdG9ycwotMiA8IDMgICMgVU5DT0xPVVJFRDogY29tcGFyaXNvbiBvcGVyYXRvcnMKLXNwYW0gPSA0MiAgIyBVTkNPTE9VUkVEOiBhc3NpZ25tZW50Ci0yICsgMyAgIyBVTkNPTE9VUkVEOiBudW1iZXIgb3BlcmF0b3JzCi1bXSAgIyBVTkNPTE9VUkVEOiBsaXN0Ci17fSAgIyBVTkNPTE9VUkVEOiBkaWN0Ci0oMSwpICAjIFVOQ09MT1VSRUQ6IHR1cGxlCi1hbGwgICMgQnVpbHQtaW4gZnVuY3Rpb25zCi1HZW5lcmF0b3JFeGl0ICAjIEV4Y2VwdGlvbnMKZGlmZiAtLWdpdCBhL01pc2MvVmltL3ZpbV9zeW50YXgucHkgYi9NaXNjL1ZpbS92aW1fc3ludGF4LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzJiMzUwLi4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3ZpbV9zeW50YXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotIyBYWFgobm5vcndpdHopOiB3aGF0IHZlcnNpb25zIG9mIHB5dGhvbiBpcyB0aGlzIGZpbGUgc3VwcG9zZWQgdG8gd29yayB3aXRoPwotIyBJdCB1c2VzIHRoZSBvbGQgcHJpbnQgc3RhdGVtZW50IG5vdCBpbiBweTNrLgotCi1pbXBvcnQga2V5d29yZAotaW1wb3J0IGV4Y2VwdGlvbnMKLWltcG9ydCBidWlsdGlucwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi1mcm9tIHN5cyBpbXBvcnQgc3VidmVyc2lvbgotCi1jb21tZW50X2hlYWRlciA9ICcnJyIgQXV0by1nZW5lcmF0ZWQgVmltIHN5bnRheCBmaWxlIGZvciBQeXRob24gKCVzOiByJXMpLgotIgotIiBUbyB1c2U6IGNvcHkgb3Igc3ltbGluayB0byB+Ly52aW0vc3ludGF4L3B5dGhvbi52aW0nJycKLQotc3RhdGVtZW50X2hlYWRlciA9ICIiIgotaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKLSAgZmluaXNoCi1lbmRpZiIiIgotCi1zdGF0ZW1lbnRfZm9vdGVyID0gJycnCi0iIFVuY29tbWVudCB0aGUgJ21pbmxpbmVzJyBzdGF0ZW1lbnQgbGluZSBhbmQgY29tbWVudCBvdXQgdGhlICdtYXhsaW5lcycKLSIgc3RhdGVtZW50IGxpbmU7IGNoYW5nZXMgYmVoYXZpb3VyIHRvIGxvb2sgYXQgbGVhc3QgMjAwMCBsaW5lcyBwcmV2aW91c2x5IGZvcgotIiBzeW50YXggbWF0Y2hlcyBpbnN0ZWFkIG9mIGF0IG1vc3QgMjAwIGxpbmVzCi1zeW4gc3luYyBtYXRjaCBweXRob25TeW5jIGdyb3VwaGVyZSBOT05FICIpOiQiCi1zeW4gc3luYyBtYXhsaW5lcz0yMDAKLSJzeW4gc3luYyBtaW5saW5lcz0yMDAwCi0KLWxldCBiOmN1cnJlbnRfc3ludGF4ID0gInB5dGhvbiInJycKLQotbG9vcGluZyA9ICgnZm9yJywgJ3doaWxlJykKLWNvbmRpdGlvbmFscyA9ICgnaWYnLCAnZWxpZicsICdlbHNlJykKLWJvb2xlYW5fb3BzID0gKCdhbmQnLCAnaW4nLCAnaXMnLCAnbm90JywgJ29yJykKLWltcG9ydF9zdG10cyA9ICgnaW1wb3J0JywgJ2Zyb20nKQotb2JqZWN0X2RlZnMgPSAoJ2RlZicsICdjbGFzcycpCi0KLWV4Y2VwdGlvbl9uYW1lcyA9IHNvcnRlZChleGMgZm9yIGV4YyBpbiBkaXIoZXhjZXB0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGV4Yy5zdGFydHN3aXRoKCdfXycpKQotCi0jIE5lZWQgdG8gaW5jbHVkZSBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoICdfXycgKGUuZy4sIF9faW1wb3J0X18pLCBidXQKLSMgbm90aGluZyB0aGF0IGNvbWVzIHdpdGggbW9kdWxlcyAoZS5nLiwgX19uYW1lX18pLCBzbyBqdXN0IGV4Y2x1ZGUgYW55dGhpbmcgaW4KLSMgdGhlICdleGNlcHRpb25zJyBtb2R1bGUgc2luY2Ugd2Ugd2FudCB0byBpZ25vcmUgZXhjZXB0aW9ucyAqYW5kKiB3aGF0IGFueQotIyBtb2R1bGUgd291bGQgaGF2ZQotYnVpbHRpbl9uYW1lcyA9IHNvcnRlZChidWlsdGluIGZvciBidWlsdGluIGluIGRpcihidWlsdGlucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBidWlsdGluIG5vdCBpbiBkaXIoZXhjZXB0aW9ucykpCi0KLWVzY2FwZXMgPSAocicrXFxbYWJmbnJ0dlwnIlxcXSsnLCByJyJcXFxvXHsxLDN9IicsIHInIlxceFx4XHsyfSInLAotICAgICAgICAgICAgciciXChcXHVceFx7NH1cfFxcVVx4XHs4fVwpIicsIHInIlxcJCInKQotCi10b2RvcyA9ICgiVE9ETyIsICJGSVhNRSIsICJYWFgiKQotCi0jIFhYWCBjb2RpZnk/Ci1udW1iZXJzID0gKHInIlw8MHhceFwrW0xsXVw9XD4iJywgciciXDxcZFwrW0xsakpdXD1cPiInLAotICAgICAgICAgICAgJyJcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IicsCi0gICAgICAgICAgICAnIlw8XGRcK1wuXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiInLAotICAgICAgICAgICAgJyJcPFxkXCtcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IicpCi0KLWNvbnRhaW5lZCA9IGxhbWJkYSB4OiAiJXMgY29udGFpbmVkIiAlIHgKLQotZGVmIHN0cl9yZWdleGVzKCk6Ci0gICAgIiIiR2VuZXJhdG9yIHRvIHlpZWxkIHZhcmlvdXMgY29tYmluYXRpb25zIG9mIHN0cmluZ3MgcmVnZXhlcyIiIgotICAgIHJlZ2V4X3RlbXBsYXRlID0gVGVtcGxhdGUoJ21hdGNoZ3JvdXA9Tm9ybWFsICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnQ9K1t1VV1cPSR7cmF3fSR7c2VwfSsgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmQ9KyR7c2VwfSsgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcke3NraXB9ICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJHtjb250YWluc30nKQotICAgIHNraXBfcmVnZXggPSBUZW1wbGF0ZShyJ3NraXA9K1xcXFxcfFxcJHtzZXB9KycpCi0gICAgZm9yIHJhdyBpbiAoJycsICdbclJdJyk6Ci0gICAgICAgIGZvciBzZXBhcmF0b3IgaW4gKCInIiwgJyInLCAnIiIiJywgIicnJyIpOgotICAgICAgICAgICAgaWYgbGVuKHNlcGFyYXRvcikgPT0gMToKLSAgICAgICAgICAgICAgICBza2lwID0gc2tpcF9yZWdleC5zdWJzdGl0dXRlKHNlcD1zZXBhcmF0b3IpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNraXAgPSAnJwotICAgICAgICAgICAgY29udGFpbnMgPSAnY29udGFpbnM9cHl0aG9uRXNjYXBlJyBpZiBub3QgcmF3IGVsc2UgJycKLSAgICAgICAgICAgIHlpZWxkIHJlZ2V4X3RlbXBsYXRlLnN1YnN0aXR1dGUocmF3PXJhdywgc2VwPXNlcGFyYXRvciwgc2tpcD1za2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyA9IGNvbnRhaW5zKQotCi1zcGFjZV9lcnJvcnMgPSAocidleGNsdWRlbmwgIlxTXHNcKyQibXM9cysxJywgciciIFwrXHQiJywgciciXHRcKyAiJykKLQotc3RhdGVtZW50cyA9ICgKLSAgICAgICAgICAgICAgICAoJycsCi0gICAgICAgICAgICAgICAgICAgICMgWFhYIE1pZ2h0IG5lZWQgdG8gY2hhbmdlIHB5dGhvblN0YXRlbWVudCBzaW5jZSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICMgc3BlY2lmaWMgUmVwZWF0LCBDb25kaXRpb25hbCwgT3BlcmF0b3IsIGV0Yy4gZm9yICd3aGlsZScsCi0gICAgICAgICAgICAgICAgICAgICMgZXRjLgotICAgICAgICAgICAgICAgICAgICBbKCJTdGF0ZW1lbnQiLCAicHl0aG9uU3RhdGVtZW50IiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgKGt3IGZvciBrdyBpbiBrZXl3b3JkLmt3bGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGt3IG5vdCBpbiAobG9vcGluZyArIGNvbmRpdGlvbmFscyArIGJvb2xlYW5fb3BzICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRfc3RtdHMgKyBvYmplY3RfZGVmcykpCi0gICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAgICAgICgiU3RhdGVtZW50IiwgInB5dGhvblN0YXRlbWVudCIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoJyAnLmpvaW4ob2JqZWN0X2RlZnMpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBuZXh0Z3JvdXA9cHl0aG9uRnVuY3Rpb24gc2tpcHdoaXRlJykpLAotICAgICAgICAgICAgICAgICAgICAgKCJGdW5jdGlvbiIsInB5dGhvbkZ1bmN0aW9uIiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWQoJyJbYS16QS1aX11bYS16QS1aMC05X10qIicpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiUmVwZWF0IiwgInB5dGhvblJlcGVhdCIsICJrZXl3b3JkIiwgbG9vcGluZyksCi0gICAgICAgICAgICAgICAgICAgICAoIkNvbmRpdGlvbmFsIiwgInB5dGhvbkNvbmRpdGlvbmFsIiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFscyksCi0gICAgICAgICAgICAgICAgICAgICAoIk9wZXJhdG9yIiwgInB5dGhvbk9wZXJhdG9yIiwgImtleXdvcmQiLCBib29sZWFuX29wcyksCi0gICAgICAgICAgICAgICAgICAgICAoIlByZUNvbmRpdCIsICJweXRob25QcmVDb25kaXQiLCAia2V5d29yZCIsIGltcG9ydF9zdG10cyksCi0gICAgICAgICAgICAgICAgICAgICAoIkNvbW1lbnQiLCAicHl0aG9uQ29tbWVudCIsICJtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyIjLiokIiBjb250YWlucz1weXRob25Ub2RvJyksCi0gICAgICAgICAgICAgICAgICAgICAoIlRvZG8iLCAicHl0aG9uVG9kbyIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWQoJyAnLmpvaW4odG9kb3MpKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlN0cmluZyIsICJweXRob25TdHJpbmciLCAicmVnaW9uIiwgc3RyX3JlZ2V4ZXMoKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlNwZWNpYWwiLCAicHl0aG9uRXNjYXBlIiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbmVkKGVzYykgZm9yIGVzYyBpbiBlc2NhcGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAnJCcgaW4gZXNjKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlNwZWNpYWwiLCAicHl0aG9uRXNjYXBlIiwgIm1hdGNoIiwgciciXFwkIicpLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAoInB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIk51bWJlciIsICJweXRob25OdW1iZXIiLCAibWF0Y2giLCBudW1iZXJzKV0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIkZ1bmN0aW9uIiwgInB5dGhvbkJ1aWx0aW4iLCAia2V5d29yZCIsIGJ1aWx0aW5fbmFtZXMpXQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJFeGNlcHRpb24iLCAicHl0aG9uRXhjZXB0aW9uIiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWVzKV0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJFcnJvciIsICJweXRob25TcGFjZUVycm9yIiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICgiZGlzcGxheSAiICsgZXJyIGZvciBlcnIgaW4gc3BhY2VfZXJyb3JzKSldCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICkKLQotZGVmIHN5bl9wcmVmaXgodHlwZV8sIGtpbmQpOgotICAgIHJldHVybiAnc3luICVzICVzICAgICcgJSAodHlwZV8sIGtpbmQpCi0KLWRlZiBmaWxsX3N0bXQoaXRlcmFibGUsIGZpbGxfbGVuKToKLSAgICAiIiJZaWVsZCBhIHN0cmluZyB0aGF0IGZpbGxzIGF0IG1vc3QgZmlsbF9sZW4gY2hhcmFjdGVycyB3aXRoIHN0cmluZ3MKLSAgICByZXR1cm5lZCBieSAnaXRlcmFibGUnIGFuZCBzZXBhcmF0ZWQgYnkgYSBzcGFjZSIiIgotICAgICMgRGVhbCB3aXRoIHRyYWlsaW5nIGNoYXIgdG8gaGFuZGxlICcgJy5qb2luKCkgY2FsY3VsYXRpb24KLSAgICBmaWxsX2xlbiArPSAxCi0gICAgb3ZlcmZsb3cgPSBOb25lCi0gICAgaXQgPSBpdGVyKGl0ZXJhYmxlKQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGJ1ZmZlcl8gPSBbXQotICAgICAgICB0b3RhbF9sZW4gPSAwCi0gICAgICAgIGlmIG92ZXJmbG93OgotICAgICAgICAgICAgYnVmZmVyXy5hcHBlbmQob3ZlcmZsb3cpCi0gICAgICAgICAgICB0b3RhbF9sZW4gKz0gbGVuKG92ZXJmbG93KSArIDEKLSAgICAgICAgICAgIG92ZXJmbG93ID0gTm9uZQotICAgICAgICB3aGlsZSB0b3RhbF9sZW4gPCBmaWxsX2xlbjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBuZXdfaXRlbSA9IG5leHQoaXQpCi0gICAgICAgICAgICAgICAgYnVmZmVyXy5hcHBlbmQobmV3X2l0ZW0pCi0gICAgICAgICAgICAgICAgdG90YWxfbGVuICs9IGxlbihuZXdfaXRlbSkgKyAxCi0gICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICBpZiBidWZmZXJfOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIG92ZXJmbG93OgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBvdmVyZmxvdwotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiB0b3RhbF9sZW4gPiBmaWxsX2xlbjoKLSAgICAgICAgICAgIG92ZXJmbG93ID0gYnVmZmVyXy5wb3AoKQotICAgICAgICAgICAgdG90YWxfbGVuIC09IGxlbihvdmVyZmxvdykgLSAxCi0gICAgICAgIHJldCA9ICcgJy5qb2luKGJ1ZmZlcl8pCi0gICAgICAgIGFzc2VydCBsZW4ocmV0KSA8PSBmaWxsX2xlbgotICAgICAgICB5aWVsZCByZXQKLQotRklMTCA9IDgwCi0KLWRlZiBtYWluKGZpbGVfcGF0aCk6Ci0gICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnKSBhcyBGSUxFOgotICAgICAgICAjIENvbW1lbnQgZm9yIGZpbGUKLSAgICAgICAgcHJpbnQ+PkZJTEUsIGNvbW1lbnRfaGVhZGVyICUgc3VidmVyc2lvblsxOl0KLSAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgU3RhdGVtZW50cyBhdCBzdGFydCBvZiBmaWxlCi0gICAgICAgIHByaW50Pj5GSUxFLCBzdGF0ZW1lbnRfaGVhZGVyCi0gICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIEdlbmVyYXRlIGNhc2UgZm9yIHB5dGhvbl9oaWdobGlnaHRfYWxsCi0gICAgICAgIHByaW50Pj5GSUxFLCAnaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2FsbCIpJwotICAgICAgICBmb3Igc3RhdGVtZW50X3Zhciwgc3RhdGVtZW50X3BhcnRzIGluIHN0YXRlbWVudHM6Ci0gICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnICBsZXQgJXMgPSAxJyAlIHN0YXRlbWVudF92YXIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnZW5kaWYnCi0gICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBHZW5lcmF0ZSBQeXRob24gZ3JvdXBzCi0gICAgICAgIGZvciBzdGF0ZW1lbnRfdmFyLCBzdGF0ZW1lbnRfcGFydHMgaW4gc3RhdGVtZW50czoKLSAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICdpZiBleGlzdHMoIiVzIiknICUgc3RhdGVtZW50X3ZhcgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcgICcKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaW5kZW50ID0gJycKLSAgICAgICAgICAgIGZvciBjb2xvdXJfZ3JvdXAsIGdyb3VwLCB0eXBlXywgYXJndW1lbnRzIGluIHN0YXRlbWVudF9wYXJ0czoKLSAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVudHMsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBzeW5fcHJlZml4KHR5cGVfLCBncm91cCkKLSAgICAgICAgICAgICAgICAgICAgaWYgdHlwZV8gPT0gJ2tleXdvcmQnOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RtdF9pdGVyID0gZmlsbF9zdG10KGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMTCAtIGxlbihwcmVmaXgpIC0gbGVuKGluZGVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIGluZGVudCArIHByZWZpeCArIG5leHQoc3RtdF9pdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnQgaW4gYXJndW1lbnRzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCBpbmRlbnQgKyBwcmVmaXggKyBhcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCBpbmRlbnQgKyBzeW5fcHJlZml4KHR5cGVfLCBncm91cCkgKyBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnZW5kaWYnCi0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgQXNzb2NpYXRpbmcgUHl0aG9uIGdyb3VwIHdpdGggVmltIGNvbG91ciBncm91cAotICAgICAgICBmb3Igc3RhdGVtZW50X3Zhciwgc3RhdGVtZW50X3BhcnRzIGluIHN0YXRlbWVudHM6Ci0gICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnICBpZiBleGlzdHMoIiVzIiknICUgc3RhdGVtZW50X3ZhcgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcgICAgJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICAnCi0gICAgICAgICAgICBmb3IgY29sb3VyX2dyb3VwLCBncm91cCwgdHlwZV8sIGFyZ3VtZW50cyBpbiBzdGF0ZW1lbnRfcGFydHM6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIChpbmRlbnQgKyAiaGkgZGVmIGxpbmsgJXMgJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3VwLCBjb2xvdXJfZ3JvdXApKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJyAgZW5kaWYnCi0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgU3RhdGVtZW50cyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCi0gICAgICAgIHByaW50Pj5GSUxFLCBzdGF0ZW1lbnRfZm9vdGVyCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigicHl0aG9uLnZpbSIpCmRpZmYgLS1naXQgYS9NaXNjL1ZpbS92aW1yYyBiL01pc2MvVmltL3ZpbXJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzk4Y2NhLi4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3ZpbXJjCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotIiB2aW1yYyBmaWxlIGZvciBmb2xsb3dpbmcgdGhlIGNvZGluZyBzdGFuZGFyZHMgc3BlY2lmaWVkIGluIFBFUCA3ICYgOC4KLSIKLSIgVG8gdXNlIHRoaXMgZmlsZSwgc291cmNlIGl0IGluIHlvdXIgb3duIHBlcnNvbmFsIC52aW1yYyBmaWxlIChgYHNvdXJjZQotIiA8ZmlsZW5hbWU+YGApIG9yLCBpZiB5b3UgZG9uJ3QgaGF2ZSBhIC52aW1yYyBmaWxlLCB5b3UgY2FuIGp1c3Qgc3ltbGluayB0byBpdAotIiAoYGBsbiAtcyA8dGhpcyBmaWxlPiB+Ly52aW1yY2BgKS4gIEFsbCBvcHRpb25zIGFyZSBwcm90ZWN0ZWQgYnkgYXV0b2NtZHMKLSIgKHJlYWQgYmVsb3cgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBjb21tYW5kKSBzbyBibGluZCBzb3VyY2luZyBvZiB0aGlzIGZpbGUKLSIgaXMgc2FmZSBhbmQgd2lsbCBub3QgYWZmZWN0IHlvdXIgc2V0dGluZ3MgZm9yIG5vbi1QeXRob24gb3Igbm9uLUMgZmlsZXMuCi0iCi0iCi0iIEFsbCBzZXR0aW5nIGFyZSBwcm90ZWN0ZWQgYnkgJ2F1JyAoJ2F1dG9jbWQnKSBzdGF0ZW1lbnRzLiAgT25seSBmaWxlcyBlbmRpbmcKLSIgaW4gLnB5IG9yIC5weXcgd2lsbCB0cmlnZ2VyIHRoZSBQeXRob24gc2V0dGluZ3Mgd2hpbGUgZmlsZXMgZW5kaW5nIGluICouYyBvcgotIiAqLmggd2lsbCB0cmlnZ2VyIHRoZSBDIHNldHRpbmdzLiAgVGhpcyBtYWtlcyB0aGUgZmlsZSAic2FmZSIgaW4gdGVybXMgb2Ygb25seQotIiBhZGp1c3Rpbmcgc2V0dGluZ3MgZm9yIFB5dGhvbiBhbmQgQyBmaWxlcy4KLSIKLSIgT25seSBiYXNpYyBzZXR0aW5ncyBuZWVkZWQgdG8gZW5mb3JjZSB0aGUgc3R5bGUgZ3VpZGVsaW5lcyBhcmUgc2V0LgotIiBTb21lIHN1Z2dlc3RlZCBvcHRpb25zIGFyZSBsaXN0ZWQgYnV0IGNvbW1lbnRlZCBvdXQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCi0KLSIgTnVtYmVyIG9mIHNwYWNlcyB0aGF0IGEgcHJlLWV4aXN0aW5nIHRhYiBpcyBlcXVhbCB0by4KLSIgRm9yIHRoZSBhbW91bnQgb2Ygc3BhY2UgdXNlZCBmb3IgYSBuZXcgdGFiIHVzZSBzaGlmdHdpZHRoLgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICpweSwqcHl3LCouYywqLmggc2V0IHRhYnN0b3A9OAotCi0iIFdoYXQgdG8gdXNlIGZvciBhbiBpbmRlbnQuCi0iIFRoaXMgd2lsbCBhZmZlY3QgQ3RybC1UIGFuZCAnYXV0b2luZGVudCcuCi0iIFB5dGhvbjogNCBzcGFjZXMKLSIgQzogdGFicyAocHJlLWV4aXN0aW5nIGZpbGVzKSBvciA0IHNwYWNlcyAobmV3IGZpbGVzKQotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKnB5dyBzZXQgc2hpZnR3aWR0aD00Ci1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dyBzZXQgZXhwYW5kdGFiCi1mdSBTZWxlY3RfY19zdHlsZSgpCi0gICAgaWYgc2VhcmNoKCdeXHQnLCAnbicsIDE1MCkKLSAgICAgICAgc2V0IHNoaWZ0d2lkdGg9OAotICAgICAgICBzZXQgbm9leHBhbmR0YWIKLSAgICBlbCAKLSAgICAgICAgc2V0IHNoaWZ0d2lkdGg9NAotICAgICAgICBzZXQgZXhwYW5kdGFiCi0gICAgZW4KLWVuZGYKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLmMsKi5oIGNhbGwgU2VsZWN0X2Nfc3R5bGUoKQotYXUgQnVmUmVhZCxCdWZOZXdGaWxlIE1ha2VmaWxlKiBzZXQgbm9leHBhbmR0YWIKLQotIiBVc2UgdGhlIGJlbG93IGhpZ2hsaWdodCBncm91cCB3aGVuIGRpc3BsYXlpbmcgYmFkIHdoaXRlc3BhY2UgaXMgZGVzaXJlZC4KLWhpZ2hsaWdodCBCYWRXaGl0ZXNwYWNlIGN0ZXJtYmc9cmVkIGd1aWJnPXJlZAotCi0iIERpc3BsYXkgdGFicyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpbiBQeXRob24gbW9kZSBhcyBiYWQuCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dyBtYXRjaCBCYWRXaGl0ZXNwYWNlIC9eXHRcKy8KLSIgTWFrZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGJlIGZsYWdnZWQgYXMgYmFkLgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCwqLnJzdCBtYXRjaCBCYWRXaGl0ZXNwYWNlIC9cc1wrJC8KLQotIiBXcmFwIHRleHQgYWZ0ZXIgYSBjZXJ0YWluIG51bWJlciBvZiBjaGFyYWN0ZXJzCi0iIFB5dGhvbjogNzkgCi0iIEM6IDc5Ci1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dywqLmMsKi5oIHNldCB0ZXh0d2lkdGg9NzkKLQotIiBUdXJuIG9mZiBzZXR0aW5ncyBpbiAnZm9ybWF0b3B0aW9ucycgcmVsYXRpbmcgdG8gY29tbWVudCBmb3JtYXR0aW5nLgotIiAtIGMgOiBkbyBub3QgYXV0b21hdGljYWxseSBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gd3JhcHBpbmcgYmFzZWQgb24KLSIgICAgJ3RleHR3aWR0aCcKLSIgLSBvIDogZG8gbm90IGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIgd2hlbiB1c2luZyAnbycgb3IgJ08nIGZyb20gY29tbWFuZCBtb2RlCi0iIC0gciA6IGRvIG5vdCBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gaGl0dGluZyA8RW50ZXI+IGluIGluc2VydCBtb2RlCi0iIFB5dGhvbjogbm90IG5lZWRlZAotIiBDOiBwcmV2ZW50cyBpbnNlcnRpb24gb2YgJyonIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgbGluZSBpbiBhIGNvbW1lbnQKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLmMsKi5oIHNldCBmb3JtYXRvcHRpb25zLT1jIGZvcm1hdG9wdGlvbnMtPW8gZm9ybWF0b3B0aW9ucy09cgotCi0iIFVzZSBVTklYIChcbikgbGluZSBlbmRpbmdzLgotIiBPbmx5IHVzZWQgZm9yIG5ldyBmaWxlcyBzbyBhcyB0byBub3QgZm9yY2UgZXhpc3RpbmcgZmlsZXMgdG8gY2hhbmdlIHRoZWlyCi0iIGxpbmUgZW5kaW5ncy4KLSIgUHl0aG9uOiB5ZXMKLSIgQzogeWVzCi1hdSBCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCBzZXQgZmlsZWZvcm1hdD11bml4Ci0KLQotIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0iIFRoZSBmb2xsb3dpbmcgc2VjdGlvbiBjb250YWlucyBzdWdnZXN0ZWQgc2V0dGluZ3MuICBXaGlsZSBpbiBubyB3YXkgcmVxdWlyZWQKLSIgdG8gbWVldCBjb2Rpbmcgc3RhbmRhcmRzLCB0aGV5IGFyZSBoZWxwZnVsLgotCi0iIFNldCB0aGUgZGVmYXVsdCBmaWxlIGVuY29kaW5nIHRvIFVURi04OiBgYHNldCBlbmNvZGluZz11dGYtOGBgCi0KLSIgUHV0cyBhIG1hcmtlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBVVEYgYW5kCi0iIFVDUyBlbmNvZGluZyAoV0FSTklORzogY2FuIHRyaWNrIHNoZWxscyBpbnRvIHRoaW5raW5nIGEgdGV4dCBmaWxlIGlzIGFjdHVhbGx5Ci0iIGEgYmluYXJ5IGZpbGUgd2hlbiBleGVjdXRpbmcgdGhlIHRleHQgZmlsZSk6IGBgc2V0IGJvbWJgYAotCi0iIEZvciBmdWxsIHN5bnRheCBoaWdobGlnaHRpbmc6Ci0iYGBsZXQgcHl0aG9uX2hpZ2hsaWdodF9hbGw9MWBgCi0iYGBzeW50YXggb25gYAotCi0iIEF1dG9tYXRpY2FsbHkgaW5kZW50IGJhc2VkIG9uIGZpbGUgdHlwZTogYGBmaWxldHlwZSBpbmRlbnQgb25gYAotIiBLZWVwIGluZGVudGF0aW9uIGxldmVsIGZyb20gcHJldmlvdXMgbGluZTogYGBzZXQgYXV0b2luZGVudGBgCi0KLSIgRm9sZGluZyBiYXNlZCBvbiBpbmRlbnRhdGlvbjogYGBzZXQgZm9sZG1ldGhvZD1pbmRlbnRgYApkaWZmIC0tZ2l0IGEvTWlzYy9jb3Zlcml0eV9tb2RlbC5jIGIvTWlzYy9jb3Zlcml0eV9tb2RlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjNhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL2NvdmVyaXR5X21vZGVsLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qIENvdmVyaXR5IFNjYW4gbW9kZWwKKyAqCisgKiBUaGlzIGlzIGEgbW9kZWxpbmcgZmlsZSBmb3IgQ292ZXJpdHkgU2Nhbi4gTW9kZWxpbmcgaGVscHMgdG8gYXZvaWQgZmFsc2UKKyAqIHBvc2l0aXZlcy4KKyAqCisgKiAtIEEgbW9kZWwgZmlsZSBjYW4ndCBpbXBvcnQgYW55IGhlYWRlciBmaWxlcy4KKyAqIC0gVGhlcmVmb3JlIG9ubHkgc29tZSBidWlsdC1pbiBwcmltaXRpdmVzIGxpa2UgaW50LCBjaGFyIGFuZCB2b2lkIGFyZQorICogICBhdmFpbGFibGUgYnV0IG5vdCB3Y2hhcl90LCBOVUxMIGV0Yy4KKyAqIC0gTW9kZWxpbmcgZG9lc24ndCBuZWVkIGZ1bGwgc3RydWN0cyBhbmQgdHlwZWRlZnMuIFJ1ZGltZW50YXJ5IHN0cnVjdHMKKyAqICAgYW5kIHNpbWlsYXIgdHlwZXMgYXJlIHN1ZmZpY2llbnQuCisgKiAtIEFuIHVuaW5pdGlhbGl6ZWQgbG9jYWwgcG9pbnRlciBpcyBub3QgYW4gZXJyb3IuIEl0IHNpZ25pZmllcyB0aGF0IHRoZQorICogICB2YXJpYWJsZSBjb3VsZCBiZSBlaXRoZXIgTlVMTCBvciBoYXZlIHNvbWUgZGF0YS4KKyAqCisgKiBDb3Zlcml0eSBTY2FuIGRvZXNuJ3QgcGljayB1cCBtb2RpZmljYXRpb25zIGF1dG9tYXRpY2FsbHkuIFRoZSBtb2RlbCBmaWxlCisgKiBtdXN0IGJlIHVwbG9hZGVkIGJ5IGFuIGFkbWluIGluIHRoZSBhbmFseXNpcyBzZXR0aW5ncyBvZgorICogaHR0cDovL3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3RzLzIwMAorICovCisKKy8qIGR1bW15IGRlZmluaXRpb25zLCBpbiBtb3N0IGNhc2VzIHN0cnVjdCBmaWVsZHMgYXJlbid0IHJlcXVpcmVkLiAqLworCisjZGVmaW5lIE5VTEwgKHZvaWQgKikwCisjZGVmaW5lIGFzc2VydChvcCkgLyogZW1wdHkgKi8KK3R5cGVkZWYgaW50IHNkaWdpdDsKK3R5cGVkZWYgbG9uZyBQeV9zc2l6ZV90OwordHlwZWRlZiBsb25nIGxvbmcgUFlfTE9OR19MT05HOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB3Y2hhcl90OwordHlwZWRlZiBzdHJ1Y3Qge30gUHlPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCB7fSBncmFtbWFyOwordHlwZWRlZiBzdHJ1Y3Qge30gRElSOwordHlwZWRlZiBzdHJ1Y3Qge30gUkZJTEU7CisKKy8qIFB5dGhvbi9weXRob25ydW4uYworICogcmVzb3VyZWNlIGxlYWsgZmFsc2UgcG9zaXRpdmUgKi8KKwordm9pZCBQeV9GYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1zZykgeworICAgIF9fY292ZXJpdHlfcGFuaWNfXygpOworfQorCisvKiBPYmplY3RzL2xvbmdvYmplY3QuYworICogTkVHQVRJVkVfUkVUVVJOUyBmYWxzZSBwb3NpdGl2ZSAqLworCitzdGF0aWMgUHlPYmplY3QgKmdldF9zbWFsbF9pbnQoc2RpZ2l0IGl2YWwpCit7CisgICAgLyogTmV2ZXIgcmV0dXJucyBOVUxMICovCisgICAgUHlPYmplY3QgKnA7CisgICAgYXNzZXJ0KHAgIT0gTlVMTCk7CisgICAgcmV0dXJuIHA7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbUxvbmcobG9uZyBpdmFsKQoreworICAgIFB5T2JqZWN0ICpwOworICAgIGludCBtYXliZTsKKworICAgIGlmICgoaXZhbCA+PSAtNSkgJiYgKGl2YWwgPCAyNTcgKyA1KSkgeworICAgICAgICBwID0gZ2V0X3NtYWxsX2ludChpdmFsKTsKKyAgICAgICAgYXNzZXJ0KHAgIT0gTlVMTCk7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKyAgICBpZiAobWF5YmUpCisgICAgICAgIHJldHVybiBwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xPTkdfTE9ORyBpdmFsKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaXZhbCk7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbVNzaXplX3QoUHlfc3NpemVfdCBpdmFsKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaXZhbCk7Cit9CisKKy8qIHRhaW50ZWQgc2lua3MKKyAqCisgKiBDb3Zlcml0eSBjb25zaWRlcnMgYXJndiwgZW52aXJvbiwgcmVhZCgpIGRhdGEgZXRjIGFzIHRhaW5lZC4KKyAqLworCitQeU9iamVjdCAqUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhmaWxlbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFB5dGhvbi9maWxldXRpbHMuYyAqLword2NoYXJfdCAqX1B5X2NoYXIyd2NoYXIoY29uc3QgY2hhciogYXJnLCBzaXplX3QgKnNpemUpCit7CisgICB3Y2hhcl90ICp3OworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhhcmcpOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhzaXplKTsKKyAgIHJldHVybiB3OworfQorCisvKiBQYXJzZXIvcGdlbm1haW4uYyAqLworZ3JhbW1hciAqZ2V0Z3JhbW1hcihjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBncmFtbWFyICpnOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhmaWxlbmFtZSk7CisgICAgcmV0dXJuIGc7Cit9CisKKy8qIFB5dGhvbi9tYXJzaGFsLmMgKi8KKworc3RhdGljIFB5X3NzaXplX3Qgcl9zdHJpbmcoY2hhciAqcywgUHlfc3NpemVfdCBuLCBSRklMRSAqcCkKK3sKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfc3RyaW5nX2FyZ3VtZW50X18ocyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHJfbG9uZyhSRklMRSAqcCkKK3sKKyAgICBsb25nIGw7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNF07CisKKyAgICByX3N0cmluZygoY2hhciAqKWJ1ZmZlciwgNCwgcCk7CisgICAgX19jb3Zlcml0eV90YWludGVkX3N0cmluZ19zYW5pdGl6ZV9jb250ZW50X18oYnVmZmVyKTsKKyAgICBsID0gKGxvbmcpYnVmZmVyOworICAgIHJldHVybiBsOworfQorCisvKiBDb3Zlcml0eSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhhdCBmZG9wZW5kaXIoKSBtYXkgdGFrZSBvd25lcnNoaXAgb2YgZmQuICovCisKK0RJUiAqZmRvcGVuZGlyKGludCBmZCkgeworICAgIERJUiAqZDsKKyAgICBpZiAoZCkgeworICAgICAgICBfX2NvdmVyaXR5X2Nsb3NlX18oZmQpOworICAgIH0KKyAgICByZXR1cm4gZDsKK30KKwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24tY29uZmlnLmluIGIvTWlzYy9weXRob24tY29uZmlnLmluCmluZGV4IGFjM2EyYzcuLjBiOWI1ZGMgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorKysgYi9NaXNjL3B5dGhvbi1jb25maWcuaW4KQEAgLTEsNiArMSw4IEBACiAjIUBFWEVOQU1FQAogIyAtKi0gcHl0aG9uIC0qLQogCisjIEtlZXAgdGhpcyBzY3JpcHQgaW4gc3luYyB3aXRoIHB5dGhvbi1jb25maWcuc2guaW4KKwogaW1wb3J0IGdldG9wdAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi1jb25maWcuc2guaW4gYi9NaXNjL3B5dGhvbi1jb25maWcuc2guaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhM2RiZQotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvcHl0aG9uLWNvbmZpZy5zaC5pbgpAQCAtMCwwICsxLDExMSBAQAorIyEvYmluL3NoCisKKyMgS2VlcCB0aGlzIHNjcmlwdCBpbiBzeW5jIHdpdGggcHl0aG9uLWNvbmZpZy5pbgorCitleGl0X3dpdGhfdXNhZ2UgKCkKK3sKKyAgICBlY2hvICJVc2FnZTogJDAgLS1wcmVmaXh8LS1leGVjLXByZWZpeHwtLWluY2x1ZGVzfC0tbGlic3wtLWNmbGFnc3wtLWxkZmxhZ3N8LS1leHRlbnNpb24tc3VmZml4fC0taGVscHwtLWFiaWZsYWdzfC0tY29uZmlnZGlyIgorICAgIGV4aXQgJDEKK30KKworaWYgWyAiJDEiID0gIiIgXSA7IHRoZW4KKyAgICBleGl0X3dpdGhfdXNhZ2UgMQorZmkKKworIyBSZXR1cm5zIHRoZSBhY3R1YWwgcHJlZml4IHdoZXJlIHRoaXMgc2NyaXB0IHdhcyBpbnN0YWxsZWQgdG8uCitpbnN0YWxsZWRfcHJlZml4ICgpCit7CisgICAgUkVTVUxUPSQoZGlybmFtZSAkKGNkICQoZGlybmFtZSAiJDEiKSAmJiBwd2QgLVApKQorICAgIGlmIHdoaWNoIHJlYWRsaW5rID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICAgICAgaWYgcmVhZGxpbmsgLWYgIiRSRVNVTFQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIFJFU1VMVD0kKHJlYWRsaW5rIC1mICIkUkVTVUxUIikKKyAgICAgICAgZmkKKyAgICBmaQorICAgIGVjaG8gJFJFU1VMVAorfQorCitwcmVmaXhfYnVpbGQ9IkBwcmVmaXhAIgorcHJlZml4X3JlYWw9JChpbnN0YWxsZWRfcHJlZml4ICIkMCIpCisKKyMgVXNlIHNlZCB0byBmaXggcGF0aHMgZnJvbSB0aGVpciBidWlsdC10byBsb2NhdGlvbnMgdG8gdGhlaXIgaW5zdGFsbGVkLXRvCisjIGxvY2F0aW9ucy4KK3ByZWZpeD0kKGVjaG8gIiRwcmVmaXhfYnVpbGQiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitleGVjX3ByZWZpeF9idWlsZD0iQGV4ZWNfcHJlZml4QCIKK2V4ZWNfcHJlZml4PSQoZWNobyAiJGV4ZWNfcHJlZml4X2J1aWxkIiB8IHNlZCAicyMkZXhlY19wcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitpbmNsdWRlZGlyPSQoZWNobyAiQGluY2x1ZGVkaXJAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorbGliZGlyPSQoZWNobyAiQGxpYmRpckAiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitDRkxBR1M9JChlY2hvICJAQ0ZMQUdTQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK1ZFUlNJT049IkBWRVJTSU9OQCIKK0xJQk09IkBMSUJNQCIKK0xJQkM9IkBMSUJDQCIKK1NZU0xJQlM9IiRMSUJNICRMSUJDIgorQUJJRkxBR1M9IkBBQklGTEFHU0AiCitMSUJTPSJATElCU0AgJFNZU0xJQlMgLWxweXRob24ke1ZFUlNJT059JHtBQklGTEFHU30iCitCQVNFQ0ZMQUdTPSJAQkFTRUNGTEFHU0AiCitMRExJQlJBUlk9IkBMRExJQlJBUllAIgorTElOS0ZPUlNIQVJFRD0iQExJTktGT1JTSEFSRURAIgorT1BUPSJAT1BUQCIKK1BZX0VOQUJMRV9TSEFSRUQ9IkBQWV9FTkFCTEVfU0hBUkVEQCIKK0xEVkVSU0lPTj0iQExEVkVSU0lPTkAiCitMSUJERVNUPSR7cHJlZml4fS9saWIvcHl0aG9uJHtWRVJTSU9OfQorTElCUEw9JChlY2hvICJATElCUExAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorU089IkBTT0AiCitQWVRIT05GUkFNRVdPUks9IkBQWVRIT05GUkFNRVdPUktAIgorSU5DRElSPSItSSRpbmNsdWRlZGlyL3B5dGhvbiR7VkVSU0lPTn0ke0FCSUZMQUdTfSIKK1BMQVRJTkNESVI9Ii1JJGluY2x1ZGVkaXIvcHl0aG9uJHtWRVJTSU9OfSR7QUJJRkxBR1N9IgorCisjIFNjYW4gZm9yIC0taGVscCBvciB1bmtub3duIGFyZ3VtZW50LgorZm9yIEFSRyBpbiAkKgorZG8KKyAgICBjYXNlICRBUkcgaW4KKyAgICAgICAgLS1oZWxwKQorICAgICAgICAgICAgZXhpdF93aXRoX3VzYWdlIDAKKyAgICAgICAgOzsKKyAgICAgICAgLS1wcmVmaXh8LS1leGVjLXByZWZpeHwtLWluY2x1ZGVzfC0tbGlic3wtLWNmbGFnc3wtLWxkZmxhZ3N8LS1leHRlbnNpb24tc3VmZml4fC0tYWJpZmxhZ3N8LS1jb25maWdkaXIpCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBleGl0X3dpdGhfdXNhZ2UgMQorICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworZm9yIEFSRyBpbiAiJEAiCitkbworICAgIGNhc2UgIiRBUkciIGluCisgICAgICAgIC0tcHJlZml4KQorICAgICAgICAgICAgZWNobyAiJHByZWZpeCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1leGVjLXByZWZpeCkKKyAgICAgICAgICAgIGVjaG8gIiRleGVjX3ByZWZpeCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1pbmNsdWRlcykKKyAgICAgICAgICAgIGVjaG8gIiRJTkNESVIgJFBMQVRJTkNESVIiCisgICAgICAgIDs7CisgICAgICAgIC0tY2ZsYWdzKQorICAgICAgICAgICAgZWNobyAiJElOQ0RJUiAkUExBVElOQ0RJUiAkQkFTRUNGTEFHUyAkQ0ZMQUdTICRPUFQiCisgICAgICAgIDs7CisgICAgICAgIC0tbGlicykKKyAgICAgICAgICAgIGVjaG8gIiRMSUJTIgorICAgICAgICA7OworICAgICAgICAtLWxkZmxhZ3MpCisgICAgICAgICAgICBMSU5LRk9SU0hBUkVEVVNFRD0KKyAgICAgICAgICAgIGlmIFsgLXogIiRQWVRIT05GUkFNRVdPUksiIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgTElOS0ZPUlNIQVJFRFVTRUQ9JExJTktGT1JTSEFSRUQKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBMSUJQTFVTRUQ9CisgICAgICAgICAgICBpZiBbICIkUFlfRU5BQkxFX1NIQVJFRCIgPSAiMCIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBMSUJQTFVTRUQ9Ii1MJExJQlBMIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gIiRMSUJQTFVTRUQgLUwkbGliZGlyICRMSUJTICRMSU5LRk9SU0hBUkVEVVNFRCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1leHRlbnNpb24tc3VmZml4KQorICAgICAgICAgICAgZWNobyAiJFNPIgorICAgICAgICA7OworICAgICAgICAtLWFiaWZsYWdzKQorICAgICAgICAgICAgZWNobyAiJEFCSUZMQUdTIgorICAgICAgICA7OworICAgICAgICAtLWNvbmZpZ2RpcikKKyAgICAgICAgICAgIGVjaG8gIiRMSUJQTCIKKyAgICAgICAgOzsKK2VzYWMKK2RvbmUKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLm1hbiBiL01pc2MvcHl0aG9uLm1hbgppbmRleCBiY2IzZWM4Li41MmFlZGVlIDEwMDY0NAotLS0gYS9NaXNjL3B5dGhvbi5tYW4KKysrIGIvTWlzYy9weXRob24ubWFuCkBAIC0yNiwxMSArMjYsMTQgQEAKIC5CIFwtaQogXQogWwotLkIgXC1tCi0uSSBtb2R1bGUtbmFtZQorLkIgXC1JCiBdCiAuYnIKICAgICAgICBbCisuQiBcLW0KKy5JIG1vZHVsZS1uYW1lCitdCitbCiAuQiBcLXEKIF0KIFsKQEAgLTEzOSw2ICsxNDIsMTMgQEAKIHVzZWZ1bCB0byBpbnNwZWN0IGdsb2JhbCB2YXJpYWJsZXMgb3IgYSBzdGFjayB0cmFjZSB3aGVuIGEgc2NyaXB0CiByYWlzZXMgYW4gZXhjZXB0aW9uLgogLlRQCisuQiBcLUkKK1J1biBQeXRob24gaW4gaXNvbGF0ZWQgbW9kZS4gVGhpcyBhbHNvIGltcGxpZXMgXGZCXC1FXGZQIGFuZCBcZkJcLVNcZlAuIEluCitpc29sYXRlZCBtb2RlIHN5cy5wYXRoIGNvbnRhaW5zIG5laXRoZXIgdGhlIHNjcmlwdOKAmXMgZGlyZWN0b3J5IG5vciB0aGUgdXNlcuKAmXMKK3NpdGUtcGFja2FnZXMgZGlyZWN0b3J5LiBBbGwgUFlUSE9OKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGlnbm9yZWQsIHRvby4KK0Z1cnRoZXIgcmVzdHJpY3Rpb25zIG1heSBiZSBpbXBvc2VkIHRvIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBpbmplY3RpbmcKK21hbGljaW91cyBjb2RlLgorLlRQCiAuQkkgIlwtbSAiIG1vZHVsZS1uYW1lCiBTZWFyY2hlcyAKIC5JIHN5cy5wYXRoIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TZXR1cC5kaXN0IGIvTW9kdWxlcy9TZXR1cC5kaXN0CmluZGV4IGY0NWRlNWMuLmViZjgxNzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvU2V0dXAuZGlzdAorKysgYi9Nb2R1bGVzL1NldHVwLmRpc3QKQEAgLTExMyw5ICsxMTMsMTEgQEAKIF9jb2RlY3MgX2NvZGVjc21vZHVsZS5jCQkjIGFjY2VzcyB0byB0aGUgYnVpbHRpbiBjb2RlY3MgYW5kIGNvZGVjIHJlZ2lzdHJ5CiBfd2Vha3JlZiBfd2Vha3JlZi5jCQkjIHdlYWsgcmVmZXJlbmNlcwogX2Z1bmN0b29scyBfZnVuY3Rvb2xzbW9kdWxlLmMgICAjIFRvb2xzIGZvciB3b3JraW5nIHdpdGggZnVuY3Rpb25zIGFuZCBjYWxsYWJsZSBvYmplY3RzCi1vcGVyYXRvciBvcGVyYXRvci5jCSAgICAgICAgIyBvcGVyYXRvci5hZGQoKSBhbmQgc2ltaWxhciBnb29kaWVzCitfb3BlcmF0b3IgX29wZXJhdG9yLmMJICAgICAgICAjIG9wZXJhdG9yLmFkZCgpIGFuZCBzaW1pbGFyIGdvb2RpZXMKIF9jb2xsZWN0aW9ucyBfY29sbGVjdGlvbnNtb2R1bGUuYyAjIENvbnRhaW5lciB0eXBlcwogaXRlcnRvb2xzIGl0ZXJ0b29sc21vZHVsZS5jICAgICMgRnVuY3Rpb25zIGNyZWF0aW5nIGl0ZXJhdG9ycyBmb3IgZWZmaWNpZW50IGxvb3BpbmcgCithdGV4aXQgYXRleGl0bW9kdWxlLmMgICAgICAjIFJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBiZSBydW4gYXQgaW50ZXJwcmV0ZXItc2h1dGRvd24KK19zdGF0IF9zdGF0LmMJCQkjIHN0YXQuaCBpbnRlcmZhY2UKIAogIyBhY2Nlc3MgdG8gSVNPIEMgbG9jYWxlIHN1cHBvcnQKIF9sb2NhbGUgX2xvY2FsZW1vZHVsZS5jICAjIC1saW50bApAQCAtMTcwLDcgKzE3Miw2IEBACiAjX3dlYWtyZWYgX3dlYWtyZWYuYwkjIGJhc2ljIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQKICNfdGVzdGNhcGkgX3Rlc3RjYXBpbW9kdWxlLmMgICAgIyBQeXRob24gQyBBUEkgdGVzdCBtb2R1bGUKICNfcmFuZG9tIF9yYW5kb21tb2R1bGUuYwkjIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi0jYXRleGl0IGF0ZXhpdG1vZHVsZS5jICAgICAgIyBSZWdpc3RlciBmdW5jdGlvbnMgdG8gYmUgcnVuIGF0IGludGVycHJldGVyLXNodXRkb3duCiAjX2VsZW1lbnR0cmVlIC1JJChzcmNkaXIpL01vZHVsZXMvZXhwYXQgLURIQVZFX0VYUEFUX0NPTkZJR19IIC1EVVNFX1BZRVhQQVRfQ0FQSSBfZWxlbWVudHRyZWUuYwkjIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCiAjX3BpY2tsZSBfcGlja2xlLmMJIyBwaWNrbGUgYWNjZWxlcmF0b3IKICNfZGF0ZXRpbWUgX2RhdGV0aW1lbW9kdWxlLmMJIyBkYXRldGltZSBhY2NlbGVyYXRvcgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fYnoybW9kdWxlLmMgYi9Nb2R1bGVzL19iejJtb2R1bGUuYwppbmRleCAzZjdhNmNmLi5mZDA1ZGUwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19iejJtb2R1bGUuYworKysgYi9Nb2R1bGVzL19iejJtb2R1bGUuYwpAQCAtMzYsOCArMzYsNiBAQAogI2RlZmluZSBSRUxFQVNFX0xPQ0sob2JqKQogI2VuZGlmCiAKLSNkZWZpbmUgTUlOKFgsIFkpICgoKFgpIDwgKFkpKSA/IChYKSA6IChZKSkKLQogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMTQ5LDcgKzE0Nyw3IEBACiAgICAgYy0+YnpzLm5leHRfaW4gPSBkYXRhOwogICAgIGMtPmJ6cy5hdmFpbF9pbiA9IDA7CiAgICAgYy0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KTsKLSAgICBjLT5ienMuYXZhaWxfb3V0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgIGMtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOwogICAgIGZvciAoOzspIHsKICAgICAgICAgY2hhciAqdGhpc19vdXQ7CiAgICAgICAgIGludCBiemVycm9yOwpAQCAtMTU3LDcgKzE1NSw3IEBACiAgICAgICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCiAgICAgICAgICAgIERvIGNvbXByZXNzaW9uIGluIGNodW5rcyBvZiBubyBtb3JlIHRoYW4gVUlOVF9NQVggYnl0ZXMgZWFjaC4gKi8KICAgICAgICAgaWYgKGMtPmJ6cy5hdmFpbF9pbiA9PSAwICYmIGxlbiA+IDApIHsKLSAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9IE1JTihsZW4sIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgbGVuIC09IGMtPmJ6cy5hdmFpbF9pbjsKICAgICAgICAgfQogCkBAIC0xNzMsNyArMTcxLDcgQEAKICAgICAgICAgICAgICAgICBjLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgZGF0YV9zaXplOwogICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZWZ0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIC0gZGF0YV9zaXplOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9IE1JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOworICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CiAgICAgICAgIH0KIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0yNTgsNiArMjU2LDI0IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkKgorQloyX01hbGxvYyh2b2lkKiBjdHgsIGludCBpdGVtcywgaW50IHNpemUpCit7CisgICAgaWYgKGl0ZW1zIDwgMCB8fCBzaXplIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKChzaXplX3QpaXRlbXMgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYIC8gKHNpemVfdClzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDogY29tcHJlc3MoKSBhbmQgZGVjb21wcmVzcygpCisgICAgICAgcmVsZWFzZSB0aGUgR0lMICovCisgICAgcmV0dXJuIFB5TWVtX1Jhd01hbGxvYyhpdGVtcyAqIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorQloyX0ZyZWUodm9pZCogY3R4LCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworfQorCiBzdGF0aWMgaW50CiBCWjJDb21wcmVzc29yX2luaXQoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CkBAIC0yODAsNiArMjk2LDkgQEAKICAgICB9CiAjZW5kaWYKIAorICAgIHNlbGYtPmJ6cy5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPmJ6cy5iemFsbG9jID0gQloyX01hbGxvYzsKKyAgICBzZWxmLT5ienMuYnpmcmVlID0gQloyX0ZyZWU7CiAgICAgYnplcnJvciA9IEJaMl9iekNvbXByZXNzSW5pdCgmc2VsZi0+YnpzLCBjb21wcmVzc2xldmVsLCAwLCAwKTsKICAgICBpZiAoY2F0Y2hfYnoyX2Vycm9yKGJ6ZXJyb3IpKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzc5LDEwICszOTgsMTAgQEAKICAgICBkLT5ienMubmV4dF9pbiA9IGRhdGE7CiAgICAgLyogT24gYSA2NC1iaXQgc3lzdGVtLCBsZW4gbWlnaHQgbm90IGZpdCBpbiBhdmFpbF9pbiAoYW4gdW5zaWduZWQgaW50KS4KICAgICAgICBEbyBkZWNvbXByZXNzaW9uIGluIGNodW5rcyBvZiBubyBtb3JlIHRoYW4gVUlOVF9NQVggYnl0ZXMgZWFjaC4gKi8KLSAgICBkLT5ienMuYXZhaWxfaW4gPSBNSU4obGVuLCBVSU5UX01BWCk7CisgICAgZC0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7CiAgICAgbGVuIC09IGQtPmJ6cy5hdmFpbF9pbjsKICAgICBkLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpOwotICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCk7CisgICAgZC0+YnpzLmF2YWlsX291dCA9IFNNQUxMQ0hVTks7CiAgICAgZm9yICg7OykgewogICAgICAgICBjaGFyICp0aGlzX291dDsKICAgICAgICAgaW50IGJ6ZXJyb3I7CkBAIC00MDgsNyArNDI3LDcgQEAKICAgICAgICAgaWYgKGQtPmJ6cy5hdmFpbF9pbiA9PSAwKSB7CiAgICAgICAgICAgICBpZiAobGVuID09IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkLT5ienMuYXZhaWxfaW4gPSBNSU4obGVuLCBVSU5UX01BWCk7CisgICAgICAgICAgICBkLT5ienMuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KVB5X01JTihsZW4sIFVJTlRfTUFYKTsKICAgICAgICAgICAgIGxlbiAtPSBkLT5ienMuYXZhaWxfaW47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGQtPmJ6cy5hdmFpbF9vdXQgPT0gMCkgewpAQCAtNDE5LDcgKzQzOCw3IEBACiAgICAgICAgICAgICAgICAgZC0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGRhdGFfc2l6ZTsKICAgICAgICAgICAgICAgICBidWZmZXJfbGVmdCA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSAtIGRhdGFfc2l6ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBNSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSAodW5zaWduZWQgaW50KVB5X01JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChkYXRhX3NpemUgIT0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwppbmRleCA0MDAzN2IxLi4wYjA5M2FiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwpAQCAtMTg5LDkgKzE4OSw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgICAgICByZWdpc3RlciBjaGFyIGM7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgKnAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICBjaGFyIGM7CisgICAgICAgIGNoYXIgKnAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAvKiBUaGVyZSdzIGF0IGxlYXN0IGVub3VnaCByb29tIGZvciBhIGhleCBlc2NhcGUgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCmluZGV4IGM2Yzc5ODMuLjBjYzAxM2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYwpAQCAtMywzMCArMywzMiBAQAogCiAvKiBjb2xsZWN0aW9ucyBtb2R1bGUgaW1wbGVtZW50YXRpb24gb2YgYSBkZXF1ZSgpIGRhdGF0eXBlCiAgICBXcml0dGVuIGFuZCBtYWludGFpbmVkIGJ5IFJheW1vbmQgRC4gSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KLSAgIENvcHlyaWdodCAoYykgMjAwNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KKyAgIENvcHlyaWdodCAoYykgMjAwNC0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICovCiAKIC8qIFRoZSBibG9jayBsZW5ndGggbWF5IGJlIHNldCB0byBhbnkgbnVtYmVyIG92ZXIgMS4gIExhcmdlciBudW1iZXJzCi0gKiByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyB0byB0aGUgbWVtb3J5IGFsbG9jYXRvciBidXQgdGFrZSBtb3JlCi0gKiBtZW1vcnkuICBJZGVhbGx5LCBCTE9DS0xFTiBzaG91bGQgYmUgc2V0IHdpdGggYW4gZXllIHRvIHRoZQotICogbGVuZ3RoIG9mIGEgY2FjaGUgbGluZS4KKyAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yLCBnaXZlIGZhc3RlcgorICogaW5kZXhpbmcgYW5kIHJvdGF0aW9uLCBhbmQgcmVkdWNlIHRoZSBsaW5rOjpkYXRhIG92ZXJoZWFkIHJhdGlvLgorICoKKyAqIElkZWFsbHksIHRoZSBibG9jayBsZW5ndGggd2lsbCBiZSBzZXQgdG8gdHdvIGxlc3MgdGhhbiBzb21lCisgKiBtdWx0aXBsZSBvZiB0aGUgY2FjaGUtbGluZSBsZW5ndGggKHNvIHRoYXQgdGhlIGZ1bGwgYmxvY2sKKyAqIGluY2x1ZGluZyB0aGUgbGVmdGxpbmsgYW5kIHJpZ2h0bGluayB3aWxsIGZpdCBuZWF0bHkgaW50bworICogY2FjaGUgbGluZXMpLgogICovCiAKICNkZWZpbmUgQkxPQ0tMRU4gNjIKICNkZWZpbmUgQ0VOVEVSICgoQkxPQ0tMRU4gLSAxKSAvIDIpCiAKIC8qIEEgYGRlcXVlb2JqZWN0YCBpcyBjb21wb3NlZCBvZiBhIGRvdWJseS1saW5rZWQgbGlzdCBvZiBgYmxvY2tgIG5vZGVzLgotICogVGhpcyBsaXN0IGlzIG5vdCBjaXJjdWxhciAodGhlIGxlZnRtb3N0IGJsb2NrIGhhcyBsZWZ0bGluaz09TlVMTCwKLSAqIGFuZCB0aGUgcmlnaHRtb3N0IGJsb2NrIGhhcyByaWdodGxpbms9PU5VTEwpLiAgQSBkZXF1ZSBkJ3MgZmlyc3QKLSAqIGVsZW1lbnQgaXMgYXQgZC5sZWZ0YmxvY2tbbGVmdGluZGV4XSBhbmQgaXRzIGxhc3QgZWxlbWVudCBpcyBhdAotICogZC5yaWdodGJsb2NrW3JpZ2h0aW5kZXhdOyBub3RlIHRoYXQsIHVubGlrZSBhcyBmb3IgUHl0aG9uIHNsaWNlCi0gKiBpbmRpY2VzLCB0aGVzZSBpbmRpY2VzIGFyZSBpbmNsdXNpdmUgb24gYm90aCBlbmRzLiAgQnkgYmVpbmcgaW5jbHVzaXZlCi0gKiBvbiBib3RoIGVuZHMsIGFsZ29yaXRobXMgZm9yIGxlZnQgYW5kIHJpZ2h0IG9wZXJhdGlvbnMgYmVjb21lCi0gKiBzeW1tZXRyaWNhbCB3aGljaCBzaW1wbGlmaWVzIHRoZSBkZXNpZ24uCi0gKgogICogVGhlIGxpc3Qgb2YgYmxvY2tzIGlzIG5ldmVyIGVtcHR5LCBzbyBkLmxlZnRibG9jayBhbmQgZC5yaWdodGJsb2NrCi0gKiBhcmUgbmV2ZXIgZXF1YWwgdG8gTlVMTC4KKyAqIGFyZSBuZXZlciBlcXVhbCB0byBOVUxMLiAgVGhlIGxpc3QgaXMgbm90IGNpcmN1bGFyLgorICoKKyAqIEEgZGVxdWUgZCdzIGZpcnN0IGVsZW1lbnQgaXMgYXQgZC5sZWZ0YmxvY2tbbGVmdGluZGV4XQorICogYW5kIGl0cyBsYXN0IGVsZW1lbnQgaXMgYXQgZC5yaWdodGJsb2NrW3JpZ2h0aW5kZXhdLgorICogVW5saWtlIFB5dGhvbiBzbGljZSBpbmRpY2VzLCB0aGVzZSBpbmRpY2VzIGFyZSBpbmNsdXNpdmUKKyAqIG9uIGJvdGggZW5kcy4gIFRoaXMgbWFrZXMgdGhlIGFsZ29yaXRobXMgZm9yIGxlZnQgYW5kCisgKiByaWdodCBvcGVyYXRpb25zIG1vcmUgc3ltbWV0cmljYWwgYW5kIHNpbXBsaWZpZXMgdGhlIGRlc2lnbi4KICAqCiAgKiBUaGUgaW5kaWNlcywgZC5sZWZ0aW5kZXggYW5kIGQucmlnaHRpbmRleCBhcmUgYWx3YXlzIGluIHRoZSByYW5nZQogICogICAgIDAgPD0gaW5kZXggPCBCTE9DS0xFTi4KQEAgLTQ3LDQyICs0OSw2MCBAQAogCiB0eXBlZGVmIHN0cnVjdCBCTE9DSyB7CiAgICAgc3RydWN0IEJMT0NLICpsZWZ0bGluazsKLSAgICBzdHJ1Y3QgQkxPQ0sgKnJpZ2h0bGluazsKICAgICBQeU9iamVjdCAqZGF0YVtCTE9DS0xFTl07CisgICAgc3RydWN0IEJMT0NLICpyaWdodGxpbms7CiB9IGJsb2NrOwogCisvKiBGb3IgZGVidWcgYnVpbGRzLCBhZGQgZXJyb3IgY2hlY2tpbmcgdG8gdHJhY2sgdGhlIGVuZHBvaW50cworICogaW4gdGhlIGNoYWluIG9mIGxpbmtzLiAgVGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIHRoYXQgbGluaworICogYXNzaWdubWVudHMgb25seSB0YWtlIHBsYWNlIGF0IGVuZHBvaW50cyBzbyB0aGF0IGxpbmtzIGFscmVhZHkKKyAqIGluIHVzZSBkbyBub3QgZ2V0IG92ZXJ3cml0dGVuLgorICoKKyAqIENIRUNLX0VORCBzaG91bGQgaGFwcGVuIGJlZm9yZSBlYWNoIGFzc2lnbm1lbnQgdG8gYSBibG9jaydzIGxpbmsgZmllbGQuCisgKiBNQVJLX0VORCBzaG91bGQgaGFwcGVuIHdoZW5ldmVyIGEgbGluayBmaWVsZCBiZWNvbWVzIGEgbmV3IGVuZHBvaW50LgorICogVGhpcyBoYXBwZW5zIHdoZW4gbmV3IGJsb2NrcyBhcmUgYWRkZWQgb3Igd2hlbmV2ZXIgYW4gZXhpc3RpbmcKKyAqIGJsb2NrIGlzIGZyZWVkIGxlYXZpbmcgYW5vdGhlciBleGlzdGluZyBibG9jayBhcyB0aGUgbmV3IGVuZHBvaW50LgorICovCisKKyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIE1BUktfRU5EKGxpbmspICBsaW5rID0gTlVMTDsKKyNkZWZpbmUgQ0hFQ0tfRU5EKGxpbmspIGFzc2VydChsaW5rID09IE5VTEwpOworI2RlZmluZSBDSEVDS19OT1RfRU5EKGxpbmspIGFzc2VydChsaW5rICE9IE5VTEwpOworI2Vsc2UKKyNkZWZpbmUgTUFSS19FTkQobGluaykKKyNkZWZpbmUgQ0hFQ0tfRU5EKGxpbmspCisjZGVmaW5lIENIRUNLX05PVF9FTkQobGluaykKKyNlbmRpZgorCisvKiBBIHNpbXBsZSBmcmVlbGlzdGluZyBzY2hlbWUgaXMgdXNlZCB0byBtaW5pbWl6ZSBjYWxscyB0byB0aGUgbWVtb3J5CisgICBhbGxvY2F0b3IuICBJdCBhY2NvbW9kYXRlcyBjb21tb24gdXNlIGNhc2VzIHdoZXJlIG5ldyBibG9ja3MgYXJlIGJlaW5nCisgICBhZGRlZCBhdCBhYm91dCB0aGUgc2FtZSByYXRlIGFzIG9sZCBibG9ja3MgYXJlIGJlaW5nIGZyZWVkLgorICovCisKICNkZWZpbmUgTUFYRlJFRUJMT0NLUyAxMAogc3RhdGljIFB5X3NzaXplX3QgbnVtZnJlZWJsb2NrcyA9IDA7CiBzdGF0aWMgYmxvY2sgKmZyZWVibG9ja3NbTUFYRlJFRUJMT0NLU107CiAKIHN0YXRpYyBibG9jayAqCi1uZXdibG9jayhibG9jayAqbGVmdGxpbmssIGJsb2NrICpyaWdodGxpbmssIFB5X3NzaXplX3QgbGVuKSB7CituZXdibG9jayhQeV9zc2l6ZV90IGxlbikgewogICAgIGJsb2NrICpiOwotICAgIC8qIFRvIHByZXZlbnQgbGVuIGZyb20gb3ZlcmZsb3dpbmcgUFlfU1NJWkVfVF9NQVggb24gNjQtYml0IG1hY2hpbmVzLCB3ZQotICAgICAqIHJlZnVzZSB0byBhbGxvY2F0ZSBuZXcgYmxvY2tzIGlmIHRoZSBjdXJyZW50IGxlbiBpcyBkYW5nZXJvdXNseQotICAgICAqIGNsb3NlLiAgVGhlcmUgaXMgc29tZSBleHRyYSBtYXJnaW4gdG8gcHJldmVudCBzcHVyaW91cyBhcml0aG1ldGljCi0gICAgICogb3ZlcmZsb3dzIGF0IHZhcmlvdXMgcGxhY2VzLiAgVGhlIGZvbGxvd2luZyBjaGVjayBlbnN1cmVzIHRoYXQKLSAgICAgKiB0aGUgYmxvY2tzIGFsbG9jYXRlZCB0byB0aGUgZGVxdWUsIGluIHRoZSB3b3JzdCBjYXNlLCBjYW4gb25seQotICAgICAqIGhhdmUgUFlfU1NJWkVfVF9NQVgtMiBlbnRyaWVzIGluIHRvdGFsLgotICAgICAqLworICAgIC8qIFRvIHByZXZlbnQgbGVuIGZyb20gb3ZlcmZsb3dpbmcgUFlfU1NJWkVfVF9NQVgsIHdlIHJlZnVzZSB0bworICAgICAqIGFsbG9jYXRlIG5ldyBibG9ja3MgaWYgdGhlIGN1cnJlbnQgbGVuIGlzIG5lYXJpbmcgb3ZlcmZsb3cuICovCiAgICAgaWYgKGxlbiA+PSBQWV9TU0laRV9UX01BWCAtIDIqQkxPQ0tMRU4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGFkZCBtb3JlIGJsb2NrcyB0byB0aGUgZGVxdWUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChudW1mcmVlYmxvY2tzKSB7Ci0gICAgICAgIG51bWZyZWVibG9ja3MgLT0gMTsKLSAgICAgICAgYiA9IGZyZWVibG9ja3NbbnVtZnJlZWJsb2Nrc107Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYiA9IFB5TWVtX01hbGxvYyhzaXplb2YoYmxvY2spKTsKLSAgICAgICAgaWYgKGIgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgICAgIG51bWZyZWVibG9ja3MtLTsKKyAgICAgICAgcmV0dXJuIGZyZWVibG9ja3NbbnVtZnJlZWJsb2Nrc107CiAgICAgfQotICAgIGItPmxlZnRsaW5rID0gbGVmdGxpbms7Ci0gICAgYi0+cmlnaHRsaW5rID0gcmlnaHRsaW5rOwotICAgIHJldHVybiBiOworICAgIGIgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKGJsb2NrKSk7CisgICAgaWYgKGIgIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gYjsKKyAgICB9CisgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTk3LDE0ICsxMTcsMTMgQEAKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeU9iamVjdF9WQVJfSEVBRAogICAgIGJsb2NrICpsZWZ0YmxvY2s7CiAgICAgYmxvY2sgKnJpZ2h0YmxvY2s7CiAgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXg7ICAgICAgIC8qIGluIHJhbmdlKEJMT0NLTEVOKSAqLwogICAgIFB5X3NzaXplX3QgcmlnaHRpbmRleDsgICAgICAvKiBpbiByYW5nZShCTE9DS0xFTikgKi8KLSAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBsb25nIHN0YXRlOyAgICAgICAgICAgICAgICAgLyogaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGluZGljZXMgbW92ZSAqLwogICAgIFB5X3NzaXplX3QgbWF4bGVuOwotICAgIGxvbmcgc3RhdGU7ICAgICAgICAgLyogaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGluZGljZXMgbW92ZSAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KIH0gZGVxdWVvYmplY3Q7CiAKQEAgLTExOCw5ICsxMzcsOSBAQAogICovCiAKICNkZWZpbmUgVFJJTShkLCBwb3BmdW5jdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGQtPm1heGxlbiAhPSAtMSAmJiBkLT5sZW4gPiBkLT5tYXhsZW4pIHsgICAgICAgICAgICAgICAgXAorICAgIGlmIChkLT5tYXhsZW4gIT0gLTEgJiYgUHlfU0laRShkKSA+IGQtPm1heGxlbikgeyAgICAgICBcCiAgICAgICAgIFB5T2JqZWN0ICpydiA9IHBvcGZ1bmN0aW9uKGQsIE5VTEwpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgIGFzc2VydChydiAhPSBOVUxMICAmJiAgZC0+bGVuIDw9IGQtPm1heGxlbik7ICAgICAgICBcCisgICAgICAgIGFzc2VydChydiAhPSBOVUxMICAmJiAgUHlfU0laRShkKSA8PSBkLT5tYXhsZW4pOyAgICBcCiAgICAgICAgIFB5X0RFQ1JFRihydik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCkBAIC0xMzcsMTggKzE1NiwyMCBAQAogICAgIGlmIChkZXF1ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGIgPSBuZXdibG9jayhOVUxMLCBOVUxMLCAwKTsKKyAgICBiID0gbmV3YmxvY2soMCk7CiAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoZGVxdWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOworICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CiAKICAgICBhc3NlcnQoQkxPQ0tMRU4gPj0gMik7CiAgICAgZGVxdWUtPmxlZnRibG9jayA9IGI7CiAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBiOwogICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBDRU5URVIgKyAxOwogICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQ0VOVEVSOwotICAgIGRlcXVlLT5sZW4gPSAwOworICAgIFB5X1NJWkUoZGVxdWUpID0gMDsKICAgICBkZXF1ZS0+c3RhdGUgPSAwOwogICAgIGRlcXVlLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgZGVxdWUtPm1heGxlbiA9IC0xOwpAQCAtMTYyLDE3ICsxODMsMTcgQEAKICAgICBQeU9iamVjdCAqaXRlbTsKICAgICBibG9jayAqcHJldmJsb2NrOwogCi0gICAgaWYgKGRlcXVlLT5sZW4gPT0gMCkgeworICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAicG9wIGZyb20gYW4gZW1wdHkgZGVxdWUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGl0ZW0gPSBkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleF07CiAgICAgZGVxdWUtPnJpZ2h0aW5kZXgtLTsKLSAgICBkZXF1ZS0+bGVuLS07CisgICAgUHlfU0laRShkZXF1ZSktLTsKICAgICBkZXF1ZS0+c3RhdGUrKzsKIAogICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSAtMSkgewotICAgICAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKICAgICAgICAgICAgIC8qIHJlLWNlbnRlciBpbnN0ZWFkIG9mIGZyZWVpbmcgYSBibG9jayAqLwpAQCAtMTgyLDcgKzIwMyw4IEBACiAgICAgICAgICAgICBwcmV2YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jay0+bGVmdGxpbms7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7CiAgICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgcHJldmJsb2NrLT5yaWdodGxpbmsgPSBOVUxMOworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChwcmV2YmxvY2spOworICAgICAgICAgICAgTUFSS19FTkQocHJldmJsb2NrLT5yaWdodGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBwcmV2YmxvY2s7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKICAgICAgICAgfQpAQCAtMTk4LDE4ICsyMjAsMTggQEAKICAgICBQeU9iamVjdCAqaXRlbTsKICAgICBibG9jayAqcHJldmJsb2NrOwogCi0gICAgaWYgKGRlcXVlLT5sZW4gPT0gMCkgeworICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAicG9wIGZyb20gYW4gZW1wdHkgZGVxdWUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IE5VTEwpOwogICAgIGl0ZW0gPSBkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdOwogICAgIGRlcXVlLT5sZWZ0aW5kZXgrKzsKLSAgICBkZXF1ZS0+bGVuLS07CisgICAgUHlfU0laRShkZXF1ZSktLTsKICAgICBkZXF1ZS0+c3RhdGUrKzsKIAogICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgIGlmIChkZXF1ZS0+bGVuID09IDApIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOwogICAgICAgICAgICAgLyogcmUtY2VudGVyIGluc3RlYWQgb2YgZnJlZWluZyBhIGJsb2NrICovCkBAIC0yMTksOCArMjQxLDggQEAKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIHByZXZibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2stPnJpZ2h0bGluazsKICAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+bGVmdGJsb2NrKTsKLSAgICAgICAgICAgIGFzc2VydChwcmV2YmxvY2sgIT0gTlVMTCk7Ci0gICAgICAgICAgICBwcmV2YmxvY2stPmxlZnRsaW5rID0gTlVMTDsKKyAgICAgICAgICAgIENIRUNLX05PVF9FTkQocHJldmJsb2NrKTsKKyAgICAgICAgICAgIE1BUktfRU5EKHByZXZibG9jay0+bGVmdGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IHByZXZibG9jazsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSAwOwogICAgICAgICB9CkBAIC0yMzUsMTYgKzI1NywxOCBAQAogewogICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTi0xKSB7Ci0gICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soZGVxdWUtPnJpZ2h0YmxvY2ssIE5VTEwsIGRlcXVlLT5sZW4pOworICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKFB5X1NJWkUoZGVxdWUpKTsKICAgICAgICAgaWYgKGIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKTsKKyAgICAgICAgYi0+bGVmdGxpbmsgPSBkZXF1ZS0+cmlnaHRibG9jazsKKyAgICAgICAgQ0hFQ0tfRU5EKGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmspOwogICAgICAgICBkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID0gYjsKICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBiOworICAgICAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOwogICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IC0xOwogICAgIH0KICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgZGVxdWUtPmxlbisrOworICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgZGVxdWUtPnJpZ2h0aW5kZXgrKzsKICAgICBkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleF0gPSBpdGVtOwogICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcGxlZnQpOwpAQCAtMjU4LDE2ICsyODIsMTggQEAKIHsKICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSAwKSB7Ci0gICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soTlVMTCwgZGVxdWUtPmxlZnRibG9jaywgZGVxdWUtPmxlbik7CisgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICBpZiAoYiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9PSBOVUxMKTsKKyAgICAgICAgYi0+cmlnaHRsaW5rID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICAgICAgQ0hFQ0tfRU5EKGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rKTsKICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPSBiOwogICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKKyAgICAgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOwogICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQkxPQ0tMRU47CiAgICAgfQogICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICBkZXF1ZS0+bGVuKys7CisgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICBkZXF1ZS0+bGVmdGluZGV4LS07CiAgICAgZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XSA9IGl0ZW07CiAgICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wKTsKQEAgLTMwOSw2ICszMzUsMTQgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICAvKiBTcGFjZSBzYXZpbmcgaGV1cmlzdGljLiAgU3RhcnQgZmlsbGluZyBmcm9tIHRoZSBsZWZ0ICovCisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKKyAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKKyAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IDE7CisgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gMDsKKyAgICB9CisKICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGUpOwogICAgIGlmIChpdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMxOSwxOSArMzUzLDIwIEBACiAgICAgd2hpbGUgKChpdGVtID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CiAgICAgICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4tMSkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhkZXF1ZS0+cmlnaHRibG9jaywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVxdWUtPmxlbik7CisgICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKFB5X1NJWkUoZGVxdWUpKTsKICAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpOworICAgICAgICAgICAgYi0+bGVmdGxpbmsgPSBkZXF1ZS0+cmlnaHRibG9jazsKKyAgICAgICAgICAgIENIRUNLX0VORChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBiOworICAgICAgICAgICAgTUFSS19FTkQoYi0+cmlnaHRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gLTE7CiAgICAgICAgIH0KLSAgICAgICAgZGVxdWUtPmxlbisrOworICAgICAgICBQeV9TSVpFKGRlcXVlKSsrOwogICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCsrOwogICAgICAgICBkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleF0gPSBpdGVtOwogICAgICAgICBUUklNKGRlcXVlLCBkZXF1ZV9wb3BsZWZ0KTsKQEAgLTM2MSw2ICszOTYsMTQgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICAvKiBTcGFjZSBzYXZpbmcgaGV1cmlzdGljLiAgU3RhcnQgZmlsbGluZyBmcm9tIHRoZSByaWdodCAqLworICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CisgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKKyAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CisgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTiAtIDE7CisgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAyOworICAgIH0KKwogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzcxLDE5ICs0MTQsMjAgQEAKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IDApIHsKLSAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soTlVMTCwgZGVxdWUtPmxlZnRibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVxdWUtPmxlbik7CisgICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKFB5X1NJWkUoZGVxdWUpKTsKICAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9PSBOVUxMKTsKKyAgICAgICAgICAgIGItPnJpZ2h0bGluayA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19FTkQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPSBiOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQkxPQ0tMRU47CiAgICAgICAgIH0KLSAgICAgICAgZGVxdWUtPmxlbisrOworICAgICAgICBQeV9TSVpFKGRlcXVlKSsrOwogICAgICAgICBkZXF1ZS0+bGVmdGluZGV4LS07CiAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF0gPSBpdGVtOwogICAgICAgICBUUklNKGRlcXVlLCBkZXF1ZV9wb3ApOwpAQCAtNDEzLDcgKzQ1NywxMyBAQAogc3RhdGljIGludAogX2RlcXVlX3JvdGF0ZShkZXF1ZW9iamVjdCAqZGVxdWUsIFB5X3NzaXplX3QgbikKIHsKLSAgICBQeV9zc2l6ZV90IG0sIGxlbj1kZXF1ZS0+bGVuLCBoYWxmbGVuPWxlbj4+MTsKKyAgICBibG9jayAqYiA9IE5VTEw7CisgICAgYmxvY2sgKmxlZnRibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgYmxvY2sgKnJpZ2h0YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jazsKKyAgICBQeV9zc2l6ZV90IGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CisgICAgUHlfc3NpemVfdCByaWdodGluZGV4ID0gZGVxdWUtPnJpZ2h0aW5kZXg7CisgICAgUHlfc3NpemVfdCBsZW49UHlfU0laRShkZXF1ZSksIGhhbGZsZW49bGVuPj4xOworICAgIGludCBydiA9IC0xOwogCiAgICAgaWYgKGxlbiA8PSAxKQogICAgICAgICByZXR1cm4gMDsKQEAgLTQyOSw3NiArNDc5LDEwMyBAQAogCiAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgd2hpbGUgKG4gPiAwKSB7Ci0gICAgICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IDApIHsKLSAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soTlVMTCwgZGVxdWUtPmxlZnRibG9jaywgbGVuKTsKLSAgICAgICAgICAgIGlmIChiID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPSBiOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IGI7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQkxPQ0tMRU47CisgICAgICAgIGlmIChsZWZ0aW5kZXggPT0gMCkgeworICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGIgPSBuZXdibG9jayhsZW4pOworICAgICAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGItPnJpZ2h0bGluayA9IGxlZnRibG9jazsKKyAgICAgICAgICAgIENIRUNLX0VORChsZWZ0YmxvY2stPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIGxlZnRibG9jay0+bGVmdGxpbmsgPSBiOworICAgICAgICAgICAgbGVmdGJsb2NrID0gYjsKKyAgICAgICAgICAgIE1BUktfRU5EKGItPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIGxlZnRpbmRleCA9IEJMT0NLTEVOOworICAgICAgICAgICAgYiA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPiAwKTsKKyAgICAgICAgYXNzZXJ0KGxlZnRpbmRleCA+IDApOworICAgICAgICB7CisgICAgICAgICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OworICAgICAgICAgICAgUHlfc3NpemVfdCBtID0gbjsKIAotICAgICAgICBtID0gbjsKLSAgICAgICAgaWYgKG0gPiBkZXF1ZS0+cmlnaHRpbmRleCArIDEpCi0gICAgICAgICAgICBtID0gZGVxdWUtPnJpZ2h0aW5kZXggKyAxOwotICAgICAgICBpZiAobSA+IGRlcXVlLT5sZWZ0aW5kZXgpCi0gICAgICAgICAgICBtID0gZGVxdWUtPmxlZnRpbmRleDsKLSAgICAgICAgYXNzZXJ0IChtID4gMCAmJiBtIDw9IGxlbik7Ci0gICAgICAgIG1lbWNweSgmZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4IC0gbV0sCi0gICAgICAgICAgICAgICAmZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXggKyAxIC0gbV0sCi0gICAgICAgICAgICAgICBtICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggLT0gbTsKLSAgICAgICAgZGVxdWUtPmxlZnRpbmRleCAtPSBtOwotICAgICAgICBuIC09IG07Ci0KLSAgICAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IC0xKSB7Ci0gICAgICAgICAgICBibG9jayAqcHJldmJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2stPmxlZnRsaW5rOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5yaWdodGJsb2NrICE9IE5VTEwpOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5yaWdodGJsb2NrKTsKLSAgICAgICAgICAgIHByZXZibG9jay0+cmlnaHRsaW5rID0gTlVMTDsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gcHJldmJsb2NrOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDE7CisgICAgICAgICAgICBpZiAobSA+IHJpZ2h0aW5kZXggKyAxKQorICAgICAgICAgICAgICAgIG0gPSByaWdodGluZGV4ICsgMTsKKyAgICAgICAgICAgIGlmIChtID4gbGVmdGluZGV4KQorICAgICAgICAgICAgICAgIG0gPSBsZWZ0aW5kZXg7CisgICAgICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKKyAgICAgICAgICAgIHNyYyA9ICZyaWdodGJsb2NrLT5kYXRhW3JpZ2h0aW5kZXhdOworICAgICAgICAgICAgZGVzdCA9ICZsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4IC0gMV07CisgICAgICAgICAgICByaWdodGluZGV4IC09IG07CisgICAgICAgICAgICBsZWZ0aW5kZXggLT0gbTsKKyAgICAgICAgICAgIG4gLT0gbTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqKGRlc3QtLSkgPSAqKHNyYy0tKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0aW5kZXggPT0gLTEpIHsKKyAgICAgICAgICAgIGFzc2VydChsZWZ0YmxvY2sgIT0gcmlnaHRibG9jayk7CisgICAgICAgICAgICBhc3NlcnQoYiA9PSBOVUxMKTsKKyAgICAgICAgICAgIGIgPSByaWdodGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChyaWdodGJsb2NrLT5sZWZ0bGluayk7CisgICAgICAgICAgICByaWdodGJsb2NrID0gcmlnaHRibG9jay0+bGVmdGxpbms7CisgICAgICAgICAgICBNQVJLX0VORChyaWdodGJsb2NrLT5yaWdodGxpbmspOworICAgICAgICAgICAgcmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKICAgICAgICAgfQogICAgIH0KICAgICB3aGlsZSAobiA8IDApIHsKLSAgICAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IEJMT0NLTEVOIC0gMSkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhkZXF1ZS0+cmlnaHRibG9jaywgTlVMTCwgbGVuKTsKLSAgICAgICAgICAgIGlmIChiID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCk7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID0gYjsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gLTE7CisgICAgICAgIGlmIChyaWdodGluZGV4ID09IEJMT0NLTEVOIC0gMSkgeworICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGIgPSBuZXdibG9jayhsZW4pOworICAgICAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGItPmxlZnRsaW5rID0gcmlnaHRibG9jazsKKyAgICAgICAgICAgIENIRUNLX0VORChyaWdodGJsb2NrLT5yaWdodGxpbmspOworICAgICAgICAgICAgcmlnaHRibG9jay0+cmlnaHRsaW5rID0gYjsKKyAgICAgICAgICAgIHJpZ2h0YmxvY2sgPSBiOworICAgICAgICAgICAgTUFSS19FTkQoYi0+cmlnaHRsaW5rKTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggPSAtMTsKKyAgICAgICAgICAgIGIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydCAoZGVxdWUtPnJpZ2h0aW5kZXggPCBCTE9DS0xFTiAtIDEpOworICAgICAgICBhc3NlcnQgKHJpZ2h0aW5kZXggPCBCTE9DS0xFTiAtIDEpOworICAgICAgICB7CisgICAgICAgICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OworICAgICAgICAgICAgUHlfc3NpemVfdCBtID0gLW47CiAKLSAgICAgICAgbSA9IC1uOwotICAgICAgICBpZiAobSA+IEJMT0NLTEVOIC0gZGVxdWUtPmxlZnRpbmRleCkKLSAgICAgICAgICAgIG0gPSBCTE9DS0xFTiAtIGRlcXVlLT5sZWZ0aW5kZXg7Ci0gICAgICAgIGlmIChtID4gQkxPQ0tMRU4gLSAxIC0gZGVxdWUtPnJpZ2h0aW5kZXgpCi0gICAgICAgICAgICBtID0gQkxPQ0tMRU4gLSAxIC0gZGVxdWUtPnJpZ2h0aW5kZXg7Ci0gICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOwotICAgICAgICBtZW1jcHkoJmRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4ICsgMV0sCi0gICAgICAgICAgICAgICAmZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XSwKLSAgICAgICAgICAgICAgIG0gKiBzaXplb2YoUHlPYmplY3QgKikpOwotICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ICs9IG07Ci0gICAgICAgIGRlcXVlLT5yaWdodGluZGV4ICs9IG07Ci0gICAgICAgIG4gKz0gbTsKLQotICAgICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSBCTE9DS0xFTikgewotICAgICAgICAgICAgYmxvY2sgKm5leHRibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2stPnJpZ2h0bGluazsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKLSAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+bGVmdGJsb2NrKTsKLSAgICAgICAgICAgIGFzc2VydChuZXh0YmxvY2sgIT0gTlVMTCk7Ci0gICAgICAgICAgICBuZXh0YmxvY2stPmxlZnRsaW5rID0gTlVMTDsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBuZXh0YmxvY2s7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gMDsKKyAgICAgICAgICAgIGlmIChtID4gQkxPQ0tMRU4gLSBsZWZ0aW5kZXgpCisgICAgICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gbGVmdGluZGV4OworICAgICAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIDEgLSByaWdodGluZGV4KQorICAgICAgICAgICAgICAgIG0gPSBCTE9DS0xFTiAtIDEgLSByaWdodGluZGV4OworICAgICAgICAgICAgYXNzZXJ0IChtID4gMCAmJiBtIDw9IGxlbik7CisgICAgICAgICAgICBzcmMgPSAmbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF07CisgICAgICAgICAgICBkZXN0ID0gJnJpZ2h0YmxvY2stPmRhdGFbcmlnaHRpbmRleCArIDFdOworICAgICAgICAgICAgbGVmdGluZGV4ICs9IG07CisgICAgICAgICAgICByaWdodGluZGV4ICs9IG07CisgICAgICAgICAgICBuICs9IG07CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKihkZXN0KyspID0gKihzcmMrKyk7CisgICAgICAgICAgICB9IHdoaWxlICgtLW0pOworICAgICAgICB9CisgICAgICAgIGlmIChsZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKKyAgICAgICAgICAgIGFzc2VydChsZWZ0YmxvY2sgIT0gcmlnaHRibG9jayk7CisgICAgICAgICAgICBhc3NlcnQoYiA9PSBOVUxMKTsKKyAgICAgICAgICAgIGIgPSBsZWZ0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKGxlZnRibG9jay0+cmlnaHRsaW5rKTsKKyAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOworICAgICAgICAgICAgTUFSS19FTkQobGVmdGJsb2NrLT5sZWZ0bGluayk7CisgICAgICAgICAgICBsZWZ0aW5kZXggPSAwOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJ2ID0gMDsKK2RvbmU6CisgICAgaWYgKGIgIT0gTlVMTCkKKyAgICAgICAgZnJlZWJsb2NrKGIpOworICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBsZWZ0YmxvY2s7CisgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSByaWdodGJsb2NrOworICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBsZWZ0aW5kZXg7CisgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSByaWdodGluZGV4OworCisgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTIzLDEzICs2MDAsMTUgQEAKICAgICBibG9jayAqcmlnaHRibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrOwogICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKICAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXggPSBkZXF1ZS0+cmlnaHRpbmRleDsKLSAgICBQeV9zc2l6ZV90IG4gPSAoZGVxdWUtPmxlbikvMjsKKyAgICBQeV9zc2l6ZV90IG4gPSAoUHlfU0laRShkZXF1ZSkpLzI7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICp0bXA7CiAKICAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgewogICAgICAgICAvKiBWYWxpZGF0ZSB0aGF0IHBvaW50ZXJzIGhhdmVuJ3QgbWV0IGluIHRoZSBtaWRkbGUgKi8KICAgICAgICAgYXNzZXJ0KGxlZnRibG9jayAhPSByaWdodGJsb2NrIHx8IGxlZnRpbmRleCA8IHJpZ2h0aW5kZXgpOworICAgICAgICBDSEVDS19OT1RfRU5EKGxlZnRibG9jayk7CisgICAgICAgIENIRUNLX05PVF9FTkQocmlnaHRibG9jayk7CiAKICAgICAgICAgLyogU3dhcCAqLwogICAgICAgICB0bXAgPSBsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKQEAgLTUzOSw4ICs2MTgsNiBAQAogICAgICAgICAvKiBBZHZhbmNlIGxlZnQgYmxvY2svaW5kZXggcGFpciAqLwogICAgICAgICBsZWZ0aW5kZXgrKzsKICAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgewotICAgICAgICAgICAgaWYgKGxlZnRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBsZWZ0YmxvY2sgPSBsZWZ0YmxvY2stPnJpZ2h0bGluazsKICAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CiAgICAgICAgIH0KQEAgLTU0OCw4ICs2MjUsNiBAQAogICAgICAgICAvKiBTdGVwIGJhY2t3YXJkcyB3aXRoIHRoZSByaWdodCBibG9jay9pbmRleCBwYWlyICovCiAgICAgICAgIHJpZ2h0aW5kZXgtLTsKICAgICAgICAgaWYgKHJpZ2h0aW5kZXggPT0gLTEpIHsKLSAgICAgICAgICAgIGlmIChyaWdodGJsb2NrLT5sZWZ0bGluayA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmlnaHRibG9jayA9IHJpZ2h0YmxvY2stPmxlZnRsaW5rOwogICAgICAgICAgICAgcmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKICAgICAgICAgfQpAQCAtNTYzLDkgKzYzOCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGVxdWVfY291bnQoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqdikKIHsKLSAgICBibG9jayAqbGVmdGJsb2NrID0gZGVxdWUtPmxlZnRibG9jazsKLSAgICBQeV9zc2l6ZV90IGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7Ci0gICAgUHlfc3NpemVfdCBuID0gZGVxdWUtPmxlbjsKKyAgICBibG9jayAqYiA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CisgICAgUHlfc3NpemVfdCBuID0gUHlfU0laRShkZXF1ZSk7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgY291bnQgPSAwOwogICAgIFB5T2JqZWN0ICppdGVtOwpAQCAtNTczLDcgKzY0OCw4IEBACiAgICAgaW50IGNtcDsKIAogICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrKSB7Ci0gICAgICAgIGl0ZW0gPSBsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChiKTsKKyAgICAgICAgaXRlbSA9IGItPmRhdGFbaW5kZXhdOwogICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbSwgdiwgUHlfRVEpOwogICAgICAgICBpZiAoY21wID4gMCkKICAgICAgICAgICAgIGNvdW50Kys7CkBAIC01ODcsMTIgKzY2MywxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogQWR2YW5jZSBsZWZ0IGJsb2NrL2luZGV4IHBhaXIgKi8KLSAgICAgICAgbGVmdGluZGV4Kys7Ci0gICAgICAgIGlmIChsZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgICAgIGlmIChsZWZ0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKSAgLyogY2FuIG9jY3VyIHdoZW4gaT09bi0xICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBsZWZ0YmxvY2sgPSBsZWZ0YmxvY2stPnJpZ2h0bGluazsKLSAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIGlmIChpbmRleCA9PSBCTE9DS0xFTikgeworICAgICAgICAgICAgYiA9IGItPnJpZ2h0bGluazsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGNvdW50KTsKQEAgLTYwNCwxOSArNjc4LDE5IEBACiBzdGF0aWMgUHlfc3NpemVfdAogZGVxdWVfbGVuKGRlcXVlb2JqZWN0ICpkZXF1ZSkKIHsKLSAgICByZXR1cm4gZGVxdWUtPmxlbjsKKyAgICByZXR1cm4gUHlfU0laRShkZXF1ZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZXF1ZV9yZW1vdmUoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqdmFsdWUpCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBuPWRlcXVlLT5sZW47CisgICAgUHlfc3NpemVfdCBpLCBuPVB5X1NJWkUoZGVxdWUpOwogCiAgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdOwogICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0sIHZhbHVlLCBQeV9FUSk7CiAKLSAgICAgICAgaWYgKGRlcXVlLT5sZW4gIT0gbikgeworICAgICAgICBpZiAoUHlfU0laRShkZXF1ZSkgIT0gbikgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgImRlcXVlIG11dGF0ZWQgZHVyaW5nIHJlbW92ZSgpLiIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NDcsMTQgKzcyMSwxNCBAQAogewogICAgIFB5T2JqZWN0ICppdGVtOwogCi0gICAgd2hpbGUgKGRlcXVlLT5sZW4pIHsKKyAgICB3aGlsZSAoUHlfU0laRShkZXF1ZSkpIHsKICAgICAgICAgaXRlbSA9IGRlcXVlX3BvcChkZXF1ZSwgTlVMTCk7CiAgICAgICAgIGFzc2VydCAoaXRlbSAhPSBOVUxMKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgIH0KICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayAmJgogICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4IC0gMSA9PSBkZXF1ZS0+cmlnaHRpbmRleCAmJgotICAgICAgICAgICBkZXF1ZS0+bGVuID09IDApOworICAgICAgICAgICBQeV9TSVpFKGRlcXVlKSA9PSAwKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTY2NCw3ICs3MzgsNyBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIFB5X3NzaXplX3QgbiwgaW5kZXg9aTsKIAotICAgIGlmIChpIDwgMCB8fCBpID49IGRlcXVlLT5sZW4pIHsKKyAgICBpZiAoaSA8IDAgfHwgaSA+PSBQeV9TSVpFKGRlcXVlKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJkZXF1ZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NzMsMTkgKzc0NywxOSBAQAogICAgIGlmIChpID09IDApIHsKICAgICAgICAgaSA9IGRlcXVlLT5sZWZ0aW5kZXg7CiAgICAgICAgIGIgPSBkZXF1ZS0+bGVmdGJsb2NrOwotICAgIH0gZWxzZSBpZiAoaSA9PSBkZXF1ZS0+bGVuIC0gMSkgeworICAgIH0gZWxzZSBpZiAoaSA9PSBQeV9TSVpFKGRlcXVlKSAtIDEpIHsKICAgICAgICAgaSA9IGRlcXVlLT5yaWdodGluZGV4OwogICAgICAgICBiID0gZGVxdWUtPnJpZ2h0YmxvY2s7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaSArPSBkZXF1ZS0+bGVmdGluZGV4OwogICAgICAgICBuID0gaSAvIEJMT0NLTEVOOwogICAgICAgICBpICU9IEJMT0NLTEVOOwotICAgICAgICBpZiAoaW5kZXggPCAoZGVxdWUtPmxlbiA+PiAxKSkgeworICAgICAgICBpZiAoaW5kZXggPCAoUHlfU0laRShkZXF1ZSkgPj4gMSkpIHsKICAgICAgICAgICAgIGIgPSBkZXF1ZS0+bGVmdGJsb2NrOwogICAgICAgICAgICAgd2hpbGUgKG4tLSkKICAgICAgICAgICAgICAgICBiID0gYi0+cmlnaHRsaW5rOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbiA9IChkZXF1ZS0+bGVmdGluZGV4ICsgZGVxdWUtPmxlbiAtIDEpIC8gQkxPQ0tMRU4gLSBuOworICAgICAgICAgICAgbiA9IChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgLSAxKSAvIEJMT0NLTEVOIC0gbjsKICAgICAgICAgICAgIGIgPSBkZXF1ZS0+cmlnaHRibG9jazsKICAgICAgICAgICAgIHdoaWxlIChuLS0pCiAgICAgICAgICAgICAgICAgYiA9IGItPmxlZnRsaW5rOwpAQCAtNzA4LDcgKzc4Miw3IEBACiB7CiAgICAgUHlPYmplY3QgKml0ZW07CiAKLSAgICBhc3NlcnQgKGkgPj0gMCAmJiBpIDwgZGVxdWUtPmxlbik7CisgICAgYXNzZXJ0IChpID49IDAgJiYgaSA8IFB5X1NJWkUoZGVxdWUpKTsKICAgICBpZiAoX2RlcXVlX3JvdGF0ZShkZXF1ZSwgLWkpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTcyNCw3ICs3OTgsNyBAQAogewogICAgIFB5T2JqZWN0ICpvbGRfdmFsdWU7CiAgICAgYmxvY2sgKmI7Ci0gICAgUHlfc3NpemVfdCBuLCBsZW49ZGVxdWUtPmxlbiwgaGFsZmxlbj0obGVuKzEpPj4xLCBpbmRleD1pOworICAgIFB5X3NzaXplX3QgbiwgbGVuPVB5X1NJWkUoZGVxdWUpLCBoYWxmbGVuPShsZW4rMSk+PjEsIGluZGV4PWk7CiAKICAgICBpZiAoaSA8IDAgfHwgaSA+PSBsZW4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCkBAIC03ODcsMTcgKzg2MSwxNyBAQAogICAgIFB5X3NzaXplX3QgaW5kZXg7CiAgICAgUHlfc3NpemVfdCBpbmRleGxvID0gZGVxdWUtPmxlZnRpbmRleDsKIAotICAgIGZvciAoYiA9IGRlcXVlLT5sZWZ0YmxvY2s7IGIgIT0gTlVMTDsgYiA9IGItPnJpZ2h0bGluaykgewotICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGluZGV4aGkgPSBiID09IGRlcXVlLT5yaWdodGJsb2NrID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4IDoKLSAgICAgICAgICAgICAgICAgICAgIEJMT0NLTEVOIC0gMTsKLQotICAgICAgICBmb3IgKGluZGV4ID0gaW5kZXhsbzsgaW5kZXggPD0gaW5kZXhoaTsgKytpbmRleCkgeworICAgIGZvciAoYiA9IGRlcXVlLT5sZWZ0YmxvY2s7IGIgIT0gZGVxdWUtPnJpZ2h0YmxvY2s7IGIgPSBiLT5yaWdodGxpbmspIHsKKyAgICAgICAgZm9yIChpbmRleCA9IGluZGV4bG87IGluZGV4IDwgQkxPQ0tMRU4gOyBpbmRleCsrKSB7CiAgICAgICAgICAgICBpdGVtID0gYi0+ZGF0YVtpbmRleF07CiAgICAgICAgICAgICBQeV9WSVNJVChpdGVtKTsKICAgICAgICAgfQogICAgICAgICBpbmRleGxvID0gMDsKICAgICB9CisgICAgZm9yIChpbmRleCA9IGluZGV4bG87IGluZGV4IDw9IGRlcXVlLT5yaWdodGluZGV4OyBpbmRleCsrKSB7CisgICAgICAgIGl0ZW0gPSBiLT5kYXRhW2luZGV4XTsKKyAgICAgICAgUHlfVklTSVQoaXRlbSk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC04ODcsOCArOTYxLDggQEAKICAgICB9CiAKICAgICAvKiBTaG9ydGN1dHMgKi8KLSAgICB2cyA9ICgoZGVxdWVvYmplY3QgKil2KS0+bGVuOwotICAgIHdzID0gKChkZXF1ZW9iamVjdCAqKXcpLT5sZW47CisgICAgdnMgPSBQeV9TSVpFKChkZXF1ZW9iamVjdCAqKXYpOworICAgIHdzID0gUHlfU0laRSgoZGVxdWVvYmplY3QgKil3KTsKICAgICBpZiAob3AgPT0gUHlfRVEpIHsKICAgICAgICAgaWYgKHYgPT0gdykKICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwpAQCAtOTg5LDggKzEwNjMsOCBAQAogICAgIFB5X3NzaXplX3QgYmxvY2tzOwogCiAgICAgcmVzID0gc2l6ZW9mKGRlcXVlb2JqZWN0KTsKLSAgICBibG9ja3MgPSAoZGVxdWUtPmxlZnRpbmRleCArIGRlcXVlLT5sZW4gKyBCTE9DS0xFTiAtIDEpIC8gQkxPQ0tMRU47Ci0gICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggKyBkZXF1ZS0+bGVuIC0gMSA9PQorICAgIGJsb2NrcyA9IChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgKyBCTE9DS0xFTiAtIDEpIC8gQkxPQ0tMRU47CisgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggKyBQeV9TSVpFKGRlcXVlKSAtIDEgPT0KICAgICAgICAgICAgKGJsb2NrcyAtIDEpICogQkxPQ0tMRU4gKyBkZXF1ZS0+cmlnaHRpbmRleCk7CiAgICAgcmVzICs9IGJsb2NrcyAqIHNpemVvZihibG9jayk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOwpAQCAtMTE0Myw3ICsxMjE3LDcgQEAKICAgICBQeV9JTkNSRUYoZGVxdWUpOwogICAgIGl0LT5kZXF1ZSA9IGRlcXVlOwogICAgIGl0LT5zdGF0ZSA9IGRlcXVlLT5zdGF0ZTsKLSAgICBpdC0+Y291bnRlciA9IGRlcXVlLT5sZW47CisgICAgaXQtPmNvdW50ZXIgPSBQeV9TSVpFKGRlcXVlKTsKICAgICBQeU9iamVjdF9HQ19UcmFjayhpdCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0OwogfQpAQCAtMTE4Miw3ICsxMjU2LDcgQEAKICAgICBpdC0+aW5kZXgrKzsKICAgICBpdC0+Y291bnRlci0tOwogICAgIGlmIChpdC0+aW5kZXggPT0gQkxPQ0tMRU4gJiYgaXQtPmNvdW50ZXIgPiAwKSB7Ci0gICAgICAgIGFzc2VydCAoaXQtPmItPnJpZ2h0bGluayAhPSBOVUxMKTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChpdC0+Yi0+cmlnaHRsaW5rKTsKICAgICAgICAgaXQtPmIgPSBpdC0+Yi0+cmlnaHRsaW5rOwogICAgICAgICBpdC0+aW5kZXggPSAwOwogICAgIH0KQEAgLTEyMzAsNyArMTMwNCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGVxdWVpdGVyX3JlZHVjZShkZXF1ZWl0ZXJvYmplY3QgKml0KQogewotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9uKSIsIFB5X1RZUEUoaXQpLCBpdC0+ZGVxdWUsIGl0LT5kZXF1ZS0+bGVuIC0gaXQtPmNvdW50ZXIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9uKSIsIFB5X1RZUEUoaXQpLCBpdC0+ZGVxdWUsIFB5X1NJWkUoaXQtPmRlcXVlKSAtIGl0LT5jb3VudGVyKTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGRlcXVlaXRlcl9tZXRob2RzW10gPSB7CkBAIC0xMjk5LDcgKzEzNzMsNyBAQAogICAgIFB5X0lOQ1JFRihkZXF1ZSk7CiAgICAgaXQtPmRlcXVlID0gZGVxdWU7CiAgICAgaXQtPnN0YXRlID0gZGVxdWUtPnN0YXRlOwotICAgIGl0LT5jb3VudGVyID0gZGVxdWUtPmxlbjsKKyAgICBpdC0+Y291bnRlciA9IFB5X1NJWkUoZGVxdWUpOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKGl0KTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopaXQ7CiB9CkBAIC0xMzI0LDcgKzEzOTgsNyBAQAogICAgIGl0LT5pbmRleC0tOwogICAgIGl0LT5jb3VudGVyLS07CiAgICAgaWYgKGl0LT5pbmRleCA9PSAtMSAmJiBpdC0+Y291bnRlciA+IDApIHsKLSAgICAgICAgYXNzZXJ0IChpdC0+Yi0+bGVmdGxpbmsgIT0gTlVMTCk7CisgICAgICAgIENIRUNLX05PVF9FTkQoaXQtPmItPmxlZnRsaW5rKTsKICAgICAgICAgaXQtPmIgPSBpdC0+Yi0+bGVmdGxpbms7CiAgICAgICAgIGl0LT5pbmRleCA9IEJMT0NLTEVOIC0gMTsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jc3YuYyBiL01vZHVsZXMvX2Nzdi5jCmluZGV4IDQ4YTVjZjguLjIyYWMyNjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2Nzdi5jCisrKyBiL01vZHVsZXMvX2Nzdi5jCkBAIC01MSw3ICs1MSw3IEBACiB0eXBlZGVmIGVudW0gewogICAgIFNUQVJUX1JFQ09SRCwgU1RBUlRfRklFTEQsIEVTQ0FQRURfQ0hBUiwgSU5fRklFTEQsCiAgICAgSU5fUVVPVEVEX0ZJRUxELCBFU0NBUEVfSU5fUVVPVEVEX0ZJRUxELCBRVU9URV9JTl9RVU9URURfRklFTEQsCi0gICAgRUFUX0NSTkwKKyAgICBFQVRfQ1JOTCxBRlRFUl9FU0NBUEVEX0NSTkwKIH0gUGFyc2VyU3RhdGU7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC02NDQsNiArNjQ0LDEyIEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFU0NBUEVEX0NIQVI6CisgICAgICAgIGlmIChjID09ICdcbicgfHwgYz09J1xyJykgeworICAgICAgICAgICAgaWYgKHBhcnNlX2FkZF9jaGFyKHNlbGYsIGMpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBzZWxmLT5zdGF0ZSA9IEFGVEVSX0VTQ0FQRURfQ1JOTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGlmIChjID09ICdcMCcpCiAgICAgICAgICAgICBjID0gJ1xuJzsKICAgICAgICAgaWYgKHBhcnNlX2FkZF9jaGFyKHNlbGYsIGMpIDwgMCkKQEAgLTY1MSw2ICs2NTcsMTEgQEAKICAgICAgICAgc2VsZi0+c3RhdGUgPSBJTl9GSUVMRDsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEFGVEVSX0VTQ0FQRURfQ1JOTDoKKyAgICAgICAgaWYgKGMgPT0gJ1wwJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKmZhbGx0aHJ1Ki8KKwogICAgIGNhc2UgSU5fRklFTEQ6CiAgICAgICAgIC8qIGluIHVucXVvdGVkIGZpZWxkICovCiAgICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1wwJykgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKaW5kZXggN2QwZDI1OC4uMGRlZmZhMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCkBAIC0yNzgsOCArMjc4LDEwIEBACiAgICAgaWYgKHByZWZpeCkKICAgICAgICAgbGVuICs9IHN0cmxlbihwcmVmaXgpOwogICAgIHJlc3VsdCA9IFB5TWVtX01hbGxvYyhsZW4gKyAxKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBpZiAocHJlZml4KQogICAgICAgICBzdHJjcHkocmVzdWx0LCBwcmVmaXgpOwogICAgIGVsc2UKQEAgLTQyOCwxMyArNDMwLDcgQEAKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlUeXBlX3N0Z2RpY3QodHlwZSk7CiAgICAgYXNzZXJ0IChkaWN0KTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfGk6ZnJvbV9idWZmZXIiLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98bjpmcm9tX2J1ZmZlciIsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJm9mZnNldCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46ZnJvbV9idWZmZXIiLCAmb2JqLCAmb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoLTEgPT0gUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcihvYmosICZidWZmZXIsICZidWZmZXJfbGVuKSkKQEAgLTQ0NywxMSArNDQzLDcgQEAKICAgICB9CiAgICAgaWYgKGRpY3QtPnNpemUgPiBidWZmZXJfbGVuIC0gb2Zmc2V0KSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICVkIGJ5dGVzKSIsCi0jZWxzZQogICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJXpkIGluc3RlYWQgb2YgYXQgbGVhc3QgJXpkIGJ5dGVzKSIsCi0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW4sIGRpY3QtPnNpemUgKyBvZmZzZXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC00ODQsMTMgKzQ3Niw3IEBACiAgICAgU3RnRGljdE9iamVjdCAqZGljdCA9IFB5VHlwZV9zdGdkaWN0KHR5cGUpOwogICAgIGFzc2VydCAoZGljdCk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xpOmZyb21fYnVmZmVyIiwKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfG46ZnJvbV9idWZmZXIiLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvYmosICZvZmZzZXQpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xuOmZyb21fYnVmZmVyIiwgJm9iaiwgJm9mZnNldCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKC0xID09IFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcihvYmosIChjb25zdCB2b2lkKiopJmJ1ZmZlciwgJmJ1ZmZlcl9sZW4pKQpAQCAtNTA0LDExICs0OTAsNyBAQAogCiAgICAgaWYgKGRpY3QtPnNpemUgPiBidWZmZXJfbGVuIC0gb2Zmc2V0KSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICVkIGJ5dGVzKSIsCi0jZWxzZQogICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJXpkIGluc3RlYWQgb2YgYXQgbGVhc3QgJXpkIGJ5dGVzKSIsCi0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW4sIGRpY3QtPnNpemUgKyBvZmZzZXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMzI2LDkgKzEzMDgsMTEgQEAKICAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgc3RnZGljdC0+bmRpbSA9IGl0ZW1kaWN0LT5uZGltICsgMTsKLSAgICBzdGdkaWN0LT5zaGFwZSA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlfc3NpemVfdCAqKSAqIHN0Z2RpY3QtPm5kaW0pOwotICAgIGlmIChzdGdkaWN0LT5zaGFwZSA9PSBOVUxMKQorICAgIHN0Z2RpY3QtPnNoYXBlID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeV9zc2l6ZV90KSAqIHN0Z2RpY3QtPm5kaW0pOworICAgIGlmIChzdGdkaWN0LT5zaGFwZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogICAgIHN0Z2RpY3QtPnNoYXBlWzBdID0gbGVuZ3RoOwogICAgIG1lbW1vdmUoJnN0Z2RpY3QtPnNoYXBlWzFdLCBpdGVtZGljdC0+c2hhcGUsCiAgICAgICAgIHNpemVvZihQeV9zc2l6ZV90KSAqIChzdGdkaWN0LT5uZGltIC0gMSkpOwpAQCAtMjI2MSw2ICsyMjQ1LDEwIEBACiAgICAgICAgYXJndHlwZXMgd291bGQgYmUgYSBjdHlwZXMgdHlwZSkuCiAgICAgKi8KICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIlh7fSIpOworICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopc3RnZGljdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBzdGdkaWN0LT5mbGFncyB8PSBUWVBFRkxBR19JU1BPSU5URVI7CiAKICAgICAvKiBjcmVhdGUgdGhlIG5ldyBpbnN0YW5jZSAod2hpY2ggaXMgYSBjbGFzcywKQEAgLTQyMjIsNyArNDIxMCw3IEBACiAgICAgICAgICAgICBpICs9IHNlbGYtPmJfbGVuZ3RoOwogICAgICAgICByZXR1cm4gQXJyYXlfaXRlbShteXNlbGYsIGkpOwogICAgIH0KLSAgICBlbHNlIGlmIFB5U2xpY2VfQ2hlY2soaXRlbSkgeworICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaXRlbSkpIHsKICAgICAgICAgU3RnRGljdE9iamVjdCAqc3RnZGljdCwgKml0ZW1kaWN0OwogICAgICAgICBQeU9iamVjdCAqcHJvdG87CiAgICAgICAgIFB5T2JqZWN0ICpucDsKQEAgLTQyOTgsNiArNDI4NiwxMCBAQAogICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOwogICAgICAgICAgICAgIGN1ciArPSBzdGVwLCBpKyspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gQXJyYXlfaXRlbShteXNlbGYsIGN1cik7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5wKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShucCwgaSwgdik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5wOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCmluZGV4IGEzZDIzMjEuLmVjOGZkMTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKQEAgLTk4LDIwICs5OCwzNyBAQAogICAgIFB5T2JqZWN0ICpweV9nbG9iYWxzID0gMDsKICAgICBQeUNvZGVPYmplY3QgKnB5X2NvZGUgPSAwOwogICAgIFB5RnJhbWVPYmplY3QgKnB5X2ZyYW1lID0gMDsKKyAgICBQeU9iamVjdCAqZXhjZXB0aW9uLCAqdmFsdWUsICp0YjsKKworICAgIC8qIChTYXZlIGFuZCkgQ2xlYXIgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiBQeXRob24gZnVuY3Rpb25zIG11c3Qgbm90IGJlCisgICAgICAgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldC4gQ2FsbGluZyBQeXRob24gZnVuY3Rpb25zIGhhcHBlbnMgd2hlbgorICAgICAgIHRoZSBjb2RlYyBvZiB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyBpcyBpbXBsZW1lbnRlZCBpbiBwdXJlIFB5dGhvbi4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CiAKICAgICBweV9nbG9iYWxzID0gUHlEaWN0X05ldygpOwotICAgIGlmICghcHlfZ2xvYmFscykgZ290byBiYWQ7CisgICAgaWYgKCFweV9nbG9iYWxzKQorICAgICAgICBnb3RvIGJhZDsKICAgICBweV9jb2RlID0gUHlDb2RlX05ld0VtcHR5KGZpbGVuYW1lLCBmdW5jbmFtZSwgbGluZW5vKTsKLSAgICBpZiAoIXB5X2NvZGUpIGdvdG8gYmFkOworICAgIGlmICghcHlfY29kZSkKKyAgICAgICAgZ290byBiYWQ7CiAgICAgcHlfZnJhbWUgPSBQeUZyYW1lX05ldygKICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXQoKSwgLypQeVRocmVhZFN0YXRlICp0c3RhdGUsKi8KICAgICAgICAgcHlfY29kZSwgICAgICAgICAgICAgLypQeUNvZGVPYmplY3QgKmNvZGUsKi8KICAgICAgICAgcHlfZ2xvYmFscywgICAgICAgICAgLypQeU9iamVjdCAqZ2xvYmFscywqLwogICAgICAgICAwICAgICAgICAgICAgICAgICAgICAvKlB5T2JqZWN0ICpsb2NhbHMqLwogICAgICAgICApOwotICAgIGlmICghcHlfZnJhbWUpIGdvdG8gYmFkOworICAgIGlmICghcHlfZnJhbWUpCisgICAgICAgIGdvdG8gYmFkOwogICAgIHB5X2ZyYW1lLT5mX2xpbmVubyA9IGxpbmVubzsKKworICAgIFB5RXJyX1Jlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOwogICAgIFB5VHJhY2VCYWNrX0hlcmUocHlfZnJhbWUpOworCisgICAgUHlfREVDUkVGKHB5X2dsb2JhbHMpOworICAgIFB5X0RFQ1JFRihweV9jb2RlKTsKKyAgICBQeV9ERUNSRUYocHlfZnJhbWUpOworICAgIHJldHVybjsKKwogICBiYWQ6CiAgICAgUHlfWERFQ1JFRihweV9nbG9iYWxzKTsKICAgICBQeV9YREVDUkVGKHB5X2NvZGUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwppbmRleCAwOWViNjUzLi43NDExOWEzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwpAQCAtMjYxLDE4ICsyNjEsMTggQEAKICAgICAgICAgICAgdG8gYSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHdoaWNoIGl0IGRvZXMgbm90CiAgICAgICAgICAgIGhhdmUgdGhlIGFwcHJvcHJpYXRlIGFjY2Vzcy4gKi8KICAgICAgICAgaWYgKHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblswXSA9PSAwKQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFjY2VzcyB2aW9sYXRpb24gcmVhZGluZyAlcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzFdKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFjY2VzcyB2aW9sYXRpb24gd3JpdGluZyAlcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzFdKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9CUkVBS1BPSU5UOgogICAgICAgICAvKiBBIGJyZWFrcG9pbnQgd2FzIGVuY291bnRlcmVkLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGJyZWFrcG9pbnQgZW5jb3VudGVyZWQiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTI4MiwxNCArMjgyLDE0IEBACiAgICAgICAgICAgIGFsaWdubWVudC4gRm9yIGV4YW1wbGUsIDE2LWJpdCB2YWx1ZXMgbXVzdCBiZQogICAgICAgICAgICBhbGlnbmVkIG9uIDItYnl0ZSBib3VuZGFyaWVzLCAzMi1iaXQgdmFsdWVzIG9uCiAgICAgICAgICAgIDQtYnl0ZSBib3VuZGFyaWVzLCBhbmQgc28gb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZGF0YXR5cGUgbWlzYWxpZ25tZW50Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fU0lOR0xFX1NURVA6CiAgICAgICAgIC8qIEEgdHJhY2UgdHJhcCBvciBvdGhlciBzaW5nbGUtaW5zdHJ1Y3Rpb24gbWVjaGFuaXNtCiAgICAgICAgICAgIHNpZ25hbGVkIHRoYXQgb25lIGluc3RydWN0aW9uIGhhcyBiZWVuIGV4ZWN1dGVkLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHNpbmdsZSBzdGVwIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gYWNjZXNzIGFuIGFycmF5IGVsZW1lbnQKICAgICAgICAgICAgdGhhdCBpcyBvdXQgb2YgYm91bmRzLCBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUKICAgICAgICAgICAgc3VwcG9ydHMgYm91bmRzIGNoZWNraW5nLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFycmF5IGJvdW5kcyBleGNlZWRlZCIpOwogICAgICAgICBicmVhazsKIApAQCAtMzA2LDI4ICszMDYsMjggQEAKICAgICAgICAgICAgaXMgZGVub3JtYWwuIEEgZGVub3JtYWwgdmFsdWUgaXMgb25lIHRoYXQgaXMgdG9vCiAgICAgICAgICAgIHNtYWxsIHRvIHJlcHJlc2VudCBhcyBhIHN0YW5kYXJkIGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAgIHZhbHVlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgZGVub3JtYWwiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfRElWSURFX0JZX1pFUk86CiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGRpdmlkZSBhIGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAgIHZhbHVlIGJ5IGEgZmxvYXRpbmctcG9pbnQgZGl2aXNvciBvZiB6ZXJvLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGRpdmlkZSBieSB6ZXJvIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX0lORVhBQ1RfUkVTVUxUOgogICAgICAgICAvKiBUaGUgcmVzdWx0IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGNhbm5vdCBiZQogICAgICAgICAgICByZXByZXNlbnRlZCBleGFjdGx5IGFzIGEgZGVjaW1hbCBmcmFjdGlvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbmV4YWN0Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX0lOVkFMSURfT1BFUkFUSU9OOgogICAgICAgICAvKiBUaGlzIGV4Y2VwdGlvbiByZXByZXNlbnRzIGFueSBmbG9hdGluZy1wb2ludAogICAgICAgICAgICBleGNlcHRpb24gbm90IGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbnZhbGlkIG9wZXJhdGlvbiIpOwogICAgICAgICBicmVhazsKIApAQCAtMzM1LDIxICszMzUsMjEgQEAKICAgICAgICAgLyogVGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzCiAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiB0aGUgbWFnbml0dWRlIGFsbG93ZWQgYnkgdGhlCiAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdHlwZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBvdmVyZmxvdyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9TVEFDS19DSEVDSzoKICAgICAgICAgLyogVGhlIHN0YWNrIG92ZXJmbG93ZWQgb3IgdW5kZXJmbG93ZWQgYXMgdGhlIHJlc3VsdAogICAgICAgICAgICBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzdGFjayBvdmVyL3VuZGVyZmxvdyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX1NUQUNLX09WRVJGTE9XOgogICAgICAgICAvKiBUaGUgc3RhY2sgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCBhcyB0aGUgcmVzdWx0CiAgICAgICAgICAgIG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHN0YWNrIG92ZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNTcsMjEgKzM1NywyMSBAQAogICAgICAgICAvKiBUaGUgZXhwb25lbnQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gaXMgbGVzcwogICAgICAgICAgICB0aGFuIHRoZSBtYWduaXR1ZGUgYWxsb3dlZCBieSB0aGUgY29ycmVzcG9uZGluZwogICAgICAgICAgICB0eXBlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IHVuZGVyZmxvdyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0lOVF9ESVZJREVfQllfWkVSTzoKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZGl2aWRlIGFuIGludGVnZXIgdmFsdWUgYnkKICAgICAgICAgICAgYW4gaW50ZWdlciBkaXZpc29yIG9mIHplcm8uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogaW50ZWdlciBkaXZpZGUgYnkgemVybyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0lOVF9PVkVSRkxPVzoKICAgICAgICAgLyogVGhlIHJlc3VsdCBvZiBhbiBpbnRlZ2VyIG9wZXJhdGlvbiBjYXVzZWQgYSBjYXJyeQogICAgICAgICAgICBvdXQgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSByZXN1bHQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogaW50ZWdlciBvdmVyZmxvdyIpOwogICAgICAgICBicmVhazsKIApAQCAtMzc5LDE0ICszNzksMTQgQEAKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZXhlY3V0ZSBhbiBpbnN0cnVjdGlvbgogICAgICAgICAgICB3aG9zZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgICAgbWFjaGluZSBtb2RlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHByaXZpbGVkZ2VkIGluc3RydWN0aW9uIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fTk9OQ09OVElOVUFCTEVfRVhDRVBUSU9OOgogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBjb250aW51ZSBleGVjdXRpb24gYWZ0ZXIgYQogICAgICAgICAgICBub25jb250aW51YWJsZSBleGNlcHRpb24gb2NjdXJyZWQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogbm9jb250aW51YWJsZSIpOwogICAgICAgICBicmVhazsKIApAQCAtNjIwLDYgKzYyMCw4IEBACiAgICAgICAgIGFzc2VydChkaWN0LT5wYXJhbWZ1bmMpOwogICAgICAgICAvKiBJZiBpdCBoYXMgYW4gc3RnZGljdCwgaXQgaXMgYSBDRGF0YU9iamVjdCAqLwogICAgICAgICBjYXJnID0gZGljdC0+cGFyYW1mdW5jKChDRGF0YU9iamVjdCAqKW9iaik7CisgICAgICAgIGlmIChjYXJnID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHBhLT5mZmlfdHlwZSA9IGNhcmctPnBmZmlfdHlwZTsKICAgICAgICAgbWVtY3B5KCZwYS0+dmFsdWUsICZjYXJnLT52YWx1ZSwgc2l6ZW9mKHBhLT52YWx1ZSkpOwogICAgICAgICBwYS0+a2VlcCA9IChQeU9iamVjdCAqKWNhcmc7CkBAIC0xMTA1LDkgKzExMDcsNyBAQAogICAgICAgICBpZiAoYXJndHlwZXMgJiYgYXJndHlwZV9jb3VudCA+IGkpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2OwogICAgICAgICAgICAgY29udmVydGVyID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0eXBlcywgaSk7Ci0gICAgICAgICAgICB2ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhjb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICB2ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhjb252ZXJ0ZXIsIGFyZywgTlVMTCk7CiAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgX2N0eXBlc19leHRlbmRfZXJyb3IoUHlFeGNfQXJnRXJyb3IsICJhcmd1bWVudCAlZDogIiwgaSsxKTsKICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CkBAIC0xMjcyLDYyICsxMjcyLDYgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAotLyogb2Jzb2xldGUsIHNob3VsZCBiZSByZW1vdmVkICovCi0vKiBPbmx5IHVzZWQgYnkgc2FtcGxlIGNvZGUgKGluIHNhbXBsZXNcV2luZG93c1xDT00ucHkpICovCi1zdGF0aWMgUHlPYmplY3QgKgotY2FsbF9jb21tZXRob2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIElVbmtub3duICpwSXVuazsKLSAgICBpbnQgaW5kZXg7Ci0gICAgUHlPYmplY3QgKmFyZ3VtZW50czsKLSAgICBQUFJPQyAqbHBWdGJsOwotICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgQ0RhdGFPYmplY3QgKnBjb207Ci0gICAgUHlPYmplY3QgKmFyZ3R5cGVzID0gTlVMTDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiT2lPIXxPISIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZwY29tLCAmaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZQeVR1cGxlX1R5cGUsICZhcmd1bWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZQeVR1cGxlX1R5cGUsICZhcmd0eXBlcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKGFyZ3R5cGVzICYmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3VtZW50cykgIT0gUHlUdXBsZV9HRVRfU0laRShhcmd0eXBlcykpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiTWV0aG9kIHRha2VzICVkIGFyZ3VtZW50cyAoJWQgZ2l2ZW4pIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUoYXJndHlwZXMpLCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3VtZW50cykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIUNEYXRhT2JqZWN0X0NoZWNrKHBjb20pIHx8IChwY29tLT5iX3NpemUgIT0gc2l6ZW9mKHZvaWQgKikpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiQ09NIFBvaW50ZXIgZXhwZWN0ZWQgaW5zdGVhZCBvZiAlcyBpbnN0YW5jZSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHBjb20pLT50cF9uYW1lKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCgqKHZvaWQgKiopKHBjb20tPmJfcHRyKSkgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgQ09NICd0aGlzJyBwb2ludGVyIGlzIE5VTEwiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcEl1bmsgPSAoSVVua25vd24gKikoKih2b2lkICoqKShwY29tLT5iX3B0cikpOwotICAgIGxwVnRibCA9IChQUFJPQyAqKShwSXVuay0+bHBWdGJsKTsKLQotICAgIHJlc3VsdCA9ICBfY3R5cGVzX2NhbGxwcm9jKGxwVnRibFtpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMsCi0jaWZkZWYgTVNfV0lOMzIKLSAgICAgICAgICAgICAgICAgICAgICAgIHBJdW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgRlVOQ0ZMQUdfSFJFU1VMVCwgLyogZmxhZ3MgKi8KLSAgICAgICAgICAgICAgICBhcmd0eXBlcywgLyogc2VsZi0+YXJndHlwZXMgKi8KLSAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5yZXN0eXBlICovCi0gICAgICAgICAgICAgICAgTlVMTCk7IC8qIGNoZWNrZXIgKi8KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgY2hhciBjb3B5X2NvbV9wb2ludGVyX2RvY1tdID0KICJDb3B5Q29tUG9pbnRlcihzcmMsIGRzdCkgLT4gSFJFU1VMVCB2YWx1ZVxuIjsKIApAQCAtMTQ4OSw5ICsxNDMzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNGTEFHX0NERUNMLCAvKiBmbGFncyAqLwotICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPmFyZ3R5cGVzICovCi0gICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+cmVzdHlwZSAqLwotICAgICAgICAgICAgICAgIE5VTEwpOyAvKiBjaGVja2VyICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5hcmd0eXBlcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+cmVzdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7IC8qIGNoZWNrZXIgKi8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xODIyLDcgKzE3NjYsNiBAQAogICAgIHsiRm9ybWF0RXJyb3IiLCBmb3JtYXRfZXJyb3IsIE1FVEhfVkFSQVJHUywgZm9ybWF0X2Vycm9yX2RvY30sCiAgICAgeyJMb2FkTGlicmFyeSIsIGxvYWRfbGlicmFyeSwgTUVUSF9WQVJBUkdTLCBsb2FkX2xpYnJhcnlfZG9jfSwKICAgICB7IkZyZWVMaWJyYXJ5IiwgZnJlZV9saWJyYXJ5LCBNRVRIX1ZBUkFSR1MsIGZyZWVfbGlicmFyeV9kb2N9LAotICAgIHsiY2FsbF9jb21tZXRob2QiLCBjYWxsX2NvbW1ldGhvZCwgTUVUSF9WQVJBUkdTIH0sCiAgICAgeyJfY2hlY2tfSFJFU1VMVCIsIGNoZWNrX2hyZXN1bHQsIE1FVEhfVkFSQVJHU30sCiAjZWxzZQogICAgIHsiZGxvcGVuIiwgcHlfZGxfb3BlbiwgTUVUSF9WQVJBUkdTLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYwppbmRleCBiZjQyMDkzLi45NjgyNmI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYwpAQCAtMzgsMTIgKzM4LDEzIEBACiAvKkBvdXRAKi8JZmZpX3R5cGUqCWFyZykKIHsKIC8qQC11c2VkZWZAKi8KKwlmZmlfdHlwZSoqCXB0cjsKIAogCWlmIChhcmcgPT0gTlVMTCB8fCBhcmctPmVsZW1lbnRzID09IE5VTEwgfHwKIAkJYXJnLT5zaXplICE9IDAgfHwgYXJnLT5hbGlnbm1lbnQgIT0gMCkKIAkJcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKIAotCWZmaV90eXBlKioJcHRyID0gJihhcmctPmVsZW1lbnRzWzBdKTsKKyAgICBwdHIgPSAmKGFyZy0+ZWxlbWVudHNbMF0pOwogCiAJd2hpbGUgKCgqcHRyKSAhPSBOVUxMKQogCXsKQEAgLTEzNSwxNiArMTM2LDE2IEBACiAvKkBkZXBlbmRlbnRAKi8gLypAb3V0QCovIC8qQHBhcnRpYWxAKi8gZmZpX3R5cGUqCXJ0eXBlLCAKIC8qQGRlcGVuZGVudEAqLwkJCWZmaV90eXBlKioJCWF0eXBlcykKIHsKKwl1bnNpZ25lZCBpbnQJYnl0ZXMJPSAwOworCXVuc2lnbmVkIGludAlpOworCWZmaV90eXBlKioJCXB0cjsKKwogCWlmIChjaWYgPT0gTlVMTCkKIAkJcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKIAogCWlmIChhYmkgPD0gRkZJX0ZJUlNUX0FCSSB8fCBhYmkgPiBGRklfREVGQVVMVF9BQkkpCiAJCXJldHVybiBGRklfQkFEX0FCSTsKIAotCXVuc2lnbmVkIGludAlieXRlcwk9IDA7Ci0JdW5zaWduZWQgaW50CWk7Ci0JZmZpX3R5cGUqKgkJcHRyOwotCiAJY2lmLT5hYmkgPSBhYmk7CiAJY2lmLT5hcmdfdHlwZXMgPSBhdHlwZXM7CiAJY2lmLT5uYXJncyA9IG5hcmdzOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCmluZGV4IDJhZmZiMTQuLmYyNjEwYzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMKQEAgLTIyNSwxNCArMjI1LDE2IEBACiAJCQkvKiBNZXJnZSB0aGUgZmllbGRzIG9mIHN0cnVjdHVyZS4gICovCiAJCQlmb3IgKHB0ciA9IHR5cGUtPmVsZW1lbnRzOyAqcHRyICE9IE5VTEw7IHB0cisrKQogCQkJeworCQkJCWludCBudW0sIHBvczsKKwogCQkJCWJ5dGVfb2Zmc2V0ID0gQUxJR04oYnl0ZV9vZmZzZXQsICgqcHRyKS0+YWxpZ25tZW50KTsKIAotCQkJCWludAludW0gPSBjbGFzc2lmeV9hcmd1bWVudCgqcHRyLCBzdWJjbGFzc2VzLCBieXRlX29mZnNldCAlIDgpOworCQkJCW51bSA9IGNsYXNzaWZ5X2FyZ3VtZW50KCpwdHIsIHN1YmNsYXNzZXMsIGJ5dGVfb2Zmc2V0ICUgOCk7CiAKIAkJCQlpZiAobnVtID09IDApCiAJCQkJCXJldHVybiAwOwogCi0JCQkJaW50IHBvcyA9IGJ5dGVfb2Zmc2V0IC8gODsKKwkJCQlwb3MgPSBieXRlX29mZnNldCAvIDg7CiAKIAkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCiAJCQkJewpAQCAtNTg5LDExICs1OTEsMTIgQEAKIAl2b2lkCQkJKCpmdW4pKGZmaV9jaWYqLCB2b2lkKiwgdm9pZCoqLCB2b2lkKiksCiAJdm9pZCoJCQl1c2VyX2RhdGEpCiB7CisJCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0Kgl0cmFtcDsKKwogCWlmIChjaWYtPmFiaSAhPSBGRklfVU5JWDY0KQogCQlyZXR1cm4gRkZJX0JBRF9BQkk7CiAKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCoJdHJhbXAgPQotCQkodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKSZjbG9zdXJlLT50cmFtcFswXTsKKwl0cmFtcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopJmNsb3N1cmUtPnRyYW1wWzBdOwogCiAJdHJhbXBbMF0gPSAweGJiNDk7CQkvKiBtb3YgPGNvZGU+LCAlcjExCSovCiAJKih2b2lkKiB2b2xhdGlsZSopJnRyYW1wWzFdID0gZmZpX2Nsb3N1cmVfdW5peDY0OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYyBiL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKaW5kZXggMjVkOTk5Ni4uYjk1YjBhNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCkBAIC00MTcsNiArNDE3LDggQEAKICAgICAgICAgICAgdGhhdCkuIFVzZSAnQicgZm9yIGJ5dGVzLiAqLwogICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIkIiKTsKICAgICB9CisgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CiAKICNkZWZpbmUgcmVhbGRpY3QgKChQeU9iamVjdCAqKSZzdGdkaWN0LT5kaWN0KQogICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewpAQCAtNDgzLDcgKzQ4NSw3IEBACiAgICAgICAgICAgICBjaGFyICpmaWVsZGZtdCA9IGRpY3QtPmZvcm1hdCA/IGRpY3QtPmZvcm1hdCA6ICJCIjsKICAgICAgICAgICAgIGNoYXIgKmZpZWxkbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobmFtZSk7CiAgICAgICAgICAgICBjaGFyICpwdHI7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsgCisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKIAogICAgICAgICAgICAgaWYgKGZpZWxkbmFtZSA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwppbmRleCBmNTYwNzAyLi44N2I5YzA1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYworKysgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwpAQCAtMTE3LDcgKzExNyw3IEBACiB7CiAgICAgbGlzdF9vZl9wYW5lbHMgKm5ldzsKIAotICAgIGlmICgobmV3ID0gKGxpc3Rfb2ZfcGFuZWxzICopbWFsbG9jKHNpemVvZihsaXN0X29mX3BhbmVscykpKSA9PSBOVUxMKSB7CisgICAgaWYgKChuZXcgPSAobGlzdF9vZl9wYW5lbHMgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKGxpc3Rfb2ZfcGFuZWxzKSkpID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgIHRlbXAgPSBsb3A7CiAgICAgaWYgKHRlbXAtPnBvID09IHBvKSB7CiAgICAgICAgIGxvcCA9IHRlbXAtPm5leHQ7Ci0gICAgICAgIGZyZWUodGVtcCk7CisgICAgICAgIFB5TWVtX0ZyZWUodGVtcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgd2hpbGUgKHRlbXAtPm5leHQgPT0gTlVMTCB8fCB0ZW1wLT5uZXh0LT5wbyAhPSBwbykgewpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgIHRlbXAgPSB0ZW1wLT5uZXh0OwogICAgIH0KICAgICBuID0gdGVtcC0+bmV4dC0+bmV4dDsKLSAgICBmcmVlKHRlbXAtPm5leHQpOworICAgIFB5TWVtX0ZyZWUodGVtcC0+bmV4dCk7CiAgICAgdGVtcC0+bmV4dCA9IG47CiAgICAgcmV0dXJuOwogfQpAQCAtNTEzLDYgKzUxMyw4IEBACiAgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIGltcG9ydF9jdXJzZXMoKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBmYWlsOwogCiAgICAgLyogRm9yIGV4Y2VwdGlvbiBfY3Vyc2VzX3BhbmVsLmVycm9yICovCiAgICAgX2N1cnNlc19wYW5lbHN0YXRlKG0pLT5QeUN1cnNlc0Vycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfY3Vyc2VzX3BhbmVsLmVycm9yIiwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCmluZGV4IGY1ZGY4MGMuLjFmMTkyZGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCkBAIC0xNjgsMTAgKzE2OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBjYWxsIHN0YXJ0X2NvbG9yKCkgZmlyc3QiKTsgICAgICAgXAogICAgICAgICByZXR1cm4gMDsgfQogCi0jaWZuZGVmIE1JTgotI2RlZmluZSBNSU4oeCx5KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQotI2VuZGlmCi0KIC8qIFV0aWxpdHkgRnVuY3Rpb25zICovCiAKIC8qCkBAIC01MzMsNyArNTI5LDcgQEAKICAgICB3byA9IFB5T2JqZWN0X05FVyhQeUN1cnNlc1dpbmRvd09iamVjdCwgJlB5Q3Vyc2VzV2luZG93X1R5cGUpOwogICAgIGlmICh3byA9PSBOVUxMKSByZXR1cm4gTlVMTDsKICAgICB3by0+d2luID0gd2luOwotICAgIHdvLT5lbmNvZGluZyA9IHN0cmR1cChlbmNvZGluZyk7CisgICAgd28tPmVuY29kaW5nID0gX1B5TWVtX1N0cmR1cChlbmNvZGluZyk7CiAgICAgaWYgKHdvLT5lbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRih3byk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC01NDcsNzQgKzU0MywxNDcgQEAKIHsKICAgICBpZiAod28tPndpbiAhPSBzdGRzY3IpIGRlbHdpbih3by0+d2luKTsKICAgICBpZiAod28tPmVuY29kaW5nICE9IE5VTEwpCi0gICAgICAgIGZyZWUod28tPmVuY29kaW5nKTsKKyAgICAgICAgUHlNZW1fRnJlZSh3by0+ZW5jb2RpbmcpOwogICAgIFB5T2JqZWN0X0RFTCh3byk7CiB9CiAKIC8qIEFkZGNoLCBBZGRzdHIsIEFkZG5zdHIgKi8KIAorLypbY2xpbmljXQorbW9kdWxlIGN1cnNlcworCitjbGFzcyBjdXJzZXMud2luZG93CisKK2N1cnNlcy53aW5kb3cuYWRkY2gKKworICAgIFsKKyAgICB4OiBpbnQKKyAgICAgIFgtY29vcmRpbmF0ZS4KKyAgICB5OiBpbnQKKyAgICAgIFktY29vcmRpbmF0ZS4KKyAgICBdCisKKyAgICBjaDogb2JqZWN0CisgICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorCisgICAgWworICAgIGF0dHI6IGxvbmcKKyAgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgXQorICAgIC8KKworUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ci4KKworUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ciwKK292ZXJ3cml0aW5nIGFueSBjaGFyYWN0ZXIgcHJldmlvdXNseSBwYWludGVkIGF0IHRoYXQgbG9jYXRpb24uCitCeSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGFuZCBhdHRyaWJ1dGVzIGFyZSB0aGUKK2N1cnJlbnQgc2V0dGluZ3MgZm9yIHRoZSB3aW5kb3cgb2JqZWN0LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoY3Vyc2VzX3dpbmRvd19hZGRjaF9fZG9jX18sCisiUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ci5cbiIKKyJcbiIKKyJjdXJzZXMud2luZG93LmFkZGNoKFt4LCB5LF0gY2gsIFthdHRyXSlcbiIKKyIgIHhcbiIKKyIgICAgWC1jb29yZGluYXRlLlxuIgorIiAgeVxuIgorIiAgICBZLWNvb3JkaW5hdGUuXG4iCisiICBjaFxuIgorIiAgICBDaGFyYWN0ZXIgdG8gYWRkLlxuIgorIiAgYXR0clxuIgorIiAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLlxuIgorIlxuIgorIlBhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIsXG4iCisib3ZlcndyaXRpbmcgYW55IGNoYXJhY3RlciBwcmV2aW91c2x5IHBhaW50ZWQgYXQgdGhhdCBsb2NhdGlvbi5cbiIKKyJCeSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGFuZCBhdHRyaWJ1dGVzIGFyZSB0aGVcbiIKKyJjdXJyZW50IHNldHRpbmdzIGZvciB0aGUgd2luZG93IG9iamVjdC4iKTsKKworI2RlZmluZSBDVVJTRVNfV0lORE9XX0FERENIX01FVEhPRERFRiAgICBcCisgICAgeyJhZGRjaCIsIChQeUNGdW5jdGlvbiljdXJzZXNfd2luZG93X2FkZGNoLCBNRVRIX1ZBUkFSR1MsIGN1cnNlc193aW5kb3dfYWRkY2hfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLVB5Q3Vyc2VzV2luZG93X0FkZENoKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2N1cnNlc193aW5kb3dfYWRkY2hfaW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGdyb3VwX2xlZnRfMSwgaW50IHgsIGludCB5LCBQeU9iamVjdCAqY2gsIGludCBncm91cF9yaWdodF8xLCBsb25nIGF0dHIpOworCitzdGF0aWMgUHlPYmplY3QgKgorY3Vyc2VzX3dpbmRvd19hZGRjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IHJ0biwgeCwgeSwgdXNlX3h5ID0gRkFMU0U7Ci0gICAgUHlPYmplY3QgKmNob2JqOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBncm91cF9sZWZ0XzEgPSAwOworICAgIGludCB4OworICAgIGludCB5OworICAgIFB5T2JqZWN0ICpjaDsKKyAgICBpbnQgZ3JvdXBfcmlnaHRfMSA9IDA7CisgICAgbG9uZyBhdHRyOworCisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmFkZGNoIiwgJmNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9sOmFkZGNoIiwgJmNoLCAmYXR0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpTzphZGRjaCIsICZ4LCAmeSwgJmNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdyb3VwX2xlZnRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU9sOmFkZGNoIiwgJngsICZ5LCAmY2gsICZhdHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgZ3JvdXBfbGVmdF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImN1cnNlcy53aW5kb3cuYWRkY2ggcmVxdWlyZXMgMSB0byA0IGFyZ3VtZW50cyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybl92YWx1ZSA9IGN1cnNlc193aW5kb3dfYWRkY2hfaW1wbChzZWxmLCBncm91cF9sZWZ0XzEsIHgsIHksIGNoLCBncm91cF9yaWdodF8xLCBhdHRyKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBncm91cF9sZWZ0XzEsIGludCB4LCBpbnQgeSwgUHlPYmplY3QgKmNoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgbG9uZyBhdHRyKQorLypbY2xpbmljIGNoZWNrc3VtOiA5OGFkZTc4MDM5N2E0OGQwYmU0ODQzOTc2MzQyNGIzYjAwYzkyMDg5XSovCit7CisgICAgUHlDdXJzZXNXaW5kb3dPYmplY3QgKmN3c2VsZiA9IChQeUN1cnNlc1dpbmRvd09iamVjdCAqKXNlbGY7CisgICAgaW50IGNvb3JkaW5hdGVzX2dyb3VwID0gZ3JvdXBfbGVmdF8xOworICAgIGludCBhdHRyX2dyb3VwID0gZ3JvdXBfcmlnaHRfMTsKKyAgICBpbnQgcnRuOwogICAgIGludCB0eXBlOwotICAgIGNodHlwZSBjaDsKKyAgICBjaHR5cGUgY2NoOwogI2lmZGVmIEhBVkVfTkNVUlNFU1cKICAgICBjY2hhcl90IHdjaDsKICNlbmRpZgotICAgIGF0dHJfdCBhdHRyID0gQV9OT1JNQUw7Ci0gICAgbG9uZyBsYXR0cjsKICAgICBjb25zdCBjaGFyICpmdW5jbmFtZTsKIAotICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk87Y2ggb3IgaW50IiwgJmNob2JqKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2w7Y2ggb3IgaW50LGF0dHIiLCAmY2hvYmosICZsYXR0cikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaU87eSx4LGNoIG9yIGludCIsICZ5LCAmeCwgJmNob2JqKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB1c2VfeHkgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaU9sO3kseCxjaCBvciBpbnQsIGF0dHIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnksICZ4LCAmY2hvYmosICZsYXR0cikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICB1c2VfeHkgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYWRkY2ggcmVxdWlyZXMgMSB0byA0IGFyZ3VtZW50cyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFhdHRyX2dyb3VwKQorICAgICAgYXR0ciA9IEFfTk9STUFMOwogCiAjaWZkZWYgSEFWRV9OQ1VSU0VTVwotICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KHNlbGYsIGNob2JqLCAmY2gsICZ3Y2gpOworICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KGN3c2VsZiwgY2gsICZjY2gsICZ3Y2gpOwogICAgIGlmICh0eXBlID09IDIpIHsKICAgICAgICAgZnVuY25hbWUgPSAiYWRkX3djaCI7CiAgICAgICAgIHdjaC5hdHRyID0gYXR0cjsKLSAgICAgICAgaWYgKHVzZV94eSA9PSBUUlVFKQotICAgICAgICAgICAgcnRuID0gbXZ3YWRkX3djaChzZWxmLT53aW4seSx4LCAmd2NoKTsKKyAgICAgICAgaWYgKGNvb3JkaW5hdGVzX2dyb3VwKQorICAgICAgICAgICAgcnRuID0gbXZ3YWRkX3djaChjd3NlbGYtPndpbix5LHgsICZ3Y2gpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ0biA9IHdhZGRfd2NoKHNlbGYtPndpbiwgJndjaCk7CisgICAgICAgICAgICBydG4gPSB3YWRkX3djaChjd3NlbGYtPndpbiwgJndjaCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogI2Vsc2UKLSAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChzZWxmLCBjaG9iaiwgJmNoKTsKKyAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChjd3NlbGYsIGNoLCAmY2NoKTsKICNlbmRpZgogICAgIGlmICh0eXBlID09IDEpIHsKICAgICAgICAgZnVuY25hbWUgPSAiYWRkY2giOwotICAgICAgICBpZiAodXNlX3h5ID09IFRSVUUpCi0gICAgICAgICAgICBydG4gPSBtdndhZGRjaChzZWxmLT53aW4seSx4LCBjaCB8IGF0dHIpOworICAgICAgICBpZiAoY29vcmRpbmF0ZXNfZ3JvdXApCisgICAgICAgICAgICBydG4gPSBtdndhZGRjaChjd3NlbGYtPndpbix5LHgsIGNjaCB8IGF0dHIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ0biA9IHdhZGRjaChzZWxmLT53aW4sIGNoIHwgYXR0cik7CisgICAgICAgICAgICBydG4gPSB3YWRkY2goY3dzZWxmLT53aW4sIGNjaCB8IGF0dHIpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewpAQCAtMTIxMiw3ICsxMjgxLDcgQEAKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7biIsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJ0bjIgPSB3Z2V0bnN0cihzZWxmLT53aW4scnRuLE1JTihuLCAxMDIzKSk7CisgICAgICAgIHJ0bjIgPSB3Z2V0bnN0cihzZWxmLT53aW4sIHJ0biwgUHlfTUlOKG4sIDEwMjMpKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgpAQCAtMTIzMiwxMSArMTMwMSwxMSBAQAogI2lmZGVmIFNUUklDVF9TWVNWX0NVUlNFUwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJ0bjIgPSB3bW92ZShzZWxmLT53aW4seSx4KT09RVJSID8gRVJSIDoKLSAgICAgICAgd2dldG5zdHIoc2VsZi0+d2luLCBydG4sIE1JTihuLCAxMDIzKSk7CisgICAgICAgIHdnZXRuc3RyKHNlbGYtPndpbiwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogI2Vsc2UKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBydG4yID0gbXZ3Z2V0bnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IG12d2dldG5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZW5kaWYKICAgICAgICAgYnJlYWs7CkBAIC0xMzc0LDcgKzE0NDMsNyBAQAogICAgIGNhc2UgMToKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7biIsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBydG4yID0gd2lubnN0cihzZWxmLT53aW4scnRuLE1JTihuLDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IHdpbm5zdHIoc2VsZi0+d2luLCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO3kseCIsJnksJngpKQpAQCAtMTM4NCw3ICsxNDUzLDcgQEAKICAgICBjYXNlIDM6CiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpO3kseCxuIiwgJnksICZ4LCAmbikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcnRuMiA9IG12d2lubnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgTUlOKG4sMTAyMykpOworICAgICAgICBydG4yID0gbXZ3aW5uc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBQeV9NSU4obiwxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJpbnN0ciByZXF1aXJlcyAwIG9yIDMgYXJndW1lbnRzIik7CkBAIC0xNjk4LDI2ICsxNzY3LDI0IEBACiAgICAgLyogV2UgaGF2ZSB0byBzaW11bGF0ZSB0aGlzIGJ5IHdyaXRpbmcgdG8gYSB0ZW1wb3JhcnkgRklMRSosCiAgICAgICAgdGhlbiByZWFkaW5nIGJhY2ssIHRoZW4gd3JpdGluZyB0byB0aGUgYXJndW1lbnQgc3RyZWFtLiAqLwogICAgIGNoYXIgZm5bMTAwXTsKLSAgICBpbnQgZmQ7Ci0gICAgRklMRSAqZnA7Ci0gICAgUHlPYmplY3QgKnJlczsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBGSUxFICpmcCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBzdHJjcHkoZm4sICIvdG1wL3B5LmN1cnNlcy5wdXR3aW4uWFhYWFhYIik7CiAgICAgZmQgPSBta3N0ZW1wKGZuKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgZnAgPSBmZG9wZW4oZmQsICJ3YisiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIHJlcyA9IFB5Q3Vyc2VzQ2hlY2tFUlIocHV0d2luKHNlbGYtPndpbiwgZnApLCAicHV0d2luIik7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQorICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIGZzZWVrKGZwLCAwLCAwKTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBjaGFyIGJ1ZltCVUZTSVpdOwpAQCAtMTczMSw3ICsxNzk4LDEyIEBACiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBmY2xvc2UoZnApOworCitleGl0OgorICAgIGlmIChmcCAhPSBOVUxMKQorICAgICAgICBmY2xvc2UoZnApOworICAgIGVsc2UgaWYgKGZkICE9IC0xKQorICAgICAgICBjbG9zZShmZCk7CiAgICAgcmVtb3ZlKGZuKTsKICAgICByZXR1cm4gcmVzOwogfQpAQCAtMTk0MiwyMCArMjAxNCwyMCBAQAogICAgIGFzY2lpID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcodmFsdWUpOwogICAgIGlmIChhc2NpaSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgZW5jb2RpbmcgPSBzdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKKyAgICBlbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKICAgICBQeV9ERUNSRUYoYXNjaWkpOwogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lbmNvZGluZyk7CiAgICAgc2VsZi0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKICAgICByZXR1cm4gMDsKIH0KIAogCiBzdGF0aWMgUHlNZXRob2REZWYgUHlDdXJzZXNXaW5kb3dfTWV0aG9kc1tdID0gewotICAgIHsiYWRkY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZENoLCBNRVRIX1ZBUkFSR1N9LAorICAgIENVUlNFU19XSU5ET1dfQUREQ0hfTUVUSE9EREVGCiAgICAgeyJhZGRuc3RyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkTlN0ciwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImFkZHN0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRTdHIsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJhdHRyb2ZmIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0ck9mZiwgTUVUSF9WQVJBUkdTfSwKQEAgLTIyNTYsMTIgKzIzMjgsMTMgQEAKIFB5Q3Vyc2VzX0dldFdpbihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmVhbSkKIHsKICAgICBjaGFyIGZuWzEwMF07Ci0gICAgaW50IGZkOwotICAgIEZJTEUgKmZwOworICAgIGludCBmZCA9IC0xOworICAgIEZJTEUgKmZwID0gTlVMTDsKICAgICBQeU9iamVjdCAqZGF0YTsKICAgICBzaXplX3QgZGF0YWxlbjsKICAgICBXSU5ET1cgKndpbjsKICAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAogICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKQEAgLTIyNjksNDQgKzIzNDIsNDcgQEAKICAgICBmZCA9IG1rc3RlbXAoZm4pOwogICAgIGlmIChmZCA8IDApCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgZnAgPSBmZG9wZW4oZmQsICJ3YisiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKwogICAgIGRhdGEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHN0cmVhbSwgJlB5SWRfcmVhZCwgIiIpOwotICAgIGlmIChkYXRhID09IE5VTEwpIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmIChkYXRhID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGRhdGEpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiZi5yZWFkKCkgcmV0dXJuZWQgJS4xMDBzIGluc3RlYWQgb2YgYnl0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgZGF0YS0+b2JfdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGRhdGFsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpOwogICAgIGlmIChmd3JpdGUoUHlCeXRlc19BU19TVFJJTkcoZGF0YSksIDEsIGRhdGFsZW4sIGZwKSAhPSBkYXRhbGVuKSB7CiAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIFB5X0RFQ1JFRihkYXRhKTsKKwogICAgIGZzZWVrKGZwLCAwLCAwKTsKICAgICB3aW4gPSBnZXR3aW4oZnApOwotICAgIGZjbG9zZShmcCk7Ci0gICAgcmVtb3ZlKGZuKTsKICAgICBpZiAod2luID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgcmV0dXJuIFB5Q3Vyc2VzV2luZG93X05ldyh3aW4sIE5VTEwpOworICAgIHJlcyA9IFB5Q3Vyc2VzV2luZG93X05ldyh3aW4sIE5VTEwpOworCitlcnJvcjoKKyAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICBlbHNlIGlmIChmZCAhPSAtMSkKKyAgICAgICAgY2xvc2UoZmQpOworICAgIHJlbW92ZShmbik7CisgICAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM0MTQsNyArMzQ5MCw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoc3RybmNtcChrZXlfbiwiS0VZX0YoIiw2KT09MCkgewogICAgICAgICAgICAgICAgIGNoYXIgKnAxLCAqcDI7Ci0gICAgICAgICAgICAgICAga2V5X24yID0gbWFsbG9jKHN0cmxlbihrZXlfbikrMSk7CisgICAgICAgICAgICAgICAga2V5X24yID0gUHlNZW1fTWFsbG9jKHN0cmxlbihrZXlfbikrMSk7CiAgICAgICAgICAgICAgICAgaWYgKCFrZXlfbjIpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNDMzLDcgKzM1MDksNyBAQAogICAgICAgICAgICAgICAgIGtleV9uMiA9IGtleV9uOwogICAgICAgICAgICAgU2V0RGljdEludChrZXlfbjIsa2V5KTsKICAgICAgICAgICAgIGlmIChrZXlfbjIgIT0ga2V5X24pCi0gICAgICAgICAgICAgICAgZnJlZShrZXlfbjIpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoa2V5X24yKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIFNldERpY3RJbnQoIktFWV9NSU4iLCBLRVlfTUlOKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMgYi9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCmluZGV4IGZhMjMxZDkuLjg4NDg0MzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYwpAQCAtMTQwLDE5ICsxNDAsNiBAQAogICAgIHJldHVybiBxdW87CiB9CiAKLS8qIFJvdW5kIGEgZG91YmxlIHRvIHRoZSBuZWFyZXN0IGxvbmcuICB8eHwgbXVzdCBiZSBzbWFsbCBlbm91Z2ggdG8gZml0Ci0gKiBpbiBhIEMgbG9uZzsgdGhpcyBpcyBub3QgY2hlY2tlZC4KLSAqLwotc3RhdGljIGxvbmcKLXJvdW5kX3RvX2xvbmcoZG91YmxlIHgpCi17Ci0gICAgaWYgKHggPj0gMC4wKQotICAgICAgICB4ID0gZmxvb3IoeCArIDAuNSk7Ci0gICAgZWxzZQotICAgICAgICB4ID0gY2VpbCh4IC0gMC41KTsKLSAgICByZXR1cm4gKGxvbmcpeDsKLX0KLQogLyogTmVhcmVzdCBpbnRlZ2VyIHRvIG0gLyBuIGZvciBpbnRlZ2VycyBtIGFuZCBuLiBIYWxmLWludGVnZXIgcmVzdWx0cwogICogYXJlIHJvdW5kZWQgdG8gZXZlbi4KICAqLwpAQCAtMTM5Nyw3ICsxMzg0LDcgQEAKICAqLwogCiAvKiBDb252ZXJzaW9uIGZhY3RvcnMuICovCi1zdGF0aWMgUHlPYmplY3QgKnVzX3Blcl91cyA9IE5VTEw7ICAgICAgLyogMSAqLworc3RhdGljIFB5T2JqZWN0ICpvbmUgPSBOVUxMOyAgICAgIC8qIDEgKi8KIHN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX21zID0gTlVMTDsgICAgICAvKiAxMDAwICovCiBzdGF0aWMgUHlPYmplY3QgKnVzX3Blcl9zZWNvbmQgPSBOVUxMOyAgLyogMTAwMDAwMCAqLwogc3RhdGljIFB5T2JqZWN0ICp1c19wZXJfbWludXRlID0gTlVMTDsgIC8qIDFlNiAqIDYwIGFzIFB5dGhvbiBpbnQgKi8KQEAgLTIxMTksNyArMjEwNiw3IEBACiAgICAgICAgIGdvdG8gRG9uZQogCiAgICAgaWYgKHVzKSB7Ci0gICAgICAgIHkgPSBhY2N1bSgibWljcm9zZWNvbmRzIiwgeCwgdXMsIHVzX3Blcl91cywgJmxlZnRvdmVyX3VzKTsKKyAgICAgICAgeSA9IGFjY3VtKCJtaWNyb3NlY29uZHMiLCB4LCB1cywgb25lLCAmbGVmdG92ZXJfdXMpOwogICAgICAgICBDTEVBTlVQOwogICAgIH0KICAgICBpZiAobXMpIHsKQEAgLTIxNDgsNyArMjEzNSwzMyBAQAogICAgIH0KICAgICBpZiAobGVmdG92ZXJfdXMpIHsKICAgICAgICAgLyogUm91bmQgdG8gbmVhcmVzdCB3aG9sZSAjIG9mIHVzLCBhbmQgYWRkIGludG8geC4gKi8KLSAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBQeUxvbmdfRnJvbUxvbmcocm91bmRfdG9fbG9uZyhsZWZ0b3Zlcl91cykpOworICAgICAgICBkb3VibGUgd2hvbGVfdXMgPSByb3VuZChsZWZ0b3Zlcl91cyk7CisgICAgICAgIGludCB4X2lzX29kZDsKKyAgICAgICAgUHlPYmplY3QgKnRlbXA7CisKKyAgICAgICAgd2hvbGVfdXMgPSByb3VuZChsZWZ0b3Zlcl91cyk7CisgICAgICAgIGlmIChmYWJzKHdob2xlX3VzIC0gbGVmdG92ZXJfdXMpID09IDAuNSkgeworICAgICAgICAgICAgLyogV2UncmUgZXhhY3RseSBoYWxmd2F5IGJldHdlZW4gdHdvIGludGVnZXJzLiAgSW4gb3JkZXIKKyAgICAgICAgICAgICAqIHRvIGRvIHJvdW5kLWhhbGYtdG8tZXZlbiwgd2UgbXVzdCBkZXRlcm1pbmUgd2hldGhlciB4CisgICAgICAgICAgICAgKiBpcyBvZGQuIE5vdGUgdGhhdCB4IGlzIG9kZCB3aGVuIGl0J3MgbGFzdCBiaXQgaXMgMS4gVGhlCisgICAgICAgICAgICAgKiBjb2RlIGJlbG93IHVzZXMgYml0d2lzZSBhbmQgb3BlcmF0aW9uIHRvIGNoZWNrIHRoZSBsYXN0CisgICAgICAgICAgICAgKiBiaXQuICovCisJICAgIHRlbXAgPSBQeU51bWJlcl9BbmQoeCwgb25lKTsgIC8qIHRlbXAgPC0geCAmIDEgKi8KKyAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeF9pc19vZGQgPSBQeU9iamVjdF9Jc1RydWUodGVtcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgICAgICAgICBpZiAoeF9pc19vZGQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hvbGVfdXMgPSAyLjAgKiByb3VuZCgobGVmdG92ZXJfdXMgKyB4X2lzX29kZCkgKiAwLjUpIC0geF9pc19vZGQ7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wID0gUHlMb25nX0Zyb21Mb25nKChsb25nKXdob2xlX3VzKTsKKwogICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CiAgICAgICAgICAgICBnb3RvIERvbmU7CkBAIC0yMjM5LDIyICsyMjUyLDE0IEBACiB7CiAgICAgUHlPYmplY3QgKnRvdGFsX3NlY29uZHM7CiAgICAgUHlPYmplY3QgKnRvdGFsX21pY3Jvc2Vjb25kczsKLSAgICBQeU9iamVjdCAqb25lX21pbGxpb247CiAKICAgICB0b3RhbF9taWNyb3NlY29uZHMgPSBkZWx0YV90b19taWNyb3NlY29uZHMoKFB5RGF0ZVRpbWVfRGVsdGEgKilzZWxmKTsKICAgICBpZiAodG90YWxfbWljcm9zZWNvbmRzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgb25lX21pbGxpb24gPSBQeUxvbmdfRnJvbUxvbmcoMTAwMDAwMEwpOwotICAgIGlmIChvbmVfbWlsbGlvbiA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0b3RhbF9taWNyb3NlY29uZHMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0b3RhbF9zZWNvbmRzID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh0b3RhbF9taWNyb3NlY29uZHMsIG9uZV9taWxsaW9uKTsKKyAgICB0b3RhbF9zZWNvbmRzID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh0b3RhbF9taWNyb3NlY29uZHMsIHVzX3Blcl9zZWNvbmQpOwogCiAgICAgUHlfREVDUkVGKHRvdGFsX21pY3Jvc2Vjb25kcyk7Ci0gICAgUHlfREVDUkVGKG9uZV9taWxsaW9uKTsKICAgICByZXR1cm4gdG90YWxfc2Vjb25kczsKIH0KIApAQCAtNDEzOCwzMSArNDE0Myw3MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm8pOwogfQogCi0vKiBSZXR1cm4gYmVzdCBwb3NzaWJsZSBsb2NhbCB0aW1lIC0tIHRoaXMgaXNuJ3QgY29uc3RyYWluZWQgYnkgdGhlCi0gKiBwcmVjaXNpb24gb2YgYSB0aW1lc3RhbXAuCi0gKi8KKy8qW2NsaW5pY10KK21vZHVsZSBkYXRldGltZQorCitAY2xhc3NtZXRob2QKK2RhdGV0aW1lLm5vdworCisgICAgdHo6IG9iamVjdCA9IE5vbmUKKyAgICAgICAgVGltZXpvbmUgb2JqZWN0LgorCitSZXR1cm5zIG5ldyBkYXRldGltZSBvYmplY3QgcmVwcmVzZW50aW5nIGN1cnJlbnQgdGltZSBsb2NhbCB0byB0ei4KKworSWYgbm8gdHogaXMgc3BlY2lmaWVkLCB1c2VzIGxvY2FsIHRpbWV6b25lLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoZGF0ZXRpbWVfbm93X19kb2NfXywKKyJSZXR1cm5zIG5ldyBkYXRldGltZSBvYmplY3QgcmVwcmVzZW50aW5nIGN1cnJlbnQgdGltZSBsb2NhbCB0byB0ei5cbiIKKyJcbiIKKyJkYXRldGltZS5ub3codHo9Tm9uZSlcbiIKKyIgIHR6XG4iCisiICAgIFRpbWV6b25lIG9iamVjdC5cbiIKKyJcbiIKKyJJZiBubyB0eiBpcyBzcGVjaWZpZWQsIHVzZXMgbG9jYWwgdGltZXpvbmUuIik7CisKKyNkZWZpbmUgREFURVRJTUVfTk9XX01FVEhPRERFRiAgICBcCisgICAgeyJub3ciLCAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfbm93LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU3xNRVRIX0NMQVNTLCBkYXRldGltZV9ub3dfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWRhdGV0aW1lX25vdyhQeU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQorZGF0ZXRpbWVfbm93X2ltcGwoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKnR6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RhdGV0aW1lX25vdyhQeU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CisgICAgUHlPYmplY3QgKnR6ID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgInxPOm5vdyIsIF9rZXl3b3JkcywKKyAgICAgICAgJnR6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRhdGV0aW1lX25vd19pbXBsKGNscywgdHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYXRldGltZV9ub3dfaW1wbChQeU9iamVjdCAqY2xzLCBQeU9iamVjdCAqdHopCisvKltjbGluaWMgY2hlY2tzdW06IDMyOGI1NDM4N2Y0YzJmOGNiNTM0OTk3ZTFiZDU1ZjhjYjM4YzQ5OTJdKi8KIHsKICAgICBQeU9iamVjdCAqc2VsZjsKLSAgICBQeU9iamVjdCAqdHppbmZvID0gUHlfTm9uZTsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsidHoiLCBOVUxMfTsKIAotICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPOm5vdyIsIGtleXdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHppbmZvKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGNoZWNrX3R6aW5mb19zdWJjbGFzcyh0emluZm8pIDwgMCkKKyAgICAvKiBSZXR1cm4gYmVzdCBwb3NzaWJsZSBsb2NhbCB0aW1lIC0tIHRoaXMgaXNuJ3QgY29uc3RyYWluZWQgYnkgdGhlCisgICAgICogcHJlY2lzaW9uIG9mIGEgdGltZXN0YW1wLgorICAgICAqLworICAgIGlmIChjaGVja190emluZm9fc3ViY2xhc3ModHopIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBzZWxmID0gZGF0ZXRpbWVfYmVzdF9wb3NzaWJsZShjbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvID09IFB5X05vbmUgPyBsb2NhbHRpbWUgOiBnbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvKTsKLSAgICBpZiAoc2VsZiAhPSBOVUxMICYmIHR6aW5mbyAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHogPT0gUHlfTm9uZSA/IGxvY2FsdGltZSA6IGdtdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eik7CisgICAgaWYgKHNlbGYgIT0gTlVMTCAmJiB0eiAhPSBQeV9Ob25lKSB7CiAgICAgICAgIC8qIENvbnZlcnQgVVRDIHRvIHR6aW5mbydzIHpvbmUuICovCiAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gc2VsZjsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CiAKLSAgICAgICAgc2VsZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodHppbmZvLCAmUHlJZF9mcm9tdXRjLCAiTyIsIHNlbGYpOworICAgICAgICBzZWxmID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0eiwgJlB5SWRfZnJvbXV0YywgIk8iLCBzZWxmKTsKICAgICAgICAgUHlfREVDUkVGKHRlbXApOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKQEAgLTQ3NDksNyArNDc5Niw3IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICByZXN1bHQgPSBuZXdfdGltZXpvbmUoZGVsdGEsIG5hbWVvKTsKLSAgICBQeV9ERUNSRUYobmFtZW8pOworICAgIFB5X1hERUNSRUYobmFtZW8pOwogICBlcnJvcjoKICAgICBQeV9ERUNSRUYoZGVsdGEpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00ODczLDkgKzQ5MjAsMTYgQEAKICAgICAgICAgdGltZS50bV93ZGF5ID0gLTE7CiAgICAgICAgIHRpbWUudG1faXNkc3QgPSAtMTsKICAgICAgICAgdGltZXN0YW1wID0gbWt0aW1lKCZ0aW1lKTsKLSAgICAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dCB0bV93ZGF5Ci0gICAgICAgICAqIGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCi0gICAgICAgIGlmICh0aW1lc3RhbXAgPT0gKHRpbWVfdCkoLTEpICYmIHRpbWUudG1fd2RheSA9PSAtMSkgeworICAgICAgICBpZiAodGltZXN0YW1wID09ICh0aW1lX3QpKC0xKQorI2lmbmRlZiBfQUlYCisgICAgICAgICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwKKyAgICAgICAgICAgICAqIGJ1dCB0bV93ZGF5IGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCisgICAgICAgICAgICAmJiB0aW1lLnRtX3dkYXkgPT0gLTEKKyNlbHNlCisgICAgICAgICAgICAvKiBvbiBBSVgsIHRtX3dkYXkgaXMgYWx3YXlzIHNldHMsIGV2ZW4gb24gZXJyb3IgKi8KKyNlbmRpZgorICAgICAgICAgICkKKyAgICAgICAgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDk4OSw5ICs1MDQzLDcgQEAKIAogICAgIC8qIENsYXNzIG1ldGhvZHM6ICovCiAKLSAgICB7Im5vdyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX25vdywKLSAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUyB8IE1FVEhfQ0xBU1MsCi0gICAgIFB5RG9jX1NUUigiW3R6XSAtPiBuZXcgZGF0ZXRpbWUgd2l0aCB0eidzIGxvY2FsIGRheSBhbmQgdGltZS4iKX0sCisgICAgREFURVRJTUVfTk9XX01FVEhPRERFRgogCiAgICAgeyJ1dGNub3ciLCAgICAgICAgIChQeUNGdW5jdGlvbilkYXRldGltZV91dGNub3csCiAgICAgIE1FVEhfTk9BUkdTIHwgTUVUSF9DTEFTUywKQEAgLTUyOTksOCArNTM1MSw4IEBACiAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNSU5ZRUFSIiwgTUlOWUVBUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1BWFlFQVIiLCBNQVhZRUFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNSU5ZRUFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNQVhZRUFSKTsKIAogICAgIFB5X0lOQ1JFRigmUHlEYXRlVGltZV9EYXRlVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJkYXRlIiwgKFB5T2JqZWN0ICopICZQeURhdGVUaW1lX0RhdGVUeXBlKTsKQEAgLTUzNDQsMTIgKzUzOTYsMTIgQEAKICAgICBhc3NlcnQoREkxMDBZID09IDI1ICogREk0WSAtIDEpOwogICAgIGFzc2VydChESTEwMFkgPT0gZGF5c19iZWZvcmVfeWVhcigxMDArMSkpOwogCi0gICAgdXNfcGVyX3VzID0gUHlMb25nX0Zyb21Mb25nKDEpOworICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxKTsKICAgICB1c19wZXJfbXMgPSBQeUxvbmdfRnJvbUxvbmcoMTAwMCk7CiAgICAgdXNfcGVyX3NlY29uZCA9IFB5TG9uZ19Gcm9tTG9uZygxMDAwMDAwKTsKICAgICB1c19wZXJfbWludXRlID0gUHlMb25nX0Zyb21Mb25nKDYwMDAwMDAwKTsKICAgICBzZWNvbmRzX3Blcl9kYXkgPSBQeUxvbmdfRnJvbUxvbmcoMjQgKiAzNjAwKTsKLSAgICBpZiAodXNfcGVyX3VzID09IE5VTEwgfHwgdXNfcGVyX21zID09IE5VTEwgfHwgdXNfcGVyX3NlY29uZCA9PSBOVUxMIHx8CisgICAgaWYgKG9uZSA9PSBOVUxMIHx8IHVzX3Blcl9tcyA9PSBOVUxMIHx8IHVzX3Blcl9zZWNvbmQgPT0gTlVMTCB8fAogICAgICAgICB1c19wZXJfbWludXRlID09IE5VTEwgfHwgc2Vjb25kc19wZXJfZGF5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kYm1tb2R1bGUuYyBiL01vZHVsZXMvX2RibW1vZHVsZS5jCmluZGV4IDgzYzA1MWMuLjYwODAyYjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RibW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2RibW1vZHVsZS5jCkBAIC0xNCwxMSArMTQsNyBAQAogICovCiAjaWYgZGVmaW5lZChIQVZFX05EQk1fSCkKICNpbmNsdWRlIDxuZGJtLmg+Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi1zdGF0aWMgY2hhciAqd2hpY2hfZGJtID0gIm5kYm0iOwotI2Vsc2UKIHN0YXRpYyBjaGFyICp3aGljaF9kYm0gPSAiR05VIGdkYm0iOyAgLyogRU1YIHBvcnQgb2YgR0RCTSAqLwotI2VuZGlmCiAjZWxpZiBkZWZpbmVkKEhBVkVfR0RCTV9OREJNX0gpCiAjaW5jbHVkZSA8Z2RibS9uZGJtLmg+CiBzdGF0aWMgY2hhciAqd2hpY2hfZGJtID0gIkdOVSBnZGJtIjsKQEAgLTQ4LDcgKzQ0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqRGJtRXJyb3I7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1uZXdkYm1vYmplY3QoY2hhciAqZmlsZSwgaW50IGZsYWdzLCBpbnQgbW9kZSkKK25ld2RibW9iamVjdChjb25zdCBjaGFyICpmaWxlLCBpbnQgZmxhZ3MsIGludCBtb2RlKQogewogICAgIGRibW9iamVjdCAqZHA7CiAKQEAgLTY3LDcgKzYzLDcgQEAKIC8qIE1ldGhvZHMgKi8KIAogc3RhdGljIHZvaWQKLWRibV9kZWFsbG9jKHJlZ2lzdGVyIGRibW9iamVjdCAqZHApCitkYm1fZGVhbGxvYyhkYm1vYmplY3QgKmRwKQogewogICAgIGlmICggZHAtPmRpX2RibSApCiAgICAgICAgIGRibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTk1LDcgKzkxLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBkYXR1bSBkcmVjLCBrcmVjOwogICAgIFB5X3NzaXplX3QgdG1wX3NpemU7CkBAIC0xNzAsNyArMTY2LDcgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fX2Nsb3NlKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fX2Nsb3NlKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAgICAgaWYgKGRwLT5kaV9kYm0pCiAgICAgICAgIGRibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTE4MCw5ICsxNzYsOSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2tleXMocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9rZXlzKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnYsICppdGVtOworICAgIFB5T2JqZWN0ICp2LCAqaXRlbTsKICAgICBkYXR1bSBrZXk7CiAgICAgaW50IGVycjsKIApAQCAtMjUzLDcgKzI0OSw3IEBACiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2dldChyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKK2RibV9nZXQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgZGF0dW0ga2V5LCB2YWw7CiAgICAgUHlPYmplY3QgKmRlZnZhbHVlID0gUHlfTm9uZTsKQEAgLTI3Niw3ICsyNzIsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3NldGRlZmF1bHQocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCitkYm1fc2V0ZGVmYXVsdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBkYXR1bSBrZXksIHZhbDsKICAgICBQeU9iamVjdCAqZGVmdmFsdWUgPSBOVUxMOwpAQCAtMzY1LDE2ICszNjEsNjkgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLypbY2xpbmljXQorbW9kdWxlIGRibQorCitkYm0ub3BlbiBhcyBkYm1vcGVuCisKKyAgICBmaWxlbmFtZTogc3RyCisgICAgICAgIFRoZSBmaWxlbmFtZSB0byBvcGVuLgorCisgICAgZmxhZ3M6IHN0cj0iciIKKyAgICAgICAgSG93IHRvIG9wZW4gdGhlIGZpbGUuICAiciIgZm9yIHJlYWRpbmcsICJ3IiBmb3Igd3JpdGluZywgZXRjLgorCisgICAgbW9kZTogaW50KGRvY19kZWZhdWx0PSIwbzY2NiIpID0gMG82NjYKKyAgICAgICAgSWYgY3JlYXRpbmcgYSBuZXcgZmlsZSwgdGhlIG1vZGUgYml0cyBmb3IgdGhlIG5ldyBmaWxlCisgICAgICAgIChlLmcuIG9zLk9fUkRXUikuCisKKyAgICAvCisKK1JldHVybiBhIGRhdGFiYXNlIG9iamVjdC4KKworW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoZGJtb3Blbl9fZG9jX18sCisiUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LlxuIgorIlxuIgorImRibS5vcGVuKGZpbGVuYW1lLCBmbGFncz1cJ3JcJywgbW9kZT0wbzY2NilcbiIKKyIgIGZpbGVuYW1lXG4iCisiICAgIFRoZSBmaWxlbmFtZSB0byBvcGVuLlxuIgorIiAgZmxhZ3NcbiIKKyIgICAgSG93IHRvIG9wZW4gdGhlIGZpbGUuICBcInJcIiBmb3IgcmVhZGluZywgXCJ3XCIgZm9yIHdyaXRpbmcsIGV0Yy5cbiIKKyIgIG1vZGVcbiIKKyIgICAgSWYgY3JlYXRpbmcgYSBuZXcgZmlsZSwgdGhlIG1vZGUgYml0cyBmb3IgdGhlIG5ldyBmaWxlXG4iCisiICAgIChlLmcuIG9zLk9fUkRXUikuIik7CisKKyNkZWZpbmUgREJNT1BFTl9NRVRIT0RERUYgICAgXAorICAgIHsib3BlbiIsIChQeUNGdW5jdGlvbilkYm1vcGVuLCBNRVRIX1ZBUkFSR1MsIGRibW9wZW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2RibW9wZW5faW1wbChQeU9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZsYWdzLCBpbnQgbW9kZSk7CisKIHN0YXRpYyBQeU9iamVjdCAqCiBkYm1vcGVuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBjaGFyICpuYW1lOwotICAgIGNoYXIgKmZsYWdzID0gInIiOwotICAgIGludCBpZmxhZ3M7Ci0gICAgaW50IG1vZGUgPSAwNjY2OworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworICAgIGNvbnN0IGNoYXIgKmZsYWdzID0gInIiOworICAgIGludCBtb2RlID0gNDM4OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3xzaTpvcGVuIiwgJm5hbWUsICZmbGFncywgJm1vZGUpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJzfHNpOm9wZW4iLAorICAgICAgICAmZmlsZW5hbWUsICZmbGFncywgJm1vZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGJtb3Blbl9pbXBsKHNlbGYsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibW9wZW5faW1wbChQeU9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZsYWdzLCBpbnQgbW9kZSkKKy8qW2NsaW5pYyBjaGVja3N1bTogNjEwMDdjNzk2ZDM4YWY4NWM4MDM1YWZhNzY5ZmI0YmI0NTM0MjllZV0qLworeworICAgIGludCBpZmxhZ3M7CisKICAgICBpZiAoIHN0cmNtcChmbGFncywgInIiKSA9PSAwICkKICAgICAgICAgaWZsYWdzID0gT19SRE9OTFk7CiAgICAgZWxzZSBpZiAoIHN0cmNtcChmbGFncywgInciKSA9PSAwICkKQEAgLTM5MCwxMyArNDM5LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnIDIgdG8gb3BlbiBzaG91bGQgYmUgJ3InLCAndycsICdjJywgb3IgJ24nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gbmV3ZGJtb2JqZWN0KG5hbWUsIGlmbGFncywgbW9kZSk7CisgICAgcmV0dXJuIG5ld2RibW9iamVjdChmaWxlbmFtZSwgaWZsYWdzLCBtb2RlKTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGRibW1vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAgeyAib3BlbiIsIChQeUNGdW5jdGlvbilkYm1vcGVuLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAib3BlbihwYXRoWywgZmxhZ1ssIG1vZGVdXSkgLT4gbWFwcGluZ1xuIgotICAgICAgIlJldHVybiBhIGRhdGFiYXNlIG9iamVjdC4ifSwKKyAgICBEQk1PUEVOX01FVEhPRERFRgogICAgIHsgMCwgMCB9LAogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jIGIvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jCmluZGV4IGQzZTM5NDAuLjZmOWU5ZGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RlY2ltYWwvX2RlY2ltYWwuYworKysgYi9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMKQEAgLTMwMDksMTggKzMwMDksMjUgQEAKICAgICAgICAgICAgICp3Y21wID0gUHlfTm90SW1wbGVtZW50ZWQ7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZSh3LCBSYXRpb25hbCkpIHsKLSAgICAgICAgKndjbXAgPSBudW1lcmF0b3JfYXNfZGVjaW1hbCh3LCBjb250ZXh0KTsKLSAgICAgICAgaWYgKCp3Y21wICYmICFtcGRfaXNzcGVjaWFsKE1QRCh2KSkpIHsKLSAgICAgICAgICAgICp2Y21wID0gbXVsdGlwbHlfYnlfZGVub21pbmF0b3IodiwgdywgY29udGV4dCk7Ci0gICAgICAgICAgICBpZiAoKnZjbXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0NMRUFSKCp3Y21wKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaW50IGlzX2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZSh3LCBSYXRpb25hbCk7CisgICAgICAgIGlmIChpc19pbnN0YW5jZSA8IDApIHsKKyAgICAgICAgICAgICp3Y21wID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChpc19pbnN0YW5jZSkgeworICAgICAgICAgICAgKndjbXAgPSBudW1lcmF0b3JfYXNfZGVjaW1hbCh3LCBjb250ZXh0KTsKKyAgICAgICAgICAgIGlmICgqd2NtcCAmJiAhbXBkX2lzc3BlY2lhbChNUEQodikpKSB7CisgICAgICAgICAgICAgICAgKnZjbXAgPSBtdWx0aXBseV9ieV9kZW5vbWluYXRvcih2LCB3LCBjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoKnZjbXAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9DTEVBUigqd2NtcCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOwotICAgICAgICAqd2NtcCA9IFB5X05vdEltcGxlbWVudGVkOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7CisgICAgICAgICAgICAqd2NtcCA9IFB5X05vdEltcGxlbWVudGVkOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCp3Y21wID09IE5VTEwgfHwgKndjbXAgPT0gUHlfTm90SW1wbGVtZW50ZWQpIHsKQEAgLTMxODAsNiArMzE4Nyw3IEBACiAgICAgICAgICAgICByZXBsYWNlX2ZpbGxjaGFyID0gMTsKICAgICAgICAgICAgIGZtdCA9IGRlY19zdHJkdXAoZm10LCBzaXplKTsKICAgICAgICAgICAgIGlmIChmbXQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmbXRbMF0gPSAnXyc7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jIGIvTW9kdWxlcy9fZWxlbWVudHRyZWUuYwppbmRleCA5YmRjNGM3Li5jYjcwNjlkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCisrKyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKQEAgLTEsNjMgKzEsMjIgQEAKLS8qCi0gKiBFbGVtZW50VHJlZQotICogJElkOiBfZWxlbWVudHRyZWUuYyAzNDczIDIwMDktMDEtMTEgMjI6NTM6NTVaIGZyZWRyaWsgJAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorICogU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCiAgKgotICogZWxlbWVudHRyZWUgYWNjZWxlcmF0b3IKLSAqCi0gKiBIaXN0b3J5OgotICogMTk5OS0wNi0yMCBmbCAgY3JlYXRlZCAoYXMgcGFydCBvZiBzZ21sb3ApCi0gKiAyMDAxLTA1LTI5IGZsICBlZmZkb20gZWRpdGlvbgotICogMjAwMy0wMi0yNyBmbCAgZWxlbWVudHRyZWUgZWRpdGlvbiAoYWxwaGEpCi0gKiAyMDA0LTA2LTAzIGZsICB1cGRhdGVzIGZvciBlbGVtZW50dHJlZSAxLjIKLSAqIDIwMDUtMDEtMDUgZmwgIG1ham9yIG9wdGltaXphdGlvbiBlZmZvcnQKLSAqIDIwMDUtMDEtMTEgZmwgIGZpcnN0IHB1YmxpYyByZWxlYXNlIChjRWxlbWVudFRyZWUgMC44KQotICogMjAwNS0wMS0xMiBmbCAgc3BsaXQgZWxlbWVudCBvYmplY3QgaW50byBiYXNlIGFuZCBleHRyYXMKLSAqIDIwMDUtMDEtMTMgZmwgIHVzZSB0YWdnZWQgcG9pbnRlcnMgZm9yIHRhaWwvdGV4dCAoY0VsZW1lbnRUcmVlIDAuOSkKLSAqIDIwMDUtMDEtMTcgZmwgIGFkZGVkIHRyZWVidWlsZGVyIGNsb3NlIG1ldGhvZAotICogMjAwNS0wMS0xNyBmbCAgZml4ZWQgY3Jhc2ggaW4gZ2V0Y2hpbGRyZW4KLSAqIDIwMDUtMDEtMTggZmwgIHJlbW92ZWQgb2JzZXJ2ZXIgYXBpLCBhZGRlZCBpdGVycGFyc2UgKGNFbGVtZW50VHJlZSAwLjkuMykKLSAqIDIwMDUtMDEtMjMgZmwgIHJldmlzZWQgaXRlcnBhcnNlIGFwaTsgYWRkZWQgbmFtZXNwYWNlIGV2ZW50IHN1cHBvcnQgKDAuOS44KQotICogMjAwNS0wMS0yNiBmbCAgYWRkZWQgVkVSU0lPTiBtb2R1bGUgcHJvcGVydHkgKGNFbGVtZW50VHJlZSAxLjApCi0gKiAyMDA1LTAxLTI4IGZsICBhZGRlZCByZW1vdmUgbWV0aG9kICgxLjAuMSkKLSAqIDIwMDUtMDMtMDEgZmwgIGFkZGVkIGlzZWxlbWVudCBmdW5jdGlvbjsgZml4ZWQgbWFrZWVsZW1lbnQgYWxpYXNpbmcgKDEuMC4yKQotICogMjAwNS0wMy0xMyBmbCAgZXhwb3J0IENvbW1lbnQgYW5kIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi9QSSBoZWxwZXJzCi0gKiAyMDA1LTAzLTI2IGZsICBhZGRlZCBDb21tZW50IGFuZCBQSSBzdXBwb3J0IHRvIFhNTFBhcnNlcgotICogMjAwNS0wMy0yNyBmbCAgZXZlbnQgb3B0aW1pemF0aW9uczsgY29tcGxhaW4gYWJvdXQgYm9ndXMgZXZlbnRzCi0gKiAyMDA1LTA4LTA4IGZsICBmaXhlZCByZWFkIGVycm9yIGhhbmRsaW5nIGluIHBhcnNlCi0gKiAyMDA1LTA4LTExIGZsICBhZGRlZCBydW50aW1lIHRlc3QgZm9yIGNvcHkgd29ya2Fyb3VuZCAoMS4wLjMpCi0gKiAyMDA1LTEyLTEzIGZsICBhZGRlZCBleHBhdF9jYXBpIHN1cHBvcnQgKGZvciB4bWwuZXRyZWUpICgxLjAuNCkKLSAqIDIwMDUtMTItMTYgZmwgIGFkZGVkIHN1cHBvcnQgZm9yIG5vbi1zdGFuZGFyZCBlbmNvZGluZ3MKLSAqIDIwMDYtMDMtMDggZmwgIGZpeGVkIGEgY291cGxlIG9mIHBvdGVudGlhbCBudWxsLXJlZnMgYW5kIGxlYWtzCi0gKiAyMDA2LTAzLTEyIGZsICBtZXJnZSBpbiAyLjUgc3NpemVfdCBjaGFuZ2VzCi0gKiAyMDA3LTA4LTI1IGZsICBjYWxsIGN1c3RvbSBidWlsZGVyJ3MgY2xvc2UgbWV0aG9kIGZyb20gWE1MUGFyc2VyCi0gKiAyMDA3LTA4LTMxIGZsICBhZGRlZCBpdGVyLCBleHRlbmQgZnJvbSBFVCAxLjMKLSAqIDIwMDctMDktMDEgZmwgIGZpeGVkIFBhcnNlRXJyb3IgZXhjZXB0aW9uLCBzZXRzbGljZSBzb3VyY2UgdHlwZSwgZXRjCi0gKiAyMDA3LTA5LTAzIGZsICBmaXhlZCBoYW5kbGluZyBvZiBuZWdhdGl2ZSBpbnNlcnQgaW5kZXhlcwotICogMjAwNy0wOS0wNCBmbCAgYWRkZWQgaXRlcnRleHQgZnJvbSBFVCAxLjMKLSAqIDIwMDctMDktMDYgZmwgIGFkZGVkIHBvc2l0aW9uIGF0dHJpYnV0ZSB0byBQYXJzZUVycm9yIGV4Y2VwdGlvbgotICogMjAwOC0wNi0wNiBmbCAgZGVsYXkgZXJyb3IgcmVwb3J0aW5nIGluIGl0ZXJwYXJzZSAoZnJvbSBIcnZvamUgTmlrc2ljKQotICoKKyAqIF9lbGVtZW50dHJlZSAtIEMgYWNjZWxlcmF0b3IgZm9yIHhtbC5ldHJlZS5FbGVtZW50VHJlZQogICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgYnkgRnJlZHJpayBMdW5kaC4KICAqCiAgKiBpbmZvQHB5dGhvbndhcmUuY29tCiAgKiBodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyogTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LiAqLwotLyogU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuICovCi0KICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAotI2RlZmluZSBWRVJTSU9OICIxLjAuNiIKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGNvbmZpZ3VyYXRpb24gKi8KIAotLyogTGVhdmUgZGVmaW5lZCB0byBpbmNsdWRlIHRoZSBleHBhdC1iYXNlZCBYTUxQYXJzZXIgdHlwZSAqLwotI2RlZmluZSBVU0VfRVhQQVQKLQogLyogQW4gZWxlbWVudCBjYW4gaG9sZCB0aGlzIG1hbnkgY2hpbGRyZW4gd2l0aG91dCBleHRyYSBtZW1vcnkKICAgIGFsbG9jYXRpb25zLiAqLwogI2RlZmluZSBTVEFUSUNfQ0hJTERSRU4gNApAQCAtMTE5LDEwICs3OCw1MSBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBYTUxQYXJzZXJfVHlwZTsKIAogCi0vKiBnbHVlIGZ1bmN0aW9ucyAoc2VlIHRoZSBpbml0IGZ1bmN0aW9uIGZvciBkZXRhaWxzKSAqLwotc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iajsKLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqOwotc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50cGF0aF9vYmo7CisvKiBQZXItbW9kdWxlIHN0YXRlOyBQRVAgMzEyMSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0ICpwYXJzZWVycm9yX29iajsKKyAgICBQeU9iamVjdCAqZGVlcGNvcHlfb2JqOworICAgIFB5T2JqZWN0ICplbGVtZW50cGF0aF9vYmo7Cit9IGVsZW1lbnR0cmVlc3RhdGU7CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZWxlbWVudHRyZWVtb2R1bGU7CisKKy8qIEdpdmVuIGEgbW9kdWxlIG9iamVjdCAoYXNzdW1lZCB0byBiZSBfZWxlbWVudHRyZWUpLCBnZXQgaXRzIHBlci1tb2R1bGUKKyAqIHN0YXRlLgorICovCisjZGVmaW5lIEVUX1NUQVRFKG1vZCkgKChlbGVtZW50dHJlZXN0YXRlICopIFB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCisKKy8qIEZpbmQgdGhlIG1vZHVsZSBpbnN0YW5jZSBpbXBvcnRlZCBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc3ViLWludGVycHJldGVyCisgKiBhbmQgZ2V0IGl0cyBzdGF0ZS4KKyAqLworI2RlZmluZSBFVF9TVEFURV9HTE9CQUwgXAorICAgICgoZWxlbWVudHRyZWVzdGF0ZSAqKSBQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJmVsZW1lbnR0cmVlbW9kdWxlKSkpCisKK3N0YXRpYyBpbnQKK2VsZW1lbnR0cmVlX2NsZWFyKFB5T2JqZWN0ICptKQoreworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEUobSk7CisgICAgUHlfQ0xFQVIoc3QtPnBhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeV9DTEVBUihzdC0+ZGVlcGNvcHlfb2JqKTsKKyAgICBQeV9DTEVBUihzdC0+ZWxlbWVudHBhdGhfb2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZWxlbWVudHRyZWVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEUobSk7CisgICAgUHlfVklTSVQoc3QtPnBhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeV9WSVNJVChzdC0+ZGVlcGNvcHlfb2JqKTsKKyAgICBQeV9WSVNJVChzdC0+ZWxlbWVudHBhdGhfb2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2VsZW1lbnR0cmVlX2ZyZWUodm9pZCAqbSkKK3sKKyAgICBlbGVtZW50dHJlZV9jbGVhcigoUHlPYmplY3QgKiltKTsKK30KIAogLyogaGVscGVycyAqLwogCkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogZGVlcGNvcHkoUHlPYmplY3QqIG9iamVjdCwgUHlPYmplY3QqIG1lbW8pCiB7CiAgICAgLyogZG8gYSBkZWVwIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdCAqLwotCiAgICAgUHlPYmplY3QqIGFyZ3M7CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAotICAgIGlmICghZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqKSB7CisgICAgaWYgKCFzdC0+ZGVlcGNvcHlfb2JqKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICJkZWVwY29weSBoZWxwZXIgbm90IGZvdW5kIgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgYXJncyA9IFB5VHVwbGVfUGFjaygyLCBvYmplY3QsIG1lbW8pOwogICAgIGlmICghYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChlbGVtZW50dHJlZV9kZWVwY29weV9vYmosIGFyZ3MpOworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3Qoc3QtPmRlZXBjb3B5X29iaiwgYXJncyk7CiAgICAgUHlfREVDUkVGKGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMjksOCArMjI5LDEwIEBACiBjcmVhdGVfZXh0cmEoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGF0dHJpYikKIHsKICAgICBzZWxmLT5leHRyYSA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoRWxlbWVudE9iamVjdEV4dHJhKSk7Ci0gICAgaWYgKCFzZWxmLT5leHRyYSkKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAoIWF0dHJpYikKICAgICAgICAgYXR0cmliID0gUHlfTm9uZTsKQEAgLTI4MywxMyArMjg1LDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc2VsZi0+ZXh0cmEgPSBOVUxMOwogCi0gICAgaWYgKGF0dHJpYiAhPSBQeV9Ob25lICYmICFpc19lbXB0eV9kaWN0KGF0dHJpYikpIHsKLSAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBhdHRyaWIpIDwgMCkgewotICAgICAgICAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBQeV9JTkNSRUYodGFnKTsKICAgICBzZWxmLT50YWcgPSB0YWc7CiAKQEAgLTMwMyw2ICsyOTgsMTQgQEAKIAogICAgIEFMTE9DKHNpemVvZihFbGVtZW50T2JqZWN0KSwgImNyZWF0ZSBlbGVtZW50Iik7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7CisKKyAgICBpZiAoYXR0cmliICE9IFB5X05vbmUgJiYgIWlzX2VtcHR5X2RpY3QoYXR0cmliKSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIGF0dHJpYikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiAoUHlPYmplY3QqKSBzZWxmOwogfQogCkBAIC0zNTgsNiArMzYxLDcgQEAKIAogICAgIFB5X0RFQ1JFRihhdHRyaWJfc3RyKTsKIAorICAgIC8qIGF0dHJpYiBjYW4gYmUgTlVMTCBpZiBQeURpY3RfTmV3IGZhaWxlZCAqLwogICAgIGlmIChhdHRyaWIpCiAgICAgICAgIGlmIChQeURpY3RfVXBkYXRlKGF0dHJpYiwga3dkcykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00MzMsOCArNDM3LDEwIEBACiAgICAgLyogbWFrZSBzdXJlIHNlbGYtPmNoaWxkcmVuIGNhbiBob2xkIHRoZSBnaXZlbiBudW1iZXIgb2YgZXh0cmEKICAgICAgICBlbGVtZW50cy4gIHNldCBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBpZiBhbGxvY2F0aW9uIGZhaWxlZCAqLwogCi0gICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgc2l6ZSA9IHNlbGYtPmV4dHJhLT5sZW5ndGggKyBleHRyYTsKIApAQCAtNTg2LDggKzU5Miw5IEBACiAgICAgfQogCiAgICAgZWxlbSA9IGNyZWF0ZV9uZXdfZWxlbWVudCh0YWcsIGF0dHJpYik7Ci0KICAgICBQeV9ERUNSRUYoYXR0cmliKTsKKyAgICBpZiAoZWxlbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChlbGVtZW50X2FkZF9zdWJlbGVtZW50KHBhcmVudCwgZWxlbSkgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihlbGVtKTsKQEAgLTEwNzksNiArMTA4Niw3IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86ZmluZCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCkBAIC0xMDg3LDcgKzEwOTUsNyBAQAogICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpIHsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZmluZCk7CiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCisgICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogICAgIH0KIApAQCAtMTExNSw2ICsxMTIzLDcgQEAKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgX1B5X0lERU5USUZJRVIoZmluZHRleHQpOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJkZWZhdWx0IiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9POmZpbmR0ZXh0Iiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZkZWZhdWx0X3ZhbHVlLCAmbmFtZXNwYWNlcykpCkBAIC0xMTIyLDcgKzExMzEsNyBAQAogCiAgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmR0ZXh0LCAiT09PTyIsIHNlbGYsIHRhZywgZGVmYXVsdF92YWx1ZSwgbmFtZXNwYWNlcworICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZHRleHQsICJPT09PIiwgc2VsZiwgdGFnLCBkZWZhdWx0X3ZhbHVlLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSkgewpAQCAtMTE1NCw2ICsxMTYzLDcgQEAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpmaW5kYWxsIiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKQEAgLTExNjIsNyArMTE3Miw3IEBACiAgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkgewogICAgICAgICBfUHlfSURFTlRJRklFUihmaW5kYWxsKTsKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmRhbGwsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKKyAgICAgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmRhbGwsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAgICAgfQogCkBAIC0xMTk0LDEzICsxMjA0LDE0IEBACiAgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwogICAgIF9QeV9JREVOVElGSUVSKGl0ZXJmaW5kKTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzppdGVyZmluZCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfaXRlcmZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKKyAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfaXRlcmZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKICAgICAgICAgKTsKIH0KIApAQCAtMTMxMiw4ICsxMzIzLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZFbGVtZW50X1R5cGUsICZlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgaW5kZXggKz0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKQEAgLTE0NTQsOCArMTQ2NywxMCBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086c2V0IiwgJmtleSwgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGF0dHJpYiA9IGVsZW1lbnRfZ2V0X2F0dHJpYihzZWxmKTsKICAgICBpZiAoIWF0dHJpYikKQEAgLTE1NzAsOCArMTU4NSwxMCBAQAogICAgICAgICBQeU9iamVjdCogcmVjeWNsZSA9IE5VTEw7CiAgICAgICAgIFB5T2JqZWN0KiBzZXEgPSBOVUxMOwogCi0gICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeChpdGVtLAogICAgICAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGgsCkBAIC0xNzg2LDcgKzE4MDMsNyBAQAogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0ZXh0IikgPT0gMCkgewogICAgICAgICByZXMgPSBlbGVtZW50X2dldF90ZXh0KHNlbGYpOwotICAgICAgICBQeV9JTkNSRUYocmVzKTsKKyAgICAgICAgUHlfWElOQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KIApAQCAtMTgwMSw4ICsxODE4LDEwIEBACiAgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X3RhaWwoc2VsZik7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImF0dHJpYiIpID09IDApIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfYXR0cmliKHNlbGYpOwogICAgIH0KIApAQCAtMTgxOSwxMCArMTgzOCwxMCBAQAogICAgIGNoYXIgKm5hbWUgPSAiIjsKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG5hbWVvYmopKQogICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lb2JqKTsKLQotICAgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICBpZiAobmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRhZyIpID09IDApIHsKKworICAgIGlmIChzdHJjbXAobmFtZSwgInRhZyIpID09IDApIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYtPnRhZyk7CiAgICAgICAgIHNlbGYtPnRhZyA9IHZhbHVlOwogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+dGFnKTsKQEAgLTE4MzUsOCArMTg1NCwxMCBAQAogICAgICAgICBzZWxmLT50YWlsID0gdmFsdWU7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT50YWlsKTsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiYXR0cmliIikgPT0gMCkgewotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHNlbGYtPmV4dHJhLT5hdHRyaWIpOwogICAgICAgICBzZWxmLT5leHRyYS0+YXR0cmliID0gdmFsdWU7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5leHRyYS0+YXR0cmliKTsKQEAgLTIxNTIsMTQgKzIxNzMsNiBAQAogICAgIGl0ID0gUHlPYmplY3RfR0NfTmV3KEVsZW1lbnRJdGVyT2JqZWN0LCAmRWxlbWVudEl0ZXJfVHlwZSk7CiAgICAgaWYgKCFpdCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCEoaXQtPnBhcmVudF9zdGFjayA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoUGFyZW50TG9jYXRvcikpKSkgewotICAgICAgICBQeU9iamVjdF9HQ19EZWwoaXQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpdC0+cGFyZW50X3N0YWNrLT5wYXJlbnQgPSBOVUxMOwotICAgIGl0LT5wYXJlbnRfc3RhY2stPmNoaWxkX2luZGV4ID0gMDsKLSAgICBpdC0+cGFyZW50X3N0YWNrLT5uZXh0ID0gTlVMTDsKIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodGFnKSkKICAgICAgICAgc3RhciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIqIik7CkBAIC0yMTY4LDE3ICsyMTgxLDI3IEBACiAKICAgICBpZiAoc3RhciAmJiBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodGFnLCBzdGFyLCBQeV9FUSkgPT0gMSkKICAgICAgICAgdGFnID0gUHlfTm9uZTsKLQogICAgIFB5X1hERUNSRUYoc3Rhcik7CisKKyAgICBQeV9JTkNSRUYodGFnKTsKICAgICBpdC0+c291Z2h0X3RhZyA9IHRhZzsKICAgICBpdC0+cm9vdF9kb25lID0gMDsKICAgICBpdC0+Z2V0dGV4dCA9IGdldHRleHQ7CisgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIGl0LT5yb290X2VsZW1lbnQgPSBzZWxmOwogCi0gICAgUHlfSU5DUkVGKHNlbGYpOwotICAgIFB5X0lOQ1JFRih0YWcpOwotCiAgICAgUHlPYmplY3RfR0NfVHJhY2soaXQpOworCisgICAgaXQtPnBhcmVudF9zdGFjayA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoUGFyZW50TG9jYXRvcikpOworICAgIGlmIChpdC0+cGFyZW50X3N0YWNrID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGl0KTsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGl0LT5wYXJlbnRfc3RhY2stPnBhcmVudCA9IE5VTEw7CisgICAgaXQtPnBhcmVudF9zdGFjay0+Y2hpbGRfaW5kZXggPSAwOworICAgIGl0LT5wYXJlbnRfc3RhY2stPm5leHQgPSBOVUxMOworCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0OwogfQogCkBAIC0yMzcxLDYgKzIzOTQsNyBAQAogewogICAgIFB5T2JqZWN0KiBub2RlOwogICAgIFB5T2JqZWN0KiB0aGlzOworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKHNlbGYtPmRhdGEpIHsKICAgICAgICAgaWYgKHNlbGYtPnRoaXMgPT0gc2VsZi0+bGFzdCkgewpAQCAtMjQwMSw3ICsyNDI1LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2VsZi0+cm9vdCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLAorICAgICAgICAgICAgICAgIHN0LT5wYXJzZWVycm9yX29iaiwKICAgICAgICAgICAgICAgICAibXVsdGlwbGUgZWxlbWVudHMgb24gdG9wIGxldmVsIgogICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjY4OCwxMCArMjcxMiwxMiBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIHRoZSBleHBhdCBpbnRlcmZhY2UgKi8KIAotI2lmIGRlZmluZWQoVVNFX0VYUEFUKQotCiAjaW5jbHVkZSAiZXhwYXQuaCIKICNpbmNsdWRlICJweWV4cGF0LmgiCisKKy8qIFRoZSBQeUV4cGF0X0NBUEkgc3RydWN0dXJlIGlzIGFuIGltbXV0YWJsZSBkaXNwYXRjaCB0YWJsZSwgc28gaXQgY2FuIGJlCisgKiBjYWNoZWQgZ2xvYmFsbHkgd2l0aG91dCBiZWluZyBpbiBwZXItbW9kdWxlIHN0YXRlLgorICovCiBzdGF0aWMgc3RydWN0IFB5RXhwYXRfQ0FQSSAqZXhwYXRfY2FwaTsKICNkZWZpbmUgRVhQQVQoZnVuYykgKGV4cGF0X2NhcGktPmZ1bmMpCiAKQEAgLTI3NTgsNiArMjc4NCwxMCBAQAogICAgICAgICBpZiAoaSAhPSBzaXplKSB7CiAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIHVuaXZlcnNhbCBuYW1lICovCiAgICAgICAgICAgICB0YWcgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUrMSk7CisgICAgICAgICAgICBpZiAodGFnID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh0YWcpOwogICAgICAgICAgICAgcFswXSA9ICd7JzsKICAgICAgICAgICAgIG1lbWNweShwKzEsIHN0cmluZywgc2l6ZSk7CkBAIC0yNzk3LDYgKzI4MjcsNyBAQAogZXhwYXRfc2V0X2Vycm9yKGVudW0gWE1MX0Vycm9yIGVycm9yX2NvZGUsIGludCBsaW5lLCBpbnQgY29sdW1uLCBjaGFyICptZXNzYWdlKQogewogICAgIFB5T2JqZWN0ICplcnJtc2csICplcnJvciwgKnBvc2l0aW9uLCAqY29kZTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGVycm1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlczogbGluZSAlZCwgY29sdW1uICVkIiwKICAgICAgICAgICAgICAgICBtZXNzYWdlID8gbWVzc2FnZSA6IEVYUEFUKEVycm9yU3RyaW5nKShlcnJvcl9jb2RlKSwKQEAgLTI4MDQsNyArMjgzNSw3IEBACiAgICAgaWYgKGVycm1zZyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKLSAgICBlcnJvciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwgIk8iLCBlcnJtc2cpOworICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHN0LT5wYXJzZWVycm9yX29iaiwgIk8iLCBlcnJtc2cpOwogICAgIFB5X0RFQ1JFRihlcnJtc2cpOwogICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybjsKQEAgLTI4MzQsNyArMjg2NSw3IEBACiAgICAgfQogICAgIFB5X0RFQ1JFRihwb3NpdGlvbik7CiAKLSAgICBQeUVycl9TZXRPYmplY3QoZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosIGVycm9yKTsKKyAgICBQeUVycl9TZXRPYmplY3Qoc3QtPnBhcnNlZXJyb3Jfb2JqLCBlcnJvcik7CiAgICAgUHlfREVDUkVGKGVycm9yKTsKIH0KIApAQCAtMjg1Miw2ICsyODgzLDkgQEAKICAgICBpZiAoZGF0YV9sZW4gPCAyIHx8IGRhdGFfaW5bMF0gIT0gJyYnKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAga2V5ID0gUHlVbmljb2RlX0RlY29kZVVURjgoZGF0YV9pbiArIDEsIGRhdGFfbGVuIC0gMiwgInN0cmljdCIpOwogICAgIGlmICgha2V5KQogICAgICAgICByZXR1cm47CkBAIC0yODkyLDYgKzI5MjYsOSBAQAogICAgIFB5T2JqZWN0KiBhdHRyaWI7CiAgICAgaW50IG9rOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8qIHRhZyBuYW1lICovCiAgICAgdGFnID0gbWFrZXVuaXZlcnNhbChzZWxmLCB0YWdfaW4pOwogICAgIGlmICghdGFnKQpAQCAtMjk1MCw2ICsyOTg3LDkgQEAKICAgICBQeU9iamVjdCogZGF0YTsKICAgICBQeU9iamVjdCogcmVzOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGRhdGEgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luLCBkYXRhX2xlbiwgInN0cmljdCIpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuOyAvKiBwYXJzZXIgd2lsbCBsb29rIGZvciBlcnJvcnMgKi8KQEAgLTI5NzMsNiArMzAxMyw5IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogcmVzID0gTlVMTDsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKQogICAgICAgICAvKiBzaG9ydGN1dCAqLwogICAgICAgICAvKiB0aGUgc3RhbmRhcmQgdHJlZSBidWlsZGVyIGRvZXNuJ3QgbG9vayBhdCB0aGUgZW5kIHRhZyAqLwpAQCAtMjk5Nyw2ICszMDQwLDkgQEAKICAgICBQeU9iamVjdCogc3ByZWZpeCA9IE5VTEw7CiAgICAgUHlPYmplY3QqIHN1cmkgPSBOVUxMOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIHN1cmkgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCh1cmksIHN0cmxlbih1cmkpLCAic3RyaWN0Iik7CiAgICAgaWYgKCFzdXJpKQogICAgICAgICByZXR1cm47CkBAIC0zMDIxLDYgKzMwNjcsOSBAQAogc3RhdGljIHZvaWQKIGV4cGF0X2VuZF9uc19oYW5kbGVyKFhNTFBhcnNlck9iamVjdCogc2VsZiwgY29uc3QgWE1MX0NoYXIqIHByZWZpeF9pbikKIHsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgdHJlZWJ1aWxkZXJfaGFuZGxlX25hbWVzcGFjZSgKICAgICAgICAgKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0LCAwLCBOVUxMLCBOVUxMCiAgICAgICAgICk7CkBAIC0zMDMyLDYgKzMwODEsOSBAQAogICAgIFB5T2JqZWN0KiBjb21tZW50OwogICAgIFB5T2JqZWN0KiByZXM7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNlbGYtPmhhbmRsZV9jb21tZW50KSB7CiAgICAgICAgIGNvbW1lbnQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChjb21tZW50X2luLCBzdHJsZW4oY29tbWVudF9pbiksICJzdHJpY3QiKTsKICAgICAgICAgaWYgKGNvbW1lbnQpIHsKQEAgLTMwNTQsNiArMzEwNiw5IEBACiAgICAgUHlPYmplY3QgKnBhcnNlcl9kb2N0eXBlID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBkb2N0eXBlX25hbWVfb2JqID0gbWFrZXVuaXZlcnNhbChzZWxmLCBkb2N0eXBlX25hbWUpOwogICAgIGlmICghZG9jdHlwZV9uYW1lX29iaikKICAgICAgICAgcmV0dXJuOwpAQCAtMzEyMiw2ICszMTc3LDkgQEAKICAgICBQeU9iamVjdCogZGF0YTsKICAgICBQeU9iamVjdCogcmVzOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChzZWxmLT5oYW5kbGVfcGkpIHsKICAgICAgICAgdGFyZ2V0ID0gUHlVbmljb2RlX0RlY29kZVVURjgodGFyZ2V0X2luLCBzdHJsZW4odGFyZ2V0X2luKSwgInN0cmljdCIpOwogICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RlY29kZVVURjgoZGF0YV9pbiwgc3RybGVuKGRhdGFfaW4pLCAic3RyaWN0Iik7CkBAIC0zMjk0LDYgKzMzNTIsNyBAQAogewogICAgIGludCBvazsKIAorICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CiAgICAgb2sgPSBFWFBBVChQYXJzZSkoc2VsZi0+cGFyc2VyLCBkYXRhLCBkYXRhX2xlbiwgZmluYWwpOwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCkBAIC0zMzI4LDExICszMzg3LDE0IEBACiAgICAgaWYgKFRyZWVCdWlsZGVyX0NoZWNrRXhhY3Qoc2VsZi0+dGFyZ2V0KSkgewogICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIHRyZWVidWlsZGVyX2RvbmUoKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0KTsKLSAgICB9IGlmIChzZWxmLT5oYW5kbGVfY2xvc2UpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoc2VsZi0+aGFuZGxlX2Nsb3NlKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPmhhbmRsZV9jbG9zZSwgIiIpOwotICAgIH0gZWxzZQorICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTMzNzAsMTAgKzM0MzIsOSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCi14bWxwYXJzZXJfcGFyc2UoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3htbHBhcnNlcl9wYXJzZV93aG9sZShYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewotICAgIC8qIChpbnRlcm5hbCkgcGFyc2UgdW50aWwgZW5kIG9mIGlucHV0IHN0cmVhbSAqLwotCisgICAgLyogKGludGVybmFsKSBwYXJzZSB0aGUgd2hvbGUgaW5wdXQsIHVudGlsIGVuZCBvZiBzdHJlYW0gKi8KICAgICBQeU9iamVjdCogcmVhZGVyOwogICAgIFB5T2JqZWN0KiBidWZmZXI7CiAgICAgUHlPYmplY3QqIHRlbXA7CkBAIC0zNDU0LDE0ICszNTE1LDE0IEBACiB4bWxwYXJzZXJfc2V0ZXZlbnRzKFhNTFBhcnNlck9iamVjdCAqc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgLyogYWN0aXZhdGUgZWxlbWVudCBldmVudCByZXBvcnRpbmcgKi8KKyAgICBQeV9zc2l6ZV90IGksIHNlcWxlbjsKKyAgICBUcmVlQnVpbGRlck9iamVjdCAqdGFyZ2V0OwogCi0gICAgUHlfc3NpemVfdCBpOwotICAgIFRyZWVCdWlsZGVyT2JqZWN0KiB0YXJnZXQ7Ci0KLSAgICBQeU9iamVjdCogZXZlbnRzOyAvKiBldmVudCBjb2xsZWN0b3IgKi8KLSAgICBQeU9iamVjdCogZXZlbnRfc2V0ID0gUHlfTm9uZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hfE86X3NldGV2ZW50cyIsICAmUHlMaXN0X1R5cGUsICZldmVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudF9zZXQpKQorICAgIFB5T2JqZWN0ICpldmVudHNfcXVldWU7CisgICAgUHlPYmplY3QgKmV2ZW50c190b19yZXBvcnQgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpldmVudHNfc2VxOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyF8Tzpfc2V0ZXZlbnRzIiwgICZQeUxpc3RfVHlwZSwgJmV2ZW50c19xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50c190b19yZXBvcnQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CkBAIC0zNDc1LDkgKzM1MzYsOSBAQAogCiAgICAgdGFyZ2V0ID0gKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0OwogCi0gICAgUHlfSU5DUkVGKGV2ZW50cyk7CisgICAgUHlfSU5DUkVGKGV2ZW50c19xdWV1ZSk7CiAgICAgUHlfWERFQ1JFRih0YXJnZXQtPmV2ZW50cyk7Ci0gICAgdGFyZ2V0LT5ldmVudHMgPSBldmVudHM7CisgICAgdGFyZ2V0LT5ldmVudHMgPSBldmVudHNfcXVldWU7CiAKICAgICAvKiBjbGVhciBvdXQgZXhpc3RpbmcgZXZlbnRzICovCiAgICAgUHlfQ0xFQVIodGFyZ2V0LT5zdGFydF9ldmVudF9vYmopOwpAQCAtMzQ4NSw3NSArMzU0Niw3MSBAQAogICAgIFB5X0NMRUFSKHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqKTsKICAgICBQeV9DTEVBUih0YXJnZXQtPmVuZF9uc19ldmVudF9vYmopOwogCi0gICAgaWYgKGV2ZW50X3NldCA9PSBQeV9Ob25lKSB7CisgICAgaWYgKGV2ZW50c190b19yZXBvcnQgPT0gUHlfTm9uZSkgewogICAgICAgICAvKiBkZWZhdWx0IGlzICJlbmQiIG9ubHkgKi8KICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImVuZCIpOwogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAKLSAgICBpZiAoIVB5VHVwbGVfQ2hlY2soZXZlbnRfc2V0KSkgLyogRklYTUU6IGhhbmRsZSBhcmJpdHJhcnkgc2VxdWVuY2VzICovCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCEoZXZlbnRzX3NlcSA9IFB5U2VxdWVuY2VfRmFzdChldmVudHNfdG9fcmVwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV2ZW50cyBtdXN0IGJlIGEgc2VxdWVuY2UiKSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUoZXZlbnRfc2V0KTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0KiBpdGVtID0gUHlUdXBsZV9HRVRfSVRFTShldmVudF9zZXQsIGkpOwotICAgICAgICBjaGFyKiBldmVudDsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhpdGVtKSkgewotICAgICAgICAgICAgZXZlbnQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGl0ZW0pOwotICAgICAgICAgICAgaWYgKGV2ZW50ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfSBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKGl0ZW0pKQotICAgICAgICAgICAgZXZlbnQgPSBQeUJ5dGVzX0FTX1NUUklORyhpdGVtKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfU2l6ZShldmVudHNfc2VxKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QgKmV2ZW50X25hbWVfb2JqID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKGV2ZW50c19zZXEsIGkpOworICAgICAgICBjaGFyICpldmVudF9uYW1lID0gTlVMTDsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhldmVudF9uYW1lX29iaikpIHsKKyAgICAgICAgICAgIGV2ZW50X25hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGV2ZW50X25hbWVfb2JqKTsKKyAgICAgICAgfSBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKGV2ZW50X25hbWVfb2JqKSkgeworICAgICAgICAgICAgZXZlbnRfbmFtZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RyY21wKGV2ZW50LCAic3RhcnQiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X2V2ZW50X29iaiA9IGl0ZW07Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50LCAiZW5kIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworCisgICAgICAgIGlmIChldmVudF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihldmVudHNfc2VxKTsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiaW52YWxpZCBldmVudHMgc2VxdWVuY2UiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAic3RhcnQiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOworICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgImVuZCIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRhcmdldC0+ZW5kX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPmVuZF9ldmVudF9vYmogPSBpdGVtOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudCwgInN0YXJ0LW5zIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJzdGFydC1ucyIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqKTsKLSAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqID0gaXRlbTsKKyAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CiAgICAgICAgICAgICBFWFBBVChTZXROYW1lc3BhY2VEZWNsSGFuZGxlcikoCiAgICAgICAgICAgICAgICAgc2VsZi0+cGFyc2VyLAogICAgICAgICAgICAgICAgIChYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfc3RhcnRfbnNfaGFuZGxlciwKICAgICAgICAgICAgICAgICAoWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9lbmRfbnNfaGFuZGxlcgogICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50LCAiZW5kLW5zIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAiZW5kLW5zIikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqKTsKLSAgICAgICAgICAgIHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaiA9IGl0ZW07CisgICAgICAgICAgICB0YXJnZXQtPmVuZF9uc19ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKICAgICAgICAgICAgIEVYUEFUKFNldE5hbWVzcGFjZURlY2xIYW5kbGVyKSgKICAgICAgICAgICAgICAgICBzZWxmLT5wYXJzZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9zdGFydF9uc19oYW5kbGVyLAogICAgICAgICAgICAgICAgIChYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X2VuZF9uc19oYW5kbGVyCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICJ1bmtub3duIGV2ZW50ICclcyciLCBldmVudAotICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gZXZlbnQgJyVzJyIsIGV2ZW50X25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CiAgICAgUHlfUkVUVVJOX05PTkU7Ci0KLSAgZXJyb3I6Ci0gICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICJpbnZhbGlkIGV2ZW50IHR1cGxlIgotICAgICAgICApOwotICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgeG1scGFyc2VyX21ldGhvZHNbXSA9IHsKICAgICB7ImZlZWQiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9mZWVkLCBNRVRIX099LAogICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9jbG9zZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Il9wYXJzZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX3BhcnNlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiX3BhcnNlX3dob2xlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfcGFyc2Vfd2hvbGUsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJfc2V0ZXZlbnRzIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfc2V0ZXZlbnRzLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZG9jdHlwZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX2RvY3R5cGUsIE1FVEhfVkFSQVJHU30sCiAgICAge05VTEwsIE5VTEx9CkBAIC0zNjI1LDggKzM2ODIsNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKLSNlbmRpZgotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogcHl0aG9uIG1vZHVsZSBpbnRlcmZhY2UgKi8KIApAQCAtMzYzNiwyMiArMzY5MSwyOSBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9lbGVtZW50dHJlZW1vZHVsZSA9IHsKLSAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICAgICAiX2VsZW1lbnR0cmVlIiwKLSAgICAgICAgTlVMTCwKLSAgICAgICAgLTEsCi0gICAgICAgIF9mdW5jdGlvbnMsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZWxlbWVudHRyZWVtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfZWxlbWVudHRyZWUiLAorICAgIE5VTEwsCisgICAgc2l6ZW9mKGVsZW1lbnR0cmVlc3RhdGUpLAorICAgIF9mdW5jdGlvbnMsCisgICAgTlVMTCwKKyAgICBlbGVtZW50dHJlZV90cmF2ZXJzZSwKKyAgICBlbGVtZW50dHJlZV9jbGVhciwKKyAgICBlbGVtZW50dHJlZV9mcmVlCiB9OwogCiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19lbGVtZW50dHJlZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptLCAqdGVtcDsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdDsKKworICAgIG0gPSBQeVN0YXRlX0ZpbmRNb2R1bGUoJmVsZW1lbnR0cmVlbW9kdWxlKTsKKyAgICBpZiAobSkgeworICAgICAgICBQeV9JTkNSRUYobSk7CisgICAgICAgIHJldHVybiBtOworICAgIH0KIAogICAgIC8qIEluaXRpYWxpemUgb2JqZWN0IHR5cGVzICovCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmRWxlbWVudEl0ZXJfVHlwZSkgPCAwKQpAQCAtMzY2MCwyMSArMzcyMiwyMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZFbGVtZW50X1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWYgZGVmaW5lZChVU0VfRVhQQVQpCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmWE1MUGFyc2VyX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKIAotICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9lbGVtZW50dHJlZW1vZHVsZSk7CisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmZWxlbWVudHRyZWVtb2R1bGUpOwogICAgIGlmICghbSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3QgPSBFVF9TVEFURShtKTsKIAogICAgIGlmICghKHRlbXAgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHkiKSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iaiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGVtcCwgImRlZXBjb3B5Iik7CisgICAgc3QtPmRlZXBjb3B5X29iaiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGVtcCwgImRlZXBjb3B5Iik7CiAgICAgUHlfWERFQ1JFRih0ZW1wKTsKIAotICAgIGlmICghKGVsZW1lbnRwYXRoX29iaiA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgieG1sLmV0cmVlLkVsZW1lbnRQYXRoIikpKQorICAgIGlmICghKHN0LT5lbGVtZW50cGF0aF9vYmogPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInhtbC5ldHJlZS5FbGVtZW50UGF0aCIpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBsaW5rIGFnYWluc3QgcHlleHBhdCAqLwpAQCAtMzY5NCwxMSArMzc1NSwxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiA9IFB5RXJyX05ld0V4Y2VwdGlvbigKKyAgICBzdC0+cGFyc2VlcnJvcl9vYmogPSBQeUVycl9OZXdFeGNlcHRpb24oCiAgICAgICAgICJ4bWwuZXRyZWUuRWxlbWVudFRyZWUuUGFyc2VFcnJvciIsIFB5RXhjX1N5bnRheEVycm9yLCBOVUxMCiAgICAgICAgICk7Ci0gICAgUHlfSU5DUkVGKGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqKTsKLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBhcnNlRXJyb3IiLCBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaik7CisgICAgUHlfSU5DUkVGKHN0LT5wYXJzZWVycm9yX29iaik7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQYXJzZUVycm9yIiwgc3QtPnBhcnNlZXJyb3Jfb2JqKTsKIAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmRWxlbWVudF9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkVsZW1lbnQiLCAoUHlPYmplY3QgKikmRWxlbWVudF9UeXBlKTsKQEAgLTM3MDYsMTAgKzM3NjcsOCBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmVHJlZUJ1aWxkZXJfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUcmVlQnVpbGRlciIsIChQeU9iamVjdCAqKSZUcmVlQnVpbGRlcl9UeXBlKTsKIAotI2lmIGRlZmluZWQoVVNFX0VYUEFUKQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmWE1MUGFyc2VyX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiWE1MUGFyc2VyIiwgKFB5T2JqZWN0ICopJlhNTFBhcnNlcl9UeXBlKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMgYi9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKaW5kZXggOGYwN2E4OS4uNTdiMWFjMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCisrKyBiL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwpAQCAtMTcsNyArMTcsNyBAQAogICAgb2YgZnJvemVuIG1vZHVsZXMgaW5zdGVhZCwgbGVmdCBkZWxpYmVyYXRlbHkgYmxhbmsgc28gYXMgdG8gYXZvaWQKICAgIHVuaW50ZW50aW9uYWwgaW1wb3J0IG9mIGEgc3RhbGUgdmVyc2lvbiBvZiBfZnJvemVuX2ltcG9ydGxpYi4gKi8KIAotc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7Citjb25zdCBzdGF0aWMgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKICAgICB7MCwgMCwgMH0gLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI1LDcgKzI1LDcgQEAKIC8qIE9uIFdpbmRvd3MsIHRoaXMgbGlua3Mgd2l0aCB0aGUgcmVndWxhciBweXRob25YWS5kbGwsIHNvIHRoaXMgdmFyaWFibGUgY29tZXMKICAgIGZyb20gZnJvemVuLm9iai4gSW4gdGhlIE1ha2VmaWxlLCBmcm96ZW4ubyBpcyBub3QgbGlua2VkIGludG8gdGhpcyBleGVjdXRhYmxlLAogICAgc28gd2UgZGVmaW5lIHRoZSB2YXJpYWJsZSBoZXJlLiAqLwotc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7Citjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKICNlbmRpZgogCiBjb25zdCBjaGFyIGhlYWRlcltdID0gIi8qIEF1dG8tZ2VuZXJhdGVkIGJ5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyAqLyI7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIGhlYWRlcik7Ci0gICAgZnByaW50ZihvdXRmaWxlLCAidW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7XG4iKTsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHtcbiIpOwogICAgIGZvciAobiA9IDA7IG4gPCBkYXRhX3NpemU7IG4gKz0gMTYpIHsKICAgICAgICAgc2l6ZV90IGksIGVuZCA9IFB5X01JTihuICsgMTYsIGRhdGFfc2l6ZSk7CiAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiAgICAiKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2dkYm1tb2R1bGUuYyBiL01vZHVsZXMvX2dkYm1tb2R1bGUuYwppbmRleCAwYmQ1OWM4Li4zNmMwNmQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCkBAIC03OSw3ICs3OSw3IEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi1kYm1fZGVhbGxvYyhyZWdpc3RlciBkYm1vYmplY3QgKmRwKQorZGJtX2RlYWxsb2MoZGJtb2JqZWN0ICpkcCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZ2RibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTExMiw3ICsxMTIsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQorZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqa2V5KQogewogICAgIFB5T2JqZWN0ICp2OwogICAgIGRhdHVtIGRyZWMsIGtyZWM7CkBAIC0yMzIsNyArMjMyLDcgQEAKIENsb3NlcyB0aGUgZGF0YWJhc2UuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fY2xvc2UocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9jbG9zZShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGlmIChkcC0+ZGlfZGJtKQogICAgICAgICBnZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtMjQ3LDkgKzI0Nyw5IEBACiBHZXQgYSBsaXN0IG9mIGFsbCBrZXlzIGluIHRoZSBkYXRhYmFzZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9rZXlzKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fa2V5cyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2LCAqaXRlbTsKKyAgICBQeU9iamVjdCAqdiwgKml0ZW07CiAgICAgZGF0dW0ga2V5LCBuZXh0a2V5OwogICAgIGludCBlcnI7CiAKQEAgLTMzNyw5ICszMzcsOSBAQAogcmV0dXJucyB0aGUgc3RhcnRpbmcga2V5LiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2ZpcnN0a2V5KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fZmlyc3RrZXkoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBrZXk7CiAKICAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CkBAIC0zNjcsOSArMzY3LDkgQEAKICAgICAgICAgICBrID0gZGIubmV4dGtleShrKSIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX25leHRrZXkocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCitkYm1fbmV4dGtleShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBrZXksIG5leHRrZXk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOm5leHRrZXkiLCAma2V5LmRwdHIsICZrZXkuZHNpemUpKQpAQCAtMzk2LDcgKzM5Niw3IEBACiBrZXB0IGFuZCByZXVzZWQgYXMgbmV3IChrZXksdmFsdWUpIHBhaXJzIGFyZSBhZGRlZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9yZW9yZ2FuaXplKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fcmVvcmdhbml6ZShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKICAgICBlcnJubyA9IDA7CkBAIC00MTcsNyArNDE3LDcgQEAKIGFueSB1bndyaXR0ZW4gZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBkaXNrLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N5bmMocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9zeW5jKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwogICAgIGdkYm1fc3luYyhkcC0+ZGlfZGJtKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2dlc3RhbHQuYyBiL01vZHVsZXMvX2dlc3RhbHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QzMDY4My4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19nZXN0YWx0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAxOTkxLTE5OTcgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLCBBbXN0ZXJkYW0sCi1UaGUgTmV0aGVybGFuZHMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKLUNlbnRydW0gb3IgQ1dJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLQotU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTwotVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEJFIExJQUJMRQotRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLVdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLU9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTWFjaW50b3NoIEdlc3RhbHQgaW50ZXJmYWNlICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KLQotLyogQ29udmVydCBhIDQtY2hhciBzdHJpbmcgb2JqZWN0IGFyZ3VtZW50IHRvIGFuIE9TVHlwZSB2YWx1ZSAqLwotc3RhdGljIGludAotY29udmVydF90b19PU1R5cGUoUHlPYmplY3QgKnYsIE9TVHlwZSAqcHIpCi17Ci0gICAgdWludDMyX3QgdG1wOwotICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHYpIHx8IFB5VW5pY29kZV9HZXRMZW5ndGgodikgIT0gNCkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJPU1R5cGUgYXJnIG11c3QgYmUgc3RyaW5nIG9mIDQgY2hhcnMiKTsKLSAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgbWVtY3B5KChjaGFyICopJnRtcCwgX1B5VW5pY29kZV9Bc1N0cmluZyh2KSwgNCk7Ci0gICAgKnByID0gKE9TVHlwZSludG9obCh0bXApOwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotZ2VzdGFsdF9nZXN0YWx0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBPU0VyciBpRXJyOwotICAgIE9TVHlwZSBzZWxlY3RvcjsKLSAgICBTSW50MzIgcmVzcG9uc2U7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJiIsIGNvbnZlcnRfdG9fT1NUeXBlLCAmc2VsZWN0b3IpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpRXJyID0gR2VzdGFsdChzZWxlY3RvciwgJnJlc3BvbnNlKTsKLSAgICBpZiAoaUVyciAhPSAwKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJub24temVybyBleGl0IGNvZGUhIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocmVzcG9uc2UpOwotfQotCi1zdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIGdlc3RhbHRfbWV0aG9kc1tdID0gewotICAgIHsiZ2VzdGFsdCIsIGdlc3RhbHRfZ2VzdGFsdCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7TlVMTCwgTlVMTH0gLyogU2VudGluZWwgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZ2VzdGFsdG1vZHVsZSA9IHsKLSAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgIl9nZXN0YWx0IiwKLSAgICBOVUxMLAotICAgIC0xLAotICAgIGdlc3RhbHRfbWV0aG9kcywKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMCi19OwotCi1QeU1PRElOSVRfRlVOQwotUHlJbml0X19nZXN0YWx0KHZvaWQpCi17Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmZ2VzdGFsdG1vZHVsZSk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19oYXNob3BlbnNzbC5jIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwppbmRleCAzYWIxYzBjLi44MGUxYjYxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCisrKyBiL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKQEAgLTE3LDM2ICsxNywxNiBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImhhc2hsaWIuaCIKIAotI2lmZGVmIFdJVEhfVEhSRUFECi0jaW5jbHVkZSAicHl0aHJlYWQuaCIKLSAgICAjZGVmaW5lIEVOVEVSX0hBU0hMSUIob2JqKSBcCi0gICAgICAgIGlmICgob2JqKS0+bG9jaykgeyBcCi0gICAgICAgICAgICBpZiAoIVB5VGhyZWFkX2FjcXVpcmVfbG9jaygob2JqKS0+bG9jaywgMCkpIHsgXAotICAgICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgXAotICAgICAgICAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jaygob2JqKS0+bG9jaywgMSk7IFwKLSAgICAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfQotICAgICNkZWZpbmUgTEVBVkVfSEFTSExJQihvYmopIFwKLSAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKLSAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jaygob2JqKS0+bG9jayk7IFwKLSAgICAgICAgfQotI2Vsc2UKLSAgICAjZGVmaW5lIEVOVEVSX0hBU0hMSUIob2JqKQotICAgICNkZWZpbmUgTEVBVkVfSEFTSExJQihvYmopCi0jZW5kaWYKIAogLyogRVZQIGlzIHRoZSBwcmVmZXJyZWQgaW50ZXJmYWNlIHRvIGhhc2hpbmcgaW4gT3BlblNTTCAqLwogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CiAvKiBXZSB1c2UgdGhlIG9iamVjdCBpbnRlcmZhY2UgdG8gZGlzY292ZXIgd2hhdCBoYXNoZXMgT3BlblNTTCBzdXBwb3J0cy4gKi8KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyNpbmNsdWRlICJvcGVuc3NsL2Vyci5oIgogCiAjZGVmaW5lIE1VTkNIX1NJWkUgSU5UX01BWAogCi0vKiBUT0RPKGdwcyk6IFdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgYSBtb2R1bGUgb3IgRVZQb2JqZWN0IGF0dHJpYnV0ZQotICogdG8gYWxsb3cgdGhlIHVzZXIgdG8gb3B0aW1pemUgYmFzZWQgb24gdGhlIHBsYXRmb3JtIHRoZXkncmUgdXNpbmcuICovCi0jZGVmaW5lIEhBU0hMSUJfR0lMX01JTlNJWkUgMjA0OAotCiAjaWZuZGVmIEhBU0hfT0JKX0NPTlNUUlVDVE9SCiAjZGVmaW5lIEhBU0hfT0JKX0NPTlNUUlVDVE9SIDAKICNlbmRpZgpAQCAtNDg5LDYgKzQ2OSwyMjYgQEAKIH0KIAogCisKKyNpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAwMDAwICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fSE1BQykgXAorICAgICAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkpCisKKyNkZWZpbmUgUFlfUEJLREYyX0hNQUMgMQorCisvKiBJbXByb3ZlZCBpbXBsZW1lbnRhdGlvbiBvZiBQS0NTNV9QQktERjJfSE1BQygpCisgKgorICogUEtDUzVfUEJLREYyX0hNQUNfZmFzdCgpIGhhc2hlcyB0aGUgcGFzc3dvcmQgZXhhY3RseSBvbmUgdGltZSBpbnN0ZWFkIG9mCisgKiBgaXRlcmAgdGltZXMuIFRvZGF5ICgyMDEzKSB0aGUgaXRlcmF0aW9uIGNvdW50IGlzIHR5cGljYWxseSAxMDAsMDAwIG9yCisgKiBtb3JlLiBUaGUgaW1wcm92ZWQgYWxnb3JpdGhtIGlzIG5vdCBzdWJqZWN0IHRvIGEgRGVuaWFsLW9mLVNlcnZpY2UKKyAqIHZ1bG5lcmFiaWxpdHkgd2l0aCBvdmVybHkgbGFyZ2UgcGFzc3dvcmRzLgorICoKKyAqIEFsc28gT3BlblNTTCA8IDEuMCBkb24ndCBwcm92aWRlIFBLQ1M1X1BCS0RGMl9ITUFDKCksIG9ubHkKKyAqIFBLQ1M1X1BCS0RGMl9TSEExLgorICovCitzdGF0aWMgaW50CitQS0NTNV9QQktERjJfSE1BQ19mYXN0KGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGl0ZXIsIGNvbnN0IEVWUF9NRCAqZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5bGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICAgdW5zaWduZWQgY2hhciBkaWd0bXBbRVZQX01BWF9NRF9TSVpFXSwgKnAsIGl0bXBbNF07CisgICAgaW50IGNwbGVuLCBqLCBrLCB0a2V5bGVuLCBtZGxlbjsKKyAgICB1bnNpZ25lZCBsb25nIGkgPSAxOworICAgIEhNQUNfQ1RYIGhjdHhfdHBsLCBoY3R4OworCisgICAgbWRsZW4gPSBFVlBfTURfc2l6ZShkaWdlc3QpOworICAgIGlmIChtZGxlbiA8IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgSE1BQ19DVFhfaW5pdCgmaGN0eF90cGwpOworICAgIEhNQUNfQ1RYX2luaXQoJmhjdHgpOworICAgIHAgPSBvdXQ7CisgICAgdGtleWxlbiA9IGtleWxlbjsKKyAgICBpZiAoIXBhc3MpCisgICAgICAgIHBhc3NsZW4gPSAwOworICAgIGVsc2UgaWYocGFzc2xlbiA9PSAtMSkKKyAgICAgICAgcGFzc2xlbiA9IHN0cmxlbihwYXNzKTsKKyAgICBpZiAoIUhNQUNfSW5pdF9leCgmaGN0eF90cGwsIHBhc3MsIHBhc3NsZW4sIGRpZ2VzdCwgTlVMTCkpIHsKKyAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgd2hpbGUodGtleWxlbikgeworICAgICAgICBpZih0a2V5bGVuID4gbWRsZW4pCisgICAgICAgICAgICBjcGxlbiA9IG1kbGVuOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjcGxlbiA9IHRrZXlsZW47CisgICAgICAgIC8qIFdlIGFyZSB1bmxpa2VseSB0byBldmVyIHVzZSBtb3JlIHRoYW4gMjU2IGJsb2NrcyAoNTEyMCBiaXRzISkKKyAgICAgICAgICogYnV0IGp1c3QgaW4gY2FzZS4uLgorICAgICAgICAgKi8KKyAgICAgICAgaXRtcFswXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgaXRtcFsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgaXRtcFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiA4KSAmIDB4ZmYpOworICAgICAgICBpdG1wWzNdID0gKHVuc2lnbmVkIGNoYXIpKGkgJiAweGZmKTsKKyAgICAgICAgaWYgKCFITUFDX0NUWF9jb3B5KCZoY3R4LCAmaGN0eF90cGwpKSB7CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUhNQUNfVXBkYXRlKCZoY3R4LCBzYWx0LCBzYWx0bGVuKQorICAgICAgICAgICAgICAgIHx8ICFITUFDX1VwZGF0ZSgmaGN0eCwgaXRtcCwgNCkKKyAgICAgICAgICAgICAgICB8fCAhSE1BQ19GaW5hbCgmaGN0eCwgZGlndG1wLCBOVUxMKSkgeworICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkocCwgZGlndG1wLCBjcGxlbik7CisgICAgICAgIGZvciAoaiA9IDE7IGogPCBpdGVyOyBqKyspIHsKKyAgICAgICAgICAgIGlmICghSE1BQ19DVFhfY29weSgmaGN0eCwgJmhjdHhfdHBsKSkgeworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghSE1BQ19VcGRhdGUoJmhjdHgsIGRpZ3RtcCwgbWRsZW4pCisgICAgICAgICAgICAgICAgICAgIHx8ICFITUFDX0ZpbmFsKCZoY3R4LCBkaWd0bXAsIE5VTEwpKSB7CisgICAgICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY3BsZW47IGsrKykgeworICAgICAgICAgICAgICAgIHBba10gXj0gZGlndG1wW2tdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRrZXlsZW4tPSBjcGxlbjsKKyAgICAgICAgaSsrOworICAgICAgICBwKz0gY3BsZW47CisgICAgfQorICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19zZXRFeGNlcHRpb24oUHlPYmplY3QgKmV4YykKK3sKKyAgICB1bnNpZ25lZCBsb25nIGVycmNvZGU7CisgICAgY29uc3QgY2hhciAqbGliLCAqZnVuYywgKnJlYXNvbjsKKworICAgIGVycmNvZGUgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgaWYgKCFlcnJjb2RlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhleGMsICJ1bmtub3duIHJlYXNvbnMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEVSUl9jbGVhcl9lcnJvcigpOworCisgICAgbGliID0gRVJSX2xpYl9lcnJvcl9zdHJpbmcoZXJyY29kZSk7CisgICAgZnVuYyA9IEVSUl9mdW5jX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKyAgICByZWFzb24gPSBFUlJfcmVhc29uX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKworICAgIGlmIChsaWIgJiYgZnVuYykgeworICAgICAgICBQeUVycl9Gb3JtYXQoZXhjLCAiWyVzOiAlc10gJXMiLCBsaWIsIGZ1bmMsIHJlYXNvbik7CisgICAgfQorICAgIGVsc2UgaWYgKGxpYikgeworICAgICAgICBQeUVycl9Gb3JtYXQoZXhjLCAiWyVzXSAlcyIsIGxpYiwgcmVhc29uKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhleGMsIHJlYXNvbik7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitQeURvY19TVFJWQVIocGJrZGYyX2htYWNfX2RvY19fLAorInBia2RmMl9obWFjKGhhc2hfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGRrbGVuPU5vbmUpIC0+IGtleVxuXAorXG5cCitQYXNzd29yZCBiYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyIChQS0NTICM1IHYyLjApIHdpdGggSE1BQyBhc1xuXAorcHNldWRvcmFuZG9tIGZ1bmN0aW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorcGJrZGYyX2htYWMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaGFzaF9uYW1lIiwgInBhc3N3b3JkIiwgInNhbHQiLCAiaXRlcmF0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJka2xlbiIsIE5VTEx9OworICAgIFB5T2JqZWN0ICprZXlfb2JqID0gTlVMTCwgKmRrbGVuX29iaiA9IFB5X05vbmU7CisgICAgY2hhciAqbmFtZSwgKmtleTsKKyAgICBQeV9idWZmZXIgcGFzc3dvcmQsIHNhbHQ7CisgICAgbG9uZyBpdGVyYXRpb25zLCBka2xlbjsKKyAgICBpbnQgcmV0dmFsOworICAgIGNvbnN0IEVWUF9NRCAqZGlnZXN0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAic3kqeSpsfE86cGJrZGYyX2htYWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm5hbWUsICZwYXNzd29yZCwgJnNhbHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0ZXJhdGlvbnMsICZka2xlbl9vYmopKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGRpZ2VzdCA9IEVWUF9nZXRfZGlnZXN0YnluYW1lKG5hbWUpOworICAgIGlmIChkaWdlc3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVuc3VwcG9ydGVkIGhhc2ggdHlwZSIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAocGFzc3dvcmQubGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzd29yZCBpcyB0b28gbG9uZy4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKHNhbHQubGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzYWx0IGlzIHRvbyBsb25nLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoaXRlcmF0aW9ucyA8IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZiAoaXRlcmF0aW9ucyA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uIHZhbHVlIGlzIHRvbyBncmVhdC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKGRrbGVuX29iaiA9PSBQeV9Ob25lKSB7CisgICAgICAgIGRrbGVuID0gRVZQX01EX3NpemUoZGlnZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBka2xlbiA9IFB5TG9uZ19Bc0xvbmcoZGtsZW5fb2JqKTsKKyAgICAgICAgaWYgKChka2xlbiA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGRrbGVuIDwgMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJrZXkgbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZiAoZGtsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIC8qIElOVF9NQVggaXMgYWx3YXlzIHNtYWxsZXIgdGhhbiBka0xlbiBtYXggKDJeMzIgLSAxKSAqIGhMZW4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAia2V5IGxlbmd0aCBpcyB0b28gZ3JlYXQuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGtleV9vYmogPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGRrbGVuKTsKKyAgICBpZiAoa2V5X29iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBrZXkgPSBQeUJ5dGVzX0FTX1NUUklORyhrZXlfb2JqKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXR2YWwgPSBQS0NTNV9QQktERjJfSE1BQ19mYXN0KChjaGFyKilwYXNzd29yZC5idWYsIHBhc3N3b3JkLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopc2FsdC5idWYsIHNhbHQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9ucywgZGlnZXN0LCBka2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopa2V5KTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXR2YWwpIHsKKyAgICAgICAgUHlfQ0xFQVIoa2V5X29iaik7CisgICAgICAgIF9zZXRFeGNlcHRpb24oUHlFeGNfVmFsdWVFcnJvcik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICBlbmQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzc3dvcmQpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNhbHQpOworICAgIHJldHVybiBrZXlfb2JqOworfQorCisjZW5kaWYKKwogLyogU3RhdGUgZm9yIG91ciBjYWxsYmFjayBmdW5jdGlvbiBzbyB0aGF0IGl0IGNhbiBhY2N1bXVsYXRlIGEgcmVzdWx0LiAqLwogdHlwZWRlZiBzdHJ1Y3QgX2ludGVybmFsX25hbWVfbWFwcGVyX3N0YXRlIHsKICAgICBQeU9iamVjdCAqc2V0OwpAQCAtNTE3LDkgKzcxNyw5IEBACiAgICAgICAgIHN0YXRlLT5lcnJvciA9IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFB5U2V0X0FkZChzdGF0ZS0+c2V0LCBweV9uYW1lKSAhPSAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocHlfbmFtZSk7CiAgICAgICAgICAgICBzdGF0ZS0+ZXJyb3IgPSAxOwogICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihweV9uYW1lKTsKICAgICB9CiB9CiAKQEAgLTYxMCw2ICs4MTAsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBFVlBfZnVuY3Rpb25zW10gPSB7CiAgICAgeyJuZXciLCAoUHlDRnVuY3Rpb24pRVZQX25ldywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIEVWUF9uZXdfX2RvY19ffSwKKyNpZmRlZiBQWV9QQktERjJfSE1BQworICAgIHsicGJrZGYyX2htYWMiLCAoUHlDRnVuY3Rpb24pcGJrZGYyX2htYWMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICBwYmtkZjJfaG1hY19fZG9jX199LAorI2VuZGlmCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYobWQ1KSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGExKSwKICNpZmRlZiBfT1BFTlNTTF9TVVBQT1JUU19TSEEyCkBAIC02NDMsNiArODQ3LDcgQEAKICAgICBQeU9iamVjdCAqbSwgKm9wZW5zc2xfbWRfbWV0aF9uYW1lczsKIAogICAgIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKCk7CisgICAgRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKIAogICAgIC8qIFRPRE8gYnVpbGQgRVZQX2Z1bmN0aW9ucyBvcGVuc3NsXyogZW50cmllcyBkeW5hbWljYWxseSBiYXNlZAogICAgICAqIG9uIHdoYXQgaGFzaGVzIGFyZSBzdXBwb3J0ZWQgcmF0aGVyIHRoYW4gbGlzdGluZyBtYW55CkBAIC02NjcsMTAgKzg3Miw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotI2lmIEhBU0hfT0JKX0NPTlNUUlVDVE9SCi0gICAgUHlfSU5DUkVGKCZFVlB0eXBlKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJkVWUHR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiSEFTSCIsIChQeU9iamVjdCAqKSZFVlB0eXBlKTsKLSNlbmRpZgogCiAgICAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGJ5IHRoZSBjb252ZW5pZW5jZSBjb25zdHJ1Y3RvcnMgKi8KICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhtZDUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faGVhcHFtb2R1bGUuYyBiL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKaW5kZXggZjM3N2U5Yy4uOTZhZmNkYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faGVhcHFtb2R1bGUuYworKysgYi9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCkBAIC0xNjgsNyArMTY4LDEwIEBACiAKICAgICBsYXN0ZWx0ID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIG4tMSkgOwogICAgIFB5X0lOQ1JFRihsYXN0ZWx0KTsKLSAgICBQeUxpc3RfU2V0U2xpY2UoaGVhcCwgbi0xLCBuLCBOVUxMKTsKKyAgICBpZiAoUHlMaXN0X1NldFNsaWNlKGhlYXAsIG4tMSwgbiwgTlVMTCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsYXN0ZWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG4tLTsKIAogICAgIGlmICghbikKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5jIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKaW5kZXggNGE3ZTc1OC4uZWI3MDFkNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKQEAgLTUzMyw2ICs1MzMsMzEgQEAKIH0KIAogCitQeU9iamVjdCAqCitfUHlJT19nZXRfbG9jYWxlX21vZHVsZShfUHlJT19TdGF0ZSAqc3RhdGUpCit7CisgICAgUHlPYmplY3QgKm1vZDsKKyAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgIT0gTlVMTCkgeworICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHN0YXRlLT5sb2NhbGVfbW9kdWxlKSk7CisgICAgICAgIG1vZCA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHN0YXRlLT5sb2NhbGVfbW9kdWxlKTsKKyAgICAgICAgaWYgKG1vZCAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYobW9kKTsKKyAgICAgICAgICAgIHJldHVybiBtb2Q7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoc3RhdGUtPmxvY2FsZV9tb2R1bGUpOworICAgIH0KKyAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9ib290bG9jYWxlIik7CisgICAgaWYgKG1vZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdGF0ZS0+bG9jYWxlX21vZHVsZSA9IFB5V2Vha3JlZl9OZXdSZWYobW9kLCBOVUxMKTsKKyAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobW9kKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtb2Q7Cit9CisKKwogc3RhdGljIGludAogaW9tb2R1bGVfdHJhdmVyc2UoUHlPYmplY3QgKm1vZCwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpIHsKICAgICBfUHlJT19TdGF0ZSAqc3RhdGUgPSBJT19NT0RfU1RBVEUobW9kKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5oIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmgKaW5kZXggMGZlOTBhMy4uYjkwYTY1OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmgKKysrIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmgKQEAgLTc3LDcgKzc3LDcgQEAKICAgIGxvbmcgd2l0aCAiJWxsZCIgZXZlbiB3aGVuIGJvdGggbG9uZyBhbmQgbG9uZyBsb25nIGhhdmUgdGhlIHNhbWUKICAgIHByZWNpc2lvbi4gKi8KIAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAKIC8qIFdpbmRvd3MgdXNlcyBsb25nIGxvbmcgZm9yIG9mZnNldHMgKi8KIHR5cGVkZWYgUFlfTE9OR19MT05HIFB5X29mZl90OwpAQCAtMTM3LDYgKzEzNyw4IEBACiAjZGVmaW5lIElPX01PRF9TVEFURShtb2QpICgoX1B5SU9fU3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShtb2QpKQogI2RlZmluZSBJT19TVEFURSBJT19NT0RfU1RBVEUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZfUHlJT19Nb2R1bGUpKQogCitleHRlcm4gUHlPYmplY3QgKl9QeUlPX2dldF9sb2NhbGVfbW9kdWxlKF9QeUlPX1N0YXRlICopOworCiBleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9jbG9zZTsKIGV4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2Nsb3NlZDsKIGV4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2RlY29kZTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYyBiL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYwppbmRleCAzYWZlN2IxLi42ZmU1ZDU4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKKysrIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCkBAIC0xOTAsNyArMTkwLDggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZGlvYmFzZV9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC0yMDksNiArMjEwLDE2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiAKQEAgLTIyMCw3ICsyMzEsNyBAQAogICAgIGludCBkZXRhY2hlZDsKICAgICBpbnQgcmVhZGFibGU7CiAgICAgaW50IHdyaXRhYmxlOwotICAgIGludCBkZWFsbG9jYXRpbmc7CisgICAgY2hhciBmaW5hbGl6aW5nOwogCiAgICAgLyogVHJ1ZSBpZiB0aGlzIGlzIGEgdmFuaWxsYSBCdWZmZXJlZCBvYmplY3QgKHJhdGhlciB0aGFuIGEgdXNlciBkZXJpdmVkCiAgICAgICAgY2xhc3MpICphbmQqIHRoZSByYXcgc3RyZWFtIGlzIGEgdmFuaWxsYSBGaWxlSU8gb2JqZWN0LiAqLwpAQCAtMzg0LDggKzM5NSw4IEBACiBzdGF0aWMgdm9pZAogYnVmZmVyZWRfZGVhbGxvYyhidWZmZXJlZCAqc2VsZikKIHsKLSAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOwotICAgIGlmIChzZWxmLT5vayAmJiBfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKKyAgICBzZWxmLT5maW5hbGl6aW5nID0gMTsKKyAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCiAgICAgICAgIHJldHVybjsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBzZWxmLT5vayA9IDA7CkBAIC00MjgsOCArNDM5LDYgQEAKIHN0YXRpYyBpbnQKIGJ1ZmZlcmVkX2NsZWFyKGJ1ZmZlcmVkICpzZWxmKQogewotICAgIGlmIChzZWxmLT5vayAmJiBfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwogICAgIHNlbGYtPm9rID0gMDsKICAgICBQeV9DTEVBUihzZWxmLT5yYXcpOwogICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwpAQCAtNTA4LDcgKzUxNyw3IEBACiAgICAgICAgIGdvdG8gZW5kOwogICAgIH0KIAotICAgIGlmIChzZWxmLT5kZWFsbG9jYXRpbmcpIHsKKyAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICBQeU9iamVjdCAqciA9IGJ1ZmZlcmVkX2RlYWxsb2Nfd2FybihzZWxmLCAoUHlPYmplY3QgKikgc2VsZik7CiAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgUHlfREVDUkVGKHIpOwpAQCAtNTI3LDYgKzUzNiwxMSBAQAogCiAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfY2xvc2UsIE5VTEwpOwogCisgICAgaWYgKHNlbGYtPmJ1ZmZlcikgeworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIHNlbGYtPmJ1ZmZlciA9IE5VTEw7CisgICAgfQorCiAgICAgaWYgKGV4YyAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlfQ0xFQVIocmVzKTsKQEAgLTY1OCw2ICs2NzIsMTEgQEAKIF9zZXRfQmxvY2tpbmdJT0Vycm9yKGNoYXIgKm1zZywgUHlfc3NpemVfdCB3cml0dGVuKQogewogICAgIFB5T2JqZWN0ICplcnI7CisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBQeUV2YWxfRXZhbEZyYW1lRXgoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbiBlcnJvcgorICAgICAgIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCiAgICAgZXJyID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX0Jsb2NraW5nSU9FcnJvciwgImlzbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLCBtc2csIHdyaXR0ZW4pOwogICAgIGlmIChlcnIpCkBAIC0xNzM5LDYgKzE3NTgsNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWRyZWFkZXJfbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTE3NzEsNyArMTc5MSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRyZWFkZXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0xNzkwLDYgKzE4MTAsMTYgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWRyZWFkZXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAMCiAKQEAgLTIxMjAsNiArMjE1MCw3IEBACiAKIHN0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHdyaXRlcl9tZW1iZXJzW10gPSB7CiAgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihidWZmZXJlZCwgZmluYWxpemluZyksIDB9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMjE1Miw3ICsyMTgzLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZHdyaXRlcl9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZF90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlidWZmZXJlZF9jbGVhciwgICAgLyogdHBfY2xlYXIgKi8KQEAgLTIxNzEsNiArMjIwMiwxNiBAQAogICAgIChpbml0cHJvYylidWZmZXJlZHdyaXRlcl9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAwKIApAQCAtMjQwNiw3ICsyNDQ3LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qIHRwX2ZsYWdzICovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qIHRwX2ZsYWdzICovCiAgICAgYnVmZmVyZWRyd3BhaXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRyd3BhaXJfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRyd3BhaXJfY2xlYXIsIC8qIHRwX2NsZWFyICovCkBAIC0yNDI1LDYgKzI0NjYsMTYgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWRyd3BhaXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAMCiAKQEAgLTI1MTIsNiArMjU2Myw3IEBACiAKIHN0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHJhbmRvbV9tZW1iZXJzW10gPSB7CiAgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihidWZmZXJlZCwgZmluYWxpemluZyksIDB9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMjU0NCw3ICsyNTk2LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZHJhbmRvbV9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZF90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlidWZmZXJlZF9jbGVhciwgICAgLyogdHBfY2xlYXIgKi8KQEAgLTI1NjMsNCArMjYxNSwxNCBAQAogICAgIChpbml0cHJvYylidWZmZXJlZHJhbmRvbV9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2ZpbGVpby5jIGIvTW9kdWxlcy9faW8vZmlsZWlvLmMKaW5kZXggZjNjZTc3Ni4uMjc5OTVlNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vZmlsZWlvLmMKKysrIGIvTW9kdWxlcy9faW8vZmlsZWlvLmMKQEAgLTUyLDcgKzUyLDcgQEAKICAgICB1bnNpZ25lZCBpbnQgYXBwZW5kaW5nIDogMTsKICAgICBzaWduZWQgaW50IHNlZWthYmxlIDogMjsgLyogLTEgbWVhbnMgdW5rbm93biAqLwogICAgIHVuc2lnbmVkIGludCBjbG9zZWZkIDogMTsKLSAgICB1bnNpZ25lZCBpbnQgZGVhbGxvY2F0aW5nOiAxOworICAgIGNoYXIgZmluYWxpemluZzsKICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiB9IGZpbGVpbzsKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgICAgICBzZWxmLT5mZCA9IC0xOwogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9Ci0gICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgIGlmIChzZWxmLT5maW5hbGl6aW5nKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyID0gZmlsZWlvX2RlYWxsb2Nfd2FybihzZWxmLCAoUHlPYmplY3QgKikgc2VsZik7CiAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgUHlfREVDUkVGKHIpOwpAQCAtMjA0LDYgKzIwNCw5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBPX0NMT0VYRUMKK2V4dGVybiBpbnQgX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbmRpZgogCiBzdGF0aWMgaW50CiBmaWxlaW9faW5pdChQeU9iamVjdCAqb3NlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKQEAgLTIyMyw2ICsyMjYsMTEgQEAKICAgICBpbnQgZmQgPSAtMTsKICAgICBpbnQgY2xvc2VmZCA9IDE7CiAgICAgaW50IGZkX2lzX293biA9IDA7CisjaWZkZWYgT19DTE9FWEVDCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworI2VsaWYgIWRlZmluZWQoTVNfV0lORE9XUykKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgogCiAgICAgYXNzZXJ0KFB5RmlsZUlPX0NoZWNrKG9zZWxmKSk7CiAgICAgaWYgKHNlbGYtPmZkID49IDApIHsKQEAgLTM0Myw2ICszNTEsMTIgQEAKICAgICBmbGFncyB8PSBPX0JJTkFSWTsKICNlbmRpZgogCisjaWZkZWYgTVNfV0lORE9XUworICAgIGZsYWdzIHw9IE9fTk9JTkhFUklUOworI2VsaWYgZGVmaW5lZChPX0NMT0VYRUMpCisgICAgZmxhZ3MgfD0gT19DTE9FWEVDOworI2VuZGlmCisKICAgICBpZiAoZmQgPj0gMCkgewogICAgICAgICBpZiAoY2hlY2tfZmQoZmQpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTM2NiwxMCArMzgwLDE4IEBACiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgICAgICAgICBzZWxmLT5mZCA9IG9wZW4obmFtZSwgZmxhZ3MsIDA2NjYpOworCiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUHlPYmplY3QgKmZkb2JqID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lciwgIk9pIiwgbmFtZW9iaiwgZmxhZ3MpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKmZkb2JqOworCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgICAgIC8qIHRoZSBvcGVuZXIgbWF5IGNsZWFyIHRoZSBhdG9taWMgZmxhZyAqLworICAgICAgICAgICAgYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCisKKyAgICAgICAgICAgIGZkb2JqID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKG9wZW5lciwgIk9pIiwgbmFtZW9iaiwgZmxhZ3MpOwogICAgICAgICAgICAgaWYgKGZkb2JqID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKGZkb2JqKSkgewpAQCAtMzg4LDE0ICs0MTAsMTQgQEAKIAogICAgICAgICBmZF9pc19vd24gPSAxOwogICAgICAgICBpZiAoc2VsZi0+ZmQgPCAwKSB7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAgICAgaWYgKHdpZGVuYW1lICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX0lPRXJyb3IsIG5hbWVvYmopOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIG5hbWUpOworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIG5hbWVvYmopOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQorCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc2VsZi0+ZmQsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworI2VuZGlmCiAgICAgfQogICAgIGlmIChkaXJjaGVjayhzZWxmLCBuYW1lb2JqKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC00NDksNyArNDcxLDcgQEAKIHN0YXRpYyB2b2lkCiBmaWxlaW9fZGVhbGxvYyhmaWxlaW8gKnNlbGYpCiB7Ci0gICAgc2VsZi0+ZGVhbGxvY2F0aW5nID0gMTsKKyAgICBzZWxmLT5maW5hbGl6aW5nID0gMTsKICAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCiAgICAgICAgIHJldHVybjsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKQEAgLTUzNSw3ICs1NTcsNyBAQAogICAgICAgICBsZW4gPSBwYnVmLmxlbjsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCiAgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOwogICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKQEAgLTU1OCwzMyArNTgwLDI3IEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKIH0KIAorI2lmbmRlZiBIQVZFX0ZTVEFUCisKK3N0YXRpYyBQeU9iamVjdCAqCitmaWxlaW9fcmVhZGFsbChmaWxlaW8gKnNlbGYpCit7CisgICAgX1B5X0lERU5USUZJRVIocmVhZGFsbCk7CisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KikmUHlSYXdJT0Jhc2VfVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9yZWFkYWxsLCAiTyIsIHNlbGYpOworfQorCisjZWxzZQorCiBzdGF0aWMgc2l6ZV90Ci1uZXdfYnVmZmVyc2l6ZShmaWxlaW8gKnNlbGYsIHNpemVfdCBjdXJyZW50c2l6ZQotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICAgICAgICAgICAgICwgUHlfb2ZmX3QgcG9zLCBQeV9vZmZfdCBlbmQKLSNlbmRpZgotICAgICAgICAgICAgICAgKQorbmV3X2J1ZmZlcnNpemUoZmlsZWlvICpzZWxmLCBzaXplX3QgY3VycmVudHNpemUpCiB7CiAgICAgc2l6ZV90IGFkZGVuZDsKLSNpZmRlZiBIQVZFX0ZTVEFUCi0gICAgaWYgKGVuZCAhPSAoUHlfb2ZmX3QpLTEpIHsKLSAgICAgICAgLyogRmlsZXMgY2xhaW1pbmcgYSBzaXplIHNtYWxsZXIgdGhhbiBTTUFMTENIVU5LIG1heQotICAgICAgICAgICBhY3R1YWxseSBiZSBzdHJlYW1pbmcgcHNldWRvLWZpbGVzLiBJbiB0aGlzIGNhc2UsIHdlCi0gICAgICAgICAgIGFwcGx5IHRoZSBtb3JlIGFnZ3Jlc3NpdmUgYWxnb3JpdGhtIGJlbG93LgotICAgICAgICAqLwotICAgICAgICBpZiAoZW5kID49IFNNQUxMQ0hVTksgJiYgZW5kID49IHBvcyAmJiBwb3MgPj0gMCkgewotICAgICAgICAgICAgLyogQWRkIDEgc28gaWYgdGhlIGZpbGUgd2VyZSB0byBncm93IHdlJ2Qgbm90aWNlLiAqLwotICAgICAgICAgICAgUHlfb2ZmX3QgYnVmc2l6ZSA9IGN1cnJlbnRzaXplICsgZW5kIC0gcG9zICsgMTsKLSAgICAgICAgICAgIGlmIChidWZzaXplIDwgUFlfU1NJWkVfVF9NQVgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIChzaXplX3QpYnVmc2l6ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gUFlfU1NJWkVfVF9NQVg7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKwogICAgIC8qIEV4cGFuZCB0aGUgYnVmZmVyIGJ5IGFuIGFtb3VudCBwcm9wb3J0aW9uYWwgdG8gdGhlIGN1cnJlbnQgc2l6ZSwKICAgICAgICBnaXZpbmcgdXMgYW1vcnRpemVkIGxpbmVhci10aW1lIGJlaGF2aW9yLiAgRm9yIGJpZ2dlciBzaXplcywgdXNlIGEKICAgICAgICBsZXNzLXRoYW4tZG91YmxlIGdyb3d0aCBmYWN0b3IgdG8gYXZvaWQgZXhjZXNzaXZlIGFsbG9jYXRpb24uICovCisgICAgYXNzZXJ0KGN1cnJlbnRzaXplIDw9IFBZX1NTSVpFX1RfTUFYKTsKICAgICBpZiAoY3VycmVudHNpemUgPiA2NTUzNikKICAgICAgICAgYWRkZW5kID0gY3VycmVudHNpemUgPj4gMzsKICAgICBlbHNlCkBAIC01OTgsMjYgKzYxNCwxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKIHsKLSNpZmRlZiBIQVZFX0ZTVEFUCiAgICAgc3RydWN0IHN0YXQgc3Q7CiAgICAgUHlfb2ZmX3QgcG9zLCBlbmQ7Ci0jZW5kaWYKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIFB5X3NzaXplX3QgdG90YWwgPSAwOworICAgIFB5X3NzaXplX3QgYnl0ZXNfcmVhZCA9IDA7CiAgICAgUHlfc3NpemVfdCBuOwotICAgIHNpemVfdCBuZXdzaXplOworICAgIHNpemVfdCBidWZzaXplOwogCiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKICAgICBpZiAoIV9QeVZlcmlmeV9mZChzZWxmLT5mZCkpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAKLSAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIFNNQUxMQ0hVTkspOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBIQVZFX0ZTVEFUCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBwb3MgPSBfbHNlZWtpNjQoc2VsZi0+ZmQsIDBMLCBTRUVLX0NVUik7CiAjZWxzZQogICAgIHBvcyA9IGxzZWVrKHNlbGYtPmZkLCAwTCwgU0VFS19DVVIpOwpAQCAtNjI2LDQ0ICs2MzUsNDYgQEAKICAgICAgICAgZW5kID0gc3Quc3Rfc2l6ZTsKICAgICBlbHNlCiAgICAgICAgIGVuZCA9IChQeV9vZmZfdCktMTsKLSNlbmRpZgotICAgIHdoaWxlICgxKSB7Ci0jaWZkZWYgSEFWRV9GU1RBVAotICAgICAgICBuZXdzaXplID0gbmV3X2J1ZmZlcnNpemUoc2VsZiwgdG90YWwsIHBvcywgZW5kKTsKLSNlbHNlCi0gICAgICAgIG5ld3NpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCB0b3RhbCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG5ld3NpemUgPiBQWV9TU0laRV9UX01BWCB8fCBuZXdzaXplIDw9IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICJ1bmJvdW5kZWQgcmVhZCByZXR1cm5lZCBtb3JlIGJ5dGVzICIKLSAgICAgICAgICAgICAgICAidGhhbiBhIFB5dGhvbiBzdHJpbmcgY2FuIGhvbGQgIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAKLSAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA8IChQeV9zc2l6ZV90KW5ld3NpemUpIHsKLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgbmV3c2l6ZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRvdGFsID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgaWYgKGVuZCA+IDAgJiYgZW5kID49IHBvcyAmJiBwb3MgPj0gMCAmJiBlbmQgLSBwb3MgPCBQWV9TU0laRV9UX01BWCkgeworICAgICAgICAvKiBUaGlzIGlzIHByb2JhYmx5IGEgcmVhbCBmaWxlLCBzbyB3ZSB0cnkgdG8gYWxsb2NhdGUgYQorICAgICAgICAgICBidWZmZXIgb25lIGJ5dGUgbGFyZ2VyIHRoYW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUuICBJZiB0aGUKKyAgICAgICAgICAgY2FsY3VsYXRpb24gaXMgcmlnaHQgdGhlbiB3ZSBzaG91bGQgZ2V0IEVPRiB3aXRob3V0IGhhdmluZworICAgICAgICAgICB0byBlbmxhcmdlIHRoZSBidWZmZXIuICovCisgICAgICAgIGJ1ZnNpemUgPSAoc2l6ZV90KShlbmQgLSBwb3MgKyAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZzaXplID0gU01BTExDSFVOSzsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ1ZnNpemUpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoYnl0ZXNfcmVhZCA+PSAoUHlfc3NpemVfdClidWZzaXplKSB7CisgICAgICAgICAgICBidWZzaXplID0gbmV3X2J1ZmZlcnNpemUoc2VsZiwgYnl0ZXNfcmVhZCk7CisgICAgICAgICAgICBpZiAoYnVmc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIHx8IGJ1ZnNpemUgPD0gMCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ib3VuZGVkIHJlYWQgcmV0dXJuZWQgbW9yZSBieXRlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGFuIGEgUHl0aG9uIHN0cmluZyBjYW4gaG9sZCIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIDwgKFB5X3NzaXplX3QpYnVmc2l6ZSkgeworICAgICAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgYnVmc2l6ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbiA9IG5ld3NpemUgLSB0b3RhbDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgICAgIG4gPSBidWZzaXplIC0gYnl0ZXNfcmVhZDsKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIGlmIChuID4gSU5UX01BWCkKICAgICAgICAgICAgIG4gPSBJTlRfTUFYOwotICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwKLSAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIHRvdGFsLAotICAgICAgICAgICAgICAgICAoaW50KW4pOworICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGJ5dGVzX3JlYWQsIChpbnQpbik7CiAjZWxzZQotICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwKLSAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIHRvdGFsLAotICAgICAgICAgICAgICAgICBuKTsKKyAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBieXRlc19yZWFkLCBuKTsKICNlbmRpZgogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICBpZiAobiA9PSAwKQpAQCAtNjc2LDcgKzY4Nyw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRvdGFsID4gMCkKKyAgICAgICAgICAgIGlmIChieXRlc19yZWFkID4gMCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKQEAgLTY4NiwyMiArNjk3LDE5IEBACiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICB0b3RhbCArPSBuOwotI2lmZGVmIEhBVkVfRlNUQVQKKyAgICAgICAgYnl0ZXNfcmVhZCArPSBuOwogICAgICAgICBwb3MgKz0gbjsKLSNlbmRpZgogICAgIH0KIAotICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPiB0b3RhbCkgewotICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIHRvdGFsKSA8IDApIHsKLSAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGp1c3QgaW4gY2FzZSAqLwotICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA+IGJ5dGVzX3JlYWQpIHsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBieXRlc19yZWFkKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjZW5kaWYgLyogSEFWRV9GU1RBVCAqLworCiBzdGF0aWMgUHlPYmplY3QgKgogZmlsZWlvX3JlYWQoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTcyMiw3ICs3MzAsNyBAQAogICAgICAgICByZXR1cm4gZmlsZWlvX3JlYWRhbGwoc2VsZik7CiAgICAgfQogCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAoc2l6ZSA+IElOVF9NQVgpCiAgICAgICAgIHNpemUgPSBJTlRfTUFYOwogI2VuZGlmCkBAIC03MzQsNyArNzQyLDcgQEAKICAgICBpZiAoX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkgewogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcHRyLCAoaW50KXNpemUpOwogI2Vsc2UKICAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHB0ciwgc2l6ZSk7CkBAIC03NTUsNyArNzYzLDcgQEAKIAogICAgIGlmIChuICE9IHNpemUpIHsKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmYnl0ZXMsIG4pIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKGJ5dGVzKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgyLDcgKzc5MCw3IEBACiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICBsZW4gPSBwYnVmLmxlbjsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAobGVuID4gMzI3NjcgJiYgaXNhdHR5KHNlbGYtPmZkKSkgewogICAgICAgICAgICAgLyogSXNzdWUgIzExMzk1OiB0aGUgV2luZG93cyBjb25zb2xlIHJldHVybnMgYW4gZXJyb3IgKDEyOiBub3QKICAgICAgICAgICAgICAgIGVub3VnaCBzcGFjZSBlcnJvcikgb24gd3JpdGluZyBpbnRvIHN0ZG91dCBpZiBzdGRvdXQgbW9kZSBpcwpAQCAtODU1LDcgKzg2Myw3IEBACiAKICAgICBpZiAoX1B5VmVyaWZ5X2ZkKGZkKSkgewogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgcmVzID0gX2xzZWVraTY0KGZkLCBwb3MsIHdoZW5jZSk7CiAjZWxzZQogICAgICAgICByZXMgPSBsc2VlayhmZCwgcG9zLCB3aGVuY2UpOwpAQCAtMTIwNCw2ICsxMjEyLDExIEBACiAgICAge05VTEx9LAogfTsKIAorc3RhdGljIFB5TWVtYmVyRGVmIGZpbGVpb19tZW1iZXJzW10gPSB7CisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoZmlsZWlvLCBmaW5hbGl6aW5nKSwgMH0sCisgICAge05VTEx9Cit9OworCiBQeVR5cGVPYmplY3QgUHlGaWxlSU9fVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2lvLkZpbGVJTyIsCkBAIC0xMjI1LDcgKzEyMzgsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgICAgICAvKiB0cF9mbGFncyAqLwogICAgIGZpbGVpb19kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylmaWxlaW9fdHJhdmVyc2UsICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWZpbGVpb19jbGVhciwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTEyMzQsNyArMTI0Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIGZpbGVpb19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGZpbGVpb19tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIGZpbGVpb19nZXRzZXRsaXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCkBAIC0xMjQ1LDQgKzEyNTgsMTMgQEAKICAgICBQeVR5cGVfR2VuZXJpY0FsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgZmlsZWlvX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vaW9iYXNlLmMgYi9Nb2R1bGVzL19pby9pb2Jhc2UuYwppbmRleCBlMzg0NzNhLi5iNTg2ODdlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9pb2Jhc2UuYworKysgYi9Nb2R1bGVzL19pby9pb2Jhc2UuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEkvTyBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgaGllcmFyY2h5CiAgICAgYXMgZGVmaW5lZCBieSBQRVAgMzExNiAtICJOZXcgSS9PIgotICAgIAorCiAgICAgQ2xhc3NlcyBkZWZpbmVkIGhlcmU6IElPQmFzZSwgUmF3SU9CYXNlLgotICAgIAorCiAgICAgV3JpdHRlbiBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYyBhbmQgQW50b2luZSBQaXRyb3UKICovCiAKQEAgLTE5LDcgKzE5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICAKKwogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKIH0gaW9iYXNlOwpAQCAtMTk2LDI2ICsxOTYsMjQgQEAKIAogLyogRmluYWxpemF0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gc3VwcG9ydCAqLwogCi1pbnQKLV9QeUlPQmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3N0YXRpYyB2b2lkCitpb2Jhc2VfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBQeU9iamVjdCAqdHAsICp2LCAqdGI7Ci0gICAgaW50IGNsb3NlZCA9IDE7Ci0gICAgaW50IGlzX3pvbWJpZTsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworICAgIGludCBjbG9zZWQ7CisgICAgX1B5X0lERU5USUZJRVIoX2ZpbmFsaXppbmcpOwogCi0gICAgLyogSWYgX1B5SU9CYXNlX2ZpbmFsaXplKCkgaXMgY2FsbGVkIGZyb20gYSBkZXN0cnVjdG9yLCB3ZSBuZWVkIHRvCi0gICAgICAgcmVzdXJyZWN0IHRoZSBvYmplY3QgYXMgY2FsbGluZyBjbG9zZSgpIGNhbiBpbnZva2UgYXJiaXRyYXJ5IGNvZGUuICovCi0gICAgaXNfem9tYmllID0gKFB5X1JFRkNOVChzZWxmKSA9PSAwKTsKLSAgICBpZiAoaXNfem9tYmllKSB7Ci0gICAgICAgICsrUHlfUkVGQ05UKHNlbGYpOwotICAgIH0KLSAgICBQeUVycl9GZXRjaCgmdHAsICZ2LCAmdGIpOworICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCisgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisKICAgICAvKiBJZiBgY2xvc2VkYCBkb2Vzbid0IGV4aXN0IG9yIGNhbid0IGJlIGV2YWx1YXRlZCBhcyBib29sLCB0aGVuIHRoZQogICAgICAgIG9iamVjdCBpcyBwcm9iYWJseSBpbiBhbiB1bnVzYWJsZSBzdGF0ZSwgc28gaWdub3JlLiAqLwogICAgIHJlcyA9IFB5T2JqZWN0X0dldEF0dHIoc2VsZiwgX1B5SU9fc3RyX2Nsb3NlZCk7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKQorICAgIGlmIChyZXMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBjbG9zZWQgPSAtMTsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGNsb3NlZCA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOwogICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTIyMyw2ICsyMjEsMTAgQEAKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQogICAgIGlmIChjbG9zZWQgPT0gMCkgeworICAgICAgICAvKiBTaWduYWwgY2xvc2UoKSB0aGF0IGl0IHdhcyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgb2JqZWN0CisgICAgICAgICAgIGZpbmFsaXphdGlvbiBwcm9jZXNzLiAqLworICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChzZWxmLCAmUHlJZF9fZmluYWxpemluZywgUHlfVHJ1ZSkpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKikgc2VsZiwgX1B5SU9fc3RyX2Nsb3NlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgICAgIC8qIFNpbGVuY2luZyBJL08gZXJyb3JzIGlzIGJhZCwgYnV0IHByaW50aW5nIHNwdXJpb3VzIHRyYWNlYmFja3MgaXMKQEAgLTIzMywzMSArMjM1LDI1IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgIH0KLSAgICBQeUVycl9SZXN0b3JlKHRwLCB2LCB0Yik7Ci0gICAgaWYgKGlzX3pvbWJpZSkgewotICAgICAgICBpZiAoLS1QeV9SRUZDTlQoc2VsZikgIT0gMCkgewotICAgICAgICAgICAgLyogVGhlIG9iamVjdCBsaXZlcyBhZ2Fpbi4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHRha2VuIGZyb20KLSAgICAgICAgICAgICAgIHNsb3RfdHBfZGVsIGluIHR5cGVvYmplY3QuYy4gKi8KLSAgICAgICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gUHlfUkVGQ05UKHNlbGYpOwotICAgICAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgICAgIFB5X1JFRkNOVChzZWxmKSA9IHJlZmNudDsKLSAgICAgICAgICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbwotICAgICAgICAgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCi0gICAgICAgICAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgICAgICAgICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKLSAgICAgICAgICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgotICAgICAgICAgICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICAgICAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKLSAgICAgICAgICAgICAqIHVuZG9uZS4KLSAgICAgICAgICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgICAgICAgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9mcmVlczsKLSAgICAgICAgICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKworICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworfQorCitpbnQKK19QeUlPQmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgaXNfem9tYmllOworCisgICAgLyogSWYgX1B5SU9CYXNlX2ZpbmFsaXplKCkgaXMgY2FsbGVkIGZyb20gYSBkZXN0cnVjdG9yLCB3ZSBuZWVkIHRvCisgICAgICAgcmVzdXJyZWN0IHRoZSBvYmplY3QgYXMgY2FsbGluZyBjbG9zZSgpIGNhbiBpbnZva2UgYXJiaXRyYXJ5IGNvZGUuICovCisgICAgaXNfem9tYmllID0gKFB5X1JFRkNOVChzZWxmKSA9PSAwKTsKKyAgICBpZiAoaXNfem9tYmllKQorICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpOworICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdF9DYWxsRmluYWxpemVyKHNlbGYpOworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI3MCw4ICsyNjYsNiBAQAogc3RhdGljIGludAogaW9iYXNlX2NsZWFyKGlvYmFzZSAqc2VsZikKIHsKLSAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKICAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTUzNiw3ICs1MzAsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIG9sZF9zaXplID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoYnVmZmVyKTsKLSAgICAgICAgUHlCeXRlQXJyYXlfUmVzaXplKGJ1ZmZlciwgb2xkX3NpemUgKyBQeUJ5dGVzX0dFVF9TSVpFKGIpKTsKKyAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZShidWZmZXIsIG9sZF9zaXplICsgUHlCeXRlc19HRVRfU0laRShiKSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KICAgICAgICAgbWVtY3B5KFB5Qnl0ZUFycmF5X0FTX1NUUklORyhidWZmZXIpICsgb2xkX3NpemUsCiAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhiKSwgUHlCeXRlc19HRVRfU0laRShiKSk7CiAKQEAgLTc0MSw3ICs3MzgsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qdHBfZmxhZ3MqLwogICAgIGlvYmFzZV9kb2MsICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWlvYmFzZV90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlpb2Jhc2VfY2xlYXIsICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTc2MCw2ICs3NTcsMTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAoZGVzdHJ1Y3Rvcilpb2Jhc2VfZmluYWxpemUsIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiAKQEAgLTgzMSw3ICs4MzgsNyBAQAogICAgIGludCByOwogICAgIFB5T2JqZWN0ICpjaHVua3MgPSBQeUxpc3RfTmV3KDApOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgCisKICAgICBpZiAoY2h1bmtzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC05MDUsNyArOTEyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICByYXdpb2Jhc2VfZG9jLCAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC05MjQsNCArOTMxLDE0IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vdGV4dGlvLmMgYi9Nb2R1bGVzL19pby90ZXh0aW8uYwppbmRleCA2MDNlZTYwLi5mYjg5YTE3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby90ZXh0aW8uYworKysgYi9Nb2R1bGVzL19pby90ZXh0aW8uYwpAQCAtMTczLDcgKzE3Myw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgLyp0cF9mbGFncyovCiAgICAgdGV4dGlvYmFzZV9kb2MsICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTkyLDYgKzE5MywxNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogCkBAIC02OTEsNyArNzAyLDcgQEAKICAgICBjaGFyIHNlZWthYmxlOwogICAgIGNoYXIgaGFzX3JlYWQxOwogICAgIGNoYXIgdGVsbGluZzsKLSAgICBjaGFyIGRlYWxsb2NhdGluZzsKKyAgICBjaGFyIGZpbmFsaXppbmc7CiAgICAgLyogU3BlY2lhbGl6ZWQgZW5jb2RpbmcgZnVuYyAoc2VlIGJlbG93KSAqLwogICAgIGVuY29kZWZ1bmNfdCBlbmNvZGVmdW5jOwogICAgIC8qIFdoZXRoZXIgb3Igbm90IGl0J3MgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW0gKi8KQEAgLTc1OCw3ICs3NjksNyBAQAogewogICAgIGlmICghc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtKSB7CiAgICAgICAgIC8qIFNraXAgdGhlIEJPTSBhbmQgdXNlIG5hdGl2ZSBieXRlIG9yZGVyaW5nICovCi0jaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisjaWYgUFlfQklHX0VORElBTgogICAgICAgICByZXR1cm4gdXRmMTZiZV9lbmNvZGUoc2VsZiwgdGV4dCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gdXRmMTZsZV9lbmNvZGUoc2VsZiwgdGV4dCk7CkBAIC03ODcsNyArNzk4LDcgQEAKIHsKICAgICBpZiAoIXNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSkgewogICAgICAgICAvKiBTa2lwIHRoZSBCT00gYW5kIHVzZSBuYXRpdmUgYnl0ZSBvcmRlcmluZyAqLwotI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorI2lmIFBZX0JJR19FTkRJQU4KICAgICAgICAgcmV0dXJuIHV0ZjMyYmVfZW5jb2RlKHNlbGYsIHRleHQpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIHV0ZjMybGVfZW5jb2RlKHNlbGYsIHRleHQpOwpAQCAtOTA2LDM1ICs5MTcsMjkgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCAmJiBzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzdGF0ZS0+bG9jYWxlX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgibG9jYWxlIik7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gdXNlX2xvY2FsZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB1c2VfbG9jYWxlOgotICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkgewotICAgICAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICBJbXBvcnRpbmcgbG9jYWxlIGNhbiByYWlzZSBhIEltcG9ydEVycm9yIGJlY2F1c2Ugb2YKLSAgICAgICAgICAgICAgICAgX2Z1bmN0b29scywgYW5kIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyBjYW4gcmFpc2UgYQotICAgICAgICAgICAgICAgICBJbXBvcnRFcnJvciBpZiBfbG9jYWxlIGlzIG5vdCBhdmFpbGFibGUuICBUaGVzZSB3aWxsIGhhcHBlbgotICAgICAgICAgICAgICAgICBkdXJpbmcgbW9kdWxlIGJ1aWxkaW5nLgotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfSW1wb3J0RXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlPYmplY3QgKmxvY2FsZV9tb2R1bGUgPSBfUHlJT19nZXRfbG9jYWxlX21vZHVsZShzdGF0ZSk7CisgICAgICAgIGlmIChsb2NhbGVfbW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOworICAgICAgICBzZWxmLT5lbmNvZGluZyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCisgICAgICAgICAgICBsb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7CisgICAgICAgIFB5X0RFQ1JFRihsb2NhbGVfbW9kdWxlKTsKKyAgICAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgSW1wb3J0aW5nIGxvY2FsZSBjYW4gcmFpc2UgYSBJbXBvcnRFcnJvciBiZWNhdXNlIG9mCisgICAgICAgICAgICAgX2Z1bmN0b29scywgYW5kIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyBjYW4gcmFpc2UgYQorICAgICAgICAgICAgIEltcG9ydEVycm9yIGlmIF9sb2NhbGUgaXMgbm90IGF2YWlsYWJsZS4gIFRoZXNlIHdpbGwgaGFwcGVuCisgICAgICAgICAgICAgZHVyaW5nIG1vZHVsZSBidWlsZGluZy4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19JbXBvcnRFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKICAgICB9CiAgICAgaWYgKHNlbGYtPmVuY29kaW5nICE9IE5VTEwpIHsKICAgICAgICAgZW5jb2RpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHNlbGYtPmVuY29kaW5nKTsKQEAgLTExMTIsOCArMTExNyw2IEBACiBzdGF0aWMgaW50CiBfdGV4dGlvd3JhcHBlcl9jbGVhcih0ZXh0aW8gKnNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CiAgICAgc2VsZi0+b2sgPSAwOwogICAgIFB5X0NMRUFSKHNlbGYtPmJ1ZmZlcik7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOwpAQCAtMTEzMSw5ICsxMTM0LDEwIEBACiBzdGF0aWMgdm9pZAogdGV4dGlvd3JhcHBlcl9kZWFsbG9jKHRleHRpbyAqc2VsZikKIHsKLSAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOwotICAgIGlmIChfdGV4dGlvd3JhcHBlcl9jbGVhcihzZWxmKSA8IDApCisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CisgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CisgICAgX3RleHRpb3dyYXBwZXJfY2xlYXIoc2VsZik7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopc2VsZik7CkBAIC0xOTM3LDEwICsxOTQxLDcgQEAKIAogI2RlZmluZSBDT09LSUVfQlVGX0xFTiAgICAgIChzaXplb2YoUHlfb2ZmX3QpICsgMyAqIHNpemVvZihpbnQpICsgc2l6ZW9mKGNoYXIpKQogCi0jaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCi0KLSMgZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gICAwCi0KKyNpZiBQWV9CSUdfRU5ESUFOCiAvKiBXZSB3YW50IHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHN0YXJ0X3BvcyB0byBhbHNvIGJlIHRoZSBsZWFzdAogICAgc2lnbmlmaWNhbnQgYnl0ZSBvZiB0aGUgY29va2llLCB3aGljaCBtZWFucyB0aGF0IGluIGJpZy1lbmRpYW4gbW9kZSB3ZQogICAgbXVzdCBjb3B5IHRoZSBmaWVsZHMgaW4gcmV2ZXJzZSBvcmRlci4gKi8KQEAgLTE5NTIsOSArMTk1Myw2IEBACiAjIGRlZmluZSBPRkZfTkVFRF9FT0YgICAgICAgMAogCiAjZWxzZQotCi0jIGRlZmluZSBJU19MSVRUTEVfRU5ESUFOICAgMQotCiAvKiBMaXR0bGUtZW5kaWFuIG1vZGU6IHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHN0YXJ0X3BvcyB3aWxsCiAgICBuYXR1cmFsbHkgZW5kIHVwIHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBjb29raWUuICovCiAKQEAgLTE5NzUsNyArMTk3Myw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChfUHlMb25nX0FzQnl0ZUFycmF5KGNvb2tpZUxvbmcsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfTElUVExFX0VORElBTiwgMCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwgMCkgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihjb29raWVMb25nKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTIwMDEsOSArMTk5OSw5IEBACiAgICAgbWVtY3B5KGJ1ZmZlciArIE9GRl9DSEFSU19UT19TS0lQLCAmY29va2llLT5jaGFyc190b19za2lwLCBzaXplb2YoY29va2llLT5jaGFyc190b19za2lwKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciArIE9GRl9ORUVEX0VPRiwgJmNvb2tpZS0+bmVlZF9lb2YsIHNpemVvZihjb29raWUtPm5lZWRfZW9mKSk7CiAKLSAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIElTX0xJVFRMRV9FTkRJQU4sIDApOworICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX0xJVFRMRV9FTkRJQU4sIDApOwogfQotI3VuZGVmIElTX0xJVFRMRV9FTkRJQU4KIAogc3RhdGljIGludAogX3RleHRpb3dyYXBwZXJfZGVjb2Rlcl9zZXRzdGF0ZSh0ZXh0aW8gKnNlbGYsIGNvb2tpZV90eXBlICpjb29raWUpCkBAIC0yMzUzLDcgKzIzNTEsNyBAQAogCiAgICAgLyogTm90ZSBvdXIgaW5pdGlhbCBzdGFydCBwb2ludC4gKi8KICAgICBjb29raWUuc3RhcnRfcG9zICs9IHNraXBfYnl0ZXM7Ci0gICAgY29va2llLmNoYXJzX3RvX3NraXAgPSBjaGFyc190b19za2lwOworICAgIGNvb2tpZS5jaGFyc190b19za2lwID0gUHlfU0FGRV9ET1dOQ0FTVChjaGFyc190b19za2lwLCBQeV9zc2l6ZV90LCBpbnQpOwogICAgIGlmIChjaGFyc190b19za2lwID09IDApCiAgICAgICAgIGdvdG8gZmluYWxseTsKIApAQCAtMjU3OSw3ICsyNTc3LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMLCAqdmFsLCAqdGI7Ci0gICAgICAgIGlmIChzZWxmLT5kZWFsbG9jYXRpbmcpIHsKKyAgICAgICAgaWYgKHNlbGYtPmZpbmFsaXppbmcpIHsKICAgICAgICAgICAgIHJlcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+YnVmZmVyLCAmUHlJZF9fZGVhbGxvY193YXJuLCAiTyIsIHNlbGYpOwogICAgICAgICAgICAgaWYgKHJlcykKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTI3NDAsNiArMjczOCw3IEBACiAgICAgeyJlbmNvZGluZyIsIFRfT0JKRUNULCBvZmZzZXRvZih0ZXh0aW8sIGVuY29kaW5nKSwgUkVBRE9OTFl9LAogICAgIHsiYnVmZmVyIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHRleHRpbywgYnVmZmVyKSwgUkVBRE9OTFl9LAogICAgIHsibGluZV9idWZmZXJpbmciLCBUX0JPT0wsIG9mZnNldG9mKHRleHRpbywgbGluZV9idWZmZXJpbmcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YodGV4dGlvLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0yNzc2LDcgKzI3NzUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsIC8qdHBfZmxhZ3MqLwogICAgIHRleHRpb3dyYXBwZXJfZG9jLCAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKXRleHRpb3dyYXBwZXJfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpdGV4dGlvd3JhcHBlcl9jbGVhciwgLyogdHBfY2xlYXIgKi8KQEAgLTI3OTUsNCArMjc5NCwxNCBAQAogICAgIChpbml0cHJvYyl0ZXh0aW93cmFwcGVyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fanNvbi5jIGIvTW9kdWxlcy9fanNvbi5jCmluZGV4IGRiNDVjMjguLjMwMWJjODcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2pzb24uYworKysgYi9Nb2R1bGVzL19qc29uLmMKQEAgLTIsMjAgKzIsNiBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImFjY3UuaCIKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA2MDAwMCAmJiAhZGVmaW5lZChQeV9UWVBFKQotI2RlZmluZSBQeV9UWVBFKG9iKSAgICAgKCgoUHlPYmplY3QqKShvYikpLT5vYl90eXBlKQotI2VuZGlmCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwICYmICFkZWZpbmVkKFBZX1NTSVpFX1RfTUlOKQotdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKLSNkZWZpbmUgUFlfU1NJWkVfVF9NQVggSU5UX01BWAotI2RlZmluZSBQWV9TU0laRV9UX01JTiBJTlRfTUlOCi0jZGVmaW5lIFB5SW50X0Zyb21Tc2l6ZV90IFB5SW50X0Zyb21Mb25nCi0jZGVmaW5lIFB5SW50X0FzU3NpemVfdCBQeUludF9Bc0xvbmcKLSNlbmRpZgotI2lmbmRlZiBQeV9JU19GSU5JVEUKLSNkZWZpbmUgUHlfSVNfRklOSVRFKFgpICghUHlfSVNfSU5GSU5JVFkoWCkgJiYgIVB5X0lTX05BTihYKSkKLSNlbmRpZgotCiAjaWZkZWYgX19HTlVDX18KICNkZWZpbmUgVU5VU0VEIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQogI2Vsc2UKQEAgLTEyOSwzMyArMTE1LDE0IEBACiByYWlzZV9lcnJtc2coY2hhciAqbXNnLCBQeU9iamVjdCAqcywgUHlfc3NpemVfdCBlbmQpOwogc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX3N0cmluZyhQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOwotc3RhdGljIGludAotX2NvbnZlcnRQeUludF9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgKnNpemVfcHRyKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1fY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKTsKK2VuY29kZXJfZW5jb2RlX2xvbmcoUHlFbmNvZGVyT2JqZWN0KiBzIFVOVVNFRCwgUHlPYmplY3QgKm9iaik7CiBzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKTsKIAogI2RlZmluZSBTX0NIQVIoYykgKGMgPj0gJyAnICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICciJykKICNkZWZpbmUgSVNfV0hJVEVTUEFDRShjKSAoKChjKSA9PSAnICcpIHx8ICgoYykgPT0gJ1x0JykgfHwgKChjKSA9PSAnXG4nKSB8fCAoKGMpID09ICdccicpKQogCi1zdGF0aWMgaW50Ci1fY29udmVydFB5SW50X0FzU3NpemVfdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCAqc2l6ZV9wdHIpCi17Ci0gICAgLyogUHlPYmplY3QgdG8gUHlfc3NpemVfdCBjb252ZXJ0ZXIgKi8KLSAgICAqc2l6ZV9wdHIgPSBQeUxvbmdfQXNTc2l6ZV90KG8pOwotICAgIGlmICgqc2l6ZV9wdHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1fY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKQotewotICAgIC8qIFB5X3NzaXplX3QgdG8gUHlPYmplY3QgY29udmVydGVyICovCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdCgqc2l6ZV9wdHIpOwotfQotCiBzdGF0aWMgUHlfc3NpemVfdAogYXNjaWlfZXNjYXBlX3VuaWNoYXIoUHlfVUNTNCBjLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpCiB7CkBAIC0xNzQsMTQgKzE0MSwxMyBAQAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGMgPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIC8qIFVURi0xNiBzdXJyb2dhdGUgcGFpciAqLwotICAgICAgICAgICAgICAgIFB5X1VDUzQgdiA9IGMgLSAweDEwMDAwOwotICAgICAgICAgICAgICAgIGMgPSAweGQ4MDAgfCAoKHYgPj4gMTApICYgMHgzZmYpOworICAgICAgICAgICAgICAgIFB5X1VDUzQgdiA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoYyk7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAxMikgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAgOCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAgNCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyAgICAgICkgJiAweGZdOwotICAgICAgICAgICAgICAgIGMgPSAweGRjMDAgfCAodiAmIDB4M2ZmKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gMTIpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gIDgpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gIDQpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgICAgICApICYgMHhmXTsKKyAgICAgICAgICAgICAgICBjID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGMpOwogICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICdcXCc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7CkBAIC0yNjgsMTMgKzIzNCwyMyBAQAogICAgICAgICBpZiAoZXJybXNnX2ZuID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHB5bXNnID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVycm1zZ19mbiwgIih6T08mKSIsIG1zZywgcywgX2NvbnZlcnRQeUludF9Gcm9tU3NpemVfdCwgJmVuZCk7CisgICAgcHltc2cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZXJybXNnX2ZuLCAiKHpPbikiLCBtc2csIHMsIGVuZCk7CiAgICAgaWYgKHB5bXNnKSB7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19WYWx1ZUVycm9yLCBweW1zZyk7CiAgICAgICAgIFB5X0RFQ1JFRihweW1zZyk7CiAgICAgfQogfQogCitzdGF0aWMgdm9pZAorcmFpc2Vfc3RvcF9pdGVyYXRpb24oUHlfc3NpemVfdCBpZHgpCit7CisgICAgUHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KGlkeCk7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1N0b3BJdGVyYXRpb24sIHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICB9Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBfYnVpbGRfcnZhbF9pbmRleF90dXBsZShQeU9iamVjdCAqcnZhbCwgUHlfc3NpemVfdCBpZHgpIHsKICAgICAvKiByZXR1cm4gKHJ2YWwsIGlkeCkgdHVwbGUsIHN0ZWFsaW5nIHJlZmVyZW5jZSB0byBydmFsICovCkBAIC0zNDQsNyArMzIwLDcgQEAKICAgICBidWYgPSBQeVVuaWNvZGVfREFUQShweXN0cik7CiAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHB5c3RyKTsKIAotICAgIGlmIChlbmQgPCAwIHx8IGxlbiA8PSBlbmQpIHsKKyAgICBpZiAoZW5kIDwgMCB8fCBsZW4gPCBlbmQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbmQgaXMgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQpAQCAtNDMzLDcgKzQwOSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogU3Vycm9nYXRlIHBhaXIgKi8KLSAgICAgICAgICAgIGlmICgoYyAmIDB4ZmMwMCkgPT0gMHhkODAwKSB7CisgICAgICAgICAgICBpZiAoUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURShjKSkgewogICAgICAgICAgICAgICAgIFB5X1VDUzQgYzIgPSAwOwogICAgICAgICAgICAgICAgIGlmIChlbmQgKyA2ID49IGxlbikgewogICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOwpAQCAtNDY0LDEzICs0NDAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChjMiAmIDB4ZmMwMCkgIT0gMHhkYzAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUoYzIpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgaGlnaCBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjIC0gMHhkODAwKSA8PCAxMCkgfCAoYzIgLSAweGRjMDApKTsKKyAgICAgICAgICAgICAgICBjID0gUHlfVU5JQ09ERV9KT0lOX1NVUlJPR0FURVMoYywgYzIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKGMgJiAweGZjMDApID09IDB4ZGMwMCkgeworICAgICAgICAgICAgZWxzZSBpZiAoUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFKGMpKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBsb3cgc3Vycm9nYXRlIiwgcHlzdHIsIGVuZCAtIDUpOwogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgIH0KQEAgLTUyNyw3ICs1MDMsNyBAQAogICAgIFB5X3NzaXplX3QgZW5kOwogICAgIFB5X3NzaXplX3QgbmV4dF9lbmQgPSAtMTsKICAgICBpbnQgc3RyaWN0ID0gMTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PJnxpOnNjYW5zdHJpbmciLCAmcHlzdHIsIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmZW5kLCAmc3RyaWN0KSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT258aTpzY2Fuc3RyaW5nIiwgJnB5c3RyLCAmZW5kLCAmc3RyaWN0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKQEAgLTY0MiwxMiArNjE4LDEyIEBACiAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCxzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgb2JqZWN0IGlzIG5vbi1lbXB0eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ30nKSB7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnfScpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICptZW1va2V5OwogCiAgICAgICAgICAgICAvKiByZWFkIGtleSAqLwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnIicpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnIicpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMiLCBweXN0ciwgaWR4KTsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC03MDQsMTEgKzY4MCw5IEBACiAgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgb2JqZWN0IGlzIGNsb3NlZCBvciB3ZSBkaWRuJ3QgZ2V0IHRoZSAsIGRlbGltaXRlciAqLwotICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIGJyZWFrOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnfScpIHsKKyAgICAgICAgICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ30nKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgeworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgewogICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC03MTksMTIgKzY5Myw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ30nICovCi0gICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICd9JykgewotICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0ciwgZW5kX2lkeCk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKIAogICAgIGlmIChoYXNfcGFpcnNfaG9vaykgewpAQCAtNzc2LDggKzc0NCw4IEBACiAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIGFycmF5IGlzIG5vbi1lbXB0eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnXScpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKIAogICAgICAgICAgICAgLyogcmVhZCBhbnkgSlNPTiB0ZXJtICAqLwogICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKQEAgLTc5NCwxMSArNzYyLDkgQEAKICAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSkpIGlkeCsrOwogCiAgICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBhcnJheSBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ10nKSB7CisgICAgICAgICAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICddJykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtODExLDcgKzc3Nyw3IEBACiAKICAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgc2hvdWxkIGJlICddJyAqLwogICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnXScpIHsKLSAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOworICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHB5c3RyLCBlbmRfaWR4KTsKICAgICAgICAgZ290byBiYWlsOwogICAgIH0KICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKQEAgLTg3OSw3ICs4NDUsNyBAQAogICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJy0nKSB7CiAgICAgICAgIGlkeCsrOwogICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgICAgIHJhaXNlX3N0b3BfaXRlcmF0aW9uKHN0YXJ0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtODk1LDcgKzg2MSw3IEBACiAgICAgfQogICAgIC8qIG5vIGludGVnZXIgZGlnaXRzLCBlcnJvciAqLwogICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICByYWlzZV9zdG9wX2l0ZXJhdGlvbihzdGFydCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtOTg4LDcgKzk1NCw3IEBACiAgICAgbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocHlzdHIpOwogCiAgICAgaWYgKGlkeCA+PSBsZW5ndGgpIHsKLSAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgcmFpc2Vfc3RvcF9pdGVyYXRpb24oaWR4KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMDkwLDcgKzEwNTYsNyBAQAogICAgIFB5U2Nhbm5lck9iamVjdCAqczsKICAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKICAgICBzID0gKFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJjpzY2FuX29uY2UiLCBrd2xpc3QsICZweXN0ciwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZpZHgpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPbjpzY2FuX29uY2UiLCBrd2xpc3QsICZweXN0ciwgJmlkeCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKQEAgLTEyOTEsOCArMTI1Nyw4IEBACiAKICAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsKICAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXNlbGY7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJjpfaXRlcmVuY29kZSIsIGt3bGlzdCwKLSAgICAgICAgJm9iaiwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZpbmRlbnRfbGV2ZWwpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPbjpfaXRlcmVuY29kZSIsIGt3bGlzdCwKKyAgICAgICAgJm9iaiwgJmluZGVudF9sZXZlbCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChfUHlBY2N1X0luaXQoJmFjYykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTMzOCwxMyArMTMwNCw0NSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZW5jb2Rlcl9lbmNvZGVfbG9uZyhQeUVuY29kZXJPYmplY3QqIHMgVU5VU0VELCBQeU9iamVjdCAqb2JqKQoreworICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5TG9uZyBhbmQgUHlMb25nIHN1YmNsYXNzZXMuCisgICAgICAgQ2FsbHMgaW50KCkgb24gUHlMb25nIHN1YmNsYXNzZXMgaW4gY2FzZSB0aGUgc3RyKCkgd2FzIGNoYW5nZWQuCisgICAgICAgQWRkZWQgc3BlY2lmaWNhbGx5IHRvIGRlYWwgd2l0aCBJbnRFbnVtLiAgU2VlIElzc3VlMTgyNjQuICovCisgICAgUHlPYmplY3QgKmVuY29kZWQsICpsb25nb2JqOworICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdChvYmopKSB7CisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxvbmdvYmogPSBQeU51bWJlcl9Mb25nKG9iaik7CisgICAgICAgIGlmIChsb25nb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBjb2VyY2UgaW50IHN1YmNsYXNzIHRvIGludCIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9TdHIobG9uZ29iaik7CisgICAgICAgIFB5X0RFQ1JFRihsb25nb2JqKTsKKyAgICB9CisgICAgcmV0dXJuIGVuY29kZWQ7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX2Zsb2F0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaikKIHsKLSAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUZsb2F0ICovCisgICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlGbG9hdC4KKyAgICAgICBNb2RpZmllZCB0byBjYWxsIGZsb2F0KCkgb24gZmxvYXQgc3ViY2xhc3NlcyBpbiBjYXNlIHRoZSBzdWJjbGFzcworICAgICAgIGNoYW5nZXMgdGhlIHJlcHIuICBTZWUgSXNzdWUxODI2NC4gICovCisgICAgUHlPYmplY3QgKmVuY29kZWQsICpmbG9hdG9iajsKICAgICBkb3VibGUgaSA9IFB5RmxvYXRfQVNfRE9VQkxFKG9iaik7CiAgICAgaWYgKCFQeV9JU19GSU5JVEUoaSkpIHsKICAgICAgICAgaWYgKCFzLT5hbGxvd19uYW4pIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiT3V0IG9mIHJhbmdlIGZsb2F0IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50Iik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQiCisgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoaSA+IDApIHsKQEAgLTEzNTcsOCArMTM1NSwyNCBAQAogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJOYU4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAvKiBVc2UgYSBiZXR0ZXIgZmxvYXQgZm9ybWF0IGhlcmU/ICovCi0gICAgcmV0dXJuIFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICAvKiBjb2VyY2UgZmxvYXQgc3ViY2xhc3NlcyB0byBmbG9hdCAocHJpbWFyaWx5IGZvciBFbnVtKSAqLworICAgIGlmIChQeUZsb2F0X0NoZWNrRXhhY3Qob2JqKSkgeworICAgICAgICAvKiBVc2UgYSBiZXR0ZXIgZmxvYXQgZm9ybWF0IGhlcmU/ICovCisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9SZXByKG9iaik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmbG9hdG9iaiA9IFB5TnVtYmVyX0Zsb2F0KG9iaik7CisgICAgICAgIGlmIChmbG9hdG9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gY29lcmNlIGZsb2F0IHN1YmNsYXNzIHRvIGZsb2F0IgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1JlcHIoZmxvYXRvYmopOworICAgICAgICBQeV9ERUNSRUYoZmxvYXRvYmopOworICAgIH0KKyAgICByZXR1cm4gZW5jb2RlZDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE0MDIsNyArMTQxNiw3IEBACiAgICAgICAgIHJldHVybiBfc3RlYWxfYWNjdW11bGF0ZShhY2MsIGVuY29kZWQpOwogICAgIH0KICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2sob2JqKSkgewotICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihvYmopOworICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZXJfZW5jb2RlX2xvbmcocywgb2JqKTsKICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcmV0dXJuIF9zdGVhbF9hY2N1bXVsYXRlKGFjYywgZW5jb2RlZCk7CkBAIC0xNTg3LDkgKzE2MDEsMTAgQEAKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKGtleSkpIHsKLSAgICAgICAgICAgIGtzdHIgPSBQeU9iamVjdF9TdHIoa2V5KTsKLSAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpCisgICAgICAgICAgICBrc3RyID0gZW5jb2Rlcl9lbmNvZGVfbG9uZyhzLCBrZXkpOworICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChza2lwa2V5cykgewogICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwppbmRleCBjYzY4OGJhLi40MDBjMzQ0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYworKysgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwpAQCAtMTQ3LDI2ICsxNDcsMzQgQEAKICAgICAvKiBob3BlZnVsbHksIHRoZSBsb2NhbGVjb252IHJlc3VsdCBzdXJ2aXZlcyB0aGUgQyBsaWJyYXJ5IGNhbGxzCiAgICAgICAgaW52b2x2ZWQgaGVyZWluICovCiAKKyNkZWZpbmUgUkVTVUxUKGtleSwgb2JqKVwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKG9iaiA9PSBOVUxMKSBcCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsgXAorICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCBrZXksIG9iaikgPCAwKSB7IFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOyBcCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsgXAorICAgICAgICB9IFwKKyAgICAgICAgUHlfREVDUkVGKG9iaik7IFwKKyAgICB9IHdoaWxlICgwKQorCiAjZGVmaW5lIFJFU1VMVF9TVFJJTkcocylcCi0gICAgeCA9IFB5VW5pY29kZV9EZWNvZGVMb2NhbGUobC0+cywgTlVMTCk7ICAgXAotICAgIGlmICgheCkgZ290byBmYWlsZWQ7XAotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgI3MsIHgpO1wKLSAgICBQeV9YREVDUkVGKHgpCisgICAgZG8geyBcCisgICAgICAgIHggPSBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKGwtPnMsIE5VTEwpOyBcCisgICAgICAgIFJFU1VMVCgjcywgeCk7IFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJFU1VMVF9JTlQoaSlcCi0gICAgeCA9IFB5TG9uZ19Gcm9tTG9uZyhsLT5pKTtcCi0gICAgaWYgKCF4KSBnb3RvIGZhaWxlZDtcCi0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAjaSwgeCk7XAotICAgIFB5X1hERUNSRUYoeCkKKyAgICBkbyB7IFwKKyAgICAgICAgeCA9IFB5TG9uZ19Gcm9tTG9uZyhsLT5pKTsgXAorICAgICAgICBSRVNVTFQoI2ksIHgpOyBcCisgICAgfSB3aGlsZSAoMCkKIAogICAgIC8qIE51bWVyaWMgaW5mb3JtYXRpb24gKi8KICAgICBSRVNVTFRfU1RSSU5HKGRlY2ltYWxfcG9pbnQpOwogICAgIFJFU1VMVF9TVFJJTkcodGhvdXNhbmRzX3NlcCk7CiAgICAgeCA9IGNvcHlfZ3JvdXBpbmcobC0+Z3JvdXBpbmcpOwotICAgIGlmICgheCkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAiZ3JvdXBpbmciLCB4KTsKLSAgICBQeV9YREVDUkVGKHgpOworICAgIFJFU1VMVCgiZ3JvdXBpbmciLCB4KTsKIAogICAgIC8qIE1vbmV0YXJ5IGluZm9ybWF0aW9uICovCiAgICAgUkVTVUxUX1NUUklORyhpbnRfY3Vycl9zeW1ib2wpOwpAQCAtMTc0LDEwICsxODIsOCBAQAogICAgIFJFU1VMVF9TVFJJTkcobW9uX2RlY2ltYWxfcG9pbnQpOwogICAgIFJFU1VMVF9TVFJJTkcobW9uX3Rob3VzYW5kc19zZXApOwogICAgIHggPSBjb3B5X2dyb3VwaW5nKGwtPm1vbl9ncm91cGluZyk7Ci0gICAgaWYgKCF4KQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICJtb25fZ3JvdXBpbmciLCB4KTsKLSAgICBQeV9YREVDUkVGKHgpOworICAgIFJFU1VMVCgibW9uX2dyb3VwaW5nIiwgeCk7CisKICAgICBSRVNVTFRfU1RSSU5HKHBvc2l0aXZlX3NpZ24pOwogICAgIFJFU1VMVF9TVFJJTkcobmVnYXRpdmVfc2lnbik7CiAgICAgUkVTVUxUX0lOVChpbnRfZnJhY19kaWdpdHMpOwpAQCAtMTkyLDcgKzE5OCw2IEBACiAKICAgZmFpbGVkOgogICAgIFB5X1hERUNSRUYocmVzdWx0KTsKLSAgICBQeV9YREVDUkVGKHgpOwogICAgIHJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sc3Byb2YuYyBiL01vZHVsZXMvX2xzcHJvZi5jCmluZGV4IGIwYTIyNmIuLjg5NDc4ODkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2xzcHJvZi5jCisrKyBiL01vZHVsZXMvX2xzcHJvZi5jCkBAIC0zNiwxMiArMzYsOCBAQAogI2Vycm9yICJUaGlzIG1vZHVsZSByZXF1aXJlcyBnZXR0aW1lb2ZkYXkoKSBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMhIgogI2VuZGlmCiAKLSNpZiAoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbHNlCiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWVzLmg+Ci0jZW5kaWYKIAogc3RhdGljIFBZX0xPTkdfTE9ORwogaHBUaW1lcih2b2lkKQpAQCAtMjI3LDcgKzIyMyw3IEBACiBuZXdQcm9maWxlckVudHJ5KFByb2ZpbGVyT2JqZWN0ICpwT2JqLCB2b2lkICprZXksIFB5T2JqZWN0ICp1c2VyT2JqKQogewogICAgIFByb2ZpbGVyRW50cnkgKnNlbGY7Ci0gICAgc2VsZiA9IChQcm9maWxlckVudHJ5KikgbWFsbG9jKHNpemVvZihQcm9maWxlckVudHJ5KSk7CisgICAgc2VsZiA9IChQcm9maWxlckVudHJ5KikgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlckVudHJ5KSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkgewogICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjM1LDcgKzIzMSw3IEBACiAgICAgdXNlck9iaiA9IG5vcm1hbGl6ZVVzZXJPYmoodXNlck9iaik7CiAgICAgaWYgKHVzZXJPYmogPT0gTlVMTCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBmcmVlKHNlbGYpOworICAgICAgICBQeU1lbV9GcmVlKHNlbGYpOwogICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI2OCw3ICsyNjQsNyBAQAogbmV3U3ViRW50cnkoUHJvZmlsZXJPYmplY3QgKnBPYmosICBQcm9maWxlckVudHJ5ICpjYWxsZXIsIFByb2ZpbGVyRW50cnkqIGVudHJ5KQogewogICAgIFByb2ZpbGVyU3ViRW50cnkgKnNlbGY7Ci0gICAgc2VsZiA9IChQcm9maWxlclN1YkVudHJ5KikgbWFsbG9jKHNpemVvZihQcm9maWxlclN1YkVudHJ5KSk7CisgICAgc2VsZiA9IChQcm9maWxlclN1YkVudHJ5KikgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlclN1YkVudHJ5KSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkgewogICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjg2LDcgKzI4Miw3IEBACiBzdGF0aWMgaW50IGZyZWVTdWJFbnRyeShyb3RhdGluZ19ub2RlX3QgKmhlYWRlciwgdm9pZCAqYXJnKQogewogICAgIFByb2ZpbGVyU3ViRW50cnkgKnN1YmVudHJ5ID0gKFByb2ZpbGVyU3ViRW50cnkqKSBoZWFkZXI7Ci0gICAgZnJlZShzdWJlbnRyeSk7CisgICAgUHlNZW1fRnJlZShzdWJlbnRyeSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI5NSw3ICsyOTEsNyBAQAogICAgIFByb2ZpbGVyRW50cnkgKmVudHJ5ID0gKFByb2ZpbGVyRW50cnkqKSBoZWFkZXI7CiAgICAgUm90YXRpbmdUcmVlX0VudW0oZW50cnktPmNhbGxzLCBmcmVlU3ViRW50cnksIE5VTEwpOwogICAgIFB5X0RFQ1JFRihlbnRyeS0+dXNlck9iaik7Ci0gICAgZnJlZShlbnRyeSk7CisgICAgUHlNZW1fRnJlZShlbnRyeSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMwNSwxMyArMzAxLDEzIEBACiAgICAgcE9iai0+cHJvZmlsZXJFbnRyaWVzID0gRU1QVFlfUk9UQVRJTkdfVFJFRTsKICAgICAvKiByZWxlYXNlIHRoZSBtZW1vcnkgaG9sZCBieSB0aGUgUHJvZmlsZXJDb250ZXh0cyAqLwogICAgIGlmIChwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0KSB7Ci0gICAgICAgIGZyZWUocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCk7CisgICAgICAgIFB5TWVtX0ZyZWUocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCk7CiAgICAgICAgIHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQgPSBOVUxMOwogICAgIH0KICAgICB3aGlsZSAocE9iai0+ZnJlZWxpc3RQcm9maWxlckNvbnRleHQpIHsKICAgICAgICAgUHJvZmlsZXJDb250ZXh0ICpjID0gcE9iai0+ZnJlZWxpc3RQcm9maWxlckNvbnRleHQ7CiAgICAgICAgIHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0ID0gYy0+cHJldmlvdXM7Ci0gICAgICAgIGZyZWUoYyk7CisgICAgICAgIFB5TWVtX0ZyZWUoYyk7CiAgICAgfQogICAgIHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0ID0gTlVMTDsKIH0KQEAgLTM5Nyw3ICszOTMsNyBAQAogICAgIGVsc2UgewogICAgICAgICAvKiBmcmVlIGxpc3QgZXhoYXVzdGVkLCBhbGxvY2F0ZSBhIG5ldyBvbmUgKi8KICAgICAgICAgcENvbnRleHQgPSAoUHJvZmlsZXJDb250ZXh0KikKLSAgICAgICAgICAgIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJDb250ZXh0KSk7CisgICAgICAgICAgICBQeU1lbV9NYWxsb2Moc2l6ZW9mKFByb2ZpbGVyQ29udGV4dCkpOwogICAgICAgICBpZiAocENvbnRleHQgPT0gTlVMTCkgewogICAgICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICAgICAgZ290byByZXN0b3JlUHllcnI7CkBAIC03MTYsNyArNzEyLDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCA9IHBDb250ZXh0LT5wcmV2aW91czsKICAgICAgICAgaWYgKHBDb250ZXh0KQotICAgICAgICAgICAgZnJlZShwQ29udGV4dCk7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHBDb250ZXh0KTsKICAgICB9CiAKIH0KQEAgLTg4OCwxMCArODg0LDEyIEBACiAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlByb2ZpbGVyIiwgKFB5T2JqZWN0ICopJlB5UHJvZmlsZXJfVHlwZSk7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRzRW50cnlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9lbnRyeV9kZXNjKTsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdHNTdWJFbnRyeVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX3N1YmVudHJ5X2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRzRW50cnlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX2VudHJ5X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRzU3ViRW50cnlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX3N1YmVudHJ5X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJlN0YXRzRW50cnlUeXBlKTsKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJlN0YXRzU3ViRW50cnlUeXBlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2x6bWFtb2R1bGUuYyBiL01vZHVsZXMvX2x6bWFtb2R1bGUuYwppbmRleCA2NDM2MTYwLi4xMjE3ZWQ0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sem1hbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fbHptYW1vZHVsZS5jCkBAIC01MSw2ICs1MSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECisgICAgbHptYV9hbGxvY2F0b3IgYWxsb2M7CiAgICAgbHptYV9zdHJlYW0gbHpzOwogICAgIGludCBmbHVzaGVkOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC02MCw2ICs2MSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECisgICAgbHptYV9hbGxvY2F0b3IgYWxsb2M7CiAgICAgbHptYV9zdHJlYW0gbHpzOwogICAgIGludCBjaGVjazsKICAgICBjaGFyIGVvZjsKQEAgLTExNyw2ICsxMTksMjIgQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkKgorUHlMem1hX01hbGxvYyh2b2lkICpvcGFxdWUsIHNpemVfdCBpdGVtcywgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKGl0ZW1zID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAvIHNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFB5TWVtX01hbGxvYygpIGNhbm5vdCBiZSB1c2VkOgorICAgICAgIHRoZSBHSUwgaXMgbm90IGhlbGQgd2hlbiBsem1hX2NvZGUoKSBpcyBjYWxsZWQgKi8KKyAgICByZXR1cm4gUHlNZW1fUmF3TWFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitQeUx6bWFfRnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKICNpZiBCVUZTSVogPCA4MTkyCiAjZGVmaW5lIElOSVRJQUxfQlVGRkVSX1NJWkUgODE5MgogI2Vsc2UKQEAgLTY2NCw2ICs2ODIsMTEgQEAKICAgICAgICAgaWYgKCF1aW50MzJfY29udmVydGVyKHByZXNldF9vYmosICZwcmVzZXQpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgc2VsZi0+YWxsb2Mub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT5hbGxvYy5hbGxvYyA9IFB5THptYV9NYWxsb2M7CisgICAgc2VsZi0+YWxsb2MuZnJlZSA9IFB5THptYV9GcmVlOworICAgIHNlbGYtPmx6cy5hbGxvY2F0b3IgPSAmc2VsZi0+YWxsb2M7CisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgewpAQCAtOTM5LDYgKzk2MiwxMSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgc2VsZi0+YWxsb2Mub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT5hbGxvYy5hbGxvYyA9IFB5THptYV9NYWxsb2M7CisgICAgc2VsZi0+YWxsb2MuZnJlZSA9IFB5THptYV9GcmVlOworICAgIHNlbGYtPmx6cy5hbGxvY2F0b3IgPSAmc2VsZi0+YWxsb2M7CisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCmluZGV4IDk0NjBjODkuLjFhYWYzNjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYworKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKQEAgLTEwLDI1ICsxMCwyMyBAQAogI2luY2x1ZGUgIm11bHRpcHJvY2Vzc2luZy5oIgogCiAKLVB5T2JqZWN0ICpQcm9jZXNzRXJyb3IsICpCdWZmZXJUb29TaG9ydDsKLQogLyoKICAqIEZ1bmN0aW9uIHdoaWNoIHJhaXNlcyBleGNlcHRpb25zIGJhc2VkIG9uIGVycm9yIGNvZGVzCiAgKi8KIAogUHlPYmplY3QgKgotbXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pCitfUHlNcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSkKIHsKICAgICBzd2l0Y2ggKG51bSkgewogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBjYXNlIE1QX1NUQU5EQVJEX0VSUk9SOgogICAgICAgICBpZiAoVHlwZSA9PSBOVUxMKQotICAgICAgICAgICAgVHlwZSA9IFB5RXhjX1dpbmRvd3NFcnJvcjsKKyAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19PU0Vycm9yOwogICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihUeXBlLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNUF9TT0NLRVRfRVJST1I6CiAgICAgICAgIGlmIChUeXBlID09IE5VTEwpCi0gICAgICAgICAgICBUeXBlID0gUHlFeGNfV2luZG93c0Vycm9yOworICAgICAgICAgICAgVHlwZSA9IFB5RXhjX09TRXJyb3I7CiAgICAgICAgIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFR5cGUsIFdTQUdldExhc3RFcnJvcigpKTsKICAgICAgICAgYnJlYWs7CiAjZWxzZSAvKiAhTVNfV0lORE9XUyAqLwpAQCAtMTAxLDEzICs5OSwxNSBAQAogewogICAgIEhBTkRMRSBoYW5kbGU7CiAgICAgUHlfYnVmZmVyIGJ1ZjsKLSAgICBpbnQgcmV0OworICAgIGludCByZXQsIGxlbmd0aDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAieSo6c2VuZCIgLCAmaGFuZGxlLCAmYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBsZW5ndGggPSAoaW50KVB5X01JTihidWYubGVuLCBJTlRfTUFYKTsKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXQgPSBzZW5kKChTT0NLRVQpIGhhbmRsZSwgYnVmLmJ1ZiwgYnVmLmxlbiwgMCk7CisgICAgcmV0ID0gc2VuZCgoU09DS0VUKSBoYW5kbGUsIGJ1Zi5idWYsIGxlbmd0aCwgMCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CkBAIC0xMjgsNiArMTI4LDcgQEAKICAgICB7InJlY3YiLCBtdWx0aXByb2Nlc3NpbmdfcmVjdiwgTUVUSF9WQVJBUkdTLCAiIn0sCiAgICAgeyJzZW5kIiwgbXVsdGlwcm9jZXNzaW5nX3NlbmQsIE1FVEhfVkFSQVJHUywgIiJ9LAogI2VuZGlmCisgICAgeyJzZW1fdW5saW5rIiwgX1B5TXBfc2VtX3VubGluaywgTUVUSF9WQVJBUkdTLCAiIn0sCiAgICAge05VTEx9CiB9OwogCkBAIC0xNTksMTkgKzE2MCwxMiBAQAogICAgIGlmICghbW9kdWxlKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIEdldCBjb3B5IG9mIEJ1ZmZlclRvb1Nob3J0ICovCi0gICAgdGVtcCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgibXVsdGlwcm9jZXNzaW5nIik7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBCdWZmZXJUb29TaG9ydCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGVtcCwgIkJ1ZmZlclRvb1Nob3J0Iik7Ci0gICAgUHlfWERFQ1JFRih0ZW1wKTsKLQogI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoZGVmaW5lZChIQVZFX1NFTV9PUEVOKSAmJiAhZGVmaW5lZChQT1NJWF9TRU1BUEhPUkVTX05PVF9FTkFCTEVEKSkKLSAgICAvKiBBZGQgU2VtTG9jayB0eXBlIHRvIG1vZHVsZSAqLwotICAgIGlmIChQeVR5cGVfUmVhZHkoJlNlbUxvY2tUeXBlKSA8IDApCisgICAgLyogQWRkIF9QeU1wX1NlbUxvY2sgdHlwZSB0byBtb2R1bGUgKi8KKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZfUHlNcF9TZW1Mb2NrVHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoJlNlbUxvY2tUeXBlKTsKKyAgICBQeV9JTkNSRUYoJl9QeU1wX1NlbUxvY2tUeXBlKTsKICAgICB7CiAgICAgICAgIFB5T2JqZWN0ICpweV9zZW1fdmFsdWVfbWF4OwogICAgICAgICAvKiBTb21lIHN5c3RlbXMgZGVmaW5lIFNFTV9WQUxVRV9NQVggYXMgYW4gdW5zaWduZWQgdmFsdWUgdGhhdApAQCAtMTgyLDEwICsxNzYsMTAgQEAKICAgICAgICAgICAgIHB5X3NlbV92YWx1ZV9tYXggPSBQeUxvbmdfRnJvbUxvbmcoU0VNX1ZBTFVFX01BWCk7CiAgICAgICAgIGlmIChweV9zZW1fdmFsdWVfbWF4ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoU2VtTG9ja1R5cGUudHBfZGljdCwgIlNFTV9WQUxVRV9NQVgiLAorICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhfUHlNcF9TZW1Mb2NrVHlwZS50cF9kaWN0LCAiU0VNX1ZBTFVFX01BWCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5X3NlbV92YWx1ZV9tYXgpOwogICAgIH0KLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobW9kdWxlLCAiU2VtTG9jayIsIChQeU9iamVjdCopJlNlbUxvY2tUeXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobW9kdWxlLCAiU2VtTG9jayIsIChQeU9iamVjdCopJl9QeU1wX1NlbUxvY2tUeXBlKTsKICNlbmRpZgogCiAgICAgLyogQWRkIGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmggYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKaW5kZXggZTNkZTliYS4uOWFlZWE4ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCisrKyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaApAQCAtOTEsMjMgKzkxLDEzIEBACiAjZGVmaW5lIE1QX1NPQ0tFVF9FUlJPUiAoLTEwMDIpCiAjZGVmaW5lIE1QX0VYQ0VQVElPTl9IQVNfQkVFTl9TRVQgKC0xMDAzKQogCi1QeU9iamVjdCAqbXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pOworUHlPYmplY3QgKl9QeU1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKTsKIAogLyoKICAqIEV4dGVybnMgLSBub3QgYWxsIHdpbGwgcmVhbGx5IGV4aXN0IG9uIGFsbCBwbGF0Zm9ybXMKICAqLwogCi1leHRlcm4gUHlPYmplY3QgKkJ1ZmZlclRvb1Nob3J0OwotZXh0ZXJuIFB5VHlwZU9iamVjdCBTZW1Mb2NrVHlwZTsKLWV4dGVybiBQeVR5cGVPYmplY3QgUGlwZUNvbm5lY3Rpb25UeXBlOwotCi0vKgotICogTWlzY2VsbGFuZW91cwotICovCi0KLSNpZm5kZWYgTUlOCi0jICBkZWZpbmUgTUlOKHgsIHkpICgoeCkgPCAoeSkgPyB4IDogeSkKLSMgIGRlZmluZSBNQVgoeCwgeSkgKCh4KSA+ICh5KSA/IHggOiB5KQotI2VuZGlmCitleHRlcm4gUHlUeXBlT2JqZWN0IF9QeU1wX1NlbUxvY2tUeXBlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlNcF9zZW1fdW5saW5rKFB5T2JqZWN0ICppZ25vcmUsIFB5T2JqZWN0ICphcmdzKTsKIAogI2VuZGlmIC8qIE1VTFRJUFJPQ0VTU0lOR19IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKaW5kZXggMmMyYjAyMC4uZGU4NWE5MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCisrKyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYwpAQCAtMTgsNiArMTgsNyBAQAogICAgIGludCBjb3VudDsKICAgICBpbnQgbWF4dmFsdWU7CiAgICAgaW50IGtpbmQ7CisgICAgY2hhciAqbmFtZTsKIH0gU2VtTG9ja09iamVjdDsKIAogI2RlZmluZSBJU01JTkUobykgKG8tPmNvdW50ID4gMCAmJiBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgPT0gby0+bGFzdF90aWQpCkBAIC00Myw3ICs0NCw3IEBACiB7CiAgICAgbG9uZyBwcmV2aW91czsKIAotICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdChoYW5kbGUsIDApKSB7CisgICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaGFuZGxlLCAwLCBGQUxTRSkpIHsKICAgICBjYXNlIFdBSVRfT0JKRUNUXzA6CiAgICAgICAgIGlmICghUmVsZWFzZVNlbWFwaG9yZShoYW5kbGUsIDEsICZwcmV2aW91cykpCiAgICAgICAgICAgICByZXR1cm4gTVBfU1RBTkRBUkRfRVJST1I7CkBAIC05OSw3ICsxMDAsNyBAQAogICAgIH0KIAogICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgY2FuIGFjcXVpcmUgd2l0aG91dCByZWxlYXNpbmcgdGhlIEdJTCBhbmQgYmxvY2tpbmcgKi8KLSAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdChzZWxmLT5oYW5kbGUsIDApID09IFdBSVRfT0JKRUNUXzApIHsKKyAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdEV4KHNlbGYtPmhhbmRsZSwgMCwgRkFMU0UpID09IFdBSVRfT0JKRUNUXzApIHsKICAgICAgICAgc2VsZi0+bGFzdF90aWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKICAgICAgICAgKytzZWxmLT5jb3VudDsKICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CkBAIC0xMTgsNyArMTE5LDcgQEAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaWYgKHNpZ2ludF9ldmVudCAhPSBOVUxMKQogICAgICAgICBSZXNldEV2ZW50KHNpZ2ludF9ldmVudCk7Ci0gICAgcmVzID0gV2FpdEZvck11bHRpcGxlT2JqZWN0cyhuaGFuZGxlcywgaGFuZGxlcywgRkFMU0UsIGZ1bGxfbXNlY3MpOworICAgIHJlcyA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHNFeChuaGFuZGxlcywgaGFuZGxlcywgRkFMU0UsIGZ1bGxfbXNlY3MsIEZBTFNFKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgLyogaGFuZGxlIHJlc3VsdCAqLwpAQCAtMjAwLDcgKzIwMSw3IEBACiAjaWZuZGVmIEhBVkVfU0VNX1RJTUVEV0FJVAogIyAgZGVmaW5lIHNlbV90aW1lZHdhaXQoc2VtLGRlYWRsaW5lKSBzZW1fdGltZWR3YWl0X3NhdmUoc2VtLGRlYWRsaW5lLF9zYXZlKQogCi1pbnQKK3N0YXRpYyBpbnQKIHNlbV90aW1lZHdhaXRfc2F2ZShzZW1fdCAqc2VtLCBzdHJ1Y3QgdGltZXNwZWMgKmRlYWRsaW5lLCBQeVRocmVhZFN0YXRlICpfc2F2ZSkKIHsKICAgICBpbnQgcmVzOwpAQCAtMzk3LDcgKzM5OCw4IEBACiAgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLW5ld3NlbWxvY2tvYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlLCBTRU1fSEFORExFIGhhbmRsZSwgaW50IGtpbmQsIGludCBtYXh2YWx1ZSkKK25ld3NlbWxvY2tvYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlLCBTRU1fSEFORExFIGhhbmRsZSwgaW50IGtpbmQsIGludCBtYXh2YWx1ZSwKKyAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSkKIHsKICAgICBTZW1Mb2NrT2JqZWN0ICpzZWxmOwogCkBAIC00MDksMjEgKzQxMSwyMiBAQAogICAgIHNlbGYtPmNvdW50ID0gMDsKICAgICBzZWxmLT5sYXN0X3RpZCA9IDA7CiAgICAgc2VsZi0+bWF4dmFsdWUgPSBtYXh2YWx1ZTsKKyAgICBzZWxmLT5uYW1lID0gbmFtZTsKICAgICByZXR1cm4gKFB5T2JqZWN0KilzZWxmOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogc2VtbG9ja19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgY2hhciBidWZmZXJbMjU2XTsKICAgICBTRU1fSEFORExFIGhhbmRsZSA9IFNFTV9GQUlMRUQ7Ci0gICAgaW50IGtpbmQsIG1heHZhbHVlLCB2YWx1ZTsKKyAgICBpbnQga2luZCwgbWF4dmFsdWUsIHZhbHVlLCB1bmxpbms7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImtpbmQiLCAidmFsdWUiLCAibWF4dmFsdWUiLCBOVUxMfTsKLSAgICBzdGF0aWMgaW50IGNvdW50ZXIgPSAwOworICAgIGNoYXIgKm5hbWUsICpuYW1lX2NvcHkgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2luZCIsICJ2YWx1ZSIsICJtYXh2YWx1ZSIsICJuYW1lIiwgInVubGluayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgImlpaSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2luZCwgJnZhbHVlLCAmbWF4dmFsdWUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJpaWlzaSIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2luZCwgJnZhbHVlLCAmbWF4dmFsdWUsICZuYW1lLCAmdW5saW5rKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoa2luZCAhPSBSRUNVUlNJVkVfTVVURVggJiYga2luZCAhPSBTRU1BUEhPUkUpIHsKQEAgLTQzMSwxOCArNDM0LDIzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFB5T1Nfc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIi9tcCVsZC0lZCIsIChsb25nKWdldHBpZCgpLCBjb3VudGVyKyspOworICAgIGlmICghdW5saW5rKSB7CisgICAgICAgIG5hbWVfY29weSA9IFB5TWVtX01hbGxvYyhzdHJsZW4obmFtZSkgKyAxKTsKKyAgICAgICAgaWYgKG5hbWVfY29weSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsdXJlOworICAgICAgICBzdHJjcHkobmFtZV9jb3B5LCBuYW1lKTsKKyAgICB9CiAKICAgICBTRU1fQ0xFQVJfRVJST1IoKTsKLSAgICBoYW5kbGUgPSBTRU1fQ1JFQVRFKGJ1ZmZlciwgdmFsdWUsIG1heHZhbHVlKTsKKyAgICBoYW5kbGUgPSBTRU1fQ1JFQVRFKG5hbWUsIHZhbHVlLCBtYXh2YWx1ZSk7CiAgICAgLyogT24gV2luZG93cyB3ZSBzaG91bGQgZmFpbCBpZiBHZXRMYXN0RXJyb3IoKT09RVJST1JfQUxSRUFEWV9FWElTVFMgKi8KICAgICBpZiAoaGFuZGxlID09IFNFTV9GQUlMRUQgfHwgU0VNX0dFVF9MQVNUX0VSUk9SKCkgIT0gMCkKICAgICAgICAgZ290byBmYWlsdXJlOwogCi0gICAgaWYgKFNFTV9VTkxJTksoYnVmZmVyKSA8IDApCisgICAgaWYgKHVubGluayAmJiBTRU1fVU5MSU5LKG5hbWUpIDwgMCkKICAgICAgICAgZ290byBmYWlsdXJlOwogCi0gICAgcmVzdWx0ID0gbmV3c2VtbG9ja29iamVjdCh0eXBlLCBoYW5kbGUsIGtpbmQsIG1heHZhbHVlKTsKKyAgICByZXN1bHQgPSBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUsIG5hbWVfY29weSk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIGdvdG8gZmFpbHVyZTsKIApAQCAtNDUxLDcgKzQ1OSw4IEBACiAgIGZhaWx1cmU6CiAgICAgaWYgKGhhbmRsZSAhPSBTRU1fRkFJTEVEKQogICAgICAgICBTRU1fQ0xPU0UoaGFuZGxlKTsKLSAgICBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgUHlNZW1fRnJlZShuYW1lX2NvcHkpOworICAgIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDYwLDEyICs0NjksMzAgQEAKIHsKICAgICBTRU1fSEFORExFIGhhbmRsZTsKICAgICBpbnQga2luZCwgbWF4dmFsdWU7CisgICAgY2hhciAqbmFtZSwgKm5hbWVfY29weSA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9TRU1fSEFORExFICJpaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZraW5kLCAmbWF4dmFsdWUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX1NFTV9IQU5ETEUgImlpeiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZraW5kLCAmbWF4dmFsdWUsICZuYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gbmV3c2VtbG9ja29iamVjdCh0eXBlLCBoYW5kbGUsIGtpbmQsIG1heHZhbHVlKTsKKyAgICBpZiAobmFtZSAhPSBOVUxMKSB7CisgICAgICAgIG5hbWVfY29weSA9IFB5TWVtX01hbGxvYyhzdHJsZW4obmFtZSkgKyAxKTsKKyAgICAgICAgaWYgKG5hbWVfY29weSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHN0cmNweShuYW1lX2NvcHksIG5hbWUpOworICAgIH0KKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgaWYgKG5hbWUgIT0gTlVMTCkgeworICAgICAgICBoYW5kbGUgPSBzZW1fb3BlbihuYW1lLCAwKTsKKyAgICAgICAgaWYgKGhhbmRsZSA9PSBTRU1fRkFJTEVEKSB7CisgICAgICAgICAgICBQeU1lbV9GcmVlKG5hbWVfY29weSk7CisgICAgICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gbmV3c2VtbG9ja29iamVjdCh0eXBlLCBoYW5kbGUsIGtpbmQsIG1heHZhbHVlLCBuYW1lX2NvcHkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDczLDYgKzUwMCw3IEBACiB7CiAgICAgaWYgKHNlbGYtPmhhbmRsZSAhPSBTRU1fRkFJTEVEKQogICAgICAgICBTRU1fQ0xPU0Uoc2VsZi0+aGFuZGxlKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPm5hbWUpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KIApAQCAtNDk4LDcgKzUyNiw3IEBACiAjZWxzZQogICAgIGludCBzdmFsOwogICAgIGlmIChTRU1fR0VUVkFMVUUoc2VsZi0+aGFuZGxlLCAmc3ZhbCkgPCAwKQotICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIC8qIHNvbWUgcG9zaXggaW1wbGVtZW50YXRpb25zIHVzZSBuZWdhdGl2ZSBudW1iZXJzIHRvIGluZGljYXRlCiAgICAgICAgdGhlIG51bWJlciBvZiB3YWl0aW5nIHRocmVhZHMgKi8KICAgICBpZiAoc3ZhbCA8IDApCkBAIC01MTQsMTYgKzU0MiwxNiBAQAogICAgIGlmIChzZW1fdHJ5d2FpdChzZWxmLT5oYW5kbGUpIDwgMCkgewogICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQogICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7Ci0gICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHNlbV9wb3N0KHNlbGYtPmhhbmRsZSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKICAgICB9CiAjZWxzZQogICAgIGludCBzdmFsOwogICAgIGlmIChTRU1fR0VUVkFMVUUoc2VsZi0+aGFuZGxlLCAmc3ZhbCkgPCAwKQotICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpc3ZhbCA9PSAwKTsKICNlbmRpZgogfQpAQCAtNTc0LDYgKzYwMiw4IEBACiAgICAgICIifSwKICAgICB7Im1heHZhbHVlIiwgVF9JTlQsIG9mZnNldG9mKFNlbUxvY2tPYmplY3QsIG1heHZhbHVlKSwgUkVBRE9OTFksCiAgICAgICIifSwKKyAgICB7Im5hbWUiLCBUX1NUUklORywgb2Zmc2V0b2YoU2VtTG9ja09iamVjdCwgbmFtZSksIFJFQURPTkxZLAorICAgICAiIn0sCiAgICAge05VTEx9CiB9OwogCkBAIC01ODEsNyArNjExLDcgQEAKICAqIFNlbWFwaG9yZSB0eXBlCiAgKi8KIAotUHlUeXBlT2JqZWN0IFNlbUxvY2tUeXBlID0geworUHlUeXBlT2JqZWN0IF9QeU1wX1NlbUxvY2tUeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgIC8qIHRwX25hbWUgICAgICAgICAgICovICJfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2siLAogICAgIC8qIHRwX2Jhc2ljc2l6ZSAgICAgICovIHNpemVvZihTZW1Mb2NrT2JqZWN0KSwKQEAgLTYyMSwzICs2NTEsMjMgQEAKICAgICAvKiB0cF9hbGxvYyAgICAgICAgICAqLyAwLAogICAgIC8qIHRwX25ldyAgICAgICAgICAgICovIHNlbWxvY2tfbmV3LAogfTsKKworLyoKKyAqIEZ1bmN0aW9uIHRvIHVubGluayBzZW1hcGhvcmUgbmFtZXMKKyAqLworCitQeU9iamVjdCAqCitfUHlNcF9zZW1fdW5saW5rKFB5T2JqZWN0ICppZ25vcmUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKm5hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMiLCAmbmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFNFTV9VTkxJTksobmFtZSkgPCAwKSB7CisgICAgICAgIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL29wZXJhdG9yLmMgYi9Nb2R1bGVzL19vcGVyYXRvci5jCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIE1vZHVsZXMvb3BlcmF0b3IuYwpyZW5hbWUgdG8gTW9kdWxlcy9fb3BlcmF0b3IuYwppbmRleCA1MTU2YjZiLi5lOGJlZjA0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL29wZXJhdG9yLmMKKysrIGIvTW9kdWxlcy9fb3BlcmF0b3IuYwpAQCAtMjA4LDYgKzIwOCwzMSBAQAogICAgIHJldHVybiAocmVzdWx0ID09IDApOwogfQogCitQeURvY19TVFJWQVIobGVuZ3RoX2hpbnRfX2RvY19fLAorImxlbmd0aF9oaW50KG9iaiwgZGVmYXVsdD0wKSAtPiBpbnRcbiIKKyJSZXR1cm4gYW4gZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBvYmouXG4iCisiVGhpcyBpcyB1c2VmdWwgZm9yIHByZXNpemluZyBjb250YWluZXJzIHdoZW4gYnVpbGRpbmcgZnJvbSBhblxuIgorIml0ZXJhYmxlLlxuIgorIlxuIgorIklmIHRoZSBvYmplY3Qgc3VwcG9ydHMgbGVuKCksIHRoZSByZXN1bHQgd2lsbCBiZVxuIgorImV4YWN0LiBPdGhlcndpc2UsIGl0IG1heSBvdmVyLSBvciB1bmRlci1lc3RpbWF0ZSBieSBhblxuIgorImFyYml0cmFyeSBhbW91bnQuIFRoZSByZXN1bHQgd2lsbCBiZSBhbiBpbnRlZ2VyID49IDAuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqbGVuZ3RoX2hpbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUgPSAwLCByZXM7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46bGVuZ3RoX2hpbnQiLCAmb2JqLCAmZGVmYXVsdHZhbHVlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzID0gUHlPYmplY3RfTGVuZ3RoSGludChvYmosIGRlZmF1bHR2YWx1ZSk7CisgICAgaWYgKHJlcyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisKKwogUHlEb2NfU1RSVkFSKGNvbXBhcmVfZGlnZXN0X19kb2NfXywKICJjb21wYXJlX2RpZ2VzdChhLCBiKSAtPiBib29sXG4iCiAiXG4iCkBAIC0yOTcsMTcgKzMyMiwxNSBAQAogLyogb3BlcmF0b3IgbWV0aG9kcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIHNwYW0xKE9QLERPQykgeyNPUCwgT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAotI2RlZmluZSBzcGFtMihPUCxBTFRPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB7I0FMVE9QLCBvcF8jI09QLCBNRVRIX1ZBUkFSR1MsIFB5RG9jX1NUUihET0MpfSwKKyNkZWZpbmUgc3BhbTIoT1AsRE9DKSB7I09QLCBvcF8jI09QLCBNRVRIX1ZBUkFSR1MsIFB5RG9jX1NUUihET0MpfSwKICNkZWZpbmUgc3BhbTFvKE9QLERPQykgeyNPUCwgT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LAotI2RlZmluZSBzcGFtMm8oT1AsQUxUT1AsRE9DKSB7I09QLCBvcF8jI09QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeyNBTFRPUCwgb3BfIyNPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCisjZGVmaW5lIHNwYW0ybyhPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LAogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG9wZXJhdG9yX21ldGhvZHNbXSA9IHsKIAogc3BhbTFvKHRydXRoLAogICJ0cnV0aChhKSAtLSBSZXR1cm4gVHJ1ZSBpZiBhIGlzIHRydWUsIEZhbHNlIG90aGVyd2lzZS4iKQotc3BhbTIoY29udGFpbnMsX19jb250YWluc19fLAorc3BhbTIoY29udGFpbnMsCiAgImNvbnRhaW5zKGEsIGIpIC0tIFNhbWUgYXMgYiBpbiBhIChub3RlIHJldmVyc2VkIG9wZXJhbmRzKS4iKQogc3BhbTEoaW5kZXhPZiwKICAiaW5kZXhPZihhLCBiKSAtLSBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IG9mIGIgaW4gYS4iKQpAQCAtMzE2LDU2ICszMzksNTggQEAKIAogc3BhbTEoaXNfLCAiaXNfKGEsIGIpIC0tIFNhbWUgYXMgYSBpcyBiLiIpCiBzcGFtMShpc19ub3QsICJpc19ub3QoYSwgYikgLS0gU2FtZSBhcyBhIGlzIG5vdCBiLiIpCi1zcGFtMm8oaW5kZXgsIF9faW5kZXhfXywgImluZGV4KGEpIC0tIFNhbWUgYXMgYS5fX2luZGV4X18oKSIpCi1zcGFtMihhZGQsX19hZGRfXywgImFkZChhLCBiKSAtLSBTYW1lIGFzIGEgKyBiLiIpCi1zcGFtMihzdWIsX19zdWJfXywgInN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLSBiLiIpCi1zcGFtMihtdWwsX19tdWxfXywgIm11bChhLCBiKSAtLSBTYW1lIGFzIGEgKiBiLiIpCi1zcGFtMihmbG9vcmRpdixfX2Zsb29yZGl2X18sICJmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy8gYi4iKQotc3BhbTIodHJ1ZWRpdixfX3RydWVkaXZfXywgInRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8gYi4iKQotc3BhbTIobW9kLF9fbW9kX18sICJtb2QoYSwgYikgLS0gU2FtZSBhcyBhICUgYi4iKQotc3BhbTJvKG5lZyxfX25lZ19fLCAibmVnKGEpIC0tIFNhbWUgYXMgLWEuIikKLXNwYW0ybyhwb3MsX19wb3NfXywgInBvcyhhKSAtLSBTYW1lIGFzICthLiIpCi1zcGFtMm8oYWJzLF9fYWJzX18sICJhYnMoYSkgLS0gU2FtZSBhcyBhYnMoYSkuIikKLXNwYW0ybyhpbnYsX19pbnZfXywgImludihhKSAtLSBTYW1lIGFzIH5hLiIpCi1zcGFtMm8oaW52ZXJ0LF9faW52ZXJ0X18sICJpbnZlcnQoYSkgLS0gU2FtZSBhcyB+YS4iKQotc3BhbTIobHNoaWZ0LF9fbHNoaWZ0X18sICJsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8IGIuIikKLXNwYW0yKHJzaGlmdCxfX3JzaGlmdF9fLCAicnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+PiBiLiIpCi1zcGFtMm8obm90XyxfX25vdF9fLCAibm90XyhhKSAtLSBTYW1lIGFzIG5vdCBhLiIpCi1zcGFtMihhbmRfLF9fYW5kX18sICJhbmRfKGEsIGIpIC0tIFNhbWUgYXMgYSAmIGIuIikKLXNwYW0yKHhvcixfX3hvcl9fLCAieG9yKGEsIGIpIC0tIFNhbWUgYXMgYSBeIGIuIikKLXNwYW0yKG9yXyxfX29yX18sICJvcl8oYSwgYikgLS0gU2FtZSBhcyBhIHwgYi4iKQotc3BhbTIoaWFkZCxfX2lhZGRfXywgImEgPSBpYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLiIpCi1zcGFtMihpc3ViLF9faXN1Yl9fLCAiYSA9IGlzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC09IGIuIikKLXNwYW0yKGltdWwsX19pbXVsX18sICJhID0gaW11bChhLCBiKSAtLSBTYW1lIGFzIGEgKj0gYi4iKQotc3BhbTIoaWZsb29yZGl2LF9faWZsb29yZGl2X18sICJhID0gaWZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLz0gYi4iKQotc3BhbTIoaXRydWVkaXYsX19pdHJ1ZWRpdl9fLCAiYSA9IGl0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvPSBiIikKLXNwYW0yKGltb2QsX19pbW9kX18sICJhID0gaW1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJT0gYi4iKQotc3BhbTIoaWxzaGlmdCxfX2lsc2hpZnRfXywgImEgPSBpbHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PD0gYi4iKQotc3BhbTIoaXJzaGlmdCxfX2lyc2hpZnRfXywgImEgPSBpcnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+Pj0gYi4iKQotc3BhbTIoaWFuZCxfX2lhbmRfXywgImEgPSBpYW5kKGEsIGIpIC0tIFNhbWUgYXMgYSAmPSBiLiIpCi1zcGFtMihpeG9yLF9faXhvcl9fLCAiYSA9IGl4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF49IGIuIikKLXNwYW0yKGlvcixfX2lvcl9fLCAiYSA9IGlvcihhLCBiKSAtLSBTYW1lIGFzIGEgfD0gYi4iKQotc3BhbTIoY29uY2F0LF9fY29uY2F0X18sCitzcGFtMm8oaW5kZXgsICJpbmRleChhKSAtLSBTYW1lIGFzIGEuX19pbmRleF9fKCkiKQorc3BhbTIoYWRkLCAiYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArIGIuIikKK3NwYW0yKHN1YiwgInN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLSBiLiIpCitzcGFtMihtdWwsICJtdWwoYSwgYikgLS0gU2FtZSBhcyBhICogYi4iKQorc3BhbTIoZmxvb3JkaXYsICJmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy8gYi4iKQorc3BhbTIodHJ1ZWRpdiwgInRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8gYi4iKQorc3BhbTIobW9kLCAibW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlIGIuIikKK3NwYW0ybyhuZWcsICJuZWcoYSkgLS0gU2FtZSBhcyAtYS4iKQorc3BhbTJvKHBvcywgInBvcyhhKSAtLSBTYW1lIGFzICthLiIpCitzcGFtMm8oYWJzLCAiYWJzKGEpIC0tIFNhbWUgYXMgYWJzKGEpLiIpCitzcGFtMm8oaW52LCAiaW52KGEpIC0tIFNhbWUgYXMgfmEuIikKK3NwYW0ybyhpbnZlcnQsICJpbnZlcnQoYSkgLS0gU2FtZSBhcyB+YS4iKQorc3BhbTIobHNoaWZ0LCAibHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PCBiLiIpCitzcGFtMihyc2hpZnQsICJyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+IGIuIikKK3NwYW0ybyhub3RfLCAibm90XyhhKSAtLSBTYW1lIGFzIG5vdCBhLiIpCitzcGFtMihhbmRfLCAiYW5kXyhhLCBiKSAtLSBTYW1lIGFzIGEgJiBiLiIpCitzcGFtMih4b3IsICJ4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF4gYi4iKQorc3BhbTIob3JfLCAib3JfKGEsIGIpIC0tIFNhbWUgYXMgYSB8IGIuIikKK3NwYW0yKGlhZGQsICJhID0gaWFkZChhLCBiKSAtLSBTYW1lIGFzIGEgKz0gYi4iKQorc3BhbTIoaXN1YiwgImEgPSBpc3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtPSBiLiIpCitzcGFtMihpbXVsLCAiYSA9IGltdWwoYSwgYikgLS0gU2FtZSBhcyBhICo9IGIuIikKK3NwYW0yKGlmbG9vcmRpdiwgImEgPSBpZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vPSBiLiIpCitzcGFtMihpdHJ1ZWRpdiwgImEgPSBpdHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLz0gYiIpCitzcGFtMihpbW9kLCAiYSA9IGltb2QoYSwgYikgLS0gU2FtZSBhcyBhICU9IGIuIikKK3NwYW0yKGlsc2hpZnQsICJhID0gaWxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDw9IGIuIikKK3NwYW0yKGlyc2hpZnQsICJhID0gaXJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj49IGIuIikKK3NwYW0yKGlhbmQsICJhID0gaWFuZChhLCBiKSAtLSBTYW1lIGFzIGEgJj0gYi4iKQorc3BhbTIoaXhvciwgImEgPSBpeG9yKGEsIGIpIC0tIFNhbWUgYXMgYSBePSBiLiIpCitzcGFtMihpb3IsICJhID0gaW9yKGEsIGIpIC0tIFNhbWUgYXMgYSB8PSBiLiIpCitzcGFtMihjb25jYXQsCiAgImNvbmNhdChhLCBiKSAtLSBTYW1lIGFzIGEgKyBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIikKLXNwYW0yKGljb25jYXQsX19pY29uY2F0X18sCitzcGFtMihpY29uY2F0LAogICJhID0gaWNvbmNhdChhLCBiKSAtLSBTYW1lIGFzIGEgKz0gYiwgZm9yIGEgYW5kIGIgc2VxdWVuY2VzLiIpCi1zcGFtMihnZXRpdGVtLF9fZ2V0aXRlbV9fLAorc3BhbTIoZ2V0aXRlbSwKICAiZ2V0aXRlbShhLCBiKSAtLSBTYW1lIGFzIGFbYl0uIikKLXNwYW0yKHNldGl0ZW0sX19zZXRpdGVtX18sCitzcGFtMihzZXRpdGVtLAogICJzZXRpdGVtKGEsIGIsIGMpIC0tIFNhbWUgYXMgYVtiXSA9IGMuIikKLXNwYW0yKGRlbGl0ZW0sX19kZWxpdGVtX18sCitzcGFtMihkZWxpdGVtLAogICJkZWxpdGVtKGEsIGIpIC0tIFNhbWUgYXMgZGVsIGFbYl0uIikKLXNwYW0yKHBvdyxfX3Bvd19fLCAicG93KGEsIGIpIC0tIFNhbWUgYXMgYSAqKiBiLiIpCi1zcGFtMihpcG93LF9faXBvd19fLCAiYSA9IGlwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqPSBiLiIpCi1zcGFtMihsdCxfX2x0X18sICJsdChhLCBiKSAtLSBTYW1lIGFzIGE8Yi4iKQotc3BhbTIobGUsX19sZV9fLCAibGUoYSwgYikgLS0gU2FtZSBhcyBhPD1iLiIpCi1zcGFtMihlcSxfX2VxX18sICJlcShhLCBiKSAtLSBTYW1lIGFzIGE9PWIuIikKLXNwYW0yKG5lLF9fbmVfXywgIm5lKGEsIGIpIC0tIFNhbWUgYXMgYSE9Yi4iKQotc3BhbTIoZ3QsX19ndF9fLCAiZ3QoYSwgYikgLS0gU2FtZSBhcyBhPmIuIikKLXNwYW0yKGdlLF9fZ2VfXywgImdlKGEsIGIpIC0tIFNhbWUgYXMgYT49Yi4iKQorc3BhbTIocG93LCAicG93KGEsIGIpIC0tIFNhbWUgYXMgYSAqKiBiLiIpCitzcGFtMihpcG93LCAiYSA9IGlwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqPSBiLiIpCitzcGFtMihsdCwgImx0KGEsIGIpIC0tIFNhbWUgYXMgYTxiLiIpCitzcGFtMihsZSwgImxlKGEsIGIpIC0tIFNhbWUgYXMgYTw9Yi4iKQorc3BhbTIoZXEsICJlcShhLCBiKSAtLSBTYW1lIGFzIGE9PWIuIikKK3NwYW0yKG5lLCAibmUoYSwgYikgLS0gU2FtZSBhcyBhIT1iLiIpCitzcGFtMihndCwgImd0KGEsIGIpIC0tIFNhbWUgYXMgYT5iLiIpCitzcGFtMihnZSwgImdlKGEsIGIpIC0tIFNhbWUgYXMgYT49Yi4iKQogCiAgICAgeyJfY29tcGFyZV9kaWdlc3QiLCAoUHlDRnVuY3Rpb24pY29tcGFyZV9kaWdlc3QsIE1FVEhfVkFSQVJHUywKICAgICAgY29tcGFyZV9kaWdlc3RfX2RvY19ffSwKKyAgICAgeyJsZW5ndGhfaGludCIsIChQeUNGdW5jdGlvbilsZW5ndGhfaGludCwgTUVUSF9WQVJBUkdTLAorICAgICBsZW5ndGhfaGludF9fZG9jX199LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiAKIH07CkBAIC04OTIsMTIgKzkxNywxMiBAQAogfTsKIAogCi0vKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAoKm11c3QqIGJlIGNhbGxlZCBQeUluaXRfb3BlcmF0b3IpICovCisvKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAoKm11c3QqIGJlIGNhbGxlZCBQeUluaXRfX29wZXJhdG9yKSAqLwogCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgb3BlcmF0b3Jtb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJvcGVyYXRvciIsCisgICAgIl9vcGVyYXRvciIsCiAgICAgb3BlcmF0b3JfZG9jLAogICAgIC0xLAogICAgIG9wZXJhdG9yX21ldGhvZHMsCkBAIC05MDgsNyArOTMzLDcgQEAKIH07CiAKIFB5TU9ESU5JVF9GVU5DCi1QeUluaXRfb3BlcmF0b3Iodm9pZCkKK1B5SW5pdF9fb3BlcmF0b3Iodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fcGlja2xlLmMgYi9Nb2R1bGVzL19waWNrbGUuYwppbmRleCBiYzNiNDA2Li5hMTRhMjU4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19waWNrbGUuYworKysgYi9Nb2R1bGVzL19waWNrbGUuYwpAQCAtNDM2LDYgKzQzNiw3IEBACiAgICAgbmV3LT5tdF90YWJsZSA9IFB5TWVtX01BTExPQyhzZWxmLT5tdF9hbGxvY2F0ZWQgKiBzaXplb2YoUHlNZW1vRW50cnkpKTsKICAgICBpZiAobmV3LT5tdF90YWJsZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5TWVtX0ZSRUUobmV3KTsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLT5tdF9hbGxvY2F0ZWQ7IGkrKykgewpAQCAtNTI5LDcgKzUzMCw3IEBACiAgICAgb2xkdGFibGUgPSBzZWxmLT5tdF90YWJsZTsKICAgICBzZWxmLT5tdF90YWJsZSA9IFB5TWVtX01BTExPQyhuZXdfc2l6ZSAqIHNpemVvZihQeU1lbW9FbnRyeSkpOwogICAgIGlmIChzZWxmLT5tdF90YWJsZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUob2xkdGFibGUpOworICAgICAgICBzZWxmLT5tdF90YWJsZSA9IG9sZHRhYmxlOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtNzc0LDE3ICs3NzUsMTQgQEAKICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAwOwogICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gMDsKICAgICBzZWxmLT5mYXN0X21lbW8gPSBOVUxMOwotCi0gICAgc2VsZi0+bWVtbyA9IFB5TWVtb1RhYmxlX05ldygpOwotICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4gPSBXUklURV9CVUZfU0laRTsKICAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKKworICAgIHNlbGYtPm1lbW8gPSBQeU1lbW9UYWJsZV9OZXcoKTsKICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuKTsKLSAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKSB7CisKKyAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMIHx8IHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTg3NCwxOCArODcyLDIxIEBACiBzdGF0aWMgaW50CiBfVW5waWNrbGVyX1NraXBDb25zdW1lZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlfc3NpemVfdCBjb25zdW1lZCA9IHNlbGYtPm5leHRfcmVhZF9pZHggLSBzZWxmLT5wcmVmZXRjaGVkX2lkeDsKKyAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOworICAgIFB5T2JqZWN0ICpyOwogCi0gICAgaWYgKGNvbnN1bWVkID4gMCkgewotICAgICAgICBQeU9iamVjdCAqcjsKLSAgICAgICAgYXNzZXJ0KHNlbGYtPnBlZWspOyAgLyogb3RoZXJ3aXNlIHdlIGRpZCBzb21ldGhpbmcgd3JvbmcgKi8KLSAgICAgICAgLyogVGhpcyBtYWtlcyBhbiB1c2VsZXNzIGNvcHkuLi4gKi8KLSAgICAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5yZWFkLCAibiIsIGNvbnN1bWVkKTsKLSAgICAgICAgaWYgKHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlfREVDUkVGKHIpOwotICAgICAgICBzZWxmLT5wcmVmZXRjaGVkX2lkeCA9IHNlbGYtPm5leHRfcmVhZF9pZHg7Ci0gICAgfQorICAgIGNvbnN1bWVkID0gc2VsZi0+bmV4dF9yZWFkX2lkeCAtIHNlbGYtPnByZWZldGNoZWRfaWR4OworICAgIGlmIChjb25zdW1lZCA8PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFzc2VydChzZWxmLT5wZWVrKTsgIC8qIG90aGVyd2lzZSB3ZSBkaWQgc29tZXRoaW5nIHdyb25nICovCisgICAgLyogVGhpcyBtYWtlcyBhbiB1c2VsZXNzIGNvcHkuLi4gKi8KKyAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPnJlYWQsICJuIiwgY29uc3VtZWQpOworICAgIGlmIChyID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeV9ERUNSRUYocik7CisKKyAgICBzZWxmLT5wcmVmZXRjaGVkX2lkeCA9IHNlbGYtPm5leHRfcmVhZF9pZHg7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDYsOCArMTAwNywxMCBAQAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdWx0KQogewogICAgIGNoYXIgKmlucHV0X2xpbmUgPSBQeU1lbV9SZWFsbG9jKHNlbGYtPmlucHV0X2xpbmUsIGxlbiArIDEpOwotICAgIGlmIChpbnB1dF9saW5lID09IE5VTEwpCisgICAgaWYgKGlucHV0X2xpbmUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgbWVtY3B5KGlucHV0X2xpbmUsIGxpbmUsIGxlbik7CiAgICAgaW5wdXRfbGluZVtsZW5dID0gJ1wwJzsKQEAgLTExMDQsOCArMTEwNywxMCBAQAogX1VucGlja2xlcl9OZXdNZW1vKFB5X3NzaXplX3QgbmV3X3NpemUpCiB7CiAgICAgUHlPYmplY3QgKiptZW1vID0gUHlNZW1fTUFMTE9DKG5ld19zaXplICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICBpZiAobWVtbyA9PSBOVUxMKQorICAgIGlmIChtZW1vID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG1lbXNldChtZW1vLCAwLCBuZXdfc2l6ZSAqIHNpemVvZihQeU9iamVjdCAqKSk7CiAgICAgcmV0dXJuIG1lbW87CiB9CkBAIC0xMTM2LDIwICsxMTQxLDYgQEAKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7Ci0gICAgaWYgKHNlbGYtPnN0YWNrID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtc2V0KCZzZWxmLT5idWZmZXIsIDAsIHNpemVvZihQeV9idWZmZXIpKTsKLQotICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOwotICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKLSAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCiAgICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOwogICAgIHNlbGYtPmlucHV0X2J1ZmZlciA9IE5VTEw7CkBAIC0xMTY3LDYgKzExNTgsMTUgQEAKICAgICBzZWxmLT5tYXJrc19zaXplID0gMDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSAwOworICAgIG1lbXNldCgmc2VsZi0+YnVmZmVyLCAwLCBzaXplb2YoUHlfYnVmZmVyKSk7CisgICAgc2VsZi0+bWVtb19zaXplID0gMzI7CisgICAgc2VsZi0+bWVtbyA9IF9VbnBpY2tsZXJfTmV3TWVtbyhzZWxmLT5tZW1vX3NpemUpOworICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7CisKKyAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMIHx8IHNlbGYtPnN0YWNrID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTEyMTMsOCArMTIxMyw4IEBACiAgICAgaWYgKGVycm9ycyA9PSBOVUxMKQogICAgICAgICBlcnJvcnMgPSAic3RyaWN0IjsKIAotICAgIHNlbGYtPmVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKLSAgICBzZWxmLT5lcnJvcnMgPSBzdHJkdXAoZXJyb3JzKTsKKyAgICBzZWxmLT5lbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAoZW5jb2RpbmcpOworICAgIHNlbGYtPmVycm9ycyA9IF9QeU1lbV9TdHJkdXAoZXJyb3JzKTsKICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCB8fCBzZWxmLT5lcnJvcnMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0xMzY0LDggKzEzNjQsMTAgQEAKIAogICBzZWFyY2g6CiAgICAgbW9kdWxlc19kaWN0ID0gUHlTeXNfR2V0T2JqZWN0KCJtb2R1bGVzIik7Ci0gICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKQorICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMubW9kdWxlcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpID0gMDsKICAgICBtb2R1bGVfbmFtZSA9IE5VTEw7CkBAIC0xNzQ4LDggKzE3NTAsMTAgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBpZiAobGF0aW4xID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygibGF0aW4xIik7Ci0gICAgICAgICAgICAgICAgaWYgKGxhdGluMSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGlmIChsYXRpbjEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZV9zdHIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiKE8oT08pKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjc19lbmNvZGUsIHVuaWNvZGVfc3RyLCBsYXRpbjEpOwpAQCAtMTg3Myw2MyArMTg3Nyw5NyBAQAogfQogCiBzdGF0aWMgaW50Cit3cml0ZV91dGY4KFBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKmRhdGEsIFB5X3NzaXplX3Qgc2l6ZSkKK3sKKyAgICBjaGFyIHBkYXRhWzVdOworCisjaWYgU0laRU9GX1NJWkVfVCA+IDQKKyAgICBpZiAoc2l6ZSA+IDB4ZmZmZmZmZmZVTCkgeworICAgICAgICAvKiBzdHJpbmcgdG9vIGxhcmdlICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgYSBzdHJpbmcgbGFyZ2VyIHRoYW4gNEdpQiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisKKyAgICBwZGF0YVswXSA9IEJJTlVOSUNPREU7CisgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikoc2l6ZSAmIDB4ZmYpOworICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDgpICYgMHhmZik7CisgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMTYpICYgMHhmZik7CisgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMjQpICYgMHhmZik7CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIHNpemVvZihwZGF0YSkpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGRhdGEsIHNpemUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlX3VuaWNvZGVfYmluYXJ5KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKmVuY29kZWQgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpkYXRhOworICAgIGludCByOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBkYXRhID0gUHlVbmljb2RlX0FzVVRGOEFuZFNpemUob2JqLCAmc2l6ZSk7CisgICAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHdyaXRlX3V0Zjgoc2VsZiwgZGF0YSwgc2l6ZSk7CisKKyAgICAvKiBJc3N1ZSAjODM4MzogZm9yIHN0cmluZ3Mgd2l0aCBsb25lIHN1cnJvZ2F0ZXMsIGZhbGxiYWNrIG9uIHRoZQorICAgICAgICJzdXJyb2dhdGVwYXNzIiBlcnJvciBoYW5kbGVyLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CisgICAgZW5jb2RlZCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcob2JqLCAidXRmLTgiLCAic3Vycm9nYXRlcGFzcyIpOworICAgIGlmIChlbmNvZGVkID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHIgPSB3cml0ZV91dGY4KHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAorICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpOworICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICByZXR1cm4gcjsKK30KKworc3RhdGljIGludAogc2F2ZV91bmljb2RlKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgUHlfc3NpemVfdCBzaXplOwotICAgIFB5T2JqZWN0ICplbmNvZGVkID0gTlVMTDsKLQogICAgIGlmIChzZWxmLT5iaW4pIHsKLSAgICAgICAgY2hhciBwZGF0YVs1XTsKLQotICAgICAgICBlbmNvZGVkID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhvYmosICJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIik7Ci0gICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpOwotICAgICAgICBpZiAoc2l6ZSA+IDB4ZmZmZmZmZmZMKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSBhIHN0cmluZyBsYXJnZXIgdGhhbiA0IEdpQiIpOwotICAgICAgICAgICAgZ290byBlcnJvcjsgICAgICAgICAgLyogc3RyaW5nIHRvbyBsYXJnZSAqLwotICAgICAgICB9Ci0KLSAgICAgICAgcGRhdGFbMF0gPSBCSU5VTklDT0RFOwotICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDgpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzNdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKLQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIDUpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAod3JpdGVfdW5pY29kZV9iaW5hcnkoc2VsZiwgb2JqKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqZW5jb2RlZDsKKyAgICAgICAgUHlfc3NpemVfdCBzaXplOwogICAgICAgICBjb25zdCBjaGFyIHVuaWNvZGVfb3AgPSBVTklDT0RFOwogCiAgICAgICAgIGVuY29kZWQgPSByYXdfdW5pY29kZV9lc2NhcGUob2JqKTsKICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZ1bmljb2RlX29wLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnVuaWNvZGVfb3AsIDEpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAKICAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCk7Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwgc2l6ZSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAKICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgUHlfREVDUkVGKGVuY29kZWQpOwogICAgIHJldHVybiAwOwotCi0gIGVycm9yOgotICAgIFB5X1hERUNSRUYoZW5jb2RlZCk7Ci0gICAgcmV0dXJuIC0xOwogfQogCiAvKiBBIGhlbHBlciBmb3Igc2F2ZV90dXBsZS4gIFB1c2ggdGhlIGxlbiBlbGVtZW50cyBpbiB0dXBsZSB0IG9uIHRoZSBzdGFjay4gKi8KQEAgLTQxNzEsMzYgKzQyMDksMjMgQEAKIAogICAgIGlmICgobGVuID0gX1VucGlja2xlcl9SZWFkbGluZShzZWxmLCAmcykpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChsZW4gPCAyKQotICAgICAgICByZXR1cm4gYmFkX3JlYWRsaW5lKCk7Ci0gICAgaWYgKChzID0gc3RyZHVwKHMpKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KKyAgICAvKiBTdHJpcCB0aGUgbmV3bGluZSAqLworICAgIGxlbi0tOwogICAgIC8qIFN0cmlwIG91dGVybW9zdCBxdW90ZXMgKi8KLSAgICB3aGlsZSAobGVuID4gMCAmJiBzW2xlbiAtIDFdIDw9ICcgJykKLSAgICAgICAgbGVuLS07Ci0gICAgaWYgKGxlbiA+IDEgJiYgc1swXSA9PSAnIicgJiYgc1tsZW4gLSAxXSA9PSAnIicpIHsKLSAgICAgICAgc1tsZW4gLSAxXSA9ICdcMCc7Ci0gICAgICAgIHAgPSBzICsgMTsKLSAgICAgICAgbGVuIC09IDI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGxlbiA+IDEgJiYgc1swXSA9PSAnXCcnICYmIHNbbGVuIC0gMV0gPT0gJ1wnJykgewotICAgICAgICBzW2xlbiAtIDFdID0gJ1wwJzsKKyAgICBpZiAobGVuID49IDIgJiYgc1swXSA9PSBzW2xlbiAtIDFdICYmIChzWzBdID09ICdcJycgfHwgc1swXSA9PSAnIicpKSB7CiAgICAgICAgIHAgPSBzICsgMTsKICAgICAgICAgbGVuIC09IDI7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBmcmVlKHMpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImluc2VjdXJlIHN0cmluZyBwaWNrbGUiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgU1RSSU5HIG9wY29kZSBhcmd1bWVudCBtdXN0IGJlIHF1b3RlZCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGFzc2VydChsZW4gPj0gMCk7CiAKICAgICAvKiBVc2UgdGhlIFB5Qnl0ZXMgQVBJIHRvIGRlY29kZSB0aGUgc3RyaW5nLCBzaW5jZSB0aGF0IGlzIHdoYXQgaXMgdXNlZAogICAgICAgIHRvIGVuY29kZSwgYW5kIHRoZW4gY29lcmNlIHRoZSByZXN1bHQgdG8gVW5pY29kZS4gKi8KICAgICBieXRlcyA9IFB5Qnl0ZXNfRGVjb2RlRXNjYXBlKHAsIGxlbiwgTlVMTCwgMCwgTlVMTCk7Ci0gICAgZnJlZShzKTsKICAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChieXRlcywgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7CkBAIC00MjI2LDggKzQyNTEsNyBAQAogICAgIGlmICh4IDwgMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJCSU5CWVRFUyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlemQgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgKLSAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNDM1MSw4ICs0Mzc1LDcgQEAKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQklOVU5JQ09ERSBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlemQgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgKLSAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNTQwNyw5ICs1NDMwLDYgQEAKICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogYW5kIHdlIGFyZSBkb25lISAqLwogICAgIH0KIAotICAgIGlmIChfVW5waWNrbGVyX1NraXBDb25zdW1lZChzZWxmKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgLyogWFhYOiBJdCBpcyBub3QgY2xlYXIgd2hhdCB0aGlzIGlzIGFjdHVhbGx5IGZvci4gKi8KICAgICBpZiAoKGVyciA9IFB5RXJyX09jY3VycmVkKCkpKSB7CiAgICAgICAgIGlmIChlcnIgPT0gUHlFeGNfRU9GRXJyb3IpIHsKQEAgLTU0MTgsNiArNTQzOCw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGlmIChfVW5waWNrbGVyX1NraXBDb25zdW1lZChzZWxmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQpAQCAtNTUyNiw4ICs1NTQ5LDEwIEBACiAgICAgfQogCiAgICAgbW9kdWxlc19kaWN0ID0gUHlTeXNfR2V0T2JqZWN0KCJtb2R1bGVzIik7Ci0gICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKQorICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMubW9kdWxlcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBtb2R1bGUgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihtb2R1bGVzX2RpY3QsIG1vZHVsZV9uYW1lKTsKICAgICBpZiAobW9kdWxlID09IE5VTEwpIHsKQEAgLTU1NzEsOCArNTU5Niw4IEBACiAgICAgX1VucGlja2xlcl9NZW1vQ2xlYW51cChzZWxmKTsKICAgICBQeU1lbV9GcmVlKHNlbGYtPm1hcmtzKTsKICAgICBQeU1lbV9GcmVlKHNlbGYtPmlucHV0X2xpbmUpOwotICAgIGZyZWUoc2VsZi0+ZW5jb2RpbmcpOwotICAgIGZyZWUoc2VsZi0+ZXJyb3JzKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVuY29kaW5nKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVycm9ycyk7CiAKICAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCAqKXNlbGYpOwogfQpAQCAtNTYwOCw5ICs1NjMzLDkgQEAKICAgICBzZWxmLT5tYXJrcyA9IE5VTEw7CiAgICAgUHlNZW1fRnJlZShzZWxmLT5pbnB1dF9saW5lKTsKICAgICBzZWxmLT5pbnB1dF9saW5lID0gTlVMTDsKLSAgICBmcmVlKHNlbGYtPmVuY29kaW5nKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVuY29kaW5nKTsKICAgICBzZWxmLT5lbmNvZGluZyA9IE5VTEw7Ci0gICAgZnJlZShzZWxmLT5lcnJvcnMpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZXJyb3JzKTsKICAgICBzZWxmLT5lcnJvcnMgPSBOVUxMOwogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19wb3NpeHN1YnByb2Nlc3MuYyBiL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCmluZGV4IDhkNjU1MzAuLmEyZDcwMjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCisrKyBiL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCkBAIC0zNSw3ICszNSw3IEBACiAjIGRlZmluZSBGRF9ESVIgIi9wcm9jL3NlbGYvZmQiCiAjZW5kaWYKIAotI2RlZmluZSBQT1NJWF9DQUxMKGNhbGwpICAgaWYgKChjYWxsKSA9PSAtMSkgZ290byBlcnJvcgorI2RlZmluZSBQT1NJWF9DQUxMKGNhbGwpICAgZG8geyBpZiAoKGNhbGwpID09IC0xKSBnb3RvIGVycm9yOyB9IHdoaWxlICgwKQogCiAKIC8qIE1heGltdW0gZmlsZSBkZXNjcmlwdG9yLCBpbml0aWFsaXplZCBvbiBtb2R1bGUgbG9hZC4gKi8KQEAgLTg3LDcgKzg3LDcgQEAKICAgICBpZiAoc3RhdCgiL2RldiIsICZkZXZfc3RhdCkgIT0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHN0YXQoRkRfRElSLCAmZGV2X2ZkX3N0YXQpICE9IDApCi0gICAgICAgIHJldHVybiAwOyAKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGRldl9zdGF0LnN0X2RldiA9PSBkZXZfZmRfc3RhdC5zdF9kZXYpCiAgICAgICAgIHJldHVybiAwOyAgLyogLyA9PSAvZGV2ID09IC9kZXYvZmQgbWVhbnMgaXQgaXMgc3RhdGljLiAjZmFpbCAqLwogICAgIHJldHVybiAxOwpAQCAtMTM2LDYgKzEzNiwyOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50CittYWtlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICpweV9mZHNfdG9fa2VlcCwgaW50IGVycnBpcGVfd3JpdGUpCit7CisgICAgUHlfc3NpemVfdCBpLCBsZW47CisKKyAgICBsZW4gPSBQeVNlcXVlbmNlX0xlbmd0aChweV9mZHNfdG9fa2VlcCk7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIFB5T2JqZWN0KiBmZG9iaiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShweV9mZHNfdG9fa2VlcCwgaSk7CisgICAgICAgIGxvbmcgZmQgPSBQeUxvbmdfQXNMb25nKGZkb2JqKTsKKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyAgICAgICAgYXNzZXJ0KDAgPD0gZmQgJiYgZmQgPD0gSU5UX01BWCk7CisgICAgICAgIGlmIChmZCA9PSBlcnJwaXBlX3dyaXRlKSB7CisgICAgICAgICAgICAvKiBlcnJwaXBlX3dyaXRlIGlzIHBhcnQgb2YgcHlfZmRzX3RvX2tlZXAuIEl0IG11c3QgYmUgY2xvc2VkIGF0CisgICAgICAgICAgICAgICBleGVjKCksIGJ1dCBrZXB0IG9wZW4gaW4gdGhlIGNoaWxkIHByb2Nlc3MgdW50aWwgZXhlYygpIGlzCisgICAgICAgICAgICAgICBjYWxsZWQuICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZSgoaW50KWZkLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiAKIC8qIENsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSByYW5nZSBzdGFydF9mZCBpbmNsdXNpdmUgdG8KICAqIGVuZF9mZCBleGNsdXNpdmUgZXhjZXB0IGZvciB0aG9zZSBpbiBweV9mZHNfdG9fa2VlcC4gIElmIHRoZQpAQCAtMjA1LDE4ICsyMjgsOCBAQAogICAgIGludCBmZF9kaXJfZmQ7CiAgICAgaWYgKHN0YXJ0X2ZkID49IGVuZF9mZCkKICAgICAgICAgcmV0dXJuOwotI2lmZGVmIE9fQ0xPRVhFQwotICAgIGZkX2Rpcl9mZCA9IG9wZW4oRkRfRElSLCBPX1JET05MWSB8IE9fQ0xPRVhFQywgMCk7Ci0jZWxzZQotICAgIGZkX2Rpcl9mZCA9IG9wZW4oRkRfRElSLCBPX1JET05MWSwgMCk7Ci0jaWZkZWYgRkRfQ0xPRVhFQwotICAgIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKGZkX2Rpcl9mZCwgRl9HRVRGRCk7Ci0gICAgICAgIGlmIChvbGQgIT0gLTEpCi0gICAgICAgICAgICBmY250bChmZF9kaXJfZmQsIEZfU0VURkQsIG9sZCB8IEZEX0NMT0VYRUMpOwotICAgIH0KLSNlbmRpZgotI2VuZGlmCisKKyAgICBmZF9kaXJfZmQgPSBfUHlfb3BlbihGRF9ESVIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmRfZGlyX2ZkID09IC0xKSB7CiAgICAgICAgIC8qIE5vIHdheSB0byBnZXQgYSBsaXN0IG9mIG9wZW4gZmRzLiAqLwogICAgICAgICBfY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKHN0YXJ0X2ZkLCBlbmRfZmQsIHB5X2Zkc190b19rZWVwKTsKQEAgLTM1NiwxNiArMzY5LDE2IEBACiAgICAgLyogQnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIGEgaGV4IGludGVnZXIuICBXZSBjYW4ndCBtYWxsb2MuICovCiAgICAgY2hhciBoZXhfZXJybm9bc2l6ZW9mKHNhdmVkX2Vycm5vKSoyKzFdOwogCisgICAgaWYgKG1ha2VfaW5oZXJpdGFibGUocHlfZmRzX3RvX2tlZXAsIGVycnBpcGVfd3JpdGUpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKwogICAgIC8qIENsb3NlIHBhcmVudCdzIHBpcGUgZW5kcy4gKi8KLSAgICBpZiAocDJjd3JpdGUgIT0gLTEpIHsKKyAgICBpZiAocDJjd3JpdGUgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UocDJjd3JpdGUpKTsKLSAgICB9Ci0gICAgaWYgKGMycHJlYWQgIT0gLTEpIHsKKyAgICBpZiAoYzJwcmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShjMnByZWFkKSk7Ci0gICAgfQotICAgIGlmIChlcnJyZWFkICE9IC0xKSB7CisgICAgaWYgKGVycnJlYWQgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoZXJycmVhZCkpOwotICAgIH0KICAgICBQT1NJWF9DQUxMKGNsb3NlKGVycnBpcGVfcmVhZCkpOwogCiAgICAgLyogV2hlbiBkdXBpbmcgZmRzLCBpZiB0aGVyZSBhcmlzZXMgYSBzaXR1YXRpb24gd2hlcmUgb25lIG9mIHRoZSBmZHMgaXMKQEAgLTM3OSwzOCArMzkyLDM0IEBACiAgICAgICAgZHVwMigpIHJlbW92ZXMgdGhlIENMT0VYRUMgZmxhZyBidXQgd2UgbXVzdCBkbyBpdCBvdXJzZWx2ZXMgaWYgZHVwMigpCiAgICAgICAgd291bGQgYmUgYSBuby1vcCAoaXNzdWUgIzEwODA2KS4gKi8KICAgICBpZiAocDJjcmVhZCA9PSAwKSB7Ci0gICAgICAgIGludCBvbGQgPSBmY250bChwMmNyZWFkLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKHAyY3JlYWQsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKHAyY3JlYWQgIT0gLTEpIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUocDJjcmVhZCwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocDJjcmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChkdXAyKHAyY3JlYWQsIDApKTsgIC8qIHN0ZGluICovCi0gICAgfQorCiAgICAgaWYgKGMycHdyaXRlID09IDEpIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKGMycHdyaXRlLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGMycHdyaXRlLCBGX1NFVEZELCBvbGQgJiB+RkRfQ0xPRVhFQyk7Ci0gICAgfSBlbHNlIGlmIChjMnB3cml0ZSAhPSAtMSkgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShjMnB3cml0ZSwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSBpZiAoYzJwd3JpdGUgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoZHVwMihjMnB3cml0ZSwgMSkpOyAgLyogc3Rkb3V0ICovCi0gICAgfQorCiAgICAgaWYgKGVycndyaXRlID09IDIpIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKGVycndyaXRlLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGVycndyaXRlLCBGX1NFVEZELCBvbGQgJiB+RkRfQ0xPRVhFQyk7Ci0gICAgfSBlbHNlIGlmIChlcnJ3cml0ZSAhPSAtMSkgewotICAgICAgICBQT1NJWF9DQUxMKGR1cDIoZXJyd3JpdGUsIDIpKTsgIC8qIHN0ZGVyciAqLworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShlcnJ3cml0ZSwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CisgICAgZWxzZSBpZiAoZXJyd3JpdGUgIT0gLTEpCisgICAgICAgIFBPU0lYX0NBTEwoZHVwMihlcnJ3cml0ZSwgMikpOyAgLyogc3RkZXJyICovCiAKICAgICAvKiBDbG9zZSBwaXBlIGZkcy4gIE1ha2Ugc3VyZSB3ZSBkb24ndCBjbG9zZSB0aGUgc2FtZSBmZCBtb3JlIHRoYW4gKi8KICAgICAvKiBvbmNlLCBvciBzdGFuZGFyZCBmZHMuICovCi0gICAgaWYgKHAyY3JlYWQgPiAyKSB7CisgICAgaWYgKHAyY3JlYWQgPiAyKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKHAyY3JlYWQpKTsKLSAgICB9Ci0gICAgaWYgKGMycHdyaXRlID4gMiAmJiBjMnB3cml0ZSAhPSBwMmNyZWFkKSB7CisgICAgaWYgKGMycHdyaXRlID4gMiAmJiBjMnB3cml0ZSAhPSBwMmNyZWFkKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGMycHdyaXRlKSk7Ci0gICAgfQotICAgIGlmIChlcnJ3cml0ZSAhPSBjMnB3cml0ZSAmJiBlcnJ3cml0ZSAhPSBwMmNyZWFkICYmIGVycndyaXRlID4gMikgeworICAgIGlmIChlcnJ3cml0ZSAhPSBjMnB3cml0ZSAmJiBlcnJ3cml0ZSAhPSBwMmNyZWFkICYmIGVycndyaXRlID4gMikKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJ3cml0ZSkpOwotICAgIH0KIAogICAgIGlmIChjd2QpCiAgICAgICAgIFBPU0lYX0NBTEwoY2hkaXIoY3dkKSk7CkBAIC00OTIsNyArNTAxLDcgQEAKICAgICAgICAgLyogV2UgY2FuJ3QgY2FsbCBzdHJlcnJvcihzYXZlZF9lcnJubykuICBJdCBpcyBub3QgYXN5bmMgc2lnbmFsIHNhZmUuCiAgICAgICAgICAqIFRoZSBwYXJlbnQgcHJvY2VzcyB3aWxsIGxvb2sgdGhlIGVycm9yIG1lc3NhZ2UgdXAuICovCiAgICAgfSBlbHNlIHsKLSAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgIlJ1bnRpbWVFcnJvcjowOiIsIDE1KTsKKyAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgIlN1YnByb2Nlc3NFcnJvcjowOiIsIDE4KTsKICAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgZXJyX21zZywgc3RybGVuKGVycl9tc2cpKTsKICAgICB9CiAgICAgaWYgKHVudXNlZCkgcmV0dXJuOyAgLyogc2lsbHk/IHllcyEgYXZvaWRzIGdjYyBjb21waWxlciB3YXJuaW5nLiAqLwpAQCAtNTQ0LDcgKzU1Myw3IEBACiAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGlzZW5hYmxlZCk7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGRpc2FibGUpOwotICAgICAgICAKKwogICAgICAgICBnY19tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImdjIik7CiAgICAgICAgIGlmIChnY19tb2R1bGUgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzIxLDUyICs3MzAsNiBAQAogUmFpc2VzOiBPbmx5IG9uIGFuIGVycm9yIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy5cblwKICIpOwogCi1QeURvY19TVFJWQVIoc3VicHJvY2Vzc19jbG9leGVjX3BpcGVfZG9jLAotImNsb2V4ZWNfcGlwZSgpIC0+IChyZWFkX2VuZCwgd3JpdGVfZW5kKVxuXG5cCi1DcmVhdGUgYSBwaXBlIHdob3NlIGVuZHMgaGF2ZSB0aGUgY2xvZXhlYyBmbGFnIHNldC4iKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXN1YnByb2Nlc3NfY2xvZXhlY19waXBlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQotewotICAgIGludCBmZHNbMl07Ci0gICAgaW50IHJlczsKLSNpZmRlZiBIQVZFX1BJUEUyCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IHBpcGUyKGZkcywgT19DTE9FWEVDKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgIT0gMCAmJiBlcnJubyA9PSBFTk9TWVMpCi0gICAgewotICAgICAgICB7Ci0jZW5kaWYKLSAgICAgICAgLyogV2UgaG9sZCB0aGUgR0lMIHdoaWNoIG9mZmVycyBzb21lIHByb3RlY3Rpb24gZnJvbSBvdGhlciBjb2RlIGNhbGxpbmcKLSAgICAgICAgICogZm9yaygpIGJlZm9yZSB0aGUgQ0xPRVhFQyBmbGFncyBoYXZlIGJlZW4gc2V0IGJ1dCB3ZSBjYW4ndCBndWFyYW50ZWUKLSAgICAgICAgICogYW55dGhpbmcgd2l0aG91dCBwaXBlMigpLiAqLwotICAgICAgICBsb25nIG9sZGZsYWdzOwotCi0gICAgICAgIHJlcyA9IHBpcGUoZmRzKTsKLQotICAgICAgICBpZiAocmVzID09IDApIHsKLSAgICAgICAgICAgIG9sZGZsYWdzID0gZmNudGwoZmRzWzBdLCBGX0dFVEZELCAwKTsKLSAgICAgICAgICAgIGlmIChvbGRmbGFncyA8IDApIHJlcyA9IG9sZGZsYWdzOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXMgPT0gMCkKLSAgICAgICAgICAgIHJlcyA9IGZjbnRsKGZkc1swXSwgRl9TRVRGRCwgb2xkZmxhZ3MgfCBGRF9DTE9FWEVDKTsKLQotICAgICAgICBpZiAocmVzID09IDApIHsKLSAgICAgICAgICAgIG9sZGZsYWdzID0gZmNudGwoZmRzWzFdLCBGX0dFVEZELCAwKTsKLSAgICAgICAgICAgIGlmIChvbGRmbGFncyA8IDApIHJlcyA9IG9sZGZsYWdzOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXMgPT0gMCkKLSAgICAgICAgICAgIHJlcyA9IGZjbnRsKGZkc1sxXSwgRl9TRVRGRCwgb2xkZmxhZ3MgfCBGRF9DTE9FWEVDKTsKLSNpZmRlZiBIQVZFX1BJUEUyCi0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAocmVzICE9IDApCi0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmZHNbMF0sIGZkc1sxXSk7Ci19Ci0KIC8qIG1vZHVsZSBsZXZlbCBjb2RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBQeURvY19TVFJWQVIobW9kdWxlX2RvYywKQEAgLTc3NSw3ICs3MzgsNiBAQAogCiBzdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKICAgICB7ImZvcmtfZXhlYyIsIHN1YnByb2Nlc3NfZm9ya19leGVjLCBNRVRIX1ZBUkFSR1MsIHN1YnByb2Nlc3NfZm9ya19leGVjX2RvY30sCi0gICAgeyJjbG9leGVjX3BpcGUiLCBzdWJwcm9jZXNzX2Nsb2V4ZWNfcGlwZSwgTUVUSF9OT0FSR1MsIHN1YnByb2Nlc3NfY2xvZXhlY19waXBlX2RvY30sCiAgICAge05VTEwsIE5VTEx9ICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMgYi9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYwppbmRleCAyMWEyYjA5Li4xZmE4OTljIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYworKysgYi9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYwpAQCAtMTY4LDkgKzE2OCw5IEBACiAvKiBpbml0X2tleSBpcyB0aGUgYXJyYXkgZm9yIGluaXRpYWxpemluZyBrZXlzICovCiAvKiBrZXlfbGVuZ3RoIGlzIGl0cyBsZW5ndGggKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1pbml0X2J5X2FycmF5KFJhbmRvbU9iamVjdCAqc2VsZiwgdW5zaWduZWQgbG9uZyBpbml0X2tleVtdLCB1bnNpZ25lZCBsb25nIGtleV9sZW5ndGgpCitpbml0X2J5X2FycmF5KFJhbmRvbU9iamVjdCAqc2VsZiwgdW5zaWduZWQgbG9uZyBpbml0X2tleVtdLCBzaXplX3Qga2V5X2xlbmd0aCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgaSwgaiwgazsgICAgICAgLyogd2FzIHNpZ25lZCBpbiB0aGUgb3JpZ2luYWwgY29kZS4gUkRIIDEyLzE2LzIwMDIgKi8KKyAgICBzaXplX3QgaSwgaiwgazsgICAgICAgLyogd2FzIHNpZ25lZCBpbiB0aGUgb3JpZ2luYWwgY29kZS4gUkRIIDEyLzE2LzIwMDIgKi8KICAgICB1bnNpZ25lZCBsb25nICptdDsKIAogICAgIG10ID0gc2VsZi0+c3RhdGU7CkBAIC0yMDcsMTQgKzIwNywxMSBAQAogcmFuZG9tX3NlZWQoUmFuZG9tT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsgICAgICAgICAgICAvKiBndWlsdHkgdW50aWwgcHJvdmVkIGlubm9jZW50ICovCi0gICAgUHlPYmplY3QgKm1hc2tsb3dlciA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnRoaXJ0eXR3byA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm4gPSBOVUxMOwotICAgIHVuc2lnbmVkIGxvbmcgKm5ld19rZXksICprZXkgPSBOVUxMOwotICAgIHVuc2lnbmVkIGxvbmcga2V5bWF4OyAgICAgICAgICAgICAgIC8qICMgb2YgYWxsb2NhdGVkIHNsb3RzIGluIGtleSAqLwotICAgIHVuc2lnbmVkIGxvbmcga2V5dXNlZDsgICAgICAgICAgICAgIC8qICMgb2YgdXNlZCBzbG90cyBpbiBrZXkgKi8KLSAgICBpbnQgZXJyOwotCisgICAgdW5zaWduZWQgbG9uZyAqa2V5ID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICprZXlfYXNfYnl0ZXMgPSBOVUxMOworICAgIHNpemVfdCBiaXRzLCBrZXl1c2VkLCBpOworICAgIGludCByZXM7CiAgICAgUHlPYmplY3QgKmFyZyA9IE5VTEw7CiAKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZWVkIiwgMCwgMSwgJmFyZykpCkBAIC0yNDMsNjkgKzI0MCw0NiBAQAogICAgIGlmIChuID09IE5VTEwpCiAgICAgICAgIGdvdG8gRG9uZTsKIAotICAgIC8qIE5vdyBzcGxpdCBuIGludG8gMzItYml0IGNodW5rcywgZnJvbSB0aGUgcmlnaHQuICBFYWNoIHBpZWNlIGlzCi0gICAgICogc3RvcmVkIGludG8ga2V5LCB3aGljaCBoYXMgYSBjYXBhY2l0eSBvZiBrZXltYXggY2h1bmtzLCBvZiB3aGljaAotICAgICAqIGtleXVzZWQgYXJlIGZpbGxlZC4gIEFsYXMsIHRoZSByZXBlYXRlZCBzaGlmdGluZyBtYWtlcyB0aGlzIGEKLSAgICAgKiBxdWFkcmF0aWMtdGltZSBhbGdvcml0aG07IHdlJ2QgcmVhbGx5IGxpa2UgdG8gdXNlCi0gICAgICogX1B5TG9uZ19Bc0J5dGVBcnJheSBoZXJlLCBidXQgdGhlbiB3ZSdkIGhhdmUgdG8gYnJlYWsgaW50byB0aGUKLSAgICAgKiBsb25nIHJlcHJlc2VudGF0aW9uIHRvIGZpZ3VyZSBvdXQgaG93IGJpZyBhbiBhcnJheSB3YXMgbmVlZGVkCi0gICAgICogaW4gYWR2YW5jZS4KLSAgICAgKi8KLSAgICBrZXltYXggPSA4OyAgICAgICAgIC8qIGFyYml0cmFyeTsgZ3Jvd3MgbGF0ZXIgaWYgbmVlZGVkICovCi0gICAga2V5dXNlZCA9IDA7Ci0gICAga2V5ID0gKHVuc2lnbmVkIGxvbmcgKilQeU1lbV9NYWxsb2Moa2V5bWF4ICogc2l6ZW9mKCprZXkpKTsKLSAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgLyogTm93IHNwbGl0IG4gaW50byAzMi1iaXQgY2h1bmtzLCBmcm9tIHRoZSByaWdodC4gKi8KKyAgICBiaXRzID0gX1B5TG9uZ19OdW1CaXRzKG4pOworICAgIGlmIChiaXRzID09IChzaXplX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgZ290byBEb25lOwogCi0gICAgbWFza2xvd2VyID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoMHhmZmZmZmZmZlUpOwotICAgIGlmIChtYXNrbG93ZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHRoaXJ0eXR3byA9IFB5TG9uZ19Gcm9tTG9uZygzMkwpOwotICAgIGlmICh0aGlydHl0d28gPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHdoaWxlICgoZXJyPVB5T2JqZWN0X0lzVHJ1ZShuKSkpIHsKLSAgICAgICAgUHlPYmplY3QgKm5ld247Ci0gICAgICAgIFB5T2JqZWN0ICpweWNodW5rOwotICAgICAgICB1bnNpZ25lZCBsb25nIGNodW5rOworICAgIC8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgMzItYml0IGNodW5rcyB0aGlzIGdpdmVzIHVzLiAqLworICAgIGtleXVzZWQgPSBiaXRzID09IDAgPyAxIDogKGJpdHMgLSAxKSAvIDMyICsgMTsKIAotICAgICAgICBpZiAoZXJyID09IC0xKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBweWNodW5rID0gUHlOdW1iZXJfQW5kKG4sIG1hc2tsb3dlcik7Ci0gICAgICAgIGlmIChweWNodW5rID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIGNodW5rID0gUHlMb25nX0FzVW5zaWduZWRMb25nKHB5Y2h1bmspOwotICAgICAgICBQeV9ERUNSRUYocHljaHVuayk7Ci0gICAgICAgIGlmIChjaHVuayA9PSAodW5zaWduZWQgbG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBuZXduID0gUHlOdW1iZXJfUnNoaWZ0KG4sIHRoaXJ0eXR3byk7Ci0gICAgICAgIGlmIChuZXduID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIFB5X0RFQ1JFRihuKTsKLSAgICAgICAgbiA9IG5ld247Ci0gICAgICAgIGlmIChrZXl1c2VkID49IGtleW1heCkgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBiaWdnZXIgPSBrZXltYXggPDwgMTsKLSAgICAgICAgICAgIGlmICgoYmlnZ2VyID4+IDEpICE9IGtleW1heCB8fAotICAgICAgICAgICAgICAgIGJpZ2dlciA+IFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKCprZXkpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBuZXdfa2V5ID0gKHVuc2lnbmVkIGxvbmcgKilQeU1lbV9SZWFsbG9jKGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZ2dlciAqIHNpemVvZigqa2V5KSk7Ci0gICAgICAgICAgICBpZiAobmV3X2tleSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgICAgIGtleSA9IG5ld19rZXk7Ci0gICAgICAgICAgICBrZXltYXggPSBiaWdnZXI7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0KGtleXVzZWQgPCBrZXltYXgpOwotICAgICAgICBrZXlba2V5dXNlZCsrXSA9IGNodW5rOworICAgIC8qIENvbnZlcnQgc2VlZCB0byBieXRlIHNlcXVlbmNlLiAqLworICAgIGtleV9hc19ieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopUHlNZW1fTWFsbG9jKChzaXplX3QpNCAqIGtleXVzZWQpOworICAgIGlmIChrZXlfYXNfYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIERvbmU7CisgICAgfQorICAgIHJlcyA9IF9QeUxvbmdfQXNCeXRlQXJyYXkoKFB5TG9uZ09iamVjdCAqKW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfYXNfYnl0ZXMsIGtleXVzZWQgKiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgIC8qIGxpdHRsZS1lbmRpYW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOyAvKiB1bnNpZ25lZCAqLworICAgIGlmIChyZXMgPT0gLTEpIHsKKyAgICAgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOworICAgICAgICBnb3RvIERvbmU7CiAgICAgfQogCi0gICAgaWYgKGtleXVzZWQgPT0gMCkKLSAgICAgICAga2V5W2tleXVzZWQrK10gPSAwVUw7CisgICAgLyogRmlsbCBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBmcm9tIGJ5dGUgc2VxdWVuY2UuICovCisgICAga2V5ID0gKHVuc2lnbmVkIGxvbmcgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICoga2V5dXNlZCk7CisgICAgaWYgKGtleSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIFB5TWVtX0ZyZWUoa2V5X2FzX2J5dGVzKTsKKyAgICAgICAgZ290byBEb25lOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwga2V5dXNlZDsgaSsrKSB7CisgICAgICAgIGtleVtpXSA9CisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDBdIDw8IDApICsKKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgMV0gPDwgOCkgKworICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAyXSA8PCAxNikgKworICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAzXSA8PCAyNCk7CisgICAgfQorICAgIFB5TWVtX0ZyZWUoa2V5X2FzX2J5dGVzKTsKICAgICByZXN1bHQgPSBpbml0X2J5X2FycmF5KHNlbGYsIGtleSwga2V5dXNlZCk7CiBEb25lOgotICAgIFB5X1hERUNSRUYobWFza2xvd2VyKTsKLSAgICBQeV9YREVDUkVGKHRoaXJ0eXR3byk7CiAgICAgUHlfWERFQ1JFRihuKTsKICAgICBQeU1lbV9GcmVlKGtleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM4OSw2ICszNjMsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBpZiAoayA8PSAzMikgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoZ2VucmFuZF9pbnQzMihzZWxmKSA+PiAoMzIgLSBrKSk7CisKICAgICBieXRlcyA9ICgoayAtIDEpIC8gMzIgKyAxKSAqIDQ7CiAgICAgYnl0ZWFycmF5ID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoYnl0ZXMpOwogICAgIGlmIChieXRlYXJyYXkgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9jbGVhbnVwLnB5IGIvTW9kdWxlcy9fc2hhMy9jbGVhbnVwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhYmNiMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2NsZWFudXAucHkKQEAgLTAsMCArMSw0OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMiAgIENocmlzdGlhbiBIZWltZXMgKGNocmlzdGlhbkBweXRob24ub3JnKQorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisjCisjIGNsZWFudXAgS2VjY2FrIHNvdXJjZXMKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKKworQ1BQMSA9IHJlLmNvbXBpbGUoIl4vLyguKikiKQorQ1BQMiA9IHJlLmNvbXBpbGUoIlwgLy8oLiopIikKKworU1RBVElDUyA9ICgidm9pZCAiLCAiaW50ICIsICJIYXNoUmV0dXJuICIsICJjb25zdCBVSU5UNjQgIiwgIlVJTlQxNiAiKQorCitIRVJFID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitLRUNDQUsgPSBvcy5wYXRoLmpvaW4oSEVSRSwgImtlY2NhayIpCisKK2RlZiBnZXRmaWxlcygpOgorICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIoS0VDQ0FLKToKKyAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihLRUNDQUssIG5hbWUpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG5hbWUpOgorICAgICAgICAgICAgeWllbGQgbmFtZQorCitkZWYgY2xlYW51cChmKToKKyAgICBidWYgPSBbXQorICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICMgbWFyayBhbGwgZnVuY3Rpb25zIGFuZCBnbG9iYWwgZGF0YSBhcyBzdGF0aWMKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKFNUQVRJQ1MpOgorICAgICAgICAgICAgYnVmLmFwcGVuZCgic3RhdGljICIgKyBsaW5lKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyByZW1vdmUgVUlOVDY0IHR5cGVkZWYsIHdlIGhhdmUgb3VyIG93bgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoInR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCIpOgorICAgICAgICAgICAgYnVmLmFwcGVuZCgiLyogJXMgKi9cbiIgJSBsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIHJlbW92ZSAjaW5jbHVkZSAiYnJnX2VuZGlhbi5oIgorICAgICAgICBpZiAiYnJnX2VuZGlhbi5oIiBpbiBsaW5lOgorICAgICAgICAgICAgYnVmLmFwcGVuZCgiLyogJXMgKi9cbiIgJSBsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIHRyYW5zZm9ybSBDKysgY29tbWVudHMgaW50byBBTlNJIEMgY29tbWVudHMKKyAgICAgICAgbGluZSA9IENQUDEuc3ViKHIiLyogXDEgKi8iLCBsaW5lKQorICAgICAgICBsaW5lID0gQ1BQMi5zdWIociIgLyogXDEgKi8iLCBsaW5lKQorICAgICAgICBidWYuYXBwZW5kKGxpbmUpCisgICAgcmV0dXJuICIiLmpvaW4oYnVmKQorCitmb3IgbmFtZSBpbiBnZXRmaWxlcygpOgorICAgIHdpdGggb3BlbihuYW1lKSBhcyBmOgorICAgICAgICByZXMgPSBjbGVhbnVwKGYpCisgICAgd2l0aCBvcGVuKG5hbWUsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShyZXMpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItcnZrLm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1ydmsubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYzkwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItcnZrLm1hY3JvcwpAQCAtMCwwICsxLDU1NSBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSBSb25ueSBWYW4gS2VlciwKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCitzdGF0aWMgY29uc3QgVUlOVDMyIEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50MlsyKjI0XSA9Cit7CisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDAwMDg5VUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDAwMDhiVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDA4MDgwVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDAwMDhiVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDA4MDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDA4MDg4VUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDAwMDgyVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDAwMDBiVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDAwMDBhVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDA4MDgyVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDA4MDAzVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDA4MDhiVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDAwMDBiVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDAwMDhhVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDAwMDgxVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDAwMDgxVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDAwMDA4VUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDAwMDAwMDgzVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDA4MDAzVUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDgwMDA4MDg4VUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDAwMDg4VUwsCisgICAgMHgwMDAwMDAwMVVMLCAgICAweDAwMDA4MDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLCAgICAweDgwMDA4MDgyVUwKK307CisKKyN1bmRlZiByb3VuZHMKKworI2RlZmluZSByb3VuZHMgXAoreyBcCisgICAgVUlOVDMyIERhMCwgRGUwLCBEaTAsIERvMCwgRHUwOyBcCisgICAgVUlOVDMyIERhMSwgRGUxLCBEaTEsIERvMSwgRHUxOyBcCisgICAgVUlOVDMyIEJhLCBCZSwgQmksIEJvLCBCdTsgXAorICAgIFVJTlQzMiBBYmEwLCBBYmUwLCBBYmkwLCBBYm8wLCBBYnUwOyBcCisgICAgVUlOVDMyIEFiYTEsIEFiZTEsIEFiaTEsIEFibzEsIEFidTE7IFwKKyAgICBVSU5UMzIgQWdhMCwgQWdlMCwgQWdpMCwgQWdvMCwgQWd1MDsgXAorICAgIFVJTlQzMiBBZ2ExLCBBZ2UxLCBBZ2kxLCBBZ28xLCBBZ3UxOyBcCisgICAgVUlOVDMyIEFrYTAsIEFrZTAsIEFraTAsIEFrbzAsIEFrdTA7IFwKKyAgICBVSU5UMzIgQWthMSwgQWtlMSwgQWtpMSwgQWtvMSwgQWt1MTsgXAorICAgIFVJTlQzMiBBbWEwLCBBbWUwLCBBbWkwLCBBbW8wLCBBbXUwOyBcCisgICAgVUlOVDMyIEFtYTEsIEFtZTEsIEFtaTEsIEFtbzEsIEFtdTE7IFwKKyAgICBVSU5UMzIgQXNhMCwgQXNlMCwgQXNpMCwgQXNvMCwgQXN1MDsgXAorICAgIFVJTlQzMiBBc2ExLCBBc2UxLCBBc2kxLCBBc28xLCBBc3UxOyBcCisgICAgVUlOVDMyIEN3LCBDeCwgQ3ksIEN6OyBcCisgICAgVUlOVDMyIEViYTAsIEViZTAsIEViaTAsIEVibzAsIEVidTA7IFwKKyAgICBVSU5UMzIgRWJhMSwgRWJlMSwgRWJpMSwgRWJvMSwgRWJ1MTsgXAorICAgIFVJTlQzMiBFZ2EwLCBFZ2UwLCBFZ2kwLCBFZ28wLCBFZ3UwOyBcCisgICAgVUlOVDMyIEVnYTEsIEVnZTEsIEVnaTEsIEVnbzEsIEVndTE7IFwKKyAgICBVSU5UMzIgRWthMCwgRWtlMCwgRWtpMCwgRWtvMCwgRWt1MDsgXAorICAgIFVJTlQzMiBFa2ExLCBFa2UxLCBFa2kxLCBFa28xLCBFa3UxOyBcCisgICAgVUlOVDMyIEVtYTAsIEVtZTAsIEVtaTAsIEVtbzAsIEVtdTA7IFwKKyAgICBVSU5UMzIgRW1hMSwgRW1lMSwgRW1pMSwgRW1vMSwgRW11MTsgXAorICAgIFVJTlQzMiBFc2EwLCBFc2UwLCBFc2kwLCBFc28wLCBFc3UwOyBcCisgICAgVUlOVDMyIEVzYTEsIEVzZTEsIEVzaTEsIEVzbzEsIEVzdTE7IFwKKwljb25zdCBVSU5UMzIgKiBwUm91bmRDb25zdGFudHMgPSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDI7IFwKKyAgICBVSU5UMzIgaTsgXAorXAorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpIFwKK1wKKyAgICBmb3IoIGkgPSAxMjsgaSAhPSAwOyAtLWkgKSB7IFwKKwkgICAgQ3ggPSBBYnUwXkFndTBeQWt1MF5BbXUwXkFzdTA7IFwKKwkgICAgRHUxID0gQWJlMV5BZ2UxXkFrZTFeQW1lMV5Bc2UxOyBcCisJICAgIERhMCA9IEN4XlJPTDMyKER1MSwgMSk7IFwKKwkgICAgQ3ogPSBBYnUxXkFndTFeQWt1MV5BbXUxXkFzdTE7IFwKKwkgICAgRHUwID0gQWJlMF5BZ2UwXkFrZTBeQW1lMF5Bc2UwOyBcCisJICAgIERhMSA9IEN6XkR1MDsgXAorXAorCSAgICBDdyA9IEFiaTBeQWdpMF5Ba2kwXkFtaTBeQXNpMDsgXAorCSAgICBEbzAgPSBDd15ST0wzMihDeiwgMSk7IFwKKwkgICAgQ3kgPSBBYmkxXkFnaTFeQWtpMV5BbWkxXkFzaTE7IFwKKwkgICAgRG8xID0gQ3leQ3g7IFwKK1wKKwkgICAgQ3ggPSBBYmEwXkFnYTBeQWthMF5BbWEwXkFzYTA7IFwKKwkgICAgRGUwID0gQ3heUk9MMzIoQ3ksIDEpOyBcCisJICAgIEN6ID0gQWJhMV5BZ2ExXkFrYTFeQW1hMV5Bc2ExOyBcCisJICAgIERlMSA9IEN6XkN3OyBcCitcCisJICAgIEN5ID0gQWJvMV5BZ28xXkFrbzFeQW1vMV5Bc28xOyBcCisJICAgIERpMCA9IER1MF5ST0wzMihDeSwgMSk7IFwKKwkgICAgQ3cgPSBBYm8wXkFnbzBeQWtvMF5BbW8wXkFzbzA7IFwKKwkgICAgRGkxID0gRHUxXkN3OyBcCitcCisJICAgIER1MCA9IEN3XlJPTDMyKEN6LCAxKTsgXAorCSAgICBEdTEgPSBDeV5DeDsgXAorXAorCSAgICBBYmEwIF49IERhMDsgXAorCSAgICBCYSA9IEFiYTA7IFwKKwkgICAgQWdlMCBePSBEZTA7IFwKKwkgICAgQmUgPSBST0wzMihBZ2UwLCAyMik7IFwKKwkgICAgQWtpMSBePSBEaTE7IFwKKwkgICAgQmkgPSBST0wzMihBa2kxLCAyMik7IFwKKwkgICAgQW1vMSBePSBEbzE7IFwKKwkgICAgQm8gPSBST0wzMihBbW8xLCAxMSk7IFwKKwkgICAgQXN1MCBePSBEdTA7IFwKKwkgICAgQnUgPSBST0wzMihBc3UwLCA3KTsgXAorCSAgICBFYmEwID0gICBCYSBeKCh+QmUpJiAgQmkgKSBeICoocFJvdW5kQ29uc3RhbnRzKyspOyBcCisJICAgIEViZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEViaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVibzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVidTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFibzAgXj0gRG8wOyBcCisJICAgIEJhID0gUk9MMzIoQWJvMCwgMTQpOyBcCisJICAgIEFndTAgXj0gRHUwOyBcCisJICAgIEJlID0gUk9MMzIoQWd1MCwgMTApOyBcCisJICAgIEFrYTEgXj0gRGExOyBcCisJICAgIEJpID0gUk9MMzIoQWthMSwgMik7IFwKKwkgICAgQW1lMSBePSBEZTE7IFwKKwkgICAgQm8gPSBST0wzMihBbWUxLCAyMyk7IFwKKwkgICAgQXNpMSBePSBEaTE7IFwKKwkgICAgQnUgPSBST0wzMihBc2kxLCAzMSk7IFwKKwkgICAgRWdhMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRWdlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWdpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWdvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWd1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJlMSBePSBEZTE7IFwKKwkgICAgQmEgPSBST0wzMihBYmUxLCAxKTsgXAorCSAgICBBZ2kwIF49IERpMDsgXAorCSAgICBCZSA9IFJPTDMyKEFnaTAsIDMpOyBcCisJICAgIEFrbzEgXj0gRG8xOyBcCisJICAgIEJpID0gUk9MMzIoQWtvMSwgMTMpOyBcCisJICAgIEFtdTAgXj0gRHUwOyBcCisJICAgIEJvID0gUk9MMzIoQW11MCwgNCk7IFwKKwkgICAgQXNhMCBePSBEYTA7IFwKKwkgICAgQnUgPSBST0wzMihBc2EwLCA5KTsgXAorCSAgICBFa2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFa2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFa2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFa28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFa3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYnUxIF49IER1MTsgXAorCSAgICBCYSA9IFJPTDMyKEFidTEsIDE0KTsgXAorCSAgICBBZ2EwIF49IERhMDsgXAorCSAgICBCZSA9IFJPTDMyKEFnYTAsIDE4KTsgXAorCSAgICBBa2UwIF49IERlMDsgXAorCSAgICBCaSA9IFJPTDMyKEFrZTAsIDUpOyBcCisJICAgIEFtaTEgXj0gRGkxOyBcCisJICAgIEJvID0gUk9MMzIoQW1pMSwgOCk7IFwKKwkgICAgQXNvMCBePSBEbzA7IFwKKwkgICAgQnUgPSBST0wzMihBc28wLCAyOCk7IFwKKwkgICAgRW1hMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRW1lMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRW1pMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRW1vMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRW11MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJpMCBePSBEaTA7IFwKKwkgICAgQmEgPSBST0wzMihBYmkwLCAzMSk7IFwKKwkgICAgQWdvMSBePSBEbzE7IFwKKwkgICAgQmUgPSBST0wzMihBZ28xLCAyOCk7IFwKKwkgICAgQWt1MSBePSBEdTE7IFwKKwkgICAgQmkgPSBST0wzMihBa3UxLCAyMCk7IFwKKwkgICAgQW1hMSBePSBEYTE7IFwKKwkgICAgQm8gPSBST0wzMihBbWExLCAyMSk7IFwKKwkgICAgQXNlMCBePSBEZTA7IFwKKwkgICAgQnUgPSBST0wzMihBc2UwLCAxKTsgXAorCSAgICBFc2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFc2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFc2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFc28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFc3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmExIF49IERhMTsgXAorCSAgICBCYSA9IEFiYTE7IFwKKwkgICAgQWdlMSBePSBEZTE7IFwKKwkgICAgQmUgPSBST0wzMihBZ2UxLCAyMik7IFwKKwkgICAgQWtpMCBePSBEaTA7IFwKKwkgICAgQmkgPSBST0wzMihBa2kwLCAyMSk7IFwKKwkgICAgQW1vMCBePSBEbzA7IFwKKwkgICAgQm8gPSBST0wzMihBbW8wLCAxMCk7IFwKKwkgICAgQXN1MSBePSBEdTE7IFwKKwkgICAgQnUgPSBST0wzMihBc3UxLCA3KTsgXAorCSAgICBFYmExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFYmExIF49ICoocFJvdW5kQ29uc3RhbnRzKyspOyBcCisJICAgIEViZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEViaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVibzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVidTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFibzEgXj0gRG8xOyBcCisJICAgIEJhID0gUk9MMzIoQWJvMSwgMTQpOyBcCisJICAgIEFndTEgXj0gRHUxOyBcCisJICAgIEJlID0gUk9MMzIoQWd1MSwgMTApOyBcCisJICAgIEFrYTAgXj0gRGEwOyBcCisJICAgIEJpID0gUk9MMzIoQWthMCwgMSk7IFwKKwkgICAgQW1lMCBePSBEZTA7IFwKKwkgICAgQm8gPSBST0wzMihBbWUwLCAyMik7IFwKKwkgICAgQXNpMCBePSBEaTA7IFwKKwkgICAgQnUgPSBST0wzMihBc2kwLCAzMCk7IFwKKwkgICAgRWdhMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRWdlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWdpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWdvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWd1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJlMCBePSBEZTA7IFwKKwkgICAgQmEgPSBBYmUwOyBcCisJICAgIEFnaTEgXj0gRGkxOyBcCisJICAgIEJlID0gUk9MMzIoQWdpMSwgMyk7IFwKKwkgICAgQWtvMCBePSBEbzA7IFwKKwkgICAgQmkgPSBST0wzMihBa28wLCAxMik7IFwKKwkgICAgQW11MSBePSBEdTE7IFwKKwkgICAgQm8gPSBST0wzMihBbXUxLCA0KTsgXAorCSAgICBBc2ExIF49IERhMTsgXAorCSAgICBCdSA9IFJPTDMyKEFzYTEsIDkpOyBcCisJICAgIEVrYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVrZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVraTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVrbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVrdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFidTAgXj0gRHUwOyBcCisJICAgIEJhID0gUk9MMzIoQWJ1MCwgMTMpOyBcCisJICAgIEFnYTEgXj0gRGExOyBcCisJICAgIEJlID0gUk9MMzIoQWdhMSwgMTgpOyBcCisJICAgIEFrZTEgXj0gRGUxOyBcCisJICAgIEJpID0gUk9MMzIoQWtlMSwgNSk7IFwKKwkgICAgQW1pMCBePSBEaTA7IFwKKwkgICAgQm8gPSBST0wzMihBbWkwLCA3KTsgXAorCSAgICBBc28xIF49IERvMTsgXAorCSAgICBCdSA9IFJPTDMyKEFzbzEsIDI4KTsgXAorCSAgICBFbWExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFbWUxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFbWkxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFbW8xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFbXUxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmkxIF49IERpMTsgXAorCSAgICBCYSA9IFJPTDMyKEFiaTEsIDMxKTsgXAorCSAgICBBZ28wIF49IERvMDsgXAorCSAgICBCZSA9IFJPTDMyKEFnbzAsIDI3KTsgXAorCSAgICBBa3UwIF49IER1MDsgXAorCSAgICBCaSA9IFJPTDMyKEFrdTAsIDE5KTsgXAorCSAgICBBbWEwIF49IERhMDsgXAorCSAgICBCbyA9IFJPTDMyKEFtYTAsIDIwKTsgXAorCSAgICBBc2UxIF49IERlMTsgXAorCSAgICBCdSA9IFJPTDMyKEFzZTEsIDEpOyBcCisJICAgIEVzYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVzZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVzaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVzbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVzdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEN4ID0gRWJ1MF5FZ3UwXkVrdTBeRW11MF5Fc3UwOyBcCisJICAgIER1MSA9IEViZTFeRWdlMV5Fa2UxXkVtZTFeRXNlMTsgXAorCSAgICBEYTAgPSBDeF5ST0wzMihEdTEsIDEpOyBcCisJICAgIEN6ID0gRWJ1MV5FZ3UxXkVrdTFeRW11MV5Fc3UxOyBcCisJICAgIER1MCA9IEViZTBeRWdlMF5Fa2UwXkVtZTBeRXNlMDsgXAorCSAgICBEYTEgPSBDel5EdTA7IFwKK1wKKwkgICAgQ3cgPSBFYmkwXkVnaTBeRWtpMF5FbWkwXkVzaTA7IFwKKwkgICAgRG8wID0gQ3deUk9MMzIoQ3osIDEpOyBcCisJICAgIEN5ID0gRWJpMV5FZ2kxXkVraTFeRW1pMV5Fc2kxOyBcCisJICAgIERvMSA9IEN5XkN4OyBcCitcCisJICAgIEN4ID0gRWJhMF5FZ2EwXkVrYTBeRW1hMF5Fc2EwOyBcCisJICAgIERlMCA9IEN4XlJPTDMyKEN5LCAxKTsgXAorCSAgICBDeiA9IEViYTFeRWdhMV5Fa2ExXkVtYTFeRXNhMTsgXAorCSAgICBEZTEgPSBDel5DdzsgXAorXAorCSAgICBDeSA9IEVibzFeRWdvMV5Fa28xXkVtbzFeRXNvMTsgXAorCSAgICBEaTAgPSBEdTBeUk9MMzIoQ3ksIDEpOyBcCisJICAgIEN3ID0gRWJvMF5FZ28wXkVrbzBeRW1vMF5Fc28wOyBcCisJICAgIERpMSA9IER1MV5DdzsgXAorXAorCSAgICBEdTAgPSBDd15ST0wzMihDeiwgMSk7IFwKKwkgICAgRHUxID0gQ3leQ3g7IFwKK1wKKwkgICAgRWJhMCBePSBEYTA7IFwKKwkgICAgQmEgPSBFYmEwOyBcCisJICAgIEVnZTAgXj0gRGUwOyBcCisJICAgIEJlID0gUk9MMzIoRWdlMCwgMjIpOyBcCisJICAgIEVraTEgXj0gRGkxOyBcCisJICAgIEJpID0gUk9MMzIoRWtpMSwgMjIpOyBcCisJICAgIEVtbzEgXj0gRG8xOyBcCisJICAgIEJvID0gUk9MMzIoRW1vMSwgMTEpOyBcCisJICAgIEVzdTAgXj0gRHUwOyBcCisJICAgIEJ1ID0gUk9MMzIoRXN1MCwgNyk7IFwKKwkgICAgQWJhMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWJhMCBePSAqKHBSb3VuZENvbnN0YW50cysrKTsgXAorCSAgICBBYmUwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBYmkwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBYm8wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBYnUwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYm8wIF49IERvMDsgXAorCSAgICBCYSA9IFJPTDMyKEVibzAsIDE0KTsgXAorCSAgICBFZ3UwIF49IER1MDsgXAorCSAgICBCZSA9IFJPTDMyKEVndTAsIDEwKTsgXAorCSAgICBFa2ExIF49IERhMTsgXAorCSAgICBCaSA9IFJPTDMyKEVrYTEsIDIpOyBcCisJICAgIEVtZTEgXj0gRGUxOyBcCisJICAgIEJvID0gUk9MMzIoRW1lMSwgMjMpOyBcCisJICAgIEVzaTEgXj0gRGkxOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNpMSwgMzEpOyBcCisJICAgIEFnYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFnZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFnaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFnbzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFndTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEViZTEgXj0gRGUxOyBcCisJICAgIEJhID0gUk9MMzIoRWJlMSwgMSk7IFwKKwkgICAgRWdpMCBePSBEaTA7IFwKKwkgICAgQmUgPSBST0wzMihFZ2kwLCAzKTsgXAorCSAgICBFa28xIF49IERvMTsgXAorCSAgICBCaSA9IFJPTDMyKEVrbzEsIDEzKTsgXAorCSAgICBFbXUwIF49IER1MDsgXAorCSAgICBCbyA9IFJPTDMyKEVtdTAsIDQpOyBcCisJICAgIEVzYTAgXj0gRGEwOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNhMCwgOSk7IFwKKwkgICAgQWthMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWtlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQWtpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQWtvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQWt1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJ1MSBePSBEdTE7IFwKKwkgICAgQmEgPSBST0wzMihFYnUxLCAxNCk7IFwKKwkgICAgRWdhMCBePSBEYTA7IFwKKwkgICAgQmUgPSBST0wzMihFZ2EwLCAxOCk7IFwKKwkgICAgRWtlMCBePSBEZTA7IFwKKwkgICAgQmkgPSBST0wzMihFa2UwLCA1KTsgXAorCSAgICBFbWkxIF49IERpMTsgXAorCSAgICBCbyA9IFJPTDMyKEVtaTEsIDgpOyBcCisJICAgIEVzbzAgXj0gRG8wOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNvMCwgMjgpOyBcCisJICAgIEFtYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFtZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFtaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFtbzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFtdTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEViaTAgXj0gRGkwOyBcCisJICAgIEJhID0gUk9MMzIoRWJpMCwgMzEpOyBcCisJICAgIEVnbzEgXj0gRG8xOyBcCisJICAgIEJlID0gUk9MMzIoRWdvMSwgMjgpOyBcCisJICAgIEVrdTEgXj0gRHUxOyBcCisJICAgIEJpID0gUk9MMzIoRWt1MSwgMjApOyBcCisJICAgIEVtYTEgXj0gRGExOyBcCisJICAgIEJvID0gUk9MMzIoRW1hMSwgMjEpOyBcCisJICAgIEVzZTAgXj0gRGUwOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNlMCwgMSk7IFwKKwkgICAgQXNhMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQXNlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQXNpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQXNvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQXN1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJhMSBePSBEYTE7IFwKKwkgICAgQmEgPSBFYmExOyBcCisJICAgIEVnZTEgXj0gRGUxOyBcCisJICAgIEJlID0gUk9MMzIoRWdlMSwgMjIpOyBcCisJICAgIEVraTAgXj0gRGkwOyBcCisJICAgIEJpID0gUk9MMzIoRWtpMCwgMjEpOyBcCisJICAgIEVtbzAgXj0gRG8wOyBcCisJICAgIEJvID0gUk9MMzIoRW1vMCwgMTApOyBcCisJICAgIEVzdTEgXj0gRHUxOyBcCisJICAgIEJ1ID0gUk9MMzIoRXN1MSwgNyk7IFwKKwkgICAgQWJhMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWJhMSBePSAqKHBSb3VuZENvbnN0YW50cysrKTsgXAorCSAgICBBYmUxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBYmkxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBYm8xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBYnUxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYm8xIF49IERvMTsgXAorCSAgICBCYSA9IFJPTDMyKEVibzEsIDE0KTsgXAorCSAgICBFZ3UxIF49IER1MTsgXAorCSAgICBCZSA9IFJPTDMyKEVndTEsIDEwKTsgXAorCSAgICBFa2EwIF49IERhMDsgXAorCSAgICBCaSA9IFJPTDMyKEVrYTAsIDEpOyBcCisJICAgIEVtZTAgXj0gRGUwOyBcCisJICAgIEJvID0gUk9MMzIoRW1lMCwgMjIpOyBcCisJICAgIEVzaTAgXj0gRGkwOyBcCisJICAgIEJ1ID0gUk9MMzIoRXNpMCwgMzApOyBcCisJICAgIEFnYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFnZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFnaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFnbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFndTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEViZTAgXj0gRGUwOyBcCisJICAgIEJhID0gRWJlMDsgXAorCSAgICBFZ2kxIF49IERpMTsgXAorCSAgICBCZSA9IFJPTDMyKEVnaTEsIDMpOyBcCisJICAgIEVrbzAgXj0gRG8wOyBcCisJICAgIEJpID0gUk9MMzIoRWtvMCwgMTIpOyBcCisJICAgIEVtdTEgXj0gRHUxOyBcCisJICAgIEJvID0gUk9MMzIoRW11MSwgNCk7IFwKKwkgICAgRXNhMSBePSBEYTE7IFwKKwkgICAgQnUgPSBST0wzMihFc2ExLCA5KTsgXAorCSAgICBBa2ExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBa2UxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBa2kxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBa28xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBa3UxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYnUwIF49IER1MDsgXAorCSAgICBCYSA9IFJPTDMyKEVidTAsIDEzKTsgXAorCSAgICBFZ2ExIF49IERhMTsgXAorCSAgICBCZSA9IFJPTDMyKEVnYTEsIDE4KTsgXAorCSAgICBFa2UxIF49IERlMTsgXAorCSAgICBCaSA9IFJPTDMyKEVrZTEsIDUpOyBcCisJICAgIEVtaTAgXj0gRGkwOyBcCisJICAgIEJvID0gUk9MMzIoRW1pMCwgNyk7IFwKKwkgICAgRXNvMSBePSBEbzE7IFwKKwkgICAgQnUgPSBST0wzMihFc28xLCAyOCk7IFwKKwkgICAgQW1hMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQW1lMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQW1pMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQW1vMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQW11MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJpMSBePSBEaTE7IFwKKwkgICAgQmEgPSBST0wzMihFYmkxLCAzMSk7IFwKKwkgICAgRWdvMCBePSBEbzA7IFwKKwkgICAgQmUgPSBST0wzMihFZ28wLCAyNyk7IFwKKwkgICAgRWt1MCBePSBEdTA7IFwKKwkgICAgQmkgPSBST0wzMihFa3UwLCAxOSk7IFwKKwkgICAgRW1hMCBePSBEYTA7IFwKKwkgICAgQm8gPSBST0wzMihFbWEwLCAyMCk7IFwKKwkgICAgRXNlMSBePSBEZTE7IFwKKwkgICAgQnUgPSBST0wzMihFc2UxLCAxKTsgXAorCSAgICBBc2ExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBc2UxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBc2kxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBc28xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBc3UxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorICAgIH0gXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKSBcCit9CisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhMCA9IHN0YXRlWyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXTsgXAorICAgIFgjI2JlMSA9IHN0YXRlWyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XTsgXAorICAgIFgjI2JvMCA9IHN0YXRlWyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XTsgXAorICAgIFgjI2J1MSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2dlMCA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XTsgXAorICAgIFgjI2dpMSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI2d1MCA9IHN0YXRlWzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXTsgXAorICAgIFgjI2thMSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXTsgXAorICAgIFgjI2tpMCA9IHN0YXRlWzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XTsgXAorICAgIFgjI2tvMSA9IHN0YXRlWzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XTsgXAorICAgIFgjI21hMCA9IHN0YXRlWzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gWCMjYmEwOyBcCisgICAgc3RhdGVbIDFdID0gWCMjYmExOyBcCisgICAgc3RhdGVbIDJdID0gWCMjYmUwOyBcCisgICAgc3RhdGVbIDNdID0gWCMjYmUxOyBcCisgICAgc3RhdGVbIDRdID0gWCMjYmkwOyBcCisgICAgc3RhdGVbIDVdID0gWCMjYmkxOyBcCisgICAgc3RhdGVbIDZdID0gWCMjYm8wOyBcCisgICAgc3RhdGVbIDddID0gWCMjYm8xOyBcCisgICAgc3RhdGVbIDhdID0gWCMjYnUwOyBcCisgICAgc3RhdGVbIDldID0gWCMjYnUxOyBcCisgICAgc3RhdGVbMTBdID0gWCMjZ2EwOyBcCisgICAgc3RhdGVbMTFdID0gWCMjZ2ExOyBcCisgICAgc3RhdGVbMTJdID0gWCMjZ2UwOyBcCisgICAgc3RhdGVbMTNdID0gWCMjZ2UxOyBcCisgICAgc3RhdGVbMTRdID0gWCMjZ2kwOyBcCisgICAgc3RhdGVbMTVdID0gWCMjZ2kxOyBcCisgICAgc3RhdGVbMTZdID0gWCMjZ28wOyBcCisgICAgc3RhdGVbMTddID0gWCMjZ28xOyBcCisgICAgc3RhdGVbMThdID0gWCMjZ3UwOyBcCisgICAgc3RhdGVbMTldID0gWCMjZ3UxOyBcCisgICAgc3RhdGVbMjBdID0gWCMja2EwOyBcCisgICAgc3RhdGVbMjFdID0gWCMja2ExOyBcCisgICAgc3RhdGVbMjJdID0gWCMja2UwOyBcCisgICAgc3RhdGVbMjNdID0gWCMja2UxOyBcCisgICAgc3RhdGVbMjRdID0gWCMja2kwOyBcCisgICAgc3RhdGVbMjVdID0gWCMja2kxOyBcCisgICAgc3RhdGVbMjZdID0gWCMja28wOyBcCisgICAgc3RhdGVbMjddID0gWCMja28xOyBcCisgICAgc3RhdGVbMjhdID0gWCMja3UwOyBcCisgICAgc3RhdGVbMjldID0gWCMja3UxOyBcCisgICAgc3RhdGVbMzBdID0gWCMjbWEwOyBcCisgICAgc3RhdGVbMzFdID0gWCMjbWExOyBcCisgICAgc3RhdGVbMzJdID0gWCMjbWUwOyBcCisgICAgc3RhdGVbMzNdID0gWCMjbWUxOyBcCisgICAgc3RhdGVbMzRdID0gWCMjbWkwOyBcCisgICAgc3RhdGVbMzVdID0gWCMjbWkxOyBcCisgICAgc3RhdGVbMzZdID0gWCMjbW8wOyBcCisgICAgc3RhdGVbMzddID0gWCMjbW8xOyBcCisgICAgc3RhdGVbMzhdID0gWCMjbXUwOyBcCisgICAgc3RhdGVbMzldID0gWCMjbXUxOyBcCisgICAgc3RhdGVbNDBdID0gWCMjc2EwOyBcCisgICAgc3RhdGVbNDFdID0gWCMjc2ExOyBcCisgICAgc3RhdGVbNDJdID0gWCMjc2UwOyBcCisgICAgc3RhdGVbNDNdID0gWCMjc2UxOyBcCisgICAgc3RhdGVbNDRdID0gWCMjc2kwOyBcCisgICAgc3RhdGVbNDVdID0gWCMjc2kxOyBcCisgICAgc3RhdGVbNDZdID0gWCMjc28wOyBcCisgICAgc3RhdGVbNDddID0gWCMjc28xOyBcCisgICAgc3RhdGVbNDhdID0gWCMjc3UwOyBcCisgICAgc3RhdGVbNDldID0gWCMjc3UxOyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItczEubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3M2Q2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItczEubWFjcm9zCkBAIC0wLDAgKzEsMTE4NyBAQAorLyoKK0NvZGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgS2VjY2FrVG9vbHMhCisKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNkZWZpbmUgZGVjbGFyZUFCQ0RFIFwKKyAgICBVSU5UMzIgQWJhMCwgQWJlMCwgQWJpMCwgQWJvMCwgQWJ1MDsgXAorICAgIFVJTlQzMiBBYmExLCBBYmUxLCBBYmkxLCBBYm8xLCBBYnUxOyBcCisgICAgVUlOVDMyIEFnYTAsIEFnZTAsIEFnaTAsIEFnbzAsIEFndTA7IFwKKyAgICBVSU5UMzIgQWdhMSwgQWdlMSwgQWdpMSwgQWdvMSwgQWd1MTsgXAorICAgIFVJTlQzMiBBa2EwLCBBa2UwLCBBa2kwLCBBa28wLCBBa3UwOyBcCisgICAgVUlOVDMyIEFrYTEsIEFrZTEsIEFraTEsIEFrbzEsIEFrdTE7IFwKKyAgICBVSU5UMzIgQW1hMCwgQW1lMCwgQW1pMCwgQW1vMCwgQW11MDsgXAorICAgIFVJTlQzMiBBbWExLCBBbWUxLCBBbWkxLCBBbW8xLCBBbXUxOyBcCisgICAgVUlOVDMyIEFzYTAsIEFzZTAsIEFzaTAsIEFzbzAsIEFzdTA7IFwKKyAgICBVSU5UMzIgQXNhMSwgQXNlMSwgQXNpMSwgQXNvMSwgQXN1MTsgXAorICAgIFVJTlQzMiBCYmEwLCBCYmUwLCBCYmkwLCBCYm8wLCBCYnUwOyBcCisgICAgVUlOVDMyIEJiYTEsIEJiZTEsIEJiaTEsIEJibzEsIEJidTE7IFwKKyAgICBVSU5UMzIgQmdhMCwgQmdlMCwgQmdpMCwgQmdvMCwgQmd1MDsgXAorICAgIFVJTlQzMiBCZ2ExLCBCZ2UxLCBCZ2kxLCBCZ28xLCBCZ3UxOyBcCisgICAgVUlOVDMyIEJrYTAsIEJrZTAsIEJraTAsIEJrbzAsIEJrdTA7IFwKKyAgICBVSU5UMzIgQmthMSwgQmtlMSwgQmtpMSwgQmtvMSwgQmt1MTsgXAorICAgIFVJTlQzMiBCbWEwLCBCbWUwLCBCbWkwLCBCbW8wLCBCbXUwOyBcCisgICAgVUlOVDMyIEJtYTEsIEJtZTEsIEJtaTEsIEJtbzEsIEJtdTE7IFwKKyAgICBVSU5UMzIgQnNhMCwgQnNlMCwgQnNpMCwgQnNvMCwgQnN1MDsgXAorICAgIFVJTlQzMiBCc2ExLCBCc2UxLCBCc2kxLCBCc28xLCBCc3UxOyBcCisgICAgVUlOVDMyIENhMCwgQ2UwLCBDaTAsIENvMCwgQ3UwOyBcCisgICAgVUlOVDMyIENhMSwgQ2UxLCBDaTEsIENvMSwgQ3UxOyBcCisgICAgVUlOVDMyIERhMCwgRGUwLCBEaTAsIERvMCwgRHUwOyBcCisgICAgVUlOVDMyIERhMSwgRGUxLCBEaTEsIERvMSwgRHUxOyBcCisgICAgVUlOVDMyIEViYTAsIEViZTAsIEViaTAsIEVibzAsIEVidTA7IFwKKyAgICBVSU5UMzIgRWJhMSwgRWJlMSwgRWJpMSwgRWJvMSwgRWJ1MTsgXAorICAgIFVJTlQzMiBFZ2EwLCBFZ2UwLCBFZ2kwLCBFZ28wLCBFZ3UwOyBcCisgICAgVUlOVDMyIEVnYTEsIEVnZTEsIEVnaTEsIEVnbzEsIEVndTE7IFwKKyAgICBVSU5UMzIgRWthMCwgRWtlMCwgRWtpMCwgRWtvMCwgRWt1MDsgXAorICAgIFVJTlQzMiBFa2ExLCBFa2UxLCBFa2kxLCBFa28xLCBFa3UxOyBcCisgICAgVUlOVDMyIEVtYTAsIEVtZTAsIEVtaTAsIEVtbzAsIEVtdTA7IFwKKyAgICBVSU5UMzIgRW1hMSwgRW1lMSwgRW1pMSwgRW1vMSwgRW11MTsgXAorICAgIFVJTlQzMiBFc2EwLCBFc2UwLCBFc2kwLCBFc28wLCBFc3UwOyBcCisgICAgVUlOVDMyIEVzYTEsIEVzZTEsIEVzaTEsIEVzbzEsIEVzdTE7IFwKKworI2RlZmluZSBwcmVwYXJlVGhldGEgXAorICAgIENhMCA9IEFiYTBeQWdhMF5Ba2EwXkFtYTBeQXNhMDsgXAorICAgIENhMSA9IEFiYTFeQWdhMV5Ba2ExXkFtYTFeQXNhMTsgXAorICAgIENlMCA9IEFiZTBeQWdlMF5Ba2UwXkFtZTBeQXNlMDsgXAorICAgIENlMSA9IEFiZTFeQWdlMV5Ba2UxXkFtZTFeQXNlMTsgXAorICAgIENpMCA9IEFiaTBeQWdpMF5Ba2kwXkFtaTBeQXNpMDsgXAorICAgIENpMSA9IEFiaTFeQWdpMV5Ba2kxXkFtaTFeQXNpMTsgXAorICAgIENvMCA9IEFibzBeQWdvMF5Ba28wXkFtbzBeQXNvMDsgXAorICAgIENvMSA9IEFibzFeQWdvMV5Ba28xXkFtbzFeQXNvMTsgXAorICAgIEN1MCA9IEFidTBeQWd1MF5Ba3UwXkFtdTBeQXN1MDsgXAorICAgIEN1MSA9IEFidTFeQWd1MV5Ba3UxXkFtdTFeQXN1MTsgXAorCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kLCB3aXRoIHByZXBhcmUtdGhldGEgKGxhbmUgY29tcGxlbWVudGluZyBwYXR0ZXJuICdiZWJpZ29raW1pc2EnKSAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEEjI3N1MCBePSBEdTA7IFwKKyAgICBCYnUwID0gUk9MMzIoQSMjc3UwLCA3KTsgXAorICAgIEUjI2JhMCA9ICAgQmJhMCBeKCAgQmJlMCB8ICBCYmkwICk7IFwKKyAgICBFIyNiYTAgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbaV07IFwKKyAgICBDYTAgPSBFIyNiYTA7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApfCAgQmJvMCApOyBcCisgICAgQ2UwID0gRSMjYmUwOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oICBCYm8wICYgIEJidTAgKTsgXAorICAgIENpMCA9IEUjI2JpMDsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCAgQmJ1MCB8ICBCYmEwICk7IFwKKyAgICBDbzAgPSBFIyNibzA7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXiggIEJiYTAgJiAgQmJlMCApOyBcCisgICAgQ3UwID0gRSMjYnUwOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBBIyNzdTEgXj0gRHUxOyBcCisgICAgQmJ1MSA9IFJPTDMyKEEjI3N1MSwgNyk7IFwKKyAgICBFIyNiYTEgPSAgIEJiYTEgXiggIEJiZTEgfCAgQmJpMSApOyBcCisgICAgRSMjYmExIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xW2ldOyBcCisgICAgQ2ExID0gRSMjYmExOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKXwgIEJibzEgKTsgXAorICAgIENlMSA9IEUjI2JlMTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCAgQmJvMSAmICBCYnUxICk7IFwKKyAgICBDaTEgPSBFIyNiaTE7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXiggIEJidTEgfCAgQmJhMSApOyBcCisgICAgQ28xID0gRSMjYm8xOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oICBCYmExICYgIEJiZTEgKTsgXAorICAgIEN1MSA9IEUjI2J1MTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXiggIEJnZTAgfCAgQmdpMCApOyBcCisgICAgQ2EwIF49IEUjI2dhMDsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCAgQmdpMCAmICBCZ28wICk7IFwKKyAgICBDZTAgXj0gRSMjZ2UwOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oICBCZ28wIHwofkJndTApKTsgXAorICAgIENpMCBePSBFIyNnaTA7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXiggIEJndTAgfCAgQmdhMCApOyBcCisgICAgQ28wIF49IEUjI2dvMDsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCAgQmdhMCAmICBCZ2UwICk7IFwKKyAgICBDdTAgXj0gRSMjZ3UwOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCAgQmdlMSB8ICBCZ2kxICk7IFwKKyAgICBDYTEgXj0gRSMjZ2ExOyBcCisgICAgRSMjZ2UxID0gICBCZ2UxIF4oICBCZ2kxICYgIEJnbzEgKTsgXAorICAgIENlMSBePSBFIyNnZTE7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXiggIEJnbzEgfCh+Qmd1MSkpOyBcCisgICAgQ2kxIF49IEUjI2dpMTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCAgQmd1MSB8ICBCZ2ExICk7IFwKKyAgICBDbzEgXj0gRSMjZ28xOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oICBCZ2ExICYgIEJnZTEgKTsgXAorICAgIEN1MSBePSBFIyNndTE7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgQSMjbXUwIF49IER1MDsgXAorICAgIEJrbzAgPSBST0wzMihBIyNtdTAsIDQpOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oICBCa2UwIHwgIEJraTAgKTsgXAorICAgIENhMCBePSBFIyNrYTA7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXiggIEJraTAgJiAgQmtvMCApOyBcCisgICAgQ2UwIF49IEUjI2tlMDsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBDaTAgXj0gRSMja2kwOyBcCisgICAgRSMja28wID0gKH5Ca28wKV4oICBCa3UwIHwgIEJrYTAgKTsgXAorICAgIENvMCBePSBFIyNrbzA7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXiggIEJrYTAgJiAgQmtlMCApOyBcCisgICAgQ3UwIF49IEUjI2t1MDsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCAgQmtlMSB8ICBCa2kxICk7IFwKKyAgICBDYTEgXj0gRSMja2ExOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oICBCa2kxICYgIEJrbzEgKTsgXAorICAgIENlMSBePSBFIyNrZTE7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgQ2kxIF49IEUjI2tpMTsgXAorICAgIEUjI2tvMSA9ICh+QmtvMSleKCAgQmt1MSB8ICBCa2ExICk7IFwKKyAgICBDbzEgXj0gRSMja28xOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oICBCa2ExICYgIEJrZTEgKTsgXAorICAgIEN1MSBePSBFIyNrdTE7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXiggIEJtZTAgJiAgQm1pMCApOyBcCisgICAgQ2EwIF49IEUjI21hMDsgXAorICAgIEUjI21lMCA9ICAgQm1lMCBeKCAgQm1pMCB8ICBCbW8wICk7IFwKKyAgICBDZTAgXj0gRSMjbWUwOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKXwgIEJtdTAgKTsgXAorICAgIENpMCBePSBFIyNtaTA7IFwKKyAgICBFIyNtbzAgPSAofkJtbzApXiggIEJtdTAgJiAgQm1hMCApOyBcCisgICAgQ28wIF49IEUjI21vMDsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCAgQm1hMCB8ICBCbWUwICk7IFwKKyAgICBDdTAgXj0gRSMjbXUwOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBBIyNtaTAgXj0gRGkwOyBcCisgICAgQm1vMSA9IFJPTDMyKEEjI21pMCwgNyk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oICBCbWUxICYgIEJtaTEgKTsgXAorICAgIENhMSBePSBFIyNtYTE7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXiggIEJtaTEgfCAgQm1vMSApOyBcCisgICAgQ2UxIF49IEUjI21lMTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSl8ICBCbXUxICk7IFwKKyAgICBDaTEgXj0gRSMjbWkxOyBcCisgICAgRSMjbW8xID0gKH5CbW8xKV4oICBCbXUxICYgIEJtYTEgKTsgXAorICAgIENvMSBePSBFIyNtbzE7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXiggIEJtYTEgfCAgQm1lMSApOyBcCisgICAgQ3UxIF49IEUjI211MTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzYTAgPSAgIEJzYTAgXigofkJzZTApJiAgQnNpMCApOyBcCisgICAgQ2EwIF49IEUjI3NhMDsgXAorICAgIEUjI3NlMCA9ICh+QnNlMCleKCAgQnNpMCB8ICBCc28wICk7IFwKKyAgICBDZTAgXj0gRSMjc2UwOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oICBCc28wICYgIEJzdTAgKTsgXAorICAgIENpMCBePSBFIyNzaTA7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXiggIEJzdTAgfCAgQnNhMCApOyBcCisgICAgQ28wIF49IEUjI3NvMDsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCAgQnNhMCAmICBCc2UwICk7IFwKKyAgICBDdTAgXj0gRSMjc3UwOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBDYTEgXj0gRSMjc2ExOyBcCisgICAgRSMjc2UxID0gKH5Cc2UxKV4oICBCc2kxIHwgIEJzbzEgKTsgXAorICAgIENlMSBePSBFIyNzZTE7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXiggIEJzbzEgJiAgQnN1MSApOyBcCisgICAgQ2kxIF49IEUjI3NpMTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCAgQnN1MSB8ICBCc2ExICk7IFwKKyAgICBDbzEgXj0gRSMjc28xOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oICBCc2ExICYgIEJzZTEgKTsgXAorICAgIEN1MSBePSBFIyNzdTE7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oICBCYmUwIHwgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCl8ICBCYm8wICk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXiggIEJibzAgJiAgQmJ1MCApOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oICBCYnUwIHwgIEJiYTAgKTsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCAgQmJhMCAmICBCYmUwICk7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCAgQmJlMSB8ICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpfCAgQmJvMSApOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oICBCYm8xICYgIEJidTEgKTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCAgQmJ1MSB8ICBCYmExICk7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXiggIEJiYTEgJiAgQmJlMSApOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCAgQmdlMCB8ICBCZ2kwICk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXiggIEJnaTAgJiAgQmdvMCApOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oICBCZ28wIHwofkJndTApKTsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCAgQmd1MCB8ICBCZ2EwICk7IFwKKyAgICBFIyNndTAgPSAgIEJndTAgXiggIEJnYTAgJiAgQmdlMCApOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCAgQmdlMSB8ICBCZ2kxICk7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXiggIEJnaTEgJiAgQmdvMSApOyBcCisgICAgRSMjZ2kxID0gICBCZ2kxIF4oICBCZ28xIHwofkJndTEpKTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCAgQmd1MSB8ICBCZ2ExICk7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXiggIEJnYTEgJiAgQmdlMSApOyBcCitcCisgICAgQSMjYmUxIF49IERlMTsgXAorICAgIEJrYTAgPSBST0wzMihBIyNiZTEsIDEpOyBcCisgICAgQSMjZ2kwIF49IERpMDsgXAorICAgIEJrZTAgPSBST0wzMihBIyNnaTAsIDMpOyBcCisgICAgQSMja28xIF49IERvMTsgXAorICAgIEJraTAgPSBST0wzMihBIyNrbzEsIDEzKTsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2thMCA9ICAgQmthMCBeKCAgQmtlMCB8ICBCa2kwICk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXiggIEJraTAgJiAgQmtvMCApOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIEUjI2tvMCA9ICh+QmtvMCleKCAgQmt1MCB8ICBCa2EwICk7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXiggIEJrYTAgJiAgQmtlMCApOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oICBCa2UxIHwgIEJraTEgKTsgXAorICAgIEUjI2tlMSA9ICAgQmtlMSBeKCAgQmtpMSAmICBCa28xICk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgRSMja28xID0gKH5Ca28xKV4oICBCa3UxIHwgIEJrYTEgKTsgXAorICAgIEUjI2t1MSA9ICAgQmt1MSBeKCAgQmthMSAmICBCa2UxICk7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXiggIEJtZTAgJiAgQm1pMCApOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oICBCbWkwIHwgIEJtbzAgKTsgXAorICAgIEUjI21pMCA9ICAgQm1pMCBeKCh+Qm1vMCl8ICBCbXUwICk7IFwKKyAgICBFIyNtbzAgPSAofkJtbzApXiggIEJtdTAgJiAgQm1hMCApOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oICBCbWEwIHwgIEJtZTAgKTsgXAorXAorICAgIEEjI2J1MCBePSBEdTA7IFwKKyAgICBCbWExID0gUk9MMzIoQSMjYnUwLCAxMyk7IFwKKyAgICBBIyNnYTEgXj0gRGExOyBcCisgICAgQm1lMSA9IFJPTDMyKEEjI2dhMSwgMTgpOyBcCisgICAgQSMja2UxIF49IERlMTsgXAorICAgIEJtaTEgPSBST0wzMihBIyNrZTEsIDUpOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCAgQm1lMSAmICBCbWkxICk7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXiggIEJtaTEgfCAgQm1vMSApOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKXwgIEJtdTEgKTsgXAorICAgIEUjI21vMSA9ICh+Qm1vMSleKCAgQm11MSAmICBCbWExICk7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXiggIEJtYTEgfCAgQm1lMSApOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBFIyNzZTAgPSAofkJzZTApXiggIEJzaTAgfCAgQnNvMCApOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oICBCc28wICYgIEJzdTAgKTsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCAgQnN1MCB8ICBCc2EwICk7IFwKKyAgICBFIyNzdTAgPSAgIEJzdTAgXiggIEJzYTAgJiAgQnNlMCApOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBFIyNzZTEgPSAofkJzZTEpXiggIEJzaTEgfCAgQnNvMSApOyBcCisgICAgRSMjc2kxID0gICBCc2kxIF4oICBCc28xICYgIEJzdTEgKTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCAgQnN1MSB8ICBCc2ExICk7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXiggIEJzYTEgJiAgQnNlMSApOyBcCitcCisKKyNlbHNlIC8qICBVc2VCZWJpZ29raW1pc2EgKi8KKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEEjI3N1MCBePSBEdTA7IFwKKyAgICBCYnUwID0gUk9MMzIoQSMjc3UwLCA3KTsgXAorICAgIEUjI2JhMCA9ICAgQmJhMCBeKCh+QmJlMCkmICBCYmkwICk7IFwKKyAgICBFIyNiYTAgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbaV07IFwKKyAgICBDYTAgPSBFIyNiYTA7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApJiAgQmJvMCApOyBcCisgICAgQ2UwID0gRSMjYmUwOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oKH5CYm8wKSYgIEJidTAgKTsgXAorICAgIENpMCA9IEUjI2JpMDsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCh+QmJ1MCkmICBCYmEwICk7IFwKKyAgICBDbzAgPSBFIyNibzA7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXigofkJiYTApJiAgQmJlMCApOyBcCisgICAgQ3UwID0gRSMjYnUwOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBBIyNzdTEgXj0gRHUxOyBcCisgICAgQmJ1MSA9IFJPTDMyKEEjI3N1MSwgNyk7IFwKKyAgICBFIyNiYTEgPSAgIEJiYTEgXigofkJiZTEpJiAgQmJpMSApOyBcCisgICAgRSMjYmExIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xW2ldOyBcCisgICAgQ2ExID0gRSMjYmExOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKSYgIEJibzEgKTsgXAorICAgIENlMSA9IEUjI2JlMTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCh+QmJvMSkmICBCYnUxICk7IFwKKyAgICBDaTEgPSBFIyNiaTE7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXigofkJidTEpJiAgQmJhMSApOyBcCisgICAgQ28xID0gRSMjYm8xOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oKH5CYmExKSYgIEJiZTEgKTsgXAorICAgIEN1MSA9IEUjI2J1MTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXigofkJnZTApJiAgQmdpMCApOyBcCisgICAgQ2EwIF49IEUjI2dhMDsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCh+QmdpMCkmICBCZ28wICk7IFwKKyAgICBDZTAgXj0gRSMjZ2UwOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oKH5CZ28wKSYgIEJndTAgKTsgXAorICAgIENpMCBePSBFIyNnaTA7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXigofkJndTApJiAgQmdhMCApOyBcCisgICAgQ28wIF49IEUjI2dvMDsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCh+QmdhMCkmICBCZ2UwICk7IFwKKyAgICBDdTAgXj0gRSMjZ3UwOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCh+QmdlMSkmICBCZ2kxICk7IFwKKyAgICBDYTEgXj0gRSMjZ2ExOyBcCisgICAgRSMjZ2UxID0gICBCZ2UxIF4oKH5CZ2kxKSYgIEJnbzEgKTsgXAorICAgIENlMSBePSBFIyNnZTE7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXigofkJnbzEpJiAgQmd1MSApOyBcCisgICAgQ2kxIF49IEUjI2dpMTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCh+Qmd1MSkmICBCZ2ExICk7IFwKKyAgICBDbzEgXj0gRSMjZ28xOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oKH5CZ2ExKSYgIEJnZTEgKTsgXAorICAgIEN1MSBePSBFIyNndTE7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgQSMjbXUwIF49IER1MDsgXAorICAgIEJrbzAgPSBST0wzMihBIyNtdTAsIDQpOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oKH5Ca2UwKSYgIEJraTAgKTsgXAorICAgIENhMCBePSBFIyNrYTA7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXigofkJraTApJiAgQmtvMCApOyBcCisgICAgQ2UwIF49IEUjI2tlMDsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBDaTAgXj0gRSMja2kwOyBcCisgICAgRSMja28wID0gICBCa28wIF4oKH5Ca3UwKSYgIEJrYTAgKTsgXAorICAgIENvMCBePSBFIyNrbzA7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXigofkJrYTApJiAgQmtlMCApOyBcCisgICAgQ3UwIF49IEUjI2t1MDsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCh+QmtlMSkmICBCa2kxICk7IFwKKyAgICBDYTEgXj0gRSMja2ExOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oKH5Ca2kxKSYgIEJrbzEgKTsgXAorICAgIENlMSBePSBFIyNrZTE7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgQ2kxIF49IEUjI2tpMTsgXAorICAgIEUjI2tvMSA9ICAgQmtvMSBeKCh+Qmt1MSkmICBCa2ExICk7IFwKKyAgICBDbzEgXj0gRSMja28xOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oKH5Ca2ExKSYgIEJrZTEgKTsgXAorICAgIEN1MSBePSBFIyNrdTE7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXigofkJtZTApJiAgQm1pMCApOyBcCisgICAgQ2EwIF49IEUjI21hMDsgXAorICAgIEUjI21lMCA9ICAgQm1lMCBeKCh+Qm1pMCkmICBCbW8wICk7IFwKKyAgICBDZTAgXj0gRSMjbWUwOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKSYgIEJtdTAgKTsgXAorICAgIENpMCBePSBFIyNtaTA7IFwKKyAgICBFIyNtbzAgPSAgIEJtbzAgXigofkJtdTApJiAgQm1hMCApOyBcCisgICAgQ28wIF49IEUjI21vMDsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCh+Qm1hMCkmICBCbWUwICk7IFwKKyAgICBDdTAgXj0gRSMjbXUwOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBBIyNtaTAgXj0gRGkwOyBcCisgICAgQm1vMSA9IFJPTDMyKEEjI21pMCwgNyk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oKH5CbWUxKSYgIEJtaTEgKTsgXAorICAgIENhMSBePSBFIyNtYTE7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXigofkJtaTEpJiAgQm1vMSApOyBcCisgICAgQ2UxIF49IEUjI21lMTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSkmICBCbXUxICk7IFwKKyAgICBDaTEgXj0gRSMjbWkxOyBcCisgICAgRSMjbW8xID0gICBCbW8xIF4oKH5CbXUxKSYgIEJtYTEgKTsgXAorICAgIENvMSBePSBFIyNtbzE7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXigofkJtYTEpJiAgQm1lMSApOyBcCisgICAgQ3UxIF49IEUjI211MTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzYTAgPSAgIEJzYTAgXigofkJzZTApJiAgQnNpMCApOyBcCisgICAgQ2EwIF49IEUjI3NhMDsgXAorICAgIEUjI3NlMCA9ICAgQnNlMCBeKCh+QnNpMCkmICBCc28wICk7IFwKKyAgICBDZTAgXj0gRSMjc2UwOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oKH5Cc28wKSYgIEJzdTAgKTsgXAorICAgIENpMCBePSBFIyNzaTA7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXigofkJzdTApJiAgQnNhMCApOyBcCisgICAgQ28wIF49IEUjI3NvMDsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCh+QnNhMCkmICBCc2UwICk7IFwKKyAgICBDdTAgXj0gRSMjc3UwOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBDYTEgXj0gRSMjc2ExOyBcCisgICAgRSMjc2UxID0gICBCc2UxIF4oKH5Cc2kxKSYgIEJzbzEgKTsgXAorICAgIENlMSBePSBFIyNzZTE7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXigofkJzbzEpJiAgQnN1MSApOyBcCisgICAgQ2kxIF49IEUjI3NpMTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCh+QnN1MSkmICBCc2ExICk7IFwKKyAgICBDbzEgXj0gRSMjc28xOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oKH5Cc2ExKSYgIEJzZTEgKTsgXAorICAgIEN1MSBePSBFIyNzdTE7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEEjI3N1MCBePSBEdTA7IFwKKyAgICBCYnUwID0gUk9MMzIoQSMjc3UwLCA3KTsgXAorICAgIEUjI2JhMCA9ICAgQmJhMCBeKCh+QmJlMCkmICBCYmkwICk7IFwKKyAgICBFIyNiYTAgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbaV07IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApJiAgQmJvMCApOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oKH5CYm8wKSYgIEJidTAgKTsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCh+QmJ1MCkmICBCYmEwICk7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXigofkJiYTApJiAgQmJlMCApOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBBIyNzdTEgXj0gRHUxOyBcCisgICAgQmJ1MSA9IFJPTDMyKEEjI3N1MSwgNyk7IFwKKyAgICBFIyNiYTEgPSAgIEJiYTEgXigofkJiZTEpJiAgQmJpMSApOyBcCisgICAgRSMjYmExIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xW2ldOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKSYgIEJibzEgKTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCh+QmJvMSkmICBCYnUxICk7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXigofkJidTEpJiAgQmJhMSApOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oKH5CYmExKSYgIEJiZTEgKTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXigofkJnZTApJiAgQmdpMCApOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oKH5CZ2kwKSYgIEJnbzAgKTsgXAorICAgIEUjI2dpMCA9ICAgQmdpMCBeKCh+QmdvMCkmICBCZ3UwICk7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXigofkJndTApJiAgQmdhMCApOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oKH5CZ2EwKSYgIEJnZTAgKTsgXAorXAorICAgIEEjI2JvMSBePSBEbzE7IFwKKyAgICBCZ2ExID0gUk9MMzIoQSMjYm8xLCAxNCk7IFwKKyAgICBBIyNndTEgXj0gRHUxOyBcCisgICAgQmdlMSA9IFJPTDMyKEEjI2d1MSwgMTApOyBcCisgICAgQSMja2EwIF49IERhMDsgXAorICAgIEJnaTEgPSBST0wzMihBIyNrYTAsIDEpOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEEjI3NpMCBePSBEaTA7IFwKKyAgICBCZ3UxID0gUk9MMzIoQSMjc2kwLCAzMCk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXigofkJnZTEpJiAgQmdpMSApOyBcCisgICAgRSMjZ2UxID0gICBCZ2UxIF4oKH5CZ2kxKSYgIEJnbzEgKTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCh+QmdvMSkmICBCZ3UxICk7IFwKKyAgICBFIyNnbzEgPSAgIEJnbzEgXigofkJndTEpJiAgQmdhMSApOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oKH5CZ2ExKSYgIEJnZTEgKTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBBIyNzYTAgXj0gRGEwOyBcCisgICAgQmt1MCA9IFJPTDMyKEEjI3NhMCwgOSk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXigofkJrZTApJiAgQmtpMCApOyBcCisgICAgRSMja2UwID0gICBCa2UwIF4oKH5Ca2kwKSYgIEJrbzAgKTsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBFIyNrbzAgPSAgIEJrbzAgXigofkJrdTApJiAgQmthMCApOyBcCisgICAgRSMja3UwID0gICBCa3UwIF4oKH5Ca2EwKSYgIEJrZTAgKTsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCh+QmtlMSkmICBCa2kxICk7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXigofkJraTEpJiAgQmtvMSApOyBcCisgICAgRSMja2kxID0gICBCa2kxIF4oKH5Ca28xKSYgIEJrdTEgKTsgXAorICAgIEUjI2tvMSA9ICAgQmtvMSBeKCh+Qmt1MSkmICBCa2ExICk7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXigofkJrYTEpJiAgQmtlMSApOyBcCitcCisgICAgQSMjYnUxIF49IER1MTsgXAorICAgIEJtYTAgPSBST0wzMihBIyNidTEsIDE0KTsgXAorICAgIEEjI2dhMCBePSBEYTA7IFwKKyAgICBCbWUwID0gUk9MMzIoQSMjZ2EwLCAxOCk7IFwKKyAgICBBIyNrZTAgXj0gRGUwOyBcCisgICAgQm1pMCA9IFJPTDMyKEEjI2tlMCwgNSk7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBBIyNzbzAgXj0gRG8wOyBcCisgICAgQm11MCA9IFJPTDMyKEEjI3NvMCwgMjgpOyBcCisgICAgRSMjbWEwID0gICBCbWEwIF4oKH5CbWUwKSYgIEJtaTAgKTsgXAorICAgIEUjI21lMCA9ICAgQm1lMCBeKCh+Qm1pMCkmICBCbW8wICk7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApJiAgQm11MCApOyBcCisgICAgRSMjbW8wID0gICBCbW8wIF4oKH5CbXUwKSYgIEJtYTAgKTsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCh+Qm1hMCkmICBCbWUwICk7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEEjI3NvMSBePSBEbzE7IFwKKyAgICBCbXUxID0gUk9MMzIoQSMjc28xLCAyOCk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXigofkJtZTEpJiAgQm1pMSApOyBcCisgICAgRSMjbWUxID0gICBCbWUxIF4oKH5CbWkxKSYgIEJtbzEgKTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSkmICBCbXUxICk7IFwKKyAgICBFIyNtbzEgPSAgIEJtbzEgXigofkJtdTEpJiAgQm1hMSApOyBcCisgICAgRSMjbXUxID0gICBCbXUxIF4oKH5CbWExKSYgIEJtZTEgKTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzYTAgPSAgIEJzYTAgXigofkJzZTApJiAgQnNpMCApOyBcCisgICAgRSMjc2UwID0gICBCc2UwIF4oKH5Cc2kwKSYgIEJzbzAgKTsgXAorICAgIEUjI3NpMCA9ICAgQnNpMCBeKCh+QnNvMCkmICBCc3UwICk7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXigofkJzdTApJiAgQnNhMCApOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oKH5Cc2EwKSYgIEJzZTAgKTsgXAorXAorICAgIEEjI2JpMSBePSBEaTE7IFwKKyAgICBCc2ExID0gUk9MMzIoQSMjYmkxLCAzMSk7IFwKKyAgICBBIyNnbzAgXj0gRG8wOyBcCisgICAgQnNlMSA9IFJPTDMyKEEjI2dvMCwgMjcpOyBcCisgICAgQSMja3UwIF49IER1MDsgXAorICAgIEJzaTEgPSBST0wzMihBIyNrdTAsIDE5KTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBBIyNzZTEgXj0gRGUxOyBcCisgICAgQnN1MSA9IFJPTDMyKEEjI3NlMSwgMSk7IFwKKyAgICBFIyNzYTEgPSAgIEJzYTEgXigofkJzZTEpJiAgQnNpMSApOyBcCisgICAgRSMjc2UxID0gICBCc2UxIF4oKH5Cc2kxKSYgIEJzbzEgKTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCh+QnNvMSkmICBCc3UxICk7IFwKKyAgICBFIyNzbzEgPSAgIEJzbzEgXigofkJzdTEpJiAgQnNhMSApOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oKH5Cc2ExKSYgIEJzZTEgKTsgXAorXAorCisjZW5kaWYgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworCitjb25zdCBVSU5UMzIgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbMjRdID0geworICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMIH07CisKK2NvbnN0IFVJTlQzMiBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVsyNF0gPSB7CisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwODlVTCwKKyAgICAweDgwMDAwMDhiVUwsCisgICAgMHg4MDAwODA4MFVMLAorICAgIDB4MDAwMDAwOGJVTCwKKyAgICAweDAwMDA4MDAwVUwsCisgICAgMHg4MDAwODA4OFVMLAorICAgIDB4ODAwMDAwODJVTCwKKyAgICAweDAwMDAwMDBiVUwsCisgICAgMHgwMDAwMDAwYVVMLAorICAgIDB4MDAwMDgwODJVTCwKKyAgICAweDAwMDA4MDAzVUwsCisgICAgMHgwMDAwODA4YlVMLAorICAgIDB4ODAwMDAwMGJVTCwKKyAgICAweDgwMDAwMDhhVUwsCisgICAgMHg4MDAwMDA4MVVMLAorICAgIDB4ODAwMDAwODFVTCwKKyAgICAweDgwMDAwMDA4VUwsCisgICAgMHgwMDAwMDA4M1VMLAorICAgIDB4ODAwMDgwMDNVTCwKKyAgICAweDgwMDA4MDg4VUwsCisgICAgMHg4MDAwMDA4OFVMLAorICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDgwMDA4MDgyVUwgfTsKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN11eaW5wdXRbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF1eaW5wdXRbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdXmlucHV0WzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXV5pbnB1dFsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM11eaW5wdXRbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdXmlucHV0WzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XV5pbnB1dFsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl1eaW5wdXRbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddXmlucHV0WzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XV5pbnB1dFsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV1eaW5wdXRbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdXmlucHV0WzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXV5pbnB1dFszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM107IFwKKyAgICBYIyNtaTAgPSBzdGF0ZVszNF07IFwKKyAgICBYIyNtaTEgPSBzdGF0ZVszNV07IFwKKyAgICBYIyNtbzAgPSBzdGF0ZVszNl07IFwKKyAgICBYIyNtbzEgPSBzdGF0ZVszN107IFwKKyAgICBYIyNtdTAgPSBzdGF0ZVszOF07IFwKKyAgICBYIyNtdTEgPSBzdGF0ZVszOV07IFwKKyAgICBYIyNzYTAgPSBzdGF0ZVs0MF07IFwKKyAgICBYIyNzYTEgPSBzdGF0ZVs0MV07IFwKKyAgICBYIyNzZTAgPSBzdGF0ZVs0Ml07IFwKKyAgICBYIyNzZTEgPSBzdGF0ZVs0M107IFwKKyAgICBYIyNzaTAgPSBzdGF0ZVs0NF07IFwKKyAgICBYIyNzaTEgPSBzdGF0ZVs0NV07IFwKKyAgICBYIyNzbzAgPSBzdGF0ZVs0Nl07IFwKKyAgICBYIyNzbzEgPSBzdGF0ZVs0N107IFwKKyAgICBYIyNzdTAgPSBzdGF0ZVs0OF07IFwKKyAgICBYIyNzdTEgPSBzdGF0ZVs0OV07IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN11eaW5wdXRbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF1eaW5wdXRbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdXmlucHV0WzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXV5pbnB1dFsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM11eaW5wdXRbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdXmlucHV0WzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XV5pbnB1dFsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl1eaW5wdXRbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddXmlucHV0WzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XV5pbnB1dFsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV1eaW5wdXRbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdXmlucHV0WzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXV5pbnB1dFszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl1eaW5wdXRbMzJdOyBcCisgICAgWCMjbWUxID0gc3RhdGVbMzNdXmlucHV0WzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF07IFwKKyAgICBYIyNiYTEgPSBzdGF0ZVsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM107IFwKKyAgICBYIyNiaTAgPSBzdGF0ZVsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl07IFwKKyAgICBYIyNibzEgPSBzdGF0ZVsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV07IFwKKyAgICBYIyNnYTAgPSBzdGF0ZVsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl07IFwKKyAgICBYIyNnZTEgPSBzdGF0ZVsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV07IFwKKyAgICBYIyNnbzAgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF07IFwKKyAgICBYIyNndTEgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV07IFwKKyAgICBYIyNrZTAgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF07IFwKKyAgICBYIyNraTEgPSBzdGF0ZVsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN107IFwKKyAgICBYIyNrdTAgPSBzdGF0ZVsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF07IFwKKyAgICBYIyNtYTEgPSBzdGF0ZVszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM107IFwKKyAgICBYIyNtaTAgPSBzdGF0ZVszNF07IFwKKyAgICBYIyNtaTEgPSBzdGF0ZVszNV07IFwKKyAgICBYIyNtbzAgPSBzdGF0ZVszNl07IFwKKyAgICBYIyNtbzEgPSBzdGF0ZVszN107IFwKKyAgICBYIyNtdTAgPSBzdGF0ZVszOF07IFwKKyAgICBYIyNtdTEgPSBzdGF0ZVszOV07IFwKKyAgICBYIyNzYTAgPSBzdGF0ZVs0MF07IFwKKyAgICBYIyNzYTEgPSBzdGF0ZVs0MV07IFwKKyAgICBYIyNzZTAgPSBzdGF0ZVs0Ml07IFwKKyAgICBYIyNzZTEgPSBzdGF0ZVs0M107IFwKKyAgICBYIyNzaTAgPSBzdGF0ZVs0NF07IFwKKyAgICBYIyNzaTEgPSBzdGF0ZVs0NV07IFwKKyAgICBYIyNzbzAgPSBzdGF0ZVs0Nl07IFwKKyAgICBYIyNzbzEgPSBzdGF0ZVs0N107IFwKKyAgICBYIyNzdTAgPSBzdGF0ZVs0OF07IFwKKyAgICBYIyNzdTEgPSBzdGF0ZVs0OV07IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIHN0YXRlWyAwXSA9IFgjI2JhMDsgXAorICAgIHN0YXRlWyAxXSA9IFgjI2JhMTsgXAorICAgIHN0YXRlWyAyXSA9IFgjI2JlMDsgXAorICAgIHN0YXRlWyAzXSA9IFgjI2JlMTsgXAorICAgIHN0YXRlWyA0XSA9IFgjI2JpMDsgXAorICAgIHN0YXRlWyA1XSA9IFgjI2JpMTsgXAorICAgIHN0YXRlWyA2XSA9IFgjI2JvMDsgXAorICAgIHN0YXRlWyA3XSA9IFgjI2JvMTsgXAorICAgIHN0YXRlWyA4XSA9IFgjI2J1MDsgXAorICAgIHN0YXRlWyA5XSA9IFgjI2J1MTsgXAorICAgIHN0YXRlWzEwXSA9IFgjI2dhMDsgXAorICAgIHN0YXRlWzExXSA9IFgjI2dhMTsgXAorICAgIHN0YXRlWzEyXSA9IFgjI2dlMDsgXAorICAgIHN0YXRlWzEzXSA9IFgjI2dlMTsgXAorICAgIHN0YXRlWzE0XSA9IFgjI2dpMDsgXAorICAgIHN0YXRlWzE1XSA9IFgjI2dpMTsgXAorICAgIHN0YXRlWzE2XSA9IFgjI2dvMDsgXAorICAgIHN0YXRlWzE3XSA9IFgjI2dvMTsgXAorICAgIHN0YXRlWzE4XSA9IFgjI2d1MDsgXAorICAgIHN0YXRlWzE5XSA9IFgjI2d1MTsgXAorICAgIHN0YXRlWzIwXSA9IFgjI2thMDsgXAorICAgIHN0YXRlWzIxXSA9IFgjI2thMTsgXAorICAgIHN0YXRlWzIyXSA9IFgjI2tlMDsgXAorICAgIHN0YXRlWzIzXSA9IFgjI2tlMTsgXAorICAgIHN0YXRlWzI0XSA9IFgjI2tpMDsgXAorICAgIHN0YXRlWzI1XSA9IFgjI2tpMTsgXAorICAgIHN0YXRlWzI2XSA9IFgjI2tvMDsgXAorICAgIHN0YXRlWzI3XSA9IFgjI2tvMTsgXAorICAgIHN0YXRlWzI4XSA9IFgjI2t1MDsgXAorICAgIHN0YXRlWzI5XSA9IFgjI2t1MTsgXAorICAgIHN0YXRlWzMwXSA9IFgjI21hMDsgXAorICAgIHN0YXRlWzMxXSA9IFgjI21hMTsgXAorICAgIHN0YXRlWzMyXSA9IFgjI21lMDsgXAorICAgIHN0YXRlWzMzXSA9IFgjI21lMTsgXAorICAgIHN0YXRlWzM0XSA9IFgjI21pMDsgXAorICAgIHN0YXRlWzM1XSA9IFgjI21pMTsgXAorICAgIHN0YXRlWzM2XSA9IFgjI21vMDsgXAorICAgIHN0YXRlWzM3XSA9IFgjI21vMTsgXAorICAgIHN0YXRlWzM4XSA9IFgjI211MDsgXAorICAgIHN0YXRlWzM5XSA9IFgjI211MTsgXAorICAgIHN0YXRlWzQwXSA9IFgjI3NhMDsgXAorICAgIHN0YXRlWzQxXSA9IFgjI3NhMTsgXAorICAgIHN0YXRlWzQyXSA9IFgjI3NlMDsgXAorICAgIHN0YXRlWzQzXSA9IFgjI3NlMTsgXAorICAgIHN0YXRlWzQ0XSA9IFgjI3NpMDsgXAorICAgIHN0YXRlWzQ1XSA9IFgjI3NpMTsgXAorICAgIHN0YXRlWzQ2XSA9IFgjI3NvMDsgXAorICAgIHN0YXRlWzQ3XSA9IFgjI3NvMTsgXAorICAgIHN0YXRlWzQ4XSA9IFgjI3N1MDsgXAorICAgIHN0YXRlWzQ5XSA9IFgjI3N1MTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmEwID0gWSMjYmEwOyBcCisgICAgWCMjYmExID0gWSMjYmExOyBcCisgICAgWCMjYmUwID0gWSMjYmUwOyBcCisgICAgWCMjYmUxID0gWSMjYmUxOyBcCisgICAgWCMjYmkwID0gWSMjYmkwOyBcCisgICAgWCMjYmkxID0gWSMjYmkxOyBcCisgICAgWCMjYm8wID0gWSMjYm8wOyBcCisgICAgWCMjYm8xID0gWSMjYm8xOyBcCisgICAgWCMjYnUwID0gWSMjYnUwOyBcCisgICAgWCMjYnUxID0gWSMjYnUxOyBcCisgICAgWCMjZ2EwID0gWSMjZ2EwOyBcCisgICAgWCMjZ2ExID0gWSMjZ2ExOyBcCisgICAgWCMjZ2UwID0gWSMjZ2UwOyBcCisgICAgWCMjZ2UxID0gWSMjZ2UxOyBcCisgICAgWCMjZ2kwID0gWSMjZ2kwOyBcCisgICAgWCMjZ2kxID0gWSMjZ2kxOyBcCisgICAgWCMjZ28wID0gWSMjZ28wOyBcCisgICAgWCMjZ28xID0gWSMjZ28xOyBcCisgICAgWCMjZ3UwID0gWSMjZ3UwOyBcCisgICAgWCMjZ3UxID0gWSMjZ3UxOyBcCisgICAgWCMja2EwID0gWSMja2EwOyBcCisgICAgWCMja2ExID0gWSMja2ExOyBcCisgICAgWCMja2UwID0gWSMja2UwOyBcCisgICAgWCMja2UxID0gWSMja2UxOyBcCisgICAgWCMja2kwID0gWSMja2kwOyBcCisgICAgWCMja2kxID0gWSMja2kxOyBcCisgICAgWCMja28wID0gWSMja28wOyBcCisgICAgWCMja28xID0gWSMja28xOyBcCisgICAgWCMja3UwID0gWSMja3UwOyBcCisgICAgWCMja3UxID0gWSMja3UxOyBcCisgICAgWCMjbWEwID0gWSMjbWEwOyBcCisgICAgWCMjbWExID0gWSMjbWExOyBcCisgICAgWCMjbWUwID0gWSMjbWUwOyBcCisgICAgWCMjbWUxID0gWSMjbWUxOyBcCisgICAgWCMjbWkwID0gWSMjbWkwOyBcCisgICAgWCMjbWkxID0gWSMjbWkxOyBcCisgICAgWCMjbW8wID0gWSMjbW8wOyBcCisgICAgWCMjbW8xID0gWSMjbW8xOyBcCisgICAgWCMjbXUwID0gWSMjbXUwOyBcCisgICAgWCMjbXUxID0gWSMjbXUxOyBcCisgICAgWCMjc2EwID0gWSMjc2EwOyBcCisgICAgWCMjc2ExID0gWSMjc2ExOyBcCisgICAgWCMjc2UwID0gWSMjc2UwOyBcCisgICAgWCMjc2UxID0gWSMjc2UxOyBcCisgICAgWCMjc2kwID0gWSMjc2kwOyBcCisgICAgWCMjc2kxID0gWSMjc2kxOyBcCisgICAgWCMjc28wID0gWSMjc28wOyBcCisgICAgWCMjc28xID0gWSMjc28xOyBcCisgICAgWCMjc3UwID0gWSMjc3UwOyBcCisgICAgWCMjc3UxID0gWSMjc3UxOyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMi5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItczIubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTE3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzItczIubWFjcm9zCkBAIC0wLDAgKzEsMTE4NyBAQAorLyoKK0NvZGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgS2VjY2FrVG9vbHMhCisKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNkZWZpbmUgZGVjbGFyZUFCQ0RFIFwKKyAgICBVSU5UMzIgQWJhMCwgQWJlMCwgQWJpMCwgQWJvMCwgQWJ1MDsgXAorICAgIFVJTlQzMiBBYmExLCBBYmUxLCBBYmkxLCBBYm8xLCBBYnUxOyBcCisgICAgVUlOVDMyIEFnYTAsIEFnZTAsIEFnaTAsIEFnbzAsIEFndTA7IFwKKyAgICBVSU5UMzIgQWdhMSwgQWdlMSwgQWdpMSwgQWdvMSwgQWd1MTsgXAorICAgIFVJTlQzMiBBa2EwLCBBa2UwLCBBa2kwLCBBa28wLCBBa3UwOyBcCisgICAgVUlOVDMyIEFrYTEsIEFrZTEsIEFraTEsIEFrbzEsIEFrdTE7IFwKKyAgICBVSU5UMzIgQW1hMCwgQW1lMCwgQW1pMCwgQW1vMCwgQW11MDsgXAorICAgIFVJTlQzMiBBbWExLCBBbWUxLCBBbWkxLCBBbW8xLCBBbXUxOyBcCisgICAgVUlOVDMyIEFzYTAsIEFzZTAsIEFzaTAsIEFzbzAsIEFzdTA7IFwKKyAgICBVSU5UMzIgQXNhMSwgQXNlMSwgQXNpMSwgQXNvMSwgQXN1MTsgXAorICAgIFVJTlQzMiBCYmEwLCBCYmUwLCBCYmkwLCBCYm8wLCBCYnUwOyBcCisgICAgVUlOVDMyIEJiYTEsIEJiZTEsIEJiaTEsIEJibzEsIEJidTE7IFwKKyAgICBVSU5UMzIgQmdhMCwgQmdlMCwgQmdpMCwgQmdvMCwgQmd1MDsgXAorICAgIFVJTlQzMiBCZ2ExLCBCZ2UxLCBCZ2kxLCBCZ28xLCBCZ3UxOyBcCisgICAgVUlOVDMyIEJrYTAsIEJrZTAsIEJraTAsIEJrbzAsIEJrdTA7IFwKKyAgICBVSU5UMzIgQmthMSwgQmtlMSwgQmtpMSwgQmtvMSwgQmt1MTsgXAorICAgIFVJTlQzMiBCbWEwLCBCbWUwLCBCbWkwLCBCbW8wLCBCbXUwOyBcCisgICAgVUlOVDMyIEJtYTEsIEJtZTEsIEJtaTEsIEJtbzEsIEJtdTE7IFwKKyAgICBVSU5UMzIgQnNhMCwgQnNlMCwgQnNpMCwgQnNvMCwgQnN1MDsgXAorICAgIFVJTlQzMiBCc2ExLCBCc2UxLCBCc2kxLCBCc28xLCBCc3UxOyBcCisgICAgVUlOVDMyIENhMCwgQ2UwLCBDaTAsIENvMCwgQ3UwOyBcCisgICAgVUlOVDMyIENhMSwgQ2UxLCBDaTEsIENvMSwgQ3UxOyBcCisgICAgVUlOVDMyIERhMCwgRGUwLCBEaTAsIERvMCwgRHUwOyBcCisgICAgVUlOVDMyIERhMSwgRGUxLCBEaTEsIERvMSwgRHUxOyBcCisgICAgVUlOVDMyIEViYTAsIEViZTAsIEViaTAsIEVibzAsIEVidTA7IFwKKyAgICBVSU5UMzIgRWJhMSwgRWJlMSwgRWJpMSwgRWJvMSwgRWJ1MTsgXAorICAgIFVJTlQzMiBFZ2EwLCBFZ2UwLCBFZ2kwLCBFZ28wLCBFZ3UwOyBcCisgICAgVUlOVDMyIEVnYTEsIEVnZTEsIEVnaTEsIEVnbzEsIEVndTE7IFwKKyAgICBVSU5UMzIgRWthMCwgRWtlMCwgRWtpMCwgRWtvMCwgRWt1MDsgXAorICAgIFVJTlQzMiBFa2ExLCBFa2UxLCBFa2kxLCBFa28xLCBFa3UxOyBcCisgICAgVUlOVDMyIEVtYTAsIEVtZTAsIEVtaTAsIEVtbzAsIEVtdTA7IFwKKyAgICBVSU5UMzIgRW1hMSwgRW1lMSwgRW1pMSwgRW1vMSwgRW11MTsgXAorICAgIFVJTlQzMiBFc2EwLCBFc2UwLCBFc2kwLCBFc28wLCBFc3UwOyBcCisgICAgVUlOVDMyIEVzYTEsIEVzZTEsIEVzaTEsIEVzbzEsIEVzdTE7IFwKKworI2RlZmluZSBwcmVwYXJlVGhldGEgXAorICAgIENhMCA9IEFiYTBeQWdhMF5Ba2EwXkFtYTBeQXNhMDsgXAorICAgIENhMSA9IEFiYTFeQWdhMV5Ba2ExXkFtYTFeQXNhMTsgXAorICAgIENlMCA9IEFiZTBeQWdlMF5Ba2UwXkFtZTBeQXNlMDsgXAorICAgIENlMSA9IEFiZTFeQWdlMV5Ba2UxXkFtZTFeQXNlMTsgXAorICAgIENpMCA9IEFiaTBeQWdpMF5Ba2kwXkFtaTBeQXNpMDsgXAorICAgIENpMSA9IEFiaTFeQWdpMV5Ba2kxXkFtaTFeQXNpMTsgXAorICAgIENvMCA9IEFibzBeQWdvMF5Ba28wXkFtbzBeQXNvMDsgXAorICAgIENvMSA9IEFibzFeQWdvMV5Ba28xXkFtbzFeQXNvMTsgXAorICAgIEN1MCA9IEFidTBeQWd1MF5Ba3UwXkFtdTBeQXN1MDsgXAorICAgIEN1MSA9IEFidTFeQWd1MV5Ba3UxXkFtdTFeQXN1MTsgXAorCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kLCB3aXRoIHByZXBhcmUtdGhldGEgKGxhbmUgY29tcGxlbWVudGluZyBwYXR0ZXJuICdiZWJpZ29raW1pc2EnKSAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oICBCYmUwIHwgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIENhMCA9IEUjI2JhMDsgXAorICAgIEEjI21vMSBePSBEbzE7IFwKKyAgICBCYm8wID0gUk9MMzIoQSMjbW8xLCAxMSk7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApfCAgQmJvMCApOyBcCisgICAgQ2UwID0gRSMjYmUwOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oICBCYm8wICYgIEJidTAgKTsgXAorICAgIENpMCA9IEUjI2JpMDsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCAgQmJ1MCB8ICBCYmEwICk7IFwKKyAgICBDbzAgPSBFIyNibzA7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXiggIEJiYTAgJiAgQmJlMCApOyBcCisgICAgQ3UwID0gRSMjYnUwOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCAgQmJlMSB8ICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBDYTEgPSBFIyNiYTE7IFwKKyAgICBBIyNtbzAgXj0gRG8wOyBcCisgICAgQmJvMSA9IFJPTDMyKEEjI21vMCwgMTApOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKXwgIEJibzEgKTsgXAorICAgIENlMSA9IEUjI2JlMTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCAgQmJvMSAmICBCYnUxICk7IFwKKyAgICBDaTEgPSBFIyNiaTE7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXiggIEJidTEgfCAgQmJhMSApOyBcCisgICAgQ28xID0gRSMjYm8xOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oICBCYmExICYgIEJiZTEgKTsgXAorICAgIEN1MSA9IEUjI2J1MTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgRSMjZ2EwID0gICBCZ2EwIF4oICBCZ2UwIHwgIEJnaTAgKTsgXAorICAgIENhMCBePSBFIyNnYTA7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oICBCZ2kwICYgIEJnbzAgKTsgXAorICAgIENlMCBePSBFIyNnZTA7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oICBCZ28wIHwofkJndTApKTsgXAorICAgIENpMCBePSBFIyNnaTA7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXiggIEJndTAgfCAgQmdhMCApOyBcCisgICAgQ28wIF49IEUjI2dvMDsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCAgQmdhMCAmICBCZ2UwICk7IFwKKyAgICBDdTAgXj0gRSMjZ3UwOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXiggIEJnZTEgfCAgQmdpMSApOyBcCisgICAgQ2ExIF49IEUjI2dhMTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXiggIEJnaTEgJiAgQmdvMSApOyBcCisgICAgQ2UxIF49IEUjI2dlMTsgXAorICAgIEEjI3NpMCBePSBEaTA7IFwKKyAgICBCZ3UxID0gUk9MMzIoQSMjc2kwLCAzMCk7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXiggIEJnbzEgfCh+Qmd1MSkpOyBcCisgICAgQ2kxIF49IEUjI2dpMTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCAgQmd1MSB8ICBCZ2ExICk7IFwKKyAgICBDbzEgXj0gRSMjZ28xOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oICBCZ2ExICYgIEJnZTEgKTsgXAorICAgIEN1MSBePSBFIyNndTE7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oICBCa2UwIHwgIEJraTAgKTsgXAorICAgIENhMCBePSBFIyNrYTA7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXiggIEJraTAgJiAgQmtvMCApOyBcCisgICAgQ2UwIF49IEUjI2tlMDsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBDaTAgXj0gRSMja2kwOyBcCisgICAgRSMja28wID0gKH5Ca28wKV4oICBCa3UwIHwgIEJrYTAgKTsgXAorICAgIENvMCBePSBFIyNrbzA7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXiggIEJrYTAgJiAgQmtlMCApOyBcCisgICAgQ3UwIF49IEUjI2t1MDsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCAgQmtlMSB8ICBCa2kxICk7IFwKKyAgICBDYTEgXj0gRSMja2ExOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oICBCa2kxICYgIEJrbzEgKTsgXAorICAgIENlMSBePSBFIyNrZTE7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgQ2kxIF49IEUjI2tpMTsgXAorICAgIEUjI2tvMSA9ICh+QmtvMSleKCAgQmt1MSB8ICBCa2ExICk7IFwKKyAgICBDbzEgXj0gRSMja28xOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oICBCa2ExICYgIEJrZTEgKTsgXAorICAgIEN1MSBePSBFIyNrdTE7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCAgQm1lMCAmICBCbWkwICk7IFwKKyAgICBDYTAgXj0gRSMjbWEwOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oICBCbWkwIHwgIEJtbzAgKTsgXAorICAgIENlMCBePSBFIyNtZTA7IFwKKyAgICBBIyNzbzAgXj0gRG8wOyBcCisgICAgQm11MCA9IFJPTDMyKEEjI3NvMCwgMjgpOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKXwgIEJtdTAgKTsgXAorICAgIENpMCBePSBFIyNtaTA7IFwKKyAgICBFIyNtbzAgPSAofkJtbzApXiggIEJtdTAgJiAgQm1hMCApOyBcCisgICAgQ28wIF49IEUjI21vMDsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCAgQm1hMCB8ICBCbWUwICk7IFwKKyAgICBDdTAgXj0gRSMjbXUwOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXiggIEJtZTEgJiAgQm1pMSApOyBcCisgICAgQ2ExIF49IEUjI21hMTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCAgQm1pMSB8ICBCbW8xICk7IFwKKyAgICBDZTEgXj0gRSMjbWUxOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSl8ICBCbXUxICk7IFwKKyAgICBDaTEgXj0gRSMjbWkxOyBcCisgICAgRSMjbW8xID0gKH5CbW8xKV4oICBCbXUxICYgIEJtYTEgKTsgXAorICAgIENvMSBePSBFIyNtbzE7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXiggIEJtYTEgfCAgQm1lMSApOyBcCisgICAgQ3UxIF49IEUjI211MTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBDYTAgXj0gRSMjc2EwOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEUjI3NlMCA9ICh+QnNlMCleKCAgQnNpMCB8ICBCc28wICk7IFwKKyAgICBDZTAgXj0gRSMjc2UwOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oICBCc28wICYgIEJzdTAgKTsgXAorICAgIENpMCBePSBFIyNzaTA7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXiggIEJzdTAgfCAgQnNhMCApOyBcCisgICAgQ28wIF49IEUjI3NvMDsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCAgQnNhMCAmICBCc2UwICk7IFwKKyAgICBDdTAgXj0gRSMjc3UwOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIENhMSBePSBFIyNzYTE7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgRSMjc2UxID0gKH5Cc2UxKV4oICBCc2kxIHwgIEJzbzEgKTsgXAorICAgIENlMSBePSBFIyNzZTE7IFwKKyAgICBBIyNzZTEgXj0gRGUxOyBcCisgICAgQnN1MSA9IFJPTDMyKEEjI3NlMSwgMSk7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXiggIEJzbzEgJiAgQnN1MSApOyBcCisgICAgQ2kxIF49IEUjI3NpMTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCAgQnN1MSB8ICBCc2ExICk7IFwKKyAgICBDbzEgXj0gRSMjc28xOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oICBCc2ExICYgIEJzZTEgKTsgXAorICAgIEN1MSBePSBFIyNzdTE7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXiggIEJiZTAgfCAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCl8ICBCYm8wICk7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXiggIEJibzAgJiAgQmJ1MCApOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oICBCYnUwIHwgIEJiYTAgKTsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCAgQmJhMCAmICBCYmUwICk7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oICBCYmUxIHwgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpfCAgQmJvMSApOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oICBCYm8xICYgIEJidTEgKTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCAgQmJ1MSB8ICBCYmExICk7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXiggIEJiYTEgJiAgQmJlMSApOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXiggIEJnZTAgfCAgQmdpMCApOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCAgQmdpMCAmICBCZ28wICk7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oICBCZ28wIHwofkJndTApKTsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCAgQmd1MCB8ICBCZ2EwICk7IFwKKyAgICBFIyNndTAgPSAgIEJndTAgXiggIEJnYTAgJiAgQmdlMCApOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXiggIEJnZTEgfCAgQmdpMSApOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCAgQmdpMSAmICBCZ28xICk7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2kxID0gICBCZ2kxIF4oICBCZ28xIHwofkJndTEpKTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCAgQmd1MSB8ICBCZ2ExICk7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXiggIEJnYTEgJiAgQmdlMSApOyBcCitcCisgICAgQSMjYmUxIF49IERlMTsgXAorICAgIEJrYTAgPSBST0wzMihBIyNiZTEsIDEpOyBcCisgICAgQSMjZ2kwIF49IERpMDsgXAorICAgIEJrZTAgPSBST0wzMihBIyNnaTAsIDMpOyBcCisgICAgQSMja28xIF49IERvMTsgXAorICAgIEJraTAgPSBST0wzMihBIyNrbzEsIDEzKTsgXAorICAgIEUjI2thMCA9ICAgQmthMCBeKCAgQmtlMCB8ICBCa2kwICk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXiggIEJraTAgJiAgQmtvMCApOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIEUjI2tvMCA9ICh+QmtvMCleKCAgQmt1MCB8ICBCa2EwICk7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXiggIEJrYTAgJiAgQmtlMCApOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oICBCa2UxIHwgIEJraTEgKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEUjI2tlMSA9ICAgQmtlMSBeKCAgQmtpMSAmICBCa28xICk7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgRSMja28xID0gKH5Ca28xKV4oICBCa3UxIHwgIEJrYTEgKTsgXAorICAgIEUjI2t1MSA9ICAgQmt1MSBeKCAgQmthMSAmICBCa2UxICk7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCAgQm1lMCAmICBCbWkwICk7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXiggIEJtaTAgfCAgQm1vMCApOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21pMCA9ICAgQm1pMCBeKCh+Qm1vMCl8ICBCbXUwICk7IFwKKyAgICBFIyNtbzAgPSAofkJtbzApXiggIEJtdTAgJiAgQm1hMCApOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oICBCbWEwIHwgIEJtZTAgKTsgXAorXAorICAgIEEjI2J1MCBePSBEdTA7IFwKKyAgICBCbWExID0gUk9MMzIoQSMjYnUwLCAxMyk7IFwKKyAgICBBIyNnYTEgXj0gRGExOyBcCisgICAgQm1lMSA9IFJPTDMyKEEjI2dhMSwgMTgpOyBcCisgICAgQSMja2UxIF49IERlMTsgXAorICAgIEJtaTEgPSBST0wzMihBIyNrZTEsIDUpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oICBCbWUxICYgIEJtaTEgKTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCAgQm1pMSB8ICBCbW8xICk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKXwgIEJtdTEgKTsgXAorICAgIEUjI21vMSA9ICh+Qm1vMSleKCAgQm11MSAmICBCbWExICk7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXiggIEJtYTEgfCAgQm1lMSApOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBFIyNzZTAgPSAofkJzZTApXiggIEJzaTAgfCAgQnNvMCApOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oICBCc28wICYgIEJzdTAgKTsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCAgQnN1MCB8ICBCc2EwICk7IFwKKyAgICBFIyNzdTAgPSAgIEJzdTAgXiggIEJzYTAgJiAgQnNlMCApOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBFIyNzZTEgPSAofkJzZTEpXiggIEJzaTEgfCAgQnNvMSApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2kxID0gICBCc2kxIF4oICBCc28xICYgIEJzdTEgKTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCAgQnN1MSB8ICBCc2ExICk7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXiggIEJzYTEgJiAgQnNlMSApOyBcCitcCisKKyNlbHNlIC8qICBVc2VCZWJpZ29raW1pc2EgKi8KKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oKH5CYmUwKSYgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIENhMCA9IEUjI2JhMDsgXAorICAgIEEjI21vMSBePSBEbzE7IFwKKyAgICBCYm8wID0gUk9MMzIoQSMjbW8xLCAxMSk7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApJiAgQmJvMCApOyBcCisgICAgQ2UwID0gRSMjYmUwOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oKH5CYm8wKSYgIEJidTAgKTsgXAorICAgIENpMCA9IEUjI2JpMDsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCh+QmJ1MCkmICBCYmEwICk7IFwKKyAgICBDbzAgPSBFIyNibzA7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXigofkJiYTApJiAgQmJlMCApOyBcCisgICAgQ3UwID0gRSMjYnUwOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCh+QmJlMSkmICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBDYTEgPSBFIyNiYTE7IFwKKyAgICBBIyNtbzAgXj0gRG8wOyBcCisgICAgQmJvMSA9IFJPTDMyKEEjI21vMCwgMTApOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKSYgIEJibzEgKTsgXAorICAgIENlMSA9IEUjI2JlMTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCh+QmJvMSkmICBCYnUxICk7IFwKKyAgICBDaTEgPSBFIyNiaTE7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXigofkJidTEpJiAgQmJhMSApOyBcCisgICAgQ28xID0gRSMjYm8xOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oKH5CYmExKSYgIEJiZTEgKTsgXAorICAgIEN1MSA9IEUjI2J1MTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgRSMjZ2EwID0gICBCZ2EwIF4oKH5CZ2UwKSYgIEJnaTAgKTsgXAorICAgIENhMCBePSBFIyNnYTA7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oKH5CZ2kwKSYgIEJnbzAgKTsgXAorICAgIENlMCBePSBFIyNnZTA7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oKH5CZ28wKSYgIEJndTAgKTsgXAorICAgIENpMCBePSBFIyNnaTA7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXigofkJndTApJiAgQmdhMCApOyBcCisgICAgQ28wIF49IEUjI2dvMDsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCh+QmdhMCkmICBCZ2UwICk7IFwKKyAgICBDdTAgXj0gRSMjZ3UwOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXigofkJnZTEpJiAgQmdpMSApOyBcCisgICAgQ2ExIF49IEUjI2dhMTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXigofkJnaTEpJiAgQmdvMSApOyBcCisgICAgQ2UxIF49IEUjI2dlMTsgXAorICAgIEEjI3NpMCBePSBEaTA7IFwKKyAgICBCZ3UxID0gUk9MMzIoQSMjc2kwLCAzMCk7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXigofkJnbzEpJiAgQmd1MSApOyBcCisgICAgQ2kxIF49IEUjI2dpMTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCh+Qmd1MSkmICBCZ2ExICk7IFwKKyAgICBDbzEgXj0gRSMjZ28xOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oKH5CZ2ExKSYgIEJnZTEgKTsgXAorICAgIEN1MSBePSBFIyNndTE7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oKH5Ca2UwKSYgIEJraTAgKTsgXAorICAgIENhMCBePSBFIyNrYTA7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXigofkJraTApJiAgQmtvMCApOyBcCisgICAgQ2UwIF49IEUjI2tlMDsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBDaTAgXj0gRSMja2kwOyBcCisgICAgRSMja28wID0gICBCa28wIF4oKH5Ca3UwKSYgIEJrYTAgKTsgXAorICAgIENvMCBePSBFIyNrbzA7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXigofkJrYTApJiAgQmtlMCApOyBcCisgICAgQ3UwIF49IEUjI2t1MDsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCh+QmtlMSkmICBCa2kxICk7IFwKKyAgICBDYTEgXj0gRSMja2ExOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oKH5Ca2kxKSYgIEJrbzEgKTsgXAorICAgIENlMSBePSBFIyNrZTE7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgQ2kxIF49IEUjI2tpMTsgXAorICAgIEUjI2tvMSA9ICAgQmtvMSBeKCh+Qmt1MSkmICBCa2ExICk7IFwKKyAgICBDbzEgXj0gRSMja28xOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oKH5Ca2ExKSYgIEJrZTEgKTsgXAorICAgIEN1MSBePSBFIyNrdTE7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCh+Qm1lMCkmICBCbWkwICk7IFwKKyAgICBDYTAgXj0gRSMjbWEwOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oKH5CbWkwKSYgIEJtbzAgKTsgXAorICAgIENlMCBePSBFIyNtZTA7IFwKKyAgICBBIyNzbzAgXj0gRG8wOyBcCisgICAgQm11MCA9IFJPTDMyKEEjI3NvMCwgMjgpOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKSYgIEJtdTAgKTsgXAorICAgIENpMCBePSBFIyNtaTA7IFwKKyAgICBFIyNtbzAgPSAgIEJtbzAgXigofkJtdTApJiAgQm1hMCApOyBcCisgICAgQ28wIF49IEUjI21vMDsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCh+Qm1hMCkmICBCbWUwICk7IFwKKyAgICBDdTAgXj0gRSMjbXUwOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXigofkJtZTEpJiAgQm1pMSApOyBcCisgICAgQ2ExIF49IEUjI21hMTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCh+Qm1pMSkmICBCbW8xICk7IFwKKyAgICBDZTEgXj0gRSMjbWUxOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSkmICBCbXUxICk7IFwKKyAgICBDaTEgXj0gRSMjbWkxOyBcCisgICAgRSMjbW8xID0gICBCbW8xIF4oKH5CbXUxKSYgIEJtYTEgKTsgXAorICAgIENvMSBePSBFIyNtbzE7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXigofkJtYTEpJiAgQm1lMSApOyBcCisgICAgQ3UxIF49IEUjI211MTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBDYTAgXj0gRSMjc2EwOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEUjI3NlMCA9ICAgQnNlMCBeKCh+QnNpMCkmICBCc28wICk7IFwKKyAgICBDZTAgXj0gRSMjc2UwOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oKH5Cc28wKSYgIEJzdTAgKTsgXAorICAgIENpMCBePSBFIyNzaTA7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXigofkJzdTApJiAgQnNhMCApOyBcCisgICAgQ28wIF49IEUjI3NvMDsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCh+QnNhMCkmICBCc2UwICk7IFwKKyAgICBDdTAgXj0gRSMjc3UwOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIENhMSBePSBFIyNzYTE7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgRSMjc2UxID0gICBCc2UxIF4oKH5Cc2kxKSYgIEJzbzEgKTsgXAorICAgIENlMSBePSBFIyNzZTE7IFwKKyAgICBBIyNzZTEgXj0gRGUxOyBcCisgICAgQnN1MSA9IFJPTDMyKEEjI3NlMSwgMSk7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXigofkJzbzEpJiAgQnN1MSApOyBcCisgICAgQ2kxIF49IEUjI3NpMTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCh+QnN1MSkmICBCc2ExICk7IFwKKyAgICBDbzEgXj0gRSMjc28xOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oKH5Cc2ExKSYgIEJzZTEgKTsgXAorICAgIEN1MSBePSBFIyNzdTE7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAqLworLyogIC0tLSB1c2luZyBmYWN0b3IgMiBpbnRlcmxlYXZpbmcsIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gMzItYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYTAgPSBDdTBeUk9MMzIoQ2UxLCAxKTsgXAorICAgIERhMSA9IEN1MV5DZTA7IFwKKyAgICBEZTAgPSBDYTBeUk9MMzIoQ2kxLCAxKTsgXAorICAgIERlMSA9IENhMV5DaTA7IFwKKyAgICBEaTAgPSBDZTBeUk9MMzIoQ28xLCAxKTsgXAorICAgIERpMSA9IENlMV5DbzA7IFwKKyAgICBEbzAgPSBDaTBeUk9MMzIoQ3UxLCAxKTsgXAorICAgIERvMSA9IENpMV5DdTA7IFwKKyAgICBEdTAgPSBDbzBeUk9MMzIoQ2ExLCAxKTsgXAorICAgIER1MSA9IENvMV5DYTA7IFwKK1wKKyAgICBBIyNiYTAgXj0gRGEwOyBcCisgICAgQmJhMCA9IEEjI2JhMDsgXAorICAgIEEjI2dlMCBePSBEZTA7IFwKKyAgICBCYmUwID0gUk9MMzIoQSMjZ2UwLCAyMik7IFwKKyAgICBBIyNraTEgXj0gRGkxOyBcCisgICAgQmJpMCA9IFJPTDMyKEEjI2tpMSwgMjIpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oKH5CYmUwKSYgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIEEjI21vMSBePSBEbzE7IFwKKyAgICBCYm8wID0gUk9MMzIoQSMjbW8xLCAxMSk7IFwKKyAgICBFIyNiZTAgPSAgIEJiZTAgXigofkJiaTApJiAgQmJvMCApOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmkwID0gICBCYmkwIF4oKH5CYm8wKSYgIEJidTAgKTsgXAorICAgIEUjI2JvMCA9ICAgQmJvMCBeKCh+QmJ1MCkmICBCYmEwICk7IFwKKyAgICBFIyNidTAgPSAgIEJidTAgXigofkJiYTApJiAgQmJlMCApOyBcCitcCisgICAgQSMjYmExIF49IERhMTsgXAorICAgIEJiYTEgPSBBIyNiYTE7IFwKKyAgICBBIyNnZTEgXj0gRGUxOyBcCisgICAgQmJlMSA9IFJPTDMyKEEjI2dlMSwgMjIpOyBcCisgICAgQSMja2kwIF49IERpMDsgXAorICAgIEJiaTEgPSBST0wzMihBIyNraTAsIDIxKTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCh+QmJlMSkmICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBBIyNtbzAgXj0gRG8wOyBcCisgICAgQmJvMSA9IFJPTDMyKEEjI21vMCwgMTApOyBcCisgICAgRSMjYmUxID0gICBCYmUxIF4oKH5CYmkxKSYgIEJibzEgKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JpMSA9ICAgQmJpMSBeKCh+QmJvMSkmICBCYnUxICk7IFwKKyAgICBFIyNibzEgPSAgIEJibzEgXigofkJidTEpJiAgQmJhMSApOyBcCisgICAgRSMjYnUxID0gICBCYnUxIF4oKH5CYmExKSYgIEJiZTEgKTsgXAorXAorICAgIEEjI2JvMCBePSBEbzA7IFwKKyAgICBCZ2EwID0gUk9MMzIoQSMjYm8wLCAxNCk7IFwKKyAgICBBIyNndTAgXj0gRHUwOyBcCisgICAgQmdlMCA9IFJPTDMyKEEjI2d1MCwgMTApOyBcCisgICAgQSMja2ExIF49IERhMTsgXAorICAgIEJnaTAgPSBST0wzMihBIyNrYTEsIDIpOyBcCisgICAgRSMjZ2EwID0gICBCZ2EwIF4oKH5CZ2UwKSYgIEJnaTAgKTsgXAorICAgIEEjI21lMSBePSBEZTE7IFwKKyAgICBCZ28wID0gUk9MMzIoQSMjbWUxLCAyMyk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXigofkJnaTApJiAgQmdvMCApOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dpMCA9ICAgQmdpMCBeKCh+QmdvMCkmICBCZ3UwICk7IFwKKyAgICBFIyNnbzAgPSAgIEJnbzAgXigofkJndTApJiAgQmdhMCApOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oKH5CZ2EwKSYgIEJnZTAgKTsgXAorXAorICAgIEEjI2JvMSBePSBEbzE7IFwKKyAgICBCZ2ExID0gUk9MMzIoQSMjYm8xLCAxNCk7IFwKKyAgICBBIyNndTEgXj0gRHUxOyBcCisgICAgQmdlMSA9IFJPTDMyKEEjI2d1MSwgMTApOyBcCisgICAgQSMja2EwIF49IERhMDsgXAorICAgIEJnaTEgPSBST0wzMihBIyNrYTAsIDEpOyBcCisgICAgRSMjZ2ExID0gICBCZ2ExIF4oKH5CZ2UxKSYgIEJnaTEgKTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXigofkJnaTEpJiAgQmdvMSApOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCh+QmdvMSkmICBCZ3UxICk7IFwKKyAgICBFIyNnbzEgPSAgIEJnbzEgXigofkJndTEpJiAgQmdhMSApOyBcCisgICAgRSMjZ3UxID0gICBCZ3UxIF4oKH5CZ2ExKSYgIEJnZTEgKTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXigofkJrZTApJiAgQmtpMCApOyBcCisgICAgQSMjbXUwIF49IER1MDsgXAorICAgIEJrbzAgPSBST0wzMihBIyNtdTAsIDQpOyBcCisgICAgRSMja2UwID0gICBCa2UwIF4oKH5Ca2kwKSYgIEJrbzAgKTsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2tpMCA9ICAgQmtpMCBeKCh+QmtvMCkmICBCa3UwICk7IFwKKyAgICBFIyNrbzAgPSAgIEJrbzAgXigofkJrdTApJiAgQmthMCApOyBcCisgICAgRSMja3UwID0gICBCa3UwIF4oKH5Ca2EwKSYgIEJrZTAgKTsgXAorXAorICAgIEEjI2JlMCBePSBEZTA7IFwKKyAgICBCa2ExID0gQSMjYmUwOyBcCisgICAgQSMjZ2kxIF49IERpMTsgXAorICAgIEJrZTEgPSBST0wzMihBIyNnaTEsIDMpOyBcCisgICAgQSMja28wIF49IERvMDsgXAorICAgIEJraTEgPSBST0wzMihBIyNrbzAsIDEyKTsgXAorICAgIEUjI2thMSA9ICAgQmthMSBeKCh+QmtlMSkmICBCa2kxICk7IFwKKyAgICBBIyNtdTEgXj0gRHUxOyBcCisgICAgQmtvMSA9IFJPTDMyKEEjI211MSwgNCk7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXigofkJraTEpJiAgQmtvMSApOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2kxID0gICBCa2kxIF4oKH5Ca28xKSYgIEJrdTEgKTsgXAorICAgIEUjI2tvMSA9ICAgQmtvMSBeKCh+Qmt1MSkmICBCa2ExICk7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXigofkJrYTEpJiAgQmtlMSApOyBcCitcCisgICAgQSMjYnUxIF49IER1MTsgXAorICAgIEJtYTAgPSBST0wzMihBIyNidTEsIDE0KTsgXAorICAgIEEjI2dhMCBePSBEYTA7IFwKKyAgICBCbWUwID0gUk9MMzIoQSMjZ2EwLCAxOCk7IFwKKyAgICBBIyNrZTAgXj0gRGUwOyBcCisgICAgQm1pMCA9IFJPTDMyKEEjI2tlMCwgNSk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXigofkJtZTApJiAgQm1pMCApOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oKH5CbWkwKSYgIEJtbzAgKTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApJiAgQm11MCApOyBcCisgICAgRSMjbW8wID0gICBCbW8wIF4oKH5CbXUwKSYgIEJtYTAgKTsgXAorICAgIEUjI211MCA9ICAgQm11MCBeKCh+Qm1hMCkmICBCbWUwICk7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCh+Qm1lMSkmICBCbWkxICk7IFwKKyAgICBBIyNtaTAgXj0gRGkwOyBcCisgICAgQm1vMSA9IFJPTDMyKEEjI21pMCwgNyk7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXigofkJtaTEpJiAgQm1vMSApOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21pMSA9ICAgQm1pMSBeKCh+Qm1vMSkmICBCbXUxICk7IFwKKyAgICBFIyNtbzEgPSAgIEJtbzEgXigofkJtdTEpJiAgQm1hMSApOyBcCisgICAgRSMjbXUxID0gICBCbXUxIF4oKH5CbWExKSYgIEJtZTEgKTsgXAorXAorICAgIEEjI2JpMCBePSBEaTA7IFwKKyAgICBCc2EwID0gUk9MMzIoQSMjYmkwLCAzMSk7IFwKKyAgICBBIyNnbzEgXj0gRG8xOyBcCisgICAgQnNlMCA9IFJPTDMyKEEjI2dvMSwgMjgpOyBcCisgICAgQSMja3UxIF49IER1MTsgXAorICAgIEJzaTAgPSBST0wzMihBIyNrdTEsIDIwKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBBIyNtYTEgXj0gRGExOyBcCisgICAgQnNvMCA9IFJPTDMyKEEjI21hMSwgMjEpOyBcCisgICAgRSMjc2UwID0gICBCc2UwIF4oKH5Cc2kwKSYgIEJzbzAgKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NpMCA9ICAgQnNpMCBeKCh+QnNvMCkmICBCc3UwICk7IFwKKyAgICBFIyNzbzAgPSAgIEJzbzAgXigofkJzdTApJiAgQnNhMCApOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oKH5Cc2EwKSYgIEJzZTAgKTsgXAorXAorICAgIEEjI2JpMSBePSBEaTE7IFwKKyAgICBCc2ExID0gUk9MMzIoQSMjYmkxLCAzMSk7IFwKKyAgICBBIyNnbzAgXj0gRG8wOyBcCisgICAgQnNlMSA9IFJPTDMyKEEjI2dvMCwgMjcpOyBcCisgICAgQSMja3UwIF49IER1MDsgXAorICAgIEJzaTEgPSBST0wzMihBIyNrdTAsIDE5KTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgRSMjc2UxID0gICBCc2UxIF4oKH5Cc2kxKSYgIEJzbzEgKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCh+QnNvMSkmICBCc3UxICk7IFwKKyAgICBFIyNzbzEgPSAgIEJzbzEgXigofkJzdTEpJiAgQnNhMSApOyBcCisgICAgRSMjc3UxID0gICBCc3UxIF4oKH5Cc2ExKSYgIEJzZTEgKTsgXAorXAorCisjZW5kaWYgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworCitjb25zdCBVSU5UMzIgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbMjRdID0geworICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMIH07CisKK2NvbnN0IFVJTlQzMiBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVsyNF0gPSB7CisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwODlVTCwKKyAgICAweDgwMDAwMDhiVUwsCisgICAgMHg4MDAwODA4MFVMLAorICAgIDB4MDAwMDAwOGJVTCwKKyAgICAweDAwMDA4MDAwVUwsCisgICAgMHg4MDAwODA4OFVMLAorICAgIDB4ODAwMDAwODJVTCwKKyAgICAweDAwMDAwMDBiVUwsCisgICAgMHgwMDAwMDAwYVVMLAorICAgIDB4MDAwMDgwODJVTCwKKyAgICAweDAwMDA4MDAzVUwsCisgICAgMHgwMDAwODA4YlVMLAorICAgIDB4ODAwMDAwMGJVTCwKKyAgICAweDgwMDAwMDhhVUwsCisgICAgMHg4MDAwMDA4MVVMLAorICAgIDB4ODAwMDAwODFVTCwKKyAgICAweDgwMDAwMDA4VUwsCisgICAgMHgwMDAwMDA4M1VMLAorICAgIDB4ODAwMDgwMDNVTCwKKyAgICAweDgwMDA4MDg4VUwsCisgICAgMHg4MDAwMDA4OFVMLAorICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDgwMDA4MDgyVUwgfTsKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN11eaW5wdXRbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF1eaW5wdXRbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdXmlucHV0WzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXV5pbnB1dFsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM11eaW5wdXRbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdXmlucHV0WzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XV5pbnB1dFsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl1eaW5wdXRbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddXmlucHV0WzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XV5pbnB1dFsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV1eaW5wdXRbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdXmlucHV0WzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXV5pbnB1dFszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM107IFwKKyAgICBYIyNtaTAgPSBzdGF0ZVszNF07IFwKKyAgICBYIyNtaTEgPSBzdGF0ZVszNV07IFwKKyAgICBYIyNtbzAgPSBzdGF0ZVszNl07IFwKKyAgICBYIyNtbzEgPSBzdGF0ZVszN107IFwKKyAgICBYIyNtdTAgPSBzdGF0ZVszOF07IFwKKyAgICBYIyNtdTEgPSBzdGF0ZVszOV07IFwKKyAgICBYIyNzYTAgPSBzdGF0ZVs0MF07IFwKKyAgICBYIyNzYTEgPSBzdGF0ZVs0MV07IFwKKyAgICBYIyNzZTAgPSBzdGF0ZVs0Ml07IFwKKyAgICBYIyNzZTEgPSBzdGF0ZVs0M107IFwKKyAgICBYIyNzaTAgPSBzdGF0ZVs0NF07IFwKKyAgICBYIyNzaTEgPSBzdGF0ZVs0NV07IFwKKyAgICBYIyNzbzAgPSBzdGF0ZVs0Nl07IFwKKyAgICBYIyNzbzEgPSBzdGF0ZVs0N107IFwKKyAgICBYIyNzdTAgPSBzdGF0ZVs0OF07IFwKKyAgICBYIyNzdTEgPSBzdGF0ZVs0OV07IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN11eaW5wdXRbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF1eaW5wdXRbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdXmlucHV0WzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXV5pbnB1dFsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM11eaW5wdXRbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdXmlucHV0WzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XV5pbnB1dFsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl1eaW5wdXRbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddXmlucHV0WzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XV5pbnB1dFsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV1eaW5wdXRbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdXmlucHV0WzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXV5pbnB1dFszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl1eaW5wdXRbMzJdOyBcCisgICAgWCMjbWUxID0gc3RhdGVbMzNdXmlucHV0WzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF07IFwKKyAgICBYIyNiYTEgPSBzdGF0ZVsgMV07IFwKKyAgICBYIyNiZTAgPSBzdGF0ZVsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM107IFwKKyAgICBYIyNiaTAgPSBzdGF0ZVsgNF07IFwKKyAgICBYIyNiaTEgPSBzdGF0ZVsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl07IFwKKyAgICBYIyNibzEgPSBzdGF0ZVsgN107IFwKKyAgICBYIyNidTAgPSBzdGF0ZVsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV07IFwKKyAgICBYIyNnYTAgPSBzdGF0ZVsxMF07IFwKKyAgICBYIyNnYTEgPSBzdGF0ZVsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl07IFwKKyAgICBYIyNnZTEgPSBzdGF0ZVsxM107IFwKKyAgICBYIyNnaTAgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV07IFwKKyAgICBYIyNnbzAgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNnbzEgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF07IFwKKyAgICBYIyNndTEgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNrYTAgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV07IFwKKyAgICBYIyNrZTAgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNrZTEgPSBzdGF0ZVsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF07IFwKKyAgICBYIyNraTEgPSBzdGF0ZVsyNV07IFwKKyAgICBYIyNrbzAgPSBzdGF0ZVsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN107IFwKKyAgICBYIyNrdTAgPSBzdGF0ZVsyOF07IFwKKyAgICBYIyNrdTEgPSBzdGF0ZVsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF07IFwKKyAgICBYIyNtYTEgPSBzdGF0ZVszMV07IFwKKyAgICBYIyNtZTAgPSBzdGF0ZVszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM107IFwKKyAgICBYIyNtaTAgPSBzdGF0ZVszNF07IFwKKyAgICBYIyNtaTEgPSBzdGF0ZVszNV07IFwKKyAgICBYIyNtbzAgPSBzdGF0ZVszNl07IFwKKyAgICBYIyNtbzEgPSBzdGF0ZVszN107IFwKKyAgICBYIyNtdTAgPSBzdGF0ZVszOF07IFwKKyAgICBYIyNtdTEgPSBzdGF0ZVszOV07IFwKKyAgICBYIyNzYTAgPSBzdGF0ZVs0MF07IFwKKyAgICBYIyNzYTEgPSBzdGF0ZVs0MV07IFwKKyAgICBYIyNzZTAgPSBzdGF0ZVs0Ml07IFwKKyAgICBYIyNzZTEgPSBzdGF0ZVs0M107IFwKKyAgICBYIyNzaTAgPSBzdGF0ZVs0NF07IFwKKyAgICBYIyNzaTEgPSBzdGF0ZVs0NV07IFwKKyAgICBYIyNzbzAgPSBzdGF0ZVs0Nl07IFwKKyAgICBYIyNzbzEgPSBzdGF0ZVs0N107IFwKKyAgICBYIyNzdTAgPSBzdGF0ZVs0OF07IFwKKyAgICBYIyNzdTEgPSBzdGF0ZVs0OV07IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIHN0YXRlWyAwXSA9IFgjI2JhMDsgXAorICAgIHN0YXRlWyAxXSA9IFgjI2JhMTsgXAorICAgIHN0YXRlWyAyXSA9IFgjI2JlMDsgXAorICAgIHN0YXRlWyAzXSA9IFgjI2JlMTsgXAorICAgIHN0YXRlWyA0XSA9IFgjI2JpMDsgXAorICAgIHN0YXRlWyA1XSA9IFgjI2JpMTsgXAorICAgIHN0YXRlWyA2XSA9IFgjI2JvMDsgXAorICAgIHN0YXRlWyA3XSA9IFgjI2JvMTsgXAorICAgIHN0YXRlWyA4XSA9IFgjI2J1MDsgXAorICAgIHN0YXRlWyA5XSA9IFgjI2J1MTsgXAorICAgIHN0YXRlWzEwXSA9IFgjI2dhMDsgXAorICAgIHN0YXRlWzExXSA9IFgjI2dhMTsgXAorICAgIHN0YXRlWzEyXSA9IFgjI2dlMDsgXAorICAgIHN0YXRlWzEzXSA9IFgjI2dlMTsgXAorICAgIHN0YXRlWzE0XSA9IFgjI2dpMDsgXAorICAgIHN0YXRlWzE1XSA9IFgjI2dpMTsgXAorICAgIHN0YXRlWzE2XSA9IFgjI2dvMDsgXAorICAgIHN0YXRlWzE3XSA9IFgjI2dvMTsgXAorICAgIHN0YXRlWzE4XSA9IFgjI2d1MDsgXAorICAgIHN0YXRlWzE5XSA9IFgjI2d1MTsgXAorICAgIHN0YXRlWzIwXSA9IFgjI2thMDsgXAorICAgIHN0YXRlWzIxXSA9IFgjI2thMTsgXAorICAgIHN0YXRlWzIyXSA9IFgjI2tlMDsgXAorICAgIHN0YXRlWzIzXSA9IFgjI2tlMTsgXAorICAgIHN0YXRlWzI0XSA9IFgjI2tpMDsgXAorICAgIHN0YXRlWzI1XSA9IFgjI2tpMTsgXAorICAgIHN0YXRlWzI2XSA9IFgjI2tvMDsgXAorICAgIHN0YXRlWzI3XSA9IFgjI2tvMTsgXAorICAgIHN0YXRlWzI4XSA9IFgjI2t1MDsgXAorICAgIHN0YXRlWzI5XSA9IFgjI2t1MTsgXAorICAgIHN0YXRlWzMwXSA9IFgjI21hMDsgXAorICAgIHN0YXRlWzMxXSA9IFgjI21hMTsgXAorICAgIHN0YXRlWzMyXSA9IFgjI21lMDsgXAorICAgIHN0YXRlWzMzXSA9IFgjI21lMTsgXAorICAgIHN0YXRlWzM0XSA9IFgjI21pMDsgXAorICAgIHN0YXRlWzM1XSA9IFgjI21pMTsgXAorICAgIHN0YXRlWzM2XSA9IFgjI21vMDsgXAorICAgIHN0YXRlWzM3XSA9IFgjI21vMTsgXAorICAgIHN0YXRlWzM4XSA9IFgjI211MDsgXAorICAgIHN0YXRlWzM5XSA9IFgjI211MTsgXAorICAgIHN0YXRlWzQwXSA9IFgjI3NhMDsgXAorICAgIHN0YXRlWzQxXSA9IFgjI3NhMTsgXAorICAgIHN0YXRlWzQyXSA9IFgjI3NlMDsgXAorICAgIHN0YXRlWzQzXSA9IFgjI3NlMTsgXAorICAgIHN0YXRlWzQ0XSA9IFgjI3NpMDsgXAorICAgIHN0YXRlWzQ1XSA9IFgjI3NpMTsgXAorICAgIHN0YXRlWzQ2XSA9IFgjI3NvMDsgXAorICAgIHN0YXRlWzQ3XSA9IFgjI3NvMTsgXAorICAgIHN0YXRlWzQ4XSA9IFgjI3N1MDsgXAorICAgIHN0YXRlWzQ5XSA9IFgjI3N1MTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmEwID0gWSMjYmEwOyBcCisgICAgWCMjYmExID0gWSMjYmExOyBcCisgICAgWCMjYmUwID0gWSMjYmUwOyBcCisgICAgWCMjYmUxID0gWSMjYmUxOyBcCisgICAgWCMjYmkwID0gWSMjYmkwOyBcCisgICAgWCMjYmkxID0gWSMjYmkxOyBcCisgICAgWCMjYm8wID0gWSMjYm8wOyBcCisgICAgWCMjYm8xID0gWSMjYm8xOyBcCisgICAgWCMjYnUwID0gWSMjYnUwOyBcCisgICAgWCMjYnUxID0gWSMjYnUxOyBcCisgICAgWCMjZ2EwID0gWSMjZ2EwOyBcCisgICAgWCMjZ2ExID0gWSMjZ2ExOyBcCisgICAgWCMjZ2UwID0gWSMjZ2UwOyBcCisgICAgWCMjZ2UxID0gWSMjZ2UxOyBcCisgICAgWCMjZ2kwID0gWSMjZ2kwOyBcCisgICAgWCMjZ2kxID0gWSMjZ2kxOyBcCisgICAgWCMjZ28wID0gWSMjZ28wOyBcCisgICAgWCMjZ28xID0gWSMjZ28xOyBcCisgICAgWCMjZ3UwID0gWSMjZ3UwOyBcCisgICAgWCMjZ3UxID0gWSMjZ3UxOyBcCisgICAgWCMja2EwID0gWSMja2EwOyBcCisgICAgWCMja2ExID0gWSMja2ExOyBcCisgICAgWCMja2UwID0gWSMja2UwOyBcCisgICAgWCMja2UxID0gWSMja2UxOyBcCisgICAgWCMja2kwID0gWSMja2kwOyBcCisgICAgWCMja2kxID0gWSMja2kxOyBcCisgICAgWCMja28wID0gWSMja28wOyBcCisgICAgWCMja28xID0gWSMja28xOyBcCisgICAgWCMja3UwID0gWSMja3UwOyBcCisgICAgWCMja3UxID0gWSMja3UxOyBcCisgICAgWCMjbWEwID0gWSMjbWEwOyBcCisgICAgWCMjbWExID0gWSMjbWExOyBcCisgICAgWCMjbWUwID0gWSMjbWUwOyBcCisgICAgWCMjbWUxID0gWSMjbWUxOyBcCisgICAgWCMjbWkwID0gWSMjbWkwOyBcCisgICAgWCMjbWkxID0gWSMjbWkxOyBcCisgICAgWCMjbW8wID0gWSMjbW8wOyBcCisgICAgWCMjbW8xID0gWSMjbW8xOyBcCisgICAgWCMjbXUwID0gWSMjbXUwOyBcCisgICAgWCMjbXUxID0gWSMjbXUxOyBcCisgICAgWCMjc2EwID0gWSMjc2EwOyBcCisgICAgWCMjc2ExID0gWSMjc2ExOyBcCisgICAgWCMjc2UwID0gWSMjc2UwOyBcCisgICAgWCMjc2UxID0gWSMjc2UxOyBcCisgICAgWCMjc2kwID0gWSMjc2kwOyBcCisgICAgWCMjc2kxID0gWSMjc2kxOyBcCisgICAgWCMjc28wID0gWSMjc28wOyBcCisgICAgWCMjc28xID0gWSMjc28xOyBcCisgICAgWCMjc3UwID0gWSMjc3UwOyBcCisgICAgWCMjc3UxID0gWSMjc3UxOyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzIubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZGU2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtMzIubWFjcm9zCkBAIC0wLDAgKzEsMjYgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaWZkZWYgVXNlU2NoZWR1bGUKKyAgICAjaWYgKFVzZVNjaGVkdWxlID09IDEpCisgICAgICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAtMzItczEubWFjcm9zIgorICAgICNlbGlmIChVc2VTY2hlZHVsZSA9PSAyKQorICAgICAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTMyLXMyLm1hY3JvcyIKKyAgICAjZWxpZiAoVXNlU2NoZWR1bGUgPT0gMykKKyAgICAgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC0zMi1ydmsubWFjcm9zIgorICAgICNlbHNlCisgICAgICAgICNlcnJvciAiVGhpcyBzY2hlZHVsZSBpcyBub3Qgc3VwcG9ydGVkLiIKKyAgICAjZW5kaWYKKyNlbHNlCisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MiCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC02NC5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtNjQubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMGY3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtNjQubWFjcm9zCkBAIC0wLDAgKzEsNzI4IEBACisvKgorQ29kZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBLZWNjYWtUb29scyEKKworVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFVJTlQ2NCBBYmEsIEFiZSwgQWJpLCBBYm8sIEFidTsgXAorICAgIFVJTlQ2NCBBZ2EsIEFnZSwgQWdpLCBBZ28sIEFndTsgXAorICAgIFVJTlQ2NCBBa2EsIEFrZSwgQWtpLCBBa28sIEFrdTsgXAorICAgIFVJTlQ2NCBBbWEsIEFtZSwgQW1pLCBBbW8sIEFtdTsgXAorICAgIFVJTlQ2NCBBc2EsIEFzZSwgQXNpLCBBc28sIEFzdTsgXAorICAgIFVJTlQ2NCBCYmEsIEJiZSwgQmJpLCBCYm8sIEJidTsgXAorICAgIFVJTlQ2NCBCZ2EsIEJnZSwgQmdpLCBCZ28sIEJndTsgXAorICAgIFVJTlQ2NCBCa2EsIEJrZSwgQmtpLCBCa28sIEJrdTsgXAorICAgIFVJTlQ2NCBCbWEsIEJtZSwgQm1pLCBCbW8sIEJtdTsgXAorICAgIFVJTlQ2NCBCc2EsIEJzZSwgQnNpLCBCc28sIEJzdTsgXAorICAgIFVJTlQ2NCBDYSwgQ2UsIENpLCBDbywgQ3U7IFwKKyAgICBVSU5UNjQgRGEsIERlLCBEaSwgRG8sIER1OyBcCisgICAgVUlOVDY0IEViYSwgRWJlLCBFYmksIEVibywgRWJ1OyBcCisgICAgVUlOVDY0IEVnYSwgRWdlLCBFZ2ksIEVnbywgRWd1OyBcCisgICAgVUlOVDY0IEVrYSwgRWtlLCBFa2ksIEVrbywgRWt1OyBcCisgICAgVUlOVDY0IEVtYSwgRW1lLCBFbWksIEVtbywgRW11OyBcCisgICAgVUlOVDY0IEVzYSwgRXNlLCBFc2ksIEVzbywgRXN1OyBcCisKKyNkZWZpbmUgcHJlcGFyZVRoZXRhIFwKKyAgICBDYSA9IEFiYV5BZ2FeQWthXkFtYV5Bc2E7IFwKKyAgICBDZSA9IEFiZV5BZ2VeQWtlXkFtZV5Bc2U7IFwKKyAgICBDaSA9IEFiaV5BZ2leQWtpXkFtaV5Bc2k7IFwKKyAgICBDbyA9IEFib15BZ29eQWtvXkFtb15Bc287IFwKKyAgICBDdSA9IEFidV5BZ3VeQWt1XkFtdV5Bc3U7IFwKKworI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorLyogIC0tLSBDb2RlIGZvciByb3VuZCwgd2l0aCBwcmVwYXJlLXRoZXRhIChsYW5lIGNvbXBsZW1lbnRpbmcgcGF0dGVybiAnYmViaWdva2ltaXNhJykgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhID0gQ3VeUk9MNjQoQ2UsIDEpOyBcCisgICAgRGUgPSBDYV5ST0w2NChDaSwgMSk7IFwKKyAgICBEaSA9IENlXlJPTDY0KENvLCAxKTsgXAorICAgIERvID0gQ2leUk9MNjQoQ3UsIDEpOyBcCisgICAgRHUgPSBDb15ST0w2NChDYSwgMSk7IFwKK1wKKyAgICBBIyNiYSBePSBEYTsgXAorICAgIEJiYSA9IEEjI2JhOyBcCisgICAgQSMjZ2UgXj0gRGU7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgQSMja2kgXj0gRGk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgQSMjbW8gXj0gRG87IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgQSMjc3UgXj0gRHU7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmEgPSAgIEJiYSBeKCAgQmJlIHwgIEJiaSApOyBcCisgICAgRSMjYmEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXTsgXAorICAgIENhID0gRSMjYmE7IFwKKyAgICBFIyNiZSA9ICAgQmJlIF4oKH5CYmkpfCAgQmJvICk7IFwKKyAgICBDZSA9IEUjI2JlOyBcCisgICAgRSMjYmkgPSAgIEJiaSBeKCAgQmJvICYgIEJidSApOyBcCisgICAgQ2kgPSBFIyNiaTsgXAorICAgIEUjI2JvID0gICBCYm8gXiggIEJidSB8ICBCYmEgKTsgXAorICAgIENvID0gRSMjYm87IFwKKyAgICBFIyNidSA9ICAgQmJ1IF4oICBCYmEgJiAgQmJlICk7IFwKKyAgICBDdSA9IEUjI2J1OyBcCitcCisgICAgQSMjYm8gXj0gRG87IFwKKyAgICBCZ2EgPSBST0w2NChBIyNibywgMjgpOyBcCisgICAgQSMjZ3UgXj0gRHU7IFwKKyAgICBCZ2UgPSBST0w2NChBIyNndSwgMjApOyBcCisgICAgQSMja2EgXj0gRGE7IFwKKyAgICBCZ2kgPSBST0w2NChBIyNrYSwgMyk7IFwKKyAgICBBIyNtZSBePSBEZTsgXAorICAgIEJnbyA9IFJPTDY0KEEjI21lLCA0NSk7IFwKKyAgICBBIyNzaSBePSBEaTsgXAorICAgIEJndSA9IFJPTDY0KEEjI3NpLCA2MSk7IFwKKyAgICBFIyNnYSA9ICAgQmdhIF4oICBCZ2UgfCAgQmdpICk7IFwKKyAgICBDYSBePSBFIyNnYTsgXAorICAgIEUjI2dlID0gICBCZ2UgXiggIEJnaSAmICBCZ28gKTsgXAorICAgIENlIF49IEUjI2dlOyBcCisgICAgRSMjZ2kgPSAgIEJnaSBeKCAgQmdvIHwofkJndSkpOyBcCisgICAgQ2kgXj0gRSMjZ2k7IFwKKyAgICBFIyNnbyA9ICAgQmdvIF4oICBCZ3UgfCAgQmdhICk7IFwKKyAgICBDbyBePSBFIyNnbzsgXAorICAgIEUjI2d1ID0gICBCZ3UgXiggIEJnYSAmICBCZ2UgKTsgXAorICAgIEN1IF49IEUjI2d1OyBcCitcCisgICAgQSMjYmUgXj0gRGU7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBBIyNnaSBePSBEaTsgXAorICAgIEJrZSA9IFJPTDY0KEEjI2dpLCA2KTsgXAorICAgIEEjI2tvIF49IERvOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEEjI211IF49IER1OyBcCisgICAgQmtvID0gUk9MNjQoQSMjbXUsIDgpOyBcCisgICAgQSMjc2EgXj0gRGE7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2EgPSAgIEJrYSBeKCAgQmtlIHwgIEJraSApOyBcCisgICAgQ2EgXj0gRSMja2E7IFwKKyAgICBFIyNrZSA9ICAgQmtlIF4oICBCa2kgJiAgQmtvICk7IFwKKyAgICBDZSBePSBFIyNrZTsgXAorICAgIEUjI2tpID0gICBCa2kgXigofkJrbykmICBCa3UgKTsgXAorICAgIENpIF49IEUjI2tpOyBcCisgICAgRSMja28gPSAofkJrbyleKCAgQmt1IHwgIEJrYSApOyBcCisgICAgQ28gXj0gRSMja287IFwKKyAgICBFIyNrdSA9ICAgQmt1IF4oICBCa2EgJiAgQmtlICk7IFwKKyAgICBDdSBePSBFIyNrdTsgXAorXAorICAgIEEjI2J1IF49IER1OyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIEEjI2dhIF49IERhOyBcCisgICAgQm1lID0gUk9MNjQoQSMjZ2EsIDM2KTsgXAorICAgIEEjI2tlIF49IERlOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEEjI21pIF49IERpOyBcCisgICAgQm1vID0gUk9MNjQoQSMjbWksIDE1KTsgXAorICAgIEEjI3NvIF49IERvOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21hID0gICBCbWEgXiggIEJtZSAmICBCbWkgKTsgXAorICAgIENhIF49IEUjI21hOyBcCisgICAgRSMjbWUgPSAgIEJtZSBeKCAgQm1pIHwgIEJtbyApOyBcCisgICAgQ2UgXj0gRSMjbWU7IFwKKyAgICBFIyNtaSA9ICAgQm1pIF4oKH5CbW8pfCAgQm11ICk7IFwKKyAgICBDaSBePSBFIyNtaTsgXAorICAgIEUjI21vID0gKH5CbW8pXiggIEJtdSAmICBCbWEgKTsgXAorICAgIENvIF49IEUjI21vOyBcCisgICAgRSMjbXUgPSAgIEJtdSBeKCAgQm1hIHwgIEJtZSApOyBcCisgICAgQ3UgXj0gRSMjbXU7IFwKK1wKKyAgICBBIyNiaSBePSBEaTsgXAorICAgIEJzYSA9IFJPTDY0KEEjI2JpLCA2Mik7IFwKKyAgICBBIyNnbyBePSBEbzsgXAorICAgIEJzZSA9IFJPTDY0KEEjI2dvLCA1NSk7IFwKKyAgICBBIyNrdSBePSBEdTsgXAorICAgIEJzaSA9IFJPTDY0KEEjI2t1LCAzOSk7IFwKKyAgICBBIyNtYSBePSBEYTsgXAorICAgIEJzbyA9IFJPTDY0KEEjI21hLCA0MSk7IFwKKyAgICBBIyNzZSBePSBEZTsgXAorICAgIEJzdSA9IFJPTDY0KEEjI3NlLCAyKTsgXAorICAgIEUjI3NhID0gICBCc2EgXigofkJzZSkmICBCc2kgKTsgXAorICAgIENhIF49IEUjI3NhOyBcCisgICAgRSMjc2UgPSAofkJzZSleKCAgQnNpIHwgIEJzbyApOyBcCisgICAgQ2UgXj0gRSMjc2U7IFwKKyAgICBFIyNzaSA9ICAgQnNpIF4oICBCc28gJiAgQnN1ICk7IFwKKyAgICBDaSBePSBFIyNzaTsgXAorICAgIEUjI3NvID0gICBCc28gXiggIEJzdSB8ICBCc2EgKTsgXAorICAgIENvIF49IEUjI3NvOyBcCisgICAgRSMjc3UgPSAgIEJzdSBeKCAgQnNhICYgIEJzZSApOyBcCisgICAgQ3UgXj0gRSMjc3U7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYSA9IEN1XlJPTDY0KENlLCAxKTsgXAorICAgIERlID0gQ2FeUk9MNjQoQ2ksIDEpOyBcCisgICAgRGkgPSBDZV5ST0w2NChDbywgMSk7IFwKKyAgICBEbyA9IENpXlJPTDY0KEN1LCAxKTsgXAorICAgIER1ID0gQ29eUk9MNjQoQ2EsIDEpOyBcCitcCisgICAgQSMjYmEgXj0gRGE7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIEEjI2dlIF49IERlOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIEEjI2tpIF49IERpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEEjI21vIF49IERvOyBcCisgICAgQmJvID0gUk9MNjQoQSMjbW8sIDIxKTsgXAorICAgIEEjI3N1IF49IER1OyBcCisgICAgQmJ1ID0gUk9MNjQoQSMjc3UsIDE0KTsgXAorICAgIEUjI2JhID0gICBCYmEgXiggIEJiZSB8ICBCYmkgKTsgXAorICAgIEUjI2JhIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV07IFwKKyAgICBFIyNiZSA9ICAgQmJlIF4oKH5CYmkpfCAgQmJvICk7IFwKKyAgICBFIyNiaSA9ICAgQmJpIF4oICBCYm8gJiAgQmJ1ICk7IFwKKyAgICBFIyNibyA9ICAgQmJvIF4oICBCYnUgfCAgQmJhICk7IFwKKyAgICBFIyNidSA9ICAgQmJ1IF4oICBCYmEgJiAgQmJlICk7IFwKK1wKKyAgICBBIyNibyBePSBEbzsgXAorICAgIEJnYSA9IFJPTDY0KEEjI2JvLCAyOCk7IFwKKyAgICBBIyNndSBePSBEdTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBBIyNrYSBePSBEYTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEEjI21lIF49IERlOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEEjI3NpIF49IERpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEUjI2dhID0gICBCZ2EgXiggIEJnZSB8ICBCZ2kgKTsgXAorICAgIEUjI2dlID0gICBCZ2UgXiggIEJnaSAmICBCZ28gKTsgXAorICAgIEUjI2dpID0gICBCZ2kgXiggIEJnbyB8KH5CZ3UpKTsgXAorICAgIEUjI2dvID0gICBCZ28gXiggIEJndSB8ICBCZ2EgKTsgXAorICAgIEUjI2d1ID0gICBCZ3UgXiggIEJnYSAmICBCZ2UgKTsgXAorXAorICAgIEEjI2JlIF49IERlOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgQSMjZ2kgXj0gRGk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBBIyNrbyBePSBEbzsgXAorICAgIEJraSA9IFJPTDY0KEEjI2tvLCAyNSk7IFwKKyAgICBBIyNtdSBePSBEdTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEEjI3NhIF49IERhOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2thID0gICBCa2EgXiggIEJrZSB8ICBCa2kgKTsgXAorICAgIEUjI2tlID0gICBCa2UgXiggIEJraSAmICBCa28gKTsgXAorICAgIEUjI2tpID0gICBCa2kgXigofkJrbykmICBCa3UgKTsgXAorICAgIEUjI2tvID0gKH5Ca28pXiggIEJrdSB8ICBCa2EgKTsgXAorICAgIEUjI2t1ID0gICBCa3UgXiggIEJrYSAmICBCa2UgKTsgXAorXAorICAgIEEjI2J1IF49IER1OyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIEEjI2dhIF49IERhOyBcCisgICAgQm1lID0gUk9MNjQoQSMjZ2EsIDM2KTsgXAorICAgIEEjI2tlIF49IERlOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEEjI21pIF49IERpOyBcCisgICAgQm1vID0gUk9MNjQoQSMjbWksIDE1KTsgXAorICAgIEEjI3NvIF49IERvOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21hID0gICBCbWEgXiggIEJtZSAmICBCbWkgKTsgXAorICAgIEUjI21lID0gICBCbWUgXiggIEJtaSB8ICBCbW8gKTsgXAorICAgIEUjI21pID0gICBCbWkgXigofkJtbyl8ICBCbXUgKTsgXAorICAgIEUjI21vID0gKH5CbW8pXiggIEJtdSAmICBCbWEgKTsgXAorICAgIEUjI211ID0gICBCbXUgXiggIEJtYSB8ICBCbWUgKTsgXAorXAorICAgIEEjI2JpIF49IERpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIEEjI2dvIF49IERvOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIEEjI2t1IF49IER1OyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEEjI21hIF49IERhOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEEjI3NlIF49IERlOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2EgPSAgIEJzYSBeKCh+QnNlKSYgIEJzaSApOyBcCisgICAgRSMjc2UgPSAofkJzZSleKCAgQnNpIHwgIEJzbyApOyBcCisgICAgRSMjc2kgPSAgIEJzaSBeKCAgQnNvICYgIEJzdSApOyBcCisgICAgRSMjc28gPSAgIEJzbyBeKCAgQnN1IHwgIEJzYSApOyBcCisgICAgRSMjc3UgPSAgIEJzdSBeKCAgQnNhICYgIEJzZSApOyBcCitcCisKKyNlbHNlIC8qICBVc2VCZWJpZ29raW1pc2EgKi8KKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKSBcCisgICAgRGEgPSBDdV5ST0w2NChDZSwgMSk7IFwKKyAgICBEZSA9IENhXlJPTDY0KENpLCAxKTsgXAorICAgIERpID0gQ2VeUk9MNjQoQ28sIDEpOyBcCisgICAgRG8gPSBDaV5ST0w2NChDdSwgMSk7IFwKKyAgICBEdSA9IENvXlJPTDY0KENhLCAxKTsgXAorXAorICAgIEEjI2JhIF49IERhOyBcCisgICAgQmJhID0gQSMjYmE7IFwKKyAgICBBIyNnZSBePSBEZTsgXAorICAgIEJiZSA9IFJPTDY0KEEjI2dlLCA0NCk7IFwKKyAgICBBIyNraSBePSBEaTsgXAorICAgIEJiaSA9IFJPTDY0KEEjI2tpLCA0Myk7IFwKKyAgICBBIyNtbyBePSBEbzsgXAorICAgIEJibyA9IFJPTDY0KEEjI21vLCAyMSk7IFwKKyAgICBBIyNzdSBePSBEdTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBFIyNiYSA9ICAgQmJhIF4oKH5CYmUpJiAgQmJpICk7IFwKKyAgICBFIyNiYSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldOyBcCisgICAgQ2EgPSBFIyNiYTsgXAorICAgIEUjI2JlID0gICBCYmUgXigofkJiaSkmICBCYm8gKTsgXAorICAgIENlID0gRSMjYmU7IFwKKyAgICBFIyNiaSA9ICAgQmJpIF4oKH5CYm8pJiAgQmJ1ICk7IFwKKyAgICBDaSA9IEUjI2JpOyBcCisgICAgRSMjYm8gPSAgIEJibyBeKCh+QmJ1KSYgIEJiYSApOyBcCisgICAgQ28gPSBFIyNibzsgXAorICAgIEUjI2J1ID0gICBCYnUgXigofkJiYSkmICBCYmUgKTsgXAorICAgIEN1ID0gRSMjYnU7IFwKK1wKKyAgICBBIyNibyBePSBEbzsgXAorICAgIEJnYSA9IFJPTDY0KEEjI2JvLCAyOCk7IFwKKyAgICBBIyNndSBePSBEdTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBBIyNrYSBePSBEYTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEEjI21lIF49IERlOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEEjI3NpIF49IERpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEUjI2dhID0gICBCZ2EgXigofkJnZSkmICBCZ2kgKTsgXAorICAgIENhIF49IEUjI2dhOyBcCisgICAgRSMjZ2UgPSAgIEJnZSBeKCh+QmdpKSYgIEJnbyApOyBcCisgICAgQ2UgXj0gRSMjZ2U7IFwKKyAgICBFIyNnaSA9ICAgQmdpIF4oKH5CZ28pJiAgQmd1ICk7IFwKKyAgICBDaSBePSBFIyNnaTsgXAorICAgIEUjI2dvID0gICBCZ28gXigofkJndSkmICBCZ2EgKTsgXAorICAgIENvIF49IEUjI2dvOyBcCisgICAgRSMjZ3UgPSAgIEJndSBeKCh+QmdhKSYgIEJnZSApOyBcCisgICAgQ3UgXj0gRSMjZ3U7IFwKK1wKKyAgICBBIyNiZSBePSBEZTsgXAorICAgIEJrYSA9IFJPTDY0KEEjI2JlLCAxKTsgXAorICAgIEEjI2dpIF49IERpOyBcCisgICAgQmtlID0gUk9MNjQoQSMjZ2ksIDYpOyBcCisgICAgQSMja28gXj0gRG87IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgQSMjbXUgXj0gRHU7IFwKKyAgICBCa28gPSBST0w2NChBIyNtdSwgOCk7IFwKKyAgICBBIyNzYSBePSBEYTsgXAorICAgIEJrdSA9IFJPTDY0KEEjI3NhLCAxOCk7IFwKKyAgICBFIyNrYSA9ICAgQmthIF4oKH5Ca2UpJiAgQmtpICk7IFwKKyAgICBDYSBePSBFIyNrYTsgXAorICAgIEUjI2tlID0gICBCa2UgXigofkJraSkmICBCa28gKTsgXAorICAgIENlIF49IEUjI2tlOyBcCisgICAgRSMja2kgPSAgIEJraSBeKCh+QmtvKSYgIEJrdSApOyBcCisgICAgQ2kgXj0gRSMja2k7IFwKKyAgICBFIyNrbyA9ICAgQmtvIF4oKH5Ca3UpJiAgQmthICk7IFwKKyAgICBDbyBePSBFIyNrbzsgXAorICAgIEUjI2t1ID0gICBCa3UgXigofkJrYSkmICBCa2UgKTsgXAorICAgIEN1IF49IEUjI2t1OyBcCitcCisgICAgQSMjYnUgXj0gRHU7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQSMjZ2EgXj0gRGE7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgQSMja2UgXj0gRGU7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQSMjbWkgXj0gRGk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgQSMjc28gXj0gRG87IFwKKyAgICBCbXUgPSBST0w2NChBIyNzbywgNTYpOyBcCisgICAgRSMjbWEgPSAgIEJtYSBeKCh+Qm1lKSYgIEJtaSApOyBcCisgICAgQ2EgXj0gRSMjbWE7IFwKKyAgICBFIyNtZSA9ICAgQm1lIF4oKH5CbWkpJiAgQm1vICk7IFwKKyAgICBDZSBePSBFIyNtZTsgXAorICAgIEUjI21pID0gICBCbWkgXigofkJtbykmICBCbXUgKTsgXAorICAgIENpIF49IEUjI21pOyBcCisgICAgRSMjbW8gPSAgIEJtbyBeKCh+Qm11KSYgIEJtYSApOyBcCisgICAgQ28gXj0gRSMjbW87IFwKKyAgICBFIyNtdSA9ICAgQm11IF4oKH5CbWEpJiAgQm1lICk7IFwKKyAgICBDdSBePSBFIyNtdTsgXAorXAorICAgIEEjI2JpIF49IERpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIEEjI2dvIF49IERvOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIEEjI2t1IF49IER1OyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEEjI21hIF49IERhOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEEjI3NlIF49IERlOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2EgPSAgIEJzYSBeKCh+QnNlKSYgIEJzaSApOyBcCisgICAgQ2EgXj0gRSMjc2E7IFwKKyAgICBFIyNzZSA9ICAgQnNlIF4oKH5Cc2kpJiAgQnNvICk7IFwKKyAgICBDZSBePSBFIyNzZTsgXAorICAgIEUjI3NpID0gICBCc2kgXigofkJzbykmICBCc3UgKTsgXAorICAgIENpIF49IEUjI3NpOyBcCisgICAgRSMjc28gPSAgIEJzbyBeKCh+QnN1KSYgIEJzYSApOyBcCisgICAgQ28gXj0gRSMjc287IFwKKyAgICBFIyNzdSA9ICAgQnN1IF4oKH5Cc2EpJiAgQnNlICk7IFwKKyAgICBDdSBePSBFIyNzdTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYSA9IEN1XlJPTDY0KENlLCAxKTsgXAorICAgIERlID0gQ2FeUk9MNjQoQ2ksIDEpOyBcCisgICAgRGkgPSBDZV5ST0w2NChDbywgMSk7IFwKKyAgICBEbyA9IENpXlJPTDY0KEN1LCAxKTsgXAorICAgIER1ID0gQ29eUk9MNjQoQ2EsIDEpOyBcCitcCisgICAgQSMjYmEgXj0gRGE7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIEEjI2dlIF49IERlOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIEEjI2tpIF49IERpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEEjI21vIF49IERvOyBcCisgICAgQmJvID0gUk9MNjQoQSMjbW8sIDIxKTsgXAorICAgIEEjI3N1IF49IER1OyBcCisgICAgQmJ1ID0gUk9MNjQoQSMjc3UsIDE0KTsgXAorICAgIEUjI2JhID0gICBCYmEgXigofkJiZSkmICBCYmkgKTsgXAorICAgIEUjI2JhIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV07IFwKKyAgICBFIyNiZSA9ICAgQmJlIF4oKH5CYmkpJiAgQmJvICk7IFwKKyAgICBFIyNiaSA9ICAgQmJpIF4oKH5CYm8pJiAgQmJ1ICk7IFwKKyAgICBFIyNibyA9ICAgQmJvIF4oKH5CYnUpJiAgQmJhICk7IFwKKyAgICBFIyNidSA9ICAgQmJ1IF4oKH5CYmEpJiAgQmJlICk7IFwKK1wKKyAgICBBIyNibyBePSBEbzsgXAorICAgIEJnYSA9IFJPTDY0KEEjI2JvLCAyOCk7IFwKKyAgICBBIyNndSBePSBEdTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBBIyNrYSBePSBEYTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEEjI21lIF49IERlOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEEjI3NpIF49IERpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEUjI2dhID0gICBCZ2EgXigofkJnZSkmICBCZ2kgKTsgXAorICAgIEUjI2dlID0gICBCZ2UgXigofkJnaSkmICBCZ28gKTsgXAorICAgIEUjI2dpID0gICBCZ2kgXigofkJnbykmICBCZ3UgKTsgXAorICAgIEUjI2dvID0gICBCZ28gXigofkJndSkmICBCZ2EgKTsgXAorICAgIEUjI2d1ID0gICBCZ3UgXigofkJnYSkmICBCZ2UgKTsgXAorXAorICAgIEEjI2JlIF49IERlOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgQSMjZ2kgXj0gRGk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBBIyNrbyBePSBEbzsgXAorICAgIEJraSA9IFJPTDY0KEEjI2tvLCAyNSk7IFwKKyAgICBBIyNtdSBePSBEdTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEEjI3NhIF49IERhOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2thID0gICBCa2EgXigofkJrZSkmICBCa2kgKTsgXAorICAgIEUjI2tlID0gICBCa2UgXigofkJraSkmICBCa28gKTsgXAorICAgIEUjI2tpID0gICBCa2kgXigofkJrbykmICBCa3UgKTsgXAorICAgIEUjI2tvID0gICBCa28gXigofkJrdSkmICBCa2EgKTsgXAorICAgIEUjI2t1ID0gICBCa3UgXigofkJrYSkmICBCa2UgKTsgXAorXAorICAgIEEjI2J1IF49IER1OyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIEEjI2dhIF49IERhOyBcCisgICAgQm1lID0gUk9MNjQoQSMjZ2EsIDM2KTsgXAorICAgIEEjI2tlIF49IERlOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEEjI21pIF49IERpOyBcCisgICAgQm1vID0gUk9MNjQoQSMjbWksIDE1KTsgXAorICAgIEEjI3NvIF49IERvOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21hID0gICBCbWEgXigofkJtZSkmICBCbWkgKTsgXAorICAgIEUjI21lID0gICBCbWUgXigofkJtaSkmICBCbW8gKTsgXAorICAgIEUjI21pID0gICBCbWkgXigofkJtbykmICBCbXUgKTsgXAorICAgIEUjI21vID0gICBCbW8gXigofkJtdSkmICBCbWEgKTsgXAorICAgIEUjI211ID0gICBCbXUgXigofkJtYSkmICBCbWUgKTsgXAorXAorICAgIEEjI2JpIF49IERpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIEEjI2dvIF49IERvOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIEEjI2t1IF49IER1OyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEEjI21hIF49IERhOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEEjI3NlIF49IERlOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2EgPSAgIEJzYSBeKCh+QnNlKSYgIEJzaSApOyBcCisgICAgRSMjc2UgPSAgIEJzZSBeKCh+QnNpKSYgIEJzbyApOyBcCisgICAgRSMjc2kgPSAgIEJzaSBeKCh+QnNvKSYgIEJzdSApOyBcCisgICAgRSMjc28gPSAgIEJzbyBeKCh+QnN1KSYgIEJzYSApOyBcCisgICAgRSMjc3UgPSAgIEJzdSBeKCh+QnNhKSYgIEJzZSApOyBcCitcCisKKyNlbmRpZiAvKiAgVXNlQmViaWdva2ltaXNhICovCisKK3N0YXRpYyBjb25zdCBVSU5UNjQgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1syNF0gPSB7CisgICAgMHgwMDAwMDAwMDAwMDAwMDAxVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODA4MlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwOGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDAwVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODA4YlVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMDFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDgxVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwOVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwOGFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDAwMDg4VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwODAwOVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMGFVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4YlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODlVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAzVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwMlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDAwODBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDgwVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDhVTEwgfTsKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yNTc2Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdOyBcCisgICAgWCMja2UgPSBzdGF0ZVsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdOyBcCisgICAgWCMja3UgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I4MzJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2tlID0gc3RhdGVbMTFdXmlucHV0WzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdOyBcCisgICAgWCMja3UgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XV5pbnB1dFsgOV07IFwKKyAgICBYIyNrYSA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXV5pbnB1dFsxMl07IFwKKyAgICBYIyNrbyA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XV5pbnB1dFsxNV07IFwKKyAgICBYIyNtZSA9IHN0YXRlWzE2XTsgXAorICAgIFgjI21pID0gc3RhdGVbMTddOyBcCisgICAgWCMjbW8gPSBzdGF0ZVsxOF07IFwKKyAgICBYIyNtdSA9IHN0YXRlWzE5XTsgXAorICAgIFgjI3NhID0gc3RhdGVbMjBdOyBcCisgICAgWCMjc2UgPSBzdGF0ZVsyMV07IFwKKyAgICBYIyNzaSA9IHN0YXRlWzIyXTsgXAorICAgIFgjI3NvID0gc3RhdGVbMjNdOyBcCisgICAgWCMjc3UgPSBzdGF0ZVsyNF07IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmUgPSBzdGF0ZVsgMV1eaW5wdXRbIDFdOyBcCisgICAgWCMjYmkgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYm8gPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYnUgPSBzdGF0ZVsgNF1eaW5wdXRbIDRdOyBcCisgICAgWCMjZ2EgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjZ2UgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjZ2kgPSBzdGF0ZVsgN11eaW5wdXRbIDddOyBcCisgICAgWCMjZ28gPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjZ3UgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMja2EgPSBzdGF0ZVsxMF1eaW5wdXRbMTBdOyBcCisgICAgWCMja2UgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMja2kgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMja28gPSBzdGF0ZVsxM11eaW5wdXRbMTNdOyBcCisgICAgWCMja3UgPSBzdGF0ZVsxNF1eaW5wdXRbMTRdOyBcCisgICAgWCMjbWEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjbWUgPSBzdGF0ZVsxNl1eaW5wdXRbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMTUyYml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XV5pbnB1dFsgOV07IFwKKyAgICBYIyNrYSA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXV5pbnB1dFsxMl07IFwKKyAgICBYIyNrbyA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XV5pbnB1dFsxNV07IFwKKyAgICBYIyNtZSA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMzQ0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XV5pbnB1dFsgOV07IFwKKyAgICBYIyNrYSA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXV5pbnB1dFsxMl07IFwKKyAgICBYIyNrbyA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XV5pbnB1dFsxNV07IFwKKyAgICBYIyNtZSA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XV5pbnB1dFsxOF07IFwKKyAgICBYIyNtdSA9IHN0YXRlWzE5XV5pbnB1dFsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdOyBcCisgICAgWCMjYmkgPSBzdGF0ZVsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdOyBcCisgICAgWCMjZ2EgPSBzdGF0ZVsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddOyBcCisgICAgWCMjZ28gPSBzdGF0ZVsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdOyBcCisgICAgWCMja2UgPSBzdGF0ZVsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdOyBcCisgICAgWCMja3UgPSBzdGF0ZVsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gWCMjYmE7IFwKKyAgICBzdGF0ZVsgMV0gPSBYIyNiZTsgXAorICAgIHN0YXRlWyAyXSA9IFgjI2JpOyBcCisgICAgc3RhdGVbIDNdID0gWCMjYm87IFwKKyAgICBzdGF0ZVsgNF0gPSBYIyNidTsgXAorICAgIHN0YXRlWyA1XSA9IFgjI2dhOyBcCisgICAgc3RhdGVbIDZdID0gWCMjZ2U7IFwKKyAgICBzdGF0ZVsgN10gPSBYIyNnaTsgXAorICAgIHN0YXRlWyA4XSA9IFgjI2dvOyBcCisgICAgc3RhdGVbIDldID0gWCMjZ3U7IFwKKyAgICBzdGF0ZVsxMF0gPSBYIyNrYTsgXAorICAgIHN0YXRlWzExXSA9IFgjI2tlOyBcCisgICAgc3RhdGVbMTJdID0gWCMja2k7IFwKKyAgICBzdGF0ZVsxM10gPSBYIyNrbzsgXAorICAgIHN0YXRlWzE0XSA9IFgjI2t1OyBcCisgICAgc3RhdGVbMTVdID0gWCMjbWE7IFwKKyAgICBzdGF0ZVsxNl0gPSBYIyNtZTsgXAorICAgIHN0YXRlWzE3XSA9IFgjI21pOyBcCisgICAgc3RhdGVbMThdID0gWCMjbW87IFwKKyAgICBzdGF0ZVsxOV0gPSBYIyNtdTsgXAorICAgIHN0YXRlWzIwXSA9IFgjI3NhOyBcCisgICAgc3RhdGVbMjFdID0gWCMjc2U7IFwKKyAgICBzdGF0ZVsyMl0gPSBYIyNzaTsgXAorICAgIHN0YXRlWzIzXSA9IFgjI3NvOyBcCisgICAgc3RhdGVbMjRdID0gWCMjc3U7IFwKKworI2RlZmluZSBjb3B5U3RhdGVWYXJpYWJsZXMoWCwgWSkgXAorICAgIFgjI2JhID0gWSMjYmE7IFwKKyAgICBYIyNiZSA9IFkjI2JlOyBcCisgICAgWCMjYmkgPSBZIyNiaTsgXAorICAgIFgjI2JvID0gWSMjYm87IFwKKyAgICBYIyNidSA9IFkjI2J1OyBcCisgICAgWCMjZ2EgPSBZIyNnYTsgXAorICAgIFgjI2dlID0gWSMjZ2U7IFwKKyAgICBYIyNnaSA9IFkjI2dpOyBcCisgICAgWCMjZ28gPSBZIyNnbzsgXAorICAgIFgjI2d1ID0gWSMjZ3U7IFwKKyAgICBYIyNrYSA9IFkjI2thOyBcCisgICAgWCMja2UgPSBZIyNrZTsgXAorICAgIFgjI2tpID0gWSMja2k7IFwKKyAgICBYIyNrbyA9IFkjI2tvOyBcCisgICAgWCMja3UgPSBZIyNrdTsgXAorICAgIFgjI21hID0gWSMjbWE7IFwKKyAgICBYIyNtZSA9IFkjI21lOyBcCisgICAgWCMjbWkgPSBZIyNtaTsgXAorICAgIFgjI21vID0gWSMjbW87IFwKKyAgICBYIyNtdSA9IFkjI211OyBcCisgICAgWCMjc2EgPSBZIyNzYTsgXAorICAgIFgjI3NlID0gWSMjc2U7IFwKKyAgICBYIyNzaSA9IFkjI3NpOyBcCisgICAgWCMjc28gPSBZIyNzbzsgXAorICAgIFgjI3N1ID0gWSMjc3U7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludC1zZXQuaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1pbnQtc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkMWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1pbnQtc2V0LmgKQEAgLTAsMCArMSw2IEBACisjZGVmaW5lIFByb3ZpZGVGYXN0NTc2CisjZGVmaW5lIFByb3ZpZGVGYXN0ODMyCisjZGVmaW5lIFByb3ZpZGVGYXN0MTAyNAorI2RlZmluZSBQcm92aWRlRmFzdDEwODgKKyNkZWZpbmUgUHJvdmlkZUZhc3QxMTUyCisjZGVmaW5lIFByb3ZpZGVGYXN0MTM0NApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludGVyZmFjZS5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjcxMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpZm5kZWYgX0tlY2Nha1Blcm11dGF0aW9uSW50ZXJmYWNlX2hfCisjZGVmaW5lIF9LZWNjYWtQZXJtdXRhdGlvbkludGVyZmFjZV9oXworCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLWludC1zZXQuaCIKKworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZSggdm9pZCApOworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZVN0YXRlKHVuc2lnbmVkIGNoYXIgKnN0YXRlKTsKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uKHVuc2lnbmVkIGNoYXIgKnN0YXRlKTsKKyNpZmRlZiBQcm92aWRlRmFzdDU3Ngorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiNTc2Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiODMyYml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjEwMjRiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTA4OGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMTUyYml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjEzNDRiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KTsKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QxMDI0Yml0cyhjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQzMi1zZXR0aW5ncy5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLXNldHRpbmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1Yzc4MgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQzMi1zZXR0aW5ncy5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyNkZWZpbmUgVW5yb2xsaW5nIDIKKyNkZWZpbmUgVXNlQmViaWdva2ltaXNhCisjZGVmaW5lIFVzZUludGVybGVhdmVUYWJsZXMKKyNkZWZpbmUgVXNlU2NoZWR1bGUgMworKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQzMi5jIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhNmQ1OQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQzMi5jCkBAIC0wLDAgKzEsNTI0IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorLyogI2luY2x1ZGUgImJyZ19lbmRpYW4uaCIgKi8KKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtb3B0MzItc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVSU5UODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUlOVDE2OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDMyOworLyogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IFVJTlQ2NDsgKi8KKworI2lmZGVmIFVzZUludGVybGVhdmVUYWJsZXMKK3N0YXRpYyBpbnQgaW50ZXJsZWF2ZVRhYmxlc0J1aWx0ID0gMDsKK3N0YXRpYyBVSU5UMTYgaW50ZXJsZWF2ZVRhYmxlWzY1NTM2XTsKK3N0YXRpYyBVSU5UMTYgZGVpbnRlcmxlYXZlVGFibGVbNjU1MzZdOworCitzdGF0aWMgdm9pZCBidWlsZEludGVybGVhdmVUYWJsZXMoKQoreworICAgIFVJTlQzMiBpLCBqOworICAgIFVJTlQxNiB4OworCisgICAgaWYgKCFpbnRlcmxlYXZlVGFibGVzQnVpbHQpIHsKKyAgICAgICAgZm9yKGk9MDsgaTw2NTUzNjsgaSsrKSB7CisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgIGZvcihqPTA7IGo8MTY7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChpICYgKDEgPDwgaikpCisgICAgICAgICAgICAgICAgICAgIHggfD0gKDEgPDwgKGovMiArIDgqKGolMikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludGVybGVhdmVUYWJsZVtpXSA9IHg7CisgICAgICAgICAgICBkZWludGVybGVhdmVUYWJsZVt4XSA9IChVSU5UMTYpaTsKKyAgICAgICAgfQorICAgICAgICBpbnRlcmxlYXZlVGFibGVzQnVpbHQgPSAxOworICAgIH0KK30KKworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisKKyNkZWZpbmUgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIGopIFwKKyAgICBpIyNqID0gaW50ZXJsZWF2ZVRhYmxlWygoY29uc3QgVUlOVDE2Kilzb3VyY2UpW2pdXTsgXAorICAgICgoVUlOVDgqKWV2ZW4pW2pdIF49IGkjI2ogJiAweEZGOyBcCisgICAgKChVSU5UOCopb2RkKVtqXSBePSBpIyNqID4+IDg7CisKKyNkZWZpbmUgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCBqKSBcCisgICAgZCMjaiA9IGRlaW50ZXJsZWF2ZVRhYmxlWygoZXZlbiA+PiAoaio4KSkgJiAweEZGKSBeICgoKG9kZCA+PiAoaio4KSkgJiAweEZGKSA8PCA4KV07IFwKKyAgICAoKFVJTlQxNiopZGVzdClbal0gPSBkIyNqOworCisjZWxzZSAvKiAgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfQklHX0VORElBTikgKi8KKworI2RlZmluZSB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgaikgXAorICAgIGkjI2ogPSBpbnRlcmxlYXZlVGFibGVbc291cmNlWzIqal0gXiAoKFVJTlQxNilzb3VyY2VbMipqKzFdIDw8IDgpXTsgXAorICAgICpldmVuIF49IChpIyNqICYgMHhGRikgPDwgKGoqOCk7IFwKKyAgICAqb2RkIF49ICgoaSMjaiA+PiA4KSAmIDB4RkYpIDw8IChqKjgpOworCisjZGVmaW5lIHNldEludGVybGVhdmVkV29yZHNJbnRvMmJ5dGVzKGRlc3QsIGV2ZW4sIG9kZCwgaikgXAorICAgIGQjI2ogPSBkZWludGVybGVhdmVUYWJsZVsoKGV2ZW4gPj4gKGoqOCkpICYgMHhGRikgXiAoKChvZGQgPj4gKGoqOCkpICYgMHhGRikgPDwgOCldOyBcCisgICAgZGVzdFsyKmpdID0gZCMjaiAmIDB4RkY7IFwKKyAgICBkZXN0WzIqaisxXSA9IGQjI2ogPj4gODsKKworI2VuZGlmIC8qICBFbmRpYW5uZXNzICovCisKK3N0YXRpYyB2b2lkIHhvcjhieXRlc0ludG9JbnRlcmxlYXZlZFdvcmRzKFVJTlQzMiAqZXZlbiwgVUlOVDMyICpvZGQsIGNvbnN0IFVJTlQ4KiBzb3VyY2UpCit7CisgICAgVUlOVDE2IGkwLCBpMSwgaTIsIGkzOworCisgICAgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIDApCisgICAgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIDEpCisgICAgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIDIpCisgICAgeG9yMmJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoZXZlbiwgb2RkLCBzb3VyY2UsIDMpCit9CisKKyNkZWZpbmUgeG9yTGFuZXNJbnRvU3RhdGUobGFuZUNvdW50LCBzdGF0ZSwgaW5wdXQpIFwKKyAgICB7IFwKKyAgICAgICAgaW50IGk7IFwKKyAgICAgICAgZm9yKGk9MDsgaTwobGFuZUNvdW50KTsgaSsrKSBcCisgICAgICAgICAgICB4b3I4Ynl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhzdGF0ZStpKjIsIHN0YXRlK2kqMisxLCBpbnB1dCtpKjgpOyBcCisgICAgfQorCitzdGF0aWMgdm9pZCBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzhieXRlcyhVSU5UOCogZGVzdCwgVUlOVDMyIGV2ZW4sIFVJTlQzMiBvZGQpCit7CisgICAgVUlOVDE2IGQwLCBkMSwgZDIsIGQzOworCisgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCAwKQorICAgIHNldEludGVybGVhdmVkV29yZHNJbnRvMmJ5dGVzKGRlc3QsIGV2ZW4sIG9kZCwgMSkKKyAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzJieXRlcyhkZXN0LCBldmVuLCBvZGQsIDIpCisgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCAzKQorfQorCisjZGVmaW5lIGV4dHJhY3RMYW5lcyhsYW5lQ291bnQsIHN0YXRlLCBkYXRhKSBcCisgICAgeyBcCisgICAgICAgIGludCBpOyBcCisgICAgICAgIGZvcihpPTA7IGk8KGxhbmVDb3VudCk7IGkrKykgXAorICAgICAgICAgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG84Ynl0ZXMoZGF0YStpKjgsICgoVUlOVDMyKilzdGF0ZSlbaSoyXSwgKChVSU5UMzIqKXN0YXRlKVtpKjIrMV0pOyBcCisgICAgfQorCisjZWxzZSAvKiAgTm8gaW50ZXJsZWF2aW5nIHRhYmxlcyAqLworCisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKworLyogIENyZWRpdDogSGVucnkgUy4gV2FycmVuLCBIYWNrZXIncyBEZWxpZ2h0LCBBZGRpc29uLVdlc2xleSwgMjAwMiAqLworI2RlZmluZSB4b3JJbnRlcmxlYXZlZExFKHJhdGVJbkxhbmVzLCBzdGF0ZSwgaW5wdXQpIFwKKwl7IFwKKwkJY29uc3QgVUlOVDMyICogcEkgPSAoY29uc3QgVUlOVDMyICopaW5wdXQ7IFwKKwkJVUlOVDMyICogcFMgPSBzdGF0ZTsgXAorCQlVSU5UMzIgdCwgeDAsIHgxOyBcCisJICAgIGludCBpOyBcCisJICAgIGZvciAoaSA9IChyYXRlSW5MYW5lcyktMTsgaSA+PSAwOyAtLWkpIFwKKwkJeyBcCisJCQl4MCA9ICoocEkrKyk7IFwKKwkJCXQgPSAoeDAgXiAoeDAgPj4gIDEpKSAmIDB4MjIyMjIyMjJVTDsgIHgwID0geDAgXiB0IF4gKHQgPDwgIDEpOyBcCisJCQl0ID0gKHgwIF4gKHgwID4+ICAyKSkgJiAweDBDMEMwQzBDVUw7ICB4MCA9IHgwIF4gdCBeICh0IDw8ICAyKTsgXAorCQkJdCA9ICh4MCBeICh4MCA+PiAgNCkpICYgMHgwMEYwMDBGMFVMOyAgeDAgPSB4MCBeIHQgXiAodCA8PCAgNCk7IFwKKwkJCXQgPSAoeDAgXiAoeDAgPj4gIDgpKSAmIDB4MDAwMEZGMDBVTDsgIHgwID0geDAgXiB0IF4gKHQgPDwgIDgpOyBcCisgCQkJeDEgPSAqKHBJKyspOyBcCisJCQl0ID0gKHgxIF4gKHgxID4+ICAxKSkgJiAweDIyMjIyMjIyVUw7ICB4MSA9IHgxIF4gdCBeICh0IDw8ICAxKTsgXAorCQkJdCA9ICh4MSBeICh4MSA+PiAgMikpICYgMHgwQzBDMEMwQ1VMOyAgeDEgPSB4MSBeIHQgXiAodCA8PCAgMik7IFwKKwkJCXQgPSAoeDEgXiAoeDEgPj4gIDQpKSAmIDB4MDBGMDAwRjBVTDsgIHgxID0geDEgXiB0IF4gKHQgPDwgIDQpOyBcCisJCQl0ID0gKHgxIF4gKHgxID4+ICA4KSkgJiAweDAwMDBGRjAwVUw7ICB4MSA9IHgxIF4gdCBeICh0IDw8ICA4KTsgXAorCQkJKihwUysrKSBePSAoVUlOVDE2KXgwIHwgKHgxIDw8IDE2KTsgXAorCQkJKihwUysrKSBePSAoeDAgPj4gMTYpIHwgKHgxICYgMHhGRkZGMDAwMCk7IFwKKwkJfSBcCisJfQorCisjZGVmaW5lIHhvckxhbmVzSW50b1N0YXRlKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KSBcCisgICAgeG9ySW50ZXJsZWF2ZWRMRShsYW5lQ291bnQsIHN0YXRlLCBpbnB1dCkKKworI2Vsc2UgLyogIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0JJR19FTkRJQU4pICovCisKKy8qICBDcmVkaXQ6IEhlbnJ5IFMuIFdhcnJlbiwgSGFja2VyJ3MgRGVsaWdodCwgQWRkaXNvbi1XZXNsZXksIDIwMDIgKi8KK1VJTlQ2NCB0b0ludGVybGVhdmluZyhVSU5UNjQgeCkgCit7CisgICBVSU5UNjQgdDsKKworICAgdCA9ICh4IF4gKHggPj4gIDEpKSAmIDB4MjIyMjIyMjIyMjIyMjIyMlVMTDsgIHggPSB4IF4gdCBeICh0IDw8ICAxKTsKKyAgIHQgPSAoeCBeICh4ID4+ICAyKSkgJiAweDBDMEMwQzBDMEMwQzBDMENVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgMik7CisgICB0ID0gKHggXiAoeCA+PiAgNCkpICYgMHgwMEYwMDBGMDAwRjAwMEYwVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDQpOworICAgdCA9ICh4IF4gKHggPj4gIDgpKSAmIDB4MDAwMEZGMDAwMDAwRkYwMFVMTDsgIHggPSB4IF4gdCBeICh0IDw8ICA4KTsKKyAgIHQgPSAoeCBeICh4ID4+IDE2KSkgJiAweDAwMDAwMDAwRkZGRjAwMDBVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAxNik7CisKKyAgIHJldHVybiB4OworfQorCitzdGF0aWMgdm9pZCB4b3I4Ynl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhVSU5UMzIqIGV2ZW5BbmRPZGQsIGNvbnN0IFVJTlQ4KiBzb3VyY2UpCit7CisgICAgLyogIFRoaXMgY2FuIGJlIG9wdGltaXplZCAqLworICAgIFVJTlQ2NCBzb3VyY2VXb3JkID0KKyAgICAgICAgKFVJTlQ2NClzb3VyY2VbMF0KKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzFdKSA8PCAgOCkKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzJdKSA8PCAxNikKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzNdKSA8PCAyNCkKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzRdKSA8PCAzMikKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzVdKSA8PCA0MCkKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzZdKSA8PCA0OCkKKyAgICAgICAgXiAoKChVSU5UNjQpc291cmNlWzddKSA8PCA1Nik7CisgICAgVUlOVDY0IGV2ZW5BbmRPZGRXb3JkID0gdG9JbnRlcmxlYXZpbmcoc291cmNlV29yZCk7CisgICAgZXZlbkFuZE9kZFswXSBePSAoVUlOVDMyKWV2ZW5BbmRPZGRXb3JkOworICAgIGV2ZW5BbmRPZGRbMV0gXj0gKFVJTlQzMikoZXZlbkFuZE9kZFdvcmQgPj4gMzIpOworfQorCisjZGVmaW5lIHhvckxhbmVzSW50b1N0YXRlKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KSBcCisgICAgeyBcCisgICAgICAgIGludCBpOyBcCisgICAgICAgIGZvcihpPTA7IGk8KGxhbmVDb3VudCk7IGkrKykgXAorICAgICAgICAgICAgeG9yOGJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoc3RhdGUraSoyLCBpbnB1dCtpKjgpOyBcCisgICAgfQorCisjZW5kaWYgLyogIEVuZGlhbm5lc3MgKi8KKworLyogIENyZWRpdDogSGVucnkgUy4gV2FycmVuLCBIYWNrZXIncyBEZWxpZ2h0LCBBZGRpc29uLVdlc2xleSwgMjAwMiAqLworVUlOVDY0IGZyb21JbnRlcmxlYXZpbmcoVUlOVDY0IHgpCit7CisgICBVSU5UNjQgdDsKKworICAgdCA9ICh4IF4gKHggPj4gMTYpKSAmIDB4MDAwMDAwMDBGRkZGMDAwMFVMTDsgIHggPSB4IF4gdCBeICh0IDw8IDE2KTsKKyAgIHQgPSAoeCBeICh4ID4+ICA4KSkgJiAweDAwMDBGRjAwMDAwMEZGMDBVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgOCk7CisgICB0ID0gKHggXiAoeCA+PiAgNCkpICYgMHgwMEYwMDBGMDAwRjAwMEYwVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDQpOworICAgdCA9ICh4IF4gKHggPj4gIDIpKSAmIDB4MEMwQzBDMEMwQzBDMEMwQ1VMTDsgIHggPSB4IF4gdCBeICh0IDw8ICAyKTsKKyAgIHQgPSAoeCBeICh4ID4+ICAxKSkgJiAweDIyMjIyMjIyMjIyMjIyMjJVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgMSk7CisKKyAgIHJldHVybiB4OworfQorCitzdGF0aWMgdm9pZCBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzhieXRlcyhVSU5UOCogZGVzdCwgVUlOVDMyKiBldmVuQW5kT2RkKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgKChVSU5UNjQqKWRlc3QpWzBdID0gZnJvbUludGVybGVhdmluZygqKFVJTlQ2NCopZXZlbkFuZE9kZCk7CisjZWxzZSAvKiAgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfQklHX0VORElBTikgKi8KKyAgICAvKiAgVGhpcyBjYW4gYmUgb3B0aW1pemVkICovCisgICAgVUlOVDY0IGV2ZW5BbmRPZGRXb3JkID0gKFVJTlQ2NClldmVuQW5kT2RkWzBdIF4gKChVSU5UNjQpZXZlbkFuZE9kZFsxXSA8PCAzMik7CisgICAgVUlOVDY0IGRlc3RXb3JkID0gZnJvbUludGVybGVhdmluZyhldmVuQW5kT2RkV29yZCk7CisgICAgZGVzdFswXSA9IGRlc3RXb3JkICYgMHhGRjsKKyAgICBkZXN0WzFdID0gKGRlc3RXb3JkID4+IDgpICYgMHhGRjsKKyAgICBkZXN0WzJdID0gKGRlc3RXb3JkID4+IDE2KSAmIDB4RkY7CisgICAgZGVzdFszXSA9IChkZXN0V29yZCA+PiAyNCkgJiAweEZGOworICAgIGRlc3RbNF0gPSAoZGVzdFdvcmQgPj4gMzIpICYgMHhGRjsKKyAgICBkZXN0WzVdID0gKGRlc3RXb3JkID4+IDQwKSAmIDB4RkY7CisgICAgZGVzdFs2XSA9IChkZXN0V29yZCA+PiA0OCkgJiAweEZGOworICAgIGRlc3RbN10gPSAoZGVzdFdvcmQgPj4gNTYpICYgMHhGRjsKKyNlbmRpZiAvKiAgRW5kaWFubmVzcyAqLworfQorCisjZGVmaW5lIGV4dHJhY3RMYW5lcyhsYW5lQ291bnQsIHN0YXRlLCBkYXRhKSBcCisgICAgeyBcCisgICAgICAgIGludCBpOyBcCisgICAgICAgIGZvcihpPTA7IGk8KGxhbmVDb3VudCk7IGkrKykgXAorICAgICAgICAgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG84Ynl0ZXMoZGF0YStpKjgsIChVSU5UMzIqKXN0YXRlK2kqMik7IFwKKyAgICB9CisKKyNlbmRpZiAvKiAgV2l0aCBvciB3aXRob3V0IGludGVybGVhdmluZyB0YWJsZXMgKi8KKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIFJPTDMyKGEsIG9mZnNldCkgX3JvdGwoYSwgb2Zmc2V0KQorI2VsaWYgKGRlZmluZWQgKF9fYXJtX18pICYmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSkKKyNkZWZpbmUgUk9MMzIoYSwgb2Zmc2V0KSBfX3JvcihhLCAzMi0ob2Zmc2V0KSkKKyNlbHNlCisjZGVmaW5lIFJPTDMyKGEsIG9mZnNldCkgKCgoKFVJTlQzMilhKSA8PCAob2Zmc2V0KSkgXiAoKChVSU5UMzIpYSkgPj4gKDMyLShvZmZzZXQpKSkpCisjZW5kaWYKKworI2luY2x1ZGUgIktlY2Nha0YtMTYwMC11bnJvbGxpbmcubWFjcm9zIgorI2luY2x1ZGUgIktlY2Nha0YtMTYwMC0zMi5tYWNyb3MiCisKKyNpZiAoVXNlU2NoZWR1bGUgPT0gMykKKworI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorI2Vycm9yICJObyBsYW5lIGNvbXBsZW1lbnRpbmcgd2l0aCBzY2hlZHVsZSAzLiIKKyNlbmRpZgorCisjaWYgKFVucm9sbGluZyAhPSAyKQorI2Vycm9yICJPbmx5IHVucm9sbGluZyAyIGlzIHN1cHBvcnRlZCBieSBzY2hlZHVsZSAzLiIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHMoVUlOVDMyICpzdGF0ZSkKK3sKKyAgICByb3VuZHMKK30KKworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0LCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUoOSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxMywgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTAyNGJpdHMoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKDE2LCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUoMTcsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxOCwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTM0NGJpdHMoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKDIxLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2Vsc2UgLyogIChTY2hlZHVsZSAhPSAzKSAqLworCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHMoVUlOVDMyICpzdGF0ZSkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlKEEsIHN0YXRlKQorICAgIHJvdW5kcworfQorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZShsYW5lQ291bnQsIHN0YXRlLCBpbnB1dCkKKyAgICBjb3B5RnJvbVN0YXRlKEEsIHN0YXRlKQorICAgIHJvdW5kcworfQorCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSg5LCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nODMyYml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxMywgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxNiwgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxNywgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTE1Mgorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMTUyYml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxOCwgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgyMSwgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2VuZGlmCisKK3N0YXRpYyB2b2lkIEtlY2Nha0luaXRpYWxpemUoKQoreworI2lmZGVmIFVzZUludGVybGVhdmVUYWJsZXMKKyAgICBidWlsZEludGVybGVhdmVUYWJsZXMoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBLZWNjYWtJbml0aWFsaXplU3RhdGUodW5zaWduZWQgY2hhciAqc3RhdGUpCit7CisgICAgbWVtc2V0KHN0YXRlLCAwLCAyMDApOworI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgICgoVUlOVDMyKilzdGF0ZSlbIDJdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWyAzXSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVsgNF0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbIDVdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzE2XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVsxN10gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbMjRdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzI1XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVszNF0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbMzVdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzQwXSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVs0MV0gPSB+KFVJTlQzMikwOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uKHVuc2lnbmVkIGNoYXIgKnN0YXRlKQoreworICAgIC8qICBXZSBhc3N1bWUgdGhlIHN0YXRlIGlzIGFsd2F5cyBzdG9yZWQgYXMgaW50ZXJsZWF2ZWQgMzItYml0IHdvcmRzICovCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzKChVSU5UMzIqKXN0YXRlKTsKK30KKworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI1NzZiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0ODMyCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI4MzJiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nODMyYml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTAyNGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTA4OGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTE1Mgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTE1MmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMTUyYml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTM0NGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cygoVUlOVDMyKilzdGF0ZSwgZGF0YSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nKChVSU5UMzIqKXN0YXRlLCBkYXRhLCBsYW5lQ291bnQpOworfQorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtFeHRyYWN0MTAyNGJpdHMoY29uc3QgdW5zaWduZWQgY2hhciAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgZXh0cmFjdExhbmVzKDE2LCBzdGF0ZSwgZGF0YSkKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAoKFVJTlQzMiopZGF0YSlbIDJdID0gfigoVUlOVDMyKilkYXRhKVsgMl07CisgICAgKChVSU5UMzIqKWRhdGEpWyAzXSA9IH4oKFVJTlQzMiopZGF0YSlbIDNdOworICAgICgoVUlOVDMyKilkYXRhKVsgNF0gPSB+KChVSU5UMzIqKWRhdGEpWyA0XTsKKyAgICAoKFVJTlQzMiopZGF0YSlbIDVdID0gfigoVUlOVDMyKilkYXRhKVsgNV07CisgICAgKChVSU5UMzIqKWRhdGEpWzE2XSA9IH4oKFVJTlQzMiopZGF0YSlbMTZdOworICAgICgoVUlOVDMyKilkYXRhKVsxN10gPSB+KChVSU5UMzIqKWRhdGEpWzE3XTsKKyAgICAoKFVJTlQzMiopZGF0YSlbMjRdID0gfigoVUlOVDMyKilkYXRhKVsyNF07CisgICAgKChVSU5UMzIqKWRhdGEpWzI1XSA9IH4oKFVJTlQzMiopZGF0YSlbMjVdOworI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrRXh0cmFjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxhbmVDb3VudCkKK3sKKyAgICBleHRyYWN0TGFuZXMobGFuZUNvdW50LCBzdGF0ZSwgZGF0YSkKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICBpZiAobGFuZUNvdW50ID4gMSkgeworICAgICAgICAoKFVJTlQzMiopZGF0YSlbIDJdID0gfigoVUlOVDMyKilkYXRhKVsgMl07CisgICAgICAgICgoVUlOVDMyKilkYXRhKVsgM10gPSB+KChVSU5UMzIqKWRhdGEpWyAzXTsKKyAgICAgICAgaWYgKGxhbmVDb3VudCA+IDIpIHsKKyAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVsgNF0gPSB+KChVSU5UMzIqKWRhdGEpWyA0XTsKKyAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVsgNV0gPSB+KChVSU5UMzIqKWRhdGEpWyA1XTsKKyAgICAgICAgICAgIGlmIChsYW5lQ291bnQgPiA4KSB7CisgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzE2XSA9IH4oKFVJTlQzMiopZGF0YSlbMTZdOworICAgICAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVsxN10gPSB+KChVSU5UMzIqKWRhdGEpWzE3XTsKKyAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMTIpIHsKKyAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzI0XSA9IH4oKFVJTlQzMiopZGF0YSlbMjRdOworICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMjVdID0gfigoVUlOVDMyKilkYXRhKVsyNV07CisgICAgICAgICAgICAgICAgICAgIGlmIChsYW5lQ291bnQgPiAxNykgeworICAgICAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzM0XSA9IH4oKFVJTlQzMiopZGF0YSlbMzRdOworICAgICAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzM1XSA9IH4oKFVJTlQzMiopZGF0YSlbMzVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDIwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzQwXSA9IH4oKFVJTlQzMiopZGF0YSlbNDBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVs0MV0gPSB+KChVSU5UMzIqKWRhdGEpWzQxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LXNldHRpbmdzLmggYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0NjQtc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjgzZTYzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LXNldHRpbmdzLmgKQEAgLTAsMCArMSw5IEBACisvKgorI2RlZmluZSBVbnJvbGxpbmcgMjQKKyNkZWZpbmUgVXNlQmViaWdva2ltaXNhCisjZGVmaW5lIFVzZVNTRQorI2RlZmluZSBVc2VPbmx5U0lNRDY0CisjZGVmaW5lIFVzZU1NWAorI2RlZmluZSBVc2VTSExECisjZGVmaW5lIFVzZVhPUAorKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQ2NC5jIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5YjE4YgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQ2NC5jCkBAIC0wLDAgKzEsNTEwIEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorLyogI2luY2x1ZGUgImJyZ19lbmRpYW4uaCIgKi8KKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtb3B0NjQtc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgiCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVSU5UODsKKy8qIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBVSU5UNjQ7ICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBBTElHTiBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgzMikpKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgQUxJR04gX19kZWNsc3BlYyhhbGlnbigzMikpCisjZWxzZQorI2RlZmluZSBBTElHTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFVzZVNTRSkKKyAgICAjaW5jbHVkZSA8eDg2aW50cmluLmg+CisgICAgdHlwZWRlZiBfX20xMjhpIFY2NDsKKyAgICB0eXBlZGVmIF9fbTEyOGkgVjEyODsKKyAgICB0eXBlZGVmIHVuaW9uIHsKKyAgICAgICAgVjEyOCB2MTI4OworICAgICAgICBVSU5UNjQgdjY0WzJdOworICAgIH0gVjY0NjQ7CisKKyAgICAjZGVmaW5lIEFORG51NjQoYSwgYikgICAgICAgX21tX2FuZG5vdF9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgTE9BRDY0KGEpICAgICAgICAgICBfbW1fbG9hZGxfZXBpNjQoKGNvbnN0IFY2NCAqKSYoYSkpCisgICAgI2RlZmluZSBDT05TVDY0KGEpICAgICAgICAgIF9tbV9sb2FkbF9lcGk2NCgoY29uc3QgVjY0ICopJihhKSkKKyAgICAjZGVmaW5lIFJPTDY0KGEsIG8pICAgICAgICAgX21tX29yX3NpMTI4KF9tbV9zbGxpX2VwaTY0KGEsIG8pLCBfbW1fc3JsaV9lcGk2NChhLCA2NC0obykpKQorICAgICNkZWZpbmUgU1RPUkU2NChhLCBiKSAgICAgICBfbW1fc3RvcmVsX2VwaTY0KChWNjQgKikmKGEpLCBiKQorICAgICNkZWZpbmUgWE9SNjQoYSwgYikgICAgICAgICBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBYT1JlcTY0KGEsIGIpICAgICAgIGEgPSBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBTSFVGRkxFQllURVMxMjgoYSwgYikgICBfbW1fc2h1ZmZsZV9lcGk4KGEsIGIpCisKKyAgICAjZGVmaW5lIEFORG51MTI4KGEsIGIpICAgICAgX21tX2FuZG5vdF9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgTE9BRDY0NjQoYSwgYikgICAgICBfbW1fc2V0X2VwaTY0KChfX202NCkoYSksIChfX202NCkoYikpCisgICAgI2RlZmluZSBDT05TVDEyOChhKSAgICAgICAgIF9tbV9sb2FkX3NpMTI4KChjb25zdCBWMTI4ICopJihhKSkKKyAgICAjZGVmaW5lIExPQUQxMjgoYSkgICAgICAgICAgX21tX2xvYWRfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgTE9BRDEyOHUoYSkgICAgICAgICBfbW1fbG9hZHVfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgUk9MNjRpbjEyOChhLCBvKSAgICBfbW1fb3Jfc2kxMjgoX21tX3NsbGlfZXBpNjQoYSwgbyksIF9tbV9zcmxpX2VwaTY0KGEsIDY0LShvKSkpCisgICAgI2RlZmluZSBTVE9SRTEyOChhLCBiKSAgICAgIF9tbV9zdG9yZV9zaTEyOCgoVjEyOCAqKSYoYSksIGIpCisgICAgI2RlZmluZSBYT1IxMjgoYSwgYikgICAgICAgIF9tbV94b3Jfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIFhPUmVxMTI4KGEsIGIpICAgICAgYSA9IF9tbV94b3Jfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIEdFVDY0TE9MTyhhLCBiKSAgICAgX21tX3VucGFja2xvX2VwaTY0KGEsIGIpCisgICAgI2RlZmluZSBHRVQ2NEhJSEkoYSwgYikgICAgIF9tbV91bnBhY2toaV9lcGk2NChhLCBiKQorICAgICNkZWZpbmUgQ09QWTY0SEkyTE8oYSkgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweEVFKQorICAgICNkZWZpbmUgQ09QWTY0TE8ySEkoYSkgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweDQ0KQorICAgICNkZWZpbmUgWkVSTzEyOCgpICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCgpCisKKyAgICAjaWZkZWYgVXNlT25seVNJTUQ2NAorICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAtc2ltZDY0Lm1hY3JvcyIKKyAgICAjZWxzZQorQUxJR04gY29uc3QgVUlOVDY0IHJobzhfNTZbMl0gPSB7MHgwNjA1MDQwMzAyMDEwMDA3LCAweDA4MEYwRTBEMEMwQjBBMDl9OworICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAtc2ltZDEyOC5tYWNyb3MiCisgICAgI2VuZGlmCisKKyAgICAjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgI2Vycm9yICJVc2VCZWJpZ29raW1pc2EgY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBVc2VTU0UiCisgICAgI2VuZGlmCisjZWxpZiBkZWZpbmVkKFVzZVhPUCkKKyAgICAjaW5jbHVkZSA8eDg2aW50cmluLmg+CisgICAgdHlwZWRlZiBfX20xMjhpIFY2NDsKKyAgICB0eXBlZGVmIF9fbTEyOGkgVjEyODsKKyAgIAorICAgICNkZWZpbmUgTE9BRDY0KGEpICAgICAgICAgICBfbW1fbG9hZGxfZXBpNjQoKGNvbnN0IFY2NCAqKSYoYSkpCisgICAgI2RlZmluZSBDT05TVDY0KGEpICAgICAgICAgIF9tbV9sb2FkbF9lcGk2NCgoY29uc3QgVjY0ICopJihhKSkKKyAgICAjZGVmaW5lIFNUT1JFNjQoYSwgYikgICAgICAgX21tX3N0b3JlbF9lcGk2NCgoVjY0ICopJihhKSwgYikKKyAgICAjZGVmaW5lIFhPUjY0KGEsIGIpICAgICAgICAgX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgWE9SZXE2NChhLCBiKSAgICAgICBhID0gX21tX3hvcl9zaTEyOChhLCBiKQorCisgICAgI2RlZmluZSBBTkRudTEyOChhLCBiKSAgICAgIF9tbV9hbmRub3Rfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIExPQUQ2NDY0KGEsIGIpICAgICAgX21tX3NldF9lcGk2NCgoX19tNjQpKGEpLCAoX19tNjQpKGIpKQorICAgICNkZWZpbmUgQ09OU1QxMjgoYSkgICAgICAgICBfbW1fbG9hZF9zaTEyOCgoY29uc3QgVjEyOCAqKSYoYSkpCisgICAgI2RlZmluZSBMT0FEMTI4KGEpICAgICAgICAgIF9tbV9sb2FkX3NpMTI4KChjb25zdCBWMTI4ICopJihhKSkKKyAgICAjZGVmaW5lIExPQUQxMjh1KGEpICAgICAgICAgX21tX2xvYWR1X3NpMTI4KChjb25zdCBWMTI4ICopJihhKSkKKyAgICAjZGVmaW5lIFNUT1JFMTI4KGEsIGIpICAgICAgX21tX3N0b3JlX3NpMTI4KChWMTI4ICopJihhKSwgYikKKyAgICAjZGVmaW5lIFhPUjEyOChhLCBiKSAgICAgICAgX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgWE9SZXExMjgoYSwgYikgICAgICBhID0gX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgWkVSTzEyOCgpICAgICAgICAgICBfbW1fc2V0emVyb19zaTEyOCgpCisKKyAgICAjZGVmaW5lIFNXQVA2NChhKSAgICAgICAgICAgX21tX3NodWZmbGVfZXBpMzIoYSwgMHg0RSkKKyAgICAjZGVmaW5lIEdFVDY0TE9MTyhhLCBiKSAgICAgX21tX3VucGFja2xvX2VwaTY0KGEsIGIpCisgICAgI2RlZmluZSBHRVQ2NEhJSEkoYSwgYikgICAgIF9tbV91bnBhY2toaV9lcGk2NChhLCBiKQorICAgICNkZWZpbmUgR0VUNjRMT0hJKGEsIGIpICAgICAoKF9fbTEyOGkpX21tX2JsZW5kX3BkKChfX20xMjhkKWEsIChfX20xMjhkKWIsIDIpKQorICAgICNkZWZpbmUgR0VUNjRISUxPKGEsIGIpICAgICBTV0FQNjQoR0VUNjRMT0hJKGIsIGEpKQorICAgICNkZWZpbmUgQ09QWTY0SEkyTE8oYSkgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweEVFKQorICAgICNkZWZpbmUgQ09QWTY0TE8ySEkoYSkgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweDQ0KQorIAorICAgICNkZWZpbmUgUk9MNjQ2NHNhbWUoYSwgbykgICBfbW1fcm90aV9lcGk2NChhLCBvKQorICAgICNkZWZpbmUgUk9MNjQ2NChhLCByMSwgcjIpICBfbW1fcm90X2VwaTY0KGEsIENPTlNUMTI4KCByb3RfIyNyMSMjXyMjcjIgKSkKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMF8yMFsyXSAgPSB7IDAsIDIwfTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfNDRfM1syXSAgPSB7NDQsICAzfTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfNDNfNDVbMl0gPSB7NDMsIDQ1fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMjFfNjFbMl0gPSB7MjEsIDYxfTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMTRfMjhbMl0gPSB7MTQsIDI4fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMV8zNlsyXSAgPSB7IDEsIDM2fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfNl8xMFsyXSAgPSB7IDYsIDEwfTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMjVfMTVbMl0gPSB7MjUsIDE1fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfOF81NlsyXSAgPSB7IDgsIDU2fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMThfMjdbMl0gPSB7MTgsIDI3fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfNjJfNTVbMl0gPSB7NjIsIDU1fTsKK0FMSUdOIGNvbnN0IFVJTlQ2NCByb3RfMzlfNDFbMl0gPSB7MzksIDQxfTsKKworI2lmIGRlZmluZWQoVXNlU2ltdWxhdGVkWE9QKQorICAgIC8qICBGb3IgZGVidWdnaW5nIHB1cnBvc2VzLCB3aGVuIFhPUCBpcyBub3QgYXZhaWxhYmxlICovCisgICAgI3VuZGVmIFJPTDY0NjQKKyAgICAjdW5kZWYgUk9MNjQ2NHNhbWUKKyAgICAjZGVmaW5lIFJPTDY0NjRzYW1lKGEsIG8pICAgX21tX29yX3NpMTI4KF9tbV9zbGxpX2VwaTY0KGEsIG8pLCBfbW1fc3JsaV9lcGk2NChhLCA2NC0obykpKQorICAgIFYxMjggUk9MNjQ2NChWMTI4IGEsIGludCByMCwgaW50IHIxKQorICAgIHsKKyAgICAgICAgVjEyOCBhMCA9IFJPTDY0KGEsIHIwKTsKKyAgICAgICAgVjEyOCBhMSA9IENPUFk2NEhJMkxPKFJPTDY0KGEsIHIxKSk7CisgICAgICAgIHJldHVybiBHRVQ2NExPTE8oYTAsIGExKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLXhvcC5tYWNyb3MiCisKKyAgICAjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgI2Vycm9yICJVc2VCZWJpZ29raW1pc2EgY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBVc2VYT1AiCisgICAgI2VuZGlmCisjZWxpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICAjaW5jbHVkZSA8bW1pbnRyaW4uaD4KKyAgICB0eXBlZGVmIF9fbTY0IFY2NDsKKyAgICAjZGVmaW5lIEFORG51NjQoYSwgYikgICAgICAgX21tX2FuZG5vdF9zaTY0KGEsIGIpCisKKyAgICAjaWYgKGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQgKF9fSU5URUxfQ09NUElMRVIpKQorICAgICAgICAjZGVmaW5lIExPQUQ2NChhKSAgICAgICAqKFY2NCopJihhKQorICAgICAgICAjZGVmaW5lIENPTlNUNjQoYSkgICAgICAqKFY2NCopJihhKQorICAgICAgICAjZGVmaW5lIFNUT1JFNjQoYSwgYikgICAqKFY2NCopJihhKSA9IGIKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIExPQUQ2NChhKSAgICAgICAoVjY0KWEKKyAgICAgICAgI2RlZmluZSBDT05TVDY0KGEpICAgICAgKFY2NClhCisgICAgICAgICNkZWZpbmUgU1RPUkU2NChhLCBiKSAgIGEgPSAoVUlOVDY0KWIKKyAgICAjZW5kaWYKKyAgICAjZGVmaW5lIFJPTDY0KGEsIG8pICAgICAgICAgX21tX29yX3NpNjQoX21tX3NsbGlfc2k2NChhLCBvKSwgX21tX3NybGlfc2k2NChhLCA2NC0obykpKQorICAgICNkZWZpbmUgWE9SNjQoYSwgYikgICAgICAgICBfbW1feG9yX3NpNjQoYSwgYikKKyAgICAjZGVmaW5lIFhPUmVxNjQoYSwgYikgICAgICAgYSA9IF9tbV94b3Jfc2k2NChhLCBiKQorCisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zIgorCisgICAgI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgICNlcnJvciAiVXNlQmViaWdva2ltaXNhIGNhbm5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggVXNlTU1YIgorICAgICNlbmRpZgorI2Vsc2UKKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIFJPTDY0KGEsIG9mZnNldCkgX3JvdGw2NChhLCBvZmZzZXQpCisgICAgI2VsaWYgZGVmaW5lZChVc2VTSExEKQorICAgICAgI2RlZmluZSBST0w2NCh4LE4pICh7IFwKKyAgICAgICAgcmVnaXN0ZXIgVUlOVDY0IF9fb3V0OyBcCisgICAgICAgIHJlZ2lzdGVyIFVJTlQ2NCBfX2luID0geDsgXAorICAgICAgICBfX2FzbV9fICgic2hsZCAlMiwlMCwlMCIgOiAiPXIiKF9fb3V0KSA6ICIwIihfX2luKSwgImkiKE4pKTsgXAorICAgICAgICBfX291dDsgXAorICAgICAgfSkKKyAgICAjZWxzZQorICAgICNkZWZpbmUgUk9MNjQoYSwgb2Zmc2V0KSAoKCgoVUlOVDY0KWEpIDw8IG9mZnNldCkgXiAoKChVSU5UNjQpYSkgPj4gKDY0LW9mZnNldCkpKQorICAgICNlbmRpZgorCisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC02NC5tYWNyb3MiCisjZW5kaWYKKworI2luY2x1ZGUgIktlY2Nha0YtMTYwMC11bnJvbGxpbmcubWFjcm9zIgorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHMoVUlOVDY0ICpzdGF0ZSkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlKEEsIHN0YXRlKQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nKFVJTlQ2NCAqc3RhdGUsIGNvbnN0IFVJTlQ2NCAqaW5wdXQsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisjaWYgKFVucm9sbGluZyAhPSAyNCkKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCXVuc2lnbmVkIGludCBqOworCisgICAgZm9yKGo9MDsgajxsYW5lQ291bnQ7IGorKykKKyAgICAgICAgc3RhdGVbal0gXj0gaW5wdXRbal07CQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzU3NmJpdHMoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlQW5kWG9yNTc2Yml0cyhBLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nODMyYml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3I4MzJiaXRzKEEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTAyNGJpdHMoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoQSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhBLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKFVJTlQ2NCAqc3RhdGUsIGNvbnN0IFVJTlQ2NCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisjaWYgKFVucm9sbGluZyAhPSAyNCkKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCisgICAgY29weUZyb21TdGF0ZUFuZFhvcjExNTJiaXRzKEEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTM0NGJpdHMoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlQW5kWG9yMTM0NGJpdHMoQSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZSgpCit7Cit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha0luaXRpYWxpemVTdGF0ZSh1bnNpZ25lZCBjaGFyICpzdGF0ZSkKK3sKKyAgICBtZW1zZXQoc3RhdGUsIDAsIDIwMCk7CisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgKChVSU5UNjQqKXN0YXRlKVsgMV0gPSB+KFVJTlQ2NCkwOworICAgICgoVUlOVDY0KilzdGF0ZSlbIDJdID0gfihVSU5UNjQpMDsKKyAgICAoKFVJTlQ2NCopc3RhdGUpWyA4XSA9IH4oVUlOVDY0KTA7CisgICAgKChVSU5UNjQqKXN0YXRlKVsxMl0gPSB+KFVJTlQ2NCkwOworICAgICgoVUlOVDY0KilzdGF0ZSlbMTddID0gfihVSU5UNjQpMDsKKyAgICAoKFVJTlQ2NCopc3RhdGUpWzIwXSA9IH4oVUlOVDY0KTA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb24odW5zaWduZWQgY2hhciAqc3RhdGUpCit7CisgICAgLyogIFdlIGFzc3VtZSB0aGUgc3RhdGUgaXMgYWx3YXlzIHN0b3JlZCBhcyB3b3JkcyAqLworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3JkcygoVUlOVDY0KilzdGF0ZSk7Cit9CisKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19CSUdfRU5ESUFOKQorc3RhdGljIHZvaWQgZnJvbUJ5dGVzVG9Xb3JkKFVJTlQ2NCAqd29yZCwgY29uc3QgVUlOVDggKmJ5dGVzKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgKndvcmQgPSAwOworICAgIGZvcihpPTA7IGk8KDY0LzgpOyBpKyspCisgICAgICAgICp3b3JkIHw9IChVSU5UNjQpKGJ5dGVzW2ldKSA8PCAoOCppKTsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBQcm92aWRlRmFzdDU3Ngorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiNTc2Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1s5XTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8OTsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjgzMmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzgzMmJpdHMoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEpOworI2Vsc2UKKyAgICBVSU5UNjQgZGF0YUFzV29yZHNbMTNdOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwxMzsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDI0Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTAyNGJpdHMoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEpOworI2Vsc2UKKyAgICBVSU5UNjQgZGF0YUFzV29yZHNbMTZdOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwxNjsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cygoVUlOVDY0KilzdGF0ZSwgZGF0YUFzV29yZHMpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTA4OGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKChVSU5UNjQqKXN0YXRlLCAoY29uc3QgVUlOVDY0KilkYXRhKTsKKyNlbHNlCisgICAgVUlOVDY0IGRhdGFBc1dvcmRzWzE3XTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8MTc7IGkrKykKKyAgICAgICAgZnJvbUJ5dGVzVG9Xb3JkKGRhdGFBc1dvcmRzK2ksIGRhdGErKGkqOCkpOworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTA4OGJpdHMoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjExNTJiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMTUyYml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1sxOF07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDE4OyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMzQ0Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTM0NGJpdHMoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEpOworI2Vsc2UKKyAgICBVSU5UNjQgZGF0YUFzV29yZHNbMjFdOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwyMTsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cygoVUlOVDY0KilzdGF0ZSwgZGF0YUFzV29yZHMpOworI2VuZGlmCit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEsIGxhbmVDb3VudCk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1syNV07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPGxhbmVDb3VudDsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzLCBsYW5lQ291bnQpOworI2VuZGlmCit9CisKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19CSUdfRU5ESUFOKQorc3RhdGljIHZvaWQgZnJvbVdvcmRUb0J5dGVzKFVJTlQ4ICpieXRlcywgY29uc3QgVUlOVDY0IHdvcmQpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPCg2NC84KTsgaSsrKQorICAgICAgICBieXRlc1tpXSA9ICh3b3JkID4+ICg4KmkpKSAmIDB4RkY7Cit9CisjZW5kaWYKKworCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtFeHRyYWN0MTAyNGJpdHMoY29uc3QgdW5zaWduZWQgY2hhciAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBtZW1jcHkoZGF0YSwgc3RhdGUsIDEyOCk7CisjZWxzZQorICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwxNjsgaSsrKQorICAgICAgICBmcm9tV29yZFRvQnl0ZXMoZGF0YSsoaSo4KSwgKChjb25zdCBVSU5UNjQqKXN0YXRlKVtpXSk7CisjZW5kaWYKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAoKFVJTlQ2NCopZGF0YSlbIDFdID0gfigoVUlOVDY0KilkYXRhKVsgMV07CisgICAgKChVSU5UNjQqKWRhdGEpWyAyXSA9IH4oKFVJTlQ2NCopZGF0YSlbIDJdOworICAgICgoVUlOVDY0KilkYXRhKVsgOF0gPSB+KChVSU5UNjQqKWRhdGEpWyA4XTsKKyAgICAoKFVJTlQ2NCopZGF0YSlbMTJdID0gfigoVUlOVDY0KilkYXRhKVsxMl07CisjZW5kaWYKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtFeHRyYWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgbWVtY3B5KGRhdGEsIHN0YXRlLCBsYW5lQ291bnQqOCk7CisjZWxzZQorICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTxsYW5lQ291bnQ7IGkrKykKKyAgICAgICAgZnJvbVdvcmRUb0J5dGVzKGRhdGErKGkqOCksICgoY29uc3QgVUlOVDY0KilzdGF0ZSlbaV0pOworI2VuZGlmCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgaWYgKGxhbmVDb3VudCA+IDEpIHsKKyAgICAgICAgKChVSU5UNjQqKWRhdGEpWyAxXSA9IH4oKFVJTlQ2NCopZGF0YSlbIDFdOworICAgICAgICBpZiAobGFuZUNvdW50ID4gMikgeworICAgICAgICAgICAgKChVSU5UNjQqKWRhdGEpWyAyXSA9IH4oKFVJTlQ2NCopZGF0YSlbIDJdOworICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDgpIHsKKyAgICAgICAgICAgICAgICAoKFVJTlQ2NCopZGF0YSlbIDhdID0gfigoVUlOVDY0KilkYXRhKVsgOF07CisgICAgICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDEyKSB7CisgICAgICAgICAgICAgICAgICAgICgoVUlOVDY0KilkYXRhKVsxMl0gPSB+KChVSU5UNjQqKWRhdGEpWzEyXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDE3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQ2NCopZGF0YSlbMTddID0gfigoVUlOVDY0KilkYXRhKVsxN107CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMjApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQ2NCopZGF0YSlbMjBdID0gfigoVUlOVDY0KilkYXRhKVsyMF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kMTI4Lm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kMTI4Lm1hY3JvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGU0N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXNpbWQxMjgubWFjcm9zCkBAIC0wLDAgKzEsNjUxIEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFY2NDY0IEFiYWdlLCBBYmVnaSwgQWJpZ28sIEFib2d1LCBBYnVnYTsgXAorICAgIFY2NDY0IEFrYW1lLCBBa2VtaSwgQWtpbW8sIEFrb211LCBBa3VtYTsgXAorICAgIFY2NDY0IEFiYWUsIEFiaW8sIEFnYWUsIEFnaW8sIEFrYWUsIEFraW8sIEFtYWUsIEFtaW8sIEFzYWUsIEFzaW87IFwKKyAgICBWNjQgQWJhLCBBYmUsIEFiaSwgQWJvLCBBYnU7IFwKKyAgICBWNjQgQWdhLCBBZ2UsIEFnaSwgQWdvLCBBZ3U7IFwKKyAgICBWNjQgQWthLCBBa2UsIEFraSwgQWtvLCBBa3U7IFwKKyAgICBWNjQgQW1hLCBBbWUsIEFtaSwgQW1vLCBBbXU7IFwKKyAgICBWNjQgQXNhLCBBc2UsIEFzaSwgQXNvLCBBc3U7IFwKKyAgICBWMTI4IEJiYWdlLCBCYmVnaSwgQmJpZ28sIEJib2d1LCBCYnVnYTsgXAorICAgIFYxMjggQmthbWUsIEJrZW1pLCBCa2ltbywgQmtvbXUsIEJrdW1hOyBcCisgICAgVjY0IEJiYSwgQmJlLCBCYmksIEJibywgQmJ1OyBcCisgICAgVjY0IEJnYSwgQmdlLCBCZ2ksIEJnbywgQmd1OyBcCisgICAgVjY0IEJrYSwgQmtlLCBCa2ksIEJrbywgQmt1OyBcCisgICAgVjY0IEJtYSwgQm1lLCBCbWksIEJtbywgQm11OyBcCisgICAgVjY0IEJzYSwgQnNlLCBCc2ksIEJzbywgQnN1OyBcCisgICAgVjEyOCBDYWUsIENlaSwgQ2lvLCBDb3UsIEN1YSwgRGVpLCBEb3U7IFwKKyAgICBWNjQgQ2EsIENlLCBDaSwgQ28sIEN1OyBcCisgICAgVjY0IERhLCBEZSwgRGksIERvLCBEdTsgXAorICAgIFY2NDY0IEViYWdlLCBFYmVnaSwgRWJpZ28sIEVib2d1LCBFYnVnYTsgXAorICAgIFY2NDY0IEVrYW1lLCBFa2VtaSwgRWtpbW8sIEVrb211LCBFa3VtYTsgXAorICAgIFY2NCBFYmEsIEViZSwgRWJpLCBFYm8sIEVidTsgXAorICAgIFY2NCBFZ2EsIEVnZSwgRWdpLCBFZ28sIEVndTsgXAorICAgIFY2NCBFa2EsIEVrZSwgRWtpLCBFa28sIEVrdTsgXAorICAgIFY2NCBFbWEsIEVtZSwgRW1pLCBFbW8sIEVtdTsgXAorICAgIFY2NCBFc2EsIEVzZSwgRXNpLCBFc28sIEVzdTsgXAorICAgIFYxMjggWmVybzsKKworI2RlZmluZSBwcmVwYXJlVGhldGEKKworI2RlZmluZSBjb21wdXRlRCBcCisgICAgQ3VhID0gR0VUNjRMT0xPKEN1LCBDYWUpOyBcCisgICAgRGVpID0gWE9SMTI4KENhZSwgUk9MNjRpbjEyOChDaW8sIDEpKTsgXAorICAgIERvdSA9IFhPUjEyOChDaW8sIFJPTDY0aW4xMjgoQ3VhLCAxKSk7IFwKKyAgICBEYSA9IFhPUjY0KEN1LCBST0w2NGluMTI4KENPUFk2NEhJMkxPKENhZSksIDEpKTsgXAorICAgIERlID0gRGVpOyBcCisgICAgRGkgPSBDT1BZNjRISTJMTyhEZWkpOyBcCisgICAgRG8gPSBEb3U7IFwKKyAgICBEdSA9IENPUFk2NEhJMkxPKERvdSk7CisKKy8qICAtLS0gVGhldGEgUmhvIFBpIENoaSBJb3RhIFByZXBhcmUtdGhldGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgYW5kIDEyOC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIGNvbXB1dGVEIFwKKyAgICBcCisgICAgQSMjYmEgPSBMT0FENjQoQSMjYmFnZS52NjRbMF0pOyBcCisgICAgWE9SZXE2NChBIyNiYSwgRGEpOyBcCisgICAgQmJhID0gQSMjYmE7IFwKKyAgICBYT1JlcTY0KEEjI2d1LCBEdSk7IFwKKyAgICBCZ2UgPSBST0w2NChBIyNndSwgMjApOyBcCisgICAgQmJhZ2UgPSBHRVQ2NExPTE8oQmJhLCBCZ2UpOyBcCisgICAgQSMjZ2UgPSBMT0FENjQoQSMjYmFnZS52NjRbMV0pOyBcCisgICAgWE9SZXE2NChBIyNnZSwgRGUpOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIEEjI2thID0gTE9BRDY0KEEjI2thbWUudjY0WzBdKTsgXAorICAgIFhPUmVxNjQoQSMja2EsIERhKTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEJiZWdpID0gR0VUNjRMT0xPKEJiZSwgQmdpKTsgXAorICAgIFhPUmVxNjQoQSMja2ksIERpKTsgXAorICAgIEJiaSA9IFJPTDY0KEEjI2tpLCA0Myk7IFwKKyAgICBBIyNtZSA9IExPQUQ2NChBIyNrYW1lLnY2NFsxXSk7IFwKKyAgICBYT1JlcTY0KEEjI21lLCBEZSk7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgQmJpZ28gPSBHRVQ2NExPTE8oQmJpLCBCZ28pOyBcCisgICAgRSMjYmFnZS52MTI4ID0gWE9SMTI4KEJiYWdlLCBBTkRudTEyOChCYmVnaSwgQmJpZ28pKTsgXAorICAgIFhPUmVxMTI4KEUjI2JhZ2UudjEyOCwgQ09OU1Q2NChLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldKSk7IFwKKyAgICBDYWUgPSBFIyNiYWdlLnYxMjg7IFwKKyAgICBYT1JlcTY0KEEjI21vLCBEbyk7IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgWE9SZXE2NChBIyNzaSwgRGkpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEJib2d1ID0gR0VUNjRMT0xPKEJibywgQmd1KTsgXAorICAgIEUjI2JlZ2kudjEyOCA9IFhPUjEyOChCYmVnaSwgQU5EbnUxMjgoQmJpZ28sIEJib2d1KSk7IFwKKyAgICBDZWkgPSBFIyNiZWdpLnYxMjg7IFwKKyAgICBYT1JlcTY0KEEjI3N1LCBEdSk7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgWE9SZXE2NChBIyNibywgRG8pOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIEJidWdhID0gR0VUNjRMT0xPKEJidSwgQmdhKTsgXAorICAgIEUjI2JpZ28udjEyOCA9IFhPUjEyOChCYmlnbywgQU5EbnUxMjgoQmJvZ3UsIEJidWdhKSk7IFwKKyAgICBFIyNiaSA9IEUjI2JpZ28udjEyODsgXAorICAgIEUjI2dvID0gR0VUNjRISUhJKEUjI2JpZ28udjEyOCwgRSMjYmlnby52MTI4KTsgXAorICAgIENpbyA9IEUjI2JpZ28udjEyODsgXAorICAgIEUjI2JvZ3UudjEyOCA9IFhPUjEyOChCYm9ndSwgQU5EbnUxMjgoQmJ1Z2EsIEJiYWdlKSk7IFwKKyAgICBFIyNibyA9IEUjI2JvZ3UudjEyODsgXAorICAgIEUjI2d1ID0gR0VUNjRISUhJKEUjI2JvZ3UudjEyOCwgRSMjYm9ndS52MTI4KTsgXAorICAgIENvdSA9IEUjI2JvZ3UudjEyODsgXAorICAgIEUjI2J1Z2EudjEyOCA9IFhPUjEyOChCYnVnYSwgQU5EbnUxMjgoQmJhZ2UsIEJiZWdpKSk7IFwKKyAgICBFIyNidSA9IEUjI2J1Z2EudjEyODsgXAorICAgIEUjI2dhID0gR0VUNjRISUhJKEUjI2J1Z2EudjEyOCwgRSMjYnVnYS52MTI4KTsgXAorICAgIEN1YSA9IEUjI2J1Z2EudjEyODsgXAorXAorICAgIEEjI2JlID0gTE9BRDY0KEEjI2JlZ2kudjY0WzBdKTsgXAorICAgIFhPUmVxNjQoQSMjYmUsIERlKTsgXAorICAgIEJrYSA9IFJPTDY0KEEjI2JlLCAxKTsgXAorICAgIFhPUmVxNjQoQSMjZ2EsIERhKTsgXAorICAgIEJtZSA9IFJPTDY0KEEjI2dhLCAzNik7IFwKKyAgICBCa2FtZSA9IEdFVDY0TE9MTyhCa2EsIEJtZSk7IFwKKyAgICBBIyNnaSA9IExPQUQ2NChBIyNiZWdpLnY2NFsxXSk7IFwKKyAgICBYT1JlcTY0KEEjI2dpLCBEaSk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBBIyNrZSA9IExPQUQ2NChBIyNrZW1pLnY2NFswXSk7IFwKKyAgICBYT1JlcTY0KEEjI2tlLCBEZSk7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQmtlbWkgPSBHRVQ2NExPTE8oQmtlLCBCbWkpOyBcCisgICAgWE9SZXE2NChBIyNrbywgRG8pOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEEjI21pID0gTE9BRDY0KEEjI2tlbWkudjY0WzFdKTsgXAorICAgIFhPUmVxNjQoQSMjbWksIERpKTsgXAorICAgIEJtbyA9IFJPTDY0KEEjI21pLCAxNSk7IFwKKyAgICBCa2ltbyA9IEdFVDY0TE9MTyhCa2ksIEJtbyk7IFwKKyAgICBFIyNrYW1lLnYxMjggPSBYT1IxMjgoQmthbWUsIEFORG51MTI4KEJrZW1pLCBCa2ltbykpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBFIyNrYW1lLnYxMjgpOyBcCisgICAgQmtvbXUgPSBHRVQ2NExPTE8oWE9SNjQoQSMjbXUsIER1KSwgWE9SNjQoQSMjc28sIERvKSk7IFwKKyAgICBCa29tdSA9IFNIVUZGTEVCWVRFUzEyOChCa29tdSwgQ09OU1QxMjgocmhvOF81NikpOyBcCisgICAgRSMja2VtaS52MTI4ID0gWE9SMTI4KEJrZW1pLCBBTkRudTEyOChCa2ltbywgQmtvbXUpKTsgXAorICAgIFhPUmVxMTI4KENlaSwgRSMja2VtaS52MTI4KTsgXAorICAgIFhPUmVxNjQoQSMjc2EsIERhKTsgXAorICAgIEJrdSA9IFJPTDY0KEEjI3NhLCAxOCk7IFwKKyAgICBYT1JlcTY0KEEjI2J1LCBEdSk7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQmt1bWEgPSBHRVQ2NExPTE8oQmt1LCBCbWEpOyBcCisgICAgRSMja2ltby52MTI4ID0gWE9SMTI4KEJraW1vLCBBTkRudTEyOChCa29tdSwgQmt1bWEpKTsgXAorICAgIEUjI2tpID0gRSMja2ltby52MTI4OyBcCisgICAgRSMjbW8gPSBHRVQ2NEhJSEkoRSMja2ltby52MTI4LCBFIyNraW1vLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBFIyNraW1vLnYxMjgpOyBcCisgICAgRSMja29tdS52MTI4ID0gWE9SMTI4KEJrb211LCBBTkRudTEyOChCa3VtYSwgQmthbWUpKTsgXAorICAgIEUjI2tvID0gRSMja29tdS52MTI4OyBcCisgICAgRSMjbXUgPSBHRVQ2NEhJSEkoRSMja29tdS52MTI4LCBFIyNrb211LnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ291LCBFIyNrb211LnYxMjgpOyBcCisgICAgRSMja3VtYS52MTI4ID0gWE9SMTI4KEJrdW1hLCBBTkRudTEyOChCa2FtZSwgQmtlbWkpKTsgXAorICAgIEUjI2t1ID0gRSMja3VtYS52MTI4OyBcCisgICAgRSMjbWEgPSBHRVQ2NEhJSEkoRSMja3VtYS52MTI4LCBFIyNrdW1hLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ3VhLCBFIyNrdW1hLnYxMjgpOyBcCitcCisgICAgWE9SZXE2NChBIyNiaSwgRGkpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIFhPUmVxNjQoQSMjZ28sIERvKTsgXAorICAgIEJzZSA9IFJPTDY0KEEjI2dvLCA1NSk7IFwKKyAgICBYT1JlcTY0KEEjI2t1LCBEdSk7IFwKKyAgICBCc2kgPSBST0w2NChBIyNrdSwgMzkpOyBcCisgICAgRSMjc2EgPSBYT1I2NChCc2EsIEFORG51NjQoQnNlLCBCc2kpKTsgXAorICAgIENhID0gRSMjc2E7IFwKKyAgICBYT1JlcTY0KEEjI21hLCBEYSk7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgRSMjc2UgPSBYT1I2NChCc2UsIEFORG51NjQoQnNpLCBCc28pKTsgXAorICAgIENlID0gRSMjc2U7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0TE9MTyhDYSwgQ2UpKTsgXAorICAgIFhPUmVxNjQoQSMjc2UsIERlKTsgXAorICAgIEJzdSA9IFJPTDY0KEEjI3NlLCAyKTsgXAorICAgIEUjI3NpID0gWE9SNjQoQnNpLCBBTkRudTY0KEJzbywgQnN1KSk7IFwKKyAgICBDaSA9IEUjI3NpOyBcCisgICAgRSMjc28gPSBYT1I2NChCc28sIEFORG51NjQoQnN1LCBCc2EpKTsgXAorICAgIENvID0gRSMjc287IFwKKyAgICBYT1JlcTEyOChDaW8sIEdFVDY0TE9MTyhDaSwgQ28pKTsgXAorICAgIEUjI3N1ID0gWE9SNjQoQnN1LCBBTkRudTY0KEJzYSwgQnNlKSk7IFwKKyAgICBDdSA9IEUjI3N1OyBcCitcCisgICAgWmVybyA9IFpFUk8xMjgoKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKEN1YSwgWmVybykpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NExPTE8oWmVybywgQ2VpKSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIEdFVDY0SElISShDZWksIFplcm8pKTsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRMT0xPKFplcm8sIENvdSkpOyBcCisgICAgWE9SZXExMjgoQ3VhLCBHRVQ2NEhJSEkoQ291LCBaZXJvKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBDdWEpOyBcCisKKy8qICAtLS0gVGhldGEgUmhvIFBpIENoaSBJb3RhICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IGFuZCAxMjgtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpCisKK3N0YXRpYyBjb25zdCBVSU5UNjQgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1syNF0gPSB7CisgICAgMHgwMDAwMDAwMDAwMDAwMDAxVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODA4MlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwOGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDAwVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODA4YlVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMDFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDgxVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwOVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwOGFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDAwMDg4VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwODAwOVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMGFVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4YlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODlVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAzVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwMlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDAwODBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDgwVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDhVTEwgfTsKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yNTc2Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZS52MTI4LCBYIyNiYWUudjEyOCk7IFwKKyAgICBDYWUgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2Jpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLnYxMjgsIFgjI2Jpby52MTI4KTsgXAorICAgIENpbyA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3UgPSBYIyNidTsgXAorICAgIFgjI2dhZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWUudjEyODsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZS52MTI4LCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNiYWdlLnYxMjggPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjZ2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpby52MTI4OyBcCisgICAgWCMjYmVnaS52MTI4ID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8udjEyOCwgWCMjZ2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8udjEyOCk7IFwKKyAgICBYIyNndSA9IExPQUQ2NChzdGF0ZVsgOV0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBMT0FEMTI4KHN0YXRlWzEwXSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZS52MTI4OyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLnYxMjgsIFgjI2thZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlLnYxMjgpOyBcCisgICAgWCMja2lvLnYxMjggPSBMT0FEMTI4KHN0YXRlWzEyXSk7IFwKKyAgICBYIyNraSA9IFgjI2tpby52MTI4OyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLnYxMjgsIFgjI2tpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvLnYxMjgpOyBcCisgICAgWCMja3UgPSBMT0FENjQoc3RhdGVbMTRdKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gTE9BRDEyOHUoc3RhdGVbMTVdKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvLnYxMjg7IFwKKyAgICBYIyNrZW1pLnYxMjggPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pby52MTI4LCBYIyNtaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pby52MTI4KTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjgzMmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMja3UpOyBcCisgICAgWCMjbWFlLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxNV0pOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE1XSksIExPQUQ2NChpbnB1dFsxNV0pKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvLnYxMjg7IFwKKyAgICBYIyNrZW1pLnYxMjggPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pby52MTI4LCBYIyNtaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pby52MTI4KTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEwODhiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLnYxMjgsIFgjI2JhZS52MTI4KTsgXAorICAgIENhZSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZS52MTI4OyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLnYxMjgsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2JhZ2UudjEyOCA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNnaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2d1KTsgXAorICAgIFgjI2thZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZS52MTI4OyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLnYxMjgsIFgjI2thZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlLnYxMjgpOyBcCisgICAgWCMja2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxNV0pLCBMT0FEMTI4dShpbnB1dFsxNV0pKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvLnYxMjg7IFwKKyAgICBYIyNrZW1pLnYxMjggPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pby52MTI4LCBYIyNtaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pby52MTI4KTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjExNTJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLnYxMjgsIFgjI2JhZS52MTI4KTsgXAorICAgIENhZSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZS52MTI4OyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLnYxMjgsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2JhZ2UudjEyOCA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNnaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2d1KTsgXAorICAgIFgjI2thZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZS52MTI4OyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLnYxMjgsIFgjI2thZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlLnYxMjgpOyBcCisgICAgWCMja2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxNV0pLCBMT0FEMTI4dShpbnB1dFsxNV0pKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE3XSksIExPQUQ2NChpbnB1dFsxN10pKTsgXAorICAgIFgjI21pID0gWCMjbWlvLnYxMjg7IFwKKyAgICBYIyNrZW1pLnYxMjggPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pby52MTI4LCBYIyNtaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pby52MTI4KTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEzNDRiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLnYxMjgsIFgjI2JhZS52MTI4KTsgXAorICAgIENhZSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZS52MTI4OyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLnYxMjgsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2JhZ2UudjEyOCA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNnaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2d1KTsgXAorICAgIFgjI2thZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZS52MTI4OyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLnYxMjgsIFgjI2thZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlLnYxMjgpOyBcCisgICAgWCMja2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxNV0pLCBMT0FEMTI4dShpbnB1dFsxNV0pKTsgXAorICAgIFgjI21hID0gWCMjbWFlLnYxMjg7IFwKKyAgICBYIyNtZSA9IEdFVDY0SElISShYIyNtYWUudjEyOCwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMja2FtZS52MTI4ID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI21pby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE3XSksIExPQUQxMjh1KGlucHV0WzE3XSkpOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTldKSwgTE9BRDY0KGlucHV0WzE5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjbXUpOyBcCisgICAgWCMjc2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsyMF0pLCBMT0FENjQoaW5wdXRbMjBdKSk7IFwKKyAgICBYIyNzYSA9IFgjI3NhZS52MTI4OyBcCisgICAgWCMjc2UgPSBHRVQ2NEhJSEkoWCMjc2FlLnYxMjgsIFgjI3NhZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FlLnYxMjgpOyBcCisgICAgWCMjc2lvLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzaSA9IFgjI3Npby52MTI4OyBcCisgICAgWCMjc28gPSBHRVQ2NEhJSEkoWCMjc2lvLnYxMjgsIFgjI3Npby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lvLnYxMjgpOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbIDBdKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbIDJdKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IExPQUQ2NChzdGF0ZVsgNF0pOyBcCisgICAgQ3UgPSBYIyNidTsgXAorICAgIFgjI2dhZS52MTI4ID0gTE9BRDEyOHUoc3RhdGVbIDVdKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gTE9BRDEyOHUoc3RhdGVbIDddKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNndSk7IFwKKyAgICBYIyNrYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMTBdKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMja3UpOyBcCisgICAgWCMjbWFlLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxNV0pOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIHN0YXRlWyAwXSA9IEEjI2JhZ2UudjY0WzBdOyBcCisgICAgc3RhdGVbIDFdID0gQSMjYmVnaS52NjRbMF07IFwKKyAgICBTVE9SRTY0KHN0YXRlWyAyXSwgWCMjYmkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgM10sIFgjI2JvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDRdLCBYIyNidSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA1XSwgWCMjZ2EpOyBcCisgICAgc3RhdGVbIDZdID0gQSMjYmFnZS52NjRbMV07IFwKKyAgICBzdGF0ZVsgN10gPSBBIyNiZWdpLnY2NFsxXTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDhdLCBYIyNnbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA5XSwgWCMjZ3UpOyBcCisgICAgc3RhdGVbMTBdID0gWCMja2FtZS52NjRbMF07IFwKKyAgICBzdGF0ZVsxMV0gPSBYIyNrZW1pLnY2NFswXTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTJdLCBYIyNraSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEzXSwgWCMja28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNF0sIFgjI2t1KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTVdLCBYIyNtYSk7IFwKKyAgICBzdGF0ZVsxNl0gPSBYIyNrYW1lLnY2NFsxXTsgXAorICAgIHN0YXRlWzE3XSA9IFgjI2tlbWkudjY0WzFdOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOF0sIFgjI21vKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTldLCBYIyNtdSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIwXSwgWCMjc2EpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyMV0sIFgjI3NlKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjJdLCBYIyNzaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIzXSwgWCMjc28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyNF0sIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmFnZSA9IFkjI2JhZ2U7IFwKKyAgICBYIyNiZWdpID0gWSMjYmVnaTsgXAorICAgIFgjI2JpID0gWSMjYmk7IFwKKyAgICBYIyNibyA9IFkjI2JvOyBcCisgICAgWCMjYnUgPSBZIyNidTsgXAorICAgIFgjI2dhID0gWSMjZ2E7IFwKKyAgICBYIyNnbyA9IFkjI2dvOyBcCisgICAgWCMjZ3UgPSBZIyNndTsgXAorICAgIFgjI2thbWUgPSBZIyNrYW1lOyBcCisgICAgWCMja2VtaSA9IFkjI2tlbWk7IFwKKyAgICBYIyNraSA9IFkjI2tpOyBcCisgICAgWCMja28gPSBZIyNrbzsgXAorICAgIFgjI2t1ID0gWSMja3U7IFwKKyAgICBYIyNtYSA9IFkjI21hOyBcCisgICAgWCMjbW8gPSBZIyNtbzsgXAorICAgIFgjI211ID0gWSMjbXU7IFwKKyAgICBYIyNzYSA9IFkjI3NhOyBcCisgICAgWCMjc2UgPSBZIyNzZTsgXAorICAgIFgjI3NpID0gWSMjc2k7IFwKKyAgICBYIyNzbyA9IFkjI3NvOyBcCisgICAgWCMjc3UgPSBZIyNzdTsgXAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtc2ltZDY0Lm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTMwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtc2ltZDY0Lm1hY3JvcwpAQCAtMCwwICsxLDUxNyBAQAorLyoKK0NvZGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgS2VjY2FrVG9vbHMhCisKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNkZWZpbmUgZGVjbGFyZUFCQ0RFIFwKKyAgICBWNjQgQWJhLCBBYmUsIEFiaSwgQWJvLCBBYnU7IFwKKyAgICBWNjQgQWdhLCBBZ2UsIEFnaSwgQWdvLCBBZ3U7IFwKKyAgICBWNjQgQWthLCBBa2UsIEFraSwgQWtvLCBBa3U7IFwKKyAgICBWNjQgQW1hLCBBbWUsIEFtaSwgQW1vLCBBbXU7IFwKKyAgICBWNjQgQXNhLCBBc2UsIEFzaSwgQXNvLCBBc3U7IFwKKyAgICBWNjQgQmJhLCBCYmUsIEJiaSwgQmJvLCBCYnU7IFwKKyAgICBWNjQgQmdhLCBCZ2UsIEJnaSwgQmdvLCBCZ3U7IFwKKyAgICBWNjQgQmthLCBCa2UsIEJraSwgQmtvLCBCa3U7IFwKKyAgICBWNjQgQm1hLCBCbWUsIEJtaSwgQm1vLCBCbXU7IFwKKyAgICBWNjQgQnNhLCBCc2UsIEJzaSwgQnNvLCBCc3U7IFwKKyAgICBWNjQgQ2EsIENlLCBDaSwgQ28sIEN1OyBcCisgICAgVjY0IERhLCBEZSwgRGksIERvLCBEdTsgXAorICAgIFY2NCBFYmEsIEViZSwgRWJpLCBFYm8sIEVidTsgXAorICAgIFY2NCBFZ2EsIEVnZSwgRWdpLCBFZ28sIEVndTsgXAorICAgIFY2NCBFa2EsIEVrZSwgRWtpLCBFa28sIEVrdTsgXAorICAgIFY2NCBFbWEsIEVtZSwgRW1pLCBFbW8sIEVtdTsgXAorICAgIFY2NCBFc2EsIEVzZSwgRXNpLCBFc28sIEVzdTsgXAorCisjZGVmaW5lIHByZXBhcmVUaGV0YSBcCisgICAgQ2EgPSBYT1I2NChBYmEsIFhPUjY0KEFnYSwgWE9SNjQoQWthLCBYT1I2NChBbWEsIEFzYSkpKSk7IFwKKyAgICBDZSA9IFhPUjY0KEFiZSwgWE9SNjQoQWdlLCBYT1I2NChBa2UsIFhPUjY0KEFtZSwgQXNlKSkpKTsgXAorICAgIENpID0gWE9SNjQoQWJpLCBYT1I2NChBZ2ksIFhPUjY0KEFraSwgWE9SNjQoQW1pLCBBc2kpKSkpOyBcCisgICAgQ28gPSBYT1I2NChBYm8sIFhPUjY0KEFnbywgWE9SNjQoQWtvLCBYT1I2NChBbW8sIEFzbykpKSk7IFwKKyAgICBDdSA9IFhPUjY0KEFidSwgWE9SNjQoQWd1LCBYT1I2NChBa3UsIFhPUjY0KEFtdSwgQXN1KSkpKTsgXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kLCB3aXRoIHByZXBhcmUtdGhldGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhID0gWE9SNjQoQ3UsIFJPTDY0KENlLCAxKSk7IFwKKyAgICBEZSA9IFhPUjY0KENhLCBST0w2NChDaSwgMSkpOyBcCisgICAgRGkgPSBYT1I2NChDZSwgUk9MNjQoQ28sIDEpKTsgXAorICAgIERvID0gWE9SNjQoQ2ksIFJPTDY0KEN1LCAxKSk7IFwKKyAgICBEdSA9IFhPUjY0KENvLCBST0w2NChDYSwgMSkpOyBcCitcCisgICAgWE9SZXE2NChBIyNiYSwgRGEpOyBcCisgICAgQmJhID0gQSMjYmE7IFwKKyAgICBYT1JlcTY0KEEjI2dlLCBEZSk7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgWE9SZXE2NChBIyNraSwgRGkpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEUjI2JhID0gWE9SNjQoQmJhLCBBTkRudTY0KEJiZSwgQmJpKSk7IFwKKyAgICBYT1JlcTY0KEUjI2JhLCBDT05TVDY0KEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV0pKTsgXAorICAgIENhID0gRSMjYmE7IFwKKyAgICBYT1JlcTY0KEEjI21vLCBEbyk7IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgRSMjYmUgPSBYT1I2NChCYmUsIEFORG51NjQoQmJpLCBCYm8pKTsgXAorICAgIENlID0gRSMjYmU7IFwKKyAgICBYT1JlcTY0KEEjI3N1LCBEdSk7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmkgPSBYT1I2NChCYmksIEFORG51NjQoQmJvLCBCYnUpKTsgXAorICAgIENpID0gRSMjYmk7IFwKKyAgICBFIyNibyA9IFhPUjY0KEJibywgQU5EbnU2NChCYnUsIEJiYSkpOyBcCisgICAgQ28gPSBFIyNibzsgXAorICAgIEUjI2J1ID0gWE9SNjQoQmJ1LCBBTkRudTY0KEJiYSwgQmJlKSk7IFwKKyAgICBDdSA9IEUjI2J1OyBcCitcCisgICAgWE9SZXE2NChBIyNibywgRG8pOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIFhPUmVxNjQoQSMjZ3UsIER1KTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBYT1JlcTY0KEEjI2thLCBEYSk7IFwKKyAgICBCZ2kgPSBST0w2NChBIyNrYSwgMyk7IFwKKyAgICBFIyNnYSA9IFhPUjY0KEJnYSwgQU5EbnU2NChCZ2UsIEJnaSkpOyBcCisgICAgWE9SZXE2NChDYSwgRSMjZ2EpOyBcCisgICAgWE9SZXE2NChBIyNtZSwgRGUpOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEUjI2dlID0gWE9SNjQoQmdlLCBBTkRudTY0KEJnaSwgQmdvKSk7IFwKKyAgICBYT1JlcTY0KENlLCBFIyNnZSk7IFwKKyAgICBYT1JlcTY0KEEjI3NpLCBEaSk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2kgPSBYT1I2NChCZ2ksIEFORG51NjQoQmdvLCBCZ3UpKTsgXAorICAgIFhPUmVxNjQoQ2ksIEUjI2dpKTsgXAorICAgIEUjI2dvID0gWE9SNjQoQmdvLCBBTkRudTY0KEJndSwgQmdhKSk7IFwKKyAgICBYT1JlcTY0KENvLCBFIyNnbyk7IFwKKyAgICBFIyNndSA9IFhPUjY0KEJndSwgQU5EbnU2NChCZ2EsIEJnZSkpOyBcCisgICAgWE9SZXE2NChDdSwgRSMjZ3UpOyBcCitcCisgICAgWE9SZXE2NChBIyNiZSwgRGUpOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgWE9SZXE2NChBIyNnaSwgRGkpOyBcCisgICAgQmtlID0gUk9MNjQoQSMjZ2ksIDYpOyBcCisgICAgWE9SZXE2NChBIyNrbywgRG8pOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEUjI2thID0gWE9SNjQoQmthLCBBTkRudTY0KEJrZSwgQmtpKSk7IFwKKyAgICBYT1JlcTY0KENhLCBFIyNrYSk7IFwKKyAgICBYT1JlcTY0KEEjI211LCBEdSk7IFwKKyAgICBCa28gPSBST0w2NChBIyNtdSwgOCk7IFwKKyAgICBFIyNrZSA9IFhPUjY0KEJrZSwgQU5EbnU2NChCa2ksIEJrbykpOyBcCisgICAgWE9SZXE2NChDZSwgRSMja2UpOyBcCisgICAgWE9SZXE2NChBIyNzYSwgRGEpOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2tpID0gWE9SNjQoQmtpLCBBTkRudTY0KEJrbywgQmt1KSk7IFwKKyAgICBYT1JlcTY0KENpLCBFIyNraSk7IFwKKyAgICBFIyNrbyA9IFhPUjY0KEJrbywgQU5EbnU2NChCa3UsIEJrYSkpOyBcCisgICAgWE9SZXE2NChDbywgRSMja28pOyBcCisgICAgRSMja3UgPSBYT1I2NChCa3UsIEFORG51NjQoQmthLCBCa2UpKTsgXAorICAgIFhPUmVxNjQoQ3UsIEUjI2t1KTsgXAorXAorICAgIFhPUmVxNjQoQSMjYnUsIER1KTsgXAorICAgIEJtYSA9IFJPTDY0KEEjI2J1LCAyNyk7IFwKKyAgICBYT1JlcTY0KEEjI2dhLCBEYSk7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgWE9SZXE2NChBIyNrZSwgRGUpOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEUjI21hID0gWE9SNjQoQm1hLCBBTkRudTY0KEJtZSwgQm1pKSk7IFwKKyAgICBYT1JlcTY0KENhLCBFIyNtYSk7IFwKKyAgICBYT1JlcTY0KEEjI21pLCBEaSk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgRSMjbWUgPSBYT1I2NChCbWUsIEFORG51NjQoQm1pLCBCbW8pKTsgXAorICAgIFhPUmVxNjQoQ2UsIEUjI21lKTsgXAorICAgIFhPUmVxNjQoQSMjc28sIERvKTsgXAorICAgIEJtdSA9IFJPTDY0KEEjI3NvLCA1Nik7IFwKKyAgICBFIyNtaSA9IFhPUjY0KEJtaSwgQU5EbnU2NChCbW8sIEJtdSkpOyBcCisgICAgWE9SZXE2NChDaSwgRSMjbWkpOyBcCisgICAgRSMjbW8gPSBYT1I2NChCbW8sIEFORG51NjQoQm11LCBCbWEpKTsgXAorICAgIFhPUmVxNjQoQ28sIEUjI21vKTsgXAorICAgIEUjI211ID0gWE9SNjQoQm11LCBBTkRudTY0KEJtYSwgQm1lKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBFIyNtdSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JpLCBEaSk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgWE9SZXE2NChBIyNnbywgRG8pOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIFhPUmVxNjQoQSMja3UsIER1KTsgXAorICAgIEJzaSA9IFJPTDY0KEEjI2t1LCAzOSk7IFwKKyAgICBFIyNzYSA9IFhPUjY0KEJzYSwgQU5EbnU2NChCc2UsIEJzaSkpOyBcCisgICAgWE9SZXE2NChDYSwgRSMjc2EpOyBcCisgICAgWE9SZXE2NChBIyNtYSwgRGEpOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEUjI3NlID0gWE9SNjQoQnNlLCBBTkRudTY0KEJzaSwgQnNvKSk7IFwKKyAgICBYT1JlcTY0KENlLCBFIyNzZSk7IFwKKyAgICBYT1JlcTY0KEEjI3NlLCBEZSk7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzaSA9IFhPUjY0KEJzaSwgQU5EbnU2NChCc28sIEJzdSkpOyBcCisgICAgWE9SZXE2NChDaSwgRSMjc2kpOyBcCisgICAgRSMjc28gPSBYT1I2NChCc28sIEFORG51NjQoQnN1LCBCc2EpKTsgXAorICAgIFhPUmVxNjQoQ28sIEUjI3NvKTsgXAorICAgIEUjI3N1ID0gWE9SNjQoQnN1LCBBTkRudTY0KEJzYSwgQnNlKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBFIyNzdSk7IFwKK1wKKworLyogIC0tLSBDb2RlIGZvciByb3VuZCAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YShpLCBBLCBFKSBcCisgICAgRGEgPSBYT1I2NChDdSwgUk9MNjQoQ2UsIDEpKTsgXAorICAgIERlID0gWE9SNjQoQ2EsIFJPTDY0KENpLCAxKSk7IFwKKyAgICBEaSA9IFhPUjY0KENlLCBST0w2NChDbywgMSkpOyBcCisgICAgRG8gPSBYT1I2NChDaSwgUk9MNjQoQ3UsIDEpKTsgXAorICAgIER1ID0gWE9SNjQoQ28sIFJPTDY0KENhLCAxKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JhLCBEYSk7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIFhPUmVxNjQoQSMjZ2UsIERlKTsgXAorICAgIEJiZSA9IFJPTDY0KEEjI2dlLCA0NCk7IFwKKyAgICBYT1JlcTY0KEEjI2tpLCBEaSk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgRSMjYmEgPSBYT1I2NChCYmEsIEFORG51NjQoQmJlLCBCYmkpKTsgXAorICAgIFhPUmVxNjQoRSMjYmEsIENPTlNUNjQoS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXSkpOyBcCisgICAgWE9SZXE2NChBIyNtbywgRG8pOyBcCisgICAgQmJvID0gUk9MNjQoQSMjbW8sIDIxKTsgXAorICAgIEUjI2JlID0gWE9SNjQoQmJlLCBBTkRudTY0KEJiaSwgQmJvKSk7IFwKKyAgICBYT1JlcTY0KEEjI3N1LCBEdSk7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmkgPSBYT1I2NChCYmksIEFORG51NjQoQmJvLCBCYnUpKTsgXAorICAgIEUjI2JvID0gWE9SNjQoQmJvLCBBTkRudTY0KEJidSwgQmJhKSk7IFwKKyAgICBFIyNidSA9IFhPUjY0KEJidSwgQU5EbnU2NChCYmEsIEJiZSkpOyBcCitcCisgICAgWE9SZXE2NChBIyNibywgRG8pOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIFhPUmVxNjQoQSMjZ3UsIER1KTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBYT1JlcTY0KEEjI2thLCBEYSk7IFwKKyAgICBCZ2kgPSBST0w2NChBIyNrYSwgMyk7IFwKKyAgICBFIyNnYSA9IFhPUjY0KEJnYSwgQU5EbnU2NChCZ2UsIEJnaSkpOyBcCisgICAgWE9SZXE2NChBIyNtZSwgRGUpOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEUjI2dlID0gWE9SNjQoQmdlLCBBTkRudTY0KEJnaSwgQmdvKSk7IFwKKyAgICBYT1JlcTY0KEEjI3NpLCBEaSk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2kgPSBYT1I2NChCZ2ksIEFORG51NjQoQmdvLCBCZ3UpKTsgXAorICAgIEUjI2dvID0gWE9SNjQoQmdvLCBBTkRudTY0KEJndSwgQmdhKSk7IFwKKyAgICBFIyNndSA9IFhPUjY0KEJndSwgQU5EbnU2NChCZ2EsIEJnZSkpOyBcCitcCisgICAgWE9SZXE2NChBIyNiZSwgRGUpOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgWE9SZXE2NChBIyNnaSwgRGkpOyBcCisgICAgQmtlID0gUk9MNjQoQSMjZ2ksIDYpOyBcCisgICAgWE9SZXE2NChBIyNrbywgRG8pOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEUjI2thID0gWE9SNjQoQmthLCBBTkRudTY0KEJrZSwgQmtpKSk7IFwKKyAgICBYT1JlcTY0KEEjI211LCBEdSk7IFwKKyAgICBCa28gPSBST0w2NChBIyNtdSwgOCk7IFwKKyAgICBFIyNrZSA9IFhPUjY0KEJrZSwgQU5EbnU2NChCa2ksIEJrbykpOyBcCisgICAgWE9SZXE2NChBIyNzYSwgRGEpOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2tpID0gWE9SNjQoQmtpLCBBTkRudTY0KEJrbywgQmt1KSk7IFwKKyAgICBFIyNrbyA9IFhPUjY0KEJrbywgQU5EbnU2NChCa3UsIEJrYSkpOyBcCisgICAgRSMja3UgPSBYT1I2NChCa3UsIEFORG51NjQoQmthLCBCa2UpKTsgXAorXAorICAgIFhPUmVxNjQoQSMjYnUsIER1KTsgXAorICAgIEJtYSA9IFJPTDY0KEEjI2J1LCAyNyk7IFwKKyAgICBYT1JlcTY0KEEjI2dhLCBEYSk7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgWE9SZXE2NChBIyNrZSwgRGUpOyBcCisgICAgQm1pID0gUk9MNjQoQSMja2UsIDEwKTsgXAorICAgIEUjI21hID0gWE9SNjQoQm1hLCBBTkRudTY0KEJtZSwgQm1pKSk7IFwKKyAgICBYT1JlcTY0KEEjI21pLCBEaSk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgRSMjbWUgPSBYT1I2NChCbWUsIEFORG51NjQoQm1pLCBCbW8pKTsgXAorICAgIFhPUmVxNjQoQSMjc28sIERvKTsgXAorICAgIEJtdSA9IFJPTDY0KEEjI3NvLCA1Nik7IFwKKyAgICBFIyNtaSA9IFhPUjY0KEJtaSwgQU5EbnU2NChCbW8sIEJtdSkpOyBcCisgICAgRSMjbW8gPSBYT1I2NChCbW8sIEFORG51NjQoQm11LCBCbWEpKTsgXAorICAgIEUjI211ID0gWE9SNjQoQm11LCBBTkRudTY0KEJtYSwgQm1lKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JpLCBEaSk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgWE9SZXE2NChBIyNnbywgRG8pOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIFhPUmVxNjQoQSMja3UsIER1KTsgXAorICAgIEJzaSA9IFJPTDY0KEEjI2t1LCAzOSk7IFwKKyAgICBFIyNzYSA9IFhPUjY0KEJzYSwgQU5EbnU2NChCc2UsIEJzaSkpOyBcCisgICAgWE9SZXE2NChBIyNtYSwgRGEpOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEUjI3NlID0gWE9SNjQoQnNlLCBBTkRudTY0KEJzaSwgQnNvKSk7IFwKKyAgICBYT1JlcTY0KEEjI3NlLCBEZSk7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzaSA9IFhPUjY0KEJzaSwgQU5EbnU2NChCc28sIEJzdSkpOyBcCisgICAgRSMjc28gPSBYT1I2NChCc28sIEFORG51NjQoQnN1LCBCc2EpKTsgXAorICAgIEUjI3N1ID0gWE9SNjQoQnN1LCBBTkRudTY0KEJzYSwgQnNlKSk7IFwKK1wKKworc3RhdGljIGNvbnN0IFVJTlQ2NCBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDgyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4YVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDhiVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4YVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwODhVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4OVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDNVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4MFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODBVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwOFVMTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAwXSksIExPQUQ2NChpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAxXSksIExPQUQ2NChpbnB1dFsgMV0pKTsgXAorICAgIFgjI2JpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAyXSksIExPQUQ2NChpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAzXSksIExPQUQ2NChpbnB1dFsgM10pKTsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIFgjI2dhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA1XSksIExPQUQ2NChpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA2XSksIExPQUQ2NChpbnB1dFsgNl0pKTsgXAorICAgIFgjI2dpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA3XSksIExPQUQ2NChpbnB1dFsgN10pKTsgXAorICAgIFgjI2dvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA4XSksIExPQUQ2NChpbnB1dFsgOF0pKTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYIyNrYSA9IExPQUQ2NChzdGF0ZVsxMF0pOyBcCisgICAgWCMja2UgPSBMT0FENjQoc3RhdGVbMTFdKTsgXAorICAgIFgjI2tpID0gTE9BRDY0KHN0YXRlWzEyXSk7IFwKKyAgICBYIyNrbyA9IExPQUQ2NChzdGF0ZVsxM10pOyBcCisgICAgWCMja3UgPSBMT0FENjQoc3RhdGVbMTRdKTsgXAorICAgIFgjI21hID0gTE9BRDY0KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yODMyYml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMF0pLCBMT0FENjQoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMV0pLCBMT0FENjQoaW5wdXRbIDFdKSk7IFwKKyAgICBYIyNiaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMl0pLCBMT0FENjQoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNibyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgM10pLCBMT0FENjQoaW5wdXRbIDNdKSk7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBYIyNnYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNV0pLCBMT0FENjQoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNl0pLCBMT0FENjQoaW5wdXRbIDZdKSk7IFwKKyAgICBYIyNnaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgN10pLCBMT0FENjQoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOF0pLCBMT0FENjQoaW5wdXRbIDhdKSk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNrYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMF0pLCBMT0FENjQoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMV0pLCBMT0FENjQoaW5wdXRbMTFdKSk7IFwKKyAgICBYIyNraSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMl0pLCBMT0FENjQoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNrbyA9IExPQUQ2NChzdGF0ZVsxM10pOyBcCisgICAgWCMja3UgPSBMT0FENjQoc3RhdGVbMTRdKTsgXAorICAgIFgjI21hID0gTE9BRDY0KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMja2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMTBdKSwgTE9BRDY0KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTFdKSwgTE9BRDY0KGlucHV0WzExXSkpOyBcCisgICAgWCMja2kgPSBYT1I2NChMT0FENjQoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja28gPSBYT1I2NChMT0FENjQoc3RhdGVbMTNdKSwgTE9BRDY0KGlucHV0WzEzXSkpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWCMjbWEgPSBYT1I2NChMT0FENjQoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWUgPSBMT0FENjQoc3RhdGVbMTZdKTsgXAorICAgIFgjI21pID0gTE9BRDY0KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtbyA9IExPQUQ2NChzdGF0ZVsxOF0pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI3NhID0gTE9BRDY0KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzZSA9IExPQUQ2NChzdGF0ZVsyMV0pOyBcCisgICAgWCMjc2kgPSBMT0FENjQoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NvID0gTE9BRDY0KHN0YXRlWzIzXSk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEwODhiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAwXSksIExPQUQ2NChpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAxXSksIExPQUQ2NChpbnB1dFsgMV0pKTsgXAorICAgIFgjI2JpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAyXSksIExPQUQ2NChpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAzXSksIExPQUQ2NChpbnB1dFsgM10pKTsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIFgjI2dhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA1XSksIExPQUQ2NChpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA2XSksIExPQUQ2NChpbnB1dFsgNl0pKTsgXAorICAgIFgjI2dpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA3XSksIExPQUQ2NChpbnB1dFsgN10pKTsgXAorICAgIFgjI2dvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA4XSksIExPQUQ2NChpbnB1dFsgOF0pKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2thID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEwXSksIExPQUQ2NChpbnB1dFsxMF0pKTsgXAorICAgIFgjI2tlID0gWE9SNjQoTE9BRDY0KHN0YXRlWzExXSksIExPQUQ2NChpbnB1dFsxMV0pKTsgXAorICAgIFgjI2tpID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tvID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEzXSksIExPQUQ2NChpbnB1dFsxM10pKTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFgjI21hID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE1XSksIExPQUQ2NChpbnB1dFsxNV0pKTsgXAorICAgIFgjI21lID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE2XSksIExPQUQ2NChpbnB1dFsxNl0pKTsgXAorICAgIFgjI21pID0gTE9BRDY0KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtbyA9IExPQUQ2NChzdGF0ZVsxOF0pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI3NhID0gTE9BRDY0KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzZSA9IExPQUQ2NChzdGF0ZVsyMV0pOyBcCisgICAgWCMjc2kgPSBMT0FENjQoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NvID0gTE9BRDY0KHN0YXRlWzIzXSk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjExNTJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAwXSksIExPQUQ2NChpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAxXSksIExPQUQ2NChpbnB1dFsgMV0pKTsgXAorICAgIFgjI2JpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAyXSksIExPQUQ2NChpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAzXSksIExPQUQ2NChpbnB1dFsgM10pKTsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIFgjI2dhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA1XSksIExPQUQ2NChpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA2XSksIExPQUQ2NChpbnB1dFsgNl0pKTsgXAorICAgIFgjI2dpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA3XSksIExPQUQ2NChpbnB1dFsgN10pKTsgXAorICAgIFgjI2dvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA4XSksIExPQUQ2NChpbnB1dFsgOF0pKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2thID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEwXSksIExPQUQ2NChpbnB1dFsxMF0pKTsgXAorICAgIFgjI2tlID0gWE9SNjQoTE9BRDY0KHN0YXRlWzExXSksIExPQUQ2NChpbnB1dFsxMV0pKTsgXAorICAgIFgjI2tpID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tvID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEzXSksIExPQUQ2NChpbnB1dFsxM10pKTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFgjI21hID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE1XSksIExPQUQ2NChpbnB1dFsxNV0pKTsgXAorICAgIFgjI21lID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE2XSksIExPQUQ2NChpbnB1dFsxNl0pKTsgXAorICAgIFgjI21pID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE3XSksIExPQUQ2NChpbnB1dFsxN10pKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTM0NGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMja2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMTBdKSwgTE9BRDY0KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTFdKSwgTE9BRDY0KGlucHV0WzExXSkpOyBcCisgICAgWCMja2kgPSBYT1I2NChMT0FENjQoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja28gPSBYT1I2NChMT0FENjQoc3RhdGVbMTNdKSwgTE9BRDY0KGlucHV0WzEzXSkpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWCMjbWEgPSBYT1I2NChMT0FENjQoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMjbWkgPSBYT1I2NChMT0FENjQoc3RhdGVbMTddKSwgTE9BRDY0KGlucHV0WzE3XSkpOyBcCisgICAgWCMjbW8gPSBYT1I2NChMT0FENjQoc3RhdGVbMThdKSwgTE9BRDY0KGlucHV0WzE4XSkpOyBcCisgICAgWCMjbXUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTldKSwgTE9BRDY0KGlucHV0WzE5XSkpOyBcCisgICAgWCMjc2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMjBdKSwgTE9BRDY0KGlucHV0WzIwXSkpOyBcCisgICAgWCMjc2UgPSBMT0FENjQoc3RhdGVbMjFdKTsgXAorICAgIFgjI3NpID0gTE9BRDY0KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzbyA9IExPQUQ2NChzdGF0ZVsyM10pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYSA9IExPQUQ2NChzdGF0ZVsgMF0pOyBcCisgICAgWCMjYmUgPSBMT0FENjQoc3RhdGVbIDFdKTsgXAorICAgIFgjI2JpID0gTE9BRDY0KHN0YXRlWyAyXSk7IFwKKyAgICBYIyNibyA9IExPQUQ2NChzdGF0ZVsgM10pOyBcCisgICAgWCMjYnUgPSBMT0FENjQoc3RhdGVbIDRdKTsgXAorICAgIFgjI2dhID0gTE9BRDY0KHN0YXRlWyA1XSk7IFwKKyAgICBYIyNnZSA9IExPQUQ2NChzdGF0ZVsgNl0pOyBcCisgICAgWCMjZ2kgPSBMT0FENjQoc3RhdGVbIDddKTsgXAorICAgIFgjI2dvID0gTE9BRDY0KHN0YXRlWyA4XSk7IFwKKyAgICBYIyNndSA9IExPQUQ2NChzdGF0ZVsgOV0pOyBcCisgICAgWCMja2EgPSBMT0FENjQoc3RhdGVbMTBdKTsgXAorICAgIFgjI2tlID0gTE9BRDY0KHN0YXRlWzExXSk7IFwKKyAgICBYIyNraSA9IExPQUQ2NChzdGF0ZVsxMl0pOyBcCisgICAgWCMja28gPSBMT0FENjQoc3RhdGVbMTNdKTsgXAorICAgIFgjI2t1ID0gTE9BRDY0KHN0YXRlWzE0XSk7IFwKKyAgICBYIyNtYSA9IExPQUQ2NChzdGF0ZVsxNV0pOyBcCisgICAgWCMjbWUgPSBMT0FENjQoc3RhdGVbMTZdKTsgXAorICAgIFgjI21pID0gTE9BRDY0KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtbyA9IExPQUQ2NChzdGF0ZVsxOF0pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI3NhID0gTE9BRDY0KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzZSA9IExPQUQ2NChzdGF0ZVsyMV0pOyBcCisgICAgWCMjc2kgPSBMT0FENjQoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NvID0gTE9BRDY0KHN0YXRlWzIzXSk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisKKyNkZWZpbmUgY29weVRvU3RhdGUoc3RhdGUsIFgpIFwKKyAgICBTVE9SRTY0KHN0YXRlWyAwXSwgWCMjYmEpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgMV0sIFgjI2JlKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDJdLCBYIyNiaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyAzXSwgWCMjYm8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgNF0sIFgjI2J1KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDVdLCBYIyNnYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA2XSwgWCMjZ2UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgN10sIFgjI2dpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDhdLCBYIyNnbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA5XSwgWCMjZ3UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMF0sIFgjI2thKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTFdLCBYIyNrZSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEyXSwgWCMja2kpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxM10sIFgjI2tvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTRdLCBYIyNrdSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE1XSwgWCMjbWEpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNl0sIFgjI21lKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTddLCBYIyNtaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE4XSwgWCMjbW8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOV0sIFgjI211KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjBdLCBYIyNzYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIxXSwgWCMjc2UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyMl0sIFgjI3NpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjNdLCBYIyNzbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzI0XSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weVN0YXRlVmFyaWFibGVzKFgsIFkpIFwKKyAgICBYIyNiYSA9IFkjI2JhOyBcCisgICAgWCMjYmUgPSBZIyNiZTsgXAorICAgIFgjI2JpID0gWSMjYmk7IFwKKyAgICBYIyNibyA9IFkjI2JvOyBcCisgICAgWCMjYnUgPSBZIyNidTsgXAorICAgIFgjI2dhID0gWSMjZ2E7IFwKKyAgICBYIyNnZSA9IFkjI2dlOyBcCisgICAgWCMjZ2kgPSBZIyNnaTsgXAorICAgIFgjI2dvID0gWSMjZ287IFwKKyAgICBYIyNndSA9IFkjI2d1OyBcCisgICAgWCMja2EgPSBZIyNrYTsgXAorICAgIFgjI2tlID0gWSMja2U7IFwKKyAgICBYIyNraSA9IFkjI2tpOyBcCisgICAgWCMja28gPSBZIyNrbzsgXAorICAgIFgjI2t1ID0gWSMja3U7IFwKKyAgICBYIyNtYSA9IFkjI21hOyBcCisgICAgWCMjbWUgPSBZIyNtZTsgXAorICAgIFgjI21pID0gWSMjbWk7IFwKKyAgICBYIyNtbyA9IFkjI21vOyBcCisgICAgWCMjbXUgPSBZIyNtdTsgXAorICAgIFgjI3NhID0gWSMjc2E7IFwKKyAgICBYIyNzZSA9IFkjI3NlOyBcCisgICAgWCMjc2kgPSBZIyNzaTsgXAorICAgIFgjI3NvID0gWSMjc287IFwKKyAgICBYIyNzdSA9IFkjI3N1OyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC11bnJvbGxpbmcubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjNjk0YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC11bnJvbGxpbmcubWFjcm9zCkBAIC0wLDAgKzEsMTI0IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2lmIChVbnJvbGxpbmcgPT0gMjQpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggMCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCAxLCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDIsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggMywgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCA0LCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDUsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggNiwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCA3LCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDgsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggOSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDEwLCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTEsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxMiwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDEzLCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTQsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxNSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDE2LCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTcsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxOCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDE5LCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMjAsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgyMSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDIyLCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGEoMjMsIEUsIEEpIFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gMTIpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz0xMikgeyBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkgICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyAyLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDMsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgNCwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyA1LCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDYsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgNywgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyA4LCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDksIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxMCwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzExLCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDgpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz04KSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzIsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSszLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrNCwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzUsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSs2LCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrNywgRSwgQSkgXAorICAgIH0gXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKQorI2VsaWYgKFVucm9sbGluZyA9PSA2KQorI2RlZmluZSByb3VuZHMgXAorICAgIHByZXBhcmVUaGV0YSBcCisgICAgZm9yKGk9MDsgaTwyNDsgaSs9NikgeyBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkgICwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzEsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsyLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMywgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzQsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSs1LCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDQpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz00KSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzIsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSszLCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDMpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz0zKSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzIsIEEsIEUpIFwKKyAgICAgICAgY29weVN0YXRlVmFyaWFibGVzKEEsIEUpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gMikKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTIpIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxLCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDEpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKyspIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgY29weVN0YXRlVmFyaWFibGVzKEEsIEUpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbHNlCisjZXJyb3IgIlVucm9sbGluZyBpcyBub3QgY29ycmVjdGx5IHNwZWNpZmllZCEiCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC14b3AubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXhvcC5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzYzk0NgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC14b3AubWFjcm9zCkBAIC0wLDAgKzEsNTczIEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFYxMjggQWJhZ2UsIEFiZWdpLCBBYmlnbywgQWJvZ3UsIEFidWdhOyBcCisgICAgVjEyOCBBa2FtZSwgQWtlbWksIEFraW1vLCBBa29tdSwgQWt1bWE7IFwKKyAgICBWMTI4IEFiYWUsIEFiaW8sIEFnYWUsIEFnaW8sIEFrYWUsIEFraW8sIEFtYWUsIEFtaW87IFwKKyAgICBWNjQgQWJhLCBBYmUsIEFiaSwgQWJvLCBBYnU7IFwKKyAgICBWNjQgQWdhLCBBZ2UsIEFnaSwgQWdvLCBBZ3U7IFwKKyAgICBWNjQgQWthLCBBa2UsIEFraSwgQWtvLCBBa3U7IFwKKyAgICBWNjQgQW1hLCBBbWUsIEFtaSwgQW1vLCBBbXU7IFwKKyAgICBWMTI4IEFzYXNlLCBBc2lzbzsgXAorICAgIFY2NCBBc3U7IFwKKyAgICBWMTI4IEJiYWdlLCBCYmVnaSwgQmJpZ28sIEJib2d1LCBCYnVnYTsgXAorICAgIFYxMjggQmthbWUsIEJrZW1pLCBCa2ltbywgQmtvbXUsIEJrdW1hOyBcCisgICAgVjEyOCBCc2FzZSwgQnNlc2ksIEJzaXNvLCBCc29zdSwgQnN1c2E7IFwKKyAgICBWMTI4IENhZSwgQ2VpLCBDaW8sIENvdSwgQ3VhOyBcCisgICAgVjEyOCBEYXUsIERlYSwgRGllLCBEb2ksIER1bzsgXAorICAgIFYxMjggRHVhLCBEYWUsIERlaSwgRGlvLCBEb3U7IFwKKyAgICBWMTI4IEViYWdlLCBFYmVnaSwgRWJpZ28sIEVib2d1LCBFYnVnYTsgXAorICAgIFYxMjggRWthbWUsIEVrZW1pLCBFa2ltbywgRWtvbXUsIEVrdW1hOyBcCisgICAgVjEyOCBFc2FzZSwgRXNpc287IFwKKyAgICBWNjQgRXN1OyBcCisgICAgVjEyOCBaZXJvOworCisjZGVmaW5lIHByZXBhcmVUaGV0YQorCisjZGVmaW5lIGNvbXB1dGVEIFwKKyAgICBDdWEgPSBHRVQ2NExPTE8oQ3VhLCBDYWUpOyBcCisgICAgRGVpID0gWE9SMTI4KENhZSwgUk9MNjQ2NHNhbWUoQ2lvLCAxKSk7IFwKKyAgICBEb3UgPSBYT1IxMjgoQ2lvLCBST0w2NDY0c2FtZShDdWEsIDEpKTsgXAorICAgIENlaSA9IEdFVDY0SElMTyhDYWUsIENpbyk7IFwKKyAgICBEYWUgPSBYT1IxMjgoQ3VhLCBST0w2NDY0c2FtZShDZWksIDEpKTsgXAorICAgIERhdSA9IEdFVDY0TE9ISShEYWUsIERvdSk7IFwKKyAgICBEZWEgPSBTV0FQNjQoRGFlKTsgXAorICAgIERpZSA9IFNXQVA2NChEZWkpOyBcCisgICAgRG9pID0gR0VUNjRMT0xPKERvdSwgRGllKTsgXAorICAgIER1byA9IFNXQVA2NChEb3UpOworCisvKiAgLS0tIFRoZXRhIFJobyBQaSBDaGkgSW90YSBQcmVwYXJlLXRoZXRhICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IGFuZCAxMjgtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBjb21wdXRlRCBcCisgICAgXAorICAgIEJiYWdlID0gWE9SMTI4KEdFVDY0TE9ISShBIyNiYWdlLCBBIyNib2d1KSwgRGF1KTsgXAorICAgIEJiYWdlID0gUk9MNjQ2NChCYmFnZSwgMCwgMjApOyBcCisgICAgQmJlZ2kgPSBYT1IxMjgoR0VUNjRISUxPKEEjI2JhZ2UsIEEjI2thbWUpLCBEZWEpOyBcCisgICAgQmJlZ2kgPSBST0w2NDY0KEJiZWdpLCA0NCwgMyk7IFwKKyAgICBCYmlnbyA9IFhPUjEyOChHRVQ2NExPSEkoQSMja2ltbywgQSMja2FtZSksIERpZSk7IFwKKyAgICBCYmlnbyA9IFJPTDY0NjQoQmJpZ28sIDQzLCA0NSk7IFwKKyAgICBFIyNiYWdlID0gWE9SMTI4KEJiYWdlLCBBTkRudTEyOChCYmVnaSwgQmJpZ28pKTsgXAorICAgIFhPUmVxMTI4KEUjI2JhZ2UsIENPTlNUNjQoS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXSkpOyBcCisgICAgQ2FlID0gRSMjYmFnZTsgXAorICAgIEJib2d1ID0gWE9SMTI4KEdFVDY0SElMTyhBIyNraW1vLCBBIyNzaXNvKSwgRG9pKTsgXAorICAgIEJib2d1ID0gUk9MNjQ2NChCYm9ndSwgMjEsIDYxKTsgXAorICAgIEUjI2JlZ2kgPSBYT1IxMjgoQmJlZ2ksIEFORG51MTI4KEJiaWdvLCBCYm9ndSkpOyBcCisgICAgQ2VpID0gRSMjYmVnaTsgXAorICAgIEJidWdhID0gWE9SMTI4KEdFVDY0TE9MTyhBIyNzdSwgQSMjYm9ndSksIER1byk7IFwKKyAgICBCYnVnYSA9IFJPTDY0NjQoQmJ1Z2EsIDE0LCAyOCk7IFwKKyAgICBFIyNiaWdvID0gWE9SMTI4KEJiaWdvLCBBTkRudTEyOChCYm9ndSwgQmJ1Z2EpKTsgXAorICAgIENpbyA9IEUjI2JpZ287IFwKKyAgICBFIyNib2d1ID0gWE9SMTI4KEJib2d1LCBBTkRudTEyOChCYnVnYSwgQmJhZ2UpKTsgXAorICAgIENvdSA9IEUjI2JvZ3U7IFwKKyAgICBFIyNidWdhID0gWE9SMTI4KEJidWdhLCBBTkRudTEyOChCYmFnZSwgQmJlZ2kpKTsgXAorICAgIEN1YSA9IEUjI2J1Z2E7IFwKK1wKKyAgICBCa2FtZSA9IFhPUjEyOChHRVQ2NExPSEkoQSMjYmVnaSwgQSMjYnVnYSksIERlYSk7IFwKKyAgICBCa2FtZSA9IFJPTDY0NjQoQmthbWUsIDEsIDM2KTsgXAorICAgIEJrZW1pID0gWE9SMTI4KEdFVDY0SElMTyhBIyNiZWdpLCBBIyNrZW1pKSwgRGllKTsgXAorICAgIEJrZW1pID0gUk9MNjQ2NChCa2VtaSwgNiwgMTApOyBcCisgICAgQmtpbW8gPSBYT1IxMjgoR0VUNjRMT0hJKEEjI2tvbXUsIEEjI2tlbWkpLCBEb2kpOyBcCisgICAgQmtpbW8gPSBST0w2NDY0KEJraW1vLCAyNSwgMTUpOyBcCisgICAgRSMja2FtZSA9IFhPUjEyOChCa2FtZSwgQU5EbnUxMjgoQmtlbWksIEJraW1vKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEUjI2thbWUpOyBcCisgICAgQmtvbXUgPSBYT1IxMjgoR0VUNjRISUhJKEEjI2tvbXUsIEEjI3Npc28pLCBEdW8pOyBcCisgICAgQmtvbXUgPSBST0w2NDY0KEJrb211LCA4LCA1Nik7IFwKKyAgICBFIyNrZW1pID0gWE9SMTI4KEJrZW1pLCBBTkRudTEyOChCa2ltbywgQmtvbXUpKTsgXAorICAgIFhPUmVxMTI4KENlaSwgRSMja2VtaSk7IFwKKyAgICBCa3VtYSA9IFhPUjEyOChHRVQ2NExPTE8oQSMjc2FzZSwgQSMjYnVnYSksIERhdSk7IFwKKyAgICBCa3VtYSA9IFJPTDY0NjQoQmt1bWEsIDE4LCAyNyk7IFwKKyAgICBFIyNraW1vID0gWE9SMTI4KEJraW1vLCBBTkRudTEyOChCa29tdSwgQmt1bWEpKTsgXAorICAgIFhPUmVxMTI4KENpbywgRSMja2ltbyk7IFwKKyAgICBFIyNrb211ID0gWE9SMTI4KEJrb211LCBBTkRudTEyOChCa3VtYSwgQmthbWUpKTsgXAorICAgIFhPUmVxMTI4KENvdSwgRSMja29tdSk7IFwKKyAgICBFIyNrdW1hID0gWE9SMTI4KEJrdW1hLCBBTkRudTEyOChCa2FtZSwgQmtlbWkpKTsgXAorICAgIFhPUmVxMTI4KEN1YSwgRSMja3VtYSk7IFwKK1wKKyAgICBCc2FzZSA9IFhPUjEyOChBIyNiaWdvLCBTV0FQNjQoRG9pKSk7IFwKKyAgICBCc2FzZSA9IFJPTDY0NjQoQnNhc2UsIDYyLCA1NSk7IFwKKyAgICBCc2lzbyA9IFhPUjEyOChBIyNrdW1hLCBTV0FQNjQoRGF1KSk7IFwKKyAgICBCc2lzbyA9IFJPTDY0NjQoQnNpc28sIDM5LCA0MSk7IFwKKyAgICBCc3VzYSA9IFhPUjY0KENPUFk2NEhJMkxPKEEjI3Nhc2UpLCBEZWkpOyBcCisgICAgQnN1c2EgPSBST0w2NDY0c2FtZShCc3VzYSwgMik7IFwKKyAgICBCc3VzYSA9IEdFVDY0TE9MTyhCc3VzYSwgQnNhc2UpOyBcCisgICAgQnNlc2kgPSBHRVQ2NEhJTE8oQnNhc2UsIEJzaXNvKTsgXAorICAgIEJzb3N1ID0gR0VUNjRISUxPKEJzaXNvLCBCc3VzYSk7IFwKKyAgICBFIyNzYXNlID0gWE9SMTI4KEJzYXNlLCBBTkRudTEyOChCc2VzaSwgQnNpc28pKTsgXAorICAgIFhPUmVxMTI4KENhZSwgRSMjc2FzZSk7IFwKKyAgICBFIyNzaXNvID0gWE9SMTI4KEJzaXNvLCBBTkRudTEyOChCc29zdSwgQnN1c2EpKTsgXAorICAgIFhPUmVxMTI4KENpbywgRSMjc2lzbyk7IFwKKyAgICBFIyNzdSA9IEdFVDY0TE9MTyhYT1IxMjgoQnN1c2EsIEFORG51MTI4KEJzYXNlLCBCc2VzaSkpLCBaZXJvKTsgXAorICAgIFhPUmVxMTI4KEN1YSwgRSMjc3UpOyBcCitcCisgICAgWmVybyA9IFpFUk8xMjgoKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKEN1YSwgWmVybykpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NExPTE8oWmVybywgQ2VpKSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIEdFVDY0SElISShDZWksIFplcm8pKTsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRMT0xPKFplcm8sIENvdSkpOyBcCisgICAgWE9SZXExMjgoQ3VhLCBHRVQ2NEhJSEkoQ291LCBaZXJvKSk7IFwKKworLyogIC0tLSBUaGV0YSBSaG8gUGkgQ2hpIElvdGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgYW5kIDEyOC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkKKworc3RhdGljIGNvbnN0IFVJTlQ2NCBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDgyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4YVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDhiVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4YVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwODhVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4OVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDNVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4MFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODBVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwOFVMTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3VhID0gWCMjYnU7IFwKKyAgICBYIyNnYWUgPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBMT0FENjQoc3RhdGVbIDldKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBMT0FEMTI4KHN0YXRlWzEwXSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IExPQUQxMjgoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IExPQUQxMjgoc3RhdGVbMTRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I4MzJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3VhID0gWCMjYnU7IFwKKyAgICBYIyNnYWUgPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMjYm9ndSA9IEdFVDY0TE9MTyhYIyNibywgWCMjZ3UpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2d1KTsgXAorICAgIFgjI2thZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWU7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUsIFgjI2thZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZSk7IFwKKyAgICBYIyNraW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FENjQoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBMT0FEMTI4KHN0YXRlWzE0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMja3VtYSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMja2FtZSA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoWCMja3VtYSwgWCMja2FtZSkpOyBcCisgICAgWCMjbWlvID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTAyNGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW87IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8sIFgjI2tpbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpbyk7IFwKKyAgICBYIyNrdW1hID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTRdKSwgTE9BRDEyOChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlOyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLCBYIyNiYWUpOyBcCisgICAgQ2FlID0gWCMjYmFlOyBcCisgICAgWCMjYmlvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2JpbzsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2JpbywgWCMjYmlvKTsgXAorICAgIENpbyA9IFgjI2JpbzsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1YSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWU7IFwKKyAgICBYIyNidWdhID0gR0VUNjRMT0xPKFgjI2J1LCBYIyNnYSk7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNiYWdlID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNnaW8gPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpbzsgXAorICAgIFgjI2JlZ2kgPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpbywgWCMjZ2lvKTsgXAorICAgIFgjI2JpZ28gPSBHRVQ2NExPTE8oWCMjYmksIFgjI2dvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlOyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLCBYIyNrYWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUpOyBcCisgICAgWCMja2lvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDEyOHUoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxNF0pLCBMT0FEMTI4KGlucHV0WzE0XSkpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2t1bWEpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMja2FtZSA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoWCMja3VtYSwgWCMja2FtZSkpOyBcCisgICAgWCMjbWlvID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTE1MmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW87IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8sIFgjI2tpbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpbyk7IFwKKyAgICBYIyNrdW1hID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTRdKSwgTE9BRDEyOChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE2XSksIExPQUQ2NChpbnB1dFsxNl0pKTsgXAorICAgIFgjI2thbWUgPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKFgjI2t1bWEsIFgjI2thbWUpKTsgXAorICAgIFgjI21pbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxN10pLCBMT0FENjQoaW5wdXRbMTddKSk7IFwKKyAgICBYIyNtaSA9IFgjI21pbzsgXAorICAgIFgjI2tlbWkgPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pbywgWCMjbWlvKTsgXAorICAgIFgjI2tpbW8gPSBHRVQ2NExPTE8oWCMja2ksIFgjI21vKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNrb211ID0gR0VUNjRMT0xPKFgjI2tvLCBYIyNtdSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjbXUpOyBcCisgICAgWCMjc2FzZSA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FzZSk7IFwKKyAgICBYIyNzaXNvID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaXNvKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEzNDRiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3VhID0gWCMjYnU7IFwKKyAgICBYIyNnYWUgPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMjYm9ndSA9IEdFVDY0TE9MTyhYIyNibywgWCMjZ3UpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2d1KTsgXAorICAgIFgjI2thZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWU7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUsIFgjI2thZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZSk7IFwKKyAgICBYIyNraW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzE0XSksIExPQUQxMjgoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMja3VtYSk7IFwKKyAgICBYIyNtZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNl0pLCBMT0FENjQoaW5wdXRbMTZdKSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbMTddKSwgTE9BRDEyOHUoaW5wdXRbMTddKSk7IFwKKyAgICBYIyNtaSA9IFgjI21pbzsgXAorICAgIFgjI2tlbWkgPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pbywgWCMjbWlvKTsgXAorICAgIFgjI2tpbW8gPSBHRVQ2NExPTE8oWCMja2ksIFgjI21vKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvKTsgXAorICAgIFgjI211ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE5XSksIExPQUQ2NChpbnB1dFsxOV0pKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMjBdKSwgTE9BRDY0KGlucHV0WzIwXSkpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlKFgsIHN0YXRlKSBcCisgICAgWCMjYmFlID0gTE9BRDEyOChzdGF0ZVsgMF0pOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBMT0FEMTI4KHN0YXRlWyAyXSk7IFwKKyAgICBYIyNiaSA9IFgjI2JpbzsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2JpbywgWCMjYmlvKTsgXAorICAgIENpbyA9IFgjI2JpbzsgXAorICAgIFgjI2J1ID0gTE9BRDY0KHN0YXRlWyA0XSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IExPQUQxMjh1KHN0YXRlWyA1XSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IExPQUQxMjh1KHN0YXRlWyA3XSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpbzsgXAorICAgIFgjI2JlZ2kgPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpbywgWCMjZ2lvKTsgXAorICAgIFgjI2JpZ28gPSBHRVQ2NExPTE8oWCMjYmksIFgjI2dvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvKTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gTE9BRDEyOChzdGF0ZVsxMF0pOyBcCisgICAgWCMja2EgPSBYIyNrYWU7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUsIFgjI2thZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZSk7IFwKKyAgICBYIyNraW8gPSBMT0FEMTI4KHN0YXRlWzEyXSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBMT0FEMTI4KHN0YXRlWzE0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMja3VtYSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMja2FtZSA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoWCMja3VtYSwgWCMja2FtZSkpOyBcCisgICAgWCMjbWlvID0gTE9BRDEyOHUoc3RhdGVbMTddKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIFNUT1JFNjQoc3RhdGVbIDBdLCBYIyNiYWdlKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDFdLCBYIyNiZWdpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDJdLCBYIyNiaWdvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDNdLCBYIyNib2d1KTsgXAorICAgIFNUT1JFMTI4KHN0YXRlWyA0XSwgWCMjYnVnYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA2XSwgQ09QWTY0SEkyTE8oWCMjYmFnZSkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgN10sIENPUFk2NEhJMkxPKFgjI2JlZ2kpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDhdLCBDT1BZNjRISTJMTyhYIyNiaWdvKSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA5XSwgQ09QWTY0SEkyTE8oWCMjYm9ndSkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMF0sIFgjI2thbWUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMV0sIFgjI2tlbWkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMl0sIFgjI2tpbW8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxM10sIFgjI2tvbXUpOyBcCisgICAgU1RPUkUxMjgoc3RhdGVbMTRdLCBYIyNrdW1hKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTZdLCBDT1BZNjRISTJMTyhYIyNrYW1lKSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE3XSwgQ09QWTY0SEkyTE8oWCMja2VtaSkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOF0sIENPUFk2NEhJMkxPKFgjI2tpbW8pKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTldLCBDT1BZNjRISTJMTyhYIyNrb211KSk7IFwKKyAgICBTVE9SRTEyOChzdGF0ZVsyMF0sIFgjI3Nhc2UpOyBcCisgICAgU1RPUkUxMjgoc3RhdGVbMjJdLCBYIyNzaXNvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjRdLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5U3RhdGVWYXJpYWJsZXMoWCwgWSkgXAorICAgIFgjI2JhZ2UgPSBZIyNiYWdlOyBcCisgICAgWCMjYmVnaSA9IFkjI2JlZ2k7IFwKKyAgICBYIyNiaWdvID0gWSMjYmlnbzsgXAorICAgIFgjI2JvZ3UgPSBZIyNib2d1OyBcCisgICAgWCMjYnVnYSA9IFkjI2J1Z2E7IFwKKyAgICBYIyNrYW1lID0gWSMja2FtZTsgXAorICAgIFgjI2tlbWkgPSBZIyNrZW1pOyBcCisgICAgWCMja2ltbyA9IFkjI2tpbW87IFwKKyAgICBYIyNrb211ID0gWSMja29tdTsgXAorICAgIFgjI2t1bWEgPSBZIyNrdW1hOyBcCisgICAgWCMjc2FzZSA9IFkjI3Nhc2U7IFwKKyAgICBYIyNzaXNvID0gWSMjc2lzbzsgXAorICAgIFgjI3N1ID0gWSMjc3U7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5jIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDA4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJLZWNjYWtOSVNUSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLWludGVyZmFjZS5oIgorCitzdGF0aWMgSGFzaFJldHVybiBJbml0KGhhc2hTdGF0ZSAqc3RhdGUsIGludCBoYXNoYml0bGVuKQoreworICAgIHN3aXRjaChoYXNoYml0bGVuKSB7CisgICAgICAgIGNhc2UgMDogLyogIERlZmF1bHQgcGFyYW1ldGVycywgYXJiaXRyYXJ5IGxlbmd0aCBvdXRwdXQgKi8KKyAgICAgICAgICAgIEluaXRTcG9uZ2UoKHNwb25nZVN0YXRlKilzdGF0ZSwgMTAyNCwgNTc2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDIyNDoKKyAgICAgICAgICAgIEluaXRTcG9uZ2UoKHNwb25nZVN0YXRlKilzdGF0ZSwgMTE1MiwgNDQ4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI1NjoKKyAgICAgICAgICAgIEluaXRTcG9uZ2UoKHNwb25nZVN0YXRlKilzdGF0ZSwgMTA4OCwgNTEyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM4NDoKKyAgICAgICAgICAgIEluaXRTcG9uZ2UoKHNwb25nZVN0YXRlKilzdGF0ZSwgODMyLCA3NjgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNTEyOgorICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCA1NzYsIDEwMjQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gQkFEX0hBU0hMRU47CisgICAgfQorICAgIHN0YXRlLT5maXhlZE91dHB1dExlbmd0aCA9IGhhc2hiaXRsZW47CisgICAgcmV0dXJuIFNVQ0NFU1M7Cit9CisKK3N0YXRpYyBIYXNoUmV0dXJuIFVwZGF0ZShoYXNoU3RhdGUgKnN0YXRlLCBjb25zdCBCaXRTZXF1ZW5jZSAqZGF0YSwgRGF0YUxlbmd0aCBkYXRhYml0bGVuKQoreworICAgIGlmICgoZGF0YWJpdGxlbiAlIDgpID09IDApCisgICAgICAgIHJldHVybiBBYnNvcmIoKHNwb25nZVN0YXRlKilzdGF0ZSwgZGF0YSwgZGF0YWJpdGxlbik7CisgICAgZWxzZSB7CisgICAgICAgIEhhc2hSZXR1cm4gcmV0ID0gQWJzb3JiKChzcG9uZ2VTdGF0ZSopc3RhdGUsIGRhdGEsIGRhdGFiaXRsZW4gLSAoZGF0YWJpdGxlbiAlIDgpKTsKKyAgICAgICAgaWYgKHJldCA9PSBTVUNDRVNTKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxhc3RCeXRlOyAKKyAgICAgICAgICAgIC8qICBBbGlnbiB0aGUgbGFzdCBwYXJ0aWFsIGJ5dGUgdG8gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgKi8KKyAgICAgICAgICAgIGxhc3RCeXRlID0gZGF0YVtkYXRhYml0bGVuLzhdID4+ICg4IC0gKGRhdGFiaXRsZW4gJSA4KSk7CisgICAgICAgICAgICByZXR1cm4gQWJzb3JiKChzcG9uZ2VTdGF0ZSopc3RhdGUsICZsYXN0Qnl0ZSwgZGF0YWJpdGxlbiAlIDgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorfQorCitzdGF0aWMgSGFzaFJldHVybiBGaW5hbChoYXNoU3RhdGUgKnN0YXRlLCBCaXRTZXF1ZW5jZSAqaGFzaHZhbCkKK3sKKyAgICByZXR1cm4gU3F1ZWV6ZShzdGF0ZSwgaGFzaHZhbCwgc3RhdGUtPmZpeGVkT3V0cHV0TGVuZ3RoKTsKK30KKworLyoKK3N0YXRpYyBIYXNoUmV0dXJuIEhhc2goaW50IGhhc2hiaXRsZW4sIGNvbnN0IEJpdFNlcXVlbmNlICpkYXRhLCBEYXRhTGVuZ3RoIGRhdGFiaXRsZW4sIEJpdFNlcXVlbmNlICpoYXNodmFsKQoreworICAgIGhhc2hTdGF0ZSBzdGF0ZTsKKyAgICBIYXNoUmV0dXJuIHJlc3VsdDsKKworICAgIGlmICgoaGFzaGJpdGxlbiAhPSAyMjQpICYmIChoYXNoYml0bGVuICE9IDI1NikgJiYgKGhhc2hiaXRsZW4gIT0gMzg0KSAmJiAoaGFzaGJpdGxlbiAhPSA1MTIpKQorICAgICAgICByZXR1cm4gQkFEX0hBU0hMRU47ICogIE9ubHkgdGhlIGZvdXIgZml4ZWQgb3V0cHV0IGxlbmd0aHMgYXZhaWxhYmxlIHRocm91Z2ggdGhpcyBBUEkgKgorICAgIHJlc3VsdCA9IEluaXQoJnN0YXRlLCBoYXNoYml0bGVuKTsKKyAgICBpZiAocmVzdWx0ICE9IFNVQ0NFU1MpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0ID0gVXBkYXRlKCZzdGF0ZSwgZGF0YSwgZGF0YWJpdGxlbik7CisgICAgaWYgKHJlc3VsdCAhPSBTVUNDRVNTKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdCA9IEZpbmFsKCZzdGF0ZSwgaGFzaHZhbCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyovCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha05JU1RJbnRlcmZhY2UuaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha05JU1RJbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDQ0MzFiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaWZuZGVmIF9LZWNjYWtOSVNUSW50ZXJmYWNlX2hfCisjZGVmaW5lIF9LZWNjYWtOSVNUSW50ZXJmYWNlX2hfCisKKyNpbmNsdWRlICJLZWNjYWtTcG9uZ2UuaCIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJpdFNlcXVlbmNlOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YUxlbmd0aDsKK3R5cGVkZWYgZW51bSB7IFNVQ0NFU1MgPSAwLCBGQUlMID0gMSwgQkFEX0hBU0hMRU4gPSAyIH0gSGFzaFJldHVybjsKKwordHlwZWRlZiBzcG9uZ2VTdGF0ZSBoYXNoU3RhdGU7CisKKy8qKgorICAqIEZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIHN0YXRlIG9mIHRoZSBLZWNjYWtbciwgY10gc3BvbmdlIGZ1bmN0aW9uLgorICAqIFRoZSByYXRlIHIgYW5kIGNhcGFjaXR5IGMgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGZyb20gQGEgaGFzaGJpdGxlbi4KKyAgKiBAcGFyYW0gIHN0YXRlICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXRlIG9mIHRoZSBzcG9uZ2UgZnVuY3Rpb24gdG8gYmUgaW5pdGlhbGl6ZWQuCisgICogQHBhcmFtICBoYXNoYml0bGVuICBUaGUgZGVzaXJlZCBudW1iZXIgb2Ygb3V0cHV0IGJpdHMsIAorICAqICAgICAgICAgICAgICAgICAgICAgb3IgMCBmb3IgS2VjY2FrW10gd2l0aCBkZWZhdWx0IHBhcmFtZXRlcnMKKyAgKiAgICAgICAgICAgICAgICAgICAgIGFuZCBhcmJpdHJhcmlseS1sb25nIG91dHB1dC4KKyAgKiBAcHJlICAgIFRoZSB2YWx1ZSBvZiBoYXNoYml0bGVuIG11c3QgYmUgb25lIG9mIDAsIDIyNCwgMjU2LCAzODQgYW5kIDUxMi4KKyAgKiBAcmV0dXJuIFNVQ0NFU1MgaWYgc3VjY2Vzc2Z1bCwgQkFEX0hBU0hMRU4gaWYgdGhlIHZhbHVlIG9mIGhhc2hiaXRsZW4gaXMgaW5jb3JyZWN0LgorICAqLworc3RhdGljIEhhc2hSZXR1cm4gSW5pdChoYXNoU3RhdGUgKnN0YXRlLCBpbnQgaGFzaGJpdGxlbik7CisvKioKKyAgKiBGdW5jdGlvbiB0byBnaXZlIGlucHV0IGRhdGEgZm9yIHRoZSBzcG9uZ2UgZnVuY3Rpb24gdG8gYWJzb3JiLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiBpbml0aWFsaXplZCBieSBJbml0KCkuCisgICogQHBhcmFtICBkYXRhICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhLiAKKyAgKiAgICAgICAgICAgICAgICAgICAgIFdoZW4gQGEgZGF0YWJpdExlbiBpcyBub3QgYSBtdWx0aXBsZSBvZiA4LCB0aGUgbGFzdCBiaXRzIG9mIGRhdGEgbXVzdCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgbGFzdCBieXRlLgorICAqIEBwYXJhbSAgZGF0YWJpdExlbiAgVGhlIG51bWJlciBvZiBpbnB1dCBiaXRzIHByb3ZpZGVkIGluIHRoZSBpbnB1dCBkYXRhLgorICAqIEBwcmUgICAgSW4gdGhlIHByZXZpb3VzIGNhbGwgdG8gQWJzb3JiKCksIGRhdGFiaXRMZW4gd2FzIGEgbXVsdGlwbGUgb2YgOC4KKyAgKiBAcmV0dXJuIFNVQ0NFU1MgaWYgc3VjY2Vzc2Z1bCwgRkFJTCBvdGhlcndpc2UuCisgICovCitzdGF0aWMgSGFzaFJldHVybiBVcGRhdGUoaGFzaFN0YXRlICpzdGF0ZSwgY29uc3QgQml0U2VxdWVuY2UgKmRhdGEsIERhdGFMZW5ndGggZGF0YWJpdGxlbik7CisvKioKKyAgKiBGdW5jdGlvbiB0byBzcXVlZXplIG91dHB1dCBkYXRhIGZyb20gdGhlIHNwb25nZSBmdW5jdGlvbi4KKyAgKiBJZiBAYSBoYXNoYml0bGVuIHdhcyBub3QgMCBpbiB0aGUgY2FsbCB0byBJbml0KCksIHRoZSBudW1iZXIgb2Ygb3V0cHV0IGJpdHMgaXMgZXF1YWwgdG8gQGEgaGFzaGJpdGxlbi4KKyAgKiBJZiBAYSBoYXNoYml0bGVuIHdhcyAwIGluIHRoZSBjYWxsIHRvIEluaXQoKSwgdGhlIG91dHB1dCBiaXRzIG11c3QgYmUgZXh0cmFjdGVkIHVzaW5nIHRoZSBTcXVlZXplKCkgZnVuY3Rpb24uCisgICogQHBhcmFtICBzdGF0ZSAgICAgICBQb2ludGVyIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3BvbmdlIGZ1bmN0aW9uIGluaXRpYWxpemVkIGJ5IEluaXQoKS4KKyAgKiBAcGFyYW0gIGhhc2h2YWwgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgb3V0cHV0IGRhdGEuCisgICogQHJldHVybiBTVUNDRVNTIGlmIHN1Y2Nlc3NmdWwsIEZBSUwgb3RoZXJ3aXNlLgorICAqLworc3RhdGljIEhhc2hSZXR1cm4gRmluYWwoaGFzaFN0YXRlICpzdGF0ZSwgQml0U2VxdWVuY2UgKmhhc2h2YWwpOworLyoqCisgICogRnVuY3Rpb24gdG8gY29tcHV0ZSBhIGhhc2ggdXNpbmcgdGhlIEtlY2Nha1tyLCBjXSBzcG9uZ2UgZnVuY3Rpb24uCisgICogVGhlIHJhdGUgciBhbmQgY2FwYWNpdHkgYyB2YWx1ZXMgYXJlIGRldGVybWluZWQgZnJvbSBAYSBoYXNoYml0bGVuLgorICAqIEBwYXJhbSAgaGFzaGJpdGxlbiAgVGhlIGRlc2lyZWQgbnVtYmVyIG9mIG91dHB1dCBiaXRzLgorICAqIEBwYXJhbSAgZGF0YSAgICAgICAgUG9pbnRlciB0byB0aGUgaW5wdXQgZGF0YS4gCisgICogICAgICAgICAgICAgICAgICAgICBXaGVuIEBhIGRhdGFiaXRMZW4gaXMgbm90IGEgbXVsdGlwbGUgb2YgOCwgdGhlIGxhc3QgYml0cyBvZiBkYXRhIG11c3QgYmUKKyAgKiAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGxhc3QgYnl0ZS4KKyAgKiBAcGFyYW0gIGRhdGFiaXRMZW4gIFRoZSBudW1iZXIgb2YgaW5wdXQgYml0cyBwcm92aWRlZCBpbiB0aGUgaW5wdXQgZGF0YS4KKyAgKiBAcGFyYW0gIGhhc2h2YWwgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aGVyZSB0byBzdG9yZSB0aGUgb3V0cHV0IGRhdGEuCisgICogQHByZSAgICBUaGUgdmFsdWUgb2YgaGFzaGJpdGxlbiBtdXN0IGJlIG9uZSBvZiAyMjQsIDI1NiwgMzg0IGFuZCA1MTIuCisgICogQHJldHVybiBTVUNDRVNTIGlmIHN1Y2Nlc3NmdWwsIEJBRF9IQVNITEVOIGlmIHRoZSB2YWx1ZSBvZiBoYXNoYml0bGVuIGlzIGluY29ycmVjdC4KKyAgKi8KKy8qCitzdGF0aWMgSGFzaFJldHVybiBIYXNoKGludCBoYXNoYml0bGVuLCBjb25zdCBCaXRTZXF1ZW5jZSAqZGF0YSwgRGF0YUxlbmd0aCBkYXRhYml0bGVuLCBCaXRTZXF1ZW5jZSAqaGFzaHZhbCk7CisqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha1Nwb25nZS5jIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhNmJmMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha1Nwb25nZS5jCkBAIC0wLDAgKzEsMjY2IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIktlY2Nha1Nwb25nZS5oIgorI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1pbnRlcmZhY2UuaCIKKyNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyNpbmNsdWRlICJkaXNwbGF5SW50ZXJtZWRpYXRlVmFsdWVzLmgiCisjZW5kaWYKKworc3RhdGljIGludCBJbml0U3BvbmdlKHNwb25nZVN0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBjYXBhY2l0eSkKK3sKKyAgICBpZiAocmF0ZStjYXBhY2l0eSAhPSAxNjAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoKHJhdGUgPD0gMCkgfHwgKHJhdGUgPj0gMTYwMCkgfHwgKChyYXRlICUgNjQpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICBLZWNjYWtJbml0aWFsaXplKCk7CisgICAgc3RhdGUtPnJhdGUgPSByYXRlOworICAgIHN0YXRlLT5jYXBhY2l0eSA9IGNhcGFjaXR5OworICAgIHN0YXRlLT5maXhlZE91dHB1dExlbmd0aCA9IDA7CisgICAgS2VjY2FrSW5pdGlhbGl6ZVN0YXRlKHN0YXRlLT5zdGF0ZSk7CisgICAgbWVtc2V0KHN0YXRlLT5kYXRhUXVldWUsIDAsIEtlY2Nha01heGltdW1SYXRlSW5CeXRlcyk7CisgICAgc3RhdGUtPmJpdHNJblF1ZXVlID0gMDsKKyAgICBzdGF0ZS0+c3F1ZWV6aW5nID0gMDsKKyAgICBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9IDA7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgQWJzb3JiUXVldWUoc3BvbmdlU3RhdGUgKnN0YXRlKQoreworICAgIC8qICBzdGF0ZS0+Yml0c0luUXVldWUgaXMgYXNzdW1lZCB0byBiZSBlcXVhbCB0byBzdGF0ZS0+cmF0ZSAqLworICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPnJhdGUvOCk7CisgICAgI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gNTc2KQorICAgICAgICBLZWNjYWtBYnNvcmI1NzZiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZSAKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0ODMyCisgICAgaWYgKHN0YXRlLT5yYXRlID09IDgzMikKKyAgICAgICAgS2VjY2FrQWJzb3JiODMyYml0cyhzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUpOworICAgIGVsc2UgCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTAyNCkKKyAgICAgICAgS2VjY2FrQWJzb3JiMTAyNGJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICBlbHNlIAorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CisgICAgaWYgKHN0YXRlLT5yYXRlID09IDEwODgpCisgICAgICAgIEtlY2Nha0Fic29yYjEwODhiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCisgICAgaWYgKHN0YXRlLT5yYXRlID09IDExNTIpCisgICAgICAgIEtlY2Nha0Fic29yYjExNTJiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZSAKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMzQ0KQorICAgICAgICBLZWNjYWtBYnNvcmIxMzQ0Yml0cyhzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUpOworICAgIGVsc2UgCisjZW5kaWYKKyAgICAgICAgS2VjY2FrQWJzb3JiKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPnJhdGUvNjQpOworICAgIHN0YXRlLT5iaXRzSW5RdWV1ZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgQWJzb3JiKHNwb25nZVN0YXRlICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiaXRsZW4pCit7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIGksIGosIHdob2xlQmxvY2tzOworICAgIHVuc2lnbmVkIGludCBwYXJ0aWFsQmxvY2ssIHBhcnRpYWxCeXRlOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1ckRhdGE7CisKKyAgICBpZiAoKHN0YXRlLT5iaXRzSW5RdWV1ZSAlIDgpICE9IDApCisgICAgICAgIHJldHVybiAxOyAvKiAgT25seSB0aGUgbGFzdCBjYWxsIG1heSBjb250YWluIGEgcGFydGlhbCBieXRlICovCisgICAgaWYgKHN0YXRlLT5zcXVlZXppbmcpCisgICAgICAgIHJldHVybiAxOyAvKiAgVG9vIGxhdGUgZm9yIGFkZGl0aW9uYWwgaW5wdXQgKi8KKworICAgIGkgPSAwOworICAgIHdoaWxlKGkgPCBkYXRhYml0bGVuKSB7CisgICAgICAgIGlmICgoc3RhdGUtPmJpdHNJblF1ZXVlID09IDApICYmIChkYXRhYml0bGVuID49IHN0YXRlLT5yYXRlKSAmJiAoaSA8PSAoZGF0YWJpdGxlbi1zdGF0ZS0+cmF0ZSkpKSB7CisgICAgICAgICAgICB3aG9sZUJsb2NrcyA9IChkYXRhYml0bGVuLWkpL3N0YXRlLT5yYXRlOworICAgICAgICAgICAgY3VyRGF0YSA9IGRhdGEraS84OworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gNTc2KSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz01NzYvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYjU3NmJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorICAgICAgICAgICAgaWYgKHN0YXRlLT5yYXRlID09IDgzMikgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9ODMyLzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmI4MzJiaXRzKHN0YXRlLT5zdGF0ZSwgY3VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTAyNCkgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9MTAyNC84KSB7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayB0byBiZSBhYnNvcmJlZCIsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzgpOworICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgS2VjY2FrQWJzb3JiMTAyNGJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwODgKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDg4KSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz0xMDg4LzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmIxMDg4Yml0cyhzdGF0ZS0+c3RhdGUsIGN1ckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTE1MgorICAgICAgICAgICAgaWYgKHN0YXRlLT5yYXRlID09IDExNTIpIHsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPHdob2xlQmxvY2tzOyBqKyssIGN1ckRhdGErPTExNTIvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYjExNTJiaXRzKHN0YXRlLT5zdGF0ZSwgY3VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTM0NCkgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9MTM0NC84KSB7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayB0byBiZSBhYnNvcmJlZCIsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzgpOworICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgS2VjY2FrQWJzb3JiMTM0NGJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPHdob2xlQmxvY2tzOyBqKyssIGN1ckRhdGErPXN0YXRlLT5yYXRlLzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmIoc3RhdGUtPnN0YXRlLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS82NCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaSArPSB3aG9sZUJsb2NrcypzdGF0ZS0+cmF0ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBhcnRpYWxCbG9jayA9ICh1bnNpZ25lZCBpbnQpKGRhdGFiaXRsZW4gLSBpKTsKKyAgICAgICAgICAgIGlmIChwYXJ0aWFsQmxvY2src3RhdGUtPmJpdHNJblF1ZXVlID4gc3RhdGUtPnJhdGUpCisgICAgICAgICAgICAgICAgcGFydGlhbEJsb2NrID0gc3RhdGUtPnJhdGUtc3RhdGUtPmJpdHNJblF1ZXVlOworICAgICAgICAgICAgcGFydGlhbEJ5dGUgPSBwYXJ0aWFsQmxvY2sgJSA4OworICAgICAgICAgICAgcGFydGlhbEJsb2NrIC09IHBhcnRpYWxCeXRlOworICAgICAgICAgICAgbWVtY3B5KHN0YXRlLT5kYXRhUXVldWUrc3RhdGUtPmJpdHNJblF1ZXVlLzgsIGRhdGEraS84LCBwYXJ0aWFsQmxvY2svOCk7CisgICAgICAgICAgICBzdGF0ZS0+Yml0c0luUXVldWUgKz0gcGFydGlhbEJsb2NrOworICAgICAgICAgICAgaSArPSBwYXJ0aWFsQmxvY2s7CisgICAgICAgICAgICBpZiAoc3RhdGUtPmJpdHNJblF1ZXVlID09IHN0YXRlLT5yYXRlKQorICAgICAgICAgICAgICAgIEFic29yYlF1ZXVlKHN0YXRlKTsKKyAgICAgICAgICAgIGlmIChwYXJ0aWFsQnl0ZSA+IDApIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG1hc2sgPSAoMSA8PCBwYXJ0aWFsQnl0ZSktMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+ZGF0YVF1ZXVlW3N0YXRlLT5iaXRzSW5RdWV1ZS84XSA9IGRhdGFbaS84XSAmIG1hc2s7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJpdHNJblF1ZXVlICs9IHBhcnRpYWxCeXRlOworICAgICAgICAgICAgICAgIGkgKz0gcGFydGlhbEJ5dGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIFBhZEFuZFN3aXRjaFRvU3F1ZWV6aW5nUGhhc2Uoc3BvbmdlU3RhdGUgKnN0YXRlKQoreworICAgIC8qICBOb3RlOiB0aGUgYml0cyBhcmUgbnVtYmVyZWQgZnJvbSAwPUxTQiB0byA3PU1TQiAqLworICAgIGlmIChzdGF0ZS0+Yml0c0luUXVldWUgKyAxID09IHN0YXRlLT5yYXRlKSB7CisgICAgICAgIHN0YXRlLT5kYXRhUXVldWVbc3RhdGUtPmJpdHNJblF1ZXVlLzggXSB8PSAxIDw8IChzdGF0ZS0+Yml0c0luUXVldWUgJSA4KTsKKyAgICAgICAgQWJzb3JiUXVldWUoc3RhdGUpOworICAgICAgICBtZW1zZXQoc3RhdGUtPmRhdGFRdWV1ZSwgMCwgc3RhdGUtPnJhdGUvOCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtZW1zZXQoc3RhdGUtPmRhdGFRdWV1ZSArIChzdGF0ZS0+Yml0c0luUXVldWUrNykvOCwgMCwgc3RhdGUtPnJhdGUvOCAtIChzdGF0ZS0+Yml0c0luUXVldWUrNykvOCk7CisgICAgICAgIHN0YXRlLT5kYXRhUXVldWVbc3RhdGUtPmJpdHNJblF1ZXVlLzggXSB8PSAxIDw8IChzdGF0ZS0+Yml0c0luUXVldWUgJSA4KTsKKyAgICB9CisgICAgc3RhdGUtPmRhdGFRdWV1ZVsoc3RhdGUtPnJhdGUtMSkvOF0gfD0gMSA8PCAoKHN0YXRlLT5yYXRlLTEpICUgOCk7CisgICAgQWJzb3JiUXVldWUoc3RhdGUpOworCisgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgIGRpc3BsYXlUZXh0KDEsICItLS0gU3dpdGNoaW5nIHRvIHNxdWVlemluZyBwaGFzZSAtLS0iKTsKKyAgICAjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTAyNCkgeworICAgICAgICBLZWNjYWtFeHRyYWN0MTAyNGJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICAgICAgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgPSAxMDI0OworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIEtlY2Nha0V4dHJhY3Qoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlLCBzdGF0ZS0+cmF0ZS82NCk7CisgICAgICAgIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nID0gc3RhdGUtPnJhdGU7CisgICAgfQorICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIGF2YWlsYWJsZSBmb3Igc3F1ZWV6aW5nIiwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcvOCk7CisgICAgI2VuZGlmCisgICAgc3RhdGUtPnNxdWVlemluZyA9IDE7Cit9CisKK3N0YXRpYyBpbnQgU3F1ZWV6ZShzcG9uZ2VTdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgdW5zaWduZWQgbG9uZyBsb25nIG91dHB1dExlbmd0aCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaTsKKyAgICB1bnNpZ25lZCBpbnQgcGFydGlhbEJsb2NrOworCisgICAgaWYgKCFzdGF0ZS0+c3F1ZWV6aW5nKQorICAgICAgICBQYWRBbmRTd2l0Y2hUb1NxdWVlemluZ1BoYXNlKHN0YXRlKTsKKyAgICBpZiAoKG91dHB1dExlbmd0aCAlIDgpICE9IDApCisgICAgICAgIHJldHVybiAxOyAvKiAgT25seSBtdWx0aXBsZSBvZiA4IGJpdHMgYXJlIGFsbG93ZWQsIHRydW5jYXRpb24gY2FuIGJlIGRvbmUgYXQgdXNlciBsZXZlbCAqLworCisgICAgaSA9IDA7CisgICAgd2hpbGUoaSA8IG91dHB1dExlbmd0aCkgeworICAgICAgICBpZiAoc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgPT0gMCkgeworICAgICAgICAgICAgS2VjY2FrUGVybXV0YXRpb24oc3RhdGUtPnN0YXRlKTsKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDI0KSB7CisgICAgICAgICAgICAgICAgS2VjY2FrRXh0cmFjdDEwMjRiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgPSAxMDI0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgS2VjY2FrRXh0cmFjdChzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUsIHN0YXRlLT5yYXRlLzY0KTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9IHN0YXRlLT5yYXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayBhdmFpbGFibGUgZm9yIHNxdWVlemluZyIsIHN0YXRlLT5kYXRhUXVldWUsIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nLzgpOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgcGFydGlhbEJsb2NrID0gc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmc7CisgICAgICAgIGlmICgodW5zaWduZWQgbG9uZyBsb25nKXBhcnRpYWxCbG9jayA+IG91dHB1dExlbmd0aCAtIGkpCisgICAgICAgICAgICBwYXJ0aWFsQmxvY2sgPSAodW5zaWduZWQgaW50KShvdXRwdXRMZW5ndGggLSBpKTsKKyAgICAgICAgbWVtY3B5KG91dHB1dCtpLzgsIHN0YXRlLT5kYXRhUXVldWUrKHN0YXRlLT5yYXRlLXN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nKS84LCBwYXJ0aWFsQmxvY2svOCk7CisgICAgICAgIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nIC09IHBhcnRpYWxCbG9jazsKKyAgICAgICAgaSArPSBwYXJ0aWFsQmxvY2s7CisgICAgfQorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmggYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtTcG9uZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTQ1Y2FjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpZm5kZWYgX0tlY2Nha1Nwb25nZV9oXworI2RlZmluZSBfS2VjY2FrU3BvbmdlX2hfCisKKyNkZWZpbmUgS2VjY2FrUGVybXV0YXRpb25TaXplIDE2MDAKKyNkZWZpbmUgS2VjY2FrUGVybXV0YXRpb25TaXplSW5CeXRlcyAoS2VjY2FrUGVybXV0YXRpb25TaXplLzgpCisjZGVmaW5lIEtlY2Nha01heGltdW1SYXRlIDE1MzYKKyNkZWZpbmUgS2VjY2FrTWF4aW11bVJhdGVJbkJ5dGVzIChLZWNjYWtNYXhpbXVtUmF0ZS84KQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUgQUxJR04gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSkKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIEFMSUdOIF9fZGVjbHNwZWMoYWxpZ24oMzIpKQorI2Vsc2UKKyNkZWZpbmUgQUxJR04KKyNlbmRpZgorCitBTElHTiB0eXBlZGVmIHN0cnVjdCBzcG9uZ2VTdGF0ZVN0cnVjdCB7CisgICAgQUxJR04gdW5zaWduZWQgY2hhciBzdGF0ZVtLZWNjYWtQZXJtdXRhdGlvblNpemVJbkJ5dGVzXTsKKyAgICBBTElHTiB1bnNpZ25lZCBjaGFyIGRhdGFRdWV1ZVtLZWNjYWtNYXhpbXVtUmF0ZUluQnl0ZXNdOworICAgIHVuc2lnbmVkIGludCByYXRlOworICAgIHVuc2lnbmVkIGludCBjYXBhY2l0eTsKKyAgICB1bnNpZ25lZCBpbnQgYml0c0luUXVldWU7CisgICAgdW5zaWduZWQgaW50IGZpeGVkT3V0cHV0TGVuZ3RoOworICAgIGludCBzcXVlZXppbmc7CisgICAgdW5zaWduZWQgaW50IGJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmc7Cit9IHNwb25nZVN0YXRlOworCisvKioKKyAgKiBGdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBzdGF0ZSBvZiB0aGUgS2VjY2FrW3IsIGNdIHNwb25nZSBmdW5jdGlvbi4KKyAgKiBUaGUgc3BvbmdlIGZ1bmN0aW9uIGlzIHNldCB0byB0aGUgYWJzb3JiaW5nIHBoYXNlLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiB0byBiZSBpbml0aWFsaXplZC4KKyAgKiBAcGFyYW0gIHJhdGUgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgcmF0ZSByLgorICAqIEBwYXJhbSAgY2FwYWNpdHkgICAgVGhlIHZhbHVlIG9mIHRoZSBjYXBhY2l0eSBjLgorICAqIEBwcmUgICAgT25lIG11c3QgaGF2ZSByK2M9MTYwMCBhbmQgdGhlIHJhdGUgYSBtdWx0aXBsZSBvZiA2NCBiaXRzIGluIHRoaXMgaW1wbGVtZW50YXRpb24uCisgICogQHJldHVybiBaZXJvIGlmIHN1Y2Nlc3NmdWwsIDEgb3RoZXJ3aXNlLgorICAqLworc3RhdGljIGludCBJbml0U3BvbmdlKHNwb25nZVN0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBjYXBhY2l0eSk7CisvKioKKyAgKiBGdW5jdGlvbiB0byBnaXZlIGlucHV0IGRhdGEgZm9yIHRoZSBzcG9uZ2UgZnVuY3Rpb24gdG8gYWJzb3JiLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiBpbml0aWFsaXplZCBieSBJbml0U3BvbmdlKCkuCisgICogQHBhcmFtICBkYXRhICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhLiAKKyAgKiAgICAgICAgICAgICAgICAgICAgIFdoZW4gQGEgZGF0YWJpdExlbiBpcyBub3QgYSBtdWx0aXBsZSBvZiA4LCB0aGUgbGFzdCBiaXRzIG9mIGRhdGEgbXVzdCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGxhc3QgYnl0ZS4KKyAgKiBAcGFyYW0gIGRhdGFiaXRMZW4gIFRoZSBudW1iZXIgb2YgaW5wdXQgYml0cyBwcm92aWRlZCBpbiB0aGUgaW5wdXQgZGF0YS4KKyAgKiBAcHJlICAgIEluIHRoZSBwcmV2aW91cyBjYWxsIHRvIEFic29yYigpLCBkYXRhYml0TGVuIHdhcyBhIG11bHRpcGxlIG9mIDguCisgICogQHByZSAgICBUaGUgc3BvbmdlIGZ1bmN0aW9uIG11c3QgYmUgaW4gdGhlIGFic29yYmluZyBwaGFzZSwKKyAgKiAgICAgICAgIGkuZS4sIFNxdWVlemUoKSBtdXN0IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZS4KKyAgKiBAcmV0dXJuIFplcm8gaWYgc3VjY2Vzc2Z1bCwgMSBvdGhlcndpc2UuCisgICovCitzdGF0aWMgaW50IEFic29yYihzcG9uZ2VTdGF0ZSAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYml0bGVuKTsKKy8qKgorICAqIEZ1bmN0aW9uIHRvIHNxdWVlemUgb3V0cHV0IGRhdGEgZnJvbSB0aGUgc3BvbmdlIGZ1bmN0aW9uLgorICAqIElmIHRoZSBzcG9uZ2UgZnVuY3Rpb24gd2FzIGluIHRoZSBhYnNvcmJpbmcgcGhhc2UsIHRoaXMgZnVuY3Rpb24gCisgICogc3dpdGNoZXMgaXQgdG8gdGhlIHNxdWVlemluZyBwaGFzZS4KKyAgKiBAcGFyYW0gIHN0YXRlICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXRlIG9mIHRoZSBzcG9uZ2UgZnVuY3Rpb24gaW5pdGlhbGl6ZWQgYnkgSW5pdFNwb25nZSgpLgorICAqIEBwYXJhbSAgb3V0cHV0ICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSBvdXRwdXQgZGF0YS4KKyAgKiBAcGFyYW0gIG91dHB1dExlbmd0aCAgICBUaGUgbnVtYmVyIG9mIG91dHB1dCBiaXRzIGRlc2lyZWQuCisgICogICAgICAgICAgICAgICAgICAgICBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC4KKyAgKiBAcmV0dXJuIFplcm8gaWYgc3VjY2Vzc2Z1bCwgMSBvdGhlcndpc2UuCisgICovCitzdGF0aWMgaW50IFNxdWVlemUoc3BvbmdlU3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvdXRwdXRMZW5ndGgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL2JyZ19lbmRpYW4uaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL2JyZ19lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjI2ZWIzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvYnJnX2VuZGlhbi5oCkBAIC0wLDAgKzEsMTQyIEBACisvKgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENvcHlyaWdodCAoYykgMTk5OC0yMDA4LCBCcmlhbiBHbGFkbWFuLCBXb3JjZXN0ZXIsIFVLLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgTElDRU5TRSBURVJNUworCisgVGhlIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSAod2l0aCBvciB3aXRob3V0IGNoYW5nZXMpCisgaXMgYWxsb3dlZCB3aXRob3V0IHRoZSBwYXltZW50IG9mIGZlZXMgb3Igcm95YWx0aWVzIHByb3ZpZGVkIHRoYXQ6CisKKyAgMS4gc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucyBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyOworCisgIDIuIGJpbmFyeSBkaXN0cmlidXRpb25zIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlaXIgZG9jdW1lbnRhdGlvbjsKKworICAzLiB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBpcyBub3QgdXNlZCB0byBlbmRvcnNlIHByb2R1Y3RzCisgICAgIGJ1aWx0IHVzaW5nIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyB3cml0dGVuIHBlcm1pc3Npb24uCisKKyBESVNDTEFJTUVSCisKKyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcyBpcycgd2l0aCBubyBleHBsaWNpdCBvciBpbXBsaWVkIHdhcnJhbnRpZXMKKyBpbiByZXNwZWN0IG9mIGl0cyBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgY29ycmVjdG5lc3MKKyBhbmQvb3IgZml0bmVzcyBmb3IgcHVycG9zZS4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJc3N1ZSBEYXRlOiAyMC8xMi8yMDA3CisgQ2hhbmdlcyBmb3IgQVJNIDkvOS8yMDEwCisqLworCisjaWZuZGVmIF9CUkdfRU5ESUFOX0gKKyNkZWZpbmUgX0JSR19FTkRJQU5fSAorCisjZGVmaW5lIElTX0JJR19FTkRJQU4gICAgICA0MzIxIC8qIGJ5dGUgMCBpcyBtb3N0IHNpZ25pZmljYW50IChtYzY4aykgKi8KKyNkZWZpbmUgSVNfTElUVExFX0VORElBTiAgIDEyMzQgLyogYnl0ZSAwIGlzIGxlYXN0IHNpZ25pZmljYW50IChpMzg2KSAqLworCisjaWYgMAorLyogSW5jbHVkZSBmaWxlcyB3aGVyZSBlbmRpYW4gZGVmaW5lcyBhbmQgYnl0ZXN3YXAgZnVuY3Rpb25zIG1heSByZXNpZGUgKi8KKyNpZiBkZWZpbmVkKCBfX3N1biApCisjICBpbmNsdWRlIDxzeXMvaXNhX2RlZnMuaD4KKyNlbGlmIGRlZmluZWQoIF9fRnJlZUJTRF9fICkgfHwgZGVmaW5lZCggX19PcGVuQlNEX18gKSB8fCBkZWZpbmVkKCBfX05ldEJTRF9fICkKKyMgIGluY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoIEJTRCApICYmICggQlNEID49IDE5OTEwMyApIHx8IGRlZmluZWQoIF9fQVBQTEVfXyApIHx8IFwKKyAgICAgIGRlZmluZWQoIF9fQ1lHV0lOMzJfXyApIHx8IGRlZmluZWQoIF9fREpHUFBfXyApIHx8IGRlZmluZWQoIF9fb3NmX18gKQorIyAgaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoIF9fbGludXhfXyApIHx8IGRlZmluZWQoIF9fR05VQ19fICkgfHwgZGVmaW5lZCggX19HTlVfTElCUkFSWV9fICkKKyMgIGlmICFkZWZpbmVkKCBfX01JTkdXMzJfXyApICYmICFkZWZpbmVkKCBfQUlYICkKKyMgICAgaW5jbHVkZSA8ZW5kaWFuLmg+CisjICAgIGlmICFkZWZpbmVkKCBfX0JFT1NfXyApCisjICAgICAgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKiBOb3cgYXR0ZW1wdCB0byBzZXQgdGhlIGRlZmluZSBmb3IgcGxhdGZvcm0gYnl0ZSBvcmRlciB1c2luZyBhbnkgICovCisvKiBvZiB0aGUgZm91ciBmb3JtcyBTWU1CT0wsIF9TWU1CT0wsIF9fU1lNQk9MICYgX19TWU1CT0xfXywgd2hpY2ggICovCisvKiBzZWVtIHRvIGVuY29tcGFzcyBtb3N0IGVuZGlhbiBzeW1ib2wgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICovCisKKyNpZiBkZWZpbmVkKCBCSUdfRU5ESUFOICkgJiYgZGVmaW5lZCggTElUVExFX0VORElBTiApCisjICBpZiBkZWZpbmVkKCBCWVRFX09SREVSICkgJiYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyMgIGVsaWYgZGVmaW5lZCggQllURV9PUkRFUiApICYmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZCggQklHX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxpZiBkZWZpbmVkKCBMSVRUTEVfRU5ESUFOICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCggX0JJR19FTkRJQU4gKSAmJiBkZWZpbmVkKCBfTElUVExFX0VORElBTiApCisjICBpZiBkZWZpbmVkKCBfQllURV9PUkRFUiApICYmIF9CWVRFX09SREVSID09IF9CSUdfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyMgIGVsaWYgZGVmaW5lZCggX0JZVEVfT1JERVIgKSAmJiBfQllURV9PUkRFUiA9PSBfTElUVExFX0VORElBTgorIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZCggX0JJR19FTkRJQU4gKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorI2VsaWYgZGVmaW5lZCggX0xJVFRMRV9FTkRJQU4gKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKCBfX0JJR19FTkRJQU4gKSAmJiBkZWZpbmVkKCBfX0xJVFRMRV9FTkRJQU4gKQorIyAgaWYgZGVmaW5lZCggX19CWVRFX09SREVSICkgJiYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjICBlbGlmIGRlZmluZWQoIF9fQllURV9PUkRFUiApICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoIF9fQklHX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxpZiBkZWZpbmVkKCBfX0xJVFRMRV9FTkRJQU4gKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKCBfX0JJR19FTkRJQU5fXyApICYmIGRlZmluZWQoIF9fTElUVExFX0VORElBTl9fICkKKyMgIGlmIGRlZmluZWQoIF9fQllURV9PUkRFUl9fICkgJiYgX19CWVRFX09SREVSX18gPT0gX19CSUdfRU5ESUFOX18KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorIyAgZWxpZiBkZWZpbmVkKCBfX0JZVEVfT1JERVJfXyApICYmIF9fQllURV9PUkRFUl9fID09IF9fTElUVExFX0VORElBTl9fCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKCBfX0JJR19FTkRJQU5fXyApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxpZiBkZWZpbmVkKCBfX0xJVFRMRV9FTkRJQU5fXyApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworLyogIGlmIHRoZSBwbGF0Zm9ybSBieXRlIG9yZGVyIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLCB0aGVuIHRyeSB0byAqLworLyogIHNldCB0aGlzIGRlZmluZSB1c2luZyBjb21tb24gbWFjaGluZSBkZWZpbmVzICAgICAgICAgICAgICAgICAgICAqLworI2lmICFkZWZpbmVkKFBMQVRGT1JNX0JZVEVfT1JERVIpCisKKyNpZiAgIGRlZmluZWQoIF9fYWxwaGFfXyApIHx8IGRlZmluZWQoIF9fYWxwaGEgKSB8fCBkZWZpbmVkKCBpMzg2ICkgICAgICAgfHwgXAorICAgICAgZGVmaW5lZCggX19pMzg2X18gKSAgfHwgZGVmaW5lZCggX01fSTg2ICkgIHx8IGRlZmluZWQoIF9NX0lYODYgKSAgICB8fCBcCisgICAgICBkZWZpbmVkKCBfX09TMl9fICkgICB8fCBkZWZpbmVkKCBzdW4zODYgKSAgfHwgZGVmaW5lZCggX19UVVJCT0NfXyApIHx8IFwKKyAgICAgIGRlZmluZWQoIHZheCApICAgICAgIHx8IGRlZmluZWQoIHZtcyApICAgICB8fCBkZWZpbmVkKCBWTVMgKSAgICAgICAgfHwgXAorICAgICAgZGVmaW5lZCggX19WTVMgKSAgICAgfHwgZGVmaW5lZCggX01fWDY0ICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKworI2VsaWYgZGVmaW5lZCggQU1JR0EgKSAgIHx8IGRlZmluZWQoIGFwcGxlYyApICAgIHx8IGRlZmluZWQoIF9fQVM0MDBfXyApICB8fCBcCisgICAgICBkZWZpbmVkKCBfQ1JBWSApICAgfHwgZGVmaW5lZCggX19ocHBhICkgICAgfHwgZGVmaW5lZCggX19ocDkwMDAgKSAgIHx8IFwKKyAgICAgIGRlZmluZWQoIGlibTM3MCApICB8fCBkZWZpbmVkKCBtYzY4MDAwICkgICB8fCBkZWZpbmVkKCBtNjhrICkgICAgICAgfHwgXAorICAgICAgZGVmaW5lZCggX19NUkNfXyApIHx8IGRlZmluZWQoIF9fTVZTX18gKSAgIHx8IGRlZmluZWQoIF9fTVdFUktTX18gKSB8fCBcCisgICAgICBkZWZpbmVkKCBzcGFyYyApICAgfHwgZGVmaW5lZCggX19zcGFyYykgICAgfHwgZGVmaW5lZCggU1lNQU5URUNfQyApIHx8IFwKKyAgICAgIGRlZmluZWQoIF9fVk9TX18gKSB8fCBkZWZpbmVkKCBfX1RJR0NDX18gKSB8fCBkZWZpbmVkKCBfX1RBTkRFTSApICAgfHwgXAorICAgICAgZGVmaW5lZCggVEhJTktfQyApIHx8IGRlZmluZWQoIF9fVk1DTVNfXyApIHx8IGRlZmluZWQoIF9BSVggKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorCisjZWxpZiBkZWZpbmVkKF9fYXJtX18pCisjIGlmZGVmIF9fQklHX0VORElBTgorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorIyBlbHNlCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjIGVuZGlmCisjZWxpZiAxICAgICAvKiAqKioqIEVESVQgSEVSRSBJRiBORUNFU1NBUlkgKioqKiAqLworIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VsaWYgMCAgICAgLyogKioqKiBFRElUIEhFUkUgSUYgTkVDRVNTQVJZICoqKiogKi8KKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyNlbHNlCisjICBlcnJvciBQbGVhc2UgZWRpdCBsaW5lcyAxMzIgb3IgMTM0IGluIGJyZ19lbmRpYW4uaCB0byBzZXQgdGhlIHBsYXRmb3JtIGJ5dGUgb3JkZXIKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9hLm91dCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL2NyeXB0b19oYXNoLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Eub3V0CnJlbmFtZSB0byBNb2R1bGVzL19zaGEzL2tlY2Nhay9jcnlwdG9faGFzaC5oCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL3NoYTNtb2R1bGUuYyBiL01vZHVsZXMvX3NoYTMvc2hhM21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTI3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL3NoYTNtb2R1bGUuYwpAQCAtMCwwICsxLDU5MyBAQAorLyogU0hBMyBtb2R1bGUKKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIFNIQTMgYWxnb3JpdGhtCisgKgorICogU2VlIGJlbG93IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgY29kZSB0aGlzIG1vZHVsZSB3YXMKKyAqIGJhc2VkIHVwb24uIEFkZGl0aW9uYWwgd29yayBwZXJmb3JtZWQgYnk6CisgKgorICogIEFuZHJldyBLdWNobGluZyAoYW1rQGFtay5jYSkKKyAqICBHcmVnIFN0ZWluIChnc3RlaW5AbHlyYS5vcmcpCisgKiAgVHJldm9yIFBlcnJpbiAodHJldnBAdHJldnAubmV0KQorICogIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyICAgQ2hyaXN0aWFuIEhlaW1lcyAoY2hyaXN0aWFuQHB5dGhvbi5vcmcpCisgKiAgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorICoKKyAqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAiLi4vaGFzaGxpYi5oIgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIQS0zIChLZWNjYWspCisgKgorICogVGhlIGNvZGUgaXMgYmFzZWQgb24gS2VjY2FrUmVmZXJlbmNlQW5kT3B0aW1pemVkLTMuMi56aXAgZnJvbSAyOSBNYXkgMjAxMi4KKyAqCisgKiBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIGFsdGVyZWQgaW4gdGhpcyBwb2ludHM6CisgKiAgLSBDKysgY29tbWVudHMgYXJlIGNvbnZlcnRlZCB0byBBTlNJIEMgY29tbWVudHMuCisgKiAgLSBBbGwgZnVuY3Rpb25zIGFuZCBnbG9iYWxzIGFyZSBkZWNsYXJlZCBzdGF0aWMuCisgKiAgLSBUaGUgdHlwZWRlZiBmb3IgVUlOVDY0IGlzIGNvbW1lbnRlZCBvdXQuCisgKiAgLSBLZWNjYWtGLTE2MDAtb3B0WzMyfDY0XS1zZXR0aW5ncy5oIGFyZSBjb21tZW50ZWQgb3V0CisgKiAgLSBTb21lIHVudXNlZCBmdW5jdGlvbnMgYXJlIGNvbW1lbnRlZCBvdXQgdG8gc2lsZW5jZSBjb21waWxlciB3YXJuaW5ncy4KKyAqCisgKiBJbiBvcmRlciB0byBhdm9pZCBuYW1lIGNsYXNoZXMgd2l0aCBvdGhlciBzb2Z0d2FyZSBJIGhhdmUgdG8gZGVjbGFyZSBhbGwKKyAqIEtlY2NhayBmdW5jdGlvbnMgYW5kIGdsb2JhbCBkYXRhIGFzIHN0YXRpYy4gVGhlIEMgY29kZSBpcyBkaXJlY3RseQorICogaW5jbHVkZWQgaW50byB0aGlzIGZpbGUgaW4gb3JkZXIgdG8gYWNjZXNzIHRoZSBzdGF0aWMgZnVuY3Rpb25zLgorICoKKyAqIEtlY2NhayBjYW4gYmUgdHVuZWQgd2l0aCBzZXZlcmFsIHBhcmFtZW50ZXJzLiBJIHRyeSB0byBleHBsYWluIGFsbCBvcHRpb25zCisgKiBhcyBmYXIgYXMgSSB1bmRlcnN0YW5kIHRoZW0uIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYWxzbyBjb250YWlucworICogYXNzZW1ibGVyIGNvZGUgZm9yIEFSTSBwbGF0Zm9ybXMgKE5FT04gaW5zdHJ1Y3Rpb25zKS4KKyAqCisgKiBDb21tb24KKyAqID09PT09PQorICoKKyAqIE9wdGlvbnM6CisgKiAgIFVzZUJlYmlnb2tpbWlzYSwgVW5yb2xsaW5nCisgKgorICogLSBVbnJvbGxpbmc6IGxvb3AgdW5yb2xsaW5nICgyNCwgMTIsIDgsIDYsIDQsIDMsIDIsIDEpCisgKiAtIFVzZUJlYmlnb2tpbWlzYTogbGFuZSBjb21wbGVtZW50aW5nCisgKgorICogNjRiaXQgcGxhdGZvcm1zCisgKiA9PT09PT09PT09PT09PT0KKyAqCisgKiBBZGRpdGlvbmFsIG9wdGlvbnM6CisgKiAgIFVzZVNTRSwgVXNlT25seVNJTUQ2NCwgVXNlTU1YLCBVc2VYT1AsIFVzZVNITEQKKyAqCisgKiBPcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zIChkaXNhYmxlZCBieSBkZWZhdWx0KToKKyAqICAgLSBVc2VTU0U6IHVzZSBTdHJlYW0gU0lNRCBleHRlbnNpb25zCisgKiAgICAgbyBVc2VPbmx5U0lNRDY0OiBsaW1pdCB0byA2NGJpdCBpbnN0cnVjdGlvbnMsIG90aGVyd2lzZSAxMjhiaXQKKyAqICAgICBvIHcvbyBVc2VPbmx5U0lNRDY0OiByZXF1aXJlcyBjb21waWxlciBhZ3VtZW50IC1tc3NzZTMgb3IgLW10dW5lCisgKiAgIC0gVXNlTU1YOiB1c2UgNjRiaXQgTU1YIGluc3RydWN0aW9ucworICogICAtIFVzZVhPUDogdXNlIEFNRCdzIGVYdGVuZGVkIE9wZXJhdGlvbnMgKDEyOGJpdCBTU0UgZXh0ZW5zaW9uKQorICoKKyAqIE90aGVyOgorICogICAtIFVucm9sbGluZzogZGVmYXVsdCAyNAorICogICAtIFVzZUJlYmlnb2tpbWlzYTogZGVmYXVsdCAxCisgKgorICogV2hlbiBuZWl0aGVyIFVzZVNTRSwgVXNlTU1YIG5vciBVc2VYT1AgaXMgY29uZmlndXJlZCwgUk9MNjQgKHJvdGF0ZSBsZWZ0CisgKiA2NCkgaXMgaW1wbGVtZW50ZWQgYXM6CisgKiAgIC0gV2luZG93czogX3JvdGw2NCgpCisgKiAgIC0gVXNlU0hMRDogdXNlIHNobGQgKHNoaWZ0IGxlZnQpIGFzbSBvcHRpbWl6YXRpb24KKyAqICAgLSBvdGhlcndpc2U6IHNoaWZ0IGFuZCB4b3IKKyAqCisgKiBVc2VCZWJpZ29raW1pc2EgY2FuJ3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFVzZVNTRSwgVXNlTU1YIG9yCisgKiBVc2VYT1AuIFVzZU9ubHlTSU1ENjQgaGFzIG5vIGVmZmVjdCB1bmxlc3MgVXNlU1NFIGlzIHNwZWNpZmllZC4KKyAqCisgKiBUZXN0cyBoYXZlIHNob3duIHRoYXQgVXNlU1NFICsgVXNlT25seVNJTUQ2NCBpcyBhYm91dCB0aHJlZSB0byBmb3VyCisgKiB0aW1lcyBTTE9XRVIgdGhhbiBVc2VCZWJpZ29raW1pc2EuIFVzZVNTRSBhbmQgVXNlTU1YIGFyZSBhYm91dCB0d28gdGltZXMKKyAqIHNsb3dlci4gKHRlc3RlZCBieSBDSCBhbmQgQVApCisgKgorICogMzJiaXQgcGxhdGZvcm1zCisgKiA9PT09PT09PT09PT09PT0KKyAqCisgKiBBZGRpdGlvbmFsIG9wdGlvbnM6CisgKiAgIFVzZUludGVybGVhdmVUYWJsZXMsIFVzZVNjaGVkdWxlCisgKgorICogICAtIFVucm9sbGluZzogZGVmYXVsdCAyCisgKiAgIC0gVXNlQmViaWdva2ltaXNhOiBkZWZhdWx0IG4vYQorICogICAtIFVzZVNjaGVkdWxlOiA/Pz8sICgxLCAyLCAzOyBkZWZhdWx0IDMpCisgKiAgIC0gVXNlSW50ZXJsZWF2ZVRhYmxlczogdXNlIHR3byA2NGsgbG9va3VwIHRhYmxlcyBmb3IgKGRlKWludGVybGVhdmluZworICogICAgIGRlZmF1bHQ6IG4vYQorICoKKyAqIHNjaGVkdWxlczoKKyAqICAgLSAzOiBubyBVc2VCZWJpZ29raW1pc2EsIFVucm9sbGluZyBtdXN0IGJlIDIKKyAqICAgLSAyICsgMTogPz8/CisgKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIF9fc3BhcmMKKyAgLyogb3B0NjQgdXNlcyB1bi1hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgdGhhdCBjYXVzZXMgYSBCVVMgZXJyb3Igd2l0aCBtc2cKKyAgICogJ2ludmFsaWQgYWRkcmVzcyBhbGlnbm1lbnQnIG9uIFNQQVJDLiAqLworICAjZGVmaW5lIEtlY2Nha09wdCAzMgorI2VsaWYgU0laRU9GX1ZPSURfUCA9PSA4ICYmIGRlZmluZWQoUFlfVUlOVDY0X1QpCisgIC8qIG9wdDY0IHdvcmtzIG9ubHkgZm9yIDY0Yml0IHBsYXRmb3JtcyB3aXRoIHVuc2lnbmVkIGludDY0ICovCisgICNkZWZpbmUgS2VjY2FrT3B0IDY0CisjZWxzZQorICAvKiBvcHQzMiBpcyB1c2VkIGZvciB0aGUgcmVtYWluaW5nIDMyIGFuZCA2NGJpdCBwbGF0Zm9ybXMgKi8KKyAgI2RlZmluZSBLZWNjYWtPcHQgMzIKKyNlbmRpZgorCisjaWYgS2VjY2FrT3B0ID09IDY0ICYmIGRlZmluZWQoUFlfVUlOVDY0X1QpCisgIC8qIDY0Yml0IHBsYXRmb3JtcyB3aXRoIHVuc2lnbmVkIGludDY0ICovCisgICNkZWZpbmUgVW5yb2xsaW5nIDI0CisgICNkZWZpbmUgVXNlQmViaWdva2ltaXNhCisgIHR5cGVkZWYgUFlfVUlOVDY0X1QgVUlOVDY0OworI2VsaWYgS2VjY2FrT3B0ID09IDMyICYmIGRlZmluZWQoUFlfVUlOVDY0X1QpCisgIC8qIDMyYml0IHBsYXRmb3JtcyB3aXRoIHVuc2lnbmVkIGludDY0ICovCisgICNkZWZpbmUgVW5yb2xsaW5nIDIKKyAgI2RlZmluZSBVc2VTY2hlZHVsZSAzCisgIHR5cGVkZWYgUFlfVUlOVDY0X1QgVUlOVDY0OworI2Vsc2UKKyAgLyogMzIgb3IgNjRiaXQgcGxhdGZvcm1zIHdpdGhvdXQgdW5zaWduZWQgaW50NjQgKi8KKyAgI2RlZmluZSBVbnJvbGxpbmcgMgorICAjZGVmaW5lIFVzZVNjaGVkdWxlIDMKKyAgI2RlZmluZSBVc2VJbnRlcmxlYXZlVGFibGVzCisjZW5kaWYKKworLyogcmVwbGFjZW1lbnQgZm9yIGJyZ19lbmRpYW4uaCAqLworI2RlZmluZSBJU19CSUdfRU5ESUFOIDQzMjEKKyNkZWZpbmUgSVNfTElUVExFX0VORElBTiAxMjM0CisjaWYgUFlfQklHX0VORElBTgorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorI2Vsc2UKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisvKiBpbmxpbmUgYWxsIEtlY2NhayBkZXBlbmRlbmNpZXMgKi8KKyNpbmNsdWRlICJrZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5oIgorI2luY2x1ZGUgImtlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmMiCisjaW5jbHVkZSAia2VjY2FrL0tlY2Nha1Nwb25nZS5jIgorI2lmIEtlY2Nha09wdCA9PSA2NAorICAjaW5jbHVkZSAia2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQ2NC5jIgorI2VsaWYgS2VjY2FrT3B0ID09IDMyCisgICNpbmNsdWRlICJrZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLmMiCisjZW5kaWYKKworLyogI2RlZmluZSBTSEEzX0JMT0NLU0laRSAyMDAgLy8gMTYwMCBiaXRzICAqLworI2RlZmluZSBTSEEzX01BWF9ESUdFU1RTSVpFIDY0IC8qIDUxMiBiaXRzICovCisjZGVmaW5lIFNIQTNfc3RhdGUgaGFzaFN0YXRlCisjZGVmaW5lIFNIQTNfaW5pdCBJbml0CisjZGVmaW5lIFNIQTNfcHJvY2VzcyBVcGRhdGUKKyNkZWZpbmUgU0hBM19kb25lIEZpbmFsCisjZGVmaW5lIFNIQTNfY29weXN0YXRlKGRlc3QsIHNyYykgbWVtY3B5KCYoZGVzdCksICYoc3JjKSwgc2l6ZW9mKFNIQTNfc3RhdGUpKQorI2RlZmluZSBTSEEzX2NsZWFyc3RhdGUoc3RhdGUpIG1lbXNldCgmKHN0YXRlKSwgMCwgc2l6ZW9mKFNIQTNfc3RhdGUpKQorCisvKiBUaGUgc3RydWN0dXJlIGZvciBzdG9yaW5nIFNIQTMgaW5mbyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIGludCBoYXNoYml0bGVuOworICAgIFNIQTNfc3RhdGUgaGFzaF9zdGF0ZTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrOworI2VuZGlmCisKK30gU0hBM29iamVjdDsKKworc3RhdGljIFB5VHlwZU9iamVjdCBTSEEzdHlwZTsKKworCitzdGF0aWMgU0hBM29iamVjdCAqCituZXdTSEEzb2JqZWN0KGludCBoYXNoYml0bGVuKQoreworICAgIFNIQTNvYmplY3QgKm5ld29iajsKKworICAgIC8qIGNoZWNrIGhhc2hiaXRsZW4gKi8KKyAgICBzd2l0Y2goaGFzaGJpdGxlbikgeworICAgICAgICAvKiBzdXBwb3J0ZWQgaGFzaCBsZW5ndGggKi8KKyAgICAgICAgY2FzZSAyMjQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNTY6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzODQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1MTI6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgLyogIGFyYml0cmFyaWx5LWxvbmcgb3V0cHV0IGlzbid0IHN1cHBvcnRlZCBieSB0aGlzIG1vZHVsZSAqLworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogZXZlcnl0aGluZyBlbHNlIGlzIGFuIGVycm9yICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgImhhc2hiaXRsZW4gbXVzdCBiZSBvbmUgb2YgMjI0LCAyNTYsIDM4NCBvciA1MTIuIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmV3b2JqID0gKFNIQTNvYmplY3QgKilQeU9iamVjdF9OZXcoU0hBM29iamVjdCwgJlNIQTN0eXBlKTsKKyAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5ld29iai0+aGFzaGJpdGxlbiA9IGhhc2hiaXRsZW47CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBuZXdvYmotPmxvY2sgPSBOVUxMOworI2VuZGlmCisgICAgcmV0dXJuIG5ld29iajsKK30KKworCisvKiBJbnRlcm5hbCBtZXRob2RzIGZvciBhIGhhc2ggb2JqZWN0ICovCisKK3N0YXRpYyB2b2lkCitTSEEzX2RlYWxsb2MoU0hBM29iamVjdCAqc2VsZikKK3sKKyAgICBTSEEzX2NsZWFyc3RhdGUoc2VsZi0+aGFzaF9zdGF0ZSk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBpZiAoc2VsZi0+bG9jaykgeworICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+bG9jayk7CisgICAgfQorI2VuZGlmCisgICAgUHlPYmplY3RfRGVsKHNlbGYpOworfQorCisKKy8qIEV4dGVybmFsIG1ldGhvZHMgZm9yIGEgaGFzaCBvYmplY3QgKi8KKworUHlEb2NfU1RSVkFSKFNIQTNfY29weV9fZG9jX18sICJSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIG9iamVjdC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfY29weShTSEEzb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQoreworICAgIFNIQTNvYmplY3QgKm5ld29iajsKKworICAgIGlmICgobmV3b2JqID0gbmV3U0hBM29iamVjdChzZWxmLT5oYXNoYml0bGVuKSkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRU5URVJfSEFTSExJQihzZWxmKTsKKyAgICBTSEEzX2NvcHlzdGF0ZShuZXdvYmotPmhhc2hfc3RhdGUsIHNlbGYtPmhhc2hfc3RhdGUpOworICAgIExFQVZFX0hBU0hMSUIoc2VsZik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ld29iajsKK30KKworCitQeURvY19TVFJWQVIoU0hBM19kaWdlc3RfX2RvY19fLAorIlJldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGJpbmFyeSBkYXRhLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19kaWdlc3QoU0hBM29iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEzX01BWF9ESUdFU1RTSVpFXTsKKyAgICBTSEEzX3N0YXRlIHRlbXA7CisgICAgSGFzaFJldHVybiByZXM7CisKKyAgICBFTlRFUl9IQVNITElCKHNlbGYpOworICAgIFNIQTNfY29weXN0YXRlKHRlbXAsIHNlbGYtPmhhc2hfc3RhdGUpOworICAgIExFQVZFX0hBU0hMSUIoc2VsZik7CisgICAgcmVzID0gU0hBM19kb25lKCZ0ZW1wLCBkaWdlc3QpOworICAgIFNIQTNfY2xlYXJzdGF0ZSh0ZW1wKTsKKyAgICBpZiAocmVzICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImludGVybmFsIGVycm9yIGluIFNIQTMgRmluYWwoKSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKilkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmhhc2hiaXRsZW4gLyA4KTsKK30KKworCitQeURvY19TVFJWQVIoU0hBM19oZXhkaWdlc3RfX2RvY19fLAorIlJldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGhleGFkZWNpbWFsIGRpZ2l0cy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfaGV4ZGlnZXN0KFNIQTNvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CisgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBM19NQVhfRElHRVNUU0laRV07CisgICAgU0hBM19zdGF0ZSB0ZW1wOworICAgIEhhc2hSZXR1cm4gcmVzOworICAgIFB5T2JqZWN0ICpyZXR2YWw7CisgICAgUHlfVUNTMSAqaGV4X2RpZ2VzdDsKKyAgICBpbnQgZGlnZXN0bGVuLCBpLCBqOworCisgICAgLyogR2V0IHRoZSByYXcgKGJpbmFyeSkgZGlnZXN0IHZhbHVlICovCisgICAgRU5URVJfSEFTSExJQihzZWxmKTsKKyAgICBTSEEzX2NvcHlzdGF0ZSh0ZW1wLCBzZWxmLT5oYXNoX3N0YXRlKTsKKyAgICBMRUFWRV9IQVNITElCKHNlbGYpOworICAgIHJlcyA9IFNIQTNfZG9uZSgmdGVtcCwgZGlnZXN0KTsKKyAgICBTSEEzX2NsZWFyc3RhdGUodGVtcCk7CisgICAgaWYgKHJlcyAhPSBTVUNDRVNTKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJpbnRlcm5hbCBlcnJvciBpbiBTSEEzIEZpbmFsKCkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQ3JlYXRlIGEgbmV3IHN0cmluZyAqLworICAgIGRpZ2VzdGxlbiA9IHNlbGYtPmhhc2hiaXRsZW4gLyA4OworICAgIHJldHZhbCA9IFB5VW5pY29kZV9OZXcoZGlnZXN0bGVuICogMiwgMTI3KTsKKyAgICBpZiAoIXJldHZhbCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGhleF9kaWdlc3QgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXR2YWwpOworCisgICAgLyogTWFrZSBoZXggdmVyc2lvbiBvZiB0aGUgZGlnZXN0ICovCisgICAgZm9yKGk9aj0wOyBpIDwgZGlnZXN0bGVuOyBpKyspIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjOworICAgICAgICBjID0gKGRpZ2VzdFtpXSA+PiA0KSAmIDB4ZjsKKyAgICAgICAgaGV4X2RpZ2VzdFtqKytdID0gUHlfaGV4ZGlnaXRzW2NdOworICAgICAgICBjID0gKGRpZ2VzdFtpXSAmIDB4Zik7CisgICAgICAgIGhleF9kaWdlc3RbaisrXSA9IFB5X2hleGRpZ2l0c1tjXTsKKyAgICB9CisjaWZkZWYgUHlfREVCVUcKKyAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJldHZhbCwgMSkpOworI2VuZGlmCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworUHlEb2NfU1RSVkFSKFNIQTNfdXBkYXRlX19kb2NfXywKKyJVcGRhdGUgdGhpcyBoYXNoIG9iamVjdCdzIHN0YXRlIHdpdGggdGhlIHByb3ZpZGVkIHN0cmluZy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfdXBkYXRlKFNIQTNvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBIYXNoUmV0dXJuIHJlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzp1cGRhdGUiLCAmb2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKG9iaiwgJmJ1Zik7CisKKyAgICAvKiBhZGQgbmV3IGRhdGEsIHRoZSBmdW5jdGlvbiB0YWtlcyB0aGUgbGVuZ3RoIGluIGJpdHMgbm90IGJ5dGVzICovCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBpZiAoc2VsZi0+bG9jayA9PSBOVUxMICYmIGJ1Zi5sZW4gPj0gSEFTSExJQl9HSUxfTUlOU0laRSkgeworICAgICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIH0KKyAgICAvKiBPbmNlIGEgbG9jayBleGlzdHMgYWxsIGNvZGUgcGF0aHMgbXVzdCBiZSBzeW5jaHJvbml6ZWQuIFdlIGhhdmUgdG8KKyAgICAgKiByZWxlYXNlIHRoZSBHSUwgZXZlbiBmb3Igc21hbGwgYnVmZmVycyBhcyBhY3F1aXJpbmcgdGhlIGxvY2sgbWF5IHRha2UKKyAgICAgKiBhbiB1bmxpbWl0ZWQgYW1vdW50IG9mIHRpbWUgd2hlbiBhbm90aGVyIHRocmVhZCB1cGRhdGVzIHRoaXMgb2JqZWN0CisgICAgICogd2l0aCBsb3RzIG9mIGRhdGEuICovCisgICAgaWYgKHNlbGYtPmxvY2spIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+bG9jaywgMSk7CisgICAgICAgIHJlcyA9IFNIQTNfcHJvY2Vzcygmc2VsZi0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbiAqIDgpOworICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+bG9jayk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXMgPSBTSEEzX3Byb2Nlc3MoJnNlbGYtPmhhc2hfc3RhdGUsIGJ1Zi5idWYsIGJ1Zi5sZW4gKiA4KTsKKyAgICB9CisjZWxzZQorICAgIHJlcyA9IFNIQTNfcHJvY2Vzcygmc2VsZi0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbiAqIDgpOworI2VuZGlmCisgICAgTEVBVkVfSEFTSExJQihzZWxmKTsKKworICAgIGlmIChyZXMgIT0gU1VDQ0VTUykgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yIGluIFNIQTMgVXBkYXRlKCkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBTSEEzX21ldGhvZHNbXSA9IHsKKyAgICB7ImNvcHkiLCAgICAgIChQeUNGdW5jdGlvbilTSEEzX2NvcHksICAgICAgTUVUSF9OT0FSR1MsCisgICAgICAgICBTSEEzX2NvcHlfX2RvY19ffSwKKyAgICB7ImRpZ2VzdCIsICAgIChQeUNGdW5jdGlvbilTSEEzX2RpZ2VzdCwgICAgTUVUSF9OT0FSR1MsCisgICAgICAgICBTSEEzX2RpZ2VzdF9fZG9jX199LAorICAgIHsiaGV4ZGlnZXN0IiwgKFB5Q0Z1bmN0aW9uKVNIQTNfaGV4ZGlnZXN0LCBNRVRIX05PQVJHUywKKyAgICAgICAgIFNIQTNfaGV4ZGlnZXN0X19kb2NfX30sCisgICAgeyJ1cGRhdGUiLCAgICAoUHlDRnVuY3Rpb24pU0hBM191cGRhdGUsICAgIE1FVEhfVkFSQVJHUywKKyAgICAgICAgIFNIQTNfdXBkYXRlX19kb2NfX30sCisgICAge05VTEwsICAgICAgICBOVUxMfSAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19nZXRfYmxvY2tfc2l6ZShTSEEzb2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQoreworICAgIC8qIEhNQUMtU0hBMyBoYXNuJ3QgYmVlbiBzcGVjaWZpZWQgeWV0IGFuZCBubyBvZmZpY2lhbCB0ZXN0IHZlY3RvcnMgYXJlCisgICAgICogYXZhaWxhYmxlLiBUaHVzIGJsb2NrX3NpemUgcmV0dXJucyBOb3RJbXBsZW1lbnRlZCB0byBwcmV2ZW50IHBlb3BsZQorICAgICAqIGZyb20gdXNpbmcgU0hBMyB3aXRoIHRoZSBobWFjIG1vZHVsZS4KKyAgICAgKi8KKyAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEzX2dldF9uYW1lKFNIQTNvYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJzaGEzXyVpIiwgc2VsZi0+aGFzaGJpdGxlbik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEzX2dldF9kaWdlc3Rfc2l6ZShTSEEzb2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+aGFzaGJpdGxlbiAvIDgpOworfQorCisKK3N0YXRpYyBQeUdldFNldERlZiBTSEEzX2dldHNldGVyc1tdID0geworICAgIHsiYmxvY2tfc2l6ZSIsIChnZXR0ZXIpU0hBM19nZXRfYmxvY2tfc2l6ZSwgTlVMTCwgTlVMTCwgTlVMTH0sCisgICAgeyJuYW1lIiwgKGdldHRlcilTSEEzX2dldF9uYW1lLCBOVUxMLCBOVUxMLCBOVUxMfSwKKyAgICB7ImRpZ2VzdF9zaXplIiwgKGdldHRlcilTSEEzX2dldF9kaWdlc3Rfc2l6ZSwgTlVMTCwgTlVMTCwgTlVMTH0sCisgICAge05VTEx9ICAvKiBTZW50aW5lbCAqLworfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBTSEEzdHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX3NoYTMuU0hBMyIsICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YoU0hBM29iamVjdCksIC8qIHRwX3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgLyogIG1ldGhvZHMgICovCisgICAgKGRlc3RydWN0b3IpU0hBM19kZWFsbG9jLCAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIFNIQTNfbWV0aG9kcywgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIFNIQTNfZ2V0c2V0ZXJzLCAgICAgLyogdHBfZ2V0c2V0ICovCit9OworCisKKy8qIGNvbnN0cnVjdG9yIGhlbHBlciAqLworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfZmFjdG9yeShQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCwgY29uc3QgY2hhciAqZm10LAorICAgICAgICAgICAgIGludCBoYXNoYml0bGVuKQoreworICAgIFNIQTNvYmplY3QgKm5ld29iaiA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzdHJpbmciLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZGF0YV9vYmogPSBOVUxMOworICAgIFB5X2J1ZmZlciBidWY7CisgICAgSGFzaFJldHVybiByZXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsIGZtdCwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29iaikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGRhdGFfb2JqKQorICAgICAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKGRhdGFfb2JqLCAmYnVmKTsKKworICAgIGlmICgobmV3b2JqID0gbmV3U0hBM29iamVjdChoYXNoYml0bGVuKSkgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChTSEEzX2luaXQoJm5ld29iai0+aGFzaF9zdGF0ZSwgaGFzaGJpdGxlbikgIT0gU1VDQ0VTUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yIGluIFNIQTMgVXBkYXRlKCkiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoZGF0YV9vYmopIHsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgICAgICBpZiAoYnVmLmxlbiA+PSBIQVNITElCX0dJTF9NSU5TSVpFKSB7CisgICAgICAgICAgICAvKiBpbnZhcmlhbnQ6IE5ldyBvYmplY3RzIGNhbid0IGJlIGFjY2Vzc2VkIGJ5IG90aGVyIGNvZGUgeWV0LAorICAgICAgICAgICAgICogdGh1cyBpdCdzIHNhZmUgdG8gcmVsZWFzZSB0aGUgR0lMIHdpdGhvdXQgbG9ja2luZyB0aGUgb2JqZWN0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICByZXMgPSBTSEEzX3Byb2Nlc3MoJm5ld29iai0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbiAqIDgpOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IFNIQTNfcHJvY2VzcygmbmV3b2JqLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHJlcyA9IFNIQTNfcHJvY2VzcygmbmV3b2JqLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisjZW5kaWYKKyAgICAgICAgaWYgKHJlcyAhPSBTVUNDRVNTKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvciBpbiBTSEEzIFVwZGF0ZSgpIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgfQorCisgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ld29iajsKKworICBlcnJvcjoKKyAgICBpZiAobmV3b2JqKSB7CisgICAgICAgIFNIQTNfZGVhbGxvYyhuZXdvYmopOworICAgIH0KKyAgICBpZiAoZGF0YV9vYmopIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7CisKK30KKworUHlEb2NfU1RSVkFSKHNoYTNfMjI0X19kb2NfXywKKyJzaGEzXzIyNChbc3RyaW5nXSkgLT4gU0hBMyBvYmplY3RcblwKK1xuXAorUmV0dXJuIGEgbmV3IFNIQTMgaGFzaCBvYmplY3Qgd2l0aCBhIGhhc2hiaXQgbGVuZ3RoIG9mIDI4IGJ5dGVzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2hhM18yMjQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHJldHVybiBTSEEzX2ZhY3RvcnkoYXJncywga3dkaWN0LCAifE86c2hhM18yMjQiLCAyMjQpOworfQorCisKK1B5RG9jX1NUUlZBUihzaGEzXzI1Nl9fZG9jX18sCisic2hhM18yNTYoW3N0cmluZ10pIC0+IFNIQTMgb2JqZWN0XG5cCitcblwKK1JldHVybiBhIG5ldyBTSEEzIGhhc2ggb2JqZWN0IHdpdGggYSBoYXNoYml0IGxlbmd0aCBvZiAzMiBieXRlcy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NoYTNfMjU2KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKK3sKKyAgICByZXR1cm4gU0hBM19mYWN0b3J5KGFyZ3MsIGt3ZGljdCwgInxPOnNoYTNfMjU2IiwgMjU2KTsKK30KKworUHlEb2NfU1RSVkFSKHNoYTNfMzg0X19kb2NfXywKKyJzaGEzXzM4NChbc3RyaW5nXSkgLT4gU0hBMyBvYmplY3RcblwKK1xuXAorUmV0dXJuIGEgbmV3IFNIQTMgaGFzaCBvYmplY3Qgd2l0aCBhIGhhc2hiaXQgbGVuZ3RoIG9mIDQ4IGJ5dGVzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2hhM18zODQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHJldHVybiBTSEEzX2ZhY3RvcnkoYXJncywga3dkaWN0LCAifE86c2hhM18zODQiLCAzODQpOworfQorCitQeURvY19TVFJWQVIoc2hhM181MTJfX2RvY19fLAorInNoYTNfNTEyKFtzdHJpbmddKSAtPiBTSEEzIG9iamVjdFxuXAorXG5cCitSZXR1cm4gYSBuZXcgU0hBMyBoYXNoIG9iamVjdCB3aXRoIGEgaGFzaGJpdCBsZW5ndGggb2YgNjQgYnl0ZXMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzaGEzXzUxMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCit7CisgICAgcmV0dXJuIFNIQTNfZmFjdG9yeShhcmdzLCBrd2RpY3QsICJ8TzpzaGEzXzUxMiIsIDUxMik7Cit9CisKKworLyogTGlzdCBvZiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgU0hBM19mdW5jdGlvbnNbXSA9IHsKKyAgICB7InNoYTNfMjI0IiwgKFB5Q0Z1bmN0aW9uKXNoYTNfMjI0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgICAgIHNoYTNfMjI0X19kb2NfX30sCisgICAgeyJzaGEzXzI1NiIsIChQeUNGdW5jdGlvbilzaGEzXzI1NiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgICAgICBzaGEzXzI1Nl9fZG9jX199LAorICAgIHsic2hhM18zODQiLCAoUHlDRnVuY3Rpb24pc2hhM18zODQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICAgICAgc2hhM18zODRfX2RvY19ffSwKKyAgICB7InNoYTNfNTEyIiwgKFB5Q0Z1bmN0aW9uKXNoYTNfNTEyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgICAgIHNoYTNfNTEyX19kb2NfX30sCisgICAge05VTEwsICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLworfTsKKworCisvKiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLiAqLworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfU0hBM21vZHVsZSA9IHsKKyAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICAgICAiX3NoYTMiLAorICAgICAgICBOVUxMLAorICAgICAgICAtMSwKKyAgICAgICAgU0hBM19mdW5jdGlvbnMsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3NoYTModm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbTsKKworICAgIFB5X1RZUEUoJlNIQTN0eXBlKSA9ICZQeVR5cGVfVHlwZTsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEzdHlwZSkgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9TSEEzbW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBM3R5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBM1R5cGUiLCAoUHlPYmplY3QgKikmU0hBM3R5cGUpOworICAgIHJldHVybiBtOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMgYi9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYwppbmRleCAzNjkzMzYzLi4zNjg5YTRlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYwpAQCAtMjEsNyArMjEsNiBAQAogICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICAqLwogCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlIDxsaW1pdHMuaD4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKaW5kZXggNDUxZWEyNC4uMmIxMmY4YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYworKysgYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiY3Vyc29yLmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogI2luY2x1ZGUgInB5dGhyZWFkLmgiCiAKQEAgLTYwLDcgKzU5LDExIEBACiAKIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX2luaXQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLCAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsIE5VTEwsIE5VTEx9OworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsKKyAgICAgICAgImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsCisgICAgICAgICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgInVyaSIsCisgICAgICAgIE5VTEwKKyAgICB9OwogCiAgICAgY2hhciogZGF0YWJhc2U7CiAgICAgaW50IGRldGVjdF90eXBlcyA9IDA7CkBAIC02OCwxMSArNzEsMTQgQEAKICAgICBQeU9iamVjdCogZmFjdG9yeSA9IE5VTEw7CiAgICAgaW50IGNoZWNrX3NhbWVfdGhyZWFkID0gMTsKICAgICBpbnQgY2FjaGVkX3N0YXRlbWVudHMgPSAxMDA7CisgICAgaW50IHVyaSA9IDA7CiAgICAgZG91YmxlIHRpbWVvdXQgPSA1LjA7CiAgICAgaW50IHJjOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2kiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLCAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaXAiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cywgJnVyaSkpCiAgICAgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtOTEsOCArOTcsMTkgQEAKICAgICBQeV9JTkNSRUYoJlB5VW5pY29kZV9UeXBlKTsKICAgICBzZWxmLT50ZXh0X2ZhY3RvcnkgPSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZTsKIAorI2lmZGVmIFNRTElURV9PUEVOX1VSSQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByYyA9IHNxbGl0ZTNfb3Blbl92MihkYXRhYmFzZSwgJnNlbGYtPmRiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNRTElURV9PUEVOX1JFQURXUklURSB8IFNRTElURV9PUEVOX0NSRUFURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaSA/IFNRTElURV9PUEVOX1VSSSA6IDApLCBOVUxMKTsKKyNlbHNlCisgICAgaWYgKHVyaSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfTm90U3VwcG9ydGVkRXJyb3IsICJVUklzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmMgPSBzcWxpdGUzX29wZW4oZGF0YWJhc2UsICZzZWxmLT5kYik7CisjZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJjICE9IFNRTElURV9PSykgewpAQCAtNjc5LDYgKzY5Niw4IEBACiAgICAgUHlPYmplY3QqKiBhZ2dyZWdhdGVfaW5zdGFuY2U7CiAgICAgX1B5X0lERU5USUZJRVIoZmluYWxpemUpOwogICAgIGludCBvazsKKyAgICBQeU9iamVjdCAqZXhjZXB0aW9uLCAqdmFsdWUsICp0YjsKKyAgICBpbnQgcmVzdG9yZTsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgUHlHSUxTdGF0ZV9TVEFURSB0aHJlYWRzdGF0ZTsKQEAgLTY5NCw3ICs3MTMsMTIgQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICAvKiBLZWVwIHRoZSBleGNlcHRpb24gKGlmIGFueSkgb2YgdGhlIGxhc3QgY2FsbCB0byBzdGVwKCkgKi8KKyAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CisgICAgcmVzdG9yZSA9IDE7CisKICAgICBmdW5jdGlvbl9yZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKCphZ2dyZWdhdGVfaW5zdGFuY2UsICZQeUlkX2ZpbmFsaXplLCAiIik7CisKICAgICBQeV9ERUNSRUYoKmFnZ3JlZ2F0ZV9pbnN0YW5jZSk7CiAKICAgICBvayA9IDA7CkBAIC03MDksNiArNzMzLDE3IEBACiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB9CiAgICAgICAgIF9zcWxpdGUzX3Jlc3VsdF9lcnJvcihjb250ZXh0LCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdmaW5hbGl6ZScgbWV0aG9kIHJhaXNlZCBlcnJvciIsIC0xKTsKKyNpZiBTUUxJVEVfVkVSU0lPTl9OVU1CRVIgPCAzMDAzMDAzCisgICAgICAgIC8qIHdpdGggb2xkIFNRTGl0ZSB2ZXJzaW9ucywgX3NxbGl0ZTNfcmVzdWx0X2Vycm9yKCkgc2V0cyBhIG5ldyBQeXRob24KKyAgICAgICAgICAgZXhjZXB0aW9uLCBzbyBkb24ndCByZXN0b3JlIHRoZSBwcmV2aW91cyBleGNlcHRpb24gKi8KKyAgICAgICAgcmVzdG9yZSA9IDA7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAocmVzdG9yZSkgeworICAgICAgICAvKiBSZXN0b3JlIHRoZSBleGNlcHRpb24gKGlmIGFueSkgb2YgdGhlIGxhc3QgY2FsbCB0byBzdGVwKCksCisgICAgICAgICAgIGJ1dCBjbGVhciBhbHNvIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBpZiBmaW5hbGl6ZSgpIGZhaWxlZCAqLworICAgICAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKICAgICB9CiAKIGVycm9yOgpAQCAtODU5LDIyICs4OTQsMjkgQEAKIAogICAgIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKICNlbmRpZgorCiAgICAgcmV0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCopdXNlcl9hcmcsICJpc3NzcyIsIGFjdGlvbiwgYXJnMSwgYXJnMiwgZGJuYW1lLCBhY2Nlc3NfYXR0ZW1wdF9zb3VyY2UpOwogCi0gICAgaWYgKCFyZXQpIHsKLSAgICAgICAgaWYgKF9lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrcykgeworICAgIGlmIChyZXQgPT0gTlVMTCkgeworICAgICAgICBpZiAoX2VuYWJsZV9jYWxsYmFja190cmFjZWJhY2tzKQogICAgICAgICAgICAgUHlFcnJfUHJpbnQoKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgfQogCiAgICAgICAgIHJjID0gU1FMSVRFX0RFTlk7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2socmV0KSkgewogICAgICAgICAgICAgcmMgPSBfUHlMb25nX0FzSW50KHJldCk7Ci0gICAgICAgICAgICBpZiAocmMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGlmIChyYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKF9lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrcykKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgcmMgPSBTUUxJVEVfREVOWTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJjID0gU1FMSVRFX0RFTlk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHJldCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKaW5kZXggNDk5OTQxNS4uYmY0YmJiNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgImN1cnNvci5oIgogI2luY2x1ZGUgIm1vZHVsZS5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogUHlPYmplY3QqIHB5c3FsaXRlX2N1cnNvcl9pdGVybmV4dChweXNxbGl0ZV9DdXJzb3IqIHNlbGYpOwogCkBAIC0zMzksNiArMzM4LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSA9PSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUodmFsX3N0ciwgbmJ5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gZGVidWcgbW9kZSwgdHlwZV9jYWxsKCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWUgPSBzcWxpdGUzX2NvbHVtbl9uYW1lKHNlbGYtPnN0YXRlbWVudC0+c3QsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZSA9ICI8dW5rbm93biBjb2x1bW4gbmFtZT4iOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jIGIvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCmluZGV4IGJlYTZkNmEuLjdhN2U4NjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKQEAgLTUwLDE5ICs1MCwyNiBAQAogICAgICAqIEMtbGV2ZWwsIHNvIHRoaXMgY29kZSBpcyByZWR1bmRhbnQgd2l0aCB0aGUgb25lIGluIGNvbm5lY3Rpb25faW5pdCBpbgogICAgICAqIGNvbm5lY3Rpb24uYyBhbmQgbXVzdCBhbHdheXMgYmUgY29waWVkIGZyb20gdGhlcmUgLi4uICovCiAKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgTlVMTCwgTlVMTH07CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geworICAgICAgICAiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwKKyAgICAgICAgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCAidXJpIiwKKyAgICAgICAgTlVMTAorICAgIH07CiAgICAgY2hhciogZGF0YWJhc2U7CiAgICAgaW50IGRldGVjdF90eXBlcyA9IDA7CiAgICAgUHlPYmplY3QqIGlzb2xhdGlvbl9sZXZlbDsKICAgICBQeU9iamVjdCogZmFjdG9yeSA9IE5VTEw7CiAgICAgaW50IGNoZWNrX3NhbWVfdGhyZWFkID0gMTsKICAgICBpbnQgY2FjaGVkX3N0YXRlbWVudHM7CisgICAgaW50IHVyaSA9IDA7CiAgICAgZG91YmxlIHRpbWVvdXQgPSA1LjA7CiAKICAgICBQeU9iamVjdCogcmVzdWx0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2kiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLCAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaXAiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cywgJnVyaSkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC03Nyw3ICs4NCw4IEBACiB9CiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfY29ubmVjdF9kb2MsCi0iY29ubmVjdChkYXRhYmFzZVssIHRpbWVvdXQsIGlzb2xhdGlvbl9sZXZlbCwgZGV0ZWN0X3R5cGVzLCBmYWN0b3J5XSlcblwKKyJjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsXG5cCisgICAgICAgIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50cywgdXJpXSlcblwKIFxuXAogT3BlbnMgYSBjb25uZWN0aW9uIHRvIHRoZSBTUUxpdGUgZGF0YWJhc2UgZmlsZSAqZGF0YWJhc2UqLiBZb3UgY2FuIHVzZVxuXAogXCI6bWVtb3J5OlwiIHRvIG9wZW4gYSBkYXRhYmFzZSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgdGhhdCByZXNpZGVzIGluXG5cCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYwppbmRleCBmYzY4ODc0Li5mMmM4NWY5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAgKi8KIAotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogI2luY2x1ZGUgInByZXBhcmVfcHJvdG9jb2wuaCIKIAogaW50IHB5c3FsaXRlX3ByZXBhcmVfcHJvdG9jb2xfaW5pdChweXNxbGl0ZV9QcmVwYXJlUHJvdG9jb2wqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jIGIvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCmluZGV4IGI1MDY1OGMuLjE0YzE0OGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9yb3cuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgInJvdy5oIgogI2luY2x1ZGUgImN1cnNvci5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiB2b2lkIHB5c3FsaXRlX3Jvd19kZWFsbG9jKHB5c3FsaXRlX1Jvdyogc2VsZikKIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaCBiL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyMGYxNi4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBzcWxpdGVjb21wYXQuaCAtIGNvbXBhdGliaWxpdHkgbWFjcm9zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAotICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwotICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKLSAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKLSAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKLSAqCi0gKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAotICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKLSAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQotICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KLSAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCi0gKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCi0gKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgotICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotI2lmbmRlZiBQWVNRTElURV9DT01QQVRfSAotI2RlZmluZSBQWVNRTElURV9DT01QQVRfSAotCi0vKiBkZWZpbmUgUHlfc3NpemVfdCBmb3IgcHJlLTIuNSB2ZXJzaW9ucyBvZiBQeXRob24gKi8KLQotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMAotdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKLXR5cGVkZWYgaW50ICgqbGVuZnVuYykoUHlPYmplY3QqKTsKLSNlbmRpZgotCi0KLS8qIGRlZmluZSBQeURpY3RfQ2hlY2tFeGFjdCBmb3IgcHJlLTIuNCB2ZXJzaW9ucyBvZiBQeXRob24gKi8KLSNpZm5kZWYgUHlEaWN0X0NoZWNrRXhhY3QKLSNkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3Qob3ApICgob3ApLT5vYl90eXBlID09ICZQeURpY3RfVHlwZSkKLSNlbmRpZgotCi0vKiBkZWZpbmUgUHlfQ0xFQVIgZm9yIHByZS0yLjQgdmVyc2lvbnMgb2YgUHl0aG9uICovCi0jaWZuZGVmIFB5X0NMRUFSCi0jZGVmaW5lIFB5X0NMRUFSKG9wKQkJCQlcCi0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKLSAgICAgICAgICAgICAgICBpZiAob3ApIHsJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gKFB5T2JqZWN0ICopKG9wKTsJXAotICAgICAgICAgICAgICAgICAgICAgICAgKG9wKSA9IE5VTEw7CQlcCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsJCVwKLSAgICAgICAgICAgICAgICB9CQkJCVwKLSAgICAgICAgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWZuZGVmIFB5VmFyT2JqZWN0X0hFQURfSU5JVAotI2RlZmluZSBQeVZhck9iamVjdF9IRUFEX0lOSVQodHlwZSwgc2l6ZSkgXAotICAgIFB5T2JqZWN0X0hFQURfSU5JVCh0eXBlKSBzaXplLAotI2VuZGlmCi0KLSNpZm5kZWYgUHlfVFlQRQotI2RlZmluZSBQeV9UWVBFKG9iKSAoKG9iKS0+b2JfdHlwZSkKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYyBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYwppbmRleCA0NzFhMDY3Li5iMDU2ZDhiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAibWljcm9wcm90b2NvbHMuaCIKICNpbmNsdWRlICJwcmVwYXJlX3Byb3RvY29sLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiAvKiBwcm90b3R5cGVzICovCiBzdGF0aWMgaW50IHB5c3FsaXRlX2NoZWNrX3JlbWFpbmluZ19zcWwoY29uc3QgY2hhciogdGFpbCk7CkBAIC0yNDksNyArMjQ4LDcgQEAKICAgICAgICAgICAgICAgICBjdXJyZW50X3BhcmFtID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcocGFyYW1ldGVycywgYmluZGluZ19uYW1lKTsKICAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKGN1cnJlbnRfcGFyYW0pOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50X3BhcmFtID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcocGFyYW1ldGVycywgKGNoYXIqKWJpbmRpbmdfbmFtZSk7CisgICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIGJpbmRpbmdfbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnRfcGFyYW0pIHsKICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQocHlzcWxpdGVfUHJvZ3JhbW1pbmdFcnJvciwgIllvdSBkaWQgbm90IHN1cHBseSBhIHZhbHVlIGZvciBiaW5kaW5nICVkLiIsIGkpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYyBiL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKaW5kZXggZDg4YmMzZi4uMzEyZmUzYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICB9CiAjIGVuZGlmCiAjZW5kaWYKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHZhbHVlKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKFB5X1NBRkVfRE9XTkNBU1QodmFsdWUsIHNxbGl0ZV9pbnQ2NCwgbG9uZykpOwogfQogCiBzcWxpdGVfaW50NjQKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NyZS5jIGIvTW9kdWxlcy9fc3JlLmMKaW5kZXggMWM3NmQyNC4uMmQ2OTYxYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3JlLmMKKysrIGIvTW9kdWxlcy9fc3JlLmMKQEAgLTM0LDggKzM0LDYgQEAKICAqIG90aGVyIGNvbXBhdGliaWxpdHkgd29yay4KICAqLwogCi0jaWZuZGVmIFNSRV9SRUNVUlNJVkUKLQogc3RhdGljIGNoYXIgY29weXJpZ2h0W10gPQogICAgICIgU1JFIDIuMi4yIENvcHlyaWdodCAoYykgMTk5Ny0yMDAyIGJ5IFNlY3JldCBMYWJzIEFCICI7CiAKQEAgLTQ2LDYgKzQ0LDggQEAKIAogI2luY2x1ZGUgInNyZS5oIgogCisjZGVmaW5lIFNSRV9DT0RFX0JJVFMgKDggKiBzaXplb2YoU1JFX0NPREUpKQorCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAogLyogbmFtZSBvZiB0aGlzIG1vZHVsZSwgbWludXMgdGhlIGxlYWRpbmcgdW5kZXJzY29yZSAqLwpAQCAtNTgsOSArNTgsNiBAQAogLyogZGVmaW5pbmcgdGhpcyBvbmUgZW5hYmxlcyB0cmFjaW5nICovCiAjdW5kZWYgVkVSQk9TRQogCi0vKiBkZWZpbmluZyB0aGlzIGVuYWJsZXMgdW5pY29kZSBzdXBwb3J0IChkZWZhdWx0IHVuZGVyIDEuNmExIGFuZCBsYXRlcikgKi8KLSNkZWZpbmUgSEFWRV9VTklDT0RFCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBvcHRpb25hbCBmZWF0dXJlcyAqLwogCkBAIC03MCwxMCArNjcsNiBAQAogLyogZW5hYmxlcyBjb3B5L2RlZXBjb3B5IGhhbmRsaW5nICh3b3JrIGluIHByb2dyZXNzKSAqLwogI3VuZGVmIFVTRV9CVUlMVElOX0NPUFkKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMTA2MDAwMAotI2RlZmluZSBQeU9iamVjdF9ERUwob3ApIFB5TWVtX0RFTCgob3ApKQotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtMTUwLDkgKzE0Myw2IEBACiAvKiBsb2NhbGUtc3BlY2lmaWMgY2hhcmFjdGVyIHByZWRpY2F0ZXMgKi8KIC8qICEoYyAmIH5OKSA9PSAoYyA8IE4rMSkgZm9yIGFueSB1bnNpZ25lZCBjLCB0aGlzIGF2b2lkcwogICogd2FybmluZ3Mgd2hlbiBjJ3MgdHlwZSBzdXBwb3J0cyBvbmx5IG51bWJlcnMgPCBOKzEgKi8KLSNkZWZpbmUgU1JFX0xPQ19JU19ESUdJVChjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNkaWdpdCgoY2gpKSA6IDApCi0jZGVmaW5lIFNSRV9MT0NfSVNfU1BBQ0UoY2gpICghKChjaCkgJiB+MjU1KSA/IGlzc3BhY2UoKGNoKSkgOiAwKQotI2RlZmluZSBTUkVfTE9DX0lTX0xJTkVCUkVBSyhjaCkgKChjaCkgPT0gJ1xuJykKICNkZWZpbmUgU1JFX0xPQ19JU19BTE5VTShjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNhbG51bSgoY2gpKSA6IDApCiAjZGVmaW5lIFNSRV9MT0NfSVNfV09SRChjaCkgKFNSRV9MT0NfSVNfQUxOVU0oKGNoKSkgfHwgKGNoKSA9PSAnXycpCiAKQEAgLTI1NiwxMzU1ICsyNDYsMjQgQEAKIAogLyogZ2VuZXJhdGUgOC1iaXQgdmVyc2lvbiAqLwogCi0jZGVmaW5lIFNSRV9DSEFSIHVuc2lnbmVkIGNoYXIKLSNkZWZpbmUgU1JFX0NIQVJHRVQoc3RhdGUsIGJ1ZiwgaW5kZXgpICgodW5zaWduZWQgY2hhciopYnVmKVtpbmRleF0KLSNkZWZpbmUgU1JFX0FUIHNyZV9hdAotI2RlZmluZSBTUkVfQ09VTlQgc3JlX2NvdW50Ci0jZGVmaW5lIFNSRV9DSEFSU0VUIHNyZV9jaGFyc2V0Ci0jZGVmaW5lIFNSRV9JTkZPIHNyZV9pbmZvCi0jZGVmaW5lIFNSRV9NQVRDSCBzcmVfbWF0Y2gKLSNkZWZpbmUgU1JFX01BVENIX0NPTlRFWFQgc3JlX21hdGNoX2NvbnRleHQKLSNkZWZpbmUgU1JFX1NFQVJDSCBzcmVfc2VhcmNoCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzEKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDEKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MxXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotI2RlZmluZSBTUkVfUkVDVVJTSVZFCi0jaW5jbHVkZSAiX3NyZS5jIgotI3VuZGVmIFNSRV9SRUNVUlNJVkUKKy8qIGdlbmVyYXRlIDE2LWJpdCB1bmljb2RlIHZlcnNpb24gKi8KIAotI3VuZGVmIFNSRV9TRUFSQ0gKLSN1bmRlZiBTUkVfTUFUQ0gKLSN1bmRlZiBTUkVfTUFUQ0hfQ09OVEVYVAotI3VuZGVmIFNSRV9JTkZPCi0jdW5kZWYgU1JFX0NIQVJTRVQKLSN1bmRlZiBTUkVfQ09VTlQKLSN1bmRlZiBTUkVfQVQKLSN1bmRlZiBTUkVfQ0hBUgotI3VuZGVmIFNSRV9DSEFSR0VUCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzIKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDIKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MyXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotLyogZ2VuZXJhdGUgOC8xNi8zMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCisvKiBnZW5lcmF0ZSAzMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCiAKLSNkZWZpbmUgU1JFX0NIQVIgdm9pZAotI2RlZmluZSBTUkVfQ0hBUkdFVChzdGF0ZSwgYnVmLCBpbmRleCkgXAotICAgICgoc3RhdGUtPmNoYXJzaXplPT0xKSA/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+Y2hhcnNpemU7Ci0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi0jaWYgIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkKKyNkZWZpbmUgU1JFX0NIQVIgUHlfVUNTNAorI2RlZmluZSBTSVpFT0ZfU1JFX0NIQVIgNAorI2RlZmluZSBTUkUoRikgc3JlX3VjczRfIyNGCisjaW5jbHVkZSAic3JlX2xpYi5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZmFjdG9yaWVzIGFuZCBkZXN0cnVjdG9ycyAqLwpAQCAtMTYxMywyMyArMjcyLDYgQEAKIHN0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiwgU1JFX1NUQVRFKiwgaW50KTsKIHN0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX3NjYW5uZXIoUGF0dGVybk9iamVjdCosIFB5T2JqZWN0KiwgUHlPYmplY3QqIGt3KTsKIAotc3RhdGljIGludAotc3JlX2xpdGVyYWxfdGVtcGxhdGUoaW50IGNoYXJzaXplLCBjaGFyKiBwdHIsIFB5X3NzaXplX3QgbGVuKQotewotICAgIC8qIGNoZWNrIGlmIGdpdmVuIHN0cmluZyBpcyBhIGxpdGVyYWwgdGVtcGxhdGUgKGkuZS4gbm8gZXNjYXBlcykgKi8KLSAgICBzdHJ1Y3QgewotICAgICAgICBpbnQgY2hhcnNpemU7Ci0gICAgfSBzdGF0ZSA9IHsKLSAgICAgICAgY2hhcnNpemUKLSAgICB9OwotICAgIHdoaWxlIChsZW4tLSA+IDApIHsKLSAgICAgICAgaWYgKFNSRV9DSEFSR0VUKCgmc3RhdGUpLCBwdHIsIDApID09ICdcXCcpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcHRyICs9IGNoYXJzaXplOwotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQogc3RhdGljIFB5T2JqZWN0ICoKIHNyZV9jb2Rlc2l6ZShQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKQEAgLTE2NjUsNzIgKzMwNyw0MSBAQAogCiBzdGF0aWMgdm9pZCoKIGdldHN0cmluZyhQeU9iamVjdCogc3RyaW5nLCBQeV9zc2l6ZV90KiBwX2xlbmd0aCwKLSAgICAgICAgICBpbnQqIHBfbG9naWNhbF9jaGFyc2l6ZSwgaW50KiBwX2NoYXJzaXplLAorICAgICAgICAgIGludCogcF9pc2J5dGVzLCBpbnQqIHBfY2hhcnNpemUsCiAgICAgICAgICAgUHlfYnVmZmVyICp2aWV3KQogewogICAgIC8qIGdpdmVuIGEgcHl0aG9uIG9iamVjdCwgcmV0dXJuIGEgZGF0YSBwb2ludGVyLCBhIGxlbmd0aCAoaW4KICAgICAgICBjaGFyYWN0ZXJzKSwgYW5kIGEgY2hhcmFjdGVyIHNpemUuICByZXR1cm4gTlVMTCBpZiB0aGUgb2JqZWN0CiAgICAgICAgaXMgbm90IGEgc3RyaW5nIChvciBub3QgY29tcGF0aWJsZSkgKi8KIAotICAgIFB5QnVmZmVyUHJvY3MgKmJ1ZmZlcjsKLSAgICBQeV9zc2l6ZV90IHNpemUsIGJ5dGVzOwotICAgIGludCBjaGFyc2l6ZTsKLSAgICB2b2lkKiBwdHI7Ci0KICAgICAvKiBVbmljb2RlIG9iamVjdHMgZG8gbm90IHN1cHBvcnQgdGhlIGJ1ZmZlciBBUEkuIFNvLCBnZXQgdGhlIGRhdGEKICAgICAgICBkaXJlY3RseSBpbnN0ZWFkLiAqLwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soc3RyaW5nKSkgewogICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cmluZykgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcHRyID0gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKICAgICAgICAgKnBfbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKTsKICAgICAgICAgKnBfY2hhcnNpemUgPSBQeVVuaWNvZGVfS0lORChzdHJpbmcpOwotICAgICAgICAqcF9sb2dpY2FsX2NoYXJzaXplID0gNDsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgKnBfaXNieXRlcyA9IDA7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfREFUQShzdHJpbmcpOwogICAgIH0KIAogICAgIC8qIGdldCBwb2ludGVyIHRvIGJ5dGUgc3RyaW5nIGJ1ZmZlciAqLwotICAgIHZpZXctPmxlbiA9IC0xOwotICAgIGJ1ZmZlciA9IFB5X1RZUEUoc3RyaW5nKS0+dHBfYXNfYnVmZmVyOwotICAgIGlmICghYnVmZmVyIHx8ICFidWZmZXItPmJmX2dldGJ1ZmZlciB8fAotICAgICAgICAoKmJ1ZmZlci0+YmZfZ2V0YnVmZmVyKShzdHJpbmcsIHZpZXcsIFB5QlVGX1NJTVBMRSkgPCAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZXhwZWN0ZWQgc3RyaW5nIG9yIGJ1ZmZlciIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdHJpbmcsIHZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZXhwZWN0ZWQgc3RyaW5nIG9yIGJ1ZmZlciIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvKiBkZXRlcm1pbmUgYnVmZmVyIHNpemUgKi8KLSAgICBieXRlcyA9IHZpZXctPmxlbjsKLSAgICBwdHIgPSB2aWV3LT5idWY7CisgICAgKnBfbGVuZ3RoID0gdmlldy0+bGVuOworICAgICpwX2NoYXJzaXplID0gMTsKKyAgICAqcF9pc2J5dGVzID0gMTsKIAotICAgIGlmIChieXRlcyA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJ1ZmZlciBoYXMgbmVnYXRpdmUgc2l6ZSIpOwotICAgICAgICBnb3RvIGVycjsKKyAgICBpZiAodmlldy0+YnVmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJCdWZmZXIgaXMgTlVMTCIpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKHZpZXcpOworICAgICAgICB2aWV3LT5idWYgPSBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KLSAgICAvKiBkZXRlcm1pbmUgY2hhcmFjdGVyIHNpemUgKi8KLSAgICBzaXplID0gUHlPYmplY3RfU2l6ZShzdHJpbmcpOwotCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2soc3RyaW5nKSB8fCBieXRlcyA9PSBzaXplKQotICAgICAgICBjaGFyc2l6ZSA9IDE7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJidWZmZXIgc2l6ZSBtaXNtYXRjaCIpOwotICAgICAgICBnb3RvIGVycjsKLSAgICB9Ci0KLSAgICAqcF9sZW5ndGggPSBzaXplOwotICAgICpwX2NoYXJzaXplID0gY2hhcnNpemU7Ci0gICAgKnBfbG9naWNhbF9jaGFyc2l6ZSA9IGNoYXJzaXplOwotCi0gICAgaWYgKHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIGlzIE5VTEwiKTsKLSAgICAgICAgICAgIGdvdG8gZXJyOwotICAgIH0KLSAgICByZXR1cm4gcHRyOwotICBlcnI6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSh2aWV3KTsKLSAgICB2aWV3LT5idWYgPSBOVUxMOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiB2aWV3LT5idWY7CiB9CiAKIExPQ0FMKFB5T2JqZWN0KikKQEAgLTE3NDAsNyArMzUxLDcgQEAKICAgICAvKiBwcmVwYXJlIHN0YXRlIG9iamVjdCAqLwogCiAgICAgUHlfc3NpemVfdCBsZW5ndGg7Ci0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemUsIGNoYXJzaXplOworICAgIGludCBpc2J5dGVzLCBjaGFyc2l6ZTsKICAgICB2b2lkKiBwdHI7CiAKICAgICBtZW1zZXQoc3RhdGUsIDAsIHNpemVvZihTUkVfU1RBVEUpKTsKQEAgLTE3NDksMTYgKzM2MCwxNiBAQAogICAgIHN0YXRlLT5sYXN0aW5kZXggPSAtMTsKIAogICAgIHN0YXRlLT5idWZmZXIuYnVmID0gTlVMTDsKLSAgICBwdHIgPSBnZXRzdHJpbmcoc3RyaW5nLCAmbGVuZ3RoLCAmbG9naWNhbF9jaGFyc2l6ZSwgJmNoYXJzaXplLCAmc3RhdGUtPmJ1ZmZlcik7CisgICAgcHRyID0gZ2V0c3RyaW5nKHN0cmluZywgJmxlbmd0aCwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnN0YXRlLT5idWZmZXIpOwogICAgIGlmICghcHRyKQogICAgICAgICBnb3RvIGVycjsKIAotICAgIGlmIChsb2dpY2FsX2NoYXJzaXplID09IDEgJiYgcGF0dGVybi0+bG9naWNhbF9jaGFyc2l6ZSA+IDEpIHsKKyAgICBpZiAoaXNieXRlcyAmJiBwYXR0ZXJuLT5pc2J5dGVzID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCB1c2UgYSBzdHJpbmcgcGF0dGVybiBvbiBhIGJ5dGVzLWxpa2Ugb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyOwogICAgIH0KLSAgICBpZiAobG9naWNhbF9jaGFyc2l6ZSA+IDEgJiYgcGF0dGVybi0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7CisgICAgaWYgKCFpc2J5dGVzICYmIHBhdHRlcm4tPmlzYnl0ZXMgPiAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgdXNlIGEgYnl0ZXMgcGF0dGVybiBvbiBhIHN0cmluZy1saWtlIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycjsKQEAgLTE3NzUsNyArMzg2LDcgQEAKICAgICBlbHNlIGlmIChlbmQgPiBsZW5ndGgpCiAgICAgICAgIGVuZCA9IGxlbmd0aDsKIAotICAgIHN0YXRlLT5sb2dpY2FsX2NoYXJzaXplID0gbG9naWNhbF9jaGFyc2l6ZTsKKyAgICBzdGF0ZS0+aXNieXRlcyA9IGlzYnl0ZXM7CiAgICAgc3RhdGUtPmNoYXJzaXplID0gY2hhcnNpemU7CiAKICAgICBzdGF0ZS0+YmVnaW5uaW5nID0gcHRyOwpAQCAtMTgxNiw2ICs0MjcsMjQgQEAKICAgICAoKChjaGFyKikobWVtYmVyKSAtIChjaGFyKikoc3RhdGUpLT5iZWdpbm5pbmcpIC8gKHN0YXRlKS0+Y2hhcnNpemUpCiAKIExPQ0FMKFB5T2JqZWN0KikKK2dldHNsaWNlKGludCBpc2J5dGVzLCBjb25zdCB2b2lkICpwdHIsCisgICAgICAgICBQeU9iamVjdCogc3RyaW5nLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCkKK3sKKyAgICBpZiAoaXNieXRlcykgeworICAgICAgICBpZiAoUHlCeXRlc19DaGVja0V4YWN0KHN0cmluZykgJiYKKyAgICAgICAgICAgIHN0YXJ0ID09IDAgJiYgZW5kID09IFB5Qnl0ZXNfR0VUX1NJWkUoc3RyaW5nKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKHN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopcHRyICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfU3Vic3RyaW5nKHN0cmluZywgc3RhcnQsIGVuZCk7CisgICAgfQorfQorCitMT0NBTChQeU9iamVjdCopCiBzdGF0ZV9nZXRzbGljZShTUkVfU1RBVEUqIHN0YXRlLCBQeV9zc2l6ZV90IGluZGV4LCBQeU9iamVjdCogc3RyaW5nLCBpbnQgZW1wdHkpCiB7CiAgICAgUHlfc3NpemVfdCBpLCBqOwpAQCAtMTgzNSw3ICs0NjQsNyBAQAogICAgICAgICBqID0gU1RBVEVfT0ZGU0VUKHN0YXRlLCBzdGF0ZS0+bWFya1tpbmRleCsxXSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBqKTsKKyAgICByZXR1cm4gZ2V0c2xpY2Uoc3RhdGUtPmlzYnl0ZXMsIHN0YXRlLT5iZWdpbm5pbmcsIHN0cmluZywgaSwgaik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xODY4LDE5ICs0OTcsMzkgQEAKIHsKICAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7Ci0gICAgaWYgKHNlbGYtPnZpZXcuYnVmKQotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT52aWV3KTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnBhdHRlcm4pOwogICAgIFB5X1hERUNSRUYoc2VsZi0+Z3JvdXBpbmRleCk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5pbmRleGdyb3VwKTsKICAgICBQeU9iamVjdF9ERUwoc2VsZik7CiB9CiAKK0xPQ0FMKFB5X3NzaXplX3QpCitzcmVfbWF0Y2goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgaWYgKHN0YXRlLT5jaGFyc2l6ZSA9PSAxKQorICAgICAgICByZXR1cm4gc3JlX3VjczFfbWF0Y2goc3RhdGUsIHBhdHRlcm4pOworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMikKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MyX21hdGNoKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICBhc3NlcnQoc3RhdGUtPmNoYXJzaXplID09IDQpOworICAgIHJldHVybiBzcmVfdWNzNF9tYXRjaChzdGF0ZSwgcGF0dGVybik7Cit9CisKK0xPQ0FMKFB5X3NzaXplX3QpCitzcmVfc2VhcmNoKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMSkKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MxX3NlYXJjaChzdGF0ZSwgcGF0dGVybik7CisgICAgaWYgKHN0YXRlLT5jaGFyc2l6ZSA9PSAyKQorICAgICAgICByZXR1cm4gc3JlX3VjczJfc2VhcmNoKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICBhc3NlcnQoc3RhdGUtPmNoYXJzaXplID09IDQpOworICAgIHJldHVybiBzcmVfdWNzNF9zZWFyY2goc3RhdGUsIHBhdHRlcm4pOworfQorCiBzdGF0aWMgUHlPYmplY3QqCiBwYXR0ZXJuX21hdGNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBQeU9iamVjdCogc3RyaW5nOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwpAQCAtMTg5OCwxMSArNTQ3LDcgQEAKIAogICAgIFRSQUNFKCgifCVwfCVwfE1BVENIXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOwogCi0gICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICBzdGF0dXMgPSBzcmVfbWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91bWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfbWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwogCiAgICAgVFJBQ0UoKCJ8JXB8JXB8RU5EXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpAQCAtMTkzMywxMSArNTc4LDcgQEAKIAogICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIAotICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIApAQCAtMTk5Nyw1OSArNjM4LDExIEBACiAjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0Kgotam9pbl9saXN0KFB5T2JqZWN0KiBsaXN0LCBQeU9iamVjdCogc3RyaW5nKQotewotICAgIC8qIGpvaW4gbGlzdCBlbGVtZW50cyAqLwotCi0gICAgUHlPYmplY3QqIGpvaW5lcjsKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAxMDYwMDAwCi0gICAgUHlPYmplY3QqIGZ1bmN0aW9uOwotICAgIFB5T2JqZWN0KiBhcmdzOwotI2VuZGlmCi0gICAgUHlPYmplY3QqIHJlc3VsdDsKLQotICAgIGpvaW5lciA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCAwLCAwKTsKLSAgICBpZiAoIWpvaW5lcikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKGxpc3QpID09IDApIHsKLSAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICByZXR1cm4gam9pbmVyOwotICAgIH0KLQotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDEwNjAwMDAKLSAgICBmdW5jdGlvbiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoam9pbmVyLCAiam9pbiIpOwotICAgIGlmICghZnVuY3Rpb24pIHsKLSAgICAgICAgUHlfREVDUkVGKGpvaW5lcik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBhcmdzID0gUHlUdXBsZV9OZXcoMSk7Ci0gICAgaWYgKCFhcmdzKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihmdW5jdGlvbik7Ci0gICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCBsaXN0KTsKLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGZ1bmN0aW9uLCBhcmdzKTsKLSAgICBQeV9ERUNSRUYoYXJncyk7IC8qIGFsc28gcmVtb3ZlcyBsaXN0ICovCi0gICAgUHlfREVDUkVGKGZ1bmN0aW9uKTsKLSNlbHNlCi0gICAgcmVzdWx0ID0gY2FsbCgKLSAgICAgICAgInN0cmluZyIsICJqb2luIiwKLSAgICAgICAgUHlUdXBsZV9QYWNrKDIsIGxpc3QsIGpvaW5lcikKLSAgICAgICAgKTsKLSNlbmRpZgotICAgIFB5X0RFQ1JFRihqb2luZXIpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9maW5kYWxsKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBpLCBiLCBlOwogCiAgICAgUHlPYmplY3QqIHN0cmluZzsKQEAgLTIwNzgsMTIgKzY3MSw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMDk5LDcgKzY4Nyw4IEBACiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIGIgPSBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5zdGFydCk7CiAgICAgICAgICAgICBlID0gU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUucHRyKTsKLSAgICAgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgYiwgZSk7CisgICAgICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgYiwgZSk7CiAgICAgICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE0NSw3ICs3MzQsNiBAQAogCiB9CiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwCiBzdGF0aWMgUHlPYmplY3QqCiBwYXR0ZXJuX2ZpbmRpdGVyKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CkBAIC0yMTY3LDcgKzc1NSw2IEBACiAKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9Ci0jZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9zcGxpdChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQpAQCAtMjE3NSw3ICs3NjIsNyBAQAogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKICAgICBQeU9iamVjdCogaXRlbTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgdm9pZCogbGFzdDsKQEAgLTIyMDYsMTIgKzc5Myw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMjMxLDcgKzgxMyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBnZXQgc2VnbWVudCBiZWZvcmUgdGhpcyBtYXRjaCAqLwotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZSgKKyAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKICAgICAgICAgICAgIHN0cmluZywgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgbGFzdCksCiAgICAgICAgICAgICBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5zdGFydCkKICAgICAgICAgICAgICk7CkBAIC0yMjYwLDcgKzg0Miw3IEBACiAgICAgfQogCiAgICAgLyogZ2V0IHNlZ21lbnQgZm9sbG93aW5nIGxhc3QgbWF0Y2ggKGV2ZW4gaWYgZW1wdHkpICovCi0gICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2UoCisgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKICAgICAgICAgc3RyaW5nLCBTVEFURV9PRkZTRVQoJnN0YXRlLCBsYXN0KSwgc3RhdGUuZW5kcG9zCiAgICAgICAgICk7CiAgICAgaWYgKCFpdGVtKQpAQCAtMjI4NiwxNSArODY4LDE2IEBACiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OworICAgIFB5T2JqZWN0KiBqb2luZXI7CiAgICAgUHlPYmplY3QqIGl0ZW07CiAgICAgUHlPYmplY3QqIGZpbHRlcjsKICAgICBQeU9iamVjdCogYXJnczsKICAgICBQeU9iamVjdCogbWF0Y2g7CiAgICAgdm9pZCogcHRyOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIFB5X3NzaXplX3QgaSwgYiwgZTsKLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZSwgY2hhcnNpemU7CisgICAgaW50IGlzYnl0ZXMsIGNoYXJzaXplOwogICAgIGludCBmaWx0ZXJfaXNfY2FsbGFibGU7CiAgICAgUHlfYnVmZmVyIHZpZXc7CiAKQEAgLTIzMDcsMTAgKzg5MCwxMyBAQAogICAgICAgICAvKiBpZiBub3QgY2FsbGFibGUsIGNoZWNrIGlmIGl0J3MgYSBsaXRlcmFsIHN0cmluZyAqLwogICAgICAgICBpbnQgbGl0ZXJhbDsKICAgICAgICAgdmlldy5idWYgPSBOVUxMOwotICAgICAgICBwdHIgPSBnZXRzdHJpbmcocHRlbXBsYXRlLCAmbiwgJmxvZ2ljYWxfY2hhcnNpemUsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgICAgICBwdHIgPSBnZXRzdHJpbmcocHRlbXBsYXRlLCAmbiwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOwogICAgICAgICBiID0gY2hhcnNpemU7CiAgICAgICAgIGlmIChwdHIpIHsKLSAgICAgICAgICAgIGxpdGVyYWwgPSBzcmVfbGl0ZXJhbF90ZW1wbGF0ZShiLCBwdHIsIG4pOworICAgICAgICAgICAgaWYgKGNoYXJzaXplID09IDEpCisgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IG1lbWNocihwdHIsICdcXCcsIG4pID09IE5VTEw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IFB5VW5pY29kZV9GaW5kQ2hhcihwdGVtcGxhdGUsICdcXCcsIDAsIG4sIDEpID09IC0xOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIGxpdGVyYWwgPSAwOwpAQCAtMjM1NCwxMiArOTQwLDcgQEAKIAogICAgICAgICBzdGF0ZS5wdHIgPSBzdGF0ZS5zdGFydDsKIAotICAgICAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV91c2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfQotCisgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTIzNzUsNyArOTU2LDggQEAKIAogICAgICAgICBpZiAoaSA8IGIpIHsKICAgICAgICAgICAgIC8qIGdldCBzZWdtZW50IGJlZm9yZSB0aGlzIG1hdGNoICovCi0gICAgICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIGksIGIpOworICAgICAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKKyAgICAgICAgICAgICAgICBzdHJpbmcsIGksIGIpOwogICAgICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQzMCw3ICsxMDEyLDggQEAKIAogICAgIC8qIGdldCBzZWdtZW50IGZvbGxvd2luZyBsYXN0IG1hdGNoICovCiAgICAgaWYgKGkgPCBzdGF0ZS5lbmRwb3MpIHsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOworICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQ0NCwxMCArMTAyNywyNSBAQAogICAgIFB5X0RFQ1JFRihmaWx0ZXIpOwogCiAgICAgLyogY29udmVydCBsaXN0IHRvIHNpbmdsZSBzdHJpbmcgKGFsc28gcmVtb3ZlcyBsaXN0KSAqLwotICAgIGl0ZW0gPSBqb2luX2xpc3QobGlzdCwgc3RyaW5nKTsKLQotICAgIGlmICghaXRlbSkKKyAgICBqb2luZXIgPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsIHN0cmluZywgMCwgMCk7CisgICAgaWYgKCFqb2luZXIpIHsKKyAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TGlzdF9HRVRfU0laRShsaXN0KSA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgaXRlbSA9IGpvaW5lcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChzdGF0ZS5pc2J5dGVzKQorICAgICAgICAgICAgaXRlbSA9IF9QeUJ5dGVzX0pvaW4oam9pbmVyLCBsaXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlbSA9IFB5VW5pY29kZV9Kb2luKGpvaW5lciwgbGlzdCk7CisgICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChzdWJuKQogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTm4iLCBpdGVtLCBuKTsKQEAgLTI1OTAsMTAgKzExODgsOCBAQAogICAgICAgICBwYXR0ZXJuX3NwbGl0X2RvY30sCiAgICAgeyJmaW5kYWxsIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2ZpbmRhbGwsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAogICAgICAgICBwYXR0ZXJuX2ZpbmRhbGxfZG9jfSwKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwCiAgICAgeyJmaW5kaXRlciIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9maW5kaXRlciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fZmluZGl0ZXJfZG9jfSwKLSNlbmRpZgogICAgIHsic2Nhbm5lciIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9zY2FubmVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJfX2NvcHlfXyIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9jb3B5LCBNRVRIX05PQVJHU30sCiAgICAgeyJfX2RlZXBjb3B5X18iLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fZGVlcGNvcHksIE1FVEhfT30sCkBAIC0yNjcxLDcgKzEyNjcsNiBAQAogICAgIHNlbGYtPnBhdHRlcm4gPSBOVUxMOwogICAgIHNlbGYtPmdyb3VwaW5kZXggPSBOVUxMOwogICAgIHNlbGYtPmluZGV4Z3JvdXAgPSBOVUxMOwotICAgIHNlbGYtPnZpZXcuYnVmID0gTlVMTDsKIAogICAgIHNlbGYtPmNvZGVzaXplID0gbjsKIApAQCAtMjY5MiwxNiArMTI4NywyMCBAQAogICAgIH0KIAogICAgIGlmIChwYXR0ZXJuID09IFB5X05vbmUpIHsKLSAgICAgICAgc2VsZi0+bG9naWNhbF9jaGFyc2l6ZSA9IC0xOwotICAgICAgICBzZWxmLT5jaGFyc2l6ZSA9IC0xOworICAgICAgICBzZWxmLT5pc2J5dGVzID0gLTE7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHBfbGVuZ3RoOwotICAgICAgICBpZiAoIWdldHN0cmluZyhwYXR0ZXJuLCAmcF9sZW5ndGgsICZzZWxmLT5sb2dpY2FsX2NoYXJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAmc2VsZi0+Y2hhcnNpemUsICZzZWxmLT52aWV3KSkgeworICAgICAgICBpbnQgY2hhcnNpemU7CisgICAgICAgIFB5X2J1ZmZlciB2aWV3OworICAgICAgICB2aWV3LmJ1ZiA9IE5VTEw7CisgICAgICAgIGlmICghZ2V0c3RyaW5nKHBhdHRlcm4sICZwX2xlbmd0aCwgJnNlbGYtPmlzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc2l6ZSwgJnZpZXcpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAodmlldy5idWYpCisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICB9CiAKICAgICBQeV9JTkNSRUYocGF0dGVybik7CkBAIC0yNzg3LDcgKzEzODYsNyBAQAogICAgICAgICBza2lwID0gKmNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFZUUkFDRSgoIiVsdSAoc2tpcCB0byAlcClcbiIsICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNraXAsIGNvZGUrc2tpcCkpOyAgICAgICAgXAotICAgICAgICBpZiAoc2tpcC1hZGogPiBlbmQtY29kZSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChza2lwLWFkaiA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKSAgICAgIFwKICAgICAgICAgICAgIEZBSUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjb2RlKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKQEAgLTI4MTksOCArMTQxOCw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgb2Zmc2V0ID0gMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgKi8KLSAgICAgICAgICAgIGlmIChvZmZzZXQgPiBlbmQtY29kZSkKKyAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9TUkVfQ09ERV9CSVRTOyAvKiAyNTYtYml0IGJpdG1hcCAqLworICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBjb2RlICs9IG9mZnNldDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjgyOCw3ICsxNDI3LDcgQEAKICAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKICAgICAgICAgICAgIEdFVF9BUkc7IC8qIE51bWJlciBvZiBibG9ja3MgKi8KICAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9zaXplb2YoU1JFX0NPREUpOyAvKiAyNTYtYnl0ZSB0YWJsZSAqLwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGVuZC1jb2RlKQorICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCBlYWNoIGJ5dGUgcG9pbnRzIHRvIGEgdmFsaWQgYmxvY2sgKi8KICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewpAQCAtMjgzNiw4ICsxNDM1LDggQEAKICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvZGUgKz0gb2Zmc2V0OwotICAgICAgICAgICAgb2Zmc2V0ID0gYXJnICogMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgdGltZXMgYXJnICovCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gZW5kLWNvZGUpCisgICAgICAgICAgICBvZmZzZXQgPSBhcmcgKiAoMjU2L1NSRV9DT0RFX0JJVFMpOyAvKiAyNTYtYml0IGJpdG1hcCB0aW1lcyBhcmcgKi8KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgY29kZSArPSBvZmZzZXQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI5MDAsNyArMTQ5OSw3IEBACiAgICAgICAgICAgICAgICBzcmVfbWF0Y2goKSBjb2RlIGlzIHJvYnVzdCBldmVuIGlmIHRoZXkgZG9uJ3QsIGFuZCB0aGUgd29yc3QKICAgICAgICAgICAgICAgIHlvdSBjYW4gZ2V0IGlzIG5vbnNlbnNpY2FsIG1hdGNoIHJlc3VsdHMuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+IDIqZ3JvdXBzKzEpIHsKKyAgICAgICAgICAgIGlmIChhcmcgPiAyICogKHNpemVfdClncm91cHMgKyAxKSB7CiAgICAgICAgICAgICAgICAgVlRSQUNFKCgiYXJnPSVkLCBncm91cHM9JWRcbiIsIChpbnQpYXJnLCAoaW50KWdyb3VwcykpOwogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICB9CkBAIC0yOTg4LDExICsxNTg3LDExIEBACiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7IHByZWZpeF9sZW4gPSBhcmc7CiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7CiAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgY29tZXMgdGhlIHByZWZpeCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBuZXdjb2RlLWNvZGUpCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gKFB5X3VpbnRwdHJfdCkobmV3Y29kZSAtIGNvZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgICAgICAgICAgY29kZSArPSBwcmVmaXhfbGVuOwogICAgICAgICAgICAgICAgICAgICAvKiBBbmQgaGVyZSBjb21lcyB0aGUgb3ZlcmxhcCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4X2xlbiA+IG5ld2NvZGUtY29kZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiAoUHlfdWludHB0cl90KShuZXdjb2RlIC0gY29kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgICAgICAgICAvKiBFYWNoIG92ZXJsYXAgdmFsdWUgc2hvdWxkIGJlIDwgcHJlZml4X2xlbiAqLwogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZml4X2xlbjsgaSsrKSB7CkBAIC0zMDgzLDcgKzE2ODIsNyBAQAogICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRjoKICAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPj0gZ3JvdXBzKQorICAgICAgICAgICAgaWYgKGFyZyA+PSAoc2l6ZV90KWdyb3VwcykKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTMwOTIsNyArMTY5MSw3IEBACiAgICAgICAgICAgICAgICAnZ3JvdXAnIGlzIGVpdGhlciBhbiBpbnRlZ2VyIGdyb3VwIG51bWJlciBvciBhIGdyb3VwIG5hbWUsCiAgICAgICAgICAgICAgICAndGhlbicgYW5kICdlbHNlJyBhcmUgc3ViLXJlZ2V4ZXMsIGFuZCAnZWxzZScgaXMgb3B0aW9uYWwuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+PSBncm91cHMpCisgICAgICAgICAgICBpZiAoYXJnID49IChzaXplX3QpZ3JvdXBzKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBHRVRfU0tJUF9BREooMSk7CiAgICAgICAgICAgICBjb2RlLS07IC8qIFRoZSBza2lwIGlzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBhcmchICovCkBAIC0zMTIxLDcgKzE3MjAsNyBAQAogICAgICAgICAgICAgICAgdG8gYWxsb3cgYXJiaXRyYXJ5IGp1bXBzIGFueXdoZXJlIGluIHRoZSBjb2RlOyBzbyB3ZSBqdXN0IGxvb2sKICAgICAgICAgICAgICAgIGZvciBhIEpVTVAgb3Bjb2RlIHByZWNlZGluZyBvdXIgc2tpcCB0YXJnZXQuCiAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCBlbmQtY29kZSAmJgorICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSAmJgogICAgICAgICAgICAgICAgIGNvZGVbc2tpcC0zXSA9PSBTUkVfT1BfSlVNUCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBWVFJBQ0UoKCJib3RoIHRoZW4gYW5kIGVsc2UgcGFydHMgcHJlc2VudFxuIikpOwpAQCAtMzIwNSw2ICsxODA0LDEyIEBACiBzdGF0aWMgUHlPYmplY3QqCiBtYXRjaF9nZXRzbGljZV9ieV9pbmRleChNYXRjaE9iamVjdCogc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIGRlZikKIHsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICB2b2lkKiBwdHI7CisKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHNlbGYtPmdyb3VwcykgewogICAgICAgICAvKiByYWlzZSBJbmRleEVycm9yIGlmIHdlIHdlcmUgZ2l2ZW4gYSBiYWQgZ3JvdXAgbnVtYmVyICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKQEAgLTMyMjIsOSArMTgyNywxNCBAQAogICAgICAgICByZXR1cm4gZGVmOwogICAgIH0KIAotICAgIHJldHVybiBQeVNlcXVlbmNlX0dldFNsaWNlKAotICAgICAgICBzZWxmLT5zdHJpbmcsIHNlbGYtPm1hcmtbaW5kZXhdLCBzZWxmLT5tYXJrW2luZGV4KzFdCi0gICAgICAgICk7CisgICAgcHRyID0gZ2V0c3RyaW5nKHNlbGYtPnN0cmluZywgJmxlbmd0aCwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gZ2V0c2xpY2UoaXNieXRlcywgcHRyLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmluZywgc2VsZi0+bWFya1tpbmRleF0sIHNlbGYtPm1hcmtbaW5kZXgrMV0pOworICAgIGlmIChpc2J5dGVzICYmIHZpZXcuYnVmICE9IE5VTEwpCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC0zNjQ0LDYgKzIyNTQsMjIgQEAKICAgICAgICAgcmV0dXJuIG1hdGNoX3JlZ3Moc2VsZik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCittYXRjaF9yZXByKE1hdGNoT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKmdyb3VwMCA9IG1hdGNoX2dldHNsaWNlX2J5X2luZGV4KHNlbGYsIDAsIFB5X05vbmUpOworICAgIGlmIChncm91cDAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAiPCVzIG9iamVjdDsgc3Bhbj0oJWQsICVkKSwgbWF0Y2g9JS41MFI+IiwKKyAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsCisgICAgICAgICAgICBzZWxmLT5tYXJrWzBdLCBzZWxmLT5tYXJrWzFdLCBncm91cDApOworICAgIFB5X0RFQ1JFRihncm91cDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIG1hdGNoX2dldHNldFtdID0gewogICAgIHsibGFzdGluZGV4IiwgKGdldHRlciltYXRjaF9sYXN0aW5kZXhfZ2V0LCAoc2V0dGVyKU5VTEx9LAogICAgIHsibGFzdGdyb3VwIiwgKGdldHRlciltYXRjaF9sYXN0Z3JvdXBfZ2V0LCAoc2V0dGVyKU5VTEx9LApAQCAtMzY3Miw3ICsyMjk4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpbWF0Y2hfcmVwciwgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtMzc3NSwxNyArMjQwMSwxMyBAQAogewogICAgIFNSRV9TVEFURSogc3RhdGUgPSAmc2VsZi0+c3RhdGU7CiAgICAgUHlPYmplY3QqIG1hdGNoOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBzdGF0ZV9yZXNldChzdGF0ZSk7CiAKICAgICBzdGF0ZS0+cHRyID0gc3RhdGUtPnN0YXJ0OwogCi0gICAgaWYgKHN0YXRlLT5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX21hdGNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91bWF0Y2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9tYXRjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM4MDYsMTcgKzI0MjgsMTMgQEAKIHsKICAgICBTUkVfU1RBVEUqIHN0YXRlID0gJnNlbGYtPnN0YXRlOwogICAgIFB5T2JqZWN0KiBtYXRjaDsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgc3RhdGVfcmVzZXQoc3RhdGUpOwogCiAgICAgc3RhdGUtPnB0ciA9IHN0YXRlLT5zdGFydDsKIAotICAgIGlmIChzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zOTY5LDcgKzI1ODcsNSBAQAogICAgIHJldHVybiBtOwogfQogCi0jZW5kaWYgLyogIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkgKi8KLQogLyogdmltOnRzPTQ6c3c9NDpldAogKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NzbC5jIGIvTW9kdWxlcy9fc3NsLmMKaW5kZXggMzc0ZDkzMC4uODNhMjcxZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3NsLmMKKysrIGIvTW9kdWxlcy9fc3NsLmMKQEAgLTQyLDYgKzQyLDcwIEBACiAKICNlbmRpZgogCisvKiBJbmNsdWRlIHN5bWJvbHMgZnJvbSBfc29ja2V0IG1vZHVsZSAqLworI2luY2x1ZGUgInNvY2tldG1vZHVsZS5oIgorCitzdGF0aWMgUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0IFB5U29ja2V0TW9kdWxlOworCisjaWYgZGVmaW5lZChIQVZFX1BPTExfSCkKKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1BPTExfSCkKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2VuZGlmCisKKy8qIEluY2x1ZGUgT3BlblNTTCBoZWFkZXIgZmlsZXMgKi8KKyNpbmNsdWRlICJvcGVuc3NsL3JzYS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvY3J5cHRvLmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5LmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5djMuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3BlbS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCisjaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3JhbmQuaCIKKworLyogU1NMIGVycm9yIG9iamVjdCAqLworc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFplcm9SZXR1cm5FcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50UmVhZEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRXcml0ZUVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFN5c2NhbGxFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xFT0ZFcnJvck9iamVjdDsKKworLyogRXJyb3IgbWFwcGluZ3MgKi8KK3N0YXRpYyBQeU9iamVjdCAqZXJyX2NvZGVzX3RvX25hbWVzOworc3RhdGljIFB5T2JqZWN0ICplcnJfbmFtZXNfdG9fY29kZXM7CitzdGF0aWMgUHlPYmplY3QgKmxpYl9jb2Rlc190b19uYW1lczsKKworc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIHsKKyAgICBjb25zdCBjaGFyICptbmVtb25pYzsKKyAgICBpbnQgbGlicmFyeSwgcmVhc29uOworfTsKK3N0cnVjdCBweV9zc2xfbGlicmFyeV9jb2RlIHsKKyAgICBjb25zdCBjaGFyICpsaWJyYXJ5OworICAgIGludCBjb2RlOworfTsKKworLyogSW5jbHVkZSBnZW5lcmF0ZWQgZGF0YSAoZXJyb3IgY29kZXMpICovCisjaW5jbHVkZSAiX3NzbF9kYXRhLmgiCisKKy8qIE9wZW5zc2wgY29tZXMgd2l0aCBUTFN2MS4xIGFuZCBUTFN2MS4yIGJldHdlZW4gMS4wLjBoIGFuZCAxLjAuMQorICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvbmV3cy9jaGFuZ2Vsb2cuaHRtbAorICovCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDAwTAorIyBkZWZpbmUgSEFWRV9UTFN2MV8yIDEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1RMU3YxXzIgMAorI2VuZGlmCisKKy8qIFNOSSBzdXBwb3J0IChjbGllbnQtIGFuZCBzZXJ2ZXItc2lkZSkgYXBwZWFyZWQgaW4gT3BlblNTTCAxLjAuMC4KKyAqIFRoaXMgaW5jbHVkZXMgdGhlIFNTTF9zZXRfU1NMX0NUWCgpIGZ1bmN0aW9uLgorICovCisjaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorIyBkZWZpbmUgSEFWRV9TTkkgMQorI2Vsc2UKKyMgZGVmaW5lIEhBVkVfU05JIDAKKyNlbmRpZgorCiBlbnVtIHB5X3NzbF9lcnJvciB7CiAgICAgLyogdGhlc2UgbWlycm9yIHNzbC5oICovCiAgICAgUFlfU1NMX0VSUk9SX05PTkUsCkBAIC03NSw1NSArMTM5LDE0IEBACiAjZW5kaWYKICAgICBQWV9TU0xfVkVSU0lPTl9TU0wzPTEsCiAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMjMsCisjaWYgSEFWRV9UTFN2MV8yCisgICAgUFlfU1NMX1ZFUlNJT05fVExTMSwKKyAgICBQWV9TU0xfVkVSU0lPTl9UTFMxXzEsCisgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8yCisjZWxzZQogICAgIFBZX1NTTF9WRVJTSU9OX1RMUzEKLX07Ci0KLXN0cnVjdCBweV9zc2xfZXJyb3JfY29kZSB7Ci0gICAgY29uc3QgY2hhciAqbW5lbW9uaWM7Ci0gICAgaW50IGxpYnJhcnksIHJlYXNvbjsKLX07Ci0KLXN0cnVjdCBweV9zc2xfbGlicmFyeV9jb2RlIHsKLSAgICBjb25zdCBjaGFyICpsaWJyYXJ5OwotICAgIGludCBjb2RlOwotfTsKLQotLyogSW5jbHVkZSBzeW1ib2xzIGZyb20gX3NvY2tldCBtb2R1bGUgKi8KLSNpbmNsdWRlICJzb2NrZXRtb2R1bGUuaCIKLQotc3RhdGljIFB5U29ja2V0TW9kdWxlX0FQSU9iamVjdCBQeVNvY2tldE1vZHVsZTsKLQotI2lmIGRlZmluZWQoSEFWRV9QT0xMX0gpCi0jaW5jbHVkZSA8cG9sbC5oPgotI2VsaWYgZGVmaW5lZChIQVZFX1NZU19QT0xMX0gpCi0jaW5jbHVkZSA8c3lzL3BvbGwuaD4KICNlbmRpZgotCi0vKiBJbmNsdWRlIE9wZW5TU0wgaGVhZGVyIGZpbGVzICovCi0jaW5jbHVkZSAib3BlbnNzbC9yc2EuaCIKLSNpbmNsdWRlICJvcGVuc3NsL2NyeXB0by5oIgotI2luY2x1ZGUgIm9wZW5zc2wveDUwOS5oIgotI2luY2x1ZGUgIm9wZW5zc2wveDUwOXYzLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9wZW0uaCIKLSNpbmNsdWRlICJvcGVuc3NsL3NzbC5oIgotI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9yYW5kLmgiCi0KLS8qIEluY2x1ZGUgZ2VuZXJhdGVkIGRhdGEgKGVycm9yIGNvZGVzKSAqLwotI2luY2x1ZGUgIl9zc2xfZGF0YS5oIgotCi0vKiBTU0wgZXJyb3Igb2JqZWN0ICovCi1zdGF0aWMgUHlPYmplY3QgKlB5U1NMRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMWmVyb1JldHVybkVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRSZWFkRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMV2FudFdyaXRlRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMU3lzY2FsbEVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVPRkVycm9yT2JqZWN0OwotCi0vKiBFcnJvciBtYXBwaW5ncyAqLwotc3RhdGljIFB5T2JqZWN0ICplcnJfY29kZXNfdG9fbmFtZXM7Ci1zdGF0aWMgUHlPYmplY3QgKmVycl9uYW1lc190b19jb2RlczsKLXN0YXRpYyBQeU9iamVjdCAqbGliX2NvZGVzX3RvX25hbWVzOworfTsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAKQEAgLTE4MywxNCArMjA2LDE5IEBACiAgICAgY2hhciAqbnBuX3Byb3RvY29sczsKICAgICBpbnQgbnBuX3Byb3RvY29sc19sZW47CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBQeU9iamVjdCAqc2V0X2hvc3RuYW1lOworI2VuZGlmCiB9IFB5U1NMQ29udGV4dDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeU9iamVjdCAqU29ja2V0OyAvKiB3ZWFrcmVmIHRvIHNvY2tldCBvbiB3aGljaCB3ZSdyZSBsYXllcmVkICovCiAgICAgU1NMICpzc2w7CisgICAgUHlTU0xDb250ZXh0ICpjdHg7IC8qIHdlYWtyZWYgdG8gU1NMIGNvbnRleHQgKi8KICAgICBYNTA5ICpwZWVyX2NlcnQ7Ci0gICAgaW50IHNodXRkb3duX3NlZW5femVybzsKKyAgICBjaGFyIHNodXRkb3duX3NlZW5femVybzsKKyAgICBjaGFyIGhhbmRzaGFrZV9kb25lOwogICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGU7CiB9IFB5U1NMU29ja2V0OwogCkBAIC0zMTgsMTQgKzM0NiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfb2JqLCBlcnJzdHIsIGxpbmVubyk7CiAgICAgZWxzZQogICAgICAgICBtc2cgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMgKF9zc2wuYzolZCkiLCBlcnJzdHIsIGxpbmVubyk7Ci0KICAgICBpZiAobXNnID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGluaXRfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCJpTiIsIHNzbF9lcnJubywgbXNnKTsKKyAgICBpZiAoaW5pdF92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisKICAgICBlcnJfdmFsdWUgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHR5cGUsIGluaXRfdmFsdWUpOwogICAgIFB5X0RFQ1JFRihpbml0X3ZhbHVlKTsKICAgICBpZiAoZXJyX3ZhbHVlID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGlmIChyZWFzb25fb2JqID09IE5VTEwpCiAgICAgICAgIHJlYXNvbl9vYmogPSBQeV9Ob25lOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKGVycl92YWx1ZSwgJlB5SWRfcmVhc29uLCByZWFzb25fb2JqKSkKQEAgLTQzOSwxMSArNDcxLDEzIEBACiAgKi8KIAogc3RhdGljIFB5U1NMU29ja2V0ICoKLW5ld1B5U1NMU29ja2V0KFNTTF9DVFggKmN0eCwgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrLAorbmV3UHlTU0xTb2NrZXQoUHlTU0xDb250ZXh0ICpzc2xjdHgsIFB5U29ja2V0U29ja09iamVjdCAqc29jaywKICAgICAgICAgICAgICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGUsCiAgICAgICAgICAgICAgICBjaGFyICpzZXJ2ZXJfaG9zdG5hbWUpCiB7CiAgICAgUHlTU0xTb2NrZXQgKnNlbGY7CisgICAgU1NMX0NUWCAqY3R4ID0gc3NsY3R4LT5jdHg7CisgICAgbG9uZyBtb2RlOwogCiAgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVNTTFNvY2tldCwgJlB5U1NMU29ja2V0X1R5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCkBAIC00NTIsNyArNDg2LDEwIEBACiAgICAgc2VsZi0+cGVlcl9jZXJ0ID0gTlVMTDsKICAgICBzZWxmLT5zc2wgPSBOVUxMOwogICAgIHNlbGYtPlNvY2tldCA9IE5VTEw7CisgICAgc2VsZi0+Y3R4ID0gc3NsY3R4OwogICAgIHNlbGYtPnNodXRkb3duX3NlZW5femVybyA9IDA7CisgICAgc2VsZi0+aGFuZHNoYWtlX2RvbmUgPSAwOworICAgIFB5X0lOQ1JFRihzc2xjdHgpOwogCiAgICAgLyogTWFrZSBzdXJlIHRoZSBTU0wgZXJyb3Igc3RhdGUgaXMgaW5pdGlhbGl6ZWQgKi8KICAgICAodm9pZCkgRVJSX2dldF9zdGF0ZSgpOwpAQCAtNDYxLDEyICs0OTgsMTUgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2VsZi0+c3NsID0gU1NMX25ldyhjdHgpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisgICAgU1NMX3NldF9hcHBfZGF0YShzZWxmLT5zc2wsc2VsZik7CiAgICAgU1NMX3NldF9mZChzZWxmLT5zc2wsIHNvY2stPnNvY2tfZmQpOworICAgIG1vZGUgPSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUjsKICNpZmRlZiBTU0xfTU9ERV9BVVRPX1JFVFJZCi0gICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgU1NMX01PREVfQVVUT19SRVRSWSk7CisgICAgbW9kZSB8PSBTU0xfTU9ERV9BVVRPX1JFVFJZOwogI2VuZGlmCisgICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgbW9kZSk7CiAKLSNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjaWYgSEFWRV9TTkkKICAgICBpZiAoc2VydmVyX2hvc3RuYW1lICE9IE5VTEwpCiAgICAgICAgIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShzZWxmLT5zc2wsIHNlcnZlcl9ob3N0bmFtZSk7CiAjZW5kaWYKQEAgLTQ4OCw2ICs1MjgsMTAgQEAKIAogICAgIHNlbGYtPnNvY2tldF90eXBlID0gc29ja2V0X3R5cGU7CiAgICAgc2VsZi0+U29ja2V0ID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc29jaywgTlVMTCk7CisgICAgaWYgKHNlbGYtPlNvY2tldCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC01NTQsNiArNTk4LDcgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2VsZi0+cGVlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNlbGYtPnNzbCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBzZWxmLT5oYW5kc2hha2VfZG9uZSA9IDE7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC0xMDQ4LDYgKzEwOTMsMjQgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK19jZXJ0aWZpY2F0ZV90b19kZXIoWDUwOSAqY2VydGlmaWNhdGUpCit7CisgICAgdW5zaWduZWQgY2hhciAqYnl0ZXNfYnVmID0gTlVMTDsKKyAgICBpbnQgbGVuOworICAgIFB5T2JqZWN0ICpyZXR2YWw7CisKKyAgICBieXRlc19idWYgPSBOVUxMOworICAgIGxlbiA9IGkyZF9YNTA5KGNlcnRpZmljYXRlLCAmYnl0ZXNfYnVmKTsKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIC8qIHRoaXMgaXMgYWN0dWFsbHkgYW4gaW1tdXRhYmxlIGJ5dGVzIHNlcXVlbmNlICovCisgICAgcmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKSBieXRlc19idWYsIGxlbik7CisgICAgT1BFTlNTTF9mcmVlKGJ5dGVzX2J1Zik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIFB5U1NMX3Rlc3RfZGVjb2RlX2NlcnRpZmljYXRlIChQeU9iamVjdCAqbW9kLCBQeU9iamVjdCAqYXJncykgewpAQCAtMTA5MywzNCArMTE1NiwyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFB5U1NMX3BlZXJjZXJ0KFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKLSAgICBpbnQgbGVuOwogICAgIGludCB2ZXJpZmljYXRpb247CiAgICAgaW50IGJpbmFyeV9tb2RlID0gMDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHA6cGVlcl9jZXJ0aWZpY2F0ZSIsICZiaW5hcnlfbW9kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKCFzZWxmLT5oYW5kc2hha2VfZG9uZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kc2hha2Ugbm90IGRvbmUgeWV0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBpZiAoIXNlbGYtPnBlZXJfY2VydCkKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAKICAgICBpZiAoYmluYXJ5X21vZGUpIHsKICAgICAgICAgLyogcmV0dXJuIGNlcnQgaW4gREVSLWVuY29kZWQgZm9ybWF0ICovCi0KLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXNfYnVmID0gTlVMTDsKLQotICAgICAgICBieXRlc19idWYgPSBOVUxMOwotICAgICAgICBsZW4gPSBpMmRfWDUwOShzZWxmLT5wZWVyX2NlcnQsICZieXRlc19idWYpOwotICAgICAgICBpZiAobGVuIDwgMCkgewotICAgICAgICAgICAgUHlTU0xfU2V0RXJyb3Ioc2VsZiwgbGVuLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgLyogdGhpcyBpcyBhY3R1YWxseSBhbiBpbW11dGFibGUgYnl0ZXMgc2VxdWVuY2UgKi8KLSAgICAgICAgcmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotICAgICAgICAgICgoY29uc3QgY2hhciAqKSBieXRlc19idWYsIGxlbik7Ci0gICAgICAgIE9QRU5TU0xfZnJlZShieXRlc19idWYpOwotICAgICAgICByZXR1cm4gcmV0dmFsOwotCisgICAgICAgIHJldHVybiBfY2VydGlmaWNhdGVfdG9fZGVyKHNlbGYtPnBlZXJfY2VydCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmVyaWZpY2F0aW9uID0gU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUoU1NMX2dldF9TU0xfQ1RYKHNlbGYtPnNzbCkpOwogICAgICAgICBpZiAoKHZlcmlmaWNhdGlvbiAmIFNTTF9WRVJJRllfUEVFUikgPT0gMCkKQEAgLTEyMjMsNiArMTI3NSw0MyBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBQeVNTTENvbnRleHQgKlB5U1NMX2dldF9jb250ZXh0KFB5U1NMU29ja2V0ICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7CisgICAgUHlfSU5DUkVGKHNlbGYtPmN0eCk7CisgICAgcmV0dXJuIHNlbGYtPmN0eDsKK30KKworc3RhdGljIGludCBQeVNTTF9zZXRfY29udGV4dChQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7CisKKyAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKHZhbHVlLCAmUHlTU0xDb250ZXh0X1R5cGUpKSB7CisjaWYgIUhBVkVfU05JCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAic2V0dGluZyBhIHNvY2tldCdzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb250ZXh0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBPcGVuU1NMIGxpYnJhcnkiKTsKKyAgICAgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYtPmN0eCk7CisgICAgICAgIHNlbGYtPmN0eCA9IChQeVNTTENvbnRleHQgKikgdmFsdWU7CisgICAgICAgIFNTTF9zZXRfU1NMX0NUWChzZWxmLT5zc2wsIHNlbGYtPmN0eC0+Y3R4KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJUaGUgdmFsdWUgbXVzdCBiZSBhIFNTTENvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfc2V0X2NvbnRleHRfZG9jLAorIl9zZXR0ZXJfY29udGV4dChjdHgpXG5cCitcCitUaGlzIGNoYW5nZXMgdGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTU0xTb2NrZXQuIFRoaXMgaXMgdHlwaWNhbGx5XG5cCit1c2VkIGZyb20gd2l0aGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gc2V0IGJ5IHRoZSBzZXRfc2VydmVybmFtZV9jYWxsYmFja1xuXAorb24gdGhlIFNTTENvbnRleHQgdG8gY2hhbmdlIHRoZSBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlXG5cCitTU0xTb2NrZXQgYmVmb3JlIHRoZSBjcnlwdG9ncmFwaGljIGV4Y2hhbmdlIGhhbmRzaGFrZSBtZXNzYWdlc1xuIik7CisKKworCiBzdGF0aWMgdm9pZCBQeVNTTF9kZWFsbG9jKFB5U1NMU29ja2V0ICpzZWxmKQogewogICAgIGlmIChzZWxmLT5wZWVyX2NlcnQpICAgICAgICAvKiBQb3NzaWJsZSBub3QgdG8gaGF2ZSBvbmU/ICovCkBAIC0xMjMwLDYgKzEzMTksNyBAQAogICAgIGlmIChzZWxmLT5zc2wpCiAgICAgICAgIFNTTF9mcmVlKHNlbGYtPnNzbCk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5Tb2NrZXQpOworICAgIFB5X1hERUNSRUYoc2VsZi0+Y3R4KTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTE2NzAsNiArMTc2MCwxMiBAQAogCiAjZW5kaWYgLyogSEFWRV9PUEVOU1NMX0ZJTklTSEVEICovCiAKK3N0YXRpYyBQeUdldFNldERlZiBzc2xfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY29udGV4dCIsIChnZXR0ZXIpIFB5U1NMX2dldF9jb250ZXh0LAorICAgICAgICAgICAgICAgIChzZXR0ZXIpIFB5U1NMX3NldF9jb250ZXh0LCBQeVNTTF9zZXRfY29udGV4dF9kb2N9LAorICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIFB5U1NMTWV0aG9kc1tdID0gewogICAgIHsiZG9faGFuZHNoYWtlIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX1NTTGRvX2hhbmRzaGFrZSwgTUVUSF9OT0FSR1N9LAogICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pUHlTU0xfU1NMd3JpdGUsIE1FVEhfVkFSQVJHUywKQEAgLTE3MjQsNiArMTgyMCw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICBQeVNTTE1ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyovCisgICAgc3NsX2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwogfTsKIAogCkBAIC0xNzQ3LDYgKzE4NDUsMTIgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMSkKICAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfbWV0aG9kKCkpOworI2lmIEhBVkVfVExTdjFfMgorICAgIGVsc2UgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMV8xKQorICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhUTFN2MV8xX21ldGhvZCgpKTsKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzFfMikKKyAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfMl9tZXRob2QoKSk7CisjZW5kaWYKICAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1NTTDMpCiAgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFNTTHYzX21ldGhvZCgpKTsKICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCkBAIC0xNzgwLDYgKzE4ODQsOSBAQAogI2lmZGVmIE9QRU5TU0xfTlBOX05FR09USUFURUQKICAgICBzZWxmLT5ucG5fcHJvdG9jb2xzID0gTlVMTDsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIHNlbGYtPnNldF9ob3N0bmFtZSA9IE5VTEw7CisjZW5kaWYKICAgICAvKiBEZWZhdWx0cyAqLwogICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzZWxmLT5jdHgsIFNTTF9WRVJJRllfTk9ORSwgTlVMTCk7CiAgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzZWxmLT5jdHgsCkBAIC0xNzkzLDkgKzE5MDAsMjggQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIAorc3RhdGljIGludAorY29udGV4dF90cmF2ZXJzZShQeVNTTENvbnRleHQgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5X1ZJU0lUKHNlbGYtPnNldF9ob3N0bmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY29udGV4dF9jbGVhcihQeVNTTENvbnRleHQgKnNlbGYpCit7CisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgUHlfQ0xFQVIoc2VsZi0+c2V0X2hvc3RuYW1lKTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogY29udGV4dF9kZWFsbG9jKFB5U1NMQ29udGV4dCAqc2VsZikKIHsKKyAgICBjb250ZXh0X2NsZWFyKHNlbGYpOwogICAgIFNTTF9DVFhfZnJlZShzZWxmLT5jdHgpOwogI2lmZGVmIE9QRU5TU0xfTlBOX05FR09USUFURUQKICAgICBQeU1lbV9GcmVlKHNlbGYtPm5wbl9wcm90b2NvbHMpOwpAQCAtMjAxOSw4ICsyMTQ1LDggQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICBmcmVlKHB3X2luZm8tPnBhc3N3b3JkKTsKLSAgICBwd19pbmZvLT5wYXNzd29yZCA9IG1hbGxvYyhzaXplKTsKKyAgICBQeU1lbV9GcmVlKHB3X2luZm8tPnBhc3N3b3JkKTsKKyAgICBwd19pbmZvLT5wYXNzd29yZCA9IFB5TWVtX01hbGxvYyhzaXplKTsKICAgICBpZiAoIXB3X2luZm8tPnBhc3N3b3JkKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gYWxsb2NhdGUgcGFzc3dvcmQgYnVmZmVyIik7CkBAIC0yMTY0LDEzICsyMjkwLDEzIEBACiAgICAgfQogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfY2IpOwogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfdXNlcmRhdGEpOwotICAgIGZyZWUocHdfaW5mby5wYXNzd29yZCk7CisgICAgUHlNZW1fRnJlZShwd19pbmZvLnBhc3N3b3JkKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIAogZXJyb3I6CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Ioc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF9jYik7CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEoc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF91c2VyZGF0YSk7Ci0gICAgZnJlZShwd19pbmZvLnBhc3N3b3JkKTsKKyAgICBQeU1lbV9GcmVlKHB3X2luZm8ucGFzc3dvcmQpOwogICAgIFB5X1hERUNSRUYoa2V5ZmlsZV9ieXRlcyk7CiAgICAgUHlfWERFQ1JFRihjZXJ0ZmlsZV9ieXRlcyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMjM4LDcgKzIzNjQsNyBAQAogICAgIEZJTEUgKmY7CiAgICAgREggKmRoOwogCi0gICAgZiA9IF9QeV9mb3BlbihmaWxlcGF0aCwgInJiIik7CisgICAgZiA9IF9QeV9mb3Blbl9vYmooZmlsZXBhdGgsICJyYiIpOwogICAgIGlmIChmID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIGZpbGVwYXRoKTsKQEAgLTIyODYsNyArMjQxMiw3IEBACiAgICAgICAgICAgICAmc29jaywgJnNlcnZlcl9zaWRlLAogICAgICAgICAgICAgImlkbmEiLCAmaG9zdG5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWZuZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKKyNpZiAhSEFWRV9TTkkKICAgICAgICAgUHlNZW1fRnJlZShob3N0bmFtZSk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAic2VydmVyX2hvc3RuYW1lIGlzIG5vdCBzdXBwb3J0ZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgImJ5IHlvdXIgT3BlblNTTCBsaWJyYXJ5Iik7CkBAIC0yMjk0LDcgKzI0MjAsNyBAQAogI2VuZGlmCiAgICAgfQogCi0gICAgcmVzID0gKFB5T2JqZWN0ICopIG5ld1B5U1NMU29ja2V0KHNlbGYtPmN0eCwgc29jaywgc2VydmVyX3NpZGUsCisgICAgcmVzID0gKFB5T2JqZWN0ICopIG5ld1B5U1NMU29ja2V0KHNlbGYsIHNvY2ssIHNlcnZlcl9zaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSk7CiAgICAgaWYgKGhvc3RuYW1lICE9IE5VTEwpCiAgICAgICAgIFB5TWVtX0ZyZWUoaG9zdG5hbWUpOwpAQCAtMjM3OSw2ICsyNTA1LDI0OCBAQAogfQogI2VuZGlmCiAKKyNpZiBIQVZFX1NOSSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkKK3N0YXRpYyBpbnQKK19zZXJ2ZXJuYW1lX2NhbGxiYWNrKFNTTCAqcywgaW50ICphbCwgdm9pZCAqYXJncykKK3sKKyAgICBpbnQgcmV0OworICAgIFB5U1NMQ29udGV4dCAqc3NsX2N0eCA9IChQeVNTTENvbnRleHQgKikgYXJnczsKKyAgICBQeVNTTFNvY2tldCAqc3NsOworICAgIFB5T2JqZWN0ICpzZXJ2ZXJuYW1lX287CisgICAgUHlPYmplY3QgKnNlcnZlcm5hbWVfaWRuYTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIC8qIFRoZSBoaWdoLWxldmVsIHNzbC5TU0xTb2NrZXQgb2JqZWN0ICovCisgICAgUHlPYmplY3QgKnNzbF9zb2NrZXQ7CisgICAgY29uc3QgY2hhciAqc2VydmVybmFtZSA9IFNTTF9nZXRfc2VydmVybmFtZShzLCBUTFNFWFRfTkFNRVRZUEVfaG9zdF9uYW1lKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ3N0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyNlbmRpZgorCisgICAgaWYgKHNzbF9jdHgtPnNldF9ob3N0bmFtZSA9PSBOVUxMKSB7CisgICAgICAgIC8qIHJlbW92ZSByYWNlIGNvbmRpdGlvbiBpbiB0aGlzIHRoZSBjYWxsIGJhY2sgd2hpbGUgaWYgcmVtb3ZpbmcgdGhlCisgICAgICAgICAqIGNhbGxiYWNrIGlzIGluIHByb2dyZXNzICovCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdzdGF0ZSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFNTTF9UTFNFWFRfRVJSX09LOworICAgIH0KKworICAgIHNzbCA9IFNTTF9nZXRfYXBwX2RhdGEocyk7CisgICAgYXNzZXJ0KFB5U1NMU29ja2V0X0NoZWNrKHNzbCkpOworICAgIHNzbF9zb2NrZXQgPSBQeVdlYWtyZWZfR2V0T2JqZWN0KHNzbC0+U29ja2V0KTsKKyAgICBQeV9JTkNSRUYoc3NsX3NvY2tldCk7CisgICAgaWYgKHNzbF9zb2NrZXQgPT0gUHlfTm9uZSkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChzZXJ2ZXJuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzc2xfY3R4LT5zZXRfaG9zdG5hbWUsIHNzbF9zb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSwgc3NsX2N0eCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzZXJ2ZXJuYW1lX28gPSBQeUJ5dGVzX0Zyb21TdHJpbmcoc2VydmVybmFtZSk7CisgICAgICAgIGlmIChzZXJ2ZXJuYW1lX28gPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKChQeU9iamVjdCAqKSBzc2xfY3R4KTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgc2VydmVybmFtZV9pZG5hID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHNlcnZlcm5hbWVfbywgImlkbmEiLCBOVUxMKTsKKyAgICAgICAgaWYgKHNlcnZlcm5hbWVfaWRuYSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc2VydmVybmFtZV9vKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXJ2ZXJuYW1lX28pOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc2VydmVybmFtZV9vKTsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzc2xfY3R4LT5zZXRfaG9zdG5hbWUsIHNzbF9zb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVybmFtZV9pZG5hLCBzc2xfY3R4LCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKHNlcnZlcm5hbWVfaWRuYSk7CisgICAgfQorICAgIFB5X0RFQ1JFRihzc2xfc29ja2V0KTsKKworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc3NsX2N0eC0+c2V0X2hvc3RuYW1lKTsKKyAgICAgICAgKmFsID0gU1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOworICAgICAgICByZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgKmFsID0gKGludCkgUHlMb25nX0FzTG9uZyhyZXN1bHQpOworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAqYWwgPSBTU0xfQURfSU5URVJOQUxfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX09LOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0OworCitlcnJvcjoKKyAgICBQeV9ERUNSRUYoc3NsX3NvY2tldCk7CisgICAgKmFsID0gU1NMX0FEX0lOVEVSTkFMX0VSUk9SOworICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKK1B5RG9jX1NUUlZBUihQeVNTTF9zZXRfc2VydmVybmFtZV9jYWxsYmFja19kb2MsCisic2V0X3NlcnZlcm5hbWVfY2FsbGJhY2sobWV0aG9kKVxuXAorXG5cCitUaGlzIHNldHMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBzZXJ2ZXIgbmFtZSBpcyBwcm92aWRlZCBieVxuXAordGhlIFNTTC9UTFMgY2xpZW50IGluIHRoZSBTTkkgZXh0ZW5zaW9uLlxuXAorXG5cCitJZiB0aGUgYXJndW1lbnQgaXMgTm9uZSB0aGVuIHRoZSBjYWxsYmFjayBpcyBkaXNhYmxlZC4gVGhlIG1ldGhvZCBpcyBjYWxsZWRcblwKK3dpdGggdGhlIFNTTFNvY2tldCwgdGhlIHNlcnZlciBuYW1lIGFzIGEgc3RyaW5nLCBhbmQgdGhlIFNTTENvbnRleHQgb2JqZWN0LlxuXAorU2VlIFJGQyA2MDY2IGZvciBkZXRhaWxzIG9mIHRoZSBTTkkgZXh0ZW5zaW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyNpZiBIQVZFX1NOSSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkKKyAgICBQeU9iamVjdCAqY2I7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY2IpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0NMRUFSKHNlbGYtPnNldF9ob3N0bmFtZSk7CisgICAgaWYgKGNiID09IFB5X05vbmUpIHsKKyAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VsZi0+Y3R4LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICghUHlDYWxsYWJsZV9DaGVjayhjYikpIHsKKyAgICAgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlbGYtPmN0eCwgTlVMTCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYSBjYWxsYWJsZSBvYmplY3QiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRihjYik7CisgICAgICAgIHNlbGYtPnNldF9ob3N0bmFtZSA9IGNiOworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayhzZWxmLT5jdHgsIF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKTsKKyAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfYXJnKHNlbGYtPmN0eCwgc2VsZik7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworI2Vsc2UKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIlRoZSBUTFMgZXh0ZW5zaW9uIHNlcnZlcm5hbWUgY2FsbGJhY2ssICIKKyAgICAgICAgICAgICAgICAgICAgIlNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLCAiCisgICAgICAgICAgICAgICAgICAgICJpcyBub3QgaW4gdGhlIGN1cnJlbnQgT3BlblNTTCBsaWJyYXJ5LiIpOworICAgIHJldHVybiBOVUxMOworI2VuZGlmCit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9nZXRfc3RhdHNfZG9jLAorImNlcnRfc3RvcmVfc3RhdHMoKSAtPiB7J2NybCc6IGludCwgJ3g1MDlfY2EnOiBpbnQsICd4NTA5JzogaW50fVxuXAorXG5cCitSZXR1cm5zIHF1YW50aXRpZXMgb2YgbG9hZGVkIFguNTA5IGNlcnRpZmljYXRlcy4gWC41MDkgY2VydGlmaWNhdGVzIHdpdGggYVxuXAorQ0EgZXh0ZW5zaW9uIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIGluc2lkZSB0aGUgY29udGV4dCdzIGNlcnRcblwKK3N0b3JlLlxuXAorTk9URTogQ2VydGlmaWNhdGVzIGluIGEgY2FwYXRoIGRpcmVjdG9yeSBhcmVuJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmVcblwKK2JlZW4gdXNlZCBhdCBsZWFzdCBvbmNlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorY2VydF9zdG9yZV9zdGF0cyhQeVNTTENvbnRleHQgKnNlbGYpCit7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgWDUwOV9PQkpFQ1QgKm9iajsKKyAgICBpbnQgeDUwOSA9IDAsIGNybCA9IDAsIHBrZXkgPSAwLCBjYSA9IDAsIGk7CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2tfWDUwOV9PQkpFQ1RfbnVtKHN0b3JlLT5vYmpzKTsgaSsrKSB7CisgICAgICAgIG9iaiA9IHNrX1g1MDlfT0JKRUNUX3ZhbHVlKHN0b3JlLT5vYmpzLCBpKTsKKyAgICAgICAgc3dpdGNoIChvYmotPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgWDUwOV9MVV9YNTA5OgorICAgICAgICAgICAgICAgIHg1MDkrKzsKKyAgICAgICAgICAgICAgICBpZiAoWDUwOV9jaGVja19jYShvYmotPmRhdGEueDUwOSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ErKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFg1MDlfTFVfQ1JMOgorICAgICAgICAgICAgICAgIGNybCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYNTA5X0xVX1BLRVk6CisgICAgICAgICAgICAgICAgcGtleSsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvKiBJZ25vcmUgWDUwOV9MVV9GQUlMLCBYNTA5X0xVX1JFVFJZLCBYNTA5X0xVX1BLRVkuCisgICAgICAgICAgICAgICAgICogQXMgZmFyIGFzIEkgY2FuIHRlbGwgdGhleSBhcmUgaW50ZXJuYWwgc3RhdGVzIGFuZCBuZXZlcgorICAgICAgICAgICAgICAgICAqIHN0b3JlZCBpbiBhIGNlcnQgc3RvcmUgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgie3Npc2lzaX0iLCAieDUwOSIsIHg1MDksICJjcmwiLCBjcmwsCisgICAgICAgICJ4NTA5X2NhIiwgY2EpOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfZ2V0X2NhX2NlcnRzX2RvYywKKyJnZXRfY2FfY2VydHMoW2Rlcj1GYWxzZV0pIC0+IGxpc3Qgb2YgbG9hZGVkIGNlcnRpZmljYXRlXG5cCitcblwKK1JldHVybnMgYSBsaXN0IG9mIGRpY3RzIHdpdGggaW5mb3JtYXRpb24gb2YgbG9hZGVkIENBIGNlcnRzLiBJZiB0aGVcblwKK29wdGlvbmFsIGFyZ3VtZW50IGlzIFRydWUsIHJldHVybnMgYSBERVItZW5jb2RlZCBjb3B5IG9mIHRoZSBDQSBjZXJ0aWZpY2F0ZS5cblwKK05PVEU6IENlcnRpZmljYXRlcyBpbiBhIGNhcGF0aCBkaXJlY3RvcnkgYXJlbid0IGxvYWRlZCB1bmxlc3MgdGhleSBoYXZlXG5cCitiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2dldF9jYV9jZXJ0cyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIFB5T2JqZWN0ICpjaSA9IE5VTEwsICpybGlzdCA9IE5VTEw7CisgICAgaW50IGk7CisgICAgaW50IGJpbmFyeV9tb2RlID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHA6Z2V0X2NhX2NlcnRzIiwgJmJpbmFyeV9tb2RlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoKHJsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2tfWDUwOV9PQkpFQ1RfbnVtKHN0b3JlLT5vYmpzKTsgaSsrKSB7CisgICAgICAgIFg1MDlfT0JKRUNUICpvYmo7CisgICAgICAgIFg1MDkgKmNlcnQ7CisKKyAgICAgICAgb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoc3RvcmUtPm9ianMsIGkpOworICAgICAgICBpZiAob2JqLT50eXBlICE9IFg1MDlfTFVfWDUwOSkgeworICAgICAgICAgICAgLyogbm90IGEgeDUwOSBjZXJ0ICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKiBDQSBmb3IgYW55IHB1cnBvc2UgKi8KKyAgICAgICAgY2VydCA9IG9iai0+ZGF0YS54NTA5OworICAgICAgICBpZiAoIVg1MDlfY2hlY2tfY2EoY2VydCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChiaW5hcnlfbW9kZSkgeworICAgICAgICAgICAgY2kgPSBfY2VydGlmaWNhdGVfdG9fZGVyKGNlcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2kgPSBfZGVjb2RlX2NlcnRpZmljYXRlKGNlcnQpOworICAgICAgICB9CisgICAgICAgIGlmIChjaSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJsaXN0LCBjaSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoY2kpOworICAgIH0KKyAgICByZXR1cm4gcmxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihjaSk7CisgICAgUHlfWERFQ1JFRihybGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIGNvbnRleHRfZ2V0c2V0bGlzdFtdID0gewogICAgIHsib3B0aW9ucyIsIChnZXR0ZXIpIGdldF9vcHRpb25zLAogICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF9vcHRpb25zLCBOVUxMfSwKQEAgLTI0MDgsNiArMjc3NiwxMiBAQAogICAgIHsic2V0X2VjZGhfY3VydmUiLCAoUHlDRnVuY3Rpb24pIHNldF9lY2RoX2N1cnZlLAogICAgICAgICAgICAgICAgICAgICAgICBNRVRIX08sIE5VTEx9LAogI2VuZGlmCisgICAgeyJzZXRfc2VydmVybmFtZV9jYWxsYmFjayIsIChQeUNGdW5jdGlvbikgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgUHlTU0xfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tfZG9jfSwKKyAgICB7ImNlcnRfc3RvcmVfc3RhdHMiLCAoUHlDRnVuY3Rpb24pIGNlcnRfc3RvcmVfc3RhdHMsCisgICAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBQeVNTTF9nZXRfc3RhdHNfZG9jfSwKKyAgICB7ImdldF9jYV9jZXJ0cyIsIChQeUNGdW5jdGlvbikgZ2V0X2NhX2NlcnRzLAorICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsIFB5U1NMX2dldF9jYV9jZXJ0c19kb2N9LAogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI0MzEsMTAgKzI4MDUsMTAgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KKyAgICAodHJhdmVyc2Vwcm9jKSBjb250ZXh0X3RyYXZlcnNlLCAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCisgICAgKGlucXVpcnkpIGNvbnRleHRfY2xlYXIsICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCkBAIC0yNTg0LDcgKzI5NTgsMTY5IEBACiAjZW5kaWYgLyogSEFWRV9PUEVOU1NMX1JBTkQgKi8KIAogCitQeURvY19TVFJWQVIoUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzX2RvYywKKyJnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSAtPiB0dXBsZVxuXAorXG5cCitSZXR1cm4gc2VhcmNoIHBhdGhzIGFuZCBlbnZpcm9ubWVudCB2YXJzIHRoYXQgYXJlIHVzZWQgYnkgU1NMQ29udGV4dCdzXG5cCitzZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSB0byBsb2FkIGRlZmF1bHQgQ0FzLiBUaGUgdmFsdWVzIGFyZVxuXAorJ2NlcnRfZmlsZV9lbnYnLCAnY2VydF9maWxlJywgJ2NlcnRfZGlyX2VudicsICdjZXJ0X2RpcicuIik7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKm9maWxlX2VudiA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9maWxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2Rpcl9lbnYgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvZGlyID0gTlVMTDsKKworI2RlZmluZSBjb252ZXJ0KGluZm8sIHRhcmdldCkgeyBcCisgICAgICAgIGNvbnN0IGNoYXIgKnRtcCA9IChpbmZvKTsgXAorICAgICAgICB0YXJnZXQgPSBOVUxMOyBcCisgICAgICAgIGlmICghdG1wKSB7IFB5X0lOQ1JFRihQeV9Ob25lKTsgdGFyZ2V0ID0gUHlfTm9uZTsgfSBcCisgICAgICAgIGVsc2UgaWYgKCh0YXJnZXQgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHRtcCkpID09IE5VTEwpIHsgXAorICAgICAgICAgICAgdGFyZ2V0ID0gUHlCeXRlc19Gcm9tU3RyaW5nKHRtcCk7IH0gXAorICAgICAgICBpZiAoIXRhcmdldCkgZ290byBlcnJvcjsgXAorICAgIH0gd2hpbGUoMCkKKworICAgIGNvbnZlcnQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52KCksIG9maWxlX2Vudik7CisgICAgY29udmVydChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZSgpLCBvZmlsZSk7CisgICAgY29udmVydChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudigpLCBvZGlyX2Vudik7CisgICAgY29udmVydChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyKCksIG9kaXIpOworI3VuZGVmIGNvbnZlcnQKKworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOTk5OIiwgb2ZpbGVfZW52LCBvZmlsZSwgb2Rpcl9lbnYsIG9kaXIpOworCisgIGVycm9yOgorICAgIFB5X1hERUNSRUYob2ZpbGVfZW52KTsKKyAgICBQeV9YREVDUkVGKG9maWxlKTsKKyAgICBQeV9YREVDUkVGKG9kaXJfZW52KTsKKyAgICBQeV9YREVDUkVGKG9kaXIpOworICAgIHJldHVybiBOVUxMOworfQorCisjaWZkZWYgX01TQ19WRVIKK1B5RG9jX1NUUlZBUihQeVNTTF9lbnVtX2NlcnRfc3RvcmVfZG9jLAorImVudW1fY2VydF9zdG9yZShzdG9yZV9uYW1lLCBjZXJ0X3R5cGU9J2NlcnRpZmljYXRlJykgLT4gW11cblwKK1xuXAorUmV0cmlldmUgY2VydGlmaWNhdGVzIGZyb20gV2luZG93cycgY2VydCBzdG9yZS4gc3RvcmVfbmFtZSBtYXkgYmUgb25lIG9mXG5cCisnQ0EnLCAnUk9PVCcgb3IgJ01ZJy4gVGhlIHN5c3RlbSBtYXkgcHJvdmlkZSBtb3JlIGNlcnQgc3RvcmFnZXMsIHRvby5cblwKK2NlcnRfdHlwZSBtdXN0IGJlIGVpdGhlciAnY2VydGlmaWNhdGUnIG9yICdjcmwnLlxuXAorVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChieXRlcywgZW5jb2RpbmdfdHlwZSkgdHVwbGVzLiBUaGVcblwKK2VuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAorUEtDU183X0FTTl9FTkNPRElORy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1B5U1NMX2VudW1fY2VydF9zdG9yZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJzdG9yZV9uYW1lIiwgImNlcnRfdHlwZSIsIE5VTEx9OworICAgIGNoYXIgKnN0b3JlX25hbWU7CisgICAgY2hhciAqY2VydF90eXBlID0gImNlcnRpZmljYXRlIjsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnR1cCA9IE5VTEwsICpjZXJ0ID0gTlVMTCwgKmVuYyA9IE5VTEw7CisgICAgaW50IG9rID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJzfHM6ZW51bV9jZXJ0X3N0b3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZzdG9yZV9uYW1lLCAmY2VydF90eXBlKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKChzdHJjbXAoY2VydF90eXBlLCAiY2VydGlmaWNhdGUiKSAhPSAwKSAmJgorICAgICAgICAoc3RyY21wKGNlcnRfdHlwZSwgImNybCIpICE9IDApKSB7CisgICAgICAgIHJldHVybiBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2VydF90eXBlIG11c3QgYmUgJ2NlcnRpZmljYXRlJyBvciAnY3JsJywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJS4xMDBzIiwgY2VydF90eXBlKTsKKyAgICB9CisKKyAgICBpZiAoKHJlc3VsdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKChoU3RvcmUgPSBDZXJ0T3BlblN5c3RlbVN0b3JlKChIQ1JZUFRQUk9WKU5VTEwsIHN0b3JlX25hbWUpKSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKworICAgIGlmIChzdHJjbXAoY2VydF90eXBlLCAiY2VydGlmaWNhdGUiKSA9PSAwKSB7CisgICAgICAgIFBDQ0VSVF9DT05URVhUIHBDZXJ0Q3R4ID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKHBDZXJ0Q3R4ID0gQ2VydEVudW1DZXJ0aWZpY2F0ZXNJblN0b3JlKGhTdG9yZSwgcENlcnRDdHgpKSB7CisgICAgICAgICAgICBjZXJ0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciopcENlcnRDdHgtPnBiQ2VydEVuY29kZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ2VydEN0eC0+Y2JDZXJ0RW5jb2RlZCk7CisgICAgICAgICAgICBpZiAoIWNlcnQpIHsKKyAgICAgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGVuYyA9IFB5TG9uZ19Gcm9tTG9uZyhwQ2VydEN0eC0+ZHdDZXJ0RW5jb2RpbmdUeXBlKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgodHVwID0gUHlUdXBsZV9OZXcoMikpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMCwgY2VydCk7IGNlcnQgPSBOVUxMOworICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDEsIGVuYyk7IGVuYyA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgdHVwKSA8IDApIHsKKyAgICAgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9DTEVBUih0dXApOworICAgICAgICB9CisgICAgICAgIGlmIChwQ2VydEN0eCkgeworICAgICAgICAgICAgLyogbG9vcCBlbmRlZCB3aXRoIGFuIGVycm9yLCBuZWVkIHRvIGNsZWFuIHVwIGNvbnRleHQgbWFudWFsbHkgKi8KKyAgICAgICAgICAgIENlcnRGcmVlQ2VydGlmaWNhdGVDb250ZXh0KHBDZXJ0Q3R4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFBDQ1JMX0NPTlRFWFQgcENybEN0eCA9IE5VTEw7CisgICAgICAgIHdoaWxlIChwQ3JsQ3R4ID0gQ2VydEVudW1DUkxzSW5TdG9yZShoU3RvcmUsIHBDcmxDdHgpKSB7CisgICAgICAgICAgICBjZXJ0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciopcENybEN0eC0+cGJDcmxFbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENybEN0eC0+Y2JDcmxFbmNvZGVkKTsKKyAgICAgICAgICAgIGlmICghY2VydCkgeworICAgICAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoZW5jID0gUHlMb25nX0Zyb21Mb25nKHBDcmxDdHgtPmR3Q2VydEVuY29kaW5nVHlwZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHR1cCA9IFB5VHVwbGVfTmV3KDIpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDAsIGNlcnQpOyBjZXJ0ID0gTlVMTDsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAxLCBlbmMpOyBlbmMgPSBOVUxMOworCisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIHR1cCkgPCAwKSB7CisgICAgICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfQ0xFQVIodHVwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocENybEN0eCkgeworICAgICAgICAgICAgLyogbG9vcCBlbmRlZCB3aXRoIGFuIGVycm9yLCBuZWVkIHRvIGNsZWFuIHVwIGNvbnRleHQgbWFudWFsbHkgKi8KKyAgICAgICAgICAgIENlcnRGcmVlQ1JMQ29udGV4dChwQ3JsQ3R4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEluIGVycm9yIGNhc2VzIGNlcnQsIGVuYyBhbmQgdHVwIG1heSBub3QgYmUgTlVMTCAqLworICAgIFB5X1hERUNSRUYoY2VydCk7CisgICAgUHlfWERFQ1JFRihlbmMpOworICAgIFB5X1hERUNSRUYodHVwKTsKKworICAgIGlmICghQ2VydENsb3NlU3RvcmUoaFN0b3JlLCAwKSkgeworICAgICAgICAvKiBUaGlzIGVycm9yIGNhc2UgbWlnaHQgc2hhZG93IGFub3RoZXIgZXhjZXB0aW9uLiovCisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKyAgICBpZiAob2spIHsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9IGVsc2UgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorI2VuZGlmCiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLiAqLwogCkBAIC0yNjAzLDYgKzMxMzksMTIgQEAKICAgICB7IlJBTkRfc3RhdHVzIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlTU0xfUkFORF9zdGF0dXMsIE1FVEhfTk9BUkdTLAogICAgICBQeVNTTF9SQU5EX3N0YXR1c19kb2N9LAogI2VuZGlmCisgICAgeyJnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzLAorICAgICBNRVRIX05PQVJHUywgUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzX2RvY30sCisjaWZkZWYgX01TQ19WRVIKKyAgICB7ImVudW1fY2VydF9zdG9yZSIsIChQeUNGdW5jdGlvbilQeVNTTF9lbnVtX2NlcnRfc3RvcmUsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX2VudW1fY2VydF9zdG9yZV9kb2N9LAorI2VuZGlmCiAgICAge05VTEwsICAgICAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLwogfTsKIApAQCAtMjY2NCw3ICszMjA2LDcgQEAKICAgICBpZiAoX3NzbF9sb2NrcyA9PSBOVUxMKSB7CiAgICAgICAgIF9zc2xfbG9ja3NfY291bnQgPSBDUllQVE9fbnVtX2xvY2tzKCk7CiAgICAgICAgIF9zc2xfbG9ja3MgPSAoUHlUaHJlYWRfdHlwZV9sb2NrICopCi0gICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKFB5VGhyZWFkX3R5cGVfbG9jaykgKiBfc3NsX2xvY2tzX2NvdW50KTsKKyAgICAgICAgICAgIFB5TWVtX01hbGxvYyhzaXplb2YoUHlUaHJlYWRfdHlwZV9sb2NrKSAqIF9zc2xfbG9ja3NfY291bnQpOwogICAgICAgICBpZiAoX3NzbF9sb2NrcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIG1lbXNldChfc3NsX2xvY2tzLCAwLApAQCAtMjY3Niw3ICszMjE4LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyAgaiA8IGk7ICBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKF9zc2xfbG9ja3Nbal0pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKF9zc2xfbG9ja3MpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoX3NzbF9sb2Nrcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI4MzEsNiArMzM3Myw2MyBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDRVJUX1JFUVVJUkVEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfQ0VSVF9SRVFVSVJFRCk7CiAKKyNpZmRlZiBfTVNDX1ZFUgorICAgIC8qIFdpbmRvd3MgZHdDZXJ0RW5jb2RpbmdUeXBlICovCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWDUwOV9BU05fRU5DT0RJTkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBLQ1NfN19BU05fRU5DT0RJTkcpOworI2VuZGlmCisKKyAgICAvKiBBbGVydCBEZXNjcmlwdGlvbnMgZnJvbSBzc2wuaCAqLworICAgIC8qIG5vdGUgUkVTRVJWRUQgY29uc3RhbnRzIG5vIGxvbmdlciBpbnRlbmRlZCBmb3IgdXNlIGhhdmUgYmVlbiByZW1vdmVkICovCisgICAgLyogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNiAqLworCisjZGVmaW5lIEFERF9BRF9DT05TVEFOVChzKSBcCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFMRVJUX0RFU0NSSVBUSU9OXyIjcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9BRF8jI3MpCisKKyAgICBBRERfQURfQ09OU1RBTlQoQ0xPU0VfTk9USUZZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVU5FWFBFQ1RFRF9NRVNTQUdFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX1JFQ09SRF9NQUMpOworICAgIEFERF9BRF9DT05TVEFOVChSRUNPUkRfT1ZFUkZMT1cpOworICAgIEFERF9BRF9DT05TVEFOVChERUNPTVBSRVNTSU9OX0ZBSUxVUkUpOworICAgIEFERF9BRF9DT05TVEFOVChIQU5EU0hBS0VfRkFJTFVSRSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEJBRF9DRVJUSUZJQ0FURSk7CisgICAgQUREX0FEX0NPTlNUQU5UKFVOU1VQUE9SVEVEX0NFUlRJRklDQVRFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfUkVWT0tFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX0VYUElSRUQpOworICAgIEFERF9BRF9DT05TVEFOVChDRVJUSUZJQ0FURV9VTktOT1dOKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSUxMRUdBTF9QQVJBTUVURVIpOworICAgIEFERF9BRF9DT05TVEFOVChVTktOT1dOX0NBKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQUNDRVNTX0RFTklFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ09ERV9FUlJPUik7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ1JZUFRfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChQUk9UT0NPTF9WRVJTSU9OKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5TVUZGSUNJRU5UX1NFQ1VSSVRZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5URVJOQUxfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChVU0VSX0NBTkNFTExFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKE5PX1JFTkVHT1RJQVRJT04pOworICAgIC8qIE5vdCBhbGwgY29uc3RhbnRzIGFyZSBpbiBvbGQgT3BlblNTTCB2ZXJzaW9ucyAqLworI2lmZGVmIFNTTF9BRF9VTlNVUFBPUlRFRF9FWFRFTlNJT04KKyAgICBBRERfQURfQ09OU1RBTlQoVU5TVVBQT1JURURfRVhURU5TSU9OKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9VTlJFQ09HTklaRURfTkFNRQorICAgIEFERF9BRF9DT05TVEFOVChVTlJFQ09HTklaRURfTkFNRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkKKyAgICBBRERfQURfQ09OU1RBTlQoVU5LTk9XTl9QU0tfSURFTlRJVFkpOworI2VuZGlmCisKKyN1bmRlZiBBRERfQURfQ09OU1RBTlQKKwogICAgIC8qIHByb3RvY29sIHZlcnNpb25zICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9TU0x2MiIsCkBAIC0yODQyLDYgKzM0NDEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9TU0wyMyk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxKTsKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfVExTdjFfMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8xKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfVExTdjFfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8yKTsKKyNlbmRpZgogCiAgICAgLyogcHJvdG9jb2wgb3B0aW9ucyAqLwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9BTEwiLApAQCAtMjg0OSw2ICszNDU0LDEwIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1NTTHYyIiwgU1NMX09QX05PX1NTTHYyKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fU1NMdjMiLCBTU0xfT1BfTk9fU1NMdjMpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19UTFN2MSIsIFNTTF9PUF9OT19UTFN2MSk7CisjaWYgSEFWRV9UTFN2MV8yCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1RMU3YxXzEiLCBTU0xfT1BfTk9fVExTdjFfMSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1RMU3YxXzIiLCBTU0xfT1BfTk9fVExTdjFfMik7CisjZW5kaWYKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfU0lOR0xFX0RIX1VTRSIsIFNTTF9PUF9TSU5HTEVfREhfVVNFKTsKQEAgLTI4NjAsNyArMzQ2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX09QX05PX0NPTVBSRVNTSU9OKTsKICNlbmRpZgogCi0jaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorI2lmIEhBVkVfU05JCiAgICAgciA9IFB5X1RydWU7CiAjZWxzZQogICAgIHIgPSBQeV9GYWxzZTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3N0YXQuYyBiL01vZHVsZXMvX3N0YXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzAxZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc3RhdC5jCkBAIC0wLDAgKzEsNTYzIEBACisvKiBzdGF0LmggaW50ZXJmYWNlCisgKgorICogVGhlIG1vZHVsZSBkZWZpbmVzIGFsbCBTX0lGKiwgU19JKiwgVUZfKiwgU0ZfKiBhbmQgU1RfKiBjb25zdGFudHMgdG8KKyAqIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWVzIGFzIHdlbGwgYXMgZGVmaW5lcyBTX0lTKigpIG1hY3JvcyBpbiBvcmRlciB0byBrZWVwCisgKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZCBzdGF0LnB5IG1vZHVsZS4KKyAqCisgKiBOZXcgY29uc3RhbnRzIGFuZCBtYWNyb3Mgc3VjaCBhcyBTX0lGRE9PUiAvIFNfSVNET09SKCkgYXJlIGFsd2F5cyBkZWZpbmVkCisgKiBhcyBpbnQgMC4KKyAqCisgKiBOT1RFOiBQT1NJWCBvbmx5IGRlZmluZXMgdGhlIHZhbHVlcyBvZiB0aGUgU19JKiBwZXJtaXNzaW9uIGJpdHMuCisgKgorICovCisKKyNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgorI2luY2x1ZGUgIlB5dGhvbi5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYgLyogSEFWRV9TWVNfVFlQRVNfSCAqLworCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19TVEFUX0ggKi8KKworI2lmZGVmIE1TX1dJTkRPV1MKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OworI2VuZGlmCisKKy8qIEZyb20gUHl0aG9uJ3Mgc3RhdC5weSAqLworI2lmbmRlZiBTX0lNT0RFCisjICBkZWZpbmUgU19JTU9ERSAwNzc3NworI2VuZGlmCisKKy8qIFNfSUZYWFggY29uc3RhbnRzIChmaWxlIHR5cGVzKQorICoKKyAqIE9ubHkgdGhlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IFBPU0lYIGJ1dCBub3QgdGhlaXIgdmFsdWUuIEFsbCBjb21tb24gZmlsZQorICogdHlwZXMgc2VlbXMgdG8gaGF2ZSB0aGUgc2FtZSBudW1lcmljIHZhbHVlIG9uIGFsbCBwbGF0Zm9ybXMsIHRob3VnaC4KKyAqCisgKiBweXBvcnQuaCBndWFyYW50ZWVzIFNfSUZNVCwgU19JRkRJUiwgU19JRkNIUiwgU19JRlJFRyBhbmQgU19JRkxOSworICovCisKKyNpZm5kZWYgU19JRkJMSworIyAgZGVmaW5lIFNfSUZCTEsgMDA2MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRklGTworIyAgZGVmaW5lIFNfSUZJRk8gMDAxMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRlNPQ0sKKyMgIGRlZmluZSBTX0lGU09DSyAwMTQwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGRE9PUgorIyAgZGVmaW5lIFNfSUZET09SIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZQT1JUCisjICBkZWZpbmUgU19JRlBPUlQgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRldIVAorIyAgZGVmaW5lIFNfSUZXSFQgMAorI2VuZGlmCisKKworLyogU19JU1hYWCgpCisgKiBweXBvcnQuaCBkZWZpbmVzIFNfSVNESVIoKSwgU19JU1JFRygpIGFuZCBTX0lTQ0hSKCkKKyAqLworCisjaWZuZGVmIFNfSVNCTEsKKyMgIGRlZmluZSBTX0lTQkxLKG1vZGUpICgoKG1vZGUpICYgU19JRk1UKSA9PSBTX0lGQkxLKQorI2VuZGlmCisKKyNpZm5kZWYgU19JU0ZJRk8KKyMgIGRlZmluZSBTX0lTRklGTyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRklGTykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNMTksKKyMgIGRlZmluZSBTX0lTTE5LKG1vZGUpICgoKG1vZGUpICYgU19JRk1UKSA9PSBTX0lGTE5LKQorI2VuZGlmCisKKyNpZm5kZWYgU19JU1NPQ0sKKyMgIGRlZmluZSBTX0lTU09DSyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRlNPQ0spCisjZW5kaWYKKworI2lmbmRlZiBTX0lTRE9PUgorIyAgZGVmaW5lIFNfSVNET09SKG1vZGUpIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNQT1JUCisjICBkZWZpbmUgU19JU1BPUlQobW9kZSkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU1dIVAorIyAgZGVmaW5lIFNfSVNXSFQobW9kZSkgMAorI2VuZGlmCisKKworLyogU19JKiBmaWxlIHBlcm1pc3Npb24KKyAqCisgKiBUaGUgcGVybWlzc2lvbiBiaXQgdmFsdWUgYXJlIGRlZmluZWQgYnkgUE9TSVggc3RhbmRhcmRzLgorICovCisjaWZuZGVmIFNfSVNVSUQKKyMgIGRlZmluZSBTX0lTVUlEIDA0MDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lTR0lECisjICBkZWZpbmUgU19JU0dJRCAwMjAwMAorI2VuZGlmCisKKy8qIHdoYXQgaXMgU19FTkZNVD8gKi8KKyNpZm5kZWYgU19FTkZNVAorIyAgZGVmaW5lIFNfRU5GTVQgU19JU0dJRAorI2VuZGlmCisKKyNpZm5kZWYgU19JU1ZUWAorIyAgZGVmaW5lIFNfSVNWVFggMDEwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJFQUQKKyMgIGRlZmluZSBTX0lSRUFEIDAwNDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lXUklURQorIyAgZGVmaW5lIFNfSVdSSVRFIDAwMjAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lFWEVDCisjICBkZWZpbmUgU19JRVhFQyAwMDEwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUldYVQorIyAgZGVmaW5lIFNfSVJXWFUgMDA3MDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJVU1IKKyMgIGRlZmluZSBTX0lSVVNSIDAwNDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lXVVNSCisjICBkZWZpbmUgU19JV1VTUiAwMDIwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JWFVTUgorIyAgZGVmaW5lIFNfSVhVU1IgMDAxMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJXWEcKKyMgIGRlZmluZSBTX0lSV1hHIDAwMDcwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSR1JQCisjICBkZWZpbmUgU19JUkdSUCAwMDA0MAorI2VuZGlmCisKKyNpZm5kZWYgU19JV0dSUAorIyAgZGVmaW5lIFNfSVdHUlAgMDAwMjAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhHUlAKKyMgIGRlZmluZSBTX0lYR1JQIDAwMDEwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSV1hPCisjICBkZWZpbmUgU19JUldYTyAwMDAwNworI2VuZGlmCisKKyNpZm5kZWYgU19JUk9USAorIyAgZGVmaW5lIFNfSVJPVEggMDAwMDQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVdPVEgKKyMgIGRlZmluZSBTX0lXT1RIIDAwMDAyCisjZW5kaWYKKworI2lmbmRlZiBTX0lYT1RICisjICBkZWZpbmUgU19JWE9USCAwMDAwMQorI2VuZGlmCisKKworLyogTmFtZXMgZm9yIGZpbGUgZmxhZ3MgKi8KKyNpZm5kZWYgVUZfTk9EVU1QCisjICBkZWZpbmUgVUZfTk9EVU1QIDB4MDAwMDAwMDEKKyNlbmRpZgorCisjaWZuZGVmIFVGX0lNTVVUQUJMRQorIyAgZGVmaW5lIFVGX0lNTVVUQUJMRSAweDAwMDAwMDAyCisjZW5kaWYKKworI2lmbmRlZiBVRl9BUFBFTkQKKyMgIGRlZmluZSBVRl9BUFBFTkQgMHgwMDAwMDAwNAorI2VuZGlmCisKKyNpZm5kZWYgVUZfT1BBUVVFCisjICBkZWZpbmUgVUZfT1BBUVVFIDB4MDAwMDAwMDgKKyNlbmRpZgorCisjaWZuZGVmIFVGX05PVU5MSU5LCisjICBkZWZpbmUgVUZfTk9VTkxJTksgMHgwMDAwMDAxMAorI2VuZGlmCisKKyNpZm5kZWYgVUZfQ09NUFJFU1NFRAorIyAgZGVmaW5lIFVGX0NPTVBSRVNTRUQgMHgwMDAwMDAyMAorI2VuZGlmCisKKyNpZm5kZWYgVUZfSElEREVOCisjICBkZWZpbmUgVUZfSElEREVOIDB4MDAwMDgwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX0FSQ0hJVkVECisjICBkZWZpbmUgU0ZfQVJDSElWRUQgMHgwMDAxMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfSU1NVVRBQkxFCisjICBkZWZpbmUgU0ZfSU1NVVRBQkxFIDB4MDAwMjAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX0FQUEVORAorIyAgZGVmaW5lIFNGX0FQUEVORCAweDAwMDQwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9OT1VOTElOSworIyAgZGVmaW5lIFNGX05PVU5MSU5LIDB4MDAxMDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX1NOQVBTSE9UCisjICBkZWZpbmUgU0ZfU05BUFNIT1QgMHgwMDIwMDAwMAorI2VuZGlmCisKK3N0YXRpYyBtb2RlX3QKK19QeUxvbmdfQXNNb2RlX3QoUHlPYmplY3QgKm9wKQoreworICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisgICAgbW9kZV90IG1vZGU7CisKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvcCk7CisgICAgaWYgKCh2YWx1ZSA9PSAodW5zaWduZWQgbG9uZyktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIChtb2RlX3QpLTE7CisKKyAgICBtb2RlID0gKG1vZGVfdCl2YWx1ZTsKKyAgICBpZiAoKHVuc2lnbmVkIGxvbmcpbW9kZSAhPSB2YWx1ZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgIm1vZGUgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiAobW9kZV90KS0xOworICAgIH0KKyAgICByZXR1cm4gbW9kZTsKK30KKworCisjZGVmaW5lIHN0YXRfU19JU0ZVTkMoaXNmdW5jLCBkb2MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGljIFB5T2JqZWN0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdF8gIyNpc2Z1bmMgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb21vZGUpICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgbW9kZV90IG1vZGUgPSBfUHlMb25nX0FzTW9kZV90KG9tb2RlKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSAgICAgICAgICAgXAorICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoaXNmdW5jKG1vZGUpKTsgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFB5RG9jX1NUUlZBUihzdGF0XyAjIyBpc2Z1bmMgIyMgX2RvYywgZG9jKQorCitzdGF0X1NfSVNGVU5DKFNfSVNESVIsCisgICAgIlNfSVNESVIobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIGRpcmVjdG9yeS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTQ0hSLAorICAgICJTX0lTQ0hSKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBjaGFyYWN0ZXIgc3BlY2lhbCBkZXZpY2UgZmlsZS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTQkxLLAorICAgICJTX0lTQkxLKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBibG9jayBzcGVjaWFsIGRldmljZSBmaWxlLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNSRUcsCisgICAgIlNfSVNSRUcobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIHJlZ3VsYXIgZmlsZS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTRklGTywKKyAgICAiU19JU0ZJRk8obW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIEZJRk8gKG5hbWVkIHBpcGUpLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNMTkssCisgICAgIlNfSVNMTksobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIHN5bWJvbGljIGxpbmsuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU1NPQ0ssCisgICAgIlNfSVNTT0NLKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBzb2NrZXQuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0RPT1IsCisgICAgIlNfSVNET09SKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBkb29yLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNQT1JULAorICAgICJTX0lTUE9SVChtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGFuIGV2ZW50IHBvcnQuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU1dIVCwKKyAgICAiU19JU1dIVChtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgd2hpdGVvdXQuIik7CisKKworUHlEb2NfU1RSVkFSKHN0YXRfU19JTU9ERV9kb2MsCisiUmV0dXJuIHRoZSBwb3J0aW9uIG9mIHRoZSBmaWxlJ3MgbW9kZSB0aGF0IGNhbiBiZSBzZXQgYnkgb3MuY2htb2QoKS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0YXRfU19JTU9ERShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9tb2RlKQoreworICAgIG1vZGVfdCBtb2RlID0gX1B5TG9uZ19Bc01vZGVfdChvbW9kZSk7CisgICAgaWYgKChtb2RlID09IChtb2RlX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtb2RlICYgU19JTU9ERSk7Cit9CisKKworUHlEb2NfU1RSVkFSKHN0YXRfU19JRk1UX2RvYywKKyJSZXR1cm4gdGhlIHBvcnRpb24gb2YgdGhlIGZpbGUncyBtb2RlIHRoYXQgZGVzY3JpYmVzIHRoZSBmaWxlIHR5cGUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdGF0X1NfSUZNVChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9tb2RlKQoreworICAgIG1vZGVfdCBtb2RlID0gX1B5TG9uZ19Bc01vZGVfdChvbW9kZSk7CisgICAgaWYgKChtb2RlID09IChtb2RlX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtb2RlICYgU19JRk1UKTsKK30KKworLyogZmlsZSB0eXBlIGNoYXJzIGFjY29yZGluZyB0bworICAgaHR0cDovL2VuLndpa2lib29rcy5vcmcvd2lraS9DX1Byb2dyYW1taW5nL1BPU0lYX1JlZmVyZW5jZS9zeXMvc3RhdC5oICovCisKK3N0YXRpYyBjaGFyCitmaWxldHlwZShtb2RlX3QgbW9kZSkKK3sKKyAgICAvKiBjb21tb24gY2FzZXMgZmlyc3QgKi8KKyAgICBpZiAoU19JU1JFRyhtb2RlKSkgIHJldHVybiAnLSc7CisgICAgaWYgKFNfSVNESVIobW9kZSkpICByZXR1cm4gJ2QnOworICAgIGlmIChTX0lTTE5LKG1vZGUpKSAgcmV0dXJuICdsJzsKKyAgICAvKiBzcGVjaWFsIGZpbGVzICovCisgICAgaWYgKFNfSVNCTEsobW9kZSkpICByZXR1cm4gJ2InOworICAgIGlmIChTX0lTQ0hSKG1vZGUpKSAgcmV0dXJuICdjJzsKKyAgICBpZiAoU19JU0ZJRk8obW9kZSkpIHJldHVybiAncCc7CisgICAgaWYgKFNfSVNTT0NLKG1vZGUpKSByZXR1cm4gJ3MnOworICAgIC8qIG5vbi1zdGFuZGFyZCB0eXBlcyAqLworICAgIGlmIChTX0lTRE9PUihtb2RlKSkgcmV0dXJuICdEJzsKKyAgICBpZiAoU19JU1BPUlQobW9kZSkpIHJldHVybiAnUCc7CisgICAgaWYgKFNfSVNXSFQobW9kZSkpICByZXR1cm4gJ3cnOworICAgIC8qIHVua25vd24gKi8KKyAgICByZXR1cm4gJz8nOworfQorCitzdGF0aWMgdm9pZAorZmlsZXBlcm0obW9kZV90IG1vZGUsIGNoYXIgKmJ1ZikKK3sKKyAgICBidWZbMF0gPSBtb2RlICYgU19JUlVTUiA/ICdyJyA6ICctJzsKKyAgICBidWZbMV0gPSBtb2RlICYgU19JV1VTUiA/ICd3JyA6ICctJzsKKyAgICBpZiAobW9kZSAmIFNfSVNVSUQpIHsKKyAgICAgICAgYnVmWzJdID0gbW9kZSAmIFNfSVhVU1IgPyAncycgOiAnUyc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmWzJdID0gbW9kZSAmIFNfSVhVU1IgPyAneCcgOiAnLSc7CisgICAgfQorICAgIGJ1ZlszXSA9IG1vZGUgJiBTX0lSR1JQID8gJ3InIDogJy0nOworICAgIGJ1Zls0XSA9IG1vZGUgJiBTX0lXR1JQID8gJ3cnIDogJy0nOworICAgIGlmIChtb2RlICYgU19JU0dJRCkgeworICAgICAgICBidWZbNV0gPSBtb2RlICYgU19JWEdSUCA/ICdzJyA6ICdTJzsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZbNV0gPSBtb2RlICYgU19JWEdSUCA/ICd4JyA6ICctJzsKKyAgICB9CisgICAgYnVmWzZdID0gbW9kZSAmIFNfSVJPVEggPyAncicgOiAnLSc7CisgICAgYnVmWzddID0gbW9kZSAmIFNfSVdPVEggPyAndycgOiAnLSc7CisgICAgaWYgKG1vZGUgJiBTX0lTVlRYKSB7CisgICAgICAgIGJ1Zls4XSA9IG1vZGUgJiBTX0lYT1RIID8gJ3QnIDogJ1QnOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1Zls4XSA9IG1vZGUgJiBTX0lYT1RIID8gJ3gnIDogJy0nOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKHN0YXRfZmlsZW1vZGVfZG9jLAorIkNvbnZlcnQgYSBmaWxlJ3MgbW9kZSB0byBhIHN0cmluZyBvZiB0aGUgZm9ybSAnLXJ3eHJ3eHJ3eCciKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0YXRfZmlsZW1vZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkKK3sKKyAgICBjaGFyIGJ1ZlsxMF07CisgICAgbW9kZV90IG1vZGU7CisKKyAgICBtb2RlID0gX1B5TG9uZ19Bc01vZGVfdChvbW9kZSk7CisgICAgaWYgKChtb2RlID09IChtb2RlX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYnVmWzBdID0gZmlsZXR5cGUobW9kZSk7CisgICAgZmlsZXBlcm0obW9kZSwgJmJ1ZlsxXSk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIDEwKTsKK30KKworCitzdGF0aWMgUHlNZXRob2REZWYgc3RhdF9tZXRob2RzW10gPSB7CisgICAgeyJTX0lTRElSIiwgICAgICAgICBzdGF0X1NfSVNESVIsICBNRVRIX08sIHN0YXRfU19JU0RJUl9kb2N9LAorICAgIHsiU19JU0NIUiIsICAgICAgICAgc3RhdF9TX0lTQ0hSLCAgTUVUSF9PLCBzdGF0X1NfSVNDSFJfZG9jfSwKKyAgICB7IlNfSVNCTEsiLCAgICAgICAgIHN0YXRfU19JU0JMSywgIE1FVEhfTywgc3RhdF9TX0lTQkxLX2RvY30sCisgICAgeyJTX0lTUkVHIiwgICAgICAgICBzdGF0X1NfSVNSRUcsICBNRVRIX08sIHN0YXRfU19JU1JFR19kb2N9LAorICAgIHsiU19JU0ZJRk8iLCAgICAgICAgc3RhdF9TX0lTRklGTywgTUVUSF9PLCBzdGF0X1NfSVNGSUZPX2RvY30sCisgICAgeyJTX0lTTE5LIiwgICAgICAgICBzdGF0X1NfSVNMTkssICBNRVRIX08sIHN0YXRfU19JU0xOS19kb2N9LAorICAgIHsiU19JU1NPQ0siLCAgICAgICAgc3RhdF9TX0lTU09DSywgTUVUSF9PLCBzdGF0X1NfSVNTT0NLX2RvY30sCisgICAgeyJTX0lTRE9PUiIsICAgICAgICBzdGF0X1NfSVNET09SLCBNRVRIX08sIHN0YXRfU19JU0RPT1JfZG9jfSwKKyAgICB7IlNfSVNQT1JUIiwgICAgICAgIHN0YXRfU19JU1BPUlQsIE1FVEhfTywgc3RhdF9TX0lTUE9SVF9kb2N9LAorICAgIHsiU19JU1dIVCIsICAgICAgICAgc3RhdF9TX0lTV0hULCAgTUVUSF9PLCBzdGF0X1NfSVNXSFRfZG9jfSwKKyAgICB7IlNfSU1PREUiLCAgICAgICAgIHN0YXRfU19JTU9ERSwgIE1FVEhfTywgc3RhdF9TX0lNT0RFX2RvY30sCisgICAgeyJTX0lGTVQiLCAgICAgICAgICBzdGF0X1NfSUZNVCwgICBNRVRIX08sIHN0YXRfU19JRk1UX2RvY30sCisgICAgeyJmaWxlbW9kZSIsICAgICAgICBzdGF0X2ZpbGVtb2RlLCBNRVRIX08sIHN0YXRfZmlsZW1vZGVfZG9jfSwKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworCitQeURvY19TVFJWQVIobW9kdWxlX2RvYywKKyJTX0lGTVRfOiBmaWxlIHR5cGUgYml0c1xuXAorU19JRkRJUjogZGlyZWN0b3J5XG5cCitTX0lGQ0hSOiBjaGFyYWN0ZXIgZGV2aWNlXG5cCitTX0lGQkxLOiBibG9jayBkZXZpY2VcblwKK1NfSUZSRUc6IHJlZ3VsYXIgZmlsZVxuXAorU19JRklGTzogZmlmbyAobmFtZWQgcGlwZSlcblwKK1NfSUZMTks6IHN5bWJvbGljIGxpbmtcblwKK1NfSUZTT0NLOiBzb2NrZXQgZmlsZVxuXAorU19JRkRPT1I6IGRvb3JcblwKK1NfSUZQT1JUOiBldmVudCBwb3J0XG5cCitTX0lGV0hUOiB3aGl0ZW91dFxuXAorXG4iCisKKyJTX0lTVUlEOiBzZXQgVUlEIGJpdFxuXAorU19JU0dJRDogc2V0IEdJRCBiaXRcblwKK1NfRU5GTVQ6IGZpbGUgbG9ja2luZyBlbmZvcmNlbWVudFxuXAorU19JU1ZUWDogc3RpY2t5IGJpdFxuXAorU19JUkVBRDogVW5peCBWNyBzeW5vbnltIGZvciBTX0lSVVNSXG5cCitTX0lXUklURTogVW5peCBWNyBzeW5vbnltIGZvciBTX0lXVVNSXG5cCitTX0lFWEVDOiBVbml4IFY3IHN5bm9ueW0gZm9yIFNfSVhVU1JcblwKK1NfSVJXWFU6IG1hc2sgZm9yIG93bmVyIHBlcm1pc3Npb25zXG5cCitTX0lSVVNSOiByZWFkIGJ5IG93bmVyXG5cCitTX0lXVVNSOiB3cml0ZSBieSBvd25lclxuXAorU19JWFVTUjogZXhlY3V0ZSBieSBvd25lclxuXAorU19JUldYRzogbWFzayBmb3IgZ3JvdXAgcGVybWlzc2lvbnNcblwKK1NfSVJHUlA6IHJlYWQgYnkgZ3JvdXBcblwKK1NfSVdHUlA6IHdyaXRlIGJ5IGdyb3VwXG5cCitTX0lYR1JQOiBleGVjdXRlIGJ5IGdyb3VwXG5cCitTX0lSV1hPOiBtYXNrIGZvciBvdGhlcnMgKG5vdCBpbiBncm91cCkgcGVybWlzc2lvbnNcblwKK1NfSVJPVEg6IHJlYWQgYnkgb3RoZXJzXG5cCitTX0lXT1RIOiB3cml0ZSBieSBvdGhlcnNcblwKK1NfSVhPVEg6IGV4ZWN1dGUgYnkgb3RoZXJzXG5cCitcbiIKKworIlVGX05PRFVNUDogZG8gbm90IGR1bXAgZmlsZVxuXAorVUZfSU1NVVRBQkxFOiBmaWxlIG1heSBub3QgYmUgY2hhbmdlZFxuXAorVUZfQVBQRU5EOiBmaWxlIG1heSBvbmx5IGJlIGFwcGVuZGVkIHRvXG5cCitVRl9PUEFRVUU6IGRpcmVjdG9yeSBpcyBvcGFxdWUgd2hlbiB2aWV3ZWQgdGhyb3VnaCBhIHVuaW9uIHN0YWNrXG5cCitVRl9OT1VOTElOSzogZmlsZSBtYXkgbm90IGJlIHJlbmFtZWQgb3IgZGVsZXRlZFxuXAorVUZfQ09NUFJFU1NFRDogT1MgWDogZmlsZSBpcyBoZnMtY29tcHJlc3NlZFxuXAorVUZfSElEREVOOiBPUyBYOiBmaWxlIHNob3VsZCBub3QgYmUgZGlzcGxheWVkXG5cCitTRl9BUkNISVZFRDogZmlsZSBtYXkgYmUgYXJjaGl2ZWRcblwKK1NGX0lNTVVUQUJMRTogZmlsZSBtYXkgbm90IGJlIGNoYW5nZWRcblwKK1NGX0FQUEVORDogZmlsZSBtYXkgb25seSBiZSBhcHBlbmRlZCB0b1xuXAorU0ZfTk9VTkxJTks6IGZpbGUgbWF5IG5vdCBiZSByZW5hbWVkIG9yIGRlbGV0ZWRcblwKK1NGX1NOQVBTSE9UOiBmaWxlIGlzIGEgc25hcHNob3QgZmlsZVxuXAorXG4iCisKKyJTVF9NT0RFXG5cCitTVF9JTk9cblwKK1NUX0RFVlxuXAorU1RfTkxJTktcblwKK1NUX1VJRFxuXAorU1RfR0lEXG5cCitTVF9TSVpFXG5cCitTVF9BVElNRVxuXAorU1RfTVRJTUVcblwKK1NUX0NUSU1FXG5cCisiKTsKKworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIHN0YXRtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfc3RhdCIsCisgICAgbW9kdWxlX2RvYywKKyAgICAtMSwKKyAgICBzdGF0X21ldGhvZHMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fc3RhdCh2b2lkKQoreworICAgIFB5T2JqZWN0ICptOworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnN0YXRtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZESVIpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkNIUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGQkxLKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZSRUcpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRklGTykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGTE5LKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZTT0NLKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZET09SKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZQT1JUKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZXSFQpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lTVUlEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVNHSUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JU1ZUWCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0VORk1UKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUkVBRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lXUklURSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lFWEVDKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUldYVSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSVVNSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVdVU1IpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JWFVTUikpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJXWEcpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUkdSUCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lXR1JQKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVhHUlApKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSV1hPKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJPVEgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV09USCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lYT1RIKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfTk9EVU1QKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX0lNTVVUQUJMRSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9BUFBFTkQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfT1BBUVVFKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX05PVU5MSU5LKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX0NPTVBSRVNTRUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfSElEREVOKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX0FSQ0hJVkVEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX0lNTVVUQUJMRSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9BUFBFTkQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfTk9VTkxJTkspKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfU05BUFNIT1QpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfTU9ERSIsIDApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0lOTyIsIDEpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0RFViIsIDIpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX05MSU5LIiwgMykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfVUlEIiwgNCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfR0lEIiwgNSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfU0laRSIsIDYpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0FUSU1FIiwgNykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfTVRJTUUiLCA4KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9DVElNRSIsIDkpKSByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBtOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3RydWN0LmMgYi9Nb2R1bGVzL19zdHJ1Y3QuYwppbmRleCBhMjQ4NzUzLi4zZDUxNWQ1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zdHJ1Y3QuYworKysgYi9Nb2R1bGVzL19zdHJ1Y3QuYwpAQCAtMjYsNiArMjYsNyBAQAogICAgIGNvbnN0IHN0cnVjdCBfZm9ybWF0ZGVmICpmbXRkZWY7CiAgICAgUHlfc3NpemVfdCBvZmZzZXQ7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIFB5X3NzaXplX3QgcmVwZWF0OwogfSBmb3JtYXRjb2RlOwogCiAvKiBTdHJ1Y3Qgb2JqZWN0IGludGVyZmFjZSAqLwpAQCAtMTE5OSwxMiArMTIwMCwxMSBAQAogICAgIGNhc2UgJyEnOiAvKiBOZXR3b3JrIGJ5dGUgb3JkZXIgaXMgYmlnLWVuZGlhbiAqLwogICAgICAgICByZXR1cm4gYmlnZW5kaWFuX3RhYmxlOwogICAgIGNhc2UgJz0nOiB7IC8qIEhvc3QgYnl0ZSBvcmRlciAtLSBkaWZmZXJlbnQgZnJvbSBuYXRpdmUgaW4gYWxpZ25tZW50ISAqLwotICAgICAgICBpbnQgbiA9IDE7Ci0gICAgICAgIGNoYXIgKnAgPSAoY2hhciAqKSAmbjsKLSAgICAgICAgaWYgKCpwID09IDEpCi0gICAgICAgICAgICByZXR1cm4gbGlsZW5kaWFuX3RhYmxlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gYmlnZW5kaWFuX3RhYmxlOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgcmV0dXJuIGxpbGVuZGlhbl90YWJsZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBiaWdlbmRpYW5fdGFibGU7CisjZW5kaWYKICAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgLS0qcGZtdDsgLyogQmFjayBvdXQgb2YgcG9pbnRlciBpbmNyZW1lbnQgKi8KQEAgLTEyNDgsNiArMTI0OCw5IEBACiAgICAgcmV0dXJuIHNpemU7CiB9CiAKKy8qCisgKiBTdHJ1Y3Qgb2JqZWN0IGltcGxlbWVudGF0aW9uLgorICovCiAKIC8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIGZvcm1hdCBzdHJpbmcgKi8KIApAQCAtMTI2MSw3ICsxMjY0LDcgQEAKICAgICBjb25zdCBjaGFyICpzOwogICAgIGNvbnN0IGNoYXIgKmZtdDsKICAgICBjaGFyIGM7Ci0gICAgUHlfc3NpemVfdCBzaXplLCBsZW4sIG51bSwgaXRlbXNpemU7CisgICAgUHlfc3NpemVfdCBzaXplLCBsZW4sIG5jb2RlcywgbnVtLCBpdGVtc2l6ZTsKIAogICAgIGZtdCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPnNfZm9ybWF0KTsKIApAQCAtMTI3MCw2ICsxMjczLDcgQEAKICAgICBzID0gZm10OwogICAgIHNpemUgPSAwOwogICAgIGxlbiA9IDA7CisgICAgbmNvZGVzID0gMDsKICAgICB3aGlsZSAoKGMgPSAqcysrKSAhPSAnXDAnKSB7CiAgICAgICAgIGlmIChQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKGMpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI5OSw5ICsxMzAzLDkgQEAKIAogICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICAgICAgIGNhc2UgJ3MnOiAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgICAgICAgIGNhc2UgJ3AnOiBsZW4rKzsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdwJzogbGVuKys7IG5jb2RlcysrOyBicmVhazsKICAgICAgICAgICAgIGNhc2UgJ3gnOiBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IGxlbiArPSBudW07IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogbGVuICs9IG51bTsgaWYgKG51bSkgbmNvZGVzKys7IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgaXRlbXNpemUgPSBlLT5zaXplOwpAQCAtMTMxNiwxNCArMTMyMCwxNCBAQAogICAgIH0KIAogICAgIC8qIGNoZWNrIGZvciBvdmVyZmxvdyAqLwotICAgIGlmICgobGVuICsgMSkgPiAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoZm9ybWF0Y29kZSkpKSB7CisgICAgaWYgKChuY29kZXMgKyAxKSA+IChQWV9TU0laRV9UX01BWCAvIHNpemVvZihmb3JtYXRjb2RlKSkpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIHNlbGYtPnNfc2l6ZSA9IHNpemU7CiAgICAgc2VsZi0+c19sZW4gPSBsZW47Ci0gICAgY29kZXMgPSBQeU1lbV9NQUxMT0MoKGxlbiArIDEpICogc2l6ZW9mKGZvcm1hdGNvZGUpKTsKKyAgICBjb2RlcyA9IFB5TWVtX01BTExPQygobmNvZGVzICsgMSkgKiBzaXplb2YoZm9ybWF0Y29kZSkpOwogICAgIGlmIChjb2RlcyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEzNTUsMjMgKzEzNTksMjQgQEAKICAgICAgICAgICAgIGNvZGVzLT5vZmZzZXQgPSBzaXplOwogICAgICAgICAgICAgY29kZXMtPnNpemUgPSBudW07CiAgICAgICAgICAgICBjb2Rlcy0+Zm10ZGVmID0gZTsKKyAgICAgICAgICAgIGNvZGVzLT5yZXBlYXQgPSAxOwogICAgICAgICAgICAgY29kZXMrKzsKICAgICAgICAgICAgIHNpemUgKz0gbnVtOwogICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ3gnKSB7CiAgICAgICAgICAgICBzaXplICs9IG51bTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdoaWxlICgtLW51bSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgY29kZXMtPm9mZnNldCA9IHNpemU7Ci0gICAgICAgICAgICAgICAgY29kZXMtPnNpemUgPSBlLT5zaXplOwotICAgICAgICAgICAgICAgIGNvZGVzLT5mbXRkZWYgPSBlOwotICAgICAgICAgICAgICAgIGNvZGVzKys7Ci0gICAgICAgICAgICAgICAgc2l6ZSArPSBlLT5zaXplOwotICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG51bSkgeworICAgICAgICAgICAgY29kZXMtPm9mZnNldCA9IHNpemU7CisgICAgICAgICAgICBjb2Rlcy0+c2l6ZSA9IGUtPnNpemU7CisgICAgICAgICAgICBjb2Rlcy0+Zm10ZGVmID0gZTsKKyAgICAgICAgICAgIGNvZGVzLT5yZXBlYXQgPSBudW07CisgICAgICAgICAgICBjb2RlcysrOworICAgICAgICAgICAgc2l6ZSArPSBlLT5zaXplICogbnVtOwogICAgICAgICB9CiAgICAgfQogICAgIGNvZGVzLT5mbXRkZWYgPSBOVUxMOwogICAgIGNvZGVzLT5vZmZzZXQgPSBzaXplOwogICAgIGNvZGVzLT5zaXplID0gMDsKKyAgICBjb2Rlcy0+cmVwZWF0ID0gMDsKIAogICAgIHJldHVybiAwOwogCkBAIC0xNDYwLDIyICsxNDY1LDI2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZm9yIChjb2RlID0gc29zZWxmLT5zX2NvZGVzOyBjb2RlLT5mbXRkZWYgIT0gTlVMTDsgY29kZSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp2OwogICAgICAgICBjb25zdCBmb3JtYXRkZWYgKmUgPSBjb2RlLT5mbXRkZWY7CiAgICAgICAgIGNvbnN0IGNoYXIgKnJlcyA9IHN0YXJ0ZnJvbSArIGNvZGUtPm9mZnNldDsKLSAgICAgICAgaWYgKGUtPmZvcm1hdCA9PSAncycpIHsKLSAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHJlcywgY29kZS0+c2l6ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZS0+Zm9ybWF0ID09ICdwJykgewotICAgICAgICAgICAgUHlfc3NpemVfdCBuID0gKih1bnNpZ25lZCBjaGFyKilyZXM7Ci0gICAgICAgICAgICBpZiAobiA+PSBjb2RlLT5zaXplKQotICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplIC0gMTsKLSAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHJlcyArIDEsIG4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdiA9IGUtPnVucGFjayhyZXMsIGUpOworICAgICAgICBQeV9zc2l6ZV90IGogPSBjb2RlLT5yZXBlYXQ7CisgICAgICAgIHdoaWxlIChqLS0pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2OworICAgICAgICAgICAgaWYgKGUtPmZvcm1hdCA9PSAncycpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShyZXMsIGNvZGUtPnNpemUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuID0gKih1bnNpZ25lZCBjaGFyKilyZXM7CisgICAgICAgICAgICAgICAgaWYgKG4gPj0gY29kZS0+c2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemUgLSAxOworICAgICAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHJlcyArIDEsIG4pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2ID0gZS0+dW5wYWNrKHJlcywgZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpKyssIHYpOworICAgICAgICAgICAgcmVzICs9IGNvZGUtPnNpemU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIGkrKywgdik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1NTcsNiArMTU2NiwxNDIgQEAKIH0KIAogCisvKiBVbnBhY2sgaXRlcmF0b3IgdHlwZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5U3RydWN0T2JqZWN0ICpzbzsKKyAgICBQeV9idWZmZXIgYnVmOworICAgIFB5X3NzaXplX3QgaW5kZXg7Cit9IHVucGFja2l0ZXJvYmplY3Q7CisKK3N0YXRpYyB2b2lkCit1bnBhY2tpdGVyX2RlYWxsb2ModW5wYWNraXRlcm9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9YREVDUkVGKHNlbGYtPnNvKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT5idWYpOworICAgIFB5T2JqZWN0X0dDX0RlbChzZWxmKTsKK30KKworc3RhdGljIGludAordW5wYWNraXRlcl90cmF2ZXJzZSh1bnBhY2tpdGVyb2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5zbyk7CisgICAgUHlfVklTSVQoc2VsZi0+YnVmLm9iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bnBhY2tpdGVyX2xlbih1bnBhY2tpdGVyb2JqZWN0ICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGlmIChzZWxmLT5zbyA9PSBOVUxMKQorICAgICAgICBsZW4gPSAwOworICAgIGVsc2UKKyAgICAgICAgbGVuID0gKHNlbGYtPmJ1Zi5sZW4gLSBzZWxmLT5pbmRleCkgLyBzZWxmLT5zby0+c19zaXplOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobGVuKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIHVucGFja2l0ZXJfbWV0aG9kc1tdID0geworICAgIHsiX19sZW5ndGhfaGludF9fIiwgKFB5Q0Z1bmN0aW9uKSB1bnBhY2tpdGVyX2xlbiwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlPYmplY3QgKgordW5wYWNraXRlcl9pdGVybmV4dCh1bnBhY2tpdGVyb2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgaWYgKHNlbGYtPnNvID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzZWxmLT5pbmRleCA+PSBzZWxmLT5idWYubGVuKSB7CisgICAgICAgIC8qIEl0ZXJhdG9yIGV4aGF1c3RlZCAqLworICAgICAgICBQeV9DTEVBUihzZWxmLT5zbyk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1Zik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBhc3NlcnQoc2VsZi0+aW5kZXggKyBzZWxmLT5zby0+c19zaXplIDw9IHNlbGYtPmJ1Zi5sZW4pOworICAgIHJlc3VsdCA9IHNfdW5wYWNrX2ludGVybmFsKHNlbGYtPnNvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKikgc2VsZi0+YnVmLmJ1ZiArIHNlbGYtPmluZGV4KTsKKyAgICBzZWxmLT5pbmRleCArPSBzZWxmLT5zby0+c19zaXplOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B5VHlwZU9iamVjdCB1bnBhY2tpdGVyX3R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAidW5wYWNrX2l0ZXJhdG9yIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YodW5wYWNraXRlcm9iamVjdCksICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAoZGVzdHJ1Y3Rvcil1bnBhY2tpdGVyX2RlYWxsb2MsICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpdW5wYWNraXRlcl90cmF2ZXJzZSwgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBQeU9iamVjdF9TZWxmSXRlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAoaXRlcm5leHRmdW5jKXVucGFja2l0ZXJfaXRlcm5leHQsICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgdW5wYWNraXRlcl9tZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCit9OworCitQeURvY19TVFJWQVIoc19pdGVyX3VucGFja19fZG9jX18sCisiUy5pdGVyX3VucGFjayhidWZmZXIpIC0+IGl0ZXJhdG9yKHYxLCB2MiwgLi4uKVxuXAorXG5cCitSZXR1cm4gYW4gaXRlcmF0b3IgeWllbGRpbmcgdHVwbGVzIHVucGFja2VkIGZyb20gdGhlIGdpdmVuIGJ5dGVzXG5cCitzb3VyY2UsIGxpa2UgYSByZXBlYXRlZCBpbnZvY2F0aW9uIG9mIHVucGFja19mcm9tKCkuICBSZXF1aXJlc1xuXAordGhhdCB0aGUgYnl0ZXMgbGVuZ3RoIGJlIGEgbXVsdGlwbGUgb2YgdGhlIHN0cnVjdCBzaXplLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc19pdGVyX3VucGFjayhQeU9iamVjdCAqX3NvLCBQeU9iamVjdCAqaW5wdXQpCit7CisgICAgUHlTdHJ1Y3RPYmplY3QgKnNvID0gKFB5U3RydWN0T2JqZWN0ICopIF9zbzsKKyAgICB1bnBhY2tpdGVyb2JqZWN0ICpzZWxmOworCisgICAgYXNzZXJ0KFB5U3RydWN0X0NoZWNrKF9zbykpOworICAgIGFzc2VydChzby0+c19jb2RlcyAhPSBOVUxMKTsKKworICAgIGlmIChzby0+c19zaXplID09IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFN0cnVjdEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBpdGVyYXRpdmVseSB1bnBhY2sgd2l0aCBhIHN0cnVjdCBvZiBsZW5ndGggMCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZWxmID0gKHVucGFja2l0ZXJvYmplY3QgKikgUHlUeXBlX0dlbmVyaWNBbGxvYygmdW5wYWNraXRlcl90eXBlLCAwKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoaW5wdXQsICZzZWxmLT5idWYsIFB5QlVGX1NJTVBMRSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChzZWxmLT5idWYubGVuICUgc28tPnNfc2l6ZSAhPSAwKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpdmUgdW5wYWNraW5nIHJlcXVpcmVzIGEgYnl0ZXMgbGVuZ3RoICIKKyAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBvZiAlemQiLAorICAgICAgICAgICAgICAgICAgICAgc28tPnNfc2l6ZSk7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihzbyk7CisgICAgc2VsZi0+c28gPSBzbzsKKyAgICBzZWxmLT5pbmRleCA9IDA7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKSBzZWxmOworfQorCisKIC8qCiAgKiBHdXRzIG9mIHRoZSBwYWNrIGZ1bmN0aW9uLgogICoKQEAgLTE1NzgsNjIgKzE3MjMsNjcgQEAKICAgICBtZW1zZXQoYnVmLCAnXDAnLCBzb3NlbGYtPnNfc2l6ZSk7CiAgICAgaSA9IG9mZnNldDsKICAgICBmb3IgKGNvZGUgPSBzb3NlbGYtPnNfY29kZXM7IGNvZGUtPmZtdGRlZiAhPSBOVUxMOyBjb2RlKyspIHsKLSAgICAgICAgUHlfc3NpemVfdCBuOwotICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgaSsrKTsKICAgICAgICAgY29uc3QgZm9ybWF0ZGVmICplID0gY29kZS0+Zm10ZGVmOwogICAgICAgICBjaGFyICpyZXMgPSBidWYgKyBjb2RlLT5vZmZzZXQ7Ci0gICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7Ci0gICAgICAgICAgICBpbnQgaXNzdHJpbmc7Ci0gICAgICAgICAgICB2b2lkICpwOwotICAgICAgICAgICAgaXNzdHJpbmcgPSBQeUJ5dGVzX0NoZWNrKHYpOwotICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3MnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7Ci0gICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuID4gY29kZS0+c2l6ZSkKLSAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZTsKLSAgICAgICAgICAgIGlmIChuID4gMCkKLSAgICAgICAgICAgICAgICBtZW1jcHkocmVzLCBwLCBuKTsKLSAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7Ci0gICAgICAgICAgICBpbnQgaXNzdHJpbmc7Ci0gICAgICAgICAgICB2b2lkICpwOwotICAgICAgICAgICAgaXNzdHJpbmcgPSBQeUJ5dGVzX0NoZWNrKHYpOwotICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3AnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7Ci0gICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuID4gKGNvZGUtPnNpemUgLSAxKSkKLSAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZSAtIDE7Ci0gICAgICAgICAgICBpZiAobiA+IDApCi0gICAgICAgICAgICAgICAgbWVtY3B5KHJlcyArIDEsIHAsIG4pOwotICAgICAgICAgICAgaWYgKG4gPiAyNTUpCi0gICAgICAgICAgICAgICAgbiA9IDI1NTsKLSAgICAgICAgICAgICpyZXMgPSBQeV9TQUZFX0RPV05DQVNUKG4sIFB5X3NzaXplX3QsIHVuc2lnbmVkIGNoYXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGUtPnBhY2socmVzLCB2LCBlKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgIFB5X3NzaXplX3QgaiA9IGNvZGUtPnJlcGVhdDsKKyAgICAgICAgd2hpbGUgKGotLSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIGkrKyk7CisgICAgICAgICAgICBpZiAoZS0+Zm9ybWF0ID09ICdzJykgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbjsKKyAgICAgICAgICAgICAgICBpbnQgaXNzdHJpbmc7CisgICAgICAgICAgICAgICAgdm9pZCAqcDsKKyAgICAgICAgICAgICAgICBpc3N0cmluZyA9IFB5Qnl0ZXNfQ2hlY2sodik7CisgICAgICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3MnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodik7CisgICAgICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRSh2KTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG4gPiBjb2RlLT5zaXplKQorICAgICAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IDApCisgICAgICAgICAgICAgICAgICAgIG1lbWNweShyZXMsIHAsIG4pOworICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuOworICAgICAgICAgICAgICAgIGludCBpc3N0cmluZzsKKyAgICAgICAgICAgICAgICB2b2lkICpwOworICAgICAgICAgICAgICAgIGlzc3RyaW5nID0gUHlCeXRlc19DaGVjayh2KTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdwJyBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlzc3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOworICAgICAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7CisgICAgICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuID4gKGNvZGUtPnNpemUgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemUgLSAxOworICAgICAgICAgICAgICAgIGlmIChuID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHJlcyArIDEsIHAsIG4pOworICAgICAgICAgICAgICAgIGlmIChuID4gMjU1KQorICAgICAgICAgICAgICAgICAgICBuID0gMjU1OworICAgICAgICAgICAgICAgICpyZXMgPSBQeV9TQUZFX0RPV05DQVNUKG4sIFB5X3NzaXplX3QsIHVuc2lnbmVkIGNoYXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZS0+cGFjayhyZXMsIHYsIGUpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzICs9IGNvZGUtPnNpemU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3NjksMTQgKzE5MTksMTggQEAKIHNfc2l6ZW9mKFB5U3RydWN0T2JqZWN0ICpzZWxmLCB2b2lkICp1bnVzZWQpCiB7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIGZvcm1hdGNvZGUgKmNvZGU7CiAKLSAgICBzaXplID0gc2l6ZW9mKFB5U3RydWN0T2JqZWN0KSArIHNpemVvZihmb3JtYXRjb2RlKSAqIChzZWxmLT5zX2xlbiArIDEpOworICAgIHNpemUgPSBzaXplb2YoUHlTdHJ1Y3RPYmplY3QpICsgc2l6ZW9mKGZvcm1hdGNvZGUpOworICAgIGZvciAoY29kZSA9IHNlbGYtPnNfY29kZXM7IGNvZGUtPmZtdGRlZiAhPSBOVUxMOyBjb2RlKyspCisgICAgICAgIHNpemUgKz0gc2l6ZW9mKGZvcm1hdGNvZGUpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2l6ZSk7CiB9CiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zICovCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgc19tZXRob2RzW10gPSB7CisgICAgeyJpdGVyX3VucGFjayIsICAgICBzX2l0ZXJfdW5wYWNrLCAgTUVUSF9PLCBzX2l0ZXJfdW5wYWNrX19kb2NfX30sCiAgICAgeyJwYWNrIiwgICAgICAgICAgICBzX3BhY2ssICAgICAgICAgTUVUSF9WQVJBUkdTLCBzX3BhY2tfX2RvY19ffSwKICAgICB7InBhY2tfaW50byIsICAgICAgIHNfcGFja19pbnRvLCAgICBNRVRIX1ZBUkFSR1MsIHNfcGFja19pbnRvX19kb2NfX30sCiAgICAgeyJ1bnBhY2siLCAgICAgICAgICBzX3VucGFjaywgICAgICAgTUVUSF9PLCBzX3VucGFja19fZG9jX199LApAQCAtMjAyNiw5ICsyMTgwLDM0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUHlEb2NfU1RSVkFSKGl0ZXJfdW5wYWNrX2RvYywKKyJpdGVyX3VucGFjayhmbXQsIGJ1ZmZlcikgLT4gaXRlcmF0b3IodjEsIHYyLCAuLi4pXG5cCitcblwKK1JldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyB0dXBsZXMgdW5wYWNrZWQgZnJvbSB0aGUgZ2l2ZW4gYnl0ZXNcblwKK3NvdXJjZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBzdHJpbmcsIGxpa2UgYSByZXBlYXRlZCBpbnZvY2F0aW9uIG9mXG5cCit1bnBhY2tfZnJvbSgpLiAgUmVxdWlyZXMgdGhhdCB0aGUgYnl0ZXMgbGVuZ3RoIGJlIGEgbXVsdGlwbGUgb2YgdGhlXG5cCitmb3JtYXQgc3RydWN0IHNpemUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpdGVyX3VucGFjayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnNfb2JqZWN0LCAqZm10LCAqaW5wdXQsICpyZXN1bHQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POml0ZXJfdW5wYWNrIiwgJmZtdCwgJmlucHV0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzX29iamVjdCA9IGNhY2hlX3N0cnVjdChmbXQpOworICAgIGlmIChzX29iamVjdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXN1bHQgPSBzX2l0ZXJfdW5wYWNrKHNfb2JqZWN0LCBpbnB1dCk7CisgICAgUHlfREVDUkVGKHNfb2JqZWN0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG1vZHVsZV9mdW5jdGlvbnNbXSA9IHsKICAgICB7Il9jbGVhcmNhY2hlIiwgICAgIChQeUNGdW5jdGlvbiljbGVhcmNhY2hlLCAgICAgICAgTUVUSF9OT0FSR1MsICAgIGNsZWFyY2FjaGVfZG9jfSwKICAgICB7ImNhbGNzaXplIiwgICAgICAgIGNhbGNzaXplLCAgICAgICBNRVRIX08sIGNhbGNzaXplX2RvY30sCisgICAgeyJpdGVyX3VucGFjayIsICAgICBpdGVyX3VucGFjaywgICAgTUVUSF9WQVJBUkdTLCAgIGl0ZXJfdW5wYWNrX2RvY30sCiAgICAgeyJwYWNrIiwgICAgICAgICAgICBwYWNrLCAgICAgICAgICAgTUVUSF9WQVJBUkdTLCAgIHBhY2tfZG9jfSwKICAgICB7InBhY2tfaW50byIsICAgICAgIHBhY2tfaW50bywgICAgICBNRVRIX1ZBUkFSR1MsICAgcGFja19pbnRvX2RvY30sCiAgICAgeyJ1bnBhY2siLCAgICAgICAgICB1bnBhY2ssIE1FVEhfVkFSQVJHUywgICB1bnBhY2tfZG9jfSwKQEAgLTIwOTgsMTMgKzIyNzcsMTMgQEAKIAogICAgIC8qIENoZWNrIGVuZGlhbiBhbmQgc3dhcCBpbiBmYXN0ZXIgZnVuY3Rpb25zICovCiAgICAgewotICAgICAgICBpbnQgb25lID0gMTsKICAgICAgICAgZm9ybWF0ZGVmICpuYXRpdmUgPSBuYXRpdmVfdGFibGU7CiAgICAgICAgIGZvcm1hdGRlZiAqb3RoZXIsICpwdHI7Ci0gICAgICAgIGlmICgoaW50KSoodW5zaWduZWQgY2hhciopJm9uZSkKLSAgICAgICAgICAgIG90aGVyID0gbGlsZW5kaWFuX3RhYmxlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdGhlciA9IGJpZ2VuZGlhbl90YWJsZTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgICAgIG90aGVyID0gbGlsZW5kaWFuX3RhYmxlOworI2Vsc2UKKyAgICAgICAgb3RoZXIgPSBiaWdlbmRpYW5fdGFibGU7CisjZW5kaWYKICAgICAgICAgLyogU2NhbiB0aHJvdWdoIHRoZSBuYXRpdmUgdGFibGUsIGZpbmQgYSBtYXRjaGluZwogICAgICAgICAgICBlbnRyeSBpbiB0aGUgZW5kaWFuIHRhYmxlIGFuZCBzd2FwIGluIHRoZQogICAgICAgICAgICBuYXRpdmUgaW1wbGVtZW50YXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0YnVmZmVyLmMgYi9Nb2R1bGVzL190ZXN0YnVmZmVyLmMKaW5kZXggMzE2NjY2ZS4uMGM2ZWYxNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCisrKyBiL01vZHVsZXMvX3Rlc3RidWZmZXIuYwpAQCAtMTgxNSw3ICsxODE1LDcgQEAKICAgICAgICAgaWYgKGluaXRfc2xpY2UoYmFzZSwga2V5LCAwKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycl9vY2N1cnJlZDsKICAgICB9Ci0gICAgZWxzZSBpZiBQeVR1cGxlX0NoZWNrKGtleSkgeworICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soa2V5KSkgewogICAgICAgICAvKiBtdWx0aS1kaW1lbnNpb25hbCBzbGljZSAqLwogICAgICAgICBQeU9iamVjdCAqdHVwbGUgPSBrZXk7CiAgICAgICAgIFB5X3NzaXplX3QgaSwgbjsKQEAgLTI4MzcsMzYgKzI4MzcsMzYgQEAKICAgICBpZiAoc2ltcGxlX2Zvcm1hdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9NQVhfTkRJTSIsIE5EX01BWF9ORElNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfVkFSRVhQT1JUIiwgTkRfVkFSRVhQT1JUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfV1JJVEFCTEUiLCBORF9XUklUQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX0ZPUlRSQU4iLCBORF9GT1JUUkFOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfU0NBTEFSIiwgTkRfU0NBTEFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfUElMIiwgTkRfUElMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfR0VUQlVGX0ZBSUwiLCBORF9HRVRCVUZfRkFJTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX0dFVEJVRl9VTkRFRklORUQiLCBORF9HRVRCVUZfVU5ERUZJTkVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfUkVESVJFQ1QiLCBORF9SRURJUkVDVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfTUFYX05ESU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1ZBUkVYUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfV1JJVEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX0ZPUlRSQU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1NDQUxBUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfUElMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9HRVRCVUZfRkFJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfR0VUQlVGX1VOREVGSU5FRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfUkVESVJFQ1QpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NJTVBMRSIsIFB5QlVGX1NJTVBMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1dSSVRBQkxFIiwgUHlCVUZfV1JJVEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GT1JNQVQiLCBQeUJVRl9GT1JNQVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9ORCIsIFB5QlVGX05EKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU1RSSURFUyIsIFB5QlVGX1NUUklERVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9JTkRJUkVDVCIsIFB5QlVGX0lORElSRUNUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQ19DT05USUdVT1VTIiwgUHlCVUZfQ19DT05USUdVT1VTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRl9DT05USUdVT1VTIiwgUHlCVUZfRl9DT05USUdVT1VTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQU5ZX0NPTlRJR1VPVVMiLCBQeUJVRl9BTllfQ09OVElHVU9VUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZVTEwiLCBQeUJVRl9GVUxMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRlVMTF9STyIsIFB5QlVGX0ZVTExfUk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9SRUNPUkRTIiwgUHlCVUZfUkVDT1JEUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1JFQ09SRFNfUk8iLCBQeUJVRl9SRUNPUkRTX1JPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU1RSSURFRCIsIFB5QlVGX1NUUklERUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TVFJJREVEX1JPIiwgUHlCVUZfU1RSSURFRF9STyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0NPTlRJRyIsIFB5QlVGX0NPTlRJRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0NPTlRJR19STyIsIFB5QlVGX0NPTlRJR19STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU0lNUExFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9XUklUQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRk9STUFUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9ORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU1RSSURFUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfSU5ESVJFQ1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0NfQ09OVElHVU9VUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRl9DT05USUdVT1VTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9BTllfQ09OVElHVU9VUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRlVMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRlVMTF9STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfUkVDT1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfUkVDT1JEU19STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU1RSSURFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU1RSSURFRF9STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQ09OVElHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9DT05USUdfUk8pOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1JFQUQiLCBQeUJVRl9SRUFEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfV1JJVEUiLCBQeUJVRl9XUklURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfV1JJVEUpOwogCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwppbmRleCA3ZGYzZTE5Li4zMzYyNDU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKQEAgLTY1LDYgKzY1LDY5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKK3Rlc3Rfc2l6ZW9mX2NfdHlwZXMoUHlPYmplY3QgKnNlbGYpCit7CisjZGVmaW5lIENIRUNLX1NJWkVPRihUWVBFLCBFWFBFQ1RFRCkgICAgICAgICBcCisgICAgaWYgKEVYUEVDVEVEICE9IHNpemVvZihUWVBFKSkgIHsgICAgICAgICBcCisgICAgICAgIFB5RXJyX0Zvcm1hdChUZXN0RXJyb3IsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAic2l6ZW9mKCVzKSA9ICV1IGluc3RlYWQgb2YgJXUiLCBcCisgICAgICAgICAgICAjVFlQRSwgc2l6ZW9mKFRZUEUpLCBFWFBFQ1RFRCk7ICBcCisgICAgICAgIHJldHVybiAoUHlPYmplY3QqKU5VTEw7ICAgICAgICAgICAgICBcCisgICAgfQorI2RlZmluZSBJU19TSUdORUQoVFlQRSkgKCgoVFlQRSktMSkgPCAoVFlQRSkwKQorI2RlZmluZSBDSEVDS19TSUdOTkVTUyhUWVBFLCBTSUdORUQpICAgICAgICAgXAorICAgIGlmIChJU19TSUdORUQoVFlQRSkgIT0gU0lHTkVEKSB7ICAgICAgICAgXAorICAgICAgICBQeUVycl9Gb3JtYXQoVGVzdEVycm9yLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIiVzIHNpZ25uZXNzIGlzLCBpbnN0ZWFkIG9mICVpIiwgIFwKKyAgICAgICAgICAgICNUWVBFLCBJU19TSUdORUQoVFlQRSksIFNJR05FRCk7IFwKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCopTlVMTDsgICAgICAgICAgICAgIFwKKyAgICB9CisKKyAgICAvKiBpbnRlZ2VyIHR5cGVzICovCisgICAgQ0hFQ0tfU0laRU9GKFB5X1VDUzEsIDEpOworICAgIENIRUNLX1NJWkVPRihQeV9VQ1MyLCAyKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfVUNTNCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfVUNTMSwgMCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfVUNTMiwgMCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfVUNTNCwgMCk7CisjaWZkZWYgSEFWRV9JTlQzMl9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX0lOVDMyX1QsIDQpOworICAgIENIRUNLX1NJR05ORVNTKFBZX0lOVDMyX1QsIDEpOworI2VuZGlmCisjaWZkZWYgSEFWRV9VSU5UMzJfVAorICAgIENIRUNLX1NJWkVPRihQWV9VSU5UMzJfVCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfVUlOVDMyX1QsIDApOworI2VuZGlmCisjaWZkZWYgSEFWRV9JTlQ2NF9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX0lOVDY0X1QsIDgpOworICAgIENIRUNLX1NJR05ORVNTKFBZX0lOVDY0X1QsIDEpOworI2VuZGlmCisjaWZkZWYgSEFWRV9VSU5UNjRfVAorICAgIENIRUNLX1NJWkVPRihQWV9VSU5UNjRfVCwgOCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfVUlOVDY0X1QsIDApOworI2VuZGlmCisKKyAgICAvKiBwb2ludGVyL3NpemUgdHlwZXMgKi8KKyAgICBDSEVDS19TSVpFT0Yoc2l6ZV90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1Moc2l6ZV90LCAwKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfc3NpemVfdCwgc2l6ZW9mKHZvaWQgKikpOworICAgIENIRUNLX1NJR05ORVNTKFB5X3NzaXplX3QsIDEpOworCisgICAgQ0hFQ0tfU0laRU9GKFB5X3VpbnRwdHJfdCwgc2l6ZW9mKHZvaWQgKikpOworICAgIENIRUNLX1NJR05ORVNTKFB5X3VpbnRwdHJfdCwgMCk7CisgICAgQ0hFQ0tfU0laRU9GKFB5X2ludHB0cl90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfaW50cHRyX3QsIDEpOworCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworCisjdW5kZWYgSVNfU0lHTkVECisjdW5kZWYgQ0hFQ0tfU0lHTkVTUworI3VuZGVmIENIRUNLX1NJWkVPRgorfQorCisKK3N0YXRpYyBQeU9iamVjdCoKIHRlc3RfbGlzdF9hcGkoUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QqIGxpc3Q7CkBAIC0xNDI0LDYgKzE0ODcsMjAgQEAKICAgICBlbHNlCiAgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF93aWRlY2hhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Vbmljb2RlKExcIlxcVTAwMTEwMDAwXCIsIDEpIGRpZG4ndCBmYWlsIik7CisKKyAgICB3aWRlID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDEpOworICAgIGlmICh3aWRlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHdpZGUpWzBdID0gaW52YWxpZFswXTsKKyAgICBpZiAoX1B5VW5pY29kZV9SZWFkeSh3aWRlKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHdpZGUpOworICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfREVDUkVGKHdpZGUpOworICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3Rfd2lkZWNoYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5VW5pY29kZV9SZWFkeSgpIGRpZG4ndCBmYWlsIik7CisgICAgfQogI2VuZGlmCiAKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTI0NzcsMTYgKzI1NTQsMzA5IEBACiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5sIiwgX1B5TG9uZ19Gcm9tVGltZV90KHNlYyksIG5zZWMpOwogfQogCitzdGF0aWMgdm9pZAorc2xvdF90cF9kZWwoUHlPYmplY3QgKnNlbGYpCit7CisgICAgX1B5X0lERU5USUZJRVIoX190cF9kZWxfXyk7CisgICAgUHlPYmplY3QgKmRlbCwgKnJlczsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgLyogVGVtcG9yYXJpbHkgcmVzdXJyZWN0IHRoZSBvYmplY3QuICovCisgICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA9PSAwKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgIC8qIEV4ZWN1dGUgX19kZWxfXyBtZXRob2QsIGlmIGFueS4gKi8KKyAgICBkZWwgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChzZWxmLCAmUHlJZF9fX3RwX2RlbF9fKTsKKyAgICBpZiAoZGVsICE9IE5VTEwpIHsKKyAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZGVsLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGRlbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICBQeV9ERUNSRUYoZGVsKTsKKyAgICB9CisKKyAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgIC8qIHRoaXMgaXMgdGhlIG5vcm1hbCBwYXRoIG91dCAqLworCisgICAgLyogX19kZWxfXyByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICB7CisgICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gc2VsZi0+b2JfcmVmY250OworICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOworICAgICAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisgICAgfQorICAgIGFzc2VydCghUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpIHx8CisgICAgICAgICAgIF9QeV9BU19HQyhzZWxmKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aXRoX3RwX2RlbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeVR5cGVPYmplY3QgKnRwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOndpdGhfdHBfZGVsIiwgJm9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHRwID0gKFB5VHlwZU9iamVjdCAqKSBvYmo7CisgICAgaWYgKCFQeVR5cGVfQ2hlY2sob2JqKSB8fCAhUHlUeXBlX0hhc0ZlYXR1cmUodHAsIFB5X1RQRkxBR1NfSEVBUFRZUEUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiaGVhcCB0eXBlIGV4cGVjdGVkLCBnb3QgJVIiLCBvYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdHAtPnRwX2RlbCA9IHNsb3RfdHBfZGVsOworICAgIFB5X0lOQ1JFRihvYmopOworICAgIHJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGVzdF9pbmNyZWYoUHlPYmplY3QgKm9iKQoreworICAgIFB5X0lOQ1JFRihvYik7CisgICAgcmV0dXJuIG9iOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF94aW5jcmVmX2RvZXNudF9sZWFrKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgIFB5X1hJTkNSRUYoX3Rlc3RfaW5jcmVmKG9iaikpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9pbmNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5T2JqZWN0ICpvYmogPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgUHlfSU5DUkVGKF90ZXN0X2luY3JlZihvYmopKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfeGRlY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlfWERFQ1JFRihQeUxvbmdfRnJvbUxvbmcoMCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9kZWNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5X0RFQ1JFRihQeUxvbmdfRnJvbUxvbmcoMCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9pbmNyZWZfZGVjcmVmX0FQSShQeU9iamVjdCAqb2IpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICBQeV9JbmNSZWYob2IpOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW1lbV9hbGxvYzAoUHlPYmplY3QgKnNlbGYpCit7CisgICAgdm9pZCAqcHRyOworCisgICAgcHRyID0gUHlNZW1fTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlNZW1fTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlNZW1fRnJlZShwdHIpOworCisgICAgcHRyID0gUHlPYmplY3RfTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlPYmplY3RfTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlPYmplY3RfRnJlZShwdHIpOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKworICAgIHNpemVfdCBtYWxsb2Nfc2l6ZTsKKyAgICB2b2lkICpyZWFsbG9jX3B0cjsKKyAgICBzaXplX3QgcmVhbGxvY19uZXdfc2l6ZTsKKyAgICB2b2lkICpmcmVlX3B0cjsKK30gYWxsb2NfaG9va190OworCitzdGF0aWMgdm9pZCogaG9va19tYWxsb2MgKHZvaWQqIGN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5tYWxsb2Nfc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIGhvb2stPmFsbG9jLm1hbGxvYyhob29rLT5hbGxvYy5jdHgsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCogaG9va19yZWFsbG9jICh2b2lkKiBjdHgsIHZvaWQqIHB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIGFsbG9jX2hvb2tfdCAqaG9vayA9IChhbGxvY19ob29rX3QgKiljdHg7CisgICAgaG9vay0+cmVhbGxvY19wdHIgPSBwdHI7CisgICAgaG9vay0+cmVhbGxvY19uZXdfc2l6ZSA9IG5ld19zaXplOworICAgIHJldHVybiBob29rLT5hbGxvYy5yZWFsbG9jKGhvb2stPmFsbG9jLmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhvb2tfZnJlZSAodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5mcmVlX3B0ciA9IHB0cjsKKyAgICBob29rLT5hbGxvYy5mcmVlKGhvb2stPmFsbG9jLmN0eCwgcHRyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3Rfc2V0YWxsb2NhdG9ycyhQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4pCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZXJyb3JfbXNnOworICAgIGFsbG9jX2hvb2tfdCBob29rOworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIHNpemVfdCBzaXplLCBzaXplMjsKKyAgICB2b2lkICpwdHIsICpwdHIyOworCisgICAgaG9vay5tYWxsb2Nfc2l6ZSA9IDA7CisgICAgaG9vay5yZWFsbG9jX3B0ciA9IE5VTEw7CisgICAgaG9vay5yZWFsbG9jX25ld19zaXplID0gMDsKKyAgICBob29rLmZyZWVfcHRyID0gTlVMTDsKKworICAgIGFsbG9jLmN0eCA9ICZob29rOworICAgIGFsbG9jLm1hbGxvYyA9ICZob29rX21hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gJmhvb2tfcmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gJmhvb2tfZnJlZTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoZG9tYWluLCAmaG9vay5hbGxvYyk7CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmFsbG9jKTsKKworICAgIHNpemUgPSA0MjsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0ciA9IFB5TWVtX1Jhd01hbGxvYyhzaXplKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiBwdHIgPSBQeU1lbV9NYWxsb2Moc2l6ZSk7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogcHRyID0gUHlPYmplY3RfTWFsbG9jKHNpemUpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIgPSBOVUxMOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3JfbXNnID0gIm1hbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2subWFsbG9jX3NpemUgIT0gc2l6ZSkgeworICAgICAgICBlcnJvcl9tc2cgPSAibWFsbG9jIGludmFsaWQgc2l6ZSI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzaXplMiA9IDIwMDsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0cjIgPSBQeU1lbV9SYXdSZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IHB0cjIgPSBQeU1lbV9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6IHB0cjIgPSBQeU9iamVjdF9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIyID0gTlVMTDsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHB0cjIgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2sucmVhbGxvY19wdHIgIT0gcHRyCisgICAgICAgIHx8IGhvb2sucmVhbGxvY19uZXdfc2l6ZSAhPSBzaXplMikgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBpbnZhbGlkIHBhcmFtZXRlcnMiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgc3dpdGNoKGRvbWFpbikKKyAgICB7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fUkFXOiBQeU1lbV9SYXdGcmVlKHB0cjIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IFB5TWVtX0ZyZWUocHRyMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogUHlPYmplY3RfRnJlZShwdHIyKTsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGhvb2suZnJlZV9wdHIgIT0gcHRyMikgeworICAgICAgICBlcnJvcl9tc2cgPSAiZnJlZSBpbnZhbGlkIHBvaW50ZXIiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJlcyA9IFB5X05vbmU7CisgICAgZ290byBmaW5hbGx5OworCitmYWlsOgorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIGVycm9yX21zZyk7CisKK2ZpbmFsbHk6CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmhvb2suYWxsb2MpOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5bWVtX3NldHJhd2FsbG9jYXRvcnMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIHRlc3Rfc2V0YWxsb2NhdG9ycyhQWU1FTV9ET01BSU5fUkFXKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfcHltZW1fc2V0YWxsb2NhdG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gdGVzdF9zZXRhbGxvY2F0b3JzKFBZTUVNX0RPTUFJTl9NRU0pOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiB0ZXN0X3NldGFsbG9jYXRvcnMoUFlNRU1fRE9NQUlOX09CSik7Cit9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBUZXN0TWV0aG9kc1tdID0gewogICAgIHsicmFpc2VfZXhjZXB0aW9uIiwgICAgICAgICByYWlzZV9leGNlcHRpb24sICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsicmFpc2VfbWVtb3J5ZXJyb3IiLCAgIChQeUNGdW5jdGlvbilyYWlzZV9tZW1vcnllcnJvciwgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfY29uZmlnIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfY29uZmlnLCAgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9zaXplb2ZfY190eXBlcyIsICAgICAoUHlDRnVuY3Rpb24pdGVzdF9zaXplb2ZfY190eXBlcywgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9kYXRldGltZV9jYXBpIiwgIHRlc3RfZGF0ZXRpbWVfY2FwaSwgICAgICAgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbGlzdF9hcGkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbGlzdF9hcGksICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9kaWN0X2l0ZXJhdGlvbiIsICAgICAoUHlDRnVuY3Rpb24pdGVzdF9kaWN0X2l0ZXJhdGlvbixNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xhenlfaGFzaF9pbmhlcml0YW5jZSIsICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbGF6eV9oYXNoX2luaGVyaXRhbmNlLE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbG9uZ19hcGkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbG9uZ19hcGksICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF94aW5jcmVmX2RvZXNudF9sZWFrIiwoUHlDRnVuY3Rpb24pdGVzdF94aW5jcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfaW5jcmVmX2RvZXNudF9sZWFrIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfaW5jcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfeGRlY3JlZl9kb2VzbnRfbGVhayIsKFB5Q0Z1bmN0aW9uKXRlc3RfeGRlY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2RlY3JlZl9kb2VzbnRfbGVhayIsIChQeUNGdW5jdGlvbil0ZXN0X2RlY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2luY3JlZl9kZWNyZWZfQVBJIiwgIChQeUNGdW5jdGlvbil0ZXN0X2luY3JlZl9kZWNyZWZfQVBJLCAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwgKFB5Q0Z1bmN0aW9uKXRlc3RfbG9uZ19hbmRfb3ZlcmZsb3csCiAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbG9uZ19hc19kb3VibGUiLCAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbG9uZ19hc19kb3VibGUsTUVUSF9OT0FSR1N9LApAQCAtMjU3NCw2ICsyOTQ0LDE1IEBACiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWVfdCIsIHRlc3RfcHl0aW1lX29iamVjdF90b190aW1lX3QsICBNRVRIX1ZBUkFSR1N9LAogICAgIHsicHl0aW1lX29iamVjdF90b190aW1ldmFsIiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwsICBNRVRIX1ZBUkFSR1N9LAogICAgIHsicHl0aW1lX29iamVjdF90b190aW1lc3BlYyIsIHRlc3RfcHl0aW1lX29iamVjdF90b190aW1lc3BlYywgIE1FVEhfVkFSQVJHU30sCisgICAgeyJ3aXRoX3RwX2RlbCIsICAgICAgICAgICAgIHdpdGhfdHBfZGVsLCAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0ZXN0X3B5bWVtIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHltZW1fYWxsb2MwLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5bWVtX2FsbG9jMCIsCisgICAgIChQeUNGdW5jdGlvbil0ZXN0X3B5bWVtX3NldHJhd2FsbG9jYXRvcnMsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfcHltZW1fc2V0YWxsb2NhdG9ycyIsCisgICAgIChQeUNGdW5jdGlvbil0ZXN0X3B5bWVtX3NldGFsbG9jYXRvcnMsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfcHlvYmplY3Rfc2V0YWxsb2NhdG9ycyIsCisgICAgIChQeUNGdW5jdGlvbil0ZXN0X3B5b2JqZWN0X3NldGFsbG9jYXRvcnMsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RlbWJlZC5jIGIvTW9kdWxlcy9fdGVzdGVtYmVkLmMKaW5kZXggNTFiNDM5Zi4uYTIxZDI1MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGVzdGVtYmVkLmMKKysrIGIvTW9kdWxlcy9fdGVzdGVtYmVkLmMKQEAgLTEsNyArMSwyNiBAQAogI2luY2x1ZGUgPFB5dGhvbi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLXZvaWQgcHJpbnRfc3ViaW50ZXJwKHZvaWQpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbWJlZGRlZCBpbnRlcnByZXRlciB0ZXN0cyB0aGF0IG5lZWQgYSBjdXN0b20gZXhlCisgKgorICogRXhlY3V0ZWQgdmlhICdFbWJlZGRpbmdUZXN0cycgaW4gTGliL3Rlc3QvdGVzdF9jYXBpLnB5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBfdGVzdGVtYmVkX1B5X0luaXRpYWxpemUodm9pZCkKK3sKKyAgICAvKiBIQUNLOiB0aGUgIi4vIiBhdCBmcm9udCBhdm9pZHMgYSBzZWFyY2ggYWxvbmcgdGhlIFBBVEggaW4KKyAgICAgICBNb2R1bGVzL2dldHBhdGguYyAqLworICAgIFB5X1NldFByb2dyYW1OYW1lKEwiLi9fdGVzdGVtYmVkIik7CisgICAgUHlfSW5pdGlhbGl6ZSgpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGVzdCByZXBlYXRlZCBpbml0YWxpc2F0aW9uIGFuZCBzdWJpbnRlcnByZXRlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgcHJpbnRfc3ViaW50ZXJwKHZvaWQpCiB7CiAgICAgLyogSnVzdCBvdXRwdXQgc29tZSBkZWJ1ZyBzdHVmZiAqLwogICAgIFB5VGhyZWFkU3RhdGUgKnRzID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKQEAgLTE0LDcgKzMzLDcgQEAKICAgICApOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorc3RhdGljIHZvaWQgdGVzdF9yZXBlYXRlZF9pbml0X2FuZF9zdWJpbnRlcnByZXRlcnModm9pZCkKIHsKICAgICBQeVRocmVhZFN0YXRlICptYWluc3RhdGUsICpzdWJzdGF0ZTsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtMjQsMTAgKzQzLDcgQEAKIAogICAgIGZvciAoaT0wOyBpPDM7IGkrKykgewogICAgICAgICBwcmludGYoIi0tLSBQYXNzICVkIC0tLVxuIiwgaSk7Ci0gICAgICAgIC8qIEhBQ0s6IHRoZSAiLi8iIGF0IGZyb250IGF2b2lkcyBhIHNlYXJjaCBhbG9uZyB0aGUgUEFUSCBpbgotICAgICAgICAgICBNb2R1bGVzL2dldHBhdGguYyAqLwotICAgICAgICBQeV9TZXRQcm9ncmFtTmFtZShMIi4vX3Rlc3RlbWJlZCIpOwotICAgICAgICBQeV9Jbml0aWFsaXplKCk7CisgICAgICAgIF90ZXN0ZW1iZWRfUHlfSW5pdGlhbGl6ZSgpOwogICAgICAgICBtYWluc3RhdGUgPSBQeVRocmVhZFN0YXRlX0dldCgpOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTU0LDUgKzcwLDcxIEBACiAgICAgICAgIFB5RXZhbF9SZXN0b3JlVGhyZWFkKG1haW5zdGF0ZSk7CiAgICAgICAgIFB5X0ZpbmFsaXplKCk7CiAgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRlc3QgZm9yY2luZyBhIHBhcnRpY3VsYXIgSU8gZW5jb2RpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgY2hlY2tfc3RkaW9fZGV0YWlscyhjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqIGVycm9ycykKK3sKKyAgICAvKiBPdXRwdXQgaW5mbyBmb3IgdGhlIHRlc3QgY2FzZSB0byBjaGVjayAqLworICAgIGlmIChlbmNvZGluZykgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVuY29kaW5nOiAlc1xuIiwgZW5jb2RpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZW5jb2Rpbmc6IGRlZmF1bHRcbiIpOworICAgIH0KKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZXJyb3JzOiAlc1xuIiwgZXJyb3JzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVycm9yczogZGVmYXVsdFxuIik7CisgICAgfQorICAgIGZmbHVzaChzdGRvdXQpOworICAgIC8qIEZvcmNlIHRoZSBnaXZlbiBJTyBlbmNvZGluZyAqLworICAgIFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoZW5jb2RpbmcsIGVycm9ycyk7CisgICAgX3Rlc3RlbWJlZF9QeV9Jbml0aWFsaXplKCk7CisgICAgUHlSdW5fU2ltcGxlU3RyaW5nKAorICAgICAgICAiaW1wb3J0IHN5czsiCisgICAgICAgICJwcmludCgnc3RkaW46IHswLmVuY29kaW5nfTp7MC5lcnJvcnN9Jy5mb3JtYXQoc3lzLnN0ZGluKSk7IgorICAgICAgICAicHJpbnQoJ3N0ZG91dDogezAuZW5jb2Rpbmd9OnswLmVycm9yc30nLmZvcm1hdChzeXMuc3Rkb3V0KSk7IgorICAgICAgICAicHJpbnQoJ3N0ZGVycjogezAuZW5jb2Rpbmd9OnswLmVycm9yc30nLmZvcm1hdChzeXMuc3RkZXJyKSk7IgorICAgICAgICAic3lzLnN0ZG91dC5mbHVzaCgpIgorICAgICk7CisgICAgUHlfRmluYWxpemUoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9mb3JjZWRfaW9fZW5jb2Rpbmcodm9pZCkKK3sKKyAgICAvKiBDaGVjayB2YXJpb3VzIGNvbWJpbmF0aW9ucyAqLworICAgIHByaW50ZigiLS0tIFVzZSBkZWZhdWx0cyAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoTlVMTCwgTlVMTCk7CisgICAgcHJpbnRmKCItLS0gU2V0IGVycm9ycyBvbmx5IC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscyhOVUxMLCAic3Vycm9nYXRlZXNjYXBlIik7CisgICAgcHJpbnRmKCItLS0gU2V0IGVuY29kaW5nIG9ubHkgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKCJsYXRpbi0xIiwgTlVMTCk7CisgICAgcHJpbnRmKCItLS0gU2V0IGVuY29kaW5nIGFuZCBlcnJvcnMgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKCJsYXRpbi0xIiwgInN1cnJvZ2F0ZWVzY2FwZSIpOworCisgICAgLyogQ2hlY2sgY2FsbGluZyBhZnRlciBpbml0aWFsaXphdGlvbiBmYWlscyAqLworICAgIFB5X0luaXRpYWxpemUoKTsKKworICAgIGlmIChQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKE5VTEwsIE5VTEwpID09IDApIHsKKyAgICAgICAgcHJpbnRmKCJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nIik7CisgICAgfQorICAgIFB5X0ZpbmFsaXplKCk7Cit9CisKKy8qIERpZmZlcmVudCBlbWJlZGRpbmcgdGVzdHMgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisKKyAgICAvKiBUT0RPOiBDaGVjayB0aGUgYXJndW1lbnQgc3RyaW5nIHRvIGFsbG93IGZvciBtb3JlIHRlc3QgY2FzZXMgKi8KKyAgICBpZiAoYXJnYyA+IDEpIHsKKyAgICAgICAgLyogRm9yIG5vdzogYXNzdW1lICJmb3JjZWRfaW9fZW5jb2RpbmcgKi8KKyAgICAgICAgdGVzdF9mb3JjZWRfaW9fZW5jb2RpbmcoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBSdW4gdGhlIG9yaWdpbmFsIGVtYmVkZGluZyB0ZXN0IGNhc2UgYnkgZGVmYXVsdCAqLworICAgICAgICB0ZXN0X3JlcGVhdGVkX2luaXRfYW5kX3N1YmludGVycHJldGVycygpOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RpbXBvcnRtdWx0aXBsZS5jIGIvTW9kdWxlcy9fdGVzdGltcG9ydG11bHRpcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhZWI2NgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3Rlc3RpbXBvcnRtdWx0aXBsZS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDIGV4dGVuc2lvbnMgbW9kdWxlIHRvIHRlc3QgaW1wb3J0aW5nIG11bHRpcGxlIG1vZHVsZXMgZnJvbSBvbmUgY29tcGlsZWQKKyAqIGZpbGUgKGlzc3VlMTY0MjEpLiBUaGlzIGZpbGUgZGVmaW5lcyAzIG1vZHVsZXMgKF90ZXN0aW1wb3J0bW9kdWxlLAorICogZm9vLCBiYXIpLCBvbmx5IHRoZSBmaXJzdCBvbmUgaXMgY2FsbGVkIHRoZSBzYW1lIGFzIHRoZSBjb21waWxlZCBmaWxlLgorICovCisjaW5jbHVkZTxQeXRob24uaD4KKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfdGVzdGltcG9ydG11bHRpcGxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZSIsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGUgZG9jIiwKKyAgICAtMSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DIFB5SW5pdF9fdGVzdGltcG9ydG11bHRpcGxlKHZvaWQpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3Rlc3RpbXBvcnRtdWx0aXBsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX2Zvb21vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfZm9vIiwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28gZG9jIiwKKyAgICAtMSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DIFB5SW5pdF9fdGVzdGltcG9ydG11bHRpcGxlX2Zvbyh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9mb29tb2R1bGUpOworfQorCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9iYXJtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2JhciIsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfYmFyIGRvYyIsCisgICAgLTEsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQyBQeUluaXRfX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXIodm9pZCl7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX2Jhcm1vZHVsZSk7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jIGIvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMKaW5kZXggZDFkYzYxZC4uZDgzZDExNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMKQEAgLTc0MSw3ICs3NDEsNyBAQAogICAgIHdyID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc2VsZiwgTlVMTCk7CiAgICAgaWYgKHdyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyOwotICAgIHNlbGYtPndyX2NhbGxiYWNrID0gUHlDRnVuY3Rpb25fTmV3KCZ3cl9jYWxsYmFja19kZWYsIHdyKTsKKyAgICBzZWxmLT53cl9jYWxsYmFjayA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZ3cl9jYWxsYmFja19kZWYsIHdyLCBOVUxMKTsKICAgICBQeV9ERUNSRUYod3IpOwogICAgIGlmIChzZWxmLT53cl9jYWxsYmFjayA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycjsKQEAgLTExNzIsNiArMTE3Miw2NiBAQAogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgYW5kIHNwZWNpYWxpemVkIHB1cnBvc2VzIG9ubHkuXG5cCiBJbiBtb3N0IGFwcGxpY2F0aW9ucyBgdGhyZWFkaW5nLmVudW1lcmF0ZSgpYCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiIpOwogCitzdGF0aWMgdm9pZAorcmVsZWFzZV9zZW50aW5lbCh2b2lkICp3cikKK3sKKyAgICAvKiBUcmlja3k6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlCisgICAgICAgaXMgYmVpbmcgZGVsZXRlZC4gIFRoZXJlZm9yZSwgb25seSBzaW1wbGUgQyBjb2RlIGNhbiBzYWZlbHkKKyAgICAgICBleGVjdXRlIGhlcmUuICovCisgICAgUHlPYmplY3QgKm9iaiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHdyKTsKKyAgICBsb2Nrb2JqZWN0ICpsb2NrOworICAgIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICBhc3NlcnQoUHlfVFlQRShvYmopID09ICZMb2NrdHlwZSk7CisgICAgICAgIGxvY2sgPSAobG9ja29iamVjdCAqKSBvYmo7CisgICAgICAgIGlmIChsb2NrLT5sb2NrZWQpIHsKKyAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhsb2NrLT5sb2NrX2xvY2spOworICAgICAgICAgICAgbG9jay0+bG9ja2VkID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBEZWFsbG9jYXRpbmcgYSB3ZWFrcmVmIHdpdGggYSBOVUxMIGNhbGxiYWNrIG9ubHkgY2FsbHMKKyAgICAgICBQeU9iamVjdF9HQ19EZWwoKSwgd2hpY2ggY2FuJ3QgY2FsbCBhbnkgUHl0aG9uIGNvZGUuICovCisgICAgUHlfREVDUkVGKHdyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RocmVhZF9fc2V0X3NlbnRpbmVsKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICp3cjsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dldCgpOworICAgIGxvY2tvYmplY3QgKmxvY2s7CisKKyAgICBpZiAodHN0YXRlLT5vbl9kZWxldGVfZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIC8qIFdlIG11c3Qgc3VwcG9ydCB0aGUgcmUtY3JlYXRpb24gb2YgdGhlIGxvY2sgZnJvbSBhCisgICAgICAgICAgIGZvcmsoKWVkIGNoaWxkLiAqLworICAgICAgICBhc3NlcnQodHN0YXRlLT5vbl9kZWxldGUgPT0gJnJlbGVhc2Vfc2VudGluZWwpOworICAgICAgICB3ciA9IChQeU9iamVjdCAqKSB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZSA9IE5VTEw7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgPSBOVUxMOworICAgICAgICBQeV9ERUNSRUYod3IpOworICAgIH0KKyAgICBsb2NrID0gbmV3bG9ja29iamVjdCgpOworICAgIGlmIChsb2NrID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFRoZSBsb2NrIGlzIG93bmVkIGJ5IHdob2V2ZXIgY2FsbGVkIF9zZXRfc2VudGluZWwoKSwgYnV0IHRoZSB3ZWFrcmVmCisgICAgICAgaGFuZ3MgdG8gdGhlIHRocmVhZCBzdGF0ZS4gKi8KKyAgICB3ciA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIGxvY2ssIE5VTEwpOworICAgIGlmICh3ciA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihsb2NrKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgPSAodm9pZCAqKSB3cjsKKyAgICB0c3RhdGUtPm9uX2RlbGV0ZSA9ICZyZWxlYXNlX3NlbnRpbmVsOworICAgIHJldHVybiAoUHlPYmplY3QgKikgbG9jazsKK30KKworUHlEb2NfU1RSVkFSKF9zZXRfc2VudGluZWxfZG9jLAorIl9zZXRfc2VudGluZWwoKSAtPiBsb2NrXG5cCitcblwKK1NldCBhIHNlbnRpbmVsIGxvY2sgdGhhdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGN1cnJlbnQgdGhyZWFkXG5cCitzdGF0ZSBpcyBmaW5hbGl6ZWQgKGFmdGVyIGl0IGlzIHVudGllZCBmcm9tIHRoZSBpbnRlcnByZXRlcikuXG5cCitcblwKK1RoaXMgaXMgYSBwcml2YXRlIEFQSSBmb3IgdGhlIHRocmVhZGluZyBtb2R1bGUuIik7CisKIHN0YXRpYyBQeU9iamVjdCAqCiB0aHJlYWRfc3RhY2tfc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0xMjQ3LDYgKzEzMDcsOCBAQAogICAgICBNRVRIX05PQVJHUywgX2NvdW50X2RvY30sCiAgICAgeyJzdGFja19zaXplIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfc3RhY2tfc2l6ZSwKICAgICAgTUVUSF9WQVJBUkdTLCBzdGFja19zaXplX2RvY30sCisgICAgeyJfc2V0X3NlbnRpbmVsIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfX3NldF9zZW50aW5lbCwKKyAgICAgTUVUSF9OT0FSR1MsIF9zZXRfc2VudGluZWxfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190a2ludGVyLmMgYi9Nb2R1bGVzL190a2ludGVyLmMKaW5kZXggZWNhZDU0MS4uZTAyMmE3YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGtpbnRlci5jCisrKyBiL01vZHVsZXMvX3RraW50ZXIuYwpAQCAtMTI4LDUyICsxMjgsNjAgQEAKIAogLyogVGhlIHRocmVhZGluZyBzaXR1YXRpb24gaXMgY29tcGxpY2F0ZWQuICBUY2wgaXMgbm90IHRocmVhZC1zYWZlLCBleGNlcHQKICAgIHdoZW4gY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLXRocmVhZHMuCi0gICBTbyB3ZSBuZWVkIHRvIHVzZSBhIGxvY2sgYXJvdW5kIGFsbCB1c2VzIG9mIFRjbC4gIFByZXZpb3VzbHksIHRoZSBQeXRob24KLSAgIGludGVycHJldGVyIGxvY2sgd2FzIHVzZWQgZm9yIHRoaXMuICBIb3dldmVyLCB0aGlzIGNhdXNlcyBwcm9ibGVtcyB3aGVuCi0gICBvdGhlciBQeXRob24gdGhyZWFkcyBuZWVkIHRvIHJ1biB3aGlsZSBUY2wgaXMgYmxvY2tlZCB3YWl0aW5nIGZvciBldmVudHMuCiAKLSAgIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgYSBzZXBhcmF0ZSBsb2NrIGZvciBUY2wgaXMgaW50cm9kdWNlZC4gIEhvbGRpbmcgaXQKLSAgIGlzIGluY29tcGF0aWJsZSB3aXRoIGhvbGRpbmcgUHl0aG9uJ3MgaW50ZXJwcmV0ZXIgbG9jay4gIFRoZSBmb2xsb3dpbmcgZm91cgotICAgbWFjcm9zIG1hbmlwdWxhdGUgYm90aCBsb2NrcyB0b2dldGhlci4KKyAgIFNvIHdlIG5lZWQgdG8gdXNlIGEgbG9jayBhcm91bmQgYWxsIHVzZXMgb2YgVGNsLiAgUHJldmlvdXNseSwgdGhlCisgICBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayB3YXMgdXNlZCBmb3IgdGhpcy4gIEhvd2V2ZXIsIHRoaXMgY2F1c2VzCisgICBwcm9ibGVtcyB3aGVuIG90aGVyIFB5dGhvbiB0aHJlYWRzIG5lZWQgdG8gcnVuIHdoaWxlIFRjbCBpcyBibG9ja2VkCisgICB3YWl0aW5nIGZvciBldmVudHMuCiAKLSAgIEVOVEVSX1RDTCBhbmQgTEVBVkVfVENMIGFyZSBicmFja2V0cywganVzdCBsaWtlIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgYW5kCi0gICBQeV9FTkRfQUxMT1dfVEhSRUFEUy4gIFRoZXkgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYSBjYWxsIGludG8gVGNsIGlzIG1hZGUKLSAgIHRoYXQgY291bGQgY2FsbCBhbiBldmVudCBoYW5kbGVyLCBvciBvdGhlcndpc2UgYWZmZWN0IHRoZSBzdGF0ZSBvZiBhIFRjbAotICAgaW50ZXJwcmV0ZXIuICBUaGVzZSBhc3N1bWUgdGhhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBoYXMgdGhlIFB5dGhvbgotICAgaW50ZXJwcmV0ZXIgbG9jazsgaW5zaWRlIHRoZSBicmFja2V0cywgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGhhcyBiZWVuCi0gICByZWxlYXNlZCBhbmQgdGhlIGxvY2sgZm9yIFRjbCBoYXMgYmVlbiBhY3F1aXJlZC4KKyAgIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgYSBzZXBhcmF0ZSBsb2NrIGZvciBUY2wgaXMgaW50cm9kdWNlZC4KKyAgIEhvbGRpbmcgaXQgaXMgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBQeXRob24ncyBpbnRlcnByZXRlciBsb2NrLgorICAgVGhlIGZvbGxvd2luZyBmb3VyIG1hY3JvcyBtYW5pcHVsYXRlIGJvdGggbG9ja3MgdG9nZXRoZXIuCiAKLSAgIFNvbWV0aW1lcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgYm90aCB0aGUgUHl0aG9uIGxvY2sgYW5kIHRoZSBUY2wgbG9jay4KLSAgIChGb3IgZXhhbXBsZSwgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIHRoZSBUY2wgaW50ZXJwcmV0ZXIgcmVzdWx0IHRvIGEKLSAgIFB5dGhvbiBzdHJpbmcgb2JqZWN0LikgIFRoaXMgY2FuIGJlIGRvbmUgYnkgdXNpbmcgZGlmZmVyZW50IG1hY3JvcyB0byBjbG9zZQotICAgdGhlIEVOVEVSX1RDTCBibG9jazogRU5URVJfT1ZFUkxBUCByZWFjcXVpcmVzIHRoZSBQeXRob24gbG9jayAoYW5kIHJlc3RvcmVzCi0gICB0aGUgdGhyZWFkIHN0YXRlKSBidXQgZG9lc24ndCByZWxlYXNlIHRoZSBUY2wgbG9jazsgTEVBVkVfT1ZFUkxBUF9UQ0wKLSAgIHJlbGVhc2VzIHRoZSBUY2wgbG9jay4KKyAgIEVOVEVSX1RDTCBhbmQgTEVBVkVfVENMIGFyZSBicmFja2V0cywganVzdCBsaWtlCisgICBQeV9CRUdJTl9BTExPV19USFJFQURTIGFuZCBQeV9FTkRfQUxMT1dfVEhSRUFEUy4gIFRoZXkgc2hvdWxkIGJlCisgICB1c2VkIHdoZW5ldmVyIGEgY2FsbCBpbnRvIFRjbCBpcyBtYWRlIHRoYXQgY291bGQgY2FsbCBhbiBldmVudAorICAgaGFuZGxlciwgb3Igb3RoZXJ3aXNlIGFmZmVjdCB0aGUgc3RhdGUgb2YgYSBUY2wgaW50ZXJwcmV0ZXIuICBUaGVzZQorICAgYXNzdW1lIHRoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaGFzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jazsKKyAgIGluc2lkZSB0aGUgYnJhY2tldHMsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayBoYXMgYmVlbiByZWxlYXNlZAorICAgYW5kIHRoZSBsb2NrIGZvciBUY2wgaGFzIGJlZW4gYWNxdWlyZWQuCisKKyAgIFNvbWV0aW1lcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgYm90aCB0aGUgUHl0aG9uIGxvY2sgYW5kIHRoZSBUY2wKKyAgIGxvY2suICAoRm9yIGV4YW1wbGUsIHdoZW4gdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSB0aGUgVGNsCisgICBpbnRlcnByZXRlciByZXN1bHQgdG8gYSBQeXRob24gc3RyaW5nIG9iamVjdC4pICBUaGlzIGNhbiBiZSBkb25lIGJ5CisgICB1c2luZyBkaWZmZXJlbnQgbWFjcm9zIHRvIGNsb3NlIHRoZSBFTlRFUl9UQ0wgYmxvY2s6IEVOVEVSX09WRVJMQVAKKyAgIHJlYWNxdWlyZXMgdGhlIFB5dGhvbiBsb2NrIChhbmQgcmVzdG9yZXMgdGhlIHRocmVhZCBzdGF0ZSkgYnV0CisgICBkb2Vzbid0IHJlbGVhc2UgdGhlIFRjbCBsb2NrOyBMRUFWRV9PVkVSTEFQX1RDTCByZWxlYXNlcyB0aGUgVGNsCisgICBsb2NrLgogCiAgICBCeSBjb250cmFzdCwgRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04gYXJlIHVzZWQgaW4gVGNsIGV2ZW50Ci0gICBoYW5kbGVycyB3aGVuIHRoZSBoYW5kbGVyIG5lZWRzIHRvIHVzZSBQeXRob24uICBTdWNoIGV2ZW50IGhhbmRsZXJzIGFyZQotICAgZW50ZXJlZCB3aGlsZSB0aGUgbG9jayBmb3IgVGNsIGlzIGhlbGQ7IHRoZSBldmVudCBoYW5kbGVyIHByZXN1bWFibHkgbmVlZHMKLSAgIHRvIHVzZSBQeXRob24uICBFTlRFUl9QWVRIT04gcmVsZWFzZXMgdGhlIGxvY2sgZm9yIFRjbCBhbmQgYWNxdWlyZXMKLSAgIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jaywgcmVzdG9yaW5nIHRoZSBhcHByb3ByaWF0ZSB0aHJlYWQgc3RhdGUsIGFuZAotICAgTEVBVkVfUFlUSE9OIHJlbGVhc2VzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayBhbmQgcmUtYWNxdWlyZXMgdGhlIGxvY2sKLSAgIGZvciBUY2wuICBJdCBpcyBva2F5IGZvciBFTlRFUl9UQ0wvTEVBVkVfVENMIHBhaXJzIHRvIGJlIGNvbnRhaW5lZCBpbnNpZGUKLSAgIHRoZSBjb2RlIGJldHdlZW4gRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04uCisgICBoYW5kbGVycyB3aGVuIHRoZSBoYW5kbGVyIG5lZWRzIHRvIHVzZSBQeXRob24uICBTdWNoIGV2ZW50IGhhbmRsZXJzCisgICBhcmUgZW50ZXJlZCB3aGlsZSB0aGUgbG9jayBmb3IgVGNsIGlzIGhlbGQ7IHRoZSBldmVudCBoYW5kbGVyCisgICBwcmVzdW1hYmx5IG5lZWRzIHRvIHVzZSBQeXRob24uICBFTlRFUl9QWVRIT04gcmVsZWFzZXMgdGhlIGxvY2sgZm9yCisgICBUY2wgYW5kIGFjcXVpcmVzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jaywgcmVzdG9yaW5nIHRoZQorICAgYXBwcm9wcmlhdGUgdGhyZWFkIHN0YXRlLCBhbmQgTEVBVkVfUFlUSE9OIHJlbGVhc2VzIHRoZSBQeXRob24KKyAgIGludGVycHJldGVyIGxvY2sgYW5kIHJlLWFjcXVpcmVzIHRoZSBsb2NrIGZvciBUY2wuICBJdCBpcyBva2F5IGZvcgorICAgRU5URVJfVENML0xFQVZFX1RDTCBwYWlycyB0byBiZSBjb250YWluZWQgaW5zaWRlIHRoZSBjb2RlIGJldHdlZW4KKyAgIEVOVEVSX1BZVEhPTiBhbmQgTEVBVkVfUFlUSE9OLgogCi0gICBUaGVzZSBsb2NrcyBleHBhbmQgdG8gc2V2ZXJhbCBzdGF0ZW1lbnRzIGFuZCBicmFja2V0czsgdGhleSBzaG91bGQgbm90IGJlCi0gICB1c2VkIGluIGJyYW5jaGVzIG9mIGlmIHN0YXRlbWVudHMgYW5kIHRoZSBsaWtlLgorICAgVGhlc2UgbG9ja3MgZXhwYW5kIHRvIHNldmVyYWwgc3RhdGVtZW50cyBhbmQgYnJhY2tldHM7IHRoZXkgc2hvdWxkCisgICBub3QgYmUgdXNlZCBpbiBicmFuY2hlcyBvZiBpZiBzdGF0ZW1lbnRzIGFuZCB0aGUgbGlrZS4KIAotICAgSWYgVGNsIGlzIHRocmVhZGVkLCB0aGlzIGFwcHJvYWNoIHdvbid0IHdvcmsgYW55bW9yZS4gVGhlIFRjbCBpbnRlcnByZXRlciBpcwotICAgb25seSB2YWxpZCBpbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCBpdCwgYW5kIGFsbCBUayBhY3Rpdml0eSBtdXN0IGhhcHBlbiBpbiB0aGlzCi0gICB0aHJlYWQsIGFsc28uIFRoYXQgbWVhbnMgdGhhdCB0aGUgbWFpbmxvb3AgbXVzdCBiZSBpbnZva2VkIGluIHRoZSB0aHJlYWQgdGhhdAotICAgY3JlYXRlZCB0aGUgaW50ZXJwcmV0ZXIuIEludm9raW5nIGNvbW1hbmRzIGZyb20gb3RoZXIgdGhyZWFkcyBpcyBwb3NzaWJsZTsKLSAgIF90a2ludGVyIHdpbGwgcXVldWUgYW4gZXZlbnQgZm9yIHRoZSBpbnRlcnByZXRlciB0aHJlYWQsIHdoaWNoIHdpbGwgdGhlbgotICAgZXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgcGFzcyBiYWNrIHRoZSByZXN1bHQuIElmIHRoZSBtYWluIHRocmVhZCBpcyBub3QgaW4gdGhlCi0gICBtYWlubG9vcCwgYW5kIGludm9raW5nIGNvbW1hbmRzIGNhdXNlcyBhbiBleGNlcHRpb247IGlmIHRoZSBtYWluIGxvb3AgaXMgcnVubmluZwotICAgYnV0IG5vdCBwcm9jZXNzaW5nIGV2ZW50cywgdGhlIGNvbW1hbmQgaW52b2NhdGlvbiB3aWxsIGJsb2NrLgorICAgSWYgVGNsIGlzIHRocmVhZGVkLCB0aGlzIGFwcHJvYWNoIHdvbid0IHdvcmsgYW55bW9yZS4gVGhlIFRjbAorICAgaW50ZXJwcmV0ZXIgaXMgb25seSB2YWxpZCBpbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCBpdCwgYW5kIGFsbCBUaworICAgYWN0aXZpdHkgbXVzdCBoYXBwZW4gaW4gdGhpcyB0aHJlYWQsIGFsc28uIFRoYXQgbWVhbnMgdGhhdCB0aGUKKyAgIG1haW5sb29wIG11c3QgYmUgaW52b2tlZCBpbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUKKyAgIGludGVycHJldGVyLiBJbnZva2luZyBjb21tYW5kcyBmcm9tIG90aGVyIHRocmVhZHMgaXMgcG9zc2libGU7CisgICBfdGtpbnRlciB3aWxsIHF1ZXVlIGFuIGV2ZW50IGZvciB0aGUgaW50ZXJwcmV0ZXIgdGhyZWFkLCB3aGljaCB3aWxsCisgICB0aGVuIGV4ZWN1dGUgdGhlIGNvbW1hbmQgYW5kIHBhc3MgYmFjayB0aGUgcmVzdWx0LiBJZiB0aGUgbWFpbgorICAgdGhyZWFkIGlzIG5vdCBpbiB0aGUgbWFpbmxvb3AsIGFuZCBpbnZva2luZyBjb21tYW5kcyBjYXVzZXMgYW4KKyAgIGV4Y2VwdGlvbjsgaWYgdGhlIG1haW4gbG9vcCBpcyBydW5uaW5nIGJ1dCBub3QgcHJvY2Vzc2luZyBldmVudHMsCisgICB0aGUgY29tbWFuZCBpbnZvY2F0aW9uIHdpbGwgYmxvY2suCiAKLSAgIEluIGFkZGl0aW9uLCBmb3IgYSB0aHJlYWRlZCBUY2wsIGEgc2luZ2xlIGdsb2JhbCB0Y2xfdHN0YXRlIHdvbid0IGJlIHN1ZmZpY2llbnQKLSAgIGFueW1vcmUsIHNpbmNlIG11bHRpcGxlIFRjbCBpbnRlcnByZXRlcnMgbWF5IHNpbXVsdGFuZW91c2x5IGRpc3BhdGNoIGluIGRpZmZlcmVudAotICAgdGhyZWFkcy4gU28gd2UgdXNlIHRoZSBUY2wgVExTIEFQSS4KKyAgIEluIGFkZGl0aW9uLCBmb3IgYSB0aHJlYWRlZCBUY2wsIGEgc2luZ2xlIGdsb2JhbCB0Y2xfdHN0YXRlIHdvbid0CisgICBiZSBzdWZmaWNpZW50IGFueW1vcmUsIHNpbmNlIG11bHRpcGxlIFRjbCBpbnRlcnByZXRlcnMgbWF5CisgICBzaW11bHRhbmVvdXNseSBkaXNwYXRjaCBpbiBkaWZmZXJlbnQgdGhyZWFkcy4gU28gd2UgdXNlIHRoZSBUY2wgVExTCisgICBBUEkuCiAKICovCiAKQEAgLTE4Miw3ICsxOTAsOCBAQAogI2lmZGVmIFRDTF9USFJFQURTCiBzdGF0aWMgVGNsX1RocmVhZERhdGFLZXkgc3RhdGVfa2V5OwogdHlwZWRlZiBQeVRocmVhZFN0YXRlICpUaHJlYWRTcGVjaWZpY0RhdGE7Ci0jZGVmaW5lIHRjbF90c3RhdGUgKCooUHlUaHJlYWRTdGF0ZSoqKVRjbF9HZXRUaHJlYWREYXRhKCZzdGF0ZV9rZXksIHNpemVvZihQeVRocmVhZFN0YXRlKikpKQorI2RlZmluZSB0Y2xfdHN0YXRlIFwKKyAgICAoKihQeVRocmVhZFN0YXRlKiopVGNsX0dldFRocmVhZERhdGEoJnN0YXRlX2tleSwgc2l6ZW9mKFB5VGhyZWFkU3RhdGUqKSkpCiAjZWxzZQogc3RhdGljIFB5VGhyZWFkU3RhdGUgKnRjbF90c3RhdGUgPSBOVUxMOwogI2VuZGlmCkBAIC0xOTIsNyArMjAxLDggQEAKICAgICAgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHRjbF9sb2NrLCAxKTsgdGNsX3RzdGF0ZSA9IHRzdGF0ZTsKIAogI2RlZmluZSBMRUFWRV9UQ0wgXAotICAgIHRjbF90c3RhdGUgPSBOVUxMOyBpZih0Y2xfbG9jaylQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeV9FTkRfQUxMT1dfVEhSRUFEU30KKyAgICB0Y2xfdHN0YXRlID0gTlVMTDsgXAorICAgIGlmKHRjbF9sb2NrKVB5VGhyZWFkX3JlbGVhc2VfbG9jayh0Y2xfbG9jayk7IFB5X0VORF9BTExPV19USFJFQURTfQogCiAjZGVmaW5lIEVOVEVSX09WRVJMQVAgXAogICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC0yMDIsNyArMjEyLDggQEAKIAogI2RlZmluZSBFTlRFUl9QWVRIT04gXAogICAgIHsgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gdGNsX3RzdGF0ZTsgdGNsX3RzdGF0ZSA9IE5VTEw7IFwKLSAgICAgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlFdmFsX1Jlc3RvcmVUaHJlYWQoKHRzdGF0ZSkpOyB9CisgICAgICAgIGlmKHRjbF9sb2NrKSBcCisgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlFdmFsX1Jlc3RvcmVUaHJlYWQoKHRzdGF0ZSkpOyB9CiAKICNkZWZpbmUgTEVBVkVfUFlUSE9OIFwKICAgICB7IFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5RXZhbF9TYXZlVGhyZWFkKCk7IFwKQEAgLTIxMSw3ICsyMjIsOCBAQAogI2RlZmluZSBDSEVDS19UQ0xfQVBQQVJUTUVOVCBcCiAgICAgaWYgKCgoVGthcHBPYmplY3QgKilzZWxmKS0+dGhyZWFkZWQgJiYgXAogICAgICAgICAoKFRrYXBwT2JqZWN0ICopc2VsZiktPnRocmVhZF9pZCAhPSBUY2xfR2V0Q3VycmVudFRocmVhZCgpKSB7IFwKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIkNhbGxpbmcgVGNsIGZyb20gZGlmZmVyZW50IGFwcGFydG1lbnQiKTsgXAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FsbGluZyBUY2wgZnJvbSBkaWZmZXJlbnQgYXBwYXJ0bWVudCIpOyBcCiAgICAgICAgIHJldHVybiAwOyBcCiAgICAgfQogCkBAIC0yMzMsNyArMjQ1LDcgQEAKIAogLyoqKiogVGthcHAgT2JqZWN0IERlY2xhcmF0aW9uICoqKiovCiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGthcHBfVHlwZTsKK3N0YXRpYyBQeU9iamVjdCAqVGthcHBfVHlwZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTI1Myw3ICsyNjUsNiBAQAogICAgIFRjbF9PYmpUeXBlICpTdHJpbmdUeXBlOwogfSBUa2FwcE9iamVjdDsKIAotI2RlZmluZSBUa2FwcF9DaGVjayh2KSAoUHlfVFlQRSh2KSA9PSAmVGthcHBfVHlwZSkKICNkZWZpbmUgVGthcHBfSW50ZXJwKHYpICgoKFRrYXBwT2JqZWN0ICopICh2KSktPmludGVycCkKICNkZWZpbmUgVGthcHBfUmVzdWx0KHYpIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHYpKQogCkBAIC0zMjYsMTEwICszMzcsOSBAQAogI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCiAKIAotc3RhdGljIGNoYXIgKgotQXNTdHJpbmcoUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdG1wKQotewotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfQXNTdHJpbmcodmFsdWUpOwotICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfQXNVVEY4KHZhbHVlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeU9iamVjdF9TdHIodmFsdWUpOwotICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHRtcCwgdikgIT0gMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0FzVVRGOCh2KTsKLSAgICB9Ci19Ci0KLQogCiAjZGVmaW5lIEFSR1NaIDY0CiAKLXN0YXRpYyBjaGFyICoKLU1lcmdlKFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICp0bXAgPSBOVUxMOwotICAgIGNoYXIgKmFyZ3ZTdG9yZVtBUkdTWl07Ci0gICAgY2hhciAqKmFyZ3YgPSBOVUxMOwotICAgIGludCBmdlN0b3JlW0FSR1NaXTsKLSAgICBpbnQgKmZ2ID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGFyZ2MgPSAwLCBmdmMgPSAwLCBpOwotICAgIGNoYXIgKnJlcyA9IE5VTEw7Ci0KLSAgICBpZiAoISh0bXAgPSBQeUxpc3RfTmV3KDApKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBhcmd2ID0gYXJndlN0b3JlOwotICAgIGZ2ID0gZnZTdG9yZTsKLQotICAgIGlmIChhcmdzID09IE5VTEwpCi0gICAgICAgIGFyZ2MgPSAwOwotCi0gICAgZWxzZSBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgYXJnYyA9IDE7Ci0gICAgICAgIGZ2WzBdID0gMDsKLSAgICAgICAgaWYgKCEoYXJndlswXSA9IEFzU3RyaW5nKGFyZ3MsIHRtcCkpKQotICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKLQotICAgICAgICBpZiAoYXJnYyA+IEFSR1NaKSB7Ci0gICAgICAgICAgICBpZiAoIUNIRUNLX1NJWkUoYXJnYywgc2l6ZW9mKGNoYXIgKikpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJ0dXBsZSBpcyB0b28gbG9uZyIpOwotICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyZ3YgPSAoY2hhciAqKilja2FsbG9jKChzaXplX3QpYXJnYyAqIHNpemVvZihjaGFyICopKTsKLSAgICAgICAgICAgIGZ2ID0gKGludCAqKWNrYWxsb2MoKHNpemVfdClhcmdjICogc2l6ZW9mKGludCkpOwotICAgICAgICAgICAgaWYgKGFyZ3YgPT0gTlVMTCB8fCBmdiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR2V0SXRlbShhcmdzLCBpKTsKLSAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgZnZbaV0gPSAxOwotICAgICAgICAgICAgICAgIGlmICghKGFyZ3ZbaV0gPSBNZXJnZSh2KSkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgICAgICBmdmMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHYgPT0gUHlfTm9uZSkgewotICAgICAgICAgICAgICAgIGFyZ2MgPSBpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnZbaV0gPSAwOwotICAgICAgICAgICAgICAgIGlmICghKGFyZ3ZbaV0gPSBBc1N0cmluZyh2LCB0bXApKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgICAgIGZ2YysrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJlcyA9IFRjbF9NZXJnZShhcmdjLCBhcmd2KTsKLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCAibWVyZ2UgZmFpbGVkIik7Ci0KLSAgZmluYWxseToKLSAgICBmb3IgKGkgPSAwOyBpIDwgZnZjOyBpKyspCi0gICAgICAgIGlmIChmdltpXSkgewotICAgICAgICAgICAgY2tmcmVlKGFyZ3ZbaV0pOwotICAgICAgICB9Ci0gICAgaWYgKGFyZ3YgIT0gYXJndlN0b3JlKQotICAgICAgICBja2ZyZWUoRlJFRUNBU1QgYXJndik7Ci0gICAgaWYgKGZ2ICE9IGZ2U3RvcmUpCi0gICAgICAgIGNrZnJlZShGUkVFQ0FTVCBmdik7Ci0KLSAgICBQeV9ERUNSRUYodG1wKTsKLSAgICByZXR1cm4gcmVzOwotfQotCiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQ0MCw4ICszNTAsNyBAQAogICAgIFB5T2JqZWN0ICp2OwogCiAgICAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAKICAgICBpZiAoVGNsX1NwbGl0TGlzdCgoVGNsX0ludGVycCAqKU5VTEwsIGxpc3QsICZhcmdjLCAmYXJndikgIT0gVENMX09LKSB7CkBAIC00NzMsOSArMzgyLDkgQEAKICAgICByZXR1cm4gdjsKIH0KIAotLyogSW4gc29tZSBjYXNlcywgVGNsIHdpbGwgc3RpbGwgcmV0dXJuIHN0cmluZ3MgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUKLSAgIGxpc3RzLiBTcGxpdE9iaiB3YWxrcyB0aHJvdWdoIGEgbmVzdGVkIHR1cGxlLCBmaW5kaW5nIHN0cmluZyBvYmplY3RzIHRoYXQKLSAgIG5lZWQgdG8gYmUgc3BsaXQuICovCisvKiBJbiBzb21lIGNhc2VzLCBUY2wgd2lsbCBzdGlsbCByZXR1cm4gc3RyaW5ncyB0aGF0IGFyZSBzdXBwb3NlZCB0bworICAgYmUgbGlzdHMuIFNwbGl0T2JqIHdhbGtzIHRocm91Z2ggYSBuZXN0ZWQgdHVwbGUsIGZpbmRpbmcgc3RyaW5nCisgICBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSBzcGxpdC4gKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKIFNwbGl0T2JqKFB5T2JqZWN0ICphcmcpCkBAIC02MDcsOSArNTE2LDEwIEBACiAgICAgVGthcHBPYmplY3QgKnY7CiAgICAgY2hhciAqYXJndjA7CiAKLSAgICB2ID0gUHlPYmplY3RfTmV3KFRrYXBwT2JqZWN0LCAmVGthcHBfVHlwZSk7CisgICAgdiA9IFB5T2JqZWN0X05ldyhUa2FwcE9iamVjdCwgKFB5VHlwZU9iamVjdCAqKSBUa2FwcF9UeXBlKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoVGthcHBfVHlwZSk7CiAKICAgICB2LT5pbnRlcnAgPSBUY2xfQ3JlYXRlSW50ZXJwKCk7CiAgICAgdi0+d2FudG9iamVjdHMgPSB3YW50b2JqZWN0czsKQEAgLTYyMCw3ICs1MzAsOCBAQAogCiAjaWZuZGVmIFRDTF9USFJFQURTCiAgICAgaWYgKHYtPnRocmVhZGVkKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJUY2wgaXMgdGhyZWFkZWQgYnV0IF90a2ludGVyIGlzIG5vdCIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlRjbCBpcyB0aHJlYWRlZCBidXQgX3RraW50ZXIgaXMgbm90Iik7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNzU3LDE2ICs2NjgsMTcgQEAKICAgICBQeU9iamVjdCAqc3RyaW5nOyAvKiBUaGlzIGNhbm5vdCBjYXVzZSBjeWNsZXMuICovCiB9IFB5VGNsT2JqZWN0OwogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFB5VGNsT2JqZWN0X1R5cGU7Ci0jZGVmaW5lIFB5VGNsT2JqZWN0X0NoZWNrKHYpICAgICgodiktPm9iX3R5cGUgPT0gJlB5VGNsT2JqZWN0X1R5cGUpCitzdGF0aWMgUHlPYmplY3QgKlB5VGNsT2JqZWN0X1R5cGU7CisjZGVmaW5lIFB5VGNsT2JqZWN0X0NoZWNrKHYpICgodiktPm9iX3R5cGUgPT0gKFB5VHlwZU9iamVjdCAqKSBQeVRjbE9iamVjdF9UeXBlKQogCiBzdGF0aWMgUHlPYmplY3QgKgogbmV3UHlUY2xPYmplY3QoVGNsX09iaiAqYXJnKQogewogICAgIFB5VGNsT2JqZWN0ICpzZWxmOwotICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoUHlUY2xPYmplY3QsICZQeVRjbE9iamVjdF9UeXBlKTsKKyAgICBzZWxmID0gUHlPYmplY3RfTmV3KFB5VGNsT2JqZWN0LCAoUHlUeXBlT2JqZWN0ICopIFB5VGNsT2JqZWN0X1R5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihQeVRjbE9iamVjdF9UeXBlKTsKICAgICBUY2xfSW5jclJlZkNvdW50KGFyZyk7CiAgICAgc2VsZi0+dmFsdWUgPSBhcmc7CiAgICAgc2VsZi0+c3RyaW5nID0gTlVMTDsKQEAgLTc3Niw5ICs2ODgsMTEgQEAKIHN0YXRpYyB2b2lkCiBQeVRjbE9iamVjdF9kZWFsbG9jKFB5VGNsT2JqZWN0ICpzZWxmKQogeworICAgIFB5T2JqZWN0ICp0cCA9IChQeU9iamVjdCAqKSBQeV9UWVBFKHNlbGYpOwogICAgIFRjbF9EZWNyUmVmQ291bnQoc2VsZi0+dmFsdWUpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+c3RyaW5nKTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgUHlfREVDUkVGKHRwKTsKIH0KIAogc3RhdGljIGNoYXIqCkBAIC04MjMsOCArNzM3LDEzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogUHlUY2xPYmplY3RfcmVwcihQeVRjbE9iamVjdCAqc2VsZikKIHsKLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+dmFsdWUtPnR5cGVQdHItPm5hbWUsIHNlbGYtPnZhbHVlKTsKKyAgICBQeU9iamVjdCAqcmVwciwgKnN0ciA9IFB5VGNsT2JqZWN0X3N0cihzZWxmLCBOVUxMKTsKKyAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdDogJVI+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+dmFsdWUtPnR5cGVQdHItPm5hbWUsIHN0cik7CisgICAgUHlfREVDUkVGKHN0cik7CisgICAgcmV0dXJuIHJlcHI7CiB9CiAKICNkZWZpbmUgVEVTVF9DT05EKGNvbmQpICgoY29uZCkgPyBQeV9UcnVlIDogUHlfRmFsc2UpCkBAIC04OTgsNTAgKzgxNywyNSBAQAogICAgIHswfSwKIH07CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlUY2xPYmplY3RfVHlwZSA9IHsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX3RraW50ZXIuVGNsX09iaiIsICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLwotICAgIHNpemVvZihQeVRjbE9iamVjdCksICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAvKiBtZXRob2RzICovCi0gICAgKGRlc3RydWN0b3IpUHlUY2xPYmplY3RfZGVhbGxvYywvKnRwX2RlYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KLSAgICAocmVwcmZ1bmMpUHlUY2xPYmplY3RfcmVwciwgICAgICAgICAvKnRwX3JlcHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAocmVwcmZ1bmMpUHlUY2xPYmplY3Rfc3RyLCAgICAgICAgICAvKnRwX3N0ciovCi0gICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICBQeVRjbE9iamVjdF9yaWNoY29tcGFyZSwgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KLSAgICBQeVRjbE9iamVjdF9nZXRzZXRsaXN0LCAgICAgICAgICAgICAvKnRwX2dldHNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXNfZ2MqLworc3RhdGljIFB5VHlwZV9TbG90IFB5VGNsT2JqZWN0X1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfZGVhbGxvYywgKGRlc3RydWN0b3IpUHlUY2xPYmplY3RfZGVhbGxvY30sCisgICAge1B5X3RwX3JlcHIsIChyZXByZnVuYylQeVRjbE9iamVjdF9yZXByfSwKKyAgICB7UHlfdHBfc3RyLCAocmVwcmZ1bmMpUHlUY2xPYmplY3Rfc3RyfSwKKyAgICB7UHlfdHBfZ2V0YXR0cm8sIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyfSwKKyAgICB7UHlfdHBfcmljaGNvbXBhcmUsIFB5VGNsT2JqZWN0X3JpY2hjb21wYXJlfSwKKyAgICB7UHlfdHBfZ2V0c2V0LCBQeVRjbE9iamVjdF9nZXRzZXRsaXN0fSwKKyAgICB7MCwgMH0KIH07CiAKK3N0YXRpYyBQeVR5cGVfU3BlYyBQeVRjbE9iamVjdF9UeXBlX3NwZWMgPSB7CisgICAgIl90a2ludGVyLlRjbF9PYmoiLAorICAgIHNpemVvZihQeVRjbE9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgUHlUY2xPYmplY3RfVHlwZV9zbG90cywKK307CisKKwogc3RhdGljIFRjbF9PYmoqCiBBc09iaihQeU9iamVjdCAqdmFsdWUpCiB7CkBAIC0xMzU2LDQyICsxMjUwLDYgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfR2xvYmFsQ2FsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgLyogQ291bGQgZG8gdGhlIHNhbWUgaGVyZSBhcyBmb3IgVGthcHBfQ2FsbCgpLCBidXQgdGhpcyBpcyBub3QgdXNlZAotICAgICAgIG11Y2gsIHNvIEkgY2FuJ3QgYmUgYm90aGVyZWQuICBVbmZvcnR1bmF0ZWx5IFRjbCBkb2Vzbid0IGV4cG9ydCBhCi0gICAgICAgd2F5IGZvciB0aGUgdXNlciB0byBkbyB3aGF0IGFsbCBpdHMgR2xvYmFsKiB2YXJpYW50cyBkbyAoc2F2ZSBhbmQKLSAgICAgICByZXNldCB0aGUgc2NvcGUgcG9pbnRlciwgY2FsbCB0aGUgbG9jYWwgdmVyc2lvbiwgcmVzdG9yZSB0aGUgc2F2ZWQKLSAgICAgICBzY29wZSBwb2ludGVyKS4gKi8KLQotICAgIGNoYXIgKmNtZDsKLSAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLQotICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgImdsb2JhbGNhbGwgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7Ci0KLSAgICBjbWQgID0gTWVyZ2UoYXJncyk7Ci0gICAgaWYgKGNtZCkgewotICAgICAgICBpbnQgZXJyOwotICAgICAgICBFTlRFUl9UQ0wKLSAgICAgICAgZXJyID0gVGNsX0dsb2JhbEV2YWwoVGthcHBfSW50ZXJwKHNlbGYpLCBjbWQpOwotICAgICAgICBFTlRFUl9PVkVSTEFQCi0gICAgICAgIGlmIChlcnIgPT0gVENMX0VSUk9SKQotICAgICAgICAgICAgcmVzID0gVGtpbnRlcl9FcnJvcihzZWxmKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoVGthcHBfUmVzdWx0KHNlbGYpKTsKLSAgICAgICAgTEVBVkVfT1ZFUkxBUF9UQ0wKLSAgICAgICAgY2tmcmVlKGNtZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0V2YWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGNoYXIgKnNjcmlwdDsKQEAgLTE0MTUsMzQgKzEyNzMsNiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfR2xvYmFsRXZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgY2hhciAqc2NyaXB0OwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotICAgIGludCBlcnI7Ci0KLSAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICJnbG9iYWxldmFsIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgICAgMSkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpnbG9iYWxldmFsIiwgJnNjcmlwdCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7Ci0KLSAgICBFTlRFUl9UQ0wKLSAgICBlcnIgPSBUY2xfR2xvYmFsRXZhbChUa2FwcF9JbnRlcnAoc2VsZiksIHNjcmlwdCk7Ci0gICAgRU5URVJfT1ZFUkxBUAotICAgIGlmIChlcnIgPT0gVENMX0VSUk9SKQotICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOwotICAgIGVsc2UKLSAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoVGthcHBfUmVzdWx0KHNlbGYpKTsKLSAgICBMRUFWRV9PVkVSTEFQX1RDTAotICAgIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCiBUa2FwcF9FdmFsRmlsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqZmlsZU5hbWU7CkBAIC0xNTAyLDggKzEzMzIsNyBAQAogICAgIFRjbF9BZGRFcnJvckluZm8oVGthcHBfSW50ZXJwKHNlbGYpLCBtc2cpOwogICAgIExFQVZFX1RDTAogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTE3MDEsNyArMTUzMCw4IEBACiAgICAgdHJlcyA9IFRjbF9HZXRWYXIyRXgoVGthcHBfSW50ZXJwKHNlbGYpLCBuYW1lMSwgbmFtZTIsIGZsYWdzKTsKICAgICBFTlRFUl9PVkVSTEFQCiAgICAgaWYgKHRyZXMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICgoKFRrYXBwT2JqZWN0KilzZWxmKS0+d2FudG9iamVjdHMpIHsKICAgICAgICAgICAgIHJlcyA9IEZyb21PYmooc2VsZiwgdHJlcyk7CkBAIC0xNzYwLDcgKzE1OTAsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0dsb2JhbFVuc2V0VmFyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gdmFyX2ludm9rZShVbnNldFZhciwgc2VsZiwgYXJncywgVENMX0xFQVZFX0VSUl9NU0cgfCBUQ0xfR0xPQkFMX09OTFkpOworICAgIHJldHVybiB2YXJfaW52b2tlKFVuc2V0VmFyLCBzZWxmLCBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgIFRDTF9MRUFWRV9FUlJfTVNHIHwgVENMX0dMT0JBTF9PTkxZKTsKIH0KIAogCkBAIC0yMDI2LDI3ICsxODU3LDYgQEAKICAgICByZXR1cm4gdjsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX01lcmdlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpzOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAibWVyZ2UgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcyA9IE1lcmdlKGFyZ3MpOwotCi0gICAgaWYgKHMpIHsKLSAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocyk7Ci0gICAgICAgIGNrZnJlZShzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCiAKIAogLyoqIFRjbCBDb21tYW5kICoqLwpAQCAtMjIzMiw4ICsyMDQyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTIyNzQsOCArMjA4Myw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCAiY2FuJ3QgZGVsZXRlIFRjbCBjb21tYW5kIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMjM3OSw4ICsyMTg3LDcgQEAKICAgICBFTlRFUl9UQ0wKICAgICBUY2xfQ3JlYXRlRmlsZUhhbmRsZXIodGZpbGUsIG1hc2ssIEZpbGVIYW5kbGVyLCAoQ2xpZW50RGF0YSkgZGF0YSk7CiAgICAgTEVBVkVfVENMCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjQwNCwxNSArMjIxMSwxNCBAQAogICAgIEVOVEVSX1RDTAogICAgIFRjbF9EZWxldGVGaWxlSGFuZGxlcih0ZmlsZSk7CiAgICAgTEVBVkVfVENMCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfQ1JFQVRFRklMRUhBTkRMRVIgKi8KIAogCiAvKioqKiBUa3R0IE9iamVjdCAodGltZXIgdG9rZW4pICoqKiovCiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGt0dF9UeXBlOworc3RhdGljIFB5T2JqZWN0ICpUa3R0X1R5cGU7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC0yNDM3LDggKzIyNDMsNyBAQAogICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsgLyogU2VlIFRrdHRfTmV3KCkgKi8KICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgVGt0dF9tZXRob2RzW10gPQpAQCAtMjQ1Miw5ICsyMjU3LDEwIEBACiB7CiAgICAgVGt0dE9iamVjdCAqdjsKIAotICAgIHYgPSBQeU9iamVjdF9OZXcoVGt0dE9iamVjdCwgJlRrdHRfVHlwZSk7CisgICAgdiA9IFB5T2JqZWN0X05ldyhUa3R0T2JqZWN0LCAoUHlUeXBlT2JqZWN0ICopIFRrdHRfVHlwZSk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKFRrdHRfVHlwZSk7CiAKICAgICBQeV9JTkNSRUYoZnVuYyk7CiAgICAgdi0+dG9rZW4gPSBOVUxMOwpAQCAtMjQ3MCwxMCArMjI3NiwxMiBAQAogewogICAgIFRrdHRPYmplY3QgKnYgPSAoVGt0dE9iamVjdCAqKXNlbGY7CiAgICAgUHlPYmplY3QgKmZ1bmMgPSB2LT5mdW5jOworICAgIFB5T2JqZWN0ICp0cCA9IChQeU9iamVjdCAqKSBQeV9UWVBFKHNlbGYpOwogCiAgICAgUHlfWERFQ1JFRihmdW5jKTsKIAogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBQeV9ERUNSRUYodHApOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjQ4NSwzOCArMjI5MywyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5mdW5jID09IE5VTEwgPyAiLCBoYW5kbGVyIGRlbGV0ZWQiIDogIiIpOwogfQogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFRrdHRfVHlwZSA9Ci17Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgInRrdGltZXJ0b2tlbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUgKi8KLSAgICBzaXplb2YoVGt0dE9iamVjdCksICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplICovCi0gICAgVGt0dF9EZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkICovCi0gICAgVGt0dF9SZXByLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZsYWdzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIFRrdHRfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KK3N0YXRpYyBQeVR5cGVfU2xvdCBUa3R0X1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfZGVhbGxvYywgVGt0dF9EZWFsbG9jfSwKKyAgICB7UHlfdHBfcmVwciwgVGt0dF9SZXByfSwKKyAgICB7UHlfdHBfbWV0aG9kcywgVGt0dF9tZXRob2RzfSwKKyAgICB7MCwgMH0KIH07CiAKK3N0YXRpYyBQeVR5cGVfU3BlYyBUa3R0X1R5cGVfc3BlYyA9IHsKKyAgICAidGt0aW1lcnRva2VuIiwKKyAgICBzaXplb2YoVGt0dE9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgVGt0dF9UeXBlX3Nsb3RzLAorfTsKIAogCiAvKiogVGltZXIgSGFuZGxlciAqKi8KQEAgLTI2MzgsOCArMjQyOCw3IEBACiAgICAgICAgIGV4Y0luQ21kID0gdmFsSW5DbWQgPSB0cmJJbkNtZCA9IE5VTEw7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNjY1LDggKzI0NTQsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHF1aXRNYWluTG9vcCA9IDE7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjcxNiwxNSArMjUwNCwxNSBAQAogICAgIH0KICAgICBpZiAoX3RrX2V4aXN0cyA9PSBOVUxMIHx8IHN0cmNtcChfdGtfZXhpc3RzLCAiMSIpICE9IDApICAgICB7CiAgICAgICAgIGlmIChUa19Jbml0KGludGVycCkgICAgICAgICAgICAgPT0gVENMX0VSUk9SKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7CiAjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSwogICAgICAgICAgICAgdGtfbG9hZF9mYWlsZWQgPSAxOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNzM4LDggKzI1MjYsNyBAQAogICAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKCgoVGthcHBPYmplY3QqKXNlbGYpLT53YW50b2JqZWN0cyk7CiAgICAgKChUa2FwcE9iamVjdCopc2VsZiktPndhbnRvYmplY3RzID0gd2FudG9iamVjdHM7CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNzQ4LDggKzI1MzUsNyBAQAogCiAgICAgKChUa2FwcE9iamVjdCopc2VsZiktPmRpc3BhdGNoaW5nID0gMTsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCkBAIC0yNzYwLDkgKzI1NDYsNyBAQAogICAgIHsid2lsbGRpc3BhdGNoIiwgICAgICAgVGthcHBfV2lsbERpc3BhdGNoLCBNRVRIX05PQVJHU30sCiAgICAgeyJ3YW50b2JqZWN0cyIsICAgICAgICAgICAgVGthcHBfV2FudE9iamVjdHMsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJjYWxsIiwgICAgICAgICAgICAgICAgICAgVGthcHBfQ2FsbCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Imdsb2JhbGNhbGwiLCAgICAgICAgICAgICBUa2FwcF9HbG9iYWxDYWxsLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZXZhbCIsICAgICAgICAgICAgICAgICAgIFRrYXBwX0V2YWwsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnbG9iYWxldmFsIiwgICAgICAgICAgICAgVGthcHBfR2xvYmFsRXZhbCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImV2YWxmaWxlIiwgICAgICAgICAgICAgICBUa2FwcF9FdmFsRmlsZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7InJlY29yZCIsICAgICAgICAgICAgICAgICBUa2FwcF9SZWNvcmQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJhZGRlcnJvcmluZm8iLCAgICAgICBUa2FwcF9BZGRFcnJvckluZm8sIE1FVEhfVkFSQVJHU30sCkBAIC0yNzgxLDcgKzI1NjUsNiBAQAogICAgIHsiZXhwcmJvb2xlYW4iLCAgICAgICAgVGthcHBfRXhwckJvb2xlYW4sIE1FVEhfVkFSQVJHU30sCiAgICAgeyJzcGxpdGxpc3QiLCAgICAgICAgICAgICAgVGthcHBfU3BsaXRMaXN0LCBNRVRIX1ZBUkFSR1N9LAogICAgIHsic3BsaXQiLCAgICAgICAgICAgICAgICAgIFRrYXBwX1NwbGl0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHsibWVyZ2UiLCAgICAgICAgICAgICAgICAgIFRrYXBwX01lcmdlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiY3JlYXRlY29tbWFuZCIsICAgICAgVGthcHBfQ3JlYXRlQ29tbWFuZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImRlbGV0ZWNvbW1hbmQiLCAgICAgIFRrYXBwX0RlbGV0ZUNvbW1hbmQsIE1FVEhfVkFSQVJHU30sCiAjaWZkZWYgSEFWRV9DUkVBVEVGSUxFSEFORExFUgpAQCAtMjgwNCw0NCArMjU4NywyOSBAQAogc3RhdGljIHZvaWQKIFRrYXBwX0RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCiB7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAgICAgLypDSEVDS19UQ0xfQVBQQVJUTUVOVDsqLwogICAgIEVOVEVSX1RDTAogICAgIFRjbF9EZWxldGVJbnRlcnAoVGthcHBfSW50ZXJwKHNlbGYpKTsKICAgICBMRUFWRV9UQ0wKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgUHlfREVDUkVGKHRwKTsKICAgICBEaXNhYmxlRXZlbnRIb29rKCk7CiB9CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGthcHBfVHlwZSA9Ci17Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgInRrYXBwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUgKi8KLSAgICBzaXplb2YoVGthcHBPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplICovCi0gICAgVGthcHBfRGVhbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZsYWdzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIFRrYXBwX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KK3N0YXRpYyBQeVR5cGVfU2xvdCBUa2FwcF9UeXBlX3Nsb3RzW10gPSB7CisgICAge1B5X3RwX2RlYWxsb2MsIFRrYXBwX0RlYWxsb2N9LAorICAgIHtQeV90cF9tZXRob2RzLCBUa2FwcF9tZXRob2RzfSwKKyAgICB7MCwgMH0KK307CisKKworc3RhdGljIFB5VHlwZV9TcGVjIFRrYXBwX1R5cGVfc3BlYyA9IHsKKyAgICAidGthcHAiLAorICAgIHNpemVvZihUa2FwcE9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgVGthcHBfVHlwZV9zbG90cywKIH07CiAKIApAQCAtMjk4MSw3ICsyNzQ5LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIFRrYXBwX05ldyhzY3JlZW5OYW1lLCBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUsIHdhbnRvYmplY3RzLCAgICAgd2FudFRrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlLCB3YW50b2JqZWN0cywgd2FudFRrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmMsIHVzZSk7CiB9CiAKQEAgLTI5OTcsOCArMjc2NSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBUa2ludGVyX2J1c3l3YWl0aW50ZXJ2YWwgPSBuZXdfdmFsOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIGNoYXIgc2V0YnVzeXdhaXRpbnRlcnZhbF9kb2NbXSA9CkBAIC0zMTMxLDI3ICsyODk4LDYgQEAKIH0KIAogCi0vKiBhbGwgZXJyb3JzIHdpbGwgYmUgY2hlY2tlZCBpbiBvbmUgZmVsbCBzd29vcCBpbiBpbml0X3RraW50ZXIoKSAqLwotc3RhdGljIHZvaWQKLWluc19sb25nKFB5T2JqZWN0ICpkLCBjaGFyICpuYW1lLCBsb25nIHZhbCkKLXsKLSAgICBQeU9iamVjdCAqdiA9IFB5TG9uZ19Gcm9tTG9uZyh2YWwpOwotICAgIGlmICh2KSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsIG5hbWUsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotfQotc3RhdGljIHZvaWQKLWluc19zdHJpbmcoUHlPYmplY3QgKmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCkKLXsKLSAgICBQeU9iamVjdCAqdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHZhbCk7Ci0gICAgaWYgKHYpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgbmFtZSwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfdGtpbnRlcm1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgIl90a2ludGVyIiwKQEAgLTMxNjcsNDUgKzI5MTMsMTExIEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X190a2ludGVyKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdWV4ZSwgKmNleGU7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZUa2FwcF9UeXBlKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOworICBQeU9iamVjdCAqbSwgKnVleGUsICpjZXhlLCAqbzsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgdGNsX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgaWYgKHRjbF9sb2NrID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfdGtpbnRlcm1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBUa2ludGVyX1RjbEVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGtpbnRlci5UY2xFcnJvciIsIE5VTEwsIE5VTEwpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUY2xFcnJvciIsIFRraW50ZXJfVGNsRXJyb3IpOwotCi0gICAgaW5zX2xvbmcoZCwgIlJFQURBQkxFIiwgVENMX1JFQURBQkxFKTsKLSAgICBpbnNfbG9uZyhkLCAiV1JJVEFCTEUiLCBUQ0xfV1JJVEFCTEUpOwotICAgIGluc19sb25nKGQsICJFWENFUFRJT04iLCBUQ0xfRVhDRVBUSU9OKTsKLSAgICBpbnNfbG9uZyhkLCAiV0lORE9XX0VWRU5UUyIsIFRDTF9XSU5ET1dfRVZFTlRTKTsKLSAgICBpbnNfbG9uZyhkLCAiRklMRV9FVkVOVFMiLCBUQ0xfRklMRV9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJUSU1FUl9FVkVOVFMiLCBUQ0xfVElNRVJfRVZFTlRTKTsKLSAgICBpbnNfbG9uZyhkLCAiSURMRV9FVkVOVFMiLCBUQ0xfSURMRV9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJBTExfRVZFTlRTIiwgVENMX0FMTF9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJET05UX1dBSVQiLCBUQ0xfRE9OVF9XQUlUKTsKLSAgICBpbnNfc3RyaW5nKGQsICJUS19WRVJTSU9OIiwgVEtfVkVSU0lPTik7Ci0gICAgaW5zX3N0cmluZyhkLCAiVENMX1ZFUlNJT04iLCBUQ0xfVkVSU0lPTik7Ci0KLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiVGthcHBUeXBlIiwgKFB5T2JqZWN0ICopJlRrYXBwX1R5cGUpOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmVGt0dF9UeXBlKSA8IDApIHsKKyAgICBvID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGtpbnRlci5UY2xFcnJvciIsIE5VTEwsIE5VTEwpOworICAgIGlmIChvID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRrdHRUeXBlIiwgKFB5T2JqZWN0ICopJlRrdHRfVHlwZSk7CisgICAgUHlfSU5DUkVGKG8pOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRjbEVycm9yIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBUa2ludGVyX1RjbEVycm9yID0gbzsKIAotICAgIFB5X1RZUEUoJlB5VGNsT2JqZWN0X1R5cGUpID0gJlB5VHlwZV9UeXBlOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUY2xfT2JqIiwgKFB5T2JqZWN0ICopJlB5VGNsT2JqZWN0X1R5cGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkVBREFCTEUiLCBUQ0xfUkVBREFCTEUpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiV1JJVEFCTEUiLCBUQ0xfV1JJVEFCTEUpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVhDRVBUSU9OIiwgVENMX0VYQ0VQVElPTikpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJXSU5ET1dfRVZFTlRTIiwgVENMX1dJTkRPV19FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRklMRV9FVkVOVFMiLCBUQ0xfRklMRV9FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElNRVJfRVZFTlRTIiwgVENMX1RJTUVSX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJRExFX0VWRU5UUyIsIFRDTF9JRExFX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBTExfRVZFTlRTIiwgVENMX0FMTF9FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRE9OVF9XQUlUIiwgVENMX0RPTlRfV0FJVCkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJUS19WRVJTSU9OIiwgVEtfVkVSU0lPTikpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJUQ0xfVkVSU0lPTiIsIFRDTF9WRVJTSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG8gPSBQeVR5cGVfRnJvbVNwZWMoJlRrYXBwX1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUa2FwcFR5cGUiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRrYXBwX1R5cGUgPSBvOworCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmVGt0dF9UeXBlX3NwZWMpOworICAgIGlmIChvID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGt0dFR5cGUiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRrdHRfVHlwZSA9IG87CisKKyAgICBvID0gUHlUeXBlX0Zyb21TcGVjKCZQeVRjbE9iamVjdF9UeXBlX3NwZWMpOworICAgIGlmIChvID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGNsX09iaiIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUY2xPYmplY3RfVHlwZSA9IG87CiAKICNpZmRlZiBUS19BUVVBCiAgICAgLyogVGtfTWFjT1NYU2V0dXBUa05vdGlmaWVyIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBUY2wncyBzdWJzeXN0ZW1zCmRpZmYgLS1naXQgYS9Nb2R1bGVzL193ZWFrcmVmLmMgYi9Nb2R1bGVzL193ZWFrcmVmLmMKaW5kZXggODg5OTViOC4uMWU4ZGViYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fd2Vha3JlZi5jCisrKyBiL01vZHVsZXMvX3dlYWtyZWYuYwpAQCAtNCwyNSArNCw1NCBAQAogI2RlZmluZSBHRVRfV0VBS1JFRlNfTElTVFBUUihvKSBcCiAgICAgICAgICgoUHlXZWFrUmVmZXJlbmNlICoqKSBQeU9iamVjdF9HRVRfV0VBS1JFRlNfTElTVFBUUihvKSkKIAorLypbY2xpbmljXQogCi1QeURvY19TVFJWQVIod2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19fLAotImdldHdlYWtyZWZjb3VudChvYmplY3QpIC0tIHJldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlc1xuIgotInRvICdvYmplY3QnLiIpOworbW9kdWxlIF93ZWFrcmVmCisKK193ZWFrcmVmLmdldHdlYWtyZWZjb3VudCAtPiBQeV9zc2l6ZV90CisKKyAgb2JqZWN0OiBvYmplY3QKKyAgLworCitSZXR1cm4gdGhlIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gJ29iamVjdCcuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19fLAorIlJldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byBcJ29iamVjdFwnLlxuIgorIlxuIgorIl93ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvYmplY3QpIik7CisKKyNkZWZpbmUgX1dFQUtSRUZfR0VUV0VBS1JFRkNPVU5UX01FVEhPRERFRiAgICBcCisgICAgeyJnZXR3ZWFrcmVmY291bnQiLCAoUHlDRnVuY3Rpb24pX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50LCBNRVRIX08sIF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX199LAorCitzdGF0aWMgUHlfc3NpemVfdAorX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmplY3QpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmplY3QpCitfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmplY3QpCiB7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBfcmV0dXJuX3ZhbHVlOworICAgIF9yZXR1cm5fdmFsdWUgPSBfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfaW1wbChzZWxmLCBvYmplY3QpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKIAotICAgIGlmIChQeVR5cGVfU1VQUE9SVFNfV0VBS1JFRlMoUHlfVFlQRShvYmplY3QpKSkgewotICAgICAgICBQeVdlYWtSZWZlcmVuY2UgKipsaXN0ID0gR0VUX1dFQUtSRUZTX0xJU1RQVFIob2JqZWN0KTsKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KIAotICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbVNzaXplX3QoX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQoKmxpc3QpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcoMCk7CitzdGF0aWMgUHlfc3NpemVfdAorX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmplY3QpCisvKltjbGluaWMgY2hlY2tzdW06IDBiN2U3ZGRkODdkNDgzNzE5ZWJhYzBmYmEzNjRmZmYwZWQwMTgyZDldKi8KK3sKKyAgICBQeVdlYWtSZWZlcmVuY2UgKipsaXN0OwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoIVB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhQeV9UWVBFKG9iamVjdCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBsaXN0ID0gR0VUX1dFQUtSRUZTX0xJU1RQVFIob2JqZWN0KTsKKyAgICByZXR1cm4gX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQoKmxpc3QpOwogfQogCiAKQEAgLTc4LDggKzEwNyw3IEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZgogd2Vha3JlZl9mdW5jdGlvbnNbXSA9ICB7Ci0gICAgeyJnZXR3ZWFrcmVmY291bnQiLCB3ZWFrcmVmX2dldHdlYWtyZWZjb3VudCwgICAgICAgIE1FVEhfTywKLSAgICAgd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19ffSwKKyAgICBfV0VBS1JFRl9HRVRXRUFLUkVGQ09VTlRfTUVUSE9EREVGCiAgICAgeyJnZXR3ZWFrcmVmcyIsICAgICB3ZWFrcmVmX2dldHdlYWtyZWZzLCAgICAgICAgICAgIE1FVEhfTywKICAgICAgd2Vha3JlZl9nZXR3ZWFrcmVmc19fZG9jX199LAogICAgIHsicHJveHkiLCAgICAgICAgICAgd2Vha3JlZl9wcm94eSwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsCkBAIC0xMDYsNyArMTM0LDcgQEAKICAgICBQeU9iamVjdCAqbTsKIAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJndlYWtyZWZtb2R1bGUpOwotICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIGlmIChtICE9IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKCZfUHlXZWFrcmVmX1JlZlR5cGUpOwogICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInJlZiIsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL193aW5hcGkuYyBiL01vZHVsZXMvX3dpbmFwaS5jCmluZGV4IGM1M2Q1NWEuLjIwZDAwNjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3dpbmFwaS5jCisrKyBiL01vZHVsZXMvX3dpbmFwaS5jCkBAIC02Miw2ICs2Miw4IEBACiAKICNkZWZpbmUgVF9IQU5ETEUgVF9QT0lOVEVSCiAKKyNkZWZpbmUgRFdPUkRfTUFYIDQyOTQ5NjcyOTVVCisKIC8qIEdyYWIgQ2FuY2VsSW9FeCBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCiBzdGF0aWMgaW50IGhhc19DYW5jZWxJb0V4ID0gLTE7CiBzdGF0aWMgQk9PTCAoQ0FMTEJBQ0sgKlB5X0NhbmNlbElvRXgpKEhBTkRMRSwgTFBPVkVSTEFQUEVEKTsKQEAgLTExNDIsNyArMTE0NCw3IEBACiAgICAgSEFORExFIGhhbmRsZTsKICAgICBQeV9idWZmZXIgX2J1ZiwgKmJ1ZjsKICAgICBQeU9iamVjdCAqYnVmb2JqOwotICAgIERXT1JEIHdyaXR0ZW47CisgICAgRFdPUkQgbGVuLCB3cml0dGVuOwogICAgIEJPT0wgcmV0OwogICAgIGludCB1c2Vfb3ZlcmxhcHBlZCA9IDA7CiAgICAgRFdPUkQgZXJyOwpAQCAtMTE3MCw3ICsxMTcyLDggQEAKICAgICB9CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmV0ID0gV3JpdGVGaWxlKGhhbmRsZSwgYnVmLT5idWYsIGJ1Zi0+bGVuLCAmd3JpdHRlbiwKKyAgICBsZW4gPSAoRFdPUkQpUHlfTUlOKGJ1Zi0+bGVuLCBEV09SRF9NQVgpOworICAgIHJldCA9IFdyaXRlRmlsZShoYW5kbGUsIGJ1Zi0+YnVmLCBsZW4sICZ3cml0dGVuLAogICAgICAgICAgICAgICAgICAgICBvdmVybGFwcGVkID8gJm92ZXJsYXBwZWQtPm92ZXJsYXBwZWQgOiBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2FycmF5bW9kdWxlLmMgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKaW5kZXggOTZjOWU1Yi4uNzViMzFmNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jCisrKyBiL01vZHVsZXMvYXJyYXltb2R1bGUuYwpAQCAtNTEzLDcgKzUxMyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0YXJyYXlpdGVtKFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCBpKQogewotICAgIHJlZ2lzdGVyIGFycmF5b2JqZWN0ICphcDsKKyAgICBhcnJheW9iamVjdCAqYXA7CiAgICAgYXNzZXJ0KGFycmF5X0NoZWNrKG9wKSk7CiAgICAgYXAgPSAoYXJyYXlvYmplY3QgKilvcDsKICAgICBhc3NlcnQoaT49MCAmJiBpPFB5X1NJWkUoYXApKTsKQEAgLTk2OCw4ICs5NjgsMTMgQEAKICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKLSAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOworICAgICAgICBQeU9iamVjdCAqc2VsZmk7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgICAgICBpZiAoY21wID4gMCkKICAgICAgICAgICAgIGNvdW50Kys7CkBAIC05OTAsOCArOTk1LDEzIEBACiAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewotICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7Ci0gICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKKyAgICAgICAgUHlPYmplY3QgKnNlbGZpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIHNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICAgICAgaWYgKGNtcCA+IDApIHsKICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaSk7CkBAIC0xMDE2LDYgKzEwMjYsOCBAQAogCiAgICAgZm9yIChpID0gMCwgY21wID0gMCA7IGNtcCA9PSAwICYmIGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgfQpAQCAtMTAyOCw4ICsxMDQwLDEzIEBACiAgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLGkpOwotICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CisgICAgICAgIFB5T2JqZWN0ICpzZWxmaTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICAgICAgaWYgKGNtcCA+IDApIHsKICAgICAgICAgICAgIGlmIChhcnJheV9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLApAQCAtMTA2OCw3ICsxMDg1LDkgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJwb3AgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICB2ID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsaSk7CisgICAgdiA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoYXJyYXlfYXNzX3NsaWNlKHNlbGYsIGksIGkrMSwgKFB5T2JqZWN0ICopTlVMTCkgIT0gMCkgewogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTIwNiw4ICsxMjI1LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhcnJheV9yZXZlcnNlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaXRlbXNpemUgPSBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemU7Ci0gICAgcmVnaXN0ZXIgY2hhciAqcCwgKnE7CisgICAgUHlfc3NpemVfdCBpdGVtc2l6ZSA9IHNlbGYtPm9iX2Rlc2NyLT5pdGVtc2l6ZTsKKyAgICBjaGFyICpwLCAqcTsKICAgICAvKiBsaXR0bGUgYnVmZmVyIHRvIGhvbGQgaXRlbXMgd2hpbGUgc3dhcHBpbmcgKi8KICAgICBjaGFyIHRtcFsyNTZdOyAgICAgIC8qIDggaXMgcHJvYmFibHkgZW5vdWdoIC0tIGJ1dCB3aHkgc2tpbXAgKi8KICAgICBhc3NlcnQoKHNpemVfdClpdGVtc2l6ZSA8PSBzaXplb2YodG1wKSk7CkBAIC0xMzg2LDEzICsxNDA1LDE2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKnYgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5TGlzdF9TZXRJdGVtKGxpc3QsIGksIHYpOworICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKFB5TGlzdF9TZXRJdGVtKGxpc3QsIGksIHYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHJldHVybiBsaXN0OworCitlcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5RG9jX1NUUlZBUih0b2xpc3RfZG9jLApAQCAtMTY2NCwxMSArMTY4Niw4IEBACiBzdGF0aWMgZW51bSBtYWNoaW5lX2Zvcm1hdF9jb2RlCiB0eXBlY29kZV90b19tZm9ybWF0X2NvZGUoY2hhciB0eXBlY29kZSkKIHsKLSNpZmRlZiBXT1JEU19CSUdFTkRJQU4KLSAgICBjb25zdCBpbnQgaXNfYmlnX2VuZGlhbiA9IDE7Ci0jZWxzZQotICAgIGNvbnN0IGludCBpc19iaWdfZW5kaWFuID0gMDsKLSNlbmRpZgorICAgIGNvbnN0IGludCBpc19iaWdfZW5kaWFuID0gUFlfQklHX0VORElBTjsKKwogICAgIHNpemVfdCBpbnRzaXplOwogICAgIGludCBpc19zaWduZWQ7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMgYi9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCmluZGV4IGY2OGQ4MDQuLjk4ODcwMTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYwpAQCAtMTAsOCArMTAsNiBAQAogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIChmb3IgYXRleGl0X2NsZWFudXApICovCiBzdGF0aWMgUHlPYmplY3QgKmF0ZXhpdF9jbGVhcihQeU9iamVjdCosIFB5T2JqZWN0Kik7Ci0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uIChmb3IgYXRleGl0X2NhbGxmdW5jcykgKi8KLXN0YXRpYyB2b2lkIGF0ZXhpdF9jbGVhbnVwKFB5T2JqZWN0Kik7CiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIG1vZHVsZSBvYmplY3QgKi8KIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgYXRleGl0bW9kdWxlOwogCkBAIC0zMyw2ICszMSwzNSBAQAogI2RlZmluZSBHRVRfQVRFWElUX1NUQVRFKG1vZCkgKChhdGV4aXRtb2R1bGVfc3RhdGUqKVB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCiAKIAorc3RhdGljIHZvaWQKK2F0ZXhpdF9kZWxldGVfY2IoYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZSwgaW50IGkpCit7CisgICAgYXRleGl0X2NhbGxiYWNrICpjYjsKKworICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV0gPSBOVUxMOworICAgIFB5X0RFQ1JFRihjYi0+ZnVuYyk7CisgICAgUHlfREVDUkVGKGNiLT5hcmdzKTsKKyAgICBQeV9YREVDUkVGKGNiLT5rd2FyZ3MpOworICAgIFB5TWVtX0ZyZWUoY2IpOworfQorCisvKiBDbGVhciBhbGwgY2FsbGJhY2tzIHdpdGhvdXQgY2FsbGluZyB0aGVtICovCitzdGF0aWMgdm9pZAorYXRleGl0X2NsZWFudXAoYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZSkKK3sKKyAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtb2RzdGF0ZS0+bmNhbGxiYWNrczsgaSsrKSB7CisgICAgICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgICAgIGlmIChjYiA9PSBOVUxMKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihtb2RzdGF0ZSwgaSk7CisgICAgfQorICAgIG1vZHN0YXRlLT5uY2FsbGJhY2tzID0gMDsKK30KKwogLyogSW5zdGFsbGVkIGludG8gcHl0aG9ucnVuLmMncyBhdGV4aXQgbWVjaGFuaXNtICovCiAKIHN0YXRpYyB2b2lkCkBAIC03OCwzNCArMTA1LDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdGV4aXRfY2xlYW51cChtb2R1bGUpOworICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHN0YXRlKTsKIAogICAgIGlmIChleGNfdHlwZSkKICAgICAgICAgUHlFcnJfUmVzdG9yZShleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdGIpOwogfQogCi1zdGF0aWMgdm9pZAotYXRleGl0X2RlbGV0ZV9jYihQeU9iamVjdCAqc2VsZiwgaW50IGkpCi17Ci0gICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKLSAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOwotCi0gICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwotICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07Ci0gICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV0gPSBOVUxMOwotICAgIFB5X0RFQ1JFRihjYi0+ZnVuYyk7Ci0gICAgUHlfREVDUkVGKGNiLT5hcmdzKTsKLSAgICBQeV9YREVDUkVGKGNiLT5rd2FyZ3MpOwotICAgIFB5TWVtX0ZyZWUoY2IpOwotfQotCi1zdGF0aWMgdm9pZAotYXRleGl0X2NsZWFudXAoUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKnIgPSBhdGV4aXRfY2xlYXIoc2VsZiwgTlVMTCk7Ci0gICAgUHlfREVDUkVGKHIpOwotfQotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIE1vZHVsZSBtZXRob2RzLiAqLwogCkBAIC0xOTQsMjEgKzE5OSw1MCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF0ZXhpdF9jbGVhcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKKyAgICBhdGV4aXRfY2xlYW51cChHRVRfQVRFWElUX1NUQVRFKHNlbGYpKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGF0ZXhpdF9uY2FsbGJhY2tzX19kb2NfXywKKyJfbmNhbGxiYWNrcygpIC0+IGludFxuXAorXG5cCitSZXR1cm4gdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIGV4aXQgZnVuY3Rpb25zLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXRleGl0X25jYWxsYmFja3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CiAgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKLSAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOwotICAgIGludCBpOwogCiAgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwogCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChtb2RzdGF0ZS0+bmNhbGxiYWNrcyk7Cit9CisKK3N0YXRpYyBpbnQKK2F0ZXhpdF9tX3RyYXZlcnNlKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBpbnQgaTsKKyAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOworCisgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwogICAgIGZvciAoaSA9IDA7IGkgPCBtb2RzdGF0ZS0+bmNhbGxiYWNrczsgaSsrKSB7Ci0gICAgICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgICAgIGF0ZXhpdF9jYWxsYmFjayAqY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKICAgICAgICAgaWYgKGNiID09IE5VTEwpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKHNlbGYsIGkpOworICAgICAgICBQeV9WSVNJVChjYi0+ZnVuYyk7CisgICAgICAgIFB5X1ZJU0lUKGNiLT5hcmdzKTsKKyAgICAgICAgUHlfVklTSVQoY2ItPmt3YXJncyk7CiAgICAgfQotICAgIG1vZHN0YXRlLT5uY2FsbGJhY2tzID0gMDsKLSAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXRleGl0X21fY2xlYXIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKKyAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjE2LDYgKzI1MCw3IEBACiB7CiAgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKICAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUobSk7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOwogICAgIFB5TWVtX0ZyZWUobW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3MpOwogfQogCkBAIC0yNDYsNyArMjgxLDcgQEAKICAgICAgICAgaWYgKGVxIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoZXEpCi0gICAgICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKHNlbGYsIGkpOworICAgICAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihtb2RzdGF0ZSwgaSk7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjYwLDYgKzI5NSw4IEBACiAgICAgICAgIGF0ZXhpdF91bnJlZ2lzdGVyX19kb2NfX30sCiAgICAgeyJfcnVuX2V4aXRmdW5jcyIsIChQeUNGdW5jdGlvbikgYXRleGl0X3J1bl9leGl0ZnVuY3MsIE1FVEhfTk9BUkdTLAogICAgICAgICBhdGV4aXRfcnVuX2V4aXRmdW5jc19fZG9jX199LAorICAgIHsiX25jYWxsYmFja3MiLCAoUHlDRnVuY3Rpb24pIGF0ZXhpdF9uY2FsbGJhY2tzLCBNRVRIX05PQVJHUywKKyAgICAgICAgYXRleGl0X25jYWxsYmFja3NfX2RvY19ffSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNzUsMTUgKzMxMiwxNSBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgYXRleGl0bW9kdWxlID0gewotCVB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLQkiYXRleGl0IiwKLQlhdGV4aXRfX2RvY19fLAotCXNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAotCWF0ZXhpdF9tZXRob2RzLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotCShmcmVlZnVuYylhdGV4aXRfZnJlZQorICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiYXRleGl0IiwKKyAgICBhdGV4aXRfX2RvY19fLAorICAgIHNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAorICAgIGF0ZXhpdF9tZXRob2RzLAorICAgIE5VTEwsCisgICAgYXRleGl0X21fdHJhdmVyc2UsCisgICAgYXRleGl0X21fY2xlYXIsCisgICAgKGZyZWVmdW5jKWF0ZXhpdF9mcmVlCiB9OwogCiBQeU1PRElOSVRfRlVOQwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hdWRpb29wLmMgYi9Nb2R1bGVzL2F1ZGlvb3AuYwppbmRleCAzZjA0NzYyLi4zNDJmMjYyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F1ZGlvb3AuYworKysgYi9Nb2R1bGVzL2F1ZGlvb3AuYwpAQCAtNSwxOCArNSw2IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKIAotI2lmIFNJWkVPRl9JTlQgPT0gNAotdHlwZWRlZiBpbnQgUHlfSW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBQeV9VSW50MzI7Ci0jZWxzZQotI2lmIFNJWkVPRl9MT05HID09IDQKLXR5cGVkZWYgbG9uZyBQeV9JbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBQeV9VSW50MzI7Ci0jZWxzZQotI2Vycm9yICJObyA0LWJ5dGUgaW50ZWdyYWwgdHlwZSIKLSNlbmRpZgotI2VuZGlmCi0KIHR5cGVkZWYgc2hvcnQgUHlJbnQxNjsKIAogI2lmIGRlZmluZWQoX19DSEFSX1VOU0lHTkVEX18pCkBAIC0zOCw3ICsyNiw3IEBACiAgICAgICAgIHZhbCA9IG1heHZhbDsKICAgICBlbHNlIGlmICh2YWwgPCBtaW52YWwgKyAxKQogICAgICAgICB2YWwgPSBtaW52YWw7Ci0gICAgcmV0dXJuIHZhbDsKKyAgICByZXR1cm4gKGludCl2YWw7CiB9CiAKIApAQCAtMTYxLDkgKzE0OSw2IEBACiAgICAgUHlJbnQxNiAgICAgICAgIHNlZzsKICAgICB1bnNpZ25lZCBjaGFyICAgdXZhbDsKIAotICAgIC8qIFRoZSBvcmlnaW5hbCBzb3ggY29kZSBkb2VzIHRoaXMgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIG5vdCBoZXJlICovCi0gICAgcGNtX3ZhbCA9IHBjbV92YWwgPj4gMjsKLQogICAgIC8qIHUtbGF3IGludmVydHMgYWxsIGJpdHMgKi8KICAgICAvKiBHZXQgdGhlIHNpZ24gYW5kIHRoZSBtYWduaXR1ZGUgb2YgdGhlIHZhbHVlLiAqLwogICAgIGlmIChwY21fdmFsIDwgMCkgewpAQCAtMjU4LDkgKzI0Myw2IEBACiAgICAgc2hvcnQgICAgICAgICAgIHNlZzsKICAgICB1bnNpZ25lZCBjaGFyICAgYXZhbDsKIAotICAgIC8qIFRoZSBvcmlnaW5hbCBzb3ggY29kZSBkb2VzIHRoaXMgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIG5vdCBoZXJlICovCi0gICAgcGNtX3ZhbCA9IHBjbV92YWwgPj4gMzsKLQogICAgIC8qIEEtbGF3IHVzaW5nIGV2ZW4gYml0IGludmVyc2lvbiAqLwogICAgIGlmIChwY21fdmFsID49IDApIHsKICAgICAgICAgbWFzayA9IDB4RDU7ICAgICAgICAgICAgLyogc2lnbiAoN3RoKSBiaXQgPSAxICovCkBAIC0zMDUsMTkgKzI4Nyw5MSBAQAogICAgIDE1Mjg5LCAxNjgxOCwgMTg1MDAsIDIwMzUwLCAyMjM4NSwgMjQ2MjMsIDI3MDg2LCAyOTc5NCwgMzI3NjcKIH07CiAKLSNkZWZpbmUgQ0hBUlAoY3AsIGkpICgoc2lnbmVkIGNoYXIgKikoY3AraSkpCi0jZGVmaW5lIFNIT1JUUChjcCwgaSkgKChzaG9ydCAqKShjcCtpKSkKLSNkZWZpbmUgTE9OR1AoY3AsIGkpICgoUHlfSW50MzIgKikoY3AraSkpCisjZGVmaW5lIEdFVElOVFgoVCwgY3AsIGkpICAoKihUICopKChjcCkgKyAoaSkpKQorI2RlZmluZSBTRVRJTlRYKFQsIGNwLCBpLCB2YWwpICBkbyB7ICAgIFwKKyAgICAgICAgKihUICopKChjcCkgKyAoaSkpID0gKFQpKHZhbCk7ICBcCisgICAgfSB3aGlsZSAoMCkKIAogCisjZGVmaW5lIEdFVElOVDgoY3AsIGkpICAgICAgICAgIEdFVElOVFgoc2lnbmVkIGNoYXIsIChjcCksIChpKSkKKyNkZWZpbmUgR0VUSU5UMTYoY3AsIGkpICAgICAgICAgR0VUSU5UWChzaG9ydCwgKGNwKSwgKGkpKQorI2RlZmluZSBHRVRJTlQzMihjcCwgaSkgICAgICAgICBHRVRJTlRYKFBZX0lOVDMyX1QsIChjcCksIChpKSkKKworI2lmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBHRVRJTlQyNChjcCwgaSkgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdICsgICAgICAgICAgICAgIFwKKyAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdIDw8IDgpICsgICAgICAgXAorICAgICAgICAoKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdIDw8IDE2KSApCisjZWxzZQorI2RlZmluZSBHRVRJTlQyNChjcCwgaSkgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdICsgICAgICAgICAgICAgIFwKKyAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdIDw8IDgpICsgICAgICAgXAorICAgICAgICAoKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdIDw8IDE2KSApCisjZW5kaWYKKworCisjZGVmaW5lIFNFVElOVDgoY3AsIGksIHZhbCkgICAgIFNFVElOVFgoc2lnbmVkIGNoYXIsIChjcCksIChpKSwgKHZhbCkpCisjZGVmaW5lIFNFVElOVDE2KGNwLCBpLCB2YWwpICAgIFNFVElOVFgoc2hvcnQsIChjcCksIChpKSwgKHZhbCkpCisjZGVmaW5lIFNFVElOVDMyKGNwLCBpLCB2YWwpICAgIFNFVElOVFgoUFlfSU5UMzJfVCwgKGNwKSwgKGkpLCAodmFsKSkKKworI2lmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBTRVRJTlQyNChjcCwgaSwgdmFsKSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMl0gPSAoaW50KSh2YWwpOyAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdID0gKGludCkodmFsKSA+PiA4OyAgICAgXAorICAgICAgICAoKHNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMF0gPSAoaW50KSh2YWwpID4+IDE2OyAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgU0VUSU5UMjQoY3AsIGksIHZhbCkgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdID0gKGludCkodmFsKTsgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA9IChpbnQpKHZhbCkgPj4gODsgICAgIFwKKyAgICAgICAgKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdID0gKGludCkodmFsKSA+PiAxNjsgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKKyNkZWZpbmUgR0VUUkFXU0FNUExFKHNpemUsIGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAxKSA/IChpbnQpR0VUSU5UOCgoY3ApLCAoaSkpIDogICAgICAgICBcCisgICAgICAgIChzaXplID09IDIpID8gKGludClHRVRJTlQxNigoY3ApLCAoaSkpIDogICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMykgPyAoaW50KUdFVElOVDI0KChjcCksIChpKSkgOiAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpR0VUSU5UMzIoKGNwKSwgKGkpKSkKKworI2RlZmluZSBTRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGksIHZhbCkgIGRvIHsgICAgXAorICAgICAgICBpZiAoc2l6ZSA9PSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UOCgoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDIpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMTYoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDMpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMjQoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMzIoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKKworCisjZGVmaW5lIEdFVFNBTVBMRTMyKHNpemUsIGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMSkgPyAoaW50KUdFVElOVDgoKGNwKSwgKGkpKSA8PCAyNCA6ICAgXAorICAgICAgICAoc2l6ZSA9PSAyKSA/IChpbnQpR0VUSU5UMTYoKGNwKSwgKGkpKSA8PCAxNiA6ICBcCisgICAgICAgIChzaXplID09IDMpID8gKGludClHRVRJTlQyNCgoY3ApLCAoaSkpIDw8IDggOiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KUdFVElOVDMyKChjcCksIChpKSkpCisKKyNkZWZpbmUgU0VUU0FNUExFMzIoc2l6ZSwgY3AsIGksIHZhbCkgIGRvIHsgICAgIFwKKyAgICAgICAgaWYgKHNpemUgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDgoKGNwKSwgKGkpLCAodmFsKSA+PiAyNCk7ICAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDE2KChjcCksIChpKSwgKHZhbCkgPj4gMTYpOyAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDI0KChjcCksIChpKSwgKHZhbCkgPj4gOCk7ICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDMyKChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCisKIAogc3RhdGljIFB5T2JqZWN0ICpBdWRpb29wRXJyb3I7CiAKIHN0YXRpYyBpbnQKIGF1ZGlvb3BfY2hlY2tfc2l6ZShpbnQgc2l6ZSkKIHsKLSAgICBpZiAoc2l6ZSAhPSAxICYmIHNpemUgIT0gMiAmJiBzaXplICE9IDQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlNpemUgc2hvdWxkIGJlIDEsIDIgb3IgNCIpOworICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU2l6ZSBzaG91bGQgYmUgMSwgMiwgMyBvciA0Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBlbHNlCkBAIC0zNDEsNyArMzk1LDcgQEAKIHsKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgaW50IHNpemU7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2luOmdldHNhbXBsZSIsICZjcCwgJmxlbiwgJnNpemUsICZpKSApCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzUxLDEwICs0MDUsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiSW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkqMik7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKjQpOwotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodmFsKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSpzaXplKSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNjIsMTcgKzQxMywxNSBAQAogewogICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBpbnQgc2l6ZTsKICAgICB1bnNpZ25lZCBpbnQgYWJzdmFsLCBtYXggPSAwOwogCiAgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOm1heCIsICZjcCwgJmxlbiwgJnNpemUpICkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGkpOwogICAgICAgICBpZiAodmFsIDwgMCkgYWJzdmFsID0gKC12YWwpOwogICAgICAgICBlbHNlIGFic3ZhbCA9IHZhbDsKICAgICAgICAgaWYgKGFic3ZhbCA+IG1heCkgbWF4ID0gYWJzdmFsOwpAQCAtMzg1LDcgKzQzNCw3IEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIGludCBzaXplOwogICAgIC8qIC0xIHRyaWNrIGJlbG93IGlzIG5lZWRlZCBvbiBXaW5kb3dzIHRvIHN1cHBvcnQgLTB4ODAwMDAwMDAgd2l0aG91dAogICAgIGEgd2FybmluZyAqLwogICAgIGludCBtaW4gPSAweDdmZmZmZmZmLCBtYXggPSAtMHg3RkZGRkZGRi0xOwpAQCAtMzk1LDkgKzQ0NCw3IEBACiAgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBzaXplKSB7Ci0gICAgICAgIGlmIChzaXplID09IDEpIHZhbCA9IChpbnQpICpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikgdmFsID0gKGludCkgKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gNCkgdmFsID0gKGludCkgKkxPTkdQKGNwLCBpKTsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSk7CiAgICAgICAgIGlmICh2YWwgPiBtYXgpIG1heCA9IHZhbDsKICAgICAgICAgaWYgKHZhbCA8IG1pbikgbWluID0gdmFsOwogICAgIH0KQEAgLTQwOSwyNCArNDU2LDIwIEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIGRvdWJsZSBhdmcgPSAwLjA7CisgICAgaW50IHNpemUsIGF2ZzsKKyAgICBkb3VibGUgc3VtID0gMC4wOwogCiAgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmF2ZyIsICZjcCwgJmxlbiwgJnNpemUpICkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0gICAgICAgIGF2ZyArPSB2YWw7Ci0gICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gc2l6ZSkKKyAgICAgICAgc3VtICs9IEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSk7CiAgICAgaWYgKCBsZW4gPT0gMCApCi0gICAgICAgIHZhbCA9IDA7CisgICAgICAgIGF2ZyA9IDA7CiAgICAgZWxzZQotICAgICAgICB2YWwgPSAoaW50KWZsb29yKGF2ZyAvIChkb3VibGUpKGxlbi9zaXplKSk7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWwpOworICAgICAgICBhdmcgPSAoaW50KWZsb29yKHN1bSAvIChkb3VibGUpKGxlbi9zaXplKSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhhdmcpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNDM0LDcgKzQ3Nyw3IEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIGludCBzaXplOwogICAgIHVuc2lnbmVkIGludCByZXM7CiAgICAgZG91YmxlIHN1bV9zcXVhcmVzID0gMC4wOwogCkBAIC00NDIsMTEgKzQ4NSw5IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoIGk9MDsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotICAgICAgICBzdW1fc3F1YXJlcyArPSAoZG91YmxlKXZhbCooZG91YmxlKXZhbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSk7CisgICAgICAgIHN1bV9zcXVhcmVzICs9IHZhbCp2YWw7CiAgICAgfQogICAgIGlmICggbGVuID09IDAgKQogICAgICAgICByZXMgPSAwOwpAQCAtNjQwLDcgKzY4MSw3IEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBwcmV2dmFsID0gMCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCisgICAgaW50IHNpemUsIHByZXZ2YWwsIHByZXZleHRyZW1ldmFsaWQgPSAwLAogICAgICAgICBwcmV2ZXh0cmVtZSA9IDA7CiAgICAgZG91YmxlIHN1bSA9IDAuMDsKICAgICB1bnNpZ25lZCBpbnQgYXZnOwpAQCAtNjUyLDE0ICs2OTMsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGxlbiA8PSBzaXplKQogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICggc2l6ZSA9PSAxICkgICAgICBwcmV2dmFsID0gKGludCkqQ0hBUlAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSBwcmV2dmFsID0gKGludCkqU0hPUlRQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgcHJldnZhbCA9IChpbnQpKkxPTkdQKGNwLCAwKTsKKyAgICBwcmV2dmFsID0gR0VUUkFXU0FNUExFKHNpemUsIGNwLCAwKTsKICAgICBwcmV2ZGlmZiA9IDE3OyAvKiBBbnl0aGluZyAhPSAwLCAxICovCi0gICAgZm9yICggaT1zaXplOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gc2l6ZTsgaSA8IGxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGkpOwogICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIHsKICAgICAgICAgICAgIGRpZmYgPSB2YWwgPCBwcmV2dmFsOwogICAgICAgICAgICAgaWYgKHByZXZkaWZmID09ICFkaWZmKSB7CkBAIC02NjcsNyArNzA0LDEyIEBACiAgICAgICAgICAgICAgICAgKiogZXh0cmVtZSB2YWx1ZSBhbmQgcmVtZW1iZXIuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBpZiAocHJldmV4dHJlbWV2YWxpZCkgewotICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmFicygoZG91YmxlKXByZXZ2YWwgLSAoZG91YmxlKXByZXZleHRyZW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZ2YWwgPCBwcmV2ZXh0cmVtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSAoZG91YmxlKSgodW5zaWduZWQgaW50KXByZXZleHRyZW1lIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXByZXZ2YWwpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gKz0gKGRvdWJsZSkoKHVuc2lnbmVkIGludClwcmV2dmFsIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXByZXZleHRyZW1lKTsKICAgICAgICAgICAgICAgICAgICAgbmV4dHJlbWUrKzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHJldmV4dHJlbWV2YWxpZCA9IDE7CkBAIC02ODksNyArNzMxLDcgQEAKIHsKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDAsIHByZXZ2YWwgPSAwLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwKKyAgICBpbnQgc2l6ZSwgcHJldnZhbCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCiAgICAgICAgIHByZXZleHRyZW1lID0gMDsKICAgICB1bnNpZ25lZCBpbnQgbWF4ID0gMCwgZXh0cmVtZWRpZmY7CiAgICAgaW50IGRpZmYsIHByZXZkaWZmOwpAQCAtNzAwLDE0ICs3NDIsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGxlbiA8PSBzaXplKQogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICggc2l6ZSA9PSAxICkgICAgICBwcmV2dmFsID0gKGludCkqQ0hBUlAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSBwcmV2dmFsID0gKGludCkqU0hPUlRQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgcHJldnZhbCA9IChpbnQpKkxPTkdQKGNwLCAwKTsKKyAgICBwcmV2dmFsID0gR0VUUkFXU0FNUExFKHNpemUsIGNwLCAwKTsKICAgICBwcmV2ZGlmZiA9IDE3OyAvKiBBbnl0aGluZyAhPSAwLCAxICovCi0gICAgZm9yICggaT1zaXplOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gc2l6ZTsgaSA8IGxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGkpOwogICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIHsKICAgICAgICAgICAgIGRpZmYgPSB2YWwgPCBwcmV2dmFsOwogICAgICAgICAgICAgaWYgKHByZXZkaWZmID09ICFkaWZmKSB7CkBAIC03MzksNyArNzc3LDcgQEAKIHsKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgaW50IHNpemU7CiAgICAgaW50IHByZXZ2YWw7CiAgICAgUHlfc3NpemVfdCBuY3Jvc3M7CiAKQEAgLTc0OSwxMiArNzg3LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNyb3NzID0gLTE7CiAgICAgcHJldnZhbCA9IDE3OyAvKiBBbnl0aGluZyA8PiAwLDEgKi8KLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPj4gNzsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA+PiAxNTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDMxOwotICAgICAgICB2YWwgPSB2YWwgJiAxOwotICAgICAgICBpZiAoIHZhbCAhPSBwcmV2dmFsICkgbmNyb3NzKys7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGkpIDwgMDsKKyAgICAgICAgaWYgKHZhbCAhPSBwcmV2dmFsKSBuY3Jvc3MrKzsKICAgICAgICAgcHJldnZhbCA9IHZhbDsKICAgICB9CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChuY3Jvc3MpOwpAQCAtNzY1LDggKzgwMCw4IEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIGRvdWJsZSBmYWN0b3IsIGZ2YWwsIG1heHZhbCwgbWludmFsOworICAgIGludCBzaXplOworICAgIGRvdWJsZSBmYWN0b3IsIG1heHZhbCwgbWludmFsOwogICAgIFB5T2JqZWN0ICpydjsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWQ6bXVsIiwgJmNwLCAmbGVuLCAmc2l6ZSwgJmZhY3RvciApICkKQEAgLTc4MiwxNiArODE3LDExIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0KLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbCpmYWN0b3I7Ci0gICAgICAgIHZhbCA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcil2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpdmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpdmFsOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBkb3VibGUgdmFsID0gR0VUUkFXU0FNUExFKHNpemUsIGNwLCBpKTsKKyAgICAgICAgdmFsICo9IGZhY3RvcjsKKyAgICAgICAgdmFsID0gZmxvb3IoZmJvdW5kKHZhbCwgbWludmFsLCBtYXh2YWwpKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHNpemUsIG5jcCwgaSwgKGludCl2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CkBAIC04MDIsOCArODMyLDggQEAKICAgICBQeV9idWZmZXIgcGNwOwogICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKICAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsMSA9IDAsIHZhbDIgPSAwOwotICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBmdmFsLCBtYXh2YWwsIG1pbnZhbDsKKyAgICBpbnQgc2l6ZTsKKyAgICBkb3VibGUgZmFjMSwgZmFjMiwgbWF4dmFsLCBtaW52YWw7CiAgICAgUHlPYmplY3QgKnJ2OwogCiAgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyppZGQ6dG9tb25vIiwKQEAgLTgzMSwxOSArODYxLDEyIEBACiAgICAgfQogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0KLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSoyICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMSA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDEgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMSA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDIgPSAoaW50KSpDSEFSUChjcCwgaSsxKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDIgPSAoaW50KSpTSE9SVFAoY3AsIGkrMik7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwyID0gKGludCkqTE9OR1AoY3AsIGkrNCk7Ci0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbDEqZmFjMSArIChkb3VibGUpdmFsMipmYWMyOwotICAgICAgICB2YWwxID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkvMikgPSAoc2lnbmVkIGNoYXIpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpLzIpID0gKHNob3J0KXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpLzIpPSAoUHlfSW50MzIpdmFsMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHNpemUqMikgeworICAgICAgICBkb3VibGUgdmFsMSA9IEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSk7CisgICAgICAgIGRvdWJsZSB2YWwyID0gR0VUUkFXU0FNUExFKHNpemUsIGNwLCBpICsgc2l6ZSk7CisgICAgICAgIGRvdWJsZSB2YWwgPSB2YWwxKmZhYzEgKyB2YWwyKmZhYzI7CisgICAgICAgIHZhbCA9IGZsb29yKGZib3VuZCh2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRShzaXplLCBuY3AsIGkvMiwgdmFsKTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKICAgICByZXR1cm4gcnY7CkBAIC04NTQsOCArODc3LDggQEAKIHsKICAgICBzaWduZWQgY2hhciAqY3AsICpuY3A7CiAgICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbDEsIHZhbDIsIHZhbCA9IDA7Ci0gICAgZG91YmxlIGZhYzEsIGZhYzIsIGZ2YWwsIG1heHZhbCwgbWludmFsOworICAgIGludCBzaXplOworICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBtYXh2YWwsIG1pbnZhbDsKICAgICBQeU9iamVjdCAqcnY7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lkZDp0b3N0ZXJlbyIsCkBAIC04NzgsMjUgKzkwMSwxMiBAQAogICAgICAgICByZXR1cm4gMDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotCi0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbCpmYWMxOwotICAgICAgICB2YWwxID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLQotICAgICAgICBmdmFsID0gKGRvdWJsZSl2YWwqZmFjMjsKLSAgICAgICAgdmFsMiA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkqMikgPSAoc2lnbmVkIGNoYXIpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKjIpID0gKHNob3J0KXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKjIpID0gKFB5X0ludDMyKXZhbDE7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkqMisxKSA9IChzaWduZWQgY2hhcil2YWwyOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkqMisyKSA9IChzaG9ydCl2YWwyOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSoyKzQpID0gKFB5X0ludDMyKXZhbDI7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGkpOworICAgICAgICBpbnQgdmFsMSA9IChpbnQpZmxvb3IoZmJvdW5kKHZhbCpmYWMxLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBpbnQgdmFsMiA9IChpbnQpZmxvb3IoZmJvdW5kKHZhbCpmYWMyLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCBpKjIsIHZhbDEpOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCBpKjIgKyBzaXplLCB2YWwyKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtOTA2LDcgKzkxNiw3IEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwMSwgKmNwMiwgKm5jcDsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjIsIGk7Ci0gICAgaW50IHNpemUsIHZhbDEgPSAwLCB2YWwyID0gMCwgbWludmFsLCBtYXh2YWwsIG5ld3ZhbDsKKyAgICBpbnQgc2l6ZSwgbWludmFsLCBtYXh2YWwsIG5ld3ZhbDsKICAgICBQeU9iamVjdCAqcnY7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3MjaTphZGQiLApAQCAtOTI3LDE0ICs5MzcsOSBAQAogICAgICAgICByZXR1cm4gMDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjE7IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDEgPSAoaW50KSpDSEFSUChjcDEsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMSA9IChpbnQpKlNIT1JUUChjcDEsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMSA9IChpbnQpKkxPTkdQKGNwMSwgaSk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDIgPSAoaW50KSpDSEFSUChjcDIsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMiA9IChpbnQpKlNIT1JUUChjcDIsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMiA9IChpbnQpKkxPTkdQKGNwMiwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjE7IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsMSA9IEdFVFJBV1NBTVBMRShzaXplLCBjcDEsIGkpOworICAgICAgICBpbnQgdmFsMiA9IEdFVFJBV1NBTVBMRShzaXplLCBjcDIsIGkpOwogCiAgICAgICAgIGlmIChzaXplIDwgNCkgewogICAgICAgICAgICAgbmV3dmFsID0gdmFsMSArIHZhbDI7CkBAIC05NTAsOSArOTU1LDcgQEAKICAgICAgICAgICAgIG5ld3ZhbCA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpbmV3dmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KW5ld3ZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKW5ld3ZhbDsKKyAgICAgICAgU0VUUkFXU0FNUExFKHNpemUsIG5jcCwgaSwgbmV3dmFsKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtOTgwLDE4ICs5ODMsMzIgQEAKIAogICAgIG1hc2sgPSBtYXNrc1tzaXplXTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgY2hhcikqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgc2hvcnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAodW5zaWduZWQgaW50KShQeV9VSW50MzIpKkxPTkdQKGNwLCBpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaWYgKHNpemUgPT0gMSkKKyAgICAgICAgICAgIHZhbCA9IEdFVElOVFgodW5zaWduZWQgY2hhciwgY3AsIGkpOworICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKHVuc2lnbmVkIHNob3J0LCBjcCwgaSk7CisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMykKKyAgICAgICAgICAgIHZhbCA9ICgodW5zaWduZWQgaW50KUdFVElOVDI0KGNwLCBpKSkgJiAweGZmZmZmZnU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHNpemUgPT0gNCk7CisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKFBZX1VJTlQzMl9ULCBjcCwgaSk7CisgICAgICAgIH0KIAogICAgICAgICB2YWwgKz0gKHVuc2lnbmVkIGludCliaWFzOwogICAgICAgICAvKiB3cmFwIGFyb3VuZCBpbiBjYXNlIG9mIG92ZXJmbG93ICovCiAgICAgICAgIHZhbCAmPSBtYXNrOwogCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodW5zaWduZWQgY2hhcil2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHVuc2lnbmVkIHNob3J0KXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKShQeV9VSW50MzIpdmFsOworICAgICAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICAgICAgU0VUSU5UWCh1bnNpZ25lZCBjaGFyLCBuY3AsIGksIHZhbCk7CisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKKyAgICAgICAgICAgIFNFVElOVFgodW5zaWduZWQgc2hvcnQsIG5jcCwgaSwgdmFsKTsKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKQorICAgICAgICAgICAgU0VUSU5UMjQobmNwLCBpLCAoaW50KXZhbCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHNpemUgPT0gNCk7CisgICAgICAgICAgICBTRVRJTlRYKFBZX1VJTlQzMl9ULCBuY3AsIGksIHZhbCk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtMTAwMSw4ICsxMDE4LDggQEAKIHsKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIGludCBzaXplOwogICAgIFB5T2JqZWN0ICpydjsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpyZXZlcnNlIiwKQEAgLTEwMTcsMTYgKzEwMzQsOSBAQAogICAgICAgICByZXR1cm4gMDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCAyNDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA8PCAxNjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBqID0gbGVuIC0gaSAtIHNpemU7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGopID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gMjQpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGopID0gKHNob3J0KSh2YWwgPj4gMTYpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaikgPSAoUHlfSW50MzIpdmFsOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHNpemUsIGNwLCBpKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHNpemUsIG5jcCwgbGVuIC0gaSAtIHNpemUsIHZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KQEAgLTEwMzcsNyArMTA0Nyw3IEBACiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKICAgICBQeV9zc2l6ZV90IGxlbiwgaSwgajsKLSAgICBpbnQgc2l6ZSwgc2l6ZTIsIHZhbCA9IDA7CisgICAgaW50IHNpemUsIHNpemUyOwogICAgIFB5T2JqZWN0ICpydjsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWk6bGluMmxpbiIsCkBAIC0xMDU5LDE0ICsxMDY5LDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MCwgaj0wOyBpIDwgbGVuOyBpICs9IHNpemUsIGogKz0gc2l6ZTIgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCAyNDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA8PCAxNjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBpZiAoIHNpemUyID09IDEgKSAgKkNIQVJQKG5jcCwgaikgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiAyNCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplMiA9PSAyICkgKlNIT1JUUChuY3AsIGopID0gKHNob3J0KSh2YWwgPj4gMTYpOwotICAgICAgICBlbHNlIGlmICggc2l6ZTIgPT0gNCApICpMT05HUChuY3AsIGopID0gKFB5X0ludDMyKXZhbDsKKyAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGxlbjsgaSArPSBzaXplLCBqICs9IHNpemUyKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMihzaXplLCBjcCwgaSk7CisgICAgICAgIFNFVFNBTVBMRTMyKHNpemUyLCBuY3AsIGosIHZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KQEAgLTExNDAsOCArMTE0NSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHByZXZfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKLSAgICBjdXJfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKKyAgICBwcmV2X2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CisgICAgY3VyX2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CiAgICAgaWYgKHByZXZfaSA9PSBOVUxMIHx8IGN1cl9pID09IE5VTEwpIHsKICAgICAgICAgKHZvaWQpIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTEyMjcsMTIgKzEyMzIsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChjaGFuID0gMDsgY2hhbiA8IG5jaGFubmVsczsgY2hhbisrKSB7CiAgICAgICAgICAgICAgICAgcHJldl9pW2NoYW5dID0gY3VyX2lbY2hhbl07Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoKGludCkqQ0hBUlAoY3AsIDApKSA8PCAyNDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCi0gICAgICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKChpbnQpKlNIT1JUUChjcCwgMCkpIDw8IDE2OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gNCkKLSAgICAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoaW50KSpMT05HUChjcCwgMCk7CisgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSBHRVRTQU1QTEUzMihzaXplLCBjcCwgMCk7CiAgICAgICAgICAgICAgICAgY3AgKz0gc2l6ZTsKICAgICAgICAgICAgICAgICAvKiBpbXBsZW1lbnRzIGEgc2ltcGxlIGRpZ2l0YWwgZmlsdGVyICovCiAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoaW50KSgKQEAgLTEyNDgsMjIgKzEyNDgsMTUgQEAKICAgICAgICAgICAgICAgICBjdXJfbyA9IChpbnQpKCgoZG91YmxlKXByZXZfaVtjaGFuXSAqIChkb3VibGUpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSljdXJfaVtjaGFuXSAqIChkb3VibGUpKG91dHJhdGUgLSBkKSkgLwogICAgICAgICAgICAgICAgICAgICAoZG91YmxlKW91dHJhdGUpOwotICAgICAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgICAgICpDSEFSUChuY3AsIDApID0gKHNpZ25lZCBjaGFyKShjdXJfbyA+PiAyNCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAqU0hPUlRQKG5jcCwgMCkgPSAoc2hvcnQpKGN1cl9vID4+IDE2KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICAgICAgICAgICpMT05HUChuY3AsIDApID0gKFB5X0ludDMyKShjdXJfbyk7CisgICAgICAgICAgICAgICAgU0VUU0FNUExFMzIoc2l6ZSwgbmNwLCAwLCBjdXJfbyk7CiAgICAgICAgICAgICAgICAgbmNwICs9IHNpemU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkIC09IGlucmF0ZTsKICAgICAgICAgfQogICAgIH0KICAgZXhpdDoKLSAgICBpZiAocHJldl9pICE9IE5VTEwpCi0gICAgICAgIGZyZWUocHJldl9pKTsKLSAgICBpZiAoY3VyX2kgIT0gTlVMTCkKLSAgICAgICAgZnJlZShjdXJfaSk7CisgICAgUHlNZW1fRnJlZShwcmV2X2kpOworICAgIFB5TWVtX0ZyZWUoY3VyX2kpOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtMTI3Myw3ICsxMjY2LDcgQEAKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIGludCBzaXplOwogICAgIFB5T2JqZWN0ICpydjsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpsaW4ydWxhdyIsCkBAIC0xMjg4LDEyICsxMjgxLDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgODsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAxNjsKLQotICAgICAgICAqbmNwKysgPSBzdF8xNGxpbmVhcjJ1bGF3KHZhbCk7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMihzaXplLCBjcCwgaSk7CisgICAgICAgICpuY3ArKyA9IHN0XzE0bGluZWFyMnVsYXcodmFsID4+IDE4KTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtMTMwMiwxMCArMTI5Miw5IEBACiBhdWRpb29wX3VsYXcybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICB1bnNpZ25lZCBjaGFyICpjcDsKLSAgICB1bnNpZ25lZCBjaGFyIGN2YWw7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKICAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsOworICAgIGludCBzaXplOwogICAgIFB5T2JqZWN0ICpydjsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTp1bGF3MmxpbiIsCkBAIC0xMzI1LDEzICsxMzE0LDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW4qc2l6ZTsgaSArPSBzaXplICkgewotICAgICAgICBjdmFsID0gKmNwKys7Ci0gICAgICAgIHZhbCA9IHN0X3VsYXcybGluZWFyMTYoY3ZhbCk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gOCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHZhbCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMikodmFsPDwxNik7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbipzaXplOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IHN0X3VsYXcybGluZWFyMTYoKmNwKyspIDw8IDE2OworICAgICAgICBTRVRTQU1QTEUzMihzaXplLCBuY3AsIGksIHZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KQEAgLTEzNDIsNyArMTMyNyw3IEBACiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKICAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBpbnQgc2l6ZTsKICAgICBQeU9iamVjdCAqcnY7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6bGluMmFsYXciLApAQCAtMTM1NywxMiArMTM0Miw5IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDg7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMTY7Ci0KLSAgICAgICAgKm5jcCsrID0gc3RfbGluZWFyMmFsYXcodmFsKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHNpemUsIGNwLCBpKTsKKyAgICAgICAgKm5jcCsrID0gc3RfbGluZWFyMmFsYXcodmFsID4+IDE5KTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtMTM3MSw3ICsxMzUzLDYgQEAKIGF1ZGlvb3BfYWxhdzJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgIHVuc2lnbmVkIGNoYXIgY3ZhbDsKICAgICBzaWduZWQgY2hhciAqbmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwogICAgIGludCBzaXplLCB2YWw7CkBAIC0xMzk0LDEzICsxMzc1LDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW4qc2l6ZTsgaSArPSBzaXplICkgewotICAgICAgICBjdmFsID0gKmNwKys7Ci0gICAgICAgIHZhbCA9IHN0X2FsYXcybGluZWFyMTYoY3ZhbCk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gOCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHZhbCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMikodmFsPDwxNik7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbipzaXplOyBpICs9IHNpemUpIHsKKyAgICAgICAgdmFsID0gc3RfYWxhdzJsaW5lYXIxNigqY3ArKykgPDwgMTY7CisgICAgICAgIFNFVFNBTVBMRTMyKHNpemUsIG5jcCwgaSwgdmFsKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtMTQxMSw3ICsxMzg4LDcgQEAKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKICAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMCwgc3RlcCwgdmFscHJlZCwgZGVsdGEsCisgICAgaW50IHNpemUsIHN0ZXAsIHZhbHByZWQsIGRlbHRhLAogICAgICAgICBpbmRleCwgc2lnbiwgdnBkaWZmLCBkaWZmOwogICAgIFB5T2JqZWN0ICpydiwgKnN0YXRlLCAqc3RyOwogICAgIGludCBvdXRwdXRidWZmZXIgPSAwLCBidWZmZXJzdGVwOwpAQCAtMTQzOSwxNSArMTQxNiwxOCBAQAogICAgIHN0ZXAgPSBzdGVwc2l6ZVRhYmxlW2luZGV4XTsKICAgICBidWZmZXJzdGVwID0gMTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgODsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAxNjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHNpemUsIGNwLCBpKSA+PiAxNjsKIAogICAgICAgICAvKiBTdGVwIDEgLSBjb21wdXRlIGRpZmZlcmVuY2Ugd2l0aCBwcmV2aW91cyB2YWx1ZSAqLwotICAgICAgICBkaWZmID0gdmFsIC0gdmFscHJlZDsKLSAgICAgICAgc2lnbiA9IChkaWZmIDwgMCkgPyA4IDogMDsKLSAgICAgICAgaWYgKCBzaWduICkgZGlmZiA9ICgtZGlmZik7CisgICAgICAgIGlmICh2YWwgPCB2YWxwcmVkKSB7CisgICAgICAgICAgICBkaWZmID0gdmFscHJlZCAtIHZhbDsKKyAgICAgICAgICAgIHNpZ24gPSA4OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGlmZiA9IHZhbCAtIHZhbHByZWQ7CisgICAgICAgICAgICBzaWduID0gMDsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIFN0ZXAgMiAtIERpdmlkZSBhbmQgY2xhbXAgKi8KICAgICAgICAgLyogTm90ZToKQEAgLTE1MTYsNyArMTQ5Niw3IEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7CisgICAgUHlfc3NpemVfdCBsZW4sIGksIG91dGxlbjsKICAgICBpbnQgc2l6ZSwgdmFscHJlZCwgc3RlcCwgZGVsdGEsIGluZGV4LCBzaWduLCB2cGRpZmY7CiAgICAgUHlPYmplY3QgKnJ2LCAqc3RyLCAqc3RhdGU7CiAgICAgaW50IGlucHV0YnVmZmVyID0gMCwgYnVmZmVyc3RlcDsKQEAgLTE1NDEsNyArMTUyMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKnNpemUqMik7CisgICAgb3V0bGVuID0gbGVuKnNpemUqMjsKKyAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dGxlbik7CiAgICAgaWYgKCBzdHIgPT0gMCApCiAgICAgICAgIHJldHVybiAwOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcoc3RyKTsKQEAgLTE1NDksNyArMTUzMCw3IEBACiAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogICAgIGJ1ZmZlcnN0ZXAgPSAwOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemUqMjsgaSArPSBzaXplICkgeworICAgIGZvciAoaSA9IDA7IGkgPCBvdXRsZW47IGkgKz0gc2l6ZSkgewogICAgICAgICAvKiBTdGVwIDEgLSBnZXQgdGhlIGRlbHRhIHZhbHVlIGFuZCBjb21wdXRlIG5leHQgaW5kZXggKi8KICAgICAgICAgaWYgKCBidWZmZXJzdGVwICkgewogICAgICAgICAgICAgZGVsdGEgPSBpbnB1dGJ1ZmZlciAmIDB4ZjsKQEAgLTE1OTQsOSArMTU3NSw3IEBACiAgICAgICAgIHN0ZXAgPSBzdGVwc2l6ZVRhYmxlW2luZGV4XTsKIAogICAgICAgICAvKiBTdGVwIDYgLSBPdXRwdXQgdmFsdWUgKi8KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodmFscHJlZCA+PiA4KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodmFscHJlZCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMikodmFscHJlZDw8MTYpOworICAgICAgICBTRVRTQU1QTEUzMihzaXplLCBuY3AsIGksIHZhbHByZWQgPDwgMTYpOwogICAgIH0KIAogICAgIHJ2ID0gUHlfQnVpbGRWYWx1ZSgiKE8oaWkpKSIsIHN0ciwgdmFscHJlZCwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9iaW5hc2NpaS5jIGIvTW9kdWxlcy9iaW5hc2NpaS5jCmluZGV4IDM0MGVjOWMuLjM4NmMyZGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYmluYXNjaWkuYworKysgYi9Nb2R1bGVzL2JpbmFzY2lpLmMKQEAgLTM2MSw4ICszNjEsNyBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtNDkxLDggKzQ5MCw3IEBACiAgICAgKi8KICAgICBpZiAoYmluX2xlbiA+IDApIHsKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsIGJpbl9sZW4pIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKQEAgLTU2Myw4ICs1NjEsNyBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtNjQyLDggKzYzOSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChiaW5fZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9CiAgICAgaWYgKHJ2KSB7CiAgICAgICAgIFB5T2JqZWN0ICpycnYgPSBQeV9CdWlsZFZhbHVlKCJPaSIsIHJ2LCBkb25lKTsKQEAgLTcxMyw4ICs3MDksNyBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAob3V0X2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBydjsKQEAgLTc3MCw4ICs3NjUsNyBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtODM0LDcgKzgyOCw3IEBACiAgICAgICAgICAgICAgaWYgKCAtLW91dF9sZW5fbGVmdCA8IDAgKSB7IFwKICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG91dF9sZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsIDIqb3V0X2xlbikgPCAwKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICB7IFB5X0RFQ1JFRihydik7IFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7IHJldHVybiBOVUxMOyB9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgUHlfWERFQ1JFRihydik7IFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7IHJldHVybiBOVUxMOyB9IFwKICAgICAgICAgICAgICAgICAgICAgICBvdXRfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG91dF9sZW47IFwKICAgICAgICAgICAgICAgICAgICAgICBvdXRfbGVuX2xlZnQgPSBvdXRfbGVuLTE7IFwKQEAgLTg4Nyw4ICs4ODEsNyBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAob3V0X2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7CiAgICAgcmV0dXJuIHJ2OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jCmluZGV4IDllOWU5NmMuLjAxM2MzZmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKQEAgLTIzLDE4ICsyMywzMyBAQAogICogQTg0NCAgICAgICAgIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgVSsyMDE1IEhPUklaT05UQUwgQkFSCiAgKi8KIAotI2RlZmluZSBHQktfREVDT0RFKGRjMSwgZGMyLCBhc3NpKSBcCi0gICAgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhYSkgKGFzc2kpID0gMHgyMDE0OyBcCi0gICAgZWxzZSBpZiAoKGRjMSkgPT0gMHhhOCAmJiAoZGMyKSA9PSAweDQ0KSAoYXNzaSkgPSAweDIwMTU7IFwKLSAgICBlbHNlIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YTQpIChhc3NpKSA9IDB4MDBiNzsgXAotICAgIGVsc2UgVFJZTUFQX0RFQyhnYjIzMTIsIGFzc2ksIGRjMSBeIDB4ODAsIGRjMiBeIDB4ODApOyBcCi0gICAgZWxzZSBUUllNQVBfREVDKGdia2V4dCwgYXNzaSwgZGMxLCBkYzIpOworI2RlZmluZSBHQktfREVDT0RFKGRjMSwgZGMyLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhYSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGRjMSkgPT0gMHhhOCAmJiAoZGMyKSA9PSAweDQ0KSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGE0KSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDAwYjcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhnYjIzMTIsIGRlY29kZWQsIGRjMSBeIDB4ODAsIGRjMiBeIDB4ODApKSB7IFwKKyAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhnYmtleHQsIGRlY29kZWQsIGRjMSwgZGMyKSkgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAotI2RlZmluZSBHQktfRU5DT0RFKGNvZGUsIGFzc2kpIFwKLSAgICBpZiAoKGNvZGUpID09IDB4MjAxNCkgKGFzc2kpID0gMHhhMWFhOyBcCi0gICAgZWxzZSBpZiAoKGNvZGUpID09IDB4MjAxNSkgKGFzc2kpID0gMHhhODQ0OyBcCi0gICAgZWxzZSBpZiAoKGNvZGUpID09IDB4MDBiNykgKGFzc2kpID0gMHhhMWE0OyBcCi0gICAgZWxzZSBpZiAoKGNvZGUpICE9IDB4MzBmYiAmJiBUUllNQVBfRU5DX0NPTkQoZ2Jjb21tb24sIGFzc2ksIGNvZGUpKTsKKyNkZWZpbmUgR0JLX0VOQ09ERShjb2RlLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoY29kZSkgPT0gMHgyMDE0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4YTFhYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjb2RlKSA9PSAweDIwMTUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGE4NDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoY29kZSkgPT0gMHgwMGI3KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhhMWE0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGNvZGUpICE9IDB4MzBmYiAmJiBUUllNQVBfRU5DKGdiY29tbW9uLCBhc3NpLCBjb2RlKSkgeyBcCisgICAgICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKIC8qCiAgKiBHQjIzMTIgY29kZWMKQEAgLTQyLDI3ICs1NywzMSBAQAogCiBFTkNPREVSKGdiMjMxMikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIC8qIE1TQiBzZXQ6IEdCSyAqLwogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCi0gICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKKyAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNzIsMjAgKzkxLDIxIEBACiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKippbmJ1ZjsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBUUllNQVBfREVDKGdiMjMxMiwgKipvdXRidWYsIGMgXiAweDgwLCBJTjIgXiAweDgwKSB7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfREVDKGdiMjMxMiwgZGVjb2RlZCwgYyBeIDB4ODAsIElOQllURTIgXiAweDgwKSkgeworICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC05OCwyOCArMTE4LDMxIEBACiAKIEVOQ09ERVIoZ2JrKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIEdCS19FTkNPREUoYywgY29kZSkKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKLQotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikpIC8qIE1TQiBzZXQ6IEdCSyAqLwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKSAvKiBNU0IgdW5zZXQ6IEdCMjMxMiAqLwotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikpOyAvKiBNU0Igc2V0OiBHQksgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOyAvKiBNU0IgdW5zZXQ6IEdCMjMxMiAqLworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTI4LDIyICsxNTEsMjIgQEAKIERFQ09ERVIoZ2JrKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIEdCS19ERUNPREUoYywgSU4yLCAqKm91dGJ1ZikKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgR0JLX0RFQ09ERShjLCBJTkJZVEUyLCB3cml0ZXIpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE1Niw3MiArMTc5LDYzIEBACiAKIEVOQ09ERVIoZ2IxODAzMCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1Y3M0X3QgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBERUNPREVfU1VSUk9HQVRFKGMpCi0gICAgICAgIGlmIChjID4gMHgxMEZGRkYpCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSAgICAgICAgICAgIHJldHVybiAyOyAvKiBzdXJyb2dhdGVzIHBhaXIgKi8KLSNlbHNlCi0gICAgICAgICAgICByZXR1cm4gMTsKLSNlbmRpZgotICAgICAgICBlbHNlIGlmIChjID49IDB4MTAwMDApIHsKLSAgICAgICAgICAgIHVjczRfdCB0YyA9IGMgLSAweDEwMDAwOworICAgICAgICBpZiAoYyA+PSAweDEwMDAwKSB7CisgICAgICAgICAgICBQeV9VQ1M0IHRjID0gYyAtIDB4MTAwMDA7CisgICAgICAgICAgICBhc3NlcnQgKGMgPD0gMHgxMEZGRkYpOwogCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCk7CiAKLSAgICAgICAgICAgIE9VVDQoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCkKKyAgICAgICAgICAgIE9VVEJZVEU0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApOwogICAgICAgICAgICAgdGMgLz0gMTA7Ci0gICAgICAgICAgICBPVVQzKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEyNikgKyAweDgxKQorICAgICAgICAgICAgT1VUQllURTMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpOwogICAgICAgICAgICAgdGMgLz0gMTI2OwotICAgICAgICAgICAgT1VUMigodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKQorICAgICAgICAgICAgT1VUQllURTIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgIE9VVDEoKHVuc2lnbmVkIGNoYXIpKHRjICsgMHg5MCkpCisgICAgICAgICAgICBPVVRCWVRFMSgodW5zaWduZWQgY2hhcikodGMgKyAweDkwKSk7CiAKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotICAgICAgICAgICAgTkVYVCgyLCA0KSAvKiBzdXJyb2dhdGVzIHBhaXIgKi8KLSNlbHNlCi0gICAgICAgICAgICBORVhUKDEsIDQpCi0jZW5kaWYKKyAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIEdCS19FTkNPREUoYywgY29kZSkKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGdiMTgwMzBleHQsIGNvZGUsIGMpOworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGdiMTgwMzBleHQsIGNvZGUsIGMpKQorICAgICAgICAgICAgOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBfZ2IxODAzMF90b191bmlibXBfcmFuZ2VzICp1dHJyYW5nZTsKIAotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpOwogCiAgICAgICAgICAgICBmb3IgKHV0cnJhbmdlID0gZ2IxODAzMF90b191bmlibXBfcmFuZ2VzOwogICAgICAgICAgICAgICAgICB1dHJyYW5nZS0+Zmlyc3QgIT0gMDsKICAgICAgICAgICAgICAgICAgdXRycmFuZ2UrKykKICAgICAgICAgICAgICAgICBpZiAodXRycmFuZ2UtPmZpcnN0IDw9IGMgJiYKICAgICAgICAgICAgICAgICAgICAgYyA8PSB1dHJyYW5nZS0+bGFzdCkgewotICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIHRjOworICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IHRjOwogCiAgICAgICAgICAgICAgICAgICAgIHRjID0gYyAtIHV0cnJhbmdlLT5maXJzdCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgdXRycmFuZ2UtPmJhc2U7CiAKLSAgICAgICAgICAgICAgICAgICAgT1VUNCgodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKQorICAgICAgICAgICAgICAgICAgICBPVVRCWVRFNCgodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKTsKICAgICAgICAgICAgICAgICAgICAgdGMgLz0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpCisgICAgICAgICAgICAgICAgICAgIE9VVEJZVEUzKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEyNikgKyAweDgxKTsKICAgICAgICAgICAgICAgICAgICAgdGMgLz0gMTI2OwotICAgICAgICAgICAgICAgICAgICBPVVQyKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICAgICAgICAgIE9VVEJZVEUyKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApOwogICAgICAgICAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgT1VUMSgodW5zaWduZWQgY2hhcil0YyArIDB4ODEpCisgICAgICAgICAgICAgICAgICAgIE9VVEJZVEUxKCh1bnNpZ25lZCBjaGFyKXRjICsgMHg4MSk7CiAKLSAgICAgICAgICAgICAgICAgICAgTkVYVCgxLCA0KQorICAgICAgICAgICAgICAgICAgICBORVhUKDEsIDQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTIzMCwxMyArMjQ0LDEzIEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQorICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOwogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSkgLyogTVNCIHNldDogR0JLIG9yIEdCMTgwMzBleHQgKi8KKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikpOyAvKiBNU0Igc2V0OiBHQksgb3IgR0IxODAzMGV4dCAqLwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKSAvKiBNU0IgdW5zZXQ6IEdCMjMxMiAqLworICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOyAvKiBNU0IgdW5zZXQ6IEdCMjMxMiAqLwogCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTI0NSw2MSArMjU5LDYyIEBACiBERUNPREVSKGdiMTgwMzApCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xLCBjMjsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxLCBjMjsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAotICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICBpZiAoYzIgPj0gMHgzMCAmJiBjMiA8PSAweDM5KSB7IC8qIDQgYnl0ZXMgc2VxICovCiAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgX2diMTgwMzBfdG9fdW5pYm1wX3JhbmdlcyAqdXRyOwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMywgYzQ7Ci0gICAgICAgICAgICB1Y3M0X3QgbHNlcTsKKyAgICAgICAgICAgIFB5X1VDUzQgbHNlcTsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRig0KQotICAgICAgICAgICAgYzMgPSBJTjM7Ci0gICAgICAgICAgICBjNCA9IElONDsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoNCk7CisgICAgICAgICAgICBjMyA9IElOQllURTM7CisgICAgICAgICAgICBjNCA9IElOQllURTQ7CiAgICAgICAgICAgICBpZiAoYyA8IDB4ODEgfHwgYzMgPCAweDgxIHx8IGM0IDwgMHgzMCB8fCBjNCA+IDB4MzkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICBjIC09IDB4ODE7ICBjMiAtPSAweDMwOwogICAgICAgICAgICAgYzMgLT0gMHg4MTsgYzQgLT0gMHgzMDsKIAogICAgICAgICAgICAgaWYgKGMgPCA0KSB7IC8qIFUrMDA4MCAtIFUrRkZGRiAqLwotICAgICAgICAgICAgICAgIGxzZXEgPSAoKHVjczRfdCljICogMTAgKyBjMikgKiAxMjYwICsKLSAgICAgICAgICAgICAgICAgICAgKHVjczRfdCljMyAqIDEwICsgYzQ7CisgICAgICAgICAgICAgICAgbHNlcSA9ICgoUHlfVUNTNCljICogMTAgKyBjMikgKiAxMjYwICsKKyAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzQpYzMgKiAxMCArIGM0OwogICAgICAgICAgICAgICAgIGlmIChsc2VxIDwgMzk0MjApIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1dHIgPSBnYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbHNlcSA+PSAodXRyICsgMSktPmJhc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdXRyKyspIDsKLSAgICAgICAgICAgICAgICAgICAgT1VUMSh1dHItPmZpcnN0IC0gdXRyLT5iYXNlICsgbHNlcSkKLSAgICAgICAgICAgICAgICAgICAgTkVYVCg0LCAxKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKHV0ci0+Zmlyc3QgLSB1dHItPmJhc2UgKyBsc2VxKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTig0KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAxNSkgeyAvKiBVKzEwMDAwIC0gVSsxMEZGRkYgKi8KLSAgICAgICAgICAgICAgICBsc2VxID0gMHgxMDAwMCArICgoKHVjczRfdCljLTE1KSAqIDEwICsgYzIpCi0gICAgICAgICAgICAgICAgICAgICogMTI2MCArICh1Y3M0X3QpYzMgKiAxMCArIGM0OworICAgICAgICAgICAgICAgIGxzZXEgPSAweDEwMDAwICsgKCgoUHlfVUNTNCljLTE1KSAqIDEwICsgYzIpCisgICAgICAgICAgICAgICAgICAgICogMTI2MCArIChQeV9VQ1M0KWMzICogMTAgKyBjNDsKICAgICAgICAgICAgICAgICBpZiAobHNlcSA8PSAweDEwRkZGRikgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQobHNlcSk7Ci0gICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oNCkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihsc2VxKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTig0KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KIAotICAgICAgICBHQktfREVDT0RFKGMsIGMyLCAqKm91dGJ1ZikKLSAgICAgICAgZWxzZSBUUllNQVBfREVDKGdiMTgwMzBleHQsICoqb3V0YnVmLCBjLCBjMik7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIEdCS19ERUNPREUoYywgYzIsIHdyaXRlcikKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhnYjE4MDMwZXh0LCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0zMTksNDggKzMzNCw1MSBAQAogRU5DT0RFUl9SRVNFVChoeikKIHsKICAgICBpZiAoc3RhdGUtPmkgIT0gMCkgewotICAgICAgICBXUklURTIoJ34nLCAnfScpCisgICAgICAgIFdSSVRFQllURTIoJ34nLCAnfScpOwogICAgICAgICBzdGF0ZS0+aSA9IDA7Ci0gICAgICAgIE5FWFRfT1VUKDIpCisgICAgICAgIE5FWFRfT1VUKDIpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogRU5DT0RFUihoeikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewogICAgICAgICAgICAgaWYgKHN0YXRlLT5pID09IDApIHsKLSAgICAgICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUzKCd+JywgJ30nLCAodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMykKKyAgICAgICAgICAgICAgICBXUklURUJZVEUzKCd+JywgJ30nLCAodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgICAgICBORVhUKDEsIDMpOwogICAgICAgICAgICAgICAgIHN0YXRlLT5pID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgVUNTNElOVkFMSUQoYykKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgLyogTVNCIHNldDogR0JLICovCiAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoc3RhdGUtPmkgPT0gMCkgewotICAgICAgICAgICAgV1JJVEU0KCd+JywgJ3snLCBjb2RlID4+IDgsIGNvZGUgJiAweGZmKQotICAgICAgICAgICAgTkVYVCgxLCA0KQorICAgICAgICAgICAgV1JJVEVCWVRFNCgnficsICd7JywgY29kZSA+PiA4LCBjb2RlICYgMHhmZik7CisgICAgICAgICAgICBORVhUKDEsIDQpOwogICAgICAgICAgICAgc3RhdGUtPmkgPSAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgV1JJVEUyKGNvZGUgPj4gOCwgY29kZSAmIDB4ZmYpCi0gICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICBXUklURUJZVEUyKGNvZGUgPj4gOCwgY29kZSAmIDB4ZmYpOworICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzgyLDE1ICs0MDAsMTYgQEAKIERFQ09ERVIoaHopCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPT0gJ34nKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyID0gSU4yOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiA9IElOQllURTI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAgICAgICAgICAgICBpZiAoYzIgPT0gJ34nKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKCd+JykKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUignficpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjMiA9PSAneycgJiYgc3RhdGUtPmkgPT0gMCkKQEAgLTQwMSw3ICs0MjAsNyBAQAogICAgICAgICAgICAgICAgIDsgLyogbGluZS1jb250aW51YXRpb24gKi8KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIE5FWFQoMiwgMCk7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDA5LDE0ICs0MjgsMTQgQEAKICAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChzdGF0ZS0+aSA9PSAwKSB7IC8qIEFTQ0lJIG1vZGUgKi8KLSAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIEdCIG1vZGUgKi8KLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCi0gICAgICAgICAgICBUUllNQVBfREVDKGdiMjMxMiwgKipvdXRidWYsIGMsIElOMikgewotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhnYjIzMTIsIGRlY29kZWQsIGMsIElOQllURTIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jCmluZGV4IGQzYWQwNGIuLmI3YTdlYmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaGsuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMKQEAgLTM4LDM1ICszOCwzOSBAQAogCiBFTkNPREVSKGJpZzVoa3NjcykKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1Y3M0X3QgYyA9ICoqaW5idWY7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsKICAgICAgICAgICAgICoqb3V0YnVmID0gKHVuc2lnbmVkIGNoYXIpYzsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpbnNpemUgPSAxOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBpZiAoYyA8IDB4MTAwMDApIHsKLSAgICAgICAgICAgIFRSWU1BUF9FTkMoYmlnNWhrc2NzX2JtcCwgY29kZSwgYykgeworICAgICAgICAgICAgaWYgKFRSWU1BUF9FTkMoYmlnNWhrc2NzX2JtcCwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBNVUxUSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVmdCA+PSAyICYmCisgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgYzI7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA+PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSBJTkNIQVIyOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zID49IDIgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICgoYyAmIDB4ZmZkZikgPT0gMHgwMGNhKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgKCgoKmluYnVmKVsxXSAmIDB4ZmZmNykgPT0gMHgwMzA0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKChjMiAmIDB4ZmZmNykgPT0gMHgwMzA0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGJpZzVoa3Njc19wYWlyZW5jX3RhYmxlWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYyA+PiA0KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKmluYnVmKVsxXSA+PiAzKSkgJiAzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMyID4+IDMpKSAmIDNdOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zaXplID0gMjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmxlZnQgPCAyICYmCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlubGVuIC0gKmlucG9zIDwgMiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGZsYWdzICYgTUJFTkNfRkxVU0gpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC03NywyMSArODEsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKTsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjIDwgMHgyMDAwMCkKICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAgICAgICAgIGVsc2UgaWYgKGMgPCAweDMwMDAwKSB7Ci0gICAgICAgICAgICBUUllNQVBfRU5DKGJpZzVoa3Njc19ub25ibXAsIGNvZGUsIGMgJiAweGZmZmYpOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gaW5zaXplOworICAgICAgICAgICAgaWYgKFRSWU1BUF9FTkMoYmlnNWhrc2NzX25vbmJtcCwgY29kZSwgYyAmIDB4ZmZmZikpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhGRikKLSAgICAgICAgTkVYVChpbnNpemUsIDIpCisgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweEZGKTsKKyAgICAgICAgTkVYVChpbnNpemUsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTAyLDMzICsxMTAsMzIgQEAKIERFQ09ERVIoYmlnNWhrc2NzKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLSAgICAgICAgdWNzNF90IGRlY29kZWQ7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAotICAgICAgICBpZiAoMHhjNiA+IGMgfHwgYyA+IDB4YzggfHwgKGMgPCAweGM3ICYmIElOMiA8IDB4YTEpKSB7Ci0gICAgICAgICAgICBUUllNQVBfREVDKGJpZzUsICoqb3V0YnVmLCBjLCBJTjIpIHsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIGlmICgweGM2ID4gYyB8fCBjID4gMHhjOCB8fCAoYyA8IDB4YzcgJiYgSU5CWVRFMiA8IDB4YTEpKSB7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhiaWc1LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFRSWU1BUF9ERUMoYmlnNWhrc2NzLCBkZWNvZGVkLCBjLCBJTjIpCisgICAgICAgIGlmIChUUllNQVBfREVDKGJpZzVoa3NjcywgZGVjb2RlZCwgYywgSU5CWVRFMikpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBzID0gQkgyUyhjLCBJTjIpOworICAgICAgICAgICAgaW50IHMgPSBCSDJTKGMsIElOQllURTIpOwogICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGludGJhc2U7CiAKICAgICAgICAgICAgIGFzc2VydCgweDg3IDw9IGMgJiYgYyA8PSAweGZlKTsKLSAgICAgICAgICAgIGFzc2VydCgweDQwIDw9IElOMiAmJiBJTjIgPD0gMHhmZSk7CisgICAgICAgICAgICBhc3NlcnQoMHg0MCA8PSBJTkJZVEUyICYmIElOQllURTIgPD0gMHhmZSk7CiAKICAgICAgICAgICAgIGlmIChCSDJTKDB4ODcsIDB4NDApIDw9IHMgJiYgcyA8PSBCSDJTKDB4YTAsIDB4ZmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGhpbnRiYXNlID0gYmlnNWhrc2NzX3BoaW50XzA7CkBAIC0xNDYsMjUgKzE1MywyNSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfSU5URVJOQUw7CiAKICAgICAgICAgICAgIGlmIChoaW50YmFzZVtzID4+IDNdICYgKDEgPDwgKHMgJiA3KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KGRlY29kZWQgfCAweDIwMDAwKQotICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCB8IDB4MjAwMDApOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDEoZGVjb2RlZCkKLSAgICAgICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKChjIDw8IDgpIHwgSU4yKSB7Ci0gICAgICAgIGNhc2UgMHg4ODYyOiBXUklURTIoMHgwMGNhLCAweDAzMDQpOyBicmVhazsKLSAgICAgICAgY2FzZSAweDg4NjQ6IFdSSVRFMigweDAwY2EsIDB4MDMwYyk7IGJyZWFrOwotICAgICAgICBjYXNlIDB4ODhhMzogV1JJVEUyKDB4MDBlYSwgMHgwMzA0KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHg4OGE1OiBXUklURTIoMHgwMGVhLCAweDAzMGMpOyBicmVhazsKKyAgICAgICAgc3dpdGNoICgoYyA8PCA4KSB8IElOQllURTIpIHsKKyAgICAgICAgY2FzZSAweDg4NjI6IE9VVENIQVIyKDB4MDBjYSwgMHgwMzA0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgMHg4ODY0OiBPVVRDSEFSMigweDAwY2EsIDB4MDMwYyk7IGJyZWFrOworICAgICAgICBjYXNlIDB4ODhhMzogT1VUQ0hBUjIoMHgwMGVhLCAweDAzMDQpOyBicmVhazsKKyAgICAgICAgY2FzZSAweDg4YTU6IE9VVENIQVIyKDB4MDBlYSwgMHgwMzBjKTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAxOwogICAgICAgICB9CiAKLSAgICAgICAgTkVYVCgyLCAyKSAvKiBhbGwgZGVjb2RlZCBjb2RlcG9pbnRzIGFyZSBwYWlycywgYWJvdmUuICovCisgICAgICAgIE5FWFRfSU4oMik7IC8qIGFsbCBkZWNvZGVkIGNvZGVwb2ludHMgYXJlIHBhaXJzLCBhYm92ZS4gKi8KICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKaW5kZXggY2JjMTU0Mi4uNWM0MDFhYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKQEAgLTczLDcgKzczLDcgQEAKICNkZWZpbmUgRl9TSElGVEVEICAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSBGX0VTQ1RIUk9VR0hPVVQgICAgICAgICAweDAyCiAKLSNkZWZpbmUgU1RBVEVfU0VURyhkbiwgdikgICAgICAgKChzdGF0ZSktPmNbZG5dKSA9ICh2KTsKKyNkZWZpbmUgU1RBVEVfU0VURyhkbiwgdikgICAgICAgZG8geyAoKHN0YXRlKS0+Y1tkbl0pID0gKHYpOyB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFURV9HRVRHKGRuKSAgICAgICAgICAoKHN0YXRlKS0+Y1tkbl0pCiAKICNkZWZpbmUgU1RBVEVfRzAgICAgICAgICAgICAgICAgU1RBVEVfR0VURygwKQpAQCAtODUsMTAgKzg1LDEwIEBACiAjZGVmaW5lIFNUQVRFX1NFVEcyKHYpICAgICAgICAgIFNUQVRFX1NFVEcoMiwgdikKICNkZWZpbmUgU1RBVEVfU0VURzModikgICAgICAgICAgU1RBVEVfU0VURygzLCB2KQogCi0jZGVmaW5lIFNUQVRFX1NFVEZMQUcoZikgICAgICAgICgoc3RhdGUpLT5jWzRdKSB8PSAoZik7CisjZGVmaW5lIFNUQVRFX1NFVEZMQUcoZikgICAgICAgIGRvIHsgKChzdGF0ZSktPmNbNF0pIHw9IChmKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgU1RBVEVfR0VURkxBRyhmKSAgICAgICAgKChzdGF0ZSktPmNbNF0gJiAoZikpCi0jZGVmaW5lIFNUQVRFX0NMRUFSRkxBRyhmKSAgICAgICgoc3RhdGUpLT5jWzRdKSAmPSB+KGYpOwotI2RlZmluZSBTVEFURV9DTEVBUkZMQUdTKCkgICAgICAoKHN0YXRlKS0+Y1s0XSkgPSAwOworI2RlZmluZSBTVEFURV9DTEVBUkZMQUcoZikgICAgICBkbyB7ICgoc3RhdGUpLT5jWzRdKSAmPSB+KGYpOyB9IHdoaWxlICgwKQorI2RlZmluZSBTVEFURV9DTEVBUkZMQUdTKCkgICAgICBkbyB7ICgoc3RhdGUpLT5jWzRdKSA9IDA7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgSVNPMjAyMl9DT05GSUcgICAgICAgICAgKChjb25zdCBzdHJ1Y3QgaXNvMjAyMl9jb25maWcgKiljb25maWcpCiAjZGVmaW5lIENPTkZJR19JU1NFVChmbGFnKSAgICAgIChJU08yMDIyX0NPTkZJRy0+ZmxhZ3MgJiAoZmxhZykpCkBAIC0xMDIsOCArMTAyLDggQEAKIC8qLSotIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyAtKi0qLwogCiB0eXBlZGVmIGludCAoKmlzbzIwMjJfaW5pdF9mdW5jKSh2b2lkKTsKLXR5cGVkZWYgdWNzNF90ICgqaXNvMjAyMl9kZWNvZGVfZnVuYykoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci10eXBlZGVmIERCQ0hBUiAoKmlzbzIwMjJfZW5jb2RlX2Z1bmMpKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKTsKK3R5cGVkZWYgUHlfVUNTNCAoKmlzbzIwMjJfZGVjb2RlX2Z1bmMpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwordHlwZWRlZiBEQkNIQVIgKCppc28yMDIyX2VuY29kZV9mdW5jKShjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpOwogCiBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiB7CiAgICAgdW5zaWduZWQgY2hhciBtYXJrOwpAQCAtMTMyLDUzICsxMzIsNTIgQEAKIAogRU5DT0RFUl9JTklUKGlzbzIwMjIpCiB7Ci0gICAgU1RBVEVfQ0xFQVJGTEFHUygpCi0gICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9TRVRHMShDSEFSU0VUX0FTQ0lJKQorICAgIFNUQVRFX0NMRUFSRkxBR1MoKTsKKyAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKKyAgICBTVEFURV9TRVRHMShDSEFSU0VUX0FTQ0lJKTsKICAgICByZXR1cm4gMDsKIH0KIAogRU5DT0RFUl9SRVNFVChpc28yMDIyKQogewogICAgIGlmIChTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpIHsKLSAgICAgICAgV1JJVEUxKFNJKQotICAgICAgICBORVhUX09VVCgxKQotICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQorICAgICAgICBXUklURUJZVEUxKFNJKTsKKyAgICAgICAgTkVYVF9PVVQoMSk7CisgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOwogICAgIH0KICAgICBpZiAoU1RBVEVfRzAgIT0gQ0hBUlNFVF9BU0NJSSkgewotICAgICAgICBXUklURTMoRVNDLCAnKCcsICdCJykKLSAgICAgICAgTkVYVF9PVVQoMykKLSAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKKyAgICAgICAgV1JJVEVCWVRFMyhFU0MsICcoJywgJ0InKTsKKyAgICAgICAgTkVYVF9PVVQoMyk7CisgICAgICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogRU5DT0RFUihpc28yMDIyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2c7CiAgICAgICAgIERCQ0hBUiBlbmNvZGVkOwotICAgICAgICB1Y3M0X3QgYyA9ICoqaW5idWY7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewogICAgICAgICAgICAgaWYgKFNUQVRFX0cwICE9IENIQVJTRVRfQVNDSUkpIHsKLSAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnKCcsICdCJykKLSAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQotICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMyhFU0MsICcoJywgJ0InKTsKKyAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoU0kpCi0gICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgICAgICBORVhUX09VVCgxKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTEoU0kpOworICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgREVDT0RFX1NVUlJPR0FURShjKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOworICAgICAgICBpbnNpemUgPSAxOwogCiAgICAgICAgIGVuY29kZWQgPSBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOyBkc2ctPm1hcms7IGRzZysrKSB7CkBAIC0xODcsMjQgKzE4NiwxNCBAQAogICAgICAgICAgICAgaWYgKGVuY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKSB7CiAgICAgICAgICAgICAgICAgLyogdGhpcyBpbXBsZW1lbnRhdGlvbiB3b24ndCB3b3JrIGZvciBwYWlyCiAgICAgICAgICAgICAgICAgICogb2Ygbm9uLWJtcCBjaGFyYWN0ZXJzLiAqLwotICAgICAgICAgICAgICAgIGlmIChpbmxlZnQgPCAyKSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zIDwgMikgewogICAgICAgICAgICAgICAgICAgICBpZiAoIShmbGFncyAmIE1CRU5DX0ZMVVNIKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IC0xOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDI7Ci0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgdWNzNF90IHU0aW5bMl07Ci0gICAgICAgICAgICAgICAgICAgIHU0aW5bMF0gPSAodWNzNF90KUlOMTsKLSAgICAgICAgICAgICAgICAgICAgdTRpblsxXSA9ICh1Y3M0X3QpSU4yOwotICAgICAgICAgICAgICAgICAgICBlbmNvZGVkID0gZHNnLT5lbmNvZGVyKHU0aW4sICZsZW5ndGgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBlbmNvZGVkID0gZHNnLT5lbmNvZGVyKCZjLCAmbGVuZ3RoKTsKLSNlbHNlCiAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGRzZy0+ZW5jb2RlcigmYywgJmxlbmd0aCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBpZiAoZW5jb2RlZCAhPSBNQVBfVU5NQVBQQUJMRSkgewogICAgICAgICAgICAgICAgICAgICBpbnNpemUgPSBsZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjIxLDQ3ICsyMTAsNDYgQEAKICAgICAgICAgc3dpdGNoIChkc2ctPnBsYW5lKSB7CiAgICAgICAgIGNhc2UgMDogLyogRzAgKi8KICAgICAgICAgICAgIGlmIChTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoU0kpCi0gICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgICAgICBORVhUX09VVCgxKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTEoU0kpOworICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFNUQVRFX0cwICE9IGRzZy0+bWFyaykgewogICAgICAgICAgICAgICAgIGlmIChkc2ctPndpZHRoID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEUzKEVTQywgJygnLCBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMykKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFMyhFU0MsICcoJywgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRzZy0+bWFyayA9PSBDSEFSU0VUX0pJU1gwMjA4KSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMyhFU0MsICckJywgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnJCcsIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEU0KEVTQywgJyQnLCAnKCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoNCkKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFNChFU0MsICckJywgJygnLAorICAgICAgICAgICAgICAgICAgICAgICAgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoNCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMTogLyogRzEgKi8KICAgICAgICAgICAgIGlmIChTVEFURV9HMSAhPSBkc2ctPm1hcmspIHsKICAgICAgICAgICAgICAgICBpZiAoZHNnLT53aWR0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMyhFU0MsICcpJywgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKScsIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcxKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEU0KEVTQywgJyQnLCAnKScsCi0gICAgICAgICAgICAgICAgICAgICAgICBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcxKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoNCkKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFNChFU0MsICckJywgJyknLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCg0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIVNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkgewotICAgICAgICAgICAgICAgIFdSSVRFMShTTykKLSAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgICAgICBORVhUX09VVCgxKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTEoU08pOworICAgICAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAvKiBHMiBhbmQgRzMgaXMgbm90IHN1cHBvcnRlZDogbm8gZW5jb2RpbmcgaW4KQEAgLTI3MCwxNCArMjU4LDE0IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZHNnLT53aWR0aCA9PSAxKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpZW5jb2RlZCkKLSAgICAgICAgICAgIE5FWFRfT1VUKDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWVuY29kZWQpOworICAgICAgICAgICAgTkVYVF9PVVQoMSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBXUklURTIoZW5jb2RlZCA+PiA4LCBlbmNvZGVkICYgMHhmZikKLSAgICAgICAgICAgIE5FWFRfT1VUKDIpCisgICAgICAgICAgICBXUklURUJZVEUyKGVuY29kZWQgPj4gOCwgZW5jb2RlZCAmIDB4ZmYpOworICAgICAgICAgICAgTkVYVF9PVVQoMik7CiAgICAgICAgIH0KLSAgICAgICAgTkVYVF9JTihpbnNpemUpCisgICAgICAgIE5FWFRfSU5DSEFSKGluc2l6ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0yODUsMTcgKzI3MywxNyBAQAogCiBERUNPREVSX0lOSVQoaXNvMjAyMikKIHsKLSAgICBTVEFURV9DTEVBUkZMQUdTKCkKLSAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQotICAgIFNUQVRFX1NFVEcxKENIQVJTRVRfQVNDSUkpCi0gICAgU1RBVEVfU0VURzIoQ0hBUlNFVF9BU0NJSSkKKyAgICBTVEFURV9DTEVBUkZMQUdTKCk7CisgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSk7CisgICAgU1RBVEVfU0VURzIoQ0hBUlNFVF9BU0NJSSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIERFQ09ERVJfUkVTRVQoaXNvMjAyMikKIHsKLSAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQotICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCisgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxNCw4ICszMDIsOSBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9KSVNYMDIwOF9FWFQpICYmIGkrMSA8ICppbmxlZnQgJiYKLSAgICAgICAgICAgICAgICAgKCppbmJ1ZilbaV0gPT0gJyYnICYmICgqaW5idWYpW2krMV0gPT0gJ0AnKQorICAgICAgICAgICAgICAgICAoKmluYnVmKVtpXSA9PSAnJicgJiYgKCppbmJ1ZilbaSsxXSA9PSAnQCcpIHsKICAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChpID49IE1BWF9FU0NTRVFMRU4pCkBAIC0zMjMsMjcgKzMxMiwzMyBAQAogCiAgICAgc3dpdGNoIChlc2NsZW4pIHsKICAgICBjYXNlIDM6Ci0gICAgICAgIGlmIChJTjIgPT0gJyQnKSB7Ci0gICAgICAgICAgICBjaGFyc2V0ID0gSU4zIHwgQ0hBUlNFVF9EQkNTOworICAgICAgICBpZiAoSU5CWVRFMiA9PSAnJCcpIHsKKyAgICAgICAgICAgIGNoYXJzZXQgPSBJTkJZVEUzIHwgQ0hBUlNFVF9EQkNTOwogICAgICAgICAgICAgZGVzaWduYXRpb24gPSAwOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhcnNldCA9IElOMzsKLSAgICAgICAgICAgIGlmIChJTjIgPT0gJygnKSBkZXNpZ25hdGlvbiA9IDA7Ci0gICAgICAgICAgICBlbHNlIGlmIChJTjIgPT0gJyknKSBkZXNpZ25hdGlvbiA9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0cyKSAmJiBJTjIgPT0gJy4nKQorICAgICAgICAgICAgY2hhcnNldCA9IElOQllURTM7CisgICAgICAgICAgICBpZiAoSU5CWVRFMiA9PSAnKCcpCisgICAgICAgICAgICAgICAgZGVzaWduYXRpb24gPSAwOworICAgICAgICAgICAgZWxzZSBpZiAoSU5CWVRFMiA9PSAnKScpCisgICAgICAgICAgICAgICAgZGVzaWduYXRpb24gPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU5CWVRFMiA9PSAnLicpCiAgICAgICAgICAgICAgICAgZGVzaWduYXRpb24gPSAyOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMzsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIDQ6Ci0gICAgICAgIGlmIChJTjIgIT0gJyQnKQorICAgICAgICBpZiAoSU5CWVRFMiAhPSAnJCcpCiAgICAgICAgICAgICByZXR1cm4gNDsKIAotICAgICAgICBjaGFyc2V0ID0gSU40IHwgQ0hBUlNFVF9EQkNTOwotICAgICAgICBpZiAoSU4zID09ICcoJykgZGVzaWduYXRpb24gPSAwOwotICAgICAgICBlbHNlIGlmIChJTjMgPT0gJyknKSBkZXNpZ25hdGlvbiA9IDE7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDQ7CisgICAgICAgIGNoYXJzZXQgPSBJTkJZVEU0IHwgQ0hBUlNFVF9EQkNTOworICAgICAgICBpZiAoSU5CWVRFMyA9PSAnKCcpCisgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDA7CisgICAgICAgIGVsc2UgaWYgKElOQllURTMgPT0gJyknKQorICAgICAgICAgICAgZGVzaWduYXRpb24gPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gNDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA2OiAvKiBkZXNpZ25hdGlvbiB3aXRoIHByZWZpeCAqLwogICAgICAgICBpZiAoQ09ORklHX0lTU0VUKFVTRV9KSVNYMDIwOF9FWFQpICYmCkBAIC0zNjMsNTggKzM1OCw2NSBAQAogICAgIGlmIChjaGFyc2V0ICE9IENIQVJTRVRfQVNDSUkpIHsKICAgICAgICAgY29uc3Qgc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gKmRzZzsKIAotICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7IGRzZy0+bWFyazsgZHNnKyspCisgICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsgZHNnLT5tYXJrOyBkc2crKykgewogICAgICAgICAgICAgaWYgKGRzZy0+bWFyayA9PSBjaGFyc2V0KQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGlmICghZHNnLT5tYXJrKQogICAgICAgICAgICAgcmV0dXJuIGVzY2xlbjsKICAgICB9CiAKLSAgICBTVEFURV9TRVRHKGRlc2lnbmF0aW9uLCBjaGFyc2V0KQorICAgIFNUQVRFX1NFVEcoZGVzaWduYXRpb24sIGNoYXJzZXQpOwogICAgICppbmxlZnQgLT0gZXNjbGVuOwogICAgICgqaW5idWYpICs9IGVzY2xlbjsKICAgICByZXR1cm4gMDsKIH0KIAotI2RlZmluZSBJU084ODU5XzdfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPCAweGEwKSAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA8IDB4YzAgJiYgKDB4Mjg4ZjNiYzlMICYgKDFMIDw8ICgoYyktMHhhMCkpKSkgICAgICAgICAgXAotICAgICAgICAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA+PSAweGI0ICYmIChjKSA8PSAweGZlICYmICgoYykgPj0gMHhkNCB8fCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICgweGJmZmZmZDc3TCAmICgxTCA8PCAoKGMpLTB4YjQpKSkpKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoYXNzaSkgPSAweDAyZDAgKyAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweGExKSAoYXNzaSkgPSAweDIwMTg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweGEyKSAoYXNzaSkgPSAweDIwMTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweGFmKSAoYXNzaSkgPSAweDIwMTU7CisjZGVmaW5lIElTTzg4NTlfN19ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPCAweGEwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPCAweGMwICYmICgweDI4OGYzYmM5TCAmICgxTCA8PCAoKGMpLTB4YTApKSkpIHsgXAorICAgICAgICBPVVRDSEFSKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA+PSAweGI0ICYmIChjKSA8PSAweGZlICYmICgoYykgPj0gMHhkNCB8fCAgICAgICBcCisgICAgICAgICAgICAgKDB4YmZmZmZkNzdMICYgKDFMIDw8ICgoYyktMHhiNCkpKSkpIHsgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MDJkMCArIChjKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA9PSAweGExKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpID09IDB4YTIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPT0gMHhhZikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CiBpc28yMDIycHJvY2Vzc2cyKGNvbnN0IHZvaWQgKmNvbmZpZywgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5idWYsIFB5X3NzaXplX3QgKmlubGVmdCwKLSAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCAqb3V0bGVmdCkKKyAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewogICAgIC8qIG5vdCB3cml0dGVuIHRvIHVzZSBlbmNvZGVyLCBkZWNvZGVyIGZ1bmN0aW9ucyBiZWNhdXNlIG9ubHkgZmV3CiAgICAgICogZW5jb2RpbmdzIHVzZSBHMiBkZXNpZ25hdGlvbnMgaW4gQ0pLQ29kZWNzICovCiAgICAgaWYgKFNUQVRFX0cyID09IENIQVJTRVRfSVNPODg1OV8xKSB7Ci0gICAgICAgIGlmIChJTjMgPCAweDgwKQotICAgICAgICAgICAgT1VUMShJTjMgKyAweDgwKQorICAgICAgICBpZiAoSU5CWVRFMyA8IDB4ODApCisgICAgICAgICAgICBPVVRDSEFSKElOQllURTMgKyAweDgwKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgfQogICAgIGVsc2UgaWYgKFNUQVRFX0cyID09IENIQVJTRVRfSVNPODg1OV83KSB7Ci0gICAgICAgIElTTzg4NTlfN19ERUNPREUoSU4zIF4gMHg4MCwgKipvdXRidWYpCi0gICAgICAgIGVsc2UgcmV0dXJuIDM7CisgICAgICAgIElTTzg4NTlfN19ERUNPREUoSU5CWVRFMyBeIDB4ODAsIHdyaXRlcikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgfQogICAgIGVsc2UgaWYgKFNUQVRFX0cyID09IENIQVJTRVRfQVNDSUkpIHsKLSAgICAgICAgaWYgKElOMyAmIDB4ODApIHJldHVybiAzOwotICAgICAgICBlbHNlICoqb3V0YnVmID0gSU4zOworICAgICAgICBpZiAoSU5CWVRFMyAmIDB4ODApCisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgT1VUQ0hBUihJTkJZVEUzKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUJFUlJfSU5URVJOQUw7CiAKICAgICAoKmluYnVmKSArPSAzOwogICAgICppbmxlZnQgLT0gMzsKLSAgICAoKm91dGJ1ZikgKz0gMTsKLSAgICAqb3V0bGVmdCAtPSAxOwogICAgIHJldHVybiAwOwogfQogCkBAIC00MjMsNTggKzQyNSw1OCBAQAogICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2djYWNoZSA9IE5VTEw7CiAKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CiAgICAgICAgIFB5X3NzaXplX3QgZXJyOwogCiAgICAgICAgIGlmIChTVEFURV9HRVRGTEFHKEZfRVNDVEhST1VHSE9VVCkpIHsKICAgICAgICAgICAgIC8qIEVTQyB0aHJvdWdob3V0IG1vZGU6CiAgICAgICAgICAgICAgKiBmb3Igbm9uLWlzbzIwMjIgZXNjYXBlIHNlcXVlbmNlcyAqLwotICAgICAgICAgICAgV1JJVEUxKGMpIC8qIGFzc3VtZSBhcyBJU08tODg1OS0xICovCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOyAvKiBhc3N1bWUgYXMgSVNPLTg4NTktMSAqLworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGlmIChJU19FU0NFTkQoYykpIHsKLSAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9FU0NUSFJPVUdIT1VUKQorICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX0VTQ1RIUk9VR0hPVVQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICAgY2FzZSBFU0M6Ci0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBpZiAoSVNfSVNPMjAyMkVTQyhJTjIpKSB7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgaWYgKElTX0lTTzIwMjJFU0MoSU5CWVRFMikpIHsKICAgICAgICAgICAgICAgICBlcnIgPSBpc28yMDIycHJvY2Vzc2VzYyhjb25maWcsIHN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5sZWZ0KTsKICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0cyKSAmJiBJTjIgPT0gJ04nKSB7LyogU1MyICovCi0gICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKQorICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU5CWVRFMiA9PSAnTicpIHsvKiBTUzIgKi8KKyAgICAgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpOwogICAgICAgICAgICAgICAgIGVyciA9IGlzbzIwMjJwcm9jZXNzZzIoY29uZmlnLCBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgaW5idWYsICZpbmxlZnQsIG91dGJ1ZiwgJm91dGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5idWYsICZpbmxlZnQsIHdyaXRlcik7CiAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKEVTQykKLSAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfRVNDVEhST1VHSE9VVCkKLSAgICAgICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihFU0MpOworICAgICAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9FU0NUSFJPVUdIT1VUKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU0k6CiAgICAgICAgICAgICBpZiAoQ09ORklHX0lTU0VUKE5PX1NISUZUKSkKICAgICAgICAgICAgICAgICBnb3RvIGJ5cGFzczsKLSAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICBORVhUX0lOKDEpCisgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTTzoKICAgICAgICAgICAgIGlmIChDT05GSUdfSVNTRVQoTk9fU0hJRlQpKQogICAgICAgICAgICAgICAgIGdvdG8gYnlwYXNzOwotICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICBORVhUX0lOKDEpCisgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTEY6Ci0gICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgV1JJVEUxKExGKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICBPVVRDSEFSKExGKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChjIDwgMHgyMCkgLyogQzAgKi8KQEAgLTQ4NCw3ICs0ODYsNyBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gKmRzZzsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoYXJzZXQ7Ci0gICAgICAgICAgICAgICAgdWNzNF90IGRlY29kZWQ7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgICAgICAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkKICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IFNUQVRFX0cxOwpAQCAtNDkyLDQzICs0OTQsNDQgQEAKICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IFNUQVRFX0cwOwogCiAgICAgICAgICAgICAgICAgaWYgKGNoYXJzZXQgPT0gQ0hBUlNFVF9BU0NJSSkgewotYnlwYXNzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQoMSwgMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkc2djYWNoZSAhPSBOVUxMICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2djYWNoZS0+bWFyayA9PSBjaGFyc2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzZyA9IGRzZ2NhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2ctPm1hcmsgIT0gY2hhcnNldAotI2lmZGVmIFB5X0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkc2ctPm1hcmsgIT0gJ1wwJwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ZHNnKyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub29wICovOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChkc2ctPm1hcmsgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnY2FjaGUgPSBkc2c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKGRzZy0+d2lkdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSBkc2ctPmRlY29kZXIoKmluYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRzZy0+d2lkdGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQgPCAweDEwMDAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEUxKGRlY29kZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNvZGVkIDwgMHgzMDAwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChkZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAvKiBKSVMgWCAwMjEzIHBhaXJzICovCi0gICAgICAgICAgICAgICAgICAgIFdSSVRFMihkZWNvZGVkID4+IDE2LCBkZWNvZGVkICYgMHhmZmZmKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgyKQorYnlwYXNzOgorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTkVYVF9JTihkc2ctPndpZHRoKQorCisgICAgICAgICAgICAgICAgaWYgKGRzZ2NhY2hlICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAgZHNnY2FjaGUtPm1hcmsgPT0gY2hhcnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzZyA9IGRzZ2NhY2hlOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgZHNnLT5tYXJrICE9IGNoYXJzZXQKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRzZy0+bWFyayAhPSAnXDAnCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICA7IGRzZysrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBub29wICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGRzZy0+bWFyayAhPSAnXDAnKTsKKyAgICAgICAgICAgICAgICAgICAgZHNnY2FjaGUgPSBkc2c7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRihkc2ctPndpZHRoKTsKKyAgICAgICAgICAgICAgICBkZWNvZGVkID0gZHNnLT5kZWNvZGVyKCppbmJ1Zik7CisgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkc2ctPndpZHRoOworCisgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQgPCAweDEwMDAwKSB7CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY29kZWQgPCAweDMwMDAwKSB7CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeyAvKiBKSVMgWCAwMjEzIHBhaXJzICovCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIyKGRlY29kZWQgPj4gMTYsIGRlY29kZWQgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBORVhUX0lOKGRzZy0+d2lkdGgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU3NywyNSArNTgwLDI2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBrc3gxMDAxX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGtzeDEwMDEsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIGlmIChUUllNQVBfREVDKGtzeDEwMDEsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICByZXR1cm4gdTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgota3N4MTAwMV9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQora3N4MTAwMV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgYXNzZXJ0KCpsZW5ndGggPT0gMSk7CiAgICAgaWYgKCpkYXRhIDwgMHgxMDAwMCkgewotICAgICAgICBUUllNQVBfRU5DKGNwOTQ5LCBjb2RlZCwgKmRhdGEpCisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTQ5LCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoIShjb2RlZCAmIDB4ODAwMCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KQEAgLTYxMywyNyArNjE3LDI3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIwOF9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7CisgICAgUHlfVUNTNCB1OwogICAgIGlmIChkYXRhWzBdID09IDB4MjEgJiYgZGF0YVsxXSA9PSAweDQwKSAvKiBGL1cgUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgIHJldHVybiAweGZmM2M7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICByZXR1cm4gdTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMDhfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjA4X2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBhc3NlcnQoKmxlbmd0aCA9PSAxKTsKICAgICBpZiAoKmRhdGEgPCAweDEwMDAwKSB7CiAgICAgICAgIGlmICgqZGF0YSA9PSAweGZmM2MpIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgICAgIHJldHVybiAweDIxNDA7Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoIShjb2RlZCAmIDB4ODAwMCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkOwogICAgICAgICB9CkBAIC02NTQsMjMgKzY1OCwyMyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTJfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIFRSWU1BUF9ERUMoamlzeDAyMTIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIGlmIChUUllNQVBfREVDKGppc3gwMjEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEyX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxMl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgYXNzZXJ0KCpsZW5ndGggPT0gMSk7CiAgICAgaWYgKCpkYXRhIDwgMHgxMDAwMCkgewotICAgICAgICBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoY29kZWQgJiAweDgwMDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkICYgMHg3ZmZmOwogICAgICAgICB9CkBAIC03MDUsMzAgKzcwOSwzNCBAQAogfQogCiAjZGVmaW5lIGNvbmZpZyAoKHZvaWQgKikyMDAwKQotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEzXzIwMDBfMV9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7CisgICAgUHlfVUNTNCB1OwogICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKHUsIGRhdGFbMF0sIGRhdGFbMV0pCiAgICAgZWxzZSBpZiAoZGF0YVswXSA9PSAweDIxICYmIGRhdGFbMV0gPT0gMHg0MCkgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICByZXR1cm4gMHhmZjNjOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICB1IHw9IDB4MjAwMDA7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEzXzIwMDBfMl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIodSwgZGF0YVswXSwgZGF0YVsxXSkKLSAgICBUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyX0NIQVIodSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwpAQCAtNzM2LDI4ICs3NDQsMzIgQEAKIH0KICN1bmRlZiBjb25maWcKIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEzXzIwMDRfMV9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7CisgICAgUHlfVUNTNCB1OwogICAgIGlmIChkYXRhWzBdID09IDB4MjEgJiYgZGF0YVsxXSA9PSAweDQwKSAvKiBGL1cgUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgIHJldHVybiAweGZmM2M7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHUgfD0gMHgyMDAwMDsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgdSwgZGF0YVswXSwgZGF0YVsxXSk7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiB1OwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTNfMjAwNF8yX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICB1IHw9IDB4MjAwMDA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CkBAIC03NjUsNyArNzc3LDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCwgdm9pZCAqY29uZmlnKQoramlzeDAyMTNfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmNvbmZpZykKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAKQEAgLTc3NCwyOCArNzg2LDI4IEBACiAgICAgICAgIGlmICgqZGF0YSA+PSAweDEwMDAwKSB7CiAgICAgICAgICAgICBpZiAoKCpkYXRhKSA+PiAxNiA9PSAweDIwMDAwID4+IDE2KSB7CiAgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9FTVAoY29kZWQsICpkYXRhKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmRhdGEpICYgMHhmZmZmKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlZCwgKCpkYXRhKSAmIDB4ZmZmZikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgfQogCiAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGNvZGVkLCAqZGF0YSkKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoY29kZWQgPT0gTVVMVElDKQogICAgICAgICAgICAgICAgIHJldHVybiBNQVBfTVVMVElQTEVfQVZBSUw7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmIChjb2RlZCAmIDB4ODAwMCkKICAgICAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgICAgICByZXR1cm4gY29kZWQ7CisKICAgICBjYXNlIDI6IC8qIHNlY29uZCBjaGFyYWN0ZXIgb2YgdW5pY29kZSBwYWlyICovCiAgICAgICAgIGNvZGVkID0gZmluZF9wYWlyZW5jbWFwKCh1Y3MyX3QpZGF0YVswXSwgKHVjczJfdClkYXRhWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsIEpJU1gwMjEzX0VOQ1BBSVJTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsIEpJU1gwMjEzX0VOQ1BBSVJTKTsKICAgICAgICAgaWYgKGNvZGVkID09IERCQ0lOVikgewogICAgICAgICAgICAgKmxlbmd0aCA9IDE7CiAgICAgICAgICAgICBjb2RlZCA9IGZpbmRfcGFpcmVuY21hcCgodWNzMl90KWRhdGFbMF0sIDAsCkBAIC04MDUsMjEgKzgxNywyNCBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKKwogICAgIGNhc2UgLTE6IC8qIGZsdXNoIHVudGVybWluYXRlZCAqLwogICAgICAgICAqbGVuZ3RoID0gMTsKICAgICAgICAgY29kZWQgPSBmaW5kX3BhaXJlbmNtYXAoKHVjczJfdClkYXRhWzBdLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsIEpJU1gwMjEzX0VOQ1BBSVJTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsIEpJU1gwMjEzX0VOQ1BBSVJTKTsKICAgICAgICAgaWYgKGNvZGVkID09IERCQ0lOVikKICAgICAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvZGVkOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICB9CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDBfMV9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwMF8xX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZCA9IGppc3gwMjEzX2VuY29kZXIoZGF0YSwgbGVuZ3RoLCAodm9pZCAqKTIwMDApOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC04MzEsNyArODQ2LDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwMF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDAwXzFfZW5jb2Rlcl9wYWlyb25seShjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIFB5X3NzaXplX3QgaWxlbmd0aCA9ICpsZW5ndGg7CkBAIC04NTQsNyArODY5LDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwMF8yX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDAwXzJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsICh2b2lkICopMjAwMCk7CiAgICAgaWYgKGNvZGVkID09IE1BUF9VTk1BUFBBQkxFIHx8IGNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkKQEAgLTg2Niw3ICs4ODEsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDA0XzFfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDRfMV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQgPSBqaXN4MDIxM19lbmNvZGVyKGRhdGEsIGxlbmd0aCwgTlVMTCk7CiAgICAgaWYgKGNvZGVkID09IE1BUF9VTk1BUFBBQkxFIHx8IGNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkKQEAgLTg3OCw3ICs4OTMsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDA0XzFfZW5jb2Rlcl9wYWlyb25seShjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDRfMV9lbmNvZGVyX3BhaXJvbmx5KGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgUHlfc3NpemVfdCBpbGVuZ3RoID0gKmxlbmd0aDsKQEAgLTkwMSw3ICs5MTYsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDA0XzJfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDRfMl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQgPSBqaXN4MDIxM19lbmNvZGVyKGRhdGEsIGxlbmd0aCwgTlVMTCk7CiAgICAgaWYgKGNvZGVkID09IE1BUF9VTk1BUFBBQkxFIHx8IGNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkKQEAgLTkxMiwzOSArOTI3LDQzIEBACiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjAxX3JfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIEpJU1gwMjAxX1JfREVDT0RFKCpkYXRhLCB1KQotICAgIGVsc2UgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOworICAgIFB5X1VDUzQgdTsKKyAgICBKSVNYMDIwMV9SX0RFQ09ERV9DSEFSKCpkYXRhLCB1KQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiB1OwogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIwMV9yX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIwMV9yX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBKSVNYMDIwMV9SX0VOQ09ERSgqZGF0YSwgY29kZWQpCi0gICAgZWxzZSByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIGNvZGVkOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMDFfa19kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgSklTWDAyMDFfS19ERUNPREUoKmRhdGEgXiAweDgwLCB1KQotICAgIGVsc2UgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOworICAgIFB5X1VDUzQgdTsKKyAgICBKSVNYMDIwMV9LX0RFQ09ERV9DSEFSKCpkYXRhIF4gMHg4MCwgdSkKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMDFfa19lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMDFfa19lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgSklTWDAyMDFfS19FTkNPREUoKmRhdGEsIGNvZGVkKQotICAgIGVsc2UgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiBjb2RlZCAtIDB4ODA7CiB9CiAKQEAgLTk2MSwyMyArOTgwLDIzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBnYjIzMTJfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIFRSWU1BUF9ERUMoZ2IyMzEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhnYjIzMTIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICByZXR1cm4gdTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgotZ2IyMzEyX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitnYjIzMTJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKLSAgICAgICAgVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoIShjb2RlZCAmIDB4ODAwMCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkOwogICAgICAgICB9CkBAIC05ODYsMTQgKzEwMDUsMTQgQEAKIH0KIAogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogZHVtbXlfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewogICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgotZHVtbXlfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2R1bW15X2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfanAuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfanAuYwppbmRleCBhNTAwNjk2Li4yYzc3ODhhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19qcC5jCkBAIC0xOSw0MCArMTksNDEgQEAKIAogRU5DT0RFUihjcDkzMikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKIAogICAgICAgICBpZiAoYyA8PSAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGZmNjEgJiYgYyA8PSAweGZmOWYpIHsKLSAgICAgICAgICAgIFdSSVRFMShjIC0gMHhmZWMwKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMShjIC0gMHhmZWMwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZjhmMCAmJiBjIDw9IDB4ZjhmMykgewogICAgICAgICAgICAgLyogV2luZG93cyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7CiAgICAgICAgICAgICBpZiAoYyA9PSAweGY4ZjApCi0gICAgICAgICAgICAgICAgT1VUMSgweGEwKQorICAgICAgICAgICAgICAgIE9VVEJZVEUxKDB4YTApOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIE9VVDEoYyAtIDB4ZmVmMSArIDB4ZmQpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICAgICAgT1VUQllURTEoYyAtIDB4ZmVmMSArIDB4ZmQpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgVUNTNElOVkFMSUQoYykKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKLSAgICAgICAgVFJZTUFQX0VOQyhjcDkzMmV4dCwgY29kZSwgYykgewotICAgICAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgICAgICBPVVQyKGNvZGUgJiAweGZmKQorICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDkzMmV4dCwgY29kZSwgYykpIHsKKyAgICAgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhmZik7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIC8qIE1TQiBzZXQ6IEpJUyBYIDAyMTIgKi8KICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIApAQCAtNjEsMjAgKzYyLDIwIEBACiAgICAgICAgICAgICBjMiA9IGNvZGUgJiAweGZmOwogICAgICAgICAgICAgYzIgPSAoKChjMSAtIDB4MjEpICYgMSkgPyAweDVlIDogMCkgKyAoYzIgLSAweDIxKTsKICAgICAgICAgICAgIGMxID0gKGMxIC0gMHgyMSkgPj4gMTsKLSAgICAgICAgICAgIE9VVDEoYzEgPCAweDFmID8gYzEgKyAweDgxIDogYzEgKyAweGMxKQotICAgICAgICAgICAgT1VUMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpCisgICAgICAgICAgICBPVVRCWVRFMShjMSA8IDB4MWYgPyBjMSArIDB4ODEgOiBjMSArIDB4YzEpOworICAgICAgICAgICAgT1VUQllURTIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZTAwMCAmJiBjIDwgMHhlNzU4KSB7CiAgICAgICAgICAgICAvKiBVc2VyLWRlZmluZWQgYXJlYSAqLwotICAgICAgICAgICAgYzEgPSAoUHlfVU5JQ09ERSkoYyAtIDB4ZTAwMCkgLyAxODg7Ci0gICAgICAgICAgICBjMiA9IChQeV9VTklDT0RFKShjIC0gMHhlMDAwKSAlIDE4ODsKLSAgICAgICAgICAgIE9VVDEoYzEgKyAweGYwKQotICAgICAgICAgICAgT1VUMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpCisgICAgICAgICAgICBjMSA9IChQeV9VQ1M0KShjIC0gMHhlMDAwKSAvIDE4ODsKKyAgICAgICAgICAgIGMyID0gKFB5X1VDUzQpKGMgLSAweGUwMDApICUgMTg4OworICAgICAgICAgICAgT1VUQllURTEoYzEgKyAweGYwKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtODMsMzMgKzg0LDM0IEBACiBERUNPREVSKGNwOTMyKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMSwgYzI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTEsIGMyOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKICAgICAgICAgaWYgKGMgPD0gMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4YTAgJiYgYyA8PSAweGRmKSB7CiAgICAgICAgICAgICBpZiAoYyA9PSAweGEwKQotICAgICAgICAgICAgICAgIE9VVDEoMHhmOGYwKSAvKiBoYWxmLXdpZHRoIGthdGFrYW5hICovCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGY4ZjApOyAvKiBoYWxmLXdpZHRoIGthdGFrYW5hICovCiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT1VUMSgweGZlYzAgKyBjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZWMwICsgYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGZkLyogJiYgYyA8PSAweGZmKi8pIHsKICAgICAgICAgICAgIC8qIFdpbmRvd3MgY29tcGF0aWJpbGl0eSAqLwotICAgICAgICAgICAgT1VUMSgweGY4ZjEgLSAweGZkICsgYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoMHhmOGYxIC0gMHhmZCArIGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgYzIgPSBJTkJZVEUyOwogCi0gICAgICAgIFRSWU1BUF9ERUMoY3A5MzJleHQsICoqb3V0YnVmLCBjLCBjMik7CisgICAgICAgIGlmIChUUllNQVBfREVDKGNwOTMyZXh0LCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOwogICAgICAgICBlbHNlIGlmICgoYyA+PSAweDgxICYmIGMgPD0gMHg5ZikgfHwgKGMgPj0gMHhlMCAmJiBjIDw9IDB4ZWEpKXsKICAgICAgICAgICAgIGlmIChjMiA8IDB4NDAgfHwgKGMyID4gMHg3ZSAmJiBjMiA8IDB4ODApIHx8IGMyID4gMHhmYykKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTExOSwyMSArMTIxLDIzIEBACiAgICAgICAgICAgICBjID0gKDIgKiBjICsgKGMyIDwgMHg1ZSA/IDAgOiAxKSArIDB4MjEpOwogICAgICAgICAgICAgYzIgPSAoYzIgPCAweDVlID8gYzIgOiBjMiAtIDB4NWUpICsgMHgyMTsKIAotICAgICAgICAgICAgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsIGMsIGMyKTsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGYwICYmIGMgPD0gMHhmOSkgewogICAgICAgICAgICAgaWYgKChjMiA+PSAweDQwICYmIGMyIDw9IDB4N2UpIHx8CiAgICAgICAgICAgICAgICAgKGMyID49IDB4ODAgJiYgYzIgPD0gMHhmYykpCi0gICAgICAgICAgICAgICAgT1VUMSgweGUwMDAgKyAxODggKiAoYyAtIDB4ZjApICsKLSAgICAgICAgICAgICAgICAgICAgIChjMiA8IDB4ODAgPyBjMiAtIDB4NDAgOiBjMiAtIDB4NDEpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhlMDAwICsgMTg4ICogKGMgLSAweGYwKSArCisgICAgICAgICAgICAgICAgICAgIChjMiA8IDB4ODAgPyBjMiAtIDB4NDAgOiBjMiAtIDB4NDEpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xNDYsMjUgKzE1MCwyNCBAQAogCiBFTkNPREVSKGV1Y19qaXNfMjAwNCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1Y3M0X3QgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKGMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgREVDT0RFX1NVUlJPR0FURShjKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOworICAgICAgICBpbnNpemUgPSAxOwogCiAgICAgICAgIGlmIChjIDw9IDB4RkZGRikgewogICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9CTVAoY29kZSwgYykKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGUsIGMpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgIGlmIChjb2RlID09IE1VTFRJQykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0IDwgMikgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBNQkVOQ19GTFVTSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBmaW5kX3BhaXJlbmNtYXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgMCwKQEAgLTE3Nyw4ICsxODAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IGMyID0gSU5DSEFSMjsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBmaW5kX3BhaXJlbmNtYXAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCAoKmluYnVmKVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIGMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpJU1gwMjEzX0VOQ1BBSVJTKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IERCQ0lOVikgewpAQCAtMTkzLDExICsxOTcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGZmNjEgJiYgYyA8PSAweGZmOWYpIHsKICAgICAgICAgICAgICAgICAvKiBKSVMgWCAwMjAxIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KLSAgICAgICAgICAgICAgICBXUklURTIoMHg4ZSwgYyAtIDB4ZmVjMCkKLSAgICAgICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMigweDhlLCBjIC0gMHhmZWMwKTsKKyAgICAgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweGZmM2MpCkBAIC0yMTEsMjAgKzIxNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj4gMTYgPT0gRU1QQkFTRSA+PiAxNikgewogICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9FTVAoY29kZSwgYykKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGUsIGMgJiAweGZmZmYpOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gaW5zaXplOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGUsIGMgJiAweGZmZmYpKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIHsKICAgICAgICAgICAgIC8qIENvZGVzZXQgMiAqLwotICAgICAgICAgICAgV1JJVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKGluc2l6ZSwgMykKKyAgICAgICAgICAgIFdSSVRFQllURTMoMHg4ZiwgY29kZSA+PiA4LCAoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKGluc2l6ZSwgMyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBDb2Rlc2V0IDEgKi8KLSAgICAgICAgICAgIFdSSVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVChpbnNpemUsIDIpCisgICAgICAgICAgICBXUklURUJZVEUyKChjb2RlID4+IDgpIHwgMHg4MCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVChpbnNpemUsIDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMzQsMTQgKzI0MSwxMiBAQAogREVDT0RFUihldWNfamlzXzIwMDQpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotICAgICAgICB1Y3M0X3QgY29kZTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGNvZGUsIGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTI0OSwxMSArMjU0LDExIEBACiAgICAgICAgICAgICAvKiBKSVMgWCAwMjAxIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIGlmIChjMiA+PSAweGExICYmIGMyIDw9IDB4ZGYpIHsKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZmVjMCArIGMyKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmVjMCArIGMyKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMjYxLDQ3ICsyNjYsNTUgQEAKICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDhmKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyLCBjMzsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKQotICAgICAgICAgICAgYzIgPSBJTjIgXiAweDgwOwotICAgICAgICAgICAgYzMgPSBJTjMgXiAweDgwOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMiBeIDB4ODA7CisgICAgICAgICAgICBjMyA9IElOQllURTMgXiAweDgwOwogCiAgICAgICAgICAgICAvKiBKSVMgWCAwMjEzIFBsYW5lIDIgb3IgSklTIFggMDIxMiAoc2VlIE5PVEVTKSAqLwotICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIoKipvdXRidWYsIGMyLCBjMykKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgKipvdXRidWYsIGMyLCBjMykgOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCBjb2RlLCBjMiwgYzMpIHsKLSAgICAgICAgICAgICAgICBXUklURVVDUzQoRU1QQkFTRSB8IGNvZGUpCi0gICAgICAgICAgICAgICAgTkVYVF9JTigzKQorICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIod3JpdGVyLCBjMiwgYzMpCisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCBkZWNvZGVkLCBjMiwgYzMpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCBjb2RlLCBjMiwgYzMpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigzKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxMiwgKipvdXRidWYsIGMyLCBjMykgOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKLSAgICAgICAgICAgIE5FWFQoMywgMSkKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTIsIGRlY29kZWQsIGMyLCBjMykpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIE5FWFRfSU4oMyk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogICAgICAgICAgICAgYyBePSAweDgwOwotICAgICAgICAgICAgYzIgPSBJTjIgXiAweDgwOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyIF4gMHg4MDsKIAogICAgICAgICAgICAgLyogSklTIFggMDIxMyBQbGFuZSAxICovCi0gICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSgqKm91dGJ1ZiwgYywgYzIpCi0gICAgICAgICAgICBlbHNlIGlmIChjID09IDB4MjEgJiYgYzIgPT0gMHg0MCkgKipvdXRidWYgPSAweGZmM2M7Ci0gICAgICAgICAgICBlbHNlIGlmIChjID09IDB4MjIgJiYgYzIgPT0gMHgzMikgKipvdXRidWYgPSAweGZmNWU7Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjLCBjMik7Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsICoqb3V0YnVmLCBjLCBjMik7Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIGNvZGUsIGMsIGMyKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKHdyaXRlciwgYywgYzIpCisgICAgICAgICAgICBlbHNlIGlmIChjID09IDB4MjEgJiYgYzIgPT0gMHg0MCkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmYzYyk7CisgICAgICAgICAgICBlbHNlIGlmIChjID09IDB4MjIgJiYgYzIgPT0gMHgzMikKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmY1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgY29kZSwgYywgYzIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCBjb2RlLCBjLCBjMikgewotICAgICAgICAgICAgICAgIFdSSVRFMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMikKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYywgYzIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUjIoY29kZSA+PiAxNiwgY29kZSAmIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMTUsMzUgKzMyOCwzNyBAQAogCiBFTkNPREVSKGV1Y19qcCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgVUNTNElOVkFMSUQoYykKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGZmNjEgJiYgYyA8PSAweGZmOWYpIHsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDEgaGFsZi13aWR0aCBrYXRha2FuYSAqLwotICAgICAgICAgICAgV1JJVEUyKDB4OGUsIGMgLSAweGZlYzApCi0gICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICBXUklURUJZVEUyKDB4OGUsIGMgLSAweGZlYzApOworICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAjaWZuZGVmIFNUUklDVF9CVUlMRAogICAgICAgICBlbHNlIGlmIChjID09IDB4ZmYzYykgLyogRlVMTC1XSURUSCBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgICAgIGNvZGUgPSAweDIxNDA7CiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHhhNSkgeyAvKiBZRU4gU0lHTiAqLwotICAgICAgICAgICAgV1JJVEUxKDB4NWMpOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgweDVjKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfSBlbHNlIGlmIChjID09IDB4MjAzZSkgeyAvKiBPVkVSTElORSAqLwotICAgICAgICAgICAgV1JJVEUxKDB4N2UpOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgweDdlKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0zNTIsMTIgKzM2NywxMiBAQAogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSB7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjEyICovCi0gICAgICAgICAgICBXUklURTMoMHg4ZiwgY29kZSA+PiA4LCAoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoMSwgMykKKyAgICAgICAgICAgIFdSSVRFQllURTMoMHg4ZiwgY29kZSA+PiA4LCAoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKDEsIDMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogSklTIFggMDIwOCAqLwotICAgICAgICAgICAgV1JJVEUyKChjb2RlID4+IDgpIHwgMHg4MCwgKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICBXUklURUJZVEUyKChjb2RlID4+IDgpIHwgMHg4MCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzY3LDEzICszODIsMTIgQEAKIERFQ09ERVIoZXVjX2pwKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTM4MSwxMSArMzk1LDExIEBACiAgICAgICAgICAgICAvKiBKSVMgWCAwMjAxIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIGlmIChjMiA+PSAweGExICYmIGMyIDw9IDB4ZGYpIHsKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZmVjMCArIGMyKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmVjMCArIGMyKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMzkzLDEyICs0MDcsMTMgQEAKICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDhmKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyLCBjMzsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKQotICAgICAgICAgICAgYzIgPSBJTjI7Ci0gICAgICAgICAgICBjMyA9IElOMzsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMyk7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CisgICAgICAgICAgICBjMyA9IElOQllURTM7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjEyICovCi0gICAgICAgICAgICBUUllNQVBfREVDKGppc3gwMjEyLCAqKm91dGJ1ZiwgYzIgXiAweDgwLCBjMyBeIDB4ODApIHsKLSAgICAgICAgICAgICAgICBORVhUKDMsIDEpCisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxMiwgZGVjb2RlZCwgYzIgXiAweDgwLCBjMyBeIDB4ODApKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtNDA2LDE5ICs0MjEsMjAgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjA4ICovCiAjaWZuZGVmIFNUUklDVF9CVUlMRAogICAgICAgICAgICAgaWYgKGMgPT0gMHhhMSAmJiBjMiA9PSAweGMwKQogICAgICAgICAgICAgICAgIC8qIEZVTEwtV0lEVEggUkVWRVJTRSBTT0xJRFVTICovCi0gICAgICAgICAgICAgICAgKipvdXRidWYgPSAweGZmM2M7CisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmM2MpOwogICAgICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAgICAgICAgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjIF4gMHg4MCwgYzIgXiAweDgwKSA7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMgXiAweDgwLCBjMiBeIDB4ODApKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MzIsMzQgKzQ0OCw0MCBAQAogCiBFTkNPREVSKHNoaWZ0X2ppcykKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKIAogI2lmZGVmIFNUUklDVF9CVUlMRAogICAgICAgICBKSVNYMDIwMV9SX0VOQ09ERShjLCBjb2RlKQogI2Vsc2UKLSAgICAgICAgaWYgKGMgPCAweDgwKSBjb2RlID0gYzsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAweDAwYTUpIGNvZGUgPSAweDVjOyAvKiBZRU4gU0lHTiAqLwotICAgICAgICBlbHNlIGlmIChjID09IDB4MjAzZSkgY29kZSA9IDB4N2U7IC8qIE9WRVJMSU5FICovCisgICAgICAgIGlmIChjIDwgMHg4MCkKKyAgICAgICAgICAgIGNvZGUgPSBjOworICAgICAgICBlbHNlIGlmIChjID09IDB4MDBhNSkKKyAgICAgICAgICAgIGNvZGUgPSAweDVjOyAvKiBZRU4gU0lHTiAqLworICAgICAgICBlbHNlIGlmIChjID09IDB4MjAzZSkKKyAgICAgICAgICAgIGNvZGUgPSAweDdlOyAvKiBPVkVSTElORSAqLwogI2VuZGlmCiAgICAgICAgIGVsc2UgSklTWDAyMDFfS19FTkNPREUoYywgY29kZSkKLSAgICAgICAgZWxzZSBVQ1M0SU5WQUxJRChjKQotICAgICAgICBlbHNlIGNvZGUgPSBOT0NIQVI7CisgICAgICAgIGVsc2UgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IE5PQ0hBUjsKIAogICAgICAgICBpZiAoY29kZSA8IDB4ODAgfHwgKGNvZGUgPj0gMHhhMSAmJiBjb2RlIDw9IDB4ZGYpKSB7Ci0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7CiAKLSAgICAgICAgICAgIE9VVDEoKHVuc2lnbmVkIGNoYXIpY29kZSkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVEJZVEUxKCh1bnNpZ25lZCBjaGFyKWNvZGUpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgaWYgKGNvZGUgPT0gTk9DSEFSKSB7Ci0gICAgICAgICAgICBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpOworICAgICAgICAgICAgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICAgICAgOwogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHhmZjNjKQogICAgICAgICAgICAgICAgIGNvZGUgPSAweDIxNDA7IC8qIEZVTEwtV0lEVEggUkVWRVJTRSBTT0xJRFVTICovCkBAIC00NzUsOSArNDk3LDkgQEAKICAgICAgICAgYzIgPSBjb2RlICYgMHhmZjsKICAgICAgICAgYzIgPSAoKChjMSAtIDB4MjEpICYgMSkgPyAweDVlIDogMCkgKyAoYzIgLSAweDIxKTsKICAgICAgICAgYzEgPSAoYzEgLSAweDIxKSA+PiAxOwotICAgICAgICBPVVQxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSkKLSAgICAgICAgT1VUMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgT1VUQllURTEoYzEgPCAweDFmID8gYzEgKyAweDgxIDogYzEgKyAweGMxKTsKKyAgICAgICAgT1VUQllURTIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTQ4NiwyMSArNTA4LDIxIEBACiBERUNPREVSKHNoaWZ0X2ppcykKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAjaWZkZWYgU1RSSUNUX0JVSUxECi0gICAgICAgIEpJU1gwMjAxX1JfREVDT0RFKGMsICoqb3V0YnVmKQorICAgICAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCB3cml0ZXIpCiAjZWxzZQotICAgICAgICBpZiAoYyA8IDB4ODApICoqb3V0YnVmID0gYzsKKyAgICAgICAgaWYgKGMgPCAweDgwKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKICNlbmRpZgotICAgICAgICBlbHNlIEpJU1gwMjAxX0tfREVDT0RFKGMsICoqb3V0YnVmKQorICAgICAgICBlbHNlIEpJU1gwMjAxX0tfREVDT0RFKGMsIHdyaXRlcikKICAgICAgICAgZWxzZSBpZiAoKGMgPj0gMHg4MSAmJiBjIDw9IDB4OWYpIHx8IChjID49IDB4ZTAgJiYgYyA8PSAweGVhKSl7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgaWYgKGMyIDwgMHg0MCB8fCAoYzIgPiAweDdlICYmIGMyIDwgMHg4MCkgfHwgYzIgPiAweGZjKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCkBAIC01MTIsMTMgKzUzNCwxNCBAQAogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgICAgIGlmIChjMSA9PSAweDIxICYmIGMyID09IDB4NDApIHsKICAgICAgICAgICAgICAgICAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwotICAgICAgICAgICAgICAgIE9VVDEoMHhmZjNjKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmYzYyk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsIGMxLCBjMikgewotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjMSwgYzIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtNTI3LDcgKzU1MCw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMSwgMSkgLyogSklTIFggMDIwMSAqLworICAgICAgICBORVhUX0lOKDEpOyAvKiBKSVMgWCAwMjAxICovCiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC01NDAsMzAgKzU2MywyOSBAQAogCiBFTkNPREVSKHNoaWZ0X2ppc18yMDA0KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZSA9IE5PQ0hBUjsKICAgICAgICAgaW50IGMxLCBjMjsKICAgICAgICAgUHlfc3NpemVfdCBpbnNpemU7CiAKICAgICAgICAgSklTWDAyMDFfRU5DT0RFKGMsIGNvZGUpCi0gICAgICAgIGVsc2UgREVDT0RFX1NVUlJPR0FURShjKQogCiAgICAgICAgIGlmIChjb2RlIDwgMHg4MCB8fCAoY29kZSA+PSAweGExICYmIGNvZGUgPD0gMHhkZikpIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljb2RlKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljb2RlKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIGluc2l6ZSA9IEdFVF9JTlNJWkUoYyk7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpbnNpemUgPSAxOwogCiAgICAgICAgIGlmIChjb2RlID09IE5PQ0hBUikgewogICAgICAgICAgICAgaWYgKGMgPD0gMHhmZmZmKSB7CiAgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9CTVAoY29kZSwgYykKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IE1VTFRJQykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVmdCA8IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA8IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBNQkVOQ19GTFVTSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBmaW5kX3BhaXJlbmNtYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1Y3MyX3QpYywgMCwKQEAgLTU3Niw4ICs1OTgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjaDIgPSBJTkNIQVIyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBmaW5kX3BhaXJlbmNtYXAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgSU4yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIGNoMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gREJDSU5WKSB7CkBAIC01OTMsMTcgKzYxNiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgICAgICAvKiBhYmFuZG9uIEpJUyBYIDAyMTIgY29kZXMgKi8KICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoYyA+PiAxNiA9PSBFTVBCQVNFID4+IDE2KSB7CiAgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9FTVAoY29kZSwgYykKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjJjB4ZmZmZik7Ci0gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gaW5zaXplOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjJjB4ZmZmZikpCisgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKQEAgLTYxMiwyMCArNjM4LDI3IEBACiAgICAgICAgIGMxID0gY29kZSA+PiA4OwogICAgICAgICBjMiA9IChjb2RlICYgMHhmZikgLSAweDIxOwogCi0gICAgICAgIGlmIChjMSAmIDB4ODApIHsgLyogUGxhbmUgMiAqLwotICAgICAgICAgICAgaWYgKGMxID49IDB4ZWUpIGMxIC09IDB4ODc7Ci0gICAgICAgICAgICBlbHNlIGlmIChjMSA+PSAweGFjIHx8IGMxID09IDB4YTgpIGMxIC09IDB4NDk7Ci0gICAgICAgICAgICBlbHNlIGMxIC09IDB4NDM7CisgICAgICAgIGlmIChjMSAmIDB4ODApIHsKKyAgICAgICAgICAgIC8qIFBsYW5lIDIgKi8KKyAgICAgICAgICAgIGlmIChjMSA+PSAweGVlKQorICAgICAgICAgICAgICAgIGMxIC09IDB4ODc7CisgICAgICAgICAgICBlbHNlIGlmIChjMSA+PSAweGFjIHx8IGMxID09IDB4YTgpCisgICAgICAgICAgICAgICAgYzEgLT0gMHg0OTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjMSAtPSAweDQzOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgLyogUGxhbmUgMSAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIFBsYW5lIDEgKi8KICAgICAgICAgICAgIGMxIC09IDB4MjE7CisgICAgICAgIH0KIAotICAgICAgICBpZiAoYzEgJiAxKSBjMiArPSAweDVlOworICAgICAgICBpZiAoYzEgJiAxKQorICAgICAgICAgICAgYzIgKz0gMHg1ZTsKICAgICAgICAgYzEgPj49IDE7Ci0gICAgICAgIE9VVDEoYzEgKyAoYzEgPCAweDFmID8gMHg4MSA6IDB4YzEpKQotICAgICAgICBPVVQyKGMyICsgKGMyIDwgMHgzZiA/IDB4NDAgOiAweDQxKSkKKyAgICAgICAgT1VUQllURTEoYzEgKyAoYzEgPCAweDFmID8gMHg4MSA6IDB4YzEpKTsKKyAgICAgICAgT1VUQllURTIoYzIgKyAoYzIgPCAweDNmID8gMHg0MCA6IDB4NDEpKTsKIAotICAgICAgICBORVhUKGluc2l6ZSwgMikKKyAgICAgICAgTkVYVChpbnNpemUsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNjM0LDE2ICs2NjcsMTUgQEAKIERFQ09ERVIoc2hpZnRfamlzXzIwMDQpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOwogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCi0gICAgICAgIEpJU1gwMjAxX0RFQ09ERShjLCAqKm91dGJ1ZikKKyAgICAgICAgSklTWDAyMDFfREVDT0RFKGMsIHdyaXRlcikKICAgICAgICAgZWxzZSBpZiAoKGMgPj0gMHg4MSAmJiBjIDw9IDB4OWYpIHx8IChjID49IDB4ZTAgJiYgYyA8PSAweGZjKSl7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKLSAgICAgICAgICAgIHVjczRfdCBjb2RlOworICAgICAgICAgICAgUHlfVUNTNCBjb2RlLCBkZWNvZGVkOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPCAweDQwIHx8IChjMiA+IDB4N2UgJiYgYzIgPCAweDgwKSB8fCBjMiA+IDB4ZmMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKQEAgLTY1NCw1MCArNjg2LDQ3IEBACiAKICAgICAgICAgICAgIGlmIChjMSA8IDB4NWUpIHsgLyogUGxhbmUgMSAqLwogICAgICAgICAgICAgICAgIGMxICs9IDB4MjE7Ci0gICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEoKipvdXRidWYsCisgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEod3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgKipvdXRidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgxKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIGNvZGUsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoRU1QQkFTRSB8IGNvZGUpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCBjb2RlLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEUyKGNvZGUgPj4gMTYsIGNvZGUgJiAweGZmZmYpCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDIpCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgZGVjb2RlZCwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKEVNUEJBU0UgfCBjb2RlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIGNvZGUsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIyKGNvZGUgPj4gMTYsIGNvZGUgJiAweGZmZmYpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgTkVYVF9JTigyKQorICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsgLyogUGxhbmUgMiAqLwotICAgICAgICAgICAgICAgIGlmIChjMSA+PSAweDY3KSBjMSArPSAweDA3OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMxID49IDB4NjMgfHwgYzEgPT0gMHg1ZikgYzEgLT0gMHgzNzsKLSAgICAgICAgICAgICAgICBlbHNlIGMxIC09IDB4M2Q7CisgICAgICAgICAgICAgICAgaWYgKGMxID49IDB4NjcpCisgICAgICAgICAgICAgICAgICAgIGMxICs9IDB4MDc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHg2MyB8fCBjMSA9PSAweDVmKQorICAgICAgICAgICAgICAgICAgICBjMSAtPSAweDM3OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYzEgLT0gMHgzZDsKIAotICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKCoqb3V0YnVmLAorICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEsIGMyKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgKipvdXRidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxLCBjMikgOwotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChFTVBCQVNFIHwgY29kZSkKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIGRlY29kZWQsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzEsIGMyKSkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKEVNUEJBU0UgfCBjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDEsIDEpIC8qIEpJUyBYIDAyMDEgKi8KKyAgICAgICAgTkVYVF9JTigxKTsgLyogSklTIFggMDIwMSAqLwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19rci5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19rci5jCmluZGV4IGY1Njk3ZGQuLjFhZDQxYTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKQEAgLTMzLDUxICszMyw1NiBAQAogCiBFTkNPREVSKGV1Y19rcikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKChjb2RlICYgMHg4MDAwKSA9PSAwKSB7CiAgICAgICAgICAgICAvKiBLUyBYIDEwMDEgY29kZWQgY2hhcmFjdGVyICovCi0gICAgICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIHsgICAgICAgICAgLyogTWFwcGluZyBpcyBmb3VuZCBpbiBDUDk0OSBleHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICogYnV0IHdlIGVuY29kZSBpdCBpbiBLUyBYIDEwMDE6MTk5OCBBbm5leCAzLAotICAgICAgICAgICAgICAgICAqIG1ha2UtdXAgc2VxdWVuY2UgZm9yIEVVQy1LUi4gKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNYXBwaW5nIGlzIGZvdW5kIGluIENQOTQ5IGV4dGVuc2lvbiwKKyAgICAgICAgICAgICAgIGJ1dCB3ZSBlbmNvZGUgaXQgaW4gS1MgWCAxMDAxOjE5OTggQW5uZXggMywKKyAgICAgICAgICAgICAgIG1ha2UtdXAgc2VxdWVuY2UgZm9yIEVVQy1LUi4gKi8KIAotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoOCkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDgpOwogCiAgICAgICAgICAgICAvKiBzeWxsYWJsZSBjb21wb3NpdGlvbiBwcmVjZWRlbmNlICovCi0gICAgICAgICAgICBPVVQxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUMihFVUNLUl9KQU1PX0ZJTExFUikKKyAgICAgICAgICAgIE9VVEJZVEUxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKEVVQ0tSX0pBTU9fRklMTEVSKTsKIAogICAgICAgICAgICAgLyogQWxsIGNvZGVwb2ludHMgaW4gQ1A5NDkgZXh0ZW5zaW9uIGFyZSBpbiB1bmljb2RlCiAgICAgICAgICAgICAgKiBIYW5ndWwgU3lsbGFibGUgYXJlYS4gKi8KICAgICAgICAgICAgIGFzc2VydCgweGFjMDAgPD0gYyAmJiBjIDw9IDB4ZDdhMyk7CiAgICAgICAgICAgICBjIC09IDB4YWMwMDsKIAotICAgICAgICAgICAgT1VUMyhFVUNLUl9KQU1PX0ZJUlNUQllURSkKLSAgICAgICAgICAgIE9VVDQodTJjZ2tfY2hvc2VvbmdbYyAvIDU4OF0pCi0gICAgICAgICAgICBORVhUX09VVCg0KQorICAgICAgICAgICAgT1VUQllURTMoRVVDS1JfSkFNT19GSVJTVEJZVEUpOworICAgICAgICAgICAgT1VUQllURTQodTJjZ2tfY2hvc2VvbmdbYyAvIDU4OF0pOworICAgICAgICAgICAgTkVYVF9PVVQoNCk7CiAKLSAgICAgICAgICAgIE9VVDEoRVVDS1JfSkFNT19GSVJTVEJZVEUpCi0gICAgICAgICAgICBPVVQyKHUyY2drX2p1bmdzZW9uZ1soYyAvIDI4KSAlIDIxXSkKLSAgICAgICAgICAgIE9VVDMoRVVDS1JfSkFNT19GSVJTVEJZVEUpCi0gICAgICAgICAgICBPVVQ0KHUyY2drX2pvbmdzZW9uZ1tjICUgMjhdKQotICAgICAgICAgICAgTkVYVCgxLCA0KQorICAgICAgICAgICAgT1VUQllURTEoRVVDS1JfSkFNT19GSVJTVEJZVEUpOworICAgICAgICAgICAgT1VUQllURTIodTJjZ2tfanVuZ3Nlb25nWyhjIC8gMjgpICUgMjFdKTsKKyAgICAgICAgICAgIE9VVEJZVEUzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEU0KHUyY2drX2pvbmdzZW9uZ1tjICUgMjhdKTsKKyAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwMiwyNCArMTA3LDIzIEBACiBERUNPREVSKGV1Y19rcikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAogICAgICAgICBpZiAoYyA9PSBFVUNLUl9KQU1PX0ZJUlNUQllURSAmJgotICAgICAgICAgICAgSU4yID09IEVVQ0tSX0pBTU9fRklMTEVSKSB7CisgICAgICAgICAgICBJTkJZVEUyID09IEVVQ0tSX0pBTU9fRklMTEVSKSB7CiAgICAgICAgICAgICAvKiBLUyBYIDEwMDE6MTk5OCBBbm5leCAzIG1ha2UtdXAgc2VxdWVuY2UgKi8KICAgICAgICAgICAgIERCQ0hBUiBjaG8sIGp1bmcsIGpvbmc7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoOCkKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoOCk7CiAgICAgICAgICAgICBpZiAoKCppbmJ1ZilbMl0gIT0gRVVDS1JfSkFNT19GSVJTVEJZVEUgfHwKICAgICAgICAgICAgICAgICAoKmluYnVmKVs0XSAhPSBFVUNLUl9KQU1PX0ZJUlNUQllURSB8fAogICAgICAgICAgICAgICAgICgqaW5idWYpWzZdICE9IEVVQ0tSX0pBTU9fRklSU1RCWVRFKQpAQCAtMTQ1LDExICsxNDksMTIgQEAKICAgICAgICAgICAgIGlmIChjaG8gPT0gTk9ORSB8fCBqdW5nID09IE5PTkUgfHwgam9uZyA9PSBOT05FKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgICAgICBPVVQxKDB4YWMwMCArIGNobyo1ODggKyBqdW5nKjI4ICsgam9uZyk7Ci0gICAgICAgICAgICBORVhUKDgsIDEpCisgICAgICAgICAgICBPVVRDSEFSKDB4YWMwMCArIGNobyo1ODggKyBqdW5nKjI4ICsgam9uZyk7CisgICAgICAgICAgICBORVhUX0lOKDgpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVFJZTUFQX0RFQyhrc3gxMDAxLCAqKm91dGJ1ZiwgYyBeIDB4ODAsIElOMiBeIDB4ODApIHsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhrc3gxMDAxLCBkZWNvZGVkLCBjIF4gMHg4MCwgSU5CWVRFMiBeIDB4ODApKSB7CisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTE2NiwyNyArMTcxLDMxIEBACiAKIEVOQ09ERVIoY3A5NDkpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQotICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKLSAgICAgICAgICAgIE9VVDIoY29kZSAmIDB4RkYpIC8qIE1TQiBzZXQ6IENQOTQ5ICovCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykpCisgICAgICAgICAgICA7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApIC8qIE1TQiB1bnNldDoga3MgeCAxMDAxICovCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CisgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQorICAgICAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOyAvKiBNU0Igc2V0OiBDUDk0OSAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7IC8qIE1TQiB1bnNldDoga3MgeCAxMDAxICovCisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xOTUsMjIgKzIwNCwyNCBAQAogREVDT0RFUihjcDk0OSkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgVFJZTUFQX0RFQyhrc3gxMDAxLCAqKm91dGJ1ZiwgYyBeIDB4ODAsIElOMiBeIDB4ODApOwotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoY3A5NDlleHQsICoqb3V0YnVmLCBjLCBJTjIpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhrc3gxMDAxLCBkZWNvZGVkLCBjIF4gMHg4MCwgSU5CWVRFMiBeIDB4ODApKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhjcDk0OWV4dCwgZGVjb2RlZCwgYywgSU5CWVRFMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0yNTAsMTggKzI2MSwyMCBAQAogCiBFTkNPREVSKGpvaGFiKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIGlmIChjID49IDB4YWMwMCAmJiBjIDw9IDB4ZDdhMykgewogICAgICAgICAgICAgYyAtPSAweGFjMDA7CkBAIC0yNzIsNyArMjg1LDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4MzEzMSAmJiBjIDw9IDB4MzE2MykKICAgICAgICAgICAgIGNvZGUgPSB1MmpvaGFiamFtb1tjIC0gMHgzMTMxXTsKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMiwgdDI7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0MTsKIApAQCAtMjg1LDkgKzI5OCw5IEBACiAgICAgICAgICAgICAgICAgdDEgPSAoYzEgPCAweDRhID8gKGMxIC0gMHgyMSArIDB4MWIyKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjMSAtIDB4MjEgKyAweDE5NykpOwogICAgICAgICAgICAgICAgIHQyID0gKCh0MSAmIDEpID8gMHg1ZSA6IDApICsgKGMyIC0gMHgyMSk7Ci0gICAgICAgICAgICAgICAgT1VUMSh0MSA+PiAxKQotICAgICAgICAgICAgICAgIE9VVDIodDIgPCAweDRlID8gdDIgKyAweDMxIDogdDIgKyAweDQzKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgICAgICBPVVRCWVRFMSh0MSA+PiAxKTsKKyAgICAgICAgICAgICAgICBPVVRCWVRFMih0MiA8IDB4NGUgPyB0MiArIDB4MzEgOiB0MiArIDB4NDMpOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC0yOTYsOSArMzA5LDkgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgIE9VVDIoY29kZSAmIDB4ZmYpCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4ZmYpOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMzQ4LDE4ICszNjEsMTcgQEAKIERFQ09ERVIoam9oYWIpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAgICBjID0gSU4xLCBjMjsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxLCBjMjsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgYzIgPSBJTjI7CisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGMyID0gSU5CWVRFMjsKIAogICAgICAgICBpZiAoYyA8IDB4ZDgpIHsKICAgICAgICAgICAgIC8qIGpvaGFiIGhhbmd1bCAqLwpAQCAtMzgxLDMzICszOTMsMzMgQEAKICAgICAgICAgICAgIGlmIChpX2NobyA9PSBGSUxMKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlfanVuZyA9PSBGSUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpX2pvbmcgPT0gRklMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweDMwMDApOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVQxKDB4MzEwMCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19qb25nc2VvbmdbY19qb25nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMTAwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fam9uZ3Nlb25nW2Nfam9uZ10pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlfam9uZyA9PSBGSUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgT1VUMSgweDMxMDAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fanVuZ3Nlb25nW2NfanVuZ10pCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4MzEwMCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2p1bmdzZW9uZ1tjX2p1bmddKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoaV9qdW5nID09IEZJTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlfam9uZyA9PSBGSUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgT1VUMSgweDMxMDAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fY2hvc2VvbmdbY19jaG9dKQorICAgICAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweDMxMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19jaG9zZW9uZ1tjX2Nob10pOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBPVVQxKDB4YWMwMCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgaV9jaG8gKiA1ODggKwotICAgICAgICAgICAgICAgICAgICAgICAgIGlfanVuZyAqIDI4ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAoaV9qb25nID09IEZJTEwgPyAwIDogaV9qb25nKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweGFjMDAgKworICAgICAgICAgICAgICAgICAgICAgICAgaV9jaG8gKiA1ODggKworICAgICAgICAgICAgICAgICAgICAgICAgaV9qdW5nICogMjggKworICAgICAgICAgICAgICAgICAgICAgICAgKGlfam9uZyA9PSBGSUxMID8gMCA6IGlfam9uZykpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIEtTIFggMTAwMSBleGNlcHQgaGFuZ3VsIGphbW9zIGFuZCBzeWxsYWJsZXMgKi8KICAgICAgICAgICAgIGlmIChjID09IDB4ZGYgfHwgYyA+IDB4ZjkgfHwKQEAgLTQyNCw5ICs0MzYsMTMgQEAKICAgICAgICAgICAgICAgICB0MSA9IHQxICsgKHQyIDwgMHg1ZSA/IDAgOiAxKSArIDB4MjE7CiAgICAgICAgICAgICAgICAgdDIgPSAodDIgPCAweDVlID8gdDIgOiB0MiAtIDB4NWUpICsgMHgyMTsKIAotICAgICAgICAgICAgICAgIFRSWU1BUF9ERUMoa3N4MTAwMSwgKipvdXRidWYsIHQxLCB0Mik7Ci0gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgZGVjb2RlZCwgdDEsIHQyKSkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc190dy5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc190dy5jCmluZGV4IDkxNjI5OGQuLjcyMmIyNmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX3R3LmMKQEAgLTEzLDI2ICsxMywzMCBAQAogCiBFTkNPREVSKGJpZzUpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gKippbmJ1ZjsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7CiAgICAgICAgICAgICAqKm91dGJ1ZiA9ICh1bnNpZ25lZCBjaGFyKWM7Ci0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweEZGKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIGlmIChUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhGRik7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC00MSwxOSArNDUsMTkgQEAKIERFQ09ERVIoYmlnNSkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgVFJZTUFQX0RFQyhiaWc1LCAqKm91dGJ1ZiwgYywgSU4yKSB7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfREVDKGJpZzUsIGRlY29kZWQsIGMsIElOQllURTIpKSB7CisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHJldHVybiAxOwogICAgIH0KQEAgLTY4LDI1ICs3MiwzMCBAQAogCiBFTkNPREVSKGNwOTUwKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGNwOTUwZXh0LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweEZGKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk1MGV4dCwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweEZGKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTk1LDIzICsxMDQsMjUgQEAKIERFQ09ERVIoY3A5NTApCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKLSAgICAgICAgVFJZTUFQX0RFQyhjcDk1MGV4dCwgKipvdXRidWYsIGMsIElOMik7Ci0gICAgICAgIGVsc2UgVFJZTUFQX0RFQyhiaWc1LCAqKm91dGJ1ZiwgYywgSU4yKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoY3A5NTBleHQsIGRlY29kZWQsIGMsIElOQllURTIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhiaWc1LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oIGIvTW9kdWxlcy9jamtjb2RlY3MvYWxnX2ppc3gwMjAxLmgKaW5kZXggMGJjN2RiNS4uMzAzNGI1YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvYWxnX2ppc3gwMjAxLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvYWxnX2ppc3gwMjAxLmgKQEAgLTEsMjQgKzEsNjUgQEAKICNkZWZpbmUgSklTWDAyMDFfUl9FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPCAweDgwICYmIChjKSAhPSAweDVjICYmIChjKSAhPSAweDdlKSAgICAgICBcCisgICAgaWYgKChjKSA8IDB4ODAgJiYgKGMpICE9IDB4NWMgJiYgKGMpICE9IDB4N2UpIHsgICAgIFwKICAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDAwYTUpIChhc3NpKSA9IDB4NWM7ICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4MjAzZSkgKGFzc2kpID0gMHg3ZTsKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDAwYTUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4NWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDIwM2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4N2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKICNkZWZpbmUgSklTWDAyMDFfS19FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPj0gMHhmZjYxICYmIChjKSA8PSAweGZmOWYpICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChhc3NpKSA9IChjKSAtIDB4ZmVjMDsKKyAgICBpZiAoKGMpID49IDB4ZmY2MSAmJiAoYykgPD0gMHhmZjlmKSB7ICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAoYykgLSAweGZlYzA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZGVmaW5lIEpJU1gwMjAxX0VOQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBKSVNYMDIwMV9SX0VOQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgSklTWDAyMDFfS19FTkNPREUoYywgYXNzaSkKIAotI2RlZmluZSBKSVNYMDIwMV9SX0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA8IDB4NWMpIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHg1YykgKGFzc2kpID0gMHgwMGE1OyAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA8IDB4N2UpIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4N2UpIChhc3NpKSA9IDB4MjAzZTsgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHg3ZikgKGFzc2kpID0gMHg3ZjsKLSNkZWZpbmUgSklTWDAyMDFfS19ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPj0gMHhhMSAmJiAoYykgPD0gMHhkZikgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGFzc2kpID0gMHhmZWMwICsgKGMpOwotI2RlZmluZSBKSVNYMDIwMV9ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgSklTWDAyMDFfUl9ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIEpJU1gwMjAxX0tfREVDT0RFKGMsIGFzc2kpCisjZGVmaW5lIEpJU1gwMjAxX1JfREVDT0RFX0NIQVIoYywgYXNzaSkgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpIDwgMHg1YykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg1YykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDAwYTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPCAweDdlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDIwM2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg3ZikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDdmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIEpJU1gwMjAxX1JfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpIDwgMHg1YykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg1YykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MDBhNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPCAweDdlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg3ZikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4N2YpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIEpJU1gwMjAxX0tfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpID49IDB4YTEgJiYgKGMpIDw9IDB4ZGYpIHsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4ZmVjMCArIChjKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2RlZmluZSBKSVNYMDIwMV9LX0RFQ09ERV9DSEFSKGMsIGFzc2kpICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA+PSAweGExICYmIChjKSA8PSAweGRmKSB7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhmZWMwICsgKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyNkZWZpbmUgSklTWDAyMDFfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEpJU1gwMjAxX1JfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCB3cml0ZXIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaCBiL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oCmluZGV4IGFiMDY4MmEuLjI1YmFiNDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oCkBAIC0zMyw3ICszMyw3IEBACiB0eXBlZGVmIHN0cnVjdCBkYmNzX2luZGV4IGRlY29kZV9tYXA7CiAKIHN0cnVjdCB3aWRlZGJjc19pbmRleCB7Ci0gICAgY29uc3QgdWNzNF90ICptYXA7CisgICAgY29uc3QgUHlfVUNTNCAqbWFwOwogICAgIHVuc2lnbmVkIGNoYXIgYm90dG9tLCB0b3A7CiB9OwogdHlwZWRlZiBzdHJ1Y3Qgd2lkZWRiY3NfaW5kZXggd2lkZWRlY29kZV9tYXA7CkBAIC01Niw3ICs1Niw3IEBACiB9OwogCiBzdHJ1Y3QgcGFpcl9lbmNvZGVtYXAgewotICAgIHVjczRfdCB1bmlzZXE7CisgICAgUHlfVUNTNCB1bmlzZXE7CiAgICAgREJDSEFSIGNvZGU7CiB9OwogCkBAIC03Miw3ICs3Miw4IEBACiAjZGVmaW5lIEVOQ09ERVIoZW5jb2RpbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgc3RhdGljIFB5X3NzaXplX3QgZW5jb2RpbmcjI19lbmNvZGUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwgY29uc3Qgdm9pZCAqY29uZmlnLCAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKippbmJ1ZiwgUHlfc3NpemVfdCBpbmxlZnQsICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCBraW5kLCB2b2lkICpkYXRhLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9zc2l6ZV90ICppbnBvcywgUHlfc3NpemVfdCBpbmxlbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB1bnNpZ25lZCBjaGFyICoqb3V0YnVmLCBQeV9zc2l6ZV90IG91dGxlZnQsIGludCBmbGFncykKICNkZWZpbmUgRU5DT0RFUl9SRVNFVChlbmNvZGluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2VuY29kZV9yZXNldCggICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTg2LDEyMCArODcsMTE4IEBACiAgICAgc3RhdGljIFB5X3NzaXplX3QgZW5jb2RpbmcjI19kZWNvZGUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwgY29uc3Qgdm9pZCAqY29uZmlnLCAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbmJ1ZiwgUHlfc3NpemVfdCBpbmxlZnQsICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5X1VOSUNPREUgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCkKKyAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogI2RlZmluZSBERUNPREVSX1JFU0VUKGVuY29kaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHN0YXRpYyBQeV9zc2l6ZV90IGVuY29kaW5nIyNfZGVjb2RlX3Jlc2V0KCAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsIGNvbnN0IHZvaWQgKmNvbmZpZykKIAotI2lmIFB5X1VOSUNPREVfU0laRSA9PSA0Ci0jZGVmaW5lIFVDUzRJTlZBTElEKGNvZGUpICAgICAgIFwKLSAgICBpZiAoKGNvZGUpID4gMHhGRkZGKSAgICAgICAgXAotICAgIHJldHVybiAxOwotI2Vsc2UKLSNkZWZpbmUgVUNTNElOVkFMSUQoY29kZSkgICAgICAgXAotICAgIGlmICgwKSA7Ci0jZW5kaWYKLQogI2RlZmluZSBORVhUX0lOKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgqaW5idWYpICs9IChpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChpbmxlZnQpIC09IChpKTsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCppbmJ1ZikgKz0gKGkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGlubGVmdCkgLT0gKGkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBORVhUX0lOQ0hBUihpKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKmlucG9zKSArPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAjZGVmaW5lIE5FWFRfT1VUKG8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpICs9IChvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKG91dGxlZnQpIC09IChvKTsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpICs9IChvKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKG91dGxlZnQpIC09IChvKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogI2RlZmluZSBORVhUKGksIG8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE5FWFRfSU4oaSkgTkVYVF9PVVQobykKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTkVYVF9JTkNIQVIoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTkVYVF9PVVQobyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJFUVVJUkVfSU5CVUYobikgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGlubGVmdCA8IChuKSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChpbmxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOyAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwogI2RlZmluZSBSRVFVSVJFX09VVEJVRihuKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChvdXRsZWZ0IDwgKG4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gTUJFUlJfVE9PU01BTEw7CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChvdXRsZWZ0IDwgKG4pKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PU01BTEw7ICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBJTjEgKCgqaW5idWYpWzBdKQotI2RlZmluZSBJTjIgKCgqaW5idWYpWzFdKQotI2RlZmluZSBJTjMgKCgqaW5idWYpWzJdKQotI2RlZmluZSBJTjQgKCgqaW5idWYpWzNdKQorI2RlZmluZSBJTkJZVEUxICgoKmluYnVmKVswXSkKKyNkZWZpbmUgSU5CWVRFMiAoKCppbmJ1ZilbMV0pCisjZGVmaW5lIElOQllURTMgKCgqaW5idWYpWzJdKQorI2RlZmluZSBJTkJZVEU0ICgoKmluYnVmKVszXSkKIAotI2RlZmluZSBPVVQxKGMpICgoKm91dGJ1ZilbMF0pID0gKGMpOwotI2RlZmluZSBPVVQyKGMpICgoKm91dGJ1ZilbMV0pID0gKGMpOwotI2RlZmluZSBPVVQzKGMpICgoKm91dGJ1ZilbMl0pID0gKGMpOwotI2RlZmluZSBPVVQ0KGMpICgoKm91dGJ1ZilbM10pID0gKGMpOworI2RlZmluZSBJTkNIQVIxIChQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCAqaW5wb3MpKQorI2RlZmluZSBJTkNIQVIyIChQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCAqaW5wb3MgKyAxKSkKIAotI2RlZmluZSBXUklURTEoYzEpICAgICAgICAgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMSkgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOwotI2RlZmluZSBXUklURTIoYzEsIGMyKSAgICAgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMikgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsxXSA9IChjMik7Ci0jZGVmaW5lIFdSSVRFMyhjMSwgYzIsIGMzKSAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigzKSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOwotI2RlZmluZSBXUklURTQoYzEsIGMyLCBjMywgYzQpICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoNCkgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzJdID0gKGMzKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbM10gPSAoYzQpOworI2RlZmluZSBPVVRDSEFSKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIod3JpdGVyLCAoYykpIDwgMCkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE1CRVJSX0VYQ0VQVElPTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSMgZGVmaW5lIFdSSVRFVUNTNChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IDB4ZDgwMCArICgoKGMpIC0gMHgxMDAwMCkgPj4gMTApOyAgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMV0gPSAweGRjMDAgKyAoKChjKSAtIDB4MTAwMDApICYgMHgzZmYpOyAgICAgICAgICBcCi0gICAgTkVYVF9PVVQoMikKLSNlbHNlCi0jIGRlZmluZSBXUklURVVDUzQoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqKm91dGJ1ZiA9IChQeV9VTklDT0RFKShjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTkVYVF9PVVQoMSkKLSNlbmRpZgorI2RlZmluZSBPVVRDSEFSMihjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9VQ1M0IF9jMSA9IChjMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9VQ1M0IF9jMiA9IChjMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgMiwgUHlfTUFYKF9jMSwgYzIpKSA8IDApICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE1CRVJSX0VYQ0VQVElPTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBfYzEpOyAgICAgXAorICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zICsgMSwgX2MyKTsgXAorICAgICAgICB3cml0ZXItPnBvcyArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgT1VUQllURTEoYykgXAorICAgIGRvIHsgKCgqb3V0YnVmKVswXSkgPSAoYyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIE9VVEJZVEUyKGMpIFwKKyAgICBkbyB7ICgoKm91dGJ1ZilbMV0pID0gKGMpOyB9IHdoaWxlICgwKQorI2RlZmluZSBPVVRCWVRFMyhjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzJdKSA9IChjKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgT1VUQllURTQoYykgXAorICAgIGRvIHsgKCgqb3V0YnVmKVszXSkgPSAoYyk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgV1JJVEVCWVRFMShjMSkgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7ICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBXUklURUJZVEUyKGMxLCBjMikgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFdSSVRFQllURTMoYzEsIGMyLCBjMykgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDMpOyAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsyXSA9IChjMyk7ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV1JJVEVCWVRFNChjMSwgYzIsIGMzLCBjNCkgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCk7ICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzJdID0gKGMzKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzNdID0gKGM0KTsgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIF9UUllNQVBfRU5DKG0sIGFzc2ksIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICgobSktPm1hcCAhPSBOVUxMICYmICh2YWwpID49IChtKS0+Ym90dG9tICYmICAgICAgICAgICAgICAgIFwKICAgICAgICAgKHZhbCk8PSAobSktPnRvcCAmJiAoKGFzc2kpID0gKG0pLT5tYXBbKHZhbCkgLSAgICAgICAgICBcCiAgICAgICAgIChtKS0+Ym90dG9tXSkgIT0gTk9DSEFSKQotI2RlZmluZSBUUllNQVBfRU5DX0NPTkQoY2hhcnNldCwgYXNzaSwgdW5pKSAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgVFJZTUFQX0VOQyhjaGFyc2V0LCBhc3NpLCB1bmkpICAgICAgICAgICAgICAgICAgICAgXAogICAgIF9UUllNQVBfRU5DKCZjaGFyc2V0IyNfZW5jbWFwWyh1bmkpID4+IDhdLCBhc3NpLCAodW5pKSAmIDB4ZmYpCi0jZGVmaW5lIFRSWU1BUF9FTkMoY2hhcnNldCwgYXNzaSwgdW5pKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIFRSWU1BUF9FTkNfQ09ORChjaGFyc2V0LCBhc3NpLCB1bmkpCiAKLSNkZWZpbmUgX1RSWU1BUF9ERUMobSwgYXNzaSwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKChtKS0+bWFwICE9IE5VTEwgJiYgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgXAotICAgICAgICAodmFsKTw9IChtKS0+dG9wICYmICgoYXNzaSkgPSAobSktPm1hcFsodmFsKSAtICAgICAgICAgIFwKLSAgICAgICAgKG0pLT5ib3R0b21dKSAhPSBVTklJTlYpCi0jZGVmaW5lIFRSWU1BUF9ERUMoY2hhcnNldCwgYXNzaSwgYzEsIGMyKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIF9UUllNQVBfREVDKCZjaGFyc2V0IyNfZGVjbWFwW2MxXSwgYXNzaSwgYzIpCi0KLSNkZWZpbmUgX1RSWU1BUF9FTkNfTVBMQU5FKG0sIGFzc3BsYW5lLCBhc3NoaSwgYXNzbG8sIHZhbCkgICAgICBcCi0gICAgKChtKS0+bWFwICE9IE5VTEwgJiYgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgXAotICAgICAgICAodmFsKTw9IChtKS0+dG9wICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKChhc3NwbGFuZSkgPSAobSktPm1hcFsoKHZhbCkgLSAobSktPmJvdHRvbSkqM10pICE9IDAgJiYgXAotICAgICAgICAoKChhc3NoaSkgPSAobSktPm1hcFsoKHZhbCkgLSAobSktPmJvdHRvbSkqMyArIDFdKSwgMSkgJiYgXAotICAgICAgICAoKChhc3NsbykgPSAobSktPm1hcFsoKHZhbCkgLSAobSktPmJvdHRvbSkqMyArIDJdKSwgMSkpCi0jZGVmaW5lIFRSWU1BUF9FTkNfTVBMQU5FKGNoYXJzZXQsIGFzc3BsYW5lLCBhc3NoaSwgYXNzbG8sIHVuaSkgXAotICAgIGlmIF9UUllNQVBfRU5DX01QTEFORSgmY2hhcnNldCMjX2VuY21hcFsodW5pKSA+PiA4XSwgXAotICAgICAgICAgICAgICAgICAgICAgICBhc3NwbGFuZSwgYXNzaGksIGFzc2xvLCAodW5pKSAmIDB4ZmYpCi0jZGVmaW5lIFRSWU1BUF9ERUNfTVBMQU5FKGNoYXJzZXQsIGFzc2ksIHBsYW5lLCBjMSwgYzIpICAgICAgICAgXAotICAgIGlmIF9UUllNQVBfREVDKCZjaGFyc2V0IyNfZGVjbWFwW3BsYW5lXVtjMV0sIGFzc2ksIGMyKQotCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSNkZWZpbmUgREVDT0RFX1NVUlJPR0FURShjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGMgPj4gMTAgPT0gMHhkODAwID4+IDEwKSB7IC8qIGhpZ2ggc3Vycm9nYXRlICovICAgICAgICAgXAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKElOMiA+PiAxMCA9PSAweGRjMDAgPj4gMTApIHsgLyogbG93IHN1cnJvZ2F0ZSAqLyBcCi0gICAgICAgICAgICBjID0gMHgxMDAwMCArICgodWNzNF90KShjIC0gMHhkODAwKSA8PCAxMCkgKyBcCi0gICAgICAgICAgICAoKHVjczRfdCkoSU4yKSAtIDB4ZGMwMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9Ci0jZGVmaW5lIEdFVF9JTlNJWkUoYykgICAoKGMpID4gMHhmZmZmID8gMiA6IDEpCi0jZWxzZQotI2RlZmluZSBERUNPREVfU1VSUk9HQVRFKGMpIHs7fQotI2RlZmluZSBHRVRfSU5TSVpFKGMpICAgMQotI2VuZGlmCisjZGVmaW5lIF9UUllNQVBfREVDKG0sIGFzc2ksIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICh2YWwpID49IChtKS0+Ym90dG9tICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAodmFsKTw9IChtKS0+dG9wICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKChhc3NpKSA9IChtKS0+bWFwWyh2YWwpIC0gKG0pLT5ib3R0b21dKSAhPSBVTklJTlYpCisjZGVmaW5lIFRSWU1BUF9ERUMoY2hhcnNldCwgYXNzaSwgYzEsIGMyKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfVFJZTUFQX0RFQygmY2hhcnNldCMjX2RlY21hcFtjMV0sIGFzc2ksIGMyKQogCiAjZGVmaW5lIEJFR0lOX01BUFBJTkdTX0xJU1Qgc3RhdGljIGNvbnN0IHN0cnVjdCBkYmNzX21hcCBfbWFwcGluZ19saXN0W10gPSB7CiAjZGVmaW5lIE1BUFBJTkdfRU5DT05MWShlbmMpIHsjZW5jLCAodm9pZCopZW5jIyNfZW5jbWFwLCBOVUxMfSwKQEAgLTMyNCw3ICszMjMsNyBAQAogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwYWlyX2VuY29kZW1hcCAqaGF5c3RhY2ssIGludCBoYXlzdGFja3NpemUpCiB7CiAgICAgaW50IHBvcywgbWluLCBtYXg7Ci0gICAgdWNzNF90IHZhbHVlID0gYm9keSA8PCAxNiB8IG1vZGlmaWVyOworICAgIFB5X1VDUzQgdmFsdWUgPSBib2R5IDw8IDE2IHwgbW9kaWZpZXI7CiAKICAgICBtaW4gPSAwOwogICAgIG1heCA9IGhheXN0YWNrc2l6ZTsKQEAgLTM1OSw3ICszNTgsNyBAQAogewogICAgIFB5T2JqZWN0ICpvLCAqbW9kOwogCi0gICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKChjaGFyICopbW9kbmFtZSk7CisgICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKG1vZG5hbWUpOwogICAgIGlmIChtb2QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9lbXVfamlzeDAyMTNfMjAwMC5oIGIvTW9kdWxlcy9jamtjb2RlY3MvZW11X2ppc3gwMjEzXzIwMDAuaAppbmRleCA0MjI3ZmIyLi5hNWQ1YTcwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9lbXVfamlzeDAyMTNfMjAwMC5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmgKQEAgLTIsNyArMiw3IEBACiAgKiBzdGFuZGFyZHMuICovCiAKICNpZm5kZWYgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElECi0jZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRCAxCisjICBkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEIDEKICNlbmRpZgogCiAjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGFzc2ksIGMpICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMSwxNyArMTEsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NTI1RCB8fCAoYykgPT0gMHg1NDFFIHx8ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NTY1MyB8fCAoYykgPT0gMHg1OUY4IHx8ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NUM1QiB8fCAoYykgPT0gMHg1RTc3IHx8ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NzYyNiB8fCAoYykgPT0gMHg3RTZCKSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NzYyNiB8fCAoYykgPT0gMHg3RTZCKSkgeyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRDsgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDlCMUQpICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDlCMUQpIHsgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKGFzc2kpID0gMHg4MDAwIHwgMHg3ZDNiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKICNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9FTVAoYXNzaSwgYykgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYykgPT0gMHgyMEI5RikgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRDsKKyAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYykgPT0gMHgyMEI5RikgeyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKICNpZm5kZWYgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElECi0jZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRCAyCisjICBkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElEIDIKICNlbmRpZgogCiAjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKGFzc2ksIGMxLCBjMikgICAgICAgICAgICAgICBcCkBAIC0zNSw5ICszOCwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0IpIHx8ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0MpIHx8ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0QpIHx8ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0UpKSkgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElEOworICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0UpKSkgeyAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElEOyAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAotI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMihhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgXAotICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjMSkgPT0gMHg3RCAmJiAoYzIpID09IDB4M0IpICAgICAgICAgXAotICAgICAgICAoYXNzaSkgPSAweDlCMUQ7CisjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHdyaXRlciwgYzEsIGMyKSAgICAgICAgICAgICBcCisgICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMxKSA9PSAweDdEICYmIChjMikgPT0gMHgzQikgeyAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHg5QjFEKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyX0NIQVIoYXNzaSwgYzEsIGMyKSAgICAgICAgICBcCisgICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMxKSA9PSAweDdEICYmIChjMikgPT0gMHgzQikgeyAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4OUIxRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19jbi5oIGIvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfY24uaAppbmRleCBhNmRjZWJmLi4xZjhjMjk5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19jbi5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmgKQEAgLTQwNDksNyArNDA0OSw3IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBfZ2IxODAzMF90b191bmlibXBfcmFuZ2VzIHsKLSAgICBQeV9VTklDT0RFICAgZmlyc3QsIGxhc3Q7CisgICAgUHlfVUNTNCAgIGZpcnN0LCBsYXN0OwogICAgIERCQ0hBUiAgICAgICBiYXNlOwogfSBnYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXNbXSA9IHsKIHsxMjgsMTYzLDB9LHsxNjUsMTY2LDM2fSx7MTY5LDE3NSwzOH0sezE3OCwxODIsNDV9LHsxODQsMjE0LDUwfSx7MjE2LDIyMyw4MX0sewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oIGIvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oCmluZGV4IGVkYThlOWUuLjcyOWU0YmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmgKQEAgLTMsNyArMyw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHdpZGVkYmNzX2luZGV4ICpqaXN4MDIxM19wYWlyX2RlY21hcDsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGFpcl9lbmNvZGVtYXAgKmppc3gwMjEzX3BhaXJfZW5jbWFwOwogI2Vsc2UKLXN0YXRpYyBjb25zdCB1Y3M0X3QgX19qaXN4MDIxM19wYWlyX2RlY21hcFs0OV0gPSB7CitzdGF0aWMgY29uc3QgUHlfVUNTNCBfX2ppc3gwMjEzX3BhaXJfZGVjbWFwWzQ5XSA9IHsKIDgxMDIzNDAxMCw4MTAzNjUwODIsODEwNDk2MTU0LDgxMDYyNzIyNiw4MTA3NTgyOTgsODE2NTI1NDY2LDgxNjY1NjUzOCwKIDgxNjc4NzYxMCw4MTY5MTg2ODIsODE3MDQ5NzU0LDgxNzU3NDA0Miw4MTgxNjM4NjYsODE4NDI2MDEwLDgzODI4MzQxOCwKIDE1MDc0MDQ4LFUsVSxVLDM5MDYwMjI0LDM5MDYwMjI1LDQyNzMwMjQwLDQyNzMwMjQxLDM5Mzg3OTA0LDM5Mzg3OTA1LDM5NDUzNDQwLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYyBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKaW5kZXggYzAzMmNkYi4uM2M1MTczZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCkBAIC0xMCwxNSArMTAsMTYgQEAKICNpbmNsdWRlICJtdWx0aWJ5dGVjb2RlYy5oIgogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgY29uc3QgUHlfVU5JQ09ERSAgICAqaW5idWYsICppbmJ1Zl90b3AsICppbmJ1Zl9lbmQ7CisgICAgUHlPYmplY3QgICAgICAgICAgICAqaW5vYmo7CisgICAgUHlfc3NpemVfdCAgICAgICAgICBpbnBvcywgaW5sZW47CiAgICAgdW5zaWduZWQgY2hhciAgICAgICAqb3V0YnVmLCAqb3V0YnVmX2VuZDsKICAgICBQeU9iamVjdCAgICAgICAgICAgICpleGNvYmosICpvdXRvYmo7CiB9IE11bHRpYnl0ZUVuY29kZUJ1ZmZlcjsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCAqaW5idWZfdG9wLCAqaW5idWZfZW5kOwotICAgIFB5X1VOSUNPREUgICAgICAgICAgKm91dGJ1ZiwgKm91dGJ1Zl9lbmQ7Ci0gICAgUHlPYmplY3QgICAgICAgICAgICAqZXhjb2JqLCAqb3V0b2JqOworICAgIFB5T2JqZWN0ICAgICAgICAgICAgKmV4Y29iajsKKyAgICBfUHlVbmljb2RlV3JpdGVyICAgIHdyaXRlcjsKIH0gTXVsdGlieXRlRGVjb2RlQnVmZmVyOwogCiBQeURvY19TVFJWQVIoTXVsdGlieXRlQ29kZWNfRW5jb2RlX19kb2NfXywKQEAgLTQ1LDcgKzQ2LDcgQEAKIHN0YXRpYyBjaGFyICpzdHJlYW1rd2FyZ2xpc3RbXSA9IHsic3RyZWFtIiwgImVycm9ycyIsIE5VTEx9OwogCiBzdGF0aWMgUHlPYmplY3QgKm11bHRpYnl0ZWNvZGVjX2VuY29kZShNdWx0aWJ5dGVDb2RlYyAqLAotICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICosIGNvbnN0IFB5X1VOSUNPREUgKiosIFB5X3NzaXplX3QsCisgICAgICAgICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKiwgUHlPYmplY3QgKiwgUHlfc3NpemVfdCAqLAogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICosIGludCk7CiAKICNkZWZpbmUgTUJFTkNfUkVTRVQgICAgIE1CRU5DX01BWDw8MSAvKiByZXNldCBhZnRlciBhbiBlbmNvZGluZyBzZXNzaW9uICovCkBAIC0xOTcsMjkgKzE5OCw2IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKLXN0YXRpYyBpbnQKLWV4cGFuZF9kZWNvZGVidWZmZXIoTXVsdGlieXRlRGVjb2RlQnVmZmVyICpidWYsIFB5X3NzaXplX3QgZXNpemUpCi17Ci0gICAgUHlfc3NpemVfdCBvcmdwb3MsIG9yZ3NpemU7Ci0KLSAgICBvcmdwb3MgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWYgLSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYtPm91dG9iaikpOwotICAgIG9yZ3NpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLT5vdXRvYmopOwotICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZidWYtPm91dG9iaiwgb3Jnc2l6ZSArICgKLSAgICAgICAgZXNpemUgPCAob3Jnc2l6ZSA+PiAxKSA/IChvcmdzaXplID4+IDEpIHwgMSA6IGVzaXplKSkgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGJ1Zi0+b3V0YnVmID0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLT5vdXRvYmopICsgb3JncG9zOwotICAgIGJ1Zi0+b3V0YnVmX2VuZCA9IFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi0+b3V0b2JqKQotICAgICAgICAgICAgICAgICAgICAgICsgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLQotICAgIHJldHVybiAwOwotfQotI2RlZmluZSBSRVFVSVJFX0RFQ09ERUJVRkZFUihidWYsIHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgocykgPCAxIHx8IChidWYpLT5vdXRidWYgKyAocykgPiAoYnVmKS0+b3V0YnVmX2VuZCkgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZXhwYW5kX2RlY29kZWJ1ZmZlcihidWYsIHMpID09IC0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCiAKIC8qKgogICogTXVsdGlieXRlQ29kZWMgb2JqZWN0CkBAIC0yNDcsNyArMjI1LDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOyAvKiByZXRyeSBpdCAqLwogICAgICAgICBjYXNlIE1CRVJSX1RPT0ZFVzoKICAgICAgICAgICAgIHJlYXNvbiA9ICJpbmNvbXBsZXRlIG11bHRpYnl0ZSBzZXF1ZW5jZSI7Ci0gICAgICAgICAgICBlc2l6ZSA9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWYpOworICAgICAgICAgICAgZXNpemUgPSAoUHlfc3NpemVfdClidWYtPmlucG9zOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTUJFUlJfSU5URVJOQUw6CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLApAQCAtMjYxLDE0ICsyMzksMjQgQEAKICAgICB9CiAKICAgICBpZiAoZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgY29uc3QgUHlfVU5JQ09ERSByZXBsY2hhciA9ICc/JywgKmluYnVmID0gJnJlcGxjaGFyOworICAgICAgICBQeU9iamVjdCAqcmVwbGNoYXI7CiAgICAgICAgIFB5X3NzaXplX3QgcjsKKyAgICAgICAgUHlfc3NpemVfdCBpbnBvczsKKyAgICAgICAgaW50IGtpbmQ7CisgICAgICAgIHZvaWQgKmRhdGE7CiAKKyAgICAgICAgcmVwbGNoYXIgPSBQeVVuaWNvZGVfRnJvbU9yZGluYWwoJz8nKTsKKyAgICAgICAgaWYgKHJlcGxjaGFyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHJlcGxjaGFyKTsKKyAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHJlcGxjaGFyKTsKKworICAgICAgICBpbnBvcyA9IDA7CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdDsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYtPm91dGJ1Zl9lbmQgLSBidWYtPm91dGJ1Zik7CiAKLSAgICAgICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwotICAgICAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsICZpbmJ1ZiwgMSwKKyAgICAgICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCwgZGF0YSwgJmlucG9zLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi0+b3V0YnVmLCBvdXRsZWZ0LCAwKTsKICAgICAgICAgICAgIGlmIChyID09IE1CRVJSX1RPT1NNQUxMKSB7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCAtMSk7CkBAIC0yNzgsMjUgKzI2NiwyNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgUHlfREVDUkVGKHJlcGxjaGFyKTsKKwogICAgICAgICBpZiAociAhPSAwKSB7CiAgICAgICAgICAgICBSRVFVSVJFX0VOQ09ERUJVRkZFUihidWYsIDEpOwogICAgICAgICAgICAgKmJ1Zi0+b3V0YnVmKysgPSAnPyc7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9JR05PUkUgfHwgZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgYnVmLT5pbmJ1ZiArPSBlc2l6ZTsKKyAgICAgICAgYnVmLT5pbnBvcyArPSBlc2l6ZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgc3RhcnQgPSAoUHlfc3NpemVfdCkoYnVmLT5pbmJ1ZiAtIGJ1Zi0+aW5idWZfdG9wKTsKKyAgICBzdGFydCA9IChQeV9zc2l6ZV90KWJ1Zi0+aW5wb3M7CiAgICAgZW5kID0gc3RhcnQgKyBlc2l6ZTsKIAogICAgIC8qIHVzZSBjYWNoZWQgZXhjZXB0aW9uIG9iamVjdCBpZiBhdmFpbGFibGUgKi8KICAgICBpZiAoYnVmLT5leGNvYmogPT0gTlVMTCkgewotICAgICAgICBidWYtPmV4Y29iaiA9IFB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZShjb2RlYy0+ZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYtPmluYnVmX3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi0+aW5idWZfZW5kIC0gYnVmLT5pbmJ1Zl90b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCByZWFzb24pOworICAgICAgICBidWYtPmV4Y29iaiA9ICBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPbm5zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjLT5lbmNvZGluZywgYnVmLT5pbm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQsIHJlYXNvbik7CiAgICAgICAgIGlmIChidWYtPmV4Y29iaiA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQpAQCAtMzI1LDEwICszMTUsMTAgQEAKICAgICB9CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHRvYmopKSB7Ci0gICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKnVyYXcgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh0b2JqKTsKKyAgICAgICAgUHlfc3NpemVfdCBpbnBvczsKIAotICAgICAgICByZXRzdHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoY29kZWMsIHN0YXRlLCAmdXJhdywKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0b2JqKSwgRVJST1JfU1RSSUNULAorICAgICAgICByZXRzdHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoY29kZWMsIHN0YXRlLCB0b2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgJmlucG9zLCBFUlJPUl9TVFJJQ1QsCiAgICAgICAgICAgICAgICAgICAgICAgICBNQkVOQ19GTFVTSCk7CiAgICAgICAgIGlmIChyZXRzdHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtMzQ3LDE1ICszMzcsMTUgQEAKIAogICAgIG5ld3BvcyA9IFB5TG9uZ19Bc1NzaXplX3QoUHlUdXBsZV9HRVRfSVRFTShyZXRvYmosIDEpKTsKICAgICBpZiAobmV3cG9zIDwgMCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgbmV3cG9zICs9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWZfdG9wKTsKLSAgICBpZiAobmV3cG9zIDwgMCB8fCBidWYtPmluYnVmX3RvcCArIG5ld3BvcyA+IGJ1Zi0+aW5idWZfZW5kKSB7CisgICAgICAgIG5ld3BvcyArPSAoUHlfc3NpemVfdClidWYtPmlubGVuOworICAgIGlmIChuZXdwb3MgPCAwIHx8IG5ld3BvcyA+IGJ1Zi0+aW5sZW4pIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gJXpkIGZyb20gZXJyb3IgaGFuZGxlciBvdXQgb2YgYm91bmRzIiwKICAgICAgICAgICAgICAgICAgICAgIG5ld3Bvcyk7CiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KLSAgICBidWYtPmluYnVmID0gYnVmLT5pbmJ1Zl90b3AgKyBuZXdwb3M7CisgICAgYnVmLT5pbnBvcyA9IG5ld3BvczsKIAogICAgIFB5X0RFQ1JFRihyZXRvYmopOwogICAgIFB5X0RFQ1JFRihyZXRzdHIpOwpAQCAtMzc0LDcgKzM2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXJyb3JzLCBQeV9zc2l6ZV90IGUpCiB7CiAgICAgUHlPYmplY3QgKnJldG9iaiA9IE5VTEwsICpyZXR1bmkgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgcmV0dW5pc2l6ZSwgbmV3cG9zOworICAgIFB5X3NzaXplX3QgbmV3cG9zOwogICAgIGNvbnN0IGNoYXIgKnJlYXNvbjsKICAgICBQeV9zc2l6ZV90IGVzaXplLCBzdGFydCwgZW5kOwogCkBAIC0zODUsNyArMzc1LDYgQEAKICAgICBlbHNlIHsKICAgICAgICAgc3dpdGNoIChlKSB7CiAgICAgICAgIGNhc2UgTUJFUlJfVE9PU01BTEw6Ci0gICAgICAgICAgICBSRVFVSVJFX0RFQ09ERUJVRkZFUihidWYsIC0xKTsKICAgICAgICAgICAgIHJldHVybiAwOyAvKiByZXRyeSBpdCAqLwogICAgICAgICBjYXNlIE1CRVJSX1RPT0ZFVzoKICAgICAgICAgICAgIHJlYXNvbiA9ICJpbmNvbXBsZXRlIG11bHRpYnl0ZSBzZXF1ZW5jZSI7CkBAIC0zOTUsNiArMzg0LDggQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGNvZGVjIGVycm9yIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGNhc2UgTUJFUlJfRVhDRVBUSU9OOgorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBydW50aW1lIGVycm9yIik7CkBAIC00MDMsOCArMzk0LDkgQEAKICAgICB9CiAKICAgICBpZiAoZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCAxKTsKLSAgICAgICAgKmJ1Zi0+b3V0YnVmKysgPSBQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUjsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZidWYtPndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9JR05PUkUgfHwgZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKICAgICAgICAgYnVmLT5pbmJ1ZiArPSBlc2l6ZTsKQEAgLTQ0NywxNSArNDM5LDggQEAKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogCi0gICAgaWYgKFB5VW5pY29kZV9Bc1VuaWNvZGUocmV0dW5pKSA9PSBOVUxMKQorICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZidWYtPndyaXRlciwgcmV0dW5pKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgIHJldHVuaXNpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUocmV0dW5pKTsKLSAgICBpZiAocmV0dW5pc2l6ZSA+IDApIHsKLSAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCByZXR1bmlzaXplKTsKLSAgICAgICAgbWVtY3B5KChjaGFyICopYnVmLT5vdXRidWYsIFB5VW5pY29kZV9BU19VTklDT0RFKHJldHVuaSksCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1bmlzaXplICogUHlfVU5JQ09ERV9TSVpFKTsKLSAgICAgICAgYnVmLT5vdXRidWYgKz0gcmV0dW5pc2l6ZTsKLSAgICB9CiAKICAgICBuZXdwb3MgPSBQeUxvbmdfQXNTc2l6ZV90KFB5VHVwbGVfR0VUX0lURU0ocmV0b2JqLCAxKSk7CiAgICAgaWYgKG5ld3BvcyA8IDAgJiYgIVB5RXJyX09jY3VycmVkKCkpCkBAIC00NzksMTkgKzQ2NCwyOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG11bHRpYnl0ZWNvZGVjX2VuY29kZShNdWx0aWJ5dGVDb2RlYyAqY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKipkYXRhLCBQeV9zc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRleHQsIFB5X3NzaXplX3QgKmlucG9zX3QsCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVycm9ycywgaW50IGZsYWdzKQogewogICAgIE11bHRpYnl0ZUVuY29kZUJ1ZmZlciBidWY7CiAgICAgUHlfc3NpemVfdCBmaW5hbHNpemUsIHIgPSAwOworICAgIFB5X3NzaXplX3QgZGF0YWxlbjsKKyAgICBpbnQga2luZDsKKyAgICB2b2lkICpkYXRhOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh0ZXh0KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGRhdGFsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh0ZXh0KTsKIAogICAgIGlmIChkYXRhbGVuID09IDAgJiYgIShmbGFncyAmIE1CRU5DX1JFU0VUKSkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CiAKICAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBidWYub3V0b2JqID0gTlVMTDsKLSAgICBidWYuaW5idWYgPSBidWYuaW5idWZfdG9wID0gKmRhdGE7Ci0gICAgYnVmLmluYnVmX2VuZCA9IGJ1Zi5pbmJ1Zl90b3AgKyBkYXRhbGVuOworICAgIGJ1Zi5pbm9iaiA9IHRleHQ7ICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgYnVmLmlucG9zID0gMDsKKyAgICBidWYuaW5sZW4gPSBkYXRhbGVuOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChidWYuaW5vYmopOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShidWYuaW5vYmopOwogCiAgICAgaWYgKGRhdGFsZW4gPiAoUFlfU1NJWkVfVF9NQVggLSAxNikgLyAyKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC01MDQsMTQgKzQ5OSwxNCBAQAogICAgIGJ1Zi5vdXRidWYgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKGJ1Zi5vdXRvYmopOwogICAgIGJ1Zi5vdXRidWZfZW5kID0gYnVmLm91dGJ1ZiArIFB5Qnl0ZXNfR0VUX1NJWkUoYnVmLm91dG9iaik7CiAKLSAgICB3aGlsZSAoYnVmLmluYnVmIDwgYnVmLmluYnVmX2VuZCkgewotICAgICAgICBQeV9zc2l6ZV90IGlubGVmdCwgb3V0bGVmdDsKLQorICAgIHdoaWxlIChidWYuaW5wb3MgPCBidWYuaW5sZW4pIHsKICAgICAgICAgLyogd2UgZG9uJ3QgcmV1c2UgaW5sZWZ0IGFuZCBvdXRsZWZ0IGhlcmUuCiAgICAgICAgICAqIGVycm9yIGNhbGxiYWNrcyBjYW4gcmVsb2NhdGUgdGhlIGN1cnNvciBhbnl3aGVyZSBvbiBidWZmZXIqLwotICAgICAgICBpbmxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLmluYnVmX2VuZCAtIGJ1Zi5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1Zl9lbmQgLSBidWYub3V0YnVmKTsKLSAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsICZidWYuaW5idWYsIGlubGVmdCwKKyAgICAgICAgUHlfc3NpemVfdCBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWZfZW5kIC0gYnVmLm91dGJ1Zik7CisKKyAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5wb3MsIGJ1Zi5pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi5vdXRidWYsIG91dGxlZnQsIGZsYWdzKTsKICAgICAgICAgaWYgKChyID09IDApIHx8IChyID09IE1CRVJSX1RPT0ZFVyAmJiAhKGZsYWdzICYgTUJFTkNfRkxVU0gpKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTQyLDcgKzUzNyw4IEBACiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAotICAgICpkYXRhID0gYnVmLmluYnVmOworICAgIGlmIChpbnBvc190KQorICAgICAgICAqaW5wb3NfdCA9IGJ1Zi5pbnBvczsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwogICAgIHJldHVybiBidWYub3V0b2JqOwogCkBAIC01NTcsNyArNTUzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSBzdGF0ZTsKLSAgICBQeV9VTklDT0RFICpkYXRhOwogICAgIFB5T2JqZWN0ICplcnJvcmNiLCAqciwgKmFyZywgKnVjdnQ7CiAgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGRhdGFsZW47CkBAIC01ODAsMTEgKzU3NSwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgZGF0YSA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKGFyZywgJmRhdGFsZW4pOwotICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGFyZykgPCAwKSB7CiAgICAgICAgIFB5X1hERUNSRUYodWN2dCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoYXJnKTsKIAogICAgIGVycm9yY2IgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChlcnJvcmNiID09IE5VTEwpIHsKQEAgLTU5Niw3ICs1OTEsNyBAQAogICAgICAgICBzZWxmLT5jb2RlYy0+ZW5jaW5pdCgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoc2VsZi0+Y29kZWMsICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VOSUNPREUgKiopJmRhdGEsIGRhdGFsZW4sIGVycm9yY2IsCisgICAgICAgICAgICAgICAgICAgIGFyZywgTlVMTCwgZXJyb3JjYiwKICAgICAgICAgICAgICAgICAgICAgTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCk7CiAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC02MTcsMTAgKzYxMiwxMCBAQAogewogICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlIHN0YXRlOwogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7Ci0gICAgUHlPYmplY3QgKmVycm9yY2I7CisgICAgUHlPYmplY3QgKmVycm9yY2IsICpyZXM7CiAgICAgUHlfYnVmZmVyIHBkYXRhOwogICAgIGNvbnN0IGNoYXIgKmRhdGEsICplcnJvcnMgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgZGF0YWxlbiwgZmluYWxzaXplOworICAgIFB5X3NzaXplX3QgZGF0YWxlbjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfHo6ZGVjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY2t3YXJnbGlzdCwgJnBkYXRhLCAmZXJyb3JzKSkKQEAgLTY0MCwyOSArNjM1LDIzIEBACiAgICAgICAgIHJldHVybiBtYWtlX3R1cGxlKFB5VW5pY29kZV9OZXcoMCwgMCksIDApOwogICAgIH0KIAorICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLndyaXRlci5taW5fbGVuZ3RoID0gZGF0YWxlbjsKICAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBidWYuaW5idWYgPSBidWYuaW5idWZfdG9wID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOwogICAgIGJ1Zi5pbmJ1Zl9lbmQgPSBidWYuaW5idWZfdG9wICsgZGF0YWxlbjsKLSAgICBidWYub3V0b2JqID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIGRhdGFsZW4pOwotICAgIGlmIChidWYub3V0b2JqID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgIGJ1Zi5vdXRidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYub3V0b2JqKTsKLSAgICBpZiAoYnVmLm91dGJ1ZiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBidWYub3V0YnVmX2VuZCA9IGJ1Zi5vdXRidWYgKyBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLm91dG9iaik7CiAKICAgICBpZiAoc2VsZi0+Y29kZWMtPmRlY2luaXQgIT0gTlVMTCAmJgogICAgICAgICBzZWxmLT5jb2RlYy0+ZGVjaW5pdCgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgd2hpbGUgKGJ1Zi5pbmJ1ZiA8IGJ1Zi5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQsIHI7CisgICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCByOwogCiAgICAgICAgIGlubGVmdCA9IChQeV9zc2l6ZV90KShidWYuaW5idWZfZW5kIC0gYnVmLmluYnVmKTsKLSAgICAgICAgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmX2VuZCAtIGJ1Zi5vdXRidWYpOwogCiAgICAgICAgIHIgPSBzZWxmLT5jb2RlYy0+ZGVjb2RlKCZzdGF0ZSwgc2VsZi0+Y29kZWMtPmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5idWYsIGlubGVmdCwgJmJ1Zi5vdXRidWYsIG91dGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLndyaXRlcik7CiAgICAgICAgIGlmIChyID09IDApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZWxzZSBpZiAobXVsdGlieXRlY29kZWNfZGVjZXJyb3Ioc2VsZi0+Y29kZWMsICZzdGF0ZSwKQEAgLTY3MCwyMyArNjU5LDIwIEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAKLSAgICBmaW5hbHNpemUgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1ZiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKLQotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7CiAgICAgRVJST1JfREVDUkVGKGVycm9yY2IpOwotICAgIHJldHVybiBtYWtlX3R1cGxlKGJ1Zi5vdXRvYmosIGRhdGFsZW4pOworICAgIHJldHVybiBtYWtlX3R1cGxlKHJlcywgZGF0YWxlbik7CiAKIGVycm9yZXhpdDoKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgRVJST1JfREVDUkVGKGVycm9yY2IpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogCiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC03NTIsOSArNzM4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmlzdHIsIGludCBmaW5hbCkKIHsKICAgICBQeU9iamVjdCAqdWN2dCwgKnIgPSBOVUxMOwotICAgIFB5X1VOSUNPREUgKmluYnVmLCAqaW5idWZfZW5kLCAqaW5idWZfdG1wID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGRhdGFsZW4sIG9yaWdwZW5kaW5nOwotICAgIHdjaGFyX3QgKmRhdGE7CisgICAgUHlPYmplY3QgKmluYnVmID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGlucG9zLCBkYXRhbGVuOworICAgIFB5T2JqZWN0ICpvcmlncGVuZGluZyA9IE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHVuaXN0cikpCiAgICAgICAgIHVjdnQgPSBOVUxMOwpAQCAtNzcwLDY5ICs3NTYsNjYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZSh1bmlzdHIsICZkYXRhbGVuKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBvcmlncGVuZGluZyA9IGN0eC0+cGVuZGluZ3NpemU7CisgICAgaWYgKGN0eC0+cGVuZGluZykgeworICAgICAgICBQeU9iamVjdCAqaW5idWZfdG1wOwogCi0gICAgaWYgKG9yaWdwZW5kaW5nID4gMCkgewotICAgICAgICBpZiAoZGF0YWxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gY3R4LT5wZW5kaW5nc2l6ZSkgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIC8qIGluYnVmX3RtcCA9PSBOVUxMICovCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICAgICAgfQotICAgICAgICBpbmJ1Zl90bXAgPSBQeU1lbV9OZXcoUHlfVU5JQ09ERSwgZGF0YWxlbiArIGN0eC0+cGVuZGluZ3NpemUpOworICAgICAgICBQeV9JTkNSRUYoY3R4LT5wZW5kaW5nKTsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBjdHgtPnBlbmRpbmc7CisKKyAgICAgICAgUHlfSU5DUkVGKGN0eC0+cGVuZGluZyk7CisgICAgICAgIGluYnVmX3RtcCA9IGN0eC0+cGVuZGluZzsKKyAgICAgICAgUHlVbmljb2RlX0FwcGVuZCgmaW5idWZfdG1wLCB1bmlzdHIpOwogICAgICAgICBpZiAoaW5idWZfdG1wID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICAgICAgbWVtY3B5KGluYnVmX3RtcCwgY3R4LT5wZW5kaW5nLAotICAgICAgICAgICAgUHlfVU5JQ09ERV9TSVpFICogY3R4LT5wZW5kaW5nc2l6ZSk7Ci0gICAgICAgIG1lbWNweShpbmJ1Zl90bXAgKyBjdHgtPnBlbmRpbmdzaXplLAotICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodW5pc3RyKSwKLSAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIGRhdGFsZW4pOwotICAgICAgICBkYXRhbGVuICs9IGN0eC0+cGVuZGluZ3NpemU7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAwOworICAgICAgICBQeV9DTEVBUihjdHgtPnBlbmRpbmcpOwogICAgICAgICBpbmJ1ZiA9IGluYnVmX3RtcDsKICAgICB9Ci0gICAgZWxzZQotICAgICAgICBpbmJ1ZiA9IChQeV9VTklDT0RFICopUHlVbmljb2RlX0FTX1VOSUNPREUodW5pc3RyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBOVUxMOwogCi0gICAgaW5idWZfZW5kID0gaW5idWYgKyBkYXRhbGVuOworICAgICAgICBQeV9JTkNSRUYodW5pc3RyKTsKKyAgICAgICAgaW5idWYgPSB1bmlzdHI7CisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaW5idWYpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgaW5wb3MgPSAwOworICAgIGRhdGFsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpbmJ1Zik7CiAKICAgICByID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKGN0eC0+Y29kZWMsICZjdHgtPnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAoY29uc3QgUHlfVU5JQ09ERSAqKikmaW5idWYsIGRhdGFsZW4sCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+ZXJyb3JzLCBmaW5hbCA/IE1CRU5DX0ZMVVNIIHwgTUJFTkNfUkVTRVQgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmVycm9ycywgZmluYWwgPyBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUIDogMCk7CiAgICAgaWYgKHIgPT0gTlVMTCkgewogICAgICAgICAvKiByZWNvdmVyIHRoZSBvcmlnaW5hbCBwZW5kaW5nIGJ1ZmZlciAqLwotICAgICAgICBpZiAob3JpZ3BlbmRpbmcgPiAwKQotICAgICAgICAgICAgbWVtY3B5KGN0eC0+cGVuZGluZywgaW5idWZfdG1wLAotICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIG9yaWdwZW5kaW5nKTsKLSAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IG9yaWdwZW5kaW5nOworICAgICAgICBQeV9DTEVBUihjdHgtPnBlbmRpbmcpOworICAgICAgICBjdHgtPnBlbmRpbmcgPSBvcmlncGVuZGluZzsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBOVUxMOwogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CisgICAgUHlfWERFQ1JFRihvcmlncGVuZGluZyk7CiAKLSAgICBpZiAoaW5idWYgPCBpbmJ1Zl9lbmQpIHsKLSAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IChQeV9zc2l6ZV90KShpbmJ1Zl9lbmQgLSBpbmJ1Zik7Ci0gICAgICAgIGlmIChjdHgtPnBlbmRpbmdzaXplID4gTUFYRU5DUEVORElORykgeworICAgIGlmIChpbnBvcyA8IGRhdGFsZW4pIHsKKyAgICAgICAgaWYgKGRhdGFsZW4gLSBpbnBvcyA+IE1BWEVOQ1BFTkRJTkcpIHsKICAgICAgICAgICAgIC8qIG5vcm1hbCBjb2RlY3MgY2FuJ3QgcmVhY2ggaGVyZSAqLwotICAgICAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IDA7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVW5pY29kZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZW5kaW5nIGJ1ZmZlciBvdmVyZmxvdyIpOwogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGN0eC0+cGVuZGluZywgaW5idWYsCi0gICAgICAgICAgICBjdHgtPnBlbmRpbmdzaXplICogUHlfVU5JQ09ERV9TSVpFKTsKKyAgICAgICAgY3R4LT5wZW5kaW5nID0gUHlVbmljb2RlX1N1YnN0cmluZyhpbmJ1ZiwgaW5wb3MsIGRhdGFsZW4pOworICAgICAgICBpZiAoY3R4LT5wZW5kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIG5vcm1hbCBjb2RlY3MgY2FuJ3QgcmVhY2ggaGVyZSAqLworICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaW5idWZfdG1wICE9IE5VTEwpCi0gICAgICAgIFB5TWVtX0RlbChpbmJ1Zl90bXApOworICAgIFB5X0RFQ1JFRihpbmJ1Zik7CiAgICAgUHlfWERFQ1JFRih1Y3Z0KTsKICAgICByZXR1cm4gcjsKIAogZXJyb3JleGl0OgotICAgIGlmIChpbmJ1Zl90bXAgIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRGVsKGluYnVmX3RtcCk7CiAgICAgUHlfWERFQ1JFRihyKTsKICAgICBQeV9YREVDUkVGKHVjdnQpOworICAgIFB5X1hERUNSRUYob3JpZ3BlbmRpbmcpOworICAgIFB5X1hERUNSRUYoaW5idWYpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC04NTksMTcgKzg0Miw3IEBACiB7CiAgICAgYnVmLT5pbmJ1ZiA9IGJ1Zi0+aW5idWZfdG9wID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkYXRhOwogICAgIGJ1Zi0+aW5idWZfZW5kID0gYnVmLT5pbmJ1Zl90b3AgKyBzaXplOwotICAgIGlmIChidWYtPm91dG9iaiA9PSBOVUxMKSB7IC8qIG9ubHkgaWYgb3V0b2JqIGlzIG5vdCBhbGxvY2F0ZWQgeWV0ICovCi0gICAgICAgIGJ1Zi0+b3V0b2JqID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIHNpemUpOwotICAgICAgICBpZiAoYnVmLT5vdXRvYmogPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgYnVmLT5vdXRidWYgPSBQeVVuaWNvZGVfQXNVbmljb2RlKGJ1Zi0+b3V0b2JqKTsKLSAgICAgICAgaWYgKGJ1Zi0+b3V0YnVmID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmX2VuZCA9IGJ1Zi0+b3V0YnVmICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLSAgICB9Ci0KKyAgICBidWYtPndyaXRlci5taW5fbGVuZ3RoICs9IHNpemU7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTg3OCwxNCArODUxLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciAqYnVmKQogewogICAgIHdoaWxlIChidWYtPmluYnVmIDwgYnVmLT5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQ7CisgICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0OwogICAgICAgICBQeV9zc2l6ZV90IHI7CiAKICAgICAgICAgaW5sZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+aW5idWZfZW5kIC0gYnVmLT5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwogCiAgICAgICAgIHIgPSBjdHgtPmNvZGVjLT5kZWNvZGUoJmN0eC0+c3RhdGUsIGN0eC0+Y29kZWMtPmNvbmZpZywKLSAgICAgICAgICAgICZidWYtPmluYnVmLCBpbmxlZnQsICZidWYtPm91dGJ1Ziwgb3V0bGVmdCk7CisgICAgICAgICAgICAmYnVmLT5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLT53cml0ZXIpOwogICAgICAgICBpZiAociA9PSAwIHx8IHIgPT0gTUJFUlJfVE9PRkVXKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGVsc2UgaWYgKG11bHRpYnl0ZWNvZGVjX2RlY2Vycm9yKGN0eC0+Y29kZWMsICZjdHgtPnN0YXRlLApAQCAtOTI3LDcgKzg5OSw3IEBACiAgICAgICAgIGlmIChyICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIFB5X0NMRUFSKHNlbGYtPnBlbmRpbmcpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC05NjMsNyArOTM1LDcgQEAKICAgICB9CiAKICAgICBzZWxmLT5jb2RlYyA9ICgoTXVsdGlieXRlQ29kZWNPYmplY3QgKiljb2RlYyktPmNvZGVjOwotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBzZWxmLT5wZW5kaW5nID0gTlVMTDsKICAgICBzZWxmLT5lcnJvcnMgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChzZWxmLT5lcnJvcnMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC0xMDU4LDggKzEwMzAsOSBAQAogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7CiAgICAgY2hhciAqZGF0YSwgKndkYXRhID0gTlVMTDsKICAgICBQeV9idWZmZXIgcGRhdGE7Ci0gICAgUHlfc3NpemVfdCB3c2l6ZSwgZmluYWxzaXplID0gMCwgc2l6ZSwgb3JpZ3BlbmRpbmc7CisgICAgUHlfc3NpemVfdCB3c2l6ZSwgc2l6ZSwgb3JpZ3BlbmRpbmc7CiAgICAgaW50IGZpbmFsID0gMDsKKyAgICBQeU9iamVjdCAqcmVzOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAieSp8aTpkZWNvZGUiLAogICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbGt3YXJnbGlzdCwgJnBkYXRhLCAmZmluYWwpKQpAQCAtMTA2Nyw3ICsxMDQwLDggQEAKICAgICBkYXRhID0gcGRhdGEuYnVmOwogICAgIHNpemUgPSBwZGF0YS5sZW47CiAKLSAgICBidWYub3V0b2JqID0gYnVmLmV4Y29iaiA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZidWYud3JpdGVyKTsKKyAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBvcmlncGVuZGluZyA9IHNlbGYtPnBlbmRpbmdzaXplOwogCiAgICAgaWYgKHNlbGYtPnBlbmRpbmdzaXplID09IDApIHsKQEAgLTEwODEsOCArMTA1NSwxMCBAQAogICAgICAgICB9CiAgICAgICAgIHdzaXplID0gc2l6ZSArIHNlbGYtPnBlbmRpbmdzaXplOwogICAgICAgICB3ZGF0YSA9IFB5TWVtX01hbGxvYyh3c2l6ZSk7Ci0gICAgICAgIGlmICh3ZGF0YSA9PSBOVUxMKQorICAgICAgICBpZiAod2RhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICB9CiAgICAgICAgIG1lbWNweSh3ZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOwogICAgICAgICBtZW1jcHkod2RhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwgZGF0YSwgc2l6ZSk7CiAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKQEAgLTExMDksMjMgKzEwODUsMjIgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KIAotICAgIGZpbmFsc2l6ZSA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmIC0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaikpOwotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIGlmICh3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgcmV0dXJuIGJ1Zi5vdXRvYmo7CisgICAgcmV0dXJuIHJlczsKIAogZXJyb3JleGl0OgogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBpZiAod2RhdGEgIT0gTlVMTCAmJiB3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMjY1LDEzICsxMjQwLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2QsIFB5X3NzaXplX3Qgc2l6ZWhpbnQpCiB7CiAgICAgTXVsdGlieXRlRGVjb2RlQnVmZmVyIGJ1ZjsKLSAgICBQeU9iamVjdCAqY3JlczsKLSAgICBQeV9zc2l6ZV90IHJzaXplLCBmaW5hbHNpemUgPSAwOworICAgIFB5T2JqZWN0ICpjcmVzLCAqcmVzOworICAgIFB5X3NzaXplX3QgcnNpemU7CiAKICAgICBpZiAoc2l6ZWhpbnQgPT0gMCkKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9OZXcoMCwgMCk7CiAKLSAgICBidWYub3V0b2JqID0gYnVmLmV4Y29iaiA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZidWYud3JpdGVyKTsKKyAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBjcmVzID0gTlVMTDsKIAogICAgIGZvciAoOzspIHsKQEAgLTEzMDMsMTkgKzEyNzksMTkgQEAKICAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpID4gUFlfU1NJWkVfVF9NQVggLSBzZWxmLT5wZW5kaW5nc2l6ZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpICsgc2VsZi0+cGVuZGluZ3NpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcnNpemUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgICAgICAgICAgICAgIGN0cmRhdGEgPSBQeUJ5dGVzX0FTX1NUUklORyhjdHIpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSArIHNlbGYtPnBlbmRpbmdzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGNyZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7Ci0gICAgICAgICAgICAgICAgICAgIGNyZXMgPSBjdHI7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKSArIHNlbGYtPnBlbmRpbmdzaXplOworICAgICAgICAgICAgY3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCByc2l6ZSk7CisgICAgICAgICAgICBpZiAoY3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgICAgICBjdHJkYXRhID0gUHlCeXRlc19BU19TVFJJTkcoY3RyKTsKKyAgICAgICAgICAgIG1lbWNweShjdHJkYXRhLCBzZWxmLT5wZW5kaW5nLCBzZWxmLT5wZW5kaW5nc2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSArIHNlbGYtPnBlbmRpbmdzaXplLAorICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjcmVzKSwKKyAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShjcmVzKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7CisgICAgICAgICAgICBjcmVzID0gY3RyOworICAgICAgICAgICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgcnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpOwpAQCAtMTM0MCwyOSArMTMxNiwyNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWxzaXplID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWYgLQotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaikpOwogICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7CiAgICAgICAgIGNyZXMgPSBOVUxMOwogCi0gICAgICAgIGlmIChzaXplaGludCA8IDAgfHwgZmluYWxzaXplICE9IDAgfHwgcnNpemUgPT0gMCkKKyAgICAgICAgaWYgKHNpemVoaW50IDwgMCB8fCBidWYud3JpdGVyLnBvcyAhPSAwIHx8IHJzaXplID09IDApCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBzaXplaGludCA9IDE7IC8qIHJlYWQgMSBtb3JlIGJ5dGUgYW5kIHJldHJ5ICovCiAgICAgfQogCi0gICAgaWYgKGZpbmFsc2l6ZSAhPSBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLm91dG9iaikpCi0gICAgICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZidWYub3V0b2JqLCBmaW5hbHNpemUpID09IC0xKQotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgcmVzID0gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJmJ1Zi53cml0ZXIpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAKICAgICBQeV9YREVDUkVGKGNyZXMpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgcmV0dXJuIGJ1Zi5vdXRvYmo7CisgICAgcmV0dXJuIHJlczsKIAogZXJyb3JleGl0OgogICAgIFB5X1hERUNSRUYoY3Jlcyk7CiAgICAgUHlfWERFQ1JFRihidWYuZXhjb2JqKTsKLSAgICBQeV9YREVDUkVGKGJ1Zi5vdXRvYmopOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmYnVmLndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE2NDksMTggKzE2MjMsMTYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtYnN0cmVhbXdyaXRlcl9yZXNldChNdWx0aWJ5dGVTdHJlYW1Xcml0ZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgY29uc3QgUHlfVU5JQ09ERSAqcGVuZGluZzsKICAgICBQeU9iamVjdCAqcHdydDsKIAotICAgIHBlbmRpbmcgPSBzZWxmLT5wZW5kaW5nOwogICAgIHB3cnQgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoc2VsZi0+Y29kZWMsICZzZWxmLT5zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgJnBlbmRpbmcsIHNlbGYtPnBlbmRpbmdzaXplLCBzZWxmLT5lcnJvcnMsCisgICAgICAgICAgICAgICAgICAgIHNlbGYtPnBlbmRpbmcsIE5VTEwsIHNlbGYtPmVycm9ycywKICAgICAgICAgICAgICAgICAgICAgTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCk7CiAgICAgLyogc29tZSBwZW5kaW5nIGJ1ZmZlciBjYW4gYmUgdHJ1bmNhdGVkIHdoZW4gVW5pY29kZUVuY29kZUVycm9yIGlzCiAgICAgICogcmFpc2VkIG9uICdzdHJpY3QnIG1vZGUuIGJ1dCwgJ3Jlc2V0JyBtZXRob2QgaXMgZGVzaWduZWQgdG8KICAgICAgKiByZXNldCB0aGUgcGVuZGluZyBidWZmZXIgb3Igc3RhdGVzIHNvIGZhaWxlZCBzdHJpbmcgc2VxdWVuY2UKICAgICAgKiBvdWdodCB0byBiZSBtaXNzZWQgKi8KLSAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgUHlfQ0xFQVIoc2VsZi0+cGVuZGluZyk7CiAgICAgaWYgKHB3cnQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE3MDYsNyArMTY3OCw3IEBACiAgICAgc2VsZi0+Y29kZWMgPSAoKE11bHRpYnl0ZUNvZGVjT2JqZWN0ICopY29kZWMpLT5jb2RlYzsKICAgICBzZWxmLT5zdHJlYW0gPSBzdHJlYW07CiAgICAgUHlfSU5DUkVGKHN0cmVhbSk7Ci0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIHNlbGYtPnBlbmRpbmcgPSBOVUxMOwogICAgIHNlbGYtPmVycm9ycyA9IGludGVybmFsX2Vycm9yX2NhbGxiYWNrKGVycm9ycyk7CiAgICAgaWYgKHNlbGYtPmVycm9ycyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCmluZGV4IDFiNmVmNTUuLjViOGMyMjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaApAQCAtMTAsMTIgKzEwLDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiB1aW50MzJfdAotdHlwZWRlZiB1aW50MzJfdCB1Y3M0X3Q7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWNzNF90OwotI2VuZGlmCi0KICNpZmRlZiB1aW50MTZfdAogdHlwZWRlZiB1aW50MTZfdCB1Y3MyX3QsIERCQ0hBUjsKICNlbHNlCkBAIC0yNywxMyArMjEsMTQgQEAKICAgICBpbnQgaTsKICAgICB1bnNpZ25lZCBjaGFyIGNbOF07CiAgICAgdWNzMl90IHUyWzRdOwotICAgIHVjczRfdCB1NFsyXTsKKyAgICBQeV9VQ1M0IHU0WzJdOwogfSBNdWx0aWJ5dGVDb2RlY19TdGF0ZTsKIAogdHlwZWRlZiBpbnQgKCptYmNvZGVjX2luaXQpKGNvbnN0IHZvaWQgKmNvbmZpZyk7CiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmVuY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtpbmQsIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICppbnBvcywgUHlfc3NpemVfdCBpbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CiB0eXBlZGVmIGludCAoKm1iZW5jb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC00NCw3ICszOSw3IEBACiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmRlY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiB0eXBlZGVmIGludCAoKm1iZGVjb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcpOwogdHlwZWRlZiBQeV9zc2l6ZV90ICgqbWJkZWNvZGVyZXNldF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC04MSw4ICs3Niw3IEBACiAjZGVmaW5lIE1BWEVOQ1BFTkRJTkcgICAyCiAjZGVmaW5lIF9NdWx0aWJ5dGVTdGF0ZWZ1bEVuY29kZXJfSEVBRCAgICAgICAgICBcCiAgICAgX011bHRpYnl0ZVN0YXRlZnVsQ29kZWNfSEVBRCAgICAgICAgICAgICAgICBcCi0gICAgUHlfVU5JQ09ERSBwZW5kaW5nW01BWEVOQ1BFTkRJTkddOyAgICAgICAgICBcCi0gICAgUHlfc3NpemVfdCBwZW5kaW5nc2l6ZTsKKyAgICBQeU9iamVjdCAqcGVuZGluZzsKIHR5cGVkZWYgc3RydWN0IHsKICAgICBfTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyX0hFQUQKIH0gTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyQ29udGV4dDsKQEAgLTExOCwxNiArMTEyLDE3IEBACiAjZGVmaW5lIE1CRVJSX1RPT1NNQUxMICAgICAgICAgICgtMSkgLyogaW5zdWZmaWNpZW50IG91dHB1dCBidWZmZXIgc3BhY2UgKi8KICNkZWZpbmUgTUJFUlJfVE9PRkVXICAgICAgICAgICAgKC0yKSAvKiBpbmNvbXBsZXRlIGlucHV0IGJ1ZmZlciAqLwogI2RlZmluZSBNQkVSUl9JTlRFUk5BTCAgICAgICAgICAoLTMpIC8qIGludGVybmFsIHJ1bnRpbWUgZXJyb3IgKi8KKyNkZWZpbmUgTUJFUlJfRVhDRVBUSU9OICAgICAgICAgKC00KSAvKiBhbiBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkICovCiAKICNkZWZpbmUgRVJST1JfU1RSSUNUICAgICAgICAgICAgKFB5T2JqZWN0ICopKDEpCiAjZGVmaW5lIEVSUk9SX0lHTk9SRSAgICAgICAgICAgIChQeU9iamVjdCAqKSgyKQogI2RlZmluZSBFUlJPUl9SRVBMQUNFICAgICAgICAgICAoUHlPYmplY3QgKikoMykKICNkZWZpbmUgRVJST1JfSVNDVVNUT00ocCkgICAgICAgKChwKSA8IEVSUk9SX1NUUklDVCB8fCBFUlJPUl9SRVBMQUNFIDwgKHApKQotI2RlZmluZSBFUlJPUl9ERUNSRUYocCkgZG8geyAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwICE9IE5VTEwgJiYgRVJST1JfSVNDVVNUT00ocCkpIHsgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCk7CisjZGVmaW5lIEVSUk9SX0RFQ1JFRihwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHAgIT0gTlVMTCAmJiBFUlJPUl9JU0NVU1RPTShwKSkgICAgICAgICBcCisgICAgICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApOwogCiAjZGVmaW5lIE1CRU5DX0ZMVVNIICAgICAgICAgICAgIDB4MDAwMSAvKiBlbmNvZGUgYWxsIGNoYXJhY3RlcnMgZW5jb2RhYmxlICovCiAjZGVmaW5lIE1CRU5DX01BWCAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNICmRpZmYgLS1naXQgYS9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jIGIvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYwppbmRleCBjODZhMjdmLi40N2JjOWU4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jCisrKyBiL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKQEAgLTIyLDcgKzIyLDkgQEAKICMgIGRlZmluZSBGQVVMVEhBTkRMRVJfVVNFUgogI2VuZGlmCiAKLSNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSkKKy8qIGNhc3Qgc2l6ZV90IHRvIGludCBiZWNhdXNlIHdyaXRlKCkgdGFrZXMgYW4gaW50IG9uIFdpbmRvd3MKKyAgIChhbnl3YXksIHRoZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIDMwIGNoYXJhY3RlcnMpICovCisjZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgKGludClzdHJsZW4oc3RyKSkKIAogI2lmZGVmIEhBVkVfU0lHQUNUSU9OCiB0eXBlZGVmIHN0cnVjdCBzaWdhY3Rpb24gX1B5X3NpZ2hhbmRsZXJfdDsKQEAgLTc5LDkgKzgxLDYgQEAKIHN0YXRpYyB1c2VyX3NpZ25hbF90ICp1c2VyX3NpZ25hbHM7CiAKIC8qIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGNvbWUgZnJvbSBQeXRob246IE1vZHVsZXMvc2lnbmFsbW9kdWxlLmMgKi8KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTlNJRyAxMgotI2VuZGlmCiAjaWZuZGVmIE5TSUcKICMgaWYgZGVmaW5lZChfTlNJRykKICMgIGRlZmluZSBOU0lHIF9OU0lHICAgICAgICAgICAgLyogRm9yIEJTRC9TeXNWICovCkBAIC00NDgsNyArNDQ3LDcgQEAKICAgICAgICAgLyogZ2V0IHRoZSB0aHJlYWQgaG9sZGluZyB0aGUgR0lMLCBOVUxMIGlmIG5vIHRocmVhZCBob2xkIHRoZSBHSUwgKi8KICAgICAgICAgY3VycmVudCA9IF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KTsKIAotICAgICAgICB3cml0ZSh0aHJlYWQuZmQsIHRocmVhZC5oZWFkZXIsIHRocmVhZC5oZWFkZXJfbGVuKTsKKyAgICAgICAgd3JpdGUodGhyZWFkLmZkLCB0aHJlYWQuaGVhZGVyLCAoaW50KXRocmVhZC5oZWFkZXJfbGVuKTsKIAogICAgICAgICBlcnJtc2cgPSBfUHlfRHVtcFRyYWNlYmFja1RocmVhZHModGhyZWFkLmZkLCB0aHJlYWQuaW50ZXJwLCBjdXJyZW50KTsKICAgICAgICAgb2sgPSAoZXJybXNnID09IE5VTEwpOwpAQCAtNDc2LDcgKzQ3NSw3IEBACiAKICAgICBQeV9DTEVBUih0aHJlYWQuZmlsZSk7CiAgICAgaWYgKHRocmVhZC5oZWFkZXIpIHsKLSAgICAgICAgZnJlZSh0aHJlYWQuaGVhZGVyKTsKKyAgICAgICAgUHlNZW1fRnJlZSh0aHJlYWQuaGVhZGVyKTsKICAgICAgICAgdGhyZWFkLmhlYWRlciA9IE5VTEw7CiAgICAgfQogfQpAQCAtNTA1LDcgKzUwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVvdXQgKCVsdTolMDJsdTolMDJsdSkhXG4iLAogICAgICAgICAgICAgICAgICAgICAgIGhvdXIsIG1pbiwgc2VjKTsKIAotICAgIHJldHVybiBzdHJkdXAoYnVmZmVyKTsKKyAgICByZXR1cm4gX1B5TWVtX1N0cmR1cChidWZmZXIpOwogfQogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC01NzEsNyArNTcwLDcgQEAKICAgICBpZiAoUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZChmYXVsdGhhbmRsZXJfdGhyZWFkLCBOVUxMKSA9PSAtMSkgewogICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGhyZWFkLnJ1bm5pbmcpOwogICAgICAgICBQeV9DTEVBUih0aHJlYWQuZmlsZSk7Ci0gICAgICAgIGZyZWUoaGVhZGVyKTsKKyAgICAgICAgUHlNZW1fRnJlZShoZWFkZXIpOwogICAgICAgICB0aHJlYWQuaGVhZGVyID0gTlVMTDsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gc3RhcnQgd2F0Y2hkb2cgdGhyZWFkIik7CkBAIC03MzAsOSArNzI5LDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHVzZXJfc2lnbmFscyA9PSBOVUxMKSB7Ci0gICAgICAgIHVzZXJfc2lnbmFscyA9IGNhbGxvYyhOU0lHLCBzaXplb2YodXNlcl9zaWduYWxfdCkpOworICAgICAgICB1c2VyX3NpZ25hbHMgPSBQeU1lbV9NYWxsb2MoTlNJRyAqIHNpemVvZih1c2VyX3NpZ25hbF90KSk7CiAgICAgICAgIGlmICh1c2VyX3NpZ25hbHMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBtZW1zZXQodXNlcl9zaWduYWxzLCAwLCBOU0lHICogc2l6ZW9mKHVzZXJfc2lnbmFsX3QpKTsKICAgICB9CiAgICAgdXNlciA9ICZ1c2VyX3NpZ25hbHNbc2lnbnVtXTsKIApAQCAtMTA0OCw4ICsxMDQ4LDExIEBACiB7CiAgICAgUHlPYmplY3QgKnhvcHRpb25zLCAqa2V5LCAqbW9kdWxlLCAqcmVzOwogICAgIF9QeV9JREVOVElGSUVSKGVuYWJsZSk7CisgICAgY2hhciAqcDsKIAotICAgIGlmICghUHlfR0VURU5WKCJQWVRIT05GQVVMVEhBTkRMRVIiKSkgeworICAgIGlmICghKChwID0gUHlfR0VURU5WKCJQWVRIT05GQVVMVEhBTkRMRVIiKSkgJiYgKnAgIT0gJ1wwJykpIHsKKyAgICAgICAgLyogUFlUSE9ORkFVTFRIQU5ETEVSIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG1pc3NpbmcKKyAgICAgICAgICAgb3IgYW4gZW1wdHkgc3RyaW5nICovCiAgICAgICAgIGludCBoYXNfa2V5OwogCiAgICAgICAgIHhvcHRpb25zID0gUHlTeXNfR2V0WE9wdGlvbnMoKTsKQEAgLTExMzcsNyArMTE0MCw3IEBACiAgICAgaWYgKHVzZXJfc2lnbmFscyAhPSBOVUxMKSB7CiAgICAgICAgIGZvciAoc2lnbnVtPTA7IHNpZ251bSA8IE5TSUc7IHNpZ251bSsrKQogICAgICAgICAgICAgZmF1bHRoYW5kbGVyX3VucmVnaXN0ZXIoJnVzZXJfc2lnbmFsc1tzaWdudW1dLCBzaWdudW0pOwotICAgICAgICBmcmVlKHVzZXJfc2lnbmFscyk7CisgICAgICAgIFB5TWVtX0ZyZWUodXNlcl9zaWduYWxzKTsKICAgICAgICAgdXNlcl9zaWduYWxzID0gTlVMTDsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvZmNudGxtb2R1bGUuYyBiL01vZHVsZXMvZmNudGxtb2R1bGUuYwppbmRleCBkZTFlMGRhLi4wY2UxMjM1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9mY250bG1vZHVsZS5jCkBAIC0zMjUsMTEgKzMyNSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW5vYmosICZzdGFydG9iaiwgJndoZW5jZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImxvY2tmIG5vdCBzdXBwb3J0ZWQgb24gT1MvMiAoRU1YKSIpOwotICAgIHJldHVybiBOVUxMOwotI2Vsc2UKICNpZm5kZWYgTE9DS19TSAogI2RlZmluZSBMT0NLX1NIICAgICAgICAgMSAgICAgICAvKiBzaGFyZWQgbG9jayAqLwogI2RlZmluZSBMT0NLX0VYICAgICAgICAgMiAgICAgICAvKiBleGNsdXNpdmUgbG9jayAqLwpAQCAtMzgzLDcgKzM3OCw2IEBACiAgICAgfQogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKLSNlbmRpZiAgLyogZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykgKi8KIH0KIAogUHlEb2NfU1RSVkFSKGxvY2tmX2RvYywKQEAgLTQzMCwxODggKzQyNCwxNzkgQEAKIAogLyogTW9kdWxlIGluaXRpYWxpc2F0aW9uICovCiAKLXN0YXRpYyBpbnQKLWlucyhQeU9iamVjdCogZCwgY2hhciogc3ltYm9sLCBsb25nIHZhbHVlKQotewotICAgIFB5T2JqZWN0KiB2ID0gUHlMb25nX0Zyb21Mb25nKHZhbHVlKTsKLSAgICBpZiAoIXYgfHwgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgc3ltYm9sLCB2KSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFB5X0RFQ1JFRih2KTsKLSAgICByZXR1cm4gMDsKLX0KLQotI2RlZmluZSBJTlMoeCkgaWYgKGlucyhkLCAjeCwgKGxvbmcpeCkpIHJldHVybiAtMQogCiBzdGF0aWMgaW50Ci1hbGxfaW5zKFB5T2JqZWN0KiBkKQorYWxsX2lucyhQeU9iamVjdCogbSkKIHsKLSAgICBpZiAoaW5zKGQsICJMT0NLX1NIIiwgKGxvbmcpTE9DS19TSCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJMT0NLX0VYIiwgKGxvbmcpTE9DS19FWCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJMT0NLX05CIiwgKGxvbmcpTE9DS19OQikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJMT0NLX1VOIiwgKGxvbmcpTE9DS19VTikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19TSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19FWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19OQikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19VTikpIHJldHVybiAtMTsKIC8qIEdOVSBleHRlbnNpb25zLCBhcyBvZiBnbGliYyAyLjIuNCAqLwogI2lmZGVmIExPQ0tfTUFORAotICAgIGlmIChpbnMoZCwgIkxPQ0tfTUFORCIsIChsb25nKUxPQ0tfTUFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19NQU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTE9DS19SRUFECi0gICAgaWYgKGlucyhkLCAiTE9DS19SRUFEIiwgKGxvbmcpTE9DS19SRUFEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1JFQUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBMT0NLX1dSSVRFCi0gICAgaWYgKGlucyhkLCAiTE9DS19XUklURSIsIChsb25nKUxPQ0tfV1JJVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfV1JJVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBMT0NLX1JXCi0gICAgaWYgKGlucyhkLCAiTE9DS19SVyIsIChsb25nKUxPQ0tfUlcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfUlcpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEZfRFVQRkQKLSAgICBpZiAoaW5zKGQsICJGX0RVUEZEIiwgKGxvbmcpRl9EVVBGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9EVVBGRCkpIHJldHVybiAtMTsKKyNlbmRpZgorI2lmZGVmIEZfRFVQRkRfQ0xPRVhFQworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0RVUEZEX0NMT0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVEZECi0gICAgaWYgKGlucyhkLCAiRl9HRVRGRCIsIChsb25nKUZfR0VURkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VURkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVEZECi0gICAgaWYgKGlucyhkLCAiRl9TRVRGRCIsIChsb25nKUZfU0VURkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VURkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVEZMCi0gICAgaWYgKGlucyhkLCAiRl9HRVRGTCIsIChsb25nKUZfR0VURkwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VURkwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVEZMCi0gICAgaWYgKGlucyhkLCAiRl9TRVRGTCIsIChsb25nKUZfU0VURkwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VURkwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVExLCi0gICAgaWYgKGlucyhkLCAiRl9HRVRMSyIsIChsb25nKUZfR0VUTEspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUTEspKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLCi0gICAgaWYgKGlucyhkLCAiRl9TRVRMSyIsIChsb25nKUZfU0VUTEspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEspKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLVwotICAgIGlmIChpbnMoZCwgIkZfU0VUTEtXIiwgKGxvbmcpRl9TRVRMS1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEtXKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRPV04KLSAgICBpZiAoaW5zKGQsICJGX0dFVE9XTiIsIChsb25nKUZfR0VUT1dOKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVE9XTikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUT1dOCi0gICAgaWYgKGlucyhkLCAiRl9TRVRPV04iLCAobG9uZylGX1NFVE9XTikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRPV04pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVFNJRwotICAgIGlmIChpbnMoZCwgIkZfR0VUU0lHIiwgKGxvbmcpRl9HRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUU0lHKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRTSUcKLSAgICBpZiAoaW5zKGQsICJGX1NFVFNJRyIsIChsb25nKUZfU0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVFNJRykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfUkRMQ0sKLSAgICBpZiAoaW5zKGQsICJGX1JETENLIiwgKGxvbmcpRl9SRExDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9SRExDSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfV1JMQ0sKLSAgICBpZiAoaW5zKGQsICJGX1dSTENLIiwgKGxvbmcpRl9XUkxDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9XUkxDSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVU5MQ0sKLSAgICBpZiAoaW5zKGQsICJGX1VOTENLIiwgKGxvbmcpRl9VTkxDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9VTkxDSykpIHJldHVybiAtMTsKICNlbmRpZgogLyogTEZTIGNvbnN0YW50cyAqLwogI2lmZGVmIEZfR0VUTEs2NAotICAgIGlmIChpbnMoZCwgIkZfR0VUTEs2NCIsIChsb25nKUZfR0VUTEs2NCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRMSzY0KSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMSzY0Ci0gICAgaWYgKGlucyhkLCAiRl9TRVRMSzY0IiwgKGxvbmcpRl9TRVRMSzY0KSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLNjQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLVzY0Ci0gICAgaWYgKGlucyhkLCAiRl9TRVRMS1c2NCIsIChsb25nKUZfU0VUTEtXNjQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEtXNjQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIC8qIEdOVSBleHRlbnNpb25zLCBhcyBvZiBnbGliYyAyLjIuNC4gKi8KICNpZmRlZiBGQVNZTkMKLSAgICBpZiAoaW5zKGQsICJGQVNZTkMiLCAobG9uZylGQVNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZBU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEVBU0UKLSAgICBpZiAoaW5zKGQsICJGX1NFVExFQVNFIiwgKGxvbmcpRl9TRVRMRUFTRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMRUFTRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUTEVBU0UKLSAgICBpZiAoaW5zKGQsICJGX0dFVExFQVNFIiwgKGxvbmcpRl9HRVRMRUFTRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRMRUFTRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfTk9USUZZCi0gICAgaWYgKGlucyhkLCAiRl9OT1RJRlkiLCAobG9uZylGX05PVElGWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9OT1RJRlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKIC8qIE9sZCBCU0QgZmxvY2soKS4gKi8KICNpZmRlZiBGX0VYTENLCi0gICAgaWYgKGlucyhkLCAiRl9FWExDSyIsIChsb25nKUZfRVhMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRVhMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NITENLCi0gICAgaWYgKGlucyhkLCAiRl9TSExDSyIsIChsb25nKUZfU0hMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0hMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogT1MgWCBzcGVjaWZpY3MgKi8KICNpZmRlZiBGX0ZVTExGU1lOQwotICAgIGlmIChpbnMoZCwgIkZfRlVMTEZTWU5DIiwgKGxvbmcpRl9GVUxMRlNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRlVMTEZTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9OT0NBQ0hFCi0gICAgaWYgKGlucyhkLCAiRl9OT0NBQ0hFIiwgKGxvbmcpRl9OT0NBQ0hFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX05PQ0FDSEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogRm9yIEZfe0dFVHxTRVR9RkwgKi8KICNpZmRlZiBGRF9DTE9FWEVDCi0gICAgaWYgKGlucyhkLCAiRkRfQ0xPRVhFQyIsIChsb25nKUZEX0NMT0VYRUMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZEX0NMT0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogRm9yIEZfTk9USUZZICovCiAjaWZkZWYgRE5fQUNDRVNTCi0gICAgaWYgKGlucyhkLCAiRE5fQUNDRVNTIiwgKGxvbmcpRE5fQUNDRVNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9BQ0NFU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9NT0RJRlkKLSAgICBpZiAoaW5zKGQsICJETl9NT0RJRlkiLCAobG9uZylETl9NT0RJRlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX01PRElGWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX0NSRUFURQotICAgIGlmIChpbnMoZCwgIkROX0NSRUFURSIsIChsb25nKUROX0NSRUFURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fQ1JFQVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fREVMRVRFCi0gICAgaWYgKGlucyhkLCAiRE5fREVMRVRFIiwgKGxvbmcpRE5fREVMRVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9ERUxFVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9SRU5BTUUKLSAgICBpZiAoaW5zKGQsICJETl9SRU5BTUUiLCAobG9uZylETl9SRU5BTUUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX1JFTkFNRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX0FUVFJJQgotICAgIGlmIChpbnMoZCwgIkROX0FUVFJJQiIsIChsb25nKUROX0FUVFJJQikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fQVRUUklCKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fTVVMVElTSE9UCi0gICAgaWYgKGlucyhkLCAiRE5fTVVMVElTSE9UIiwgKGxvbmcpRE5fTVVMVElTSE9UKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9NVUxUSVNIT1QpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU1RST1BUU19ICiAgICAgLyogVW5peCA5OCBndWFyYW50ZWVzIHRoYXQgdGhlc2UgYXJlIGluIHN0cm9wdHMuaC4gKi8KLSAgICBJTlMoSV9QVVNIKTsKLSAgICBJTlMoSV9QT1ApOwotICAgIElOUyhJX0xPT0spOwotICAgIElOUyhJX0ZMVVNIKTsKLSAgICBJTlMoSV9GTFVTSEJBTkQpOwotICAgIElOUyhJX1NFVFNJRyk7Ci0gICAgSU5TKElfR0VUU0lHKTsKLSAgICBJTlMoSV9GSU5EKTsKLSAgICBJTlMoSV9QRUVLKTsKLSAgICBJTlMoSV9TUkRPUFQpOwotICAgIElOUyhJX0dSRE9QVCk7Ci0gICAgSU5TKElfTlJFQUQpOwotICAgIElOUyhJX0ZESU5TRVJUKTsKLSAgICBJTlMoSV9TVFIpOwotICAgIElOUyhJX1NXUk9QVCk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUFVTSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QT1ApKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTE9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GTFVTSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GTFVTSEJBTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GSU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BFRUspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU1JET1BUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dSRE9QVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9OUkVBRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GRElOU0VSVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TVFIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU1dST1BUKSkgcmV0dXJuIC0xOwogI2lmZGVmIElfR1dST1BUCiAgICAgLyogZGVzcGl0ZSB0aGUgY29tbWVudCBhYm92ZSwgb2xkLWlzaCBnbGliY3MgbWlzcyBhIGNvdXBsZS4uLiAqLwotICAgIElOUyhJX0dXUk9QVCk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR1dST1BUKSkgcmV0dXJuIC0xOwogI2VuZGlmCi0gICAgSU5TKElfU0VOREZEKTsKLSAgICBJTlMoSV9SRUNWRkQpOwotICAgIElOUyhJX0xJU1QpOwotICAgIElOUyhJX0FUTUFSSyk7Ci0gICAgSU5TKElfQ0tCQU5EKTsKLSAgICBJTlMoSV9HRVRCQU5EKTsKLSAgICBJTlMoSV9DQU5QVVQpOwotICAgIElOUyhJX1NFVENMVElNRSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU0VOREZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1JFQ1ZGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9MSVNUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0FUTUFSSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9DS0JBTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR0VUQkFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9DQU5QVVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU0VUQ0xUSU1FKSkgcmV0dXJuIC0xOwogI2lmZGVmIElfR0VUQ0xUSU1FCi0gICAgSU5TKElfR0VUQ0xUSU1FKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HRVRDTFRJTUUpKSByZXR1cm4gLTE7CiAjZW5kaWYKLSAgICBJTlMoSV9MSU5LKTsKLSAgICBJTlMoSV9VTkxJTkspOwotICAgIElOUyhJX1BMSU5LKTsKLSAgICBJTlMoSV9QVU5MSU5LKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9MSU5LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1VOTElOSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QTElOSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QVU5MSU5LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICByZXR1cm4gMDsKQEAgLTYzMyw3ICs2MTgsNyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9mY250bCh2b2lkKQogewotICAgIFB5T2JqZWN0ICptLCAqZDsKKyAgICBQeU9iamVjdCAqbTsKIAogICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiAqLwogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJmZjbnRsbW9kdWxlKTsKQEAgLTY0MSw3ICs2MjYsNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCi0gICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgYWxsX2lucyhkKTsKKyAgICBhbGxfaW5zKG0pOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nY21vZHVsZS5jIGIvTW9kdWxlcy9nY21vZHVsZS5jCmluZGV4IGY3ODJkZDAuLmE4NGQ3NTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL2djbW9kdWxlLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCiAvKgogICAgTk9URTogYWJvdXQgdW50cmFja2luZyBvZiBtdXRhYmxlIG9iamVjdHMuCi0gICAKKwogICAgQ2VydGFpbiB0eXBlcyBvZiBjb250YWluZXIgY2Fubm90IHBhcnRpY2lwYXRlIGluIGEgcmVmZXJlbmNlIGN5Y2xlLCBhbmQKICAgIHNvIGRvIG5vdCBuZWVkIHRvIGJlIHRyYWNrZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBVbnRyYWNraW5nIHRoZXNlCiAgICBvYmplY3RzIHJlZHVjZXMgdGhlIGNvc3Qgb2YgZ2FyYmFnZSBjb2xsZWN0aW9ucy4gSG93ZXZlciwgZGV0ZXJtaW5pbmcKQEAgLTEzNiwxMCArMTM2LDEwIEBACiAgICBub3Qgc3Vydml2ZSB1bnRpbCBnYXJiYWdlIGNvbGxlY3Rpb24uIEl0IGlzIHRoZXJlZm9yZSBub3Qgd29ydGh3aGlsZQogICAgdG8gdW50cmFjayBlbGlnaWJsZSB0dXBsZXMgYXQgY3JlYXRpb24gdGltZS4KIAotICAgSW5zdGVhZCwgYWxsIHR1cGxlcyBleGNlcHQgdGhlIGVtcHR5IHR1cGxlIGFyZSB0cmFja2VkIHdoZW4gY3JlYXRlZC4gCi0gICBEdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIGl0IGlzIGRldGVybWluZWQgd2hldGhlciBhbnkgc3Vydml2aW5nIHR1cGxlcyAKLSAgIGNhbiBiZSB1bnRyYWNrZWQuIEEgdHVwbGUgY2FuIGJlIHVudHJhY2tlZCBpZiBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZSAKLSAgIGFscmVhZHkgbm90IHRyYWNrZWQuIFR1cGxlcyBhcmUgZXhhbWluZWQgZm9yIHVudHJhY2tpbmcgaW4gYWxsIGdhcmJhZ2UgCisgICBJbnN0ZWFkLCBhbGwgdHVwbGVzIGV4Y2VwdCB0aGUgZW1wdHkgdHVwbGUgYXJlIHRyYWNrZWQgd2hlbiBjcmVhdGVkLgorICAgRHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiBpdCBpcyBkZXRlcm1pbmVkIHdoZXRoZXIgYW55IHN1cnZpdmluZyB0dXBsZXMKKyAgIGNhbiBiZSB1bnRyYWNrZWQuIEEgdHVwbGUgY2FuIGJlIHVudHJhY2tlZCBpZiBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZQorICAgYWxyZWFkeSBub3QgdHJhY2tlZC4gVHVwbGVzIGFyZSBleGFtaW5lZCBmb3IgdW50cmFja2luZyBpbiBhbGwgZ2FyYmFnZQogICAgY29sbGVjdGlvbiBjeWNsZXMuIEl0IG1heSB0YWtlIG1vcmUgdGhhbiBvbmUgY3ljbGUgdG8gdW50cmFjayBhIHR1cGxlLgogCiAgICBEaWN0aW9uYXJpZXMgY29udGFpbmluZyBvbmx5IGltbXV0YWJsZSBvYmplY3RzIGFsc28gZG8gbm90IG5lZWQgdG8gYmUKQEAgLTE1Miw4ICsxNTIsOCBAQAogICAgVGhlIG1vZHVsZSBwcm92aWRlcyB0aGUgcHl0aG9uIGZ1bmN0aW9uIGlzX3RyYWNrZWQob2JqKSwgd2hpY2ggcmV0dXJucwogICAgdGhlIENVUlJFTlQgdHJhY2tpbmcgc3RhdHVzIG9mIHRoZSBvYmplY3QuIFN1YnNlcXVlbnQgZ2FyYmFnZQogICAgY29sbGVjdGlvbnMgbWF5IGNoYW5nZSB0aGUgdHJhY2tpbmcgc3RhdHVzIG9mIHRoZSBvYmplY3QuCi0gICAKLSAgIFVudHJhY2tpbmcgb2YgY2VydGFpbiBjb250YWluZXJzIHdhcyBpbnRyb2R1Y2VkIGluIGlzc3VlICM0Njg4LCBhbmQgCisKKyAgIFVudHJhY2tpbmcgb2YgY2VydGFpbiBjb250YWluZXJzIHdhcyBpbnRyb2R1Y2VkIGluIGlzc3VlICM0Njg4LCBhbmQKICAgIHRoZSBhbGdvcml0aG0gd2FzIHJlZmluZWQgaW4gcmVzcG9uc2UgdG8gaXNzdWUgIzE0Nzc1LgogKi8KIApAQCAtMTY4LDYgKzE2OCwxOCBAQAogc3RhdGljIGludCBkZWJ1ZzsKIHN0YXRpYyBQeU9iamVjdCAqdG1vZCA9IE5VTEw7CiAKKy8qIFJ1bm5pbmcgc3RhdHMgcGVyIGdlbmVyYXRpb24gKi8KK3N0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIHsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgY29sbGVjdGlvbnMgKi8KKyAgICBQeV9zc2l6ZV90IGNvbGxlY3Rpb25zOworICAgIC8qIHRvdGFsIG51bWJlciBvZiBjb2xsZWN0ZWQgb2JqZWN0cyAqLworICAgIFB5X3NzaXplX3QgY29sbGVjdGVkOworICAgIC8qIHRvdGFsIG51bWJlciBvZiB1bmNvbGxlY3RhYmxlIG9iamVjdHMgKHB1dCBpbnRvIGdjLmdhcmJhZ2UpICovCisgICAgUHlfc3NpemVfdCB1bmNvbGxlY3RhYmxlOworfTsKKworc3RhdGljIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIGdlbmVyYXRpb25fc3RhdHNbTlVNX0dFTkVSQVRJT05TXTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2NfcmVmcyB2YWx1ZXMuCiAKQEAgLTIxMSwxMCArMjIzLDEwIEBACiAjZGVmaW5lIEdDX1JFQUNIQUJMRSAgICAgICAgICAgICAgICAgICAgX1B5R0NfUkVGU19SRUFDSEFCTEUKICNkZWZpbmUgR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICBfUHlHQ19SRUZTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFCiAKLSNkZWZpbmUgSVNfVFJBQ0tFRChvKSAoKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyAhPSBHQ19VTlRSQUNLRUQpCi0jZGVmaW5lIElTX1JFQUNIQUJMRShvKSAoKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyA9PSBHQ19SRUFDSEFCTEUpCisjZGVmaW5lIElTX1RSQUNLRUQobykgKF9QeUdDX1JFRlMobykgIT0gR0NfVU5UUkFDS0VEKQorI2RlZmluZSBJU19SRUFDSEFCTEUobykgKF9QeUdDX1JFRlMobykgPT0gR0NfUkVBQ0hBQkxFKQogI2RlZmluZSBJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvKSAoIFwKLSAgICAoQVNfR0MobykpLT5nYy5nY19yZWZzID09IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKQorICAgIF9QeUdDX1JFRlMobykgPT0gR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpCiAKIC8qKiogbGlzdCBmdW5jdGlvbnMgKioqLwogCkBAIC0zMjksOCArMzQxLDggQEAKIHsKICAgICBQeUdDX0hlYWQgKmdjID0gY29udGFpbmVycy0+Z2MuZ2NfbmV4dDsKICAgICBmb3IgKDsgZ2MgIT0gY29udGFpbmVyczsgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgewotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgPT0gR0NfUkVBQ0hBQkxFKTsKLSAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBQeV9SRUZDTlQoRlJPTV9HQyhnYykpOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID09IEdDX1JFQUNIQUJMRSk7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgUHlfUkVGQ05UKEZST01fR0MoZ2MpKSk7CiAgICAgICAgIC8qIFB5dGhvbidzIGN5Y2xpYyBnYyBzaG91bGQgbmV2ZXIgc2VlIGFuIGluY29taW5nIHJlZmNvdW50CiAgICAgICAgICAqIG9mIDA6ICBpZiBzb21ldGhpbmcgZGVjcmVmJ2VkIHRvIDAsIGl0IHNob3VsZCBoYXZlIGJlZW4KICAgICAgICAgICogZGVhbGxvY2F0ZWQgaW1tZWRpYXRlbHkgYXQgdGhhdCB0aW1lLgpAQCAtMzQ5LDcgKzM2MSw3IEBACiAgICAgICAgICAqIHNvIHNlcmlvdXMgdGhhdCBtYXliZSB0aGlzIHNob3VsZCBiZSBhIHJlbGVhc2UtYnVpbGQKICAgICAgICAgICogY2hlY2sgaW5zdGVhZCBvZiBhbiBhc3NlcnQ/CiAgICAgICAgICAqLwotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgIT0gMCk7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCk7CiAgICAgfQogfQogCkBAIC0zNjQsOSArMzc2LDkgQEAKICAgICAgICAgICogZ2VuZXJhdGlvbiBiZWluZyBjb2xsZWN0ZWQsIHdoaWNoIGNhbiBiZSByZWNvZ25pemVkCiAgICAgICAgICAqIGJlY2F1c2Ugb25seSB0aGV5IGhhdmUgcG9zaXRpdmUgZ2NfcmVmcy4KICAgICAgICAgICovCi0gICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyAhPSAwKTsgLyogZWxzZSByZWZjb3VudCB3YXMgdG9vIHNtYWxsICovCi0gICAgICAgIGlmIChnYy0+Z2MuZ2NfcmVmcyA+IDApCi0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcy0tOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOyAvKiBlbHNlIHJlZmNvdW50IHdhcyB0b28gc21hbGwgKi8KKyAgICAgICAgaWYgKF9QeUdDSGVhZF9SRUZTKGdjKSA+IDApCisgICAgICAgICAgICBfUHlHQ0hlYWRfREVDUkVGKGdjKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zOTUsNyArNDA3LDcgQEAKIHsKICAgICBpZiAoUHlPYmplY3RfSVNfR0Mob3ApKSB7CiAgICAgICAgIFB5R0NfSGVhZCAqZ2MgPSBBU19HQyhvcCk7Ci0gICAgICAgIGNvbnN0IFB5X3NzaXplX3QgZ2NfcmVmcyA9IGdjLT5nYy5nY19yZWZzOworICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGdjX3JlZnMgPSBfUHlHQ0hlYWRfUkVGUyhnYyk7CiAKICAgICAgICAgaWYgKGdjX3JlZnMgPT0gMCkgewogICAgICAgICAgICAgLyogVGhpcyBpcyBpbiBtb3ZlX3VucmVhY2hhYmxlJ3MgJ3lvdW5nJyBsaXN0LCBidXQKQEAgLTQwMyw3ICs0MTUsNyBAQAogICAgICAgICAgICAgICogd2UgbmVlZCB0byBkbyBpcyB0ZWxsIG1vdmVfdW5yZWFjaGFibGUgdGhhdCBpdCdzCiAgICAgICAgICAgICAgKiByZWFjaGFibGUuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gMTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgMSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoZ2NfcmVmcyA9PSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSkgewogICAgICAgICAgICAgLyogVGhpcyBoYWQgZ2NfcmVmcyA9IDAgd2hlbiBtb3ZlX3VucmVhY2hhYmxlIGdvdApAQCAtNDEzLDcgKzQyNSw3IEBACiAgICAgICAgICAgICAgKiBhZ2Fpbi4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCByZWFjaGFibGUpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSAxOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCAxKTsKICAgICAgICAgfQogICAgICAgICAvKiBFbHNlIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KICAgICAgICAgICogSWYgZ2NfcmVmcyA+IDAsIGl0IG11c3QgYmUgaW4gbW92ZV91bnJlYWNoYWJsZSdzICd5b3VuZycKQEAgLTQ1Nyw3ICs0NjksNyBAQAogICAgIHdoaWxlIChnYyAhPSB5b3VuZykgewogICAgICAgICBQeUdDX0hlYWQgKm5leHQ7CiAKLSAgICAgICAgaWYgKGdjLT5nYy5nY19yZWZzKSB7CisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykpIHsKICAgICAgICAgICAgIC8qIGdjIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gb3V0c2lkZSB0aGUKICAgICAgICAgICAgICAqIG9yaWdpbmFsICd5b3VuZycuICBNYXJrIGl0IGFzIHN1Y2gsIGFuZCB0cmF2ZXJzZQogICAgICAgICAgICAgICogaXRzIHBvaW50ZXJzIHRvIGZpbmQgYW55IG90aGVyIG9iamVjdHMgdGhhdCBtYXkKQEAgLTQ2OCw4ICs0ODAsOCBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKICAgICAgICAgICAgIHRyYXZlcnNlcHJvYyB0cmF2ZXJzZSA9IFB5X1RZUEUob3ApLT50cF90cmF2ZXJzZTsKLSAgICAgICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyA+IDApOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19SRUFDSEFCTEU7CisgICAgICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID4gMCk7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CiAgICAgICAgICAgICAodm9pZCkgdHJhdmVyc2Uob3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpc2l0cHJvYyl2aXNpdF9yZWFjaGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKil5b3VuZyk7CkBAIC00ODgsNyArNTAwLDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgbmV4dCA9IGdjLT5nYy5nY19uZXh0OwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCB1bnJlYWNoYWJsZSk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSk7CiAgICAgICAgIH0KICAgICAgICAgZ2MgPSBuZXh0OwogICAgIH0KQEAgLTUwOCwyMiArNTIwLDE5IEBACiAgICAgfQogfQogCi0vKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaGFzIGEgZmluYWxpemF0aW9uIG1ldGhvZC4gKi8KKy8qIFJldHVybiB0cnVlIGlmIG9iamVjdCBoYXMgYSBwcmUtUEVQIDQ0MiBmaW5hbGl6YXRpb24gbWV0aG9kLiAqLwogc3RhdGljIGludAotaGFzX2ZpbmFsaXplcihQeU9iamVjdCAqb3ApCitoYXNfbGVnYWN5X2ZpbmFsaXplcihQeU9iamVjdCAqb3ApCiB7Ci0gICAgaWYgKFB5R2VuX0NoZWNrRXhhY3Qob3ApKQotICAgICAgICByZXR1cm4gUHlHZW5fTmVlZHNGaW5hbGl6aW5nKChQeUdlbk9iamVjdCAqKW9wKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBvcC0+b2JfdHlwZS0+dHBfZGVsICE9IE5VTEw7CisgICAgcmV0dXJuIG9wLT5vYl90eXBlLT50cF9kZWwgIT0gTlVMTDsKIH0KIAotLyogTW92ZSB0aGUgb2JqZWN0cyBpbiB1bnJlYWNoYWJsZSB3aXRoIF9fZGVsX18gbWV0aG9kcyBpbnRvIGBmaW5hbGl6ZXJzYC4KKy8qIE1vdmUgdGhlIG9iamVjdHMgaW4gdW5yZWFjaGFibGUgd2l0aCB0cF9kZWwgc2xvdHMgaW50byBgZmluYWxpemVyc2AuCiAgKiBPYmplY3RzIG1vdmVkIGludG8gYGZpbmFsaXplcnNgIGhhdmUgZ2NfcmVmcyBzZXQgdG8gR0NfUkVBQ0hBQkxFOyB0aGUKICAqIG9iamVjdHMgcmVtYWluaW5nIGluIHVucmVhY2hhYmxlIGFyZSBsZWZ0IGF0IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFLgogICovCiBzdGF0aWMgdm9pZAotbW92ZV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqdW5yZWFjaGFibGUsIFB5R0NfSGVhZCAqZmluYWxpemVycykKK21vdmVfbGVnYWN5X2ZpbmFsaXplcnMoUHlHQ19IZWFkICp1bnJlYWNoYWJsZSwgUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQogewogICAgIFB5R0NfSGVhZCAqZ2M7CiAgICAgUHlHQ19IZWFkICpuZXh0OwpAQCAtNTM3LDE0ICs1NDYsMTQgQEAKICAgICAgICAgYXNzZXJ0KElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG9wKSk7CiAgICAgICAgIG5leHQgPSBnYy0+Z2MuZ2NfbmV4dDsKIAotICAgICAgICBpZiAoaGFzX2ZpbmFsaXplcihvcCkpIHsKKyAgICAgICAgaWYgKGhhc19sZWdhY3lfZmluYWxpemVyKG9wKSkgewogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCBmaW5hbGl6ZXJzKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgfQogfQogCi0vKiBBIHRyYXZlcnNhbCBjYWxsYmFjayBmb3IgbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlLiAqLworLyogQSB0cmF2ZXJzYWwgY2FsbGJhY2sgZm9yIG1vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUuICovCiBzdGF0aWMgaW50CiB2aXNpdF9tb3ZlKFB5T2JqZWN0ICpvcCwgUHlHQ19IZWFkICp0b2xpc3QpCiB7CkBAIC01NTIsNyArNTYxLDcgQEAKICAgICAgICAgaWYgKElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG9wKSkgewogICAgICAgICAgICAgUHlHQ19IZWFkICpnYyA9IEFTX0dDKG9wKTsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgdG9saXN0KTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtNTYyLDcgKzU3MSw3IEBACiAgKiBpbnRvIGZpbmFsaXplcnMgc2V0LgogICovCiBzdGF0aWMgdm9pZAotbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlKFB5R0NfSGVhZCAqZmluYWxpemVycykKK21vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUoUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQogewogICAgIHRyYXZlcnNlcHJvYyB0cmF2ZXJzZTsKICAgICBQeUdDX0hlYWQgKmdjID0gZmluYWxpemVycy0+Z2MuZ2NfbmV4dDsKQEAgLTczNSw3ICs3NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBtc2csIFB5X1RZUEUob3ApLT50cF9uYW1lLCBvcCk7CiB9CiAKLS8qIEhhbmRsZSB1bmNvbGxlY3RhYmxlIGdhcmJhZ2UgKGN5Y2xlcyB3aXRoIGZpbmFsaXplcnMsIGFuZCBzdHVmZiByZWFjaGFibGUKKy8qIEhhbmRsZSB1bmNvbGxlY3RhYmxlIGdhcmJhZ2UgKGN5Y2xlcyB3aXRoIHRwX2RlbCBzbG90cywgYW5kIHN0dWZmIHJlYWNoYWJsZQogICogb25seSBmcm9tIHN1Y2ggY3ljbGVzKS4KICAqIElmIERFQlVHX1NBVkVBTEwsIGFsbCBvYmplY3RzIGluIGZpbmFsaXplcnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBtb2R1bGUKICAqIGdhcmJhZ2UgbGlzdCAoYSBQeXRob24gbGlzdCksIGVsc2Ugb25seSB0aGUgb2JqZWN0cyBpbiBmaW5hbGl6ZXJzIHdpdGgKQEAgLTc0NSw3ICs3NTQsNyBAQAogICogVGhlIGZpbmFsaXplcnMgbGlzdCBpcyBtYWRlIGVtcHR5IG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4uCiAgKi8KIHN0YXRpYyBpbnQKLWhhbmRsZV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqZmluYWxpemVycywgUHlHQ19IZWFkICpvbGQpCitoYW5kbGVfbGVnYWN5X2ZpbmFsaXplcnMoUHlHQ19IZWFkICpmaW5hbGl6ZXJzLCBQeUdDX0hlYWQgKm9sZCkKIHsKICAgICBQeUdDX0hlYWQgKmdjID0gZmluYWxpemVycy0+Z2MuZ2NfbmV4dDsKIApAQCAtNzU3LDcgKzc2Niw3IEBACiAgICAgZm9yICg7IGdjICE9IGZpbmFsaXplcnM7IGdjID0gZ2MtPmdjLmdjX25leHQpIHsKICAgICAgICAgUHlPYmplY3QgKm9wID0gRlJPTV9HQyhnYyk7CiAKLSAgICAgICAgaWYgKChkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpIHx8IGhhc19maW5hbGl6ZXIob3ApKSB7CisgICAgICAgIGlmICgoZGVidWcgJiBERUJVR19TQVZFQUxMKSB8fCBoYXNfbGVnYWN5X2ZpbmFsaXplcihvcCkpIHsKICAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC03NjcsNiArNzc2LDYyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitmaW5hbGl6ZV9nYXJiYWdlKFB5R0NfSGVhZCAqY29sbGVjdGFibGUsIFB5R0NfSGVhZCAqb2xkKQoreworICAgIGRlc3RydWN0b3IgZmluYWxpemU7CisgICAgUHlHQ19IZWFkICpnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OworCisgICAgZm9yICg7IGdjICE9IGNvbGxlY3RhYmxlOyBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOworCisgICAgICAgIGlmICghX1B5R0NIZWFkX0ZJTkFMSVpFRChnYykgJiYKKyAgICAgICAgICAgIFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmCisgICAgICAgICAgICAoZmluYWxpemUgPSBQeV9UWVBFKG9wKS0+dHBfZmluYWxpemUpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfRklOQUxJWkVEKGdjLCAxKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihvcCk7CisgICAgICAgICAgICBmaW5hbGl6ZShvcCk7CisgICAgICAgICAgICBpZiAoUHlfUkVGQ05UKG9wKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgLyogb3Agd2lsbCBiZSBkZXN0cm95ZWQgKi8KKyAgICAgICAgICAgICAgICBnYyA9IGdjLT5nYy5nY19wcmV2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKG9wKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogV2FsayB0aGUgY29sbGVjdGFibGUgbGlzdCBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSByZWFsbHkgdW5yZWFjaGFibGUKKyAgIGZyb20gdGhlIG91dHNpZGUgKHNvbWUgb2JqZWN0cyBjb3VsZCBoYXZlIGJlZW4gcmVzdXJyZWN0ZWQgYnkgYQorICAgZmluYWxpemVyKS4gKi8KK3N0YXRpYyBpbnQKK2NoZWNrX2dhcmJhZ2UoUHlHQ19IZWFkICpjb2xsZWN0YWJsZSkKK3sKKyAgICBQeUdDX0hlYWQgKmdjOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgUHlfUkVGQ05UKEZST01fR0MoZ2MpKSk7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCk7CisgICAgfQorICAgIHN1YnRyYWN0X3JlZnMoY29sbGVjdGFibGUpOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgPj0gMCk7CisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZXZpdmVfZ2FyYmFnZShQeUdDX0hlYWQgKmNvbGxlY3RhYmxlKQoreworICAgIFB5R0NfSGVhZCAqZ2M7CisgICAgZm9yIChnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OyBnYyAhPSBjb2xsZWN0YWJsZTsKKyAgICAgICAgIGdjID0gZ2MtPmdjLmdjX25leHQpIHsKKyAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOworICAgIH0KK30KKwogLyogQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBieSBjbGVhcmluZyB0aGUgY29udGFpbmVycyBpbnZvbHZlZC4gIFRoaXMgaXMKICAqIHRyaWNreSBidXNpbmVzcyBhcyB0aGUgbGlzdHMgY2FuIGJlIGNoYW5naW5nIGFuZCB3ZSBkb24ndCBrbm93IHdoaWNoCiAgKiBvYmplY3RzIG1heSBiZSBmcmVlZC4gIEl0IGlzIHBvc3NpYmxlIEkgc2NyZXdlZCBzb21ldGhpbmcgdXAgaGVyZS4KQEAgLTc4MCw3ICs4NDUsNiBAQAogICAgICAgICBQeUdDX0hlYWQgKmdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7CiAgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOwogCi0gICAgICAgIGFzc2VydChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpOwogICAgICAgICBpZiAoZGVidWcgJiBERUJVR19TQVZFQUxMKSB7CiAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKTsKICAgICAgICAgfQpAQCAtNzk0LDcgKzg1OCw3IEBACiAgICAgICAgIGlmIChjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dCA9PSBnYykgewogICAgICAgICAgICAgLyogb2JqZWN0IGlzIHN0aWxsIGFsaXZlLCBtb3ZlIGl0LCBpdCBtYXkgZGllIGxhdGVyICovCiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIG9sZCk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTg0MSw3ICs5MDUsOCBAQAogLyogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbi4gIFJlYWQgdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUKICAqIGNvbGxlY3Rpb24gcHJvY2VzcyB3b3Jrcy4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90Ci1jb2xsZWN0KGludCBnZW5lcmF0aW9uLCBQeV9zc2l6ZV90ICpuX2NvbGxlY3RlZCwgUHlfc3NpemVfdCAqbl91bmNvbGxlY3RhYmxlKQorY29sbGVjdChpbnQgZ2VuZXJhdGlvbiwgUHlfc3NpemVfdCAqbl9jb2xsZWN0ZWQsIFB5X3NzaXplX3QgKm5fdW5jb2xsZWN0YWJsZSwKKyAgICAgICAgaW50IG5vZmFpbCkKIHsKICAgICBpbnQgaTsKICAgICBQeV9zc2l6ZV90IG0gPSAwOyAvKiAjIG9iamVjdHMgY29sbGVjdGVkICovCkBAIC04NTIsNiArOTE3LDcgQEAKICAgICBQeUdDX0hlYWQgZmluYWxpemVyczsgIC8qIG9iamVjdHMgd2l0aCwgJiByZWFjaGFibGUgZnJvbSwgX19kZWxfXyAqLwogICAgIFB5R0NfSGVhZCAqZ2M7CiAgICAgZG91YmxlIHQxID0gMC4wOworICAgIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzICpzdGF0cyA9ICZnZW5lcmF0aW9uX3N0YXRzW2dlbmVyYXRpb25dOwogCiAgICAgaWYgKGRlYnVnICYgREVCVUdfU1RBVFMpIHsKICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoImdjOiBjb2xsZWN0aW5nIGdlbmVyYXRpb24gJWQuLi5cbiIsCkBAIC05MTUsMTkgKzk4MSwxNSBAQAogICAgIH0KIAogICAgIC8qIEFsbCBvYmplY3RzIGluIHVucmVhY2hhYmxlIGFyZSB0cmFzaCwgYnV0IG9iamVjdHMgcmVhY2hhYmxlIGZyb20KLSAgICAgKiBmaW5hbGl6ZXJzIGNhbid0IHNhZmVseSBiZSBkZWxldGVkLiAgUHl0aG9uIHByb2dyYW1tZXJzIHNob3VsZCB0YWtlCi0gICAgICogY2FyZSBub3QgdG8gY3JlYXRlIHN1Y2ggdGhpbmdzLiAgRm9yIFB5dGhvbiwgZmluYWxpemVycyBtZWFucwotICAgICAqIGluc3RhbmNlIG9iamVjdHMgd2l0aCBfX2RlbF9fIG1ldGhvZHMuICBXZWFrcmVmcyB3aXRoIGNhbGxiYWNrcwotICAgICAqIGNhbiBhbHNvIGNhbGwgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGJ1dCB0aGV5IHdpbGwgYmUgZGVhbHQgd2l0aCBieQotICAgICAqIGhhbmRsZV93ZWFrcmVmcygpLgorICAgICAqIGxlZ2FjeSBmaW5hbGl6ZXJzIChlLmcuIHRwX2RlbCkgY2FuJ3Qgc2FmZWx5IGJlIGRlbGV0ZWQuCiAgICAgICovCiAgICAgZ2NfbGlzdF9pbml0KCZmaW5hbGl6ZXJzKTsKLSAgICBtb3ZlX2ZpbmFsaXplcnMoJnVucmVhY2hhYmxlLCAmZmluYWxpemVycyk7Ci0gICAgLyogZmluYWxpemVycyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cyB3aXRoIGEgZmluYWxpemVyOworICAgIG1vdmVfbGVnYWN5X2ZpbmFsaXplcnMoJnVucmVhY2hhYmxlLCAmZmluYWxpemVycyk7CisgICAgLyogZmluYWxpemVycyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cyB3aXRoIGEgbGVnYWN5IGZpbmFsaXplcjsKICAgICAgKiB1bnJlYWNoYWJsZSBvYmplY3RzIHJlYWNoYWJsZSAqZnJvbSogdGhvc2UgYXJlIGFsc28gdW5jb2xsZWN0YWJsZSwKICAgICAgKiBhbmQgd2UgbW92ZSB0aG9zZSBpbnRvIHRoZSBmaW5hbGl6ZXJzIGxpc3QgdG9vLgogICAgICAqLwotICAgIG1vdmVfZmluYWxpemVyX3JlYWNoYWJsZSgmZmluYWxpemVycyk7CisgICAgbW92ZV9sZWdhY3lfZmluYWxpemVyX3JlYWNoYWJsZSgmZmluYWxpemVycyk7CiAKICAgICAvKiBDb2xsZWN0IHN0YXRpc3RpY3Mgb24gY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQKICAgICAgKiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCkBAIC05NDMsMTEgKzEwMDUsMjAgQEAKICAgICAvKiBDbGVhciB3ZWFrcmVmcyBhbmQgaW52b2tlIGNhbGxiYWNrcyBhcyBuZWNlc3NhcnkuICovCiAgICAgbSArPSBoYW5kbGVfd2Vha3JlZnMoJnVucmVhY2hhYmxlLCBvbGQpOwogCi0gICAgLyogQ2FsbCB0cF9jbGVhciBvbiBvYmplY3RzIGluIHRoZSB1bnJlYWNoYWJsZSBzZXQuICBUaGlzIHdpbGwgY2F1c2UKLSAgICAgKiB0aGUgcmVmZXJlbmNlIGN5Y2xlcyB0byBiZSBicm9rZW4uICBJdCBtYXkgYWxzbyBjYXVzZSBzb21lIG9iamVjdHMKLSAgICAgKiBpbiBmaW5hbGl6ZXJzIHRvIGJlIGZyZWVkLgotICAgICAqLwotICAgIGRlbGV0ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsKKyAgICAvKiBDYWxsIHRwX2ZpbmFsaXplIG9uIG9iamVjdHMgd2hpY2ggaGF2ZSBvbmUuICovCisgICAgZmluYWxpemVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisKKyAgICBpZiAoY2hlY2tfZ2FyYmFnZSgmdW5yZWFjaGFibGUpKSB7CisgICAgICAgIHJldml2ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSk7CisgICAgICAgIGdjX2xpc3RfbWVyZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogQ2FsbCB0cF9jbGVhciBvbiBvYmplY3RzIGluIHRoZSB1bnJlYWNoYWJsZSBzZXQuICBUaGlzIHdpbGwgY2F1c2UKKyAgICAgICAgICogdGhlIHJlZmVyZW5jZSBjeWNsZXMgdG8gYmUgYnJva2VuLiAgSXQgbWF5IGFsc28gY2F1c2Ugc29tZSBvYmplY3RzCisgICAgICAgICAqIGluIGZpbmFsaXplcnMgdG8gYmUgZnJlZWQuCisgICAgICAgICAqLworICAgICAgICBkZWxldGVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisgICAgfQogCiAgICAgLyogQ29sbGVjdCBzdGF0aXN0aWNzIG9uIHVuY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQKICAgICAgKiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICovCkBAIC05NzgsNyArMTA0OSw3IEBACiAgICAgICogcmVhY2hhYmxlIGxpc3Qgb2YgZ2FyYmFnZS4gIFRoZSBwcm9ncmFtbWVyIGhhcyB0byBkZWFsIHdpdGgKICAgICAgKiB0aGlzIGlmIHRoZXkgaW5zaXN0IG9uIGNyZWF0aW5nIHRoaXMgdHlwZSBvZiBzdHJ1Y3R1cmUuCiAgICAgICovCi0gICAgKHZvaWQpaGFuZGxlX2ZpbmFsaXplcnMoJmZpbmFsaXplcnMsIG9sZCk7CisgICAgKHZvaWQpaGFuZGxlX2xlZ2FjeV9maW5hbGl6ZXJzKCZmaW5hbGl6ZXJzLCBvbGQpOwogCiAgICAgLyogQ2xlYXIgZnJlZSBsaXN0IG9ubHkgZHVyaW5nIHRoZSBjb2xsZWN0aW9uIG9mIHRoZSBoaWdoZXN0CiAgICAgICogZ2VuZXJhdGlvbiAqLwpAQCAtOTg3LDE2ICsxMDU4LDI1IEBACiAgICAgfQogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgaWYgKGdjX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ2Nfc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImdhcmJhZ2UgY29sbGVjdGlvbiIpOwotICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZ2Nfc3RyKTsKLSAgICAgICAgUHlfRmF0YWxFcnJvcigidW5leHBlY3RlZCBleGNlcHRpb24gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiIpOworICAgICAgICBpZiAobm9mYWlsKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGdjX3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdjX3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShnY19zdHIpOworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigidW5leHBlY3RlZCBleGNlcHRpb24gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiIpOworICAgICAgICB9CiAgICAgfQogCisgICAgLyogVXBkYXRlIHN0YXRzICovCiAgICAgaWYgKG5fY29sbGVjdGVkKQogICAgICAgICAqbl9jb2xsZWN0ZWQgPSBtOwogICAgIGlmIChuX3VuY29sbGVjdGFibGUpCiAgICAgICAgICpuX3VuY29sbGVjdGFibGUgPSBuOworICAgIHN0YXRzLT5jb2xsZWN0aW9ucysrOworICAgIHN0YXRzLT5jb2xsZWN0ZWQgKz0gbTsKKyAgICBzdGF0cy0+dW5jb2xsZWN0YWJsZSArPSBuOwogICAgIHJldHVybiBuK207CiB9CiAKQEAgLTEwNDUsNyArMTEyNSw3IEBACiB7CiAgICAgUHlfc3NpemVfdCByZXN1bHQsIGNvbGxlY3RlZCwgdW5jb2xsZWN0YWJsZTsKICAgICBpbnZva2VfZ2NfY2FsbGJhY2soInN0YXJ0IiwgZ2VuZXJhdGlvbiwgMCwgMCk7Ci0gICAgcmVzdWx0ID0gY29sbGVjdChnZW5lcmF0aW9uLCAmY29sbGVjdGVkLCAmdW5jb2xsZWN0YWJsZSk7CisgICAgcmVzdWx0ID0gY29sbGVjdChnZW5lcmF0aW9uLCAmY29sbGVjdGVkLCAmdW5jb2xsZWN0YWJsZSwgMCk7CiAgICAgaW52b2tlX2djX2NhbGxiYWNrKCJzdG9wIiwgZ2VuZXJhdGlvbiwgY29sbGVjdGVkLCB1bmNvbGxlY3RhYmxlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTM0Myw2ICsxNDIzLDUyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUHlEb2NfU1RSVkFSKGdjX2dldF9zdGF0c19fZG9jX18sCisiZ2V0X3N0YXRzKCkgLT4gWy4uLl1cbiIKKyJcbiIKKyJSZXR1cm4gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBjb250YWluaW5nIHBlci1nZW5lcmF0aW9uIHN0YXRpc3RpY3MuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2djX2dldF9zdGF0cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICBpbnQgaTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIHN0YXRzW05VTV9HRU5FUkFUSU9OU10sICpzdDsKKworICAgIC8qIFRvIGdldCBjb25zaXN0ZW50IHZhbHVlcyBkZXNwaXRlIGFsbG9jYXRpb25zIHdoaWxlIGNvbnN0cnVjdGluZworICAgICAgIHRoZSByZXN1bHQgbGlzdCwgd2UgdXNlIGEgc25hcHNob3Qgb2YgdGhlIHJ1bm5pbmcgc3RhdHMuICovCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9HRU5FUkFUSU9OUzsgaSsrKSB7CisgICAgICAgIHN0YXRzW2ldID0gZ2VuZXJhdGlvbl9zdGF0c1tpXTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0dFTkVSQVRJT05TOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgICAgIHN0ID0gJnN0YXRzW2ldOworICAgICAgICBkaWN0ID0gUHlfQnVpbGRWYWx1ZSgie3Nuc25zbn0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sbGVjdGlvbnMiLCBzdC0+Y29sbGVjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xsZWN0ZWQiLCBzdC0+Y29sbGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5jb2xsZWN0YWJsZSIsIHN0LT51bmNvbGxlY3RhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgZGljdCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogUHlEb2NfU1RSVkFSKGdjX2lzX3RyYWNrZWRfX2RvY19fLAogImlzX3RyYWNrZWQob2JqKSAtPiBib29sXG4iCiAiXG4iCkBAIC0xMzkzLDYgKzE1MTksNyBAQAogICAgIHsiY29sbGVjdCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWdjX2NvbGxlY3QsCiAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsICAgICAgICAgICBnY19jb2xsZWN0X19kb2NfX30sCiAgICAgeyJnZXRfb2JqZWN0cyIsICAgIGdjX2dldF9vYmplY3RzLE1FVEhfTk9BUkdTLCAgZ2NfZ2V0X29iamVjdHNfX2RvY19ffSwKKyAgICB7ImdldF9zdGF0cyIsICAgICAgZ2NfZ2V0X3N0YXRzLCBNRVRIX05PQVJHUywgZ2NfZ2V0X3N0YXRzX19kb2NfX30sCiAgICAgeyJpc190cmFja2VkIiwgICAgIGdjX2lzX3RyYWNrZWQsIE1FVEhfTywgICAgICAgZ2NfaXNfdHJhY2tlZF9fZG9jX199LAogICAgIHsiZ2V0X3JlZmVycmVycyIsICBnY19nZXRfcmVmZXJyZXJzLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgIGdjX2dldF9yZWZlcnJlcnNfX2RvY19ffSwKQEAgLTE0ODAsOCArMTYwNywyOSBAQAogICAgIHJldHVybiBuOwogfQogCitQeV9zc2l6ZV90CitfUHlHQ19Db2xsZWN0Tm9GYWlsKHZvaWQpCit7CisgICAgUHlfc3NpemVfdCBuOworCisgICAgLyogSWRlYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbiBpbnRlcnByZXRlciBzaHV0ZG93biwKKyAgICAgICBhbmQgdGhlcmVmb3JlIG5vdCByZWN1cnNpdmVseS4gIFVuZm9ydHVuYXRlbHksIHdoZW4gdGhlcmUgYXJlIGRhZW1vbgorICAgICAgIHRocmVhZHMsIGEgZGFlbW9uIHRocmVhZCBjYW4gc3RhcnQgYSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duIChhbmQgdGhlbiBuZXZlciBmaW5pc2ggaXQpLgorICAgICAgIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODcxMyNtc2cxOTUxNzggZm9yIGFuIGV4YW1wbGUuCisgICAgICAgKi8KKyAgICBpZiAoY29sbGVjdGluZykKKyAgICAgICAgbiA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGNvbGxlY3RpbmcgPSAxOworICAgICAgICBuID0gY29sbGVjdChOVU1fR0VORVJBVElPTlMgLSAxLCBOVUxMLCBOVUxMLCAxKTsKKyAgICAgICAgY29sbGVjdGluZyA9IDA7CisgICAgfQorICAgIHJldHVybiBuOworfQorCiB2b2lkCi1fUHlHQ19GaW5pKHZvaWQpCitfUHlHQ19EdW1wU2h1dGRvd25TdGF0cyh2b2lkKQogewogICAgIGlmICghKGRlYnVnICYgREVCVUdfU0FWRUFMTCkKICAgICAgICAgJiYgZ2FyYmFnZSAhPSBOVUxMICYmIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSA+IDApIHsKQEAgLTE0OTIsOCArMTY0MCwxMiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtZXNzYWdlID0gImdjOiAlemQgdW5jb2xsZWN0YWJsZSBvYmplY3RzIGF0ICIgXAogICAgICAgICAgICAgICAgICJzaHV0ZG93bjsgdXNlIGdjLnNldF9kZWJ1ZyhnYy5ERUJVR19VTkNPTExFQ1RBQkxFKSB0byBsaXN0IHRoZW0iOwotICAgICAgICBpZiAoUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SZXNvdXJjZVdhcm5pbmcsIDAsIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSkgPCAwKQorICAgICAgICAvKiBQeUVycl9XYXJuRm9ybWF0IGRvZXMgdG9vIG1hbnkgdGhpbmdzIGFuZCB3ZSBhcmUgYXQgc2h1dGRvd24sCisgICAgICAgICAgIHRoZSB3YXJuaW5ncyBtb2R1bGUncyBkZXBlbmRlbmNpZXMgKGUuZy4gbGluZWNhY2hlKSBtYXkgYmUgZ29uZQorICAgICAgICAgICBhbHJlYWR5LiAqLworICAgICAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0Rm9ybWF0KFB5RXhjX1Jlc291cmNlV2FybmluZywgImdjIiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2MiLCBOVUxMLCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSkpCiAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CiAgICAgICAgIGlmIChkZWJ1ZyAmIERFQlVHX1VOQ09MTEVDVEFCTEUpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTCwgKmJ5dGVzID0gTlVMTDsKQEAgLTE1MDIsNyArMTY1NCw3IEBACiAgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGdhcmJhZ2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoCi0gICAgICAgICAgICAgICAgICAgICIgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICIgICAgICAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICB9CkBAIC0xNTEwLDcgKzE2NjIsMTMgQEAKICAgICAgICAgICAgIFB5X1hERUNSRUYoYnl0ZXMpOwogICAgICAgICB9CiAgICAgfQorfQorCit2b2lkCitfUHlHQ19GaW5pKHZvaWQpCit7CiAgICAgUHlfQ0xFQVIoY2FsbGJhY2tzKTsKKyAgICBQeV9DTEVBUih0bW9kKTsKIH0KIAogLyogZm9yIGRlYnVnZ2luZyAqLwpAQCAtMTU2OSw3ICsxNzI3LDggQEAKICAgICAgICAgc2l6ZW9mKFB5R0NfSGVhZCkgKyBiYXNpY3NpemUpOwogICAgIGlmIChnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIGctPmdjLmdjX3JlZnMgPSBHQ19VTlRSQUNLRUQ7CisgICAgZy0+Z2MuZ2NfcmVmcyA9IDA7CisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIEdDX1VOVFJBQ0tFRCk7CiAgICAgZ2VuZXJhdGlvbnNbMF0uY291bnQrKzsgLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBHQyBvYmplY3RzICovCiAgICAgaWYgKGdlbmVyYXRpb25zWzBdLmNvdW50ID4gZ2VuZXJhdGlvbnNbMF0udGhyZXNob2xkICYmCiAgICAgICAgIGVuYWJsZWQgJiYKQEAgLTE1OTYsOCArMTc1NSwxNSBAQAogUHlWYXJPYmplY3QgKgogX1B5T2JqZWN0X0dDX05ld1ZhcihQeVR5cGVPYmplY3QgKnRwLCBQeV9zc2l6ZV90IG5pdGVtcykKIHsKLSAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IF9QeU9iamVjdF9WQVJfU0laRSh0cCwgbml0ZW1zKTsKLSAgICBQeVZhck9iamVjdCAqb3AgPSAoUHlWYXJPYmplY3QgKikgX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplKTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeVZhck9iamVjdCAqb3A7CisKKyAgICBpZiAobml0ZW1zIDwgMCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHAsIG5pdGVtcyk7CisgICAgb3AgPSAoUHlWYXJPYmplY3QgKikgX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplKTsKICAgICBpZiAob3AgIT0gTlVMTCkKICAgICAgICAgb3AgPSBQeU9iamVjdF9JTklUX1ZBUihvcCwgdHAsIG5pdGVtcyk7CiAgICAgcmV0dXJuIG9wOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nZXRwYXRoLmMgYi9Nb2R1bGVzL2dldHBhdGguYwppbmRleCBmZjE0ZmRkLi4xYTQzMTUwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2dldHBhdGguYworKysgYi9Nb2R1bGVzL2dldHBhdGguYwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAgICAgICAgICAgICB3Y3NuY3B5KHByZWZpeCwgYXJndjBfcGF0aCwgTUFYUEFUSExFTik7CiAgICAgICAgICAgICBwcmVmaXhbTUFYUEFUSExFTl0gPSBMJ1wwJzsKICAgICAgICAgICAgIGpvaW5wYXRoKHByZWZpeCwgdnBhdGgpOwotICAgICAgICAgICAgUHlNZW1fRnJlZSh2cGF0aCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHZwYXRoKTsKICAgICAgICAgICAgIGpvaW5wYXRoKHByZWZpeCwgTCJMaWIiKTsKICAgICAgICAgICAgIGpvaW5wYXRoKHByZWZpeCwgTEFORE1BUkspOwogICAgICAgICAgICAgaWYgKGlzbW9kdWxlKHByZWZpeCkpCkBAIC01NjIsOCArNTYyLDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgaWYgKHBhdGhfYnVmZmVyICE9IE5VTEwpCi0gICAgICAgIFB5TWVtX0ZyZWUocGF0aF9idWZmZXIpOworICAgIFB5TWVtX1Jhd0ZyZWUocGF0aF9idWZmZXIpOwogICAgIGlmIChwcm9ncGF0aFswXSAhPSBTRVAgJiYgcHJvZ3BhdGhbMF0gIT0gJ1wwJykKICAgICAgICAgYWJzb2x1dGl6ZShwcm9ncGF0aCk7CiAgICAgd2NzbmNweShhcmd2MF9wYXRoLCBwcm9ncGF0aCwgTUFYUEFUSExFTik7CkBAIC02MDUsNyArNjA0LDcgQEAKICAgICAgICAgICAgIC8qIFVzZSB0aGUgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkgYXMgdGhlIHByb2dwYXRoICovCiAgICAgICAgICAgICB3Y3NuY3B5KGFyZ3YwX3BhdGgsIHdidWYsIE1BWFBBVEhMRU4pOwogICAgICAgICB9Ci0gICAgICAgIFB5TWVtX0ZyZWUod2J1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod2J1Zik7CiAgICAgfQogI2VuZGlmCiAKQEAgLTcwNywxMyArNzA2LDExIEBACiAgICAgICovCiAgICAgYnVmc3ogPSAwOwogCi0gICAgaWYgKF9ydHB5cGF0aCkgeworICAgIGlmIChfcnRweXBhdGggJiYgX3J0cHlwYXRoWzBdICE9ICdcMCcpIHsKICAgICAgICAgc2l6ZV90IHJ0cHlwYXRoX2xlbjsKICAgICAgICAgcnRweXBhdGggPSBfUHlfY2hhcjJ3Y2hhcihfcnRweXBhdGgsICZydHB5cGF0aF9sZW4pOwogICAgICAgICBpZiAocnRweXBhdGggIT0gTlVMTCkKICAgICAgICAgICAgIGJ1ZnN6ICs9IHJ0cHlwYXRoX2xlbiArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9ydHB5cGF0aCA9IE5VTEw7CiAgICAgfQogCiAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwpAQCAtODE4LDExICs4MTUsMTAgQEAKICAgICBlbHNlCiAgICAgICAgIHdjc25jcHkoZXhlY19wcmVmaXgsIF9leGVjX3ByZWZpeCwgTUFYUEFUSExFTik7CiAKLSAgICBQeU1lbV9GcmVlKF9weXRob25wYXRoKTsKLSAgICBQeU1lbV9GcmVlKF9wcmVmaXgpOwotICAgIFB5TWVtX0ZyZWUoX2V4ZWNfcHJlZml4KTsKLSAgICBpZiAocnRweXBhdGggIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRnJlZShydHB5cGF0aCk7CisgICAgUHlNZW1fUmF3RnJlZShfcHl0aG9ucGF0aCk7CisgICAgUHlNZW1fUmF3RnJlZShfcHJlZml4KTsKKyAgICBQeU1lbV9SYXdGcmVlKF9leGVjX3ByZWZpeCk7CisgICAgUHlNZW1fUmF3RnJlZShydHB5cGF0aCk7CiB9CiAKIApAQCAtODMyLDcgKzgyOCw3IEBACiB7CiAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQpCi0gICAgICAgICAgICBQeU1lbV9GcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CiAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7CiAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDA7CiAgICAgfQpAQCAtODQxLDcgKzgzNyw3IEBACiAgICAgICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgICAgICB3Y3NuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKICAgICAgICAgZXhlY19wcmVmaXhbMF0gPSBwcmVmaXhbMF0gPSBMJ1wwJzsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUHlNZW1fTWFsbG9jKCh3Y3NsZW4ocGF0aCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX1Jhd01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAxOwogICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpCiAgICAgICAgICAgICB3Y3NjcHkobW9kdWxlX3NlYXJjaF9wYXRoLCBwYXRoKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ3JwbW9kdWxlLmMgYi9Nb2R1bGVzL2dycG1vZHVsZS5jCmluZGV4IDA0MmNmMDUuLmE4NWEyNzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ3JwbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9ncnBtb2R1bGUuYwpAQCAtMjEwLDkgKzIxMCwxNCBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RHcnBUeXBlLCAmc3RydWN0X2dyb3VwX3R5cGVfZGVzYyk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInN0cnVjdF9ncm91cCIsIChQeU9iamVjdCAqKSAmU3RydWN0R3JwVHlwZSk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdEdycFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X2dyb3VwX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAic3RydWN0X2dyb3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJlN0cnVjdEdycFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9oYXNobGliLmggYi9Nb2R1bGVzL2hhc2hsaWIuaAppbmRleCA0NTk5MTQ2Li41MWM2OGY2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2hhc2hsaWIuaAorKysgYi9Nb2R1bGVzL2hhc2hsaWIuaApAQCAtMjYsMyArMjYsMzYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOyBcCiAgICAgICAgIH0gXAogICAgIH0gd2hpbGUoMCk7CisKKy8qCisgKiBIZWxwZXIgY29kZSB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gdGhlIGhhc2ggb2JqZWN0IHdoZW4gdGhlIEdJTCBpcworICogcmVsZWFzZWQgYXJvdW5kIGEgQ1BVIGNvbnN1bWluZyBoYXNobGliIG9wZXJhdGlvbi4gQWxsIGNvZGUgcGF0aHMgdGhhdAorICogYWNjZXNzIGEgbXV0YWJsZSBwYXJ0IG9mIG9iaiBtdXN0IGJlIGVuY2xvc2VkIGluIGEgRU5URVJfSEFTSExJQiAvCisgKiBMRUFWRV9IQVNITElCIGJsb2NrIG9yIGV4cGxpY2l0bHkgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgbG9jayBpbnNpZGUKKyAqIGEgUFlfQkVHSU4gLyBFTkRfQUxMT1dfVEhSRUFEUyBibG9jayBpZiB0aGV5IHdpc2ggdG8gcmVsZWFzZSB0aGUgR0lMIGZvcgorICogYW4gb3BlcmF0aW9uLgorICovCisKKyNpZmRlZiBXSVRIX1RIUkVBRAorI2luY2x1ZGUgInB5dGhyZWFkLmgiCisgICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikgXAorICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAorICAgICAgICAgICAgaWYgKCFQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDApKSB7IFwKKyAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTIFwKKyAgICAgICAgICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDEpOyBcCisgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0KKyAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKSBcCisgICAgICAgIGlmICgob2JqKS0+bG9jaykgeyBcCisgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soKG9iaiktPmxvY2spOyBcCisgICAgICAgIH0KKyNlbHNlCisgICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikKKyAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKQorI2VuZGlmCisKKy8qIFRPRE8oZ3BzKTogV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1vZHVsZSBvciBFVlBvYmplY3QgYXR0cmlidXRlCisgKiB0byBhbGxvdyB0aGUgdXNlciB0byBvcHRpbWl6ZSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0gdGhleSdyZSB1c2luZy4gKi8KKyNkZWZpbmUgSEFTSExJQl9HSUxfTUlOU0laRSAyMDQ4CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCmluZGV4IDAxMjMxODEuLjhiZTYyY2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwpAQCAtNDAxLDcgKzQwMSw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICppdDsKLSAgICBpbnQgbnVtcmVhZDsKKyAgICBpbnQgbnVtcmVhZDsgIC8qIDAgPD0gbnVtcmVhZCA8PSBMSU5LQ0VMTFMgKi8KICAgICBQeU9iamVjdCAqbmV4dGxpbms7CiAgICAgUHlPYmplY3QgKih2YWx1ZXNbTElOS0NFTExTXSk7CiB9IHRlZWRhdGFvYmplY3Q7CkBAIC00MDksNyArNDA5LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgdGVlZGF0YW9iamVjdCAqZGF0YW9iajsKLSAgICBpbnQgaW5kZXg7CisgICAgaW50IGluZGV4OyAgICAvKiAwIDw9IGluZGV4IDw9IExJTktDRUxMUyAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKIH0gdGVlb2JqZWN0OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL21haW4uYyBiL01vZHVsZXMvbWFpbi5jCmluZGV4IDNjZmM5YzMuLjkxNzEwNzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWFpbi5jCisrKyBiL01vZHVsZXMvbWFpbi5jCkBAIC0yMiwxNSArMjIsMTEgQEAKICNpbmNsdWRlIDxjcnRkYmcuaD4KICNlbmRpZgogCi0jaWYgKGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKSkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICNkZWZpbmUgUFlUSE9OSE9NRUhFTFAgIjxwcmVmaXg+XFxsaWIiCiAjZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIFBZVEhPTkhPTUVIRUxQICI8cHJlZml4Pi9MaWIiCi0jZWxzZQogI2RlZmluZSBQWVRIT05IT01FSEVMUCAiPHByZWZpeD4vcHl0aG9uWC5YIgogI2VuZGlmCi0jZW5kaWYKIAogI2luY2x1ZGUgInB5Z2V0b3B0LmgiCiAKQEAgLTQ3LDcgKzQzLDcgQEAKIHN0YXRpYyBpbnQgIG9yaWdfYXJnYzsKIAogLyogY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KLSNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlKbTpPcVJzU3R1dlZXOnhYOj8iCisjZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSUptOk9xUnNTdHV2Vlc6eFg6PyIKIAogI2RlZmluZSBQUk9HUkFNX09QVFMgQkFTRV9PUFRTCiAKQEAgLTY5LDYgKzY1LDcgQEAKIHN0YXRpYyBjaGFyICp1c2FnZV8yID0gIlwKIC1pICAgICA6IGluc3BlY3QgaW50ZXJhY3RpdmVseSBhZnRlciBydW5uaW5nIHNjcmlwdDsgZm9yY2VzIGEgcHJvbXB0IGV2ZW5cblwKICAgICAgICAgIGlmIHN0ZGluIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHRlcm1pbmFsOyBhbHNvIFBZVEhPTklOU1BFQ1Q9eFxuXAorLUkgICAgIDogaXNvbGF0ZSBQeXRob24gZnJvbSB0aGUgdXNlcidzIGVudmlyb25tZW50IChpbXBsaWVzIC1FIGFuZCAtcylcblwKIC1tIG1vZCA6IHJ1biBsaWJyYXJ5IG1vZHVsZSBhcyBhIHNjcmlwdCAodGVybWluYXRlcyBvcHRpb24gbGlzdClcblwKIC1PICAgICA6IG9wdGltaXplIGdlbmVyYXRlZCBieXRlY29kZSBzbGlnaHRseTsgYWxzbyBQWVRIT05PUFRJTUlaRT14XG5cCiAtT08gICAgOiByZW1vdmUgZG9jLXN0cmluZ3MgaW4gYWRkaXRpb24gdG8gdGhlIC1PIG9wdGltaXphdGlvbnNcblwKQEAgLTE0Niw3ICsxNDMsNyBAQAogewogICAgIGNoYXIgKnN0YXJ0dXAgPSBQeV9HRVRFTlYoIlBZVEhPTlNUQVJUVVAiKTsKICAgICBpZiAoc3RhcnR1cCAhPSBOVUxMICYmIHN0YXJ0dXBbMF0gIT0gJ1wwJykgewotICAgICAgICBGSUxFICpmcCA9IGZvcGVuKHN0YXJ0dXAsICJyIik7CisgICAgICAgIEZJTEUgKmZwID0gX1B5X2ZvcGVuKHN0YXJ0dXAsICJyIik7CiAgICAgICAgIGlmIChmcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAodm9pZCkgUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MoZnAsIHN0YXJ0dXAsIDAsIGNmKTsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0xNjUsNiArMTYyLDMyIEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCBSdW5JbnRlcmFjdGl2ZUhvb2sodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqc3lzLCAqaG9vaywgKnJlc3VsdDsKKyAgICBzeXMgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInN5cyIpOworICAgIGlmIChzeXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBob29rID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzeXMsICJfX2ludGVyYWN0aXZlaG9va19fIik7CisgICAgUHlfREVDUkVGKHN5cyk7CisgICAgaWYgKGhvb2sgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChob29rLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGhvb2spOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuOworCitlcnJvcjoKKyAgICBQeVN5c19Xcml0ZVN0ZGVycigiRmFpbGVkIGNhbGxpbmcgc3lzLl9faW50ZXJhY3RpdmVob29rX19cbiIpOworICAgIFB5RXJyX1ByaW50KCk7CisgICAgUHlFcnJfQ2xlYXIoKTsKK30KKwogCiBzdGF0aWMgaW50IFJ1bk1vZHVsZSh3Y2hhcl90ICptb2RuYW1lLCBpbnQgc2V0X2FyZ3YwKQogewpAQCAtMTcyLDE3ICsxOTUsMjAgQEAKICAgICBydW5weSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgicnVucHkiKTsKICAgICBpZiAocnVucHkgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBpbXBvcnQgcnVucHkgbW9kdWxlXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBydW5tb2R1bGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHJ1bnB5LCAiX3J1bl9tb2R1bGVfYXNfbWFpbiIpOwogICAgIGlmIChydW5tb2R1bGUgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhY2Nlc3MgcnVucHkuX3J1bl9tb2R1bGVfYXNfbWFpblxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgbW9kdWxlID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihtb2RuYW1lLCB3Y3NsZW4obW9kbmFtZSkpOwogICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb252ZXJ0IG1vZHVsZSBuYW1lIHRvIHVuaWNvZGVcbiIpOworICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9ERUNSRUYocnVucHkpOwogICAgICAgICBQeV9ERUNSRUYocnVubW9kdWxlKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTkxLDYgKzIxNyw3IEBACiAgICAgaWYgKHJ1bmFyZ3MgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGFyZ3VtZW50cyBmb3IgcnVucHkuX3J1bl9tb2R1bGVfYXNfbWFpblxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5tb2R1bGUpOwogICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKQEAgLTIzNSw4ICsyNjIsMTAgQEAKICAgICAvKiBhcmd2MCBpcyB1c2FibGUgYXMgYW4gaW1wb3J0IHNvdXJjZSwgc28gcHV0IGl0IGluIHN5cy5wYXRoWzBdCiAgICAgICAgYW5kIGltcG9ydCBfX21haW5fXyAqLwogICAgIHN5c19wYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7Ci0gICAgaWYgKHN5c19wYXRoID09IE5VTEwpCisgICAgaWYgKHN5c19wYXRoID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLnBhdGgiKTsKICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgaWYgKFB5TGlzdF9TZXRJdGVtKHN5c19wYXRoLCAwLCBhcmd2MCkpIHsKICAgICAgICAgYXJndjAgPSBOVUxMOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzY2LDcgKzM5NSw3IEBACiAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGludGVycHJldC4gKi8KIAogICAgICAgICAgICAgbGVuID0gd2NzbGVuKF9QeU9TX29wdGFyZykgKyAxICsgMTsKLSAgICAgICAgICAgIGNvbW1hbmQgPSAod2NoYXJfdCAqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiBsZW4pOworICAgICAgICAgICAgY29tbWFuZCA9ICh3Y2hhcl90ICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIGxlbik7CiAgICAgICAgICAgICBpZiAoY29tbWFuZCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgLWMgYXJndW1lbnQiKTsKQEAgLTM5OCw2ICs0MjcsMTIgQEAKICAgICAgICAgICAgIFB5X0ludGVyYWN0aXZlRmxhZysrOwogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSAnSSc6CisgICAgICAgICAgICBQeV9Jc29sYXRlZEZsYWcrKzsKKyAgICAgICAgICAgIFB5X05vVXNlclNpdGVEaXJlY3RvcnkrKzsKKyAgICAgICAgICAgIFB5X0lnbm9yZUVudmlyb25tZW50RmxhZysrOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgLyogY2FzZSAnSic6IHJlc2VydmVkIGZvciBKeXRob24gKi8KIAogICAgICAgICBjYXNlICdPJzoKQEAgLTQ3NSw3ICs1MTAsNyBAQAogICAgICAgICByZXR1cm4gdXNhZ2UoMCwgYXJndlswXSk7CiAKICAgICBpZiAodmVyc2lvbikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlB5dGhvbiAlc1xuIiwgUFlfVkVSU0lPTik7CisgICAgICAgIHByaW50ZigiUHl0aG9uICVzXG4iLCBQWV9WRVJTSU9OKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC00OTUsNyArNTMwLDcgQEAKICAgICAgICAgKndwICE9IEwnXDAnKSB7CiAgICAgICAgIHdjaGFyX3QgKmJ1ZiwgKndhcm5pbmc7CiAKLSAgICAgICAgYnVmID0gKHdjaGFyX3QgKiltYWxsb2MoKHdjc2xlbih3cCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGJ1ZiA9ICh3Y2hhcl90ICopUHlNZW1fUmF3TWFsbG9jKCh3Y3NsZW4od3ApICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9OV0FSTklOR1MiKTsKQEAgLTUwNSw3ICs1NDAsNyBAQAogICAgICAgICAgICAgIHdhcm5pbmcgPSB3Y3N0b2soTlVMTCwgTCIsIikpIHsKICAgICAgICAgICAgIFB5U3lzX0FkZFdhcm5PcHRpb24od2FybmluZyk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGJ1Zik7CiAgICAgfQogI2Vsc2UKICAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTldBUk5JTkdTIikpICYmICpwICE9ICdcMCcpIHsKQEAgLTUxNCwxMiArNTQ5LDEyIEBACiAKICAgICAgICAgLyogc2V0dGxlIGZvciBzdHJ0b2sgaGVyZSBhcyB0aGVyZSdzIG5vIG9uZSBzdGFuZGFyZAogICAgICAgICAgICBDODkgd2NzdG9rICovCi0gICAgICAgIGJ1ZiA9IChjaGFyICopbWFsbG9jKHN0cmxlbihwKSArIDEpOworICAgICAgICBidWYgPSAoY2hhciAqKVB5TWVtX1Jhd01hbGxvYyhzdHJsZW4ocCkgKyAxKTsKICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IFBZVEhPTldBUk5JTkdTIik7CiAgICAgICAgIHN0cmNweShidWYsIHApOwotICAgICAgICBvbGRsb2MgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworICAgICAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgICAgICBmb3IgKHAgPSBzdHJ0b2soYnVmLCAiLCIpOyBwICE9IE5VTEw7IHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkgewogI2lmZGVmIF9fQVBQTEVfXwpAQCAtNTM3LDggKzU3Miw4IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgIH0KICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgb2xkbG9jKTsKLSAgICAgICAgZnJlZShvbGRsb2MpOwotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShidWYpOwogICAgIH0KICNlbmRpZgogCkBAIC02MDgsNyArNjQzLDcgQEAKICAgICAgICAgd2NoYXJfdCogYnVmZmVyOwogICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKHApICsgMTsKIAotICAgICAgICBidWZmZXIgPSBtYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYnVmZmVyID0gUHlNZW1fUmF3TWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IFBZVEhPTkVYRUNVVEFCTEUiKTsKQEAgLTY4Miw3ICs3MTcsNyBAQAogCiAgICAgaWYgKGNvbW1hbmQpIHsKICAgICAgICAgc3RzID0gcnVuX2NvbW1hbmQoY29tbWFuZCwgJmNmKTsKLSAgICAgICAgZnJlZShjb21tYW5kKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShjb21tYW5kKTsKICAgICB9IGVsc2UgaWYgKG1vZHVsZSkgewogICAgICAgICBzdHMgPSAoUnVuTW9kdWxlKG1vZHVsZSwgMSkgIT0gMCk7CiAgICAgfQpAQCAtNjkxLDYgKzcyNiw3IEBACiAgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMICYmIHN0ZGluX2lzX2ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICBQeV9JbnNwZWN0RmxhZyA9IDA7IC8qIGRvIGV4aXQgb24gU3lzdGVtRXhpdCAqLwogICAgICAgICAgICAgUnVuU3RhcnR1cEZpbGUoJmNmKTsKKyAgICAgICAgICAgIFJ1bkludGVyYWN0aXZlSG9vaygpOwogICAgICAgICB9CiAgICAgICAgIC8qIFhYWCAqLwogCkBAIC03NTYsNiArNzkyLDcgQEAKICAgICBpZiAoUHlfSW5zcGVjdEZsYWcgJiYgc3RkaW5faXNfaW50ZXJhY3RpdmUgJiYKICAgICAgICAgKGZpbGVuYW1lICE9IE5VTEwgfHwgY29tbWFuZCAhPSBOVUxMIHx8IG1vZHVsZSAhPSBOVUxMKSkgewogICAgICAgICBQeV9JbnNwZWN0RmxhZyA9IDA7CisgICAgICAgIFJ1bkludGVyYWN0aXZlSG9vaygpOwogICAgICAgICAvKiBYWFggKi8KICAgICAgICAgc3RzID0gUHlSdW5fQW55RmlsZUZsYWdzKHN0ZGluLCAiPHN0ZGluPiIsICZjZikgIT0gMDsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21kNW1vZHVsZS5jIGIvTW9kdWxlcy9tZDVtb2R1bGUuYwppbmRleCAxMmUxODdjLi41Y2IzZDM2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL21kNW1vZHVsZS5jCisrKyBiL01vZHVsZXMvbWQ1bW9kdWxlLmMKQEAgLTkxLDEwICs5MSw2IEBACiAgICAgICAgKHkpWzNdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjI0KSYyNTUpOyAoeSlbMl0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MTYpJjI1NSk7ICAgXAogICAgICAgICh5KVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj44KSYyNTUpOyAoeSlbMF0gPSAodW5zaWduZWQgY2hhcikoKHgpJjI1NSk7IH0KIAotI2lmbmRlZiBNSU4KLSAgICNkZWZpbmUgTUlOKHgsIHkpICggKCh4KTwoeSkpPyh4KTooeSkgKQotI2VuZGlmCi0KIAogLyogTUQ1IG1hY3JvcyAqLwogCkBAIC0yNDQsOSArMjQwLDkgQEAKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gTUQ1X0JMT0NLU0laRTsKICAgICAgICAgICAgaW5sZW4gICAgICAgICAgLT0gTUQ1X0JMT0NLU0laRTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgbiA9IE1JTihpbmxlbiwgKFB5X3NzaXplX3QpKE1ENV9CTE9DS1NJWkUgLSBtZDUtPmN1cmxlbikpOworICAgICAgICAgICBuID0gUHlfTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoTUQ1X0JMT0NLU0laRSAtIG1kNS0+Y3VybGVuKSk7CiAgICAgICAgICAgIG1lbWNweShtZDUtPmJ1ZiArIG1kNS0+Y3VybGVuLCBpbiwgKHNpemVfdCluKTsKLSAgICAgICAgICAgbWQ1LT5jdXJsZW4gICAgKz0gbjsKKyAgICAgICAgICAgbWQ1LT5jdXJsZW4gICAgKz0gKE1ENV9JTlQzMiluOwogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBuOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBuOwogICAgICAgICAgICBpZiAobWQ1LT5jdXJsZW4gPT0gTUQ1X0JMT0NLU0laRSkgewpAQCAtNDQzLDcgKzQzOSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogTUQ1X2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIk1ENSIsIDMpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIm1kNSIsIDMpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTc2LDggKzU3MiwxNyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fbWQ1KHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZNRDV0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZNRDV0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9tZDVtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX21kNW1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJk1ENXR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiTUQ1VHlwZSIsIChQeU9iamVjdCAqKSZNRDV0eXBlKTsKKyAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvbW1hcG1vZHVsZS5jIGIvTW9kdWxlcy9tbWFwbW9kdWxlLmMKaW5kZXggMTEwN2ViOC4uMzY2ZGFjMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tbWFwbW9kdWxlLmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAjaW5jbHVkZSA8UHl0aG9uLmg+CisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKICNpZm5kZWYgTVNfV0lORE9XUwogI2RlZmluZSBVTklYCkBAIC0xMDgsNiArMTA5LDcgQEAKICAgICBpbnQgZmQ7CiAjZW5kaWYKIAorICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKICAgICBhY2Nlc3NfbW9kZSBhY2Nlc3M7CiB9IG1tYXBfb2JqZWN0OwogCkBAIC0xMzQsNiArMTM2LDggQEAKICAgICB9CiAjZW5kaWYgLyogVU5JWCAqLwogCisgICAgaWYgKG1fb2JqLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBtX29iaik7CiAgICAgUHlfVFlQRShtX29iaiktPnRwX2ZyZWUoKFB5T2JqZWN0KiltX29iaik7CiB9CiAKQEAgLTEwMzIsNyArMTAzNiw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIG9mZnNldG9mKG1tYXBfb2JqZWN0LCB3ZWFrcmVmbGlzdCksICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgbW1hcF9vYmplY3RfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCkBAIC0xMTkwLDYgKzExOTQsNyBAQAogICAgIG1fb2JqLT5kYXRhID0gTlVMTDsKICAgICBtX29iai0+c2l6ZSA9IChzaXplX3QpIG1hcF9zaXplOwogICAgIG1fb2JqLT5wb3MgPSAoc2l6ZV90KSAwOworICAgIG1fb2JqLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgbV9vYmotPmV4cG9ydHMgPSAwOwogICAgIG1fb2JqLT5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgaWYgKGZkID09IC0xKSB7CkBAIC0xMjAzLDE4ICsxMjA4LDE4IEBACiAgICAgICAgIGZsYWdzIHw9IE1BUF9BTk9OWU1PVVM7CiAjZWxzZQogICAgICAgICAvKiBTVlI0IG1ldGhvZCB0byBtYXAgYW5vbnltb3VzIG1lbW9yeSBpcyB0byBvcGVuIC9kZXYvemVybyAqLwotICAgICAgICBmZCA9IGRldnplcm8gPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOworICAgICAgICBmZCA9IGRldnplcm8gPSBfUHlfb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKICAgICAgICAgaWYgKGRldnplcm8gPT0gLTEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtX29iaik7CiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9vYmotPmZkID0gZHVwKGZkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1fb2JqLT5mZCA9IF9QeV9kdXAoZmQpOwogICAgICAgICBpZiAobV9vYmotPmZkID09IC0xKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobV9vYmopOwotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzk0LDYgKzEzOTksNyBAQAogICAgIC8qIHNldCB0aGUgaW5pdGlhbCBwb3NpdGlvbiAqLwogICAgIG1fb2JqLT5wb3MgPSAoc2l6ZV90KSAwOwogCisgICAgbV9vYmotPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBtX29iai0+ZXhwb3J0cyA9IDA7CiAgICAgLyogc2V0IHRoZSB0YWcgbmFtZSAqLwogICAgIGlmICh0YWduYW1lICE9IE5VTEwgJiYgKnRhZ25hbWUgIT0gJ1wwJykgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9vc3NhdWRpb2Rldi5jIGIvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCmluZGV4IDUwZTI2NmYuLmIwYTE2ZGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvb3NzYXVkaW9kZXYuYworKysgYi9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKQEAgLTExNSw3ICsxMTUsOSBAQAogICAgICAgIG9uZSBvcGVuIGF0IGEgdGltZS4gIFRoaXMgZG9lcyAqbm90KiBhZmZlY3QgbGF0ZXIgSS9POyBPU1MKICAgICAgICBwcm92aWRlcyBhIHNwZWNpYWwgaW9jdGwoKSBmb3Igbm9uLWJsb2NraW5nIHJlYWQvd3JpdGUsIHdoaWNoIGlzCiAgICAgICAgZXhwb3NlZCB2aWEgb3NzX25vbmJsb2NrKCkgYmVsb3cuICovCi0gICAgaWYgKChmZCA9IG9wZW4oZGV2aWNlbmFtZSwgaW1vZGV8T19OT05CTE9DSykpID09IC0xKSB7CisgICAgZmQgPSBfUHlfb3BlbihkZXZpY2VuYW1lLCBpbW9kZXxPX05PTkJMT0NLKTsKKworICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZGV2aWNlbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE3Nyw3ICsxNzksOCBAQAogICAgICAgICAgICAgZGV2aWNlbmFtZSA9ICIvZGV2L21peGVyIjsKICAgICB9CiAKLSAgICBpZiAoKGZkID0gb3BlbihkZXZpY2VuYW1lLCBPX1JEV1IpKSA9PSAtMSkgeworICAgIGZkID0gX1B5X29wZW4oZGV2aWNlbmFtZSwgT19SRFdSKTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGRldmljZW5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNDUsNyArMjQ4LDcgQEAKICAgICBpbnQgYXJnOwogCiAgICAgYXNzZXJ0KHN0cmxlbihmbmFtZSkgPD0gMzApOwotICAgIHN0cmNhdChhcmdmbXQsIGZuYW1lKTsKKyAgICBzdHJuY2F0KGFyZ2ZtdCwgZm5hbWUsIDMwKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgYXJnZm10LCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI3MCw3ICsyNzMsNyBAQAogICAgIGludCBhcmcgPSAwOwogCiAgICAgYXNzZXJ0KHN0cmxlbihmbmFtZSkgPD0gMzApOwotICAgIHN0cmNhdChhcmdmbXQsIGZuYW1lKTsKKyAgICBzdHJuY2F0KGFyZ2ZtdCwgZm5hbWUsIDMwKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgYXJnZm10LCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI5MCw3ICsyOTMsNyBAQAogICAgIGludCBydjsKIAogICAgIGFzc2VydChzdHJsZW4oZm5hbWUpIDw9IDMwKTsKLSAgICBzdHJjYXQoYXJnZm10LCBmbmFtZSk7CisgICAgc3RybmNhdChhcmdmbXQsIGZuYW1lLCAzMCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGFyZ2ZtdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL292ZXJsYXBwZWQuYyBiL01vZHVsZXMvb3ZlcmxhcHBlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNWM3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL292ZXJsYXBwZWQuYwpAQCAtMCwwICsxLDEzNzggQEAKKy8qCisgKiBTdXBwb3J0IGZvciBvdmVybGFwcGVkIElPCisgKgorICogU29tZSBjb2RlIGJvcnJvd2VkIGZyb20gTW9kdWxlcy9fd2luYXBpLmMgb2YgQ1B5dGhvbgorICovCisKKy8qIFhYWCBjaGVjayBvdmVyZmxvdyBhbmQgRFdPUkQgPC0+IFB5X3NzaXplX3QgY29udmVyc2lvbnMKKyAgIENoZWNrIGl0ZW1zaXplICovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKKworI2RlZmluZSBXSU5ET1dTX0xFQU5fQU5EX01FQU4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjaW5jbHVkZSA8bXN3c29jay5oPgorCisjaWYgZGVmaW5lZChNU19XSU4zMikgJiYgIWRlZmluZWQoTVNfV0lONjQpCisjICBkZWZpbmUgRl9QT0lOVEVSICJrIgorIyAgZGVmaW5lIFRfUE9JTlRFUiBUX1VMT05HCisjZWxzZQorIyAgZGVmaW5lIEZfUE9JTlRFUiAiSyIKKyMgIGRlZmluZSBUX1BPSU5URVIgVF9VTE9OR0xPTkcKKyNlbmRpZgorCisjZGVmaW5lIEZfSEFORExFIEZfUE9JTlRFUgorI2RlZmluZSBGX1VMT05HX1BUUiBGX1BPSU5URVIKKyNkZWZpbmUgRl9EV09SRCAiayIKKyNkZWZpbmUgRl9CT09MICJpIgorI2RlZmluZSBGX1VJTlQgIkkiCisKKyNkZWZpbmUgVF9IQU5ETEUgVF9QT0lOVEVSCisKK2VudW0ge1RZUEVfTk9ORSwgVFlQRV9OT1RfU1RBUlRFRCwgVFlQRV9SRUFELCBUWVBFX1dSSVRFLCBUWVBFX0FDQ0VQVCwKKyAgICAgIFRZUEVfQ09OTkVDVCwgVFlQRV9ESVNDT05ORUNULCBUWVBFX0NPTk5FQ1RfTkFNRURfUElQRSwKKyAgICAgIFRZUEVfV0FJVF9OQU1FRF9QSVBFX0FORF9DT05ORUNUfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBPVkVSTEFQUEVEIG92ZXJsYXBwZWQ7CisgICAgLyogRm9yIGNvbnZlbmllbmNlLCB3ZSBzdG9yZSB0aGUgZmlsZSBoYW5kbGUgdG9vICovCisgICAgSEFORExFIGhhbmRsZTsKKyAgICAvKiBFcnJvciByZXR1cm5lZCBieSBsYXN0IG1ldGhvZCBjYWxsICovCisgICAgRFdPUkQgZXJyb3I7CisgICAgLyogVHlwZSBvZiBvcGVyYXRpb24gKi8KKyAgICBEV09SRCB0eXBlOworICAgIHVuaW9uIHsKKyAgICAgICAgLyogQnVmZmVyIHVzZWQgZm9yIHJlYWRpbmcgKG9wdGlvbmFsKSAqLworICAgICAgICBQeU9iamVjdCAqcmVhZF9idWZmZXI7CisgICAgICAgIC8qIEJ1ZmZlciB1c2VkIGZvciB3cml0aW5nIChvcHRpb25hbCkgKi8KKyAgICAgICAgUHlfYnVmZmVyIHdyaXRlX2J1ZmZlcjsKKyAgICB9OworfSBPdmVybGFwcGVkT2JqZWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgT1ZFUkxBUFBFRCAqT3ZlcmxhcHBlZDsKKyAgICBIQU5ETEUgSW9jcEhhbmRsZTsKKyAgICBjaGFyIEFkZHJlc3NbMV07Cit9IFdhaXROYW1lZFBpcGVBbmRDb25uZWN0Q29udGV4dDsKKworLyoKKyAqIE1hcCBXaW5kb3dzIGVycm9yIGNvZGVzIHRvIHN1YmNsYXNzZXMgb2YgT1NFcnJvcgorICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitTZXRGcm9tV2luZG93c0VycihEV09SRCBlcnIpCit7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbl90eXBlOworCisgICAgaWYgKGVyciA9PSAwKQorICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl90eXBlID0gUHlFeGNfQ29ubmVjdGlvblJlZnVzZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVSUk9SX0NPTk5FQ1RJT05fQUJPUlRFRDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl90eXBlID0gUHlFeGNfQ29ubmVjdGlvbkFib3J0ZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZXhjZXB0aW9uX3R5cGUgPSBQeUV4Y19PU0Vycm9yOworICAgIH0KKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoZXhjZXB0aW9uX3R5cGUsIGVycik7Cit9CisKKy8qCisgKiBTb21lIGZ1bmN0aW9ucyBzaG91bGQgYmUgbG9hZGVkIGF0IHJ1bnRpbWUKKyAqLworCitzdGF0aWMgTFBGTl9BQ0NFUFRFWCBQeV9BY2NlcHRFeCA9IE5VTEw7CitzdGF0aWMgTFBGTl9DT05ORUNURVggUHlfQ29ubmVjdEV4ID0gTlVMTDsKK3N0YXRpYyBMUEZOX0RJU0NPTk5FQ1RFWCBQeV9EaXNjb25uZWN0RXggPSBOVUxMOworc3RhdGljIEJPT0wgKENBTExCQUNLICpQeV9DYW5jZWxJb0V4KShIQU5ETEUsIExQT1ZFUkxBUFBFRCkgPSBOVUxMOworCisjZGVmaW5lIEdFVF9XU0FfUE9JTlRFUihzLCB4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFNPQ0tFVF9FUlJPUiAhPSBXU0FJb2N0bChzLCBTSU9fR0VUX0VYVEVOU0lPTl9GVU5DVElPTl9QT0lOVEVSLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR3VpZCMjeCwgc2l6ZW9mKEd1aWQjI3gpLCAmUHlfIyN4LCAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoUHlfIyN4KSwgJmR3Qnl0ZXMsIE5VTEwsIE5VTEwpKQorCitzdGF0aWMgaW50Citpbml0aWFsaXplX2Z1bmN0aW9uX3BvaW50ZXJzKHZvaWQpCit7CisgICAgR1VJRCBHdWlkQWNjZXB0RXggPSBXU0FJRF9BQ0NFUFRFWDsKKyAgICBHVUlEIEd1aWRDb25uZWN0RXggPSBXU0FJRF9DT05ORUNURVg7CisgICAgR1VJRCBHdWlkRGlzY29ubmVjdEV4ID0gV1NBSURfRElTQ09OTkVDVEVYOworICAgIEhJTlNUQU5DRSBoS2VybmVsMzI7CisgICAgU09DS0VUIHM7CisgICAgRFdPUkQgZHdCeXRlczsKKworICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTsKKyAgICBpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIUdFVF9XU0FfUE9JTlRFUihzLCBBY2NlcHRFeCkgfHwKKyAgICAgICAgIUdFVF9XU0FfUE9JTlRFUihzLCBDb25uZWN0RXgpIHx8CisgICAgICAgICFHRVRfV1NBX1BPSU5URVIocywgRGlzY29ubmVjdEV4KSkKKyAgICB7CisgICAgICAgIGNsb3Nlc29ja2V0KHMpOworICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjbG9zZXNvY2tldChzKTsKKworICAgIC8qIE9uIFdpblhQIHdlIHdpbGwgaGF2ZSBQeV9DYW5jZWxJb0V4ID09IE5VTEwgKi8KKyAgICBoS2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGUoIktFUk5FTDMyIik7CisgICAgKihGQVJQUk9DICopJlB5X0NhbmNlbElvRXggPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsICJDYW5jZWxJb0V4Iik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb21wbGV0aW9uIHBvcnQgc3R1ZmYKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgQ3JlYXRlSW9Db21wbGV0aW9uUG9ydF9kb2MsCisgICAgIkNyZWF0ZUlvQ29tcGxldGlvblBvcnQoaGFuZGxlLCBwb3J0LCBrZXksIGNvbmN1cnJlbmN5KSAtPiBwb3J0XG5cbiIKKyAgICAiQ3JlYXRlIGEgY29tcGxldGlvbiBwb3J0IG9yIHJlZ2lzdGVyIGEgaGFuZGxlIHdpdGggYSBwb3J0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgRmlsZUhhbmRsZTsKKyAgICBIQU5ETEUgRXhpc3RpbmdDb21wbGV0aW9uUG9ydDsKKyAgICBVTE9OR19QVFIgQ29tcGxldGlvbktleTsKKyAgICBEV09SRCBOdW1iZXJPZkNvbmN1cnJlbnRUaHJlYWRzOworICAgIEhBTkRMRSByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9IQU5ETEUgRl9VTE9OR19QVFIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVIYW5kbGUsICZFeGlzdGluZ0NvbXBsZXRpb25Qb3J0LCAmQ29tcGxldGlvbktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk51bWJlck9mQ29uY3VycmVudFRocmVhZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0KEZpbGVIYW5kbGUsIEV4aXN0aW5nQ29tcGxldGlvblBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uS2V5LCBOdW1iZXJPZkNvbmN1cnJlbnRUaHJlYWRzKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIHJldCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvYywKKyAgICAiR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyhwb3J0LCBtc2VjcykgLT4gKGVyciwgYnl0ZXMsIGtleSwgYWRkcmVzcylcblxuIgorICAgICJHZXQgYSBtZXNzYWdlIGZyb20gY29tcGxldGlvbiBwb3J0LiAgV2FpdCBmb3IgdXAgdG8gbXNlY3MgbWlsbGlzZWNvbmRzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9HZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgQ29tcGxldGlvblBvcnQgPSBOVUxMOworICAgIERXT1JEIE51bWJlck9mQnl0ZXMgPSAwOworICAgIFVMT05HX1BUUiBDb21wbGV0aW9uS2V5ID0gMDsKKyAgICBPVkVSTEFQUEVEICpPdmVybGFwcGVkID0gTlVMTDsKKyAgICBEV09SRCBNaWxsaXNlY29uZHM7CisgICAgRFdPUkQgZXJyOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZDb21wbGV0aW9uUG9ydCwgJk1pbGxpc2Vjb25kcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoQ29tcGxldGlvblBvcnQsICZOdW1iZXJPZkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbXBsZXRpb25LZXksICZPdmVybGFwcGVkLCBNaWxsaXNlY29uZHMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgaWYgKE92ZXJsYXBwZWQgPT0gTlVMTCkgeworICAgICAgICBpZiAoZXJyID09IFdBSVRfVElNRU9VVCkKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9EV09SRCBGX0RXT1JEIEZfVUxPTkdfUFRSIEZfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsIE51bWJlck9mQnl0ZXMsIENvbXBsZXRpb25LZXksIE92ZXJsYXBwZWQpOworfQorCitQeURvY19TVFJWQVIoCisgICAgUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jLAorICAgICJQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhwb3J0LCBieXRlcywga2V5LCBhZGRyZXNzKSAtPiBOb25lXG5cbiIKKyAgICAiUG9zdCBhIG1lc3NhZ2UgdG8gY29tcGxldGlvbiBwb3J0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9Qb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIENvbXBsZXRpb25Qb3J0OworICAgIERXT1JEIE51bWJlck9mQnl0ZXM7CisgICAgVUxPTkdfUFRSIENvbXBsZXRpb25LZXk7CisgICAgT1ZFUkxBUFBFRCAqT3ZlcmxhcHBlZDsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JEIEZfVUxPTkdfUFRSIEZfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbXBsZXRpb25Qb3J0LCAmTnVtYmVyT2ZCeXRlcywgJkNvbXBsZXRpb25LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZPdmVybGFwcGVkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoQ29tcGxldGlvblBvcnQsIE51bWJlck9mQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbktleSwgT3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhIGhhbmRsZQorICovCisKK3N0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhIHsKKyAgICBIQU5ETEUgQ29tcGxldGlvblBvcnQ7CisgICAgTFBPVkVSTEFQUEVEIE92ZXJsYXBwZWQ7Cit9OworCitzdGF0aWMgVk9JRCBDQUxMQkFDSworUG9zdFRvUXVldWVDYWxsYmFjayhQVk9JRCBscFBhcmFtZXRlciwgQk9PTCBUaW1lck9yV2FpdEZpcmVkKQoreworICAgIHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhICpwID0gKHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhKikgbHBQYXJhbWV0ZXI7CisKKyAgICBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhwLT5Db21wbGV0aW9uUG9ydCwgVGltZXJPcldhaXRGaXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwLT5PdmVybGFwcGVkKTsKKyAgICAvKiBpZ25vcmUgcG9zc2libGUgZXJyb3IhICovCisgICAgUHlNZW1fRnJlZShwKTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFJlZ2lzdGVyV2FpdFdpdGhRdWV1ZV9kb2MsCisgICAgIlJlZ2lzdGVyV2FpdFdpdGhRdWV1ZShPYmplY3QsIENvbXBsZXRpb25Qb3J0LCBPdmVybGFwcGVkLCBUaW1lb3V0KVxuIgorICAgICIgICAgLT4gV2FpdEhhbmRsZVxuXG4iCisgICAgIlJlZ2lzdGVyIHdhaXQgZm9yIE9iamVjdDsgd2hlbiBjb21wbGV0ZSBDb21wbGV0aW9uUG9ydCBpcyBub3RpZmllZC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9SZWdpc3RlcldhaXRXaXRoUXVldWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBOZXdXYWl0T2JqZWN0OworICAgIEhBTkRMRSBPYmplY3Q7CisgICAgVUxPTkcgTWlsbGlzZWNvbmRzOworICAgIHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhIGRhdGEsICpwZGF0YTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSBGX1BPSU5URVIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEuQ29tcGxldGlvblBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLk92ZXJsYXBwZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZNaWxsaXNlY29uZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHBkYXRhID0gUHlNZW1fTWFsbG9jKHNpemVvZihzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSkpOworICAgIGlmIChwZGF0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisKKyAgICAqcGRhdGEgPSBkYXRhOworCisgICAgaWYgKCFSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoCisgICAgICAgICAgICAmTmV3V2FpdE9iamVjdCwgT2JqZWN0LCAoV0FJVE9SVElNRVJDQUxMQkFDSylQb3N0VG9RdWV1ZUNhbGxiYWNrLAorICAgICAgICAgICAgcGRhdGEsIE1pbGxpc2Vjb25kcywKKyAgICAgICAgICAgIFdUX0VYRUNVVEVJTldBSVRUSFJFQUQgfCBXVF9FWEVDVVRFT05MWU9OQ0UpKQorICAgIHsKKyAgICAgICAgUHlNZW1fRnJlZShwZGF0YSk7CisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0hBTkRMRSwgTmV3V2FpdE9iamVjdCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBVbnJlZ2lzdGVyV2FpdF9kb2MsCisgICAgIlVucmVnaXN0ZXJXYWl0KFdhaXRIYW5kbGUpIC0+IE5vbmVcblxuIgorICAgICJVbnJlZ2lzdGVyIHdhaXQgaGFuZGxlLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1VucmVnaXN0ZXJXYWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgV2FpdEhhbmRsZTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSwgJldhaXRIYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBVbnJlZ2lzdGVyV2FpdChXYWl0SGFuZGxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIEV2ZW50IGZ1bmN0aW9ucyAtLSBjdXJyZW50bHkgb25seSB1c2VkIGJ5IHRlc3RzCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIENyZWF0ZUV2ZW50X2RvYywKKyAgICAiQ3JlYXRlRXZlbnQoRXZlbnRBdHRyaWJ1dGVzLCBNYW51YWxSZXNldCwgSW5pdGlhbFN0YXRlLCBOYW1lKSIKKyAgICAiIC0+IEhhbmRsZVxuXG4iCisgICAgIkNyZWF0ZSBhbiBldmVudC4gIEV2ZW50QXR0cmlidXRlcyBtdXN0IGJlIE5vbmUuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfQ3JlYXRlRXZlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpFdmVudEF0dHJpYnV0ZXM7CisgICAgQk9PTCBNYW51YWxSZXNldDsKKyAgICBCT09MIEluaXRpYWxTdGF0ZTsKKyAgICBQeV9VTklDT0RFICpOYW1lOworICAgIEhBTkRMRSBFdmVudDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIgRl9CT09MIEZfQk9PTCAiWiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZFdmVudEF0dHJpYnV0ZXMsICZNYW51YWxSZXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkluaXRpYWxTdGF0ZSwgJk5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChFdmVudEF0dHJpYnV0ZXMgIT0gUHlfTm9uZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkV2ZW50QXR0cmlidXRlcyBtdXN0IGJlIE5vbmUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIEV2ZW50ID0gQ3JlYXRlRXZlbnRXKE5VTEwsIE1hbnVhbFJlc2V0LCBJbml0aWFsU3RhdGUsIE5hbWUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoRXZlbnQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCBFdmVudCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBTZXRFdmVudF9kb2MsCisgICAgIlNldEV2ZW50KEhhbmRsZSkgLT4gTm9uZVxuXG4iCisgICAgIlNldCBldmVudC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9TZXRFdmVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIEhhbmRsZTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSwgJkhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFNldEV2ZW50KEhhbmRsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBSZXNldEV2ZW50X2RvYywKKyAgICAiUmVzZXRFdmVudChIYW5kbGUpIC0+IE5vbmVcblxuIgorICAgICJSZXNldCBldmVudC5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9SZXNldEV2ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgSGFuZGxlOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUmVzZXRFdmVudChIYW5kbGUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogQmluZCBzb2NrZXQgaGFuZGxlIHRvIGxvY2FsIHBvcnQgd2l0aG91dCBkb2luZyBzbG93IGdldGFkZHJpbmZvKCkKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgQmluZExvY2FsX2RvYywKKyAgICAiQmluZExvY2FsKGhhbmRsZSwgZmFtaWx5KSAtPiBOb25lXG5cbiIKKyAgICAiQmluZCBhIHNvY2tldCBoYW5kbGUgdG8gYW4gYXJiaXRyYXJ5IGxvY2FsIHBvcnQuXG4iCisgICAgImZhbWlseSBzaG91bGQgQUZfSU5FVCBvciBBRl9JTkVUNi5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9CaW5kTG9jYWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBTb2NrZXQ7CisgICAgaW50IEZhbWlseTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiaSIsICZTb2NrZXQsICZGYW1pbHkpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChGYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBhZGRyLnNpbl9wb3J0ID0gMDsKKyAgICAgICAgYWRkci5zaW5fYWRkci5TX3VuLlNfYWRkciA9IElOQUREUl9BTlk7CisgICAgICAgIHJldCA9IGJpbmQoU29ja2V0LCAoU09DS0FERFIqKSZhZGRyLCBzaXplb2YoYWRkcikpICE9IFNPQ0tFVF9FUlJPUjsKKyAgICB9IGVsc2UgaWYgKEZhbWlseSA9PSBBRl9JTkVUNikgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisgICAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBhZGRyLnNpbjZfcG9ydCA9IDA7CisgICAgICAgIGFkZHIuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisgICAgICAgIHJldCA9IGJpbmQoU29ja2V0LCAoU09DS0FERFIqKSZhZGRyLCBzaXplb2YoYWRkcikpICE9IFNPQ0tFVF9FUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImV4cGVjdGVkIHR1cGxlIG9mIGxlbmd0aCAyIG9yIDQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBXaW5kb3dzIGVxdWl2YWxlbnQgb2Ygb3Muc3RyZXJyb3IoKSAtLSBjb21wYXJlIF9jdHlwZXMvY2FsbHByb2MuYworICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBGb3JtYXRNZXNzYWdlX2RvYywKKyAgICAiRm9ybWF0TWVzc2FnZShlcnJvcl9jb2RlKSAtPiBlcnJvcl9tZXNzYWdlXG5cbiIKKyAgICAiUmV0dXJuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIGVycm9yIGNvZGUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0Zvcm1hdE1lc3NhZ2UoUHlPYmplY3QgKmlnbm9yZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgRFdPUkQgY29kZSwgbjsKKyAgICBXQ0hBUiAqbHBNc2dCdWY7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0RXT1JELCAmY29kZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbiA9IEZvcm1hdE1lc3NhZ2VXKEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiB8CisgICAgICAgICAgICAgICAgICAgICAgIEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICBNQUtFTEFOR0lEKExBTkdfTkVVVFJBTCwgU1VCTEFOR19ERUZBVUxUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKExQV1NUUikgJmxwTXNnQnVmLAorICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAobikgeworICAgICAgICB3aGlsZSAoaXN3c3BhY2UobHBNc2dCdWZbbi0xXSkpCisgICAgICAgICAgICAtLW47CisgICAgICAgIGxwTXNnQnVmW25dID0gTCdcMCc7CisgICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoInUiLCBscE1zZ0J1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInVua25vd24gZXJyb3IgY29kZSAldSIsIGNvZGUpOworICAgIH0KKyAgICBMb2NhbEZyZWUobHBNc2dCdWYpOworICAgIHJldHVybiByZXM7Cit9CisKKworLyoKKyAqIE1hcmsgb3BlcmF0aW9uIGFzIGNvbXBsZXRlZCAtIHVzZWQgd2hlbiByZWFkaW5nIHByb2R1Y2VzIEVSUk9SX0JST0tFTl9QSVBFCisgKi8KKworc3RhdGljIHZvaWQKK21hcmtfYXNfY29tcGxldGVkKE9WRVJMQVBQRUQgKm92KQoreworICAgIG92LT5JbnRlcm5hbCA9IDA7CisgICAgaWYgKG92LT5oRXZlbnQgIT0gTlVMTCkKKyAgICAgICAgU2V0RXZlbnQob3YtPmhFdmVudCk7Cit9CisKKy8qCisgKiBBIFB5dGhvbiBvYmplY3Qgd3JhcHBpbmcgYW4gT1ZFUkxBUFBFRCBzdHJ1Y3R1cmUgYW5kIG90aGVyIHVzZWZ1bCBkYXRhCisgKiBmb3Igb3ZlcmxhcHBlZCBJL08KKyAqLworCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9kb2MsCisgICAgIk92ZXJsYXBwZWQgb2JqZWN0Iik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBPdmVybGFwcGVkT2JqZWN0ICpzZWxmOworICAgIEhBTkRMRSBldmVudCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZXZlbnQiLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8IiBGX0hBTkRMRSwga3dsaXN0LCAmZXZlbnQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChldmVudCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBldmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgaWYgKGV2ZW50ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgfQorCisgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhPdmVybGFwcGVkT2JqZWN0LCB0eXBlKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChldmVudCAhPSBOVUxMKQorICAgICAgICAgICAgQ2xvc2VIYW5kbGUoZXZlbnQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZWxmLT5oYW5kbGUgPSBOVUxMOworICAgIHNlbGYtPmVycm9yID0gMDsKKyAgICBzZWxmLT50eXBlID0gVFlQRV9OT05FOworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gTlVMTDsKKyAgICBtZW1zZXQoJnNlbGYtPm92ZXJsYXBwZWQsIDAsIHNpemVvZihPVkVSTEFQUEVEKSk7CisgICAgbWVtc2V0KCZzZWxmLT53cml0ZV9idWZmZXIsIDAsIHNpemVvZihQeV9idWZmZXIpKTsKKyAgICBpZiAoZXZlbnQpCisgICAgICAgIHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50ID0gZXZlbnQ7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7Cit9CisKK3N0YXRpYyB2b2lkCitPdmVybGFwcGVkX2RlYWxsb2MoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK3sKKyAgICBEV09SRCBieXRlczsKKyAgICBEV09SRCBvbGRlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBCT09MIHdhaXQgPSBGQUxTRTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghSGFzT3ZlcmxhcHBlZElvQ29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKSAmJgorICAgICAgICBzZWxmLT50eXBlICE9IFRZUEVfTk9UX1NUQVJURUQpCisgICAgeworICAgICAgICBpZiAoUHlfQ2FuY2VsSW9FeCAmJiBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpKQorICAgICAgICAgICAgd2FpdCA9IFRSVUU7CisKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXQgPSBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzLCB3YWl0KTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBzd2l0Y2ggKHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKSkgeworICAgICAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICAgICAgY2FzZSBFUlJPUl9OT1RfRk9VTkQ6CisgICAgICAgICAgICBjYXNlIEVSUk9SX09QRVJBVElPTl9BQk9SVEVEOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIiVSIHN0aWxsIGhhcyBwZW5kaW5nIG9wZXJhdGlvbiBhdCAiCisgICAgICAgICAgICAgICAgICAgICJkZWFsbG9jYXRpb24sIHRoZSBwcm9jZXNzIG1heSBjcmFzaCIsIHNlbGYpOworICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzZWxmLT5vdmVybGFwcGVkLmhFdmVudCAhPSBOVUxMKQorICAgICAgICBDbG9zZUhhbmRsZShzZWxmLT5vdmVybGFwcGVkLmhFdmVudCk7CisKKyAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLm9iaikKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+d3JpdGVfYnVmZmVyKTsKKworICAgIHN3aXRjaCAoc2VsZi0+dHlwZSkgeworICAgICAgICBjYXNlIFRZUEVfUkVBRDoKKyAgICAgICAgY2FzZSBUWVBFX0FDQ0VQVDoKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRfYnVmZmVyKTsKKyAgICB9CisgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFNldExhc3RFcnJvcihvbGRlcnIpOworfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9jYW5jZWxfZG9jLAorICAgICJjYW5jZWwoKSAtPiBOb25lXG5cbiIKKyAgICAiQ2FuY2VsIG92ZXJsYXBwZWQgb3BlcmF0aW9uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX2NhbmNlbChPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIEJPT0wgcmV0ID0gVFJVRTsKKworICAgIGlmIChzZWxmLT50eXBlID09IFRZUEVfTk9UX1NUQVJURUQKKyAgICAgICAgfHwgc2VsZi0+dHlwZSA9PSBUWVBFX1dBSVRfTkFNRURfUElQRV9BTkRfQ09OTkVDVCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICBpZiAoIUhhc092ZXJsYXBwZWRJb0NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoUHlfQ2FuY2VsSW9FeCkKKyAgICAgICAgICAgIHJldCA9IFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IENhbmNlbElvKHNlbGYtPmhhbmRsZSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfQorCisgICAgLyogQ2FuY2VsSW9FeCByZXR1cm5zIEVSUk9SX05PVF9GT1VORCBpZiB0aGUgSS9PIGNvbXBsZXRlZCBpbi1iZXR3ZWVuICovCisgICAgaWYgKCFyZXQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9UX0ZPVU5EKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX2dldHJlc3VsdF9kb2MsCisgICAgImdldHJlc3VsdCh3YWl0PUZhbHNlKSAtPiByZXN1bHRcblxuIgorICAgICJSZXRyaWV2ZSByZXN1bHQgb2Ygb3BlcmF0aW9uLiAgSWYgd2FpdCBpcyB0cnVlIHRoZW4gaXQgYmxvY2tzXG4iCisgICAgInVudGlsIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQuICBJZiB3YWl0IGlzIGZhbHNlIGFuZCB0aGVcbiIKKyAgICAib3BlcmF0aW9uIGlzIHN0aWxsIHBlbmRpbmcgdGhlbiBhbiBlcnJvciBpcyByYWlzZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX2dldHJlc3VsdChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBCT09MIHdhaXQgPSBGQUxTRTsKKyAgICBEV09SRCB0cmFuc2ZlcnJlZCA9IDA7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8IiBGX0JPT0wsICZ3YWl0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSA9PSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gbm90IHlldCBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHNlbGYtPnR5cGUgPT0gVFlQRV9OT1RfU1RBUlRFRCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBmYWlsZWQgdG8gc3RhcnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwgJnRyYW5zZmVycmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9NT1JFX0RBVEE6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgICAgICAgIGlmIChzZWxmLT5yZWFkX2J1ZmZlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHNlbGYtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBUWVBFX1JFQUQ6CisgICAgICAgICAgICBhc3NlcnQoUHlCeXRlc19DaGVja0V4YWN0KHNlbGYtPnJlYWRfYnVmZmVyKSk7CisgICAgICAgICAgICBpZiAodHJhbnNmZXJyZWQgIT0gUHlCeXRlc19HRVRfU0laRShzZWxmLT5yZWFkX2J1ZmZlcikgJiYKKyAgICAgICAgICAgICAgICBfUHlCeXRlc19SZXNpemUoJnNlbGYtPnJlYWRfYnVmZmVyLCB0cmFuc2ZlcnJlZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeV9JTkNSRUYoc2VsZi0+cmVhZF9idWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIHNlbGYtPnJlYWRfYnVmZmVyOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB0cmFuc2ZlcnJlZCk7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9SZWFkRmlsZV9kb2MsCisgICAgIlJlYWRGaWxlKGhhbmRsZSwgc2l6ZSkgLT4gT3ZlcmxhcHBlZFttZXNzYWdlXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgcmVhZCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9SZWFkRmlsZShPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIHNpemU7CisgICAgRFdPUkQgbnJlYWQ7CisgICAgUHlPYmplY3QgKmJ1ZjsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCwgJmhhbmRsZSwgJnNpemUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZiBTSVpFT0ZfU0laRV9UIDw9IFNJWkVPRl9MT05HCisgICAgc2l6ZSA9IFB5X01JTihzaXplLCAoRFdPUkQpUFlfU1NJWkVfVF9NQVgpOworI2VuZGlmCisgICAgYnVmID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBQeV9NQVgoc2l6ZSwgMSkpOworICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9SRUFEOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKyAgICBzZWxmLT5yZWFkX2J1ZmZlciA9IGJ1ZjsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBSZWFkRmlsZShoYW5kbGUsIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1ZiksIHNpemUsICZucmVhZCwKKyAgICAgICAgICAgICAgICAgICAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6CisgICAgICAgICAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX01PUkVfREFUQToKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV1NBUmVjdl9kb2MsCisgICAgIlJlY3ZGaWxlKGhhbmRsZSwgc2l6ZSwgZmxhZ3MpIC0+IE92ZXJsYXBwZWRbbWVzc2FnZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHJlY2VpdmUiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfV1NBUmVjdihPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIHNpemU7CisgICAgRFdPUkQgZmxhZ3MgPSAwOworICAgIERXT1JEIG5yZWFkOworICAgIFB5T2JqZWN0ICpidWY7CisgICAgV1NBQlVGIHdzYWJ1ZjsKKyAgICBpbnQgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JEICJ8IiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmc2l6ZSwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjaWYgU0laRU9GX1NJWkVfVCA8PSBTSVpFT0ZfTE9ORworICAgIHNpemUgPSBQeV9NSU4oc2l6ZSwgKERXT1JEKVBZX1NTSVpFX1RfTUFYKTsKKyNlbmRpZgorICAgIGJ1ZiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgUHlfTUFYKHNpemUsIDEpKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfUkVBRDsKKyAgICBzZWxmLT5oYW5kbGUgPSBoYW5kbGU7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBidWY7CisgICAgd3NhYnVmLmxlbiA9IHNpemU7CisgICAgd3NhYnVmLmJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1Zik7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gV1NBUmVjdigoU09DS0VUKWhhbmRsZSwgJndzYWJ1ZiwgMSwgJm5yZWFkLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgICAmc2VsZi0+b3ZlcmxhcHBlZCwgTlVMTCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gKHJldCA8IDAgPyBXU0FHZXRMYXN0RXJyb3IoKSA6IEVSUk9SX1NVQ0NFU1MpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6CisgICAgICAgICAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX01PUkVfREFUQToKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV3JpdGVGaWxlX2RvYywKKyAgICAiV3JpdGVGaWxlKGhhbmRsZSwgYnVmKSAtPiBPdmVybGFwcGVkW2J5dGVzX3RyYW5zZmVycmVkXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgd3JpdGUiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfV3JpdGVGaWxlKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgUHlPYmplY3QgKmJ1Zm9iajsKKyAgICBEV09SRCB3cml0dGVuOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiTyIsICZoYW5kbGUsICZidWZvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGJ1Zm9iaiwgInkqIiwgJnNlbGYtPndyaXRlX2J1ZmZlcikpCisgICAgICAgIHJldHVybiBOVUxMOworCisjaWYgU0laRU9GX1NJWkVfVCA+IFNJWkVPRl9MT05HCisgICAgaWYgKHNlbGYtPndyaXRlX2J1ZmZlci5sZW4gPiAoUHlfc3NpemVfdClVTE9OR19NQVgpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+d3JpdGVfYnVmZmVyKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJidWZmZXIgdG8gbGFyZ2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9XUklURTsKKyAgICBzZWxmLT5oYW5kbGUgPSBoYW5kbGU7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gV3JpdGVGaWxlKGhhbmRsZSwgc2VsZi0+d3JpdGVfYnVmZmVyLmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgKERXT1JEKXNlbGYtPndyaXRlX2J1ZmZlci5sZW4sCisgICAgICAgICAgICAgICAgICAgICZ3cml0dGVuLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV1NBU2VuZF9kb2MsCisgICAgIldTQVNlbmQoaGFuZGxlLCBidWYsIGZsYWdzKSAtPiBPdmVybGFwcGVkW2J5dGVzX3RyYW5zZmVycmVkXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgc2VuZCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9XU0FTZW5kKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgUHlPYmplY3QgKmJ1Zm9iajsKKyAgICBEV09SRCBmbGFnczsKKyAgICBEV09SRCB3cml0dGVuOworICAgIFdTQUJVRiB3c2FidWY7CisgICAgaW50IHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgIk8iIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZidWZvYmosICZmbGFncykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghUHlBcmdfUGFyc2UoYnVmb2JqLCAieSoiLCAmc2VsZi0+d3JpdGVfYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZiBTSVpFT0ZfU0laRV9UID4gU0laRU9GX0xPTkcKKyAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLmxlbiA+IChQeV9zc2l6ZV90KVVMT05HX01BWCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT53cml0ZV9idWZmZXIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ1ZmZlciB0byBsYXJnZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1dSSVRFOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKyAgICB3c2FidWYubGVuID0gKERXT1JEKXNlbGYtPndyaXRlX2J1ZmZlci5sZW47CisgICAgd3NhYnVmLmJ1ZiA9IHNlbGYtPndyaXRlX2J1ZmZlci5idWY7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gV1NBU2VuZCgoU09DS0VUKWhhbmRsZSwgJndzYWJ1ZiwgMSwgJndyaXR0ZW4sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgJnNlbGYtPm92ZXJsYXBwZWQsIE5VTEwpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IChyZXQgPCAwID8gV1NBR2V0TGFzdEVycm9yKCkgOiBFUlJPUl9TVUNDRVNTKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0FjY2VwdEV4X2RvYywKKyAgICAiQWNjZXB0RXgobGlzdGVuX2hhbmRsZSwgYWNjZXB0X2hhbmRsZSkgLT4gT3ZlcmxhcHBlZFthZGRyZXNzX2FzX2J5dGVzXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgd2FpdCBmb3IgY2xpZW50IHRvIGNvbm5lY3QiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfQWNjZXB0RXgoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIExpc3RlblNvY2tldDsKKyAgICBTT0NLRVQgQWNjZXB0U29ja2V0OworICAgIERXT1JEIEJ5dGVzUmVjZWl2ZWQ7CisgICAgRFdPUkQgc2l6ZTsKKyAgICBQeU9iamVjdCAqYnVmOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkxpc3RlblNvY2tldCwgJkFjY2VwdFNvY2tldCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgKyAxNjsKKyAgICBidWYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUqMik7CisgICAgaWYgKCFidWYpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfQUNDRVBUOworICAgIHNlbGYtPmhhbmRsZSA9IChIQU5ETEUpTGlzdGVuU29ja2V0OworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gYnVmOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFB5X0FjY2VwdEV4KExpc3RlblNvY2tldCwgQWNjZXB0U29ja2V0LCBQeUJ5dGVzX0FTX1NUUklORyhidWYpLAorICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemUsIHNpemUsICZCeXRlc1JlY2VpdmVkLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IFdTQUdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworCitzdGF0aWMgaW50CitwYXJzZV9hZGRyZXNzKFB5T2JqZWN0ICpvYmosIFNPQ0tBRERSICpBZGRyZXNzLCBpbnQgTGVuZ3RoKQoreworICAgIGNoYXIgKkhvc3Q7CisgICAgdW5zaWduZWQgc2hvcnQgUG9ydDsKKyAgICB1bnNpZ25lZCBsb25nIEZsb3dJbmZvOworICAgIHVuc2lnbmVkIGxvbmcgU2NvcGVJZDsKKworICAgIG1lbXNldChBZGRyZXNzLCAwLCBMZW5ndGgpOworCisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUob2JqLCAic0giLCAmSG9zdCwgJlBvcnQpKQorICAgIHsKKyAgICAgICAgQWRkcmVzcy0+c2FfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgaWYgKFdTQVN0cmluZ1RvQWRkcmVzc0EoSG9zdCwgQUZfSU5FVCwgTlVMTCwgQWRkcmVzcywgJkxlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKChTT0NLQUREUl9JTiopQWRkcmVzcyktPnNpbl9wb3J0ID0gaHRvbnMoUG9ydCk7CisgICAgICAgIHJldHVybiBMZW5ndGg7CisgICAgfQorICAgIGVsc2UgaWYgKFB5QXJnX1BhcnNlVHVwbGUob2JqLCAic0hrayIsICZIb3N0LCAmUG9ydCwgJkZsb3dJbmZvLCAmU2NvcGVJZCkpCisgICAgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBBZGRyZXNzLT5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgaWYgKFdTQVN0cmluZ1RvQWRkcmVzc0EoSG9zdCwgQUZfSU5FVDYsIE5VTEwsIEFkZHJlc3MsICZMZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICgoU09DS0FERFJfSU42KilBZGRyZXNzKS0+c2luNl9wb3J0ID0gaHRvbnMoUG9ydCk7CisgICAgICAgICgoU09DS0FERFJfSU42KilBZGRyZXNzKS0+c2luNl9mbG93aW5mbyA9IEZsb3dJbmZvOworICAgICAgICAoKFNPQ0tBRERSX0lONiopQWRkcmVzcyktPnNpbjZfc2NvcGVfaWQgPSBTY29wZUlkOworICAgICAgICByZXR1cm4gTGVuZ3RoOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9Db25uZWN0RXhfZG9jLAorICAgICJDb25uZWN0RXgoY2xpZW50X2hhbmRsZSwgYWRkcmVzc19hc19ieXRlcykgLT4gT3ZlcmxhcHBlZFtOb25lXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgY29ubmVjdC4gIGNsaWVudF9oYW5kbGUgc2hvdWxkIGJlIHVuYm91bmQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX0Nvbm5lY3RFeChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBTT0NLRVQgQ29ubmVjdFNvY2tldDsKKyAgICBQeU9iamVjdCAqQWRkcmVzc09iajsKKyAgICBjaGFyIEFkZHJlc3NCdWZbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpXTsKKyAgICBTT0NLQUREUiAqQWRkcmVzcyA9IChTT0NLQUREUiopQWRkcmVzc0J1ZjsKKyAgICBpbnQgTGVuZ3RoOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiTyIsICZDb25uZWN0U29ja2V0LCAmQWRkcmVzc09iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIExlbmd0aCA9IHNpemVvZihBZGRyZXNzQnVmKTsKKyAgICBMZW5ndGggPSBwYXJzZV9hZGRyZXNzKEFkZHJlc3NPYmosIEFkZHJlc3MsIExlbmd0aCk7CisgICAgaWYgKExlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfQ09OTkVDVDsKKyAgICBzZWxmLT5oYW5kbGUgPSAoSEFORExFKUNvbm5lY3RTb2NrZXQ7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUHlfQ29ubmVjdEV4KENvbm5lY3RTb2NrZXQsIEFkZHJlc3MsIExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeF9kb2MsCisgICAgIkRpc2Nvbm5lY3RFeChoYW5kbGUsIGZsYWdzKSAtPiBPdmVybGFwcGVkW05vbmVdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBjb25uZWN0LiAgY2xpZW50X2hhbmRsZSBzaG91bGQgYmUgdW5ib3VuZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfRGlzY29ubmVjdEV4KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBTb2NrZXQ7CisgICAgRFdPUkQgZmxhZ3M7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQsICZTb2NrZXQsICZmbGFncykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX0RJU0NPTk5FQ1Q7CisgICAgc2VsZi0+aGFuZGxlID0gKEhBTkRMRSlTb2NrZXQ7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUHlfRGlzY29ubmVjdEV4KFNvY2tldCwgJnNlbGYtPm92ZXJsYXBwZWQsIGZsYWdzLCAwKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogV1NBR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlX2RvYywKKyAgICAiQ29ubmVjdE5hbWVkUGlwZShoYW5kbGUpIC0+IE92ZXJsYXBwZWRbTm9uZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHdhaXQgZm9yIGEgY2xpZW50IHRvIGNvbm5lY3QuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGUoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIFBpcGU7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmUGlwZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX0NPTk5FQ1RfTkFNRURfUElQRTsKKyAgICBzZWxmLT5oYW5kbGUgPSBQaXBlOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IENvbm5lY3ROYW1lZFBpcGUoUGlwZSwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1BJUEVfQ09OTkVDVEVEOgorICAgICAgICAgICAgbWFya19hc19jb21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpOworICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworLyogVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBubyB3YXkgdG8gZG8gYW4gb3ZlcmxhcHBlZCBjb25uZWN0IHRvIGEKKyAgIHBpcGUuICBXZSBpbnN0ZWFkIHVzZSBXYWl0TmFtZWRQaXBlKCkgYW5kIENyZWF0ZUZpbGUoKSBpbiBhIHRocmVhZAorICAgcG9vbCB0aHJlYWQuICBJZiBhIGNvbm5lY3Rpb24gc3VjY2VlZHMgd2l0aGluIGEgdGltZSBsaW1pdCAoMTAKKyAgIHNlY29uZHMpIHRoZW4gUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoKSBpcyB1c2VkIHRvIHJldHVybiB0aGUKKyAgIHBpcGUgaGFuZGxlIHRvIHRoZSBjb21wbGV0aW9uIHBvcnQuICovCisKK3N0YXRpYyBEV09SRCBXSU5BUEkKK1dhaXROYW1lZFBpcGVBbmRDb25uZWN0SW5UaHJlYWQoV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RDb250ZXh0ICpjdHgpCit7CisgICAgSEFORExFIFBpcGVIYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICBEV09SRCBTdGFydCA9IEdldFRpY2tDb3VudCgpOworICAgIERXT1JEIERlYWRsaW5lID0gU3RhcnQgKyAxMCoxMDAwOworICAgIERXT1JEIEVycm9yID0gMDsKKyAgICBEV09SRCBUaW1lb3V0OworICAgIEJPT0wgU3VjY2VzczsKKworICAgIGZvciAoIDsgOyApIHsKKyAgICAgICAgVGltZW91dCA9IERlYWRsaW5lIC0gR2V0VGlja0NvdW50KCk7CisgICAgICAgIGlmICgoaW50KVRpbWVvdXQgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFN1Y2Nlc3MgPSBXYWl0TmFtZWRQaXBlKGN0eC0+QWRkcmVzcywgVGltZW91dCk7CisgICAgICAgIEVycm9yID0gU3VjY2VzcyA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgc3dpdGNoIChFcnJvcikgeworICAgICAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICAgICAgICAgIFBpcGVIYW5kbGUgPSBDcmVhdGVGaWxlKGN0eC0+QWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX09WRVJMQVBQRUQsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChQaXBlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfU0VNX1RJTUVPVVQ6CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoY3R4LT5Jb2NwSGFuZGxlLCBFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVTE9OR19QVFIpUGlwZUhhbmRsZSwgY3R4LT5PdmVybGFwcGVkKSkKKyAgICAgICAgQ2xvc2VIYW5kbGUoUGlwZUhhbmRsZSk7CisgICAgZnJlZShjdHgpOworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9XYWl0TmFtZWRQaXBlQW5kQ29ubmVjdF9kb2MsCisgICAgIldhaXROYW1lZFBpcGVBbmRDb25uZWN0KGFkZHIsIGlvY3BfaGFuZGxlKSAtPiBPdmVybGFwcGVkW3BpcGVfaGFuZGxlXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgY29ubmVjdGlvbiB0byBhZGRyZXNzLCBub3RpZnlpbmcgaW9jcF9oYW5kbGUgd2hlblxuIgorICAgICJmaW5pc2hlZCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9XYWl0TmFtZWRQaXBlQW5kQ29ubmVjdChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpBZGRyZXNzOworICAgIFB5X3NzaXplX3QgQWRkcmVzc0xlbmd0aDsKKyAgICBIQU5ETEUgSW9jcEhhbmRsZTsKKyAgICBPVkVSTEFQUEVEIE92ZXJsYXBwZWQ7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworICAgIFdhaXROYW1lZFBpcGVBbmRDb25uZWN0Q29udGV4dCAqY3R4OworICAgIFB5X3NzaXplX3QgQ29udGV4dExlbmd0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyMiIEZfSEFORExFIEZfUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkFkZHJlc3MsICZBZGRyZXNzTGVuZ3RoLCAmSW9jcEhhbmRsZSwgJk92ZXJsYXBwZWQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBDb250ZXh0TGVuZ3RoID0gKEFkZHJlc3NMZW5ndGggKworICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RDb250ZXh0LCBBZGRyZXNzKSk7CisgICAgY3R4ID0gY2FsbG9jKDEsIENvbnRleHRMZW5ndGggKyAxKTsKKyAgICBpZiAoY3R4ID09IE5VTEwpCisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIG1lbWNweShjdHgtPkFkZHJlc3MsIEFkZHJlc3MsIEFkZHJlc3NMZW5ndGggKyAxKTsKKyAgICBjdHgtPk92ZXJsYXBwZWQgPSAmc2VsZi0+b3ZlcmxhcHBlZDsKKyAgICBjdHgtPklvY3BIYW5kbGUgPSBJb2NwSGFuZGxlOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfV0FJVF9OQU1FRF9QSVBFX0FORF9DT05ORUNUOworICAgIHNlbGYtPmhhbmRsZSA9IE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUXVldWVVc2VyV29ya0l0ZW0oV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RJblRocmVhZCwgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdUX0VYRUNVVEVMT05HRlVOQ1RJT04pOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK092ZXJsYXBwZWRfZ2V0YWRkcmVzcyhPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbVZvaWRQdHIoJnNlbGYtPm92ZXJsYXBwZWQpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitPdmVybGFwcGVkX2dldHBlbmRpbmcoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKCFIYXNPdmVybGFwcGVkSW9Db21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT50eXBlICE9IFRZUEVfTk9UX1NUQVJURUQpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgT3ZlcmxhcHBlZF9tZXRob2RzW10gPSB7CisgICAgeyJnZXRyZXN1bHQiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfZ2V0cmVzdWx0LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfZ2V0cmVzdWx0X2RvY30sCisgICAgeyJjYW5jZWwiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfY2FuY2VsLAorICAgICBNRVRIX05PQVJHUywgT3ZlcmxhcHBlZF9jYW5jZWxfZG9jfSwKKyAgICB7IlJlYWRGaWxlIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1JlYWRGaWxlLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfUmVhZEZpbGVfZG9jfSwKKyAgICB7IldTQVJlY3YiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfV1NBUmVjdiwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1dTQVJlY3ZfZG9jfSwKKyAgICB7IldyaXRlRmlsZSIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9Xcml0ZUZpbGUsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9Xcml0ZUZpbGVfZG9jfSwKKyAgICB7IldTQVNlbmQiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfV1NBU2VuZCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1dTQVNlbmRfZG9jfSwKKyAgICB7IkFjY2VwdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0FjY2VwdEV4LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfQWNjZXB0RXhfZG9jfSwKKyAgICB7IkNvbm5lY3RFeCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9Db25uZWN0RXgsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9Db25uZWN0RXhfZG9jfSwKKyAgICB7IkRpc2Nvbm5lY3RFeCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9EaXNjb25uZWN0RXgsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9EaXNjb25uZWN0RXhfZG9jfSwKKyAgICB7IkNvbm5lY3ROYW1lZFBpcGUiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGVfZG9jfSwKKyAgICB7IldhaXROYW1lZFBpcGVBbmRDb25uZWN0IiwKKyAgICAgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dhaXROYW1lZFBpcGVBbmRDb25uZWN0LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RfZG9jfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeU1lbWJlckRlZiBPdmVybGFwcGVkX21lbWJlcnNbXSA9IHsKKyAgICB7ImVycm9yIiwgVF9VTE9ORywKKyAgICAgb2Zmc2V0b2YoT3ZlcmxhcHBlZE9iamVjdCwgZXJyb3IpLAorICAgICBSRUFET05MWSwgIkVycm9yIGZyb20gbGFzdCBvcGVyYXRpb24ifSwKKyAgICB7ImV2ZW50IiwgVF9IQU5ETEUsCisgICAgIG9mZnNldG9mKE92ZXJsYXBwZWRPYmplY3QsIG92ZXJsYXBwZWQpICsgb2Zmc2V0b2YoT1ZFUkxBUFBFRCwgaEV2ZW50KSwKKyAgICAgUkVBRE9OTFksICJPdmVybGFwcGVkIGV2ZW50IGhhbmRsZSJ9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIE92ZXJsYXBwZWRfZ2V0c2V0c1tdID0geworICAgIHsiYWRkcmVzcyIsIChnZXR0ZXIpT3ZlcmxhcHBlZF9nZXRhZGRyZXNzLCBOVUxMLAorICAgICAiQWRkcmVzcyBvZiBvdmVybGFwcGVkIHN0cnVjdHVyZSJ9LAorICAgIHsicGVuZGluZyIsIChnZXR0ZXIpT3ZlcmxhcHBlZF9nZXRwZW5kaW5nLCBOVUxMLAorICAgICAiV2hldGhlciB0aGUgb3BlcmF0aW9uIGlzIHBlbmRpbmcifSwKKyAgICB7TlVMTH0sCit9OworCitQeVR5cGVPYmplY3QgT3ZlcmxhcHBlZFR5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgLyogdHBfbmFtZSAgICAgICAgICAgKi8gIl9vdmVybGFwcGVkLk92ZXJsYXBwZWQiLAorICAgIC8qIHRwX2Jhc2ljc2l6ZSAgICAgICovIHNpemVvZihPdmVybGFwcGVkT2JqZWN0KSwKKyAgICAvKiB0cF9pdGVtc2l6ZSAgICAgICAqLyAwLAorICAgIC8qIHRwX2RlYWxsb2MgICAgICAgICovIChkZXN0cnVjdG9yKSBPdmVybGFwcGVkX2RlYWxsb2MsCisgICAgLyogdHBfcHJpbnQgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9nZXRhdHRyICAgICAgICAqLyAwLAorICAgIC8qIHRwX3NldGF0dHIgICAgICAgICovIDAsCisgICAgLyogdHBfcmVzZXJ2ZWQgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yZXByICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX251bWJlciAgICAgICovIDAsCisgICAgLyogdHBfYXNfc2VxdWVuY2UgICAgKi8gMCwKKyAgICAvKiB0cF9hc19tYXBwaW5nICAgICAqLyAwLAorICAgIC8qIHRwX2hhc2ggICAgICAgICAgICovIDAsCisgICAgLyogdHBfY2FsbCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9zdHIgICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2dldGF0dHJvICAgICAgICovIDAsCisgICAgLyogdHBfc2V0YXR0cm8gICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19idWZmZXIgICAgICAqLyAwLAorICAgIC8qIHRwX2ZsYWdzICAgICAgICAgICovIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICAvKiB0cF9kb2MgICAgICAgICAgICAqLyAiT1ZFUkxBUFBFRCBzdHJ1Y3R1cmUgd3JhcHBlciIsCisgICAgLyogdHBfdHJhdmVyc2UgICAgICAgKi8gMCwKKyAgICAvKiB0cF9jbGVhciAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX3JpY2hjb21wYXJlICAgICovIDAsCisgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8gMCwKKyAgICAvKiB0cF9pdGVyICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2l0ZXJuZXh0ICAgICAgICovIDAsCisgICAgLyogdHBfbWV0aG9kcyAgICAgICAgKi8gT3ZlcmxhcHBlZF9tZXRob2RzLAorICAgIC8qIHRwX21lbWJlcnMgICAgICAgICovIE92ZXJsYXBwZWRfbWVtYmVycywKKyAgICAvKiB0cF9nZXRzZXQgICAgICAgICAqLyBPdmVybGFwcGVkX2dldHNldHMsCisgICAgLyogdHBfYmFzZSAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9kaWN0ICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2Rlc2NyX2dldCAgICAgICovIDAsCisgICAgLyogdHBfZGVzY3Jfc2V0ICAgICAgKi8gMCwKKyAgICAvKiB0cF9kaWN0b2Zmc2V0ICAgICAqLyAwLAorICAgIC8qIHRwX2luaXQgICAgICAgICAgICovIDAsCisgICAgLyogdHBfYWxsb2MgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9uZXcgICAgICAgICAgICAqLyBPdmVybGFwcGVkX25ldywKK307CisKK3N0YXRpYyBQeU1ldGhvZERlZiBvdmVybGFwcGVkX2Z1bmN0aW9uc1tdID0geworICAgIHsiQ3JlYXRlSW9Db21wbGV0aW9uUG9ydCIsIG92ZXJsYXBwZWRfQ3JlYXRlSW9Db21wbGV0aW9uUG9ydCwKKyAgICAgTUVUSF9WQVJBUkdTLCBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0X2RvY30sCisgICAgeyJHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzIiwgb3ZlcmxhcHBlZF9HZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzLAorICAgICBNRVRIX1ZBUkFSR1MsIEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jfSwKKyAgICB7IlBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzIiwgb3ZlcmxhcHBlZF9Qb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cywKKyAgICAgTUVUSF9WQVJBUkdTLCBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2N9LAorICAgIHsiRm9ybWF0TWVzc2FnZSIsIG92ZXJsYXBwZWRfRm9ybWF0TWVzc2FnZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBGb3JtYXRNZXNzYWdlX2RvY30sCisgICAgeyJCaW5kTG9jYWwiLCBvdmVybGFwcGVkX0JpbmRMb2NhbCwKKyAgICAgTUVUSF9WQVJBUkdTLCBCaW5kTG9jYWxfZG9jfSwKKyAgICB7IlJlZ2lzdGVyV2FpdFdpdGhRdWV1ZSIsIG92ZXJsYXBwZWRfUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlLAorICAgICBNRVRIX1ZBUkFSR1MsIFJlZ2lzdGVyV2FpdFdpdGhRdWV1ZV9kb2N9LAorICAgIHsiVW5yZWdpc3RlcldhaXQiLCBvdmVybGFwcGVkX1VucmVnaXN0ZXJXYWl0LAorICAgICBNRVRIX1ZBUkFSR1MsIFVucmVnaXN0ZXJXYWl0X2RvY30sCisgICAgeyJDcmVhdGVFdmVudCIsIG92ZXJsYXBwZWRfQ3JlYXRlRXZlbnQsCisgICAgIE1FVEhfVkFSQVJHUywgQ3JlYXRlRXZlbnRfZG9jfSwKKyAgICB7IlNldEV2ZW50Iiwgb3ZlcmxhcHBlZF9TZXRFdmVudCwKKyAgICAgTUVUSF9WQVJBUkdTLCBTZXRFdmVudF9kb2N9LAorICAgIHsiUmVzZXRFdmVudCIsIG92ZXJsYXBwZWRfUmVzZXRFdmVudCwKKyAgICAgTUVUSF9WQVJBUkdTLCBSZXNldEV2ZW50X2RvY30sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG92ZXJsYXBwZWRfbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX292ZXJsYXBwZWQiLAorICAgIE5VTEwsCisgICAgLTEsCisgICAgb3ZlcmxhcHBlZF9mdW5jdGlvbnMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworI2RlZmluZSBXSU5BUElfQ09OU1RBTlQoZm10LCBjb24pIFwKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAjY29uLCBQeV9CdWlsZFZhbHVlKGZtdCwgY29uKSkKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fb3ZlcmxhcHBlZCh2b2lkKQoreworICAgIFB5T2JqZWN0ICptLCAqZDsKKworICAgIC8qIEVuc3VyZSBXU0FTdGFydHVwKCkgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXppbmcgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyAgICBtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJfc29ja2V0Iik7CisgICAgaWYgKCFtKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9ERUNSRUYobSk7CisKKyAgICBpZiAoaW5pdGlhbGl6ZV9mdW5jdGlvbl9wb2ludGVycygpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZPdmVybGFwcGVkVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJm92ZXJsYXBwZWRfbW9kdWxlKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJPdmVybGFwcGVkIiwgKFB5T2JqZWN0ICopJk92ZXJsYXBwZWRUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CisKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIEVSUk9SX0lPX1BFTkRJTkcpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfTkVUTkFNRV9ERUxFVEVEKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIEVSUk9SX1NFTV9USU1FT1VUKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIElORklOSVRFKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9IQU5ETEUsIElOVkFMSURfSEFORExFX1ZBTFVFKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9IQU5ETEUsIE5VTEwpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgU09fVVBEQVRFX0FDQ0VQVF9DT05URVhUKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIFNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgVEZfUkVVU0VfU09DS0VUKTsKKworICAgIHJldHVybiBtOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKaW5kZXggZTg2ZmU0ZC4uNTM3YTJlOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCkBAIC04Myw1NCArODMsNzggQEAKICAgICAgICAgICAgaW50IGxpbmVubywgICAgICAgICAgICAgICAgICAvKiBpbmNsdWRlIGxpbmUgbnVtYmVycz8gICAgICAgICAqLwogICAgICAgICAgICBpbnQgY29sX29mZnNldCkgICAgICAgICAgICAgIC8qIGluY2x1ZGUgY29sdW1uIG9mZnNldHM/ICAgICAgICovCiB7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEwsICp3OworCiAgICAgaWYgKG4gPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiAoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KKwogICAgIGlmIChJU05PTlRFUk1JTkFMKFRZUEUobikpKSB7CiAgICAgICAgIGludCBpOwotICAgICAgICBQeU9iamVjdCAqdjsKLSAgICAgICAgUHlPYmplY3QgKnc7CiAKLSAgICAgICAgdiA9IG1rc2VxKDEgKyBOQ0gobikgKyAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gKHYpOworICAgICAgICByZXN1bHQgPSBta3NlcSgxICsgTkNIKG4pICsgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkpOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcoVFlQRShuKSk7Ci0gICAgICAgIGlmICh3ID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIHJldHVybiAoKFB5T2JqZWN0KikgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHZvaWQpIGFkZGVsZW0odiwgMCwgdyk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDAsIHcpOworCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkrKykgewogICAgICAgICAgICAgdyA9IG5vZGUydHVwbGUoQ0hJTEQobiwgaSksIG1rc2VxLCBhZGRlbGVtLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChQeU9iamVjdCopIE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0odiwgaSsxLCB3KTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgaSsxLCB3KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpCi0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbSh2LCBpKzEsIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSkpOwotICAgICAgICByZXR1cm4gKHYpOworICAgICAgICBpZiAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKSB7CisgICAgICAgICAgICB3ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgaSsxLCB3KTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChJU1RFUk1JTkFMKFRZUEUobikpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBta3NlcSgyICsgbGluZW5vICsgY29sX29mZnNldCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAwLCBQeUxvbmdfRnJvbUxvbmcoVFlQRShuKSkpOwotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAxLCBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpKTsKLSAgICAgICAgICAgIGlmIChsaW5lbm8gPT0gMSkKLSAgICAgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDIsIFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2xpbmVubykpOwotICAgICAgICAgICAgaWYgKGNvbF9vZmZzZXQgPT0gMSkKLSAgICAgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDMsIFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2NvbF9vZmZzZXQpKTsKKyAgICAgICAgcmVzdWx0ID0gbWtzZXEoMiArIGxpbmVubyArIGNvbF9vZmZzZXQpOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcoVFlQRShuKSk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDAsIHcpOworCisgICAgICAgIHcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpOworICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAxLCB3KTsKKworICAgICAgICBpZiAobGluZW5vID09IDEpIHsKKyAgICAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcobi0+bl9saW5lbm8pOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAyLCB3KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGNvbF9vZmZzZXQgPT0gMSkgeworICAgICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAzLCB3KTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVucmVjb2duaXplZCBwYXJzZSB0cmVlIG5vZGUgdHlwZSIpOwogICAgICAgICByZXR1cm4gKChQeU9iamVjdCopIE5VTEwpOwogICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAvKgogICogIEVuZCBvZiBtYXRlcmlhbCBjb3B5cmlnaHRlZCBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0uCkBAIC00NTMsMzMgKzQ3Nyw0NiBAQAogc3RhdGljIFB5T2JqZWN0KgogcGFyc2VyX2NvbXBpbGVzdChQeVNUX09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKIHsKLSAgICBQeU9iamVjdCogICAgIHJlcyA9IDA7Ci0gICAgUHlBcmVuYSogICAgICBhcmVuYTsKKyAgICBQeU9iamVjdCogICAgIHJlcyA9IE5VTEw7CisgICAgUHlBcmVuYSogICAgICBhcmVuYSA9IE5VTEw7CiAgICAgbW9kX3R5ICAgICAgICBtb2Q7Ci0gICAgY2hhciogICAgICAgICBzdHIgPSAiPHN5bnRheC10cmVlPiI7CisgICAgUHlPYmplY3QqICAgICBmaWxlbmFtZSA9IE5VTEw7CiAgICAgaW50IG9rOwogCiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InN0IiwgImZpbGVuYW1lIiwgTlVMTH07CiAKICAgICBpZiAoc2VsZiA9PSBOVUxMIHx8IFB5TW9kdWxlX0NoZWNrKHNlbGYpKQotICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgIk8hfHM6Y29tcGlsZXN0Iiwga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeVNUX1R5cGUsICZzZWxmLCAmc3RyKTsKKyAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPIXxPJjpjb21waWxlc3QiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5U1RfVHlwZSwgJnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSk7CiAgICAgZWxzZQotICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxzOmNvbXBpbGUiLCAma2V5d29yZHNbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIpOworICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPJjpjb21waWxlIiwgJmtleXdvcmRzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUpOworICAgIGlmICghb2spCisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBpZiAob2spIHsKLSAgICAgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOwotICAgICAgICBpZiAoYXJlbmEpIHsKLSAgICAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGUoc2VsZi0+c3Rfbm9kZSwgJihzZWxmLT5zdF9mbGFncyksIHN0ciwgYXJlbmEpOwotICAgICAgICAgICBpZiAobW9kKSB7Ci0gICAgICAgICAgICAgICByZXMgPSAoUHlPYmplY3QgKilQeUFTVF9Db21waWxlKG1vZCwgc3RyLCAmKHNlbGYtPnN0X2ZsYWdzKSwgYXJlbmEpOwotICAgICAgICAgICB9Ci0gICAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7Ci0gICAgICAgIH0KKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8c3ludGF4LXRyZWU+Iik7CisgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICByZXR1cm4gKHJlcyk7CisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIGlmICghYXJlbmEpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZU9iamVjdChzZWxmLT5zdF9ub2RlLCAmc2VsZi0+c3RfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICBpZiAoIW1vZCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIHJlcyA9IChQeU9iamVjdCAqKVB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZWxmLT5zdF9mbGFncywgLTEsIGFyZW5hKTsKK2Vycm9yOgorICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworICAgIGlmIChhcmVuYSAhPSBOVUxMKQorICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOworICAgIHJldHVybiByZXM7CiB9CiAKIApAQCAtODA5LDggKzg0NiwxMyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RybiA9IChjaGFyICopUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwotICAgICAgICAgICAgaWYgKHN0cm4gIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHN0cm4sIHRlbXBfc3RyLCBsZW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChzdHJuID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihlbGVtKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKHZvaWQpIG1lbWNweShzdHJuLCB0ZW1wX3N0ciwgbGVuICsgMSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoIUlTTk9OVEVSTUlOQUwodHlwZSkpIHsKQEAgLTg3MCw3ICs5MTIsNyBAQAogICAgICAgICAgKiAgVGhlIHR1cGxlIGlzIHNpbXBsZSwgYnV0IGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIHN0YXJ0IHN5bWJvbC4KICAgICAgICAgICogIFJhaXNlIGFuIGV4Y2VwdGlvbiBub3cgYW5kIGJlIGRvbmUgd2l0aCBpdC4KICAgICAgICAgICovCi0gICAgICAgIHR1cGxlID0gUHlfQnVpbGRWYWx1ZSgib3MiLCB0dXBsZSwKKyAgICAgICAgdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCJPcyIsIHR1cGxlLAogICAgICAgICAgICAgICAgICAgICAiSWxsZWdhbCBzeW50YXgtdHJlZTsgY2Fubm90IHN0YXJ0IHdpdGggdGVybWluYWwgc3ltYm9sLiIpOwogICAgICAgICBQeUVycl9TZXRPYmplY3QocGFyc2VyX2Vycm9yLCB0dXBsZSk7CiAgICAgICAgIFB5X1hERUNSRUYodHVwbGUpOwpAQCAtOTA2LDggKzk0OCwxNCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmVzLT5uX3N0ciA9IChjaGFyICopUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwotICAgICAgICAgICAgICAgIGlmIChyZXMtPm5fc3RyICE9IE5VTEwgJiYgdGVtcCAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHJlcy0+bl9zdHIsIHRlbXAsIGxlbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChyZXMtPm5fc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGluZyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHJlcy0+bl9zdHIsIHRlbXAsIGxlbiArIDEpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGluZyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwppbmRleCBmMzIzNGE0Li43ODliZjI3YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwpAQCAtMSwxNSArMSwxNCBAQAogCiAvKiBQT1NJWCBtb2R1bGUgaW1wbGVtZW50YXRpb24gKi8KIAotLyogVGhpcyBmaWxlIGlzIGFsc28gdXNlZCBmb3IgV2luZG93cyBOVC9NUy1XaW4gYW5kIE9TLzIuICBJbiB0aGF0IGNhc2UgdGhlCi0gICBtb2R1bGUgYWN0dWFsbHkgY2FsbHMgaXRzZWxmICdudCcgb3IgJ29zMicsIG5vdCAncG9zaXgnLCBhbmQgYSBmZXcKKy8qIFRoaXMgZmlsZSBpcyBhbHNvIHVzZWQgZm9yIFdpbmRvd3MgTlQvTVMtV2luLiAgSW4gdGhhdCBjYXNlIHRoZQorICAgbW9kdWxlIGFjdHVhbGx5IGNhbGxzIGl0c2VsZiAnbnQnLCBub3QgJ3Bvc2l4JywgYW5kIGEgZmV3CiAgICBmdW5jdGlvbnMgYXJlIGVpdGhlciB1bmltcGxlbWVudGVkIG9yIGltcGxlbWVudGVkIGRpZmZlcmVudGx5LiAgVGhlIHNvdXJjZQogICAgYXNzdW1lcyB0aGF0IGZvciBXaW5kb3dzIE5ULCB0aGUgbWFjcm8gJ01TX1dJTkRPV1MnIGlzIGRlZmluZWQgaW5kZXBlbmRlbnQKICAgIG9mIHRoZSBjb21waWxlciB1c2VkLiAgRGlmZmVyZW50IGNvbXBpbGVycyBkZWZpbmUgdGhlaXIgb3duIGZlYXR1cmUKLSAgIHRlc3QgbWFjcm8sIGUuZy4gJ19fQk9STEFORENfXycgb3IgJ19NU0NfVkVSJy4gIEZvciBPUy8yLCB0aGUgY29tcGlsZXIKLSAgIGluZGVwZW5kZW50IG1hY3JvIFBZT1NfT1MyIHNob3VsZCBiZSBkZWZpbmVkLiAgT24gT1MvMiB0aGUgZGVmYXVsdAotICAgY29tcGlsZXIgaXMgYXNzdW1lZCB0byBiZSBJQk0ncyBWaXN1YWxBZ2UgQysrIChWQUNQUCkuICBQWUNDX0dDQyBpcyB1c2VkCi0gICBhcyB0aGUgY29tcGlsZXIgc3BlY2lmaWMgbWFjcm8gZm9yIHRoZSBFTVggcG9ydCBvZiBnY2MgdG8gT1MvMi4gKi8KKyAgIHRlc3QgbWFjcm8sIGUuZy4gJ19fQk9STEFORENfXycgb3IgJ19NU0NfVkVSJy4gKi8KKworCiAKICNpZmRlZiBfX0FQUExFX18KICAgIC8qCkBAIC00NiwyMiArNDUsNiBAQAogY29ycmVzcG9uZGluZyBVbml4IG1hbnVhbCBlbnRyaWVzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNhbGxzLiIpOwogCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotI2Vycm9yICJQRVAgMTE6IE9TLzIgaXMgbm93IHVuc3VwcG9ydGVkLCBjb2RlIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy40IgotI2RlZmluZSAgSU5DTF9ET1MKLSNkZWZpbmUgIElOQ0xfRE9TRVJST1JTCi0jZGVmaW5lICBJTkNMX0RPU1BST0NFU1MKLSNkZWZpbmUgIElOQ0xfTk9QTUFQSQotI2luY2x1ZGUgPG9zMi5oPgotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxpby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2VuZGlmCi0jaW5jbHVkZSAib3NkZWZzLmgiCi0jZW5kaWYKLQogI2lmZGVmIEhBVkVfU1lTX1VJT19ICiAjaW5jbHVkZSA8c3lzL3Vpby5oPgogI2VuZGlmCkBAIC0xMzIsNiArMTE1LDE4IEBACiAjaW5jbHVkZSA8ZGxmY24uaD4KICNlbmRpZgogCisjaWZkZWYgX19ocHV4CisjaW5jbHVkZSA8c3lzL21wY3RsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgXAorICAgIGRlZmluZWQoX19PcGVuQlNEX18pICAgfHwgXAorICAgIGRlZmluZWQoX19GcmVlQlNEX18pICAgfHwgXAorICAgIGRlZmluZWQoX19OZXRCU0RfXykgICAgfHwgXAorICAgIGRlZmluZWQoX19BUFBMRV9fKQorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogIyAgZGVmaW5lIFRFUk1TSVpFX1VTRV9DT05JTwogI2VsaWYgZGVmaW5lZChIQVZFX1NZU19JT0NUTF9IKQpAQCAtMTQ2LDI5ICsxNDEsMTkgQEAKIAogLyogVmFyaW91cyBjb21waWxlcnMgaGF2ZSBvbmx5IGNlcnRhaW4gcG9zaXggZnVuY3Rpb25zICovCiAvKiBYWFggR29zaCBJIHdpc2ggdGhlc2Ugd2VyZSBhbGwgbW92ZWQgaW50byBweWNvbmZpZy5oICovCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbHNlCiAjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoX19RTlhfXykgICAgICAgICAgIC8qIFdhdGNvbSBjb21waWxlciAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX09QRU5ESVIgICAgMQogI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgMQotI2lmIGRlZmluZWQoX19PUzJfXykKLSNkZWZpbmUgSEFWRV9FWEVDViAgICAgIDEKLSNkZWZpbmUgSEFWRV9XQUlUICAgICAgIDEKLSNlbmRpZgogI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNlbHNlCiAjaWZkZWYgX19CT1JMQU5EQ19fICAgICAgICAgICAgIC8qIEJvcmxhbmQgY29tcGlsZXIgKi8KICNkZWZpbmUgSEFWRV9FWEVDViAgICAgIDEKLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9PUEVORElSICAgIDEKICNkZWZpbmUgSEFWRV9QSVBFICAgICAgIDEKICNkZWZpbmUgSEFWRV9TWVNURU0gICAgIDEKICNkZWZpbmUgSEFWRV9XQUlUICAgICAgIDEKICNlbHNlCiAjaWZkZWYgX01TQ19WRVIgICAgICAgICAvKiBNaWNyb3NvZnQgY29tcGlsZXIgKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9HRVRQUElEICAgIDEKICNkZWZpbmUgSEFWRV9HRVRMT0dJTiAgIDEKICNkZWZpbmUgSEFWRV9TUEFXTlYgICAgIDEKQEAgLTE3OSw4ICsxNjQsOCBAQAogI2RlZmluZSBIQVZFX0ZTWU5DICAgICAgMQogI2RlZmluZSBmc3luYyBfY29tbWl0CiAjZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpIHx8IGRlZmluZWQoX19WTVMpCi0vKiBFdmVyeXRoaW5nIG5lZWRlZCBpcyBkZWZpbmVkIGluIFBDL29zMmVteC9weWNvbmZpZy5oIG9yIHZtcy9weWNvbmZpZy5oICovCisjaWYgZGVmaW5lZChfX1ZNUykKKy8qIEV2ZXJ5dGhpbmcgbmVlZGVkIGlzIGRlZmluZWQgaW4gdm1zL3B5Y29uZmlnLmggKi8KICNlbHNlICAgICAgICAgICAgICAgICAgIC8qIGFsbCBvdGhlciBjb21waWxlcnMgKi8KIC8qIFVuaXggZnVuY3Rpb25zIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lc24ndCBjaGVjayBmb3IgKi8KICNkZWZpbmUgSEFWRV9FWEVDViAgICAgIDEKQEAgLTE4OCw3ICsxNzMsNiBAQAogI2lmIGRlZmluZWQoX19VU0xDX18pICYmIGRlZmluZWQoX19TQ09fVkVSU0lPTl9fKSAgICAgICAvKiBTQ08gVURLIENvbXBpbGVyICovCiAjZGVmaW5lIEhBVkVfRk9SSzEgICAgICAxCiAjZW5kaWYKLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9HRVRFR0lEICAgIDEKICNkZWZpbmUgSEFWRV9HRVRFVUlEICAgIDEKICNkZWZpbmUgSEFWRV9HRVRHSUQgICAgIDEKQEAgLTIwMCwxMSArMTg0LDEwIEBACiAjZGVmaW5lIEhBVkVfU1lTVEVNICAgICAxCiAjZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCiAjZGVmaW5lIEhBVkVfVFRZTkFNRSAgICAxCi0jZW5kaWYgIC8qIFBZT1NfT1MyICYmIFBZQ0NfR0NDICYmIF9fVk1TICovCisjZW5kaWYgIC8qIF9fVk1TICovCiAjZW5kaWYgIC8qIF9NU0NfVkVSICovCiAjZW5kaWYgIC8qIF9fQk9STEFORENfXyAqLwogI2VuZGlmICAvKiAhIF9fV0FUQ09NQ19fIHx8IF9fUU5YX18gKi8KLSNlbmRpZiAvKiAhIF9fSUJNQ19fICovCiAKIAogCkBAIC0zMzUsMTAgKzMxOCw2IEBACiAjZW5kaWYKICNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYgLyogT1MyICovCi0KICNpZm5kZWYgTUFYUEFUSExFTgogI2lmIGRlZmluZWQoUEFUSF9NQVgpICYmIFBBVEhfTUFYID4gMTAyNAogI2RlZmluZSBNQVhQQVRITEVOIFBBVEhfTUFYCkBAIC0zODAsNyArMzU5LDcgQEAKICN1bmRlZiBTVEFUCiAjdW5kZWYgRlNUQVQKICN1bmRlZiBTVFJVQ1RfU1RBVAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAjICAgICAgIGRlZmluZSBTVEFUIHdpbjMyX3N0YXQKICMgICAgICAgZGVmaW5lIExTVEFUIHdpbjMyX2xzdGF0CiAjICAgICAgIGRlZmluZSBGU1RBVCB3aW4zMl9mc3RhdApAQCAtNDM2LDEwOCArNDE1LDIxMyBAQAogaW50CiBfUHlfVWlkX0NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwKQogeworICAgIHVpZF90IHVpZDsKKyAgICBQeU9iamVjdCAqaW5kZXg7CiAgICAgaW50IG92ZXJmbG93OwogICAgIGxvbmcgcmVzdWx0OwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiKTsKKyAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7CisKKyAgICBpbmRleCA9IFB5TnVtYmVyX0luZGV4KG9iaik7CisgICAgaWYgKGluZGV4ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ1aWQgc2hvdWxkIGJlIGludGVnZXIsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmosICZvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93IDwgMCkKLSAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgaWYgKCFvdmVyZmxvdyAmJiByZXN1bHQgPT0gLTEpIHsKLSAgICAgICAgLyogZXJyb3Igb3IgLTEgKi8KLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgKih1aWRfdCAqKXAgPSAodWlkX3QpLTE7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiB1bnNpZ25lZCB1aWRfdCAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7Ci0gICAgICAgIGlmIChvdmVyZmxvdyA+IDApIHsKLSAgICAgICAgICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob2JqKTsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgodWlkX3QpdXJlc3VsdCA9PSAodWlkX3QpLTEpCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgICAgICAgICB1cmVzdWx0ID0gcmVzdWx0OworCisgICAgLyoKKyAgICAgKiBIYW5kbGluZyB1aWRfdCBpcyBjb21wbGljYXRlZCBmb3IgdHdvIHJlYXNvbnM6CisgICAgICogICogQWx0aG91Z2ggdWlkX3QgaXMgKGFsd2F5cz8pIHVuc2lnbmVkLCBpdCBzdGlsbAorICAgICAqICAgIGFjY2VwdHMgLTEuCisgICAgICogICogV2UgZG9uJ3Qga25vdyBpdHMgc2l6ZSBpbiBhZHZhbmNlLS1pdCBtYXkgYmUKKyAgICAgKiAgICBiaWdnZXIgdGhhbiBhbiBpbnQsIG9yIGl0IG1heSBiZSBzbWFsbGVyIHRoYW4KKyAgICAgKiAgICBhIGxvbmcuCisgICAgICoKKyAgICAgKiBTbyBhIGJpdCBvZiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgaXMgaW4gb3JkZXIuCisgICAgICogU3RhcnQgd2l0aCBpbnRlcnByZXRpbmcgdGhlIHZhbHVlIHBhc3NlZAorICAgICAqIGluIGFzIGEgc2lnbmVkIGxvbmcgYW5kIHNlZSBpZiBpdCB3b3Jrcy4KKyAgICAgKi8KKworICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpbmRleCwgJm92ZXJmbG93KTsKKworICAgIGlmICghb3ZlcmZsb3cpIHsKKyAgICAgICAgdWlkID0gKHVpZF90KXJlc3VsdDsKKworICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAvKiBJdCdzIGEgbGVnaXRpbWF0ZSAtMSwgd2UncmUgZG9uZS4gKi8KKyAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICAgICAgfQorCisgICAgICAgIC8qIEFueSBvdGhlciBuZWdhdGl2ZSBudW1iZXIgaXMgZGlzYWxsb3dlZC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKworICAgICAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCiAgICAgICAgIGlmIChzaXplb2YodWlkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCi0gICAgICAgICAgICAodW5zaWduZWQgbG9uZykodWlkX3QpdXJlc3VsdCAhPSB1cmVzdWx0KQotICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAqKHVpZF90ICopcCA9ICh1aWRfdCl1cmVzdWx0OworICAgICAgICAgICAgKGxvbmcpdWlkICE9IHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgfQorCisgICAgaWYgKG92ZXJmbG93IDwgMCkKKyAgICAgICAgZ290byB1bmRlcmZsb3c7CisKKyAgICAvKgorICAgICAqIE9rYXksIHRoZSB2YWx1ZSBvdmVyZmxvd2VkIGEgc2lnbmVkIGxvbmcuICBJZiBpdAorICAgICAqIGZpdHMgaW4gYW4gKnVuc2lnbmVkKiBsb25nLCBpdCBtYXkgc3RpbGwgYmUgb2theSwKKyAgICAgKiBhcyB1aWRfdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBvbiB0aGlzIHBsYXRmb3JtLgorICAgICAqLworICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoaW5kZXgpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHVpZCA9ICh1aWRfdCl1cmVzdWx0OworCisgICAgLyoKKyAgICAgKiBJZiB1aWQgPT0gKHVpZF90KS0xLCB0aGUgdXNlciBhY3R1YWxseSBwYXNzZWQgaW4gVUxPTkdfTUFYLAorICAgICAqIGJ1dCB0aGlzIHZhbHVlIHdvdWxkIGdldCBpbnRlcnByZXRlZCBhcyAodWlkX3QpLTEgIGJ5IGNob3duCisgICAgICogYW5kIGl0cyBzaWJsaW5ncy4gICBUaGF0J3Mgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQhICBTbyB3ZQorICAgICAqIHRocm93IGFuIG92ZXJmbG93IGV4Y2VwdGlvbiBpbnN0ZWFkLiAgIChXZSBhbHJlYWR5CisgICAgICogaGFuZGxlZCBhIHJlYWwgLTEgd2l0aCBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coKSBhYm92ZS4pCisgICAgICovCisgICAgaWYgKHVpZCA9PSAodWlkX3QpLTEpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisKKyAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCisgICAgaWYgKHNpemVvZih1aWRfdCkgPCBzaXplb2YobG9uZykgJiYKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcpdWlkICE9IHVyZXN1bHQpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworc3VjY2VzczoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOworICAgICoodWlkX3QgKilwID0gdWlkOwogICAgIHJldHVybiAxOwogCi1PdmVyZmxvd0Rvd246Cit1bmRlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJ1c2VyIGlkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7Ci0gICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICJ1aWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKKyAgICBnb3RvIGZhaWw7CiAKLU92ZXJmbG93VXA6CitvdmVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgInVzZXIgaWQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgInVpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK2ZhaWw6CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICByZXR1cm4gMDsKIH0KIAogaW50CiBfUHlfR2lkX0NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwKQogeworICAgIGdpZF90IGdpZDsKKyAgICBQeU9iamVjdCAqaW5kZXg7CiAgICAgaW50IG92ZXJmbG93OwogICAgIGxvbmcgcmVzdWx0OwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiKTsKKyAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7CisKKyAgICBpbmRleCA9IFB5TnVtYmVyX0luZGV4KG9iaik7CisgICAgaWYgKGluZGV4ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJnaWQgc2hvdWxkIGJlIGludGVnZXIsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmosICZvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93IDwgMCkKLSAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgaWYgKCFvdmVyZmxvdyAmJiByZXN1bHQgPT0gLTEpIHsKLSAgICAgICAgLyogZXJyb3Igb3IgLTEgKi8KLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgKihnaWRfdCAqKXAgPSAoZ2lkX3QpLTE7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiB1bnNpZ25lZCBnaWRfdCAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7Ci0gICAgICAgIGlmIChvdmVyZmxvdyA+IDApIHsKLSAgICAgICAgICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob2JqKTsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoZ2lkX3QpdXJlc3VsdCA9PSAoZ2lkX3QpLTEpCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd0Rvd247Ci0gICAgICAgICAgICB1cmVzdWx0ID0gcmVzdWx0OworCisgICAgLyoKKyAgICAgKiBIYW5kbGluZyBnaWRfdCBpcyBjb21wbGljYXRlZCBmb3IgdHdvIHJlYXNvbnM6CisgICAgICogICogQWx0aG91Z2ggZ2lkX3QgaXMgKGFsd2F5cz8pIHVuc2lnbmVkLCBpdCBzdGlsbAorICAgICAqICAgIGFjY2VwdHMgLTEuCisgICAgICogICogV2UgZG9uJ3Qga25vdyBpdHMgc2l6ZSBpbiBhZHZhbmNlLS1pdCBtYXkgYmUKKyAgICAgKiAgICBiaWdnZXIgdGhhbiBhbiBpbnQsIG9yIGl0IG1heSBiZSBzbWFsbGVyIHRoYW4KKyAgICAgKiAgICBhIGxvbmcuCisgICAgICoKKyAgICAgKiBTbyBhIGJpdCBvZiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgaXMgaW4gb3JkZXIuCisgICAgICogU3RhcnQgd2l0aCBpbnRlcnByZXRpbmcgdGhlIHZhbHVlIHBhc3NlZAorICAgICAqIGluIGFzIGEgc2lnbmVkIGxvbmcgYW5kIHNlZSBpZiBpdCB3b3Jrcy4KKyAgICAgKi8KKworICAgIHJlc3VsdCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpbmRleCwgJm92ZXJmbG93KTsKKworICAgIGlmICghb3ZlcmZsb3cpIHsKKyAgICAgICAgZ2lkID0gKGdpZF90KXJlc3VsdDsKKworICAgICAgICBpZiAocmVzdWx0ID09IC0xKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICAvKiBJdCdzIGEgbGVnaXRpbWF0ZSAtMSwgd2UncmUgZG9uZS4gKi8KKyAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICAgICAgfQorCisgICAgICAgIC8qIEFueSBvdGhlciBuZWdhdGl2ZSBudW1iZXIgaXMgZGlzYWxsb3dlZC4gKi8KKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICB9CisKKyAgICAgICAgLyogRW5zdXJlIHRoZSB2YWx1ZSB3YXNuJ3QgdHJ1bmNhdGVkLiAqLwogICAgICAgICBpZiAoc2l6ZW9mKGdpZF90KSA8IHNpemVvZihsb25nKSAmJgotICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKGdpZF90KXVyZXN1bHQgIT0gdXJlc3VsdCkKLSAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgKihnaWRfdCAqKXAgPSAoZ2lkX3QpdXJlc3VsdDsKKyAgICAgICAgICAgIChsb25nKWdpZCAhPSByZXN1bHQpCisgICAgICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKyAgICAgICAgZ290byBzdWNjZXNzOwogICAgIH0KKworICAgIGlmIChvdmVyZmxvdyA8IDApCisgICAgICAgIGdvdG8gdW5kZXJmbG93OworCisgICAgLyoKKyAgICAgKiBPa2F5LCB0aGUgdmFsdWUgb3ZlcmZsb3dlZCBhIHNpZ25lZCBsb25nLiAgSWYgaXQKKyAgICAgKiBmaXRzIGluIGFuICp1bnNpZ25lZCogbG9uZywgaXQgbWF5IHN0aWxsIGJlIG9rYXksCisgICAgICogYXMgZ2lkX3QgbWF5IGJlIHVuc2lnbmVkIGxvbmcgb24gdGhpcyBwbGF0Zm9ybS4KKyAgICAgKi8KKyAgICB1cmVzdWx0ID0gUHlMb25nX0FzVW5zaWduZWRMb25nKGluZGV4KTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBnaWQgPSAoZ2lkX3QpdXJlc3VsdDsKKworICAgIC8qCisgICAgICogSWYgZ2lkID09IChnaWRfdCktMSwgdGhlIHVzZXIgYWN0dWFsbHkgcGFzc2VkIGluIFVMT05HX01BWCwKKyAgICAgKiBidXQgdGhpcyB2YWx1ZSB3b3VsZCBnZXQgaW50ZXJwcmV0ZWQgYXMgKGdpZF90KS0xICBieSBjaG93bgorICAgICAqIGFuZCBpdHMgc2libGluZ3MuICAgVGhhdCdzIG5vdCB3aGF0IHRoZSB1c2VyIG1lYW50ISAgU28gd2UKKyAgICAgKiB0aHJvdyBhbiBvdmVyZmxvdyBleGNlcHRpb24gaW5zdGVhZC4gICAoV2UgYWxyZWFkeQorICAgICAqIGhhbmRsZWQgYSByZWFsIC0xIHdpdGggUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KCkgYWJvdmUuKQorICAgICAqLworICAgIGlmIChnaWQgPT0gKGdpZF90KS0xKQorICAgICAgICBnb3RvIG92ZXJmbG93OworCisgICAgLyogRW5zdXJlIHRoZSB2YWx1ZSB3YXNuJ3QgdHJ1bmNhdGVkLiAqLworICAgIGlmIChzaXplb2YoZ2lkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCisgICAgICAgICh1bnNpZ25lZCBsb25nKWdpZCAhPSB1cmVzdWx0KQorICAgICAgICBnb3RvIG92ZXJmbG93OworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK3N1Y2Nlc3M6CisgICAgUHlfREVDUkVGKGluZGV4KTsKKyAgICAqKGdpZF90ICopcCA9IGdpZDsKICAgICByZXR1cm4gMTsKIAotT3ZlcmZsb3dEb3duOgordW5kZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAiZ3JvdXAgaWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgImdpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgIGdvdG8gZmFpbDsKIAotT3ZlcmZsb3dVcDoKK292ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAiZ3JvdXAgaWQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgImdpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK2ZhaWw6CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICByZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBNU19XSU5ET1dTICovCkBAIC01NjAsMjUgKzY0NCwyOSBAQAogX2ZkX2NvbnZlcnRlcihQeU9iamVjdCAqbywgaW50ICpwLCBjb25zdCBjaGFyICphbGxvd2VkKQogewogICAgIGludCBvdmVyZmxvdzsKLSAgICBsb25nIGxvbmdfdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobywgJm92ZXJmbG93KTsKLSAgICBpZiAoUHlGbG9hdF9DaGVjayhvKSB8fAotICAgICAgICAobG9uZ192YWx1ZSA9PSAtMSAmJiAhb3ZlcmZsb3cgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIHsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBsb25nIGxvbmdfdmFsdWU7CisKKyAgICBQeU9iamVjdCAqaW5kZXggPSBQeU51bWJlcl9JbmRleChvKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IHNob3VsZCBiZSAlcywgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkLCBQeV9UWVBFKG8pLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBzaG91bGQgYmUgJXMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCwgUHlfVFlQRShvKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAgIGxvbmdfdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coaW5kZXgsICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICBpZiAob3ZlcmZsb3cgPiAwIHx8IGxvbmdfdmFsdWUgPiBJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25lZCBpbnRlZ2VyIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmIChvdmVyZmxvdyA8IDAgfHwgbG9uZ192YWx1ZSA8IElOVF9NSU4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVkIGludGVnZXIgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisKICAgICAqcCA9IChpbnQpbG9uZ192YWx1ZTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTYyNiw3ICs3MTQsNyBAQAogICogICBwYXRoLmZ1bmN0aW9uX25hbWUKICAqICAgICBJZiBub24tTlVMTCwgcGF0aF9jb252ZXJ0ZXIgd2lsbCB1c2UgdGhhdCBhcyB0aGUgbmFtZQogICogICAgIG9mIHRoZSBmdW5jdGlvbiBpbiBlcnJvciBtZXNzYWdlcy4KLSAqICAgICAoSWYgcGF0aC5hcmd1bWVudF9uYW1lIGlzIE5VTEwgaXQgb21pdHMgdGhlIGZ1bmN0aW9uIG5hbWUuKQorICogICAgIChJZiBwYXRoLmZ1bmN0aW9uX25hbWUgaXMgTlVMTCBpdCBvbWl0cyB0aGUgZnVuY3Rpb24gbmFtZS4pCiAgKiAgIHBhdGguYXJndW1lbnRfbmFtZQogICogICAgIElmIG5vbi1OVUxMLCBwYXRoX2NvbnZlcnRlciB3aWxsIHVzZSB0aGF0IGFzIHRoZSBuYW1lCiAgKiAgICAgb2YgdGhlIHBhcmFtZXRlciBpbiBlcnJvciBtZXNzYWdlcy4KQEAgLTY3OCw4ICs3NjYsOCBAQAogICogcGF0aF9jbGVhbnVwKCkuICBIb3dldmVyIGl0IGlzIHNhZmUgdG8gZG8gc28uKQogICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAqZnVuY3Rpb25fbmFtZTsKLSAgICBjaGFyICphcmd1bWVudF9uYW1lOworICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWU7CisgICAgY29uc3QgY2hhciAqYXJndW1lbnRfbmFtZTsKICAgICBpbnQgbnVsbGFibGU7CiAgICAgaW50IGFsbG93X2ZkOwogICAgIHdjaGFyX3QgKndpZGU7CkBAIC02OTAsNiArNzc4LDkgQEAKICAgICBQeU9iamVjdCAqY2xlYW51cDsKIH0gcGF0aF90OwogCisjZGVmaW5lIFBBVEhfVF9JTklUSUFMSVpFKGZ1bmN0aW9uX25hbWUsIG51bGxhYmxlLCBhbGxvd19mZCkgXAorICAgIHtmdW5jdGlvbl9uYW1lLCBOVUxMLCBudWxsYWJsZSwgYWxsb3dfZmQsIE5VTEwsIE5VTEwsIDAsIDAsIE5VTEwsIE5VTEx9CisKIHN0YXRpYyB2b2lkCiBwYXRoX2NsZWFudXAocGF0aF90ICpwYXRoKSB7CiAgICAgaWYgKHBhdGgtPmNsZWFudXApIHsKQEAgLTExMDUsMTAgKzExOTYsNiBAQAogI2Vsc2UKICAgICBjaGFyICoqZTsKICNlbmRpZgotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgQVBJUkVUIHJjOwotICAgIGNoYXIgICBidWZmZXJbMTAyNF07IC8qIE9TLzIgUHJvdmlkZXMgYSBEb2N1bWVudGVkIE1heCBvZiAxMDI0IENoYXJzICovCi0jZW5kaWYKIAogICAgIGQgPSBQeURpY3RfTmV3KCk7CiAgICAgaWYgKGQgPT0gTlVMTCkKQEAgLTExNzcsMjAgKzEyNjQsNiBAQAogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgfQogI2VuZGlmCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICByYyA9IERvc1F1ZXJ5RXh0TElCUEFUSChidWZmZXIsIEJFR0lOX0xJQlBBVEgpOwotICAgIGlmIChyYyA9PSBOT19FUlJPUikgeyAvKiAobm90IGEgdHlwZSwgZW52bmFtZSBpcyBOT1QgJ0JFR0lOX0xJQlBBVEgnKSAqLwotICAgICAgICBQeU9iamVjdCAqdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhidWZmZXIpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQkVHSU5MSUJQQVRIIiwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci0gICAgcmMgPSBEb3NRdWVyeUV4dExJQlBBVEgoYnVmZmVyLCBFTkRfTElCUEFUSCk7Ci0gICAgaWYgKHJjID09IE5PX0VSUk9SKSB7IC8qIChub3QgYSB0eXBvLCBlbnZuYW1lIGlzIE5PVCAnRU5EX0xJQlBBVEgnKSAqLwotICAgICAgICBQeU9iamVjdCAqdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhidWZmZXIpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiRU5ETElCUEFUSCIsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIGQ7CiB9CiAKQEAgLTEyMDEsMjUgKzEyNzQsNiBAQAogewogICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiB9Ci1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZXJyb3Jfd2l0aF9maWxlbmFtZShjaGFyKiBuYW1lKQotewotICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfT1NFcnJvciwgbmFtZSk7Ci19Ci0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKFB5T2JqZWN0KiBuYW1lKQotewotICAgIFB5T2JqZWN0ICpuYW1lX3N0ciwgKnJjOwotICAgIG5hbWVfc3RyID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoUHlCeXRlc19Bc1N0cmluZyhuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUobmFtZSkpOwotICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICByYyA9IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfc3RyKTsKLSAgICBQeV9YREVDUkVGKG5hbWVfc3RyKTsKLSAgICByZXR1cm4gcmM7Ci19CiAKICNpZmRlZiBNU19XSU5ET1dTCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTIzOCwyNCArMTI5MiwxMyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotd2luMzJfZXJyb3JfdW5pY29kZShjaGFyKiBmdW5jdGlvbiwgd2NoYXJfdCogZmlsZW5hbWUpCi17Ci0gICAgLyogWFhYIC0gc2VlIHdpbjMyX2Vycm9yIGZvciBjb21tZW50cyBvbiAnZnVuY3Rpb24nICovCi0gICAgZXJybm8gPSBHZXRMYXN0RXJyb3IoKTsKLSAgICBpZiAoZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhVbmljb2RlRmlsZW5hbWUoZXJybm8sIGZpbGVuYW1lKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnJubyk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCiB3aW4zMl9lcnJvcl9vYmplY3QoY2hhciogZnVuY3Rpb24sIFB5T2JqZWN0KiBmaWxlbmFtZSkKIHsKICAgICAvKiBYWFggLSBzZWUgd2luMzJfZXJyb3IgZm9yIGNvbW1lbnRzIG9uICdmdW5jdGlvbicgKi8KICAgICBlcnJubyA9IEdldExhc3RFcnJvcigpOwogICAgIGlmIChmaWxlbmFtZSkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICBQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgIGVycm5vLAogICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7CiAgICAgZWxzZQpAQCAtMTI2NCwxMDggKzEzMDcsMTcgQEAKIAogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAotLyoKLSAqIFNvbWUgZnVuY3Rpb25zIHJldHVybiBXaW4zMiBlcnJvcnMsIG90aGVycyBvbmx5IGV2ZXIgdXNlIHBvc2l4X2Vycm9yCi0gKiAodGhpcyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBleGNlcHRpb25zKQotICovCiBzdGF0aWMgUHlPYmplY3QgKgotcGF0aF9wb3NpeF9lcnJvcihjaGFyICpmdW5jdGlvbl9uYW1lLCBwYXRoX3QgKnBhdGgpCi17Ci0gICAgaWYgKHBhdGgtPm5hcnJvdykKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfZmlsZW5hbWUocGF0aC0+bmFycm93KTsKLSAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXBhdGhfZXJyb3IoY2hhciAqZnVuY3Rpb25fbmFtZSwgcGF0aF90ICpwYXRoKQorcGF0aF9lcnJvcihwYXRoX3QgKnBhdGgpCiB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChwYXRoLT5uYXJyb3cpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcihmdW5jdGlvbl9uYW1lLCBwYXRoLT5uYXJyb3cpOwotICAgIGlmIChwYXRoLT53aWRlKQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZShmdW5jdGlvbl9uYW1lLCBwYXRoLT53aWRlKTsKLSAgICByZXR1cm4gd2luMzJfZXJyb3IoZnVuY3Rpb25fbmFtZSwgTlVMTCk7CisgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHBhdGgtPm9iamVjdCk7CiAjZWxzZQotICAgIHJldHVybiBwYXRoX3Bvc2l4X2Vycm9yKGZ1bmN0aW9uX25hbWUsIHBhdGgpOworICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgcGF0aC0+b2JqZWN0KTsKICNlbmRpZgogfQogCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIEhlbHBlciBGdW5jdGlvbiB0byBUcmltIGFuZCBGb3JtYXQgT1MvMiBNZXNzYWdlcwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAotb3MyX2Zvcm1hdG1zZyhjaGFyICptc2didWYsIGludCBtc2dsZW4sIGNoYXIgKnJlYXNvbikKLXsKLSAgICBtc2didWZbbXNnbGVuXSA9ICdcMCc7IC8qIE9TLzIgRG9lc24ndCBHdWFyYW50ZWUgYSBUZXJtaW5hdG9yICovCi0KLSAgICBpZiAoc3RybGVuKG1zZ2J1ZikgPiAwKSB7IC8qIElmIE5vbi1FbXB0eSBNc2csIFRyaW0gQ1JMRiAqLwotICAgICAgICBjaGFyICpsYXN0YyA9ICZtc2didWZbIHN0cmxlbihtc2didWYpLTEgXTsKLQotICAgICAgICB3aGlsZSAobGFzdGMgPiBtc2didWYgJiYgUHlfSVNTUEFDRShQeV9DSEFSTUFTSygqbGFzdGMpKSkKLSAgICAgICAgICAgICpsYXN0Yy0tID0gJ1wwJzsgLyogVHJpbSBUcmFpbGluZyBXaGl0ZXNwYWNlIChDUkxGKSAqLwotICAgIH0KLQotICAgIC8qIEFkZCBPcHRpb25hbCBSZWFzb24gVGV4dCAqLwotICAgIGlmIChyZWFzb24pIHsKLSAgICAgICAgc3RyY2F0KG1zZ2J1ZiwgIiA6ICIpOwotICAgICAgICBzdHJjYXQobXNnYnVmLCByZWFzb24pOwotICAgIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgIERlY29kZSBhbiBPUy8yIE9wZXJhdGluZyBTeXN0ZW0gRXJyb3IgQ29kZQotICoKLSAqIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbG9va3VwIGFuIE9TLzIgZXJyb3IgY29kZSBhbmQgcmV0dXJuIGEKLSAqIHRleHQgbWVzc2FnZSB3ZSBjYW4gdXNlIHRvIHJhaXNlIGEgUHl0aG9uIGV4Y2VwdGlvbi4KLSAqCi0gKiBOb3RlczoKLSAqICAgVGhlIG1lc3NhZ2VzIGZvciBlcnJvcnMgcmV0dXJuZWQgZnJvbSB0aGUgT1MvMiBrZXJuZWwgcmVzaWRlIGluCi0gKiAgIHRoZSBmaWxlIE9TTzAwMS5NU0cgaW4gdGhlIFxPUzIgZGlyZWN0b3J5IGhpZXJhcmNoeS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBjaGFyICoKLW9zMl9zdHJlcnJvcihjaGFyICptc2didWYsIGludCBtc2didWZsZW4sIGludCBlcnJvcmNvZGUsIGNoYXIgKnJlYXNvbikKLXsKLSAgICBBUElSRVQgcmM7Ci0gICAgVUxPTkcgIG1zZ2xlbjsKLQotICAgIC8qIFJldHJpZXZlIEtlcm5lbC1SZWxhdGVkIEVycm9yIE1lc3NhZ2UgZnJvbSBPU08wMDEuTVNHIEZpbGUgKi8KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBEb3NHZXRNZXNzYWdlKE5VTEwsIDAsIG1zZ2J1ZiwgbXNnYnVmbGVuLAotICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmNvZGUsICJvc28wMDEubXNnIiwgJm1zZ2xlbik7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmIChyYyA9PSBOT19FUlJPUikKLSAgICAgICAgb3MyX2Zvcm1hdG1zZyhtc2didWYsIG1zZ2xlbiwgcmVhc29uKTsKLSAgICBlbHNlCi0gICAgICAgIFB5T1Nfc25wcmludGYobXNnYnVmLCBtc2didWZsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgInVua25vd24gT1MgZXJyb3IgIyVkIiwgZXJyb3Jjb2RlKTsKLQotICAgIHJldHVybiBtc2didWY7Ci19Ci0KLS8qIFNldCBhbiBPUy8yLXNwZWNpZmljIGVycm9yIGFuZCByZXR1cm4gTlVMTC4gIE9TLzIga2VybmVsCi0gICBlcnJvcnMgYXJlIG5vdCBpbiBhIGdsb2JhbCB2YXJpYWJsZSBlLmcuICdlcnJubycgbm9yIGFyZQotICAgdGhleSBjb25ncnVlbnQgd2l0aCBwb3NpeCBlcnJvciBudW1iZXJzLiAqLwotCi1zdGF0aWMgUHlPYmplY3QgKgotb3MyX2Vycm9yKGludCBjb2RlKQotewotICAgIGNoYXIgdGV4dFsxMDI0XTsKLSAgICBQeU9iamVjdCAqdjsKLQotICAgIG9zMl9zdHJlcnJvcih0ZXh0LCBzaXplb2YodGV4dCksIGNvZGUsICIiKTsKLQotICAgIHYgPSBQeV9CdWlsZFZhbHVlKCIoaXMpIiwgY29kZSwgdGV4dCk7Ci0gICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfT1NFcnJvciwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7IC8qIFNpZ25hbCB0byBQeXRob24gdGhhdCBhbiBFeGNlcHRpb24gaXMgUGVuZGluZyAqLwotfQotCi0jZW5kaWYgLyogT1MyICovCiAKIC8qIFBPU0lYIGdlbmVyaWMgbWV0aG9kcyAqLwogCkBAIC0xMzg5LDY1ICsxMzQxLDMxIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF8xc3RyKFB5T2JqZWN0ICphcmdzLCBjaGFyICpmb3JtYXQsIGludCAoKmZ1bmMpKGNvbnN0IGNoYXIqKSkKK3Bvc2l4XzFzdHIoY29uc3QgY2hhciAqZnVuY19uYW1lLCBQeU9iamVjdCAqYXJncywgY2hhciAqZm9ybWF0LAorICAgICAgICAgICBpbnQgKCpmdW5jKShjb25zdCBjaGFyKikpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoMSA9IE5VTEw7Ci0gICAgY2hhciAqcGF0aDE7CisgICAgcGF0aF90IHBhdGg7CiAgICAgaW50IHJlczsKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gZnVuY19uYW1lOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGgxID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aDEpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSAoKmZ1bmMpKHBhdGgxKTsKKyAgICByZXMgPSAoKmZ1bmMpKHBhdGgubmFycm93KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgxKTsKLSAgICBQeV9ERUNSRUYob3BhdGgxKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQogCiAKICNpZmRlZiBNU19XSU5ET1dTCi1zdGF0aWMgUHlPYmplY3QqCi13aW4zMl8xc3RyKFB5T2JqZWN0KiBhcmdzLCBjaGFyKiBmdW5jLAotICAgICAgICAgICBjaGFyKiBmb3JtYXQsIEJPT0wgKF9fc3RkY2FsbCAqZnVuY0EpKExQQ1NUUiksCi0gICAgICAgICAgIGNoYXIqIHdmb3JtYXQsIEJPT0wgKF9fc3RkY2FsbCAqZnVuY1cpKExQV1NUUikpCi17Ci0gICAgUHlPYmplY3QgKnVuaTsKLSAgICBjb25zdCBjaGFyICphbnNpOwotICAgIEJPT0wgcmVzdWx0OwotCi0gICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnVuaSkpCi0gICAgewotICAgICAgICB3Y2hhcl90ICp3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZSh1bmkpOwotICAgICAgICBpZiAod3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmVzdWx0ID0gZnVuY1cod3N0cik7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX29iamVjdChmdW5jLCB1bmkpOwotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgIH0KLSAgICBQeUVycl9DbGVhcigpOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGZvcm1hdCwgJmFuc2kpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAod2luMzJfd2Fybl9ieXRlc19hcGkoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlc3VsdCA9IGZ1bmNBKGFuc2kpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcihmdW5jLCBhbnNpKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7Ci0KLX0KLQogLyogVGhpcyBpcyBhIHJlaW1wbGVtZW50YXRpb24gb2YgdGhlIEMgbGlicmFyeSdzIGNoZGlyIGZ1bmN0aW9uLAogICAgYnV0IG9uZSB0aGF0IHByb2R1Y2VzIFdpbjMyIGVycm9ycyBpbnN0ZWFkIG9mIERPUyBlcnJvciBjb2Rlcy4KICAgIGNoZGlyIGlzIGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgU2V0Q3VycmVudERpcmVjdG9yeTsgaG93ZXZlciwKQEAgLTE0OTEsMTQgKzE0MDksMTQgQEAKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIGlmIChyZXN1bHQgPiBNQVhfUEFUSCsxKSB7Ci0gICAgICAgIG5ld19wYXRoID0gbWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIG5ld19wYXRoID0gUHlNZW1fUmF3TWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghbmV3X3BhdGgpIHsKICAgICAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeVcocmVzdWx0LCBuZXdfcGF0aCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUobmV3X3BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgfQpAQCAtMTUwOSw3ICsxNDI3LDcgQEAKICAgICBlbnZbMV0gPSBuZXdfcGF0aFswXTsKICAgICByZXN1bHQgPSBTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhlbnYsIG5ld19wYXRoKTsKICAgICBpZiAobmV3X3BhdGggIT0gX25ld19wYXRoKQotICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShuZXdfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZgpAQCAtMTUyNCwxMyArMTQ0MiwxMyBAQAogI2RlZmluZSBIQVZFX1NUQVRfTlNFQyAxCiAKIHN0cnVjdCB3aW4zMl9zdGF0ewotICAgIGludCBzdF9kZXY7CisgICAgdW5zaWduZWQgbG9uZyBzdF9kZXY7CiAgICAgX19pbnQ2NCBzdF9pbm87CiAgICAgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKICAgICBpbnQgc3Rfbmxpbms7CiAgICAgaW50IHN0X3VpZDsKICAgICBpbnQgc3RfZ2lkOwotICAgIGludCBzdF9yZGV2OworICAgIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKICAgICBfX2ludDY0IHN0X3NpemU7CiAgICAgdGltZV90IHN0X2F0aW1lOwogICAgIGludCBzdF9hdGltZV9uc2VjOwpAQCAtMTU4OSw2ICsxNTA3LDggQEAKICAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwogICAgIHJlc3VsdC0+c3RfbW9kZSA9IGF0dHJpYnV0ZXNfdG9fbW9kZShpbmZvLT5kd0ZpbGVBdHRyaWJ1dGVzKTsKICAgICByZXN1bHQtPnN0X3NpemUgPSAoKChfX2ludDY0KWluZm8tPm5GaWxlU2l6ZUhpZ2gpPDwzMikgKyBpbmZvLT5uRmlsZVNpemVMb3c7CisgICAgcmVzdWx0LT5zdF9kZXYgPSBpbmZvLT5kd1ZvbHVtZVNlcmlhbE51bWJlcjsKKyAgICByZXN1bHQtPnN0X3JkZXYgPSByZXN1bHQtPnN0X2RldjsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0Q3JlYXRpb25UaW1lLCAmcmVzdWx0LT5zdF9jdGltZSwgJnJlc3VsdC0+c3RfY3RpbWVfbnNlYyk7CiAgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdExhc3RXcml0ZVRpbWUsICZyZXN1bHQtPnN0X210aW1lLCAmcmVzdWx0LT5zdF9tdGltZV9uc2VjKTsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0TGFzdEFjY2Vzc1RpbWUsICZyZXN1bHQtPnN0X2F0aW1lLCAmcmVzdWx0LT5zdF9hdGltZV9uc2VjKTsKQEAgLTE1OTYsOSArMTUxNiw5IEBACiAgICAgcmVzdWx0LT5zdF9pbm8gPSAoKChfX2ludDY0KWluZm8tPm5GaWxlSW5kZXhIaWdoKTw8MzIpICsgaW5mby0+bkZpbGVJbmRleExvdzsKICAgICBpZiAocmVwYXJzZV90YWcgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykgewogICAgICAgICAvKiBmaXJzdCBjbGVhciB0aGUgU19JRk1UIGJpdHMgKi8KLSAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiAwMTcwMDAwKTsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiBTX0lGTVQpOwogICAgICAgICAvKiBub3cgc2V0IHRoZSBiaXRzIHRoYXQgbWFrZSB0aGlzIGEgc3ltbGluayAqLwotICAgICAgICByZXN1bHQtPnN0X21vZGUgfD0gMDEyMDAwMDsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IFNfSUZMTks7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xNjUxLDcgKzE1NzEsNyBAQAogfQogCiAvKiBHcmFiIEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCi1zdGF0aWMgaW50IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSAwOworc3RhdGljIGludCBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlID0gLTE7CiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKShIQU5ETEUsIExQV1NUUiwgRFdPUkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCk7CiBzdGF0aWMgaW50CkBAIC0xNjYyLDcgKzE1ODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQpOwogCiAgICAgLyogb25seSByZWNoZWNrICovCi0gICAgaWYgKCFoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQorICAgIGlmICgtMSA9PSBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQogICAgIHsKICAgICAgICAgaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlVyhMIktFUk5FTDMyIik7CiAgICAgICAgICooRkFSUFJPQyopJlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZUEgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsCkBAIC0xNjg4LDcgKzE2MDgsNyBAQAogICAgIGlmKCFidWZfc2l6ZSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgYnVmID0gKHdjaGFyX3QgKiltYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFidWYpIHsKICAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTY5OCwxMiArMTYxOCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1Zl9zaXplLCBWT0xVTUVfTkFNRV9ET1MpOwogCiAgICAgaWYoIXJlc3VsdF9sZW5ndGgpIHsKLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgICBpZighQ2xvc2VIYW5kbGUoaGRsKSkgewotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtMTc5NCw3ICsxNzE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMTg5MCw3ICsxODEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMjI4OSw3ICsyMjA5LDkgQEAKICNlbHNlCiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAxLCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpc3QtPnN0X2lubykpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykgJiYgIWRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAyLCBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhzdC0+c3RfZGV2KSk7CisjZWxpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORylzdC0+c3RfZGV2KSk7CiAjZWxzZQpAQCAtMjQyNCw1MyArMjM0NiwxNTIgQEAKICAgICAgICAgcmVzdWx0ID0gU1RBVChwYXRoLT5uYXJyb3csICZzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgIGlmIChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IoInN0YXQiLCBwYXRoKTsKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CisgICAgfQogCiAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X3N0YXRfX2RvY19fLAotInN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKSAtPiBzdGF0IHJlc3VsdFxuXG5cCi1QZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC5cblwKLVxuXAotcGF0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBhIHN0cmluZyBvciBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLSAgZGlyX2ZkIG1heSBub3QgYmUgc3VwcG9ydGVkIG9uIHlvdXIgcGxhdGZvcm07IGlmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZ1xuXAotICBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1JdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuXAotICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4iKTsKKyNpZmRlZiBIQVZFX0ZTVEFUQVQKKyAgICAjZGVmaW5lIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKworLypbcHl0aG9uXQorCitjbGFzcyBwYXRoX3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorCisgICAgdHlwZSA9ICJwYXRoX3QiCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgcGFyc2VfYnlfcmVmZXJlbmNlID0gVHJ1ZQorCisgICAgY29udmVydGVyID0gJ3BhdGhfY29udmVydGVyJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGFsbG93X2ZkPUZhbHNlLCBudWxsYWJsZT1GYWxzZSk6CisgICAgICAgIGRlZiBzdHJpZnkodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihpbnQoYm9vbCh2YWx1ZSkpKQorCisgICAgICAgICMgcmlnaHQgbm93IHBhdGhfdCBkb2Vzbid0IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICMgdG8gc3VwcG9ydCBhIGRlZmF1bHQgdmFsdWUsIHlvdSdsbCBuZWVkIHRvIG92ZXJyaWRlIGluaXRpYWxpemUoKS4KKworICAgICAgICBhc3NlcnQgc2VsZi5kZWZhdWx0IGlzIHVuc3BlY2lmaWVkCisKKyAgICAgICAgc2VsZi5udWxsYWJsZSA9IG51bGxhYmxlCisgICAgICAgIHNlbGYuYWxsb3dfZmQgPSBhbGxvd19mZAorCisgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ1BBVEhfVF9JTklUSUFMSVpFKCJ7fSIsIHt9LCB7fSknLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24ubmFtZSwKKyAgICAgICAgICAgIHN0cmlmeShudWxsYWJsZSksCisgICAgICAgICAgICBzdHJpZnkoYWxsb3dfZmQpLAorICAgICAgICAgICAgKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHJldHVybiAicGF0aF9jbGVhbnVwKCYiICsgc2VsZi5uYW1lICsgIik7XG4iCisKKworY2xhc3MgZGlyX2ZkX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBjb252ZXJ0ZXIgPSAnT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgaW4gKHVuc3BlY2lmaWVkLCBOb25lKToKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ0RFRkFVTFRfRElSX0ZEJworCisKK1tweXRob25dKi8KKy8qW3B5dGhvbiBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCisvKltjbGluaWNdCittb2R1bGUgb3MKKworb3Muc3RhdCAtPiBvYmplY3QoZG9jX2RlZmF1bHQ9J3N0YXRfcmVzdWx0JykKKworICAgIHBhdGggOiBwYXRoX3QoYWxsb3dfZmQ9VHJ1ZSkKKyAgICAgICAgUGF0aCB0byBiZSBleGFtaW5lZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC4KKworICAgICoKKworICAgIGRpcl9mZCA6IGRpcl9mZCA9IE5vbmUKKyAgICAgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LAorICAgICAgICBhbmQgcGF0aCBzaG91bGQgYmUgYSByZWxhdGl2ZSBzdHJpbmc7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvCisgICAgICAgIHRoYXQgZGlyZWN0b3J5LgorCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgICAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLAorICAgICAgICBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZQorICAgICAgICB0aGUgbGluayBwb2ludHMgdG8uCisKK1BlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgorCitkaXJfZmQgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkCisgIG9uIHlvdXIgcGxhdGZvcm0uICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEKKyAgTm90SW1wbGVtZW50ZWRFcnJvci4KKworSXQncyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhcworICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KKworW2NsaW5pY10qLworCitQeURvY19TVFJWQVIob3Nfc3RhdF9fZG9jX18sCisiUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguXG4iCisiXG4iCisib3Muc3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpIC0+IHN0YXRfcmVzdWx0XG4iCisiICBwYXRoXG4iCisiICAgIFBhdGggdG8gYmUgZXhhbWluZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuXG4iCisiICBkaXJfZmRcbiIKKyIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgYSByZWxhdGl2ZSBzdHJpbmc7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvXG4iCisiICAgIHRoYXQgZGlyZWN0b3J5LlxuIgorIiAgZm9sbG93X3N5bWxpbmtzXG4iCisiICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssXG4iCisiICAgIHN0YXQgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKKyJcbiIKKyJkaXJfZmQgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkXG4iCisiICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG4iCisiICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuIgorIlxuIgorIkl0XCdzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzXG4iCisiICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4iKTsKKworI2RlZmluZSBPU19TVEFUX01FVEhPRERFRiAgICBcCisgICAgeyJzdGF0IiwgKFB5Q0Z1bmN0aW9uKW9zX3N0YXQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19zdGF0X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zdGF0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX3N0YXRfaW1wbChQeU9iamVjdCAqc2VsZiwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0YXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKLSAgICBwYXRoX3QgcGF0aDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoInN0YXQiLCAwLCAxKTsKICAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CiAgICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKIAotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyZwOnN0YXQiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotI2lmZGVmIEhBVkVfRlNUQVRBVAotICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkLAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkLAotI2VuZGlmCi0gICAgICAgICZmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9kb19zdGF0KCJzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPJnwkTyZwOnN0YXQiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3N0YXRfaW1wbChzZWxmLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0YXRfaW1wbChQeU9iamVjdCAqc2VsZiwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGNoZWNrc3VtOiA5ZDlhZjA4ZThjZmFmZDEyZjk0ZTczZWEzMDY1ZWIzMDU2Zjk5NTE1XSovCit7CisgICAgcmV0dXJuIHBvc2l4X2RvX3N0YXQoInN0YXQiLCBwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7Cit9CisKIFB5RG9jX1NUUlZBUihwb3NpeF9sc3RhdF9fZG9jX18sCiAibHN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUpIC0+IHN0YXQgcmVzdWx0XG5cblwKIExpa2Ugc3RhdCgpLCBidXQgZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy5cblwKQEAgLTI0ODYsNiArMjUwNyw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibHN0YXQiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpsc3RhdCIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9GU1RBVEFUCkBAIC0yNDk1LDQ0ICsyNTE3LDEyMCBAQAogI2VuZGlmCiAgICAgICAgICkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoInN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoImxzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9hY2Nlc3NfX2RvY19fLAotImFjY2VzcyhwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSxcCi0gZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cblwKLVVzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguICBSZXR1cm5zIFRydWUgaWYgZ3JhbnRlZCxcblwKLUZhbHNlIG90aGVyd2lzZS5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLUlmIGVmZmVjdGl2ZV9pZHMgaXMgVHJ1ZSwgYWNjZXNzIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCBpbnN0ZWFkIG9mXG5cCi0gIHRoZSByZWFsIHVpZC9naWQuXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWNcblwKLSAgbGluaywgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1kaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuXAotICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG5cCi0gIE5vdEltcGxlbWVudGVkRXJyb3IuXG5cCi1cblwKLU5vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpc1xuXAotICByb3V0aW5lIGNhbiBiZSB1c2VkIGluIGEgc3VpZC9zZ2lkIGVudmlyb25tZW50IHRvIHRlc3QgaWYgdGhlIGludm9raW5nIHVzZXJcblwKLSAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLlxuXAotVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsIG9yIHRoZSBpbmNsdXNpdmUtT1JcblwKLSAgb2YgUl9PSywgV19PSywgYW5kIFhfT0suIik7CisKKyNpZmRlZiBIQVZFX0ZBQ0NFU1NBVAorICAgICNkZWZpbmUgT1NfQUNDRVNTX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIE9TX0FDQ0VTU19ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisvKltjbGluaWNdCitvcy5hY2Nlc3MgLT4gb2JqZWN0KGRvY19kZWZhdWx0PSdUcnVlIGlmIGdyYW50ZWQsIEZhbHNlIG90aGVyd2lzZScpCisKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9VHJ1ZSkKKyAgICAgICAgUGF0aCB0byBiZSB0ZXN0ZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuCisKKyAgICBtb2RlOiBpbnQKKyAgICAgICAgT3BlcmF0aW5nLXN5c3RlbSBtb2RlIGJpdGZpZWxkLiAgQ2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsCisgICAgICAgIG9yIHRoZSBpbmNsdXNpdmUtT1Igb2YgUl9PSywgV19PSywgYW5kIFhfT0suCisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgICAgICAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0CisgICAgICAgIGRpcmVjdG9yeS4KKworICAgIGVmZmVjdGl2ZV9pZHM6IGJvb2wgPSBGYWxzZQorICAgICAgICBJZiBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2YKKyAgICAgICAgdGhlIHJlYWwgdWlkL2dpZC4KKworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICAgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywKKyAgICAgICAgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZQorICAgICAgICB0aGUgbGluayBwb2ludHMgdG8uCisKK1VzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguCisKK3twYXJhbWV0ZXJzfQorZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQKKyAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYQorICBOb3RJbXBsZW1lbnRlZEVycm9yLgorCitOb3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXMKKyAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyCisgIGhhcyB0aGUgc3BlY2lmaWVkIGFjY2VzcyB0byB0aGUgcGF0aC4KKworW2NsaW5pY10qLworCitQeURvY19TVFJWQVIob3NfYWNjZXNzX19kb2NfXywKKyJVc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLlxuIgorIlxuIgorIm9zLmFjY2VzcyhwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpIC0+IFRydWUgaWYgZ3JhbnRlZCwgRmFsc2Ugb3RoZXJ3aXNlXG4iCisiICBwYXRoXG4iCisiICAgIFBhdGggdG8gYmUgdGVzdGVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LlxuIgorIiAgbW9kZVxuIgorIiAgICBPcGVyYXRpbmctc3lzdGVtIG1vZGUgYml0ZmllbGQuICBDYW4gYmUgRl9PSyB0byB0ZXN0IGV4aXN0ZW5jZSxcbiIKKyIgICAgb3IgdGhlIGluY2x1c2l2ZS1PUiBvZiBSX09LLCBXX09LLCBhbmQgWF9PSy5cbiIKKyIgIGRpcl9mZFxuIgorIiAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICAgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdFxuIgorIiAgICBkaXJlY3RvcnkuXG4iCisiICBlZmZlY3RpdmVfaWRzXG4iCisiICAgIElmIFRydWUsIGFjY2VzcyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQgaW5zdGVhZCBvZlxuIgorIiAgICB0aGUgcmVhbCB1aWQvZ2lkLlxuIgorIiAgZm9sbG93X3N5bWxpbmtzXG4iCisiICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssXG4iCisiICAgIGFjY2VzcyB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcbiIKKyIgICAgdGhlIGxpbmsgcG9pbnRzIHRvLlxuIgorIlxuIgorIntwYXJhbWV0ZXJzfVxuIgorImRpcl9mZCwgZWZmZWN0aXZlX2lkcywgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkXG4iCisiICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG4iCisiICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuIgorIlxuIgorIk5vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpc1xuIgorIiAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyXG4iCisiICBoYXMgdGhlIHNwZWNpZmllZCBhY2Nlc3MgdG8gdGhlIHBhdGguIik7CisKKyNkZWZpbmUgT1NfQUNDRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJhY2Nlc3MiLCAoUHlDRnVuY3Rpb24pb3NfYWNjZXNzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfYWNjZXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9hY2Nlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfYWNjZXNzX2ltcGwoUHlPYmplY3QgKnNlbGYsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGludCBkaXJfZmQsIGludCBlZmZlY3RpdmVfaWRzLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2FjY2VzcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibW9kZSIsICJkaXJfZmQiLCAiZWZmZWN0aXZlX2lkcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKLSAgICBwYXRoX3QgcGF0aDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAibW9kZSIsICJkaXJfZmQiLCAiZWZmZWN0aXZlX2lkcyIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJhY2Nlc3MiLCAwLCAxKTsKICAgICBpbnQgbW9kZTsKICAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CiAgICAgaW50IGVmZmVjdGl2ZV9pZHMgPSAwOwogICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiTyZpfCRPJnBwOmFjY2VzcyIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmbW9kZSwgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkLCAmZWZmZWN0aXZlX2lkcywgJmZvbGxvd19zeW1saW5rcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19hY2Nlc3NfaW1wbChzZWxmLCAmcGF0aCwgbW9kZSwgZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2FjY2Vzc19pbXBsKFB5T2JqZWN0ICpzZWxmLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkLCBpbnQgZWZmZWN0aXZlX2lkcywgaW50IGZvbGxvd19zeW1saW5rcykKKy8qW2NsaW5pYyBjaGVja3N1bTogMDE0NzU1N2ViNDMyNDNkZjU3YmE2MTZjYzdjMzVmMjMyYzY5YmM2YV0qLworewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtMjU0MSwxNyArMjYzOSw2IEBACiAgICAgaW50IHJlc3VsdDsKICNlbmRpZgogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8maXwkTyZwcDphY2Nlc3MiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmbW9kZSwKLSNpZmRlZiBIQVZFX0ZBQ0NFU1NBVAotICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkLAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkLAotI2VuZGlmCi0gICAgICAgICZlZmZlY3RpdmVfaWRzLCAmZm9sbG93X3N5bWxpbmtzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICNpZm5kZWYgSEFWRV9GQUNDRVNTQVQKICAgICBpZiAoZm9sbG93X3N5bWxpbmtzX3NwZWNpZmllZCgiYWNjZXNzIiwgZm9sbG93X3N5bWxpbmtzKSkKICAgICAgICAgZ290byBleGl0OwpAQCAtMjU2NCwxMCArMjY1MSwxMCBAQAogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocGF0aC53aWRlICE9IE5VTEwpCi0gICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cocGF0aC53aWRlKTsKKyAgICBpZiAocGF0aC0+d2lkZSAhPSBOVUxMKQorICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgtPndpZGUpOwogICAgIGVsc2UKLSAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoLm5hcnJvdyk7CisgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC0+bmFycm93KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgLyoKQEAgLTI1NzksNyArMjY2Niw3IEBACiAgICAgICogKERpcmVjdG9yaWVzIGNhbm5vdCBiZSByZWFkLW9ubHkgb24gV2luZG93cy4pCiAgICAgKi8KICAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoCi0gICAgICAgIChhdHRyICE9IDB4RkZGRkZGRkYpICYmCisgICAgICAgIChhdHRyICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSAmJgogICAgICAgICAgICAgKCEobW9kZSAmIDIpIHx8CiAgICAgICAgICAgICAhKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkgfHwKICAgICAgICAgICAgIChhdHRyICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkpOwpAQCAtMjU5NSwxMSArMjY4MiwxMSBAQAogICAgICAgICAgICAgZmxhZ3MgfD0gQVRfU1lNTElOS19OT0ZPTExPVzsKICAgICAgICAgaWYgKGVmZmVjdGl2ZV9pZHMpCiAgICAgICAgICAgICBmbGFncyB8PSBBVF9FQUNDRVNTOwotICAgICAgICByZXN1bHQgPSBmYWNjZXNzYXQoZGlyX2ZkLCBwYXRoLm5hcnJvdywgbW9kZSwgZmxhZ3MpOworICAgICAgICByZXN1bHQgPSBmYWNjZXNzYXQoZGlyX2ZkLCBwYXRoLT5uYXJyb3csIG1vZGUsIGZsYWdzKTsKICAgICB9CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIHJlc3VsdCA9IGFjY2VzcyhwYXRoLm5hcnJvdywgbW9kZSk7CisgICAgICAgIHJlc3VsdCA9IGFjY2VzcyhwYXRoLT5uYXJyb3csIG1vZGUpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgcmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKCFyZXN1bHQpOwogI2VuZGlmCkBAIC0yNjA3LDcgKzI2OTQsNiBAQAogI2lmbmRlZiBIQVZFX0ZBQ0NFU1NBVAogZXhpdDoKICNlbmRpZgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIApAQCAtMjYyNCwzNSArMjcxMCw3NiBAQAogI2RlZmluZSBYX09LIDEKICNlbmRpZgogCisKICNpZmRlZiBIQVZFX1RUWU5BTUUKLVB5RG9jX1NUUlZBUihwb3NpeF90dHluYW1lX19kb2NfXywKLSJ0dHluYW1lKGZkKSAtPiBzdHJpbmdcblxuXAotUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvICdmZCcuIik7CisKKy8qW2NsaW5pY10KK29zLnR0eW5hbWUgLT4gRGVjb2RlRlNEZWZhdWx0CisKKyAgICBmZDogaW50CisgICAgICAgIEludGVnZXIgZmlsZSBkZXNjcmlwdG9yIGhhbmRsZS4KKworICAgIC8KKworUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvICdmZCcuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihvc190dHluYW1lX19kb2NfXywKKyJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGRldmljZSBjb25uZWN0ZWQgdG8gXCdmZFwnLlxuIgorIlxuIgorIm9zLnR0eW5hbWUoZmQpXG4iCisiICBmZFxuIgorIiAgICBJbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBoYW5kbGUuIik7CisKKyNkZWZpbmUgT1NfVFRZTkFNRV9NRVRIT0RERUYgICAgXAorICAgIHsidHR5bmFtZSIsIChQeUNGdW5jdGlvbilvc190dHluYW1lLCBNRVRIX1ZBUkFSR1MsIG9zX3R0eW5hbWVfX2RvY19ffSwKKworc3RhdGljIGNoYXIgKgorb3NfdHR5bmFtZV9pbXBsKFB5T2JqZWN0ICpzZWxmLCBpbnQgZmQpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdHR5bmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc190dHluYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgaWQ7Ci0gICAgY2hhciAqcmV0OworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBjaGFyICpfcmV0dXJuX3ZhbHVlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnR0eW5hbWUiLCAmaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgImk6dHR5bmFtZSIsCisgICAgICAgICZmZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gb3NfdHR5bmFtZV9pbXBsKHNlbGYsIGZkKTsKKyAgICBpZiAoX3JldHVybl92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgY2hhciAqCitvc190dHluYW1lX2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBmZCkKKy8qW2NsaW5pYyBjaGVja3N1bTogZWE2ODAxNTVkODdiYjczM2Y1NDJkNjc2NTNlY2E3MzJkZDA5ODFhOF0qLworeworICAgIGNoYXIgKnJldDsKIAogI2lmIGRlZmluZWQoX19WTVMpCiAgICAgLyogZmlsZSBkZXNjcmlwdG9yIDAgb25seSwgdGhlIGRlZmF1bHQgaW5wdXQgZGV2aWNlIChzdGRpbikgKi8KLSAgICBpZiAoaWQgPT0gMCkgeworICAgIGlmIChmZCA9PSAwKSB7CiAgICAgICAgIHJldCA9IHR0eW5hbWUoKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHJldCA9IE5VTEw7CiAgICAgfQogI2Vsc2UKLSAgICByZXQgPSB0dHluYW1lKGlkKTsKKyAgICByZXQgPSB0dHluYW1lKGZkKTsKICNlbmRpZgogICAgIGlmIChyZXQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQocmV0KTsKKyAgICAgICAgcG9zaXhfZXJyb3IoKTsKKyAgICByZXR1cm4gcmV0OwogfQorI2Vsc2UKKyNkZWZpbmUgT1NfVFRZTkFNRV9NRVRIT0RERUYKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9DVEVSTUlECkBAIC0yNjk0LDYgKzI4MjEsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNoZGlyIjsKICNpZmRlZiBIQVZFX0ZDSERJUgogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC0yNzA5LDggKzI4MzcsNiBAQAogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gd2luMzJfY2hkaXIocGF0aC5uYXJyb3cpOwogICAgIHJlc3VsdCA9ICFyZXN1bHQ7IC8qIG9uIHVuaXgsIHN1Y2Nlc3MgPSAwLCBvbiB3aW5kb3dzLCBzdWNjZXNzID0gITAgKi8KLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgcmVzdWx0ID0gX2NoZGlyMihwYXRoLm5hcnJvdyk7CiAjZWxzZQogI2lmZGVmIEhBVkVfRkNIRElSCiAgICAgaWYgKHBhdGguZmQgIT0gLTEpCkBAIC0yNzIyLDcgKzI4NDgsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoImNoZGlyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMjc4Niw2ICsyOTEyLDcgQEAKICNlbmRpZgogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaG1vZCI7CiAjaWZkZWYgSEFWRV9GQ0hNT0QKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtMjgxMSw3ICsyOTM4LDcgQEAKICAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLndpZGUpOwogICAgIGVsc2UKICAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoLm5hcnJvdyk7Ci0gICAgaWYgKGF0dHIgPT0gMHhGRkZGRkZGRikKKyAgICBpZiAoYXR0ciA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykKICAgICAgICAgcmVzdWx0ID0gMDsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKG1vZGUgJiBfU19JV1JJVEUpCkBAIC0yODI2LDcgKzI5NTMsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoImNobW9kIiwgcGF0aC5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KQEAgLTI4ODAsNyArMzAwNyw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJjaG1vZCIsICZwYXRoKTsKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC0yOTI0LDIwICszMDUxLDIzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfbGNobW9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKKyAgICBwYXRoX3QgcGF0aDsKICAgICBpbnQgaTsKICAgICBpbnQgcmVzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpOmxjaG1vZCIsIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmaSkpCisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsY2htb2QiOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpOmxjaG1vZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJmkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGxjaG1vZChwYXRoLCBpKTsKKyAgICByZXMgPSBsY2htb2QocGF0aC5uYXJyb3csIGkpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hNT0QgKi8KQEAgLTI5NjUsNiArMzA5NSw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZmxhZ3MiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNoZmxhZ3MiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8ma3wkaTpjaGZsYWdzIiwga2V5d29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZsYWdzLCAmZm9sbG93X3N5bWxpbmtzKSkKQEAgLTI5ODUsNyArMzExNiw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigiY2hmbGFncyIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTMwMDgsMjIgKzMxMzksMjQgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9sY2hmbGFncyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7CisgICAgcGF0aF90IHBhdGg7CiAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBpbnQgcmVzOworICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGNoZmxhZ3MiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZrOmxjaGZsYWdzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3BhdGgsICZmbGFncykpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJmZsYWdzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBsY2hmbGFncyhwYXRoLCBmbGFncyk7CisgICAgcmVzID0gbGNoZmxhZ3MocGF0aC5uYXJyb3csIGZsYWdzKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX0xDSEZMQUdTICovCiAKQEAgLTMwMzUsNyArMzE2OCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfY2hyb290KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gcG9zaXhfMXN0cihhcmdzLCAiTyY6Y2hyb290IiwgY2hyb290KTsKKyAgICByZXR1cm4gcG9zaXhfMXN0cigiY2hyb290IiwgYXJncywgIk8mOmNocm9vdCIsIGNocm9vdCk7CiB9CiAjZW5kaWYKIApAQCAtMzExNyw2ICszMjUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNob3duIjsKICNpZmRlZiBIQVZFX0ZDSE9XTgogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC0zMTc0LDcgKzMzMDgsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfcG9zaXhfZXJyb3IoImNob3duIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMzIyMywzMCArMzM1NywzMiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2xjaG93bihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7CisgICAgcGF0aF90IHBhdGg7CiAgICAgdWlkX3QgdWlkOwogICAgIGdpZF90IGdpZDsKICAgICBpbnQgcmVzOworICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGNob3duIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mTyZPJjpsY2hvd24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfVWlkX0NvbnZlcnRlciwgJnVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X0dpZF9Db252ZXJ0ZXIsICZnaWQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGxjaG93bihwYXRoLCB1aWQsIGdpZCk7CisgICAgcmVzID0gbGNob3duKHBhdGgubmFycm93LCB1aWQsIGdpZCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hPV04gKi8KIAogCi0jaWZkZWYgSEFWRV9HRVRDV0QKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9nZXRjd2QoaW50IHVzZV9ieXRlcykKIHsKQEAgLTMyNjUsNyArMzQwMSw3IEBACiAgICAgICAgICAgIHRlcm1pbmF0aW5nIFwwLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgbGVuIGluY2x1ZGVzCiAgICAgICAgICAgIHRoZSBzcGFjZSBuZWVkZWQgZm9yIHRoZSB0ZXJtaW5hdG9yLiAqLwogICAgICAgICBpZiAobGVuID49IHNpemVvZiB3YnVmLyBzaXplb2Ygd2J1ZlswXSkgewotICAgICAgICAgICAgd2J1ZjIgPSBtYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgICAgIHdidWYyID0gUHlNZW1fUmF3TWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgICAgICBpZiAod2J1ZjIpCiAgICAgICAgICAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcobGVuLCB3YnVmMik7CiAgICAgICAgIH0KQEAgLTMyNzUsMTEgKzM0MTEsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmICghbGVuKSB7Ci0gICAgICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikgZnJlZSh3YnVmMik7Ci0gICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoImdldGN3ZHUiLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKQorICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod2J1ZjIpOworICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogICAgICAgICB9CiAgICAgICAgIHJlc29iaiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod2J1ZjIsIGxlbik7Ci0gICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKSBmcmVlKHdidWYyKTsKKyAgICAgICAgaWYgKHdidWYyICE9IHdidWYpCisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYyKTsKICAgICAgICAgcmV0dXJuIHJlc29iajsKICAgICB9CiAKQEAgLTMyODgsMTEgKzM0MjYsNyBAQAogI2VuZGlmCiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXMgPSBfZ2V0Y3dkMihidWYsIHNpemVvZiBidWYpOwotI2Vsc2UKICAgICByZXMgPSBnZXRjd2QoYnVmLCBzaXplb2YgYnVmKTsKLSNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKQEAgLTMzMjAsNyArMzQ1NCw2IEBACiB7CiAgICAgcmV0dXJuIHBvc2l4X2dldGN3ZCgxKTsKIH0KLSNlbmRpZgogCiAjaWYgKCghZGVmaW5lZChIQVZFX0xJTkspKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpKQogI2RlZmluZSBIQVZFX0xJTksgMQpAQCAtMzM1OSw2ICszNDkyLDggQEAKIAogICAgIG1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3JjKSk7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBzcmMuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfE8mTyZwOmxpbmsiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmc3JjLAogICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZkc3QsCkBAIC0zMzg5LDcgKzM1MjQsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoImxpbmsiLCBkc3Qub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmc3JjKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlCkBAIC0zNDA3LDcgKzM1NDIsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoImxpbmsiLCAmZHN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmc3JjKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtMzQzNywxNyArMzU3MiwxMSBAQAogICB0aGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgcmVmZXIgdG8gYSBkaXJlY3RvcnkuXG5cCiAgIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9saXN0ZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKLXsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKLSNpZmRlZiBIQVZFX0ZET1BFTkRJUgotICAgIGludCBmZCA9IC0xOwotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCi0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKEhBVkVfT1BFTkRJUikKK3N0YXRpYyBQeU9iamVjdCAqCitfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIocGF0aF90ICpwYXRoLCBQeU9iamVjdCAqbGlzdCkKK3sKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICp2OwogICAgIEhBTkRMRSBoRmluZEZpbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICBCT09MIHJlc3VsdDsKQEAgLTM0NTgsNTEgKzM1ODcsMjAgQEAKICAgICBQeV9zc2l6ZV90IGxlbiA9IHNpemVvZihuYW1lYnVmKS01OwogICAgIFB5T2JqZWN0ICpwbyA9IE5VTEw7CiAgICAgd2NoYXJfdCAqd25hbWVidWYgPSBOVUxMOwotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSNpZm5kZWYgTUFYX1BBVEgKLSNkZWZpbmUgTUFYX1BBVEggICAgQ0NITUFYUEFUSAotI2VuZGlmCi0gICAgY2hhciAqcHQ7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzVdOwotICAgIEhESVIgIGhkaXIgPSAxOwotICAgIFVMT05HIHNyY2hjbnQgPSAxOwotICAgIEZJTEVGSU5EQlVGMyAgIGVwOwotICAgIEFQSVJFVCByYzsKLSNlbHNlCi0gICAgUHlPYmplY3QgKnY7Ci0gICAgRElSICpkaXJwID0gTlVMTDsKLSAgICBzdHJ1Y3QgZGlyZW50ICplcDsKLSAgICBpbnQgcmV0dXJuX3N0cjsgLyogaWYgZmFsc2UsIHJldHVybiBieXRlcyAqLwotI2VuZGlmCiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5udWxsYWJsZSA9IDE7Ci0jaWZkZWYgSEFWRV9GRE9QRU5ESVIKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBwYXRoLmZkID0gLTE7Ci0jZW5kaWYKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyY6bGlzdGRpciIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgKLSAgICAgICAgKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBYWFggU2hvdWxkIHJlZG8gdGhpcyBwdXR0aW5nIHRoZSAobm93IGZvdXIpIHZlcnNpb25zIG9mIG9wZW5kaXIKLSAgICAgICBpbiBzZXBhcmF0ZSBmaWxlcyBpbnN0ZWFkIG9mIGhhdmluZyB0aGVtIGFsbCBoZXJlLi4uICovCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX09QRU5ESVIpCi0gICAgaWYgKCFwYXRoLm5hcnJvdykgeworICAgIGlmICghcGF0aC0+bmFycm93KSB7CiAgICAgICAgIFdJTjMyX0ZJTkRfREFUQVcgd0ZpbGVEYXRhOwogICAgICAgICB3Y2hhcl90ICpwb193Y2hhcnM7CiAKLSAgICAgICAgaWYgKCFwYXRoLndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLworICAgICAgICBpZiAoIXBhdGgtPndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLwogICAgICAgICAgICAgcG9fd2NoYXJzID0gTCIuIjsKICAgICAgICAgICAgIGxlbiA9IDE7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwb193Y2hhcnMgPSBwYXRoLndpZGU7Ci0gICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC53aWRlKTsKKyAgICAgICAgICAgIHBvX3djaGFycyA9IHBhdGgtPndpZGU7CisgICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC0+d2lkZSk7CiAgICAgICAgIH0KICAgICAgICAgLyogVGhlICs1IGlzIHNvIHdlIGNhbiBhcHBlbmQgIlxcKi4qXDAiICovCi0gICAgICAgIHduYW1lYnVmID0gbWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIHduYW1lYnVmID0gUHlNZW1fTWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghd25hbWVidWYpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CkBAIC0zNTEwLDggKzM2MDgsOCBAQAogICAgICAgICB3Y3NjcHkod25hbWVidWYsIHBvX3djaGFycyk7CiAgICAgICAgIGlmIChsZW4gPiAwKSB7CiAgICAgICAgICAgICB3Y2hhcl90IHdjaCA9IHduYW1lYnVmW2xlbi0xXTsKLSAgICAgICAgICAgIGlmICh3Y2ggIT0gTCcvJyAmJiB3Y2ggIT0gTCdcXCcgJiYgd2NoICE9IEwnOicpCi0gICAgICAgICAgICAgICAgd25hbWVidWZbbGVuKytdID0gTCdcXCc7CisgICAgICAgICAgICBpZiAod2NoICE9IFNFUCAmJiB3Y2ggIT0gQUxUU0VQICYmIHdjaCAhPSBMJzonKQorICAgICAgICAgICAgICAgIHduYW1lYnVmW2xlbisrXSA9IFNFUDsKICAgICAgICAgICAgIHdjc2NweSh3bmFtZWJ1ZiArIGxlbiwgTCIqLioiKTsKICAgICAgICAgfQogICAgICAgICBpZiAoKGxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CkBAIC0zNTI1LDggKzM2MjMsNyBAQAogICAgICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKQogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZEZpcnN0RmlsZVciLCB3bmFtZWJ1Zik7CisgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBkbyB7CkBAIC0zNTU1LDE5ICszNjUyLDE5IEBACiAgICAgICAgICAgICAgICBpdCBnb3QgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5LiAqLwogICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZE5leHRGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKIAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQotICAgIHN0cmNweShuYW1lYnVmLCBwYXRoLm5hcnJvdyk7Ci0gICAgbGVuID0gcGF0aC5sZW5ndGg7CisgICAgc3RyY3B5KG5hbWVidWYsIHBhdGgtPm5hcnJvdyk7CisgICAgbGVuID0gcGF0aC0+bGVuZ3RoOwogICAgIGlmIChsZW4gPiAwKSB7CiAgICAgICAgIGNoYXIgY2ggPSBuYW1lYnVmW2xlbi0xXTsKLSAgICAgICAgaWYgKGNoICE9IFNFUCAmJiBjaCAhPSBBTFRTRVAgJiYgY2ggIT0gJzonKQotICAgICAgICAgICAgbmFtZWJ1ZltsZW4rK10gPSAnLyc7CisgICAgICAgIGlmIChjaCAhPSAnXFwnICYmIGNoICE9ICcvJyAmJiBjaCAhPSAnOicpCisgICAgICAgICAgICBuYW1lYnVmW2xlbisrXSA9ICdcXCc7CiAgICAgICAgIHN0cmNweShuYW1lYnVmICsgbGVuLCAiKi4qIik7CiAgICAgfQogCkBAIC0zNTgyLDcgKzM2NzksNyBAQAogICAgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpCiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yKCJGaW5kRmlyc3RGaWxlIiwgbmFtZWJ1Zik7CisgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIGRvIHsKQEAgLTM2MTAsNyArMzcwNyw3IEBACiAgICAgICAgICAgIGl0IGdvdCB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkuICovCiAgICAgICAgIGlmICghcmVzdWx0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcigiRmluZE5leHRGaWxlIiwgbmFtZWJ1Zik7CisgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKQEAgLTM2MjAsODggKzM3MTcsMzMgQEAKICAgICAgICAgaWYgKEZpbmRDbG9zZShoRmluZEZpbGUpID09IEZBTFNFKSB7CiAgICAgICAgICAgICBpZiAobGlzdCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcl9vYmplY3QoIkZpbmRDbG9zZSIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAod25hbWVidWYpCi0gICAgICAgIGZyZWUod25hbWVidWYpOwotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgUHlNZW1fRnJlZSh3bmFtZWJ1Zik7CiAKICAgICByZXR1cm4gbGlzdDsKK30gIC8qIGVuZCBvZiBfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIgKi8KIAotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBpZiAocGF0aC5sZW5ndGggPj0gTUFYX1BBVEgpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJwYXRoIHRvbyBsb25nIik7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0gICAgc3RyY3B5KG5hbWVidWYsIHBhdGgubmFycm93KTsKLSAgICBmb3IgKHB0ID0gbmFtZWJ1ZjsgKnB0OyBwdCsrKQotICAgICAgICBpZiAoKnB0ID09IEFMVFNFUCkKLSAgICAgICAgICAgICpwdCA9IFNFUDsKLSAgICBpZiAobmFtZWJ1ZltsZW4tMV0gIT0gU0VQKQotICAgICAgICBuYW1lYnVmW2xlbisrXSA9IFNFUDsKLSAgICBzdHJjcHkobmFtZWJ1ZiArIGxlbiwgIiouKiIpOworI2Vsc2UgIC8qIHRodXMgUE9TSVgsIGllOiBub3QgKE1TX1dJTkRPV1MgYW5kIG5vdCBIQVZFX09QRU5ESVIpICovCiAKLSAgICBpZiAoKGxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICByYyA9IERvc0ZpbmRGaXJzdChuYW1lYnVmLCAgICAgICAgIC8qIFdpbGRjYXJkIFBhdHRlcm4gdG8gTWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgICAmaGRpciwgICAgICAgICAgIC8qIEhhbmRsZSB0byBVc2UgV2hpbGUgU2VhcmNoIERpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAgICAgICAgIEZJTEVfUkVBRE9OTFkgfCBGSUxFX0hJRERFTiB8IEZJTEVfU1lTVEVNIHwgRklMRV9ESVJFQ1RPUlksCi0gICAgICAgICAgICAgICAgICAgICAgJmVwLCBzaXplb2YoZXApLCAvKiBTdHJ1Y3R1cmUgdG8gUmVjZWl2ZSBEaXJlY3RvcnkgRW50cnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAmc3JjaGNudCwgICAgICAgIC8qIE1heCBhbmQgQWN0dWFsIENvdW50IG9mIEVudHJpZXMgUGVyIEl0ZXJhdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgIEZJTF9TVEFOREFSRCk7ICAgLyogRm9ybWF0IG9mIEVudHJ5IChFQXMgb3IgTm90KSAqLwotCi0gICAgaWYgKHJjICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGVycm5vID0gRU5PRU5UOwotICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIGxpc3QgPSBwb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKHBhdGgubmFycm93KTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIGlmIChzcmNoY250ID4gMCkgeyAvKiBJZiBEaXJlY3RvcnkgaXMgTk9UIFRvdGFsbHkgRW1wdHksICovCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChlcC5hY2hOYW1lWzBdID09ICcuJwotICAgICAgICAgICAgJiYgKGVwLmFjaE5hbWVbMV0gPT0gJ1wwJyB8fCAoZXAuYWNoTmFtZVsxXSA9PSAnLicgJiYgZXAuYWNoTmFtZVsyXSA9PSAnXDAnKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7IC8qIFNraXAgT3ZlciAiLiIgYW5kICIuLiIgTmFtZXMgKi8KLQotICAgICAgICAgICAgc3RyY3B5KG5hbWVidWYsIGVwLmFjaE5hbWUpOwotCi0gICAgICAgICAgICAvKiBMZWF2ZSBDYXNlIG9mIE5hbWUgQWxvbmUgLS0gSW4gTmF0aXZlIEZvcm0gKi8KLSAgICAgICAgICAgIC8qIChSZW1vdmVkIEZvcmNlZCBMb3dlcmNhc2luZyBDb2RlKSAqLwotCi0gICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKG5hbWVidWYpOwotICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHYpICE9IDApIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICB9IHdoaWxlIChEb3NGaW5kTmV4dChoZGlyLCAmZXAsIHNpemVvZihlcCksICZzcmNoY250KSA9PSBOT19FUlJPUiAmJiBzcmNoY250ID4gMCk7Ci0gICAgfQotCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0KLSAgICByZXR1cm4gbGlzdDsKLSNlbHNlCitzdGF0aWMgUHlPYmplY3QgKgorX3Bvc2l4X2xpc3RkaXIocGF0aF90ICpwYXRoLCBQeU9iamVjdCAqbGlzdCkKK3sKKyAgICBQeU9iamVjdCAqdjsKKyAgICBESVIgKmRpcnAgPSBOVUxMOworICAgIHN0cnVjdCBkaXJlbnQgKmVwOworICAgIGludCByZXR1cm5fc3RyOyAvKiBpZiBmYWxzZSwgcmV0dXJuIGJ5dGVzICovCisjaWZkZWYgSEFWRV9GRE9QRU5ESVIKKyAgICBpbnQgZmQgPSAtMTsKKyNlbmRpZgogCiAgICAgZXJybm8gPSAwOwogI2lmZGVmIEhBVkVfRkRPUEVORElSCi0gICAgaWYgKHBhdGguZmQgIT0gLTEpIHsKKyAgICBpZiAocGF0aC0+ZmQgIT0gLTEpIHsKICAgICAgICAgLyogY2xvc2VkaXIoKSBjbG9zZXMgdGhlIEZELCBzbyB3ZSBkdXBsaWNhdGUgaXQgKi8KLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBmZCA9IGR1cChwYXRoLmZkKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQorICAgICAgICBmZCA9IF9QeV9kdXAocGF0aC0+ZmQpOwogICAgICAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgICAgIGxpc3QgPSBwb3NpeF9lcnJvcigpOwogICAgICAgICAgICAgZ290byBleGl0OwpAQCAtMzcxNywxMCArMzc1OSwxMCBAQAogI2VuZGlmCiAgICAgewogICAgICAgICBjaGFyICpuYW1lOwotICAgICAgICBpZiAocGF0aC5uYXJyb3cpIHsKLSAgICAgICAgICAgIG5hbWUgPSBwYXRoLm5hcnJvdzsKKyAgICAgICAgaWYgKHBhdGgtPm5hcnJvdykgeworICAgICAgICAgICAgbmFtZSA9IHBhdGgtPm5hcnJvdzsKICAgICAgICAgICAgIC8qIG9ubHkgcmV0dXJuIGJ5dGVzIGlmIHRoZXkgc3BlY2lmaWVkIGEgYnl0ZXMgb2JqZWN0ICovCi0gICAgICAgICAgICByZXR1cm5fc3RyID0gIShQeUJ5dGVzX0NoZWNrKHBhdGgub2JqZWN0KSk7CisgICAgICAgICAgICByZXR1cm5fc3RyID0gIShQeUJ5dGVzX0NoZWNrKHBhdGgtPm9iamVjdCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbmFtZSA9ICIuIjsKQEAgLTM3MzMsMTQgKzM3NzUsMTQgQEAKICAgICB9CiAKICAgICBpZiAoZGlycCA9PSBOVUxMKSB7Ci0gICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKCJsaXN0ZGlyIiwgJnBhdGgpOworICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICNpZmRlZiBIQVZFX0ZET1BFTkRJUgogICAgICAgICBpZiAoZmQgIT0gLTEpIHsKICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIH0KLSNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLworI2VuZGlmCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgaWYgKChsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgewpAQCAtMzc1Niw3ICszNzk4LDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKCJsaXN0ZGlyIiwgJnBhdGgpOworICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzc4NiwxNyArMzgyOCw0NCBAQAogI2lmZGVmIEhBVkVfRkRPUEVORElSCiAgICAgICAgIGlmIChmZCA+IC0xKQogICAgICAgICAgICAgcmV3aW5kZGlyKGRpcnApOwotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCisjZW5kaWYKICAgICAgICAgY2xvc2VkaXIoZGlycCk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQogCi0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLQogICAgIHJldHVybiBsaXN0OworfSAgLyogZW5kIG9mIF9wb3NpeF9saXN0ZGlyICovCisjZW5kaWYgIC8qIHdoaWNoIE9TICovCiAKLSNlbmRpZiAvKiB3aGljaCBPUyAqLwotfSAgLyogZW5kIG9mIHBvc2l4X2xpc3RkaXIgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9saXN0ZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBwYXRoX3QgcGF0aDsKKyAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOworCisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsaXN0ZGlyIjsKKyAgICBwYXRoLm51bGxhYmxlID0gMTsKKyNpZmRlZiBIQVZFX0ZET1BFTkRJUgorICAgIHBhdGguYWxsb3dfZmQgPSAxOworICAgIHBhdGguZmQgPSAtMTsKKyNlbmRpZgorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mOmxpc3RkaXIiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoSEFWRV9PUEVORElSKQorICAgIHJldHVybl92YWx1ZSA9IF9saXN0ZGlyX3dpbmRvd3Nfbm9fb3BlbmRpcigmcGF0aCwgbGlzdCk7CisjZWxzZQorICAgIHJldHVybl92YWx1ZSA9IF9wb3NpeF9saXN0ZGlyKCZwYXRoLCBsaXN0KTsKKyNlbmRpZgorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KIAogI2lmZGVmIE1TX1dJTkRPV1MKIC8qIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBhYnNwYXRoIG9uIHdpbjMyICovCkBAIC0zODIzLDcgKzM4OTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0FSUkFZX0xFTkdUSCh3b3V0YnVmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3V0YnVmLCAmd3RlbXApOwogICAgICAgICBpZiAocmVzdWx0ID4gUHlfQVJSQVlfTEVOR1RIKHdvdXRidWYpKSB7Ci0gICAgICAgICAgICB3b3V0YnVmcCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICAgICAgd291dGJ1ZnAgPSBQeU1lbV9NYWxsb2MocmVzdWx0ICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgICAgIGlmICghd291dGJ1ZnApCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXN1bHQgPSBHZXRGdWxsUGF0aE5hbWVXKHdwYXRoLCByZXN1bHQsIHdvdXRidWZwLCAmd3RlbXApOwpAQCAtMzgzMyw3ICszOTAyLDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdiA9IHdpbjMyX2Vycm9yX29iamVjdCgiR2V0RnVsbFBhdGhOYW1lVyIsIHBvKTsKICAgICAgICAgaWYgKHdvdXRidWZwICE9IHdvdXRidWYpCi0gICAgICAgICAgICBmcmVlKHdvdXRidWZwKTsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUod291dGJ1ZnApOwogICAgICAgICByZXR1cm4gdjsKICAgICB9CiAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncwpAQCAtMzkwMyw3ICszOTcyLDcgQEAKICAgICBpZighYnVmX3NpemUpCiAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoIkdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSIsIHBvKTsKIAotICAgIHRhcmdldF9wYXRoID0gKHdjaGFyX3QgKiltYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgdGFyZ2V0X3BhdGggPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYygoYnVmX3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZighdGFyZ2V0X3BhdGgpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogCkBAIC0zOTE3LDM2ICszOTg2LDExIEBACiAKICAgICB0YXJnZXRfcGF0aFtyZXN1bHRfbGVuZ3RoXSA9IDA7CiAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih0YXJnZXRfcGF0aCwgcmVzdWx0X2xlbmd0aCk7Ci0gICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIAogfSAvKiBlbmQgb2YgcG9zaXhfX2dldGZpbmFscGF0aG5hbWUgKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X19nZXRmaWxlaW5mb3JtYXRpb24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIEhBTkRMRSBoRmlsZTsKLSAgICBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBpbmZvOwotICAgIGludCBmZDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgJmZkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotCi0gICAgaEZpbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKLSAgICBpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotCi0gICAgaWYgKCFHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZShoRmlsZSwgJmluZm8pKQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoIl9nZXRmaWxlaW5mb3JtYXRpb24iLCBOVUxMKTsKLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpaWkiLCBpbmZvLmR3Vm9sdW1lU2VyaWFsTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm5GaWxlSW5kZXhIaWdoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm5GaWxlSW5kZXhMb3cpOwotfQotCiBQeURvY19TVFJWQVIocG9zaXhfX2lzZGlyX19kb2NfXywKICJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iKTsKIApAQCAtMzk4NSw2ICs0MDI5LDQ3IEBACiAgICAgZWxzZQogICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiB9CisKK1B5RG9jX1NUUlZBUihwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWVfX2RvY19fLAorIlJldHVybiB2b2x1bWUgbW91bnQgcG9pbnQgb2YgdGhlIHNwZWNpZmllZCBwYXRoLiIpOworCisvKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgaXNtb3VudCBvbiB3aW5kb3dzICovCitzdGF0aWMgUHlPYmplY3QgKgorcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcG8sICpyZXN1bHQ7CisgICAgd2NoYXJfdCAqcGF0aCwgKm1vdW50cGF0aD1OVUxMOworICAgIHNpemVfdCBidWZzaXplOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0dm9sdW1lcGF0aG5hbWUiLCAmcG8pKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBwYXRoID0gUHlVbmljb2RlX0FzVW5pY29kZShwbyk7CisgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBWb2x1bWUgcGF0aCBzaG91bGQgYmUgc2hvcnRlciB0aGFuIGVudGlyZSBwYXRoICovCisgICAgYnVmc2l6ZSA9IG1heChNQVhfUEFUSCwgd2NzbGVuKHBhdGgpICogMiAqIHNpemVvZih3Y2hhcl90KSsxKTsKKyAgICBtb3VudHBhdGggPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhidWZzaXplKTsKKyAgICBpZiAobW91bnRwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IEdldFZvbHVtZVBhdGhOYW1lVyhwYXRoLCBtb3VudHBhdGgsIGJ1ZnNpemUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkgeworICAgICAgICByZXN1bHQgPSB3aW4zMl9lcnJvcl9vYmplY3QoIl9nZXR2b2x1bWVwYXRobmFtZSIsIHBvKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKG1vdW50cGF0aCwgd2NzbGVuKG1vdW50cGF0aCkpOworCitleGl0OgorICAgIFB5TWVtX0ZyZWUobW91bnRwYXRoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLyogZW5kIG9mIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZSAqLworCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiBQeURvY19TVFJWQVIocG9zaXhfbWtkaXJfX2RvY19fLApAQCAtNDAwOSw2ICs0MDk0LDcgQEAKICAgICBpbnQgcmVzdWx0OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJta2RpciI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8aSRPJjpta2RpciIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLAogI2lmZGVmIEhBVkVfTUtESVJBVApAQCAtNDAyOCw3ICs0MTE0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJta2RpciIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZQpAQCAtNDA0NSw3ICs0MTMxLDcgQEAKICNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigibWtkaXIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC00MTYzLDYgKzQyNDksOCBAQAogCiAgICAgbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzcmMpKTsKICAgICBtZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKGRzdCkpOworICAgIHNyYy5mdW5jdGlvbl9uYW1lID0gZnVuY3Rpb25fbmFtZTsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25hbWU7CiAgICAgc3RyY3B5KGZvcm1hdCwgIk8mTyZ8JE8mTyY6Iik7CiAgICAgc3RyY2F0KGZvcm1hdCwgZnVuY3Rpb25fbmFtZSk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCBmb3JtYXQsIGtleXdvcmRzLApAQCAtNDE5Niw3ICs0Mjg0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KGZ1bmN0aW9uX25hbWUsIGRzdC5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZzcmMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00MjExLDcgKzQyOTksNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoZnVuY3Rpb25fbmFtZSwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnNyYyk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTQyNzUsNiArNDM2Myw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJtZGlyIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6cm1kaXIiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICNpZmRlZiBIQVZFX1VOTElOS0FUCkBAIC00MzAzLDcgKzQzOTIsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInJtZGlyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDQzMSw2ICs0NTIwLDcgQEAKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidW5saW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6dW5saW5rIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9VTkxJTktBVApAQCAtNDQ1OSw3ICs0NTQ5LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJ1bmxpbmsiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00NzYyLDYgKzQ4NTIsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJ1dGltZSI7CiAgICAgbWVtc2V0KCZ1dGltZSwgMCwgc2l6ZW9mKHV0aW1lX3QpKTsKICNpZiBVVElNRV9IQVZFX0ZECiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CkBAIC00ODU3LDcgKzQ5NDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICB3aW4zMl9lcnJvcl9vYmplY3QoInV0aW1lIiwgcGF0aC5vYmplY3QpOworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDg2Niw3ICs0OTU3LDcgQEAKICAgICAgICAgR2V0U3lzdGVtVGltZSgmbm93KTsKICAgICAgICAgaWYgKCFTeXN0ZW1UaW1lVG9GaWxlVGltZSgmbm93LCAmbXRpbWUpIHx8CiAgICAgICAgICAgICAhU3lzdGVtVGltZVRvRmlsZVRpbWUoJm5vdywgJmF0aW1lKSkgewotICAgICAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgTlVMTCk7CisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgIH0KQEAgLTQ4NzksNyArNDk3MCw3IEBACiAgICAgICAgICAgIGFzIHRoYXQgbWF5IGNvbmZ1c2UgdGhlIHVzZXIgaW50byBiZWxpZXZpbmcgdGhhdAogICAgICAgICAgICBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCB0aGUgZmlsZSwgd2hlbiBpdCBhbHNvCiAgICAgICAgICAgIGNvdWxkIGJlIHRoZSB0aW1lIHN0YW1wIHRoYXQgZ2l2ZXMgYSBwcm9ibGVtLiAqLwotICAgICAgICB3aW4zMl9lcnJvcigidXRpbWUiLCBOVUxMKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZSAvKiBNU19XSU5ET1dTICovCkBAIC01MDEzLDEwICs1MTA0LDYgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIC8qIE9taXQgUHNldWRvLUVudiBWYXJzIHRoYXQgV291bGQgQ29uZnVzZSBQcm9ncmFtcyBpZiBQYXNzZWQgT24gKi8KLSAgICAgICAgaWYgKHN0cmljbXAoaywgIkJFR0lOTElCUEFUSCIpICE9IDAgJiYgc3RyaWNtcChrLCAiRU5ETElCUEFUSCIpICE9IDApIHsKLSNlbmRpZgogICAgICAgICBrID0gUHlCeXRlc19Bc1N0cmluZyhrZXkyKTsKICAgICAgICAgdiA9IFB5Qnl0ZXNfQXNTdHJpbmcodmFsMik7CiAgICAgICAgIGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoa2V5MikgKyBQeUJ5dGVzX0dFVF9TSVpFKHZhbDIpICsgMjsKQEAgLTUwMzIsOSArNTExOSw2IEBACiAgICAgICAgIGVudmxpc3RbZW52YysrXSA9IHA7CiAgICAgICAgIFB5X0RFQ1JFRihrZXkyKTsKICAgICAgICAgUHlfREVDUkVGKHZhbDIpOwotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIH0KLSNlbmRpZgogICAgIH0KICAgICBQeV9ERUNSRUYodmFscyk7CiAgICAgUHlfREVDUkVGKGtleXMpOwpAQCAtNTE2MCw2ICs1MjQ0LDcgQEAKICAgICAgICBsaWtlIHBvc2l4LmVudmlyb24uICovCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImV4ZWN2ZSI7CiAjaWZkZWYgSEFWRV9GRVhFQ1ZFCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTUxOTksNyArNTI4NCw3IEBACiAKICAgICAvKiBJZiB3ZSBnZXQgaGVyZSBpdCdzIGRlZmluaXRlbHkgYW4gZXJyb3IgKi8KIAotICAgIHBhdGhfcG9zaXhfZXJyb3IoImV4ZWN2ZSIsICZwYXRoKTsKKyAgICBwYXRoX2Vycm9yKCZwYXRoKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTI3NSwxOCArNTM2MCwxMiBAQAogICAgIH0KICAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbHNlCiAgICAgaWYgKG1vZGUgPT0gX09MRF9QX09WRVJMQVkpCiAgICAgICAgIG1vZGUgPSBfUF9PVkVSTEFZOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHNwYXdudmFsID0gX3NwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbmRpZgogCiAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwogICAgIFB5X0RFQ1JFRihvcGF0aCk7CkBAIC01Mjk0LDExICs1MzczLDcgQEAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMIiwgKFBZX0xPTkdfTE9ORykgc3Bhd252YWwpOwotI2VuZGlmCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIH0KIAogCkBAIC01Mzc0LDI3ICs1NDQ5LDE3IEBACiAgICAgaWYgKGVudmxpc3QgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsXzE7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudmUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZWxzZQogICAgIGlmIChtb2RlID09IF9PTERfUF9PVkVSTEFZKQogICAgICAgICBtb2RlID0gX1BfT1ZFUkxBWTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzcGF3bnZhbCA9IF9zcGF3bnZlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2VuZGlmCiAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgICh2b2lkKSBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotI2Vsc2UKLSAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgiTCIsIChQWV9MT05HX0xPTkcpIHNwYXdudmFsKTsKLSNlbmRpZgorICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTQwNiwxODMgKzU0NzEsNiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLS8qIE9TLzIgc3VwcG9ydHMgc3Bhd252cCAmIHNwYXdudnBlIG5hdGl2ZWx5ICovCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwX19kb2NfXywKLSJzcGF3bnZwKG1vZGUsIGZpbGUsIGFyZ3MpXG5cblwKLUV4ZWN1dGUgdGhlIHByb2dyYW0gJ2ZpbGUnIGluIGEgbmV3IHByb2Nlc3MsIHVzaW5nIHRoZSBlbnZpcm9ubWVudFxuXAotc2VhcmNoIHBhdGggdG8gZmluZCB0aGUgZmlsZS5cblwKLVxuXAotICAgIG1vZGU6IG1vZGUgb2YgcHJvY2VzcyBjcmVhdGlvblxuXAotICAgIGZpbGU6IGV4ZWN1dGFibGUgZmlsZSBuYW1lXG5cCi0gICAgYXJnczogdHVwbGUgb3IgbGlzdCBvZiBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKLSAgICBQeU9iamVjdCAqYXJndjsKLSAgICBjaGFyICoqYXJndmxpc3Q7Ci0gICAgaW50IG1vZGUsIGksIGFyZ2M7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0KLSAgICAvKiBzcGF3bnZwIGhhcyB0aHJlZSBhcmd1bWVudHM6IChtb2RlLCBwYXRoLCBhcmd2KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyZPOnNwYXdudnAiLCAmbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwotICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5VHVwbGVfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cCgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKLSAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBpZiAoIWZzY29udmVydF9zdHJkdXAoKCpnZXRpdGVtKShhcmd2LCBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmd2bGlzdFtpXSkpIHsKLSAgICAgICAgICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBpKTsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgInNwYXdudnAoKSBhcmcgMiBtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgc3Bhd252YWwgPSBzcGF3bnZwKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0KTsKLSNlbHNlCi0gICAgc3Bhd252YWwgPSBfc3Bhd252cChtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0KLSAgICBpZiAoc3Bhd252YWwgPT0gLTEpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotfQotCi0KLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwZV9fZG9jX18sCi0ic3Bhd252cGUobW9kZSwgZmlsZSwgYXJncywgZW52KVxuXG5cCi1FeGVjdXRlIHRoZSBwcm9ncmFtICdmaWxlJyBpbiBhIG5ldyBwcm9jZXNzLCB1c2luZyB0aGUgZW52aXJvbm1lbnRcblwKLXNlYXJjaCBwYXRoIHRvIGZpbmQgdGhlIGZpbGUuXG5cCi1cblwKLSAgICBtb2RlOiBtb2RlIG9mIHByb2Nlc3MgY3JlYXRpb25cblwKLSAgICBmaWxlOiBleGVjdXRhYmxlIGZpbGUgbmFtZVxuXAotICAgIGFyZ3M6IHR1cGxlIG9yIGxpc3Qgb2YgYXJndW1lbnRzXG5cCi0gICAgZW52OiBkaWN0aW9uYXJ5IG9mIHN0cmluZ3MgbWFwcGluZyB0byBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3YsICplbnY7Ci0gICAgY2hhciAqKmFyZ3ZsaXN0OwotICAgIGNoYXIgKiplbnZsaXN0OwotICAgIFB5T2JqZWN0ICpyZXM9TlVMTDsKLSAgICBpbnQgbW9kZTsKLSAgICBQeV9zc2l6ZV90IGFyZ2MsIGksIGVudmM7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0gICAgaW50IGxhc3RhcmcgPSAwOwotCi0gICAgLyogc3Bhd252cGUgaGFzIGZvdXIgYXJndW1lbnRzOiAobW9kZSwgcGF0aCwgYXJndiwgZW52KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzIGFuZCBlbnYgaXMgYSBkaWN0aW9uYXJ5Ci0gICAgICAgbGlrZSBwb3NpeC5lbnZpcm9uLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpZXRPTzpzcGF3bnZwZSIsICZtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmFyZ3YsICZlbnYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7Ci0gICAgaWYgKFB5TGlzdF9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlMaXN0X1NpemUoYXJndik7Ci0gICAgICAgIGdldGl0ZW0gPSBQeUxpc3RfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlUdXBsZV9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlUdXBsZV9HZXRJdGVtOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzcGF3bnZwZSgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBpZiAoIVB5TWFwcGluZ19DaGVjayhlbnYpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cGUoKSBhcmcgMyBtdXN0IGJlIGEgbWFwcGluZyBvYmplY3QiKTsKLSAgICAgICAgZ290byBmYWlsXzA7Ci0gICAgfQotCi0gICAgYXJndmxpc3QgPSBQeU1lbV9ORVcoY2hhciAqLCBhcmdjKzEpOwotICAgIGlmIChhcmd2bGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIGlmICghZnNjb252ZXJ0X3N0cmR1cCgoKmdldGl0ZW0pKGFyZ3YsIGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZ3ZsaXN0W2ldKSkKLSAgICAgICAgewotICAgICAgICAgICAgbGFzdGFyZyA9IGk7Ci0gICAgICAgICAgICBnb3RvIGZhaWxfMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBsYXN0YXJnID0gYXJnYzsKLSAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7Ci0KLSAgICBlbnZsaXN0ID0gcGFyc2VfZW52bGlzdChlbnYsICZlbnZjKTsKLSAgICBpZiAoZW52bGlzdCA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWxfMTsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHNwYXdudmFsID0gc3Bhd252cGUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotI2Vsc2UKLSAgICBzcGF3bnZhbCA9IF9zcGF3bnZwZShtb2RlLCBwYXRoLCBhcmd2bGlzdCwgZW52bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHNwYXdudmFsID09IC0xKQotICAgICAgICAodm9pZCkgcG9zaXhfZXJyb3IoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotCi0gICAgd2hpbGUgKC0tZW52YyA+PSAwKQotICAgICAgICBQeU1lbV9ERUwoZW52bGlzdFtlbnZjXSk7Ci0gICAgUHlNZW1fREVMKGVudmxpc3QpOwotICBmYWlsXzE6Ci0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGxhc3RhcmcpOwotICBmYWlsXzA6Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICByZXR1cm4gcmVzOwotfQotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjZW5kaWYgLyogSEFWRV9TUEFXTlYgKi8KIAogCkBAIC02MDg1LDcgKzU5NzMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X29wZW5wdHkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0gICAgaW50IG1hc3Rlcl9mZCwgc2xhdmVfZmQ7CisgICAgaW50IG1hc3Rlcl9mZCA9IC0xLCBzbGF2ZV9mZCA9IC0xOwogI2lmbmRlZiBIQVZFX09QRU5QVFkKICAgICBjaGFyICogc2xhdmVfbmFtZTsKICNlbmRpZgpAQCAtNjA5OCwzNyArNTk4Niw1MiBAQAogCiAjaWZkZWYgSEFWRV9PUEVOUFRZCiAgICAgaWYgKG9wZW5wdHkoJm1hc3Rlcl9mZCwgJnNsYXZlX2ZkLCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG1hc3Rlcl9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNsYXZlX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKICNlbGlmIGRlZmluZWQoSEFWRV9fR0VUUFRZKQogICAgIHNsYXZlX25hbWUgPSBfZ2V0cHR5KCZtYXN0ZXJfZmQsIE9fUkRXUiwgMDY2NiwgMCk7CiAgICAgaWYgKHNsYXZlX25hbWUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBzbGF2ZV9mZCA9IG9wZW4oc2xhdmVfbmFtZSwgT19SRFdSKTsKKyAgICBzbGF2ZV9mZCA9IF9QeV9vcGVuKHNsYXZlX25hbWUsIE9fUkRXUik7CiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICNlbHNlCi0gICAgbWFzdGVyX2ZkID0gb3BlbihERVZfUFRZX0ZJTEUsIE9fUkRXUiB8IE9fTk9DVFRZKTsgLyogb3BlbiBtYXN0ZXIgKi8KKyAgICBtYXN0ZXJfZmQgPSBfUHlfb3BlbihERVZfUFRZX0ZJTEUsIE9fUkRXUiB8IE9fTk9DVFRZKTsgLyogb3BlbiBtYXN0ZXIgKi8KICAgICBpZiAobWFzdGVyX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICAgICBzaWdfc2F2ZWQgPSBQeU9TX3NldHNpZyhTSUdDSExELCBTSUdfREZMKTsKKwogICAgIC8qIGNoYW5nZSBwZXJtaXNzaW9uIG9mIHNsYXZlICovCiAgICAgaWYgKGdyYW50cHQobWFzdGVyX2ZkKSA8IDApIHsKICAgICAgICAgUHlPU19zZXRzaWcoU0lHQ0hMRCwgc2lnX3NhdmVkKTsKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CiAgICAgfQorCiAgICAgLyogdW5sb2NrIHNsYXZlICovCiAgICAgaWYgKHVubG9ja3B0KG1hc3Rlcl9mZCkgPCAwKSB7CiAgICAgICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOwogICAgIH0KKwogICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7CisKICAgICBzbGF2ZV9uYW1lID0gcHRzbmFtZShtYXN0ZXJfZmQpOyAvKiBnZXQgbmFtZSBvZiBzbGF2ZSAqLwogICAgIGlmIChzbGF2ZV9uYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHNsYXZlX2ZkID0gb3BlbihzbGF2ZV9uYW1lLCBPX1JEV1IgfCBPX05PQ1RUWSk7IC8qIG9wZW4gc2xhdmUgKi8KKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIHNsYXZlX2ZkID0gX1B5X29wZW4oc2xhdmVfbmFtZSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIHNsYXZlICovCiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CiAjaWYgIWRlZmluZWQoX19DWUdXSU5fXykgJiYgIWRlZmluZWQoSEFWRV9ERVZfUFRDKQogICAgIGlvY3RsKHNsYXZlX2ZkLCBJX1BVU0gsICJwdGVtIik7IC8qIHB1c2ggcHRlbSAqLwogICAgIGlvY3RsKHNsYXZlX2ZkLCBJX1BVU0gsICJsZHRlcm0iKTsgLyogcHVzaCBsZHRlcm0gKi8KQEAgLTYxNDAsNiArNjA0MywxNiBAQAogCiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBtYXN0ZXJfZmQsIHNsYXZlX2ZkKTsKIAorcG9zaXhfZXJyb3I6CisgICAgcG9zaXhfZXJyb3IoKTsKKyNpZiBkZWZpbmVkKEhBVkVfT1BFTlBUWSkgfHwgZGVmaW5lZChIQVZFX19HRVRQVFkpCitlcnJvcjoKKyNlbmRpZgorICAgIGlmIChtYXN0ZXJfZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKG1hc3Rlcl9mZCk7CisgICAgaWYgKHNsYXZlX2ZkICE9IC0xKQorICAgICAgICBjbG9zZShzbGF2ZV9mZCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAjZW5kaWYgLyogZGVmaW5lZChIQVZFX09QRU5QVFkpIHx8IGRlZmluZWQoSEFWRV9fR0VUUFRZKSB8fCBkZWZpbmVkKEhBVkVfREVWX1BUTVgpICovCiAKQEAgLTY2MzIsMjMgKzY1NDUsOCBAQAogICAgIGludCBzaWc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgImk6a2lsbCIsICZwaWQsICZzaWcpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoc2lnID09IFhDUFRfU0lHTkFMX0lOVFIgfHwgc2lnID09IFhDUFRfU0lHTkFMX0JSRUFLKSB7Ci0gICAgICAgIEFQSVJFVCByYzsKLSAgICAgICAgaWYgKChyYyA9IERvc1NlbmRTaWduYWxFeGNlcHRpb24ocGlkLCBzaWcpKSAhPSBOT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybiBvczJfZXJyb3IocmMpOwotCi0gICAgfSBlbHNlIGlmIChzaWcgPT0gWENQVF9TSUdOQUxfS0lMTFBST0MpIHsKLSAgICAgICAgQVBJUkVUIHJjOwotICAgICAgICBpZiAoKHJjID0gRG9zS2lsbFByb2Nlc3MoREtQX1BST0NFU1MsIHBpZCkpICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIG9zMl9lcnJvcihyYyk7Ci0KLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIE5VTEw7IC8qIFVucmVjb2duaXplZCBTaWduYWwgUmVxdWVzdGVkICovCi0jZWxzZQogICAgIGlmIChraWxsKHBpZCwgc2lnKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0jZW5kaWYKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC02Njg2LDE2ICs2NTg0LDE3IEBACiB3aW4zMl9raWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIERXT1JEIHBpZCwgc2lnLCBlcnI7CisgICAgcGlkX3QgcGlkOworICAgIERXT1JEIHNpZywgZXJyOwogICAgIEhBTkRMRSBoYW5kbGU7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImtrOmtpbGwiLCAmcGlkLCAmc2lnKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiazpraWxsIiwgJnBpZCwgJnNpZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogQ29uc29sZSBwcm9jZXNzZXMgd2hpY2ggc2hhcmUgYSBjb21tb24gY29uc29sZSBjYW4gYmUgc2VudCBDVFJMK0Mgb3IKICAgICAgICBDVFJMK0JSRUFLIGV2ZW50cywgcHJvdmlkZWQgdGhleSBoYW5kbGUgc2FpZCBldmVudHMuICovCiAgICAgaWYgKHNpZyA9PSBDVFJMX0NfRVZFTlQgfHwgc2lnID09IENUUkxfQlJFQUtfRVZFTlQpIHsKLSAgICAgICAgaWYgKEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudChzaWcsIHBpZCkgPT0gMCkgeworICAgICAgICBpZiAoR2VuZXJhdGVDb25zb2xlQ3RybEV2ZW50KHNpZywgKERXT1JEKXBpZCkgPT0gMCkgewogICAgICAgICAgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7CiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnIpOwogICAgICAgICB9CkBAIC02NzA1LDcgKzY2MDQsNyBAQAogCiAgICAgLyogSWYgdGhlIHNpZ25hbCBpcyBvdXRzaWRlIG9mIHdoYXQgR2VuZXJhdGVDb25zb2xlQ3RybEV2ZW50IGNhbiB1c2UsCiAgICAgICAgYXR0ZW1wdCB0byBvcGVuIGFuZCB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MuICovCi0gICAgaGFuZGxlID0gT3BlblByb2Nlc3MoUFJPQ0VTU19BTExfQUNDRVNTLCBGQUxTRSwgcGlkKTsKKyAgICBoYW5kbGUgPSBPcGVuUHJvY2VzcyhQUk9DRVNTX0FMTF9BQ0NFU1MsIEZBTFNFLCAoRFdPUkQpcGlkKTsKICAgICBpZiAoaGFuZGxlID09IE5VTEwpIHsKICAgICAgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7CiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnIpOwpAQCAtNzExMSw3ICs3MDEwLDcgQEAKICAgICBQeV9pbnRwdHJfdCBwaWQ7CiAgICAgaW50IHN0YXR1cywgb3B0aW9uczsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpOndhaXRwaWQiLCAmcGlkLCAmb3B0aW9ucykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6d2FpdHBpZCIsICZwaWQsICZvcHRpb25zKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHBpZCA9IF9jd2FpdCgmc3RhdHVzLCBwaWQsIG9wdGlvbnMpOwpAQCAtNzEyMCw3ICs3MDE5LDcgQEAKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAKICAgICAvKiBzaGlmdCB0aGUgc3RhdHVzIGxlZnQgYSBieXRlIHNvIHRoaXMgaXMgbW9yZSBsaWtlIHRoZSBQT1NJWCB3YWl0cGlkICovCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5pIiwgUHlMb25nX0Zyb21QaWQocGlkKSwgc3RhdHVzIDw8IDgpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIgImkiLCBwaWQsIHN0YXR1cyA8PCA4KTsKIH0KICNlbmRpZiAvKiBIQVZFX1dBSVRQSUQgfHwgSEFWRV9DV0FJVCAqLwogCkBAIC03MTcxLDYgKzcwNzAsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJyZWFkbGluayI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOnJlYWRsaW5rIiwga2V5d29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICNpZmRlZiBIQVZFX1JFQURMSU5LQVQKQEAgLTcxOTEsNyArNzA5MSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChsZW5ndGggPCAwKSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfcG9zaXhfZXJyb3IoInJlYWRsaW5rIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNzIyNyw4ICs3MTI3LDkgQEAKIC8qIEdyYWIgQ3JlYXRlU3ltYm9saWNMaW5rVyBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9DcmVhdGVTeW1ib2xpY0xpbmtXKShMUFdTVFIsIExQV1NUUiwgRFdPUkQpID0gTlVMTDsKIHN0YXRpYyBEV09SRCAoQ0FMTEJBQ0sgKlB5X0NyZWF0ZVN5bWJvbGljTGlua0EpKExQU1RSLCBMUFNUUiwgRFdPUkQpID0gTlVMTDsKKwogc3RhdGljIGludAotY2hlY2tfQ3JlYXRlU3ltYm9saWNMaW5rKCkKK2NoZWNrX0NyZWF0ZVN5bWJvbGljTGluayh2b2lkKQogewogICAgIEhJTlNUQU5DRSBoS2VybmVsMzI7CiAgICAgLyogb25seSByZWNoZWNrICovCkBAIC03MjQyLDU1ICs3MTQzLDU3IEBACiAgICAgcmV0dXJuIChQeV9DcmVhdGVTeW1ib2xpY0xpbmtXICYmIFB5X0NyZWF0ZVN5bWJvbGljTGlua0EpOwogfQogCi12b2lkIF9kaXJuYW1lVyhXQ0hBUiAqcGF0aCkgewotICAgIC8qIFJlbW92ZSB0aGUgbGFzdCBwb3J0aW9uIG9mIHRoZSBwYXRoICovCi0KKy8qIFJlbW92ZSB0aGUgbGFzdCBwb3J0aW9uIG9mIHRoZSBwYXRoICovCitzdGF0aWMgdm9pZAorX2Rpcm5hbWVXKFdDSEFSICpwYXRoKQorewogICAgIFdDSEFSICpwdHI7CiAKICAgICAvKiB3YWxrIHRoZSBwYXRoIGZyb20gdGhlIGVuZCB1bnRpbCBhIGJhY2tzbGFzaCBpcyBlbmNvdW50ZXJlZCAqLwotICAgIGZvcihwdHIgPSBwYXRoICsgd2NzbGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pCi0gICAgewotICAgICAgICBpZigqcHRyID09ICpMIlxcIiB8fCAqcHRyID09ICpMIi8iKSB7CisgICAgZm9yKHB0ciA9IHBhdGggKyB3Y3NsZW4ocGF0aCk7IHB0ciAhPSBwYXRoOyBwdHItLSkgeworICAgICAgICBpZiAoKnB0ciA9PSBMJ1xcJyB8fCAqcHRyID09IEwnLycpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgIH0KICAgICAqcHRyID0gMDsKIH0KIAotdm9pZCBfZGlybmFtZUEoY2hhciAqcGF0aCkgewotICAgIC8qIFJlbW92ZSB0aGUgbGFzdCBwb3J0aW9uIG9mIHRoZSBwYXRoICovCi0KKy8qIFJlbW92ZSB0aGUgbGFzdCBwb3J0aW9uIG9mIHRoZSBwYXRoICovCitzdGF0aWMgdm9pZAorX2Rpcm5hbWVBKGNoYXIgKnBhdGgpCit7CiAgICAgY2hhciAqcHRyOwogCiAgICAgLyogd2FsayB0aGUgcGF0aCBmcm9tIHRoZSBlbmQgdW50aWwgYSBiYWNrc2xhc2ggaXMgZW5jb3VudGVyZWQgKi8KLSAgICBmb3IocHRyID0gcGF0aCArIHN0cmxlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKQotICAgIHsKLSAgICAgICAgaWYoKnB0ciA9PSAnXFwnIHx8ICpwdHIgPT0gJy8nKSB7CisgICAgZm9yKHB0ciA9IHBhdGggKyBzdHJsZW4ocGF0aCk7IHB0ciAhPSBwYXRoOyBwdHItLSkgeworICAgICAgICBpZiAoKnB0ciA9PSAnXFwnIHx8ICpwdHIgPT0gJy8nKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9CiAgICAgKnB0ciA9IDA7CiB9CiAKLWludCBfaXNfYWJzVyhXQ0hBUiAqcGF0aCkgewotICAgIC8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KLQorLyogSXMgdGhpcyBwYXRoIGFic29sdXRlPyAqLworc3RhdGljIGludAorX2lzX2Fic1coY29uc3QgV0NIQVIgKnBhdGgpCit7CiAgICAgcmV0dXJuIHBhdGhbMF0gPT0gTCdcXCcgfHwgcGF0aFswXSA9PSBMJy8nIHx8IHBhdGhbMV0gPT0gTCc6JzsKIAogfQogCi1pbnQgX2lzX2Fic0EoY2hhciAqcGF0aCkgewotICAgIC8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KLQorLyogSXMgdGhpcyBwYXRoIGFic29sdXRlPyAqLworc3RhdGljIGludAorX2lzX2Fic0EoY29uc3QgY2hhciAqcGF0aCkKK3sKICAgICByZXR1cm4gcGF0aFswXSA9PSAnXFwnIHx8IHBhdGhbMF0gPT0gJy8nIHx8IHBhdGhbMV0gPT0gJzonOwogCiB9CiAKLXZvaWQgX2pvaW5XKFdDSEFSICpkZXN0X3BhdGgsIGNvbnN0IFdDSEFSICpyb290LCBjb25zdCBXQ0hBUiAqcmVzdCkgewotICAgIC8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCi0gICAgaW50IHJvb3RfbGVuOworLyogam9pbiByb290IGFuZCByZXN0IHdpdGggYSBiYWNrc2xhc2ggKi8KK3N0YXRpYyB2b2lkCitfam9pblcoV0NIQVIgKmRlc3RfcGF0aCwgY29uc3QgV0NIQVIgKnJvb3QsIGNvbnN0IFdDSEFSICpyZXN0KQoreworICAgIHNpemVfdCByb290X2xlbjsKIAotICAgIGlmKF9pc19hYnNXKHJlc3QpKSB7CisgICAgaWYgKF9pc19hYnNXKHJlc3QpKSB7CiAgICAgICAgIHdjc2NweShkZXN0X3BhdGgsIHJlc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzI5OSwxNyArNzIwMiwxOSBAQAogCiAgICAgd2NzY3B5KGRlc3RfcGF0aCwgcm9vdCk7CiAgICAgaWYocm9vdF9sZW4pIHsKLSAgICAgICAgZGVzdF9wYXRoW3Jvb3RfbGVuXSA9ICpMIlxcIjsKLSAgICAgICAgcm9vdF9sZW4gKz0gMTsKKyAgICAgICAgZGVzdF9wYXRoW3Jvb3RfbGVuXSA9IEwnXFwnOworICAgICAgICByb290X2xlbisrOwogICAgIH0KICAgICB3Y3NjcHkoZGVzdF9wYXRoK3Jvb3RfbGVuLCByZXN0KTsKIH0KIAotdm9pZCBfam9pbkEoY2hhciAqZGVzdF9wYXRoLCBjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpyZXN0KSB7Ci0gICAgLyogam9pbiByb290IGFuZCByZXN0IHdpdGggYSBiYWNrc2xhc2ggKi8KLSAgICBpbnQgcm9vdF9sZW47CisvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLworc3RhdGljIHZvaWQKK19qb2luQShjaGFyICpkZXN0X3BhdGgsIGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKnJlc3QpCit7CisgICAgc2l6ZV90IHJvb3RfbGVuOwogCi0gICAgaWYoX2lzX2Fic0EocmVzdCkpIHsKKyAgICBpZiAoX2lzX2Fic0EocmVzdCkpIHsKICAgICAgICAgc3RyY3B5KGRlc3RfcGF0aCwgcmVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03MzE5LDE0ICs3MjI0LDE1IEBACiAgICAgc3RyY3B5KGRlc3RfcGF0aCwgcm9vdCk7CiAgICAgaWYocm9vdF9sZW4pIHsKICAgICAgICAgZGVzdF9wYXRoW3Jvb3RfbGVuXSA9ICdcXCc7Ci0gICAgICAgIHJvb3RfbGVuICs9IDE7CisgICAgICAgIHJvb3RfbGVuKys7CiAgICAgfQogICAgIHN0cmNweShkZXN0X3BhdGgrcm9vdF9sZW4sIHJlc3QpOwogfQogCi1pbnQgX2NoZWNrX2RpclcoV0NIQVIgKnNyYywgV0NIQVIgKmRlc3QpCisvKiBSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBhdCBzcmMgcmVsYXRpdmUgdG8gZGVzdCBpcyBhIGRpcmVjdG9yeSAqLworc3RhdGljIGludAorX2NoZWNrX2RpclcoV0NIQVIgKnNyYywgV0NIQVIgKmRlc3QpCiB7Ci0gICAgLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KICAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIHNyY19pbmZvOwogICAgIFdDSEFSIGRlc3RfcGFyZW50W01BWF9QQVRIXTsKICAgICBXQ0hBUiBzcmNfcmVzb2x2ZWRbTUFYX1BBVEhdID0gTCIiOwpAQCAtNzM0MiwxOCArNzI0OCwxOSBAQAogICAgICk7CiB9CiAKLWludCBfY2hlY2tfZGlyQShjaGFyICpzcmMsIGNoYXIgKmRlc3QpCisvKiBSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBhdCBzcmMgcmVsYXRpdmUgdG8gZGVzdCBpcyBhIGRpcmVjdG9yeSAqLworc3RhdGljIGludAorX2NoZWNrX2RpckEoY2hhciAqc3JjLCBjaGFyICpkZXN0KQogewotICAgIC8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCiAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBzcmNfaW5mbzsKICAgICBjaGFyIGRlc3RfcGFyZW50W01BWF9QQVRIXTsKICAgICBjaGFyIHNyY19yZXNvbHZlZFtNQVhfUEFUSF0gPSAiIjsKIAogICAgIC8qIGRlc3RfcGFyZW50ID0gb3MucGF0aC5kaXJuYW1lKGRlc3QpICovCiAgICAgc3RyY3B5KGRlc3RfcGFyZW50LCBkZXN0KTsKLSAgICBfZGlybmFtZVcoZGVzdF9wYXJlbnQpOworICAgIF9kaXJuYW1lQShkZXN0X3BhcmVudCk7CiAgICAgLyogc3JjX3Jlc29sdmVkID0gb3MucGF0aC5qb2luKGRlc3RfcGFyZW50LCBzcmMpICovCi0gICAgX2pvaW5XKHNyY19yZXNvbHZlZCwgZGVzdF9wYXJlbnQsIHNyYyk7CisgICAgX2pvaW5BKHNyY19yZXNvbHZlZCwgZGVzdF9wYXJlbnQsIHNyYyk7CiAgICAgcmV0dXJuICgKICAgICAgICAgR2V0RmlsZUF0dHJpYnV0ZXNFeEEoc3JjX3Jlc29sdmVkLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZzcmNfaW5mbykKICAgICAgICAgJiYgc3JjX2luZm8uZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWQpAQCAtNzM3OSw4ICs3Mjg2LDEwIEBACiAjZW5kaWYKIAogICAgIG1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3JjKSk7CisgICAgc3JjLmZ1bmN0aW9uX25hbWUgPSAic3ltbGluayI7CiAgICAgc3JjLmFyZ3VtZW50X25hbWUgPSAic3JjIjsKICAgICBtZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKGRzdCkpOworICAgIGRzdC5mdW5jdGlvbl9uYW1lID0gInN5bWxpbmsiOwogICAgIGRzdC5hcmd1bWVudF9uYW1lID0gImRzdCI7CiAKICNpZmRlZiBNU19XSU5ET1dTCkBAIC03NDMzLDcgKzczNDIsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoInN5bWxpbmsiLCBzcmMub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmc3JjKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNzQ0OSw3ICs3MzU4LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJzeW1saW5rIiwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnNyYyk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTc2MTEsMzEgKzc1MjAsNyBAQAogdGltZXMuICBUaGUgb2JqZWN0IGJlaGF2ZXMgbGlrZSBhIG5hbWVkIHR1cGxlIHdpdGggdGhlc2UgZmllbGRzOlxuXAogICAodXRpbWUsIHN0aW1lLCBjdXRpbWUsIGNzdGltZSwgZWxhcHNlZF90aW1lKSIpOwogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotc3RhdGljIGxvbmcKLXN5c3RlbV91cHRpbWUodm9pZCkKLXsKLSAgICBVTE9ORyAgICAgdmFsdWUgPSAwOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIERvc1F1ZXJ5U3lzSW5mbyhRU1ZfTVNfQ09VTlQsIFFTVl9NU19DT1VOVCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdGltZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCi17Ci0gICAgLyogQ3VycmVudGx5IE9ubHkgVXB0aW1lIGlzIFByb3ZpZGVkIC0tIE90aGVycyBMYXRlciAqLwotICAgIHJldHVybiBidWlsZF90aW1lc19yZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX3V0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX3N0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX2N1dGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19jc3RpbWUgLyBIWiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKXN5c3RlbV91cHRpbWUoKSAvIDEwMDApOwotfQotI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF90aW1lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKQEAgLTc2NTcsNyArNzU0Miw3IEBACiAgICAgICAgIChkb3VibGUpMCwKICAgICAgICAgKGRvdWJsZSkwKTsKIH0KLSNlbHNlIC8qIE5laXRoZXIgV2luZG93cyBub3IgT1MvMiAqLworI2Vsc2UgLyogTm90IFdpbmRvd3MgKi8KICNkZWZpbmUgTkVFRF9USUNLU19QRVJfU0VDT05ECiBzdGF0aWMgbG9uZyB0aWNrc19wZXJfc2Vjb25kID0gLTE7CiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzc3Nyw2ICs3NjYyLDEwIEBACiAKIC8qIEZ1bmN0aW9ucyBhY3Rpbmcgb24gZmlsZSBkZXNjcmlwdG9ycyAqLwogCisjaWZkZWYgT19DTE9FWEVDCitleHRlcm4gaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZW5kaWYKKwogUHlEb2NfU1RSVkFSKHBvc2l4X29wZW5fX2RvY19fLAogIm9wZW4ocGF0aCwgZmxhZ3MsIG1vZGU9MG83NzcsICosIGRpcl9mZD1Ob25lKVxuXG5cCiBPcGVuIGEgZmlsZSBmb3IgbG93IGxldmVsIElPLiAgUmV0dXJucyBhIGZpbGUgaGFuZGxlIChpbnRlZ2VyKS5cblwKQEAgLTc3OTYsOCArNzY4NSwxNCBAQAogICAgIGludCBmZDsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmbGFncyIsICJtb2RlIiwgImRpcl9mZCIsIE5VTEx9OworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbGlmICFkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAib3BlbiI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZpfGkkTyY6b3BlbiIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICZmbGFncywgJm1vZGUsCkBAIC03ODA5LDYgKzc3MDQsMTIgQEAKICAgICAgICAgKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgZmxhZ3MgfD0gT19OT0lOSEVSSVQ7CisjZWxpZiBkZWZpbmVkKE9fQ0xPRVhFQykKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZW5kaWYKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKHBhdGgud2lkZSkKQEAgLTc4MjQsMTYgKzc3MjUsMTcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGZkID09IC0xKSB7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAvKiBmb3JjZSB1c2Ugb2YgcG9zaXhfZXJyb3IgaGVyZSBmb3IgZXhhY3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgaWYgKHBhdGgud2lkZSkKLSAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJvcGVuIiwgJnBhdGgpOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgcGF0aC5vYmplY3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylmZCk7CiAKIGV4aXQ6CkBAIC03ODkwLDEzICs3NzkyLDE0IEBACiBwb3NpeF9kdXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCBmZDsKKwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpkdXAiLCAmZmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIGZkID0gZHVwKGZkKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGZkID0gX1B5X2R1cChmZCk7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpZmQpOwogfQogCkBAIC03OTA2LDE2ICs3ODA5LDgyIEBACiBEdXBsaWNhdGUgZmlsZSBkZXNjcmlwdG9yLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZHVwMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitwb3NpeF9kdXAyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBpbnQgZmQsIGZkMiwgcmVzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6ZHVwMiIsICZmZCwgJmZkMikpCisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImZkIiwgImZkMiIsICJpbmhlcml0YWJsZSIsIE5VTEx9OworICAgIGludCBmZCwgZmQyOworICAgIGludCBpbmhlcml0YWJsZSA9IDE7CisgICAgaW50IHJlczsKKyNpZiBkZWZpbmVkKEhBVkVfRFVQMykgJiYgXAorICAgICEoZGVmaW5lZChIQVZFX0ZDTlRMX0gpICYmIGRlZmluZWQoRl9EVVAyRkRfQ0xPRVhFQykpCisgICAgLyogZHVwMygpIGlzIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjcrIGFuZCBnbGliYyAyLjkgKi8KKyAgICBpbnQgZHVwM193b3JrcyA9IC0xOworI2VuZGlmCisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpaXxpOmR1cDIiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmQsICZmZDIsICZpbmhlcml0YWJsZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKCFfUHlWZXJpZnlfZmRfZHVwMihmZCwgZmQyKSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICAvKiBDaGFyYWN0ZXIgZmlsZXMgbGlrZSBjb25zb2xlIGNhbm5vdCBiZSBtYWtlIG5vbi1pbmhlcml0YWJsZSAqLworICAgIGlmICghaW5oZXJpdGFibGUgJiYgX1B5X3NldF9pbmhlcml0YWJsZShmZDIsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICBjbG9zZShmZDIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNlbGlmIGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQMkZEX0NMT0VYRUMpCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGlmICghaW5oZXJpdGFibGUpCisgICAgICAgIHJlcyA9IGZjbnRsKGZkLCBGX0RVUDJGRF9DTE9FWEVDLCBmZDIpOworICAgIGVsc2UKKyAgICAgICAgcmVzID0gZHVwMihmZCwgZmQyKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworI2Vsc2UKKworI2lmZGVmIEhBVkVfRFVQMworICAgIGlmICghaW5oZXJpdGFibGUgJiYgZHVwM193b3JrcyAhPSAwKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzID0gZHVwMyhmZCwgZmQyLCBPX0NMT0VYRUMpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgaWYgKGR1cDNfd29ya3MgPT0gLTEpCisgICAgICAgICAgICAgICAgZHVwM193b3JrcyA9IChlcnJubyAhPSBFTk9TWVMpOworICAgICAgICAgICAgaWYgKGR1cDNfd29ya3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW5oZXJpdGFibGUgfHwgZHVwM193b3JrcyA9PSAwKQorICAgIHsKKyNlbmRpZgorICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICAgICAgaWYgKCFpbmhlcml0YWJsZSAmJiBfUHlfc2V0X2luaGVyaXRhYmxlKGZkMiwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICBjbG9zZShmZDIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyNpZmRlZiBIQVZFX0RVUDMKKyAgICB9CisjZW5kaWYKKworI2VuZGlmCisKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC03OTU5LDcgKzc5MjgsNyBAQAogcG9zaXhfbHNlZWsoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCBmZCwgaG93OwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgUFlfTE9OR19MT05HIHBvcywgcmVzOwogI2Vsc2UKICAgICBvZmZfdCBwb3MsIHJlczsKQEAgLTc5ODcsNyArNzk1Niw3IEBACiAgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgaG93KTsKICNlbHNlCiAgICAgcmVzID0gbHNlZWsoZmQsIHBvcywgaG93KTsKQEAgLTgxOTMsNyArODE2Miw3IEBACiAgICAgfQogICAgIGxlbiA9IHBidWYubGVuOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChsZW4gPiBJTlRfTUFYKQogICAgICAgICBsZW4gPSBJTlRfTUFYOwogICAgIHNpemUgPSB3cml0ZShmZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKQEAgLTgyMzAsMTIgKzgxOTksMTMgQEAKICAgICBvZmZfdCBzYnl0ZXM7CiAgICAgc3RydWN0IHNmX2hkdHIgc2Y7CiAgICAgaW50IGZsYWdzID0gMDsKLSAgICBzZi5oZWFkZXJzID0gTlVMTDsKLSAgICBzZi50cmFpbGVycyA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7Im91dCIsICJpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZmZzZXQiLCAiY291bnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVycyIsICJ0cmFpbGVycyIsICJmbGFncyIsIE5VTEx9OwogCisgICAgc2YuaGVhZGVycyA9IE5VTEw7CisgICAgc2YudHJhaWxlcnMgPSBOVUxMOworCiAjaWZkZWYgX19BUFBMRV9fCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAiaWlPJk8mfE9PaTpzZW5kZmlsZSIsCiAgICAgICAgIGtleXdvcmRzLCAmb3V0LCAmaW4sIF9wYXJzZV9vZmZfdCwgJm9mZnNldCwgX3BhcnNlX29mZl90LCAmc2J5dGVzLApAQCAtODM2OCw3ICs4MzM4LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgIT0gMCkgewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJmc3RhdCIsIE5VTEwpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICNlbmRpZgpAQCAtODQwMSwzNSArODM3MSw2OSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X3BpcGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBIRklMRSByZWFkLCB3cml0ZTsKLSAgICBBUElSRVQgcmM7Ci0KLSAgICByYyA9IERvc0NyZWF0ZVBpcGUoICZyZWFkLCAmd3JpdGUsIDQwOTYpOwotICAgIGlmIChyYyAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIG9zMl9lcnJvcihyYyk7Ci0KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIHJlYWQsIHdyaXRlKTsKLSNlbHNlCi0jaWYgIWRlZmluZWQoTVNfV0lORE9XUykKICAgICBpbnQgZmRzWzJdOwotICAgIGludCByZXM7Ci0gICAgcmVzID0gcGlwZShmZHMpOwotICAgIGlmIChyZXMgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmZHNbMF0sIGZkc1sxXSk7Ci0jZWxzZSAvKiBNU19XSU5ET1dTICovCisjaWZkZWYgTVNfV0lORE9XUwogICAgIEhBTkRMRSByZWFkLCB3cml0ZTsKLSAgICBpbnQgcmVhZF9mZCwgd3JpdGVfZmQ7CisgICAgU0VDVVJJVFlfQVRUUklCVVRFUyBhdHRyOwogICAgIEJPT0wgb2s7Ci0gICAgb2sgPSBDcmVhdGVQaXBlKCZyZWFkLCAmd3JpdGUsIE5VTEwsIDApOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiQ3JlYXRlUGlwZSIsIE5VTEwpOwotICAgIHJlYWRfZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXJlYWQsIDApOwotICAgIHdyaXRlX2ZkID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdCl3cml0ZSwgMSk7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCByZWFkX2ZkLCB3cml0ZV9mZCk7Ci0jZW5kaWYgLyogTVNfV0lORE9XUyAqLworI2Vsc2UKKyAgICBpbnQgcmVzOwogI2VuZGlmCisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgYXR0ci5uTGVuZ3RoID0gc2l6ZW9mKGF0dHIpOworICAgIGF0dHIubHBTZWN1cml0eURlc2NyaXB0b3IgPSBOVUxMOworICAgIGF0dHIuYkluaGVyaXRIYW5kbGUgPSBGQUxTRTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBvayA9IENyZWF0ZVBpcGUoJnJlYWQsICZ3cml0ZSwgJmF0dHIsIDApOworICAgIGlmIChvaykgeworICAgICAgICBmZHNbMF0gPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXJlYWQsIF9PX1JET05MWSk7CisgICAgICAgIGZkc1sxXSA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3Qpd3JpdGUsIF9PX1dST05MWSk7CisgICAgICAgIGlmIChmZHNbMF0gPT0gLTEgfHwgZmRzWzFdID09IC0xKSB7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShyZWFkKTsKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHdyaXRlKTsKKyAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworI2Vsc2UKKworI2lmZGVmIEhBVkVfUElQRTIKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmVzID0gcGlwZTIoZmRzLCBPX0NMT0VYRUMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmVzICE9IDAgJiYgZXJybm8gPT0gRU5PU1lTKQorICAgIHsKKyNlbmRpZgorICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IHBpcGUoZmRzKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAocmVzID09IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkc1swXSwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzBdKTsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMV0pOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmRzWzFdLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMF0pOworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1sxXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZmRlZiBIQVZFX1BJUEUyCisgICAgfQorI2VuZGlmCisKKyAgICBpZiAocmVzICE9IDApCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisjZW5kaWYgLyogIU1TX1dJTkRPV1MgKi8KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKIH0KICNlbmRpZiAgLyogSEFWRV9QSVBFICovCiAKQEAgLTg3MjgsNiArODczMiw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibGVuZ3RoIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInRydW5jYXRlIjsKICNpZmRlZiBIQVZFX0ZUUlVOQ0FURQogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC04NzQ1LDcgKzg3NTAsNyBAQAogICAgICAgICByZXMgPSB0cnVuY2F0ZShwYXRoLm5hcnJvdywgbGVuZ3RoKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXN1bHQgPSBwYXRoX3Bvc2l4X2Vycm9yKCJ0cnVuY2F0ZSIsICZwYXRoKTsKKyAgICAgICAgcmVzdWx0ID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmVzdWx0ID0gUHlfTm9uZTsKQEAgLTkxNjgsNiArOTE3MywxMCBAQAogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgOCwgUHlMb25nX0Zyb21Mb25nKChsb25nKSBzdC5mX2ZsYWcpKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDksIFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3QuZl9uYW1lbWF4KSk7CiAjZW5kaWYKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJldHVybiB2OwogfQpAQCAtOTIxNyw2ICs5MjI2LDcgQEAKICAgICBzdHJ1Y3Qgc3RhdHZmcyBzdDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAic3RhdHZmcyI7CiAjaWZkZWYgSEFWRV9GU1RBVFZGUwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC05MjQzLDcgKzkyNTMsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfcG9zaXhfZXJyb3IoInN0YXR2ZnMiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC05NDgwLDYgKzk0OTAsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgIm5hbWUiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicGF0aGNvbmYiOwogI2lmZGVmIEhBVkVfRlBBVEhDT05GCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTk1MDAsNyArOTUxMSw3IEBACiAgICAgICAgICAgICAvKiBjb3VsZCBiZSBhIHBhdGggb3IgbmFtZSBwcm9ibGVtICovCiAgICAgICAgICAgICBwb3NpeF9lcnJvcigpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBwYXRoX3Bvc2l4X2Vycm9yKCJwYXRoY29uZiIsICZwYXRoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tTG9uZyhsaW1pdCk7CkBAIC05NjgyLDcgKzk2OTMsNyBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIGludCBuYW1lOwogICAgIGNoYXIgYnVmZmVyWzI1NV07Ci0gICAgaW50IGxlbjsKKyAgICBzaXplX3QgbGVuOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpjb25mc3RyIiwgY29udl9jb25mc3RyX2NvbmZuYW1lLCAmbmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTY5OSw3ICs5NzEwLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgodW5zaWduZWQgaW50KWxlbiA+PSBzaXplb2YoYnVmZmVyKSkgeworICAgIGlmIChsZW4gPj0gc2l6ZW9mKGJ1ZmZlcikpIHsKICAgICAgICAgY2hhciAqYnVmID0gUHlNZW1fTWFsbG9jKGxlbik7CiAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTAyMjksNyArMTAyNDAsNyBAQAogICAgIGludCBuYW1lOwogCiAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOnN5c2NvbmYiLCBjb252X3N5c2NvbmZfY29uZm5hbWUsICZuYW1lKSkgewotICAgICAgICBpbnQgdmFsdWU7CisgICAgICAgIGxvbmcgdmFsdWU7CiAKICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICB2YWx1ZSA9IHN5c2NvbmYobmFtZSk7CkBAIC0xMDU1OSw2ICsxMDU3MCw4IEBACiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CiAgICAgbWVtc2V0KCZhdHRyaWJ1dGUsIDAsIHNpemVvZihhdHRyaWJ1dGUpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiZ2V0eGF0dHIiOworICAgIGF0dHJpYnV0ZS5mdW5jdGlvbl9uYW1lID0gImdldHhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfCRwOmdldHhhdHRyIiwga2V5d29yZHMsCiAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKQEAgLTEwNTc1LDcgKzEwNTg4LDcgQEAKICAgICAgICAgc3RhdGljIFB5X3NzaXplX3QgYnVmZmVyX3NpemVzW10gPSB7MTI4LCBYQVRUUl9TSVpFX01BWCwgMH07CiAgICAgICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZXNbaV07CiAgICAgICAgIGlmICghYnVmZmVyX3NpemUpIHsKLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImdldHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBidWZmZXJfc2l6ZSk7CkBAIC0xMDU5Nyw3ICsxMDYxMCw3IEBACiAgICAgICAgICAgICBidWZmZXIgPSBOVUxMOwogICAgICAgICAgICAgaWYgKGVycm5vID09IEVSQU5HRSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImdldHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KIApAQCAtMTA2MzYsNiArMTA2NDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbGFncyIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAic2V0eGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7CiAgICAgbWVtc2V0KCZ2YWx1ZSwgMCwgc2l6ZW9mKHZhbHVlKSk7CkBAIC0xMDY2Myw3ICsxMDY3Nyw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFM7CiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInNldHhhdHRyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMTA2OTcsNyArMTA3MTEsOSBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImF0dHJpYnV0ZSIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicmVtb3ZleGF0dHIiOwogICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7CisgICAgYXR0cmlidXRlLmZ1bmN0aW9uX25hbWUgPSAicmVtb3ZleGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ8JHA6cmVtb3ZleGF0dHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzLApAQCAtMTA3MTksNyArMTA3MzUsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTOwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJyZW1vdmV4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTEwNzU1LDYgKzEwNzcxLDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGlzdHhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBwYXRoLmZkID0gLTE7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mJHA6bGlzdHhhdHRyIiwga2V5d29yZHMsCkBAIC0xMDc3Myw3ICsxMDc5MCw3IEBACiAgICAgICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZXNbaV07CiAgICAgICAgIGlmICghYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgIC8qIEVSQU5HRSAqLwotICAgICAgICAgICAgcGF0aF9lcnJvcigibGlzdHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBidWZmZXIgPSBQeU1lbV9NQUxMT0MoYnVmZmVyX3NpemUpOwpAQCAtMTA3OTcsNyArMTA4MTQsNyBAQAogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoX2Vycm9yKCJsaXN0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEwOTc1LDE0ICsxMDk5MiwxNDUgQEAKIH0KICNlbmRpZiAvKiBkZWZpbmVkKFRFUk1TSVpFX1VTRV9DT05JTykgfHwgZGVmaW5lZChURVJNU0laRV9VU0VfSU9DVEwpICovCiAKK1B5RG9jX1NUUlZBUihwb3NpeF9jcHVfY291bnRfX2RvY19fLAorImNwdV9jb3VudCgpIC0+IGludGVnZXJcblxuXAorUmV0dXJuIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLCBvciBOb25lIGlmIHRoaXMgdmFsdWUgY2Fubm90IGJlXG5cCitlc3RhYmxpc2hlZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Bvc2l4X2NwdV9jb3VudChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgbmNwdSA9IDA7CisjaWZkZWYgTVNfV0lORE9XUworICAgIFNZU1RFTV9JTkZPIHN5c2luZm87CisgICAgR2V0U3lzdGVtSW5mbygmc3lzaW5mbyk7CisgICAgbmNwdSA9IHN5c2luZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnM7CisjZWxpZiBkZWZpbmVkKF9faHB1eCkKKyAgICBuY3B1ID0gbXBjdGwoTVBDX0dFVE5VTVNQVVMsIE5VTEwsIE5VTEwpOworI2VsaWYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX05QUk9DRVNTT1JTX09OTE4pCisgICAgbmNwdSA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOworI2VsaWYgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSAgIHx8IFwKKyAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pICAgfHwgXAorICAgICAgZGVmaW5lZChfX05ldEJTRF9fKSAgICB8fCBcCisgICAgICBkZWZpbmVkKF9fQVBQTEVfXykKKyAgICBpbnQgbWliWzJdOworICAgIHNpemVfdCBsZW4gPSBzaXplb2YobmNwdSk7CisgICAgbWliWzBdID0gQ1RMX0hXOworICAgIG1pYlsxXSA9IEhXX05DUFU7CisgICAgaWYgKHN5c2N0bChtaWIsIDIsICZuY3B1LCAmbGVuLCBOVUxMLCAwKSAhPSAwKQorICAgICAgICBuY3B1ID0gMDsKKyNlbmRpZgorICAgIGlmIChuY3B1ID49IDEpCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcobmNwdSk7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGdldF9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgImdldF9pbmhlcml0YWJsZShmZCkgLT4gYm9vbFxuIiBcCisgICAgIlxuIiBcCisgICAgIkdldCB0aGUgY2xvc2Utb24tZXhlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X2dldF9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkOworICAgIGludCBpbmhlcml0YWJsZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpnZXRfaW5oZXJpdGFibGUiLCAmZmQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBpbmhlcml0YWJsZSA9IF9QeV9nZXRfaW5oZXJpdGFibGUoZmQpOworICAgIGlmIChpbmhlcml0YWJsZSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoaW5oZXJpdGFibGUpOworfQorCitQeURvY19TVFJWQVIoc2V0X2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAic2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSlcbiIgXAorICAgICJcbiIgXAorICAgICJTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X3NldF9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkLCBpbmhlcml0YWJsZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6c2V0X2luaGVyaXRhYmxlIiwgJmZkLCAmaW5oZXJpdGFibGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUsIE5VTEwpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKworI2lmZGVmIE1TX1dJTkRPV1MKK1B5RG9jX1NUUlZBUihnZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAiZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShmZCkgLT4gYm9vbFxuIiBcCisgICAgIlxuIiBcCisgICAgIkdldCB0aGUgY2xvc2Utb24tZXhlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X2dldF9oYW5kbGVfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICI6Z2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsICZoYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghR2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSloYW5kbGUsICZmbGFncykpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoZmxhZ3MgJiBIQU5ETEVfRkxBR19JTkhFUklUKTsKK30KKworUHlEb2NfU1RSVkFSKHNldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJzZXRfaGFuZGxlX2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSlcbiIgXAorICAgICJcbiIgXAorICAgICJTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBoYW5kbGUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X3NldF9oYW5kbGVfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBpbmhlcml0YWJsZSA9IDE7CisgICAgUHlfaW50cHRyX3QgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6c2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZpbmhlcml0YWJsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyA9IEhBTkRMRV9GTEFHX0lOSEVSSVQ7CisgICAgZWxzZQorICAgICAgICBmbGFncyA9IDA7CisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKWhhbmRsZSwgSEFORExFX0ZMQUdfSU5IRVJJVCwgZmxhZ3MpKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisjZW5kaWYgICAvKiBNU19XSU5ET1dTICovCisKKwogCiBzdGF0aWMgUHlNZXRob2REZWYgcG9zaXhfbWV0aG9kc1tdID0gewotICAgIHsiYWNjZXNzIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2FjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9hY2Nlc3NfX2RvY19ffSwKLSNpZmRlZiBIQVZFX1RUWU5BTUUKLSAgICB7InR0eW5hbWUiLCAgICAgICAgIHBvc2l4X3R0eW5hbWUsIE1FVEhfVkFSQVJHUywgcG9zaXhfdHR5bmFtZV9fZG9jX199LAotI2VuZGlmCisKKyAgICBPU19TVEFUX01FVEhPRERFRgorICAgIE9TX0FDQ0VTU19NRVRIT0RERUYKKyAgICBPU19UVFlOQU1FX01FVEhPRERFRgorCiAgICAgeyJjaGRpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfY2hkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfY2hkaXJfX2RvY19ffSwKQEAgLTExMDIwLDEyICsxMTE2OCwxMCBAQAogI2lmZGVmIEhBVkVfQ1RFUk1JRAogICAgIHsiY3Rlcm1pZCIsICAgICAgICAgcG9zaXhfY3Rlcm1pZCwgTUVUSF9OT0FSR1MsIHBvc2l4X2N0ZXJtaWRfX2RvY19ffSwKICNlbmRpZgotI2lmZGVmIEhBVkVfR0VUQ1dECiAgICAgeyJnZXRjd2QiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfZ2V0Y3dkX3VuaWNvZGUsCiAgICAgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGN3ZF9fZG9jX199LAogICAgIHsiZ2V0Y3dkYiIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2dldGN3ZF9ieXRlcywKICAgICBNRVRIX05PQVJHUywgcG9zaXhfZ2V0Y3dkYl9fZG9jX199LAotI2VuZGlmCiAjaWYgZGVmaW5lZChIQVZFX0xJTkspIHx8IGRlZmluZWQoTVNfV0lORE9XUykKICAgICB7ImxpbmsiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9saW5rLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKQEAgLTExMDY4LDkgKzExMjE0LDYgQEAKICAgICB7InJtZGlyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9ybWRpciwKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9ybWRpcl9fZG9jX199LAotICAgIHsic3RhdCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3N0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfc3RhdF9fZG9jX199LAogICAgIHsic3RhdF9mbG9hdF90aW1lcyIsIHN0YXRfZmxvYXRfdGltZXMsIE1FVEhfVkFSQVJHUywgc3RhdF9mbG9hdF90aW1lc19fZG9jX199LAogI2lmIGRlZmluZWQoSEFWRV9TWU1MSU5LKQogICAgIHsic3ltbGluayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3N5bWxpbmssCkBAIC0xMTEwNSwxMCArMTEyNDgsNiBAQAogI2lmZGVmIEhBVkVfU1BBV05WCiAgICAgeyJzcGF3bnYiLCAgICAgICAgICBwb3NpeF9zcGF3bnYsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252X19kb2NfX30sCiAgICAgeyJzcGF3bnZlIiwgICAgICAgICBwb3NpeF9zcGF3bnZlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudmVfX2RvY19ffSwKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIHsic3Bhd252cCIsICAgICAgICAgcG9zaXhfc3Bhd252cCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZwX19kb2NfX30sCi0gICAgeyJzcGF3bnZwZSIsICAgICAgICBwb3NpeF9zcGF3bnZwZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZwZV9fZG9jX199LAotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjZW5kaWYgLyogSEFWRV9TUEFXTlYgKi8KICNpZmRlZiBIQVZFX0ZPUksxCiAgICAgeyJmb3JrMSIsICAgICAgIHBvc2l4X2ZvcmsxLCBNRVRIX05PQVJHUywgcG9zaXhfZm9yazFfX2RvY19ffSwKQEAgLTExMjU2LDcgKzExMzk1LDggQEAKICAgICB7ImNsb3NlcmFuZ2UiLCAgICAgIHBvc2l4X2Nsb3NlcmFuZ2UsIE1FVEhfVkFSQVJHUywgcG9zaXhfY2xvc2VyYW5nZV9fZG9jX199LAogICAgIHsiZGV2aWNlX2VuY29kaW5nIiwgZGV2aWNlX2VuY29kaW5nLCBNRVRIX1ZBUkFSR1MsIGRldmljZV9lbmNvZGluZ19fZG9jX199LAogICAgIHsiZHVwIiwgICAgICAgICAgICAgcG9zaXhfZHVwLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2R1cF9fZG9jX199LAotICAgIHsiZHVwMiIsICAgICAgICAgICAgcG9zaXhfZHVwMiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9kdXAyX19kb2NfX30sCisgICAgeyJkdXAyIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfZHVwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHBvc2l4X2R1cDJfX2RvY19ffSwKICNpZmRlZiBIQVZFX0xPQ0tGCiAgICAgeyJsb2NrZiIsICAgICAgICAgICBwb3NpeF9sb2NrZiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9sb2NrZl9fZG9jX199LAogI2VuZGlmCkBAIC0xMTM4Nyw5ICsxMTUyNyw5IEBACiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHsiX2dldGZ1bGxwYXRobmFtZSIsICAgICAgICBwb3NpeF9fZ2V0ZnVsbHBhdGhuYW1lLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAogICAgIHsiX2dldGZpbmFscGF0aG5hbWUiLCAgICAgICBwb3NpeF9fZ2V0ZmluYWxwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKLSAgICB7Il9nZXRmaWxlaW5mb3JtYXRpb24iLCAgICAgcG9zaXhfX2dldGZpbGVpbmZvcm1hdGlvbiwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7Il9pc2RpciIsICAgICAgICAgICAgICAgICAgcG9zaXhfX2lzZGlyLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X19pc2Rpcl9fZG9jX199LAogICAgIHsiX2dldGRpc2t1c2FnZSIsICAgICAgICAgICB3aW4zMl9fZ2V0ZGlza3VzYWdlLCBNRVRIX1ZBUkFSR1MsIHdpbjMyX19nZXRkaXNrdXNhZ2VfX2RvY19ffSwKKyAgICB7Il9nZXR2b2x1bWVwYXRobmFtZSIsICAgICAgcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZV9fZG9jX199LAogI2VuZGlmCiAjaWZkZWYgSEFWRV9HRVRMT0FEQVZHCiAgICAgeyJnZXRsb2FkYXZnIiwgICAgICBwb3NpeF9nZXRsb2FkYXZnLCBNRVRIX05PQVJHUywgcG9zaXhfZ2V0bG9hZGF2Z19fZG9jX199LApAQCAtMTE0MjUsNjkgKzExNTY1LDIwIEBACiAjaWYgZGVmaW5lZChURVJNU0laRV9VU0VfQ09OSU8pIHx8IGRlZmluZWQoVEVSTVNJWkVfVVNFX0lPQ1RMKQogICAgIHsiZ2V0X3Rlcm1pbmFsX3NpemUiLCBnZXRfdGVybWluYWxfc2l6ZSwgTUVUSF9WQVJBUkdTLCB0ZXJtc2l6ZV9fZG9jX199LAogI2VuZGlmCisgICAgeyJjcHVfY291bnQiLCAoUHlDRnVuY3Rpb24pcG9zaXhfY3B1X2NvdW50LAorICAgICAgICAgICAgICAgICAgTUVUSF9OT0FSR1MsIHBvc2l4X2NwdV9jb3VudF9fZG9jX199LAorICAgIHsiZ2V0X2luaGVyaXRhYmxlIiwgcG9zaXhfZ2V0X2luaGVyaXRhYmxlLCBNRVRIX1ZBUkFSR1MsIGdldF9pbmhlcml0YWJsZV9fZG9jX199LAorICAgIHsic2V0X2luaGVyaXRhYmxlIiwgcG9zaXhfc2V0X2luaGVyaXRhYmxlLCBNRVRIX1ZBUkFSR1MsIHNldF9pbmhlcml0YWJsZV9fZG9jX199LAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICB7ImdldF9oYW5kbGVfaW5oZXJpdGFibGUiLCBwb3NpeF9nZXRfaGFuZGxlX2luaGVyaXRhYmxlLAorICAgICBNRVRIX1ZBUkFSR1MsIGdldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19ffSwKKyAgICB7InNldF9oYW5kbGVfaW5oZXJpdGFibGUiLCBwb3NpeF9zZXRfaGFuZGxlX2luaGVyaXRhYmxlLAorICAgICBNRVRIX1ZBUkFSR1MsIHNldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19ffSwKKyNlbmRpZgogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLwogfTsKIAogCi1zdGF0aWMgaW50Ci1pbnMoUHlPYmplY3QgKm1vZHVsZSwgY2hhciAqc3ltYm9sLCBsb25nIHZhbHVlKQotewotICAgIHJldHVybiBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtb2R1bGUsIHN5bWJvbCwgdmFsdWUpOwotfQotCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLS8qIEluc2VydCBQbGF0Zm9ybS1TcGVjaWZpYyBDb25zdGFudCBWYWx1ZXMgKFN0cmluZ3MgJiBOdW1iZXJzKSBvZiBDb21tb24gVXNlICovCi1zdGF0aWMgaW50IGluc2VydHZhbHVlcyhQeU9iamVjdCAqbW9kdWxlKQotewotICAgIEFQSVJFVCAgICByYzsKLSAgICBVTE9ORyAgICAgdmFsdWVzW1FTVl9NQVgrMV07Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgY2hhciAgICAgKnZlciwgdG1wWzUwXTsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9IERvc1F1ZXJ5U3lzSW5mbygxTCwgUVNWX01BWCwgJnZhbHVlc1sxXSwgc2l6ZW9mKFVMT05HKSAqIFFTVl9NQVgpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAocmMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgb3MyX2Vycm9yKHJjKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmIChpbnMobW9kdWxlLCAibWVtaW5zdGFsbGVkIiwgdmFsdWVzW1FTVl9UT1RQSFlTTUVNXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1lbWtlcm5lbCIsICAgIHZhbHVlc1tRU1ZfVE9UUkVTTUVNXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1lbXZpcnR1YWwiLCAgIHZhbHVlc1tRU1ZfVE9UQVZBSUxNRU1dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWF4cGF0aGxlbiIsICAgdmFsdWVzW1FTVl9NQVhfUEFUSF9MRU5HVEhdKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWF4bmFtZWxlbiIsICAgdmFsdWVzW1FTVl9NQVhfQ09NUF9MRU5HVEhdKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAicmV2aXNpb24iLCAgICAgdmFsdWVzW1FTVl9WRVJTSU9OX1JFVklTSU9OXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgInRpbWVzbGljZSIsICAgIHZhbHVlc1tRU1ZfTUlOX1NMSUNFXSkpIHJldHVybiAtMTsKLQotICAgIHN3aXRjaCAodmFsdWVzW1FTVl9WRVJTSU9OX01JTk9SXSkgewotICAgIGNhc2UgMDogIHZlciA9ICIyLjAwIjsgYnJlYWs7Ci0gICAgY2FzZSAxMDogdmVyID0gIjIuMTAiOyBicmVhazsKLSAgICBjYXNlIDExOiB2ZXIgPSAiMi4xMSI7IGJyZWFrOwotICAgIGNhc2UgMzA6IHZlciA9ICIzLjAwIjsgYnJlYWs7Ci0gICAgY2FzZSA0MDogdmVyID0gIjQuMDAiOyBicmVhazsKLSAgICBjYXNlIDUwOiB2ZXIgPSAiNS4wMCI7IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFB5T1Nfc25wcmludGYodG1wLCBzaXplb2YodG1wKSwKLSAgICAgICAgICAgICAgICAgICAgICAiJWQtJWQiLCB2YWx1ZXNbUVNWX1ZFUlNJT05fTUFKT1JdLAotICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tRU1ZfVkVSU0lPTl9NSU5PUl0pOwotICAgICAgICB2ZXIgPSAmdG1wWzBdOwotICAgIH0KLQotICAgIC8qIEFkZCBJbmRpY2F0b3Igb2YgdGhlIFZlcnNpb24gb2YgdGhlIE9wZXJhdGluZyBTeXN0ZW0gKi8KLSAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobW9kdWxlLCAidmVyc2lvbiIsIHRtcCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBBZGQgSW5kaWNhdG9yIG9mIFdoaWNoIERyaXZlIHdhcyBVc2VkIHRvIEJvb3QgdGhlIFN5c3RlbSAqLwotICAgIHRtcFswXSA9ICdBJyArIHZhbHVlc1tRU1ZfQk9PVF9EUklWRV0gLSAxOwotICAgIHRtcFsxXSA9ICc6JzsKLSAgICB0bXBbMl0gPSAnXDAnOwotCi0gICAgcmV0dXJuIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG1vZHVsZSwgImJvb3Rkcml2ZSIsIHRtcCk7Ci19Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoSEFWRV9TWU1MSU5LKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpCiBzdGF0aWMgaW50CiBlbmFibGVfc3ltbGluaygpCkBAIC0xMTUxOCw0MDEgKzExNjA5LDM4MSBAQAogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TWU1MSU5LKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCiAKIHN0YXRpYyBpbnQKLWFsbF9pbnMoUHlPYmplY3QgKmQpCithbGxfaW5zKFB5T2JqZWN0ICptKQogewogI2lmZGVmIEZfT0sKLSAgICBpZiAoaW5zKGQsICJGX09LIiwgKGxvbmcpRl9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9PSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFJfT0sKLSAgICBpZiAoaW5zKGQsICJSX09LIiwgKGxvbmcpUl9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUl9PSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdfT0sKLSAgICBpZiAoaW5zKGQsICJXX09LIiwgKGxvbmcpV19PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV19PSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFhfT0sKLSAgICBpZiAoaW5zKGQsICJYX09LIiwgKGxvbmcpWF9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWF9PSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE5HUk9VUFNfTUFYCi0gICAgaWYgKGlucyhkLCAiTkdST1VQU19NQVgiLCAobG9uZylOR1JPVVBTX01BWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkdST1VQU19NQVgpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBUTVBfTUFYCi0gICAgaWYgKGlucyhkLCAiVE1QX01BWCIsIChsb25nKVRNUF9NQVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRNUF9NQVgpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXQ09OVElOVUVECi0gICAgaWYgKGlucyhkLCAiV0NPTlRJTlVFRCIsIChsb25nKVdDT05USU5VRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdDT05USU5VRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXTk9IQU5HCi0gICAgaWYgKGlucyhkLCAiV05PSEFORyIsIChsb25nKVdOT0hBTkcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdOT0hBTkcpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXVU5UUkFDRUQKLSAgICBpZiAoaW5zKGQsICJXVU5UUkFDRUQiLCAobG9uZylXVU5UUkFDRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdVTlRSQUNFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fUkRPTkxZCi0gICAgaWYgKGlucyhkLCAiT19SRE9OTFkiLCAobG9uZylPX1JET05MWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19SRE9OTFkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1dST05MWQotICAgIGlmIChpbnMoZCwgIk9fV1JPTkxZIiwgKGxvbmcpT19XUk9OTFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fV1JPTkxZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SRFdSCi0gICAgaWYgKGlucyhkLCAiT19SRFdSIiwgKGxvbmcpT19SRFdSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JEV1IpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05ERUxBWQotICAgIGlmIChpbnMoZCwgIk9fTkRFTEFZIiwgKGxvbmcpT19OREVMQVkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTkRFTEFZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT05CTE9DSwotICAgIGlmIChpbnMoZCwgIk9fTk9OQkxPQ0siLCAobG9uZylPX05PTkJMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PTkJMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19BUFBFTkQKLSAgICBpZiAoaW5zKGQsICJPX0FQUEVORCIsIChsb25nKU9fQVBQRU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0FQUEVORCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRFNZTkMKLSAgICBpZiAoaW5zKGQsICJPX0RTWU5DIiwgKGxvbmcpT19EU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19EU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fUlNZTkMKLSAgICBpZiAoaW5zKGQsICJPX1JTWU5DIiwgKGxvbmcpT19SU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19SU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU1lOQwotICAgIGlmIChpbnMoZCwgIk9fU1lOQyIsIChsb25nKU9fU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0NUVFkKLSAgICBpZiAoaW5zKGQsICJPX05PQ1RUWSIsIChsb25nKU9fTk9DVFRZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PQ1RUWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQ1JFQVQKLSAgICBpZiAoaW5zKGQsICJPX0NSRUFUIiwgKGxvbmcpT19DUkVBVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19DUkVBVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRVhDTAotICAgIGlmIChpbnMoZCwgIk9fRVhDTCIsIChsb25nKU9fRVhDTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19FWENMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19UUlVOQwotICAgIGlmIChpbnMoZCwgIk9fVFJVTkMiLCAobG9uZylPX1RSVU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RSVU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19CSU5BUlkKLSAgICBpZiAoaW5zKGQsICJPX0JJTkFSWSIsIChsb25nKU9fQklOQVJZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0JJTkFSWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVEVYVAotICAgIGlmIChpbnMoZCwgIk9fVEVYVCIsIChsb25nKU9fVEVYVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19URVhUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19YQVRUUgotICAgIGlmIChpbnMoZCwgIk9fWEFUVFIiLCAobG9uZylPX1hBVFRSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1hBVFRSKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19MQVJHRUZJTEUKLSAgICBpZiAoaW5zKGQsICJPX0xBUkdFRklMRSIsIChsb25nKU9fTEFSR0VGSUxFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0xBUkdFRklMRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU0hMT0NLCi0gICAgaWYgKGlucyhkLCAiT19TSExPQ0siLCAobG9uZylPX1NITE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TSExPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0VYTE9DSwotICAgIGlmIChpbnMoZCwgIk9fRVhMT0NLIiwgKGxvbmcpT19FWExPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRVhMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19FWEVDCi0gICAgaWYgKGlucyhkLCAiT19FWEVDIiwgKGxvbmcpT19FWEVDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NFQVJDSAotICAgIGlmIChpbnMoZCwgIk9fU0VBUkNIIiwgKGxvbmcpT19TRUFSQ0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU0VBUkNIKSkgcmV0dXJuIC0xOworI2VuZGlmCisjaWZkZWYgT19QQVRICisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUEFUSCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVFRZX0lOSVQKLSAgICBpZiAoaW5zKGQsICJPX1RUWV9JTklUIiwgKGxvbmcpT19UVFlfSU5JVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19UVFlfSU5JVCkpIHJldHVybiAtMTsKKyNlbmRpZgorI2lmZGVmIE9fVE1QRklMRQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RNUEZJTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQUklPX1BST0NFU1MKLSAgICBpZiAoaW5zKGQsICJQUklPX1BST0NFU1MiLCAobG9uZylQUklPX1BST0NFU1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBSSU9fUFJPQ0VTUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBSSU9fUEdSUAotICAgIGlmIChpbnMoZCwgIlBSSU9fUEdSUCIsIChsb25nKVBSSU9fUEdSUCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUFJJT19QR1JQKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUFJJT19VU0VSCi0gICAgaWYgKGlucyhkLCAiUFJJT19VU0VSIiwgKGxvbmcpUFJJT19VU0VSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQUklPX1VTRVIpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0NMT0VYRUMKLSAgICBpZiAoaW5zKGQsICJPX0NMT0VYRUMiLCAobG9uZylPX0NMT0VYRUMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQ0xPRVhFQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQUNDTU9ERQotICAgIGlmIChpbnMoZCwgIk9fQUNDTU9ERSIsIChsb25nKU9fQUNDTU9ERSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19BQ0NNT0RFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIAogI2lmZGVmIFNFRUtfSE9MRQotICAgIGlmIChpbnMoZCwgIlNFRUtfSE9MRSIsIChsb25nKVNFRUtfSE9MRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0VFS19IT0xFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0VFS19EQVRBCi0gICAgaWYgKGlucyhkLCAiU0VFS19EQVRBIiwgKGxvbmcpU0VFS19EQVRBKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRUVLX0RBVEEpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogTVMgV2luZG93cyAqLwogI2lmZGVmIE9fTk9JTkhFUklUCiAgICAgLyogRG9uJ3QgaW5oZXJpdCBpbiBjaGlsZCBwcm9jZXNzZXMuICovCi0gICAgaWYgKGlucyhkLCAiT19OT0lOSEVSSVQiLCAobG9uZylPX05PSU5IRVJJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0lOSEVSSVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBfT19TSE9SVF9MSVZFRAogICAgIC8qIE9wdGltaXplIGZvciBzaG9ydCBsaWZlIChrZWVwIGluIG1lbW9yeSkuICovCiAgICAgLyogTVMgZm9yZ290IHRvIGRlZmluZSB0aGlzIG9uZSB3aXRoIGEgbm9uLXVuZGVyc2NvcmUgZm9ybSB0b28uICovCi0gICAgaWYgKGlucyhkLCAiT19TSE9SVF9MSVZFRCIsIChsb25nKV9PX1NIT1JUX0xJVkVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT19TSE9SVF9MSVZFRCIsIF9PX1NIT1JUX0xJVkVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19URU1QT1JBUlkKICAgICAvKiBBdXRvbWF0aWNhbGx5IGRlbGV0ZSB3aGVuIGxhc3QgaGFuZGxlIGlzIGNsb3NlZC4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1RFTVBPUkFSWSIsIChsb25nKU9fVEVNUE9SQVJZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RFTVBPUkFSWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fUkFORE9NCiAgICAgLyogT3B0aW1pemUgZm9yIHJhbmRvbSBhY2Nlc3MuICovCi0gICAgaWYgKGlucyhkLCAiT19SQU5ET00iLCAobG9uZylPX1JBTkRPTSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19SQU5ET00pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NFUVVFTlRJQUwKICAgICAvKiBPcHRpbWl6ZSBmb3Igc2VxdWVudGlhbCBhY2Nlc3MuICovCi0gICAgaWYgKGlucyhkLCAiT19TRVFVRU5USUFMIiwgKGxvbmcpT19TRVFVRU5USUFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogR05VIGV4dGVuc2lvbnMuICovCiAjaWZkZWYgT19BU1lOQwogICAgIC8qIFNlbmQgYSBTSUdJTyBzaWduYWwgd2hlbmV2ZXIgaW5wdXQgb3Igb3V0cHV0CiAgICAgICAgYmVjb21lcyBhdmFpbGFibGUgb24gZmlsZSBkZXNjcmlwdG9yICovCi0gICAgaWYgKGlucyhkLCAiT19BU1lOQyIsIChsb25nKU9fQVNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQVNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0RJUkVDVAogICAgIC8qIERpcmVjdCBkaXNrIGFjY2Vzcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX0RJUkVDVCIsIChsb25nKU9fRElSRUNUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0RJUkVDVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRElSRUNUT1JZCiAgICAgLyogTXVzdCBiZSBhIGRpcmVjdG9yeS4gICAgICAqLwotICAgIGlmIChpbnMoZCwgIk9fRElSRUNUT1JZIiwgKGxvbmcpT19ESVJFQ1RPUlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRElSRUNUT1JZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0ZPTExPVwogICAgIC8qIERvIG5vdCBmb2xsb3cgbGlua3MuICAgICAgKi8KLSAgICBpZiAoaW5zKGQsICJPX05PRk9MTE9XIiwgKGxvbmcpT19OT0ZPTExPVykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0ZPTExPVykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9MSU5LUwogICAgIC8qIEZhaWxzIGlmIGxpbmsgY291bnQgb2YgdGhlIG5hbWVkIGZpbGUgaXMgZ3JlYXRlciB0aGFuIDEgKi8KLSAgICBpZiAoaW5zKGQsICJPX05PTElOS1MiLCAobG9uZylPX05PTElOS1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9MSU5LUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9BVElNRQogICAgIC8qIERvIG5vdCB1cGRhdGUgdGhlIGFjY2VzcyB0aW1lLiAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9BVElNRSIsIChsb25nKU9fTk9BVElNRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0FUSU1FKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBUaGVzZSBjb21lIGZyb20gc3lzZXhpdHMuaCAqLwogI2lmZGVmIEVYX09LCi0gICAgaWYgKGlucyhkLCAiRVhfT0siLCAobG9uZylFWF9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfT0sgKi8KICNpZmRlZiBFWF9VU0FHRQotICAgIGlmIChpbnMoZCwgIkVYX1VTQUdFIiwgKGxvbmcpRVhfVVNBR0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1VTQUdFKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1VTQUdFICovCiAjaWZkZWYgRVhfREFUQUVSUgotICAgIGlmIChpbnMoZCwgIkVYX0RBVEFFUlIiLCAobG9uZylFWF9EQVRBRVJSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9EQVRBRVJSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX0RBVEFFUlIgKi8KICNpZmRlZiBFWF9OT0lOUFVUCi0gICAgaWYgKGlucyhkLCAiRVhfTk9JTlBVVCIsIChsb25nKUVYX05PSU5QVVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PSU5QVVQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9JTlBVVCAqLwogI2lmZGVmIEVYX05PVVNFUgotICAgIGlmIChpbnMoZCwgIkVYX05PVVNFUiIsIChsb25nKUVYX05PVVNFUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9VU0VSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PVVNFUiAqLwogI2lmZGVmIEVYX05PSE9TVAotICAgIGlmIChpbnMoZCwgIkVYX05PSE9TVCIsIChsb25nKUVYX05PSE9TVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9IT1NUKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PSE9TVCAqLwogI2lmZGVmIEVYX1VOQVZBSUxBQkxFCi0gICAgaWYgKGlucyhkLCAiRVhfVU5BVkFJTEFCTEUiLCAobG9uZylFWF9VTkFWQUlMQUJMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfVU5BVkFJTEFCTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfVU5BVkFJTEFCTEUgKi8KICNpZmRlZiBFWF9TT0ZUV0FSRQotICAgIGlmIChpbnMoZCwgIkVYX1NPRlRXQVJFIiwgKGxvbmcpRVhfU09GVFdBUkUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1NPRlRXQVJFKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1NPRlRXQVJFICovCiAjaWZkZWYgRVhfT1NFUlIKLSAgICBpZiAoaW5zKGQsICJFWF9PU0VSUiIsIChsb25nKUVYX09TRVJSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9PU0VSUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9PU0VSUiAqLwogI2lmZGVmIEVYX09TRklMRQotICAgIGlmIChpbnMoZCwgIkVYX09TRklMRSIsIChsb25nKUVYX09TRklMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfT1NGSUxFKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX09TRklMRSAqLwogI2lmZGVmIEVYX0NBTlRDUkVBVAotICAgIGlmIChpbnMoZCwgIkVYX0NBTlRDUkVBVCIsIChsb25nKUVYX0NBTlRDUkVBVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfQ0FOVENSRUFUKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX0NBTlRDUkVBVCAqLwogI2lmZGVmIEVYX0lPRVJSCi0gICAgaWYgKGlucyhkLCAiRVhfSU9FUlIiLCAobG9uZylFWF9JT0VSUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfSU9FUlIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfSU9FUlIgKi8KICNpZmRlZiBFWF9URU1QRkFJTAotICAgIGlmIChpbnMoZCwgIkVYX1RFTVBGQUlMIiwgKGxvbmcpRVhfVEVNUEZBSUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1RFTVBGQUlMKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1RFTVBGQUlMICovCiAjaWZkZWYgRVhfUFJPVE9DT0wKLSAgICBpZiAoaW5zKGQsICJFWF9QUk9UT0NPTCIsIChsb25nKUVYX1BST1RPQ09MKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9QUk9UT0NPTCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9QUk9UT0NPTCAqLwogI2lmZGVmIEVYX05PUEVSTQotICAgIGlmIChpbnMoZCwgIkVYX05PUEVSTSIsIChsb25nKUVYX05PUEVSTSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9QRVJNKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PUEVSTSAqLwogI2lmZGVmIEVYX0NPTkZJRwotICAgIGlmIChpbnMoZCwgIkVYX0NPTkZJRyIsIChsb25nKUVYX0NPTkZJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfQ09ORklHKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX0NPTkZJRyAqLwogI2lmZGVmIEVYX05PVEZPVU5ECi0gICAgaWYgKGlucyhkLCAiRVhfTk9URk9VTkQiLCAobG9uZylFWF9OT1RGT1VORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9URk9VTkQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9URk9VTkQgKi8KIAogICAgIC8qIHN0YXR2ZnMgKi8KICNpZmRlZiBTVF9SRE9OTFkKLSAgICBpZiAoaW5zKGQsICJTVF9SRE9OTFkiLCAobG9uZylTVF9SRE9OTFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX1JET05MWSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBTVF9SRE9OTFkgKi8KICNpZmRlZiBTVF9OT1NVSUQKLSAgICBpZiAoaW5zKGQsICJTVF9OT1NVSUQiLCAobG9uZylTVF9OT1NVSUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX05PU1VJRCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBTVF9OT1NVSUQgKi8KIAogICAgIC8qIEZyZWVCU0Qgc2VuZGZpbGUoKSBjb25zdGFudHMgKi8KICNpZmRlZiBTRl9OT0RJU0tJTwotICAgIGlmIChpbnMoZCwgIlNGX05PRElTS0lPIiwgKGxvbmcpU0ZfTk9ESVNLSU8pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX05PRElTS0lPKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0ZfTU5PV0FJVAotICAgIGlmIChpbnMoZCwgIlNGX01OT1dBSVQiLCAobG9uZylTRl9NTk9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9NTk9XQUlUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0ZfU1lOQwotICAgIGlmIChpbnMoZCwgIlNGX1NZTkMiLCAobG9uZylTRl9TWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9TWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBjb25zdGFudHMgZm9yIHBvc2l4X2ZhZHZpc2UgKi8KICNpZmRlZiBQT1NJWF9GQURWX05PUk1BTAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfTk9STUFMIiwgKGxvbmcpUE9TSVhfRkFEVl9OT1JNQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfTk9STUFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9TRVFVRU5USUFMCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9TRVFVRU5USUFMIiwgKGxvbmcpUE9TSVhfRkFEVl9TRVFVRU5USUFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX1JBTkRPTQotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfUkFORE9NIiwgKGxvbmcpUE9TSVhfRkFEVl9SQU5ET00pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfUkFORE9NKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9OT1JFVVNFCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9OT1JFVVNFIiwgKGxvbmcpUE9TSVhfRkFEVl9OT1JFVVNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX05PUkVVU0UpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX1dJTExORUVECi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9XSUxMTkVFRCIsIChsb25nKVBPU0lYX0ZBRFZfV0lMTE5FRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfV0lMTE5FRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX0RPTlRORUVECi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9ET05UTkVFRCIsIChsb25nKVBPU0lYX0ZBRFZfRE9OVE5FRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfRE9OVE5FRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIGNvbnN0YW50cyBmb3Igd2FpdGlkICovCiAjaWYgZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpICYmIGRlZmluZWQoSEFWRV9XQUlUSUQpCi0gICAgaWYgKGlucyhkLCAiUF9QSUQiLCAobG9uZylQX1BJRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1BHSUQiLCAobG9uZylQX1BHSUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9BTEwiLCAobG9uZylQX0FMTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUF9QSUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBfUEdJRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUF9BTEwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXRVhJVEVECi0gICAgaWYgKGlucyhkLCAiV0VYSVRFRCIsIChsb25nKVdFWElURUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdFWElURUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXTk9XQUlUCi0gICAgaWYgKGlucyhkLCAiV05PV0FJVCIsIChsb25nKVdOT1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdOT1dBSVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXU1RPUFBFRAotICAgIGlmIChpbnMoZCwgIldTVE9QUEVEIiwgKGxvbmcpV1NUT1BQRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdTVE9QUEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX0VYSVRFRAotICAgIGlmIChpbnMoZCwgIkNMRF9FWElURUQiLCAobG9uZylDTERfRVhJVEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfRVhJVEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX0RVTVBFRAotICAgIGlmIChpbnMoZCwgIkNMRF9EVU1QRUQiLCAobG9uZylDTERfRFVNUEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfRFVNUEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX1RSQVBQRUQKLSAgICBpZiAoaW5zKGQsICJDTERfVFJBUFBFRCIsIChsb25nKUNMRF9UUkFQUEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfVFJBUFBFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9DT05USU5VRUQKLSAgICBpZiAoaW5zKGQsICJDTERfQ09OVElOVUVEIiwgKGxvbmcpQ0xEX0NPTlRJTlVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX0NPTlRJTlVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogY29uc3RhbnRzIGZvciBsb2NrZiAqLwogI2lmZGVmIEZfTE9DSwotICAgIGlmIChpbnMoZCwgIkZfTE9DSyIsIChsb25nKUZfTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9MT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9UTE9DSwotICAgIGlmIChpbnMoZCwgIkZfVExPQ0siLCAobG9uZylGX1RMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1RMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9VTE9DSwotICAgIGlmIChpbnMoZCwgIkZfVUxPQ0siLCAobG9uZylGX1VMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1VMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9URVNUCi0gICAgaWYgKGlucyhkLCAiRl9URVNUIiwgKGxvbmcpRl9URVNUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1RFU1QpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU1BBV05WCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoaW5zKGQsICJQX1dBSVQiLCAobG9uZylQX1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1dBSVQiLCAobG9uZylQX05PV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX09WRVJMQVkiLCAobG9uZylQX09WRVJMQVkpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERUJVRyIsIChsb25nKVBfREVCVUcpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9TRVNTSU9OIiwgKGxvbmcpUF9TRVNTSU9OKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVUQUNIIiwgKGxvbmcpUF9ERVRBQ0gpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9QTSIsIChsb25nKVBfUE0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERUZBVUxUIiwgKGxvbmcpUF9ERUZBVUxUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTUlOSU1JWkUiLCAobG9uZylQX01JTklNSVpFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTUFYSU1JWkUiLCAobG9uZylQX01BWElNSVpFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfRlVMTFNDUkVFTiIsIChsb25nKVBfRlVMTFNDUkVFTikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1dJTkRPV0VEIiwgKGxvbmcpUF9XSU5ET1dFRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0ZPUkVHUk9VTkQiLCAobG9uZylQX0ZPUkVHUk9VTkQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9CQUNLR1JPVU5EIiwgKGxvbmcpUF9CQUNLR1JPVU5EKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9DTE9TRSIsIChsb25nKVBfTk9DTE9TRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PU0VTU0lPTiIsIChsb25nKVBfTk9TRVNTSU9OKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfUVVPVEUiLCAobG9uZylQX1FVT1RFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfVElMREUiLCAobG9uZylQX1RJTERFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfVU5SRUxBVEVEIiwgKGxvbmcpUF9VTlJFTEFURUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERUJVR0RFU0MiLCAobG9uZylQX0RFQlVHREVTQykpIHJldHVybiAtMTsKLSNlbHNlCi0gICAgaWYgKGlucyhkLCAiUF9XQUlUIiwgKGxvbmcpX1BfV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PV0FJVCIsIChsb25nKV9QX05PV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX09WRVJMQVkiLCAobG9uZylfT0xEX1BfT1ZFUkxBWSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PV0FJVE8iLCAobG9uZylfUF9OT1dBSVRPKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVUQUNIIiwgKGxvbmcpX1BfREVUQUNIKSkgcmV0dXJuIC0xOwotI2VuZGlmCisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX1dBSVQiLCBfUF9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9OT1dBSVQiLCBfUF9OT1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX09WRVJMQVkiLCBfT0xEX1BfT1ZFUkxBWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfTk9XQUlUTyIsIF9QX05PV0FJVE8pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX0RFVEFDSCIsIF9QX0RFVEFDSCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TQ0hFRF9ICi0gICAgaWYgKGlucyhkLCAiU0NIRURfT1RIRVIiLCAobG9uZylTQ0hFRF9PVEhFUikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9GSUZPIiwgKGxvbmcpU0NIRURfRklGTykpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9SUiIsIChsb25nKVNDSEVEX1JSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9PVEhFUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfRklGTykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfUlIpKSByZXR1cm4gLTE7CiAjaWZkZWYgU0NIRURfU1BPUkFESUMKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9TUE9SQURJQyIsIChsb25nKVNDSEVEX1NQT1JBRElDKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1NQT1JBRElDKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9CQVRDSAotICAgIGlmIChpbnMoZCwgIlNDSEVEX0JBVENIIiwgKGxvbmcpU0NIRURfQkFUQ0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0JBVENIKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfSURMRQotICAgIGlmIChpbnMoZCwgIlNDSEVEX0lETEUiLCAobG9uZylTQ0hFRF9JRExFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9JRExFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfUkVTRVRfT05fRk9SSwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1JFU0VUX09OX0ZPUksiLCAobG9uZylTQ0hFRF9SRVNFVF9PTl9GT1JLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9SRVNFVF9PTl9GT1JLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfU1lTCi0gICAgaWYgKGlucyhkLCAiU0NIRURfU1lTIiwgKGxvbmcpU0NIRURfU1lTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9TWVMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9JQQotICAgIGlmIChpbnMoZCwgIlNDSEVEX0lBIiwgKGxvbmcpU0NIRURfSUEpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0lBKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfRlNTCi0gICAgaWYgKGlucyhkLCAiU0NIRURfRlNTIiwgKGxvbmcpU0NIRURfRlNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9GU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9GWAotICAgIGlmIChpbnMoZCwgIlNDSEVEX0ZYIiwgKGxvbmcpU0NIRURfRlNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NIRURfRlgiLCBTQ0hFRF9GU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgVVNFX1hBVFRSUwotICAgIGlmIChpbnMoZCwgIlhBVFRSX0NSRUFURSIsIChsb25nKVhBVFRSX0NSRUFURSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJYQVRUUl9SRVBMQUNFIiwgKGxvbmcpWEFUVFJfUkVQTEFDRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJYQVRUUl9TSVpFX01BWCIsIChsb25nKVhBVFRSX1NJWkVfTUFYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9DUkVBVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFhBVFRSX1JFUExBQ0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFhBVFRSX1NJWkVfTUFYKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBSVExEX0xBWlkKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9MQVpZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0xBWlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX05PVwotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX05PVykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9OT1cpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX0dMT0JBTAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0dMT0JBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9HTE9CQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX0xPQ0FMCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTE9DQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTE9DQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX05PREVMRVRFCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTk9ERUxFVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9ERUxFVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX05PTE9BRAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX05PTE9BRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9OT0xPQUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX0RFRVBCSU5ECi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfREVFUEJJTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfREVFUEJJTkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgaWYgKGluc2VydHZhbHVlcyhkKSkgcmV0dXJuIC0xOwotI2VuZGlmCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTExOTIxLDEwICsxMTk5Miw2IEBACiAjZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9udAogI2RlZmluZSBNT0ROQU1FICJudCIKIAotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSNkZWZpbmUgSU5JVEZVTkMgUHlJbml0X29zMgotI2RlZmluZSBNT0ROQU1FICJvczIiCi0KICNlbHNlCiAjZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9wb3NpeAogI2RlZmluZSBNT0ROQU1FICJwb3NpeCIKQEAgLTEyMTEyLDE5ICsxMjE3OSwyMyBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICNpZiBkZWZpbmVkKEhBVkVfV0FJVElEKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCiAgICAgICAgIHdhaXRpZF9yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLndhaXRpZF9yZXN1bHQiOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZXYWl0aWRSZXN1bHRUeXBlLCAmd2FpdGlkX3Jlc3VsdF9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZXYWl0aWRSZXN1bHRUeXBlLCAmd2FpdGlkX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICNlbmRpZgogCi0gICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi5zdGF0X3Jlc3VsdCI7CisgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MubmFtZSA9ICJvcy5zdGF0X3Jlc3VsdCI7IC8qIHNlZSBpc3N1ZSAjMTkyMDkgKi8KICAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5maWVsZHNbN10ubmFtZSA9IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkOwogICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLmZpZWxkc1s4XS5uYW1lID0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQ7CiAgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MuZmllbGRzWzldLm5hbWUgPSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZDsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdFJlc3VsdFR5cGUsICZzdGF0X3Jlc3VsdF9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0UmVzdWx0VHlwZSwgJnN0YXRfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBzdHJ1Y3RzZXFfbmV3ID0gU3RhdFJlc3VsdFR5cGUudHBfbmV3OwogICAgICAgICBTdGF0UmVzdWx0VHlwZS50cF9uZXcgPSBzdGF0cmVzdWx0X25ldzsKIAotICAgICAgICBzdGF0dmZzX3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc3RhdHZmc19yZXN1bHQiOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdGF0VkZTUmVzdWx0VHlwZSwgJnN0YXR2ZnNfcmVzdWx0X2Rlc2MpOworICAgICAgICBzdGF0dmZzX3Jlc3VsdF9kZXNjLm5hbWUgPSAib3Muc3RhdHZmc19yZXN1bHQiOyAvKiBzZWUgaXNzdWUgIzE5MjA5ICovCisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RhdFZGU1Jlc3VsdFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhdHZmc19yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAjaWZkZWYgTkVFRF9USUNLU19QRVJfU0VDT05ECiAjICBpZiBkZWZpbmVkKEhBVkVfU1lTQ09ORikgJiYgZGVmaW5lZChfU0NfQ0xLX1RDSykKICAgICAgICAgdGlja3NfcGVyX3NlY29uZCA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOwpAQCAtMTIxMzcsMTIgKzEyMjA4LDE1IEBACiAKICNpZiBkZWZpbmVkKEhBVkVfU0NIRURfU0VUUEFSQU0pIHx8IGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIpCiAgICAgICAgIHNjaGVkX3BhcmFtX2Rlc2MubmFtZSA9IE1PRE5BTUUgIi5zY2hlZF9wYXJhbSI7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlNjaGVkUGFyYW1UeXBlLCAmc2NoZWRfcGFyYW1fZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU2NoZWRQYXJhbVR5cGUsICZzY2hlZF9wYXJhbV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgU2NoZWRQYXJhbVR5cGUudHBfbmV3ID0gc2NoZWRfcGFyYW1fbmV3OwogI2VuZGlmCiAKICAgICAgICAgLyogaW5pdGlhbGl6ZSBUZXJtaW5hbFNpemVfaW5mbyAqLwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZUZXJtaW5hbFNpemVUeXBlLCAmVGVybWluYWxTaXplX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRlcm1pbmFsU2l6ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVGVybWluYWxTaXplX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNpZiBkZWZpbmVkKEhBVkVfV0FJVElEKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZXYWl0aWRSZXN1bHRUeXBlKTsKQEAgLTEyMTYwLDExICsxMjIzNCwxMyBAQAogI2VuZGlmCiAKICAgICB0aW1lc19yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnRpbWVzX3Jlc3VsdCI7Ci0gICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVGltZXNSZXN1bHRUeXBlLCAmdGltZXNfcmVzdWx0X2Rlc2MpOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVGltZXNSZXN1bHRUeXBlLCAmdGltZXNfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJ0aW1lc19yZXN1bHQiLCAoUHlPYmplY3QgKikmVGltZXNSZXN1bHRUeXBlKTsKIAogICAgIHVuYW1lX3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIudW5hbWVfcmVzdWx0IjsKLSAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZVbmFtZVJlc3VsdFR5cGUsICZ1bmFtZV9yZXN1bHRfZGVzYyk7CisgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZVbmFtZVJlc3VsdFR5cGUsICZ1bmFtZV9yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInVuYW1lX3Jlc3VsdCIsIChQeU9iamVjdCAqKSZVbmFtZVJlc3VsdFR5cGUpOwogCiAjaWZkZWYgX19BUFBMRV9fCkBAIC0xMjI0Miw3ICsxMjMxOCw2IEBACiAgICAgaW5pdGlhbGl6ZWQgPSAxOwogCiAgICAgcmV0dXJuIG07Ci0KIH0KIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jIGIvTW9kdWxlcy9wd2Rtb2R1bGUuYwppbmRleCAyODVmZDljLi45OTA5NDAwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKQEAgLTE2OCwxMiArMTY4LDggQEAKICAgICBzdHJ1Y3QgcGFzc3dkICpwOwogICAgIGlmICgoZCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKChwID0gZ2V0cHd1aWQoMCkpICE9IE5VTEwpIHsKLSNlbHNlCiAgICAgc2V0cHdlbnQoKTsKICAgICB3aGlsZSAoKHAgPSBnZXRwd2VudCgpKSAhPSBOVUxMKSB7Ci0jZW5kaWYKICAgICAgICAgUHlPYmplY3QgKnYgPSBta3B3ZW50KHApOwogICAgICAgICBpZiAodiA9PSBOVUxMIHx8IFB5TGlzdF9BcHBlbmQoZCwgdikgIT0gMCkgewogICAgICAgICAgICAgUHlfWERFQ1JFRih2KTsKQEAgLTIyMCw4ICsyMTYsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0UHdkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3B3ZF90eXBlX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFB3ZFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3B3ZF90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpbml0aWFsaXplZCA9IDE7CiAgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikgJlN0cnVjdFB3ZFR5cGUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9weWV4cGF0LmMgYi9Nb2R1bGVzL3B5ZXhwYXQuYwppbmRleCA3ZTUxZDM1Li4xNTZkYmYxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3B5ZXhwYXQuYworKysgYi9Nb2R1bGVzL3B5ZXhwYXQuYwpAQCAtMTAsNiArMTAsOSBAQAogCiAjZGVmaW5lIEZJWF9UUkFDRQogCitzdGF0aWMgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSBFeHBhdE1lbW9yeUhhbmRsZXIgPSB7CisgICAgUHlPYmplY3RfTWFsbG9jLCBQeU9iamVjdF9SZWFsbG9jLCBQeU9iamVjdF9GcmVlfTsKKwogZW51bSBIYW5kbGVyVHlwZXMgewogICAgIFN0YXJ0RWxlbWVudCwKICAgICBFbmRFbGVtZW50LApAQCAtNDA0LDYgKzQwNywxMCBAQAogbXlfQ2hhcmFjdGVyRGF0YUhhbmRsZXIodm9pZCAqdXNlckRhdGEsIGNvbnN0IFhNTF9DaGFyICpkYXRhLCBpbnQgbGVuKQogewogICAgIHhtbHBhcnNlb2JqZWN0ICpzZWxmID0gKHhtbHBhcnNlb2JqZWN0ICopIHVzZXJEYXRhOworCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChzZWxmLT5idWZmZXIgPT0gTlVMTCkKICAgICAgICAgY2FsbF9jaGFyYWN0ZXJfaGFuZGxlcihzZWxmLCBkYXRhLCBsZW4pOwogICAgIGVsc2UgewpAQCAtNDM4LDYgKzQ0NSw5IEBACiAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIsICpydiwgKmFyZ3M7CiAgICAgICAgIGludCBpLCBtYXg7CiAKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKGZsdXNoX2NoYXJhY3Rlcl9idWZmZXIoc2VsZikgPCAwKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvKiBTZXQgbWF4IHRvIHRoZSBudW1iZXIgb2Ygc2xvdHMgZmlsbGVkIGluIGF0dHNbXTsgbWF4LzIgaXMKQEAgLTUyMSw2ICs1MzEsOCBAQAogICAgIElOSVQgXAogXAogICAgIGlmIChoYXZlX2hhbmRsZXIoc2VsZiwgTkFNRSkpIHsgXAorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgXAorICAgICAgICAgICAgcmV0dXJuIFJFVFVSTjsgXAogICAgICAgICBpZiAoZmx1c2hfY2hhcmFjdGVyX2J1ZmZlcihzZWxmKSA8IDApIFwKICAgICAgICAgICAgIHJldHVybiBSRVRVUk47IFwKICAgICAgICAgYXJncyA9IFB5X0J1aWxkVmFsdWUgUEFSQU1fRk9STUFUIDtcCkBAIC02MzUsNiArNjQ3LDkgQEAKICAgICAgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QgKm1vZGVsb2JqLCAqbmFtZW9iajsKIAorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAoZmx1c2hfY2hhcmFjdGVyX2J1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgICAgIG1vZGVsb2JqID0gY29udl9jb250ZW50X21vZGVsKG1vZGVsLCAoY29udl9zdHJpbmdfdG9fdW5pY29kZSkpOwpAQCAtMTAwMiw3ICsxMDE3LDcgQEAKICAgICBQeU9iamVjdF9HQ19UcmFjayhuZXdfcGFyc2VyKTsKIAogICAgIGlmIChzZWxmLT5idWZmZXIgIT0gTlVMTCkgewotICAgICAgICBuZXdfcGFyc2VyLT5idWZmZXIgPSBtYWxsb2MobmV3X3BhcnNlci0+YnVmZmVyX3NpemUpOworICAgICAgICBuZXdfcGFyc2VyLT5idWZmZXIgPSBQeU1lbV9NYWxsb2MobmV3X3BhcnNlci0+YnVmZmVyX3NpemUpOwogICAgICAgICBpZiAobmV3X3BhcnNlci0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdfcGFyc2VyKTsKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTAxOSw3ICsxMDM0LDcgQEAKICAgICBmb3IgKGkgPSAwOyBoYW5kbGVyX2luZm9baV0ubmFtZSAhPSBOVUxMOyBpKyspCiAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi87CiAKLSAgICBuZXdfcGFyc2VyLT5oYW5kbGVycyA9IG1hbGxvYyhzaXplb2YoUHlPYmplY3QgKikgKiBpKTsKKyAgICBuZXdfcGFyc2VyLT5oYW5kbGVycyA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlPYmplY3QgKikgKiBpKTsKICAgICBpZiAoIW5ld19wYXJzZXItPmhhbmRsZXJzKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXdfcGFyc2VyKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMTI3LDE0ICsxMTQyLDE5IEBACiAgICAgdm9pZCAqZGF0YTsKICAgICB1bnNpZ25lZCBpbnQga2luZDsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKKwogICAgIGlmICh0ZW1wbGF0ZV9idWZmZXJbMV0gPT0gMCkgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCiAgICAgICAgICAgICB0ZW1wbGF0ZV9idWZmZXJbaV0gPSBpOwogICAgIH0KIAogICAgIHUgPSBQeVVuaWNvZGVfRGVjb2RlKChjaGFyKikgdGVtcGxhdGVfYnVmZmVyLCAyNTYsIG5hbWUsICJyZXBsYWNlIik7Ci0gICAgaWYgKHUgPT0gTlVMTCB8fCBQeVVuaWNvZGVfUkVBRFkodSkpCisgICAgaWYgKHUgPT0gTlVMTCB8fCBQeVVuaWNvZGVfUkVBRFkodSkpIHsKKyAgICAgICAgUHlfWERFQ1JFRih1KTsKICAgICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisgICAgfQogCiAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHUpICE9IDI1NikgewogICAgICAgICBQeV9ERUNSRUYodSk7CkBAIC0xMTgwLDExICsxMjAwLDE4IEBACiAgICAgc2VsZi0+aW5fY2FsbGJhY2sgPSAwOwogICAgIHNlbGYtPm5zX3ByZWZpeGVzID0gMDsKICAgICBzZWxmLT5oYW5kbGVycyA9IE5VTEw7Ci0gICAgaWYgKG5hbWVzcGFjZV9zZXBhcmF0b3IgIT0gTlVMTCkgewotICAgICAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlTlMoZW5jb2RpbmcsICpuYW1lc3BhY2Vfc2VwYXJhdG9yKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNlbGYtPml0c2VsZiA9IFhNTF9QYXJzZXJDcmVhdGUoZW5jb2RpbmcpOworICAgIHNlbGYtPmludGVybiA9IGludGVybjsKKyAgICBQeV9YSU5DUkVGKHNlbGYtPmludGVybik7CisgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7CisKKyAgICAvKiBuYW1lc3BhY2Vfc2VwYXJhdG9yIGlzIGVpdGhlciBOVUxMIG9yIGNvbnRhaW5zIG9uZSBjaGFyICsgXDAgKi8KKyAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlX01NKGVuY29kaW5nLCAmRXhwYXRNZW1vcnlIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3NlcGFyYXRvcik7CisgICAgaWYgKHNlbGYtPml0c2VsZiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiWE1MX1BhcnNlckNyZWF0ZSBmYWlsZWQiKTsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQogICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQpAQCAtMTE5MywxNSArMTIyMCw2IEBACiAgICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQucHJlZml4KTsKICNlbmRpZgotICAgIHNlbGYtPmludGVybiA9IGludGVybjsKLSAgICBQeV9YSU5DUkVGKHNlbGYtPmludGVybik7Ci0gICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7Ci0gICAgaWYgKHNlbGYtPml0c2VsZiA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiWE1MX1BhcnNlckNyZWF0ZSBmYWlsZWQiKTsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgWE1MX1NldFVzZXJEYXRhKHNlbGYtPml0c2VsZiwgKHZvaWQgKilzZWxmKTsKICAgICBYTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcihzZWxmLT5pdHNlbGYsCiAgICAgICAgICAgICAgICAgICAoWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIpIFB5VW5rbm93bkVuY29kaW5nSGFuZGxlciwgTlVMTCk7CkBAIC0xMjA5LDcgKzEyMjcsNyBAQAogICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykKICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKIAotICAgIHNlbGYtPmhhbmRsZXJzID0gbWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOworICAgIHNlbGYtPmhhbmRsZXJzID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOwogICAgIGlmICghc2VsZi0+aGFuZGxlcnMpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEyMzYsMTEgKzEyNTQsMTEgQEAKICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW2ldID0gTlVMTDsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGVtcCk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZShzZWxmLT5oYW5kbGVycyk7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+aGFuZGxlcnMpOwogICAgICAgICBzZWxmLT5oYW5kbGVycyA9IE5VTEw7CiAgICAgfQogICAgIGlmIChzZWxmLT5idWZmZXIgIT0gTlVMTCkgewotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICB9CiAgICAgUHlfWERFQ1JFRihzZWxmLT5pbnRlcm4pOwpAQCAtMTQ0MCw3ICsxNDU4LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKGIpIHsKICAgICAgICAgICAgIGlmIChzZWxmLT5idWZmZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CisgICAgICAgICAgICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKHNlbGYtPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTQ1MSw3ICsxNDY5LDcgQEAKICAgICAgICAgZWxzZSBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTUxMyw5ICsxNTMxLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBmcmVlIGV4aXN0aW5nIGJ1ZmZlciAqLwotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgIH0KLSAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhuZXdfYnVmZmVyX3NpemUpOworICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19idWZmZXJfc2l6ZSk7CiAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9weXRob24uYyBiL01vZHVsZXMvcHl0aG9uLmMKaW5kZXggZjc4MWQ5YS4uOTgxMWMwMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weXRob24uYworKysgYi9Nb2R1bGVzL3B5dGhvbi5jCkBAIC0yMyw5ICsyMywxMiBAQAogICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyOwogICAgIGludCBpLCByZXM7CiAgICAgY2hhciAqb2xkbG9jOworI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgZnBfZXhjZXB0X3QgbTsKKyNlbmRpZgogCi0gICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqKGFyZ2MrMSkpOwotICAgIGFyZ3ZfY29weTIgPSAod2NoYXJfdCAqKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSooYXJnYysxKSk7CisgICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiAoYXJnYysxKSk7CisgICAgYXJndl9jb3B5MiA9ICh3Y2hhcl90ICoqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogKGFyZ2MrMSkpOwogICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgIHJldHVybiAxOwpAQCAtMzcsMTcgKzQwLDIxIEBACiAgICAgICogZXhjZXB0aW9ucyBieSBkZWZhdWx0LiAgSGVyZSB3ZSBkaXNhYmxlIHRoZW0uCiAgICAgICovCiAjaWZkZWYgX19GcmVlQlNEX18KLSAgICBmcF9leGNlcHRfdCBtOwotCiAgICAgbSA9IGZwZ2V0bWFzaygpOwogICAgIGZwc2V0bWFzayhtICYgfkZQX1hfT0ZMKTsKICNlbmRpZgotICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisKKyAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICBpZiAoIW9sZGxvYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogICAgICAgICBhcmd2X2NvcHlbaV0gPSBfUHlfY2hhcjJ3Y2hhcihhcmd2W2ldLCBOVUxMKTsKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pIHsKLSAgICAgICAgICAgIGZyZWUob2xkbG9jKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgUHl0aG9uIGVycm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAjJWlcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEpOwpAQCAtNTgsMTMgKzY1LDEzIEBACiAgICAgYXJndl9jb3B5MlthcmdjXSA9IGFyZ3ZfY29weVthcmdjXSA9IE5VTEw7CiAKICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOwotICAgIGZyZWUob2xkbG9jKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgcmVzID0gUHlfTWFpbihhcmdjLCBhcmd2X2NvcHkpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyW2ldKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyW2ldKTsKICAgICB9Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkpOwotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5Mik7CisgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkpOworICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5Mik7CiAgICAgcmV0dXJuIHJlczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbGluZS5jIGIvTW9kdWxlcy9yZWFkbGluZS5jCmluZGV4IDA5NmM2ZDEuLmYyNTVhODcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZGxpbmUuYworKysgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKQEAgLTYsNiArNiw3IEBACiAKIC8qIFN0YW5kYXJkIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTc2LDYgKzc3LDU1IEBACiAgICAoc2VlIGlzc3VlICMxNzI4OSBmb3IgdGhlIG1vdGl2YXRpb24pLiAqLwogc3RhdGljIGNoYXIgKmNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnM7CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgUHlPYmplY3QgKmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2s7CisgIFB5T2JqZWN0ICpzdGFydHVwX2hvb2s7CisgIFB5T2JqZWN0ICpwcmVfaW5wdXRfaG9vazsKKyAgUHlPYmplY3QgKmNvbXBsZXRlcjsKKyAgUHlPYmplY3QgKmJlZ2lkeDsKKyAgUHlPYmplY3QgKmVuZGlkeDsKK30gcmVhZGxpbmVzdGF0ZTsKKworCisjZGVmaW5lIHJlYWRsaW5lX3N0YXRlKG8pICgocmVhZGxpbmVzdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG8pKQorCitzdGF0aWMgaW50CityZWFkbGluZV9jbGVhcihQeU9iamVjdCAqbSkKK3sKKyAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+c3RhcnR1cF9ob29rKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGVyKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5iZWdpZHgpOworICAgUHlfQ0xFQVIoc3RhdGUtPmVuZGlkeCk7CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZGxpbmVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5zdGFydHVwX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRlcik7CisgICAgUHlfVklTSVQoc3RhdGUtPmJlZ2lkeCk7CisgICAgUHlfVklTSVQoc3RhdGUtPmVuZGlkeCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkbGluZV9mcmVlKHZvaWQgKm0pCit7CisgICAgcmVhZGxpbmVfY2xlYXIoKFB5T2JqZWN0ICopbSk7Cit9CisKK3N0YXRpYyBQeU1vZHVsZURlZiByZWFkbGluZW1vZHVsZTsKKworI2RlZmluZSByZWFkbGluZXN0YXRlX2dsb2JhbCAoKHJlYWRsaW5lc3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJnJlYWRsaW5lbW9kdWxlKSkpCisKKwogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc2VuZCBvbmUgbGluZSB0byByZWFkbGluZSdzIGluaXQgZmlsZSBwYXJzZXIgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTg2LDEyICsxMzYsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogTWFrZSBhIGNvcHkgLS0gcmxfcGFyc2VfYW5kX2JpbmQoKSBtb2RpZmllcyBpdHMgYXJndW1lbnQgKi8KICAgICAvKiBCZXJuYXJkIEhlcnpvZyAqLwotICAgIGNvcHkgPSBtYWxsb2MoMSArIHN0cmxlbihzKSk7CisgICAgY29weSA9IFB5TWVtX01hbGxvYygxICsgc3RybGVuKHMpKTsKICAgICBpZiAoY29weSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzdHJjcHkoY29weSwgcyk7CiAgICAgcmxfcGFyc2VfYW5kX2JpbmQoY29weSk7Ci0gICAgZnJlZShjb3B5KTsgLyogRnJlZSB0aGUgY29weSAqLworICAgIFB5TWVtX0ZyZWUoY29weSk7IC8qIEZyZWUgdGhlIGNvcHkgKi8KICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMjUyLDIzICszMDIsMjEgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIHRvIHNwZWNpZnkgaG9vayBmdW5jdGlvbnMgaW4gUHl0aG9uICovCiAKLXN0YXRpYyBQeU9iamVjdCAqY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKnN0YXJ0dXBfaG9vayA9IE5VTEw7CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCi1zdGF0aWMgUHlPYmplY3QgKnByZV9pbnB1dF9ob29rID0gTlVMTDsKKwogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IHNldF9ob29rKCJjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIiwKLSAgICAgICAgICAgICAgICAgICAgJmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOworICAgICAgICAgICAgICAgICAgICAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOwogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSwogICAgIC8qIFdlIGNhbm5vdCBzZXQgdGhpcyBob29rIGdsb2JhbGx5LCBzaW5jZSBpdCByZXBsYWNlcyB0aGUKICAgICAgICBkZWZhdWx0IGNvbXBsZXRpb24gZGlzcGxheS4gKi8KICAgICBybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID0KLSAgICAgICAgY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA/CisgICAgICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID8KICNpZiBkZWZpbmVkKF9STF9GVU5DVElPTl9UWVBFREVGKQogICAgICAgICAocmxfY29tcGRpc3BfZnVuY190ICopb25fY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA6IDA7CiAjZWxzZQpAQCAtMjg5LDcgKzMzNyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3N0YXJ0dXBfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHNldF9ob29rKCJzdGFydHVwX2hvb2siLCAmc3RhcnR1cF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInN0YXJ0dXBfaG9vayIsICZyZWFkbGluZXN0YXRlX2dsb2JhbC0+c3RhcnR1cF9ob29rLCBhcmdzKTsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19zZXRfc3RhcnR1cF9ob29rLApAQCAtMzA2LDcgKzM1NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3ByZV9pbnB1dF9ob29rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnByZV9pbnB1dF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vaywgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X3ByZV9pbnB1dF9ob29rLApAQCAtMzIxLDEwICszNjksMTAgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc3BlY2lmeSBhIHdvcmQgY29tcGxldGVyIGluIFB5dGhvbiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKmNvbXBsZXRlciA9IE5VTEw7CiAKLXN0YXRpYyBQeU9iamVjdCAqYmVnaWR4ID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqZW5kaWR4ID0gTlVMTDsKKworCisKIAogCiAvKiBHZXQgdGhlIGNvbXBsZXRpb24gdHlwZSBmb3IgdGhlIHNjb3BlIG9mIHRoZSB0YWItY29tcGxldGlvbiAqLwpAQCAtMzQ0LDggKzM5Miw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2JlZ2lkeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIFB5X0lOQ1JFRihiZWdpZHgpOwotICAgIHJldHVybiBiZWdpZHg7CisgICAgUHlfSU5DUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOworICAgIHJldHVybiByZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4OwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9iZWdpZHgsCkBAIC0zNTgsOCArNDA2LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfZW5kaWR4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmcpCiB7Ci0gICAgUHlfSU5DUkVGKGVuZGlkeCk7Ci0gICAgcmV0dXJuIGVuZGlkeDsKKyAgICBQeV9JTkNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CisgICAgcmV0dXJuIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHg7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2VuZGlkeCwKQEAgLTUyNCw3ICs1NzIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9jb21wbGV0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBzZXRfaG9vaygiY29tcGxldGVyIiwgJmNvbXBsZXRlciwgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJjb21wbGV0ZXIiLCAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X2NvbXBsZXRlciwKQEAgLTUzOCwxMSArNTg2LDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2NvbXBsZXRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKLSAgICBpZiAoY29tcGxldGVyID09IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KLSAgICBQeV9JTkNSRUYoY29tcGxldGVyKTsKLSAgICByZXR1cm4gY29tcGxldGVyOworICAgIFB5X0lOQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyKTsKKyAgICByZXR1cm4gcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlcjsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfY29tcGxldGVyLApAQCAtNzQ2LDkgKzc5NCw2IEBACiAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgaWYgKGZ1bmMgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqcjsKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKLSNlbmRpZgogICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmMsIE5VTEwpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTc2NSw5ICs4MTAsNiBAQAogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBQeV9YREVDUkVGKHIpOwogICAgICAgZG9uZToKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC03NzYsMTQgKzgxOCwzMCBAQAogc3RhdGljIGludAogb25fc3RhcnR1cF9ob29rKHZvaWQpCiB7Ci0gICAgcmV0dXJuIG9uX2hvb2soc3RhcnR1cF9ob29rKTsKKyAgICBpbnQgcjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisgICAgciA9IG9uX2hvb2socmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnN0YXJ0dXBfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCiBzdGF0aWMgaW50CiBvbl9wcmVfaW5wdXRfaG9vayh2b2lkKQogewotICAgIHJldHVybiBvbl9ob29rKHByZV9pbnB1dF9ob29rKTsKKyAgICBpbnQgcjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisgICAgciA9IG9uX2hvb2socmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnByZV9pbnB1dF9ob29rKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcjsKIH0KICNlbmRpZgogCkBAIC04MTAsNyArODY4LDcgQEAKICAgICAgICAgaWYgKFB5TGlzdF9TZXRJdGVtKG0sIGksIHMpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLAorICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic09pIiwgbWF0Y2hlc1swXSwgbSwgbWF4X2xlbmd0aCk7CiAKICAgICBQeV9ERUNSRUYobSk7IG09TlVMTDsKQEAgLTg0MCwxMyArODk4LDEzIEBACiBvbl9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGF0ZSkKIHsKICAgICBjaGFyICpyZXN1bHQgPSBOVUxMOwotICAgIGlmIChjb21wbGV0ZXIgIT0gTlVMTCkgeworICAgIGlmIChyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKnI7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKICAgICAgICAgcmxfYXR0ZW1wdGVkX2NvbXBsZXRpb25fb3ZlciA9IDE7Ci0gICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY29tcGxldGVyLCAic2kiLCB0ZXh0LCBzdGF0ZSk7CisgICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgInNpIiwgdGV4dCwgc3RhdGUpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKHIgPT0gUHlfTm9uZSkgewpAQCAtODc5LDI0ICs5MzcsMzIgQEAKIHN0YXRpYyBjaGFyICoqCiBmbGV4X2NvbXBsZXRlKGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIHsKKyAgICBjaGFyICoqcmVzdWx0OworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisjZW5kaWYKICNpZmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fQVBQRU5EX0NIQVJBQ1RFUgogICAgIHJsX2NvbXBsZXRpb25fYXBwZW5kX2NoYXJhY3RlciA9J1wwJzsKICNlbmRpZgogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9TVVBQUkVTU19BUFBFTkQKICAgICBybF9jb21wbGV0aW9uX3N1cHByZXNzX2FwcGVuZCA9IDA7CiAjZW5kaWYKLSAgICBQeV9YREVDUkVGKGJlZ2lkeCk7Ci0gICAgUHlfWERFQ1JFRihlbmRpZHgpOwotICAgIGJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3RhcnQpOwotICAgIGVuZGlkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgZW5kKTsKLSAgICByZXR1cm4gY29tcGxldGlvbl9tYXRjaGVzKHRleHQsICpvbl9jb21wbGV0aW9uKTsKKyAgICBQeV9YREVDUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOworICAgIFB5X1hERUNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CisgICAgcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3RhcnQpOworICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIGVuZCk7CisgICAgcmVzdWx0ID0gY29tcGxldGlvbl9tYXRjaGVzKHRleHQsICpvbl9jb21wbGV0aW9uKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKIC8qIEhlbHBlciB0byBpbml0aWFsaXplIEdOVSByZWFkbGluZSBwcm9wZXJseS4gKi8KIAogc3RhdGljIHZvaWQKLXNldHVwX3JlYWRsaW5lKHZvaWQpCitzZXR1cF9yZWFkbGluZShyZWFkbGluZXN0YXRlICptb2Rfc3RhdGUpCiB7CiAjaWZkZWYgU0FWRV9MT0NBTEUKICAgICBjaGFyICpzYXZlZF9sb2NhbGUgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKSk7CkBAIC05MjYsMTAgKzk5Miw2IEBACiAgICAgdXNpbmdfaGlzdG9yeSgpOwogCiAgICAgcmxfcmVhZGxpbmVfbmFtZSA9ICJweXRob24iOwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgLyogQWxsb3cgJGlmIHRlcm09IGluIC5pbnB1dHJjIHRvIHdvcmsgKi8KLSAgICBybF90ZXJtaW5hbF9uYW1lID0gZ2V0ZW52KCJURVJNIik7Ci0jZW5kaWYKICAgICAvKiBGb3JjZSByZWJpbmQgb2YgVEFCIHRvIGluc2VydC10YWIgKi8KICAgICBybF9iaW5kX2tleSgnXHQnLCBybF9pbnNlcnQpOwogICAgIC8qIEJpbmQgYm90aCBFU0MtVEFCIGFuZCBFU0MtRVNDIHRvIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uICovCkBAIC05NDgsOCArMTAxMCw4IEBACiAgICAgICAgIHN0cmR1cCgiIFx0XG5gfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsPD4vPyIpOwogICAgICAgICAvKiBBbGwgbm9uYWxwaGFudW1zIGV4Y2VwdCAnLicgKi8KIAotICAgIGJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7Ci0gICAgZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKKyAgICBtb2Rfc3RhdGUtPmJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgbW9kX3N0YXRlLT5lbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOwogICAgIC8qIEluaXRpYWxpemUgKGFsbG93cyAuaW5wdXRyYyB0byBvdmVycmlkZSkKICAgICAgKgogICAgICAqIFhYWDogQSBidWcgaW4gdGhlIHJlYWRsaW5lLTIuMiBsaWJyYXJ5IGNhdXNlcyBhIG1lbW9yeSBsZWFrCkBAIC05ODEsNyArMTA0Myw3IEBACiBleHRlcm4gUHlUaHJlYWRTdGF0ZSogX1B5T1NfUmVhZGxpbmVUU3RhdGU7CiAKIHN0YXRpYyBjaGFyICoKLXJlYWRsaW5lX3VudGlsX2VudGVyX29yX3NpZ25hbChjaGFyICpwcm9tcHQsIGludCAqc2lnbmFsKQorcmVhZGxpbmVfdW50aWxfZW50ZXJfb3Jfc2lnbmFsKGNvbnN0IGNoYXIgKnByb21wdCwgaW50ICpzaWduYWwpCiB7CiAgICAgY2hhciAqIG5vdF9kb25lX3JlYWRpbmcgPSAiIjsKICAgICBmZF9zZXQgc2VsZWN0c2V0OwpAQCAtMTA4Myw3ICsxMTQ1LDcgQEAKIAogCiBzdGF0aWMgY2hhciAqCi1jYWxsX3JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorY2FsbF9yZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNvbnN0IGNoYXIgKnByb21wdCkKIHsKICAgICBzaXplX3QgbjsKICAgICBjaGFyICpwLCAqcTsKQEAgLTExMTQsNyArMTE3Niw3IEBACiAKICAgICAvKiBXZSBnb3QgYW4gRU9GLCByZXR1cm4gYSBlbXB0eSBzdHJpbmcuICovCiAgICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICBwID0gUHlNZW1fTWFsbG9jKDEpOworICAgICAgICBwID0gUHlNZW1fUmF3TWFsbG9jKDEpOwogICAgICAgICBpZiAocCAhPSBOVUxMKQogICAgICAgICAgICAgKnAgPSAnXDAnOwogICAgICAgICBSRVNUT1JFX0xPQ0FMRShzYXZlZF9sb2NhbGUpCkBAIC0xMTQyLDcgKzEyMDQsNyBAQAogICAgIC8qIENvcHkgdGhlIG1hbGxvYydlZCBidWZmZXIgaW50byBhIFB5TWVtX01hbGxvYydlZCBvbmUgYW5kCiAgICAgICAgcmVsZWFzZSB0aGUgb3JpZ2luYWwuICovCiAgICAgcSA9IHA7Ci0gICAgcCA9IFB5TWVtX01hbGxvYyhuKzIpOworICAgIHAgPSBQeU1lbV9SYXdNYWxsb2MobisyKTsKICAgICBpZiAocCAhPSBOVUxMKSB7CiAgICAgICAgIHN0cm5jcHkocCwgcSwgbik7CiAgICAgICAgIHBbbl0gPSAnXG4nOwpAQCAtMTE2OCwxMiArMTIzMCwxMiBAQAogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAicmVhZGxpbmUiLAogICAgIGRvY19tb2R1bGUsCi0gICAgLTEsCisgICAgc2l6ZW9mKHJlYWRsaW5lc3RhdGUpLAogICAgIHJlYWRsaW5lX21ldGhvZHMsCiAgICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAorICAgIHJlYWRsaW5lX3RyYXZlcnNlLAorICAgIHJlYWRsaW5lX2NsZWFyLAorICAgIHJlYWRsaW5lX2ZyZWUKIH07CiAKIApAQCAtMTE4MSw2ICsxMjQzLDcgQEAKIFB5SW5pdF9yZWFkbGluZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptOworICAgIHJlYWRsaW5lc3RhdGUgKm1vZF9zdGF0ZTsKIAogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmIChzdHJuY21wKHJsX2xpYnJhcnlfdmVyc2lvbiwgbGliZWRpdF92ZXJzaW9uX3RhZywgc3RybGVuKGxpYmVkaXRfdmVyc2lvbl90YWcpKSA9PSAwKSB7CkBAIC0xMTk3LDcgKzEyNjAsOCBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbW9kX3N0YXRlID0gKHJlYWRsaW5lc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUobSk7CiAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9IGNhbGxfcmVhZGxpbmU7Ci0gICAgc2V0dXBfcmVhZGxpbmUoKTsKKyAgICBzZXR1cF9yZWFkbGluZShtb2Rfc3RhdGUpOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZXNvdXJjZS5jIGIvTW9kdWxlcy9yZXNvdXJjZS5jCmluZGV4IGIyOTRhOGMuLmMxMmNlMzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVzb3VyY2UuYworKysgYi9Nb2R1bGVzL3Jlc291cmNlLmMKQEAgLTEwNiw2ICsxMDYsNDQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50CitweTJybGltaXQoUHlPYmplY3QgKmN1cm9iaiwgUHlPYmplY3QgKm1heG9iaiwgc3RydWN0IHJsaW1pdCAqcmxfb3V0KQoreworI2lmICFkZWZpbmVkKEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQpCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZyhtYXhvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICAvKiBUaGUgbGltaXRzIGFyZSBwcm9iYWJseSBiaWdnZXIgdGhhbiBhIGxvbmcgKi8KKyAgICBybF9vdXQtPnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZ0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZ0xvbmcobWF4b2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IHJsX291dC0+cmxpbV9jdXIgJiBSTElNX0lORklOSVRZOworICAgIHJsX291dC0+cmxpbV9tYXggPSBybF9vdXQtPnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKKyAgICByZXR1cm4gMDsKKworfQorCitzdGF0aWMgUHlPYmplY3QqCitybGltaXQycHkoc3RydWN0IHJsaW1pdCBybCkKK3sKKyNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgogcmVzb3VyY2VfZ2V0cmxpbWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTEyNiwxNSArMTY0LDcgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KLSNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQotICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworICAgIHJldHVybiBybGltaXQycHkocmwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTY2LDI1ICsxOTYsMTAgQEAKICAgICBjdXJvYmogPSBQeVR1cGxlX0dFVF9JVEVNKGxpbWl0cywgMCk7CiAgICAgbWF4b2JqID0gUHlUdXBsZV9HRVRfSVRFTShsaW1pdHMsIDEpOwogCi0jaWYgIWRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKLSAgICBybC5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKLSAgICBpZiAocmwucmxpbV9jdXIgPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgIGlmIChweTJybGltaXQoY3Vyb2JqLCBtYXhvYmosICZybCkgPCAwKSB7CiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nKG1heG9iaik7Ci0gICAgaWYgKHJsLnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSNlbHNlCi0gICAgLyogVGhlIGxpbWl0cyBhcmUgcHJvYmFibHkgYmlnZ2VyIHRoYW4gYSBsb25nICovCi0gICAgcmwucmxpbV9jdXIgPSBQeUxvbmdfQXNMb25nTG9uZyhjdXJvYmopOwotICAgIGlmIChybC5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nTG9uZyhtYXhvYmopOwotICAgIGlmIChybC5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0jZW5kaWYKKyAgICB9CiAKLSAgICBybC5ybGltX2N1ciA9IHJsLnJsaW1fY3VyICYgUkxJTV9JTkZJTklUWTsKLSAgICBybC5ybGltX21heCA9IHJsLnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKICAgICBpZiAoc2V0cmxpbWl0KHJlc291cmNlLCAmcmwpID09IC0xKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTIwNSw2ICsyMjAsNDggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorI2lmZGVmIEhBVkVfUFJMSU1JVAorc3RhdGljIFB5T2JqZWN0ICoKK3Jlc291cmNlX3BybGltaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHN0cnVjdCBybGltaXQgb2xkX2xpbWl0LCBuZXdfbGltaXQ7CisgICAgaW50IHJlc291cmNlLCByZXR2YWw7CisgICAgcGlkX3QgcGlkOworICAgIFB5T2JqZWN0ICpjdXJvYmo9TlVMTCwgKm1heG9iaj1OVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIml8KE9PKTpwcmxpbWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpZCwgJnJlc291cmNlLCAmY3Vyb2JqLCAmbWF4b2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAocmVzb3VyY2UgPCAwIHx8IHJlc291cmNlID49IFJMSU1fTkxJTUlUUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHJlc291cmNlIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoY3Vyb2JqICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHB5MnJsaW1pdChjdXJvYmosIG1heG9iaiwgJm5ld19saW1pdCkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSBwcmxpbWl0KHBpZCwgcmVzb3VyY2UsICZuZXdfbGltaXQsICZvbGRfbGltaXQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dmFsID0gcHJsaW1pdChwaWQsIHJlc291cmNlLCBOVUxMLCAmb2xkX2xpbWl0KTsKKyAgICB9CisKKyAgICBpZiAocmV0dmFsID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50IGxpbWl0IGV4Y2VlZHMgbWF4aW11bSBsaW1pdCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmxpbWl0MnB5KG9sZF9saW1pdCk7Cit9CisjZW5kaWYgLyogSEFWRV9QUkxJTUlUICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiByZXNvdXJjZV9nZXRwYWdlc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKQEAgLTIyOSw2ICsyODYsOSBAQAogcmVzb3VyY2VfbWV0aG9kc1tdID0gewogICAgIHsiZ2V0cnVzYWdlIiwgICAgcmVzb3VyY2VfZ2V0cnVzYWdlLCAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRybGltaXQiLCAgICByZXNvdXJjZV9nZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKKyNpZmRlZiBIQVZFX1BSTElNSVQKKyAgICB7InBybGltaXQiLCAgICAgIHJlc291cmNlX3BybGltaXQsICAgICBNRVRIX1ZBUkFSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRybGltaXQiLCAgICByZXNvdXJjZV9zZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldHBhZ2VzaXplIiwgIHJlc291cmNlX2dldHBhZ2VzaXplLCBNRVRIX05PQVJHU30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtMjYzLDgwICszMjMsMTA1IEBACiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KICAgICBQeV9JTkNSRUYoUHlFeGNfT1NFcnJvcik7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFB5RXhjX09TRXJyb3IpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFJVc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9ydXNhZ2VfZGVzYyk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFJVc2FnZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3J1c2FnZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBQeV9JTkNSRUYoJlN0cnVjdFJVc2FnZVR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3J1c2FnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCopICZTdHJ1Y3RSVXNhZ2VUeXBlKTsKIAogICAgIC8qIGluc2VydCBjb25zdGFudHMgKi8KICNpZmRlZiBSTElNSVRfQ1BVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9DUFUiLCBSTElNSVRfQ1BVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ1BVKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0ZTSVpFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9GU0laRSIsIFJMSU1JVF9GU0laRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0ZTSVpFKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0RBVEEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0RBVEEiLCBSTElNSVRfREFUQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0RBVEEpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfU1RBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NUQUNLIiwgUkxJTUlUX1NUQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU1RBQ0spOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfQ09SRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQ09SRSIsIFJMSU1JVF9DT1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ09SRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9OT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05PRklMRSIsIFJMSU1JVF9OT0ZJTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX09GSUxFIiwgUkxJTUlUX09GSUxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfVk1FTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfVk1FTSIsIFJMSU1JVF9WTUVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfVk1FTSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9BUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQVMiLCBSTElNSVRfQVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9BUyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9SU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1JTUyIsIFJMSU1JVF9SU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SU1MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTlBST0MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05QUk9DIiwgUkxJTUlUX05QUk9DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTlBST0MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTUVNTE9DSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTUVNTE9DSyIsIFJMSU1JVF9NRU1MT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTUVNTE9DSyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9TQlNJWkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NCU0laRSIsIFJMSU1JVF9TQlNJWkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TQlNJWkUpOwogI2VuZGlmCiAKKy8qIExpbnV4IHNwZWNpZmljICovCisjaWZkZWYgUkxJTUlUX01TR1FVRVVFCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX01TR1FVRVVFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX05JQ0UKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTklDRSk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9SVFBSSU8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfUlRQUklPKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX1JUVElNRQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SVFRJTUUpOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfU0lHUEVORElORworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TSUdQRU5ESU5HKTsKKyNlbmRpZgorCisvKiB0YXJnZXQgKi8KICNpZmRlZiBSVVNBR0VfU0VMRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfU0VMRiIsIFJVU0FHRV9TRUxGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVVNBR0VfU0VMRik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9DSElMRFJFTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfQ0hJTERSRU4iLCBSVVNBR0VfQ0hJTERSRU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9DSElMRFJFTik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9CT1RICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9CT1RIIiwgUlVTQUdFX0JPVEgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9CT1RIKTsKICNlbmRpZgogCiAjaWZkZWYgUlVTQUdFX1RIUkVBRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfVEhSRUFEIiwgUlVTQUdFX1RIUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX1RIUkVBRCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jIGIvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYwppbmRleCA2MDNhMmI2Li42MjkxYTJkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKQEAgLTQ3LDExICs0Nyw2IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8dXRpbHMuaD4KLSNlbmRpZgotCiAjaWZkZWYgTVNfV0lORE9XUwogIyAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KICMgIGluY2x1ZGUgPHdpbnNvY2suaD4KQEAgLTMwNCw5ICsyOTksOSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXQgPSBQeVR1cGxlX1BhY2soMywgaWZkbGlzdCwgb2ZkbGlzdCwgZWZkbGlzdCk7CiAKLSAgICAgICAgUHlfREVDUkVGKGlmZGxpc3QpOwotICAgICAgICBQeV9ERUNSRUYob2ZkbGlzdCk7Ci0gICAgICAgIFB5X0RFQ1JFRihlZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihpZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihvZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihlZmRsaXN0KTsKICAgICB9CiAKICAgZmluYWxseToKQEAgLTY4OSw2ICs2ODQsMTMgQEAKIAogc3RhdGljIFB5VHlwZU9iamVjdCBkZXZwb2xsX1R5cGU7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkZXZwb2xsX2Vycl9jbG9zZWQodm9pZCkKK3sKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGRldnBvbGwgb2JqZWN0Iik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgZGV2cG9sbF9mbHVzaChkZXZwb2xsT2JqZWN0ICpzZWxmKQogewogICAgIGludCBzaXplLCBuOwpAQCAtNzI5LDYgKzczMSw5IEBACiAgICAgUHlPYmplY3QgKm87CiAgICAgaW50IGZkLCBldmVudHMgPSBQT0xMSU4gfCBQT0xMUFJJIHwgUE9MTE9VVDsKIAorICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgcmV0dXJuIGRldnBvbGxfZXJyX2Nsb3NlZCgpOworCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfGk6cmVnaXN0ZXIiLCAmbywgJmV2ZW50cykpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNzkzLDYgKzc5OCw5IEBACiB7CiAgICAgaW50IGZkOwogCisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisKICAgICBmZCA9IFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IoIG8gKTsKICAgICBpZiAoZmQgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODIyLDYgKzgzMCw5IEBACiAgICAgbG9uZyB0aW1lb3V0OwogICAgIFB5T2JqZWN0ICp2YWx1ZSwgKm51bTEsICpudW0yOwogCisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJwb2xsIiwgMCwgMSwgJnRvdXQpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTkwMCw2ICs5MTEsNjAgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGludAorZGV2cG9sbF9pbnRlcm5hbF9jbG9zZShkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGludCBzYXZlX2Vycm5vID0gMDsKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA+PSAwKSB7CisgICAgICAgIGludCBmZCA9IHNlbGYtPmZkX2RldnBvbGw7CisgICAgICAgIHNlbGYtPmZkX2RldnBvbGwgPSAtMTsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoY2xvc2UoZmQpIDwgMCkKKyAgICAgICAgICAgIHNhdmVfZXJybm8gPSBlcnJubzsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9CisgICAgcmV0dXJuIHNhdmVfZXJybm87Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfY2xvc2UoZGV2cG9sbE9iamVjdCAqc2VsZikKK3sKKyAgICBlcnJubyA9IGRldnBvbGxfaW50ZXJuYWxfY2xvc2Uoc2VsZik7CisgICAgaWYgKGVycm5vIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGRldnBvbGxfY2xvc2VfZG9jLAorImNsb3NlKCkgLT4gTm9uZVxuXAorXG5cCitDbG9zZSB0aGUgZGV2cG9sbCBmaWxlIGRlc2NyaXB0b3IuIEZ1cnRoZXIgb3BlcmF0aW9ucyBvbiB0aGUgZGV2cG9sbFxuXAorb2JqZWN0IHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitkZXZwb2xsX2dldF9jbG9zZWQoZGV2cG9sbE9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIFB5X1JFVFVSTl9UUlVFOworICAgIGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOworfQorCitzdGF0aWMgUHlPYmplY3QqCitkZXZwb2xsX2ZpbGVubyhkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgcmV0dXJuIGRldnBvbGxfZXJyX2Nsb3NlZCgpOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+ZmRfZGV2cG9sbCk7Cit9CisKK1B5RG9jX1NUUlZBUihkZXZwb2xsX2ZpbGVub19kb2MsCisiZmlsZW5vKCkgLT4gaW50XG5cCitcblwKK1JldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yLiIpOworCiBzdGF0aWMgUHlNZXRob2REZWYgZGV2cG9sbF9tZXRob2RzW10gPSB7CiAgICAgeyJyZWdpc3RlciIsICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9yZWdpc3RlciwKICAgICAgTUVUSF9WQVJBUkdTLCAgZGV2cG9sbF9yZWdpc3Rlcl9kb2N9LApAQCAtOTA5LDkgKzk3NCwxOSBAQAogICAgICBNRVRIX08sICAgICAgICBkZXZwb2xsX3VucmVnaXN0ZXJfZG9jfSwKICAgICB7InBvbGwiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX3BvbGwsCiAgICAgIE1FVEhfVkFSQVJHUywgIGRldnBvbGxfcG9sbF9kb2N9LAorICAgIHsiY2xvc2UiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfY2xvc2UsICAgIE1FVEhfTk9BUkdTLAorICAgICBkZXZwb2xsX2Nsb3NlX2RvY30sCisgICAgeyJmaWxlbm8iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9maWxlbm8sICAgIE1FVEhfTk9BUkdTLAorICAgICBkZXZwb2xsX2ZpbGVub19kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCitzdGF0aWMgUHlHZXRTZXREZWYgZGV2cG9sbF9nZXRzZXRsaXN0W10gPSB7CisgICAgeyJjbG9zZWQiLCAoZ2V0dGVyKWRldnBvbGxfZ2V0X2Nsb3NlZCwgTlVMTCwKKyAgICAgIlRydWUgaWYgdGhlIGRldnBvbGwgb2JqZWN0IGlzIGNsb3NlZCJ9LAorICAgIHswfSwKK307CisKIHN0YXRpYyBkZXZwb2xsT2JqZWN0ICoKIG5ld0RldlBvbGxPYmplY3Qodm9pZCkKIHsKQEAgLTkyOSw3ICsxMDA0LDcgQEAKICAgICAqLwogICAgIGxpbWl0X3Jlc3VsdCA9IGdldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmbGltaXQpOwogICAgIGlmIChsaW1pdF9yZXN1bHQgIT0gLTEpCi0gICAgICAgIGZkX2RldnBvbGwgPSBvcGVuKCIvZGV2L3BvbGwiLCBPX1JEV1IpOworICAgICAgICBmZF9kZXZwb2xsID0gX1B5X29wZW4oIi9kZXYvcG9sbCIsIE9fUkRXUik7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChsaW1pdF9yZXN1bHQgPT0gLTEpIHsKQEAgLTk2NSwxMiArMTA0MCw4IEBACiBzdGF0aWMgdm9pZAogZGV2cG9sbF9kZWFsbG9jKGRldnBvbGxPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGNsb3NlKHNlbGYtPmZkX2RldnBvbGwpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KKyAgICAodm9pZClkZXZwb2xsX2ludGVybmFsX2Nsb3NlKHNlbGYpOwogICAgIFB5TWVtX0RFTChzZWxmLT5mZHMpOwotCiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCkBAIC0xMDA2LDYgKzEwNzcsOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICBkZXZwb2xsX21ldGhvZHMsICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGRldnBvbGxfZ2V0c2V0bGlzdCwgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KIH07CiAjZW5kaWYgIC8qIEhBVkVfU1lTX0RFVlBPTExfSCAqLwogCkBAIC0xMDg5LDcgKzExNjIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHB5ZXBvbGxfZXJyX2Nsb3NlZCh2b2lkKQogewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZXBvbGwgZmQiKTsKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGVwb2xsIG9iamVjdCIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMTIxLDYgKzExOTQsNyBAQAogICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZkZWYgSEFWRV9FUE9MTF9DUkVBVEUxCisgICAgICAgIGZsYWdzIHw9IEVQT0xMX0NMT0VYRUM7CiAgICAgICAgIGlmIChmbGFncykKICAgICAgICAgICAgIHNlbGYtPmVwZmQgPSBlcG9sbF9jcmVhdGUxKGZsYWdzKTsKICAgICAgICAgZWxzZQpAQCAtMTEzNiw2ICsxMjEwLDE0IEBACiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisjaWZuZGVmIEhBVkVfRVBPTExfQ1JFQVRFMQorICAgIGlmIChmZCA9PSAtMSAmJiBfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmVwZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKQEAgLTEzNzcsNyArMTQ1OSw2IEBACiAKICAgICBldnMgPSBQeU1lbV9OZXcoc3RydWN0IGVwb2xsX2V2ZW50LCBtYXhldmVudHMpOwogICAgIGlmIChldnMgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE0MTYsNiArMTQ5NywyNCBAQAogaW4gc2Vjb25kcyAoYXMgZmxvYXQpLiAtMSBtYWtlcyBwb2xsIHdhaXQgaW5kZWZpbml0ZWx5LlxuXAogVXAgdG8gbWF4ZXZlbnRzIGFyZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiIpOwogCitzdGF0aWMgUHlPYmplY3QgKgorcHllcG9sbF9lbnRlcihweUVwb2xsX09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaWYgKHNlbGYtPmVwZmQgPCAwKQorICAgICAgICByZXR1cm4gcHllcG9sbF9lcnJfY2xvc2VkKCk7CisKKyAgICBQeV9JTkNSRUYoc2VsZik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitweWVwb2xsX2V4aXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKworICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYsICZQeUlkX2Nsb3NlLCBOVUxMKTsKK30KKwogc3RhdGljIFB5TWV0aG9kRGVmIHB5ZXBvbGxfbWV0aG9kc1tdID0gewogICAgIHsiZnJvbWZkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfZnJvbWZkLAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0NMQVNTLCBweWVwb2xsX2Zyb21mZF9kb2N9LApAQCAtMTQzMSw2ICsxNTMwLDEwIEBACiAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsICAgICAgcHllcG9sbF91bnJlZ2lzdGVyX2RvY30sCiAgICAgeyJwb2xsIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcHllcG9sbF9wb2xsLAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgIHB5ZXBvbGxfcG9sbF9kb2N9LAorICAgIHsiX19lbnRlcl9fIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2VudGVyLCAgICAgTUVUSF9OT0FSR1MsCisgICAgIE5VTEx9LAorICAgIHsiX19leGl0X18iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfZXhpdCwgICAgIE1FVEhfVkFSQVJHUywKKyAgICAgTlVMTH0sCiAgICAge05VTEwsICAgICAgTlVMTH0sCiB9OwogCkBAIC0xNzU5LDcgKzE4NjIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGtxdWV1ZV9xdWV1ZV9lcnJfY2xvc2VkKHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBrcXVldWUgZmQiKTsKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGtxdWV1ZSBvYmplY3QiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTgwMSwxMyArMTkwNCwxOSBAQAogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzZWxmLT5rcWZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgoga3F1ZXVlX3F1ZXVlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLQogICAgIGlmICgoYXJncyAhPSBOVUxMICYmIFB5T2JqZWN0X1NpemUoYXJncykpIHx8CiAgICAgICAgICAgICAgICAgICAgIChrd2RzICE9IE5VTEwgJiYgUHlPYmplY3RfU2l6ZShrd2RzKSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC0yMTc5LDcgKzIyODgsNyBAQAogI3VuZGVmIFBJUEVfQlVGCiAjZGVmaW5lIFBJUEVfQlVGIDUxMgogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJUEVfQlVGIiwgUElQRV9CVUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJUEVfQlVGKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX1BPTEwpICYmICFkZWZpbmVkKEhBVkVfQlJPS0VOX1BPTEwpCkBAIC0yMTk0LDI3ICsyMzAzLDI3IEBACiAjZW5kaWYKICAgICAgICAgaWYgKFB5VHlwZV9SZWFkeSgmcG9sbF9UeXBlKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExJTiIsIFBPTExJTik7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMUFJJIiwgUE9MTFBSSSk7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMT1VUIiwgUE9MTE9VVCk7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMRVJSIiwgUE9MTEVSUik7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMSFVQIiwgUE9MTEhVUCk7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMTlZBTCIsIFBPTExOVkFMKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTElOKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFBSSSk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExPVVQpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMRVJSKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTEhVUCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExOVkFMKTsKIAogI2lmZGVmIFBPTExSRE5PUk0KLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExSRE5PUk0iLCBQT0xMUkROT1JNKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFJETk9STSk7CiAjZW5kaWYKICNpZmRlZiBQT0xMUkRCQU5ECi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMUkRCQU5EIiwgUE9MTFJEQkFORCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExSREJBTkQpOwogI2VuZGlmCiAjaWZkZWYgUE9MTFdSTk9STQotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFdSTk9STSIsIFBPTExXUk5PUk0pOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMV1JOT1JNKTsKICNlbmRpZgogI2lmZGVmIFBPTExXUkJBTkQKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExXUkJBTkQiLCBQT0xMV1JCQU5EKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFdSQkFORCk7CiAjZW5kaWYKICNpZmRlZiBQT0xMTVNHCi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMTVNHIiwgUE9MTE1TRyk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExNU0cpOwogI2VuZGlmCiAgICAgfQogI2VuZGlmIC8qIEhBVkVfUE9MTCAqLwpAQCAtMjIzMiwyNSArMjM0MSwyNSBAQAogICAgIFB5X0lOQ1JFRigmcHlFcG9sbF9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVwb2xsIiwgKFB5T2JqZWN0ICopICZweUVwb2xsX1R5cGUpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMSU4iLCBFUE9MTElOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExPVVQiLCBFUE9MTE9VVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMUFJJIiwgRVBPTExQUkkpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTEVSUiIsIEVQT0xMRVJSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExIVVAiLCBFUE9MTEhVUCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMRVQiLCBFUE9MTEVUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTElOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTE9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExQUkkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTEhVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExFVCk7CiAjaWZkZWYgRVBPTExPTkVTSE9UCiAgICAgLyogS2VybmVsIDIuNi4yKyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTE9ORVNIT1QiLCBFUE9MTE9ORVNIT1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMT05FU0hPVCk7CiAjZW5kaWYKICAgICAvKiBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExfUkRIVVAiLCBFUE9MTFJESFVQKTsgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExSRE5PUk0iLCBFUE9MTFJETk9STSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMUkRCQU5EIiwgRVBPTExSREJBTkQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFdSTk9STSIsIEVQT0xMV1JOT1JNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExXUkJBTkQiLCBFUE9MTFdSQkFORCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMTVNHIiwgRVBPTExNU0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMUkROT1JNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFJEQkFORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExXUk5PUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMV1JCQU5EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTE1TRyk7CiAKICNpZmRlZiBFUE9MTF9DTE9FWEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMX0NMT0VYRUMiLCBFUE9MTF9DTE9FWEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTF9DTE9FWEVDKTsKICNlbmRpZgogI2VuZGlmIC8qIEhBVkVfRVBPTEwgKi8KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGExbW9kdWxlLmMgYi9Nb2R1bGVzL3NoYTFtb2R1bGUuYwppbmRleCBkMGYzMThkLi5iNDRmZTE4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTFtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTFtb2R1bGUuYwpAQCAtOTIsMTAgKzkyLDYgQEAKICAgICAgKHkpWzRdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjI0KSYyNTUpOyAoeSlbNV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MTYpJjI1NSk7ICAgICBcCiAgICAgICh5KVs2XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj44KSYyNTUpOyAoeSlbN10gPSAodW5zaWduZWQgY2hhcikoKHgpJjI1NSk7IH0KIAotI2lmbmRlZiBNSU4KLSAgICNkZWZpbmUgTUlOKHgsIHkpICggKCh4KTwoeSkpPyh4KTooeSkgKQotI2VuZGlmCi0KIAogLyogU0hBMSBtYWNyb3MgKi8KIApAQCAtMjIwLDkgKzIxNiw5IEBACiAgICAgICAgICAgIGluICAgICAgICAgICAgICs9IFNIQTFfQkxPQ0tTSVpFOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBTSEExX0JMT0NLU0laRTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgbiA9IE1JTihpbmxlbiwgKFB5X3NzaXplX3QpKFNIQTFfQkxPQ0tTSVpFIC0gc2hhMS0+Y3VybGVuKSk7CisgICAgICAgICAgIG4gPSBQeV9NSU4oaW5sZW4sIChQeV9zc2l6ZV90KShTSEExX0JMT0NLU0laRSAtIHNoYTEtPmN1cmxlbikpOwogICAgICAgICAgICBtZW1jcHkoc2hhMS0+YnVmICsgc2hhMS0+Y3VybGVuLCBpbiwgKHNpemVfdCluKTsKLSAgICAgICAgICAgc2hhMS0+Y3VybGVuICAgKz0gbjsKKyAgICAgICAgICAgc2hhMS0+Y3VybGVuICAgKz0gKFNIQTFfSU5UMzIpbjsKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gbjsKICAgICAgICAgICAgaW5sZW4gICAgICAgICAgLT0gbjsKICAgICAgICAgICAgaWYgKHNoYTEtPmN1cmxlbiA9PSBTSEExX0JMT0NLU0laRSkgewpAQCAtNDE1LDcgKzQxMSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogU0hBMV9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEExIiwgNCk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhMSIsIDQpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTQ4LDggKzU0NCwxNyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fc2hhMSh2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmU0hBMXR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTF0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9zaGExbW9kdWxlKTsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9zaGExbW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBMXR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMVR5cGUiLCAoUHlPYmplY3QgKikmU0hBMXR5cGUpOworICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYyBiL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKaW5kZXggOWY2YjQxNi4uYjA1YmZjMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCkBAIC0yMSwxMyArMjEsNiBAQAogI2luY2x1ZGUgImhhc2hsaWIuaCIKIAogCi0vKiBFbmRpYW5uZXNzIHRlc3RpbmcgYW5kIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFRlc3RFbmRpYW5uZXNzKHZhcmlhYmxlKSB7aW50IGk9MTsgdmFyaWFibGU9UENUX0JJR19FTkRJQU47XAotICAgICAgICBpZiAoKigoY2hhciopJmkpPT0xKSB2YXJpYWJsZT1QQ1RfTElUVExFX0VORElBTjt9Ci0KLSNkZWZpbmUgUENUX0xJVFRMRV9FTkRJQU4gMQotI2RlZmluZSBQQ1RfQklHX0VORElBTiAwCi0KIC8qIFNvbWUgdXNlZnVsIHR5cGVzICovCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBTSEFfQllURTsKQEAgLTUwLDcgKzQzLDYgQEAKICAgICBTSEFfSU5UMzIgZGlnZXN0WzhdOyAgICAgICAgICAgICAgICAvKiBNZXNzYWdlIGRpZ2VzdCAqLwogICAgIFNIQV9JTlQzMiBjb3VudF9sbywgY291bnRfaGk7ICAgICAgIC8qIDY0LWJpdCBiaXQgY291bnQgKi8KICAgICBTSEFfQllURSBkYXRhW1NIQV9CTE9DS1NJWkVdOyAgICAgICAvKiBTSEEgZGF0YSBidWZmZXIgKi8KLSAgICBpbnQgRW5kaWFubmVzczsKICAgICBpbnQgbG9jYWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bnByb2Nlc3NlZCBhbW91bnQgaW4gZGF0YSAqLwogICAgIGludCBkaWdlc3RzaXplOwogfSBTSEFvYmplY3Q7CkBAIC01OCwxMyArNTAsMTEgQEAKIC8qIFdoZW4gcnVuIG9uIGEgbGl0dGxlLWVuZGlhbiBDUFUgd2UgbmVlZCB0byBwZXJmb3JtIGJ5dGUgcmV2ZXJzYWwgb24gYW4KICAgIGFycmF5IG9mIGxvbmd3b3Jkcy4gKi8KIAotc3RhdGljIHZvaWQgbG9uZ1JldmVyc2UoU0hBX0lOVDMyICpidWZmZXIsIGludCBieXRlQ291bnQsIGludCBFbmRpYW5uZXNzKQorI2lmIFBZX0xJVFRMRV9FTkRJQU4KK3N0YXRpYyB2b2lkIGxvbmdSZXZlcnNlKFNIQV9JTlQzMiAqYnVmZmVyLCBpbnQgYnl0ZUNvdW50KQogewogICAgIFNIQV9JTlQzMiB2YWx1ZTsKIAotICAgIGlmICggRW5kaWFubmVzcyA9PSBQQ1RfQklHX0VORElBTiApCi0gICAgICAgIHJldHVybjsKLQogICAgIGJ5dGVDb3VudCAvPSBzaXplb2YoKmJ1ZmZlcik7CiAgICAgd2hpbGUgKGJ5dGVDb3VudC0tKSB7CiAgICAgICAgIHZhbHVlID0gKmJ1ZmZlcjsKQEAgLTczLDEwICs2MywxMCBAQAogICAgICAgICAqYnVmZmVyKysgPSAoIHZhbHVlIDw8IDE2ICkgfCAoIHZhbHVlID4+IDE2ICk7CiAgICAgfQogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIFNIQWNvcHkoU0hBb2JqZWN0ICpzcmMsIFNIQW9iamVjdCAqZGVzdCkKIHsKLSAgICBkZXN0LT5FbmRpYW5uZXNzID0gc3JjLT5FbmRpYW5uZXNzOwogICAgIGRlc3QtPmxvY2FsID0gc3JjLT5sb2NhbDsKICAgICBkZXN0LT5kaWdlc3RzaXplID0gc3JjLT5kaWdlc3RzaXplOwogICAgIGRlc3QtPmNvdW50X2xvID0gc3JjLT5jb3VudF9sbzsKQEAgLTEzMSw3ICsxMjEsOSBAQAogICAgICAgICBTSEFfSU5UMzIgU1s4XSwgV1s2NF0sIHQwLCB0MTsKIAogICAgIG1lbWNweShXLCBzaGFfaW5mby0+ZGF0YSwgc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSk7Ci0gICAgbG9uZ1JldmVyc2UoVywgKGludClzaXplb2Yoc2hhX2luZm8tPmRhdGEpLCBzaGFfaW5mby0+RW5kaWFubmVzcyk7CisjaWYgUFlfTElUVExFX0VORElBTgorICAgIGxvbmdSZXZlcnNlKFcsIChpbnQpc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSk7CisjZW5kaWYKIAogICAgIGZvciAoaSA9IDE2OyBpIDwgNjQ7ICsraSkgewogICAgICAgICAgICAgICAgIFdbaV0gPSBHYW1tYTEoV1tpIC0gMl0pICsgV1tpIC0gN10gKyBHYW1tYTAoV1tpIC0gMTVdKSArIFdbaSAtIDE2XTsKQEAgLTIyOCw3ICsyMjAsNiBAQAogc3RhdGljIHZvaWQKIHNoYV9pbml0KFNIQW9iamVjdCAqc2hhX2luZm8pCiB7Ci0gICAgVGVzdEVuZGlhbm5lc3Moc2hhX2luZm8tPkVuZGlhbm5lc3MpCiAgICAgc2hhX2luZm8tPmRpZ2VzdFswXSA9IDB4NkEwOUU2NjdMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMV0gPSAweEJCNjdBRTg1TDsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzJdID0gMHgzQzZFRjM3Mkw7CkBAIC0yNDYsNyArMjM3LDYgQEAKIHN0YXRpYyB2b2lkCiBzaGEyMjRfaW5pdChTSEFvYmplY3QgKnNoYV9pbmZvKQogewotICAgIFRlc3RFbmRpYW5uZXNzKHNoYV9pbmZvLT5FbmRpYW5uZXNzKQogICAgIHNoYV9pbmZvLT5kaWdlc3RbMF0gPSAweGMxMDU5ZWQ4TDsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzFdID0gMHgzNjdjZDUwN0w7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsyXSA9IDB4MzA3MGRkMTdMOwpAQCAtMjg0LDcgKzI3NCw3IEBACiAgICAgICAgIG1lbWNweSgoKFNIQV9CWVRFICopIHNoYV9pbmZvLT5kYXRhKSArIHNoYV9pbmZvLT5sb2NhbCwgYnVmZmVyLCBpKTsKICAgICAgICAgY291bnQgLT0gaTsKICAgICAgICAgYnVmZmVyICs9IGk7Ci0gICAgICAgIHNoYV9pbmZvLT5sb2NhbCArPSBpOworICAgICAgICBzaGFfaW5mby0+bG9jYWwgKz0gKGludClpOwogICAgICAgICBpZiAoc2hhX2luZm8tPmxvY2FsID09IFNIQV9CTE9DS1NJWkUpIHsKICAgICAgICAgICAgIHNoYV90cmFuc2Zvcm0oc2hhX2luZm8pOwogICAgICAgICB9CkBAIC0yOTksNyArMjg5LDcgQEAKICAgICAgICAgc2hhX3RyYW5zZm9ybShzaGFfaW5mbyk7CiAgICAgfQogICAgIG1lbWNweShzaGFfaW5mby0+ZGF0YSwgYnVmZmVyLCBjb3VudCk7Ci0gICAgc2hhX2luZm8tPmxvY2FsID0gY291bnQ7CisgICAgc2hhX2luZm8tPmxvY2FsID0gKGludCljb3VudDsKIH0KIAogLyogZmluaXNoIGNvbXB1dGluZyB0aGUgU0hBIGRpZ2VzdCAqLwpAQCAtNTExLDkgKzUwMSw5IEBACiBTSEEyNTZfZ2V0X25hbWUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7CiAgICAgaWYgKCgoU0hBb2JqZWN0ICopc2VsZiktPmRpZ2VzdHNpemUgPT0gMzIpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTI1NiIsIDYpOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGEyNTYiLCA2KTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTIyNCIsIDYpOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGEyMjQiLCA2KTsKIH0KIAogc3RhdGljIFB5R2V0U2V0RGVmIFNIQV9nZXRzZXRlcnNbXSA9IHsKQEAgLTcxNiwxMSArNzA2LDIzIEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19zaGEyNTYodm9pZCkKIHsKKyAgICBQeU9iamVjdCAqbTsKKwogICAgIFB5X1RZUEUoJlNIQTIyNHR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTIyNHR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfVFlQRSgmU0hBMjU2dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMjU2dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhMjU2bW9kdWxlKTsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9zaGEyNTZtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEEyMjR0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNIQTIyNFR5cGUiLCAoUHlPYmplY3QgKikmU0hBMjI0dHlwZSk7CisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEEyNTZ0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNIQTI1NlR5cGUiLCAoUHlPYmplY3QgKikmU0hBMjU2dHlwZSk7CisgICAgcmV0dXJuIG07CisKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvc2hhNTEybW9kdWxlLmMgYi9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCmluZGV4IDU1MzZmZDUuLjQ3YzU3ZTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYwpAQCAtMjIsMTMgKzIyLDYgQEAKIAogI2lmZGVmIFBZX0xPTkdfTE9ORyAvKiBJZiBubyBQWV9MT05HX0xPTkcsIGRvbid0IGNvbXBpbGUgYW55dGhpbmchICovCiAKLS8qIEVuZGlhbm5lc3MgdGVzdGluZyBhbmQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgVGVzdEVuZGlhbm5lc3ModmFyaWFibGUpIHtpbnQgaT0xOyB2YXJpYWJsZT1QQ1RfQklHX0VORElBTjtcCi0gICAgICAgIGlmICgqKChjaGFyKikmaSk9PTEpIHZhcmlhYmxlPVBDVF9MSVRUTEVfRU5ESUFOO30KLQotI2RlZmluZSBQQ1RfTElUVExFX0VORElBTiAxCi0jZGVmaW5lIFBDVF9CSUdfRU5ESUFOIDAKLQogLyogU29tZSB1c2VmdWwgdHlwZXMgKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFNIQV9CWVRFOwpAQCAtNTIsNyArNDUsNiBAQAogICAgIFNIQV9JTlQ2NCBkaWdlc3RbOF07ICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZGlnZXN0ICovCiAgICAgU0hBX0lOVDMyIGNvdW50X2xvLCBjb3VudF9oaTsgICAgICAgLyogNjQtYml0IGJpdCBjb3VudCAqLwogICAgIFNIQV9CWVRFIGRhdGFbU0hBX0JMT0NLU0laRV07ICAgICAgIC8qIFNIQSBkYXRhIGJ1ZmZlciAqLwotICAgIGludCBFbmRpYW5uZXNzOwogICAgIGludCBsb2NhbDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVucHJvY2Vzc2VkIGFtb3VudCBpbiBkYXRhICovCiAgICAgaW50IGRpZ2VzdHNpemU7CiB9IFNIQW9iamVjdDsKQEAgLTYwLDEzICs1MiwxMSBAQAogLyogV2hlbiBydW4gb24gYSBsaXR0bGUtZW5kaWFuIENQVSB3ZSBuZWVkIHRvIHBlcmZvcm0gYnl0ZSByZXZlcnNhbCBvbiBhbgogICAgYXJyYXkgb2YgbG9uZ3dvcmRzLiAqLwogCi1zdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UNjQgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCwgaW50IEVuZGlhbm5lc3MpCisjaWYgUFlfTElUVExFX0VORElBTgorc3RhdGljIHZvaWQgbG9uZ1JldmVyc2UoU0hBX0lOVDY0ICpidWZmZXIsIGludCBieXRlQ291bnQpCiB7CiAgICAgU0hBX0lOVDY0IHZhbHVlOwogCi0gICAgaWYgKCBFbmRpYW5uZXNzID09IFBDVF9CSUdfRU5ESUFOICkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYnl0ZUNvdW50IC89IHNpemVvZigqYnVmZmVyKTsKICAgICB3aGlsZSAoYnl0ZUNvdW50LS0pIHsKICAgICAgICAgdmFsdWUgPSAqYnVmZmVyOwpAQCAtODMsMTAgKzczLDEwIEBACiAgICAgICAgICAgICAgICAgYnVmZmVyKys7CiAgICAgfQogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIFNIQWNvcHkoU0hBb2JqZWN0ICpzcmMsIFNIQW9iamVjdCAqZGVzdCkKIHsKLSAgICBkZXN0LT5FbmRpYW5uZXNzID0gc3JjLT5FbmRpYW5uZXNzOwogICAgIGRlc3QtPmxvY2FsID0gc3JjLT5sb2NhbDsKICAgICBkZXN0LT5kaWdlc3RzaXplID0gc3JjLT5kaWdlc3RzaXplOwogICAgIGRlc3QtPmNvdW50X2xvID0gc3JjLT5jb3VudF9sbzsKQEAgLTE0MSw3ICsxMzEsOSBAQAogICAgIFNIQV9JTlQ2NCBTWzhdLCBXWzgwXSwgdDAsIHQxOwogCiAgICAgbWVtY3B5KFcsIHNoYV9pbmZvLT5kYXRhLCBzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKLSAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSksIHNoYV9pbmZvLT5FbmRpYW5uZXNzKTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgbG9uZ1JldmVyc2UoVywgKGludClzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKKyNlbmRpZgogCiAgICAgZm9yIChpID0gMTY7IGkgPCA4MDsgKytpKSB7CiAgICAgICAgICAgICAgICAgV1tpXSA9IEdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIEdhbW1hMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdOwpAQCAtMjU0LDcgKzI0Niw2IEBACiBzdGF0aWMgdm9pZAogc2hhNTEyX2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gUHlfVUxMKDB4NmEwOWU2NjdmM2JjYzkwOCk7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IFB5X1VMTCgweGJiNjdhZTg1ODRjYWE3M2IpOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSBQeV9VTEwoMHgzYzZlZjM3MmZlOTRmODJiKTsKQEAgLTI3Miw3ICsyNjMsNiBAQAogc3RhdGljIHZvaWQKIHNoYTM4NF9pbml0KFNIQW9iamVjdCAqc2hhX2luZm8pCiB7Ci0gICAgVGVzdEVuZGlhbm5lc3Moc2hhX2luZm8tPkVuZGlhbm5lc3MpCiAgICAgc2hhX2luZm8tPmRpZ2VzdFswXSA9IFB5X1VMTCgweGNiYmI5ZDVkYzEwNTllZDgpOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMV0gPSBQeV9VTEwoMHg2MjlhMjkyYTM2N2NkNTA3KTsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzJdID0gUHlfVUxMKDB4OTE1OTAxNWEzMDcwZGQxNyk7CkBAIC0zMTAsNyArMzAwLDcgQEAKICAgICAgICAgbWVtY3B5KCgoU0hBX0JZVEUgKikgc2hhX2luZm8tPmRhdGEpICsgc2hhX2luZm8tPmxvY2FsLCBidWZmZXIsIGkpOwogICAgICAgICBjb3VudCAtPSBpOwogICAgICAgICBidWZmZXIgKz0gaTsKLSAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IGk7CisgICAgICAgIHNoYV9pbmZvLT5sb2NhbCArPSAoaW50KWk7CiAgICAgICAgIGlmIChzaGFfaW5mby0+bG9jYWwgPT0gU0hBX0JMT0NLU0laRSkgewogICAgICAgICAgICAgc2hhNTEyX3RyYW5zZm9ybShzaGFfaW5mbyk7CiAgICAgICAgIH0KQEAgLTMyNSw3ICszMTUsNyBAQAogICAgICAgICBzaGE1MTJfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICB9CiAgICAgbWVtY3B5KHNoYV9pbmZvLT5kYXRhLCBidWZmZXIsIGNvdW50KTsKLSAgICBzaGFfaW5mby0+bG9jYWwgPSBjb3VudDsKKyAgICBzaGFfaW5mby0+bG9jYWwgPSAoaW50KWNvdW50OwogfQogCiAvKiBmaW5pc2ggY29tcHV0aW5nIHRoZSBTSEEgZGlnZXN0ICovCkBAIC01NzcsOSArNTY3LDkgQEAKIFNIQTUxMl9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKICAgICBpZiAoKChTSEFvYmplY3QgKilzZWxmKS0+ZGlnZXN0c2l6ZSA9PSA2NCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBNTEyIiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTUxMiIsIDYpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMzg0IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTM4NCIsIDYpOwogfQogCiBzdGF0aWMgUHlHZXRTZXREZWYgU0hBX2dldHNldGVyc1tdID0gewpAQCAtNzgyLDEzICs3NzIsMjQgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3NoYTUxMih2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmU0hBMzg0dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMzg0dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9UWVBFKCZTSEE1MTJ0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEE1MTJ0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9zaGE1MTJtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTUxMm1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTM4NHR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMzg0VHlwZSIsIChQeU9iamVjdCAqKSZTSEEzODR0eXBlKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTUxMnR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBNTEyVHlwZSIsIChQeU9iamVjdCAqKSZTSEE1MTJ0eXBlKTsKKyAgICByZXR1cm4gbTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jIGIvTW9kdWxlcy9zaWduYWxtb2R1bGUuYwppbmRleCBmYmUxYmI3Li45YTBlOGUzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKQEAgLTksNyArOSw3IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLSNpbmNsdWRlIDxXaW5kb3dzLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgogI2lmZGVmIEhBVkVfUFJPQ0VTU19ICiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2VuZGlmCkBAIC0zNywxMSArMzcsNiBAQAogI2RlZmluZSBTSUdfRVJSICgoUHlPU19zaWdoYW5kbGVyX3QpKC0xKSkKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIE5TSUcgMTIKLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jZW5kaWYKLQogI2lmbmRlZiBOU0lHCiAjIGlmIGRlZmluZWQoX05TSUcpCiAjICBkZWZpbmUgTlNJRyBfTlNJRyAgICAgICAgICAgIC8qIEZvciBCU0QvU3lzViAqLwpAQCAtNzgsMTAgKzczLDYgQEAKICAgIGEgd29ya2luZyBpbXBsZW1lbnRhdGlvbiB0aGF0IHdvcmtzIGluIGFsbCB0aHJlZSBjYXNlcyAtLSB0aGUKICAgIGhhbmRsZXIgaWdub3JlcyBzaWduYWxzIGlmIGdldHBpZCgpIGlzbid0IHRoZSBzYW1lIGFzIGluIHRoZSBtYWluCiAgICB0aHJlYWQuICBYWFggVGhpcyBpcyBhIGhhY2suCi0KLSAgIEdOVSBwdGggaXMgYSB1c2VyLXNwYWNlIHRocmVhZGluZyBsaWJyYXJ5LCBhbmQgYXMgc3VjaCwgYWxsIHRocmVhZHMKLSAgIHJ1biB3aXRoaW4gdGhlIHNhbWUgcHJvY2Vzcy4gSW4gdGhpcyBjYXNlLCBpZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcKLSAgIHRocmVhZCBpcyBub3QgdGhlIG1haW5fdGhyZWFkLCBzZW5kIHRoZSBzaWduYWwgdG8gdGhlIG1haW5fdGhyZWFkLgogKi8KIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0xODAsMTUgKzE3MSwzMSBAQAogICAgIHJldHVybiBQeUVycl9DaGVja1NpZ25hbHMoKTsKIH0KIAorc3RhdGljIGludAorcmVwb3J0X3dha2V1cF9lcnJvcih2b2lkICpkYXRhKQoreworICAgIGludCBzYXZlX2Vycm5vID0gZXJybm87CisgICAgZXJybm8gPSAoaW50KSAoUHlfaW50cHRyX3QpIGRhdGE7CisgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJFeGNlcHRpb24gaWdub3JlZCB3aGVuIHRyeWluZyB0byB3cml0ZSB0byB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwgd2FrZXVwIGZkOlxuIik7CisgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOworICAgIGVycm5vID0gc2F2ZV9lcnJubzsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQKIHRyaXBfc2lnbmFsKGludCBzaWdfbnVtKQogewogICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKyAgICBpbnQgcmMgPSAwOwogCiAgICAgSGFuZGxlcnNbc2lnX251bV0udHJpcHBlZCA9IDE7CiAgICAgaWYgKHdha2V1cF9mZCAhPSAtMSkgewogICAgICAgICBieXRlID0gKHVuc2lnbmVkIGNoYXIpc2lnX251bTsKLSAgICAgICAgd3JpdGUod2FrZXVwX2ZkLCAmYnl0ZSwgMSk7CisgICAgICAgIHdoaWxlICgocmMgPSB3cml0ZSh3YWtldXBfZmQsICZieXRlLCAxKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgICBpZiAocmMgPT0gLTEpCisgICAgICAgICAgICBQeV9BZGRQZW5kaW5nQ2FsbChyZXBvcnRfd2FrZXVwX2Vycm9yLCAodm9pZCAqKSAoUHlfaW50cHRyX3QpIGVycm5vKTsKICAgICB9CiAgICAgaWYgKGlzX3RyaXBwZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTIwMywxMyArMjEwLDYgQEAKIHsKICAgICBpbnQgc2F2ZV9lcnJubyA9IGVycm5vOwogCi0jaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChXSVRIX1BUSCkKLSAgICBpZiAoUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpICE9IG1haW5fdGhyZWFkKSB7Ci0gICAgICAgIHB0aF9yYWlzZSgqKHB0aF90ICopIG1haW5fdGhyZWFkLCBzaWdfbnVtKTsKLSAgICB9Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgLyogU2VlIE5PVEVTIHNlY3Rpb24gYWJvdmUgKi8KICAgICBpZiAoZ2V0cGlkKCkgPT0gbWFpbl9waWQpCkBAIC0yMzEsNyArMjMxLDYgQEAKICAgICAgKiBtYWtlcyB0aGlzIHRydWUuICBTZWUgYWxzbyBpc3N1ZTgzNTQuICovCiAgICAgUHlPU19zZXRzaWcoc2lnX251bSwgc2lnbmFsX2hhbmRsZXIpOwogI2VuZGlmCi0gICAgfQogCiAgICAgLyogSXNzdWUgIzEwMzExOiBhc3luY2hyb25vdXNseSBleGVjdXRpbmcgc2lnbmFsIGhhbmRsZXJzIHNob3VsZCBub3QKICAgICAgICBtdXRhdGUgZXJybm8gdW5kZXIgdGhlIGZlZXQgb2YgdW5zdXNwZWN0aW5nIEMgY29kZS4gKi8KQEAgLTk4Myw5ICs5ODIsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICNpZiBkZWZpbmVkKEhBVkVfU0lHV0FJVElORk8pIHx8IGRlZmluZWQoSEFWRV9TSUdUSU1FRFdBSVQpCi0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU2lnaW5mb1R5cGUsICZzdHJ1Y3Rfc2lnaW5mb19kZXNjKTsKLQorICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTaWdpbmZvVHlwZSwgJnN0cnVjdF9zaWdpbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJlNpZ2luZm9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInN0cnVjdF9zaWdpbmZvIiwgKFB5T2JqZWN0KikgJlNpZ2luZm9UeXBlKTsKICAgICBpbml0aWFsaXplZCA9IDE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwppbmRleCAzYmRkYWE1Li4wMzk2YmY0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogTW9kdWxlIGludGVyZmFjZToKIAotLSBzb2NrZXQuZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIHNvY2tldCBzcGVjaWZpYyBlcnJvcnMKKy0gc29ja2V0LmVycm9yOiBleGNlcHRpb24gcmFpc2VkIGZvciBzb2NrZXQgc3BlY2lmaWMgZXJyb3JzLCBhbGlhcyBmb3IgT1NFcnJvcgogLSBzb2NrZXQuZ2FpZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIGdldGFkZHJpbmZvL2dldG5hbWVpbmZvIGVycm9ycywKICAgICBhIHN1YmNsYXNzIG9mIHNvY2tldC5lcnJvcgogLSBzb2NrZXQuaGVycm9yOiBleGNlcHRpb24gcmFpc2VkIGZvciBnZXRob3N0YnkqIGVycm9ycywKQEAgLTk1LDE4ICs5NSwxNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotCiAvKiBTb2NrZXQgb2JqZWN0IGRvY3VtZW50YXRpb24gKi8KIFB5RG9jX1NUUlZBUihzb2NrX2RvYywKLSJzb2NrZXQoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkgLT4gc29ja2V0IG9iamVjdFxuXAorInNvY2tldChmYW1pbHk9QUZfSU5FVCwgdHlwZT1TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmlsZW5vPU5vbmUpIC0+IHNvY2tldCBvYmplY3RcblwKIFxuXAogT3BlbiBhIHNvY2tldCBvZiB0aGUgZ2l2ZW4gdHlwZS4gIFRoZSBmYW1pbHkgYXJndW1lbnQgc3BlY2lmaWVzIHRoZVxuXAogYWRkcmVzcyBmYW1pbHk7IGl0IGRlZmF1bHRzIHRvIEFGX0lORVQuICBUaGUgdHlwZSBhcmd1bWVudCBzcGVjaWZpZXNcblwKIHdoZXRoZXIgdGhpcyBpcyBhIHN0cmVhbSAoU09DS19TVFJFQU0sIHRoaXMgaXMgdGhlIGRlZmF1bHQpXG5cCiBvciBkYXRhZ3JhbSAoU09DS19ER1JBTSkgc29ja2V0LiAgVGhlIHByb3RvY29sIGFyZ3VtZW50IGRlZmF1bHRzIHRvIDAsXG5cCiBzcGVjaWZ5aW5nIHRoZSBkZWZhdWx0IHByb3RvY29sLiAgS2V5d29yZCBhcmd1bWVudHMgYXJlIGFjY2VwdGVkLlxuXAorVGhlIHNvY2tldCBpcyBjcmVhdGVkIGFzIG5vbi1pbmhlcml0YWJsZS5cblwKIFxuXAogQSBzb2NrZXQgb2JqZWN0IHJlcHJlc2VudHMgb25lIGVuZHBvaW50IG9mIGEgbmV0d29yayBjb25uZWN0aW9uLlxuXAogXG5cCkBAIC0xMTcsNyArMTE1LDcgQEAKIGNsb3NlKCkgLS0gY2xvc2UgdGhlIHNvY2tldFxuXAogY29ubmVjdChhZGRyKSAtLSBjb25uZWN0IHRoZSBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzc1xuXAogY29ubmVjdF9leChhZGRyKSAtLSBjb25uZWN0LCByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIGFuIGV4Y2VwdGlvblxuXAotX2R1cCgpIC0tIHJldHVybiBhIG5ldyBzb2NrZXQgZmQgZHVwbGljYXRlZCBmcm9tIGZpbGVubygpXG5cCitkdXAoKSAtLSByZXR1cm4gYSBuZXcgc29ja2V0IGZkIGR1cGxpY2F0ZWQgZnJvbSBmaWxlbm8oKVxuXAogZmlsZW5vKCkgLS0gcmV0dXJuIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yXG5cCiBnZXRwZWVybmFtZSgpIC0tIHJldHVybiByZW1vdGUgYWRkcmVzcyBbKl1cblwKIGdldHNvY2tuYW1lKCkgLS0gcmV0dXJuIGxvY2FsIGFkZHJlc3NcblwKQEAgLTIyMywxMyArMjIxLDYgQEAKICNlbmRpZgogCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotIyBkZWZpbmUgIElOQ0xfRE9TCi0jIGRlZmluZSAgSU5DTF9ET1NFUlJPUlMKLSMgZGVmaW5lICBJTkNMX05PUE1BUEkKLSMgaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19zZ2kpICYmIF9DT01QSUxFUl9WRVJTSU9OPjcwMCAmJiAhX1NHSUFQSQogLyogbWFrZSBzdXJlIHRoYXQgdGhlIHJlZW50cmFudCAoZ2V0aG9zdGJ5YWRkcl9yIGV0YykKICAgIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgY29ycmVjdGx5IGlmIGNvbXBpbGluZyB3aXRoCkBAIC0yODYsMTIgKzI3Nyw3IEBACiAjIGluY2x1ZGUgPHVuaXN0ZC5oPgogCiAvKiBIZWFkZXJzIG5lZWRlZCBmb3IgaW5ldF9udG9hKCkgYW5kIGluZXRfYWRkcigpICovCi0jIGlmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19WQUNQUCkKLSMgIGluY2x1ZGUgPG5ldGRiLmg+Ci10eXBlZGVmIHNpemVfdCBzb2NrbGVuX3Q7Ci0jIGVsc2UKICMgICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSMgZW5kaWYKIAogIyAgaW5jbHVkZSA8ZmNudGwuaD4KIApAQCAtMzcxLDIyICszNTcsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCi0vKiBPbiBXaW5kb3dzIGEgc29ja2V0IGlzIHJlYWxseSBhIGhhbmRsZSBub3QgYW4gZmQgKi8KLXN0YXRpYyBTT0NLRVQKLWR1cF9zb2NrZXQoU09DS0VUIGhhbmRsZSkKLXsKLSAgICBXU0FQUk9UT0NPTF9JTkZPIGluZm87Ci0KLSAgICBpZiAoV1NBRHVwbGljYXRlU29ja2V0KGhhbmRsZSwgR2V0Q3VycmVudFByb2Nlc3NJZCgpLCAmaW5mbykpCi0gICAgICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVDsKLQotICAgIHJldHVybiBXU0FTb2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLCBGUk9NX1BST1RPQ09MX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICBGUk9NX1BST1RPQ09MX0lORk8sICZpbmZvLCAwLCBXU0FfRkxBR19PVkVSTEFQUEVEKTsKLX0KICNkZWZpbmUgU09DS0VUQ0xPU0UgY2xvc2Vzb2NrZXQKLSNlbHNlCi0vKiBPbiBVbml4IHdlIGNhbiB1c2UgZHVwIHRvIGR1cGxpY2F0ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEgc29ja2V0Ki8KLSNkZWZpbmUgZHVwX3NvY2tldChmZCkgZHVwKGZkKQogI2VuZGlmCiAKICNpZmRlZiBNU19XSU4zMgpAQCAtMzk1LDExICszNjYsNiBAQAogI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIFNPQ0tFVENMT1NFIHNvY2xvc2UKLSNkZWZpbmUgTk9fRFVQIC8qIFNvY2tldHMgYXJlIE5vdCBBY3R1YWwgRmlsZSBIYW5kbGVzIHVuZGVyIE9TLzIgKi8KLSNlbmRpZgotCiAjaWZuZGVmIFNPQ0tFVENMT1NFCiAjZGVmaW5lIFNPQ0tFVENMT1NFIGNsb3NlCiAjZW5kaWYKQEAgLTQ1OSw2ICs0MjUsMTAgQEAKICNkZWZpbmUgSU5WQUxJRF9TT0NLRVQgKC0xKQogI2VuZGlmCiAKKyNpZm5kZWYgSU5BRERSX05PTkUKKyNkZWZpbmUgSU5BRERSX05PTkUgKC0xKQorI2VuZGlmCisKIC8qIFhYWCBUaGVyZSdzIGEgcHJvYmxlbSBoZXJlOiAqc3RhdGljKiBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3NlZCB0byBoYXZlCiAgICBhIFB5IHByZWZpeCAob3IgdXNlIENhcGl0YWxpemVkV29yZHMpLiAgTGF0ZXIuLi4gKi8KIApAQCAtNTE5LDYgKzQ4OSwxMSBAQAogICAgIChlcnJubyA9PSBleHBlY3RlZCkKICNlbmRpZgogCisjaWZkZWYgTVNfV0lORE9XUworLyogRG9lcyBXU0FTb2NrZXQoKSBzdXBwb3J0IHRoZSBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCBmbGFnPyAqLworc3RhdGljIGludCBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gLTE7CisjZW5kaWYKKwogLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcmFpc2UgYW4gZXJyb3IgYWNjb3JkaW5nIHRvIGVycm5vCiAgICBhbmQgcmV0dXJuIGEgTlVMTCBwb2ludGVyIGZyb20gYSBmdW5jdGlvbi4gKi8KIApAQCAtNTM0LDQyICs1MDksNiBAQAogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlFeGNfT1NFcnJvciwgZXJyX25vKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKHNvY2tfZXJybm8oKSAhPSBOT19FUlJPUikgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIFVMT05HICBtc2dsZW47Ci0gICAgICAgIGNoYXIgb3V0YnVmWzEwMF07Ci0gICAgICAgIGludCBteWVycm9yY29kZSA9IHNvY2tfZXJybm8oKTsKLQotICAgICAgICAvKiBSZXRyaWV2ZSBzb2NrZXQtcmVsYXRlZCBlcnJvciBtZXNzYWdlIGZyb20gTVBUTi5NU0cgZmlsZSAqLwotICAgICAgICByYyA9IERvc0dldE1lc3NhZ2UoTlVMTCwgMCwgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ZXJyb3Jjb2RlIC0gU09DQkFTRUVSUiArIDI2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1wdG4ubXNnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2dsZW4pOwotICAgICAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2OwotCi0gICAgICAgICAgICAvKiBPUy8yIGRvZXNuJ3QgZ3VhcmFudGVlIGEgdGVybWluYXRvciAqLwotICAgICAgICAgICAgb3V0YnVmW21zZ2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgaWYgKHN0cmxlbihvdXRidWYpID4gMCkgewotICAgICAgICAgICAgICAgIC8qIElmIG5vbi1lbXB0eSBtc2csIHRyaW0gQ1JMRiAqLwotICAgICAgICAgICAgICAgIGNoYXIgKmxhc3RjID0gJm91dGJ1Zlsgc3RybGVuKG91dGJ1ZiktMSBdOwotICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0YyA+IG91dGJ1ZiAmJgotICAgICAgICAgICAgICAgICAgICAgICBQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpsYXN0YykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZSAoQ1JMRikgKi8KLSAgICAgICAgICAgICAgICAgICAgKmxhc3RjLS0gPSAnXDAnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHYgPSBQeV9CdWlsZFZhbHVlKCIoaXMpIiwgbXllcnJvcmNvZGUsIG91dGJ1Zik7Ci0gICAgICAgICAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogfQogCkBAIC02NTgsMjAgKzU5NywxNyBAQAogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmbmRlZiBNU19XSU5ET1dTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgYmxvY2sgPSAhYmxvY2s7Ci0gICAgaW9jdGwocy0+c29ja19mZCwgRklPTkJJTywgKGNhZGRyX3QpJmJsb2NrLCBzaXplb2YoYmxvY2spKTsKLSNlbGlmIGRlZmluZWQoX19WTVMpCisjaWYgZGVmaW5lZChfX1ZNUykKICAgICBibG9jayA9ICFibG9jazsKICAgICBpb2N0bChzLT5zb2NrX2ZkLCBGSU9OQklPLCAodW5zaWduZWQgaW50ICopJmJsb2NrKTsKLSNlbHNlICAvKiAhUFlPU19PUzIgJiYgIV9fVk1TICovCisjZWxzZSAgLyogIV9fVk1TICovCiAgICAgZGVsYXlfZmxhZyA9IGZjbnRsKHMtPnNvY2tfZmQsIEZfR0VURkwsIDApOwogICAgIGlmIChibG9jaykKICAgICAgICAgZGVsYXlfZmxhZyAmPSAofk9fTk9OQkxPQ0spOwogICAgIGVsc2UKICAgICAgICAgZGVsYXlfZmxhZyB8PSBPX05PTkJMT0NLOwogICAgIGZjbnRsKHMtPnNvY2tfZmQsIEZfU0VURkwsIGRlbGF5X2ZsYWcpOwotI2VuZGlmIC8qICFQWU9TX09TMiAqLworI2VuZGlmIC8qICFfX1ZNUyAqLwogI2Vsc2UgLyogTVNfV0lORE9XUyAqLwogICAgIGJsb2NrID0gIWJsb2NrOwogICAgIGlvY3Rsc29ja2V0KHMtPnNvY2tfZmQsIEZJT05CSU8sICh1X2xvbmcqKSZibG9jayk7CkBAIC04NTUsOCArNzkxLDYgQEAKIHsKICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CiAgICAgaW50IGVycm9yOwotICAgIGludCBkMSwgZDIsIGQzLCBkNDsKLSAgICBjaGFyIGNoOwogCiAgICAgbWVtc2V0KCh2b2lkICopIGFkZHJfcmV0LCAnXDAnLCBzaXplb2YoKmFkZHJfcmV0KSk7CiAgICAgaWYgKG5hbWVbMF0gPT0gJ1wwJykgewpAQCAtOTA1LDcgKzgzOSwxMCBAQAogICAgICAgICBmcmVlYWRkcmluZm8ocmVzKTsKICAgICAgICAgcmV0dXJuIHNpejsKICAgICB9Ci0gICAgaWYgKG5hbWVbMF0gPT0gJzwnICYmIHN0cmNtcChuYW1lLCAiPGJyb2FkY2FzdD4iKSA9PSAwKSB7CisgICAgLyogc3BlY2lhbC1jYXNlIGJyb2FkY2FzdCAtIGluZXRfYWRkcigpIGJlbG93IGNhbiByZXR1cm4gSU5BRERSX05PTkUgZm9yCisgICAgICogdGhpcyAqLyAKKyAgICBpZiAoc3RyY21wKG5hbWUsICIyNTUuMjU1LjI1NS4yNTUiKSA9PSAwIHx8CisgICAgICAgIHN0cmNtcChuYW1lLCAiPGJyb2FkY2FzdD4iKSA9PSAwKSB7CiAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwogICAgICAgICBpZiAoYWYgIT0gQUZfSU5FVCAmJiBhZiAhPSBBRl9VTlNQRUMpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLApAQCAtOTIxLDIwICs4NTgsNTMgQEAKICAgICAgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOwogICAgICAgICByZXR1cm4gc2l6ZW9mKHNpbi0+c2luX2FkZHIpOwogICAgIH0KLSAgICBpZiAoc3NjYW5mKG5hbWUsICIlZC4lZC4lZC4lZCVjIiwgJmQxLCAmZDIsICZkMywgJmQ0LCAmY2gpID09IDQgJiYKLSAgICAgICAgMCA8PSBkMSAmJiBkMSA8PSAyNTUgJiYgMCA8PSBkMiAmJiBkMiA8PSAyNTUgJiYKLSAgICAgICAgMCA8PSBkMyAmJiBkMyA8PSAyNTUgJiYgMCA8PSBkNCAmJiBkNCA8PSAyNTUpIHsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0gICAgICAgIHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3JldDsKLSAgICAgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBodG9ubCgKLSAgICAgICAgICAgICgobG9uZykgZDEgPDwgMjQpIHwgKChsb25nKSBkMiA8PCAxNikgfAotICAgICAgICAgICAgKChsb25nKSBkMyA8PCA4KSB8ICgobG9uZykgZDQgPDwgMCkpOwotICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisgICAgLyogYXZvaWQgYSBuYW1lIHJlc29sdXRpb24gaW4gY2FzZSBvZiBudW1lcmljIGFkZHJlc3MgKi8KKyNpZmRlZiBIQVZFX0lORVRfUFRPTgorICAgIC8qIGNoZWNrIGZvciBhbiBJUHY0IGFkZHJlc3MgKi8KKyAgICBpZiAoYWYgPT0gQUZfVU5TUEVDIHx8IGFmID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgbmFtZSwgJnNpbi0+c2luX2FkZHIpID4gMCkgeworICAgICAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgotICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisgICAgICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQogICAgIH0KKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIC8qIGNoZWNrIGZvciBhbiBJUHY2IGFkZHJlc3MgLSBpZiB0aGUgYWRkcmVzcyBjb250YWlucyBhIHNjb3BlIElELCB3ZQorICAgICAqIGZhbGxiYWNrIHRvIGdldGFkZHJpbmZvKCksIHdoaWNoIGNhbiBoYW5kbGUgdHJhbnNsYXRpb24gZnJvbSBpbnRlcmZhY2UKKyAgICAgKiBuYW1lIHRvIGludGVyZmFjZSBpbmRleCAqLworICAgIGlmICgoYWYgPT0gQUZfVU5TUEVDIHx8IGFmID09IEFGX0lORVQ2KSAmJiAhc3RyY2hyKG5hbWUsICclJykpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyX3JldDsKKyAgICAgICAgbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgbmFtZSwgJnNpbi0+c2luNl9hZGRyKSA+IDApIHsKKyAgICAgICAgICAgIHNpbi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgICAgICAgc2luLT5zaW42X2xlbiA9IHNpemVvZigqc2luKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRV9JUFY2ICovCisjZWxzZSAvKiBIQVZFX0lORVRfUFRPTiAqLworICAgIC8qIGNoZWNrIGZvciBhbiBJUHY0IGFkZHJlc3MgKi8KKyAgICBpZiAoYWYgPT0gQUZfSU5FVCB8fCBhZiA9PSBBRl9VTlNQRUMpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIobmFtZSkpICE9IElOQUREUl9OT05FKSB7CisgICAgICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICB9CisgICAgfSAgIAorI2VuZGlmIC8qIEhBVkVfSU5FVF9QVE9OICovCisKKyAgICAvKiBwZXJmb3JtIGEgbmFtZSByZXNvbHV0aW9uICovCiAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAgICAgaGludHMuYWlfZmFtaWx5ID0gYWY7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMTMyOSwxMSArMTI5OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgYWRkci0+c3VuX2ZhbWlseSA9IHMtPnNvY2tfZmFtaWx5OwogICAgICAgICBtZW1jcHkoYWRkci0+c3VuX3BhdGgsIHBhdGgsIGxlbik7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICAgICAgKmxlbl9yZXQgPSBzaXplb2YoKmFkZHIpOwotI2Vsc2UKICAgICAgICAgKmxlbl9yZXQgPSBsZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKLSNlbmRpZgogICAgICAgICByZXR2YWwgPSAxOwogICAgIHVuaXhfb3V0OgogICAgICAgICBQeV9ERUNSRUYoYXJncyk7CkBAIC0xNjU4LDYgKzE2MjQsOCBAQAogICAgIGNhc2UgQUZfQ0FOOgogICAgICAgICBzd2l0Y2ggKHMtPnNvY2tfcHJvdG8pIHsKICAgICAgICAgY2FzZSBDQU5fUkFXOgorICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBDQU5fQkNNOgogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfY2FuICphZGRyOwogICAgICAgICAgICAgUHlPYmplY3QgKmludGVyZmFjZU5hbWU7CkBAIC0yMDE2LDYgKzE5ODQsMTEgQEAKICAgICBQeU9iamVjdCAqYWRkciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgaW50IHRpbWVvdXQ7CisjaWYgZGVmaW5lZChIQVZFX0FDQ0VQVDQpICYmIGRlZmluZWQoU09DS19DTE9FWEVDKQorICAgIC8qIGFjY2VwdDQoKSBpcyBhdmFpbGFibGUgb24gTGludXggMi42LjI4KyBhbmQgZ2xpYmMgMi4xMCAqLworICAgIHN0YXRpYyBpbnQgYWNjZXB0NF93b3JrcyA9IC0xOworI2VuZGlmCisKICAgICBpZiAoIWdldHNvY2thZGRybGVuKHMsICZhZGRybGVuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbWVtc2V0KCZhZGRyYnVmLCAwLCBhZGRybGVuKTsKQEAgLTIwMjQsMTAgKzE5OTcsMjQgQEAKICAgICAgICAgcmV0dXJuIHNlbGVjdF9lcnJvcigpOwogCiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKICAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZiBkZWZpbmVkKEhBVkVfQUNDRVBUNCkgJiYgZGVmaW5lZChTT0NLX0NMT0VYRUMpCisgICAgICAgIGlmIChhY2NlcHQ0X3dvcmtzICE9IDApIHsKKyAgICAgICAgICAgIG5ld2ZkID0gYWNjZXB0NChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0NLX0NMT0VYRUMpOworICAgICAgICAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUICYmIGFjY2VwdDRfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvKiBPbiBMaW51eCBvbGRlciB0aGFuIDIuNi4yOCwgYWNjZXB0NCgpIGZhaWxzIHdpdGggRU5PU1lTICovCisgICAgICAgICAgICAgICAgYWNjZXB0NF93b3JrcyA9IChlcnJubyAhPSBFTk9TWVMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhY2NlcHQ0X3dvcmtzID09IDApCisgICAgICAgICAgICBuZXdmZCA9IGFjY2VwdChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CisjZWxzZQogICAgICAgICBuZXdmZCA9IGFjY2VwdChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CisjZW5kaWYKICAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIApAQCAtMjA0MCw2ICsyMDI3LDI1IEBACiAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQogICAgICAgICByZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKW5ld2ZkLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOworICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgfQorI2Vsc2UKKworI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKyAgICBpZiAoIWFjY2VwdDRfd29ya3MpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG5ld2ZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIFNPQ0tFVENMT1NFKG5ld2ZkKTsKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgc29jayA9IFB5TG9uZ19Gcm9tU29ja2V0X3QobmV3ZmQpOwogICAgIGlmIChzb2NrID09IE5VTEwpIHsKICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOwpAQCAtMjYxMyw4ICsyNjE5LDE1IEBACiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQorICAgIGlmICghdGltZW91dCkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBvdXRsZW4gPSByZWN2KHMtPnNvY2tfZmQsIGNidWYsIChpbnQpbGVuLCBmbGFncyk7CisjZWxzZQogICAgICAgICBvdXRsZW4gPSByZWN2KHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MpOworI2VuZGlmCisgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAodGltZW91dCA9PSAxKSB7CkBAIC0yODIxLDEzICsyODM0LDEwIEBACiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7CiAgICAgaWYgKCF0aW1lb3V0KSB7CiAjaWZuZGVmIE1TX1dJTkRPV1MKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7Ci0jZWxzZQotICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgKGludClsZW4sIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJmFkZHJidWYsICZhZGRybGVuKTsKLSNlbmRpZgogI2Vsc2UKICAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CkBAIC0zMzA1LDEyICszMzE1LDE3IEBACiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAxLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQorICAgIGlmICghdGltZW91dCkgewogI2lmZGVmIF9fVk1TCiAgICAgICAgIG4gPSBzZW5kc2VnbWVudGVkKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CisjZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MpOwogI2Vsc2UKICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKICNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmICh0aW1lb3V0ID09IDEpIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CkBAIC0zMzYwLDYgKzMzNzUsMTAgQEAKICAgICAgICAgaWYgKCF0aW1lb3V0KSB7CiAjaWZkZWYgX19WTVMKICAgICAgICAgICAgIG4gPSBzZW5kc2VnbWVudGVkKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CisjZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MpOwogI2Vsc2UKICAgICAgICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CiAjZW5kaWYKQEAgLTM0NTQsOCArMzQ3MywxNyBAQAogICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMSwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKLSAgICAgICAgbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MsIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOworICAgIGlmICghdGltZW91dCkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgKGludClsZW4sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOworI2Vsc2UKKyAgICAgICAgbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CisjZW5kaWYKKyAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICh0aW1lb3V0ID09IDEpIHsKQEAgLTM5NDgsNiArMzk3NiwxMiBAQAogCiAvKiBJbml0aWFsaXplIGEgbmV3IHNvY2tldCBvYmplY3QuICovCiAKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKy8qIHNvY2tldCgpIGFuZCBzb2NrZXRwYWlyKCkgZmFpbCB3aXRoIEVJTlZBTCBvbiBMaW51eCBrZXJuZWwgb2xkZXIKKyAqIHRoYW4gMi42LjI3IGlmIFNPQ0tfQ0xPRVhFQyBmbGFnIGlzIHNldCBpbiB0aGUgc29ja2V0IHR5cGUuICovCitzdGF0aWMgaW50IHNvY2tfY2xvZXhlY193b3JrcyA9IC0xOworI2VuZGlmCisKIC8qQVJHU1VTRUQqLwogc3RhdGljIGludAogc29ja19pbml0b2JqKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC0zOTU3LDYgKzM5OTEsMTMgQEAKICAgICBTT0NLRVRfVCBmZCA9IElOVkFMSURfU09DS0VUOwogICAgIGludCBmYW1pbHkgPSBBRl9JTkVULCB0eXBlID0gU09DS19TVFJFQU0sIHByb3RvID0gMDsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsiZmFtaWx5IiwgInR5cGUiLCAicHJvdG8iLCAiZmlsZW5vIiwgMH07CisjaWZuZGVmIE1TX1dJTkRPV1MKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gJnNvY2tfY2xvZXhlY193b3JrczsKKyNlbHNlCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKKyNlbmRpZgogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifGlpaU86c29ja2V0Iiwga2V5d29yZHMsCkBAIC00MDAxLDE0ICs0MDQyLDc0IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICAvKiBXaW5kb3dzIGltcGxlbWVudGF0aW9uICovCisjaWZuZGVmIFdTQV9GTEFHX05PX0hBTkRMRV9JTkhFUklUCisjZGVmaW5lIFdTQV9GTEFHX05PX0hBTkRMRV9JTkhFUklUIDB4ODAKKyNlbmRpZgorCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgIGlmIChzdXBwb3J0X3dzYV9ub19pbmhlcml0KSB7CisgICAgICAgICAgICBmZCA9IFdTQVNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTQV9GTEFHX09WRVJMQVBQRUQgfCBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCk7CisgICAgICAgICAgICBpZiAoZmQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgICAgICAgICAvKiBXaW5kb3dzIDcgb3IgV2luZG93cyAyMDA4IFIyIHdpdGhvdXQgU1AxIG9yIHRoZSBob3RmaXggKi8KKyAgICAgICAgICAgICAgICBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gMDsKKyAgICAgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICB9CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAgICAgaWYgKGZkID09IElOVkFMSURfU09DS0VUKSB7CiAgICAgICAgICAgICBzZXRfZXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQorCisgICAgICAgIGlmICghc3VwcG9ydF93c2Ffbm9faW5oZXJpdCkgeworICAgICAgICAgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKWZkLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgICAgICAgICAgIGNsb3Nlc29ja2V0KGZkKTsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIC8qIFVOSVggKi8KKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgICAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzICE9IDApIHsKKyAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSB8IFNPQ0tfQ0xPRVhFQywgcHJvdG8pOworICAgICAgICAgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgICAgIGlmIChmZCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNvY2tfY2xvZXhlY193b3JrcyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVycm5vID09IEVJTlZBTCkgeworICAgICAgICAgICAgICAgICAgICAvKiBMaW51eCBvbGRlciB0aGFuIDIuNi4yNyBkb2VzIG5vdCBzdXBwb3J0IFNPQ0tfQ0xPRVhFQyAqLworICAgICAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAwOworICAgICAgICAgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICB9CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgaWYgKGZkID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgICAgICBzZXRfZXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKSB7CisgICAgICAgICAgICBTT0NLRVRDTE9TRShmZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyNlbmRpZgogICAgIH0KICAgICBpbml0X3NvY2tvYmplY3QocywgZmQsIGZhbWlseSwgdHlwZSwgcHJvdG8pOwogCkBAIC00NTc0LDE2ICs0Njc1LDM2IEBACiB7CiAgICAgU09DS0VUX1QgZmQsIG5ld2ZkOwogICAgIFB5T2JqZWN0ICpuZXdmZG9iajsKLQorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBXU0FQUk9UT0NPTF9JTkZPIGluZm87CisjZW5kaWYKIAogICAgIGZkID0gUHlMb25nX0FzU29ja2V0X3QoZmRvYmopOwogICAgIGlmIChmZCA9PSAoU09DS0VUX1QpKC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG5ld2ZkID0gZHVwX3NvY2tldChmZCk7CisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChXU0FEdXBsaWNhdGVTb2NrZXQoZmQsIEdldEN1cnJlbnRQcm9jZXNzSWQoKSwgJmluZm8pKQorICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CisKKyAgICBuZXdmZCA9IFdTQVNvY2tldChGUk9NX1BST1RPQ09MX0lORk8sIEZST01fUFJPVE9DT0xfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICBGUk9NX1BST1RPQ09MX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgJmluZm8sIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOwogICAgIGlmIChuZXdmZCA9PSBJTlZBTElEX1NPQ0tFVCkKICAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOwogCisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKW5ld2ZkLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgICBjbG9zZXNvY2tldChuZXdmZCk7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZWxzZQorICAgIC8qIE9uIFVOSVgsIGR1cCBjYW4gYmUgdXNlZCB0byBkdXBsaWNhdGUgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhIHNvY2tldCAqLworICAgIG5ld2ZkID0gX1B5X2R1cChmZCk7CisgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQorICAgICAgICByZXR1cm4gTlVMTDsgCisjZW5kaWYKKwogICAgIG5ld2Zkb2JqID0gUHlMb25nX0Zyb21Tb2NrZXRfdChuZXdmZCk7CiAgICAgaWYgKG5ld2Zkb2JqID09IE5VTEwpCiAgICAgICAgIFNPQ0tFVENMT1NFKG5ld2ZkKTsKQEAgLTQ2MTEsNiArNDczMiwxMiBAQAogICAgIFNPQ0tFVF9UIHN2WzJdOwogICAgIGludCBmYW1pbHksIHR5cGUgPSBTT0NLX1NUUkVBTSwgcHJvdG8gPSAwOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmc29ja19jbG9leGVjX3dvcmtzOworI2Vsc2UKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorICAgIGludCByZXQ7CiAKICNpZiBkZWZpbmVkKEFGX1VOSVgpCiAgICAgZmFtaWx5ID0gQUZfVU5JWDsKQEAgLTQ2MjAsOSArNDc0NywzOCBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGlpaTpzb2NrZXRwYWlyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhbWlseSwgJnR5cGUsICZwcm90bykpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgLyogQ3JlYXRlIGEgcGFpciBvZiBzb2NrZXQgZmRzICovCi0gICAgaWYgKHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpIDwgMCkKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyAhPSAwKSB7CisgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlIHwgU09DS19DTE9FWEVDLCBwcm90bywgc3YpOworICAgICAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICBpZiAocmV0ID49IDApIHsKKyAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRUlOVkFMKSB7CisgICAgICAgICAgICAgICAgLyogTGludXggb2xkZXIgdGhhbiAyLjYuMjcgZG9lcyBub3Qgc3VwcG9ydCBTT0NLX0NMT0VYRUMgKi8KKyAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAwOworICAgICAgICAgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcmV0ID0gc29ja2V0cGFpcihmYW1pbHksIHR5cGUsIHByb3RvLCBzdik7CisgICAgfQorICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmV0IDwgMCkKICAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc3ZbMF0sIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApCisgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzdlsxXSwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkKKyAgICAgICAgZ290byBmaW5hbGx5OworCiAgICAgczAgPSBuZXdfc29ja29iamVjdChzdlswXSwgZmFtaWx5LCB0eXBlLCBwcm90byk7CiAgICAgaWYgKHMwID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmluYWxseTsKQEAgLTQ2NDQsNyArNDgwMCw3IEBACiB9CiAKIFB5RG9jX1NUUlZBUihzb2NrZXRwYWlyX2RvYywKLSJzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KVxuXAorInNvY2tldHBhaXIoW2ZhbWlseVssIHR5cGUgWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KVxuXAogXG5cCiBDcmVhdGUgYSBwYWlyIG9mIHNvY2tldCBvYmplY3RzIGZyb20gdGhlIHNvY2tldHMgcmV0dXJuZWQgYnkgdGhlIHBsYXRmb3JtXG5cCiBzb2NrZXRwYWlyKCkgZnVuY3Rpb24uXG5cCkBAIC00Nzc4LDkgKzQ5MzQsNiBAQAogc3RhdGljIFB5T2JqZWN0Kgogc29ja2V0X2luZXRfYXRvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0jaWZuZGVmIElOQUREUl9OT05FCi0jZGVmaW5lIElOQUREUl9OT05FICgtMSkKLSNlbmRpZgogI2lmZGVmIEhBVkVfSU5FVF9BVE9OCiAgICAgc3RydWN0IGluX2FkZHIgYnVmOwogI2VuZGlmCkBAIC00ODIyLDcgKzQ5NzUsNyBAQAogICAgIC8qIHNwZWNpYWwtY2FzZSB0aGlzIGFkZHJlc3MgYXMgaW5ldF9hZGRyIG1pZ2h0IHJldHVybiBJTkFERFJfTk9ORQogICAgICAqIGZvciB0aGlzICovCiAgICAgaWYgKHN0cmNtcChpcF9hZGRyLCAiMjU1LjI1NS4yNTUuMjU1IikgPT0gMCkgewotICAgICAgICBwYWNrZWRfYWRkciA9IDB4RkZGRkZGRkY7CisgICAgICAgIHBhY2tlZF9hZGRyID0gSU5BRERSX0JST0FEQ0FTVDsKICAgICB9IGVsc2UgewogCiAgICAgICAgIHBhY2tlZF9hZGRyID0gaW5ldF9hZGRyKGlwX2FkZHIpOwpAQCAtNDg4NSw3ICs1MDM4LDcgQEAKICAgICBjaGFyKiBpcDsKICAgICBpbnQgcmV0dmFsOwogI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgY2hhciBwYWNrZWRbTUFYKHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKV07CisgICAgY2hhciBwYWNrZWRbUHlfTUFYKHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKV07CiAjZWxzZQogICAgIGNoYXIgcGFja2VkW3NpemVvZihzdHJ1Y3QgaW5fYWRkcildOwogI2VuZGlmCkBAIC00OTM2LDcgKzUwODksNyBAQAogICAgIGludCBsZW47CiAgICAgY29uc3QgY2hhciogcmV0dmFsOwogI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgY2hhciBpcFtNQVgoSU5FVF9BRERSU1RSTEVOLCBJTkVUNl9BRERSU1RSTEVOKSArIDFdOworICAgIGNoYXIgaXBbUHlfTUFYKElORVRfQUREUlNUUkxFTiwgSU5FVDZfQUREUlNUUkxFTikgKyAxXTsKICNlbHNlCiAgICAgY2hhciBpcFtJTkVUX0FERFJTVFJMRU4gKyAxXTsKICNlbmRpZgpAQCAtNTAwMiw3ICs1MTU1LDcgQEAKICAgICBQeU9iamVjdCAqYWxsID0gKFB5T2JqZWN0ICopTlVMTDsKICAgICBQeU9iamVjdCAqaWRuYSA9IE5VTEw7CiAKLSAgICBmYW1pbHkgPSBzb2NrdHlwZSA9IHByb3RvY29sID0gZmxhZ3MgPSAwOworICAgIHNvY2t0eXBlID0gcHJvdG9jb2wgPSBmbGFncyA9IDA7CiAgICAgZmFtaWx5ID0gQUZfVU5TUEVDOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk9PfGlpaWk6Z2V0YWRkcmluZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrd25hbWVzLCAmaG9iaiwgJnBvYmosICZmYW1pbHksICZzb2NrdHlwZSwKQEAgLTU1MjIsMzIgKzU2NzUsNiBAQAogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogCi0jaWZkZWYgUFlPU19PUzIKLSNkZWZpbmUgT1NfSU5JVF9ERUZJTkVECi0KLS8qIEFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gZm9yIE9TLzIgKi8KLQotc3RhdGljIGludAotb3NfaW5pdCh2b2lkKQotewotI2lmbmRlZiBQWUNDX0dDQwotICAgIGludCByYyA9IHNvY2tfaW5pdCgpOwotCi0gICAgaWYgKHJjID09IDApIHsKLSAgICAgICAgcmV0dXJuIDE7IC8qIFN1Y2Nlc3MgKi8KLSAgICB9Ci0KLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsICJPUy8yIFRDUC9JUCBFcnJvciMgJWQiLCBzb2NrX2Vycm5vKCkpOwotCi0gICAgcmV0dXJuIDA7ICAvKiBGYWlsdXJlICovCi0jZWxzZQotICAgIC8qIE5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBzb2NrZXRzIHdpdGggR0NDL0VNWCAqLwotICAgIHJldHVybiAxOyAvKiBTdWNjZXNzICovCi0jZW5kaWYKLX0KLQotI2VuZGlmIC8qIFBZT1NfT1MyICovCi0KIAogI2lmbmRlZiBPU19JTklUX0RFRklORUQKIHN0YXRpYyBpbnQKQEAgLTU2MDQsNiArNTczMSwxNiBAQAogICAgIGlmICghb3NfaW5pdCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9PSAtMSkgeworICAgICAgICBEV09SRCB2ZXJzaW9uID0gR2V0VmVyc2lvbigpOworICAgICAgICBEV09SRCBtYWpvciA9IChEV09SRClMT0JZVEUoTE9XT1JEKHZlcnNpb24pKTsKKyAgICAgICAgRFdPUkQgbWlub3IgPSAoRFdPUkQpSElCWVRFKExPV09SRCh2ZXJzaW9uKSk7CisgICAgICAgIC8qIG5lZWQgV2luZG93cyA3IFNQMSwgMjAwOCBSMiBTUDEgb3IgbGF0ZXIgKi8KKyAgICAgICAgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IChtYWpvciA+PSA2ICYmIG1pbm9yID49IDEpOworICAgIH0KKyNlbmRpZgorCiAgICAgUHlfVFlQRSgmc29ja190eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzb2NrZXRtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCkBAIC01NjU3LDE4NCArNTc5NCwxODcgQEAKIAogICAgIC8qIEFkZHJlc3MgZmFtaWxpZXMgKHdlIG9ubHkgc3VwcG9ydCBBRl9JTkVUIGFuZCBBRl9VTklYKSAqLwogI2lmZGVmIEFGX1VOU1BFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9VTlNQRUMiLCBBRl9VTlNQRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1VOU1BFQyk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSU5FVCIsIEFGX0lORVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lORVQpOwogI2lmZGVmIEFGX0lORVQ2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lORVQ2IiwgQUZfSU5FVDYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lORVQ2KTsKICNlbmRpZiAvKiBBRl9JTkVUNiAqLwogI2lmIGRlZmluZWQoQUZfVU5JWCkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfVU5JWCIsIEFGX1VOSVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1VOSVgpOwogI2VuZGlmIC8qIEFGX1VOSVggKi8KICNpZmRlZiBBRl9BWDI1CiAgICAgLyogQW1hdGV1ciBSYWRpbyBBWC4yNSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BWDI1IiwgQUZfQVgyNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVgyNSk7CiAjZW5kaWYKICNpZmRlZiBBRl9JUFgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSVBYIiwgQUZfSVBYKTsgLyogTm92ZWxsIElQWCAqLworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lQWCk7IC8qIE5vdmVsbCBJUFggKi8KICNlbmRpZgogI2lmZGVmIEFGX0FQUExFVEFMSwogICAgIC8qIEFwcGxldGFsayBERFAgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVBQTEVUQUxLIiwgQUZfQVBQTEVUQUxLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BUFBMRVRBTEspOwogI2VuZGlmCiAjaWZkZWYgQUZfTkVUUk9NCiAgICAgLyogQW1hdGV1ciByYWRpbyBOZXRST00gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTkVUUk9NIiwgQUZfTkVUUk9NKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ORVRST00pOwogI2VuZGlmCiAjaWZkZWYgQUZfQlJJREdFCiAgICAgLyogTXVsdGlwcm90b2NvbCBicmlkZ2UgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQlJJREdFIiwgQUZfQlJJREdFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9CUklER0UpOwogI2VuZGlmCiAjaWZkZWYgQUZfQVRNUFZDCiAgICAgLyogQVRNIFBWQ3MgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVRNUFZDIiwgQUZfQVRNUFZDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BVE1QVkMpOwogI2VuZGlmCiAjaWZkZWYgQUZfQUFMNQogICAgIC8qIFJlc2VydmVkIGZvciBXZXJuZXIncyBBVE0gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQUFMNSIsIEFGX0FBTDUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FBTDUpOwogI2VuZGlmCiAjaWZkZWYgQUZfWDI1CiAgICAgLyogUmVzZXJ2ZWQgZm9yIFguMjUgcHJvamVjdCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9YMjUiLCBBRl9YMjUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1gyNSk7CiAjZW5kaWYKICNpZmRlZiBBRl9JTkVUNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JTkVUNiIsIEFGX0lORVQ2KTsgLyogSVAgdmVyc2lvbiA2ICovCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSU5FVDYpOyAvKiBJUCB2ZXJzaW9uIDYgKi8KICNlbmRpZgogI2lmZGVmIEFGX1JPU0UKICAgICAvKiBBbWF0ZXVyIFJhZGlvIFguMjUgUExQICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1JPU0UiLCBBRl9ST1NFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ST1NFKTsKICNlbmRpZgogI2lmZGVmIEFGX0RFQ25ldAogICAgIC8qIFJlc2VydmVkIGZvciBERUNuZXQgcHJvamVjdCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ERUNuZXQiLCBBRl9ERUNuZXQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0RFQ25ldCk7CiAjZW5kaWYKICNpZmRlZiBBRl9ORVRCRVVJCiAgICAgLyogUmVzZXJ2ZWQgZm9yIDgwMi4yTExDIHByb2plY3QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTkVUQkVVSSIsIEFGX05FVEJFVUkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX05FVEJFVUkpOwogI2VuZGlmCiAjaWZkZWYgQUZfU0VDVVJJVFkKICAgICAvKiBTZWN1cml0eSBjYWxsYmFjayBwc2V1ZG8gQUYgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfU0VDVVJJVFkiLCBBRl9TRUNVUklUWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfU0VDVVJJVFkpOwogI2VuZGlmCiAjaWZkZWYgQUZfS0VZCiAgICAgLyogUEZfS0VZIGtleSBtYW5hZ2VtZW50IEFQSSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9LRVkiLCBBRl9LRVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0tFWSk7CiAjZW5kaWYKICNpZmRlZiBBRl9ORVRMSU5LCiAgICAgLyogICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX05FVExJTksiLCBBRl9ORVRMSU5LKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ST1VURSIsIE5FVExJTktfUk9VVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX05FVExJTkspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfUk9VVEUpOwogI2lmZGVmIE5FVExJTktfU0tJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1NLSVAiLCBORVRMSU5LX1NLSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfU0tJUCk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1cxCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVzEiLCBORVRMSU5LX1cxKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1cxKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1VTRVJTT0NLIiwgTkVUTElOS19VU0VSU09DSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfRklSRVdBTEwiLCBORVRMSU5LX0ZJUkVXQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1VTRVJTT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0ZJUkVXQUxMKTsKICNpZmRlZiBORVRMSU5LX1RDUERJQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19UQ1BESUFHIiwgTkVUTElOS19UQ1BESUFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1RDUERJQUcpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19ORkxPRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX05GTE9HIiwgTkVUTElOS19ORkxPRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ORkxPRyk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1hGUk0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19YRlJNIiwgTkVUTElOS19YRlJNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1hGUk0pOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19BUlBECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfQVJQRCIsIE5FVExJTktfQVJQRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19BUlBEKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfUk9VVEU2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfUk9VVEU2IiwgTkVUTElOS19ST1VURTYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfUk9VVEU2KTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0lQNl9GVyIsIE5FVExJTktfSVA2X0ZXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0lQNl9GVyk7CiAjaWZkZWYgTkVUTElOS19ETlJUTVNHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfRE5SVE1TRyIsIE5FVExJTktfRE5SVE1TRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ETlJUTVNHKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfVEFQQkFTRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1RBUEJBU0UiLCBORVRMSU5LX1RBUEJBU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfVEFQQkFTRSk7CiAjZW5kaWYKICNlbmRpZiAvKiBBRl9ORVRMSU5LICovCiAjaWZkZWYgQUZfUk9VVEUKICAgICAvKiBBbGlhcyB0byBlbXVsYXRlIDQuNEJTRCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ST1VURSIsIEFGX1JPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ST1VURSk7CisjZW5kaWYKKyNpZmRlZiBBRl9MSU5LCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTElOSyk7CiAjZW5kaWYKICNpZmRlZiBBRl9BU0gKICAgICAvKiBBc2ggKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVNIIiwgQUZfQVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BU0gpOwogI2VuZGlmCiAjaWZkZWYgQUZfRUNPTkVUCiAgICAgLyogQWNvcm4gRWNvbmV0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0VDT05FVCIsIEFGX0VDT05FVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfRUNPTkVUKTsKICNlbmRpZgogI2lmZGVmIEFGX0FUTVNWQwogICAgIC8qIEFUTSBTVkNzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FUTVNWQyIsIEFGX0FUTVNWQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVRNU1ZDKTsKICNlbmRpZgogI2lmZGVmIEFGX1NOQQogICAgIC8qIExpbnV4IFNOQSBQcm9qZWN0IChudXR0ZXJzISkgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfU05BIiwgQUZfU05BKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9TTkEpOwogI2VuZGlmCiAjaWZkZWYgQUZfSVJEQQogICAgIC8qIElSREEgc29ja2V0cyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JUkRBIiwgQUZfSVJEQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSVJEQSk7CiAjZW5kaWYKICNpZmRlZiBBRl9QUFBPWAogICAgIC8qIFBQUG9YIHNvY2tldHMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUFBQT1giLCBBRl9QUFBPWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUFBQT1gpOwogI2VuZGlmCiAjaWZkZWYgQUZfV0FOUElQRQogICAgIC8qIFdhbnBpcGUgQVBJIFNvY2tldHMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfV0FOUElQRSIsIEFGX1dBTlBJUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1dBTlBJUEUpOwogI2VuZGlmCiAjaWZkZWYgQUZfTExDCiAgICAgLyogTGludXggTExDICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0xMQyIsIEFGX0xMQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTExDKTsKICNlbmRpZgogCiAjaWZkZWYgVVNFX0JMVUVUT09USAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9CTFVFVE9PVEgiLCBBRl9CTFVFVE9PVEgpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX0wyQ0FQIiwgQlRQUk9UT19MMkNBUCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fSENJIiwgQlRQUk9UT19IQ0kpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSENJIiwgU09MX0hDSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQkxVRVRPT1RIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX0wyQ0FQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX0hDSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0hDSSk7CiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX0ZJTFRFUiIsIEhDSV9GSUxURVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEhDSV9GSUxURVIpOwogI2VuZGlmCiAjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX1RJTUVfU1RBTVAiLCBIQ0lfVElNRV9TVEFNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSENJX1RJTUVfU1RBTVApOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkhDSV9EQVRBX0RJUiIsIEhDSV9EQVRBX0RJUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fU0NPIiwgQlRQUk9UT19TQ08pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEhDSV9EQVRBX0RJUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19TQ08pOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fUkZDT01NIiwgQlRQUk9UT19SRkNPTU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fUkZDT01NKTsKICAgICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAiQkRBRERSX0FOWSIsICIwMDowMDowMDowMDowMDowMCIpOwogICAgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJCREFERFJfTE9DQUwiLCAiMDA6MDA6MDA6RkY6RkY6RkYiKTsKICNlbmRpZgogCiAjaWZkZWYgQUZfQ0FOCiAgICAgLyogQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQ0FOIiwgQUZfQ0FOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9DQU4pOwogI2VuZGlmCiAjaWZkZWYgUEZfQ0FOCiAgICAgLyogQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEZfQ0FOIiwgUEZfQ0FOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQRl9DQU4pOwogI2VuZGlmCiAKIC8qIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKi8KICNpZmRlZiBBRl9SRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUkRTIiwgQUZfUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9SRFMpOwogI2VuZGlmCiAjaWZkZWYgUEZfUkRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX1JEUyIsIFBGX1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfUkRTKTsKICNlbmRpZgogCiAvKiBLZXJuZWwgZXZlbnQgbWVzc2FnZXMgKi8KICNpZmRlZiBQRl9TWVNURU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEZfU1lTVEVNIiwgUEZfU1lTVEVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQRl9TWVNURU0pOwogI2VuZGlmCiAjaWZkZWYgQUZfU1lTVEVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1NZU1RFTSIsIEFGX1NZU1RFTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfU1lTVEVNKTsKICNlbmRpZgogCiAjaWZkZWYgQUZfUEFDS0VUCkBAIC01ODY2LDEzNCArNjAwNiwxMjkgQEAKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9MSU5VWF9USVBDX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfVElQQyIsIEFGX1RJUEMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1RJUEMpOwogCiAgICAgLyogZm9yIGFkZHJlc3NlcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0FERFJfTkFNRVNFUSIsIFRJUENfQUREUl9OQU1FU0VRKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19BRERSX05BTUUiLCBUSVBDX0FERFJfTkFNRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQUREUl9JRCIsIFRJUENfQUREUl9JRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19BRERSX05BTUVTRVEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQUREUl9OQU1FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0FERFJfSUQpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfWk9ORV9TQ09QRSIsIFRJUENfWk9ORV9TQ09QRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ0xVU1RFUl9TQ09QRSIsIFRJUENfQ0xVU1RFUl9TQ09QRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfTk9ERV9TQ09QRSIsIFRJUENfTk9ERV9TQ09QRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19aT05FX1NDT1BFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NMVVNURVJfU0NPUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfTk9ERV9TQ09QRSk7CiAKICAgICAvKiBmb3Igc2V0c29ja29wdCgpICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9USVBDIiwgU09MX1RJUEMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0lNUE9SVEFOQ0UiLCBUSVBDX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NSQ19EUk9QUEFCTEUiLCBUSVBDX1NSQ19EUk9QUEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0RFU1RfRFJPUFBBQkxFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19ERVNUX0RST1BQQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ09OTl9USU1FT1VUIiwgVElQQ19DT05OX1RJTUVPVVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9USVBDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1JDX0RST1BQQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19ERVNUX0RST1BQQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DT05OX1RJTUVPVVQpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfTE9XX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0xPV19JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19NRURJVU1fSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfTUVESVVNX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0hJR0hfSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfSElHSF9JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0xPV19JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX01FRElVTV9JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0hJR0hfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFKTsKIAogICAgIC8qIGZvciBzdWJzY3JpcHRpb25zICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCX1BPUlRTIiwgVElQQ19TVUJfUE9SVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQl9TRVJWSUNFIiwgVElQQ19TVUJfU0VSVklDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TVUJfUE9SVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCX1NFUlZJQ0UpOwogI2lmZGVmIFRJUENfU1VCX0NBTkNFTAogICAgIC8qIGRvZXNuJ3Qgc2VlbSB0byBiZSBhdmFpbGFibGUgZXZlcnl3aGVyZSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQl9DQU5DRUwiLCBUSVBDX1NVQl9DQU5DRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCX0NBTkNFTCk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19XQUlUX0ZPUkVWRVIiLCBUSVBDX1dBSVRfRk9SRVZFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfUFVCTElTSEVEIiwgVElQQ19QVUJMSVNIRUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1dJVEhEUkFXTiIsIFRJUENfV0lUSERSQVdOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJTQ1JfVElNRU9VVCIsIFRJUENfU1VCU0NSX1RJTUVPVVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NGR19TUlYiLCBUSVBDX0NGR19TUlYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1RPUF9TUlYiLCBUSVBDX1RPUF9TUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfV0FJVF9GT1JFVkVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1BVQkxJU0hFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19XSVRIRFJBV04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCU0NSX1RJTUVPVVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ0ZHX1NSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19UT1BfU1JWKTsKICNlbmRpZgogCiAgICAgLyogU29ja2V0IHR5cGVzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfU1RSRUFNIiwgU09DS19TVFJFQU0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX0RHUkFNIiwgU09DS19ER1JBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19TVFJFQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfREdSQU0pOwogLyogV2UgaGF2ZSBpbmNvbXBsZXRlIHNvY2tldCBzdXBwb3J0LiAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1JBVyIsIFNPQ0tfUkFXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19TRVFQQUNLRVQiLCBTT0NLX1NFUVBBQ0tFVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfU0VRUEFDS0VUKTsKICNpZiBkZWZpbmVkKFNPQ0tfUkRNKQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1JETSIsIFNPQ0tfUkRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1JETSk7CiAjZW5kaWYKICNpZmRlZiBTT0NLX0NMT0VYRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19DTE9FWEVDIiwgU09DS19DTE9FWEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX0NMT0VYRUMpOwogI2VuZGlmCiAjaWZkZWYgU09DS19OT05CTE9DSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX05PTkJMT0NLIiwgU09DS19OT05CTE9DSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19OT05CTE9DSyk7CiAjZW5kaWYKIAogI2lmZGVmICBTT19ERUJVRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19ERUJVRyIsIFNPX0RFQlVHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19ERUJVRyk7CiAjZW5kaWYKICNpZmRlZiAgU09fQUNDRVBUQ09OTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19BQ0NFUFRDT05OIiwgU09fQUNDRVBUQ09OTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fQUNDRVBUQ09OTik7CiAjZW5kaWYKICNpZmRlZiAgU09fUkVVU0VBRERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JFVVNFQUREUiIsIFNPX1JFVVNFQUREUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkVVU0VBRERSKTsKICNlbmRpZgogI2lmZGVmIFNPX0VYQ0xVU0lWRUFERFJVU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fRVhDTFVTSVZFQUREUlVTRSIsIFNPX0VYQ0xVU0lWRUFERFJVU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0VYQ0xVU0lWRUFERFJVU0UpOwogI2VuZGlmCiAKICNpZmRlZiAgU09fS0VFUEFMSVZFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0tFRVBBTElWRSIsIFNPX0tFRVBBTElWRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fS0VFUEFMSVZFKTsKICNlbmRpZgogI2lmZGVmICBTT19ET05UUk9VVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fRE9OVFJPVVRFIiwgU09fRE9OVFJPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19ET05UUk9VVEUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0JST0FEQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19CUk9BRENBU1QiLCBTT19CUk9BRENBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0JST0FEQ0FTVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fVVNFTE9PUEJBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fVVNFTE9PUEJBQ0siLCBTT19VU0VMT09QQkFDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fVVNFTE9PUEJBQ0spOwogI2VuZGlmCiAjaWZkZWYgIFNPX0xJTkdFUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19MSU5HRVIiLCBTT19MSU5HRVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0xJTkdFUik7CiAjZW5kaWYKICNpZmRlZiAgU09fT09CSU5MSU5FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX09PQklOTElORSIsIFNPX09PQklOTElORSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fT09CSU5MSU5FKTsKICNlbmRpZgogI2lmZGVmICBTT19SRVVTRVBPUlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkVVU0VQT1JUIiwgU09fUkVVU0VQT1JUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SRVVTRVBPUlQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NOREJVRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TTkRCVUYiLCBTT19TTkRCVUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NOREJVRik7CiAjZW5kaWYKICNpZmRlZiAgU09fUkNWQlVGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JDVkJVRiIsIFNPX1JDVkJVRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkNWQlVGKTsKICNlbmRpZgogI2lmZGVmICBTT19TTkRMT1dBVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TTkRMT1dBVCIsIFNPX1NORExPV0FUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TTkRMT1dBVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fUkNWTE9XQVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkNWTE9XQVQiLCBTT19SQ1ZMT1dBVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkNWTE9XQVQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NORFRJTUVPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1NORFRJTUVPIiwgU09fU05EVElNRU8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NORFRJTUVPKTsKICNlbmRpZgogI2lmZGVmICBTT19SQ1ZUSU1FTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SQ1ZUSU1FTyIsIFNPX1JDVlRJTUVPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SQ1ZUSU1FTyk7CiAjZW5kaWYKICNpZmRlZiAgU09fRVJST1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fRVJST1IiLCBTT19FUlJPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fRVJST1IpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1RZUEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fVFlQRSIsIFNPX1RZUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1RZUEUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NFVEZJQgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TRVRGSUIiLCBTT19TRVRGSUIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NFVEZJQik7CiAjZW5kaWYKICNpZmRlZiAgU09fUEFTU0NSRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUEFTU0NSRUQiLCBTT19QQVNTQ1JFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUEFTU0NSRUQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1BFRVJDUkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1BFRVJDUkVEIiwgU09fUEVFUkNSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1BFRVJDUkVEKTsKICNlbmRpZgogI2lmZGVmICBMT0NBTF9QRUVSQ1JFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0NBTF9QRUVSQ1JFRCIsIExPQ0FMX1BFRVJDUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NBTF9QRUVSQ1JFRCk7CiAjZW5kaWYKICNpZmRlZiAgU09fQklORFRPREVWSUNFCiAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fQklORFRPREVWSUNFKTsKQEAgLTYwMDEsMzEyICs2MTM2LDMzMCBAQAogCiAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgZm9yICJsaXN0ZW4iICovCiAjaWZkZWYgIFNPTUFYQ09OTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT01BWENPTk4iLCBTT01BWENPTk4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTUFYQ09OTik7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT01BWENPTk4iLCA1KTsgLyogQ29tbW9uIHZhbHVlICovCiAjZW5kaWYKIAogICAgIC8qIEFuY2lsbGlhcnkgbWVzc2FnZSB0eXBlcyAqLwogI2lmZGVmICBTQ01fUklHSFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDTV9SSUdIVFMiLCBTQ01fUklHSFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ01fUklHSFRTKTsKICNlbmRpZgogI2lmZGVmICBTQ01fQ1JFREVOVElBTFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NNX0NSRURFTlRJQUxTIiwgU0NNX0NSRURFTlRJQUxTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ01fQ1JFREVOVElBTFMpOwogI2VuZGlmCiAjaWZkZWYgIFNDTV9DUkVEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ01fQ1JFRFMiLCBTQ01fQ1JFRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDTV9DUkVEUyk7CiAjZW5kaWYKIAogICAgIC8qIEZsYWdzIGZvciBzZW5kLCByZWN2ICovCiAjaWZkZWYgIE1TR19PT0IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX09PQiIsIE1TR19PT0IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19PT0IpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19QRUVLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19QRUVLIiwgTVNHX1BFRUspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19QRUVLKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRE9OVFJPVVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19ET05UUk9VVEUiLCBNU0dfRE9OVFJPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRE9OVFJPVVRFKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRE9OVFdBSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0RPTlRXQUlUIiwgTVNHX0RPTlRXQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRE9OVFdBSVQpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FT1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VPUiIsIE1TR19FT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FT1IpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19UUlVOQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfVFJVTkMiLCBNU0dfVFJVTkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19UUlVOQyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0NUUlVOQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQ1RSVU5DIiwgTVNHX0NUUlVOQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0NUUlVOQyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX1dBSVRBTEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX1dBSVRBTEwiLCBNU0dfV0FJVEFMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX1dBSVRBTEwpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19CVEFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19CVEFHIiwgTVNHX0JUQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19CVEFHKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRVRBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRVRBRyIsIE1TR19FVEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRVRBRyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX05PU0lHTkFMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19OT1NJR05BTCIsIE1TR19OT1NJR05BTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX05PU0lHTkFMKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTk9USUZJQ0FUSU9OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19OT1RJRklDQVRJT04iLCBNU0dfTk9USUZJQ0FUSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTk9USUZJQ0FUSU9OKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQ01TR19DTE9FWEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19DTVNHX0NMT0VYRUMiLCBNU0dfQ01TR19DTE9FWEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQ01TR19DTE9FWEVDKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRVJSUVVFVUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VSUlFVRVVFIiwgTVNHX0VSUlFVRVVFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRVJSUVVFVUUpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19DT05GSVJNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19DT05GSVJNIiwgTVNHX0NPTkZJUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19DT05GSVJNKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTU9SRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTU9SRSIsIE1TR19NT1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTU9SRSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VPRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRU9GIiwgTVNHX0VPRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VPRik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0JDQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19CQ0FTVCIsIE1TR19CQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0JDQVNUKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTUNBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX01DQVNUIiwgTVNHX01DQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTUNBU1QpOworI2VuZGlmCisjaWZkZWYgTVNHX0ZBU1RPUEVOCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0ZBU1RPUEVOKTsKICNlbmRpZgogCiAgICAgLyogUHJvdG9jb2wgbGV2ZWwgYW5kIG51bWJlcnMsIHVzYWJsZSBmb3IgW2dzXWV0c29ja29wdCAqLwogI2lmZGVmICBTT0xfU09DS0VUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9TT0NLRVQiLCBTT0xfU09DS0VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfU09DS0VUKTsKICNlbmRpZgogI2lmZGVmICBTT0xfSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0lQIiwgU09MX0lQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfSVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0lQIiwgMCk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0lQWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSVBYIiwgU09MX0lQWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0lQWCk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0FYMjUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0FYMjUiLCBTT0xfQVgyNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0FYMjUpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9BVEFMSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQVRBTEsiLCBTT0xfQVRBTEspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9BVEFMSyk7CiAjZW5kaWYKICNpZmRlZiAgU09MX05FVFJPTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfTkVUUk9NIiwgU09MX05FVFJPTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX05FVFJPTSk7CiAjZW5kaWYKICNpZmRlZiAgU09MX1JPU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1JPU0UiLCBTT0xfUk9TRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1JPU0UpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9UQ1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1RDUCIsIFNPTF9UQ1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9UQ1ApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1RDUCIsIDYpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9VRFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1VEUCIsIFNPTF9VRFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9VRFApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1VEUCIsIDE3KTsKICNlbmRpZgogI2lmZGVmIFNPTF9DQU5fQkFTRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQ0FOX0JBU0UiLCBTT0xfQ0FOX0JBU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9DQU5fQkFTRSk7CiAjZW5kaWYKICNpZmRlZiBTT0xfQ0FOX1JBVwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQ0FOX1JBVyIsIFNPTF9DQU5fUkFXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBVyIsIENBTl9SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9DQU5fUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VGRl9GTEFHIiwgQ0FOX0VGRl9GTEFHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JUUl9GTEFHIiwgQ0FOX1JUUl9GTEFHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VSUl9GTEFHIiwgQ0FOX0VSUl9GTEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRUZGX0ZMQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SVFJfRkxBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VSUl9GTEFHKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fU0ZGX01BU0siLCBDQU5fU0ZGX01BU0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRUZGX01BU0siLCBDQU5fRUZGX01BU0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRVJSX01BU0siLCBDQU5fRVJSX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9TRkZfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VGRl9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRVJSX01BU0spOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9MSU5VWF9DQU5fUkFXX0gKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19GSUxURVIiLCBDQU5fUkFXX0ZJTFRFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfRVJSX0ZJTFRFUiIsIENBTl9SQVdfRVJSX0ZJTFRFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfTE9PUEJBQ0siLCBDQU5fUkFXX0xPT1BCQUNLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19SRUNWX09XTl9NU0dTIiwgQ0FOX1JBV19SRUNWX09XTl9NU0dTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX0ZJTFRFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19FUlJfRklMVEVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX0xPT1BCQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX1JFQ1ZfT1dOX01TR1MpOworI2VuZGlmCisjaWZkZWYgSEFWRV9MSU5VWF9DQU5fQkNNX0gKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fQkNNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9TRVRVUCIsIFRYX1NFVFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9ERUxFVEUiLCBUWF9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1JFQUQiLCBUWF9SRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9TRU5EIiwgVFhfU0VORCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfU0VUVVAiLCBSWF9TRVRVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfREVMRVRFIiwgUlhfREVMRVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9SRUFEIiwgUlhfUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfU1RBVFVTIiwgVFhfU1RBVFVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9FWFBJUkVEIiwgVFhfRVhQSVJFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfU1RBVFVTIiwgUlhfU1RBVFVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9USU1FT1VUIiwgUlhfVElNRU9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfQ0hBTkdFRCIsIFJYX0NIQU5HRUQpOwogI2VuZGlmCiAjaWZkZWYgU09MX1JEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfUkRTIiwgU09MX1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1JEUyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ0FOQ0VMX1NFTlRfVE8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NBTkNFTF9TRU5UX1RPIiwgUkRTX0NBTkNFTF9TRU5UX1RPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ0FOQ0VMX1NFTlRfVE8pOwogI2VuZGlmCiAjaWZkZWYgUkRTX0dFVF9NUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfR0VUX01SIiwgUkRTX0dFVF9NUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0dFVF9NUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfRlJFRV9NUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfRlJFRV9NUiIsIFJEU19GUkVFX01SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfRlJFRV9NUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkVDVkVSUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkVDVkVSUiIsIFJEU19SRUNWRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkVDVkVSUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ09OR19NT05JVE9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DT05HX01PTklUT1IiLCBSRFNfQ09OR19NT05JVE9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ09OR19NT05JVE9SKTsKICNlbmRpZgogI2lmZGVmIFJEU19HRVRfTVJfRk9SX0RFU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0dFVF9NUl9GT1JfREVTVCIsIFJEU19HRVRfTVJfRk9SX0RFU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19HRVRfTVJfRk9SX0RFU1QpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUCIsIElQUFJPVE9fSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUCIsIDApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSE9QT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0hPUE9QVFMiLCBJUFBST1RPX0hPUE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSE9QT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JQ01QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUNNUCIsIElQUFJPVE9fSUNNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JQ01QKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUNNUCIsIDEpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSUdNUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lHTVAiLCBJUFBST1RPX0lHTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSUdNUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19HR1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19HR1AiLCBJUFBST1RPX0dHUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19HR1ApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBWNAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQVjQiLCBJUFBST1RPX0lQVjQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBWNCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUFY2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBWNiIsIElQUFJPVE9fSVBWNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUFY2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUElQIiwgSVBQUk9UT19JUElQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQSVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVENQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVENQIiwgSVBQUk9UT19UQ1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVENQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVENQIiwgNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19FR1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19FR1AiLCBJUFBST1RPX0VHUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19FR1ApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUFVQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUFVQIiwgSVBQUk9UT19QVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUFVQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1VEUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1VEUCIsIElQUFJPVE9fVURQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1VEUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1VEUCIsIDE3KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lEUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lEUCIsIElQUFJPVE9fSURQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lEUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19IRUxMTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0hFTExPIiwgSVBQUk9UT19IRUxMTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19IRUxMTyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19ORAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX05EIiwgSVBQUk9UT19ORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19ORCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19UUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1RQIiwgSVBQUk9UT19UUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19UUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUFY2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBWNiIsIElQUFJPVE9fSVBWNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUFY2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1JPVVRJTkcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19ST1VUSU5HIiwgSVBQUk9UT19ST1VUSU5HKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1JPVVRJTkcpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRlJBR01FTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19GUkFHTUVOVCIsIElQUFJPVE9fRlJBR01FTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRlJBR01FTlQpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUlNWUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JTVlAiLCBJUFBST1RPX1JTVlApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUlNWUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19HUkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19HUkUiLCBJUFBST1RPX0dSRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19HUkUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRVNQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRVNQIiwgSVBQUk9UT19FU1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRVNQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0FICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fQUgiLCBJUFBST1RPX0FIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0FIKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX01PQklMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX01PQklMRSIsIElQUFJPVE9fTU9CSUxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX01PQklMRSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JQ01QVjYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JQ01QVjYiLCBJUFBST1RPX0lDTVBWNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JQ01QVjYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTk9ORQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX05PTkUiLCBJUFBST1RPX05PTkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTk9ORSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19EU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRFNUT1BUUyIsIElQUFJPVE9fRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19EU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1hUUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1hUUCIsIElQUFJPVE9fWFRQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1hUUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19FT04KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19FT04iLCBJUFBST1RPX0VPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19FT04pOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUElNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUElNIiwgSVBQUk9UT19QSU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUElNKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQQ09NUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQQ09NUCIsIElQUFJPVE9fSVBDT01QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQQ09NUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19WUlJQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVlJSUCIsIElQUFJPVE9fVlJSUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19WUlJQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1NDVFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19TQ1RQIiwgSVBQUk9UT19TQ1RQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1NDVFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fQklQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fQklQIiwgSVBQUk9UT19CSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fQklQKTsKICNlbmRpZgogLyoqLwogI2lmZGVmICBJUFBST1RPX1JBVwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JBVyIsIElQUFJPVE9fUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1JBVyk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JBVyIsIDI1NSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19NQVgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19NQVgiLCBJUFBST1RPX01BWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19NQVgpOwogI2VuZGlmCiAKICNpZmRlZiAgU1lTUFJPVE9fQ09OVFJPTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTWVNQUk9UT19DT05UUk9MIiwgU1lTUFJPVE9fQ09OVFJPTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1lTUFJPVE9fQ09OVFJPTCk7CiAjZW5kaWYKIAogICAgIC8qIFNvbWUgcG9ydCBjb25maWd1cmF0aW9uICovCiAjaWZkZWYgIElQUE9SVF9SRVNFUlZFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfUkVTRVJWRUQiLCBJUFBPUlRfUkVTRVJWRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUE9SVF9SRVNFUlZFRCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfUkVTRVJWRUQiLCAxMDI0KTsKICNlbmRpZgogI2lmZGVmICBJUFBPUlRfVVNFUlJFU0VSVkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9VU0VSUkVTRVJWRUQiLCBJUFBPUlRfVVNFUlJFU0VSVkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBPUlRfVVNFUlJFU0VSVkVEKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9VU0VSUkVTRVJWRUQiLCA1MDAwKTsKICNlbmRpZgogCiAgICAgLyogU29tZSByZXNlcnZlZCBJUCB2LjQgYWRkcmVzc2VzICovCiAjaWZkZWYgIElOQUREUl9BTlkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0FOWSIsIElOQUREUl9BTlkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9BTlkpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0FOWSIsIDB4MDAwMDAwMDApOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9CUk9BRENBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0JST0FEQ0FTVCIsIElOQUREUl9CUk9BRENBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9CUk9BRENBU1QpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0JST0FEQ0FTVCIsIDB4ZmZmZmZmZmYpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9MT09QQkFDSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTE9PUEJBQ0siLCBJTkFERFJfTE9PUEJBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9MT09QQkFDSyk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTE9PUEJBQ0siLCAweDdGMDAwMDAxKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfVU5TUEVDX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9VTlNQRUNfR1JPVVAiLCBJTkFERFJfVU5TUEVDX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfVU5TUEVDX0dST1VQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9VTlNQRUNfR1JPVVAiLCAweGUwMDAwMDAwKTsKICNlbmRpZgpAQCAtNjMxNywzNTQgKzY0NzAsMzUzIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9BTExIT1NUU19HUk9VUCIsIDB4ZTAwMDAwMDEpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9NQVhfTE9DQUxfR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX01BWF9MT0NBTF9HUk9VUCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5BRERSX01BWF9MT0NBTF9HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX01BWF9MT0NBTF9HUk9VUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTUFYX0xPQ0FMX0dST1VQIiwgMHhlMDAwMDBmZik7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX05PTkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX05PTkUiLCBJTkFERFJfTk9ORSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX05PTkUpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX05PTkUiLCAweGZmZmZmZmZmKTsKICNlbmRpZgogCiAgICAgLyogSVB2NCBbZ3NdZXRzb2Nrb3B0IG9wdGlvbnMgKi8KICNpZmRlZiAgSVBfT1BUSU9OUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9PUFRJT05TIiwgSVBfT1BUSU9OUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfT1BUSU9OUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfSERSSU5DTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9IRFJJTkNMIiwgSVBfSERSSU5DTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfSERSSU5DTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfVE9TCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1RPUyIsIElQX1RPUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfVE9TKTsKICNlbmRpZgogI2lmZGVmICBJUF9UVEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfVFRMIiwgSVBfVFRMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9UVEwpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFQ1ZPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFQ1ZPUFRTIiwgSVBfUkVDVk9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFQ1ZPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRUNWUkVUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRUNWUkVUT1BUUyIsIElQX1JFQ1ZSRVRPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRUNWUkVUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVDVkRTVEFERFIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVDVkRTVEFERFIiLCBJUF9SRUNWRFNUQUREUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVDVkRTVEFERFIpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVUT1BUUyIsIElQX1JFVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX01VTFRJQ0FTVF9JRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NVUxUSUNBU1RfSUYiLCBJUF9NVUxUSUNBU1RfSUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01VTFRJQ0FTVF9JRik7CiAjZW5kaWYKICNpZmRlZiAgSVBfTVVMVElDQVNUX1RUTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NVUxUSUNBU1RfVFRMIiwgSVBfTVVMVElDQVNUX1RUTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTVVMVElDQVNUX1RUTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfTVVMVElDQVNUX0xPT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTVVMVElDQVNUX0xPT1AiLCBJUF9NVUxUSUNBU1RfTE9PUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTVVMVElDQVNUX0xPT1ApOwogI2VuZGlmCiAjaWZkZWYgIElQX0FERF9NRU1CRVJTSElQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0FERF9NRU1CRVJTSElQIiwgSVBfQUREX01FTUJFUlNISVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0FERF9NRU1CRVJTSElQKTsKICNlbmRpZgogI2lmZGVmICBJUF9EUk9QX01FTUJFUlNISVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfRFJPUF9NRU1CRVJTSElQIiwgSVBfRFJPUF9NRU1CRVJTSElQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9EUk9QX01FTUJFUlNISVApOwogI2VuZGlmCiAjaWZkZWYgIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMKTsKICNlbmRpZgogI2lmZGVmICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1ApOwogI2VuZGlmCiAjaWZkZWYgIElQX01BWF9NRU1CRVJTSElQUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NQVhfTUVNQkVSU0hJUFMiLCBJUF9NQVhfTUVNQkVSU0hJUFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01BWF9NRU1CRVJTSElQUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfVFJBTlNQQVJFTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfVFJBTlNQQVJFTlQiLCBJUF9UUkFOU1BBUkVOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfVFJBTlNQQVJFTlQpOwogI2VuZGlmCiAKICAgICAvKiBJUHY2IFtnc11ldHNvY2tvcHQgb3B0aW9ucywgZGVmaW5lZCBpbiBSRkMyNTUzICovCiAjaWZkZWYgIElQVjZfSk9JTl9HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0pPSU5fR1JPVVAiLCBJUFY2X0pPSU5fR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfSk9JTl9HUk9VUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9MRUFWRV9HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0xFQVZFX0dST1VQIiwgSVBWNl9MRUFWRV9HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9MRUFWRV9HUk9VUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9NVUxUSUNBU1RfSE9QUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X01VTFRJQ0FTVF9IT1BTIiwgSVBWNl9NVUxUSUNBU1RfSE9QUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9NVUxUSUNBU1RfSE9QUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9NVUxUSUNBU1RfSUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9NVUxUSUNBU1RfSUYiLCBJUFY2X01VTFRJQ0FTVF9JRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9NVUxUSUNBU1RfSUYpOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTVVMVElDQVNUX0xPT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9NVUxUSUNBU1RfTE9PUCIsIElQVjZfTVVMVElDQVNUX0xPT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTVVMVElDQVNUX0xPT1ApOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfVU5JQ0FTVF9IT1BTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVU5JQ0FTVF9IT1BTIiwgSVBWNl9VTklDQVNUX0hPUFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVU5JQ0FTVF9IT1BTKTsKICNlbmRpZgogICAgIC8qIEFkZGl0aW9uYWwgSVBWNiBzb2NrZXQgb3B0aW9ucywgZGVmaW5lZCBpbiBSRkMgMzQ5MyAqLwogI2lmZGVmIElQVjZfVjZPTkxZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVjZPTkxZIiwgSVBWNl9WNk9OTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVjZPTkxZKTsKICNlbmRpZgogICAgIC8qIEFkdmFuY2VkIElQVjYgc29ja2V0IG9wdGlvbnMsIGZyb20gUkZDIDM1NDIgKi8KICNpZmRlZiBJUFY2X0NIRUNLU1VNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfQ0hFQ0tTVU0iLCBJUFY2X0NIRUNLU1VNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0NIRUNLU1VNKTsKICNlbmRpZgogI2lmZGVmIElQVjZfRE9OVEZSQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9ET05URlJBRyIsIElQVjZfRE9OVEZSQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfRE9OVEZSQUcpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9EU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfRFNUT1BUUyIsIElQVjZfRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9EU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfSE9QTElNSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9IT1BMSU1JVCIsIElQVjZfSE9QTElNSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfSE9QTElNSVQpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9IT1BPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfSE9QT1BUUyIsIElQVjZfSE9QT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9IT1BPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfTkVYVEhPUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X05FWFRIT1AiLCBJUFY2X05FWFRIT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTkVYVEhPUCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1BBVEhNVFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9QQVRITVRVIiwgSVBWNl9QQVRITVRVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1BBVEhNVFUpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9QS1RJTkZPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUEtUSU5GTyIsIElQVjZfUEtUSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9QS1RJTkZPKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVkRTVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWRFNUT1BUUyIsIElQVjZfUkVDVkRTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVkRTVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWSE9QTElNSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWSE9QTElNSVQiLCBJUFY2X1JFQ1ZIT1BMSU1JVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWSE9QTElNSVQpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWSE9QT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZIT1BPUFRTIiwgSVBWNl9SRUNWSE9QT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWSE9QT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZQS1RJTkZPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlBLVElORk8iLCBJUFY2X1JFQ1ZQS1RJTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZQS1RJTkZPKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlJUSERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlJUSERSIiwgSVBWNl9SRUNWUlRIRFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlJUSERSKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlRDTEFTUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZUQ0xBU1MiLCBJUFY2X1JFQ1ZUQ0xBU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlRDTEFTUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JUSERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUlRIRFIiLCBJUFY2X1JUSERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JUSERSKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUlRIRFJEU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUlRIRFJEU1RPUFRTIiwgSVBWNl9SVEhEUkRTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUlRIRFJEU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUlRIRFJfVFlQRV8wCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUlRIRFJfVFlQRV8wIiwgSVBWNl9SVEhEUl9UWVBFXzApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUlRIRFJfVFlQRV8wKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlBBVEhNVFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWUEFUSE1UVSIsIElQVjZfUkVDVlBBVEhNVFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlBBVEhNVFUpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9UQ0xBU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9UQ0xBU1MiLCBJUFY2X1RDTEFTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9UQ0xBU1MpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9VU0VfTUlOX01UVQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1VTRV9NSU5fTVRVIiwgSVBWNl9VU0VfTUlOX01UVSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9VU0VfTUlOX01UVSk7CiAjZW5kaWYKIAogICAgIC8qIFRDUCBvcHRpb25zICovCiAjaWZkZWYgIFRDUF9OT0RFTEFZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9OT0RFTEFZIiwgVENQX05PREVMQVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9OT0RFTEFZKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfTUFYU0VHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9NQVhTRUciLCBUQ1BfTUFYU0VHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfTUFYU0VHKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfQ09SSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfQ09SSyIsIFRDUF9DT1JLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfQ09SSyk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0tFRVBJRExFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9LRUVQSURMRSIsIFRDUF9LRUVQSURMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0tFRVBJRExFKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfS0VFUElOVFZMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9LRUVQSU5UVkwiLCBUQ1BfS0VFUElOVFZMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfS0VFUElOVFZMKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfS0VFUENOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfS0VFUENOVCIsIFRDUF9LRUVQQ05UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfS0VFUENOVCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX1NZTkNOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfU1lOQ05UIiwgVENQX1NZTkNOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX1NZTkNOVCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0xJTkdFUjIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0xJTkdFUjIiLCBUQ1BfTElOR0VSMik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0xJTkdFUjIpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9ERUZFUl9BQ0NFUFQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0RFRkVSX0FDQ0VQVCIsIFRDUF9ERUZFUl9BQ0NFUFQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9ERUZFUl9BQ0NFUFQpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9XSU5ET1dfQ0xBTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX1dJTkRPV19DTEFNUCIsIFRDUF9XSU5ET1dfQ0xBTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9XSU5ET1dfQ0xBTVApOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9JTkZPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9JTkZPIiwgVENQX0lORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9JTkZPKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfUVVJQ0tBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX1FVSUNLQUNLIiwgVENQX1FVSUNLQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfUVVJQ0tBQ0spOwogI2VuZGlmCi0KKyNpZmRlZiAgVENQX0ZBU1RPUEVOCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0ZBU1RPUEVOKTsKKyNlbmRpZgogCiAgICAgLyogSVBYIG9wdGlvbnMgKi8KICNpZmRlZiAgSVBYX1RZUEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBYX1RZUEUiLCBJUFhfVFlQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBYX1RZUEUpOwogI2VuZGlmCiAKIC8qIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKi8KICNpZmRlZiBSRFNfQ01TR19SRE1BX0FSR1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9BUkdTIiwgUkRTX0NNU0dfUkRNQV9BUkdTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX0FSR1MpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9ERVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfREVTVCIsIFJEU19DTVNHX1JETUFfREVTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9ERVNUKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfTUFQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfTUFQIiwgUkRTX0NNU0dfUkRNQV9NQVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfTUFQKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfU1RBVFVTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfU1RBVFVTIiwgUkRTX0NNU0dfUkRNQV9TVEFUVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfU1RBVFVTKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfVVBEQVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfVVBEQVRFIiwgUkRTX0NNU0dfUkRNQV9VUERBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfVVBEQVRFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX1JFQURXUklURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9SRUFEV1JJVEUiLCBSRFNfUkRNQV9SRUFEV1JJVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX1JFQURXUklURSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9GRU5DRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9GRU5DRSIsIFJEU19SRE1BX0ZFTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9GRU5DRSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9JTlZBTElEQVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX0lOVkFMSURBVEUiLCBSRFNfUkRNQV9JTlZBTElEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9JTlZBTElEQVRFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX1VTRV9PTkNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX1VTRV9PTkNFIiwgUkRTX1JETUFfVVNFX09OQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX1VTRV9PTkNFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX0RPTlRXQUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX0RPTlRXQUlUIiwgUkRTX1JETUFfRE9OVFdBSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX0RPTlRXQUlUKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX05PVElGWV9NRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9OT1RJRllfTUUiLCBSRFNfUkRNQV9OT1RJRllfTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX05PVElGWV9NRSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9TSUxFTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfU0lMRU5UIiwgUkRTX1JETUFfU0lMRU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9TSUxFTlQpOwogI2VuZGlmCiAKICAgICAvKiBnZXR7YWRkcixuYW1lfWluZm8gcGFyYW1ldGVycyAqLwogI2lmZGVmIEVBSV9BRERSRkFNSUxZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9BRERSRkFNSUxZIiwgRUFJX0FERFJGQU1JTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9BRERSRkFNSUxZKTsKICNlbmRpZgogI2lmZGVmIEVBSV9BR0FJTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQUdBSU4iLCBFQUlfQUdBSU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9BR0FJTik7CiAjZW5kaWYKICNpZmRlZiBFQUlfQkFERkxBR1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0JBREZMQUdTIiwgRUFJX0JBREZMQUdTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQkFERkxBR1MpOwogI2VuZGlmCiAjaWZkZWYgRUFJX0ZBSUwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0ZBSUwiLCBFQUlfRkFJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0ZBSUwpOwogI2VuZGlmCiAjaWZkZWYgRUFJX0ZBTUlMWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfRkFNSUxZIiwgRUFJX0ZBTUlMWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0ZBTUlMWSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTUVNT1JZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9NRU1PUlkiLCBFQUlfTUVNT1JZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTUVNT1JZKTsKICNlbmRpZgogI2lmZGVmIEVBSV9OT0RBVEEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX05PREFUQSIsIEVBSV9OT0RBVEEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9OT0RBVEEpOwogI2VuZGlmCiAjaWZkZWYgRUFJX05PTkFNRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTk9OQU1FIiwgRUFJX05PTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX05PTkFNRSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfT1ZFUkZMT1cKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX09WRVJGTE9XIiwgRUFJX09WRVJGTE9XKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfT1ZFUkZMT1cpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1NFUlZJQ0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1NFUlZJQ0UiLCBFQUlfU0VSVklDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1NFUlZJQ0UpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1NPQ0tUWVBFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9TT0NLVFlQRSIsIEVBSV9TT0NLVFlQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1NPQ0tUWVBFKTsKICNlbmRpZgogI2lmZGVmIEVBSV9TWVNURU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1NZU1RFTSIsIEVBSV9TWVNURU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9TWVNURU0pOwogI2VuZGlmCiAjaWZkZWYgRUFJX0JBREhJTlRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9CQURISU5UUyIsIEVBSV9CQURISU5UUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0JBREhJTlRTKTsKICNlbmRpZgogI2lmZGVmIEVBSV9QUk9UT0NPTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfUFJPVE9DT0wiLCBFQUlfUFJPVE9DT0wpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9QUk9UT0NPTCk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTUFYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9NQVgiLCBFQUlfTUFYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTUFYKTsKICNlbmRpZgogI2lmZGVmIEFJX1BBU1NJVkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfUEFTU0lWRSIsIEFJX1BBU1NJVkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX1BBU1NJVkUpOwogI2VuZGlmCiAjaWZkZWYgQUlfQ0FOT05OQU1FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0NBTk9OTkFNRSIsIEFJX0NBTk9OTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfQ0FOT05OQU1FKTsKICNlbmRpZgogI2lmZGVmIEFJX05VTUVSSUNIT1NUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX05VTUVSSUNIT1NUIiwgQUlfTlVNRVJJQ0hPU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX05VTUVSSUNIT1NUKTsKICNlbmRpZgogI2lmZGVmIEFJX05VTUVSSUNTRVJWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX05VTUVSSUNTRVJWIiwgQUlfTlVNRVJJQ1NFUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX05VTUVSSUNTRVJWKTsKICNlbmRpZgogI2lmZGVmIEFJX01BU0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfTUFTSyIsIEFJX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX01BU0spOwogI2VuZGlmCiAjaWZkZWYgQUlfQUxMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0FMTCIsIEFJX0FMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfQUxMKTsKICNlbmRpZgogI2lmZGVmIEFJX1Y0TUFQUEVEX0NGRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9WNE1BUFBFRF9DRkciLCBBSV9WNE1BUFBFRF9DRkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX1Y0TUFQUEVEX0NGRyk7CiAjZW5kaWYKICNpZmRlZiBBSV9BRERSQ09ORklHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0FERFJDT05GSUciLCBBSV9BRERSQ09ORklHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9BRERSQ09ORklHKTsKICNlbmRpZgogI2lmZGVmIEFJX1Y0TUFQUEVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX1Y0TUFQUEVEIiwgQUlfVjRNQVBQRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX1Y0TUFQUEVEKTsKICNlbmRpZgogI2lmZGVmIEFJX0RFRkFVTFQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfREVGQVVMVCIsIEFJX0RFRkFVTFQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0RFRkFVTFQpOwogI2VuZGlmCiAjaWZkZWYgTklfTUFYSE9TVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9NQVhIT1NUIiwgTklfTUFYSE9TVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTUFYSE9TVCk7CiAjZW5kaWYKICNpZmRlZiBOSV9NQVhTRVJWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX01BWFNFUlYiLCBOSV9NQVhTRVJWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9NQVhTRVJWKTsKICNlbmRpZgogI2lmZGVmIE5JX05PRlFETgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OT0ZRRE4iLCBOSV9OT0ZRRE4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX05PRlFETik7CiAjZW5kaWYKICNpZmRlZiBOSV9OVU1FUklDSE9TVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OVU1FUklDSE9TVCIsIE5JX05VTUVSSUNIT1NUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OVU1FUklDSE9TVCk7CiAjZW5kaWYKICNpZmRlZiBOSV9OQU1FUkVRRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OQU1FUkVRRCIsIE5JX05BTUVSRVFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OQU1FUkVRRCk7CiAjZW5kaWYKICNpZmRlZiBOSV9OVU1FUklDU0VSVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9OVU1FUklDU0VSViIsIE5JX05VTUVSSUNTRVJWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OVU1FUklDU0VSVik7CiAjZW5kaWYKICNpZmRlZiBOSV9ER1JBTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9ER1JBTSIsIE5JX0RHUkFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9ER1JBTSk7CiAjZW5kaWYKIAogICAgIC8qIHNodXRkb3duKCkgcGFyYW1ldGVycyAqLwogI2lmZGVmIFNIVVRfUkQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRCIsIFNIVVRfUkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNIVVRfUkQpOwogI2VsaWYgZGVmaW5lZChTRF9SRUNFSVZFKQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEIiwgU0RfUkVDRUlWRSk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEIiwgMCk7CiAjZW5kaWYKICNpZmRlZiBTSFVUX1dSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfV1IiLCBTSFVUX1dSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTSFVUX1dSKTsKICNlbGlmIGRlZmluZWQoU0RfU0VORCkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9XUiIsIFNEX1NFTkQpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9XUiIsIDEpOwogI2VuZGlmCiAjaWZkZWYgU0hVVF9SRFdSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkRXUiIsIFNIVVRfUkRXUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0hVVF9SRFdSKTsKICNlbGlmIGRlZmluZWQoU0RfQk9USCkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRFdSIiwgU0RfQk9USCk7CiAjZWxzZQpAQCAtNjY4NCwxNCArNjgzNiwxNCBAQAogICAgICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sIG5hbWVzW2ldLCB0bXApOwogICAgICAgICB9CiAgICAgfQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfT0ZGIiwgUkNWQUxMX09GRik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9PTiIsIFJDVkFMTF9PTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9TT0NLRVRMRVZFTE9OTFkiLCBSQ1ZBTExfU09DS0VUTEVWRUxPTkxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfT0ZGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9TT0NLRVRMRVZFTE9OTFkpOwogI2lmZGVmIFJDVkFMTF9JUExFVkVMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9JUExFVkVMIiwgUkNWQUxMX0lQTEVWRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9JUExFVkVMKTsKICNlbmRpZgogI2lmZGVmIFJDVkFMTF9NQVgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX01BWCIsIFJDVkFMTF9NQVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9NQVgpOwogI2VuZGlmCiAjZW5kaWYgLyogX01TVENQSVBfICovCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmggYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCmluZGV4IDA0MzU4NzguLmI4M2Y5YWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaApAQCAtOCw3ICs4LDcgQEAKICMgICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjIGVuZGlmCiAjIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSMgaWYgIShkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IChkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfVkFDUFApKSkKKyMgaWYgIWRlZmluZWQoX19DWUdXSU5fXykKICMgIGluY2x1ZGUgPG5ldGluZXQvdGNwLmg+CiAjIGVuZGlmCiAKQEAgLTgwLDYgKzgwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvY2FuL3Jhdy5oPgogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorI2luY2x1ZGUgPGxpbnV4L2Nhbi9iY20uaD4KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9TWVNfU1lTX0RPTUFJTl9ICiAjaW5jbHVkZSA8c3lzL3N5c19kb21haW4uaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcHdkbW9kdWxlLmMgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwppbmRleCAxOTRhZTE5Li5kMDZmOGNlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwpAQCAtMTk2LDkgKzE5NiwxMSBAQAogICAgIG09UHlNb2R1bGVfQ3JlYXRlKCZzcHdkbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RTcHdkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3Nwd2RfdHlwZV9kZXNjKTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0U3B3ZFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3Nwd2RfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSAmU3RydWN0U3B3ZFR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3Nwd2QiLCAoUHlPYmplY3QgKikgJlN0cnVjdFNwd2RUeXBlKTsKICAgICBpbml0aWFsaXplZCA9IDE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZS5oIGIvTW9kdWxlcy9zcmUuaAppbmRleCAwYThmMGNmLi40MmZlMjhkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NyZS5oCisrKyBiL01vZHVsZXMvc3JlLmgKQEAgLTMxLDkgKzMxLDcgQEAKICAgICBQeU9iamVjdCogcGF0dGVybjsgLyogcGF0dGVybiBzb3VyY2UgKG9yIE5vbmUpICovCiAgICAgaW50IGZsYWdzOyAvKiBmbGFncyB1c2VkIHdoZW4gY29tcGlsaW5nIHBhdHRlcm4gc291cmNlICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplOyAvKiBwYXR0ZXJuIGNoYXJzaXplIChvciAtMSkgKi8KLSAgICBpbnQgY2hhcnNpemU7Ci0gICAgUHlfYnVmZmVyIHZpZXc7CisgICAgaW50IGlzYnl0ZXM7IC8qIHBhdHRlcm4gdHlwZSAoMSAtIGJ5dGVzLCAwIC0gc3RyaW5nLCAtMSAtIE5vbmUpICovCiAgICAgLyogcGF0dGVybiBjb2RlICovCiAgICAgUHlfc3NpemVfdCBjb2Rlc2l6ZTsKICAgICBTUkVfQ09ERSBjb2RlWzFdOwpAQCAtNzMsOSArNzEsOCBAQAogICAgIC8qIGF0dHJpYnV0ZXMgZm9yIHRoZSBtYXRjaCBvYmplY3QgKi8KICAgICBQeU9iamVjdCogc3RyaW5nOwogICAgIFB5X3NzaXplX3QgcG9zLCBlbmRwb3M7Ci0gICAgLyogY2hhcmFjdGVyIHNpemUgKi8KLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZTsgLyoga2luZCBvZiB0aGluZzogMSAtIGJ5dGVzLCAyLzQgLSB1bmljb2RlICovCi0gICAgaW50IGNoYXJzaXplOworICAgIGludCBpc2J5dGVzOworICAgIGludCBjaGFyc2l6ZTsgLyogY2hhcmFjdGVyIHNpemUgKi8KICAgICAvKiByZWdpc3RlcnMgKi8KICAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKICAgICBQeV9zc2l6ZV90IGxhc3RtYXJrOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcmVfbGliLmggYi9Nb2R1bGVzL3NyZV9saWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTRjMjJhCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9zcmVfbGliLmgKQEAgLTAsMCArMSwxMzI5IEBACisvKgorICogU2VjcmV0IExhYnMnIFJlZ3VsYXIgRXhwcmVzc2lvbiBFbmdpbmUKKyAqCisgKiByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgZW5naW5lCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDEgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNlZSB0aGUgX3NyZS5jIGZpbGUgZm9yIGluZm9ybWF0aW9uIG9uIHVzYWdlIGFuZCByZWRpc3RyaWJ1dGlvbi4KKyAqLworCisvKiBTdHJpbmcgbWF0Y2hpbmcgZW5naW5lICovCisKKy8qIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCB0aHJlZSB0aW1lcywgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldHRpbmdzICovCisKK0xPQ0FMKGludCkKK1NSRShhdCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NIQVIqIHB0ciwgU1JFX0NPREUgYXQpCit7CisgICAgLyogY2hlY2sgaWYgcG9pbnRlciBpcyBhdCBnaXZlbiBwb3NpdGlvbiAqLworCisgICAgUHlfc3NpemVfdCB0aGlzcCwgdGhhdHA7CisKKyAgICBzd2l0Y2ggKGF0KSB7CisKKyAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkc6CisgICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX1NUUklORzoKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nKTsKKworICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19MSU5FOgorICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcgfHwKKyAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIHB0clstMV0pKTsKKworICAgIGNhc2UgU1JFX0FUX0VORDoKKyAgICAgICAgcmV0dXJuICgoKHZvaWQqKSAocHRyKzEpID09IHN0YXRlLT5lbmQgJiYKKyAgICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBwdHJbMF0pKSB8fAorICAgICAgICAgICAgICAgICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKSk7CisKKyAgICBjYXNlIFNSRV9BVF9FTkRfTElORToKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kIHx8CisgICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBwdHJbMF0pKTsKKworICAgIGNhc2UgU1JFX0FUX0VORF9TVFJJTkc6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCk7CisKKyAgICBjYXNlIFNSRV9BVF9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfTk9OX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9MT0NfQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfTE9DX05PTl9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9VTklfQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfVU5JX05PTl9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7CisKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworTE9DQUwoaW50KQorU1JFKGNoYXJzZXQpKFNSRV9DT0RFKiBzZXQsIFNSRV9DT0RFIGNoKQoreworICAgIC8qIGNoZWNrIGlmIGNoYXJhY3RlciBpcyBhIG1lbWJlciBvZiB0aGUgZ2l2ZW4gc2V0ICovCisKKyAgICBpbnQgb2sgPSAxOworCisgICAgZm9yICg7OykgeworICAgICAgICBzd2l0Y2ggKCpzZXQrKykgeworCisgICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6CisgICAgICAgICAgICByZXR1cm4gIW9rOworCisgICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6CisgICAgICAgICAgICAvKiA8TElURVJBTD4gPGNvZGU+ICovCisgICAgICAgICAgICBpZiAoY2ggPT0gc2V0WzBdKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQ0FURUdPUlk6CisgICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLworICAgICAgICAgICAgaWYgKHNyZV9jYXRlZ29yeShzZXRbMF0sIChpbnQpIGNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0NIQVJTRVQ6CisgICAgICAgICAgICAvKiA8Q0hBUlNFVD4gPGJpdG1hcD4gKi8KKyAgICAgICAgICAgIGlmIChjaCA8IDI1NiAmJgorICAgICAgICAgICAgICAgIChzZXRbY2gvU1JFX0NPREVfQklUU10gJiAoMXUgPDwgKGNoICYgKFNSRV9DT0RFX0JJVFMtMSkpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0ICs9IDI1Ni9TUkVfQ09ERV9CSVRTOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfUkFOR0U6CisgICAgICAgICAgICAvKiA8UkFOR0U+IDxsb3dlcj4gPHVwcGVyPiAqLworICAgICAgICAgICAgaWYgKHNldFswXSA8PSBjaCAmJiBjaCA8PSBzZXRbMV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0ICs9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9ORUdBVEU6CisgICAgICAgICAgICBvayA9ICFvazsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0JJR0NIQVJTRVQ6CisgICAgICAgICAgICAvKiA8QklHQ0hBUlNFVD4gPGJsb2NrY291bnQ+IDwyNTYgYmxvY2tpbmRpY2VzPiA8YmxvY2tzPiAqLworICAgICAgICB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50LCBibG9jazsKKyAgICAgICAgICAgIGNvdW50ID0gKihzZXQrKyk7CisKKyAgICAgICAgICAgIGlmIChjaCA8IDB4MTAwMDB1KQorICAgICAgICAgICAgICAgIGJsb2NrID0gKCh1bnNpZ25lZCBjaGFyKilzZXQpW2NoID4+IDhdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJsb2NrID0gLTE7CisgICAgICAgICAgICBzZXQgKz0gMjU2L3NpemVvZihTUkVfQ09ERSk7CisgICAgICAgICAgICBpZiAoYmxvY2sgPj0wICYmCisgICAgICAgICAgICAgICAgKHNldFsoYmxvY2sgKiAyNTYgKyAoY2ggJiAyNTUpKS9TUkVfQ09ERV9CSVRTXSAmCisgICAgICAgICAgICAgICAgICAgICgxdSA8PCAoY2ggJiAoU1JFX0NPREVfQklUUy0xKSkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQgKz0gY291bnQgKiAoMjU2L1NSRV9DT0RFX0JJVFMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogaW50ZXJuYWwgZXJyb3IgLS0gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgaXQKKyAgICAgICAgICAgICAgIGhlcmUsIHNvIGxldCdzIGp1c3QgcHJldGVuZCBpdCBkaWRuJ3QgbWF0Y2guLi4gKi8KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorfQorCitMT0NBTChQeV9zc2l6ZV90KSBTUkUobWF0Y2gpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKTsKKworTE9DQUwoUHlfc3NpemVfdCkKK1NSRShjb3VudCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4sIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgU1JFX0NPREUgY2hyOworICAgIFNSRV9DSEFSIGM7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiAqKXN0YXRlLT5wdHI7CisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgLyogYWRqdXN0IGVuZCAqLworICAgIGlmIChtYXhjb3VudCA8IGVuZCAtIHB0ciAmJiBtYXhjb3VudCAhPSBTUkVfTUFYUkVQRUFUKQorICAgICAgICBlbmQgPSBwdHIgKyBtYXhjb3VudDsKKworICAgIHN3aXRjaCAocGF0dGVyblswXSkgeworCisgICAgY2FzZSBTUkVfT1BfSU46CisgICAgICAgIC8qIHJlcGVhdGVkIHNldCAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBJTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgU1JFKGNoYXJzZXQpKHBhdHRlcm4gKyAyLCAqcHRyKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0FOWToKKyAgICAgICAgLyogcmVwZWF0ZWQgZG90IHdpbGRjYXJkLiAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBBTllcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkVfSVNfTElORUJSRUFLKCpwdHIpKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfQU5ZX0FMTDoKKyAgICAgICAgLyogcmVwZWF0ZWQgZG90IHdpbGRjYXJkLiAgc2tpcCB0byB0aGUgZW5kIG9mIHRoZSB0YXJnZXQKKyAgICAgICAgICAgc3RyaW5nLCBhbmQgYmFja3RyYWNrIGZyb20gdGhlcmUgKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZX0FMTFxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHB0ciA9IGVuZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgorICAgICAgICAvKiByZXBlYXRlZCBsaXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIExJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIGMgPSAoU1JFX0NIQVIpIGNocjsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGlmICgoU1JFX0NPREUpIGMgIT0gY2hyKQorICAgICAgICAgICAgOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgPT0gYykKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAvKiByZXBlYXRlZCBsaXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIExJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKCpwdHIpID09IGNocikKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgorICAgICAgICAvKiByZXBlYXRlZCBub24tbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBOT1RfTElURVJBTCAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgYyA9IChTUkVfQ0hBUikgY2hyOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgaWYgKChTUkVfQ09ERSkgYyAhPSBjaHIpCisgICAgICAgICAgICBwdHIgPSBlbmQ7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSBjKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAvKiByZXBlYXRlZCBub24tbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBOT1RfTElURVJBTF9JR05PUkUgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBzdGF0ZS0+bG93ZXIoKnB0cikgIT0gY2hyKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogcmVwZWF0ZWQgc2luZ2xlIGNoYXJhY3RlciBwYXR0ZXJuICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIFNVQlBBVFRFUk5cbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICB3aGlsZSAoKFNSRV9DSEFSKikgc3RhdGUtPnB0ciA8IGVuZCkgeworICAgICAgICAgICAgaSA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4pOworICAgICAgICAgICAgaWYgKGkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgaWYgKCFpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKKyAgICAgICAgICAgICAgIChTUkVfQ0hBUiopIHN0YXRlLT5wdHIgLSBwdHIpKTsKKyAgICAgICAgcmV0dXJuIChTUkVfQ0hBUiopIHN0YXRlLT5wdHIgLSBwdHI7CisgICAgfQorCisgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAorICAgICAgICAgICBwdHIgLSAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyKSk7CisgICAgcmV0dXJuIHB0ciAtIChTUkVfQ0hBUiopIHN0YXRlLT5wdHI7Cit9CisKKyNpZiAwIC8qIG5vdCB1c2VkIGluIHRoaXMgcmVsZWFzZSAqLworTE9DQUwoaW50KQorU1JFKGluZm8pKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIC8qIGNoZWNrIGlmIGFuIFNSRV9PUF9JTkZPIGJsb2NrIG1hdGNoZXMgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIFNSRV9DT0RFIG9iamVjdHMgdG8gc2tpcCBpZiBzdWNjZXNzZnVsLCAwCisgICAgICAgaWYgbm8gbWF0Y2ggKi8KKworICAgIFNSRV9DSEFSKiBlbmQgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+ZW5kOworICAgIFNSRV9DSEFSKiBwdHIgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyOworICAgIFB5X3NzaXplX3QgaTsKKworICAgIC8qIGNoZWNrIG1pbmltYWwgbGVuZ3RoICovCisgICAgaWYgKHBhdHRlcm5bM10gJiYgZW5kIC0gcHRyIDwgcGF0dGVyblszXSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBjaGVjayBrbm93biBwcmVmaXggKi8KKyAgICBpZiAocGF0dGVyblsyXSAmIFNSRV9JTkZPX1BSRUZJWCAmJiBwYXR0ZXJuWzVdID4gMSkgeworICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybls1XTsgaSsrKQorICAgICAgICAgICAgaWYgKChTUkVfQ09ERSkgcHRyW2ldICE9IHBhdHRlcm5bNyArIGldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcGF0dGVyblswXSArIDIgKiBwYXR0ZXJuWzZdOworICAgIH0KKyAgICByZXR1cm4gcGF0dGVyblswXTsKK30KKyNlbmRpZgorCisvKiBUaGUgbWFjcm9zIGJlbG93IHNob3VsZCBiZSB1c2VkIHRvIHByb3RlY3QgcmVjdXJzaXZlIFNSRShtYXRjaCkoKQorICogY2FsbHMgdGhhdCAqZmFpbGVkKiBhbmQgZG8gKm5vdCogcmV0dXJuIGltbWVkaWF0ZWx5IChJT1csIHRob3NlCisgKiB0aGF0IHdpbGwgYmFja3RyYWNrKS4gRXhwbGFpbmluZzoKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgdHJ1ZTogdGhhdCdzIHVzdWFsbHkgYSBzdWNjZXNzCisgKiAgIChiZXNpZGVzIGF0eXBpY2FsIGNhc2VzIGxpa2UgQVNTRVJUX05PVCksIHRoZXJlZm9yZSB0aGVyZSdzIG5vCisgKiAgIHJlYXNvbiB0byByZXN0b3JlIGxhc3RtYXJrOworICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCBmYWxzZSBidXQgdGhlIGN1cnJlbnQgU1JFKG1hdGNoKSgpCisgKiAgIGlzIHJldHVybmluZyB0byB0aGUgY2FsbGVyOiBJZiB0aGUgY3VycmVudCBTUkUobWF0Y2gpKCkgaXMgdGhlCisgKiAgIHRvcCBmdW5jdGlvbiBvZiB0aGUgcmVjdXJzaW9uLCByZXR1cm5pbmcgZmFsc2Ugd2lsbCBiZSBhIG1hdGNoaW5nCisgKiAgIGZhaWx1cmUsIGFuZCBpdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBsYXN0bWFyayBpcyBwb2ludGluZyB0by4KKyAqICAgSWYgaXQncyAqbm90KiB0aGUgdG9wIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGEgcmVjdXJzaXZlIFNSRShtYXRjaCkoKQorICogICBmYWlsdXJlIGJ5IGl0c2VsZiwgYW5kIHRoZSBjYWxsaW5nIFNSRShtYXRjaCkoKSB3aWxsIGhhdmUgdG8gZGVhbAorICogICB3aXRoIHRoZSBmYWlsdXJlIGJ5IHRoZSBzYW1lIHJ1bGVzIGV4cGxhaW5lZCBoZXJlIChpdCB3aWxsIHJlc3RvcmUKKyAqICAgbGFzdG1hcmsgYnkgaXRzZWxmIGlmIG5lY2Vzc2FyeSk7CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIGZhbHNlLCBhbmQgd2lsbCBjb250aW51ZSB0aGUKKyAqICAgb3V0c2lkZSAnZm9yJyBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCB3aGVuIGJyZWFraW5nLCBzaW5jZSB0aGUgbmV4dAorICogICBPUCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcms7CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIGZhbHNlLCBhbmQgd2lsbCBiZSBjYWxsZWQgYWdhaW4KKyAqICAgaW5zaWRlIGEgbG9jYWwgZm9yL3doaWxlIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIGJldHdlZW4gZWFjaAorICogICBsb29wIGl0ZXJhdGlvbiwgc2luY2UgdGhlIHJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgY291bGQgZG8gYW55dGhpbmcsCisgKiAgIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcmsuCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIHRoZSBkaXNjdXNzaW9uIGF0IFNGIHBhdGNoICM3MTI5MDAuCisgKi8KKyNkZWZpbmUgTEFTVE1BUktfU0FWRSgpICAgICBcCisgICAgZG8geyBcCisgICAgICAgIGN0eC0+bGFzdG1hcmsgPSBzdGF0ZS0+bGFzdG1hcms7IFwKKyAgICAgICAgY3R4LT5sYXN0aW5kZXggPSBzdGF0ZS0+bGFzdGluZGV4OyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTEFTVE1BUktfUkVTVE9SRSgpICBcCisgICAgZG8geyBcCisgICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGN0eC0+bGFzdG1hcms7IFwKKyAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGN0eC0+bGFzdGluZGV4OyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBSRVRVUk5fRVJST1IoaSkgZG8geyByZXR1cm4gaTsgfSB3aGlsZSgwKQorI2RlZmluZSBSRVRVUk5fRkFJTFVSRSBkbyB7IHJldCA9IDA7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQorI2RlZmluZSBSRVRVUk5fU1VDQ0VTUyBkbyB7IHJldCA9IDE7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQorCisjZGVmaW5lIFJFVFVSTl9PTl9FUlJPUihpKSBcCisgICAgZG8geyBpZiAoaSA8IDApIFJFVFVSTl9FUlJPUihpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVUVVJOX09OX1NVQ0NFU1MoaSkgXAorICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA+IDApIFJFVFVSTl9TVUNDRVNTOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRVRVUk5fT05fRkFJTFVSRShpKSBcCisgICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID09IDApIFJFVFVSTl9GQUlMVVJFOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNGWSh4KSAjeAorCisjZGVmaW5lIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHR5cGUsIHB0cikgXAorZG8geyBcCisgICAgYWxsb2NfcG9zID0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZTsgXAorICAgIFRSQUNFKCgiYWxsb2NhdGluZyAlcyBpbiAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIFNGWSh0eXBlKSwgYWxsb2NfcG9zLCBzaXplb2YodHlwZSkpKTsgXAorICAgIGlmIChzaXplb2YodHlwZSkgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gYWxsb2NfcG9zKSB7IFwKKyAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemVvZih0eXBlKSk7IFwKKyAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAorICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAorICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsgXAorICAgIH0gXAorICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srYWxsb2NfcG9zKTsgXAorICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgKz0gc2l6ZW9mKHR5cGUpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCB0eXBlLCBwdHIsIHBvcykgXAorZG8geyBcCisgICAgVFJBQ0UoKCJsb29raW5nIHVwICVzIGF0ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIFNGWSh0eXBlKSwgcG9zKSk7IFwKKyAgICBwdHIgPSAodHlwZSopKHN0YXRlLT5kYXRhX3N0YWNrK3Bvcyk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19QVVNIKHN0YXRlLCBkYXRhLCBzaXplKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImNvcHkgZGF0YSBpbiAlcCB0byAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIHNpemUpKTsgXAorICAgIGlmIChzaXplID4gc3RhdGUtPmRhdGFfc3RhY2tfc2l6ZSAtIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UpIHsgXAorICAgICAgICBpbnQgaiA9IGRhdGFfc3RhY2tfZ3JvdyhzdGF0ZSwgc2l6ZSk7IFwKKyAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAorICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAorICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsgXAorICAgIH0gXAorICAgIG1lbWNweShzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLCBkYXRhLCBzaXplKTsgXAorICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgKz0gc2l6ZTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgZGF0YSwgc2l6ZSwgZGlzY2FyZCkgXAorZG8geyBcCisgICAgVFJBQ0UoKCJjb3B5IGRhdGEgdG8gJXAgZnJvbSAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSkpOyBcCisgICAgbWVtY3B5KGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrK3N0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSk7IFwKKyAgICBpZiAoZGlzY2FyZCkgXAorICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlIC09IHNpemU7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZSkgXAorZG8geyBcCisgICAgVFJBQ0UoKCJkaXNjYXJkIGRhdGEgZnJvbSAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSkpOyBcCisgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgREFUQV9QVVNIKHgpIFwKKyAgICBEQVRBX1NUQUNLX1BVU0goc3RhdGUsICh4KSwgc2l6ZW9mKCooeCkpKQorI2RlZmluZSBEQVRBX1BPUCh4KSBcCisgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsICh4KSwgc2l6ZW9mKCooeCkpLCAxKQorI2RlZmluZSBEQVRBX1BPUF9ESVNDQVJEKHgpIFwKKyAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCBzaXplb2YoKih4KSkpCisjZGVmaW5lIERBVEFfQUxMT0ModCxwKSBcCisgICAgREFUQV9TVEFDS19BTExPQyhzdGF0ZSwgdCwgcCkKKyNkZWZpbmUgREFUQV9MT09LVVBfQVQodCxwLHBvcykgXAorICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLHQscCxwb3MpCisKKyNkZWZpbmUgTUFSS19QVVNIKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIGkgPSBsYXN0bWFyazsgLyogY3R4LT5sYXN0bWFyayBtYXkgY2hhbmdlIGlmIHJlYWxsb2NhdGVkICovIFwKKyAgICAgICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGkrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBNQVJLX1BPUChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgc3RhdGUtPm1hcmssIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopLCAxKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BUktfUE9QX0tFRVAobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMCk7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBNQVJLX1BPUF9ESVNDQVJEKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSlVNUF9OT05FICAgICAgICAgICAgMAorI2RlZmluZSBKVU1QX01BWF9VTlRJTF8xICAgICAxCisjZGVmaW5lIEpVTVBfTUFYX1VOVElMXzIgICAgIDIKKyNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMyAgICAgMworI2RlZmluZSBKVU1QX01JTl9VTlRJTF8xICAgICA0CisjZGVmaW5lIEpVTVBfTUlOX1VOVElMXzIgICAgIDUKKyNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMyAgICAgNgorI2RlZmluZSBKVU1QX1JFUEVBVCAgICAgICAgICA3CisjZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8xICAgIDgKKyNkZWZpbmUgSlVNUF9SRVBFQVRfT05FXzIgICAgOQorI2RlZmluZSBKVU1QX01JTl9SRVBFQVRfT05FICAxMAorI2RlZmluZSBKVU1QX0JSQU5DSCAgICAgICAgICAxMQorI2RlZmluZSBKVU1QX0FTU0VSVCAgICAgICAgICAxMgorI2RlZmluZSBKVU1QX0FTU0VSVF9OT1QgICAgICAxMworCisjZGVmaW5lIERPX0pVTVAoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuKSBcCisgICAgREFUQV9BTExPQyhTUkUobWF0Y2hfY29udGV4dCksIG5leHRjdHgpOyBcCisgICAgbmV4dGN0eC0+bGFzdF9jdHhfcG9zID0gY3R4X3BvczsgXAorICAgIG5leHRjdHgtPmp1bXAgPSBqdW1wdmFsdWU7IFwKKyAgICBuZXh0Y3R4LT5wYXR0ZXJuID0gbmV4dHBhdHRlcm47IFwKKyAgICBjdHhfcG9zID0gYWxsb2NfcG9zOyBcCisgICAgY3R4ID0gbmV4dGN0eDsgXAorICAgIGdvdG8gZW50cmFuY2U7IFwKKyAgICBqdW1wbGFiZWw6IFwKKyAgICB3aGlsZSAoMCkgLyogZ2NjIGRvZXNuJ3QgbGlrZSBsYWJlbHMgYXQgZW5kIG9mIHNjb3BlcyAqLyBcCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeV9zc2l6ZV90IGxhc3RfY3R4X3BvczsKKyAgICBQeV9zc2l6ZV90IGp1bXA7CisgICAgU1JFX0NIQVIqIHB0cjsKKyAgICBTUkVfQ09ERSogcGF0dGVybjsKKyAgICBQeV9zc2l6ZV90IGNvdW50OworICAgIFB5X3NzaXplX3QgbGFzdG1hcms7CisgICAgUHlfc3NpemVfdCBsYXN0aW5kZXg7CisgICAgdW5pb24geworICAgICAgICBTUkVfQ09ERSBjaHI7CisgICAgICAgIFNSRV9SRVBFQVQqIHJlcDsKKyAgICB9IHU7Cit9IFNSRShtYXRjaF9jb250ZXh0KTsKKworLyogY2hlY2sgaWYgc3RyaW5nIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uICByZXR1cm5zIDwwIGZvcgorICAgZXJyb3IsIDAgZm9yIGZhaWx1cmUsIGFuZCAxIGZvciBzdWNjZXNzICovCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKG1hdGNoKShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IGFsbG9jX3BvcywgY3R4X3BvcyA9IC0xOworICAgIFB5X3NzaXplX3QgaSwgcmV0ID0gMDsKKyAgICBQeV9zc2l6ZV90IGp1bXA7CisgICAgdW5zaWduZWQgaW50IHNpZ2NvdW50PTA7CisKKyAgICBTUkUobWF0Y2hfY29udGV4dCkqIGN0eDsKKyAgICBTUkUobWF0Y2hfY29udGV4dCkqIG5leHRjdHg7CisKKyAgICBUUkFDRSgoInwlcHwlcHxFTlRFUlxuIiwgcGF0dGVybiwgc3RhdGUtPnB0cikpOworCisgICAgREFUQV9BTExPQyhTUkUobWF0Y2hfY29udGV4dCksIGN0eCk7CisgICAgY3R4LT5sYXN0X2N0eF9wb3MgPSAtMTsKKyAgICBjdHgtPmp1bXAgPSBKVU1QX05PTkU7CisgICAgY3R4LT5wYXR0ZXJuID0gcGF0dGVybjsKKyAgICBjdHhfcG9zID0gYWxsb2NfcG9zOworCitlbnRyYW5jZToKKworICAgIGN0eC0+cHRyID0gKFNSRV9DSEFSICopc3RhdGUtPnB0cjsKKworICAgIGlmIChjdHgtPnBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKKyAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KKyAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IC4uLiAqLworICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzNdICYmIChQeV91aW50cHRyX3QpKGVuZCAtIGN0eC0+cHRyKSA8IGN0eC0+cGF0dGVyblszXSkgeworICAgICAgICAgICAgVFJBQ0UoKCJyZWplY3QgKGdvdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIGNoYXJzLCAiCisgICAgICAgICAgICAgICAgICAgIm5lZWQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsCisgICAgICAgICAgICAgICAgICAgZW5kIC0gY3R4LT5wdHIsIChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bM10pKTsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV0gKyAxOworICAgIH0KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgKytzaWdjb3VudDsKKyAgICAgICAgaWYgKCgwID09IChzaWdjb3VudCAmIDB4ZmZmKSkgJiYgUHlFcnJfQ2hlY2tTaWduYWxzKCkpCisgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX0lOVEVSUlVQVEVEKTsKKworICAgICAgICBzd2l0Y2ggKCpjdHgtPnBhdHRlcm4rKykgeworCisgICAgICAgIGNhc2UgU1JFX09QX01BUks6CisgICAgICAgICAgICAvKiBzZXQgbWFyayAqLworICAgICAgICAgICAgLyogPE1BUks+IDxnaWQ+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVJLICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGlmIChpICYgMSkKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gaS8yICsgMTsKKyAgICAgICAgICAgIGlmIChpID4gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgLyogc3RhdGUtPmxhc3RtYXJrIGlzIHRoZSBoaWdoZXN0IHZhbGlkIGluZGV4IGluIHRoZQorICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrIGFycmF5LiAgSWYgaXQgaXMgaW5jcmVhc2VkIGJ5IG1vcmUgdGhhbiAxLAorICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnZlbmluZyBtYXJrcyBtdXN0IGJlIHNldCB0byBOVUxMIHRvIHNpZ25hbAorICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlc2UgbWFya3MgaGF2ZSBub3QgYmVlbiBlbmNvdW50ZXJlZC4gKi8KKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGogPSBzdGF0ZS0+bGFzdG1hcmsgKyAxOworICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgaSkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmtbaisrXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5tYXJrW2ldID0gY3R4LT5wdHI7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6CisgICAgICAgICAgICAvKiBtYXRjaCBsaXRlcmFsIHN0cmluZyAqLworICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgY3R4LT5wdHJbMF0gIT0gY3R4LT5wYXR0ZXJuWzBdKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUw6CisgICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyB0aGF0IGlzIG5vdCBsaXRlcmFsIGNoYXJhY3RlciAqLworICAgICAgICAgICAgLyogPE5PVF9MSVRFUkFMPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKFNSRV9DT0RFKSBjdHgtPnB0clswXSA9PSBjdHgtPnBhdHRlcm5bMF0pCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9TVUNDRVNTOgorICAgICAgICAgICAgLyogZW5kIG9mIHBhdHRlcm4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNVQ0NFU1NcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworCisgICAgICAgIGNhc2UgU1JFX09QX0FUOgorICAgICAgICAgICAgLyogbWF0Y2ggYXQgZ2l2ZW4gcG9zaXRpb24gKi8KKyAgICAgICAgICAgIC8qIDxBVD4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKCFTUkUoYXQpKHN0YXRlLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0NBVEVHT1JZOgorICAgICAgICAgICAgLyogbWF0Y2ggYXQgZ2l2ZW4gY2F0ZWdvcnkgKi8KKyAgICAgICAgICAgIC8qIDxDQVRFR09SWT4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxDQVRFR09SWSAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFzcmVfY2F0ZWdvcnkoY3R4LT5wYXR0ZXJuWzBdLCBjdHgtPnB0clswXSkpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BTlk6CisgICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyAoZXhjZXB0IGEgbmV3bGluZSkgKi8KKyAgICAgICAgICAgIC8qIDxBTlk+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBTllcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgU1JFX0lTX0xJTkVCUkVBSyhjdHgtPnB0clswXSkpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQU5ZX0FMTDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nICovCisgICAgICAgICAgICAvKiA8QU5ZX0FMTD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWV9BTExcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfSU46CisgICAgICAgICAgICAvKiBtYXRjaCBzZXQgbWVtYmVyIChvciBub25fbWVtYmVyKSAqLworICAgICAgICAgICAgLyogPElOPiA8c2tpcD4gPHNldD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuICsgMSwgKmN0eC0+cHRyKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxMSVRFUkFMX0lHTk9SRSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSAhPSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTF9JR05PUkUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcigqY3R4LT5wdHIpID09IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0lOX0lHTk9SRToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOX0lHTk9SRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZAorICAgICAgICAgICAgICAgIHx8ICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuKzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikpKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9KVU1QOgorICAgICAgICBjYXNlIFNSRV9PUF9JTkZPOgorICAgICAgICAgICAgLyoganVtcCBmb3J3YXJkICovCisgICAgICAgICAgICAvKiA8SlVNUD4gPG9mZnNldD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVAgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQlJBTkNIOgorICAgICAgICAgICAgLyogYWx0ZXJuYXRpb24gKi8KKyAgICAgICAgICAgIC8qIDxCUkFOQ0g+IDwwPXNraXA+IGNvZGUgPEpVTVA+IC4uLiA8TlVMTD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEJSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICBmb3IgKDsgY3R4LT5wYXR0ZXJuWzBdOyBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdKSB7CisgICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfTElURVJBTCAmJgorICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpICpjdHgtPnB0ciAhPSBjdHgtPnBhdHRlcm5bMl0pKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IFNSRV9PUF9JTiAmJgorICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgICAgICAhU1JFKGNoYXJzZXQpKGN0eC0+cGF0dGVybiArIDMsIChTUkVfQ09ERSkgKmN0eC0+cHRyKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQlJBTkNILCBqdW1wX2JyYW5jaCwgY3R4LT5wYXR0ZXJuKzEpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9LRUVQKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVRfT05FOgorICAgICAgICAgICAgLyogbWF0Y2ggcmVwZWF0ZWQgc2VxdWVuY2UgKG1heGltaXppbmcgcmVnZXhwKSAqLworCisgICAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIG9ubHkgd29ya3MgaWYgdGhlIHJlcGVhdGVkIGl0ZW0gaXMKKyAgICAgICAgICAgICAgIGV4YWN0bHkgb25lIGNoYXJhY3RlciB3aWRlLCBhbmQgd2UncmUgbm90IGFscmVhZHkKKyAgICAgICAgICAgICAgIGNvbGxlY3RpbmcgYmFja3RyYWNraW5nIHBvaW50cy4gIGZvciBvdGhlciBjYXNlcywKKyAgICAgICAgICAgICAgIHVzZSB0aGUgTUFYX1JFUEVBVCBvcGVyYXRvciAqLworCisgICAgICAgICAgICAvKiA8UkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFUEVBVF9PTkUgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKKworICAgICAgICAgICAgaWYgKChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gPiBlbmQgLSBjdHgtPnB0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgcmV0ID0gU1JFKGNvdW50KShzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIGN0eC0+cGF0dGVyblsyXSk7CisgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsKKyAgICAgICAgICAgIGN0eC0+Y291bnQgPSByZXQ7CisgICAgICAgICAgICBjdHgtPnB0ciArPSBjdHgtPmNvdW50OworCisgICAgICAgICAgICAvKiB3aGVuIHdlIGFycml2ZSBoZXJlLCBjb3VudCBjb250YWlucyB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAgICBtYXRjaGVzLCBhbmQgY3R4LT5wdHIgcG9pbnRzIHRvIHRoZSB0YWlsIG9mIHRoZSB0YXJnZXQKKyAgICAgICAgICAgICAgIHN0cmluZy4gIGNoZWNrIGlmIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIG1hdGNoZXMsCisgICAgICAgICAgICAgICBhbmQgYmFja3RyYWNrIGlmIG5vdC4gKi8KKworICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvKiB0YWlsIGlzIGVtcHR5LiAgd2UncmUgZmluaXNoZWQgKi8KKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9MSVRFUkFMKSB7CisgICAgICAgICAgICAgICAgLyogdGFpbCBzdGFydHMgd2l0aCBhIGxpdGVyYWwuIHNraXAgcG9zaXRpb25zIHdoZXJlCisgICAgICAgICAgICAgICAgICAgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gY2Fubm90IHBvc3NpYmx5IG1hdGNoICovCisgICAgICAgICAgICAgICAgY3R4LT51LmNociA9IGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF0rMV07CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8ICpjdHgtPnB0ciAhPSBjdHgtPnUuY2hyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHItLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8xLCBqdW1wX3JlcGVhdF9vbmVfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKworICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLworICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8yLCBqdW1wX3JlcGVhdF9vbmVfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9NSU5fUkVQRUFUX09ORToKKyAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtaW5pbWl6aW5nIHJlZ2V4cCkgKi8KKworICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCisgICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5CisgICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCisgICAgICAgICAgICAgICB1c2UgdGhlIE1JTl9SRVBFQVQgb3BlcmF0b3IgKi8KKworICAgICAgICAgICAgLyogPE1JTl9SRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUlOX1JFUEVBVF9PTkUgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKKworICAgICAgICAgICAgaWYgKChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gPiBlbmQgLSBjdHgtPnB0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSAwKQorICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSAwOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogY291bnQgdXNpbmcgcGF0dGVybiBtaW4gYXMgdGhlIG1heGltdW0gKi8KKyAgICAgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzFdKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgICAgIC8qIGRpZG4ndCBtYXRjaCBtaW5pbXVtIG51bWJlciBvZiB0aW1lcyAqLworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3QgbWluaW11bSBtYXRjaGVzIG9mIHJlcGVhdCAqLworICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSByZXQ7CisgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgLyogdGFpbCBpcyBlbXB0eS4gIHdlJ3JlIGZpbmlzaGVkICovCisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLworICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdID09IFNSRV9NQVhSRVBFQVQKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgY3R4LT5jb3VudCA8PSAoUHlfc3NpemVfdCljdHgtPnBhdHRlcm5bMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1JFUEVBVF9PTkUsanVtcF9taW5fcmVwZWF0X29uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNSRShjb3VudCkoc3RhdGUsIGN0eC0+cGF0dGVybiszLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXQgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX1JFUEVBVDoKKyAgICAgICAgICAgIC8qIGNyZWF0ZSByZXBlYXQgY29udGV4dC4gIGFsbCB0aGUgaGFyZCB3b3JrIGlzIGRvbmUKKyAgICAgICAgICAgICAgIGJ5IHRoZSBVTlRJTCBvcGVyYXRvciAoTUFYX1VOVElMLCBNSU5fVU5USUwpICovCisgICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFVOVElMPiB0YWlsICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVBFQVQgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKKworICAgICAgICAgICAgLyogaW5zdGFsbCBuZXcgcmVwZWF0IGNvbnRleHQgKi8KKyAgICAgICAgICAgIGN0eC0+dS5yZXAgPSAoU1JFX1JFUEVBVCopIFB5T2JqZWN0X01BTExPQyhzaXplb2YoKmN0eC0+dS5yZXApKTsKKyAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IC0xOworICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiA9IGN0eC0+cGF0dGVybjsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPnByZXYgPSBzdGF0ZS0+cmVwZWF0OworICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBOVUxMOworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7CisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVQsIGp1bXBfcmVwZWF0LCBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OworICAgICAgICAgICAgUHlPYmplY3RfRlJFRShjdHgtPnUucmVwKTsKKworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTUFYX1VOVElMOgorICAgICAgICAgICAgLyogbWF4aW1pemluZyByZXBlYXQgKi8KKyAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8TUFYX1VOVElMPiB0YWlsICovCisKKyAgICAgICAgICAgIC8qIEZJWE1FOiB3ZSBwcm9iYWJseSBuZWVkIHRvIGRlYWwgd2l0aCB6ZXJvLXdpZHRoCisgICAgICAgICAgICAgICBtYXRjaGVzIGluIGhlcmUuLi4gKi8KKworICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7CisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7CisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1BWF9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQpKTsKKworICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgeworICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzEsIGp1bXBfbWF4X3VudGlsXzEsCisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdIHx8CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgIT0gY3R4LT51LnJlcC0+bGFzdF9wdHIpIHsKKyAgICAgICAgICAgICAgICAvKiB3ZSBtYXkgaGF2ZSBlbm91Z2ggbWF0Y2hlcywgYnV0IGlmIHdlIGNhbgorICAgICAgICAgICAgICAgICAgIG1hdGNoIGFub3RoZXIgaXRlbSwgZG8gc28gKi8KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworICAgICAgICAgICAgICAgIE1BUktfUFVTSChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICAvKiB6ZXJvLXdpZHRoIG1hdGNoIHByb3RlY3Rpb24gKi8KKyAgICAgICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IHN0YXRlLT5wdHI7CisgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8yLCBqdW1wX21heF91bnRpbF8yLAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKKyAgICAgICAgICAgICAgICBEQVRBX1BPUCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBNQVJLX1BPUChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBjYW5ub3QgbWF0Y2ggbW9yZSByZXBlYXRlZCBpdGVtcyBoZXJlLiAgbWFrZSBzdXJlIHRoZQorICAgICAgICAgICAgICAgdGFpbCBtYXRjaGVzICovCisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMywganVtcF9tYXhfdW50aWxfMywgY3R4LT5wYXR0ZXJuKTsKKyAgICAgICAgICAgIFJFVFVSTl9PTl9TVUNDRVNTKHJldCk7CisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX01JTl9VTlRJTDoKKyAgICAgICAgICAgIC8qIG1pbmltaXppbmcgcmVwZWF0ICovCisgICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1JTl9VTlRJTD4gdGFpbCAqLworCisgICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX1NUQVRFKTsKKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICBjdHgtPmNvdW50ID0gY3R4LT51LnJlcC0+Y291bnQrMTsKKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUlOX1VOVElMICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJXBcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5jb3VudCwgY3R4LT51LnJlcC0+cGF0dGVybikpOworCisgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzFdKSB7CisgICAgICAgICAgICAgICAgLyogbm90IGVub3VnaCBtYXRjaGVzICovCisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMSwganVtcF9taW5fdW50aWxfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworCisgICAgICAgICAgICAvKiBzZWUgaWYgdGhlIHRhaWwgbWF0Y2hlcyAqLworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzIsIGp1bXBfbWluX3VudGlsXzIsIGN0eC0+cGF0dGVybik7CisgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisKKyAgICAgICAgICAgIGlmICgoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXQorICAgICAgICAgICAgICAgICYmIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gIT0gU1JFX01BWFJFUEVBVCkgfHwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID09IGN0eC0+dS5yZXAtPmxhc3RfcHRyKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICAvKiB6ZXJvLXdpZHRoIG1hdGNoIHByb3RlY3Rpb24gKi8KKyAgICAgICAgICAgIERBVEFfUFVTSCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOworICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOworICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8zLGp1bXBfbWluX3VudGlsXzMsCisgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7CisgICAgICAgICAgICBEQVRBX1BPUCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRjoKKyAgICAgICAgICAgIC8qIG1hdGNoIGJhY2tyZWZlcmVuY2UgKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOworICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07CisgICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKmN0eC0+cHRyICE9ICpwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgorICAgICAgICAgICAgLyogbWF0Y2ggYmFja3JlZmVyZW5jZSAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfSUdOT1JFICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOworICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07CisgICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSAhPSBzdGF0ZS0+bG93ZXIoKnApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfRVhJU1RTOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfRVhJU1RTICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgLyogPEdST1VQUkVGX0VYSVNUUz4gPGdyb3VwPiA8c2tpcD4gY29kZXllcyA8SlVNUD4gY29kZW5vIC4uLiAqLworICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOworICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07CisgICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlQ6CisgICAgICAgICAgICAvKiBhc3NlcnQgc3VicGF0dGVybiAqLworICAgICAgICAgICAgLyogPEFTU0VSVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyIDwgc3RhdGUtPmJlZ2lubmluZykKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9BU1NFUlQsIGp1bXBfYXNzZXJ0LCBjdHgtPnBhdHRlcm4rMik7CisgICAgICAgICAgICBSRVRVUk5fT05fRkFJTFVSRShyZXQpOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVF9OT1Q6CisgICAgICAgICAgICAvKiBhc3NlcnQgbm90IHN1YnBhdHRlcm4gKi8KKyAgICAgICAgICAgIC8qIDxBU1NFUlRfTk9UPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUX05PVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyID49IHN0YXRlLT5iZWdpbm5pbmcpIHsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQVNTRVJUX05PVCwganVtcF9hc3NlcnRfbm90LCBjdHgtPnBhdHRlcm4rMik7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6CisgICAgICAgICAgICAvKiBpbW1lZGlhdGUgZmFpbHVyZSAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8RkFJTFVSRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFVOS05PV04gJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWy0xXSkpOworICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTExFR0FMKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBjdHhfcG9zID0gY3R4LT5sYXN0X2N0eF9wb3M7CisgICAganVtcCA9IGN0eC0+anVtcDsKKyAgICBEQVRBX1BPUF9ESVNDQVJEKGN0eCk7CisgICAgaWYgKGN0eF9wb3MgPT0gLTEpCisgICAgICAgIHJldHVybiByZXQ7CisgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworCisgICAgc3dpdGNoIChqdW1wKSB7CisgICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMjoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMjsKKyAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8zOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8zOworICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzI7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMzoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzNcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMzsKKyAgICAgICAgY2FzZSBKVU1QX0JSQU5DSDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYnJhbmNoOworICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzE6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzE7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMTsKKyAgICAgICAgY2FzZSBKVU1QX1JFUEVBVDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0OworICAgICAgICBjYXNlIEpVTVBfUkVQRUFUX09ORV8xOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRfT05FXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXRfb25lXzE7CisgICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMjsKKyAgICAgICAgY2FzZSBKVU1QX01JTl9SRVBFQVRfT05FOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fUkVQRUFUX09ORVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21pbl9yZXBlYXRfb25lOworICAgICAgICBjYXNlIEpVTVBfQVNTRVJUOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnQ7CisgICAgICAgIGNhc2UgSlVNUF9BU1NFUlRfTk9UOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRfTk9UXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYXNzZXJ0X25vdDsKKyAgICAgICAgY2FzZSBKVU1QX05PTkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVRVUk4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCByZXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7IC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworfQorCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKHNlYXJjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiAqKXN0YXRlLT5zdGFydDsKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IHN0YXR1cyA9IDA7CisgICAgUHlfc3NpemVfdCBwcmVmaXhfbGVuID0gMDsKKyAgICBQeV9zc2l6ZV90IHByZWZpeF9za2lwID0gMDsKKyAgICBTUkVfQ09ERSogcHJlZml4ID0gTlVMTDsKKyAgICBTUkVfQ09ERSogY2hhcnNldCA9IE5VTEw7CisgICAgU1JFX0NPREUqIG92ZXJsYXAgPSBOVUxMOworICAgIGludCBmbGFncyA9IDA7CisKKyAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgeworICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLworICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gPDQ9bWF4PiA8NT1wcmVmaXggaW5mbz4gICovCisKKyAgICAgICAgZmxhZ3MgPSBwYXR0ZXJuWzJdOworCisgICAgICAgIGlmIChwYXR0ZXJuWzNdID4gMSkgeworICAgICAgICAgICAgLyogYWRqdXN0IGVuZCBwb2ludCAoYnV0IG1ha2Ugc3VyZSB3ZSBsZWF2ZSBhdCBsZWFzdCBvbmUKKyAgICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGVyZSwgc28gbGl0ZXJhbCBzZWFyY2ggd2lsbCB3b3JrKSAqLworICAgICAgICAgICAgZW5kIC09IHBhdHRlcm5bM10gLSAxOworICAgICAgICAgICAgaWYgKGVuZCA8PSBwdHIpCisgICAgICAgICAgICAgICAgZW5kID0gcHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fUFJFRklYKSB7CisgICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4ICovCisgICAgICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLworICAgICAgICAgICAgcHJlZml4X2xlbiA9IHBhdHRlcm5bNV07CisgICAgICAgICAgICBwcmVmaXhfc2tpcCA9IHBhdHRlcm5bNl07CisgICAgICAgICAgICBwcmVmaXggPSBwYXR0ZXJuICsgNzsKKyAgICAgICAgICAgIG92ZXJsYXAgPSBwcmVmaXggKyBwcmVmaXhfbGVuIC0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIFNSRV9JTkZPX0NIQVJTRVQpCisgICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KKyAgICAgICAgICAgIC8qIDxjaGFyc2V0PiAqLworICAgICAgICAgICAgY2hhcnNldCA9IHBhdHRlcm4gKyA1OworCisgICAgICAgIHBhdHRlcm4gKz0gMSArIHBhdHRlcm5bMV07CisgICAgfQorCisgICAgVFJBQ0UoKCJwcmVmaXggPSAlcCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCisgICAgICAgICAgIHByZWZpeCwgcHJlZml4X2xlbiwgcHJlZml4X3NraXApKTsKKyAgICBUUkFDRSgoImNoYXJzZXQgPSAlcFxuIiwgY2hhcnNldCkpOworCisjaWYgZGVmaW5lZChVU0VfRkFTVF9TRUFSQ0gpCisgICAgaWYgKHByZWZpeF9sZW4gPiAxKSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBrbm93biBwcmVmaXguICB1c2UgdGhlIG92ZXJsYXAKKyAgICAgICAgICAgdGFibGUgdG8gc2tpcCBmb3J3YXJkIGFzIGZhc3QgYXMgd2UgcG9zc2libHkgY2FuICovCisgICAgICAgIFB5X3NzaXplX3QgaSA9IDA7CisKKyAgICAgICAgZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBlbmQgLSBwdHIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVmaXhfbGVuOyBpKyspCisgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKShTUkVfQ0hBUikgcHJlZml4W2ldICE9IHByZWZpeFtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAgIFNSRV9DSEFSIGMgPSAoU1JFX0NIQVIpIHByZWZpeFswXTsKKyAgICAgICAgICAgIHdoaWxlICgqcHRyKysgIT0gYykgeworICAgICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoKnB0ciA9PSAoU1JFX0NIQVIpIHByZWZpeFtpXSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKytpICE9IHByZWZpeF9sZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK3B0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBmb3VuZCBhIHBvdGVudGlhbCBtYXRjaCAqLworICAgICAgICAgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggU0NBTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0ciAtIChwcmVmaXhfbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHIgLSAocHJlZml4X2xlbiAtIHByZWZpeF9za2lwIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX0xJVEVSQUwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuICsgMipwcmVmaXhfc2tpcCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGJ1dCBubyBjaWdhciAtLSB0cnkgYWdhaW4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpID0gb3ZlcmxhcFtpXTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGkgIT0gMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfTElURVJBTCkgeworICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuICB0aGlzIGlzIHVzZWQKKyAgICAgICAgICAgZm9yIHNob3J0IHByZWZpeGVzLCBhbmQgaWYgZmFzdCBzZWFyY2ggaXMgZGlzYWJsZWQgKi8KKyAgICAgICAgU1JFX0NIQVIgYyA9IChTUkVfQ0hBUikgcGF0dGVyblsxXTsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGlmICgoU1JFX0NPREUpIGMgIT0gcGF0dGVyblsxXSkKKyAgICAgICAgICAgIHJldHVybiAwOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisjZW5kaWYKKyAgICAgICAgZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgeworICAgICAgICAgICAgd2hpbGUgKCpwdHIgIT0gYykgeworICAgICAgICAgICAgICAgIGlmICgrK3B0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIExJVEVSQUxcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9ICsrcHRyOworICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLworICAgICAgICAgICAgc3RhdHVzID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybiArIDIpOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjaGFyc2V0KSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBjaGFyYWN0ZXIgZnJvbSBhIGtub3duIHNldCAqLworICAgICAgICBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkUoY2hhcnNldCkoY2hhcnNldCwgKnB0cikpCisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICBpZiAocHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBDSEFSU0VUXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0cjsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHI7CisgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLworICAgICAgICB3aGlsZSAocHRyIDw9IGVuZCkgeworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHN0YXRlLT5wdHIgPSBwdHIrKzsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4pOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisjdW5kZWYgU1JFX0NIQVIKKyN1bmRlZiBTSVpFT0ZfU1JFX0NIQVIKKyN1bmRlZiBTUkUKKworLyogdmltOnRzPTQ6c3c9NDpldAorKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBiL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYwppbmRleCAzN2RmODJkLi5jZGI0ZmZjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCkBAIC0xMSwxMiArMTEsMTIgQEAKICAgICBQeU9iamVjdCAqdDsKIAogICAgIGNoYXIgKnN0cjsKLSAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAgICAgY2hhciAqc3RhcnRzdHI7CiAgICAgaW50IHN0YXJ0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzc3M6c3ltdGFibGUiLCAmc3RyLCAmZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHN0cikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzTyZzOnN5bXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ciwgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lLCAmc3RhcnRzdHIpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc3RyY21wKHN0YXJ0c3RyLCAiZXhlYyIpID09IDApCiAgICAgICAgIHN0YXJ0ID0gUHlfZmlsZV9pbnB1dDsKQEAgLTI3LDkgKzI3LDExIEBACiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAic3ltdGFibGUoKSBhcmcgMyBtdXN0IGJlICdleGVjJyBvciAnZXZhbCcgb3IgJ3NpbmdsZSciKTsKKyAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmcoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgaWYgKHN0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHQgPSAoUHlPYmplY3QgKilzdC0+c3RfdG9wOwpAQCAtNjksMzAgKzcxLDMwIEBACiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3ltdGFibGVtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJVU0UiLCBVU0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfR0xPQkFMIiwgREVGX0dMT0JBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9MT0NBTCIsIERFRl9MT0NBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9QQVJBTSIsIERFRl9QQVJBTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9GUkVFIiwgREVGX0ZSRUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRlJFRV9DTEFTUyIsIERFRl9GUkVFX0NMQVNTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0lNUE9SVCIsIERFRl9JTVBPUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfQk9VTkQiLCBERUZfQk9VTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0dMT0JBTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0xPQ0FMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfUEFSQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9GUkVFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfRlJFRV9DTEFTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0lNUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0JPVU5EKTsKIAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUWVBFX0ZVTkNUSU9OIiwgRnVuY3Rpb25CbG9jayk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRZUEVfQ0xBU1MiLCBDbGFzc0Jsb2NrKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVFlQRV9NT0RVTEUiLCBNb2R1bGVCbG9jayk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BUX0lNUE9SVF9TVEFSIiwgT1BUX0lNUE9SVF9TVEFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BUX1RPUExFVkVMIiwgT1BUX1RPUExFVkVMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPUFRfSU1QT1JUX1NUQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9QVF9UT1BMRVZFTCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9DQUwiLCBMT0NBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkdMT0JBTF9FWFBMSUNJVCIsIEdMT0JBTF9FWFBMSUNJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkdMT0JBTF9JTVBMSUNJVCIsIEdMT0JBTF9JTVBMSUNJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkZSRUUiLCBGUkVFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0VMTCIsIENFTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0FMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBHTE9CQUxfRVhQTElDSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEdMT0JBTF9JTVBMSUNJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRlJFRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0VMTCk7CiAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NPUEVfT0ZGIiwgU0NPUEVfT0ZGU0VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NPUEVfTUFTSyIsIFNDT1BFX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDT1BFX01BU0spOwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYyBiL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKaW5kZXggOGI4NzdjZi4uOWQ3OWVlYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYworKysgYi9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCkBAIC0yNzgsNDQgKzI3OCw0NCBAQAogICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCiAKICAgICAvKiBQcmlvcml0aWVzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19FTUVSRyIsICAgICAgIExPR19FTUVSRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19BTEVSVCIsICAgICAgIExPR19BTEVSVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DUklUIiwgICAgICAgIExPR19DUklUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0VSUiIsICAgICAgICAgTE9HX0VSUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19XQVJOSU5HIiwgTE9HX1dBUk5JTkcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTk9USUNFIiwgIExPR19OT1RJQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfSU5GTyIsICAgICAgICBMT0dfSU5GTyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19ERUJVRyIsICAgICAgIExPR19ERUJVRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0VNRVJHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQUxFUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19DUklUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfV0FSTklORyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05PVElDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0lORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19ERUJVRyk7CiAKICAgICAvKiBvcGVubG9nKCkgb3B0aW9uIGZsYWdzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19QSUQiLCAgICAgICAgIExPR19QSUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQ09OUyIsICAgICAgICBMT0dfQ09OUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19OREVMQVkiLCAgTE9HX05ERUxBWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1BJRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NPTlMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19OREVMQVkpOwogI2lmZGVmIExPR19PREVMQVkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX09ERUxBWSIsICBMT0dfT0RFTEFZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfT0RFTEFZKTsKICNlbmRpZgogI2lmZGVmIExPR19OT1dBSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05PV0FJVCIsICBMT0dfTk9XQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTk9XQUlUKTsKICNlbmRpZgogI2lmZGVmIExPR19QRVJST1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1BFUlJPUiIsICBMT0dfUEVSUk9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfUEVSUk9SKTsKICNlbmRpZgogCiAgICAgLyogRmFjaWxpdGllcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfS0VSTiIsICAgICAgICBMT0dfS0VSTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19VU0VSIiwgICAgICAgIExPR19VU0VSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX01BSUwiLCAgICAgICAgTE9HX01BSUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfREFFTU9OIiwgIExPR19EQUVNT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQVVUSCIsICAgICAgICBMT0dfQVVUSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MUFIiLCAgICAgICAgIExPR19MUFIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwwIiwgIExPR19MT0NBTDApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwxIiwgIExPR19MT0NBTDEpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwyIiwgIExPR19MT0NBTDIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwzIiwgIExPR19MT0NBTDMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw0IiwgIExPR19MT0NBTDQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw1IiwgIExPR19MT0NBTDUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw2IiwgIExPR19MT0NBTDYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw3IiwgIExPR19MT0NBTDcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19LRVJOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfVVNFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX01BSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19EQUVNT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19BVVRIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTFBSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwwKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwxKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwyKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwzKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw3KTsKIAogI2lmbmRlZiBMT0dfU1lTTE9HCiAjZGVmaW5lIExPR19TWVNMT0cgICAgICAgICAgICAgIExPR19EQUVNT04KQEAgLTMzMCwxMyArMzMwLDEzIEBACiAjZGVmaW5lIExPR19DUk9OICAgICAgICAgICAgICAgIExPR19EQUVNT04KICNlbmRpZgogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19TWVNMT0ciLCAgTE9HX1NZU0xPRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DUk9OIiwgICAgICAgIExPR19DUk9OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1VVQ1AiLCAgICAgICAgTE9HX1VVQ1ApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTkVXUyIsICAgICAgICBMT0dfTkVXUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1NZU0xPRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NST04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19VVUNQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTkVXUyk7CiAKICNpZmRlZiBMT0dfQVVUSFBSSVYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0FVVEhQUklWIiwgICAgTE9HX0FVVEhQUklWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQVVUSFBSSVYpOwogI2VuZGlmCiAKICAgICByZXR1cm4gbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGltZW1vZHVsZS5jIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKaW5kZXggMDM0NzZkOS4uOGQxNjFkNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy90aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKQEAgLTM3LDE2ICszNyw2IEBACiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogI2VuZGlmIC8qICFfX1dBVENPTUNfXyB8fCBfX1FOWF9fICovCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX0VSUk9SUwotI2luY2x1ZGUgPG9zMi5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX0FQUExFX18pCiAjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KICNlbmRpZgpAQCAtNTQzLDYgKzUzMywyNiBAQAogICAgLyogd2NzZnRpbWUoKSBkb2Vzbid0IGZvcm1hdCBjb3JyZWN0bHkgdGltZSB6b25lcywgc2VlIGlzc3VlICMxMDY1MyAqLwogIyAgdW5kZWYgSEFWRV9XQ1NGVElNRQogI2VuZGlmCisjZGVmaW5lIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyBcCisiQ29tbW9ubHkgdXNlZCBmb3JtYXQgY29kZXM6XG5cCitcblwKKyVZICBZZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgbnVtYmVyLlxuXAorJW0gIE1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDEyXS5cblwKKyVkICBEYXkgb2YgdGhlIG1vbnRoIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDMxXS5cblwKKyVIICBIb3VyICgyNC1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCwyM10uXG5cCislTSAgTWludXRlIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAwLDU5XS5cblwKKyVTICBTZWNvbmQgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsNjFdLlxuXAorJXogIFRpbWUgem9uZSBvZmZzZXQgZnJvbSBVVEMuXG5cCislYSAgTG9jYWxlJ3MgYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lLlxuXAorJUEgIExvY2FsZSdzIGZ1bGwgd2Vla2RheSBuYW1lLlxuXAorJWIgIExvY2FsZSdzIGFiYnJldmlhdGVkIG1vbnRoIG5hbWUuXG5cCislQiAgTG9jYWxlJ3MgZnVsbCBtb250aCBuYW1lLlxuXAorJWMgIExvY2FsZSdzIGFwcHJvcHJpYXRlIGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50YXRpb24uXG5cCislSSAgSG91ciAoMTItaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciBbMDEsMTJdLlxuXAorJXAgIExvY2FsZSdzIGVxdWl2YWxlbnQgb2YgZWl0aGVyIEFNIG9yIFBNLlxuXAorXG5cCitPdGhlciBjb2RlcyBtYXkgYmUgYXZhaWxhYmxlIG9uIHlvdXIgcGxhdGZvcm0uICBTZWUgZG9jdW1lbnRhdGlvbiBmb3JcblwKK3RoZSBDIGxpYnJhcnkgc3RyZnRpbWUgZnVuY3Rpb24uXG4iCiAKICNpZmRlZiBIQVZFX1NUUkZUSU1FCiAjaWZkZWYgSEFWRV9XQ1NGVElNRQpAQCAtNjg3LDEzICs2OTcsMTMgQEAKIAogI3VuZGVmIHRpbWVfY2hhcgogI3VuZGVmIGZvcm1hdF90aW1lCi0KIFB5RG9jX1NUUlZBUihzdHJmdGltZV9kb2MsCiAic3RyZnRpbWUoZm9ybWF0WywgdHVwbGVdKSAtPiBzdHJpbmdcblwKIFxuXAogQ29udmVydCBhIHRpbWUgdHVwbGUgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHNwZWNpZmljYXRpb24uXG5cCiBTZWUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlIG1hbnVhbCBmb3IgZm9ybWF0dGluZyBjb2Rlcy4gV2hlbiB0aGUgdGltZSB0dXBsZVxuXAotaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLiIpOworaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAjZW5kaWYgLyogSEFWRV9TVFJGVElNRSAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzE2LDcgKzcyNiw5IEBACiAic3RycHRpbWUoc3RyaW5nLCBmb3JtYXQpIC0+IHN0cnVjdF90aW1lXG5cCiBcblwKIFBhcnNlIGEgc3RyaW5nIHRvIGEgdGltZSB0dXBsZSBhY2NvcmRpbmcgdG8gYSBmb3JtYXQgc3BlY2lmaWNhdGlvbi5cblwKLVNlZSB0aGUgbGlicmFyeSByZWZlcmVuY2UgbWFudWFsIGZvciBmb3JtYXR0aW5nIGNvZGVzIChzYW1lIGFzIHN0cmZ0aW1lKCkpLiIpOworU2VlIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZSBtYW51YWwgZm9yIGZvcm1hdHRpbmcgY29kZXMgKHNhbWUgYXNcblwKK3N0cmZ0aW1lKCkpLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBfYXNjdGltZShzdHJ1Y3QgdG0gKnRpbWVwdHIpCkBAIC03OTUsNyArODA3LDE2IEBACiAgICAgdHQgPSBta3RpbWUoJmJ1Zik7CiAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dCB0bV93ZGF5CiAgICAgICogY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KLSAgICBpZiAodHQgPT0gKHRpbWVfdCkoLTEpICYmIGJ1Zi50bV93ZGF5ID09IC0xKSB7CisgICAgaWYgKHR0ID09ICh0aW1lX3QpKC0xKQorI2lmbmRlZiBfQUlYCisgICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLCBidXQKKyAgICAgICAgICogdG1fd2RheSBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLworICAgICAgICAmJiBidWYudG1fd2RheSA9PSAtMQorI2Vsc2UKKyAgICAgICAgLyogb24gQUlYLCB0bV93ZGF5IGlzIGFsd2F5cyBzZXRzLCBldmVuIG9uIGVycm9yICovCisjZW5kaWYKKyAgICAgICApCisgICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJta3RpbWUgYXJndW1lbnQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODMwLDYgKzg1MSw4IEBACiAgICAgLyogUmVzZXQgdGltZXpvbmUsIGFsdHpvbmUsIGRheWxpZ2h0IGFuZCB0em5hbWUgKi8KICAgICBQeUluaXRfdGltZXpvbmUobSk7CiAgICAgUHlfREVDUkVGKG0pOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKQEAgLTEyNjYsMTkgKzEyODksMTEgQEAKICNpZiBkZWZpbmVkKEhBVkVfVFpOQU1FKSAmJiAhZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAgICAgUHlPYmplY3QgKm90ejAsICpvdHoxOwogICAgIHR6c2V0KCk7Ci0jaWZkZWYgUFlPU19PUzIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAidGltZXpvbmUiLCBfdGltZXpvbmUpOwotI2Vsc2UgLyogIVBZT1NfT1MyICovCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgInRpbWV6b25lIiwgdGltZXpvbmUpOwotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjaWZkZWYgSEFWRV9BTFRaT05FCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImFsdHpvbmUiLCBhbHR6b25lKTsKICNlbHNlCi0jaWZkZWYgUFlPU19PUzIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiYWx0em9uZSIsIF90aW1lem9uZS0zNjAwKTsKLSNlbHNlIC8qICFQWU9TX09TMiAqLwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJhbHR6b25lIiwgdGltZXpvbmUtMzYwMCk7Ci0jZW5kaWYgLyogUFlPU19PUzIgKi8KICNlbmRpZgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJkYXlsaWdodCIsIGRheWxpZ2h0KTsKICAgICBvdHowID0gUHlVbmljb2RlX0RlY29kZUxvY2FsZSh0em5hbWVbMF0sICJzdXJyb2dhdGVlc2NhcGUiKTsKQEAgLTE0NjEsOCArMTQ3Niw5IEBACiAgICAgUHlJbml0X3RpbWV6b25lKG0pOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RUaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3RpbWVfdHlwZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RUaW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfdGltZV90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICB3aW52ZXIuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih3aW52ZXIpOwpAQCAtMTU3NCw3ICsxNTkwLDcgQEAKICAgICAgICAgICAgIERXT1JEIHJjOwogICAgICAgICAgICAgSEFORExFIGhJbnRlcnJ1cHRFdmVudCA9IF9QeU9TX1NpZ2ludEV2ZW50KCk7CiAgICAgICAgICAgICBSZXNldEV2ZW50KGhJbnRlcnJ1cHRFdmVudCk7Ci0gICAgICAgICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaEludGVycnVwdEV2ZW50LCB1bF9taWxsaXMpOworICAgICAgICAgICAgcmMgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCB1bF9taWxsaXMsIEZBTFNFKTsKICAgICAgICAgICAgIGlmIChyYyA9PSBXQUlUX09CSkVDVF8wKSB7CiAgICAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwogICAgICAgICAgICAgICAgIGVycm5vID0gRUlOVFI7CkBAIC0xNTg0LDE1ICsxNjAwLDYgQEAKICAgICAgICAgfQogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgLyogVGhpcyBTbGVlcCAqSVMqIEludGVycnVwdGFibGUgYnkgRXhjZXB0aW9ucyAqLwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoRG9zU2xlZXAoc2VjcyAqIDEwMDApICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZWxzZQogICAgIC8qIFhYWCBDYW4ndCBpbnRlcnJ1cHQgdGhpcyBzbGVlcCAqLwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGEuYyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYwppbmRleCBmNGQzNjA4Li41MDk3ZDQ0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKKysrIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCkBAIC0xMDcsMjQgKzEwNyw2MiBAQAogCiAvKiAtLS0gTW9kdWxlIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLypbY2xpbmljXQorbW9kdWxlIHVuaWNvZGVkYXRhCit1bmljb2RlZGF0YS5kZWNpbWFsCisKKyAgICB1bmljaHI6IG9iamVjdCh0eXBlPSdzdHInKQorICAgIGRlZmF1bHQ6IG9iamVjdD1OVUxMCisgICAgLworCitDb252ZXJ0cyBhIFVuaWNvZGUgY2hhcmFjdGVyIGludG8gaXRzIGVxdWl2YWxlbnQgZGVjaW1hbCB2YWx1ZS4KKworUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyCithcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZgorbm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KK1tjbGluaWNdKi8KKwogUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX2RlY2ltYWxfX2RvY19fLAotImRlY2ltYWwodW5pY2hyWywgZGVmYXVsdF0pXG5cCi1cblwKLVJldHVybnMgdGhlIGRlY2ltYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHVuaWNoclxuXAotYXMgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWZcblwKLW5vdCBnaXZlbiwgVmFsdWVFcnJvciBpcyByYWlzZWQuIik7CisiQ29udmVydHMgYSBVbmljb2RlIGNoYXJhY3RlciBpbnRvIGl0cyBlcXVpdmFsZW50IGRlY2ltYWwgdmFsdWUuXG4iCisiXG4iCisidW5pY29kZWRhdGEuZGVjaW1hbCh1bmljaHIsIGRlZmF1bHQ9Tm9uZSlcbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBkZWNpbWFsIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHJcbiIKKyJhcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZlxuIgorIm5vdCBnaXZlbiwgVmFsdWVFcnJvciBpcyByYWlzZWQuIik7CisKKyNkZWZpbmUgVU5JQ09ERURBVEFfREVDSU1BTF9NRVRIT0RERUYgICAgXAorICAgIHsiZGVjaW1hbCIsIChQeUNGdW5jdGlvbil1bmljb2RlZGF0YV9kZWNpbWFsLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX2RlY2ltYWxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX2RlY2ltYWxfaW1wbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVuaWNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogdW5pY29kZWRhdGFfZGVjaW1hbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlVbmljb2RlT2JqZWN0ICp2OwotICAgIFB5T2JqZWN0ICpkZWZvYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICp1bmljaHI7CisgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPIXxPOmRlY2ltYWwiLAorICAgICAgICAmUHlVbmljb2RlX1R5cGUsICZ1bmljaHIsICZkZWZhdWx0X3ZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHVuaWNvZGVkYXRhX2RlY2ltYWxfaW1wbChzZWxmLCB1bmljaHIsIGRlZmF1bHRfdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9kZWNpbWFsX2ltcGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bmljaHIsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQorLypbY2xpbmljIGNoZWNrc3VtOiA3NmM4ZDFjM2RiZWU0OTVkNGNmZDg2Y2E2ODI5NTQzYTMxMjkzNDRhXSovCit7CisgICAgUHlVbmljb2RlT2JqZWN0ICp2ID0gKFB5VW5pY29kZU9iamVjdCAqKXVuaWNocjsKICAgICBpbnQgaGF2ZV9vbGQgPSAwOwogICAgIGxvbmcgcmM7CiAgICAgUHlfVUNTNCBjOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOmRlY2ltYWwiLCAmUHlVbmljb2RlX1R5cGUsICZ2LCAmZGVmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYyA9IGdldHVjaGFyKHYpOwogICAgIGlmIChjID09IChQeV9VQ1M0KS0xKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE0NSwxNCArMTgzLDE0IEBACiAgICAgaWYgKCFoYXZlX29sZCkKICAgICAgICAgcmMgPSBQeV9VTklDT0RFX1RPREVDSU1BTChjKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIGlmIChkZWZvYmogPT0gTlVMTCkgeworICAgICAgICBpZiAoZGVmYXVsdF92YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgZGVjaW1hbCIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZGVmb2JqKTsKLSAgICAgICAgICAgIHJldHVybiBkZWZvYmo7CisgICAgICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHJjKTsKQEAgLTEyNTAsNyArMTI4OCw3IEBACiAvKiBYWFggQWRkIGRvYyBzdHJpbmdzLiAqLwogCiBzdGF0aWMgUHlNZXRob2REZWYgdW5pY29kZWRhdGFfZnVuY3Rpb25zW10gPSB7Ci0gICAgeyJkZWNpbWFsIiwgdW5pY29kZWRhdGFfZGVjaW1hbCwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9kZWNpbWFsX19kb2NfX30sCisgICAgVU5JQ09ERURBVEFfREVDSU1BTF9NRVRIT0RERUYKICAgICB7ImRpZ2l0IiwgdW5pY29kZWRhdGFfZGlnaXQsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfZGlnaXRfX2RvY19ffSwKICAgICB7Im51bWVyaWMiLCB1bmljb2RlZGF0YV9udW1lcmljLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX251bWVyaWNfX2RvY19ffSwKICAgICB7ImNhdGVnb3J5IiwgdW5pY29kZWRhdGFfY2F0ZWdvcnksIE1FVEhfVkFSQVJHUywKQEAgLTEzMjcsNyArMTM2NSw2IEBACiBUaGUgbW9kdWxlIHVzZXMgdGhlIHNhbWUgbmFtZXMgYW5kIHN5bWJvbHMgYXMgZGVmaW5lZCBieSB0aGVcblwKIFVuaWNvZGVEYXRhIEZpbGUgRm9ybWF0ICIgVU5JREFUQV9WRVJTSU9OICIuIik7CiAKLQogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiB1bmljb2RlZGF0YW1vZHVsZSA9IHsKICAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAogICAgICAgICAidW5pY29kZWRhdGEiLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oIGIvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCmluZGV4IDVkNWRjYTguLmVjMTFmYTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKQEAgLTEsNiArMSw2IEBACiAvKiB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBUb29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSAzLjIgKi8KIAotI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMS4wIgorI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMy4wIgogLyogYSBsaXN0IG9mIHVuaXF1ZSBkYXRhYmFzZSByZWNvcmRzICovCiBjb25zdCBfUHlVbmljb2RlX0RhdGFiYXNlUmVjb3JkIF9QeVVuaWNvZGVfRGF0YWJhc2VfUmVjb3Jkc1tdID0gewogICAgIHswLCAwLCAwLCAwLCAwLCAwfSwKQEAgLTEyMCw2ICsxMjAsNyBAQAogICAgIHs0LCAzMCwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAzMSwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAzMiwgMTQsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezE5LCAwLCA1LCAwLCA1LCAwfSwKICAgICB7MTksIDAsIDUsIDAsIDUsIDEwfSwKICAgICB7MTgsIDAsIDUsIDAsIDUsIDB9LApAQCAtMTM2LDcgKzEzNyw2IEBACiAgICAgezE5LCAwLCA1LCAwLCA1LCAxMzZ9LAogICAgIHs3LCAwLCA5LCAwLCA1LCAwfSwKICAgICB7MzAsIDAsIDUsIDAsIDUsIDB9LAotICAgIHsxNCwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezQsIDM2LCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDAsIDE0LCAwLCA1LCAwfSwKICAgICB7NywgMCwgNCwgMCwgNSwgMH0sCkBAIC0xNzcsNiArMTc3LDcgQEAKICAgICB7MTksIDAsIDEsIDAsIDUsIDgwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAwfSwKICAgICB7OCwgMCwgMSwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAxNSwgMCwgNSwgMH0sCiAgICAgezUsIDksIDEsIDAsIDUsIDB9LAogICAgIHs0LCAxLCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDIzNCwgMTQsIDAsIDUsIDB9LApAQCAtMTkwLDcgKzE5MSw2IEBACiAgICAgezI5LCAwLCAxOSwgMCwgNSwgMTcwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAxNzB9LAogICAgIHsxMCwgMCwgMTgsIDAsIDUsIDEzNn0sCi0gICAgezE0LCAwLCAxNSwgMCwgNSwgMH0sCiAgICAgezE0LCAwLCAxLCAwLCA1LCAwfSwKICAgICB7MTQsIDAsIDQsIDAsIDUsIDB9LAogICAgIHsyMSwgMCwgMTksIDAsIDQsIDB9LApAQCAtMjEzLDYgKzIxMywxMCBAQAogICAgIHsyNiwgMCwgMTEsIDAsIDUsIDEzNn0sCiAgICAgezIwLCAwLCAxOSwgMCwgNSwgMH0sCiAgICAgezI3LCAwLCAxMywgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMCwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMSwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMiwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAyMywgMCwgNSwgMH0sCiAgICAgezksIDAsIDksIDAsIDUsIDEzNn0sCiAgICAgezI3LCAwLCAxMCwgMCwgNSwgMTM2fSwKICAgICB7MjcsIDAsIDE5LCAwLCA1LCAxMzZ9LApAQCAtNjM4LDYgKzY0MiwxMCBAQAogICAgICJTIiwKICAgICAiV1MiLAogICAgICJPTiIsCisgICAgIkxSSSIsCisgICAgIlJMSSIsCisgICAgIkZTSSIsCisgICAgIlBESSIsCiAgICAgTlVMTAogfTsKIGNvbnN0IGNoYXIgKl9QeVVuaWNvZGVfRWFzdEFzaWFuV2lkdGhOYW1lc1tdID0gewpAQCAtMTI3MywzNSArMTI4MSwzNSBAQAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIAogICAgIDAsIDEwNywgMTA3LCAxMDcsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDgsIDEwOCwgCiAgICAgMTA4LCAxMDgsIDEwOCwgMCwgNzgsIDc4LCAxMDksIDExMCwgMTEwLCAxMTEsIDExMiwgMTEzLCAyNiwgMjYsIDgxLCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMTE0LCAxMTUsIDExNiwgMTEzLCAwLCAwLCAxMTMsIDExMywgMTE3LCAxMTcsIAotICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExOSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMjAsIAotICAgIDEyMSwgMTIyLCAxMTQsIDExNSwgMTE2LCAxMjMsIDEyNCwgMTI1LCAxMjUsIDEyNiwgODYsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgODYsIDgxLCA4MSwgODYsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTEwLCAKLSAgICAxMjgsIDEyOCwgMTEzLCAxMTcsIDExNywgMTI5LCAxMTcsIDExNywgMTE3LCAxMTcsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExOCwgMTE3LCAxMTgsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE4LCAxMTMsIDExNywgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDEwOCwgMjYsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDExOSwgMTE5LCA4MSwgODEsIDI2LCA4NiwgODEsIDgxLCA4NiwgCi0gICAgMTE3LCAxMTcsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTE3LCAxMTcsIAotICAgIDExNywgMTMyLCAxMzIsIDExNywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDAsIDEzMywgMTE3LCAxMzQsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCAKKyAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAxMTQsIDExNSwgMTE2LCAxMTMsIDExNywgMCwgMTEzLCAxMTMsIDExOCwgMTE4LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMjAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTIxLCAKKyAgICAxMjIsIDEyMywgMTE0LCAxMTUsIDExNiwgMTI0LCAxMjUsIDEyNiwgMTI2LCAxMjcsIDg2LCA4MSwgODEsIDgxLCA4MSwgODEsIAorICAgIDg2LCA4MSwgODEsIDg2LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDExMCwgCisgICAgMTI5LCAxMjksIDExMywgMTE4LCAxMTgsIDEzMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTksIDExOCwgMTE5LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOSwgMTEzLCAxMTgsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKKyAgICAxMDgsIDI2LCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCAxMjAsIDEyMCwgODEsIDgxLCAyNiwgODYsIDgxLCA4MSwgODYsIAorICAgIDExOCwgMTE4LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDExOCwgMTE4LCAKKyAgICAxMTgsIDEzMywgMTMzLCAxMTgsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCisgICAgMTEzLCAxMTMsIDExMywgMTEzLCAwLCAxMTcsIDExOCwgMTM0LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgCiAgICAgODYsIDg2LCA4NiwgODEsIDg2LCA4NiwgODEsIDg2LCA4MSwgODEsIDgxLCA4NiwgODEsIDg2LCA4MSwgODYsIDgxLCA4NiwgCi0gICAgODEsIDgxLCAwLCAwLCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDExNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM2LCAKKyAgICA4MSwgODEsIDAsIDAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIAogICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDgxLCAKQEAgLTEzMTQsMTEgKzEzMjIsMTEgQEAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCA4NiwgODYsIDg2LCAKICAgICAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNywgMCwgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOCwgMCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCAKLSAgICA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4NiwgODYsIDEyMCwgMTIxLCAxMjIsIDgxLCA4MSwgODEsIAorICAgIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCA4MSwgODYsIDg2LCA4NiwgMTIxLCAxMjIsIDEyMywgODEsIDgxLCA4MSwgCiAgICAgODYsIDgxLCA4MSwgODYsIDg2LCA4MSwgODEsIDgxLCA4MSwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgCkBAIC0xNDQ0LDQxICsxNDUyLDQwIEBACiAgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAogICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKLSAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIAotICAgIDgxLCA4MSwgODEsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA4MSwgODEsIAorICAgIDgxLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA4NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNDk4LDE1ICsxNTA1LDE2IEBACiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE2MywgMTY0LCAwLCAKLSAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAxNzIsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTYzLCAxNjQsIDAsIDAsIDAsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIAogICAgIDE0MiwgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIApAQCAtMTUyMSw3ICsxNTI5LDcgQEAKICAgICA4MywgNTMsIDgzLCA4MywgODMsIDg1LCA0OCwgODEsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAogICAgIDE1MywgMTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA4NCwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzUsIDEzNSwgMTM1LCAxNzIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxMzgsIDEzOCwgMTM1LCAxMzUsIDEzNSwgMTc0LCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNTMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNTUwLDcgKzE1NTgsNyBAQAogICAgIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgxLCA4NiwgMTM5LCAxMzksIDEzOSwgMCwgMCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MSwgODYsIDEzOSwgMTM5LCAxMzUsIDAsIDAsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzNSwgMTM5LCAxMzUsIApAQCAtMTU2NiwxNyArMTU3NCwxNyBAQAogICAgIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIDE0NiwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDE0NywgMTM1LCAxNDcsIDEzOSwgMTM5LCAxNDcsIDE0NywgMTM1LCAxNDcsIDE3NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTQ3LCAxMzUsIDE0NywgMTM5LCAxMzksIDE0NywgMTQ3LCAxMzUsIDE0NywgMTc1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgODMsIAogICAgIDgzLCA4MywgODMsIDgzLCA4MywgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCA4NiwgODEsIAogICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDEzNSwgCiAgICAgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDE3NCwgMTQyLCAxMzksIDEzOSwgNDgsIDQ4LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxNzUsIDE0MiwgMTM5LCAxMzksIDQ4LCA0OCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgCi0gICAgMTM5LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzNSwgMTM1LCAxMzUsIDE3NCwgMTc0LCAwLCAwLCAwLCAKKyAgICAxMzksIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNzUsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCkBAIC0xNTg4LDggKzE1OTYsOCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIAotICAgIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODMsIDE3NSwgODYsIDg2LCA4NiwgODYsIDg2LCAKLSAgICA4MSwgODEsIDg2LCA4NiwgODYsIDg2LCA4MSwgMTM5LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDQ4LCAKKyAgICA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgzLCAxNzYsIDg2LCA4NiwgODYsIDg2LCA4NiwgCisgICAgODEsIDgxLCA4NiwgODYsIDg2LCA4NiwgODEsIDEzOSwgMTc2LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgODYsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgODEsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIApAQCAtMTYwMiw5ICsxNjEwLDkgQEAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTEsIDUxLCA1MSwgNTEsIDUxLCAKICAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCAKICAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDgxLCA4MSwgODYsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDgxLCAxNzYsIDE3NywgODYsIDE3OCwgODEsIDgxLCA4MSwgODEsIAorICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgODEsIDE3NywgMTc4LCA4NiwgMTc5LCA4MSwgODEsIDgxLCA4MSwgCiAgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc5LCA4NiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwLCA4NiwgCiAgICAgODEsIDg2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCkBAIC0xNjEzLDcgKzE2MjEsNyBAQAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAotICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDM1LCAxODAsIDQ3LCA0NywgNDQsIDQ3LCAKKyAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCAzNSwgMTgxLCA0NywgNDcsIDQ0LCA0NywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCkBAIC0xNjI1LDY1ICsxNjMzLDY1IEBACiAgICAgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDQzLCA0MywgCiAgICAgNDMsIDQzLCA0MywgMCwgMCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgCiAgICAgNDMsIDQzLCAwLCAzOCwgMCwgMzgsIDAsIDM4LCAwLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAzOCwgCi0gICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIDQzLCAxODEsIAotICAgIDQzLCAxODEsIDQzLCAxODEsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgyLCAxODIsIDE4MiwgCi0gICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIAotICAgIDE4MiwgNTgsIDE4MSwgNTgsIDU4LCA3NiwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTgzLCAzOCwgMTgzLCAxODIsIAotICAgIDc2LCA3NiwgNzYsIDQzLCA0MywgNDMsIDE4MSwgMCwgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIDAsIDc2LCA3NiwgCi0gICAgNzYsIDQzLCA0MywgNDMsIDE4MSwgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MywgMzgsIDc2LCAxODQsIDE4NCwgCi0gICAgMCwgMCwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTgzLCAzOCwgMTgzLCAxODIsIDE4NCwgNTgsIDAsIDE4NSwgMTg1LCAKLSAgICAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODcsIDE4NywgMTg3LCAxODgsIDE4OSwgCisgICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIDQzLCAxODIsIAorICAgIDQzLCAxODIsIDQzLCAxODIsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIAorICAgIDE4MywgNTgsIDE4MiwgNTgsIDU4LCA3NiwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTg0LCAzOCwgMTg0LCAxODMsIAorICAgIDc2LCA3NiwgNzYsIDQzLCA0MywgNDMsIDE4MiwgMCwgMCwgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIDAsIDc2LCA3NiwgCisgICAgNzYsIDQzLCA0MywgNDMsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgMzgsIDc2LCAxODUsIDE4NSwgCisgICAgMCwgMCwgNDMsIDQzLCA0MywgMCwgNDMsIDQzLCAzOCwgMTg0LCAzOCwgMTg0LCAxODMsIDE4NSwgNTgsIDAsIDE4NiwgMTg2LCAKKyAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxNzQsIDE3NCwgMTc0LCAxODgsIDE4OSwgCiAgICAgMTkwLCAxOTEsIDg0LCAxOTAsIDE5MCwgMTkwLCAyMiwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5MywgMTk0LCAxOTUsIAogICAgIDE5NiwgMjIsIDIyLCAyMiwgMTM4LCAxOTcsIDE5NywgMTk3LCAyMiwgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgCiAgICAgMjA0LCAyMSwgMjA1LCAxMTAsIDIwNSwgMjA2LCAyMDcsIDIyLCAxOTIsIDE5MiwgMTM4LCAyOCwgMzYsIDIyLCAxOTIsIAogICAgIDEzOCwgMTk3LCAyMDgsIDIwOCwgMTM4LCAxMzgsIDEzOCwgMjA5LCAxNjMsIDE2NCwgMTkyLCAxOTIsIDE5MiwgMTM4LCAKICAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDc4LCAxMzgsIDIwOCwgMTM4LCAxMzgsIDE5MiwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxODYsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAyMTAsIDUxLCAwLCAwLCAzNCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIAotICAgIDIxMSwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxMCwgMzQsIDM0LCAzNCwgMzQsIDIxMCwgMjEwLCAyMTAsIDIxMCwgCi0gICAgMjEwLCAyMTEsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMCwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAotICAgIDUxLCA1MSwgNTEsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMjE2LCAyMTcsIDg1LCA4NSwgCi0gICAgMjMsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDE3NSwgMTc1LCA4MSwgODEsIAotICAgIDgxLCA4MSwgMTc1LCAxNzUsIDE3NSwgODEsIDgxLCA4MiwgODIsIDgyLCA4MiwgODEsIDgyLCA4MiwgODIsIDE3NSwgMTc1LCAKLSAgICA4MSwgODYsIDgxLCAxNzUsIDE3NSwgODYsIDg2LCA4NiwgODYsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyMTgsIDIxOCwgNDksIDIxOSwgMjYsIDIxOSwgMjE4LCA0OSwgMjYsIDIxOSwgMzUsIDQ5LCA0OSwgCi0gICAgNDksIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDYsIDI2LCA0OSwgMjE5LCAyNiwgNzgsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMjYsIAotICAgIDI2LCAyMTgsIDIxOSwgMjE5LCAyNiwgNDksIDI2LCAyMjAsIDI2LCA0OSwgMjYsIDE4MywgMjIwLCA0OSwgNDksIDIyMSwgCi0gICAgMzUsIDQ5LCA0OSwgNDQsIDQ5LCAzNSwgMTU2LCAxNTYsIDE1NiwgMTU2LCAzNSwgMjYsIDIxOCwgMzUsIDM1LCA0OSwgNDksIAotICAgIDIyMiwgNzgsIDc4LCA3OCwgNzgsIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMjYsIDc4LCAyNiwgMjYsIDQ3LCA4MCwgMjIzLCAKLSAgICAyMjMsIDIyMywgMzcsIDM3LCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAzNywgMzcsIDM3LCAzNywgMjIzLCAyMjQsIAotICAgIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjUsIDIyNSwgMjI1LCAKLSAgICAyMjUsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNSwgCi0gICAgMjI1LCAyMjUsIDIyNSwgMTczLCAxNzMsIDE3MywgNDQsIDQ3LCAxNzMsIDE3MywgMTczLCAxNzMsIDM3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjI2LCAyMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyNiwgMjYsIDI2LCAyNiwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDE4NywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDAsIDIxMCwgMjExLCAyMTIsIAorICAgIDIxMywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMjE0LCA1MSwgMCwgMCwgMzQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgCisgICAgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMTQsIDM0LCAzNCwgMzQsIDM0LCAyMTQsIDIxNCwgMjE0LCAKKyAgICAyMTQsIDIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDAsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAorICAgIDUxLCA1MSwgNTEsIDUxLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDIyMCwgMjIxLCA4NSwgCisgICAgODUsIDIzLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgMTc2LCAxNzYsIAorICAgIDgxLCA4MSwgODEsIDgxLCAxNzYsIDE3NiwgMTc2LCA4MSwgODEsIDgyLCA4MiwgODIsIDgyLCA4MSwgODIsIDgyLCA4MiwgCisgICAgMTc2LCAxNzYsIDgxLCA4NiwgODEsIDE3NiwgMTc2LCA4NiwgODYsIDg2LCA4NiwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMiwgMjIyLCA0OSwgMjIzLCAyNiwgMjIzLCAyMjIsIDQ5LCAyNiwgMjIzLCAzNSwgCisgICAgNDksIDQ5LCA0OSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0NiwgMjYsIDQ5LCAyMjMsIDI2LCA3OCwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCAyNiwgMjYsIDIyMiwgMjIzLCAyMjMsIDI2LCA0OSwgMjYsIDIyNCwgMjYsIDQ5LCAyNiwgMTg0LCAyMjQsIDQ5LCA0OSwgCisgICAgMjI1LCAzNSwgNDksIDQ5LCA0NCwgNDksIDM1LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDM1LCAyNiwgMjIyLCAzNSwgMzUsIDQ5LCAKKyAgICA0OSwgMjI2LCA3OCwgNzgsIDc4LCA3OCwgNDksIDM1LCAzNSwgMzUsIDM1LCAyNiwgNzgsIDI2LCAyNiwgNDcsIDgwLCAyMjcsIAorICAgIDIyNywgMjI3LCAzNywgMzcsIDIyNywgMjI3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDM3LCAzNywgMzcsIDM3LCAyMjcsIDIyOCwgCisgICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMjksIAorICAgIDIyOSwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjksIDIyOSwgMjI5LCAKKyAgICAyMjksIDIyOSwgMjI5LCAxNzMsIDE3MywgMTczLCA0NCwgNDcsIDE3MywgMTczLCAxNzMsIDE3MywgMzcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyMzAsIDIzMCwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMwLCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjcsIDIyNiwgMjI2LCAyNiwgMjYsIDQwLCAyNiwgNDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMSwgMjMwLCAyMzAsIDI2LCAyNiwgNDAsIDI2LCA0MCwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDQwLCAyMjgsIDIyOSwgMjI5LCAyMzAsIDc4LCA3OCwgNDAsIDIyOSwgMjMwLCAKLSAgICAyMjgsIDIyOSwgMjMwLCAyMjgsIDc4LCA0MCwgNzgsIDIyOSwgMjMxLCAyMzIsIDc4LCAyMjksIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgMjI5LCAyMjgsIDIyOCwgMjI5LCA0MCwgMjI5LCAyMjksIDIyOCwgMjI4LCA0MCwgMjMwLCA0MCwgMjMwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgMjI5LCAyMzMsIDIyMiwgMjI5LCAyMjIsIDIyMiwgMjI4LCAyMjgsIDIyOCwgNDAsIDQwLCA0MCwgNDAsIDc4LCAyMjgsIAotICAgIDc4LCAyMjgsIDIyOSwgMjI5LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIyOSwgCi0gICAgMjMwLCAyMjgsIDIyOCwgMjI5LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOSwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMzQsIDQwLCAyMzAsIDc4LCAyMjksIDIyOSwgMjI5LCAyMjksIDIyOCwgCi0gICAgMjI4LCAyMjksIDIyOSwgNzgsIDIyNiwgMjM0LCAyMzQsIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIyOCwgMjI4LCAKLSAgICAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIyOSwgMjI5LCAyMzAsIDIzMCwgCi0gICAgMjI5LCAyMjksIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAKLSAgICA0MCwgNzgsIDc4LCAyMjgsIDQwLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNDAsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOSwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIAotICAgIDIzMCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIzMCwgMjMwLCA3OCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI4LCAyMjgsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzUsIDIzNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNDAsIDIzMiwgMjMzLCAyMzMsIDIzNCwgNzgsIDc4LCA0MCwgMjMzLCAyMzQsIAorICAgIDIzMiwgMjMzLCAyMzQsIDIzMiwgNzgsIDQwLCA3OCwgMjMzLCAyMzUsIDIzNiwgNzgsIDIzMywgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICAyMzMsIDIzMiwgMjMyLCAyMzMsIDQwLCAyMzMsIDIzMywgMjMyLCAyMzIsIDQwLCAyMzQsIDQwLCAyMzQsIDQwLCA0MCwgNDAsIAorICAgIDQwLCAyMzMsIDIzNywgMjI2LCAyMzMsIDIyNiwgMjI2LCAyMzIsIDIzMiwgMjMyLCA0MCwgNDAsIDQwLCA0MCwgNzgsIDIzMiwgCisgICAgNzgsIDIzMiwgMjMzLCAyMzMsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjMzLCAKKyAgICAyMzQsIDIzMiwgMjMyLCAyMzMsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMzLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzOCwgNDAsIDIzNCwgNzgsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMyLCAKKyAgICAyMzIsIDIzMywgMjMzLCA3OCwgMjMwLCAyMzgsIDIzOCwgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjMyLCAyMzIsIAorICAgIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjMzLCAyMzMsIDIzNCwgMjM0LCAKKyAgICAyMzMsIDIzMywgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIAorICAgIDQwLCA3OCwgNzgsIDIzMiwgNDAsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA0MCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMzLCA3OCwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAyMzQsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzIsIDIzMiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzOSwgMjQwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIApAQCAtMTcwMywxNCArMTcxMSwxNCBAQAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMjMsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKLSAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCi0gICAgMjM4LCAyMzgsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKKyAgICAzNCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjI3LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgCisgICAgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAorICAgIDI0MiwgMjQyLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCiAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCkBAIC0xNzQ1LDE0ICsxNzUzLDE0IEBACiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAKLSAgICAxNjMsIDE2NCwgMTYzLCAxNjQsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMTYzLCAxNjQsIDE2MywgMTY0LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAogICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKICAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyOCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgMTYzLCAxNjQsIDc4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMiwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgMTYzLCAxNjQsIDc4LCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgOSwgMTAsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIApAQCAtMTc2OSwzMCArMTc3NywzMCBAQAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDE2MywgMTY0LCA5LCAxMCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIAotICAgIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgMTYzLCAxNjQsIDE2MywgMTY0LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyMiwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgNzgsIDIyOCwgNzgsIDc4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgCisgICAgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjI2LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCA3OCwgMjMyLCA3OCwgNzgsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIAotICAgIDIyMiwgMjEyLCAyMTIsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDIzOSwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDc4LCAyMjgsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIAorICAgIDIyNiwgMjE2LCAyMTYsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDI0MywgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDc4LCAyMzIsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKQEAgLTE4MzgsMTA1ICsxODQ2LDEwNSBAQAogICAgIDEzOCwgNTIsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIDg0LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDEsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMCwgMCwgMCwgMjQyLCAyNDMsIDI0MywgMjQzLCAKLSAgICAyNDAsIDI0NCwgMTcwLCAyNDUsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgCi0gICAgMjQwLCAyNDAsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTAsIAotICAgIDI0MCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjUxLCAyNTIsIDI1MywgMjU0LCAKLSAgICAyNTUsIDI1NSwgMjQ4LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQxLCAyNDAsIDI1NiwgMjU2LCAyNTYsIDI0NCwgCi0gICAgMTcwLCAyNDMsIDI0MCwgMjYsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIAotICAgIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgCi0gICAgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NSwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAyNDYsIDI0NywgMjQ3LCAyNDcsIAorICAgIDI0NCwgMjQ4LCAxNzAsIDI0OSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAKKyAgICAyNDQsIDI0NCwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NCwgCisgICAgMjQ0LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNTUsIDI1NiwgMjU3LCAyNTgsIAorICAgIDI1OSwgMjU5LCAyNTIsIDI0OCwgMjQ4LCAyNDgsIDI0OCwgMjQ4LCAyNDUsIDI0NCwgMjYwLCAyNjAsIDI2MCwgMjQ4LCAKKyAgICAxNzAsIDI0NywgMjQ0LCAyNiwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgCisgICAgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMjYxLCAxNzAsIAorICAgIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDI1NywgMTcwLCAxNzAsIDAsIDAsIDI1OCwgMjU4LCAyNTksIDI1OSwgMjQ0LCAyNjAsIDI2MSwgCi0gICAgMjQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAxNzAsIAotICAgIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIAotICAgIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAyNjEsIDE3MCwgMTcwLCAwLCAwLCAyNjIsIDI2MiwgMjYzLCAyNjMsIDI0OCwgMjY0LCAyNjUsIAorICAgIDI1MiwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMTcwLCAKKyAgICAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgCisgICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMjYxLCAxNzAsIDI2MSwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDI1NywgMTcwLCAxNzAsIDI1NywgMjU3LCAyNTcsIDI1NywgMjQzLCAyNDQsIDI0NCwgMjYwLCAyNjEsIDAsIDAsIDAsIDAsIAorICAgIDI2MSwgMTcwLCAxNzAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjQ3LCAyNDgsIDI0OCwgMjY0LCAyNjUsIDAsIDAsIDAsIDAsIAogICAgIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDAsIDI2MiwgMjYyLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjMsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMTcwLCAxNzAsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMCwgMjY2LCAyNjYsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMCwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjQxLCAyNjYsIDI2NiwgCi0gICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI2MiwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAotICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDAsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI0NSwgMjcwLCAyNzAsIAorICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNjYsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKKyAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKQEAgLTE5NjIsNyArMTk3MCw3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjQ0LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIApAQCAtMTk3MSwxMSArMTk3OSwxMSBAQAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDE3MCwgMTcwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNTMsIDUzLCA1MywgNTMsIAogICAgIDUzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCAxMzgsIDEzOCwgCkBAIC0xOTk5LDcgKzIwMDcsNyBAQAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ0LCA0NywgNDQsIAotICAgIDQ3LCA0NCwgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUyLCAyNjcsIDI2NywgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTIsIDI3MSwgMjcxLCA0NCwgNDcsIDQ0LCAKICAgICA0NywgMCwgNDQsIDQ3LCA0NCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NywgNDQsIAogICAgIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0yMDA4LDcgKzIwMTYsNyBAQAogICAgIDQ4LCA0OCwgNDgsIDEzNSwgNDgsIDQ4LCA0OCwgMTQyLCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM5LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgODAsIDgwLCA4NSwgMjIxLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCA4MCwgODAsIDg1LCAyMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDAsIDAsIDAsIDAsIApAQCAtMjAyNCwxMyArMjAzMiwxMyBAQAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDg2LCAKICAgICA4NiwgODYsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCAxNzAsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgCiAgICAgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgCi0gICAgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTc0LCA4MywgODMsIAorICAgIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzksIDE3NSwgODMsIDgzLCAKICAgICA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDAsIDUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0yMDYwLDQ5NyArMjA2OCw0OTYgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgODMsIDEzOSwgCiAgICAgMTQyLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMTcwLCAxNzAsIDI3MCwgMTcwLCAyNzAsIDE3MCwgMTcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDE3MCwgMjcwLCAxNzAsIDI3MCwgMTcwLCAxNzAsIDI3MCwgMjcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMCwgMCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAyNzEsIDI3MiwgMjcxLCAyNzMsIDI3MywgMjczLCAyNzMsIAotICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyMTEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAKLSAgICAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMCwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDAsIDI3MSwgMCwgMjcxLCAyNzEsIAotICAgIDAsIDI3MSwgMjcxLCAwLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzMsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAyNzQsIAorICAgIDAsIDAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3NCwgMjc0LCAKICAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCi0gICAgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDE5NSwgMjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDE3MCwgMTcwLCAyNzQsIDE3MCwgMjc0LCAxNzAsIDE3MCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAxNzAsIDI3NCwgMTcwLCAyNzQsIDE3MCwgMTcwLCAyNzQsIDI3NCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDAsIDAsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMjc2LCAyNiwgMCwgMCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc4LCAyNzksIAotICAgIDI3NywgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI3NywgMjgwLCAyODAsIDI4MSwgMjgxLCAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgCi0gICAgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIDI0MywgMjQzLCAyNzgsIDI3OSwgMjc3LCAyNzcsIAotICAgIDI3NywgMjc3LCAyODEsIDI4MSwgMjgxLCAyODIsIDI3NywgMjgyLCAwLCAyNzcsIDI4MiwgMjc3LCAyNzcsIDI4MCwgMjgzLCAKLSAgICAyODQsIDI4MywgMjg0LCAyODMsIDI4NCwgMjg1LCAyNzcsIDI3NywgMjg2LCAyODcsIDI4OCwgMjg4LCAyODksIDAsIDI3NywgCi0gICAgMjkwLCAyODUsIDI3NywgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTE3LCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDE4NywgMCwgMjkxLCAyOTEsIDI5MiwgMjkzLCAyOTIsIDI5MSwgCi0gICAgMjkxLCAyOTQsIDI5NSwgMjkxLCAyOTYsIDI5NywgMjk4LCAyOTcsIDI5NywgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIAotICAgIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTcsIDI5MSwgMzAwLCAzMDEsIDMwMCwgMjkxLCAyOTEsIDMwMiwgMzAyLCAKLSAgICAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgCi0gICAgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAyOTQsIDI5MSwgMjk1LCAzMDMsIAotICAgIDMwNCwgMzAzLCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKLSAgICAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgCi0gICAgMjk0LCAzMDEsIDI5NSwgMzAxLCAyOTQsIDI5NSwgMzA2LCAzMDcsIDMwOCwgMzA2LCAzMDYsIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzEwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMTAsIDMxMCwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAwLCAwLCAwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAwLCAwLCAzMDksIDMwOSwgMzA5LCAKLSAgICAwLCAwLCAwLCAyOTMsIDI5MywgMzAxLCAzMDMsIDMxMSwgMjkzLCAyOTMsIDAsIDMxMiwgMzEzLCAzMTMsIDMxMywgMzEzLCAKLSAgICAzMTIsIDMxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0LCAzMTQsIDMxNCwgMjYsIDMwLCAwLCAwLCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgODMsIDEzOCwgODMsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTUzLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAyNzUsIDI3NiwgMjc1LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgCisgICAgMjc3LCAyNzcsIDI3NywgMjc3LCAyMTUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIAorICAgIDI3NSwgMjc1LCAyNzUsIDI3NSwgMCwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDAsIDI3NSwgMCwgMjc1LCAyNzUsIDAsIAorICAgIDI3NSwgMjc1LCAwLCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzcsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAyNzgsIDI3OCwgCisgICAgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTk1LCAyNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMjgwLCAyNiwgMCwgMCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCisgICAgNzEsIDcxLCA3MSwgNzEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgyLCAyODMsIDI4MSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MSwgCisgICAgMjg0LCAyODQsIDI4NSwgMjg1LCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIAorICAgIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI0NywgMjQ3LCAyODIsIDI4MywgMjgxLCAyODEsIDI4MSwgMjgxLCAKKyAgICAyODUsIDI4NSwgMjg1LCAyODYsIDI4MSwgMjg2LCAwLCAyODEsIDI4NiwgMjgxLCAyODEsIDI4NCwgMjg3LCAyODgsIDI4NywgCisgICAgMjg4LCAyODcsIDI4OCwgMjg5LCAyODEsIDI4MSwgMjkwLCAyOTEsIDI5MiwgMjkyLCAyOTMsIDAsIDI4MSwgMjk0LCAyODksIAorICAgIDI4MSwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTE4LCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDE3NCwgMCwgMjk1LCAyOTUsIDI5NiwgMjk3LCAyOTYsIDI5NSwgMjk1LCAyOTgsIAorICAgIDI5OSwgMjk1LCAzMDAsIDMwMSwgMzAyLCAzMDEsIDMwMSwgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAKKyAgICAzMDMsIDMwMywgMzAzLCAzMDEsIDI5NSwgMzA0LCAzMDUsIDMwNCwgMjk1LCAyOTUsIDMwNiwgMzA2LCAzMDYsIDMwNiwgCisgICAgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIAorICAgIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAyOTgsIDI5NSwgMjk5LCAzMDcsIDMwOCwgMzA3LCAKKyAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCisgICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMjk4LCAzMDUsIAorICAgIDI5OSwgMzA1LCAyOTgsIDI5OSwgMzEwLCAzMTEsIDMxMiwgMzEwLCAzMTAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzE0LCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTQsIDMxNCwgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAKKyAgICAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAwLCAwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAzMTMsIDMxMywgMzEzLCAwLCAwLCAwLCAyOTcsIAorICAgIDI5NywgMzA1LCAzMDcsIDMxNSwgMjk3LCAyOTcsIDAsIDMxNiwgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTYsIDMxNiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE4LCAzMTgsIDMxOCwgMjYsIDMwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgMCwgMCwgMCwgODMsIDEzOCwgODMsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTUzLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg2LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg2LCAwLCAwLCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgODMsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAotICAgIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDAsIDAsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAxMDcsIDAsIDAsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAxMDQsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDMxNiwgMzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDAsIDAsIDAsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMzUsIDg2LCAxMzUsIDgxLCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDgxLCAxNzUsIAotICAgIDg2LCAwLCAwLCAwLCAwLCAxNDIsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMzE2LCAzMTYsIDEwNCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDMxNiwgMzE2LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAKLSAgICAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgCi0gICAgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMCwgMTM5LCAxMzUsIAotICAgIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTQyLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAotICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKLSAgICAxNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCAKLSAgICAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTQyLCAxNDEsIDgzLCA4MywgCi0gICAgMTg4LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzOSwgMTM1LCAxNTAsIDE1MCwgMTM1LCAxMzUsIDEzNSwgMTQyLCAxNDIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc0LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxNzQsIDE0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIAotICAgIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ4LCA0OCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDgzLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAxMDcsIDAsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMTA3LCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMCwgMTA0LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgCisgICAgMzIwLCAwLCAwLCAwLCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTA3LCAxMzUsIDEzNSwgMTM1LCAwLCAxMzUsIDEzNSwgMCwgMCwgMCwgMCwgMCwgMTM1LCA4NiwgMTM1LCA4MSwgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCA4MSwgMTc2LCA4NiwgMCwgMCwgMCwgMCwgMTQyLCAKKyAgICAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0LCAxMDQsIAorICAgIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDMyMCwgMzIwLCAKKyAgICAxMDQsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIAorICAgIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAKKyAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDAsIDEzOSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE0MiwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgCisgICAgODMsIDAsIDAsIDAsIDAsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKKyAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDE0MiwgMTQxLCA4MywgODMsIDE4OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDgxLCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDE0OSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzNSwgMTUwLCAxNTAsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDE0MiwgMTQyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCAKKyAgICA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NSwgNDgsIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDgzLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIAorICAgIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNDUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKICAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCiAgICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzOSwgMTM5LCAxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDAsIDAsIAorICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM1LCA1MywgNTMsIDUzLCAKKyAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAKLSAgICAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTksIDMxOSwgCi0gICAgMTc1LCAxNzUsIDE3NSwgODAsIDgwLCA4MCwgMzIwLCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODAsIDgwLCA4MSwgODEsIAotICAgIDgxLCA4MSwgODEsIDg2LCA4NiwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODEsIAotICAgIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTgsIDMxOCwgCi0gICAgMzE4LCAzMTgsIDMxOCwgMzE4LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIzLCAzMjMsIDE3NiwgMTc2LCAxNzYsIDgwLCA4MCwgODAsIAorICAgIDMyNCwgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA4NiwgCisgICAgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDgwLCA4MCwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODYsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgODEsIAotICAgIDgxLCA4MSwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA4MSwgODEsIDgxLCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAwLCA0OSwgNDksIDAsIDAsIDQ5LCAwLCAwLCA0OSwgNDksIDAsIDAsIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMCwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgMCwgCisgICAgNDksIDQ5LCAwLCAwLCA0OSwgMCwgMCwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgCisgICAgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgCi0gICAgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgNDksIDM1LCAwLCAwLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMCwgMTMwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTMwLCAwLCAwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAwLCAKLSAgICAxMzAsIDEzMCwgMCwgMTMwLCAwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIAotICAgIDAsIDEzMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDM1LCAwLCAwLCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAKKyAgICAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAwLCAwLCAwLCAwLCAxMzEsIDAsIDEzMSwgCisgICAgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAKKyAgICAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgsIDc4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMzIzLCAwLCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDIxOCwgMjE4LCAwLCAwLCAwLCAwLCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMjM3LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgMjY0LCAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgsIDc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzI3LCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDIyMiwgMjIyLCAwLCAwLCAwLCAwLCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMjQxLCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMjY4LCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAwLCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIApAQCAtMjU2MCw3NyArMjU2Nyw3NiBAQAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAotICAgIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKQEAgLTI2NDMsMTcgKzI2NDksMTcgQEAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMCwgCi0gICAgMCwgCisgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMCwgMCwgCiB9OwogCiAvKiBkZWNvbXBvc2l0aW9uIGRhdGEgKi8KQEAgLTUxNzgsNyArNTE4NCw2IEBACiAJeyAyNTUsIDcsIDgsIDI1NSwgMCB9LAogCXsgMjU1LCA3LCA5LCAyNTUsIDAgfSwKIAl7IDEsIDUsIDI1NSwgMjU1LCAwIH0sCi0JeyAxNSwgMTQsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDEwLCAyNTUsIDI1NSwgMCB9LAogCXsgMTgsIDI1NSwgMjU1LCAyNTUsIDAgfSwKIAl7IDE5LCAyNTUsIDI1NSwgMjU1LCAwIH0sCkBAIC01MTkxLDYgKzUxOTYsNyBAQAogCXsgMjU1LCAyNTUsIDksIDI1NSwgMCB9LAogCXsgMTksIDMwLCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCA4LCAyNTUsIDI1NSwgMCB9LAorCXsgMjU1LCAyNywgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjIsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDIzLCAyNTUsIDI1NSwgMCB9LAogCXsgOSwgMjU1LCAyNTUsIDI1NSwgMCB9LApAQCAtNTIwNSw4ICs1MjExLDggQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoYW5nZXNfM18yXzBfaW5kZXhbXSA9IHsKICAgICAwLCAxLCAyLCAyLCAzLCA0LCA1LCA2LCAyLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAKICAgICAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyLCAyLCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIAotICAgIDM2LCAyLCAyLCAyLCAzNywgMzgsIDIsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIAotICAgIDUxLCAyLCA1MiwgMiwgMiwgNTMsIDU0LCA1NSwgNTYsIDU3LCAyLCAyLCA1OCwgNTksIDYwLCAyLCAyLCA2MSwgNjIsIDYzLCAKKyAgICAzNiwgMiwgMiwgMiwgMzcsIDM4LCAyLCAzOSwgMiwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIAorICAgIDUwLCAyLCA1MSwgMiwgMiwgNTIsIDUzLCA1NCwgNTUsIDU2LCAyLCA1NywgNTgsIDU5LCA2MCwgMiwgMiwgNjEsIDYyLCA2MywgCiAgICAgNjQsIDY1LCA2NSwgMiwgMiwgMiwgMiwgNjYsIDIsIDY3LCA2OCwgNjksIDcwLCA3MSwgMiwgMiwgMiwgNzIsIDczLCA3NCwgCiAgICAgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDIsIDIsIDIsIDIsIDIsIDIsIDgyLCAyLCAyLCAyLCAyLCAyLCA4MywgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01MjE3LDggKzUyMjMsOCBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTQsIDk1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NiwgNTAsIDUwLCAKLSAgICA5NywgOTgsIDUwLCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk0LCA5NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTYsIDQ5LCA0OSwgCisgICAgOTcsIDk4LCA0OSwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTUyMjksMTMgKzUyMzUsMTMgQEAKICAgICAxMTksIDEyMCwgMTIxLCAxMjIsIDIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAyLCAyLCAyLCAyLCAyLCAyLCAxMjgsIDIsIAogICAgIDEyOSwgMTMwLCAxMzEsIDIsIDEzMiwgMiwgMTMzLCAyLCAyLCAyLCAxMzQsIDIsIDIsIDIsIDEzNSwgMTM2LCAxMzcsIDEzOCwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTM5LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNDAsIDIsIDE0MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAotICAgIDUwLCAxNDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE0MCwgMiwgMTQxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDE0MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDE0MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgNDksIDE0MywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMTQ0LCAxNDUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTI2Miw5ICs1MjY4LDkgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OCwgNTAsIDE3OSwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNzgsIDQ5LCAxNzksIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTUwNSw3ICs1NTExLDcgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgMTgwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgMTgwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTU2MjcsNyArNTYzMyw3IEBACiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01Nzg3LDcwOSArNTc5MywyNjcgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDQsIDAsIDAsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDEsIDEsIDAsIDAsIDAsIAorICAgIDQsIDM1LCA4LCA2LCA3LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCAxLCAxLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDksIAogICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NSwgNDYsIDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYsIDQsIDAsIDAsIDM3LCAzOCwgMzksIDQwLCAKLSAgICA0MSwgNDIsIDEsIDEsIDAsIDAsIDAsIDQsIDM2LCA4LCA2LCA3LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCAxLCAxLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NSwgCi0gICAgNDYsIDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAKICAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDE5LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTQsIDE0LCAxNCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKLSAgICAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIDksIDAsIAotICAgIDksIDAsIDksIDAsIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTY0OTcsMTUgKzYwNjEsMjAgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC02NTE1LDMzICs2MDg0LDQ3MCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDE5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQsIDE0LCAxNCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKKyAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDksIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAorICAgIDksIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhbmdlX3JlY29yZCogZ2V0X2NoYW5nZV8zXzJfMChQeV9VQ1M0IG4pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmggYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKaW5kZXggMzgzODg4Mi4uN2NjYjEyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCisrKyBiL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaApAQCAtNiw3ICs2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxleGljb25bXSA9IHsKICAgICA3NiwgNjksIDg0LCA4NCwgNjksIDIxMCwgODcsIDczLCA4NCwgMjAwLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3NiwgCiAgICAgMTk3LCA4MywgNzcsIDY1LCA3NiwgMjA0LCA4MywgNzMsIDcxLCAyMDYsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDIwNCwgCi0gICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjcsIDc0LCAyMDMsIDY1LCA4MiwgNjUsIDY2LCA3MywgMTk1LCA3NywgCisgICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIDY3LCA3NCwgMjAzLCA3NywgCiAgICAgNjUsIDg0LCA3MiwgNjksIDc3LCA2NSwgODQsIDczLCA2NywgNjUsIDIwNCwgNjksIDcxLCA4OSwgODAsIDg0LCA3MywgNjUsIAogICAgIDIwNiwgNzIsIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgMjAwLCA2NywgNzksIDc3LCA4MCwgNjUsIDg0LCA3MywgCiAgICAgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDY3LCA4NSwgNzgsIDY5LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA4MywgODksIDc3LCAKQEAgLTI3LDI0ICsyNywyNCBAQAogICAgIDc1LCA2NSwgNzgsIDE5MywgMTk0LCA3NywgNzksIDY4LCA3MywgNzAsIDczLCA2OSwgMjEwLCA2OCwgNzksIDIxMiwgNzUsIAogICAgIDY1LCA3OCwgNzEsIDg4LCAyMDEsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4NCwgNzMsIDY2LCA2OSwgCiAgICAgODQsIDY1LCAyMDYsIDc5LCAxOTgsIDczLCA3OCwgNzMsIDg0LCA3MywgNjUsIDIwNCwgNzcsIDY5LCA2OSwgMjA1LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3NywgODksIDY1LCA3OCwgNzcsIDY1LCAyMTAsIDc1LCA3MiwgNzcsIDY5LCAKLSAgICAyMTAsIDg1LCAxMjgsIDg3LCA3MiwgNzMsIDg0LCAxOTcsIDY3LCA2NSwgODIsIDgyLCA3MywgNjksIDIxMCwgNzMsIDEyOCwgCi0gICAgNjUsIDgyLCA4MiwgNzksIDg3LCAxMjgsIDc5LCAxMjgsIDY1LCA2NiwgNzksIDg2LCAxOTcsIDc3LCA2NSwgODIsIDc1LCAKLSAgICAxMjgsIDg5LCA2OSwgMjAwLCA2NSwgODIsIDgyLCA3OSwgMjE1LCA2NywgNzksIDgwLCA4NCwgNzMsIDE5NSwgODAsIDcyLCAKLSAgICA2NSwgODMsIDY5LCA0NSwgMTk3LCA3NywgNzksIDc4LCA3MSwgNzksIDc2LCA3MywgNjUsIDIwNiwgNjgsIDY5LCA4NiwgNjUsIAotICAgIDc4LCA2NSwgNzEsIDY1LCA4MiwgMjAxLCA2NiwgNzYsIDY1LCA2NywgMjAzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCA4OSwgCi0gICAgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDkwLCA2OSwgMTk2LCAKLSAgICA4NCwgNzIsIDY1LCAyMDUsIDc0LCA3OSwgNzgsIDcxLCA4MywgNjksIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCA3OSwgNzUsIAotICAgIDY5LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDE5NiwgNjYsIDc5LCAyMTYsIDcyLCA2OSwgNjYsIDgyLCA2OSwgCi0gICAgMjE1LCA3NywgNzMsIDY1LCAyMDcsIDgwLCA3NiwgODUsIDIxMSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCAKLSAgICA2OCwgMjExLCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCA2OCwgODIsIDY1LCA4NywgNzMsIDc4LCA3MSwgCi0gICAgMjExLCA2NywgNzIsIDc5LCA4MywgNjksIDc5LCA3OCwgMTk5LCA3MiwgNjUsIDc2LCA3MCwgODcsIDczLCA2OCwgODQsIAorICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDIwNCwgNzcsIDg5LCA2NSwgNzgsIDc3LCA2NSwgMjEwLCA4NSwgMTI4LCA3NSwgCisgICAgNzIsIDc3LCA2OSwgMjEwLCA4NywgNzIsIDczLCA4NCwgMTk3LCA2NSwgNjYsIDc5LCA4NiwgMTk3LCA2NywgNjUsIDgyLCAKKyAgICA4MiwgNzMsIDY5LCAyMTAsIDczLCAxMjgsIDY1LCA4MiwgODIsIDc5LCA4NywgMTI4LCA4OSwgNjksIDIwMCwgNzksIDEyOCwgCisgICAgNzcsIDY1LCA4MiwgNzUsIDEyOCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNjcsIDc5LCA4MCwgODQsIDczLCAxOTUsIDgwLCAKKyAgICA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NywgNzcsIDc5LCA3OCwgNzEsIDc5LCA3NiwgNzMsIDY1LCAyMDYsIDY4LCA2OSwgODYsIAorICAgIDY1LCA3OCwgNjUsIDcxLCA2NSwgODIsIDIwMSwgNjYsIDc2LCA2NSwgNjcsIDIwMywgODQsIDczLCA3NiwgMTk3LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA5MCwgNjksIAorICAgIDE5NiwgODQsIDcyLCA2NSwgMjA1LCA3NCwgNzksIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgCisgICAgNzksIDc1LCA2OSwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxOTYsIDY2LCA3OSwgMjE2LCA3MiwgNjksIDY2LCAKKyAgICA4MiwgNjksIDIxNSwgNzcsIDczLCA2NSwgMjA3LCA4MCwgNzYsIDg1LCAyMTEsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIAorICAgIDY1LCA4MiwgNjgsIDIxMSwgNzEsIDY5LCA3OSwgODIsIDcxLCA3MywgNjUsIDIwNiwgNjgsIDgyLCA2NSwgODcsIDczLCA3OCwgCisgICAgNzEsIDIxMSwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzIsIDY1LCA3NiwgNzAsIDg3LCA3MywgNjgsIDg0LCAKICAgICAyMDAsIDY2LCA2NSwgNzYsIDczLCA3OCwgNjksIDgzLCAxOTcsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDIxMywgODQsIDg3LCAKICAgICA3OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTYsIAotICAgIDY1LCA3NiwgNjcsIDcyLCA2OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNzMsIDE5NSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgNzksIDEyOCwgNjUsIDc2LCA2OSwgMTk4LCA4NCwgODcsIDIwNywgCi0gICAgNzIsIDY5LCA2NSwgODYsIDIxNywgNjcsIDc5LCA3OCwgODMsIDc5LCA3OCwgNjUsIDc4LCAyMTIsIDc5LCA4NiwgNjksIAotICAgIDIxMCwgNjYsIDgyLCA2NSwgNzIsIDc3LCAyMDEsIDgzLCA2NywgODIsIDczLCA4MCwgMjEyLCA4NSwgMjA4LCA3NiwgNzksIAorICAgIDY1LCA3NiwgNjcsIDcyLCA2OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNjUsIDc2LCA2OSwgMTk4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3OSwgMTI4LCA4NCwgODcsIDIwNywgCisgICAgNzIsIDY5LCA2NSwgODYsIDIxNywgNzksIDg2LCA2OSwgMjEwLCA2NywgNzksIDc4LCA4MywgNzksIDc4LCA2NSwgNzgsIAorICAgIDIxMiwgNjYsIDgyLCA2NSwgNzIsIDc3LCAyMDEsIDgzLCA2NywgODIsIDczLCA4MCwgMjEyLCA4NSwgMjA4LCA3NiwgNzksIAogICAgIDIxNSwgNzIsIDY1LCAyMDAsIDc5LCA3OCwgMTk3LCA2OCwgNzksIDg3LCAyMDYsIDcyLCA3MywgNzEsIDIwMCwgNzAsIDg1LCAKICAgICA3NiwgNzYsIDg3LCA3MywgNjgsIDg0LCAyMDAsIDY2LCA4MiwgNjUsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDY5LCA4MSwgODUsIAogICAgIDY1LCAyMDQsIDg0LCA2NSwgMTk5LCA2NiwgNjUsIDgyLCAxMjgsIDY4LCA3OSwgNzcsIDczLCA3OCwgMjA3LCA3OCwgODUsIApAQCAtNjUsNDkgKzY1LDQ5IEBACiAgICAgNzYsIDg1LCAxOTcsIDgzLCA3MiwgNjUsIDgyLCA2NSwgNjgsIDE5MywgODMsIDczLCA3OCwgNzIsIDY1LCA3NiwgMTkzLCAKICAgICA3NSwgNjUsIDEyOCwgODIsIDg1LCA3OCwgNzMsIDE5NSwgODMsIDY1LCA4NSwgODIsIDY1LCA4MywgNzIsIDg0LCA4MiwgCiAgICAgMTkzLCA4NCwgNjksIDg0LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDY5LCA4MywgNjksIDgyLCA2OSwgMjEyLCAKLSAgICA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgNzEsIDg1LCA4MiwgNzcsIDg1LCA3NSwgNzIsIDIwMSwgNzcsIDY1LCAxMjgsIAotICAgIDc3LCA2NSwgODksIDY5LCAyMDMsIDc3LCA2OSwgNjksIDg0LCA2OSwgMjAxLCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA4MywgODksIDgyLCA3MywgNjUsIDE5NSwgNzAsIDczLCA4NiwgNjksIDEyOCwgODAsIDY1LCAxMjgsIDg5LCA2NSwgCi0gICAgMTI4LCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA4MywgNzMsIDg4LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgCi0gICAgNjksIDgwLCA2NywgNzIsIDE5MywgNzgsIDY1LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgMTI4LCA3NiwgNzksIDc4LCAKLSAgICAxOTksIDc4LCA3MywgNzgsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc1LCA3MywgMTk1LCA3MiwgNjUsIDc3LCA5MCwgMTkzLCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAyMDQsIDc5LCA4MCwgNjksIDIwNiwgODIsIDY1LCAxMjgsIAotICAgIDgzLCA2NSwgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIDE5NywgODYsIDczLCA2OSwgMjEyLCA3NiwgCi0gICAgNjUsIDIwNywgOTAsIDkwLCA4OSwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgODIsIDg4LCAKLSAgICAxMjgsIDkwLCA5MCwgODksIDgyLCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDY1LCAxMjgsIDkwLCAKLSAgICA5MCwgODksIDEyOCwgOTAsIDkwLCA4NSwgODgsIDEyOCwgOTAsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgODUsIAotICAgIDgyLCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgODUsIDEyOCwgOTAsIDkwLCA4MywgODksIDY1LCAxMjgsIAotICAgIDkwLCA5MCwgODMsIDY1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCA5MCwgCi0gICAgNzksIDEyOCwgOTAsIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIDEyOCwgCi0gICAgOTAsIDkwLCA3MywgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODAsIAotICAgIDEyOCwgOTAsIDkwLCA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIAotICAgIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAxMjgsIAotICAgIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCA5MCwgCi0gICAgNjUsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgODMsIDgwLCAxMjgsIDkwLCA4NywgNzgsIDc0LCAKLSAgICAxMjgsIDkwLCA4NywgNzgsIDY2LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3NCwgMTI4LCA5MCwgODcsIDY1LCA4MiwgNjUsIAotICAgIDc1LCA2NSwgODksIDEyOCwgOTAsIDg3LCA2NSwgMTI4LCA5MCwgODUsIDg0LCAxMjgsIDkwLCA4NSwgNzksIDg4LCAxMjgsIAotICAgIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA4NSwgNzksIDEyOCwgOTAsIDg1LCA3NywgMTI4LCA5MCwgODUsIDY2LCA4NSwgCi0gICAgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDgzLCA3MiwgNjUsIDEyOCwgOTAsIDgyLCA2NSwgCi0gICAgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAxMjgsIDkwLCA3OSwgCi0gICAgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgOTAsIDc0LCA2OSwgCi0gICAgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDgxLCA2NSwgNjUsIDEyOCwgOTAsIDczLCA3OCwgNzksIDgyLCAKLSAgICAxMjgsIDkwLCA3MywgNzYsIDY4LCA2OSwgMTI4LCA5MCwgNzMsIDcxLCA5MCwgNjUsIDE5OSwgOTAsIDczLCA3MSwgMTI4LCAKLSAgICA5MCwgNzMsIDY4LCAxOTMsIDkwLCA3MywgNjYsIDEyOCwgOTAsIDczLCAxOTQsIDkwLCA3MywgNTEsIDEyOCwgOTAsIDIwMSwgCi0gICAgOTAsIDcyLCA4OSwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODQsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDkwLCAKLSAgICA3MiwgODksIDgyLCAxMjgsIDkwLCA3MiwgODksIDgwLCAxMjgsIDkwLCA3MiwgODksIDEyOCwgOTAsIDcyLCA4NywgNjksIAotICAgIDEyOCwgOTAsIDcyLCA4NywgNjUsIDEyOCwgOTAsIDcyLCA4NSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODQsIDEyOCwgOTAsIAotICAgIDcyLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAxMjgsIDkwLCA3MiwgODUsIDgwLCAxMjgsIDkwLCA3MiwgCi0gICAgODUsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDEyOCwgOTAsIDcyLCAKLSAgICA4NSwgMTI4LCA5MCwgNzIsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDc5LCA4NCwgMTI4LCA5MCwgNzIsIDc5LCA4MCwgMTI4LCAKLSAgICA5MCwgNzIsIDc5LCA3OSwgMTI4LCA5MCwgNzIsIDc5LCAxMjgsIDkwLCA3MiwgNzMsIDg2LCA2OSwgODQsIDY5LCAxMjgsIAotICAgIDkwLCA3MiwgNzMsIDEyOCwgOTAsIDcyLCA2OSwgODgsIDEyOCwgOTAsIDcyLCA2OSwgODQsIDEyOCwgOTAsIDcyLCA2OSwgCi0gICAgODAsIDEyOCwgOTAsIDcyLCA2OSwgNjksIDEyOCwgOTAsIDcyLCA2OSwgMTI4LCA5MCwgNzIsIDE5NywgOTAsIDcyLCA2NSwgCi0gICAgODgsIDEyOCwgOTAsIDcyLCA2NSwgODQsIDEyOCwgOTAsIDcyLCA2NSwgODIsIDEyOCwgOTAsIDcyLCA2NSwgODAsIDEyOCwgCi0gICAgOTAsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDEyOCwgOTAsIDcyLCAKLSAgICAxMjgsIDkwLCA2OSwgODQsIDY1LCAxMjgsIDkwLCA2OSwgODIsIDc5LCAxMjgsIDkwLCA2OSwgODIsIDIwNywgOTAsIDY5LCAKLSAgICA3OCwgMTI4LCA5MCwgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgOTAsIAotICAgIDY5LCA1MCwgMTI4LCA5MCwgMTk3LCA5MCwgNjUsIDg5LCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgOTAsIAotICAgIDY1LCA4OSwgNzMsIDIwNiwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA2NSwgODQsIDY1LCAKKyAgICA3MiwgNjUsIDc3LCA5MCwgMTkzLCA4MywgODksIDgyLCA3MywgNjUsIDE5NSwgODQsIDczLCA3NiwgNjgsIDY5LCAxMjgsIAorICAgIDcxLCA4NSwgODIsIDc3LCA4NSwgNzUsIDcyLCAyMDEsIDc3LCA2NSwgMTI4LCA3NywgNjUsIDg5LCA2OSwgMjAzLCA3NywgCisgICAgNjksIDY5LCA4NCwgNjksIDIwMSwgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzAsIDczLCA4NiwgNjksIAorICAgIDEyOCwgODAsIDY1LCAxMjgsIDg5LCA2NSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA4MywgNzMsIDg4LCAxMjgsIDY5LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNjksIDgwLCA2NywgNzIsIDE5MywgNzgsIDY1LCAxMjgsIDgzLCA2OSwgODYsIAorICAgIDY5LCA3OCwgMTI4LCA3NiwgNzksIDc4LCAxOTksIDc4LCA3MywgNzgsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc1LCA3MywgCisgICAgMTk1LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAyMDQsIDc5LCA4MCwgNjksIDIwNiwgODIsIDY1LCAKKyAgICAxMjgsIDgzLCA2NSwgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIDE5NywgODYsIDczLCA2OSwgMjEyLCAKKyAgICA3NiwgNjUsIDIwNywgOTAsIDkwLCA4OSwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODQsIDEyOCwgOTAsIDkwLCA4OSwgODIsIAorICAgIDg4LCAxMjgsIDkwLCA5MCwgODksIDgyLCAxMjgsIDkwLCA5MCwgODksIDgwLCAxMjgsIDkwLCA5MCwgODksIDY1LCAxMjgsIAorICAgIDkwLCA5MCwgODksIDEyOCwgOTAsIDkwLCA4NSwgODgsIDEyOCwgOTAsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA5MCwgCisgICAgODUsIDgyLCAxMjgsIDkwLCA5MCwgODUsIDgwLCAxMjgsIDkwLCA5MCwgODUsIDEyOCwgOTAsIDkwLCA4MywgODksIDY1LCAKKyAgICAxMjgsIDkwLCA5MCwgODMsIDY1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCAKKyAgICA5MCwgNzksIDEyOCwgOTAsIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIAorICAgIDEyOCwgOTAsIDkwLCA3MywgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgCisgICAgODAsIDEyOCwgOTAsIDkwLCA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgCisgICAgOTAsIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAKKyAgICAxMjgsIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCAKKyAgICA5MCwgNjUsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgODMsIDgwLCAxMjgsIDkwLCA4NywgNzgsIAorICAgIDc0LCAxMjgsIDkwLCA4NywgNzgsIDY2LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3NCwgMTI4LCA5MCwgODcsIDY1LCA4MiwgCisgICAgNjUsIDc1LCA2NSwgODksIDEyOCwgOTAsIDg3LCA2NSwgMTI4LCA5MCwgODUsIDg0LCAxMjgsIDkwLCA4NSwgNzksIDg4LCAKKyAgICAxMjgsIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA4NSwgNzksIDEyOCwgOTAsIDg1LCA3NywgMTI4LCA5MCwgODUsIDY2LCAKKyAgICA4NSwgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDgzLCA3MiwgNjUsIDEyOCwgOTAsIDgyLCAKKyAgICA2NSwgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAxMjgsIDkwLCAKKyAgICA3OSwgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgOTAsIDc0LCAKKyAgICA2OSwgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDgxLCA2NSwgNjUsIDEyOCwgOTAsIDczLCA3OCwgNzksIAorICAgIDgyLCAxMjgsIDkwLCA3MywgNzYsIDY4LCA2OSwgMTI4LCA5MCwgNzMsIDcxLCA5MCwgNjUsIDE5OSwgOTAsIDczLCA3MSwgCisgICAgMTI4LCA5MCwgNzMsIDY4LCAxOTMsIDkwLCA3MywgNjYsIDEyOCwgOTAsIDczLCAxOTQsIDkwLCA3MywgNTEsIDEyOCwgOTAsIAorICAgIDIwMSwgOTAsIDcyLCA4OSwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODQsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDg4LCAxMjgsIAorICAgIDkwLCA3MiwgODksIDgyLCAxMjgsIDkwLCA3MiwgODksIDgwLCAxMjgsIDkwLCA3MiwgODksIDEyOCwgOTAsIDcyLCA4NywgCisgICAgNjksIDEyOCwgOTAsIDcyLCA4NywgNjUsIDEyOCwgOTAsIDcyLCA4NSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODQsIDEyOCwgCisgICAgOTAsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAxMjgsIDkwLCA3MiwgODUsIDgwLCAxMjgsIDkwLCAKKyAgICA3MiwgODUsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDEyOCwgOTAsIAorICAgIDcyLCA4NSwgMTI4LCA5MCwgNzIsIDc5LCA4OCwgMTI4LCA5MCwgNzIsIDc5LCA4NCwgMTI4LCA5MCwgNzIsIDc5LCA4MCwgCisgICAgMTI4LCA5MCwgNzIsIDc5LCA3OSwgMTI4LCA5MCwgNzIsIDc5LCAxMjgsIDkwLCA3MiwgNzMsIDg2LCA2OSwgODQsIDY5LCAKKyAgICAxMjgsIDkwLCA3MiwgNzMsIDEyOCwgOTAsIDcyLCA2OSwgODgsIDEyOCwgOTAsIDcyLCA2OSwgODQsIDEyOCwgOTAsIDcyLCAKKyAgICA2OSwgODAsIDEyOCwgOTAsIDcyLCA2OSwgNjksIDEyOCwgOTAsIDcyLCA2OSwgMTI4LCA5MCwgNzIsIDE5NywgOTAsIDcyLCAKKyAgICA2NSwgODgsIDEyOCwgOTAsIDcyLCA2NSwgODQsIDEyOCwgOTAsIDcyLCA2NSwgODIsIDEyOCwgOTAsIDcyLCA2NSwgODAsIAorICAgIDEyOCwgOTAsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDEyOCwgOTAsIAorICAgIDcyLCAxMjgsIDkwLCA2OSwgODQsIDY1LCAxMjgsIDkwLCA2OSwgODIsIDc5LCAxMjgsIDkwLCA2OSwgODIsIDIwNywgOTAsIAorICAgIDY5LCA3OCwgMTI4LCA5MCwgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgCisgICAgOTAsIDY5LCA1MCwgMTI4LCA5MCwgMTk3LCA5MCwgNjUsIDg5LCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgCisgICAgOTAsIDY1LCA4OSwgNzMsIDIwNiwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA2NSwgODQsIDY1LCAKICAgICAxMjgsIDkwLCA2NSwgODIsIDgxLCA2NSwgMTI4LCA5MCwgNjUsIDgxLCA2OSwgMTk4LCA5MCwgNjUsIDc3LCA4OCwgMTI4LCAKICAgICA5MCwgNjUsIDIwNCwgOTAsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDY1LCA3MywgMjA2LCA5MCwgNjUsIDczLCAxMjgsIDkwLCAKICAgICA2NSwgNzIsIDEyOCwgOTAsIDY1LCAyMDAsIDkwLCA2NSwgNzEsIDEyOCwgOTAsIDY1LCA2OSwgNzAsIDEyOCwgOTAsIDQ4LCAKQEAgLTUyNSw3OSArNTI1LDc5IEBACiAgICAgODQsIDg1LCA4NCwgODQsIDg5LCAxMjgsIDg0LCA4NSwgODQsIDY5LCA4OSwgNjUsIDgzLCA2NSwgODQsIDEyOCwgODQsIDg1LCAKICAgICA4NCwgMTI4LCA4NCwgODUsIDgyLCA4OCwgMTI4LCA4NCwgODUsIDgyLCA4NSwgMTI4LCA4NCwgODUsIDgyLCA4NCwgNzYsIAogICAgIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc5LCA1MCwgMTI4LCA4NCwgODUsIDgyLCA3OCwgODMsIDg0LCA3MywgNzYsIDY5LCAKLSAgICAxMjgsIDg0LCA4NSwgODIsIDc4LCA2OSwgMTk2LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgODIsIDY2LCA2NSwgNzgsIAotICAgIDEyOCwgODQsIDg1LCA4MiwgMTI4LCA4NCwgODUsIDgwLCAxMjgsIDg0LCA4NSwgNzksIDg4LCAxMjgsIDg0LCA4NSwgNzksIAotICAgIDg0LCAxMjgsIDg0LCA4NSwgNzksIDgwLCAxMjgsIDg0LCA4NSwgNzksIDEyOCwgODQsIDg1LCA3OCwgNzgsIDg5LCAxMjgsIAotICAgIDg0LCA4NSwgNzcsIDY5LCA4NCwgNjksIDgzLCAxMjgsIDg0LCA4NSwgNzcsIDY1LCA2OSwgMTI4LCA4NCwgODUsIDc3LCAKLSAgICAxMjgsIDg0LCA4NSwgNzYsIDczLCA4MCwgMTI4LCA4NCwgODUsIDc1LCA4NywgNjksIDc4LCA4NCwgNzMsIDgzLCAxMjgsIAotICAgIDg0LCA4NSwgNzUsIDEyOCwgODQsIDg1LCA3MSwgODIsIDczLCAyMDMsIDg0LCA4NSwgNzEsIDUwLCAxMjgsIDg0LCA4NSwgCi0gICAgNzEsIDE3OCwgODQsIDg1LCA2NSwgODIsIDY5LCAxOTksIDg0LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA4NCwgODUsIDY1LCAKLSAgICA2OSwgMTI4LCA4NCwgMjEzLCA4NCwgODQsIDg1LCA4NSwgMTI4LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA3MSwgMTI4LCAKLSAgICA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA2NSwgNzEsIDEyOCwgODQsIDg0LCA4NSwgMTI4LCA4NCwgODQsIDg0LCA3MiwgNjUsIAotICAgIDEyOCwgODQsIDg0LCA4NCwgNjUsIDEyOCwgODQsIDg0LCA4MywgODUsIDEyOCwgODQsIDg0LCA4MywgNzksIDEyOCwgODQsIAotICAgIDg0LCA4MywgNzMsIDEyOCwgODQsIDg0LCA4MywgNjksIDY5LCAxMjgsIDg0LCA4NCwgODMsIDY5LCAxMjgsIDg0LCA4NCwgCi0gICAgODMsIDY1LCAxMjgsIDg0LCA4NCwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzMsIDczLCAxMjgsIDg0LCA4NCwgNzMsIDEyOCwgCi0gICAgODQsIDg0LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDg1LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCA3OSwgMTI4LCAKLSAgICA4NCwgODQsIDcyLCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3MywgMTI4LCA4NCwgODQsIDcyLCA2OSwgNjksIDEyOCwgODQsIAotICAgIDg0LCA3MiwgNjksIDEyOCwgODQsIDg0LCA3MiwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNzIsIDEyOCwgODQsIDg0LCA2OSwgCi0gICAgNzIsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDIwMCwgODQsIDg0LCA2OSwgNzIsIDEyOCwgODQsIDg0LCAKLSAgICA2OSwgMjAwLCA4NCwgODQsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODQsIAotICAgIDg0LCA2NSwgODUsIDEyOCwgODQsIDg0LCA2NSwgNzMsIDEyOCwgODQsIDg0LCA2NSwgNjUsIDEyOCwgODQsIDg0LCA1MCwgCi0gICAgMTI4LCA4NCwgODMsIDg3LCA2OSwgMTI4LCA4NCwgODMsIDg3LCA2NSwgMTI4LCA4NCwgODMsIDg2LCAxMjgsIDg0LCA4MywgCi0gICAgODMsIDY5LCAxMjgsIDg0LCA4MywgODMsIDY1LCAxMjgsIDg0LCA4MywgNzIsIDg1LCA3MSwgODMsIDEyOCwgODQsIDgzLCAKLSAgICA3MiwgNzksIDc5LCA3NSwgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDIwMywgODQsIDgzLCA3MiwgNjksIDgzLCAxMjgsIAotICAgIDg0LCA4MywgNzIsIDY5LCA3MSwgMTI4LCA4NCwgODMsIDcyLCA2OSwgMTk5LCA4NCwgODMsIDcyLCA2OSwgMTI4LCA4NCwgCi0gICAgODMsIDcyLCA2NSwgMTI4LCA4NCwgODMsIDY5LCA4MiwgNjksIDEyOCwgODQsIDgzLCA2NSwgNjgsIDczLCAxMjgsIDg0LCAKLSAgICA4MywgNjUsIDY4LCAyMDEsIDg0LCA4MywgNjUsIDY1LCA2OCwgNzMsIDg5LCAxMjgsIDg0LCA4MywgNjUsIDY1LCAxMjgsIAotICAgIDg0LCA4MywgMTkzLCA4NCwgODIsIDg5LCA2NiwgNzYsIDczLCA3OSwgMjA2LCA4NCwgODIsIDg1LCA4NCwgNzIsIDEyOCwgCi0gICAgODQsIDgyLCA4NSwgNzgsIDc1LCAxMjgsIDg0LCA4MiwgODUsIDc4LCA2NywgNjUsIDg0LCA2OSwgMTk2LCA4NCwgODIsIDg1LCAKLSAgICA3NywgODAsIDY5LCA4NCwgMTI4LCA4NCwgODIsIDg1LCA2OSwgMTI4LCA4NCwgODIsIDg1LCA2NywgNzUsIDEyOCwgODQsIAotICAgIDgyLCA3OSwgODAsIDczLCA2NywgNjUsIDIwNCwgODQsIDgyLCA3OSwgODAsIDcyLCA4OSwgMTI4LCA4NCwgODIsIDc5LCA3NywgCi0gICAgNzMsIDc1LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIAotICAgIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgwLCAKLSAgICA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgCi0gICAgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDIwNiwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc2LCAKLSAgICA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc2LCA3NiwgNjksIDg5LCA2NiwgODUsIDgzLCAxMjgsIAotICAgIDg0LCA4MiwgNzksIDc1LCA4NSwgODQsIDY1LCA4MywgODQsIDIwMSwgODQsIDgyLCA3OSwgNjksIDkwLCA2OSwgNzgsIDczLCAKLSAgICA2NSwgMjA2LCA4NCwgODIsIDczLCA4NSwgNzcsIDgwLCA3MiwgMTI4LCA4NCwgODIsIDczLCA4NCwgNzksIDIxMSwgODQsIAotICAgIDgyLCA3MywgODQsIDczLCA3NywgNzksIDgyLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA3MywgNzcsIDc5LCAKLSAgICA4NSwgMTI4LCA4NCwgODIsIDczLCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzksIDY4LCAxMjgsIAotICAgIDg0LCA4MiwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDc5LCAKLSAgICAyMDYsIDg0LCA4MiwgNzMsIDczLCA4MywgNjUsIDgwLCAxMjgsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIAotICAgIDIxMSwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgMjA1LCA4NCwgODIsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDc4LCAKLSAgICAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3NiwgNzMsIAotICAgIDY1LCA4NCwgMTk3LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCA4NCwgMTI4LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCAKLSAgICAyMTIsIDg0LCA4MiwgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIAotICAgIDY1LCAyMTAsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgyLCA3OSwgODUsIDc4LCAxOTYsIDg0LCA4MiwgCi0gICAgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NCwgODIsIDczLCA2NSwgNzgsIAotICAgIDcxLCA3NiwgNjksIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDE5NywgODQsIDgyLCA3MywgNjUsIDEyOCwgCi0gICAgODQsIDgyLCA3MywgMTI4LCA4NCwgODIsIDY5LCA4MywgNzMsIDc2LCA3NiwgNzksIDEyOCwgODQsIDgyLCA2OSwgNzgsIDY4LCAKLSAgICAxMjgsIDg0LCA4MiwgNjksIDc4LCAxOTYsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTEsIDEyOCwgODQsIAotICAgIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MCwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDQ5LCAKLSAgICAxMjgsIDg0LCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4MiwgNjksIDE5NywgODQsIDgyLCA2OSwgNjUsIDY4LCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDg0LCA4MiwgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDgwLCA2OSwgOTAsIDczLCA4NSwgNzcsIDEyOCwgCi0gICAgODQsIDgyLCA2NSwgNzgsIDgzLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgODQsIDgyLCA2NSwgNzgsIDgzLCA4MCwgNzksIAotICAgIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgMjEyLCA4NCwgODIsIDY1LCA3OCwgCi0gICAgODMsIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCA4MywgODMsIAotICAgIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3NywgODcsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA3NywgMTI4LCA4NCwgCi0gICAgODIsIDY1LCAyMDUsIDg0LCA4MiwgNjUsIDczLCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3MywgMjA2LCA4NCwgODIsIDY1LCAKLSAgICA3MywgNzYsIDczLCA3OCwgMTk5LCA4NCwgODIsIDY1LCA3MCwgNzAsIDczLCA2NywgMTI4LCA4NCwgODIsIDY1LCA3MCwgNzAsIAotICAgIDczLCAxOTUsIDg0LCA4MiwgNjUsIDY4LCAxOTcsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA4MiwgCi0gICAgNjUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDEyOCwgODQsIDc5LCA4OCwgMTI4LCA4NCwgNzksIDg3LCA2OSwgODIsIDEyOCwgCi0gICAgODQsIDc5LCA4NSwgODIsIDc4LCA3OSwgNzMsIDIxMSwgODQsIDc5LCA4NCwgNjUsIDIwNCwgODQsIDc5LCA4NCwgMTI4LCAKLSAgICA4NCwgNzksIDgyLCA4NCwgNzksIDczLCA4MywgMTk3LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgODMsIDEyOCwgODQsIAotICAgIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDIxMSwgODQsIDc5LCA4MiwgNjcsIDcyLCAxMjgsIDg0LCA3OSwgODEsIDEyOCwgCi0gICAgODQsIDc5LCA4MCwgNjYsIDY1LCA4MiwgMTI4LCA4NCwgNzksIDgwLCA0NSwgNzYsIDczLCA3MSwgNzIsIDg0LCA2OSwgMTk2LCAKLSAgICA4NCwgNzksIDgwLCAxMjgsIDg0LCA3OSwgMjA4LCA4NCwgNzksIDc5LCA4NCwgNzIsIDEyOCwgODQsIDc5LCA3OSwgNzgsIAotICAgIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDg0LCA3OSwgNzgsIDcxLCA4NSwgNjksIDEyOCwgODQsIDc5LCA3OCwgCi0gICAgNzEsIDg1LCAxOTcsIDg0LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTYsIDEyOCwgODQsIDc5LCAKLSAgICA3OCwgNjksIDQ1LCA1NSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU0LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTMsIAotICAgIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MiwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUxLCAxMjgsIDg0LCA3OSwgCi0gICAgNzgsIDY5LCA0NSwgNTAsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgMTI4LCAKLSAgICA4NCwgNzksIDc4LCA2NSwgMjA0LCA4NCwgNzksIDc3LCA4MCwgNzMsIDEyOCwgODQsIDc5LCA3NywgNjUsIDg0LCA3OSwgCi0gICAgMTI4LCA4NCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzUsIDg5LCAyMDcsIDg0LCA3OSwgNzMsIDc2LCAKLSAgICA2OSwgODQsIDEyOCwgODQsIDc5LCA3MSwgNjksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDg0LCA3OSwgNjgsIDIwNywgODQsIAotICAgIDc5LCA2NSwgNzgsIDY4LCA2NSwgNzUsIDcyLCA3MywgNjUsIDg0LCAxMjgsIDg0LCA3OSwgNjUsIDEyOCwgODQsIDc4LCAKKyAgICAxMjgsIDg0LCA4NSwgODIsIDc4LCA2OSwgMTk2LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgODIsIDc1LCA3MywgODMsIAorICAgIDIwMCwgODQsIDg1LCA4MiwgNjYsIDY1LCA3OCwgMTI4LCA4NCwgODUsIDgyLCAxMjgsIDg0LCA4NSwgODAsIDEyOCwgODQsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgODQsIDg1LCA3OSwgODQsIDEyOCwgODQsIDg1LCA3OSwgODAsIDEyOCwgODQsIDg1LCA3OSwgCisgICAgMTI4LCA4NCwgODUsIDc4LCA3OCwgODksIDEyOCwgODQsIDg1LCA3NywgNjksIDg0LCA2OSwgODMsIDEyOCwgODQsIDg1LCAKKyAgICA3NywgNjUsIDY5LCAxMjgsIDg0LCA4NSwgNzcsIDEyOCwgODQsIDg1LCA3NiwgNzMsIDgwLCAxMjgsIDg0LCA4NSwgNzUsIAorICAgIDg3LCA2OSwgNzgsIDg0LCA3MywgODMsIDEyOCwgODQsIDg1LCA3NSwgMTI4LCA4NCwgODUsIDcxLCA4MiwgNzMsIDIwMywgCisgICAgODQsIDg1LCA3MSwgNTAsIDEyOCwgODQsIDg1LCA3MSwgMTc4LCA4NCwgODUsIDY1LCA4MiwgNjksIDE5OSwgODQsIDg1LCAKKyAgICA2NSwgNjksIDgwLCAxMjgsIDg0LCA4NSwgNjUsIDY5LCAxMjgsIDg0LCAyMTMsIDg0LCA4NCwgODUsIDg1LCAxMjgsIDg0LCAKKyAgICA4NCwgODUsIDY4LCA2OCwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDY1LCA3MSwgMTI4LCA4NCwgODQsIAorICAgIDg1LCAxMjgsIDg0LCA4NCwgODQsIDcyLCA2NSwgMTI4LCA4NCwgODQsIDg0LCA2NSwgMTI4LCA4NCwgODQsIDgzLCA4NSwgCisgICAgMTI4LCA4NCwgODQsIDgzLCA3OSwgMTI4LCA4NCwgODQsIDgzLCA3MywgMTI4LCA4NCwgODQsIDgzLCA2OSwgNjksIDEyOCwgCisgICAgODQsIDg0LCA4MywgNjksIDEyOCwgODQsIDg0LCA4MywgNjUsIDEyOCwgODQsIDg0LCA3OSwgNzksIDEyOCwgODQsIDg0LCAKKyAgICA3MywgNzMsIDEyOCwgODQsIDg0LCA3MywgMTI4LCA4NCwgODQsIDcyLCA4NywgNjksIDEyOCwgODQsIDg0LCA3MiwgODUsIAorICAgIDEyOCwgODQsIDg0LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDczLCAxMjgsIAorICAgIDg0LCA4NCwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2NSwgNjUsIDEyOCwgCisgICAgODQsIDg0LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCAKKyAgICA4NCwgODQsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCAyMDAsIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNjUsIAorICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgODQsIDY1LCA4NSwgMTI4LCA4NCwgODQsIDY1LCA3MywgMTI4LCA4NCwgCisgICAgODQsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDUwLCAxMjgsIDg0LCA4MywgODcsIDY5LCAxMjgsIDg0LCA4MywgODcsIDY1LCAKKyAgICAxMjgsIDg0LCA4MywgODYsIDEyOCwgODQsIDgzLCA4MywgNjksIDEyOCwgODQsIDgzLCA4MywgNjUsIDEyOCwgODQsIDgzLCAKKyAgICA3MiwgODUsIDcxLCA4MywgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgCisgICAgMjAzLCA4NCwgODMsIDcyLCA2OSwgODMsIDEyOCwgODQsIDgzLCA3MiwgNjksIDcxLCAxMjgsIDg0LCA4MywgNzIsIDY5LCAKKyAgICAxOTksIDg0LCA4MywgNzIsIDY5LCAxMjgsIDg0LCA4MywgNzIsIDY1LCAxMjgsIDg0LCA4MywgNjksIDgyLCA2OSwgMTI4LCAKKyAgICA4NCwgODMsIDY1LCA2OCwgNzMsIDEyOCwgODQsIDgzLCA2NSwgNjgsIDIwMSwgODQsIDgzLCA2NSwgNjUsIDY4LCA3MywgODksIAorICAgIDEyOCwgODQsIDgzLCA2NSwgNjUsIDEyOCwgODQsIDgzLCAxOTMsIDg0LCA4MiwgODksIDY2LCA3NiwgNzMsIDc5LCAyMDYsIAorICAgIDg0LCA4MiwgODUsIDg0LCA3MiwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNzUsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDY3LCA2NSwgCisgICAgODQsIDY5LCAxOTYsIDg0LCA4MiwgODUsIDc3LCA4MCwgNjksIDg0LCAxMjgsIDg0LCA4MiwgODUsIDY5LCAxMjgsIDg0LCAKKyAgICA4MiwgODUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDc5LCA4MCwgNzMsIDY3LCA2NSwgMjA0LCA4NCwgODIsIDc5LCA4MCwgNzIsIAorICAgIDg5LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4NCwgCisgICAgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3OCwgMTI4LCA4NCwgODIsIAorICAgIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDg0LCAKKyAgICA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgMjA2LCA4NCwgODIsIAorICAgIDc5LCA3NywgNzMsIDc1LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzYsIDc2LCAKKyAgICA2OSwgODksIDY2LCA4NSwgODMsIDEyOCwgODQsIDgyLCA3OSwgNzUsIDg1LCA4NCwgNjUsIDgzLCA4NCwgMjAxLCA4NCwgODIsIAorICAgIDc5LCA2OSwgOTAsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDg0LCA4MiwgNzMsIDg1LCA3NywgODAsIDcyLCAxMjgsIDg0LCA4MiwgCisgICAgNzMsIDg0LCA3OSwgMjExLCA4NCwgODIsIDczLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCAKKyAgICA3MywgODMsIDczLCA3NywgNzksIDg1LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIAorICAgIDgwLCA3OSwgNjgsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCA3MywgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDE5NywgCisgICAgODQsIDgyLCA3MywgNzksIDIwNiwgODQsIDgyLCA3MywgNzMsIDgzLCA2NSwgODAsIDEyOCwgODQsIDgyLCA3MywgNzEsIDgyLCAKKyAgICA2NSwgNzcsIDc3LCA3OSwgMjExLCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCAyMDUsIDg0LCA4MiwgNzMsIDcxLCA3OSwgODIsIAorICAgIDcxLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgODIsIDczLCA3MCwgCisgICAgNzksIDc2LCA3MywgNjUsIDg0LCAxOTcsIDg0LCA4MiwgNzMsIDY4LCA2OSwgNzgsIDg0LCAxMjgsIDg0LCA4MiwgNzMsIDY4LCAKKyAgICA2OSwgNzgsIDIxMiwgODQsIDgyLCA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIAorICAgIDg1LCA3NiwgNjUsIDIxMCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODIsIDc5LCA4NSwgNzgsIDE5NiwgCisgICAgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDg0LCA4MiwgNzMsIAorICAgIDY1LCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4NCwgODIsIDczLCA2NSwgCisgICAgMTI4LCA4NCwgODIsIDczLCAxMjgsIDg0LCA4MiwgNjksIDgzLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA4NCwgODIsIDY5LCAKKyAgICA3OCwgNjgsIDEyOCwgODQsIDgyLCA2OSwgNzgsIDE5NiwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MSwgCisgICAgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUwLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCAKKyAgICA0NSwgNDksIDEyOCwgODQsIDgyLCA2OSwgNjksIDEyOCwgODQsIDgyLCA2OSwgMTk3LCA4NCwgODIsIDY5LCA2NSwgNjgsIAorICAgIDczLCA3OCwgNzEsIDEyOCwgODQsIDgyLCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgODAsIDY5LCA5MCwgNzMsIDg1LCA3NywgCisgICAgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDg2LCA2OSwgODIsIDgzLCA2NSwgMjA0LCA4NCwgODIsIDY1LCA3OCwgODMsIDgwLCAKKyAgICA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCAyMTIsIDg0LCA4MiwgNjUsIAorICAgIDc4LCA4MywgNzcsIDczLCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDgzLCAKKyAgICA4MywgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc3LCA4NywgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDc3LCAxMjgsIAorICAgIDg0LCA4MiwgNjUsIDIwNSwgODQsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDczLCAyMDYsIDg0LCA4MiwgCisgICAgNjUsIDczLCA3NiwgNzMsIDc4LCAxOTksIDg0LCA4MiwgNjUsIDcwLCA3MCwgNzMsIDY3LCAxMjgsIDg0LCA4MiwgNjUsIDcwLCAKKyAgICA3MCwgNzMsIDE5NSwgODQsIDgyLCA2NSwgNjgsIDE5NywgODQsIDgyLCA2NSwgNjcsIDg0LCA3OSwgODIsIDEyOCwgODQsIAorICAgIDgyLCA2NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgMTI4LCA4NCwgNzksIDg4LCAxMjgsIDg0LCA3OSwgODcsIDY5LCA4MiwgCisgICAgMTI4LCA4NCwgNzksIDg1LCA4MiwgNzgsIDc5LCA3MywgMjExLCA4NCwgNzksIDg0LCA2NSwgMjA0LCA4NCwgNzksIDg0LCAKKyAgICAxMjgsIDg0LCA3OSwgODIsIDg0LCA3OSwgNzMsIDgzLCAxOTcsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCA4MywgCisgICAgMTI4LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgMjExLCA4NCwgNzksIDgyLCA2NywgNzIsIDEyOCwgODQsIDc5LCAKKyAgICA4MSwgMTI4LCA4NCwgNzksIDgwLCA2NiwgNjUsIDgyLCAxMjgsIDg0LCA3OSwgODAsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIAorICAgIDY5LCAxOTYsIDg0LCA3OSwgODAsIDEyOCwgODQsIDc5LCAyMDgsIDg0LCA3OSwgNzksIDg0LCA3MiwgMTI4LCA4NCwgNzksIAorICAgIDc5LCA3OCwgMTI4LCA4NCwgNzksIDc4LCA3OSwgODMsIDEyOCwgODQsIDc5LCA3OCwgNzEsIDg1LCA2OSwgMTI4LCA4NCwgCisgICAgNzksIDc4LCA3MSwgODUsIDE5NywgODQsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NiwgMTI4LCAKKyAgICA4NCwgNzksIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTQsIDEyOCwgODQsIDc5LCA3OCwgNjksIAorICAgIDQ1LCA1MywgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUyLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTEsIDEyOCwgCisgICAgODQsIDc5LCA3OCwgNjksIDQ1LCA1MCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDg0LCA3OSwgNzgsIDY1LCAyMDQsIDg0LCA3OSwgNzcsIDgwLCA3MywgMTI4LCA4NCwgNzksIDc3LCA2NSwgODQsIAorICAgIDc5LCAxMjgsIDg0LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3NSwgODksIDIwNywgODQsIDc5LCA3MywgCisgICAgNzYsIDY5LCA4NCwgMTI4LCA4NCwgNzksIDcxLCA2OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgODQsIDc5LCA2OCwgMjA3LCAKKyAgICA4NCwgNzksIDY1LCA3OCwgNjgsIDY1LCA3NSwgNzIsIDczLCA2NSwgODQsIDEyOCwgODQsIDc5LCA2NSwgMTI4LCA4NCwgNzgsIAogICAgIDEyOCwgODQsIDc2LCA4NiwgMTI4LCA4NCwgNzYsIDg1LCAxMjgsIDg0LCA3NiwgNzksIDEyOCwgODQsIDc2LCA3MywgMTI4LCAKICAgICA4NCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgODQsIDc2LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA3NiwgNzIsIDg1LCAxMjgsIAogICAgIDg0LCA3NiwgNzIsIDc5LCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3MywgMTI4LCA4NCwgCkBAIC03OTYsNDA5ICs3OTYsNDEwIEBACiAgICAgNjksIDg0LCAxMjgsIDgzLCA4NSwgNjUsIDY5LCA3OCwgMTI4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA4MywgODUsIDY1LCAKICAgICAxMjgsIDgzLCAyMTMsIDgzLCA4NCwgODgsIDEyOCwgODMsIDg0LCA4NywgNjUsIDEyOCwgODMsIDg0LCA4NSwgNjgsIDg5LCAKICAgICAxMjgsIDgzLCA4NCwgODUsIDY3LCA3NSwgNDUsIDc5LCA4NSwgMjEyLCA4MywgODQsIDgzLCAxMjgsIDgzLCA4NCwgODIsIAotICAgIDc5LCA3NSwgNjksIDgzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDU3LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTUsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU0LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTIsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDUxLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNDksIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIAotICAgIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgMTk3LCA4MywgODQsIDgyLCA3MywgODAsIDY5LCAKLSAgICAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA4NCwgODIsIAotICAgIDczLCA3NSwgNjksIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDczLCA2OCwgNjksIDEyOCwgCi0gICAgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzYsIDIxNywgODMsIDg0LCA4MiwgNjksIDg0LCA2NywgNzIsIDY5LCAxOTYsIDgzLCAKLSAgICA4NCwgODIsIDY5LCA4MywgMjExLCA4MywgODQsIDgyLCA2OSwgNzgsIDcxLCA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIAotICAgIDY1LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NywgNjYsIDY5LCA4MiwgODIsIDg5LCAxMjgsIDgzLCA4NCwgCi0gICAgODIsIDY1LCA4NCwgODUsIDc3LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgNzcsIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNjUsIDg0LCA4NSwgMjA1LCA4MywgODQsIDgyLCA2NSwgODQsIDczLCA2NSwgMjA2LCA4MywgODQsIDgyLCA2NSwgNzMsIAotICAgIDc4LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgCi0gICAgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgNzMsIDcwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCAKLSAgICA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NCwgNzksIAotICAgIDgyLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODcsIDY1LCA4NCwgNjcsIDcyLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIAotICAgIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgODMsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIAotICAgIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIDIwNCwgODMsIDg0LCA3MywgNzYsIDE5NywgCi0gICAgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgMTI4LCA4MywgODQsIDY5LCA3NywgMTI4LCAKLSAgICA4MywgODQsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgODQsIDY5LCA2NSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIAotICAgIDIwNSwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODUsIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODMsIDEyOCwgCi0gICAgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgODQsIDY1LCA4NSwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCAKLSAgICA4NCwgODUsIDE5NywgODMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAyMTIsIDgzLCA4NCwgNjUsIDgyLCA4MywgCi0gICAgMTI4LCA4MywgODQsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDgzLCA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCAKLSAgICA4MiwgMTI4LCA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIAotICAgIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgCi0gICAgMTI4LCA4MywgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCAKLSAgICA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIAotICAgIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAKLSAgICAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCAKLSAgICA4MywgODMsIDg5LCA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIAotICAgIDg1LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgODUsIDgwLCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIAotICAgIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDgwLCAxMjgsIDgzLCA4MywgNzksIDc5LCAxMjgsIDgzLCA4MywgCi0gICAgNzksIDEyOCwgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCA3MywgODQsIDEyOCwgODMsIDgzLCA3MywgODAsIDEyOCwgCi0gICAgODMsIDgzLCA3MywgNzMsIDEyOCwgODMsIDgzLCA3MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCAKLSAgICA4MywgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIDczLCAxMjgsIDgzLCA4MywgNzIsIDY5LCAxMjgsIDgzLCA4MywgNjksIAotICAgIDg4LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNjksIDY5LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDg1LCAxMjgsIDgzLCA4MywgNjUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgCi0gICAgNjUsIDc4LCA3MSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzIsIDczLCA2OSwgCi0gICAgODUsIDg0LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIAotICAgIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAKLSAgICAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCAKLSAgICA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgCi0gICAgNjksIDg1LCA3NiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCAKLSAgICA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIAotICAgIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCAKLSAgICA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NSwgODIsIDY1LCA2OSwgCi0gICAgNjUsIDEyOCwgODMsIDgzLCA2NSwgNzMsIDEyOCwgODMsIDgzLCA2NSwgNjUsIDEyOCwgODMsIDgzLCA1MSwgMTI4LCA4MywgCi0gICAgODMsIDUwLCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCAKLSAgICA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIAotICAgIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgCi0gICAgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCA4MywgODAsIDg1LCA3OCwgNzEsIDIxMSwgODMsIDgwLCAKLSAgICA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgODMsIDY1LCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NSwgCi0gICAgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NCwgMTI4LCA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCAKLSAgICA3NiwgNzMsIDg0LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzYsIDY1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MywgODAsIAotICAgIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgCi0gICAgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCAKLSAgICA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCA2OCwgNjksIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCA2OSwgCi0gICAgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDIwNCwgODMsIDgwLCA2OSwgODMsIDc3LCA3MywgNzYsIAotICAgIDIwNywgODMsIDgwLCA2OSwgNjksIDY4LCA2NiwgNzksIDY1LCA4NCwgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAKLSAgICAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgMjAwLCA4MywgODAsIDY5LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA4MywgODAsIAotICAgIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgCi0gICAgMjEwLCA4MywgODAsIDY5LCA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCAKLSAgICA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIAotICAgIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgCi0gICAgNjksIDEyOCwgODMsIDgwLCA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAKLSAgICAxMjgsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIAotICAgIDE5NywgODMsIDgwLCA2NSwgMTI4LCA4MywgNzksIDg5LCAxMjgsIDgzLCA3OSwgODcsIDczLCA3NiwgMjA3LCA4MywgNzksIAotICAgIDg3LCAxMjgsIDgzLCA3OSwgODUsIDg0LCA3MiwgNjksIDgyLCAyMDYsIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgCi0gICAgNjUsIDg2LCA2OSwgMjE3LCA4MywgNzksIDg1LCA4NCwgMjAwLCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgzLCAKLSAgICA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCA4MywgNzksIDg1LCA3OCwgNjUsIDgwLCAxMjgsIAotICAgIDgzLCA3OSwgODUsIDEyOCwgODMsIDc5LCA4MywgMTI4LCA4MywgNzksIDgyLCAxOTMsIDgzLCA3OSwgODEsIDEyOCwgODMsIAotICAgIDc5LCA3OSwgMjA2LCA4MywgNzksIDc4LCA3NCwgNjUsIDc3LCAxMjgsIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgCi0gICAgNzgsIDEyOCwgODMsIDc5LCA3NywgODAsIDY5LCA3OCwgMTk5LCA4MywgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCAKLSAgICA2OCwgODUsIDgzLCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDIxMSwgODMsIDc5LCA3MiwgMTI4LCA4MywgNzksIAotICAgIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIDY3LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzksIDcwLCAyMTIsIAotICAgIDgzLCA3OSwgMTk4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgMTI4LCA4MywgNzksIDY3LCA2NywgNjksIDIxMCwgCi0gICAgODMsIDc5LCA2NSwgODAsIDEyOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgMjA3LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAKLSAgICA3OCwgMTI4LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAyMDYsIDgzLCA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgNjksIAotICAgIDEyOCwgODMsIDc4LCA3OSwgODcsIDY2LCA3OSwgNjUsIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgzLCA3OCwgNzksIDg3LCAKLSAgICAxMjgsIDgzLCA3OCwgNzksIDg1LCA4NCwgMTI4LCA4MywgNzgsIDc5LCA4NSwgMjEyLCA4MywgNzgsIDY1LCAyMDgsIDgzLCAKLSAgICA3OCwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDY1LCA3NSwgMTk3LCA4MywgNzgsIDY1LCA3MywgNzYsIDEyOCwgODMsIAotICAgIDc4LCAxOTMsIDgzLCA3NywgNzksIDc1LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgODIsIDc1LCA3MywgNzgsIDE5OSwgCi0gICAgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgNjksIDEyOCwgODMsIDc3LCA2OSwgNjUsIDgyLCAKLSAgICAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3NywgNjUsIDc2LCA3NiwgNjksIDIxMCwgODMsIDc3LCA2NSwgNzYsIAotICAgIDc2LCAxMjgsIDgzLCA3NiwgODUsIDgyLCAxMjgsIDgzLCA3NiwgNzksIDg3LCA3NiwgODksIDEyOCwgODMsIDc2LCA3OSwgCi0gICAgMjE1LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIDc2LCA3OSwgMjEyLCA4MywgNzYsIDc5LCA4MCwgNzMsIDc4LCAKLSAgICAxOTksIDgzLCA3NiwgNzksIDgwLCA2OSwgMTI4LCA4MywgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjgsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjcsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIDY3LCAxOTcsIDgzLCA3NiwgCi0gICAgNjksIDY5LCA4MCwgMjE3LCA4MywgNzYsIDY5LCA2OSwgODAsIDczLCA3OCwgMTk5LCA4MywgNzYsIDY1LCA4NiwgNzksIDc4LCAKLSAgICA3MywgMTk1LCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCA2NSwgODMsIDcyLCAxMjgsIDgzLCA3NiwgNjUsIAotICAgIDgzLCAyMDAsIDgzLCA3NiwgNjUsIDc4LCA4NCwgNjksIDE5NiwgODMsIDc1LCA4NywgNjUsIDEyOCwgODMsIDc1LCA4NywgCi0gICAgMTI4LCA4MywgNzUsIDg1LCA3NiwgNzYsIDEyOCwgODMsIDc1LCA4NSwgNzYsIDIwNCwgODMsIDc1LCA3NiwgNzMsIDgyLCAKLSAgICA3OSwgMjA2LCA4MywgNzUsIDczLCA3OCwgMTI4LCA4MywgNzUsIDczLCA2OSwgODIsIDEyOCwgODMsIDc1LCAyMDEsIDgzLCAKLSAgICA3NSwgNjksIDg3LCA2OSwgMTk2LCA4MywgNzUsIDY1LCA4NCwgNjksIDEyOCwgODMsIDc1LCAxMjgsIDgzLCA3NCwgNjksIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDg5LCA0NSwgNzAsIDc5LCA4NSwgODIsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA4OSwgCi0gICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgMjE3LCA4MywgNzMsIDg4LCA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCAKLSAgICA3MiwgMjExLCA4MywgNzMsIDg4LCA4NCwgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgODMsIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgCi0gICAgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgMjA2LCAKLSAgICA4MywgNzMsIDg4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA4MywgNzMsIDg4LCA0NSwgODMsIDg0LCA4MiwgCi0gICAgNzMsIDc4LCAxOTksIDgzLCA3MywgODgsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgODMsIDczLCA4OCwgNDUsIDc2LCAKLSAgICA3MywgNzgsIDE5NywgODMsIDczLCAyMTYsIDgzLCA3MywgODQsIDY5LCAxMjgsIDgzLCA3MywgODMsIDY1LCAxMjgsIDgzLCAKLSAgICA3MywgODIsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCi0gICAgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgCi0gICAgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIAotICAgIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgODMsIDczLCA3OSwgODMsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA3MywgNzksIAotICAgIDgzLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODMsIDczLCA3OSwgMjExLCA4MywgNzMsIDc4LCA3NSwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTEsIAotICAgIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUwLCAxMjgsIDgzLCA3MywgCi0gICAgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIDczLCAKLSAgICA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIDE5NywgODMsIAotICAgIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAKLSAgICAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIAotICAgIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIDczLCA3NywgNjUsIDc2LCA4NSwgNzgsIDcxLCA4NSwgMjA2LCA4MywgCi0gICAgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA4NiwgNjksIDgyLCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCAKLSAgICA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgNjksIDEyOCwgODMsIAotICAgIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgMTk3LCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgODMsIDczLCA3NSwgCi0gICAgNzMsIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDcxLCA3OCwgODMsIDEyOCwgCi0gICAgODMsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzEsIDc3LCAxOTMsIDgzLCA3MywgNzEsIDY5LCAyMDQsIDgzLCAKLSAgICA3MywgNzEsIDUyLCAxMjgsIDgzLCA3MywgNzEsIDE4MCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCAKLSAgICA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgMjExLCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIAotICAgIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCA4MywgNzMsIDY2LCAxOTcsIDgzLCAyMDEsIDgzLCA3MiwgODksIDg4LCAxMjgsIAotICAgIDgzLCA3MiwgODksIDg0LCAxMjgsIDgzLCA3MiwgODksIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgMTI4LCA4MywgCi0gICAgNzIsIDg5LCA4MCwgMTI4LCA4MywgNzIsIDg5LCA2OSwgMTI4LCA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCAKLSAgICAxMjgsIDgzLCA3MiwgODcsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgNzksIDEyOCwgODMsIDcyLCA4NywgNzksIAotICAgIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAxMjgsIDgzLCA3MiwgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIAotICAgIDgzLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgCi0gICAgNzIsIDg1LCA4NSwgMTI4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIDEyOCwgODMsIDcyLCAKLSAgICA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA3MiwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgMTI4LCA4MywgNzIsIDg1LCA3NywgMTI4LCA4MywgNzIsIDg1LCA3MCwgCi0gICAgNzAsIDc2LCAxOTcsIDgzLCA3MiwgODUsIDY5LCA4MSwgMTI4LCA4MywgNzIsIDg1LCA2OSwgNzgsIDgzLCA3MiwgODUsIDY5LCAKLSAgICA4NCwgMTI4LCA4MywgNzIsIDg1LCA2NiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDgzLCA3MiwgODUsIAotICAgIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCA3MywgNjcsIDEyOCwgODMsIAotICAgIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzcsIDgwLCAKLSAgICAxMjgsIDgzLCA3MiwgODIsIDczLCA3MywgMTI4LCA4MywgNzIsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDc5LCA4OCwgMTI4LCAKLSAgICA4MywgNzIsIDc5LCA4NywgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDg1LCA3NiwgNjgsIDY5LCA4MiwgNjksIDE5NiwgODMsIAotICAgIDcyLCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA4MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDIxMSwgCi0gICAgODMsIDcyLCA3OSwgODIsIDg0LCA2OSwgNzgsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDY3LCA2NSwgNzUsIAotICAgIDY5LCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIAotICAgIDg0LCA4NywgNzMsIDcxLCA0NSwgODMsIDc5LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCAKLSAgICA0NSwgNzksIDgzLCAyMTEsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgCi0gICAgMTk2LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCAKLSAgICA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgCi0gICAgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIAotICAgIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDgyLCAyMTIsIDgzLCA3MiwgNzksIDgxLCAxMjgsIDgzLCA3MiwgNzksIDIwOSwgODMsIDcyLCA3OSwgODAsIDEyOCwgCi0gICAgODMsIDcyLCA3OSwgNzksIDg0LCA3MywgNzgsIDE5OSwgODMsIDcyLCA3OSwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDc5LCAKLSAgICAxMjgsIDgzLCA3MiwgNzksIDcxLCAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgNjksIDEyOCwgODMsIDcyLCAKLSAgICA3OSwgMTk3LCA4MywgNzIsIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIAotICAgIDY1LCA3NiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgCi0gICAgNzIsIDczLCA4MiwgMjEyLCA4MywgNzIsIDczLCA4MiwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDIxMCwgODMsIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgODAsIDEyOCwgODMsIDcyLCA3MywgNzgsIAotICAgIDg0LCAyMDcsIDgzLCA3MiwgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgCi0gICAgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAKLSAgICAxOTMsIDgzLCA3MiwgNzMsIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgODMsIAotICAgIDcyLCA3MywgNjgsIDEyOCwgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDcyLCAxOTMsIAotICAgIDgzLCA3MiwgNjksIDg4LCAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgODUsIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIDg1LCAxMjgsIDgzLCAKLSAgICA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDcyLCA2OSwgODQsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgCi0gICAgODMsIDcyLCA3MywgNzEsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIAotICAgIDgzLCA3MiwgNjksIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIAotICAgIDY1LCA4NCwgMTI4LCA4MywgNzIsIDE5NywgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAxMjgsIAotICAgIDgzLCA3MiwgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgODYsIDczLCA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgODMsIDcyLCAKLSAgICA2NSwgODQsIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIAotICAgIDgyLCA4MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgODIsIDUwLCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIDcyLCA2NSwgCi0gICAgNzcsIDgyLCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIAotICAgIDE5NiwgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgNjgsIDY4LCAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAKLSAgICAxMjgsIDgzLCA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCAKLSAgICA2NSwgMjE1LCA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCAKLSAgICA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIAotICAgIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgCi0gICAgNzgsIDg0LCAyMTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA2OSwgODYsIDY5LCA3OCwgNDUsIAotICAgIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4NSwgODgsIDEyOCwgCi0gICAgODMsIDY5LCA4NSwgNzgsIDg5LCA2NSwgNzcsIDEyOCwgODMsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNjksIDg0LCAKLSAgICA3MCwgNzksIDc4LCAxMjgsIDgzLCA2OSwgODMsIDg0LCA2OSwgODIsIDg0LCA3MywgODUsIDIxMSwgODMsIDY5LCA4MywgODEsIAotICAgIDg1LCA3MywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgODQsIDY5LCAxMjgsIDgzLCA2OSwgODMsIDY1LCA3NywgMTk3LCA4MywgCi0gICAgNjksIDgyLCA4NiwgNzMsIDY3LCAxOTcsIDgzLCA2OSwgODIsIDczLCA3MCwgODMsIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCAKLSAgICAyMTEsIDgzLCA2OSwgODEsIDg1LCA2OSwgNzgsIDY3LCAxOTcsIDgzLCA2OSwgODAsIDg0LCA2OSwgNzcsIDY2LCA2OSwgODIsIAotICAgIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgCi0gICAgNzksIDIxMCwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgzLCA2OSwgNzgsIDg0LCA3MywgMTI4LCA4MywgNjksIDc3LCAKLSAgICA4NSwgNzgsIDY3LCA3MywgMTkzLCA4MywgNjksIDc3LCA3NSwgNjUsIDg0LCA3MiwgMTI4LCA4MywgNjksIDc3LCA3NSwgCi0gICAgMTI4LCA4MywgNjksIDc3LCA3MywgODYsIDc5LCA4NywgNjksIDIwNCwgODMsIDY5LCA3NywgNzMsIDgzLCA3OSwgNzAsIAotICAgIDIxMiwgODMsIDY5LCA3NywgNzMsIDgzLCA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA3NywgCi0gICAgNzMsIDc4LCA3MywgNzcsIDE5MywgODMsIDY5LCA3NywgNzMsIDY4LCA3MywgODIsIDY5LCA2NywgMjEyLCA4MywgNjksIDc3LCAKLSAgICA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgMjA2LCA4MywgNjksIAotICAgIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCAKLSAgICA3NiwgMTk3LCA4MywgNjksIDc3LCA3MywgNjYsIDgyLCA2OSwgODYsIDczLCAyMTEsIDgzLCA2OSwgNzcsIDczLCA0NSwgODYsIAotICAgIDc5LCA3MywgNjcsIDY5LCAxOTYsIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTAsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgCi0gICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NywgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU2LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUwLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTIsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTUsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAKLSAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTUsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgCi0gICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OCwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIAotICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTIsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU2LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTIsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDksIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUzLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDU3LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTUsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTIsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDU0LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU2LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTIsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgCi0gICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIAotICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDksIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCAKLSAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDksIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUwLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAKLSAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgCi0gICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNjksIDE5NiwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIAotICAgIDE5MywgODMsIDY5LCA3MiwgMTI4LCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIDY5LCA3MSwgNzgsIDc5LCAxMjgsIAotICAgIDgzLCA2OSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNjksIDY5LCA3OCwgCisgICAgNzksIDc4LCAxOTksIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDgzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAorICAgIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU3LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NiwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTUsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU0LCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTIsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUxLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MCwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCAKKyAgICA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgCisgICAgMTk3LCA4MywgODQsIDgyLCA3MywgODAsIDY5LCAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCAKKyAgICA4MiwgNzMsIDc4LCAxOTksIDgzLCA4NCwgODIsIDczLCA3NSwgNjksIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDczLCA2OCwgNjksIDEyOCwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzYsIDIxNywgODMsIDg0LCA4MiwgCisgICAgNjksIDg0LCA2NywgNzIsIDY5LCAxOTYsIDgzLCA4NCwgODIsIDY5LCA4MywgMjExLCA4MywgODQsIDgyLCA2OSwgNzgsIDcxLCAKKyAgICA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIDY1LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NywgNjYsIAorICAgIDY5LCA4MiwgODIsIDg5LCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDc3LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgCisgICAgNjUsIDg0LCA4NSwgNzcsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgMjA1LCA4MywgODQsIDgyLCA2NSwgODQsIDczLCAKKyAgICA2NSwgMjA2LCA4MywgODQsIDgyLCA2NSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIAorICAgIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgCisgICAgNzMsIDcwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCAKKyAgICA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgyLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODcsIDY1LCA4NCwgNjcsIAorICAgIDcyLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgCisgICAgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgCisgICAgODMsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIAorICAgIDIwNCwgODMsIDg0LCA3MywgNzYsIDE5NywgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgCisgICAgMTI4LCA4MywgODQsIDY5LCA3NywgMTI4LCA4MywgODQsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgODQsIDY5LCAKKyAgICA2NSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIDIwNSwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODUsIDEyOCwgODMsIAorICAgIDg0LCA2NSwgODYsIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgODQsIDY1LCA4NSwgCisgICAgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NCwgODUsIDE5NywgODMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA4NCwgCisgICAgNjUsIDgyLCAyMTIsIDgzLCA4NCwgNjUsIDgyLCA4MywgMTI4LCA4MywgODQsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDgzLCAKKyAgICA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCA4MiwgMTI4LCA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgCisgICAgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgMTI4LCA4MywgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgCisgICAgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCAKKyAgICA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIAorICAgIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCA4MywgODMsIDg5LCA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIAorICAgIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIDg1LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgCisgICAgODUsIDgwLCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDgwLCAKKyAgICAxMjgsIDgzLCA4MywgNzksIDc5LCAxMjgsIDgzLCA4MywgNzksIDEyOCwgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCAKKyAgICA3MywgODQsIDEyOCwgODMsIDgzLCA3MywgODAsIDEyOCwgODMsIDgzLCA3MywgNzMsIDEyOCwgODMsIDgzLCA3MywgNjksIAorICAgIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCA4MywgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIDczLCAxMjgsIAorICAgIDgzLCA4MywgNzIsIDY5LCAxMjgsIDgzLCA4MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgCisgICAgNjksIDY5LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDgzLCA4MywgNjUsIDg0LCAKKyAgICAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIAorICAgIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCAKKyAgICA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAorICAgIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgCisgICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgCisgICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgODMsIAorICAgIDY1LCA3OCwgNzEsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCAKKyAgICA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDgzLCA2NSwgNzgsIAorICAgIDcxLCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCAKKyAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgODMsIDgzLCA2NSwgNzMsIDEyOCwgODMsIDgzLCA2NSwgCisgICAgNjUsIDEyOCwgODMsIDgzLCA1MSwgMTI4LCA4MywgODMsIDUwLCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgCisgICAgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIAorICAgIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgCisgICAgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCAKKyAgICA4MywgODAsIDg1LCA3OCwgNzEsIDIxMSwgODMsIDgwLCA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIAorICAgIDcxLCA4MywgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIDcxLCA2OSwgCisgICAgODMsIDY1LCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NSwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCA3NiwgNzMsIDg0LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzYsIAorICAgIDY1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgCisgICAgNzMsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCA2OCwgNjksIAorICAgIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCA2OSwgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDIwNCwgCisgICAgODMsIDgwLCA2OSwgODMsIDc3LCA3MywgNzYsIDIwNywgODMsIDgwLCA2OSwgNjksIDY4LCA2NiwgNzksIDY1LCA4NCwgMTI4LCAKKyAgICA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgMjAwLCA4MywgODAsIDY5LCA2NywgNzMsIAorICAgIDY1LCA3NiwgMTI4LCA4MywgODAsIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgCisgICAgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgMjEwLCA4MywgODAsIDY5LCA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIAorICAgIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIAorICAgIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDEyOCwgODMsIDgwLCA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgCisgICAgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCAKKyAgICA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgODMsIDgwLCA2NSwgMTI4LCA4MywgNzksIDg5LCAxMjgsIDgzLCAKKyAgICA3OSwgODcsIDczLCA3NiwgMjA3LCA4MywgNzksIDg3LCAxMjgsIDgzLCA3OSwgODUsIDg0LCA3MiwgNjksIDgyLCAyMDYsIAorICAgIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMjE3LCA4MywgNzksIDg1LCA4NCwgMjAwLCA4MywgCisgICAgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgzLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCAKKyAgICA4MywgNzksIDg1LCA3OCwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgODUsIDEyOCwgODMsIDc5LCA4MywgMTI4LCA4MywgNzksIAorICAgIDgyLCAxOTMsIDgzLCA3OSwgODEsIDEyOCwgODMsIDc5LCA3OSwgMjA2LCA4MywgNzksIDc4LCA3NCwgNjUsIDc3LCAxMjgsIAorICAgIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgNzgsIDEyOCwgODMsIDc5LCA3NywgODAsIDY5LCA3OCwgMTk5LCA4MywgCisgICAgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDgzLCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIAorICAgIDIxMSwgODMsIDc5LCA3MiwgMTI4LCA4MywgNzksIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgCisgICAgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA3OCwgNjksIAorICAgIDgzLCA4MywgMTI4LCA4MywgNzksIDcwLCAyMTIsIDgzLCA3OSwgMTk4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgCisgICAgMTI4LCA4MywgNzksIDY3LCA2NywgNjksIDIxMCwgODMsIDc5LCA2NSwgODAsIDEyOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgCisgICAgMjA3LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCA3OCwgMTI4LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAyMDYsIDgzLCAKKyAgICA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA3OSwgODcsIDY2LCA3OSwgNjUsIDgyLCA2OCwgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3OCwgNzksIDg3LCAxMjgsIDgzLCA3OCwgNzksIDg1LCA4NCwgMTI4LCA4MywgNzgsIDc5LCAKKyAgICA4NSwgMjEyLCA4MywgNzgsIDY1LCAyMDgsIDgzLCA3OCwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDY1LCA3NSwgMTk3LCAKKyAgICA4MywgNzgsIDY1LCA3MywgNzYsIDEyOCwgODMsIDc4LCAxOTMsIDgzLCA3NywgNzksIDc1LCA3MywgNzgsIDE5OSwgODMsIAorICAgIDc3LCA3MywgODIsIDc1LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgCisgICAgNjksIDEyOCwgODMsIDc3LCA2OSwgNjUsIDgyLCAxMjgsIDgzLCA3NywgNjUsIDgzLCAyMDAsIDgzLCA3NywgNjUsIDc2LCAKKyAgICA3NiwgNjksIDIxMCwgODMsIDc3LCA2NSwgNzYsIDc2LCAxMjgsIDgzLCA3NiwgODUsIDgyLCAxMjgsIDgzLCA3NiwgNzksIAorICAgIDg3LCA3NiwgODksIDEyOCwgODMsIDc2LCA3OSwgMjE1LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIDc2LCA3OSwgCisgICAgMjEyLCA4MywgNzYsIDc5LCA4MCwgNzMsIDc4LCAxOTksIDgzLCA3NiwgNzksIDgwLCA2OSwgMTI4LCA4MywgNzYsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjgsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjcsIDY5LCAxMjgsIAorICAgIDgzLCA3NiwgNzMsIDY3LCAxOTcsIDgzLCA3NiwgNjksIDY5LCA4MCwgMjE3LCA4MywgNzYsIDY5LCA2OSwgODAsIDczLCA3OCwgCisgICAgMTk5LCA4MywgNzYsIDY1LCA4NiwgNzksIDc4LCA3MywgMTk1LCA4MywgNzYsIDY1LCA4NiwgNjksIDEyOCwgODMsIDc2LCAKKyAgICA2NSwgODMsIDcyLCAxMjgsIDgzLCA3NiwgNjUsIDgzLCAyMDAsIDgzLCA3NiwgNjUsIDc4LCA4NCwgNjksIDE5NiwgODMsIAorICAgIDc1LCA4NywgNjUsIDEyOCwgODMsIDc1LCA4NywgMTI4LCA4MywgNzUsIDg1LCA3NiwgNzYsIDEyOCwgODMsIDc1LCA4NSwgCisgICAgNzYsIDIwNCwgODMsIDc1LCA3NiwgNzMsIDgyLCA3OSwgMjA2LCA4MywgNzUsIDczLCA3OCwgMTI4LCA4MywgNzUsIDczLCAKKyAgICA2OSwgODIsIDEyOCwgODMsIDc1LCAyMDEsIDgzLCA3NSwgNjksIDg3LCA2OSwgMTk2LCA4MywgNzUsIDY1LCA4NCwgNjksIAorICAgIDEyOCwgODMsIDc1LCAxMjgsIDgzLCA3NCwgNjksIDEyOCwgODMsIDczLCA4OCwgODQsIDg5LCA0NSwgNzAsIDc5LCA4NSwgCisgICAgODIsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA4OSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgMjE3LCA4MywgNzMsIDg4LCAKKyAgICA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCA3MiwgMjExLCA4MywgNzMsIDg4LCA4NCwgNzIsIDEyOCwgODMsIAorICAgIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCAKKyAgICA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNzMsIDg4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgCisgICAgMTI4LCA4MywgNzMsIDg4LCA0NSwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA3MywgODgsIDQ1LCA4MCwgNjksIDgyLCAKKyAgICA0NSwgNjksIDIwNSwgODMsIDczLCA4OCwgNDUsIDc2LCA3MywgNzgsIDE5NywgODMsIDczLCAyMTYsIDgzLCA3MywgODQsIAorICAgIDY5LCAxMjgsIDgzLCA3MywgODMsIDY1LCAxMjgsIDgzLCA3MywgODIsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIAorICAgIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCAKKyAgICA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgCisgICAgNzgsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCAKKyAgICA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgCisgICAgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgCisgICAgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIAorICAgIDEyOCwgODMsIDczLCA3OSwgMjExLCA4MywgNzMsIDc4LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgCisgICAgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTEsIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIAorICAgIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUwLCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIAorICAgIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIDE5NywgODMsIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgCisgICAgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAKKyAgICAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIAorICAgIDczLCA3NywgNjUsIDc2LCA4NSwgNzgsIDcxLCA4NSwgMjA2LCA4MywgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA4NiwgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIDczLCAKKyAgICA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgNjksIDEyOCwgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgCisgICAgMTk3LCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgODMsIDczLCA3NSwgNzMsIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgCisgICAgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDcxLCA3OCwgODMsIDEyOCwgODMsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCAKKyAgICA3MywgNzEsIDc3LCAxOTMsIDgzLCA3MywgNzEsIDY5LCAyMDQsIDgzLCA3MywgNzEsIDUyLCAxMjgsIDgzLCA3MywgNzEsIAorICAgIDE4MCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgCisgICAgMjExLCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCAKKyAgICA4MywgNzMsIDY2LCAxOTcsIDgzLCAyMDEsIDgzLCA3MiwgODksIDg4LCAxMjgsIDgzLCA3MiwgODksIDg0LCAxMjgsIDgzLCAKKyAgICA3MiwgODksIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgMTI4LCA4MywgNzIsIDg5LCA4MCwgMTI4LCA4MywgNzIsIAorICAgIDg5LCA2OSwgMTI4LCA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCA4OSwgCisgICAgMTI4LCA4MywgNzIsIDg3LCA3OSwgNzksIDEyOCwgODMsIDcyLCA4NywgNzksIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAKKyAgICAxMjgsIDgzLCA3MiwgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIDgzLCA3MiwgODcsIDY1LCA2NSwgMTI4LCAKKyAgICA4MywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4NSwgMTI4LCA4MywgNzIsIAorICAgIDg1LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgCisgICAgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA4MywgNzIsIDg1LCAKKyAgICA3OSwgMTI4LCA4MywgNzIsIDg1LCA3NywgMTI4LCA4MywgNzIsIDg1LCA3MCwgNzAsIDc2LCAxOTcsIDgzLCA3MiwgODUsIAorICAgIDY5LCA4MSwgMTI4LCA4MywgNzIsIDg1LCA2OSwgNzgsIDgzLCA3MiwgODUsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA2NiwgCisgICAgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDgzLCA3MiwgODUsIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgCisgICAgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCA3MywgNjcsIDEyOCwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCAKKyAgICA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzcsIDgwLCAxMjgsIDgzLCA3MiwgODIsIDczLCA3MywgCisgICAgMTI4LCA4MywgNzIsIDc5LCA4OSwgMTI4LCA4MywgNzIsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDc5LCA4NywgNjksIDgyLCAKKyAgICAxMjgsIDgzLCA3MiwgNzksIDg1LCA3NiwgNjgsIDY5LCA4MiwgNjksIDE5NiwgODMsIDcyLCA3OSwgODQsIDEyOCwgODMsIAorICAgIDcyLCA3OSwgODIsIDg0LCA4MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDIxMSwgODMsIDcyLCA3OSwgODIsIDg0LCA2OSwgCisgICAgNzgsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDY3LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAKKyAgICA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgCisgICAgNzMsIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODMsIAorICAgIDc5LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzksIDgzLCAyMTEsIDgzLCA3MiwgCisgICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgMTk2LCA4MywgNzIsIDc5LCA4MiwgODQsIAorICAgIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCAKKyAgICA3MywgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCisgICAgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIAorICAgIDcxLCA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAyMTIsIDgzLCA3MiwgCisgICAgNzksIDgxLCAxMjgsIDgzLCA3MiwgNzksIDIwOSwgODMsIDcyLCA3OSwgODAsIDEyOCwgODMsIDcyLCA3OSwgNzksIDg0LCAKKyAgICA3MywgNzgsIDE5OSwgODMsIDcyLCA3OSwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDc5LCAxMjgsIDgzLCA3MiwgNzksIAorICAgIDcxLCAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgNjksIDEyOCwgODMsIDcyLCA3OSwgMTk3LCA4MywgNzIsIAorICAgIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIDY1LCA3NiwgNjUsIDY1LCAKKyAgICAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgNzIsIDczLCA4MiwgMjEyLCAKKyAgICA4MywgNzIsIDczLCA4MiwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCA3MiwgNzMsIDIxMCwgODMsIAorICAgIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgODAsIDEyOCwgODMsIDcyLCA3MywgNzgsIDg0LCAyMDcsIDgzLCA3MiwgCisgICAgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgNzMsIDc4LCAxMjgsIDgzLCAKKyAgICA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAxOTMsIDgzLCA3MiwgNzMsIAorICAgIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDczLCAxMjgsIAorICAgIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgODMsIDcyLCA3MywgNjgsIDEyOCwgCisgICAgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDcyLCAxOTMsIDgzLCA3MiwgNjksIDg4LCAKKyAgICAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIDEyOCwgODMsIDcyLCA2OSwgODUsIAorICAgIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgCisgICAgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDcyLCA2OSwgODQsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgNzEsIAorICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgzLCA3MiwgCisgICAgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIDgzLCA3MiwgNjksIAorICAgIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgODMsIDcyLCA2OSwgCisgICAgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAxMjgsIDgzLCAKKyAgICA3MiwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIDY1LCA4NCwgCisgICAgMTI4LCA4MywgNzIsIDE5NywgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAxMjgsIDgzLCA3MiwgCisgICAgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCAKKyAgICA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgODMsIDcyLCA2NSwgODQsIAorICAgIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIDgyLCA4MCwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDUwLCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIDcyLCA2NSwgNzcsIDgyLCAKKyAgICA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgCisgICAgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCAKKyAgICAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAxMjgsIDgzLCAKKyAgICA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCA2NSwgMjE1LCAKKyAgICA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCA2OSwgODgsIAorICAgIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIDgyLCA2NSwgCisgICAgNzgsIDY3LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCAKKyAgICAyMTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA2OSwgODYsIDY5LCA3OCwgNDUsIDg0LCA3MiwgCisgICAgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4NSwgODgsIDEyOCwgODMsIDY5LCAKKyAgICA4NSwgNzgsIDg5LCA2NSwgNzcsIDEyOCwgODMsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNjksIDg0LCA3MCwgNzksIAorICAgIDc4LCAxMjgsIDgzLCA2OSwgODMsIDg0LCA2OSwgODIsIDg0LCA3MywgODUsIDIxMSwgODMsIDY5LCA4MywgODEsIDg1LCA3MywgCisgICAgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgODQsIDY5LCAxMjgsIDgzLCA2OSwgODMsIDY1LCA3NywgMTk3LCA4MywgNjksIDgyLCAKKyAgICA4NiwgNzMsIDY3LCAxOTcsIDgzLCA2OSwgODIsIDczLCA3MCwgODMsIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCAyMTEsIAorICAgIDgzLCA2OSwgODEsIDg1LCA2OSwgNzgsIDY3LCAxOTcsIDgzLCA2OSwgODAsIDg0LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgCisgICAgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIAorICAgIDIxMCwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgzLCA2OSwgNzgsIDg0LCA3MywgMTI4LCA4MywgNjksIDc3LCA4NSwgCisgICAgNzgsIDY3LCA3MywgMTkzLCA4MywgNjksIDc3LCA3NSwgNjUsIDg0LCA3MiwgMTI4LCA4MywgNjksIDc3LCA3NSwgMTI4LCAKKyAgICA4MywgNjksIDc3LCA3MywgODYsIDc5LCA4NywgNjksIDIwNCwgODMsIDY5LCA3NywgNzMsIDgzLCA3OSwgNzAsIDIxMiwgODMsIAorICAgIDY5LCA3NywgNzMsIDgzLCA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA3NywgNzMsIDc4LCAKKyAgICA3MywgNzcsIDE5MywgODMsIDY5LCA3NywgNzMsIDY4LCA3MywgODIsIDY5LCA2NywgMjEyLCA4MywgNjksIDc3LCA3MywgNjcsIAorICAgIDc5LCA3NiwgNzksIDc4LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgMjA2LCA4MywgNjksIDc3LCA3MywgCisgICAgNjcsIDczLCA4MiwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODMsIDY5LCA3NywgNzMsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCAKKyAgICA4MywgNjksIDc3LCA3MywgNjYsIDgyLCA2OSwgODYsIDczLCAyMTEsIDgzLCA2OSwgNzcsIDczLCA0NSwgODYsIDc5LCA3MywgCisgICAgNjcsIDY5LCAxOTYsIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAKKyAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU2LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUzLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUwLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTIsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDksIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NywgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTQsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA0OCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAKKyAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTUsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgCisgICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA0OCwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIAorICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTIsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OCwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU2LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTIsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDksIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU2LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUzLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDksIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUzLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIAorICAgIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA0OCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTYsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTUsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTYsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTIsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU2LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTIsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgCisgICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU0LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU0LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIAorICAgIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDksIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAKKyAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUzLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDksIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUwLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUwLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAKKyAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgCisgICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA0OCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA0OCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA0OCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNjksIDE5NiwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIDE5MywgCisgICAgODMsIDY5LCA3MiwgMTI4LCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIDY5LCA3MSwgNzgsIDc5LCAxMjgsIDgzLCAKKyAgICA2OSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNjksIDY5LCA3OCwgCiAgICAgMTI4LCA4MywgNjksIDY5LCAyMDYsIDgzLCA2OSwgNjksIDY4LCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNjksIDY5LCAKICAgICA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCA3MywgMjA0LCA4MywgNjksIDY3LCA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgNjcsIAogICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgODMsIDY5LCA2NywgODIsIDY5LCA4NCwgCkBAIC0xMjkyLDI3MzEgKzEyOTMsMjczMyBAQAogICAgIDY3LCAyMDMsIDgyLCA3OSwgNjcsIDEyOCwgODIsIDc5LCA2NiwgNjUsIDg0LCAxMjgsIDgyLCA3OSwgNjUsIDgzLCA4NCwgCiAgICAgNjksIDE5NiwgODIsIDc5LCA2NSwgODIsIDEyOCwgODIsIDc5LCA2NSwgMTI4LCA4MiwgNzgsIDg5LCA3MywgNzgsIDE5OSwgCiAgICAgODIsIDc4LCA3OSwgNzksIDc4LCAxMjgsIDgyLCA3OCwgNzksIDc5LCAyMDYsIDgyLCA3OCwgNjUsIDIwNSwgODIsIDc3LCAKLSAgICA4NCwgMTI4LCA4MiwgNzYsIDc5LCAxMjgsIDgyLCA3NiwgNzcsIDEyOCwgODIsIDc2LCA2OSwgMTI4LCA4MiwgNzQsIDY5LCAKLSAgICAyMTEsIDgyLCA3NCwgNjksIDEyOCwgODIsIDc0LCAxOTcsIDgyLCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNzMsIDg0LCAKLSAgICA4NSwgNjUsIDc2LCAxMjgsIDgyLCA3MywgODQsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgyLCA3MywgODQsIDgzLCA3MywgCi0gICAgMTI4LCA4MiwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDczLCA4MywgNzIsIDEyOCwgODIsIDczLCA4MiwgNjUsIDEyOCwgCi0gICAgODIsIDczLCA4MCwgMTI4LCA4MiwgNzMsIDc4LCA3MSwgMjExLCA4MiwgNzMsIDc4LCA3MCwgNzksIDgyLCA5MCwgNjUsIDc4LCAKLSAgICA2OCwgNzksIDEyOCwgODIsIDczLCAyMDYsIDgyLCA3MywgNzcsIDcxLCA2NiwgNjUsIDEyOCwgODIsIDczLCA3NSwgODIsIAotICAgIDczLCA3NSwgMTI4LCA4MiwgNzMsIDcxLCA4NiwgNjksIDY4LCA3MywgMTk1LCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgCi0gICAgODIsIDY4LCA4MywgMTI4LCA4MiwgNzMsIDcxLCA3MiwgODQsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCAKLSAgICA0NSwgODQsIDc5LCA0NSwgNzYsIDY5LCA3MCwgMjEyLCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIAotICAgIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKLSAgICA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgCi0gICAgODQsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCA2OCwgNjksIDE5NiwgODIsIDczLCAKLSAgICA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgCi0gICAgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgODMsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgCi0gICAgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIAotICAgIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCAKLSAgICA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCi0gICAgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIAotICAgIDg0LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCAKLSAgICA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAotICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKLSAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIAotICAgIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgyLCA3MywgNjksIDg1LCAyMDQsIDgyLCA3MywgNjksIDc2LCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDY5LCAxMjgsIDgyLCA3MywgNjcsIDY5LCA3NywgMTI4LCA4MiwgNzMsIDY3LCA2OSwgMTI4LCAKLSAgICA4MiwgNzMsIDY3LCAxOTcsIDgyLCA3MywgNjYsIDY2LCA3OSwgNzgsIDEyOCwgODIsIDczLCA2NSwgMjA0LCA4MiwgNzIsIAotICAgIDc5LCA4NCwgNzMsIDE5NSwgODIsIDcyLCA3OSwgMTI4LCA4MiwgNzIsIDIwNywgODIsIDcyLCA2NSwgMTI4LCA4MiwgNzEsIAotICAgIDg5LCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MiwgNzEsIDg5LCA2NSwgNzgsIDEyOCwgODIsIDcxLCA4OSwgMTkzLCA4MiwgCi0gICAgNjksIDg2LCA3OSwgNzYsIDg2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA4NiwgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgODIsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgyLCA2OSwgODYsIDczLCA2NSwgMTI4LCA4MiwgNjksIDg2LCA2OSwgCi0gICAgODIsIDgzLCA2OSwgNjgsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDE5NiwgODIsIDY5LCA4NiwgNjksIDgyLCAKLSAgICA4MywgMTk3LCA4MiwgNjksIDg1LCA4OCwgMTI4LCA4MiwgNjksIDg1LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgNzgsIAotICAgIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCAyMDYsIDgyLCA2OSwgODQsIDgyLCA3OSwgNzAsIDc2LCA2OSwgMjE2LCA4MiwgCi0gICAgNjksIDg0LCA4MiwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDg0LCA3OSwgODIsIDg0LCAxMjgsIDgyLCA2OSwgODMsIDg1LCAKLSAgICA4MCwgNzMsIDc4LCA4NSwgODMsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3OSwgNzksIDc3LCAxMjgsIDgyLCA2OSwgODMsIAotICAgIDg0LCA4MiwgNzMsIDY3LCA4NCwgNjksIDE5NiwgODIsIDY5LCA4MywgODQsIDEyOCwgODIsIDY5LCA4MywgODAsIDc5LCA3OCwgCi0gICAgODMsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgNzYsIDg1LCAKLSAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDgzLCA3MywgODMsIDg0LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIAotICAgIDgzLCA3MywgNjgsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDIwMCwgODIsIDY5LCA4MiwgNjksIDc4LCA3MSwgCi0gICAgNzEsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgyLCA2OSwgNzUsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgwLCA4MiwgNjksIDgzLCAKLSAgICA2OSwgNzgsIDg0LCAxMjgsIDgyLCA2OSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3NywgNjksIDc4LCAyMTIsIDgyLCA2OSwgODAsIAotICAgIDcyLCAxMjgsIDgyLCA2OSwgODAsIDY5LCA4NCwgNzMsIDg0LCA3MywgNzksIDIwNiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgCi0gICAgNjksIDE5NiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA2OSwgNjUsIDIxMiwgODIsIDY5LCAKLSAgICA4MCwgNjUsIDg5LCA2NSwgMTI4LCA4MiwgNjksIDgwLCA2NSwgMTI4LCA4MiwgNjksIDgwLCAxOTMsIDgyLCA2OSwgNzgsIAotICAgIDg0LCA3OSwgNzEsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDc4LCAxMjgsIDgyLCA2OSwgMjA2LCA4MiwgNjksIDc3LCA4NSwgCi0gICAgMTI4LCA4MiwgNjksIDc3LCA2OSwgNjgsIDg5LCAxMjgsIDgyLCA2OSwgNzYsIDczLCA3MSwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4MiwgNjksIDc2LCA3MywgNjksIDg2LCA2OSwgMTk2LCA4MiwgNjksIDc2LCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA4MiwgNjksIAotICAgIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgCi0gICAgNjksIDc2LCA2NSwgNjUsIDEyOCwgODIsIDY5LCA3NCwgNjUsIDc4LCAxOTksIDgyLCA2OSwgNzMsIDE5NiwgODIsIDY5LCAKLSAgICA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MiwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUxLCAxMjgsIAotICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDEyOCwgCi0gICAgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgMjExLCA4MiwgNjksIDcxLCA3MywgODMsIDg0LCA2OSwgODIsIDY5LCAxOTYsIDgyLCAKLSAgICA2OSwgNzEsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzEsIDczLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNzEsIAotICAgIDczLCA2NSwgMTI4LCA4MiwgNjksIDcwLCA3OSwgODIsIDc3LCA2OSwgMTk2LCA4MiwgNjksIDcwLCA2OSwgODIsIDY5LCA3OCwgCi0gICAgNjcsIDE5NywgODIsIDY5LCA2OCwgODUsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCAKLSAgICA2NywgODksIDY3LCA3NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgyLCA2OSwgNjcsIAotICAgIDg0LCA3MywgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAKLSAgICAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIAotICAgIDc2LCAxOTcsIDgyLCA2OSwgNjcsIDgyLCA2OSwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDY3LCA3OSwgCi0gICAgODIsIDY4LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgyLCA2OSwgNjcsIDc5LCAKLSAgICA4MiwgMTk2LCA4MiwgNjksIDY3LCA2OSwgODAsIDg0LCA3MywgODYsIDE5NywgODIsIDY5LCA2NywgNjksIDczLCA4NiwgNjksIAotICAgIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCA0NSwgNTAsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgCi0gICAgODIsIDEyOCwgODIsIDY5LCA2NSwgNzIsIDc3LCA4NSwgNzUsIDEyOCwgODIsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgyLCAKLSAgICA2OCwgMjA3LCA4MiwgNjgsIDY5LCAyMDQsIDgyLCA2NiwgNjUsIDgzLCAxOTMsIDgyLCA2NSwgODksIDgzLCAxMjgsIDgyLCAKLSAgICA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgNjUsIAotICAgIDEyOCwgODIsIDY1LCA4NCwgNzIsIDE5MywgODIsIDY1LCA4NCwgNjUsIDEyOCwgODIsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIAotICAgIDgzLCA4NywgNjUsIDY4LCA3MywgMTI4LCA4MiwgNjUsIDgzLCA3OSwgODUsIDIwNCwgODIsIDY1LCA4MywgNzIsIDY1LCAKLSAgICAxMjgsIDgyLCA2NSwgODEsIDEyOCwgODIsIDY1LCA4MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODIsIDY1LCA3OCwgNzEsIAotICAgIDE5NywgODIsIDY1LCA3OCwgNjUsIDEyOCwgODIsIDY1LCA3OCwgMTI4LCA4MiwgNjUsIDc3LCAyMTEsIDgyLCA2NSwgNzcsIAotICAgIDY2LCA2NSwgODQsIDEyOCwgODIsIDY1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDEyOCwgODIsIDY1LCA3NSwgNjUsIDY1LCA4MiwgCi0gICAgNjUsIDY1LCA3OCwgODMsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY1LCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNjUsIDczLCAKLSAgICA4MywgNjksIDE5NiwgODIsIDY1LCA3MywgNzgsIDY2LCA3OSwgODcsIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgODksIAotICAgIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgMjE3LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA4MiwgNjUsIDczLCA2OCwgCi0gICAgMjA3LCA4MiwgNjUsIDczLCA2OCwgNjUsIDEyOCwgODIsIDY1LCA3MiwgNzcsIDY1LCA4NCwgODUsIDc2LCA3NiwgNjUsIAotICAgIDIwMCwgODIsIDY1LCA3MiwgMTI4LCA4MiwgNjUsIDcwLCA2OSwgMTI4LCA4MiwgNjUsIDY5LCA3NywgMTI4LCA4MiwgNjUsIAotICAgIDY4LCA3MywgNzksIDY1LCA2NywgODQsIDczLCA4NiwgMTk3LCA4MiwgNjUsIDY4LCA3MywgNzksIDEyOCwgODIsIDY1LCA2OCwgCi0gICAgNzMsIDIwNywgODIsIDY1LCA2OCwgMjAxLCA4MiwgNjUsIDY4LCAxMjgsIDgyLCA2NSwgMTk2LCA4MiwgNjUsIDY3LCA4MSwgCi0gICAgODUsIDY5LCAyMTIsIDgyLCA2NSwgNjcsIDczLCA3OCwgNzEsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCA4NCwgMTI4LCAKLSAgICA4MiwgNjUsIDY2LCA2NiwgNzMsIDIxMiwgODIsIDY1LCA2NiwgMTI4LCA4MiwgNjUsIDY1LCA3MywgMTI4LCA4MiwgNjUsIAotICAgIDUxLCAxMjgsIDgyLCA2NSwgNTAsIDEyOCwgODIsIDY1LCA0NSwgNTAsIDEyOCwgODIsIDQ4LCA1MCwgNTcsIDEyOCwgODIsIAotICAgIDQ4LCA1MCwgNTYsIDEyOCwgODIsIDQ4LCA1MCwgNTUsIDEyOCwgODIsIDQ4LCA1MCwgNTQsIDEyOCwgODIsIDQ4LCA1MCwgCi0gICAgNTMsIDEyOCwgODIsIDQ4LCA1MCwgNTIsIDEyOCwgODIsIDQ4LCA1MCwgNTEsIDEyOCwgODIsIDQ4LCA1MCwgNTAsIDEyOCwgCi0gICAgODIsIDQ4LCA1MCwgNDksIDEyOCwgODIsIDQ4LCA1MCwgNDgsIDEyOCwgODIsIDQ4LCA0OSwgNTcsIDEyOCwgODIsIDQ4LCAKLSAgICA0OSwgNTYsIDEyOCwgODIsIDQ4LCA0OSwgNTUsIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDgyLCA0OCwgNDksIAotICAgIDU0LCAxMjgsIDgyLCA0OCwgNDksIDUzLCAxMjgsIDgyLCA0OCwgNDksIDUyLCAxMjgsIDgyLCA0OCwgNDksIDUxLCAxMjgsIAotICAgIDgyLCA0OCwgNDksIDUwLCAxMjgsIDgyLCA0OCwgNDksIDQ5LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA4MiwgCi0gICAgNDgsIDQ5LCA0OCwgMTI4LCA4MiwgNDgsIDQ4LCA1NywgMTI4LCA4MiwgNDgsIDQ4LCA1NiwgMTI4LCA4MiwgNDgsIDQ4LCAKLSAgICA1NSwgMTI4LCA4MiwgNDgsIDQ4LCA1NCwgMTI4LCA4MiwgNDgsIDQ4LCA1MywgMTI4LCA4MiwgNDgsIDQ4LCA1MiwgMTI4LCAKLSAgICA4MiwgNDgsIDQ4LCA1MSwgNjYsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCAxMjgsIAotICAgIDgyLCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgMTI4LCA4MiwgNDgsIDQ4LCA0OSwgMTI4LCA4MiwgCi0gICAgNDUsIDY3LCA4MiwgNjksIDE5NywgODEsIDg5LCA4OCwgMTI4LCA4MSwgODksIDg1LCAxMjgsIDgxLCA4OSwgODQsIDEyOCwgCi0gICAgODEsIDg5LCA4MiwgODgsIDEyOCwgODEsIDg5LCA4MiwgMTI4LCA4MSwgODksIDgwLCAxMjgsIDgxLCA4OSwgNzksIDEyOCwgCi0gICAgODEsIDg5LCA3MywgMTI4LCA4MSwgODksIDY5LCA2OSwgMTI4LCA4MSwgODksIDY5LCAxMjgsIDgxLCA4OSwgNjUsIDY1LCAKLSAgICAxMjgsIDgxLCA4OSwgNjUsIDEyOCwgODEsIDg5LCAxMjgsIDgxLCA4NywgNzMsIDEyOCwgODEsIDg3LCA2OSwgNjksIDEyOCwgCi0gICAgODEsIDg3LCA2OSwgMTI4LCA4MSwgODcsIDY1LCA2NSwgMTI4LCA4MSwgODcsIDY1LCAxMjgsIDgxLCA4NSwgODgsIDEyOCwgCi0gICAgODEsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCAxMjgsIDgxLCA4NSwgODQsIDEyOCwgCi0gICAgODEsIDg1LCA4MywgNzIsIDgzLCA3MiwgNjUsIDg5LCA2NSwgMTI4LCA4MSwgODUsIDgyLCA4OCwgMTI4LCA4MSwgODUsIDgyLCAKLSAgICAxMjgsIDgxLCA4NSwgODAsIDEyOCwgODEsIDg1LCA3OSwgODgsIDEyOCwgODEsIDg1LCA3OSwgODQsIDE5NywgODEsIDg1LCAKLSAgICA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNzksIDg0LCAxMjgsIDgxLCA4NSwgNzksIDgwLCAxMjgsIAotICAgIDgxLCA4NSwgNzksIDEyOCwgODEsIDg1LCA3NSwgMTI4LCA4MSwgODUsIDczLCA3OCwgODQsIDY5LCA4MywgODMsIDY5LCA3OCwgCi0gICAgNjcsIDY5LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2OSwgODMsIDczLCA3NywgMTkzLCA4MSwgODUsIDczLCAKLSAgICA3OCwgNjcsIDg1LCA3OCwgODgsIDEyOCwgODEsIDg1LCA3MywgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDgxLCA4NSwgNzMsIAotICAgIDc2LCA3NiwgMTI4LCA4MSwgODUsIDczLCA2NywgMjAzLCA4MSwgODUsIDczLCAxMjgsIDgxLCA4NSwgNzAsIDEyOCwgODEsIAotICAgIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCA2OSwgMTk2LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDIwNiwgODEsIDg1LCA2OSwgNjksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDY5LCAKLSAgICAyMDYsIDgxLCA4NSwgNjksIDEyOCwgODEsIDg1LCA2NiwgODUsIDg0LCA4MywgMTI4LCA4MSwgODUsIDY1LCA4NCwgNjksIAotICAgIDgyLCA3OCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MSwgODUsIDY1LCA4MiwgCi0gICAgODQsIDY5LCA4MiwgMjExLCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCAKLSAgICAyMTAsIDgxLCA4NSwgNjUsIDc4LCA4NCwgNzMsIDg0LCAyMTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgODUsIDgwLCA3NiwgCi0gICAgMTk3LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgODQsIDEyOCwgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIAotICAgIDIxMiwgODEsIDg1LCA2NSwgNjgsIDEyOCwgODEsIDg1LCA2NSwgMTk2LCA4MSwgODUsIDY1LCAxMjgsIDgxLCA4NSwgMTI4LCAKLSAgICA4MSwgMjA4LCA4MSwgNzksIDg4LCAxMjgsIDgxLCA3OSwgODQsIDEyOCwgODEsIDc5LCA4MCwgNzIsIDEyOCwgODEsIDc5LCAKLSAgICA4MCwgNjUsIDEyOCwgODEsIDc5LCA4MCwgMTI4LCA4MSwgNzksIDc5LCAxMjgsIDgxLCA3OSwgMjA3LCA4MSwgNzksIDcwLCAKLSAgICAxMjgsIDgxLCA3OSwgMTk4LCA4MSwgNzksIDY1LCAxMjgsIDgxLCA3OSwgMTI4LCA4MSwgNzgsIDEyOCwgODEsIDczLCA4OCwgCi0gICAgMTI4LCA4MSwgNzMsIDg0LCA4MywgNjUsIDEyOCwgODEsIDczLCA4NCwgMTI4LCA4MSwgNzMsIDgwLCAxMjgsIDgxLCA3MywgCi0gICAgNzMsIDEyOCwgODEsIDczLCA2OSwgODgsIDEyOCwgODEsIDczLCA2OSwgODQsIDEyOCwgODEsIDczLCA2OSwgODAsIDEyOCwgCi0gICAgODEsIDczLCA2OSwgMTI4LCA4MSwgNzMsIDEyOCwgODEsIDcyLCA4NywgNzMsIDEyOCwgODEsIDcyLCA4NywgNjksIDY5LCAKLSAgICAxMjgsIDgxLCA3MiwgODcsIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgMTI4LCAKLSAgICA4MSwgNzIsIDg1LCAxMjgsIDgxLCA3MiwgNzksIDEyOCwgODEsIDcyLCA3MywgMTI4LCA4MSwgNzIsIDY5LCA2OSwgMTI4LCAKLSAgICA4MSwgNzIsIDY5LCAxMjgsIDgxLCA3MiwgNjUsIDY1LCAxMjgsIDgxLCA3MiwgNjUsIDEyOCwgODEsIDcxLCA2NSwgMTI4LCAKLSAgICA4MSwgNjksIDg0LCA2NSwgNzgsIDY1LCAxMjgsIDgxLCA2OSwgNjksIDEyOCwgODEsIDY5LCAxMjgsIDgxLCA2NSwgODUsIAotICAgIDEyOCwgODEsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDgxLCA2NSwgODIsIDc4LCA2OSwgMjE3LCA4MSwgNjUsIDgyLCAxMjgsIAotICAgIDgxLCA2NSwgODEsIDEyOCwgODEsIDY1LCA4MCwgNzIsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCA4MywgMTI4LCA4MSwgCi0gICAgNjUsIDc3LCA2NSwgODQsIDIxMSwgODEsIDY1LCA3NiwgMTkzLCA4MSwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIAotICAgIDEyOCwgODEsIDY1LCA3MywgMTI4LCA4MSwgNjUsIDcwLCAxMjgsIDgxLCA2NSwgMTk4LCA4MSwgNjUsIDY4LCA3NywgNjUsIAotICAgIDEyOCwgODEsIDY1LCA2NSwgNzMsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDgxLCA2NSwgNjUsIDcwLCAxMjgsIAotICAgIDgxLCA0OCwgNDgsIDU1LCAxMjgsIDgxLCA0OCwgNDgsIDU0LCAxMjgsIDgxLCA0OCwgNDgsIDUzLCAxMjgsIDgxLCA0OCwgCi0gICAgNDgsIDUyLCAxMjgsIDgxLCA0OCwgNDgsIDUxLCAxMjgsIDgxLCA0OCwgNDgsIDUwLCAxMjgsIDgxLCA0OCwgNDgsIDQ5LCAKLSAgICAxMjgsIDgwLCA5MCwgMTI4LCA4MCwgODksIDg4LCAxMjgsIDgwLCA4OSwgODQsIDEyOCwgODAsIDg5LCA4MiwgODgsIDEyOCwgCi0gICAgODAsIDg5LCA4MiwgMTI4LCA4MCwgODksIDgwLCAxMjgsIDgwLCA4OSwgMTI4LCA4MCwgODcsIDc5LCA4OSwgMTI4LCA4MCwgCi0gICAgODcsIDc5LCA3OSwgMTI4LCA4MCwgODcsIDc5LCAxMjgsIDgwLCA4NywgMjA3LCA4MCwgODcsIDczLCA3MywgMTI4LCA4MCwgCi0gICAgODcsIDczLCAxMjgsIDgwLCA4NywgNjksIDY5LCAxMjgsIDgwLCA4NywgNjksIDEyOCwgODAsIDg3LCA2NSwgNjUsIDEyOCwgCi0gICAgODAsIDg3LCAxMjgsIDgwLCA4NiwgMTI4LCA4MCwgODUsIDg4LCAxMjgsIDgwLCA4NSwgODUsIDg0LCAxMjgsIDgwLCA4NSwgCi0gICAgODUsIDEyOCwgODAsIDg1LCA4NCwgODIsIDY5LCA3MCwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDg0LCAKLSAgICAxMjgsIDgwLCA4NSwgMjEyLCA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3OCwgMTI4LCA4MCwgODUsIDgzLCA3MiwgODAsIAotICAgIDczLCA3NSwgNjUsIDEyOCwgODAsIDg1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MCwgODUsIDgyLCA4OCwgMTI4LCA4MCwgCi0gICAgODUsIDgyLCA4MywgNjksIDEyOCwgODAsIDg1LCA4MiwgODAsIDc2LCAxOTcsIDgwLCA4NSwgODIsIDc4LCA2NSwgNzcsIDY1LCAKLSAgICAxMjgsIDgwLCA4NSwgODIsIDczLCA4NCwgODksIDEyOCwgODAsIDg1LCA4MiwgNzMsIDcwLCA4OSwgMTI4LCA4MCwgODUsIAotICAgIDgyLCAxMjgsIDgwLCA4NSwgODEsIDEyOCwgODAsIDg1LCA4MCwgMTI4LCA4MCwgODUsIDc5LCA4OCwgMTI4LCA4MCwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCAxMjgsIDgwLCA4NSwgNzgsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA4NSwgCi0gICAgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDc4LCAKLSAgICA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODUsIDc3LCA4MCwgMTI4LCA4MCwgODUsIDc3LCAxMjgsIAotICAgIDgwLCA4NSwgNjksIDEyOCwgODAsIDg1LCA2NiwgNzYsIDczLCAxOTUsIDgwLCA4NSwgNjUsIDgxLCAxMjgsIDgwLCA4NSwgCi0gICAgNjUsIDY5LCAxMjgsIDgwLCA4NSwgNTAsIDEyOCwgODAsIDg1LCA0OSwgMTI4LCA4MCwgODUsIDEyOCwgODAsIDg0LCA3MiwgCi0gICAgNjUsIDcyLCAxOTMsIDgwLCA4NCwgNjksIDEyOCwgODAsIDgzLCA3MywgNzYsIDIwMSwgODAsIDgzLCA3MywgNzAsIDczLCAKLSAgICA4MywgODQsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgCi0gICAgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIAotICAgIDgzLCA4NCwgNzksIDIwNiwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCAKLSAgICA2NSwgMTI4LCA4MCwgODMsIDczLCAxMjgsIDgwLCA4MywgMTI4LCA4MCwgODIsIDc5LCA4NiwgNjksIDEyOCwgODAsIDgyLCAKLSAgICA3OSwgODQsIDc5LCA4NiwgNjUsIDgyLCA4OSwgMjExLCA4MCwgODIsIDc5LCA4NCwgNzksIDIxMSwgODAsIDgyLCA3OSwgODQsIAotICAgIDY5LCA2NywgODQsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDgzLCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIDc4LCAKLSAgICA3MywgMTI4LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDgyLCA3OSwgODAsIAotICAgIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgODAsIDY5LCA4MiwgODQsIDIxNywgODAsIDgyLCA3OSwgCi0gICAgODAsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDgwLCA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA3NiwgNzksIDc4LCAKLSAgICA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgNjksIAotICAgIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgCi0gICAgODIsIDc5LCA3MSwgODIsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDc5LCAKLSAgICA3MCwgNzksIDg1LCA3OCwgNjgsIDEyOCwgODAsIDgyLCA3OSwgNjgsIDg1LCA2NywgODQsIDEyOCwgODAsIDgyLCA3OSwgNjgsIAotICAgIDg1LCA2NywgMjEyLCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCAKLSAgICAxOTcsIDgwLCA4MiwgNzMsIDg2LCA2NSwgNjcsIDIxNywgODAsIDgyLCA3MywgODMsIDcyLCA4NCwgNzIsIDY1LCA3NywgNjUsIAotICAgIDg0LCA4MiwgMTkzLCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgCi0gICAgODIsIDczLCA3OCwgMjEyLCA4MCwgODIsIDczLCA3OCwgNjcsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3MywgNzcsIDY5LCAKLSAgICAxMjgsIDgwLCA4MiwgNzMsIDc3LCAxOTcsIDgwLCA4MiwgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIAotICAgIDgzLCA2OSwgODQsIDEyOCwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgCi0gICAgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MCwgNzksIDc4LCA2OCwgNjksIAotICAgIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA3OCwgNzUsIDcyLCA2NSwgMTI4LCA4MCwgODIsIDY5LCA3MCwgCi0gICAgNjUsIDY3LCAxOTcsIDgwLCA4MiwgNjksIDY3LCA3MywgODAsIDczLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDY5LCAKLSAgICA2NywgNjksIDY4LCA3MywgNzgsIDE5OSwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDgzLCAxMjgsIDgwLCA4MiwgNjksIAotICAgIDY3LCA2OSwgNjgsIDY5LCAyMTEsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAxOTYsIDgwLCA4MiwgNjksIDY3LCA2OSwgCi0gICAgNjgsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDE5NywgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDczLCAKLSAgICAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAyMDEsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgODksIAotICAgIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCAyMTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgCi0gICAgNzgsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCAyMDYsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCAKLSAgICA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgMjAxLCA4MCwgODIsIDY1LCA3NywgMTI4LCA4MCwgODIsIAotICAgIDY1LCAyMDUsIDgwLCA4MiwgMTI4LCA4MCwgODAsIDg2LCAxMjgsIDgwLCA4MCwgNzcsIDEyOCwgODAsIDgwLCA2NSwgMTI4LCAKLSAgICA4MCwgNzksIDg5LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgODAsIDc5LCA4NywgNjksIDgyLCAyMTEsIDgwLCA3OSwgODcsIAotICAgIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAKLSAgICAxMjgsIDgwLCA3OSwgODUsIDc4LCAxOTYsIDgwLCA3OSwgODUsIDc2LCA4NCwgODIsIDIxNywgODAsIDc5LCA4NSwgNjcsIAotICAgIDcyLCAxMjgsIDgwLCA3OSwgODQsIDY1LCA4NCwgNzksIDEyOCwgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA4MCwgCi0gICAgNzksIDIxMiwgODAsIDc5LCA4MywgODQsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA3OSwgODMsIDg0LCAKLSAgICA2NiwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNzksIDgzLCA4NCwgMTI4LCA4MCwgNzksIAotICAgIDgzLCAyMTIsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgCi0gICAgNjcsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDg1LCAyMTEsIDgwLCA3OSwgODAsIDgwLCAKLSAgICA2OSwgODIsIDEyOCwgODAsIDc5LCA4MCwgMTI4LCA4MCwgNzksIDIwOCwgODAsIDc5LCA3OSwgNjgsIDc2LCA2OSwgMTI4LCAKLSAgICA4MCwgNzksIDc5LCAxMjgsIDgwLCA3OSwgNzgsIDY4LCA3OSwgMTI4LCA4MCwgNzksIDIwNiwgODAsIDc5LCA3NywgNzcsIAotICAgIDY5LCA2OSwgMTI4LCA4MCwgNzksIDc3LCA3NywgNjksIDE5NywgODAsIDc5LCA3NiwgNzMsIDgzLCA3MiwgMTI4LCA4MCwgCi0gICAgNzksIDc2LCA3MywgNjcsIDE5NywgODAsIDc5LCA3NiwgMjAxLCA4MCwgNzksIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc2LCAKLSAgICAxOTcsIDgwLCA3OSwgNzUsIDgyLCA4OSwgODQsIDczLCA2OSwgMTI4LCA4MCwgNzksIDc1LCA3OSwgNzQsIDczLCAxMjgsIAotICAgIDgwLCA3OSwgNzMsIDc4LCA4NCwgMjExLCA4MCwgNzksIDczLCA3OCwgODQsIDc5LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDgyLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDE5NiwgODAsIDc5LCA3MywgNzgsIDg0LCAxMjgsIDgwLCAKLSAgICA3OSwgNzMsIDc4LCAyMTIsIDgwLCA3OSwgNjksIDg0LCA4MiwgMjE3LCA4MCwgNzksIDY5LCA4NCwgNzMsIDE5NSwgODAsIAotICAgIDc5LCA2OCwgNjUsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA2NSwgMTI4LCA4MCwgNzksIDEyOCwgODAsIDIwNywgODAsIAotICAgIDc4LCA2OSwgODUsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgwLCA3NiwgODUsIDg0LCA3OSwgMTI4LCA4MCwgNzYsIDg1LCA4MywgCi0gICAgNDUsIDc3LCA3MywgNzgsIDg1LCAyMTEsIDgwLCA3NiwgODUsIDgzLCAxMjgsIDgwLCA3NiwgODUsIDgyLCA2NSwgNzYsIAotICAgIDEyOCwgODAsIDc2LCA4NSwgNzcsIDY5LCAxOTYsIDgwLCA3NiwgODUsIDc3LCAxMjgsIDgwLCA3NiwgODUsIDc1LCAxMjgsIAotICAgIDgwLCA3NiwgODUsIDcxLCAxMjgsIDgwLCA3NiwgODUsIDEyOCwgODAsIDc2LCA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgCi0gICAgODAsIDcyLCA4NSwgMTI4LCA4MCwgNzYsIDY5LCA4NCwgNzIsIDgyLCA3OSwgNzgsIDEyOCwgODAsIDc2LCA2OCwgMTI4LCAKLSAgICA4MCwgNzYsIDY1LCA4OSwgNzMsIDc4LCAxOTksIDgwLCA3NiwgNjUsIDgzLCA4NCwgNzMsIDY3LCA4MywgMTI4LCA4MCwgNzYsIAotICAgIDY1LCA3OCwgNjksIDEyOCwgODAsIDc2LCA2NSwgNzgsIDE5NywgODAsIDc2LCA2NSwgNzgsIDY3LCAyMDMsIDgwLCA3NiwgCi0gICAgNjUsIDc1LCAxMjgsIDgwLCA3NiwgNjUsIDcxLCA3MywgNzksIDIxMSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3MiwgNzksIDc2LCAKLSAgICA2OCwgNjksIDIxMCwgODAsIDc2LCA2NSwgNjcsIDE5NywgODAsIDc2LCA2NSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNzMsIAotICAgIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA2NSwgMTI4LCA4MCwgNzMsIDg4LCAxMjgsIDgwLCA3MywgCi0gICAgODcsIDgyLCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgNzUsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCAKLSAgICA3MCwgNzksIDgyLCAyMDMsIDgwLCA3MywgODQsIDEyOCwgODAsIDczLCA4MywgODQsIDc5LCA3NiwgMTI4LCA4MCwgNzMsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA3MiwgMTI4LCA4MCwgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIDgwLCA3MywgODIsIDczLCA3MSwgCi0gICAgMTI4LCA4MCwgNzMsIDgyLCA3MywgMTk5LCA4MCwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgMTI4LCA4MCwgNzMsIDgwLCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgwLCA3MywgODAsIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA4MCwgNzMsIAotICAgIDgwLCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgODAsIDczLCA4MCwgMTI4LCA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgCi0gICAgMjA0LCA4MCwgNzMsIDc4LCA2OSwgNjUsIDgwLCA4MCwgNzYsIDY5LCAxMjgsIDgwLCA3MywgNzgsIDE5NywgODAsIDczLCAKLSAgICA3OCwgNjUsIDgyLCA2NiwgNzksIDgyLCA2NSwgODMsIDEyOCwgODAsIDczLCA3NiwgNzYsIDEyOCwgODAsIDczLCA3NiwgCi0gICAgMTk3LCA4MCwgNzMsIDc2LCA2NywgODIsIDc5LCAyMTUsIDgwLCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCAKLSAgICA3NSwgNzksIDEyOCwgODAsIDczLCA3MSwgMTI4LCA4MCwgNzMsIDE5OSwgODAsIDczLCA2OSwgODgsIDEyOCwgODAsIDczLCAKLSAgICA2OSwgODUsIDgwLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCi0gICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIAotICAgIDczLCA2OSwgODUsIDc2LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIAotICAgIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKLSAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3MywgNjksIAotICAgIDg1LCAyMDgsIDgwLCA3MywgNjksIDg0LCAxMjgsIDgwLCA3MywgNjksIDgwLCAxMjgsIDgwLCA3MywgNjksIDY5LCA4NCwgCi0gICAgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODEsIDEyOCwgODAsIDczLCA2OSwgNjcsIDY5LCAxMjgsIDgwLCA3MywgNjksIDEyOCwgCi0gICAgODAsIDczLCA2NywgNzUsIDY5LCA4NCwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgODUsIDg0LCAKLSAgICA3OSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA3NywgMTkzLCA4MCwgNzMsIDY1LCA3OCwgNzksIDEyOCwgODAsIAotICAgIDIwMSwgODAsIDcyLCA4NywgNjUsIDEyOCwgODAsIDcyLCA4NSwgODQsIDcyLCA2NSwgNzksIDEyOCwgODAsIDcyLCA4NSwgCi0gICAgMjEwLCA4MCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODAsIDcyLCA4MiwgNjUsIDgzLCA2OSwgMTI4LCA4MCwgNzIsIDc5LCAKLSAgICA3OCwgNjksIDgzLCAxMjgsIDgwLCA3MiwgNzksIDY5LCA3OCwgNzMsIDY3LCA3MywgNjUsIDIwNiwgODAsIDcyLCA3OSwgNjUsIAotICAgIDEyOCwgODAsIDcyLCA3OSwgMTI4LCA4MCwgNzIsIDIwNywgODAsIDcyLCA3OCwgNjUsIDY5LCAyMDMsIDgwLCA3MiwgNzMsIAotICAgIDc4LCA4NCwgNzIsIDg1LCAxMjgsIDgwLCA3MiwgNzMsIDc2LCA3OSwgODMsIDc5LCA4MCwgNzIsIDY5LCA4MiwgMjExLCA4MCwgCi0gICAgNzIsIDczLCA3NiwgNzMsIDgwLCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODQsIAotICAgIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MywgNzMsIDc5LCAKLSAgICA4MywgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzIsIAotICAgIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAKLSAgICAyMDAsIDgwLCA3MiwgNzMsIDEyOCwgODAsIDcyLCAyMDEsIDgwLCA3MiwgNjksIDY5LCAxMjgsIDgwLCA3MiwgNjksIDEyOCwgCi0gICAgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk4LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTQsIDgwLCA3MiwgNjUsIDgyLCAKLSAgICA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgODAsIDcyLCA2NSwgODIsIDEyOCwgODAsIDcyLCA2NSwgNzgsIDEyOCwgODAsIAotICAgIDcyLCA2NSwgNzcsIDEyOCwgODAsIDcyLCA2NSwgNzMsIDgzLCA4NCwgNzksIDIxMSwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgCi0gICAgODAsIDE5MywgODAsIDcyLCA2NSwgNjUsIDgyLCA3NSwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCAxMjgsIDgwLCAKLSAgICA3MiwgNjUsIDEyOCwgODAsIDcxLCAxMjgsIDgwLCA3MCwgMTI4LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA4MCwgNjksIDg1LCAKLSAgICA4NCwgNjUsIDY5LCAxMjgsIDgwLCA2OSwgODUsIDg0LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDc5LCA3NSwgNzksIAotICAgIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzMsIDEyOCwgODAsIDY5LCA4NCwgCi0gICAgNjUsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDc2LCA3NiwgNjksIDE5NiwgODAsIDY5LCA4MywgNzksIAotICAgIDEyOCwgODAsIDY5LCA4MywgMjA3LCA4MCwgNjksIDgzLCA3MiwgNTAsIDEyOCwgODAsIDY5LCA4MywgNjksIDg0LCAxOTMsIAotICAgIDgwLCA2OSwgMjExLCA4MCwgNjksIDgyLCA4NCwgNzIsIDIwNywgODAsIDY5LCA4MiwgODMsIDgwLCA2OSwgNjcsIDg0LCA3MywgCi0gICAgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIAotICAgIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA3MywgNjUsIDIwNiwgODAsIDY5LCA4MiwgCi0gICAgODMsIDY5LCA4NiwgNjksIDgyLCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIAotICAgIDc2LCA2NSwgODIsIDEyOCwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MCwgCi0gICAgNjksIDgyLCA3NywgNzMsIDg0LCA4NCwgNjksIDE5NiwgODAsIDY5LCA4MiwgNzcsIDY1LCA3OCwgNjksIDc4LCAyMTIsIDgwLCAKLSAgICA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgCi0gICAgNzcsIDY5LCA3OCwgMjAxLCA4MCwgNjksIDgyLCA3MCwgNzksIDgyLCA3NywgNzMsIDc4LCAxOTksIDgwLCA2OSwgODIsIDcwLCAKLSAgICA2OSwgNjcsIDg0LCA4NSwgMjA1LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgODAsIDY5LCA4MiwgNzAsIAotICAgIDY5LCA2NywgODQsIDE5MywgODAsIDY5LCA4MiwgNjcsIDg1LCA4MywgODMsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgCi0gICAgNjcsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgwLCA2OSwgODQsIDEyOCwgODAsIDY5LCA4MCwgNjksIDIxMiwgODAsIDY5LCAKLSAgICA3OSwgODIsIDg0LCAyMDAsIDgwLCA2OSwgNzksIDgwLCA3NiwgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA4MywgNjksIAotICAgIDc3LCA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgCi0gICAgNzEsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA4MywgODUsIDEyOCwgODAsIDY5LCA3OCwgODMsIDczLCA4NiwgMTk3LCAKLSAgICA4MCwgNjksIDc4LCA3OCwgMjE3LCA4MCwgNjksIDc4LCA3MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA4NSwgNzMsIAotICAgIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA3NSwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNzgsIDY5LCA4NCwgODIsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA2NywgNzMsIDc2LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAKLSAgICA3OCwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgMjA2LCA4MCwgNjksIDczLCA4NCwgNzIsIDEyOCwgODAsIAotICAgIDY5LCA3MiwgNjksIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCAyMDAsIDgwLCA2OSwgNzIsIDEyOCwgODAsIDY5LCAyMDAsIAotICAgIDgwLCA2OSwgNjksIDkwLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgwLCAKLSAgICAxMjgsIDgwLCA2OSwgNjksIDc3LCAxMjgsIDgwLCA2OSwgNjksIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgODIsIAotICAgIDczLCA2NSwgNzgsIDgzLCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDc4LCAxMjgsIDgwLCA2OSwgCi0gICAgNjgsIDY5LCA4MywgODQsIDY1LCA3NiwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNjksIDY4LCAKLSAgICA2NSwgMjA0LCA4MCwgNjksIDY1LCA2NywgNzIsIDEyOCwgODAsIDY5LCA2NSwgNjcsIDY5LCAxMjgsIDgwLCA2OSwgNjUsIAotICAgIDY3LCAxOTcsIDgwLCA2OCwgNzAsIDEyOCwgODAsIDY4LCAxMjgsIDgwLCA2NywgMTI4LCA4MCwgNjUsIDkwLCA2OSwgODIsIAotICAgIDEyOCwgODAsIDY1LCA4OSwgNjksIDgyLCA3OSwgNzUsIDEyOCwgODAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgCi0gICAgODAsIDY1LCA4OSwgMTI4LCA4MCwgNjUsIDg4LCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCA2NSwgMjE1LCA4MCwgCi0gICAgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODAsIDY1LCA4NSwgMTI4LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCAKLSAgICA3OCwgMTI4LCA4MCwgNjUsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDg0LCAyMDAsIAotICAgIDgwLCA2NSwgODQsIDY1LCA3NSwgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA4NCwgMTI4LCA4MCwgCi0gICAgNjUsIDgzLCA4NSwgODEsIDEyOCwgODAsIDY1LCA4MywgODMsIDgwLCA3OSwgODIsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCAKLSAgICA4NiwgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgCi0gICAgNjUsIDgzLCA4MywgNzMsIDg2LCA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgCi0gICAgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA3MiwgNjUsIDY5LCAKLSAgICAxMjgsIDgwLCA2NSwgODMsIDY5LCA4MSwgMTI4LCA4MCwgNjUsIDgzLCA2NSwgNzgsIDcxLCA2NSwgMjA2LCA4MCwgNjUsIAotICAgIDgyLCA4NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgODQsIDIxNywgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgCi0gICAgNzMsIDIwOCwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIAotICAgIDY5LCAxOTYsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgNjUsIDIwNiwgCi0gICAgODAsIDY1LCA4MiwgMjEyLCA4MCwgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCAKLSAgICA4NCwgNzMsIDcxLCA3NywgNjksIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIAotICAgIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCAKLSAgICA4MywgNzMsIDIxMSwgODAsIDY1LCA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIAotICAgIDc2LCA2OSwgNzYsIDc5LCA3MSwgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgCi0gICAgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIAotICAgIDczLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgCi0gICAgNjUsIDc2LCA2OSwgODMsIDc3LCAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCAKLSAgICA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgMjAwLCA4MCwgNjUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAKLSAgICAxMjgsIDgwLCA2NSwgODAsIDY5LCA4MiwgNjcsIDc2LCA3MywgODAsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgODAsIAotICAgIDY1LCA4MCwgMTI4LCA4MCwgNjUsIDIwOCwgODAsIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIAotICAgIDgwLCA2NSwgNzgsIDg5LCA3MywgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA4OSwgNjUsIDc4LCA3MSwgNzEsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA4NCwgNzMsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzgsIDcxLCA3OSwgNzgsIDY1LCA3OCwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCA2OCwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA3MSwgODIsIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc5LCA3NiwgCi0gICAgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDY1LCAKLSAgICA4OSwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNjUsIAotICAgIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCA4MCwgNjUsIDc4LCAKLSAgICA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA3OCwgNzEsIAotICAgIDc1LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgNzcsIDgzLCA3MiwgCi0gICAgNjUsIDY5LCAxMjgsIDgwLCA2NSwgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCA3NywgNzMsIDc4LCAKLSAgICA3MSwgNzUsIDY1LCA3NiwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgNzgsIAotICAgIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjUsIDY5LCA3MiwgCi0gICAgMTI4LCA4MCwgNjUsIDc2LCA4NSwgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc2LCAyMDUsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODMsIAotICAgIDEyOCwgODAsIDY1LCA3NiwgNjksIDg0LCA4NCwgNjksIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgMTk5LCA4MCwgCi0gICAgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIDkwLCA2OSwgMTk2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIAotICAgIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIDc1LCA4MCwgCi0gICAgNjUsIDIwMywgODAsIDY1LCA3MywgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCAKLSAgICA4MiwgNjUsIDEyOCwgODAsIDY1LCA3MywgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzMsIDEyOCwgODAsIDY1LCA3MiwgNzYsIAotICAgIDY1LCA4NiwgMjAxLCA4MCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgNzEsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDcxLCAxOTcsIAotICAgIDgwLCA2NSwgNjgsIDc3LCAxOTMsIDgwLCA2NSwgNjgsIDY4LCA3MywgNzgsIDE5OSwgODAsIDY1LCA2OCwgMTkzLCA4MCwgCi0gICAgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA2NSwgNzEsIDY5LCAKLSAgICAxMjgsIDgwLCA2NSwgNjUsIDg0LCA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIAotICAgIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDY1LCA3MywgMTI4LCA4MCwgCi0gICAgNjUsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgODAsIDUwLCAxMjgsIDgwLCAKLSAgICA0OCwgNDksIDQ5LCAxMjgsIDgwLCA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAxMjgsIDgwLCA0OCwgNDgsIAotICAgIDU2LCAxMjgsIDgwLCA0OCwgNDgsIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCA0OCwgNDgsIDUzLCAxMjgsIAotICAgIDgwLCA0OCwgNDgsIDUyLCAxMjgsIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgMTI4LCA4MCwgCi0gICAgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDEyOCwgNzksIDg5LCAKLSAgICA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDg4LCA3MywgNjUsIAotICAgIDEyOCwgNzksIDg4LCA3MywgMTkzLCA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIDg4LCA2OSwgNzMsIDE5MywgNzksIAotICAgIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNzksIDc4LCAxOTksIDc5LCA4NiwgCi0gICAgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA3OSwgODYsIDY5LCAKLSAgICA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA3MywgNjgsIDEyOCwgNzksIAotICAgIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgODYsIDEyOCwgNzksIDg1LCA4NCwgCi0gICAgNzYsIDczLCA3OCwgNjksIDE5NiwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg1LCA4NCwgNjksIAotICAgIDIxMCwgNzksIDg1LCA4NCwgNjYsIDc5LCAyMTYsIDc5LCA4NSwgNzgsIDc1LCA3MywgMTkzLCA3OSwgODUsIDc4LCA2NywgCi0gICAgNjksIDEyOCwgNzksIDg1LCA3OCwgNjcsIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgODQsIDg0LCA2NSwgODYsIDE5MywgCi0gICAgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCA4NCwgNzIsIDY1LCA3NiwgMTI4LCAKLSAgICA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAxOTMsIDc5LCA4MywgNjcsIDEyOCwgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgNzksIAotICAgIDc4LCA2NSwgMjA0LCA3OSwgODIsIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCA2NSwgODQsIDE5NywgCi0gICAgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCAyMTIsIDc5LCAKLSAgICA4MiwgNzUsIDcyLCA3OSwgMjA2LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDczLCA3MSwgNzMsIAotICAgIDc4LCAxMjgsIDc5LCA4MiwgNjksIDQ1LCA1MCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgCi0gICAgNjgsIDY5LCAyMTAsIDc5LCA4MiwgNjcsIDcyLCA3MywgNjgsIDEyOCwgNzksIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDc5LCAKLSAgICA4MCwgODQsIDczLCA3OSwgMjA2LCA3OSwgODAsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIAotICAgIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgCi0gICAgODAsIDc5LCA4MywgNzMsIDc4LCAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgwLCA3MiwgNzMsIDg1LCAKLSAgICA2NywgNzIsIDg1LCA4MywgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzksIDgwLCA2OSwgODIsIAotICAgIDY1LCA4NCwgNzksIDIxMCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzMsIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA3MywgCi0gICAgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCAKLSAgICA3MywgNzgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIAotICAgIDc4LCA0NSwgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDc5LCAKLSAgICA5MCwgNjksIDEyOCwgNzksIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDc5LCA4NSwgMTI4LCA3OSwgNzksIAotICAgIDc3LCA4NSwgMTI4LCA3OSwgNzksIDY5LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNzksIDc4LCA4NSwgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA3OCwgNzUsIDY1LCAKLSAgICA4MiwgMTI4LCA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgODcsIDY1LCAyMTcsIAotICAgIDc5LCA3OCwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA3NiwgNzMsIDc4LCAKLSAgICAxOTcsIDc5LCA3OCwgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDc5LCA3OCwgNjUsIDgwLCAxMjgsIDc5LCA3NywgNzMsIAotICAgIDgzLCA4MywgNzMsIDc5LCAyMDYsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc5LCA3NywgNzMsIDY3LCA4MiwgCi0gICAgNzksIDIwNiwgNzksIDc3LCA2OSwgNzEsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA3NywgNjUsIDc2LCAKLSAgICA3OSwgNzgsIDEyOCwgNzksIDc2LCA3MywgODYsIDY5LCAxMjgsIDc5LCA3NiwgNzMsIDcxLCA3OSwgMjA2LCA3OSwgNzYsIAotICAgIDY4LCAxMjgsIDc5LCA3NSwgODQsIDIwNywgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIAotICAgIDc5LCA3NCwgNzMsIDY2LCA4NywgNjUsIDIxNywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgCi0gICAgNzksIDcyLCA3NywgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcxLCA4MiwgNjksIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCAKLSAgICA3NSwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIDIwMywgNzksIDcxLCA3MiwgNjUsIDIwNSwgNzksIDcwLCA3MCwgNzMsIAotICAgIDY3LCA2OSwgODIsIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDE5NywgCi0gICAgNzksIDcwLCA3MCwgMTI4LCA3OSwgNjksIDg5LCAxMjgsIDc5LCA2OSwgNzUsIDEyOCwgNzksIDY4LCA2OSwgNzgsIDEyOCwgCi0gICAgNzksIDY4LCAxOTYsIDc5LCA2NywgODQsIDc5LCA4MCwgODUsIDgzLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAKLSAgICAxMjgsIDc5LCA2NywgODQsIDY5LCAyMTIsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDc5LCAKLSAgICA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA4MywgODQsIDgyLCA4NSwgNjcsIDg0LCA3MywgCi0gICAgNzksIDc4LCAxMjgsIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIDY2LCA3OSwgNzAsIDczLCAKLSAgICA3NiwgNzMsIDEyOCwgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgNjcsIDIxMiwgNzksIAotICAgIDY2LCA2OSwgNzYsIDg1LCA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA2NiwgMTI4LCA3OSwgCi0gICAgNjUsIDg5LCAxMjgsIDc5LCA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA3OSwgMTkzLCA3OSwgNDgsIDUzLCA0OSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA1MywgNDgsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCAxMjgsIDc5LCA0OCwgNTIsIDU3LCAxMjgsIDc5LCA0OCwgNTIsIDU2LCAxMjgsIAotICAgIDc5LCA0OCwgNTIsIDU1LCAxMjgsIDc5LCA0OCwgNTIsIDU0LCAxMjgsIDc5LCA0OCwgNTIsIDUzLCAxMjgsIDc5LCA0OCwgCi0gICAgNTIsIDUyLCAxMjgsIDc5LCA0OCwgNTIsIDUxLCAxMjgsIDc5LCA0OCwgNTIsIDUwLCAxMjgsIDc5LCA0OCwgNTIsIDQ5LCAKLSAgICAxMjgsIDc5LCA0OCwgNTIsIDQ4LCAxMjgsIDc5LCA0OCwgNTEsIDU3LCAxMjgsIDc5LCA0OCwgNTEsIDU2LCAxMjgsIDc5LCAKLSAgICA0OCwgNTEsIDU1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjcsIDEyOCwgNzksIAotICAgIDQ4LCA1MSwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgMTI4LCA3OSwgCi0gICAgNDgsIDUxLCA1MywgMTI4LCA3OSwgNDgsIDUxLCA1MiwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzksIDQ4LCAKLSAgICA1MSwgNTEsIDEyOCwgNzksIDQ4LCA1MSwgNTAsIDEyOCwgNzksIDQ4LCA1MSwgNDksIDEyOCwgNzksIDQ4LCA1MSwgNDgsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1NywgCi0gICAgMTI4LCA3OSwgNDgsIDUwLCA1NiwgMTI4LCA3OSwgNDgsIDUwLCA1NSwgMTI4LCA3OSwgNDgsIDUwLCA1NCwgMTI4LCA3OSwgCi0gICAgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc5LCAKLSAgICA0OCwgNTAsIDUyLCAxMjgsIDc5LCA0OCwgNTAsIDUxLCAxMjgsIDc5LCA0OCwgNTAsIDUwLCAxMjgsIDc5LCA0OCwgNTAsIAotICAgIDQ5LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIDEyOCwgNzksIDQ4LCA0OSwgNTYsIDEyOCwgNzksIDQ4LCA0OSwgNTUsIDEyOCwgCi0gICAgNzksIDQ4LCA0OSwgNTQsIDEyOCwgNzksIDQ4LCA0OSwgNTMsIDEyOCwgNzksIDQ4LCA0OSwgNTIsIDEyOCwgNzksIDQ4LCAKLSAgICA0OSwgNTEsIDEyOCwgNzksIDQ4LCA0OSwgNTAsIDEyOCwgNzksIDQ4LCA0OSwgNDksIDEyOCwgNzksIDQ4LCA0OSwgNDgsIAotICAgIDY3LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA0OSwgCi0gICAgNDgsIDEyOCwgNzksIDQ4LCA0OCwgNTcsIDEyOCwgNzksIDQ4LCA0OCwgNTYsIDEyOCwgNzksIDQ4LCA0OCwgNTUsIDEyOCwgCi0gICAgNzksIDQ4LCA0OCwgNTQsIDcwLCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjgsIAotICAgIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDc5LCA0OCwgNDgsIDUyLCAxMjgsIDc5LCA0OCwgNDgsIDUxLCAxMjgsIDc5LCA0OCwgNDgsIDUwLCAxMjgsIDc5LCAKLSAgICA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNDUsIAotICAgIDc5LCA0NSwgNzMsIDEyOCwgNzksIDQ1LCA2OSwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDEyOCwgNzgsIDkwLCA4OSwgODAsIDEyOCwgCi0gICAgNzgsIDkwLCA4OSwgMTI4LCA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDkwLCAKLSAgICA4NSwgODIsIDEyOCwgNzgsIDkwLCA4NSwgODEsIDEyOCwgNzgsIDkwLCA4NSwgODAsIDEyOCwgNzgsIDkwLCA4NSwgNzksIAotICAgIDg4LCAxMjgsIDc4LCA5MCwgODUsIDc5LCAxMjgsIDc4LCA5MCwgODUsIDIwNiwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgOTAsIAotICAgIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDczLCA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDc4LCA5MCwgNzMsIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIDkwLCAKLSAgICA2OSwgODUsIDc3LCAxMjgsIDc4LCA5MCwgNjksIDEyOCwgNzgsIDkwLCA2NSwgODgsIDEyOCwgNzgsIDkwLCA2NSwgODQsIAotICAgIDEyOCwgNzgsIDkwLCA2NSwgODEsIDEyOCwgNzgsIDkwLCA2NSwgODAsIDEyOCwgNzgsIDkwLCA2NSwgMTI4LCA3OCwgOTAsIAotICAgIDE5MywgNzgsIDg5LCA4NywgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgODUsIDEyOCwgNzgsIAotICAgIDg5LCA4NSwgODQsIDEyOCwgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA2OSwgMTI4LCA3OCwgODksIDg1LCAKLSAgICAxMjgsIDc4LCA4OSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgNzksIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCAKLSAgICA4OSwgNzksIDc5LCAxMjgsIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIAotICAgIDEyOCwgNzgsIDg5LCA3MywgODgsIDEyOCwgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjEyLCA3OCwgODksIAotICAgIDczLCAyMTEsIDc4LCA4OSwgNzMsIDIxMCwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCA2OCwgCi0gICAgNzksIDEyOCwgNzgsIDg5LCA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCAKLSAgICA4NCwgMTI4LCA3OCwgODksIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCAKLSAgICA3OCwgODksIDIwMSwgNzgsIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgMjEyLCAKLSAgICA3OCwgODksIDY5LCA3MiwgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIAotICAgIDEyOCwgNzgsIDg5LCAxOTYsIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIAotICAgIDczLCAxMjgsIDc4LCA4OSwgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgCi0gICAgNjUsIDY1LCAxMjgsIDc4LCA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgCi0gICAgNzgsIDg3LCA3MywgMTI4LCA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgCi0gICAgNzgsIDg3LCAxMjgsIDc4LCA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgCi0gICAgODUsIDEyOCwgNzgsIDg1LCA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgCi0gICAgNzgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAKLSAgICAxMjgsIDc4LCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCAKLSAgICA4NSwgNzgsIDg1LCAyMTgsIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIAotICAgIDg1LCA3OCwgNjUsIDg2LCA3MywgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgCi0gICAgODIsIDIwNywgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIAotICAgIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgCi0gICAgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NiwgMTI4LCA3OCwgCi0gICAgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCAKLSAgICA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAotICAgIDUwLCA1MCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgCi0gICAgODUsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgNjUsIAotICAgIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCAKLSAgICA0OSwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzgsIAotICAgIDg1LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCAKLSAgICAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIAotICAgIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgCi0gICAgNDgsIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDg1LCAKLSAgICA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA4NCwgODUsIDg1LCAxMjgsIDc4LCA4NCwgODUsIDc3LCAxMjgsIDc4LCA4NCwgMjEzLCAKLSAgICA3OCwgODQsIDc5LCA4MSwgODAsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDczLCA2OSwgMTk3LCA3OCwgODQsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA2NiwgNjUsIDEyOCwgNzgsIDg0LCA2OSwgODUsIDc3LCAxMjgsIDc4LCA4NCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgCi0gICAgNjksIDY5LCAxMjgsIDc4LCA4NCwgNjUsIDgwLCAxMjgsIDc4LCA4NCwgNjUsIDIwOCwgNzgsIDg0LCA2NSwgNjUsIDEyOCwgCi0gICAgNzgsIDgzLCA4NSwgNzksIDIxMiwgNzgsIDgzLCA4NSwgNzgsIDEyOCwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzgsIDgzLCAKLSAgICA3OSwgNzcsIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4NCwgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDgwLCAxMjgsIAotICAgIDc4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA4NSwgODQsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDIxMiwgCi0gICAgNzgsIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNzMsIDY5LCAKLSAgICA2OSwgMTI4LCA3OCwgODMsIDcyLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjUsIDgxLCAxMjgsIDc4LCA4MywgNzIsIAotICAgIDY1LCAxMjgsIDc4LCA4MywgNjksIDg1LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA4MywgNjksIDc4LCAxMjgsIDc4LCA4MywgCi0gICAgNjUsIDEyOCwgNzgsIDgyLCA4OSwgODgsIDEyOCwgNzgsIDgyLCA4OSwgODQsIDEyOCwgNzgsIDgyLCA4OSwgODIsIDg4LCAKLSAgICAxMjgsIDc4LCA4MiwgODksIDgyLCAxMjgsIDc4LCA4MiwgODksIDgwLCAxMjgsIDc4LCA4MiwgODksIDEyOCwgNzgsIDgyLCAKLSAgICA4NSwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODQsIDEyOCwgNzgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4MiwgODUsIAotICAgIDgyLCAxMjgsIDc4LCA4MiwgODUsIDgwLCAxMjgsIDc4LCA4MiwgODUsIDEyOCwgNzgsIDgyLCA3OSwgODgsIDEyOCwgNzgsIAotICAgIDgyLCA3OSwgODAsIDEyOCwgNzgsIDgyLCA3OSwgMTI4LCA3OCwgODIsIDY5LCA4OCwgMTI4LCA3OCwgODIsIDY5LCA4NCwgCi0gICAgMTI4LCA3OCwgODIsIDY5LCA4MCwgMTI4LCA3OCwgODIsIDY5LCAxMjgsIDc4LCA4MiwgNjUsIDg4LCAxMjgsIDc4LCA4MiwgCi0gICAgNjUsIDg0LCAxMjgsIDc4LCA4MiwgNjUsIDgwLCAxMjgsIDc4LCA4MiwgNjUsIDEyOCwgNzgsIDc5LCA4OSwgMTI4LCA3OCwgCi0gICAgNzksIDg4LCAxMjgsIDc4LCA3OSwgODYsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDg0LCA4NCwgNzksIAotICAgIDEyOCwgNzgsIDc5LCA4NCwgNjksIDgzLCAxMjgsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA3OCwgCi0gICAgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgMTk2LCA3OCwgNzksIDg0LCA2OSwgNjYsIDc5LCA3OSwgNzUsIDEyOCwgNzgsIDc5LCAKLSAgICA4NCwgNjksIDY2LCA3OSwgNzksIDIwMywgNzgsIDc5LCA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIAotICAgIDg0LCA2NywgNzIsIDY5LCAxOTYsIDc4LCA3OSwgODQsIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgCi0gICAgMjEyLCA3OCwgNzksIDgzLCA2OSwgMTI4LCA3OCwgNzksIDgyLCA4NCwgNzIsIDg3LCA2OSwgODMsIDIxMiwgNzgsIDc5LCAKLSAgICA4MiwgODQsIDcyLCA2OSwgODIsIDIwNiwgNzgsIDc5LCA4MiwgODQsIDIwMCwgNzgsIDc5LCA4MiwgNzcsIDY1LCAyMDQsIAotICAgIDc4LCA3OSwgMjEwLCA3OCwgNzksIDgwLCAxMjgsIDc4LCA3OSwgNzksIDc4LCA4NSwgMTI4LCA3OCwgNzksIDc5LCAxMjgsIAotICAgIDc4LCA3OSwgNzgsIDcwLCA3OSwgODIsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA4MCwgNzksIDg0LCAKLSAgICA2NSwgNjYsIDc2LCAxOTcsIDc4LCA3OSwgNzgsIDQ1LCA3NCwgNzksIDczLCA3OCwgNjksIDgyLCAxMjgsIDc4LCA3OSwgNzgsIAotICAgIDQ1LCA2NiwgODIsIDY5LCA2NSwgNzUsIDczLCA3OCwgMTk5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA3OSwgCi0gICAgNzUsIDcyLCA4NSwgNzUsIDEyOCwgNzgsIDc5LCA2OCwgNjksIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgNzksIDQ1LCAKLSAgICA2NiwgODIsIDY5LCA2NSwgMjAzLCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzksIAotICAgIDc5LCAxMjgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3MywgNzMsIDEyOCwgCi0gICAgNzgsIDc4LCA3OCwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjksIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY5LCAxMjgsIDc4LCAKLSAgICA3OCwgNzgsIDY1LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA3OCwgNzgsIDEyOCwgNzgsIDc4LCA3MiwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgCi0gICAgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDczLCA3MywgMTI4LCA3OCwgNzgsIDcxLCAKLSAgICA3MywgMTI4LCA3OCwgNzgsIDcxLCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCAKLSAgICA3OCwgNzgsIDY2LCA4MywgODAsIDEyOCwgNzgsIDc3LCAxMjgsIDc4LCA3NiwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgCi0gICAgNzgsIDc2LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTMsIAotICAgIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgCi0gICAgNTAsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCAKLSAgICA0OCwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDEyOCwgCi0gICAgNzgsIDc2LCA0OCwgNDgsIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTAsIAotICAgIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA3NiwgMTI4LCA3OCwgNzUsIDc5LCA3NywgMTI4LCA3OCwgNzUsIAotICAgIDIwNywgNzgsIDc1LCA3MywgNzgsIDY4LCA3MywgMTI4LCA3OCwgNzUsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgCi0gICAgNzQsIDg5LCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4NCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDc0LCAKLSAgICA4OSwgODIsIDEyOCwgNzgsIDc0LCA4OSwgODAsIDEyOCwgNzgsIDc0LCA4OSwgMTI4LCA3OCwgNzQsIDg1LCA4OCwgMTI4LCAKLSAgICA3OCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDc0LCA4NSwgODIsIDEyOCwgNzgsIDc0LCA4NSwgODEsIDY1LCAxMjgsIAotICAgIDc4LCA3NCwgODUsIDgwLCAxMjgsIDc4LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgMTI4LCA3OCwgCi0gICAgNzQsIDg1LCA2OSwgODEsIDEyOCwgNzgsIDc0LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODUsIDEyOCwgNzgsIDc0LCAKLSAgICA3OSwgODgsIDEyOCwgNzgsIDc0LCA3OSwgODQsIDEyOCwgNzgsIDc0LCA3OSwgODAsIDEyOCwgNzgsIDc0LCA3OSwgNzksIAotICAgIDEyOCwgNzgsIDc0LCA3OSwgMTI4LCA3OCwgNzQsIDczLCA4OCwgMTI4LCA3OCwgNzQsIDczLCA4NCwgMTI4LCA3OCwgNzQsIAotICAgIDczLCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc4LCA3NCwgCi0gICAgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgNjksIDEyOCwgNzgsIDc0LCA3MywgNjksIDEyOCwgNzgsIDc0LCAKLSAgICA3MywgMTI4LCA3OCwgNzQsIDIwMSwgNzgsIDc0LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA4NCwgMTI4LCAKLSAgICA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3OCwgNjUsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIAotICAgIDc0LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCAxOTcsIDc4LCA3NCwgCi0gICAgNjksIDEyOCwgNzgsIDc0LCA2NSwgODEsIDEyOCwgNzgsIDc0LCA2NSwgODAsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAKLSAgICA3NiwgNzMsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3NCwgNjUsIDY1LCAxMjgsIDc4LCA3MywgODgsIAotICAgIDEyOCwgNzgsIDczLCA4NCwgODIsIDY5LCAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCA3OCwgNzMsIDgyLCA4NSwgCi0gICAgNzEsIDg1LCAxMjgsIDc4LCA3MywgODAsIDEyOCwgNzgsIDczLCA3OCwgODQsIDcyLCAxMjgsIDc4LCA3MywgNzgsIDY5LCAKLSAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCAyMTcsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgMjA2LCA3OCwgNzMsIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCAKLSAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgMTk3LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDUwLCAxMjgsIDc4LCA3MywgNzgsIAotICAgIDY4LCA2NSwgMTc4LCA3OCwgNzMsIDc3LCAxMjgsIDc4LCA3MywgMjA1LCA3OCwgNzMsIDc1LCA3MiwgNjUsIDcyLCA3MywgCi0gICAgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDEyOCwgNzgsIDczLCAKLSAgICA3MiwgODMsIDcyLCA4NiwgNjUsIDgzLCA2NSwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA3NywgNzMsIDc4LCAxMjgsIAotICAgIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDY5LCA4MywgNzIsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc4LCA3MywgCi0gICAgNzEsIDcyLCAyMTIsIDc4LCA3MywgNzEsIDcxLCA2NSwgNzIsIDczLCA4NCwgNjUsIDEyOCwgNzgsIDczLCA2OSwgODgsIAotICAgIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgCi0gICAgNzgsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzgsIDczLCA2OSwgCi0gICAgODUsIDc4LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA2NSwgNzgsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIAotICAgIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCAKLSAgICA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgMjA2LCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCAxMjgsIDc4LCAKLSAgICA3MywgNjYsIDEyOCwgNzgsIDczLCA2NSwgMTI4LCA3OCwgNzMsIDUwLCAxMjgsIDc4LCA3MiwgODUsIDY5LCAxMjgsIDc4LCAKLSAgICA3MiwgNzQsIDY1LCAxMjgsIDc4LCA3MiwgMTI4LCA3OCwgNzEsIDg5LCA2OSwgMTI4LCA3OCwgNzEsIDg2LCA2OSwgMTI4LCAKLSAgICA3OCwgNzEsIDg1LCA4NSwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg0LCAxMjgsIAotICAgIDc4LCA3MSwgODUsIDc5LCAxMjgsIDc4LCA3MSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNjUsIDY5LCAKLSAgICAxMjgsIDc4LCA3MSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgNzksIDg1LCAxMjgsIDc4LCA3MSwgNzksIDIxMywgNzgsIDcxLCAKLSAgICA3OSwgODQsIDEyOCwgNzgsIDcxLCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3OSwgODAsIDEyOCwgNzgsIDcxLCA3OSwgNzgsIAotICAgIDEyOCwgNzgsIDcxLCA3OSwgNzcsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDcyLCAxMjgsIDc4LCA3MSwgNzksIDY5LCAyMDAsIAotICAgIDc4LCA3MSwgMjA3LCA3OCwgNzEsIDc1LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDg3LCA2NSwgNjksIDc4LCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAotICAgIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA2OSwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAKLSAgICAxOTcsIDc4LCA3MSwgNzUsIDczLCA3OCwgNjgsIDIwMSwgNzgsIDcxLCA3NSwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIAotICAgIDc1LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODIsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA4MSwgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgxLCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDc1LCA2NSwgNjUsIDc3LCA3MywgMTI4LCA3OCwgNzEsIAotICAgIDc1LCA2NSwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MSwgCi0gICAgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzIsIDY1LCAxMjgsIDc4LCA3MSwgNzEsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDc4LCAKLSAgICA3MSwgNzEsIDg1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIAotICAgIDgxLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgMjA5LCA3OCwgNzEsIDcxLCA4NSwgNzksIDc4LCAxMjgsIDc4LCA3MSwgCi0gICAgNzEsIDg1LCA3OSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2OSwgNjksIDg0LCAKLSAgICAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2NSwgNjksIDgzLCA3MiwgNjUsIDE5NywgNzgsIDcxLCA3MSwgODUsIDY1LCA2OSwgCi0gICAgMjA2LCA3OCwgNzEsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzksIDEyOCwgCi0gICAgNzgsIDcxLCA3MSwgNzMsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCAKLSAgICA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDIxMywgNzgsIAotICAgIDcxLCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCA2OSwgCi0gICAgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCAKLSAgICA4MCwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgCi0gICAgMTI4LCA3OCwgNzEsIDcxLCAxMjgsIDc4LCA3MSwgNjksIDg4LCAxMjgsIDc4LCA3MSwgNjksIDg1LCA4MiwgNjksIDg1LCAKLSAgICA4NCwgMTI4LCA3OCwgNzEsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDY5LCA2OSwgMTI4LCAKLSAgICA3OCwgNzEsIDY5LCA2NSwgNjgsIDY1LCA3NiwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCA3OCwgNzEsIDY1LCA4NSwgCi0gICAgMTI4LCA3OCwgNzEsIDY1LCA4NCwgMTI4LCA3OCwgNzEsIDY1LCAyMTEsIDc4LCA3MSwgNjUsIDgxLCAxMjgsIDc4LCA3MSwgCi0gICAgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIDc4LCA3MSwgODUsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDEyOCwgNzgsIDcxLCAKLSAgICA2NSwgNzMsIDEyOCwgNzgsIDcxLCA2NSwgNzIsIDEyOCwgNzgsIDcxLCA2NSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgMTkzLCAKLSAgICA3OCwgNzAsIDEyOCwgNzgsIDY5LCA4OCwgMjEyLCA3OCwgNjksIDg4LCAxMjgsIDc4LCA2OSwgODcsIDgzLCA4MCwgNjUsIAotICAgIDgwLCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NywgNzYsIDczLCA3OCwgNjksIDEyOCwgNzgsIDY5LCA4NywgMTI4LCA3OCwgCi0gICAgNjksIDg1LCA4NCwgODIsIDY1LCAyMDQsIDc4LCA2OSwgODUsIDg0LCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCAKLSAgICA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgODQsIDY5LCAxOTYsIDc4LCA2OSwgODEsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODAsIDEyOCwgNzgsIDY5LCA3OSwgMTI4LCA3OCwgCi0gICAgNjksIDIwNywgNzgsIDY5LCA3OCwgNjUsIDc4LCA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzYsIDEyOCwgCi0gICAgNzgsIDY5LCA3MywgODQsIDcyLCA2OSwgMjEwLCA3OCwgNjksIDcxLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjksIDcxLCAKLSAgICA2NSwgODQsIDY5LCAxOTYsIDc4LCA2OSwgNjcsIDc1LCA4NCwgNzMsIDY5LCAxMjgsIDc4LCA2OSwgNjYsIDY5LCA3OCwgODMsIAotICAgIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3OCwgCi0gICAgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDEyOCwgNzgsIDY4LCA4NSwgODAsIDEyOCwgNzgsIDY4LCAKLSAgICA4NSwgNzgsIDEyOCwgNzgsIDY4LCAyMTMsIDc4LCA2OCwgNzksIDg4LCAxMjgsIDc4LCA2OCwgNzksIDg0LCAxMjgsIDc4LCAKLSAgICA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIDc5LCAxMjgsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc4LCA2OCwgNzksIAotICAgIDc3LCA2NiwgODUsIDEyOCwgNzgsIDY4LCA3OSwgNzYsIDE5NywgNzgsIDY4LCA3MywgODgsIDEyOCwgNzgsIDY4LCA3MywgCi0gICAgODQsIDEyOCwgNzgsIDY4LCA3MywgODEsIDEyOCwgNzgsIDY4LCA3MywgODAsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAKLSAgICAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCA2OCwgNzMsIDY4LCA2NSwgMTI4LCA3OCwgNjgsIDczLCA2NSwgODEsIAotICAgIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA4NCwgCi0gICAgMTI4LCA3OCwgNjgsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDgwLCAxMjgsIDc4LCAKLSAgICA2OCwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDEyOCwgNzgsIDY4LCA2NSwgODgsIDEyOCwgNzgsIDY4LCA2NSwgODQsIAotICAgIDEyOCwgNzgsIDY4LCA2NSwgODAsIDEyOCwgNzgsIDY4LCA2NSwgNzcsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDc4LCA3MSwgCi0gICAgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA2NSwgMTI4LCA3OCwgNjgsIDY1LCAxOTMsIDc4LCAKLSAgICA2NiwgODksIDg4LCAxMjgsIDc4LCA2NiwgODksIDg0LCAxMjgsIDc4LCA2NiwgODksIDgyLCA4OCwgMTI4LCA3OCwgNjYsIAotICAgIDg5LCA4MiwgMTI4LCA3OCwgNjYsIDg5LCA4MCwgMTI4LCA3OCwgNjYsIDg5LCAxMjgsIDc4LCA2NiwgODUsIDg4LCAxMjgsIAotICAgIDc4LCA2NiwgODUsIDg0LCAxMjgsIDc4LCA2NiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgMTI4LCA3OCwgCi0gICAgNjYsIDg1LCA4MCwgMTI4LCA3OCwgNjYsIDg1LCAxMjgsIDc4LCA2NiwgNzksIDg4LCAxMjgsIDc4LCA2NiwgNzksIDg0LCAKLSAgICAxMjgsIDc4LCA2NiwgNzksIDgwLCAxMjgsIDc4LCA2NiwgNzksIDEyOCwgNzgsIDY2LCA3MywgODgsIDEyOCwgNzgsIDY2LCAKLSAgICA3MywgODQsIDEyOCwgNzgsIDY2LCA3MywgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2NiwgNzMsIAotICAgIDY5LCA4MCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgMTI4LCA3OCwgNjYsIDczLCAxMjgsIDc4LCA2NiwgNzIsIDEyOCwgNzgsIAotICAgIDY2LCA2NSwgODgsIDEyOCwgNzgsIDY2LCA2NSwgODQsIDEyOCwgNzgsIDY2LCA2NSwgODAsIDEyOCwgNzgsIDY2LCA2NSwgCi0gICAgMTI4LCA3OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDg5LCAxMjgsIDc4LCA2NSwgODgsIDczLCAKLSAgICA2NSwgMjA2LCA3OCwgNjUsIDg4LCAxMjgsIDc4LCA2NSwgODUsIDg0LCA3MiwgODMsIDEyOCwgNzgsIDY1LCA4NSwgNjgsIAotICAgIDczLCAyMTgsIDc4LCA2NSwgODQsIDg1LCA4MiwgNjUsIDIwNCwgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgCi0gICAgNzgsIDY1LCA4MywgNzUsIDY1LCA4MCwgMjAxLCA3OCwgNjUsIDgzLCA3MiwgNzMsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCAKLSAgICA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgCi0gICAgNzksIDIwNiwgNzgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc4LCA2NSwgODIsIDEyOCwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgCi0gICAgNjUsIDc5LCAyMTEsIDc4LCA2NSwgNzgsIDgzLCA2NSwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCAKLSAgICA3OCwgODQsIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIAotICAgIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIAotICAgIDY1LCA3NSwgMTI4LCA3OCwgNjUsIDczLCA4MiwgMTkzLCA3OCwgNjUsIDczLCAyMDQsIDc4LCA2NSwgNzEsIDgyLCAyMDEsIAotICAgIDc4LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDcxLCA2NSwgMTI4LCA3OCwgNjUsIDcxLCAxOTMsIDc4LCA2NSwgCi0gICAgNzEsIDEyOCwgNzgsIDY1LCAxOTksIDc4LCA2NSwgNjksIDEyOCwgNzgsIDY1LCA2NiwgNzYsIDY1LCAxMjgsIDc4LCA2NSwgCi0gICAgNjUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDc1LCA4MywgNzMsIDc1LCA4OSwgNjUsIAotICAgIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNjUsIDE5MywgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNjUsIAotICAgIDQ1LCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA0OSwgMTI4LCA3OCwgNDgsIDUyLCA0OCwgCi0gICAgMTI4LCA3OCwgNDgsIDUxLCA1NywgMTI4LCA3OCwgNDgsIDUxLCA1NiwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MSwgNTUsIDEyOCwgNzgsIDQ4LCA1MSwgNTQsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDY1LCAxMjgsIDc4LCAKLSAgICA0OCwgNTEsIDUzLCAxMjgsIDc4LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MiwgMTI4LCA3OCwgNDgsIAotICAgIDUxLCA1MSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDEyOCwgNzgsIDQ4LCA1MSwgNTAsIDEyOCwgNzgsIDQ4LCA1MSwgCi0gICAgNDksIDEyOCwgNzgsIDQ4LCA1MSwgNDgsIDEyOCwgNzgsIDQ4LCA1MCwgNTcsIDEyOCwgNzgsIDQ4LCA1MCwgNTYsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MCwgNTUsIDEyOCwgNzgsIDQ4LCA1MCwgNTQsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc4LCAKLSAgICA0OCwgNTAsIDUzLCAxMjgsIDc4LCA0OCwgNTAsIDUyLCAxMjgsIDc4LCA0OCwgNTAsIDUxLCAxMjgsIDc4LCA0OCwgNTAsIAotICAgIDUwLCAxMjgsIDc4LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA0OCwgNDksIDU3LCAxMjgsIAotICAgIDc4LCA0OCwgNDksIDU2LCA2NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgNjUsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDEyOCwgCi0gICAgNzgsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDQ4LCAKLSAgICA0OSwgNTIsIDEyOCwgNzgsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDQ4LCA0OSwgNDksIAotICAgIDEyOCwgNzgsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIAotICAgIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDQ4LCA0OCwgCi0gICAgNTIsIDEyOCwgNzgsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDQ4LCA0OCwgNDksIDEyOCwgCi0gICAgNzgsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc4LCA0NSwgNjUsIDgyLCAyMTcsIDc3LCA4OSwgODgsIDEyOCwgNzcsIDg5LCAKLSAgICA4NCwgMTI4LCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCA3NywgODksIDgwLCAxMjgsIDc3LCA4OSwgNjUsIAotICAgIDEyOCwgNzcsIDg5LCAxOTMsIDc3LCA4OSwgMTI4LCA3NywgMjE3LCA3NywgODcsIDc5LCA3OSwgMTI4LCA3NywgODcsIDc5LCAKLSAgICAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCA4NywgNzMsIDEyOCwgNzcsIDg3LCA2OSwgNjksIDEyOCwgNzcsIDg3LCAKLSAgICA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3NywgODcsIDY1LCAxMjgsIDc3LCA4NywgMTI4LCA3NywgMjE1LCA3NywgCi0gICAgODYsIDgzLCAxMjgsIDc3LCA4NiwgNzksIDgwLCAxMjgsIDc3LCA4NiwgNzMsIDEyOCwgNzcsIDg2LCA2OSwgODUsIDY1LCAKLSAgICA2OSwgNzgsIDcxLCA2NSwgNzcsIDEyOCwgNzcsIDg2LCAxMjgsIDc3LCAyMTQsIDc3LCA4NSwgODgsIDEyOCwgNzcsIDg1LCAKLSAgICA4NSwgODMsIDczLCA3NSwgNjUsIDg0LCA3OSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgODUsIDgyLCA2OCwgNzIsIDY1LCA3NCwgCi0gICAgMTkzLCA3NywgODUsIDg1LCAxMjgsIDc3LCA4NSwgODQsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc3LCA4NSwgCi0gICAgODMsIDczLCAxOTUsIDc3LCA4NSwgODMsIDcyLCA4MiwgNzksIDc5LCA3NywgMTI4LCA3NywgODUsIDgzLCA3MiwgNTEsIAotICAgIDEyOCwgNzcsIDg1LCA4MywgNzIsIDE3OSwgNzcsIDg1LCA4MywgNzIsIDEyOCwgNzcsIDg1LCA4MywgMjAwLCA3NywgODUsIAotICAgIDgyLCA4OCwgMTI4LCA3NywgODUsIDgyLCA3MSwgODUsIDUwLCAxMjgsIDc3LCA4NSwgODIsIDY5LCAxMjgsIDc3LCA4NSwgCi0gICAgODIsIDY4LCA2NSwgMTI4LCA3NywgODUsIDgyLCA2OCwgMTkzLCA3NywgODUsIDgyLCAxMjgsIDc3LCA4NSwgODEsIDY4LCAKLSAgICA2NSwgNzcsIDEyOCwgNzcsIDg1LCA4MCwgMTI4LCA3NywgODUsIDc5LCA4OCwgMTI4LCA3NywgODUsIDc5LCA4NCwgMTI4LCAKLSAgICA3NywgODUsIDc5LCA4MCwgMTI4LCA3NywgODUsIDc5LCA3NywgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNzksIDEyOCwgNzcsIAotICAgIDg1LCA3OCwgODMsIDg1LCA2NiwgMTI4LCA3NywgODUsIDc4LCA2NSwgNzIsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgCi0gICAgNjksIDg0LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIDY5LCAyMTIsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCAKLSAgICA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgCi0gICAgODQsIDczLCA3OSwgMjA2LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgMTk3LCA3NywgODUsIDc2LCA4NCwgNzMsIDc5LCAKLSAgICA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgODUsIDc2LCA4NCwgNzMsIDc3LCA2NSwgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIAotICAgIDIwMSwgNzcsIDg1LCA3NSwgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3NywgODUsIDczLCA3OCwgMTI4LCA3NywgCi0gICAgODUsIDcxLCA4MywgMTI4LCA3NywgODUsIDcxLCAxMjgsIDc3LCA4NSwgMTk5LCA3NywgODUsIDY5LCAxMjgsIDc3LCA4NSwgCi0gICAgNjcsIDcyLCAxMjgsIDc3LCA4NSwgNjcsIDIwMCwgNzcsIDg1LCA2NywgNjUsIDY1LCA2OCwgMTI4LCA3NywgODUsIDY1LCAKLSAgICA3OCwgMTI4LCA3NywgODUsIDY1LCA2OSwgMTI4LCA3NywgODUsIDQ1LCA3MSwgNjUsIDY1LCA3MiwgNzYsIDY1LCAxOTMsIAotICAgIDc3LCAyMTMsIDc3LCA4MywgMTI4LCA3NywgODAsIDY1LCAxMjgsIDc3LCA3OSwgODksIDY1LCA3MywgMTI4LCA3NywgNzksIAotICAgIDg4LCAxMjgsIDc3LCA3OSwgODYsIDczLCAxOTcsIDc3LCA3OSwgODYsIDY5LCAxOTYsIDc3LCA3OSwgODUsIDg0LCA3MiwgCi0gICAgMTI4LCA3NywgNzksIDg1LCA4NCwgMjAwLCA3NywgNzksIDg1LCA4MywgNjksIDEyOCwgNzcsIDc5LCA4NSwgODMsIDE5NywgCi0gICAgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCA4MywgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIAotICAgIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNzcsIDc5LCA4NSwgNzgsIDIxMiwgNzcsIDc5LCA4NSwgCi0gICAgNzgsIDY4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCAxOTYsIDc3LCA3OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzcsIDc5LCAKLSAgICA4NCwgMTI4LCA3NywgNzksIDgyLCA4NCwgODUsIDg1LCA3NywgMTI4LCA3NywgNzksIDgyLCA4NCwgNjUsIDgyLCAxMjgsIAotICAgIDc3LCA3OSwgODIsIDgwLCA3MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNzcsIDc5LCA4MiwgNzgsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzcsIDc5LCA4MCwgMTI4LCA3NywgNzksIDc5LCA4MywgNjksIDQ1LCA2NywgODIsIDY5LCAxOTcsIAotICAgIDc3LCA3OSwgNzksIDc4LCAxMjgsIDc3LCA3OSwgNzksIDIwNiwgNzcsIDc5LCA3OSwgNzcsIDgwLCA4NSwgODEsIDEyOCwgCi0gICAgNzcsIDc5LCA3OSwgNzcsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDc5LCA3OSwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzMsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgNzgsIAotICAgIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA4MywgODQsIDY1LCA2NiwgNzYsIDE5NywgNzcsIDc5LCA3OCwgCi0gICAgNzksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA3NywgNzksIDc4LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNzcsIAotICAgIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzcsIDc5LCA3OCwgNzksIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgCi0gICAgNzcsIDc5LCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA3OSwgNzgsIDc1LCA2OSwgODksIDEyOCwgNzcsIDc5LCAKLSAgICA3OCwgNzUsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDczLCAxMjgsIDc3LCA3OSwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIAotICAgIDgxLCAxMjgsIDc3LCA3OSwgNzgsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIAotICAgIDEyOCwgNzcsIDc5LCA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgNzcsIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgCi0gICAgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgODMsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAKLSAgICAxMjgsIDc3LCA3OSwgNjgsIDY5LCAxMjgsIDc3LCA3OSwgNjYsIDczLCA3NiwgMTk3LCA3NywgNzksIDY1LCAxMjgsIDc3LCAKLSAgICAyMDcsIDc3LCA3OCwgODksIDY1LCAyMDUsIDc3LCA3OCwgNjUsIDgzLCAxMjgsIDc3LCA3NywgODMsIDgwLCAxMjgsIDc3LCAKLSAgICA3NywgMTI4LCA3NywgMjA1LCA3NywgNzYsIDY1LCAxMjgsIDc3LCA3NiwgMTI4LCA3NywgNzUsIDgwLCA2NSwgODIsIDY1LCAKLSAgICAyMDksIDc3LCA3MywgODgsIDEyOCwgNzcsIDczLCA4NCwgMTI4LCA3NywgNzMsIDgzLCA4MiwgNjUsIDEyOCwgNzcsIDczLCAKLSAgICA4MiwgNzMsIDY2LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgMTI4LCA3NywgNzMsIDgyLCA2OSwgNjgsIAotICAgIDEyOCwgNzcsIDczLCA4MCwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCA3NywgNzMsIDc4LCA4NSwgODMsIDQ1LCA3OSwgCi0gICAgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3NywgNzMsIDc4LCA3MywgODMsIDg0LCAKLSAgICA2OSwgODIsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNzMsIDc4LCA3MywgNjgsIDczLCA4MywgNjcsIAotICAgIDEyOCwgNzcsIDczLCA3OCwgNzMsIDY2LCA4NSwgODMsIDEyOCwgNzcsIDczLCA3NywgNjksIDEyOCwgNzcsIDczLCA3NywgCi0gICAgMTI4LCA3NywgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgNzMsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDc3LCAKLSAgICA3MywgNzYsIDc2LCAxOTcsIDc3LCA3MywgNzYsIDIwNCwgNzcsIDczLCA3NiwgNzUsIDIxNywgNzcsIDczLCA3NiwgMTI4LCAKLSAgICA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3NywgNzMsIDc1LCA4MiwgNzksIDIwNiwgNzcsIDczLCA3NSwgODIsIAotICAgIDczLCAxMjgsIDc3LCA3MywgNzMsIDc4LCAxMjgsIDc3LCA3MywgNzMsIDEyOCwgNzcsIDczLCAxOTksIDc3LCA3MywgNjksIAotICAgIDg4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDczLCA2OSwgCi0gICAgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIAotICAgIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIAotICAgIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzcsIDczLCA2OSwgCi0gICAgODUsIDIwNSwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzcsIDczLCA2OSwgNjksIDEyOCwgNzcsIDczLCA2OSwgMTI4LCA3NywgCi0gICAgNzMsIDY4LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA3MywgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCAKLSAgICA3NywgNzMsIDY4LCA2OCwgNzYsIDE5NywgNzcsIDczLCAxOTYsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDY3LCA3OSwgODAsIAotICAgIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCAKLSAgICAyMDcsIDc3LCA3MywgNjcsIDIxMCwgNzcsIDcyLCA5MCwgMTI4LCA3NywgNzIsIDY1LCAxMjgsIDc3LCA3MiwgMTI4LCA3NywgCi0gICAgNzEsIDg1LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4NCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDcxLCAKLSAgICA4NSwgODIsIDEyOCwgNzcsIDcxLCA4NSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgMTI4LCA3NywgNzEsIDg1LCAxMjgsIDc3LCA3MSwgNzksIDg4LCAxMjgsIAotICAgIDc3LCA3MSwgNzksIDg0LCAxMjgsIDc3LCA3MSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgNzksIDEyOCwgNzcsIDcxLCAyMDcsIAotICAgIDc3LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDczLCA2OSwgMTI4LCA3NywgNzEsIDY5LCA4OCwgMTI4LCA3NywgCi0gICAgNzEsIDY5LCA4MCwgMTI4LCA3NywgNzEsIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDg1LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCAKLSAgICA3OSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgNzAsIDg1LCA3NywgMTI4LCA3NywgNzEsIDY2LCA3OSwgMTI4LCA3NywgNzEsIAotICAgIDY2LCA3MywgMTI4LCA3NywgNzEsIDY2LCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA3OCwgMTI4LCA3NywgCi0gICAgNzEsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgODEsIAotICAgIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgMTI4LCA3NywgNzEsIDY1LCA4OCwgMTI4LCA3NywgNzEsIDY1LCA4NCwgCi0gICAgMTI4LCA3NywgNzEsIDY1LCA4MCwgMTI4LCA3NywgNzEsIDY1LCAxMjgsIDc3LCA3MSwgMTI4LCA3NywgNzAsIDc5LCA3OCwgCi0gICAgMTI4LCA3NywgNzAsIDc5LCAyMDYsIDc3LCA3MCwgNzksIDEyOCwgNzcsIDcwLCA3MywgODksIDY1LCA4MSwgMTI4LCA3NywgCi0gICAgNzAsIDczLCA2OSwgNjksIDEyOCwgNzcsIDcwLCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3MCwgNjksIDg1LCA4MSwgMTI4LCAKLSAgICA3NywgNzAsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA3MCwgNjUsIDY1LCAxMjgsIDc3LCA2OSwgOTAsIDkwLCA3OSwgCi0gICAgMTI4LCA3NywgNjksIDg4LCAxMjgsIDc3LCA2OSwgODUsIDIxMiwgNzcsIDY5LCA4NSwgODEsIDEyOCwgNzcsIDY5LCA4NSwgCi0gICAgNzgsIDc0LCA3OSwgNzcsIDc4LCA2OCwgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCA3OCwgMTI4LCA3NywgNjksIDg0LCAKLSAgICA4MiwgNzksIDEyOCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NSwgCi0gICAgMTI4LCA3NywgNjksIDg0LCA4MiwgNjksIDg0LCA2OSwgMjExLCA3NywgNjksIDg0LCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAKLSAgICAxMjgsIDc3LCA2OSwgODQsIDY5LCA3NSwgMTI4LCA3NywgNjksIDg0LCA2OSwgNzEsIDEyOCwgNzcsIDY5LCA4NCwgNjUsIAotICAgIDc2LCAxMjgsIDc3LCA2OSwgODQsIDE5MywgNzcsIDY5LCA4MywgODMsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDc3LCA2OSwgCi0gICAgODMsIDgzLCA2NSwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODMsIDgzLCA2NSwgNzEsIDE5NywgNzcsIDY5LCA4MywgNzksIAotICAgIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIDEyOCwgNzcsIDY5LCA4MiwgNzksIDczLCA4NCwgCi0gICAgNzMsIDE5NSwgNzcsIDY5LCA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIDE5MywgNzcsIDY5LCAKLSAgICA4MiwgNzMsIDY4LCA3MywgNjUsIDc4LCA4MywgMTI4LCA3NywgNjksIDgyLCA3MywgMTI4LCA3NywgNjksIDgyLCA3MSwgNjksIAotICAgIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgODksIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgMjE3LCA3NywgCi0gICAgNjksIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc3LCA2OSwgNzgsIDEyOCwgNzcsIDY5LCA3NywgNzksIDEyOCwgNzcsIDY5LCAKLSAgICA3NywgNjYsIDY5LCA4MiwgODMsIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIAotICAgIDc3LCA2NiwgNjksIDIxMCwgNzcsIDY5LCA3NywgNDUsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDc3LCA2OSwgNzcsIDEyOCwgCi0gICAgNzcsIDY5LCAyMDUsIDc3LCA2OSwgNzYsIDc5LCA2OCwgNzMsIDE5NSwgNzcsIDY5LCA3NiwgNzMsIDc1LCAxMjgsIDc3LCAKLSAgICA2OSwgNzMsIDkwLCA3MywgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgMTI4LCA3NywgNjksIDcxLCA2NSwgODAsIAotICAgIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA3NiwgNzMsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgCi0gICAgODUsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDc3LCAKLSAgICAxMjgsIDc3LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3NywgNjksIDY4LCA3MywgODUsIDc3LCAxMjgsIDc3LCA2OSwgNjgsIAotICAgIDczLCA4NSwgMjA1LCA3NywgNjksIDY4LCA3MywgNjcsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDY3LCA2NSwgCi0gICAgMjA0LCA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCAyMTIsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAKLSAgICAxOTYsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDE5NywgNzcsIAotICAgIDY4LCA4NSwgMjA2LCA3NywgMTk2LCA3NywgNjcsIDcyLCAyMTMsIDc3LCA2NywgNzIsIDY1LCAyMDYsIDc3LCAxOTUsIDc3LCAKLSAgICA2NiwgODUsIDc5LCA4MSwgMTI4LCA3NywgNjYsIDg1LCA3OSwgMTI4LCA3NywgNjYsIDg1LCA2OSwgMTI4LCA3NywgNjYsIAotICAgIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDc5LCA3OSwgMTI4LCA3NywgCi0gICAgNjYsIDc5LCAxMjgsIDc3LCA2NiwgNzMsIDg0LCAxMjgsIDc3LCA2NiwgNzMsIDIxMiwgNzcsIDY2LCA3MywgODIsIDczLCAKLSAgICA2OSwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NiwgNjksIAotICAgIDg1LCA4MiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDc3LCAxMjgsIDc3LCA2NiwgNjksIDgyLCA2NSwgNjksIDEyOCwgCi0gICAgNzcsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDc1LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjksIDY5LCAKLSAgICAxMjgsIDc3LCA2NiwgNjksIDEyOCwgNzcsIDY2LCA2NSwgODEsIDEyOCwgNzcsIDY2LCA2NSwgNzgsIDg5LCA3MywgMTI4LCAKLSAgICA3NywgNjYsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA2NSwgNzUsIDY5LCA4NCwgMTI4LCA3NywgNjYsIAotICAgIDY1LCA2NSwgMTI4LCA3NywgNjYsIDY1LCAxOTMsIDc3LCA2NiwgMTkzLCA3NywgNjYsIDUyLCAxMjgsIDc3LCA2NiwgNTEsIAotICAgIDEyOCwgNzcsIDY2LCA1MCwgMTI4LCA3NywgNjYsIDEyOCwgNzcsIDE5NCwgNzcsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA4OSwgMTI4LCA3NywgNjUsIDg4LCA3MywgNzcsIDY1LCAxMjgsIDc3LCA2NSwgODgsIDEyOCwgNzcsIAotICAgIDY1LCA4NSwgMTI4LCA3NywgNjUsIDg0LCA4NCwgNzksIDY3LCA3NSwgMTI4LCA3NywgNjUsIDg0LCA4MiwgNzMsIDg4LCAKLSAgICAxMjgsIDc3LCA2NSwgODQsIDY5LCA4MiwgNzMsIDY1LCA3NiwgODMsIDEyOCwgNzcsIDY1LCA4NCwgMTI4LCA3NywgNjUsIAotICAgIDgzLCAyMTMsIDc3LCA2NSwgODMsIDgzLCA3MywgNzgsIDcxLCAxMjgsIDc3LCA2NSwgODMsIDgzLCA2NSwgNzEsIDY5LCAKLSAgICAxMjgsIDc3LCA2NSwgODMsIDc5LCA4MiwgMTkzLCA3NywgNjUsIDgzLCA3NSwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNzAsIAotICAgIDY1LCA2NSwgODQsIDEyOCwgNzcsIDY1LCA4MywgNzIsIDUwLCAxMjgsIDc3LCA2NSwgODMsIDY3LCA4NSwgNzYsIDczLCA3OCwgCi0gICAgMTk3LCA3NywgNjUsIDgyLCA4OSwgMTI4LCA3NywgNjUsIDgyLCA4NSwgNzUsIDg1LCAxMjgsIDc3LCA2NSwgODIsIDg0LCAKLSAgICA4OSwgODIsIDczLCAxOTMsIDc3LCA2NSwgODIsIDgyLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgODIsIDgyLCA3MywgNjUsIAotICAgIDcxLCAxOTcsIDc3LCA2NSwgODIsIDc1LCA2OSwgODIsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MiwgMTI4LCA3NywgCi0gICAgNjUsIDgyLCA3NSwgNDUsIDUxLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTAsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCAKLSAgICA0OSwgMTI4LCA3NywgNjUsIDgyLCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNzIsIDEyOCwgNzcsIDY1LCA4MiwgNjcsIAotICAgIDY1LCA4NCwgNzksIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCAKLSAgICA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4MywgNzMsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIAotICAgIDg0LCA2NSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCAxOTMsIDc3LCA2NSwgODIsIDEyOCwgNzcsIDY1LCA4MSwgCi0gICAgNjUsIDcwLCAxMjgsIDc3LCA2NSwgODEsIDEyOCwgNzcsIDY1LCA4MCwgNzYsIDE5NywgNzcsIDY1LCA4MCwgNzMsIDgxLCAKLSAgICAxMjgsIDc3LCA2NSwgMjA4LCA3NywgNjUsIDc5LCAxMjgsIDc3LCA2NSwgNzgsIDgzLCA4OSwgNzksIDc4LCAxMjgsIDc3LCAKLSAgICA2NSwgNzgsIDgzLCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMjE4LCA3NywgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA3OCwgNzEsIDY1LCA3NiwgNjUsIDc3LCAxMjgsIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDc2LCA3MywgCi0gICAgNzgsIDE5OSwgNzcsIDY1LCA3OCwgNjgsIDY1LCA3MywgMTk1LCA3NywgNjUsIDc4LCA2NywgNzIsIDIxMywgNzcsIDY1LCAKLSAgICA3OCwgNjUsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDc3LCA2NSwgNzYsIDg0LCA2OSwgODMsIDE5NywgNzcsIDY1LCA3NiwgNjksIAotICAgIDY5LCA4MiwgNzMsIDEyOCwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzcsIDY1LCA3NiwgMTk3LCA3NywgNjUsIDc2LCA2NSwgCi0gICAgNzUsIDc5LCAyMDYsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIDY1LCAxMjgsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIAotICAgIDE5MywgNzcsIDY1LCA3MywgOTAsIDY5LCAxMjgsIDc3LCA2NSwgNzMsIDg5LCA2NSwgNzcsIDc5LCA3NSwgMTI4LCA3NywgCi0gICAgNjUsIDczLCA4NCwgNjUsIDczLCA3NSwgNzIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDgyLCA4NSwgMTI4LCA3NywgNjUsIDczLCAKLSAgICA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgNjUsIDczLCA3NywgNjUsIDc2LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MywgNzYsIAotICAgIDY2LCA3OSwgMjE2LCA3NywgNjUsIDczLCA3NSwgODUsIDgyLCA3OSwgMTI4LCA3NywgNjUsIDczLCA2OCwgNjksIDc4LCAKLSAgICAxMjgsIDc3LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MiwgNzQsIDc5LCA3OCwgMTk5LCA3NywgNjUsIDcyLCA3MiwgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDY1LCA3NSwgCi0gICAgNzIsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNzcsIDY1LCA3MiwgMTI4LCAKLSAgICA3NywgNjUsIDcxLCA3OCwgNzMsIDcwLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgNjksIDgzLCA3MywgMTI4LCA3NywgNjUsIAotICAgIDY5LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA3NCwgNjksIDg0LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA4NiwgCi0gICAgNjksIDg1LCA4OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgNzUsIDgwLCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDcxLCAKLSAgICA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NywgNjYsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIAotICAgIDY5LCA3NywgNjYsIDY1LCAxMjgsIDc3LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NSwgNjksIDc2LCA2OSwgNjksIDEyOCwgCi0gICAgNzcsIDY1LCA2OSwgNzUsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDY1LCA2OCwgODksIDY1LCAxMjgsIDc3LCA2NSwgNjgsIDg1LCAKLSAgICAxMjgsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMjAwLCA3NywgNjUsIDY4LCA2OCwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIAotICAgIDE5MywgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgCi0gICAgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NSwgNjcsIAotICAgIDg1LCA4NCwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDIwNiwgCi0gICAgNzcsIDY1LCA2NywgNzIsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY1LCA2NSwgODksIDg5LCA2NSwgNjUsIDEyOCwgNzcsIDY1LCAKLSAgICA2NSwgNzMsIDEyOCwgNzcsIDY1LCA2NSwgMTI4LCA3NywgNjUsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDUyLCAxMjgsIDc3LCAKLSAgICA0OCwgNTIsIDUxLCAxMjgsIDc3LCA0OCwgNTIsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDQ5LCAxMjgsIDc3LCA0OCwgNTIsIAotICAgIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDUyLCA0OCwgMTI4LCA3NywgNDgsIDUxLCA1NywgMTI4LCA3NywgNDgsIDUxLCA1NiwgCi0gICAgMTI4LCA3NywgNDgsIDUxLCA1NSwgMTI4LCA3NywgNDgsIDUxLCA1NCwgMTI4LCA3NywgNDgsIDUxLCA1MywgMTI4LCA3NywgCi0gICAgNDgsIDUxLCA1MiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjYsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc3LCAKLSAgICA0OCwgNTEsIDUxLCAxMjgsIDc3LCA0OCwgNTEsIDUwLCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA3NywgNDgsIAotICAgIDUxLCA0OSwgMTI4LCA3NywgNDgsIDUxLCA0OCwgMTI4LCA3NywgNDgsIDUwLCA1NywgMTI4LCA3NywgNDgsIDUwLCA1NiwgCi0gICAgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIDEyOCwgNzcsIDQ4LCA1MCwgNTUsIDEyOCwgNzcsIDQ4LCA1MCwgNTQsIDEyOCwgCi0gICAgNzcsIDQ4LCA1MCwgNTMsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDUyLCAxMjgsIDc3LCAKLSAgICA0OCwgNTAsIDUxLCAxMjgsIDc3LCA0OCwgNTAsIDUwLCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgMTI4LCA3NywgNDgsIAotICAgIDUwLCA0OSwgMTI4LCA3NywgNDgsIDUwLCA0OCwgMTI4LCA3NywgNDgsIDQ5LCA1NywgMTI4LCA3NywgNDgsIDQ5LCA1NiwgCi0gICAgMTI4LCA3NywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDY1LCAKLSAgICAxMjgsIDc3LCA0OCwgNDksIDU0LCAxMjgsIDc3LCA0OCwgNDksIDUzLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MywgMTI4LCAKLSAgICA3NywgNDgsIDQ5LCA1MiwgMTI4LCA3NywgNDgsIDQ5LCA1MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzIsIDEyOCwgNzcsIAotICAgIDQ4LCA0OSwgNTAsIDcxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjksIDEyOCwgCi0gICAgNzcsIDQ4LCA0OSwgNTAsIDY4LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NywgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjYsIAotICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUwLCAxMjgsIDc3LCA0OCwgNDksIDQ5LCAxMjgsIAotICAgIDc3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgMTI4LCA3NywgNDgsIDQ4LCA1NywgMTI4LCA3NywgCi0gICAgNDgsIDQ4LCA1NiwgMTI4LCA3NywgNDgsIDQ4LCA1NSwgMTI4LCA3NywgNDgsIDQ4LCA1NCwgMTI4LCA3NywgNDgsIDQ4LCAKLSAgICA1MywgMTI4LCA3NywgNDgsIDQ4LCA1MiwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIAotICAgIDEyOCwgNzcsIDQ4LCA0OCwgNTAsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCA2NSwgCi0gICAgMTI4LCA3NywgNDgsIDQ4LCA0OSwgMTI4LCA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCA4OSwgODgsIDEyOCwgNzYsIAotICAgIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCA4OSwgODAsIDEyOCwgNzYsIAotICAgIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCA4OSwgNjcsIDczLCA2NSwgMjA2LCA3NiwgODgsIDEyOCwgNzYsIDg3LCA3OSwgCi0gICAgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIDczLCAxMjgsIDc2LCA4NywgCi0gICAgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCA3NiwgODUsIDg4LCAxMjgsIDc2LCA4NSwgCi0gICAgODUsIDEyOCwgNzYsIDg1LCA4NCwgMTI4LCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3NiwgODUsIDgwLCAxMjgsIDc2LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDc2LCA4NSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDc2LCA4NSwgNzksIDEyOCwgCi0gICAgNzYsIDg1LCA3OCwgNzEsIDgzLCA3MywgMTI4LCA3NiwgODUsIDc4LCA2NSwgODQsIDE5NywgNzYsIDg1LCAyMDUsIDc2LCAKLSAgICA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIDEyOCwgNzYsIDg1LCA3MiwgODUsIDgyLCAxMjgsIDc2LCA4NSwgNzIsIAotICAgIDEyOCwgNzYsIDg1LCA3MSwgNzEsIDY1LCA3MSwgNjksIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDc2LCAxMjgsIDc2LCA4NSwgCi0gICAgNzEsIDY1LCAyMDQsIDc2LCA4NSwgNjksIDEyOCwgNzYsIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA4NSwgNTEsIDEyOCwgCi0gICAgNzYsIDg1LCA1MCwgMTI4LCA3NiwgODUsIDE3OCwgNzYsIDgyLCA3OSwgMTI4LCA3NiwgODIsIDc3LCAxMjgsIDc2LCA4MiwgCi0gICAgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgMTk3LCAKLSAgICA3NiwgNzksIDg4LCAxMjgsIDc2LCA3OSwgODcsIDY5LCA4MiwgNjksIDE5NiwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzYsIAotICAgIDc5LCA4NywgNDUsIDE4NSwgNzYsIDc5LCA4NiwgMTk3LCA3NiwgNzksIDg1LCA4MiwgNjksIDEyOCwgNzYsIDc5LCA4NSwgCi0gICAgNjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIDc2LCA3OSwgODUsIDY4LCA3NiwgMjE3LCA3NiwgNzksIDg0LCAKLSAgICA4NSwgODMsIDEyOCwgNzYsIDc5LCA4NCwgMTI4LCA3NiwgNzksIDgyLCA4MiwgODksIDEyOCwgNzYsIDc5LCA4MiwgODIsIAotICAgIDY1LCA3MywgNzgsIDY5LCAxMjgsIDc2LCA3OSwgODEsIDEyOCwgNzYsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCA4NCwgCi0gICAgMTI4LCA3NiwgNzksIDc5LCA4MCwgNjksIDE5NiwgNzYsIDc5LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgMjA4LCA3NiwgCi0gICAgNzksIDc5LCA3OCwgMTI4LCA3NiwgNzksIDc5LCAyMDMsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc5LCA3OCwgODMsIDg1LCAKLSAgICA3NywgMTI4LCA3NiwgNzksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDE5MywgNzYsIDc5LCA3OCwgNzEsIAotICAgIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODksIDgyLCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKLSAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDgzLCA3OSwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgCi0gICAgNzIsIDQ1LCA3OSwgODMsIDIxMSwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzcsIAotICAgIDY1LCA2OCwgMjEwLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3MiwgNjUsIDcxLCAKLSAgICA2NSwgNzYsIDIwNCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNjUsIDIxMCwgNzYsIAotICAgIDc5LCA3NywgNzcsIDY1LCA2OSwgMTI4LCA3NiwgNzksIDc3LCAxMjgsIDc2LCA3OSwgMjA1LCA3NiwgNzksIDc2LCA3NiwgCi0gICAgNzMsIDgwLCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3NiwgNzYsIDEyOCwgNzYsIDc5LCA3MSwgMjEwLCA3NiwgNzksIDcxLCAKLSAgICA3OSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNzksIDcxLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NiwgNzksIDcxLCAxMjgsIAotICAgIDc2LCA3OSwgNjgsIDY5LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzksIDc3LCA3OSwgODQsIDczLCAKLSAgICA4NiwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzUsIDczLCA3OCwgNzEsIDQ1LCA4MywgNzIsIDczLCA3MCwgMjEyLCA3NiwgNzksIAotICAgIDY3LCAyMDMsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA3NiwgNzksIDY1LCAxMjgsIDc2LCA3OCwgMTI4LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgNzYsIDc5LCA3OSwgCi0gICAgMTI4LCA3NiwgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3NiwgODUsIDEyOCwgNzYsIDc2LCA3NiwgNzksIDc5LCAKLSAgICAxMjgsIDc2LCA3NiwgNzYsIDc5LCAxMjgsIDc2LCA3NiwgNzYsIDczLCA3MywgMTI4LCA3NiwgNzYsIDc2LCA3MywgMTI4LCAKLSAgICA3NiwgNzYsIDc2LCA2OSwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDg1LCAxMjgsIAotICAgIDc2LCA3NiwgNzYsIDY1LCA3MywgMTI4LCA3NiwgNzYsIDc2LCA2NSwgNjUsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDEyOCwgCi0gICAgNzYsIDc2LCA3NiwgMTI4LCA3NiwgNzQsIDg1LCA2OCwgNzMsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDY5LCAxMjgsIDc2LCAKLSAgICA3NCwgMTI4LCA3NiwgNzMsIDg4LCAxMjgsIDc2LCA3MywgODcsIDc4LCAxMjgsIDc2LCA3MywgODYsIDgyLCAxOTcsIDc2LCAKLSAgICA3MywgODQsIDg0LCA3NiwgMTk3LCA3NiwgNzMsIDg0LCA4NCwgNjksIDIxMCwgNzYsIDczLCA4NCwgODIsIDE5MywgNzYsIAotICAgIDczLCA4NCwgMTI4LCA3NiwgNzMsIDgzLCAyMTMsIDc2LCA3MywgODIsIDE5MywgNzYsIDczLCA4MSwgODUsIDczLCAxOTYsIAotICAgIDc2LCA3MywgODEsIDEyOCwgNzYsIDczLCA4MCwgODMsIDg0LCA3MywgNjcsIDc1LCAxMjgsIDc2LCA3MywgNzgsIDc1LCA3MywgCi0gICAgNzgsIDE5OSwgNzYsIDczLCA3OCwgMjAzLCA3NiwgNzMsIDc4LCA3MSwgODMsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCAKLSAgICA4MywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgMjExLCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU3LCAxMjgsIDc2LCA3MywgNzgsIAotICAgIDY5LCA0NSwgNTUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1MSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDQ5LCAKLSAgICAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MCwgMTI4LCA3NiwgNzMsIAotICAgIDc3LCA3NywgODUsIDEyOCwgNzYsIDczLCA3NywgNzcsIDIxMywgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMTk2LCA3NiwgCi0gICAgNzMsIDc3LCA3MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNzMsIDc3LCA3MywgODQsIDEyOCwgNzYsIDczLCAKLSAgICA3NywgNjksIDEyOCwgNzYsIDczLCA3NywgNjYsIDIxMywgNzYsIDczLCA3NiwgODksIDEyOCwgNzYsIDczLCA3NiwgNzMsIAotICAgIDg0LCA3MiwgMTI4LCA3NiwgNzMsIDc2LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgCi0gICAgNzYsIDczLCA3MSwgNzIsIDg0LCA3MiwgNzksIDg1LCA4MywgNjksIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCAKLSAgICA3MywgNzAsIDY5LCAxMjgsIDc2LCA3MywgNjksIDg4LCAxMjgsIDc2LCA3MywgNjksIDg0LCAxMjgsIDc2LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDc2LCA3MywgNjksIDY5LCAxMjgsIDc2LCA3MywgNjksIDEyOCwgNzYsIDczLCA2OCwgMTI4LCA3NiwgNzMsIAotICAgIDY2LCA4MiwgNjUsIDEyOCwgNzYsIDczLCA2NiwgNjksIDgyLCA4NCwgODksIDEyOCwgNzYsIDczLCA2NSwgNjYsIDczLCA3NiwgCi0gICAgNzMsIDg0LCAyMTcsIDc2LCA3MiwgNzMsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAotICAgIDEyOCwgNzYsIDcyLCA2NSwgMTk5LCA3NiwgNzIsIDY1LCA2NSwgMTI4LCA3NiwgNzIsIDEyOCwgNzYsIDY5LCA5MCwgNzIsIAotICAgIDEyOCwgNzYsIDY5LCA4OCwgMTI4LCA3NiwgNjksIDg2LCA2OSwgMjA0LCA3NiwgNjksIDg1LCA3NywgMTI4LCA3NiwgNjksIAotICAgIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgMTI4LCA3NiwgCi0gICAgNjksIDIxMywgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgODMsIDEyOCwgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgMTI4LCAKLSAgICA3NiwgNjksIDIxMiwgNzYsIDY5LCA4MywgODMsIDY5LCAyMTAsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgNzgsIAotICAgIDEyOCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIDc2LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA3OSwgCi0gICAgODAsIDY1LCA4MiwgNjgsIDEyOCwgNzYsIDY5LCA3OSwgMTI4LCA3NiwgNjksIDc4LCA4NCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAKLSAgICAyMTAsIDc2LCA2OSwgNzgsIDczLCA4MywgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCA2OSwgNzgsIDY5LCA4MiwgCi0gICAgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDIwMCwgNzYsIDY5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA2OSwgNzgsIDcxLCAKLSAgICAxOTMsIDc2LCA2OSwgNzcsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDc3LCA3OSwgNzMsIDEyOCwgNzYsIDY5LCA3NiwgNjksIAotICAgIDg0LCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgMjAzLCA3NiwgNjksIDczLCA3NywgNzcsIDY1LCAxMjgsIAotICAgIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDcxLCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIDIxMSwgNzYsIDY5LCA3MSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgODcsIAotICAgIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODQsIDc5LCA0NSwgODIsIDczLCA3MSwgNzIsIDIxMiwgCi0gICAgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIDY5LCAyMDUsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCAKLSAgICA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgwLCA3OSwgCi0gICAgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIDc2LCAKLSAgICA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgCi0gICAgMTk5LCA3NiwgNjksIDcwLCA4NCwgMTI4LCA3NiwgNjksIDY5LCA4MiwgNjUsIDY5LCA4NywgNjUsIDEyOCwgNzYsIDY5LCAKLSAgICA2OSwgNzUsIDEyOCwgNzYsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc2LCA2OSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgNzYsIAotICAgIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgNzAsIDEyOCwgNzYsIDY5LCA2NSwgMTk4LCA3NiwgCi0gICAgNjksIDY1LCA2OCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNjUsIDY4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgMTk2LCAKLSAgICA3NiwgNjgsIDY1LCA3OCwgMTI4LCA3NiwgNjgsIDUwLCAxMjgsIDc2LCA2NywgMjAxLCA3NiwgNjcsIDE5NywgNzYsIDY1LCAKLSAgICA5MCwgMjE3LCA3NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NiwgNjUsIDg4LCAxMjgsIDc2LCA2NSwgODcsIAotICAgIDEyOCwgNzYsIDY1LCAyMTUsIDc2LCA2NSwgODUsIDc2LCA2NSwgMTI4LCA3NiwgNjUsIDg1LCA3NSwgNjUsIDIxOCwgNzYsIAotICAgIDY1LCA4NCwgNzMsIDc4LCA2NSwgODQsIDE5NywgNzYsIDY1LCA4NCwgNzMsIDc1LCAxMjgsIDc2LCA2NSwgODQsIDY5LCA4MiwgCi0gICAgNjUsIDIwNCwgNzYsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCAKLSAgICA2NSwgMjA0LCA3NiwgNjUsIDgyLCA3MSwgNjksIDIxMCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAxMjgsIDc2LCA2NSwgODIsIAotICAgIDcxLCAxOTcsIDc2LCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgNjUsIDgxLCAxMjgsIDc2LCA2NSwgODAsIDEyOCwgNzYsIAotICAgIDY1LCA3OCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgNzYsIDY1LCA3OCwgNzEsIDg1LCA2NSwgNzEsIDE5NywgNzYsIDY1LCA3OCwgCi0gICAgNjksIDgzLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCAxMjgsIDc2LCAKLSAgICA2NSwgNzcsIDY5LCAxOTYsIDc2LCA2NSwgNzcsIDY5LCAxMjgsIDc2LCA2NSwgNzcsIDE5NywgNzYsIDY1LCA3NywgNjgsIAotICAgIDY1LCAxMjgsIDc2LCA2NSwgNzcsIDY4LCAxMjgsIDc2LCA2NSwgNzcsIDY2LCA2OCwgMTkzLCA3NiwgNjUsIDc3LCA2NSwgCi0gICAgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzYsIDEyOCwgNzYsIDY1LCAyMDQsIDc2LCA2NSwgNzUsIDc1LCA3MiwgNjUsIDc4LCAKLSAgICA3MSwgODksIDY1LCA3OSwgMTI4LCA3NiwgNjUsIDc0LCA2NSwgNzgsIDg5LCA2NSwgNzYsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIAotICAgIDIwMSwgNzYsIDY1LCA3MiwgODMsIDcyLCA4NSwgMTI4LCA3NiwgNjUsIDcyLCAxMjgsIDc2LCA2NSwgNzEsIDg1LCA4MywgCi0gICAgMTI4LCA3NiwgNjUsIDcxLCAyMTMsIDc2LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgMjEwLCA3NiwgCi0gICAgNjUsIDcxLCA2NSwgNjYsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDE5NCwgNzYsIDY1LCA2OSwgODYsIDEyOCwgNzYsIDY1LCAKLSAgICA2OSwgMTI4LCA3NiwgNjUsIDY4LCAyMTcsIDc2LCA2NSwgNjcsIDc1LCAxMjgsIDc2LCA2NSwgNjcsIDY1LCAxMjgsIDc2LCAKLSAgICA2NSwgNjYsIDc5LCA4NSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzYsIDY1LCA2NiwgNzksIDgyLCAxMjgsIDc2LCA2NSwgNjYsIAotICAgIDczLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDc2LCA2NSwgCi0gICAgNjYsIDY1LCA4NCwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjUsIDc4LCAxMjgsIDc2LCAKLSAgICA2NSwgNjUsIDc3LCA4NSwgMTI4LCA3NiwgNjUsIDY1LCA3NywgMTI4LCA3NiwgNjUsIDY1LCA3MywgMTI4LCA3NiwgNDgsIAotICAgIDQ4LCA1NCwgNjUsIDEyOCwgNzYsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDc2LCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgCi0gICAgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3NSwgODksIDg1LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA4OSwgODUsIAotICAgIDEyOCwgNzUsIDg5LCA3OSwgMTI4LCA3NSwgODksIDc2LCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODksIDczLCAxMjgsIAotICAgIDc1LCA4OSwgNjksIDEyOCwgNzUsIDg5LCA2NSwgODQsIDcyLCA3OSwgMjExLCA3NSwgODksIDY1LCA2NSwgMTI4LCA3NSwgCi0gICAgODksIDY1LCAxMjgsIDc1LCA4OCwgODcsIDczLCAxMjgsIDc1LCA4OCwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDg3LCAKLSAgICA2OSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCA4NywgNjUsIDEyOCwgNzUsIDg4LCA4NSwgMTI4LCAKLSAgICA3NSwgODgsIDc5LCAxMjgsIDc1LCA4OCwgNzMsIDEyOCwgNzUsIDg4LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA2OSwgMTI4LCAKLSAgICA3NSwgODgsIDY1LCA2NSwgMTI4LCA3NSwgODgsIDY1LCAxMjgsIDc1LCA4NywgODUsIDUxLCA0OSwgNTYsIDEyOCwgNzUsIAotICAgIDg3LCA3OSwgNzksIDEyOCwgNzUsIDg3LCA3OSwgMTI4LCA3NSwgODcsIDczLCA3MywgMTI4LCA3NSwgODcsIDczLCAxMjgsIAotICAgIDc1LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4NywgNjksIDEyOCwgNzUsIDg3LCA2NSwgODksIDEyOCwgNzUsIDg3LCA2NSwgCi0gICAgNjksIDg0LCAxMjgsIDc1LCA4NywgNjUsIDY1LCAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg2LCAxMjgsIDc1LCA4NSwgCi0gICAgODgsIDEyOCwgNzUsIDg1LCA4NSwgNzIsIDEyOCwgNzUsIDg1LCA4NCwgMTI4LCA3NSwgODUsIDgzLCA3NywgNjUsIDEyOCwgCi0gICAgNzUsIDg1LCA4MywgNzIsIDg1LCA1MCwgMTI4LCA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCAKLSAgICA3MywgODIsIDc5LCAxMjgsIDc1LCA4NSwgODIsIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDc1LCA4NSwgODIsIDEyOCwgNzUsIDg1LCAyMTAsIDc1LCA4NSwgODEsIDEyOCwgNzUsIDg1LCA3OSwgODgsIDEyOCwgNzUsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzUsIDg1LCA3OSwgMjA4LCA3NSwgODUsIDc5LCA3NywgMTI4LCA3NSwgODUsIDc5LCAxMjgsIAotICAgIDc1LCA4NSwgNzgsIDcxLCAxMjgsIDc1LCA4NSwgNzgsIDY4LCA2OCwgNjUsIDc2LCA3MywgODksIDY1LCAxMjgsIDc1LCA4NSwgCi0gICAgNzYsIDEyOCwgNzUsIDg1LCAyMDQsIDc1LCA4NSwgNjksIDg0LCAxMjgsIDc1LCA4NSwgNTUsIDEyOCwgNzUsIDg1LCA1MiwgCi0gICAgMTI4LCA3NSwgODUsIDE4MCwgNzUsIDg1LCA1MSwgMTI4LCA3NSwgODUsIDE3OSwgNzUsIDg0LCAxMjgsIDc1LCA4MywgODMsIAotICAgIDg1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCA4NSwgMTI4LCA3NSwgODMsIDgzLCA3OSwgNzksIDEyOCwgNzUsIDgzLCA4MywgCi0gICAgNzksIDEyOCwgNzUsIDgzLCA4MywgNzMsIDczLCAxMjgsIDc1LCA4MywgODMsIDczLCAxMjgsIDc1LCA4MywgODMsIDY5LCAKLSAgICA2OSwgMTI4LCA3NSwgODMsIDgzLCA2OSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIAotICAgIDczLCAxMjgsIDc1LCA4MywgODMsIDY1LCA2NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgMTI4LCA3NSwgODMsIDgzLCAxMjgsIAotICAgIDc1LCA4MywgNzMsIDEyOCwgNzUsIDgyLCA2OSwgNzcsIDY1LCA4MywgODQsIDczLCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgCi0gICAgNzcsIDc5LCA4OSwgODAsIDc5LCA4MiwgODIsIDc5LCA3OSwgNzgsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIAotICAgIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAKLSAgICAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDE5MywgNzUsIDgwLCA4NSwgMTI4LCA3NSwgODAsIDc5LCA4MSwgMTI4LCAKLSAgICA3NSwgODAsIDc5LCA3OSwgMTI4LCA3NSwgODAsIDc5LCAxMjgsIDc1LCA4MCwgNzMsIDEyOCwgNzUsIDgwLCA2OSwgODUsIAotICAgIDg4LCAxMjgsIDc1LCA4MCwgNjksIDY5LCAxMjgsIDc1LCA4MCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgODIsIDY1LCA4MSwgCi0gICAgMTI4LCA3NSwgODAsIDY1LCA3OCwgMTI4LCA3NSwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODgsIDEyOCwgNzUsIDc5LCA4NiwgCi0gICAgODUsIDg1LCAxMjgsIDc1LCA3OSwgODQsIDc5LCAxMjgsIDc1LCA3OSwgODIsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDc5LCAKLSAgICA4MiwgNzksIDc4LCA3MywgODMsIDEyOCwgNzUsIDc5LCA4MiwgNjksIDY1LCAyMDYsIDc1LCA3OSwgODIsIDY1LCA3OCwgNzMsIAotICAgIDE5NSwgNzUsIDc5LCA4MSwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzUsIDc5LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA3OSwgCi0gICAgODAsIDEyOCwgNzUsIDc5LCA3OSwgODAsIDc5LCAxMjgsIDc1LCA3OSwgNzksIDc3LCA4NSwgODUsIDg0LCAxMjgsIDc1LCAKLSAgICA3OSwgNzksIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIAotICAgIDc3LCAxOTMsIDc1LCA3OSwgNzcsIDIwMSwgNzUsIDc5LCA3NywgNjYsIDg1LCA4NiwgNjUsIDEyOCwgNzUsIDc5LCA3NywgCi0gICAgNjYsIDg1LCA4NiwgMTkzLCA3NSwgNzksIDc3LCA2NiwgMjEzLCA3NSwgNzksIDc1LCA3OSwgMTI4LCA3NSwgNzksIDc1LCAKLSAgICAxMjgsIDc1LCA3OSwgMjAzLCA3NSwgNzksIDczLCAxMjgsIDc1LCA3OSwgMjAxLCA3NSwgNzksIDcyLCAxMjgsIDc1LCA3OSwgCi0gICAgNzEsIDcyLCA3OSwgNzcsIDEyOCwgNzUsIDc5LCA2OSwgODQsIDEyOCwgNzUsIDc5LCA2NSwgNzYsIDY1LCAxMjgsIDc1LCAKLSAgICA3OSwgNjUsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzUsIAotICAgIDc4LCA3MywgNzAsIDY5LCAxMjgsIDc1LCA3OCwgNzMsIDcwLCAxOTcsIDc1LCA3NywgMTI4LCA3NSwgMjA1LCA3NSwgNzYsIAotICAgIDczLCA4NCwgNzksIDc4LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCAKLSAgICAxOTMsIDc1LCA3NiwgNjUsIDEyOCwgNzUsIDc2LCAxMjgsIDc1LCA3NSwgODUsIDEyOCwgNzUsIDc1LCA3OSwgMTI4LCA3NSwgCi0gICAgNzUsIDczLCAxMjgsIDc1LCA3NSwgNjksIDY5LCAxMjgsIDc1LCA3NSwgNjksIDEyOCwgNzUsIDc1LCA2NSwgMTI4LCA3NSwgCi0gICAgNzUsIDEyOCwgNzUsIDc0LCA2OSwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCAKLSAgICA4NCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgCi0gICAgNzksIDc1LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDczLCAKLSAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCi0gICAgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIAotICAgIDc1LCA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgCi0gICAgNzUsIDczLCA4OSwgNjksIDc5LCAyMDMsIDc1LCA3MywgODgsIDEyOCwgNzUsIDczLCA4NCwgMTI4LCA3NSwgNzMsIDgzLCAKLSAgICA4MywgNzMsIDc4LCAxOTksIDc1LCA3MywgODMsIDgzLCAxMjgsIDc1LCA3MywgODMsIDIxMSwgNzUsIDczLCA4MywgNzMsIAotICAgIDc3LCA1MywgMTI4LCA3NSwgNzMsIDgzLCA3MywgNzcsIDE4MSwgNzUsIDczLCA4MywgNzIsIDEyOCwgNzUsIDczLCA4MywgCi0gICAgNjUsIDc2LCAxMjgsIDc1LCA3MywgODIsIDc5LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzksIDc3LCAKLSAgICA2OSwgNjksIDg0LCA3OSwgODIsIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCAxMjgsIAotICAgIDc1LCA3MywgODIsIDc5LCAxMjgsIDc1LCA3MywgODIsIDcxLCA3MiwgNzMsIDIxOCwgNzUsIDczLCA4MSwgMTI4LCA3NSwgCi0gICAgNzMsIDgwLCAxMjgsIDc1LCA3MywgMjA4LCA3NSwgNzMsIDc4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NSwgNzMsIDc4LCAKLSAgICA2OCwgNjksIDgyLCA3MSwgNjUsIDgyLCA4NCwgNjksIDc4LCAxMjgsIDc1LCA3MywgNzcsIDc5LCA3OCwgNzksIDEyOCwgNzUsIAotICAgIDczLCA3MywgMTI4LCA3NSwgNzMsIDcyLCAxMjgsIDc1LCA3MywgNjksIDg4LCAxMjgsIDc1LCA3MywgNjksIDgwLCAxMjgsIAotICAgIDc1LCA3MywgNjksIDY5LCA3NywgMTI4LCA3NSwgNzMsIDY5LCAxMjgsIDc1LCA3MywgNjgsIDEyOCwgNzUsIDczLCAxOTYsIAotICAgIDc1LCA3MywgNjcsIDc1LCAxMjgsIDc1LCA3MiwgOTAsIDEyOCwgNzUsIDcyLCA4NywgNjUsIDczLCAxMjgsIDc1LCA3MiwgCi0gICAgODUsIDY5LCA3OCwgNDUsIDc2LCA4NSwgMTk3LCA3NSwgNzIsIDg1LCA2OSwgMjA2LCA3NSwgNzIsIDg1LCA2OCwgNjUsIDc3LCAKLSAgICAxMjgsIDc1LCA3MiwgODUsIDY1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCA4NSwgMTI4LCA3NSwgNzIsIDc5LCAyMTIsIDc1LCAKLSAgICA3MiwgNzksIDc4LCAxMjgsIDc1LCA3MiwgNzksIDc3LCA4NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIAotICAgIDIwNywgNzUsIDcyLCA3NywgMjEzLCA3NSwgNzIsIDczLCA4NCwgMTI4LCA3NSwgNzIsIDczLCA3OCwgODksIDY1LCAxMjgsIAotICAgIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDIwMCwgNzUsIDcyLCA3MywgMTI4LCA3NSwgNzIsIDcyLCA3OSwgMTI4LCA3NSwgCi0gICAgNzIsIDcyLCA2NSwgMTI4LCA3NSwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNzUsIDcyLCAKLSAgICA2OSwgNjksIDEyOCwgNzUsIDcyLCA2OSwgMTI4LCA3NSwgNzIsIDY1LCA4MiwgNzksIDgzLCA3MiwgODQsIDcyLCAyMDEsIAotICAgIDc1LCA3MiwgNjUsIDgyLCAxMjgsIDc1LCA3MiwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNzIsIDY1LCA3OCwgMTk5LCA3NSwgCi0gICAgNzIsIDY1LCA3OCwgNjgsIDE5MywgNzUsIDcyLCA2NSwgNzgsIDEyOCwgNzUsIDcyLCA2NSwgNzcsIDg0LCAyMDEsIDc1LCAKLSAgICA3MiwgNjUsIDc1LCA2NSwgODMsIDgzLCA3MywgNjUsIDIwNiwgNzUsIDcyLCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA2NSwgNzIsIAotICAgIDEyOCwgNzUsIDcyLCA2NSwgMjAwLCA3NSwgNzIsIDY1LCA2NSwgMTI4LCA3NSwgNzEsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIAotICAgIDY1LCA4MCwgMTI4LCA3NSwgNjksIDg5LCA2NywgNjUsIDIwOCwgNzUsIDY5LCA4OSwgNjYsIDc5LCA2NSwgODIsIDY4LCAKLSAgICAxMjgsIDc1LCA2OSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODksIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODMsIAotICAgIDcyLCA2OSwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgCi0gICAgODAsIDg1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCA3OSwgMjEyLCA3NSwgNjksIDg1LCA3NywgMTI4LCA3NSwgNjksIDg1LCAKLSAgICA3NSwgNjksIDg1LCA4NCwgNzgsIDY4LCA2NSwgMTI4LCA3NSwgNjksIDg1LCA3NSwgNjUsIDgxLCAxMjgsIDc1LCA2OSwgODUsIAotICAgIDY1LCA2OSwgODQsIDc3LCA2OSwgODUsIDc4LCAxMjgsIDc1LCA2OSwgODUsIDY1LCA2OSwgODIsIDczLCAxMjgsIDc1LCA2OSwgCi0gICAgODQsIDg0LCAyMDEsIDc1LCA2OSwgODMsIDcyLCA1MCwgMTI4LCA3NSwgNjksIDgyLCA2OSwgODQsIDEyOCwgNzUsIDY5LCAKLSAgICA3OSwgODcsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIAotICAgIDc3LCA2NSwgODQsIDE5MywgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgMTkzLCA3NSwgNjksIDc4LCA2NSwgODQsIDEyOCwgCi0gICAgNzUsIDY5LCA3OCwgMTI4LCA3NSwgNjksIDIwNiwgNzUsIDY5LCA3NywgODAsIDg1LCA3NiwgMTI4LCA3NSwgNjksIDc3LCAKLSAgICA4MCwgODUsIDIwNCwgNzUsIDY5LCA3NywgODAsIDc2LCA3MywgMTI4LCA3NSwgNjksIDc3LCA4MCwgNzYsIDIwMSwgNzUsIAotICAgIDY5LCA3NywgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc3LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgCi0gICAgNjksIDc2LCA4NiwgNzMsIDIwNiwgNzUsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzIsIDY5LCAyMDAsIDc1LCAKLSAgICA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MCwgODUsIDc2LCA2NSwgMTI4LCA3NSwgNjksIDY5LCA4MywgODUsIDEyOCwgNzUsIAotICAgIDY5LCA2OSwgODAsIDczLCA3OCwgMTk5LCA3NSwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY3LCA2NSwgNzYsIDEyOCwgCi0gICAgNzUsIDY2LCAxMjgsIDc1LCA2NSwgOTAsIDY1LCA3NSwgMjAwLCA3NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCAKLSAgICA3NSwgNjUsIDg5LCA2NSwgMjAwLCA3NSwgNjUsIDg4LCAxMjgsIDc1LCA2NSwgODcsIDczLCAxMjgsIDc1LCA2NSwgODYsIAotICAgIDg5LCA3NSwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODUsIDIwNiwgNzUsIDY1LCA4NSwgCi0gICAgMTI4LCA3NSwgNjUsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNzMsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDY1LCAKLSAgICA4NCwgNzIsIDY1LCA3NSwgMTkzLCA3NSwgNjUsIDg0LCA2NSwgODYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA2NSwgODQsIAotICAgIDY1LCA4NiwgMTkzLCA3NSwgNjUsIDg0LCA2NSwgNzUsIDY1LCA3OCwgNjUsIDQ1LCA3MiwgNzMsIDgyLCA2NSwgNzEsIDY1LCAKLSAgICA3OCwgMTkzLCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIAotICAgIDIwNiwgNzUsIDY1LCA4MywgODIsIDY1LCAxMjgsIDc1LCA2NSwgODMsIDgyLCAxOTMsIDc1LCA2NSwgODMsIDc1LCA2NSwgCi0gICAgNzYsIDEyOCwgNzUsIDY1LCA4MywgNzUsIDY1LCAyMDQsIDc1LCA2NSwgODMsIDcyLCA3NywgNzMsIDgyLCAyMDEsIDc1LCAKLSAgICA2NSwgODIsIDgzLCA3MiwgNjUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDgyLCA3OSwgODIsIDczLCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDgyLCAyMDcsIDc1LCA2NSwgODIsIDY5LCAyMDYsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA2NSwgCi0gICAgODIsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzUsIAotICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY1LCA4MCwgODAsIDY1LCAKLSAgICAxMjgsIDc1LCA2NSwgODAsIDgwLCAxOTMsIDc1LCA2NSwgODAsIDc5LCAxMjgsIDc1LCA2NSwgODAsIDcyLCAxMjgsIDc1LCAKLSAgICA2NSwgODAsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIAotICAgIDc1LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA2NSwgNzgsIDE5OSwgNzUsIDY1LCA3OCwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgCi0gICAgNjUsIDc3LCA1MiwgMTI4LCA3NSwgNjUsIDc3LCA1MCwgMTI4LCA3NSwgNjUsIDc3LCAxMjgsIDc1LCA2NSwgNzUsIDc5LCAKLSAgICAxMjgsIDc1LCA2NSwgNzUsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgNzUsIDEyOCwgNzUsIDY1LCAyMDMsIDc1LCAKLSAgICA2NSwgNzMsIDg0LCA3MiwgMjAxLCA3NSwgNjUsIDczLCA4MiwgNzMsIDEyOCwgNzUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDIwMSwgNzUsIDY1LCA3MCwgNjUsIDEyOCwgNzUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDE5OCwgNzUsIDY1LCA2OCwgNTMsIAotICAgIDEyOCwgNzUsIDY1LCA2OCwgMTgxLCA3NSwgNjUsIDY4LCA1MiwgMTI4LCA3NSwgNjUsIDY4LCA1MSwgMTI4LCA3NSwgNjUsIAotICAgIDY4LCAxNzksIDc1LCA2NSwgNjgsIDUwLCAxMjgsIDc1LCA2NSwgNjgsIDEyOCwgNzUsIDY1LCA2NiwgMTkzLCA3NSwgNjUsIAotICAgIDY2LCAxMjgsIDc1LCA2NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3NSwgNjUsIDY1LCA3MCwgCi0gICAgMTI4LCA3NSwgNjUsIDUwLCAxMjgsIDc1LCA2NSwgMTc4LCA3NSwgNDgsIDQ4LCA1NiwgMTI4LCA3NSwgNDgsIDQ4LCA1NSwgCi0gICAgMTI4LCA3NSwgNDgsIDQ4LCA1NCwgMTI4LCA3NSwgNDgsIDQ4LCA1MywgMTI4LCA3NSwgNDgsIDQ4LCA1MiwgMTI4LCA3NSwgCi0gICAgNDgsIDQ4LCA1MSwgMTI4LCA3NSwgNDgsIDQ4LCA1MCwgMTI4LCA3NSwgNDgsIDQ4LCA0OSwgMTI4LCA3NCwgODcsIDY1LCAKLSAgICAxMjgsIDc0LCA4NSwgODUsIDEyOCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgODUsIDgzLCA4NCwgNzMsIDcwLCA3MywgNjcsIAotICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NCwgODUsIDgwLCA3MywgODQsIDY5LCA4MiwgMTI4LCA3NCwgODUsIDc5LCA4NCwgCi0gICAgMTI4LCA3NCwgODUsIDc5LCA4MCwgMTI4LCA3NCwgODUsIDc4LCA3OSwgMTI4LCA3NCwgODUsIDc4LCA2OSwgMTI4LCA3NCwgCi0gICAgODUsIDc2LCA4OSwgMTI4LCA3NCwgODUsIDY5LCA4NSwgNzMsIDEyOCwgNzQsIDg1LCA2OCwgODUsIDc2LCAxMjgsIDc0LCAKLSAgICA4NSwgNjgsIDcxLCA2OSwgMTI4LCA3NCwgODUsIDY4LCA2OSwgNzksIDQ1LCA4MywgODAsIDY1LCA3OCwgNzMsIDgzLCAyMDAsIAotICAgIDc0LCA3OSwgODksIDc5LCA4NSwgMjExLCA3NCwgNzksIDg5LCAxMjgsIDc0LCA3OSwgODYsIDY5LCAxMjgsIDc0LCA3OSwgCi0gICAgMjEyLCA3NCwgNzksIDc4LCA3MSwgMTI4LCA3NCwgNzksIDc4LCAxOTMsIDc0LCA3OSwgNzUsIDY5LCA4MiwgMTI4LCA3NCwgCi0gICAgNzksIDczLCA3OCwgNjksIDY4LCAxMjgsIDc0LCA3OSwgNzMsIDc4LCAxMjgsIDc0LCA3OSwgNjUsIDEyOCwgNzQsIDc0LCAKLSAgICA4OSwgODgsIDEyOCwgNzQsIDc0LCA4OSwgODQsIDEyOCwgNzQsIDc0LCA4OSwgODAsIDEyOCwgNzQsIDc0LCA4OSwgMTI4LCAKLSAgICA3NCwgNzQsIDg1LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzQsIAotICAgIDc0LCA4NSwgODIsIDEyOCwgNzQsIDc0LCA4NSwgODAsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc0LCA3NCwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgMTI4LCA3NCwgNzQsIDg1LCAxMjgsIDc0LCA3NCwgNzksIDg4LCAKLSAgICAxMjgsIDc0LCA3NCwgNzksIDg0LCAxMjgsIDc0LCA3NCwgNzksIDgwLCAxMjgsIDc0LCA3NCwgNzksIDEyOCwgNzQsIDc0LCAKLSAgICA3MywgODgsIDEyOCwgNzQsIDc0LCA3MywgODQsIDEyOCwgNzQsIDc0LCA3MywgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIAotICAgIDg4LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODAsIDEyOCwgNzQsIDc0LCA3MywgCi0gICAgNjksIDEyOCwgNzQsIDc0LCA3MywgMTI4LCA3NCwgNzQsIDY5LCA2OSwgMTI4LCA3NCwgNzQsIDY5LCAxMjgsIDc0LCA3NCwgCi0gICAgNjUsIDEyOCwgNzQsIDczLCA3NiwgMTI4LCA3NCwgNzMsIDczLCAxMjgsIDc0LCA3MywgNzIsIDg2LCA2NSwgNzcsIDg1LCAKLSAgICA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NCwgNzMsIDY1LCAxMjgsIDc0LCA3MiwgNzksIDEyOCwgNzQsIDcyLCA2OSwgNzIsIAotICAgIDEyOCwgNzQsIDcyLCA2NSwgNzgsIDEyOCwgNzQsIDcyLCA2NSwgNzcsIDEyOCwgNzQsIDcyLCA2NSwgNjUsIDEyOCwgNzQsIAotICAgIDcyLCA2NSwgMTI4LCA3NCwgNjksIDg1LCAxMjgsIDc0LCA2OSwgODIsIDg1LCA4MywgNjUsIDc2LCA2OSwgNzcsIDEyOCwgCi0gICAgNzQsIDY5LCA4MiwgNjUsIDIwNiwgNzQsIDY5LCA4MiwgNjUsIDEyOCwgNzQsIDY5LCA4MiwgMTI4LCA3NCwgNjksIDcyLCAKLSAgICAxMjgsIDc0LCA2OSwgMjAwLCA3NCwgNjksIDcxLCA3OSwgNzEsIDY1LCA3OCwgMTI4LCA3NCwgNjksIDY5LCA3NywgMTI4LCAKLSAgICA3NCwgNjksIDY1LCA3OCwgODMsIDEyOCwgNzQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzQsIDY1LCA4NiwgNzMsIAotICAgIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc0LCA2NSwgODUsIDEyOCwgNzQsIDY1LCA4MiwgMTI4LCA3NCwgNjUsIDgwLCA2NSwgCi0gICAgNzgsIDY5LCA4MywgMTk3LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDEyOCwgNzQsIDY1LCA3OCwgODUsIDY1LCA4MiwgODksIAotICAgIDEyOCwgNzQsIDY1LCA3NiwgNzYsIDY1LCA3NCwgNjUsIDc2LCA2NSwgNzYsIDc5LCA4NSwgNzIsIDc5LCA4NSwgMTI4LCA3NCwgCi0gICAgNjUsIDczLCAxMjgsIDc0LCA2NSwgNzIsIDEyOCwgNzQsIDY1LCA2OCwgNjksIDEyOCwgNzQsIDY1LCA2NywgNzUsIDQ1LCAKLSAgICA3OSwgNDUsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDc0LCA2NSwgNjcsIDIwMywgNzQsIDQ1LCA4MywgNzMsIAotICAgIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDIwMiwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgNjUsIDEyOCwgCi0gICAgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgMTkzLCA3MywgOTAsIDcyLCA2OSwgMTI4LCA3MywgOTAsIDY1LCA3NSwgNjUsIDg5LCAKLSAgICAxOTMsIDczLCA4OSwgNjksIDc1LCAxMjgsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDg1LCA3NCwgNjUsIAotICAgIDEyOCwgNzMsIDg1LCAxMjgsIDczLCA4NCwgMjExLCA3MywgODQsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIAotICAgIDg0LCA2OSwgNzcsIDEyOCwgNzMsIDgzLCA4MywgNzIsIDY1LCA4MiwgMTI4LCA3MywgODMsIDc5LCA3OCwgMTI4LCA3MywgCi0gICAgODMsIDc5LCAyMDYsIDczLCA4MywgNjksIDc4LCA0NSwgNzMsIDgzLCA2OSwgNzgsIDEyOCwgNzMsIDgzLCA2NSwgNzUsIDczLCAKLSAgICAxOTMsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODIsIDc5LCA3OCwgNDUsIDY3LCA3OSwgCi0gICAgODAsIDgwLCA2OSwgMjEwLCA3MywgODIsIDc5LCA3OCwgMTI4LCA3MywgNzksIDg0LCA3MywgNzAsIDczLCA2OSwgMTk2LCAKLSAgICA3MywgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCAxMjgsIDczLCA3OSwgODQsIDE5MywgNzMsIAotICAgIDc5LCA4MiwgMTI4LCA3MywgNzksIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA3MywgNzgsIDg2LCA3MywgODMsIDczLCA2NiwgCi0gICAgNzYsIDE5NywgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIDY4LCAxMjgsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCAKLSAgICAxOTYsIDczLCA3OCwgODYsIDY5LCA4MiwgODMsIDE5NywgNzMsIDc4LCA4NCwgODIsIDc5LCA2OCwgODUsIDY3LCA2OSwgODIsIAotICAgIDEyOCwgNzMsIDc4LCA4NCwgNzMsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3MywgCi0gICAgMTk1LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCAKLSAgICA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgCi0gICAgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDczLCA3OCwgODQsIDY5LCAKLSAgICA4MiwgODAsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzksIDY3LCA3NSwgCi0gICAgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNzMsIDc4LCA4NCwgNjksIDgyLCAKLSAgICA3NiwgNjUsIDY3LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDczLCA3OSwgMjEwLCA3MywgNzgsIDg0LCA2OSwgODIsIAotICAgIDY5LCA4MywgMjEyLCA3MywgNzgsIDg0LCA2OSwgODIsIDY3LCA2NSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA3NiwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgCi0gICAgMjA0LCA3MywgNzgsIDgzLCA4NSwgNzYsIDY1LCAyMTAsIDczLCA3OCwgODMsIDg0LCA4MiwgODUsIDc3LCA2OSwgNzgsIDg0LCAKLSAgICA2NSwgMjA0LCA3MywgNzgsIDgzLCA3MywgNjgsIDY5LCAxMjgsIDczLCA3OCwgODMsIDY5LCA4MiwgODQsIDczLCA3OSwgCi0gICAgMjA2LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDczLCA3OCwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAKLSAgICA3OCwgNjUsIDIwNCwgNzMsIDc4LCA4MCwgODUsIDIxMiwgNzMsIDc4LCA3OCwgNzksIDY3LCA2OSwgNzgsIDY3LCA2OSwgCi0gICAgMTI4LCA3MywgNzgsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDIxMCwgCi0gICAgNzMsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDczLCA3OCwgNzMsIDEyOCwgNzMsIDc4LCAKLSAgICA3MiwgNzMsIDY2LCA3MywgMjEyLCA3MywgNzgsIDcyLCA2OSwgODIsIDY5LCA3OCwgMjEyLCA3MywgNzgsIDcxLCA4NywgNjUsIAotICAgIDkwLCAxMjgsIDczLCA3OCwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgNzAsIDc2LCA4NSwgCi0gICAgNjksIDc4LCA2NywgNjksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgODQsIDg5LCAxMjgsIDczLCA3OCwgNzAsIDczLCAKLSAgICA3OCwgNzMsIDg0LCAyMTcsIDczLCA3OCwgNjgsIDg1LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc4LCA2OCwgNzMsIAotICAgIDgyLCA2OSwgNjcsIDIxMiwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3MywgNzgsIDY4LCA3MywgCi0gICAgNjcsIDY1LCA4NCwgNzksIDIxMCwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgNzMsIDc4LCA2OCwgNzMsIDY1LCAyMDYsIDczLCAKLSAgICA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3MywgNzgsIDY4LCA2OSwgODAsIDY5LCA3OCwgNjgsIDY5LCA3OCwgMjEyLCA3MywgNzgsIAotICAgIDY3LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMjExLCA3MywgCi0gICAgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDEyOCwgNzMsIDc4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgMTk3LCAKLSAgICA3MywgNzgsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3MywgNzgsIDY3LCA3NiwgODUsIDY4LCA3MywgNzgsIDE5OSwgNzMsIAotICAgIDc4LCA2NywgNzIsIDEyOCwgNzMsIDc4LCA2NiwgNzksIDIxNiwgNzMsIDc4LCA2NSwgODAsIDEyOCwgNzMsIDc4LCA0NSwgCi0gICAgNjUsIDc2LCA2NSwgNzAsIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc3LCA4MCwgNjksIDgyLCAKLSAgICA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgNzMsIAotICAgIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA3MywgNzcsIDc4LCAxMjgsIDczLCA3NywgNzMsIDgzLCA2OSwgCi0gICAgNzksIDIxMSwgNzMsIDc3LCA3MywgNzgsIDUxLCAxMjgsIDczLCA3NywgNzMsIDc4LCAxMjgsIDczLCA3NywgNzMsIDIwNiwgCi0gICAgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIAotICAgIDgyLCA2NSwgMTI4LCA3MywgNzcsIDczLCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNjgsIDczLCA2NSwgCi0gICAgODIsIDcxLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA2NSwgNzEsIDE5NywgNzMsIDc2LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDczLCA3NiwgODUsIDg5LCAxMjgsIDczLCA3NiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIAotICAgIDc2LCA4NSwgODQsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgCi0gICAgNTEsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDIxMywgNzMsIDc2LCAKLSAgICA1MCwgMTI4LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDE5MywgNzMsIDc0LCAxMjgsIDczLCAKLSAgICA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3MSwgNzMsIDEyOCwgNzMsIDcxLCAyMDEsIDczLCA3MSwgNzEsIAotICAgIDg3LCA4MywgMTI4LCA3MywgNzAsIDczLCA3OCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDg0LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKLSAgICAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDczLCAKLSAgICA2OSwgODUsIDY3LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIAotICAgIDczLCA2OSwgODUsIDc4LCAxOTksIDczLCA2OCwgNzYsIDY5LCAxMjgsIDczLCA2OCwgNzMsIDc3LCAxMjgsIDczLCA2OCwgCi0gICAgNzMsIDIwNSwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NywgNDgsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDY4LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2NywgNjUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY4LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU1LCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NSwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDU0LCA2OCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNTEsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ5LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU1LCA0OCwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNzAsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDY5LCA1NiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNTAsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU0LCA1NCwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNTMsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCA1NywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNTMsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1NCwgNTAsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUwLCA1MiwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA3MCwgNTYsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjgsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU3LCA0OSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NiwgNzAsIDQ4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTMsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA1MiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNTEsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUxLCA2NywgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNjgsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUzLCA1MCwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MywgNDksIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA2NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTYsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIAotICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTMsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIAotICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTEsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDksIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNzAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTQsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NywgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIAotICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTIsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjYsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIAotICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTAsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OSwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTcsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIAotICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNDgsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTUsIDEyOCwgCi0gICAgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIAotICAgIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA1MCwgNzAsIDU2LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgCi0gICAgNTYsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDczLCA2NywgNzIsIDc5LCA4NSwgMTI4LCA3MywgCi0gICAgNjcsIDcyLCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgNzMsIDc3LCA2NSwgODQsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCAKLSAgICA2NSwgNjgsIDczLCA3OCwgMTI4LCA3MywgNjcsIDY5LCA3NiwgNjUsIDc4LCA2OCwgNzMsIDY3LCA0NSwgODksIDgyLCAxMjgsIAotICAgIDczLCA2NiwgNzMsIDcwLCA3MywgNzYsIDczLCAxMjgsIDczLCA2NSwgODUsIDY4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA1MywgCi0gICAgMTI4LCA3MywgNDgsIDQ5LCA1MiwgMTI4LCA3MywgNDgsIDQ5LCA1MSwgMTI4LCA3MywgNDgsIDQ5LCA1MCwgMTI4LCA3MywgCi0gICAgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDEyOCwgNzMsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDczLCAKLSAgICA0OCwgNDksIDQ4LCAxMjgsIDczLCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA3MywgNDgsIDQ4LCA1NywgMTI4LCA3MywgNDgsIAotICAgIDQ4LCA1NiwgMTI4LCA3MywgNDgsIDQ4LCA1NSwgMTI4LCA3MywgNDgsIDQ4LCA1NCwgMTI4LCA3MywgNDgsIDQ4LCA1MywgCi0gICAgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIDEyOCwgNzMsIDQ4LCA0OCwgNTIsIDEyOCwgNzMsIDQ4LCA0OCwgNTEsIDEyOCwgCi0gICAgNzMsIDQ4LCA0OCwgNTAsIDEyOCwgNzMsIDQ4LCA0OCwgNDksIDEyOCwgNzMsIDQ1LCA4OSwgODUsIDEyOCwgNzMsIDQ1LCAKLSAgICA4OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCAxMjgsIDczLCA0NSwgODksIAotICAgIDY1LCA2OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgNDUsIDc5LCAxMjgsIDczLCA0NSwgODksIDY1LCAxMjgsIDczLCA0NSwgCi0gICAgNzksIDQ1LCA3MywgMTI4LCA3MywgNDUsIDc5LCAxMjgsIDczLCA0NSwgNjksIDg1LCAxMjgsIDczLCA0NSwgNjYsIDY5LCAKLSAgICA2NSwgNzcsIDEyOCwgNzMsIDQ1LCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgNzMsIDQ1LCA2NSwgMTI4LCA3MiwgOTAsIAotICAgIDkwLCA5MCwgNzEsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA5MCwgODAsIDEyOCwgNzIsIDkwLCA5MCwgCi0gICAgMTI4LCA3MiwgOTAsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDg3LCAxMjgsIDcyLCA5MCwgODQsIDEyOCwgNzIsIDkwLCA3MSwgCi0gICAgMTI4LCA3MiwgODksIDgzLCA4NCwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDcyLCA4OSwgODAsIDc5LCA2OCwgNzMsIDY1LCAKLSAgICA4MywgODQsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzIsIAotICAgIDg5LCA4MCwgNzIsIDY5LCA3OCwgNDUsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCAKLSAgICAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgMjA2LCA3MiwgODgsIDg3LCA3MSwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4MCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgCi0gICAgMTI4LCA3MiwgODgsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDc5LCA4MCwgMTI4LCA3MiwgCi0gICAgODgsIDc5LCAxMjgsIDcyLCA4OCwgNzMsIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDg0LCAxMjgsIDcyLCA4OCwgNzMsIDgwLCAKLSAgICAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODQsIDEyOCwgNzIsIDg4LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAxMjgsIDcyLCA4OCwgNzMsIDEyOCwgNzIsIDg4LCA2OSwgODgsIDEyOCwgNzIsIAotICAgIDg4LCA2OSwgODAsIDEyOCwgNzIsIDg4LCA2OSwgMTI4LCA3MiwgODgsIDY1LCA4OCwgMTI4LCA3MiwgODgsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgODgsIDY1LCA4MCwgMTI4LCA3MiwgODgsIDY1LCAxMjgsIDcyLCA4NywgODUsIDEyOCwgNzIsIDg3LCA2NSwgCi0gICAgNzMsIDgyLCAxMjgsIDcyLCA4NiwgMTI4LCA3MiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzIsIDg1LCA4MiwgNjUsIDc4LCAKLSAgICAxMjgsIDcyLCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDY4LCAxMjgsIDcyLCA4NSwgNzgsIAotICAgIDY4LCA4MiwgNjksIDE5NiwgNzIsIDg1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCA2NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgCi0gICAgNjUsIDIwNiwgNzIsIDg1LCA3NiwgNTAsIDEyOCwgNzIsIDg1LCA3MywgNzMsIDg0LCA3OSwgMTI4LCA3MiwgODUsIDY2LCAKLSAgICA1MCwgMTI4LCA3MiwgODUsIDY2LCAxNzgsIDcyLCA4NSwgNjYsIDEyOCwgNzIsIDg1LCA2NSwgODIsIDY1LCA2OCwgNjgsIAotICAgIDc5LCAxMjgsIDcyLCA4NCwgODMsIDEyOCwgNzIsIDg0LCA3NCwgMTI4LCA3MiwgODIsIDg5LCA4NiwgNzgsIDczLCAxOTMsIAotICAgIDcyLCA4MCwgODcsIDcxLCAxMjgsIDcyLCA4MCwgNjUsIDEyOCwgNzIsIDgwLCAxMjgsIDcyLCA3OSwgODUsIDgzLCAxOTcsIAotICAgIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgODMsIDEyOCwgNzIsIDc5LCA4NSwgODIsIDcxLCA3NiwgNjUsIDgzLCAKLSAgICAyMTEsIDcyLCA3OSwgODUsIDgyLCAxMjgsIDcyLCA3OSwgODUsIDIxMCwgNzIsIDc5LCA4NCwgNjksIDc2LCAxMjgsIDcyLCAKLSAgICA3OSwgODQsIDY1LCAxMjgsIDcyLCA3OSwgODMsIDgwLCA3MywgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA4MywgNjksIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgODMsIDE5NywgNzIsIDc5LCA4MiwgNzgsIDgzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA3NiwgMjE3LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1NCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1NCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgCi0gICAgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIAotICAgIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OSwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OCwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1MiwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgCi0gICAgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIAotICAgIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCAKLSAgICA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MiwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MSwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA0OSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgCi0gICAgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIAotICAgIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCAKLSAgICA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OCwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1NCwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA3MywgMTI4LCA3MiwgNzksIDgyLCAxOTMsIDcyLCA3OSwgNzksIAotICAgIDgyLCA4NSwgMTI4LCA3MiwgNzksIDc5LCA4MCwgMTI4LCA3MiwgNzksIDc5LCA3OCwgMTI4LCA3MiwgNzksIDc5LCA3NSwgCi0gICAgNjksIDE5NiwgNzIsIDc5LCA3OCwgNjksIDg5LCA2NiwgNjksIDY5LCAxMjgsIDcyLCA3OSwgNzgsIDY5LCAyMTcsIDcyLCAKLSAgICA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDY3LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgCi0gICAgNzMsIDE5NSwgNzIsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDc5LCA3NiwgNjgsIDczLCA3OCwgMTk5LCA3MiwgNzksIDc2LCAKLSAgICA2NSwgNzcsIDEyOCwgNzIsIDc5LCA3NiwgNjUsIDIwNSwgNzIsIDc5LCA3NSwgNjUsIDEyOCwgNzIsIDc5LCA3MywgMTI4LCAKLSAgICA3MiwgNzksIDY3LCA3MiwgNzksIDEyOCwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDg4LCAxMjgsIAotICAgIDcyLCA3OCwgODUsIDc5LCAxMjgsIDcyLCA3OCwgNzksIDg4LCAxMjgsIDcyLCA3OCwgNzksIDg0LCAxMjgsIDcyLCA3OCwgCi0gICAgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDgwLCAKLSAgICAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODQsIDEyOCwgNzIsIDc4LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAxMjgsIDcyLCA3OCwgNzMsIDEyOCwgNzIsIDc4LCA2OSwgODgsIDEyOCwgNzIsIAotICAgIDc4LCA2OSwgODAsIDEyOCwgNzIsIDc4LCA2OSwgMTI4LCA3MiwgNzgsIDY1LCA4OCwgMTI4LCA3MiwgNzgsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgNzgsIDY1LCAxMjgsIDcyLCA3NywgODksIDg4LCAxMjgsIDcyLCA3NywgCi0gICAgODksIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgMTI4LCA3MiwgNzcsIDg5LCA4MCwgMTI4LCA3MiwgNzcsIDg5LCAKLSAgICAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCA3NywgODUsIDg0LCAxMjgsIDcyLCA3NywgODUsIDgyLCA4OCwgMTI4LCAKLSAgICA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIDg1LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzIsIAotICAgIDc3LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAxMjgsIDcyLCA3NywgODUsIDEyOCwgNzIsIDc3LCA3OSwgCi0gICAgODgsIDEyOCwgNzIsIDc3LCA3OSwgODQsIDEyOCwgNzIsIDc3LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA3OSwgMTI4LCA3MiwgCi0gICAgNzcsIDczLCA4OCwgMTI4LCA3MiwgNzcsIDczLCA4NCwgMTI4LCA3MiwgNzcsIDczLCA4MCwgMTI4LCA3MiwgNzcsIDczLCAKLSAgICA2OSwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NywgNzMsIDY5LCAxMjgsIDcyLCA3NywgNzMsIAotICAgIDEyOCwgNzIsIDc3LCA2OSwgMTI4LCA3MiwgNzcsIDY1LCA4OCwgMTI4LCA3MiwgNzcsIDY1LCA4NCwgMTI4LCA3MiwgNzcsIAotICAgIDY1LCA4MCwgMTI4LCA3MiwgNzcsIDY1LCAxMjgsIDcyLCA3NiwgODksIDg4LCAxMjgsIDcyLCA3NiwgODksIDg0LCAxMjgsIAotICAgIDcyLCA3NiwgODksIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgMTI4LCA3MiwgNzYsIDg5LCA4MCwgMTI4LCA3MiwgCi0gICAgNzYsIDg5LCAxMjgsIDcyLCA3NiwgODUsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDg0LCAxMjgsIDcyLCA3NiwgODUsIDgyLCAKLSAgICA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgMTI4LCA3MiwgNzYsIDg1LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzIsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCAxMjgsIDcyLCA3NiwgODUsIDEyOCwgNzIsIAotICAgIDc2LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA3OSwgMTI4LCA3MiwgNzYsIDczLCA4OCwgCi0gICAgMTI4LCA3MiwgNzYsIDczLCA4NCwgMTI4LCA3MiwgNzYsIDczLCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgODgsIDEyOCwgCi0gICAgNzIsIDc2LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCAxMjgsIDcyLCA3NiwgNzMsIDEyOCwgNzIsIDc2LCAKLSAgICA2OSwgODgsIDEyOCwgNzIsIDc2LCA2OSwgODAsIDEyOCwgNzIsIDc2LCA2OSwgMTI4LCA3MiwgNzYsIDY1LCA4OCwgMTI4LCAKLSAgICA3MiwgNzYsIDY1LCA4NCwgMTI4LCA3MiwgNzYsIDY1LCA4MCwgMTI4LCA3MiwgNzYsIDY1LCAxMjgsIDcyLCA3NSwgMTI4LCAKLSAgICA3MiwgNzMsIDkwLCA2NiwgMTI4LCA3MiwgNzMsIDgzLCA4NCwgNzksIDgyLCA3MywgMTk1LCA3MiwgNzMsIDgyLCA3MywgODEsIAotICAgIDEyOCwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MywgODAsIDY5LCA2OSwgMTk2LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgyLCA2OSwgCi0gICAgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgNDUsIDE4NSwgNzIsIDczLCA3MSwgNzIsIDQ1LCA3MiwgNjksIDY5LCA3NiwgNjksIAotICAgIDE5NiwgNzIsIDczLCA2OSwgODgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDcyLCA3MywgNjksIDg1LCAyMDAsIDcyLCAKLSAgICA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDcyLCA3MywgMTk1LCA3MiwgNzMsIDY5LCAxMjgsIDcyLCA3MywgNjgsIAotICAgIDczLCA3OCwgMTk5LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNzIsIDczLCA2OCwgNjksIDEyOCwgNzIsIDczLCA2NiwgCi0gICAgNzMsIDgzLCA2NywgODUsIDgzLCAxMjgsIDcyLCA3MiwgODcsIDY1LCAxMjgsIDcyLCA3MiwgODUsIDEyOCwgNzIsIDcyLCAKLSAgICA3MywgMTI4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA3MiwgNzIsIDY5LCAxMjgsIDcyLCA3MiwgNjUsIDY1LCAxMjgsIDcyLCAKLSAgICA3MSwgMTI4LCA3MiwgNjksIDg4LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDgyLCA2NSwgCi0gICAgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA3MiwgNjksIDgyLCA4NSwgODQsIDg1LCAxMjgsIDcyLCAKLSAgICA2OSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgODIsIDc3LCA3MywgODQsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNzMsIAotICAgIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA2OSwgODMsIDEyOCwgNzIsIDY5LCA4MiwgNjksIDEyOCwgCi0gICAgNzIsIDY5LCA4MiwgNjYsIDEyOCwgNzIsIDY5LCA4MiwgNjUsIDY5LCA4NSwgMjA1LCA3MiwgNjksIDc4LCA3MSwgMTI4LCAKLSAgICA3MiwgNjksIDc4LCAxOTksIDcyLCA2OSwgNzcsIDgwLCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgODQsIDEyOCwgNzIsIAotICAgIDY5LCA3NiwgNzcsIDY5LCAyMTIsIDcyLCA2OSwgNzYsIDIwNSwgNzIsIDY5LCA3NiwgNzMsIDY3LCA3OSwgODAsIDg0LCA2OSwgCi0gICAgODIsIDEyOCwgNzIsIDY5LCA3NSwgODUsIDg0LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjksIDczLCA4MywgNjksIDczLCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDg2LCA4OSwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCA3NiwgMjE3LCA3MiwgNjksIAotICAgIDY1LCA4NiwgNjksIDc4LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgMjA2LCA3MiwgNjksIDY1LCA4MiwgODQsIDgzLCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDgyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3MiwgNjksIDY1LCA4MiwgODQsIAotICAgIDEyOCwgNzIsIDY5LCA2NSwgODIsIDIxMiwgNzIsIDY5LCA2NSwgODIsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAKLSAgICAyMDQsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIAotICAgIDc5LCA3OCwgMTk3LCA3MiwgNjksIDY1LCA2OCwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgNDUsIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA2NiwgNjUsIDgzLCAKLSAgICAxOTMsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcyLCA2NSwgODYsIDY5LCAxMjgsIDcyLCA2NSwgODUsIAotICAgIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgNzIsIDY1LCA4NCwgCi0gICAgNjksIDEyOCwgNzIsIDY1LCA4NCwgNjcsIDcyLCA3MywgNzgsIDE5OSwgNzIsIDY1LCA4NCwgNjUsIDE5OCwgNzIsIDY1LCAKLSAgICA4MywgNjksIDIxMCwgNzIsIDY1LCA4MywgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgNzgsIAotICAgIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgMjA2LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIDEyOCwgCi0gICAgNzIsIDY1LCA4MiwgNzUsIDc2LCA2OSwgNjUsIDIwNiwgNzIsIDY1LCA4MiwgNjgsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcyLCAKLSAgICA2NSwgODIsIDE5NiwgNzIsIDY1LCA4MCwgODAsIDIxNywgNzIsIDY1LCA3OCwgODUsIDc4LCA3OSwgMjA3LCA3MiwgNjUsIAotICAgIDc4LCA3MSwgOTAsIDcyLCA3OSwgMjEzLCA3MiwgNjUsIDc4LCA2OCwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDIxMSwgCi0gICAgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgMTI4LCA3MiwgNjUsIDc4LCAKLSAgICA2OCwgNjYsIDY1LCA3MSwgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMTI4LCA3MiwgNjUsIDc4LCA0NSwgNjUsIDc1LCA2NSwgODQsIAotICAgIDEyOCwgNzIsIDY1LCA3NywgOTAsIDY1LCAxMjgsIDcyLCA2NSwgNzcsIDgzLCA4NCwgNjksIDIxMCwgNzIsIDY1LCA3NywgCi0gICAgNzcsIDY5LCA4MiwgMTI4LCA3MiwgNjUsIDc3LCA3NywgNjksIDIxMCwgNzIsIDY1LCA3NywgNjYsIDg1LCA4MiwgNzEsIDY5LCAKLSAgICA4MiwgMTI4LCA3MiwgNjUsIDc2LCA4MSwgNjUsIDEyOCwgNzIsIDY1LCA3NiwgNzksIDEyOCwgNzIsIDY1LCA3NiwgNzAsIAotICAgIDQ1LCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgNzIsIDY1LCA3NiwgNzAsIDEyOCwgNzIsIDY1LCA3NiwgNjYsIDY5LCA4MiwgCi0gICAgNjgsIDEyOCwgNzIsIDY1LCA3NiwgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA3MywgODQsIDg1LCAxMjgsIDcyLCAKLSAgICA2NSwgNzMsIDgyLCA2NywgODUsIDg0LCAxMjgsIDcyLCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA2NSwgNzEsIDc2LCA2NSwgCi0gICAgMjE4LCA3MiwgNjUsIDcxLCA3NiwgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA3MiwgNjUsIDcwLCAKLSAgICA4NSwgNzUsIDcyLCAxMjgsIDcyLCA2NSwgNjksIDcxLCAyMDQsIDcyLCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjUsIAotICAgIDY1LCA3NywgMTI4LCA3MiwgNjUsIDE5MywgNzIsIDY1LCA0NSwgNzIsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU2LCAxMjgsIAotICAgIDcyLCA0OCwgNDgsIDU1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgMTI4LCA3MiwgCi0gICAgNDgsIDQ4LCA1MywgMTI4LCA3MiwgNDgsIDQ4LCA1MiwgMTI4LCA3MiwgNDgsIDQ4LCA1MSwgMTI4LCA3MiwgNDgsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MiwgNDgsIDQ4LCA0OSwgMTI4LCA3MiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzEsIDg5LCA4NSwgMTI4LCAKLSAgICA3MSwgODksIDc5LCA3OCwgMTI4LCA3MSwgODksIDc5LCAxMjgsIDcxLCA4OSwgNzMsIDEyOCwgNzEsIDg5LCA3MCwgMjEzLCAKLSAgICA3MSwgODksIDY5LCA2OSwgMTI4LCA3MSwgODksIDY1LCA4MywgMTI4LCA3MSwgODksIDY1LCA2NSwgMTI4LCA3MSwgODksIAotICAgIDY1LCAxMjgsIDcxLCA4OSwgMTI4LCA3MSwgODcsIDg1LCAxMjgsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDg3LCA2OSwgNjksIAotICAgIDEyOCwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgODcsIDY1LCAxMjgsIDcxLCA4NiwgMTI4LCAKLSAgICA3MSwgODUsIDgyLCA4NSwgODMsIDcyLCAxMjgsIDcxLCA4NSwgODIsIDg1LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA2NSwgNzcsIAotICAgIDg1LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA4NSwgODIsIDU1LCAxMjgsIDcxLCA4NSwgNzgsIDg1LCAxMjgsIDcxLCA4NSwgCi0gICAgNzgsIDIxMywgNzEsIDg1LCAyMDUsIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCA3MywgODQsIDY1LCA4MiwgMTI4LCA3MSwgCi0gICAgODUsIDE5OSwgNzEsIDg1LCA2OSwgNzIsIDEyOCwgNzEsIDg1LCA2OSwgMjAwLCA3MSwgODUsIDY4LCAxMjgsIDcxLCA4NSwgCi0gICAgMTk2LCA3MSwgODUsIDY1LCA4MiwgNjgsIDgzLCA3NywgNjUsIDc4LCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDY4LCAKLSAgICA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgCi0gICAgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjUsIDc4LCAyMDEsIDcxLCA4NSwgMTkzLCA3MSwgODUsIDE3OCwgNzEsIDg0LCA2OSwgCi0gICAgMjEwLCA3MSwgODMsIDg1LCA3NywgMTI4LCA3MSwgODMsIDg1LCAyMDUsIDcxLCA4MiwgMjEzLCA3MSwgODIsIDc5LCA4NywgCi0gICAgNzMsIDc4LCAxOTksIDcxLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzEsIDgyLCA3OSwgNzgsIDg0LCA3MiwgNzMsIDgzLCAKLSAgICA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MSwgODIsIDczLCA3OCwgNzgsIDczLCA3OCwgMTk5LCA3MSwgODIsIDczLCA3NywgNjUsIAotICAgIDY3LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA2OSwgNzEsIDc5LCA4MiwgNzMsIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY5LCAKLSAgICAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIAotICAgIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDIwNiwgCi0gICAgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgMjEwLCA3MSwgODIsIDY5LCA2NSwgMjEyLCA3MSwgODIsIDY1LCA4NiwgNjksIDg5LCAKLSAgICA2NSwgODIsIDE5NiwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3MSwgODIsIAotICAgIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDEyOCwgNzEsIDgyLCAKLSAgICA2NSwgODYsIDE5NywgNzEsIDgyLCA2NSwgODQsIDY5LCA4MiwgMTI4LCA3MSwgODIsIDY1LCA4MywgODMsIDEyOCwgNzEsIAotICAgIDgyLCA2NSwgODMsIDIxMSwgNzEsIDgyLCA2NSwgODAsIDcyLCA2OSwgNzcsIDE5NywgNzEsIDgyLCA2NSwgODAsIDY5LCA4MywgCi0gICAgMTI4LCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNzEsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDcxLCA4MiwgNjUsIDY4LCAKLSAgICA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDgyLCA2NSwgNjcsIDY5LCAxMjgsIDcxLCA4MiwgNjUsIDY3LCAxOTcsIAotICAgIDcxLCA4MCwgNjUsIDEyOCwgNzEsIDc5LCA4MiwgODQsIDcyLCA3NywgNzMsIDc1LCA3OSwgMjA2LCA3MSwgNzksIDgyLCA4NCwgCi0gICAgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDg0LCA2OSwgODIsIDczLCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODMsIDg5LCAKLSAgICA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNzEsIDc5LCA4MiwgNzEsIAotICAgIDczLCAxMjgsIDcxLCA3OSwgODIsIDY1LCAxMjgsIDcxLCA3OSwgNzksIDE5NiwgNzEsIDc5LCA3OCwgNzEsIDEyOCwgNzEsIAotICAgIDc5LCA3NiwgNjgsIDEyOCwgNzEsIDc5LCA3NSwgMTI4LCA3MSwgNzksIDczLCA3OCwgMTk5LCA3MSwgNzksIDY2LCA3NiwgCi0gICAgNzMsIDc4LCAxMjgsIDcxLCA3OSwgNjUsIDc2LCAxMjgsIDcxLCA3OSwgNjUsIDIwNCwgNzEsIDc5LCA2NSwgMTI4LCA3MSwgCi0gICAgNzgsIDg5LCA3MywgODMsIDEyOCwgNzEsIDc4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3MSwgNzYsIDc5LCAKLSAgICA4NywgNzMsIDc4LCAxOTksIDcxLCA3NiwgNzksIDg0LCA4NCwgNjUsIDIwNCwgNzEsIDc2LCA3OSwgNjYsIDE5NywgNzEsIAotICAgIDc2LCA3MywgODMsIDgzLCA2NSwgNzgsIDY4LCAyMDcsIDcxLCA3NiwgNjksIDczLCA2NywgMjAwLCA3MSwgNzYsIDY1LCA3MSwgCi0gICAgNzksIDc2LCA3MywgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIDcxLCA3NCwgNjksIDEyOCwgNzEsIDczLCA4OCwgMTI4LCA3MSwgCi0gICAgNzMsIDg0LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIDcxLCA3MywgODMsIDIwMCwgNzEsIDczLCA4MywgNjUsIDc2LCAKLSAgICAxMjgsIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDcxLCA3MywgODIsIDc2LCAxMjgsIDcxLCA3MywgODIsIAotICAgIDUxLCAxMjgsIDcxLCA3MywgODIsIDE3OSwgNzEsIDczLCA4MiwgNTAsIDEyOCwgNzEsIDczLCA4MiwgMTc4LCA3MSwgNzMsIAotICAgIDgwLCAxMjgsIDcxLCA3MywgNzgsIDczLCA3MywgMTI4LCA3MSwgNzMsIDc3LCA2OSwgNzYsIDEyOCwgNzEsIDczLCA3NywgCi0gICAgNjksIDIwNCwgNzEsIDczLCA3NywgMTI4LCA3MSwgNzMsIDcxLCA2NSwgMTI4LCA3MSwgNzMsIDY5LCA4NCwgMTI4LCA3MSwgCi0gICAgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgNjYsIDc5LCA4NSwgMjExLCA3MSwgNzMsIDY2LCA2NSwgMTI4LCAKLSAgICA3MSwgNzMsIDUyLCAxMjgsIDcxLCA3MywgMTgwLCA3MSwgNzIsIDkwLCAxMjgsIDcxLCA3MiwgODcsIDY1LCAxMjgsIDcxLCAKLSAgICA3MiwgODUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCAxOTMsIDcxLCA3MiwgODUsIDEyOCwgNzEsIAotICAgIDcyLCA3OSwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODMsIDg0LCAxMjgsIDcxLCA3MiwgNzksIDEyOCwgNzEsIDcyLCA3MywgCi0gICAgMTI4LCA3MSwgNzIsIDcyLCA2NSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDc4LCAKLSAgICAxMjgsIDcxLCA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIAotICAgIDcyLCA2OSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjksIDg0LCAxMjgsIDcxLCA3MiwgNjksIDY5LCAKLSAgICAxMjgsIDcxLCA3MiwgNjksIDEyOCwgNzEsIDcyLCAxOTcsIDcxLCA3MiwgNjUsIDg5LCA3OCwgMTI4LCA3MSwgNzIsIDY1LCAKLSAgICA4MiwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDgwLCAxMjgsIDcxLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIAotICAgIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCA4NSwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDEyOCwgCi0gICAgNzEsIDcyLCA2NSwgNzMsIDIwNiwgNzEsIDcyLCA2NSwgNjgsIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDc3LCA2NSwgNjksIAotICAgIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDcxLCA4NywgNjksIDY5LCAxMjgsIAotICAgIDcxLCA3MSwgODcsIDY5LCAxMjgsIDcxLCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgCi0gICAgNzEsIDg1LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4NCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzEsIDcxLCAKLSAgICA4NSwgODIsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDEyOCwgNzEsIDcxLCA3OSwgODgsIDEyOCwgNzEsIDcxLCA3OSwgCi0gICAgODQsIDEyOCwgNzEsIDcxLCA3OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgODgsIDEyOCwgNzEsIDcxLCA3MywgODQsIDEyOCwgCi0gICAgNzEsIDcxLCA3MywgNjksIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgMTI4LCAKLSAgICA3MSwgNzEsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDY5LCA4NCwgMTI4LCA3MSwgNzEsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIAotICAgIDY1LCA4OCwgMTI4LCA3MSwgNzEsIDY1LCA4NCwgMTI4LCA3MSwgNzEsIDY1LCA2NSwgMTI4LCA3MSwgNjksIDg0LCAxOTMsIAotICAgIDcxLCA2OSwgODMsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgCi0gICAgODQsIDczLCA3OCwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCAyMDYsIDcxLCA2OSwgODMsIDcyLCA1MCwgMTI4LCAKLSAgICA3MSwgNjksIDgyLCA4MywgNzIsIDY1LCA4OSwgNzMsIDc3LCAxMjgsIDcxLCA2OSwgODIsIDc3LCA2NSwgMjA2LCA3MSwgNjksIAotICAgIDgyLCA2OSwgODMsIDcyLCAxMjgsIDcxLCA2OSwgODIsIDY5LCA4MywgMjAwLCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgMTk1LCA3MSwgNjksIDc4LCAKLSAgICA4NCwgNzYsIDE5NywgNzEsIDY5LCA3OCwgNzMsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcxLCA2OSwgNzgsIDczLCA3NSwgCi0gICAgMjAxLCA3MSwgNjksIDc4LCA2OSwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzcsIDczLCA3OCwgNzMsIDEyOCwgNzEsIDY5LCAKLSAgICA3NywgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgNjksIDIwNSwgNzEsIDY5LCA2OCwgNzksIDc2LCA2NSwgCi0gICAgMTI4LCA3MSwgNjksIDY4LCA2OSwgMTI4LCA3MSwgNjksIDY2LCAyMDcsIDcxLCA2OSwgNjYsIDE5MywgNzEsIDY5LCA2NSwgCi0gICAgODIsIDEyOCwgNzEsIDY5LCA2NSwgMjEwLCA3MSwgNjgsIDY1LCA3OCwgMTI4LCA3MSwgNjcsIDczLCA3MSwgMTI4LCA3MSwgCi0gICAgNjcsIDY1LCAyMDYsIDcxLCA2NiwgNzksIDc4LCAxMjgsIDcxLCA2NiwgNzMsIDY5LCAxOTcsIDcxLCA2NiwgNjksIDg1LCAKLSAgICA4OCwgMTI4LCA3MSwgNjYsIDY5LCA4NCwgMTI4LCA3MSwgNjYsIDY1LCA4OSwgNzMsIDEyOCwgNzEsIDY2LCA2NSwgNzUsIAotICAgIDg1LCA4MiwgODUsIDc4LCA2OSwgNzgsIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgODUsIDc1LCA3MywgCi0gICAgODQsIDg0LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCAxMjgsIDcxLCAKLSAgICA2NSwgODUsIDc4LCA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIAotICAgIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MSwgNjUsIDg0LCA2OSwgMTI4LCA3MSwgNjUsIDgzLCA3MiwgCi0gICAgNjUsIDc4LCAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIDc4LCA3MywgMTI4LCA3MSwgNjUsIDgyLCA3OSwgNzgsIAotICAgIDEyOCwgNzEsIDY1LCA4MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzEsIDY1LCA4MiwgNjgsIDY5LCA3OCwgMTI4LCA3MSwgCi0gICAgNjUsIDgyLCA1MSwgMTI4LCA3MSwgNjUsIDgwLCA4MCwgNjksIDE5NiwgNzEsIDY1LCAyMDgsIDcxLCA2NSwgNzgsIDc3LCAKLSAgICA2NSwgMTI4LCA3MSwgNjUsIDc4LCA3MSwgNzMsIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDY4LCAxOTMsIDcxLCA2NSwgNzgsIAotICAgIDUwLCAxMjgsIDcxLCA2NSwgNzgsIDE3OCwgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCA2NSwgCi0gICAgMTI4LCA3MSwgNjUsIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2OSwgMTI4LCA3MSwgNjUsIDc3LCAxOTcsIDcxLCA2NSwgCi0gICAgNzcsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDIwNCwgNzEsIDY1LCAKLSAgICA3MSwgMTI4LCA3MSwgNjUsIDcwLCAxMjgsIDcxLCA2NSwgMTk4LCA3MSwgNjUsIDY5LCA4NCwgODQsIDY1LCA0NSwgODAsIAotICAgIDczLCA3NiwgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNjgsIDc5LCA3NiwgMTI4LCA3MSwgNjUsIDY4LCAxMjgsIDcxLCA2NSwgCi0gICAgMTk2LCA3MSwgNjUsIDY2LCA2NSwgMTI4LCA3MSwgNjUsIDY2LCAxOTMsIDcxLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MSwgCi0gICAgNjUsIDE3OCwgNzEsIDQ4LCA1MywgNTIsIDEyOCwgNzEsIDQ4LCA1MywgNTEsIDEyOCwgNzEsIDQ4LCA1MywgNTAsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MywgNDksIDEyOCwgNzEsIDQ4LCA1MywgNDgsIDEyOCwgNzEsIDQ4LCA1MiwgNTcsIDEyOCwgNzEsIDQ4LCAKLSAgICA1MiwgNTYsIDEyOCwgNzEsIDQ4LCA1MiwgNTUsIDEyOCwgNzEsIDQ4LCA1MiwgNTQsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIAotICAgIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCAxMjgsIDcxLCA0OCwgNTIsIDUyLCAxMjgsIDcxLCA0OCwgNTIsIDUxLCA2NSwgCi0gICAgMTI4LCA3MSwgNDgsIDUyLCA1MSwgMTI4LCA3MSwgNDgsIDUyLCA1MCwgMTI4LCA3MSwgNDgsIDUyLCA0OSwgMTI4LCA3MSwgCi0gICAgNDgsIDUyLCA0OCwgMTI4LCA3MSwgNDgsIDUxLCA1NywgMTI4LCA3MSwgNDgsIDUxLCA1NiwgMTI4LCA3MSwgNDgsIDUxLCAKLSAgICA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIAotICAgIDU0LCAxMjgsIDcxLCA0OCwgNTEsIDUzLCAxMjgsIDcxLCA0OCwgNTEsIDUyLCAxMjgsIDcxLCA0OCwgNTEsIDUxLCAxMjgsIAotICAgIDcxLCA0OCwgNTEsIDUwLCAxMjgsIDcxLCA0OCwgNTEsIDQ5LCAxMjgsIDcxLCA0OCwgNTEsIDQ4LCAxMjgsIDcxLCA0OCwgCi0gICAgNTAsIDU3LCAxMjgsIDcxLCA0OCwgNTAsIDU2LCAxMjgsIDcxLCA0OCwgNTAsIDU1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCAKLSAgICA2NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgMTI4LCA3MSwgNDgsIDUwLCA1MywgMTI4LCA3MSwgNDgsIDUwLCA1MiwgMTI4LCAKLSAgICA3MSwgNDgsIDUwLCA1MSwgMTI4LCA3MSwgNDgsIDUwLCA1MCwgMTI4LCA3MSwgNDgsIDUwLCA0OSwgMTI4LCA3MSwgNDgsIAotICAgIDUwLCA0OCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDEyOCwgNzEsIDQ4LCA0OSwgNTcsIDEyOCwgNzEsIDQ4LCA0OSwgCi0gICAgNTYsIDEyOCwgNzEsIDQ4LCA0OSwgNTUsIDEyOCwgNzEsIDQ4LCA0OSwgNTQsIDEyOCwgNzEsIDQ4LCA0OSwgNTMsIDEyOCwgCi0gICAgNzEsIDQ4LCA0OSwgNTIsIDEyOCwgNzEsIDQ4LCA0OSwgNTEsIDEyOCwgNzEsIDQ4LCA0OSwgNTAsIDEyOCwgNzEsIDQ4LCAKLSAgICA0OSwgNDksIDY1LCAxMjgsIDcxLCA0OCwgNDksIDQ5LCAxMjgsIDcxLCA0OCwgNDksIDQ4LCAxMjgsIDcxLCA0OCwgNDgsIAotICAgIDU3LCAxMjgsIDcxLCA0OCwgNDgsIDU2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgCi0gICAgNjUsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCAKLSAgICAxMjgsIDcxLCA0OCwgNDgsIDUzLCAxMjgsIDcxLCA0OCwgNDgsIDUyLCAxMjgsIDcxLCA0OCwgNDgsIDUxLCAxMjgsIDcxLCAKLSAgICA0OCwgNDgsIDUwLCAxMjgsIDcxLCA0OCwgNDgsIDQ5LCAxMjgsIDcwLCA4OSwgODgsIDEyOCwgNzAsIDg5LCA4NCwgMTI4LCAKLSAgICA3MCwgODksIDgwLCAxMjgsIDcwLCA4OSwgNjUsIDEyOCwgNzAsIDg3LCA3MywgMTI4LCA3MCwgODcsIDY5LCA2OSwgMTI4LCAKLSAgICA3MCwgODcsIDY5LCAxMjgsIDcwLCA4NywgNjUsIDY1LCAxMjgsIDcwLCA4NywgNjUsIDEyOCwgNzAsIDg2LCA4MywgNTEsIAotICAgIDEyOCwgNzAsIDg2LCA4MywgNTAsIDEyOCwgNzAsIDg2LCA4MywgNDksIDEyOCwgNzAsIDg1LCA4OCwgMTI4LCA3MCwgODUsIAotICAgIDg0LCAxMjgsIDcwLCA4NSwgODMsIDY5LCAxMjgsIDcwLCA4NSwgODMsIDE5MywgNzAsIDg1LCA4MiwgODgsIDEyOCwgNzAsIAotICAgIDg1LCA4MCwgMTI4LCA3MCwgODUsIDc4LCA2OSwgODIsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgNjUsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDcwLCA4NSwgNzYsIDc2LCA3OCwgNjksIDgzLCAKLSAgICA4MywgMTI4LCA3MCwgODUsIDc2LCAyMDQsIDcwLCA4NSwgNzQsIDczLCAxMjgsIDcwLCA4NSwgNjksIDg0LCAxMjgsIDcwLCAKLSAgICA4NSwgNjksIDIwNCwgNzAsIDg1LCA2OSwgMTI4LCA3MCwgODQsIDcyLCA3OSwgODIsIDE5MywgNzAsIDgyLCA3OSwgODcsIAotICAgIDc4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA4MiwgNzksIDg3LCA3OCwgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDg3LCA3OCwgCi0gICAgMTI4LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzAsIDgyLCA3OSwgNzgsIDg0LCAKLSAgICA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDIwNSwgNzAsIDgyLCA3OSwgNzEsIDEyOCwgNzAsIAotICAgIDgyLCA3OSwgMTk5LCA3MCwgODIsIDczLCA4NCwgODUsIDEyOCwgNzAsIDgyLCA3MywgNjksIDgzLCAxMjgsIDcwLCA4MiwgCi0gICAgNzMsIDY5LCAxOTYsIDcwLCA4MiwgNzMsIDY3LCA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzAsIDgyLCA2OSwgODQsIDY2LCAKLSAgICA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3MCwgODIsIDY5LCA3OCwgNjcsIDIwMCwgNzAsIDgyLCA2OSwgNjksIDEyOCwgNzAsIAotICAgIDgyLCA2OSwgMTk3LCA3MCwgODIsIDY1LCA3OCwgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgNzAsIDgyLCA2NSwgCi0gICAgNzEsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCAKLSAgICA2NywgODQsIDczLCA3OSwgMjA2LCA3MCwgNzksIDg4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgMjA2LCA3MCwgNzksIDg1LCA4MiwgNDUsIDg0LCA3MiwgNzMsIDgyLCAKLSAgICA4NCwgODksIDEyOCwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc5LCA4NSwgODIsIAotICAgIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3OSwgCi0gICAgODUsIDIxMCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODcsIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIAotICAgIDcwLCA3OSwgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgCi0gICAgNzksIDgyLCA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIDE5NiwgNzAsIDc5LCAKLSAgICA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgMTI4LCA3MCwgNzksIAotICAgIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIDcwLCA3OSwgNzksIDg0LCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAKLSAgICAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAxOTcsIDcwLCA3OSwgNzksIDg0LCA2NiwgNjUsIDc2LCA3NiwgCi0gICAgMTI4LCA3MCwgNzksIDc5LCA4NCwgMTI4LCA3MCwgNzksIDc5LCA2OCwgMTI4LCA3MCwgNzksIDc5LCAxMjgsIDcwLCA3OSwgCi0gICAgNzgsIDcxLCA3NywgNjUsIDc4LCAxMjgsIDcwLCA3OSwgNzcsIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDg5LCAxMjgsIDcwLCAKLSAgICA3OSwgNzYsIDc2LCA3OSwgODcsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCA4MiwgMTI4LCA3MCwgNzksIAotICAgIDc2LCA2OCwgNjksIDE5NiwgNzAsIDc5LCA3MSwgNzEsIDg5LCAxMjgsIDcwLCAyMDcsIDcwLCA3NywgMTI4LCA3MCwgNzYsIAotICAgIDg5LCAxMjgsIDcwLCA3NiwgODUsIDg0LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc2LCA4NSwgODQsIDY5LCAKLSAgICAxMjgsIDcwLCA3NiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzAsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MCwgNzYsIAotICAgIDc5LCA4NywgNjksIDIxMCwgNzAsIDc2LCA3OSwgODUsIDgyLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2OSwgCi0gICAgODQsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjUsIDIwNCwgNzAsIDc2LCA3OSwgODAsIDgwLCAyMTcsIDcwLCAKLSAgICA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIDczLCA4MCwgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIAotICAgIDcwLCA3NiwgNjksIDg4LCA4NSwgODMsIDEyOCwgNzAsIDc2LCA2OSwgODgsIDY5LCAxOTYsIDcwLCA3NiwgNjksIDg1LCA4MiwgCi0gICAgNDUsIDY4LCA2OSwgNDUsIDc2LCA3MywgODMsIDEyOCwgNzAsIDc2LCA2NSwgODQsIDg0LCA2OSwgNzgsIDY5LCAxOTYsIDcwLCAKLSAgICA3NiwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIAotICAgIDcwLCA3NiwgNjUsIDcxLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgCi0gICAgNTIsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCAKLSAgICA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDEyOCwgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIAotICAgIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgCi0gICAgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3MywgODYsIDY5LCAKLSAgICA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzMsIDg2LCAxOTcsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcwLCA3MywgODQsIAotICAgIDEyOCwgNzAsIDczLCA4MywgODQsIDY5LCAxOTYsIDcwLCA3MywgODMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MywgCi0gICAgNzgsIDE5OSwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAKLSAgICAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgODksIDY5LCAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIAotICAgIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgNzAsIDczLCA4MiwgNzMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgCi0gICAgODIsIDc1LCA4MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIDc5LCA4MiwgMjAzLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCAKLSAgICA3MCwgNzMsIDgyLCAxOTcsIDcwLCA3MywgODAsIDEyOCwgNzAsIDczLCA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3MywgNzgsIAotICAgIDcxLCA2OSwgODIsIDc4LCA2NSwgNzMsIDc2LCA4MywgMTI4LCA3MCwgNzMsIDc4LCA3MSwgNjksIDgyLCA2OSwgMTk2LCA3MCwgCi0gICAgNzMsIDc4LCA2NSwgNzgsIDY3LCA3MywgNjUsIDc2LCAxMjgsIDcwLCA3MywgNzYsIDc2LCA2OSwgODIsIDEyOCwgNzAsIDczLCAKLSAgICA3NiwgNzYsIDY5LCAxOTYsIDcwLCA3MywgNzYsIDc2LCAxMjgsIDcwLCA3MywgNzYsIDIwNCwgNzAsIDczLCA3NiwgMTk3LCAKLSAgICA3MCwgNzMsIDczLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAotICAgIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCi0gICAgMTk3LCA3MCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIDczLCA3MCwgODQsIDg5LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAKLSAgICAyMTcsIDcwLCA3MywgNzAsIDg0LCA3MiwgODMsIDEyOCwgNzAsIDczLCA3MCwgODQsIDcyLCAxMjgsIDcwLCA3MywgNzAsIAotICAgIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3MywgNzAsIDg0LCA2OSwgNjksIDIwNiwgNzAsIDczLCA2OSwgNzYsIDY4LCAKLSAgICAxMjgsIDcwLCA3MiwgODQsIDc5LCA4MiwgMTkzLCA3MCwgNzAsIDc2LCAxMjgsIDcwLCA3MCwgNzMsIDEyOCwgNzAsIDY5LCAKLSAgICA4NSwgODgsIDEyOCwgNzAsIDY5LCA4NSwgNzAsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3MCwgNjksIDgzLCA4NCwgNzMsIAotICAgIDg2LCA2NSwgNzYsIDEyOCwgNzAsIDY5LCA4MiwgODIsIDg5LCAxMjgsIDcwLCA2OSwgODIsIDgyLCA3MywgMjExLCA3MCwgCi0gICAgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCAxOTMsIDcwLCA2OSwgNzksIAotICAgIDIwMCwgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc4LCA2NywgNjksIDEyOCwgNzAsIDY5LCA3NywgNzMsIDc4LCA3MywgCi0gICAgNzgsIDE5NywgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3MCwgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCAKLSAgICA3NiwgNzYsIDc5LCA4NywgODMsIDcyLCA3MywgODAsIDEyOCwgNzAsIDY5LCA3MywgMTI4LCA3MCwgNjksIDcyLCAyMTMsIAotICAgIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDY5LCAyMDAsIDcwLCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3MCwgNjksIDY5LCA2OCwgCi0gICAgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNjksIDEyOCwgNzAsIDY5LCA2NiwgODIsIDg1LCA2NSwgODIsIDg5LCAKLSAgICAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIAotICAgIDY5LCA2NSwgODIsIDc4LCAxMjgsIDcwLCA2OSwgNjUsIDgyLCA3MCwgODUsIDIwNCwgNzAsIDY5LCA2NSwgODIsIDEyOCwgCi0gICAgNzAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzAsIDY1LCA4OSwgMTI4LCA3MCwgNjUsIDg4LCAxMjgsIDcwLCAKLSAgICA2NSwgMjE2LCA3MCwgNjUsIDg0LCA3MywgNzEsIDg1LCA2OSwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIAotICAgIDcwLCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzAsIDY1LCA4NCwgCi0gICAgNzIsIDY1LCA4NCwgNjUsIDIwNiwgNzAsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCAKLSAgICA2NSwgODQsIDEyOCwgNzAsIDY1LCA4MiwgODMsIDIwMSwgNzAsIDY1LCA4MSwgMTI4LCA3MCwgNjUsIDgwLCAxMjgsIDcwLCAKLSAgICA2NSwgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzgsIDY5LCA4MiwgNzksIDgzLCA3MywgMjExLCA3MCwgNjUsIDc4LCAxMjgsIAotICAgIDcwLCA2NSwgNzcsIDczLCA3NiwgODksIDEyOCwgNzAsIDY1LCA3NiwgNzYsIDczLCA3OCwgMTk5LCA3MCwgNjUsIDc2LCA3NiwgCi0gICAgNjksIDIwNiwgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCAKLSAgICA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgODIsIDg5LCAxMjgsIAotICAgIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA2NywgCi0gICAgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIAotICAgIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgCi0gICAgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCAKLSAgICA3MCwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzAsIDQ4LCA1MywgNTEsIDEyOCwgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIAotICAgIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NiwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIDQ4LCA1MywgNDgsIDEyOCwgNzAsIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIAotICAgIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgMTI4LCA3MCwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgCi0gICAgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCAxMjgsIDcwLCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIAotICAgIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCA1NCwgMTI4LCA3MCwgNDgsIDUxLCA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgCi0gICAgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCA3MCwgNDgsIDUxLCA1MCwgMTI4LCA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIAotICAgIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIAotICAgIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCAxMjgsIDcwLCA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgCi0gICAgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIDU2LCAxMjgsIDcwLCA0OCwgNDksIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAKLSAgICAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIDcwLCA0OCwgNDksIDUyLCAxMjgsIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCAKLSAgICA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIAotICAgIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCA1NywgMTI4LCA3MCwgNDgsIDQ4LCA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgCi0gICAgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCA3MCwgNDgsIDQ4LCA1MywgMTI4LCA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgCi0gICAgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCAKLSAgICA0OCwgNDksIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIDY5LCA5MCwgNjksIDIwNiwgNjksIDkwLCAKLSAgICAxMjgsIDY5LCA4OSwgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjksIDcxLCA3NiwgNjUsIDgzLCA4MywgNjksIDgzLCAxMjgsIAotICAgIDY5LCA4OSwgNjYsIDY5LCA4OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgCi0gICAgODgsIDg0LCA4MiwgNjUsIDg0LCA2OSwgODIsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDY5LCA4OCwgODQsIAotICAgIDgyLCA2NSwgNDUsIDc2LCA3OSwgMjE1LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCA3MiwgNzMsIDcxLCAyMDAsIDY5LCA4OCwgCi0gICAgODQsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA4NCwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjksIDg4LCAKLSAgICA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDc2LCA2OSwgODMsIDIxMSwgNjksIDg4LCA4MCwgNzksIDc4LCA2OSwgCi0gICAgNzgsIDIxMiwgNjksIDg4LCA3OSwgMTI4LCA2OSwgODgsIDIwNywgNjksIDg4LCA3MywgODMsIDg0LCA4MywgMTI4LCA2OSwgCi0gICAgODgsIDczLCA4MywgODQsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCAKLSAgICA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCAyMDYsIDY5LCA4OCwgNjcsIDcyLCA2NSwgNzgsIDcxLCA2OSwgMTI4LCA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAKLSAgICAxMjgsIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgNjksIDg3LCA2OSwgMTI4LCA2OSwgODYsIAotICAgIDY5LCA4MiwgNzEsIDgyLCA2OSwgNjksIDIwNiwgNjksIDg2LCA2OSwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDg1LCA4MiwgCi0gICAgNzksIDgwLCA2OSwgNjUsIDIwNiwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNDUsIDY1LCA3MCwgODIsIDczLCA2NywgNjUsIAotICAgIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgMjE3LCA2OSwgODUsIDgyLCAKLSAgICAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDc5LCAxMjgsIDY5LCAKLSAgICA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgNjksIDg1LCA0NSwgNjksIDEyOCwgNjksIAotICAgIDg1LCA0NSwgNjUsIDEyOCwgNjksIDg0LCA4OCwgMTI4LCA2OSwgODQsIDc4LCA2NSwgNzIsIDg0LCA2NSwgMTI4LCA2OSwgCi0gICAgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIDIwNiwgNjksIDg0LCA2OSwgODIsIDc4LCA3MywgODQsIDg5LCAKLSAgICAxMjgsIDY5LCA4NCwgNjYsIDEyOCwgNjksIDgzLCA4NSwgNzUsIDg1LCA4NSwgNjgsIDc5LCAxMjgsIDY5LCA4MywgODQsIAotICAgIDczLCA3NywgNjUsIDg0LCA2OSwgODMsIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIDY5LCAxOTYsIDY5LCA4MywgCi0gICAgNzIsIDY5LCA1MSwgMTI4LCA2OSwgODMsIDcyLCA1MCwgNDksIDEyOCwgNjksIDgzLCA3MiwgMTc4LCA2OSwgODMsIDcyLCAKLSAgICA0OSwgNTQsIDEyOCwgNjksIDgzLCA2NywgNjUsIDgwLCA2OSwgMTI4LCA2OSwgODMsIDY3LCAxMjgsIDY5LCA4MywgNjUsIAotICAgIDEyOCwgNjksIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIDY2LCA2NSwgODIsIDgyLCA2OSwgCi0gICAgMTk2LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4MiwgNzMsIDc4LCA1MCwgMTI4LCA2OSwgODIsIDcxLCAxMjgsIDY5LCA4MiwgCi0gICAgNjUsIDgzLCAxOTcsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIDIxMiwgNjksIDgxLCA4NSwgNzMsIDY4LCAKLSAgICAxMjgsIDY5LCA4MSwgODUsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDY5LCA4MSwgODUsIDY1LCA3NiwgODMsIAotICAgIDEyOCwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDY5LCA4MSwgODUsIDY1LCA3NiwgMTI4LCA2OSwgODAsIDgzLCA3MywgCi0gICAgNzYsIDc5LCA3OCwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAyMDYsIDY5LCA4MCwgNzksIDY3LCA3MiwgMTI4LCAKLSAgICA2OSwgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDY5LCA4MCwgNzMsIDY4LCA2NSwgODUsIDgyLCA2OSwgCi0gICAgNjUsIDIwNiwgNjksIDgwLCA2OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCAKLSAgICA3NywgNjUsIDEyOCwgNjksIDc5LCA4NCwgMTI4LCA2OSwgNzksIDc3LCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCAKLSAgICA2OSwgNzksIDc2LCAxMjgsIDY5LCA3OSwgNzIsIDEyOCwgNjksIDc4LCA4OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIAotICAgIDc5LCA4MCwgNjksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgODAsIDE5NywgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgCi0gICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAKLSAgICA0NSwgNDksIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY5LCA3OCwgODQsIAotICAgIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAKLSAgICAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIAotICAgIDg0LCA2OSwgMjEwLCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgMTI4LCA2OSwgNzgsIDgxLCAxMjgsIDY5LCA3OCwgCi0gICAgNzksIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIAotICAgIDEyOCwgNjksIDc4LCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2OSwgNzgsIDY4LCA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAKLSAgICAxMjgsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNjksIDc4LCA2OCwgNjksIAotICAgIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCA4MywgMTI4LCA2OSwgCi0gICAgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDczLCA3OCwgMTk5LCAKLSAgICA2OSwgNzgsIDY3LCAxMjgsIDY5LCA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIAotICAgIDczLCA3OSwgMjExLCA2OSwgNzcsIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDg0LCA3MywgMTk1LCA2OSwgCi0gICAgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCA2OCwgNjksIDgyLCA4OSwgMTI4LCAKLSAgICA2OSwgNzcsIDY2LCA3NiwgNjksIDc3LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA3NiwgNzYsIDczLCA4MywgNzIsIDc3LCA2OSwgCi0gICAgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDc2LCA4NCwgMTI4LCAKLSAgICA2OSwgNzYsIDc2LCA3MywgODAsIDg0LCA3MywgMTk1LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA3MywgODMsIDEyOCwgNjksIAotICAgIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgCi0gICAgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDEyOCwgNjksIDc2LCAKLSAgICA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDgwLCA3MiwgNjUsIDc4LCA4NCwgMTI4LCA2OSwgNzYsIDY5LCA3NywgNjksIAotICAgIDc4LCAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgCi0gICAgNzMsIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCAKLSAgICA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIAotICAgIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIDY3LCAyMTIsIDY5LCA3MywgODMsIDEyOCwgNjksIAotICAgIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgCi0gICAgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAxMjgsIDY5LCAKLSAgICA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzMsIAotICAgIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNjksIDEyOCwgNjksIDcyLCA4NywgCi0gICAgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDczLCAKLSAgICA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA2OSwgNzUsIAotICAgIDY1LCA2NSwgMTI4LCA2OSwgNjksIDcyLCAxMjgsIDY5LCA2OSwgNjYsIDY5LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNjksIDY4LCA3MywgODQsIDc5LCA4MiwgNzMsIDY1LCAyMDQsIDY5LCA2OCwgNzMsIDc4LCAxMjgsIDY5LCA2OCwgNjgsIAotICAgIDEyOCwgNjksIDY2LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgMjA2LCA2OSwgCi0gICAgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIDIxNywgNjksIDY1LCA4MiwgODQsIDcyLCAxMjgsIDY5LCAKLSAgICA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDgzLCAxMjgsIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIAotICAgIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgCi0gICAgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCAKLSAgICA1MSwgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIAotICAgIDY1LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIAotICAgIDY5LCA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgCi0gICAgNTAsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCAKLSAgICA1NCwgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCAKLSAgICA2OSwgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIAotICAgIDQ4LCA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgCi0gICAgNTUsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCAKLSAgICA1NCwgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCAKLSAgICA2OSwgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIAotICAgIDQ4LCA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCAKLSAgICA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA0NSwgNzcsIDY1LCA3MywgMjA0LCA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIAotICAgIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIDg1LCAxMjgsIDY4LCA5MCwgNzksIDEyOCwgNjgsIAotICAgIDkwLCA3NCwgNjksIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIDcyLCA2OSwgMTI4LCA2OCwgOTAsIDcyLCA2NSwgCi0gICAgMTI4LCA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjgsIDkwLCA2OSwgNjksIDEyOCwgNjgsIDkwLCA2OSwgMTI4LCA2OCwgCi0gICAgOTAsIDY1LCA2NSwgMTI4LCA2OCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgMTI4LCA2OCwgMjE4LCA2OCwgODksIDc5LCAxMjgsIAotICAgIDY4LCA4OSwgMjA3LCA2OCwgODksIDY5LCA3MiwgMTI4LCA2OCwgODksIDY5LCAyMDAsIDY4LCA4NywgNzksIDEyOCwgNjgsIAotICAgIDg3LCA2OSwgMTI4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA4NiwgNzMsIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2OCwgCi0gICAgODYsIDY4LCAxMjgsIDY4LCA4NiwgMTI4LCA2OCwgODUsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA4NSwgODMsIDc1LCAKLSAgICAxMjgsIDY4LCA4NSwgODMsIDcyLCA2OSwgNzgsIDc4LCA2NSwgMTI4LCA2OCwgODUsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjgsIDg1LCA4MiwgNTAsIDEyOCwgNjgsIDg1LCA4MCwgNzksIDc4LCA2OCwgNzMsIDg1LCAyMTEsIDY4LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDY4LCA4NSwgNzksIDEyOCwgNjgsIDg1LCA3OCwgNTIsIDEyOCwgNjgsIDg1LCA3OCwgNTEsIDEyOCwgCi0gICAgNjgsIDg1LCA3OCwgMTc5LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgCi0gICAgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCA2OCwgODUsIDY2LCAxMjgsIDY4LCA4NSwgMTk0LCA2OCwgCi0gICAgODIsIDg5LCAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgODIsIDg1LCA3NywgMTI4LCA2OCwgODIsIDg1LCAyMDUsIDY4LCA4MiwgCi0gICAgNzksIDgwLCA4MywgMTI4LCA2OCwgODIsIDc5LCA4MCwgNzYsIDY5LCA4NCwgMTI4LCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCAKLSAgICA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDY4LCA4MiwgNzksIDc3LCA2OSwgNjgsIDY1LCA4MiwgMjE3LCA2OCwgODIsIAotICAgIDczLCA4NiwgNjksIDEyOCwgNjgsIDgyLCA3MywgODYsIDE5NywgNjgsIDgyLCA3MywgNzgsIDc1LCAxMjgsIDY4LCA4MiwgCi0gICAgNzMsIDIwNCwgNjgsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY4LCAKLSAgICA4MiwgNjUsIDc3LCAxMjgsIDY4LCA4MiwgNjUsIDIwNSwgNjgsIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIAotICAgIDY1LCA3MSwgNzksIDIwNiwgNjgsIDgyLCA2NSwgNzAsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgCi0gICAgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIAotICAgIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgCi0gICAgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCAKLSAgICA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIDg1LCA3MSwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNjgsIAotICAgIDc5LCA4NSwgNjYsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgCi0gICAgNDUsIDc2LCA3MywgNzgsIDE5NywgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY4LCAKLSAgICA3OSwgODUsIDY2LCA3NiwgNjksIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDgwLCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDg0LCA2OSwgNjgsIDQ1LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODQsIDY5LCA2OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDE5NiwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAotICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCi0gICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCi0gICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAotICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAotICAgIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKLSAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIAotICAgIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAotICAgIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAotICAgIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCAxMjgsIDY4LCA3OSwgODQsIDc2LCA2OSwgODMsIDIxMSwgNjgsIDc5LCA4MiwgODUsIDEyOCwgNjgsIDc5LCA3OSwgCi0gICAgODIsIDEyOCwgNjgsIDc5LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCAKLSAgICA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIAotICAgIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgCi0gICAgMTI4LCA2OCwgNzksIDczLCA4NCwgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIAotICAgIDY4LCA3OSwgNjgsIDY5LCA3NSwgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgCi0gICAgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIAotICAgIDY5LCAxOTcsIDY4LCA3OSwgNjUsIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCAKLSAgICA3NiwgODUsIDEyOCwgNjgsIDc2LCA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCAKLSAgICA2OCwgNzYsIDcyLCA2NSwgMTI4LCA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3NiwgMTI4LCAKLSAgICA2OCwgNzUsIDY1LCA4MiwgMTI4LCA2OCwgNzUsIDY1LCAyMTAsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIAotICAgIDc0LCA2OSwgODIsIDg2LCAxMjgsIDY4LCA3NCwgNjksIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzMsIDkwLCA5MCwgCi0gICAgMjE3LCA2OCwgNzMsIDg2LCA3OSwgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCAKLSAgICA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIAotICAgIDY4LCAxOTcsIDY4LCA3MywgODYsIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAKLSAgICAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIAotICAgIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIDgzLCA4MywgCi0gICAgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgNjgsIDczLCAKLSAgICA4MywgODAsIDY5LCA4MiwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCA4MywgNzMsIAotICAgIDc3LCA3OSwgODUsIDEyOCwgNjgsIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgCi0gICAgODUsIDc5LCA4NSwgMjExLCA2OCwgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgNzgsIDg0LCAKLSAgICA2OSwgMTk2LCA2OCwgNzMsIDgzLCA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIAotICAgIDgyLCA2OSwgNjcsIDg0LCA3NiwgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgCi0gICAgNzMsIDgwLCA4NCwgNjksIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCAKLSAgICA3OCwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIAotICAgIDY2LCA2NSwgMjEyLCA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgCi0gICAgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIAotICAgIDc5LCA3OCwgNDUsIDUwLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgCi0gICAgNjgsIDczLCA3NywgNzMsIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIAotICAgIDczLCAxOTMsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgCi0gICAgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIAotICAgIDc5LCAyMTEsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgCi0gICAgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCAKLSAgICA3MSwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIAotICAgIDIxMSwgNjgsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgCi0gICAgODQsIDIxNywgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCAKLSAgICA3MCwgNjksIDgyLCA2OSwgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgCi0gICAgNjcsIDE5NywgNjgsIDczLCA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCAKLSAgICA2OSwgODMsIDczLCAyMTEsIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCAKLSAgICA3MywgNjUsIDg0LCA3OSwgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIAotICAgIDY1LCA4MywgODQsIDc5LCA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIDEyOCwgNjgsIDczLCA2NSwgCi0gICAgNzcsIDc5LCA3OCwgNjgsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCAKLSAgICA2OSwgMjEwLCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIAotICAgIDczLCA3NSwgMTkzLCA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgCi0gICAgNjUsIDc2LCAxMjgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCAKLSAgICA3MywgOTAsIDY5LCAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIAotICAgIDgyLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgCi0gICAgNzksIDEyOCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgCi0gICAgNjgsIDcyLCA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCAKLSAgICA3MiwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIAotICAgIDgyLCA3NywgNjUsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgCi0gICAgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDY1LCAKLSAgICA2NSwgNzYsIDg1LCAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCAKLSAgICA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIAotICAgIDg4LCA3MywgNjUsIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgCi0gICAgNjksIDc4LCA4NCwgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCAKLSAgICA3MywgNzEsIDc4LCAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgCi0gICAgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCAKLSAgICA4MiwgNjksIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIAotICAgIDgyLCA4NCwgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgCi0gICAgODQsIDczLCA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCAKLSAgICA3OCwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIAotICAgIDY5LCA3OCwgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgCi0gICAgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCAKLSAgICA2OCwgNjksIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIAotICAgIDgyLCAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgCi0gICAgNzcsIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCAKLSAgICA3MywgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAorICAgIDg0LCAxMjgsIDgyLCA3NiwgNzksIDEyOCwgODIsIDc2LCA3NywgMTI4LCA4MiwgNzYsIDczLCAxMjgsIDgyLCA3NiwgNjksIAorICAgIDEyOCwgODIsIDc0LCA2OSwgMjExLCA4MiwgNzQsIDY5LCAxMjgsIDgyLCA3NCwgMTk3LCA4MiwgNzMsIDg2LCA2OSwgODIsIAorICAgIDEyOCwgODIsIDczLCA4NCwgODUsIDY1LCA3NiwgMTI4LCA4MiwgNzMsIDg0LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MiwgCisgICAgNzMsIDg0LCA4MywgNzMsIDEyOCwgODIsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA3MywgODMsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgODIsIDY1LCAxMjgsIDgyLCA3MywgODAsIDEyOCwgODIsIDczLCA3OCwgNzEsIDIxMSwgODIsIDczLCA3OCwgNzAsIAorICAgIDc5LCA4MiwgOTAsIDY1LCA3OCwgNjgsIDc5LCAxMjgsIDgyLCA3MywgMjA2LCA4MiwgNzMsIDc3LCA3MSwgNjYsIDY1LCAKKyAgICAxMjgsIDgyLCA3MywgNzUsIDgyLCA3MywgNzUsIDEyOCwgODIsIDczLCA3MSwgODYsIDY5LCA2OCwgNzMsIDE5NSwgODIsIAorICAgIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCA3MiwgNjUsIDc4LCAKKyAgICAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDc2LCA2OSwgNzAsIDIxMiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCAKKyAgICA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCAKKyAgICA3OCwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIAorICAgIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgCisgICAgNzYsIDQ1LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIAorICAgIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIAorICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgCisgICAgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIAorICAgIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAKKyAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNjUsIDc4LCAKKyAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCAKKyAgICA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCAKKyAgICA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzIsIDczLCA2OSwgCisgICAgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MiwgNzMsIDY5LCAKKyAgICA4NSwgMjA0LCA4MiwgNzMsIDY5LCA3NiwgMTI4LCA4MiwgNzMsIDY5LCA2OSwgMTI4LCA4MiwgNzMsIDY3LCA2OSwgNzcsIAorICAgIDEyOCwgODIsIDczLCA2NywgNjksIDEyOCwgODIsIDczLCA2NywgMTk3LCA4MiwgNzMsIDY2LCA2NiwgNzksIDc4LCAxMjgsIAorICAgIDgyLCA3MywgNjUsIDIwNCwgODIsIDcyLCA3OSwgODQsIDczLCAxOTUsIDgyLCA3MiwgNzksIDEyOCwgODIsIDcyLCAyMDcsIAorICAgIDgyLCA3MiwgNjUsIDEyOCwgODIsIDcxLCA4OSwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODIsIDcxLCA4OSwgNjUsIDc4LCAKKyAgICAxMjgsIDgyLCA3MSwgODksIDE5MywgODIsIDY5LCA4NiwgNzksIDc2LCA4NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgODYsIAorICAgIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MiwgNjksIDg2LCA3MywgCisgICAgNjUsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAKKyAgICAxOTYsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDE5NywgODIsIDY5LCA4NSwgODgsIDEyOCwgODIsIDY5LCA4NSwgMTI4LCAKKyAgICA4MiwgNjksIDg0LCA4NSwgODIsIDc4LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgMjA2LCA4MiwgNjksIDg0LCA4MiwgNzksIAorICAgIDcwLCA3NiwgNjksIDIxNiwgODIsIDY5LCA4NCwgODIsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4NCwgNzksIDgyLCA4NCwgCisgICAgMTI4LCA4MiwgNjksIDgzLCA4NSwgODAsIDczLCA3OCwgODUsIDgzLCAxMjgsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzksIDc5LCAKKyAgICA3NywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDY5LCAxOTYsIDgyLCA2OSwgODMsIDg0LCAxMjgsIAorICAgIDgyLCA2OSwgODMsIDgwLCA3OSwgNzgsIDgzLCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgCisgICAgODIsIDY5LCA4MywgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4MywgNzMsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgNzMsIDY4LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCAKKyAgICAyMDAsIDgyLCA2OSwgODIsIDY5LCA3OCwgNzEsIDcxLCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MiwgNjksIDc1LCA2NSwgNzgsIAorICAgIDEyOCwgODIsIDY5LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA3NiwgNjUsIDY3LCA2OSwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA4MiwgNjksIDgwLCA3MiwgMTI4LCA4MiwgNjksIDgwLCA2OSwgODQsIDczLCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDY5LCAxOTYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDEyOCwgODIsIAorICAgIDY5LCA4MCwgNjksIDY1LCAyMTIsIDgyLCA2OSwgODAsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY5LCA4MCwgNjUsIDEyOCwgCisgICAgODIsIDY5LCA4MCwgMTkzLCA4MiwgNjksIDc4LCA4NCwgNzksIDcxLCA2OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgMTI4LCAKKyAgICA4MiwgNjksIDIwNiwgODIsIDY5LCA3NywgODUsIDEyOCwgODIsIDY5LCA3NywgNjksIDY4LCA4OSwgMTI4LCA4MiwgNjksIAorICAgIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNzMsIDY5LCA4NiwgNjksIDE5NiwgODIsIDY5LCA3NiwgCisgICAgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDc2LCAKKyAgICA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgCisgICAgMTk5LCA4MiwgNjksIDczLCAxOTYsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTIsIDEyOCwgODIsIDY5LCAKKyAgICA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MSwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUwLCAxMjgsIAorICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDIxMSwgODIsIDY5LCA3MSwgCisgICAgNzMsIDgzLCA4NCwgNjksIDgyLCA2OSwgMTk2LCA4MiwgNjksIDcxLCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDcxLCAKKyAgICA3MywgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDcxLCA3MywgNjUsIDEyOCwgODIsIDY5LCA3MCwgNzksIDgyLCA3NywgNjksIAorICAgIDE5NiwgODIsIDY5LCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIDgyLCA2OSwgNjgsIDg1LCA4MCwgNzYsIDczLCA2NywgCisgICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCAKKyAgICA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MiwgNjksIDY3LCA4NCwgNzMsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MiwgNjksIAorICAgIDY3LCA4NCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDY5LCAKKyAgICAxMjgsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4MiwgNjksIDY3LCA4MiwgNjksIDY1LCA4NCwgNzMsIAorICAgIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDc5LCA4MiwgCisgICAgNjgsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY3LCA3OSwgODIsIDE5NiwgODIsIDY5LCA2NywgNjksIDgwLCA4NCwgNzMsIDg2LCAKKyAgICAxOTcsIDgyLCA2OSwgNjcsIDY5LCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgNDUsIAorICAgIDUwLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDcyLCA3NywgODUsIDc1LCAKKyAgICAxMjgsIDgyLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MiwgNjgsIDIwNywgODIsIDY4LCA2OSwgMjA0LCA4MiwgNjYsIDY1LCAKKyAgICA4MywgMTkzLCA4MiwgNjUsIDg5LCA4MywgMTI4LCA4MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIAorICAgIDg0LCA3MywgNzksIDEyOCwgODIsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDcyLCAxOTMsIDgyLCA2NSwgCisgICAgODQsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDEyOCwgODIsIDY1LCA4MywgODcsIDY1LCA2OCwgNzMsIDEyOCwgODIsIDY1LCAKKyAgICA4MywgNzksIDg1LCAyMDQsIDgyLCA2NSwgODMsIDcyLCA2NSwgMTI4LCA4MiwgNjUsIDgxLCAxMjgsIDgyLCA2NSwgODAsIAorICAgIDczLCA4MywgNzcsIDY1LCAxMjgsIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgCisgICAgNzgsIDEyOCwgODIsIDY1LCA3NywgMjExLCA4MiwgNjUsIDc3LCA2NiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgNzUsIDcyLCAKKyAgICA2NSwgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNzUsIDY1LCA2NSwgODIsIDY1LCA2NSwgNzgsIDgzLCA2NSwgODksIDY1LCAxMjgsIAorICAgIDgyLCA2NSwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDY1LCA3MywgODMsIDY5LCAxOTYsIDgyLCA2NSwgNzMsIDc4LCA2NiwgCisgICAgNzksIDg3LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIDg5LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIAorICAgIDIxNywgODIsIDY1LCA3MywgNzYsIDEyOCwgODIsIDY1LCA3MywgNjgsIDIwNywgODIsIDY1LCA3MywgNjgsIDY1LCAxMjgsIAorICAgIDgyLCA2NSwgNzIsIDc3LCA2NSwgODQsIDg1LCA3NiwgNzYsIDY1LCAyMDAsIDgyLCA2NSwgNzIsIDEyOCwgODIsIDY1LCA3MCwgCisgICAgNjksIDEyOCwgODIsIDY1LCA2OSwgNzcsIDEyOCwgODIsIDY1LCA2OCwgNzMsIDc5LCA2NSwgNjcsIDg0LCA3MywgODYsIAorICAgIDE5NywgODIsIDY1LCA2OCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgNjgsIDczLCAyMDcsIDgyLCA2NSwgNjgsIDIwMSwgODIsIAorICAgIDY1LCA2OCwgMTI4LCA4MiwgNjUsIDE5NiwgODIsIDY1LCA2NywgODEsIDg1LCA2OSwgMjEyLCA4MiwgNjUsIDY3LCA3MywgCisgICAgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgODQsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCAyMTIsIDgyLCAKKyAgICA2NSwgNjYsIDEyOCwgODIsIDY1LCA2NSwgNzMsIDEyOCwgODIsIDY1LCA1MSwgMTI4LCA4MiwgNjUsIDUwLCAxMjgsIDgyLCAKKyAgICA2NSwgNDUsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDU3LCAxMjgsIDgyLCA0OCwgNTAsIDU2LCAxMjgsIDgyLCA0OCwgNTAsIAorICAgIDU1LCAxMjgsIDgyLCA0OCwgNTAsIDU0LCAxMjgsIDgyLCA0OCwgNTAsIDUzLCAxMjgsIDgyLCA0OCwgNTAsIDUyLCAxMjgsIAorICAgIDgyLCA0OCwgNTAsIDUxLCAxMjgsIDgyLCA0OCwgNTAsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDQ5LCAxMjgsIDgyLCA0OCwgCisgICAgNTAsIDQ4LCAxMjgsIDgyLCA0OCwgNDksIDU3LCAxMjgsIDgyLCA0OCwgNDksIDU2LCAxMjgsIDgyLCA0OCwgNDksIDU1LCAKKyAgICAxMjgsIDgyLCA0OCwgNDksIDU0LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgMTI4LCA4MiwgNDgsIDQ5LCA1MywgMTI4LCAKKyAgICA4MiwgNDgsIDQ5LCA1MiwgMTI4LCA4MiwgNDgsIDQ5LCA1MSwgMTI4LCA4MiwgNDgsIDQ5LCA1MCwgMTI4LCA4MiwgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDEyOCwgODIsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgODIsIDQ4LCA0OCwgNTYsIDEyOCwgODIsIDQ4LCA0OCwgNTUsIDEyOCwgODIsIDQ4LCA0OCwgNTQsIDEyOCwgCisgICAgODIsIDQ4LCA0OCwgNTMsIDEyOCwgODIsIDQ4LCA0OCwgNTIsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDgyLCAKKyAgICA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODIsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgODIsIDQ4LCA0OCwgNDksIDEyOCwgODIsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDgxLCA4OSwgCisgICAgODgsIDEyOCwgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIDg0LCAxMjgsIDgxLCA4OSwgODIsIDg4LCAxMjgsIDgxLCA4OSwgCisgICAgODIsIDEyOCwgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIDc5LCAxMjgsIDgxLCA4OSwgNzMsIDEyOCwgODEsIDg5LCA2OSwgCisgICAgNjksIDEyOCwgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIDY1LCA2NSwgMTI4LCA4MSwgODksIDY1LCAxMjgsIDgxLCA4OSwgCisgICAgMTI4LCA4MSwgODcsIDczLCAxMjgsIDgxLCA4NywgNjksIDY5LCAxMjgsIDgxLCA4NywgNjksIDEyOCwgODEsIDg3LCA2NSwgCisgICAgNjUsIDEyOCwgODEsIDg3LCA2NSwgMTI4LCA4MSwgODUsIDg4LCAxMjgsIDgxLCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgCisgICAgODYsIDEyOCwgODEsIDg1LCA4NSwgMTI4LCA4MSwgODUsIDg0LCAxMjgsIDgxLCA4NSwgODMsIDcyLCA4MywgNzIsIDY1LCAKKyAgICA4OSwgNjUsIDEyOCwgODEsIDg1LCA4MiwgODgsIDEyOCwgODEsIDg1LCA4MiwgMTI4LCA4MSwgODUsIDgwLCAxMjgsIDgxLCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAxOTcsIDgxLCA4NSwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgCisgICAgMjA2LCA4MSwgODUsIDc5LCA4NCwgMTI4LCA4MSwgODUsIDc5LCA4MCwgMTI4LCA4MSwgODUsIDc5LCAxMjgsIDgxLCA4NSwgCisgICAgNzUsIDEyOCwgODEsIDg1LCA3MywgNzgsIDg0LCA2OSwgODMsIDgzLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MSwgODUsIDczLCAKKyAgICA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIDE5MywgODEsIDg1LCA3MywgNzgsIDY3LCA4NSwgNzgsIDg4LCAxMjgsIAorICAgIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA4MSwgODUsIDczLCA3NiwgNzYsIDEyOCwgODEsIDg1LCA3MywgCisgICAgNjcsIDIwMywgODEsIDg1LCA3MywgMTI4LCA4MSwgODUsIDcwLCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCAKKyAgICA3OCwgNjksIDE5NiwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDgxLCA4NSwgNjksIDY5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA2OSwgMjA2LCA4MSwgODUsIDY5LCAxMjgsIAorICAgIDgxLCA4NSwgNjYsIDg1LCA4NCwgODMsIDEyOCwgODEsIDg1LCA2NSwgODQsIDY5LCA4MiwgNzgsIDczLCA3OSwgMjA2LCA4MSwgCisgICAgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgODMsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDIxMSwgODEsIDg1LCAKKyAgICA2NSwgODIsIDg0LCA2OSwgODIsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgMjEwLCA4MSwgODUsIDY1LCA3OCwgODQsIAorICAgIDczLCA4NCwgMjE3LCA4MSwgODUsIDY1LCA2OCwgODIsIDg1LCA4MCwgNzYsIDE5NywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgCisgICAgNzgsIDg0LCAxMjgsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCAyMTIsIDgxLCA4NSwgNjUsIDY4LCAxMjgsIDgxLCAKKyAgICA4NSwgNjUsIDE5NiwgODEsIDg1LCA2NSwgMTI4LCA4MSwgODUsIDEyOCwgODEsIDIwOCwgODEsIDc5LCA4OCwgMTI4LCA4MSwgCisgICAgNzksIDg0LCAxMjgsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDgxLCA3OSwgODAsIDY1LCAxMjgsIDgxLCA3OSwgODAsIDEyOCwgCisgICAgODEsIDc5LCA3OSwgMTI4LCA4MSwgNzksIDIwNywgODEsIDc5LCA3MCwgMTI4LCA4MSwgNzksIDE5OCwgODEsIDc5LCA2NSwgCisgICAgMTI4LCA4MSwgNzksIDEyOCwgODEsIDc4LCAxMjgsIDgxLCA3MywgODgsIDEyOCwgODEsIDczLCA4NCwgODMsIDY1LCAxMjgsIAorICAgIDgxLCA3MywgODQsIDEyOCwgODEsIDczLCA4MCwgMTI4LCA4MSwgNzMsIDczLCAxMjgsIDgxLCA3MywgNjksIDg4LCAxMjgsIAorICAgIDgxLCA3MywgNjksIDg0LCAxMjgsIDgxLCA3MywgNjksIDgwLCAxMjgsIDgxLCA3MywgNjksIDEyOCwgODEsIDczLCAxMjgsIAorICAgIDgxLCA3MiwgODcsIDczLCAxMjgsIDgxLCA3MiwgODcsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2OSwgMTI4LCA4MSwgCisgICAgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDcyLCA4NywgNjUsIDEyOCwgODEsIDcyLCA4NSwgMTI4LCA4MSwgNzIsIDc5LCAKKyAgICAxMjgsIDgxLCA3MiwgNzMsIDEyOCwgODEsIDcyLCA2OSwgNjksIDEyOCwgODEsIDcyLCA2OSwgMTI4LCA4MSwgNzIsIDY1LCAKKyAgICA2NSwgMTI4LCA4MSwgNzIsIDY1LCAxMjgsIDgxLCA3MSwgNjUsIDEyOCwgODEsIDY5LCA4NCwgNjUsIDc4LCA2NSwgMTI4LCAKKyAgICA4MSwgNjksIDY5LCAxMjgsIDgxLCA2OSwgMTI4LCA4MSwgNjUsIDg1LCAxMjgsIDgxLCA2NSwgODQsIDY1LCA3OCwgMTI4LCAKKyAgICA4MSwgNjUsIDgyLCA3OCwgNjksIDIxNywgODEsIDY1LCA4MiwgMTI4LCA4MSwgNjUsIDgxLCAxMjgsIDgxLCA2NSwgODAsIAorICAgIDcyLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgODMsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgCisgICAgNzYsIDE5MywgODEsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgxLCA2NSwgNzMsIDEyOCwgODEsIDY1LCAKKyAgICA3MCwgMTI4LCA4MSwgNjUsIDE5OCwgODEsIDY1LCA2OCwgNzcsIDY1LCAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCAKKyAgICA2NSwgNjUsIDcwLCA4NSwgMTI4LCA4MSwgNjUsIDY1LCA3MCwgMTI4LCA4MSwgNDgsIDQ4LCA1NSwgMTI4LCA4MSwgNDgsIAorICAgIDQ4LCA1NCwgMTI4LCA4MSwgNDgsIDQ4LCA1MywgMTI4LCA4MSwgNDgsIDQ4LCA1MiwgMTI4LCA4MSwgNDgsIDQ4LCA1MSwgCisgICAgMTI4LCA4MSwgNDgsIDQ4LCA1MCwgMTI4LCA4MSwgNDgsIDQ4LCA0OSwgMTI4LCA4MCwgOTAsIDEyOCwgODAsIDg5LCA4OCwgCisgICAgMTI4LCA4MCwgODksIDg0LCAxMjgsIDgwLCA4OSwgODIsIDg4LCAxMjgsIDgwLCA4OSwgODIsIDEyOCwgODAsIDg5LCA4MCwgCisgICAgMTI4LCA4MCwgODksIDEyOCwgODAsIDg3LCA3OSwgODksIDEyOCwgODAsIDg3LCA3OSwgNzksIDEyOCwgODAsIDg3LCA3OSwgCisgICAgMTI4LCA4MCwgODcsIDIwNywgODAsIDg3LCA3MywgNzMsIDEyOCwgODAsIDg3LCA3MywgMTI4LCA4MCwgODcsIDY5LCA2OSwgCisgICAgMTI4LCA4MCwgODcsIDY5LCAxMjgsIDgwLCA4NywgNjUsIDY1LCAxMjgsIDgwLCA4NywgMTI4LCA4MCwgODYsIDEyOCwgODAsIAorICAgIDg1LCA4OCwgMTI4LCA4MCwgODUsIDg1LCA4NCwgMTI4LCA4MCwgODUsIDg1LCAxMjgsIDgwLCA4NSwgODQsIDgyLCA2OSwgCisgICAgNzAsIDY1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA4NCwgMTI4LCA4MCwgODUsIDIxMiwgODAsIDg1LCAKKyAgICA4MywgNzIsIDgwLCA3MywgNzgsIDEyOCwgODAsIDg1LCA4MywgNzIsIDgwLCA3MywgNzUsIDY1LCAxMjgsIDgwLCA4NSwgODMsIAorICAgIDcyLCA3MywgNzgsIDE5OSwgODAsIDg1LCA4MiwgODgsIDEyOCwgODAsIDg1LCA4MiwgODMsIDY5LCAxMjgsIDgwLCA4NSwgCisgICAgODIsIDgwLCA3NiwgMTk3LCA4MCwgODUsIDgyLCA3OCwgNjUsIDc3LCA2NSwgMTI4LCA4MCwgODUsIDgyLCA3MywgODQsIDg5LCAKKyAgICAxMjgsIDgwLCA4NSwgODIsIDczLCA3MCwgODksIDEyOCwgODAsIDg1LCA4MiwgMTI4LCA4MCwgODUsIDgxLCAxMjgsIDgwLCAKKyAgICA4NSwgODAsIDEyOCwgODAsIDg1LCA3OSwgODgsIDEyOCwgODAsIDg1LCA3OSwgODAsIDEyOCwgODAsIDg1LCA3OSwgMTI4LCAKKyAgICA4MCwgODUsIDc4LCA3MSwgNjUsIDY1LCA3NywgMTI4LCA4MCwgODUsIDc4LCA3MSwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIAorICAgIDg1LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgCisgICAgODAsIDg1LCA3NywgODAsIDEyOCwgODAsIDg1LCA3NywgMTI4LCA4MCwgODUsIDY5LCAxMjgsIDgwLCA4NSwgNjYsIDc2LCAKKyAgICA3MywgMTk1LCA4MCwgODUsIDY1LCA4MSwgMTI4LCA4MCwgODUsIDY1LCA2OSwgMTI4LCA4MCwgODUsIDUwLCAxMjgsIDgwLCAKKyAgICA4NSwgNDksIDEyOCwgODAsIDg1LCAxMjgsIDgwLCA4NCwgNzIsIDY1LCA3MiwgMTkzLCA4MCwgODQsIDY5LCAxMjgsIDgwLCAKKyAgICA4MywgNzMsIDc2LCAyMDEsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgCisgICAgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIAorICAgIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCAyMDYsIDgwLCA4MywgNzMsIDcwLCA3MywgCisgICAgODMsIDg0LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgMTI4LCA4MCwgODMsIAorICAgIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgCisgICAgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgwLCA4MiwgNzksIDg0LCA2OSwgNjcsIDg0LCA2OSwgMTk2LCA4MCwgODIsIDc5LCAKKyAgICA4MywgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgCisgICAgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCAKKyAgICA4MiwgNzksIDgwLCA2OSwgODIsIDg0LCAyMTcsIDgwLCA4MiwgNzksIDgwLCA2OSwgNzYsIDc2LCA2OSwgMjEwLCA4MCwgODIsIAorICAgIDc5LCA3OSwgNzAsIDEyOCwgODAsIDgyLCA3OSwgNzYsIDc5LCA3OCwgNzEsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDc2LCA2NSwgCisgICAgODQsIDczLCA3OSwgNzgsIDE5NywgODAsIDgyLCA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDgyLCAKKyAgICA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgNzEsIDgyLCA2OSwgODMsIDgzLCAxMjgsIAorICAgIDgwLCA4MiwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDgyLCA3OSwgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgwLCA4MiwgCisgICAgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDIxMiwgODAsIDgyLCA3MywgODYsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgMTk3LCA4MCwgODIsIDczLCA4NiwgNjUsIDY3LCAyMTcsIAorICAgIDgwLCA4MiwgNzMsIDgzLCA3MiwgODQsIDcyLCA2NSwgNzcsIDY1LCA4NCwgODIsIDE5MywgODAsIDgyLCA3MywgNzgsIDg0LCAKKyAgICA4MywgMTI4LCA4MCwgODIsIDczLCA3OCwgODQsIDEyOCwgODAsIDgyLCA3MywgNzgsIDIxMiwgODAsIDgyLCA3MywgNzgsIAorICAgIDY3LCA2OSwgODMsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc3LCA2OSwgMTI4LCA4MCwgODIsIDczLCA3NywgMTk3LCA4MCwgCisgICAgODIsIDY5LCA4NiwgNzMsIDc5LCA4NSwgMjExLCA4MCwgODIsIDY5LCA4MywgNjksIDg0LCAxMjgsIDgwLCA4MiwgNjksIDgzLCAKKyAgICA2OSwgNzgsIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgCisgICAgNzksIDIwNiwgODAsIDgyLCA2OSwgODAsIDc5LCA3OCwgNjgsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODAsIDgyLCAKKyAgICA2OSwgNzgsIDc1LCA3MiwgNjUsIDEyOCwgODAsIDgyLCA2OSwgNzAsIDY1LCA2NywgMTk3LCA4MCwgODIsIDY5LCA2NywgNzMsIAorICAgIDgwLCA3MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA4MiwgCisgICAgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMjExLCA4MCwgODIsIDY5LCAKKyAgICA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIAorICAgIDY4LCAxOTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgCisgICAgMjAxLCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDg5LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCAKKyAgICA3OSwgMjE3LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIDc4LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIAorICAgIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgNzMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgCisgICAgNjksIDIwMSwgODAsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDEyOCwgODAsIDgwLCA4NiwgCisgICAgMTI4LCA4MCwgODAsIDc3LCAxMjgsIDgwLCA4MCwgNjUsIDEyOCwgODAsIDc5LCA4OSwgMTI4LCA4MCwgNzksIDg4LCAxMjgsIAorICAgIDgwLCA3OSwgODcsIDY5LCA4MiwgMjExLCA4MCwgNzksIDg3LCA2OSwgODIsIDEyOCwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgCisgICAgNjksIDE5NiwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg1LCA3OCwgMTk2LCA4MCwgNzksIDg1LCAKKyAgICA3NiwgODQsIDgyLCAyMTcsIDgwLCA3OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzksIDg0LCA2NSwgODQsIDc5LCAxMjgsIAorICAgIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIDE5NywgODAsIDc5LCAyMTIsIDgwLCA3OSwgODMsIDg0LCA4MCwgNzksIDgzLCA3MywgCisgICAgODQsIDczLCA3OSwgMjA2LCA4MCwgNzksIDgzLCA4NCwgNjYsIDc5LCA4OCwgMTI4LCA4MCwgNzksIDgzLCA4NCwgNjUsIAorICAgIDIwNCwgODAsIDc5LCA4MywgODQsIDEyOCwgODAsIDc5LCA4MywgMjEyLCA4MCwgNzksIDgzLCA4MywgNjksIDgzLCA4MywgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgODIsIDgyLCAKKyAgICA2OSwgNjcsIDg0LCA4NSwgMjExLCA4MCwgNzksIDgwLCA4MCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgODAsIDEyOCwgODAsIAorICAgIDc5LCAyMDgsIDgwLCA3OSwgNzksIDY4LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3OSwgMTI4LCA4MCwgNzksIDc4LCA2OCwgCisgICAgNzksIDEyOCwgODAsIDc5LCAyMDYsIDgwLCA3OSwgNzcsIDc3LCA2OSwgNjksIDEyOCwgODAsIDc5LCA3NywgNzcsIDY5LCAKKyAgICAxOTcsIDgwLCA3OSwgNzYsIDczLCA4MywgNzIsIDEyOCwgODAsIDc5LCA3NiwgNzMsIDY3LCAxOTcsIDgwLCA3OSwgNzYsIAorICAgIDIwMSwgODAsIDc5LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3NiwgMTk3LCA4MCwgNzksIDc1LCA4MiwgODksIDg0LCA3MywgCisgICAgNjksIDEyOCwgODAsIDc5LCA3NSwgNzksIDc0LCA3MywgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDIxMSwgODAsIDc5LCAKKyAgICA3MywgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIAorICAgIDY5LCAxOTYsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIDY5LCA4NCwgCisgICAgODIsIDIxNywgODAsIDc5LCA2OSwgODQsIDczLCAxOTUsIDgwLCA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCAKKyAgICA3OSwgNjUsIDEyOCwgODAsIDc5LCAxMjgsIDgwLCAyMDcsIDgwLCA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCA2NSwgMTI4LCAKKyAgICA4MCwgNzYsIDg1LCA4NCwgNzksIDEyOCwgODAsIDc2LCA4NSwgODMsIDQ1LCA3NywgNzMsIDc4LCA4NSwgMjExLCA4MCwgNzYsIAorICAgIDg1LCA4MywgMTI4LCA4MCwgNzYsIDg1LCA4MiwgNjUsIDc2LCAxMjgsIDgwLCA3NiwgODUsIDc3LCA2OSwgMTk2LCA4MCwgCisgICAgNzYsIDg1LCA3NywgMTI4LCA4MCwgNzYsIDg1LCA3NSwgMTI4LCA4MCwgNzYsIDg1LCA3MSwgMTI4LCA4MCwgNzYsIDg1LCAKKyAgICAxMjgsIDgwLCA3NiwgNzksIDg3LCAxMjgsIDgwLCA3NiwgNzksIDgwLCA3MiwgODUsIDEyOCwgODAsIDc2LCA2OSwgODQsIAorICAgIDcyLCA4MiwgNzksIDc4LCAxMjgsIDgwLCA3NiwgNjgsIDEyOCwgODAsIDc2LCA2NSwgODksIDczLCA3OCwgMTk5LCA4MCwgCisgICAgNzYsIDY1LCA4MywgODQsIDczLCA2NywgODMsIDEyOCwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDgwLCA3NiwgNjUsIDc4LCAKKyAgICAxOTcsIDgwLCA3NiwgNjUsIDc4LCA2NywgMjAzLCA4MCwgNzYsIDY1LCA3NSwgMTI4LCA4MCwgNzYsIDY1LCA3MSwgNzMsIAorICAgIDc5LCAyMTEsIDgwLCA3NiwgNjUsIDY3LCA2OSwgNzIsIDc5LCA3NiwgNjgsIDY5LCAyMTAsIDgwLCA3NiwgNjUsIDY3LCAKKyAgICAxOTcsIDgwLCA3NiwgNjUsIDEyOCwgODAsIDczLCA5MCwgOTAsIDczLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MCwgNzMsIAorICAgIDkwLCA5MCwgNjUsIDEyOCwgODAsIDczLCA4OCwgMTI4LCA4MCwgNzMsIDg3LCA4MiwgMTI4LCA4MCwgNzMsIDg0LCA2NywgCisgICAgNzIsIDcwLCA3OSwgODIsIDc1LCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgMjAzLCA4MCwgNzMsIDg0LCAKKyAgICAxMjgsIDgwLCA3MywgODMsIDg0LCA3OSwgNzYsIDEyOCwgODAsIDczLCA4MywgNjksIDc2LCA2OSwgNzIsIDEyOCwgODAsIAorICAgIDczLCA4MywgNjcsIDY5LCA4MywgMTI4LCA4MCwgNzMsIDgyLCA3MywgNzEsIDEyOCwgODAsIDczLCA4MiwgNzMsIDE5OSwgCisgICAgODAsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgODAsIDczLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNzMsIDgwLCAKKyAgICA2NSwgNjksIDc3LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgODAsIDczLCA4MCwgNjUsIDY5LCA3NywgNjYsIDY1LCAxMjgsIAorICAgIDgwLCA3MywgODAsIDEyOCwgODAsIDczLCA3OCwgODcsIDcyLCA2OSwgNjksIDIwNCwgODAsIDczLCA3OCwgNjksIDY1LCA4MCwgCisgICAgODAsIDc2LCA2OSwgMTI4LCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MywgNzgsIDY1LCA4MiwgNjYsIDc5LCA4MiwgNjUsIDgzLCAKKyAgICAxMjgsIDgwLCA3MywgNzYsIDc2LCAxMjgsIDgwLCA3MywgNzYsIDE5NywgODAsIDczLCA3NiwgNjcsIDgyLCA3OSwgMjE1LCAKKyAgICA4MCwgNzMsIDc1LCA4NSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNzUsIDc5LCAxMjgsIDgwLCA3MywgNzEsIDEyOCwgODAsIAorICAgIDczLCAxOTksIDgwLCA3MywgNjksIDg4LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgCisgICAgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCisgICAgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIAorICAgIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIAorICAgIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgCisgICAgODAsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzcsIDczLCA2OSwgODUsIAorICAgIDc3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgwLCA3MywgCisgICAgNjksIDg1LCA4MCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgMjA4LCA4MCwgNzMsIDY5LCA4NCwgMTI4LCA4MCwgCisgICAgNzMsIDY5LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODQsIDEyOCwgODAsIDczLCA2OSwgNjksIDgxLCAxMjgsIDgwLCAKKyAgICA3MywgNjksIDY3LCA2OSwgMTI4LCA4MCwgNzMsIDY5LCAxMjgsIDgwLCA3MywgNjcsIDc1LCA2OSwgODQsIDEyOCwgODAsIAorICAgIDczLCA2NywgNzUsIDEyOCwgODAsIDczLCA2NSwgODMsIDg1LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgCisgICAgNzcsIDE5MywgODAsIDczLCA2NSwgNzgsIDc5LCAxMjgsIDgwLCAyMDEsIDgwLCA3MiwgODcsIDY1LCAxMjgsIDgwLCA3MiwgCisgICAgODUsIDg0LCA3MiwgNjUsIDc5LCAxMjgsIDgwLCA3MiwgODUsIDIxMCwgODAsIDcyLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCAKKyAgICA3MiwgODIsIDY1LCA4MywgNjksIDEyOCwgODAsIDcyLCA3OSwgNzgsIDY5LCA4MywgMTI4LCA4MCwgNzIsIDc5LCA2OSwgNzgsIAorICAgIDczLCA2NywgNzMsIDY1LCAyMDYsIDgwLCA3MiwgNzksIDY1LCAxMjgsIDgwLCA3MiwgNzksIDEyOCwgODAsIDcyLCAyMDcsIAorICAgIDgwLCA3MiwgNzgsIDY1LCA2OSwgMjAzLCA4MCwgNzIsIDczLCA3OCwgODQsIDcyLCA4NSwgMTI4LCA4MCwgNzIsIDczLCA3NiwgCisgICAgNzksIDgzLCA3OSwgODAsIDcyLCA2OSwgODIsIDIxMSwgODAsIDcyLCA3MywgNzYsIDczLCA4MCwgODAsIDczLCA3OCwgMTk3LCAKKyAgICA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MiwgCisgICAgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgMjAwLCA4MCwgNzIsIDczLCAxMjgsIDgwLCA3MiwgMjAxLCAKKyAgICA4MCwgNzIsIDY5LCA2OSwgMTI4LCA4MCwgNzIsIDY5LCAxMjgsIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5OCwgODAsIAorICAgIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk0LCA4MCwgNzIsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDgwLCA3MiwgCisgICAgNjUsIDgyLCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAxMjgsIDgwLCA3MiwgNjUsIDc3LCAxMjgsIDgwLCA3MiwgNjUsIDczLCAKKyAgICA4MywgODQsIDc5LCAyMTEsIDgwLCA3MiwgNjUsIDcxLCA4MywgNDUsIDgwLCAxOTMsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIAorICAgIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzAsIAorICAgIDEyOCwgODAsIDY5LCA4NSwgODgsIDEyOCwgODAsIDY5LCA4NSwgODQsIDY1LCA2OSwgMTI4LCA4MCwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCAKKyAgICA2OSwgODQsIDY1LCA4MywgODQsIDczLCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIAorICAgIDY1LCA3NiwgNzYsIDY5LCAxOTYsIDgwLCA2OSwgODMsIDc5LCAxMjgsIDgwLCA2OSwgODMsIDIwNywgODAsIDY5LCA4MywgCisgICAgNzIsIDUwLCAxMjgsIDgwLCA2OSwgODMsIDY5LCA4NCwgMTkzLCA4MCwgNjksIDIxMSwgODAsIDY5LCA4MiwgODQsIDcyLCAKKyAgICAyMDcsIDgwLCA2OSwgODIsIDgzLCA4MCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIAorICAgIDc4LCA2NSwgMjA0LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgMjA2LCA4MCwgCisgICAgNjksIDgyLCA4MywgNzMsIDY1LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA2OSwgODYsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDgwLCAKKyAgICA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDgyLCAxMjgsIDgwLCA2OSwgODIsIDgwLCA2OSwgCisgICAgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODAsIDY5LCA4MiwgNzcsIDczLCA4NCwgODQsIDY5LCAxOTYsIDgwLCAKKyAgICA2OSwgODIsIDc3LCA2NSwgNzgsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgCisgICAgNzMsIDEyOCwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIDIwMSwgODAsIDY5LCA4MiwgNzAsIDc5LCAKKyAgICA4MiwgNzcsIDczLCA3OCwgMTk5LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgODAsIDY5LCA4MiwgNzAsIAorICAgIDY5LCA2NywgODQsIDY1LCAxMjgsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDgwLCA2OSwgODIsIDY3LCA4NSwgCisgICAgODMsIDgzLCA3MywgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDY3LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MCwgNjksIDg0LCAKKyAgICAxMjgsIDgwLCA2OSwgODAsIDY5LCAyMTIsIDgwLCA2OSwgNzksIDgyLCA4NCwgMjAwLCA4MCwgNjksIDc5LCA4MCwgNzYsIAorICAgIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgODMsIDY5LCA3NywgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgCisgICAgODIsIDY1LCA3NywgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgODMsIDg1LCAKKyAgICAxMjgsIDgwLCA2OSwgNzgsIDgzLCA3MywgODYsIDE5NywgODAsIDY5LCA3OCwgNzgsIDIxNywgODAsIDY5LCA3OCwgNzMsIAorICAgIDcyLCA3MywgMTI4LCA4MCwgNjksIDc4LCA3MSwgODUsIDczLCA3OCwgMTI4LCA4MCwgNjksIDc4LCA3MSwgNzUsIDY1LCA3NiwgCisgICAgMTI4LCA4MCwgNjksIDc4LCA2OSwgODQsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgNjcsIDczLCAKKyAgICA3NiwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIAorICAgIDIwNiwgODAsIDY5LCA3MywgODQsIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgCisgICAgMjAwLCA4MCwgNjksIDcyLCAxMjgsIDgwLCA2OSwgMjAwLCA4MCwgNjksIDY5LCA5MCwgNzMsIDEyOCwgODAsIDY5LCA2OSwgCisgICAgODMsIDcyLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MCwgMTI4LCA4MCwgNjksIDY5LCA3NywgMTI4LCA4MCwgNjksIDY5LCAKKyAgICAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDc4LCA4MywgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIAorICAgIDg0LCA4MiwgNzMsIDY1LCA3OCwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA2OCwgCisgICAgNjksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDY5LCA2OCwgNjUsIDIwNCwgODAsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgwLCAKKyAgICA2OSwgNjUsIDY3LCA2OSwgMTI4LCA4MCwgNjksIDY1LCA2NywgMTk3LCA4MCwgNjgsIDczLCAxMjgsIDgwLCA2OCwgNzAsIAorICAgIDEyOCwgODAsIDY4LCAxMjgsIDgwLCA2NywgMTI4LCA4MCwgNjUsIDkwLCA2OSwgODIsIDEyOCwgODAsIDY1LCA4OSwgNjksIAorICAgIDgyLCA3OSwgNzUsIDEyOCwgODAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODAsIDY1LCA4OSwgMTI4LCA4MCwgCisgICAgNjUsIDg4LCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCA2NSwgMjE1LCA4MCwgNjUsIDg2LCA3MywgODksIDY1LCAKKyAgICA3OCwgNzMsIDEyOCwgODAsIDY1LCA4NSwgMTI4LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCA3OCwgMTI4LCA4MCwgNjUsIAorICAgIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDg0LCAyMDAsIDgwLCA2NSwgODQsIDY1LCA3NSwgCisgICAgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDgzLCA4NSwgODEsIDEyOCwgCisgICAgODAsIDY1LCA4MywgODMsIDgwLCA3OSwgODIsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgNjksIDQ1LCA4MCwgODUsIAorICAgIDc2LCA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCAKKyAgICA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgCisgICAgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgODMsIDY5LCAKKyAgICA4MSwgMTI4LCA4MCwgNjUsIDgzLCA2NSwgNzgsIDcxLCA2NSwgMjA2LCA4MCwgNjUsIDgyLCA4NSwgNzcsIDEyOCwgODAsIAorICAgIDY1LCA4MiwgODQsIDIxNywgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgNzMsIDIwOCwgODAsIDY1LCA4MiwgCisgICAgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgwLCA2NSwgODIsIAorICAgIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgNjUsIDIwNiwgODAsIDY1LCA4MiwgMjEyLCA4MCwgCisgICAgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCA4NCwgNzMsIDcxLCA3NywgNjksIAorICAgIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgCisgICAgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDIxMSwgODAsIDY1LCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDc5LCA3MSwgCisgICAgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCAKKyAgICA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDczLCAxMjgsIDgwLCA2NSwgODIsIAorICAgIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCAKKyAgICAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA4MCwgNjUsIDgyLCA2NSwgCisgICAgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAKKyAgICA4MiwgNjcsIDc2LCA3MywgODAsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgODAsIDY1LCA4MCwgMTI4LCA4MCwgNjUsIAorICAgIDIwOCwgODAsIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA3MywgCisgICAgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc4LCAKKyAgICA3MSwgNzEsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4NCwgNzMsIAorICAgIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDY1LCA3OCwgCisgICAgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzgsIDcxLCA3OSwgNzgsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCA2OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODIsIAorICAgIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc5LCA3NiwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgCisgICAgNzgsIDcxLCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDY1LCA4OSwgNjUsIDgyLCAxMjgsIDgwLCAKKyAgICA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIAorICAgIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgCisgICAgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCA4MCwgNjUsIDc4LCA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCAKKyAgICA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA3OCwgNzEsIDc1LCA2NSwgNzIsIDEyOCwgODAsIAorICAgIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgNzcsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgCisgICAgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCA3NywgNzMsIDc4LCA3MSwgNzUsIDY1LCA3NiwgMTI4LCAKKyAgICA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgNzgsIDY5LCA3OCwgNzEsIDEyOCwgODAsIAorICAgIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjUsIDY5LCA3MiwgMTI4LCA4MCwgNjUsIDc2LCA4NSwgCisgICAgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCAyMDUsIDgwLCAKKyAgICA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODMsIDEyOCwgODAsIDY1LCA3NiwgNjksIAorICAgIDg0LCA4NCwgNjksIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgMTk5LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgCisgICAgNzMsIDkwLCA2OSwgMTk2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIDc1LCA4MCwgNjUsIDIwMywgODAsIDY1LCA3MywgCisgICAgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIDEyOCwgODAsIDY1LCAKKyAgICA3MywgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzMsIDEyOCwgODAsIDY1LCA3MiwgNzYsIDY1LCA4NiwgMjAxLCA4MCwgNjUsIAorICAgIDcyLCAxMjgsIDgwLCA2NSwgNzEsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDcxLCAxOTcsIDgwLCA2NSwgNjgsIDc3LCAxOTMsIAorICAgIDgwLCA2NSwgNjgsIDY4LCA3MywgNzgsIDE5OSwgODAsIDY1LCA2OCwgMTkzLCA4MCwgNjUsIDY4LCAxMjgsIDgwLCA2NSwgCisgICAgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA2NSwgNzEsIDY5LCAxMjgsIDgwLCA2NSwgNjUsIDg0LCAKKyAgICA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIDY1LCA2NSwgODIsIDY1LCA2OSwgCisgICAgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDY1LCA3MywgMTI4LCA4MCwgNjUsIDY1LCA0NSwgODAsIDczLCAKKyAgICA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgODAsIDUwLCAxMjgsIDgwLCA0OCwgNDksIDQ5LCAxMjgsIDgwLCAKKyAgICA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAxMjgsIDgwLCA0OCwgNDgsIDU2LCAxMjgsIDgwLCA0OCwgNDgsIAorICAgIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCA0OCwgNDgsIDUzLCAxMjgsIDgwLCA0OCwgNDgsIDUyLCAxMjgsIAorICAgIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgMTI4LCA4MCwgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgCisgICAgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDEyOCwgNzksIDg5LCA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAKKyAgICAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDg4LCA3MywgNjUsIDEyOCwgNzksIDg4LCA3MywgMTkzLCAKKyAgICA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIDg4LCA2OSwgNzMsIDE5MywgNzksIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIAorICAgIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNzksIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCAKKyAgICA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA3MywgNjgsIDEyOCwgNzksIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIAorICAgIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgODYsIDEyOCwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDE5NiwgNzksIAorICAgIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg1LCA4NCwgNjksIDIxMCwgNzksIDg1LCA4NCwgNjYsIDc5LCAKKyAgICAyMTYsIDc5LCA4NSwgNzgsIDc1LCA3MywgMTkzLCA3OSwgODUsIDc4LCA2NywgNjksIDEyOCwgNzksIDg1LCA3OCwgNjcsIAorICAgIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgODQsIDg0LCA2NSwgODYsIDE5MywgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIAorICAgIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCA4NCwgNzIsIDY1LCA3NiwgMTI4LCA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAKKyAgICAxOTMsIDc5LCA4MywgNjcsIDEyOCwgNzksIDgyLCA4NCwgNzIsIDc5LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA3OSwgODIsIAorICAgIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCA2NSwgODQsIDE5NywgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgCisgICAgNzgsIDg0LCAxMjgsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCAyMTIsIDc5LCA4MiwgNzUsIDcyLCA3OSwgMjA2LCAKKyAgICA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCAxMjgsIDc5LCA4MiwgNjksIAorICAgIDQ1LCA1MCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNjgsIDY5LCAyMTAsIDc5LCA4MiwgCisgICAgNjcsIDcyLCA3MywgNjgsIDEyOCwgNzksIDgyLCA2NSwgNzgsIDcxLCAxOTcsIDc5LCA4MCwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA3OSwgODAsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDc4LCAKKyAgICAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgwLCA3MiwgNzMsIDg1LCA2NywgNzIsIDg1LCA4MywgCisgICAgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIAorICAgIDIxMCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzMsIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA3MywgNzgsIDE5OSwgCisgICAgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIAorICAgIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgCisgICAgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDc5LCA5MCwgNjksIAorICAgIDEyOCwgNzksIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDc5LCA4NSwgMTI4LCA3OSwgNzksIDc3LCA4NSwgCisgICAgMTI4LCA3OSwgNzksIDY5LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDc4LCAKKyAgICA4NSwgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA3OCwgNzUsIDY1LCA4MiwgMTI4LCAKKyAgICA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgODcsIDY1LCAyMTcsIDc5LCA3OCwgNjksIAorICAgIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDc5LCA3OCwgCisgICAgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDc5LCA3OCwgNjUsIDgwLCAxMjgsIDc5LCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCAKKyAgICAyMDYsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDIwNiwgNzksIAorICAgIDc3LCA2OSwgNzEsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA3NywgNjUsIDc2LCA3OSwgNzgsIDEyOCwgCisgICAgNzksIDc2LCA3MywgODYsIDY5LCAxMjgsIDc5LCA3NiwgNzMsIDcxLCA3OSwgMjA2LCA3OSwgNzYsIDY4LCAxMjgsIDc5LCAKKyAgICA3NSwgODQsIDIwNywgNzksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCAxOTMsIDc5LCA3NCwgNzMsIAorICAgIDY2LCA4NywgNjUsIDIxNywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgNzksIDcyLCA3NywgCisgICAgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcxLCA4MiwgNjksIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCA3NSwgMTI4LCA3OSwgCisgICAgNzEsIDc5LCA3OCwgNjksIDIwMywgNzksIDcxLCA3MiwgNjUsIDIwNSwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgODIsIAorICAgIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDE5NywgNzksIDcwLCA3MCwgCisgICAgMTI4LCA3OSwgNjksIDg5LCAxMjgsIDc5LCA2OSwgNzUsIDEyOCwgNzksIDY4LCA2OSwgNzgsIDEyOCwgNzksIDY4LCAxOTYsIAorICAgIDc5LCA2NywgODQsIDc5LCA4MCwgODUsIDgzLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAxMjgsIDc5LCA2NywgCisgICAgODQsIDY5LCAyMTIsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDc5LCA2NywgNjcsIDc2LCAKKyAgICA4NSwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA4MywgODQsIDgyLCA4NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIDY2LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgNjcsIDIxMiwgNzksIDY2LCA2OSwgNzYsIDg1LCAKKyAgICA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA2NiwgMTI4LCA3OSwgNjUsIDg5LCAxMjgsIDc5LCAKKyAgICA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgMTkzLCA3OSwgNDgsIAorICAgIDUzLCA0OSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA1MywgNDgsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNTMsIDQ4LCAxMjgsIDc5LCA0OCwgNTIsIDU3LCAxMjgsIDc5LCA0OCwgNTIsIDU2LCAxMjgsIDc5LCA0OCwgNTIsIDU1LCAKKyAgICAxMjgsIDc5LCA0OCwgNTIsIDU0LCAxMjgsIDc5LCA0OCwgNTIsIDUzLCAxMjgsIDc5LCA0OCwgNTIsIDUyLCAxMjgsIDc5LCAKKyAgICA0OCwgNTIsIDUxLCAxMjgsIDc5LCA0OCwgNTIsIDUwLCAxMjgsIDc5LCA0OCwgNTIsIDQ5LCAxMjgsIDc5LCA0OCwgNTIsIAorICAgIDQ4LCAxMjgsIDc5LCA0OCwgNTEsIDU3LCAxMjgsIDc5LCA0OCwgNTEsIDU2LCAxMjgsIDc5LCA0OCwgNTEsIDU1LCAxMjgsIAorICAgIDc5LCA0OCwgNTEsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjcsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY2LCAKKyAgICAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgMTI4LCA3OSwgNDgsIDUxLCA1MywgMTI4LCAKKyAgICA3OSwgNDgsIDUxLCA1MiwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDEyOCwgNzksIAorICAgIDQ4LCA1MSwgNTAsIDEyOCwgNzksIDQ4LCA1MSwgNDksIDEyOCwgNzksIDQ4LCA1MSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNTEsIDQ4LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1NywgMTI4LCA3OSwgNDgsIDUwLCAKKyAgICA1NiwgMTI4LCA3OSwgNDgsIDUwLCA1NSwgMTI4LCA3OSwgNDgsIDUwLCA1NCwgMTI4LCA3OSwgNDgsIDUwLCA1MywgNjUsIAorICAgIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDUyLCAxMjgsIAorICAgIDc5LCA0OCwgNTAsIDUxLCAxMjgsIDc5LCA0OCwgNTAsIDUwLCAxMjgsIDc5LCA0OCwgNTAsIDQ5LCAxMjgsIDc5LCA0OCwgCisgICAgNTAsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA0OSwgNTcsIDEyOCwgNzksIDQ4LCA0OSwgNTYsIDEyOCwgNzksIDQ4LCA0OSwgNTUsIDEyOCwgNzksIDQ4LCA0OSwgNTQsIAorICAgIDEyOCwgNzksIDQ4LCA0OSwgNTMsIDEyOCwgNzksIDQ4LCA0OSwgNTIsIDEyOCwgNzksIDQ4LCA0OSwgNTEsIDEyOCwgNzksIAorICAgIDQ4LCA0OSwgNTAsIDEyOCwgNzksIDQ4LCA0OSwgNDksIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY3LCAxMjgsIDc5LCA0OCwgCisgICAgNDksIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNTcsIDEyOCwgNzksIDQ4LCA0OCwgNTYsIDEyOCwgNzksIDQ4LCA0OCwgNTUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIAorICAgIDcwLCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjgsIDEyOCwgNzksIDQ4LCA0OCwgCisgICAgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNTQsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCAxMjgsIDc5LCA0OCwgNDgsIAorICAgIDUyLCAxMjgsIDc5LCA0OCwgNDgsIDUxLCAxMjgsIDc5LCA0OCwgNDgsIDUwLCAxMjgsIDc5LCA0OCwgNDgsIDQ5LCA2NSwgCisgICAgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNDUsIDc5LCA0NSwgNzMsIDEyOCwgCisgICAgNzksIDQ1LCA2OSwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4NCwgMTI4LCA3OCwgOTAsIDg5LCAKKyAgICA4MiwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDEyOCwgNzgsIDkwLCA4OSwgODAsIDEyOCwgNzgsIDkwLCA4OSwgMTI4LCAKKyAgICA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIDEyOCwgNzgsIAorICAgIDkwLCA4NSwgODEsIDEyOCwgNzgsIDkwLCA4NSwgODAsIDEyOCwgNzgsIDkwLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA5MCwgCisgICAgODUsIDc5LCAxMjgsIDc4LCA5MCwgODUsIDIwNiwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgOTAsIDc5LCA4OCwgMTI4LCA3OCwgCisgICAgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgMTI4LCA3OCwgOTAsIDczLCAKKyAgICA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIAorICAgIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIAorICAgIDc4LCA5MCwgNjksIDEyOCwgNzgsIDkwLCA2NSwgODgsIDEyOCwgNzgsIDkwLCA2NSwgODQsIDEyOCwgNzgsIDkwLCA2NSwgCisgICAgODEsIDEyOCwgNzgsIDkwLCA2NSwgODAsIDEyOCwgNzgsIDkwLCA2NSwgMTI4LCA3OCwgOTAsIDE5MywgNzgsIDg5LCA4NywgCisgICAgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgODUsIDEyOCwgNzgsIDg5LCA4NSwgODQsIDEyOCwgCisgICAgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4MCwgMTI4LCAKKyAgICA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA2OSwgMTI4LCA3OCwgODksIDg1LCAxMjgsIDc4LCA4OSwgNzksIAorICAgIDg4LCAxMjgsIDc4LCA4OSwgNzksIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCA4OSwgNzksIDc5LCAxMjgsIAorICAgIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIDEyOCwgNzgsIDg5LCA3MywgCisgICAgODgsIDEyOCwgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjEyLCA3OCwgODksIDczLCAyMTEsIDc4LCA4OSwgCisgICAgNzMsIDIxMCwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCA2OCwgNzksIDEyOCwgNzgsIDg5LCAKKyAgICA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgODksIAorICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCA3OCwgODksIDIwMSwgNzgsIAorICAgIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgMjEyLCA3OCwgODksIDY5LCA3MiwgCisgICAgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIDEyOCwgNzgsIDg5LCAxOTYsIAorICAgIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIDczLCAxMjgsIDc4LCA4OSwgCisgICAgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgNjUsIDY1LCAxMjgsIDc4LCAKKyAgICA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgNzgsIDg3LCA3MywgMTI4LCAKKyAgICA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgNzgsIDg3LCAxMjgsIDc4LCAKKyAgICA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDg1LCAKKyAgICA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgNzgsIDg1LCA4MiwgODgsIAorICAgIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4NSwgNzksIAorICAgIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCA4NSwgNzgsIDg1LCAyMTgsIAorICAgIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIDg1LCA3OCwgNjUsIDg2LCA3MywgCisgICAgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgODIsIDIwNywgNzgsIDg1LCA3NywgCisgICAgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCAKKyAgICA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIAorICAgIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NiwgMTI4LCA3OCwgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIAorICAgIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgCisgICAgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDksIDE3NywgNzgsIDg1LCA0OCwgNTAsIDUwLCAKKyAgICA2NSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAorICAgIDUwLCA0OCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCA2NSwgMTI4LCA3OCwgCisgICAgODUsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3OCwgODUsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MSwgCisgICAgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIAorICAgIDg1LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTUsIDEyOCwgCisgICAgNzgsIDg1LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTIsIAorICAgIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgCisgICAgNDksIDEyOCwgNzgsIDg0LCA4NSwgODUsIDEyOCwgNzgsIDg0LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCAyMTMsIDc4LCA4NCwgCisgICAgNzksIDgxLCA4MCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgNzMsIDY5LCAxOTcsIDc4LCA4NCwgNjksIDg1LCA3OCwgNzEsIDY2LCAKKyAgICA2NSwgMTI4LCA3OCwgODQsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCA2OSwgNzgsIDEyOCwgNzgsIDg0LCA2OSwgNjksIAorICAgIDEyOCwgNzgsIDg0LCA2NSwgODAsIDEyOCwgNzgsIDg0LCA2NSwgMjA4LCA3OCwgODQsIDY1LCA2NSwgMTI4LCA3OCwgODMsIAorICAgIDg1LCA3OSwgMjEyLCA3OCwgODMsIDg1LCA3OCwgMTI4LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3OCwgODMsIDc5LCA3NywgCisgICAgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODAsIDEyOCwgNzgsIDgzLCAKKyAgICA3MywgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgMjEyLCA3OCwgODMsIAorICAgIDcyLCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4MywgNzIsIDg1LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA3MywgNjksIDY5LCAKKyAgICAxMjgsIDc4LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgODEsIDEyOCwgNzgsIDgzLCA3MiwgNjUsIAorICAgIDEyOCwgNzgsIDgzLCA2OSwgODUsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2NSwgCisgICAgMTI4LCA3OCwgODIsIDg5LCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4NCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgODgsIDEyOCwgCisgICAgNzgsIDgyLCA4OSwgODIsIDEyOCwgNzgsIDgyLCA4OSwgODAsIDEyOCwgNzgsIDgyLCA4OSwgMTI4LCA3OCwgODIsIDg1LCAKKyAgICA4OCwgMTI4LCA3OCwgODIsIDg1LCA4NCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODIsIAorICAgIDEyOCwgNzgsIDgyLCA4NSwgODAsIDEyOCwgNzgsIDgyLCA4NSwgMTI4LCA3OCwgODIsIDc5LCA4OCwgMTI4LCA3OCwgODIsIAorICAgIDc5LCA4MCwgMTI4LCA3OCwgODIsIDc5LCAxMjgsIDc4LCA4MiwgNjksIDg4LCAxMjgsIDc4LCA4MiwgNjksIDg0LCAxMjgsIAorICAgIDc4LCA4MiwgNjksIDgwLCAxMjgsIDc4LCA4MiwgNjksIDEyOCwgNzgsIDgyLCA2NSwgODgsIDEyOCwgNzgsIDgyLCA2NSwgCisgICAgODQsIDEyOCwgNzgsIDgyLCA2NSwgODAsIDEyOCwgNzgsIDgyLCA2NSwgMTI4LCA3OCwgNzksIDg5LCAxMjgsIDc4LCA3OSwgCisgICAgODgsIDEyOCwgNzgsIDc5LCA4NiwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA3OSwgODQsIDg0LCA3OSwgMTI4LCAKKyAgICA3OCwgNzksIDg0LCA2OSwgODMsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDc4LCA3OSwgODQsIAorICAgIDY5LCA3MiwgNjksIDY1LCAxOTYsIDc4LCA3OSwgODQsIDY5LCA2NiwgNzksIDc5LCA3NSwgMTI4LCA3OCwgNzksIDg0LCA2OSwgCisgICAgNjYsIDc5LCA3OSwgMjAzLCA3OCwgNzksIDg0LCA2OSwgMTI4LCA3OCwgNzksIDg0LCAxOTcsIDc4LCA3OSwgODQsIDY3LCAKKyAgICA3MiwgNjksIDE5NiwgNzgsIDc5LCA4NCwgNjcsIDcyLCAxMjgsIDc4LCA3OSwgODQsIDEyOCwgNzgsIDc5LCAyMTIsIDc4LCAKKyAgICA3OSwgODMsIDY5LCAxMjgsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIDgyLCA4NCwgNzIsIAorICAgIDY5LCA4MiwgMjA2LCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OCwgNzksIDgyLCA3NywgNjUsIDIwNCwgNzgsIDc5LCAyMTAsIAorICAgIDc4LCA3OSwgODAsIDEyOCwgNzgsIDc5LCA3OSwgNzgsIDg1LCAxMjgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIDc5LCA3OCwgCisgICAgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIAorICAgIDE5NywgNzgsIDc5LCA3OCwgNDUsIDc0LCA3OSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDY2LCA4MiwgCisgICAgNjksIDY1LCA3NSwgNzMsIDc4LCAxOTksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDc5LCA3NSwgNzIsIDg1LCAKKyAgICA3NSwgMTI4LCA3OCwgNzksIDY4LCA2OSwgMTI4LCA3OCwgNzksIDY1LCAxMjgsIDc4LCA3OSwgNDUsIDY2LCA4MiwgNjksIAorICAgIDY1LCAyMDMsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIAorICAgIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDczLCA3MywgMTI4LCA3OCwgNzgsIDc4LCAKKyAgICA3MywgMTI4LCA3OCwgNzgsIDc4LCA2OSwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjUsIAorICAgIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA3MywgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNjUsIDEyOCwgNzgsIDc4LCA3OCwgMTI4LCA3OCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA3OSwgNzksIDEyOCwgCisgICAgNzgsIDc4LCA3MSwgNzksIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzEsIDczLCAxMjgsIDc4LCAKKyAgICA3OCwgNzEsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCAxMjgsIDc4LCA3OCwgNjYsIAorICAgIDgzLCA4MCwgMTI4LCA3OCwgNzcsIDEyOCwgNzgsIDc2LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NywgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNzYsIAorICAgIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgCisgICAgNzYsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NywgMTI4LCAKKyAgICA3OCwgNzYsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNzYsIDQ4LCAKKyAgICA0OCwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgNzYsIAorICAgIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDc2LCAxMjgsIDc4LCA3NSwgNzksIDc3LCAxMjgsIDc4LCA3NSwgMjA3LCA3OCwgNzUsIAorICAgIDczLCA3OCwgNjgsIDczLCAxMjgsIDc4LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODksIDg4LCAKKyAgICAxMjgsIDc4LCA3NCwgODksIDg0LCAxMjgsIDc4LCA3NCwgODksIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgMTI4LCAKKyAgICA3OCwgNzQsIDg5LCA4MCwgMTI4LCA3OCwgNzQsIDg5LCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIDc4LCA3NCwgODUsIAorICAgIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4MSwgNjUsIDEyOCwgNzgsIDc0LCA4NSwgCisgICAgODAsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCA3NCwgODUsIDY5LCAKKyAgICA4MSwgMTI4LCA3OCwgNzQsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDc0LCA4NSwgMTI4LCA3OCwgNzQsIDc5LCA4OCwgMTI4LCAKKyAgICA3OCwgNzQsIDc5LCA4NCwgMTI4LCA3OCwgNzQsIDc5LCA4MCwgMTI4LCA3OCwgNzQsIDc5LCA3OSwgMTI4LCA3OCwgNzQsIAorICAgIDc5LCAxMjgsIDc4LCA3NCwgNzMsIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDg0LCAxMjgsIDc4LCA3NCwgNzMsIDgwLCAxMjgsIAorICAgIDc4LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzgsIDc0LCA3MywgNjksIDgwLCAKKyAgICAxMjgsIDc4LCA3NCwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIDczLCAxMjgsIDc4LCAKKyAgICA3NCwgMjAxLCA3OCwgNzQsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3NCwgNjksIAorICAgIDg1LCA2NSwgNjksIDc4LCA2NSwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY5LCA2OSwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDE5NywgNzgsIDc0LCA2OSwgMTI4LCA3OCwgCisgICAgNzQsIDY1LCA4MSwgMTI4LCA3OCwgNzQsIDY1LCA4MCwgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIDc2LCA3MywgMTI4LCAKKyAgICA3OCwgNzQsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDc0LCA2NSwgNjUsIDEyOCwgNzgsIDczLCA4OCwgMTI4LCA3OCwgNzMsIAorICAgIDg0LCA4MiwgNjksIDEyOCwgNzgsIDczLCA4MywgNjUsIDcxLCAxMjgsIDc4LCA3MywgODIsIDg1LCA3MSwgODUsIDEyOCwgCisgICAgNzgsIDczLCA4MCwgMTI4LCA3OCwgNzMsIDc4LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCA4OSwgMTI4LCAKKyAgICA3OCwgNzMsIDc4LCA2OSwgODQsIDIxNywgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDc4LCAxMjgsIDc4LCA3MywgNzgsIAorICAgIDY5LCA4NCwgNjksIDY5LCAyMDYsIDc4LCA3MywgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OCwgCisgICAgNzMsIDc4LCAxOTcsIDc4LCA3MywgNzgsIDY4LCA2NSwgNTAsIDEyOCwgNzgsIDczLCA3OCwgNjgsIDY1LCAxNzgsIDc4LCAKKyAgICA3MywgNzcsIDEyOCwgNzgsIDczLCAyMDUsIDc4LCA3MywgNzUsIDcyLCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIAorICAgIDc1LCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgMTI4LCA3OCwgNzMsIDcyLCA4MywgNzIsIDg2LCA2NSwgCisgICAgODMsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDc3LCA3MywgNzgsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCAKKyAgICA2NSwgNjksIDgzLCA3MiwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzgsIAorICAgIDczLCA3MSwgNzEsIDY1LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgCisgICAgNzgsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgCisgICAgNjksIDg1LCA3OCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNzMsIAorICAgIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCisgICAgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKKyAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc4LCA3MywgNjksIAorICAgIDg1LCAyMDYsIDc4LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MywgNjksIDEyOCwgNzgsIDczLCA2NiwgMTI4LCA3OCwgNzMsIAorICAgIDY1LCAxMjgsIDc4LCA3MywgNTAsIDEyOCwgNzgsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDcyLCA3NCwgNjUsIDEyOCwgNzgsIAorICAgIDcyLCAxMjgsIDc4LCA3MSwgODksIDY5LCAxMjgsIDc4LCA3MSwgODYsIDY5LCAxMjgsIDc4LCA3MSwgODUsIDg1LCAxMjgsIAorICAgIDc4LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDEyOCwgCisgICAgNzgsIDcxLCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3OSwgODgsIAorICAgIDEyOCwgNzgsIDcxLCA3OSwgODUsIDEyOCwgNzgsIDcxLCA3OSwgMjEzLCA3OCwgNzEsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIAorICAgIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDc5LCA4MCwgMTI4LCA3OCwgNzEsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIDc5LCA3NywgCisgICAgMTI4LCA3OCwgNzEsIDc5LCA2OSwgNzIsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDIwMCwgNzgsIDcxLCAyMDcsIDc4LCA3MSwgCisgICAgNzUsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAorICAgIDY5LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDE5NywgNzgsIDcxLCA3NSwgNzMsIDc4LCA2OCwgCisgICAgMjAxLCA3OCwgNzEsIDc1LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCAKKyAgICA3NSwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc4LCA3MSwgNzUsIAorICAgIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNzUsIDY1LCA2NSwgNzcsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCAxMjgsIDc4LCA3MSwgNzMsIAorICAgIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA3MywgNjksIDEyOCwgNzgsIDcxLCA3MiwgCisgICAgNjUsIDEyOCwgNzgsIDcxLCA3MSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgyLCA2NSwgNjksIAorICAgIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3MSwgCisgICAgODUsIDc5LCAyMDksIDc4LCA3MSwgNzEsIDg1LCA3OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCA3NywgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgODUsIAorICAgIDY1LCA2OSwgODMsIDcyLCA2NSwgMTk3LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCAyMDYsIDc4LCA3MSwgNzEsIDg1LCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDc5LCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3MywgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIAorICAgIDcxLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMjEzLCA3OCwgNzEsIDcxLCA2OSwgNzgsIDEyOCwgCisgICAgNzgsIDcxLCA3MSwgNjksIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIAorICAgIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDEyOCwgCisgICAgNzgsIDcxLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA2OSwgODUsIDgyLCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MSwgNjksIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNjksIDY1LCA2OCwgNjUsIAorICAgIDc2LCAxMjgsIDc4LCA3MSwgNjUsIDg4LCAxMjgsIDc4LCA3MSwgNjUsIDg1LCAxMjgsIDc4LCA3MSwgNjUsIDg0LCAxMjgsIAorICAgIDc4LCA3MSwgNjUsIDIxMSwgNzgsIDcxLCA2NSwgODEsIDEyOCwgNzgsIDcxLCA2NSwgODAsIDEyOCwgNzgsIDcxLCA2NSwgCisgICAgNzgsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgMTI4LCA3OCwgNzEsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDY1LCAKKyAgICA3MiwgMTI4LCA3OCwgNzEsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDcxLCAxOTMsIDc4LCA3MCwgMTI4LCA3OCwgNjksIDg4LCAKKyAgICAyMTIsIDc4LCA2OSwgODgsIDEyOCwgNzgsIDY5LCA4NywgODMsIDgwLCA2NSwgODAsIDY5LCA4MiwgMTI4LCA3OCwgNjksIAorICAgIDg3LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDg3LCAxMjgsIDc4LCA2OSwgODUsIDg0LCA4MiwgNjUsIDIwNCwgCisgICAgNzgsIDY5LCA4NSwgODQsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg0LCAxMjgsIDc4LCA2OSwgMjEyLCA3OCwgNjksIDgzLCAKKyAgICA4NCwgNjksIDE5NiwgNzgsIDY5LCA4MSwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzgsIDY5LCA4MCwgODQsIDg1LCA3OCwgNjksIAorICAgIDEyOCwgNzgsIDY5LCA4MCwgMTI4LCA3OCwgNjksIDc5LCAxMjgsIDc4LCA2OSwgMjA3LCA3OCwgNjksIDc4LCA2NSwgNzgsIAorICAgIDc5LCAxMjgsIDc4LCA2OSwgNzgsIDEyOCwgNzgsIDY5LCA3NiwgMTI4LCA3OCwgNjksIDczLCA4NCwgNzIsIDY5LCAyMTAsIAorICAgIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNjksIDE5NiwgNzgsIDY5LCA2NywgCisgICAgNzUsIDg0LCA3MywgNjksIDEyOCwgNzgsIDY5LCA2NiwgNjksIDc4LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDc4LCAKKyAgICA2OCwgODUsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc4LCA2OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjgsIAorICAgIDg1LCA4MiwgMTI4LCA3OCwgNjgsIDg1LCA4MCwgMTI4LCA3OCwgNjgsIDg1LCA3OCwgMTI4LCA3OCwgNjgsIDIxMywgNzgsIAorICAgIDY4LCA3OSwgODgsIDEyOCwgNzgsIDY4LCA3OSwgODQsIDEyOCwgNzgsIDY4LCA3OSwgODAsIDEyOCwgNzgsIDY4LCA3OSwgCisgICAgNzksIDEyOCwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzgsIDY4LCA3OSwgNzcsIDY2LCA4NSwgMTI4LCA3OCwgNjgsIDc5LCAKKyAgICA3NiwgMTk3LCA3OCwgNjgsIDczLCA4OCwgMTI4LCA3OCwgNjgsIDczLCA4NCwgMTI4LCA3OCwgNjgsIDczLCA4MSwgMTI4LCAKKyAgICA3OCwgNjgsIDczLCA4MCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY4LCA3MywgNjksIDEyOCwgNzgsIAorICAgIDY4LCA3MywgNjgsIDY1LCAxMjgsIDc4LCA2OCwgNzMsIDY1LCA4MSwgMTI4LCA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3OCwgCisgICAgNjgsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA2NSwgNjksIDgyLCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNzgsIDY4LCA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgMTI4LCAKKyAgICA3OCwgNjgsIDY1LCA4OCwgMTI4LCA3OCwgNjgsIDY1LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA4MCwgMTI4LCA3OCwgNjgsIAorICAgIDY1LCA3NywgMTI4LCA3OCwgNjgsIDY1LCA2NSwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA2OCwgCisgICAgNjUsIDY1LCAxMjgsIDc4LCA2OCwgNjUsIDE5MywgNzgsIDY2LCA4OSwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODQsIDEyOCwgCisgICAgNzgsIDY2LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA2NiwgODksIDgyLCAxMjgsIDc4LCA2NiwgODksIDgwLCAxMjgsIDc4LCAKKyAgICA2NiwgODksIDEyOCwgNzgsIDY2LCA4NSwgODgsIDEyOCwgNzgsIDY2LCA4NSwgODQsIDEyOCwgNzgsIDY2LCA4NSwgODIsIAorICAgIDg4LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAxMjgsIDc4LCA2NiwgODUsIDgwLCAxMjgsIDc4LCA2NiwgODUsIDEyOCwgNzgsIAorICAgIDY2LCA3OSwgODgsIDEyOCwgNzgsIDY2LCA3OSwgODQsIDEyOCwgNzgsIDY2LCA3OSwgODAsIDEyOCwgNzgsIDY2LCA3OSwgCisgICAgMTI4LCA3OCwgNjYsIDczLCA4OCwgMTI4LCA3OCwgNjYsIDczLCA4NCwgMTI4LCA3OCwgNjYsIDczLCA4MCwgMTI4LCA3OCwgCisgICAgNjYsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY2LCA3MywgNjksIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCAxMjgsIDc4LCAKKyAgICA2NiwgNzMsIDEyOCwgNzgsIDY2LCA3MiwgMTI4LCA3OCwgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCAKKyAgICA3OCwgNjYsIDY1LCA4MCwgMTI4LCA3OCwgNjYsIDY1LCAxMjgsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIAorICAgIDc4LCA2NSwgODksIDEyOCwgNzgsIDY1LCA4OCwgNzMsIDY1LCAyMDYsIDc4LCA2NSwgODgsIDEyOCwgNzgsIDY1LCA4NSwgCisgICAgODQsIDcyLCA4MywgMTI4LCA3OCwgNjUsIDg1LCA2OCwgNzMsIDIxOCwgNzgsIDY1LCA4NCwgODUsIDgyLCA2NSwgMjA0LCAKKyAgICA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA3OCwgNjUsIDgzLCA3NSwgNjUsIDgwLCAyMDEsIDc4LCA2NSwgODMsIAorICAgIDcyLCA3MywgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc4LCA2NSwgCisgICAgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNzgsIDY1LCAKKyAgICA4MiwgMTI4LCA3OCwgNjUsIDgxLCAxMjgsIDc4LCA2NSwgNzksIDIxMSwgNzgsIDY1LCA3OCwgODMsIDY1LCA3OCwgNjUsIAorICAgIDgxLCAxMjgsIDc4LCA2NSwgNzgsIDcxLCA3NywgNzksIDc4LCA4NCwgNzIsIDc5LCAxMjgsIDc4LCA2NSwgNzgsIDY4LCAKKyAgICAxMjgsIDc4LCA2NSwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgNzcsIDY5LCAxMjgsIDc4LCA2NSwgNzcsIDE5NywgNzgsIDY1LCAKKyAgICA3NywgNTAsIDEyOCwgNzgsIDY1LCA3NywgMTI4LCA3OCwgNjUsIDc1LCAxMjgsIDc4LCA2NSwgNzMsIDgyLCAxOTMsIDc4LCAKKyAgICA2NSwgNzMsIDIwNCwgNzgsIDY1LCA3MSwgODIsIDIwMSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgNzEsIAorICAgIDY1LCAxMjgsIDc4LCA2NSwgNzEsIDE5MywgNzgsIDY1LCA3MSwgMTI4LCA3OCwgNjUsIDE5OSwgNzgsIDY1LCA2OSwgMTI4LCAKKyAgICA3OCwgNjUsIDY2LCA3NiwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIAorICAgIDY1LCA2NSwgNzUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDczLCAxMjgsIDc4LCA2NSwgCisgICAgMTkzLCA3OCwgNjUsIDUwLCAxMjgsIDc4LCA2NSwgNDUsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDUwLCAxMjgsIDc4LCA0OCwgCisgICAgNTIsIDQ5LCAxMjgsIDc4LCA0OCwgNTIsIDQ4LCAxMjgsIDc4LCA0OCwgNTEsIDU3LCAxMjgsIDc4LCA0OCwgNTEsIDU2LCAKKyAgICAxMjgsIDc4LCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgMTI4LCA3OCwgNDgsIDUxLCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDUxLCA1MywgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIAorICAgIDc4LCA0OCwgNTEsIDUyLCAxMjgsIDc4LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgMTI4LCA3OCwgCisgICAgNDgsIDUxLCA1MCwgMTI4LCA3OCwgNDgsIDUxLCA0OSwgMTI4LCA3OCwgNDgsIDUxLCA0OCwgMTI4LCA3OCwgNDgsIDUwLCAKKyAgICA1NywgMTI4LCA3OCwgNDgsIDUwLCA1NiwgMTI4LCA3OCwgNDgsIDUwLCA1NSwgMTI4LCA3OCwgNDgsIDUwLCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDEyOCwgNzgsIDQ4LCA1MCwgNTIsIDEyOCwgNzgsIAorICAgIDQ4LCA1MCwgNTEsIDEyOCwgNzgsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgNzgsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDY2LCAxMjgsIDc4LCA0OCwgNDksIDU2LCAKKyAgICA2NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3OCwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA3OCwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNDgsIDQ4LCA1NywgCisgICAgMTI4LCA3OCwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgCisgICAgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNDgsIDQ4LCA1MiwgMTI4LCA3OCwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNDgsIDQ4LCAKKyAgICA1MCwgMTI4LCA3OCwgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzgsIDQ1LCA2NSwgODIsIAorICAgIDIxNywgNzcsIDg5LCA4OCwgMTI4LCA3NywgODksIDg0LCAxMjgsIDc3LCA4OSwgODMsIDc2LCA3MywgODQsIDY5LCAxMjgsIAorICAgIDc3LCA4OSwgODAsIDEyOCwgNzcsIDg5LCA2NSwgMTI4LCA3NywgODksIDE5MywgNzcsIDg5LCAxMjgsIDc3LCAyMTcsIDc3LCAKKyAgICA4NywgNzksIDc5LCAxMjgsIDc3LCA4NywgNzksIDEyOCwgNzcsIDg3LCA3MywgNzMsIDEyOCwgNzcsIDg3LCA3MywgMTI4LCAKKyAgICA3NywgODcsIDY5LCA2OSwgMTI4LCA3NywgODcsIDY5LCAxMjgsIDc3LCA4NywgNjUsIDY1LCAxMjgsIDc3LCA4NywgNjUsIAorICAgIDEyOCwgNzcsIDg3LCAxMjgsIDc3LCAyMTUsIDc3LCA4NiwgODMsIDEyOCwgNzcsIDg2LCA3OSwgODAsIDEyOCwgNzcsIDg2LCAKKyAgICA3MywgMTI4LCA3NywgODYsIDY5LCA4NSwgNjUsIDY5LCA3OCwgNzEsIDY1LCA3NywgMTI4LCA3NywgODYsIDEyOCwgNzcsIAorICAgIDIxNCwgNzcsIDg1LCA4OCwgMTI4LCA3NywgODUsIDg1LCA4MywgNzMsIDc1LCA2NSwgODQsIDc5LCA2NSwgNzgsIDEyOCwgCisgICAgNzcsIDg1LCA4NSwgODIsIDY4LCA3MiwgNjUsIDc0LCAxOTMsIDc3LCA4NSwgODUsIDEyOCwgNzcsIDg1LCA4NCwgMTI4LCAKKyAgICA3NywgODUsIDgzLCA3MywgNjcsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDE5NSwgNzcsIDg1LCA4MywgNzIsIDgyLCA3OSwgNzksIAorICAgIDc3LCAxMjgsIDc3LCA4NSwgODMsIDcyLCA1MSwgMTI4LCA3NywgODUsIDgzLCA3MiwgMTc5LCA3NywgODUsIDgzLCA3MiwgCisgICAgMTI4LCA3NywgODUsIDgzLCAyMDAsIDc3LCA4NSwgODIsIDg4LCAxMjgsIDc3LCA4NSwgODIsIDcxLCA4NSwgNTAsIDEyOCwgCisgICAgNzcsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDY1LCAxMjgsIDc3LCA4NSwgODIsIDY4LCAxOTMsIDc3LCAKKyAgICA4NSwgODIsIDEyOCwgNzcsIDg1LCA4MSwgNjgsIDY1LCA3NywgMTI4LCA3NywgODUsIDgwLCAxMjgsIDc3LCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDc3LCA4NSwgNzksIDg0LCAxMjgsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDc3LCA4NSwgNzksIDc3LCA2NSwgCisgICAgNjksIDEyOCwgNzcsIDg1LCA3OSwgMTI4LCA3NywgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIDc3LCA4NSwgNzgsIDY1LCAKKyAgICA3MiwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIAorICAgIDIxMiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCA4NSwgCisgICAgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIAorICAgIDc2LCAxOTcsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA4NSwgNzYsIDg0LCA3MywgCisgICAgNzcsIDY1LCA4MCwgMTI4LCA3NywgODUsIDc2LCA4NCwgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAKKyAgICAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCA4NSwgNzEsIDgzLCAxMjgsIDc3LCA4NSwgNzEsIDEyOCwgNzcsIDg1LCAKKyAgICAxOTksIDc3LCA4NSwgNjksIDEyOCwgNzcsIDg1LCA2NywgNzIsIDEyOCwgNzcsIDg1LCA2NywgMjAwLCA3NywgODUsIDY3LCAKKyAgICA2NSwgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNDUsIAorICAgIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCA4MCwgNjUsIDEyOCwgNzcsIAorICAgIDc5LCA4OSwgNjUsIDczLCAxMjgsIDc3LCA3OSwgODgsIDEyOCwgNzcsIDc5LCA4NiwgNzMsIDE5NywgNzcsIDc5LCA4NiwgCisgICAgNjksIDE5NiwgNzcsIDc5LCA4NSwgODQsIDcyLCAxMjgsIDc3LCA3OSwgODUsIDg0LCAyMDAsIDc3LCA3OSwgODUsIDgzLCAKKyAgICA2OSwgMTI4LCA3NywgNzksIDg1LCA4MywgMTk3LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDgzLCAxMjgsIAorICAgIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgMjA2LCA3NywgCisgICAgNzksIDg1LCA3OCwgMjEyLCA3NywgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDE5NiwgNzcsIDc5LCAKKyAgICA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgNzksIDg0LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA4NSwgODUsIDc3LCAxMjgsIAorICAgIDc3LCA3OSwgODIsIDg0LCA2NSwgODIsIDEyOCwgNzcsIDc5LCA4MiwgODAsIDcyLCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCAKKyAgICA2NSwgMjA0LCA3NywgNzksIDgyLCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NywgNzksIDgwLCAxMjgsIDc3LCA3OSwgNzksIAorICAgIDgzLCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzcsIDc5LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCA3OSwgMjA2LCA3NywgCisgICAgNzksIDc5LCA3NywgODAsIDg1LCA4MSwgMTI4LCA3NywgNzksIDc5LCA3NywgNjksIDg1LCA4NCwgMTI4LCA3NywgNzksIDc5LCAKKyAgICAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MywgNjksIDY5LCA3OCwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzIsIDEyOCwgNzcsIAorICAgIDc5LCA3OCwgODQsIDIwMCwgNzcsIDc5LCA3OCwgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDgzLCA4NCwgCisgICAgNjUsIDY2LCA3NiwgMTk3LCA3NywgNzksIDc4LCA3OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgNzcsIDc5LCA3OCwgNzksIDgyLCAKKyAgICA2NSwgNzMsIDc2LCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NywgNzksIDc4LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NywgNzksIDc4LCA3OSwgCisgICAgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA3NywgNzksIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDc5LCAKKyAgICA3OCwgNzUsIDY5LCA4OSwgMTI4LCA3NywgNzksIDc4LCA3NSwgNjksIDIxNywgNzcsIDc5LCA3OCwgNzMsIDEyOCwgNzcsIAorICAgIDc5LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgNzcsIDc5LCA3OCwgNjksIDIxNywgNzcsIDc5LCA3OCwgCisgICAgMTI4LCA3NywgNzksIDIwNiwgNzcsIDc5LCA3NiwgMTI4LCA3NywgNzksIDcyLCA2NSwgNzcsIDc3LCA2NSwgMTk2LCA3NywgCisgICAgNzksIDY4LCA4NSwgNzYsIDIwNywgNzcsIDc5LCA2OCwgNjksIDgzLCA4NCwgODksIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAKKyAgICA4MywgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDEyOCwgNzcsIDc5LCA2NiwgNzMsIAorICAgIDc2LCAxOTcsIDc3LCA3OSwgNjUsIDEyOCwgNzcsIDIwNywgNzcsIDc4LCA4OSwgNjUsIDIwNSwgNzcsIDc4LCA2NSwgODMsIAorICAgIDEyOCwgNzcsIDc3LCA4MywgODAsIDEyOCwgNzcsIDc3LCAxMjgsIDc3LCAyMDUsIDc3LCA3NiwgNjUsIDEyOCwgNzcsIDc2LCAKKyAgICAxMjgsIDc3LCA3NSwgODAsIDY1LCA4MiwgNjUsIDIwOSwgNzcsIDczLCA4OCwgMTI4LCA3NywgNzMsIDg0LCAxMjgsIDc3LCAKKyAgICA3MywgODMsIDgyLCA2NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgNjYsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDc3LCA3MywgODIsIAorICAgIDczLCAxMjgsIDc3LCA3MywgODIsIDY5LCA2OCwgMTI4LCA3NywgNzMsIDgwLCAxMjgsIDc3LCA3MywgNzgsIDg5LCAxMjgsIAorICAgIDc3LCA3MywgNzgsIDg1LCA4MywgNDUsIDc5LCA4MiwgNDUsIDgwLCA3NiwgODUsIDIxMSwgNzcsIDczLCA3OCwgODUsIDgzLCAKKyAgICAxMjgsIDc3LCA3MywgNzgsIDczLCA4MywgODQsIDY5LCA4MiwgMTI4LCA3NywgNzMsIDc4LCA3MywgNzcsIDY1LCAxMjgsIAorICAgIDc3LCA3MywgNzgsIDczLCA2OCwgNzMsIDgzLCA2NywgMTI4LCA3NywgNzMsIDc4LCA3MywgNjYsIDg1LCA4MywgMTI4LCA3NywgCisgICAgNzMsIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc3LCAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCAyMTEsIDc3LCAKKyAgICA3MywgNzYsIDc2LCA2OSwgODQsIDEyOCwgNzcsIDczLCA3NiwgNzYsIDE5NywgNzcsIDczLCA3NiwgMjA0LCA3NywgNzMsIAorICAgIDc2LCA3NSwgMjE3LCA3NywgNzMsIDc2LCAxMjgsIDc3LCA3MywgNzUsIDg1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIDc1LCA4MiwgNzMsIDEyOCwgNzcsIDczLCA3MywgNzgsIDEyOCwgNzcsIDczLCAKKyAgICA3MywgMTI4LCA3NywgNzMsIDE5OSwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCAKKyAgICA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NywgNzMsIDY5LCAKKyAgICA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgCisgICAgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDY1LCA3OCwgODMsIAorICAgIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNjksIDg1LCA3NywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgMjA1LCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3NywgCisgICAgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzMsIDY5LCAxMjgsIDc3LCA3MywgNjgsIDc2LCA3MywgNzgsIDE5NywgNzcsIDczLCAKKyAgICA2OCwgNjgsIDc2LCA2OSwgNDUsIDg3LCA2OSwgNzYsIDgzLCAyMDAsIDc3LCA3MywgNjgsIDY4LCA3NiwgMTk3LCA3NywgNzMsIAorICAgIDE5NiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgNjcsIDc5LCA4MCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDc5LCA4MCwgCisgICAgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDIwNywgNzcsIDczLCA2NywgMjEwLCA3NywgNzIsIDkwLCAKKyAgICAxMjgsIDc3LCA3MiwgNjUsIDEyOCwgNzcsIDcyLCAxMjgsIDc3LCA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDg0LCAKKyAgICAxMjgsIDc3LCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCAKKyAgICA3NywgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIAorICAgIDc3LCA3MSwgODUsIDEyOCwgNzcsIDcxLCA3OSwgODgsIDEyOCwgNzcsIDcxLCA3OSwgODQsIDEyOCwgNzcsIDcxLCA3OSwgCisgICAgODAsIDEyOCwgNzcsIDcxLCA3OSwgMTI4LCA3NywgNzEsIDIwNywgNzcsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MSwgCisgICAgNzMsIDY5LCAxMjgsIDc3LCA3MSwgNjksIDg4LCAxMjgsIDc3LCA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgCisgICAgNzcsIDcxLCA2NiwgODUsIDEyOCwgNzcsIDcxLCA2NiwgNzksIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3MCwgODUsIDc3LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDczLCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA4NSwgNzgsIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNjksIDc4LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgCisgICAgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCA4MSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCAxMjgsIDc3LCAKKyAgICA3MSwgNjUsIDg4LCAxMjgsIDc3LCA3MSwgNjUsIDg0LCAxMjgsIDc3LCA3MSwgNjUsIDgwLCAxMjgsIDc3LCA3MSwgNjUsIAorICAgIDEyOCwgNzcsIDcxLCAxMjgsIDc3LCA3MCwgNzksIDc4LCAxMjgsIDc3LCA3MCwgNzksIDIwNiwgNzcsIDcwLCA3OSwgMTI4LCAKKyAgICA3NywgNzAsIDczLCA4OSwgNjUsIDgxLCAxMjgsIDc3LCA3MCwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODQsIAorICAgIDEyOCwgNzcsIDcwLCA2OSwgODUsIDgxLCAxMjgsIDc3LCA3MCwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzcsIDcwLCA2NSwgCisgICAgNjUsIDEyOCwgNzcsIDY5LCA5MCwgOTAsIDc5LCAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NSwgMjEyLCA3NywgCisgICAgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCA3OCwgNzQsIDc5LCA3NywgNzgsIDY4LCA2OSwgODUsIDgxLCAxMjgsIDc3LCAKKyAgICA2OSwgODUsIDc4LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA3OSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgCisgICAgMjA0LCA3NywgNjksIDg0LCA4MiwgNzMsIDY1LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIDY5LCAyMTEsIDc3LCAKKyAgICA2OSwgODQsIDc5LCA2NiwgNjksIDc2LCA4NSwgODMsIDEyOCwgNzcsIDY5LCA4NCwgNjksIDc1LCAxMjgsIDc3LCA2OSwgODQsIAorICAgIDY5LCA3MSwgMTI4LCA3NywgNjksIDg0LCA2NSwgNzYsIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgCisgICAgNjksIDc4LCA3MywgNjUsIDIwNiwgNzcsIDY5LCA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MywgODMsIDY1LCAKKyAgICA3MSwgMTk3LCA3NywgNjksIDgzLCA3OSwgMTI4LCA3NywgNjksIDgzLCA3MywgMTI4LCA3NywgNjksIDgzLCA3MiwgMTI4LCAKKyAgICA3NywgNjksIDgyLCA3OSwgNzMsIDg0LCA3MywgMTk1LCA3NywgNjksIDgyLCA3NSwgNzIsIDY1LCAxMjgsIDc3LCA2OSwgODIsIAorICAgIDc1LCA3MiwgMTkzLCA3NywgNjksIDgyLCA3MywgNjgsIDczLCA2NSwgNzgsIDgzLCAxMjgsIDc3LCA2OSwgODIsIDczLCAKKyAgICAxMjgsIDc3LCA2OSwgODIsIDcxLCA2OSwgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCA4OSwgMTI4LCA3NywgNjksIAorICAgIDgyLCA2NywgODUsIDgyLCAyMTcsIDc3LCA2OSwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCA3NywgCisgICAgNjksIDc3LCA3OSwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDgyLCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NywgNjksIDc3LCAKKyAgICA2NiwgNjksIDgyLCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgMjEwLCA3NywgNjksIDc3LCA0NSwgODEsIDc5LCA4MCwgNzIsIAorICAgIDEyOCwgNzcsIDY5LCA3NywgMTI4LCA3NywgNjksIDIwNSwgNzcsIDY5LCA3NiwgNzksIDY4LCA3MywgMTk1LCA3NywgNjksIAorICAgIDc2LCA3MywgNzUsIDEyOCwgNzcsIDY5LCA3MywgOTAsIDczLCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4NCwgNzksIDc4LCAKKyAgICAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDc2LCA3MywgCisgICAgMTI4LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NywgNjksIDY5LCA4NCwgMTI4LCA3NywgNjksIDY5LCAKKyAgICA3NywgODUsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIAorICAgIDczLCA4NSwgNzcsIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA3NywgNjksIDY4LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA2OSwgNjUsIDg0LCAxMjgsIDc3LCA2OSwgNjUsIDIxMiwgCisgICAgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDE5NiwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDY5LCAKKyAgICA2NSwgODMsIDg1LCA4MiwgMTk3LCA3NywgNjgsIDg1LCAyMDYsIDc3LCAxOTYsIDc3LCA2NywgNzIsIDIxMywgNzcsIDY3LCAKKyAgICA3MiwgNjUsIDIwNiwgNzcsIDE5NSwgNzcsIDY2LCA4NSwgNzksIDgxLCAxMjgsIDc3LCA2NiwgODUsIDc5LCAxMjgsIDc3LCAKKyAgICA2NiwgODUsIDY5LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY2LCA4NSwgNjUsIDY5LCAxMjgsIAorICAgIDc3LCA2NiwgNzksIDc5LCAxMjgsIDc3LCA2NiwgNzksIDEyOCwgNzcsIDY2LCA3MywgODQsIDEyOCwgNzcsIDY2LCA3MywgCisgICAgMjEyLCA3NywgNjYsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA3MywgMTI4LCA3NywgNjYsIDY5LCAKKyAgICA4NSwgODgsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3NywgNjYsIDY5LCA4NSwgNzcsIDEyOCwgNzcsIAorICAgIDY2LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY5LCA3OCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgNzUsIDY5LCA2OSwgCisgICAgODQsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDY2LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA4MSwgMTI4LCA3NywgCisgICAgNjYsIDY1LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NiwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAKKyAgICA3NSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAxMjgsIDc3LCA2NiwgNjUsIDE5MywgNzcsIDY2LCAxOTMsIDc3LCAKKyAgICA2NiwgNTIsIDEyOCwgNzcsIDY2LCA1MSwgMTI4LCA3NywgNjYsIDUwLCAxMjgsIDc3LCA2NiwgMTI4LCA3NywgMTk0LCA3NywgCisgICAgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDg5LCAxMjgsIDc3LCA2NSwgODgsIDczLCA3NywgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA4OCwgMTI4LCA3NywgNjUsIDg1LCAxMjgsIDc3LCA2NSwgODQsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIAorICAgIDc3LCA2NSwgODQsIDgyLCA3MywgODgsIDEyOCwgNzcsIDY1LCA4NCwgNjksIDgyLCA3MywgNjUsIDc2LCA4MywgMTI4LCA3NywgCisgICAgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDIxMywgNzcsIDY1LCA4MywgODMsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDY1LCAKKyAgICA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY1LCA4MywgNzksIDgyLCAxOTMsIDc3LCA2NSwgODMsIDc1LCAxMjgsIAorICAgIDc3LCA2NSwgODMsIDcyLCA3MCwgNjUsIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNTAsIDEyOCwgNzcsIDY1LCA4MywgCisgICAgNjcsIDg1LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA2NSwgODIsIDg5LCAxMjgsIDc3LCA2NSwgODIsIDg1LCA3NSwgODUsIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgODQsIDg5LCA4MiwgNzMsIDE5MywgNzcsIDY1LCA4MiwgODIsIDg5LCA3MywgNzgsIDE5OSwgCisgICAgNzcsIDY1LCA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDgyLCAKKyAgICA3NSwgNDUsIDUyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTEsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MCwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDQ5LCAxMjgsIDc3LCA2NSwgODIsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCAKKyAgICA3MiwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDgzLCA3MywgODQsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDY1LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDE5MywgNzcsIAorICAgIDY1LCA4MiwgMTI4LCA3NywgNjUsIDgxLCA2NSwgNzAsIDEyOCwgNzcsIDY1LCA4MSwgMTI4LCA3NywgNjUsIDgwLCA3NiwgCisgICAgMTk3LCA3NywgNjUsIDgwLCA3MywgODEsIDEyOCwgNzcsIDY1LCAyMDgsIDc3LCA2NSwgNzksIDEyOCwgNzcsIDY1LCA3OCwgCisgICAgODMsIDg5LCA3OSwgNzgsIDEyOCwgNzcsIDY1LCA3OCwgODMsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAyMTgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDc4LCA3MSwgNjUsIDc2LCA2NSwgNzcsIDEyOCwgNzcsIAorICAgIDY1LCA3OCwgNjgsIDY1LCA3MywgNzYsIDczLCA3OCwgMTk5LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCAxOTUsIDc3LCA2NSwgCisgICAgNzgsIDY3LCA3MiwgMjEzLCA3NywgNjUsIDc4LCA2NSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNzcsIDY1LCA3NiwgODQsIDY5LCAKKyAgICA4MywgMTk3LCA3NywgNjUsIDc2LCA2OSwgNjksIDgyLCA3MywgMTI4LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3NywgNjUsIAorICAgIDc2LCAxOTcsIDc3LCA2NSwgNzYsIDY1LCA3NSwgNzksIDIwNiwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgNjUsIDEyOCwgCisgICAgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgMTkzLCA3NywgNjUsIDczLCA5MCwgNjksIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCAKKyAgICA3NywgNzksIDc1LCAxMjgsIDc3LCA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIAorICAgIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgCisgICAgMTI4LCA3NywgNjUsIDczLCA3NiwgNjYsIDc5LCAyMTYsIDc3LCA2NSwgNzMsIDc1LCA4NSwgODIsIDc5LCAxMjgsIDc3LCAKKyAgICA2NSwgNzMsIDY4LCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA3MywgMTI4LCA3NywgNjUsIDcyLCA3NCwgNzksIDc4LCAxOTksIAorICAgIDc3LCA2NSwgNzIsIDcyLCA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgCisgICAgNzIsIDY1LCA4MCwgNjUsIDc1LCA3MiwgMTI4LCA3NywgNjUsIDcyLCA2NSwgNjUsIDgwLCA4MiwgNjUsIDY1LCA3OCwgMTkzLCAKKyAgICA3NywgNjUsIDcyLCAxMjgsIDc3LCA2NSwgNzEsIDc4LCA3MywgNzAsIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA2OSwgODMsIAorICAgIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA4OSwgNzMsIDEyOCwgNzcsIDY1LCA2OSwgNzgsIDc0LCA2OSwgODQsIDEyOCwgCisgICAgNzcsIDY1LCA2OSwgNzcsIDg2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA3NSwgODAsIDY5LCA3OCwgMTI4LCAKKyAgICA3NywgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNzEsIDY2LCA3MywgCisgICAgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY1LCAKKyAgICA2OSwgNzYsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NSwgNjksIDg1LCA4MCwgMTI4LCA3NywgNjUsIDY4LCA4OSwgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA2OCwgODUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAyMDAsIDc3LCA2NSwgNjgsIDY4LCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDY4LCA2OCwgMTkzLCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NiwgODIsIDY5LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIAorICAgIDc5LCA3OCwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA2NSwgCisgICAgNjcsIDgyLCA3OSwgMjA2LCA3NywgNjUsIDY3LCA3MiwgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjUsIDY1LCA4OSwgODksIDY1LCAKKyAgICA2NSwgMTI4LCA3NywgNjUsIDY1LCA3MywgMTI4LCA3NywgNjUsIDY1LCAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MiwgNTIsIDEyOCwgNzcsIDQ4LCA1MiwgNTEsIDEyOCwgNzcsIDQ4LCA1MiwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNDksIAorICAgIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNTIsIDQ4LCAxMjgsIDc3LCA0OCwgNTEsIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNTEsIDU2LCAxMjgsIDc3LCA0OCwgNTEsIDU1LCAxMjgsIDc3LCA0OCwgNTEsIDU0LCAxMjgsIDc3LCA0OCwgCisgICAgNTEsIDUzLCAxMjgsIDc3LCA0OCwgNTEsIDUyLCAxMjgsIDc3LCA0OCwgNTEsIDUxLCA2NiwgMTI4LCA3NywgNDgsIDUxLCAKKyAgICA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDEyOCwgNzcsIDQ4LCA1MSwgNTAsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIAorICAgIDY1LCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCAxMjgsIDc3LCA0OCwgNTEsIDQ4LCAxMjgsIDc3LCA0OCwgNTAsIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1NiwgMTI4LCA3NywgNDgsIDUwLCA1NSwgMTI4LCA3NywgCisgICAgNDgsIDUwLCA1NCwgMTI4LCA3NywgNDgsIDUwLCA1MywgMTI4LCA3NywgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MCwgNTIsIDEyOCwgNzcsIDQ4LCA1MCwgNTEsIDEyOCwgNzcsIDQ4LCA1MCwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIAorICAgIDUwLCAxMjgsIDc3LCA0OCwgNTAsIDQ5LCAxMjgsIDc3LCA0OCwgNTAsIDQ4LCAxMjgsIDc3LCA0OCwgNDksIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNDksIDU2LCAxMjgsIDc3LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDEyOCwgNzcsIDQ4LCA0OSwgNTMsIDY1LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUzLCAxMjgsIDc3LCA0OCwgNDksIDUyLCAxMjgsIDc3LCA0OCwgNDksIDUxLCAxMjgsIDc3LCA0OCwgNDksIAorICAgIDUwLCA3MiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzEsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcwLCAxMjgsIDc3LCA0OCwgCisgICAgNDksIDUwLCA2OSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjgsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY3LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUwLCA2NiwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNDksIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCAxMjgsIDc3LCA0OCwgCisgICAgNDgsIDU3LCAxMjgsIDc3LCA0OCwgNDgsIDU2LCAxMjgsIDc3LCA0OCwgNDgsIDU1LCAxMjgsIDc3LCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDc3LCA0OCwgNDgsIDUzLCAxMjgsIDc3LCA0OCwgNDgsIDUyLCAxMjgsIDc3LCA0OCwgNDgsIDUxLCA2NSwgMTI4LCAKKyAgICA3NywgNDgsIDQ4LCA1MSwgMTI4LCA3NywgNDgsIDQ4LCA1MCwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgNjYsIDEyOCwgNzcsIAorICAgIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCAxMjgsIDc2LCAyMTgsIDc2LCA4OSwgODksIDEyOCwgNzYsIAorICAgIDg5LCA4OCwgMTI4LCA3NiwgODksIDg0LCAxMjgsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDc2LCA4OSwgODIsIDEyOCwgNzYsIAorICAgIDg5LCA4MCwgMTI4LCA3NiwgODksIDY4LCA3MywgNjUsIDIwNiwgNzYsIDg5LCA2NywgNzMsIDY1LCAyMDYsIDc2LCA4OCwgCisgICAgMTI4LCA3NiwgODcsIDc5LCA3OSwgMTI4LCA3NiwgODcsIDc5LCAxMjgsIDc2LCA4NywgNzMsIDczLCAxMjgsIDc2LCA4NywgCisgICAgNzMsIDEyOCwgNzYsIDg3LCA2OSwgMTI4LCA3NiwgODcsIDY1LCA2NSwgMTI4LCA3NiwgODcsIDY1LCAxMjgsIDc2LCA4NSwgCisgICAgODgsIDEyOCwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgODUsIDg0LCAxMjgsIDc2LCA4NSwgODIsIDg4LCAxMjgsIDc2LCA4NSwgCisgICAgODAsIDEyOCwgNzYsIDg1LCA3OSwgODgsIDEyOCwgNzYsIDg1LCA3OSwgODQsIDEyOCwgNzYsIDg1LCA3OSwgODAsIDEyOCwgCisgICAgNzYsIDg1LCA3OSwgMTI4LCA3NiwgODUsIDc4LCA3MSwgODMsIDczLCAxMjgsIDc2LCA4NSwgNzgsIDY1LCA4NCwgMTk3LCAKKyAgICA3NiwgODUsIDIwNSwgNzYsIDg1LCA3NiwgMTI4LCA3NiwgODUsIDczLCA4MywgMTI4LCA3NiwgODUsIDcyLCA4NSwgODIsIAorICAgIDEyOCwgNzYsIDg1LCA3MiwgMTI4LCA3NiwgODUsIDcxLCA3MSwgNjUsIDcxLCA2OSwgMTI4LCA3NiwgODUsIDcxLCA2NSwgCisgICAgNzYsIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDIwNCwgNzYsIDg1LCA2OSwgMTI4LCA3NiwgODUsIDY1LCA2OSwgODAsIDEyOCwgCisgICAgNzYsIDg1LCA1MSwgMTI4LCA3NiwgODUsIDUwLCAxMjgsIDc2LCA4NSwgMTc4LCA3NiwgODIsIDc5LCAxMjgsIDc2LCA4MiwgCisgICAgNzcsIDEyOCwgNzYsIDgyLCA3MywgMTI4LCA3NiwgODIsIDY5LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDY5LCAKKyAgICAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDE5NywgNzYsIDc5LCA4OCwgMTI4LCA3NiwgNzksIDg3LCA2OSwgODIsIAorICAgIDY5LCAxOTYsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDc2LCA3OSwgODcsIDQ1LCAxODUsIDc2LCA3OSwgODYsIDE5NywgNzYsIAorICAgIDc5LCA4NSwgODIsIDY5LCAxMjgsIDc2LCA3OSwgODUsIDY4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCA3NiwgCisgICAgNzksIDg1LCA2OCwgNzYsIDIxNywgNzYsIDc5LCA4NCwgODUsIDgzLCAxMjgsIDc2LCA3OSwgODQsIDEyOCwgNzYsIDc5LCAKKyAgICA4MiwgODIsIDg5LCAxMjgsIDc2LCA3OSwgODIsIDgyLCA2NSwgNzMsIDc4LCA2OSwgMTI4LCA3NiwgNzksIDgxLCAxMjgsIAorICAgIDc2LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgODQsIDEyOCwgNzYsIDc5LCA3OSwgODAsIDY5LCAxOTYsIDc2LCA3OSwgCisgICAgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDIwOCwgNzYsIDc5LCA3OSwgNzgsIDEyOCwgNzYsIDc5LCA3OSwgMjAzLCA3NiwgCisgICAgNzksIDc5LCAxMjgsIDc2LCA3OSwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCAKKyAgICA3OSwgNzgsIDcxLCAxOTMsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDg5LCA4MiwgCisgICAgMTI4LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4MywgNzksIDIwNCwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzksIDgzLCAyMTEsIDc2LCA3OSwgNzgsIDcxLCA0NSwgCisgICAgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIAorICAgIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKKyAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDY1LCAyMTAsIDc2LCA3OSwgNzcsIDc3LCA2NSwgNjksIDEyOCwgNzYsIDc5LCA3NywgCisgICAgMTI4LCA3NiwgNzksIDIwNSwgNzYsIDc5LCA3NiwgNzYsIDczLCA4MCwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzYsIDc2LCAKKyAgICAxMjgsIDc2LCA3OSwgNzEsIDIxMCwgNzYsIDc5LCA3MSwgNzksIDg0LCA4OSwgODAsIDE5NywgNzYsIDc5LCA3MSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDIwNSwgNzYsIDc5LCA3MSwgMTI4LCA3NiwgNzksIDY4LCA2OSwgODMsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDc2LCA3OSwgNjcsIDc5LCA3NywgNzksIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDc1LCA3MywgNzgsIAorICAgIDcxLCA0NSwgODMsIDcyLCA3MywgNzAsIDIxMiwgNzYsIDc5LCA2NywgMjAzLCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA4NiwgCisgICAgNjksIDEyOCwgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDc5LCA2NSwgMTI4LCA3NiwgNzgsIDEyOCwgCisgICAgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCAKKyAgICA3NiwgNzYsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgMTI4LCA3NiwgNzYsIAorICAgIDc2LCA3MywgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNjksIDY5LCAxMjgsIDc2LCA3NiwgCisgICAgNzYsIDY5LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgNzMsIDEyOCwgNzYsIDc2LCAKKyAgICA3NiwgNjUsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDEyOCwgNzYsIDc0LCA4NSwgNjgsIAorICAgIDczLCA3NCwgNjksIDEyOCwgNzYsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDEyOCwgNzYsIDczLCA4OCwgMTI4LCA3NiwgNzMsIAorICAgIDg3LCA3OCwgMTI4LCA3NiwgNzMsIDg2LCA4MiwgMTk3LCA3NiwgNzMsIDg0LCA4NCwgNzYsIDE5NywgNzYsIDczLCA4NCwgCisgICAgODQsIDY5LCAyMTAsIDc2LCA3MywgODQsIDgyLCAxOTMsIDc2LCA3MywgODQsIDEyOCwgNzYsIDczLCA4MywgMjEzLCA3NiwgCisgICAgNzMsIDgyLCAxOTMsIDc2LCA3MywgODEsIDg1LCA3MywgMTk2LCA3NiwgNzMsIDgxLCAxMjgsIDc2LCA3MywgODAsIDgzLCAKKyAgICA4NCwgNzMsIDY3LCA3NSwgMTI4LCA3NiwgNzMsIDc4LCA3NSwgNzMsIDc4LCAxOTksIDc2LCA3MywgNzgsIDIwMywgNzYsIAorICAgIDczLCA3OCwgNzEsIDgzLCA2NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDczLCA3OCwgNjksIDIxMSwgCisgICAgNzYsIDczLCA3OCwgNjksIDQ1LCA1NywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCAKKyAgICA0NSwgNTEsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIAorICAgIDc2LCA3MywgNzcsIDc3LCA4NSwgNTAsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDc2LCA3MywgNzcsIDc3LCAKKyAgICAyMTMsIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDE5NiwgNzYsIDczLCA3NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgNzYsIDczLCA3NywgNzMsIDg0LCAxMjgsIDc2LCA3MywgNzcsIDY5LCAxMjgsIDc2LCA3MywgNzcsIDY2LCAyMTMsIAorICAgIDc2LCA3MywgNzYsIDg5LCAxMjgsIDc2LCA3MywgNzYsIDczLCA4NCwgNzIsIDEyOCwgNzYsIDczLCA3NiwgMTI4LCA3NiwgCisgICAgNzMsIDcxLCA3MiwgODQsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzIsIDc5LCA4NSwgODMsIAorICAgIDY5LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNzMsIDcwLCA2OSwgMTI4LCA3NiwgNzMsIDY5LCA4OCwgCisgICAgMTI4LCA3NiwgNzMsIDY5LCA4NCwgMTI4LCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3NiwgNzMsIDY5LCA2OSwgMTI4LCA3NiwgCisgICAgNzMsIDY5LCAxMjgsIDc2LCA3MywgNjgsIDEyOCwgNzYsIDczLCA2NiwgODIsIDY1LCAxMjgsIDc2LCA3MywgNjYsIDY5LCAKKyAgICA4MiwgODQsIDg5LCAxMjgsIDc2LCA3MywgNjUsIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA3NiwgNzIsIDczLCA3MywgCisgICAgMTI4LCA3NiwgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDE5OSwgNzYsIDcyLCAKKyAgICA2NSwgNjUsIDEyOCwgNzYsIDcyLCAxMjgsIDc2LCA2OSwgOTAsIDcyLCAxMjgsIDc2LCA2OSwgODgsIDEyOCwgNzYsIDY5LCAKKyAgICA4NiwgNjksIDIwNCwgNzYsIDY5LCA4NSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgNjksIAorICAgIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc2LCA2OSwgODUsIDEyOCwgNzYsIDY5LCAyMTMsIDc2LCA2OSwgODQsIDg0LCA2OSwgCisgICAgODIsIDgzLCAxMjgsIDc2LCA2OSwgODQsIDg0LCA2OSwgODIsIDEyOCwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgODMsIDgzLCAKKyAgICA2OSwgMjEwLCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIAorICAgIDcyLCA2NSwgMjA2LCA3NiwgNjksIDgwLCAxMjgsIDc2LCA2OSwgNzksIDgwLCA2NSwgODIsIDY4LCAxMjgsIDc2LCA2OSwgCisgICAgNzksIDEyOCwgNzYsIDY5LCA3OCwgODQsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NiwgNjksIDc4LCA3MywgODMsIAorICAgIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgNjksIDc4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCAKKyAgICAyMDAsIDc2LCA2OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNjksIDc4LCA3MSwgMTkzLCA3NiwgNjksIDc3LCA3OSwgNzgsIAorICAgIDEyOCwgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIDc2LCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA3NiwgNjksIDc2LCA2OSwgCisgICAgMjEyLCA3NiwgNjksIDIwMywgNzYsIDY5LCA3MywgNzcsIDc3LCA2NSwgMTI4LCA3NiwgNjksIDczLCA3NywgNzcsIDE5MywgCisgICAgNzYsIDY5LCA3MSwgODMsIDEyOCwgNzYsIDY5LCA3MSwgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDcxLCA2OSwgODQsIDc5LCAKKyAgICAyMTEsIDc2LCA2OSwgNzEsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA3NiwgNjksIAorICAgIDcwLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDgyLCA3MywgNzEsIDcyLCAyMTIsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDg0LCAKKyAgICA2OSwgMjA1LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzIsIAorICAgIDY1LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA3NiwgCisgICAgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIAorICAgIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA3MCwgODQsIDEyOCwgCisgICAgNzYsIDY5LCA2OSwgODIsIDY1LCA2OSwgODcsIDY1LCAxMjgsIDc2LCA2OSwgNjksIDc1LCAxMjgsIDc2LCA2OSwgNjksIDY5LCAKKyAgICA2OSwgMTI4LCA3NiwgNjksIDY4LCA3MSwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIAorICAgIDc2LCA2OSwgNjUsIDcwLCAxMjgsIDc2LCA2OSwgNjUsIDE5OCwgNzYsIDY5LCA2NSwgNjgsIDczLCA3OCwgMTk5LCA3NiwgCisgICAgNjksIDY1LCA2OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDE5NiwgNzYsIDY4LCA2NSwgNzgsIDEyOCwgNzYsIDY4LCAKKyAgICA1MCwgMTI4LCA3NiwgNjcsIDIwMSwgNzYsIDY3LCAxOTcsIDc2LCA2NSwgOTAsIDIxNywgNzYsIDY1LCA4OSwgNjUsIDc4LCAKKyAgICA3OCwgNjUsIDEyOCwgNzYsIDY1LCA4OCwgMTI4LCA3NiwgNjUsIDg3LCAxMjgsIDc2LCA2NSwgMjE1LCA3NiwgNjUsIDg1LCAKKyAgICA3NiwgNjUsIDEyOCwgNzYsIDY1LCA4NSwgNzUsIDY1LCAyMTgsIDc2LCA2NSwgODQsIDczLCA3OCwgNjUsIDg0LCAxOTcsIAorICAgIDc2LCA2NSwgODQsIDczLCA3NSwgMTI4LCA3NiwgNjUsIDg0LCA2OSwgODIsIDY1LCAyMDQsIDc2LCA2NSwgODQsIDE5NywgCisgICAgNzYsIDY1LCA4MywgMjEyLCA3NiwgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAKKyAgICAyMTAsIDc2LCA2NSwgODIsIDcxLCA2OSwgMTI4LCA3NiwgNjUsIDgyLCA3MSwgMTk3LCA3NiwgNjUsIDgxLCAxMjgsIDc2LCAKKyAgICA2NSwgODAsIDY1LCA4MSwgMTI4LCA3NiwgNjUsIDgwLCAxMjgsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIAorICAgIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAxOTcsIDc2LCA2NSwgNzgsIDY5LCA4MywgMTI4LCA3NiwgNjUsIDc3LCA2OSwgCisgICAgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgMTk2LCA3NiwgNjUsIDc3LCAKKyAgICA2OSwgMTI4LCA3NiwgNjUsIDc3LCAxOTcsIDc2LCA2NSwgNzcsIDY4LCA2NSwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgMTI4LCAKKyAgICA3NiwgNjUsIDc3LCA2NiwgNjgsIDE5MywgNzYsIDY1LCA3NywgNjUsIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc2LCAxMjgsIAorICAgIDc2LCA2NSwgMjA0LCA3NiwgNjUsIDc1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDg5LCA2NSwgNzksIDEyOCwgNzYsIDY1LCA3NCwgCisgICAgNjUsIDc4LCA4OSwgNjUsIDc2LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCAyMDEsIDc2LCA2NSwgNzIsIDgzLCA3MiwgODUsIAorICAgIDEyOCwgNzYsIDY1LCA3MiwgMTI4LCA3NiwgNjUsIDcxLCA4NSwgODMsIDEyOCwgNzYsIDY1LCA3MSwgMjEzLCA3NiwgNjUsIAorICAgIDcxLCA2NSwgODIsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDIxMCwgNzYsIDY1LCA3MSwgNjUsIDY2LCAxMjgsIDc2LCA2NSwgCisgICAgNzEsIDY1LCAxOTQsIDc2LCA2NSwgNjksIDg2LCAxMjgsIDc2LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2OCwgMjE3LCA3NiwgCisgICAgNjUsIDY3LCA3NSwgMTI4LCA3NiwgNjUsIDY3LCA2NSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODUsIDgyLCA3MywgNzgsIDcxLCAKKyAgICAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4MiwgMTI4LCA3NiwgNjUsIDY2LCA3MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDc2LCA2NSwgNjYsIDczLCA2NSwgMjA0LCA3NiwgNjUsIDY2LCA2NSwgODQsIDEyOCwgNzYsIDY1LCA2NSwgCisgICAgNzgsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIDY1LCA3NywgODUsIDEyOCwgNzYsIDY1LCAKKyAgICA2NSwgNzcsIDEyOCwgNzYsIDY1LCA2NSwgNzMsIDEyOCwgNzYsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDc2LCA0OCwgNDgsIAorICAgIDUwLCA2NSwgMTI4LCA3NiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzYsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgCisgICAgNzUsIDg5LCA4NSwgODIsIDczLCA3MywgMTI4LCA3NSwgODksIDg1LCAxMjgsIDc1LCA4OSwgNzksIDEyOCwgNzUsIDg5LCAKKyAgICA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg5LCA3MywgMTI4LCA3NSwgODksIDY5LCAxMjgsIDc1LCA4OSwgNjUsIAorICAgIDg0LCA3MiwgNzksIDIxMSwgNzUsIDg5LCA2NSwgNjUsIDEyOCwgNzUsIDg5LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA3MywgCisgICAgMTI4LCA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA4NywgNjksIDEyOCwgNzUsIDg4LCA4NywgNjUsIDY1LCAKKyAgICAxMjgsIDc1LCA4OCwgODcsIDY1LCAxMjgsIDc1LCA4OCwgODUsIDEyOCwgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIDczLCAKKyAgICAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCA4OCwgNjksIDEyOCwgNzUsIDg4LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCAKKyAgICA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAxMjgsIDc1LCA4NywgNzksIDc5LCAxMjgsIDc1LCA4NywgNzksIAorICAgIDEyOCwgNzUsIDg3LCA3MywgNzMsIDEyOCwgNzUsIDg3LCA3MywgMTI4LCA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODcsIAorICAgIDY5LCAxMjgsIDc1LCA4NywgNjUsIDg5LCAxMjgsIDc1LCA4NywgNjUsIDY5LCA4NCwgMTI4LCA3NSwgODcsIDY1LCA2NSwgCisgICAgMTI4LCA3NSwgODYsIDY1LCAxMjgsIDc1LCA4NiwgMTI4LCA3NSwgODUsIDg4LCAxMjgsIDc1LCA4NSwgODUsIDcyLCAxMjgsIAorICAgIDc1LCA4NSwgODQsIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4NSwgODMsIDcyLCA4NSwgNTAsIDEyOCwgCisgICAgNzUsIDg1LCA4MiwgODgsIDEyOCwgNzUsIDg1LCA4MiwgODUsIDkwLCA2OSwgNzMsIDgyLCA3OSwgMTI4LCA3NSwgODUsIDgyLCAKKyAgICA4NCwgMTI4LCA3NSwgODUsIDgyLCA3OSwgNzksIDc4LCA2OSwgMTI4LCA3NSwgODUsIDgyLCAxMjgsIDc1LCA4NSwgMjEwLCAKKyAgICA3NSwgODUsIDgxLCAxMjgsIDc1LCA4NSwgNzksIDg4LCAxMjgsIDc1LCA4NSwgNzksIDgwLCAxMjgsIDc1LCA4NSwgNzksIAorICAgIDIwOCwgNzUsIDg1LCA3OSwgNzcsIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIAorICAgIDc4LCA2OCwgNjgsIDY1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NSwgODUsIDc2LCAxMjgsIDc1LCA4NSwgMjA0LCA3NSwgCisgICAgODUsIDY5LCA4NCwgMTI4LCA3NSwgODUsIDU1LCAxMjgsIDc1LCA4NSwgNTIsIDEyOCwgNzUsIDg1LCAxODAsIDc1LCA4NSwgCisgICAgNTEsIDEyOCwgNzUsIDg1LCAxNzksIDc1LCA4NCwgMTI4LCA3NSwgODMsIDgzLCA4NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgCisgICAgODUsIDEyOCwgNzUsIDgzLCA4MywgNzksIDc5LCAxMjgsIDc1LCA4MywgODMsIDc5LCAxMjgsIDc1LCA4MywgODMsIDczLCAKKyAgICA3MywgMTI4LCA3NSwgODMsIDgzLCA3MywgMTI4LCA3NSwgODMsIDgzLCA2OSwgNjksIDEyOCwgNzUsIDgzLCA4MywgNjksIAorICAgIDEyOCwgNzUsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDY1LCA3MywgMTI4LCA3NSwgODMsIDgzLCA2NSwgCisgICAgNjUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDEyOCwgNzUsIDgzLCA4MywgMTI4LCA3NSwgODMsIDczLCAxMjgsIDc1LCA4MiwgCisgICAgNjksIDc3LCA2NSwgODMsIDg0LCA3MywgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIAorICAgIDgyLCA3OSwgNzksIDc4LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCAKKyAgICA3NywgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIAorICAgIDc3LCAxOTMsIDc1LCA4MCwgODUsIDEyOCwgNzUsIDgwLCA3OSwgODEsIDEyOCwgNzUsIDgwLCA3OSwgNzksIDEyOCwgNzUsIAorICAgIDgwLCA3OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA3NSwgODAsIDY5LCA2OSwgCisgICAgMTI4LCA3NSwgODAsIDY5LCAxMjgsIDc1LCA4MCwgNjUsIDgyLCA2NSwgODEsIDEyOCwgNzUsIDgwLCA2NSwgNzgsIDEyOCwgCisgICAgNzUsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCA3OSwgODYsIDg1LCA4NSwgMTI4LCA3NSwgNzksIDg0LCAKKyAgICA3OSwgMTI4LCA3NSwgNzksIDgyLCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgODIsIDc5LCA3OCwgNzMsIDgzLCAxMjgsIAorICAgIDc1LCA3OSwgODIsIDY5LCA2NSwgMjA2LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAxOTUsIDc1LCA3OSwgODEsIDc4LCA2OCwgCisgICAgNzksIDc4LCAxMjgsIDc1LCA3OSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDgwLCAxMjgsIDc1LCA3OSwgNzksIDgwLCAKKyAgICA3OSwgMTI4LCA3NSwgNzksIDc5LCA3NywgODUsIDg1LCA4NCwgMTI4LCA3NSwgNzksIDc5LCAxMjgsIDc1LCA3OSwgNzgsIAorICAgIDg0LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgMTkzLCA3NSwgNzksIDc3LCAKKyAgICAyMDEsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDE5MywgNzUsIAorICAgIDc5LCA3NywgNjYsIDIxMywgNzUsIDc5LCA3NSwgNzksIDEyOCwgNzUsIDc5LCA3NSwgMTI4LCA3NSwgNzksIDIwMywgNzUsIAorICAgIDc5LCA3MywgMTI4LCA3NSwgNzksIDIwMSwgNzUsIDc5LCA3MiwgMTI4LCA3NSwgNzksIDcxLCA3MiwgNzksIDc3LCAxMjgsIAorICAgIDc1LCA3OSwgNjksIDg0LCAxMjgsIDc1LCA3OSwgNjUsIDc2LCA2NSwgMTI4LCA3NSwgNzksIDY1LCAxMjgsIDc1LCA3OCwgCisgICAgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCAyMTIsIDc1LCA3OCwgNzMsIDcwLCA2OSwgMTI4LCAKKyAgICA3NSwgNzgsIDczLCA3MCwgMTk3LCA3NSwgNzcsIDEyOCwgNzUsIDIwNSwgNzUsIDc2LCA3MywgODQsIDc5LCA3OCwgMTI4LCAKKyAgICA3NSwgNzYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgMTkzLCA3NSwgNzYsIDY1LCAxMjgsIAorICAgIDc1LCA3NiwgMTI4LCA3NSwgNzUsIDg1LCAxMjgsIDc1LCA3NSwgNzksIDEyOCwgNzUsIDc1LCA3MywgMTI4LCA3NSwgNzUsIAorICAgIDY5LCA2OSwgMTI4LCA3NSwgNzUsIDY5LCAxMjgsIDc1LCA3NSwgNjUsIDEyOCwgNzUsIDc1LCAxMjgsIDc1LCA3NCwgNjksIAorICAgIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzUsIDczLCA4OSwgCisgICAgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3NSwgNzMsIAorICAgIDg5LCA2OSwgNzksIDc1LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgCisgICAgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzUsIDczLCAKKyAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgMjAzLCA3NSwgNzMsIDg4LCAxMjgsIDc1LCA3MywgODQsIDEyOCwgNzUsIDczLCA4MywgODMsIDczLCA3OCwgMTk5LCA3NSwgCisgICAgNzMsIDgzLCA4MywgMTI4LCA3NSwgNzMsIDgzLCAyMTEsIDc1LCA3MywgODMsIDczLCA3NywgNTMsIDEyOCwgNzUsIDczLCAKKyAgICA4MywgNzMsIDc3LCAxODEsIDc1LCA3MywgODMsIDcyLCAxMjgsIDc1LCA3MywgODMsIDY1LCA3NiwgMTI4LCA3NSwgNzMsIAorICAgIDgyLCA3OSwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCAKKyAgICA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgCisgICAgMTI4LCA3NSwgNzMsIDgyLCA3MSwgNzIsIDczLCAyMTgsIDc1LCA3MywgODEsIDEyOCwgNzUsIDczLCA4MCwgMTI4LCA3NSwgCisgICAgNzMsIDIwOCwgNzUsIDczLCA3OCwgODMsIDcyLCA3MywgODAsIDEyOCwgNzUsIDczLCA3OCwgNjgsIDY5LCA4MiwgNzEsIDY1LCAKKyAgICA4MiwgODQsIDY5LCA3OCwgMTI4LCA3NSwgNzMsIDc3LCA3OSwgNzgsIDc5LCAxMjgsIDc1LCA3MywgNzMsIDEyOCwgNzUsIAorICAgIDczLCA3MiwgMTI4LCA3NSwgNzMsIDY5LCA4OCwgMTI4LCA3NSwgNzMsIDY5LCA4MCwgMTI4LCA3NSwgNzMsIDY5LCA2OSwgCisgICAgNzcsIDEyOCwgNzUsIDczLCA2OSwgMTI4LCA3NSwgNzMsIDY4LCAxMjgsIDc1LCA3MywgMTk2LCA3NSwgNzMsIDY3LCA3NSwgCisgICAgMTI4LCA3NSwgNzIsIDkwLCAxMjgsIDc1LCA3MiwgODcsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDg1LCA2OSwgNzgsIDQ1LCAKKyAgICA3NiwgODUsIDE5NywgNzUsIDcyLCA4NSwgNjksIDIwNiwgNzUsIDcyLCA4NSwgNjgsIDY1LCA3NywgMTI4LCA3NSwgNzIsIAorICAgIDg1LCA2NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgODUsIDEyOCwgNzUsIDcyLCA3OSwgMjEyLCA3NSwgNzIsIDc5LCA3OCwgCisgICAgMTI4LCA3NSwgNzIsIDc5LCA3NywgODUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDEyOCwgNzUsIDcyLCAyMDcsIDc1LCA3MiwgCisgICAgNzcsIDIxMywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIDcyLCA3MywgNzgsIDg5LCA2NSwgMTI4LCA3NSwgNzIsIDczLCAKKyAgICA2OSwgODUsIDc1LCAyMDAsIDc1LCA3MiwgNzMsIDEyOCwgNzUsIDcyLCA3MiwgNzksIDEyOCwgNzUsIDcyLCA3MiwgNjUsIAorICAgIDEyOCwgNzUsIDcyLCA2OSwgODQsIDcyLCAxMjgsIDc1LCA3MiwgNjksIDczLCAxMjgsIDc1LCA3MiwgNjksIDY5LCAxMjgsIAorICAgIDc1LCA3MiwgNjksIDEyOCwgNzUsIDcyLCA2NSwgODIsIDc5LCA4MywgNzIsIDg0LCA3MiwgMjAxLCA3NSwgNzIsIDY1LCA4MiwgCisgICAgMTI4LCA3NSwgNzIsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDcyLCA2NSwgNzgsIDE5OSwgNzUsIDcyLCA2NSwgNzgsIDY4LCAKKyAgICAxOTMsIDc1LCA3MiwgNjUsIDc4LCAxMjgsIDc1LCA3MiwgNjUsIDc3LCA4NCwgMjAxLCA3NSwgNzIsIDY1LCA3NSwgNjUsIAorICAgIDgzLCA4MywgNzMsIDY1LCAyMDYsIDc1LCA3MiwgNjUsIDczLCAxMjgsIDc1LCA3MiwgNjUsIDcyLCAxMjgsIDc1LCA3MiwgCisgICAgNjUsIDIwMCwgNzUsIDcyLCA2NSwgNjUsIDEyOCwgNzUsIDcxLCAxMjgsIDc1LCA2OSwgODksIDY3LCA2NSwgODAsIDEyOCwgCisgICAgNzUsIDY5LCA4OSwgNjcsIDY1LCAyMDgsIDc1LCA2OSwgODksIDY2LCA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3NSwgNjksIDg4LCAKKyAgICAxMjgsIDc1LCA2OSwgODUsIDg5LCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIAorICAgIDgwLCAxMjgsIDc1LCA2OSwgODUsIDgzLCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgwLCA4NSwgODEsIDEyOCwgCisgICAgNzUsIDY5LCA4NSwgNzksIDIxMiwgNzUsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY5LCA4NSwgODQsIDc4LCAKKyAgICA2OCwgNjUsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDg0LCA3NywgNjksIAorICAgIDg1LCA3OCwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDgyLCA3MywgMTI4LCA3NSwgNjksIDg0LCA4NCwgMjAxLCA3NSwgCisgICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzUsIDY5LCA4MiwgNjksIDg0LCAxMjgsIDc1LCA2OSwgNzksIDg3LCAxMjgsIDc1LCAKKyAgICA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCAxOTMsIAorICAgIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDE5MywgNzUsIDY5LCA3OCwgNjUsIDg0LCAxMjgsIDc1LCA2OSwgNzgsIDEyOCwgCisgICAgNzUsIDY5LCAyMDYsIDc1LCA2OSwgNzcsIDgwLCA4NSwgNzYsIDEyOCwgNzUsIDY5LCA3NywgODAsIDg1LCAyMDQsIDc1LCAKKyAgICA2OSwgNzcsIDgwLCA3NiwgNzMsIDEyOCwgNzUsIDY5LCA3NywgODAsIDc2LCAyMDEsIDc1LCA2OSwgNzcsIDgwLCA3MiwgODIsIAorICAgIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NywgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NiwgODYsIDczLCAKKyAgICAyMDYsIDc1LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcyLCA2OSwgMjAwLCA3NSwgNjksIDcyLCAxMjgsIDc1LCAKKyAgICA2OSwgNzAsIDg1LCA3NiwgNjUsIDEyOCwgNzUsIDY5LCA2OSwgODMsIDg1LCAxMjgsIDc1LCA2OSwgNjksIDgwLCA3MywgNzgsIAorICAgIDE5OSwgNzUsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2NywgNjUsIDc2LCAxMjgsIDc1LCA2NiwgMTI4LCA3NSwgNjUsIAorICAgIDkwLCA2NSwgNzUsIDIwMCwgNzUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4OSwgNjUsIDIwMCwgCisgICAgNzUsIDY1LCA4OCwgMTI4LCA3NSwgNjUsIDg3LCA3MywgMTI4LCA3NSwgNjUsIDg2LCA4OSwgNzUsIDY1LCAxMjgsIDc1LCAKKyAgICA2NSwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIDc1LCA2NSwgODUsIDEyOCwgNzUsIDY1LCA4NCwgNzksIAorICAgIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDczLCA4MywgODQsIDczLCAxMjgsIDc1LCA2NSwgODQsIDcyLCA2NSwgNzUsIDE5MywgCisgICAgNzUsIDY1LCA4NCwgNjUsIDg2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNjUsIDg0LCA2NSwgODYsIDE5MywgNzUsIDY1LCAKKyAgICA4NCwgNjUsIDc1LCA2NSwgNzgsIDY1LCA0NSwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgNzgsIDE5MywgNzUsIDY1LCA4MywgCisgICAgODIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCAyMDYsIDc1LCA2NSwgODMsIDgyLCAKKyAgICA2NSwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgMTkzLCA3NSwgNjUsIDgzLCA3NSwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODMsIAorICAgIDc1LCA2NSwgMjA0LCA3NSwgNjUsIDgzLCA3MiwgNzcsIDczLCA4MiwgMjAxLCA3NSwgNjUsIDgyLCA4MywgNzIsIDY1LCA3OCwgCisgICAgNjUsIDEyOCwgNzUsIDY1LCA4MiwgNzksIDgyLCA3MywgNzMsIDEyOCwgNzUsIDY1LCA4MiwgMjA3LCA3NSwgNjUsIDgyLCAKKyAgICA2OSwgMjA2LCA3NSwgNjUsIDgyLCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDgyLCA2NSwgNzgsIDEyOCwgNzUsIAorICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKKyAgICA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgCisgICAgNjksIDc5LCA4NSwgNzgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIAorICAgIDg1LCA3OCwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2NSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDgwLCA4MCwgCisgICAgMTkzLCA3NSwgNjUsIDgwLCA3OSwgMTI4LCA3NSwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgNzYsIDEyOCwgCisgICAgNzUsIDY1LCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA3NSwgNjUsIDc4LCA3MSwgMTI4LCAKKyAgICA3NSwgNjUsIDc4LCAxOTksIDc1LCA2NSwgNzgsIDY1LCA3NSwgNzksIDEyOCwgNzUsIDY1LCA3NywgNTIsIDEyOCwgNzUsIAorICAgIDY1LCA3NywgNTAsIDEyOCwgNzUsIDY1LCA3NywgMTI4LCA3NSwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc1LCA2NSwgCisgICAgNjYsIDY1LCA4NCwgMTI4LCA3NSwgNjUsIDc1LCAxMjgsIDc1LCA2NSwgMjAzLCA3NSwgNjUsIDczLCA4NCwgNzIsIDIwMSwgCisgICAgNzUsIDY1LCA3MywgODIsIDczLCAxMjgsIDc1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCAyMDEsIDc1LCA2NSwgNzAsIDY1LCAKKyAgICAxMjgsIDc1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCAxOTgsIDc1LCA2NSwgNjgsIDUzLCAxMjgsIDc1LCA2NSwgNjgsIDE4MSwgCisgICAgNzUsIDY1LCA2OCwgNTIsIDEyOCwgNzUsIDY1LCA2OCwgNTEsIDEyOCwgNzUsIDY1LCA2OCwgMTc5LCA3NSwgNjUsIDY4LCAKKyAgICA1MCwgMTI4LCA3NSwgNjUsIDY4LCAxMjgsIDc1LCA2NSwgNjYsIDE5MywgNzUsIDY1LCA2NiwgMTI4LCA3NSwgNjUsIDY1LCAKKyAgICA3MywgMTI4LCA3NSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCA1MCwgMTI4LCAKKyAgICA3NSwgNjUsIDE3OCwgNzUsIDQ4LCA0OCwgNTYsIDEyOCwgNzUsIDQ4LCA0OCwgNTUsIDEyOCwgNzUsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzUsIDQ4LCA0OCwgNTMsIDEyOCwgNzUsIDQ4LCA0OCwgNTIsIDEyOCwgNzUsIDQ4LCA0OCwgNTEsIDEyOCwgNzUsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzUsIDQ4LCA0OCwgNDksIDEyOCwgNzQsIDg3LCA2NSwgMTI4LCA3NCwgODUsIDg1LCAxMjgsIAorICAgIDc0LCA4NSwgODQsIDEyOCwgNzQsIDg1LCA4MywgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzQsIDg1LCA4MCwgNzMsIDg0LCA2OSwgODIsIDEyOCwgNzQsIDg1LCA3OSwgODQsIDEyOCwgNzQsIDg1LCA3OSwgODAsIAorICAgIDEyOCwgNzQsIDg1LCA3OCwgNzksIDEyOCwgNzQsIDg1LCA3OCwgNjksIDEyOCwgNzQsIDg1LCA3NiwgODksIDEyOCwgNzQsIAorICAgIDg1LCA2OSwgODUsIDczLCAxMjgsIDc0LCA4NSwgNjgsIDg1LCA3NiwgMTI4LCA3NCwgODUsIDY4LCA3MSwgNjksIDEyOCwgCisgICAgNzQsIDg1LCA2OCwgNjksIDc5LCA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCA4MywgMjAwLCA3NCwgNzksIDg5LCA3OSwgODUsIAorICAgIDIxMSwgNzQsIDc5LCA4OSwgMTI4LCA3NCwgNzksIDg2LCA2OSwgMTI4LCA3NCwgNzksIDIxMiwgNzQsIDc5LCA3OCwgNzEsIAorICAgIDEyOCwgNzQsIDc5LCA3OCwgMTkzLCA3NCwgNzksIDc1LCA2OSwgODIsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDY5LCA2OCwgCisgICAgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3NCwgODksIDg4LCAxMjgsIDc0LCA3NCwgCisgICAgODksIDg0LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDEyOCwgNzQsIDc0LCA4NSwgODgsIDEyOCwgCisgICAgNzQsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCA3NCwgODUsIDgyLCAxMjgsIDc0LCAKKyAgICA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODAsIDEyOCwgNzQsIAorICAgIDc0LCA4NSwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDc5LCA4NCwgCisgICAgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCAxMjgsIDc0LCA3NCwgNzMsIDg4LCAxMjgsIDc0LCA3NCwgCisgICAgNzMsIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3NCwgNzQsIDczLCAKKyAgICA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCAxMjgsIDc0LCA3NCwgNzMsIAorICAgIDEyOCwgNzQsIDc0LCA2OSwgNjksIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzQsIDY1LCAxMjgsIDc0LCA3MywgNzYsIAorICAgIDEyOCwgNzQsIDczLCA3MywgMTI4LCA3NCwgNzMsIDcyLCA4NiwgNjUsIDc3LCA4NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgCisgICAgNzQsIDczLCA2NSwgMTI4LCA3NCwgNzIsIDc5LCAxMjgsIDc0LCA3MiwgNjksIDcyLCAxMjgsIDc0LCA3MiwgNjUsIDc4LCAKKyAgICAxMjgsIDc0LCA3MiwgNjUsIDc3LCAxMjgsIDc0LCA3MiwgNjUsIDY1LCAxMjgsIDc0LCA3MiwgNjUsIDEyOCwgNzQsIDY5LCAKKyAgICA4NSwgMTI4LCA3NCwgNjksIDgyLCA4NSwgODMsIDY1LCA3NiwgNjksIDc3LCAxMjgsIDc0LCA2OSwgODIsIDY1LCAyMDYsIAorICAgIDc0LCA2OSwgODIsIDY1LCAxMjgsIDc0LCA2OSwgODIsIDEyOCwgNzQsIDY5LCA3MiwgMTI4LCA3NCwgNjksIDIwMCwgNzQsIAorICAgIDY5LCA3MSwgNzksIDcxLCA2NSwgNzgsIDEyOCwgNzQsIDY5LCA2OSwgNzcsIDEyOCwgNzQsIDY5LCA2NSwgNzgsIDgzLCAKKyAgICAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCisgICAgMTI4LCA3NCwgNjUsIDg1LCAxMjgsIDc0LCA2NSwgODIsIDEyOCwgNzQsIDY1LCA4MCwgNjUsIDc4LCA2OSwgODMsIDE5NywgCisgICAgNzQsIDY1LCA4MCwgNjUsIDc4LCAxMjgsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDc0LCA2NSwgNzYsIDc2LCAKKyAgICA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIDcyLCA3OSwgODUsIDEyOCwgNzQsIDY1LCA3MywgMTI4LCA3NCwgNjUsIAorICAgIDcyLCAxMjgsIDc0LCA2NSwgNjgsIDY5LCAxMjgsIDc0LCA2NSwgNjcsIDc1LCA0NSwgNzksIDQ1LCA3NiwgNjUsIDc4LCA4NCwgCisgICAgNjksIDgyLCA3OCwgMTI4LCA3NCwgNjUsIDY3LCAyMDMsIDc0LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCAKKyAgICA2OSwgMTk2LCAyMDIsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDY1LCAxMjgsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIAorICAgIDE5MywgNzMsIDkwLCA3MiwgNjksIDEyOCwgNzMsIDkwLCA2NSwgNzUsIDY1LCA4OSwgMTkzLCA3MywgODksIDY5LCA3NSwgCisgICAgMTI4LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAxMjgsIDczLCA4NSwgMTI4LCA3MywgCisgICAgODQsIDIxMSwgNzMsIDg0LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA4NCwgNjksIDc3LCAxMjgsIDczLCAKKyAgICA4MywgODMsIDcyLCA2NSwgODIsIDEyOCwgNzMsIDgzLCA3OSwgNzgsIDEyOCwgNzMsIDgzLCA3OSwgMjA2LCA3MywgODMsIAorICAgIDc5LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgODMsIDY5LCA3OCwgNDUsIDczLCA4MywgNjksIDc4LCAxMjgsIDczLCA4MywgCisgICAgNjUsIDc1LCA3MywgMTkzLCA3MywgODMsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODksIDY1LCAKKyAgICA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA3OSwgNzgsIAorICAgIDQ1LCA2NywgNzksIDgwLCA4MCwgNjksIDIxMCwgNzMsIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc5LCA4NCwgNzMsIDcwLCA3MywgCisgICAgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgMTI4LCA3MywgNzksIDg0LCAKKyAgICAxOTMsIDczLCA3OSwgODIsIDEyOCwgNzMsIDc5LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNzMsIDc4LCA4NiwgNzMsIAorICAgIDgzLCA3MywgNjYsIDc2LCAxOTcsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCA2OCwgMTI4LCA3MywgNzgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA2OSwgMTk2LCA3MywgNzgsIDg2LCA2OSwgODIsIDgzLCAxOTcsIDczLCA3OCwgODQsIDgyLCA3OSwgNjgsIDg1LCAKKyAgICA2NywgNjksIDgyLCAxMjgsIDczLCA3OCwgODQsIDczLCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDg5LCA3NiwgNzYsIAorICAgIDY1LCA2NiwgNzMsIDE5NSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgCisgICAgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIAorICAgIDY3LCA4NCwgNzMsIDc4LCAxOTksIDczLCA3OCwgODQsIDY5LCA4MiwgODIsIDc5LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3MywgCisgICAgNzgsIDg0LCA2OSwgODIsIDgwLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIAorICAgIDc5LCA2NywgNzUsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDczLCA3OCwgCisgICAgODQsIDY5LCA4MiwgNzYsIDY1LCA2NywgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3MywgNzksIDIxMCwgNzMsIDc4LCAKKyAgICA4NCwgNjksIDgyLCA2OSwgODMsIDIxMiwgNzMsIDc4LCA4NCwgNjksIDgyLCA2NywgNjUsIDc2LCA2NSwgODQsIDY5LCAxMjgsIAorICAgIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCAKKyAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgNzYsIDEyOCwgNzMsIDc4LCA4NCwgNjksIAorICAgIDcxLCA4MiwgNjUsIDIwNCwgNzMsIDc4LCA4MywgODUsIDc2LCA2NSwgMjEwLCA3MywgNzgsIDgzLCA4NCwgODIsIDg1LCA3NywgCisgICAgNjksIDc4LCA4NCwgNjUsIDIwNCwgNzMsIDc4LCA4MywgNzMsIDY4LCA2OSwgMTI4LCA3MywgNzgsIDgzLCA2OSwgODIsIDg0LCAKKyAgICA3MywgNzksIDIwNiwgNzMsIDc4LCA4MywgNjksIDY3LCA4NCwgMTI4LCA3MywgNzgsIDgzLCA2NywgODIsIDczLCA4MCwgODQsIAorICAgIDczLCA3OSwgNzgsIDY1LCAyMDQsIDczLCA3OCwgODAsIDg1LCAyMTIsIDczLCA3OCwgNzgsIDc5LCA2NywgNjksIDc4LCA2NywgCisgICAgNjksIDEyOCwgNzMsIDc4LCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDgyLCAxMjgsIDczLCA3OCwgNzgsIDY5LCAKKyAgICAyMTAsIDczLCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3MywgNzgsIDcxLCA4NSwgMTI4LCA3MywgNzgsIDczLCAxMjgsIDczLCAKKyAgICA3OCwgNzIsIDczLCA2NiwgNzMsIDIxMiwgNzMsIDc4LCA3MiwgNjksIDgyLCA2OSwgNzgsIDIxMiwgNzMsIDc4LCA3MSwgODcsIAorICAgIDY1LCA5MCwgMTI4LCA3MywgNzgsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDcwLCA3NiwgCisgICAgODUsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzAsIDczLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA3MywgNzgsIDcwLCAKKyAgICA3MywgNzgsIDczLCA4NCwgMjE3LCA3MywgNzgsIDY4LCA4NSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3OCwgNjgsIAorICAgIDczLCA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzMsIDc4LCA2OCwgCisgICAgNzMsIDY3LCA2NSwgODQsIDc5LCAyMTAsIDczLCA3OCwgNjgsIDczLCAxOTUsIDczLCA3OCwgNjgsIDczLCA2NSwgMjA2LCAKKyAgICA3MywgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIDY4LCA2OSwgNzgsIDIxMiwgNzMsIAorICAgIDc4LCA2NywgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDIxMSwgCisgICAgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDczLCA3OCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIAorICAgIDE5NywgNzMsIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA2NywgNzYsIDg1LCA2OCwgNzMsIDc4LCAKKyAgICAxOTksIDczLCA3OCwgNjcsIDcyLCAxMjgsIDczLCA3OCwgNjYsIDc5LCAyMTYsIDczLCA3OCwgNjUsIDgwLCAxMjgsIDczLCAKKyAgICA3OCwgNDUsIDY1LCA3NiwgNjUsIDcwLCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3NywgODAsIAorICAgIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAKKyAgICAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc3LCA3OCwgMTI4LCA3MywgNzcsIAorICAgIDczLCA4MywgNjksIDc5LCAyMTEsIDczLCA3NywgNzMsIDc4LCA1MSwgMTI4LCA3MywgNzcsIDczLCA3OCwgMTI4LCA3MywgCisgICAgNzcsIDczLCAyMDYsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDcwLCAKKyAgICA4NCwgNzIsIDc5LCA4MiwgNjUsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIAorICAgIDY4LCA3MywgNjUsIDgyLCA3MSwgNzksIDc4LCAxMjgsIDczLCA3NywgNjUsIDcxLCAxOTcsIDczLCA3NiwgODUsIDg5LCA2NSwgCisgICAgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIDg1LCA4OSwgMTI4LCA3MywgNzYsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDczLCA3NiwgODUsIDg0LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDczLCA3NiwgNzMsIAorICAgIDc3LCA3NywgODUsIDUxLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAKKyAgICAyMTMsIDczLCA3NiwgNTAsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDczLCA3NSwgNjUsIDgyLCAxOTMsIDczLCAKKyAgICA3NCwgMTI4LCA3MywgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzEsIDczLCAxMjgsIDczLCA3MSwgMjAxLCAKKyAgICA3MywgNzEsIDcxLCA4NywgODMsIDEyOCwgNzMsIDcwLCA3MywgNzgsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKKyAgICA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDczLCA2OSwgODUsIDc4LCAKKyAgICA3MSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgCisgICAgODUsIDgwLCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCAKKyAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgCisgICAgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIAorICAgIDY3LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgMTk5LCA3MywgNjgsIDc2LCA2OSwgMTI4LCA3MywgNjgsIDczLCA3NywgCisgICAgMTI4LCA3MywgNjgsIDczLCAyMDUsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTcsIDQ4LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU2LCA2OCwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjcsIDY1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2OCwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTUsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU1LCA1NCwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA0OSwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDgsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDcwLCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA2OSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDUwLCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTQsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDUzLCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1MywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA1MywgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDUwLCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1MCwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNzAsIDU2LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY4LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTYsIDcwLCAKKyAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUzLCA2NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDUxLCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1MSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDY4LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDQ5LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUyLCA2OSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDU2LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1MCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCisgICAgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNjUsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTcsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCisgICAgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTIsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDgsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTMsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjcsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTEsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjUsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDksIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTYsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNzAsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKKyAgICA3MCwgNTYsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCisgICAgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTQsIAorICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3MywgNjcsIDcyLCA3OSwgODUsIAorICAgIDEyOCwgNzMsIDY3LCA3MiwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDczLCA3NywgNjUsIDg0LCA3OSwgODMsIDEyOCwgCisgICAgNzMsIDY3LCA3MiwgNjUsIDY4LCA3MywgNzgsIDEyOCwgNzMsIDY3LCA2OSwgNzYsIDY1LCA3OCwgNjgsIDczLCA2NywgNDUsIAorICAgIDg5LCA4MiwgMTI4LCA3MywgNjYsIDczLCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3MywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgCisgICAgNzMsIDQ4LCA0OSwgNTMsIDEyOCwgNzMsIDQ4LCA0OSwgNTIsIDEyOCwgNzMsIDQ4LCA0OSwgNTEsIDEyOCwgNzMsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ5LCAxMjgsIDczLCA0OCwgNDksIAorICAgIDQ4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OCwgMTI4LCA3MywgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgNzMsIDQ4LCA0OCwgNTYsIDEyOCwgNzMsIDQ4LCA0OCwgNTUsIDEyOCwgNzMsIDQ4LCA0OCwgNTQsIDEyOCwgCisgICAgNzMsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAxMjgsIDczLCA0OCwgNDgsIDUyLCAxMjgsIDczLCAKKyAgICA0OCwgNDgsIDUxLCAxMjgsIDczLCA0OCwgNDgsIDUwLCAxMjgsIDczLCA0OCwgNDgsIDQ5LCAxMjgsIDczLCA0NSwgODksIAorICAgIDg1LCAxMjgsIDczLCA0NSwgODksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgCisgICAgMTI4LCA3MywgNDUsIDg5LCA2NSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDg5LCAKKyAgICA2NSwgMTI4LCA3MywgNDUsIDc5LCA0NSwgNzMsIDEyOCwgNzMsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDY5LCA4NSwgMTI4LCAKKyAgICA3MywgNDUsIDY2LCA2OSwgNjUsIDc3LCAxMjgsIDczLCA0NSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDczLCA0NSwgNjUsIAorICAgIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDcxLCAxMjgsIDcyLCA5MCwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgOTAsIDgwLCAxMjgsIAorICAgIDcyLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA4NywgNzEsIDEyOCwgNzIsIDkwLCA4NywgMTI4LCA3MiwgOTAsIDg0LCAxMjgsIAorICAgIDcyLCA5MCwgNzEsIDEyOCwgNzIsIDg5LCA4MywgODQsIDY5LCA4MiwgNjksIDgzLCA3MywgMjExLCA3MiwgODksIDgwLCA3OSwgCisgICAgNjgsIDczLCA2NSwgODMsIDg0LCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDQ1LCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzIsIDg5LCA4MCwgCisgICAgNzIsIDY5LCA3OCwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDIwNiwgNzIsIDg4LCA4NywgNzEsIDEyOCwgNzIsIDg4LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODAsIDEyOCwgNzIsIAorICAgIDg4LCA4NSwgNzksIDEyOCwgNzIsIDg4LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA3OSwgCisgICAgODAsIDEyOCwgNzIsIDg4LCA3OSwgMTI4LCA3MiwgODgsIDczLCA4OCwgMTI4LCA3MiwgODgsIDczLCA4NCwgMTI4LCA3MiwgCisgICAgODgsIDczLCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg0LCAxMjgsIDcyLCAKKyAgICA4OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgMTI4LCA3MiwgODgsIDczLCAxMjgsIDcyLCA4OCwgNjksIAorICAgIDg4LCAxMjgsIDcyLCA4OCwgNjksIDgwLCAxMjgsIDcyLCA4OCwgNjksIDEyOCwgNzIsIDg4LCA2NSwgODgsIDEyOCwgNzIsIAorICAgIDg4LCA2NSwgODQsIDEyOCwgNzIsIDg4LCA2NSwgODAsIDEyOCwgNzIsIDg4LCA2NSwgMTI4LCA3MiwgODcsIDg1LCAxMjgsIAorICAgIDcyLCA4NywgNjUsIDczLCA4MiwgMTI4LCA3MiwgODYsIDEyOCwgNzIsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcyLCA4NSwgCisgICAgODIsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCA2OCwgMTI4LCAKKyAgICA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCAxOTYsIDcyLCA4NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgNjUsIDc4LCAxMjgsIAorICAgIDcyLCA4NSwgNzcsIDY1LCAyMDYsIDcyLCA4NSwgNzYsIDUwLCAxMjgsIDcyLCA4NSwgNzMsIDczLCA4NCwgNzksIDEyOCwgCisgICAgNzIsIDg1LCA2NiwgNTAsIDEyOCwgNzIsIDg1LCA2NiwgMTc4LCA3MiwgODUsIDY2LCAxMjgsIDcyLCA4NSwgNjUsIDgyLCAKKyAgICA2NSwgNjgsIDY4LCA3OSwgMTI4LCA3MiwgODQsIDgzLCAxMjgsIDcyLCA4NCwgNzQsIDEyOCwgNzIsIDgyLCA4OSwgODYsIAorICAgIDc4LCA3MywgMTkzLCA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgODAsIDY1LCAxMjgsIDcyLCA4MCwgMTI4LCA3MiwgNzksIAorICAgIDg1LCA4MywgMTk3LCA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIDgzLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgCisgICAgNzYsIDY1LCA4MywgMjExLCA3MiwgNzksIDg1LCA4MiwgMTI4LCA3MiwgNzksIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY5LCAKKyAgICA3NiwgMTI4LCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgzLCA4MCwgNzMsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgODMsIDY5LCAxMjgsIDcyLCA3OSwgODIsIDgzLCAxOTcsIDcyLCA3OSwgODIsIDc4LCA4MywgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTQsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTQsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAorICAgIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCAKKyAgICA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgCisgICAgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTEsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTEsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIAorICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCAKKyAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCisgICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNDksIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNDksIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIAorICAgIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCAKKyAgICA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgCisgICAgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgMTkzLCA3MiwgNzksIDc5LCA4MiwgODUsIDEyOCwgNzIsIDc5LCA3OSwgODAsIDEyOCwgNzIsIDc5LCA3OSwgNzgsIDEyOCwgCisgICAgNzIsIDc5LCA3OSwgNzUsIDY5LCAxOTYsIDcyLCA3OSwgNzgsIDY5LCA4OSwgNjYsIDY5LCA2OSwgMTI4LCA3MiwgNzksIDc4LCAKKyAgICA2OSwgMjE3LCA3MiwgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIDczLCA2NywgMTI4LCA3MiwgNzksIDc3LCA3OSwgODQsIAorICAgIDcyLCA2OSwgODQsIDczLCAxOTUsIDcyLCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA3OSwgNzYsIDY4LCA3MywgNzgsIDE5OSwgCisgICAgNzIsIDc5LCA3NiwgNjUsIDc3LCAxMjgsIDcyLCA3OSwgNzYsIDY1LCAyMDUsIDcyLCA3OSwgNzUsIDY1LCAxMjgsIDcyLCAKKyAgICA3OSwgNzMsIDEyOCwgNzIsIDc5LCA2NywgNzIsIDc5LCAxMjgsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDcyLCA3OCwgODUsIAorICAgIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDg1LCA3OSwgMTI4LCA3MiwgNzgsIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDc5LCA4NCwgCisgICAgMTI4LCA3MiwgNzgsIDc5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA4OCwgMTI4LCA3MiwgNzgsIDczLCA4NCwgMTI4LCA3MiwgCisgICAgNzgsIDczLCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg0LCAxMjgsIDcyLCAKKyAgICA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgMTI4LCA3MiwgNzgsIDczLCAxMjgsIDcyLCA3OCwgNjksIAorICAgIDg4LCAxMjgsIDcyLCA3OCwgNjksIDgwLCAxMjgsIDcyLCA3OCwgNjksIDEyOCwgNzIsIDc4LCA2NSwgODgsIDEyOCwgNzIsIAorICAgIDc4LCA2NSwgODQsIDEyOCwgNzIsIDc4LCA2NSwgODAsIDEyOCwgNzIsIDc4LCA2NSwgMTI4LCA3MiwgNzcsIDg5LCA4OCwgCisgICAgMTI4LCA3MiwgNzcsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4OSwgODIsIDEyOCwgNzIsIDc3LCA4OSwgODAsIDEyOCwgCisgICAgNzIsIDc3LCA4OSwgMTI4LCA3MiwgNzcsIDg1LCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4NCwgMTI4LCA3MiwgNzcsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODIsIDEyOCwgNzIsIDc3LCA4NSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDcyLCA3NywgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgMTI4LCA3MiwgNzcsIDg1LCAxMjgsIAorICAgIDcyLCA3NywgNzksIDg4LCAxMjgsIDcyLCA3NywgNzksIDg0LCAxMjgsIDcyLCA3NywgNzksIDgwLCAxMjgsIDcyLCA3NywgCisgICAgNzksIDEyOCwgNzIsIDc3LCA3MywgODgsIDEyOCwgNzIsIDc3LCA3MywgODQsIDEyOCwgNzIsIDc3LCA3MywgODAsIDEyOCwgCisgICAgNzIsIDc3LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgMTI4LCAKKyAgICA3MiwgNzcsIDczLCAxMjgsIDcyLCA3NywgNjksIDEyOCwgNzIsIDc3LCA2NSwgODgsIDEyOCwgNzIsIDc3LCA2NSwgODQsIAorICAgIDEyOCwgNzIsIDc3LCA2NSwgODAsIDEyOCwgNzIsIDc3LCA2NSwgMTI4LCA3MiwgNzYsIDg5LCA4OCwgMTI4LCA3MiwgNzYsIAorICAgIDg5LCA4NCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDEyOCwgNzIsIDc2LCA4OSwgCisgICAgODAsIDEyOCwgNzIsIDc2LCA4OSwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4NCwgMTI4LCA3MiwgCisgICAgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODIsIDEyOCwgNzIsIDc2LCA4NSwgODAsIDEyOCwgNzIsIDc2LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgMTI4LCA3MiwgNzYsIAorICAgIDg1LCAxMjgsIDcyLCA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgNzksIDgwLCAxMjgsIDcyLCA3NiwgNzksIDEyOCwgNzIsIAorICAgIDc2LCA3MywgODgsIDEyOCwgNzIsIDc2LCA3MywgODQsIDEyOCwgNzIsIDc2LCA3MywgODAsIDEyOCwgNzIsIDc2LCA3MywgCisgICAgNjksIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgMTI4LCA3MiwgNzYsIDczLCAKKyAgICAxMjgsIDcyLCA3NiwgNjksIDg4LCAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIDcyLCA3NiwgNjksIDEyOCwgNzIsIDc2LCAKKyAgICA2NSwgODgsIDEyOCwgNzIsIDc2LCA2NSwgODQsIDEyOCwgNzIsIDc2LCA2NSwgODAsIDEyOCwgNzIsIDc2LCA2NSwgMTI4LCAKKyAgICA3MiwgNzUsIDEyOCwgNzIsIDczLCA5MCwgNjYsIDEyOCwgNzIsIDczLCA4MywgODQsIDc5LCA4MiwgNzMsIDE5NSwgNzIsIAorICAgIDczLCA4MiwgNzMsIDgxLCAxMjgsIDcyLCA3MywgNzEsIDcyLCA0NSwgODMsIDgwLCA2OSwgNjksIDE5NiwgNzIsIDczLCA3MSwgCisgICAgNzIsIDQ1LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgNjgsIDQ1LCAxODUsIDcyLCA3MywgNzEsIDcyLCA0NSwgNzIsIAorICAgIDY5LCA2OSwgNzYsIDY5LCAxOTYsIDcyLCA3MywgNjksIDg4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgzLCA3MywgCisgICAgNzksIDgzLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzgsIDczLCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgMjAwLCA3MiwgNzMsIDY5LCA4MiwgNzksIDcxLCA3NiwgODksIDgwLCA3MiwgNzMsIDE5NSwgNzIsIDczLCA2OSwgCisgICAgMTI4LCA3MiwgNzMsIDY4LCA3MywgNzgsIDE5OSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDcyLCA3MywgNjgsIDY5LCAKKyAgICAxMjgsIDcyLCA3MywgNjYsIDczLCA4MywgNjcsIDg1LCA4MywgMTI4LCA3MiwgNzIsIDg3LCA2NSwgMTI4LCA3MiwgNzIsIAorICAgIDg1LCAxMjgsIDcyLCA3MiwgNzMsIDEyOCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNzIsIDcyLCA2OSwgMTI4LCA3MiwgNzIsIAorICAgIDY1LCA2NSwgMTI4LCA3MiwgNzEsIDEyOCwgNzIsIDY5LCA4OCwgNzMsIDcwLCA3OSwgODIsIDIwNSwgNzIsIDY5LCA4OCwgCisgICAgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNzIsIDY5LCA4OCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDg0LCAKKyAgICA4NSwgMTI4LCA3MiwgNjksIDgyLCA4NSwgMTI4LCA3MiwgNjksIDgyLCA3NywgNzMsIDg0LCA3MywgNjUsIDIwNiwgNzIsIAorICAgIDY5LCA4MiwgNzcsIDczLCA3OSwgNzgsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNjksIDgzLCAxMjgsIDcyLCA2OSwgCisgICAgODIsIDY5LCAxMjgsIDcyLCA2OSwgODIsIDY2LCAxMjgsIDcyLCA2OSwgODIsIDY1LCA2OSwgODUsIDIwNSwgNzIsIDY5LCAKKyAgICA3OCwgNzEsIDEyOCwgNzIsIDY5LCA3OCwgMTk5LCA3MiwgNjksIDc3LCA4MCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIAorICAgIDg0LCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgMjEyLCA3MiwgNjksIDc2LCAyMDUsIDcyLCA2OSwgNzYsIDczLCA2NywgCisgICAgNzksIDgwLCA4NCwgNjksIDgyLCAxMjgsIDcyLCA2OSwgNzUsIDg1LCA4NCwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY5LCAKKyAgICA3MywgODMsIDY5LCA3MywgMTI4LCA3MiwgNjksIDY1LCA4NiwgODksIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgNzYsIAorICAgIDIxNywgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIDY5LCA2NSwgCisgICAgODIsIDg0LCA4MywgMTI4LCA3MiwgNjksIDY1LCA4MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzIsIDY5LCAKKyAgICA2NSwgODIsIDg0LCAxMjgsIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDcyLCA2OSwgNjUsIDgyLCA0NSwgNzgsIDc5LCA0NSwgNjksIAorICAgIDg2LCA3MywgMjA0LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgCisgICAgODMsIDg0LCA3OSwgNzgsIDE5NywgNzIsIDY5LCA2NSwgNjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3MiwgNjksIDY1LCAKKyAgICA2OCwgNzMsIDc4LCA3MSwgMTI4LCA3MiwgNjYsIDY1LCA4MywgNjUsIDQ1LCA2OSwgODMsIDY1LCA4MywgMTkzLCA3MiwgNjYsIAorICAgIDY1LCA4MywgMTkzLCA3MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MiwgNjUsIDg2LCA2OSwgMTI4LCA3MiwgCisgICAgNjUsIDg1LCA4MCwgODQsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzIsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDcyLCAKKyAgICA2NSwgODQsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDY3LCA3MiwgNzMsIDc4LCAxOTksIDcyLCA2NSwgODQsIDY1LCAxOTgsIAorICAgIDcyLCA2NSwgODMsIDY5LCAyMTAsIDcyLCA2NSwgODMsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgCisgICAgNzksIDc4LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDIwNiwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCAKKyAgICAxMjgsIDcyLCA2NSwgODIsIDc1LCA3NiwgNjksIDY1LCAyMDYsIDcyLCA2NSwgODIsIDY4LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MiwgNjUsIDgyLCAxOTYsIDcyLCA2NSwgODAsIDgwLCAyMTcsIDcyLCA2NSwgNzgsIDg1LCA3OCwgNzksIDIwNywgCisgICAgNzIsIDY1LCA3OCwgNzEsIDkwLCA3MiwgNzksIDIxMywgNzIsIDY1LCA3OCwgNjgsIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAKKyAgICAyMTEsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDEyOCwgNzIsIAorICAgIDY1LCA3OCwgNjgsIDY2LCA2NSwgNzEsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDEyOCwgNzIsIDY1LCA3OCwgNDUsIDY1LCA3NSwgCisgICAgNjUsIDg0LCAxMjgsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNjUsIDc3LCA4MywgODQsIDY5LCAyMTAsIDcyLCAKKyAgICA2NSwgNzcsIDc3LCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NywgNzcsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIDY2LCA4NSwgODIsIAorICAgIDcxLCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NiwgODEsIDY1LCAxMjgsIDcyLCA2NSwgNzYsIDc5LCAxMjgsIDcyLCA2NSwgCisgICAgNzYsIDcwLCA0NSwgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIDcyLCA2NSwgNzYsIDcwLCAxMjgsIDcyLCA2NSwgNzYsIDY2LCAKKyAgICA2OSwgODIsIDY4LCAxMjgsIDcyLCA2NSwgNzYsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgNzMsIDg0LCA4NSwgCisgICAgMTI4LCA3MiwgNjUsIDczLCA4MiwgNjcsIDg1LCA4NCwgMTI4LCA3MiwgNjUsIDczLCA4MiwgMTI4LCA3MiwgNjUsIDcxLCAKKyAgICA3NiwgNjUsIDIxOCwgNzIsIDY1LCA3MSwgNzYsIDEyOCwgNzIsIDY1LCA3MCwgODUsIDc1LCA3MiwgNjUsIDEyOCwgNzIsIAorICAgIDY1LCA3MCwgODUsIDc1LCA3MiwgMTI4LCA3MiwgNjUsIDY5LCA3MSwgMjA0LCA3MiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgCisgICAgNzIsIDY1LCA2NSwgNzcsIDEyOCwgNzIsIDY1LCAxOTMsIDcyLCA2NSwgNDUsIDcyLCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCAKKyAgICA1NiwgMTI4LCA3MiwgNDgsIDQ4LCA1NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzIsIDQ4LCA0OCwgNTMsIDEyOCwgNzIsIDQ4LCA0OCwgNTIsIDEyOCwgNzIsIDQ4LCA0OCwgNTEsIDEyOCwgNzIsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzIsIDQ4LCA0OCwgNDksIDEyOCwgNzIsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDcxLCA4OSwgCisgICAgODUsIDEyOCwgNzEsIDg5LCA3OSwgNzgsIDEyOCwgNzEsIDg5LCA3OSwgMTI4LCA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgCisgICAgNzAsIDIxMywgNzEsIDg5LCA2OSwgNjksIDEyOCwgNzEsIDg5LCA2NSwgODMsIDEyOCwgNzEsIDg5LCA2NSwgNjUsIDEyOCwgCisgICAgNzEsIDg5LCA2NSwgMTI4LCA3MSwgODksIDEyOCwgNzEsIDg3LCA4NSwgMTI4LCA3MSwgODcsIDczLCAxMjgsIDcxLCA4NywgCisgICAgNjksIDY5LCAxMjgsIDcxLCA4NywgNjksIDEyOCwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgCisgICAgODYsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA3MSwgODUsIDgyLCA4NSwgNzgsIDEyOCwgNzEsIDg1LCAKKyAgICA4MiwgNjUsIDc3LCA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA1NSwgMTI4LCA3MSwgODUsIDc4LCA4NSwgCisgICAgMTI4LCA3MSwgODUsIDc4LCAyMTMsIDcxLCA4NSwgMjA1LCA3MSwgODUsIDc2LCAxMjgsIDcxLCA4NSwgNzMsIDg0LCA2NSwgCisgICAgODIsIDEyOCwgNzEsIDg1LCAxOTksIDcxLCA4NSwgNjksIDcyLCAxMjgsIDcxLCA4NSwgNjksIDIwMCwgNzEsIDg1LCA2OCwgCisgICAgMTI4LCA3MSwgODUsIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA4MywgNzcsIDY1LCA3OCwgMTI4LCA3MSwgODUsIDY1LCAKKyAgICA4MiwgNjgsIDY5LCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgMTk2LCA3MSwgODUsIAorICAgIDY1LCA4MiwgNjgsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY1LCA3OCwgMjAxLCA3MSwgODUsIDE5MywgNzEsIDg1LCAxNzgsIAorICAgIDcxLCA4NCwgNjksIDIxMCwgNzEsIDgzLCA4NSwgNzcsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODIsIDIxMywgNzEsIAorICAgIDgyLCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MSwgODIsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDcxLCA4MiwgNzksIDc4LCA4NCwgCisgICAgNzIsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzEsIDgyLCA3MywgNzgsIDc4LCA3MywgNzgsIDE5OSwgNzEsIDgyLCAKKyAgICA3MywgNzcsIDY1LCA2NywgNzMsIDc4LCAxOTksIDcxLCA4MiwgNjksIDcxLCA3OSwgODIsIDczLCA2NSwgMjA2LCA3MSwgODIsIAorICAgIDY5LCA2OSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgCisgICAgNjksIDgyLCA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIAorICAgIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDIxMCwgNzEsIDgyLCA2OSwgNjUsIDIxMiwgNzEsIDgyLCA2NSwgCisgICAgODYsIDY5LCA4OSwgNjUsIDgyLCAxOTYsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIAorICAgIDEyOCwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAKKyAgICAxMjgsIDcxLCA4MiwgNjUsIDg2LCAxOTcsIDcxLCA4MiwgNjUsIDg0LCA2OSwgODIsIDEyOCwgNzEsIDgyLCA2NSwgODMsIAorICAgIDgzLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCAyMTEsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNjksIDc3LCAxOTcsIDcxLCA4MiwgCisgICAgNjUsIDgwLCA2OSwgODMsIDEyOCwgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDcxLCA4MiwgNjUsIDczLCA3OCwgMTI4LCAKKyAgICA3MSwgODIsIDY1LCA2OCwgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA4MiwgNjUsIDY3LCA2OSwgMTI4LCA3MSwgODIsIAorICAgIDY1LCA2NywgMTk3LCA3MSwgODAsIDY1LCAxMjgsIDcxLCA3OSwgODIsIDg0LCA3MiwgNzcsIDczLCA3NSwgNzksIDIwNiwgCisgICAgNzEsIDc5LCA4MiwgODQsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4NCwgNjksIDgyLCA3MywgMTI4LCA3MSwgNzksIDgyLCAKKyAgICA3MSwgNzksIDgzLCA4OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIAorICAgIDcxLCA3OSwgODIsIDcxLCA3MywgMTI4LCA3MSwgNzksIDgyLCA2NSwgMTI4LCA3MSwgNzksIDc5LCAxOTYsIDcxLCA3OSwgCisgICAgNzgsIDcxLCAxMjgsIDcxLCA3OSwgNzYsIDY4LCAxMjgsIDcxLCA3OSwgNzUsIDEyOCwgNzEsIDc5LCA3MywgNzgsIDE5OSwgCisgICAgNzEsIDc5LCA2NiwgNzYsIDczLCA3OCwgMTI4LCA3MSwgNzksIDY1LCA3NiwgMTI4LCA3MSwgNzksIDY1LCAyMDQsIDcxLCAKKyAgICA3OSwgNjUsIDEyOCwgNzEsIDc4LCA4OSwgNzMsIDgzLCAxMjgsIDcxLCA3OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAorICAgIDEyOCwgNzEsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MSwgNzYsIDc5LCA4NCwgODQsIDY1LCAyMDQsIDcxLCA3NiwgCisgICAgNzksIDY2LCAxOTcsIDcxLCA3NiwgNzMsIDgzLCA4MywgNjUsIDc4LCA2OCwgMjA3LCA3MSwgNzYsIDY5LCA3MywgNjcsIAorICAgIDIwMCwgNzEsIDc2LCA2NSwgNzEsIDc5LCA3NiwgNzMsIDEyOCwgNzEsIDc2LCA2NSwgMTI4LCA3MSwgNzQsIDY5LCAxMjgsIAorICAgIDcxLCA3MywgODgsIDEyOCwgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzMsIDgzLCA3MiwgMTI4LCA3MSwgNzMsIDgzLCAyMDAsIAorICAgIDcxLCA3MywgODMsIDY1LCA3NiwgMTI4LCA3MSwgNzMsIDgyLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3MSwgNzMsIDgyLCA3NiwgCisgICAgMTI4LCA3MSwgNzMsIDgyLCA1MSwgMTI4LCA3MSwgNzMsIDgyLCAxNzksIDcxLCA3MywgODIsIDUwLCAxMjgsIDcxLCA3MywgCisgICAgODIsIDE3OCwgNzEsIDczLCA4MCwgMTI4LCA3MSwgNzMsIDc4LCA3MywgNzMsIDEyOCwgNzEsIDczLCA3NywgNjksIDc2LCAKKyAgICAxMjgsIDcxLCA3MywgNzcsIDY5LCAyMDQsIDcxLCA3MywgNzcsIDEyOCwgNzEsIDczLCA3MSwgNjUsIDEyOCwgNzEsIDczLCAKKyAgICA2OSwgODQsIDEyOCwgNzEsIDczLCA2OCwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNjYsIDY2LCA3OSwgODUsIDIxMSwgNzEsIAorICAgIDczLCA2NiwgNjUsIDEyOCwgNzEsIDczLCA1MiwgMTI4LCA3MSwgNzMsIDE4MCwgNzEsIDcyLCA5MCwgMTI4LCA3MSwgNzIsIAorICAgIDg3LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgMTkzLCA3MSwgCisgICAgNzIsIDg1LCAxMjgsIDcxLCA3MiwgNzksIDg1LCAxMjgsIDcxLCA3MiwgNzksIDgzLCA4NCwgMTI4LCA3MSwgNzIsIDc5LCAKKyAgICAxMjgsIDcxLCA3MiwgNzMsIDEyOCwgNzEsIDcyLCA3MiwgNjUsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDg4LCAxMjgsIDcxLCAKKyAgICA3MiwgNjksIDg1LCA3OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzEsIAorICAgIDcyLCA2OSwgODUsIDcxLCA3MiwgNjksIDc4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDgyLCA2NSwgNjksIDEyOCwgCisgICAgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NCwgMTI4LCAKKyAgICA3MSwgNzIsIDY5LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCAxMjgsIDcxLCA3MiwgMTk3LCA3MSwgNzIsIDY1LCA4OSwgNzgsIAorICAgIDEyOCwgNzEsIDcyLCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA4MCwgMTI4LCA3MSwgNzIsIDY1LCA3OCwgCisgICAgMTI4LCA3MSwgNzIsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgODUsIDEyOCwgNzEsIDcyLCAKKyAgICA2NSwgNzMsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIDczLCAyMDYsIDcxLCA3MiwgNjUsIDY4LCAxMjgsIDcxLCA3MiwgNjUsIAorICAgIDY1LCA3NywgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDczLCAxMjgsIDcxLCA3MSwgCisgICAgODcsIDY5LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDcxLCAKKyAgICA4NywgNjUsIDEyOCwgNzEsIDcxLCA4NSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgODQsIDEyOCwgNzEsIDcxLCA4NSwgODIsIAorICAgIDg4LCAxMjgsIDcxLCA3MSwgODUsIDgyLCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgCisgICAgODQsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgODUsIDc5LCAxMjgsIDcxLCA3MSwgNzksIDg4LCAKKyAgICAxMjgsIDcxLCA3MSwgNzksIDg0LCAxMjgsIDcxLCA3MSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgNzMsIDg4LCAxMjgsIDcxLCAKKyAgICA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzEsIAorICAgIDcxLCA3MywgNjksIDEyOCwgNzEsIDcxLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA2OSwgODQsIDEyOCwgNzEsIDcxLCA2OSwgCisgICAgODAsIDEyOCwgNzEsIDcxLCA2NSwgODgsIDEyOCwgNzEsIDcxLCA2NSwgODQsIDEyOCwgNzEsIDcxLCA2NSwgNjUsIDEyOCwgCisgICAgNzEsIDY5LCA4NCwgMTkzLCA3MSwgNjksIDgzLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODUsIAorICAgIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgNzgsIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgMjA2LCA3MSwgCisgICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzEsIDY5LCA4MiwgODMsIDcyLCA2NSwgODksIDczLCA3NywgMTI4LCA3MSwgNjksIDgyLCAKKyAgICA3NywgNjUsIDIwNiwgNzEsIDY5LCA4MiwgNjksIDgzLCA3MiwgMTI4LCA3MSwgNjksIDgyLCA2OSwgODMsIDIwMCwgNzEsIAorICAgIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCAKKyAgICA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3OCwgODQsIDc2LCAxOTcsIDcxLCA2OSwgNzgsIDczLCA4NCwgNzMsIDg2LCA2OSwgCisgICAgMTI4LCA3MSwgNjksIDc4LCA3MywgNzUsIDIwMSwgNzEsIDY5LCA3OCwgNjksIDgyLCA3MywgMTk1LCA3MSwgNjksIDc3LCAKKyAgICA3MywgNzgsIDczLCAxMjgsIDcxLCA2OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDY5LCAyMDUsIAorICAgIDcxLCA2OSwgNjgsIDc5LCA3NiwgNjUsIDEyOCwgNzEsIDY5LCA2OCwgNjksIDEyOCwgNzEsIDY5LCA2NiwgMjA3LCA3MSwgCisgICAgNjksIDY2LCAxOTMsIDcxLCA2OSwgNjUsIDgyLCAxMjgsIDcxLCA2OSwgNjUsIDIxMCwgNzEsIDY4LCA2NSwgNzgsIDEyOCwgCisgICAgNzEsIDY3LCA3MywgNzEsIDEyOCwgNzEsIDY3LCA2NSwgMjA2LCA3MSwgNjYsIDc5LCA3OCwgMTI4LCA3MSwgNjYsIDczLCAKKyAgICA2OSwgMTk3LCA3MSwgNjYsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDY2LCA2OSwgODQsIDEyOCwgNzEsIDY2LCA2NSwgODksIAorICAgIDczLCAxMjgsIDcxLCA2NiwgNjUsIDc1LCA4NSwgODIsIDg1LCA3OCwgNjksIDc4LCAxMjgsIDcxLCA2NiwgMTI4LCA3MSwgCisgICAgNjUsIDg5LCA2NSwgNzgsIDg1LCA3NSwgNzMsIDg0LCA4NCwgNjUsIDEyOCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNzEsIDY1LCA4OSwgMTI4LCA3MSwgNjUsIDg1LCA3OCwgODQsIDc2LCA2OSwgODQsIDEyOCwgNzEsIDY1LCA4NCwgCisgICAgNzIsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzEsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgNzEsIDY1LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA4MywgNzIsIDg1LCA3OCwgNzMsIAorICAgIDEyOCwgNzEsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDcxLCA2NSwgODIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcxLCA2NSwgCisgICAgODIsIDY4LCA2OSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgNTEsIDEyOCwgNzEsIDY1LCA4MCwgODAsIDY5LCAxOTYsIDcxLCAKKyAgICA2NSwgMjA4LCA3MSwgNjUsIDc4LCA3NywgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNzEsIDczLCA2NSwgMTI4LCA3MSwgNjUsIAorICAgIDc4LCA2OCwgMTkzLCA3MSwgNjUsIDc4LCA1MCwgMTI4LCA3MSwgNjUsIDc4LCAxNzgsIDcxLCA2NSwgNzcsIDc3LCA2NSwgCisgICAgMTI4LCA3MSwgNjUsIDc3LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA3NywgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjksIDEyOCwgCisgICAgNzEsIDY1LCA3NywgMTk3LCA3MSwgNjUsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCAKKyAgICA2NSwgNzcsIDY1LCAyMDQsIDcxLCA2NSwgNzEsIDEyOCwgNzEsIDY1LCA3MCwgMTI4LCA3MSwgNjUsIDE5OCwgNzEsIDY1LCAKKyAgICA2OSwgODQsIDg0LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDY4LCA3OSwgNzYsIDEyOCwgNzEsIAorICAgIDY1LCA2OCwgMTI4LCA3MSwgNjUsIDE5NiwgNzEsIDY1LCA2NiwgNjUsIDEyOCwgNzEsIDY1LCA2NiwgMTkzLCA3MSwgNjUsIAorICAgIDY1LCA3MCwgODUsIDEyOCwgNzEsIDY1LCAxNzgsIDcxLCA0OCwgNTMsIDUyLCAxMjgsIDcxLCA0OCwgNTMsIDUxLCAxMjgsIAorICAgIDcxLCA0OCwgNTMsIDUwLCAxMjgsIDcxLCA0OCwgNTMsIDQ5LCAxMjgsIDcxLCA0OCwgNTMsIDQ4LCAxMjgsIDcxLCA0OCwgCisgICAgNTIsIDU3LCAxMjgsIDcxLCA0OCwgNTIsIDU2LCAxMjgsIDcxLCA0OCwgNTIsIDU1LCAxMjgsIDcxLCA0OCwgNTIsIDU0LCAKKyAgICAxMjgsIDcxLCA0OCwgNTIsIDUzLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MywgMTI4LCA3MSwgNDgsIDUyLCA1MiwgMTI4LCAKKyAgICA3MSwgNDgsIDUyLCA1MSwgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDEyOCwgNzEsIDQ4LCA1MiwgNTAsIDEyOCwgNzEsIAorICAgIDQ4LCA1MiwgNDksIDEyOCwgNzEsIDQ4LCA1MiwgNDgsIDEyOCwgNzEsIDQ4LCA1MSwgNTcsIDEyOCwgNzEsIDQ4LCA1MSwgCisgICAgNTYsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCAKKyAgICA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgMTI4LCA3MSwgNDgsIDUxLCA1MywgMTI4LCA3MSwgNDgsIDUxLCA1MiwgMTI4LCAKKyAgICA3MSwgNDgsIDUxLCA1MSwgMTI4LCA3MSwgNDgsIDUxLCA1MCwgMTI4LCA3MSwgNDgsIDUxLCA0OSwgMTI4LCA3MSwgNDgsIAorICAgIDUxLCA0OCwgMTI4LCA3MSwgNDgsIDUwLCA1NywgMTI4LCA3MSwgNDgsIDUwLCA1NiwgMTI4LCA3MSwgNDgsIDUwLCA1NSwgCisgICAgMTI4LCA3MSwgNDgsIDUwLCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDEyOCwgNzEsIDQ4LCA1MCwgNTMsIDEyOCwgCisgICAgNzEsIDQ4LCA1MCwgNTIsIDEyOCwgNzEsIDQ4LCA1MCwgNTEsIDEyOCwgNzEsIDQ4LCA1MCwgNTAsIDEyOCwgNzEsIDQ4LCAKKyAgICA1MCwgNDksIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCAxMjgsIDcxLCA0OCwgNDksIAorICAgIDU3LCAxMjgsIDcxLCA0OCwgNDksIDU2LCAxMjgsIDcxLCA0OCwgNDksIDU1LCAxMjgsIDcxLCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDcxLCA0OCwgNDksIDUzLCAxMjgsIDcxLCA0OCwgNDksIDUyLCAxMjgsIDcxLCA0OCwgNDksIDUxLCAxMjgsIDcxLCA0OCwgCisgICAgNDksIDUwLCAxMjgsIDcxLCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgMTI4LCA3MSwgNDgsIDQ5LCAKKyAgICA0OCwgMTI4LCA3MSwgNDgsIDQ4LCA1NywgMTI4LCA3MSwgNDgsIDQ4LCA1NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjYsIAorICAgIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCA2NSwgCisgICAgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgMTI4LCA3MSwgNDgsIDQ4LCA1MywgMTI4LCA3MSwgNDgsIDQ4LCA1MiwgMTI4LCA3MSwgCisgICAgNDgsIDQ4LCA1MSwgMTI4LCA3MSwgNDgsIDQ4LCA1MCwgMTI4LCA3MSwgNDgsIDQ4LCA0OSwgMTI4LCA3MCwgODksIDg4LCAKKyAgICAxMjgsIDcwLCA4OSwgODQsIDEyOCwgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDY1LCAxMjgsIDcwLCA4NywgNzMsIDEyOCwgCisgICAgNzAsIDg3LCA2OSwgNjksIDEyOCwgNzAsIDg3LCA2OSwgMTI4LCA3MCwgODcsIDY1LCA2NSwgMTI4LCA3MCwgODcsIDY1LCAKKyAgICAxMjgsIDcwLCA4NiwgODMsIDUxLCAxMjgsIDcwLCA4NiwgODMsIDUwLCAxMjgsIDcwLCA4NiwgODMsIDQ5LCAxMjgsIDcwLCAKKyAgICA4NSwgODgsIDEyOCwgNzAsIDg1LCA4NCwgMTI4LCA3MCwgODUsIDgzLCA2OSwgMTI4LCA3MCwgODUsIDgzLCAxOTMsIDcwLCAKKyAgICA4NSwgODIsIDg4LCAxMjgsIDcwLCA4NSwgODAsIDEyOCwgNzAsIDg1LCA3OCwgNjksIDgyLCA2NSwgMjA0LCA3MCwgODUsIAorICAgIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MCwgCisgICAgODUsIDc2LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDg1LCA3NiwgMjA0LCA3MCwgODUsIDc0LCA3MywgMTI4LCAKKyAgICA3MCwgODUsIDY5LCA4NCwgMTI4LCA3MCwgODUsIDY5LCAyMDQsIDcwLCA4NSwgNjksIDEyOCwgNzAsIDg0LCA3MiwgNzksIAorICAgIDgyLCAxOTMsIDcwLCA4MywgNzMsIDEyOCwgNzAsIDgyLCA3OSwgODcsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA4MiwgCisgICAgNzksIDg3LCA3OCwgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDg3LCA3OCwgMTI4LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCAKKyAgICA4NCwgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIAorICAgIDcwLCA4MiwgNzksIDIwNSwgNzAsIDgyLCA3OSwgNzEsIDEyOCwgNzAsIDgyLCA3OSwgMTk5LCA3MCwgODIsIDczLCA4NCwgCisgICAgODUsIDEyOCwgNzAsIDgyLCA3MywgNjksIDgzLCAxMjgsIDcwLCA4MiwgNzMsIDY5LCAxOTYsIDcwLCA4MiwgNzMsIDY3LCAKKyAgICA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzAsIDgyLCA2OSwgODQsIDY2LCA3OSwgNjUsIDgyLCA2OCwgMTI4LCA3MCwgODIsIAorICAgIDY5LCA3OCwgNjcsIDIwMCwgNzAsIDgyLCA2OSwgNjksIDEyOCwgNzAsIDgyLCA2OSwgMTk3LCA3MCwgODIsIDY1LCA3OCwgCisgICAgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgNzAsIDgyLCA2NSwgNzEsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDcwLCAKKyAgICA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MCwgNzksIAorICAgIDg4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgCisgICAgMjA2LCA3MCwgNzksIDg1LCA4MiwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzAsIDc5LCA4NSwgODIsIDQ1LCAKKyAgICA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIAorICAgIDc5LCA4NSwgODIsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3OSwgODUsIDIxMCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgCisgICAgNzMsIDc4LCAxMjgsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODcsIDY1LCAKKyAgICA4MiwgNjgsIDEyOCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3OSwgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIAorICAgIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgCisgICAgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIDE5NiwgNzAsIDc5LCA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCAKKyAgICA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgMTI4LCA3MCwgNzksIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIAorICAgIDcwLCA3OSwgNzksIDg0LCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAKKyAgICAxOTcsIDcwLCA3OSwgNzksIDg0LCA2NiwgNjUsIDc2LCA3NiwgMTI4LCA3MCwgNzksIDc5LCA4NCwgMTI4LCA3MCwgNzksIAorICAgIDc5LCA2OCwgMTI4LCA3MCwgNzksIDc5LCAxMjgsIDcwLCA3OSwgNzgsIDcxLCA3NywgNjUsIDc4LCAxMjgsIDcwLCA3OSwgCisgICAgNzcsIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDg5LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA3OSwgODcsIDczLCA3OCwgNzEsIAorICAgIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCA4MiwgMTI4LCA3MCwgNzksIDc2LCA2OCwgNjksIDE5NiwgNzAsIDc5LCA3MSwgCisgICAgNzEsIDg5LCAxMjgsIDcwLCAyMDcsIDcwLCA3NywgMTI4LCA3MCwgNzYsIDg5LCAxMjgsIDcwLCA3NiwgODUsIDg0LCA4NCwgCisgICAgNjksIDgyLCA3MywgNzgsIDE5OSwgNzAsIDc2LCA4NSwgODQsIDY5LCAxMjgsIDcwLCA3NiwgODUsIDgzLCA3MiwgNjksIAorICAgIDE5NiwgNzAsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MCwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzAsIDc2LCA3OSwgCisgICAgODUsIDgyLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2OSwgODQsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDc5LCAKKyAgICA4MiwgNjUsIDIwNCwgNzAsIDc2LCA3OSwgODAsIDgwLCAyMTcsIDcwLCA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIAorICAgIDczLCA4MCwgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3NiwgNjksIDg4LCA4NSwgODMsIDEyOCwgCisgICAgNzAsIDc2LCA2OSwgODgsIDY5LCAxOTYsIDcwLCA3NiwgNjksIDg1LCA4MiwgNDUsIDY4LCA2OSwgNDUsIDc2LCA3MywgODMsIAorICAgIDEyOCwgNzAsIDc2LCA2NSwgODQsIDg0LCA2OSwgNzgsIDY5LCAxOTYsIDcwLCA3NiwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIDcwLCA3NiwgNjUsIDcxLCA4MywgMTI4LCA3MCwgCisgICAgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTIsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCAKKyAgICA1MSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIAorICAgIDc2LCA2NSwgNzEsIDEyOCwgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIAorICAgIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA4NCwgCisgICAgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzMsIDg2LCAKKyAgICAxOTcsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcwLCA3MywgODQsIDEyOCwgNzAsIDczLCA4MywgODQsIDY5LCAxOTYsIDcwLCAKKyAgICA3MywgODMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MywgNzgsIDE5OSwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIAorICAgIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgODksIDY5LCAKKyAgICAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgNzAsIDczLCAKKyAgICA4MiwgNzMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgODIsIDc1LCA4MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIAorICAgIDc5LCA4MiwgMjAzLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCA3MCwgNzMsIDgyLCAxOTcsIDcwLCA3MywgODAsIDEyOCwgNzAsIAorICAgIDczLCA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDc4LCA2NSwgNzMsIDc2LCA4MywgMTI4LCA3MCwgCisgICAgNzMsIDc4LCA3MSwgNjksIDgyLCA2OSwgMTk2LCA3MCwgNzMsIDc4LCA2NSwgNzgsIDY3LCA3MywgNjUsIDc2LCAxMjgsIDcwLCAKKyAgICA3MywgNzYsIDc2LCA2OSwgODIsIDEyOCwgNzAsIDczLCA3NiwgNzYsIDY5LCAxOTYsIDcwLCA3MywgNzYsIDc2LCAxMjgsIAorICAgIDcwLCA3MywgNzYsIDIwNCwgNzAsIDczLCA3NiwgMTk3LCA3MCwgNzMsIDczLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCisgICAgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKKyAgICA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgMTk3LCA3MCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIAorICAgIDczLCA3MCwgODQsIDg5LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAyMTcsIDcwLCA3MywgNzAsIDg0LCA3MiwgODMsIDEyOCwgCisgICAgNzAsIDczLCA3MCwgODQsIDcyLCAxMjgsIDcwLCA3MywgNzAsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3MywgNzAsIDg0LCAKKyAgICA2OSwgNjksIDIwNiwgNzAsIDczLCA2OSwgNzYsIDY4LCAxMjgsIDcwLCA3MiwgODQsIDc5LCA4MiwgMTkzLCA3MCwgNzAsIAorICAgIDc2LCAxMjgsIDcwLCA3MCwgNzMsIDEyOCwgNzAsIDY5LCA4NSwgODgsIDEyOCwgNzAsIDY5LCA4NSwgNzAsIDY5LCA4NSwgCisgICAgNjUsIDY5LCA4NCwgMTI4LCA3MCwgNjksIDgzLCA4NCwgNzMsIDg2LCA2NSwgNzYsIDEyOCwgNzAsIDY5LCA4MiwgODIsIDg5LCAKKyAgICAxMjgsIDcwLCA2OSwgODIsIDgyLCA3MywgMjExLCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNjksIAorICAgIDgyLCA3NywgNjUsIDg0LCAxOTMsIDcwLCA2OSwgNzksIDIwMCwgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc4LCA2NywgCisgICAgNjksIDEyOCwgNzAsIDY5LCA3NywgNzMsIDc4LCA3MywgNzgsIDE5NywgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCAKKyAgICA3MCwgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCA3NiwgNzYsIDc5LCA4NywgODMsIDcyLCA3MywgODAsIDEyOCwgNzAsIAorICAgIDY5LCA3MywgMTI4LCA3MCwgNjksIDcyLCAyMTMsIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDY5LCAyMDAsIDcwLCA2OSwgNjksIAorICAgIDc4LCA3MSwgMTI4LCA3MCwgNjksIDY5LCA2OCwgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNjksIDEyOCwgNzAsIAorICAgIDY5LCA2NiwgODIsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgCisgICAgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY5LCA2NSwgODIsIDc4LCAxMjgsIDcwLCA2OSwgNjUsIDgyLCA3MCwgODUsIAorICAgIDIwNCwgNzAsIDY5LCA2NSwgODIsIDEyOCwgNzAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzAsIDY1LCA4OSwgCisgICAgMTI4LCA3MCwgNjUsIDg4LCAxMjgsIDcwLCA2NSwgMjE2LCA3MCwgNjUsIDg0LCA3MywgNzEsIDg1LCA2OSwgMTI4LCA3MCwgCisgICAgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCAKKyAgICA2NSwgNzgsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgNjUsIDIwNiwgNzAsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIAorICAgIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCA2NSwgODQsIDEyOCwgNzAsIDY1LCA4MiwgODMsIDIwMSwgNzAsIDY1LCA4MSwgCisgICAgMTI4LCA3MCwgNjUsIDgwLCAxMjgsIDcwLCA2NSwgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzgsIDY5LCA4MiwgNzksIDgzLCAKKyAgICA3MywgMjExLCA3MCwgNjUsIDc4LCAxMjgsIDcwLCA2NSwgNzcsIDczLCA3NiwgODksIDEyOCwgNzAsIDY1LCA3NiwgNzYsIAorICAgIDczLCA3OCwgMTk5LCA3MCwgNjUsIDc2LCA3NiwgNjksIDIwNiwgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgCisgICAgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCAKKyAgICA2NSwgNjcsIDg0LCA3OSwgODIsIDg5LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIAorICAgIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA2NywgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAKKyAgICAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIAorICAgIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDY1LCA2NSwgNzcsIDY1LCA2OSwgCisgICAgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCA3MCwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzAsIDQ4LCA1MywgNTEsIDEyOCwgCisgICAgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NiwgMTI4LCAKKyAgICA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIDQ4LCA1MywgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgCisgICAgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgMTI4LCA3MCwgNDgsIDUyLCAKKyAgICA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIAorICAgIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCAxMjgsIDcwLCA0OCwgCisgICAgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCA1NCwgMTI4LCA3MCwgNDgsIDUxLCAKKyAgICA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCA3MCwgNDgsIDUxLCA1MCwgMTI4LCAKKyAgICA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIAorICAgIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgCisgICAgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgCisgICAgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCAxMjgsIDcwLCAKKyAgICA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIDU2LCAxMjgsIDcwLCA0OCwgNDksIAorICAgIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIDcwLCA0OCwgNDksIDUyLCAxMjgsIAorICAgIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgCisgICAgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCA1NywgMTI4LCA3MCwgNDgsIDQ4LCAKKyAgICA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCA3MCwgNDgsIDQ4LCA1MywgMTI4LCAKKyAgICA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIAorICAgIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA0OCwgNDksIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAxMjgsIAorICAgIDY5LCA5MCwgNjksIDIwNiwgNjksIDkwLCAxMjgsIDY5LCA4OSwgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjksIDcxLCA3NiwgCisgICAgNjUsIDgzLCA4MywgNjksIDgzLCAxMjgsIDY5LCA4OSwgNjYsIDY5LCA4OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDg5LCAKKyAgICA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgODgsIDg0LCA4MiwgNjUsIDg0LCA2OSwgODIsIDgyLCA2OSwgODMsIDg0LCA4MiwgCisgICAgNzMsIDY1LCAyMDQsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIDc2LCA3OSwgMjE1LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCAKKyAgICA3MiwgNzMsIDcxLCAyMDAsIDY5LCA4OCwgODQsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA4NCwgNjksIAorICAgIDc4LCA2OCwgNjksIDE5NiwgNjksIDg4LCA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDc2LCA2OSwgODMsIDIxMSwgCisgICAgNjksIDg4LCA4MCwgNzksIDc4LCA2OSwgNzgsIDIxMiwgNjksIDg4LCA3OSwgMTI4LCA2OSwgODgsIDIwNywgNjksIDg4LCAKKyAgICA3MywgODMsIDg0LCA4MywgMTI4LCA2OSwgODgsIDczLCA4MywgODQsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgCisgICAgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY5LCA4OCwgNjcsIDcyLCA2NSwgNzgsIDcxLCA2OSwgMTI4LCAKKyAgICA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAxMjgsIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgNjksIAorICAgIDg3LCA2OSwgMTI4LCA2OSwgODYsIDY5LCA4MiwgNzEsIDgyLCA2OSwgNjksIDIwNiwgNjksIDg2LCA2OSwgNzgsIDczLCA3OCwgCisgICAgNzEsIDEyOCwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNjUsIDIwNiwgNjksIDg1LCA4MiwgNzksIDgwLCA2OSwgNDUsIDY1LCAKKyAgICA3MCwgODIsIDczLCA2NywgNjUsIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgCisgICAgMjE3LCA2OSwgODUsIDgyLCAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgCisgICAgNDUsIDc5LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgNjksIDg1LCAKKyAgICA0NSwgNjksIDEyOCwgNjksIDg1LCA0NSwgNjUsIDEyOCwgNjksIDg0LCA4OCwgMTI4LCA2OSwgODQsIDc4LCA2NSwgNzIsIAorICAgIDg0LCA2NSwgMTI4LCA2OSwgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIDIwNiwgNjksIDg0LCA2OSwgCisgICAgODIsIDc4LCA3MywgODQsIDg5LCAxMjgsIDY5LCA4NCwgNjYsIDEyOCwgNjksIDgzLCA4NSwgNzUsIDg1LCA4NSwgNjgsIDc5LCAKKyAgICAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCA2OSwgODMsIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIAorICAgIDY5LCAxOTYsIDY5LCA4MywgNzIsIDY5LCA1MSwgMTI4LCA2OSwgODMsIDcyLCA1MCwgNDksIDEyOCwgNjksIDgzLCA3MiwgCisgICAgMTc4LCA2OSwgODMsIDcyLCA0OSwgNTQsIDEyOCwgNjksIDgzLCA2NywgNjUsIDgwLCA2OSwgMTI4LCA2OSwgODMsIDY3LCAKKyAgICAxMjgsIDY5LCA4MywgNjUsIDEyOCwgNjksIDgzLCA0NSwgODQsIDY5LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIAorICAgIDY2LCA2NSwgODIsIDgyLCA2OSwgMTk2LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4MiwgNzMsIDc4LCA1MCwgMTI4LCA2OSwgCisgICAgODIsIDcxLCAxMjgsIDY5LCA4MiwgNjUsIDgzLCAxOTcsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIAorICAgIDIxMiwgNjksIDgxLCA4NSwgNzMsIDY4LCAxMjgsIDY5LCA4MSwgODUsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAKKyAgICAyMTAsIDY5LCA4MSwgODUsIDY1LCA3NiwgODMsIDEyOCwgNjksIDgxLCA4NSwgNjUsIDc2LCAyMTEsIDY5LCA4MSwgODUsIAorICAgIDY1LCA3NiwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAKKyAgICAyMDYsIDY5LCA4MCwgNzksIDY3LCA3MiwgMTI4LCA2OSwgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIAorICAgIDY5LCA4MCwgNzMsIDY4LCA2NSwgODUsIDgyLCA2OSwgNjUsIDIwNiwgNjksIDgwLCA2OSwgNzgsIDg0LCA3MiwgNjksIDg0LCAKKyAgICA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCA3NywgNjUsIDEyOCwgNjksIDc5LCA4NCwgMTI4LCA2OSwgNzksIAorICAgIDc3LCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCA2OSwgNzksIDc2LCAxMjgsIDY5LCA3OSwgNzIsIDEyOCwgNjksIAorICAgIDc4LCA4OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgNjksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgCisgICAgODAsIDE5NywgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCAKKyAgICA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNDksIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIAorICAgIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY5LCA3OCwgODQsIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCA3OCwgCisgICAgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCAKKyAgICA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIDg0LCA2OSwgMjEwLCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgCisgICAgMTI4LCA2OSwgNzgsIDgxLCAxMjgsIDY5LCA3OCwgNzksIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgCisgICAgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDc4LCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2OSwgNzgsIDY4LCAKKyAgICA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY4LCA2OSwgODAsIAorICAgIDEyOCwgNjksIDc4LCA2OCwgNjksIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgCisgICAgNjksIDgyLCA4MywgMTI4LCA2OSwgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCAKKyAgICA3OSwgODMsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY3LCAxMjgsIDY5LCA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIAorICAgIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA3OSwgMjExLCA2OSwgNzcsIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgCisgICAgNjUsIDg0LCA3MywgMTk1LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCAKKyAgICA2OCwgNjksIDgyLCA4OSwgMTI4LCA2OSwgNzcsIDY2LCA3NiwgNjksIDc3LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA3NiwgNzYsIAorICAgIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgCisgICAgNjksIDc2LCA4NCwgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDg0LCA3MywgMTk1LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCAKKyAgICA3MywgODMsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIAorICAgIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3NiwgNjksIDg2LCAKKyAgICA2OSwgNzgsIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDgwLCA3MiwgNjUsIDc4LCA4NCwgCisgICAgMTI4LCA2OSwgNzYsIDY5LCA3NywgNjksIDc4LCAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIAorICAgIDIwNCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgCisgICAgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCAKKyAgICA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIAorICAgIDY3LCAyMTIsIDY5LCA3MywgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgCisgICAgODQsIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCAKKyAgICA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIAorICAgIDcxLCA3MiwgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAKKyAgICAxMjgsIDY5LCA3MywgNjksIDEyOCwgNjksIDcyLCA4NywgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIAorICAgIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDczLCA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgCisgICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA2OSwgNzUsIDY1LCA2NSwgMTI4LCA2OSwgNjksIDcyLCAxMjgsIDY5LCAKKyAgICA2OSwgNjYsIDY5LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDY4LCA3MywgODQsIDc5LCA4MiwgNzMsIDY1LCAyMDQsIAorICAgIDY5LCA2OCwgNzMsIDc4LCAxMjgsIDY5LCA2OCwgNjgsIDEyOCwgNjksIDY2LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgMjA2LCA2OSwgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIAorICAgIDIxNywgNjksIDY1LCA4MiwgODQsIDcyLCAxMjgsIDY5LCA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDgzLCAxMjgsIAorICAgIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgCisgICAgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCAKKyAgICA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCA1MSwgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCAKKyAgICA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIAorICAgIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIDY5LCA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIAorICAgIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgCisgICAgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCA1NCwgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCAKKyAgICA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCA2OSwgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCAKKyAgICA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIAorICAgIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NCwgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCAKKyAgICA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCA2OSwgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCAKKyAgICA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIAorICAgIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAxMjgsIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAKKyAgICAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA0NSwgNzcsIDY1LCA3MywgMjA0LCAKKyAgICA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIAorICAgIDg1LCAxMjgsIDY4LCA5MCwgNzksIDEyOCwgNjgsIDkwLCA3NCwgNjksIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIAorICAgIDcyLCA2OSwgMTI4LCA2OCwgOTAsIDcyLCA2NSwgMTI4LCA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjgsIDkwLCA2OSwgCisgICAgNjksIDEyOCwgNjgsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIDY1LCA2NSwgMTI4LCA2OCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgCisgICAgMTI4LCA2OCwgMjE4LCA2OCwgODksIDc5LCAxMjgsIDY4LCA4OSwgMjA3LCA2OCwgODksIDY5LCA3MiwgMTI4LCA2OCwgODksIAorICAgIDY5LCAyMDAsIDY4LCA4NywgNzksIDEyOCwgNjgsIDg3LCA2OSwgMTI4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA4NiwgNzMsIAorICAgIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2OCwgODYsIDY4LCAxMjgsIDY4LCA4NiwgMTI4LCA2OCwgODUsIDg0LCA3MywgCisgICAgNjksIDgzLCAxMjgsIDY4LCA4NSwgODMsIDc1LCAxMjgsIDY4LCA4NSwgODMsIDcyLCA2OSwgNzgsIDc4LCA2NSwgMTI4LCAKKyAgICA2OCwgODUsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDg1LCA4MiwgNTAsIDEyOCwgNjgsIDg1LCA4MCwgNzksIAorICAgIDc4LCA2OCwgNzMsIDg1LCAyMTEsIDY4LCA4NSwgNzksIDg4LCAxMjgsIDY4LCA4NSwgNzksIDEyOCwgNjgsIDg1LCA3OCwgCisgICAgNTIsIDEyOCwgNjgsIDg1LCA3OCwgNTEsIDEyOCwgNjgsIDg1LCA3OCwgMTc5LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgCisgICAgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCA2OCwgCisgICAgODUsIDY2LCAxMjgsIDY4LCA4NSwgMTk0LCA2OCwgODIsIDg5LCAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgODIsIDg1LCA3NywgCisgICAgMTI4LCA2OCwgODIsIDg1LCAyMDUsIDY4LCA4MiwgNzksIDgwLCA4MywgMTI4LCA2OCwgODIsIDc5LCA4MCwgNzYsIDY5LCAKKyAgICA4NCwgMTI4LCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDY4LCA4MiwgNzksIAorICAgIDc3LCA2OSwgNjgsIDY1LCA4MiwgMjE3LCA2OCwgODIsIDczLCA4NiwgNjksIDEyOCwgNjgsIDgyLCA3MywgODYsIDE5NywgCisgICAgNjgsIDgyLCA3MywgNzgsIDc1LCAxMjgsIDY4LCA4MiwgNzMsIDIwNCwgNjgsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDY4LCAKKyAgICA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY4LCA4MiwgNjUsIDc3LCAxMjgsIDY4LCA4MiwgNjUsIDIwNSwgNjgsIAorICAgIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIDY1LCA3MSwgNzksIDIwNiwgNjgsIDgyLCA2NSwgNzAsIDg0LCA3MywgCisgICAgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAKKyAgICAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCA4MywgCisgICAgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCAKKyAgICA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIAorICAgIDg1LCA3MSwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgCisgICAgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNjgsIDc5LCA4NSwgNjYsIDc2LCAKKyAgICA2OSwgNDUsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDEyOCwgNjgsIDc5LCA4NCwgODQsIAorICAgIDY5LCA2OCwgNDUsIDgwLCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgCisgICAgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIAorICAgIDE5NiwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCisgICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAxMjgsIDY4LCA3OSwgODQsIDc2LCAKKyAgICA2OSwgODMsIDIxMSwgNjgsIDc5LCA4MiwgODUsIDEyOCwgNjgsIDc5LCA3OSwgODIsIDEyOCwgNjgsIDc5LCA3OSwgNzgsIAorICAgIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgCisgICAgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCAKKyAgICA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgMTI4LCA2OCwgNzksIDczLCA4NCwgCisgICAgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIDY4LCA3OSwgNjgsIDY5LCA3NSwgCisgICAgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCAKKyAgICA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCAxOTcsIDY4LCA3OSwgNjUsIAorICAgIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCA3NiwgODUsIDEyOCwgNjgsIDc2LCAKKyAgICA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCA2OCwgNzYsIDcyLCA2NSwgMTI4LCAKKyAgICA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3NiwgMTI4LCA2OCwgNzUsIDY1LCA4MiwgMTI4LCAKKyAgICA2OCwgNzUsIDY1LCAyMTAsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIDc0LCA2OSwgODIsIDg2LCAxMjgsIAorICAgIDY4LCA3NCwgNjksIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzMsIDkwLCA5MCwgMjE3LCA2OCwgNzMsIDg2LCA3OSwgCisgICAgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCAKKyAgICA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIAorICAgIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAKKyAgICAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCAxOTcsIDY4LCA3MywgODYsIAorICAgIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgCisgICAgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCAKKyAgICA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgCisgICAgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgNjgsIDczLCA4MywgODAsIDY5LCA4MiwgODMsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgNjgsIAorICAgIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgODUsIDc5LCA4NSwgMjExLCA2OCwgCisgICAgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA2OCwgNzMsIDgzLCAKKyAgICA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3NiwgCisgICAgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDgwLCA4NCwgNjksIAorICAgIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2OCwgCisgICAgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIDY2LCA2NSwgMjEyLCAKKyAgICA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIAorICAgIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUwLCAKKyAgICAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgNjgsIDczLCA3NywgNzMsIAorICAgIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIDczLCAxOTMsIDY4LCA3MywgCisgICAgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCAKKyAgICA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIAorICAgIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDY4LCA3MywgCisgICAgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCAKKyAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCA3MSwgNjUsIDc3LCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIDIxMSwgNjgsIDczLCA3MCwgCisgICAgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDIxNywgNjgsIDczLCAKKyAgICA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgCisgICAgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgNjgsIDczLCAKKyAgICA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCAyMTEsIAorICAgIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCA3MywgNjUsIDg0LCA3OSwgCisgICAgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCAKKyAgICA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIAorICAgIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCA2OSwgMjEwLCA2OCwgCisgICAgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgMTkzLCAKKyAgICA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDc2LCAxMjgsIAorICAgIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgOTAsIDY5LCAKKyAgICAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIAorICAgIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgNzksIDEyOCwgNjgsIAorICAgIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCA3MiwgCisgICAgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY5LCAKKyAgICAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIDgyLCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgNzIsIDEyOCwgCisgICAgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAKKyAgICAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCA2OCwgNjksIDg5LCAKKyAgICA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIDg4LCA3MywgNjUsIAorICAgIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgNjksIDc4LCA4NCwgCisgICAgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCA3MywgNzEsIDc4LCAKKyAgICAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDY5LCAKKyAgICA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCA4MiwgNjksIAorICAgIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgODQsIDczLCAKKyAgICA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIAorICAgIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIDY5LCA3OCwgCisgICAgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgNzgsIDY1LCAKKyAgICA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCA2OCwgNjksIAorICAgIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCAKKyAgICAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIAorICAgIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCA3MywgCisgICAgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAogICAgIDE5NywgNjgsIDY5LCA3NSwgNjUsIDEyOCwgNjgsIDY5LCA3NSwgMTI4LCA2OCwgNjksIDczLCAxMjgsIDY4LCA2OSwgNzIsIAogICAgIDczLCAxMjgsIDY4LCA2OSwgNzEsIDgyLCA2OSwgMTk3LCA2OCwgNjksIDcwLCA3MywgNzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgCiAgICAgMTI4LCA2OCwgNjksIDcwLCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCA3OCwgNjksIDgzLCAyMTEsIDY4LCA2OSwgNjksIDgyLCAKQEAgLTQ1NDcsOTYgKzQ1NTAsOTYgQEAKICAgICA3MywgNzksIDIwNiwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDY1LCA3NiwgODQsIDY1LCAxMjgsIAogICAgIDY1LCA3NiwgODAsIDcyLCA2NSwgMTI4LCA2NSwgNzYsIDgwLCA3MiwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgCiAgICAgNzgsIDY1LCAxMjgsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNjUsIDc2LCA4MCwgNjUsIAotICAgIDEyOCwgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY1LCA3NiwgNzYsIDczLCA2NSwgCi0gICAgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNzYsIDc2LCAyMDEsIDY1LCA3NiwgNzYsIDY1LCAyMDAsIDY1LCA3NiwgNzUsIDY1LCAKLSAgICA3NiwgNzMsIDQ1LCA1MCwgMTI4LCA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCAxMjgsIDY1LCA3NiwgNzMsIDcxLCA3OCwgNjksIAotICAgIDE5NiwgNjUsIDc2LCA3MywgNzAsIDg1LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCA3OCwgMTI4LCA2NSwgNzYsIDczLCA2OSwgCi0gICAgMjA2LCA2NSwgNzYsIDcxLCA3MywgMjE4LCA2NSwgNzYsIDcwLCA2NSwgMTI4LCA2NSwgNzYsIDY5LCA4NSwgMjEyLCA2NSwgCi0gICAgNzYsIDY5LCA4MiwgODQsIDEyOCwgNjUsIDc2LCA2OSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgNjksIDc3LCA2NiwgNzMsIDY3LCAKLSAgICAxMjgsIDY1LCA3NiwgNjksIDcwLCAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgNjksIDEyOCwgNjUsIDc2LCA2NSwgODksIAotICAgIDcyLCAxOTcsIDY1LCA3NiwgNjUsIDgyLCAyMDUsIDY1LCA3NiwgNjUsIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDQ1LCA3NiwgCi0gICAgNjUsIDc1LCA4NSwgNzgsIDY1LCAxMjgsIDY1LCA3NSwgODQsIDczLCA2OSwgODMsIDY5LCA3NiwgODMsIDc1LCA2NSwgNjYsIAotICAgIDEyOCwgNjUsIDc1LCA4MywgNjUsIDEyOCwgNjUsIDc1LCA3MiwgNzcsIDczLCA3NywgNzMsIDE5NSwgNjUsIDc1LCA2NiwgCi0gICAgNjUsIDIxMCwgNjUsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3NSwgNjUsIDgyLCAxOTMsIDY1LCA3MywgODksIDY1LCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3MywgODYsIDczLCA3NiwgNzMsIDIwMywgNjUsIDczLCA4NCwgNzksIDIwNiwgNjUsIAotICAgIDczLCA4MiwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDY1LCA3MywgNzgsIDIxMywgNjUsIDczLCA3OCwgNzgsIDEyOCwgCi0gICAgNjUsIDczLCA3NiwgNzcsIDEyOCwgNjUsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzMsIDcyLCA4NiwgODUsIDgzLCAKLSAgICAxMjgsIDY1LCA3MiwgODMsIDY4LCA2NSwgMTI4LCA2NSwgNzIsIDgzLCA2NSwgMTI4LCA2NSwgNzIsIDY1LCA3OCwgMTk5LCAKLSAgICA2NSwgNzIsIDY1LCA3MSwgNzEsIDY1LCAyMTAsIDY1LCA3MiwgNjUsIDY4LCAxMjgsIDY1LCA3MSwgODUsIDc4LCA3MSwgCi0gICAgMTI4LCA2NSwgNzEsIDc5LCA3MSwgMjAxLCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgNzEsIDY1LCA3MywgNzgsIDEyOCwgCi0gICAgNjUsIDcwLCA4NCwgNjksIDIxMCwgNjUsIDcwLCA4MywgNjUsIDY1LCA4MSwgMTI4LCA2NSwgNzAsIDgyLCA3MywgNjcsIDY1LCAKLSAgICAyMDYsIDY1LCA3MCwgNzksIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDY5LCA2OCwgMTI4LCA2NSwgNzAsIAotICAgIDcxLCA3MiwgNjUsIDc4LCAyMDEsIDY1LCA3MCwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2OSwgCi0gICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgODksIDEyOCwgNjUsIDY5LCA4MywgNjcsIDg1LCA3NiwgNjUsIDgwLCAKLSAgICA3MywgODUsIDgzLCAxMjgsIDY1LCA2OSwgODMsIDY3LCAxMjgsIDY1LCA2OSwgODMsIDEyOCwgNjUsIDY5LCA4MiwgNzMsIAotICAgIDY1LCAyMDQsIDY1LCA2OSwgODIsIDEyOCwgNjUsIDY5LCA3NiwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgCi0gICAgNjUsIDY5LCA3NiwgMTI4LCA2NSwgNjksIDc1LCAxMjgsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCA2NSwgNjksIDcxLCAKLSAgICAxMjgsIDY1LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDY5LCAxMjgsIDY1LCA2OSwgNjgsIAotICAgIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNjgsIDEyOCwgNjUsIDY5LCA2NiwgMTI4LCA2NSwgCi0gICAgNjgsIDg2LCA2NSwgNzgsIDg0LCA2NSwgNzEsIDY5LCAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCAKLSAgICA2OCwgNjksIDcxLCAxMjgsIDY1LCA2OCwgNjksIDE5OSwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgODMsIDY5LCAxOTYsIAotICAgIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDIxMSwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgNjUsIDIwMywgCi0gICAgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgNjksIAotICAgIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgODQsIDE5NywgCi0gICAgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIDE5NywgNjUsIDY3LCAKLSAgICA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgNjksIDY4LCA3MSwgCi0gICAgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDY3LCAKLSAgICA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDY5LCA4MCwgODQsIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgNDUsIAotICAgIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAxMjgsIDY1LCA2NywgCi0gICAgNjcsIDY5LCA3OCwgMjEyLCA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAyMTcsIDY1LCA2NiwgODksIDgzLCA3NywgNjUsIAotICAgIDIwNCwgNjUsIDY2LCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjYsIDc1LCA3MiwgNjUsIDgzLCA3MywgCi0gICAgNjUsIDIwNiwgNjUsIDY2LCA2NiwgODIsIDY5LCA4NiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2NiwgNjUsIDcwLCAKLSAgICA3MywgNzYsIDczLCAxMjgsIDY1LCA2NiwgMTc4LCA2NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjUsIAotICAgIDg5LCAxMjgsIDY1LCA2NSwgODcsIDEyOCwgNjUsIDY1LCA3OSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIDY1LCA2NSwgNjYsIAotICAgIDY1LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OSwgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCAKLSAgICA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIAotICAgIDUwLCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUxLCAxMjgsIDY1LCA2NSwgCi0gICAgNDgsIDUwLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDQ4LCAxMjgsIDY1LCAKLSAgICA2NSwgNDgsIDQ5LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU1LCAxMjgsIAotICAgIDY1LCA2NSwgNDgsIDQ5LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUyLCAKLSAgICAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNDksIAotICAgIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NSwgMTI4LCAKLSAgICA2NSwgNjUsIDQ4LCA0OCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MywgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCAKLSAgICA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNDksIDEyOCwgNjUsIDQ4LCA1NSwgNDgsIDEyOCwgNjUsIDQ4LCA1NCwgNTcsIAotICAgIDEyOCwgNjUsIDQ4LCA1NCwgNTYsIDEyOCwgNjUsIDQ4LCA1NCwgNTUsIDEyOCwgNjUsIDQ4LCA1NCwgNTQsIDEyOCwgNjUsIAotICAgIDQ4LCA1NCwgNTMsIDEyOCwgNjUsIDQ4LCA1NCwgNTIsIDEyOCwgNjUsIDQ4LCA1NCwgNTEsIDEyOCwgNjUsIDQ4LCA1NCwgCi0gICAgNTAsIDEyOCwgNjUsIDQ4LCA1NCwgNDksIDEyOCwgNjUsIDQ4LCA1NCwgNDgsIDEyOCwgNjUsIDQ4LCA1MywgNTcsIDEyOCwgCi0gICAgNjUsIDQ4LCA1MywgNTYsIDEyOCwgNjUsIDQ4LCA1MywgNTUsIDEyOCwgNjUsIDQ4LCA1MywgNTQsIDEyOCwgNjUsIDQ4LCAKLSAgICA1MywgNTMsIDEyOCwgNjUsIDQ4LCA1MywgNTIsIDEyOCwgNjUsIDQ4LCA1MywgNTEsIDEyOCwgNjUsIDQ4LCA1MywgNTAsIAotICAgIDEyOCwgNjUsIDQ4LCA1MywgNDksIDEyOCwgNjUsIDQ4LCA1MywgNDgsIDEyOCwgNjUsIDQ4LCA1MiwgNTcsIDEyOCwgNjUsIAotICAgIDQ4LCA1MiwgNTYsIDEyOCwgNjUsIDQ4LCA1MiwgNTUsIDEyOCwgNjUsIDQ4LCA1MiwgNTQsIDEyOCwgNjUsIDQ4LCA1MiwgCi0gICAgNTMsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUzLCAxMjgsIDY1LCA0OCwgNTIsIDUyLCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAKLSAgICA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIAotICAgIDEyOCwgNjUsIDQ4LCA1MiwgNDksIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCAxMjgsIAotICAgIDY1LCA0OCwgNTEsIDU3LCAxMjgsIDY1LCA0OCwgNTEsIDU2LCAxMjgsIDY1LCA0OCwgNTEsIDU1LCAxMjgsIDY1LCA0OCwgCi0gICAgNTEsIDU0LCAxMjgsIDY1LCA0OCwgNTEsIDUzLCAxMjgsIDY1LCA0OCwgNTEsIDUyLCAxMjgsIDY1LCA0OCwgNTEsIDUxLCAKLSAgICAxMjgsIDY1LCA0OCwgNTEsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTIsIAotICAgIDY1LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgCi0gICAgNTMsIDY1LCAxMjgsIDY1LCA0NSwgNjksIDg1LCAxMjgsIDQ1LCA4NSwgMjA1LCA0NSwgODAsIDcyLCA4MiwgODUsIDEyOCwgCi0gICAgNDUsIDc1LCA3MiwgODksIDg1LCAxOTYsIDQ1LCA3NSwgNzIsIDg5LCA3MywgNzYsIDEyOCwgNDUsIDY4LCA5MCwgODUsIAotICAgIDE5NiwgNDUsIDY3LCA3MiwgNjUsIDIxMCwgNDUsIDY3LCA3MiwgNjUsIDc2LCAxMjgsIAorICAgIDEyOCwgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY1LCA3NiwgNzcsIDEyOCwgNjUsIDc2LCA3NiwgNzksIDEyOCwgNjUsIAorICAgIDc2LCA3NiwgNzMsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA3NiwgNzYsIDIwMSwgNjUsIDc2LCA3NiwgNjUsIDIwMCwgCisgICAgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgNDUsIDUwLCAxMjgsIDY1LCA3NiwgNzUsIDY1LCA3NiwgNzMsIDEyOCwgNjUsIDc2LCAKKyAgICA3MywgNzEsIDc4LCA2OSwgMTk2LCA2NSwgNzYsIDczLCA3MCwgODUsIDEyOCwgNjUsIDc2LCA3MywgNjksIDc4LCAxMjgsIAorICAgIDY1LCA3NiwgNzMsIDY5LCAyMDYsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgNzAsIDY1LCAxMjgsIDY1LCA3NiwgCisgICAgNjksIDg1LCAyMTIsIDY1LCA3NiwgNjksIDgyLCA4NCwgMTI4LCA2NSwgNzYsIDY5LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCAKKyAgICA2OSwgNzcsIDY2LCA3MywgNjcsIDEyOCwgNjUsIDc2LCA2OSwgNzAsIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCA2OSwgCisgICAgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDE5NywgNjUsIDc2LCA2NSwgODIsIDIwNSwgNjUsIDc2LCA2NSwgODAsIDcyLCAKKyAgICAxMjgsIDY1LCA3NiwgNDUsIDc2LCA2NSwgNzUsIDg1LCA3OCwgNjUsIDEyOCwgNjUsIDc1LCA4NCwgNzMsIDY5LCA4MywgNjksIAorICAgIDc2LCA4MywgNzUsIDY1LCA2NiwgMTI4LCA2NSwgNzUsIDgzLCA2NSwgMTI4LCA2NSwgNzUsIDcyLCA3NywgNzMsIDc3LCA3MywgCisgICAgMTk1LCA2NSwgNzUsIDY2LCA2NSwgMjEwLCA2NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc1LCA2NSwgODIsIDE5MywgCisgICAgNjUsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDczLCA4NiwgNzMsIDc2LCA3MywgMjAzLCA2NSwgNzMsIDg0LCAKKyAgICA3OSwgMjA2LCA2NSwgNzMsIDgyLCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgNjUsIDczLCA3OCwgMjEzLCA2NSwgNzMsIAorICAgIDc4LCA3OCwgMTI4LCA2NSwgNzMsIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgCisgICAgNzIsIDg2LCA4NSwgODMsIDEyOCwgNjUsIDcyLCA4MywgNjgsIDY1LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCAKKyAgICA3MiwgNjUsIDc4LCAxOTksIDY1LCA3MiwgNjUsIDcxLCA3MSwgNjUsIDIxMCwgNjUsIDcyLCA2NSwgNjgsIDEyOCwgNjUsIAorICAgIDcxLCA4NSwgNzgsIDcxLCAxMjgsIDY1LCA3MSwgNzksIDcxLCAyMDEsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA3MSwgNjUsIDczLCAKKyAgICA3OCwgMTI4LCA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgNzAsIDgzLCA2NSwgNjUsIDgxLCAxMjgsIDY1LCA3MCwgODIsIAorICAgIDczLCA2NywgNjUsIDIwNiwgNjUsIDcwLCA3OSwgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIDY4LCAKKyAgICAxMjgsIDY1LCA3MCwgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIDcwLCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgNjUsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA4OSwgMTI4LCA2NSwgNjksIDgzLCA2NywgCisgICAgODUsIDc2LCA2NSwgODAsIDczLCA4NSwgODMsIDEyOCwgNjUsIDY5LCA4MywgNjcsIDEyOCwgNjUsIDY5LCA4MywgMTI4LCAKKyAgICA2NSwgNjksIDgyLCA3MywgNjUsIDIwNCwgNjUsIDY5LCA4MiwgMTI4LCA2NSwgNjksIDc2LCA2NSwgNDUsIDgwLCA3MywgNzYsIAorICAgIDc2LCA2NSwgMTI4LCA2NSwgNjksIDc2LCAxMjgsIDY1LCA2OSwgNzUsIDEyOCwgNjUsIDY5LCA3MSwgNjksIDY1LCAyMDYsIAorICAgIDY1LCA2OSwgNzEsIDEyOCwgNjUsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgNjksIDEyOCwgCisgICAgNjUsIDY5LCA2OCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIDY5LCA2OCwgMTI4LCA2NSwgNjksIDY2LCAKKyAgICAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgODQsIDY1LCA3MSwgNjksIDEyOCwgNjUsIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIAorICAgIDEyOCwgNjUsIDY4LCA2OSwgNzEsIDEyOCwgNjUsIDY4LCA2OSwgMTk5LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCA4MywgCisgICAgNjksIDE5NiwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgMjExLCA2NSwgNjgsIDY4LCA2NSwgNzUsIDEyOCwgNjUsIDY4LCAKKyAgICA2NSwgMjAzLCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY1LCA2NywgODUsIAorICAgIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA2NSwgNjcsIDg1LCAKKyAgICA4NCwgMTk3LCA2NSwgNjcsIDg0LCA4NSwgNjUsIDc2LCA3NiwgMjE3LCA2NSwgNjcsIDg0LCA3MywgODYsIDY1LCA4NCwgCisgICAgMTk3LCA2NSwgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDczLCAxOTUsIDY1LCA2NywgNzUsIDc4LCA3OSwgODcsIDc2LCAKKyAgICA2OSwgNjgsIDcxLCA2OSwgMTI4LCA2NSwgNjcsIDY3LCA4NSwgNzcsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDY1LCA2NywgNjcsIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDY3LCA2NywgNjksIDgwLCA4NCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgCisgICAgNzgsIDg0LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIAorICAgIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCAyMTIsIDY1LCA2NywgNjUsIDY4LCA2OSwgNzcsIDIxNywgNjUsIDY2LCA4OSwgCisgICAgODMsIDc3LCA2NSwgMjA0LCA2NSwgNjYsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA2NiwgNzUsIDcyLCAKKyAgICA2NSwgODMsIDczLCA2NSwgMjA2LCA2NSwgNjYsIDY2LCA4MiwgNjksIDg2LCA3MywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIAorICAgIDY2LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY2LCAxNzgsIDY1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDY1LCA2NSwgODksIDEyOCwgNjUsIDY1LCA4NywgMTI4LCA2NSwgNjUsIDc5LCAxMjgsIDY1LCA2NSwgNzQsIDEyOCwgCisgICAgNjUsIDY1LCA2NiwgNjUsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNTAsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNTEsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTcsIDEyOCwgNjUsIAorICAgIDY1LCA0OCwgNTAsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTQsIDEyOCwgCisgICAgNjUsIDY1LCA0OCwgNTAsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTEsIAorICAgIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MywgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA0OSwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MCwgMTI4LCA2NSwgCisgICAgNjUsIDQ4LCA0OSwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNDksIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NywgMTI4LCAKKyAgICA2NSwgNjUsIDQ4LCA0OCwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIAorICAgIDY1LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNDgsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTEsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA0OSwgMTI4LCA2NSwgNDgsIDU1LCA0OCwgMTI4LCA2NSwgNDgsIAorICAgIDU0LCA1NywgMTI4LCA2NSwgNDgsIDU0LCA1NiwgMTI4LCA2NSwgNDgsIDU0LCA1NSwgMTI4LCA2NSwgNDgsIDU0LCA1NCwgCisgICAgMTI4LCA2NSwgNDgsIDU0LCA1MywgMTI4LCA2NSwgNDgsIDU0LCA1MiwgMTI4LCA2NSwgNDgsIDU0LCA1MSwgMTI4LCA2NSwgCisgICAgNDgsIDU0LCA1MCwgMTI4LCA2NSwgNDgsIDU0LCA0OSwgMTI4LCA2NSwgNDgsIDU0LCA0OCwgMTI4LCA2NSwgNDgsIDUzLCAKKyAgICA1NywgMTI4LCA2NSwgNDgsIDUzLCA1NiwgMTI4LCA2NSwgNDgsIDUzLCA1NSwgMTI4LCA2NSwgNDgsIDUzLCA1NCwgMTI4LCAKKyAgICA2NSwgNDgsIDUzLCA1MywgMTI4LCA2NSwgNDgsIDUzLCA1MiwgMTI4LCA2NSwgNDgsIDUzLCA1MSwgMTI4LCA2NSwgNDgsIAorICAgIDUzLCA1MCwgMTI4LCA2NSwgNDgsIDUzLCA0OSwgMTI4LCA2NSwgNDgsIDUzLCA0OCwgMTI4LCA2NSwgNDgsIDUyLCA1NywgCisgICAgMTI4LCA2NSwgNDgsIDUyLCA1NiwgMTI4LCA2NSwgNDgsIDUyLCA1NSwgMTI4LCA2NSwgNDgsIDUyLCA1NCwgMTI4LCA2NSwgCisgICAgNDgsIDUyLCA1MywgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTMsIDEyOCwgNjUsIDQ4LCA1MiwgNTIsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MiwgNTEsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAxMjgsIDY1LCA0OCwgNTIsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIAorICAgIDUyLCA1MCwgMTI4LCA2NSwgNDgsIDUyLCA0OSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgCisgICAgNDgsIDEyOCwgNjUsIDQ4LCA1MSwgNTcsIDEyOCwgNjUsIDQ4LCA1MSwgNTYsIDEyOCwgNjUsIDQ4LCA1MSwgNTUsIDEyOCwgCisgICAgNjUsIDQ4LCA1MSwgNTQsIDEyOCwgNjUsIDQ4LCA1MSwgNTMsIDEyOCwgNjUsIDQ4LCA1MSwgNTIsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MSwgNTEsIDEyOCwgNjUsIDQ4LCA1MSwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2NSwgNDgsIAorICAgIDQ5LCA1MiwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA2NSwgCisgICAgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNjUsIDQ1LCA2OSwgODUsIDEyOCwgNDUsIDg1LCAyMDUsIDQ1LCA4MCwgNzIsIDgyLCAKKyAgICA4NSwgMTI4LCA0NSwgNzUsIDcyLCA4OSwgODUsIDE5NiwgNDUsIDc1LCA3MiwgODksIDczLCA3NiwgMTI4LCA0NSwgNjgsIAorICAgIDkwLCA4NSwgMTk2LCA0NSwgNjcsIDcyLCA2NSwgMjEwLCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGxleGljb25fb2Zmc2V0W10gPSB7Ci0gICAgMCwgMCwgNiwgMTAsIDE4LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ0LCA1MCwgNjIsIDcwLCA4MCwgOTMsIDEwMiwgMTA4LCAKKyAgICAwLCAwLCA2LCAxMCwgMTgsIDIzLCAyNywgMzQsIDM5LCA0MSwgNDcsIDUwLCA2MiwgNzAsIDgwLCA5MywgMTAyLCAxMDgsIAogICAgIDExMywgMTIxLCAxMzAsIDEzNSwgMTQwLCAxNDMsIDE0NywgMTUzLCAxNTgsIDE2MywgMTcxLCAxNzgsIDE4NiwgMTkxLCAKICAgICAxOTQsIDIwMCwgMjA4LCAyMTUsIDIyNSwgMjMwLCAyMzcsIDI0NiwgMjQ5LCAyNTQsIDI1NywgMjYzLCAyNjcsIDI3MiwgCiAgICAgMjgxLCAyODgsIDI5NSwgMzAxLCAzMTAsIDMxNSwgMzIxLCAzMjcsIDMzNSwgMTQ0LCAzNDEsIDM0OSwgMzUwLCAzNTgsIAotICAgIDM2MSwgMzY3LCAzNjksIDM3NSwgMzgyLCAzODQsIDM5MSwgMzk1LCA0MDMsIDQxMCwgNDE1LCA0MTcsIDQyMiwgNDI5LCAKLSAgICA0MzEsIDI5OSwgNDM3LCA0MzksIDQ0NCwgNDQ5LCA0NTIsIDQ1NywgNDYzLCA0NzAsIDQ3OSwgNDg5LCA0OTQsIDQ5OCwgCisgICAgMzYxLCAzNjcsIDM2OSwgMzc1LCAzODIsIDM4NCwgMzkxLCAzOTUsIDQwMywgNDEwLCA0MTIsIDQxNywgNDIyLCA0MjcsIAorICAgIDQzNCwgNDM2LCAyOTksIDQ0MiwgNDQ1LCA0NDcsIDQ1MiwgNDU3LCA0NjMsIDQ3MCwgNDc5LCA0ODksIDQ5NCwgNDk4LCAKICAgICA1MDUsIDUxOCwgNTIyLCA1MzEsIDUzOCwgNTQ1LCA1NDgsIDU1NCwgNTU4LCA1NjIsIDU3MiwgNTgwLCA1ODgsIDU5NiwgCi0gICAgNjA1LCA2MTMsIDYxOCwgNjE5LCA2MjMsIDYzMSwgNjM4LCA2NDgsIDY1OSwgNjYzLCA2NjYsIDY3MCwgNjczLCAzNDgsIAotICAgIDY3OCwgNjg3LCA2OTEsIDY5NywgNzAzLCA3MDUsIDcwOCwgNzExLCA3MTQsIDcxOCwgNzIyLCA3MzEsIDczOSwgNzQ0LCAKKyAgICA2MDUsIDYxMywgNjE4LCA2MTksIDYyMywgNjMxLCA2MzgsIDY0OCwgNjUyLCA2NjMsIDY2NywgNjcwLCA2NzMsIDY3OCwgCisgICAgMzQ4LCA2ODIsIDY5MSwgNjk3LCA3MDMsIDcwNSwgNzA4LCA3MTEsIDcxNCwgNzE4LCA3MjIsIDczMSwgNzM5LCA3NDQsIAogICAgIDc0NywgNzUxLCA3NTcsIDc2NCwgNzcxLCA3NzYsIDc4NSwgNzk0LCA4MDEsIDgwNSwgODE4LCA4MjcsIDgzNSwgODQxLCAKICAgICA1NTcsIDg1MCwgODYwLCA4NjcsIDg3MywgODc5LCA4ODYsIDg5NCwgODk4LCA3NDksIDkwNiwgOTE1LCA1MDMsIDkyMywgCiAgICAgOTI4LCA5MzQsIDE3LCA5NDMsIDk0OCwgOTUxLCA5NTUsIDk1OSwgOTY2LCA5NjksIDk3NiwgOTgwLCA5ODgsIDk5MiwgCi0gICAgMTAwMCwgMTAwNCwgMTAwNywgMTAxNCwgMTAyMSwgMTkyLCAxMDI0LCAxMDI5LCAxMDM5LCAxMDQ4LCAxMDU1LCAxMDYxLCAKLSAgICAxMDY5LCAxMDcyLCAxMDc3LCAxMDgzLCAxMDkxLCAxMDk3LCAxMTAyLCAxMTA1LCAxMTA4LCAxMTEsIDExMTMsIDExMTcsIAotICAgIDExMjMsIDExMjksIDExMzIsIDExMzgsIDExNDIsIDExNDcsIDExNTMsIDExNTgsIDExNjgsIDExNzIsIDExNzUsIDExNzgsIAorICAgIDEwMDAsIDEwMDQsIDEwMDcsIDEwMTQsIDEwMjEsIDE5MiwgMTAyNCwgMTAyOSwgMTAzOSwgMTA0OCwgMTA1NSwgMTA2MCwgCisgICAgMTA2NiwgMTA3MiwgMTA4MCwgMTA4MywgMTA4OCwgMTA5NCwgMTEwMiwgMTEwNywgMTExMCwgMTExMywgMTExLCAxMTE4LCAKKyAgICAxMTIyLCAxMTI4LCAxMTM0LCAxMTM3LCAxMTQzLCAxMTQ3LCAxMTUyLCAxMTU4LCAxMTY4LCAxMTcyLCAxMTc1LCAxMTc4LCAKICAgICAxMTg3LCAxMTkxLCAxMTk0LCAxMTk5LCAxMjA0LCAxMjEwLCAxMjE1LCAxMjIwLCAxMjI1LCAxMjI5LCAxMjM0LCAxMjQwLCAKICAgICAxMjQ1LCAxMjUwLCAxMjU0LCAxMjYwLCAxMjY1LCAxMjcwLCAxMjc1LCAxMjc5LCAxMjg0LCAxMjg5LCAxMjk0LCAxMzAwLCAKICAgICAxMzA2LCAxMzEyLCAxMzE3LCAxMzIxLCAxMzI2LCAxMzMxLCAxMzM2LCAxMzQwLCAxMzQ1LCAxMzUwLCAxMzU1LCAxMzYwLCAKQEAgLTQ2NTAsNyArNDY1Myw3IEBACiAgICAgMTY2NSwgMTY3MCwgMTY3NSwgMTY3OSwgMTY4MiwgMTY4NywgMTY5MiwgMTY5NywgMTcwMiwgMTcwOCwgMTcxMywgMTcxNywgCiAgICAgMTMyMiwgMTcyMCwgMTcyNSwgMTczMCwgMTMyNywgMTczNCwgMTczOCwgMTc0NSwgMTMzMiwgMTc1MiwgMTMzNywgMTc1NiwgCiAgICAgMTc1OCwgMTc2MywgMTc2OSwgMTM0MSwgMTc3NCwgMTc4MywgMTM0NiwgMTc4OCwgMTc5NCwgMTM1MSwgMTc5OSwgMTgwNCwgCi0gICAgMTgwNywgMTgxMiwgMTgxNiwgMTgyMCwgMTgyNCwgMTgyNywgMTgzMSwgMTM1NiwgMTM2MSwgMTE1NiwgMTgzNiwgMTg0MiwgCisgICAgMTgwNywgMTgxMiwgMTgxNiwgMTgyMCwgMTgyNCwgMTgyNywgMTgzMSwgMTM1NiwgMTM2MSwgMTA1OCwgMTgzNiwgMTg0MiwgCiAgICAgMTg0OCwgMTg1NCwgMTg2MCwgMTg2NiwgMTg3MiwgMTg3OCwgMTg4NCwgMTg4OSwgMTg5NSwgMTkwMSwgMTkwNywgMTkxMywgCiAgICAgMTkxOSwgMTkyNSwgMTkzMSwgMTkzNywgMTk0MywgMTk0OCwgMTk1MywgMTk1OCwgMTk2MywgMTk2OCwgMTk3MywgMTk3OCwgCiAgICAgMTk4MywgMTk4OCwgMTk5MywgMTk5OSwgMjAwNCwgMjAxMCwgMjAxNSwgMjAyMSwgMjAyNywgMjAzMiwgMjAzOCwgMjA0NCwgCkBAIC00Njc3LDcgKzQ2ODAsNyBAQAogICAgIDMyNDEsIDMyNDUsIDMyNDgsIDMyNjEsIDMyNjUsIDMyNjksIDMyNzMsIDMyNzcsIDMyODEsIDMyODQsIDMyODgsIDMyOTIsIAogICAgIDMyOTcsIDMzMDEsIDMzMDYsIDMzMTEsIDMzMTYsIDMzMjAsIDMzMjMsIDMzMjYsIDMzMzIsIDMzMzYsIDMzNDAsIDMzNDMsIAogICAgIDMzNDcsIDMzNTEsIDMzNTQsIDMzNjAsIDMzNjUsIDMzNzAsIDMzNzYsIDMzODEsIDMzODYsIDMzOTIsIDMzOTgsIDM0MDMsIAotICAgIDM0MDgsIDM0MTMsIDExMTUsIDU0NywgMzQxOCwgMzQyMSwgMzQyNiwgMzQzMCwgMzQzMywgMzQzNywgMzQ0MiwgMzQ0NywgCisgICAgMzQwOCwgMzQxMywgMTEyMCwgNTQ3LCAzNDE4LCAzNDIxLCAzNDI2LCAzNDMwLCAzNDMzLCAzNDM3LCAzNDQyLCAzNDQ3LCAKICAgICAzNDUxLCAzNDU2LCAzNDYwLCAzNDY1LCAzNDY5LCAzNDczLCAzNDc5LCAzNDg1LCAzNDg4LCAzNDkxLCAzNDk3LCAzNTA0LCAKICAgICAzNTExLCAzNTE3LCAzNTI0LCAzNTI5LCAzNTMzLCAzNTQwLCAzNTQ3LCAzNTUyLCAzNTU2LCAzNTY2LCAzNTcwLCAzNTc0LCAKICAgICAzNTc5LCAzNTg0LCAzNTk0LCAyMTA3LCAzNTk5LCAzNjAzLCAzNjA2LCAzNjEyLCAzNjE3LCAzNjIzLCAzNjI5LCAzNjM0LCAKQEAgLTQ3MjYsNyArNDcyOSw3IEBACiAgICAgNjY4MywgNjY5OCwgNjcxMywgNjcyOCwgNjc0MywgNjc1OCwgNjc3MywgNjc4OCwgNjgwMywgNjgxOCwgNjgzMywgNjg0OCwgCiAgICAgNjg2MywgNjg3OCwgNjg5MywgNjkwOCwgNjkyMywgNjkzOCwgNjk1MywgNjk2OCwgNjk4MywgNjk5OCwgNzAxMywgNzAyOCwgCiAgICAgNzAzNywgNzA0NiwgNzA1MSwgNzA1NywgNzA2NywgNzA3MSwgNzA3NiwgNzA4MSwgNzA4OSwgNzA5MywgNzA5NiwgNzEwMCwgCi0gICAgMjk3NSwgNzEwMywgNzEwOCwgMjk4LCA0NDIsIDcxMTQsIDcxMjIsIDcxMjYsIDcxMzAsIDcxMzMsIDcxMzcsIDcxNDMsIAorICAgIDI5NzUsIDcxMDMsIDcxMDgsIDI5OCwgNDI1LCA3MTE0LCA3MTIyLCA3MTI2LCA3MTMwLCA3MTMzLCA3MTM3LCA3MTQzLCAKICAgICA3MTQ3LCA3MTU1LCA3MTYxLCA3MTY2LCA3MTczLCA3MTgwLCA3MTg2LCA3MTkxLCA3MTk4LCA3MjA0LCA3MjEyLCA3MjE2LCAKICAgICA3MjIxLCA3MjMzLCA3MjQ0LCA3MjUxLCA3MjU1LCA3MjU5LCA3MjY1LCAzMjMzLCA3MjY5LCA3Mjc1LCA3MjgwLCA3Mjg1LCAKICAgICA3MjkwLCA3Mjk2LCA3MzAxLCA3MzA2LCA3MzExLCA3MzE2LCA3MzIyLCA3MzI3LCA3MzMyLCA3MzM4LCA3MzQzLCA3MzQ5LCAKQEAgLTQ3NTUsNzI1MiArNDc1OCw3MjUwIEBACiAgICAgODY0NSwgODY0OSwgODY1MywgODY1OCwgODY2NSwgODY3NiwgODY4NCwgODY5NCwgODcwMCwgODcwNywgODcxMiwgODcxNiwgCiAgICAgODcyNywgODc0MCwgODc1MSwgODc2NCwgODc3NSwgODc4NywgODc5OSwgODgxMSwgODgyNCwgODgzNywgODg0NCwgODg1MCwgCiAgICAgODg2NCwgODg3MSwgODg3NywgODg4MSwgODg4NiwgODg5MCwgODg5NywgODkwNSwgODkwOSwgODkxNSwgODkxOSwgODkyNSwgCi0gICAgODkzNSwgODkzOSwgODk0NCwgODk0OSwgODk1NiwgODk2MiwgODk3MiwgNzkwOSwgODk3OCwgODk4MiwgODk4OSwgNzY4LCAKLSAgICA4OTkzLCA4OTk3LCA5MDAyLCA5MDA3LCA5MDEyLCA5MDE2LCA5MDIyLCA5MDMwLCA5MDM2LCA5MDQwLCA5MDQ2LCA5MDU2LCAKLSAgICA5MDYwLCA5MDY2LCA5MDcxLCA5MDc1LCA5MDgxLCA5MDg3LCAyMTYxLCA5MDkyLCA5MDk0LCA5MDk5LCA5MTA3LCA5MTE2LCAKLSAgICA5MTIwLCA5MTI2LCA5MTMxLCA5MTM2LCA5MTQxLCA5MTQ2LCA5MTUyLCA5MTU3LCA5MTYyLCA0MDA2LCA5MTY3LCA5MTcyLCAKLSAgICA5MTc2LCA5MTgyLCA5MTg3LCA5MTkzLCA5MTk4LCA5MjAzLCA5MjA5LCA5MjE0LCA5MTIxLCA5MjIwLCA5MjI0LCA5MjMxLCAKLSAgICA5MjM3LCA5MjQyLCA5MjQ2LCA2MTgzLCA5MjUxLCA5MjYwLCA5MjY1LCA5MjcwLCA4MjE4LCA4MjI1LCA5Mjc1LCAyODUzLCAKLSAgICA5Mjc5LCA5Mjg0LCA5Mjg5LCA5MTMyLCA5MjkzLCA5Mjk4LCA5MTM3LCA5MTQyLCA5MzAzLCA5MzEwLCA5MzE3LCA5MzIzLCAKLSAgICA5MzI5LCA5MzM1LCA5MzQwLCA5MzQ1LCA5MzUwLCA5MTQ3LCA5MTUzLCA5MzU2LCA5MzYyLCA5MzY3LCA5Mzc1LCA5MTU4LCAKLSAgICA5MzgwLCA5OTAsIDkzODMsIDkzOTEsIDkzOTcsIDk0MDMsIDk0MTIsIDk0MjAsIDk0MjUsIDk0MzEsIDk0MzksIDk0NDYsIAotICAgIDk0NjEsIDk0NzgsIDk0OTcsIDk1MDYsIDk1MTQsIDk1MjksIDk1NDAsIDk1NTAsIDk1NjAsIDk1NjgsIDk1NzQsIDk1ODYsIAotICAgIDk1OTUsIDk2MDMsIDk2MTAsIDk2MTcsIDk2MjMsIDk2MjgsIDk2MzYsIDk2NDYsIDk2NTMsIDk2NjMsIDk2NzMsIDk2ODMsIAotICAgIDk2OTEsIDk2OTgsIDk3MDcsIDk3MTcsIDk3MzEsIDk3NDYsIDk3NTUsIDk3NjMsIDk3NjgsIDk3NzIsIDk3ODEsIDk3ODcsIAotICAgIDk3OTIsIDk4MDIsIDk4MTIsIDk4MjIsIDk4MjcsIDk4MzEsIDk4NDAsIDk4NDUsIDk4NTUsIDk4NjYsIDk4NzksIDk4ODcsIAotICAgIDk5MDAsIDk5MTIsIDk5MjAsIDk5MjUsIDk5MjksIDk5MzUsIDk5NDAsIDk5NDgsIDk5NTYsIDk5NjMsIDk5NjgsIDk5NzYsIAotICAgIDk5ODIsIDk5ODUsIDk5ODksIDk5OTUsIDEwMDAzLCAxMDAwOCwgMTAwMTIsIDEwMDIwLCAxMDAyOSwgMTAwMzcsIDEwMDQzLCAKLSAgICAxMDA0NywgMTAwNTQsIDEwMDY1LCAxMDA2OSwgMTAwNzIsIDEwMDc4LCA5MTYzLCAxMDA4MywgMTAwODksIDEwMDk2LCAKLSAgICAxMDEwMiwgMTAxMDcsIDEwMTE0LCAxMDEyMSwgMTAxMjgsIDEwMTM1LCAxMDE0MiwgMTAxNDksIDEwMTU2LCAxMDE2MywgCi0gICAgMTAxNjgsIDk0NzQsIDEwMTczLCAxMDE3OSwgMTAxODYsIDEwMTkzLCAxMDE5OCwgMTAyMDUsIDEwMjE0LCAxMDIxOCwgCi0gICAgMTAyMzAsIDgyNTYsIDEwMjM0LCAxMDIzNywgMTAyNDEsIDEwMjQ1LCAxMDI0OSwgMTAyNTMsIDEwMjU5LCAxMDI2NSwgCi0gICAgMTAyNzAsIDEwMjc2LCAxMDI4MSwgMTAyODYsIDEwMjkyLCAxMDI5NywgMTAzMDIsIDg5NTIsIDEwMzA3LCAxMDMxMSwgCi0gICAgMTAzMTUsIDEwMzE5LCAxMDMyNCwgMTAzMjksIDEwMzM3LCAxMDM0MywgMTAzNDcsIDEwMzUxLCAxMDM1OCwgMTAzNjMsIAotICAgIDEwMzcxLCAxMDM3NiwgMTAzODAsIDEwMzgzLCAxMDM4OSwgMTAzOTYsIDEwNDAwLCAxMDQwMywgMTA0MDgsIDEwNDEyLCAKLSAgICA0MDQ1LCAxMDQxOCwgMTA0MjcsIDM2LCAxMDQzNSwgMTA0NDEsIDEwNDQ2LCA4OTY3LCAxMDQ1MSwgMTA0NTYsIDEwNDYwLCAKLSAgICAxMDQ2MywgMTA0NzgsIDEwNDk3LCAxMDUwOSwgMTA1MjIsIDEwNTM1LCAxMDU0OCwgMTA1NjIsIDEwNTc1LCAxMDU5MCwgCi0gICAgMTA1OTcsIDkxNjgsIDEwNjAzLCAxMDYxNywgMTA2MjIsIDEwNjI4LCAxMDYzMywgMTA2NDEsIDEwNjQ2LCA4MDQwLCAKLSAgICAxMDY1MSwgMTA2NTQsIDEwNjYxLCAxMDY2NiwgMTA2NzAsIDI4NTgsIDk5OCwgMTA2NzYsIDEwNjgwLCAxMDY4NiwgMTA2OTIsIAotICAgIDEwNjk3LCAxMDcwMywgMTA3MDgsIDkxNzcsIDEwNzE0LCAxMDcyMCwgMTA3MjUsIDEwNzMwLCAxMDczOCwgMTA3NDQsIAotICAgIDEwNzU3LCAxMDc2NSwgMTA3NzIsIDkxODMsIDEwNzc4LCAxMDc4NiwgMTA3OTQsIDEwODAxLCAxMDgxNCwgMTA4MjYsIAotICAgIDEwODM2LCAxMDg0NCwgMTA4NTEsIDEwODU4LCAxMDg2NywgMTA4NzYsIDEwODg0LCAxMDg5MSwgMTA4OTYsIDEwOTAyLCAKLSAgICA5MTg4LCAxMDkwNywgMTA5MTMsIDkxOTQsIDEwOTE4LCAxMDkyMSwgMTA5MjgsIDEwOTM0LCAxMDk0NywgODY2OSwgMTA5NTgsIAotICAgIDEwOTY0LCAxMDk3MywgMTA5ODEsIDEwOTg4LCAxMDk5NCwgMTEwMDAsIDExMDA1LCAxMTAwOSwgMTEwMTQsIDEwNDcwLCAKLSAgICAxMTAyMCwgOTE5OSwgMTEwMjcsIDExMDMyLCAxMTAzOSwgMTEwNDUsIDExMDUxLCAxMTA1NiwgMTEwNjQsIDExMDcyLCAKLSAgICAxMTA3OSwgMTEwODMsIDExMDk3LCAxMTEwNywgMTExMTIsIDExMTE2LCAxMTEyNywgMTExMzMsIDExMTM4LCAxMTE0MywgCi0gICAgOTIwNCwgOTIxMCwgMTExNDcsIDExMTUwLCAxMTE1NSwgMTExNjcsIDExMTc0LCAxMTE3OSwgMTExODMsIDExMTg4LCAKLSAgICAxMTE5MiwgMTExOTksIDExMjA1LCA5MjE1LCA5MTIyLCAxMTIxMiwgMjg2MywgOCwgMTEyMTksIDExMjI0LCAxMTIyOCwgCi0gICAgMTEyMzQsIDExMjQyLCAxMTI1MiwgMTEyNTcsIDExMjYyLCAxMTI2OSwgMTEyNzYsIDExMjgwLCAxMTI5MSwgMTEzMDEsIAotICAgIDExMzEwLCAxMTMyMiwgMTEzMjcsIDExMzMxLCAxMTMzOSwgMTEzNTMsIDExMzU3LCAxMTM2MCwgMTEzNjgsIDExMzc1LCAKLSAgICAxMTM4MywgMTEzODcsIDExMzk4LCAxMTQwMiwgMTE0MDksIDExNDE0LCAxMTQxOCwgMTE0MjQsIDExNDI5LCAxMTQzMywgCi0gICAgMTE0MzksIDExNDQ0LCAxMTQ1NSwgMTE0NTksIDExNDYyLCAxMTQ2OCwgMTE0NzMsIDExNDc5LCAxMTQ4NSwgMTE0OTIsIAotICAgIDExNTAzLCAxMTUxMywgMTE1MjMsIDExNTMyLCAxMTUzOSwgMTE1NDgsIDkyMjUsIDkyMzIsIDkyMzgsIDkyNDMsIDExNTU0LCAKLSAgICAxMTU2MCwgOTI0NywgMTE1NjYsIDExNTY5LCAxMTU3NiwgMTE1ODEsIDExNTk2LCAxMTYxMiwgMTE2MjcsIDExNjM1LCAKLSAgICAxMTY0MSwgMTE2NDYsIDgzOCwgNDIwLCAxMTY1MSwgMTE2NTksIDExNjY2LCAxMTY3MiwgMTE2NzcsIDExNjgyLCA5MjUyLCAKLSAgICAxMTY4NCwgMTE2ODgsIDExNjkzLCAxMTY5NywgMTE3MDcsIDExNzEyLCAxMTcxNiwgMTE3MjUsIDExNzI5LCAxMTczMiwgCi0gICAgOTI2MSwgMTE3MzksIDExNzQyLCAxMTc1MCwgMTE3NTcsIDExNzY1LCAxMTc2OSwgMTE3NzYsIDExNzg1LCAxMTc4OCwgCi0gICAgMTE3OTIsIDExNzk2LCAxMTgwMiwgMTE4MDYsIDExODEwLCAxMTgxNCwgMTE4MjAsIDExODMwLCAxMTgzNCwgMTE4NDIsIAotICAgIDExODQ2LCAxMTg1MywgMTE4NTcsIDExODYyLCAxMTg2NiwgMTE4NzMsIDExODc5LCAxMTg4NywgMTE4OTMsIDExODk4LCAKLSAgICAxMTkwOCwgMTE5MTMsIDExOTE4LCAxMTkyMiwgMTE5MzAsIDM5MDUsIDExOTM4LCAxMTk0MywgOTI2NiwgMTE5NDcsIAotICAgIDExOTUxLCAxMTk1NCwgMTE5NjIsIDExOTY5LCAxMTk3MywgNTk5MSwgMTE5NzcsIDExOTgyLCAxMTk4NiwgMTE5OTcsIAotICAgIDEyMDA3LCAxMjAxMiwgMTIwMTgsIDEyMDIyLCAxMjAyNSwgMTIwMzMsIDEyMDM4LCAxMjA0MywgMTIwNTAsIDEyMDU1LCAKLSAgICA5MjcxLCAxMjA2MCwgMTIwNjQsIDEyMDcxLCAxNzIyLCA2MTQ1LCAxMjA3NiwgMTIwODEsIDEyMDg2LCAxMjA5MSwgMTIwOTcsIAotICAgIDEyMTAyLCAxMjEwOCwgMTIxMTMsIDEyMTE4LCAxMjEyMywgMTIxMjgsIDEyMTMzLCAxMjEzOCwgMTIxNDMsIDEyMTQ4LCAKLSAgICAxMjE1MywgMTIxNTgsIDEyMTYzLCAxMjE2OCwgMTIxNzMsIDEyMTc4LCAxMjE4MywgMTIxODgsIDEyMTk0LCAxMjE5OSwgCi0gICAgMTIyMDQsIDEyMjA5LCAxMjIxNCwgMTIyMTksIDEyMjI1LCAxMjIzMCwgMTIyMzUsIDEyMjQxLCAxMjI0NiwgMTIyNTIsIAotICAgIDEyMjU3LCAxMjI2MywgMTIyNjgsIDEyMjczLCAxMjI3OCwgMTIyODMsIDEyMjg5LCAxMjI5NCwgMTIyOTksIDEyMzA0LCAKLSAgICA3MzcsIDEzOSwgMTIzMTIsIDEyMzE2LCAxMjMyMSwgMTIzMjYsIDEyMzMwLCAxMjMzNCwgMTIzMzgsIDEyMzQzLCAxMjM0NywgCi0gICAgMTIzNTIsIDEyMzU2LCAxMjM1OSwgMTIzNjMsIDEyMzY3LCAxMjM3MywgMTIzNzgsIDEyMzg4LCAxMjM5NCwgMTI0MDIsIAotICAgIDEyNDA2LCAxMjQxMCwgMTI0MTcsIDEyNDI1LCAxMjQzNCwgMTI0NDUsIDEyNDUyLCAxMjQ1OSwgMTI0NjMsIDEyNDcyLCAKLSAgICAxMjQ4MSwgMTI0ODksIDEyNDk4LCAxMjUwNywgMTI1MTYsIDEyNTI1LCAxMjUzNSwgMTI1NDUsIDEyNTU1LCAxMjU2NSwgCi0gICAgMTI1NzUsIDEyNTg0LCAxMjU5NCwgMTI2MDQsIDEyNjE0LCAxMjYyNCwgMTI2MzQsIDEyNjQ0LCAxMjY1NCwgMTI2NjMsIAotICAgIDEyNjczLCAxMjY4MywgMTI2OTMsIDEyNzAzLCAxMjcxMywgMTI3MjMsIDEyNzMyLCAxMjc0MiwgMTI3NTIsIDEyNzYyLCAKLSAgICAxMjc3MiwgMTI3ODIsIDEyNzkyLCAxMjgwMiwgMTI4MTIsIDEyODIyLCAxMjgzMSwgMTI4NDEsIDEyODUxLCAxMjg2MSwgCi0gICAgMTI4NzEsIDEyODgxLCAxMjg5MSwgMTI5MDEsIDEyOTExLCAxMjkyMSwgMTI5MzEsIDEyOTQwLCAxMjU2LCAxMjk0NiwgCi0gICAgMTI5NDksIDEyOTUzLCAxMjk1OCwgMTI5NjUsIDEyOTcxLCAxMjk3NiwgMTI5ODAsIDEyOTg1LCAxMjk5NCwgMTMwMDIsIAotICAgIDEzMDA3LCAxMzAxMSwgMTMwMTUsIDEzMDIxLCAxMzAyNiwgMTMwMzIsIDkyODAsIDEzMDM3LCAxMzA0MiwgMTMwNTEsIAotICAgIDkyODUsIDEzMDU2LCAxMzA1OSwgMTMwNjUsIDEzMDczLCA5MjkwLCAxMzA4MCwgMTMwODQsIDEzMDg4LCAxMzA5MiwgCi0gICAgMTMxMDIsIDEzMTA4LCAxMzExNCwgMTMxMTksIDEzMTI4LCAxMzEzNiwgMTMxNDMsIDEzMTUwLCAxMzE1NSwgMTMxNjIsIAotICAgIDEzMTY3LCAxMzE3MSwgMTMxNzQsIDEzMTg1LCAxMzE5NSwgMTMyMDQsIDEzMjEyLCAxMzIyMywgMTMyMzUsIDEzMjQ1LCAKLSAgICAxMzI1MCwgMTMyNTQsIDEzMjU5LCAxMzI2NCwgMTMyNjgsIDEzMjc0LCAxMzI4MiwgMTMyODksIDEzMzAwLCAxMzMwNSwgCi0gICAgMTMzMTUsIDEzMzE5LCAxMzMyMiwgMTMzMjksIDEzMzM5LCAxMzM0OCwgMTMzNTUsIDEzMzU5LCAxMzM2NiwgMTMzNzIsIAotICAgIDEzMzc3LCAxMzM4MiwgMTMzODYsIDEzMzk1LCAxMzQwMCwgMTM0MDYsIDEzNDEwLCAxMzQxNSwgMTM0MTksIDEzNDI4LCAKLSAgICAxMzQzNiwgMTM0NDQsIDEzNDUxLCAxMzQ1OSwgMTM0NzEsIDEzNDgyLCAxMzQ5MiwgMTM0OTksIDEzNTA1LCAxMzUxNCwgCi0gICAgMTM1MjUsIDEzNTM0LCAxMzU0NiwgMTM1NTgsIDEzNTcwLCAxMzU4MCwgMTM1ODksIDEzNTk4LCAxMzYwNiwgMTM2MTMsIAotICAgIDEzNjIyLCAxMzYzMCwgMTM2MzQsIDEzNjQwLCAxMzY0NiwgMTM2NTEsIDc3NTMsIDEzNjU1LCAxMzY1NywgMTM2NjEsIAotICAgIDEzNjY2LCAxMzY3MiwgMTM2ODEsIDEzNjg1LCAxMzY5MywgMTM3MDAsIDEzNzA5LCAxMzcxOCwgMTM3MjcsIDEzNzM2LCAKLSAgICAxMzc0NSwgMTM3NTQsIDEzNzYzLCAxMzc3MiwgMTM3ODIsIDEzNzkyLCAxMzgwMSwgMTM4MDcsIDEzODE0LCAxMzgyMSwgCi0gICAgMTM4MjcsIDEzODQxLCAxMzg0OCwgMTM4NTYsIDEzODY1LCAxMzg3MSwgMTM4ODAsIDEzODg5LCAxMzkwMCwgMTM5MTAsIAotICAgIDEzOTE4LCAxMzkyNSwgMTM5MzMsIDEzOTQyLCAxMzk1NSwgMTM5NjMsIDEzOTcwLCAxMzk4MywgMTM5ODksIDEzOTk1LCAKLSAgICAxNDAwNSwgMTQwMTQsIDE0MDIzLCAxNDAyOCwgMTQwMzIsIDE0MDM4LCAxNDA0NCwgMTQwNTEsIDg5NjYsIDE0MDU2LCAKLSAgICAxNDA2MSwgMTQwNjgsIDE0MDczLCAxMjM2OSwgMTQwNzgsIDE0MDg2LCAxNDA5MiwgMTQwOTcsIDE0MTA1LCAxNDExMywgCi0gICAgMTQxMjAsIDE0MTI4LCAxNDEzNCwgMTQxNDIsIDE0MTUwLCAxNDE1NiwgMTQxNjEsIDE0MTY3LCAxNDE3NCwgMTQxODAsIAotICAgIDE0MTg1LCAxNDE4OSwgMTQyMDAsIDE0MjA4LCAxNDIxNCwgMTQyMTksIDE0MjI4LCAxNDIzNCwgMTQyMzksIDE0MjQ4LCAKLSAgICAxNDI2MiwgMzg1MywgMTQyNjYsIDE0MjcxLCAxNDI3NiwgMTQyODIsIDE0Mjg3LCAxNDI5MiwgMTQyOTYsIDE0MzAxLCAKLSAgICAxNDMwNiwgMTQzMTEsIDc3NTIsIDE0MzE2LCAxNDMyMSwgMTQzMjYsIDE0MzMxLCAxNDMzNiwgMTQzNDAsIDE0MzQ1LCAKLSAgICAxNDM1MCwgMTQzNTUsIDE0MzYwLCAxNDM2NiwgMTQzNzIsIDE0Mzc3LCAxNDM4MSwgMTQzODYsIDE0MzkxLCAxNDM5NiwgCi0gICAgOTI5NCwgMTQ0MDEsIDE0NDA2LCAxNDQxMSwgMTQ0MTYsIDE0NDIxLCAxNDQzOCwgMTQ0NTYsIDE0NDY4LCAxNDQ4MSwgCi0gICAgMTQ0OTgsIDE0NTE0LCAxNDUzMSwgMTQ1NDEsIDE0NTYwLCAxNDU3MSwgMTQ1ODIsIDE0NTkzLCAxNDYwNCwgMTQ2MTYsIAotICAgIDE0NjI3LCAxNDYzOCwgMTQ2NTUsIDE0NjY2LCAxNDY3NywgMTQ2ODIsIDkyOTksIDE0Njg3LCAxNDY5MSwgMjM4MSwgCi0gICAgMTQ2OTUsIDE0Njk4LCAxNDcwNCwgMTQ3MTIsIDE0NzIwLCAxNDcyNSwgMTQ3MzMsIDE0NzQxLCAxNDc0OCwgMTQ3NTMsIAotICAgIDE0NzU5LCAxNDc2NiwgMTQ3NzQsIDE0NzgxLCAxNDc5MywgMTQ4MDEsIDE0ODA2LCAxMTU5MCwgMTQ4MTIsIDE0ODIxLCAKLSAgICAxNDgzMCwgMTQ4MzgsIDE0ODQ1LCAxNDg1MSwgMTQ4NTksIDE0ODY2LCAxNDg3MiwgMTQ4NzksIDE0ODg1LCAxNDg5NCwgCi0gICAgMTQ5MDIsIDE0OTEyLCAxNDkxOSwgMTQ5MjUsIDE0OTMzLCAxNDkzOSwgMTQ5NDcsIDE0OTU0LCAxNDk2NywgMTQ5NzQsIAotICAgIDE0OTgzLCAxNDk5MiwgMTUwMDEsIDE1MDA5LCAxNTAxOSwgMTUwMjYsIDE1MDMxLCAzNTYwLCAxNTAzOCwgMTUwNDMsIAotICAgIDEzNzIsIDE1MDQ3LCAxNDMxNywgMTUwNTEsIDE1MDU3LCAxNTA2MSwgMTUwNjksIDE1MDgxLCAxNTA4NiwgMTUwOTMsIAotICAgIDE1MDk5LCAxNTEwNCwgMTUxMTEsIDE0MzIyLCAxNTExNSwgMTUxMTksIDE1MTIzLCAxNDMyNywgMTUxMjcsIDE0MzMyLCAKLSAgICAxNTEzMSwgMTUxMzgsIDE1MTQzLCAxNTE0NywgMTUxNTQsIDE1MTU4LCAxNTE2NiwgMTUxNzMsIDE1MTc3LCAxNTE4NCwgCi0gICAgMTUyMDEsIDE1MjEwLCAxNTIxNCwgMTUyMTcsIDE1MjI1LCAxNTIzMSwgMTUyMzYsIDM2MzgsIDE1MjQwLCAxNTI0MiwgCi0gICAgMTUyNTAsIDE1MjU3LCAxNTI2NywgMTUyNzksIDE1Mjg0LCAxNTI5MCwgMTUyOTUsIDE1Mjk5LCAxNTMwNSwgMTUzMTAsIAotICAgIDE1MzE2LCAxNTMxOSwgMTUzMjYsIDE1MzM0LCAxNTM0MSwgMTUzNDcsIDE1MzUzLCAxNTM1OCwgMTUzNjUsIDE1MzcxLCAKLSAgICAxNTM3NiwgMTUzODMsIDE1Mzg3LCAxNTM5MywgMTUzOTcsIDE1NDA0LCAxNTQxMCwgMTU0MTYsIDE1NDI0LCAxNTQzMCwgCi0gICAgMTU0MzUsIDE1NDQxLCAxNTQ0OSwgMTU0NTcsIDE1NDYzLCAxNTQ2OSwgMTU0NzQsIDE1NDgxLCAxNTQ4NiwgMTU0OTAsIAotICAgIDE1NDk2LCAxNTUwMSwgMTU1MDgsIDE1NTEzLCAxNTUxOSwgMTU1MjIsIDE1NTI4LCAxNTUzNCwgMTU1MzcsIDE1NTQxLCAKLSAgICAxNTU1MywgMTU1NTksIDE1NTY0LCAxNTU3MSwgMTU1NzcsIDE1NTgzLCAxNTU5NCwgMTU2MDQsIDE1NjEzLCAxNTYyMSwgCi0gICAgMTU2MjgsIDE1NjM5LCAxNTY0OSwgMTU2NTksIDE1NjY3LCAxNTY3MCwgMTQzNDYsIDE1Njc1LCAxNTY4MCwgMTQzNTEsIAotICAgIDE0NDg2LCAxNTY4OCwgMTU3MDEsIDE1NzE2LCAxNTcyNywgMTQ1MDMsIDE1NzQ1LCAxNTc1OCwgMTU3NzEsIDE1NzgyLCAKLSAgICAxMDQ4NSwgMTU3OTMsIDE1ODA2LCAxNTgyNSwgMTU4MzYsIDE1ODQ3LCAxNTg1OCwgMjY0OSwgMTU4NzEsIDE1ODc1LCAKLSAgICAxNTg4MywgMTU4OTgsIDE1OTEzLCAxNTkyNCwgMTU5MzEsIDE1OTM3LCAxNTk0NSwgMTU5NDksIDE1OTU1LCAxNTk1OCwgCi0gICAgMTU5NjgsIDE1OTc2LCAxNTk4MywgMTU5OTEsIDE2MDAxLCAxNjAwNiwgMTYwMTMsIDE2MDE4LCAxNjAyNSwgMTYwMzYsIAotICAgIDE2MDQ2LCAxNjA1MiwgMTYwNTcsIDE2MDYyLCAxNDM1NiwgMTYwNjYsIDE2MDcyLCAxNjA3OCwgMTYwODMsIDE2MDg4LCAKLSAgICAxNjA5MywgMTYwOTcsIDE0MzYxLCAxNDM2NywgMTYxMDEsIDE0MzczLCAxNjEwNiwgMTYxMTQsIDE2MTIzLCAxNjEzMCwgCi0gICAgOTE0MywgMTYxMzQsIDE2MTM2LCAxNjE0MSwgMTYxNDYsIDE2MTUyLCAxNjE1NywgMTYxNjIsIDE2MTY3LCAxNjE3MiwgCi0gICAgMTYxNzYsIDE2MTgyLCAxNjE4OCwgMTYxOTMsIDE2MTk5LCAxNjIwNCwgMTYyMDksIDE2MjE1LCAxNjIyMCwgMTYyMjUsIAotICAgIDE2MjMwLCAxNjIzNSwgMTYyNDEsIDE2MjQ2LCAxNjI1MSwgMTYyNTcsIDE2MjYzLCAxNjI2OCwgMTYyNzMsIDE2MjgwLCAKLSAgICAxNjI4NiwgMTYyOTcsIDE2MzA0LCAxNjMwOSwgMTYzMTMsIDE2MzE3LCAxNjMyMCwgMTYzMjgsIDE2MzMzLCAxNjM0MCwgCi0gICAgMTYzNDcsIDE2MzUzLCAxNjM1OCwgMTYzNjMsIDE2MzcwLCAxNjM4MCwgMTYzODUsIDE2MzkyLCAxNjM5OCwgMTY0MDgsIAotICAgIDE2NDE4LCAxNjQzMiwgMTY0NDYsIDE2NDYwLCAxNjQ3NCwgMTY0ODksIDE2NTA0LCAxNjUyMSwgMTY1MzksIDE2NTUyLCAKLSAgICAxNjU1OCwgMTY1NjMsIDE2NTY4LCAxNjU3MiwgMTY1NzcsIDE2NTg1LCAxNjU5MSwgMTY1OTYsIDE2NjAxLCAxNjYwNSwgCi0gICAgMTY2MTAsIDE2NjE0LCAxNjYxOSwgMTY2MjMsIDE2NjM0LCAxNjY0MCwgMTY2NDUsIDE2NjUwLCAxNjY1NywgMTY2NjIsIAotICAgIDE2NjY2LCAxNjY3MSwgMTY2NzYsIDE2NjgyLCAxNjY4OSwgMTY2OTUsIDE2NzAwLCAxNjcwNCwgMTY3MTAsIDE2NzE1LCAKLSAgICAxNjcyMCwgMTY3MjQsIDE2NzMwLCAxNjczNSwgMTY3NDAsIDE2NzQ3LCAxNjc1MiwgMTMxMDQsIDE2NzU2LCAxNjc2MSwgCi0gICAgMTY3NjUsIDE2NzcwLCAxNjc3NiwgMTY3ODIsIDE2Nzg5LCAxNjc5OSwgMTY4MDcsIDE2ODE0LCAxNjgxOSwgMTY4MjMsIAotICAgIDE2ODMyLCAxNjg0MCwgMTY4NDcsIDE2ODU0LCAxNjg2MCwgMTY4NjYsIDE2ODcxLCAxNjg3NiwgMTY4ODIsIDE2ODg3LCAKLSAgICAxNjg5MywgMTY4OTgsIDE2OTA0LCAxNjkxMCwgMTY5MTcsIDE2OTIzLCAxNjkyOCwgMTY5MzMsIDkzNDEsIDE2OTQyLCAKLSAgICAxNjk0NSwgMTY5NTEsIDE2OTU2LCAxNjk2MSwgMTY5NzEsIDE2OTc4LCAxNjk4NCwgMTY5ODksIDE2OTk0LCAxNzAwMCwgCi0gICAgMTcwMDUsIDE3MDExLCAxNzAxNiwgMTcwMjIsIDE3MDI4LCAxNzAzMywgMTcwNDEsIDE3MDQ4LCAxNzA1MywgMTcwNTgsIAotICAgIDE3MDY0LCAxNzA2OSwgMTcwNzMsIDE3MDgyLCAxNzA5MywgMTcxMDAsIDE3MTA1LCAxNzExMywgMTcxMTksIDE3MTI2LCAKLSAgICAxNzEzMiwgMTcxMzcsIDE3MTQxLCAxNzE0NywgMTcxNTIsIDE3MTU3LCAxNzE2MiwgMTQ0MCwgNzc3NywgMjg3NywgMTcxNjYsIAotICAgIDE3MTcwLCAxNzE3NCwgMTcxNzgsIDE3MTgyLCAxNzE4NiwgMTcxODksIDE3MTk2LCAxNzIwNCwgMTQzODcsIDE3MjExLCAKLSAgICAxNzIyMSwgMTcyMjksIDE3MjM2LCAxNzI0NCwgMTcyNTQsIDE3MjYzLCAxNzI3NiwgMTcyODEsIDE3Mjg2LCAxNzI5NCwgCi0gICAgMTczMDEsIDEzMjAwLCAxMzIwOSwgMTczMDgsIDE3MzE4LCAxNzMzMywgMTczMzksIDE3MzQ2LCAxNzM1MywgMTczNTksIAotICAgIDE3MzY3LCAxNzM3NywgMTczODcsIDE0MzkyLCAxNzM5NiwgMTc0MDIsIDE3NDA4LCAxNzQxNiwgMTc0MjQsIDE3NDI5LCAKLSAgICAxNzQzOCwgMTc0NDYsIDE3NDU4LCAxNzQ2OCwgMTc0NzgsIDE3NDg4LCAxNzQ5NywgMTc1MDksIDE3NTE5LCAxNzUyOSwgCi0gICAgMTc1NDAsIDE3NTQ1LCAxNzU1NywgMTc1NjksIDE3NTgxLCAxNzU5MywgMTc2MDUsIDE3NjE3LCAxNzYyOSwgMTc2NDEsIAotICAgIDE3NjUzLCAxNzY2NSwgMTc2NzYsIDE3Njg4LCAxNzcwMCwgMTc3MTIsIDE3NzI0LCAxNzczNiwgMTc3NDgsIDE3NzYwLCAKLSAgICAxNzc3MiwgMTc3ODQsIDE3Nzk2LCAxNzgwNywgMTc4MTksIDE3ODMxLCAxNzg0MywgMTc4NTUsIDE3ODY3LCAxNzg3OSwgCi0gICAgMTc4OTEsIDE3OTAzLCAxNzkxNSwgMTc5MjcsIDE3OTM4LCAxNzk1MCwgMTc5NjIsIDE3OTc0LCAxNzk4NiwgMTc5OTgsIAotICAgIDE4MDEwLCAxODAyMiwgMTgwMzQsIDE4MDQ2LCAxODA1OCwgMTgwNjksIDE4MDgxLCAxODA5MywgMTgxMDUsIDE4MTE3LCAKLSAgICAxODEyOSwgMTgxNDEsIDE4MTUzLCAxODE2NSwgMTgxNzcsIDE4MTg5LCAxODIwMCwgMTgyMTIsIDE4MjI0LCAxODIzNiwgCi0gICAgMTgyNDgsIDE4MjYwLCAxODI3MiwgMTgyODQsIDE4Mjk2LCAxODMwOCwgMTgzMjAsIDE4MzMxLCAxODM0MywgMTgzNTUsIAotICAgIDE4MzY3LCAxODM3OSwgMTgzOTEsIDE4NDAzLCAxODQxNSwgMTg0MjcsIDE4NDM5LCAxODQ1MSwgMTg0NjIsIDE4NDc0LCAKLSAgICAxODQ4NiwgMTg0OTgsIDE4NTEwLCAxODUyMywgMTg1MzYsIDE4NTQ5LCAxODU2MiwgMTg1NzUsIDE4NTg4LCAxODYwMSwgCi0gICAgMTg2MTMsIDE4NjI2LCAxODYzOSwgMTg2NTIsIDE4NjY1LCAxODY3OCwgMTg2OTEsIDE4NzA0LCAxODcxNywgMTg3MzAsIAotICAgIDE4NzQzLCAxODc1NSwgMTg3NjgsIDE4NzgxLCAxODc5NCwgMTg4MDcsIDE4ODIwLCAxODgzMywgMTg4NDYsIDE4ODU5LCAKLSAgICAxODg3MiwgMTg4ODUsIDE4ODk3LCAxODkxMCwgMTg5MjMsIDE4OTM2LCAxODk0OSwgMTg5NjIsIDE4OTc1LCAxODk4OCwgCi0gICAgMTkwMDEsIDE5MDE0LCAxOTAyNywgMTkwMzksIDE5MDUyLCAxOTA2NSwgMTkwNzgsIDE5MDkxLCAxOTEwNCwgMTkxMTcsIAotICAgIDE5MTMwLCAxOTE0MywgMTkxNTYsIDE5MTY5LCAxOTE4MSwgMTkxOTQsIDE5MjA3LCAxOTIyMCwgMTkyMzMsIDE5MjQ2LCAKLSAgICAxOTI1OSwgMTkyNzIsIDE5Mjg1LCAxOTI5OCwgMTkzMTEsIDE5MzIzLCAxOTMzNCwgMTkzNDcsIDE5MzYwLCAxOTM3MywgCi0gICAgMTkzODYsIDE5Mzk5LCAxOTQxMiwgMTk0MjUsIDE5NDM4LCAxOTQ1MSwgMTk0NjQsIDE5NDc2LCAxOTQ4OSwgMTk1MDIsIAotICAgIDE5NTE1LCAxOTUyOCwgMTk1NDEsIDE5NTU0LCAxOTU2NywgMTk1ODAsIDE5NTkzLCAxOTYwNiwgMTk2MTgsIDE5NjMxLCAKLSAgICAxOTY0NCwgMTk2NTcsIDE5NjcwLCAxOTY4MywgMTk2OTYsIDE5NzA5LCAxOTcyMiwgMTk3MzUsIDE5NzQ4LCAxOTc2MCwgCi0gICAgMTk3NzMsIDE5Nzg2LCAxOTc5OSwgMTk4MTIsIDE5ODI1LCAxOTgzOCwgMTk4NTEsIDE5ODY0LCAxOTg3NywgMTk4OTAsIAotICAgIDE5OTAyLCAxOTkxNSwgMTk5MjgsIDE5OTQxLCAxOTk1NCwgMTk5NjcsIDE5OTgwLCAxOTk5MywgMjAwMDYsIDIwMDE5LCAKLSAgICAyMDAzMiwgMjAwNDQsIDIwMDU3LCAyMDA3MCwgMjAwODMsIDIwMDk2LCAyMDEwOSwgMjAxMjIsIDIwMTM1LCAyMDE0OCwgCi0gICAgMjAxNjEsIDIwMTc0LCAyMDE4NiwgMjAxOTksIDIwMjEyLCAyMDIyNSwgMjAyMzgsIDIwMjUxLCAyMDI2NCwgMjAyNzcsIAotICAgIDIwMjkwLCAyMDMwMywgMjAzMTYsIDIwMzI4LCAyMDM0MSwgMjAzNTQsIDIwMzY3LCAyMDM4MCwgMjAzOTMsIDIwNDA2LCAKLSAgICAyMDQxOSwgMjA0MzIsIDIwNDQ1LCAyMDQ1OCwgMjA0NzAsIDIwNDgzLCAyMDQ5NiwgMjA1MDksIDIwNTIyLCAyMDUzNSwgCi0gICAgMjA1NDgsIDIwNTYxLCAyMDU3NCwgMjA1ODcsIDIwNjAwLCAyMDYxMiwgMjA2MjUsIDIwNjM4LCAyMDY1MSwgMjA2NjQsIAotICAgIDIwNjc3LCAyMDY5MCwgMjA3MDMsIDIwNzE2LCAyMDcyOSwgMjA3NDIsIDIwNzU0LCAyMDc2NSwgMjA3NzMsIDIwNzgxLCAKLSAgICAyMDc4OCwgMjA3OTQsIDIwNzk4LCAyMDgwNCwgMjA4MTAsIDIwODE4LCAyMDgyNCwgMjA4MjksIDIwODMzLCAyMDg0MiwgCi0gICAgOTE0OCwgMjA4NTMsIDIwODYwLCAyMDg2OCwgMjA4NzUsIDIwODgyLCAxMDk0MSwgMjA4ODksIDIwODk4LCAyMDkwMywgCi0gICAgMjA5MDgsIDc4MDUsIDIwOTE1LCAyMDkyMCwgMjA5MjMsIDIwOTI4LCAyMDkzNiwgMjA5NDMsIDIwOTUwLCAyMDk1NywgCi0gICAgMjA5NjMsIDIwOTcyLCAyMDk4MSwgMjA5ODcsIDIwOTk2LCAyMTAwMCwgMjEwMDYsIDIxMDExLCAyMTAyMSwgMjEwMjgsIAotICAgIDIxMDM0LCAyMTA0MiwgMjEwNDgsIDIxMDU1LCAyMTA2NSwgMjEwNzQsIDIxMDc4LCAyMTA4NSwgMjEwODksIDIxMDk0LCAKLSAgICAyMTEwMCwgMjExMDgsIDIxMTEyLCAyMTEyMiwgMTQ0MDIsIDIxMTMxLCAyMTEzNywgMjExNDEsIDIxMTUwLCAxNDQwNywgCi0gICAgMjExNTYsIDIxMTYzLCAyMTE3NCwgMjExODIsIDIxMTkxLCAyMTE5OSwgODkzMSwgMjEyMDcsIDIxMjEyLCAyMTIxOCwgCi0gICAgMjEyMjMsIDIxMjI3LCAyMTIzMSwgMjEyMzUsIDk2MzIsIDIxMjQwLCAyMTI0OCwgMjEyNTUsIDIxMjY0LCAyMTI3MSwgCi0gICAgMjEyNzgsIDEwODcxLCAyMTI4NSwgMjEyOTEsIDIxMjk1LCAyMTMwMSwgMjEzMDgsIDIxMzE0LCAyMTMyMiwgMjEzMjgsIAotICAgIDIxMzM1LCAyMTM0MSwgMjEzNDcsIDIxMzU2LCAyMTM2MCwgMjEzNjgsIDIxMzc3LCAyMTM4NCwgMjEzODksIDIxMzkzLCAKLSAgICAyMTQwNCwgMjE0MDksIDIxNDE0LCAyMTQxOSwgMjE0MzIsIDc5OTUsIDIxNDM2LCAyMTQ0MiwgMjE0NTAsIDIxNDU0LCAKLSAgICAyMTQ2MSwgMjE0NzAsIDIxNDc1LCAxNDY3OCwgMjE0ODMsIDIxNDg3LCAyMTQ5OSwgMjE1MDQsIDIxNTA4LCAyMTUxMSwgCi0gICAgMjE1MTcsIDIxNTIzLCAyMTUyOCwgMjE1MzIsIDIxNTM1LCAyMTU0NiwgMjE1NTEsIDkzNzYsIDIxNTU4LCAyMTU2MywgCi0gICAgOTM4MSwgMjE1NjgsIDIxNTczLCAyMTU3OCwgMjE1ODMsIDIxNTg4LCAyMTU5MywgMjE1OTgsIDIxNjAzLCAyMTYwOCwgCi0gICAgMjE2MTMsIDIxNjE4LCAyMTYyMywgMjE2MjksIDIxNjM0LCAyMTYzOSwgMjE2NDQsIDIxNjQ5LCAyMTY1NCwgMjE2NTksIAotICAgIDIxNjY0LCAyMTY2OSwgMjE2NzQsIDIxNjgwLCAyMTY4NiwgMjE2OTEsIDIxNjk2LCAyMTcwMSwgMjE3MDYsIDIxNzExLCAKLSAgICAyMTcxNiwgMjE3MjEsIDIxNzI2LCAyMTczMSwgMjE3MzcsIDIxNzQyLCAyMTc0NywgMjE3NTIsIDIxNzU4LCAyMTc2NCwgCi0gICAgMjE3NjksIDIxNzc0LCAyMTc3OSwgMjE3ODQsIDIxNzg5LCAyMTc5NCwgMjE3OTksIDIxODA0LCAyMTgxMCwgMjE4MTUsIAotICAgIDIxODIwLCAyMTgyNSwgMjE4MzAsIDIxODM2LCAyMTg0MSwgMjE4NDYsIDIxODUwLCAxMzY4LCAxMjksIDIxODU4LCAyMTg2MiwgCi0gICAgMjE4NjYsIDIxODcwLCAyMTg3NSwgMjE4NzksIDEzMTEwLCAxMjQ2OSwgMjE4ODMsIDIxODg4LCAyMTg5MiwgMjE4OTcsIAotICAgIDIxOTAxLCAyMTkwNiwgMjE5MTAsIDIxOTE2LCAyMTkyMSwgMjE5MjUsIDIxOTI5LCAyMTkzNywgMjE5NDEsIDIxOTQ1LCAKLSAgICAyMTk1MCwgMjE5NTUsIDIxOTU5LCAyMTk2NSwgMjE5NzAsIDIxOTc0LCAyMTk3OSwgMjE5ODQsIDIxOTg4LCAyMTk5NSwgCi0gICAgMjIwMDIsIDIyMDA5LCAyMjAxMywgMjIwMTcsIDIyMDIyLCAyMjAyNiwgMjIwMjksIDIyMDM1LCAyMjA0OCwgMjIwNTMsIAotICAgIDIyMDYyLCAyMjA2NywgOTQyMSwgMjIwNzIsIDIyMDc1LCAyNzEyLCAyNzE3LCAyMjA3OSwgMjIwODUsIDIyMDkxLCA3MjA5LCAKLSAgICAyMjA5NiwgMjIxMDEsIDIyMTA2LCAyMjExMiwgMjIxMTcsIDEzODk2LCAyMjEyMiwgMjIxMjcsIDIyMTMyLCAyMjEzNywgCi0gICAgMjIxNDMsIDIyMTQ4LCAyMjE1MywgMjIxNTksIDIyMTY0LCAyMjE2OCwgMjIxNzMsIDIyMTc4LCAyMjE4MywgMjIxODgsIAotICAgIDIyMTkyLCAyMjE5NywgMjIyMDEsIDIyMjA2LCAyMjIxMSwgMjIyMTYsIDIyMjIxLCAyMjIyNSwgMjIyMzAsIDIyMjM0LCAKLSAgICAyMjIzOSwgMjIyNDQsIDIyMjQ5LCAyMjI1NCwgMjg4NiwgMjIxNjksIDIyMjU4LCAyMjI2NiwgMjIyNzMsIDk3MjYsIAotICAgIDIyMjg1LCAyMjI5MywgMjIxNzQsIDIyMzAwLCAyMjMwNSwgMjIzMTMsIDIyMTc5LCAyMjMxOCwgMjIzMjMsIDIyMzMxLCAKLSAgICAyMjMzNiwgMjIxODQsIDIyMzQxLCAyMjM0NiwgMjIzNTAsIDIyMzU2LCAyMjM2NCwgMjIzNjcsIDIyMzc0LCAyMjM3OCwgCi0gICAgMjIzODIsIDIyMzg4LCAyMjM5NSwgMjI0MDAsIDg5NTgsIDE3MjcsIDE3MzIsIDIyNDA0LCAyMjQxMCwgMjI0MTYsIDIyNDIxLCAKLSAgICAyMjQyNSwgMjI0MjksIDIyNDMzLCAyMjQzNywgMjI0NDEsIDIyNDQ1LCAyMjQ0OSwgMjI0NTIsIDIyNDU4LCAyMjQ2NSwgCi0gICAgMjI0NzMsIDIyNDc5LCAyMjQ4NSwgMjI0OTAsIDIyNDk1LCAyMjQ5OSwgMTM4MTYsIDEzODIzLCAyMjUwNCwgMjI1MTYsIAotICAgIDIyNTE5LCAyMjUyNiwgMTYzNDksIDIyNTMzLCAyMjU0MSwgMjI1NTIsIDIyNTYxLCAyMjU3NCwgMjI1ODQsIDIyNTk4LCAKLSAgICAyMjYxMCwgMjI2MjQsIDIyNjM2LCAyMjY0NiwgMjI2NTgsIDIyNjY0LCAyMjY3OSwgMjI3MDMsIDIyNzIxLCAyMjc0MCwgCi0gICAgMjI3NTMsIDIyNzY3LCAyMjc4NSwgMjI4MDEsIDIyODE4LCAyMjgzNiwgMjI4NDcsIDIyODY2LCAyMjg4MywgMjI5MDMsIAotICAgIDIyOTIxLCAyMjkzMywgMjI5NDcsIDIyOTYxLCAyMjk3MywgMjI5OTAsIDIzMDA5LCAyMzAyNywgMjMwMzksIDIzMDU3LCAKLSAgICAyMzA3NiwgMTQ1NDYsIDIzMDg5LCAyMzEwOSwgMjMxMjEsIDEwNTE2LCAyMzEzMywgMjMxMzgsIDIzMTQzLCAyMzE0OCwgCi0gICAgMjMxNTQsIDIzMTU5LCAyMzE2MywgMjMxNzAsIDIzOTgsIDIzMTc0LCAyMzE4MCwgMjMxODQsIDIzMTg3LCAyMzE5MSwgCi0gICAgMjMxOTksIDIzMjA1LCAyMjIwMiwgMjMyMDksIDIzMjE4LCAyMzIyOSwgMjMyMzUsIDIzMjQxLCAyMzI1MCwgMjMyNTgsIAotICAgIDIzMjY1LCAyMzI3MCwgMjMyNzQsIDIzMjgxLCAyMzI4NywgMjMyOTYsIDIzMzA0LCAyMzMxMSwgMjMzMjEsIDIzMzMwLCAKLSAgICAyMzM0MCwgMjMzNDUsIDIzMzU0LCAyMzM2MywgMjMzNzQsIDIzMzg1LCAzOTYzLCAyMzM5NSwgMjMzOTksIDIzNDA5LCAKLSAgICAyMzQxNywgMjM0MjcsIDIzNDM4LCAyMzQ0MywgMjM0NTMsIDIzNDYxLCAyMzQ2OCwgMjM0NzQsIDIzNDgxLCAyMzQ4NiwgCi0gICAgMjIyMTIsIDIzNDkwLCAyMzQ5OSwgMjM1MDMsIDIzNTA2LCAyMzUxMSwgMjM1MTgsIDIzNTI3LCAyMzUzNSwgMjM1NDMsIAotICAgIDIzNTUzLCAyMzU2MiwgMjM1NjgsIDIzNTc0LCAyMjIxNywgMjIyMjIsIDIzNTc4LCAyMzU4OCwgMjM1OTgsIDIzNjA4LCAKLSAgICAyMzYxNiwgMjM2MjMsIDIzNjMzLCAyMzY0MSwgMjM2NDksIDIzNjU1LCAyMzY2MywgOTMwLCAyMzY3MiwgMTQ3MzcsIDU0MiwgCi0gICAgMjM2ODYsIDIzNjk1LCAyMzcwMywgMjM3MTQsIDIzNzI1LCAyMzczNSwgMjM3NDQsIDIzNzU2LCAyMzc2NSwgMjM3NzQsIAotICAgIDIzNzgwLCAyMzc4OSwgMjM3OTgsIDIzODA4LCAyMzgxNiwgMjM4MjQsIDkzNTMsIDIzODMwLCAyMzgzMywgMjM4MzcsIAotICAgIDIzODQyLCAyMzg0NywgOTg0MSwgMjIyMzUsIDIyMjQwLCAyMzg1NSwgMjM4NjEsIDIzODY3LCAyMzg3MiwgMjM4NzcsIAotICAgIDIzODgxLCAyMzg4OSwgMjM4OTUsIDIzOTAxLCAyMzkwNSwgMzUyNSwgMjM5MTMsIDIzOTE4LCAyMzkyMywgMjM5MjcsIAotICAgIDIzOTMxLCA5OTIxLCAyMzkzOCwgMjM5NDYsIDIzOTYwLCAyMzk2NywgMjM5NzMsIDk5MzAsIDk5MzYsIDIzOTgxLCAyMzk4OSwgCi0gICAgMjM5OTYsIDI0MDAxLCAyNDAwNiwgMjIyNDUsIDI0MDEyLCAyNDAyMywgMjQwMjcsIDI0MDMyLCAyNjAxLCAyNDAzNywgCi0gICAgMjQwNDgsIDI0MDU0LCAyNDA1OSwgMjQwNjMsIDI0MDY3LCAyNDA3MCwgMjQwNzcsIDI0MDg0LCAyNDA5MSwgMjQwOTcsIAotICAgIDI0MTAxLCAyMjI1MCwgMjQxMDYsIDI0MTEwLCAyNDExNCwgMTAzNywgMjQxMTksIDI0MTI0LCAyNDEyOSwgMjQxMzQsIAotICAgIDI0MTM5LCAyNDE0NCwgMjQxNDksIDI0MTU0LCAyNDE1OSwgMjQxNjQsIDI0MTY5LCAyNDE3NCwgMjQxNzksIDI0MTg0LCAKLSAgICAyNDE5MCwgMjQxOTUsIDI0MjAwLCAyNDIwNSwgMjQyMTAsIDI0MjE1LCAyNDIyMCwgMjQyMjYsIDI0MjMxLCAyNDIzNiwgCi0gICAgMjQyNDEsIDI0MjQ2LCAyNDI1MSwgMjQyNTYsIDI0MjYxLCAyNDI2NywgMjQyNzMsIDI0Mjc4LCAyNDI4NCwgMjQyODksIAotICAgIDI0Mjk0LCA1LCAyNDMwMCwgMjQzMDQsIDI0MzA4LCAyNDMxMiwgMjQzMTcsIDI0MzIxLCAyNDMyNSwgMjQzMjksIDI0MzMzLCAKLSAgICAyNDMzOCwgMjQzNDIsIDI0MzQ3LCAyNDM1MSwgMjQzNTQsIDI0MzU4LCAyNDM2MywgMjQzNjcsIDI0MzcyLCAyNDM3NiwgCi0gICAgMjQzODAsIDI0Mzg0LCAyNDM4OSwgMjQzOTMsIDI0Mzk3LCAyNDQwNywgMjQ0MTIsIDI0NDE2LCAyNDQyMCwgMjQ0MjUsIAotICAgIDI0NDMwLCAyNDQzOSwgMjQ0NDQsIDI0NDQ5LCAyNDQ1MywgMjQ0NTcsIDI0NDcwLCAyNDQ4MiwgMjQ0OTEsIDI0NTAwLCAKLSAgICAyNDUwNiwgMjQ1MTEsIDI0NTE1LCAyNDUxOSwgMjQ1MjksIDI0NTM4LCAyNDU0NiwgMjQ1NTIsIDI0NTU3LCAyNDU2MSwgCi0gICAgMjQ1NjgsIDI0NTc4LCAyNDU4NywgMjQ1OTUsIDI0NjAzLCAyNDYxMCwgMjQ2MTgsIDI0NjI3LCAyNDYzNiwgMjQ2NDQsIAotICAgIDI0NjQ5LCAyNDY1MywgMjQ2NTcsIDI0NjYwLCAyNDY2MiwgMjQ2NjYsIDI0NjcwLCAyNDY3NSwgMjQ2ODAsIDI0Njg0LCAKLSAgICAyNDY4OCwgMjQ2OTEsIDI0Njk1LCAyNDY5OCwgMjQ3MDIsIDI0NzA1LCAyNDcwOCwgMjQ3MTIsIDI0NzE4LCAyNDcyMiwgCi0gICAgMjQ3MjYsIDI0NzMwLCAyNDczNSwgMjQ3NDAsIDI0NzQ1LCAyNDc0OSwgMjQ3NTIsIDI0NzU3LCAyNDc2MywgMjQ3NjgsIAotICAgIDI0Nzc0LCAyNDc3OSwgMjQ3ODMsIDI0Nzg3LCAyNDc5MSwgMjQ3OTYsIDI0ODAwLCAyNDgwNSwgMjQ4MDksIDI0ODEzLCAKLSAgICAyNDgyMCwgMjQ4MjQsIDI0ODI3LCAyNDgzMSwgMjQ4MzcsIDI0ODQzLCAyNDg0NywgMjQ4NTEsIDI0ODU2LCAyNDg2MywgCi0gICAgMjQ4NjksIDI0ODczLCAyNDg4MiwgMjQ4ODYsIDI0ODkwLCAyNDg5MywgMjQ4OTksIDI0OTA0LCAyNDkxMCwgMTQ4OSwgCi0gICAgMTc5MSwgMjQ5MTUsIDI0OTIwLCAyNDkyNSwgMjQ5MzAsIDI0OTM1LCAyNDk0MCwgMjQ5NDUsIDIxNDgsIDIxOTQsIDI0OTUwLCAKLSAgICAyNDk1MywgMjQ5NTcsIDI0OTYxLCAyNDk2NiwgMjQ5NzAsIDI0OTc0LCAyNDk3NywgMjQ5ODIsIDI0OTg3LCAyNDk5MSwgCi0gICAgMjQ5OTQsIDI0OTk5LCAyNTAwMywgMjUwMDgsIDI1MDEyLCAxNDc0OSwgMjUwMTcsIDI1MDIwLCAyNTAyMywgMjUwMjcsIAotICAgIDI1MDMyLCAyNTAzNiwgMjUwNDksIDI1MDUzLCAyNTA1NiwgMjUwNjQsIDI1MDczLCAyNTA4MCwgMjUwODUsIDI1MDkxLCAKLSAgICAyNTA5NywgMjUxMDUsIDI1MTEyLCAyNTExOSwgMjUxMjMsIDI1MTI3LCAyNTEzMSwgMjUxMzYsIDI1MTQxLCAyNTE0NSwgCi0gICAgMjUxNTMsIDI1MTU4LCAyNTE3MCwgMjUxODEsIDI1MTg2LCAyNTE5MCwgMjUxOTQsIDI1MjAwLCAyNTIwNSwgMjUyMTAsIAotICAgIDI1MjE0LCAyNTIxOCwgMjUyMjEsIDI1MjI3LCA3OTE1LCAyMzE2LCAyNTIzMSwgMjUyMzYsIDI1MjUyLCA5NDY4LCAyNTI3MiwgCi0gICAgMjUyODEsIDI1Mjk3LCAyNTMwMSwgMjUzMDQsIDI1MzEwLCAyNTMyMCwgMjUzMjYsIDI1MzM1LCAyNTM1MCwgMjUzNjIsIAotICAgIDI1MzczLCAyNTM4MSwgMjUzOTAsIDI1Mzk2LCAyNTQwNSwgMjU0MTUsIDI1NDI2LCAyNTQzNywgMjU0NDYsIDI1NDUzLCAKLSAgICAyNTQ2MiwgMjU0NzAsIDI1NDc3LCAyNTQ4NSwgMjU0OTIsIDI1NDk5LCAyNTUxMiwgMjU1MTksIDI1NTI1LCAyNTUzMCwgCi0gICAgMjU1MzksIDI1NTQ1LCAyNTU1MCwgMjU1NTgsIDI1NTY1LCAyMzQxOSwgMjU1NzcsIDI1NTg5LCAyNTYwMywgMjU2MTEsIAotICAgIDI1NjE4LCAyNTYzMCwgMjU2MzksIDI1NjQ4LCAyNTY1NiwgMjU2NjQsIDI1NjcyLCAyNTY3OSwgMjU2ODgsIDI1Njk2LCAKLSAgICAyNTcwNiwgMjU3MTUsIDI1NzI1LCAyNTczNCwgMjU3NDMsIDI1NzUxLCAyNTc1NiwgMjU3NjAsIDI1NzYzLCAyNTc2NywgCi0gICAgMjU3NzEsIDI1Nzc1LCAyNTc3OSwgMjU3ODMsIDI1Nzg5LCAyNTc5NSwgMjU4MDMsIDE0Nzk0LCAyNTgxMCwgMjU4MTUsIAotICAgIDI1ODIyLCAyNTgyOCwgMjU4MzUsIDE0ODAyLCAyNTg0MiwgMjU4NDUsIDI1ODU3LCAyNTg2NSwgMjU4NzEsIDI1ODc2LCAKLSAgICAyNTg4MCwgOTg3MSwgMjU4OTEsIDI1OTAxLCAyNTkxMCwgMjU5MTcsIDI1OTIxLCAxNDgwNywgMjU5MjQsIDI1OTMxLCAKLSAgICAyNTkzNSwgMjU5NDEsIDI1OTQ0LCAyNTk1MSwgMjU5NTcsIDI1OTY0LCAyNTk3MCwgMjU5NzQsIDI1OTc5LCAyNTk4MywgCi0gICAgMjU5OTIsIDI1OTk5LCAyNjAwNSwgNzk1NiwgMjYwMTIsIDI2MDIwLCAyNjAyNywgMjYwMzMsIDI2MDM4LCAyNjA0NCwgCi0gICAgMjYwNTAsIDI2MDU4LCAyNjA2MiwgMjYwNjUsIDI2MDY3LCAyNTc2OCwgMjYwNzYsIDI2MDgyLCAyNjA5MiwgMjYwOTcsIAotICAgIDI2MTA0LCAyNjExMCwgMjYxMTUsIDI2MTIwLCAyNjEyNSwgMjYxMjksIDI2MTM0LCAyNjE0MSwgMjYxNTAsIDI2MTU0LCAKLSAgICAyNjE2MSwgMjYxNzAsIDI2MTc2LCAyNjE4MSwgMjYxODcsIDI2MTkyLCAyNjE5OSwgMjYyMTAsIDI2MjE1LCAyNjIxOSwgCi0gICAgMjYyMjksIDI2MjM1LCAyNjIzOSwgMjYyNDQsIDI2MjU0LCAyNjI2MywgMjYyNjcsIDI2Mjc0LCAyNjI4MiwgMjYyODksIAotICAgIDI2Mjk1LCAyNjMwMCwgMjYzMDgsIDI2MzE1LCAyNjMyNywgMjYzMzYsIDI2MzQwLCAxMzA0NiwgMjYzNDgsIDI2MzU4LCAKLSAgICAyNjM2MiwgMjUwNjAsIDI2MzczLCAyNjM3OCwgMjYzODIsIDI2Mzg5LCAyNjM5NiwgMjE5NjEsIDI1NjkzLCAyNjQwMSwgCi0gICAgMjY0MDUsIDI2NDA4LCAyMjg1MywgMjY0MTMsIDI2NDI3LCAyNjQ0MywgMjY0NjEsIDI2NDgwLCAyNjQ5NywgMjY1MTUsIAotICAgIDIyODcyLCAyNjUzMiwgMjY1NTIsIDIyODg5LCAyNjU2NCwgMjY1NzYsIDE1NzMyLCAyNjU4OCwgMjI5MDksIDI2NjAyLCAKLSAgICAyNjYxNCwgMTA1MjksIDI2NjI4LCAyNjYzMywgMjY2MzgsIDI2NjQzLCAyNjY0OSwgMjY2NTUsIDI2NjYxLCAyNjY2NSwgCi0gICAgMjY2NzIsIDI2Njc3LCAyNjY4NywgMjY2OTMsIDEwMTc2LCAyNjY5OSwgMjY3MDEsIDI2NzA2LCAyNjcxNCwgMjY3MTgsIAotICAgIDI2MTM3LCAyNjcyNCwgMjY3MzEsIDExNTE3LCAxMTUyNywgMjY3MzgsIDI2NzQ4LCAyNjc1MywgMjY3NTcsIDI2NzYwLCAKLSAgICAyNjc2NiwgMjY3NzQsIDI2Nzg2LCAyNjc5NiwgMjY4MTIsIDI2ODI1LCAyNjgzOSwgMTU3NTAsIDI2ODUzLCAyNjg2MCwgCi0gICAgMjY4NjQsIDI2ODY3LCAyNjg3MiwgMjY4NzYsIDI2ODgzLCAyNjg5MCwgMjY5MDAsIDI2OTA1LCAyNjkxMCwgMjY5MTUsIAotICAgIDI2OTIzLCAyNjkzMSwgMjY5NDAsIDI2OTQ1LCA5NTY1LCAyNjk0OSwgMjY5NTIsIDI2OTU1LCAyNjk2MCwgMjY5NjcsIAotICAgIDI2OTcyLCAyNjk4OCwgMjY5OTYsIDI3MDA0LCA5NDE2LCAyNzAxMiwgMjcwMTcsIDI3MDIxLCAyNzAyNywgMjcwMzMsIAotICAgIDI3MDM2LCAyNzA0MiwgMjcwNTQsIDI3MDYyLCAyNzA2OSwgMjcwNzUsIDI3MDgyLCAyNzA5MywgMjcxMDcsIDI3MTIwLCAKLSAgICAyNzEyOSwgMjcxMzgsIDI3MTUwLCAyNzE2MSwgMjcxNzEsIDI3MTgwLCAyNzE4OSwgMjcxOTcsIDI3MjA4LCA3OTM4LCAKLSAgICAyNzIxNSwgMjcyMjEsIDI3MjI2LCAyNzIzMiwgMjcyMzksIDI3MjQ5LCAyNzI1OSwgMjcyNjgsIDI3Mjc0LCAyNzI4MSwgCi0gICAgMjcyODYsIDI3MjkzLCAyNzMwMSwgMjczMDksIDI3MzIxLCA2MjQ2LCAyNzMyOCwgMjczMzcsIDI3MzQ1LCAyNzM1MSwgCi0gICAgMjczNTcsIDI3MzYyLCAyNzM2NiwgMjczNjksIDI3Mzc1LCAyNzM4MiwgMjczODcsIDI3MzkyLCAyNzM5NiwgMjc0MDgsIAotICAgIDI3NDE5LCAyNzQyOCwgMjc0MzYsIDE0OTM0LCAyNzQ0MSwgMjc0NDcsIDI3NDUzLCAxMTUxMCwgODYzNSwgMjc0NTgsIAotICAgIDI3NDYyLCAyNzQ2NSwgMjc0NjgsIDI3NDc0LCAyNzQ4MiwgMjc0OTAsIDI3NDk0LCAyNzQ5OCwgMjc1MDMsIDI3NTA2LCAKLSAgICAyNzUxNSwgMjc1MTksIDI3NTI3LCAyNzUzOCwgMjc1NDIsIDI3NTQ4LCAyNzU1NCwgMjc1NTgsIDI3NTY0LCAyNzU3MiwgCi0gICAgMjc1OTQsIDI3NjE4LCAyNzYyNSwgMjc2MzIsIDI3NjM4LCAyNzY0NiwgMjc2NTIsIDI3NjU3LCAyNzY2OCwgMjc2ODYsIAotICAgIDI3NjkzLCAyNzcwMSwgMjc3MDUsIDI3NzE0LCAyNzcyNywgMjc3MzUsIDI3NzQ3LCAyNzc1OCwgMjc3NjgsIDI3NzgyLCAKLSAgICAyNzc5MSwgMjc3OTksIDI3ODExLCA5NDg1LCAyNzgyMiwgMjc4MzMsIDI3ODQ1LCAyNzg1NSwgMjc4NjQsIDI3ODY5LCAKLSAgICAyNzg3MywgMjc4ODEsIDI3ODkxLCAyNzg5NiwgMjc5MDAsIDI3OTAzLCAyNzkwNiwgMjc5MTQsIDI3OTIyLCAyNzkzMSwgCi0gICAgMjc5NDEsIDI3OTUwLCAyNzk1NiwgMjc5NzAsIDI2NjMsIDI3OTkyLCAyODAwMywgMjgwMTIsIDI4MDIyLCAyODAzNCwgCi0gICAgMjgwNDMsIDI4MDUyLCAyODA2MiwgMjgwNzAsIDI4MDc4LCAyODA4NywgMjgwOTIsIDI4MTAzLCAyODEwOCwgMjgxMTksIAotICAgIDI4MTIzLCAyODEzMywgMjgxNDIsIDI4MTUwLCAyODE2MCwgMjgxNzAsIDI4MTc4LCAyODE4NywgMjgxOTQsIDI4MjAyLCAKLSAgICAyODIwOSwgMjgyMTgsIDI4MjIyLCAyODIzMCwgMjgyMzcsIDI4MjQ1LCAyODI1MiwgMjgyNjMsIDI4Mjc4LCAyODI4NSwgCi0gICAgMjgyOTEsIDI4MzAxLCAyODMxMCwgMjgzMTYsIDI4MzIwLCAyODMyNywgMjgzMzEsIDE0MDE4LCAyODMzNywgMjgzNDEsIAotICAgIDI4MzQ2LCAyODM1MywgMjgzNTcsIDI4MzYxLCAyODM2OSwgMjgzNzcsIDI4MzgzLCAyODM5MiwgMjgzOTksIDI4NDA0LCAKLSAgICAyODQwOSwgMjg0MTksIDIzNDg4LCAyODQyMywgMjg0MjYsIDI4NDMxLCAyODQzNiwgMjg0NDEsIDI4NDQ2LCAyODQ1MSwgCi0gICAgMjg0NTYsIDI4NDYxLCAyODQ2NiwgMjg0NzIsIDI4NDc3LCAyODQ4MiwgMjg0ODgsIDEyMTgsIDcwNCwgMjg0OTMsIDI4NTAyLCAKLSAgICAyMzY0LCAyODUwOSwgMjg1MTQsIDI4NTE4LCAyODUyNCwgMTI2NywgNTQ2LCAzMTgsIDI4NTI5LCAyODUzOCwgMjg1NDYsIAotICAgIDI4NTU1LCAyODU2MywgMjg1NzQsIDI4NTgzLCAyODU5MSwgMjg1OTUsIDI4NTk4LCAyODYwNiwgMjg2MTQsIDI4NjE5LCAKLSAgICAxNDc2MiwgMjg2MjUsIDI4NjMxLCAyODYzNywgNTg3MiwgMjg2NDIsIDI4NjQ2LCAyODY1MiwgMjg2NTYsIDI4NjYzLCAKLSAgICAxNDU1LCAyODY2OSwgMjg2NzYsIDk1NzIsIDI4NjgwLCAyODY5MCwgMjg2OTgsIDI4NzA0LCAyODcxMywgMjg3MjEsIAotICAgIDI4NzI3LCAyODczNSwgMjg3NDIsIDExMTAzLCAyODc0OCwgMjg3NTUsIDI4NzYwLCAyODc2NywgMTQ5NiwgMjE0NywgCi0gICAgMjg3NzMsIDI4Nzc5LCAyODc4NiwgMjg3OTcsIDI4ODA4LCAyODgxNiwgMjg4MjMsIDI4ODMzLCAyODg0MiwgMjg4NTAsIAotICAgIDI4ODU5LCAyODg2NiwgMjg4NzMsIDI4ODg2LCAyODg5NywgMTI3MiwgMjg5MTYsIDI4OTIxLCAyODkyOSwgMzU3NSwgCi0gICAgMjg5MzMsIDI4OTM4LCAyODk0MiwgMTQ1OSwgMjQ2ODksIDI4OTUyLCAyODk1NiwgMjg5NjEsIDI4OTY1LCAzNDkzLCAKLSAgICAyODk3MSwgMjg5NzksIDI4OTg2LCAyODk5NywgMjkwMDUsIDI5MDEzLCAzNTc2LCAyNzksIDI5MDE4LCAyOTAyNiwgMjkwMzQsIAotICAgIDI5MDQxLCAyOTA0NywgMjkwNTIsIDIyMTYsIDI5MDU5LCAyOTA2NSwgMjU5NzUsIDI2MjA1LCAyOTA3MSwgMTA2LCAyOTA3NSwgCi0gICAgMjkwNzksIDI5MDg1LCA2MTUsIDkzMjEsIDI5MDkwLCAyOTA5NywgMjkxMDMsIDIzMjcsIDI5MTA3LCAyOTExMSwgMTUxNzQsIAotICAgIDI5MTE0LCAyOTExOSwgMjkxMjYsIDI5MTMyLCAyOTEzNywgMjkxNDUsIDI5MTUyLCAyOTE1OCwgMjIzMzgsIDI5MTYyLCAKLSAgICAyOTE2NiwgMzY0NiwgMTY2MTIsIDI5MTcwLCAyOTE3NSwgMjkxNzgsIDI5MTg2LCAyOTE5NCwgMjkxOTksIDI5MjAyLCAKLSAgICAyOTIwOSwgMjkyMTksIDI5MjMxLCAyOTIzNiwgMjkyNDAsIDI5MjQ4LCAyOTI1NSwgMjkyNjEsIDI5MjY4LCAyOTI3NSwgCi0gICAgMjkyNzgsIDI5MjgyLCAyOTI4NiwgMTQ2MywgMjkyOTYsIDI5Mjk4LCAyOTMwMywgMjkzMDksIDI5MzE1LCAyOTMyMCwgCi0gICAgMjkzMjUsIDI5MzMwLCAyOTMzNSwgMjkzNDAsIDI5MzQ1LCAyOTM1MCwgMjkzNTUsIDI5MzYwLCAyOTM2NSwgMjkzNzAsIAotICAgIDI5Mzc1LCAyOTM4MCwgMjkzODUsIDI5MzkxLCAyOTM5NywgMjk0MDMsIDI5NDA5LCAyOTQxNCwgMjk0MTksIDI5NDI0LCAKLSAgICAyOTQzMCwgMjk0MzUsIDI5NDQwLCAyOTQ0NSwgMjk0NTEsIDI5NDU2LCAyOTQ2MiwgMjk0NjcsIDI5NDcyLCAyOTQ3NywgCi0gICAgMjk0ODIsIDI5NDg4LCAyOTQ5MywgMjk0OTksIDI5NTA0LCAyOTUwOSwgMjk1MTQsIDI5NTE5LCAyOTUyNSwgMjk1MzAsIAotICAgIDI5NTM2LCAyOTU0MSwgMjk1NDYsIDI5NTUxLCAyOTU1NiwgMjk1NjEsIDI5NTY2LCAyOTU3MSwgMjk1NzYsIDI5NTgxLCAKLSAgICAyOTU4NywgMjk1OTMsIDI5NTk5LCAyOTYwNCwgMjk2MDksIDI5NjE0LCAyOTYxOSwgMjk2MjUsIDI5NjMxLCAyOTYzNywgCi0gICAgMjk2NDMsIDI5NjQ5LCAyOTY1NSwgMjk2NjAsIDI5NjY2LCAyOTY3MSwgMjk2NzYsIDI5NjgxLCAyOTY4NiwgMjk2OTIsIAotICAgIDI0NDMsIDI5Njk3LCAyNDUwLCAyNDU3LCAyNzU0LCAyOTcwMiwgMjQ2MywgMjQ3MywgMjk3MDgsIDI5NzEyLCAyOTcxNywgCi0gICAgMjk3MjIsIDI5NzI4LCAyOTczMywgMjk3MzgsIDI5NzQyLCAyOTc0NywgMjk3NTMsIDI5NzU4LCAyOTc2MywgMjk3NjgsIAotICAgIDI5Nzc0LCAyOTc3OSwgMjk3ODMsIDI5Nzg3LCAyOTc5MiwgMjk3OTcsIDI5ODAyLCAyOTgwNywgMjk4MTIsIDI5ODE4LCAKLSAgICAyOTgyNCwgMjk4MjksIDI5ODMzLCAyOTgzOCwgMjk4NDQsIDI5ODQ4LCAyOTg1MywgMjk4NTgsIDI5ODYzLCAyOTg2OCwgCi0gICAgMjk4NzIsIDI5ODc1LCAyOTg4MCwgMjk4ODUsIDI5ODkwLCAyOTg5NSwgMjk5MDAsIDI5OTA2LCAyOTkxMiwgMjk5MTcsIAotICAgIDI5OTIyLCAyOTkyNiwgMjk5MzEsIDI5OTM2LCAyOTk0MSwgMjk5NDYsIDI5OTUxLCAyOTk1NSwgMjk5NjAsIDI5OTY1LCAKLSAgICAyOTk3MCwgMjk5NzQsIDI5OTc4LCAyOTk4MiwgMjk5ODcsIDI5OTk1LCAzMDAwMCwgMzAwMDYsIDMwMDEyLCAzMDAxOCwgCi0gICAgMzAwMjMsIDMwMDI3LCAzMDAzMCwgMzAwMzUsIDMwMDQwLCAzMDA0NCwgMzAwNDksIDMwMDUzLCAzMDA1OCwgMzAwNjIsIAotICAgIDMwMDY1LCAzMDA3MCwgMTcyODksIDMwMDc1LCAzMDA4MCwgMzAwODUsIDMwMDkzLCAyMTI2NywgMjg2NzMsIDkwMTksIAotICAgIDMwMDk4LCAzMDEwMywgMzAxMDcsIDMwMTEyLCAzMDExNiwgMzAxMjAsIDMwMTI1LCAzMDEyOSwgMzAxMzIsIDMwMTM1LCAKLSAgICAzMDEzOSwgMzAxNDQsIDMwMTQ4LCAzMDE1NiwgMzAxNjAsIDMwMTYzLCAzMDE2OCwgMzAxNzIsIDMwMTc2LCAzMDE4MSwgCi0gICAgMzAxODYsIDMwMTkwLCAzMDE5NiwgMzAyMDEsIDMwMjA2LCAzMDIxMywgMzAyMjAsIDMwMjI0LCAzMDIyNywgMzAyMzMsIAotICAgIDMwMjQyLCAzMDI0OSwgMzAyNTcsIDMwMjY0LCAzMDI2OCwgMzAyNzMsIDMwMjc3LCAzMDI4MSwgMzAyODcsIDMwMjkzLCAKLSAgICAzMDI5NywgMzAzMDMsIDMwMzA4LCAzMDMxMywgMzAzMjAsIDMwMzI2LCAzMDMzMiwgMzAzMzgsIDMwMzQ0LCAzMDM1MSwgCi0gICAgMzAzNTcsIDMwMzYzLCAzMDM2OSwgMzAzNzUsIDMwMzgxLCAzMDM4NywgMzAzOTMsIDMwNDAwLCAzMDQwNiwgMzA0MTMsIAotICAgIDMwNDE5LCAzMDQyNSwgMzA0MzEsIDMwNDM3LCAzMDQ0MywgMzA0NDksIDMwNDU1LCAzMDQ2MSwgMzA0NjcsIDExNDExLCAKLSAgICAzMDQ3MywgMzA0NzgsIDMwNDgzLCAzMDQ4NiwgMzA0OTQsIDMwNDk5LCAzMDUwOCwgMzA1MTQsIDMwNTE5LCAzMDUyNCwgCi0gICAgMzA1MjksIDMwNTMzLCAzMDUzOCwgMzA1NDMsIDMwNTQ4LCAzMDU1MywgMzA1NTgsIDMwNTY1LCAzMDU3MiwgMzA1NzgsIAotICAgIDMwNTg0LCAzMDU4OSwgMTYyOTAsIDMwNTk2LCAzMDYwMiwgMzA2MDksIDMwNjE1LCAzMDYyMSwgMzA2MjYsIDMwNjM0LCAKLSAgICAzMDYzOSwgMTYwNjksIDMwNjQzLCAzMDY0OCwgMzA2NTMsIDMwNjU5LCAzMDY2NCwgMzA2NjksIDMwNjczLCAzMDY3OCwgCi0gICAgMzA2ODMsIDMwNjg5LCAzMDY5NCwgMzA2OTksIDMwNzAzLCAzMDcwOCwgMzA3MTMsIDMwNzE3LCAzMDcyMiwgMzA3MjcsIAotICAgIDMwNzMyLCAzMDczNiwgMzA3NDEsIDMwNzQ2LCAzMDc1MSwgMzA3NTUsIDMwNzU5LCAxNTI4MCwgMzA3NjMsIDMwNzcyLCAKLSAgICAzMDc3OCwgMzA3ODQsIDMwNzkzLCAzMDgwMSwgMzA4MTAsIDMwODE4LCAzMDgyMywgMzA4MjcsIDMwODM0LCAzMDg0MCwgCi0gICAgMzA4NDQsIDMwODQ3LCAzMDg1MiwgMzA4NjEsIDMwODY5LCAzMDg3NCwgMTQ5NSwgMzA4ODAsIDMwODgzLCAzMDg4NywgCi0gICAgMjI0MTEsIDIyNDE3LCAzMDg5MywgMzA4OTcsIDMwOTA4LCAzMDkxOSwgMzA5MzAsIDMwOTQyLCAzMDk0OSwgMzA5NTYsIAotICAgIDMwOTYxLCAzMDk2NSwgNTkwOSwgNzU1LCAyMTI2NiwgMzA5NzMsIDMwOTc4LCAzMDk4MiwgMzA5ODcsIDMwOTkxLCAzMDk5NywgCi0gICAgMzEwMDIsIDMxMDA4LCAzMTAxMywgMzEwMTksIDMxMDI0LCAzMTAzMCwgMzEwMzUsIDMxMDQxLCAzMTA0NywgMzEwNTMsIAotICAgIDMxMDU4LCAzMTAxNCwgMzEwMjAsIDMxMDYyLCAzMTA2NywgMzEwNzMsIDMxMDc4LCAzMTA4NCwgMzEwODksIDMxMDk1LCAKLSAgICAzMTEwMCwgMzEwMjUsIDEwNDE0LCAzMTEwNCwgMzEwMzYsIDMxMDQyLCAzMTA0OCwgMjgzMSwgMzQyMywgMzExMTAsIAotICAgIDMxMTEzLCAzMTExOSwgMzExMjUsIDMxMTMxLCAzMTEzOCwgMzExNDQsIDMxMTUwLCAzMTE1NiwgMzExNjIsIDMxMTY4LCAKLSAgICAzMTE3NCwgMzExODAsIDMxMTg2LCAzMTE5MiwgMzExOTgsIDMxMjA0LCAzMTIxMCwgMzEyMTcsIDMxMjIzLCAzMTIyOSwgCi0gICAgMzEyMzUsIDMxMjQxLCAzMTI0NywgMzEyNTAsIDMxMjU1LCAzMTI1OCwgMzEyNjUsIDMxMjczLCAzMTI3OCwgMzEyODMsIAotICAgIDMxMjg5LCAzMTI5NCwgMzEyOTksIDMxMzAzLCAzMTMwOCwgMzEzMTQsIDMxMzE5LCAzMTMyNSwgMzEzMzAsIDMxMzM2LCAKLSAgICAzMTM0MSwgMzEzNDcsIDMxMzUzLCAzMTM1NywgMzEzNjIsIDMxMzY3LCAzMTM3MiwgMzEzNzcsIDMxMzgxLCAzMTM4NiwgCi0gICAgMzEzOTEsIDMxMzk2LCAzMTQwMiwgMzE0MDgsIDMxNDE0LCAzMTQyMCwgMzE0MjUsIDMxNDI5LCAzMTQzMiwgMzE0MzgsIAotICAgIDMxNDQ0LCAzMTQ1MywgMzE0NjEsIDMxNDY4LCAzMTQ3MywgMzE0NzcsIDMxNDgxLCAzMTQ4NiwgMTUxMzMsIDMxNDkxLCAKLSAgICAzMTQ5OSwgMzE1MDUsIDM2ODMsIDEzNzcsIDMxNTEwLCAzMTUxNCwgODAwNSwgMzE1MjAsIDMxNTI2LCAzMTUzMywgODAxNCwgCi0gICAgMzE1MzcsIDMxNTQzLCAzMTU1MCwgMzE1NTYsIDMxNTY1LCAzMTU3MywgMzE1ODUsIDMxNTg5LCAzMTU5NiwgMzE2MDIsIAotICAgIDMxNjA2LCAzMTYwOSwgMzE2MTgsIDMxNjI2LCAzMTAxNSwgMzE2MzEsIDMxNjQxLCAzMTY1MSwgMzE2NjEsIDMxNjY3LCAKLSAgICAzMTY3MiwgMzE2ODIsIDMxNjg3LCAzMTcwMCwgMzE3MTQsIDMxNzI1LCAzMTczNywgMzE3NDksIDMxNzYzLCAzMTc3NiwgCi0gICAgMzE3ODgsIDMxODAwLCAxNDU4NywgMzE4MTQsIDMxODE5LCAzMTgyNCwgMzE4MjgsIDMxODMyLCAzMTgzNiwgMTc4MCwgCi0gICAgMjcxNTksIDMxODQwLCAzMTg0NSwgMzEwNjMsIDMxODUwLCAzMTg1MywgMzE4NTgsIDMxODYzLCAzMTg2OCwgMzE4NzQsIAotICAgIDMxODgwLCAxMDA5MSwgMzE4ODUsIDMxODkyLCAxNTY4NCwgMzE4OTgsIDMxOTAzLCAzMTkwOCwgMzE5MTIsIDMxOTE3LCAKLSAgICAzMTkyMiwgMzEwNjgsIDMxOTI3LCAzMTkzMiwgMzE5MzcsIDMxOTQzLCAzMTA3NCwgMzE5NDgsIDMxOTUxLCAzMTk1OCwgCi0gICAgMzE5NjYsIDMxOTcyLCAzMTk3OCwgMzE5ODQsIDMxOTk1LCAzMjAwMCwgMzIwMDcsIDMyMDE0LCAzMjAyMSwgMzIwMjksIAotICAgIDMyMDM4LCAzMjA0NywgMzIwNTMsIDMyMDU5LCAzMjA2NywgMzEwNzksIDMyMDcyLCAzMjA3OCwgMzIwODQsIDMxMDg1LCAKLSAgICAzMjA4OSwgMzIwOTQsIDMyMTAyLCAzMjExMCwgMzIxMTYsIDMyMTIzLCAzMjEyOSwgMzIxMzYsIDMyMTQzLCAzMjE0OSwgCi0gICAgMzIxNTcsIDMyMTY3LCAzMjE3NCwgMzIxNzksIDMyMTg1LCAzMjE5MCwgMzIxOTUsIDMyMjAyLCAzMjIxMSwgMzIyMTksIAotICAgIDMyMjI0LCAzMjIzMCwgMzIyMzcsIDMyMjQ1LCAzMjI1MSwgMzIyNTYsIDMyMjYyLCAzMjI3MSwgMjc5MzYsIDMyMjc4LCAKLSAgICAzMjI4MiwgMzIyODcsIDMyMjk2LCAzMjMwMSwgMzIzMDYsIDMyMzExLCAxMjM5OCwgMzIzMTksIDMyMzI0LCAzMjMyOSwgCi0gICAgMzIzMzQsIDMyMzM4LCAzMjM0MywgMzIzNDgsIDMyMzU1LCAzMjM2MCwgMzIzNjUsIDMyMzcwLCAzMTA5MCwgMjEyMDMsIAotICAgIDMyMzc2LCAyNTE5LCAyNDQsIDMyMzc5LCAzMjM4MiwgMzIzODYsIDMyMzkwLCAzMjQwMCwgMzI0MDgsIDMyNDEyLCAzMjQxOSwgCi0gICAgMzI0MjYsIDMyNDMwLCAzMjQzMywgMzI0MzksIDMyNDQ3LCAzMjQ1NSwgMzI0NTksIDMyNDYzLCAzMjQ2NiwgMzI0NzMsIAotICAgIDMyNDc3LCAzMjQ4MSwgMzI0ODgsIDMyNDk2LCAzMTAyNiwgMzI1MDMsIDMyNTExLCAxMDE1MSwgNjYwLCAzMDgsIDMyNTIzLCAKLSAgICAzMjUyOCwgMzI1MzMsIDMyNTM5LCAzMjU0NCwgMzI1NDksIDM3MDQsIDMyNTU0LCAzMjU1NywgMzI1NjIsIDMyNTY3LCAKLSAgICAzMjU3MiwgMzI1NzcsIDMyNTgyLCAzMjU4OSwgMjI1MTIsIDMyNTk0LCAzMjU5OSwgMzI2MDQsIDMyNjA5LCAzMjYxNCwgCi0gICAgMzI2MjAsIDMyNjI1LCAzMjYzMSwgMzEyNjEsIDMyNjM3LCAzMjY0MiwgMzI2NDgsIDMyNjU0LCAzMjY2NCwgMzI2NjksIAotICAgIDMyNjc0LCAzMjY3OCwgMzI2ODMsIDMyNjg4LCAzMjY5MywgMzI2OTgsIDMyNzExLCAzMjcxNiwgMjIyODksIDE2NjkyLCAKLSAgICAzNzEwLCAzMjcyMCwgMzI3MjUsIDMyNzMwLCAzMjczNiwgMzI3NDEsIDMyNzQ2LCAzMjc1MCwgMzI3NTUsIDMyNzYwLCAKLSAgICAzMjc2NiwgMzI3NzEsIDMyNzc2LCAxMzgyLCAzMjc4MCwgMzI3ODUsIDMyNzkwLCAzMjc5NSwgMzI3OTksIDMyODA0LCAKLSAgICAzMjgwOSwgMzI4MTQsIDMyODIwLCAzMjgyNiwgMzI4MzEsIDMyODM1LCAzMjgzOSwgMzI4NDQsIDMyODQ5LCAzMjg1NCwgCi0gICAgMzI4NTgsIDMyODY2LCAzMjg3MCwgMzI4NzYsIDMyODgwLCAzMjg4NywgMTY0ODUsIDMxMDM3LCAzMjg5MywgMzI5MDAsIAotICAgIDMyOTA4LCAzMjkxNSwgMzI5MjEsIDMyOTM0LCAzMjk0NiwgMzI5NTIsIDMyOTU2LCAyNzczLCAzMjk2MCwgMzI5NjQsIAotICAgIDMyNDY4LCAzMjk3MywgMzI5ODQsIDMyOTg5LCAzMjk5NCwgMzI5OTksIDMzMDAzLCAzMzAwOCwgMjI0MjIsIDMzMDEyLCAKLSAgICAzMzAxNiwgMzMwMjEsIDMxMDQzLCAyMTI4NywgMzMwMjUsIDMzMDMwLCAzMzAzNiwgMzMwNDEsIDMzMDQ1LCAzMzA0OSwgCi0gICAgMzMwNTIsIDMzMDU2LCAzMzA2MiwgMzMwNzMsIDMzMDg1LCAzMTA0OSwgMzMwOTAsIDMzMDkzLCAzMzA5NywgMzQ3LCAKLSAgICAzMzEwMiwgMzMxMDcsIDMzMTEyLCAzMzExNywgMzMxMjIsIDMzMTI3LCAzMzEzMywgMzMxMzgsIDMzMTQzLCAzMzE0OSwgCi0gICAgMzMxNTQsIDMzMTYwLCAzMzE2NSwgMzMxNzEsIDMzMTc2LCAzMzE4MSwgMzMxODYsIDMzMTkxLCAzMzE5NiwgMzMyMDEsIAotICAgIDMzMjA2LCAzMzIxMSwgMzMyMTcsIDMzMjIyLCAzMzIyNywgMzMyMzIsIDMzMjM3LCAzMzI0MiwgMzMyNDcsIDMzMjUyLCAKLSAgICAzMzI1OCwgMzMyNjQsIDMzMjY5LCAzMzI3NCwgMzMyNzksIDMzMjg0LCAzMzI4OSwgMzMyOTQsIDMzMjk5LCAzMzMwNCwgCi0gICAgMzMzMDksIDMzMzE0LCAzMzMxOSwgMzMzMjQsIDMzMzI5LCAzMzMzNCwgMzMzMzksIDMzMzQ0LCAzMzM0OSwgMzMzNTQsIAotICAgIDMzMzYwLCAzMTMsIDI2LCAzMzM2NSwgMzMzNjksIDMzMzczLCAzMzM4MSwgMzMzODUsIDMzMzg5LCAzMzM5MiwgMzMzOTUsIAotICAgIDMzMzk3LCAzMzQwMiwgMzM0MDYsIDMzNDExLCAzMzQxNSwgMzM0MjAsIDMzNDI0LCAzMzQyOSwgMzM0MzMsIDMzNDM2LCAKLSAgICAzMzQzOCwgMzM0NDIsIDMzNDQ3LCAzMzQ1MSwgMzM0NjIsIDMzNDY1LCAzMzQ2NywgMzM0NzEsIDMzNDgzLCAzMzQ5MiwgCi0gICAgMzM0OTYsIDMzNTAwLCAzMzUwNiwgMzM1MTEsIDMzNTIwLCAzMzUyNiwgMzM1MzEsIDMzNTM2LCAzMzU0MCwgMzM1NDUsIAotICAgIDMzNTUyLCAzMzU1NywgMzM1NjMsIDMzNTY4LCAzMzU3MiwgMzM1NzksIDI1NzAxLCAyNTcxMSwgMzM1ODMsIDMzNTg4LCAKLSAgICAzMzU5MywgMzM1OTgsIDMzNjA1LCAzMzYwOSwgMzM2MTYsIDgxMTMsIDMzNjIyLCAzMzYzMSwgMzM2MzksIDMzNjU0LCAKLSAgICAzMzY2OCwgMzM2NzYsIDMzNjg3LCAzMzY5NiwgMzM3MDEsIDcyMjcsIDMzNzExLCAzMzcxNiwgMzM3MjEsIDMzNzI1LCAKLSAgICAzMzcyOCwgMzM3MzIsIDMzNzM3LCAzMzc0MSwgMzM3NDgsIDMzNzUzLCAzMzc1OCwgODkxMiwgMzM3NjgsIDMzNzcwLCAKLSAgICAzMzc3MywgMzM3NzcsIDMzNzgzLCAzMzc4NywgMzM3OTIsIDMzNzk3LCAzMzgwMywgMzM4MDgsIDMzODE0LCAzMzgxOSwgCi0gICAgMzM4MjksIDMzODM4LCAzMzg0NiwgMzM4NTEsIDMzODU3LCAzMzg2MiwgMzM4NjksIDMzODczLCAzMzg4MSwgMzM4ODgsIAotICAgIDMzOTAxLCAzMzkwOSwgMzM5MTMsIDMzOTIzLCAzMzkyOCwgMzM5MzIsIDMzOTQwLCAzMzk0OCwgMzM5NTIsIDMzOTYxLCAKLSAgICAzMzk2NywgMzM5NzIsIDMzOTgwLCAzMzk5MCwgMzM5OTksIDM0MDA4LCAzNDAxNywgMzQwMjgsIDM0MDM2LCAzNDA0NywgCi0gICAgMzQwNTYsIDM0MDYzLCAzNDA2OSwgMzQwNzQsIDM0MDg1LCAzNDA5MCwgMzQwOTQsIDM0MDk3LCAzNDEwMSwgMzQxMDksIAotICAgIDM0MTE1LCAzNDEyMywgMzQxMzAsIDM0MTM2LCAzNDE0MSwgMzQxNDcsIDI0MTgsIDM0MTUxLCAzNDE1MywgMzQxNTgsIAotICAgIDM0MTYzLCAzNDE2OCwgMzQxNzEsIDM0MTczLCAzNDE3NywgMzQxODAsIDM0MTg3LCAzNDE5MSwgOTg4NCwgMzQxOTUsIAotICAgIDM0MjAxLCAzNDIxMSwgMzQyMTYsIDM0MjIyLCAzNDIyNiwgMzQyMzEsIDM0MjQ0LCAyNjA4NywgMzQyNTAsIDM0MjU5LCAKLSAgICAxNzQ2MiwgMzQyNjYsIDM0Mjc1LCAzMTY0NywgMzQyODMsIDM0Mjg4LCAzNDI5MiwgMzQzMDAsIDM0MzA3LCAzNDMxMiwgCi0gICAgMzQzMTYsIDM0MzIxLCAzNDMyNSwgMzQzMzMsIDM0MzM5LCAzNDM0NSwgMzQzNTAsIDM0MzU0LCAzNDM1NywgMzQzNjIsIAotICAgIDM0Mzc1LCAzNDM5MSwgMjI5NzksIDM0NDA4LCAzNDQyMCwgMzQ0MzcsIDM0NDQ5LCAzNDQ2MywgMjI5OTYsIDIzMDE1LCAKLSAgICAzNDQ3NSwgMzQ0ODcsIDI2ODAsIDM0NTAxLCAzNDUwNiwgMzQ1MTEsIDM0NTE2LCAzNDUyMCwgMzQ1MjcsIDM0NTM5LCAKLSAgICAzNDU0NSwgMzQ1NDgsIDM0NTU5LCAzNDU3MCwgMzQ1NzUsIDMyMDY0LCA2OTUsIDM0NTc5LCAzNDU4MywgMzQ1ODcsIAotICAgIDM0NTkwLCAzNDU5NSwgMzQ2MDAsIDM0NjA2LCAzNDYxMSwgMzQ2MTYsIDM0NjIyLCAzNDYyOCwgMzQ2MzMsIDM0NjM3LCAKLSAgICAzNDY0MiwgMzQ2NDcsIDM0NjUyLCAzNDY1NiwgMzQ2NTksIDM0NjY1LCAzNDY3MCwgMzQ2NzUsIDM0NjgwLCAzNDY4NCwgCi0gICAgMzQ2ODksIDM0Njk1LCAzNDcwMywgMjYzMjAsIDM0NzA4LCAzNDcxMywgMzQ3MjAsIDM0NzI2LCAzNDczMiwgMzQ3MzcsIAotICAgIDM0NzQ1LCAyMjUyMSwgMzQ3NTIsIDM0NzU3LCAzNDc2MiwgMzQ3NjcsIDM0NzcxLCAzNDc3NCwgMzQ3NzksIDM0NzgzLCAKLSAgICAzNDc4NywgMzQ3OTQsIDM0ODAwLCAzNDgwNiwgMzQ4MTIsIDM0ODE5LCAzNDgyNCwgMzQ4MzAsIDMzOTQzLCAzNDgzNCwgCi0gICAgMzQ4MzgsIDM0ODQzLCAzNDg1NiwgMzQ4NjEsIDM0ODY3LCAzNDg3NSwgMzQ4ODIsIDM0ODkwLCAzNDkwMCwgMzQ5MDYsIAotICAgIDM0OTEyLCAzNDkxOCwgMzQ5MjIsIDM0OTMxLCAzNDkzOSwgMzQ5NDYsIDM0OTUxLCAzNDk1NiwgMTA0MzcsIDM0OTYxLCAKLSAgICAzNDk2OSwgMzQ5NzYsIDM0OTgyLCAzNDk5MiwgMzQ5OTcsIDM1MDAzLCAzNTAxMSwgMzYwOCwgMzUwMTgsIDM1MDI1LCAKLSAgICAzNjE0LCAzNTAyOSwgMzUwMzQsIDM1MDQ1LCAzNTA1MiwgMzUwNTgsIDM1MDY3LCAzNTA3MSwgNDAxNSwgMzUwNzQsIAotICAgIDM1MDgxLCAzNTA4NywgMzUwOTMsIDM1MTAxLCAzNTExMSwgMjkwNDIsIDM1MTE4LCAzNTEyNiwgMzUxMzEsIDM1MTM3LCAKLSAgICAzNTE0MiwgMjU5NDcsIDM1MTQ4LCAzNTE1NSwgMzUxNjEsIDM1MTcwLCAyMzY2MCwgMzUxNzcsIDM1MTgyLCAzNTE4NiwgCi0gICAgMzUxOTQsIDM1MjAyLCA5NjAwLCA1ODk1LCAzNTIwOSwgMzUyMTMsIDM1MjE1LCAzNTIxOSwgMzUyMjQsIDM1MjI2LCAKLSAgICAzNTIzMiwgMzUyMzcsIDM1MjQyLCAzNTI0OSwgMzI1ODUsIDM1MjU1LCAzNTI2MCwgMzUyNjQsIDM1MjY5LCAzNTI3MywgCi0gICAgMzUyODIsIDM1Mjg2LCAzNTI5MiwgMzUyOTksIDM1MzA1LCAzNTMxMiwgMzUzMTcsIDM1MzI2LCAzNTMzMSwgMzUzMzUsIAotICAgIDM1MzQwLCAzNTM0NywgMzUzNTUsIDM1MzYzLCAzNTM2OCwgMjEzNDMsIDM1MzcyLCAzNTM3NSwgMzUzNzksIDM1MzgzLCAKLSAgICAzNTM4NywgMzUzOTAsIDM1MzkyLCAzNTQwMCwgMzU0MDQsIDM1NDExLCAzNTQxNSwgMzU0MTksIDM1NDI3LCAzNTQzNCwgCi0gICAgMzU0NDQsIDM1NDQ4LCAzNTQ1MiwgMzU0NjAsIDM1NDY4LCAzNTQ3NCwgMzU0NzksIDM1NDg4LCAxMzM1MCwgMzU0OTQsIAotICAgIDM1NTAzLCAzNTUwOCwgMzU1MTUsIDM1NTIzLCAzNTUzMSwgMzU1MzksIDM1NTQ2LCAzNTU1MywgMzU1NjAsIDM1NTY3LCAKLSAgICAzNTU3NCwgMzU1NzksIDM1NTg1LCAzNTYwMiwgMzU2MTAsIDM1NjIwLCAzNTYyOCwgMzU2MzUsIDQwNywgMzU2MzksIAotICAgIDM1NjQ1LCAzNTY0OSwgMzU2NTQsIDMzNjkyLCAzNTY2MCwgMzU2NjMsIDM1NjY3LCAzNTY3NSwgMzYxOSwgMzU2ODMsIAotICAgIDM1Njg5LCAzNTY5NSwgMzU3MDQsIDM1NzE0LCAzNTcyMSwgMzU3MjcsIDM2MjUsIDM2MzEsIDM1NzM2LCAzNTc0MywgCi0gICAgMzU3NTEsIDM1NzU2LCAzNTc2MCwgMzU3NjcsIDM1Nzc1LCAzNTc4MiwgMzU3ODgsIDM1Nzk3LCAzNTgwNywgMzU4MTMsIAotICAgIDM1ODIxLCAzNTgzMCwgMzU4MzcsIDM1ODQ1LCAzNTg1MiwgMjIwMTksIDM1ODU2LCAzNTg2MywgMzU4NjksIDM1ODc5LCAKLSAgICAzNTg4OCwgMzU4OTksIDM1OTAzLCAzNTkxMywgMzU5MTksIDM1OTI2LCAzNTkzNCwgMzU5NDMsIDM1OTUyLCAzNTk2MiwgCi0gICAgMzU5NzMsIDM1OTgwLCAzNTk4NSwgMzU5OTIsIDMwMjksIDM2MDAwLCAzNjAwNiwgMzYwMTEsIDM2MDE3LCAzNjAyMywgCi0gICAgMzYwMjgsIDM2MDQxLCAzNjA1NCwgMzYwNjcsIDM2MDc0LCAzNjA4MCwgMzYwODgsIDM2MDk2LCAzNjEwMSwgMzYxMDUsIAotICAgIDE0NjksIDM2MTA5LCAzNjExNCwgMzYxMTksIDM2MTI0LCAzNjEyOSwgMzYxMzUsIDM2MTQwLCAzNjE0NSwgMzYxNTAsIAotICAgIDM2MTU1LCAzNjE2MCwgMzYxNjUsIDM2MTcwLCAzNjE3NiwgMzYxODIsIDM2MTg3LCAzNjE5MiwgMzYxOTgsIDM2MjAzLCAKLSAgICAzNjIwOCwgMzYyMTMsIDM2MjE5LCAzNjIyNCwgMzYyMjksIDM2MjM0LCAzNjIzOSwgMzYyNDUsIDM2MjUwLCAzNjI1NSwgCi0gICAgMzYyNjEsIDM2MjY2LCAzNjI3MSwgMzYyNzYsIDM2MjgxLCAzNjI4NiwgMzYyOTIsIDM2Mjk3LCAzNjMwMywgMzYzMDgsIAotICAgIDM2MzE0LCAzNjMxOSwgMzYzMjQsIDM2MzI5LCAzNjMzNSwgMzYzNDEsIDM2MzQ3LCAzNjM1MywgMzYzNTksIDM2MzY1LCAKLSAgICAzNjM3MSwgMzYzNzcsIDM2MzgyLCAzNjM4NywgMzYzOTMsIDM2Mzk4LCAzNjQwMywgMzY0MDgsIDM2NDEzLCAzNjQxOCwgCi0gICAgMzY0MjMsIDM2NDI4LCAzNjQzNCwgMzY0MzksIDM2NDQ0LCAzNjQ1MCwgMzY0NTYsIDEwMSwgMzY0NjEsIDM2NDYzLCAKLSAgICAzNjQ2NywgMzY0NzEsIDM2NDc1LCAzNjQ4MCwgMzY0ODQsIDk1MjEsIDM2NDg4LCAzNjQ5NCwgMTc0MSwgNjI4MCwgMzY1MDAsIAotICAgIDM2NTAzLCAzNjUwOCwgMzY1MTIsIDM2NTE3LCAzNjUyMSwgMzY1MjUsIDM2NTMwLCAxMDIzOCwgMzY1MzQsIDM2NTM4LCAKLSAgICAzNjU0MiwgMzY1NDYsIDE1MzcyLCAzNjU1MSwgMzY1NTUsIDM2NTYwLCAzNjU2NSwgMzY1NzAsIDM2NTc0LCAzNjU4MSwgCi0gICAgMjYxMTEsIDM2NTg3LCAzNjU5MCwgMzY1OTQsIDM2NTk5LCAzNjYwNSwgMzY2MDksIDM2NjE3LCAzNjYyMywgMzY2MjgsIAotICAgIDM2NjMyLCAzNjYzOCwgMzY2NDIsIDM2NjQ2LCAzNDYyLCAzNDY3LCAyOTIzNCwgMzY2NDksIDM2NjUzLCAzNjY1NywgCi0gICAgMzY2NjEsIDM2NjY5LCAzNjY3NiwgMzY2ODAsIDM2Njg3LCAzNjY5MiwgMzE3LCAzNjY5NywgMzY3MDEsIDM2NzA3LCAKLSAgICAzNjcxOSwgMzY3MjUsIDM2NzMxLCAzNjczNSwgMzY3NDEsIDM2NzUwLCAzNjc1NCwgMzY3NTgsIDM2NzYzLCAzNjc2OSwgCi0gICAgMzY3NzQsIDM2Nzc4LCAzNjc4MywgMzY3ODcsIDM2NzkxLCAzNjc5OCwgMzY4MDQsIDM2ODA5LCAzNjgyNCwgMzY4MzksIAotICAgIDM2ODU0LCAzNjg3MCwgMzY4ODgsIDEwMTg4LCAzNjkwMiwgMzY5MDksIDM2OTEzLCAzNjkxNiwgMzY5MjUsIDM2OTMwLCAKLSAgICAzNjkzNCwgMzY5NDIsIDMzODk0LCAzNjk1MCwgMzY5NTQsIDM2OTY0LCAzNjk3NSwgMjkyMDQsIDM2OTg4LCAzNjk5MiwgCi0gICAgMzcwMDEsIDM3MDA5LCA5Nzc4LCAxNDkwMCwgMzcwMTMsIDIyNDM0LCAzNzAxNiwgMzAxNTIsIDM3MDIxLCA5Nzc3LCAKLSAgICAzNzAyNiwgMzcwMzIsIDM3MDM3LCAzNzA0MywgMzcwNDgsIDM3MDU0LCAzNzA1OSwgMzcwNjUsIDM3MDcwLCAzNzA3NiwgCi0gICAgMzcwODIsIDM3MDg4LCAzNzA5MywgMzcwNDksIDM3MDU1LCAzNzA2MCwgMzcwNjYsIDM3MDcxLCAzNzA3NywgMzcwODMsIAotICAgIDgxMjYsIDM4NzQsIDM3MDk3LCAzNzEwNSwgMzcxMDksIDM3MTEyLCAzNzExNiwgMzcxMjEsIDM3MTI2LCAzNzEzMiwgCi0gICAgMzcxMzgsIDM3MTQzLCAzNzE0NywgMjU5NTksIDM3MTUxLCAzNzE1NSwgMzcxNjEsIDM3MTY1LCA5MDQyLCAzNzE3NCwgCi0gICAgMzcxODEsIDM3MTg1LCAxMTg2OCwgMzcxOTIsIDM3MTk4LCAzNzIwMywgMzcyMTAsIDM3MjE3LCAzNzIyNCwgMjg1NTAsIAotICAgIDgwNDksIDM3MjMxLCAzNzIzOCwgMzcyNDUsIDM3MjUxLCAzNzI1NiwgMzcyNjMsIDM3Mjc0LCAzNzI4MCwgMzcyODUsIAotICAgIDM3MjkwLCAzNzI5NSwgMzczMDIsIDM3MDUwLCAzNzMwNiwgMzczMTYsIDM3MzI3LCAzNzMzMywgMzczMzgsIDM3MzQzLCAKLSAgICAzNzM0OCwgMzczNTMsIDM3MzU4LCAzNzM2MiwgMzczNjYsIDM3MzcyLCAzNzM4MCwgMjMxOSwgODY1LCAxMDI1NCwgMTAyNjYsIAotICAgIDEwMjcxLCAxMDI3NywgMzczODksIDEwMjgyLCAxMDI4NywgMTAyOTMsIDM3Mzk0LCAzNzQwNCwgMzc0MDgsIDEwMjk4LCAKLSAgICAzNzQxMywgMTY4OTAsIDM3NDE2LCAzNzQyMSwgMzc0MjUsIDM3NDMwLCAzNzQzNSwgMzc0NDIsIDM3NDQ5LCAzNzQ1MywgCi0gICAgMzc0NTYsIDM3NDY0LCAxMDIwMSwgMzc0NzEsIDM3NDc0LCAzNzQ4MCwgMzc0OTAsIDU5MjksIDM3NDk5LCAzNzUwMywgCi0gICAgMzc1MTEsIDM3NTE1LCAzNzUyNSwgMzc1MzEsIDM3NTQyLCAzNzU0OCwgMzc1NTQsIDM3NTU5LCAzNzU2NSwgMzc1NzEsIAotICAgIDM3NTc3LCAzNzU4MiwgMzc1ODUsIDM3NTkyLCAzNzU5OCwgMzc2MDMsIDM3NjEwLCAzNzYxNywgMzc2MjEsIDM3NjMxLCAKLSAgICAzNzY0NCwgMzc2NTMsIDM3NjYyLCAzNzY3MywgMzc2ODYsIDM3Njk3LCAzNzcwNiwgMzc3MTcsIDM3NzIyLCAzNzczMSwgCi0gICAgMzc3MzYsIDEwMzAzLCAzNzc0MiwgMzc3NDksIDM3NzU3LCAzNzc2MiwgMzc3NjYsIDM3NzczLCAzNzc4MCwgMzgyOSwgMTYsIAotICAgIDM3Nzg0LCAzNzc4OSwgMTY3NDQsIDM3NzkzLCAzNzc5NiwgMzc3OTksIDI4MDU2LCAzNzgwMywgMjg1NTksIDM3ODExLCAKLSAgICAzNzgxNSwgMzc4MTksIDM3ODIyLCAzNzgyOCwgMzcwNzIsIDM3ODM0LCAzNzg0MiwgMzc4NDgsIDM3ODU1LCAyODAzOSwgCi0gICAgMzc4NTksIDI4MjMzLCAzNzg2MywgMzc4NzIsIDM3ODc4LCAzNzg4NCwgMzc4ODksIDM3ODkzLCAzNzg5OSwgMzc5MDMsIAotICAgIDM3OTExLCAzNzkxOSwgMjYxNzcsIDM3OTI1LCAzNzkzMiwgMzc5MzgsIDM3OTQzLCAzNzk0OCwgMzc5NTIsIDM3OTU4LCAKLSAgICAzNzk2MywgMzc5NjksIDQwNTYsIDc5MSwgMzc5NzYsIDM3OTgwLCAzNzk4MywgMTUyNjIsIDM3OTk1LCAzNTgyNiwgMzgwMDYsIAotICAgIDM4MDA5LCAzODAxNiwgMzgwMjAsIDM4MDI2LCAzODAzMCwgMzgwMzYsIDM4MDQxLCAzODA0NywgMzgwNTIsIDM4MDU3LCAKLSAgICAzODA2MSwgMzgwNjUsIDM4MDcwLCAzODA3NSwgMzgwODUsIDM4MDkxLCAzODEwNCwgMzgxMTAsIDM4MTE2LCAzODEyMywgCi0gICAgMzgxMjgsIDM4MTM0LCAzODEzOSwgMTY2MzAsIDE0NzIsIDEwMTksIDMxMTkzLCAzMTE5OSwgMzgxNDQsIDMxMjA1LCAKLSAgICAzMTIxOCwgMzEyMjQsIDMxMjMwLCAzODE1MCwgMzEyMzYsIDMxMjQyLCAzODE1NiwgMzgxNjIsIDIyLCAzODE3MCwgMzgxNzcsIAotICAgIDM4MTgxLCAzODE4NSwgMzgxOTMsIDMxOTUzLCAzODE5NywgMzgyMDEsIDM4MjA4LCAzODIxMywgMzgyMTcsIDM4MjIyLCAKLSAgICAzODIyOCwgMzgyMzMsIDM4MjM5LCAzODI0NCwgMzgyNDgsIDM4MjUyLCAzODI1NiwgMzgyNjEsIDM4MjY1LCAzODI3MCwgCi0gICAgMzgyNzQsIDM4MjgxLCAzODI4NiwgMzgyOTAsIDM4Mjk1LCAzODI5OSwgMzgzMDQsIDM4MzA4LCAzODMxMywgMzgzMTksIAotICAgIDE1NDgyLCAxNTQ4NywgMzgzMjQsIDM4MzI4LCAzODMzMSwgMzgzMzUsIDIxMTcwLCAzODM0MCwgMzgzNDQsIDM4MzUwLCAKLSAgICAzODM1NywgMzgzNjIsIDM4MzcyLCAzODM3NywgMzgzODUsIDM4Mzg5LCAzODM5MiwgMzE5NjgsIDM4Mzk2LCA0MTA5LCAKLSAgICAzODQwMSwgMzg0MDYsIDM4NDEwLCAzODQxNSwgMzg0MTksIDM4NDI0LCAxMzM2OCwgMzg0MzUsIDM4NDM5LCAzODQ0MiwgCi0gICAgMzg0NDcsIDM4NDUxLCAzODQ1NSwgMzg0NTgsIDM4NDYyLCA4MTQ1LCAxMzM4NCwgMzg0NjUsIDM4NDY4LCAzODQ3NCwgCi0gICAgMzg0NzksIDM4NDg1LCAzODQ5MCwgMzg0OTYsIDM4NTAxLCAzODUwNywgMzg1MTIsIDM4NTE4LCAzODUyNCwgMzg1MzAsIAotICAgIDM4NTM1LCAzODUzOSwgMzg1NDMsIDM4NTUyLCAzODU2OCwgMzg1ODQsIDM4NTk0LCAyNzk0NiwgMzg2MDEsIDM4NjA1LCAKLSAgICAzODYxMCwgMzg2MTUsIDM4NjE5LCAzODYyMywgMzU5NDcsIDM4NjI5LCAzODYzNCwgMzg2MzgsIDM4NjQ1LCAzODY1MCwgCi0gICAgMzg2NTQsIDM4NjU4LCAyNjk3OSwgMzg2NjQsIDIxNDM4LCAzODY2OSwgMzg2NzYsIDM4Njg0LCAzODY5MCwgMzg2OTcsIAotICAgIDM4NzA1LCAzODcxMSwgMzg3MTUsIDM4NzIxLCAzODcyOSwgMzg3MzMsIDM4NzQyLCA5NTAyLCAzODc1MCwgMzg3NTQsIAotICAgIDM4NzYyLCAzODc2OSwgMzg3NzQsIDM4Nzc5LCAzODc4MywgMzg3ODYsIDM4NzkwLCAzODc5MywgMzg3OTcsIDM4ODA0LCAKLSAgICAzODgwOSwgMzg4MTUsIDI2Mzk4LCAzMTI1NiwgMzg4MTksIDM4ODI2LCAzODgzMiwgMzg4MzgsIDM4ODQzLCAzODg0NiwgCi0gICAgMzg4NDgsIDM4ODU1LCAzODg2MiwgMzg4NjgsIDM4ODcyLCAzODg3NSwgMzg4NzksIDM4ODgzLCAzODg4NywgMzg4OTIsIAotICAgIDM4ODk2LCAzODkwMCwgMzg5MDMsIDM4OTA3LCAzODkyMSwgMjMwNDUsIDM4OTQwLCAzODk1MywgMzg5NjYsIDM4OTc5LCAKLSAgICAyMzA2MywgMzg5OTQsIDEwNDkwLCAzOTAwOSwgMzkwMTUsIDM5MDE5LCAzOTAyMywgMzkwMzAsIDM5MDM1LCAzOTAzOSwgCi0gICAgMzkwNDYsIDM5MDUyLCAzOTA1NywgMzkwNjMsIDM5MDczLCAzOTA4NSwgMzkwOTYsIDM5MTAxLCAzOTEwOCwgMzkxMTIsIAotICAgIDM5MTE2LCAzOTExOSwgMTU4NzgsIDM2NzcsIDM5MTI3LCAxNTUwOSwgMzkxNDAsIDM5MTQ3LCAzOTE1MSwgMzkxNTUsIAotICAgIDM5MTYwLCAzOTE2NSwgMzkxNzEsIDM5MTc1LCAzOTE3OSwgMzkxODIsIDc3NDIsIDE1NTIwLCAzOTE4NywgMzkxOTEsIAotICAgIDM5MTk3LCAzOTIwNiwgMzkyMTEsIDM5MjE4LCAzNTgwMywgMzkyMjQsIDM5MjI5LCAzOTIzMywgMzkyMzgsIDM5MjQ1LCAKLSAgICAzOTI0OSwgMzkyNTIsIDM5MjU2LCAzOTI2MSwgMTQ1NTIsIDM5MjY4LCAzOTI3NSwgMTA2NiwgMzkyNzksIDM5Mjg0LCAKLSAgICAzOTI4OSwgMzkyOTUsIDM5MzAwLCAzOTMwNSwgMzkzMDksIDM5MzE5LCAzOTMyNCwgMzkzMzAsIDM5MzM1LCAzOTM0MSwgCi0gICAgMzkzNDYsIDM5MzUyLCAzOTM2MiwgMzkzNjcsIDM5MzcyLCAzOTM3NiwgNzIyOSwgNzI0MSwgMzkzODEsIDM5Mzg0LCAKLSAgICAzOTM5MSwgMzkzOTcsIDM0MDU5LCAzNDA2NiwgMzk0MDYsIDM5NDEwLCAzMjAxNiwgMzk0MTgsIDM5NDI5LCAzOTQzNywgCi0gICAgMzU5OTUsIDM5NDQ0LCAzOTQ0OSwgMzk0NTQsIDM5NDY1LCAzOTQ3MiwgMzk0ODMsIDMyMDQwLCAyMTQ0NCwgMzk0OTEsIAotICAgIDczNSwgMzk0OTYsIDM5NTAyLCAyODAzMCwgMzk1MDgsIDM5NTEzLCAzOTUyMywgMzk1MzIsIDM5NTM5LCAzOTU0NSwgCi0gICAgMzk1NDksIDM5NTUyLCAzOTU1OSwgMzk1NjUsIDM5NTcyLCAzOTU3OCwgMzk1ODgsIDM5NTk2LCAzOTYwMiwgMzk2MDgsIAotICAgIDM5NjEzLCAzOTYxNywgMzk2MjQsIDM5NjMwLCAzOTYzNywgMzg4ODgsIDUzNSwgMTM4MDUsIDM5NjQzLCAzOTY0OCwgCi0gICAgMzk2NTEsIDM5NjU3LCAzOTY2NSwgMTM5NiwgMzk2NzAsIDM5Njc0LCAzOTY3OSwgMzk2ODYsIDM5NjkyLCAzOTY5NiwgCi0gICAgMzk3MDAsIDM5NzA1LCAzOTcxNCwgMzk3MjEsIDM5NzMxLCAzOTczNywgMjgwNzQsIDM5NzU0LCAzOTc2MywgMzk3NzEsIAotICAgIDM5Nzc3LCAzOTc4MiwgMzk3ODksIDM5Nzk1LCAzOTgwMywgMzk4MTIsIDM5ODIwLCAzOTgyNCwgMzk4MjksIDM5ODM3LCAKLSAgICAzMjA0OSwgMzk4NDMsIDM5ODYyLCAxNTgxMSwgMzk4NzYsIDM5ODkyLCAzOTkwNiwgMzk5MTIsIDM5OTE3LCAzOTkyMiwgCi0gICAgMzk5MjcsIDM5OTMzLCAzMjA1NSwgMzk5MzgsIDM5OTQ1LCAzOTk1MCwgMzk5NTQsIDM0NSwgMjkzNiwgMzk5NjEsIDM5OTY2LCAKLSAgICAzOTk3MSwgMjczMDUsIDM5NzkyLCAzOTk3NSwgMzk5ODAsIDM5OTg4LCAzOTk5MiwgMzk5OTUsIDQwMDAxLCA0MDAwNywgCi0gICAgNDAwMTEsIDI4MTI5LCA0MDAxNCwgNDAwMTksIDQwMDIzLCA0MDAyNiwgNDAwMzEsIDQwMDM1LCA0MDA0MCwgNDAwNDUsIAotICAgIDQwMDQ5LCA0MDA1NCwgNDAwNTgsIDQwMDYyLCAyMTE2NiwgMjExNzcsIDQwMDY2LCA0MDA3MSwgNDAwNzcsIDI2OTM2LCAKLSAgICA0MDA4MiwgNDAwODYsIDIxMjUzLCAxNjA1OSwgNDAwODksIDQwMDk0LCA0MDA5OSwgNDAxMDQsIDQwMTA5LCA0MDExNCwgCi0gICAgNDAxMTksIDQwMTI0LCA0NDcsIDQzLCAzMTI3NCwgMzEyNzksIDMxMjg0LCAzMTI5MCwgMzEyOTUsIDMxMzAwLCA0MDEyOSwgCi0gICAgMzEzMDQsIDQwMTMzLCA0MDEzNywgNDAxNDEsIDMxMzA5LCAzMTMxNSwgNDAxNTUsIDMxMzI2LCAzMTMzMSwgNDAxNjMsIAotICAgIDQwMTY4LCAzMTMzNywgNDAxNzMsIDQwMTc4LCA0MDE4MywgNDAxODgsIDQwMTk0LCA0MDIwMCwgNDAyMDYsIDMxMzU0LCAKLSAgICA0MDIxOSwgNDAyMjUsIDMxMzU4LCA0MDIyOSwgMzEzNjMsIDQwMjM0LCAzMTM2OCwgMzEzNzMsIDQwMjM3LCA0MDI0MiwgCi0gICAgNDAyNDYsIDMwOTIzLCA0MDI1MiwgMTM1OTIsIDQwMjU5LCA0MDI2NCwgMzEzNzgsIDQwMjY4LCA0MDI3MywgNDAyNzgsIAotICAgIDQwMjgzLCA0MDI4NywgNDAyOTIsIDQwMjk3LCA0MDMwMywgNDAzMDgsIDQwMzEzLCA0MDMxOSwgNDAzMjUsIDQwMzMwLCAKLSAgICA0MDMzNCwgNDAzMzksIDQwMzQ0LCA0MDM0OSwgNDAzNTMsIDQwMzU4LCA0MDM2MywgNDAzNjgsIDQwMzc0LCA0MDM4MCwgCi0gICAgNDAzODYsIDQwMzkxLCA0MDM5NSwgNDA0MDAsIDQwNDA0LCAzMTM4MiwgMzEzODcsIDMxMzkyLCA0MDQwOCwgNDA0MTIsIAotICAgIDQwNDE2LCAzMTM5NywgMzE0MDMsIDMxNDA5LCAzMTQyMSwgNDA0MjgsIDI1OTk2LCA0MDQzMiwgNDA0MzYsIDQwNDQxLCAKLSAgICA0MDQ0NiwgNDA0NTEsIDQwNDU2LCA0MDQ2MCwgNDA0NjQsIDQwNDc0LCA0MDQ3OSwgNDA0ODQsIDQwNDg4LCA0MDQ5MiwgCi0gICAgNDA0OTUsIDQwNTAzLCAzMTQ2OSwgNDA1MDgsIDE0NzksIDQwNTE0LCA0MDUyMiwgNDA1MzEsIDQwNTM1LCA0MDUzOSwgCi0gICAgNDA1NDcsIDQwNTUzLCA0MDU2MSwgNDA1NzcsIDQwNTgxLCA0MDU4NSwgNDA1OTAsIDQwNjA1LCAzMTUwNiwgMTc0OSwgCi0gICAgMTIwNDgsIDQwNjA5LCAxMzc4LCA0MDYyMSwgNDA2MjIsIDQwNjMwLCA0MDYzNywgNDA2NDIsIDQwNjQ5LCA0MDY1NCwgCi0gICAgOTM3MiwgMTExNCwgMTAzMjUsIDQwNjYxLCA0MDY2NiwgNDA2NjksIDQwNjcyLCA0MDY4MSwgMTI4NiwgNDA2ODYsIDM5MDM2LCAKLSAgICA0MDY5MywgNDA2OTgsIDIyNDg2LCAyNTU3LCA0MDcwMiwgMTA3MzQsIDQwNzEyLCA0MDcxOCwgMjMzNywgMjM0NywgNDA3MjcsIAotICAgIDQwNzM2LCA0MDc0NiwgNDA3NTcsIDMyOTMsIDM0MjEyLCAxMDM3NywgMzgwNywgMTY2NjgsIDEyOTEsIDQwNzYyLCA0MDc3MCwgCi0gICAgNDA3NzcsIDQwNzgyLCA0MDc4NiwgNDA3OTAsIDIzODU4LCAxMDQwNCwgNDA3OTgsIDQwODA3LCA0MDgxNiwgNDA4MjQsIAotICAgIDQwODMxLCA0MDg0MiwgNDA4NDcsIDQwODYwLCA0MDg3MywgNDA4ODUsIDQwODk3LCA0MDkwOSwgNDA5MjIsIDQwOTMzLCAKLSAgICA0MDk0NCwgNDA5NTQsIDQwOTYyLCA0MDk3MCwgNDA5ODIsIDQwOTk0LCA0MTAwNSwgNDEwMTQsIDQxMDIyLCA0MTAyOSwgCi0gICAgNDEwNDEsIDQxMDQ4LCA0MTA1NywgNDEwNjQsIDQxMDc3LCA0MTA4MiwgNDEwOTIsIDQxMDk3LCA0MTEwMywgNDExMDgsIAotICAgIDM3MTgyLCA0MTExMiwgNDExMTksIDQxMTIzLCA0MTEzMCwgNDExMzgsIDI1MTgsIDQxMTQ1LCA0MTE1NiwgNDExNjYsIAotICAgIDQxMTc1LCA0MTE4MywgNDExOTMsIDQxMjAxLCA0MTIxMSwgNDEyMjAsIDQxMjI1LCA0MTIzMSwgNDEyMzcsIDM3MDksIAotICAgIDQxMjQ4LCA0MTI1OCwgNDEyNjcsIDQxMjc2LCA0MTI4NiwgNDEyOTQsIDQxMzAzLCA0MTMwOCwgNDEzMTMsIDQxMzE4LCAKLSAgICAxNzA1LCAzNywgNDEzMjYsIDQxMzM0LCA0MTM0NSwgNDEzNTYsIDE2MzQzLCA0MTM2NiwgNDEzNzAsIDQxMzc3LCA0MTM4MywgCi0gICAgNDEzODgsIDQxMzkyLCA0MTQwMywgNDE0MTMsIDQxNDIyLCA0MTQzMywgMTY3MTcsIDE2NzIyLCA0MTQzOCwgNDE0NDcsIAotICAgIDQxNDUyLCA0MTQ2MiwgNDE0NjcsIDQxNDc1LCA0MTQ4MywgNDE0OTAsIDQxNDk2LCA3MDc4LCAyMjgsIDQxNTAwLCA0MTUwNiwgCi0gICAgNDE1MTEsIDQxNTE0LCAyMTE3LCAzOTE1MiwgNDE1MjIsIDQxNTI2LCA0MTUyOSwgMTUxMiwgNDE1MzUsIDEzOTY3LCAxMjk2LCAKLSAgICA0MTU0MCwgNDE1NTMsIDQxNTY3LCAyNjQzLCA0MTU4NSwgNDE1OTcsIDQxNjA5LCAyNjU3LCAyNjc0LCA0MTYyMywgNDE2MzYsIAotICAgIDI2ODksIDQxNjUwLCA0MTY2MiwgMjcwNCwgNDE2NzYsIDEzMDIsIDEzMDgsIDEzMTQsIDEwNjUyLCA0MTY4MSwgNDE2ODYsIAotICAgIDQxNjkxLCA0MTY5NSwgNDE3MTAsIDQxNzI1LCA0MTc0MCwgNDE3NTUsIDQxNzcwLCA0MTc4NSwgNDE4MDAsIDQxODE1LCAKLSAgICA0MTgzMCwgNDE4NDUsIDQxODYwLCA0MTg3NSwgNDE4OTAsIDQxOTA1LCA0MTkyMCwgNDE5MzUsIDQxOTUwLCA0MTk2NSwgCi0gICAgNDE5ODAsIDQxOTk1LCA0MjAxMCwgNDIwMjUsIDQyMDQwLCA0MjA1NSwgNDIwNzAsIDQyMDg1LCA0MjEwMCwgNDIxMTUsIAotICAgIDQyMTMwLCA0MjE0NSwgNDIxNjAsIDQyMTc1LCA0MjE5MCwgNDIyMDUsIDQyMjIwLCA0MjIzNSwgNDIyNTAsIDQyMjY1LCAKLSAgICA0MjI4MCwgNDIyOTUsIDQyMzEwLCA0MjMyNSwgNDIzNDAsIDQyMzU1LCA0MjM3MCwgNDIzODUsIDQyNDAwLCA0MjQxNSwgCi0gICAgNDI0MzAsIDQyNDQ1LCA0MjQ2MCwgNDI0NzUsIDQyNDkwLCA0MjUwNSwgNDI1MjAsIDQyNTM1LCA0MjU1MCwgNDI1NjUsIAotICAgIDQyNTgwLCA0MjU5NSwgNDI2MTAsIDQyNjI1LCA0MjY0MCwgNDI2NTUsIDQyNjcwLCA0MjY4NSwgNDI3MDAsIDQyNzE1LCAKLSAgICA0MjczMCwgNDI3NDUsIDQyNzYwLCA0Mjc3NSwgNDI3OTAsIDQyODA1LCA0MjgyMCwgNDI4MzUsIDQyODUwLCA0Mjg2NSwgCi0gICAgNDI4ODAsIDQyODk1LCA0MjkxMCwgNDI5MjUsIDQyOTQwLCA0Mjk1NSwgNDI5NzAsIDQyOTg1LCA0MzAwMCwgNDMwMTUsIAotICAgIDQzMDMwLCA0MzA0NSwgNDMwNjAsIDQzMDc1LCA0MzA5MCwgNDMxMDUsIDQzMTIwLCA0MzEzNSwgNDMxNTAsIDQzMTY1LCAKLSAgICA0MzE4MCwgNDMxOTUsIDQzMjEwLCA0MzIyNSwgNDMyNDAsIDQzMjU1LCA0MzI3MCwgNDMyODUsIDQzMzAwLCA0MzMxNSwgCi0gICAgNDMzMzAsIDQzMzQ1LCA0MzM2MCwgNDMzNzUsIDQzMzkwLCA0MzQwNSwgNDM0MjAsIDQzNDM1LCA0MzQ1MCwgNDM0NjUsIAotICAgIDQzNDgwLCA0MzQ5NSwgNDM1MTAsIDQzNTI1LCA0MzU0MCwgNDM1NTUsIDQzNTcwLCA0MzU4NSwgNDM2MDAsIDQzNjE1LCAKLSAgICA0MzYzMCwgNDM2NDUsIDQzNjYwLCA0MzY3NSwgNDM2OTAsIDQzNzA1LCA0MzcyMCwgNDM3MzUsIDQzNzUwLCA0Mzc2NSwgCi0gICAgNDM3ODAsIDQzNzk1LCA0MzgxMCwgNDM4MjUsIDQzODQwLCA0Mzg1NSwgNDM4NzAsIDQzODg1LCA0MzkwMCwgNDM5MTUsIAotICAgIDQzOTMwLCA0Mzk0NSwgNDM5NjAsIDQzOTc1LCA0Mzk5MCwgNDQwMDUsIDQ0MDIwLCA0NDAzNSwgNDQwNTAsIDQ0MDY1LCAKLSAgICA0NDA4MCwgNDQwOTUsIDQ0MTEwLCA0NDEyNSwgNDQxNDAsIDQ0MTU1LCA0NDE3MCwgNDQxODUsIDQ0MjAwLCA0NDIxNSwgCi0gICAgNDQyMzAsIDQ0MjQ1LCA0NDI2MCwgNDQyNzUsIDQ0MjkwLCA0NDMwNSwgNDQzMjAsIDQ0MzM1LCA0NDM1MCwgNDQzNjUsIAotICAgIDQ0MzgwLCA0NDM5NSwgNDQ0MTAsIDQ0NDI1LCA0NDQ0MCwgNDQ0NTUsIDQ0NDcwLCA0NDQ4NSwgNDQ1MDAsIDQ0NTE1LCAKLSAgICA0NDUzMCwgNDQ1NDUsIDQ0NTYwLCA0NDU3NSwgNDQ1OTAsIDQ0NjA1LCA0NDYyMCwgNDQ2MzUsIDQ0NjUwLCA0NDY2NSwgCi0gICAgNDQ2ODAsIDQ0Njk1LCA0NDcxMCwgNDQ3MjUsIDQ0NzQwLCA0NDc1NSwgNDQ3NzAsIDQ0Nzg1LCA0NDgwMCwgNDQ4MTUsIAotICAgIDQ0ODMwLCA0NDg0NSwgNDQ4NjAsIDQ0ODc1LCA0NDg5MCwgNDQ5MDUsIDQ0OTIwLCA0NDkzNSwgNDQ5NTAsIDQ0OTY1LCAKLSAgICA0NDk4MCwgNDQ5OTUsIDQ1MDEwLCA0NTAyNSwgNDUwNDAsIDQ1MDU1LCA0NTA3MCwgNDUwODUsIDQ1MTAwLCA0NTExNSwgCi0gICAgNDUxMzAsIDQ1MTQ1LCA0NTE2MCwgNDUxNzUsIDQ1MTkwLCA0NTIwNSwgNDUyMjAsIDQ1MjM1LCA0NTI1MCwgNDUyNjUsIAotICAgIDQ1MjgwLCA0NTI5NSwgNDUzMTAsIDQ1MzI1LCA0NTM0MCwgNDUzNTUsIDQ1MzcwLCA0NTM4NSwgNDU0MDAsIDQ1NDE1LCAKLSAgICA0NTQzMCwgNDU0NDUsIDQ1NDYwLCA0NTQ3NSwgNDU0OTAsIDQ1NTA1LCA0NTUyMCwgNDU1MzUsIDQ1NTUwLCA0NTU2NSwgCi0gICAgNDU1ODAsIDQ1NTk1LCA0NTYxMCwgNDU2MjUsIDQ1NjQwLCA0NTY1NSwgNDU2NzAsIDQ1Njg1LCA0NTcwMCwgNDU3MTUsIAotICAgIDQ1NzMwLCA0NTc0NSwgNDU3NjAsIDQ1Nzc1LCA0NTc5MCwgNDU4MDUsIDQ1ODIwLCA0NTgzNSwgNDU4NTAsIDQ1ODY1LCAKLSAgICA0NTg4MCwgNDU4OTUsIDQ1OTEwLCA0NTkyNSwgNDU5NDAsIDQ1OTU1LCA0NTk3MCwgNDU5ODUsIDQ2MDAwLCA0NjAxNSwgCi0gICAgNDYwMzAsIDQ2MDQ1LCA0NjA2MCwgNDYwNzUsIDQ2MDkwLCA0NjEwNSwgNDYxMjAsIDQ2MTM1LCA0NjE1MCwgNDYxNjUsIAotICAgIDQ2MTgwLCA0NjE5NSwgNDYyMTAsIDQ2MjI1LCA0NjI0MCwgNDYyNTUsIDQ2MjcwLCA0NjI4NSwgNDYzMDAsIDQ2MzE1LCAKLSAgICA0NjMzMCwgNDYzNDUsIDQ2MzYwLCA0NjM3NSwgNDYzOTAsIDQ2NDA1LCA0NjQyMCwgNDY0MzUsIDQ2NDUwLCA0NjQ2NSwgCi0gICAgNDY0ODAsIDQ2NDk1LCA0NjUxMCwgNDY1MjUsIDQ2NTQwLCA0NjU1NSwgNDY1NzAsIDQ2NTg1LCA0NjYwMCwgNDY2MTUsIAotICAgIDQ2NjMwLCA0NjY0NSwgNDY2NjAsIDQ2Njc1LCA0NjY5MCwgNDY3MDUsIDQ2NzIwLCA0NjczNSwgNDY3NTAsIDQ2NzY1LCAKLSAgICA0Njc4MCwgNDY3OTUsIDQ2ODEwLCA0NjgyNSwgNDY4NDAsIDQ2ODU1LCA0Njg3MCwgNDY4ODUsIDQ2OTAwLCA0NjkxNSwgCi0gICAgNDY5MzAsIDQ2OTQ1LCA0Njk2MCwgNDY5NzUsIDQ2OTkwLCA0NzAwNSwgNDcwMjAsIDQ3MDM1LCA0NzA1MCwgNDcwNjUsIAotICAgIDQ3MDgwLCA0NzA5NSwgNDcxMTAsIDQ3MTI1LCA0NzE0MCwgNDcxNTUsIDQ3MTcwLCA0NzE4NSwgNDcyMDAsIDQ3MjE1LCAKLSAgICA0NzIzMCwgNDcyNDUsIDQ3MjYwLCA0NzI3NSwgNDcyOTAsIDQ3MzA1LCA0NzMyMCwgNDczMzUsIDQ3MzUwLCA0NzM2NSwgCi0gICAgNDczODAsIDQ3Mzk1LCA0NzQxMCwgNDc0MjUsIDQ3NDQwLCA0NzQ1NSwgNDc0NzAsIDQ3NDg1LCA0NzUwMCwgNDc1MTUsIAotICAgIDQ3NTMwLCA0NzU0NSwgNDc1NjAsIDQ3NTc1LCA0NzU5MCwgNDc2MDUsIDQ3NjIwLCA0NzYzNSwgNDc2NTAsIDQ3NjY1LCAKLSAgICA0NzY4MCwgNDc2OTUsIDQ3NzEwLCA0NzcyNSwgNDc3NDAsIDQ3NzU1LCA0Nzc3MCwgNDc3ODUsIDQ3ODAwLCA0NzgxNSwgCi0gICAgNDc4MzAsIDQ3ODQ1LCA0Nzg2MCwgNDc4NzUsIDQ3ODkwLCA0NzkwNSwgNDc5MjAsIDQ3OTM1LCA0Nzk1MCwgNDc5NjUsIAotICAgIDQ3OTgwLCA0Nzk5NSwgNDgwMTAsIDQ4MDI1LCA0ODA0MCwgNDgwNTUsIDQ4MDcwLCA0ODA4NSwgNDgxMDAsIDQ4MTE1LCAKLSAgICA0ODEzMCwgNDgxNDUsIDQ4MTYwLCA0ODE3NSwgNDgxOTAsIDQ4MjA1LCA0ODIyMCwgNDgyMzUsIDQ4MjUwLCA0ODI2NSwgCi0gICAgNDgyODAsIDQ4Mjk1LCA0ODMxMCwgNDgzMjUsIDQ4MzQwLCA0ODM1NSwgNDgzNzAsIDQ4Mzg1LCA0ODQwMCwgNDg0MTUsIAotICAgIDQ4NDMwLCA0ODQ0NSwgNDg0NjAsIDQ4NDc1LCA0ODQ5MCwgNDg1MDUsIDQ4NTIwLCA0ODUzNSwgNDg1NTAsIDQ4NTY1LCAKLSAgICA0ODU4MCwgNDg1OTUsIDQ4NjEwLCA0ODYyNSwgNDg2NDAsIDQ4NjU1LCA0ODY3MCwgNDg2ODUsIDQ4NzAwLCA0ODcxNSwgCi0gICAgNDg3MzAsIDQ4NzQ1LCA0ODc2MCwgNDg3NzUsIDQ4NzkwLCA0ODgwNSwgNDg4MjAsIDQ4ODM1LCA0ODg1MCwgNDg4NjUsIAotICAgIDQ4ODgwLCA0ODg5NSwgNDg5MTAsIDQ4OTI1LCA0ODk0MCwgNDg5NTUsIDQ4OTcwLCA0ODk4NSwgNDkwMDAsIDQ5MDE1LCAKLSAgICA0OTAzMCwgNDkwNDUsIDQ5MDYwLCA0OTA3NSwgNDkwOTAsIDQ5MTA1LCA0OTEyMCwgNDkxMzUsIDQ5MTUwLCA0OTE2NSwgCi0gICAgNDkxODAsIDQ5MTk1LCA0OTIxMCwgNDkyMjUsIDQ5MjQwLCA0OTI1NSwgNDkyNzAsIDQ5Mjg1LCA0OTMwMCwgNDkzMTUsIAotICAgIDQ5MzMwLCA0OTM0NSwgNDkzNjAsIDQ5Mzc1LCA0OTM5MCwgNDk0MDUsIDQ5NDIwLCA0OTQzNSwgNDk0NTAsIDQ5NDY1LCAKLSAgICA0OTQ4MCwgNDk0OTUsIDQ5NTExLCA0OTUyNywgNDk1NDMsIDQ5NTU5LCA0OTU3NSwgNDk1OTEsIDQ5NjA3LCA0OTYyMywgCi0gICAgNDk2MzksIDQ5NjU1LCA0OTY3MSwgNDk2ODcsIDQ5NzAzLCA0OTcxOSwgNDk3MzUsIDQ5NzUxLCA0OTc2NywgNDk3ODMsIAotICAgIDQ5Nzk5LCA0OTgxNSwgNDk4MzEsIDQ5ODQ3LCA0OTg2MywgNDk4NzksIDQ5ODk1LCA0OTkxMSwgNDk5MjcsIDQ5OTQzLCAKLSAgICA0OTk1OSwgNDk5NzUsIDQ5OTkxLCA1MDAwNywgNTAwMjMsIDUwMDM5LCA1MDA1NSwgNTAwNzEsIDUwMDg3LCA1MDEwMywgCi0gICAgNTAxMTksIDUwMTM1LCA1MDE1MSwgNTAxNjcsIDUwMTgzLCA1MDE5OSwgNTAyMTUsIDUwMjMxLCA1MDI0NywgNTAyNjMsIAotICAgIDUwMjc5LCA1MDI5NSwgNTAzMTEsIDUwMzI3LCA1MDM0MywgNTAzNTksIDUwMzc1LCA1MDM5MSwgNTA0MDcsIDUwNDIzLCAKLSAgICA1MDQzOSwgNTA0NTUsIDUwNDcxLCA1MDQ4NywgNTA1MDMsIDUwNTE5LCA1MDUzNSwgNTA1NTEsIDUwNTY3LCA1MDU4MywgCi0gICAgNTA1OTksIDUwNjE1LCA1MDYzMSwgNTA2NDcsIDUwNjYzLCA1MDY3OSwgNTA2OTUsIDUwNzExLCA1MDcyNywgNTA3NDMsIAotICAgIDUwNzU5LCA1MDc3NSwgNTA3OTEsIDUwODA3LCA1MDgyMywgNTA4MzksIDUwODU1LCA1MDg3MSwgNTA4ODcsIDUwOTAzLCAKLSAgICA1MDkxOSwgNTA5MzUsIDUwOTUxLCA1MDk2NywgNTA5ODMsIDUwOTk5LCA1MTAxNSwgNTEwMzEsIDUxMDQ3LCA1MTA2MywgCi0gICAgNTEwNzksIDUxMDk1LCA1MTExMSwgNTExMjcsIDUxMTQzLCA1MTE1OSwgNTExNzUsIDUxMTkxLCA1MTIwNywgNTEyMjMsIAotICAgIDUxMjM5LCA1MTI1NSwgNTEyNzEsIDUxMjg3LCA1MTMwMywgNTEzMTksIDUxMzM1LCA1MTM1MSwgNTEzNjcsIDUxMzgzLCAKLSAgICA1MTM5OSwgNTE0MTUsIDUxNDMxLCA1MTQ0NywgNTE0NjMsIDUxNDc5LCA1MTQ5NSwgNTE1MTEsIDUxNTI3LCA1MTU0MywgCi0gICAgNTE1NTksIDUxNTc1LCA1MTU5MSwgNTE2MDcsIDUxNjIzLCA1MTYzOSwgNTE2NTUsIDUxNjcxLCA1MTY4NywgNTE3MDMsIAotICAgIDUxNzE5LCA1MTczNSwgNTE3NTEsIDUxNzY3LCA1MTc4MywgNTE3OTksIDUxODE1LCA1MTgzMSwgNTE4NDcsIDUxODYzLCAKLSAgICA1MTg3OSwgNTE4OTUsIDUxOTExLCA1MTkyNywgNTE5NDMsIDUxOTU5LCA1MTk3NSwgNTE5OTEsIDUyMDA3LCA1MjAyMywgCi0gICAgNTIwMzksIDUyMDU1LCA1MjA3MSwgNTIwODcsIDUyMTAzLCA1MjExOSwgNTIxMzUsIDUyMTUxLCA1MjE2NywgNTIxODMsIAotICAgIDUyMTk5LCA1MjIxNSwgNTIyMzEsIDUyMjQ3LCA1MjI2MywgNTIyNzksIDUyMjk1LCA1MjMxMSwgNTIzMjcsIDUyMzQzLCAKLSAgICA1MjM1OSwgNTIzNzUsIDUyMzkxLCA1MjQwNywgNTI0MjMsIDUyNDM5LCA1MjQ1NSwgNTI0NzEsIDUyNDg3LCA1MjUwMywgCi0gICAgNTI1MTksIDUyNTM1LCA1MjU1MSwgNTI1NjcsIDUyNTgzLCA1MjU5OSwgNTI2MTUsIDUyNjMxLCA1MjY0NywgNTI2NjMsIAotICAgIDUyNjc5LCA1MjY5NSwgNTI3MTEsIDUyNzI3LCA1Mjc0MywgNTI3NTksIDUyNzc1LCA1Mjc5MSwgNTI4MDcsIDUyODIzLCAKLSAgICA1MjgzOSwgNTI4NTUsIDUyODcxLCA1Mjg4NywgNTI5MDMsIDUyOTE5LCA1MjkzNSwgNTI5NTEsIDUyOTY3LCA1Mjk4MywgCi0gICAgNTI5OTksIDUzMDE1LCA1MzAzMSwgNTMwNDcsIDUzMDYzLCA1MzA3OSwgNTMwOTUsIDUzMTExLCA1MzEyNywgNTMxNDMsIAotICAgIDUzMTU5LCA1MzE3NSwgNTMxOTEsIDUzMjA3LCA1MzIyMywgNTMyMzksIDUzMjU1LCA1MzI3MSwgNTMyODcsIDUzMzAzLCAKLSAgICA1MzMxOSwgNTMzMzUsIDUzMzUxLCA1MzM2NywgNTMzODMsIDUzMzk5LCA1MzQxNSwgNTM0MzEsIDUzNDQ3LCA1MzQ2MywgCi0gICAgNTM0NzksIDUzNDk1LCA1MzUxMSwgNTM1MjcsIDUzNTQzLCA1MzU1OSwgNTM1NzUsIDUzNTkxLCA1MzYwNywgNTM2MjMsIAotICAgIDUzNjM5LCA1MzY1NSwgNTM2NzEsIDUzNjg3LCA1MzcwMywgNTM3MTksIDUzNzM1LCA1Mzc1MSwgNTM3NjcsIDUzNzgzLCAKLSAgICA1Mzc5OSwgNTM4MTUsIDUzODMxLCA1Mzg0NywgNTM4NjMsIDUzODc5LCA1Mzg5NSwgNTM5MTEsIDUzOTI3LCA1Mzk0MywgCi0gICAgNTM5NTksIDUzOTc1LCA1Mzk5MSwgNTQwMDcsIDU0MDIzLCA1NDAzOSwgNTQwNTUsIDU0MDcxLCA1NDA4NywgNTQxMDMsIAotICAgIDU0MTE5LCA1NDEzNSwgNTQxNTEsIDU0MTY3LCA1NDE4MywgNTQxOTksIDU0MjE1LCA1NDIzMSwgNTQyNDcsIDU0MjYzLCAKLSAgICA1NDI3OSwgNTQyOTUsIDU0MzExLCA1NDMyNywgNTQzNDMsIDU0MzU5LCA1NDM3NSwgNTQzOTEsIDU0NDA3LCA1NDQyMywgCi0gICAgNTQ0MzksIDU0NDU1LCA1NDQ3MSwgNTQ0ODcsIDU0NTAzLCA1NDUxOSwgNTQ1MzUsIDU0NTUxLCA1NDU2NywgNTQ1ODMsIAotICAgIDU0NTk5LCA1NDYxNSwgNTQ2MzEsIDU0NjQ3LCA1NDY2MywgNTQ2NzksIDU0Njk1LCA1NDcxMSwgNTQ3MjcsIDU0NzQzLCAKLSAgICA1NDc1OSwgNTQ3NzUsIDU0NzkxLCA1NDgwNywgNTQ4MjMsIDU0ODM5LCA1NDg1NSwgNTQ4NzEsIDU0ODg3LCA1NDkwMywgCi0gICAgNTQ5MTksIDU0OTM1LCA1NDk1MSwgNTQ5NjcsIDU0OTgzLCA1NDk5OSwgNTUwMTUsIDU1MDMxLCA1NTA0NywgNTUwNjMsIAotICAgIDU1MDc5LCA1NTA5NSwgNTUxMTEsIDU1MTI3LCA1NTE0MywgNTUxNTksIDU1MTc1LCA1NTE5MSwgNTUyMDcsIDU1MjIzLCAKLSAgICA1NTIzOSwgNTUyNTUsIDU1MjcxLCA1NTI4NywgNTUzMDMsIDU1MzE5LCA1NTMzNSwgNTUzNTEsIDU1MzY3LCA1NTM4MywgCi0gICAgNTUzOTksIDU1NDE1LCA1NTQzMSwgNTU0NDcsIDU1NDYzLCA1NTQ3OSwgNTU0OTUsIDU1NTExLCA1NTUyNywgNTU1NDMsIAotICAgIDU1NTU5LCA1NTU3NSwgNTU1OTEsIDU1NjA3LCA1NTYyMywgNTU2MzksIDU1NjU1LCA1NTY3MSwgNTU2ODcsIDU1NzAzLCAKLSAgICA1NTcxOSwgNTU3MzUsIDU1NzUxLCA1NTc2NywgNTU3ODMsIDU1Nzk5LCA1NTgxNSwgNTU4MzEsIDU1ODQ3LCA1NTg2MywgCi0gICAgNTU4NzksIDU1ODk1LCA1NTkxMSwgNTU5MjcsIDU1OTQzLCA1NTk1OSwgNTU5NzUsIDU1OTkxLCA1NjAwNywgNTYwMjMsIAotICAgIDU2MDM5LCA1NjA1NSwgNTYwNzEsIDU2MDg3LCA1NjEwMywgNTYxMTksIDU2MTM1LCA1NjE1MSwgNTYxNjcsIDU2MTgzLCAKLSAgICA1NjE5OSwgNTYyMTUsIDU2MjMxLCA1NjI0NywgNTYyNjMsIDU2Mjc5LCA1NjI5NSwgNTYzMTEsIDU2MzI3LCA1NjM0MywgCi0gICAgNTYzNTksIDU2Mzc1LCA1NjM5MSwgNTY0MDcsIDU2NDIzLCA1NjQzOSwgNTY0NTUsIDU2NDcxLCA1NjQ4NywgNTY1MDMsIAotICAgIDU2NTE5LCA1NjUzNSwgNTY1NTEsIDU2NTY3LCA1NjU4MywgNTY1OTksIDU2NjE1LCA1NjYzMSwgNTY2NDcsIDU2NjYzLCAKLSAgICA1NjY3OSwgNTY2OTUsIDU2NzExLCA1NjcyNywgNTY3NDMsIDU2NzU5LCA1Njc3NSwgNTY3OTEsIDU2ODA3LCA1NjgyMywgCi0gICAgNTY4MzksIDU2ODU1LCA1Njg3MSwgNTY4ODcsIDU2OTAzLCA1NjkxOSwgNTY5MzUsIDU2OTUxLCA1Njk2NywgNTY5ODMsIAotICAgIDU2OTk5LCA1NzAxNSwgNTcwMzEsIDU3MDQ3LCA1NzA2MywgNTcwNzksIDU3MDk1LCA1NzExMSwgNTcxMjcsIDU3MTQzLCAKLSAgICA1NzE1OSwgNTcxNzUsIDU3MTkxLCA1NzIwNywgNTcyMjMsIDU3MjM5LCA1NzI1NSwgNTcyNzEsIDU3Mjg3LCA1NzMwMywgCi0gICAgNTczMTksIDU3MzM1LCA1NzM1MSwgNTczNjcsIDU3MzgzLCA1NzM5OSwgNTc0MTUsIDU3NDMxLCA1NzQ0NywgNTc0NjMsIAotICAgIDU3NDc5LCA1NzQ5NSwgNTc1MTEsIDU3NTI3LCA1NzU0MywgNTc1NTksIDU3NTc1LCA1NzU5MSwgNTc2MDcsIDU3NjIzLCAKLSAgICA1NzYzOSwgNTc2NTUsIDU3NjcxLCA1NzY4NywgNTc3MDMsIDU3NzE5LCA1NzczNSwgNTc3NTEsIDU3NzY3LCA1Nzc4MywgCi0gICAgNTc3OTksIDU3ODE1LCA1NzgzMSwgNTc4NDcsIDU3ODYzLCA1Nzg3OSwgNTc4OTUsIDU3OTExLCA1NzkyNywgNTc5NDMsIAotICAgIDU3OTU5LCA1Nzk3NSwgNTc5OTEsIDU4MDA3LCA1ODAyMywgNTgwMzksIDU4MDU1LCA1ODA3MSwgNTgwODcsIDU4MTAzLCAKLSAgICA1ODExOSwgNTgxMzUsIDU4MTUxLCA1ODE2NywgNTgxODIsIDE2NzQ5LCA1ODE5MSwgNTgxOTcsIDU4MjAzLCA1ODIxMywgCi0gICAgNTgyMjEsIDE0ODgxLCAxNTQzMiwgOTk1MywgNTgyMzQsIDE1MjAsIDU4MjQyLCAzNzYxLCAyNzQxNSwgNzE4MywgNTgyNDgsIAotICAgIDU4MjUzLCA1ODI1OCwgNTgyNjMsIDU4MjY4LCA1ODI3NCwgNTgyNzksIDU4Mjg1LCA1ODI5MCwgNTgyOTYsIDU4MzAxLCAKLSAgICA1ODMwNiwgNTgzMTEsIDU4MzE2LCA1ODMyMiwgNTgzMjcsIDU4MzMyLCA1ODMzNywgNTgzNDIsIDU4MzQ3LCA1ODM1MiwgCi0gICAgNTgzNTcsIDU4MzYzLCA1ODM2OCwgNTgzNzQsIDU4MzgxLCAyNTYxLCA1ODM4NiwgNTgzOTIsIDg1MjYsIDU4Mzk2LCAKLSAgICA1ODQwMSwgNTg0MDgsIDU4NDE2LCA0MCwgNTg0MjAsIDU4NDI2LCA1ODQzMSwgNTg0MzYsIDU4NDQwLCA1ODQ0NSwgNTg0NDksIAotICAgIDU4NDUzLCAxMDY3NywgNTg0NTcsIDU4NDY3LCA1ODQ4MCwgNTg0OTEsIDU4NTA0LCA1ODUxMSwgNTg1MTcsIDU4NTIyLCAKLSAgICA1ODUyOCwgNTg1MzQsIDU4NTQwLCA1ODU0NSwgNTg1NTAsIDU4NTU1LCA1ODU2MCwgNTg1NjQsIDU4NTY5LCA1ODU3NCwgCi0gICAgNTg1NzksIDU4NTg1LCA1ODU5MSwgNTg1OTcsIDU4NjAyLCA1ODYwNiwgNTg2MTEsIDU4NjE2LCA1ODYyMCwgNTg2MjUsIAotICAgIDU4NjMwLCA1ODYzNSwgNTg2MzksIDEwNjkzLCAxMDcwNCwgMTA3MDksIDE1NjMsIDU4NjQzLCAxNTY4LCA1ODY0OSwgCi0gICAgMTYyMjYsIDU4NjUyLCA1ODY1OCwgMTU5OSwgNTg2NjQsIDE2MDUsIDE2MTEsIDEwNzM5LCA1ODY2OSwgNTg2NzcsIDU4Njg0LCAKLSAgICA1ODY4OCwgNTg2OTQsIDU4Njk5LCAzMDk1MiwgNTg3MDQsIDU4NzExLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCAxNjE2LCAKLSAgICAxNjMxOCwgNTg3MzMsIDU4NzM3LCAxNjMyOSwgMTEyMCwgNTg3NDEsIDU4NzQ4LCA1ODc1MywgNTg3NTcsIDE2MzU0LCAKLSAgICAxNjIwLCAzNzMyMSwgNTg3NjAsIDU4NzY1LCA1ODc3NSwgNTg3ODQsIDU4Nzg5LCA1ODc5MywgNTg3OTksIDE2MjUsIAotICAgIDM5MjMwLCA1ODgwNCwgNTg4MTMsIDU4ODE5LCA1ODgyNCwgMTA4OTcsIDEwOTAzLCA1ODgzMCwgNTg4NDIsIDU4ODU5LCAKLSAgICA1ODg3NiwgNTg4OTMsIDU4OTEwLCA1ODkyNywgNTg5NDQsIDU4OTYxLCA1ODk3OCwgNTg5OTUsIDU5MDEyLCA1OTAyOSwgCi0gICAgNTkwNDYsIDU5MDYzLCA1OTA4MCwgNTkwOTcsIDU5MTE0LCA1OTEzMSwgNTkxNDgsIDU5MTY1LCA1OTE4MiwgNTkxOTksIAotICAgIDU5MjE2LCA1OTIzMywgNTkyNTAsIDU5MjY3LCA1OTI4NCwgNTkzMDEsIDU5MzE4LCA1OTMzNSwgNTkzNTIsIDU5MzY5LCAKLSAgICA1OTM4NiwgNTk0MDMsIDU5NDIwLCA1OTQzNywgNTk0NTQsIDU5NDcxLCA1OTQ4OCwgNTk1MDUsIDU5NTIyLCA1OTUzOSwgCi0gICAgNTk1NTYsIDU5NTczLCA1OTU5MCwgNTk2MDcsIDU5NjI0LCA1OTY0MSwgNTk2NTgsIDU5Njc1LCA1OTY4NiwgNTk2OTEsIAotICAgIDE2MzAsIDU5Njk1LCA1OTcwMSwgNTk3MDYsIDU5NzExLCA5MzE5LCAxNjM1LCA1OTcxNywgNTk3MjYsIDI3NzEwLCA1OTczMSwgCi0gICAgNTk3NDIsIDU5NzUyLCA1OTc1NywgNTk3NjQsIDU5NzcwLCA1OTc3NSwgNTk3ODAsIDE2NjA2LCA1OTc4NCwgMTA5MTQsIAotICAgIDE2NDAsIDEwOTE5LCA1OTc5MCwgNTk3OTUsIDU5ODAxLCA1OTgwNiwgNTk4MTEsIDU5ODE2LCA1OTgyMSwgNTk4MjYsIAotICAgIDU5ODMxLCA1OTgzNiwgNTk4NDIsIDU5ODQ4LCA1OTg1NCwgNTk4NTksIDU5ODYzLCA1OTg2OCwgNTk4NzMsIDU5ODc3LCAKLSAgICA1OTg4MiwgNTk4ODcsIDU5ODkyLCA1OTg5NiwgNTk5MDEsIDU5OTA3LCA1OTkxMiwgNTk5MTcsIDU5OTIxLCA1OTkyNiwgCi0gICAgNTk5MzEsIDU5OTM3LCA1OTk0MiwgNTk5NDcsIDU5OTUzLCA1OTk1OSwgNTk5NjQsIDU5OTY4LCA1OTk3MywgNTk5NzgsIAotICAgIDU5OTgzLCA1OTk4NywgNTk5OTIsIDU5OTk3LCA2MDAwMiwgNjAwMDgsIDYwMDE0LCA2MDAxOSwgNjAwMjMsIDYwMDI3LCAKLSAgICA2MDAzMiwgNjAwMzcsIDYwMDQyLCAyOTEwOCwgNjAwNDYsIDYwMDUxLCA2MDA1NiwgNjAwNjIsIDYwMDY3LCA2MDA3MiwgCi0gICAgNjAwNzYsIDYwMDgxLCA2MDA4NiwgNjAwOTIsIDYwMDk3LCA2MDEwMiwgNjAxMDgsIDYwMTE0LCA2MDExOSwgNjAxMjMsIAotICAgIDYwMTI4LCA2MDEzMywgNjAxMzcsIDYwMTQyLCA2MDE0NywgNjAxNTIsIDYwMTU4LCA2MDE2NCwgNjAxNjksIDYwMTczLCAKLSAgICA2MDE3OCwgNjAxODMsIDYwMTg3LCA2MDE5MiwgNjAxOTcsIDYwMjAyLCA2MDIwNiwgNjAyMDksIDMxNjE0LCA2MDIxNCwgCi0gICAgNjAyMjIsIDE2NjcyLCAzNjYzLCAxMTAxMCwgNjAyMjgsIDYwMjM4LCA2MDI1MywgMTEwMTUsIDYwMjY0LCA2MDI2OSwgCi0gICAgNjAyODAsIDYwMjkyLCA2MDMwNCwgNjAzMTYsIDI2OTUsIDYwMzI4LCA2MDMzMywgNjAzNDUsIDYwMzQ5LCA2MDM1NSwgCi0gICAgNjAzNjEsIDYwMzY2LCAxNjUyLCAxMDY3LCA2MDM3NSwgNjAzODAsIDM5MjgwLCA2MDM4NCwgNjAzODgsIDYwMzkzLCAKLSAgICA2MDM5NywgMTY3NTcsIDYwNDAyLCA2MDQwNSwgNjA0MTMsIDYwNDIxLCAxNjU2LCAxMTA0MCwgMTEwNDYsIDE2NjEsIAotICAgIDYwNDI5LCA2MDQzNiwgNjA0NDEsIDYwNDUwLCA2MDQ2MCwgNjA0NjcsIDYwNDcyLCA2MDQ3NywgMTY2NiwgNjA0ODQsIAotICAgIDYwNDg5LCAxNjg3MiwgNjA0OTMsIDYwNDk4LCA2MDUwNSwgNjA1MTEsIDYwNTE1LCA2MDUyNiwgNjA1MzYsIDE2ODk0LCAKLSAgICA5MjI3LCA5MjM0LCAxNjcxLCA2MDU0MywgNjA1NDksIDYwNTU3LCA2MDU2NCwgNjA1NzAsIDYwNTc3LCA2MDU4OSwgNjA1OTUsIAotICAgIDYwNjAwLCA2MDYxMiwgNjA2MjMsIDYwNjMyLCA2MDY0MiwgMzc0MCwgMzA3ODgsIDMwNzk3LCAxNjkzNCwgMTY3NiwgMTY4MCwgCi0gICAgNjA2NTAsIDYwNjYxLCA2MDY2NiwgMTY4MywgNjA2NzQsIDYwNjc5LCAxNjk4NSwgNjA2OTEsIDYwNjk3LCA2MDcwMiwgCi0gICAgNjA3MTAsIDE2ODgsIDYwNzE1LCA2MDcyMCwgNjA3MjgsIDYwNzM2LCA2MDc0MywgNjA3NTIsIDYwNzYwLCA2MDc2OSwgCi0gICAgMTY5MywgNjA3NzMsIDE2OTgsIDYwNzc4LCA2MDc4NSwgMTcwNTksIDYwNzkzLCA2MDc5OSwgNjA4MDQsIDYwODEyLCAKLSAgICA2MDgxOSwgNjA4MjcsIDIyNTU3LCA2MDgzMiwgMTExNzUsIDYwODQxLCA2MDg0NywgNjA4NTQsIDYwODYxLCA2MDg2NywgCi0gICAgNjA4NzcsIDYwODgzLCA2MDg4OCwgNjA4OTksIDYwOTA0LCA2MDkxMiwgMTExODQsIDExMTg5LCA2MDkyMCwgNjA5MjYsIAotICAgIDYwOTM0LCAzODA1LCAxNzEwMSwgMzkzNjgsIDYwOTM5LCA2MDk0NSwgNjA5NTAsIDYwOTU4LCA2MDk2NSwgMTIwMjksIAotICAgIDYwOTcwLCA2MDk3NiwgMTcwOSwgNjA5ODEsIDYwOTg0LCAxMTI3LCA2MDk5MCwgNjA5OTUsIDYxMDAwLCA2MTAwNiwgCi0gICAgNjEwMTEsIDYxMDE2LCA2MTAyMSwgNjEwMjYsIDYxMDMxLCA2MTAzNiwgMTcxOCwgOSwgNjEwNDIsIDYxMDQ2LCA2MTA1MSwgCi0gICAgNjEwNTUsIDYxMDU5LCA2MTA2MywgMzE4NTQsIDYxMDY4LCA2MTA3MywgNjEwNzgsIDYxMDgyLCA2MTA4NSwgNjEwODksIAotICAgIDYxMDkzLCA2MTA5OCwgNjExMDIsIDYxMTA3LCA2MTExMSwgMzQ1OTEsIDM0NTk2LCAzNDYwMSwgNjExMTQsIDYxMTIxLCAKLSAgICA2MTEyNywgMzkwODksIDYxMTM3LCAzNDYwNywgMzIxMTIsIDMxODY5LCAzMTg3NSwgMzQ2MjMsIDMxODgxLCA2MTE0MiwgCi0gICAgNjExNDcsIDMyMTQ1LCA2MTE1MSwgNjExNTQsIDYxMTU4LCA2MTE2NSwgNjExNjgsIDYxMTczLCA2MTE3NywgNjExODEsIAotICAgIDYxMTg0LCA2MTE5NCwgNjEyMDYsIDYxMjEzLCA2MTIxOSwgNjEyMjYsIDMzNTQ4LCA2MTIyOSwgODU0MywgODc3LCA2MTIzMiwgCi0gICAgNjEyMzYsIDYxMjQxLCAzNjkwLCA2MTI0NSwgNjEyNDgsIDEzNjI1LCA2MTI1NSwgNjEyNjIsIDYxMjc1LCA2MTI4MywgCi0gICAgNjEyOTIsIDYxMzAxLCA2MTMwNiwgNjEzMTYsIDYxMzI5LCA2MTM0MSwgNjEzNDgsIDYxMzUzLCA2MTM2MiwgNjEzNzUsIAotICAgIDM2MDM1LCA2MTM5MywgNjEzOTgsIDYxNDA1LCA2MTQxMSwgNjUyLCA2MTQxNiwgNjE0MjQsIDYxNDMxLCAyNzI1NCwgNjI3LCAKLSAgICA2MTQzNywgNjE0NDMsIDYxNDUzLCA2MTQ1OSwgNjE0NjQsIDMxODk5LCA2MDAzLCAzMTkxMywgNjE0NjgsIDYxNDc4LCAKLSAgICA2MTQ4MywgNjE0OTMsIDYxNTA4LCA2MTUxNCwgNjE1MjAsIDMxOTIzLCA2MTUyNSwgMzEwNjksIDYxNTI5LCA2MTUzNCwgCi0gICAgNjE1MzksIDYxNTQzLCA2MTU0OCwgMTY5MzcsIDYxNTU1LCA2MTU2MCwgNjE1NjQsIDYwNDQsIDMxOTQ5LCA2MTU2OCwgCi0gICAgNjE1NzQsIDMxMiwgNjE1ODQsIDYxNTkxLCA2MTU5OCwgNjE2MDMsIDYxNjEyLCA1ODc2OSwgNjE2MTgsIDYxNjI2LCAKLSAgICA2MTYzMCwgNjE2MzQsIDYxNjM4LCA2MTY0MiwgNjE2NDcsIDYxNjUxLCA2MTY1NywgNjE2NjUsIDYxNjcwLCA2MTY3NSwgCi0gICAgNjE2NzksIDYxNjg0LCA2MTY4OCwgNjE2OTIsIDYxNjk4LCA2MTcwNCwgNjE3MDksIDYxNzEzLCAzMjA3MywgNjE3MTgsIAotICAgIDMyMDc5LCAzMjA4NSwgNjE3MjMsIDYxNzI5LCA2MTczNiwgNjE3NDEsIDYxNzQ1LCAzMTA4NiwgMTY1OTksIDYxNzQ4LCAKLSAgICA2MTc1MiwgNjE3NTcsIDYxNzY0LCA2MTc3MCwgNjE3NzQsIDYxNzc5LCAzODc5OSwgNjE3ODUsIDYxNzg5LCA2MTc5MywgCi0gICAgNjE3OTgsIDYxODA0LCA2MTgxMCwgNjE4MjIsIDYxODMxLCA2MTg0MSwgNjE4NDcsIDYxODU0LCA2MTg1OSwgNjE4NjQsIAotICAgIDYxODY4LCA2MTg3MSwgNjE4NzcsIDYxODg0LCA2MTg4OSwgNjE4OTQsIDYxOTAxLCA2MTkwOCwgNjE5MTQsIDYxOTE5LCAKLSAgICA2MTkyNCwgNjE5MzIsIDMyMDkwLCAyNDIzLCA2MTkzNywgNjE5NDIsIDYxOTQ4LCA2MTk1MywgNjE5NTksIDYxOTY0LCAKLSAgICA2MTk2OSwgNjE5NzQsIDYxOTgwLCAzMjExMSwgNjE5ODUsIDYxOTkxLCA2MTk5NywgNjIwMDMsIDMyMTc1LCA2MjAwOCwgCi0gICAgNjIwMTMsIDYyMDE4LCAzMjE4NiwgNjIwMjMsIDYyMDI4LCA2MjAzMywgNjIwMzksIDYyMDQ1LCAzMjE5MSwgNjIwNTAsIAotICAgIDYyMDU1LCA2MjA2MCwgMzIyNDYsIDMyMjUyLCA2MjA2NSwgNjIwNzAsIDMyMjU3LCA2MjA3NSwgMjc5MzcsIDMyMjc5LCAKLSAgICAzMjI4MywgNjIwODAsIDYyMDU2LCA2MjA4NCwgNjIwOTIsIDYyMDk4LCA2MjEwNiwgNjIxMTMsIDYyMTE5LCA2MjEyOSwgCi0gICAgNjIxMzUsIDYyMTQyLCAxMDYyNCwgMzIyOTcsIDYyMTQ4LCA2MjE2MSwgNjIxNzAsIDYyMTc2LCA2MjE4NSwgNjIxOTEsIAotICAgIDIzNDk1LCA2MjE5OCwgNjIyMDUsIDYyMjE1LCAzMjI0NywgNjIyMTgsIDYyMjI1LCA2MjIzMCwgNjIyMzQsIDYyMjM4LCAKLSAgICA2MjI0MywgNjEyMCwgNjIyNDcsIDYyMjUyLCA2MjI1NywgMzQ2ODUsIDM0NjkwLCA2MjI2MSwgMzQ3MDQsIDYyMjY2LCAKLSAgICAzNDcwOSwgNjIyNzEsIDYyMjc3LCAzNDcyMSwgMzQ3MjcsIDM0NzMzLCA2MjI4MiwgNjIyODgsIDIyNTIyLCA2MjI5OSwgCi0gICAgNjIzMDIsIDYyMzE0LCA2MjMyMiwgMzIzMjAsIDYyMzI2LCA2MjMzNSwgNjIzNDUsIDYyMzU0LCAzMjMzMCwgNjIzNTksIAotICAgIDYyMzY2LCA2MjM3NSwgNjIzODEsIDYyMzg5LCA2MjM5NiwgNjA5NSwgNDM5NywgNjI0MDEsIDMyMjU4LCA2MjQwNywgCi0gICAgNjI0MTAsIDYyNDE2LCA2MjQyMywgNjI0MjgsIDYyNDMzLCAyMzQwNSwgNjI0MzcsIDYyNDQzLCA2MjQ0OSwgNjI0NTQsIAotICAgIDYyNDU5LCA2MjQ2MywgNjI0NjksIDYyNDc1LCAzMzQ1OCwgODYzLCAzNTY5OCwgMzY2MTksIDM2NjI1LCAzMjM2NiwgCi0gICAgNjI0ODAsIDYyNDg0LCA2MjQ4OCwgNjI0OTEsIDYyNTA0LCA2MjUxMCwgNjI1MTQsIDYyNTE3LCA2MjUyMiwgMzM3NjEsIAotICAgIDYyNTI2LCAzMTA5MSwgMjEyNzQsIDYyNTMyLCA2MDI0LCA2MDMyLCA5MDY4LCA2MjUzNSwgNjI1NDAsIDYyNTQ1LCA2MjU1MCwgCi0gICAgNjI1NTUsIDYyNTYwLCA2MjU2NSwgNjI1NzAsIDYyNTc1LCA2MjU4MCwgNjI1ODYsIDYyNTkxLCA2MjU5NiwgNjI2MDIsIAotICAgIDYyNjA3LCA2MjYxMiwgNjI2MTcsIDYyNjIyLCA2MjYyNywgNjI2MzIsIDYyNjM4LCA2MjY0MywgNjI2NDksIDYyNjU0LCAKLSAgICA2MjY1OSwgNjI2NjQsIDYyNjY5LCA2MjY3NCwgNjI2NzksIDYyNjg0LCA2MjY4OSwgNjI2OTQsIDYyNjk5LCA2MjcwNSwgCi0gICAgNjI3MTAsIDYyNzE1LCA2MjcyMCwgNjI3MjUsIDYyNzMwLCA2MjczNSwgNjI3NDEsIDYyNzQ2LCA2Mjc1MSwgNjI3NTYsIAotICAgIDYyNzYxLCA2Mjc2NiwgNjI3NzEsIDYyNzc2LCA2Mjc4MSwgNjI3ODYsIDYyNzkyLCA2Mjc5NywgNjI4MDIsIDYyODA3LCAKLSAgICA2MjgxMiwgNjI4MTgsIDYyODI0LCA2MjgyOSwgNjI4MzUsIDYyODQwLCA2Mjg0NSwgNjI4NTAsIDYyODU1LCA2Mjg2MCwgCi0gICAgMTUxMywgMjQ1LCA2Mjg2NSwgNjI4NjksIDYyODczLCA2Mjg3NywgMjUxMTYsIDYyODgxLCA2Mjg4NSwgNjI4OTAsIDYyODk0LCAKLSAgICA2Mjg5OSwgNjI5MDMsIDYyOTA4LCA2MjkxMywgNjI5MTgsIDYyOTIyLCA2MjkyNiwgNjI5MzEsIDYyOTM1LCAxMzM2MiwgCi0gICAgNjI5NDAsIDYyOTQ0LCA2Mjk1MSwgNjI5NjEsIDE1MTkzLCA2Mjk3MCwgNjI5NzksIDYyOTgzLCA2Mjk4OCwgNjI5OTMsIAotICAgIDYyOTk3LCAyNDkwNywgMzAxOSwgNjMwMDEsIDE3MzUwLCA2MzAwNywgNjMwMTYsIDYzMDI0LCA2MzAzMCwgNjMwNDIsIAotICAgIDYzMDU0LCA2MzA1OCwgNjMwNjMsIDYzMDY3LCA2MzA3MywgNjMwNzksIDYzMDg0LCA2MzA5NCwgNjMxMDQsIDYzMTEwLCAKLSAgICA2MzExNSwgNjMxMTksIDYzMTI0LCA2MzEzMCwgNjMxMzksIDYzMTQ4LCA2MzE1NiwgMTU1NDcsIDYzMTYwLCA2MzE2OSwgCi0gICAgNjMxNzcsIDYzMTg5LCA2MzIwMCwgNjMyMTEsIDYzMjIwLCA2MzIyNCwgNjMyMzMsIDYzMjQzLCA2MzI1MSwgNjMyNTcsIAotICAgIDYzMjYyLCA2MzI2OCwgNjMyNzMsIDk4LCAzMDkwMCwgNjMyODQsIDI2MjQ5LCAyNjI1OSwgNjMyOTAsIDYzMjk3LCA2MzMwMywgCi0gICAgNjMzMDcsIDYzMzE3LCA2MzMyOCwgNjMzMzYsIDYzMzQ1LCA2MzM1MCwgNjMzNTUsIDYzMzU5LCAxNzMwNCwgNjMzNjcsIAotICAgIDYzMzcxLCA2MzM3NywgNjMzODcsIDYzMzk0LCA2MzQwMCwgMzQ3ODQsIDYzNDA2LCA2MzQwOCwgNjM0MTEsIDYzNDE1LCAKLSAgICA2MzQyNSwgNjM0MzEsIDYzNDM4LCAxMzMwOCwgNjM0NDUsIDYzNDUxLCA2MzQ2MCwgNjM0NjksIDYzNDc1LCA2MzQ4MSwgCi0gICAgNjM0ODcsIDYzNDkyLCA2MzQ5OSwgNjM1MDYsIDYzNTEyLCA2MzUyNSwgNjM1MzQsIDYzNTQzLCA2MzU0OCwgNjM1NTIsIAotICAgIDYzNTU4LCA2MzU2NSwgNjM1NzIsIDYzNTc5LCA2MzU4NiwgNjM1OTMsIDYzNTk4LCA2MzYwMiwgNjM2MDYsIDYzNjA5LCAKLSAgICA2MzYxOSwgNjM2MjMsIDYzNjM1LCA2MzY0NCwgNjM2NDgsIDYzNjUzLCA2MzY1NywgNjM2NjMsIDYzNjY4LCA2MzY3NSwgCi0gICAgNjM2ODQsIDYzNjkyLCA2MzcwMCwgNjM3MDUsIDYzNzA5LCA2MzcxNCwgNjM3MTksIDYzNzI5LCA2MzczNywgNjM3NDIsIAotICAgIDYzNzQ2LCA2Mzc1MCwgNjM3NTYsIDYzNzY4LCA2Mzc3NiwgNjM3ODYsIDYzNzkzLCA2Mzc5OSwgNjM4MDQsIDYzODA4LCAKLSAgICA2MzgxMiwgNjM4MTYsIDYzODI1LCA2MzgzNCwgNjM4NDMsIDYzODQ5LCA2Mzg1NSwgNjM4NjEsIDYzODY2LCA2Mzg3MywgCi0gICAgNjM4NzksIDYzODg3LCA2Mzg5NCwgMTI0NTYsIDYzOTAwLCA2MzkwNiwgNjM5MTAsIDE0MjMxLCA2MzkxNCwgNjM5MTksIAotICAgIDYzOTI5LCA2MzkzOCwgNjM5NDQsIDYzOTUwLCA2Mzk1OCwgNjM5NjUsIDYzOTY5LCA2Mzk3MywgNjM5NzksIDYzOTg3LCAKLSAgICA2Mzk5NCwgNjQwMDAsIDY0MDExLCA2NDAxNSwgNjQwMTksIDY0MDIzLCA2NDAyNiwgNjQwMzIsIDY0MDM3LCA2NDA0MSwgCi0gICAgNjQwNDUsIDY0MDU0LCA2NDA2MiwgNjQwNjksIDY0MDc1LCA2NDA4MiwgMjQwMjksIDM4ODQxLCA2NDA4NywgNjQwOTUsIAotICAgIDY0MDk5LCA2NDEwMywgNjQxMDYsIDY0MTE0LCA2NDEyMSwgNjQxMjcsIDY0MTM2LCA2NDE0NCwgNjQxNTAsIDY0MTU1LCAKLSAgICA2NDE1OSwgNjQxNjQsIDY0MTY4LCA2NDE3MiwgNjQxNzcsIDY0MTg2LCA2NDE5MCwgNjQxOTcsIDY0MjA0LCA2NDIxMCwgCi0gICAgNjQyMTgsIDY0MjI0LCA2NDIzNSwgNjQyNDMsIDY0MjQ5LCAyMjY1MiwgNjQyNTgsIDY0MjY1LCA2NDI3MiwgNjQyNzksIAotICAgIDY0Mjg2LCA2NDI5MywgNDE4NzAsIDEzMTQ2LCA2NDMwMCwgNjQzMDcsIDY0MzEyLCAzNDgyMCwgNjIxNywgNjQzMTgsIAotICAgIDY0MzIzLCA2NDMyOCwgNjQzMzQsIDY0MzQwLCA2NDM0NiwgNjQzNTEsIDY0MzU2LCA2NDM2MSwgNjQzNjYsIDY0MzcyLCAKLSAgICA2NDM3NywgNjQzODMsIDY0Mzg4LCA2NDM5NCwgNjQzOTksIDY0NDA0LCA2NDQwOSwgNjQ0MTQsIDY0NDE5LCA2NDQyNCwgCi0gICAgNjQ0MjksIDY0NDM1LCA2NDQ0MCwgNjQ0NDYsIDY0NDUxLCA2NDQ1NiwgNjQ0NjEsIDY0NDY2LCA2NDQ3MSwgNjQ0NzYsIAotICAgIDY0NDgyLCA2NDQ4NywgNjQ0OTIsIDY0NDk3LCA2NDUwMiwgNjQ1MDcsIDY0NTEyLCA2NDUxNywgNjQ1MjIsIDY0NTI3LCAKLSAgICA2NDUzMiwgNjQ1MzgsIDY0NTQzLCA2NDU0OCwgNjQ1NTMsIDY0NTU4LCA2NDU2MywgNjQ1NjgsIDY0NTczLCA2NDU3OCwgCi0gICAgNjQ1ODQsIDY0NTg5LCA2NDU5NCwgNjQ1OTksIDY0NjA0LCA2NDYwOSwgNjQ2MTQsIDY0NjE5LCA2NDYyNCwgNjQ2MjksIAotICAgIDY0NjM0LCA2NDYzOSwgNjQ2NDQsIDY0NjUwLCAxODM0LCAyMjQsIDM3NDE3LCA2NDY1NSwgNjQ2NTgsIDY0NjYzLCA2NDY2NywgCi0gICAgNjQ2NzAsIDY0Njc1LCA2MzY5NiwgNjQ2ODYsIDY0Njk2LCA2NDcwMywgNjQ3MTksIDY0NzI4LCA2NDczOCwgNjQ3NDgsIAotICAgIDY0NzU2LCA2NDc3MCwgNjQ3NzgsIDY0NzgyLCA2NDc4NSwgNjQ3OTIsIDY0Nzk4LCA2NDgwOSwgNjQ4MjEsIDY0ODMyLCAKLSAgICA2NDg0MSwgNjQ4NDgsIDEyOTcsIDIzMjk0LCA2NDg1OCwgMjU5MCwgNjQ4NjIsIDY0ODcxLCAxMTMzLCAxNzI3NywgMzgwNTQsIAotICAgIDY0ODc5LCA2NDg4NywgNjQ5MDEsIDY0OTE0LCA2NDkxOCwgNjQ5MjMsIDY0OTI4LCA2NDkzMywgNjQ5MzksIDY0OTQ1LCAKLSAgICA2NDk1MCwgODUzNSwgNjQ5NTUsIDY0OTU5LCA2NDk2NywgMTEwNDEsIDY0OTcyLCA2NDk3OCwgNjQ5ODcsIDE3MjEsIAotICAgIDExMDUzLCA3MzYsIDY0OTkxLCA2NTAwMCwgNjUwMTAsIDI3MDEzLCA2NTAxOSwgNjUwMjUsIDE2ODQ5LCA2NTAzMSwgCi0gICAgNjUwMzUsIDM5NjQsIDExMzg0LCA2NTA0MSwgNjUwNDgsIDYwNjU2LCA2NTA1MiwgNjUwNTYsIDM5ODgsIDE4OSwgMTQxNDYsIAotICAgIDY1MDYyLCA2NTA3NCwgNjUwNzgsIDY1MDg0LCAyNzczMCwgNjUwODgsIDExMzcyLCAyNzMwLCA0LCA2NTA5MywgNjUxMDMsIAotICAgIDY1MTA5LCA2NTEyMCwgNjUxMjcsIDY1MTMzLCA2NTEzOSwgNjUxNDcsIDY1MTU0LCA2NTE2MCwgNjUxNzAsIDY1MTgwLCAKLSAgICA2NTE5MCwgMjM0ODIsIDEzMDksIDY1MTk5LCA2NTIwMywgNjUyMDcsIDY1MjEzLCA2NTIxNywgMjc1MywgMjc1OSwgODUzMiwgCi0gICAgMjI2NCwgNjUyMjEsIDY1MjI1LCA2NTIzNCwgNjUyNDIsIDY1MjUzLCA2NTI2MSwgNjUyNjksIDY1Mjc1LCA2NTI4MCwgCi0gICAgNjUyOTEsIDY1MzAyLCA2NTMxMCwgNjUzMTYsIDk2ODcsIDY1MzIxLCA2NTMyOSwgNjUzMzMsIDY1MzM3LCA2NTM0MSwgCi0gICAgNjUzNTMsIDI4MTE1LCA2NTM2MCwgNjUzNzAsIDY1Mzc2LCA2NTM4MiwgOTc4OSwgNjUzOTIsIDY1NDAzLCA2NTQxMywgCi0gICAgNjU0MjIsIDY1NDI2LCA2NTQzMywgMTEzNSwgMTE3MCwgNjU0NDMsIDY1NDQ4LCA2NTQ1NiwgNjU0NjQsIDY1NDc1LCAKLSAgICA2NTQ4MiwgNjU0OTYsIDE0MDc1LCAzOTMsIDY1NTA2LCA2NTUxMCwgNjU1MTgsIDY1NTI3LCA2NTUzNSwgNjU1NDEsIAotICAgIDY1NTU1LCA2NTU2MiwgNjU1NjgsIDY1NTc3LCA2NTU4NCwgNjU1OTQsIDY1NjAyLCAzODEyLCAxNTYsIDY1NjEwLCA2NTYyMSwgCi0gICAgNjU2MjUsIDY1NjM3LCAyNzkyOCwgMTYxLCA2NTY0MywgNjU2NDgsIDY1NjUyLCA2NTY1OSwgNjU2NjUsIDY1NjczLCAKLSAgICA2NTY4MCwgODgxOCwgNjU2ODcsIDY1Njk2LCA2NTcwNCwgMzg3OCwgNjU3MTcsIDgxOTksIDY1NzIxLCAyNzk4LCA0NTAsIAotICAgIDY1NzI2LCA2NTczOSwgNjU3NDQsIDE4MzMsIDY2OCwgNjU3NDgsIDM4OTUsIDY1NzU2LCA2NTc2MiwgNjU3NjYsIDkzMSwgCi0gICAgNjU3NzYsIDY1Nzg1LCA2NTc5MCwgMTQ5MTUsIDE0OTIyLCA0NTIzMiwgNjU3OTQsIDM4MjIsIDEzMDM0LCA2NTgwMiwgCi0gICAgNjU4MDksIDIzNTM4LCA2NTgxMywgNjU4MjAsIDY1ODI2LCA2NTgzMSwgNjU4MzYsIDE0OTM1LCAzNzIsIDY1ODQxLCAKLSAgICA2NTg1MywgNjU4NTksIDY1ODY3LCAyODEwLCAxNzUzLCA2NTg3NSwgNjU4NzcsIDY1ODgyLCA2NTg4NywgNjU4OTIsIAotICAgIDY1ODk4LCA2NTkwMywgNjU5MDgsIDY1OTEzLCA2NTkxOCwgNjU5MjMsIDY1OTI4LCA2NTkzNCwgNjU5MzksIDY1OTQ0LCAKLSAgICA2NTk0OSwgNjU5NTQsIDY1OTU5LCA2NTk2NCwgNjU5NjksIDY1OTc0LCA2NTk4MCwgNjU5ODUsIDY1OTkwLCA2NTk5NSwgCi0gICAgNjYwMDEsIDY2MDA2LCA2NjAxMiwgNjYwMTcsIDY2MDIyLCA2NjAyNywgNjYwMzIsIDY2MDM3LCA2NjA0MiwgNjYwNDcsIAotICAgIDY2MDUzLCA2NjA1OCwgNjYwNjQsIDY2MDY5LCA2NjA3NCwgNjYwNzksIDY2MDg0LCA2NjA4OSwgNjYwOTQsIDY2MDk5LCAKLSAgICA2NjEwNCwgNjYxMTAsIDY2MTE1LCA2NjEyMCwgNjYxMjUsIDY2MTI5LCA2NjEzMywgNjYxMzgsIDY2MTQyLCA2NjE0NywgCi0gICAgNjYxNTIsIDY2MTU4LCA2NjE2MywgNjYxNjcsIDY2MTcyLCA2NjE3NiwgNjYxNzksIDY2MTgxLCA2NjE4NSwgNjYxODgsIAotICAgIDY2MTkzLCA2NjE5NywgNjYyMDEsIDY2MjA1LCA2NjIwOSwgNjYyMTgsIDY2MjIyLCAzMjUyNCwgNjYyMjUsIDMyNTI5LCAKLSAgICA2NjIzMiwgNjYyMzcsIDMyNTM0LCA2NjI0NiwgNjYyNTUsIDMyNTQwLCA2NjI2MCwgMzI1NDUsIDY2MjY5LCA2NjI3NCwgCi0gICAgMTE1NzEsIDY2Mjc4LCA2NjI4MywgNjYyODgsIDMyNTUwLCA2NjI5MiwgNDAxOTYsIDY2Mjk2LCA2NjI5OSwgNjYzMDMsIAotICAgIDgyMTEsIDY2MzA5LCA2NjMxNCwgNjYzMTgsIDM3MDUsIDMyNTU1LCA2NjMyMSwgNjYzMjUsIDY2MzI4LCA2NjMzMywgCi0gICAgNjYzMzcsIDY2MzQzLCA2NjM1MSwgNjYzNjQsIDY2MzczLCA2NjM3OSwgNjYzODQsIDY2MzkwLCA2NjM5NCwgNjY0MDAsIAotICAgIDY2NDA4LCA2NjQxMywgNjY0MTcsIDY2NDI0LCA2NjQzMCwgNjY0MzgsIDY2NDQ3LCA2NjQ1NSwgMzI1NTgsIDY2NDYyLCAKLSAgICA2NjQ3MiwgNjY0ODEsIDY2NDk0LCA2NjQ5OSwgNjY1MDQsIDY2NTEzLCA2NjUxOSwgNjY1MjYsIDY2NTM3LCA2NjU0OSwgCi0gICAgNjY1NTYsIDY2NTY1LCA2NjU3NCwgNjY1ODMsIDY2NTkwLCA2NjU5NiwgNjY2MDMsIDY2NjExLCA2NjYxOCwgNjY2MjYsIAotICAgIDY2NjM1LCA2NjY0MywgNjY2NTAsIDY2NjU4LCA2NjY2NywgNjY2NzUsIDY2Njg0LCA2NjY5NCwgNjY3MDMsIDY2NzExLCAKLSAgICA2NjcxOCwgNjY3MjYsIDY2NzM1LCA2Njc0MywgNjY3NTIsIDY2NzYyLCA2Njc3MSwgNjY3NzksIDY2Nzg4LCA2Njc5OCwgCi0gICAgNjY4MDcsIDY2ODE3LCA2NjgyOCwgNjY4MzgsIDY2ODQ3LCA2Njg1NSwgNjY4NjIsIDY2ODcwLCA2Njg3OSwgNjY4ODcsIAotICAgIDY2ODk2LCA2NjkwNiwgNjY5MTUsIDY2OTIzLCA2NjkzMiwgNjY5NDIsIDY2OTUxLCA2Njk2MSwgNjY5NzIsIDY2OTgyLCAKLSAgICA2Njk5MSwgNjY5OTksIDY3MDA4LCA2NzAxOCwgNjcwMjcsIDY3MDM3LCA2NzA0OCwgNjcwNTgsIDY3MDY3LCA2NzA3NywgCi0gICAgNjcwODgsIDY3MDk4LCA2NzEwOSwgNjcxMjEsIDY3MTMyLCA2NzE0MiwgNjcxNTEsIDY3MTU5LCA2NzE2NiwgNjcxNzQsIAotICAgIDY3MTgzLCA2NzE5MSwgNjcyMDAsIDY3MjEwLCA2NzIxOSwgNjcyMjcsIDY3MjM2LCA2NzI0NiwgNjcyNTUsIDY3MjY1LCAKLSAgICA2NzI3NiwgNjcyODYsIDY3Mjk1LCA2NzMwMywgNjczMTIsIDY3MzIyLCA2NzMzMSwgNjczNDEsIDY3MzUyLCA2NzM2MiwgCi0gICAgNjczNzEsIDY3MzgxLCA2NzM5MiwgNjc0MDIsIDY3NDEzLCA2NzQyNSwgNjc0MzYsIDY3NDQ2LCA2NzQ1NSwgNjc0NjMsIAotICAgIDY3NDcyLCA2NzQ4MiwgNjc0OTEsIDY3NTAxLCA2NzUxMiwgNjc1MjIsIDY3NTMxLCA2NzU0MSwgNjc1NTIsIDY3NTYyLCAKLSAgICA2NzU3MywgNjc1ODUsIDY3NTk2LCA2NzYwNiwgNjc2MTUsIDY3NjI1LCA2NzYzNiwgNjc2NDYsIDY3NjU3LCA2NzY2OSwgCi0gICAgNjc2ODAsIDY3NjkwLCA2NzcwMSwgNjc3MTMsIDY3NzI0LCA2NzczNiwgNjc3NDksIDY3NzYxLCA2Nzc3MiwgNjc3ODIsIAotICAgIDY3NzkxLCA2Nzc5OSwgNjc4MDYsIDY3ODE0LCA2NzgyMywgNjc4MzEsIDY3ODQwLCA2Nzg1MCwgNjc4NTksIDY3ODY3LCAKLSAgICA2Nzg3NiwgNjc4ODYsIDY3ODk1LCA2NzkwNSwgNjc5MTYsIDY3OTI2LCA2NzkzNSwgNjc5NDMsIDY3OTUyLCA2Nzk2MiwgCi0gICAgNjc5NzEsIDY3OTgxLCA2Nzk5MiwgNjgwMDIsIDY4MDExLCA2ODAyMSwgNjgwMzIsIDY4MDQyLCA2ODA1MywgNjgwNjUsIAotICAgIDY4MDc2LCA2ODA4NiwgNjgwOTUsIDY4MTAzLCA2ODExMiwgNjgxMjIsIDY4MTMxLCA2ODE0MSwgNjgxNTIsIDY4MTYyLCAKLSAgICA2ODE3MSwgNjgxODEsIDY4MTkyLCA2ODIwMiwgNjgyMTMsIDY4MjI1LCA2ODIzNiwgNjgyNDYsIDY4MjU1LCA2ODI2NSwgCi0gICAgNjgyNzYsIDY4Mjg2LCA2ODI5NywgNjgzMDksIDY4MzIwLCA2ODMzMCwgNjgzNDEsIDY4MzUzLCA2ODM2NCwgNjgzNzYsIAotICAgIDY4Mzg5LCA2ODQwMSwgNjg0MTIsIDY4NDIyLCA2ODQzMSwgNjg0MzksIDY4NDQ4LCA2ODQ1OCwgNjg0NjcsIDY4NDc3LCAKLSAgICA2ODQ4OCwgNjg0OTgsIDY4NTA3LCA2ODUxNywgNjg1MjgsIDY4NTM4LCA2ODU0OSwgNjg1NjEsIDY4NTcyLCA2ODU4MiwgCi0gICAgNjg1OTEsIDY4NjAxLCA2ODYxMiwgNjg2MjIsIDY4NjMzLCA2ODY0NSwgNjg2NTYsIDY4NjY2LCA2ODY3NywgNjg2ODksIAotICAgIDY4NzAwLCA2ODcxMiwgNjg3MjUsIDY4NzM3LCA2ODc0OCwgNjg3NTgsIDY4NzY3LCA2ODc3NywgNjg3ODgsIDY4Nzk4LCAKLSAgICA2ODgwOSwgNjg4MjEsIDY4ODMyLCA2ODg0MiwgNjg4NTMsIDY4ODY1LCA2ODg3NiwgNjg4ODgsIDY4OTAxLCA2ODkxMywgCi0gICAgNjg5MjQsIDY4OTM0LCA2ODk0NSwgNjg5NTcsIDY4OTY4LCA2ODk4MCwgNjg5OTMsIDY5MDA1LCA2OTAxNiwgNjkwMjgsIAotICAgIDY5MDQxLCA2OTA1MywgNjkwNjYsIDY5MDgwLCA2OTA5MywgNjkxMDUsIDY5MTE2LCA2OTEyNiwgNjkxMzUsIDY5MTQzLCAKLSAgICA2OTE1MCwgNjkxNTUsIDgwNTgsIDY5MTYyLCAzMjU2OCwgNjkxNjcsIDY5MTcyLCAzMjU3MywgNjkxNzgsIDIwOTE2LCAKLSAgICAzMjU3OCwgNjkxODMsIDY5MTg5LCA2OTE5NywgNjkyMDMsIDY5MjA5LCA2OTIxNiwgNjkyMjMsIDY5MjI4LCA2OTIzMiwgCi0gICAgNjkyMzUsIDY5MjM5LCA2OTI0OCwgNjkyNTQsIDY5MjY2LCA2OTI3NywgNjkyODEsIDMwODEsIDgwMzMsIDY5Mjg2LCAKLSAgICA2OTI4OSwgNjkyOTEsIDY5Mjk1LCA2OTI5OSwgNjkzMDMsIDY5MzA5LCA2OTMxNCwgMjU5MjcsIDY5MzE5LCA2OTMyMywgCi0gICAgNjkzMjYsIDY5MzMxLCA2OTMzNSwgNjkzNDIsIDY5MzQ4LCA2OTM1MiwgNjE3MCwgNjkzNTYsIDMyNTk1LCA2OTM2MSwgCi0gICAgNjkzNjgsIDY5Mzc3LCA2OTM4NSwgNjkzOTYsIDY5NDA0LCA2OTQxMiwgNjk0MTksIDY5NDI2LCA2OTQzMiwgNjk0NDMsIAotICAgIDMyNjAwLCA2OTQ0OCwgNjk0NTksIDY5NDcxLCA2OTQ3OSwgNjk0OTAsIDY5NDk5LCA2OTUxMCwgNjk1MTUsIDY5NTIzLCAKLSAgICAyNTU2LCA2OTUyOCwgMzQyNzAsIDY5NTQxLCA2OTU0NSwgNjk1NTcsIDY5NTY1LCA2OTU3MCwgNjk1NzgsIDE3NDcyLCAKLSAgICA2OTU4OSwgNjk1OTUsIDY5NjAyLCA2OTYxMCwgNjk2MTYsIDMyNjEwLCA2OTYyMSwgMzkxNCwgNTgyMTcsIDY5NjI4LCAKLSAgICA2OTYzMSwgNjk2MzksIDY5NjUyLCA2OTY2NSwgNjk2NzgsIDY5NjkxLCA2OTY5OCwgNjk3MDksIDY5NzE4LCA0MTY4NywgCi0gICAgNDE2OTIsIDY5NzIzLCA2OTcyNywgNjk3MzUsIDY5NzQyLCA2OTc1MSwgNjk3NTksIDY5NzY1LCA2OTc3NCwgNjk3ODIsIAotICAgIDY5NzkwLCA2OTc5NCwgNjk4MDMsIDY5ODEyLCA2OTgyMiwgNjk4MzUsIDY5ODQ4LCA2OTg1OCwgMzI2MTUsIDY5ODY0LCAKLSAgICA2OTg3MSwgNjk4NzcsIDMyNjIxLCA2OTg4MiwgNjk4ODUsIDY5ODg5LCA2OTg5NywgNjk5MDYsIDQxNDI1LCA2OTkxNCwgCi0gICAgNjk5MjMsIDY5OTMxLCA2OTkzOCwgNjk5NDYsIDY5OTU2LCA2OTk2NSwgNjk5NzQsIDY5OTgzLCA2OTk5MSwgNzAwMDIsIAotICAgIDcwMDEyLCA5MzU5LCAyMTU1NCwgNzAwMjEsIDcwMDI2LCA3MDAzMSwgNzAwMzUsIDcwMDM5LCA3MDA0NCwgNzAwNTAsIAotICAgIDcwMDU1LCA3MDA2MCwgNzAwNjYsIDcwMDcxLCA3MDA3NiwgMjE1MTksIDcwMDgxLCA3MDA4OCwgNzAwOTYsIDcwMTA0LCAKLSAgICA3MDEwOSwgNzAxMTYsIDcwMTIzLCA3MDEyOCwgNzAxMzIsIDcwMTM2LCA3MDE0NCwgNzAxNTIsIDMyNjM4LCA3MDE1OCwgCi0gICAgNzAxNjQsIDcwMTc2LCA3MDE4MiwgNzAxODYsIDcwMTkzLCA3MDE5OCwgNzAyMDksIDcwMjE5LCA3MDIyOSwgNzAyNDEsIAotICAgIDcwMjQ3LCA3MDI1NywgNzAyNjcsIDMyNjY1LCA3MDI3NiwgNzAyODUsIDcwMjkxLCA3MDMwMywgNzAzMTQsIDcwMzIxLCAKLSAgICA3MDMyNiwgNzAzMzAsIDcwMzM4LCA3MDM0NCwgNzAzNDksIDcwMzU0LCA3MDM2MSwgNzAzNjksIDcwMzgxLCA3MDM5MSwgCi0gICAgNzA0MDAsIDcwNDA5LCA3MDQxNiwgMzQxMzIsIDIzODM0LCA3MDQyMiwgNzA0MjcsIDcwNDMxLCA3MDQzNSwgNzA0NDAsIAotICAgIDcwNDQ2LCA3MDQ1NywgNzA0NzAsIDcwNDc1LCA3MDQ4MiwgMzI2NzAsIDcwNDg3LCA3MDQ5OSwgNzA1MDgsIDcwNTE4LCAKLSAgICA3MDUyOSwgNzA1NDIsIDcwNTQ5LCA3MDU1OCwgNzA1NjcsIDcwNTc1LCA3MDU4MCwgNzA1ODYsIDEwNTgsIDcwNTkxLCAKLSAgICA3MDU5NiwgNzA2MDEsIDcwNjA2LCA3MDYxMiwgNzA2MTcsIDcwNjIyLCA3MDYyOCwgNzA2MzQsIDcwNjM5LCA3MDY0MywgCi0gICAgNzA2NDgsIDcwNjUzLCA3MDY1OCwgNTg3MjksIDcwNjYzLCA3MDY2OCwgNzA2NzMsIDcwNjc4LCA3MDY4NCwgNzA2OTAsIAotICAgIDcwNjk1LCA3MDY5OSwgNzA3MDQsIDcwNzA5LCA3MDcxNCwgNzA3MjAsIDcwNzI1LCA3MDczMSwgNzA3MzYsIDcwNzQxLCAKLSAgICA3MDc0NiwgNzA3NTEsIDcwNzU1LCA3MDc2MSwgNzA3NjYsIDcwNzc1LCA3MDc4MCwgNzA3ODUsIDcwNzkwLCA3MDc5NSwgCi0gICAgNzA3OTksIDcwODA2LCA3MDgxMiwgMTcxMjIsIDE3MTI5LCA3MDgxNywgNzA4MjEsIDcwODI1LCA3MDgyOSwgNzA4MzMsIAotICAgIDQ1NDg3LCA3MDgzNywgNzA3NjcsIDcwODM5LCA3MDg0OSwgMzI2NzksIDcwODUyLCA3MDg2MSwgNzA4NjcsIDYxNDMsIAotICAgIDMyNjg0LCA3MDg3MSwgNzA4NzcsIDcwODgyLCA3MDg4OCwgNzA4OTMsIDcwODk3LCA3MDkwNCwgNzA5MDksIDcwOTE5LCAKLSAgICA3MDkyOCwgNzA5MzIsIDcwOTM4LCA3MDk0NCwgNzA5NTAsIDcwOTU0LCA3MDk2MiwgNzA5NjksIDcwOTc3LCA3MDk4NSwgCi0gICAgMzI2ODksIDcwOTkyLCA3MDk5NSwgNzEwMDIsIDcxMDA4LCA3MTAxMywgNzEwMTcsIDcxMDIzLCA3MTAzMCwgNzEwMzUsIAotICAgIDcxMDM5LCA3MTA0OCwgNzEwNTYsIDcxMDYyLCA3MTA2NywgMzI2OTQsIDcxMDc0LCA3MTA4MSwgNzEwODcsIDcxMDkyLCAKLSAgICA3MTA5OCwgNzExMDUsIDcxMTExLCAyMTI4MSwgMjc0MzgsIDcxMTE3LCA3MTEyMiwgNzExMjgsIDcxMTQwLCA3MDgwMCwgCi0gICAgNzA4MDcsIDIxNDU3LCA3MTE1MCwgNzExNTUsIDcxMTYyLCA3MTE2OCwgNzExNzUsIDcxMTgxLCA3MTE5MiwgNzExOTcsIAotICAgIDkxMDMsIDcxMjA1LCA3MTIwOCwgNzEyMTQsIDcxMjE4LCA3MTIyMiwgNzEyMjUsIDcxMjMxLCAzMjQ0MywgNjE5NCwgOTY0LCAKLSAgICAxMzQxMiwgNzEyMzgsIDcxMjQ0LCA3MTI1MCwgNzEyNTYsIDcxMjYyLCA3MTI2OCwgNzEyNzQsIDcxMjgwLCA3MTI4NiwgCi0gICAgNzEyOTEsIDcxMjk2LCA3MTMwMSwgNzEzMDYsIDcxMzExLCA3MTMxNiwgNzEzMjEsIDcxMzI2LCA3MTMzMSwgNzEzMzYsIAotICAgIDcxMzQxLCA3MTM0NiwgNzEzNTEsIDcxMzU3LCA3MTM2MiwgNzEzNjcsIDcxMzczLCA3MTM3OCwgNzEzODMsIDcxMzg5LCAKLSAgICA3MTM5NSwgNzE0MDEsIDcxNDA3LCA3MTQxMywgNzE0MTksIDcxNDI1LCA3MTQzMSwgNzE0MzcsIDcxNDQyLCA3MTQ0NywgCi0gICAgNzE0NTMsIDcxNDU4LCA3MTQ2MywgNzE0NjksIDcxNDc0LCA3MTQ3OSwgNzE0ODQsIDcxNDg5LCA3MTQ5NCwgNzE0OTksIAotICAgIDcxNTA0LCA3MTUwOSwgNzE1MTQsIDcxNTE5LCA3MTUyNCwgNzE1MjksIDcxNTM1LCA3MTU0MCwgNzE1NDUsIDcxNTUwLCAKLSAgICA3MTU1NiwgNzE1NjEsIDcxNTY2LCA3MTU3MSwgNzE1NzYsIDcxNTgyLCA3MTU4NywgNzE1OTIsIDcxNTk3LCA3MTYwMiwgCi0gICAgNzE2MDcsIDcxNjEyLCA3MTYxNywgNzE2MjIsIDcxNjI3LCA3MTYzMiwgNzE2MzcsIDcxNjQyLCA3MTY0NywgNzE2NTIsIAotICAgIDcxNjU3LCA3MTY2MiwgNzE2NjcsIDcxNjcyLCA3MTY3NywgNzE2ODMsIDcxNjg4LCA3MTY5MywgNzE2OTgsIDcxNzAzLCAKLSAgICA3MTcwOCwgNzE3MTMsIDcxNzE4LCAxODY0LCAxNDIsIDcxNzIzLCA3MTcyNywgNzE3MzEsIDcxNzM2LCA3MTc0NCwgNzE3NDgsIAotICAgIDcxNzU1LCA3MTc2MywgNzE3NjcsIDcxNzgwLCA3MTc4OCwgNzE3OTIsIDcxNzk1LCA3MTgwMCwgNzE4MDQsIDcxODA5LCAKLSAgICA3MTgxMywgNzE4MjEsIDcxODI1LCAyMDkyNCwgNzE4MzAsIDcxODM0LCA2MDkzMCwgNzE4MzgsIDcxODQxLCA3MTg0OSwgCi0gICAgNzE4NTcsIDcxODY1LCA3MTg3MCwgNzE4NzcsIDcxODgzLCA3MTg4OSwgNzE4OTQsIDcxOTAxLCA3MTkwNiwgNzE5MTQsIAotICAgIDY0OTA2LCA3MTkyMSwgNzE5MjYsIDcxOTMxLCA3MTkzNSwgMTE2MzgsIDcxOTM5LCA3MTk0NCwgNzE5NDksIDcxOTUzLCAKLSAgICA3MTk1NiwgNzE5NjIsIDcxOTY2LCA3MTk3NiwgNzE5ODUsIDcxOTg4LCA3MTk5MiwgNzE5OTksIDcyMDEyLCA3MjAxOCwgCi0gICAgNzIwMjYsIDcyMDM3LCA3MjA0OCwgNzIwNTksIDcyMDcwLCA3MjA3OSwgNzIwODUsIDcyMDk0LCA3MjEwMiwgNzIxMTIsIAotICAgIDcyMTI1LCA3MjEzMiwgNzIxNDMsIDcyMTQ5LCA3MjE1NCwgNzIxNTksIDcyMTY1LCA3MjE3MSwgNzIxODEsIDcyMTkwLCAKLSAgICA3MDQ4OSwgNzIxOTgsIDcyMjA0LCA3MjIxMiwgNzIyMTgsIDcyMjI2LCA3MjIyOSwgNzIyMzMsIDcyMjM3LCA3MjI0MCwgCi0gICAgNzIyNDYsIDcyMjUyLCA3MjI2MCwgNzIyNzIsIDcyMjg0LCA3MjI5MSwgNzIyOTUsIDcyMzA2LCA3MjMxNCwgNzIzMjEsIAotICAgIDcyMzMzLCA3MjM0MSwgNzIzNDksIDcyMzU2LCA3MjM2MiwgNzIzNzIsIDcyMzgxLCA3MjM4NiwgNzIzOTYsIDcyNDA1LCAKLSAgICA0MDc1MSwgNzI0MTIsIDcyNDE2LCA3MjQyMSwgNzI0MjksIDcyNDM2LCA3MjQ0MiwgNzI0NDYsIDcyNDU2LCA3MjQ2NywgCi0gICAgNzI0NzUsIDcyNDgyLCA3MjQ5NCwgNzI1MDYsIDcyNTE1LCA2OTUzMSwgNzI1MjIsIDcyNTMzLCA3MjU0NywgNzI1NTUsIAotICAgIDcyNTY1LCA3MjU3MiwgNzI1ODAsIDcyNTkyLCA3MjYwMSwgNzI2MDksIDcyNjE5LCA3MjYzMCwgNzI2NDIsIDcyNjUxLCAKLSAgICA3MjY2MSwgNzI2NjgsIDcyNjc3LCA3MjY5MiwgNzI3MDAsIDcyNzEwLCA3MjcxOSwgNzI3MjcsIDcyNzQwLCA3Mjc1NSwgCi0gICAgNzI3NTksIDcyNzY4LCA3Mjc4MCwgNzI3OTEsIDcyODAyLCA3MjgxMywgNzI4MjMsIDcyODM0LCA3Mjg0MiwgNzI4NDgsIAotICAgIDcyODU4LCA3Mjg2NiwgNzI4NzIsIDI5MDA3LCA3Mjg3NywgNzI4ODMsIDcyODg4LCA3Mjg5NSwgOTcwMSwgMTc0OTIsIAotICAgIDcyOTAxLCA3MjkxMCwgNzI5MTUsIDcyOTE5LCA3MjkyNiwgNzI5MzIsIDcyOTM3LCA3Mjk0MiwgNzI5NTAsIDcyOTU4LCAKLSAgICA3Mjk2MiwgNzI5NjUsIDcyOTY4LCA3Mjk3MCwgNzI5NzcsIDcyOTgzLCA3Mjk5NCwgNzI5OTksIDczMDAzLCA3MzAxMCwgCi0gICAgNzMwMTYsIDczMDIxLCA3MzAyOSwgNjU0MDUsIDY1NDE1LCA3MzAzNSwgNzMwNDIsIDczMDUyLCAxMDYxMSwgNzMwNTksIAotICAgIDczMDY0LCAyOTIwMywgNzMwNzMsIDczMDc4LCA3MzA4NSwgNzMwOTUsIDczMTAzLCA3MzExMSwgNzMxMjAsIDczMTI2LCAKLSAgICA3MzEzMiwgNzMxMzksIDczMTQ2LCA3MzE1MSwgNzMxNTUsIDczMTYzLCA3MzE2OCwgNzMxNzMsIDczMTgxLCA3MzE4OCwgCi0gICAgNzMxOTMsIDczMTk5LCA3MzIwMiwgNzMyMDYsIDczMjE1LCA3MTc3NSwgNzMyMjQsIDczMjI4LCA3MzIzNCwgNzMyNDUsIAotICAgIDczMjU1LCAxNzUwMSwgNzMyNjYsIDczMjc0LCAxNzUxMywgNzMyODEsIDczMjg1LCA3MzI5NCwgMjczMjQsIDczMzAxLCAKLSAgICA3MzMwNSwgNzMzMTAsIDczMzI3LCA3MzMzOSwgMTA1NjksIDczMzUxLCA3MzM1NiwgNzMzNjEsIDczMzY2LCAyMDk5NywgCi0gICAgNzMzNzAsIDczMzc1LCA3MzM4MCwgNzMzODYsIDczMzkxLCA1ODQ2LCAyMTAwMSwgNzMzOTYsIDczNDAxLCA3MzQwNywgCi0gICAgNzM0MTQsIDczNDE5LCA3MzQyNCwgNzM0MzAsIDczNDM2LCA3MzQ0MiwgNzM0NDcsIDczNDUzLCA3MzQ1NywgNzM0NzEsIAotICAgIDczNDc5LCA3MzQ4NywgNzM0OTMsIDczNDk4LCA3MzUwNSwgNzM1MTUsIDczNTI0LCA3MzUyOSwgNzM1MzQsIDczNTQyLCAKLSAgICA3MzU0NywgNzM1NTMsIDczNTU4LCA3MzU2NywgNTk3ODYsIDczNTcyLCA3MzU3NSwgNzM1OTMsIDczNjEyLCA3MzYyNSwgCi0gICAgNzM2MzksIDczNjU1LCA3MzY2MiwgNzM2NjksIDczNjc1LCA3MzY4MiwgNzM2ODcsIDczNjkzLCA3MzY5OSwgNzM3MDcsIAotICAgIDczNzEzLCA3MzcxOCwgNzM3MjMsIDczNzM5LCAxMDU4MiwgNzM3NTMsIDczNzYwLCA3Mzc2OCwgNzM3NzQsIDczNzc4LCAKLSAgICA3Mzc4MSwgNzM3ODYsIDczNzkxLCA3Mzc5OCwgNzM4MDMsIDczODEyLCA3MzgxNywgNzM4MjMsIDczODMyLCA3Mzg0MSwgCi0gICAgNzM4NDYsIDczODUwLCA3Mzg1OCwgNzM4NjcsIDExNjY3LCA3Mzg3NiwgNzM4ODQsIDczODg5LCA3Mzg5NSwgMTE2NzgsIAotICAgIDczOTAwLCA3MzkwMywgNzM5MDgsIDczOTE4LCA3MzkyNywgNzM5MzIsIDczOTM4LCA3Mzk0MywgNzM5NTEsIDczOTU4LCAKLSAgICA3Mzk2OSwgNzM5NzksIDczOTg0LCA2NDgzNCwgNzM5ODksIDczOTk1LCA3NDAwMCwgNzQwMDcsIDc0MDE2LCA3NDAyNCwgCi0gICAgNzQwMzAsIDc0MDM2LCA3NDA0MywgNzQwNDksIDc0MDUzLCAxNjk0NywgMzA1NSwgNzQwNTgsIDc0MDYyLCA3NDA2NiwgCi0gICAgNzQwNzIsIDc0MDgxLCA3NDA4NywgNzQwOTQsIDc0MDk4LCA3NDExOSwgNzQxNDEsIDc0MTU3LCA3NDE3NCwgNzQxOTMsIAotICAgIDc0MjAyLCA3NDIxMiwgNzQyMTksIDc0MjI2LCAyNzIxMSwgNzQyMzIsIDc0MjM2LCA3NDI0NCwgNzQyNTYsIDc0MjYyLCAKLSAgICA3NDI3MCwgNzQyNzQsIDc0MjgyLCA3NDI4OSwgNzQyOTMsIDc0Mjk5LCA3NDMwNSwgNzQzMTAsIDM1NjMsIDQxODg3LCAKLSAgICA3NDMxNiwgNzQzMjAsIDc0MzI0LCA3NDMyOCwgNzQzMzMsIDc0MzM4LCA3NDM0MywgNzQzNDksIDc0MzU1LCA3NDM2MSwgCi0gICAgNzQzNjgsIDc0Mzc0LCA3NDM4MSwgNzQzODcsIDc0MzkzLCA3NDM5OCwgNzQ0MDQsIDc0NDA5LCA3NDQxMywgNzQ0MTgsIAotICAgIDc0NDIyLCA3NDQyNywgNDE5MDIsIDc0NDMxLCA3NDQzNiwgNzQ0NDQsIDc0NDQ4LCA3NDQ1MywgNzQ0NjAsIDc0NDY5LCAKLSAgICA3NDQ3NSwgNzQ0NzksIDc0NDg2LCA3NDQ5MCwgNzQ0OTMsIDc0NTAwLCA3NDUwOSwgNzQ1MTQsIDc0NTE4LCA3NDUyNiwgCi0gICAgNzQ1MzUsIDc0NTM5LCA3NDU0NywgNzQ1NTMsIDc0NTU4LCA3NDU2MywgNzQ1NjksIDc0NTc1LCA3NDU4MCwgNzQ1ODQsIAotICAgIDc0NTkwLCA3NDU5NSwgNzQ1OTksIDc0NjAzLCA3NDYwNiwgNzQ2MTEsIDc0NjE5LCA3NDYyOSwgNzQ2MzQsIDM5Mzg3LCAKLSAgICA3NDY0MiwgNzQ2NTQsIDc0NjU4LCA3NDY2NCwgNzQ2NzYsIDc0Njg3LCA3NDY5NCwgNzQ3MDAsIDc0NzA3LCA3NDcxOSwgCi0gICAgNzQ3MjYsIDc0NzMyLCAyMTA3NSwgNzQ3MzYsIDc0NzQyLCA3NDc0OSwgNzQ3NTUsIDc0NzYxLCA3NDc2NiwgNzQ3NzEsIAotICAgIDc0Nzc2LCA3NDc4NSwgNzAzMywgNzQ3OTAsIDE2NDEzLCA3NDc5NiwgNzQ4MDAsIDc0ODA0LCA3NDgwOCwgNzQ4MTYsIAotICAgIDc0ODI1LCA3NDgyOSwgNzQ4MzYsIDc0ODQ1LCA3NDg1OCwgNzQ4NjQsIDc0NDIzLCAzMDA2NywgNzQ4NjksIDc0ODcxLCAKLSAgICA3NDg3NiwgNzQ4ODEsIDc0ODg2LCA3NDg5MSwgNzQ4OTYsIDc0OTAxLCA3NDkwNiwgNzQ5MTEsIDc0OTE2LCA3NDkyMSwgCi0gICAgNzQ5MjYsIDc0OTMxLCA3NDkzNiwgNzQ5NDEsIDc0OTQ3LCA3NDk1MiwgNzQ5NTcsIDc0OTYyLCA3NDk2NywgNzQ5NzIsIAotICAgIDc0OTc3LCA3NDk4MiwgNzQ5ODcsIDc0OTkzLCA3NDk5OSwgNzUwMDUsIDc1MDEwLCA3NTAxNSwgNzUwMjcsIDc1MDMyLCAKLSAgICAxODcwLCA0OSwgNzUwMzcsIDc1MDQyLCAzMjcyMSwgNzUwNDYsIDMyNzI2LCAzMjczMSwgMzI3MzcsIDMyNzQyLCA3NTA1MCwgCi0gICAgMzI3NDcsIDIyMDcwLCA3NTA3MiwgNzUwNzYsIDc1MDgwLCA3NTA4NSwgNzUwODksIDMyNzUxLCA3NTA5MywgNzUxMDEsIAotICAgIDMyNzU2LCA3NTEwOCwgNzUxMTEsIDc1MTE2LCA3NTEyMCwgOTUzNiwgNzUxMjksIDMyNzYxLCAyMTkzMiwgNzUxMzIsIAotICAgIDc1MTM2LCAxNDI4LCA3NTE0MSwgMzI3NzIsIDc1MTQ0LCA3NTE0OSwgMjU3MjAsIDI1NzMwLCAzNTIzMywgNzUxNTQsIAotICAgIDc1MTU5LCA3NTE2NCwgNzUxNjksIDc1MTc1LCA3NTE4MCwgNzUxODksIDc1MTk0LCA3NTIwMSwgNzUyMDcsIDc1MjEyLCAKLSAgICA3NTIxNywgNzUyMjIsIDc1MjMyLCA3NTI0MSwgNzUyNDYsIDc1MjU0LCA3NTI1OCwgNzUyNjYsIDMyNTg2LCAzNzI4OCwgCi0gICAgNzUyNzMsIDc1Mjc5LCA3NTI4NCwgNzUyODksIDEyMDA5LCA3NTI5NCwgNzUzMDAsIDc1MzA1LCA3NTMxMiwgNzUzMTgsIAotICAgIDc1MzIzLCA3NTMzMSwgNzUzNDEsIDc1MzUxLCA3NTM1NywgNzUzNjIsIDc1MzY4LCAxNzUyMywgNzUzNzUsIDM2MDQ4LCAKLSAgICA3NTM4OCwgNzUzOTMsIDc1Mzk5LCAzMDk2OCwgNzU0MTIsIDc1NDE4LCA3NTQyMiwgNzU0MzEsIDc1NDM4LCA3NTQ0NCwgCi0gICAgNzU0NTIsIDc1NDYxLCA3NTQ2OCwgNzU0NzQsIDc1NDc3LCA3NTQ4MSwgMjU4NjEsIDc1NDg1LCA3NTQ5MiwgNzU0OTgsIAotICAgIDc1NTA2LCA3NTUxMSwgMjM5NzcsIDc1NTE3LCA3NTUyMCwgNzU1MjgsIDc1NTM2LCA3NTU1MCwgNzU1NTcsIDc1NTYzLCAKLSAgICA3NTU3MCwgNzU1NzYsIDMyNzg2LCA3NTU4MCwgNzU1ODcsIDc1NTk1LCA3NTYwMywgNzU2MDksIDMyNzkxLCA3NTYxNywgCi0gICAgNzU2MjMsIDc1NjI4LCA3NTYzOCwgNzU2NDQsIDc1NjUzLCAzMDgwNSwgMzQ2OTEsIDc1NjYxLCA3NTY2NiwgNzU2NzEsIAotICAgIDc1Njc1LCA3NTY4MCwgNzU2ODQsIDc1NjkyLCAxNDkwNywgMzk0MDAsIDc1Njk3LCA3NTcwMiwgMzI3OTYsIDYyMjMyLCAKLSAgICA3NTcwNiwgNzU3MTEsIDc1NzE1LCA3NTcyNCwgNzU3MzIsIDc1NzM4LCA3NTc0MywgNzU3NDksIDc1NzU2LCA3NTc2MiwgCi0gICAgNzU3NjcsIDc1NzcyLCA3NTc4MSwgNzU3OTMsIDc1ODA4LCAzMzA1OCwgNzU4MTQsIDE2NTMyLCAzMjgwMCwgNzU4MTgsIAotICAgIDc1ODI1LCAyNDA4NywgNzU4MzEsIDc1ODM4LCA3NTg0NywgNzU4NTQsIDc1ODYzLCA3NTg2OSwgNzU4NzQsIDc1ODgyLCAKLSAgICA3NTg4OCwgMzI4MTAsIDc1ODkzLCA3NTkwMiwgNzQ2ODIsIDc1OTExLCA3NTkxOCwgNzU5MjQsIDc1OTMwLCA3NTk0MCwgCi0gICAgNzU5NDgsIDc1OTU1LCA3NTk1OSwgMzI4MTUsIDc1OTYyLCAzMjgyMSwgMzI4MjcsIDc1OTY3LCA3NTk3NSwgNzU5ODMsIAotICAgIDc1OTkzLCA3NjAwMiwgNzYwMTAsIDc2MDE3LCA3NjAyNywgMzI4MzIsIDc2MDMxLCA3NjAzMywgNzYwMzcsIDc2MDQyLCAKLSAgICA3NjA0NiwgNzYwNTAsIDc2MDU2LCA3NjA2MSwgNzYwNjUsIDc2MDc2LCA3NjA4MSwgNzYwODYsIDMwNjAsIDc2MDkwLCAKLSAgICA3NjA5NywgNzYxMDEsIDc2MTEwLCA3NjExOCwgNzYxMjUsIDc2MTMwLCA3NjEzNSwgNjIyNzgsIDc2MTM5LCA3NjE0MiwgCi0gICAgNzYxNDgsIDc2MTU2LCA3NjE2MiwgNzYxNjYsIDc2MTcxLCA3NjE3OCwgNzYxODMsIDc2MTg5LCAzNDcyMiwgNzYxOTQsIAotICAgIDc2MTk3LCA3NjIwMiwgNzYyMDYsIDc2MjExLCA3NjIxNiwgNzYyMjAsIDc2MjI4LCA3NjIzMiwgMjU3MzksIDI1NzQ4LCAKLSAgICA3NjIzOCwgNzYyNDQsIDc2MjUwLCA3NjI1NSwgNzYyNTksIDc2MjYyLCA3NjI3MiwgNzYyODEsIDc2Mjg2LCA3NjI5MiwgCi0gICAgNzYyOTksIDc2MzA1LCA3NjMwOSwgNzYzMTcsIDc2MzIyLCAzNDcyOCwgNzYzMjYsIDc2MzM0LCA3NjM0MCwgNzYzNDcsIAotICAgIDc2MzUyLCA3NjM1NiwgNzYzNjEsIDU4NDAzLCAzNDczNCwgNzYzNjcsIDc2MzcyLCA3NjM3NiwgNzYzODEsIDc2Mzg2LCAKLSAgICA3NjM5MSwgNzYzOTUsIDc2NDAwLCA3NjQwNSwgNzY0MTEsIDc2NDE2LCA3NjQyMSwgNzY0MjcsIDc2NDMzLCA3NjQzOCwgCi0gICAgNzY0NDIsIDc2NDQ3LCA3NjQ1MiwgNzY0NTcsIDc2NDYxLCAyNDA4NiwgNzY0NjYsIDc2NDcxLCA3NjQ3NywgNzY0ODMsIAotICAgIDc2NDg5LCA3NjQ5NCwgNzY0OTgsIDc2NTAzLCA3NjUwOCwgNzY1MTMsIDc2NTE3LCA3NjUyMiwgNzY1MjcsIDc2NTMyLCAKLSAgICA3NjUzNywgNzY1NDEsIDMyODQwLCA3NjU0OSwgNzY1NTMsIDc2NTYxLCA3NjU2OSwgNzY1ODAsIDc2NTg1LCA3NjU4OSwgCi0gICAgMjIzODQsIDc2NTk0LCA3NjYwMCwgNzY2MTAsIDc2NjE3LCA3NjYyMiwgNzY2MzEsIDc2NjM2LCA3NjY0MCwgNzY2NDUsIAotICAgIDc2NjUzLCA3NjY2MSwgNzY2NjgsIDY1MDY4LCA3NjY3NCwgNzY2ODIsIDc2Njg5LCA3NjcwMCwgNzY3MDYsIDc2NzEwLCAKLSAgICA3NjcxNiwgMzI4NTAsIDc2NzE5LCA3NjcyNiwgNzY3MzQsIDc2NzM5LCAzOTU5MSwgNzY3NDMsIDc2NzQ4LCA3Njc1NSwgCi0gICAgNzY3NjAsIDg5ODUsIDc2NzY0LCA3Njc3MiwgNzY3NzksIDc2Nzg2LCA3Njc5MiwgNzY4MDYsIDYzMzQwLCA3NjgxNCwgCi0gICAgNzY4MjAsIDc2ODI0LCA3NjgyNywgNzY4MzUsIDc2ODQyLCA3Njg0NywgNzY4NjAsIDc2ODY3LCA3Njg3MSwgNzY4NzgsIAotICAgIDc2ODgzLCA2MDgyMywgNzY4ODgsIDc2ODkxLCA3Njg5OCwgNzY5MDQsIDc2OTA4LCA3NjkxNiwgNzY5MjUsIDc2OTM1LCAKLSAgICA3Njk0NSwgNzY5NTQsIDc2OTYyLCA3Njk3MywgNzY5NzgsIDc2OTgyLCA3Njk4NywgNzY5OTEsIDM1MzY0LCA3Njk5OSwgCi0gICAgMjEzNDQsIDM1MzczLCA3NzAwNCwgNzcwMDksIDc3MDE0LCA3NzAxOSwgNzcwMjQsIDc3MDI5LCA3NzAzNCwgNzcwMzgsIAotICAgIDc3MDQzLCA3NzA0OCwgNzcwNTMsIDc3MDU4LCA3NzA2MywgNzcwNjgsIDc3MDcyLCA3NzA3NywgNzcwODIsIDc3MDg2LCAKLSAgICA3NzA5MCwgNzcwOTQsIDc3MDk4LCA3NzEwMywgNzcxMDgsIDc3MTEyLCA3NzExNywgNzcxMjEsIDc3MTI1LCA3NzEzMCwgCi0gICAgNzcxMzUsIDc3MTQwLCA3NzE0NSwgNzcxNDksIDc3MTU0LCA3NzE1OSwgNzcxNjMsIDc3MTY4LCA3NzE3MywgNzcxNzgsIAotICAgIDc3MTgzLCA3NzE4OCwgNzcxOTMsIDc3MTk4LCA3NzIwMywgNzcyMDgsIDc3MjEzLCA3NzIxOCwgNzcyMjMsIDc3MjI4LCAKLSAgICA3NzIzMywgNzcyMzgsIDc3MjQzLCA3NzI0OCwgNzcyNTMsIDc3MjU4LCA3NzI2MywgNzcyNjcsIDc3MjcyLCA3NzI3NywgCi0gICAgNzcyODIsIDc3Mjg3LCA3NzI5MiwgNzcyOTcsIDc3MzAyLCA3NzMwNywgNzczMTIsIDc3MzE3LCA3NzMyMiwgNzczMjYsIAotICAgIDc3MzMxLCA3NzMzNSwgNzczNDAsIDc3MzQ1LCA3NzM1MCwgNzczNTUsIDc3MzYwLCA3NzM2NSwgNzczNzAsIDc3Mzc1LCAKLSAgICA3NzM4MCwgNzczODQsIDc3Mzg4LCA3NzM5MywgNzczOTgsIDc3NDAyLCA3NzQwNywgNzc0MTIsIDc3NDE2LCA3NzQyMSwgCi0gICAgNzc0MjYsIDc3NDMxLCA3NzQzNiwgNzc0NDAsIDc3NDQ1LCA3NzQ1MCwgNzc0NTQsIDc3NDU5LCA3NzQ2MywgNzc0NjcsIAotICAgIDc3NDcxLCA3NzQ3NSwgNzc0ODAsIDc3NDg0LCA3NzQ4OCwgNzc0OTIsIDc3NDk2LCA3NzUwMCwgNzc1MDQsIDc3NTA4LCAKLSAgICA3NzUxMiwgNzc1MTYsIDc3NTIxLCA3NzUyNiwgNzc1MzEsIDc3NTM2LCA3NzU0MSwgNzc1NDYsIDc3NTUxLCA3NzU1NiwgCi0gICAgNzc1NjEsIDc3NTY2LCA3NzU3MCwgNzc1NzQsIDc3NTc4LCA3NzU4MiwgNzc1ODYsIDc3NTkwLCA3NzU5NSwgNzc1OTksIAotICAgIDc3NjA0LCA3NzYwOCwgNzc2MTMsIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMxLCA3NzYzNSwgNzc2MzksIDc3NjQzLCAKLSAgICA3NzY0NywgNzc2NTEsIDc3NjU1LCA3NzY1OSwgNzc2NjMsIDc3NjY3LCA3NzY3MSwgNzc2NzUsIDc3Njc5LCA3NzY4MywgCi0gICAgNzc2ODcsIDc3NjkyLCA3NzY5NywgNzc3MDEsIDc3NzA1LCA3NzcwOSwgNzc3MTMsIDc3NzE3LCA3NzcyMSwgNzc3MjYsIAotICAgIDc3NzMwLCA3NzczNCwgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU1LCA3Nzc1OSwgNzc3NjQsIDc3NzY4LCAKLSAgICA3Nzc3MiwgNzc3NzYsIDc3NzgwLCA3Nzc4NCwgNzc3ODgsIDc3NzkyLCA3Nzc5NiwgNzc4MDAsIDc3ODA0LCA3NzgwOCwgCisgICAgODkzNSwgODkzOSwgODk0NCwgODk0OSwgODk1NiwgODk2MiwgODk3MiwgNzkwOSwgODk3OCwgODk4MiwgODk4OSwgODk5NiwgCisgICAgNzY4LCA5MDAwLCA5MDA0LCA5MDA5LCA5MDE0LCA5MDE5LCA5MDIzLCA5MDI5LCA5MDM3LCA5MDQzLCA5MDQ3LCA5MDUzLCAKKyAgICA5MDYzLCA5MDY3LCA5MDczLCA5MDc4LCA5MDgyLCA5MDg4LCA5MDk0LCAyMTYxLCA5MDk5LCA5MTAxLCA5MTA2LCA5MTE0LCAKKyAgICA5MTIzLCA5MTI3LCA5MTMzLCA5MTM4LCA5MTQzLCA5MTQ4LCA5MTUzLCA5MTU5LCA5MTY0LCA5MTY5LCA0MDA2LCA5MTc0LCAKKyAgICA5MTc5LCA5MTgzLCA5MTg5LCA5MTk0LCA5MjAwLCA5MjA1LCA5MjEwLCA5MjE2LCA5MjIxLCA5MTI4LCA5MjI3LCA5MjMxLCAKKyAgICA5MjM4LCA5MjQ0LCA5MjQ5LCA5MjUzLCA2MTgzLCA5MjU4LCA5MjY3LCA5MjcyLCA5Mjc3LCA4MjE4LCA4MjI1LCA5MjgyLCAKKyAgICAyODUzLCA5Mjg2LCA5MjkxLCA5Mjk2LCA5MTM5LCA5MzAwLCA5MzA1LCA5MTQ0LCA5MTQ5LCA5MzEwLCA5MzE3LCA5MzI0LCAKKyAgICA5MzMwLCA5MzM2LCA5MzQyLCA5MzQ3LCA5MzUyLCA5MzU3LCA5MTU0LCA5MTYwLCA5MzYzLCA5MzY5LCA5Mzc0LCA5MzgyLCAKKyAgICA5MTY1LCA5Mzg3LCA5OTAsIDkzOTAsIDkzOTgsIDk0MDQsIDk0MTAsIDk0MTksIDk0MjcsIDk0MzIsIDk0MzgsIDk0NDYsIAorICAgIDk0NTMsIDk0NjgsIDk0ODUsIDk1MDQsIDk1MTMsIDk1MjEsIDk1MzYsIDk1NDcsIDk1NTcsIDk1NjcsIDk1NzUsIDk1ODEsIAorICAgIDk1OTMsIDk2MDIsIDk2MTAsIDk2MTcsIDk2MjQsIDk2MzAsIDk2MzUsIDk2NDMsIDk2NTMsIDk2NjAsIDk2NzAsIDk2ODAsIAorICAgIDk2OTAsIDk2OTgsIDk3MDUsIDk3MTQsIDk3MjQsIDk3MzgsIDk3NTMsIDk3NjIsIDk3NzAsIDk3NzUsIDk3NzksIDk3ODgsIAorICAgIDk3OTQsIDk3OTksIDk4MDksIDk4MTksIDk4MjksIDk4MzQsIDk4MzgsIDk4NDcsIDk4NTIsIDk4NjIsIDk4NzMsIDk4ODYsIAorICAgIDk4OTQsIDk5MDcsIDk5MTksIDk5MjcsIDk5MzIsIDk5MzYsIDk5NDIsIDk5NDcsIDk5NTUsIDk5NjMsIDk5NzAsIDk5NzUsIAorICAgIDk5ODMsIDk5ODksIDk5OTIsIDk5OTYsIDEwMDAyLCAxMDAxMCwgMTAwMTUsIDEwMDE5LCAxMDAyNywgMTAwMzYsIDEwMDQ0LCAKKyAgICAxMDA1MCwgMTAwNTQsIDEwMDYxLCAxMDA3MiwgMTAwNzYsIDEwMDc5LCAxMDA4NSwgOTE3MCwgMTAwOTAsIDEwMDk2LCAKKyAgICAxMDEwMywgMTAxMDksIDEwMTE0LCAxMDEyMSwgMTAxMjgsIDEwMTM1LCAxMDE0MiwgMTAxNDksIDEwMTU2LCAxMDE2MywgCisgICAgMTAxNzAsIDEwMTc1LCA5NDgxLCAxMDE4MCwgMTAxODYsIDEwMTkzLCAxMDIwMCwgMTAyMDUsIDEwMjEyLCAxMDIyMSwgCisgICAgMTAyMjUsIDEwMjM3LCA4MjU2LCAxMDI0MSwgMTAyNDQsIDEwMjQ4LCAxMDI1MiwgMTAyNTYsIDEwMjYwLCAxMDI2NiwgCisgICAgMTAyNzIsIDEwMjc3LCAxMDI4MywgMTAyODgsIDEwMjkzLCAxMDI5OSwgMTAzMDQsIDEwMzA5LCA4OTUyLCAxMDMxNCwgCisgICAgMTAzMTgsIDEwMzIyLCAxMDMyNiwgMTAzMzEsIDEwMzM2LCAxMDM0NCwgMTAzNTAsIDEwMzU0LCAxMDM1OCwgMTAzNjUsIAorICAgIDEwMzcwLCAxMDM3OCwgMTAzODMsIDEwMzg3LCAxMDM5MCwgMTAzOTYsIDEwNDAzLCAxMDQwNywgMTA0MTAsIDEwNDE1LCAKKyAgICAxMDQxOSwgNDA0NSwgMTA0MjUsIDEwNDM0LCAzNiwgMTA0NDIsIDEwNDQ4LCAxMDQ1MywgODk2NywgMTA0NTgsIDEwNDYzLCAKKyAgICAxMDQ2NywgMTA0NzAsIDEwNDg1LCAxMDUwNCwgMTA1MTYsIDEwNTI5LCAxMDU0MiwgMTA1NTUsIDEwNTY5LCAxMDU4MiwgCisgICAgMTA1OTcsIDEwNjA0LCA5MTc1LCAxMDYxMCwgMTA2MjQsIDEwNjI5LCAxMDYzNSwgMTA2NDAsIDEwNjQ4LCAxMDY1MywgCisgICAgODA0MCwgMTA2NTgsIDEwNjYxLCAxMDY2OCwgMTA2NzMsIDEwNjc3LCAyODU4LCA5OTgsIDEwNjgzLCAxMDY4NywgMTA2OTMsIAorICAgIDEwNjk5LCAxMDcwNCwgMTA3MTAsIDEwNzE1LCA5MTg0LCAxMDcyMSwgMTA3MjcsIDEwNzMyLCAxMDczNywgMTA3NDUsIAorICAgIDEwNzUxLCAxMDc2NCwgMTA3NzIsIDEwNzc5LCA5MTkwLCAxMDc4NSwgMTA3OTMsIDEwODAxLCAxMDgwOCwgMTA4MjEsIAorICAgIDEwODMzLCAxMDg0MywgMTA4NTEsIDEwODU4LCAxMDg2NSwgMTA4NzQsIDEwODgzLCAxMDg5MSwgMTA4OTgsIDEwOTAzLCAKKyAgICAxMDkwOSwgOTE5NSwgMTA5MTQsIDEwOTIwLCA5MjAxLCAxMDkyNSwgMTA5MjgsIDEwOTM1LCAxMDk0MSwgMTA5NTQsIDg2NjksIAorICAgIDEwOTY1LCAxMDk3MSwgMTA5ODAsIDEwOTg4LCAxMDk5NSwgMTEwMDEsIDExMDA3LCAxMTAxMiwgMTEwMTYsIDExMDIxLCAKKyAgICAxMDQ3NywgMTEwMjcsIDkyMDYsIDExMDM0LCAxMTAzOSwgMTEwNDYsIDExMDUyLCAxMTA1OCwgMTEwNjMsIDExMDcxLCAKKyAgICAxMTA3OSwgMTEwODYsIDExMDkwLCAxMTEwNCwgMTExMTQsIDExMTE5LCAxMTEyMywgMTExMzQsIDExMTQwLCAxMTE0NSwgCisgICAgMTExNTAsIDkyMTEsIDkyMTcsIDExMTU0LCAxMTE1NywgMTExNjIsIDExMTc0LCAxMTE4MSwgMTExODYsIDExMTkwLCAKKyAgICAxMTE5NSwgMTExOTksIDExMjA2LCAxMTIxMiwgOTIyMiwgOTEyOSwgMTEyMTksIDI4NjMsIDgsIDExMjI2LCAxMTIzMSwgCisgICAgMTEyMzUsIDExMjQxLCAxMTI0OSwgMTEyNTksIDExMjY0LCAxMTI2OSwgMTEyNzYsIDExMjgzLCAxMTI4NywgMTEyOTgsIAorICAgIDExMzA4LCAxMTMxNywgMTEzMjksIDExMzM0LCAxMTMzOCwgMTEzNDYsIDExMzYwLCAxMTM2NCwgMTEzNjcsIDExMzc1LCAKKyAgICAxMTM4MiwgMTEzOTAsIDExMzk0LCAxMTQwNSwgMTE0MDksIDExNDE2LCAxMTQyMSwgMTE0MjUsIDExNDMxLCAxMTQzNiwgCisgICAgMTE0NDAsIDExNDQ2LCAxMTQ1MSwgMTE0NjIsIDExNDY2LCAxMTQ2OSwgMTE0NzUsIDExNDgwLCAxMTQ4NiwgMTE0OTIsIAorICAgIDExNDk5LCAxMTUxMCwgMTE1MjAsIDExNTMwLCAxMTUzOSwgMTE1NDYsIDExNTU1LCA5MjMyLCA5MjM5LCA5MjQ1LCA5MjUwLCAKKyAgICAxMTU2MSwgMTE1NjcsIDkyNTQsIDExNTczLCAxMTU3NiwgMTE1ODMsIDExNTg4LCAxMTYwMywgMTE2MTksIDExNjM0LCAKKyAgICAxMTY0MiwgMTE2NDgsIDExNjUzLCA4MzgsIDQyMCwgMTE2NTgsIDExNjY2LCAxMTY3MywgMTE2NzksIDExNjg0LCAxMTY4OSwgCisgICAgOTI1OSwgMTE2OTEsIDExNjk1LCAxMTcwMCwgMTE3MDQsIDExNzE0LCAxMTcxOSwgMTE3MjMsIDExNzMyLCAxMTczNiwgCisgICAgMTE3MzksIDkyNjgsIDExNzQ2LCAxMTc0OSwgMTE3NTcsIDExNzY0LCAxMTc3MiwgMTE3NzYsIDExNzgzLCAxMTc5MiwgCisgICAgMTE3OTUsIDExNzk5LCAxMTgwMywgMTE4MDksIDExODEzLCAxMTgxNywgMTE4MjEsIDExODI3LCAxMTgzNywgMTE4NDEsIAorICAgIDExODQ5LCAxMTg1MywgMTE4NjAsIDExODY0LCAxMTg2OSwgMTE4NzMsIDExODgwLCAxMTg4NiwgMTE4OTQsIDExOTAwLCAKKyAgICAxMTkwNSwgMTE5MTUsIDExOTIwLCAxMTkyNSwgMTE5MjksIDExOTM3LCAzOTA1LCAxMTk0NSwgMTE5NTAsIDkyNzMsIAorICAgIDExOTU0LCAxMTk1OCwgMTE5NjEsIDExOTY5LCAxMTk3NiwgMTE5ODAsIDU5OTEsIDExOTg0LCAxMTk4OSwgMTE5OTMsIAorICAgIDEyMDA0LCAxMjAxNCwgMTIwMTksIDEyMDI1LCAxMjAyOSwgMTIwMzIsIDEyMDQwLCAxMjA0NSwgMTIwNTAsIDEyMDU3LCAKKyAgICAxMjA2MiwgOTI3OCwgMTIwNjcsIDEyMDcxLCAxMjA3OCwgMTcyMiwgNjE0NSwgMTIwODMsIDEyMDg4LCAxMjA5MywgMTIwOTgsIAorICAgIDEyMTA0LCAxMjEwOSwgMTIxMTUsIDEyMTIwLCAxMjEyNSwgMTIxMzAsIDEyMTM1LCAxMjE0MCwgMTIxNDUsIDEyMTUwLCAKKyAgICAxMjE1NSwgMTIxNjAsIDEyMTY1LCAxMjE3MCwgMTIxNzUsIDEyMTgwLCAxMjE4NSwgMTIxOTAsIDEyMTk1LCAxMjIwMSwgCisgICAgMTIyMDYsIDEyMjExLCAxMjIxNiwgMTIyMjEsIDEyMjI2LCAxMjIzMiwgMTIyMzcsIDEyMjQyLCAxMjI0OCwgMTIyNTMsIAorICAgIDEyMjU5LCAxMjI2NCwgMTIyNzAsIDEyMjc1LCAxMjI4MCwgMTIyODUsIDEyMjkwLCAxMjI5NiwgMTIzMDEsIDEyMzA2LCAKKyAgICAxMjMxMSwgNzM3LCAxMzksIDEyMzE5LCAxMjMyMywgMTIzMjgsIDEyMzMzLCAxMjMzNywgMTIzNDEsIDEyMzQ1LCAxMjM1MCwgCisgICAgMTIzNTQsIDEyMzU5LCAxMjM2MywgMTIzNjYsIDEyMzcwLCAxMjM3NCwgMTIzODAsIDEyMzg1LCAxMjM5NSwgMTI0MDEsIAorICAgIDEyNDA5LCAxMjQxMywgMTI0MTcsIDEyNDI0LCAxMjQzMiwgMTI0NDEsIDEyNDUyLCAxMjQ1OSwgMTI0NjYsIDEyNDcwLCAKKyAgICAxMjQ3OSwgMTI0ODgsIDEyNDk2LCAxMjUwNSwgMTI1MTQsIDEyNTIzLCAxMjUzMiwgMTI1NDIsIDEyNTUyLCAxMjU2MiwgCisgICAgMTI1NzIsIDEyNTgyLCAxMjU5MSwgMTI2MDEsIDEyNjExLCAxMjYyMSwgMTI2MzEsIDEyNjQxLCAxMjY1MSwgMTI2NjEsIAorICAgIDEyNjcwLCAxMjY4MCwgMTI2OTAsIDEyNzAwLCAxMjcxMCwgMTI3MjAsIDEyNzMwLCAxMjczOSwgMTI3NDksIDEyNzU5LCAKKyAgICAxMjc2OSwgMTI3NzksIDEyNzg5LCAxMjc5OSwgMTI4MDksIDEyODE5LCAxMjgyOSwgMTI4MzgsIDEyODQ4LCAxMjg1OCwgCisgICAgMTI4NjgsIDEyODc4LCAxMjg4OCwgMTI4OTgsIDEyOTA4LCAxMjkxOCwgMTI5MjgsIDEyOTM4LCAxMjk0NywgMTI1NiwgCisgICAgMTI5NTMsIDEyOTU2LCAxMjk2MCwgMTI5NjUsIDEyOTcyLCAxMjk3OCwgMTI5ODMsIDEyOTg3LCAxMjk5MiwgMTMwMDEsIAorICAgIDEzMDA5LCAxMzAxNCwgMTMwMTgsIDEzMDIyLCAxMzAyOCwgMTMwMzMsIDEzMDM5LCA5Mjg3LCAxMzA0NCwgMTMwNDksIAorICAgIDEzMDU4LCA5MjkyLCAxMzA2MywgMTMwNjYsIDEzMDcyLCAxMzA4MCwgOTI5NywgMTMwODcsIDEzMDkxLCAxMzA5NSwgCisgICAgMTMwOTksIDEzMTA5LCAxMzExNSwgMTMxMjEsIDEzMTI2LCAxMzEzNSwgMTMxNDMsIDEzMTUwLCAxMzE1NywgMTMxNjIsIAorICAgIDEzMTY5LCAxMzE3NCwgMTMxNzgsIDEzMTgxLCAxMzE5MiwgMTMyMDIsIDEzMjExLCAxMzIxOSwgMTMyMzAsIDEzMjQyLCAKKyAgICAxMzI1MiwgMTMyNTcsIDEzMjYxLCAxMzI2NiwgMTMyNzEsIDEzMjc1LCAxMzI4MSwgMTMyODksIDEzMjk2LCAxMzMwNywgCisgICAgMTMzMTIsIDEzMzIyLCAxMzMyNiwgMTMzMjksIDEzMzM2LCAxMzM0NiwgMTMzNTUsIDEzMzYyLCAxMzM2NiwgMTMzNzMsIAorICAgIDEzMzc5LCAxMzM4NCwgMTMzODksIDEzMzkzLCAxMzQwMiwgMTM0MDcsIDEzNDEzLCAxMzQxNywgMTM0MjIsIDEzNDI2LCAKKyAgICAxMzQzNSwgMTM0NDMsIDEzNDUxLCAxMzQ1OCwgMTM0NjYsIDEzNDc4LCAxMzQ4OSwgMTM0OTksIDEzNTA2LCAxMzUxMiwgCisgICAgMTM1MjEsIDEzNTMyLCAxMzU0MSwgMTM1NTMsIDEzNTY1LCAxMzU3NywgMTM1ODcsIDEzNTk2LCAxMzYwNSwgMTM2MTMsIAorICAgIDEzNjIwLCAxMzYyOSwgMTM2MzcsIDEzNjQxLCAxMzY0NywgMTM2NTMsIDEzNjU4LCA3NzUzLCAxMzY2MiwgMTM2NjQsIAorICAgIDEzNjY4LCAxMzY3MywgMTM2NzksIDEzNjg4LCAxMzY5MiwgMTM2OTgsIDEzNzA2LCAxMzcxMywgMTM3MjIsIDEzNzMxLCAKKyAgICAxMzc0MCwgMTM3NDksIDEzNzU4LCAxMzc2NywgMTM3NzYsIDEzNzg1LCAxMzc5NSwgMTM4MDUsIDEzODE0LCAxMzgyMCwgCisgICAgMTM4MjcsIDEzODM0LCAxMzg0MCwgMTM4NTQsIDEzODYxLCAxMzg2OSwgMTM4NzgsIDEzODg0LCAxMzg5MywgMTM5MDIsIAorICAgIDEzOTEzLCAxMzkyMywgMTM5MzEsIDEzOTM4LCAxMzk0NiwgMTM5NTUsIDEzOTY4LCAxMzk3NiwgMTM5ODMsIDEzOTk2LCAKKyAgICAxNDAwMiwgMTQwMDgsIDE0MDE4LCAxNDAyNywgMTQwMzYsIDE0MDQxLCAxNDA0NSwgMTQwNTEsIDE0MDU3LCAxNDA2NCwgCisgICAgODk2NiwgMTQwNjksIDE0MDc0LCAxNDA4MSwgMTQwODYsIDEyMzc2LCAxNDA5MSwgMTQwOTksIDE0MTA1LCAxNDExMCwgCisgICAgMTQxMTgsIDE0MTI2LCAxNDEzMywgMTQxNDEsIDE0MTQ3LCAxNDE1NSwgMTQxNjMsIDE0MTY5LCAxNDE3NCwgMTQxODAsIAorICAgIDE0MTg3LCAxNDE5MywgMTQxOTgsIDE0MjAyLCAxNDIxMywgMTQyMjEsIDE0MjI3LCAxNDIzMiwgMTQyNDEsIDE0MjQ3LCAKKyAgICAxNDI1MiwgMTQyNjEsIDE0Mjc1LCAzODUzLCAxNDI3OSwgMTQyODQsIDE0Mjg5LCAxNDI5NSwgMTQzMDAsIDE0MzA1LCAKKyAgICAxNDMwOSwgMTQzMTQsIDE0MzE5LCAxNDMyNCwgNzc1MiwgMTQzMjksIDE0MzM0LCAxNDMzOSwgMTQzNDQsIDE0MzQ5LCAKKyAgICAxNDM1MywgMTQzNTgsIDE0MzYzLCAxNDM2OCwgMTQzNzMsIDE0Mzc5LCAxNDM4NSwgMTQzOTAsIDE0Mzk0LCAxNDM5OSwgCisgICAgMTQ0MDQsIDE0NDA5LCA5MzAxLCAxNDQxNCwgMTQ0MTksIDE0NDI0LCAxNDQyOSwgMTQ0MzQsIDE0NDUxLCAxNDQ2OSwgCisgICAgMTQ0ODEsIDE0NDk0LCAxNDUxMSwgMTQ1MjcsIDE0NTQ0LCAxNDU1NCwgMTQ1NzMsIDE0NTg0LCAxNDU5NSwgMTQ2MDYsIAorICAgIDE0NjE3LCAxNDYyOSwgMTQ2NDAsIDE0NjUxLCAxNDY2OCwgMTQ2NzksIDE0NjkwLCAxNDY5NSwgOTMwNiwgMTQ3MDAsIAorICAgIDE0NzA0LCAyMzgxLCAxNDcwOCwgMTQ3MTEsIDE0NzE3LCAxNDcyNSwgMTQ3MzMsIDE0NzM4LCAxNDc0NiwgMTQ3NTQsIAorICAgIDE0NzYxLCAxNDc2NiwgMTQ3NzIsIDE0Nzc5LCAxNDc4NywgMTQ3OTQsIDE0ODA2LCAxNDgxNCwgMTQ4MTksIDExNTk3LCAKKyAgICAxNDgyNSwgMTQ4MzQsIDE0ODQzLCAxNDg1MSwgMTQ4NTgsIDE0ODY0LCAxNDg3MiwgMTQ4NzksIDE0ODg1LCAxNDg5MiwgCisgICAgMTQ4OTgsIDE0OTA3LCAxNDkxNSwgMTQ5MjUsIDE0OTMyLCAxNDkzOCwgMTQ5NDYsIDE0OTUyLCAxNDk2MCwgMTQ5NjcsIAorICAgIDE0OTgwLCAxNDk4NywgMTQ5OTYsIDE1MDA1LCAxNTAxNCwgMTUwMjIsIDE1MDMyLCAxNTAzOSwgMTUwNDQsIDM1NjAsIAorICAgIDE1MDUxLCAxNTA1NiwgMTM3MiwgMTUwNjAsIDE0MzMwLCAxNTA2NCwgMTUwNzAsIDE1MDc0LCAxNTA4MiwgMTUwOTQsIAorICAgIDE1MDk5LCAxNTEwNiwgMTUxMTIsIDE1MTE3LCAxNTEyNCwgMTQzMzUsIDE1MTI4LCAxNTEzMiwgMTUxMzYsIDE0MzQwLCAKKyAgICAxNTE0MCwgMTQzNDUsIDE1MTQ0LCAxNTE1MSwgMTUxNTYsIDE1MTYwLCAxNTE2NywgMTUxNzEsIDE1MTc5LCAxNTE4NiwgCisgICAgMTUxOTAsIDE1MTk3LCAxNTIxNCwgMTUyMjMsIDE1MjI3LCAxNTIzMCwgMTUyMzgsIDE1MjQ0LCAxNTI0OSwgMzYzOCwgCisgICAgMTUyNTMsIDE1MjU1LCAxNTI2MywgMTUyNzAsIDE1MjgwLCAxNTI5MiwgMTUyOTcsIDE1MzAzLCAxNTMwOCwgMTUzMTIsIAorICAgIDE1MzE4LCAxNTMyMywgMTUzMjksIDE1MzMyLCAxNTMzOSwgMTUzNDcsIDE1MzU0LCAxNTM2MCwgMTUzNjYsIDE1MzcxLCAKKyAgICAxNTM3OCwgMTUzODQsIDE1Mzg5LCAxNTM5NiwgMTU0MDAsIDE1NDA2LCAxNTQxMCwgMTU0MTcsIDE1NDIzLCAxNTQyOSwgCisgICAgMTU0MzcsIDE1NDQzLCAxNTQ0OCwgMTU0NTQsIDE1NDYyLCAxNTQ3MCwgMTU0NzYsIDE1NDgyLCAxNTQ4NywgMTU0OTQsIAorICAgIDE1NDk5LCAxNTUwMywgMTU1MDksIDE1NTE0LCAxNTUyMSwgMTU1MjYsIDE1NTMyLCAxNTUzNSwgMTU1NDEsIDE1NTQ3LCAKKyAgICAxNTU1MCwgMTU1NTQsIDE1NTY2LCAxNTU3MiwgMTU1NzcsIDE1NTg0LCAxNTU5MCwgMTU1OTYsIDE1NjA3LCAxNTYxNywgCisgICAgMTU2MjYsIDE1NjM0LCAxNTY0MSwgMTU2NTIsIDE1NjYyLCAxNTY3MiwgMTU2ODAsIDE1NjgzLCAxNDM1OSwgMTU2ODgsIAorICAgIDE1NjkzLCAxNDM2NCwgMTQ0OTksIDE1NzAxLCAxNTcxNCwgMTU3MjksIDE1NzQwLCAxNDUxNiwgMTU3NTgsIDE1NzcxLCAKKyAgICAxNTc4NCwgMTU3OTUsIDEwNDkyLCAxNTgwNiwgMTU4MTksIDE1ODM4LCAxNTg0OSwgMTU4NjAsIDE1ODcxLCAyNjQ5LCAKKyAgICAxNTg4NCwgMTU4ODgsIDE1ODk2LCAxNTkxMSwgMTU5MjYsIDE1OTM3LCAxNTk0NCwgMTU5NTAsIDE1OTU4LCAxNTk2MiwgCisgICAgMTU5NjgsIDE1OTcxLCAxNTk4MSwgMTU5ODksIDE1OTk2LCAxNjAwNCwgMTYwMTQsIDE2MDE5LCAxNjAyNiwgMTYwMzEsIAorICAgIDE2MDM4LCAxNjA0OSwgMTYwNTksIDE2MDY1LCAxNjA3MCwgMTYwNzUsIDE0MzY5LCAxNjA3OSwgMTYwODUsIDE2MDkxLCAKKyAgICAxNjA5NiwgMTYxMDEsIDE2MTA2LCAxNjExMCwgMTQzNzQsIDE0MzgwLCAxNjExNCwgMTQzODYsIDE2MTE5LCAxNjEyNywgCisgICAgMTYxMzYsIDE2MTQzLCA5MTUwLCAxNjE0NywgMTYxNDksIDE2MTU0LCAxNjE1OSwgMTYxNjUsIDE2MTcwLCAxNjE3NSwgCisgICAgMTYxODAsIDE2MTg1LCAxNjE4OSwgMTYxOTUsIDE2MjAxLCAxNjIwNiwgMTYyMTIsIDE2MjE3LCAxNjIyMiwgMTYyMjgsIAorICAgIDE2MjMzLCAxNjIzOCwgMTYyNDMsIDE2MjQ4LCAxNjI1NCwgMTYyNTksIDE2MjY0LCAxNjI3MCwgMTYyNzYsIDE2MjgxLCAKKyAgICAxNjI4NiwgMTYyOTMsIDE2Mjk5LCAxNjMxMCwgMTYzMTcsIDE2MzIyLCAxNjMyNiwgMTYzMzAsIDE2MzMzLCAxNjM0MSwgCisgICAgMTYzNDYsIDE2MzUzLCAxNjM2MCwgMTYzNjYsIDE2MzcxLCAxNjM3NiwgMTYzODMsIDE2MzkzLCAxNjM5OCwgMTY0MDUsIAorICAgIDE2NDExLCAxNjQyMSwgMTY0MzEsIDE2NDQ1LCAxNjQ1OSwgMTY0NzMsIDE2NDg3LCAxNjUwMiwgMTY1MTcsIDE2NTM0LCAKKyAgICAxNjU1MiwgMTY1NjUsIDE2NTcxLCAxNjU3NiwgMTY1ODEsIDE2NTg1LCAxNjU5MCwgMTY1OTgsIDE2NjA0LCAxNjYwOSwgCisgICAgMTY2MTQsIDE2NjE4LCAxNjYyMywgMTY2MjcsIDE2NjMyLCAxNjYzNiwgMTY2NDcsIDE2NjUzLCAxNjY1OCwgMTY2NjMsIAorICAgIDE2NjcwLCAxNjY3NSwgMTY2NzksIDE2Njg0LCAxNjY4OSwgMTY2OTUsIDE2NzAyLCAxNjcwOCwgMTY3MTMsIDE2NzE3LCAKKyAgICAxNjcyMywgMTY3MjgsIDE2NzMzLCAxNjczNywgMTY3NDMsIDE2NzQ4LCAxNjc1MywgMTY3NjAsIDE2NzY1LCAxMzExMSwgCisgICAgMTY3NjksIDE2Nzc0LCAxNjc3OCwgMTY3ODMsIDE2Nzg5LCAxNjc5NSwgMTY4MDIsIDE2ODEyLCAxNjgyMCwgMTY4MjcsIAorICAgIDE2ODMyLCAxNjgzNiwgMTY4NDUsIDE2ODUzLCAxNjg2MCwgMTY4NjcsIDE2ODczLCAxNjg3OSwgMTY4ODQsIDE2ODg5LCAKKyAgICAxNjg5NSwgMTY5MDAsIDE2OTA2LCAxNjkxMSwgMTY5MTcsIDE2OTIzLCAxNjkzMCwgMTY5MzYsIDE2OTQxLCAxNjk0NiwgCisgICAgOTM0OCwgMTY5NTUsIDE2OTU4LCAxNjk2NCwgMTY5NjksIDE2OTc0LCAxNjk4NCwgMTY5OTEsIDE2OTk3LCAxNzAwMiwgCisgICAgMTcwMDcsIDE3MDEzLCAxNzAxOCwgMTcwMjQsIDE3MDI5LCAxNzAzNSwgMTcwNDEsIDE3MDQ2LCAxNzA1NCwgMTcwNjEsIAorICAgIDE3MDY2LCAxNzA3MSwgMTcwNzcsIDE3MDgyLCAxNzA4NiwgMTcwOTUsIDE3MTA2LCAxNzExMywgMTcxMTgsIDE3MTI2LCAKKyAgICAxNzEzMiwgMTcxMzksIDE3MTQ1LCAxNzE1MCwgMTcxNTQsIDE3MTYwLCAxNzE2NSwgMTcxNzAsIDE3MTc1LCAxNDQwLCAKKyAgICA3Nzc3LCAyODc3LCAxNzE3OSwgMTcxODMsIDE3MTg3LCAxNzE5MSwgMTcxOTUsIDE3MTk5LCAxNzIwMiwgMTcyMDksIAorICAgIDE3MjE3LCAxNDQwMCwgMTcyMjQsIDE3MjM0LCAxNzI0MiwgMTcyNDksIDE3MjU3LCAxNzI2NywgMTcyNzYsIDE3Mjg5LCAKKyAgICAxNzI5NCwgMTcyOTksIDE3MzA3LCAxNzMxNCwgMTMyMDcsIDEzMjE2LCAxNzMyMSwgMTczMzEsIDE3MzQ2LCAxNzM1MiwgCisgICAgMTczNTksIDE3MzY2LCAxNzM3MiwgMTczODAsIDE3MzkwLCAxNzQwMCwgMTQ0MDUsIDE3NDA5LCAxNzQxNSwgMTc0MjEsIAorICAgIDE3NDI5LCAxNzQzNywgMTc0NDIsIDE3NDUxLCAxNzQ1OSwgMTc0NzEsIDE3NDgxLCAxNzQ5MSwgMTc1MDEsIDE3NTEwLCAKKyAgICAxNzUyMiwgMTc1MzIsIDE3NTQyLCAxNzU1MywgMTc1NTgsIDE3NTcwLCAxNzU4MiwgMTc1OTQsIDE3NjA2LCAxNzYxOCwgCisgICAgMTc2MzAsIDE3NjQyLCAxNzY1NCwgMTc2NjYsIDE3Njc4LCAxNzY4OSwgMTc3MDEsIDE3NzEzLCAxNzcyNSwgMTc3MzcsIAorICAgIDE3NzQ5LCAxNzc2MSwgMTc3NzMsIDE3Nzg1LCAxNzc5NywgMTc4MDksIDE3ODIwLCAxNzgzMiwgMTc4NDQsIDE3ODU2LCAKKyAgICAxNzg2OCwgMTc4ODAsIDE3ODkyLCAxNzkwNCwgMTc5MTYsIDE3OTI4LCAxNzk0MCwgMTc5NTEsIDE3OTYzLCAxNzk3NSwgCisgICAgMTc5ODcsIDE3OTk5LCAxODAxMSwgMTgwMjMsIDE4MDM1LCAxODA0NywgMTgwNTksIDE4MDcxLCAxODA4MiwgMTgwOTQsIAorICAgIDE4MTA2LCAxODExOCwgMTgxMzAsIDE4MTQyLCAxODE1NCwgMTgxNjYsIDE4MTc4LCAxODE5MCwgMTgyMDIsIDE4MjEzLCAKKyAgICAxODIyNSwgMTgyMzcsIDE4MjQ5LCAxODI2MSwgMTgyNzMsIDE4Mjg1LCAxODI5NywgMTgzMDksIDE4MzIxLCAxODMzMywgCisgICAgMTgzNDQsIDE4MzU2LCAxODM2OCwgMTgzODAsIDE4MzkyLCAxODQwNCwgMTg0MTYsIDE4NDI4LCAxODQ0MCwgMTg0NTIsIAorICAgIDE4NDY0LCAxODQ3NSwgMTg0ODcsIDE4NDk5LCAxODUxMSwgMTg1MjMsIDE4NTM2LCAxODU0OSwgMTg1NjIsIDE4NTc1LCAKKyAgICAxODU4OCwgMTg2MDEsIDE4NjE0LCAxODYyNiwgMTg2MzksIDE4NjUyLCAxODY2NSwgMTg2NzgsIDE4NjkxLCAxODcwNCwgCisgICAgMTg3MTcsIDE4NzMwLCAxODc0MywgMTg3NTYsIDE4NzY4LCAxODc4MSwgMTg3OTQsIDE4ODA3LCAxODgyMCwgMTg4MzMsIAorICAgIDE4ODQ2LCAxODg1OSwgMTg4NzIsIDE4ODg1LCAxODg5OCwgMTg5MTAsIDE4OTIzLCAxODkzNiwgMTg5NDksIDE4OTYyLCAKKyAgICAxODk3NSwgMTg5ODgsIDE5MDAxLCAxOTAxNCwgMTkwMjcsIDE5MDQwLCAxOTA1MiwgMTkwNjUsIDE5MDc4LCAxOTA5MSwgCisgICAgMTkxMDQsIDE5MTE3LCAxOTEzMCwgMTkxNDMsIDE5MTU2LCAxOTE2OSwgMTkxODIsIDE5MTk0LCAxOTIwNywgMTkyMjAsIAorICAgIDE5MjMzLCAxOTI0NiwgMTkyNTksIDE5MjcyLCAxOTI4NSwgMTkyOTgsIDE5MzExLCAxOTMyNCwgMTkzMzYsIDE5MzQ3LCAKKyAgICAxOTM2MCwgMTkzNzMsIDE5Mzg2LCAxOTM5OSwgMTk0MTIsIDE5NDI1LCAxOTQzOCwgMTk0NTEsIDE5NDY0LCAxOTQ3NywgCisgICAgMTk0ODksIDE5NTAyLCAxOTUxNSwgMTk1MjgsIDE5NTQxLCAxOTU1NCwgMTk1NjcsIDE5NTgwLCAxOTU5MywgMTk2MDYsIAorICAgIDE5NjE5LCAxOTYzMSwgMTk2NDQsIDE5NjU3LCAxOTY3MCwgMTk2ODMsIDE5Njk2LCAxOTcwOSwgMTk3MjIsIDE5NzM1LCAKKyAgICAxOTc0OCwgMTk3NjEsIDE5NzczLCAxOTc4NiwgMTk3OTksIDE5ODEyLCAxOTgyNSwgMTk4MzgsIDE5ODUxLCAxOTg2NCwgCisgICAgMTk4NzcsIDE5ODkwLCAxOTkwMywgMTk5MTUsIDE5OTI4LCAxOTk0MSwgMTk5NTQsIDE5OTY3LCAxOTk4MCwgMTk5OTMsIAorICAgIDIwMDA2LCAyMDAxOSwgMjAwMzIsIDIwMDQ1LCAyMDA1NywgMjAwNzAsIDIwMDgzLCAyMDA5NiwgMjAxMDksIDIwMTIyLCAKKyAgICAyMDEzNSwgMjAxNDgsIDIwMTYxLCAyMDE3NCwgMjAxODcsIDIwMTk5LCAyMDIxMiwgMjAyMjUsIDIwMjM4LCAyMDI1MSwgCisgICAgMjAyNjQsIDIwMjc3LCAyMDI5MCwgMjAzMDMsIDIwMzE2LCAyMDMyOSwgMjAzNDEsIDIwMzU0LCAyMDM2NywgMjAzODAsIAorICAgIDIwMzkzLCAyMDQwNiwgMjA0MTksIDIwNDMyLCAyMDQ0NSwgMjA0NTgsIDIwNDcxLCAyMDQ4MywgMjA0OTYsIDIwNTA5LCAKKyAgICAyMDUyMiwgMjA1MzUsIDIwNTQ4LCAyMDU2MSwgMjA1NzQsIDIwNTg3LCAyMDYwMCwgMjA2MTMsIDIwNjI1LCAyMDYzOCwgCisgICAgMjA2NTEsIDIwNjY0LCAyMDY3NywgMjA2OTAsIDIwNzAzLCAyMDcxNiwgMjA3MjksIDIwNzQyLCAyMDc1NSwgMjA3NjcsIAorICAgIDIwNzc4LCAyMDc4NiwgMjA3OTQsIDIwODAxLCAyMDgwNywgMjA4MTEsIDIwODE3LCAyMDgyMywgMjA4MzEsIDIwODM3LCAKKyAgICAyMDg0MiwgMjA4NDYsIDIwODU1LCA5MTU1LCAyMDg2NiwgMjA4NzMsIDIwODgxLCAyMDg4OCwgMjA4OTUsIDEwOTQ4LCAKKyAgICAyMDkwMiwgMjA5MTEsIDIwOTE2LCAyMDkyMSwgNzgwNSwgMjA5MjgsIDIwOTMzLCAyMDkzNiwgMjA5NDEsIDIwOTQ5LCAKKyAgICAyMDk1NiwgMjA5NjMsIDIwOTcwLCAyMDk3NiwgMjA5ODUsIDIwOTk0LCAyMTAwMCwgMjEwMDksIDIxMDEzLCAyMTAxOSwgCisgICAgMjEwMjQsIDIxMDM0LCAyMTA0MSwgMjEwNDcsIDIxMDU1LCAyMTA2MSwgMjEwNjgsIDIxMDc4LCAyMTA4NywgMjEwOTEsIAorICAgIDIxMDk4LCAyMTEwMiwgMjExMDcsIDIxMTEzLCAyMTEyMSwgMjExMjUsIDIxMTM1LCAxNDQxNSwgMjExNDQsIDIxMTUwLCAKKyAgICAyMTE1NCwgMjExNjMsIDE0NDIwLCAyMTE2OSwgMjExNzYsIDIxMTg3LCAyMTE5NSwgMjEyMDQsIDIxMjEyLCA4OTMxLCAKKyAgICAyMTIyMCwgMjEyMjUsIDIxMjMxLCAyMTIzNiwgMjEyNDAsIDIxMjQ0LCAyMTI0OCwgOTYzOSwgMjEyNTMsIDIxMjYxLCAKKyAgICAyMTI2OCwgMjEyNzcsIDIxMjg0LCAyMTI5MSwgMTA4NzgsIDIxMjk4LCAyMTMwNCwgMjEzMDgsIDIxMzE0LCAyMTMyMSwgCisgICAgMjEzMjcsIDIxMzM1LCAyMTM0MSwgMjEzNDgsIDIxMzU0LCAyMTM2MCwgMjEzNjksIDIxMzczLCAyMTM4MSwgMjEzOTAsIAorICAgIDIxMzk3LCAyMTQwMiwgMjE0MDYsIDIxNDE3LCAyMTQyMiwgMjE0MjcsIDIxNDMyLCAyMTQ0NSwgNzk5NSwgMjE0NDksIAorICAgIDIxNDU1LCAyMTQ2MywgMjE0NjcsIDIxNDc0LCAyMTQ4MywgMjE0ODgsIDE0NjkxLCAyMTQ5NiwgMjE1MDAsIDIxNTEyLCAKKyAgICAyMTUxNywgMjE1MjEsIDIxNTI0LCAyMTUzMCwgMjE1MzYsIDIxNTQxLCAyMTU0NSwgMjE1NDgsIDIxNTU5LCAyMTU2NCwgCisgICAgOTM4MywgMjE1NzEsIDIxNTc2LCA5Mzg4LCAyMTU4MSwgMjE1ODYsIDIxNTkxLCAyMTU5NiwgMjE2MDEsIDIxNjA2LCAKKyAgICAyMTYxMSwgMjE2MTYsIDIxNjIxLCAyMTYyNiwgMjE2MzEsIDIxNjM2LCAyMTY0MiwgMjE2NDcsIDIxNjUyLCAyMTY1NywgCisgICAgMjE2NjIsIDIxNjY3LCAyMTY3MiwgMjE2NzcsIDIxNjgyLCAyMTY4NywgMjE2OTMsIDIxNjk5LCAyMTcwNCwgMjE3MDksIAorICAgIDIxNzE0LCAyMTcxOSwgMjE3MjQsIDIxNzI5LCAyMTczNCwgMjE3MzksIDIxNzQ0LCAyMTc1MCwgMjE3NTUsIDIxNzYwLCAKKyAgICAyMTc2NSwgMjE3NzEsIDIxNzc3LCAyMTc4MiwgMjE3ODcsIDIxNzkyLCAyMTc5NywgMjE4MDIsIDIxODA3LCAyMTgxMiwgCisgICAgMjE4MTcsIDIxODIzLCAyMTgyOCwgMjE4MzMsIDIxODM4LCAyMTg0MywgMjE4NDksIDIxODU0LCAyMTg1OSwgMjE4NjMsIAorICAgIDEzNjgsIDEyOSwgMjE4NzEsIDIxODc1LCAyMTg3OSwgMjE4ODMsIDIxODg4LCAyMTg5MiwgMTMxMTcsIDEyNDc2LCAyMTg5NiwgCisgICAgMjE5MDEsIDIxOTA1LCAyMTkxMCwgMjE5MTQsIDIxOTE5LCAyMTkyMywgMjE5MjksIDIxOTM0LCAyMTkzOCwgMjE5NDIsIAorICAgIDIxOTUwLCAyMTk1NCwgMjE5NTgsIDIxOTYzLCAyMTk2OCwgMjE5NzIsIDIxOTc4LCAyMTk4MywgMjE5ODcsIDIxOTkyLCAKKyAgICAyMTk5NywgMjIwMDEsIDIyMDA4LCAyMjAxNSwgMjIwMjIsIDIyMDI2LCAyMjAzMCwgMjIwMzUsIDIyMDM5LCAyMjA0MiwgCisgICAgMjIwNDgsIDIyMDYxLCAyMjA2NiwgMjIwNzUsIDIyMDgwLCA5NDI4LCAyMjA4NSwgMjIwODgsIDI3MTIsIDI3MTcsIDIyMDkyLCAKKyAgICAyMjA5OCwgMjIxMDQsIDcyMDksIDIyMTA5LCAyMjExNCwgMjIxMTksIDIyMTI1LCAyMjEzMCwgMTM5MDksIDIyMTM1LCAKKyAgICAyMjE0MCwgMjIxNDUsIDIyMTUwLCAyMjE1NiwgMjIxNjEsIDIyMTY2LCAyMjE3MiwgMjIxNzcsIDIyMTgxLCAyMjE4NiwgCisgICAgMjIxOTEsIDIyMTk2LCAyMjIwMSwgMjIyMDUsIDIyMjEwLCAyMjIxNCwgMjIyMTksIDIyMjI0LCAyMjIyOSwgMjIyMzQsIAorICAgIDIyMjM4LCAyMjI0MywgMjIyNDcsIDIyMjUyLCAyMjI1NywgMjIyNjIsIDIyMjY3LCAyODg2LCAyMjE4MiwgMjIyNzEsIAorICAgIDIyMjc5LCAyMjI4NiwgOTczMywgMjIyOTgsIDIyMzA2LCAyMjE4NywgMjIzMTMsIDIyMzE4LCAyMjMyNiwgMjIxOTIsIAorICAgIDIyMzMxLCAyMjMzNiwgMjIzNDQsIDIyMzQ5LCAyMjE5NywgMjIzNTQsIDIyMzU5LCAyMjM2MywgMjIzNjksIDIyMzc3LCAKKyAgICAyMjM4MCwgMjIzODcsIDIyMzkxLCAyMjM5NSwgMjI0MDEsIDIyNDA4LCAyMjQxMywgODk1OCwgMTcyNywgMTczMiwgMjI0MTcsIAorICAgIDIyNDIzLCAyMjQyOSwgMjI0MzQsIDIyNDM4LCAyMjQ0MiwgMjI0NDYsIDIyNDUwLCAyMjQ1NCwgMjI0NTgsIDIyNDYyLCAKKyAgICAyMjQ2NiwgMjI0NjksIDIyNDc1LCAyMjQ4MiwgMjI0OTAsIDIyNDk2LCAyMjUwMiwgMjI1MDcsIDIyNTEyLCAyMjUxNiwgCisgICAgMTM4MjksIDEzODM2LCAyMjUyMSwgMjI1MzMsIDIyNTM2LCAyMjU0MywgMTYzNjIsIDIyNTUwLCAyMjU1OCwgMjI1NjksIAorICAgIDIyNTc4LCAyMjU5MSwgMjI2MDEsIDIyNjE1LCAyMjYyNywgMjI2NDEsIDIyNjUzLCAyMjY2MywgMjI2NzUsIDIyNjgxLCAKKyAgICAyMjY5NiwgMjI3MjAsIDIyNzM4LCAyMjc1NywgMjI3NzAsIDIyNzg0LCAyMjgwMiwgMjI4MTgsIDIyODM1LCAyMjg1MywgCisgICAgMjI4NjQsIDIyODgzLCAyMjkwMCwgMjI5MjAsIDIyOTM4LCAyMjk1MCwgMjI5NjQsIDIyOTc4LCAyMjk5MCwgMjMwMDcsIAorICAgIDIzMDI2LCAyMzA0NCwgMjMwNTYsIDIzMDc0LCAyMzA5MywgMTQ1NTksIDIzMTA2LCAyMzEyNiwgMjMxMzgsIDEwNTIzLCAKKyAgICAyMzE1MCwgMjMxNTUsIDIzMTYwLCAyMzE2NSwgMjMxNzEsIDIzMTc2LCAyMzE4MCwgMjMxODcsIDIzOTgsIDIzMTkxLCAKKyAgICAyMzE5NywgMjMyMDEsIDIzMjA0LCAyMzIwOCwgMjMyMTYsIDIzMjIyLCAyMjIxNSwgMjMyMjYsIDIzMjM1LCAyMzI0NiwgCisgICAgMjMyNTIsIDIzMjU4LCAyMzI2NywgMjMyNzUsIDIzMjgyLCAyMzI4NywgMjMyOTEsIDIzMjk4LCAyMzMwNCwgMjMzMTMsIAorICAgIDIzMzIxLCAyMzMyOCwgMjMzMzgsIDIzMzQ3LCAyMzM1NywgMjMzNjIsIDIzMzcxLCAyMzM4MCwgMjMzOTEsIDIzNDAyLCAKKyAgICAzOTYzLCAyMzQxMiwgMjM0MTYsIDIzNDI2LCAyMzQzNCwgMjM0NDQsIDIzNDU1LCAyMzQ2MCwgMjM0NzAsIDIzNDc4LCAKKyAgICAyMzQ4NSwgMjM0OTEsIDIzNDk4LCAyMzUwMywgMjIyMjUsIDIzNTA3LCAyMzUxNiwgMjM1MjAsIDIzNTIzLCAyMzUyOCwgCisgICAgMjM1MzUsIDIzNTQ0LCAyMzU1MiwgMjM1NjAsIDIzNTcwLCAyMzU3OSwgMjM1ODUsIDIzNTkxLCAyMjIzMCwgMjIyMzUsIAorICAgIDIzNTk1LCAyMzYwNSwgMjM2MTUsIDIzNjI1LCAyMzYzMywgMjM2NDAsIDIzNjUwLCAyMzY1OCwgMjM2NjYsIDIzNjcyLCAKKyAgICAyMzY4MCwgOTMwLCAyMzY4OSwgMTQ3NTAsIDU0MiwgMjM3MDMsIDIzNzEyLCAyMzcyMCwgMjM3MzEsIDIzNzQyLCAyMzc1MiwgCisgICAgMjM3NjEsIDIzNzczLCAyMzc4MiwgMjM3OTEsIDIzNzk3LCAyMzgwNiwgMjM4MTUsIDIzODI1LCAyMzgzMywgMjM4NDEsIAorICAgIDkzNjAsIDIzODQ3LCAyMzg1MCwgMjM4NTQsIDIzODU5LCAyMzg2NCwgOTg0OCwgMjIyNDgsIDIyMjUzLCAyMzg3MiwgCisgICAgMjM4NzgsIDIzODg0LCAyMzg4OSwgMjM4OTQsIDIzODk4LCAyMzkwNiwgMjM5MTIsIDIzOTE4LCAyMzkyMiwgMzUyNSwgCisgICAgMjM5MzAsIDIzOTM1LCAyMzk0MCwgMjM5NDQsIDIzOTQ4LCA5OTI4LCAyMzk1NSwgMjM5NjMsIDIzOTc3LCAyMzk4NCwgCisgICAgMjM5OTAsIDk5MzcsIDk5NDMsIDIzOTk4LCAyNDAwNiwgMjQwMTMsIDI0MDE4LCAyNDAyMywgMjIyNTgsIDI0MDI5LCAKKyAgICAyNDA0MCwgMjQwNDQsIDI0MDQ5LCAyNjAxLCAyNDA1NCwgMjQwNjUsIDI0MDcxLCAyNDA3NiwgMjQwODAsIDI0MDg0LCAKKyAgICAyNDA4NywgMjQwOTQsIDI0MTAxLCAyNDEwOCwgMjQxMTQsIDI0MTE4LCAyMjI2MywgMjQxMjMsIDI0MTI3LCAyNDEzMSwgCisgICAgMTAzNywgMjQxMzYsIDI0MTQxLCAyNDE0NiwgMjQxNTEsIDI0MTU2LCAyNDE2MSwgMjQxNjYsIDI0MTcxLCAyNDE3NiwgCisgICAgMjQxODEsIDI0MTg2LCAyNDE5MSwgMjQxOTYsIDI0MjAxLCAyNDIwNywgMjQyMTIsIDI0MjE3LCAyNDIyMiwgMjQyMjcsIAorICAgIDI0MjMyLCAyNDIzNywgMjQyNDMsIDI0MjQ4LCAyNDI1MywgMjQyNTgsIDI0MjYzLCAyNDI2OCwgMjQyNzMsIDI0Mjc4LCAKKyAgICAyNDI4NCwgMjQyOTAsIDI0Mjk1LCAyNDMwMSwgMjQzMDYsIDI0MzExLCA1LCAyNDMxNywgMjQzMjEsIDI0MzI1LCAyNDMyOSwgCisgICAgMjQzMzQsIDI0MzM4LCAyNDM0MiwgMjQzNDYsIDI0MzUwLCAyNDM1NSwgMjQzNTksIDI0MzY0LCAyNDM2OCwgMjQzNzEsIAorICAgIDI0Mzc1LCAyNDM4MCwgMjQzODQsIDI0Mzg5LCAyNDM5MywgMjQzOTcsIDI0NDAxLCAyNDQwNiwgMjQ0MTAsIDI0NDE0LCAKKyAgICAyNDQyNCwgMjQ0MjksIDI0NDMzLCAyNDQzNywgMjQ0NDIsIDI0NDQ3LCAyNDQ1NiwgMjQ0NjEsIDI0NDY2LCAyNDQ3MCwgCisgICAgMjQ0NzQsIDI0NDg3LCAyNDQ5OSwgMjQ1MDgsIDI0NTE3LCAyNDUyMywgMjQ1MjgsIDI0NTMyLCAyNDUzNiwgMjQ1NDYsIAorICAgIDI0NTU1LCAyNDU2MywgMjQ1NjksIDI0NTc0LCAyNDU3OCwgMjQ1ODUsIDI0NTk1LCAyNDYwNCwgMjQ2MTIsIDI0NjIwLCAKKyAgICAyNDYyNywgMjQ2MzUsIDI0NjQ0LCAyNDY1MywgMjQ2NjEsIDI0NjY2LCAyNDY3MCwgMjQ2NzQsIDI0Njc3LCAyNDY3OSwgCisgICAgMjQ2ODMsIDI0Njg3LCAyNDY5MiwgMjQ2OTcsIDI0NzAxLCAyNDcwNSwgMjQ3MDgsIDI0NzEyLCAyNDcxNSwgMjQ3MTksIAorICAgIDI0NzIyLCAyNDcyNSwgMjQ3MjksIDI0NzM1LCAyNDczOSwgMjQ3NDMsIDI0NzQ3LCAyNDc1MiwgMjQ3NTcsIDI0NzYyLCAKKyAgICAyNDc2NiwgMjQ3NjksIDI0Nzc0LCAyNDc4MCwgMjQ3ODUsIDI0NzkxLCAyNDc5NiwgMjQ4MDAsIDI0ODA0LCAyNDgwOCwgCisgICAgMjQ4MTMsIDI0ODE3LCAyNDgyMiwgMjQ4MjYsIDI0ODMwLCAyNDgzNywgMjQ4NDEsIDI0ODQ0LCAyNDg0OCwgMjQ4NTQsIAorICAgIDI0ODYwLCAyNDg2NCwgMjQ4NjgsIDI0ODczLCAyNDg4MCwgMjQ4ODYsIDI0ODkwLCAyNDg5OSwgMjQ5MDMsIDI0OTA3LCAKKyAgICAyNDkxMCwgMjQ5MTYsIDI0OTIxLCAyNDkyNywgMTQ4OSwgMTc5MSwgMjQ5MzIsIDI0OTM3LCAyNDk0MiwgMjQ5NDcsIAorICAgIDI0OTUyLCAyNDk1NywgMjQ5NjIsIDIxNDgsIDIxOTQsIDI0OTY3LCAyNDk3MCwgMjQ5NzQsIDI0OTc4LCAyNDk4MywgCisgICAgMjQ5ODcsIDI0OTkxLCAyNDk5NCwgMjQ5OTksIDI1MDA0LCAyNTAwOCwgMjUwMTEsIDI1MDE2LCAyNTAyMCwgMjUwMjUsIAorICAgIDI1MDI5LCAxNDc2MiwgMjUwMzQsIDI1MDM3LCAyNTA0MCwgMjUwNDQsIDI1MDQ5LCAyNTA1MywgMjUwNjYsIDI1MDcwLCAKKyAgICAyNTA3MywgMjUwODEsIDI1MDkwLCAyNTA5NywgMjUxMDIsIDI1MTA4LCAyNTExNCwgMjUxMjIsIDI1MTI5LCAyNTEzNiwgCisgICAgMjUxNDAsIDI1MTQ0LCAyNTE0OCwgMjUxNTMsIDI1MTU4LCAyNTE2MiwgMjUxNzAsIDI1MTc1LCAyNTE4NywgMjUxOTgsIAorICAgIDI1MjAzLCAyNTIwNywgMjUyMTEsIDI1MjE3LCAyNTIyMiwgMjUyMjcsIDI1MjMxLCAyNTIzNSwgMjUyMzgsIDI1MjQ0LCAKKyAgICA3OTE1LCAyMzE2LCAyNTI0OCwgMjUyNTMsIDI1MjY5LCA5NDc1LCAyNTI4OSwgMjUyOTgsIDI1MzE0LCAyNTMxOCwgMjUzMjEsIAorICAgIDI1MzI3LCAyNTMzNywgMjUzNDMsIDI1MzUyLCAyNTM2NywgMjUzNzksIDI1MzkwLCAyNTM5OCwgMjU0MDcsIDI1NDEzLCAKKyAgICAyNTQyMiwgMjU0MzIsIDI1NDQzLCAyNTQ1NCwgMjU0NjMsIDI1NDcwLCAyNTQ3OSwgMjU0ODcsIDI1NDk0LCAyNTUwMiwgCisgICAgMjU1MDksIDI1NTE2LCAyNTUyOSwgMjU1MzYsIDI1NTQyLCAyNTU0NywgMjU1NTYsIDI1NTYyLCAyNTU2NywgMjU1NzUsIAorICAgIDI1NTgyLCAyMzQzNiwgMjU1OTQsIDI1NjA2LCAyNTYyMCwgMjU2MjgsIDI1NjM1LCAyNTY0NywgMjU2NTYsIDI1NjY1LCAKKyAgICAyNTY3MywgMjU2ODEsIDI1Njg5LCAyNTY5NiwgMjU3MDUsIDI1NzEzLCAyNTcyMywgMjU3MzIsIDI1NzQyLCAyNTc1MSwgCisgICAgMjU3NjAsIDI1NzY4LCAyNTc3MywgMjU3NzcsIDI1NzgwLCAyNTc4NCwgMjU3ODgsIDI1NzkyLCAyNTc5NiwgMjU4MDAsIAorICAgIDI1ODA2LCAyNTgxMiwgMjU4MjAsIDE0ODA3LCAyNTgyNywgMjU4MzIsIDI1ODM5LCAyNTg0NSwgMjU4NTIsIDE0ODE1LCAKKyAgICAyNTg1OSwgMjU4NjIsIDI1ODc0LCAyNTg4MiwgMjU4ODgsIDI1ODkzLCAyNTg5NywgOTg3OCwgMjU5MDgsIDI1OTE4LCAKKyAgICAyNTkyNywgMjU5MzQsIDI1OTM4LCAxNDgyMCwgMjU5NDEsIDI1OTQ4LCAyNTk1MiwgMjU5NTgsIDI1OTYxLCAyNTk2OCwgCisgICAgMjU5NzQsIDI1OTgxLCAyNTk4NywgMjU5OTEsIDI1OTk2LCAyNjAwMCwgMjYwMDksIDI2MDE2LCAyNjAyMiwgNzk1NiwgCisgICAgMjYwMjksIDI2MDM3LCAyNjA0NCwgMjYwNTAsIDI2MDU1LCAyNjA2MSwgMjYwNjcsIDI2MDc1LCAyNjA3OSwgMjYwODIsIAorICAgIDI2MDg0LCAyNTc4NSwgMjYwOTMsIDI2MDk5LCAyNjEwOSwgMjYxMTQsIDI2MTIxLCAyNjEyNywgMjYxMzIsIDI2MTM3LCAKKyAgICAyNjE0MiwgMjYxNDYsIDI2MTUxLCAyNjE1OCwgMjYxNjcsIDI2MTcxLCAyNjE3OCwgMjYxODcsIDI2MTkzLCAyNjE5OCwgCisgICAgMjYyMDQsIDI2MjA5LCAyNjIxNiwgMjYyMjcsIDI2MjMyLCAyNjIzNiwgMjYyNDYsIDI2MjUyLCAyNjI1NiwgMjYyNjEsIAorICAgIDI2MjcxLCAyNjI4MCwgMjYyODQsIDI2MjkxLCAyNjI5OSwgMjYzMDYsIDI2MzEyLCAyNjMxNywgMjYzMjUsIDI2MzMyLCAKKyAgICAyNjM0NCwgMjYzNTMsIDI2MzU3LCAxMzA1MywgMjYzNjUsIDI2Mzc1LCAyNjM3OSwgMjUwNzcsIDI2MzkwLCAyNjM5NSwgCisgICAgMjYzOTksIDI2NDA2LCAyNjQxMywgMjE5NzQsIDI1NzEwLCAyNjQxOCwgMjY0MjIsIDI2NDI1LCAyMjg3MCwgMjY0MzAsIAorICAgIDI2NDQ0LCAyNjQ2MCwgMjY0NzgsIDI2NDk3LCAyNjUxNCwgMjY1MzIsIDIyODg5LCAyNjU0OSwgMjY1NjksIDIyOTA2LCAKKyAgICAyNjU4MSwgMjY1OTMsIDE1NzQ1LCAyNjYwNSwgMjI5MjYsIDI2NjE5LCAyNjYzMSwgMTA1MzYsIDI2NjQ1LCAyNjY1MCwgCisgICAgMjY2NTUsIDI2NjYwLCAyNjY2NiwgMjY2NzIsIDI2Njc4LCAyNjY4MiwgMjY2ODksIDI2Njk0LCAyNjcwNCwgMjY3MTAsIAorICAgIDEwMTgzLCAyNjcxNiwgMjY3MTgsIDI2NzIzLCAyNjczMSwgMjY3MzUsIDI2MTU0LCAyNjc0MSwgMjY3NDgsIDExNTI0LCAKKyAgICAxMTUzNCwgMjY3NTUsIDI2NzY1LCAyNjc3MCwgMjY3NzQsIDI2Nzc3LCAyNjc4MywgMjY3OTEsIDI2ODAzLCAyNjgxMywgCisgICAgMjY4MjksIDI2ODQyLCAyNjg1NiwgMTU3NjMsIDI2ODcwLCAyNjg3NywgMjY4ODEsIDI2ODg0LCAyNjg4OSwgMjY4OTMsIAorICAgIDI2OTAwLCAyNjkwNywgMjY5MTcsIDI2OTIyLCAyNjkyNywgMjY5MzIsIDI2OTQwLCAyNjk0OCwgMjY5NTcsIDI2OTYyLCAKKyAgICA5NTcyLCAyNjk2NiwgMjY5NjksIDI2OTcyLCAyNjk3NywgMjY5ODQsIDI2OTg5LCAyNzAwNSwgMjcwMTMsIDI3MDIxLCAKKyAgICA5NDIzLCAyNzAyOSwgMjcwMzQsIDI3MDM4LCAyNzA0NCwgMjcwNTAsIDI3MDUzLCAyNzA1OSwgMjcwNzEsIDI3MDc5LCAKKyAgICAyNzA4NiwgMjcwOTIsIDI3MDk5LCAyNzExMCwgMjcxMjQsIDI3MTM3LCAyNzE0NiwgMjcxNTUsIDI3MTY3LCAyNzE3OCwgCisgICAgMjcxODgsIDI3MTk3LCAyNzIwNiwgMjcyMTQsIDI3MjI1LCA3OTM4LCAyNzIzMiwgMjcyMzgsIDI3MjQzLCAyNzI0OSwgCisgICAgMjcyNTYsIDI3MjY2LCAyNzI3NiwgMjcyODUsIDI3MjkxLCAyNzI5OCwgMjczMDMsIDI3MzEwLCAyNzMxOCwgMjczMjYsIAorICAgIDI3MzM4LCA2MjQ2LCAyNzM0NSwgMjczNTQsIDI3MzYyLCAyNzM2OCwgMjczNzQsIDI3Mzc5LCAyNzM4MywgMjczODYsIAorICAgIDI3MzkyLCAyNzM5OSwgMjc0MDQsIDI3NDA5LCAyNzQxMywgMjc0MjUsIDI3NDM2LCAyNzQ0NSwgMjc0NTMsIDE0OTQ3LCAKKyAgICAyNzQ1OCwgMjc0NjQsIDI3NDcwLCAxMTUxNywgODYzNSwgMjc0NzUsIDI3NDc5LCAyNzQ4MywgMjc0ODYsIDI3NDg5LCAKKyAgICAyNzQ5NSwgMjc1MDMsIDI3NTExLCAyNzUxNSwgMjc1MTksIDI3NTI0LCAyNzUyNywgMjc1MzYsIDI3NTQwLCAyNzU0OCwgCisgICAgMjc1NTksIDI3NTYzLCAyNzU2OSwgMjc1NzUsIDI3NTc5LCAyNzU4NSwgMjc1OTMsIDI3NjE1LCAyNzYzOSwgMjc2NDYsIAorICAgIDI3NjUzLCAyNzY1OSwgMjc2NjcsIDI3NjczLCAyNzY3OCwgMjc2ODksIDI3NzA3LCAyNzcxNCwgMjc3MjIsIDI3NzI2LCAKKyAgICAyNzczNSwgMjc3NDgsIDI3NzU2LCAyNzc2OCwgMjc3NzksIDI3Nzg5LCAyNzgwMywgMjc4MTIsIDI3ODIwLCAyNzgzMiwgCisgICAgOTQ5MiwgMjc4NDMsIDI3ODU0LCAyNzg2NiwgMjc4NzYsIDI3ODg1LCAyNzg5MCwgMjc4OTQsIDI3OTAyLCAyNzkxMiwgCisgICAgMjc5MTcsIDI3OTIxLCAyNzkyNCwgMjc5MjcsIDI3OTM1LCAyNzk0MywgMjc5NTIsIDI3OTYyLCAyNzk3MSwgMjc5NzcsIAorICAgIDI3OTkxLCAyNjYzLCAyODAxMywgMjgwMjQsIDI4MDMzLCAyODA0MywgMjgwNTUsIDI4MDY0LCAyODA3MywgMjgwODMsIAorICAgIDI4MDkxLCAyODA5OSwgMjgxMDgsIDI4MTEzLCAyODEyNCwgMjgxMjksIDI4MTQwLCAyODE0NCwgMjgxNTQsIDI4MTYzLCAKKyAgICAyODE3MSwgMjgxODEsIDI4MTkxLCAyODE5OSwgMjgyMDgsIDI4MjE1LCAyODIyMywgMjgyMzAsIDI4MjM5LCAyODI0MywgCisgICAgMjgyNTEsIDI4MjU4LCAyODI2NiwgMjgyNzMsIDI4Mjg0LCAyODI5OSwgMjgzMDYsIDI4MzEyLCAyODMyMiwgMjgzMzEsIAorICAgIDI4MzM3LCAyODM0MSwgMjgzNDgsIDI4MzUyLCAxNDAzMSwgMjgzNTgsIDI4MzYyLCAyODM2NywgMjgzNzQsIDI4Mzc4LCAKKyAgICAyODM4MiwgMjgzOTAsIDI4Mzk4LCAyODQwNCwgMjg0MTMsIDI4NDIwLCAyODQyNSwgMjg0MzAsIDI4NDQwLCAyMzUwNSwgCisgICAgMjg0NDQsIDI4NDQ3LCAyODQ1MiwgMjg0NTcsIDI4NDYyLCAyODQ2NywgMjg0NzIsIDI4NDc3LCAyODQ4MiwgMjg0ODcsIAorICAgIDI4NDkzLCAyODQ5OCwgMjg1MDMsIDI4NTA5LCAxMjE4LCA3MDQsIDI4NTE0LCAyODUyMywgMjM2NCwgMjg1MzAsIDI4NTM1LCAKKyAgICAyODUzOSwgMjg1NDUsIDEyNjcsIDU0NiwgMzE4LCAyODU1MCwgMjg1NTksIDI4NTY3LCAyODU3NiwgMjg1ODQsIDI4NTk1LCAKKyAgICAyODYwNCwgMjg2MTIsIDI4NjE2LCAyODYxOSwgMjg2MjcsIDI4NjM1LCAyODY0MCwgMTQ3NzUsIDI4NjQ2LCAyODY1MiwgCisgICAgMjg2NTgsIDU4NzIsIDI4NjYzLCAyODY2NywgMjg2NzMsIDI4Njc3LCAyODY4NCwgMTQ1NSwgMjg2OTAsIDI4Njk3LCA5NTc5LCAKKyAgICAyODcwMSwgMjg3MTEsIDI4NzE5LCAyODcyNSwgMjg3MzQsIDI4NzQyLCAyODc0OCwgMjg3NTYsIDI4NzYzLCAxMTExMCwgCisgICAgMjg3NjksIDI4Nzc2LCAyODc4MSwgMjg3ODgsIDE0OTYsIDIxNDcsIDI4Nzk0LCAyODgwMCwgMjg4MDcsIDI4ODE4LCAKKyAgICAyODgyOSwgMjg4MzcsIDI4ODQ0LCAyODg1NCwgMjg4NjMsIDI4ODcxLCAyODg4MCwgMjg4ODcsIDI4ODk0LCAyODkwNywgCisgICAgMjg5MTgsIDEyNzIsIDI4OTM3LCAyODk0MiwgMjg5NTAsIDM1NzUsIDI4OTU0LCAyODk1OSwgMjg5NjMsIDE0NTksIDI0NzA2LCAKKyAgICAyODk3MywgMjg5NzcsIDI4OTgyLCAyODk4NiwgMzQ5MywgMjg5OTIsIDI5MDAwLCAyOTAwNywgMjkwMTgsIDI5MDI2LCAKKyAgICAyOTAzNCwgMzU3NiwgMjc5LCAyOTAzOSwgMjkwNDcsIDI5MDU1LCAyOTA2MiwgMjkwNjgsIDI5MDczLCAyMjE2LCAyOTA4MCwgCisgICAgMjkwODYsIDI1OTkyLCAyNjIyMiwgMjkwOTIsIDEwNiwgMjkwOTYsIDI5MTAwLCAyOTEwNiwgNjE1LCA5MzI4LCAyOTExMSwgCisgICAgMjkxMTgsIDI5MTI0LCAyMzI3LCAyOTEyOCwgMjkxMzIsIDE1MTg3LCAyOTEzNSwgMjkxNDAsIDI5MTQ3LCAyOTE1MywgCisgICAgMjkxNTgsIDI5MTY2LCAyOTE3MywgMjkxNzksIDIyMzUxLCAyOTE4MywgMjkxODcsIDM2NDYsIDE2NjI1LCAyOTE5MSwgCisgICAgMjkxOTYsIDI5MTk5LCAyOTIwNywgMjkyMTUsIDI5MjIwLCAyOTIyMywgMjkyMzAsIDI5MjQwLCAyOTI1MiwgMjkyNTcsIAorICAgIDI5MjYxLCAyOTI2OSwgMjkyNzYsIDI5MjgyLCAyOTI4OSwgMjkyOTYsIDI5Mjk5LCAyOTMwMywgMjkzMDcsIDE0NjMsIAorICAgIDI5MzE3LCAyOTMxOSwgMjkzMjQsIDI5MzMwLCAyOTMzNiwgMjkzNDEsIDI5MzQ2LCAyOTM1MSwgMjkzNTYsIDI5MzYxLCAKKyAgICAyOTM2NiwgMjkzNzEsIDI5Mzc2LCAyOTM4MSwgMjkzODYsIDI5MzkxLCAyOTM5NiwgMjk0MDEsIDI5NDA2LCAyOTQxMiwgCisgICAgMjk0MTgsIDI5NDI0LCAyOTQzMCwgMjk0MzUsIDI5NDQwLCAyOTQ0NSwgMjk0NTEsIDI5NDU2LCAyOTQ2MSwgMjk0NjYsIAorICAgIDI5NDcyLCAyOTQ3NywgMjk0ODMsIDI5NDg4LCAyOTQ5MywgMjk0OTgsIDI5NTAzLCAyOTUwOSwgMjk1MTQsIDI5NTIwLCAKKyAgICAyOTUyNSwgMjk1MzAsIDI5NTM1LCAyOTU0MCwgMjk1NDYsIDI5NTUxLCAyOTU1NywgMjk1NjIsIDI5NTY3LCAyOTU3MiwgCisgICAgMjk1NzcsIDI5NTgyLCAyOTU4NywgMjk1OTIsIDI5NTk3LCAyOTYwMiwgMjk2MDgsIDI5NjE0LCAyOTYyMCwgMjk2MjUsIAorICAgIDI5NjMwLCAyOTYzNSwgMjk2NDAsIDI5NjQ2LCAyOTY1MiwgMjk2NTgsIDI5NjY0LCAyOTY3MCwgMjk2NzYsIDI5NjgxLCAKKyAgICAyOTY4NywgMjk2OTIsIDI5Njk3LCAyOTcwMiwgMjk3MDcsIDI5NzEzLCAyNDQzLCAyOTcxOCwgMjQ1MCwgMjQ1NywgMjc1NCwgCisgICAgMjk3MjMsIDI0NjMsIDI0NzMsIDI5NzI5LCAyOTczMywgMjk3MzgsIDI5NzQzLCAyOTc0OSwgMjk3NTQsIDI5NzU5LCAKKyAgICAyOTc2MywgMjk3NjgsIDI5Nzc0LCAyOTc3OSwgMjk3ODQsIDI5Nzg5LCAyOTc5NSwgMjk4MDAsIDI5ODA0LCAyOTgwOCwgCisgICAgMjk4MTMsIDI5ODE4LCAyOTgyMywgMjk4MjgsIDI5ODMzLCAyOTgzOSwgMjk4NDUsIDI5ODUwLCAyOTg1NCwgMjk4NTksIAorICAgIDI5ODY1LCAyOTg2OSwgMjk4NzQsIDI5ODc5LCAyOTg4NCwgMjk4ODksIDI5ODkzLCAyOTg5NiwgMjk5MDEsIDI5OTA2LCAKKyAgICAyOTkxMSwgMjk5MTYsIDI5OTIxLCAyOTkyNywgMjk5MzMsIDI5OTM4LCAyOTk0MywgMjk5NDcsIDI5OTUyLCAyOTk1NywgCisgICAgMjk5NjIsIDI5OTY3LCAyOTk3MiwgMjk5NzYsIDI5OTgxLCAyOTk4NiwgMjk5OTEsIDI5OTk1LCAyOTk5OSwgMzAwMDMsIAorICAgIDMwMDA4LCAzMDAxNiwgMzAwMjEsIDMwMDI3LCAzMDAzMywgMzAwMzksIDMwMDQ0LCAzMDA0OCwgMzAwNTEsIDMwMDU2LCAKKyAgICAzMDA2MSwgMzAwNjUsIDMwMDcwLCAzMDA3NCwgMzAwNzksIDMwMDgzLCAzMDA4NiwgMzAwOTEsIDE3MzAyLCAzMDA5NiwgCisgICAgMzAxMDEsIDMwMTA2LCAzMDExNCwgMjEyODAsIDI4Njk0LCA5MDI2LCAzMDExOSwgMzAxMjQsIDMwMTI4LCAzMDEzMywgCisgICAgMzAxMzcsIDMwMTQxLCAzMDE0NiwgMzAxNTAsIDMwMTUzLCAzMDE1NiwgMzAxNjAsIDMwMTY1LCAzMDE2OSwgMzAxNzcsIAorICAgIDMwMTgxLCAzMDE4NCwgMzAxODksIDMwMTkzLCAzMDE5NywgMzAyMDIsIDMwMjA3LCAzMDIxMSwgMzAyMTcsIDMwMjIyLCAKKyAgICAzMDIyNywgMzAyMzQsIDMwMjQxLCAzMDI0NSwgMzAyNDgsIDMwMjU0LCAzMDI2MywgMzAyNzAsIDMwMjc4LCAzMDI4NSwgCisgICAgMzAyODksIDMwMjk0LCAzMDI5OCwgMzAzMDIsIDMwMzA4LCAzMDMxNCwgMzAzMTgsIDMwMzI0LCAzMDMyOSwgMzAzMzQsIAorICAgIDMwMzM4LCAzMDM0NSwgMzAzNTEsIDMwMzU3LCAzMDM2MywgMzAzNjksIDMwMzc2LCAzMDM4MiwgMzAzODgsIDMwMzk0LCAKKyAgICAzMDQwMCwgMzA0MDYsIDMwNDEyLCAzMDQxOCwgMzA0MjUsIDMwNDMxLCAzMDQzOCwgMzA0NDQsIDMwNDUwLCAzMDQ1NiwgCisgICAgMzA0NjIsIDMwNDY4LCAzMDQ3NCwgMzA0ODAsIDMwNDg2LCAzMDQ5MiwgMTE0MTgsIDMwNDk4LCAzMDUwMywgMzA1MDgsIAorICAgIDMwNTExLCAzMDUxOSwgMzA1MjQsIDMwNTMzLCAzMDUzOSwgMzA1NDQsIDMwNTQ5LCAzMDU1NCwgMzA1NTgsIDMwNTYzLCAKKyAgICAzMDU2OCwgMzA1NzMsIDMwNTc4LCAzMDU4MywgMzA1OTAsIDMwNTk3LCAzMDYwMywgMzA2MDksIDMwNjE0LCAxNjMwMywgCisgICAgMzA2MjEsIDMwNjI3LCAzMDYzNCwgMzA2NDAsIDMwNjQ2LCAzMDY1MSwgMzA2NTksIDMwNjY0LCAxNjA4MiwgMzA2NjgsIAorICAgIDMwNjczLCAzMDY3OCwgMzA2ODQsIDMwNjg5LCAzMDY5NCwgMzA2OTgsIDMwNzAzLCAzMDcwOCwgMzA3MTQsIDMwNzE5LCAKKyAgICAzMDcyNCwgMzA3MjgsIDMwNzMzLCAzMDczOCwgMzA3NDIsIDMwNzQ3LCAzMDc1MiwgMzA3NTcsIDMwNzYxLCAzMDc2NiwgCisgICAgMzA3NzEsIDMwNzc2LCAzMDc4MCwgMzA3ODQsIDE1MjkzLCAzMDc4OCwgMzA3OTcsIDMwODAzLCAzMDgwOSwgMzA4MTgsIAorICAgIDMwODI2LCAzMDgzNSwgMzA4NDMsIDMwODQ4LCAzMDg1MiwgMzA4NTksIDMwODY1LCAzMDg2OSwgMzA4NzIsIDMwODc3LCAKKyAgICAzMDg4NiwgMzA4OTQsIDMwODk5LCAxNDk1LCAzMDkwNSwgMzA5MDgsIDMwOTEyLCAyMjQyNCwgMjI0MzAsIDMwOTE4LCAKKyAgICAzMDkyMiwgMzA5MzMsIDMwOTQ0LCAzMDk1NSwgMzA5NjcsIDMwOTc0LCAzMDk4MSwgMzA5ODYsIDMwOTkwLCA1OTA5LCA3NTUsIAorICAgIDIxMjc5LCAzMDk5OCwgMzEwMDMsIDMxMDA3LCAzMTAxMiwgMzEwMTYsIDMxMDIyLCAzMTAyNywgMzEwMzMsIDMxMDM4LCAKKyAgICAzMTA0NCwgMzEwNDksIDMxMDU1LCAzMTA2MCwgMzEwNjYsIDMxMDcyLCAzMTA3OCwgMzEwODMsIDMxMDM5LCAzMTA0NSwgCisgICAgMzEwODcsIDMxMDkyLCAzMTA5OCwgMzExMDMsIDMxMTA5LCAzMTExNCwgMzExMjAsIDMxMTI1LCAzMTA1MCwgMTA0MjEsIAorICAgIDMxMTI5LCAzMTA2MSwgMzEwNjcsIDMxMDczLCAyODMxLCAzNDIzLCAzMTEzNSwgMzExMzgsIDMxMTQ0LCAzMTE1MCwgCisgICAgMzExNTYsIDMxMTYzLCAzMTE2OSwgMzExNzUsIDMxMTgxLCAzMTE4NywgMzExOTMsIDMxMTk5LCAzMTIwNSwgMzEyMTEsIAorICAgIDMxMjE3LCAzMTIyMywgMzEyMjksIDMxMjM1LCAzMTI0MiwgMzEyNDgsIDMxMjU0LCAzMTI2MCwgMzEyNjYsIDMxMjcyLCAKKyAgICAzMTI3NSwgMzEyODAsIDMxMjgzLCAzMTI5MCwgMzEyOTgsIDMxMzAzLCAzMTMwOCwgMzEzMTQsIDMxMzE5LCAzMTMyNCwgCisgICAgMzEzMjgsIDMxMzMzLCAzMTMzOSwgMzEzNDQsIDMxMzUwLCAzMTM1NSwgMzEzNjEsIDMxMzY2LCAzMTM3MiwgMzEzNzgsIAorICAgIDMxMzgyLCAzMTM4NywgMzEzOTIsIDMxMzk3LCAzMTQwMiwgMzE0MDYsIDMxNDExLCAzMTQxNiwgMzE0MjEsIDMxNDI3LCAKKyAgICAzMTQzMywgMzE0MzksIDMxNDQ1LCAzMTQ1MCwgMzE0NTQsIDMxNDU3LCAzMTQ2MywgMzE0NjksIDMxNDc4LCAzMTQ4NiwgCisgICAgMzE0OTMsIDMxNDk4LCAzMTUwMiwgMzE1MDYsIDMxNTExLCAxNTE0NiwgMzE1MTYsIDMxNTI0LCAzMTUzMCwgMzY4MywgCisgICAgMTM3NywgMzE1MzUsIDMxNTM5LCA4MDA1LCAzMTU0NSwgMzE1NTEsIDMxNTU4LCA4MDE0LCAzMTU2MiwgMzE1NjgsIDMxNTc1LCAKKyAgICAzMTU4MSwgMzE1OTAsIDMxNTk4LCAzMTYxMCwgMzE2MTQsIDMxNjIxLCAzMTYyNywgMzE2MzEsIDMxNjM0LCAzMTY0MywgCisgICAgMzE2NTEsIDMxMDQwLCAzMTY1NiwgMzE2NjYsIDMxNjc2LCAzMTY4NiwgMzE2OTIsIDMxNjk3LCAzMTcwNywgMzE3MTIsIAorICAgIDMxNzI1LCAzMTczOSwgMzE3NTAsIDMxNzYyLCAzMTc3NCwgMzE3ODgsIDMxODAxLCAzMTgxMywgMzE4MjUsIDE0NjAwLCAKKyAgICAzMTgzOSwgMzE4NDQsIDMxODQ5LCAzMTg1MywgMzE4NTcsIDMxODYxLCAxNzgwLCAyNzE3NiwgMzE4NjUsIDMxODcwLCAKKyAgICAzMTA4OCwgMzE4NzUsIDMxODc4LCAzMTg4MywgMzE4ODgsIDMxODkzLCAzMTg5OSwgMzE5MDUsIDEwMDk4LCAzMTkxMCwgCisgICAgMzE5MTcsIDE1Njk3LCAzMTkyMywgMzE5MjgsIDMxOTMzLCAzMTkzNywgMzE5NDIsIDMxOTQ3LCAzMTA5MywgMzE5NTIsIAorICAgIDMxOTU3LCAzMTk2MiwgMzE5NjgsIDMxMDk5LCAzMTk3MywgMzE5NzYsIDMxOTgzLCAzMTk5MSwgMzE5OTcsIDMyMDAzLCAKKyAgICAzMjAwOSwgMzIwMjAsIDMyMDI1LCAzMjAzMiwgMzIwMzksIDMyMDQ2LCAzMjA1NCwgMzIwNjMsIDMyMDcyLCAzMjA3OCwgCisgICAgMzIwODQsIDMyMDkyLCAzMTEwNCwgMzIwOTcsIDMyMTAzLCAzMjEwOSwgMzExMTAsIDMyMTE0LCAzMjExOSwgMzIxMjcsIAorICAgIDMyMTM1LCAzMjE0MSwgMzIxNDgsIDMyMTU0LCAzMjE2MSwgMzIxNjgsIDMyMTc0LCAzMjE4MiwgMzIxOTIsIDMyMTk5LCAKKyAgICAzMjIwNCwgMzIyMTAsIDMyMjE1LCAzMjIyMCwgMzIyMjcsIDMyMjM2LCAzMjI0NCwgMzIyNDksIDMyMjU1LCAzMjI2MiwgCisgICAgMzIyNzAsIDMyMjc2LCAzMjI4MSwgMzIyODcsIDMyMjk2LCAyNzk1NywgMzIzMDMsIDMyMzA3LCAzMjMxMiwgMzIzMjEsIAorICAgIDMyMzI2LCAzMjMzMSwgMzIzMzYsIDEyNDA1LCAzMjM0NCwgMzIzNDksIDMyMzU0LCAzMjM1OSwgMzIzNjMsIDMyMzY4LCAKKyAgICAzMjM3MywgMzIzODAsIDMyMzg1LCAzMjM5MCwgMzIzOTUsIDMxMTE1LCAyMTIxNiwgMzI0MDEsIDI1MTksIDI0NCwgMzI0MDQsIAorICAgIDMyNDA3LCAzMjQxMSwgMzI0MTUsIDMyNDI1LCAzMjQzMywgMzI0MzcsIDMyNDQ0LCAzMjQ1MSwgMzI0NTUsIDMyNDU4LCAKKyAgICAzMjQ2NCwgMzI0NzIsIDMyNDgwLCAzMjQ4NCwgMzI0ODgsIDMyNDkxLCAzMjQ5OCwgMzI1MDIsIDMyNTA2LCAzMjUxMywgCisgICAgMzI1MjEsIDMxMDUxLCAzMjUyOCwgMzI1MzYsIDEwMTU4LCA2NjQsIDMwOCwgMzI1NDgsIDMyNTUzLCAzMjU1OCwgMzI1NjQsIAorICAgIDMyNTY5LCAzMjU3NCwgMzcwNCwgMzI1NzksIDMyNTgyLCAzMjU4NywgMzI1OTIsIDMyNTk3LCAzMjYwMiwgMzI2MDcsIAorICAgIDMyNjE0LCAyMjUyOSwgMzI2MTksIDMyNjI0LCAzMjYyOSwgMzI2MzQsIDMyNjM5LCAzMjY0NSwgMzI2NTAsIDMyNjU2LCAKKyAgICAzMTI4NiwgMzI2NjIsIDMyNjY3LCAzMjY3MywgMzI2NzksIDMyNjg5LCAzMjY5NCwgMzI2OTksIDMyNzAzLCAzMjcwOCwgCisgICAgMzI3MTMsIDMyNzE4LCAzMjcyMywgMzI3MzYsIDMyNzQxLCAyMjMwMiwgMTY3MDUsIDM3MTAsIDMyNzQ1LCAzMjc1MCwgCisgICAgMzI3NTUsIDMyNzYxLCAzMjc2NiwgMzI3NzEsIDMyNzc1LCAzMjc4MCwgMzI3ODUsIDMyNzkxLCAzMjc5NiwgMzI4MDEsIAorICAgIDEzODIsIDMyODA1LCAzMjgxMCwgMzI4MTUsIDMyODIwLCAzMjgyNCwgMzI4MjksIDMyODM0LCAzMjgzOSwgMzI4NDUsIAorICAgIDMyODUxLCAzMjg1NiwgMzI4NjAsIDMyODY0LCAzMjg2OSwgMzI4NzQsIDMyODc5LCAzMjg4MywgMzI4OTEsIDMyODk1LCAKKyAgICAzMjkwMSwgMzI5MDUsIDMyOTEyLCAxNjQ5OCwgMzEwNjIsIDMyOTE4LCAzMjkyNSwgMzI5MzMsIDMyOTQwLCAzMjk0NiwgCisgICAgMzI5NTksIDMyOTcxLCAzMjk3NywgMzI5ODEsIDI3NzMsIDMyOTg1LCAzMjk4OSwgMzI0OTMsIDMyOTk4LCAzMzAwOSwgCisgICAgMzMwMTQsIDMzMDE5LCAzMzAyNCwgMzMwMjgsIDMzMDMzLCAyMjQzNSwgMzMwMzcsIDMzMDQxLCAzMzA0NiwgMzEwNjgsIAorICAgIDIxMzAwLCAzMzA1MCwgMzMwNTUsIDMzMDYxLCAzMzA2NiwgMzMwNzAsIDMzMDc0LCAzMzA3NywgMzMwODEsIDMzMDg3LCAKKyAgICAzMzA5OCwgMzMxMTAsIDMxMDc0LCAzMzExNSwgMzMxMTgsIDMzMTIyLCAzNDcsIDMzMTI3LCAzMzEzMiwgMzMxMzcsIAorICAgIDMzMTQyLCAzMzE0NywgMzMxNTIsIDMzMTU4LCAzMzE2MywgMzMxNjgsIDMzMTc0LCAzMzE3OSwgMzMxODUsIDMzMTkwLCAKKyAgICAzMzE5NiwgMzMyMDEsIDMzMjA2LCAzMzIxMSwgMzMyMTYsIDMzMjIxLCAzMzIyNiwgMzMyMzEsIDMzMjM2LCAzMzI0MiwgCisgICAgMzMyNDcsIDMzMjUyLCAzMzI1NywgMzMyNjIsIDMzMjY3LCAzMzI3MiwgMzMyNzcsIDMzMjgzLCAzMzI4OSwgMzMyOTQsIAorICAgIDMzMjk5LCAzMzMwNCwgMzMzMDksIDMzMzE0LCAzMzMxOSwgMzMzMjQsIDMzMzI5LCAzMzMzNCwgMzMzMzksIDMzMzQ0LCAKKyAgICAzMzM0OSwgMzMzNTQsIDMzMzU5LCAzMzM2NCwgMzMzNjksIDMzMzc0LCAzMzM3OSwgMzMzODUsIDMxMywgMjYsIDMzMzkwLCAKKyAgICAzMzM5NCwgMzMzOTgsIDMzNDA2LCAzMzQxMCwgMzM0MTQsIDMzNDE3LCAzMzQyMCwgMzM0MjIsIDMzNDI3LCAzMzQzMSwgCisgICAgMzM0MzYsIDMzNDQwLCAzMzQ0NSwgMzM0NDksIDMzNDU0LCAzMzQ1OCwgMzM0NjEsIDMzNDYzLCAzMzQ2NywgMzM0NzIsIAorICAgIDMzNDc2LCAzMzQ4NywgMzM0OTAsIDMzNDkyLCAzMzQ5NiwgMzM1MDgsIDMzNTE3LCAzMzUyMSwgMzM1MjUsIDMzNTMxLCAKKyAgICAzMzUzNiwgMzM1NDUsIDMzNTUxLCAzMzU1NiwgMzM1NjEsIDMzNTY1LCAzMzU3MCwgMzM1NzcsIDMzNTgyLCAzMzU4OCwgCisgICAgMzM1OTMsIDMzNTk3LCAzMzYwNCwgMjU3MTgsIDI1NzI4LCAzMzYwOCwgMzM2MTMsIDMzNjE4LCAzMzYyMywgMzM2MzAsIAorICAgIDMzNjM0LCAzMzY0MSwgODExMywgMzM2NDcsIDMzNjU2LCAzMzY2NCwgMzM2NzksIDMzNjkzLCAzMzcwMSwgMzM3MTIsIAorICAgIDMzNzIxLCAzMzcyNiwgNzIyNywgMzM3MzYsIDMzNzQxLCAzMzc0NiwgMzM3NTAsIDMzNzUzLCAzMzc1NywgMzM3NjIsIAorICAgIDMzNzY2LCAzMzc3MywgMzM3NzgsIDMzNzgzLCA4OTEyLCAzMzc5MywgMzM3OTUsIDMzNzk4LCAzMzgwMiwgMzM4MDgsIAorICAgIDMzODEyLCAzMzgxNywgMzM4MjIsIDMzODI4LCAzMzgzMywgMzM4MzksIDMzODQ0LCAzMzg1NCwgMzM4NjMsIDMzODcxLCAKKyAgICAzMzg3NiwgMzM4ODIsIDMzODg3LCAzMzg5NCwgMzM4OTgsIDMzOTA2LCAzMzkxMywgMzM5MjYsIDMzOTM0LCAzMzkzOCwgCisgICAgMzM5NDgsIDMzOTUzLCAzMzk1NywgMzM5NjUsIDMzOTczLCAzMzk3NywgMzM5ODYsIDMzOTkyLCAzMzk5NywgMzQwMDUsIAorICAgIDM0MDE1LCAzNDAyNCwgMzQwMzMsIDM0MDQyLCAzNDA1MywgMzQwNjEsIDM0MDcyLCAzNDA4MSwgMzQwODgsIDM0MDk0LCAKKyAgICAzNDA5OSwgMzQxMTAsIDM0MTE1LCAzNDExOSwgMzQxMjIsIDM0MTI2LCAzNDEzNCwgMzQxNDAsIDM0MTQ4LCAzNDE1NSwgCisgICAgMzQxNjEsIDM0MTY2LCAzNDE3MiwgMjQxOCwgMzQxNzYsIDM0MTc4LCAzNDE4MywgMzQxODgsIDM0MTkzLCAzNDE5NiwgCisgICAgMzQxOTgsIDM0MjAyLCAzNDIwNSwgMzQyMTIsIDM0MjE2LCA5ODkxLCAzNDIyMCwgMzQyMjYsIDM0MjM2LCAzNDI0MSwgCisgICAgMzQyNDcsIDM0MjUxLCAzNDI1NiwgMzQyNjksIDI2MTA0LCAzNDI3NSwgMzQyODQsIDE3NDc1LCAzNDI5MSwgMzQzMDAsIAorICAgIDMxNjcyLCAzNDMwOCwgMzQzMTMsIDM0MzE3LCAzNDMyNSwgMzQzMzIsIDM0MzM3LCAzNDM0MSwgMzQzNDYsIDM0MzUwLCAKKyAgICAzNDM1OCwgMzQzNjQsIDM0MzcwLCAzNDM3NSwgMzQzNzksIDM0MzgyLCAzNDM4NywgMzQ0MDAsIDM0NDE2LCAyMjk5NiwgCisgICAgMzQ0MzMsIDM0NDQ1LCAzNDQ2MiwgMzQ0NzQsIDM0NDg4LCAyMzAxMywgMjMwMzIsIDM0NTAwLCAzNDUxMiwgMjY4MCwgCisgICAgMzQ1MjYsIDM0NTMxLCAzNDUzNiwgMzQ1NDEsIDM0NTQ1LCAzNDU1MiwgMzQ1NjQsIDM0NTcwLCAzNDU3MywgMzQ1ODQsIAorICAgIDM0NTk1LCAzNDYwMCwgMzIwODksIDY5NSwgMzQ2MDQsIDM0NjA4LCAzNDYxMiwgMzQ2MTUsIDM0NjIwLCAzNDYyNSwgCisgICAgMzQ2MzEsIDM0NjM2LCAzNDY0MSwgMzQ2NDcsIDM0NjUzLCAzNDY1OCwgMzQ2NjIsIDM0NjY3LCAzNDY3MiwgMzQ2NzcsIAorICAgIDM0NjgxLCAzNDY4NCwgMzQ2OTAsIDM0Njk1LCAzNDcwMCwgMzQ3MDUsIDM0NzA5LCAzNDcxNCwgMzQ3MjAsIDM0NzI4LCAKKyAgICAyNjMzNywgMzQ3MzMsIDM0NzM4LCAzNDc0NSwgMzQ3NTEsIDM0NzU3LCAzNDc2MiwgMzQ3NzAsIDIyNTM4LCAzNDc3NywgCisgICAgMzQ3ODIsIDM0Nzg3LCAzNDc5MiwgMzQ3OTYsIDM0Nzk5LCAzNDgwNCwgMzQ4MDgsIDM0ODEyLCAzNDgxOSwgMzQ4MjUsIAorICAgIDM0ODMxLCAzNDgzNywgMzQ4NDQsIDM0ODQ5LCAzNDg1NSwgMzM5NjgsIDM0ODU5LCAzNDg2MywgMzQ4NjgsIDM0ODgxLCAKKyAgICAzNDg4NiwgMzQ4OTIsIDM0OTAwLCAzNDkwNywgMzQ5MTUsIDM0OTI1LCAzNDkzMSwgMzQ5MzcsIDM0OTQzLCAzNDk0NywgCisgICAgMzQ5NTYsIDM0OTY0LCAzNDk3MSwgMzQ5NzYsIDM0OTgxLCAxMDQ0NCwgMzQ5ODYsIDM0OTk0LCAzNTAwMSwgMzUwMDcsIAorICAgIDM1MDE3LCAzNTAyMiwgMzUwMjgsIDM1MDM2LCAzNjA4LCAzNTA0MywgMzUwNTAsIDM2MTQsIDM1MDU0LCAzNTA1OSwgCisgICAgMzUwNzAsIDM1MDc3LCAzNTA4MywgMzUwOTIsIDM1MDk2LCA0MDE1LCAzNTA5OSwgMzUxMDYsIDM1MTEyLCAzNTExOCwgCisgICAgMzUxMjYsIDM1MTM2LCAyOTA2MywgMzUxNDMsIDM1MTUxLCAzNTE1NiwgMzUxNjIsIDM1MTY3LCAyNTk2NCwgMzUxNzMsIAorICAgIDM1MTgwLCAzNTE4NiwgMzUxOTUsIDIzNjc3LCAzNTIwMiwgMzUyMDcsIDM1MjExLCAzNTIxOSwgMzUyMjcsIDk2MDcsIAorICAgIDU4OTUsIDM1MjM0LCAzNTIzOCwgMzUyNDAsIDM1MjQ0LCAzNTI0OSwgMzUyNTEsIDM1MjU3LCAzNTI2MiwgMzUyNjcsIAorICAgIDM1Mjc0LCAzMjYxMCwgMzUyODAsIDM1Mjg1LCAzNTI4OSwgMzUyOTQsIDM1Mjk4LCAzNTMwNywgMzUzMTEsIDM1MzE3LCAKKyAgICAzNTMyNCwgMzUzMzAsIDM1MzM3LCAzNTM0MiwgMzUzNTEsIDM1MzU2LCAzNTM2MCwgMzUzNjUsIDM1MzcyLCAzNTM4MCwgCisgICAgMzUzODgsIDM1MzkzLCAyMTM1NiwgMzUzOTcsIDM1NDAwLCAzNTQwNCwgMzU0MDgsIDM1NDEyLCAzNTQxNSwgMzU0MTcsIAorICAgIDM1NDI1LCAzNTQyOSwgMzU0MzYsIDM1NDQwLCAzNTQ0NCwgMzU0NTIsIDM1NDU5LCAzNTQ2OSwgMzU0NzMsIDM1NDc3LCAKKyAgICAzNTQ4NSwgMzU0OTMsIDM1NDk5LCAzNTUwNCwgMzU1MTMsIDEzMzU3LCAzNTUxOSwgMzU1MjgsIDM1NTMzLCAzNTU0MCwgCisgICAgMzU1NDgsIDM1NTU2LCAzNTU2NCwgMzU1NzEsIDM1NTc4LCAzNTU4NSwgMzU1OTIsIDM1NTk5LCAzNTYwNCwgMzU2MTAsIAorICAgIDM1NjI3LCAzNTYzNSwgMzU2NDUsIDM1NjUzLCAzNTY2MCwgNDA3LCAzNTY2NCwgMzU2NzAsIDM1Njc0LCAzNTY3OSwgCisgICAgMzM3MTcsIDM1Njg1LCAzNTY4OCwgMzU2OTIsIDM1NzAwLCAzNjE5LCAzNTcwOCwgMzU3MTQsIDM1NzIwLCAzNTcyOSwgCisgICAgMzU3MzksIDM1NzQ2LCAzNTc1MiwgMzYyNSwgMzYzMSwgMzU3NjEsIDM1NzY4LCAzNTc3NiwgMzU3ODEsIDM1Nzg1LCAKKyAgICAzNTc5MiwgMzU4MDAsIDM1ODA3LCAzNTgxMywgMzU4MjIsIDM1ODMyLCAzNTgzOCwgMzU4NDYsIDM1ODU1LCAzNTg2MiwgCisgICAgMzU4NzAsIDM1ODc3LCAyMjAzMiwgMzU4ODEsIDM1ODg4LCAzNTg5NCwgMzU5MDQsIDM1OTEzLCAzNTkyNCwgMzU5MjgsIAorICAgIDM1OTM4LCAzNTk0NCwgMzU5NTEsIDM1OTU5LCAzNTk2OCwgMzU5NzcsIDM1OTg3LCAzNTk5OCwgMzYwMDUsIDM2MDEwLCAKKyAgICAzNjAxNywgMzAyOSwgMzYwMjUsIDM2MDMxLCAzNjAzNiwgMzYwNDIsIDM2MDQ4LCAzNjA1MywgMzYwNjYsIDM2MDc5LCAKKyAgICAzNjA5MiwgMzYwOTksIDM2MTA1LCAzNjExMywgMzYxMjEsIDM2MTI2LCAzNjEzMCwgMTQ2OSwgMzYxMzQsIDM2MTM5LCAKKyAgICAzNjE0NCwgMzYxNDksIDM2MTU0LCAzNjE2MCwgMzYxNjUsIDM2MTcwLCAzNjE3NSwgMzYxODAsIDM2MTg1LCAzNjE5MCwgCisgICAgMzYxOTUsIDM2MjAxLCAzNjIwNywgMzYyMTIsIDM2MjE3LCAzNjIyMywgMzYyMjgsIDM2MjMzLCAzNjIzOCwgMzYyNDQsIAorICAgIDM2MjQ5LCAzNjI1NCwgMzYyNTksIDM2MjY0LCAzNjI3MCwgMzYyNzUsIDM2MjgwLCAzNjI4NiwgMzYyOTEsIDM2Mjk2LCAKKyAgICAzNjMwMSwgMzYzMDYsIDM2MzExLCAzNjMxNywgMzYzMjIsIDM2MzI4LCAzNjMzMywgMzYzMzksIDM2MzQ0LCAzNjM0OSwgCisgICAgMzYzNTQsIDM2MzYwLCAzNjM2NiwgMzYzNzIsIDM2Mzc4LCAzNjM4NCwgMzYzOTAsIDM2Mzk2LCAzNjQwMiwgMzY0MDcsIAorICAgIDM2NDEyLCAzNjQxOCwgMzY0MjMsIDM2NDI4LCAzNjQzMywgMzY0MzgsIDM2NDQzLCAzNjQ0OCwgMzY0NTMsIDM2NDU5LCAKKyAgICAzNjQ2NCwgMzY0NjksIDM2NDc1LCAzNjQ4MSwgMTAxLCAzNjQ4NiwgMzY0ODgsIDM2NDkyLCAzNjQ5NiwgMzY1MDAsIAorICAgIDM2NTA1LCAzNjUwOSwgOTUyOCwgMzY1MTMsIDM2NTE5LCAxNzQxLCA2MjgwLCAzNjUyNSwgMzY1MjgsIDM2NTMzLCAzNjUzNywgCisgICAgMzY1NDIsIDM2NTQ2LCAzNjU1MCwgMzY1NTUsIDEwMjQ1LCAzNjU1OSwgMzY1NjMsIDM2NTY3LCAzNjU3MSwgMTUzODUsIAorICAgIDM2NTc2LCAzNjU4MCwgMzY1ODUsIDM2NTkwLCAzNjU5NSwgMzY1OTksIDM2NjA2LCAyNjEyOCwgMzY2MTIsIDM2NjE1LCAKKyAgICAzNjYxOSwgMzY2MjQsIDM2NjMwLCAzNjYzNCwgMzY2NDIsIDM2NjQ4LCAzNjY1MywgMzY2NTcsIDM2NjYzLCAzNjY2NywgCisgICAgMzY2NzEsIDM0NjIsIDM0NjcsIDI5MjU1LCAzNjY3NCwgMzY2NzgsIDM2NjgyLCAzNjY4NiwgMzY2OTAsIDM2Njk4LCAKKyAgICAzNjcwNSwgMzY3MDksIDM2NzE2LCAzNjcyMSwgMzE3LCAzNjcyNiwgMzY3MzAsIDM2NzM2LCAzNjc0OCwgMzY3NTQsIAorICAgIDM2NzYwLCAzNjc2NCwgMzY3NzAsIDM2Nzc5LCAzNjc4MywgMzY3ODcsIDM2NzkyLCAzNjc5OCwgMzY4MDMsIDM2ODA3LCAKKyAgICAzNjgxMiwgMzY4MTYsIDM2ODIwLCAzNjgyNywgMzY4MzMsIDM2ODM4LCAzNjg1MywgMzY4NjgsIDM2ODgzLCAzNjg5OSwgCisgICAgMzY5MTcsIDEwMTk1LCAzNjkzMSwgMzY5MzgsIDM2OTQyLCAzNjk0NSwgMzY5NTQsIDM2OTU5LCAzNjk2MywgMzY5NzEsIAorICAgIDMzOTE5LCAzNjk3OSwgMzY5ODMsIDM2OTkzLCAzNzAwNCwgMjkyMjUsIDM3MDE3LCAzNzAyMSwgMzcwMzAsIDM3MDM4LCAKKyAgICA5Nzg1LCAxNDkxMywgMzcwNDIsIDIyNDQ3LCAzNzA0NSwgMzAxNzMsIDM3MDUwLCA5Nzg0LCAzNzA1NSwgMzcwNjEsIAorICAgIDM3MDY2LCAzNzA3MiwgMzcwNzcsIDM3MDgzLCAzNzA4OCwgMzcwOTQsIDM3MDk5LCAzNzEwNSwgMzcxMTEsIDM3MTE3LCAKKyAgICAzNzEyMiwgMzcwNzgsIDM3MDg0LCAzNzA4OSwgMzcwOTUsIDM3MTAwLCAzNzEwNiwgMzcxMTIsIDgxMjYsIDM4NzQsIAorICAgIDM3MTI2LCAzNzEzNCwgMzcxMzgsIDM3MTQxLCAzNzE0NSwgMzcxNTAsIDM3MTU1LCAzNzE2MSwgMzcxNjcsIDM3MTcyLCAKKyAgICAzNzE3NiwgMjU5NzYsIDM3MTgwLCAzNzE4NCwgMzcxOTAsIDM3MTk0LCA5MDQ5LCAzNzIwMywgMzcyMTAsIDM3MjE0LCAKKyAgICAxMTg3NSwgMzcyMjEsIDM3MjI3LCAzNzIzMiwgMzcyMzksIDM3MjQ2LCAzNzI1MywgMjg1NzEsIDgwNDksIDM3MjYwLCAKKyAgICAzNzI2NywgMzcyNzQsIDM3MjgwLCAzNzI4NSwgMzcyOTIsIDM3MzAzLCAzNzMwOSwgMzczMTQsIDM3MzE5LCAzNzMyNCwgCisgICAgMzczMzEsIDM3MDc5LCAzNzMzNSwgMzczNDUsIDM3MzU2LCAzNzM2MiwgMzczNjcsIDM3MzcyLCAzNzM3NywgMzczODIsIAorICAgIDM3Mzg3LCAzNzM5MSwgMzczOTUsIDM3NDAxLCAzNzQwOSwgMjMxOSwgODY1LCAxMDI2MSwgMTAyNzMsIDEwMjc4LCAxMDI4NCwgCisgICAgMzc0MTgsIDEwMjg5LCAxMDI5NCwgMTAzMDAsIDM3NDIzLCAzNzQzMywgMzc0MzcsIDEwMzA1LCAzNzQ0MiwgMTY5MDMsIAorICAgIDM3NDQ1LCAzNzQ1MCwgMzc0NTQsIDM3NDU5LCAzNzQ2NCwgMzc0NzEsIDM3NDc4LCAzNzQ4MiwgMzc0ODUsIDM3NDkzLCAKKyAgICAxMDIwOCwgMzc1MDAsIDM3NTAzLCAzNzUwOSwgMzc1MTksIDU5MjksIDM3NTI4LCAzNzUzMiwgMzc1NDAsIDM3NTQ0LCAKKyAgICAzNzU1NCwgMzc1NjAsIDM3NTcxLCAzNzU3NywgMzc1ODMsIDM3NTg4LCAzNzU5NCwgMzc2MDAsIDM3NjA2LCAzNzYxMSwgCisgICAgMzc2MTQsIDM3NjIxLCAzNzYyNywgMzc2MzIsIDM3NjM5LCAzNzY0NiwgMzc2NTAsIDM3NjYwLCAzNzY3MywgMzc2ODIsIAorICAgIDM3NjkxLCAzNzcwMiwgMzc3MTUsIDM3NzI2LCAzNzczNSwgMzc3NDYsIDM3NzUxLCAzNzc2MCwgMzc3NjUsIDEwMzEwLCAKKyAgICAzNzc3MSwgMzc3NzgsIDM3Nzg2LCAzNzc5MSwgMzc3OTUsIDM3ODAyLCAzNzgwOSwgMzgyOSwgMTYsIDM3ODEzLCAzNzgxOCwgCisgICAgMTY3NTcsIDM3ODIyLCAzNzgyNSwgMzc4MjgsIDI4MDc3LCAzNzgzMiwgMjg1ODAsIDM3ODQwLCAzNzg0NCwgMzc4NDgsIAorICAgIDM3ODUxLCAzNzg1NywgMzcxMDEsIDM3ODYzLCAzNzg3MSwgMzc4NzcsIDM3ODg0LCAyODA2MCwgMzc4ODgsIDI4MjU0LCAKKyAgICAzNzg5MiwgMzc5MDEsIDM3OTA3LCAzNzkxMywgMzc5MTgsIDM3OTIyLCAzNzkyOCwgMzc5MzIsIDM3OTQwLCAzNzk0OCwgCisgICAgMjYxOTQsIDM3OTU0LCAzNzk2MSwgMzc5NjcsIDM3OTcyLCAzNzk3NywgMzc5ODEsIDM3OTg3LCAzNzk5MiwgMzc5OTgsIAorICAgIDQwNTYsIDc5MSwgMzgwMDUsIDM4MDA5LCAzODAxMiwgMTUyNzUsIDM4MDI0LCAzNTg1MSwgMzgwMzUsIDM4MDM4LCAzODA0NSwgCisgICAgMzgwNDksIDM4MDU1LCAzODA1OSwgMzgwNjUsIDM4MDcwLCAzODA3NiwgMzgwODEsIDM4MDg2LCAzODA5MCwgMzgwOTQsIAorICAgIDM4MDk5LCAzODEwNCwgMzgxMTQsIDM4MTIwLCAzODEzMywgMzgxMzksIDM4MTQ1LCAzODE1MiwgMzgxNTcsIDM4MTYzLCAKKyAgICAzODE2OCwgMTY2NDMsIDE0NzIsIDEwMTksIDMxMjE4LCAzMTIyNCwgMzgxNzMsIDMxMjMwLCAzMTI0MywgMzEyNDksIAorICAgIDMxMjU1LCAzODE3OSwgMzEyNjEsIDMxMjY3LCAzODE4NSwgMzgxOTEsIDIyLCAzODE5OSwgMzgyMDYsIDM4MjEwLCAzODIxNCwgCisgICAgMzgyMjIsIDMxOTc4LCAzODIyNiwgMzgyMzAsIDM4MjM3LCAzODI0MiwgMzgyNDYsIDM4MjUxLCAzODI1NywgMzgyNjIsIAorICAgIDM4MjY4LCAzODI3MywgMzgyNzcsIDM4MjgxLCAzODI4NSwgMzgyOTAsIDM4Mjk0LCAzODI5OSwgMzgzMDMsIDM4MzEwLCAKKyAgICAzODMxNSwgMzgzMTksIDM4MzI0LCAzODMyOCwgMzgzMzMsIDM4MzM3LCAzODM0MiwgMzgzNDgsIDE1NDk1LCAxNTUwMCwgCisgICAgMzgzNTMsIDM4MzU3LCAzODM2MCwgMzgzNjQsIDIxMTgzLCAzODM2OSwgMzgzNzMsIDM4Mzc5LCAzODM4NiwgMzgzOTEsIAorICAgIDM4NDAxLCAzODQwNiwgMzg0MTQsIDM4NDE4LCAzODQyMSwgMzE5OTMsIDM4NDI1LCA0MTA5LCAzODQzMCwgMzg0MzUsIAorICAgIDM4NDM5LCAzODQ0NCwgMzg0NDgsIDM4NDUzLCAxMzM3NSwgMzg0NjQsIDM4NDY4LCAzODQ3MSwgMzg0NzYsIDM4NDgwLCAKKyAgICAzODQ4NCwgMzg0ODcsIDM4NDkxLCA4MTQ1LCAxMzM5MSwgMzg0OTQsIDM4NDk3LCAzODUwMywgMzg1MDgsIDM4NTE0LCAKKyAgICAzODUxOSwgMzg1MjUsIDM4NTMwLCAzODUzNiwgMzg1NDEsIDM4NTQ3LCAzODU1MywgMzg1NTksIDM4NTY0LCAzODU2OCwgCisgICAgMzg1NzIsIDM4NTgxLCAzODU5NywgMzg2MTMsIDM4NjIzLCAyNzk2NywgMzg2MzAsIDM4NjM0LCAzODYzOSwgMzg2NDQsIAorICAgIDM4NjQ4LCAzODY1MiwgMzU5NzIsIDM4NjU4LCAzODY2MywgMzg2NjcsIDM4Njc0LCAzODY3OSwgMzg2ODMsIDM4Njg3LCAKKyAgICAyNjk5NiwgMzg2OTMsIDIxNDUxLCAzODY5OCwgMzg3MDUsIDM4NzEzLCAzODcxOSwgMzg3MjYsIDM4NzM0LCAzODc0MCwgCisgICAgMzg3NDQsIDM4NzUwLCAzODc1OCwgMzg3NjIsIDM4NzcxLCA5NTA5LCAzODc3OSwgMzg3ODMsIDM4NzkxLCAzODc5OCwgCisgICAgMzg4MDMsIDM4ODA4LCAzODgxMiwgMzg4MTUsIDM4ODE5LCAzODgyMiwgMzg4MjYsIDM4ODMzLCAzODgzOCwgMzg4NDQsIAorICAgIDI2NDE1LCAzMTI4MSwgMzg4NDgsIDM4ODU1LCAzODg2MSwgMzg4NjcsIDM4ODcyLCAzODg3NSwgMzg4NzcsIDM4ODg0LCAKKyAgICAzODg5MSwgMzg4OTcsIDM4OTAxLCAzODkwNCwgMzg5MDgsIDM4OTEyLCAzODkxNiwgMzg5MjEsIDM4OTI1LCAzODkyOSwgCisgICAgMzg5MzIsIDM4OTM2LCAzODk1MCwgMjMwNjIsIDM4OTY5LCAzODk4MiwgMzg5OTUsIDM5MDA4LCAyMzA4MCwgMzkwMjMsIAorICAgIDEwNDk3LCAzOTAzOCwgMzkwNDQsIDM5MDQ4LCAzOTA1MiwgMzkwNTksIDM5MDY0LCAzOTA2OCwgMzkwNzUsIDM5MDgxLCAKKyAgICAzOTA4NiwgMzkwOTIsIDM5MTAyLCAzOTExNCwgMzkxMjUsIDM5MTMwLCAzOTEzNywgMzkxNDEsIDM5MTQ1LCAzOTE0OCwgCisgICAgMTU4OTEsIDM2NzcsIDM5MTU2LCAxNTUyMiwgMzkxNjksIDM5MTc2LCAzOTE4MCwgMzkxODQsIDM5MTg5LCAzOTE5NCwgCisgICAgMzkyMDAsIDM5MjA0LCAzOTIwOCwgMzkyMTEsIDc3NDIsIDE1NTMzLCAzOTIxNiwgMzkyMjAsIDM5MjI2LCAzOTIzNSwgCisgICAgMzkyNDAsIDM5MjQ3LCAzNTgyOCwgMzkyNTMsIDM5MjU4LCAzOTI2MiwgMzkyNjcsIDM5Mjc0LCAzOTI3OCwgMzkyODEsIAorICAgIDM5Mjg1LCAzOTI5MCwgMTQ1NjUsIDM5Mjk3LCAzOTMwNCwgMTA3NywgMzkzMDgsIDM5MzEzLCAzOTMxOCwgMzkzMjQsIAorICAgIDM5MzI5LCAzOTMzNCwgMzkzMzgsIDM5MzQ4LCAzOTM1MywgMzkzNTksIDM5MzY0LCAzOTM3MCwgMzkzNzUsIDM5MzgxLCAKKyAgICAzOTM5MSwgMzkzOTYsIDM5NDAxLCAzOTQwNSwgNzIyOSwgNzI0MSwgMzk0MTAsIDM5NDEzLCAzOTQyMCwgMzk0MjYsIAorICAgIDM0MDg0LCAzNDA5MSwgMzk0MzUsIDM5NDM5LCAzMjA0MSwgMzk0NDcsIDM5NDU4LCAzOTQ2NiwgMzYwMjAsIDM5NDczLCAKKyAgICAzOTQ3OCwgMzk0ODMsIDM5NDk0LCAzOTUwMSwgMzk1MTIsIDMyMDY1LCAyMTQ1NywgMzk1MjAsIDczNSwgMzk1MjUsIAorICAgIDM5NTMxLCAyODA1MSwgMzk1MzcsIDM5NTQyLCAzOTU1MiwgMzk1NjEsIDM5NTY4LCAzOTU3NCwgMzk1NzgsIDM5NTgxLCAKKyAgICAzOTU4OCwgMzk1OTQsIDM5NjAxLCAzOTYwNywgMzk2MTcsIDM5NjI1LCAzOTYzMSwgMzk2MzcsIDM5NjQyLCAzOTY0NiwgCisgICAgMzk2NTMsIDM5NjU5LCAzOTY2NiwgMzg5MTcsIDUzNSwgMTM4MTgsIDM5NjcyLCAzOTY3NywgMzk2ODAsIDM5Njg2LCAKKyAgICAzOTY5NCwgMTM5NiwgMzk2OTksIDM5NzAzLCAzOTcwOCwgMzk3MTUsIDM5NzIxLCAzOTcyNSwgMzk3MjksIDM5NzM0LCAKKyAgICAzOTc0MywgMzk3NTAsIDM5NzYwLCAzOTc2NiwgMjgwOTUsIDM5NzgzLCAzOTc5MiwgMzk4MDAsIDM5ODA2LCAzOTgxMSwgCisgICAgMzk4MTgsIDM5ODI0LCAzOTgzMiwgMzk4NDEsIDM5ODQ5LCAzOTg1MywgMzk4NTgsIDM5ODY2LCAzMjA3NCwgMzk4NzIsIAorICAgIDM5ODkxLCAxNTgyNCwgMzk5MDUsIDM5OTIxLCAzOTkzNSwgMzk5NDEsIDM5OTQ2LCAzOTk1MSwgMzk5NTYsIDM5OTYyLCAKKyAgICAzMjA4MCwgMzk5NjcsIDM5OTc0LCAzOTk3OSwgMzk5ODMsIDM0NSwgMjkzNiwgMzk5OTAsIDM5OTk1LCA0MDAwMCwgMjczMjIsIAorICAgIDM5ODIxLCA0MDAwNCwgNDAwMDksIDQwMDE3LCA0MDAyMSwgNDAwMjQsIDQwMDMwLCA0MDAzNiwgNDAwNDAsIDI4MTUwLCAKKyAgICA0MDA0MywgNDAwNDgsIDQwMDUyLCA0MDA1NSwgNDAwNjAsIDQwMDY0LCA0MDA2OSwgNDAwNzQsIDQwMDc4LCA0MDA4MywgCisgICAgNDAwODcsIDQwMDkxLCAyMTE3OSwgMjExOTAsIDQwMDk1LCA0MDEwMCwgNDAxMDYsIDI2OTUzLCA0MDExMSwgNDAxMTUsIAorICAgIDIxMjY2LCAxNjA3MiwgNDAxMTgsIDQwMTIzLCA0MDEyOCwgNDAxMzMsIDQwMTM4LCA0MDE0MywgNDAxNDgsIDQwMTUzLCAKKyAgICA0NTAsIDQ5LCAzMTI5OSwgMzEzMDQsIDMxMzA5LCAzMTMxNSwgMzEzMjAsIDMxMzI1LCA0MDE1OCwgMzEzMjksIDQwMTYyLCAKKyAgICA0MDE2NiwgNDAxNzAsIDMxMzM0LCAzMTM0MCwgNDAxODQsIDMxMzUxLCAzMTM1NiwgNDAxOTIsIDQwMTk3LCAzMTM2MiwgCisgICAgNDAyMDIsIDQwMjA3LCA0MDIxMiwgNDAyMTcsIDQwMjIzLCA0MDIyOSwgNDAyMzUsIDMxMzc5LCA0MDI0OCwgNDAyNTQsIAorICAgIDMxMzgzLCA0MDI1OCwgMzEzODgsIDQwMjYzLCAzMTM5MywgMzEzOTgsIDQwMjY2LCA0MDI3MSwgNDAyNzUsIDMwOTQ4LCAKKyAgICA0MDI4MSwgMTM1OTksIDQwMjg4LCA0MDI5MywgMzE0MDMsIDQwMjk3LCA0MDMwMiwgNDAzMDcsIDQwMzEyLCA0MDMxNiwgCisgICAgNDAzMjEsIDQwMzI2LCA0MDMzMiwgNDAzMzcsIDQwMzQyLCA0MDM0OCwgNDAzNTQsIDQwMzU5LCA0MDM2MywgNDAzNjgsIAorICAgIDQwMzczLCA0MDM3OCwgNDAzODIsIDQwMzg3LCA0MDM5MiwgNDAzOTcsIDQwNDAzLCA0MDQwOSwgNDA0MTUsIDQwNDIwLCAKKyAgICA0MDQyNCwgNDA0MjksIDQwNDMzLCAzMTQwNywgMzE0MTIsIDMxNDE3LCA0MDQzNywgNDA0NDEsIDQwNDQ1LCAzMTQyMiwgCisgICAgMzE0MjgsIDMxNDM0LCAzMTQ0NiwgNDA0NTcsIDI2MDEzLCA0MDQ2MSwgNDA0NjUsIDQwNDcwLCA0MDQ3NSwgNDA0ODAsIAorICAgIDQwNDg1LCA0MDQ4OSwgNDA0OTMsIDQwNTAzLCA0MDUwOCwgNDA1MTMsIDQwNTE3LCA0MDUyMSwgNDA1MjQsIDQwNTMyLCAKKyAgICAzMTQ5NCwgNDA1MzcsIDE0NzksIDQwNTQzLCA0MDU1MSwgNDA1NjAsIDQwNTY0LCA0MDU2OCwgNDA1NzYsIDQwNTgyLCAKKyAgICA0MDU5MCwgNDA2MDYsIDQwNjEwLCA0MDYxNCwgNDA2MTksIDQwNjM0LCAzMTUzMSwgMTc0OSwgMTIwNTUsIDQwNjM4LCAKKyAgICAxMzc4LCA0MDY1MCwgNDA2NTEsIDQwNjU5LCA0MDY2NiwgNDA2NzEsIDQwNjc4LCA0MDY4MywgOTM3OSwgMTExOSwgMTAzMzIsIAorICAgIDQwNjkwLCA0MDY5NSwgNDA2OTgsIDQwNzAxLCA0MDcxMCwgMTI4NiwgNDA3MTUsIDM5MDY1LCA0MDcyMiwgNDA3MjcsIAorICAgIDQwNzMxLCAyMjUwMywgMjU1NywgNDA3MzksIDEwNzQxLCA0MDc0OSwgNDA3NTUsIDIzMzcsIDIzNDcsIDQwNzY0LCA0MDc3MywgCisgICAgNDA3ODMsIDQwNzk0LCAzMjkzLCAzNDIzNywgMTAzODQsIDM4MDcsIDE2NjgxLCAxMjkxLCA0MDc5OSwgNDA4MDcsIDQwODE0LCAKKyAgICA0MDgxOSwgNDA4MjMsIDQwODI3LCAyMzg3NSwgMTA0MTEsIDQwODM1LCA0MDg0NCwgNDA4NTMsIDQwODYxLCA0MDg2OCwgCisgICAgNDA4NzksIDQwODg0LCA0MDg5NywgNDA5MTAsIDQwOTIyLCA0MDkzNCwgNDA5NDYsIDQwOTU5LCA0MDk3MCwgNDA5ODEsIAorICAgIDQwOTkxLCA0MDk5OSwgNDEwMDcsIDQxMDE5LCA0MTAzMSwgNDEwNDIsIDQxMDUxLCA0MTA1OSwgNDEwNjYsIDQxMDc4LCAKKyAgICA0MTA4NSwgNDEwOTQsIDQxMTAxLCA0MTExNCwgNDExMTksIDQxMTI5LCA0MTEzNCwgNDExNDAsIDQxMTQ1LCAzNzIxMSwgCisgICAgNDExNDksIDQxMTU2LCA0MTE2MCwgNDExNjcsIDQxMTc1LCAyNTE4LCA0MTE4MiwgNDExOTMsIDQxMjAzLCA0MTIxMiwgCisgICAgNDEyMjAsIDQxMjMwLCA0MTIzOCwgNDEyNDgsIDQxMjU3LCA0MTI2MiwgNDEyNjgsIDQxMjc0LCAzNzA5LCA0MTI4NSwgCisgICAgNDEyOTUsIDQxMzA0LCA0MTMxMywgNDEzMjMsIDQxMzMxLCA0MTM0MCwgNDEzNDUsIDQxMzUwLCA0MTM1NSwgMTcwNSwgMzcsIAorICAgIDQxMzYzLCA0MTM3MSwgNDEzODIsIDQxMzkzLCAxNjM1NiwgNDE0MDMsIDQxNDA3LCA0MTQxNCwgNDE0MjAsIDQxNDI1LCAKKyAgICA0MTQyOSwgNDE0NDAsIDQxNDUwLCA0MTQ1OSwgNDE0NzAsIDE2NzMwLCAxNjczNSwgNDE0NzUsIDQxNDg0LCA0MTQ4OSwgCisgICAgNDE0OTksIDQxNTA0LCA0MTUxMiwgNDE1MjAsIDQxNTI3LCA0MTUzMywgNzA3OCwgMjI4LCA0MTUzNywgNDE1NDMsIDQxNTQ4LCAKKyAgICA0MTU1MSwgMjExNywgMzkxODEsIDQxNTU5LCA0MTU2MywgNDE1NjYsIDE1MTIsIDQxNTcyLCAxMzk4MCwgMTI5NiwgNDE1NzcsIAorICAgIDQxNTkwLCA0MTYwNCwgMjY0MywgNDE2MjIsIDQxNjM0LCA0MTY0NiwgMjY1NywgMjY3NCwgNDE2NjAsIDQxNjczLCAyNjg5LCAKKyAgICA0MTY4NywgNDE2OTksIDI3MDQsIDQxNzEzLCAxMzAyLCAxMzA4LCAxMzE0LCAxMDY1OSwgNDE3MTgsIDQxNzIzLCA0MTcyOCwgCisgICAgNDE3MzIsIDQxNzQ3LCA0MTc2MiwgNDE3NzcsIDQxNzkyLCA0MTgwNywgNDE4MjIsIDQxODM3LCA0MTg1MiwgNDE4NjcsIAorICAgIDQxODgyLCA0MTg5NywgNDE5MTIsIDQxOTI3LCA0MTk0MiwgNDE5NTcsIDQxOTcyLCA0MTk4NywgNDIwMDIsIDQyMDE3LCAKKyAgICA0MjAzMiwgNDIwNDcsIDQyMDYyLCA0MjA3NywgNDIwOTIsIDQyMTA3LCA0MjEyMiwgNDIxMzcsIDQyMTUyLCA0MjE2NywgCisgICAgNDIxODIsIDQyMTk3LCA0MjIxMiwgNDIyMjcsIDQyMjQyLCA0MjI1NywgNDIyNzIsIDQyMjg3LCA0MjMwMiwgNDIzMTcsIAorICAgIDQyMzMyLCA0MjM0NywgNDIzNjIsIDQyMzc3LCA0MjM5MiwgNDI0MDcsIDQyNDIyLCA0MjQzNywgNDI0NTIsIDQyNDY3LCAKKyAgICA0MjQ4MiwgNDI0OTcsIDQyNTEyLCA0MjUyNywgNDI1NDIsIDQyNTU3LCA0MjU3MiwgNDI1ODcsIDQyNjAyLCA0MjYxNywgCisgICAgNDI2MzIsIDQyNjQ3LCA0MjY2MiwgNDI2NzcsIDQyNjkyLCA0MjcwNywgNDI3MjIsIDQyNzM3LCA0Mjc1MiwgNDI3NjcsIAorICAgIDQyNzgyLCA0Mjc5NywgNDI4MTIsIDQyODI3LCA0Mjg0MiwgNDI4NTcsIDQyODcyLCA0Mjg4NywgNDI5MDIsIDQyOTE3LCAKKyAgICA0MjkzMiwgNDI5NDcsIDQyOTYyLCA0Mjk3NywgNDI5OTIsIDQzMDA3LCA0MzAyMiwgNDMwMzcsIDQzMDUyLCA0MzA2NywgCisgICAgNDMwODIsIDQzMDk3LCA0MzExMiwgNDMxMjcsIDQzMTQyLCA0MzE1NywgNDMxNzIsIDQzMTg3LCA0MzIwMiwgNDMyMTcsIAorICAgIDQzMjMyLCA0MzI0NywgNDMyNjIsIDQzMjc3LCA0MzI5MiwgNDMzMDcsIDQzMzIyLCA0MzMzNywgNDMzNTIsIDQzMzY3LCAKKyAgICA0MzM4MiwgNDMzOTcsIDQzNDEyLCA0MzQyNywgNDM0NDIsIDQzNDU3LCA0MzQ3MiwgNDM0ODcsIDQzNTAyLCA0MzUxNywgCisgICAgNDM1MzIsIDQzNTQ3LCA0MzU2MiwgNDM1NzcsIDQzNTkyLCA0MzYwNywgNDM2MjIsIDQzNjM3LCA0MzY1MiwgNDM2NjcsIAorICAgIDQzNjgyLCA0MzY5NywgNDM3MTIsIDQzNzI3LCA0Mzc0MiwgNDM3NTcsIDQzNzcyLCA0Mzc4NywgNDM4MDIsIDQzODE3LCAKKyAgICA0MzgzMiwgNDM4NDcsIDQzODYyLCA0Mzg3NywgNDM4OTIsIDQzOTA3LCA0MzkyMiwgNDM5MzcsIDQzOTUyLCA0Mzk2NywgCisgICAgNDM5ODIsIDQzOTk3LCA0NDAxMiwgNDQwMjcsIDQ0MDQyLCA0NDA1NywgNDQwNzIsIDQ0MDg3LCA0NDEwMiwgNDQxMTcsIAorICAgIDQ0MTMyLCA0NDE0NywgNDQxNjIsIDQ0MTc3LCA0NDE5MiwgNDQyMDcsIDQ0MjIyLCA0NDIzNywgNDQyNTIsIDQ0MjY3LCAKKyAgICA0NDI4MiwgNDQyOTcsIDQ0MzEyLCA0NDMyNywgNDQzNDIsIDQ0MzU3LCA0NDM3MiwgNDQzODcsIDQ0NDAyLCA0NDQxNywgCisgICAgNDQ0MzIsIDQ0NDQ3LCA0NDQ2MiwgNDQ0NzcsIDQ0NDkyLCA0NDUwNywgNDQ1MjIsIDQ0NTM3LCA0NDU1MiwgNDQ1NjcsIAorICAgIDQ0NTgyLCA0NDU5NywgNDQ2MTIsIDQ0NjI3LCA0NDY0MiwgNDQ2NTcsIDQ0NjcyLCA0NDY4NywgNDQ3MDIsIDQ0NzE3LCAKKyAgICA0NDczMiwgNDQ3NDcsIDQ0NzYyLCA0NDc3NywgNDQ3OTIsIDQ0ODA3LCA0NDgyMiwgNDQ4MzcsIDQ0ODUyLCA0NDg2NywgCisgICAgNDQ4ODIsIDQ0ODk3LCA0NDkxMiwgNDQ5MjcsIDQ0OTQyLCA0NDk1NywgNDQ5NzIsIDQ0OTg3LCA0NTAwMiwgNDUwMTcsIAorICAgIDQ1MDMyLCA0NTA0NywgNDUwNjIsIDQ1MDc3LCA0NTA5MiwgNDUxMDcsIDQ1MTIyLCA0NTEzNywgNDUxNTIsIDQ1MTY3LCAKKyAgICA0NTE4MiwgNDUxOTcsIDQ1MjEyLCA0NTIyNywgNDUyNDIsIDQ1MjU3LCA0NTI3MiwgNDUyODcsIDQ1MzAyLCA0NTMxNywgCisgICAgNDUzMzIsIDQ1MzQ3LCA0NTM2MiwgNDUzNzcsIDQ1MzkyLCA0NTQwNywgNDU0MjIsIDQ1NDM3LCA0NTQ1MiwgNDU0NjcsIAorICAgIDQ1NDgyLCA0NTQ5NywgNDU1MTIsIDQ1NTI3LCA0NTU0MiwgNDU1NTcsIDQ1NTcyLCA0NTU4NywgNDU2MDIsIDQ1NjE3LCAKKyAgICA0NTYzMiwgNDU2NDcsIDQ1NjYyLCA0NTY3NywgNDU2OTIsIDQ1NzA3LCA0NTcyMiwgNDU3MzcsIDQ1NzUyLCA0NTc2NywgCisgICAgNDU3ODIsIDQ1Nzk3LCA0NTgxMiwgNDU4MjcsIDQ1ODQyLCA0NTg1NywgNDU4NzIsIDQ1ODg3LCA0NTkwMiwgNDU5MTcsIAorICAgIDQ1OTMyLCA0NTk0NywgNDU5NjIsIDQ1OTc3LCA0NTk5MiwgNDYwMDcsIDQ2MDIyLCA0NjAzNywgNDYwNTIsIDQ2MDY3LCAKKyAgICA0NjA4MiwgNDYwOTcsIDQ2MTEyLCA0NjEyNywgNDYxNDIsIDQ2MTU3LCA0NjE3MiwgNDYxODcsIDQ2MjAyLCA0NjIxNywgCisgICAgNDYyMzIsIDQ2MjQ3LCA0NjI2MiwgNDYyNzcsIDQ2MjkyLCA0NjMwNywgNDYzMjIsIDQ2MzM3LCA0NjM1MiwgNDYzNjcsIAorICAgIDQ2MzgyLCA0NjM5NywgNDY0MTIsIDQ2NDI3LCA0NjQ0MiwgNDY0NTcsIDQ2NDcyLCA0NjQ4NywgNDY1MDIsIDQ2NTE3LCAKKyAgICA0NjUzMiwgNDY1NDcsIDQ2NTYyLCA0NjU3NywgNDY1OTIsIDQ2NjA3LCA0NjYyMiwgNDY2MzcsIDQ2NjUyLCA0NjY2NywgCisgICAgNDY2ODIsIDQ2Njk3LCA0NjcxMiwgNDY3MjcsIDQ2NzQyLCA0Njc1NywgNDY3NzIsIDQ2Nzg3LCA0NjgwMiwgNDY4MTcsIAorICAgIDQ2ODMyLCA0Njg0NywgNDY4NjIsIDQ2ODc3LCA0Njg5MiwgNDY5MDcsIDQ2OTIyLCA0NjkzNywgNDY5NTIsIDQ2OTY3LCAKKyAgICA0Njk4MiwgNDY5OTcsIDQ3MDEyLCA0NzAyNywgNDcwNDIsIDQ3MDU3LCA0NzA3MiwgNDcwODcsIDQ3MTAyLCA0NzExNywgCisgICAgNDcxMzIsIDQ3MTQ3LCA0NzE2MiwgNDcxNzcsIDQ3MTkyLCA0NzIwNywgNDcyMjIsIDQ3MjM3LCA0NzI1MiwgNDcyNjcsIAorICAgIDQ3MjgyLCA0NzI5NywgNDczMTIsIDQ3MzI3LCA0NzM0MiwgNDczNTcsIDQ3MzcyLCA0NzM4NywgNDc0MDIsIDQ3NDE3LCAKKyAgICA0NzQzMiwgNDc0NDcsIDQ3NDYyLCA0NzQ3NywgNDc0OTIsIDQ3NTA3LCA0NzUyMiwgNDc1MzcsIDQ3NTUyLCA0NzU2NywgCisgICAgNDc1ODIsIDQ3NTk3LCA0NzYxMiwgNDc2MjcsIDQ3NjQyLCA0NzY1NywgNDc2NzIsIDQ3Njg3LCA0NzcwMiwgNDc3MTcsIAorICAgIDQ3NzMyLCA0Nzc0NywgNDc3NjIsIDQ3Nzc3LCA0Nzc5MiwgNDc4MDcsIDQ3ODIyLCA0NzgzNywgNDc4NTIsIDQ3ODY3LCAKKyAgICA0Nzg4MiwgNDc4OTcsIDQ3OTEyLCA0NzkyNywgNDc5NDIsIDQ3OTU3LCA0Nzk3MiwgNDc5ODcsIDQ4MDAyLCA0ODAxNywgCisgICAgNDgwMzIsIDQ4MDQ3LCA0ODA2MiwgNDgwNzcsIDQ4MDkyLCA0ODEwNywgNDgxMjIsIDQ4MTM3LCA0ODE1MiwgNDgxNjcsIAorICAgIDQ4MTgyLCA0ODE5NywgNDgyMTIsIDQ4MjI3LCA0ODI0MiwgNDgyNTcsIDQ4MjcyLCA0ODI4NywgNDgzMDIsIDQ4MzE3LCAKKyAgICA0ODMzMiwgNDgzNDcsIDQ4MzYyLCA0ODM3NywgNDgzOTIsIDQ4NDA3LCA0ODQyMiwgNDg0MzcsIDQ4NDUyLCA0ODQ2NywgCisgICAgNDg0ODIsIDQ4NDk3LCA0ODUxMiwgNDg1MjcsIDQ4NTQyLCA0ODU1NywgNDg1NzIsIDQ4NTg3LCA0ODYwMiwgNDg2MTcsIAorICAgIDQ4NjMyLCA0ODY0NywgNDg2NjIsIDQ4Njc3LCA0ODY5MiwgNDg3MDcsIDQ4NzIyLCA0ODczNywgNDg3NTIsIDQ4NzY3LCAKKyAgICA0ODc4MiwgNDg3OTcsIDQ4ODEyLCA0ODgyNywgNDg4NDIsIDQ4ODU3LCA0ODg3MiwgNDg4ODcsIDQ4OTAyLCA0ODkxNywgCisgICAgNDg5MzIsIDQ4OTQ3LCA0ODk2MiwgNDg5NzcsIDQ4OTkyLCA0OTAwNywgNDkwMjIsIDQ5MDM3LCA0OTA1MiwgNDkwNjcsIAorICAgIDQ5MDgyLCA0OTA5NywgNDkxMTIsIDQ5MTI3LCA0OTE0MiwgNDkxNTcsIDQ5MTcyLCA0OTE4NywgNDkyMDIsIDQ5MjE3LCAKKyAgICA0OTIzMiwgNDkyNDcsIDQ5MjYyLCA0OTI3NywgNDkyOTIsIDQ5MzA3LCA0OTMyMiwgNDkzMzcsIDQ5MzUyLCA0OTM2NywgCisgICAgNDkzODIsIDQ5Mzk3LCA0OTQxMiwgNDk0MjcsIDQ5NDQyLCA0OTQ1NywgNDk0NzIsIDQ5NDg3LCA0OTUwMiwgNDk1MTcsIAorICAgIDQ5NTMyLCA0OTU0OCwgNDk1NjQsIDQ5NTgwLCA0OTU5NiwgNDk2MTIsIDQ5NjI4LCA0OTY0NCwgNDk2NjAsIDQ5Njc2LCAKKyAgICA0OTY5MiwgNDk3MDgsIDQ5NzI0LCA0OTc0MCwgNDk3NTYsIDQ5NzcyLCA0OTc4OCwgNDk4MDQsIDQ5ODIwLCA0OTgzNiwgCisgICAgNDk4NTIsIDQ5ODY4LCA0OTg4NCwgNDk5MDAsIDQ5OTE2LCA0OTkzMiwgNDk5NDgsIDQ5OTY0LCA0OTk4MCwgNDk5OTYsIAorICAgIDUwMDEyLCA1MDAyOCwgNTAwNDQsIDUwMDYwLCA1MDA3NiwgNTAwOTIsIDUwMTA4LCA1MDEyNCwgNTAxNDAsIDUwMTU2LCAKKyAgICA1MDE3MiwgNTAxODgsIDUwMjA0LCA1MDIyMCwgNTAyMzYsIDUwMjUyLCA1MDI2OCwgNTAyODQsIDUwMzAwLCA1MDMxNiwgCisgICAgNTAzMzIsIDUwMzQ4LCA1MDM2NCwgNTAzODAsIDUwMzk2LCA1MDQxMiwgNTA0MjgsIDUwNDQ0LCA1MDQ2MCwgNTA0NzYsIAorICAgIDUwNDkyLCA1MDUwOCwgNTA1MjQsIDUwNTQwLCA1MDU1NiwgNTA1NzIsIDUwNTg4LCA1MDYwNCwgNTA2MjAsIDUwNjM2LCAKKyAgICA1MDY1MiwgNTA2NjgsIDUwNjg0LCA1MDcwMCwgNTA3MTYsIDUwNzMyLCA1MDc0OCwgNTA3NjQsIDUwNzgwLCA1MDc5NiwgCisgICAgNTA4MTIsIDUwODI4LCA1MDg0NCwgNTA4NjAsIDUwODc2LCA1MDg5MiwgNTA5MDgsIDUwOTI0LCA1MDk0MCwgNTA5NTYsIAorICAgIDUwOTcyLCA1MDk4OCwgNTEwMDQsIDUxMDIwLCA1MTAzNiwgNTEwNTIsIDUxMDY4LCA1MTA4NCwgNTExMDAsIDUxMTE2LCAKKyAgICA1MTEzMiwgNTExNDgsIDUxMTY0LCA1MTE4MCwgNTExOTYsIDUxMjEyLCA1MTIyOCwgNTEyNDQsIDUxMjYwLCA1MTI3NiwgCisgICAgNTEyOTIsIDUxMzA4LCA1MTMyNCwgNTEzNDAsIDUxMzU2LCA1MTM3MiwgNTEzODgsIDUxNDA0LCA1MTQyMCwgNTE0MzYsIAorICAgIDUxNDUyLCA1MTQ2OCwgNTE0ODQsIDUxNTAwLCA1MTUxNiwgNTE1MzIsIDUxNTQ4LCA1MTU2NCwgNTE1ODAsIDUxNTk2LCAKKyAgICA1MTYxMiwgNTE2MjgsIDUxNjQ0LCA1MTY2MCwgNTE2NzYsIDUxNjkyLCA1MTcwOCwgNTE3MjQsIDUxNzQwLCA1MTc1NiwgCisgICAgNTE3NzIsIDUxNzg4LCA1MTgwNCwgNTE4MjAsIDUxODM2LCA1MTg1MiwgNTE4NjgsIDUxODg0LCA1MTkwMCwgNTE5MTYsIAorICAgIDUxOTMyLCA1MTk0OCwgNTE5NjQsIDUxOTgwLCA1MTk5NiwgNTIwMTIsIDUyMDI4LCA1MjA0NCwgNTIwNjAsIDUyMDc2LCAKKyAgICA1MjA5MiwgNTIxMDgsIDUyMTI0LCA1MjE0MCwgNTIxNTYsIDUyMTcyLCA1MjE4OCwgNTIyMDQsIDUyMjIwLCA1MjIzNiwgCisgICAgNTIyNTIsIDUyMjY4LCA1MjI4NCwgNTIzMDAsIDUyMzE2LCA1MjMzMiwgNTIzNDgsIDUyMzY0LCA1MjM4MCwgNTIzOTYsIAorICAgIDUyNDEyLCA1MjQyOCwgNTI0NDQsIDUyNDYwLCA1MjQ3NiwgNTI0OTIsIDUyNTA4LCA1MjUyNCwgNTI1NDAsIDUyNTU2LCAKKyAgICA1MjU3MiwgNTI1ODgsIDUyNjA0LCA1MjYyMCwgNTI2MzYsIDUyNjUyLCA1MjY2OCwgNTI2ODQsIDUyNzAwLCA1MjcxNiwgCisgICAgNTI3MzIsIDUyNzQ4LCA1Mjc2NCwgNTI3ODAsIDUyNzk2LCA1MjgxMiwgNTI4MjgsIDUyODQ0LCA1Mjg2MCwgNTI4NzYsIAorICAgIDUyODkyLCA1MjkwOCwgNTI5MjQsIDUyOTQwLCA1Mjk1NiwgNTI5NzIsIDUyOTg4LCA1MzAwNCwgNTMwMjAsIDUzMDM2LCAKKyAgICA1MzA1MiwgNTMwNjgsIDUzMDg0LCA1MzEwMCwgNTMxMTYsIDUzMTMyLCA1MzE0OCwgNTMxNjQsIDUzMTgwLCA1MzE5NiwgCisgICAgNTMyMTIsIDUzMjI4LCA1MzI0NCwgNTMyNjAsIDUzMjc2LCA1MzI5MiwgNTMzMDgsIDUzMzI0LCA1MzM0MCwgNTMzNTYsIAorICAgIDUzMzcyLCA1MzM4OCwgNTM0MDQsIDUzNDIwLCA1MzQzNiwgNTM0NTIsIDUzNDY4LCA1MzQ4NCwgNTM1MDAsIDUzNTE2LCAKKyAgICA1MzUzMiwgNTM1NDgsIDUzNTY0LCA1MzU4MCwgNTM1OTYsIDUzNjEyLCA1MzYyOCwgNTM2NDQsIDUzNjYwLCA1MzY3NiwgCisgICAgNTM2OTIsIDUzNzA4LCA1MzcyNCwgNTM3NDAsIDUzNzU2LCA1Mzc3MiwgNTM3ODgsIDUzODA0LCA1MzgyMCwgNTM4MzYsIAorICAgIDUzODUyLCA1Mzg2OCwgNTM4ODQsIDUzOTAwLCA1MzkxNiwgNTM5MzIsIDUzOTQ4LCA1Mzk2NCwgNTM5ODAsIDUzOTk2LCAKKyAgICA1NDAxMiwgNTQwMjgsIDU0MDQ0LCA1NDA2MCwgNTQwNzYsIDU0MDkyLCA1NDEwOCwgNTQxMjQsIDU0MTQwLCA1NDE1NiwgCisgICAgNTQxNzIsIDU0MTg4LCA1NDIwNCwgNTQyMjAsIDU0MjM2LCA1NDI1MiwgNTQyNjgsIDU0Mjg0LCA1NDMwMCwgNTQzMTYsIAorICAgIDU0MzMyLCA1NDM0OCwgNTQzNjQsIDU0MzgwLCA1NDM5NiwgNTQ0MTIsIDU0NDI4LCA1NDQ0NCwgNTQ0NjAsIDU0NDc2LCAKKyAgICA1NDQ5MiwgNTQ1MDgsIDU0NTI0LCA1NDU0MCwgNTQ1NTYsIDU0NTcyLCA1NDU4OCwgNTQ2MDQsIDU0NjIwLCA1NDYzNiwgCisgICAgNTQ2NTIsIDU0NjY4LCA1NDY4NCwgNTQ3MDAsIDU0NzE2LCA1NDczMiwgNTQ3NDgsIDU0NzY0LCA1NDc4MCwgNTQ3OTYsIAorICAgIDU0ODEyLCA1NDgyOCwgNTQ4NDQsIDU0ODYwLCA1NDg3NiwgNTQ4OTIsIDU0OTA4LCA1NDkyNCwgNTQ5NDAsIDU0OTU2LCAKKyAgICA1NDk3MiwgNTQ5ODgsIDU1MDA0LCA1NTAyMCwgNTUwMzYsIDU1MDUyLCA1NTA2OCwgNTUwODQsIDU1MTAwLCA1NTExNiwgCisgICAgNTUxMzIsIDU1MTQ4LCA1NTE2NCwgNTUxODAsIDU1MTk2LCA1NTIxMiwgNTUyMjgsIDU1MjQ0LCA1NTI2MCwgNTUyNzYsIAorICAgIDU1MjkyLCA1NTMwOCwgNTUzMjQsIDU1MzQwLCA1NTM1NiwgNTUzNzIsIDU1Mzg4LCA1NTQwNCwgNTU0MjAsIDU1NDM2LCAKKyAgICA1NTQ1MiwgNTU0NjgsIDU1NDg0LCA1NTUwMCwgNTU1MTYsIDU1NTMyLCA1NTU0OCwgNTU1NjQsIDU1NTgwLCA1NTU5NiwgCisgICAgNTU2MTIsIDU1NjI4LCA1NTY0NCwgNTU2NjAsIDU1Njc2LCA1NTY5MiwgNTU3MDgsIDU1NzI0LCA1NTc0MCwgNTU3NTYsIAorICAgIDU1NzcyLCA1NTc4OCwgNTU4MDQsIDU1ODIwLCA1NTgzNiwgNTU4NTIsIDU1ODY4LCA1NTg4NCwgNTU5MDAsIDU1OTE2LCAKKyAgICA1NTkzMiwgNTU5NDgsIDU1OTY0LCA1NTk4MCwgNTU5OTYsIDU2MDEyLCA1NjAyOCwgNTYwNDQsIDU2MDYwLCA1NjA3NiwgCisgICAgNTYwOTIsIDU2MTA4LCA1NjEyNCwgNTYxNDAsIDU2MTU2LCA1NjE3MiwgNTYxODgsIDU2MjA0LCA1NjIyMCwgNTYyMzYsIAorICAgIDU2MjUyLCA1NjI2OCwgNTYyODQsIDU2MzAwLCA1NjMxNiwgNTYzMzIsIDU2MzQ4LCA1NjM2NCwgNTYzODAsIDU2Mzk2LCAKKyAgICA1NjQxMiwgNTY0MjgsIDU2NDQ0LCA1NjQ2MCwgNTY0NzYsIDU2NDkyLCA1NjUwOCwgNTY1MjQsIDU2NTQwLCA1NjU1NiwgCisgICAgNTY1NzIsIDU2NTg4LCA1NjYwNCwgNTY2MjAsIDU2NjM2LCA1NjY1MiwgNTY2NjgsIDU2Njg0LCA1NjcwMCwgNTY3MTYsIAorICAgIDU2NzMyLCA1Njc0OCwgNTY3NjQsIDU2NzgwLCA1Njc5NiwgNTY4MTIsIDU2ODI4LCA1Njg0NCwgNTY4NjAsIDU2ODc2LCAKKyAgICA1Njg5MiwgNTY5MDgsIDU2OTI0LCA1Njk0MCwgNTY5NTYsIDU2OTcyLCA1Njk4OCwgNTcwMDQsIDU3MDIwLCA1NzAzNiwgCisgICAgNTcwNTIsIDU3MDY4LCA1NzA4NCwgNTcxMDAsIDU3MTE2LCA1NzEzMiwgNTcxNDgsIDU3MTY0LCA1NzE4MCwgNTcxOTYsIAorICAgIDU3MjEyLCA1NzIyOCwgNTcyNDQsIDU3MjYwLCA1NzI3NiwgNTcyOTIsIDU3MzA4LCA1NzMyNCwgNTczNDAsIDU3MzU2LCAKKyAgICA1NzM3MiwgNTczODgsIDU3NDA0LCA1NzQyMCwgNTc0MzYsIDU3NDUyLCA1NzQ2OCwgNTc0ODQsIDU3NTAwLCA1NzUxNiwgCisgICAgNTc1MzIsIDU3NTQ4LCA1NzU2NCwgNTc1ODAsIDU3NTk2LCA1NzYxMiwgNTc2MjgsIDU3NjQ0LCA1NzY2MCwgNTc2NzYsIAorICAgIDU3NjkyLCA1NzcwOCwgNTc3MjQsIDU3NzQwLCA1Nzc1NiwgNTc3NzIsIDU3Nzg4LCA1NzgwNCwgNTc4MjAsIDU3ODM2LCAKKyAgICA1Nzg1MiwgNTc4NjgsIDU3ODg0LCA1NzkwMCwgNTc5MTYsIDU3OTMyLCA1Nzk0OCwgNTc5NjQsIDU3OTgwLCA1Nzk5NiwgCisgICAgNTgwMTIsIDU4MDI4LCA1ODA0NCwgNTgwNjAsIDU4MDc2LCA1ODA5MiwgNTgxMDgsIDU4MTI0LCA1ODE0MCwgNTgxNTYsIAorICAgIDU4MTcyLCA1ODE4OCwgNTgyMDQsIDU4MjE5LCAxNjc2MiwgNTgyMjgsIDU4MjM0LCA1ODI0MCwgNTgyNTAsIDU4MjU4LCAKKyAgICAxNDg5NCwgMTU0NDUsIDk5NjAsIDU4MjcxLCAxNTIwLCA1ODI3OSwgMzc2MSwgMjc0MzIsIDcxODMsIDU4Mjg1LCA1ODI5MCwgCisgICAgNTgyOTUsIDU4MzAwLCA1ODMwNSwgNTgzMTEsIDU4MzE2LCA1ODMyMiwgNTgzMjcsIDU4MzMzLCA1ODMzOCwgNTgzNDMsIAorICAgIDU4MzQ4LCA1ODM1MywgNTgzNTksIDU4MzY0LCA1ODM2OSwgNTgzNzQsIDU4Mzc5LCA1ODM4NCwgNTgzODksIDU4Mzk0LCAKKyAgICA1ODQwMCwgNTg0MDUsIDU4NDExLCA1ODQxOCwgMjU2MSwgNTg0MjMsIDU4NDI5LCA4NTI2LCA1ODQzMywgNTg0MzgsIAorICAgIDU4NDQ1LCA1ODQ1MywgNDAsIDU4NDU3LCA1ODQ2MywgNTg0NjgsIDU4NDczLCA1ODQ3NywgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgCisgICAgMTA2ODQsIDU4NDk0LCA1ODUwNCwgNTg1MTcsIDU4NTI4LCA1ODU0MSwgNTg1NDgsIDU4NTU0LCA1ODU1OSwgNTg1NjUsIAorICAgIDU4NTcxLCA1ODU3NywgNTg1ODIsIDU4NTg3LCA1ODU5MiwgNTg1OTcsIDU4NjAxLCA1ODYwNiwgNTg2MTEsIDU4NjE2LCAKKyAgICA1ODYyMiwgNTg2MjgsIDU4NjM0LCA1ODYzOSwgNTg2NDMsIDU4NjQ4LCA1ODY1MywgNTg2NTcsIDU4NjYyLCA1ODY2NywgCisgICAgNTg2NzIsIDU4Njc2LCAxMDcwMCwgMTA3MTEsIDEwNzE2LCAxNTYzLCA1ODY4MCwgMTU2OCwgNTg2ODYsIDE2MjM5LCAKKyAgICA1ODY4OSwgNTg2OTUsIDE1OTksIDU4NzAxLCAxNjA1LCAxNjExLCAxMDc0NiwgNTg3MDYsIDU4NzE0LCA1ODcyMSwgNTg3MjUsIAorICAgIDU4NzMxLCA1ODczNiwgMzA5NzcsIDU4NzQxLCA1ODc0OCwgNTg3NTMsIDU4NzU3LCA1ODc2MSwgMTYxNiwgMTYzMzEsIAorICAgIDU4NzcwLCA1ODc3NCwgMTYzNDIsIDExMjUsIDU4Nzc4LCA1ODc4NSwgNTg3OTAsIDU4Nzk0LCAxNjM2NywgMTYyMCwgCisgICAgMzczNTAsIDU4Nzk3LCA1ODgwMiwgNTg4MTIsIDU4ODIxLCA1ODgyNiwgNTg4MzAsIDU4ODM2LCAxNjI1LCAzOTI1OSwgCisgICAgNTg4NDEsIDU4ODUwLCA1ODg1NiwgNTg4NjEsIDEwOTA0LCAxMDkxMCwgNTg4NjcsIDU4ODc5LCA1ODg5NiwgNTg5MTMsIAorICAgIDU4OTMwLCA1ODk0NywgNTg5NjQsIDU4OTgxLCA1ODk5OCwgNTkwMTUsIDU5MDMyLCA1OTA0OSwgNTkwNjYsIDU5MDgzLCAKKyAgICA1OTEwMCwgNTkxMTcsIDU5MTM0LCA1OTE1MSwgNTkxNjgsIDU5MTg1LCA1OTIwMiwgNTkyMTksIDU5MjM2LCA1OTI1MywgCisgICAgNTkyNzAsIDU5Mjg3LCA1OTMwNCwgNTkzMjEsIDU5MzM4LCA1OTM1NSwgNTkzNzIsIDU5Mzg5LCA1OTQwNiwgNTk0MjMsIAorICAgIDU5NDQwLCA1OTQ1NywgNTk0NzQsIDU5NDkxLCA1OTUwOCwgNTk1MjUsIDU5NTQyLCA1OTU1OSwgNTk1NzYsIDU5NTkzLCAKKyAgICA1OTYxMCwgNTk2MjcsIDU5NjQ0LCA1OTY2MSwgNTk2NzgsIDU5Njk1LCA1OTcxMiwgNTk3MjMsIDU5NzI4LCAxNjMwLCAKKyAgICA1OTczMiwgNTk3MzgsIDU5NzQzLCA1OTc0OCwgOTMyNiwgMTYzNSwgNTk3NTQsIDU5NzYzLCAyNzczMSwgNTk3NjgsIAorICAgIDU5Nzc5LCA1OTc4OSwgNTk3OTQsIDU5ODAxLCA1OTgwNywgNTk4MTIsIDU5ODE3LCAxNjYxOSwgNTk4MjEsIDEwOTIxLCAKKyAgICAxNjQwLCAxMDkyNiwgNTk4MjcsIDU5ODMyLCA1OTgzOCwgNTk4NDMsIDU5ODQ4LCA1OTg1MywgNTk4NTgsIDU5ODYzLCAKKyAgICA1OTg2OCwgNTk4NzMsIDU5ODc5LCA1OTg4NSwgNTk4OTEsIDU5ODk2LCA1OTkwMCwgNTk5MDUsIDU5OTEwLCA1OTkxNCwgCisgICAgNTk5MTksIDU5OTI0LCA1OTkyOSwgNTk5MzMsIDU5OTM4LCA1OTk0NCwgNTk5NDksIDU5OTU0LCA1OTk1OCwgNTk5NjMsIAorICAgIDU5OTY4LCA1OTk3NCwgNTk5NzksIDU5OTg0LCA1OTk5MCwgNTk5OTYsIDYwMDAxLCA2MDAwNSwgNjAwMTAsIDYwMDE1LCAKKyAgICA2MDAyMCwgNjAwMjQsIDYwMDI5LCA2MDAzNCwgNjAwMzksIDYwMDQ1LCA2MDA1MSwgNjAwNTYsIDYwMDYwLCA2MDA2NCwgCisgICAgNjAwNjksIDYwMDc0LCA2MDA3OSwgMjkxMjksIDYwMDgzLCA2MDA4OCwgNjAwOTMsIDYwMDk5LCA2MDEwNCwgNjAxMDksIAorICAgIDYwMTEzLCA2MDExOCwgNjAxMjMsIDYwMTI5LCA2MDEzNCwgNjAxMzksIDYwMTQ1LCA2MDE1MSwgNjAxNTYsIDYwMTYwLCAKKyAgICA2MDE2NSwgNjAxNzAsIDYwMTc0LCA2MDE3OSwgNjAxODQsIDYwMTg5LCA2MDE5NSwgNjAyMDEsIDYwMjA2LCA2MDIxMCwgCisgICAgNjAyMTUsIDYwMjIwLCA2MDIyNCwgNjAyMjksIDYwMjM0LCA2MDIzOSwgNjAyNDMsIDYwMjQ2LCAzMTYzOSwgNjAyNTEsIAorICAgIDYwMjU5LCAxNjY4NSwgMzY2MywgMTEwMTcsIDYwMjY1LCA2MDI3NSwgNjAyOTAsIDExMDIyLCA2MDMwMSwgNjAzMDYsIAorICAgIDYwMzE3LCA2MDMyOSwgNjAzNDEsIDYwMzUzLCAyNjk1LCA2MDM2NSwgNjAzNzAsIDYwMzgyLCA2MDM4NiwgNjAzOTIsIAorICAgIDYwMzk4LCA2MDQwMywgMTY1MiwgMTA3OCwgNjA0MTIsIDYwNDE3LCAzOTMwOSwgNjA0MjEsIDYwNDI1LCA2MDQzMCwgCisgICAgNjA0MzQsIDE2NzcwLCA2MDQzOSwgNjA0NDIsIDYwNDUwLCA2MDQ1OCwgMTY1NiwgMTEwNDcsIDExMDUzLCAxNjYxLCAKKyAgICA2MDQ2NiwgNjA0NzMsIDYwNDc4LCA2MDQ4NywgNjA0OTcsIDYwNTA0LCA2MDUwOSwgNjA1MTQsIDE2NjYsIDYwNTIxLCAKKyAgICA2MDUyNiwgMTY4ODUsIDYwNTMwLCA2MDUzNSwgNjA1NDIsIDYwNTQ4LCA2MDU1MiwgNjA1NjMsIDYwNTczLCAxNjkwNywgCisgICAgOTIzNCwgOTI0MSwgMTY3MSwgNjA1ODAsIDYwNTg2LCA2MDU5NCwgNjA2MDEsIDYwNjA3LCA2MDYxNCwgNjA2MjYsIDYwNjMyLCAKKyAgICA2MDYzNywgNjA2NDksIDYwNjYwLCA2MDY2OSwgNjA2NzksIDM3NDAsIDMwODEzLCAzMDgyMiwgMTY5NDcsIDE2NzYsIDE2ODAsIAorICAgIDYwNjg3LCA2MDY5OCwgNjA3MDMsIDE2ODMsIDYwNzExLCA2MDcxNiwgMTY5OTgsIDYwNzI4LCA2MDczNCwgNjA3MzksIAorICAgIDYwNzQ3LCAxNjg4LCA2MDc1MiwgNjA3NTcsIDYwNzY1LCA2MDc3MywgNjA3ODAsIDYwNzg5LCA2MDc5NywgNjA4MDYsIAorICAgIDE2OTMsIDYwODEwLCAxNjk4LCA2MDgxNSwgNjA4MjIsIDE3MDcyLCA2MDgzMCwgNjA4MzYsIDYwODQxLCA2MDg0OSwgCisgICAgNjA4NTYsIDYwODY0LCAyMjU3NCwgNjA4NjksIDExMTgyLCA2MDg3OCwgNjA4ODQsIDYwODkxLCA2MDg5OCwgNjA5MDQsIAorICAgIDYwOTE0LCA2MDkyMCwgNjA5MjUsIDYwOTM2LCA2MDk0MSwgNjA5NDksIDExMTkxLCAxMTE5NiwgNjA5NTcsIDYwOTYzLCAKKyAgICA2MDk3MSwgMzgwNSwgMTcxMTQsIDM5Mzk3LCA2MDk3NiwgNjA5ODIsIDYwOTg3LCA2MDk5NSwgNjEwMDIsIDEyMDM2LCAKKyAgICA2MTAwNywgNjEwMTMsIDE3MDksIDYxMDE4LCA2MTAyMSwgMTEzMiwgNjEwMjcsIDYxMDMyLCA2MTAzNywgNjEwNDMsIAorICAgIDYxMDQ4LCA2MTA1MywgNjEwNTgsIDYxMDYzLCA2MTA2OCwgNjEwNzMsIDE3MTgsIDksIDYxMDc5LCA2MTA4MywgNjEwODgsIAorICAgIDYxMDkyLCA2MTA5NiwgNjExMDAsIDMxODc5LCA2MTEwNSwgNjExMTAsIDYxMTE1LCA2MTExOSwgNjExMjIsIDYxMTI2LCAKKyAgICA2MTEzMCwgNjExMzUsIDYxMTM5LCA2MTE0NCwgNjExNDgsIDM0NjE2LCAzNDYyMSwgMzQ2MjYsIDYxMTUxLCA2MTE1OCwgCisgICAgNjExNjQsIDM5MTE4LCA2MTE3NCwgMzQ2MzIsIDMyMTM3LCAzMTg5NCwgMzE5MDAsIDM0NjQ4LCAzMTkwNiwgNjExNzksIAorICAgIDYxMTg0LCAzMjE3MCwgNjExODgsIDYxMTkxLCA2MTE5NSwgNjEyMDIsIDYxMjA1LCA2MTIxMCwgNjEyMTQsIDYxMjE4LCAKKyAgICA2MTIyMSwgNjEyMzEsIDYxMjQzLCA2MTI1MCwgNjEyNTYsIDYxMjYzLCAzMzU3MywgNjEyNjYsIDg1NDMsIDg3NywgNjEyNjksIAorICAgIDYxMjczLCA2MTI3OCwgMzY5MCwgNjEyODIsIDYxMjg1LCAxMzYzMiwgNjEyOTIsIDYxMjk5LCA2MTMxMiwgNjEzMjAsIAorICAgIDYxMzI5LCA2MTMzOCwgNjEzNDMsIDYxMzUzLCA2MTM2NiwgNjEzNzgsIDYxMzg1LCA2MTM5MCwgNjEzOTksIDYxNDEyLCAKKyAgICAzNjA2MCwgNjE0MzAsIDYxNDM1LCA2MTQ0MiwgNjE0NDgsIDY1NiwgNjE0NTMsIDYxNDYxLCA2MTQ2OCwgMjcyNzEsIDYyNywgCisgICAgNjE0NzQsIDYxNDgwLCA2MTQ5MCwgNjE0OTYsIDYxNTAxLCAzMTkyNCwgNjAwMywgMzE5MzgsIDYxNTA1LCA2MTUxNSwgCisgICAgNjE1MjAsIDYxNTMwLCA2MTU0NSwgNjE1NTEsIDYxNTU3LCAzMTk0OCwgNjE1NjIsIDMxMDk0LCA2MTU2NiwgNjE1NzEsIAorICAgIDYxNTc2LCA2MTU4MCwgNjE1ODUsIDE2OTUwLCA2MTU5MiwgNjE1OTcsIDYxNjAxLCA2MDQ0LCAzMTk3NCwgNjE2MDUsIAorICAgIDYxNjExLCAzMTIsIDYxNjIxLCA2MTYyOCwgNjE2MzUsIDYxNjQwLCA2MTY0OSwgNTg4MDYsIDYxNjU1LCA2MTY2MywgCisgICAgNjE2NjcsIDYxNjcxLCA2MTY3NSwgNjE2NzksIDYxNjg0LCA2MTY4OCwgNjE2OTQsIDYxNzAyLCA2MTcwNywgNjE3MTIsIAorICAgIDYxNzE2LCA2MTcyMSwgNjE3MjUsIDYxNzI5LCA2MTczNSwgNjE3NDEsIDYxNzQ2LCA2MTc1MCwgMzIwOTgsIDYxNzU1LCAKKyAgICAzMjEwNCwgMzIxMTAsIDYxNzYwLCA2MTc2NiwgNjE3NzMsIDYxNzc4LCA2MTc4MiwgMzExMTEsIDE2NjEyLCA2MTc4NSwgCisgICAgNjE3ODksIDYxNzk0LCA2MTgwMSwgNjE4MDcsIDYxODExLCA2MTgxNiwgMzg4MjgsIDYxODIyLCA2MTgyNiwgNjE4MzAsIAorICAgIDYxODM1LCA2MTg0MSwgNjE4NDcsIDYxODU5LCA2MTg2OCwgNjE4NzgsIDYxODg0LCA2MTg5MSwgNjE4OTYsIDYxOTAxLCAKKyAgICA2MTkwNSwgNjE5MDgsIDYxOTE0LCA2MTkyMSwgNjE5MjYsIDYxOTMxLCA2MTkzOCwgNjE5NDUsIDYxOTUxLCA2MTk1NiwgCisgICAgNjE5NjEsIDYxOTY5LCAzMjExNSwgMjQyMywgNjE5NzQsIDYxOTc5LCA2MTk4NSwgNjE5OTAsIDYxOTk2LCA2MjAwMSwgCisgICAgNjIwMDYsIDYyMDExLCA2MjAxNywgMzIxMzYsIDYyMDIyLCA2MjAyOCwgNjIwMzQsIDYyMDQwLCAzMjIwMCwgNjIwNDUsIAorICAgIDYyMDUwLCA2MjA1NSwgMzIyMTEsIDYyMDYwLCA2MjA2NSwgNjIwNzAsIDYyMDc2LCA2MjA4MiwgMzIyMTYsIDYyMDg3LCAKKyAgICA2MjA5MiwgNjIwOTcsIDMyMjcxLCAzMjI3NywgNjIxMDIsIDYyMTA3LCAzMjI4MiwgNjIxMTIsIDI3OTU4LCAzMjMwNCwgCisgICAgMzIzMDgsIDYyMTE3LCA2MjA5MywgNjIxMjEsIDYyMTI5LCA2MjEzNSwgNjIxNDMsIDYyMTUwLCA2MjE1NiwgNjIxNjYsIAorICAgIDYyMTcyLCA2MjE3OSwgMTA2MzEsIDMyMzIyLCA2MjE4NSwgNjIxOTgsIDYyMjA3LCA2MjIxMywgNjIyMjIsIDYyMjI4LCAKKyAgICAyMzUxMiwgNjIyMzUsIDYyMjQyLCA2MjI1MiwgMzIyNzIsIDYyMjU1LCA2MjI2MiwgNjIyNjcsIDYyMjcxLCA2MjI3NSwgCisgICAgNjIyODAsIDYxMjAsIDYyMjg0LCA2MjI4OSwgNjIyOTQsIDM0NzEwLCAzNDcxNSwgNjIyOTgsIDM0NzI5LCA2MjMwMywgCisgICAgMzQ3MzQsIDYyMzA4LCA2MjMxNCwgMzQ3NDYsIDM0NzUyLCAzNDc1OCwgNjIzMTksIDYyMzI1LCAyMjUzOSwgNjIzMzYsIAorICAgIDYyMzM5LCA2MjM1MSwgNjIzNTksIDMyMzQ1LCA2MjM2MywgNjIzNzIsIDYyMzgyLCA2MjM5MSwgMzIzNTUsIDYyMzk2LCAKKyAgICA2MjQwMywgNjI0MTIsIDYyNDE4LCA2MjQyNiwgNjI0MzMsIDYwOTUsIDQzOTcsIDYyNDM4LCAzMjI4MywgNjI0NDQsIAorICAgIDYyNDQ3LCA2MjQ1MywgNjI0NjAsIDYyNDY1LCA2MjQ3MCwgMjM0MjIsIDYyNDc0LCA2MjQ4MCwgNjI0ODYsIDYyNDkxLCAKKyAgICA2MjQ5NiwgNjI1MDAsIDYyNTA2LCA2MjUxMiwgMzM0ODMsIDg2MywgMzU3MjMsIDM2NjQ0LCAzNjY1MCwgMzIzOTEsIAorICAgIDYyNTE3LCA2MjUyMSwgNjI1MjUsIDYyNTI4LCA2MjU0MSwgNjI1NDcsIDYyNTUxLCA2MjU1NCwgNjI1NTksIDMzNzg2LCAKKyAgICA2MjU2MywgMzExMTYsIDIxMjg3LCA2MjU2OSwgNjAyNCwgNjAzMiwgOTA3NSwgNjI1NzIsIDYyNTc3LCA2MjU4MiwgNjI1ODcsIAorICAgIDYyNTkyLCA2MjU5NywgNjI2MDIsIDYyNjA3LCA2MjYxMiwgNjI2MTcsIDYyNjIzLCA2MjYyOCwgNjI2MzMsIDYyNjM5LCAKKyAgICA2MjY0NCwgNjI2NDksIDYyNjU0LCA2MjY1OSwgNjI2NjQsIDYyNjY5LCA2MjY3NSwgNjI2ODAsIDYyNjg2LCA2MjY5MSwgCisgICAgNjI2OTYsIDYyNzAxLCA2MjcwNiwgNjI3MTEsIDYyNzE2LCA2MjcyMSwgNjI3MjYsIDYyNzMxLCA2MjczNiwgNjI3NDIsIAorICAgIDYyNzQ3LCA2Mjc1MiwgNjI3NTcsIDYyNzYyLCA2Mjc2NywgNjI3NzIsIDYyNzc4LCA2Mjc4MywgNjI3ODgsIDYyNzkzLCAKKyAgICA2Mjc5OCwgNjI4MDMsIDYyODA4LCA2MjgxMywgNjI4MTgsIDYyODIzLCA2MjgyOSwgNjI4MzQsIDYyODM5LCA2Mjg0NCwgCisgICAgNjI4NDksIDYyODU1LCA2Mjg2MSwgNjI4NjYsIDYyODcyLCA2Mjg3NywgNjI4ODIsIDYyODg3LCA2Mjg5MiwgNjI4OTcsIAorICAgIDE1MTMsIDI0NSwgNjI5MDIsIDYyOTA2LCA2MjkxMCwgNjI5MTQsIDI1MTMzLCA2MjkxOCwgNjI5MjIsIDYyOTI3LCA2MjkzMSwgCisgICAgNjI5MzYsIDYyOTQwLCA2Mjk0NSwgNjI5NTAsIDYyOTU1LCA2Mjk1OSwgNjI5NjMsIDYyOTY4LCA2Mjk3MiwgMTMzNjksIAorICAgIDYyOTc3LCA2Mjk4MSwgNjI5ODgsIDYyOTk4LCAxNTIwNiwgNjMwMDcsIDYzMDE2LCA2MzAyMCwgNjMwMjUsIDYzMDMwLCAKKyAgICA2MzAzNCwgMjQ5MjQsIDMwMTksIDYzMDM4LCA2MzA0NCwgMTczNjMsIDYzMDQ4LCA2MzA1NywgNjMwNjUsIDYzMDcxLCAKKyAgICA2MzA4MywgNjMwOTUsIDYzMDk5LCA2MzEwNCwgNjMxMDgsIDYzMTE0LCA2MzEyMCwgNjMxMjUsIDYzMTM1LCA2MzE0NSwgCisgICAgNjMxNTEsIDYzMTU2LCA2MzE2MCwgNjMxNjUsIDYzMTcxLCA2MzE4MCwgNjMxODksIDYzMTk3LCAxNTU2MCwgNjMyMDEsIAorICAgIDYzMjEwLCA2MzIxOCwgNjMyMzAsIDYzMjQxLCA2MzI1MiwgNjMyNjEsIDYzMjY1LCA2MzI3NCwgNjMyODQsIDYzMjkyLCAKKyAgICA2MzI5OCwgNjMzMDMsIDYzMzA5LCA2MzMxNCwgOTgsIDMwOTI1LCA2MzMyNSwgMjYyNjYsIDI2Mjc2LCA2MzMzMSwgNjMzMzgsIAorICAgIDYzMzQ0LCA2MzM0OCwgNjMzNTgsIDYzMzY5LCA2MzM3NywgNjMzODYsIDYzMzkxLCA2MzM5NiwgNjM0MDAsIDE3MzE3LCAKKyAgICA2MzQwOCwgNjM0MTIsIDYzNDE4LCA2MzQyOCwgNjM0MzUsIDYzNDQxLCAzNDgwOSwgNjM0NDcsIDYzNDQ5LCA2MzQ1MiwgCisgICAgNjM0NTYsIDYzNDY2LCA2MzQ3MiwgNjM0NzksIDEzMzE1LCA2MzQ4NiwgNjM0OTIsIDYzNTAxLCA2MzUxMCwgNjM1MTYsIAorICAgIDYzNTIyLCA2MzUyOCwgNjM1MzMsIDYzNTQwLCA2MzU0NywgNjM1NTMsIDYzNTY2LCA2MzU3NSwgNjM1ODQsIDYzNTg5LCAKKyAgICA2MzU5MywgNjM1OTksIDYzNjA2LCA2MzYxMywgNjM2MjAsIDYzNjI3LCA2MzYzNCwgNjM2MzksIDYzNjQzLCA2MzY0NywgCisgICAgNjM2NTAsIDYzNjYwLCA2MzY2NCwgNjM2NzYsIDYzNjg1LCA2MzY4OSwgNjM2OTQsIDYzNjk4LCA2MzcwNCwgNjM3MDksIAorICAgIDYzNzE2LCA2MzcyNSwgNjM3MzMsIDYzNzQxLCA2Mzc0NiwgNjM3NTAsIDYzNzU1LCA2Mzc2MCwgNjM3NzAsIDYzNzc4LCAKKyAgICA2Mzc4MywgNjM3ODcsIDYzNzkxLCA2Mzc5NywgNjM4MDksIDYzODE3LCA2MzgyNywgNjM4MzQsIDYzODQwLCA2Mzg0NSwgCisgICAgNjM4NDksIDYzODUzLCA2Mzg1NywgNjM4NjYsIDYzODc1LCA2Mzg4NCwgNjM4OTAsIDYzODk2LCA2MzkwMiwgNjM5MDcsIAorICAgIDYzOTE0LCA2MzkyMCwgNjM5MjgsIDYzOTM1LCAxMjQ2MywgNjM5NDEsIDYzOTQ3LCA2Mzk1MSwgMTQyNDQsIDYzOTU1LCAKKyAgICA2Mzk2MCwgNjM5NzAsIDYzOTc5LCA2Mzk4NSwgNjM5OTEsIDYzOTk5LCA2NDAwNiwgNjQwMTAsIDY0MDE0LCA2NDAyMCwgCisgICAgNjQwMjgsIDY0MDM1LCA2NDA0MSwgNjQwNTIsIDY0MDU2LCA2NDA2MCwgNjQwNjQsIDY0MDY3LCA2NDA3MywgNjQwNzgsIAorICAgIDY0MDgyLCA2NDA4NiwgNjQwOTUsIDY0MTAzLCA2NDExMCwgNjQxMTYsIDY0MTIzLCAyNDA0NiwgMzg4NzAsIDY0MTI4LCAKKyAgICA2NDEzNiwgNjQxNDAsIDY0MTQ0LCA2NDE0NywgNjQxNTUsIDY0MTYyLCA2NDE2OCwgNjQxNzcsIDY0MTg1LCA2NDE5MSwgCisgICAgNjQxOTYsIDY0MjAwLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxOCwgNjQyMjcsIDY0MjMxLCA2NDIzOCwgNjQyNDUsIAorICAgIDY0MjUxLCA2NDI1OSwgNjQyNjUsIDY0Mjc2LCA2NDI4NCwgNjQyOTAsIDIyNjY5LCA2NDI5OSwgNjQzMDYsIDY0MzEzLCAKKyAgICA2NDMyMCwgNjQzMjcsIDY0MzM0LCA0MTkwNywgMTMxNTMsIDY0MzQxLCA2NDM0OCwgNjQzNTMsIDM0ODQ1LCA2MjE3LCAKKyAgICA2NDM1OSwgNjQzNjQsIDY0MzY5LCA2NDM3NSwgNjQzODEsIDY0Mzg3LCA2NDM5MiwgNjQzOTcsIDY0NDAyLCA2NDQwNywgCisgICAgNjQ0MTMsIDY0NDE4LCA2NDQyNCwgNjQ0MjksIDY0NDM1LCA2NDQ0MCwgNjQ0NDUsIDY0NDUwLCA2NDQ1NSwgNjQ0NjAsIAorICAgIDY0NDY1LCA2NDQ3MCwgNjQ0NzYsIDY0NDgxLCA2NDQ4NywgNjQ0OTIsIDY0NDk3LCA2NDUwMiwgNjQ1MDcsIDY0NTEyLCAKKyAgICA2NDUxNywgNjQ1MjMsIDY0NTI4LCA2NDUzMywgNjQ1MzgsIDY0NTQzLCA2NDU0OCwgNjQ1NTMsIDY0NTU4LCA2NDU2MywgCisgICAgNjQ1NjgsIDY0NTczLCA2NDU3OSwgNjQ1ODQsIDY0NTg5LCA2NDU5NCwgNjQ1OTksIDY0NjA0LCA2NDYwOSwgNjQ2MTQsIAorICAgIDY0NjE5LCA2NDYyNSwgNjQ2MzAsIDY0NjM1LCA2NDY0MCwgNjQ2NDUsIDY0NjUwLCA2NDY1NSwgNjQ2NjAsIDY0NjY1LCAKKyAgICA2NDY3MCwgNjQ2NzUsIDY0NjgwLCA2NDY4NSwgNjQ2OTEsIDE4MzQsIDIyNCwgMzc0NDYsIDY0Njk2LCA2NDY5OSwgNjQ3MDQsIAorICAgIDY0NzA4LCA2NDcxMSwgNjQ3MTYsIDYzNzM3LCA2NDcyNywgNjQ3MzcsIDY0NzQ0LCA2NDc2MCwgNjQ3NjksIDY0Nzc5LCAKKyAgICA2NDc4OSwgNjQ3OTcsIDY0ODExLCA2NDgxOSwgNjQ4MjMsIDY0ODI2LCA2NDgzMywgNjQ4MzksIDY0ODUwLCA2NDg2MiwgCisgICAgNjQ4NzMsIDY0ODgyLCA2NDg4OSwgMTI5NywgMjMzMTEsIDY0ODk5LCAyNTkwLCA2NDkwMywgNjQ5MTIsIDExMzgsIDE3MjkwLCAKKyAgICAzODA4MywgNjQ5MjAsIDY0OTI4LCA2NDk0MiwgNjQ5NTUsIDY0OTU5LCA2NDk2NCwgNjQ5NjksIDY0OTc0LCA2NDk4MCwgCisgICAgNjQ5ODYsIDY0OTkxLCA4NTM1LCA2NDk5NiwgNjUwMDAsIDY1MDA4LCAxMTA0OCwgNjUwMTMsIDY1MDE5LCA2NTAyOCwgCisgICAgMTcyMSwgMTEwNjAsIDczNiwgNjUwMzIsIDY1MDQxLCA2NTA1MSwgMjcwMzAsIDY1MDYwLCA2NTA2NiwgMTY4NjIsIDY1MDcyLCAKKyAgICA2NTA3NiwgMzk2NCwgMTEzOTEsIDY1MDgyLCA2NTA4OSwgNjA2OTMsIDY1MDkzLCA2NTA5NywgMzk4OCwgMTg5LCAxNDE1OSwgCisgICAgNjUxMDMsIDY1MTE1LCA2NTExOSwgNjUxMjUsIDI3NzUxLCA2NTEyOSwgMTEzNzksIDI3MzAsIDQsIDY1MTM0LCA2NTE0NCwgCisgICAgNjUxNTAsIDY1MTYxLCA2NTE2OCwgNjUxNzQsIDY1MTgwLCA2NTE4OCwgNjUxOTUsIDY1MjAxLCA2NTIxMSwgNjUyMjEsIAorICAgIDY1MjMxLCAyMzQ5OSwgMTMwOSwgNjUyNDAsIDY1MjQ0LCA2NTI0OCwgNjUyNTQsIDY1MjU4LCAyNzUzLCAyNzU5LCA4NTMyLCAKKyAgICAyMjY0LCA2NTI2MiwgNjUyNjYsIDY1Mjc1LCA2NTI4MywgNjUyOTQsIDY1MzAyLCA2NTMxMCwgNjUzMTYsIDY1MzIxLCAKKyAgICA2NTMzMiwgNjUzNDMsIDY1MzUxLCA2NTM1NywgOTY5NCwgNjUzNjIsIDY1MzcwLCA2NTM3NCwgNjUzNzgsIDY1MzgyLCAKKyAgICA2NTM5NCwgMjgxMzYsIDY1NDAxLCA2NTQxMSwgNjU0MTcsIDY1NDIzLCA5Nzk2LCA2NTQzMywgNjU0NDQsIDY1NDU0LCAKKyAgICA2NTQ2MywgNjU0NjcsIDY1NDc0LCAxMTQwLCAxMTcwLCA2NTQ4NCwgNjU0ODksIDY1NDk3LCA2NTUwNSwgNjU1MTYsIAorICAgIDY1NTIzLCA2NTUzNywgMTQwODgsIDM5MywgNjU1NDcsIDY1NTUxLCA2NTU1OSwgNjU1NjgsIDY1NTc2LCA2NTU4MiwgCisgICAgNjU1OTYsIDY1NjAzLCA2NTYwOSwgNjU2MTgsIDY1NjI1LCA2NTYzNSwgNjU2NDMsIDM4MTIsIDE1NiwgNjU2NTEsIDY1NjYyLCAKKyAgICA2NTY2NiwgNjU2NzgsIDI3OTQ5LCAxNjEsIDY1Njg0LCA2NTY4OSwgNjU2OTMsIDY1NzAwLCA2NTcwNiwgNjU3MTQsIAorICAgIDY1NzIxLCA4ODE4LCA2NTcyOCwgNjU3MzcsIDY1NzQ1LCAzODc4LCA2NTc1OCwgODE5OSwgNjU3NjIsIDI3OTgsIDQ0MywgCisgICAgNjU3NjcsIDY1NzgwLCA2NTc4NSwgMTgzMywgNjUwLCA2NTc4OSwgMzg5NSwgNjU3OTcsIDY1ODAzLCA2NTgwNywgOTMxLCAKKyAgICA2NTgxNywgNjU4MjYsIDY1ODMxLCAxNDkyOCwgMTQ5MzUsIDQ1MjY5LCA2NTgzNSwgMzgyMiwgMTMwNDEsIDY1ODQzLCAKKyAgICA2NTg1MCwgMjM1NTUsIDY1ODU0LCA2NTg2MSwgNjU4NjcsIDY1ODcyLCA2NTg3NywgMTQ5NDgsIDM3MiwgNjU4ODIsIAorICAgIDY1ODk0LCA2NTkwMCwgNjU5MDgsIDI4MTAsIDE3NTMsIDY1OTE2LCA2NTkxOCwgNjU5MjMsIDY1OTI4LCA2NTkzMywgCisgICAgNjU5MzksIDY1OTQ0LCA2NTk0OSwgNjU5NTQsIDY1OTU5LCA2NTk2NCwgNjU5NjksIDY1OTc1LCA2NTk4MCwgNjU5ODUsIAorICAgIDY1OTkwLCA2NTk5NSwgNjYwMDAsIDY2MDA1LCA2NjAxMCwgNjYwMTUsIDY2MDIxLCA2NjAyNiwgNjYwMzEsIDY2MDM2LCAKKyAgICA2NjA0MiwgNjYwNDcsIDY2MDUzLCA2NjA1OCwgNjYwNjMsIDY2MDY4LCA2NjA3MywgNjYwNzgsIDY2MDgzLCA2NjA4OCwgCisgICAgNjYwOTQsIDY2MDk5LCA2NjEwNSwgNjYxMTAsIDY2MTE1LCA2NjEyMCwgNjYxMjUsIDY2MTMwLCA2NjEzNSwgNjYxNDAsIAorICAgIDY2MTQ1LCA2NjE1MSwgNjYxNTYsIDY2MTYxLCA2NjE2NiwgNjYxNzAsIDY2MTc0LCA2NjE3OSwgNjYxODMsIDY2MTg4LCAKKyAgICA2NjE5MywgNjYxOTksIDY2MjA0LCA2NjIwOCwgNjYyMTMsIDY2MjE3LCA2NjIyMCwgNjYyMjIsIDY2MjI2LCA2NjIyOSwgCisgICAgNjYyMzQsIDY2MjM4LCA2NjI0MiwgNjYyNDYsIDY2MjUwLCA2NjI1OSwgNjYyNjMsIDMyNTQ5LCA2NjI2NiwgMzI1NTQsIAorICAgIDY2MjczLCA2NjI3OCwgMzI1NTksIDY2Mjg3LCA2NjI5NiwgMzI1NjUsIDY2MzAxLCAzMjU3MCwgNjYzMTAsIDY2MzE1LCAKKyAgICAxMTU3OCwgNjYzMTksIDY2MzI0LCA2NjMyOSwgMzI1NzUsIDY2MzMzLCA0MDIyNSwgNjYzMzcsIDY2MzQwLCA2NjM0NCwgCisgICAgODIxMSwgNjYzNTAsIDY2MzU1LCA2NjM1OSwgMzcwNSwgMzI1ODAsIDY2MzYyLCA2NjM2NiwgNjYzNjksIDY2Mzc0LCAKKyAgICA2NjM3OCwgNjYzODQsIDY2MzkyLCA2NjQwNSwgNjY0MTQsIDY2NDIwLCA2NjQyNSwgNjY0MzEsIDY2NDM1LCA2NjQ0MSwgCisgICAgNjY0NDksIDY2NDU0LCA2NjQ1OCwgNjY0NjUsIDY2NDcxLCA2NjQ3OSwgNjY0ODgsIDY2NDk2LCAzMjU4MywgNjY1MDMsIAorICAgIDY2NTEzLCA2NjUyMiwgNjY1MzUsIDY2NTQwLCA2NjU0NSwgNjY1NTQsIDY2NTYwLCA2NjU2NywgNjY1NzgsIDY2NTkwLCAKKyAgICA2NjU5NywgNjY2MDYsIDY2NjE1LCA2NjYyNCwgNjY2MzEsIDY2NjM3LCA2NjY0NCwgNjY2NTIsIDY2NjU5LCA2NjY2NywgCisgICAgNjY2NzYsIDY2Njg0LCA2NjY5MSwgNjY2OTksIDY2NzA4LCA2NjcxNiwgNjY3MjUsIDY2NzM1LCA2Njc0NCwgNjY3NTIsIAorICAgIDY2NzU5LCA2Njc2NywgNjY3NzYsIDY2Nzg0LCA2Njc5MywgNjY4MDMsIDY2ODEyLCA2NjgyMCwgNjY4MjksIDY2ODM5LCAKKyAgICA2Njg0OCwgNjY4NTgsIDY2ODY5LCA2Njg3OSwgNjY4ODgsIDY2ODk2LCA2NjkwMywgNjY5MTEsIDY2OTIwLCA2NjkyOCwgCisgICAgNjY5MzcsIDY2OTQ3LCA2Njk1NiwgNjY5NjQsIDY2OTczLCA2Njk4MywgNjY5OTIsIDY3MDAyLCA2NzAxMywgNjcwMjMsIAorICAgIDY3MDMyLCA2NzA0MCwgNjcwNDksIDY3MDU5LCA2NzA2OCwgNjcwNzgsIDY3MDg5LCA2NzA5OSwgNjcxMDgsIDY3MTE4LCAKKyAgICA2NzEyOSwgNjcxMzksIDY3MTUwLCA2NzE2MiwgNjcxNzMsIDY3MTgzLCA2NzE5MiwgNjcyMDAsIDY3MjA3LCA2NzIxNSwgCisgICAgNjcyMjQsIDY3MjMyLCA2NzI0MSwgNjcyNTEsIDY3MjYwLCA2NzI2OCwgNjcyNzcsIDY3Mjg3LCA2NzI5NiwgNjczMDYsIAorICAgIDY3MzE3LCA2NzMyNywgNjczMzYsIDY3MzQ0LCA2NzM1MywgNjczNjMsIDY3MzcyLCA2NzM4MiwgNjczOTMsIDY3NDAzLCAKKyAgICA2NzQxMiwgNjc0MjIsIDY3NDMzLCA2NzQ0MywgNjc0NTQsIDY3NDY2LCA2NzQ3NywgNjc0ODcsIDY3NDk2LCA2NzUwNCwgCisgICAgNjc1MTMsIDY3NTIzLCA2NzUzMiwgNjc1NDIsIDY3NTUzLCA2NzU2MywgNjc1NzIsIDY3NTgyLCA2NzU5MywgNjc2MDMsIAorICAgIDY3NjE0LCA2NzYyNiwgNjc2MzcsIDY3NjQ3LCA2NzY1NiwgNjc2NjYsIDY3Njc3LCA2NzY4NywgNjc2OTgsIDY3NzEwLCAKKyAgICA2NzcyMSwgNjc3MzEsIDY3NzQyLCA2Nzc1NCwgNjc3NjUsIDY3Nzc3LCA2Nzc5MCwgNjc4MDIsIDY3ODEzLCA2NzgyMywgCisgICAgNjc4MzIsIDY3ODQwLCA2Nzg0NywgNjc4NTUsIDY3ODY0LCA2Nzg3MiwgNjc4ODEsIDY3ODkxLCA2NzkwMCwgNjc5MDgsIAorICAgIDY3OTE3LCA2NzkyNywgNjc5MzYsIDY3OTQ2LCA2Nzk1NywgNjc5NjcsIDY3OTc2LCA2Nzk4NCwgNjc5OTMsIDY4MDAzLCAKKyAgICA2ODAxMiwgNjgwMjIsIDY4MDMzLCA2ODA0MywgNjgwNTIsIDY4MDYyLCA2ODA3MywgNjgwODMsIDY4MDk0LCA2ODEwNiwgCisgICAgNjgxMTcsIDY4MTI3LCA2ODEzNiwgNjgxNDQsIDY4MTUzLCA2ODE2MywgNjgxNzIsIDY4MTgyLCA2ODE5MywgNjgyMDMsIAorICAgIDY4MjEyLCA2ODIyMiwgNjgyMzMsIDY4MjQzLCA2ODI1NCwgNjgyNjYsIDY4Mjc3LCA2ODI4NywgNjgyOTYsIDY4MzA2LCAKKyAgICA2ODMxNywgNjgzMjcsIDY4MzM4LCA2ODM1MCwgNjgzNjEsIDY4MzcxLCA2ODM4MiwgNjgzOTQsIDY4NDA1LCA2ODQxNywgCisgICAgNjg0MzAsIDY4NDQyLCA2ODQ1MywgNjg0NjMsIDY4NDcyLCA2ODQ4MCwgNjg0ODksIDY4NDk5LCA2ODUwOCwgNjg1MTgsIAorICAgIDY4NTI5LCA2ODUzOSwgNjg1NDgsIDY4NTU4LCA2ODU2OSwgNjg1NzksIDY4NTkwLCA2ODYwMiwgNjg2MTMsIDY4NjIzLCAKKyAgICA2ODYzMiwgNjg2NDIsIDY4NjUzLCA2ODY2MywgNjg2NzQsIDY4Njg2LCA2ODY5NywgNjg3MDcsIDY4NzE4LCA2ODczMCwgCisgICAgNjg3NDEsIDY4NzUzLCA2ODc2NiwgNjg3NzgsIDY4Nzg5LCA2ODc5OSwgNjg4MDgsIDY4ODE4LCA2ODgyOSwgNjg4MzksIAorICAgIDY4ODUwLCA2ODg2MiwgNjg4NzMsIDY4ODgzLCA2ODg5NCwgNjg5MDYsIDY4OTE3LCA2ODkyOSwgNjg5NDIsIDY4OTU0LCAKKyAgICA2ODk2NSwgNjg5NzUsIDY4OTg2LCA2ODk5OCwgNjkwMDksIDY5MDIxLCA2OTAzNCwgNjkwNDYsIDY5MDU3LCA2OTA2OSwgCisgICAgNjkwODIsIDY5MDk0LCA2OTEwNywgNjkxMjEsIDY5MTM0LCA2OTE0NiwgNjkxNTcsIDY5MTY3LCA2OTE3NiwgNjkxODQsIAorICAgIDY5MTkxLCA2OTE5NiwgODA1OCwgNjkyMDMsIDMyNTkzLCA2OTIwOCwgNjkyMTMsIDMyNTk4LCA2OTIxOSwgMjA5MjksIAorICAgIDMyNjAzLCA2OTIyNCwgNjkyMzAsIDY5MjM4LCA2OTI0NCwgNjkyNTAsIDY5MjU3LCA2OTI2NCwgNjkyNjksIDY5MjczLCAKKyAgICA2OTI3NiwgNjkyODAsIDY5Mjg5LCA2OTI5NSwgNjkzMDcsIDY5MzE4LCA2OTMyMiwgMzA4MSwgODAzMywgNjkzMjcsIAorICAgIDY5MzMwLCA2OTMzMiwgNjkzMzYsIDY5MzQwLCA2OTM0NCwgNjkzNTAsIDY5MzU1LCAyNTk0NCwgNjkzNjAsIDY5MzY0LCAKKyAgICA2OTM2NywgNjkzNzIsIDY5Mzc2LCA2OTM4MywgNjkzODksIDY5MzkzLCA2MTcwLCA2OTM5NywgMzI2MjAsIDY5NDAyLCAKKyAgICA2OTQwOSwgNjk0MTgsIDY5NDI2LCA2OTQzNywgNjk0NDUsIDY5NDUzLCA2OTQ2MCwgNjk0NjcsIDY5NDczLCA2OTQ4NCwgCisgICAgMzI2MjUsIDY5NDg5LCA2OTUwMCwgNjk1MTIsIDY5NTIwLCA2OTUzMSwgNjk1NDAsIDY5NTUxLCA2OTU1NiwgNjk1NjQsIAorICAgIDI1NTYsIDY5NTY5LCAzNDI5NSwgNjk1ODIsIDY5NTg2LCA2OTU5OCwgNjk2MDYsIDY5NjExLCA2OTYxOSwgMTc0ODUsIAorICAgIDY5NjMwLCA2OTYzNiwgNjk2NDMsIDY5NjUxLCA2OTY1NywgMzI2MzUsIDY5NjYyLCAzOTE0LCA1ODI1NCwgNjk2NjksIAorICAgIDY5NjcyLCA2OTY4MCwgNjk2OTMsIDY5NzA2LCA2OTcxOSwgNjk3MzIsIDY5NzM5LCA2OTc1MCwgNjk3NTksIDQxNzI0LCAKKyAgICA0MTcyOSwgNjk3NjQsIDY5NzY4LCA2OTc3NiwgNjk3ODMsIDY5NzkyLCA2OTgwMCwgNjk4MDYsIDY5ODE1LCA2OTgyMywgCisgICAgNjk4MzEsIDY5ODM1LCA2OTg0NCwgNjk4NTMsIDY5ODYzLCA2OTg3NiwgNjk4ODksIDY5ODk5LCAzMjY0MCwgNjk5MDUsIAorICAgIDY5OTEyLCA2OTkxOCwgMzI2NDYsIDY5OTIzLCA2OTkyNiwgNjk5MzAsIDY5OTM4LCA2OTk0NywgNDE0NjIsIDY5OTU1LCAKKyAgICA2OTk2NCwgNjk5NzIsIDY5OTc5LCA2OTk4NywgNjk5OTcsIDcwMDA2LCA3MDAxNSwgNzAwMjQsIDcwMDMyLCA3MDA0MywgCisgICAgNzAwNTMsIDkzNjYsIDIxNTY3LCA3MDA2MiwgNzAwNjcsIDcwMDcyLCA3MDA3NiwgNzAwODAsIDcwMDg1LCA3MDA5MSwgCisgICAgNzAwOTYsIDcwMTAxLCA3MDEwNywgNzAxMTIsIDcwMTE3LCAyMTUzMiwgNzAxMjIsIDcwMTI5LCA3MDEzNywgNzAxNDUsIAorICAgIDcwMTUwLCA3MDE1NywgNzAxNjQsIDcwMTY5LCA3MDE3MywgNzAxNzcsIDcwMTg1LCA3MDE5MywgMzI2NjMsIDcwMTk5LCAKKyAgICA3MDIwNSwgNzAyMTcsIDcwMjIzLCA3MDIyNywgNzAyMzQsIDcwMjM5LCA3MDI1MCwgNzAyNjAsIDcwMjcwLCA3MDI4MiwgCisgICAgNzAyODgsIDcwMjk4LCA3MDMwOCwgMzI2OTAsIDcwMzE3LCA3MDMyNiwgNzAzMzIsIDcwMzQ0LCA3MDM1NSwgNzAzNjIsIAorICAgIDcwMzY3LCA3MDM3MSwgNzAzNzksIDcwMzg1LCA3MDM5MCwgNzAzOTUsIDcwNDAyLCA3MDQxMCwgNzA0MjIsIDcwNDMyLCAKKyAgICA3MDQ0MSwgNzA0NTAsIDcwNDU3LCAzNDE1NywgMjM4NTEsIDcwNDYzLCA3MDQ2OCwgNzA0NzIsIDcwNDc2LCA3MDQ4MSwgCisgICAgNzA0ODcsIDcwNDk4LCA3MDUxMSwgNzA1MTYsIDcwNTIzLCAzMjY5NSwgNzA1MjgsIDcwNTQwLCA3MDU0OSwgNzA1NTksIAorICAgIDcwNTcwLCA3MDU4MywgNzA1OTAsIDcwNTk5LCA3MDYwOCwgNzA2MTYsIDcwNjIxLCA3MDYyNywgMTA2OSwgNzA2MzIsIAorICAgIDcwNjM3LCA3MDY0MiwgNzA2NDcsIDcwNjUzLCA3MDY1OCwgNzA2NjMsIDcwNjY5LCA3MDY3NSwgNzA2ODAsIDcwNjg0LCAKKyAgICA3MDY4OSwgNzA2OTQsIDcwNjk5LCA1ODc2NiwgNzA3MDQsIDcwNzA5LCA3MDcxNCwgNzA3MTksIDcwNzI1LCA3MDczMSwgCisgICAgNzA3MzYsIDcwNzQwLCA3MDc0NSwgNzA3NTAsIDcwNzU1LCA3MDc2MSwgNzA3NjYsIDcwNzcyLCA3MDc3NywgNzA3ODIsIAorICAgIDcwNzg3LCA3MDc5MiwgNzA3OTYsIDcwODAyLCA3MDgwNywgNzA4MTYsIDcwODIxLCA3MDgyNiwgNzA4MzEsIDcwODM2LCAKKyAgICA3MDg0MCwgNzA4NDcsIDcwODUzLCAxNzEzNSwgMTcxNDIsIDcwODU4LCA3MDg2MiwgNzA4NjYsIDcwODcwLCA3MDg3NCwgCisgICAgNDU1MjQsIDcwODc4LCA3MDgwOCwgNzA4ODAsIDcwODkwLCAzMjcwNCwgNzA4OTMsIDcwOTAyLCA3MDkwOCwgNjE0MywgCisgICAgMzI3MDksIDcwOTEyLCA3MDkxOCwgNzA5MjMsIDcwOTI5LCA3MDkzNCwgNzA5MzgsIDcwOTQ1LCA3MDk1MCwgNzA5NjAsIAorICAgIDcwOTY5LCA3MDk3MywgNzA5NzksIDcwOTg1LCA3MDk5MSwgNzA5OTUsIDcxMDAzLCA3MTAxMCwgNzEwMTgsIDcxMDI2LCAKKyAgICAzMjcxNCwgNzEwMzMsIDcxMDM2LCA3MTA0MywgNzEwNDksIDcxMDU0LCA3MTA1OCwgNzEwNjQsIDcxMDcxLCA3MTA3NiwgCisgICAgNzEwODAsIDcxMDg5LCA3MTA5NywgNzExMDMsIDcxMTA4LCAzMjcxOSwgNzExMTUsIDcxMTIyLCA3MTEyOCwgNzExMzMsIAorICAgIDcxMTM5LCA3MTE0NiwgNzExNTIsIDIxMjk0LCAyNzQ1NSwgNzExNTgsIDcxMTYzLCA3MTE2OSwgNzExODEsIDcwODQxLCAKKyAgICA3MDg0OCwgMjE0NzAsIDcxMTkxLCA3MTE5NiwgNzEyMDMsIDcxMjA5LCA3MTIxNiwgNzEyMjIsIDcxMjMzLCA3MTIzOCwgCisgICAgOTExMCwgNzEyNDYsIDcxMjQ5LCA3MTI1NSwgNzEyNTksIDcxMjYzLCA3MTI2NiwgNzEyNzIsIDMyNDY4LCA2MTk0LCA5NjQsIAorICAgIDEzNDE5LCA3MTI3OSwgNzEyODUsIDcxMjkxLCA3MTI5NywgNzEzMDMsIDcxMzA5LCA3MTMxNSwgNzEzMjEsIDcxMzI3LCAKKyAgICA3MTMzMiwgNzEzMzcsIDcxMzQyLCA3MTM0NywgNzEzNTIsIDcxMzU3LCA3MTM2MiwgNzEzNjcsIDcxMzcyLCA3MTM3NywgCisgICAgNzEzODIsIDcxMzg3LCA3MTM5MiwgNzEzOTgsIDcxNDAzLCA3MTQwOCwgNzE0MTQsIDcxNDE5LCA3MTQyNCwgNzE0MzAsIAorICAgIDcxNDM2LCA3MTQ0MiwgNzE0NDgsIDcxNDU0LCA3MTQ2MCwgNzE0NjYsIDcxNDcyLCA3MTQ3OCwgNzE0ODMsIDcxNDg4LCAKKyAgICA3MTQ5NCwgNzE0OTksIDcxNTA0LCA3MTUxMCwgNzE1MTUsIDcxNTIwLCA3MTUyNSwgNzE1MzAsIDcxNTM1LCA3MTU0MCwgCisgICAgNzE1NDUsIDcxNTUwLCA3MTU1NSwgNzE1NjAsIDcxNTY1LCA3MTU3MCwgNzE1NzYsIDcxNTgxLCA3MTU4NiwgNzE1OTEsIAorICAgIDcxNTk3LCA3MTYwMiwgNzE2MDcsIDcxNjEyLCA3MTYxNywgNzE2MjMsIDcxNjI4LCA3MTYzMywgNzE2MzgsIDcxNjQzLCAKKyAgICA3MTY0OCwgNzE2NTMsIDcxNjU4LCA3MTY2MywgNzE2NjgsIDcxNjczLCA3MTY3OCwgNzE2ODMsIDcxNjg4LCA3MTY5MywgCisgICAgNzE2OTgsIDcxNzAzLCA3MTcwOCwgNzE3MTMsIDcxNzE4LCA3MTcyNCwgNzE3MjksIDcxNzM0LCA3MTczOSwgNzE3NDQsIAorICAgIDcxNzQ5LCA3MTc1NCwgNzE3NTksIDE4NjQsIDE0MiwgNzE3NjQsIDcxNzY4LCA3MTc3MiwgNzE3NzcsIDcxNzg1LCA3MTc4OSwgCisgICAgNzE3OTYsIDcxODA0LCA3MTgwOCwgNzE4MjEsIDcxODI5LCA3MTgzMywgNzE4MzYsIDcxODQxLCA3MTg0NSwgNzE4NTAsIAorICAgIDcxODU0LCA3MTg2MiwgNzE4NjYsIDIwOTM3LCA3MTg3MSwgNzE4NzUsIDYwOTY3LCA3MTg3OSwgNzE4ODIsIDcxODkwLCAKKyAgICA3MTg5OCwgNzE5MDYsIDcxOTExLCA3MTkxOCwgNzE5MjQsIDcxOTMwLCA3MTkzNSwgNzE5NDIsIDcxOTQ3LCA3MTk1NSwgCisgICAgNjQ5NDcsIDcxOTYyLCA3MTk2NywgNzE5NzIsIDcxOTc2LCAxMTY0NSwgNzE5ODAsIDcxOTg1LCA3MTk5MCwgNzE5OTQsIAorICAgIDcxOTk3LCA3MjAwMywgNzIwMDcsIDcyMDE3LCA3MjAyNiwgNzIwMjksIDcyMDMzLCA3MjA0MCwgNzIwNTMsIDcyMDU5LCAKKyAgICA3MjA2NywgNzIwNzgsIDcyMDg5LCA3MjEwMCwgNzIxMTEsIDcyMTIwLCA3MjEyNiwgNzIxMzUsIDcyMTQzLCA3MjE1MywgCisgICAgNzIxNjYsIDcyMTczLCA3MjE4NCwgNzIxOTAsIDcyMTk1LCA3MjIwMCwgNzIyMDYsIDcyMjEyLCA3MjIyMiwgNzIyMzEsIAorICAgIDcwNTMwLCA3MjIzOSwgNzIyNDUsIDcyMjUzLCA3MjI1OSwgNzIyNjcsIDcyMjcwLCA3MjI3NCwgNzIyNzgsIDcyMjgxLCAKKyAgICA3MjI4NywgNzIyOTMsIDcyMzAxLCA3MjMxMywgNzIzMjUsIDcyMzMyLCA3MjMzNiwgNzIzNDcsIDcyMzU1LCA3MjM2MiwgCisgICAgNzIzNzQsIDcyMzgyLCA3MjM5MCwgNzIzOTcsIDcyNDAzLCA3MjQxMywgNzI0MjIsIDcyNDI3LCA3MjQzNywgNzI0NDYsIAorICAgIDQwNzg4LCA3MjQ1MywgNzI0NTcsIDcyNDYyLCA3MjQ3MCwgNzI0NzcsIDcyNDgzLCA3MjQ4NywgNzI0OTcsIDcyNTA4LCAKKyAgICA3MjUxNiwgNzI1MjMsIDcyNTM1LCA3MjU0NywgNzI1NTYsIDY5NTcyLCA3MjU2MywgNzI1NzQsIDcyNTg4LCA3MjU5NiwgCisgICAgNzI2MDYsIDcyNjEzLCA3MjYyMSwgNzI2MzMsIDcyNjQyLCA3MjY1MCwgNzI2NjAsIDcyNjcxLCA3MjY4MywgNzI2OTIsIAorICAgIDcyNzAyLCA3MjcwOSwgNzI3MTgsIDcyNzMzLCA3Mjc0MSwgNzI3NTEsIDcyNzYwLCA3Mjc2OCwgNzI3ODEsIDcyNzk2LCAKKyAgICA3MjgwMCwgNzI4MDksIDcyODIxLCA3MjgzMiwgNzI4NDMsIDcyODU0LCA3Mjg2NCwgNzI4NzUsIDcyODgzLCA3Mjg4OSwgCisgICAgNzI4OTksIDcyOTA3LCA3MjkxMywgMjkwMjgsIDcyOTE4LCA3MjkyNCwgNzI5MjksIDcyOTM2LCA5NzA4LCAxNzUwNSwgCisgICAgNzI5NDIsIDcyOTUxLCA3Mjk1NiwgNzI5NjAsIDcyOTY3LCA3Mjk3MywgNzI5NzgsIDcyOTgzLCA3Mjk5MSwgNzI5OTksIAorICAgIDczMDAzLCA3MzAwNiwgNzMwMDksIDczMDExLCA3MzAxOCwgNzMwMjQsIDczMDM1LCA3MzA0MCwgNzMwNDQsIDczMDUxLCAKKyAgICA3MzA1NywgNzMwNjIsIDczMDcwLCA2NTQ0NiwgNjU0NTYsIDczMDc2LCA3MzA4MywgNzMwOTMsIDEwNjE4LCA3MzEwMCwgCisgICAgNzMxMDUsIDI5MjI0LCA3MzExNCwgNzMxMTksIDczMTI2LCA3MzEzNiwgNzMxNDQsIDczMTUyLCA3MzE2MSwgNzMxNjcsIAorICAgIDczMTczLCA3MzE4MCwgNzMxODcsIDczMTkyLCA3MzE5NiwgNzMyMDQsIDczMjA5LCA3MzIxNCwgNzMyMjIsIDczMjI5LCAKKyAgICA3MzIzNCwgNzMyNDAsIDczMjQzLCA3MzI0NywgNzMyNTYsIDcxODE2LCA3MzI2NSwgNzMyNjksIDczMjc1LCA3MzI4NiwgCisgICAgNzMyOTYsIDE3NTE0LCA3MzMwNywgNzMzMTUsIDE3NTI2LCA3MzMyMiwgNzMzMjYsIDczMzM1LCAyNzM0MSwgNzMzNDIsIAorICAgIDczMzQ2LCA3MzM1MSwgNzMzNjgsIDczMzgwLCAxMDU3NiwgNzMzOTIsIDczMzk3LCA3MzQwMiwgNzM0MDcsIDIxMDEwLCAKKyAgICA3MzQxMSwgNzM0MTYsIDczNDIxLCA3MzQyNywgNzM0MzIsIDU4NDYsIDIxMDE0LCA3MzQzNywgNzM0NDIsIDczNDQ4LCAKKyAgICA3MzQ1NSwgNzM0NjAsIDczNDY1LCA3MzQ3MSwgNzM0NzcsIDczNDgzLCA3MzQ4OCwgNzM0OTQsIDczNDk4LCA3MzUxMiwgCisgICAgNzM1MjAsIDczNTI4LCA3MzUzNCwgNzM1MzksIDczNTQ2LCA3MzU1NiwgNzM1NjUsIDczNTcwLCA3MzU3NSwgNzM1ODMsIAorICAgIDczNTg4LCA3MzU5NCwgNzM1OTksIDczNjA4LCA1OTgyMywgNzM2MTMsIDczNjE2LCA3MzYzNCwgNzM2NTMsIDczNjY2LCAKKyAgICA3MzY4MCwgNzM2OTYsIDczNzAzLCA3MzcxMCwgNzM3MTYsIDczNzIzLCA3MzcyOCwgNzM3MzQsIDczNzQwLCA3Mzc0OCwgCisgICAgNzM3NTQsIDczNzU5LCA3Mzc2NCwgNzM3ODAsIDEwNTg5LCA3Mzc5NCwgNzM4MDEsIDczODA5LCA3MzgxNSwgNzM4MTksIAorICAgIDczODIyLCA3MzgyNywgNzM4MzIsIDczODM5LCA3Mzg0NCwgNzM4NTMsIDczODU4LCA3Mzg2NCwgNzM4NzMsIDczODgyLCAKKyAgICA3Mzg4NywgNzM4OTEsIDczODk5LCA3MzkwOCwgMTE2NzQsIDczOTE3LCA3MzkyNSwgNzM5MzAsIDczOTM2LCAxMTY4NSwgCisgICAgNzM5NDEsIDczOTQ0LCA3Mzk0OSwgNzM5NTksIDczOTY4LCA3Mzk3MywgNzM5NzksIDczOTg0LCA3Mzk5MiwgNzM5OTksIAorICAgIDc0MDEwLCA3NDAyMCwgNzQwMjUsIDY0ODc1LCA3NDAzMCwgNzQwMzYsIDc0MDQxLCA3NDA0OCwgNzQwNTcsIDc0MDY1LCAKKyAgICA3NDA3MSwgNzQwNzcsIDc0MDg0LCA3NDA5MCwgNzQwOTQsIDE2OTYwLCAzMDU1LCA3NDA5OSwgNzQxMDMsIDc0MTA3LCAKKyAgICA3NDExMywgNzQxMjIsIDc0MTI4LCA3NDEzNSwgNzQxMzksIDc0MTYwLCA3NDE4MiwgNzQxOTgsIDc0MjE1LCA3NDIzNCwgCisgICAgNzQyNDMsIDc0MjUzLCA3NDI2MCwgNzQyNjcsIDI3MjI4LCA3NDI3MywgNzQyNzcsIDc0Mjg1LCA3NDI5NywgNzQzMDMsIAorICAgIDc0MzExLCA3NDMxNSwgNzQzMjMsIDc0MzMwLCA3NDMzNCwgNzQzNDAsIDc0MzQ2LCA3NDM1MSwgMzU2MywgNDE5MjQsIAorICAgIDc0MzU3LCA3NDM2MSwgNzQzNjUsIDc0MzY5LCA3NDM3NCwgNzQzNzksIDc0Mzg0LCA3NDM5MCwgNzQzOTYsIDc0NDAyLCAKKyAgICA3NDQwOSwgNzQ0MTUsIDc0NDIyLCA3NDQyOCwgNzQ0MzQsIDc0NDM5LCA3NDQ0NSwgNzQ0NTAsIDc0NDU0LCA3NDQ1OSwgCisgICAgNzQ0NjMsIDc0NDY4LCA0MTkzOSwgNzQ0NzIsIDc0NDc3LCA3NDQ4NSwgNzQ0ODksIDc0NDk0LCA3NDUwMSwgNzQ1MTAsIAorICAgIDc0NTE2LCA3NDUyMCwgNzQ1MjcsIDc0NTMxLCA3NDUzNCwgNzQ1NDEsIDc0NTUwLCA3NDU1NSwgNzQ1NTksIDc0NTY3LCAKKyAgICA3NDU3NiwgNzQ1ODAsIDc0NTg4LCA3NDU5NCwgNzQ1OTksIDc0NjA0LCA3NDYxMCwgNzQ2MTYsIDc0NjIxLCA3NDYyNSwgCisgICAgNzQ2MzEsIDc0NjM2LCA3NDY0MCwgNzQ2NDQsIDc0NjQ3LCA3NDY1MiwgNzQ2NjAsIDc0NjcwLCA3NDY3NSwgMzk0MTYsIAorICAgIDc0NjgzLCA3NDY5NSwgNzQ2OTksIDc0NzA1LCA3NDcxNywgNzQ3MjgsIDc0NzM1LCA3NDc0MSwgNzQ3NDgsIDc0NzYwLCAKKyAgICA3NDc2NywgNzQ3NzMsIDIxMDg4LCA3NDc3NywgNzQ3ODMsIDc0NzkwLCA3NDc5NiwgNzQ4MDIsIDc0ODA3LCA3NDgxMiwgCisgICAgNzQ4MTcsIDc0ODI2LCA3MDMzLCA3NDgzMSwgMTY0MjYsIDc0ODM3LCA3NDg0MSwgNzQ4NDUsIDc0ODQ5LCA3NDg1NywgCisgICAgNzQ4NjYsIDc0ODcwLCA3NDg3NywgNzQ4ODYsIDc0ODk5LCA3NDkwNSwgNzQ0NjQsIDMwMDg4LCA3NDkxMCwgNzQ5MTIsIAorICAgIDc0OTE3LCA3NDkyMiwgNzQ5MjcsIDc0OTMyLCA3NDkzNywgNzQ5NDIsIDc0OTQ3LCA3NDk1MiwgNzQ5NTcsIDc0OTYyLCAKKyAgICA3NDk2NywgNzQ5NzIsIDc0OTc3LCA3NDk4MiwgNzQ5ODgsIDc0OTkzLCA3NDk5OCwgNzUwMDMsIDc1MDA4LCA3NTAxMywgCisgICAgNzUwMTgsIDc1MDIzLCA3NTAyOCwgNzUwMzQsIDc1MDQwLCA3NTA0NiwgNzUwNTEsIDc1MDU2LCA3NTA2OCwgNzUwNzMsIAorICAgIDE4NzAsIDQ2LCA3NTA3OCwgNzUwODMsIDMyNzQ2LCA3NTA4NywgMzI3NTEsIDMyNzU2LCAzMjc2MiwgMzI3NjcsIDc1MDkxLCAKKyAgICAzMjc3MiwgMjIwODMsIDc1MTEzLCA3NTExNywgNzUxMjEsIDc1MTI2LCA3NTEzMCwgMzI3NzYsIDc1MTM0LCA3NTE0MiwgCisgICAgMzI3ODEsIDc1MTQ5LCA3NTE1MiwgNzUxNTcsIDc1MTYxLCA5NTQzLCA3NTE3MCwgMzI3ODYsIDIxOTQ1LCA3NTE3MywgCisgICAgNzUxNzcsIDE0MjgsIDc1MTgyLCAzMjc5NywgNzUxODUsIDc1MTkwLCAyNTczNywgMjU3NDcsIDM1MjU4LCA3NTE5NSwgCisgICAgNzUyMDAsIDc1MjA1LCA3NTIxMCwgNzUyMTYsIDc1MjIxLCA3NTIzMCwgNzUyMzUsIDc1MjQyLCA3NTI0OCwgNzUyNTMsIAorICAgIDc1MjU4LCA3NTI2MywgNzUyNzMsIDc1MjgyLCA3NTI4NywgNzUyOTUsIDc1Mjk5LCA3NTMwNywgMzI2MTEsIDM3MzE3LCAKKyAgICA3NTMxNCwgNzUzMjAsIDc1MzI1LCA3NTMzMCwgMTIwMTYsIDc1MzM1LCA3NTM0MSwgNzUzNDYsIDc1MzUzLCA3NTM1OSwgCisgICAgNzUzNjQsIDc1MzcyLCA3NTM4MiwgNzUzOTIsIDc1Mzk4LCA3NTQwMywgNzU0MDksIDE3NTM2LCA3NTQxNiwgMzYwNzMsIAorICAgIDc1NDI5LCA3NTQzNCwgNzU0NDAsIDMwOTkzLCA3NTQ1MywgNzU0NTksIDc1NDYzLCA3NTQ3MiwgNzU0NzksIDc1NDg1LCAKKyAgICA3NTQ5MywgNzU1MDIsIDc1NTA5LCA3NTUxNSwgNzU1MTgsIDc1NTIyLCAyNTg3OCwgNzU1MjYsIDc1NTMzLCA3NTUzOSwgCisgICAgNzU1NDcsIDc1NTUyLCAyMzk5NCwgNzU1NTgsIDc1NTYxLCA3NTU2OSwgNzU1NzcsIDc1NTkxLCA3NTU5OCwgNzU2MDQsIAorICAgIDc1NjExLCA3NTYxNywgMzI4MTEsIDc1NjIxLCA3NTYyOCwgNzU2MzYsIDc1NjQ0LCA3NTY1MCwgMzI4MTYsIDc1NjU4LCAKKyAgICA3NTY2NCwgNzU2NjksIDc1Njc5LCA3NTY4NSwgNzU2OTQsIDMwODMwLCAzNDcxNiwgNzU3MDIsIDc1NzA3LCA3NTcxMiwgCisgICAgNzU3MTYsIDc1NzIxLCA3NTcyNSwgNzU3MzMsIDE0OTIwLCAzOTQyOSwgNzU3MzgsIDc1NzQzLCAzMjgyMSwgNjIyNjksIAorICAgIDc1NzQ3LCA3NTc1MiwgNzU3NTYsIDc1NzY1LCA3NTc3MywgNzU3NzksIDc1Nzg0LCA3NTc5MCwgNzU3OTcsIDc1ODAzLCAKKyAgICA3NTgwOCwgNzU4MTMsIDc1ODIyLCA3NTgzNCwgNzU4NDksIDMzMDgzLCA3NTg1NSwgMTY1NDUsIDMyODI1LCA3NTg1OSwgCisgICAgNzU4NjYsIDI0MTA0LCA3NTg3MiwgNzU4NzksIDc1ODg4LCA3NTg5NSwgNzU5MDQsIDc1OTEwLCA3NTkxNSwgNzU5MjMsIAorICAgIDc1OTI5LCAzMjgzNSwgNzU5MzQsIDc1OTQzLCA3NDcyMywgNzU5NTIsIDc1OTU5LCA3NTk2NSwgNzU5NzEsIDc1OTgxLCAKKyAgICA3NTk4OSwgNzU5OTYsIDc2MDAwLCAzMjg0MCwgNzYwMDMsIDMyODQ2LCAzMjg1MiwgNzYwMDgsIDc2MDE2LCA3NjAyNCwgCisgICAgNzYwMzQsIDc2MDQzLCA3NjA1MSwgNzYwNTgsIDc2MDY4LCAzMjg1NywgNzYwNzIsIDc2MDc0LCA3NjA3OCwgNzYwODMsIAorICAgIDc2MDg3LCA3NjA5MSwgNzYwOTcsIDc2MTAyLCA3NjEwNiwgNzYxMTcsIDc2MTIyLCA3NjEyNywgMzA2MCwgNzYxMzEsIAorICAgIDc2MTM4LCA3NjE0MiwgNzYxNTEsIDc2MTU5LCA3NjE2NiwgNzYxNzEsIDc2MTc2LCA2MjMxNSwgNzYxODAsIDc2MTgzLCAKKyAgICA3NjE4OSwgNzYxOTcsIDc2MjAzLCA3NjIwNywgNzYyMTIsIDc2MjE5LCA3NjIyNCwgNzYyMzAsIDM0NzQ3LCA3NjIzNSwgCisgICAgNzYyMzgsIDc2MjQzLCA3NjI0NywgNzYyNTIsIDc2MjU3LCA3NjI2MSwgNzYyNjksIDc2MjczLCAyNTc1NiwgMjU3NjUsIAorICAgIDc2Mjc5LCA3NjI4NSwgNzYyOTEsIDc2Mjk2LCA3NjMwMCwgNzYzMDMsIDc2MzEzLCA3NjMyMiwgNzYzMjcsIDc2MzMzLCAKKyAgICA3NjM0MCwgNzYzNDYsIDc2MzUwLCA3NjM1OCwgNzYzNjMsIDM0NzUzLCA3NjM2NywgNzYzNzUsIDc2MzgxLCA3NjM4OCwgCisgICAgNzYzOTMsIDc2Mzk3LCA3NjQwMiwgNTg0NDAsIDM0NzU5LCA3NjQwOCwgNzY0MTMsIDc2NDE3LCA3NjQyMiwgNzY0MjcsIAorICAgIDc2NDMyLCA3NjQzNiwgNzY0NDEsIDc2NDQ2LCA3NjQ1MiwgNzY0NTcsIDc2NDYyLCA3NjQ2OCwgNzY0NzQsIDc2NDc5LCAKKyAgICA3NjQ4MywgNzY0ODgsIDc2NDkzLCA3NjQ5OCwgNzY1MDIsIDI0MTAzLCA3NjUwNywgNzY1MTIsIDc2NTE4LCA3NjUyNCwgCisgICAgNzY1MzAsIDc2NTM1LCA3NjUzOSwgNzY1NDQsIDc2NTQ5LCA3NjU1NCwgNzY1NTgsIDc2NTYzLCA3NjU2OCwgNzY1NzMsIAorICAgIDc2NTc4LCA3NjU4MiwgMzI4NjUsIDc2NTkwLCA3NjU5NCwgNzY2MDIsIDc2NjEwLCA3NjYyMSwgNzY2MjYsIDc2NjMwLCAKKyAgICAyMjM5NywgNzY2MzUsIDc2NjQxLCA3NjY1MSwgNzY2NTgsIDc2NjYzLCA3NjY3MiwgNzY2NzcsIDc2NjgxLCA3NjY4NiwgCisgICAgNzY2OTQsIDc2NzAyLCA3NjcwOSwgNjUxMDksIDc2NzE1LCA3NjcyMywgNzY3MzAsIDc2NzQxLCA3Njc0NywgNzY3NTEsIAorICAgIDc2NzU3LCAzMjg3NSwgNzY3NjAsIDc2NzY3LCA3Njc3NSwgNzY3ODAsIDM5NjIwLCA3Njc4NCwgNzY3ODksIDc2Nzk2LCAKKyAgICA3NjgwMSwgODk5MiwgNzY4MDUsIDc2ODEzLCA3NjgyMCwgNzY4MjcsIDc2ODMzLCA3Njg0NywgNjMzODEsIDc2ODU1LCAKKyAgICA3Njg2MSwgNzY4NjUsIDc2ODY4LCA3Njg3NiwgNzY4ODMsIDc2ODg4LCA3NjkwMSwgNzY5MDgsIDc2OTEyLCA3NjkxOSwgCisgICAgNzY5MjQsIDYwODYwLCA3NjkyOSwgNzY5MzIsIDc2OTM5LCA3Njk0NSwgNzY5NDksIDc2OTU3LCA3Njk2NiwgNzY5NzYsIAorICAgIDc2OTg2LCA3Njk5NSwgNzcwMDMsIDc3MDE0LCA3NzAxOSwgNzcwMjMsIDc3MDI4LCA3NzAzMiwgMzUzODksIDc3MDQwLCAKKyAgICAyMTM1NywgMzUzOTgsIDc3MDQ1LCA3NzA1MCwgNzcwNTUsIDc3MDYwLCA3NzA2NSwgNzcwNzAsIDc3MDc1LCA3NzA3OSwgCisgICAgNzcwODQsIDc3MDg5LCA3NzA5NCwgNzcwOTksIDc3MTA0LCA3NzEwOSwgNzcxMTMsIDc3MTE4LCA3NzEyMywgNzcxMjcsIAorICAgIDc3MTMxLCA3NzEzNSwgNzcxMzksIDc3MTQ0LCA3NzE0OSwgNzcxNTMsIDc3MTU4LCA3NzE2MiwgNzcxNjYsIDc3MTcxLCAKKyAgICA3NzE3NiwgNzcxODEsIDc3MTg2LCA3NzE5MCwgNzcxOTUsIDc3MjAwLCA3NzIwNCwgNzcyMDksIDc3MjE0LCA3NzIxOSwgCisgICAgNzcyMjQsIDc3MjI5LCA3NzIzNCwgNzcyMzksIDc3MjQ0LCA3NzI0OSwgNzcyNTQsIDc3MjU5LCA3NzI2NCwgNzcyNjksIAorICAgIDc3Mjc0LCA3NzI3OSwgNzcyODQsIDc3Mjg5LCA3NzI5NCwgNzcyOTksIDc3MzA0LCA3NzMwOCwgNzczMTMsIDc3MzE4LCAKKyAgICA3NzMyMywgNzczMjgsIDc3MzMzLCA3NzMzOCwgNzczNDMsIDc3MzQ4LCA3NzM1MywgNzczNTgsIDc3MzYzLCA3NzM2NywgCisgICAgNzczNzIsIDc3Mzc2LCA3NzM4MSwgNzczODYsIDc3MzkxLCA3NzM5NiwgNzc0MDEsIDc3NDA2LCA3NzQxMSwgNzc0MTYsIAorICAgIDc3NDIxLCA3NzQyNSwgNzc0MjksIDc3NDM0LCA3NzQzOSwgNzc0NDMsIDc3NDQ4LCA3NzQ1MywgNzc0NTcsIDc3NDYyLCAKKyAgICA3NzQ2NywgNzc0NzIsIDc3NDc3LCA3NzQ4MSwgNzc0ODYsIDc3NDkxLCA3NzQ5NSwgNzc1MDAsIDc3NTA0LCA3NzUwOCwgCisgICAgNzc1MTIsIDc3NTE2LCA3NzUyMSwgNzc1MjUsIDc3NTI5LCA3NzUzMywgNzc1MzcsIDc3NTQxLCA3NzU0NSwgNzc1NDksIAorICAgIDc3NTUzLCA3NzU1NywgNzc1NjIsIDc3NTY3LCA3NzU3MiwgNzc1NzcsIDc3NTgyLCA3NzU4NywgNzc1OTIsIDc3NTk3LCAKKyAgICA3NzYwMiwgNzc2MDcsIDc3NjExLCA3NzYxNSwgNzc2MTksIDc3NjIzLCA3NzYyNywgNzc2MzEsIDc3NjM2LCA3NzY0MCwgCisgICAgNzc2NDUsIDc3NjQ5LCA3NzY1NCwgNzc2NTksIDc3NjYzLCA3NzY2NywgNzc2NzIsIDc3Njc2LCA3NzY4MCwgNzc2ODQsIAorICAgIDc3Njg4LCA3NzY5MiwgNzc2OTYsIDc3NzAwLCA3NzcwNCwgNzc3MDgsIDc3NzEyLCA3NzcxNiwgNzc3MjAsIDc3NzI0LCAKKyAgICA3NzcyOCwgNzc3MzMsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NywgCisgICAgNzc3NzEsIDc3Nzc1LCA3Nzc3OSwgNzc3ODMsIDc3Nzg3LCA3Nzc5MSwgNzc3OTYsIDc3ODAwLCA3NzgwNSwgNzc4MDksIAogICAgIDc3ODEzLCA3NzgxNywgNzc4MjEsIDc3ODI1LCA3NzgyOSwgNzc4MzMsIDc3ODM3LCA3Nzg0MSwgNzc4NDUsIDc3ODQ5LCAKLSAgICA3Nzg1MywgNzc4NTcsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc1LCA3Nzg4MCwgNzc4ODQsIDc3ODg4LCA3Nzg5MiwgCi0gICAgNzc4OTYsIDc3OTAwLCA3NzkwNCwgNzc5MDgsIDc3OTEyLCA3NzkxNywgNzc5MjEsIDc3OTI2LCA3NzkzMCwgNzc5MzUsIAotICAgIDc3OTM5LCA3Nzk0NCwgNzc5NDgsIDc3OTU0LCA3Nzk1OSwgNzc5NjMsIDc3OTY4LCA3Nzk3MiwgNzc5NzcsIDc3OTgxLCAKLSAgICA3Nzk4NiwgNzc5OTAsIDc3OTk1LCAxNTIxLCA3Nzk5OSwgMjgyNCwgMTc1OSwgMTc2NCwgNzgwMDMsIDc4MDA3LCAyODI4LCAKLSAgICA3ODAxMSwgMTM5NywgNzgwMTYsIDEzNDIsIDc4MDIwLCAyODQwLCA3ODAyNCwgNzgwMzEsIDc4MDM4LCA3ODA1MiwgMjg0NCwgCi0gICAgNzEzMSwgNzgwNjEsIDc4MDY5LCA3ODA3NiwgNzgwODcsIDc4MDk2LCA3ODEwMywgNzgxMTUsIDc4MTI4LCA3ODE0MSwgCi0gICAgNzgxNTIsIDc4MTU3LCA3ODE2NCwgNzgxNzYsIDc4MTgwLCAyODQ4LCAxMTc0MCwgNzgxOTAsIDc4MTk1LCA3ODIwNCwgCi0gICAgNzgyMTQsIDI4NTIsIDc4MjE5LCA3ODIyMywgNzgyMjgsIDc4MjM1LCA3ODI0MSwgNzgyNDksIDc4MjYxLCAxMzQ3LCAKLSAgICAxMzAzNSwgNzgyNzEsIDc4Mjc1LCA3ODI4MSwgNzgyOTUsIDc4MzA3LCA3ODMxOSwgNzgzMjksIDc4MzM4LCA3ODM0NywgCi0gICAgNzgzNTYsIDc4MzY0LCA3ODM3NSwgNzgzODMsIDQwNTEsIDc4MzkzLCA3ODQwNCwgNzg0MTMsIDc4NDE5LCA3ODQzNCwgCi0gICAgNzg0NDEsIDc4NDQ3LCAzNTQ4OSwgNzg0NTIsIDI4NzYsIDEzMDM5LCA3ODQ1NiwgNzg0NjMsIDg5MzAsIDc4NDcyLCAyODgxLCAKLSAgICAzMjMzNiwgNzg0NzgsIDYwNTcyLCA3ODQ4NSwgNzg0OTEsIDc4NTAyLCA3ODUwOCwgNzg1MTUsIDc4NTIxLCA3ODUyOSwgCi0gICAgNzg1MzYsIDc4NTQyLCA3ODU1MiwgNzg1NjEsIDc4NTcyLCA3ODU3OSwgNzg1ODUsIDc4NTk1LCA3ODYwMywgNzg2MDksIAotICAgIDc4NjI0LCA3ODYzMCwgNzg2MzUsIDc4NjQyLCA3ODY0NSwgNzg2NTEsIDc4NjU4LCA3ODY2NCwgNzg2NzIsIDc4NjgxLCAKLSAgICA3ODY4OSwgNzg2OTUsIDc4NzA0LCA0MTQyNywgNzg3MTgsIDc4NzIzLCA3ODcyOSwgMTQ3NDQsIDc4NzM0LCA3ODc0NywgCi0gICAgNzg3NTYsIDc4NzY0LCA3ODc3MSwgNzg3NzUsIDc4Nzc5LCA3ODc4MiwgNzg3ODksIDc4Nzk2LCA3ODgwNCwgNzg4MTIsIAotICAgIDc4ODIxLCA3ODgyOSwgMTQ2NzEsIDc4ODM3LCA3ODg0MiwgNzg4NDYsIDc4ODU4LCA3ODg2NSwgNzg4NzQsIDc0OCwgCi0gICAgNzg4ODQsIDc4ODkzLCA3ODkwNCwgMjg5NywgNzg5MDgsIDc4OTEyLCA3ODkxOCwgNzg5MzEsIDc4OTQzLCA3ODk1MywgCi0gICAgNzg5NjIsIDc4OTc0LCAyNjM1MiwgNzg5ODUsIDc4OTkzLCA3OTAwMiwgNzkwMTMsIDc5MDI0LCA3OTAzNCwgNzkwNDQsIAotICAgIDc5MDUzLCA3OTA2MSwgMTEzMDUsIDc5MDY4LCA3OTA3MiwgNzkwNzUsIDc5MDgwLCA3OTA4NSwgNzkwODksIDc5MDk1LCAKLSAgICAxMzUyLCAxMTgxMSwgNzkxMDIsIDc5MTEzLCA3OTEyMiwgNzkxMzAsIDc5MTM5LCA3OTE0NywgNzkxNjMsIDc5MTc0LCAKLSAgICA3OTE4MywgNzkxOTEsIDc5MjAzLCA3OTIxNCwgNzkyMzAsIDc5MjQwLCA3OTI2MSwgNzkyNzQsIDc5MjgyLCA3OTI4OSwgCi0gICAgMTQ4NTUsIDc5MzAyLCA3OTMwNywgNzkzMTMsIDU5MDgsIDc5MzE5LCA3OTMyMiwgNzkzMjksIDc5MzM5LCA4MTc2LCAKLSAgICA3OTM0NiwgNzkzNTEsIDc5MzU2LCA3OTM2MSwgNzkzNjksIDc5Mzc4LCA3OTM4NiwgOTc0OSwgOTc1OCwgNzkzOTEsIAotICAgIDc5NDAyLCA3OTQwNywgNzk0MTMsIDI5MTMsIDI5MTgsIDc5NDE5LCAxMDg3MiwgNzk0MjUsIDc5NDMyLCA3OTQzOSwgCi0gICAgNzk0NTIsIDIyNTEsIDY4LCA3OTQ1NywgNzk0NjIsIDc5NDcyLCA3OTQ3OCwgNzk0ODcsIDc5NDk1LCA3OTUwNSwgNzk1MDksIAotICAgIDc5NTE0LCA3OTUxOCwgNzk1MzAsIDI5NDEsIDc5NTM4LCA3OTU0NiwgNzk1NTEsIDc5NTYyLCA3OTU3MywgNzk1ODIsIAotICAgIDc5NTg3LCA3OTU5MywgNzk1OTgsIDc5NjA4LCA3OTYxOCwgNzk2MjMsIDc5NjI5LCA3OTYzNCwgNzk2NDMsIDIxMzk3LCAKLSAgICA3OTY0NywgNDEyOCwgMjAsIDc5NjUyLCA3OTY2MSwgNzk2NjgsIDc5Njc1LCA3OTY4MSwgNzk2ODcsIDg2NCwgNzk2OTIsIAotICAgIDc5Njk3LCA2MDkwMCwgNzk3MDIsIDc5NzA3LCA3OTcxMywgNzk3MTksIDc5NzI3LCA3OTczMiwgNzk3MzksIDc5NzQ1LCAKLSAgICA3OTc1MCwgMzgwMDEsIDQxMzIxLCA3OTc1NiwgMjk0NSwgMzIsIDc5NzY2LCA3OTc3OSwgNzk3ODQsIDc5NzkyLCA3OTc5NywgCi0gICAgNzk4MDMsIDI5NjcsIDI4Mjg5LCA3OTgwOCwgNzk4MTYsIDc5ODIzLCA3OTgyOCwgNTg2NDUsIDYxOTAzLCA3OTgzNywgCi0gICAgNzk4NDEsIDE3MDQsIDE4MTMsIDc5ODQ2LCA3OTg1MSwgNzk4NTgsIDE4MTcsIDI0NywgNzk4NjUsIDc5ODcxLCAyOTg5LCAKLSAgICA3OTg3NiwgNzk4ODEsIDc5ODg4LCAxODIxLCA3OTg5MywgNzk4OTksIDc5OTA0LCA3OTkxNiwgNjExOSwgNzk5MjYsIDE4MjgsIAotICAgIDc5OTMyLCA3OTkzNywgNzk5NDQsIDc5OTUxLCA3OTk2NiwgNzk5NzMsIDc5OTg0LCA3OTk5MiwgMjYxOCwgNzk5OTYsIAotICAgIDgwMDA4LCA4MDAxMywgODAwMTcsIDgwMDIzLCAyODExNCwgMjI1NiwgODAwMjcsIDgwMDM4LCA4MDA0MiwgODAwNDYsIAotICAgIDgwMDUyLCA4MDA1NiwgODAwNjUsIDgwMDY5LCA4MDA4MCwgODAwODQsIDIzMDIsIDMyMTY1LCA4MDA4OCwgODAwOTgsIAotICAgIDMwODAsIDkzNjQsIDgwMTA2LCA4MDExMSwgODAxMTUsIDgwMTI0LCA4MDEzMSwgODAxMzcsIDMwNTAsIDE3MTM5LCA4MDE0MSwgCi0gICAgODAxNTQsIDgwMTcyLCA4MDE3NywgODAxODUsIDgwMTkzLCA4MDIwMywgOTk3OCwgMTMxNDcsIDgwMjE1LCA4MDIyOCwgCi0gICAgODAyMzUsIDgwMjQyLCA4MDI1OCwgODAyNjUsIDgwMjcxLCAxMDk1LCA4MDI3OCwgODAyODUsIDgwMjk1LCA4MDMwNCwgCi0gICAgODAzMTYsIDQyMjkxLCA4MDMyNCwgMzA2NCwgMTIwMjMsIDgwMzI3LCA4MDMzNSwgODAzMzksIDc4MjMxLCAzMDY4LCAKLSAgICA4MDM0MywgMjExNzgsIDEyMDM5LCAzNzU2LCA4MDM0NywgMzA3NCwgODAzNTEsIDgwMzYxLCA4MDM2NywgODAzNzMsIAotICAgIDgwMzc5LCA4MDM4NSwgODAzOTEsIDgwMzk3LCA4MDQwMywgODA0MDksIDgwNDE1LCA4MDQyMSwgODA0MjcsIDgwNDMzLCAKLSAgICA4MDQzOSwgODA0NDUsIDgwNDUxLCA4MDQ1NywgODA0NjMsIDgwNDY5LCA4MDQ3NSwgODA0ODEsIDgwNDg3LCA4MDQ5MywgCi0gICAgODA0OTksIDgwNTA1LCA4MDUxMSwgODA1MTgsIDgwNTI1LCA4MDUzMSwgODA1MzcsIDgwNTQzLCA4MDU0OSwgODA1NTUsIAotICAgIDgwNTYxLCAxMzU3LCAxNjA0OSwgMTIwNjEsIDgwNTY3LCA4MDU3MiwgODA1NzcsIDgwNTgyLCA4MDU4NywgODA1OTIsIAotICAgIDgwNTk3LCA4MDYwMiwgODA2MDcsIDgwNjEyLCA4MDYxNywgODA2MjIsIDgwNjI3LCA4MDYzMiwgODA2MzcsIDgwNjQyLCAKLSAgICA4MDY0NywgODA2NTIsIDgwNjU3LCA4MDY2MiwgODA2NjcsIDgwNjcyLCA4MDY3NywgODA2ODIsIDgwNjg3LCA4MDY5MiwgCi0gICAgODA2OTgsIDgwNzAzLCA4MDcwOCwgODA3MTQsIDgwNzE5LCA4MDcyNSwgODA3MzAsIDgwNzM1LCA4MDc0MSwgODA3NDYsIAotICAgIDgwNzUxLCA4MDc1NiwgODA3NjEsIDgwNzY2LCA4MDc3MSwgODA3NzYsIDgwNzgxLCA4MDM2MiwgODAzNjgsIDgwMzc0LCAKLSAgICA4MDM4MCwgODAzODYsIDgwMzkyLCA4MDM5OCwgODA0MDQsIDgwNDEwLCA4MDQxNiwgODA0MjIsIDgwNDI4LCA4MDQzNCwgCi0gICAgODA0NDAsIDgwNDQ2LCA4MDc4NywgODA0NTIsIDgwNDU4LCA4MDQ2NCwgODA3OTMsIDgwNDcwLCA4MDQ3NiwgODA0ODIsIAotICAgIDgwNDg4LCA4MDQ5NCwgODA1MDAsIDgwNTA2LCA4MDUyNiwgODA3OTksIDgwODA1LCA4MDUzMiwgODA4MTEsIDgwNTM4LCAKLSAgICA4MDU0NCwgODA1NTAsIDgwNTU2LCA4MDU2MiwgMzA5MSwgMzA5NiwgODA4MTcsIDgwODIyLCA4MDgyNSwgODA4MzEsIAotICAgIDgwODM3LCA4MDg0NCwgODA4NDksIDgwODU0LCAyMzA3LCAKKyAgICA3Nzg1NCwgNzc4NTgsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc0LCA3Nzg3OCwgNzc4ODIsIDc3ODg2LCA3Nzg5MCwgCisgICAgNzc4OTQsIDc3ODk4LCA3NzkwMywgNzc5MDcsIDc3OTExLCA3NzkxNiwgNzc5MjEsIDc3OTI1LCA3NzkyOSwgNzc5MzMsIAorICAgIDc3OTM3LCA3Nzk0MSwgNzc5NDUsIDc3OTQ5LCA3Nzk1MywgNzc5NTgsIDc3OTYyLCA3Nzk2NywgNzc5NzEsIDc3OTc2LCAKKyAgICA3Nzk4MCwgNzc5ODUsIDc3OTg5LCA3Nzk5NSwgNzgwMDAsIDc4MDA0LCA3ODAwOSwgNzgwMTMsIDc4MDE4LCA3ODAyMiwgCisgICAgNzgwMjcsIDc4MDMxLCA3ODAzNiwgMTUyMSwgNzgwNDAsIDI4MjQsIDE3NTksIDE3NjQsIDc4MDQ0LCA3ODA0OCwgMjgyOCwgCisgICAgNzgwNTIsIDEzOTcsIDc4MDU3LCAxMzQyLCA3ODA2MSwgMjg0MCwgNzgwNjUsIDc4MDcyLCA3ODA3OSwgNzgwOTMsIDI4NDQsIAorICAgIDcxMzEsIDc4MTAyLCA3ODExMCwgNzgxMTcsIDc4MTI4LCA3ODEzNywgNzgxNDQsIDc4MTU2LCA3ODE2OSwgNzgxODIsIAorICAgIDc4MTkzLCA3ODE5OCwgNzgyMDUsIDc4MjE3LCA3ODIyMSwgMjg0OCwgMTE3NDcsIDc4MjMxLCA3ODIzNiwgNzgyNDUsIAorICAgIDc4MjU1LCAyODUyLCA3ODI2MCwgNzgyNjQsIDc4MjY5LCA3ODI3NiwgNzgyODIsIDc4MjkwLCA3ODMwMiwgMTM0NywgCisgICAgMTMwNDIsIDc4MzEyLCA3ODMxNiwgNzgzMjIsIDc4MzM2LCA3ODM0OCwgNzgzNjAsIDc4MzcwLCA3ODM3OSwgNzgzODgsIAorICAgIDc4Mzk3LCA3ODQwNSwgNzg0MTYsIDc4NDI0LCA0MDUxLCA3ODQzNCwgNzg0NDUsIDc4NDU0LCA3ODQ2MCwgNzg0NzUsIAorICAgIDc4NDgyLCA3ODQ4OCwgMzU1MTQsIDc4NDkzLCAyODc2LCAxMzA0NiwgNzg0OTcsIDc4NTA0LCA4OTMwLCA3ODUxMywgMjg4MSwgCisgICAgMzIzNjEsIDc4NTE5LCA2MDYwOSwgNzg1MjYsIDc4NTMyLCA3ODU0MywgNzg1NDksIDc4NTU2LCA3ODU2MiwgNzg1NzAsIAorICAgIDc4NTc3LCA3ODU4MywgNzg1OTMsIDc4NjAyLCA3ODYxMywgNzg2MjAsIDc4NjI2LCA3ODYzNiwgNzg2NDQsIDc4NjUwLCAKKyAgICA3ODY2NSwgNzg2NzEsIDc4Njc2LCA3ODY4MywgNzg2ODYsIDc4NjkyLCA3ODY5OSwgNzg3MDUsIDc4NzEzLCA3ODcyMiwgCisgICAgNzg3MzAsIDc4NzM2LCA3ODc0NSwgNDE0NjQsIDc4NzU5LCA3ODc2NCwgNzg3NzAsIDE0NzU3LCA3ODc3NSwgNzg3ODgsIAorICAgIDc4Nzk3LCA3ODgwNSwgNzg4MTIsIDc4ODE2LCA3ODgyMCwgNzg4MjMsIDc4ODMwLCA3ODgzNywgNzg4NDUsIDc4ODUzLCAKKyAgICA3ODg2MiwgNzg4NzAsIDE0Njg0LCA3ODg3OCwgNzg4ODMsIDc4ODg3LCA3ODg5OSwgNzg5MDYsIDc4OTE1LCA3NDgsIAorICAgIDc4OTI1LCA3ODkzNCwgNzg5NDUsIDI4OTcsIDc4OTQ5LCA3ODk1MywgNzg5NTksIDc4OTcyLCA3ODk4NCwgNzg5OTQsIAorICAgIDc5MDAzLCA3OTAxNSwgMjYzNjksIDc5MDI2LCA3OTAzNCwgNzkwNDMsIDc5MDU0LCA3OTA2NSwgNzkwNzUsIDc5MDg1LCAKKyAgICA3OTA5NCwgNzkxMDIsIDExMzEyLCA3OTEwOSwgNzkxMTMsIDc5MTE2LCA3OTEyMSwgNzkxMjYsIDc5MTMwLCA3OTEzNiwgCisgICAgMTM1MiwgMTE4MTgsIDc5MTQzLCA3OTE1NCwgNzkxNjMsIDc5MTcxLCA3OTE4MCwgNzkxODgsIDc5MjA0LCA3OTIxNSwgCisgICAgNzkyMjQsIDc5MjMyLCA3OTI0NCwgNzkyNTUsIDc5MjcxLCA3OTI4MSwgNzkzMDIsIDc5MzE1LCA3OTMyMywgNzkzMzAsIAorICAgIDE0ODY4LCA3OTM0MywgNzkzNDgsIDc5MzU0LCA1OTA4LCA3OTM2MCwgNzkzNjMsIDc5MzcwLCA3OTM4MCwgODE3NiwgCisgICAgNzkzODcsIDc5MzkyLCA3OTM5NywgNzk0MDIsIDc5NDEwLCA3OTQxOSwgNzk0MjcsIDk3NTYsIDk3NjUsIDc5NDMyLCAKKyAgICA3OTQ0MywgNzk0NDgsIDc5NDU0LCAyOTEzLCAyOTE4LCA3OTQ2MCwgMTA4NzksIDc5NDY2LCA3OTQ3MywgNzk0ODAsIAorICAgIDc5NDkzLCAyMjUxLCA2OCwgNzk0OTgsIDc5NTAzLCA3OTUxMywgNzk1MTksIDc5NTI4LCA3OTUzNiwgNzk1NDYsIDc5NTUwLCAKKyAgICA3OTU1NSwgNzk1NTksIDc5NTcxLCAyOTQxLCA3OTU3OSwgNzk1ODcsIDc5NTkyLCA3OTYwMywgNzk2MTQsIDc5NjIzLCAKKyAgICA3OTYyOCwgNzk2MzQsIDc5NjM5LCA3OTY0OSwgNzk2NTksIDc5NjY0LCA3OTY3MCwgNzk2NzQsIDc5Njc5LCA3OTY4OCwgCisgICAgMjE0MTAsIDc5NjkyLCA0MTI4LCAyMCwgNzk2OTcsIDc5NzA2LCA3OTcxMywgNzk3MjAsIDc5NzI2LCA3OTczMiwgODY0LCAKKyAgICA3OTczNywgNzk3NDIsIDYwOTM3LCA3OTc0NywgNzk3NTIsIDc5NzU4LCA3OTc2NCwgNzk3NzIsIDc5Nzc3LCA3OTc4NCwgCisgICAgNzk3OTAsIDc5Nzk1LCAzODAzMCwgNDEzNTgsIDc5ODAxLCAyOTQ1LCAzMiwgNzk4MTEsIDc5ODI0LCA3OTgyOSwgNzk4MzcsIAorICAgIDc5ODQyLCA3OTg0OCwgMjk2NywgMjgzMTAsIDc5ODUzLCA3OTg2MSwgNzk4NjgsIDc5ODczLCA1ODY4MiwgNjE5NDAsIAorICAgIDc5ODgyLCA3OTg4NiwgMTcwNCwgMTgxMywgNzk4OTEsIDc5ODk2LCA3OTkwMywgMTgxNywgMjQ3LCA3OTkxMCwgNzk5MTYsIAorICAgIDI5ODksIDc5OTIxLCA3OTkyNiwgNzk5MzMsIDE4MjEsIDc5OTM4LCA3OTk0NCwgNzk5NDksIDc5OTYxLCA2MTE5LCA3OTk3MSwgCisgICAgMTgyOCwgNzk5NzcsIDc5OTgyLCA3OTk4OSwgNzk5OTYsIDgwMDExLCA4MDAxOCwgODAwMjksIDgwMDM3LCAyNjE4LCAKKyAgICA4MDA0MSwgODAwNTMsIDgwMDU4LCA4MDA2MiwgODAwNjgsIDI4MTM1LCAyMjU2LCA4MDA3MiwgODAwODMsIDgwMDg3LCAKKyAgICA4MDA5MSwgODAwOTcsIDgwMTAxLCA4MDExMCwgODAxMTQsIDgwMTI1LCA4MDEyOSwgMjMwMiwgMzIxOTAsIDgwMTMzLCAKKyAgICA4MDE0MywgMzA4MCwgOTM3MSwgODAxNTEsIDgwMTU2LCA4MDE2MCwgODAxNjksIDgwMTc2LCA4MDE4MiwgMzA1MCwgMTcxNTIsIAorICAgIDgwMTg2LCA4MDE5OSwgODAyMTcsIDgwMjIyLCA4MDIzMCwgODAyMzgsIDgwMjQ4LCA5OTg1LCAxMzE1NCwgODAyNjAsIAorICAgIDgwMjczLCA4MDI4MCwgODAyODcsIDgwMzAzLCA4MDMxMCwgODAzMTYsIDEwNjQsIDgwMzIzLCA4MDMzMCwgODAzNDAsIAorICAgIDgwMzQ5LCA4MDM2MSwgNDIzMjgsIDgwMzY5LCAzMDY0LCAxMjAzMCwgODAzNzIsIDgwMzgwLCA4MDM4NCwgNzgyNzIsIAorICAgIDMwNjgsIDgwMzg4LCAyMTE5MSwgMTIwNDYsIDM3NTYsIDgwMzkyLCAzMDc0LCA4MDM5NiwgODA0MDYsIDgwNDEyLCA4MDQxOCwgCisgICAgODA0MjQsIDgwNDMwLCA4MDQzNiwgODA0NDIsIDgwNDQ4LCA4MDQ1NCwgODA0NjAsIDgwNDY2LCA4MDQ3MiwgODA0NzgsIAorICAgIDgwNDg0LCA4MDQ5MCwgODA0OTYsIDgwNTAyLCA4MDUwOCwgODA1MTQsIDgwNTIwLCA4MDUyNiwgODA1MzIsIDgwNTM4LCAKKyAgICA4MDU0NCwgODA1NTAsIDgwNTU2LCA4MDU2MywgODA1NzAsIDgwNTc2LCA4MDU4MiwgODA1ODgsIDgwNTk0LCA4MDYwMCwgCisgICAgODA2MDYsIDEzNTcsIDE2MDYyLCAxMjA2OCwgODA2MTIsIDgwNjE3LCA4MDYyMiwgODA2MjcsIDgwNjMyLCA4MDYzNywgCisgICAgODA2NDIsIDgwNjQ3LCA4MDY1MiwgODA2NTcsIDgwNjYyLCA4MDY2NywgODA2NzIsIDgwNjc3LCA4MDY4MiwgODA2ODcsIAorICAgIDgwNjkyLCA4MDY5NywgODA3MDIsIDgwNzA3LCA4MDcxMiwgODA3MTcsIDgwNzIyLCA4MDcyNywgODA3MzIsIDgwNzM3LCAKKyAgICA4MDc0MywgODA3NDgsIDgwNzUzLCA4MDc1OSwgODA3NjQsIDgwNzcwLCA4MDc3NSwgODA3ODAsIDgwNzg2LCA4MDc5MSwgCisgICAgODA3OTYsIDgwODAxLCA4MDgwNiwgODA4MTEsIDgwODE2LCA4MDgyMSwgODA4MjYsIDgwNDA3LCA4MDQxMywgODA0MTksIAorICAgIDgwNDI1LCA4MDQzMSwgODA0MzcsIDgwNDQzLCA4MDQ0OSwgODA0NTUsIDgwNDYxLCA4MDQ2NywgODA0NzMsIDgwNDc5LCAKKyAgICA4MDQ4NSwgODA0OTEsIDgwODMyLCA4MDQ5NywgODA1MDMsIDgwNTA5LCA4MDgzOCwgODA1MTUsIDgwNTIxLCA4MDUyNywgCisgICAgODA1MzMsIDgwNTM5LCA4MDU0NSwgODA1NTEsIDgwNTcxLCA4MDg0NCwgODA4NTAsIDgwNTc3LCA4MDg1NiwgODA1ODMsIAorICAgIDgwNTg5LCA4MDU5NSwgODA2MDEsIDgwNjA3LCAzMDkxLCAzMDk2LCA4MDg2MiwgODA4NjcsIDgwODcwLCA4MDg3NiwgCisgICAgODA4ODIsIDgwODg5LCA4MDg5NCwgODA4OTksIDIzMDcsIAogfTsKIAogLyogY29kZS0+bmFtZSBwaHJhc2Vib29rICovCiAjZGVmaW5lIHBocmFzZWJvb2tfc2hpZnQgNwogI2RlZmluZSBwaHJhc2Vib29rX3Nob3J0IDIwOQogc3RhdGljIHVuc2lnbmVkIGNoYXIgcGhyYXNlYm9va1tdID0gewotICAgIDAsIDIxOSwgMTgsIDI0NSwgMzEsIDc4LCAyMjMsIDI1NCwgNzgsIDU0LCA1MCwgMjQ3LCAxMzIsIDUwLCAyMjUsIDE4MiwgCi0gICAgNTAsIDI1NCwgMTI2LCAyNTQsIDU3LCA0MywgMjI2LCAzLCA0NCwgMjI2LCAzLCAyNTMsIDIxNiwgOTYsIDUwLCAyNDksIAotICAgIDIxOSwgMjQwLCAxNjcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjE5LCA0NiwgMjEsIDIxMCwgODYsIDIxLCAxMTAsIDIxLCAKLSAgICAxMDUsIDIxLCAxNTgsIDIxLCAxNjEsIDIxLCAxODksIDIxLCAxOTQsIDIxLCAxOTgsIDIxLCAxOTUsIDIxLCAyMDAsIDI0OSwgCi0gICAgMjI2LCAyMjAsIDE1MCwgMjMzLCAxNSwgNTAsIDI0NSwgOTgsIDUwLCAyNDIsIDEzMCwgNTAsIDIyNCwgMTMsIDc4LCAyNDksIAotICAgIDIxNywgMjUzLCAyMDYsIDcsIDYsIDEsIDYxLCA3LCA2LCAxLCAyNTMsIDE1OCwgNywgNiwgMSwgMjUxLCA2NiwgNywgNiwgMSwgCi0gICAgMjQ5LCA2MCwgNywgNiwgMSwgNzUsIDcsIDYsIDEsIDI0NSwgNiwgNywgNiwgMSwgMjQzLCAyMDIsIDcsIDYsIDEsIDI0MiwgCi0gICAgNjAsIDcsIDYsIDEsIDczLCA3LCA2LCAxLCAyMzUsIDE0NCwgNywgNiwgMSwgMjM1LCAyMywgNywgNiwgMSwgMTU2LCA3LCA2LCAKLSAgICAxLCAxOTMsIDcsIDYsIDEsIDIzMCwgMjUsIDcsIDYsIDEsIDc2LCA3LCA2LCAxLCAyMjYsIDEwNSwgNywgNiwgMSwgMjI0LCAKLSAgICA5NiwgNywgNiwgMSwgMTUzLCA3LCA2LCAxLCAyMjIsIDkxLCA3LCA2LCAxLCAyMTcsIDE1MiwgNywgNiwgMSwgNzAsIDcsIDYsIAotICAgIDEsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMTIsIDk4LCA3LCA2LCAxLCAyMTEsIDE3OCwgNywgNiwgMSwgMjExLCAxMTcsIDcsIAotICAgIDYsIDEsIDIxMCwgMTU5LCA0MywgNDIsIDEyNywgMjIzLCA1MCwgMjE5LCA0NiwgNDQsIDQyLCAxMjcsIDI1MCwgMzEsIDI1NSwgCi0gICAgMTQsIDEyMSwgMjMyLCAyMTMsIDI0MiwgMTM3LCAyNTUsIDE0LCA3LCA0LCAxLCA2MSwgNywgNCwgMSwgMjUzLCAxNTgsIDcsIAotICAgIDQsIDEsIDI1MSwgNjYsIDcsIDQsIDEsIDI0OSwgNjAsIDcsIDQsIDEsIDc1LCA3LCA0LCAxLCAyNDUsIDYsIDcsIDQsIDEsIAotICAgIDI0MywgMjAyLCA3LCA0LCAxLCAyNDIsIDYwLCA3LCA0LCAxLCA3MywgNywgNCwgMSwgMjM1LCAxNDQsIDcsIDQsIDEsIDIzNSwgCi0gICAgMjMsIDcsIDQsIDEsIDE1NiwgNywgNCwgMSwgMTkzLCA3LCA0LCAxLCAyMzAsIDI1LCA3LCA0LCAxLCA3NiwgNywgNCwgMSwgCi0gICAgMjI2LCAxMDUsIDcsIDQsIDEsIDIyNCwgOTYsIDcsIDQsIDEsIDE1MywgNywgNCwgMSwgMjIyLCA5MSwgNywgNCwgMSwgMjE3LCAKLSAgICAxNTIsIDcsIDQsIDEsIDcwLCA3LCA0LCAxLCAyMTQsIDEwNSwgNywgNCwgMSwgMjEyLCA5OCwgNywgNCwgMSwgMjExLCAxNzgsIAotICAgIDcsIDQsIDEsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE1OSwgNDMsIDI0OSwgOTksIDEyNywgNjcsIDIzMiwgMjEzLCA0NCwgCi0gICAgMjQ5LCA5OSwgMTI3LCAxODIsIDIyOCwgNzMsIDIxOSwgMTgsIDIzNSwgMTkzLCAyNDUsIDMxLCA3OCwgMjUwLCAxNzYsIDUwLCAKLSAgICAyMjQsIDIyOCwgNTAsIDI0OSwgOTgsIDUwLCAyMTEsIDQwLCA1MCwgMjUxLCAxMzUsIDEzMCwgMjIxLCAxNzMsIDUwLCAyNDgsIAotICAgIDEsIDI0OSwgMTYzLCA1MCwgMjQ0LCAxMzYsIDIyNiwgMTU0LCAyMzUsIDIzOCwgMjMzLCA0MiwgNTIsIDI1NCwgMTEwLCAKLSAgICAyMjMsIDI1NCwgNzgsIDIyOCwgNTIsIDUwLCAyMTksIDUyLCAyNDAsIDE2OCwgMjIzLCAxMDIsIDUwLCAyMzEsIDIzMiwgCi0gICAgMjQ4LCA3MSwgNTAsIDIyNSwgMjEsIDUwLCAyMTgsIDIzLCAxMDUsIDIxOCwgMjMsIDE1OCwgMjU1LCAzLCAyNTUsIDE0LCAKLSAgICAyMzAsIDIyOCwgNTAsIDIyNSwgNjgsIDUwLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDI1MCwgMTgzLCAyMTgsIDIzLCAxMTAsIAotICAgIDIzMSwgMTQ4LCAyMjYsIDE1NCwgMjM1LCAyMzgsIDIyMiwgMjQ3LCA1MiwgMjU0LCAxMTAsIDIyMywgMjU0LCA3OCwgMjEyLCAKLSAgICAxMTQsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIDIxMiwgMTE0LCAyNDQsIAotICAgIDIsIDEzNCwgMjI0LCAxOSwgMjM1LCAxOTMsIDIyNCwgMTMsIDc4LCA3LCA2LCAxLCAxMTUsIDIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAxMTUsIDIsIDE4MiwgNywgNiwgMSwgCi0gICAgMTE1LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA2LCAxLCAyNTQsIDI0MywgNywgNiwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDE2MCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDE2MCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgCi0gICAgMjQyLCAxMzYsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNTAsIDMwLCA3LCA2LCAKLSAgICAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDUsIDU5LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxODIsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzAsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMTgyLCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgMSwgMjMwLCA4NCwgNTAsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIAotICAgIDI1MCwgMzAsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTQyLCA3LCA2LCAxLCAKLSAgICAyMTYsIDE1MSwgNywgNCwgMSwgMjIwLCA3NiwgMjIyLCA5MSwgNywgNCwgMSwgMTE1LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMTE1LCAyLCAxODIsIDcsIDQsIDEsIAotICAgIDExNSwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMjU0LCAyNDMsIDcsIDQsIAotICAgIDEsIDI1MSwgNjcsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAxNjAsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDE0MiwgCi0gICAgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAxNjAsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIAotICAgIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjUwLCAzMCwgNywgNCwgCi0gICAgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjQ1LCA1OSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAxNDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMwLCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDE4MiwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDEsIDI0NywgMTY5LCA1MCwgNywgNCwgMSwgMTQ0LCAKLSAgICAyLCA5MSwgNywgNCwgMSwgMTA0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjUwLCAzMCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAxNDIsIDcsIDQsIDEsIAotICAgIDIxNiwgMTUxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAxMTUsIDIsIDIzMSwgMjMyLCA3LCA0LCAKLSAgICAxLCAxMTUsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgCi0gICAgMTQ2LCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI0LCA3LCA0LCAxLCAxMTUsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAyNTEsIAotICAgIDY3LCAyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDE0MiwgNywgNiwgMSwgMjUxLCA2NywgMiwgMjUwLCAzMCwgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjUxLCA2NywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDksIAotICAgIDYxLCAyLCA5MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgOTEsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDE2MCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDE2MCwgMiwgMjUxLCAxNDYsIAotICAgIDcsIDYsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAotICAgIDIyNCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTYwLCAKLSAgICAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTAsIAotICAgIDMwLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTEsIDE0NiwgNywgNiwgCi0gICAgMSwgMjQzLCAyMDMsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQzLCAyMDMsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgCi0gICAgMzAsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDkxLCA3LCA0LCAxLCAyNDIsIAotICAgIDYxLCAyLCA5MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDE4MiwgNywgNiwgMSwgCi0gICAgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDI0MCwgMTU0LCAKLSAgICAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAKLSAgICAyMjQsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDU5LCA0OCwgNywgNCwgCi0gICAgMSwgMjQ3LCAxMTksIDczLCA3LCA2LCAyNywgMjM2LCAzMSwgNywgNCwgMjcsIDIzNiwgMzEsIDcsIDYsIDEsIDIzNSwgMTQ1LCAKLSAgICAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMjUwLCAxODMsIAotICAgIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMzMsIDIzOSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIAotICAgIDE0MiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDE0MiwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAKLSAgICAyMzMsIDE0OSwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgOTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAKLSAgICA5MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMTQyLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAxNDIsIDcsIDYsIDEsIDIzMCwgMjYsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjUwLCAKLSAgICAyMzQsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzAsIDI2LCAyMjQsIDIwNCwgMjUxLCA3OCwgCi0gICAgMjU0LCA1NywgNywgNiwgMSwgMjQ1LCAxMzgsIDcsIDQsIDEsIDI0NSwgMTM4LCA3LCA2LCAxLCAxNDQsIDIsIDIzMSwgMjMyLCAKLSAgICA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxNDQsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNDQsIDIsIAotICAgIDI1MSwgMTQ2LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgNTIsIDE0MiwgNywgNiwgMjcsIAotICAgIDIyNiwgMjM0LCA3LCA0LCAyNywgMjI2LCAyMzQsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAxNDIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAxNDIsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgCi0gICAgMTgzLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjIyLCA5MiwgMiwgMTQyLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIAotICAgIDI1MCwgMzAsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMTgzLCA3LCAKLSAgICA0LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIyMiwgCi0gICAgOTIsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyNTAsIDE4MywgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAyMzQsIAotICAgIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDIsIDE4MiwgCi0gICAgNywgNCwgMSwgMTA0LCAyLCAxODIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDEwNCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDEwNCwgMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDEwNCwgCi0gICAgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDIyMiwgMjM0LCA0OCwgNywgNiwgMSwgMTA0LCAyLCA1MiwgMTQyLCAKLSAgICA3LCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjI2LCAyMjQsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzAsIDcsIAotICAgIDYsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjExLCAKLSAgICAxMTgsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgCi0gICAgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAKLSAgICAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MSwgCi0gICAgNywgNCwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCA1NywgMiwgMTAzLCA3LCA2LCAxLCA1NywgMiwgMjE2LCAxMSwgNywgNCwgCi0gICAgMSwgNTcsIDIsIDIxNiwgMTEsIDcsIDYsIDEsIDEzOCwgMTk0LCA3LCA0LCAxLCAxMzgsIDE5NCwgNywgNiwgMSwgMjA0LCAKLSAgICA3NiwgNywgNiwgMSwgMjUxLCA2NywgMiwgMTAzLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAxMDMsIDcsIDYsIDEsIDI1NCwgCi0gICAgMjE5LCAyNDksIDYwLCA3LCA2LCAxLCAyNDksIDYxLCAyLCAxMDMsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDIxNiwgMTEsIDcsIAotICAgIDQsIDEsIDI0OSwgNjEsIDIsIDIxNiwgMTEsIDcsIDQsIDEsIDIxNSwgOTQsIDI0OCwgNTQsIDcsIDYsIDEsIDIyMywgNDksIAotICAgIDc1LCA3LCA2LCAxLCAyMjEsIDE5NSwgNywgNiwgMSwgMjA0LCA3NSwgNywgNiwgMSwgMjQ1LCA3LCAyLCAxMDMsIDcsIDQsIAotICAgIDEsIDI0NSwgNywgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDEwNywgNywgNCwgMSwgCi0gICAgMjQwLCAyMDEsIDcsIDYsIDEsIDIzNSwgMTg1LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDYsIDEsIDIzNSwgMjQsIAotICAgIDIsIDEwMywgNywgNCwgMSwgMjM1LCAyNCwgMiwgMTAzLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTMwLCA3LCA0LCAxLCAKLSAgICAyMzMsIDEwMCwgMiwgOTEsIDcsIDYsIDEsIDIxNSwgOTQsIDE5MywgNywgNiwgMSwgMjMwLCAyNiwgMiwgNDMsIDEwMywgNywgCi0gICAgNCwgMSwgMjMwLCAyNiwgMiwgMTk5LCA0NCwgMjMzLCAzNiwgNywgNiwgMSwgMTQ0LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0MCwgMjQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ4LCA3LCA2LCAxLCAyMjYsIDIxOSwgNywgNCwgCi0gICAgMSwgMjI2LCAyMTksIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAxMDMsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAxMDMsIDcsIDEsIAotICAgIDIxMCwgMjE0LCA3LCA2LCAxLCAxMzgsIDEwNSwgNywgNCwgMSwgMTM4LCAxMDUsIDcsIDYsIDEsIDI0NSwgNzUsIDcsIDEsIAotICAgIDIyMywgNDksIDI0NSwgNzYsIDIzMiwgMTIzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjI2LCA2NiwgMTAzLCA3LCA2LCAxLCAKLSAgICAyMTcsIDE1MywgMiwgMTAzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMTAzLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ4LCA3LCA2LCAxLCAKLSAgICAyMTQsIDE1NywgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgNiwgMSwgMjExLCAxMTgsIDIsIDEwMywgNywgNCwgMSwgCi0gICAgMjExLCAxMTgsIDIsIDEwMywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIAotICAgIDYsIDEsIDI0NSwgOCwgNywgNiwgMSwgMjQ1LCA5LCAyMjMsIDQ4LCA3LCA0LCAxLCAyNDUsIDksIDIyMywgNDgsIDcsIDQsIAotICAgIDEsIDI0NSwgOSwgMiwgMjE3LCA3NywgNywgMSwgMTEzLCAyLCA5MSwgNywgNiwgMSwgMTM4LCAxODksIDcsIDQsIDEsIDEzOCwgCi0gICAgMTg5LCA3LCAxLCAyMzUsIDE5MywgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgMSwgMjExLCAxODEsIDcsIDEsIAotICAgIDI0OCwgNDcsIDI1MCwgMTEsIDcsIDEsIDIzMywgNzcsIDI1MCwgMTEsIDcsIDEsIDI1NCwgMTM3LCAyNTAsIDExLCA3LCAxLCAKLSAgICAyMjMsIDU1LCAyNTAsIDExLCA3LCA2LCAxLCAyNDYsIDQwLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNCwgCi0gICAgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDYsIDQwLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjMyLCAKLSAgICAxODgsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjMyLCAxODgsIDcsIDYsIDEsIAotICAgIDIyOCwgMTg2LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjI4LCAxODYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAKLSAgICAyNTAsIDIzNCwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMjM0LCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgCi0gICAgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIAotICAgIDIzMSwgMjMyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIxNSwgOTQsIDc1LCA3LCA2LCAxLCAxMTUsIDIsIDI0OCwgMiwgMjIsIDIzMSwgCi0gICAgMjMyLCA3LCA0LCAxLCAxMTUsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxMTUsIDIsIDU5LCA3NywgMjIsIAotICAgIDIzMSwgMjMyLCA3LCA0LCAxLCAxMTUsIDIsIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyNTQsIDI0NCwgMiwgCi0gICAgMjMxLCAyMzIsIDcsIDQsIDEsIDI1NCwgMjQ0LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDkxLCA3LCA0LCAKLSAgICAxLCAyNDMsIDIwMywgMiwgOTEsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIAotICAgIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjUwLCAyMzQsIAotICAgIDcsIDYsIDEsIDE0NCwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDE0NCwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjI2LCAyMjUsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCAyMjYsIDIyNSwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAyNDUsIDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDUsIDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDI0NiwgMzksIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDQsIDEsIDIxMCwgMTU5LCA3LCA0LCAxLCAKLSAgICAyNDYsIDM5LCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMTQyLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMTQyLCA3LCA2LCAxLCAKLSAgICAyNDAsIDE5OSwgNywgNiwgMSwgMjExLCAxODEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMzAsIAotICAgIDI2LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNzcsIDIyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgCi0gICAgMjIyLCAyMzQsIDc3LCAyMiwgMTQyLCA3LCA2LCAxLCAyNTQsIDI0NCwgMiwgMTQyLCA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxOCwgMTAzLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxOCwgMTAzLCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTE1LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMTUsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgCi0gICAgMSwgMTYwLCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTYwLCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDE0NCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCAKLSAgICA2LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgCi0gICAgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMDQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgMSwgMjIyLCAKLSAgICA5MiwgMiwgMjQ5LCAyMjAsIDUxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyNDksIDIyMCwgNTEsIDcsIDYsIDEsIDIxNywgCi0gICAgMTUzLCAyLCAyNDksIDIyMCwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDksIDIyMCwgNTEsIDcsIDYsIDEsIDIxMCwgCi0gICAgMjMxLCA3LCA0LCAxLCAyMTAsIDIzMSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0MiwgNjEsIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxOTksIDQ0LCAyMzMsIDM2LCA3LCA0LCAxLCAyNDksIDYxLCAyLCAKLSAgICAyNDksIDEwMCwgNywgNiwgMSwgMjI2LCAxMzQsIDcsIDQsIDEsIDIyNiwgMTM0LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA2LCAxLCAxMTUsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTE1LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIAotICAgIDE0NCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA3NywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAyMTEsIDExOCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI0OSwgCi0gICAgMTAwLCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDQsIDcsIDQsIDEsIDI0OCwgMTQzLCAyNDcsIDIyMCwgNywgNCwgMSwgCi0gICAgMjI0LCAzMSwgMjQ3LCAyMjAsIDcsIDYsIDEsIDExNSwgMiwgOTEsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICAyNTEsIDY3LCAyLCA5MSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDEzMCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI0NywgCi0gICAgMjU1LCA5MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyMTcsIDI1MCwgMjE3LCA3NywgNywgNiwgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA3LCA0LCAxLCAyNDIsIDE4MCwgMjE4LCAKLSAgICAxMjksIDcsIDYsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAxMzAsIDcsIDYsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAxNjAsIDIsIDkxLCA3LCA2LCAxLCAyMzUsIDE0NSwgMiwgOTEsIDcsIDQsIAotICAgIDEsIDIzNSwgMTQ1LCAyLCA5MSwgNywgNiwgMSwgNCwgMjI0LCA5NywgMiwgMjQxLCA1MiwgMjE3LCA3NywgNywgNCwgMSwgCi0gICAgMjI0LCA5NywgMiwgMjQxLCA1MiwgMjE3LCA3NywgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDkxLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgOTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICAyMTUsIDk0LCA2MSwgNywgNCwgMSwgMjU0LCAxNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDI1NCwgMTQzLCA3LCA0LCAxLCA1NywgCi0gICAgMiwgMTAzLCA3LCA0LCAxLCAyMDQsIDc2LCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgMjE3LCA3NywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMTAzLCA3LCA0LCAxLCAyMjMsIDQ5LCA3NSwgNywgNCwgMSwgCi0gICAgMjIxLCAxOTUsIDcsIDQsIDEsIDIyMSwgMTk2LCAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzUsIDcsIDQsIDEsIDIyMywgNDksIAotICAgIDIwNCwgNzUsIDcsIDQsIDEsIDIyMywgNDksIDIwNCwgMTYwLCAyLCAxMDMsIDcsIDQsIDEsIDI1MCwgMCwgMjIzLCA0OSwgCi0gICAgMjA0LCA3NSwgNywgNCwgMSwgMjQ3LCAxMTksIDIzNSwgMTQ1LCAyLCA5MSwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDEwMywgCi0gICAgNywgNCwgMSwgMTE5LCAyNDMsIDIwMiwgNywgMSwgNCwgNiwgMjQzLCAyMDIsIDcsIDQsIDEsIDI0MywgMTA3LCA3LCA0LCAxLCAKLSAgICAyMjMsIDE1MSwgMjQwLCAyNDgsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjAsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDEwMywgCi0gICAgNywgNCwgMSwgMjQxLCAyMDgsIDIsIDEwMywgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE4NSwgCi0gICAgNywgMSwgNCwgNiwgNzMsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjUyLCA0MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjMzLCAxLCA3LCA0LCAxLCAKLSAgICAyMTUsIDk0LCAxOTMsIDcsIDQsIDEsIDIxNSwgOTQsIDIzMiwgNTAsIDIsIDE5OSwgMjMzLCAzNiwgNywgNCwgMSwgMjMyLCAKLSAgICA1MCwgMiwgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCA0MywgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMjMsIDU1LCAKLSAgICAxMDMsIDcsIDEsIDQsIDYsIDIzMCwgMjUsIDcsIDQsIDEsIDI1MiwgMTM0LCA3NiwgNywgMSwgNCwgNiwgMjI2LCAyMzQsIDcsIAotICAgIDQsIDEsIDI1MCwgMCwgMjI2LCAyMDEsIDcsIDQsIDEsIDIyNSwgMTMzLCA3LCA0LCAxLCAyMTUsIDk0LCAxNTMsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAKLSAgICAxMDMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCAKLSAgICA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjQ0LCA4NywgNywgNCwgMSwgMjIzLCA0OSwgMjIzLCAyMjQsIDIsIDI0NCwgODcsIDcsIAotICAgIDEsIDQsIDYsIDE1MywgNywgMSwgNCwgNiwgMjM1LCAxOTMsIDE1MywgNywgNCwgMSwgMjIyLCA5MiwgMiwgMTAzLCA3LCA0LCAKLSAgICAxLCAyNDUsIDc1LCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDIxOCwgMTAzLCAyMiwgMTAzLCA3LCA0LCAxLCAKLSAgICAyMTgsIDIzMSwgMjIzLCA0OSwgMjQ1LCA3NSwgNywgNCwgMSwgMjQ1LCA3NiwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNSwgCi0gICAgOTQsIDIxNywgMTUyLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAxMDQsIDEzMCwgNywgCi0gICAgNCwgMSwgMjE0LCAxNTcsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCAKLSAgICA0LCAxLCAyMTUsIDk0LCAyMTIsIDk4LCA3LCA0LCAxLCAyMTUsIDk0LCAyMTEsIDExNywgNywgMSwgNCwgNiwgMjExLCAxMTcsIAotICAgIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNDksIDEwMCwgNywgNCwgCi0gICAgMSwgMjQ1LCA4LCA3LCA0LCAxLCAyNDUsIDksIDIsIDI0OSwgMTAwLCA3LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDEsIAotICAgIDIyNSwgMTM5LCAyMTMsIDEzNSwgMjQzLCAyNDksIDcsIDEsIDIzNSwgMTkzLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDEsIAotICAgIDIxOCwgMTEwLCAyNTEsIDY2LCA3LCAxLCAyNTEsIDI0NiwgMjUwLCAxMSwgNywgMSwgNCwgNiwgMjUzLCAxNTgsIDcsIDQsIAotICAgIDEsIDI1MCwgMCwgMjA0LCA3NSwgNywgMSwgNCwgNiwgMjQzLCAyMDMsIDIsIDEwMywgNywgMSwgNCwgNiwgMjQyLCA2MCwgNywgCi0gICAgNCwgMSwgMjM1LCAxNDUsIDIsIDI0OSwgMTI3LCA3LCA0LCAxLCAyMTUsIDk0LCAyMzUsIDIzLCA3LCAxLCA0LCA2LCAxNTYsIAotICAgIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDEwMywgNywgMSwgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgMSwgMjIzLCA0OSwgCi0gICAgMjQyLCAxODAsIDIxOCwgMTMwLCAyLCA5MSwgNywgNCwgMSwgMjQ2LCA0MCwgMjQ3LCAyMjAsIDcsIDQsIDEsIDI0OCwgMjYsIAotICAgIDI0NywgMjIwLCA3LCA0LCAxLCAyNDYsIDQwLCAyNDcsIDIyMSwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNSwgMTg1LCAKLSAgICAyNDcsIDIyMCwgNywgNCwgMSwgMjE2LCAyMzUsIDI0NywgMjIwLCA3LCA0LCAxLCAyMTcsIDI5LCAyNDcsIDIyMSwgMiwgCi0gICAgMjQ5LCAxMDAsIDcsIDQsIDEsIDI0NCwgMTM0LCAyNDcsIDIyMCwgNywgNCwgMSwgMjMyLCAxMDAsIDI0NywgMjIwLCA3LCA0LCAKLSAgICAxLCAyMzIsIDUxLCAyNDcsIDIyMCwgNywgMSwgMjUxLCAyNDYsIDIyNSwgMTgxLCA3LCAxLCAyNTEsIDI1NCwgMjI1LCAxODEsIAotICAgIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjEsIDIsIDI0NCwgODcsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjEsIDIsIDI0NCwgCi0gICAgODgsIDIyLCAyMTcsIDc3LCA1OCwgMSwgNCwgMjQyLCA2MCwgNTgsIDEsIDQsIDI0MiwgNjEsIDIsIDEwMywgNTgsIDEsIDQsIAotICAgIDIzNSwgMTQ0LCA1OCwgMSwgNCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjIzLCAKLSAgICAyMjQsIDIsIDEwMywgNTgsIDEsIDQsIDYsIDIzNSwgMTkzLCAxNTMsIDU4LCAxLCA0LCAyMTIsIDk4LCA1OCwgMSwgNCwgCi0gICAgMjExLCAxMTcsIDU4LCAxLCAyMjQsIDE5MCwgNTgsIDEsIDUyLCAyMjQsIDE5MCwgNTgsIDEsIDIxNSwgOTQsIDI0OSwgMjE5LCAKLSAgICA1OCwgMSwgMjU0LCA1NywgNTgsIDEsIDIyMywgNDksIDI0OSwgMjE5LCA1OCwgMSwgNDQsIDE2MywgMjIyLCAyMzMsIDU4LCAKLSAgICAxLCA0MywgMTYzLCAyMjIsIDIzMywgNTgsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDIyMywgNDksIDI0MiwgCi0gICAgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDQzLCAyNTMsIDI0OSwgNTgsIDEsIDQ0LCAyNTMsIDI0OSwgNTgsIDEsIDEyMCwgMjUzLCAKLSAgICAyNDksIDU4LCAxLCAxMjQsIDI1MywgMjQ5LCA1OCwgMSwgMjUwLCAzMSwgMjU1LCAxNCwgMjUwLCAyMzQsIDU4LCAxLCA2NywgCi0gICAgMjMyLCAyMTMsIDU4LCAxLCAyMzEsIDIzMiwgNTgsIDEsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDI0MiwgMTM3LCAyNTUsIAotICAgIDE0LCA1OCwgMSwgMTIxLCA2NywgMjMyLCAyMTMsIDU4LCAxLCAxMjEsIDIzMSwgMjMyLCA1OCwgMSwgMTIxLCAyNDIsIDEzNywgCi0gICAgMjU1LCAxNCwgNTgsIDEsIDEyMSwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMjE1LCAyMjIsIDI0OSwgMjI2LCA1OCwgMSwgCi0gICAgMTYzLCAyMTUsIDIyMiwgMjQ5LCAyMjYsIDU4LCAxLCAyNTAsIDE3MywgNDQsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAyNTAsIAotICAgIDE3MywgNDMsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAxMjAsIDIxNywgODcsIDU4LCAxLCAxMjQsIDIxNywgODcsIDU4LCAxLCAKLSAgICA5NiwgNTAsIDU4LCAxLCAyMzAsIDE4MiwgNTAsIDI1MSwgMTQ2LCA1OSwgNDgsIDIyMiwgMjM0LCA0OCwgMjI2LCAyMjQsIDQsIAotICAgIDE4MiwgNTIsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDIyMywgMzYsIDEwMywgNTgsIDEsIDI0OSwgMTMxLCAyNTUsIDE0LCAKLSAgICA1OCwgMSwgNCwgMjQzLCAxMDcsIDU4LCAxLCA0LCAxNTYsIDU4LCAxLCA0LCAyMjIsIDkxLCA1OCwgMSwgNCwgMjExLCAxNzgsIAotICAgIDU4LCAxLCA0LCAyMjMsIDQ5LCAyNDIsIDE4MCwgMjE4LCAxMjksIDU4LCAxLCAyNDUsIDIwLCAxMzgsIDEzMCwgNTgsIDEsIAotICAgIDEyNSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDEzOCwgMTMwLCA1OCwgMSwgCi0gICAgMjQ1LCAxOSwgMTM4LCAxMzAsIDU4LCAxLCAyMTAsIDI1NCwgMjQ4LCA0NCwgMTM4LCA3OCwgNTgsIDEsIDIxMSwgNzAsIAotICAgIDI0OCwgNDQsIDEzOCwgNzgsIDU4LCAxLCAyMTMsIDEzMywgNTgsIDEsIDIxNCwgMTg2LCA1OCwgMSwgNTIsIDI1NCwgNTcsIAotICAgIDU4LCAxLCAxMjEsIDEyNCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDEyMCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDQzLCAKLSAgICAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgNDQsIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCAyMjIsIDIzMywgNTgsIDEsIDIzMCwgCi0gICAgMjI0LCAyNDIsIDEzNywgMjU1LCAxNCwgNTgsIDEsIDIzMCwgMjI0LCA1MiwgMjQyLCAxMzcsIDI1NSwgMTQsIDU4LCAxLCAKLSAgICAyMzAsIDIyNCwgNTIsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDEyMSwgMTgyLCA1OCwgMSwgMjIzLCAxNTcsIDI0OSwgCi0gICAgMjI2LCA1OCwgMSwgMjUyLCA1OCwgMTI1LCAyMTYsIDMwLCA1OCwgMSwgMjQ1LCAxNDMsIDEyNSwgMjE2LCAzMCwgNTgsIDEsIAotICAgIDI1MiwgNTgsIDEyMSwgMjE2LCAzMCwgNTgsIDEsIDI0NSwgMTQzLCAxMjEsIDIxNiwgMzAsIDU4LCAxLCAyMjAsIDU0LCA1OCwgCi0gICAgMSwgMjA0LCAyMjAsIDU0LCA1OCwgMSwgMTIxLCA0MywgNzQsIDM4LCAyNDIsIDEzNywgMjU1LCAxNCwgMzgsIDI1NSwgMywgCi0gICAgMjU1LCAxNCwgMzgsIDI1MCwgMzEsIDI1NSwgMTQsIDM4LCAxODIsIDM4LCAyMzEsIDIzMiwgMzgsIDIyNiwgMTE5LCAzOCwgCi0gICAgMjUxLCAxNDYsIDM4LCA1OSwgNDgsIDM4LCAyNDgsIDEsIDM4LCAyNDEsIDUyLCA0OCwgMzgsIDIyMiwgMjM0LCA0OCwgMzgsIAotICAgIDUyLCAyNTUsIDMsIDI1NSwgMTQsIDM4LCAyNTAsIDIzNCwgMzgsIDY3LCAyMzIsIDIxNCwgNDgsIDM4LCA1MiwgNjcsIDIzMiwgCi0gICAgMjE0LCA0OCwgMzgsIDUyLCAyNDIsIDEzNywgMjU1LCAxNCwgMzgsIDI1MCwgMjU1LCAzOCwgMjM1LCAxOTMsIDI1MSwgMTQ2LCAKLSAgICAzOCwgMjE1LCA5NCwgMjQ5LCAyMjAsIDQ4LCAzOCwgMjQ5LCAyMjAsIDQ4LCAzOCwgMjIzLCA0OSwgMjQ5LCAyMjAsIDQ4LCAKLSAgICAzOCwgMjQ5LCAyMjAsIDc3LCAyMjIsIDI1MSwgMzgsIDI0MiwgMTM3LCAyNTUsIDE1LCA1MSwgMzgsIDI1NSwgMywgMjU1LCAKLSAgICAxNSwgNTEsIDM4LCA0MywgMjE3LCA4OCwgNTEsIDM4LCA0NCwgMjE3LCA4OCwgNTEsIDM4LCA0MywgMjU0LCAxMTAsIDQ4LCAKLSAgICAzOCwgMjQwLCAyNDgsIDM4LCA0MywgMTYzLCAyMjIsIDIzNCwgNTEsIDM4LCAxMjAsIDIxNywgODgsIDUxLCAzOCwgMTI0LCAKLSAgICAyMTcsIDg4LCA1MSwgMzgsIDk2LCA1LCA1MSwgMzgsIDIzMCwgMTgyLCA1LCA1MSwgMzgsIDIyNiwgNjQsIDI0MSwgNTIsIAotICAgIDUxLCAzOCwgMjIzLCA1NSwgMjQxLCA1MiwgNTEsIDM4LCA1OSwgNTEsIDM4LCAyNDgsIDIsIDUxLCAzOCwgMjIyLCAyMzQsIAotICAgIDUxLCAzOCwgMjQ5LCAyMjAsIDUxLCAzOCwgMjUwLCAxODMsIDM4LCAyMjYsIDIyNCwgMzgsIDY3LCAyMzIsIDIxNCwgNTEsIAotICAgIDM4LCAyNTEsIDE0MCwgNTEsIDM4LCAyMzUsIDE5MywgNTIsIDI1NCwgMjQsIDUxLCAzOCwgMjUwLCAyMzUsIDUxLCAzOCwgCi0gICAgMjUwLCAzMSwgMjU1LCAxNSwgNTEsIDM4LCAyNTEsIDE0NywgNTEsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDcsIDUxLCAzOCwgCi0gICAgMjE2LCA4OSwgNTEsIDM4LCAyMzEsIDIzMywgNTEsIDM4LCAxMjEsIDIzMiwgMjEzLCAzOCwgNTIsIDEyMSwgMjMyLCAyMTMsIAotICAgIDM4LCAyMTYsIDg5LCAyMjYsIDEyMCwgMzgsIDIxOSwgMjUxLCAyMTgsIDEwMywgMjI2LCAxMjAsIDM4LCAxOTksIDIxOCwgCi0gICAgMTAzLCAyMjYsIDEyMCwgMzgsIDIxOSwgMjUxLCAyMTksIDQ3LCAyMjYsIDEyMCwgMzgsIDE5OSwgMjE5LCA0NywgMjI2LCAKLSAgICAxMjAsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNCwgNTEsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDAsIDUxLCAzOCwgNDIsIDUxLCAKLSAgICAzOCwgMjIxLCAxODAsIDUxLCAzOCwgMjExLCAxNzksIDQ4LCAzOCwgNjcsIDE4MiwgMzgsIDUyLCAyMjYsIDExOSwgMzgsIAotICAgIDI0MiwgMTM3LCAxMzgsIDc4LCAzOCwgMjU1LCAzLCAxMzgsIDc4LCAzOCwgMjYsIDIyNSwgMTc1LCAzOCwgMjYsIDIzNCwgMiwgCi0gICAgMzgsIDI2LCAyNDcsIDI1MiwgMjE2LCAxOCwgMzgsIDI2LCAyMTAsIDIxOSwgMzgsIDI1MSwgMTQwLCA0OCwgMzgsIDI0NSwgCi0gICAgOTgsIDUsIDUxLCAzOCwgNTIsIDY3LCAyMzIsIDIxNCwgNTEsIDM4LCA0MywgMjU0LCAxMTAsIDUxLCAzOCwgMjI4LCA1MiwgCi0gICAgMjE2LCA4OSwgNDgsIDM4LCAyNDEsIDU4LCA0OCwgMzgsIDI1NCwgMTQ4LCAxMjgsIDIxNiwgNDIsIDQ4LCAzOCwgNDMsIDQ0LCAKLSAgICA4MCwgNTEsIDM4LCAyMTQsIDE1MywgODAsIDUxLCAzOCwgMjQyLCAxNDIsIDIzNSwgNjMsIDM4LCA0NCwgMjUzLCAyNTAsIAotICAgIDQ4LCAzOCwgNDMsIDE2MywgMjIyLCAyMzQsIDQ4LCAzOCwgMjQ0LCAxMzEsIDM4LCAyMTEsIDE3OSwgNTEsIDM4LCA0MywgCi0gICAgMjUzLCAyNTAsIDUxLCAzOCwgNDQsIDI1MywgMjUwLCA1MSwgMzgsIDQ0LCAyNTMsIDI1MCwgMjIsIDEyMCwgMjUzLCAyNTAsIAotICAgIDUxLCAzOCwgNDQsIDE2MywgMjIyLCAyMzQsIDQ4LCAzOCwgNTksIDc3LCAyMjIsIDI1MSwgMzgsIDI1MywgMjE3LCA1MSwgCi0gICAgMzgsIDUyLCAyMjIsIDIzNCwgNTEsIDM4LCAyMTAsIDM1LCA0OCwgMzgsIDUyLCAyNTEsIDE0NywgNTEsIDM4LCA1MiwgMjUxLCAKLSAgICAxNDYsIDM4LCA1MiwgMjMxLCAyMzIsIDM4LCA1MiwgMjMxLCAyMzMsIDUxLCAzOCwgNTIsIDE4MiwgMzgsIDUyLCAyMzUsIAotICAgIDE5MywgMjUxLCAxNDYsIDM4LCA1MiwgOTcsIDgwLCA1MSwgMzgsIDcsIDQsIDEsIDYxLCAzOCwgNywgNCwgMSwgNzUsIDM4LCAKLSAgICA3LCA0LCAxLCA3MywgMzgsIDcsIDQsIDEsIDc2LCAzOCwgNywgNCwgMSwgNzAsIDM4LCA3LCA0LCAxLCAyNTEsIDY2LCAzOCwgCi0gICAgNywgNCwgMSwgMjQ5LCA2MCwgMzgsIDcsIDQsIDEsIDI0MiwgNjAsIDM4LCA3LCA0LCAxLCAxOTMsIDM4LCA3LCA0LCAxLCAKLSAgICAxNTMsIDM4LCA3LCA0LCAxLCAyMTcsIDE1MiwgMzgsIDcsIDQsIDEsIDIxNCwgMTA1LCAzOCwgNywgNCwgMSwgMjExLCAxNzgsIAotICAgIDI2LCA2LCAxLCAyNDEsIDE5NiwgMjYsIDQsIDEsIDI0MSwgMTk2LCAyNiwgNiwgMSwgMjU0LCAyMywgMjIxLCAyNDYsIDI2LCAKLSAgICA0LCAxLCAyNTQsIDIzLCAyMjEsIDI0NiwgMjYsIDIyNywgMTk4LCA1MCwgMjYsIDIzMiwgMTA4LCAyMjcsIDE5OCwgNTAsIAotICAgIDI2LCA2LCAxLCAyMjYsIDUxLCAyNDcsIDIyNywgMjYsIDQsIDEsIDIyNiwgNTEsIDI0NywgMjI3LCAyNiwgMjEwLCAyMTksIAotICAgIDI2LCA0LCAyMjMsIDQ5LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA0LCAyNDYsIDExOCwgMjMyLCA4MywgMjE5LCAKLSAgICAxNzgsIDg3LCAyNiwgNCwgMjIzLCA0OSwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDIyNCwgMTMsIAotICAgIDc4LCAyNiwgMjE2LCAxOCwgMjYsIDI0NywgMjUyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxNiwgMTgsIAotICAgIDI2LCAyNTQsIDk3LCAyMTcsIDIsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDI0NSwgNjQsIAotICAgIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMTYsIAotICAgIDE4LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAxOCwgMjYsIAotICAgIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyNTQsIDE0MywgMjYsIDYsIDEsIAotICAgIDI1MiwgMjYsIDI2LCA2LCAxLCAyNDMsIDEwNywgMjYsIDYsIDEsIDI0OCwgNTQsIDI2LCA2LCAxLCAyNDUsIDEwMCwgMjYsIAotICAgIDYsIDEsIDIxMCwgODUsIDI2LCA2LCAxLCAyNDUsIDYzLCAyNiwgNiwgMSwgMjE2LCAxNzksIDI2LCA2LCAxLCAyMzUsIDE4NSwgCi0gICAgMjYsIDYsIDEsIDIzNCwgMjIyLCAyNiwgNiwgMSwgMjMzLCA5OCwgMjYsIDYsIDEsIDIzMCwgMTAyLCAyNiwgNiwgMSwgMjI3LCAKLSAgICAyMzcsIDI2LCA2LCAxLCAyMTEsIDE1NywgMjYsIDYsIDEsIDIyNiwgMTk5LCAyNiwgNiwgMSwgMjI1LCAxMDgsIDI2LCA2LCAKLSAgICAxLCAyMjMsIDM3LCAyNiwgNiwgMSwgMjE5LCAxNzcsIDI2LCA2LCAxLCAyMTcsIDQxLCAyNiwgNiwgMSwgMjE0LCAxNTcsIAotICAgIDI2LCA2LCAxLCAyMjUsIDEzMywgMjYsIDYsIDEsIDI1MCwgMTEwLCAyNiwgNiwgMSwgMjI0LCAxNjEsIDI2LCA2LCAxLCAKLSAgICAyMjYsIDIwMSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIAotICAgIDI1MSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgMTgsIDI2LCAKLSAgICA0LCAxLCAyNDUsIDY0LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1OCwgMiwgMjQ3LCAyNTIsIDIyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjU0LCAxNDMsIDI2LCA0LCAxLCAyNTIsIDI2LCAyNiwgCi0gICAgNCwgMSwgMjQzLCAxMDcsIDI2LCA0LCAxLCAyNDgsIDU0LCAyNiwgNCwgMSwgMjQ1LCAxMDAsIDI2LCA0LCAxLCAyMTAsIDg1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2MywgMjYsIDQsIDEsIDIxNiwgMTc5LCAyNiwgNCwgMSwgMjM1LCAxODUsIDI2LCA0LCAxLCAyMzQsIAotICAgIDIyMiwgMjYsIDQsIDEsIDIzMywgOTgsIDI2LCA0LCAxLCAyMzAsIDEwMiwgMjYsIDQsIDEsIDIyNywgMjM3LCAyNiwgNCwgMSwgCi0gICAgMjExLCAxNTcsIDI2LCA0LCAxLCAyMjYsIDE5OSwgMjYsIDQsIDEsIDIyNSwgMTA4LCAyNiwgNCwgMSwgMjIzLCAzNywgMjYsIAotICAgIDQsIDEsIDQwLCAyMTksIDE3NywgMjYsIDQsIDEsIDIxOSwgMTc3LCAyNiwgNCwgMSwgMjE3LCA0MSwgMjYsIDQsIDEsIDIxNCwgCi0gICAgMTU3LCAyNiwgNCwgMSwgMjI1LCAxMzMsIDI2LCA0LCAxLCAyNTAsIDExMCwgMjYsIDQsIDEsIDIyNCwgMTYxLCAyNiwgNCwgCi0gICAgMSwgMjI2LCAyMDEsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTEsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAKLSAgICAyNTEsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE4LCAyNiwgCi0gICAgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgMTgsIDI2LCA2LCAyMzQsIDI0NywgODcsIDI2LCAyNTIsIDI3LCA4NywgMjYsIAotICAgIDIxNiwgMTgwLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDEsIDUyLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNTUsIDMsIDIyLCAKLSAgICAyNDEsIDUyLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDgsIDIsIDIyLCAyNDEsIDUyLCA4NywgMjYsIDIyNSwgMTM0LCA4NywgCi0gICAgMjYsIDIyNSwgMTA5LCA4NywgMjYsIDIzNCwgMjQ3LCA4NywgMjYsIDEsIDI1NCwgMjMsIDIzNCwgNiwgMjYsIDQsIDEsIAotICAgIDI1NCwgMjMsIDIzNCwgNiwgMjYsIDEsIDIxOCwgMTM3LCAyNiwgNCwgMSwgMjE4LCAxMzcsIDI2LCAxLCAyNDcsIDIyNywgCi0gICAgMjYsIDQsIDEsIDI0NywgMjI3LCAyNiwgMSwgMjM0LCA2LCAyNiwgNCwgMSwgMjM0LCA2LCAyNiwgMSwgMjIxLCAyNDYsIDI2LCAKLSAgICA0LCAxLCAyMjEsIDI0NiwgODEsIDYsIDEsIDIyMCwgNTUsIDgxLCA0LCAxLCAyMjAsIDU1LCA4MSwgNiwgMSwgMjQ0LCAxNDAsIAotICAgIDgxLCA0LCAxLCAyNDQsIDE0MCwgODEsIDYsIDEsIDIzNCwgMTE3LCA4MSwgNCwgMSwgMjM0LCAxMTcsIDgxLCA2LCAxLCAKLSAgICAyNDEsIDQ1LCA4MSwgNCwgMSwgMjQxLCA0NSwgODEsIDYsIDEsIDI0MywgMTAyLCA4MSwgNCwgMSwgMjQzLCAxMDIsIDgxLCAKLSAgICA2LCAxLCAyMjAsIDIyLCA4MSwgNCwgMSwgMjIwLCAyMiwgODEsIDYsIDEsIDI0OCwgNjksIDgxLCA0LCAxLCAyNDgsIDY5LCAKLSAgICAyNiwgMjM0LCAyMjMsIDg3LCAyNiwgMjIzLCAzOCwgODcsIDI2LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCAxLCAyMTAsIAotICAgIDIyNCwgMjYsIDYsIDIxNiwgMTgwLCA4NywgMjYsIDIzMiwgODMsIDI0NSwgMTAxLCA4NywgMjYsIDIyMywgNDksIDIzMiwgCi0gICAgODMsIDI0NSwgMTAxLCA4NywgMjYsIDYsIDEsIDIyMCwgNywgMjYsIDQsIDEsIDIyMCwgNywgMjYsIDYsIDIzMiwgODMsIAotICAgIDIxOSwgMTc4LCA4NywgMjYsIDYsIDEsIDIyMSwgMjQzLCAyNiwgNCwgMSwgMjIxLCAyNDMsIDI2LCAyMjMsIDM4LCAyLCAKLSAgICAyMTgsIDEwMywgODcsIDI2LCA2LCAyMjMsIDQ5LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA2LCAyNDYsIDExOCwgCi0gICAgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgNiwgMjIzLCA0OSwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgCi0gICAgMzMsIDYsIDEsIDIzNiwgNjEsIDIsIDI0MiwgMTM2LCAzMywgNiwgMSwgMjM1LCAxODksIDMzLCA2LCAxLCAyNDcsIDE2MiwgCi0gICAgMzMsIDYsIDEsIDI0MiwgMTg3LCAzMywgNiwgMSwgMjE0LCAyMDIsIDIzNiwgNjAsIDMzLCA2LCAxLCAyNDYsIDM2LCAzMywgCi0gICAgNiwgMSwgMjUxLCA3NiwgNzMsIDMzLCA2LCAxLCAyMTEsIDgsIDMzLCA2LCAxLCAyMzUsIDEyNiwgMzMsIDYsIDEsIDIzMiwgCi0gICAgMTg3LCAzMywgNiwgMSwgMjI4LCAxNzgsIDMzLCA2LCAxLCAyMTUsIDE3NCwgMzMsIDYsIDEsIDIzNCwgNDgsIDMzLCA2LCAxLCAKLSAgICAyNDAsIDE1NCwgMiwgMjQyLCAxMzYsIDMzLCA2LCAxLCAyMTksIDI1MSwgNzAsIDMzLCA2LCAxLCAyNDYsIDMyLCAzMywgNiwgCi0gICAgMSwgNjEsIDMzLCA2LCAxLCAyNTIsIDc1LCAzMywgNiwgMSwgMjEzLCAyNTUsIDMzLCA2LCAxLCAyNDIsIDIzNiwgMzMsIDYsIAotICAgIDEsIDI0OCwgOTAsIDMzLCA2LCAxLCAyMzYsIDYwLCAzMywgNiwgMSwgMjEwLCA3NCwgMzMsIDYsIDEsIDIxMCwgOTQsIDMzLCAKLSAgICA2LCAxLCA3MywgMzMsIDYsIDEsIDIxOSwgMjUxLCA3MywgMzMsIDYsIDEsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTc0LCAzMywgCi0gICAgNiwgMSwgMjQ1LCAxNTksIDMzLCA2LCAxLCAyNDUsIDE1MCwgMzMsIDYsIDEsIDc2LCAzMywgNiwgMSwgMjI1LCAyMjEsIDMzLCAKLSAgICA2LCAxLCAyNDUsIDkyLCAzMywgNiwgMSwgMjQ1LCA4MiwgMzMsIDYsIDEsIDIxNywgMjIsIDMzLCA2LCAxLCA3MCwgMzMsIDYsIAotICAgIDEsIDI0NSwgMjAyLCAzMywgNiwgMSwgMTYyLCAzMywgNiwgMSwgMjE1LCAxNzgsIDMzLCA2LCAxLCAyNTAsIDEzMSwgMzMsIAotICAgIDYsIDEsIDIyMCwgMTAyLCAzMywgNiwgMSwgMjIwLCA2NSwgMzMsIDYsIDEsIDI0MiwgMywgNTAsIDMzLCA2LCAxLCAyMTEsIAotICAgIDI3LCAzMywgNiwgMSwgMjE5LCA1MiwgNTAsIDMzLCA2LCAxLCA3NSwgMzMsIDYsIDEsIDIxMCwgMjEyLCAzMywgNiwgMSwgCi0gICAgMTkxLCAzMywgNCwgMSwgNjEsIDMzLCA0LCAxLCAyNTIsIDc1LCAzMywgNCwgMSwgMjEzLCAyNTUsIDMzLCA0LCAxLCAyNDIsIAotICAgIDIzNiwgMzMsIDQsIDEsIDI0OCwgOTAsIDMzLCA0LCAxLCAyMzYsIDYwLCAzMywgNCwgMSwgMjEwLCA3NCwgMzMsIDQsIDEsIAotICAgIDIxMCwgOTQsIDMzLCA0LCAxLCA3MywgMzMsIDQsIDEsIDIxOSwgMjUxLCA3MywgMzMsIDQsIDEsIDE3NiwgMzMsIDQsIDEsIAotICAgIDI0NSwgMTc0LCAzMywgNCwgMSwgMjQ1LCAxNTksIDMzLCA0LCAxLCAyNDUsIDE1MCwgMzMsIDQsIDEsIDc2LCAzMywgNCwgMSwgCi0gICAgMjI1LCAyMjEsIDMzLCA0LCAxLCAyNDUsIDkyLCAzMywgNCwgMSwgMjQ1LCA4MiwgMzMsIDQsIDEsIDIxNywgMjIsIDMzLCA0LCAKLSAgICAxLCA3MCwgMzMsIDQsIDEsIDI0NSwgMjAyLCAzMywgNCwgMSwgMTYyLCAzMywgNCwgMSwgMjE1LCAxNzgsIDMzLCA0LCAxLCAKLSAgICAyNTAsIDEzMSwgMzMsIDQsIDEsIDIyMCwgMTAyLCAzMywgNCwgMSwgMjIwLCA2NSwgMzMsIDQsIDEsIDI0MiwgMywgNTAsIAotICAgIDMzLCA0LCAxLCAyMTEsIDI3LCAzMywgNCwgMSwgMjE5LCA1MiwgNTAsIDMzLCA0LCAxLCA3NSwgMzMsIDQsIDEsIDIxMCwgCi0gICAgMjEyLCAzMywgNCwgMSwgMTkxLCAzMywgNCwgMSwgMjM2LCA2MSwgMiwgMjQyLCAxMzYsIDMzLCA0LCAxLCAyMzUsIDE4OSwgCi0gICAgMzMsIDQsIDEsIDI0NywgMTYyLCAzMywgNCwgMSwgMjQyLCAxODcsIDMzLCA0LCAxLCAyMTQsIDIwMiwgMjM2LCA2MCwgMzMsIAotICAgIDQsIDEsIDI0NiwgMzYsIDMzLCA0LCAxLCAyNTEsIDc2LCA3MywgMzMsIDQsIDEsIDIxMSwgOCwgMzMsIDQsIDEsIDIzNSwgCi0gICAgMTI2LCAzMywgNCwgMSwgMjMyLCAxODcsIDMzLCA0LCAxLCAyMjgsIDE3OCwgMzMsIDQsIDEsIDIxNSwgMTc0LCAzMywgNCwgCi0gICAgMSwgMjM0LCA0OCwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDIsIDEzNiwgMzMsIDQsIDEsIDIxOSwgMjUxLCA3MCwgMzMsIAotICAgIDQsIDEsIDI0NiwgMzIsIDMzLCA2LCAxLCAyMjYsIDIwMSwgMzMsIDQsIDEsIDIyNiwgMjAxLCAzMywgNiwgMSwgMjExLCA1OSwgCi0gICAgMzMsIDQsIDEsIDIxMSwgNTksIDMzLCA2LCAxLCAyMzUsIDE4MywgNzUsIDMzLCA0LCAxLCAyMzUsIDE4MywgNzUsIDMzLCA2LCAKLSAgICAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgCi0gICAgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxODMsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDYsIDEsIDIzNSwgMTgzLCAKLSAgICAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNiwgMSwgCi0gICAgMjMzLCAyMzMsIDMzLCA0LCAxLCAyMzMsIDIzMywgMzMsIDYsIDEsIDIyNCwgMTYxLCAzMywgNCwgMSwgMjI0LCAxNjEsIDMzLCAKLSAgICA2LCAxLCAyNDQsIDgyLCAzMywgNCwgMSwgMjQ0LCA4MiwgMzMsIDYsIDEsIDIzNSwgMTQ2LCAzMywgNCwgMSwgMjM1LCAxNDYsIAotICAgIDMzLCA2LCAxLCAyMzUsIDE0NywgMiwgNTIsIDI0MiwgMTM3LCAyNTUsIDE0LCAzMywgNCwgMSwgMjM1LCAxNDcsIDIsIDUyLCAKLSAgICAyNDIsIDEzNywgMjU1LCAxNCwgMzMsIDYsIDEsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjE0LCAyMDUsIDMzLCA2LCAxLCAyMjIsIAotICAgIDE4NSwgMjI2LCAyMDEsIDMzLCA0LCAxLCAyMjIsIDE4NSwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAKLSAgICA2NSwgMzMsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIDY1LCAzMywgNiwgMSwgMjI2LCAxNDAsIDMzLCA0LCAxLCAyMjYsIAotICAgIDE0MCwgMzMsIDYsIDEsIDIzNCwgNiwgMzMsIDQsIDEsIDIzNCwgNiwgMzMsIDIxNiwgMTQ2LCA1MCwgMzgsIDMzLCAyMTYsIAotICAgIDY1LCAzOCwgMzMsIDIyNiwgNjUsIDM4LCAzMywgMjQ4LCAxNTQsIDIyNSwgMTgsIDM4LCAzMywgMjI0LCAxNTUsIDIyNSwgCi0gICAgMTgsIDM4LCAzMywgMjI1LCAzLCAzOCwgMzMsIDI0MCwgMjExLCAyMTYsIDE0NiwgNTAsIDM4LCAzMywgMjMwLCAxOTEsIDUwLCAKLSAgICAzMywgNiwgMSwgMjE5LCAyNTEsIDI0MCwgMTU0LCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjE5LCAyNTEsIDI0MCwgMTU0LCAKLSAgICAyLCAyMTcsIDc3LCAzMywgNiwgMSwgMjIwLCAxNDYsIDUwLCAzMywgNCwgMSwgMjIwLCAxNDYsIDUwLCAzMywgNiwgMSwgCi0gICAgMjQ1LCA5MywgMiwgMjE2LCAxMTQsIDMzLCA0LCAxLCAyNDUsIDkzLCAyLCAyMTYsIDExNCwgMzMsIDYsIDEsIDI0MiwgMjM3LCAKLSAgICAyLCAyMTQsIDE1NiwgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyMTQsIDE1NiwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCA5MSwgCi0gICAgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgCi0gICAgMSwgMjQyLCAyMzcsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgCi0gICAgMjEwLCA3NSwgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNiwgMSwgMjM1LCAxMywgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDI0OCwgMzksIAotICAgIDMzLCA2LCAxLCAyMzUsIDEzLCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCA2NywgOTEsIDMzLCA2LCAxLCAKLSAgICAyMzUsIDEzLCAyLCA5MSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDkxLCAzMywgNiwgMSwgMjUyLCAxMjQsIDE3NiwgMzMsIDQsIAotICAgIDEsIDI1MiwgMTI0LCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0NSwgMTUxLCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNiwgMjcsIDI0NSwgMTUxLCAyNDIsIDIzNiwgMzMsIDQsIDI3LCAyNDUsIDE1MSwgMjQyLCAyMzYsIAotICAgIDMzLCA2LCAxLCAyMjUsIDIyMiwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDIyNSwgMjIyLCAyLCAyMzAsIDIyNCwgCi0gICAgMTAzLCAzMywgNiwgMSwgMjU1LCAyMCwgMTYyLCAzMywgNCwgMSwgMjU1LCAyMCwgMTYyLCAzMywgNiwgMSwgMjQ1LCA4MywgCi0gICAgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0NSwgODMsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMTcsIDIzLCAyLCAyNDgsIDM5LCAKLSAgICAzMywgNCwgMSwgMjE3LCAyMywgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxOCwgMTIxLCA3MCwgMzMsIDQsIDEsIDIxOCwgCi0gICAgMTIxLCA3MCwgMzMsIDYsIDEsIDIxOCwgMTIxLCAxMDQsIDIsIDkxLCAzMywgNCwgMSwgMjE4LCAxMjEsIDEwNCwgMiwgOTEsIAotICAgIDMzLCA2LCAxLCAyNDIsIDQ5LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgMjQ4LCAzOSwgMzMsIDYsIDI3LCAKLSAgICAyMTcsIDIzLCAyMTUsIDE3OCwgMzMsIDQsIDI3LCAyMTcsIDIzLCAyMTUsIDE3OCwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCAKLSAgICAyNDgsIDM5LCAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyNTAsIDEzMiwgMiwgNjcsIDkxLCAKLSAgICAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIyMCwgMzMsIDMzLCA0LCAxLCAyMjAsIDMzLCAzMywgCi0gICAgNiwgMSwgMjU1LCAyMCwgMjUwLCAxMzEsIDMzLCA0LCAxLCAyNTUsIDIwLCAyNTAsIDEzMSwgMzMsIDYsIDEsIDI1NSwgMjAsIAotICAgIDI1MCwgMTMyLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjU1LCAyMCwgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCAxLCAKLSAgICAyMjYsIDU4LCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNTEsIDE0NiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTMsIDIsIDEwMywgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTc1LCAKLSAgICAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjQ1LCAxNzUsIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMTAzLCAKLSAgICAzMywgNCwgMSwgMjQ1LCAxNTEsIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTUxLCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgCi0gICAgMjQ1LCAxNTEsIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyMzQsIDEyNywgMjUwLCAxMzEsIDMzLCA0LCAxLCAyMzQsIDEyNywgCi0gICAgMjUwLCAxMzEsIDMzLCA2LCAxLCAyNDUsIDE2MCwgMiwgMjE3LCA3NywgMzMsIDQsIDEsIDI0NSwgMTYwLCAyLCAyMTcsIDc3LCAKLSAgICAzMywgNCwgMSwgMjI2LCA1OCwgMzMsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAxLCAxMTUsIDIsIDI1MSwgCi0gICAgMTQ2LCAzMywgNiwgMSwgMTE1LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxMTUsIDIsIDI0OCwgMSwgMzMsIDYsIDI3LCAxMTUsIAotICAgIDIzNiwgNjAsIDMzLCA0LCAyNywgMTE1LCAyMzYsIDYwLCAzMywgNiwgMSwgMjM2LCA2MSwgMiwgMjUxLCAxNDYsIDMzLCA0LCAKLSAgICAxLCAyMzYsIDYxLCAyLCAyNTEsIDE0NiwgMzMsIDYsIDEsIDIyMSwgMTk1LCAzMywgNCwgMSwgMjIxLCAxOTUsIDMzLCA2LCAKLSAgICAxLCAyMjEsIDE5NiwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjIxLCAxOTYsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDIxMCwgNzUsIAotICAgIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMSwgCi0gICAgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDI1NSwgMjAsIDI0NiwgMzYsIDMzLCA0LCAxLCAyNTUsIAotICAgIDIwLCAyNDYsIDM2LCAzMywgNiwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCAzMywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgCi0gICAgMjMyLCAzMywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDMzLCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjUyLCAxMzQsIDc2LCAzMywgCi0gICAgNCwgMSwgMjUyLCAxMzQsIDc2LCAzMywgNiwgMSwgMjUyLCAxMzQsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjUyLCAKLSAgICAxMzQsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMTYwLCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxNjAsIDIsIDI0OCwgMSwgCi0gICAgMzMsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDMzLCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMyLCAzMywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNDgsIDEsIDMzLCA0LCAxLCAxMDQsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDQsIDEsIAotICAgIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyNTAsIDEzMiwgMiwgCi0gICAgMjQ4LCAxLCAzMywgNiwgMSwgMjQyLCAyMzcsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgMjQ4LCAzOSwgCi0gICAgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIAotICAgIDI0MiwgMjM3LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgCi0gICAgMzMsIDYsIDEsIDI0MiwgNDksIDIsIDEwMywgMzMsIDQsIDEsIDI0MiwgNDksIDIsIDEwMywgMzMsIDYsIDEsIDI0MiwgNDksIAotICAgIDIsIDkxLCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgOTEsIDMzLCA2LCAxLCAyMzQsIDE0LCAyNDgsIDkwLCAzMywgNCwgMSwgCi0gICAgMjM0LCAxNCwgMjQ4LCA5MCwgMzMsIDYsIDEsIDIzNCwgMTQsIDI0NywgMTYyLCAzMywgNCwgMSwgMjM0LCAxNCwgMjQ3LCAKLSAgICAxNjIsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTAsIDI3LCAzMywgNCwgMSwgMjM0LCAxNCwgMjEwLCAyNywgMzMsIDYsIDEsIAotICAgIDIzNCwgMTQsIDI0NiwgMzAsIDMzLCA0LCAxLCAyMzQsIDE0LCAyNDYsIDMwLCAzMywgNiwgMSwgMjM0LCAxNCwgMjMyLCAKLSAgICAxODcsIDMzLCA0LCAxLCAyMzQsIDE0LCAyMzIsIDE4NywgMzMsIDYsIDEsIDIzNCwgMTQsIDIyOCwgMTc4LCAzMywgNCwgMSwgCi0gICAgMjM0LCAxNCwgMjI4LCAxNzgsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTksIDEwOSwgMzMsIDQsIDEsIDIzNCwgMTQsIDIxOSwgCi0gICAgMTA5LCAzMywgNiwgMSwgMjM0LCAxNCwgMjE2LCA2MCwgMzMsIDQsIDEsIDIzNCwgMTQsIDIxNiwgNjAsIDMzLCA2LCAxLCAKLSAgICAyMjMsIDQ5LCAyMTAsIDk0LCAzMywgNCwgMSwgMjIzLCA0OSwgMjEwLCA5NCwgMzMsIDYsIDEsIDI0NSwgMTc1LCAyLCAxMDMsIAotICAgIDMzLCA0LCAxLCAyNDUsIDE3NSwgMiwgMTAzLCAzMywgNiwgMSwgMjMyLCAyNTQsIDMzLCA0LCAxLCAyMzIsIDI1NCwgMzMsIAotICAgIDYsIDEsIDIyMywgMzksIDMzLCA0LCAxLCAyMjMsIDM5LCAzMywgNiwgMSwgMjExLCA5MiwgMzMsIDQsIDEsIDIxMSwgOTIsIAotICAgIDMzLCA2LCAxLCAyMjQsIDg4LCAzMywgNCwgMSwgMjI0LCA4OCwgMzMsIDYsIDEsIDIxMiwgMjIsIDMzLCA0LCAxLCAyMTIsIAotICAgIDIyLCAzMywgNiwgMSwgMjU0LCAxNjYsIDE3NiwgMzMsIDQsIDEsIDI1NCwgMTY2LCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE3NSwgCi0gICAgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTc1LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjQ1LCAKLSAgICAxNTEsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE1MSwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIAotICAgIDIyNSwgMjIyLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjI1LCAyMjIsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMjAsIDM0LCAKLSAgICAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjIwLCAzNCwgMiwgMjQ4LCAzOSwgMTUwLCA2LCAxLCAyNTMsIDE2NCwgMTUwLCA2LCAKLSAgICAxLCAyNTIsIDM5LCAxNTAsIDYsIDEsIDI0MiwgMjAzLCAxNTAsIDYsIDEsIDI0OCwgMjIxLCAxNTAsIDYsIDEsIDI0NSwgCi0gICAgMjEzLCAxNTAsIDYsIDEsIDIxMCwgMTE2LCAxNTAsIDYsIDEsIDI0NSwgMTk3LCAxNTAsIDYsIDEsIDI0NSwgNjUsIDE1MCwgCi0gICAgNiwgMSwgMTExLCAxNTAsIDYsIDEsIDIxMCwgNzQsIDE1MCwgNiwgMSwgMjM1LCAyMjcsIDE1MCwgNiwgMSwgMjMyLCAxOTAsIAotICAgIDE1MCwgNiwgMSwgMjExLCAxNjAsIDE1MCwgNiwgMSwgMjUxLCAzMywgMTUwLCA2LCAxLCAyMzQsIDE2NSwgMTUwLCA2LCAxLCAKLSAgICAyNDEsIDY4LCAxNTAsIDYsIDEsIDIzNSwgMTQxLCAxNTAsIDYsIDEsIDI0MiwgMjQ2LCAxNTAsIDYsIDEsIDI1MCwgMTI2LCAKLSAgICAxNTAsIDYsIDEsIDIzMSwgNTgsIDE1MCwgNiwgMSwgMjExLCA4LCAxNTAsIDYsIDEsIDIyOCwgMzksIDE1MCwgNiwgMSwgCi0gICAgMjIwLCAxMDIsIDE1MCwgNiwgMSwgMjEzLCAxMzgsIDE1MCwgNiwgMSwgMjUwLCAxNTcsIDE1MCwgNiwgMSwgMjI1LCAyMDUsIAotICAgIDE1MCwgNiwgMSwgMjM1LCAxMTAsIDE1MCwgNiwgMSwgMjA1LCAxNTAsIDYsIDEsIDIyMSwgMTYxLCAxNTAsIDYsIDEsIDIxMywgCi0gICAgMTc5LCAxNTAsIDYsIDEsIDIxNiwgNjIsIDE1MCwgNiwgMSwgMjIzLCA5NSwgMTUwLCA2LCAxLCAyNDksIDIzOCwgMTUwLCA2LCAKLSAgICAxLCAyMTAsIDI0OSwgMTUwLCA2LCAxLCAyMjUsIDQ2LCAxNTAsIDYsIDEsIDIzNCwgMTc2LCAxNTAsIDYsIDEsIDIyNiwgCi0gICAgMjIyLCAxNTAsIDYsIDEsIDI0NCwgMTQyLCAxNTAsIDU4LCAxLCA0MywgMTYzLCAyMjIsIDIzMywgMTUwLCAyNTQsIDU3LCAKLSAgICAxNTAsIDI0NSwgMTU0LCA3OCwgMTUwLCAyNDUsIDMxLCA3OCwgMTUwLCAyNDksIDIxOSwgMTUwLCAyMjQsIDEzLCA3OCwgCi0gICAgMTUwLCAyNTUsIDIxLCA3OCwgMTUwLCA0LCAxLCAyNTMsIDE2NCwgMTUwLCA0LCAxLCAyNTIsIDM5LCAxNTAsIDQsIDEsIAotICAgIDI0MiwgMjAzLCAxNTAsIDQsIDEsIDI0OCwgMjIxLCAxNTAsIDQsIDEsIDI0NSwgMjEzLCAxNTAsIDQsIDEsIDIxMCwgMTE2LCAKLSAgICAxNTAsIDQsIDEsIDI0NSwgMTk3LCAxNTAsIDQsIDEsIDI0NSwgNjUsIDE1MCwgNCwgMSwgMTExLCAxNTAsIDQsIDEsIDIxMCwgCi0gICAgNzQsIDE1MCwgNCwgMSwgMjM1LCAyMjcsIDE1MCwgNCwgMSwgMjMyLCAxOTAsIDE1MCwgNCwgMSwgMjExLCAxNjAsIDE1MCwgCi0gICAgNCwgMSwgMjUxLCAzMywgMTUwLCA0LCAxLCAyMzQsIDE2NSwgMTUwLCA0LCAxLCAyNDEsIDY4LCAxNTAsIDQsIDEsIDIzNSwgCi0gICAgMTQxLCAxNTAsIDQsIDEsIDI0MiwgMjQ2LCAxNTAsIDQsIDEsIDI1MCwgMTI2LCAxNTAsIDQsIDEsIDIzMSwgNTgsIDE1MCwgCi0gICAgNCwgMSwgMjExLCA4LCAxNTAsIDQsIDEsIDIyOCwgMzksIDE1MCwgNCwgMSwgMjIwLCAxMDIsIDE1MCwgNCwgMSwgMjEzLCAKLSAgICAxMzgsIDE1MCwgNCwgMSwgMjUwLCAxNTcsIDE1MCwgNCwgMSwgMjI1LCAyMDUsIDE1MCwgNCwgMSwgMjM1LCAxMTAsIDE1MCwgCi0gICAgNCwgMSwgMjA1LCAxNTAsIDQsIDEsIDIyMSwgMTYxLCAxNTAsIDQsIDEsIDIxMywgMTc5LCAxNTAsIDQsIDEsIDIxNiwgNjIsIAotICAgIDE1MCwgNCwgMSwgMjIzLCA5NSwgMTUwLCA0LCAxLCAyNDksIDIzOCwgMTUwLCA0LCAxLCAyMTAsIDI0OSwgMTUwLCA0LCAxLCAKLSAgICAyMjUsIDQ2LCAxNTAsIDQsIDEsIDIzNCwgMTc2LCAxNTAsIDQsIDEsIDIyNiwgMjIyLCAxNTAsIDQsIDEsIDI0NCwgMTQyLCAKLSAgICAxNTAsIDQsIDI3LCAyNDUsIDIxNCwgMjEwLCAyNDksIDE1MCwgMjQzLCAyMjksIDIxOCwgMTI5LCAxNTAsIDI0MCwgMTY4LCAKLSAgICAxNTAsIDI0NiwgOTUsIDUwLCA5NCwgMjU1LCAxNSwgMjQ1LCA1NywgOTQsIDI1NSwgMTUsIDIyMSwgMTYyLCA5NCwgMjU1LCAKLSAgICAxNSwgMjIwLCA4OCwgOTQsIDI1NSwgMTUsIDIxMCwgMTA0LCAyMjQsIDcxLCA5NCwgMjU1LCAxNSwgMjEwLCAxMDQsIDI0MywgCi0gICAgMTI1LCA5NCwgMjU1LCAxNSwgMjE2LCA3NSwgOTQsIDI1NSwgMTUsIDIyMywgNDcsIDk0LCAyNTUsIDE1LCAyMTAsIDEwMywgCi0gICAgOTQsIDI1NSwgMTUsIDIyNSwgMjQ1LCA5NCwgMjU1LCAxNSwgMjExLCAyMCwgOTQsIDI1NSwgMTUsIDIxNiwgMjE0LCA5NCwgCi0gICAgMjU1LCAxNSwgMjQzLCA0MSwgOTQsIDI1NSwgMTUsIDI0MywgNDIsIDIzMCwgNjksIDk0LCAyNTUsIDE1LCAyNDMsIDM5LCAKLSAgICA5NCwgMjU1LCAxNSwgMjI0LCA3MiwgMjI2LCAxNiwgOTQsIDI1NSwgMTUsIDIxNiwgMjUzLCAyNDMsIDU2LCA5NCwgMjU1LCAKLSAgICAxNSwgMjI1LCAyMjYsIDk0LCAyNTUsIDE1LCAyNTMsIDIwMCwgMjQyLCA0MSwgOTQsIDI1NSwgMTUsIDIzMCwgNzksIDk0LCAKLSAgICAyNTUsIDE1LCAyMzEsIDIwOCwgOTQsIDI1NSwgMTUsIDIzMSwgNDksIDk0LCAyNTUsIDE1LCAyMzEsIDUwLCAyMzQsIDE3NywgCi0gICAgOTQsIDI1NSwgMTUsIDI0OCwgMTYzLCA5NCwgMjU1LCAxNSwgMjI0LCA4MywgOTQsIDI1NSwgMTUsIDIxNiwgMjUzLCAyMjQsIAotICAgIDY3LCA5NCwgMjU1LCAxNSwgMjExLCAzMCwgMjUyLCA0MCwgMjEwLCAyMzAsIDk0LCAyNTUsIDE1LCAyMjYsIDIwNywgOTQsIAotICAgIDI1NSwgMTUsIDIzNiwgMTksIDk0LCAyNTUsIDE1LCAyNDgsIDcwLCA5NCwgMjU1LCAxNSwgMjEwLCAzMywgOTQsIDE2NCwgCi0gICAgMjMxLCAxNDMsIDI1MCwgMzUsIDk0LCAyMjUsIDExLCAyMjAsIDM2LCA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyMSwgMTYyLCAKLSAgICA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyNSwgMjM5LCA5NCwgMjI1LCAxMSwgMjQxLCAyNTAsIDIyNCwgNzYsIDk0LCAyMjUsIAotICAgIDExLCAyNDEsIDE1OCwgOTQsIDIyNSwgMTEsIDIxNSwgMTc2LCA5NCwgMjI1LCAxMSwgMjIxLCAxNjIsIDk0LCAyMjUsIDExLCAKLSAgICAyMjUsIDIzOSwgOTQsIDIyNSwgMTEsIDIyNCwgNzYsIDk0LCAyMjUsIDExLCAyNDEsIDYxLCA5NCwgMjI1LCAxMSwgMjQxLCAKLSAgICA2MiwgMjQxLCAyNTIsIDMxLCAyMTQsIDMsIDk0LCAyMjUsIDExLCAyMjQsIDE3LCA5NCwgMjI1LCAxMSwgMjQ4LCAyMDgsIAotICAgIDE3NywgMjMxLCAxNzEsIDk0LCAyMjUsIDExLCAyMzEsIDM4LCA5NCwgMjI0LCAxNDEsIDIzMSwgMTY4LCA5NCwgMjI1LCAxMSwgCi0gICAgMjIzLCAxNjksIDk0LCAyMjQsIDE0MSwgMjI1LCAyNDcsIDk0LCAyMjUsIDExLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIAotICAgIDIyNSwgMTEsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDIyNCwgMTQxLCAyMTksIDUzLCAyMjUsIDI0MSwgOTQsIDE2NCwgCi0gICAgMjE0LCAxNjAsIDI0NywgMTIwLCA5NCwgMTY0LCAyMzIsIDEwOCwgMjQ3LCAxMjAsIDk0LCAyMjQsIDE0MSwgMjI3LCAxOTUsIAotICAgIDI0MiwgNDAsIDk0LCAyMjUsIDExLCAyMjQsIDc3LCAyMjQsIDcxLCA5NCwgMSwgMjU0LCAxNzAsIDk0LCAxLCAyNTIsIDI4LCAKLSAgICA5NCwgMSwgMjQyLCAyMDEsIDk0LCAxLCAyNDgsIDE4OSwgOTQsIDEsIDI0MSwgMjM4LCA5NCwgMSwgMjE0LCAzLCA5NCwgMSwgCi0gICAgMjEwLCA5NywgOTQsIDEsIDI0MSwgMTk3LCA5NCwgMSwgMjE2LCAyMzAsIDk0LCAxLCAyMTAsIDIzMywgOTQsIDEsIDQwLCAKLSAgICAyMzQsIDI1MCwgOTQsIDEsIDIzNCwgMjUwLCA5NCwgMSwgMjMzLCA5NCwgOTQsIDEsIDQwLCAyMzEsIDY1LCA5NCwgMSwgCi0gICAgMjMxLCA2NSwgOTQsIDEsIDQwLCAyMjcsIDE5NCwgOTQsIDEsIDIyNywgMTk0LCA5NCwgMSwgMjIxLCAyNDksIDk0LCAxLCAKLSAgICAyNTMsIDE2MiwgOTQsIDEsIDQwLCAyMjUsIDIyMSwgOTQsIDEsIDIyNSwgMjIxLCA5NCwgMSwgNDAsIDIxNSwgMTc5LCA5NCwgCi0gICAgMSwgMjE1LCAxNzksIDk0LCAxLCAyMjQsIDM5LCA5NCwgMSwgMjIzLCA2NywgOTQsIDEsIDIyMCwgMjAsIDk0LCAxLCAyMTcsIAotICAgIDM4LCA5NCwgMjcsIDIxMSwgNiwgNTIsIDIxNCwgMywgOTQsIDI3LCAyMTEsIDYsIDIxNCwgNCwgMjEwLCAyMzMsIDk0LCAyNywgCi0gICAgMjExLCA2LCA1MiwgMjEwLCAyMzMsIDk0LCAyMjQsIDE0MSwgMjQzLCA0MSwgOTQsIDIyNCwgMTQxLCAyNDMsIDM5LCAxMCwgCi0gICAgNTQsIDUwLCAxMCwgNSwgMjIxLCAyNDIsIDEwLCAyNDQsIDMwLCAyMzEsIDE1NCwgMTAsIDUsIDIyMiwgMjMsIDEwLCA1LCAKLSAgICAyMjEsIDI0NSwgMjU0LCAzNywgMjQ5LCAxMDksIDIyMiwgMTkzLCAyNTQsIDM3LCAyNDQsIDQsIDIyMiwgMTkzLCAxMCwgCi0gICAgMjIzLCAxMzQsIDI1NCwgMzcsIDIyNSwgMTgzLCAyMzAsIDE5MywgNTAsIDI1NCwgMzcsIDIyNSwgMTgzLCAyMTYsIDI0OCwgCi0gICAgMjE2LCAxNDgsIDUwLCAyNTQsIDIyMSwgNTAsIDEwLCAyNDksIDIxOSwgMTAsIDI0OCwgMTUwLCAyMjAsIDEzNywgMTAsIAotICAgIDIyNSwgMTMsIDIxMywgMjQxLCA1MCwgMTAsIDUsIDIzMCwgMTc0LCAxMCwgNSwgMjIyLCAzLCAyNTQsIDE3MiwgMjEyLCA0NSwgCi0gICAgMTAsIDUsIDI1NCwgMTcyLCAyNTMsIDIyMSwgMTAsIDUsIDIyMywgMTY3LCAyNTQsIDE3MSwgMTAsIDUsIDIyMywgMTc1LCAKLSAgICAyNTQsIDE1MiwgMjU0LCAxMDQsIDEwLCA1LCAyMTcsIDcwLCAxMCwgNCwgMTI1LCAyMTcsIDgwLCAxMCwgNCwgMTI1LCAyNywgCi0gICAgMTEyLCAyLCAyMzMsIDEwMywgMiwgMjExLCA0MywgMTAsIDQsIDEyNSwgMjEwLCAxMDgsIDEwLCA0LCAyNDQsIDE2NSwgMTAsIAotICAgIDQsIDI0OCwgMTg0LCAxMCwgNCwgMjM0LCAyMDUsIDEwLCAyMjAsIDE1MCwgMTAsIDIxNSwgMjExLCA1OSwgMjI0LCAxNDEsIAotICAgIDc4LCAxMCwgMjI0LCAxMywgNzgsIDEwLCAxLCAyMzQsIDIwOSwgMjExLCA0MywgMTAsIDEsIDI0MiwgMTksIDEwLCAxLCAKLSAgICAxMTIsIDIsIDIzMSwgMjI4LCA0OCwgMTAsIDEsIDExMiwgMiwgMjAyLCA0OCwgMTAsIDEsIDIxMiwgMzEsIDIsIDIwMiwgNDgsIAotICAgIDEwLCAxLCAxMTIsIDIsIDIwMiwgNTEsIDEwLCAxLCA3OSwgMiwgMjAyLCA0OCwgMTAsIDEsIDI1NCwgMTcwLCAxMCwgMSwgCi0gICAgMjUyLCA1NCwgMTAsIDEsIDIxNywgOCwgMjMxLCAxNjQsIDEwLCAxLCAyMTcsIDcsIDEwLCAxLCAyMTYsIDE5MiwgMTAsIDEsIAotICAgIDIzNSwgMTIzLCAxMCwgMSwgMjQyLCAzNywgMTAsIDEsIDIzNCwgMTI5LCAxMCwgMSwgMjQ4LCAxOTUsIDEwLCAxLCAyMTYsIAotICAgIDIwMiwgMTAsIDEsIDIyMywgOTUsIDEwLCAxLCAyMTAsIDEwOCwgMTAsIDEsIDIyMSwgMTY2LCAxMCwgMSwgMjIwLCA1OSwgCi0gICAgMTAsIDEsIDIyMiwgMjYsIDEwLCAxLCAyNDgsIDIxNiwgMTAsIDEsIDIxNywgODAsIDEwLCAxLCAyMTAsIDExMSwgMTAsIDEsIAotICAgIDI1NCwgMTk2LCAxMCwgMSwgMjQyLCAyNDQsIDEwLCAxLCAyMzQsIDE3NSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjM0LCAKLSAgICAxNzUsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDc5LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDEzNCwgMTcwLCA0OCwgMTAsIAotICAgIDIxNywgNDMsIDEwLCAxLCAyNDQsIDE0MiwgMTAsIDEsIDIyNCwgODEsIDEwLCAxLCAyMzQsIDI1MCwgMTAsIDEsIDIzMywgCi0gICAgMTAyLCAxMCwgMSwgMjMxLCA3OCwgMTAsIDEsIDIyOCwgNjIsIDEwLCAxLCAyNDEsIDIxOCwgMTAsIDEsIDIxMiwgMzAsIDEwLCAKLSAgICAxLCAxMTIsIDIzMSwgMTkyLCAxMCwgMSwgMjExLCA0MywgMTAsIDI0NCwgMTYzLCAxMCwgMjQ4LCAxODIsIDEwLCAyMzQsIAotICAgIDIwMywgMTAsIDI0NCwgMTY1LCAxMCwgMjQ4LCAxODQsIDEwLCAyMzQsIDIwNSwgMTAsIDIyMCwgOTMsIDEwLCAyMTgsIDQ1LCAKLSAgICAxMCwgMjMxLCAyMjYsIDQ4LCAxMCwgMjAyLCA0OCwgMTAsIDIwMiwgNTEsIDEwLCAyMTgsIDY1LCAyNTQsIDE3MCwgMTAsIAotICAgIDIzNSwgMTkzLCAyNDgsIDE4NCwgMTAsIDE2NCwgMjI4LCA2MywgMjQyLCAyMTgsIDEwLCAyMDksIDI1NSwgMTAsIDI1LCA1LCAKLSAgICA0LCAyMTQsIDEwNiwgNDgsIDEwLCAyNSwgNSwgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA0OCwgMTAsIDI1LCA1LCA1OSwgNTEsIAotICAgIDEwLCAyMjMsIDQ5LCAyNDgsIDE4NCwgMTAsIDI0NCwgMTY2LCAyLCAxMTMsIDI0NywgMTE4LCAxMCwgMjEyLCAzMiwgMjAyLCAKLSAgICA1MSwgMjU0LCAzNywgMjEsIDIxMCwgODYsIDI1NCwgMzcsIDIxLCAxMTAsIDI1NCwgMzcsIDIxLCAxMDUsIDI1NCwgMzcsIAotICAgIDIxLCAxNTgsIDI1NCwgMzcsIDIxLCAxNjEsIDI1NCwgMzcsIDIxLCAxODksIDI1NCwgMzcsIDIxLCAxOTQsIDI1NCwgMzcsIAotICAgIDIxLCAxOTgsIDI1NCwgMzcsIDIxLCAxOTUsIDI1NCwgMzcsIDIxLCAyMDAsIDEwLCAyMjUsIDE4MiwgNTAsIDEwLCAyNDgsIAotICAgIDgzLCAyMjAsIDEzNywgMTAsIDIxNiwgMTQ2LCAyMjAsIDEzNywgMTAsIDI0NCwgODEsIDIyNSwgOSwgMjE4LCAxNTYsIDEwLCAKLSAgICAxLCAyNDcsIDExOSwgMjUyLCA1NCwgMTAsIDEsIDI0NywgMTE5LCAyMjQsIDgxLCAxMCwgMSwgMjE4LCAyMywgMjU0LCAxNzAsIAotICAgIDEwLCAxLCAxMTIsIDIxMiwgNDYsIDEwLCAxLCAxMTIsIDIsIDIxMiwgMzIsIDIwMiwgNDgsIDEwLCAxLCAxMTIsIDIsIDIxMiwgCi0gICAgMzIsIDIwMiwgNTEsIDEwLCAxLCAxMjUsIDI0MiwgMTksIDEwLCAxLCAxMjUsIDIwMiwgMjU0LCAxNzAsIDEwLCAxLCAxMjUsIAotICAgIDIwMiwgMjEyLCAzMCwgMTAsIDEsIDEwNCwgMiwgMjAyLCA0OCwgMTAsIDEsIDEyNSwgMjAyLCAyMTEsIDQzLCAxMCwgMSwgCi0gICAgMjE1LCAxNDgsIDEwLCAxLCAyMTUsIDE0NiwgMTAsIDEsIDI1MiwgNjQsIDEwLCAxLCAyMTcsIDgsIDIsIDIyMiwgMjMzLCAKLSAgICAxMCwgMSwgMjE3LCA4LCAyLCAxMzQsIDE3MCwgNzcsIDI0NiwgMTAzLCAxMCwgMSwgMjI1LCAyMDUsIDEwLCAxLCAyMTcsIDUsIAotICAgIDEwLCAxLCAyNTIsIDUyLCAxMCwgMSwgMTIyLCAyLCAyMDIsIDQ4LCAxMCwgMSwgMTIyLCAyLCAxMTMsIDE3MCwgNjcsIDQ4LCAKLSAgICAxMCwgMSwgMjI3LCAxNTMsIDEwLCAxLCAyNDYsIDQzLCAxMCwgMSwgMTIyLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIAotICAgIDI2LCAxMCwgMSwgMjE3LCAyNCwgMTAsIDEsIDI0OCwgMTMwLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDIyMiwgMjMzLCAxMCwgMSwgCi0gICAgMjQ4LCAxOTYsIDIsIDU5LCA1MSwgMTAsIDEsIDI0OCwgMTk2LCAyLCA1OSwgMjUyLCA0MywgMjIsIDQsIDIxNywgODAsIDEwLCAKLSAgICAxLCAyNDgsIDIwMSwgMTAsIDEsIDI0OCwgMTMyLCAxMCwgMSwgMjQ2LCA3MCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAxMzQsIAotICAgIDE3MCwgNzcsIDI0NiwgMTAzLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyMjIsIDE3MSwgCi0gICAgMTAsIDEsIDIyMywgOTYsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMjMsIAotICAgIDk2LCAyLCA1OSwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA1OSwgCi0gICAgMjUyLCA0MywgMjIsIDU5LCA0OCwgMTAsIDEsIDIyMywgOTYsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIzNSwgMTIwLCAKLSAgICAxMCwgMSwgMjIzLCA5NiwgMiwgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCA1OSwgMjUyLCA0MywgMjIsIAotICAgIDU5LCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyMjEsIDE2NywgMiwgMTM0LCAxNzAsIAotICAgIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMjIsIDI3LCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAyMjIsIAotICAgIDI3LCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIDgxLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgCi0gICAgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDU5LCAyMzAsIAotICAgIDEwOSwgNTEsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDUxLCAxMCwgMSwgMjEzLCAyNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgCi0gICAgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjI1LCAyMDMsIDEwLCAxLCAyMjQsIDgyLCAyLCA1OSwgNDgsIDEwLCAxLCAyMjQsIDgyLCAKLSAgICAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMzQsIDE3NCwgMTAsIDEsIDIxNywgMjUwLCAyMzQsIDI1MCwgMTAsIDEsIDIzNCwgCi0gICAgMjUxLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIzNCwgMjUxLCAyLCA1OSwgNDgsIDEwLCAxLCAyMjksIDc5LCAxMCwgMSwgMjM0LCAKLSAgICAyNTEsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDI0MywgMTIyLCAxMCwgMSwgMjQzLCAxMjMsIDIsIDIyMiwgMjMzLCAxMCwgCi0gICAgMSwgMjI5LCAyLCAxMCwgMSwgMjQzLCAxMjMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDI0MiwgMTAxLCAxMCwgMSwgMjQzLCAKLSAgICAxMjMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIzMywgMTAzLCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIzMywgMTAzLCAKLSAgICAyLCA1OSwgNDgsIDEwLCAxLCAyMzMsIDEwMywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjMzLCAxMDMsIDIsIDEzNCwgCi0gICAgMTcwLCA1MSwgMTAsIDEsIDIyOCwgNjMsIDIsIDU5LCA1MSwgMTAsIDEsIDIyOCwgNjMsIDI0MiwgMjE4LCAxMCwgMSwgMjIyLCAKLSAgICAyMTQsIDEwLCAxLCAyMjgsIDYzLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIyOCwgNjMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MSwgMTAsIDEsIDIxNywgMjcsIDIsIDU5LCA0OCwgMTAsIDEsIDI0MSwgMjE5LCAyLCA3OSwgCi0gICAgNDgsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzEsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDIsIDIwMiwgNDgsIDEwLCAKLSAgICAxLCAyMTcsIDgsIDIzMSwgMTY1LCAyNDIsIDE3MSwgMTAsIDEsIDIxMiwgMzEsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjM0LCAKLSAgICA3MywgMjI2LCAyMzQsIDEwLCAxLCAyMjYsIDIzNCwgMTAsIDEsIDcwLCAxMCwgMSwgMjEwLCAyMTIsIDEwLCAxLCAyMzQsIAotICAgIDczLCAyMTAsIDIxMiwgMTAsIDEsIDIxMiwgMzEsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIxMywgMjU1LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDIxMSwgNDMsIDEwLCAxLCA3OSwgMiwgMjE3LCA3NywgMTAsIDEsIDc5LCAyLCA0LCAyMTQsIDEwNSwgMTAsIAotICAgIDEsIDIxMiwgMzEsIDIsIDU5LCA0OCwgMTAsIDEsIDc1LCAxMCwgMSwgNzksIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDc5LCAKLSAgICAyNTIsIDEzMiwgMTAsIDEsIDc5LCAyNTIsIDEzMywgMiwgMjAyLCA0OCwgMTAsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTAsIDEsIAotICAgIDI1NCwgMjQzLCAxMCwgNCwgMTI1LCAyNywgMjIyLCAyNywgMiwgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTIsIDEwLCA0LCAKLSAgICAxMjUsIDI3LCAyMjQsIDgyLCAyLCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MiwgMTAsIDQsIDEyNSwgNjYsIDY1LCAxNywgCi0gICAgMTAsIDQsIDEyNSwgMjMzLCAxMDMsIDI1NCwgMTcwLCAxMCwgNCwgMTI1LCAyMzUsIDEyMywgMTAsIDQsIDEyNSwgMTM0LCAKLSAgICAyNDcsIDExOCwgMTAsIDQsIDEyNSwgMjIxLCAxNjYsIDEwLCAyNDUsIDE0MywgNjQsIDI1MywgMTY2LCAxMCwgMjE4LCAxNTIsIAotICAgIDY0LCAyMjIsIDEzOCwgMjQ1LCAxNzUsIDI0MSwgMTU1LCAxMCwgNCwgMTI1LCAyMjIsIDE4MywgMjEwLCA4NiwgMTAsIDQsIAotICAgIDEyNSwgMjE0LCAxNTksIDIyMywgMTE1LCAyMTAsIDg2LCAxMCwgNCwgMTI1LCAyNDcsIDExOSwgMjQxLCAyMzYsIDY0LCAKLSAgICAyMzQsIDEyOSwgMTAsIDQsIDEyNSwgNjYsIDUzLCAxNywgMTAsIDQsIDEyMSwgMjIxLCAxNjYsIDEwLCA0LCAxMjUsIDIzMSwgCi0gICAgMjI3LCAxMCwgNCwgMjEyLCAzMCwgMTAsIDQsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIAotICAgIDIyOCwgNjIsIDEwLCAyMjUsIDQxLCA2NCwgMjIyLCAxMywgMTAsIDI0NSwgMTUyLCAyNTAsIDE3NSwgMTIxLCAyMTgsIDEyOSwgCi0gICAgMTAsIDI0NSwgMTUyLCAyNTAsIDE3NSwgMTI1LCAyMTgsIDEyOSwgMTAsIDIyMiwgMTgzLCAxMjUsIDIxOCwgMTMwLCAyLCAKLSAgICAyNDQsIDEwNCwgMjUwLCAxNzQsIDEwLCA0LCAxMjEsIDIzMSwgNzgsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMjM1LCAxOTMsIAotICAgIDIxNCwgMTA1LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMjEwLCA4NiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEwNSwgMjQ1LCAyMiwgCi0gICAgMjU0LCAzNywgMjEsIDE1OCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE2MSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE4OSwgCi0gICAgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE5NCwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDE5OCwgMjQ1LCAyMiwgMjU0LCAzNywgCi0gICAgMjEsIDE5NSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDIwMCwgMTAsIDEsIDIyMCwgNjAsIDIsIDU5LCA1MSwgMTAsIDEsIAotICAgIDI0OCwgMjE3LCAyLCA1OSwgNTEsIDEwLCAxLCAyNDIsIDI0NSwgMiwgNTksIDUxLCAxMCwgNSwgMjE5LCAxNTgsIDI1NCwgCi0gICAgMTI2LCAxMCwgNSwgMjE5LCAxNTgsIDIyNCwgMjM1LCAyMzEsIDU4LCAxMCwgMSwgMjQxLCAyMTksIDIsIDIzNSwgMTkzLCAKLSAgICAyMTQsIDEwNSwgMTg4LCAyNDUsIDE0MywgNjQsIDIyNiwgMTQsIDE4OCwgMjE4LCAxOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAxODgsIDIxOCwgNjcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTg4LCAyMTgsIDE5LCAyNDksIDIyNiwgMTg4LCAyMTgsIDY3LCAKLSAgICAyNDksIDIyNiwgMTg4LCAyMDMsIDI0OSwgMjI2LCAxODgsIDI0OSwgMjI3LCAyMTksIDEwNiwgMjMzLCA0NiwgMTg4LCAyNDksIAotICAgIDIyNywgMjE5LCAxMDYsIDIyMiwgMjUxLCAxODgsIDIxOCwgMTksIDI0OSwgMjI3LCAyMTksIDEwNiwgMjMzLCA0NiwgMTg4LCAKLSAgICAyMTgsIDY3LCAyNDksIDIyNywgMjE5LCAxMDYsIDIyMiwgMjUxLCAxODgsIDI0OSwgMTgwLCAxODgsIDI0MiwgMSwgMjI2LCAKLSAgICAyNTAsIDE4OCwgMjQyLCAxLCAyMzEsIDM2LCAxODgsIDI0MiwgMSwgMjUzLCAyMTgsIDE4OCwgMjU1LCAyMSwgNzgsIDE4OCwgCi0gICAgMSwgMjU0LCAxNzQsIDE4OCwgMSwgMjE4LCAyMywgMjU0LCAxNzQsIDE4OCwgMSwgMjUyLCAyNSwgMTg4LCAxLCAyNDMsIAotICAgIDExMywgMTg4LCAxLCAyNDMsIDExNCwgMjQzLCA5MSwgMTg4LCAxLCAyNDgsIDE5MiwgMTg4LCAxLCAyNDcsIDExOSwgMjQ4LCAKLSAgICAxOTMsIDIyMiwgMjI5LCAxODgsIDEsIDI0MSwgMjM4LCAxODgsIDEsIDIxMiwgMzAsIDE4OCwgMSwgMjEwLCAxMDgsIDE4OCwgCi0gICAgMSwgMjQxLCAxOTUsIDE4OCwgMSwgMjE2LCAyMjYsIDE4OCwgMSwgMjE2LCAyMjcsIDI0MywgOTEsIDE4OCwgMSwgMjEwLCAKLSAgICAxOTksIDE4OCwgMSwgMjEwLCAyMDAsIDI0MSwgMjM4LCAxODgsIDEsIDIzNCwgMjI1LCAxODgsIDEsIDIzMywgMTAxLCAxODgsIAotICAgIDEsIDIzMCwgMTkwLCAxODgsIDEsIDIyNywgMTk0LCAxODgsIDEsIDIyMCwgMTQzLCAxODgsIDEsIDQwLCAyMjAsIDE0MywgCi0gICAgMTg4LCAxLCA3NSwgMTg4LCAxLCAyMjUsIDIyMSwgMTg4LCAxLCAyMjMsIDQ5LCAyMjUsIDIyMSwgMTg4LCAxLCAyMjIsIDI0LCAKLSAgICAxODgsIDEsIDIyNCwgNzUsIDE4OCwgMSwgMjIyLCAyMjksIDE4OCwgMSwgMjIwLCAyMCwgMTg4LCAxLCAyMTcsIDM2LCAxODgsIAotICAgIDEsIDIyNSwgMTY5LCAyNTIsIDEyLCAxODgsIDEsIDIyNSwgMTY5LCAyNDIsIDI0MiwgMTg4LCAxLCAyMjUsIDE2OSwgMjQ4LCAKLSAgICAyMCwgMTg4LCAyMjQsIDE1MSwgNDgsIDE4OCwgMjI0LCAxNTEsIDUxLCAxODgsIDIyNCwgMTUxLCAyNDYsIDExNywgMTg4LCAKLSAgICAyMTAsIDE3LCA0OCwgMTg4LCAyMTAsIDE3LCA1MSwgMTg4LCAyMTAsIDE3LCAyNDYsIDExNywgMTg4LCAyMjMsIDEzMSwgNDgsIAotICAgIDE4OCwgMjIzLCAxMzEsIDUxLCAxODgsIDI0NiwgMTE4LCAyMTAsIDI0LCAyNDEsIDQ0LCAxODgsIDI0NiwgMTE4LCAyMTAsIAotICAgIDI0LCAyNTQsIDEwNSwgMTg4LCAyNDEsIDI0MSwgNDgsIDE4OCwgMjQxLCAyNDEsIDUxLCAxODgsIDI0MSwgMjQwLCAyNDYsIAotICAgIDExNywgMTg4LCAyNDUsIDc5LCA0OCwgMTg4LCAyNDUsIDc5LCA1MSwgMTg4LCAyMjIsIDEwNywgMTg4LCAyNDQsIDEzNiwgCi0gICAgMjQ3LCAxMjAsIDE4OCwgMjIzLCAyNDgsIDE4OCwgMjIyLCAxMzQsIDE4OCwgMTEzLCA2NywgMTcwLCA0OCwgMTg4LCAxMTMsIAotICAgIDY3LCAxNzAsIDUxLCAxODgsIDEzNCwgMTcwLCA0OCwgMTg4LCAxMzQsIDE3MCwgNTEsIDE4OCwgMjI2LCAyNDgsIDIzMiwgCi0gICAgMjE0LCA0OCwgMTg4LCAyMjYsIDI0OCwgMjMyLCAyMTQsIDUxLCAxODgsIDIzMCwgNTYsIDE4OCwgMjUyLCAxMzEsIDE4OCwgCi0gICAgMSwgMjE5LCA0OSwgMjEwLCA4MCwgMTg4LCAxLCAyMTksIDQ5LCAyMzQsIDEyMiwgMTg4LCAxLCAyMTksIDQ5LCAyNDQsIAotICAgIDE1NCwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyNDAsIDI1MCwgNTEsIDEwLCAxLCAyNTIsIDU1LCAyLCA1OSwgCi0gICAgMjUyLCA0MywgMjIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCAKLSAgICA1MSwgMTAsIDEsIDI1MiwgNTUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCAyNTIsIDQzLCAyMiwgMTEzLCAxNzAsIAotICAgIDQ4LCAxMCwgMSwgMjUyLCA1NSwgMiwgMTEzLCAxNzAsIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDEwLCAxLCAyNTIsIDU1LCAyLCAKLSAgICAyMzUsIDE5MywgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMjUyLCA1NSwgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAxMjIsIDIsIAotICAgIDExMywgMTcwLCA0OCwgMTAsIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIDUxLCAxMCwgMSwgMjQ4LCAKLSAgICAxOTYsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgMjUyLCA0MywgMjIsIDQsIDIxNywgODAsIDEwLCAxLCAyNDgsIDE5NiwgMiwgCi0gICAgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDIyMywgOTYsIDIsIDkxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIAotICAgIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIAotICAgIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIAotICAgIDQ4LCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDI0NCwgMTQzLCAyLCAxMzQsIDE3MCwgMjI1LCAKLSAgICA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCAyMzQsIDE3NSwgMiwgNTksIDQ4LCAxMCwgMSwgMjM0LCAxNzUsIDIsIDEzNCwgCi0gICAgMTcwLCA0OCwgMTAsIDEsIDIzNCwgMTc1LCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCA2NiwgCi0gICAgMiwgNTksIDQ4LCAxMCwgMSwgNjYsIDIsIDU5LCA1MSwgMTAsIDEsIDIyOCwgNjMsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIAotICAgIDIyOCwgNjMsIDIsIDQsIDIxNywgODAsIDEwLCAxLCAyMjgsIDYzLCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIzMywgMTAzLCAKLSAgICAyLCAxMzAsIDEwLCAxLCAyMjMsIDk2LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgCi0gICAgMjAyLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAxMCwgMSwgMTIyLCAyLCA0LCAKLSAgICAxMCwgMSwgMjE3LCA4MSwgNTEsIDEwLCAxLCAxMjIsIDIsIDQsIDEwLCAxLCAyMTcsIDgxLCAyMiwgMTEzLCAyNDcsIDExOCwgCi0gICAgMTAsIDEsIDIyMSwgMTY3LCAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIDEwLCAxLCAyMjMsIDk2LCAKLSAgICAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIDEwLCAxLCAxMjIsIDIsIDQsIDEwLCAxLCAyMTcsIAotICAgIDgxLCA0OCwgMTAsIDEsIDExMiwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMywgNDgsIDEwLCAxLCAxMTIsIDIsIDI0NSwgCi0gICAgMjIsIDI1NCwgMzcsIDIxLCAxMzQsIDQ4LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMTEzLCA0OCwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEzNCwgNDgsIDEwLCAxLCAKLSAgICAyNDQsIDE2OCwgNzksIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyNDQsIDExLCA1MSwgMTAsIDEsIDIxMiwgMzEsIDIsIAotICAgIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIAotICAgIDEzNCwgNDgsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgCi0gICAgNzksIDI1MiwgMTMzLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTM0LCA0OCwgMTAsIDEsIDEyMiwgMiwgMjQ1LCAyMiwgCi0gICAgMjU0LCAzNywgMjEsIDI0NCwgMTEsIDUxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyNDQsIAotICAgIDExLCA0OCwgMTAsIDEsIDIyMSwgMTY3LCAyLCAyMzUsIDE5MywgMjE0LCAxMDUsIDEwLCAxLCAyMzQsIDI1MSwgMiwgMTEzLCAKLSAgICAxNzAsIDQ4LCAyMTYsIDIwNSwgMSwgMjQyLCA0NiwgMjE2LCAyMDUsIDEsIDIyMCwgNjgsIDIxNiwgMjA1LCAxLCAyMjgsIAotICAgIDYxLCAyMTYsIDIwNSwgMSwgMjIzLCAxODQsIDIxNiwgMjA1LCAxLCAyNTIsIDE4OSwgMjE2LCAyMDUsIDEsIDIzMiwgMjUxLCAKLSAgICAyMTYsIDIwNSwgMSwgMjM1LCA4LCAyMTYsIDIwNSwgMSwgMjU0LCAxNTksIDIxNiwgMjA1LCAxLCAyMTQsIDI1LCAyMTYsIAotICAgIDIwNSwgMSwgMjMxLCA3NywgMjE2LCAyMDUsIDEsIDI0NCwgMTk0LCAyMTYsIDIwNSwgMSwgMjQ4LCAyMywgMjE2LCAyMDUsIAotICAgIDEsIDIxNiwgMjA3LCAyMTYsIDIwNSwgMSwgMjMzLCAxMzEsIDIxNiwgMjA1LCAxLCAyNDMsIDEzMSwgMjE2LCAyMDUsIDEsIAotICAgIDI0MiwgMTc3LCAyMTYsIDIwNSwgMSwgMjIxLCAxNjUsIDIxNiwgMjA1LCAxLCAyNDgsIDE0OCwgMjE2LCAyMDUsIDEsIDIxMCwgCi0gICAgMTAwLCAyMTYsIDIwNSwgMSwgMjE3LCAzNywgMjE2LCAyMDUsIDEsIDIxMSwgMTAzLCAyMTYsIDIwNSwgMSwgMjI1LCAyMzMsIAotICAgIDIxNiwgMjA1LCAxLCAyMzUsIDEyOCwgMjE2LCAyMDUsIDEsIDI1MCwgMTM0LCAyMTYsIDIwNSwgMSwgMjE1LCAxNTUsIDIxNiwgCi0gICAgMjA1LCAxLCAyNDEsIDE4OCwgMjE2LCAyMDUsIDEsIDIzNCwgMTMxLCAyMTYsIDIwNSwgMSwgMjE2LCAyMDYsIDIxNiwgMjA1LCAKLSAgICAxLCAyMTAsIDExNSwgMjE2LCAyMDUsIDEsIDIyMCwgNTgsIDIxNiwgMjA1LCAxLCAyMjIsIDMwLCAyMTYsIDIwNSwgMSwgCi0gICAgMjQ4LCAyMTksIDIxNiwgMjA1LCAxLCAxMTEsIDIxNiwgMjA1LCAxLCAyMTAsIDIzLCAyMTYsIDIwNSwgMSwgMjU0LCAxOTMsIAotICAgIDIxNiwgMjA1LCAxLCAyNDIsIDI0MywgMjE2LCAyMDUsIDEsIDIyNCwgODUsIDIxNiwgMjA1LCAxLCAyMTIsIDYzLCAyMTYsIAotICAgIDIwNSwgMjU1LCAyMiwgMjE2LCAyMDUsIDI1NSwgMzgsIDIxNiwgMjA1LCAyNDAsIDExNCwgMjE2LCAyMDUsIDI0NSwgMjA4LCAKLSAgICAyMTYsIDIwNSwgMjE0LCAyMjIsIDIxNiwgMjA1LCAyMjYsIDE4MiwgMjE2LCAyMDUsIDI0NSwgMjE2LCAyMTYsIDIwNSwgCi0gICAgMjQ1LCAxNiwgMjE2LCAyMDUsIDIyNiwgMjQ3LCAyMTYsIDIwNSwgMjI2LCAyNTUsIDIxNiwgMjA1LCAyMTgsIDQ1LCAyMTYsIAotICAgIDIwNSwgMSwgMjI5LCAyMjUsIDIyOCwgMTM3LCAyMSwgMjEwLCA4NiwgMjI4LCAxMzcsIDIxLCAxMTAsIDIyOCwgMTM3LCAyMSwgCi0gICAgMTA1LCAyMjgsIDEzNywgMjEsIDE1OCwgMjI4LCAxMzcsIDIxLCAxNjEsIDIyOCwgMTM3LCAyMSwgMTg5LCAyMjgsIDEzNywgCi0gICAgMjEsIDE5NCwgMjI4LCAxMzcsIDIxLCAxOTgsIDIyOCwgMTM3LCAyMSwgMTk1LCAyMjgsIDEzNywgMjEsIDIwMCwgMjI4LCAKLSAgICAxMzcsIDEsIDYxLCAyMjgsIDEzNywgMSwgMjQ1LCAyMDksIDIyOCwgMTM3LCAxLCA3MywgMjI4LCAxMzcsIDEsIDc1LCAyMjgsIAotICAgIDEzNywgMSwgNzAsIDIyOCwgMTM3LCAxLCAyMjYsIDE4MywgMjI4LCAxMzcsIDEsIDc2LCAyMjgsIDEzNywgMSwgMjQ4LCAKLSAgICAyMDksIDIyOCwgMTM3LCAxLCAyMzAsIDI1LCAyMjgsIDEzNywgMSwgMjUyLCAxOTEsIDIyOCwgMTM3LCAxLCAxOTAsIDIyOCwgCi0gICAgMTM3LCAxLCAyMTcsIDEwNSwgMjI4LCAxMzcsIDEsIDIzNSwgMTQxLCAyMjgsIDEzNywgMSwgMjUwLCAxNTcsIDIyOCwgMTM3LCAKLSAgICAxLCAyNDgsIDIyMSwgMjI4LCAxMzcsIDEsIDIwNSwgMjI4LCAxMzcsIDEsIDIyMiwgMTc5LCAyMjgsIDEzNywgMSwgMjA2LCAKLSAgICAyMjgsIDEzNywgMSwgMjQzLCA3OSwgMjI4LCAxMzcsIDEsIDI0NCwgMTk2LCAyMjgsIDEzNywgMSwgMTc2LCAyMjgsIDEzNywgCi0gICAgMSwgMjMzLCAxMzUsIDIyOCwgMTM3LCAxLCAyMjksIDIyOSwgMjExLCAyMjMsIDIyOCwgMTM3LCAxLCAxODQsIDIyOCwgMTM3LCAKLSAgICAxLCAyMjcsIDE2NSwgMjI4LCAxMzcsIDEsIDE5NywgMjI4LCAxMzcsIDEsIDE2MiwgMjI4LCAxMzcsIDEsIDIxMiwgNjUsIAotICAgIDIyOCwgMTM3LCAxLCAxOTEsIDIyOCwgMTM3LCAxLCAyMjcsIDE2NiwgMjExLCAyMjMsIDIyOCwgMTM3LCAxLCAyMzUsIDYxLCAKLSAgICAyMzUsIDE0MSwgMjI4LCAxMzcsIDEsIDIzNSwgNjEsIDI1MCwgMTU3LCAyMjgsIDEzNywgMSwgMjM1LCA2MSwgMjA1LCAyMjgsIAotICAgIDEzNywgMzgsIDIxOSwgMjUxLCAxMjUsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMjE5LCAyNTEsIDEyMSwgMjE2LCAzMCwgCi0gICAgMjI4LCAxMzcsIDM4LCAyMTksIDI1MSwgMjIyLCAyMjgsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAyNDgsIDM4LCAKLSAgICAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMTI1LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMTIxLCAyMTYsIAotICAgIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMjIyLCAyMjgsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMjI5LCAxOTMsIDc4LCAKLSAgICAyMjgsIDEzNywgMzgsIDUyLCA1OSwgNDgsIDIyOCwgMTM3LCAxMjUsIDEzOCwgMjU0LCA1NywgMjI4LCAxMzcsIDEyMSwgCi0gICAgMTM4LCAyNTQsIDU3LCAyMjgsIDEzNywgMTYsIDIyNiwgMTg0LCAyNDgsIDUwLCAyMjgsIDEzNywgMTYsIDI0MywgNzgsIAotICAgIDIyOCwgMTM3LCAyNDksIDIxOSwgMjI4LCAxMzcsIDI0NSwgMzEsIDc4LCAyMjgsIDEzNywgMjMzLCAxMDgsIDIyMSwgMjUyLCAKLSAgICAxLCAyNTQsIDE3NiwgMjIxLCAyNTIsIDEsIDI1MSwgMjI4LCAyMjEsIDI1MiwgMSwgMjQzLCAxMTIsIDIyMSwgMjUyLCAxLCAKLSAgICAyNDgsIDE5NCwgMjIxLCAyNTIsIDEsIDIzNSwgMTUyLCAyMjEsIDI1MiwgMSwgMjUyLCAxODksIDIyMSwgMjUyLCAxLCAyMTAsIAotICAgIDg5LCAyMjEsIDI1MiwgMSwgMjM1LCAxNjAsIDIyMSwgMjUyLCAxLCAyMTYsIDY3LCAyMjEsIDI1MiwgMSwgMjEwLCAxODIsIAotICAgIDIyMSwgMjUyLCAxLCAyMzUsIDksIDIyMSwgMjUyLCAxLCAyMzMsIDEyOCwgMjIxLCAyNTIsIDEsIDIzMCwgMTkwLCAyMjEsIAotICAgIDI1MiwgMSwgMjI3LCAxOTQsIDIyMSwgMjUyLCAxLCAyMTksIDE1NiwgMjIxLCAyNTIsIDEsIDIzNSwgMjU1LCAyMjEsIDI1MiwgCi0gICAgMSwgMjQ0LCAxMjEsIDIyMSwgMjUyLCAxLCAyMTUsIDE4MSwgMjIxLCAyNTIsIDEsIDIyNCwgMTAsIDIyMSwgMjUyLCAxLCAKLSAgICAyMjIsIDIyOSwgMjIxLCAyNTIsIDEsIDIyMCwgODUsIDIyMSwgMjUyLCAxLCAyMTcsIDEwMCwgMjIxLCAyNTIsIDE2NCwgCi0gICAgMjM1LCAyNTUsIDIyMSwgMjUyLCAxNjQsIDIzNSwgMjU0LCAyMjEsIDI1MiwgMTY0LCAyMjYsIDI0MywgMjIxLCAyNTIsIAotICAgIDE2NCwgMjQ4LCAyMDcsIDIyMSwgMjUyLCA1OCwgMSwgMjQ1LCAxMDUsIDIxMCwgMTgyLCAyMjEsIDI1MiwgMTY0LCAyNDUsIAotICAgIDEwNSwgMjEwLCAxODIsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3NSwgMjIxLCAyNTIsIDI1LCA1LCA3NSwgMjIxLCAyNTIsIAotICAgIDI1LCA1LCAyMjYsIDExOCwgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDI1NSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAyMjYsIDExOCwgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA2MSwgMjIxLCAKLSAgICAyNTIsIDI1LCA1LCA2MSwgMjIxLCAyNTIsIDU4LCAxLCAyMTksIDI1MSwgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMjE5LCAyNTEsIAotICAgIDYxLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNzAsIDIyMSwgMjUyLCAyNSwgNSwgNzAsIDIyMSwgMjUyLCA1OCwgMSwgNzMsIAotICAgIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3MywgMjIxLCAyNTIsIDI1LCA1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCA3NiwgMjIxLCAKLSAgICAyNTIsIDI1LCA1LCAyMTgsIDQ1LCAyMjEsIDI1MiwgMTY0LCAyMjksIDkyLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIyOSwgOTIsIAotICAgIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAyMTgsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAxMTQsIDIyMSwgMjUyLCAKLSAgICAyMjQsIDE0MSwgMjUyLCAxMTQsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjUzLCAyMDEsIDIyMSwgMjUyLCAyMjQsIDE0MSwgCi0gICAgMjIwLCA4LCAyMjEsIDI1MiwgMjU1LCAyMSwgNzgsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjMxLCA2OCwgMjI0LCA0NSwgMjIxLCAKLSAgICAyNTIsIDIyNCwgMTQxLCAyMTAsIDMxLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIyNCwgNDUsIDIyMSwgMjUyLCAyMjQsIDE0MSwgCi0gICAgMjEwLCAxMTQsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjE1LCA5MCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDksIDIyMSwgCi0gICAgMjUyLCAyMjQsIDE0MSwgMjE5LCA1MywgMjMxLCAxNDUsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCAxMDAsIDIzMSwgMTgyLCAKLSAgICAxLCAyNDIsIDI0LCAyMzEsIDE4MiwgMSwgMjU1LCAyNSwgMjMxLCAxODIsIDEsIDI1NCwgMjE2LCAyMzEsIDE4MiwgMSwgCi0gICAgMjU0LCAyNTUsIDIzMSwgMTgyLCAxLCAyNTQsIDIwOSwgMjMxLCAxODIsIDEsIDIxNCwgMTI0LCAyMzEsIDE4MiwgMSwgMjUzLCAKLSAgICAxNjAsIDIzMSwgMTgyLCAxLCAyMzUsIDE2MCwgMjMxLCAxODIsIDEsIDI1MywgMTk4LCAyMzEsIDE4MiwgMSwgMjU0LCAxODEsIAotICAgIDIzMSwgMTgyLCAxLCAyNTQsIDE4NiwgMjMxLCAxODIsIDEsIDI1NCwgMTc4LCAyMzEsIDE4MiwgMSwgMjU0LCAxMzYsIDIzMSwgCi0gICAgMTgyLCAxLCAyNTQsIDEyMywgMjMxLCAxODIsIDEsIDI1MywgMjM3LCAyMzEsIDE4MiwgMSwgMjM1LCAyNTUsIDIzMSwgMTgyLCAKLSAgICAxLCAyNTQsIDcyLCAyMzEsIDE4MiwgMSwgMjUzLCAyMDgsIDIzMSwgMTgyLCAxLCAyNTQsIDQ1LCAyMzEsIDE4MiwgMSwgCi0gICAgMjU0LCA0MSwgMjMxLCAxODIsIDEsIDI1MywgMjMxLCAyMzEsIDE4MiwgMSwgMjUzLCAyMDYsIDIzMSwgMTgyLCAxLCAyNDYsIAotICAgIDU1LCAyMzEsIDE4MiwgMSwgMjM1LCAyLCAyMzEsIDE4MiwgMSwgMjU0LCAxOTYsIDIzMSwgMTgyLCAyNTQsIDIyMiwgNzgsIAotICAgIDIzMSwgMTgyLCAyMTMsIDEzNiwgNzgsIDIzMSwgMTgyLCAyNDMsIDUzLCA3OCwgMjMxLCAxODIsIDIyNCwgMTQwLCAxMCwgMSwgCi0gICAgMjUyLCA1NSwgMiwgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMTUxLCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMTcsIDgxLCAKLSAgICAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAKLSAgICAxLCAyMjQsIDgyLCAyLCA1OSwgNTEsIDEwLCAxLCAyMzMsIDEwMywgMiwgNTIsIDEzMCwgMTAsIDEsIDY2LCAyLCAxMzQsIAotICAgIDE3MCwgNDgsIDEwLCAxLCA3OSwgMiwgMTEzLCAxNzAsIDI1MiwgNDMsIDIyLCAyMDIsIDQ4LCAxMCwgMSwgNzksIDIsIDExMywgCi0gICAgMTcwLCAyNTIsIDQzLCAyMiwgNTksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgMjMyLCAxMjMsIDEwLCAxLCAyMTIsIDMxLCAyLCAKLSAgICA1OSwgMjExLCAyMzEsIDEwLCAxLCAyMjIsIDIwMSwgMjExLCA0MywgMTAsIDI0OSwgOTksIDI0NCwgMTY1LCAxMCwgMjQ5LCAKLSAgICA5OSwgMjQ4LCAxODQsIDEwLCAyNDksIDk5LCAyMzQsIDIwNSwgMTAsIDI0OSwgOTksIDI0NCwgMTYzLCAxMCwgMjQ5LCA5OSwgCi0gICAgMjQ4LCAxODIsIDEwLCAyNDksIDk5LCAyMzQsIDIwMywgMTAsIDEzOCwgMTIzLCA1OSwgNDgsIDEwLCAxMzgsIDExMywgMTcwLCAKLSAgICA0OCwgMTAsIDEzOCwgMjMyLCAxMjQsIDQ4LCAxMCwgMTM4LCAxMjMsIDU5LCA1MSwgMTAsIDEzOCwgMTEzLCAxNzAsIDUxLCAKLSAgICAxMCwgMTM4LCAyMzIsIDEyNCwgNTEsIDEwLCAyMDQsIDI0NCwgMTYzLCAxMCwgMjA0LCAyNDgsIDE4MiwgMTAsIDIwNCwgCi0gICAgMjM0LCAyMDMsIDEwLCA0LCAxMjUsIDIxMiwgMzAsIDEwLCAyNDQsIDE2NiwgMiwgMjIyLCAyMzMsIDEwLCAyNDQsIDE2NiwgCi0gICAgMiwgNTksIDQ4LCAxMCwgMjM0LCAyMDYsIDIsIDU5LCA1MSwgMTAsIDQzLCAyNTMsIDI1MCwgNDgsIDEwLCA0NCwgMjUzLCAKLSAgICAyNTAsIDQ4LCAxMCwgNDMsIDI1MywgMjUwLCA1MSwgMTAsIDQ0LCAyNTMsIDI1MCwgNTEsIDEwLCA1MiwgNDQsIDI1MywgCi0gICAgMjUwLCA0OCwgMTAsIDUyLCA0NCwgMjUzLCAyNTAsIDc3LCAyLCAyNDcsIDEyMCwgMTAsIDQ0LCAyNTMsIDI1MCwgNzcsIDIsIAotICAgIDI0NywgMTIwLCAxMCwgMjQ4LCAxODUsIDIsIDI0NywgMTIwLCA4NCwgNSwgMjM1LCAxOTMsIDI1MCwgMjU1LCA4NCwgNSwgCi0gICAgMjUwLCAyNTUsIDg0LCA1LCAyNTQsIDc1LCA4NCwgNSwgMjEzLCAxNDcsIDg0LCAxLCAyMTksIDI1MSwgNjEsIDg0LCAxLCAKLSAgICA2MSwgODQsIDEsIDI1NSwgNzMsIDg0LCAxLCA3MywgODQsIDEsIDIzNiwgMzMsIDg0LCAxLCA3MCwgODQsIDEsIDIxNCwgCi0gICAgMTE4LCA4NCwgMSwgMTQ5LCAxNTMsIDg0LCAxLCAxNDksIDE1NiwgODQsIDEsIDI1MSwgMiwgNzUsIDg0LCAxLCAyMTksIAotICAgIDI1MSwgNzUsIDg0LCAxLCA3NSwgODQsIDEsIDI1NCwgMjAxLCA4NCwgMSwgMjUxLCAyLCA3NiwgODQsIDEsIDIxOSwgMjUxLCAKLSAgICA3NiwgODQsIDEsIDc2LCA4NCwgMSwgMjUzLCAxOTIsIDg0LCAxLCAxNzYsIDg0LCAxLCAyMzQsIDEzMiwgODQsIDEsIDI0MywgCi0gICAgMTM1LCA4NCwgMSwgMjQyLCAyNDksIDg0LCAxLCAyMjksIDc3LCA4NCwgMSwgMjUxLCAzMywgODQsIDEsIDI1MCwgMTU3LCAKLSAgICA4NCwgMSwgMjM1LCAxNDEsIDg0LCAxLCAyMzUsIDExNCwgODQsIDEsIDIyNywgMTY1LCA4NCwgMSwgMjE1LCAxNTYsIDg0LCAKLSAgICAxLCAyMTUsIDE0NCwgODQsIDEsIDI0OCwgMTM1LCA4NCwgMSwgMjQ4LCAxMTksIDg0LCAxLCAyMjgsIDExMCwgODQsIDEsIAotICAgIDIxNywgMTA1LCA4NCwgMSwgMjE2LCAyMDgsIDg0LCAxLCAyNDgsIDIyMSwgODQsIDEsIDI0OCwgMjUsIDg0LCAxLCAxOTcsIAotICAgIDg0LCAxLCAyMjgsIDkyLCA4NCwgMSwgMTkwLCA4NCwgMSwgMjI1LCAxNDcsIDg0LCAxLCAyNTIsIDE5MSwgODQsIDEsIDI1MiwgCi0gICAgMTgsIDg0LCAxLCAxODQsIDg0LCAxLCAxOTEsIDg0LCAxLCAyMDUsIDg0LCAxLCAyMjIsIDE3OSwgODQsIDEsIDIzMywgMTM1LCAKLSAgICA4NCwgMSwgMjMyLCAxODQsIDg0LCAxLCAyMzIsIDE3NSwgODQsIDEsIDIxNCwgMjcsIDg0LCAxLCAyMjAsIDEwMiwgODQsIDEsIAotICAgIDIxOCwgMjIzLCA4NCwgMSwgMjA2LCA4NCwgMSwgMTYyLCA4NCwgMjUsIDUsIDIyNiwgMjM0LCA4NCwgMjUsIDUsIDIyNiwgCi0gICAgMTgxLCA4NCwgNSwgMjI3LCAyMDUsIDg0LCA1LCAyNTMsIDE3NSwgODQsIDI1LCA1LCAyNTUsIDczLCA4NCwgMjUsIDUsIDczLCAKLSAgICA4NCwgMjUsIDUsIDIzNiwgMzMsIDg0LCAyNSwgNSwgNzAsIDg0LCAyNSwgNSwgMjE0LCAxMTgsIDg0LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTMsIDg0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgODQsIDI1LCA1LCAyNTEsIDIsIDc1LCA4NCwgMjUsIDUsIDIxOSwgCi0gICAgMjUxLCA3NSwgODQsIDI1LCA1LCA3NSwgODQsIDI1LCA1LCAyNTQsIDIwMSwgODQsIDI1LCA1LCAyNTEsIDIsIDc2LCA4NCwgCi0gICAgMjUsIDUsIDIxOSwgMjUxLCA3NiwgODQsIDI1LCA1LCA3NiwgODQsIDI1LCA1LCAyNTMsIDE5MiwgODQsIDUsIDIxMywgMTUyLCAKLSAgICA4NCwgMjUsIDUsIDIyNCwgMTg1LCA3NSwgODQsIDI1LCA1LCAyNTMsIDE3MSwgODQsIDIyNiwgMjA0LCA4NCwgMjE4LCAxMTEsIAotICAgIDUsIDIxNCwgMjE2LCA4NCwgMjE4LCAxMTEsIDUsIDI1NCwgNzcsIDg0LCAyNDIsIDEzNywgMjU1LCAxNCwgODQsIDI1NSwgMywgCi0gICAgMjU1LCAxNCwgODQsIDI1LCA1LCAyNTEsIDIsIDE5OSwgNzUsIDg0LCAyNSwgNSwgMjE0LCAyMTQsIDg0LCAyNSwgNSwgMjE0LCAKLSAgICAxMTcsIDg0LCAxLCAyMjQsIDg4LCA4NCwgMSwgMjM0LCAxMTUsIDg0LCAxLCAyNDIsIDIyNiwgODQsIDEsIDIxMCwgMTE2LCAKLSAgICA4NCwgMSwgMjQ4LCAxMjQsIDg0LCAxLCAyMjMsIDM5LCA4NCwgMSwgMjQ0LCAxOTYsIDg0LCAxLCAyMTAsIDE2OCwgODQsIDEsIAotICAgIDE0OSwgMjIyLCAxODAsIDg0LCAxLCAxNDksIDIzMiwgMTg1LCA4NCwgMjUsIDUsIDE0OSwgMTU2LCA4NCwgMjUsIDUsIDE0OSwgCi0gICAgMjMyLCAxODUsIDg0LCAyNDgsIDE3OCwgODQsIDUyLCAyNDgsIDE3OCwgODQsIDIxLCAyMTAsIDg2LCA4NCwgMjEsIDExMCwgCi0gICAgODQsIDIxLCAxMDUsIDg0LCAyMSwgMTU4LCA4NCwgMjEsIDE2MSwgODQsIDIxLCAxODksIDg0LCAyMSwgMTk0LCA4NCwgMjEsIAotICAgIDE5OCwgODQsIDIxLCAxOTUsIDg0LCAyMSwgMjAwLCA4NCwgMjU1LCAyMSwgNTAsIDg0LCA1LCAxMjUsIDIxOSwgMTcsIDI0NywgCi0gICAgMTIwLCA4NCwgMSwgMjUxLCAyLCA2MSwgODQsIDEsIDIyNiwgMjM0LCA4NCwgMSwgMjI2LCAxODEsIDg0LCAxLCAyNTMsIAotICAgIDE3MSwgODQsIDEsIDIxNCwgMjE0LCA4NCwgMSwgMjE0LCAxMTcsIDg0LCAxLCAyMTAsIDgyLCA4NCwgMSwgMTE0LCAxOTEsIAotICAgIDg0LCAxLCAyNDMsIDI5LCA4NCwgMSwgMjM1LCA5NiwgODQsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgODQsIDEsIDI0OCwgCi0gICAgMTI1LCA4NCwgMSwgMjUyLCAxMTEsIDE0NiwgNSwgMjUwLCAyNTUsIDE0NiwgNSwgMjU0LCA3NSwgMTQ2LCA1LCAyMTMsIAotICAgIDE0NywgMTQ2LCAxLCA2MSwgMTQ2LCAxLCAyNTUsIDczLCAxNDYsIDEsIDczLCAxNDYsIDEsIDIzNiwgMzMsIDE0NiwgMSwgCi0gICAgNzAsIDE0NiwgMSwgMjE0LCAxMTgsIDE0NiwgMSwgMTQ5LCAxNTMsIDE0NiwgMSwgMTQ5LCAxNTYsIDE0NiwgMSwgNzUsIAotICAgIDE0NiwgMSwgMjU0LCAyMDEsIDE0NiwgMSwgNzYsIDE0NiwgMSwgMjUzLCAxOTIsIDE0NiwgMSwgMTc2LCAxNDYsIDEsIDIzNCwgCi0gICAgMTMyLCAxNDYsIDEsIDI0MywgMTM1LCAxNDYsIDEsIDI0MiwgMjQ5LCAxNDYsIDEsIDIyOSwgNzcsIDE0NiwgMSwgMjUxLCAKLSAgICAzMywgMTQ2LCAxLCAyNTAsIDE1NywgMTQ2LCAxLCAyMzUsIDE0MSwgMTQ2LCAxLCAyMzUsIDExNCwgMTQ2LCAxLCAyMjcsIAotICAgIDE2NSwgMTQ2LCAxLCAyMTUsIDE1NiwgMTQ2LCAxLCAyMTUsIDE0NCwgMTQ2LCAxLCAyNDgsIDEzNSwgMTQ2LCAxLCAyNDgsIAotICAgIDExOSwgMTQ2LCAxLCAyMjgsIDExMCwgMTQ2LCAxLCAyMTcsIDEwNSwgMTQ2LCAxLCAyMTYsIDIwOCwgMTQ2LCAxLCAyNDgsIAotICAgIDIyMSwgMTQ2LCAxLCAyNDgsIDI1LCAxNDYsIDEsIDE5NywgMTQ2LCAxLCAxOTAsIDE0NiwgMSwgMjI1LCAxNDcsIDE0NiwgMSwgCi0gICAgMjUyLCAxOTEsIDE0NiwgMSwgMjUyLCAxOCwgMTQ2LCAxLCAxODQsIDE0NiwgMSwgMTkxLCAxNDYsIDEsIDIwNSwgMTQ2LCAxLCAKLSAgICAyMzMsIDEzNSwgMTQ2LCAxLCAyMjAsIDEwMiwgMTQ2LCAxLCAyMTgsIDIyMywgMTQ2LCAxLCAyMDYsIDE0NiwgMSwgMTYyLCAKLSAgICAxNDYsIDUsIDIyNywgMjA1LCAxNDYsIDUsIDI1MywgMTc1LCAxNDYsIDI1LCA1LCAyNTUsIDczLCAxNDYsIDI1LCA1LCA3MywgCi0gICAgMTQ2LCAyNSwgNSwgMjM2LCAzMywgMTQ2LCAyNSwgNSwgNzAsIDE0NiwgMjUsIDUsIDIxNCwgMTE4LCAxNDYsIDI1LCA1LCAKLSAgICAxNDksIDE1MywgMTQ2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTQ2LCAyNSwgNSwgNzUsIDE0NiwgMjUsIDUsIDI1NCwgCi0gICAgMjAxLCAxNDYsIDI1LCA1LCA3NiwgMTQ2LCAyNSwgNSwgMjUzLCAxOTIsIDE0NiwgNSwgMjEzLCAxNTIsIDE0NiwgMSwgMjM0LCAKLSAgICAxMjQsIDIxNywgMTA1LCAxNDYsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMTQ2LCAxLCAyMjIsIDE3OSwgMTQ2LCAxLCAyMjMsIAotICAgIDM5LCAxNDYsIDEsIDIxMCwgMTY4LCAxNDYsIDEsIDE0OSwgMjIyLCAxODAsIDE0NiwgMSwgMTQ5LCAyMzIsIDE4NSwgMTQ2LCAKLSAgICAyNSwgNSwgMTQ5LCAxNTYsIDE0NiwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE0NiwgMjEsIDIxMCwgODYsIDE0NiwgMjEsIAotICAgIDExMCwgMTQ2LCAyMSwgMTA1LCAxNDYsIDIxLCAxNTgsIDE0NiwgMjEsIDE2MSwgMTQ2LCAyMSwgMTg5LCAxNDYsIDIxLCAKLSAgICAxOTQsIDE0NiwgMjEsIDE5OCwgMTQ2LCAyMSwgMTk1LCAxNDYsIDIxLCAyMDAsIDE0NiwgMSwgMjIzLCAxODgsIDIsIDIzMCwgCi0gICAgMjI0LCAyNDcsIDI1NCwgMTQ2LCAxLCAyMjMsIDE4OCwgMiwgMjMyLCAxMDgsIDI0NywgMjU0LCAxNDYsIDIyMiwgMTE4LCAKLSAgICA3OCwgMTQ2LCAyMjIsIDExOCwgNTAsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDExMCwgMTQ2LCAyNDksIDk4LCAyMjcsIAotICAgIDE5NywgMTA1LCAxNDYsIDI0OSwgOTgsIDIyNywgMTk3LCAxNTgsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDE2MSwgMTQ2LCAKLSAgICAyNDksIDk4LCAyMjcsIDE5NywgMTIzLCAyMzMsIDE2LCAyMTYsIDIwMSwgMjE2LCAxOTYsIDI0OCwgNDgsIDE0NiwgMjQ5LCAKLSAgICA5OCwgMjQ4LCA0OSwgMjE5LCAxMTksIDE0NiwgMjM1LCAxNjEsIDE0NiwgMjQzLCAxMDMsIDc4LCAxODMsIDUsIDI1NCwgCi0gICAgMjU0LCAyNTEsIDI0MywgMTgzLCA1LCAyNTEsIDI0MywgMTgzLCA1LCAyMTMsIDE0NywgMTgzLCAxLCA2MSwgMTgzLCAxLCAKLSAgICAyNTUsIDczLCAxODMsIDEsIDczLCAxODMsIDEsIDIzNiwgMzMsIDE4MywgMSwgNzAsIDE4MywgMSwgMjE0LCAxMTgsIDE4MywgCi0gICAgMSwgMjQ1LCAyMDksIDE4MywgMSwgMjU0LCAyMDEsIDE4MywgMSwgMjI2LCAxODMsIDE4MywgMSwgMjUzLCAxOTIsIDE4MywgCi0gICAgMSwgMTc2LCAxODMsIDEsIDIzNCwgMTMyLCAxODMsIDEsIDI0MywgMTM1LCAxODMsIDEsIDI0MiwgMjQ5LCAxODMsIDEsIAotICAgIDIyOSwgNzcsIDE4MywgMSwgMjUxLCAzMywgMTgzLCAxLCAyNTAsIDE1NywgMTgzLCAxLCAyMzUsIDE0MSwgMTgzLCAxLCAKLSAgICAyMzUsIDExNCwgMTgzLCAxLCAyMjcsIDE2NSwgMTgzLCAxLCAyMTUsIDE1NiwgMTgzLCAxLCAyMTUsIDE0NCwgMTgzLCAxLCAKLSAgICAyNDgsIDEzNSwgMTgzLCAxLCAyNDgsIDExOSwgMTgzLCAxLCAyMjgsIDExMCwgMTgzLCAxLCAyMTcsIDEwNSwgMTgzLCAxLCAKLSAgICAyMTYsIDIwOCwgMTgzLCAxLCAyNDgsIDIyMSwgMTgzLCAxLCAyNDgsIDI1LCAxODMsIDEsIDE5NywgMTgzLCAxLCAxOTAsIAotICAgIDE4MywgMSwgMjI1LCAxNDcsIDE4MywgMSwgMjUyLCAxOTEsIDE4MywgMSwgMjUyLCAxOCwgMTgzLCAxLCAxODQsIDE4MywgMSwgCi0gICAgMTkxLCAxODMsIDEsIDIwNSwgMTgzLCAxLCAyMzMsIDEzNSwgMTgzLCAxLCAyMzIsIDE4NCwgMTgzLCAxLCAyMTQsIDI3LCAKLSAgICAxODMsIDEsIDIyMCwgMTAyLCAxODMsIDEsIDIwNiwgMTgzLCAxLCAxNjIsIDE4MywgNSwgMjI3LCAyMDUsIDE4MywgMjUsIDUsIAotICAgIDI1NSwgNzMsIDE4MywgMjUsIDUsIDczLCAxODMsIDI1LCA1LCAyMzYsIDMzLCAxODMsIDI1LCA1LCA3MCwgMTgzLCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE4MywgMjUsIDUsIDI0NSwgMjA5LCAxODMsIDI1LCA1LCAyNTQsIDIwMSwgMTgzLCAyNSwgNSwgMjI2LCAKLSAgICAxODMsIDE4MywgMjUsIDUsIDI1MywgMTkyLCAxODMsIDUsIDIxMywgMTUyLCAxODMsIDUsIDIxNCwgMjE4LCAxODMsIDEsIAotICAgIDIzNCwgMTE1LCAxODMsIDEsIDI0MiwgMjI2LCAxODMsIDEsIDIxMCwgMTE2LCAxODMsIDEsIDIyMiwgMTc5LCAxODMsIDEsIAotICAgIDI0NCwgMTk2LCAxODMsIDIxLCAyMTAsIDg2LCAxODMsIDIxLCAxMTAsIDE4MywgMjEsIDEwNSwgMTgzLCAyMSwgMTU4LCAKLSAgICAxODMsIDIxLCAxNjEsIDE4MywgMjEsIDE4OSwgMTgzLCAyMSwgMTk0LCAxODMsIDIxLCAxOTgsIDE4MywgMjEsIDE5NSwgCi0gICAgMTgzLCAyMSwgMjAwLCAxODMsIDIxNiwgNzQsIDE4MywgMjU0LCAyNTMsIDE4MywgMjM1LCAxNzgsIDE4MywgMjE0LCAxNDYsIAotICAgIDE4MywgMjQ1LCAxODEsIDIyNiwgMTg4LCAxODMsIDUsIDIxMSwgNzgsIDE3MSwgNSwgMjUwLCAyNTUsIDE3MSwgNSwgMjU0LCAKLSAgICA3NSwgMTcxLCA1LCAyMTMsIDE0NywgMTcxLCAxLCA2MSwgMTcxLCAxLCAyNTUsIDczLCAxNzEsIDEsIDczLCAxNzEsIDEsIAotICAgIDIzNiwgMzMsIDE3MSwgMSwgNzAsIDE3MSwgMSwgMjE0LCAxMTgsIDE3MSwgMSwgMTQ5LCAxNTMsIDE3MSwgMSwgMTQ5LCAKLSAgICAxNTYsIDE3MSwgMjUsIDI1MSwgMiwgNzUsIDE3MSwgMSwgNzUsIDE3MSwgMSwgMjU0LCAyMDEsIDE3MSwgMjUsIDI1MSwgMiwgCi0gICAgNzYsIDE3MSwgMSwgNzYsIDE3MSwgMSwgMjUzLCAxOTIsIDE3MSwgMSwgMTc2LCAxNzEsIDEsIDIzNCwgMTMyLCAxNzEsIDEsIAotICAgIDI0MywgMTM1LCAxNzEsIDEsIDI0MiwgMjQ5LCAxNzEsIDEsIDIyOSwgNzcsIDE3MSwgMSwgMjUxLCAzMywgMTcxLCAxLCAKLSAgICAyNTAsIDE1NywgMTcxLCAxLCAyMzUsIDE0MSwgMTcxLCAxLCAyMzUsIDExNCwgMTcxLCAxLCAyMjcsIDE2NSwgMTcxLCAxLCAKLSAgICAyMTUsIDE1NiwgMTcxLCAxLCAyMTUsIDE0NCwgMTcxLCAxLCAyNDgsIDEzNSwgMTcxLCAxLCAyNDgsIDExOSwgMTcxLCAxLCAKLSAgICAyMjgsIDExMCwgMTcxLCAxLCAyMTcsIDEwNSwgMTcxLCAxLCAyMTYsIDIwOCwgMTcxLCAxLCAyNDgsIDIyMSwgMTcxLCAxLCAKLSAgICAyNDgsIDI1LCAxNzEsIDEsIDE5NywgMTcxLCAxLCAxOTAsIDE3MSwgMSwgMjI1LCAxNDcsIDE3MSwgMSwgMjUyLCAxOTEsIAotICAgIDE3MSwgMSwgMjUyLCAxOCwgMTcxLCAxLCAxODQsIDE3MSwgMSwgMTkxLCAxNzEsIDEsIDIwNSwgMTcxLCAxLCAyMzMsIDEzNSwgCi0gICAgMTcxLCAxLCAyMzIsIDE4NCwgMTcxLCAxLCAyMTQsIDI3LCAxNzEsIDEsIDIyMCwgMTAyLCAxNzEsIDEsIDIxOCwgMjIzLCAKLSAgICAxNzEsIDEsIDIwNiwgMTcxLCAxLCAxNjIsIDE3MSwgNSwgMjI3LCAyMDUsIDE3MSwgNSwgMjUzLCAxNzUsIDE3MSwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDE3MSwgMjUsIDUsIDczLCAxNzEsIDI1LCA1LCAyMzYsIDMzLCAxNzEsIDI1LCA1LCA3MCwgMTcxLCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE3MSwgMjUsIDUsIDE0OSwgMTUzLCAxNzEsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNzEsIDI1LCA1LCAKLSAgICAyNTEsIDIsIDc1LCAxNzEsIDI1LCA1LCA3NSwgMTcxLCAyNSwgNSwgMjU0LCAyMDEsIDE3MSwgMjUsIDUsIDI1MSwgMiwgNzYsIAotICAgIDE3MSwgMjUsIDUsIDc2LCAxNzEsIDI1LCA1LCAyNTMsIDE5MiwgMTcxLCA1LCAyMTMsIDE1MiwgMTcxLCAyMjYsIDIwNCwgCi0gICAgMTcxLCAxLCAxNDksIDIyMiwgMTgwLCAxNzEsIDEsIDE0OSwgMjMyLCAxODUsIDE3MSwgMjUsIDUsIDE0OSwgMTU2LCAxNzEsIAotICAgIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzEsIDIxLCAyMTAsIDg2LCAxNzEsIDIxLCAxMTAsIDE3MSwgMjEsIDEwNSwgMTcxLCAKLSAgICAyMSwgMTU4LCAxNzEsIDIxLCAxNjEsIDE3MSwgMjEsIDE4OSwgMTcxLCAyMSwgMTk0LCAxNzEsIDIxLCAxOTgsIDE3MSwgMjEsIAotICAgIDE5NSwgMTcxLCAyMSwgMjAwLCAxNzEsIDI1NSwgMjEsIDUwLCAxNzEsIDIyMiwgMTE4LCA1MCwgMTU3LCA1LCAyNTAsIDI1NSwgCi0gICAgMTU3LCA1LCAyNTQsIDc1LCAxNTcsIDUsIDIxMywgMTQ3LCAxNTcsIDEsIDYxLCAxNTcsIDEsIDI1NSwgNzMsIDE1NywgMSwgCi0gICAgNzMsIDE1NywgMSwgMjM2LCAzMywgMTU3LCAxLCA3MCwgMTU3LCAxLCAyMTQsIDExOCwgMTU3LCAxLCAxNDksIDE1MywgMTU3LCAKLSAgICAxLCAxNDksIDE1NiwgMTU3LCAxLCA3NSwgMTU3LCAxLCAyNTQsIDIwMSwgMTU3LCAxLCA3NiwgMTU3LCAxLCAyNTMsIDE5MiwgCi0gICAgMTU3LCAxLCAxNzYsIDE1NywgMSwgMjM0LCAxMzIsIDE1NywgMSwgMjQzLCAxMzUsIDE1NywgMSwgMjQyLCAyNDksIDE1NywgCi0gICAgMSwgMjI5LCA3NywgMTU3LCAxLCAyNTEsIDMzLCAxNTcsIDEsIDI1MCwgMTU3LCAxNTcsIDEsIDIzNSwgMTQxLCAxNTcsIDEsIAotICAgIDIzNSwgMTE0LCAxNTcsIDEsIDIyNywgMTY1LCAxNTcsIDEsIDIxNSwgMTU2LCAxNTcsIDEsIDIxNSwgMTQ0LCAxNTcsIDEsIAotICAgIDI0OCwgMTM1LCAxNTcsIDEsIDI0OCwgMTE5LCAxNTcsIDEsIDIyOCwgMTEwLCAxNTcsIDEsIDIxNywgMTA1LCAxNTcsIDEsIAotICAgIDIxNiwgMjA4LCAxNTcsIDEsIDI0OCwgMjIxLCAxNTcsIDEsIDI0OCwgMjUsIDE1NywgMSwgMTk3LCAxNTcsIDEsIDE5MCwgCi0gICAgMTU3LCAxLCAyMjUsIDE0NywgMTU3LCAxLCAyNTIsIDE5MSwgMTU3LCAxLCAyNTIsIDE4LCAxNTcsIDEsIDE4NCwgMTU3LCAxLCAKLSAgICAxOTEsIDE1NywgMSwgMjA1LCAxNTcsIDEsIDIzMywgMTM1LCAxNTcsIDEsIDIzMiwgMTg0LCAxNTcsIDEsIDIxNCwgMjcsIAotICAgIDE1NywgMSwgMjIwLCAxMDIsIDE1NywgMSwgMjE4LCAyMjMsIDE1NywgMSwgMjA2LCAxNTcsIDEsIDE2MiwgMTU3LCA1LCAKLSAgICAyMjcsIDIwNSwgMTU3LCA1LCAyNTMsIDE3NSwgMTU3LCAyNSwgNSwgMjU1LCA3MywgMTU3LCAyNSwgNSwgNzMsIDE1NywgMjUsIAotICAgIDUsIDIzNiwgMzMsIDE1NywgMjUsIDUsIDcwLCAxNTcsIDI1LCA1LCAyMTQsIDExOCwgMTU3LCAyNSwgNSwgMTQ5LCAxNTMsIAotICAgIDE1NywgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE1NywgMjUsIDUsIDc1LCAxNTcsIDI1LCA1LCAyNTQsIDIwMSwgMTU3LCAyNSwgCi0gICAgNSwgNzYsIDE1NywgMjUsIDUsIDI1MywgMTkyLCAxNTcsIDUsIDIxMywgMTUyLCAxNTcsIDI1NCwgMjAyLCAyMzMsIDIzLCAKLSAgICA3OCwgMTU3LCAyNTMsIDE5MywgMjMzLCAyMywgNzgsIDE1NywgMSwgMjIyLCAxNzksIDE1NywgMSwgMjIzLCAzOSwgMTU3LCAKLSAgICAxLCAyMTAsIDE2OCwgMTU3LCAxLCAxNDksIDIyMiwgMTgwLCAxNTcsIDEsIDE0OSwgMjMyLCAxODUsIDE1NywgMjUsIDUsIAotICAgIDE0OSwgMTU2LCAxNTcsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNTcsIDIxLCAyMTAsIDg2LCAxNTcsIDIxLCAxMTAsIDE1NywgCi0gICAgMjEsIDEwNSwgMTU3LCAyMSwgMTU4LCAxNTcsIDIxLCAxNjEsIDE1NywgMjEsIDE4OSwgMTU3LCAyMSwgMTk0LCAxNTcsIDIxLCAKLSAgICAxOTgsIDE1NywgMjEsIDE5NSwgMTU3LCAyMSwgMjAwLCAxNTcsIDIzNSwgMTYxLCAxNTcsIDEsIDIxMiwgNjUsIDE1NywgCi0gICAgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDE1NywgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIDE1NywgMjQ0LCAyLCAxMzQsIDIyNCwgCi0gICAgMTksIDE1NywgMjQ0LCAyLCAxMjMsIDIxOSwgMTE3LCAxNTcsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMTU3LCAyNDQsIDIsIAotICAgIDEzNCwgMjE5LCAxMTYsIDM2LCA1LCAyNTQsIDc1LCAzNiwgNSwgMjEzLCAxNDcsIDM2LCAxLCA2MSwgMzYsIDEsIDI1NSwgCi0gICAgNzMsIDM2LCAxLCA3MywgMzYsIDEsIDIzNiwgMzMsIDM2LCAxLCA3MCwgMzYsIDEsIDIxNCwgMTE4LCAzNiwgMSwgNzUsIDM2LCAKLSAgICAxLCAyNDUsIDIwOSwgMzYsIDEsIDI1NCwgMjAxLCAzNiwgMSwgNzYsIDM2LCAxLCAyMjYsIDE4MywgMzYsIDEsIDI1MywgCi0gICAgMTkyLCAzNiwgMSwgMTc2LCAzNiwgMSwgMjI5LCA3NywgMzYsIDEsIDI1MSwgMzMsIDM2LCAxLCAyMzUsIDE0MSwgMzYsIDEsIAotICAgIDIyNywgMTY1LCAzNiwgMSwgMjE1LCAxNTYsIDM2LCAxLCAyMjgsIDExMCwgMzYsIDEsIDIxNywgMTA1LCAzNiwgMSwgMTk3LCAKLSAgICAzNiwgMSwgMjI4LCA5MiwgMzYsIDEsIDE5MCwgMzYsIDEsIDE4NCwgMzYsIDEsIDE5MSwgMzYsIDEsIDIwNSwgMzYsIDEsIAotICAgIDIyMiwgMTc5LCAzNiwgMSwgMjMzLCAxMzUsIDM2LCAxLCAyMzIsIDE4NCwgMzYsIDEsIDIzMiwgMTc1LCAzNiwgMSwgMjE0LCAKLSAgICAyNywgMzYsIDEsIDIyMCwgMTAyLCAzNiwgMSwgMjE4LCAyMjMsIDM2LCAxLCAyMDYsIDM2LCAxLCAxNjIsIDM2LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMzYsIDI1LCA1LCA3MywgMzYsIDI1LCA1LCAyMzYsIDMzLCAzNiwgMjUsIDUsIDcwLCAzNiwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAzNiwgMjUsIDUsIDc1LCAzNiwgMjUsIDUsIDI0NSwgMjA5LCAzNiwgMjUsIDUsIDI1NCwgMjAxLCAzNiwgCi0gICAgMjUsIDUsIDc2LCAzNiwgMjUsIDUsIDIyNiwgMTgzLCAzNiwgMjUsIDUsIDI1MywgMTkyLCAzNiwgNSwgMjEzLCAxNTIsIDM2LCAKLSAgICAyMjYsIDIwNCwgMzYsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMzYsIDIxLCAyMTAsIDg2LCAzNiwgMjEsIDExMCwgMzYsIAotICAgIDIxLCAxMDUsIDM2LCAyMSwgMTU4LCAzNiwgMjEsIDE2MSwgMzYsIDIxLCAxODksIDM2LCAyMSwgMTk0LCAzNiwgMjEsIDE5OCwgCi0gICAgMzYsIDIxLCAxOTUsIDM2LCAyMSwgMjAwLCAzNiwgNTQsIDIxNiwgMjQ3LCAzNiwgNTQsIDEyMywgMjQwLCAyMTAsIDM2LCAKLSAgICA1NCwgMTIzLCAyMTYsIDE0NywgMzYsIDI0OCwgMTQ2LCA1MCwgMzYsIDIzMCwgMTM1LCA1MCwgMzYsIDIxMSwgNDUsIDUwLCAKLSAgICAzNiwgMjQ4LCA4NywgNTAsIDM2LCAyNDksIDEzOSwgNTAsIDM2LCAyNTMsIDIzOCwgNzcsIDUwLCAzNiwgMjIyLCAxMTgsIAotICAgIDUwLCAzNiwgNTQsIDUwLCAxNDgsIDUsIDI1MCwgMjU1LCAxNDgsIDUsIDI1NCwgNzUsIDE0OCwgNSwgMjEzLCAxNDcsIDE0OCwgCi0gICAgMSwgNjEsIDE0OCwgMSwgMjU1LCA3MywgMTQ4LCAxLCA3MywgMTQ4LCAxLCAyMzYsIDMzLCAxNDgsIDEsIDcwLCAxNDgsIDEsIAotICAgIDIxNCwgMTE4LCAxNDgsIDEsIDE0OSwgMTUzLCAxNDgsIDEsIDE0OSwgMTU2LCAxNDgsIDEsIDc1LCAxNDgsIDEsIDI0NSwgCi0gICAgMjA5LCAxNDgsIDEsIDI1NCwgMjAxLCAxNDgsIDEsIDc2LCAxNDgsIDEsIDIyNiwgMTgzLCAxNDgsIDEsIDI1MywgMTkyLCAKLSAgICAxNDgsIDEsIDE3NiwgMTQ4LCAxLCAyMzQsIDEzMiwgMTQ4LCAxLCAyNDMsIDEzNSwgMTQ4LCAxLCAyNDIsIDI0OSwgMTQ4LCAKLSAgICAxLCAyMjksIDc3LCAxNDgsIDEsIDI1MSwgMzMsIDE0OCwgMSwgMjUwLCAxNTcsIDE0OCwgMSwgMjM1LCAxNDEsIDE0OCwgMSwgCi0gICAgMjM1LCAxMTQsIDE0OCwgMSwgMjI3LCAxNjUsIDE0OCwgMSwgMjE1LCAxNTYsIDE0OCwgMSwgMjE1LCAxNDQsIDE0OCwgMSwgCi0gICAgMjQ4LCAxMzUsIDE0OCwgMSwgMjQ4LCAxMTksIDE0OCwgMSwgMjI4LCAxMTAsIDE0OCwgMSwgMjE3LCAxMDUsIDE0OCwgMSwgCi0gICAgMjE2LCAyMDgsIDE0OCwgMSwgMjQ4LCAyMjEsIDE0OCwgMSwgMjQ4LCAyNSwgMTQ4LCAxLCAxOTcsIDE0OCwgMSwgMTkwLCAKLSAgICAxNDgsIDEsIDIyNSwgMTQ3LCAxNDgsIDEsIDI1MiwgMTkxLCAxNDgsIDEsIDI1MiwgMTgsIDE0OCwgMSwgMTg0LCAxNDgsIDEsIAotICAgIDE5MSwgMTQ4LCAxLCAyMDUsIDE0OCwgMSwgMjIyLCAxNzksIDE0OCwgMSwgMjMzLCAxMzUsIDE0OCwgMSwgMjMyLCAxODQsIAotICAgIDE0OCwgMSwgMjE0LCAyNywgMTQ4LCAxLCAyMjAsIDEwMiwgMTQ4LCAxLCAyMTgsIDIyMywgMTQ4LCAxLCAyMDYsIDE0OCwgMSwgCi0gICAgMTYyLCAxNDgsIDUsIDI1MywgMTc1LCAxNDgsIDI1LCA1LCAyNTUsIDczLCAxNDgsIDI1LCA1LCA3MywgMTQ4LCAyNSwgNSwgCi0gICAgMjM2LCAzMywgMTQ4LCAyNSwgNSwgNzAsIDE0OCwgMjUsIDUsIDIxNCwgMTE4LCAxNDgsIDI1LCA1LCAxNDksIDE1MywgMTQ4LCAKLSAgICAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTQ4LCAyNSwgNSwgNzUsIDE0OCwgMjUsIDUsIDI0NSwgMjA5LCAxNDgsIDI1LCA1LCAKLSAgICAyNTQsIDIwMSwgMTQ4LCAyNSwgNSwgNzYsIDE0OCwgMjUsIDUsIDIyNiwgMTgzLCAxNDgsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMTQ4LCA1LCAyMTMsIDE1MiwgMTQ4LCAyMzMsIDIzLCA3OCwgMTQ4LCAyNTQsIDIwMiwgMjMzLCAyMywgNzgsIDE0OCwgMSwgCi0gICAgMjE1LCAxODMsIDE0OCwgMSwgMjQ2LCAzOCwgMTQ4LCAxLCAxNDksIDIyMiwgMTgwLCAxNDgsIDEsIDE0OSwgMjMyLCAxODUsIAotICAgIDE0OCwgMjUsIDUsIDE0OSwgMTU2LCAxNDgsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNDgsIDIxLCAyMTAsIDg2LCAxNDgsIAotICAgIDIxLCAxMTAsIDE0OCwgMjEsIDEwNSwgMTQ4LCAyMSwgMTU4LCAxNDgsIDIxLCAxNjEsIDE0OCwgMjEsIDE4OSwgMTQ4LCAyMSwgCi0gICAgMTk0LCAxNDgsIDIxLCAxOTgsIDE0OCwgMjEsIDE5NSwgMTQ4LCAyMSwgMjAwLCAxNDgsIDI0NCwgMiwgMjEsIDIxMCwgODcsIAotICAgIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTIzLCAzMSwgMjI2LCAyMzcsIDIyNCwgCi0gICAgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDExMywgMzEsIDIyNiwgMjM3LCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAKLSAgICAyNDQsIDIsIDIxLCAxMzQsIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTIzLCAKLSAgICAzMSwgMjQ1LCA0MiwgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTEzLCAzMSwgMjQ1LCA0MiwgMjI0LCAKLSAgICAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTM0LCAzMSwgMjQ1LCA0MiwgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgCi0gICAgNSwgMjE1LCA4NCwgMTY1LCA1LCAyNTQsIDc1LCAxNjUsIDUsIDIxMywgMTQ3LCAxNjUsIDEsIDYxLCAxNjUsIDEsIDI1NSwgCi0gICAgNzMsIDE2NSwgMSwgNzMsIDE2NSwgMSwgMjM2LCAzMywgMTY1LCAxLCA3MCwgMTY1LCAxLCAyMTQsIDExOCwgMTY1LCAxLCAKLSAgICAxNDksIDE1MywgMTY1LCAxLCAxNDksIDE1NiwgMTY1LCAxLCA3NSwgMTY1LCAxLCAyNDUsIDIwOSwgMTY1LCAxLCAyNTQsIAotICAgIDIwMSwgMTY1LCAxLCA3NiwgMTY1LCAxLCAyMjYsIDE4MywgMTY1LCAxLCAyNTMsIDE5MiwgMTY1LCAxLCAxNzYsIDE2NSwgMSwgCi0gICAgMjM0LCAxMzIsIDE2NSwgMSwgMjQzLCAxMzUsIDE2NSwgMSwgMjQyLCAyNDksIDE2NSwgMSwgMjI5LCA3NywgMTY1LCAxLCAKLSAgICAyNTEsIDMzLCAxNjUsIDEsIDI1MCwgMTU3LCAxNjUsIDEsIDIzNSwgMTQxLCAxNjUsIDEsIDIzNSwgMTE0LCAxNjUsIDEsIAotICAgIDIyNywgMTY1LCAxNjUsIDEsIDIxNSwgMTU2LCAxNjUsIDEsIDIxNSwgMTQ0LCAxNjUsIDEsIDI0OCwgMTM1LCAxNjUsIDEsIAotICAgIDI0OCwgMTE5LCAxNjUsIDEsIDIyOCwgMTEwLCAxNjUsIDEsIDIxNywgMTA1LCAxNjUsIDEsIDIxNiwgMjA4LCAxNjUsIDEsIAotICAgIDI0OCwgMjIxLCAxNjUsIDEsIDI0OCwgMjUsIDE2NSwgMSwgMTk3LCAxNjUsIDEsIDE5MCwgMTY1LCAxLCAyMjUsIDE0NywgCi0gICAgMTY1LCAxLCAyNTIsIDE5MSwgMTY1LCAxLCAyNTIsIDE4LCAxNjUsIDEsIDE4NCwgMTY1LCAxLCAxOTEsIDE2NSwgMSwgMjA1LCAKLSAgICAxNjUsIDEsIDIyMiwgMTc5LCAxNjUsIDEsIDIzMywgMTM1LCAxNjUsIDEsIDIzMiwgMTg0LCAxNjUsIDEsIDIxNCwgMjcsIAotICAgIDE2NSwgMSwgMjIwLCAxMDIsIDE2NSwgMSwgMjE4LCAyMjMsIDE2NSwgMSwgMjA2LCAxNjUsIDEsIDE2MiwgMTY1LCA1LCAKLSAgICAyMjcsIDIwNSwgMTY1LCA1LCAyNTMsIDE3NSwgMTY1LCAyNSwgNSwgMjU1LCA3MywgMTY1LCAyNSwgNSwgNzMsIDE2NSwgMjUsIAotICAgIDUsIDIzNiwgMzMsIDE2NSwgMjUsIDUsIDcwLCAxNjUsIDI1LCA1LCAyMTQsIDExOCwgMTY1LCAyNSwgNSwgMTQ5LCAxNTMsIAotICAgIDE2NSwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE2NSwgMjUsIDUsIDc1LCAxNjUsIDI1LCA1LCAyNDUsIDIwOSwgMTY1LCAyNSwgCi0gICAgNSwgMjU0LCAyMDEsIDE2NSwgMjUsIDUsIDc2LCAxNjUsIDI1LCA1LCAyMjYsIDE4MywgMTY1LCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDE2NSwgNSwgMjEzLCAxNTIsIDE2NSwgMjMzLCAyMywgNzgsIDE2NSwgMjU0LCAyMDIsIDIzMywgMjMsIDc4LCAxNjUsIDEsIAotICAgIDI0NCwgMTk2LCAxNjUsIDEsIDE0OSwgMjIyLCAxODAsIDE2NSwgMSwgMTQ5LCAyMzIsIDE4NSwgMTY1LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTYsIDE2NSwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE2NSwgMjEsIDIxMCwgODYsIDE2NSwgMjEsIDExMCwgMTY1LCAyMSwgCi0gICAgMTA1LCAxNjUsIDIxLCAxNTgsIDE2NSwgMjEsIDE2MSwgMTY1LCAyMSwgMTg5LCAxNjUsIDIxLCAxOTQsIDE2NSwgMjEsIAotICAgIDE5OCwgMTY1LCAyMSwgMTk1LCAxNjUsIDIxLCAyMDAsIDE2NSwgNSwgMjM1LCAxMDIsIDE2NSwgNSwgMjE0LCAxNjEsIDEzNiwgCi0gICAgNSwgMjU0LCA3NSwgMTM2LCA1LCAyMTMsIDE0NywgMTM2LCAxLCA2MSwgMTM2LCAxLCAyNTUsIDczLCAxMzYsIDEsIDczLCAKLSAgICAxMzYsIDEsIDIzNiwgMzMsIDEzNiwgMSwgNzAsIDEzNiwgMSwgMjE0LCAxMTgsIDEzNiwgMSwgMTQ5LCAxNTMsIDEzNiwgMSwgCi0gICAgMTQ5LCAxNTYsIDEzNiwgMSwgNzUsIDEzNiwgMSwgMjQ1LCAyMDksIDEzNiwgMSwgMjU0LCAyMDEsIDEzNiwgMSwgNzYsIAotICAgIDEzNiwgMSwgMjI2LCAxODMsIDEzNiwgMSwgMjUzLCAxOTIsIDEzNiwgMSwgMTc2LCAxMzYsIDEsIDIzNCwgMTMyLCAxMzYsIAotICAgIDEsIDI0MywgMTM1LCAxMzYsIDEsIDI0MiwgMjQ5LCAxMzYsIDEsIDIyOSwgNzcsIDEzNiwgMSwgMjUxLCAzMywgMTM2LCAxLCAKLSAgICAyNTAsIDE1NywgMTM2LCAxLCAyMzUsIDE0MSwgMTM2LCAxLCAyMzUsIDExNCwgMTM2LCAxLCAyMjcsIDE2NSwgMTM2LCAxLCAKLSAgICAyMTUsIDE1NiwgMTM2LCAxLCAyMTUsIDE0NCwgMTM2LCAxLCAyNDgsIDEzNSwgMTM2LCAxLCAyNDgsIDExOSwgMTM2LCAxLCAKLSAgICAyMjgsIDExMCwgMTM2LCAxLCAyMTcsIDEwNSwgMTM2LCAxLCAyMTYsIDIwOCwgMTM2LCAxLCAyNDgsIDIyMSwgMTM2LCAxLCAKLSAgICAyNDgsIDI1LCAxMzYsIDEsIDE5NywgMTM2LCAxLCAyMjgsIDkyLCAxMzYsIDEsIDE5MCwgMTM2LCAxLCAyMjUsIDE0NywgCi0gICAgMTM2LCAxLCAyNTIsIDE5MSwgMTM2LCAxLCAyNTIsIDE4LCAxMzYsIDEsIDE4NCwgMTM2LCAxLCAxOTEsIDEzNiwgMSwgMjA1LCAKLSAgICAxMzYsIDEsIDIyMiwgMTc5LCAxMzYsIDEsIDIzMywgMTM1LCAxMzYsIDEsIDIzMiwgMTg0LCAxMzYsIDEsIDIzMiwgMTc1LCAKLSAgICAxMzYsIDEsIDIxNCwgMjcsIDEzNiwgMSwgMjIwLCAxMDIsIDEzNiwgMSwgMjE4LCAyMjMsIDEzNiwgMSwgMjA2LCAxMzYsIDEsIAotICAgIDE2MiwgMTM2LCAxLCAyMTUsIDEyNSwgMTM2LCA1LCAyNTMsIDE3NSwgMTM2LCAyNSwgNSwgMjU1LCA3MywgMTM2LCAyNSwgNSwgCi0gICAgNzMsIDEzNiwgMjUsIDUsIDIzNiwgMzMsIDEzNiwgMjUsIDUsIDcwLCAxMzYsIDI1LCA1LCAyMTQsIDExOCwgMTM2LCAyNSwgCi0gICAgNSwgMTQ5LCAxNTMsIDEzNiwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDEzNiwgMjUsIDUsIDc1LCAxMzYsIDI1LCA1LCAyNDUsIAotICAgIDIwOSwgMTM2LCAyNSwgNSwgMjU0LCAyMDEsIDEzNiwgMjUsIDUsIDc2LCAxMzYsIDI1LCA1LCAyMjYsIDE4MywgMTM2LCAyNSwgCi0gICAgNSwgMjUzLCAxOTIsIDEzNiwgNSwgMjEzLCAxNTIsIDEzNiwgMSwgNTksIDIyMywgNzMsIDEzNiwgMjUzLCAxOTMsIDIzMywgCi0gICAgMjMsIDc4LCAxMzYsIDEsIDE0OSwgMjIyLCAxODAsIDEzNiwgMSwgMTQ5LCAyMzIsIDE4NSwgMTM2LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTYsIDEzNiwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDEzNiwgMjEsIDIxMCwgODYsIDEzNiwgMjEsIDExMCwgMTM2LCAyMSwgCi0gICAgMTA1LCAxMzYsIDIxLCAxNTgsIDEzNiwgMjEsIDE2MSwgMTM2LCAyMSwgMTg5LCAxMzYsIDIxLCAxOTQsIDEzNiwgMjEsIAotICAgIDE5OCwgMTM2LCAyMSwgMTk1LCAxMzYsIDIxLCAyMDAsIDEzNiwgNTQsIDIxNiwgMjQ3LCAxMzYsIDU0LCAxMjMsIDI0MCwgCi0gICAgMjEwLCAxMzYsIDU0LCAxMjMsIDIxNiwgMTQ3LCAxMzYsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAxMzYsIDI0NCwgMiwgMTIzLCAKLSAgICAyNDIsIDI3LCAxMzYsIDI0NCwgMiwgMTM0LCAyMjQsIDE5LCAxMzYsIDI0OCwgMTUwLCA3OCwgMTM2LCAxLCAyNTAsIDk5LCAKLSAgICAyMjgsIDExMSwgMTM2LCAxLCAyNTAsIDk5LCAyMzAsIDI1LCAxMzYsIDEsIDI1MCwgOTksIDIyMiwgMTgwLCAxMzYsIDEsIAotICAgIDI1MCwgOTksIDE1NiwgMTM2LCAxLCAyNTAsIDk5LCAyMzIsIDE4NSwgMTM2LCAxLCAyNTAsIDk5LCAyMzUsIDIzLCAxNzUsIAotICAgIDUsIDI1NCwgNzQsIDE3NSwgNSwgMjEzLCAxNDYsIDE3NSwgMSwgMjUzLCAxNjUsIDE3NSwgMSwgMjU1LCAyNywgMTc1LCAxLCAKLSAgICAyNTQsIDIyMywgMTc1LCAxLCAyNTQsIDIzOCwgMTc1LCAxLCAyMzUsIDE1MSwgMTc1LCAxLCAyMzYsIDMyLCAxNzUsIDEsIAotICAgIDIxNCwgMTEwLCAxNzUsIDEsIDIxNCwgMTEyLCAxNzUsIDEsIDIzNSwgMTczLCAxNzUsIDEsIDIzNSwgMTc0LCAxNzUsIDEsIAotICAgIDIzNiwgMTgsIDE3NSwgMSwgMjM2LCAyMCwgMTc1LCAxLCAyNDUsIDE3LCAxNzUsIDEsIDI0NSwgMjA0LCAxNzUsIDEsIDI1NCwgCi0gICAgMTg4LCAxNzUsIDEsIDIyNiwgMTA4LCAxNzUsIDEsIDIyNiwgMTc3LCAxNzUsIDEsIDI1MywgMTc4LCAxNzUsIDEsIDI1NCwgCi0gICAgMTQ2LCAyMzQsIDE4NywgMTc1LCAxLCAyMzEsIDIwOSwgMjM0LCAxODcsIDE3NSwgMSwgMjU0LCAxNDYsIDI0MywgODIsIAotICAgIDE3NSwgMSwgMjMxLCAyMDksIDI0MywgODIsIDE3NSwgMSwgMjM0LCAyMjksIDIyOSwgMjIyLCAxNzUsIDEsIDIyMSwgMjM2LCAKLSAgICAyNDMsIDgyLCAxNzUsIDEsIDI1NCwgMTQ2LCAyNTAsIDIxNiwgMTc1LCAxLCAyMzEsIDIwOSwgMjUwLCAyMTYsIDE3NSwgMSwgCi0gICAgMjU0LCAxNDYsIDIzNSwgMTI3LCAxNzUsIDEsIDIzMSwgMjA5LCAyMzUsIDEyNywgMTc1LCAxLCAyMTcsIDk4LCAyMjksIAotICAgIDIyMiwgMTc1LCAxLCAyMTcsIDk4LCAyMjEsIDIzNSwgMjI5LCAyMjMsIDE3NSwgMSwgMjIxLCAyMzYsIDIzNSwgMTI3LCAKLSAgICAxNzUsIDEsIDI1NCwgMTQ2LCAyMTUsIDE1MiwgMTc1LCAxLCAyMzEsIDIwOSwgMjE1LCAxNTIsIDE3NSwgMSwgMjU0LCAxNDYsIAotICAgIDI0OCwgMTI2LCAxNzUsIDEsIDIzMSwgMjA5LCAyNDgsIDEyNiwgMTc1LCAxLCAyMzAsIDUzLCAyMjksIDE4MCwgMTc1LCAxLCAKLSAgICAyMjEsIDIzNiwgMjQ4LCAxMjYsIDE3NSwgMSwgMjU0LCAxNDYsIDIxNywgMzAsIDE3NSwgMSwgMjMxLCAyMDksIDIxNywgMzAsIAotICAgIDE3NSwgMSwgMjU0LCAxNDYsIDI0OCwgMTQ0LCAxNzUsIDEsIDIzMSwgMjA5LCAyNDgsIDE0NCwgMTc1LCAxLCAyNDgsIDE3NCwgCi0gICAgMjI5LCAxODAsIDE3NSwgMSwgMjIxLCAyMzYsIDI0OCwgMTQ0LCAxNzUsIDEsIDI1NCwgMTQ2LCAyMjUsIDIyOCwgMTc1LCAxLCAKLSAgICAyMzEsIDIwOSwgMjI1LCAyMjgsIDE3NSwgMSwgMjU0LCAxNDYsIDI1MiwgMTEyLCAxNzUsIDEsIDIzMSwgMjA5LCAyNTIsIAotICAgIDExMiwgMTc1LCAxLCAyMzEsIDEzMSwgMTc1LCAxLCAyNTQsIDEzMSwgMjUyLCAxMTIsIDE3NSwgMSwgMjExLCA1MSwgMTc1LCAKLSAgICAxLCAyMjMsIDEzMywgMTc1LCAxLCAyNDgsIDE3NCwgMjMzLCA2NywgMTc1LCAxLCAyMTQsIDEsIDE3NSwgMSwgMjE3LCA5OCwgCi0gICAgMjIxLCAyMTAsIDE3NSwgMSwgMjMwLCA1MywgMjIxLCAyMTAsIDE3NSwgMSwgMjQ4LCAxNzQsIDIyMSwgMjEwLCAxNzUsIDEsIAotICAgIDI0MSwgMjQyLCAxNzUsIDEsIDIzMCwgNTMsIDIzMywgNjcsIDE3NSwgMSwgMjQ0LCAxNTYsIDE3NSwgNSwgMjU0LCAxNzcsIAotICAgIDE3NSwgMjUsIDUsIDI1NCwgMjMzLCAxNzUsIDI1LCA1LCAyMzQsIDE1NSwgMjU0LCAyNDAsIDE3NSwgMjUsIDUsIDI0NywgCi0gICAgMjI4LCAyNTQsIDI0MCwgMTc1LCAyNSwgNSwgMjM0LCAxNTUsIDIzNSwgMTcwLCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjM1LCAKLSAgICAxNzAsIDE3NSwgMjUsIDUsIDIzNCwgMTU1LCAyMjYsIDg4LCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjI2LCA4OCwgMTc1LCAKLSAgICAyNSwgNSwgMjQzLCAxMjQsIDE3NSwgMjUsIDUsIDIzNCwgMTUsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyMzQsIDE1LCAxNzUsIAotICAgIDI1LCA1LCAyMzQsIDE3LCAyNDgsIDY3LCAxNzUsIDI1LCA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAyNTQsIDIzMywgMTc1LCAyNSwgCi0gICAgNSwgMjM0LCAxNiwgMjQyLCA0NywgMjQ3LCAyMjgsIDI1NCwgMjMzLCAxNzUsIDI1LCA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAKLSAgICAyNDMsIDgxLCAxNzUsIDI1LCA1LCAyNDMsIDgxLCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjQzLCAxMjQsIDE3NSwgMjUsIDUsIAotICAgIDI0NywgMjI4LCAyNDMsIDgxLCAxNzUsIDIyNCwgMTQxLCAyMzMsIDIwNywgMTY4LCAxMzUsIDIzNCwgMjksIDIzNCwgMjQ2LCAKLSAgICAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgMTI4LCAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgOTksIDE2OCwgMTM1LCAyMzQsIAotICAgIDEwNiwgMjM0LCA5NSwgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMzQsIDEwMywgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMjMsIDE1NCwgCi0gICAgMTY4LCAxMzUsIDIyOSwgNSwgMjI4LCAyNDgsIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDE0NywgMTY4LCAxMzUsIDI1MCwgCi0gICAgODcsIDI1MCwgOTUsIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDE0NiwgMTY4LCAxMzUsIDIxOSwgNTksIDIxOSwgNTgsIAotICAgIDE2OCwgMTM1LCAyNTAsIDg3LCAyNTAsIDgzLCAxNjgsIDEzNSwgMjEwLCAyNDUsIDIxMCwgMjUyLCAxNjgsIDEzNSwgMjQ3LCAKLSAgICAxNDYsIDI1MCwgMTU0LCAxNjgsIDEzNSwgMjE2LCA0MiwgMjI1LCAyMzgsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjE2LCAyMDAsIAotICAgIDE2OCwgMTM1LCAyMTYsIDE1NywgMjI5LCAyMDEsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjI1LCAxMTEsIDE2OCwgMTM1LCAKLSAgICAyMjgsIDc1LCAyMjksIDk4LCAxNjgsIDEzNSwgMjQ3LCAxNDYsIDI0OCwgNjgsIDE2OCwgMTM1LCAyMTYsIDQyLCAyMTcsIAotICAgIDU1LCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMTMxLCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMjA0LCAxNjgsIDEzNSwgCi0gICAgMjE2LCAxNTcsIDIxNiwgMTU0LCAxNjgsIDEzNSwgMjI4LCA3NSwgMjI3LCAyMzcsIDE2OCwgMTM1LCAyNTEsIDIwNiwgMjUyLCAKLSAgICAxNjQsIDE2OCwgMTM1LCAyMjUsIDE3LCAyMjUsIDQyLCAxNjgsIDEzNSwgMjI1LCAxMjIsIDIyNSwgMTEzLCAxNjgsIDEzNSwgCi0gICAgMjQ0LCA0NCwgMjQ0LCAxOTYsIDE2OCwgMTM1LCAyMjUsIDEyMiwgMjI1LCAxNDEsIDE2OCwgMTM1LCAyNDQsIDQ0LCAyNDQsIAotICAgIDE3MywgMTY4LCAxMzUsIDIyNSwgMTIyLCAyMjEsIDI0NywgMTY4LCAxMzUsIDIzMCwgMTYyLCAxODQsIDE2OCwgMTM1LCAKLSAgICAyMTAsIDI0NSwgMjExLCA3OSwgMTY4LCAxMzUsIDIyMiwgMjEyLCAyMjIsIDEzOSwgMTY4LCAxMzUsIDIyMiwgMTQwLCAxNjgsIAotICAgIDEzNSwgMjMyLCAxNTcsIDIzMiwgMjA2LCAxNjgsIDEzNSwgMjMyLCA5OCwgMTY4LCAxMzUsIDIxMSwgMjI4LCAyMTIsIDYxLCAKLSAgICAxNjgsIDEzNSwgMjE5LCA1OSwgMjIyLCA2LCAxNjgsIDEzNSwgMjE5LCA1OSwgMjIyLCAxMTQsIDE2OCwgMTM1LCAyMTksIAotICAgIDU5LCAyMTgsIDgyLCAxNjgsIDEzNSwgMjQxLCA2OSwgMjQxLCAxNTksIDE2OCwgMTM1LCAyMzIsIDE1NywgMjUwLCA2OCwgCi0gICAgMTY4LCAxMzUsIDE0NCwgMjU0LCAxMTUsIDE2OCwgMTM1LCAyNDEsIDY5LCAyMjgsIDcwLCAxNjgsIDEzNSwgMjI2LCA2OCwgCi0gICAgMTY4LCAxMzUsIDIyMSwgMjMwLCA2MSwgMTY4LCAxMzUsIDIzMSwgMjA0LCAyNDIsIDE3LCAxNjgsIDEzNSwgMjIxLCAyMzAsIAotICAgIDI1NSwgNzMsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAxMzYsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzMsIDE2OCwgMTM1LCAKLSAgICAyMjEsIDIzMCwgMjM2LCAzMywgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIDIxNCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIAotICAgIDIxMiwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3MCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyMTQsIDExOCwgMTY4LCAxMzUsIDIyNSwgCi0gICAgMTI0LCAxNjgsIDI0OSwgOTgsIDE2LCAyNTIsIDE2NSwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3NSwgMTY4LCAxMzUsIDIyMSwgCi0gICAgMjMwLCAyNTQsIDI0MywgMTY4LCAxMzUsIDIyMSwgMjMwLCA3NiwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyNTQsIDIwMiwgMjMxLCAKLSAgICAxOTgsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAyMDIsIDIzMSwgMTk5LCAxNjgsIDEzNSwgMjMzLCAxMDYsIDE2OCwgCi0gICAgMTM1LCAyMzEsIDE5NSwgMTY4LCAxMzUsIDIzMSwgMTk2LCAxNjgsIDEzNSwgMjMxLCAyMDQsIDI0NSwgMTgwLCAxNjgsIAotICAgIDEzNSwgMjMxLCAyMDQsIDIxNiwgMTU2LCAxNjgsIDEzNSwgMjMxLCAyMDQsIDIxNSwgMjI4LCAxNjgsIDEzNSwgMjMxLCAKLSAgICAyMDQsIDI1MCwgMTM1LCAxNjgsIDEzNSwgMjE2LCAxOTgsIDE2OCwgMTM1LCAyMjgsIDIwNSwgMTY4LCAxMzUsIDIxMSwgNzMsIAotICAgIDE2OCwgMTM1LCAyNDQsIDM1LCAxNjgsIDIxLCAyMTAsIDg2LCAxNjgsIDIxLCAxMTAsIDE2OCwgMjEsIDEwNSwgMTY4LCAyMSwgCi0gICAgMTU4LCAxNjgsIDIxLCAxNjEsIDE2OCwgMjEsIDE4OSwgMTY4LCAyMSwgMTk0LCAxNjgsIDIxLCAxOTgsIDE2OCwgMjEsIAotICAgIDE5NSwgMTY4LCAyMSwgMjAwLCAxNjgsIDEzNSwgMjU0LCAxMTEsIDE2OCwgMTM1LCAyMzQsIDEwNCwgMjA5LCAyMDksIDEsIAotICAgIDIzNCwgMjgsIDIwOSwgMjA5LCAxLCAyMzQsIDEwNiwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDIzNCwgMTA2LCAyMTcsIDYyLCAKLSAgICAyMDksIDIwOSwgMSwgMjI5LCA0LCAyMDksIDIwOSwgMSwgMjQ5LCAyMzgsIDIwOSwgMjA5LCAxLCAyMTksIDU5LCAyMTcsIAotICAgIDYyLCAyMDksIDIwOSwgMSwgMjI3LCAxMzQsIDIwOSwgMjA5LCAxLCAyNDcsIDE0NSwgMjA5LCAyMDksIDEsIDExMSwgMjA5LCAKLSAgICAyMDksIDEsIDIxNiwgMTU3LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjE2LCAxNTcsIDIxNywgNjIsIDIwOSwgMjA5LCAxLCAKLSAgICAyMjgsIDc0LCAyMDksIDIwOSwgMSwgMjUxLCAyMDUsIDIwOSwgMjA5LCAxLCAyMjUsIDE2LCAyMDksIDIwOSwgMSwgMjI1LCAKLSAgICAxMjIsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyMTcsIDYyLCAyMDksIDIwOSwgMSwgMjI1LCAxMjIsIDIxNywgCi0gICAgNjIsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjMwLCAxNjEsIDIwOSwgMjA5LCAxLCAKLSAgICAyMTAsIDI0NCwgMjA5LCAyMDksIDEsIDIzMiwgMTU3LCAyMzIsIDIwNiwgMjA5LCAyMDksIDEsIDIzMiwgMTU3LCAyMzIsIAotICAgIDEyMSwgMjA5LCAyMDksIDEsIDIxMSwgMjI3LCAyMDksIDIwOSwgMSwgMjE5LCA1OSwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIAotICAgIDI0MSwgNjksIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCA3NiwgMjA5LCAyMDksIDEsIDI0MSwgNjksIDIxNywgNjIsIDIwOSwgCi0gICAgMjA5LCAyNDUsIDE2MywgMjA5LCAyMDksIDI1LCA1LCA2MSwgMjA5LCAyMDksIDI1LCA1LCAyMzEsIDIwNCwgMjM0LCAyMzQsIAotICAgIDIwOSwgMjA5LCAyNSwgNSwgMjU1LCA3MywgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDEzNiwgMjA5LCAyMDksIDI1LCA1LCA3MywgCi0gICAgMjA5LCAyMDksIDI1LCA1LCAyMzYsIDMzLCAyMDksIDIwOSwgMjUsIDUsIDIxMSwgMTE3LCAyMDksIDIwOSwgMjUsIDUsIAotICAgIDIxMCwgMTY5LCAyMDksIDIwOSwgMjUsIDUsIDcwLCAyMDksIDIwOSwgMjUsIDUsIDIxNCwgMTE4LCAyMDksIDIwOSwgMjUsIAotICAgIDUsIDIzMSwgMjA0LCAyMzQsIDEzLCAyMDksIDIwOSwgMjIwLCAxNDUsIDUsIDIzMiwgMTU2LCAyMDksIDIwOSwgMjIwLCAKLSAgICAxNDUsIDUsIDIyNywgMTM0LCAyMDksIDIwOSwgMjUsIDUsIDc1LCAyMDksIDIwOSwgMjUsIDUsIDI0NSwgMTk1LCAyMDksIAotICAgIDIwOSwgMjUsIDUsIDc2LCAyMDksIDIwOSwgMjUsIDUsIDI1MywgMTY3LCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMjAxLCAKLSAgICAyMDksIDIwOSwgMjM0LCAyOSwgMjMzLCAxMzUsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA0LCAyNDUsIDE4MCwgMjA5LCAyMDksIAotICAgIDEzOCwgMjMxLCAyMDQsIDIxNiwgMTU2LCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwNCwgMjE2LCAxMTcsIDIwOSwgMjA5LCAKLSAgICAxMzgsIDIzMSwgMjA0LCAyNTAsIDIyMywgMjA5LCAyMDksIDI1MSwgNCwgNzgsIDIwOSwgMjA5LCAyMjgsIDIxNCwgMjA5LCAKLSAgICAyMDksIDIxLCAyMTAsIDg2LCAyMDksIDIwOSwgMjEsIDExMCwgMjA5LCAyMDksIDIxLCAxMDUsIDIwOSwgMjA5LCAyMSwgCi0gICAgMTU4LCAyMDksIDIwOSwgMjEsIDE2MSwgMjA5LCAyMDksIDIxLCAxODksIDIwOSwgMjA5LCAyMSwgMTk0LCAyMDksIDIwOSwgCi0gICAgMjEsIDE5OCwgMjA5LCAyMDksIDIxLCAxOTUsIDIwOSwgMjA5LCAyMSwgMjAwLCAyMDksIDIwOSwgMjQxLCA2OSwgMjI4LCAKLSAgICA3NCwgMjA5LCAyMDksIDI0MSwgNjksIDIzMCwgMTYxLCAyMDksIDIwOSwgMSwgMjM0LCAxMDcsIDI0MiwgMTc0LCAyMDksIAotICAgIDIwOSwgMSwgMjM0LCAxMDcsIDIyNywgMTM0LCA2MywgMywgMjI2LCAyMDQsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIAotICAgIDIzMCwgMjQ4LCAyMTUsIDE4OSwgNjEsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIDIzMCwgMjQ4LCAyNTUsIDE1OSwgCi0gICAgMjIyLCAyMTYsIDI1MiwgNzcsIDE4NCwgNjMsIDE2NCwgMjQyLCAxMTUsIDIxMSwgMCwgMjMwLCAyNDgsIDI1NSwgMTU5LCAKLSAgICAyNDIsIDExNSwgMjE1LCAxNzMsIDE4NCwgNjMsIDE2NCwgNjUsIDIxMSwgMCwgMjMwLCAyNDgsIDIzMSwgOTMsIDE4NCwgNjMsIAotICAgIDE2NCwgMjQ5LCAyNTIsIDIxMSwgMCwgMjMwLCAyNDgsIDIyMCwgMTA5LCAxODQsIDYzLCAxNjQsIDI1MCwgMjM5LCAyMTEsIAotICAgIDAsIDIzMCwgMjQ4LCAyMjUsIDExMiwgMjIwLCA5NiwgMTg0LCA2MywgMTY0LCAyMTEsIDAsIDIzMCwgMjQ4LCAyMTUsIDE3MywgCi0gICAgMjIwLCA5NiwgMTg0LCA2MywgMTY0LCAyMjEsIDIwOCwgMjIwLCA5NSwgNjMsIDE2NCwgMjUxLCAxMjgsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDcsIDYzLCAxNjQsIDI1MSwgMjIzLCAyMjAsIDMsIDIxMSwgMCwgMjMwLCAyNDcsIDYzLCAxNjQsIDIzNSwgMTk3LCAyMTUsIAotICAgIDE3MiwgNjMsIDE2NCwgMjQ4LCA2MSwgMjE1LCAxNzMsIDI1MSwgMTI3LCA2MywgMTY0LCAyMjAsIDk1LCA2MywgMTY0LCAKLSAgICAyMjcsIDEzOSwgMjIwLCA5NSwgNjMsIDE2NCwgMjE1LCAxNzMsIDIyMCwgOTUsIDYzLCAxNjQsIDIyNywgMTM5LCAyMTUsIAotICAgIDE3MywgMjIwLCA5NSwgNjMsIDE2NCwgMjIyLCAyMzYsIDI1MCwgMTIyLCAyMTgsIDIzNiwgMjIwLCA5NSwgNjMsIDE2NCwgCi0gICAgMjIzLCA0MiwgMjQyLCAxNDYsIDIyMCwgOTUsIDYzLCAxNjQsIDI1MCwgMjM5LCAyNTUsIDE2MywgMjIyLCAxNDQsIDIzMSwgCi0gICAgOTIsIDE5OSwgMjUxLCA3LCA2MywgMTY0LCAyNDIsIDExNSwgMjE1LCAxNzIsIDYzLCAyMzIsIDE0NCwgNSwgMjUwLCAxNTUsIAotICAgIDIyMiwgMTQzLCA2MywgMjMyLCAxNDQsIDUsIDIzMiwgMjUyLCAyMjIsIDE0MywgNjMsIDI1MywgMjEyLCA1LCAyMjAsIDEwNSwgCi0gICAgMjQzLCA2NSwgMjU1LCAxNjQsIDIyMiwgMTQzLCA2MywgMjUzLCAyMTIsIDUsIDI1NSwgMTYxLCAxOTAsIDYzLCAyNTMsIAotICAgIDIxMiwgNSwgMjIxLCAxODIsIDIxNSwgMTY4LCA2MywgNSwgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDMsIDY0LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDIsIDE3NiwgNjMsIDUsIDIyMywgMTMwLCAyNDcsIDE1OSwgMjQyLCAxMTYsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MywgNjQsIDYzLCA1LCAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MiwgMTc2LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDI0NywgMTU5LCAyMjMsIDEzMCwgMjI5LCAyMTgsIDYzLCAyMSwgMjEwLCA4NiwgNjMsIDIxLCAxMTAsIDYzLCAKLSAgICAyMSwgMTA1LCA2MywgMjEsIDE1OCwgNjMsIDIxLCAxNjEsIDYzLCAyMSwgMTg5LCA2MywgMjEsIDE5NCwgNjMsIDIxLCAxOTgsIAotICAgIDYzLCAyMSwgMTk1LCA2MywgMjEsIDIwMCwgNjMsIDIxLCAxNjMsIDExMCwgNjMsIDIxLCAxNjMsIDEwNSwgNjMsIDIxLCAKLSAgICAxNjMsIDE1OCwgNjMsIDIxLCAxNjMsIDE2MSwgNjMsIDIxLCAxNjMsIDE4OSwgNjMsIDIxLCAxNjMsIDE5NCwgNjMsIDIxLCAKLSAgICAxNjMsIDE5OCwgNjMsIDIxLCAxNjMsIDE5NSwgNjMsIDIxLCAxNjMsIDIwMCwgNjMsIDIxLCAxNjMsIDIxMCwgODYsIDYzLCAKLSAgICAxNjQsIDI1MSwgMTMwLCAyMjIsIDE0MywgNjMsIDE2NCwgMjI5LCA2OCwgMjUxLCA2OCwgMjI3LCAxNDksIDIxMCwgMjUsIAotICAgIDYzLCAxNjQsIDI1MCwgMjM5LCAyNTUsIDE2MywgMjIyLCAxNDQsIDI1MSwgNjksIDIzMCwgMjAyLCAyNTEsIDcsIDYzLCAKLSAgICAxNjQsIDIyOSwgNjgsIDI1MSwgNjgsIDIyMCwgMTA2LCAyMjIsIDE0MywgNjMsIDE2NCwgMjUwLCAxMzIsIDIzMCwgMjQ3LCAKLSAgICA2MywgMTY0LCAyMTUsIDE4NCwgMjU1LCAxNjAsIDYzLCAxNjQsIDI0MiwgMTAwLCAyMjIsIDE0NCwgMjQyLCA2MywgNjMsIAotICAgIDE2NCwgMjQyLCAxMDAsIDIyMiwgMTQ0LCAyNDIsIDY5LCA2MywgMTY0LCAyNTQsIDExNiwgMjM0LCAxMjMsIDI0MiwgNjMsIAotICAgIDYzLCAxNjQsIDI1NCwgMTE2LCAyMzQsIDEyMywgMjQyLCA2OSwgNjMsIDUsIDIxMSwgNjUsIDIxNSwgMTcxLCA2MywgNSwgCi0gICAgMjMxLCAxNjcsIDIxNSwgMTcxLCA2MywgMSwgMTc2LCA2MywgMSwgMjM0LCAxMzIsIDYzLCAxLCAyNDMsIDEzNSwgNjMsIDEsIAotICAgIDI0MiwgMjQ5LCA2MywgMSwgMjI5LCA3NywgNjMsIDEsIDI1MSwgMzMsIDYzLCAxLCAyNTAsIDE1NywgNjMsIDEsIDIzNSwgCi0gICAgMTQxLCA2MywgMSwgMjI3LCAxNjUsIDYzLCAxLCAyMTUsIDE1NiwgNjMsIDEsIDIxNSwgMTQ0LCA2MywgMSwgMjQ4LCAxMzUsIAotICAgIDYzLCAxLCAyNDgsIDExOSwgNjMsIDEsIDIyOCwgMTEwLCA2MywgMSwgMjE3LCAxMDUsIDYzLCAxLCAyMTYsIDIwOCwgNjMsIAotICAgIDEsIDI0OCwgMjIxLCA2MywgMSwgMjQ4LCAyNSwgNjMsIDEsIDE5NywgNjMsIDEsIDE5MCwgNjMsIDEsIDIyNSwgMTQ3LCA2MywgCi0gICAgMSwgMjUyLCAxOTEsIDYzLCAxLCAyNTIsIDE4LCA2MywgMSwgMTg0LCA2MywgMSwgMjE1LCAxODMsIDYzLCAxLCAyMTUsIAotICAgIDE3NSwgNjMsIDEsIDI0NiwgMzgsIDYzLCAxLCAyNDYsIDMzLCA2MywgMSwgMjEyLCA2NSwgNjMsIDEsIDIxMCwgODIsIDYzLCAKLSAgICAxLCAyMTAsIDExNiwgNjMsIDEsIDI1NSwgMTY2LCA2MywgMSwgMTkxLCA2MywgMSwgMjA1LCA2MywgMSwgMjMzLCAxMzUsIAotICAgIDYzLCAxLCAyMjAsIDEwMiwgNjMsIDEsIDIxOCwgMjIzLCA2MywgMSwgMjA2LCA2MywgMSwgMTYyLCA2MywgMSwgNjEsIDYzLCAKLSAgICAxLCAyMzMsIDIzMSwgNjMsIDEsIDI0NCwgNzcsIDIwNSwgNjMsIDEsIDIzNCwgNDYsIDYzLCAxLCAyMjIsIDE3OSwgNjMsIAotICAgIDI1LCA1LCAyNTUsIDczLCA2MywgMjUsIDUsIDczLCA2MywgMjUsIDUsIDIzNiwgMzMsIDYzLCAyNSwgNSwgNzAsIDYzLCAyNSwgCi0gICAgNSwgMjE0LCAxMTgsIDYzLCAyNSwgNSwgMTQ5LCAxNTMsIDYzLCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgNjMsIDI1LCA1LCAKLSAgICAxNDksIDE1NiwgNjMsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCA2MywgMjUsIDUsIDc1LCA2MywgMjUsIDUsIDI0NSwgMjA5LCAKLSAgICA2MywgMjUsIDUsIDc2LCA2MywgMjUsIDUsIDIyNiwgMTgzLCA2MywgNSwgMjIyLCAyMjEsIDIxOCwgODQsIDIyOSwgNzgsIAotICAgIDIyMiwgMjExLCA2MywgNSwgMjIyLCAyMTYsIDI1MiwgNzYsIDYzLCAyNSwgNSwgMjIzLCA0OSwgNzMsIDYzLCAyNSwgNSwgCi0gICAgMjIzLCA0OSwgMjM2LCAzMywgNjMsIDUsIDIyNywgMTQ5LCAyMTAsIDI2LCAyMjksIDIyNiwgMjQ4LCAyMjEsIDYzLCA1LCAKLSAgICAyMTksIDcxLCAyMzMsIDYwLCA2MywgMTY0LCAyNDIsIDI5LCA2MywgMTY0LCAyMjYsIDU3LCA2MywgNSwgMjMzLCA2MywgCi0gICAgMjIyLCAxNDMsIDYzLCA1LCAyMTEsIDcwLCAyMjIsIDE0MywgNjMsIDUsIDIzMywgNjQsIDIxNSwgMTg0LCAyNTEsIDcsIDYzLCAKLSAgICA1LCAyMzEsIDk1LCAyNTEsIDcsIDYzLCA1LCAyNDIsIDExOSwgMjUxLCA4LCAyMjMsIDQwLCA2MywgNSwgMjQyLCAxMTksIAotICAgIDIzMSwgODUsIDIyMywgNDAsIDYzLCA1LCAyMzUsIDE5MywgMjMxLCA5NSwgMjUxLCA3LCA2MywgMjE4LCA3MywgNSwgMjMzLCAKLSAgICA2NCwgMjE1LCAxODQsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIAotICAgIDIzNSwgMTkzLCAyMzEsIDk1LCAyNTEsIDcsIDYzLCAyMTgsIDczLCAxLCAxNzYsIDYzLCAyMTgsIDczLCAxLCAyMzQsIDEzMiwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI0MywgMTM1LCA2MywgMjE4LCA3MywgMSwgMjQyLCAyNDksIDYzLCAyMTgsIDczLCAxLCAyMjksIAotICAgIDc3LCA2MywgMjE4LCA3MywgMSwgMjUxLCAzMywgNjMsIDIxOCwgNzMsIDEsIDI1MCwgMTU3LCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjM1LCAxNDEsIDYzLCAyMTgsIDczLCAxLCAyMjcsIDE2NSwgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTU2LCA2MywgMjE4LCAKLSAgICA3MywgMSwgMjE1LCAxNDQsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMTE5LCA2MywgCi0gICAgMjE4LCA3MywgMSwgMjI4LCAxMTAsIDYzLCAyMTgsIDczLCAxLCAyMTcsIDEwNSwgNjMsIDIxOCwgNzMsIDEsIDIxNiwgMjA4LCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjQ4LCAyMjEsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDI1LCA2MywgMjE4LCA3MywgMSwgMTk3LCAKLSAgICA2MywgMjE4LCA3MywgMSwgMTkwLCA2MywgMjE4LCA3MywgMSwgMjI1LCAxNDcsIDYzLCAyMTgsIDczLCAxLCAyNTIsIDE5MSwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI1MiwgMTgsIDYzLCAyMTgsIDczLCAxLCAxODQsIDYzLCAyMTgsIDczLCAxLCAyMTUsIDE4MywgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTc1LCA2MywgMjE4LCA3MywgMSwgMjQ2LCAzOCwgNjMsIDIxOCwgNzMsIDEsIDI0NiwgCi0gICAgMzMsIDYzLCAyMTgsIDczLCAxLCAyMTIsIDY1LCA2MywgMjE4LCA3MywgMSwgMjEwLCA4MiwgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIxMCwgMTE2LCA2MywgMjE4LCA3MywgMSwgMjU1LCAxNjYsIDYzLCAyMTgsIDczLCAxLCAxOTEsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMDUsIDYzLCAyMTgsIDczLCAxLCAyMzMsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDIyMCwgMTAyLCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjE4LCAyMjMsIDYzLCAyMTgsIDczLCAxLCAyMDYsIDYzLCAyMTgsIDczLCAxLCAxNjIsIDYzLCAyMTgsIDczLCAxLCA2MSwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDIzMywgMjMxLCA2MywgMjE4LCA3MywgMSwgMjQ0LCA3NywgMjEyLCA2NSwgNjMsIDIxOCwgNzMsIAotICAgIDEsIDI0NCwgNzcsIDE5MSwgNjMsIDIxOCwgNzMsIDEsIDI0NCwgNzcsIDIwNSwgNjMsIDIzMywgMjE4LCAyMjIsIDE0MSwgCi0gICAgMjM0LCAxMzIsIDYzLCAyMzMsIDIxOCwgMjIyLCAxNDEsIDIzNCwgMTMzLCAyNTEsIDY5LCAyMzAsIDIwMiwgMjUxLCA3LCAKLSAgICA2MywgMjUwLCAyNTIsIDUsIDExNCwgMjUyLCA3MCwgNjMsIDI1MCwgMjUyLCA1LCAxOTIsIDI1MiwgNzAsIDYzLCAyNTAsIAotICAgIDI1MiwgNSwgMjUwLCAyNTMsIDIxNywgMjAsIDYzLCAyNTAsIDI1MiwgNSwgMjIxLCAyMDcsIDI1NSwgMTY1LCA2MywgMTYsIAotICAgIDI0NiwgOTEsIDI1MSwgMTI1LCA2MywgMTYsIDIyMywgMTI5LCAyMjIsIDIyMiwgNjMsIDE2LCAyMjYsIDc3LCAyNDMsIDYzLCAKLSAgICA2MywgMTYsIDIyMywgMTI5LCAyMjIsIDIyMywgMjIzLCA0MiwgMjQyLCAxNDUsIDYzLCAxNiwgMjI1LCAxMTIsIDE5MCwgNjMsIAotICAgIDE2LCAyMjgsIDU5LCAyNTEsIDEyNSwgNjMsIDE2LCAyMjgsIDU5LCAyNTEsIDEyNiwgMjI3LCAxMzksIDI1NSwgMTYyLCA2MywgCi0gICAgMTYsIDIyOCwgNTksIDI1MSwgMTI2LCAyNDIsIDExNywgMjU1LCAxNjIsIDYzLCAxNiwgMjI4LCA1OSwgMjUxLCAxMjYsIAotICAgIDI1MSwgNjksIDI1NSwgMTYyLCA2MywgNSwgMjIzLCAxMzAsIDIyOSwgMjE5LCAyMjMsIDEzMCwgMjQ3LCAxNTgsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjI5LCAyMTksIDI0MiwgMTE2LCA2MywgMTY0LCAyNTEsIDEyOSwgMjIwLCAzLCAyNDIsIDIxNSwgMjMwLCAKLSAgICAyNDgsIDIyMywgNDEsIDYzLCAxNjQsIDIzMCwgMTYzLCAyMTEsIDAsIDI0MiwgMjE1LCAyMzAsIDI0OCwgMjIzLCA0MSwgNjMsIAotICAgIDE2NCwgMjI3LCAxMzksIDIxNSwgMTcyLCA2MywgMTY0LCA2NSwgMjUxLCAxNTIsIDIyMiwgMjEzLCAyMTEsIDAsIDIzMCwgCi0gICAgMjQ4LCAyMzEsIDkzLCAxODQsIDYzLCAxNjQsIDI0OSwgMjUyLCAyNTEsIDE1MiwgMjIyLCAyMTMsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDgsIDIyMCwgMTA5LCAxODQsIDIyMiwgMjUwLCAyMTcsIDI1NSwgNTAsIDIzMywgNDUsIDIxNywgMjU1LCA1MCwgMjIyLCAKLSAgICAyNTAsIDIxNywgMjU1LCA1LCAyLCAyNDcsIDExOCwgMjMzLCA0NSwgMjE3LCAyNTUsIDUsIDIsIDI0NywgMTE4LCA2MywgCi0gICAgMTY0LCAyMzMsIDU1LCAyMzEsIDk2LCAyMjIsIDE0MywgNjMsIDE2NCwgMjE1LCAyNTAsIDIzMSwgOTYsIDIyMiwgMTQzLCAKLSAgICA2OCwgMSwgMTc2LCA2OCwgMSwgMjM0LCAxMzIsIDY4LCAxLCAyNDMsIDEzNSwgNjgsIDEsIDI0MiwgMjQ5LCA2OCwgMSwgCi0gICAgMjI5LCA3NywgNjgsIDEsIDI1MSwgMzMsIDY4LCAxLCAyNTAsIDE1NywgNjgsIDEsIDIzNSwgMTQxLCA2OCwgMSwgMjM1LCAKLSAgICAxMTQsIDY4LCAxLCAyMjcsIDE2NSwgNjgsIDEsIDIyOCwgNzYsIDY4LCAxLCAyMTUsIDE1NiwgNjgsIDEsIDIxNSwgMTQ0LCAKLSAgICA2OCwgMSwgMjQ4LCAxMzUsIDY4LCAxLCAyNDgsIDExOSwgNjgsIDEsIDIyOCwgMTEwLCA2OCwgMSwgMjE3LCAxMDUsIDY4LCAKLSAgICAxLCAyMTYsIDIwOCwgNjgsIDEsIDI0OCwgMjIxLCA2OCwgMSwgMjQ4LCAyNSwgNjgsIDEsIDE5NywgNjgsIDEsIDE5MCwgNjgsIAotICAgIDEsIDIyNSwgMTQ3LCA2OCwgMSwgMjUyLCAxOTEsIDY4LCAxLCAyNTIsIDE4LCA2OCwgMSwgMTg0LCA2OCwgMSwgMTkxLCA2OCwgCi0gICAgMSwgMjA1LCA2OCwgMSwgMjMzLCAxMzUsIDY4LCAxLCAyMTIsIDY1LCA2OCwgMSwgMjA2LCA2OCwgMSwgMTYyLCA2OCwgMSwgCi0gICAgMjMyLCAxODQsIDY4LCAxLCA2MSwgNjgsIDEsIDIyMCwgODYsIDYxLCA2OCwgMSwgNzMsIDY4LCAxLCAyMzYsIDMzLCA2OCwgCi0gICAgMSwgNzAsIDY4LCAxLCAyMTQsIDExOCwgNjgsIDEsIDc1LCA2OCwgMSwgMjMwLCAxNTEsIDc1LCA2OCwgMSwgNzYsIDY4LCAxLCAKLSAgICAyNTMsIDE5MiwgNjgsIDI1LCA1LCAyMTcsIDY0LCAyNTUsIDczLCA2OCwgMjUsIDUsIDI1NSwgNzMsIDY4LCAyNSwgNSwgNzMsIAotICAgIDY4LCAyNSwgNSwgMjM2LCAzMywgNjgsIDI1LCA1LCA3MCwgNjgsIDI1LCA1LCAyMTQsIDExOCwgNjgsIDI1LCA1LCA3NSwgCi0gICAgNjgsIDI1LCA1LCAyNTQsIDIwMSwgNjgsIDI1LCA1LCAyMzAsIDE1MSwgMjM2LCAzMywgNjgsIDI1LCA1LCAyMzAsIDE1MSwgCi0gICAgNzYsIDY4LCAyNSwgNSwgMTYwLCA0OCwgNjgsIDUsIDI1NCwgNzUsIDY4LCA1LCA1OSwgNTEsIDY4LCA1LCAyMTMsIDE0NywgCi0gICAgNjgsIDUsIDIxMywgMTUyLCA2OCwgNSwgMjUzLCAyMzUsIDY4LCAxMTYsIDUsIDE0NywgMTkxLCA2OCwgMTE2LCA1LCAxNDcsIAotICAgIDIwNSwgNjgsIDExNiwgNSwgMTQ3LCAyMTIsIDY1LCA2OCwgMTE2LCA1LCAxNDcsIDE2MiwgNjgsIDEsIDI0MiwgMTMyLCAKLSAgICAyMDYsIDY4LCAyMSwgMjEwLCA4NiwgNjgsIDIxLCAxMTAsIDY4LCAyMSwgMTA1LCA2OCwgMjEsIDE1OCwgNjgsIDIxLCAxNjEsIAotICAgIDY4LCAyMSwgMTg5LCA2OCwgMjEsIDE5NCwgNjgsIDIxLCAxOTgsIDY4LCAyMSwgMTk1LCA2OCwgMjEsIDIwMCwgNjgsIDUsIAotICAgIDIzMiwgMTkyLCAyMjEsIDE3MiwgNjgsIDUsIDIyMSwgMTcyLCA2OCwgMTYsIDIzMiwgMTUzLCA2OCwgMTYsIDI0OSwgMjEzLCAKLSAgICA2OCwgMTYsIDI1NCwgMjIwLCA2OCwgMTYsIDI0MywgNDgsIDY4LCAxLCAyMjAsIDEwMiwgNjgsIDEsIDIxOCwgMjIzLCA2OCwgCi0gICAgMSwgMTQ5LCAxNTMsIDY4LCAxLCAxNDksIDIyMiwgMTgwLCA2OCwgMSwgMTQ5LCAxNTYsIDY4LCAxLCAxNDksIDIzMiwgMTg1LCAKLSAgICA2OCwgMjUsIDUsIDE0OSwgMTUzLCA2OCwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDY4LCAyNSwgNSwgMTQ5LCAxNTYsIDY4LCAKLSAgICAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgNjgsIDEsIDIzMCwgMTUxLCAyMjksIDc3LCA2OCwgMSwgMjMwLCAxNTEsIDIzNSwgCi0gICAgMTE0LCA2OCwgMSwgMjMwLCAxNTEsIDI1MiwgMTExLCA2OCwgMSwgMjMwLCAxNTEsIDI1MiwgMTA2LCA2OCwgMTE2LCA1LCAKLSAgICAyMzAsIDE1MSwgMTQ3LCAxOTcsIDY4LCAxMTYsIDUsIDIzMCwgMTUxLCAxNDcsIDE4NCwgNjgsIDExNiwgNSwgMjMwLCAxNTEsIAotICAgIDE0NywgMjMzLCAxMzUsIDY4LCAxLCAyMjAsIDEwOCwgMjM0LCAyMTMsIDIyMCwgMTAyLCA2OCwgMjUsIDUsIDIyMCwgMTA4LCAKLSAgICAyMzQsIDIxMywgMjQ1LCA1NSwgNjgsIDEzOCwgMTY0LCAyMjAsIDEwOCwgMjM0LCAyMTMsIDI0MSwgMjQ3LCA2OCwgMTM4LCAKLSAgICAxNjQsIDIyMCwgMTA4LCAyMzQsIDIxMywgMjM0LCAxODMsIDIyNSwgMTIxLCA2OCwgMSwgMjEyLCA3LCAyMjQsIDEwOCwgCi0gICAgMjM0LCAyMTMsIDIxNiwgMjA4LCA2OCwgMSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIyNCwgMTE0LCA2OCwgMjUsIAotICAgIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyNDUsIDU1LCA2OCwgMjUsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgCi0gICAgMjEzLCAyMTQsIDIxNCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI5LCA2OCwgNSwgMjEyLCA3LCAKLSAgICAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjgsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyNywgCi0gICAgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI2LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAKLSAgICAyMTMsIDIxNiwgMjUsIDY4LCAxLCAyNDUsIDIxOSwgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMjgsIDExMCwgNjgsIDEsIDI0NSwgCi0gICAgMjE5LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxMCwgMTc2LCA2OCwgMSwgMjQ1LCAyMTksIDIyNCwgMTA4LCAyMzQsIDIxMywgCi0gICAgMjQyLCAyMTcsIDY4LCAyNSwgNSwgMjQzLCA1OSwgMjM0LCAyMTMsIDczLCA2OCwgMjUsIDUsIDIzNCwgMTg4LCAyMjYsIAotICAgIDIzNCwgNjgsIDI1LCA1LCAyMzQsIDE4OCwgNzAsIDY4LCAyNSwgNSwgMjM0LCAxODgsIDI0NSwgMjA5LCA2OCwgMSwgMjIwLCAKLSAgICA4NiwgMTc2LCA2OCwgMSwgMjIwLCA4NiwgMjM0LCAxMzIsIDY4LCAxLCAyMjAsIDg2LCAyNDMsIDEzNSwgNjgsIDEsIDIyMCwgCi0gICAgODYsIDI1MSwgMzMsIDY4LCAxLCAyMjAsIDg2LCAyMTAsIDExNiwgNjgsIDEsIDIyMCwgODYsIDIyNywgMTY1LCA2OCwgMSwgCi0gICAgMjIwLCA4NiwgMjQ4LCAyMjEsIDY4LCAxLCAyMjAsIDg2LCAxOTcsIDY4LCAxLCAyMjAsIDg2LCAyMjUsIDE0NywgNjgsIDEsIAotICAgIDIyMCwgODYsIDI0NCwgMTk2LCA2OCwgMSwgMjIwLCA4NiwgMjUyLCAxOTEsIDY4LCAxLCAyMjAsIDg2LCAyMTYsIDIwOCwgCi0gICAgNjgsIDEsIDIyMCwgODYsIDE2MiwgNjgsIDExNiwgNSwgMjIwLCA4NiwgMTQ3LCAyMTIsIDY1LCA2OCwgMjUsIDUsIDIyMCwgCi0gICAgODYsIDI1NSwgNzMsIDY4LCAyNSwgNSwgMjIwLCA4NiwgNzUsIDY4LCAyNSwgNSwgMjIwLCA4NiwgMTYwLCA0OCwgNjgsIDI1LCAKLSAgICA1LCAyMjAsIDg2LCA0MCwgMjExLCAxMTcsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAKLSAgICAyNywgNjgsIDUsIDIyMCwgODYsIDIxNiwgMjUsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI0LCA2OCwgNSwgMjIwLCA4NiwgCi0gICAgMjQ5LCAxNTIsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg2LCAyNDksIDE1MiwgMjE2LCAyNywgNjgsIDUsIDIyMCwgODYsIAotICAgIDI0OSwgMTUyLCAyNDUsIDE1MywgMjE2LCAzMCwgNjgsIDEsIDIyMiwgMTI4LCAyMjYsIDYzLCAyNDQsIDE5NiwgNjgsIDUsIAotICAgIDIyMiwgMTI4LCAyMjYsIDYzLCAyMTYsIDI1LCA2OCwgMjIwLCA4NiwgMjEsIDIxMCwgODYsIDY4LCAyMjAsIDg2LCAyMSwgCi0gICAgMTEwLCA2OCwgMjIwLCA4NiwgMjEsIDEwNSwgNjgsIDIyMCwgODYsIDIxLCAxNTgsIDY4LCAyMjAsIDg2LCAyMSwgMTYxLCAKLSAgICA2OCwgMjIwLCA4NiwgMjEsIDE4OSwgNjgsIDIyMCwgODYsIDIxLCAxOTQsIDY4LCAyMjAsIDg2LCAyMSwgMTk4LCA2OCwgCi0gICAgMjIwLCA4NiwgMjEsIDE5NSwgNjgsIDIyMCwgODYsIDIxLCAyMDAsIDY4LCA1LCAyMzQsIDEyNiwgMjE2LCAyOSwgNjgsIDUsIAotICAgIDIzNCwgMTI2LCAyMTYsIDI3LCA2OCwgMjUsIDUsIDI1NCwgMTkwLCA2MSwgNjgsIDI1LCA1LCAyNTQsIDE5MCwgMjU0LCAKLSAgICAyMDEsIDY4LCAxNiwgMjIwLCA4NiwgMTEwLCA2OCwgMTYsIDIyMCwgODYsIDI0NSwgMzAsIDk4LCA2LCAxLCAyNTQsIDEyMywgCi0gICAgOTgsIDYsIDEsIDI1MiwgMTUyLCA5OCwgNiwgMSwgMjQzLCAxMDYsIDk4LCA2LCAxLCAyNDcsIDEyOCwgOTgsIDYsIDEsIAotICAgIDI0NSwgMTUwLCA5OCwgNiwgMSwgMjEzLCAxNjAsIDk4LCA2LCAxLCAyMTAsIDg5LCA5OCwgNiwgMSwgMjE3LCA2MCwgOTgsIAotICAgIDYsIDEsIDIzNSwgMjU1LCA5OCwgNiwgMSwgMjM0LCAyMzQsIDk4LCA2LCAxLCAyMzMsIDgxLCA5OCwgNiwgMSwgMjMxLCAKLSAgICAxODUsIDk4LCA2LCAxLCAyMjksIDE5NSwgOTgsIDYsIDEsIDIyNiwgMTk2LCA5OCwgNiwgMSwgMjI2LCAxNywgOTgsIDYsIDEsIAotICAgIDIxMCwgNzgsIDk4LCA2LCAxLCAyMjMsIDE3MSwgOTgsIDYsIDEsIDIyMSwgMjQzLCA5OCwgNiwgMSwgMjE3LCA1MCwgOTgsIAotICAgIDYsIDEsIDIxNCwgMTkwLCA5OCwgNiwgMSwgMjI1LCAxNDAsIDk4LCA2LCAxLCAyMzQsIDEyMSwgOTgsIDYsIDEsIDI0MiwgCi0gICAgMjQxLCA5OCwgNiwgMSwgMjI0LCA3MywgOTgsIDYsIDEsIDIyMCwgMjAsIDk4LCA2LCAxLCAyNTAsIDk3LCA5OCwgNiwgMSwgCi0gICAgMjUxLCA3LCA5OCwgNiwgMSwgMjM1LCAxMDAsIDk4LCA2LCAxLCAyNTAsIDQwLCA5OCwgNiwgMSwgMjUwLCAxNDMsIDk4LCA2LCAKLSAgICAxLCAyMTEsIDE2MywgOTgsIDYsIDEsIDIzNSwgMTExLCA5OCwgNiwgMSwgMjQyLCA0MywgOTgsIDYsIDEsIDI0MSwgMjM4LCAKLSAgICA5OCwgNiwgMSwgMjQxLCAxNzUsIDk4LCA2LCAxLCAyMTIsIDIyLCA5OCwgNiwgMSwgMjQyLCA0LCA5OCwgNiwgMSwgMjQxLCAKLSAgICA2NSwgOTgsIDYsIDEsIDIxMCwgMjQ2LCA5OCwgNiwgMSwgMjU0LCAyMzIsIDk4LCAxLCAyNTQsIDEyMywgOTgsIDEsIDI1MiwgCi0gICAgMTUyLCA5OCwgMSwgMjQzLCAxMDYsIDk4LCAxLCAyNDcsIDEyOCwgOTgsIDEsIDI0NSwgMTUwLCA5OCwgMSwgMjEzLCAxNjAsIAotICAgIDk4LCAxLCAyMTAsIDg5LCA5OCwgMSwgMjE3LCA2MCwgOTgsIDEsIDIzNSwgMjU1LCA5OCwgMSwgMjM0LCAyMzQsIDk4LCAxLCAKLSAgICAyMzMsIDgxLCA5OCwgMSwgMjMxLCAxODUsIDk4LCAxLCAyMjksIDE5NSwgOTgsIDEsIDIyNiwgMTk2LCA5OCwgMSwgMjI2LCAKLSAgICAxNywgOTgsIDEsIDIxMCwgNzgsIDk4LCAxLCAyMjMsIDE3MSwgOTgsIDEsIDIyMSwgMjQzLCA5OCwgMSwgMjE3LCA1MCwgOTgsIAotICAgIDEsIDIxNCwgMTkwLCA5OCwgMSwgMjI1LCAxNDAsIDk4LCAxLCAyMzQsIDEyMSwgOTgsIDEsIDI0MiwgMjQxLCA5OCwgMSwgCi0gICAgMjI0LCA3MywgOTgsIDEsIDIyMCwgMjAsIDk4LCAxLCAyNTAsIDk3LCA5OCwgMSwgMjUxLCA3LCA5OCwgMSwgMjM1LCAxMDAsIAotICAgIDk4LCAxLCAyNTAsIDQwLCA5OCwgMSwgMjUwLCAxNDMsIDk4LCAxLCAyMTEsIDE2MywgOTgsIDEsIDIzNSwgMTExLCA5OCwgMSwgCi0gICAgMjQyLCA0MywgOTgsIDEsIDI0MSwgMjM4LCA5OCwgMSwgMjQxLCAxNzUsIDk4LCAxLCAyMTIsIDIyLCA5OCwgMSwgMjQyLCA0LCAKLSAgICA5OCwgMSwgMjQxLCA2NSwgOTgsIDEsIDI0NCwgMTIxLCA5OCwgMSwgMjEwLCAyNDYsIDk4LCAxLCAyNDUsIDE2NSwgOTgsIDEsIAotICAgIDIxNSwgOTQsIDI0MywgMTA2LCA5OCwgMSwgMjU0LCAxOTYsIDk4LCAyMjYsIDE1LCAyMjAsIDEzNywgNTgsIDEsIDk4LCAKLSAgICAyMjksIDE5NSwgOTgsIDEsIDI1NCwgMjMyLCA5OCwgMSwgMjQyLCAzLCA1MCwgOTgsIDEsIDIzMywgMTI3LCA1MCwgMjQsIAotICAgIDEwMCwgMjM0LCA1OCwgMjQsIDEwMCwgMjE4LCAyMTUsIDI0LCAxMDAsIDIyOCwgMjI2LCAyNCwgMTAwLCAyMTYsIDEwMSwgCi0gICAgMjQsIDEwMCwgMjE4LCAyMDQsIDI0LCAxMDAsIDIyMywgMjYsIDI0LCAxMDAsIDIzMCwgMjE3LCAyNCwgMTAwLCAyMjUsIDk1LCAKLSAgICAyNCwgMTAwLCAyMTgsIDIxMiwgMjQsIDEwMCwgMjE5LCAxNDgsIDI0LCAxMDAsIDIxOCwgMjA5LCAyNCwgMTAwLCAyMzYsIAotICAgIDU2LCAyNCwgMTAwLCAyNTAsIDQ2LCAyNCwgMTAwLCAyMTgsIDIxOSwgMjQsIDEwMCwgMjUwLCAxMDYsIDI0LCAxMDAsIDIzNCwgCi0gICAgMTEwLCAyNCwgMTAwLCAyMTYsIDE3MywgMjQsIDEwMCwgMjI1LCAxMzEsIDI0LCAxMDAsIDI0MSwgMTcyLCAyNCwgMTAwLCAKLSAgICAyMjgsIDIyMiwgMjQsIDEwMCwgMjE4LCAyMTMsIDI0LCAxMDAsIDIyOCwgMjE2LCAyNCwgMTAwLCAyMjgsIDIyMCwgMjQsIAotICAgIDEwMCwgMjE2LCA5OCwgMjQsIDEwMCwgMjIzLCAxNCwgMjQsIDEwMCwgMjE4LCAyMTEsIDI0LCAxMDAsIDIyMywgMjQsIDI0LCAKLSAgICAxMDAsIDIzNCwgMjE4LCAyNCwgMTAwLCAyMzAsIDIxMCwgMjQsIDEwMCwgMjM0LCAyMjEsIDI0LCAxMDAsIDIyNSwgOTAsIAotICAgIDI0LCAxMDAsIDIyNSwgODgsIDI0LCAxMDAsIDIyNSwgNzYsIDI0LCAxMDAsIDIyNSwgODQsIDI0LCAxMDAsIDIyNSwgODIsIAotICAgIDI0LCAxMDAsIDIyNSwgNzksIDI0LCAxMDAsIDIyNSwgODEsIDI0LCAxMDAsIDIyNSwgNzgsIDI0LCAxMDAsIDIyNSwgODMsIAotICAgIDI0LCAxMDAsIDIyNSwgOTMsIDI0LCAxMDAsIDIyNSwgOTQsIDI0LCAxMDAsIDIyNSwgNzcsIDI0LCAxMDAsIDIyNSwgODcsIAotICAgIDI0LCAxMDAsIDIzNCwgMjE5LCAyNCwgMTAwLCAyMzQsIDIxNywgMjQsIDEwMCwgMjE5LCAxNDEsIDI0LCAxMDAsIDIxOSwgCi0gICAgMTM5LCAyNCwgMTAwLCAyMTksIDEzMSwgMjQsIDEwMCwgMjE5LCAxMzQsIDI0LCAxMDAsIDIxOSwgMTQwLCAyNCwgMTAwLCAKLSAgICAyMTksIDEzNiwgMjQsIDEwMCwgMjE5LCAxMzUsIDI0LCAxMDAsIDIxOSwgMTMzLCAyNCwgMTAwLCAyMTksIDE0NCwgMjQsIAotICAgIDEwMCwgMjE5LCAxNDYsIDI0LCAxMDAsIDIxOSwgMTQ3LCAyNCwgMTAwLCAyMTksIDE0MiwgMjQsIDEwMCwgMjE5LCAxMzIsIAotICAgIDI0LCAxMDAsIDIxOSwgMTM3LCAyNCwgMTAwLCAyMTksIDE0NSwgMjQsIDEwMCwgMjUwLCA5MCwgMjQsIDEwMCwgMjUwLCA4OCwgCi0gICAgMjQsIDEwMCwgMjUwLCAxNjgsIDI0LCAxMDAsIDI1MCwgMTY2LCAyNCwgMTAwLCAyMjYsIDMyLCAyNCwgMTAwLCAyMzYsIDUxLCAKLSAgICAyNCwgMTAwLCAyMzYsIDQyLCAyNCwgMTAwLCAyMzYsIDUwLCAyNCwgMTAwLCAyMzYsIDQ3LCAyNCwgMTAwLCAyMzYsIDQ1LCAKLSAgICAyNCwgMTAwLCAyMzYsIDQ5LCAyNCwgMTAwLCAyMTgsIDIxNiwgMjQsIDEwMCwgMjM2LCA1NCwgMjQsIDEwMCwgMjM2LCA1NSwgCi0gICAgMjQsIDEwMCwgMjM2LCA0MywgMjQsIDEwMCwgMjM2LCA0OCwgMjQsIDEwMCwgMjExLCAyNiwgMjQsIDEwMCwgMjUwLCA0NSwgCi0gICAgMjQsIDEwMCwgMjUwLCA5MSwgMjQsIDEwMCwgMjUwLCA4OSwgMjQsIDEwMCwgMjUwLCAxNjksIDI0LCAxMDAsIDI1MCwgMTY3LCAKLSAgICAyNCwgMTAwLCAyNTAsIDEwNCwgMjQsIDEwMCwgMjUwLCAxMDUsIDI0LCAxMDAsIDI1MCwgOTIsIDI0LCAxMDAsIDI1MCwgCi0gICAgMTcwLCAyNCwgMTAwLCAyMjUsIDEyOSwgMjQsIDEwMCwgMjM0LCAyMjAsIDI0LCAxMDAsIDIxOCwgMjE3LCAyNCwgMTAwLCAKLSAgICAyMTEsIDMyLCAyNCwgMTAwLCAyMzQsIDQ5LCAyNCwgMTAwLCAyMjgsIDIxOCwgMjQsIDEwMCwgMjI4LCAyMjQsIDI0LCAxMDAsIAotICAgIDIyOCwgMjIzLCAyNCwgMTAwLCAyMTYsIDk1LCAyNCwgMTAwLCAyNDQsIDEwMywgMjQsIDE0MywgMjQ0LCAxMDMsIDI0LCAKLSAgICAxNDMsIDYxLCAyNCwgMTQzLCAyNTQsIDI0MywgMjQsIDE0MywgMTkxLCAyNCwgMTQzLCAyMTEsIDkyLCAyNCwgMTQzLCAyNDUsIAotICAgIDExNywgMjQsIDE0MywgNzUsIDI0LCAxNDMsIDIxMSwgMzYsIDI0LCAxNDMsIDIxMSwgNDcsIDI0LCAxNDMsIDc2LCAyNCwgCi0gICAgMTQzLCAyMTIsIDY1LCAyNCwgMTQzLCAyMTIsIDYyLCAyNCwgMTQzLCAyMjYsIDIzNCwgMjQsIDE0MywgMjEwLCAyNDQsIDI0LCAKLSAgICAxNDMsIDcwLCAyNCwgMTQzLCAyMTIsIDExLCAyNCwgMTQzLCAyMTIsIDIyLCAyNCwgMTQzLCAyMTEsIDI1MCwgMjQsIDE0MywgCi0gICAgMjEwLCAyMTIsIDI0LCAxNDMsIDI0NSwgNTUsIDI0LCAxNDMsIDIxMSwgOCwgMjQsIDE0MywgNzMsIDI0LCAxNDMsIDI1NSwgCi0gICAgMTU3LCAyNCwgMTQzLCAyNTUsIDE1NiwgMjQsIDE0MywgMjExLCAxMDYsIDI0LCAxNDMsIDIxMSwgMTA0LCAyNCwgMTQzLCAKLSAgICAyNDUsIDExNSwgMjQsIDE0MywgMjQ1LCAxMTQsIDI0LCAxNDMsIDI0NSwgMTE2LCAyNCwgMTQzLCAyMTEsIDM1LCAyNCwgCi0gICAgMTQzLCAyMTEsIDM0LCAyNCwgMTQzLCAyMjcsIDg0LCAyNCwgMTQzLCAyMjcsIDg1LCAyNCwgMTQzLCAyMjcsIDc4LCAyNCwgCi0gICAgMTQzLCAyMjcsIDgzLCAyNCwgMTQzLCAyMjcsIDgxLCAyNCwgMTQzLCAyMTAsIDIzOCwgMjQsIDE0MywgMjEwLCAyMzcsIDI0LCAKLSAgICAxNDMsIDIxMCwgMjM2LCAyNCwgMTQzLCAyMTAsIDIzOSwgMjQsIDE0MywgMjEwLCAyNDAsIDI0LCAxNDMsIDIxNSwgMzAsIAotICAgIDI0LCAxNDMsIDIxNSwgMjksIDI0LCAxNDMsIDIxNSwgMjcsIDI0LCAxNDMsIDIxNSwgMjQsIDI0LCAxNDMsIDIxNSwgMjUsIAotICAgIDI0LCAxNDMsIDIxMCwgMjExLCAyNCwgMTQzLCAyMTAsIDIwOCwgMjQsIDE0MywgMjEwLCAyMDksIDI0LCAxNDMsIDIxMCwgCi0gICAgMjAzLCAyNCwgMTQzLCAyMTAsIDIwNCwgMjQsIDE0MywgMjEwLCAyMDUsIDI0LCAxNDMsIDIxMCwgMjA3LCAyNCwgMTQzLCAKLSAgICAyNDUsIDQ5LCAyNCwgMTQzLCAyNDUsIDUxLCAyNCwgMTQzLCAyMTEsIDcsIDI0LCAxNDMsIDI0MCwgMTUzLCAyNCwgMTQzLCAKLSAgICAyNDAsIDE0NSwgMjQsIDE0MywgMjQwLCAxNDgsIDI0LCAxNDMsIDI0MCwgMTQ2LCAyNCwgMTQzLCAyNDAsIDE1MCwgMjQsIAotICAgIDE0MywgMjQwLCAxNTIsIDI0LCAxNDMsIDI1NCwgMzQsIDI0LCAxNDMsIDI1NCwgMzEsIDI0LCAxNDMsIDI1NCwgMjksIDI0LCAKLSAgICAxNDMsIDI1NCwgMzAsIDI0LCAxNDMsIDIxOCwgMjIwLCAyNCwgMTQzLCAyNTUsIDE1OCwgMjQsIDE0MywgMjExLCAxMDUsIAotICAgIDI0LCAxNDMsIDIxMSwgMzMsIDI0LCAxNDMsIDIyNywgODAsIDI0LCAxNDMsIDIyNywgNzksIDI0LCA5MCwgMjM0LCA1OCwgCi0gICAgMjQsIDkwLCAyMTgsIDIxNSwgMjQsIDkwLCAyMzQsIDUxLCAyNCwgOTAsIDIyOCwgMjI2LCAyNCwgOTAsIDIyOCwgMjI0LCAKLSAgICAyNCwgOTAsIDIyOCwgMjIzLCAyNCwgOTAsIDIxNiwgMTAxLCAyNCwgOTAsIDIyMywgMjYsIDI0LCA5MCwgMjIzLCAyMSwgMjQsIAotICAgIDkwLCAyMjMsIDE4LCAyNCwgOTAsIDIyMywgMTEsIDI0LCA5MCwgMjIzLCA2LCAyNCwgOTAsIDIyMywgMSwgMjQsIDkwLCAKLSAgICAyMjMsIDEyLCAyNCwgOTAsIDIyMywgMjQsIDI0LCA5MCwgMjMwLCAyMTcsIDI0LCA5MCwgMjI1LCA5NSwgMjQsIDkwLCAyMjUsIAotICAgIDg0LCAyNCwgOTAsIDIxOSwgMTQ4LCAyNCwgOTAsIDIxOCwgMjA5LCAyNCwgOTAsIDIzNiwgNTYsIDI0LCA5MCwgMjUwLCA0NiwgCi0gICAgMjQsIDkwLCAyNTAsIDEwNiwgMjQsIDkwLCAyMzQsIDExMCwgMjQsIDkwLCAyMTYsIDE3MywgMjQsIDkwLCAyMjUsIDEzMSwgCi0gICAgMjQsIDkwLCAyNDEsIDE3MiwgMjQsIDkwLCAyMzQsIDUyLCAyNCwgOTAsIDIzNCwgNTAsIDI0LCA5MCwgMjI4LCAyMjIsIDI0LCAKLSAgICA5MCwgMjI4LCAyMTYsIDI0LCA5MCwgMjI4LCAyMTgsIDI0LCA5MCwgMjI4LCAyMjEsIDI0LCA5MCwgMjI4LCAyMTcsIDI0LCAKLSAgICA5MCwgMjE2LCA5OCwgMjQsIDkwLCAyMTYsIDk1LCAyNCwgOTAsIDIyMywgMTksIDI0LCA5MCwgMjIzLCAxNCwgMjQsIDkwLCAKLSAgICAyMjMsIDAsIDI0LCA5MCwgMjIyLCAyNTUsIDI0LCA5MCwgMjE4LCAyMTEsIDI0LCA5MCwgMjIzLCAxNiwgMjQsIDkwLCAyMjMsIAotICAgIDE1LCAyNCwgOTAsIDIyMywgOCwgMjQsIDkwLCAyMjMsIDEwLCAyNCwgOTAsIDIyMywgMjMsIDI0LCA5MCwgMjIzLCAzLCAyNCwgCi0gICAgOTAsIDIyMywgMTMsIDI0LCA5MCwgMjIzLCAyMiwgMjQsIDkwLCAyMjIsIDI1NCwgMjQsIDkwLCAyMzAsIDIxMywgMjQsIDkwLCAKLSAgICAyMzAsIDIwOCwgMjQsIDkwLCAyMzAsIDIxMCwgMjQsIDkwLCAyMzAsIDIwNywgMjQsIDkwLCAyMzAsIDIwNSwgMjQsIDkwLCAKLSAgICAyMzAsIDIxMSwgMjQsIDkwLCAyMzAsIDIxNiwgMjQsIDkwLCAyMzAsIDIxNCwgMjQsIDkwLCAyMzQsIDIyMSwgMjQsIDkwLCAKLSAgICAyMjUsIDg2LCAyNCwgOTAsIDIyNSwgODcsIDI0LCA5MCwgMjI1LCA5MiwgMjQsIDkwLCAyMzQsIDIxOSwgMjQsIDkwLCAyMTksIAotICAgIDE0MSwgMjQsIDkwLCAyMTksIDEzMSwgMjQsIDkwLCAyMTksIDEzNCwgMjQsIDkwLCAyMTksIDEzNiwgMjQsIDkwLCAyMjYsIAotICAgIDMyLCAyNCwgOTAsIDIzNiwgNTEsIDI0LCA5MCwgMjM2LCA0NCwgMjQsIDkwLCAyMTgsIDIxNiwgMjQsIDkwLCAyMzYsIDUyLCAKLSAgICAyNCwgOTAsIDIxMSwgMjYsIDI0LCA5MCwgMjExLCAyMiwgMjQsIDkwLCAyMTEsIDIzLCAyNCwgOTAsIDIyNSwgMTI5LCAyNCwgCi0gICAgOTAsIDIzNCwgMjIwLCAyNCwgOTAsIDI0MSwgMTcwLCAyNCwgOTAsIDI0MSwgMTY4LCAyNCwgOTAsIDI0MSwgMTcxLCAyNCwgCi0gICAgOTAsIDI0MSwgMTY5LCAyNCwgOTAsIDIxMSwgMzIsIDI0LCA5MCwgMjM0LCA1NCwgMjQsIDkwLCAyMzQsIDUzLCAyNCwgOTAsIAotICAgIDIzNCwgNTcsIDI0LCA5MCwgMjM0LCA1NSwgMjQsIDkwLCAyMzQsIDU2LCAyNCwgOTAsIDIxOCwgMjEzLCAyOSwgMywgMTYyLCAKLSAgICAyOSwgMywgMjQwLCAyMjIsIDI5LCAzLCAyNDEsIDE4MCwgMjksIDMsIDI0MiwgNDYsIDI5LCAzLCAyNDEsIDIyMCwgMjksIDMsIAotICAgIDI0MSwgMjM4LCAyOSwgMywgMjQxLCA2OCwgMjksIDMsIDI0MSwgNjcsIDI5LCAzLCAyMzMsIDEzNSwgMjksIDMsIDIzMiwgCi0gICAgOTgsIDI5LCAzLCAyMzIsIDI0MSwgMjksIDMsIDIzMywgMTM0LCAyOSwgMywgMjMzLCA1MCwgMjksIDMsIDIzMywgNTgsIDI5LCAKLSAgICAzLCAyMzIsIDE1NiwgMjksIDMsIDIzMiwgNzAsIDI5LCAzLCAyNDEsIDE4OSwgMjksIDMsIDI0MSwgMTgzLCAyOSwgMywgCi0gICAgMjQxLCAxODUsIDI5LCAzLCAyNDEsIDE4OCwgMjksIDMsIDI0MSwgMTg2LCAyOSwgMywgMjQxLCAxODcsIDI5LCAzLCAyNDEsIAotICAgIDE4NCwgMjksIDMsIDI0MSwgMTgyLCAyOSwgMywgMTg0LCAyOSwgMywgMjMwLCAxMDIsIDI5LCAzLCAyMzAsIDIzMCwgMjksIAotICAgIDMsIDIzMSwgMjM3LCAyOSwgMywgMjMxLCA4MCwgMjksIDMsIDIzMSwgOTEsIDI5LCAzLCAyMzAsIDE2MSwgMjksIDMsIDIzMCwgCi0gICAgNDIsIDI5LCAzLCAyMTcsIDE2MywgMjksIDMsIDIxNywgMTU3LCAyOSwgMywgMjE3LCAxNTksIDI5LCAzLCAyMTcsIDE2MiwgCi0gICAgMjksIDMsIDIxNywgMTYwLCAyOSwgMywgMjE3LCAxNjEsIDI5LCAzLCAyMTcsIDE1OCwgMjksIDMsIDIxNywgMTU2LCAyOSwgCi0gICAgMywgMjA1LCAyOSwgMywgMjIyLCAxNDAsIDI5LCAzLCAyMjMsIDM1LCAyOSwgMywgMjIzLCAxODQsIDI5LCAzLCAyMjMsIAotICAgIDEwOCwgMjksIDMsIDIyMywgMTI4LCAyOSwgMywgMjIyLCAyMTEsIDI5LCAzLCAyMjIsIDEwOSwgMjksIDMsIDIwNiwgMjksIAotICAgIDMsIDIxOCwgODMsIDI5LCAzLCAyMTksIDE5MSwgMjksIDMsIDIyMiwgMzEsIDI5LCAzLCAyMjEsIDE3MCwgMjksIDMsIDIyMSwgCi0gICAgMTgxLCAyOSwgMywgMjE5LCA1OCwgMjksIDMsIDIxNywgMjUzLCAyOSwgMywgMjIwLCAxMDIsIDI5LCAzLCAyMTksIDIyNSwgCi0gICAgMjksIDMsIDIyMCwgMzIsIDI5LCAzLCAyMjAsIDk4LCAyOSwgMywgMjIwLCA2MSwgMjksIDMsIDIyMCwgNjMsIDI5LCAzLCAKLSAgICAyMjAsIDcsIDI5LCAzLCAyMTksIDIwOCwgMjksIDMsIDIyNCwgODgsIDI5LCAzLCAyMjQsIDMwLCAyOSwgMywgMjI0LCA1MywgCi0gICAgMjksIDMsIDIyNCwgODcsIDI5LCAzLCAyMjQsIDY4LCAyOSwgMywgMjI0LCA2OSwgMjksIDMsIDIyNCwgNDIsIDI5LCAzLCAKLSAgICAyMjQsIDQxLCAyOSwgMywgMjIzLCAyNDIsIDI5LCAzLCAyMjMsIDIzOCwgMjksIDMsIDIyMywgMjQxLCAyOSwgMywgMjIzLCAKLSAgICAyMzksIDI5LCAzLCAyMjMsIDI0MCwgMjksIDMsIDIyNCwgNjUsIDI5LCAzLCAyMjQsIDU5LCAyOSwgMywgMjI0LCA2MSwgMjksIAotICAgIDMsIDIyNCwgNjQsIDI5LCAzLCAyMjQsIDYyLCAyOSwgMywgMjI0LCA2MywgMjksIDMsIDIyNCwgNjAsIDI5LCAzLCAyMjQsIAotICAgIDU4LCAyOSwgMywgMjI0LCA1NCwgMjksIDMsIDIyNCwgNTcsIDI5LCAzLCAyMjQsIDU1LCAyOSwgMywgMjI0LCA1NiwgMjksIAotICAgIDMsIDI1MiwgMTkxLCAyOSwgMywgMjUxLCAxMjUsIDI5LCAzLCAyNTIsIDYsIDI5LCAzLCAyNTIsIDE4OSwgMjksIDMsIDI1MiwgCi0gICAgNjYsIDI5LCAzLCAyNTIsIDc1LCAyOSwgMywgMjUxLCAyMDUsIDI5LCAzLCAyNTEsIDgzLCAyOSwgMywgMjE0LCAyNywgMjksIAotICAgIDMsIDIxMiwgMTE2LCAyOSwgMywgMjEzLCAxNzYsIDI5LCAzLCAyMTQsIDI2LCAyOSwgMywgMjEzLCAyNTAsIDI5LCAzLCAKLSAgICAyMTMsIDI1NSwgMjksIDMsIDIxMywgMTM4LCAyOSwgMywgMjEyLCAxMDcsIDI5LCAzLCAyMTcsIDEwNSwgMjksIDMsIDIxNSwgCi0gICAgMTE4LCAyOSwgMywgMjE2LCAxMTcsIDI5LCAzLCAyMTcsIDEwMSwgMjksIDMsIDIxNywgMTEsIDI5LCAzLCAyMTcsIDIyLCAKLSAgICAyOSwgMywgMTExLCAyOSwgMywgMjE1LCA4MCwgMjksIDMsIDI1MSwgMzMsIDI5LCAzLCAyNDksIDExMiwgMjksIDMsIDI1MCwgCi0gICAgNTEsIDI5LCAzLCAyNTEsIDMyLCAyOSwgMywgMjUwLCAxODIsIDI5LCAzLCAyNTAsIDE5MCwgMjksIDMsIDI0OSwgMjM4LCAKLSAgICAyOSwgMywgMjQ5LCA4MSwgMjksIDMsIDIxMSwgMTY1LCAyOSwgMywgMjExLCAxNDEsIDI5LCAzLCAyMTEsIDE1NywgMjksIDMsIAotICAgIDIxMSwgMTY0LCAyOSwgMywgMjExLCAxNjEsIDI5LCAzLCAyMTEsIDE2MiwgMjksIDMsIDIxMSwgMTQ4LCAyOSwgMywgMjExLCAKLSAgICAxNDcsIDI5LCAzLCAyMTEsIDEzNiwgMjksIDMsIDIxMSwgMTMyLCAyOSwgMywgMjExLCAxMzUsIDI5LCAzLCAyMTEsIDEzMywgCi0gICAgMjksIDMsIDIxMSwgMTM0LCAyOSwgMywgMTk3LCAyOSwgMywgMjI3LCAyMzcsIDI5LCAzLCAyMjgsIDIzMywgMjksIDMsIAotICAgIDIyOSwgMjI1LCAyOSwgMywgMjI5LCAxMDMsIDI5LCAzLCAyMjksIDEwNywgMjksIDMsIDIyOCwgNzQsIDI5LCAzLCAyMjcsIAotICAgIDE3NCwgMjksIDMsIDIyNywgMTY1LCAyOSwgMywgMjI3LCAxMjgsIDI5LCAzLCAyMjcsIDE0OCwgMjksIDMsIDIyNywgMTY0LCAKLSAgICAyOSwgMywgMjI3LCAxNTUsIDI5LCAzLCAyMjcsIDE1NiwgMjksIDMsIDIyNywgMTM0LCAyOSwgMywgMjI3LCAxMTksIDI5LCAKLSAgICAzLCAyNDIsIDE4MCwgNjEsIDI5LCAzLCAyNDIsIDE4MCwgNzAsIDI5LCAzLCAyNDIsIDE4MCwgNzMsIDI5LCAzLCAyNDIsIAotICAgIDE4MCwgMjU1LCA3MywgMjksIDMsIDI0MiwgMTgwLCAyNDUsIDIwOSwgMjksIDMsIDI0MiwgMTgwLCA3NSwgMjksIDMsIDI0MiwgCi0gICAgMTgwLCA3NiwgMjksIDMsIDI0MiwgMTgwLCAyMTIsIDY1LCAyOSwgMywgMTc2LCAyOSwgMywgMjMzLCAyMTcsIDI5LCAzLCAKLSAgICAyMzQsIDkyLCAyOSwgMywgMjM1LCAxMCwgMjksIDMsIDIzNCwgMTgxLCAyOSwgMywgMjM0LCAxODIsIDI5LCAzLCAyMzQsIAotICAgIDI4LCAyOSwgMywgMjM0LCAyNywgMjksIDMsIDIzMywgMTgyLCAyOSwgMywgMjMzLCAxNzYsIDI5LCAzLCAyMzMsIDE4MSwgCi0gICAgMjksIDMsIDIzMywgMTc3LCAyOSwgMywgMjMzLCAxNzgsIDI5LCAzLCAyMzMsIDE3MSwgMjksIDMsIDIzMywgMTY1LCAyOSwgCi0gICAgMywgMjMzLCAxNjcsIDI5LCAzLCAyMzMsIDE3MCwgMjksIDMsIDIzMywgMTY4LCAyOSwgMywgMjMzLCAxNjksIDI5LCAzLCAKLSAgICAyMzMsIDE2NiwgMjksIDMsIDIzMywgMTY0LCAyOSwgMywgMjMzLCAxNjAsIDI5LCAzLCAyMzMsIDE2MywgMjksIDMsIDIzMywgCi0gICAgMTYxLCAyOSwgMywgMjMzLCAxNjIsIDI5LCAzLCAyMTIsIDY1LCAyOSwgMywgMjExLCAxOTUsIDI5LCAzLCAyMTEsIDI1MCwgCi0gICAgMjksIDMsIDIxMiwgNjQsIDI5LCAzLCAyMTIsIDE3LCAyOSwgMywgMjEyLCAyMiwgMjksIDMsIDIxMSwgMjI3LCAyOSwgMywgCi0gICAgMjExLCAyMjYsIDI5LCAzLCAyMjUsIDEzOSwgNjEsIDI5LCAzLCAyMjUsIDEzOSwgNzAsIDI5LCAzLCAyMjUsIDEzOSwgNzMsIAotICAgIDI5LCAzLCAyMjUsIDEzOSwgMjU1LCA3MywgMjksIDMsIDIyNSwgMTM5LCAyNDUsIDIwOSwgMjksIDMsIDIyNSwgMTM5LCA3NSwgCi0gICAgMjksIDMsIDIyNSwgMTM5LCA3NiwgMjksIDMsIDIxMCwgMTE2LCAyOSwgMywgMjEwLCAxMywgMjksIDMsIDIxMCwgNDQsIDI5LCAKLSAgICAzLCAyMTAsIDExNSwgMjksIDMsIDIxMCwgOTIsIDI5LCAzLCAyMTAsIDk0LCAyOSwgMywgMjEwLCAyMywgMjksIDMsIDIxMCwgCi0gICAgMCwgMjksIDMsIDIxMCwgODIsIDI5LCAzLCAyMTAsIDYyLCAyOSwgMywgMjEwLCA2OSwgMjksIDMsIDIxMCwgODEsIDI5LCAzLCAKLSAgICAyMTAsIDczLCAyOSwgMywgMjEwLCA3NCwgMjksIDMsIDIxMCwgNjcsIDI5LCAzLCAyMTAsIDUzLCAyOSwgMywgMTkxLCAyOSwgCi0gICAgMywgMjEwLCAyMTIsIDI5LCAzLCAyMTEsIDgsIDI5LCAzLCAyMTEsIDEwMywgMjksIDMsIDIxMSwgNDQsIDI5LCAzLCAyMTEsIAotICAgIDQ3LCAyOSwgMywgMjEwLCAyNDQsIDI5LCAzLCAyMTAsIDIzNSwgMjksIDMsIDI0OCwgMjIxLCAyOSwgMywgMjQ2LCA3OCwgCi0gICAgMjksIDMsIDI0OCwgMywgMjksIDMsIDI0OCwgMjIwLCAyOSwgMywgMjQ4LCA3NywgMjksIDMsIDI0OCwgOTAsIDI5LCAzLCAKLSAgICAyNDcsIDE0NSwgMjksIDMsIDI0NiwgNDcsIDI5LCAzLCAyNDgsIDEzNSwgMjksIDMsIDI0OCwgMTAwLCAyOSwgMywgMjQ4LCAKLSAgICAxMTIsIDI5LCAzLCAyNDgsIDEzNCwgMjksIDMsIDI0OCwgMTIyLCAyOSwgMywgMjQ4LCAxMjMsIDI5LCAzLCAyNDgsIDEwNSwgCi0gICAgMjksIDMsIDI0OCwgOTEsIDI5LCAzLCAyMzUsIDE0MSwgMjksIDMsIDIzNSwgNTEsIDI5LCAzLCAyMzUsIDEwOCwgMjksIDMsIAotICAgIDIzNSwgMTQwLCAyOSwgMywgMjM1LCAxMjQsIDI5LCAzLCAyMzUsIDEyNiwgMjksIDMsIDIzNSwgNjgsIDI5LCAzLCAyMzUsIAotICAgIDMxLCAyOSwgMywgMjQzLCAxMzUsIDI5LCAzLCAyNDIsIDExMywgMjksIDMsIDI0MiwgMjE0LCAyOSwgMywgMjQzLCAxMzIsIAotICAgIDI5LCAzLCAyNDMsIDU1LCAyOSwgMywgMjQzLCA2MiwgMjksIDMsIDI0MiwgMTc0LCAyOSwgMywgMjQyLCAxNzMsIDI5LCAzLCAKLSAgICAyNDIsIDc4LCAyOSwgMywgMjQyLCA3NCwgMjksIDMsIDI0MiwgNzcsIDI5LCAzLCAyNDIsIDc1LCAyOSwgMywgMjQyLCA3NiwgCi0gICAgMjksIDMsIDI0MywgMjksIDI5LCAzLCAyNDMsIDksIDI5LCAzLCAyNDMsIDE5LCAyOSwgMywgMjQzLCAyOCwgMjksIDMsIAotICAgIDI0MywgMjMsIDI5LCAzLCAyNDMsIDI0LCAyOSwgMywgMjQzLCAxMywgMjksIDMsIDI0MiwgMjU0LCAyOSwgMywgMjE2LCAKLSAgICAyMDgsIDI5LCAzLCAyMTYsIDEzNiwgMjksIDMsIDIxNiwgMTc1LCAyOSwgMywgMjE2LCAyMDcsIDI5LCAzLCAyMTYsIDE5NCwgCi0gICAgMjksIDMsIDIxNiwgMTk1LCAyOSwgMywgMjE2LCAxNTYsIDI5LCAzLCAyMTYsIDEyOCwgMjksIDMsIDI1MCwgMTU3LCAyOSwgCi0gICAgMywgMjUwLCA2OSwgMjksIDMsIDI1MCwgMTEwLCAyOSwgMywgMjUwLCAxNTYsIDI5LCAzLCAyNTAsIDEyOCwgMjksIDMsIAotICAgIDI1MCwgMTMxLCAyOSwgMywgMjUwLCA4NiwgMjksIDMsIDI1MCwgNTgsIDI5LCAzLCAyMjUsIDE0NywgMjksIDMsIDIyNSwgCi0gICAgMTE0LCAyOSwgMywgMjI1LCAxMzMsIDI5LCAzLCAyMjUsIDE0NiwgMjksIDMsIDIyNSwgMTM1LCAyOSwgMywgMjI1LCAxMzYsIAotICAgIDI5LCAzLCAyMjUsIDEyMSwgMjksIDMsIDIyNSwgMTEwLCAyOSwgMywgMjE1LCAxODMsIDI5LCAzLCAyMTUsIDE2MywgMjksIAotICAgIDMsIDIxNSwgMTY3LCAyOSwgMywgMjE1LCAxODIsIDI5LCAzLCAyMTUsIDE3NywgMjksIDMsIDIxNSwgMTc4LCAyOSwgMywgCi0gICAgMjE1LCAxNjYsIDI5LCAzLCAyMTUsIDE2MSwgMjksIDMsIDIxNSwgMzksIDI5LCAzLCAyMTUsIDMxLCAyOSwgMywgMjE1LCAKLSAgICAzNSwgMjksIDMsIDIxNSwgMzgsIDI5LCAzLCAyMTUsIDM2LCAyOSwgMywgMjE1LCAzNywgMjksIDMsIDIxNSwgMzMsIDI5LCAKLSAgICAzLCAyMTUsIDMyLCAyOSwgMywgMjQ0LCAxOTYsIDI5LCAzLCAyNDMsIDIzNCwgMjksIDMsIDI0NCwgMTIxLCAyOSwgMywgCi0gICAgMjQ0LCAxOTUsIDI5LCAzLCAyNDQsIDE0NywgMjksIDMsIDI0NCwgMTU0LCAyOSwgMywgMjQ0LCA0MywgMjksIDMsIDI0MywgCi0gICAgMjEzLCAyOSwgMywgMTkwLCAyOSwgMywgMjI0LCAxNTAsIDI5LCAzLCAyMjUsIDEwOCwgMjksIDMsIDIyNiwgODksIDI5LCAzLCAKLSAgICAyMjUsIDIxMSwgMjksIDMsIDIyNSwgMjIxLCAyOSwgMywgMjI1LCAxNiwgMjksIDMsIDIyNCwgMTE0LCAyOSwgMywgMjIyLCAKLSAgICA5OSwgMjksIDMsIDIzMCwgMzEsIDI5LCAzLCAyNDMsIDIwNywgMjksIDM4LCAyNDMsIDUzLCAyMiwgMjUsIDIzMywgMjMsIAotICAgIDc4LCAyOSwgMzgsIDI1LCAyMzMsIDIzLCA3OCwgMjksIDM4LCAyNDMsIDUzLCA3OCwgMjksIDIyMSwgMTczLCA3OCwgMjksIAotICAgIDIxMSwgMjA4LCAyOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyOSwgMjQ5LCAyMTksIDI5LCAyMjAsIDE1MCwgMjksIDI0OSwgCi0gICAgMjI2LCAyOSwgMjI0LCAxOTksIDI0OSwgMjI2LCAyOSwgMjI0LCAxMywgNzgsIDI5LCAyMjYsIDE1LCAyMjAsIDEzNywgMjksIAotICAgIDIxLCAxMTAsIDI5LCAyMSwgMTA1LCAyOSwgMjEsIDE1OCwgMjksIDIxLCAxNjEsIDI5LCAyMSwgMTg5LCAyOSwgMjEsIDE5NCwgCi0gICAgMjksIDIxLCAxOTgsIDI5LCAyMSwgMTk1LCAyOSwgMjEsIDIwMCwgMjksIDU0LCAyMTYsIDI0NywgMjksIDU0LCAyMTUsIDczLCAKLSAgICAyOSwgNTQsIDIxNiwgMTYyLCAyOSwgNTQsIDI0NCwgMTUsIDI5LCA1NCwgMjQ0LCAxMTQsIDI5LCA1NCwgMjE5LCAxMTEsIAotICAgIDI5LCA1NCwgMjIwLCAxMTYsIDI5LCA1NCwgMjQ1LCAxODQsIDI5LCA1NCwgMjI4LCAxOTUsIDI5LCA1NCwgMjQwLCAyMTAsIAotICAgIDI5LCA1NCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyOSwgMywgMjIxLCAxNzcsIDIzMCwgNDIsIDI5LCAzLCAyMzAsIDM4LCAyOSwgCi0gICAgMywgMjMwLCAzOSwgMjksIDMsIDIzMCwgNDAsIDI5LCAzLCAyMjEsIDE3NywgMjUxLCA4MywgMjksIDMsIDI1MSwgODAsIDI5LCAKLSAgICAzLCAyNTEsIDgxLCAyOSwgMywgMjUxLCA4MiwgMjksIDMsIDIyMSwgMTc3LCAyNDMsIDIxMywgMjksIDMsIDI0MywgMjA5LCAKLSAgICAyOSwgMywgMjQzLCAyMTAsIDI5LCAzLCAyNDMsIDIxMSwgMjksIDMsIDIyMSwgMTc3LCAyMjQsIDExNCwgMjksIDMsIDIyNCwgCi0gICAgMTEwLCAyOSwgMywgMjI0LCAxMTEsIDI5LCAzLCAyMjQsIDExMiwgMjksIDIxNiwgMzEsIDE2NCwgMjEwLCAyNDcsIDI5LCAKLSAgICAyMTYsIDMxLCAxNjQsIDI0OCwgNDEsIDI5LCAyMTYsIDMxLCAxNjQsIDIyMiwgMjM4LCAyOSwgMjE2LCAzMSwgMTY0LCAyMTksIAotICAgIDI1MSwgMjIyLCAyMzgsIDI5LCAyMTYsIDMxLCAxNjQsIDI0NywgMjM1LCAyOSwgMjE2LCAzMSwgMTY0LCAyMzQsIDE2NCwgCi0gICAgMjksIDIxNiwgMzEsIDE2NCwgMjUwLCA5NCwgMjksIDIxNiwgMzEsIDE2NCwgMjQxLCAxNzcsIDI5LCAyMTYsIDMxLCAxNjQsIAotICAgIDI0OCwgNDAsIDI5LCAyMTYsIDMxLCAxNjQsIDIzMywgMTk0LCAxNjksIDEsIDYxLCAxNjksIDEsIDc1LCAxNjksIDEsIDczLCAKLSAgICAxNjksIDEsIDc2LCAxNjksIDEsIDcwLCAxNjksIDEsIDIxNCwgMTA1LCAxNjksIDEsIDI0MywgMTM1LCAxNjksIDEsIDE3NiwgCi0gICAgMTY5LCAxLCAyNDMsIDYyLCAxNjksIDEsIDI0MiwgMjE0LCAxNjksIDEsIDI0MiwgMTc0LCAxNjksIDEsIDI0MiwgMTEzLCAKLSAgICAxNjksIDEsIDI0MiwgNzksIDE2OSwgMSwgMTYyLCAxNjksIDEsIDI0MSwgMjM4LCAxNjksIDEsIDI0MSwgMTgwLCAxNjksIDEsIAotICAgIDI0MSwgNjgsIDE2OSwgMSwgMjQwLCAyMjIsIDE2OSwgMSwgMjQwLCAyMDEsIDE2OSwgMSwgMjMzLCAxMzUsIDE2OSwgMSwgCi0gICAgMjMzLCA1OCwgMTY5LCAxLCAyMzIsIDI0MSwgMTY5LCAxLCAyMzIsIDE1NiwgMTY5LCAxLCAyMzIsIDk4LCAxNjksIDEsIAotICAgIDIzMiwgNzEsIDE2OSwgMSwgMTg0LCAxNjksIDEsIDIzMSwgOTEsIDE2OSwgMSwgMjMwLCAyMzAsIDE2OSwgMSwgMjMwLCAKLSAgICAxNjEsIDE2OSwgMSwgMjMwLCAxMDIsIDE2OSwgMSwgMTk3LCAxNjksIDEsIDI0MSwgOTAsIDE2OSwgMSwgMjI5LCAyMTMsIAotICAgIDE2OSwgMSwgMjI5LCAxMDcsIDE2OSwgMSwgMjI4LCAyMzMsIDE2OSwgMSwgMjI4LCA3NCwgMTY5LCAxLCAyMjcsIDIzNywgCi0gICAgMTY5LCAxLCAyMjcsIDE3NiwgMTY5LCAxLCAyMjQsIDI5LCAxNjksIDEsIDIyNCwgMTYsIDE2OSwgMSwgMjI0LCA5LCAxNjksIAotICAgIDEsIDIyNCwgMSwgMTY5LCAxLCAyMjMsIDI0NiwgMTY5LCAxLCAyMjMsIDI0NCwgMTY5LCAxLCAyMDYsIDE2OSwgMSwgMjIyLCAKLSAgICA5MSwgMTY5LCAxLCAyMjEsIDE4MSwgMTY5LCAxLCAyMTksIDE5MSwgMTY5LCAxLCAyMTksIDU4LCAxNjksIDEsIDIxOCwgODMsIAotICAgIDE2OSwgMSwgMjE4LCAyLCAxNjksIDEsIDI0OCwgMjIxLCAxNjksIDEsIDIxNywgMTA1LCAxNjksIDEsIDI0OCwgOTAsIDE2OSwgCi0gICAgMSwgMjE3LCAyMiwgMTY5LCAxLCAyNDgsIDMsIDE2OSwgMSwgMjE2LCAxMTcsIDE2OSwgMSwgMjQ3LCAxNDUsIDE2OSwgMSwgCi0gICAgMjQ2LCA3OCwgMTY5LCAxLCAyNDYsIDUwLCAxNjksIDEsIDI0NywgMTU2LCAxNjksIDEsIDIxNiwgNTksIDE2OSwgMSwgMjE2LCAKLSAgICA1OCwgMTY5LCAxLCAyMTYsIDQ3LCAxNjksIDEsIDIxNiwgNDYsIDE2OSwgMSwgMjE2LCA0NSwgMTY5LCAxLCAyMTYsIDQ0LCAKLSAgICAxNjksIDEsIDIxNSwgMTgzLCAxNjksIDEsIDIxNSwgMTc4LCAxNjksIDEsIDIxNSwgMTY3LCAxNjksIDEsIDIxNSwgMTY2LCAKLSAgICAxNjksIDEsIDIxNSwgMTYzLCAxNjksIDEsIDIxNSwgMTYyLCAxNjksIDEsIDIxMiwgNjUsIDE2OSwgMSwgMjEyLCAyMiwgCi0gICAgMTY5LCAxLCAyMTEsIDI1MCwgMTY5LCAxLCAyMTEsIDIyNywgMTY5LCAxLCAyMTEsIDE5NSwgMTY5LCAxLCAyMTEsIDE4MywgCi0gICAgMTY5LCAxLCAxOTEsIDE2OSwgMSwgMjExLCA0NywgMTY5LCAxLCAyMTEsIDgsIDE2OSwgMSwgMjEwLCAyNDQsIDE2OSwgMSwgCi0gICAgMjEwLCAyMTIsIDE2OSwgMSwgMjEwLCAxNzcsIDE4LCAxOSwgMjQwLCAxNjgsIDE4LCAxOSwgNzUsIDE4LCAxOSwgMjU1LCAKLSAgICAzNywgMTgsIDE5LCA3MywgMTgsIDE5LCAyMzYsIDMzLCAxOCwgMTksIDc2LCAxOCwgMTksIDIyNiwgMTgzLCAxOCwgMTksIAotICAgIDIxMSwgMTE2LCAyMjYsIDE4MywgMTgsIDE5LCA3MiwgMjQ1LCAyMDksIDE4LCAxOSwgNzIsIDczLCAxOCwgMTksIDYxLCAxOCwgCi0gICAgMTksIDI1NSwgNzMsIDE4LCAxOSwgMjEyLCAyMiwgMTgsIDE5LCAxNTksIDIxMiwgMjIsIDE4LCAxOSwgMjExLCAyNTAsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTEsIDI1MCwgMTgsIDE5LCAyMTEsIDI0MiwgMTgsIDE5LCAxNTksIDIxMSwgMjQyLCAxOCwgMTksIDIxMSwgCi0gICAgMjI3LCAxOCwgMTksIDE1OSwgMjExLCAyMjcsIDE4LCAxOSwgMjExLCAyMTUsIDE4LCAxOSwgMTU5LCAyMTEsIDIxNSwgMTgsIAotICAgIDE5LCAyMjksIDE5MCwgMjExLCAyMTUsIDE4LCAxOSwgMjEyLCA2NSwgMTgsIDE5LCAxNTksIDIxMiwgNjUsIDE4LCAxOSwgCi0gICAgMjEyLCA2NCwgMTgsIDE5LCAxNTksIDIxMiwgNjQsIDE4LCAxOSwgMjI5LCAxOTAsIDIxMiwgNjQsIDE4LCAxOSwgMjU0LCAKLSAgICAyMDEsIDE4LCAxOSwgMjExLCAxMTYsIDIxMiwgOTgsIDE4LCAxOSwgMjQyLCAxODAsIDIxOCwgMTI5LCAxOCwgMTksIDQwLCAKLSAgICAxNDIsIDE4LCAxOSwgNDAsIDI0MiwgMTM2LCAxOCwgMTksIDQwLCAyNTEsIDE3NSwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCAKLSAgICA0MCwgMjE2LCAxNCwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgNDQsIDE2MywgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIAotICAgIDIyMiwgMjMzLCAxOCwgMTksIDQwLCA1MiwgMTQyLCAxOCwgMTksIDQwLCA1MiwgMjE5LCAyNTEsIDY3LCAyMTgsIDkwLCAxOCwgCi0gICAgMTksIDQwLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDE4LCAxOSwgNDAsIDIxOSwgMjUxLCAyMDMsIDkxLCAxOCwgMTksIDQwLCAKLSAgICAyMjUsIDIyLCAxOCwgMTksIDQwLCAxMjQsIDIxNywgODcsIDE4LCAxOSwgMjQ1LCAxNTAsIDE4LCAxOSwgMjM1LCAyNTUsIAotICAgIDE4LCAxOSwgMjI2LCAxOTYsIDE4LCAxOSwgMjU0LCAxMjMsIDE4LCAxOSwgMjI1LCAyMjEsIDE4LCAxOSwgMjI2LCA4NywgCi0gICAgMTgsIDE5LCAyMjUsIDEwOCwgMTgsIDE5LCAyMjUsIDcxLCAxOCwgMTksIDIyNSwgMTYsIDE4LCAxOSwgMjI0LCAyNDksIDE4LCAKLSAgICAxOSwgMjExLCAxMTYsIDIyNCwgMjQ5LCAxOCwgMTksIDcyLCAyNDEsIDIyMCwgMTgsIDE5LCA3MiwgMjQxLCAxODAsIDE4LCAKLSAgICAxOSwgMTkwLCAxOCwgMTksIDIyNiwgODksIDE4LCAxOSwgMjI0LCAxMTIsIDE4LCAxOSwgMTU5LCAyMjQsIDExMiwgMTgsIAotICAgIDE5LCAyMjQsIDExMCwgMTgsIDE5LCAxNTksIDIyNCwgMTEwLCAxOCwgMTksIDIyNCwgMTA5LCAxOCwgMTksIDE1OSwgMjI0LCAKLSAgICAxMDksIDE4LCAxOSwgMjI0LCAxMDcsIDE4LCAxOSwgMTU5LCAyMjQsIDEwNywgMTgsIDE5LCAyMjQsIDEwNiwgMTgsIDE5LCAKLSAgICAxNTksIDIyNCwgMTA2LCAxOCwgMTksIDIyNCwgMTE0LCAxOCwgMTksIDE1OSwgMjI0LCAxMTQsIDE4LCAxOSwgMjI0LCAxMTMsIAotICAgIDE4LCAxOSwgMTU5LCAyMjQsIDExMywgMTgsIDE5LCAyMTEsIDExNiwgMjI0LCAxMTMsIDE4LCAxOSwgMjI2LCAxMDUsIDE4LCAKLSAgICAxOSwgMTU5LCAyMjYsIDEwNSwgMTgsIDE5LCA3MiwgMjQyLCA2MCwgMTgsIDE5LCAyMTcsIDIyLCAxOCwgMTksIDIxNywgOTksIAotICAgIDE4LCAxOSwgMjE2LCAxMTcsIDE4LCAxOSwgMjE2LCAxMDMsIDE4LCAxOSwgMTExLCAxOCwgMTksIDIxNiwgMTcsIDE4LCAxOSwgCi0gICAgMjExLCAxMTYsIDIxNiwgMTcsIDE4LCAxOSwgNzIsIDI0OCwgNzcsIDE4LCAxOSwgNzIsIDI0OCwgMywgMTgsIDE5LCAyMTcsIAotICAgIDEwNSwgMTgsIDE5LCAyMTcsIDEwMSwgMTgsIDE5LCAyMTUsIDc4LCAxOCwgMTksIDE1OSwgMjE1LCA3OCwgMTgsIDE5LCAKLSAgICAyMTUsIDYyLCAxOCwgMTksIDE1OSwgMjE1LCA2MiwgMTgsIDE5LCAyMTUsIDYxLCAxOCwgMTksIDE1OSwgMjE1LCA2MSwgMTgsIAotICAgIDE5LCAxMDUsIDE4LCAxOSwgMTU5LCAxMDUsIDE4LCAxOSwgMjE1LCA1NCwgMTgsIDE5LCAxNTksIDIxNSwgNTQsIDE4LCAxOSwgCi0gICAgMjE1LCA4MCwgMTgsIDE5LCAxNTksIDIxNSwgODAsIDE4LCAxOSwgMjE1LCA3OSwgMTgsIDE5LCAxNTksIDIxNSwgNzksIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxNSwgNzksIDE4LCAxOSwgMjE3LCAxNTIsIDE4LCAxOSwgMjE1LCAxNTEsIDE4LCAxOSwgMjE1LCAKLSAgICAxMzUsIDE4LCAxOSwgMjE1LCAxMzMsIDE4LCAxOSwgMjE1LCAxNTYsIDE4LCAxOSwgMjM0LCAxODIsIDE4LCAxOSwgMjM1LCAKLSAgICA3LCAxOCwgMTksIDIzNCwgOTIsIDE4LCAxOSwgMjM0LCA4MywgMTgsIDE5LCAyMzQsIDI4LCAxOCwgMTksIDIzNCwgMTAsIAotICAgIDE4LCAxOSwgMjExLCAxMTYsIDIzNCwgMTAsIDE4LCAxOSwgMTc2LCAxOCwgMTksIDIzNSwgMTAsIDE4LCAxOSwgMjMzLCAKLSAgICAxNzgsIDE4LCAxOSwgMTU5LCAyMzMsIDE3OCwgMTgsIDE5LCAyMzMsIDE3NiwgMTgsIDE5LCAxNTksIDIzMywgMTc2LCAxOCwgCi0gICAgMTksIDIzMywgMTc1LCAxOCwgMTksIDE1OSwgMjMzLCAxNzUsIDE4LCAxOSwgMjMzLCAxNzQsIDE4LCAxOSwgMTU5LCAyMzMsIAotICAgIDE3NCwgMTgsIDE5LCAyMzMsIDE3MywgMTgsIDE5LCAxNTksIDIzMywgMTczLCAxOCwgMTksIDIzMywgMTgyLCAxOCwgMTksIAotICAgIDE1OSwgMjMzLCAxODIsIDE4LCAxOSwgMjMzLCAxODEsIDE4LCAxOSwgMTU5LCAyMzMsIDE4MSwgMTgsIDE5LCAyMjksIDE5MCwgCi0gICAgMjMzLCAxODEsIDE4LCAxOSwgMjM1LCAyMywgMTgsIDE5LCAyMzMsIDE4MywgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDE3NiwgCi0gICAgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDg0LCAxOCwgMTksIDIxOSwgMjcsIDIzNCwgMjMsIDE4LCAxOSwgMjE5LCAyNywgMjM0LCAKLSAgICAyNDgsIDE4LCAxOSwgMjUwLCAxOTAsIDE4LCAxOSwgMjUxLCAzMSwgMTgsIDE5LCAyNTAsIDUxLCAxOCwgMTksIDI1MCwgNDEsIAotICAgIDE4LCAxOSwgMjQ5LCAyMzgsIDE4LCAxOSwgMjQ5LCAxNzQsIDE4LCAxOSwgMjExLCAxMTYsIDI0OSwgMTc0LCAxOCwgMTksIAotICAgIDI1MSwgMzMsIDE4LCAxOSwgMjUxLCAzMiwgMTgsIDE5LCAyNDksIDc5LCAxOCwgMTksIDE1OSwgMjQ5LCA3OSwgMTgsIDE5LCAKLSAgICAyNDksIDc3LCAxOCwgMTksIDE1OSwgMjQ5LCA3NywgMTgsIDE5LCAyNDksIDc2LCAxOCwgMTksIDE1OSwgMjQ5LCA3NiwgMTgsIAotICAgIDE5LCAyNDksIDc1LCAxOCwgMTksIDE1OSwgMjQ5LCA3NSwgMTgsIDE5LCAyNDksIDc0LCAxOCwgMTksIDE1OSwgMjQ5LCA3NCwgCi0gICAgMTgsIDE5LCAyNDksIDgxLCAxOCwgMTksIDE1OSwgMjQ5LCA4MSwgMTgsIDE5LCAyNDksIDgwLCAxOCwgMTksIDE1OSwgMjQ5LCAKLSAgICA4MCwgMTgsIDE5LCAyMjksIDE5MCwgMjQ5LCA4MCwgMTgsIDE5LCAyNTEsIDY2LCAxOCwgMTksIDIyMSwgMjA5LCAyMTYsIAotICAgIDIxMCwgMTgsIDE5LCAyMzEsIDkxLCAxOCwgMTksIDIzMSwgMjM2LCAxOCwgMTksIDIzMCwgMjMwLCAxOCwgMTksIDIzMCwgCi0gICAgMjAxLCAxOCwgMTksIDIzMCwgMTYxLCAxOCwgMTksIDIzMCwgMTMyLCAxOCwgMTksIDIxMSwgMTE2LCAyMzAsIDEzMiwgMTgsIAotICAgIDE5LCAxODQsIDE4LCAxOSwgMjMxLCAyMzcsIDE4LCAxOSwgMjMwLCA0MCwgMTgsIDE5LCAxNTksIDIzMCwgNDAsIDE4LCAxOSwgCi0gICAgMjMwLCAzOCwgMTgsIDE5LCAxNTksIDIzMCwgMzgsIDE4LCAxOSwgMjMwLCAzNywgMTgsIDE5LCAxNTksIDIzMCwgMzcsIDE4LCAKLSAgICAxOSwgMjMwLCAzNiwgMTgsIDE5LCAxNTksIDIzMCwgMzYsIDE4LCAxOSwgMjMwLCAzNSwgMTgsIDE5LCAxNTksIDIzMCwgMzUsIAotICAgIDE4LCAxOSwgMjMwLCA0MiwgMTgsIDE5LCAxNTksIDIzMCwgNDIsIDE4LCAxOSwgMjMwLCA0MSwgMTgsIDE5LCAxNTksIDIzMCwgCi0gICAgNDEsIDE4LCAxOSwgMjI5LCAxOTAsIDIzMCwgNDEsIDE4LCAxOSwgMTkzLCAxOCwgMTksIDE1OSwgMTkzLCAxOCwgMTksIAotICAgIDIzMCwgMjM0LCAxOCwgMTksIDI1MywgMjA1LCAxOTMsIDE4LCAxOSwgMjIxLCAyMDksIDE5MywgMTgsIDE5LCAyMjksIDEwNywgCi0gICAgMTgsIDE5LCAyMjksIDIyNCwgMTgsIDE5LCAyMjgsIDIzMywgMTgsIDE5LCAyMjgsIDIwOCwgMTgsIDE5LCAyMjgsIDc0LCAKLSAgICAxOCwgMTksIDIyOCwgNjQsIDE4LCAxOSwgMjExLCAxMTYsIDIyOCwgNjQsIDE4LCAxOSwgMTk3LCAxOCwgMTksIDIyOSwgCi0gICAgMjI1LCAxOCwgMTksIDIyNywgMTcyLCAxOCwgMTksIDE1OSwgMjI3LCAxNzIsIDE4LCAxOSwgMjI3LCAxNzQsIDE4LCAxOSwgCi0gICAgMTU5LCAyMjcsIDE3NCwgMTgsIDE5LCAyMjcsIDE3MywgMTgsIDE5LCAxNTksIDIyNywgMTczLCAxOCwgMTksIDIyOSwgMTkwLCAKLSAgICAyMjcsIDE3MywgMTgsIDE5LCAyMzAsIDI1LCAxOCwgMTksIDcyLCAyMjksIDc5LCAxOCwgMTksIDIyOCwgMjM4LCAxOCwgMTksIAotICAgIDIzMywgNTgsIDE4LCAxOSwgMjMzLCAxMzMsIDE4LCAxOSwgMjMyLCAyNDEsIDE4LCAxOSwgMjMyLCAyMjcsIDE4LCAxOSwgCi0gICAgMjMyLCAxNTYsIDE4LCAxOSwgMjMyLCAxMjcsIDE4LCAxOSwgMjExLCAxMTYsIDIzMiwgMTI3LCAxOCwgMTksIDIzMywgMTM1LCAKLSAgICAxOCwgMTksIDIzMywgMTM0LCAxOCwgMTksIDIzMiwgNjgsIDE4LCAxOSwgMTU5LCAyMzIsIDY4LCAxOCwgMTksIDIzMiwgNjcsIAotICAgIDE4LCAxOSwgMTU5LCAyMzIsIDY3LCAxOCwgMTksIDIzMiwgNjYsIDE4LCAxOSwgMTU5LCAyMzIsIDY2LCAxOCwgMTksIDIzMiwgCi0gICAgNjUsIDE4LCAxOSwgMTU5LCAyMzIsIDY1LCAxOCwgMTksIDIzMiwgNjQsIDE4LCAxOSwgMTU5LCAyMzIsIDY0LCAxOCwgMTksIAotICAgIDIzMiwgNzAsIDE4LCAxOSwgMTU5LCAyMzIsIDcwLCAxOCwgMTksIDIzMiwgNjksIDE4LCAxOSwgMTU5LCAyMzIsIDY5LCAxOCwgCi0gICAgMTksIDE1NiwgMTgsIDE5LCAxNTksIDE1NiwgMTgsIDE5LCAxNDcsIDE1NiwgMTgsIDE5LCAyMjEsIDE4MSwgMTgsIDE5LCAKLSAgICAyMjIsIDI5LCAxOCwgMTksIDIxOSwgMTkxLCAxOCwgMTksIDIxOSwgMTc1LCAxOCwgMTksIDIxOSwgNTgsIDE4LCAxOSwgCi0gICAgMjE5LCA0MCwgMTgsIDE5LCAyMTEsIDExNiwgMjE5LCA0MCwgMTgsIDE5LCAyMDYsIDE4LCAxOSwgMjIyLCAzMSwgMTgsIDE5LCAKLSAgICAyMTcsIDI0OSwgMTgsIDE5LCAxNTksIDIxNywgMjQ5LCAxOCwgMTksIDIxNywgMjQzLCAxOCwgMTksIDE1OSwgMjE3LCAyNDMsIAotICAgIDE4LCAxOSwgMjE3LCAyNDIsIDE4LCAxOSwgMTU5LCAyMTcsIDI0MiwgMTgsIDE5LCAyMTcsIDIzOCwgMTgsIDE5LCAxNTksIAotICAgIDIxNywgMjM4LCAxOCwgMTksIDIxNywgMjM3LCAxOCwgMTksIDE1OSwgMjE3LCAyMzcsIDE4LCAxOSwgMjE3LCAyNTMsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTcsIDI1MywgMTgsIDE5LCAyMTcsIDI1MiwgMTgsIDE5LCAxNTksIDIxNywgMjUyLCAxOCwgMTksIDIyOSwgCi0gICAgMTkwLCAyMTcsIDI1MiwgMTgsIDE5LCAyMjIsIDkxLCAxOCwgMTksIDI1MywgMjA1LCAyMjIsIDkxLCAxOCwgMTksIDIxNywgCi0gICAgMjU0LCAxOCwgMTksIDI1MSwgMjE4LCAyMjIsIDkxLCAxOCwgMTksIDIzMCwgMTI3LCAyMTksIDEwOCwgMTgsIDE5LCAyMjksIAotICAgIDE5MCwgMjE5LCA5OSwgMTgsIDE5LCAyMjksIDE5MCwgMjIyLCA4OSwgMTgsIDE5LCAyMjksIDE5MCwgMjE4LCAyMzUsIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxOCwgODYsIDE4LCAxOSwgMjI5LCAxOTAsIDIxOSwgOTgsIDE4LCAxOSwgMjI5LCAxOTAsIDIyMSwgCi0gICAgMTg0LCAxOCwgMTksIDIyMCwgNjMsIDE4LCAxOSwgMjIwLCAzMiwgMTgsIDE5LCAyMjAsIDI3LCAxOCwgMTksIDIyMCwgNywgCi0gICAgMTgsIDE5LCAyMjAsIDEsIDE4LCAxOSwgMjIwLCAxMDIsIDE4LCAxOSwgMjIwLCA5OCwgMTgsIDE5LCAyMTksIDIwNiwgMTgsIAotICAgIDE5LCAxNTksIDIxOSwgMjA2LCAxOCwgMTksIDIxOSwgMjA1LCAxOCwgMTksIDE1OSwgMjE5LCAyMDUsIDE4LCAxOSwgMjE5LCAKLSAgICAyMDQsIDE4LCAxOSwgMTU5LCAyMTksIDIwNCwgMTgsIDE5LCAyMTksIDIwMywgMTgsIDE5LCAxNTksIDIxOSwgMjAzLCAxOCwgCi0gICAgMTksIDIxOSwgMjAyLCAxOCwgMTksIDE1OSwgMjE5LCAyMDIsIDE4LCAxOSwgMjE5LCAyMDgsIDE4LCAxOSwgMTU5LCAyMTksIAotICAgIDIwOCwgMTgsIDE5LCAyMTksIDIwNywgMTgsIDE5LCAxNTksIDIxOSwgMjA3LCAxOCwgMTksIDIyMCwgMTA0LCAxOCwgMTksIAotICAgIDIxMSwgNDcsIDE4LCAxOSwgMjExLCAxMDEsIDE4LCAxOSwgMjExLCA4LCAxOCwgMTksIDIxMCwgMjU1LCAxOCwgMTksIDIxMCwgCi0gICAgMjQ0LCAxOCwgMTksIDIxMCwgMjI5LCAxOCwgMTksIDIxMSwgMTE2LCAyMTAsIDIyOSwgMTgsIDE5LCAxOTEsIDE4LCAxOSwgCi0gICAgMjExLCAxMDMsIDE4LCAxOSwgMjEwLCAxNzQsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NCwgMTgsIDE5LCAyMTAsIDE3MywgMTgsIAotICAgIDE5LCAxNTksIDIxMCwgMTczLCAxOCwgMTksIDIxMCwgMTcyLCAxOCwgMTksIDE1OSwgMjEwLCAxNzIsIDE4LCAxOSwgMjEwLCAKLSAgICAxNzEsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MSwgMTgsIDE5LCAyMTAsIDE3MCwgMTgsIDE5LCAxNTksIDIxMCwgMTcwLCAxOCwgCi0gICAgMTksIDIxMCwgMTc2LCAxOCwgMTksIDE1OSwgMjEwLCAxNzYsIDE4LCAxOSwgMjEwLCAxNzUsIDE4LCAxOSwgMTU5LCAyMTAsIAotICAgIDE3NSwgMTgsIDE5LCAyMjksIDE5MCwgMjEwLCAxNzUsIDE4LCAxOSwgMjExLCAxMTcsIDE4LCAxOSwgMjUyLCA0LCAyMTEsIAotICAgIDExNywgMTgsIDE5LCAxNTksIDIxMSwgMTE3LCAxOCwgMTksIDIyMSwgMjA5LCAyMTEsIDgsIDE4LCAxOSwgMjIzLCAxMjgsIAotICAgIDE4LCAxOSwgMjIzLCAyMjMsIDIyMywgMTI4LCAxOCwgMTksIDE1OSwgMjMzLCA1OCwgMTgsIDE5LCAyMjMsIDE4MywgMTgsIAotICAgIDE5LCAyMjMsIDM1LCAxOCwgMTksIDIyMiwgMjM5LCAxOCwgMTksIDIyMiwgMjExLCAxOCwgMTksIDIyMiwgMTk3LCAxOCwgCi0gICAgMTksIDE1OSwgMjMyLCAxNTYsIDE4LCAxOSwgMjA1LCAxOCwgMTksIDIyMywgMTg0LCAxOCwgMTksIDE1OSwgMjMzLCAxMzUsIAotICAgIDE4LCAxOSwgMjIyLCAxMDgsIDE4LCAxOSwgMTU5LCAyMjIsIDEwOCwgMTgsIDE5LCAxNTMsIDE4LCAxOSwgMTU5LCAxNTMsIAotICAgIDE4LCAxOSwgMTQ3LCAxNTMsIDE4LCAxOSwgMjQ0LCAxNTQsIDE4LCAxOSwgMjQ0LCAxOTMsIDE4LCAxOSwgMjQ0LCAxMjEsIAotICAgIDE4LCAxOSwgMjQ0LCAxMDgsIDE4LCAxOSwgMjQ0LCA0MywgMTgsIDE5LCAyNDQsIDM0LCAxOCwgMTksIDI0NCwgMTk2LCAxOCwgCi0gICAgMTksIDI0NCwgMTk1LCAxOCwgMTksIDI0MywgMjEyLCAxOCwgMTksIDE1OSwgMjQzLCAyMTIsIDE4LCAxOSwgMjQ1LCA2LCAKLSAgICAxOCwgMTksIDIxNiwgMTk1LCAxOCwgMTksIDIzMCwgMjMsIDIxNiwgMTk1LCAxOCwgMTksIDIxNiwgMTc1LCAxOCwgMTksIAotICAgIDIzMCwgMjMsIDIxNiwgMTc1LCAxOCwgMTksIDIxNiwgMTcxLCAxOCwgMTksIDIzMCwgMjMsIDIxNiwgMTcxLCAxOCwgMTksIAotICAgIDIxNiwgMTU2LCAxOCwgMTksIDIxNiwgMTUzLCAxOCwgMTksIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMjA3LCAxOCwgMTksIAotICAgIDIxNiwgMTI3LCAxOCwgMTksIDE1OSwgMjE2LCAxMjcsIDE4LCAxOSwgMjE2LCAyMTAsIDE4LCAxOSwgMjE1LCAxNDIsIDE4LCAKLSAgICAxOSwgMjE1LCAxNDAsIDE4LCAxOSwgMjE1LCAxMzksIDE4LCAxOSwgMjE1LCAxNDQsIDE4LCAxOSwgMjE1LCAxNDUsIDE4LCAKLSAgICAxOSwgMjE1LCA1MiwgMTgsIDE5LCAyMTUsIDUxLCAxOCwgMTksIDIxNSwgNTAsIDE4LCAxOSwgMjE1LCA1MywgMTgsIDE5LCAKLSAgICAyMjcsIDE5MywgMjQxLCAyMzgsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgMTgwLCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIAotICAgIDE2MSwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCA2OCwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCA1MywgMTgsIDE5LCAyMjcsIAotICAgIDE5MywgMTYyLCAxOCwgMTksIDIyNywgMTkzLCAyNDIsIDQ2LCAxOCwgMTksIDIyNywgMTkzLCAyNDIsIDYwLCAxOCwgMTksIAotICAgIDIyNywgMTkyLCAyNDIsIDYwLCAxOCwgMTksIDI0MSwgMTU0LCAxOCwgMTksIDIyNCwgODQsIDE4LCAxOSwgMjI0LCA1MywgCi0gICAgMTgsIDE5LCAyMjQsIDQ4LCAxOCwgMTksIDIyNCwgNDIsIDE4LCAxOSwgMjI0LCAzNywgMTgsIDE5LCAyMjQsIDg4LCAxOCwgCi0gICAgMTksIDIyNCwgODcsIDE4LCAxOSwgMjI0LCA5NiwgMTgsIDE5LCAyMTYsIDU1LCAxOCwgMTksIDIxNiwgNTMsIDE4LCAxOSwgCi0gICAgMjE2LCA1MiwgMTgsIDE5LCAyMTYsIDU2LCAxOCwgMTksIDE1OSwgMjIzLCAxMjgsIDE4LCAxOSwgMTU5LCAyMjMsIDM1LCAKLSAgICAxOCwgMTksIDE1OSwgMjIyLCAyMTEsIDE4LCAxOSwgMTU5LCAyMDUsIDE4LCAxOSwgMjI5LCA3NSwgMTgsIDE5LCAyMjksIAotICAgIDI3LCAxOCwgMTksIDIyOSwgMjMsIDE4LCAxOSwgMjI5LCA0LCAxOCwgMTksIDIyOCwgMjU1LCAxOCwgMTksIDIyOSwgNzcsIAotICAgIDE4LCAxOSwgMjI5LCA3NiwgMTgsIDE5LCAyMjksIDc5LCAxOCwgMTksIDIyOCwgMTAzLCAxOCwgMTksIDIyMSwgMjA5LCAKLSAgICAyMjAsIDYzLCAxOCwgMTksIDIyMSwgMjA5LCAyMjAsIDMyLCAxOCwgMTksIDIyMSwgMjA5LCAyMjAsIDcsIDE4LCAxOSwgCi0gICAgMjIxLCAyMDksIDIyMCwgMTAyLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE5NSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKLSAgICAxNzUsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTU2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIwOCwgMTgsIDE5LCAyMTEsIAotICAgIDIxMywgMjE2LCAyMTAsIDE4LCAxOSwgMjMyLCAyNDgsIDE4LCAxOSwgMjMyLCAyNDcsIDE4LCAxOSwgMjMyLCAyNDYsIDE4LCAKLSAgICAxOSwgMjMyLCAyNDUsIDE4LCAxOSwgMjMyLCAyNTQsIDE4LCAxOSwgMjMyLCAyNTMsIDE4LCAxOSwgMjMyLCAyNTUsIDE4LCAKLSAgICAxOSwgMjE2LCAyMDksIDIxNiwgMTk1LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE3NSwgMTgsIDE5LCAyMTYsIDIwOSwgCi0gICAgMjE2LCAxNzEsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMTU2LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE1MywgMTgsIDE5LCAKLSAgICAyMTYsIDIwOSwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMjA3LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIAotICAgIDIxMCwgMTgsIDE5LCAyNTQsIDE4OSwgMjUzLCAxNTgsIDE4LCAxOSwgMjUxLCAyMTgsIDc1LCAxOCwgMTksIDI1MSwgMjE4LCAKLSAgICA3MywgMTgsIDE5LCAyNTEsIDIxOCwgNzYsIDE4LCAxOSwgMjUxLCAyMTgsIDYxLCAxOCwgMTksIDI1MSwgMjE4LCAyMTIsIAotICAgIDIyLCAxOCwgMTksIDI1MSwgMjE4LCAyMTEsIDI1MCwgMTgsIDE5LCAyNTEsIDIxOCwgMjExLCAyMjcsIDE4LCAxOSwgMjUxLCAKLSAgICAyMTgsIDIxMiwgNjUsIDE4LCAxOSwgMjUxLCAyMTgsIDIyOSwgMTA3LCAxOCwgMTksIDI1MSwgMjE4LCAyMjgsIDIzMywgMTgsIAotICAgIDE5LCAyNTEsIDIxOCwgMjI4LCA3NCwgMTgsIDE5LCAyNTEsIDIxOCwgMTk3LCAxOCwgMTksIDI1MSwgMjE4LCAyMzQsIDE4MiwgCi0gICAgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCA5MiwgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCAyOCwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgMTc2LCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDIzOCwgMTgsIDE5LCAyMjEsIDIwOSwgMjQxLCAxODAsIDE4LCAxOSwgMjIxLCAKLSAgICAyMDksIDI0MSwgNjgsIDE4LCAxOSwgMjIxLCAyMDksIDE2MiwgMTgsIDE5LCA3MiwgMjQyLCAyMjAsIDE4LCAxOSwgNzIsIAotICAgIDI0MiwgMjI0LCAxOCwgMTksIDcyLCAyNDIsIDIzNiwgMTgsIDE5LCA3MiwgMjQyLCAyMzUsIDE4LCAxOSwgNzIsIDI0MiwgCi0gICAgMjI1LCAxOCwgMTksIDcyLCAyNDIsIDI0OSwgMTgsIDE5LCA3MiwgMjIyLCAxNDAsIDE4LCAxOSwgNzIsIDIyMiwgMjExLCAKLSAgICAxOCwgMTksIDcyLCAyMjMsIDEyOCwgMTgsIDE5LCA3MiwgMjIzLCAxMDgsIDE4LCAxOSwgNzIsIDIyMywgMzUsIDE4LCAxOSwgCi0gICAgNzIsIDIwNSwgMTgsIDE5LCA3MiwgMjExLCAxOTUsIDE4LCAxOSwgNzIsIDIxMSwgMjI3LCAxOCwgMTksIDcyLCAyMTIsIDIyLCAKLSAgICAxOCwgMTksIDcyLCAyMTIsIDE3LCAxOCwgMTksIDcyLCAyMTEsIDI1MCwgMTgsIDE5LCA3MiwgMjEyLCA2NSwgMTgsIDE5LCAKLSAgICA3MiwgMjQwLCAxOTQsIDE4LCAxOSwgNzIsIDI0MCwgMTk1LCAxOCwgMTksIDcyLCAyNDAsIDE5OCwgMTgsIDE5LCA3MiwgCi0gICAgMjQwLCAxOTcsIDE4LCAxOSwgNzIsIDI0MCwgMTk2LCAxOCwgMTksIDcyLCAyNDAsIDIwMCwgMTgsIDE5LCA3MiwgMjE2LCAKLSAgICAxMzYsIDE4LCAxOSwgNzIsIDIxNiwgMTU2LCAxOCwgMTksIDcyLCAyMTYsIDE5NSwgMTgsIDE5LCA3MiwgMjE2LCAxOTQsIAotICAgIDE4LCAxOSwgNzIsIDIxNiwgMTc1LCAxOCwgMTksIDcyLCAyMTYsIDIwOCwgMTgsIDE5LCA3MiwgMjE1LCAxMjMsIDE4LCAxOSwgCi0gICAgNzIsIDIxNSwgMTMzLCAxOCwgMTksIDcyLCAyMTUsIDE1MSwgMTgsIDE5LCA3MiwgMjE1LCAxNTAsIDE4LCAxOSwgNzIsIAotICAgIDIxNSwgMTM1LCAxOCwgMTksIDcyLCAyMTUsIDE1NiwgMTgsIDE5LCA3MiwgMjI0LCAxNTAsIDE4LCAxOSwgNzIsIDIyNSwgCi0gICAgMTYsIDE4LCAxOSwgNzIsIDIyNSwgMjIxLCAxOCwgMTksIDcyLCAyMjUsIDIxMSwgMTgsIDE5LCA3MiwgMjI1LCAxMDgsIDE4LCAKLSAgICAxOSwgNzIsIDE5MCwgMTgsIDE5LCA3MiwgMjI2LCAxMDUsIDE4LCAxOSwgNzIsIDI0MiwgMTEzLCAxOCwgMTksIDcyLCAyNDIsIAotICAgIDE3NCwgMTgsIDE5LCA3MiwgMjQzLCA2MiwgMTgsIDE5LCA3MiwgMjQzLCA1NSwgMTgsIDE5LCA3MiwgMjQyLCAyMTQsIDE4LCAKLSAgICAxOSwgNzIsIDI0MywgMTM1LCAxOCwgMTksIDcyLCAyMzQsIDEwMCwgMTgsIDE5LCA3MiwgMjM0LCAxMDUsIDE4LCAxOSwgNzIsIAotICAgIDIzNCwgMTE5LCAxOCwgMTksIDcyLCAyMzQsIDExOCwgMTgsIDE5LCA3MiwgMjM0LCAxMTIsIDE4LCAxOSwgNzIsIDIzNCwgCi0gICAgMTMyLCAxOCwgMTksIDcyLCAyMzQsIDQxLCAxOCwgMTksIDcyLCAyMzQsIDQyLCAxOCwgMTksIDcyLCAyMzQsIDQ1LCAxOCwgCi0gICAgMTksIDcyLCAyMzQsIDQ0LCAxOCwgMTksIDcyLCAyMzQsIDQzLCAxOCwgMTksIDcyLCAyMzQsIDQ2LCAxOCwgMTksIDcyLCAKLSAgICAyMzQsIDQ3LCAxOCwgMTksIDcyLCAyMjcsIDIzNywgMTgsIDE5LCA3MiwgMjI4LCA3NCwgMTgsIDE5LCA3MiwgMjI5LCAxMDcsIAotICAgIDE4LCAxOSwgNzIsIDIyOSwgMTAzLCAxOCwgMTksIDcyLCAyMjgsIDIzMywgMTgsIDE5LCA3MiwgMTk3LCAxOCwgMTksIDcyLCAKLSAgICAyMzAsIDEwMiwgMTgsIDE5LCA3MiwgMjMwLCAxNjEsIDE4LCAxOSwgNzIsIDIzMSwgOTEsIDE4LCAxOSwgNzIsIDIzMSwgODAsIAotICAgIDE4LCAxOSwgNzIsIDIzMCwgMjMwLCAxOCwgMTksIDcyLCAxODQsIDE4LCAxOSwgNzIsIDIxMCwgMjEyLCAxOCwgMTksIDcyLCAKLSAgICAyMTAsIDI0NCwgMTgsIDE5LCA3MiwgMjExLCA0NywgMTgsIDE5LCA3MiwgMjExLCA0NCwgMTgsIDE5LCA3MiwgMjExLCA4LCAKLSAgICAxOCwgMTksIDcyLCAxOTEsIDE4LCAxOSwgNzIsIDIzNSwgNTEsIDE4LCAxOSwgMjIxLCAyMDksIDIzNSwgNTEsIDE4LCAxOSwgCi0gICAgNzIsIDIzNSwgNjgsIDE4LCAxOSwgNzIsIDIzNSwgMTI2LCAxOCwgMTksIDcyLCAyMzUsIDEyNCwgMTgsIDE5LCA3MiwgMjM1LCAKLSAgICAxMDgsIDE4LCAxOSwgMjIxLCAyMDksIDIzNSwgMTA4LCAxOCwgMTksIDcyLCAyMzUsIDE0MSwgMTgsIDE5LCA3MiwgMjM1LCAKLSAgICA4MSwgMTgsIDE5LCA3MiwgMjM1LCA4NSwgMTgsIDE5LCA3MiwgMjM1LCA5NSwgMTgsIDE5LCA3MiwgMjM1LCA5NCwgMTgsIAotICAgIDE5LCA3MiwgMjM1LCA5MywgMTgsIDE5LCA3MiwgMjM1LCA5NiwgMTgsIDE5LCA3MiwgMjMyLCA5OCwgMTgsIDE5LCA3MiwgCi0gICAgMjMyLCAxNTYsIDE4LCAxOSwgNzIsIDIzMywgNTgsIDE4LCAxOSwgNzIsIDIzMywgNTAsIDE4LCAxOSwgNzIsIDIzMiwgMjQxLCAKLSAgICAxOCwgMTksIDcyLCAyMzMsIDEzNSwgMTgsIDE5LCA3MiwgMjQ3LCAxNDksIDE4LCAxOSwgNzIsIDI0NywgMTUwLCAxOCwgMTksIAotICAgIDcyLCAyNDcsIDE1NSwgMTgsIDE5LCA3MiwgMjQ3LCAxNTQsIDE4LCAxOSwgNzIsIDI0NywgMTUxLCAxOCwgMTksIDcyLCAKLSAgICAyNDcsIDE1NiwgMTgsIDE5LCA3MiwgMjMyLCAyNDQsIDE4LCAxOSwgNzIsIDIzMiwgMjQ2LCAxOCwgMTksIDcyLCAyMzIsIAotICAgIDI1MCwgMTgsIDE5LCA3MiwgMjMyLCAyNDksIDE4LCAxOSwgNzIsIDIzMiwgMjQ4LCAxOCwgMTksIDcyLCAyMzIsIDI1NCwgCi0gICAgMTgsIDE5LCA3MiwgMjE2LCA1MCwgMTgsIDE5LCA3MiwgMjE2LCA1MiwgMTgsIDE5LCA3MiwgMjE2LCA1NSwgMTgsIDE5LCAKLSAgICA3MiwgMjE2LCA1NCwgMTgsIDE5LCA3MiwgMjE2LCA1MywgMTgsIDE5LCA3MiwgMjE2LCA1NiwgMTgsIDE5LCA3MiwgMjE2LCAKLSAgICA0NSwgMTgsIDE5LCA3MiwgMjE2LCA0NiwgMTgsIDE5LCA3MiwgMjE2LCA1OCwgMTgsIDE5LCA3MiwgMjE2LCA1NywgMTgsIAotICAgIDE5LCA3MiwgMjE2LCA0NywgMTgsIDE5LCA3MiwgMjE2LCA1OSwgMTgsIDE5LCA3MiwgMjEwLCAxMywgMTgsIDE5LCA3MiwgCi0gICAgMjEwLCAyMywgMTgsIDE5LCA3MiwgMjEwLCA5NCwgMTgsIDE5LCA3MiwgMjEwLCA5MiwgMTgsIDE5LCA3MiwgMjEwLCA0NCwgCi0gICAgMTgsIDE5LCA3MiwgMjEwLCAxMTYsIDE4LCAxOSwgNzIsIDIxMCwgMTU5LCAxOCwgMTksIDcyLCA2NSwgMjEwLCAxNTksIDE4LCAKLSAgICAxOSwgNzIsIDI0NiwgMjgsIDE4LCAxOSwgNzIsIDI0NiwgMjksIDE4LCAxOSwgNzIsIDI0NiwgMzYsIDE4LCAxOSwgNzIsIAotICAgIDI0NiwgMzUsIDE4LCAxOSwgNzIsIDI0NiwgMzEsIDE4LCAxOSwgNzIsIDI0NiwgMzgsIDE4LCAxOSwgNzIsIDIxOCwgODMsIAotICAgIDE4LCAxOSwgNzIsIDIxOSwgNTgsIDE4LCAxOSwgNzIsIDIyMSwgMTgxLCAxOCwgMTksIDcyLCAyMjEsIDE3MCwgMTgsIDE5LCAKLSAgICA3MiwgMjE5LCAxOTEsIDE4LCAxOSwgNzIsIDIwNiwgMTgsIDE5LCA3MiwgMjE5LCAyMjUsIDE4LCAxOSwgNzIsIDIyMCwgNywgCi0gICAgMTgsIDE5LCA3MiwgMjIwLCA2MywgMTgsIDE5LCA3MiwgMjIwLCA2MSwgMTgsIDE5LCA3MiwgMjIwLCAzMiwgMTgsIDE5LCAKLSAgICA3MiwgMjIwLCAxMDIsIDE4LCAxOSwgNzIsIDIyMCwgMTA0LCAxOCwgMTksIDcyLCAyMTUsIDE2MywgMTgsIDE5LCA3MiwgCi0gICAgMjE1LCAxNjYsIDE4LCAxOSwgNzIsIDIxNSwgMTc4LCAxOCwgMTksIDcyLCAyMTUsIDE3NywgMTgsIDE5LCA3MiwgMjE1LCAKLSAgICAxNjcsIDE4LCAxOSwgNzIsIDIxNSwgMTgzLCAxOCwgMTksIDcyLCAyNTAsIDY5LCAxOCwgMTksIDcyLCAyNTAsIDg2LCAxOCwgCi0gICAgMTksIDcyLCAyNTAsIDEzMSwgMTgsIDE5LCA3MiwgMjUwLCAxMjgsIDE4LCAxOSwgNzIsIDI1MCwgMTEwLCAxOCwgMTksIDcyLCAKLSAgICAyNTAsIDE1NywgMTgsIDE5LCA3MiwgMjE1LCAxMjYsIDE4LCAxOSwgNzIsIDIxNSwgMTI3LCAxOCwgMTksIDcyLCAyMTUsIAotICAgIDEzMCwgMTgsIDE5LCA3MiwgMjE1LCAxMjksIDE4LCAxOSwgNzIsIDIxNSwgMTI4LCAxOCwgMTksIDcyLCAyMTUsIDEzMSwgCi0gICAgMTgsIDE5LCAyNTAsIDExMSwgNTAsIDE4LCAxOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAxOCwgMTksIDIyNCwgODAsIDE4LCAKLSAgICAxOSwgMjI5LCA3MywgMTgsIDE5LCAyMjgsIDEwMCwgMTgsIDE5LCAyMjgsIDk5LCAxOCwgMTksIDIyOCwgOTgsIDE4LCAxOSwgCi0gICAgMjI4LCA5NywgMTgsIDE5LCAyMjgsIDEwMiwgMTgsIDE5LCAyMjgsIDEwMSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjUsIAotICAgIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI0LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMywgMTgsIDE5LCAyMTEsIDIxMywgCi0gICAgMjE2LCAxMjIsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIxLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyOCwgMTgsIDE5LCAKLSAgICAyMTEsIDIxMywgMjE2LCAxMjcsIDE4LCAxOSwgMjExLCAyMTMsIDQwLCAyMTYsIDIxMCwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgMjEyLCA5OCwgMjI2LCAyMjYsIDIxOSwgMTksIDc4LCAyMjYsIDIyNiwgMSwgMjUyLCA0OCwgMjI2LCAyMjYsIDEsIDIzMiwgCi0gICAgODcsIDIyNiwgMjI2LCAxLCAyNDQsIDE1MSwgMjI2LCAyMjYsIDEsIDIyMiwgMTUsIDIyNiwgMjI2LCAxLCAyMjgsIDE5MywgCi0gICAgMjI2LCAyMjYsIDEsIDIxNCwgMjI2LCAyMjYsIDIyNiwgMSwgMjQ4LCAxOTcsIDIyNiwgMjI2LCAxLCAyMTYsIDgwLCAyMjYsIAotICAgIDIyNiwgMSwgMjQ5LCAyMjksIDIyNiwgMjI2LCAxLCAyNTAsIDE4MCwgMjI2LCAyMjYsIDEsIDIzMCwgOTEsIDIyNiwgMjI2LCAKLSAgICAxLCAyNDIsIDE1NiwgMjI2LCAyMjYsIDEsIDIyOSwgNjMsIDIyNiwgMjI2LCAxLCAyMTgsIDEyMiwgMjI2LCAyMjYsIDEsIAotICAgIDIyMiwgMTM1LCAyMjYsIDIyNiwgMSwgMjU0LCAxOTgsIDIyNiwgMjI2LCAxLCAyMjYsIDE4NywgMjI2LCAyMjYsIDEsIDIxNCwgCi0gICAgMTUwLCAyMjYsIDIyNiwgMSwgMjQ1LCAyMzEsIDIyNiwgMjI2LCAxLCAyMzUsIDE4OCwgMjI2LCAyMjYsIDEsIDI0NSwgMjMyLCAKLSAgICAyMjYsIDIyNiwgMSwgMjI2LCAxNTgsIDIyNiwgMjI2LCAxLCAyMTQsIDIwNiwgMjI2LCAyMjYsIDEsIDIzNiwgMzksIDIyNiwgCi0gICAgMjI2LCAxLCAyNDUsIDIyOSwgMjI2LCAyMjYsIDEsIDIyNSwgMjAyLCAyMjYsIDIyNiwgMjQ0LCAxNTAsIDc4LCAyMjYsIAotICAgIDIyNiwgMjIzLCA0OSwgMjQ0LCAxNTAsIDc4LCAxNzgsIDEsIDI0NCwgMTQxLCAyNDQsIDEzMywgMjQ0LCAxNTUsIDI0NSwgNiwgCi0gICAgMTc4LCAxLCAyMTQsIDEwNSwgMTc4LCAxLCAyMTQsIDEzNSwgMjE0LCAxNTEsIDcwLCAxNzgsIDEsIDIxMCwgMjE0LCAxNzgsIAotICAgIDEsIDIxMSwgMTE3LCAxNzgsIDEsIDIxMiwgOTgsIDE3OCwgMSwgMjE2LCAxMzAsIDIxNiwgMTI5LCAyMTYsIDE1MSwgMTc4LCAKLSAgICAxLCAyNDUsIDU5LCAxNzgsIDEsIDI1NCwgOTMsIDYxLCAxNzgsIDEsIDIyNiwgMTQzLCA3NiwgMTc4LCAxLCAyNTUsIDE3LCAKLSAgICA2MSwgMTc4LCAxLCAyNTQsIDIyNywgMTc4LCAxLCAyMzIsIDEzMywgNzYsIDE3OCwgMSwgMjE5LCAyNDQsIDc2LCAxNzgsIDEsIAotICAgIDc2LCAxNzgsIDEsIDIyNiwgMjM0LCAxNzgsIDEsIDIyNiwgMTk2LCAxNzgsIDEsIDIyMywgMTY0LCAyMjMsIDE3NywgMjIzLCAKLSAgICA5NCwgMTUzLCAxNzgsIDEsIDIzNCwgMTkzLCAxNzgsIDEsIDI1MCwgMTc3LCAxNzgsIDEsIDIzNCwgMTk0LCAyMzUsIDIzLCAKLSAgICAxNzgsIDEsIDI0MywgMjAyLCAxNzgsIDEsIDI0NSwgMTM4LCAxNzgsIDEsIDI0MywgNTgsIDI0MiwgNjYsIDI0MywgMjAyLCAKLSAgICAxNzgsIDEsIDI0MywgOTYsIDE3OCwgMSwgMjExLCAxODgsIDIxMSwgMTgyLCAyMTIsIDk4LCAxNzgsIDEsIDI0MiwgMzgsIAotICAgIDI0MiwgNjAsIDE3OCwgMSwgMjQyLCA0MiwgMjQyLCA2MCwgMTc4LCAxLCAyMzIsIDEzNSwgMjQyLCA2MCwgMTc4LCAxLCAKLSAgICAyMTksIDI0NywgMjQyLCA2MCwgMTc4LCAxLCAyMjksIDE4NSwgMjI3LCAxNTcsIDIyOSwgMTg2LCAyMzAsIDI1LCAxNzgsIDEsIAotICAgIDIxOSwgMjQ1LCAyMzAsIDI1LCAxNzgsIDEsIDI0NiwgMTE1LCAxNzgsIDEsIDIzNSwgMTY4LCAyMzUsIDE3MiwgMjM1LCAKLSAgICAxNjIsIDczLCAxNzgsIDEsIDc1LCAxNzgsIDEsIDIzNSwgMTE3LCAyMzUsIDE0NCwgMTc4LCAxLCAyNDMsIDQzLCAxNzgsIDEsIAotICAgIDIzMiwgMTM2LCAyNTQsIDI0MywgMTc4LCAxLCAyMTksIDI0OSwgNjEsIDE3OCwgMSwgMjM1LCAxNTQsIDI0NSwgMTEzLCAKLSAgICAxNzgsIDEsIDIyNSwgMTY0LCAyMjUsIDE4NiwgMjI2LCAxMDUsIDE3OCwgMSwgMjU0LCAxNjMsIDI0NSwgMTExLCAxNzgsIDEsIAotICAgIDIxOSwgMjQsIDIyMiwgOTEsIDE3OCwgMSwgMjE5LCAxNzksIDIzMiwgMTMyLCAyMjIsIDkxLCAxNzgsIDEsIDIxOSwgMjQzLCAKLSAgICAyMjIsIDkxLCAxNzgsIDEsIDI1MSwgNjYsIDE3OCwgMSwgMjEwLCAxNTksIDE3OCwgMSwgMjE2LCA2MywgMjE2LCA3MywgCi0gICAgMjE1LCA0MSwgMjE3LCAxNTIsIDE3OCwgMSwgMjE5LCAyNDIsIDIxNywgMTUyLCAxNzgsIDEsIDI0OSwgNjAsIDE3OCwgMSwgCi0gICAgMjUyLCAzMSwgMjUyLCAzNCwgMjUxLCAyMjQsIDI1MywgMTU4LCAxNzgsIDEsIDIxOSwgMjQ4LCAyNTMsIDE1OCwgMTc4LCAxLCAKLSAgICAyNDYsIDExNCwgMTc4LCAxLCAyMjYsIDE3MSwgMTc4LCAxLCAyNDUsIDE5NiwgMjQ1LCAxOTgsIDc1LCAxNzgsIDEsIDIzMSwgCi0gICAgMTc4LCAyMzEsIDE4NiwgMTkzLCAxNzgsIDEsIDIzMiwgMTM0LCAxOTMsIDE3OCwgMSwgMjE5LCAyNDYsIDE5MywgMTc4LCAxLCAKLSAgICAyMzMsIDczLCAyMzMsIDExNCwgMjMyLCAxNDMsIDE1NiwgMTc4LCAxLCAyNDYsIDExNiwgMTc4LCAxLCAyMzUsIDIzMCwgCi0gICAgMTc4LCAxLCAyMzUsIDIzMSwgMTc4LCAxLCAyNDgsIDIxMCwgMjQ4LCAyMTUsIDI0OSwgNjAsIDE3OCwgMSwgMjI2LCAxMzgsIAotICAgIDI0NSwgNTgsIDc2LCAxNzgsIDEsIDI0NSwgMjI3LCAxNzgsIDEsIDIzNSwgMTg3LCAxNzgsIDEsIDI0OSwgNzgsIDE3OCwgMSwgCi0gICAgMjUxLCAxNywgMTc4LCAxLCAyNTAsIDE4OSwgMTc4LCAxLCAyMTgsIDE2MSwgMTc4LCAxLCAyMzIsIDEzMSwgMTc4LCAxLCAKLSAgICAyMTksIDI0MSwgMTc4LCAxLCAyNDAsIDExMCwgMTc4LCAxLCAyMjQsIDk2LCAxNzgsIDEsIDIxMSwgMTc4LCAxNzgsIDIxOSwgCi0gICAgMTU1LCAyMjQsIDE0MCwgMTc4LCAyMzAsIDg1LCAyMjQsIDE0MCwgMTc4LCAyNDksIDEzMSwgMjI0LCAxNDAsIDE3OCwgMjU0LCAKLSAgICA2LCA4NywgMTc4LCAyMTUsIDgyLCA4NywgMTc4LCAyNTIsIDQ2LCA4NywgMjE3LCA4MywgMSwgNjEsIDIxNywgODMsIDEsIAotICAgIDczLCAyMTcsIDgzLCAxLCA3MCwgMjE3LCA4MywgMSwgMTc2LCAyMTcsIDgzLCAxLCAyNDMsIDEzNSwgMjE3LCA4MywgMSwgCi0gICAgMjI5LCA3NywgMjE3LCA4MywgMSwgMjE3LCAxMDUsIDIxNywgODMsIDEsIDI0OCwgMjIxLCAyMTcsIDgzLCAxLCAxOTcsIAotICAgIDIxNywgODMsIDEsIDE5MCwgMjE3LCA4MywgMSwgMjUyLCAxOTEsIDIxNywgODMsIDEsIDE4NCwgMjE3LCA4MywgMSwgMTkxLCAKLSAgICAyMTcsIDgzLCAxLCAyMzMsIDEzNSwgMjE3LCA4MywgMSwgMjEyLCA2NSwgMjE3LCA4MywgMSwgMjA2LCAyMTcsIDgzLCAxLCAKLSAgICAxNjIsIDIxNywgODMsIDI1LCA1LCA3MywgMjE3LCA4MywgMjUsIDUsIDcwLCAyMTcsIDgzLCA1LCAyMTMsIDE1MiwgMjQyLCAKLSAgICA3LCAxLCA2MSwgMjQyLCA3LCAxLCA3MywgMjQyLCA3LCAxLCA3MCwgMjQyLCA3LCAxLCAxNzYsIDI0MiwgNywgMSwgMjQzLCAKLSAgICAxMzUsIDI0MiwgNywgMSwgMjI5LCA3NywgMjQyLCA3LCAxLCAyMTcsIDEwNSwgMjQyLCA3LCAxLCAyNDgsIDIyMSwgMjQyLCAKLSAgICA3LCAxLCAxOTcsIDI0MiwgNywgMSwgMTkwLCAyNDIsIDcsIDEsIDI1MiwgMTkxLCAyNDIsIDcsIDEsIDE4NCwgMjQyLCA3LCAKLSAgICAxLCAxOTEsIDI0MiwgNywgMSwgMjA1LCAyNDIsIDcsIDEsIDIzMywgMTM1LCAyNDIsIDcsIDEsIDIxMiwgNjUsIDI0MiwgNywgCi0gICAgMSwgMjA2LCAyNDIsIDcsIDEsIDE2MiwgMjQyLCA3LCAyNSwgNSwgNzMsIDI0MiwgNywgMjUsIDUsIDcwLCAyNDIsIDcsIDUsIAotICAgIDIyNiwgNDksIDIyNSwgMTI2LCAyMTksIDE1NSwgMjI0LCAxNDAsIDIyNSwgMTI2LCA1MiwgMjI0LCAxNDAsIDI1MSwgMTIwLCAKLSAgICAxLCA2MSwgMjUxLCAxMjAsIDEsIDczLCAyNTEsIDEyMCwgMSwgNzAsIDI1MSwgMTIwLCAxLCAxNzYsIDI1MSwgMTIwLCAxLCAKLSAgICAyNDMsIDEzNSwgMjUxLCAxMjAsIDEsIDIyOSwgNzcsIDI1MSwgMTIwLCAxLCAyMTcsIDEwNSwgMjUxLCAxMjAsIDEsIDI0OCwgCi0gICAgMjIxLCAyNTEsIDEyMCwgMSwgMTk3LCAyNTEsIDEyMCwgMSwgMTkwLCAyNTEsIDEyMCwgMSwgMjUyLCAxOTEsIDI1MSwgMTIwLCAKLSAgICAxLCAxODQsIDI1MSwgMTIwLCAxLCAxOTEsIDI1MSwgMTIwLCAxLCAyMDUsIDI1MSwgMTIwLCAxLCAyMzMsIDEzNSwgMjUxLCAKLSAgICAxMjAsIDEsIDIxMiwgNjUsIDI1MSwgMTIwLCAxLCAyMDYsIDI1MSwgMTIwLCAxLCAxNjIsIDI1MSwgMTIwLCAyNSwgNSwgNzMsIAotICAgIDI1MSwgMTIwLCAyNSwgNSwgNzAsIDIxNywgODIsIDEsIDYxLCAyMTcsIDgyLCAxLCA3MywgMjE3LCA4MiwgMSwgNzAsIDIxNywgCi0gICAgODIsIDEsIDE3NiwgMjE3LCA4MiwgMSwgMjQzLCAxMzUsIDIxNywgODIsIDEsIDIyOSwgNzcsIDIxNywgODIsIDEsIDIxNywgCi0gICAgMTA1LCAyMTcsIDgyLCAxLCAyNDgsIDIyMSwgMjE3LCA4MiwgMSwgMTk3LCAyMTcsIDgyLCAxLCAxOTAsIDIxNywgODIsIDEsIAotICAgIDI1MiwgMTkxLCAyMTcsIDgyLCAxLCAxODQsIDIxNywgODIsIDEsIDE5MSwgMjE3LCA4MiwgMSwgMjMzLCAxMzUsIDIxNywgCi0gICAgODIsIDEsIDIxMiwgNjUsIDIxNywgODIsIDEsIDIwNiwgMjE3LCA4MiwgMjUsIDUsIDczLCAyMTcsIDgyLCAyNSwgNSwgNzAsIAotICAgIDY5LCAxLCAxNzYsIDY5LCAxLCAyMzQsIDEzMiwgNjksIDEsIDIzNCwgMjgsIDY5LCAxLCAyMzQsIDEwNSwgNjksIDEsIDIyOSwgCi0gICAgNCwgNjksIDEsIDI1MSwgMzMsIDY5LCAxLCAyNTAsIDE1NywgNjksIDEsIDI0OSwgMjM4LCA2OSwgMSwgMjUwLCA4NiwgNjksIAotICAgIDEsIDIyNywgMTM0LCA2OSwgMSwgMjQ4LCAyMjEsIDY5LCAxLCAyMTUsIDE0NCwgNjksIDEsIDI0NywgMTQ1LCA2OSwgMSwgCi0gICAgMjE1LCAxMzksIDY5LCAxLCAyMjgsIDgwLCA2OSwgMSwgMjE3LCAxMDUsIDY5LCAxLCAyMTYsIDIwOCwgNjksIDEsIDExMSwgCi0gICAgNjksIDEsIDIxNiwgMTU2LCA2OSwgMSwgMjI4LCA3NCwgNjksIDEsIDI1MiwgMTkxLCA2OSwgMSwgMjI1LCAxNDcsIDY5LCAxLCAKLSAgICAyMjUsIDE2LCA2OSwgMSwgMjI1LCAxMjEsIDY5LCAxLCAyMzAsIDE2MSwgNjksIDEsIDIxMCwgMjQ0LCA2OSwgMSwgMjIyLCAKLSAgICAyMTEsIDY5LCAxLCAyMzIsIDE1NiwgNjksIDEsIDIxMywgMTM4LCA2OSwgMSwgMjIwLCAxMDIsIDY5LCAxLCAyMTgsIDE4NCwgCi0gICAgNjksIDEsIDIwNiwgNjksIDEsIDE2MiwgNjksIDEsIDIzMywgMTM1LCA2OSwgMSwgMjI0LCA4OCwgNjksIDIzNSwgMjQzLCAKLSAgICAyNSwgMjI0LCA3NCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA4NywgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA1MywgNjksIAotICAgIDIzNSwgMjQzLCAyNSwgMjI0LCA0OCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAzMCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAKLSAgICAyLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjMsIDI0NiwgNjksIDIzNSwgMjQzLCAyNSwgMjIzLCAyNDUsIDY5LCAyMzUsIDI0MywgCi0gICAgMjUsIDIyMiwgMTAwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjIsIDkzLCA2OSwgMjM1LCAyNDMsIDI1LCAyMzIsIDYyLCA2OSwgCi0gICAgMjM1LCAyNDMsIDI1LCAyMzIsIDUyLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDY5LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIAotICAgIDgwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDM4LCAyMTUsIDQ5LCAxMTAsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgMzgsIAotICAgIDIxNSwgNDksIDEwNSwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA3MCwgNjksIDI1LCAyMzUsIDIyOSwgMjU0LCA0NSwgNjksIAotICAgIDI1LCAyMzUsIDIyOSwgMjU1LCA3MywgNjksIDI1LCA1LCAyNTUsIDczLCA2OSwgMjUsIDUsIDczLCA2OSwgMjUsIDUsIDIzNiwgCi0gICAgMzMsIDY5LCAyNSwgNSwgMjExLCAxMTcsIDY5LCAyNSwgNSwgMjEwLCAxNjksIDY5LCAyNSwgNSwgNzAsIDY5LCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDY5LCAyNSwgNSwgMjE0LCAyMjksIDY5LCAyNSwgNSwgMjI2LCAyMzQsIDY5LCAyNSwgNSwgMTkxLCA2OSwgCi0gICAgMjUsIDUsIDIzNiwgNjAsIDY5LCAyNSwgNSwgNzUsIDY5LCAyNSwgNSwgMjU0LCAyNDMsIDY5LCAyNSwgNSwgMjU0LCAyMDEsIAotICAgIDY5LCAyNSwgNSwgMjI2LCAxODMsIDY5LCAyNSwgNSwgMjUzLCAxOTIsIDY5LCA1LCAyMjgsIDIwNiwgNjksIDUsIDIyMywgCi0gICAgMTI2LCA2OSwgNSwgMjEwLCAxODAsIDY5LCA1LCAyMzAsIDUyLCA2OSwgNSwgMjE1LCAyMTMsIDY5LCA1LCAyNTIsIDE0MywgCi0gICAgNjksIDUsIDIyMiwgMjA2LCA2OSwgNSwgMjE2LCA0MCwgNjksIDUsIDIzNCwgMjQxLCA2OSwgNSwgMjU0LCAyMDMsIDY5LCA1LCAKLSAgICAyMjEsIDI0NCwgMjIxLCAyMzgsIDY5LCA1LCAyMTMsIDE0OSwgNjksIDUsIDI0OSwgMjMyLCA2OSwgNSwgMjUyLCAxMTcsIAotICAgIDY5LCA1LCAyMzQsIDEyNSwgNjksIDUsIDI1MiwgMTM3LCA2OSwgNSwgMjUxLCA5LCAyMjUsIDcyLCAyMzMsIDE4NywgNjksIAotICAgIDUsIDIzMywgMzAsIDIxNiwgMTcsIDY5LCA1LCAyNTIsIDIwLCA2OSwgNSwgMjI1LCAxMjMsIDIzMCwgOTksIDY5LCA1LCAKLSAgICAyMzQsIDksIDY5LCAyNDksIDk4LCAxNiwgMjIzLCAyOCwgNjksIDUsIDI1MywgMTc0LCA2OSwgNSwgMjUzLCAxOTUsIDY5LCAKLSAgICAyMSwgMjEwLCA4NiwgNjksIDIxLCAxMTAsIDY5LCAyMSwgMTA1LCA2OSwgMjEsIDE1OCwgNjksIDIxLCAxNjEsIDY5LCAyMSwgCi0gICAgMTg5LCA2OSwgMjEsIDE5NCwgNjksIDIxLCAxOTgsIDY5LCAyMSwgMTk1LCA2OSwgMjEsIDIwMCwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjE5LCA0MywgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjMwLCA3MSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjI1LCA3MSwgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjUyLCA0OSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjUxLCAxMDMsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIyNCwgMjE1LCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMjQsIDIwOSwgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjI0LCAyMDcsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIyNCwgMjEzLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMjQsIDIxMSwgODMsIDI1MSwgMjM2LCAKLSAgICA4MywgMjQ1LCAxNjMsIDgzLCAyNDksIDIxOSwgODMsIDI0MywgMjI5LCAyMTgsIDEyOSwgODMsIDI0OSwgMjI2LCA4MywgCi0gICAgMjQ0LCAxMSwgMjQ3LCAxMTgsIDgzLCAyMTYsIDM5LCAyMTksIDUyLCAyNDAsIDE2OCwgODMsIDIxOSwgMTkwLCAzLCAyNTEsIAotICAgIDE3MiwgMjMxLCAxNTQsIDgzLCAyMzEsIDE4MywgMjQ5LCAyMTksIDgzLCAyMzEsIDE4MywgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA4MywgMjI4LCAxOTEsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgMTU3LCAxMTAsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgCi0gICAgMTU3LCAxMDUsIDgzLCAyNDMsIDI1MywgNDUsIDIyMSwgMTU3LCAxNTgsIDgzLCAyNSwgMjIwLCAxMzcsIDgzLCAyMSwgMjEwLCAKLSAgICA4NiwgODMsIDIxLCAxMTAsIDgzLCAyMSwgMTA1LCA4MywgMjEsIDE1OCwgODMsIDIxLCAxNjEsIDgzLCAyMSwgMTg5LCA4MywgCi0gICAgMjEsIDE5NCwgODMsIDIxLCAxOTgsIDgzLCAyMSwgMTk1LCA4MywgMjEsIDIwMCwgODMsIDEsIDYxLCA4MywgMSwgNzUsIDgzLCAKLSAgICAxLCA3MywgODMsIDEsIDc2LCA4MywgMSwgNzAsIDgzLCAxLCAyMjYsIDIzNCwgODMsIDEsIDIxNCwgMjE0LCA4MywgMSwgCi0gICAgMjQ1LCAyMDksIDgzLCAxLCAxOTcsIDgzLCAxLCAyNTQsIDExNSwgODMsIDEsIDI1MiwgMTkxLCA4MywgMSwgMTkwLCA4MywgCi0gICAgMSwgMjI0LCA4OCwgODMsIDEsIDI0MywgMTM1LCA4MywgMSwgMTg0LCA4MywgMSwgMjMzLCAxMzUsIDgzLCAxLCAyMDYsIDgzLCAKLSAgICAxLCAyMjAsIDEwMiwgODMsIDEsIDIxNywgMTA1LCA4MywgMSwgMjQ4LCAyMjEsIDgzLCAxLCAyNTAsIDE1NywgODMsIDEsIAotICAgIDIzNSwgMTQxLCA4MywgMSwgMTkxLCA4MywgMSwgMjA1LCA4MywgMSwgMjEyLCA2NSwgODMsIDEsIDI0NCwgMTk2LCA4MywgMSwgCi0gICAgMTc2LCA4MywgMSwgMjM0LCAxMzIsIDgzLCAxLCAyMTUsIDE4MywgODMsIDEsIDIxMCwgMTE2LCA4MywgMSwgMjQyLCA0NiwgCi0gICAgODMsIDEsIDIxMCwgMTYsIDgzLCAxLCAyMzIsIDI1NCwgODMsIDEsIDIxMCwgNjksIDgzLCAxLCAyNTAsIDExMCwgODMsIDEsIAotICAgIDIxNiwgMzksIDE5OSwgMjUsIDUwLCA4MywgMSwgMjE2LCAzOSwgNzUsIDgzLCAxLCAyMTYsIDM5LCA3MywgODMsIDEsIDIxNiwgCi0gICAgMzksIDc2LCA4MywgMSwgMjE2LCAzOSwgNzAsIDgzLCAxLCAyMTYsIDM5LCAyMjYsIDIzNCwgODMsIDEsIDIxNiwgMzksIAotICAgIDIxNCwgMjE0LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAxMTUsIDgzLCAxLCAyMTYsIDM5LCAyNTIsIDE5MSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDE5MCwgODMsIDEsIDIxNiwgMzksIDIyNCwgODgsIDgzLCAxLCAyMTYsIDM5LCAyNDMsIDEzNSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDE4NCwgODMsIDEsIDIxNiwgMzksIDIxNywgMTA1LCA4MywgMSwgMjE2LCAzOSwgMjQ4LCAyMjEsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAyNTAsIDE1NywgODMsIDEsIDIxNiwgMzksIDIzNSwgMTQxLCA4MywgMSwgMjE2LCAzOSwgMjE1LCAxODMsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAxOTEsIDgzLCAxLCAyMTYsIDM5LCAyMTIsIDY1LCA4MywgMSwgMjE2LCAzOSwgMTc2LCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMjQzLCAxMzIsIDgzLCAxLCAyMTYsIDM5LCAyNDIsIDQ2LCA4MywgMSwgMjE2LCAzOSwgMjM1LCAxMDcsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAyMjgsIDIzMSwgODMsIDEsIDIxNiwgMzksIDI0NiwgMzgsIDgzLCAxLCAyMTksIDE5MCwgNzUsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgNzMsIDgzLCAxLCAyMTksIDE5MCwgMjM1LCAxNTIsIDgzLCAxLCAyMTksIDE5MCwgMjE0LCAyMTQsIDgzLCAKLSAgICAxLCAyMTksIDE5MCwgNzAsIDgzLCAxLCAyMTksIDE5MCwgMjU0LCAxMTUsIDgzLCAxLCAyMTksIDE5MCwgMTc2LCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDI0MywgMTM1LCA4MywgMSwgMjE5LCAxOTAsIDE2MiwgODMsIDEsIDIxOSwgMTkwLCAxOTAsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgMjIwLCAxMDIsIDgzLCAxLCAyMTksIDE5MCwgMjE3LCAxMDUsIDgzLCAxLCAyMTksIDE5MCwgMjQ4LCAyMjEsIAotICAgIDgzLCAxLCAyMTksIDE5MCwgMjM1LCAxNDEsIDgzLCAxLCAyMTksIDE5MCwgMjQ0LCAxOTYsIDgzLCAxLCAyMTksIDE5MCwgCi0gICAgMjQzLCAxMzIsIDgzLCAxLCAyMTksIDE5MCwgMjQyLCA0NiwgODMsIDEsIDIxOSwgMTkwLCAyMTUsIDE4MywgODMsIDEsIAotICAgIDIxOSwgMTkwLCAyMTAsIDExNiwgODMsIDEsIDIxOSwgMTkwLCAyMjMsIDE4NCwgODMsIDEsIDIxOSwgMTkwLCAyNTAsIDE1NywgCi0gICAgODMsIDEsIDIxOSwgMTkwLCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDczLCA4MywgMSwgMjMxLCAxODMsIDE3NiwgODMsIAotICAgIDEsIDIzMSwgMTgzLCAyMDUsIDgzLCAxLCAyMzEsIDE4MywgMjQ0LCAxOTYsIDgzLCAxLCAyMzEsIDE4MywgMjEwLCA4MiwgCi0gICAgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjU0LCA3NiwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTMsIAotICAgIDE0OCwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDgsIDE4NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIzNSwgMTkzLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTYyLCAKLSAgICAyNDMsIDExNiwgMjUyLCAxNTUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDEzNCwgMjUyLCAxNTUsIDgzLCAxLCAyNTQsIAotICAgIDE2MiwgMjQzLCAxMTYsIDYxLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCA3MywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMTc2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMjksIDc3LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyNTEsIDMzLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTUsIDE1NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE1LCAxNDQsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMTM1LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMjgsIDExMCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE3LCAxMDUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDI0OCwgMjIxLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxOTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIyNSwgCi0gICAgMTQ3LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTgsIDIyMywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAKLSAgICA4MiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI1NCwgCi0gICAgMjA5LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDIxNiwgMzksIDI1NCwgCi0gICAgMTYyLCAyNDMsIDExNiwgMjEwLCA4MiwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0MiwgMjQ5LCAKLSAgICA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjI5LCA3NywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgCi0gICAgMjQzLCAxMTYsIDI1MSwgMzMsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzUsIDExNCwgODMsIDEsIAotICAgIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNSwgMTU2LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMjQ4LCAxMTksIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDIzMSwgCi0gICAgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMjUsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMTgsIDIyMywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OSwgNzIsIDgzLCAxLCAyMzEsIDE4MywgCi0gICAgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCAKLSAgICAxMTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE2MywgNzAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE2MywgCi0gICAgMTkxLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjUyLCAxOCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIAotICAgIDExNiwgMjQ4LCAyMTEsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzIsIDI1NCwgMTgsIDE5LCAKLSAgICAyMjYsIDEwOSwgMTgsIDE5LCAyNTMsIDE2NywgMTgsIDE5LCAyNTUsIDI4LCAxOCwgMTksIDIxMiwgMjUsIDE4LCAxOSwgCi0gICAgMjI0LCAyMjEsIDE4LCAxOSwgMjI1LCAyMjksIDE4LCAxOSwgMjI0LCAxMDUsIDE4LCAxOSwgMjE3LCAzMSwgMTgsIDE5LCAKLSAgICAyMzQsIDE4OSwgMTgsIDE5LCAyMzMsIDE3OSwgMTgsIDE5LCAyMzEsIDEzMiwgMTgsIDE5LCAyMjgsIDM3LCAxOCwgMTksIAotICAgIDIyOSwgMTgxLCAxOCwgMTksIDIzMywgNjgsIDE4LCAxOSwgMjE5LCAyMiwgMTgsIDE5LCAyMjEsIDIxMSwgMTgsIDE5LCAKLSAgICAyMTksIDIzMiwgMTgsIDE5LCAyMjAsIDY2LCAxOCwgMTksIDIxOSwgMjAxLCAxOCwgMTksIDIxMCwgMjIwLCAxOCwgMTksIAotICAgIDIxMSwgNTIsIDE4LCAxOSwgMjIzLCAxMzQsIDE4LCAxOSwgMjI3LCAxNzEsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTcxLCAKLSAgICAxOCwgMTksIDIyNywgMTcwLCAxOCwgMTksIDIyNiwgMjE2LCAyMjcsIDE3MCwgMTgsIDE5LCAyMjcsIDE2OSwgMTgsIDE5LCAKLSAgICAyMjYsIDIxNiwgMjI3LCAxNjksIDE4LCAxOSwgMjI3LCAxNjgsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTY4LCAxOCwgMTksIAotICAgIDIyMiwgMTA1LCAxOCwgMTksIDIyMiwgMTA0LCAxOCwgMTksIDIyMiwgMTAzLCAxOCwgMTksIDIyMiwgMTAyLCAxOCwgMTksIAotICAgIDIyMiwgMTAxLCAxOCwgMTksIDIyMiwgMTA5LCAxOCwgMTksIDIyNiwgMjE2LCAyMjYsIDEwNSwgMTgsIDE5LCAyMjYsIDIxNiwgCi0gICAgMjE3LCAxNTIsIDE4LCAxOSwgMjI2LCAyMTYsIDIzNSwgMjMsIDE4LCAxOSwgMjI2LCAyMTYsIDI1MSwgNjYsIDE4LCAxOSwgCi0gICAgMjI2LCAyMTYsIDE5MywgMTgsIDE5LCAyMjYsIDIxNiwgMjMwLCAyNSwgMTgsIDE5LCAyMjYsIDIxNiwgMjIyLCA5MSwgMTgsIAotICAgIDE5LCAyMjYsIDIxNiwgMjIwLCAxMDQsIDE4LCAxOSwgMjQ1LCAyMTksIDIxMiwgOTgsIDE4LCAxOSwgMjEyLCA3LCAyMTIsIAotICAgIDk4LCAxOCwgMTksIDQwLCA0LCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgMjIzLCAxNTcsIDI0NywgMTIwLCAxOCwgMTksIDIyMywgCi0gICAgMjIzLCAyMjIsIDEwNiwgMTgsIDE5LCAxNTksIDIzMiwgMTI3LCAxOCwgMTksIDE1OSwgMjMzLCAxMzQsIDE4LCAxOSwgMjE2LCAKLSAgICAxMjYsIDE4LCAxOSwgMjE2LCAxMjgsIDE4LCAxOSwgMjE1LCAxMzYsIDE4LCAxOSwgMjE1LCAxMzgsIDE4LCAxOSwgMjE1LCAKLSAgICAxNDMsIDE4LCAxOSwgMjE2LCA0OSwgMTgsIDE5LCAyMTYsIDUxLCAxOCwgMTksIDIyMSwgMjA5LCAyMTksIDIwNiwgMTgsIAotICAgIDE5LCAyMjEsIDIwOSwgMjIwLCAxLCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDUzLCAxOCwgMTksIDcyLCAyNDIsIDczLCAxOCwgCi0gICAgMTksIDcyLCAyNDgsIDUyLCAyNDMsIDU1LCAxOCwgMTksIDcyLCAyNDMsIDEzMiwgMTgsIDE5LCA3MiwgMjQyLCA3OCwgMTgsIAotICAgIDE5LCAyMjEsIDIwOSwgMjM1LCAzMywgMTgsIDE5LCA3MiwgMjM1LCAzMSwgMTgsIDE5LCAyNTIsIDY4LCAyNDgsIDUyLCAKLSAgICAxNTYsIDE4LCAxOSwgMjUyLCA2OCwgMjQ4LCA1MiwgMTUzLCAxOCwgMTksIDcyLCAyNDgsIDQ3LCAyMjIsIDkxLCAyMzIsIAotICAgIDIyMywgMjEzLCAxMjIsIDIzMywgMTAsIDIzMiwgMjIzLCAxLCAxNzYsIDIzMiwgMjIzLCAxLCAyMzQsIDEzMiwgMjMyLCAKLSAgICAyMjMsIDEsIDI0MywgMTM1LCAyMzIsIDIyMywgMSwgMjQyLCAyNDksIDIzMiwgMjIzLCAxLCAyMjksIDc3LCAyMzIsIDIyMywgCi0gICAgMSwgMjUxLCAzMywgMjMyLCAyMjMsIDEsIDI1MCwgMTU3LCAyMzIsIDIyMywgMSwgMjM1LCAxNDEsIDIzMiwgMjIzLCAxLCAKLSAgICAyMzUsIDExNCwgMjMyLCAyMjMsIDEsIDIxMSwgNzEsIDIzMiwgMjIzLCAxLCAyMTcsIDEwNSwgMjMyLCAyMjMsIDEsIDIxNiwgCi0gICAgMjA4LCAyMzIsIDIyMywgMSwgMjQ4LCAyMjEsIDIzMiwgMjIzLCAxLCAyNDgsIDI1LCAyMzIsIDIyMywgMSwgMTk3LCAyMzIsIAotICAgIDIyMywgMSwgMTkwLCAyMzIsIDIyMywgMSwgMjI1LCAxNDcsIDIzMiwgMjIzLCAxLCAyNTIsIDE5MSwgMjMyLCAyMjMsIDEsIAotICAgIDI1MiwgMTgsIDIzMiwgMjIzLCAxLCAxODQsIDIzMiwgMjIzLCAxLCAxOTEsIDIzMiwgMjIzLCAxLCAyMDUsIDIzMiwgMjIzLCAKLSAgICAxLCAyMzMsIDEzNSwgMjMyLCAyMjMsIDEsIDIxMiwgNjUsIDIzMiwgMjIzLCAxLCAyMjAsIDEwMiwgMjMyLCAyMjMsIDEsIAotICAgIDIxOCwgMjIzLCAyMzIsIDIyMywgMSwgMjA2LCAyMzIsIDIyMywgMSwgMTYyLCAyMzIsIDIyMywgMjUsIDUsIDYxLCAyMzIsIAotICAgIDIyMywgMjUsIDUsIDczLCAyMzIsIDIyMywgMjUsIDUsIDcwLCAyMzIsIDIyMywgMjUsIDUsIDI0NSwgMjA5LCAyMzIsIDIyMywgCi0gICAgMjUsIDUsIDI1NCwgMjAxLCAyMzIsIDIyMywgMjUsIDUsIDIyNiwgMTgzLCAyMzIsIDIyMywgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAyMzIsIDIyMywgMjUsIDUsIDc1LCAyMzIsIDIyMywgMjUsIDUsIDc2LCAyMzIsIDIyMywgMjE4LCA3MywgMSwgMTkxLCAyMzIsIAotICAgIDIyMywgMjE4LCA3MywgMSwgMjA1LCAyMzIsIDIyMywgMjE4LCA3MywgMSwgMjEyLCA2NSwgMjMyLCAyMjMsIDQsIDEsIDE3NiwgCi0gICAgMjMyLCAyMjMsIDQsIDEsIDIyOSwgNzcsIDIzMiwgMjIzLCA0LCAxLCAyNTQsIDc1LCAyMzIsIDIyMywgNCwgMSwgMjE3LCAKLSAgICAxMDUsIDIzMiwgMjIzLCA0LCAxLCAxOTcsIDIzMiwgMjIzLCA0LCAxLCAxOTAsIDIzMiwgMjIzLCA0LCAxLCAxODQsIDIzMiwgCi0gICAgMjIzLCA0LCAxLCAyMDUsIDIzMiwgMjIzLCA0LCAxLCAyMzMsIDEzNSwgMjMyLCAyMjMsIDUsIDIzMCwgODksIDIzMiwgMjIzLCAKLSAgICA1LCAyMzQsIDE3MSwgMjMyLCAyMjMsIDUsIDIyMiwgMzIsIDIzMiwgMjIzLCA1LCAyMzIsIDEyNywgMjMyLCAyMjMsIDI0NSwgCi0gICAgMzEsIDc4LCAyMzIsIDIyMywgMjI0LCAxMywgNzgsIDIzMiwgMjIzLCAyMSwgMjEwLCA4NiwgMjMyLCAyMjMsIDIxLCAxMTAsIAotICAgIDIzMiwgMjIzLCAyMSwgMTA1LCAyMzIsIDIyMywgMjEsIDE1OCwgMjMyLCAyMjMsIDIxLCAxNjEsIDIzMiwgMjIzLCAyMSwgCi0gICAgMTg5LCAyMzIsIDIyMywgMjEsIDE5NCwgMjMyLCAyMjMsIDIxLCAxOTgsIDIzMiwgMjIzLCAyMSwgMTk1LCAyMzIsIDIyMywgCi0gICAgMjEsIDIwMCwgMzksIDIzMywgNTksIDEsIDE3NiwgMzksIDIzMywgNTksIDEsIDIxMSwgMTY1LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMjI5LCA3NywgMzksIDIzMywgNTksIDEsIDIxNSwgMTgzLCAzOSwgMjMzLCA1OSwgMSwgMjA2LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMTkxLCAzOSwgMjMzLCA1OSwgMSwgMjE3LCAxMDUsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDIwOCwgMzksIDIzMywgNTksIDEsIAotICAgIDIzMywgMTM1LCAzOSwgMjMzLCA1OSwgMSwgMTkwLCAzOSwgMjMzLCA1OSwgMSwgMjI1LCAxNDcsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxODQsIDM5LCAyMzMsIDU5LCAxLCAyNDQsIDE5NiwgMzksIDIzMywgNTksIDEsIDIxNCwgMjcsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxNjIsIDM5LCAyMzMsIDU5LCAxLCAyMjQsIDg4LCAzOSwgMjMzLCA1OSwgMSwgMjM0LCAxMzIsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAyMTUsIDE3NSwgMzksIDIzMywgNTksIDEsIDE5NywgMzksIDIzMywgNTksIDEsIDYxLCAzOSwgMjMzLCA1OSwgMSwgNzMsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyNDUsIDIwOSwgMzksIDIzMywgNTksIDEsIDI0NSwgMTk3LCAzOSwgMjMzLCA1OSwgMSwgNzAsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyMjYsIDE4MywgMzksIDIzMywgNTksIDEsIDc2LCAzOSwgMjMzLCA1OSwgMSwgMjE0LCAyMTQsIAotICAgIDM5LCAyMzMsIDU5LCAxLCA3NSwgMzksIDIzMywgNTksIDEsIDI1MywgMTkwLCAzOSwgMjMzLCA1OSwgMSwgMjU0LCAyMDEsIAotICAgIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI4LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNywgMzksIDIzMywgNTksIDEsIDIxNiwgCi0gICAgMjYsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI1LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNCwgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjUsIDIyNCwgODgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjQsIDg4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTc2LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjksIDc3LCAxNjYsIDM5LCAKLSAgICAxNzMsIDEsIDEyMSwgMTc2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKLSAgICAyMjksIDc3LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE1LCAxODMsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMDYsIDE2NiwgCi0gICAgMzksIDE3MywgMSwgMTI1LCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTUsIDE4MywgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjEsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNywgMTA1LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMjE2LCAyMDgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTcsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgMTIxLCAyMTcsIDEwNSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNiwgMjA4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTk3LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI1LCAxNDcsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTI1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjUsIDE0NywgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI0NCwgMTk2LCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyNSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTM1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCi0gICAgMjQ0LCAxOTYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxMzUsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNjIsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyNDgsIDIyMSwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjUsIDI1MiwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ4LCAKLSAgICAyMjEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNTIsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTg0LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxMzgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE4NCwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjEsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE4LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAotICAgIDIxOCwgODIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1LCAyMTksIDIzOSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCA3MywgCi0gICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM2LCAzMywgMTY2LCAzOSwgMTczLCAyNSwgNSwgNzAsIDE2NiwgMzksIDE3MywgMjUsIAotICAgIDUsIDIxNCwgMTE4LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCA3NSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU0LCAyNDMsIDE2NiwgCi0gICAgMzksIDE3MywgMjUsIDUsIDc2LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjcsIDAsIDE2NiwgMzksIDE3MywgMjUsIDUsIAotICAgIDIxNCwgMjE0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTMsIDE2NywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCAyOCwgCi0gICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTEsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNiwgMTA5LCAxNjYsIDM5LCAKLSAgICAxNzMsIDI1LCA1LCAyMjYsIDI1MywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAyMTAsIDE2NiwgMzksIDE3MywgMjUsIDUsIAotICAgIDIzNSwgMTUyLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMTQsIDEwNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjI5LCA3OSwgCi0gICAgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjMwLCAyNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMTkzLCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDQwLCAyMzUsIDIzLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNDksIDYwLCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNTMsIDE1OCwgCi0gICAgMTY2LCAzOSwgMTczLCAxMzgsIDIzMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDEzOCwgMjMxLCAxNTcsIDE2NiwgMzksIDE3MywgCi0gICAgMjEsIDIxMCwgODYsIDE2NiwgMzksIDE3MywgMjEsIDExMCwgMTY2LCAzOSwgMTczLCAyMSwgMTA1LCAxNjYsIDM5LCAxNzMsIAotICAgIDIxLCAxNTgsIDE2NiwgMzksIDE3MywgMjEsIDE2MSwgMTY2LCAzOSwgMTczLCAyMSwgMTg5LCAxNjYsIDM5LCAxNzMsIDIxLCAKLSAgICAxOTQsIDE2NiwgMzksIDE3MywgMjEsIDE5OCwgMTY2LCAzOSwgMTczLCAyMSwgMTk1LCAxNjYsIDM5LCAxNzMsIDIxLCAyMDAsIAotICAgIDE2NiwgMzksIDE3MywgODksIDIxLCAxMTAsIDE2NiwgMzksIDE3MywgNSwgMjMzLCAxMjAsIDE2NiwgMzksIDE3MywgNSwgCi0gICAgMjMzLCAxMTksIDY5LCAxNiwgMjI1LCAyMzYsIDY5LCAxNiwgMjMwLCA3MiwgMjM0LCAyNSwgNjksIDE2LCAyMjUsIDcyLCAKLSAgICAyMzQsIDI1LCA2OSwgMTYsIDI1MiwgNTAsIDIzNCwgMjUsIDY5LCAxNiwgMjUxLCAxMDQsIDIzNCwgMjUsIDY5LCAxNiwgCi0gICAgMjI0LCAyMTYsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMTAsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMDgsIDIzNCwgMjUsIAotICAgIDY5LCAxNiwgMjI0LCAyMTQsIDIzNCwgMjUsIDY5LCAxNiwgMjI0LCAyMTIsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNzMsIAotICAgIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjksIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjgsIDIzNCwgMjUsIDY5LCAxNiwgCi0gICAgMjQ4LCAxNzEsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNzAsIDIzNCwgMjUsIDY5LCAxNiwgMjQ4LCAxNjcsIDIzNCwgMjUsIAotICAgIDY5LCAxNiwgMjE1LCA4NywgNjksIDE2LCAyMzAsIDcyLCAyMjIsIDIwNSwgNjksIDE2LCAyMjUsIDcyLCAyMjIsIDIwNSwgCi0gICAgNjksIDE2LCAyNTIsIDUwLCAyMjIsIDIwNSwgNjksIDE2LCAyNTEsIDEwNCwgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMTYsIAotICAgIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjEwLCAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIwOCwgMjIyLCAyMDUsIDY5LCAxNiwgCi0gICAgMjI0LCAyMTQsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjEyLCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE3MywgMjIyLCAKLSAgICAyMDUsIDY5LCAxNiwgMjQ4LCAxNjksIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTY4LCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIAotICAgIDE3MSwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNzAsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTY3LCAyMjIsIDIwNSwgCi0gICAgMjUxLCAxMjEsIDEsIDE3NiwgMjUxLCAxMjEsIDEsIDI0MywgMTM1LCAyNTEsIDEyMSwgMSwgMjI5LCA3NywgMjUxLCAxMjEsIAotICAgIDEsIDIyOSwgMjIsIDI1MSwgMTIxLCAxLCAxOTAsIDI1MSwgMTIxLCAxLCAyNTIsIDE5MSwgMjUxLCAxMjEsIDEsIDE4NCwgCi0gICAgMjUxLCAxMjEsIDEsIDIzMCwgMTA1LCAyNTEsIDEyMSwgMSwgMjE3LCAxMDUsIDI1MSwgMTIxLCAxLCAyNDgsIDIyMSwgMjUxLCAKLSAgICAxMjEsIDEsIDE5NywgMjUxLCAxMjEsIDEsIDIyOCwgMzYsIDI1MSwgMTIxLCAxLCAyNTEsIDMzLCAyNTEsIDEyMSwgMSwgCi0gICAgMjM1LCAxNDEsIDI1MSwgMTIxLCAxLCAyMjcsIDE2NSwgMjUxLCAxMjEsIDEsIDIyNywgMTU4LCAyNTEsIDEyMSwgMSwgMTkxLCAKLSAgICAyNTEsIDEyMSwgMSwgMjA1LCAyNTEsIDEyMSwgMSwgMjMzLCAxMzUsIDI1MSwgMTIxLCAxLCAyMTQsIDI3LCAyNTEsIDEyMSwgCi0gICAgMSwgMjA2LCAyNTEsIDEyMSwgMSwgNjEsIDI1MSwgMTIxLCAxLCAxNjIsIDI1MSwgMTIxLCAyNSwgNSwgNzMsIDI1MSwgMTIxLCAKLSAgICAyNSwgNSwgNzAsIDI1MSwgMTIxLCAyNSwgNSwgNzUsIDI1MSwgMTIxLCAyNSwgNSwgNzYsIDI1MSwgMTIxLCAyNSwgNSwgCi0gICAgMjU0LCAyNDMsIDI1MSwgMTIxLCAyMjYsIDYwLCAyNTEsIDEyMSwgMjQ1LCAxNDMsIDY0LCAyMjEsIDE3MiwgMzksIDg5LCAxLCAKLSAgICAxMjUsIDE3NiwgMzksIDg5LCAxLCAxMjUsIDIzNCwgMTMyLCAzOSwgODksIDEsIDEyNSwgMjMzLCAxNzEsIDM5LCA4OSwgMSwgCi0gICAgMTIxLCAxNzYsIDM5LCA4OSwgMSwgMTIxLCAyMzMsIDE3MSwgMzksIDg5LCAxLCAxMjEsIDIzNCwgMTMyLCAzOSwgODksIDEsIAotICAgIDIyOSwgNzcsIDM5LCA4OSwgMSwgMTI1LCAyNTEsIDMzLCAzOSwgODksIDEsIDEyNSwgMjUwLCAxNTcsIDM5LCA4OSwgMSwgCi0gICAgMTIxLCAyNTEsIDMzLCAzOSwgODksIDEsIDEyMSwgMjA2LCAzOSwgODksIDEsIDEyMSwgMjUwLCAxNTcsIDM5LCA4OSwgMSwgCi0gICAgMjI3LCAxNjUsIDM5LCA4OSwgMSwgMjIzLCAxNDAsIDM5LCA4OSwgMSwgMTI1LCAyMjMsIDEzOCwgMzksIDg5LCAxLCAyNDgsIAotICAgIDIyMSwgMzksIDg5LCAxLCAxMjEsIDIyMywgMTM4LCAzOSwgODksIDEsIDIyMywgMTQ5LCAzOSwgODksIDEsIDEyNSwgMjE3LCAKLSAgICAxMDUsIDM5LCA4OSwgMSwgMTI1LCAyMTYsIDIwOCwgMzksIDg5LCAxLCAxMjEsIDIxNywgMTA1LCAzOSwgODksIDEsIDEyMSwgCi0gICAgMjE2LCAyMDgsIDM5LCA4OSwgMSwgMTk3LCAzOSwgODksIDEsIDI1MiwgMTkxLCAzOSwgODksIDEsIDEyNSwgMTkwLCAzOSwgCi0gICAgODksIDEsIDEyNSwgMjI1LCAxNDcsIDM5LCA4OSwgMSwgMTI1LCAyNDQsIDE5NiwgMzksIDg5LCAxLCAxMjEsIDE5MCwgMzksIAotICAgIDg5LCAxLCAxMjEsIDI0NCwgMTk2LCAzOSwgODksIDEsIDEyMSwgMjI1LCAxNDcsIDM5LCA4OSwgMSwgMTg0LCAzOSwgODksIAotICAgIDEsIDEyMSwgMTkxLCAzOSwgODksIDEsIDEyNSwgMTkxLCAzOSwgODksIDEsIDIwNSwgMzksIDg5LCAxLCAyMjIsIDEzNywgCi0gICAgMzksIDg5LCAxLCAyMzMsIDEzNSwgMzksIDg5LCAxLCAyMzIsIDkzLCAzOSwgODksIDEsIDIxMiwgNjUsIDM5LCA4OSwgMSwgCi0gICAgMTI1LCAyMjAsIDEwMiwgMzksIDg5LCAxLCAxMjUsIDIxOCwgMjIzLCAzOSwgODksIDEsIDEyNSwgMjA2LCAzOSwgODksIDEsIAotICAgIDEyNSwgMTYyLCAzOSwgODksIDEsIDIzMiwgMTg0LCAzOSwgODksIDEsIDYxLCAzOSwgODksIDEsIDEyMSwgMTYyLCAzOSwgCi0gICAgODksIDEsIDczLCAzOSwgODksIDEsIDIzNiwgMzMsIDM5LCA4OSwgMSwgNzAsIDM5LCA4OSwgMSwgMjE0LCAxMTgsIDM5LCAKLSAgICA4OSwgMSwgMjQ1LCAyMDksIDM5LCA4OSwgMSwgMjI2LCAxODMsIDM5LCA4OSwgMSwgMjMzLCAxMjAsIDM5LCA4OSwgMSwgCi0gICAgMjQyLCAxMzIsIDIwNiwgMzksIDg5LCAxMTYsIDUsIDE0NywgMjA1LCAzOSwgODksIDExNiwgNSwgMTQ3LCAyMzMsIDEzNSwgCi0gICAgMzksIDg5LCAxMTYsIDUsIDIzMywgMTM2LCAyMTcsIDU4LCAyMzMsIDEwOSwgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjM0LCAKLSAgICAyMzEsIDIzMywgMTA5LCAzOSwgODksIDExNiwgNSwgNDAsIDIyOSwgNzcsIDM5LCA4OSwgMTE2LCA1LCAxMjEsIDE5MCwgMzksIAotICAgIDg5LCAxMTYsIDUsIDEyNSwgMjIzLCAxMzksIDE3NywgMTIxLCAxOTAsIDM5LCA4OSwgMTE2LCA1LCAxODQsIDM5LCA4OSwgCi0gICAgMTE2LCA1LCAyNTIsIDE5MSwgMzksIDg5LCAxMTYsIDUsIDIwNiwgMzksIDg5LCA1LCAyMjIsIDEwLCAzOSwgODksIDI1LCA1LCAKLSAgICA2MSwgMzksIDg5LCAyNSwgNSwgMjMxLCAyMDQsIDIyMSwgMjI2LCAzOSwgODksIDI1LCA1LCAyNTUsIDczLCAzOSwgODksIAotICAgIDI1LCA1LCAyMTcsIDY0LCAyNTUsIDczLCAzOSwgODksIDI1LCA1LCA3MywgMzksIDg5LCAyNSwgNSwgMjM2LCAzMywgMzksIAotICAgIDg5LCAyNSwgNSwgMjE0LCAyMTQsIDM5LCA4OSwgMjUsIDUsIDIxNCwgMTE3LCAzOSwgODksIDI1LCA1LCA3MCwgMzksIDg5LCAKLSAgICAyNSwgNSwgMjE0LCAxMTgsIDM5LCA4OSwgMjUsIDUsIDc2LCAzOSwgODksIDI1LCA1LCAyMjcsIDEsIDUxLCAzOSwgODksIAotICAgIDI1LCA1LCAyMjYsIDEwOSwgMzksIDg5LCAyNSwgNSwgNzUsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjQzLCAzOSwgODksIDI1LCAKLSAgICA1LCAyMjYsIDE4MywgMzksIDg5LCAyNSwgNSwgMjU0LCAyMDEsIDM5LCA4OSwgMjUsIDUsIDg5LCAyNTQsIDIwMSwgMzksIAotICAgIDg5LCAyNSwgNSwgMjI3LCAxLCA0OCwgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjM0LCAyMzAsIDM5LCA4OSwgNSwgMjE2LCAyOSwgCi0gICAgMzksIDg5LCA1LCAyMTYsIDI4LCAzOSwgODksIDUsIDIzNCwgOTcsIDIxNiwgMjcsIDM5LCA4OSwgNSwgMjM0LCA5NywgMjE2LCAKLSAgICAyNiwgMzksIDg5LCA1LCAyMzQsIDk3LCAyMTYsIDI1LCAzOSwgODksIDUsIDIyMywgMTg4LCAyNDIsIDQ1LCAzOSwgODksIDUsIAotICAgIDIzMSwgMjA0LCAyMjEsIDI1MywgMzksIDg5LCA1LCAyMzQsIDk2LCAyMzQsIDIxNSwgMzksIDg5LCAzOCwgMjQ5LCAxMTUsIAotICAgIDI0NywgMTIwLCAzOSwgODksIDI0MSwgNDYsIDIxLCAyMTAsIDg2LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxMTAsIDM5LCA4OSwgCi0gICAgMjQxLCA0NiwgMjEsIDEwNSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTU4LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxNjEsIDM5LCAKLSAgICA4OSwgMjQxLCA0NiwgMjEsIDE4OSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTk0LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxOTgsIAotICAgIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE5NSwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMjAwLCAzOSwgODksIDg5LCAyMSwgMjEwLCAKLSAgICA4NiwgMzksIDg5LCA4OSwgMjEsIDExMCwgMzksIDg5LCA4OSwgMjEsIDEwNSwgMzksIDg5LCA4OSwgMjEsIDE1OCwgMzksIAotICAgIDg5LCA4OSwgMjEsIDE2MSwgMzksIDg5LCA4OSwgMjEsIDE4OSwgMzksIDg5LCA4OSwgMjEsIDE5NCwgMzksIDg5LCA4OSwgCi0gICAgMjEsIDE5OCwgMzksIDg5LCA4OSwgMjEsIDE5NSwgMzksIDg5LCA4OSwgMjEsIDIwMCwgMzksIDg5LCA1LCAyMTEsIDI0OSwgCi0gICAgMzksIDg5LCA1LCAyMTEsIDI0OCwgMzksIDg5LCA1LCAyMjEsIDIxNSwgMzksIDg5LCA1LCAyMzQsIDE2MCwgMzksIDg5LCA1LCAKLSAgICAyNDAsIDIzMiwgMzksIDg5LCA1LCAyNDcsIDEzNCwgMzksIDg5LCA1LCAyMjMsIDQ5LCAyMjIsIDE4NywgMjIzLCAxNDksIAotICAgIDM5LCA4OSwgNSwgMjMxLCAyMDQsIDIxMSwgNzIsIDM5LCA4OSwgNSwgMjM1LCA2LCAzOSwgODksIDUsIDIzNSwgNSwgMzksIAotICAgIDg5LCA1LCAyMjEsIDIyMiwgMzksIDg5LCA1LCAyMjEsIDIyMSwgMzksIDg5LCA1LCAyNDIsIDksIDM5LCA4OSwgNSwgMjUxLCAKLSAgICAzMCwgMTAyLCA1LCAyMTQsIDIwMCwgMjIzLCAzMCwgMTAyLCA1LCAyMTQsIDIwMCwgMjUxLCAxLCAxMDIsIDUsIDI1MCwgCi0gICAgMTg2LCAxMDIsIDUsIDIxOCwgMTUsIDEwMiwgNSwgMjUxLCAyMzMsIDEwMiwgMSwgMjU0LCAxODQsIDEwMiwgMSwgMjU0LCAKLSAgICAxODUsIDIxNywgMTMsIDEwMiwgMSwgMjM2LCAyOSwgMTAyLCAxLCAyMzYsIDMwLCAyMTcsIDEzLCAxMDIsIDEsIDIxNCwgCi0gICAgMjAzLCAxMDIsIDEsIDIxNCwgMjA0LCAyMTcsIDEzLCAxMDIsIDEsIDIyMywgMTg4LCAyMjMsIDc5LCAxMDIsIDEsIDIyMywgCi0gICAgMTg4LCAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDEsIDIzMywgMTM2LCAyMzMsIDI0LCAxMDIsIDEsIDIzMywgMTM2LCAyMzMsIAotICAgIDI1LCAyMTcsIDEzLCAxMDIsIDEsIDI0NSwgMTc5LCAxMDIsIDEsIDI1NCwgMTk5LCAxMDIsIDEsIDIyNiwgMjEyLCAxMDIsIAotICAgIDEsIDIyNiwgMjEzLCAyMTcsIDEzLCAxMDIsIDEsIDE3NiwgMTAyLCAxLCAyMzUsIDEzLCAyMzEsIDIwNywgMTAyLCAxLCAKLSAgICAyNDMsIDEzNSwgMTAyLCAxLCAyNDMsIDEzNiwgMjQyLCAxNjEsIDEwMiwgMSwgMjI5LCA3NywgMTAyLCAxLCAyNTEsIDMzLCAKLSAgICAxMDIsIDEsIDI1MSwgMzQsIDIzMywgMTIzLCAxMDIsIDEsIDIzNSwgMTQxLCAxMDIsIDEsIDIzNSwgMTQyLCAyMzUsIDExOCwgCi0gICAgMTAyLCAxLCAyMjcsIDE2NSwgMTAyLCAxLCAyMTcsIDEwNiwgMjMzLCA3NiwgMTAyLCAxLCAyMTcsIDEwNiwgMjMwLCA2NywgCi0gICAgMjMxLCAyMDcsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMCwgNjcsIDI1NCwgMTQ1LCAxMDIsIDEsIDI0OCwgMjIyLCAyMzAsIDY3LCAKLSAgICAyMzEsIDIwNywgMTAyLCAxLCAyMjksIDIyOSwgMjIzLCAxNTIsIDEwMiwgMSwgMjE3LCAxMDUsIDEwMiwgMSwgMjE3LCAxMDYsIAotICAgIDIxNywgMzUsIDEwMiwgMSwgMjQ4LCAyMjEsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMSwgMjI1LCAxMDIsIDEsIDE5NywgMTAyLCAKLSAgICAxLCAxOTAsIDEwMiwgMSwgMjI2LCA5MCwgMjM0LCAyMjYsIDEwMiwgMSwgMjUyLCAxOTEsIDEwMiwgMSwgMjUyLCAxOTIsIAotICAgIDIzNCwgMTcyLCAxMDIsIDEsIDE4NCwgMTAyLCAxLCAxOTEsIDEwMiwgMSwgMjA1LCAxMDIsIDEsIDIzMywgMTM1LCAxMDIsIAotICAgIDEsIDIxMiwgNjUsIDEwMiwgMSwgMjIyLCAzNCwgMjIyLCAyMCwgMTAyLCAxLCAyMjIsIDM0LCAyMjEsIDIzMywgMTAyLCAxLCAKLSAgICAyMDYsIDEwMiwgMSwgMTYyLCAxMDIsIDUsIDIyMywgNzAsIDEwMiwgMjUsIDUsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIxNCwgCi0gICAgMTk5LCAxMDIsIDI1LCA1LCAyMTQsIDIwMCwgMjIxLCAyMjksIDEwMiwgMjUsIDUsIDIxOCwgNDcsIDEwMiwgMjUsIDUsIAotICAgIDIxOCwgNDgsIDIzNiwgMjEsIDEwMiwgMjUsIDUsIDIyMywgMTg4LCAyMjMsIDc5LCAxMDIsIDI1LCA1LCAyMjMsIDE4OCwgCi0gICAgMjIzLCA4MCwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjMzLCAxMzYsIDIzMywgMjQsIDEwMiwgMjUsIDUsIDIzMywgMTM2LCAKLSAgICAyMzMsIDI1LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTcsIDY1LCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAyMjMsIDc5LCAxMDIsIAotICAgIDI1LCA1LCAyMTcsIDY2LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDI1LCAKLSAgICA1LCAyMjUsIDE4NCwgMTAyLCAyNSwgNSwgMjI1LCAxODUsIDIxNywgMTMsIDEwMiwgMjU0LCAyNTAsIDI1NCwgMjQ5LCAxMDIsIAotICAgIDEsIDIzNCwgMjUxLCAyMjEsIDIyOCwgMTAyLCAxLCAyMzQsIDEwMiwgMjIxLCAyMjgsIDEwMiwgMSwgMjE1LCAzNCwgMjIxLCAKLSAgICAyMjgsIDEwMiwgMSwgMjQ1LCAyMDMsIDIyMSwgMjI4LCAxMDIsIDEsIDIxNCwgMCwgMjIxLCAyMjgsIDEwMiwgMSwgMjEwLCAKLSAgICAxMDcsIDIyMSwgMjI4LCAxMDIsIDEsIDI1MywgMjA5LCAyMjEsIDIyOCwgMTAyLCAyMSwgMjEwLCA4NiwgMTAyLCAyMSwgCi0gICAgMTEwLCAxMDIsIDIxLCAxMDUsIDEwMiwgMjEsIDE1OCwgMTAyLCAyMSwgMTYxLCAxMDIsIDIxLCAxODksIDEwMiwgMjEsIAotICAgIDE5NCwgMTAyLCAyMSwgMTk4LCAxMDIsIDIxLCAxOTUsIDEwMiwgMjEsIDIwMCwgMTAyLCAyMjYsIDI5LCAxMDIsIDIyNiwgCi0gICAgNTUsIDEwMiwgMjExLCAyMzgsIDEwMiwgMjUwLCAyMzYsIDIyNiwgNDgsIDEwMiwgMjUwLCAyMzYsIDIxOSwgMTcyLCAxMDIsIAotICAgIDI1MCwgMjM2LCAyMjYsIDIsIDEwMiwgMjI2LCA1NCwgMTAyLCAyOCwgMTYsIDI0NywgMTI2LCAxMDIsIDI4LCAxNiwgMjQ4LCAKLSAgICA1MSwgMTAyLCAyOCwgMTYsIDI0NiwgNjQsIDEwMiwgMjgsIDE2LCAyNDgsIDE3NiwgMTAyLCAyOCwgMTYsIDI0OCwgMTc3LCAKLSAgICAyMTgsIDE1LCAxMDIsIDI4LCAxNiwgMjQ3LCAyMDUsIDEwMiwgMjgsIDE2LCAyNDgsIDIxNCwgMTAyLCAyOCwgMTYsIDI0OCwgCi0gICAgMzMsIDEwMiwgMjgsIDE2LCAyNDgsIDE5OCwgMTAyLCAyOCwgMTYsIDI0OCwgMTc3LCAyNDMsIDU3LCAxMDIsIDI4LCAxNiwgCi0gICAgMzgsIDIxNywgOSwgMTAyLCAyOCwgMTYsIDM4LCAyNDUsIDE0MSwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE2NywgMTAyLCAKLSAgICAyOCwgMTYsIDM4LCAyMzQsIDE2OSwgMTAyLCAyOCwgMTYsIDM4LCAyMzUsIDEyMiwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIAotICAgIDE2OCwgMiwgMjM1LCAxMjIsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzAsIDIsIDIzNSwgMTIyLCAxMDIsIDI4LCAxNiwgCi0gICAgMzgsIDI1MiwgMzcsIDEwMiwgMjgsIDE2LCAzOCwgMjQyLCAxNjUsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjA0LCAyNDYsIAotICAgIDc0LCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDIwNCwgMjQ4LCAyMTIsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjUwLCAwLCAKLSAgICAyMTUsIDExMSwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyNTAsIDAsIDIxNywgNzMsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAKLSAgICAyMDQsIDIyNiwgNDMsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAyMDQsIDIyNCwgMTM5LCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgCi0gICAgMjUwLCAwLCAyMjUsIDM4LCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgMjUwLCAwLCAyMjUsIDI2LCAxMDIsIDI4LCAxNiwgMjMzLCAKLSAgICA0NCwgMjA0LCAyMjUsIDYxLCAyMDcsIDUsIDIyNiwgMjYsIDIwNywgNSwgMjI2LCAzOSwgMjA3LCA1LCAyMjYsIDM1LCAyMDcsIAotICAgIDEsIDYxLCAyMDcsIDEsIDczLCAyMDcsIDEsIDcwLCAyMDcsIDEsIDI1NCwgMjQzLCAyMDcsIDEsIDc2LCAyMDcsIDEsIDc1LCAKLSAgICAyMDcsIDEsIDI0NSwgNTUsIDIwNywgMSwgMTc2LCAyMDcsIDEsIDIyNCwgODgsIDIwNywgMSwgMjQzLCAxMzUsIDIwNywgMSwgCi0gICAgMjI5LCA3NywgMjA3LCAxLCAyNTEsIDMzLCAyMDcsIDEsIDIzNSwgMTQxLCAyMDcsIDEsIDIxMCwgMTE2LCAyMDcsIDEsIAotICAgIDIyNywgMTY1LCAyMDcsIDEsIDIxNywgMTA1LCAyMDcsIDEsIDI0OCwgMjIxLCAyMDcsIDEsIDE5NywgMjA3LCAxLCAxOTAsIAotICAgIDIwNywgMSwgMjQ0LCAxOTYsIDIwNywgMSwgMjE0LCAyNywgMjA3LCAxLCAyNTIsIDE5MSwgMjA3LCAxLCAxODQsIDIwNywgMSwgCi0gICAgMTkxLCAyMDcsIDEsIDIwNSwgMjA3LCAxLCAyMzMsIDEzNSwgMjA3LCAxLCAyMTIsIDY1LCAyMDcsIDEsIDIwNiwgMjA3LCAxLCAKLSAgICAyMTEsIDE2NSwgMjA3LCAxLCAxNjIsIDIwNywgMTE2LCA1LCAyMjYsIDUyLCAyMDcsIDExNiwgNSwgMjI2LCAyOCwgMjA3LCAKLSAgICAxMTYsIDUsIDIyNiwgMjUsIDIwNywgMjUsIDUsIDIyNiwgNDIsIDIwNywgMjUsIDUsIDIyNiwgMjQsIDIwNywgMjUsIDUsIAotICAgIDIyNiwgNDYsIDIwNywgMjUsIDUsIDIyNiwgMzQsIDIwNywgMjUsIDUsIDIyNiwgNTMsIDIwNywgMjUsIDUsIDIyNiwgNDQsIAotICAgIDIwNywgNSwgMjI2LCA1NiwgMjA3LCA1LCAyMTMsIDE1MiwgMjA3LCAxMTYsIDUsIDIyNSwgMjQ4LCAxODQsIDIwNywgMTE2LCAKLSAgICA1LCAyMjUsIDI0OCwgMjEyLCA2NSwgMjA3LCAxLCAyMzQsIDEzMiwgMjA3LCAxLCAyMTcsIDIzMSwgMjA3LCAyMSwgMjEwLCAKLSAgICA4NiwgMjA3LCAyMSwgMTEwLCAyMDcsIDIxLCAxMDUsIDIwNywgMjEsIDE1OCwgMjA3LCAyMSwgMTYxLCAyMDcsIDIxLCAxODksIAotICAgIDIwNywgMjEsIDE5NCwgMjA3LCAyMSwgMTk4LCAyMDcsIDIxLCAxOTUsIDIwNywgMjEsIDIwMCwgMjA3LCAyNTMsIDE3NSwgCi0gICAgMjA3LCAxLCAyMjMsIDUyLCAyMDcsIDEsIDIzMywgNywgMjA3LCAxLCAyNTIsIDE4LCAyMDcsIDEsIDQwLCAyMzUsIDIzLCAKLSAgICAyMDcsIDEsIDQwLCAxOTMsIDI1MiwgMTIwLCAxLCA2MSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCA2MSwgMjUyLCAxMjAsIDEsIAotICAgIDE2MiwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAxNjIsIDI1MiwgMTIwLCAxLCAyMzEsIDE4MSwgMTYyLCAyNTIsIDEyMCwgMSwgCi0gICAgMjUyLCAxOTEsIDI1MiwgMTIwLCAxLCAyMzQsIDIxMiwgMjUyLCAxOTEsIDI1MiwgMTIwLCAxLCAxOTAsIDI1MiwgMTIwLCAxLCAKLSAgICAyMTksIDE2NCwgMTkwLCAyNTIsIDEyMCwgMSwgMTk3LCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDE5NywgMjUyLCAxMjAsIDEsIAotICAgIDIxMiwgNjUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjEyLCA2NSwgMjUyLCAxMjAsIDEsIDIyNiwgNjcsIDIxMiwgNjUsIAotICAgIDI1MiwgMTIwLCAxLCAyNDMsIDEzNSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAyNDMsIDEzNSwgMjUyLCAxMjAsIDEsIDIzNSwgCi0gICAgMTQxLCAyNTIsIDEyMCwgMSwgMjQ4LCAyMjEsIDI1MiwgMTIwLCAxLCAyMDUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjA1LCAKLSAgICAyNTIsIDEyMCwgMSwgMTg0LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDE4NCwgMjUyLCAxMjAsIDEsIDIxOSwgMjYsIDIxNywgCi0gICAgMTA1LCAyNTIsIDEyMCwgMSwgMjI4LCA1NSwgMjE3LCAxMDUsIDI1MiwgMTIwLCAxLCAyMDYsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMjA2LCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDIwNiwgMjUyLCAxMjAsIDEsIDE5MSwgMjUyLCAxMjAsIDEsIDIxOSwgCi0gICAgMTY0LCAxOTEsIDI1MiwgMTIwLCAxLCAyMjksIDc3LCAyNTIsIDEyMCwgMSwgMjMzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMjMzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMjcsIDE2NSwgMjUyLCAxMjAsIDEsIDI1MSwgMzMsIDI1MiwgMTIwLCAxLCAKLSAgICAyMjksIDE0OCwgMjUyLCAxMjAsIDEsIDIzMSwgMTI0LCAyNTIsIDEyMCwgMSwgNzMsIDI1MiwgMTIwLCAxLCA3MCwgMjUyLCAKLSAgICAxMjAsIDUsIDIxNiwgMzMsIDI1MiwgMTIwLCAyNSwgNSwgNzUsIDI1MiwgMTIwLCAyNSwgNSwgMjI2LCA2NywgNzUsIDI1MiwgCi0gICAgMTIwLCAyNSwgNSwgMjQ1LCAyMDksIDI1MiwgMTIwLCAyNSwgNSwgNzMsIDI1MiwgMTIwLCAyNSwgNSwgMjM0LCAyMTIsIDczLCAKLSAgICAyNTIsIDEyMCwgMjUsIDUsIDc2LCAyNTIsIDEyMCwgMjUsIDUsIDIzNCwgMjEyLCA3NiwgMjUyLCAxMjAsIDI1LCA1LCA3MCwgCi0gICAgMjUyLCAxMjAsIDI1LCA1LCAxMDQsIDMxLCAyMTksIDE2NCwgMjA2LCAyNTIsIDEyMCwgMTE2LCA1LCAyMjksIDc5LCAyNTIsIAotICAgIDEyMCwgMTE2LCA1LCAyNDIsIDYwLCAyNTIsIDEyMCwgMjI2LCAzNywgMjUyLCAxMjAsIDIyNiwgMzMsIDI1MiwgMTIwLCAxNiwgCi0gICAgMjUxLCAyNDEsIDIyOSwgMjI5LCAyMzEsIDM3LCAyNTIsIDEyMCwgMTYsIDI1MSwgMjQxLCAyMjUsIDY0LCAyNTIsIDEyMCwgCi0gICAgMTYsIDI1MSwgMjQxLCAyMzUsIDQ4LCAyNTIsIDEyMCwgMTYsIDI1MSwgMjQxLCAyMjYsIDM3LCAxOTYsIDEsIDE3NiwgMTk2LCAKLSAgICAxLCAyMzQsIDM5LCAxOTYsIDEsIDIzNCwgMTMyLCAxOTYsIDEsIDI0MywgMTM1LCAxOTYsIDEsIDI0MiwgMTg2LCAxOTYsIDEsIAotICAgIDIyOSwgNzcsIDE5NiwgMSwgMjUxLCAzMywgMTk2LCAxLCAyNTAsIDE1NywgMTk2LCAxLCAyMzUsIDE0MSwgMTk2LCAxLCAKLSAgICAyMjcsIDE2NSwgMTk2LCAxLCAyMTcsIDEwNSwgMTk2LCAxLCAyMTYsIDIwOCwgMTk2LCAxLCAyNDgsIDIyMSwgMTk2LCAxLCAKLSAgICAxOTcsIDE5NiwgMSwgMTkwLCAxOTYsIDEsIDIyNSwgNDIsIDE5NiwgMSwgMjI1LCAxNDcsIDE5NiwgMSwgMjQ0LCAxOTYsIAotICAgIDE5NiwgMSwgMjQ0LCA3NSwgMTk2LCAxLCAyNTIsIDE5MSwgMTk2LCAxLCAyNTEsIDIyMiwgMTk2LCAxLCAxODQsIDE5NiwgMSwgCi0gICAgMjMwLCAxNjgsIDE5NiwgMSwgMjE1LCAxODMsIDE5NiwgMSwgMjE1LCAxNzUsIDE5NiwgMSwgMjQ2LCAzOCwgMTk2LCAxLCAKLSAgICAxOTEsIDE5NiwgMSwgMjA1LCAxOTYsIDEsIDIzMywgMTM1LCAxOTYsIDEsIDE2MiwgMTk2LCAxLCAyNDEsIDE1MywgMTk2LCAKLSAgICAxLCAyMTQsIDI3LCAxOTYsIDEsIDIwNiwgMTk2LCAxLCAyMjAsIDEwMiwgMTk2LCAxLCAyMTIsIDY1LCAxOTYsIDEsIDYxLCAKLSAgICAxOTYsIDIxOCwgNzMsIDEsIDE5MSwgMTk2LCAyMTgsIDczLCAxLCAyMDUsIDE5NiwgMjUsIDUsIDI1NSwgNzMsIDE5NiwgMjUsIAotICAgIDUsIDczLCAxOTYsIDI1LCA1LCA3NiwgMTk2LCAyNSwgNSwgMjI2LCAxODMsIDE5NiwgMjUsIDUsIDcwLCAxOTYsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMTk2LCAyNSwgNSwgNzUsIDE5NiwgMTE2LCA1LCAyMzUsIDIzLCAxOTYsIDExNiwgNSwgMTkzLCAxOTYsIAotICAgIDExNiwgNSwgMTU2LCAxOTYsIDExNiwgNSwgMjMwLCAyNSwgMTk2LCAxMTYsIDUsIDIyNiwgMTA1LCAxOTYsIDExNiwgNSwgCi0gICAgMTUzLCAxOTYsIDExNiwgNSwgMjE3LCAxNTIsIDE5NiwgMTE2LCA1LCAyMjcsIDE0MiwgMTk2LCAxMTYsIDUsIDIzNCwgMjMwLCAKLSAgICAxOTYsIDUsIDIyMywgMTUwLCAxOTYsIDUsIDIyNywgMjA1LCAxOTYsIDIyNCwgMTQxLCAyMTcsIDEwMywgMTk2LCAyMjQsIAotICAgIDE0MSwgMjI3LCAxNTIsIDIxNiwgMTIwLCAyMTcsIDEwMywgMTk2LCAyMjQsIDE0MSwgMjUwLCAxNjQsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDIxNSwgMTcwLCAyNTAsIDE2NCwgMTk2LCAyMjQsIDE0MSwgMjE1LCAxNjksIDE5NiwgMjEsIDIxMCwgODYsIDE5NiwgCi0gICAgMjEsIDExMCwgMTk2LCAyMSwgMTA1LCAxOTYsIDIxLCAxNTgsIDE5NiwgMjEsIDE2MSwgMTk2LCAyMSwgMTg5LCAxOTYsIDIxLCAKLSAgICAxOTQsIDE5NiwgMjEsIDE5OCwgMTk2LCAyMSwgMTk1LCAxOTYsIDIxLCAyMDAsIDE5NiwgMSwgMjE1LCAxNTYsIDE5NiwgMSwgCi0gICAgMjE1LCAxNDQsIDE5NiwgMSwgMjQ4LCAxMzUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDIxMCwgODYsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMjEsIDExMCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTA1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAKLSAgICAxNTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE2MSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTg5LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDIxLCAxOTQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE5OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgCi0gICAgMTk1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAyMDAsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMzLCAxMzUsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMSwgMjUzLCAyMDYsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU0LCAyMTYsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMSwgMjU0LCAxMTUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU0LCAxNzgsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjMzLCAxMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAzNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAKLSAgICAyNTUsIDM2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NSwgMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAyOSwgCi0gICAgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzIsIDI0MSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzUsIDE3MSwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAxLCAyMzYsIDM0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzNSwgMTkwLCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDIzNSwgMTc5LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgOTgsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjE0LCAyMjEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjE0LCAyMTksIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgCi0gICAgMjE0LCAxNjgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjE0LCAxMTEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMzLCAKLSAgICA1OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDEwOCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDIxMiwgCi0gICAgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDE1MCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNDUsIDg2LCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgMTU2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIyNiwgMTM3LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDIyNiwgMjUyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIyNiwgMTI1LCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDEsIDIyNiwgMjIyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIzMCwgMTAzLCAyMTUsIDEyMSwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAyNDMsIDEzMCwgMjE1LCAxMjIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjMwLCAxMDEsIDIxNSwgMTIyLCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDIyMywgOTIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI1LCAxNDUsIDIyNiwgMjEwLCAyNTAsIDEwMywgCi0gICAgMjU0LCAyMDgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI0LCAxNDEsIDIzMCwgOTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjI0LCAKLSAgICAxNDEsIDUyLCAyMzAsIDk4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjE4LCA4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIAotICAgIDI0MSwgMjI2LCAzOCwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIyNCwgMTI5LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgCi0gICAgMjUxLCAxOSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIzMywgOCwgMjIxLCAyMjUsIDIwNywgMjI0LCAxNDEsIDI1MSwgCi0gICAgMjQxLCAyMzUsIDEzLCAyMjEsIDIyNSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDI0OCwgMjIyLCAyMjEsIDIyNSwgMjA3LCAKLSAgICAyMjQsIDE0MSwgMjUxLCAyNDEsIDI1MiwgMTkyLCAyMjEsIDIyNSwgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMTAsIDIxMywgCi0gICAgMjUyLCAxMzgsIDIyMCwgNzcsIDIxMywgMjUyLCAxMzgsIDIyNCwgMTk4LCAyMTMsIDI1MiwgNSwgMjI4LCAyMDksIDIxMywgCi0gICAgMjUyLCA1LCAyMTEsIDgwLCAyMzAsIDIyMiwgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyNTQsIDIxMywgMjM1LCAKLSAgICAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgCi0gICAgMjExLCA4MCwgMjM0LCAxOTgsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDI1MSwgMiwgNTEsIDIxMywgMjUyLCAKLSAgICAxMzgsIDIxMSwgODAsIDIzNCwgMTk4LCAyMzUsIDI0MywgMjE4LCAxLCAyMjEsIDE5NywgMjEzLCAyNTIsIDEzOCwgNTIsIAotICAgIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjE1LCAyMTEsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjM0LCAxOTgsIDI1NCwgCi0gICAgNzcsIDIxMywgMjUyLCAxMzgsIDU5LCA1MSwgMjEzLCAyNTIsIDEzOCwgMTEzLCAxNzAsIDUxLCAyMTMsIDI1MiwgMTM4LCAKLSAgICAxMzQsIDE3MCwgNTEsIDIxMywgMjUyLCAxMzgsIDIyMiwgMjQwLCAyMzQsIDIwOSwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAKLSAgICAyNTIsIDEzOCwgMjUzLCAyMDQsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjE4LCAwLCAyMTMsIAotICAgIDI1MiwgNSwgMjEzLCAxNDgsIDIxNCwgMjE2LCAyMTMsIDI1MiwgNSwgMjIzLCA0OSwgMjEzLCAxNDgsIDIxNCwgMjE2LCAKLSAgICAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDI1NCwgNzcsIDIxMywgMjUyLCA1LCAyMjMsIDQ5LCAyMTMsIDE0OCwgMjU0LCA3NywgCi0gICAgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyMTQsIDIxNywgMiwgMjE3LCA3NywgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyNTQsIAotICAgIDc4LCAyLCAyMTcsIDc3LCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjU0LCA5MSwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDI1MiwgCi0gICAgMTY2LCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjE0LCAyMCwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDIxNCwgMjEsIDIsIAotICAgIDIxNywgNzcsIDIxMywgMjUyLCA1LCAyMTYsIDY4LCAyMTMsIDI1MiwgNSwgMjQxLCAxOTEsIDE5OSwgMjU0LCA3NSwgMjEzLCAKLSAgICAyNTIsIDUsIDE5OSwgMjU0LCA3NSwgMjEzLCAyNTIsIDUsIDIyMiwgMTQyLCAxOTksIDI1NCwgNzUsIDIxMywgMjUyLCA1LCAKLSAgICAyNTQsIDc2LCAyMTQsIDIyMywgMjMwLCA5MCwgMjEzLCAyNTIsIDUsIDI1NCwgMjAsIDIxMywgMjUyLCA1LCAyMjIsIDE4NywgCi0gICAgMjU0LCAyMCwgMjEzLCAyNTIsIDEzOCwgMjUxLCAyLCA0OCwgMjEzLCAyNTIsIDUsIDIzNSwgMTAyLCAyMTMsIDI1MiwgNSwgCi0gICAgMjE0LCAxNjEsIDcsIDEsIDQsIDYsIDYxLCA3LCAxLCA0LCA2LCAyNTQsIDI0MywgNywgNCwgMSwgMjE1LCA5NCwgMjU0LCAKLSAgICAyNDMsIDcsIDEsIDQsIDYsIDI1MiwgMTM0LCAyNTMsIDE1OCwgNywgMSwgNCwgNiwgMjUxLCA2NiwgNywgMSwgNCwgNiwgCi0gICAgMjQ5LCA2MCwgNywgMSwgNCwgNiwgMjQ1LCA1OSwgNywgMSwgNCwgNiwgNzUsIDcsIDQsIDEsIDIxNSwgOTQsIDIwNCwgNzUsIAotICAgIDcsIDQsIDEsIDIxNSwgOTQsIDczLCA3LCAxLCA0LCA2LCAyMzUsIDE0NCwgNywgMSwgNCwgNiwgMjM1LCAyMywgNywgMSwgNCwgCi0gICAgNiwgMjMzLCAxNDksIDIsIDkxLCA3LCAxLCA0LCA2LCAxOTMsIDcsIDEsIDQsIDYsIDIyMywgNDksIDIzMCwgMjUsIDcsIDEsIAotICAgIDQsIDYsIDc2LCA3LCAxLCA0LCA2LCAyMDQsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgNzYsIDcsIDQsIDEsIDIxOSwgMTg3LCAKLSAgICAyMDQsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMjE1LCA5NCwgMjI2LCAyMzQsIDcsIDEsIAotICAgIDQsIDYsIDIyNiwgMTM0LCA3LCA0LCAxLCAyMTYsIDE0LCAxNjMsIDc2LCA3LCA0LCAxLCAyNTEsIDE3NSwgMTYzLCA3NiwgNywgCi0gICAgMSwgNCwgNiwgMjI2LCAxMDUsIDcsIDEsIDQsIDYsIDIyMywgNDksIDE1MywgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTUzLCA3LCAKLSAgICAxLCA0LCA2LCAyMTcsIDE1MiwgNywgMSwgNCwgNiwgNzAsIDcsIDQsIDEsIDIxOSwgMTg3LCA3MCwgNywgNCwgMSwgMjE5LCAKLSAgICAxODcsIDI0OCwgMCwgNzAsIDcsIDQsIDEsIDIxOSwgMTg3LCAyMTUsIDk0LCAxOTMsIDcsIDEsIDQsIDYsIDIxNCwgMTA1LCAKLSAgICA3LCAxLCA0LCA2LCAyMTIsIDk4LCA3LCAxLCA0LCA2LCAyMTAsIDE1OSwgNywgMSwgNCwgNiwgMjQ1LCA4LCA3LCAxLCAyMTMsIAotICAgIDEzNSwgMjMzLCA4MiwgMjE4LCAyNTAsIDcsIDEsIDI1NCwgMTk2LCAyNiwgMSwgNCwgNiwgMjQzLCAxMDcsIDI2LCAxLCA0LCAKLSAgICA2LCAyMzMsIDk4LCAyNiwgMSwgNCwgNiwgMjI1LCAxMDgsIDI2LCAxLCA0LCA2LCAyMjMsIDM3LCAyNiwgMSwgNCwgNiwgCi0gICAgMjI0LCAxNjEsIDMzLCAxLCA0LCA2LCAyNDUsIDE3NCwgNTgsIDEsIDYsIDYxLCA1OCwgMSwgNiwgMjU0LCAyNDMsIDU4LCAxLCAKLSAgICA2LCAyNTMsIDE1OCwgNTgsIDEsIDYsIDI1MiwgMTM0LCAyNTMsIDE1OCwgNTgsIDEsIDYsIDI0OSwgNjAsIDU4LCAxLCA2LCAKLSAgICA3NSwgNTgsIDEsIDYsIDIyMywgNDksIDc1LCA1OCwgMSwgNiwgMjQzLCAyMDIsIDU4LCAxLCA2LCAyNDIsIDYwLCA1OCwgMSwgCi0gICAgNiwgNzMsIDU4LCAxLCA2LCAyMzUsIDE0NCwgNTgsIDEsIDYsIDIzNSwgMjMsIDU4LCAxLCA2LCAxNTYsIDU4LCAxLCA2LCAKLSAgICAxOTMsIDU4LCAxLCA2LCAyMzAsIDI1LCA1OCwgMSwgNiwgMjIzLCA0OSwgMjMwLCAyNSwgNTgsIDEsIDYsIDc2LCA1OCwgMSwgCi0gICAgNiwgMjI2LCAxMzQsIDU4LCAxLCA2LCAyMjYsIDEwNSwgNTgsIDEsIDYsIDE1MywgNTgsIDEsIDYsIDIxNywgMTUyLCA1OCwgCi0gICAgMSwgNiwgNzAsIDU4LCAxLCA2LCAyMTIsIDk4LCA1OCwgMSwgNCwgNjEsIDU4LCAxLCA0LCAyMTUsIDk0LCA2MSwgNTgsIDEsIAotICAgIDQsIDI1NCwgMTQzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjU0LCAyNDMsIDU4LCAxLCA0LCAyNTMsIDE1OCwgNTgsIDEsIDQsIAotICAgIDI0OSwgNjAsIDU4LCAxLCA0LCA3NSwgNTgsIDEsIDQsIDIyMSwgMTk1LCA1OCwgMSwgNCwgMjA0LCA3NSwgNTgsIDEsIDQsIAotICAgIDIxNSwgOTQsIDIwNCwgNzUsIDU4LCAxLCA0LCAyNDMsIDIwMiwgNTgsIDEsIDQsIDIxNSwgOTQsIDczLCA1OCwgMSwgNCwgCi0gICAgMjM1LCAyMywgNTgsIDEsIDQsIDE5MywgNTgsIDEsIDQsIDI0NSwgMTM4LCA1OCwgMSwgNCwgNzYsIDU4LCAxLCA0LCAyMDQsIAotICAgIDc2LCA1OCwgMSwgNCwgMjE2LCAxNCwgMTYzLCA3NiwgNTgsIDEsIDQsIDI1MSwgMTc1LCAxNjMsIDc2LCA1OCwgMSwgNCwgCi0gICAgMjI2LCAxMDUsIDU4LCAxLCA0LCAyMTcsIDE1MiwgNTgsIDEsIDQsIDcwLCA1OCwgMSwgNCwgMjE5LCAxODcsIDcwLCA1OCwgCi0gICAgMSwgNCwgMjE1LCA5NCwgMTkzLCA1OCwgMSwgNCwgMjE0LCAxMDUsIDU4LCAxLCA0LCAyNTQsIDE5NiwgNTgsIDEsIDQsIAotICAgIDI1MiwgMjYsIDU4LCAxLCA0LCAyNiwgMjQzLCAxMDcsIDU4LCAxLCA0LCAyNDgsIDU0LCA1OCwgMSwgNCwgMjYsIDIyNSwgCi0gICAgMTMzLCA1OCwgMSwgNCwgMjUwLCAxMTAsIDcsIDIxOCwgNjUsIDQsIDEsIDczLCA3LCAyMTgsIDY1LCA0LCAxLCAxNTMsIDcsIAotICAgIDIxOCwgNjUsIDQsIDEsIDcwLCA3LCAyMTgsIDY1LCA0LCAxLCAyMTQsIDEwNSwgMjYsIDIxOCwgNjUsIDQsIDEsIDI1MiwgCi0gICAgMjYsIDI2LCAyMTgsIDY1LCA0LCAxLCAyNDMsIDEwNywgMjYsIDIxOCwgNjUsIDQsIDEsIDIyMywgMzcsIDI2LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMjUsIDEzMywgMjYsIDIxOCwgNjUsIDQsIDEsIDI1MCwgMTEwLCA3LCA0LCAxLCAyMTQsIDIxNCwgNywgNCwgMSwgCi0gICAgNTcsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDI0NSwgCi0gICAgNywgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMyLCA1MCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMwLCAKLSAgICAyNiwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjQ0LCA4OCwgMjIsIDIzMCwgMjI0LCAxODIsIAotICAgIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyMzAsIDIyNCwgMTgyLCAKLSAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjE1LCA5NCwgMjQzLCAyMDIsIDU4LCAxLCAKLSAgICAzMywgMjQ1LCAxNTAsIDcsIDQsIDEsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNCwgMSwgMjE2LCAyMTEsIDIsIDIxOCwgCi0gICAgMTA3LCA3LCA0LCA2LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTg2LCAyLCA5MSwgNywgNCwgMSwgMjI2LCAKLSAgICAxMDYsIDIsIDkxLCA3LCA0LCA2LCAxLCAxMDQsIDIsIDkxLCA3LCA0LCAxLCAyMTQsIDE1OCwgMiwgOTEsIDcsIDQsIDEsIAotICAgIDU3LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ1LCA3LCAKLSAgICAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMyLCA1MCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ1LCA3NiwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAxMTUsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjU0LCAxNDQsIDIsIDIyMywgCi0gICAgNTUsIDEwMywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjQxLCA1MiwgMjIsIDIxNywgNzcsIDcsIDQsIDEsIDE2MCwgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA0LCAxLCAyMDQsIDE2MCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMjMsIDQ5LCAyMDQsIDE2MCwgCi0gICAgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDAsIDE1NCwgCi0gICAgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMDQsIDE0NCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDUsIDc2LCAyLCAKLSAgICAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDEwNCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNDUsIDksIDIsIDIyMywgNTUsIAotICAgIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMTQzLCA1OCwgMSwgNCwgMjUxLCA2NiwgNTgsIDEsIDQsIDI1MSwgNjcsIAotICAgIDIsIDI0OSwgMTAwLCA1OCwgMSwgNCwgMjQ1LCA1OSwgNTgsIDEsIDQsIDIyMywgNDksIDIwNCwgNzUsIDU4LCAxLCA0LCAKLSAgICAyNDUsIDYsIDU4LCAxLCA0LCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDkxLCA1OCwgMSwgNCwgMTE5LCAyNDMsIDIwMiwgNTgsIAotICAgIDEsIDQsIDIxNSwgOTQsIDI0MiwgNjAsIDU4LCAxLCA0LCAyNDAsIDE1NCwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE4NSwgCi0gICAgNTgsIDEsIDQsIDYsIDczLCA1OCwgMSwgNCwgNiwgMjQwLCAxNTQsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxNDUsIDIsIAotICAgIDI0OSwgMTI3LCA1OCwgMSwgNCwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDEwMywgNTgsIDEsIDQsIDIzMywgMTQ5LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDU4LCAxLCA0LCA2LCAxNTYsIDU4LCAxLCA0LCAyMzIsIDUwLCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIAotICAgIDk0LCAyMzIsIDUwLCAyLCAxOTksIDIzMywgMzYsIDU4LCAxLCA0LCAyMzAsIDI2LCAyLCA0MywgMTAzLCA1OCwgMSwgNCwgCi0gICAgMjMwLCAyNiwgMiwgMjIzLCA1NSwgMTAzLCA1OCwgMSwgNCwgNiwgMjMwLCAyNSwgNTgsIDEsIDQsIDI1MiwgMTM0LCA3NiwgCi0gICAgNTgsIDEsIDQsIDIyNSwgMTMzLCA1OCwgMSwgNCwgMjIyLCA5MiwgMiwgMTAzLCA1OCwgMSwgNCwgMjQ1LCA3NSwgNTgsIDEsIAotICAgIDQsIDIxNywgMTUzLCAyLCAyMjYsIDY2LCAxMDMsIDU4LCAxLCA0LCAxMDQsIDEzMCwgNTgsIDEsIDQsIDIxNCwgMTU3LCA1OCwgCi0gICAgMSwgNCwgNiwgNzAsIDU4LCAxLCA0LCAyMTQsIDEwNiwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjE0LCAxMDUsIDU4LCAKLSAgICAxLCA0LCAyMTAsIDE1OSwgNTgsIDEsIDQsIDIxMCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDU4LCAxLCA0LCAyMTAsIDE2MCwgCi0gICAgMiwgMjQ5LCAxMDAsIDU4LCAxLCA0LCAyNDUsIDgsIDU4LCAxLCA0LCAyMTYsIDE3OSwgMzgsIDI0NiwgMTE4LCAyNDIsIAotICAgIDEzNywgMjU1LCAxNCwgMzgsIDI0NiwgMTE4LCAyNTUsIDMsIDI1NSwgMTQsIDM4LCAyMTksIDY5LCA1MSwgMzgsIDIxOCwgNiwgCi0gICAgNzgsIDM4LCAyMzEsIDIzMSwgMzgsIDI0MiwgMTM0LCAzOCwgMjMxLCAyMjksIDM4LCAyNTUsIDEsIDM4LCAyNDIsIDEzNSwgCi0gICAgMzgsIDI1NSwgMiwgMzgsIDcsIDQsIDEsIDIyMywgMjI0LCA1MSwgMzgsIDI1MSwgMTQ1LCAzOCwgMjMxLCAyMzAsIDM4LCAKLSAgICA1MiwgMjUwLCAzMSwgNDgsIDM4LCAyMjYsIDIyNSwgNDgsIDM4LCAyMTAsIDM1LCA1MSwgMzgsIDIzNSwgMTcyLCA1MSwgMzgsIAotICAgIDIxNCwgMTUxLCA0OCwgMzgsIDIxNCwgMTM0LCA0OCwgMzgsIDcsIDQsIDEsIDI0NCwgNjMsIDIwNCwgMTE1LCA0OCwgMzgsIAotICAgIDcsIDQsIDEsIDI1NCwgMjQzLCAzOCwgNywgNCwgMSwgMjU0LCA3MywgMzgsIDcsIDQsIDEsIDI1MywgMTc2LCAzOCwgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMjUwLCAxODMsIDM4LCA3LCA0LCAxLCAyMzUsIDIxMywgMjQ5LCA2MCwgMzgsIDcsIDQsIDEsIDI0NSwgCi0gICAgNTksIDM4LCA3LCA0LCAxLCAyNDMsIDIwMiwgMzgsIDcsIDEsIDQsIDYsIDI0MywgMjAyLCAzOCwgNywgNCwgMSwgMjM1LCAKLSAgICAyMywgMzgsIDcsIDQsIDEsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE5MywgMzgsIDcsIDQsIAotICAgIDEsIDIzMCwgMjUsIDM4LCA3LCAxLCA0LCA2LCAyMzAsIDI1LCAzOCwgNywgMSwgNCwgNiwgMTUzLCAzOCwgNywgNCwgMSwgCi0gICAgMjIzLCAyMjQsIDIyMiwgMTg2LCAzOCwgNywgNCwgMSwgMjIyLCA5MSwgMzgsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MSwgMzgsIAotICAgIDcsIDQsIDEsIDIxMCwgMTU5LCAzOCwgNTIsIDIzNSwgMTkzLCAyNTEsIDE0NywgNTEsIDM4LCAyNTQsIDE0OCwgMTI4LCAKLSAgICAyMTYsIDQyLCA1MSwgMzgsIDQzLCAyNTMsIDI1MCwgNDgsIDM4LCA0NCwgMjUzLCAyNTAsIDIyLCAxMjQsIDI1MywgMjUwLCAKLSAgICA1MSwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDUxLCA3LCA2LCAKLSAgICAxLCA1NywgMiwgNTksIDQ4LCA3LCA0LCAxLCA1NywgMiwgNTksIDQ4LCA3LCA2LCAxLCA1NywgMiwgNTksIDUxLCA3LCA0LCAKLSAgICAxLCA1NywgMiwgNTksIDUxLCA3LCA2LCAxLCA1NywgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCA1NywgMiwgMjMyLCAyMTQsIAotICAgIDUxLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDE4NCwgMjIsIDE0MiwgNywgNCwgMSwgMjUxLCA2NywgMiwgMjUwLCAKLSAgICAxODQsIDIyLCAxNDIsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgNTksIDQ4LCAKLSAgICA3LCA2LCAxLCAyNDksIDYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDI0OSwgNjEsIAotICAgIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAzMSwgCi0gICAgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAKLSAgICAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzMywgCi0gICAgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAKLSAgICA1MSwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE4NCwgMjIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMTg0LCAyMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDI0NSwgNywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDUsIAotICAgIDcsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQyLCA2MSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAKLSAgICAyNDIsIDYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgCi0gICAgMjQ4LCAxLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyNDgsIDEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMTgzLCA3LCA0LCAKLSAgICAxLCAyNDIsIDYxLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUxLCAxNDcsIDUxLCA3LCA0LCAxLCAyNDIsIAotICAgIDYxLCAyLCAyNTEsIDE0NywgNTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDIxNiwgODksIDUxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAxNDIsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIAotICAgIDE0MiwgNywgNiwgMSwgMjM1LCAyNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIAotICAgIDIzNSwgMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAyMzMsIDE0OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgCi0gICAgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMzIsIDIxNCwgCi0gICAgNTEsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMzEsIDUxLCAKLSAgICA3LCA2LCAxLCAyMzIsIDUwLCAyLCAxNDIsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIDE0MiwgNywgNiwgMSwgMjMyLCA1MCwgMiwgCi0gICAgNTksIDQ4LCA3LCA0LCAxLCAyMzIsIDUwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDU5LCA1MSwgNywgNCwgCi0gICAgMSwgMjMyLCA1MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIAotICAgIDU5LCA0OCwgNywgNiwgMSwgMjMwLCAyNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCA1OSwgNTEsIDcsIDYsIAotICAgIDEsIDIzMCwgMjYsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAyMzAsIDI2LCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDE0NCwgCi0gICAgMiwgMjE2LCA4OSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDIxNiwgODksIDIyLCAyNDgsIDEsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDI0OCwgMSwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDYsIAotICAgIDEsIDIyNiwgMTA2LCAyLCAxNDIsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAxNDIsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCA1OSwgCi0gICAgNDgsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAKLSAgICA1OSwgNTEsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA1OSwgMjUyLCA0MywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgCi0gICAgNCwgMSwgMjIzLCAyMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAKLSAgICAyMjIsIDkyLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgNTksIAotICAgIDUxLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTUsIDMsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI1NSwgMywgCi0gICAgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAyMzUsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTIsIAotICAgIDIsIDI1MCwgMjM1LCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA1OSwgMjUyLCA0MywgMjIsIDU5LCA0OCwgNywgCi0gICAgNCwgMSwgMjIyLCA5MiwgMiwgNTksIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA1OSwgNDgsIAotICAgIDcsIDQsIDEsIDIxNywgMTUzLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUzLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIAotICAgIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCA1MSwgNywgCi0gICAgNiwgMSwgMTA0LCAyLCAyMTYsIDg5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNTAsIDMxLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDg5LCAyMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgODksIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAKLSAgICAyNDgsIDEsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAyNDgsIDEsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAxODIsIAotICAgIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxODIsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNCwgCi0gICAgMTA2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDIsIAotICAgIDEzNiwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDYsIDEsIDIxMiwgCi0gICAgOTksIDIsIDI0OCwgMSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNDgsIAotICAgIDcsIDQsIDEsIDIxMiwgOTksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTIsIAotICAgIDk5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCA1OSwgCi0gICAgNDgsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDEsIDcsIDYsIDEsIAotICAgIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyNTAsIDMwLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgCi0gICAgMjEwLCAxNjAsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAKLSAgICAyMTcsIDE1MywgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDIxMSwgCi0gICAgMTE4LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDExNSwgMiwgNDQsIDE2MywgMjIyLCAyMzMsIDcsIDQsIDEsIDE5OSwgCi0gICAgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxOTksIDIyMiwgOTIsIDIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMTk5LCAKLSAgICAyMjIsIDkyLCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAyMjAsIDc2LCAyMjIsIDkxLCA3LCA0LCAxLCAyNDgsIDU0LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDExNSwgMiwgMjQxLCA1MiwgNDgsIAotICAgIDcsIDQsIDEsIDExNSwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNCwgCi0gICAgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAKLSAgICAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIAotICAgIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAKLSAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAKLSAgICAyNTEsIDE0NywgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMjQxLCA1MiwgNDgsIDcsIAotICAgIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxODIsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxODIsIDcsIAotICAgIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCA1OSwgCisgICAgMCwgMjE5LCAyMCwgMjQ1LCAzOSwgNzksIDIyNCwgMSwgNzksIDU0LCA1MCwgMjQ3LCAxNDAsIDUwLCAyMjUsIDE4NSwgNTAsIAorICAgIDI1NCwgMTM0LCAyNTQsIDY1LCA0MywgMjI2LCA3LCA0NCwgMjI2LCA3LCAyNTMsIDIyNCwgOTYsIDUwLCAyNDksIDIyNywgCisgICAgMjQwLCAxNzQsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjE5LCA0OCwgMjEsIDIxMCwgODYsIDIxLCAxMTEsIDIxLCAxMDUsIDIxLCAKKyAgICAxNTgsIDIxLCAxNjEsIDIxLCAxOTAsIDIxLCAxOTUsIDIxLCAxOTksIDIxLCAxOTYsIDIxLCAyMDEsIDI0OSwgMjM0LCAyMjAsIAorICAgIDE1MiwgMjMzLCAyMSwgNTAsIDI0NSwgMTA2LCA1MCwgMjQyLCAxMzcsIDUwLCAyMjQsIDE2LCA3OSwgMjQ5LCAyMjUsIDI1MywgCisgICAgMjE0LCA3LCA2LCAxLCA2MSwgNywgNiwgMSwgMjUzLCAxNjYsIDcsIDYsIDEsIDI1MSwgNzQsIDcsIDYsIDEsIDI0OSwgNjgsIAorICAgIDcsIDYsIDEsIDc2LCA3LCA2LCAxLCAyNDUsIDE0LCA3LCA2LCAxLCAyNDMsIDIwOSwgNywgNiwgMSwgMjQyLCA2NywgNywgNiwgCisgICAgMSwgNzQsIDcsIDYsIDEsIDIzNSwgMTUwLCA3LCA2LCAxLCAyMzUsIDI5LCA3LCA2LCAxLCAxNTYsIDcsIDYsIDEsIDE5NCwgCisgICAgNywgNiwgMSwgMjMwLCAzMCwgNywgNiwgMSwgNzgsIDcsIDYsIDEsIDIyNiwgMTA5LCA3LCA2LCAxLCAyMjQsIDk5LCA3LCA2LCAKKyAgICAxLCAxNTMsIDcsIDYsIDEsIDIyMiwgOTMsIDcsIDYsIDEsIDIxNywgMTUzLCA3LCA2LCAxLCA2OSwgNywgNiwgMSwgMjE0LCAKKyAgICAxMDUsIDcsIDYsIDEsIDIxMiwgOTgsIDcsIDYsIDEsIDIxMSwgMTc4LCA3LCA2LCAxLCAyMTEsIDExNywgNywgNiwgMSwgCisgICAgMjEwLCAxNTksIDQzLCA0MiwgMTI3LCAyMjMsIDUzLCAyMTksIDQ4LCA0NCwgNDIsIDEyNywgMjUwLCAzOSwgMjU1LCAyMywgCisgICAgMTIxLCAyMzIsIDIxOSwgMjQyLCAxNDQsIDI1NSwgMjMsIDcsIDQsIDEsIDYxLCA3LCA0LCAxLCAyNTMsIDE2NiwgNywgNCwgCisgICAgMSwgMjUxLCA3NCwgNywgNCwgMSwgMjQ5LCA2OCwgNywgNCwgMSwgNzYsIDcsIDQsIDEsIDI0NSwgMTQsIDcsIDQsIDEsIAorICAgIDI0MywgMjA5LCA3LCA0LCAxLCAyNDIsIDY3LCA3LCA0LCAxLCA3NCwgNywgNCwgMSwgMjM1LCAxNTAsIDcsIDQsIDEsIDIzNSwgCisgICAgMjksIDcsIDQsIDEsIDE1NiwgNywgNCwgMSwgMTk0LCA3LCA0LCAxLCAyMzAsIDMwLCA3LCA0LCAxLCA3OCwgNywgNCwgMSwgCisgICAgMjI2LCAxMDksIDcsIDQsIDEsIDIyNCwgOTksIDcsIDQsIDEsIDE1MywgNywgNCwgMSwgMjIyLCA5MywgNywgNCwgMSwgMjE3LCAKKyAgICAxNTMsIDcsIDQsIDEsIDY5LCA3LCA0LCAxLCAyMTQsIDEwNSwgNywgNCwgMSwgMjEyLCA5OCwgNywgNCwgMSwgMjExLCAxNzgsIAorICAgIDcsIDQsIDEsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE1OSwgNDMsIDI0OSwgMTA3LCAxMjcsIDY3LCAyMzIsIDIxOSwgCisgICAgNDQsIDI0OSwgMTA3LCAxMjcsIDE4NCwgMjI4LCA3OCwgMjE5LCAyMCwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCAyNTAsIAorICAgIDE4NCwgNTAsIDIyNCwgMjMxLCA1MCwgMjQ5LCAxMDYsIDUwLCAyMTEsIDQwLCA1MCwgMjUxLCAxNDMsIDEzMCwgMjIxLCAKKyAgICAxNzUsIDUwLCAyNDgsIDksIDI0OSwgMTcxLCA1MCwgMjQ0LCAxNDQsIDIyNiwgMTU4LCAyMzUsIDI0NSwgMjMzLCA0OCwgNTIsIAorICAgIDI1NCwgMTE4LCAyMjQsIDEsIDc5LCAyMjgsIDU3LCA1MCwgMjE5LCA1NCwgMjQwLCAxNzUsIDIyMywgMTA1LCA1MCwgMjMxLCAKKyAgICAyMzcsIDI0OCwgNzksIDUwLCAyMjUsIDI0LCA1MCwgMjE4LCAyNCwgMTA1LCAyMTgsIDI0LCAxNTgsIDI1NSwgMTIsIDI1NSwgCisgICAgMjMsIDIzMCwgMjMzLCA1MCwgMjI1LCA3MSwgNTAsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjUwLCAxOTEsIDIxOCwgMjQsIAorICAgIDExMSwgMjMxLCAxNTMsIDIyNiwgMTU4LCAyMzUsIDI0NSwgMjIyLCAyNTAsIDUyLCAyNTQsIDExOCwgMjI0LCAxLCA3OSwgCisgICAgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgMjEyLCAKKyAgICAxMTQsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMjM1LCAyMDAsIDIyNCwgMTYsIDc5LCA3LCA2LCAxLCAxMTYsIDIsIDI0MiwgCisgICAgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDE4NCwgNywgNiwgMSwgMTE2LCAyLCAyNDgsIDksIDcsIDYsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA2LCAxLCAKKyAgICAyNTQsIDI1MiwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDE2MCwgMiwgMjQyLCAxNDMsIDcsIDYsIAorICAgIDEsIDE2MCwgMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDE2MCwgMiwgMjQ4LCA5LCA3LCA2LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyNDUsIDY3LCA3LCA2LCAxLCAyMzAsIAorICAgIDMxLCAyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMTQyLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDE0NCwgMiwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgOSwgMjMwLCA4OSwgCisgICAgNTAsIDcsIDYsIDEsIDE0NCwgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgMTQyLCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgCisgICAgMTQyLCA3LCA2LCAxLCAyMTYsIDE1MiwgNywgNCwgMSwgMjIwLCA3OCwgMjIyLCA5MywgNywgNCwgMSwgMTE2LCAyLCAyNDIsIAorICAgIDE0MywgNywgNCwgMSwgMTE2LCAyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTE2LCAyLCAKKyAgICAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgCisgICAgMjU0LCAyNTIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAxNjAsIDIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxNjAsIDIsIDI0OCwgOSwgNywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgNywgNCwgMSwgMjQ1LCA2NywgNywgNCwgMSwgMjMwLCAKKyAgICAzMSwgMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxNDQsIDIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDksIDI0NywgMTc3LCAKKyAgICA1MCwgNywgNCwgMSwgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMTA0LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAxNDIsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAKKyAgICAxNDIsIDcsIDQsIDEsIDIxNiwgMTUyLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxMTYsIDIsIDIyNiwgMjI4LCA3LCA0LCAxLCAxMTYsIDIsIDIyNiwgMjI4LCAKKyAgICA3LCA2LCAxLCAyNTEsIDc1LCAyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDE0MiwgNywgNiwgMSwgMjUxLCA3NSwgMiwgCisgICAgMjUwLCAzOCwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgNTksIDQ4LCA3LCA0LCAKKyAgICAxLCAyNTEsIDc1LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNTEsIDc1LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDI1MCwgCisgICAgMjQyLCA3LCA2LCAxLCAyNDksIDY5LCAyLCA5MSwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgOTEsIDcsIDYsIDEsIDE2MCwgMiwgCisgICAgMjMxLCAyMzcsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE2MCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNiwgCisgICAgMSwgMTYwLCAyLCAyMjYsIDIyOCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDI0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIAorICAgIDI0MywgMjEwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDI0MywgMjEwLCAKKyAgICAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA5MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDE4NCwgNywgNCwgMSwgMjQwLCAKKyAgICAxNjEsIDIsIDE4NCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAKKyAgICAyMzcsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI1MSwgMTU0LCA3LCAKKyAgICA2LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjgsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgCisgICAgMjQwLCAxNjEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ3LCAxMjcsIDc0LCA3LCA2LCAyNywgMjM2LCAzOCwgNywgNCwgMjcsIAorICAgIDIzNiwgMzgsIDcsIDYsIDEsIDIzNSwgMTUxLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAzOCwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzMsIAorICAgIDI0NSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDE0MiwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDE0MiwgNywgNiwgMSwgMjMzLCAKKyAgICAxNTUsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIAorICAgIDI0NywgMTI4LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgOTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMTQyLCA3LCA0LCAxLCAyMzAsIDMxLCAKKyAgICAyLCAxNDIsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDE5MSwgNywgCisgICAgNiwgMSwgMjMwLCAzMSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzAsIAorICAgIDMxLCAyMjQsIDIwNywgMjUxLCA4NiwgMjU0LCA2NSwgNywgNiwgMSwgMjQ1LCAxNDYsIDcsIDQsIDEsIDI0NSwgMTQ2LCA3LCAKKyAgICA2LCAxLCAxNDQsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDI1MSwgCisgICAgMTU0LCA3LCA0LCAxLCAxNDQsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDE0NCwgCisgICAgMiwgNTIsIDE0MiwgNywgNiwgMjcsIDIyNiwgMjM4LCA3LCA0LCAyNywgMjI2LCAyMzgsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAxNDIsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAxNDIsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgCisgICAgMjIzLCAyMjcsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIyMywgMjI3LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMTQyLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAxNDIsIDcsIDYsIDEsIAorICAgIDIyMiwgOTQsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIAorICAgIDI1MCwgMTkxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDIsIAorICAgIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMTcsIDE1NCwgCisgICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDkxLCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDE4NCwgNywgNCwgMSwgMTA0LCAyLCAxODQsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDEwNCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDEwNCwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDEwNCwgMiwgMjUxLCAxNTQsIAorICAgIDcsIDYsIDEsIDEwNCwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDIyMiwgMjM3LCA0OCwgNywgNiwgMSwgCisgICAgMTA0LCAyLCA1MiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjgsIDcsIAorICAgIDQsIDEsIDEwNCwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMiwgOTksIAorICAgIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzOCwgCisgICAgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDE0MiwgNywgNCwgMSwgMjEwLCAKKyAgICAxNjAsIDIsIDE0MiwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIAorICAgIDIwMCwgMjIyLCA5MywgNywgNCwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCA1NywgMiwgMTAzLCA3LCA2LCAxLCA1NywgMiwgCisgICAgMjE2LCAxMiwgNywgNCwgMSwgNTcsIDIsIDIxNiwgMTIsIDcsIDYsIDEsIDEzOCwgMTk1LCA3LCA0LCAxLCAxMzgsIDE5NSwgCisgICAgNywgNiwgMSwgMjA0LCA3OCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTAzLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAxMDMsIDcsIAorICAgIDYsIDEsIDI1NCwgMjI4LCAyNDksIDY4LCA3LCA2LCAxLCAyNDksIDY5LCAyLCAxMDMsIDcsIDYsIDEsIDI0OSwgNjksIDIsIAorICAgIDIxNiwgMTIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIxNiwgMTIsIDcsIDQsIDEsIDIxNSwgOTQsIDI0OCwgNjIsIDcsIDYsIAorICAgIDEsIDIyMywgNTIsIDc2LCA3LCA2LCAxLCAyMjEsIDE5NywgNywgNiwgMSwgMjA0LCA3NiwgNywgNiwgMSwgMjQ1LCAxNSwgMiwgCisgICAgMTAzLCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgCisgICAgMTE0LCA3LCA0LCAxLCAyNDAsIDIwOCwgNywgNiwgMSwgMjM1LCAxOTIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA5MSwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgMTAzLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAxMDMsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAxMzAsIDcsIDQsIDEsIDIzMywgMTA2LCAyLCA5MSwgNywgNiwgMSwgMjE1LCA5NCwgMTk0LCA3LCA2LCAxLCAyMzAsIDMxLCAKKyAgICAyLCA0MywgMTAzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMDAsIDQ0LCAyMzMsIDQyLCA3LCA2LCAxLCAxNDQsIDIsIDIzMCwgCisgICAgMjI5LCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNTUsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNTUsIDcsIDYsIDEsIAorICAgIDIyNiwgMjIzLCA3LCA0LCAxLCAyMjYsIDIyMywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDEwMywgNywgNCwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDEwMywgNywgMSwgMjEwLCAyMTQsIDcsIDYsIDEsIDEzOCwgMTA1LCA3LCA0LCAxLCAxMzgsIDEwNSwgNywgNiwgCisgICAgMSwgMjQ1LCA4MywgNywgMSwgMjIzLCA1MiwgMjQ1LCA4NCwgMjMyLCAxMjksIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMjYsIAorICAgIDcwLCAxMDMsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAxMDMsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAxMDMsIDcsIDYsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNTUsIDcsIDQsIDEsIDEwNCwgMiwgCisgICAgMjQwLCAyNTUsIDcsIDYsIDEsIDIxNCwgMTU3LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCA2LCAxLCAyMTEsIAorICAgIDExOCwgMiwgMTAzLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMTAzLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIDQsIAorICAgIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgNiwgMSwgMjQ1LCAxNiwgNywgNiwgMSwgMjQ1LCAxNywgMjIzLCA1MSwgNywgNCwgMSwgCisgICAgMjQ1LCAxNywgMjIzLCA1MSwgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjE3LCA3OCwgNywgMSwgMTEzLCAyLCA5MSwgNywgNiwgCisgICAgMSwgMTM4LCAxOTAsIDcsIDQsIDEsIDEzOCwgMTkwLCA3LCAxLCAyMzUsIDIwMCwgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCAKKyAgICA5MSwgNywgMSwgMjExLCAxODEsIDcsIDEsIDI0OCwgNTUsIDI1MCwgMTksIDcsIDEsIDIzMywgODMsIDI1MCwgMTksIDcsIDEsIAorICAgIDI1NCwgMTQ1LCAyNTAsIDE5LCA3LCAxLCAyMjMsIDU4LCAyNTAsIDE5LCA3LCA2LCAxLCAyNDYsIDQ4LCAyLCAyNTAsIDI0MiwgCisgICAgNywgNiwgMSwgMjQ5LCA2OSwgMiwgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDYsIDQ4LCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNiwgMSwgMjMyLCAxOTQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA0LCAxLCAyMzUsIDE1MCwgNywgNCwgCisgICAgMSwgMjMyLCAxOTQsIDcsIDYsIDEsIDIyOCwgMTkxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCA0LCAxLCAyMzUsIDE1MCwgNywgCisgICAgNCwgMSwgMjI4LCAxOTEsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAyNDIsIDcsIAorICAgIDYsIDEsIDI0MCwgMTYxLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI1MCwgMjQyLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgCisgICAgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNTAsIDI0MiwgCisgICAgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgNzYsIAorICAgIDcsIDYsIDEsIDExNiwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDI0OCwgMTAsIDIyLCAKKyAgICAyMzEsIDIzNywgNywgNiwgMSwgMTE2LCAyLCA1OSwgNzIsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCA1OSwgNzIsIAorICAgIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjU0LCAyNTMsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMjMxLCAKKyAgICAyMzcsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCA5MSwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDkxLCA3LCA2LCAxLCAyNDMsIAorICAgIDIxMCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjM1LCAzMCwgMiwgCisgICAgMjUwLCAyNDIsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI4LCA3LCA0LCAKKyAgICAxLCAxNDQsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI5LCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgMjI2LCAyMjksIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjQ1LCAxNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIAorICAgIDI0NSwgMTcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0NiwgNDcsIAorICAgIDcsIDYsIDEsIDI0OSwgNjksIDIsIDQsIDEsIDIxMCwgMTU5LCA3LCA0LCAxLCAyNDYsIDQ3LCA3LCA2LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMTQyLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDIwNiwgNywgNiwgMSwgMjExLCAxODEsIAorICAgIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNDIsIDE0MywgNywgNiwgMSwgCisgICAgMTE2LCAyLCAyMjIsIDIzNywgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDcyLCAyMiwgMTQyLCA3LCAKKyAgICA2LCAxLCAyNTQsIDI1MywgMiwgMTQyLCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxOCwgCisgICAgMTA1LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxOCwgMTA1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDUyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMTE2LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjM1LCAyMDAsIDI1MSwgCisgICAgMTU0LCA3LCA0LCAxLCAxMTYsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMTYwLCAyLCA1MiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNCwgCisgICAgMSwgMTYwLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDI0MCwgMTYxLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIAorICAgIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDQsIAorICAgIDEsIDE0NCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCAKKyAgICA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA0LCAKKyAgICAxLCAyMjIsIDk0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDYsIDEsIDIxMCwgMjMxLCA3LCA0LCAxLCAyMTAsIDIzMSwgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyMDAsIDQ0LCAyMzMsIDQyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyNDksIDEwOCwgNywgNiwgMSwgMjI2LCAxMzgsIDcsIDQsIAorICAgIDEsIDIyNiwgMTM4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTAzLCA3LCA2LCAKKyAgICAxLCAxMTYsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTE2LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxOTEsIDcsIAorICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMjMxLCAyMzcsIDcsIAorICAgIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA0OCwgNywgNCwgMSwgCisgICAgMTQ0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDE0NCwgMiwgCisgICAgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjExLCAxMTgsIAorICAgIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0OSwgCisgICAgMTA4LCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MCwgNywgNCwgCisgICAgMSwgMjQ4LCAxNTEsIDI0NywgMjI4LCA3LCA0LCAxLCAyMjQsIDM0LCAyNDcsIDIyOCwgNywgNiwgMSwgMTE2LCAyLCA5MSwgCisgICAgNywgNiwgMSwgMjUxLCA3NSwgMiwgOTEsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDkxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgMTMwLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjE3LCAyNTEsIAorICAgIDIxNywgNzgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMTcsIDI1MSwgMjE3LCA3OCwgNywgNiwgMSwgMjQyLCAxODcsIDIxOCwgCisgICAgMTMxLCA3LCA0LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDcsIDYsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAxMzAsIAorICAgIDcsIDYsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCA2LCAxLCAxNjAsIDIsIDkxLCA3LCA0LCAxLCAxNjAsIDIsIDkxLCA3LCAKKyAgICA2LCAxLCAyMzUsIDE1MSwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCA5MSwgNywgNiwgMSwgNCwgMjI0LCAxMDAsIDIsIAorICAgIDI0MSwgNTksIDIxNywgNzgsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyNDEsIDU5LCAyMTcsIDc4LCA3LCA2LCAxLCAyMjMsIAorICAgIDIyNywgMiwgOTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCA5MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIDIxNSwgOTQsIDYxLCA3LCA0LCAxLCAyNTQsIDE1MSwgNywgNCwgMSwgMjE1LCAKKyAgICA5NCwgMjU0LCAxNTEsIDcsIDQsIDEsIDU3LCAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzgsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIAorICAgIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAxMDMsIDcsIDQsIAorICAgIDEsIDIyMywgNTIsIDc2LCA3LCA0LCAxLCAyMjEsIDE5NywgNywgNCwgMSwgMjIxLCAxOTgsIDIsIDEwMywgNywgNCwgMSwgCisgICAgMjA0LCA3NiwgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCA3NiwgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCAxNjAsIDIsIDEwMywgCisgICAgNywgNCwgMSwgMjUwLCA4LCAyMjMsIDUyLCAyMDQsIDc2LCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTEsIDIsIDkxLCA3LCAKKyAgICA0LCAxLCAyNDMsIDIxMCwgMiwgMTAzLCA3LCA0LCAxLCAxMTksIDI0MywgMjA5LCA3LCAxLCA0LCA2LCAyNDMsIDIwOSwgNywgCisgICAgNCwgMSwgMjQzLCAxMTQsIDcsIDQsIDEsIDIyMywgMTU0LCAyNDAsIDI1NSwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2NywgCisgICAgNywgNCwgMSwgMjQyLCA2OCwgMiwgMTAzLCA3LCA0LCAxLCAyNDEsIDIxNSwgMiwgMTAzLCA3LCA0LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTkyLCA3LCAxLCA0LCA2LCA3NCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTIsIDQ5LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjIzLCA1OCwgMTAzLCAKKyAgICA3LCA0LCAxLCAyMzMsIDcsIDcsIDQsIDEsIDIxNSwgOTQsIDE5NCwgNywgNCwgMSwgMjE1LCA5NCwgMjMyLCA1NSwgMiwgCisgICAgMjAwLCAyMzMsIDQyLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxMDMsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDQzLCAxMDMsIDcsIAorICAgIDQsIDEsIDIzMCwgMzEsIDIsIDIyMywgNTgsIDEwMywgNywgMSwgNCwgNiwgMjMwLCAzMCwgNywgNCwgMSwgMjUyLCAxNDIsIAorICAgIDc4LCA3LCAxLCA0LCA2LCAyMjYsIDIzOCwgNywgNCwgMSwgMjUwLCA4LCAyMjYsIDIwNSwgNywgNCwgMSwgMjI1LCAxMzYsIAorICAgIDcsIDQsIDEsIDIxNSwgOTQsIDE1MywgNywgNCwgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDIwMCwgMjMzLCA0MiwgNywgNCwgCisgICAgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDEwMywgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIwMCwgMjMzLCA0MiwgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyNDQsIDk1LCA3LCA0LCAxLCAyMjMsIDUyLCAKKyAgICAyMjMsIDIyNywgMiwgMjQ0LCA5NSwgNywgMSwgNCwgNiwgMTUzLCA3LCAxLCA0LCA2LCAyMzUsIDIwMCwgMTUzLCA3LCA0LCAKKyAgICAxLCAyMjIsIDk0LCAyLCAxMDMsIDcsIDQsIDEsIDI0NSwgODMsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MSwgMiwgCisgICAgMjE4LCAxMDUsIDIyLCAxMDMsIDcsIDQsIDEsIDIxOCwgMjMzLCAyMjMsIDUyLCAyNDUsIDgzLCA3LCA0LCAxLCAyNDUsIDg0LCAKKyAgICAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjE1LCA5NCwgMjE3LCAxNTMsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMjMsIDU4LCAKKyAgICAxMDMsIDcsIDQsIDEsIDEwNCwgMTMwLCA3LCA0LCAxLCAyMTQsIDE1NywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgCisgICAgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIDcsIDQsIDEsIDIxNSwgOTQsIDIxMiwgOTgsIDcsIDQsIDEsIDIxNSwgOTQsIAorICAgIDIxMSwgMTE3LCA3LCAxLCA0LCA2LCAyMTEsIDExNywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCisgICAgMSwgMjEwLCAxNjAsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDUsIDE2LCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyNDksIAorICAgIDEwOCwgNywgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA3LCAxLCAyMjUsIDE0MiwgMjEzLCAxMzUsIDI0NCwgMSwgNywgMSwgCisgICAgMjM1LCAyMDAsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNywgMSwgMjE4LCAxMTIsIDI1MSwgNzQsIDcsIDEsIDI1MSwgMjU0LCAKKyAgICAyNTAsIDE5LCA3LCAxLCA0LCA2LCAyNTMsIDE2NiwgNywgNCwgMSwgMjUwLCA4LCAyMDQsIDc2LCA3LCAxLCA0LCA2LCAyNDMsIAorICAgIDIxMCwgMiwgMTAzLCA3LCAxLCA0LCA2LCAyNDIsIDY3LCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgMjQ5LCAxMzUsIDcsIDQsIAorICAgIDEsIDIxNSwgOTQsIDIzNSwgMjksIDcsIDEsIDQsIDYsIDE1NiwgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDEwMywgNywgMSwgCisgICAgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCA5MSwgNywgMSwgMjIzLCA1MiwgMjQyLCAxODcsIDIxOCwgMTMyLCAyLCA5MSwgNywgCisgICAgNCwgMSwgMjQ2LCA0OCwgMjQ3LCAyMjgsIDcsIDQsIDEsIDI0OCwgMzQsIDI0NywgMjI4LCA3LCA0LCAxLCAyNDYsIDQ4LCAKKyAgICAyNDcsIDIyOSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIxNSwgMTg2LCAyNDcsIDIyOCwgNywgNCwgMSwgMjE2LCAyMzYsIAorICAgIDI0NywgMjI4LCA3LCA0LCAxLCAyMTcsIDMwLCAyNDcsIDIyOSwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NCwgMTQyLCAKKyAgICAyNDcsIDIyOCwgNywgNCwgMSwgMjMyLCAxMDUsIDI0NywgMjI4LCA3LCA0LCAxLCAyMzIsIDU2LCAyNDcsIDIyOCwgNywgMSwgCisgICAgMjUxLCAyNTQsIDIyNSwgMTg0LCA3LCAxLCAyNTIsIDYsIDIyNSwgMTg0LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY4LCAyLCAKKyAgICAyNDQsIDk1LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY4LCAyLCAyNDQsIDk2LCAyMiwgMjE3LCA3OCwgNTgsIDEsIDQsIAorICAgIDI0MiwgNjcsIDU4LCAxLCA0LCAyNDIsIDY4LCAyLCAxMDMsIDU4LCAxLCA0LCAyMzUsIDE1MCwgNTgsIDEsIDQsIDE1MywgCisgICAgNTgsIDEsIDQsIDIxNSwgOTQsIDE1MywgNTgsIDEsIDQsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAxMDMsIDU4LCAxLCA0LCA2LCAKKyAgICAyMzUsIDIwMCwgMTUzLCA1OCwgMSwgNCwgMjEyLCA5OCwgNTgsIDEsIDQsIDIxMSwgMTE3LCA1OCwgMSwgMjI0LCAxOTMsIAorICAgIDU4LCAxLCA1MiwgMjI0LCAxOTMsIDU4LCAxLCAyMTUsIDk0LCAyNDksIDIyNywgNTgsIDEsIDI1NCwgNjUsIDU4LCAxLCAKKyAgICAyMjMsIDUyLCAyNDksIDIyNywgNTgsIDEsIDQ0LCAxNjMsIDIyMiwgMjM2LCA1OCwgMSwgNDMsIDE2MywgMjIyLCAyMzYsIAorICAgIDU4LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDU4LCAxLCAyMjMsIDUyLCAyNDIsIDE4NywgMjE4LCAxMzEsIDU4LCAxLCA0MywgCisgICAgMjU0LCAxLCA1OCwgMSwgNDQsIDI1NCwgMSwgNTgsIDEsIDEyMCwgMjU0LCAxLCA1OCwgMSwgMTI0LCAyNTQsIDEsIDU4LCAxLCAKKyAgICAyNTAsIDM5LCAyNTUsIDIzLCAyNTAsIDI0MiwgNTgsIDEsIDY3LCAyMzIsIDIxOSwgNTgsIDEsIDIzMSwgMjM3LCA1OCwgMSwgCisgICAgMjU1LCAxMiwgMjU1LCAyMywgNTgsIDEsIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMTIxLCA2NywgMjMyLCAyMTksIDU4LCAKKyAgICAxLCAxMjEsIDIzMSwgMjM3LCA1OCwgMSwgMTIxLCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDEyMSwgMjU1LCAxMiwgCisgICAgMjU1LCAyMywgNTgsIDEsIDIxNSwgMjIzLCAyNDksIDIzNCwgNTgsIDEsIDE2MywgMjE1LCAyMjMsIDI0OSwgMjM0LCA1OCwgCisgICAgMSwgMjUwLCAxODEsIDQ0LCAxNjMsIDIyMiwgMjM2LCA1OCwgMSwgMjUwLCAxODEsIDQzLCAxNjMsIDIyMiwgMjM2LCA1OCwgCisgICAgMSwgMTIwLCAyMTcsIDg4LCA1OCwgMSwgMTI0LCAyMTcsIDg4LCA1OCwgMSwgOTYsIDUwLCA1OCwgMSwgMjMwLCAxODcsIDUwLCAKKyAgICAyNTEsIDE1NCwgNTksIDQ4LCAyMjIsIDIzNywgNDgsIDIyNiwgMjI4LCA0LCAxODQsIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCAKKyAgICA1OCwgMSwgMjIzLCAzOSwgMTAzLCA1OCwgMSwgMjQ5LCAxMzksIDI1NSwgMjMsIDU4LCAxLCA0LCAyNDMsIDExNCwgNTgsIDEsIAorICAgIDQsIDE1NiwgNTgsIDEsIDQsIDIyMiwgOTMsIDU4LCAxLCA0LCAyMTEsIDE3OCwgNTgsIDEsIDQsIDIyMywgNTIsIDI0MiwgCisgICAgMTg3LCAyMTgsIDEzMSwgNTgsIDEsIDI0NSwgMjgsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAxMzgsIDEzMCwgNTgsIDEsIAorICAgIDIzMCwgMjMwLCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAxMzgsIDEzMCwgNTgsIAorICAgIDEsIDIxMCwgMjU0LCAyNDgsIDUyLCAxMzgsIDc5LCA1OCwgMSwgMjExLCA3MCwgMjQ4LCA1MiwgMTM4LCA3OSwgNTgsIDEsIAorICAgIDIxMywgMTMzLCA1OCwgMSwgMjE0LCAxODYsIDU4LCAxLCA1MiwgMjU0LCA2NSwgNTgsIDEsIDEyMSwgMTI0LCAyNTQsIDEsIAorICAgIDU4LCAxLCAxMjEsIDEyMCwgMjU0LCAxLCA1OCwgMSwgMTIxLCA0MywgMjU0LCAxLCA1OCwgMSwgMTIxLCA0NCwgMjU0LCAxLCAKKyAgICA1OCwgMSwgMTIxLCAyMjIsIDIzNiwgNTgsIDEsIDIzMCwgMjI5LCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDIzMCwgCisgICAgMjI5LCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAyMzAsIDIyOSwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIDU4LCAxLCAKKyAgICAxMjEsIDE4NCwgNTgsIDEsIDIyMywgMTYwLCAyNDksIDIzNCwgNTgsIDEsIDI1MiwgNjYsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIAorICAgIDI0NSwgMTUxLCAxMjUsIDIxNiwgMzEsIDU4LCAxLCAyNTIsIDY2LCAxMjEsIDIxNiwgMzEsIDU4LCAxLCAyNDUsIDE1MSwgCisgICAgMTIxLCAyMTYsIDMxLCA1OCwgMSwgMjIwLCA1NiwgNTgsIDEsIDIwNCwgMjIwLCA1NiwgNTgsIDEsIDEyMSwgNDMsIDc1LCAKKyAgICAzOCwgMjQyLCAxNDQsIDI1NSwgMjMsIDM4LCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjUwLCAzOSwgMjU1LCAyMywgMzgsIAorICAgIDE4NCwgMzgsIDIzMSwgMjM3LCAzOCwgMjI2LCAxMjMsIDM4LCAyNTEsIDE1NCwgMzgsIDU5LCA0OCwgMzgsIDI0OCwgOSwgCisgICAgMzgsIDI0MSwgNTksIDQ4LCAzOCwgMjIyLCAyMzcsIDQ4LCAzOCwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIDM4LCAyNTAsIAorICAgIDI0MiwgMzgsIDY3LCAyMzIsIDIyMCwgNDgsIDM4LCA1MiwgNjcsIDIzMiwgMjIwLCA0OCwgMzgsIDUyLCAyNDIsIDE0NCwgCisgICAgMjU1LCAyMywgMzgsIDI1MSwgNywgMzgsIDIzNSwgMjAwLCAyNTEsIDE1NCwgMzgsIDIxNSwgOTQsIDI0OSwgMjI4LCA0OCwgCisgICAgMzgsIDI0OSwgMjI4LCA0OCwgMzgsIDIyMywgNTIsIDI0OSwgMjI4LCA0OCwgMzgsIDI0OSwgMjI4LCA3MiwgMjIyLCAyNTQsIAorICAgIDM4LCAyNDIsIDE0NCwgMjU1LCAyNCwgNTEsIDM4LCAyNTUsIDEyLCAyNTUsIDI0LCA1MSwgMzgsIDQzLCAyMTcsIDg5LCA1MSwgCisgICAgMzgsIDQ0LCAyMTcsIDg5LCA1MSwgMzgsIDQzLCAyNTQsIDExOCwgNDgsIDM4LCAyNDAsIDI1NSwgMzgsIDQzLCAxNjMsIAorICAgIDIyMiwgMjM3LCA1MSwgMzgsIDEyMCwgMjE3LCA4OSwgNTEsIDM4LCAxMjQsIDIxNywgODksIDUxLCAzOCwgOTYsIDUsIDUxLCAKKyAgICAzOCwgMjMwLCAxODcsIDUsIDUxLCAzOCwgMjI2LCA2OCwgMjQxLCA1OSwgNTEsIDM4LCAyMjMsIDU4LCAyNDEsIDU5LCA1MSwgCisgICAgMzgsIDU5LCA1MSwgMzgsIDI0OCwgMTAsIDUxLCAzOCwgMjIyLCAyMzcsIDUxLCAzOCwgMjQ5LCAyMjgsIDUxLCAzOCwgMjUwLCAKKyAgICAxOTEsIDM4LCAyMjYsIDIyOCwgMzgsIDY3LCAyMzIsIDIyMCwgNTEsIDM4LCAyNTEsIDE0OCwgNTEsIDM4LCAyMzUsIDIwMCwgCisgICAgNTIsIDI1NCwgMzIsIDUxLCAzOCwgMjUwLCAyNDMsIDUxLCAzOCwgMjUwLCAzOSwgMjU1LCAyNCwgNTEsIDM4LCAyNTEsIAorICAgIDE1NSwgNTEsIDM4LCAyMzUsIDIwMCwgMjUxLCAxNTUsIDUxLCAzOCwgMjE2LCA5MCwgNTEsIDM4LCAyMzEsIDIzOCwgNTEsIAorICAgIDM4LCAxMjEsIDIzMiwgMjE5LCAzOCwgNTIsIDEyMSwgMjMyLCAyMTksIDM4LCAyMTYsIDkwLCAyMjYsIDEyNCwgMzgsIDIxOSwgCisgICAgMjUzLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDM4LCAyMDAsIDIxOCwgMTA1LCAyMjYsIDEyNCwgMzgsIDIxOSwgMjUzLCAyMTksIAorICAgIDQ5LCAyMjYsIDEyNCwgMzgsIDIwMCwgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNywgNTEsIDM4LCAKKyAgICAyMzUsIDIwMCwgMjUxLCAxNDgsIDUxLCAzOCwgNDIsIDUxLCAzOCwgMjIxLCAxODIsIDUxLCAzOCwgMjExLCAxNzksIDQ4LCAKKyAgICAzOCwgNjcsIDE4NCwgMzgsIDUyLCAyMjYsIDEyMywgMzgsIDI0MiwgMTQ0LCAxMzgsIDc5LCAzOCwgMjU1LCAxMiwgMTM4LCAKKyAgICA3OSwgMzgsIDI2LCAyMjUsIDE3OCwgMzgsIDI2LCAyMzQsIDgsIDM4LCAyNiwgMjQ4LCA0LCAyMTYsIDE5LCAzOCwgMjYsIAorICAgIDIxMCwgMjE5LCAzOCwgMjUxLCAxNDgsIDQ4LCAzOCwgMjQ1LCAxMDYsIDUsIDUxLCAzOCwgNTIsIDY3LCAyMzIsIDIyMCwgCisgICAgNTEsIDM4LCA0MywgMjU0LCAxMTgsIDUxLCAzOCwgMjI4LCA1NywgMjE2LCA5MCwgNDgsIDM4LCAyNDEsIDY1LCA0OCwgMzgsIAorICAgIDI1NCwgMTU2LCAxMjgsIDIxNiwgNDMsIDQ4LCAzOCwgNDMsIDQ0LCA4MCwgNTEsIDM4LCAyMTQsIDE1MywgODAsIDUxLCAzOCwgCisgICAgMjQyLCAxNDksIDIzNSwgNjksIDM4LCA0NCwgMjU0LCAyLCA0OCwgMzgsIDQzLCAxNjMsIDIyMiwgMjM3LCA0OCwgMzgsIAorICAgIDI0NCwgMTM5LCAzOCwgMjExLCAxNzksIDUxLCAzOCwgNDMsIDI1NCwgMiwgNTEsIDM4LCA0NCwgMjU0LCAyLCA1MSwgMzgsIAorICAgIDQ0LCAyNTQsIDIsIDIyLCAxMjAsIDI1NCwgMiwgNTEsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNywgNDgsIDM4LCA1OSwgNzIsIAorICAgIDIyMiwgMjU0LCAzOCwgMjUzLCAyMjUsIDUxLCAzOCwgNTIsIDIyMiwgMjM3LCA1MSwgMzgsIDIxMCwgMzUsIDQ4LCAzOCwgCisgICAgNTIsIDI1MSwgMTU1LCA1MSwgMzgsIDUyLCAyNTEsIDE1NCwgMzgsIDUyLCAyMzEsIDIzNywgMzgsIDUyLCAyMzEsIDIzOCwgCisgICAgNTEsIDM4LCA1MiwgMTg0LCAzOCwgNTIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgMzgsIDUyLCA5NywgODAsIDUxLCAzOCwgNywgCisgICAgNCwgMSwgNjEsIDM4LCA3LCA0LCAxLCA3NiwgMzgsIDcsIDQsIDEsIDc0LCAzOCwgNywgNCwgMSwgNzgsIDM4LCA3LCA0LCAxLCAKKyAgICA2OSwgMzgsIDcsIDQsIDEsIDI1MSwgNzQsIDM4LCA3LCA0LCAxLCAyNDksIDY4LCAzOCwgNywgNCwgMSwgMjQyLCA2NywgMzgsIAorICAgIDcsIDQsIDEsIDE5NCwgMzgsIDcsIDQsIDEsIDE1MywgMzgsIDcsIDQsIDEsIDIxNywgMTUzLCAzOCwgNywgNCwgMSwgMjE0LCAKKyAgICAxMDUsIDM4LCA3LCA0LCAxLCAyMTEsIDE3OCwgMjYsIDYsIDEsIDI0MSwgMjAzLCAyNiwgNCwgMSwgMjQxLCAyMDMsIDI2LCAKKyAgICA2LCAxLCAyNTQsIDMxLCAyMjEsIDI0OCwgMjYsIDQsIDEsIDI1NCwgMzEsIDIyMSwgMjQ4LCAyNiwgMjI3LCAyMDIsIDUwLCAKKyAgICAyNiwgMjMyLCAxMTQsIDIyNywgMjAyLCA1MCwgMjYsIDYsIDEsIDIyNiwgNTUsIDI0NywgMjM1LCAyNiwgNCwgMSwgMjI2LCAKKyAgICA1NSwgMjQ3LCAyMzUsIDI2LCAyMTAsIDIxOSwgMjYsIDQsIDIyMywgNTIsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDQsIAorICAgIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA0LCAyMjMsIDUyLCAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAKKyAgICAxODAsIDg3LCAyNiwgMjI0LCAxNiwgNzksIDI2LCAyMTYsIDE5LCAyNiwgMjQ4LCA0LCAyMTYsIDE5LCAyNiwgNiwgMSwgCisgICAgMjU0LCAxNTIsIDIsIDIxNiwgMTksIDI2LCAyNTQsIDEwNSwgMjE3LCAzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIxNiwgCisgICAgMTksIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxNiwgMTksIDI2LCA2LCAKKyAgICAxLCAyMjYsIDIwNCwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjI2LCAKKyAgICAyMDYsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjE2LCAxOSwgMjYsIDYsIDEsIAorICAgIDI1NCwgMTUxLCAyNiwgNiwgMSwgMjUyLCAzNCwgMjYsIDYsIDEsIDI0MywgMTE0LCAyNiwgNiwgMSwgMjQ4LCA2MiwgMjYsIAorICAgIDYsIDEsIDI0NSwgMTA4LCAyNiwgNiwgMSwgMjEwLCA4NSwgMjYsIDYsIDEsIDI0NSwgNzEsIDI2LCA2LCAxLCAyMTYsIDE4MCwgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkyLCAyNiwgNiwgMSwgMjM0LCAyMjgsIDI2LCA2LCAxLCAyMzMsIDEwNCwgMjYsIDYsIDEsIAorICAgIDIzMCwgMTA3LCAyNiwgNiwgMSwgMjI3LCAyNDIsIDI2LCA2LCAxLCAyMTEsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjAzLCAyNiwgCisgICAgNiwgMSwgMjI1LCAxMTEsIDI2LCA2LCAxLCAyMjMsIDQwLCAyNiwgNiwgMSwgMjE5LCAxNzksIDI2LCA2LCAxLCAyMTcsIDQyLCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTcsIDI2LCA2LCAxLCAyMjUsIDEzNiwgMjYsIDYsIDEsIDI1MCwgMTE4LCAyNiwgNiwgMSwgCisgICAgMjI0LCAxNjQsIDI2LCA2LCAxLCAyMjYsIDIwNSwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDMsIDI2LCA2LCAxLCAKKyAgICAyMTQsIDE1OCwgMiwgMjQ4LCAzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyNDUsIDEwOSwgCisgICAgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjE2LCAKKyAgICAxOSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjU0LCAxNTEsIDI2LCAKKyAgICA0LCAxLCAyNTIsIDM0LCAyNiwgNCwgMSwgMjQzLCAxMTQsIDI2LCA0LCAxLCAyNDgsIDYyLCAyNiwgNCwgMSwgMjQ1LCAxMDgsIAorICAgIDI2LCA0LCAxLCAyMTAsIDg1LCAyNiwgNCwgMSwgMjQ1LCA3MSwgMjYsIDQsIDEsIDIxNiwgMTgwLCAyNiwgNCwgMSwgMjM1LCAKKyAgICAxOTIsIDI2LCA0LCAxLCAyMzQsIDIyOCwgMjYsIDQsIDEsIDIzMywgMTA0LCAyNiwgNCwgMSwgMjMwLCAxMDcsIDI2LCA0LCAKKyAgICAxLCAyMjcsIDI0MiwgMjYsIDQsIDEsIDIxMSwgMTU3LCAyNiwgNCwgMSwgMjI2LCAyMDMsIDI2LCA0LCAxLCAyMjUsIDExMSwgCisgICAgMjYsIDQsIDEsIDIyMywgNDAsIDI2LCA0LCAxLCA0MCwgMjE5LCAxNzksIDI2LCA0LCAxLCAyMTksIDE3OSwgMjYsIDQsIDEsIAorICAgIDIxNywgNDIsIDI2LCA0LCAxLCAyMTQsIDE1NywgMjYsIDQsIDEsIDIyNSwgMTM2LCAyNiwgNCwgMSwgMjUwLCAxMTgsIDI2LCAKKyAgICA0LCAxLCAyMjQsIDE2NCwgMjYsIDQsIDEsIDIyNiwgMjA1LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMywgMjYsIDQsIAorICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDMsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIxNCwgCisgICAgMTU4LCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNiwgMTksIDI2LCA2LCAyMzQsIDI1MywgODcsIDI2LCAKKyAgICAyNTIsIDM1LCA4NywgMjYsIDIxNiwgMTgxLCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDEsIDU5LCA4NywgMjYsIDIxNCwgCisgICAgMTU4LCAyLCAyNTUsIDEyLCAyMiwgMjQxLCA1OSwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQ4LCAxMCwgMjIsIDI0MSwgNTksIAorICAgIDg3LCAyNiwgMjI1LCAxMzcsIDg3LCAyNiwgMjI1LCAxMTIsIDg3LCAyNiwgMjM0LCAyNTMsIDg3LCAyNiwgMSwgMjU0LCAzMSwgCisgICAgMjM0LCAxMiwgMjYsIDQsIDEsIDI1NCwgMzEsIDIzNCwgMTIsIDI2LCAxLCAyMTgsIDEzOSwgMjYsIDQsIDEsIDIxOCwgMTM5LCAKKyAgICAyNiwgMSwgMjQ3LCAyMzUsIDI2LCA0LCAxLCAyNDcsIDIzNSwgMjYsIDEsIDIzNCwgMTIsIDI2LCA0LCAxLCAyMzQsIDEyLCAKKyAgICAyNiwgMSwgMjIxLCAyNDgsIDI2LCA0LCAxLCAyMjEsIDI0OCwgODEsIDYsIDEsIDIyMCwgNTcsIDgxLCA0LCAxLCAyMjAsIAorICAgIDU3LCA4MSwgNiwgMSwgMjQ0LCAxNDgsIDgxLCA0LCAxLCAyNDQsIDE0OCwgODEsIDYsIDEsIDIzNCwgMTIzLCA4MSwgNCwgMSwgCisgICAgMjM0LCAxMjMsIDgxLCA2LCAxLCAyNDEsIDUyLCA4MSwgNCwgMSwgMjQxLCA1MiwgODEsIDYsIDEsIDI0MywgMTA5LCA4MSwgCisgICAgNCwgMSwgMjQzLCAxMDksIDgxLCA2LCAxLCAyMjAsIDI0LCA4MSwgNCwgMSwgMjIwLCAyNCwgODEsIDYsIDEsIDI0OCwgNzcsIAorICAgIDgxLCA0LCAxLCAyNDgsIDc3LCAyNiwgMjM0LCAyMjksIDg3LCAyNiwgMjIzLCA0MSwgODcsIDI2LCAyMzIsIDg4LCAyMTksIAorICAgIDE4MCwgODcsIDI2LCAxLCAyMTAsIDIyNCwgMjYsIDYsIDIxNiwgMTgxLCA4NywgMjYsIDIzMiwgODgsIDI0NSwgMTA5LCA4NywgCisgICAgMjYsIDIyMywgNTIsIDIzMiwgODgsIDI0NSwgMTA5LCA4NywgMjYsIDYsIDEsIDIyMCwgOSwgMjYsIDQsIDEsIDIyMCwgOSwgCisgICAgMjYsIDYsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDYsIDEsIDIyMSwgMjQ1LCAyNiwgNCwgMSwgMjIxLCAyNDUsIDI2LCAKKyAgICAyMjMsIDQxLCAyLCAyMTgsIDEwNSwgODcsIDI2LCA2LCAyMjMsIDUyLCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA2LCAKKyAgICAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNiwgMjIzLCA1MiwgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgCisgICAgMTgwLCA4NywgMzMsIDYsIDEsIDIzNiwgNjgsIDIsIDI0MiwgMTQzLCAzMywgNiwgMSwgMjM1LCAxOTYsIDMzLCA2LCAxLCAKKyAgICAyNDcsIDE3MCwgMzMsIDYsIDEsIDI0MiwgMTk0LCAzMywgNiwgMSwgMjE0LCAyMDIsIDIzNiwgNjcsIDMzLCA2LCAxLCAyNDYsIAorICAgIDQ0LCAzMywgNiwgMSwgMjUxLCA4NCwgNzQsIDMzLCA2LCAxLCAyMTEsIDgsIDMzLCA2LCAxLCAyMzUsIDEzMiwgMzMsIDYsIAorICAgIDEsIDIzMiwgMTkzLCAzMywgNiwgMSwgMjI4LCAxODMsIDMzLCA2LCAxLCAyMTUsIDE3NSwgMzMsIDYsIDEsIDIzNCwgNTQsIAorICAgIDMzLCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDMzLCA2LCAxLCAyMTksIDI1MywgNjksIDMzLCA2LCAxLCAyNDYsIAorICAgIDQwLCAzMywgNiwgMSwgNjEsIDMzLCA2LCAxLCAyNTIsIDgzLCAzMywgNiwgMSwgMjEzLCAyNTUsIDMzLCA2LCAxLCAyNDIsIAorICAgIDI0MywgMzMsIDYsIDEsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMzYsIDY3LCAzMywgNiwgMSwgMjEwLCA3NCwgMzMsIDYsIDEsIAorICAgIDIxMCwgOTQsIDMzLCA2LCAxLCA3NCwgMzMsIDYsIDEsIDIxOSwgMjUzLCA3NCwgMzMsIDYsIDEsIDE3NiwgMzMsIDYsIDEsIAorICAgIDI0NSwgMTgyLCAzMywgNiwgMSwgMjQ1LCAxNjcsIDMzLCA2LCAxLCAyNDUsIDE1OCwgMzMsIDYsIDEsIDc4LCAzMywgNiwgMSwgCisgICAgMjI1LCAyMjQsIDMzLCA2LCAxLCAyNDUsIDEwMCwgMzMsIDYsIDEsIDI0NSwgOTAsIDMzLCA2LCAxLCAyMTcsIDIzLCAzMywgCisgICAgNiwgMSwgNjksIDMzLCA2LCAxLCAyNDUsIDIxMCwgMzMsIDYsIDEsIDE2MiwgMzMsIDYsIDEsIDIxNSwgMTc5LCAzMywgNiwgCisgICAgMSwgMjUwLCAxMzksIDMzLCA2LCAxLCAyMjAsIDEwNCwgMzMsIDYsIDEsIDIyMCwgNjcsIDMzLCA2LCAxLCAyNDIsIDEwLCAKKyAgICA1MCwgMzMsIDYsIDEsIDIxMSwgMjcsIDMzLCA2LCAxLCAyMTksIDU0LCA1MCwgMzMsIDYsIDEsIDc2LCAzMywgNiwgMSwgCisgICAgMjEwLCAyMTIsIDMzLCA2LCAxLCAxOTIsIDMzLCA0LCAxLCA2MSwgMzMsIDQsIDEsIDI1MiwgODMsIDMzLCA0LCAxLCAyMTMsIAorICAgIDI1NSwgMzMsIDQsIDEsIDI0MiwgMjQzLCAzMywgNCwgMSwgMjQ4LCA5OCwgMzMsIDQsIDEsIDIzNiwgNjcsIDMzLCA0LCAxLCAKKyAgICAyMTAsIDc0LCAzMywgNCwgMSwgMjEwLCA5NCwgMzMsIDQsIDEsIDc0LCAzMywgNCwgMSwgMjE5LCAyNTMsIDc0LCAzMywgNCwgCisgICAgMSwgMTc2LCAzMywgNCwgMSwgMjQ1LCAxODIsIDMzLCA0LCAxLCAyNDUsIDE2NywgMzMsIDQsIDEsIDI0NSwgMTU4LCAzMywgCisgICAgNCwgMSwgNzgsIDMzLCA0LCAxLCAyMjUsIDIyNCwgMzMsIDQsIDEsIDI0NSwgMTAwLCAzMywgNCwgMSwgMjQ1LCA5MCwgMzMsIAorICAgIDQsIDEsIDIxNywgMjMsIDMzLCA0LCAxLCA2OSwgMzMsIDQsIDEsIDI0NSwgMjEwLCAzMywgNCwgMSwgMTYyLCAzMywgNCwgMSwgCisgICAgMjE1LCAxNzksIDMzLCA0LCAxLCAyNTAsIDEzOSwgMzMsIDQsIDEsIDIyMCwgMTA0LCAzMywgNCwgMSwgMjIwLCA2NywgMzMsIAorICAgIDQsIDEsIDI0MiwgMTAsIDUwLCAzMywgNCwgMSwgMjExLCAyNywgMzMsIDQsIDEsIDIxOSwgNTQsIDUwLCAzMywgNCwgMSwgCisgICAgNzYsIDMzLCA0LCAxLCAyMTAsIDIxMiwgMzMsIDQsIDEsIDE5MiwgMzMsIDQsIDEsIDIzNiwgNjgsIDIsIDI0MiwgMTQzLCAKKyAgICAzMywgNCwgMSwgMjM1LCAxOTYsIDMzLCA0LCAxLCAyNDcsIDE3MCwgMzMsIDQsIDEsIDI0MiwgMTk0LCAzMywgNCwgMSwgCisgICAgMjE0LCAyMDIsIDIzNiwgNjcsIDMzLCA0LCAxLCAyNDYsIDQ0LCAzMywgNCwgMSwgMjUxLCA4NCwgNzQsIDMzLCA0LCAxLCAKKyAgICAyMTEsIDgsIDMzLCA0LCAxLCAyMzUsIDEzMiwgMzMsIDQsIDEsIDIzMiwgMTkzLCAzMywgNCwgMSwgMjI4LCAxODMsIDMzLCAKKyAgICA0LCAxLCAyMTUsIDE3NSwgMzMsIDQsIDEsIDIzNCwgNTQsIDMzLCA0LCAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDMzLCAKKyAgICA0LCAxLCAyMTksIDI1MywgNjksIDMzLCA0LCAxLCAyNDYsIDQwLCAzMywgNiwgMSwgMjI2LCAyMDUsIDMzLCA0LCAxLCAyMjYsIAorICAgIDIwNSwgMzMsIDYsIDEsIDIxMSwgNTksIDMzLCA0LCAxLCAyMTEsIDU5LCAzMywgNiwgMSwgMjM1LCAxOTAsIDc2LCAzMywgNCwgCisgICAgMSwgMjM1LCAxOTAsIDc2LCAzMywgNiwgMSwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjMyLCAxOTgsIDIxMCwgCisgICAgMTgzLCAzMywgNiwgMSwgMjM1LCAxOTAsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAyMzIsIAorICAgIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUyLCAxLCAyMTAsIDE4MywgCisgICAgMzMsIDYsIDEsIDIzNSwgMTkwLCAyNTIsIDEsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzMsIDIzOSwgMzMsIDQsIDEsIDIzMywgMjM5LCAzMywgNiwgMSwgMjI0LCAxNjQsIDMzLCA0LCAKKyAgICAxLCAyMjQsIDE2NCwgMzMsIDYsIDEsIDI0NCwgOTAsIDMzLCA0LCAxLCAyNDQsIDkwLCAzMywgNiwgMSwgMjM1LCAxNTIsIAorICAgIDMzLCA0LCAxLCAyMzUsIDE1MiwgMzMsIDYsIDEsIDIzNSwgMTUzLCAyLCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDMzLCA0LCAKKyAgICAxLCAyMzUsIDE1MywgMiwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzMywgNiwgMSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMTQsIAorICAgIDIwNSwgMzMsIDYsIDEsIDIyMiwgMTg3LCAyMjYsIDIwNSwgMzMsIDQsIDEsIDIyMiwgMTg3LCAyMjYsIDIwNSwgMzMsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDY2LCAzMywgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNiwgNjYsIDMzLCA2LCAxLCAyMjYsIAorICAgIDE0NCwgMzMsIDQsIDEsIDIyNiwgMTQ0LCAzMywgNiwgMSwgMjM0LCAxMiwgMzMsIDQsIDEsIDIzNCwgMTIsIDMzLCAyMTYsIAorICAgIDE0NywgNTAsIDM4LCAzMywgMjE2LCA2NiwgMzgsIDMzLCAyMjYsIDY5LCAzOCwgMzMsIDI0OCwgMTYyLCAyMjUsIDIxLCAzOCwgCisgICAgMzMsIDIyNCwgMTU4LCAyMjUsIDIxLCAzOCwgMzMsIDIyNSwgNiwgMzgsIDMzLCAyNDAsIDIxOCwgMjE2LCAxNDcsIDUwLCAKKyAgICAzOCwgMzMsIDIzMCwgMTk2LCA1MCwgMzMsIDYsIDEsIDIxOSwgMjUzLCAyNDAsIDE2MSwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIAorICAgIDIxOSwgMjUzLCAyNDAsIDE2MSwgMiwgMjE3LCA3OCwgMzMsIDYsIDEsIDIyMCwgMTQ4LCA1MCwgMzMsIDQsIDEsIDIyMCwgCisgICAgMTQ4LCA1MCwgMzMsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIDExNSwgMzMsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIAorICAgIDExNSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyMTQsIDE1NiwgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMTQsIDE1NiwgCisgICAgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCA5MSwgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAKKyAgICAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA2LCAxLCAyMTAsIAorICAgIDc1LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxMCwgOTUsIDIsIDI0OCwgCisgICAgNDcsIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgMjQ4LCA0NywgMzMsIDQsIAorICAgIDEsIDIzNSwgMTksIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyMzUsIDE5LCAKKyAgICAyLCA2NywgOTEsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCA5MSwgMzMsIDQsIDEsIDIzNSwgMTksIDIsIDkxLCAzMywgNiwgMSwgCisgICAgMjUyLCAxMzIsIDE3NiwgMzMsIDQsIDEsIDI1MiwgMTMyLCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE1OSwgMiwgMjQ4LCA0NywgCisgICAgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyNDgsIDQ3LCAzMywgNiwgMjcsIDI0NSwgMTU5LCAyNDIsIDI0MywgMzMsIDQsIDI3LCAKKyAgICAyNDUsIDE1OSwgMjQyLCAyNDMsIDMzLCA2LCAxLCAyMjUsIDIyNSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDIyNSwgCisgICAgMjI1LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjU1LCAyOSwgMTYyLCAzMywgNCwgMSwgMjU1LCAyOSwgMTYyLCAKKyAgICAzMywgNiwgMSwgMjQ1LCA5MSwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI0NSwgOTEsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyMTcsIDI0LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjE3LCAyNCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxOCwgMTIzLCAKKyAgICA2OSwgMzMsIDQsIDEsIDIxOCwgMTIzLCA2OSwgMzMsIDYsIDEsIDIxOCwgMTIzLCAxMDQsIDIsIDkxLCAzMywgNCwgMSwgCisgICAgMjE4LCAxMjMsIDEwNCwgMiwgOTEsIDMzLCA2LCAxLCAyNDIsIDU2LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjQyLCA1NiwgCisgICAgMiwgMjQ4LCA0NywgMzMsIDYsIDI3LCAyMTcsIDI0LCAyMTUsIDE3OSwgMzMsIDQsIDI3LCAyMTcsIDI0LCAyMTUsIDE3OSwgCisgICAgMzMsIDYsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyNTAsIDE0MCwgMiwgNjcsIDkxLCAzMywgNCwgMSwgMjUwLCAxNDAsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIyMCwgMzUsIAorICAgIDMzLCA0LCAxLCAyMjAsIDM1LCAzMywgNiwgMSwgMjU1LCAyOSwgMjUwLCAxMzksIDMzLCA0LCAxLCAyNTUsIDI5LCAyNTAsIAorICAgIDEzOSwgMzMsIDYsIDEsIDI1NSwgMjksIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjU1LCAyOSwgMjUwLCAKKyAgICAxNDAsIDIsIDI0OCwgNDcsIDMzLCAxLCAyMjYsIDYyLCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNTQsIDMzLCA0LCAKKyAgICAxLCAyMTAsIDc1LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDEwMywgMzMsIDQsIDEsIDIzNSwgMTksIDIsIAorICAgIDEwMywgMzMsIDYsIDEsIDI0NSwgMTgzLCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDIxNywgNzgsIDMzLCAKKyAgICA2LCAxLCAyNDUsIDE1OSwgMiwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDEwMywgMzMsIDYsIDEsIDI0NSwgMTU5LCAKKyAgICAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDIxNywgNzgsIDMzLCA2LCAxLCAyMzQsIDEzMywgMjUwLCAxMzksIAorICAgIDMzLCA0LCAxLCAyMzQsIDEzMywgMjUwLCAxMzksIDMzLCA2LCAxLCAyNDUsIDE2OCwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIAorICAgIDI0NSwgMTY4LCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgMjI2LCA2MiwgMzMsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTQsIDMzLCAKKyAgICA0LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCAzMywgNiwgMSwgMTE2LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxMTYsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDI3LCAxMTYsIDIzNiwgNjcsIDMzLCA0LCAyNywgMTE2LCAyMzYsIDY3LCAzMywgNiwgMSwgMjM2LCA2OCwgCisgICAgMiwgMjUxLCAxNTQsIDMzLCA0LCAxLCAyMzYsIDY4LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDIyMSwgMTk3LCAzMywgNCwgCisgICAgMSwgMjIxLCAxOTcsIDMzLCA2LCAxLCAyMjEsIDE5OCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjIxLCAxOTgsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIAorICAgIDIxMCwgOTUsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDI1NSwgMjksIDI0NiwgCisgICAgNDQsIDMzLCA0LCAxLCAyNTUsIDI5LCAyNDYsIDQ0LCAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCAzMywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM3LCAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDI0MCwgCisgICAgMTYxLCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxNDQsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDE0NCwgMiwgMjQ4LCA5LCAzMywgCisgICAgNiwgMSwgMjUyLCAxNDIsIDc4LCAzMywgNCwgMSwgMjUyLCAxNDIsIDc4LCAzMywgNiwgMSwgMjUyLCAxNDIsIDE0NCwgMiwgCisgICAgMjQ4LCA5LCAzMywgNCwgMSwgMjUyLCAxNDIsIDE0NCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTYwLCAyLCAyNDgsIDksIDMzLCAKKyAgICA0LCAxLCAxNjAsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzcsIDMzLCA0LCAxLCAxMDQsIDIsIDIzMSwgCisgICAgMjM3LCAzMywgNiwgMSwgMTA0LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxMDQsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDEwNCwgCisgICAgMiwgNTIsIDE0MiwgMzMsIDQsIDEsIDEwNCwgMiwgNTIsIDE0MiwgMzMsIDYsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDksIDMzLCAKKyAgICA0LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNDIsIAorICAgIDI0NCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI0OCwgCisgICAgOSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyMTgsIDEwNSwgMjIsIDEwMywgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMTgsIAorICAgIDEwNSwgMjIsIDEwMywgMzMsIDYsIDEsIDI0MiwgNTYsIDIsIDEwMywgMzMsIDQsIDEsIDI0MiwgNTYsIDIsIDEwMywgMzMsIAorICAgIDYsIDEsIDI0MiwgNTYsIDIsIDkxLCAzMywgNCwgMSwgMjQyLCA1NiwgMiwgOTEsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDgsIAorICAgIDk4LCAzMywgNCwgMSwgMjM0LCAyMCwgMjQ4LCA5OCwgMzMsIDYsIDEsIDIzNCwgMjAsIDI0NywgMTcwLCAzMywgNCwgMSwgCisgICAgMjM0LCAyMCwgMjQ3LCAxNzAsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTAsIDI3LCAzMywgNCwgMSwgMjM0LCAyMCwgMjEwLCAKKyAgICAyNywgMzMsIDYsIDEsIDIzNCwgMjAsIDI0NiwgMzgsIDMzLCA0LCAxLCAyMzQsIDIwLCAyNDYsIDM4LCAzMywgNiwgMSwgCisgICAgMjM0LCAyMCwgMjMyLCAxOTMsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMzIsIDE5MywgMzMsIDYsIDEsIDIzNCwgMjAsIDIyOCwgCisgICAgMTgzLCAzMywgNCwgMSwgMjM0LCAyMCwgMjI4LCAxODMsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTksIDExMSwgMzMsIDQsIDEsIAorICAgIDIzNCwgMjAsIDIxOSwgMTExLCAzMywgNiwgMSwgMjM0LCAyMCwgMjE2LCA2MSwgMzMsIDQsIDEsIDIzNCwgMjAsIDIxNiwgCisgICAgNjEsIDMzLCA2LCAxLCAyMjMsIDUyLCAyMTAsIDk0LCAzMywgNCwgMSwgMjIzLCA1MiwgMjEwLCA5NCwgMzMsIDYsIDEsIAorICAgIDI0NSwgMTgzLCAyLCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE4MywgMiwgMTAzLCAzMywgNiwgMSwgMjMzLCA0LCAzMywgNCwgMSwgCisgICAgMjMzLCA0LCAzMywgNiwgMSwgMjIzLCA0MiwgMzMsIDQsIDEsIDIyMywgNDIsIDMzLCA2LCAxLCAyMTEsIDkyLCAzMywgNCwgCisgICAgMSwgMjExLCA5MiwgMzMsIDYsIDEsIDIyNCwgOTEsIDMzLCA0LCAxLCAyMjQsIDkxLCAzMywgNiwgMSwgMjEyLCAyMiwgMzMsIAorICAgIDQsIDEsIDIxMiwgMjIsIDMzLCA2LCAxLCAyNTQsIDE3NSwgMTc2LCAzMywgNCwgMSwgMjU0LCAxNzUsIDE3NiwgMzMsIDYsIAorICAgIDEsIDI0NSwgMTgzLCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCAKKyAgICA2LCAxLCAyNDUsIDE1OSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyMzAsIDIyOSwgMTAzLCAKKyAgICAzMywgNiwgMSwgMjI1LCAyMjUsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMjUsIDIyNSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIAorICAgIDIyMCwgMzYsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMjAsIDM2LCAyLCAyNDgsIDQ3LCAxNTAsIDYsIDEsIDI1MywgMTcyLCAKKyAgICAxNTAsIDYsIDEsIDI1MiwgNDcsIDE1MCwgNiwgMSwgMjQyLCAyMTAsIDE1MCwgNiwgMSwgMjQ4LCAyMjksIDE1MCwgNiwgMSwgCisgICAgMjQ1LCAyMjEsIDE1MCwgNiwgMSwgMjEwLCAxMTYsIDE1MCwgNiwgMSwgMjQ1LCAyMDUsIDE1MCwgNiwgMSwgMjQ1LCA3MywgCisgICAgMTUwLCA2LCAxLCAxMTIsIDE1MCwgNiwgMSwgMjEwLCA3NCwgMTUwLCA2LCAxLCAyMzUsIDIzNCwgMTUwLCA2LCAxLCAyMzIsIAorICAgIDE5NiwgMTUwLCA2LCAxLCAyMTEsIDE2MCwgMTUwLCA2LCAxLCAyNTEsIDQxLCAxNTAsIDYsIDEsIDIzNCwgMTcxLCAxNTAsIAorICAgIDYsIDEsIDI0MSwgNzUsIDE1MCwgNiwgMSwgMjM1LCAxNDcsIDE1MCwgNiwgMSwgMjQyLCAyNTMsIDE1MCwgNiwgMSwgMjUwLCAKKyAgICAxMzQsIDE1MCwgNiwgMSwgMjMxLCA2MywgMTUwLCA2LCAxLCAyMTEsIDgsIDE1MCwgNiwgMSwgMjI4LCA0NCwgMTUwLCA2LCAKKyAgICAxLCAyMjAsIDEwNCwgMTUwLCA2LCAxLCAyMTMsIDEzOCwgMTUwLCA2LCAxLCAyNTAsIDE2NSwgMTUwLCA2LCAxLCAyMjUsIAorICAgIDIwOCwgMTUwLCA2LCAxLCAyMzUsIDExNiwgMTUwLCA2LCAxLCAyMDUsIDE1MCwgNiwgMSwgMjIxLCAxNjMsIDE1MCwgNiwgMSwgCisgICAgMjEzLCAxNzksIDE1MCwgNiwgMSwgMjE2LCA2MywgMTUwLCA2LCAxLCAyMjMsIDk4LCAxNTAsIDYsIDEsIDI0OSwgMjQ2LCAKKyAgICAxNTAsIDYsIDEsIDIxMCwgMjQ5LCAxNTAsIDYsIDEsIDIyNSwgNDksIDE1MCwgNiwgMSwgMjM0LCAxODIsIDE1MCwgNiwgMSwgCisgICAgMjI2LCAyMjYsIDE1MCwgNiwgMSwgMjQ0LCAxNTAsIDE1MCwgNTgsIDEsIDQzLCAxNjMsIDIyMiwgMjM2LCAxNTAsIDI1NCwgCisgICAgNjUsIDE1MCwgMjQ1LCAxNjIsIDc5LCAxNTAsIDI0NSwgMzksIDc5LCAxNTAsIDI0OSwgMjI3LCAxNTAsIDIyNCwgMTYsIDc5LCAKKyAgICAxNTAsIDI1NSwgMzAsIDc5LCAxNTAsIDQsIDEsIDI1MywgMTcyLCAxNTAsIDQsIDEsIDI1MiwgNDcsIDE1MCwgNCwgMSwgCisgICAgMjQyLCAyMTAsIDE1MCwgNCwgMSwgMjQ4LCAyMjksIDE1MCwgNCwgMSwgMjQ1LCAyMjEsIDE1MCwgNCwgMSwgMjEwLCAxMTYsIAorICAgIDE1MCwgNCwgMSwgMjQ1LCAyMDUsIDE1MCwgNCwgMSwgMjQ1LCA3MywgMTUwLCA0LCAxLCAxMTIsIDE1MCwgNCwgMSwgMjEwLCAKKyAgICA3NCwgMTUwLCA0LCAxLCAyMzUsIDIzNCwgMTUwLCA0LCAxLCAyMzIsIDE5NiwgMTUwLCA0LCAxLCAyMTEsIDE2MCwgMTUwLCAKKyAgICA0LCAxLCAyNTEsIDQxLCAxNTAsIDQsIDEsIDIzNCwgMTcxLCAxNTAsIDQsIDEsIDI0MSwgNzUsIDE1MCwgNCwgMSwgMjM1LCAKKyAgICAxNDcsIDE1MCwgNCwgMSwgMjQyLCAyNTMsIDE1MCwgNCwgMSwgMjUwLCAxMzQsIDE1MCwgNCwgMSwgMjMxLCA2MywgMTUwLCAKKyAgICA0LCAxLCAyMTEsIDgsIDE1MCwgNCwgMSwgMjI4LCA0NCwgMTUwLCA0LCAxLCAyMjAsIDEwNCwgMTUwLCA0LCAxLCAyMTMsIAorICAgIDEzOCwgMTUwLCA0LCAxLCAyNTAsIDE2NSwgMTUwLCA0LCAxLCAyMjUsIDIwOCwgMTUwLCA0LCAxLCAyMzUsIDExNiwgMTUwLCAKKyAgICA0LCAxLCAyMDUsIDE1MCwgNCwgMSwgMjIxLCAxNjMsIDE1MCwgNCwgMSwgMjEzLCAxNzksIDE1MCwgNCwgMSwgMjE2LCA2MywgCisgICAgMTUwLCA0LCAxLCAyMjMsIDk4LCAxNTAsIDQsIDEsIDI0OSwgMjQ2LCAxNTAsIDQsIDEsIDIxMCwgMjQ5LCAxNTAsIDQsIDEsIAorICAgIDIyNSwgNDksIDE1MCwgNCwgMSwgMjM0LCAxODIsIDE1MCwgNCwgMSwgMjI2LCAyMjYsIDE1MCwgNCwgMSwgMjQ0LCAxNTAsIAorICAgIDE1MCwgNCwgMjcsIDI0NSwgMjIyLCAyMTAsIDI0OSwgMTUwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDE1MCwgMjQwLCAxNzUsIAorICAgIDE1MCwgMjQ2LCAxMDMsIDUwLCA5NCwgMjU1LCAyNCwgMjQ1LCA2NSwgOTQsIDI1NSwgMjQsIDIyMSwgMTY0LCA5NCwgMjU1LCAKKyAgICAyNCwgMjIwLCA5MCwgOTQsIDI1NSwgMjQsIDIxMCwgMTA0LCAyMjQsIDc0LCA5NCwgMjU1LCAyNCwgMjEwLCAxMDQsIDI0MywgCisgICAgMTMyLCA5NCwgMjU1LCAyNCwgMjE2LCA3NiwgOTQsIDI1NSwgMjQsIDIyMywgNTAsIDk0LCAyNTUsIDI0LCAyMTAsIDEwMywgCisgICAgOTQsIDI1NSwgMjQsIDIyNSwgMjQ5LCA5NCwgMjU1LCAyNCwgMjExLCAyMCwgOTQsIDI1NSwgMjQsIDIxNiwgMjE1LCA5NCwgCisgICAgMjU1LCAyNCwgMjQzLCA0OCwgOTQsIDI1NSwgMjQsIDI0MywgNDksIDIzMCwgNzQsIDk0LCAyNTUsIDI0LCAyNDMsIDQ2LCAKKyAgICA5NCwgMjU1LCAyNCwgMjI0LCA3NSwgMjI2LCAyMCwgOTQsIDI1NSwgMjQsIDIxNiwgMjU0LCAyNDMsIDYzLCA5NCwgMjU1LCAKKyAgICAyNCwgMjI1LCAyMzAsIDk0LCAyNTUsIDI0LCAyNTMsIDIwOCwgMjQyLCA0OCwgOTQsIDI1NSwgMjQsIDIzMCwgODQsIDk0LCAKKyAgICAyNTUsIDI0LCAyMzEsIDIxMywgOTQsIDI1NSwgMjQsIDIzMSwgNTQsIDk0LCAyNTUsIDI0LCAyMzEsIDU1LCAyMzQsIDE4MywgCisgICAgOTQsIDI1NSwgMjQsIDI0OCwgMTcxLCA5NCwgMjU1LCAyNCwgMjI0LCA4NiwgOTQsIDI1NSwgMjQsIDIxNiwgMjU0LCAyMjQsIAorICAgIDcwLCA5NCwgMjU1LCAyNCwgMjExLCAzMCwgMjUyLCA0OCwgMjEwLCAyMzAsIDk0LCAyNTUsIDI0LCAyMjYsIDIxMSwgOTQsIAorICAgIDI1NSwgMjQsIDIzNiwgMjYsIDk0LCAyNTUsIDI0LCAyNDgsIDc4LCA5NCwgMjU1LCAyNCwgMjEwLCAzMywgOTQsIDE2NCwgCisgICAgMjMxLCAxNDgsIDI1MCwgNDMsIDk0LCAyMjUsIDE0LCAyMjAsIDM4LCA5NCwgMjI1LCAxNCwgMjQyLCAxLCAyMjEsIDE2NCwgCisgICAgOTQsIDIyNSwgMTQsIDI0MiwgMSwgMjI1LCAyNDMsIDk0LCAyMjUsIDE0LCAyNDIsIDEsIDIyNCwgNzksIDk0LCAyMjUsIDE0LCAKKyAgICAyNDEsIDE2NSwgOTQsIDIyNSwgMTQsIDIxNSwgMTc3LCA5NCwgMjI1LCAxNCwgMjIxLCAxNjQsIDk0LCAyMjUsIDE0LCAyMjUsIAorICAgIDI0MywgOTQsIDIyNSwgMTQsIDIyNCwgNzksIDk0LCAyMjUsIDE0LCAyNDEsIDY4LCA5NCwgMjI1LCAxNCwgMjQxLCA2OSwgCisgICAgMjQyLCAzLCAzMSwgMjE0LCAzLCA5NCwgMjI1LCAxNCwgMjI0LCAyMCwgOTQsIDIyNSwgMTQsIDI0OCwgMjE2LCAxNzcsIAorICAgIDIzMSwgMTc2LCA5NCwgMjI1LCAxNCwgMjMxLCA0MywgOTQsIDIyNCwgMTQ0LCAyMzEsIDE3MywgOTQsIDIyNSwgMTQsIDIyMywgCisgICAgMTcyLCA5NCwgMjI0LCAxNDQsIDIyNSwgMjUxLCA5NCwgMjI1LCAxNCwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAyMjUsIDE0LCAKKyAgICAyMTksIDE2MSwgMjQ3LCAxMjgsIDk0LCAyMjQsIDE0NCwgMjE5LCA1NSwgMjI1LCAyNDUsIDk0LCAxNjQsIDIxNCwgMTYwLCAKKyAgICAyNDcsIDEyOCwgOTQsIDE2NCwgMjMyLCAxMTQsIDI0NywgMTI4LCA5NCwgMjI0LCAxNDQsIDIyNywgMTk5LCAyNDIsIDQ3LCAKKyAgICA5NCwgMjI1LCAxNCwgMjI0LCA4MCwgMjI0LCA3NCwgOTQsIDEsIDI1NCwgMTc5LCA5NCwgMSwgMjUyLCAzNiwgOTQsIDEsIAorICAgIDI0MiwgMjA4LCA5NCwgMSwgMjQ4LCAxOTcsIDk0LCAxLCAyNDEsIDI0NSwgOTQsIDEsIDIxNCwgMywgOTQsIDEsIDIxMCwgCisgICAgOTcsIDk0LCAxLCAyNDEsIDIwNCwgOTQsIDEsIDIxNiwgMjMxLCA5NCwgMSwgMjEwLCAyMzMsIDk0LCAxLCA0MCwgMjM1LCAwLCAKKyAgICA5NCwgMSwgMjM1LCAwLCA5NCwgMSwgMjMzLCAxMDAsIDk0LCAxLCA0MCwgMjMxLCA3MCwgOTQsIDEsIDIzMSwgNzAsIDk0LCAKKyAgICAxLCA0MCwgMjI3LCAxOTgsIDk0LCAxLCAyMjcsIDE5OCwgOTQsIDEsIDIyMSwgMjUxLCA5NCwgMSwgMjUzLCAxNzAsIDk0LCAKKyAgICAxLCA0MCwgMjI1LCAyMjQsIDk0LCAxLCAyMjUsIDIyNCwgOTQsIDEsIDQwLCAyMTUsIDE4MCwgOTQsIDEsIDIxNSwgMTgwLCAKKyAgICA5NCwgMSwgMjI0LCA0MiwgOTQsIDEsIDIyMywgNzAsIDk0LCAxLCAyMjAsIDIyLCA5NCwgMSwgMjE3LCAzOSwgOTQsIDI3LCAKKyAgICAyMTEsIDYsIDUyLCAyMTQsIDMsIDk0LCAyNywgMjExLCA2LCAyMTQsIDQsIDIxMCwgMjMzLCA5NCwgMjcsIDIxMSwgNiwgNTIsIAorICAgIDIxMCwgMjMzLCA5NCwgMjI0LCAxNDQsIDI0MywgNDgsIDk0LCAyMjQsIDE0NCwgMjQzLCA0NiwgOSwgNTQsIDUwLCA5LCA1LCAKKyAgICAyMjEsIDI0NCwgOSwgMjQ0LCAzOCwgMjMxLCAxNTksIDksIDUsIDIyMiwgMjUsIDksIDUsIDIyMSwgMjQ3LCAyNTQsIDQ1LCAKKyAgICAyNDksIDExNywgMjIyLCAxOTUsIDI1NCwgNDUsIDI0NCwgMTIsIDIyMiwgMTk1LCA5LCAyMjMsIDEzNywgMjU0LCA0NSwgCisgICAgMjI1LCAxODYsIDIzMCwgMTk4LCA1MCwgMjU0LCA0NSwgMjI1LCAxODYsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgNTAsIDI1NCwgCisgICAgMjMwLCA1MCwgOSwgMjQ5LCAyMjcsIDksIDI0OCwgMTU4LCAyMjAsIDEzOSwgOSwgMjI1LCAxNiwgMjEzLCAyNDEsIDUwLCA5LCAKKyAgICA1LCAyMzAsIDE3OSwgOSwgNSwgMjIyLCA1LCAyNTQsIDE4MSwgMjEyLCA0NSwgOSwgNSwgMjU0LCAxODEsIDI1MywgMjI5LCAKKyAgICA5LCA1LCAyMjMsIDE3MCwgMjU0LCAxODAsIDksIDUsIDIyMywgMTc4LCAyNTQsIDE2MSwgMjU0LCAxMTIsIDksIDUsIDIxNywgCisgICAgNzEsIDksIDQsIDEyNSwgMjE3LCA4MSwgOSwgNCwgMTI1LCAyNywgMTA5LCAyLCAyMzMsIDEwOSwgMiwgMjExLCA0MywgOSwgCisgICAgNCwgMTI1LCAyMTAsIDEwOCwgOSwgNCwgMjQ0LCAxNzMsIDksIDQsIDI0OCwgMTkyLCA5LCA0LCAyMzQsIDIxMSwgOSwgMjIwLCAKKyAgICAxNTIsIDksIDEsIDc5LCA5LCAyMTUsIDIxMiwgNTksIDIyNCwgMTQ0LCA3OSwgOSwgMjI0LCAxNiwgNzksIDksIDEsIDIzNCwgCisgICAgMjE1LCAyMTEsIDQzLCA5LCAxLCAyNDIsIDI2LCA5LCAxLCAxMDksIDIsIDIzMSwgMjMzLCA0OCwgOSwgMSwgMTA5LCAyLCAKKyAgICAxODIsIDQ4LCA5LCAxLCAyMTIsIDMxLCAyLCAxODIsIDQ4LCA5LCAxLCAxMDksIDIsIDE4MiwgNTEsIDksIDEsIDc3LCAyLCAKKyAgICAxODIsIDQ4LCA5LCAxLCAyNTQsIDE3OSwgOSwgMSwgMjUyLCA2MiwgOSwgMSwgMjE3LCA5LCAyMzEsIDE2OSwgOSwgMSwgCisgICAgMjE3LCA4LCA5LCAxLCAyMTYsIDE5MywgOSwgMSwgMjM1LCAxMjksIDksIDEsIDI0MiwgNDQsIDksIDEsIDIzNCwgMTM1LCA5LCAKKyAgICAxLCAyNDgsIDIwMywgOSwgMSwgMjE2LCAyMDMsIDksIDEsIDIyMywgOTgsIDksIDEsIDIxMCwgMTA4LCA5LCAxLCAyMjEsIAorICAgIDE2OCwgOSwgMSwgMjIwLCA2MSwgOSwgMSwgMjIyLCAyOCwgOSwgMSwgMjQ4LCAyMjQsIDksIDEsIDIxNywgODEsIDksIDEsIAorICAgIDIxMCwgMTExLCA5LCAxLCAyNTQsIDIwNSwgOSwgMSwgMjQyLCAyNTEsIDksIDEsIDIzNCwgMTgxLCAyLCAxMTMsIDE3MCwgCisgICAgNDgsIDksIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjM1LCAyMDAsIAorICAgIDIxNCwgMTA1LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAKKyAgICAxMzQsIDE3MCwgNDgsIDksIDIxNywgNDQsIDksIDEsIDI0NCwgMTUwLCA5LCAxLCAyMjQsIDg0LCA5LCAxLCAyMzUsIDAsIDksIAorICAgIDEsIDIzMywgMTA4LCA5LCAxLCAyMzEsIDgzLCA5LCAxLCAyMjgsIDY3LCA5LCAxLCAyNDEsIDIyNSwgOSwgMSwgMjEyLCAzMCwgCisgICAgOSwgMSwgMTA5LCAyMzEsIDE5NywgOSwgMSwgMjExLCA0MywgOSwgMjQ0LCAxNzEsIDksIDI0OCwgMTkwLCA5LCAyMzQsIAorICAgIDIwOSwgOSwgMjQ0LCAxNzMsIDksIDI0OCwgMTkyLCA5LCAyMzQsIDIxMSwgOSwgMjIwLCA5NSwgOSwgMjE4LCA0NiwgOSwgCisgICAgMjMxLCAyMzEsIDQ4LCA5LCAxODIsIDQ4LCA5LCAxODIsIDUxLCA5LCAyMTgsIDY2LCAyNTQsIDE3OSwgOSwgMjM1LCAyMDAsIAorICAgIDI0OCwgMTkyLCA5LCAxNjQsIDIyOCwgNjgsIDI0MiwgMjI1LCA5LCAyMDksIDI1NSwgOSwgMjUsIDUsIDQsIDIxNCwgMTA2LCAKKyAgICA0OCwgOSwgMjUsIDUsIDIzNSwgMjAwLCA0LCAyMTQsIDEwNiwgNDgsIDksIDI1LCA1LCA1OSwgNTEsIDksIDIyMywgNTIsIAorICAgIDI0OCwgMTkyLCA5LCAyNDQsIDE3NCwgMiwgMTEzLCAyNDcsIDEyNiwgOSwgMjEyLCAzMiwgMTgyLCA1MSwgMjU0LCA0NSwgCisgICAgMjEsIDIxMCwgODYsIDI1NCwgNDUsIDIxLCAxMTEsIDI1NCwgNDUsIDIxLCAxMDUsIDI1NCwgNDUsIDIxLCAxNTgsIDI1NCwgCisgICAgNDUsIDIxLCAxNjEsIDI1NCwgNDUsIDIxLCAxOTAsIDI1NCwgNDUsIDIxLCAxOTUsIDI1NCwgNDUsIDIxLCAxOTksIDI1NCwgCisgICAgNDUsIDIxLCAxOTYsIDI1NCwgNDUsIDIxLCAyMDEsIDksIDIyNSwgMTg1LCA1MCwgOSwgMjQ4LCA5MSwgMjIwLCAxMzksIDksIAorICAgIDIxNiwgMTQ3LCAyMjAsIDEzOSwgOSwgMjQ0LCA4OSwgMjI1LCAxMiwgMjE4LCAxNTgsIDksIDEsIDI0NywgMTI3LCAyNTIsIAorICAgIDYyLCA5LCAxLCAyNDcsIDEyNywgMjI0LCA4NCwgOSwgMSwgMjE4LCAyNCwgMjU0LCAxNzksIDksIDEsIDEwOSwgMjEyLCA0NiwgCisgICAgOSwgMSwgMTA5LCAyLCAyMTIsIDMyLCAxODIsIDQ4LCA5LCAxLCAxMDksIDIsIDIxMiwgMzIsIDE4MiwgNTEsIDksIDEsIAorICAgIDEyNSwgMjQyLCAyNiwgOSwgMSwgMTI1LCAxODIsIDI1NCwgMTc5LCA5LCAxLCAxMjUsIDE4MiwgMjEyLCAzMCwgOSwgMSwgCisgICAgMTA0LCAyLCAxODIsIDQ4LCA5LCAxLCAxMjUsIDE4MiwgMjExLCA0MywgOSwgMSwgMjE1LCAxNDksIDksIDEsIDIxNSwgMTQ3LCAKKyAgICA5LCAxLCAyNTIsIDcyLCA5LCAxLCAyMTcsIDksIDIsIDIyMiwgMjM2LCA5LCAxLCAyMTcsIDksIDIsIDEzNCwgMTcwLCA3MiwgCisgICAgMjQ2LCAxMTEsIDksIDEsIDIyNSwgMjA4LCA5LCAxLCAyMTcsIDYsIDksIDEsIDI1MiwgNjAsIDksIDEsIDEyMiwgMiwgMTgyLCAKKyAgICA0OCwgOSwgMSwgMTIyLCAyLCAxMTMsIDE3MCwgNjcsIDQ4LCA5LCAxLCAyMjcsIDE1NywgOSwgMSwgMjQ2LCA1MSwgOSwgMSwgCisgICAgMTIyLCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIxNywgMjcsIDksIDEsIDIxNywgMjUsIDksIDEsIDI0OCwgMTM4LCA5LCAxLCAKKyAgICAyNDgsIDIwNCwgMiwgMjIyLCAyMzYsIDksIDEsIDI0OCwgMjA0LCAyLCA1OSwgNTEsIDksIDEsIDI0OCwgMjA0LCAyLCA1OSwgCisgICAgMjUyLCA1MSwgMjIsIDQsIDIxNywgODEsIDksIDEsIDI0OCwgMjA5LCA5LCAxLCAyNDgsIDE0MCwgOSwgMSwgMjQ2LCA3OCwgCisgICAgOSwgMSwgMjQ4LCAyMDQsIDIsIDEzNCwgMTcwLCA3MiwgMjQ2LCAxMTEsIDksIDEsIDI0OCwgMjA0LCAyLCAyNDQsIDE5LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyMjIsIDE3MywgOSwgMSwgMjIzLCA5OSwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIyMywgOTksIDIsIAorICAgIDIyMiwgMjM2LCA5LCAxLCAyMjMsIDk5LCAyLCA1OSwgNTEsIDksIDEsIDIyMywgOTksIDIsIDQsIDIxNCwgMTA2LCA1MSwgOSwgCisgICAgMSwgMjIzLCA5OSwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDExMywgMTcwLCA0OCwgCisgICAgOSwgMSwgMjM1LCAxMjYsIDksIDEsIDIyMywgOTksIDIsIDI0NCwgMTksIDE3MCwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAKKyAgICA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjIxLCAxNjksIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjIxLCAxNjksIAorICAgIDIsIDEzNCwgMTcwLCAyNTIsIDUxLCAyMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMjIsIDI5LCAyLCAxMTMsIDE3MCwgNTEsIAorICAgIDksIDEsIDIyMiwgMjksIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjE3LCA4MiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDEsIDI0NCwgMTUxLCAyLCAKKyAgICA1OSwgMjMwLCAxMTQsIDUxLCA5LCAxLCAyNDQsIDE1MSwgMiwgNTksIDUxLCA5LCAxLCAyMTMsIDI0OCwgOSwgMSwgMjQ0LCAKKyAgICAxNTEsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjI1LCAyMDYsIDksIDEsIDIyNCwgODUsIDIsIDU5LCA0OCwgOSwgMSwgCisgICAgMjI0LCA4NSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzQsIDE4MCwgOSwgMSwgMjE3LCAyNTEsIDIzNSwgMCwgOSwgMSwgCisgICAgMjM1LCAxLCAyLCAyMjIsIDIzNiwgOSwgMSwgMjM1LCAxLCAyLCA1OSwgNDgsIDksIDEsIDIyOSwgODQsIDksIDEsIDIzNSwgCisgICAgMSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyNDMsIDEyOSwgOSwgMSwgMjQzLCAxMzAsIDIsIDIyMiwgMjM2LCA5LCAxLCAKKyAgICAyMjksIDcsIDksIDEsIDI0MywgMTMwLCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDI0MiwgMTA4LCA5LCAxLCAyNDMsIDEzMCwgCisgICAgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIzMywgMTA5LCAyLCA1OSwgCisgICAgNDgsIDksIDEsIDIzMywgMTA5LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIzMywgMTA5LCAyLCAxMzQsIDE3MCwgNTEsIDksIAorICAgIDEsIDIyOCwgNjgsIDIsIDU5LCA1MSwgOSwgMSwgMjI4LCA2OCwgMjQyLCAyMjUsIDksIDEsIDIyMiwgMjE2LCA5LCAxLCAKKyAgICAyMjgsIDY4LCAyLCAyMjIsIDIzNiwgOSwgMSwgMjI4LCA2OCwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNDEsIDIyNiwgCisgICAgMjQ3LCAxNDksIDksIDEsIDIxNywgMjgsIDIsIDU5LCA0OCwgOSwgMSwgMjQxLCAyMjYsIDIsIDc3LCA0OCwgOSwgMSwgMjQxLCAKKyAgICAyMjYsIDI0MiwgMTc4LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDIsIDE4MiwgNDgsIDksIDEsIDIxNywgOSwgMjMxLCAKKyAgICAxNzAsIDI0MiwgMTc4LCA5LCAxLCAyMTIsIDMxLCAyLCAyMjIsIDIzNiwgOSwgMSwgMjM0LCA3OSwgMjI2LCAyMzgsIDksIDEsIAorICAgIDIyNiwgMjM4LCA5LCAxLCA2OSwgOSwgMSwgMjEwLCAyMTIsIDksIDEsIDIzNCwgNzksIDIxMCwgMjEyLCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDIxMywgMjU1LCA5LCAxLCAyNDQsIDE3NiwgMjExLCA0MywgOSwgMSwgNzcsIAorICAgIDIsIDIxNywgNzgsIDksIDEsIDc3LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjEyLCAzMSwgMiwgNTksIDQ4LCA5LCAxLCA3NiwgCisgICAgOSwgMSwgNzcsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgNzcsIDI1MiwgMTQwLCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIAorICAgIDE4MiwgNDgsIDksIDI0MywgMjM2LCAyMTgsIDEzMSwgOSwgMSwgMjU0LCAyNTIsIDksIDQsIDEyNSwgMjcsIDIyMiwgMjksIAorICAgIDIsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk3LCA5LCA0LCAxMjUsIDI3LCAyMjQsIDg1LCAyLCAyMzMsIDEwOSwgMiwgCisgICAgMTA5LCAyMzEsIDE5NywgOSwgNCwgMTI1LCA2NiwgNjUsIDE3LCA5LCA0LCAxMjUsIDIzMywgMTA5LCAyNTQsIDE3OSwgOSwgCisgICAgNCwgMTI1LCAyMzUsIDEyOSwgOSwgNCwgMTI1LCAxMzQsIDI0NywgMTI2LCA5LCA0LCAxMjUsIDIyMSwgMTY4LCA5LCAyNDUsIAorICAgIDE1MSwgNjQsIDI1MywgMTc0LCA5LCAyMTgsIDE1NCwgNjQsIDIyMiwgMTQwLCAyNDUsIDE4MywgMjQxLCAxNjIsIDksIDQsIAorICAgIDEyNSwgMjIyLCAxODUsIDIxMCwgODYsIDksIDQsIDEyNSwgMjE0LCAxNTksIDIyMywgMTE4LCAyMTAsIDg2LCA5LCA0LCAKKyAgICAxMjUsIDI0NywgMTI3LCAyNDEsIDI0MywgNjQsIDIzNCwgMTM1LCA5LCA0LCAxMjUsIDY2LCA1MywgMTcsIDksIDQsIDEyMSwgCisgICAgMjIxLCAxNjgsIDksIDQsIDEyNSwgMjMxLCAyMzIsIDksIDQsIDIxMiwgMzAsIDksIDQsIDIxMSwgNDMsIDksIDQsIDEyNSwgCisgICAgMjExLCA0MywgOSwgNCwgMTI1LCAyMjgsIDY3LCA5LCAyMjUsIDQ0LCA2NCwgMjIyLCAxNSwgOSwgMjQ1LCAxNjAsIDI1MCwgCisgICAgMTgzLCAxMjEsIDIxOCwgMTMxLCA5LCAyNDUsIDE2MCwgMjUwLCAxODMsIDEyNSwgMjE4LCAxMzEsIDksIDIyMiwgMTg1LCAKKyAgICAxMjUsIDIxOCwgMTMyLCAyLCAyNDQsIDExMiwgMjUwLCAxODIsIDksIDQsIDEyMSwgMjMxLCA4MywgOSwgMSwgMjQ4LCAyMDQsIAorICAgIDIsIDIzNSwgMjAwLCAyMTQsIDEwNSwgOSwgMSwgMjIzLCA5OSwgMiwgMjM1LCAyMDAsIDIxNCwgMTA1LCAyNDUsIDMwLCAKKyAgICAyNTQsIDQ1LCAyMSwgMjEwLCA4NiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDExMSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIAorICAgIDEwNSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE1OCwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE2MSwgMjQ1LCAzMCwgMjU0LCAKKyAgICA0NSwgMjEsIDE5MCwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE5NSwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDE5OSwgMjQ1LCAKKyAgICAzMCwgMjU0LCA0NSwgMjEsIDE5NiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDIwMSwgOSwgMSwgMjIwLCA2MiwgMiwgNTksIAorICAgIDUxLCA5LCAxLCAyNDgsIDIyNSwgMiwgNTksIDUxLCA5LCAxLCAyNDIsIDI1MiwgMiwgNTksIDUxLCA5LCA1LCAyMTksIDE2MCwgCisgICAgMjU0LCAxMzQsIDksIDUsIDIxOSwgMTYwLCAyMjQsIDIzOCwgMjMxLCA2MywgOSwgMSwgMjQxLCAyMjYsIDIsIDIzNSwgMjAwLCAKKyAgICAyMTQsIDEwNSwgMTgzLCAyNDUsIDE1MSwgNjQsIDIyNiwgMTgsIDE4MywgMjE4LCAyMCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAKKyAgICAxODMsIDIxOCwgNjgsIDI0MywgMjM2LCAyMTgsIDEzMSwgMTgzLCAyMTgsIDIwLCAyNDksIDIzNCwgMTgzLCAyMTgsIDY4LCAKKyAgICAyNDksIDIzNCwgMTgzLCAyMDMsIDI0OSwgMjM0LCAxODMsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTgzLCAyNDksIAorICAgIDIzNSwgMjE5LCAxMDgsIDIyMiwgMjU0LCAxODMsIDIxOCwgMjAsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTgzLCAKKyAgICAyMTgsIDY4LCAyNDksIDIzNSwgMjE5LCAxMDgsIDIyMiwgMjU0LCAxODMsIDI0OSwgMTg4LCAxODMsIDI0MiwgOCwgMjI2LCAKKyAgICAyNTQsIDE4MywgMjQyLCA4LCAyMzEsIDQxLCAxODMsIDI0MiwgOCwgMjUzLCAyMjYsIDE4MywgMjU1LCAzMCwgNzksIDE4MywgCisgICAgMSwgMjU0LCAxODMsIDE4MywgMSwgMjE4LCAyNCwgMjU0LCAxODMsIDE4MywgMSwgMjUyLCAzMywgMTgzLCAxLCAyNDMsIAorICAgIDEyMCwgMTgzLCAxLCAyNDMsIDEyMSwgMjQzLCA5OCwgMTgzLCAxLCAyNDgsIDIwMCwgMTgzLCAxLCAyNDcsIDEyNywgMjQ4LCAKKyAgICAyMDEsIDIyMiwgMjMyLCAxODMsIDEsIDI0MSwgMjQ1LCAxODMsIDEsIDIxMiwgMzAsIDE4MywgMSwgMjEwLCAxMDgsIDE4MywgCisgICAgMSwgMjQxLCAyMDIsIDE4MywgMSwgMjE2LCAyMjcsIDE4MywgMSwgMjE2LCAyMjgsIDI0MywgOTgsIDE4MywgMSwgMjEwLCAKKyAgICAxOTksIDE4MywgMSwgMjEwLCAyMDAsIDI0MSwgMjQ1LCAxODMsIDEsIDIzNCwgMjMxLCAxODMsIDEsIDIzMywgMTA3LCAxODMsIAorICAgIDEsIDIzMCwgMTk1LCAxODMsIDEsIDIyNywgMTk4LCAxODMsIDEsIDIyMCwgMTQ1LCAxODMsIDEsIDQwLCAyMjAsIDE0NSwgCisgICAgMTgzLCAxLCA3NiwgMTgzLCAxLCAyMjUsIDIyNCwgMTgzLCAxLCAyMjMsIDUyLCAyMjUsIDIyNCwgMTgzLCAxLCAyMjIsIDI2LCAKKyAgICAxODMsIDEsIDIyNCwgNzgsIDE4MywgMSwgMjIyLCAyMzIsIDE4MywgMSwgMjIwLCAyMiwgMTgzLCAxLCAyMTcsIDM3LCAxODMsIAorICAgIDEsIDIyNSwgMTcyLCAyNTIsIDIwLCAxODMsIDEsIDIyNSwgMTcyLCAyNDIsIDI0OSwgMTgzLCAxLCAyMjUsIDE3MiwgMjQ4LCAKKyAgICAyOCwgMTgzLCAyMjQsIDE1NCwgNDgsIDE4MywgMjI0LCAxNTQsIDUxLCAxODMsIDIyNCwgMTU0LCAyNDYsIDEyNSwgMTgzLCAKKyAgICAyMTAsIDE3LCA0OCwgMTgzLCAyMTAsIDE3LCA1MSwgMTgzLCAyMTAsIDE3LCAyNDYsIDEyNSwgMTgzLCAyMjMsIDEzNCwgNDgsIAorICAgIDE4MywgMjIzLCAxMzQsIDUxLCAxODMsIDI0NiwgMTI2LCAyMTAsIDI0LCAyNDEsIDUxLCAxODMsIDI0NiwgMTI2LCAyMTAsIAorICAgIDI0LCAyNTQsIDExMywgMTgzLCAyNDEsIDI0OCwgNDgsIDE4MywgMjQxLCAyNDgsIDUxLCAxODMsIDI0MSwgMjQ3LCAyNDYsIAorICAgIDEyNSwgMTgzLCAyNDUsIDg3LCA0OCwgMTgzLCAyNDUsIDg3LCA1MSwgMTgzLCAyMjIsIDEwOSwgMTgzLCAyNDQsIDE0NCwgCisgICAgMjQ3LCAxMjgsIDE4MywgMjIzLCAyNTEsIDE4MywgMjIyLCAxMzYsIDE4MywgMTEzLCA2NywgMTcwLCA0OCwgMTgzLCAxMTMsIAorICAgIDY3LCAxNzAsIDUxLCAxODMsIDEzNCwgMTcwLCA0OCwgMTgzLCAxMzQsIDE3MCwgNTEsIDE4MywgMjI2LCAyNTIsIDIzMiwgCisgICAgMjIwLCA0OCwgMTgzLCAyMjYsIDI1MiwgMjMyLCAyMjAsIDUxLCAxODMsIDIzMCwgNjEsIDE4MywgMjUyLCAxMzksIDE4MywgCisgICAgMSwgMjE5LCA1MSwgMjEwLCA4MCwgMTgzLCAxLCAyMTksIDUxLCAyMzQsIDEyOCwgMTgzLCAxLCAyMTksIDUxLCAyNDQsIAorICAgIDE2MiwgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDI0MSwgMSwgNTEsIDksIDEsIDI1MiwgNjMsIDIsIDU5LCAyNTIsIAorICAgIDUxLCAyMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCAKKyAgICA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDI1MiwgNTEsIDIyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDI1MiwgNjMsIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyNTIsIDYzLCAyLCAyMzUsIAorICAgIDIwMCwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAyNTIsIDYzLCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMTIyLCAyLCAxMTMsIAorICAgIDE3MCwgNDgsIDksIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgOSwgMSwgMjQ4LCAyMDQsIAorICAgIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgMjUyLCA1MSwgMjIsIDQsIDIxNywgODEsIDksIDEsIDI0OCwgMjA0LCAyLCAyMzUsIAorICAgIDIwMCwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAyMjMsIDk5LCAyLCA5MSwgOSwgMSwgMjIxLCAxNjksIDIsIDI0NCwgMTksIAorICAgIDE3MCwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMzQsIDE3MCwgCisgICAgMjI1LCAxMCwgMjQ2LCAxMTIsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgCisgICAgMjQ0LCAxNTEsIDIsIDExMywgMTcwLCA1MSwgOSwgMSwgMjQ0LCAxNTEsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIAorICAgIDE1MywgNTEsIDksIDEsIDIzNCwgMTgxLCAyLCA1OSwgNDgsIDksIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgNDgsIDksIAorICAgIDEsIDIzNCwgMTgxLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCA5LCAxLCA2NiwgMiwgNTksIDQ4LCA5LCAKKyAgICAxLCA2NiwgMiwgNTksIDUxLCA5LCAxLCAyMjgsIDY4LCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDIyOCwgNjgsIDIsIDQsIAorICAgIDIxNywgODEsIDksIDEsIDIyOCwgNjgsIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTMwLCA5LCAxLCAKKyAgICAyMjMsIDk5LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAxODIsIDQ4LCA5LCAxLCAyMjEsIAorICAgIDE2OSwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCA1MSwgOSwgMSwgCisgICAgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCAyMiwgMTEzLCAyNDcsIDEyNiwgOSwgMSwgMjIxLCAxNjksIDIsIDQsIDksIDEsIAorICAgIDIxNywgODIsIDIyLCAxMTMsIDI0NywgMTI2LCA5LCAxLCAyMjMsIDk5LCAyLCA0LCA5LCAxLCAyMTcsIDgyLCAyMiwgMTEzLCAKKyAgICAyNDcsIDEyNiwgOSwgMSwgMTIyLCAyLCA0LCA5LCAxLCAyMTcsIDgyLCA0OCwgOSwgMSwgMTA5LCAyLCAyNDUsIDMwLCAyNTQsIAorICAgIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMTA5LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgMjQ0LCAKKyAgICAxNzYsIDc3LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyNDUsIAorICAgIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgCisgICAgMjQ0LCAxOSwgNTEsIDksIDEsIDIxMiwgMzEsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCA0OCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAyNDUsIDMwLCAKKyAgICAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTM0LCAKKyAgICA0OCwgOSwgMSwgMTIyLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjQ0LCAxOSwgNTEsIDksIDEsIDIyMSwgMTY5LCAyLCAKKyAgICAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjQ0LCAxOSwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAyMzUsIDIwMCwgMjE0LCAxMDUsIAorICAgIDksIDEsIDIzNSwgMSwgMiwgMTEzLCAxNzAsIDQ4LCAyMTYsIDIwNiwgMSwgMjQyLCA1MywgMjE2LCAyMDYsIDEsIDIyMCwgCisgICAgNzAsIDIxNiwgMjA2LCAxLCAyMjgsIDY2LCAyMTYsIDIwNiwgMSwgMjIzLCAxODcsIDIxNiwgMjA2LCAxLCAyNTIsIDE5NywgCisgICAgMjE2LCAyMDYsIDEsIDIzMywgMSwgMjE2LCAyMDYsIDEsIDIzNSwgMTQsIDIxNiwgMjA2LCAxLCAyNTQsIDE2OCwgMjE2LCAKKyAgICAyMDYsIDEsIDIxNCwgMjUsIDIxNiwgMjA2LCAxLCAyMzEsIDgyLCAyMTYsIDIwNiwgMSwgMjQ0LCAyMDIsIDIxNiwgMjA2LCAKKyAgICAxLCAyNDgsIDMxLCAyMTYsIDIwNiwgMSwgMjE2LCAyMDgsIDIxNiwgMjA2LCAxLCAyMzMsIDEzNywgMjE2LCAyMDYsIDEsIAorICAgIDI0MywgMTM4LCAyMTYsIDIwNiwgMSwgMjQyLCAxODQsIDIxNiwgMjA2LCAxLCAyMjEsIDE2NywgMjE2LCAyMDYsIDEsIDI0OCwgCisgICAgMTU2LCAyMTYsIDIwNiwgMSwgMjEwLCAxMDAsIDIxNiwgMjA2LCAxLCAyMTcsIDM4LCAyMTYsIDIwNiwgMSwgMjExLCAxMDMsIAorICAgIDIxNiwgMjA2LCAxLCAyMjUsIDIzNywgMjE2LCAyMDYsIDEsIDIzNSwgMTM0LCAyMTYsIDIwNiwgMSwgMjUwLCAxNDIsIDIxNiwgCisgICAgMjA2LCAxLCAyMTUsIDE1NiwgMjE2LCAyMDYsIDEsIDI0MSwgMTk1LCAyMTYsIDIwNiwgMSwgMjM0LCAxMzcsIDIxNiwgMjA2LCAKKyAgICAxLCAyMTYsIDIwNywgMjE2LCAyMDYsIDEsIDIxMCwgMTE1LCAyMTYsIDIwNiwgMSwgMjIwLCA2MCwgMjE2LCAyMDYsIDEsIAorICAgIDIyMiwgMzIsIDIxNiwgMjA2LCAxLCAyNDgsIDIyNywgMjE2LCAyMDYsIDEsIDExMiwgMjE2LCAyMDYsIDEsIDIxMCwgMjMsIAorICAgIDIxNiwgMjA2LCAxLCAyNTQsIDIwMiwgMjE2LCAyMDYsIDEsIDI0MiwgMjUwLCAyMTYsIDIwNiwgMSwgMjI0LCA4OCwgMjE2LCAKKyAgICAyMDYsIDEsIDIxMiwgNjMsIDIxNiwgMjA2LCAyNTUsIDMxLCAyMTYsIDIwNiwgMjU1LCA0NywgMjE2LCAyMDYsIDI0MCwgCisgICAgMTIxLCAyMTYsIDIwNiwgMjQ1LCAyMTYsIDIxNiwgMjA2LCAyMTQsIDIyMiwgMjE2LCAyMDYsIDIyNiwgMTg2LCAyMTYsIAorICAgIDIwNiwgMjQ1LCAyMjQsIDIxNiwgMjA2LCAyNDUsIDI0LCAyMTYsIDIwNiwgMjI2LCAyNTEsIDIxNiwgMjA2LCAyMjcsIDMsIAorICAgIDIxNiwgMjA2LCAyMTgsIDQ2LCAyMTYsIDIwNiwgMSwgMjI5LCAyMzAsIDIyOCwgMTQyLCAyMSwgMjEwLCA4NiwgMjI4LCAKKyAgICAxNDIsIDIxLCAxMTEsIDIyOCwgMTQyLCAyMSwgMTA1LCAyMjgsIDE0MiwgMjEsIDE1OCwgMjI4LCAxNDIsIDIxLCAxNjEsIAorICAgIDIyOCwgMTQyLCAyMSwgMTkwLCAyMjgsIDE0MiwgMjEsIDE5NSwgMjI4LCAxNDIsIDIxLCAxOTksIDIyOCwgMTQyLCAyMSwgCisgICAgMTk2LCAyMjgsIDE0MiwgMjEsIDIwMSwgMjI4LCAxNDIsIDEsIDYxLCAyMjgsIDE0MiwgMSwgMjQ1LCAyMTcsIDIyOCwgMTQyLCAKKyAgICAxLCA3NCwgMjI4LCAxNDIsIDEsIDc2LCAyMjgsIDE0MiwgMSwgNjksIDIyOCwgMTQyLCAxLCAyMjYsIDE4NywgMjI4LCAxNDIsIAorICAgIDEsIDc4LCAyMjgsIDE0MiwgMSwgMjQ4LCAyMTcsIDIyOCwgMTQyLCAxLCAyMzAsIDMwLCAyMjgsIDE0MiwgMSwgMjUyLCAKKyAgICAxOTksIDIyOCwgMTQyLCAxLCAxOTEsIDIyOCwgMTQyLCAxLCAyMTcsIDEwNiwgMjI4LCAxNDIsIDEsIDIzNSwgMTQ3LCAyMjgsIAorICAgIDE0MiwgMSwgMjUwLCAxNjUsIDIyOCwgMTQyLCAxLCAyNDgsIDIyOSwgMjI4LCAxNDIsIDEsIDIwNSwgMjI4LCAxNDIsIDEsIAorICAgIDIyMiwgMTgxLCAyMjgsIDE0MiwgMSwgMjA2LCAyMjgsIDE0MiwgMSwgMjQzLCA4NiwgMjI4LCAxNDIsIDEsIDI0NCwgMjA0LCAKKyAgICAyMjgsIDE0MiwgMSwgMTc2LCAyMjgsIDE0MiwgMSwgMjMzLCAxNDEsIDIyOCwgMTQyLCAxLCAyMjksIDIzNCwgMjExLCAyMjMsIAorICAgIDIyOCwgMTQyLCAxLCAxODYsIDIyOCwgMTQyLCAxLCAyMjcsIDE2OSwgMjI4LCAxNDIsIDEsIDE5OCwgMjI4LCAxNDIsIDEsIAorICAgIDE2MiwgMjI4LCAxNDIsIDEsIDIxMiwgNjUsIDIyOCwgMTQyLCAxLCAxOTIsIDIyOCwgMTQyLCAxLCAyMjcsIDE3MCwgMjExLCAKKyAgICAyMjMsIDIyOCwgMTQyLCAxLCAyMzUsIDY3LCAyMzUsIDE0NywgMjI4LCAxNDIsIDEsIDIzNSwgNjcsIDI1MCwgMTY1LCAyMjgsIAorICAgIDE0MiwgMSwgMjM1LCA2NywgMjA1LCAyMjgsIDE0MiwgMzgsIDIxOSwgMjUzLCAxMjUsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgCisgICAgMjE5LCAyNTMsIDEyMSwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMTksIDI1MywgMjIyLCAyMzEsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjAwLCAyNDgsIDQ2LCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIwMCwgMTI1LCAyMTYsIDMxLCAyMjgsIAorICAgIDE0MiwgMzgsIDIwMCwgMTIxLCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIwMCwgMjIyLCAyMzEsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjI5LCAxOTgsIDc5LCAyMjgsIDE0MiwgMzgsIDUyLCA1OSwgNDgsIDIyOCwgMTQyLCAxMjUsIDEzOCwgMjU0LCAKKyAgICA2NSwgMjI4LCAxNDIsIDEyMSwgMTM4LCAyNTQsIDY1LCAyMjgsIDE0MiwgMTYsIDIyNiwgMTg4LCAyNDgsIDU4LCAyMjgsIAorICAgIDE0MiwgMTYsIDI0MywgODUsIDIyOCwgMTQyLCAyNDksIDIyNywgMjI4LCAxNDIsIDI0NSwgMzksIDc5LCAyMjgsIDE0MiwgCisgICAgMjMzLCAxMTQsIDIyMSwgMjU0LCAxLCAyNTQsIDE4NSwgMjIxLCAyNTQsIDEsIDI1MSwgMjM2LCAyMjEsIDI1NCwgMSwgMjQzLCAKKyAgICAxMTksIDIyMSwgMjU0LCAxLCAyNDgsIDIwMiwgMjIxLCAyNTQsIDEsIDIzNSwgMTU4LCAyMjEsIDI1NCwgMSwgMjUyLCAxOTcsIAorICAgIDIyMSwgMjU0LCAxLCAyMTAsIDg5LCAyMjEsIDI1NCwgMSwgMjM1LCAxNjYsIDIyMSwgMjU0LCAxLCAyMTYsIDY4LCAyMjEsIAorICAgIDI1NCwgMSwgMjEwLCAxODIsIDIyMSwgMjU0LCAxLCAyMzUsIDE1LCAyMjEsIDI1NCwgMSwgMjMzLCAxMzQsIDIyMSwgMjU0LCAKKyAgICAxLCAyMzAsIDE5NSwgMjIxLCAyNTQsIDEsIDIyNywgMTk4LCAyMjEsIDI1NCwgMSwgMjE5LCAxNTgsIDIyMSwgMjU0LCAxLCAKKyAgICAyMzYsIDYsIDIyMSwgMjU0LCAxLCAyNDQsIDEyOSwgMjIxLCAyNTQsIDEsIDIxNSwgMTgyLCAyMjEsIDI1NCwgMSwgMjI0LCAKKyAgICAxMywgMjIxLCAyNTQsIDEsIDIyMiwgMjMyLCAyMjEsIDI1NCwgMSwgMjIwLCA4NywgMjIxLCAyNTQsIDEsIDIxNywgMTAxLCAKKyAgICAyMjEsIDI1NCwgMTY0LCAyMzYsIDYsIDIyMSwgMjU0LCAxNjQsIDIzNiwgNSwgMjIxLCAyNTQsIDE2NCwgMjI2LCAyNDcsIAorICAgIDIyMSwgMjU0LCAxNjQsIDI0OCwgMjE1LCAyMjEsIDI1NCwgNTgsIDEsIDI0NSwgMTEzLCAyMTAsIDE4MiwgMjIxLCAyNTQsIAorICAgIDE2NCwgMjQ1LCAxMTMsIDIxMCwgMTgyLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNzYsIDIyMSwgMjU0LCAyNSwgNSwgNzYsIAorICAgIDIyMSwgMjU0LCAyNSwgNSwgMjI2LCAxMjIsIDI1NSwgODIsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCAyNTUsIDgyLCAyMjEsIAorICAgIDI1NCwgMjUsIDUsIDI1NSwgODIsIDIyMSwgMjU0LCAyNSwgNSwgMjI2LCAxMjIsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgCisgICAgNjEsIDIyMSwgMjU0LCAyNSwgNSwgNjEsIDIyMSwgMjU0LCA1OCwgMSwgMjE5LCAyNTMsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIAorICAgIDIxOSwgMjUzLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDY5LCAyMjEsIDI1NCwgMjUsIDUsIDY5LCAyMjEsIDI1NCwgCisgICAgNTgsIDEsIDc0LCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNzQsIDIyMSwgMjU0LCAyNSwgNSwgNzQsIDIyMSwgMjU0LCAyNSwgCisgICAgNSwgNzgsIDIyMSwgMjU0LCAyNSwgNSwgMjE4LCA0NiwgMjIxLCAyNTQsIDE2NCwgMjI5LCA5NywgMjIxLCAyNTQsIDIyNCwgCisgICAgMTQ0LCAyMjksIDk3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgMjI3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgMTIyLCAKKyAgICAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1MiwgMTIyLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1MywgMjA5LCAyMjEsIDI1NCwgCisgICAgMjI0LCAxNDQsIDIyMCwgMTAsIDIyMSwgMjU0LCAyNTUsIDMwLCA3OSwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMzEsIDczLCAKKyAgICAyMjQsIDQ4LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIxMCwgMzEsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjI0LCA0OCwgMjIxLCAKKyAgICAyNTQsIDIyNCwgMTQ0LCAyMTAsIDExNCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMTUsIDkwLCAyMjEsIDI1NCwgMjI0LCAxNDQsIAorICAgIDI1NCwgMTcsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjE5LCA1NSwgMjMxLCAxNTAsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjU0LCAKKyAgICAxMDgsIDIzMSwgMTg3LCAxLCAyNDIsIDMxLCAyMzEsIDE4NywgMSwgMjU1LCAzNCwgMjMxLCAxODcsIDEsIDI1NCwgMjI1LCAKKyAgICAyMzEsIDE4NywgMSwgMjU1LCA4LCAyMzEsIDE4NywgMSwgMjU0LCAyMTgsIDIzMSwgMTg3LCAxLCAyMTQsIDEyNCwgMjMxLCAKKyAgICAxODcsIDEsIDI1MywgMTY4LCAyMzEsIDE4NywgMSwgMjM1LCAxNjYsIDIzMSwgMTg3LCAxLCAyNTMsIDIwNiwgMjMxLCAxODcsIAorICAgIDEsIDI1NCwgMTkwLCAyMzEsIDE4NywgMSwgMjU0LCAxOTUsIDIzMSwgMTg3LCAxLCAyNTQsIDE4NywgMjMxLCAxODcsIDEsIAorICAgIDI1NCwgMTQ0LCAyMzEsIDE4NywgMSwgMjU0LCAxMzEsIDIzMSwgMTg3LCAxLCAyNTMsIDI0NSwgMjMxLCAxODcsIDEsIDIzNiwgCisgICAgNiwgMjMxLCAxODcsIDEsIDI1NCwgODAsIDIzMSwgMTg3LCAxLCAyNTMsIDIxNiwgMjMxLCAxODcsIDEsIDI1NCwgNTMsIAorICAgIDIzMSwgMTg3LCAxLCAyNTQsIDQ5LCAyMzEsIDE4NywgMSwgMjUzLCAyMzksIDIzMSwgMTg3LCAxLCAyNTMsIDIxNCwgMjMxLCAKKyAgICAxODcsIDEsIDI0NiwgNjMsIDIzMSwgMTg3LCAxLCAyMzUsIDgsIDIzMSwgMTg3LCAxLCAyNTQsIDIwNSwgMjMxLCAxODcsIAorICAgIDI1NCwgMjMxLCA3OSwgMjMxLCAxODcsIDIxMywgMTM2LCA3OSwgMjMxLCAxODcsIDI0MywgNjAsIDc5LCAyMzEsIDE4NywgCisgICAgMjI0LCAxNDMsIDksIDEsIDI1MiwgNjMsIDIsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMTUxLCAyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDIxNywgODIsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjQ0LCAxNTEsIDIsIDU5LCAyNTIsIDUxLCAyMiwgMTM0LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyMjQsIDg1LCAyLCA1OSwgNTEsIDksIDEsIDIzMywgMTA5LCAyLCA1MiwgMTMwLCA5LCAxLCA2NiwgCisgICAgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCA3NywgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCAxODIsIDQ4LCA5LCAxLCA3NywgCisgICAgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDIzMiwgMTI5LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCA1OSwgMjExLCAyMzEsIDksIDEsIDIyMiwgMjAzLCAyMTEsIDQzLCA5LCAyNDksIDEwNywgMjQ0LCAxNzMsIDksIAorICAgIDI0OSwgMTA3LCAyNDgsIDE5MiwgOSwgMjQ5LCAxMDcsIDIzNCwgMjExLCA5LCAyNDksIDEwNywgMjQ0LCAxNzEsIDksIDI0OSwgCisgICAgMTA3LCAyNDgsIDE5MCwgOSwgMjQ5LCAxMDcsIDIzNCwgMjA5LCA5LCAxMzgsIDEyMywgNTksIDQ4LCA5LCAxMzgsIDExMywgCisgICAgMTcwLCA0OCwgOSwgMTM4LCAyMzIsIDEzMCwgNDgsIDksIDEzOCwgMTIzLCA1OSwgNTEsIDksIDEzOCwgMTEzLCAxNzAsIDUxLCAKKyAgICA5LCAxMzgsIDIzMiwgMTMwLCA1MSwgOSwgMjA0LCAyNDQsIDE3MSwgOSwgMjA0LCAyNDgsIDE5MCwgOSwgMjA0LCAyMzQsIAorICAgIDIwOSwgOSwgNCwgMTI1LCAyMTIsIDMwLCA5LCAyNDQsIDE3NCwgMiwgMjIyLCAyMzYsIDksIDI0NCwgMTc0LCAyLCA1OSwgCisgICAgNDgsIDksIDIzNCwgMjEyLCAyLCA1OSwgNTEsIDksIDQzLCAyNTQsIDIsIDQ4LCA5LCA0NCwgMjU0LCAyLCA0OCwgOSwgNDMsIAorICAgIDI1NCwgMiwgNTEsIDksIDQ0LCAyNTQsIDIsIDUxLCA5LCA1MiwgNDQsIDI1NCwgMiwgNDgsIDksIDUyLCA0NCwgMjU0LCAyLCAKKyAgICA3MiwgMiwgMjQ3LCAxMjgsIDksIDQ0LCAyNTQsIDIsIDcyLCAyLCAyNDcsIDEyOCwgOSwgMjQ4LCAxOTMsIDIsIDI0NywgCisgICAgMTI4LCA4NCwgNSwgMjM1LCAyMDAsIDI1MSwgNywgODQsIDUsIDI1MSwgNywgODQsIDUsIDI1NCwgODMsIDg0LCA1LCAyMTMsIAorICAgIDE0NywgODQsIDEsIDIxOSwgMjUzLCA2MSwgODQsIDEsIDYxLCA4NCwgMSwgMjU1LCA4MiwgODQsIDEsIDc0LCA4NCwgMSwgCisgICAgMjM2LCA0MCwgODQsIDEsIDY5LCA4NCwgMSwgMjE0LCAxMTgsIDg0LCAxLCAxNDksIDE1MywgODQsIDEsIDE0OSwgMTU2LCAKKyAgICA4NCwgMSwgMjUxLCAxMCwgNzYsIDg0LCAxLCAyMTksIDI1MywgNzYsIDg0LCAxLCA3NiwgODQsIDEsIDI1NCwgMjEwLCA4NCwgCisgICAgMSwgMjUxLCAxMCwgNzgsIDg0LCAxLCAyMTksIDI1MywgNzgsIDg0LCAxLCA3OCwgODQsIDEsIDI1MywgMjAwLCA4NCwgMSwgCisgICAgMTc2LCA4NCwgMSwgMjM0LCAxMzgsIDg0LCAxLCAyNDMsIDE0MiwgODQsIDEsIDI0MywgMCwgODQsIDEsIDIyOSwgODIsIDg0LCAKKyAgICAxLCAyNTEsIDQxLCA4NCwgMSwgMjUwLCAxNjUsIDg0LCAxLCAyMzUsIDE0NywgODQsIDEsIDIzNSwgMTIwLCA4NCwgMSwgCisgICAgMjI3LCAxNjksIDg0LCAxLCAyMTUsIDE1NywgODQsIDEsIDIxNSwgMTQ1LCA4NCwgMSwgMjQ4LCAxNDMsIDg0LCAxLCAyNDgsIAorICAgIDEyNywgODQsIDEsIDIyOCwgMTE1LCA4NCwgMSwgMjE3LCAxMDYsIDg0LCAxLCAyMTYsIDIwOSwgODQsIDEsIDI0OCwgMjI5LCAKKyAgICA4NCwgMSwgMjQ4LCAzMywgODQsIDEsIDE5OCwgODQsIDEsIDIyOCwgOTcsIDg0LCAxLCAxOTEsIDg0LCAxLCAyMjUsIDE1MCwgCisgICAgODQsIDEsIDI1MiwgMTk5LCA4NCwgMSwgMjUyLCAyNiwgODQsIDEsIDE4NiwgODQsIDEsIDE5MiwgODQsIDEsIDIwNSwgODQsIAorICAgIDEsIDIyMiwgMTgxLCA4NCwgMSwgMjMzLCAxNDEsIDg0LCAxLCAyMzIsIDE5MCwgODQsIDEsIDIzMiwgMTgxLCA4NCwgMSwgCisgICAgMjE0LCAyNywgODQsIDEsIDIyMCwgMTA0LCA4NCwgMSwgMjE4LCAyMjUsIDg0LCAxLCAyMDYsIDg0LCAxLCAxNjIsIDg0LCAKKyAgICAyNSwgNSwgMjI2LCAyMzgsIDg0LCAyNSwgNSwgMjI2LCAxODUsIDg0LCA1LCAyMjcsIDIwOSwgODQsIDUsIDI1MywgMTgzLCAKKyAgICA4NCwgMjUsIDUsIDI1NSwgODIsIDg0LCAyNSwgNSwgNzQsIDg0LCAyNSwgNSwgMjM2LCA0MCwgODQsIDI1LCA1LCA2OSwgODQsIAorICAgIDI1LCA1LCAyMTQsIDExOCwgODQsIDI1LCA1LCAxNDksIDE1MywgODQsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA4NCwgMjUsIAorICAgIDUsIDI1MSwgMTAsIDc2LCA4NCwgMjUsIDUsIDIxOSwgMjUzLCA3NiwgODQsIDI1LCA1LCA3NiwgODQsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgODQsIDI1LCA1LCAyNTEsIDEwLCA3OCwgODQsIDI1LCA1LCAyMTksIDI1MywgNzgsIDg0LCAyNSwgNSwgNzgsIDg0LCAKKyAgICAyNSwgNSwgMjUzLCAyMDAsIDg0LCA1LCAyMTMsIDE1MiwgODQsIDI1LCA1LCAyMjQsIDE4OCwgNzYsIDg0LCAyNSwgNSwgCisgICAgMjUzLCAxNzksIDg0LCAyMjYsIDIwOCwgODQsIDIxOCwgMTEzLCA1LCAyMTQsIDIxNiwgODQsIDIxOCwgMTEzLCA1LCAyNTQsIAorICAgIDg1LCA4NCwgMjQyLCAxNDQsIDI1NSwgMjMsIDg0LCAyNTUsIDEyLCAyNTUsIDIzLCA4NCwgMjUsIDUsIDI1MSwgMTAsIDIwMCwgCisgICAgNzYsIDg0LCAyNSwgNSwgMjE0LCAyMTQsIDg0LCAyNSwgNSwgMjE0LCAxMTcsIDg0LCAxLCAyMjQsIDkxLCA4NCwgMSwgMjM0LCAKKyAgICAxMjEsIDg0LCAxLCAyNDIsIDIzMywgODQsIDEsIDIxMCwgMTE2LCA4NCwgMSwgMjQ4LCAxMzIsIDg0LCAxLCAyMjMsIDQyLCAKKyAgICA4NCwgMSwgMjQ0LCAyMDQsIDg0LCAxLCAyMTAsIDE2OCwgODQsIDEsIDE0OSwgMjIyLCAxODIsIDg0LCAxLCAxNDksIDIzMiwgCisgICAgMTkxLCA4NCwgMjUsIDUsIDE0OSwgMTU2LCA4NCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDg0LCAyNDgsIDE4NiwgODQsIDUyLCAKKyAgICAyNDgsIDE4NiwgODQsIDIxLCAyMTAsIDg2LCA4NCwgMjEsIDExMSwgODQsIDIxLCAxMDUsIDg0LCAyMSwgMTU4LCA4NCwgMjEsIAorICAgIDE2MSwgODQsIDIxLCAxOTAsIDg0LCAyMSwgMTk1LCA4NCwgMjEsIDE5OSwgODQsIDIxLCAxOTYsIDg0LCAyMSwgMjAxLCA4NCwgCisgICAgMjU1LCAzMCwgNTAsIDg0LCA1LCAxMjUsIDIxOSwgMTksIDI0NywgMTI4LCA4NCwgMSwgMjUxLCAxMCwgNjEsIDg0LCAxLCAKKyAgICAyMjYsIDIzOCwgODQsIDEsIDIyNiwgMTg1LCA4NCwgMSwgMjUzLCAxNzksIDg0LCAxLCAyMTQsIDIxNCwgODQsIDEsIDIxNCwgCisgICAgMTE3LCA4NCwgMSwgMjEwLCA4MiwgODQsIDEsIDExNCwgMTkyLCA4NCwgMSwgMjQzLCAzNiwgODQsIDEsIDIzNSwgMTAyLCAKKyAgICA4NCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA4NCwgMSwgMjQ4LCAxMzMsIDg0LCAxLCAyNTIsIDExOSwgMTQ2LCA1LCAyNTEsIAorICAgIDcsIDE0NiwgNSwgMjU0LCA4MywgMTQ2LCA1LCAyMTMsIDE0NywgMTQ2LCAxLCA2MSwgMTQ2LCAxLCAyNTUsIDgyLCAxNDYsIAorICAgIDEsIDc0LCAxNDYsIDEsIDIzNiwgNDAsIDE0NiwgMSwgNjksIDE0NiwgMSwgMjE0LCAxMTgsIDE0NiwgMSwgMTQ5LCAxNTMsIAorICAgIDE0NiwgMSwgMTQ5LCAxNTYsIDE0NiwgMSwgNzYsIDE0NiwgMSwgMjU0LCAyMTAsIDE0NiwgMSwgNzgsIDE0NiwgMSwgMjUzLCAKKyAgICAyMDAsIDE0NiwgMSwgMTc2LCAxNDYsIDEsIDIzNCwgMTM4LCAxNDYsIDEsIDI0MywgMTQyLCAxNDYsIDEsIDI0MywgMCwgCisgICAgMTQ2LCAxLCAyMjksIDgyLCAxNDYsIDEsIDI1MSwgNDEsIDE0NiwgMSwgMjUwLCAxNjUsIDE0NiwgMSwgMjM1LCAxNDcsIAorICAgIDE0NiwgMSwgMjM1LCAxMjAsIDE0NiwgMSwgMjI3LCAxNjksIDE0NiwgMSwgMjE1LCAxNTcsIDE0NiwgMSwgMjE1LCAxNDUsIAorICAgIDE0NiwgMSwgMjQ4LCAxNDMsIDE0NiwgMSwgMjQ4LCAxMjcsIDE0NiwgMSwgMjI4LCAxMTUsIDE0NiwgMSwgMjE3LCAxMDYsIAorICAgIDE0NiwgMSwgMjE2LCAyMDksIDE0NiwgMSwgMjQ4LCAyMjksIDE0NiwgMSwgMjQ4LCAzMywgMTQ2LCAxLCAxOTgsIDE0NiwgMSwgCisgICAgMTkxLCAxNDYsIDEsIDIyNSwgMTUwLCAxNDYsIDEsIDI1MiwgMTk5LCAxNDYsIDEsIDI1MiwgMjYsIDE0NiwgMSwgMTg2LCAKKyAgICAxNDYsIDEsIDE5MiwgMTQ2LCAxLCAyMDUsIDE0NiwgMSwgMjMzLCAxNDEsIDE0NiwgMSwgMjIwLCAxMDQsIDE0NiwgMSwgCisgICAgMjE4LCAyMjUsIDE0NiwgMSwgMjA2LCAxNDYsIDEsIDE2MiwgMTQ2LCA1LCAyMjcsIDIwOSwgMTQ2LCA1LCAyNTMsIDE4MywgCisgICAgMTQ2LCAyNSwgNSwgMjU1LCA4MiwgMTQ2LCAyNSwgNSwgNzQsIDE0NiwgMjUsIDUsIDIzNiwgNDAsIDE0NiwgMjUsIDUsIDY5LCAKKyAgICAxNDYsIDI1LCA1LCAyMTQsIDExOCwgMTQ2LCAyNSwgNSwgMTQ5LCAxNTMsIDE0NiwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE0NiwgMjUsIDUsIDc2LCAxNDYsIDI1LCA1LCAyNTQsIDIxMCwgMTQ2LCAyNSwgNSwgNzgsIDE0NiwgMjUsIDUsIDI1MywgCisgICAgMjAwLCAxNDYsIDUsIDIxMywgMTUyLCAxNDYsIDEsIDIzNCwgMTMwLCAyMTcsIDEwNiwgMTQ2LCAyNTMsIDIwMSwgMjMzLCAKKyAgICAyOSwgNzksIDE0NiwgMSwgMjIyLCAxODEsIDE0NiwgMSwgMjIzLCA0MiwgMTQ2LCAxLCAyMTAsIDE2OCwgMTQ2LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCAxNDYsIDEsIDE0OSwgMjMyLCAxOTEsIDE0NiwgMjUsIDUsIDE0OSwgMTU2LCAxNDYsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxNDYsIDIxLCAyMTAsIDg2LCAxNDYsIDIxLCAxMTEsIDE0NiwgMjEsIDEwNSwgMTQ2LCAyMSwgMTU4LCAKKyAgICAxNDYsIDIxLCAxNjEsIDE0NiwgMjEsIDE5MCwgMTQ2LCAyMSwgMTk1LCAxNDYsIDIxLCAxOTksIDE0NiwgMjEsIDE5NiwgCisgICAgMTQ2LCAyMSwgMjAxLCAxNDYsIDEsIDIyMywgMTkxLCAyLCAyMzAsIDIyOSwgMjQ4LCA2LCAxNDYsIDEsIDIyMywgMTkxLCAyLCAKKyAgICAyMzIsIDExNCwgMjQ4LCA2LCAxNDYsIDIyMiwgMTIwLCA3OSwgMTQ2LCAyMjIsIDEyMCwgNTAsIDE0NiwgMjQ5LCAxMDYsIAorICAgIDIyNywgMjAxLCAxMTEsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxMDUsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAKKyAgICAxNTgsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxNjEsIDE0NiwgMjQ5LCAxMDYsIDIyNywgMjAxLCAxMjMsIDIzMywgMjIsIAorICAgIDIxNiwgMjAyLCAyMTYsIDE5NywgMjQ4LCA1NiwgMTQ2LCAyNDksIDEwNiwgMjQ4LCA1NywgMjE5LCAxMjEsIDE0NiwgMjM1LCAKKyAgICAxNjcsIDE0NiwgMjQzLCAxMTAsIDc5LCAxODUsIDUsIDI1NSwgNywgMjUxLCAyNTEsIDE4NSwgNSwgMjUxLCAyNTEsIDE4NSwgCisgICAgNSwgMjEzLCAxNDcsIDE4NSwgMSwgNjEsIDE4NSwgMSwgMjU1LCA4MiwgMTg1LCAxLCA3NCwgMTg1LCAxLCAyMzYsIDQwLCAKKyAgICAxODUsIDEsIDY5LCAxODUsIDEsIDIxNCwgMTE4LCAxODUsIDEsIDI0NSwgMjE3LCAxODUsIDEsIDI1NCwgMjEwLCAxODUsIDEsIAorICAgIDIyNiwgMTg3LCAxODUsIDEsIDI1MywgMjAwLCAxODUsIDEsIDE3NiwgMTg1LCAxLCAyMzQsIDEzOCwgMTg1LCAxLCAyNDMsIAorICAgIDE0MiwgMTg1LCAxLCAyNDMsIDAsIDE4NSwgMSwgMjI5LCA4MiwgMTg1LCAxLCAyNTEsIDQxLCAxODUsIDEsIDI1MCwgMTY1LCAKKyAgICAxODUsIDEsIDIzNSwgMTQ3LCAxODUsIDEsIDIzNSwgMTIwLCAxODUsIDEsIDIyNywgMTY5LCAxODUsIDEsIDIxNSwgMTU3LCAKKyAgICAxODUsIDEsIDIxNSwgMTQ1LCAxODUsIDEsIDI0OCwgMTQzLCAxODUsIDEsIDI0OCwgMTI3LCAxODUsIDEsIDIyOCwgMTE1LCAKKyAgICAxODUsIDEsIDIxNywgMTA2LCAxODUsIDEsIDIxNiwgMjA5LCAxODUsIDEsIDI0OCwgMjI5LCAxODUsIDEsIDI0OCwgMzMsIAorICAgIDE4NSwgMSwgMTk4LCAxODUsIDEsIDE5MSwgMTg1LCAxLCAyMjUsIDE1MCwgMTg1LCAxLCAyNTIsIDE5OSwgMTg1LCAxLCAKKyAgICAyNTIsIDI2LCAxODUsIDEsIDE4NiwgMTg1LCAxLCAxOTIsIDE4NSwgMSwgMjA1LCAxODUsIDEsIDIzMywgMTQxLCAxODUsIDEsIAorICAgIDIzMiwgMTkwLCAxODUsIDEsIDIxNCwgMjcsIDE4NSwgMSwgMjIwLCAxMDQsIDE4NSwgMSwgMjA2LCAxODUsIDEsIDE2MiwgCisgICAgMTg1LCA1LCAyMjcsIDIwOSwgMTg1LCAyNSwgNSwgMjU1LCA4MiwgMTg1LCAyNSwgNSwgNzQsIDE4NSwgMjUsIDUsIDIzNiwgCisgICAgNDAsIDE4NSwgMjUsIDUsIDY5LCAxODUsIDI1LCA1LCAyMTQsIDExOCwgMTg1LCAyNSwgNSwgMjQ1LCAyMTcsIDE4NSwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxODUsIDI1LCA1LCAyMjYsIDE4NywgMTg1LCAyNSwgNSwgMjUzLCAyMDAsIDE4NSwgNSwgMjEzLCAKKyAgICAxNTIsIDE4NSwgNSwgMjE0LCAyMTgsIDE4NSwgMSwgMjM0LCAxMjEsIDE4NSwgMSwgMjQyLCAyMzMsIDE4NSwgMSwgMjEwLCAKKyAgICAxMTYsIDE4NSwgMSwgMjIyLCAxODEsIDE4NSwgMSwgMjQ0LCAyMDQsIDE4NSwgMjEsIDIxMCwgODYsIDE4NSwgMjEsIDExMSwgCisgICAgMTg1LCAyMSwgMTA1LCAxODUsIDIxLCAxNTgsIDE4NSwgMjEsIDE2MSwgMTg1LCAyMSwgMTkwLCAxODUsIDIxLCAxOTUsIAorICAgIDE4NSwgMjEsIDE5OSwgMTg1LCAyMSwgMTk2LCAxODUsIDIxLCAyMDEsIDE4NSwgMjE2LCA3NSwgMTg1LCAyNTUsIDYsIDE4NSwgCisgICAgMjM1LCAxODUsIDE4NSwgMjE0LCAxNDYsIDE4NSwgMjQ1LCAxODksIDIyNiwgMTkyLCAxODUsIDUsIDIxMSwgNzgsIDE3MSwgCisgICAgNSwgMjUxLCA3LCAxNzEsIDUsIDI1NCwgODMsIDE3MSwgNSwgMjEzLCAxNDcsIDE3MSwgMSwgNjEsIDE3MSwgMSwgMjU1LCAKKyAgICA4MiwgMTcxLCAxLCA3NCwgMTcxLCAxLCAyMzYsIDQwLCAxNzEsIDEsIDY5LCAxNzEsIDEsIDIxNCwgMTE4LCAxNzEsIDEsIAorICAgIDE0OSwgMTUzLCAxNzEsIDEsIDE0OSwgMTU2LCAxNzEsIDI1LCAyNTEsIDEwLCA3NiwgMTcxLCAxLCA3NiwgMTcxLCAxLCAKKyAgICAyNTQsIDIxMCwgMTcxLCAyNSwgMjUxLCAxMCwgNzgsIDE3MSwgMSwgNzgsIDE3MSwgMSwgMjUzLCAyMDAsIDE3MSwgMSwgCisgICAgMTc2LCAxNzEsIDEsIDIzNCwgMTM4LCAxNzEsIDEsIDI0MywgMTQyLCAxNzEsIDEsIDI0MywgMCwgMTcxLCAxLCAyMjksIDgyLCAKKyAgICAxNzEsIDEsIDI1MSwgNDEsIDE3MSwgMSwgMjUwLCAxNjUsIDE3MSwgMSwgMjM1LCAxNDcsIDE3MSwgMSwgMjM1LCAxMjAsIAorICAgIDE3MSwgMSwgMjI3LCAxNjksIDE3MSwgMSwgMjE1LCAxNTcsIDE3MSwgMSwgMjE1LCAxNDUsIDE3MSwgMSwgMjQ4LCAxNDMsIAorICAgIDE3MSwgMSwgMjQ4LCAxMjcsIDE3MSwgMSwgMjI4LCAxMTUsIDE3MSwgMSwgMjE3LCAxMDYsIDE3MSwgMSwgMjE2LCAyMDksIAorICAgIDE3MSwgMSwgMjQ4LCAyMjksIDE3MSwgMSwgMjQ4LCAzMywgMTcxLCAxLCAxOTgsIDE3MSwgMSwgMTkxLCAxNzEsIDEsIDIyNSwgCisgICAgMTUwLCAxNzEsIDEsIDI1MiwgMTk5LCAxNzEsIDEsIDI1MiwgMjYsIDE3MSwgMSwgMTg2LCAxNzEsIDEsIDE5MiwgMTcxLCAxLCAKKyAgICAyMDUsIDE3MSwgMSwgMjMzLCAxNDEsIDE3MSwgMSwgMjMyLCAxOTAsIDE3MSwgMSwgMjE0LCAyNywgMTcxLCAxLCAyMjAsIAorICAgIDEwNCwgMTcxLCAxLCAyMTgsIDIyNSwgMTcxLCAxLCAyMDYsIDE3MSwgMSwgMTYyLCAxNzEsIDUsIDIyNywgMjA5LCAxNzEsIAorICAgIDUsIDI1MywgMTgzLCAxNzEsIDI1LCA1LCAyNTUsIDgyLCAxNzEsIDI1LCA1LCA3NCwgMTcxLCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMTcxLCAyNSwgNSwgNjksIDE3MSwgMjUsIDUsIDIxNCwgMTE4LCAxNzEsIDI1LCA1LCAxNDksIDE1MywgMTcxLCAyNSwgNSwgCisgICAgMTQ5LCAyMjIsIDE4MiwgMTcxLCAyNSwgNSwgMjUxLCAxMCwgNzYsIDE3MSwgMjUsIDUsIDc2LCAxNzEsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgMTcxLCAyNSwgNSwgMjUxLCAxMCwgNzgsIDE3MSwgMjUsIDUsIDc4LCAxNzEsIDI1LCA1LCAyNTMsIDIwMCwgMTcxLCAKKyAgICA1LCAyMTMsIDE1MiwgMTcxLCAyMjYsIDIwOCwgMTcxLCAxLCAxNDksIDIyMiwgMTgyLCAxNzEsIDEsIDE0OSwgMjMyLCAxOTEsIAorICAgIDE3MSwgMjUsIDUsIDE0OSwgMTU2LCAxNzEsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzEsIDIxLCAyMTAsIDg2LCAxNzEsIAorICAgIDIxLCAxMTEsIDE3MSwgMjEsIDEwNSwgMTcxLCAyMSwgMTU4LCAxNzEsIDIxLCAxNjEsIDE3MSwgMjEsIDE5MCwgMTcxLCAyMSwgCisgICAgMTk1LCAxNzEsIDIxLCAxOTksIDE3MSwgMjEsIDE5NiwgMTcxLCAyMSwgMjAxLCAxNzEsIDI1NSwgMzAsIDUwLCAxNzEsIAorICAgIDIyMiwgMTIwLCA1MCwgMTU3LCA1LCAyNTEsIDcsIDE1NywgNSwgMjU0LCA4MywgMTU3LCA1LCAyMTMsIDE0NywgMTU3LCAxLCAKKyAgICA2MSwgMTU3LCAxLCAyNTUsIDgyLCAxNTcsIDEsIDc0LCAxNTcsIDEsIDIzNiwgNDAsIDE1NywgMSwgNjksIDE1NywgMSwgCisgICAgMjE0LCAxMTgsIDE1NywgMSwgMTQ5LCAxNTMsIDE1NywgMSwgMTQ5LCAxNTYsIDE1NywgMSwgNzYsIDE1NywgMSwgMjU0LCAKKyAgICAyMTAsIDE1NywgMSwgNzgsIDE1NywgMSwgMjUzLCAyMDAsIDE1NywgMSwgMTc2LCAxNTcsIDEsIDIzNCwgMTM4LCAxNTcsIDEsIAorICAgIDI0MywgMTQyLCAxNTcsIDEsIDI0MywgMCwgMTU3LCAxLCAyMjksIDgyLCAxNTcsIDEsIDI1MSwgNDEsIDE1NywgMSwgMjUwLCAKKyAgICAxNjUsIDE1NywgMSwgMjM1LCAxNDcsIDE1NywgMSwgMjM1LCAxMjAsIDE1NywgMSwgMjI3LCAxNjksIDE1NywgMSwgMjE1LCAKKyAgICAxNTcsIDE1NywgMSwgMjE1LCAxNDUsIDE1NywgMSwgMjQ4LCAxNDMsIDE1NywgMSwgMjQ4LCAxMjcsIDE1NywgMSwgMjI4LCAKKyAgICAxMTUsIDE1NywgMSwgMjE3LCAxMDYsIDE1NywgMSwgMjE2LCAyMDksIDE1NywgMSwgMjQ4LCAyMjksIDE1NywgMSwgMjQ4LCAKKyAgICAzMywgMTU3LCAxLCAxOTgsIDE1NywgMSwgMTkxLCAxNTcsIDEsIDIyNSwgMTUwLCAxNTcsIDEsIDI1MiwgMTk5LCAxNTcsIDEsIAorICAgIDI1MiwgMjYsIDE1NywgMSwgMTg2LCAxNTcsIDEsIDE5MiwgMTU3LCAxLCAyMDUsIDE1NywgMSwgMjMzLCAxNDEsIDE1NywgMSwgCisgICAgMjMyLCAxOTAsIDE1NywgMSwgMjE0LCAyNywgMTU3LCAxLCAyMjAsIDEwNCwgMTU3LCAxLCAyMTgsIDIyNSwgMTU3LCAxLCAKKyAgICAyMDYsIDE1NywgMSwgMTYyLCAxNTcsIDUsIDIyNywgMjA5LCAxNTcsIDUsIDI1MywgMTgzLCAxNTcsIDI1LCA1LCAyNTUsIAorICAgIDgyLCAxNTcsIDI1LCA1LCA3NCwgMTU3LCAyNSwgNSwgMjM2LCA0MCwgMTU3LCAyNSwgNSwgNjksIDE1NywgMjUsIDUsIDIxNCwgCisgICAgMTE4LCAxNTcsIDI1LCA1LCAxNDksIDE1MywgMTU3LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTU3LCAyNSwgNSwgNzYsIAorICAgIDE1NywgMjUsIDUsIDI1NCwgMjEwLCAxNTcsIDI1LCA1LCA3OCwgMTU3LCAyNSwgNSwgMjUzLCAyMDAsIDE1NywgNSwgMjEzLCAKKyAgICAxNTIsIDE1NywgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNTcsIDI1MywgMjAxLCAyMzMsIDI5LCA3OSwgMTU3LCAxLCAyMjIsIAorICAgIDE4MSwgMTU3LCAxLCAyMjMsIDQyLCAxNTcsIDEsIDIxMCwgMTY4LCAxNTcsIDEsIDE0OSwgMjIyLCAxODIsIDE1NywgMSwgCisgICAgMTQ5LCAyMzIsIDE5MSwgMTU3LCAyNSwgNSwgMTQ5LCAxNTYsIDE1NywgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE1NywgMjEsIAorICAgIDIxMCwgODYsIDE1NywgMjEsIDExMSwgMTU3LCAyMSwgMTA1LCAxNTcsIDIxLCAxNTgsIDE1NywgMjEsIDE2MSwgMTU3LCAyMSwgCisgICAgMTkwLCAxNTcsIDIxLCAxOTUsIDE1NywgMjEsIDE5OSwgMTU3LCAyMSwgMTk2LCAxNTcsIDIxLCAyMDEsIDE1NywgMjM1LCAKKyAgICAxNjcsIDE1NywgMSwgMjEyLCA2NSwgMTU3LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDE1NywgMjQ0LCAxMCwgMTIzLCAyNDIsIAorICAgIDM0LCAxNTcsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMTU3LCAyNDQsIDEwLCAxMjMsIDIxOSwgMTE5LCAxNTcsIDI0NCwgCisgICAgMTAsIDEyMywgMjQ1LCAxOTYsIDE1NywgMjQ0LCAxMCwgMTM0LCAyMTksIDExOCwgMzYsIDUsIDI1NCwgODMsIDM2LCA1LCAKKyAgICAyMTMsIDE0NywgMzYsIDEsIDYxLCAzNiwgMSwgMjU1LCA4MiwgMzYsIDEsIDc0LCAzNiwgMSwgMjM2LCA0MCwgMzYsIDEsIAorICAgIDY5LCAzNiwgMSwgMjE0LCAxMTgsIDM2LCAxLCA3NiwgMzYsIDEsIDI0NSwgMjE3LCAzNiwgMSwgMjU0LCAyMTAsIDM2LCAxLCAKKyAgICA3OCwgMzYsIDEsIDIyNiwgMTg3LCAzNiwgMSwgMjUzLCAyMDAsIDM2LCAxLCAxNzYsIDM2LCAxLCAyMjksIDgyLCAzNiwgMSwgCisgICAgMjUxLCA0MSwgMzYsIDEsIDIzNSwgMTQ3LCAzNiwgMSwgMjI3LCAxNjksIDM2LCAxLCAyMTUsIDE1NywgMzYsIDEsIDIyOCwgCisgICAgMTE1LCAzNiwgMSwgMjE3LCAxMDYsIDM2LCAxLCAxOTgsIDM2LCAxLCAyMjgsIDk3LCAzNiwgMSwgMTkxLCAzNiwgMSwgMTg2LCAKKyAgICAzNiwgMSwgMTkyLCAzNiwgMSwgMjA1LCAzNiwgMSwgMjIyLCAxODEsIDM2LCAxLCAyMzMsIDE0MSwgMzYsIDEsIDIzMiwgCisgICAgMTkwLCAzNiwgMSwgMjMyLCAxODEsIDM2LCAxLCAyMTQsIDI3LCAzNiwgMSwgMjIwLCAxMDQsIDM2LCAxLCAyMTgsIDIyNSwgCisgICAgMzYsIDEsIDIwNiwgMzYsIDEsIDE2MiwgMzYsIDI1LCA1LCAyNTUsIDgyLCAzNiwgMjUsIDUsIDc0LCAzNiwgMjUsIDUsIAorICAgIDIzNiwgNDAsIDM2LCAyNSwgNSwgNjksIDM2LCAyNSwgNSwgMjE0LCAxMTgsIDM2LCAyNSwgNSwgNzYsIDM2LCAyNSwgNSwgCisgICAgMjQ1LCAyMTcsIDM2LCAyNSwgNSwgMjU0LCAyMTAsIDM2LCAyNSwgNSwgNzgsIDM2LCAyNSwgNSwgMjI2LCAxODcsIDM2LCAKKyAgICAyNSwgNSwgMjUzLCAyMDAsIDM2LCA1LCAyMTMsIDE1MiwgMzYsIDIyNiwgMjA4LCAzNiwgMjUzLCAyMDEsIDIzMywgMjksIAorICAgIDc5LCAzNiwgMjEsIDIxMCwgODYsIDM2LCAyMSwgMTExLCAzNiwgMjEsIDEwNSwgMzYsIDIxLCAxNTgsIDM2LCAyMSwgMTYxLCAKKyAgICAzNiwgMjEsIDE5MCwgMzYsIDIxLCAxOTUsIDM2LCAyMSwgMTk5LCAzNiwgMjEsIDE5NiwgMzYsIDIxLCAyMDEsIDM2LCA1NCwgCisgICAgMjE2LCAyNDgsIDM2LCA1NCwgMTIzLCAyNDAsIDIxNywgMzYsIDU0LCAxMjMsIDIxNiwgMTQ4LCAzNiwgMjQ4LCAxNTQsIDUwLCAKKyAgICAzNiwgMjMwLCAxNDAsIDUwLCAzNiwgMjExLCA0NSwgNTAsIDM2LCAyNDgsIDk1LCA1MCwgMzYsIDI0OSwgMTQ3LCA1MCwgMzYsIAorICAgIDI1MywgMjQ2LCA3MiwgNTAsIDM2LCAyMjIsIDEyMCwgNTAsIDM2LCA1NCwgNTAsIDE0OCwgNSwgMjUxLCA3LCAxNDgsIDUsIAorICAgIDI1NCwgODMsIDE0OCwgNSwgMjEzLCAxNDcsIDE0OCwgMSwgNjEsIDE0OCwgMSwgMjU1LCA4MiwgMTQ4LCAxLCA3NCwgMTQ4LCAKKyAgICAxLCAyMzYsIDQwLCAxNDgsIDEsIDY5LCAxNDgsIDEsIDIxNCwgMTE4LCAxNDgsIDEsIDE0OSwgMTUzLCAxNDgsIDEsIDE0OSwgCisgICAgMTU2LCAxNDgsIDEsIDc2LCAxNDgsIDEsIDI0NSwgMjE3LCAxNDgsIDEsIDI1NCwgMjEwLCAxNDgsIDEsIDc4LCAxNDgsIDEsIAorICAgIDIyNiwgMTg3LCAxNDgsIDEsIDI1MywgMjAwLCAxNDgsIDEsIDE3NiwgMTQ4LCAxLCAyMzQsIDEzOCwgMTQ4LCAxLCAyNDMsIAorICAgIDE0MiwgMTQ4LCAxLCAyNDMsIDAsIDE0OCwgMSwgMjI5LCA4MiwgMTQ4LCAxLCAyNTEsIDQxLCAxNDgsIDEsIDI1MCwgMTY1LCAKKyAgICAxNDgsIDEsIDIzNSwgMTQ3LCAxNDgsIDEsIDIzNSwgMTIwLCAxNDgsIDEsIDIyNywgMTY5LCAxNDgsIDEsIDIxNSwgMTU3LCAKKyAgICAxNDgsIDEsIDIxNSwgMTQ1LCAxNDgsIDEsIDI0OCwgMTQzLCAxNDgsIDEsIDI0OCwgMTI3LCAxNDgsIDEsIDIyOCwgMTE1LCAKKyAgICAxNDgsIDEsIDIxNywgMTA2LCAxNDgsIDEsIDIxNiwgMjA5LCAxNDgsIDEsIDI0OCwgMjI5LCAxNDgsIDEsIDI0OCwgMzMsIAorICAgIDE0OCwgMSwgMTk4LCAxNDgsIDEsIDE5MSwgMTQ4LCAxLCAyMjUsIDE1MCwgMTQ4LCAxLCAyNTIsIDE5OSwgMTQ4LCAxLCAKKyAgICAyNTIsIDI2LCAxNDgsIDEsIDE4NiwgMTQ4LCAxLCAxOTIsIDE0OCwgMSwgMjA1LCAxNDgsIDEsIDIyMiwgMTgxLCAxNDgsIDEsIAorICAgIDIzMywgMTQxLCAxNDgsIDEsIDIzMiwgMTkwLCAxNDgsIDEsIDIxNCwgMjcsIDE0OCwgMSwgMjIwLCAxMDQsIDE0OCwgMSwgCisgICAgMjE4LCAyMjUsIDE0OCwgMSwgMjA2LCAxNDgsIDEsIDE2MiwgMTQ4LCA1LCAyNTMsIDE4MywgMTQ4LCAyNSwgNSwgMjU1LCAKKyAgICA4MiwgMTQ4LCAyNSwgNSwgNzQsIDE0OCwgMjUsIDUsIDIzNiwgNDAsIDE0OCwgMjUsIDUsIDY5LCAxNDgsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTQ4LCAyNSwgNSwgMTQ5LCAxNTMsIDE0OCwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDE0OCwgMjUsIDUsIDc2LCAKKyAgICAxNDgsIDI1LCA1LCAyNDUsIDIxNywgMTQ4LCAyNSwgNSwgMjU0LCAyMTAsIDE0OCwgMjUsIDUsIDc4LCAxNDgsIDI1LCA1LCAKKyAgICAyMjYsIDE4NywgMTQ4LCAyNSwgNSwgMjUzLCAyMDAsIDE0OCwgNSwgMjEzLCAxNTIsIDE0OCwgMjMzLCAyOSwgNzksIDE0OCwgCisgICAgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNDgsIDEsIDIxNSwgMTg0LCAxNDgsIDEsIDI0NiwgNDYsIDE0OCwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgMTQ4LCAxLCAxNDksIDIzMiwgMTkxLCAxNDgsIDI1LCA1LCAxNDksIDE1NiwgMTQ4LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTQ4LCAyMSwgMjEwLCA4NiwgMTQ4LCAyMSwgMTExLCAxNDgsIDIxLCAxMDUsIDE0OCwgMjEsIDE1OCwgCisgICAgMTQ4LCAyMSwgMTYxLCAxNDgsIDIxLCAxOTAsIDE0OCwgMjEsIDE5NSwgMTQ4LCAyMSwgMTk5LCAxNDgsIDIxLCAxOTYsIAorICAgIDE0OCwgMjEsIDIwMSwgMTQ4LCAyNDQsIDEwLCAyMSwgMjEwLCA4NywgMzEsIDIyNiwgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgCisgICAgMTQ4LCAyNDQsIDEwLCAyMSwgMTIzLCAzMSwgMjI2LCAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAKKyAgICAxMTMsIDMxLCAyMjYsIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDEzNCwgMzEsIDIyNiwgCisgICAgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgMTIzLCAzMSwgMjQ1LCA1MCwgMjI0LCAyMjYsIDY0LCAKKyAgICAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDExMywgMzEsIDI0NSwgNTAsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIAorICAgIDIxLCAxMzQsIDMxLCAyNDUsIDUwLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCA1LCAyMTUsIDg0LCAxNjUsIDUsIDI1NCwgCisgICAgODMsIDE2NSwgNSwgMjEzLCAxNDcsIDE2NSwgMSwgNjEsIDE2NSwgMSwgMjU1LCA4MiwgMTY1LCAxLCA3NCwgMTY1LCAxLCAKKyAgICAyMzYsIDQwLCAxNjUsIDEsIDY5LCAxNjUsIDEsIDIxNCwgMTE4LCAxNjUsIDEsIDE0OSwgMTUzLCAxNjUsIDEsIDE0OSwgCisgICAgMTU2LCAxNjUsIDEsIDc2LCAxNjUsIDEsIDI0NSwgMjE3LCAxNjUsIDEsIDI1NCwgMjEwLCAxNjUsIDEsIDc4LCAxNjUsIDEsIAorICAgIDIyNiwgMTg3LCAxNjUsIDEsIDI1MywgMjAwLCAxNjUsIDEsIDE3NiwgMTY1LCAxLCAyMzQsIDEzOCwgMTY1LCAxLCAyNDMsIAorICAgIDE0MiwgMTY1LCAxLCAyNDMsIDAsIDE2NSwgMSwgMjI5LCA4MiwgMTY1LCAxLCAyNTEsIDQxLCAxNjUsIDEsIDI1MCwgMTY1LCAKKyAgICAxNjUsIDEsIDIzNSwgMTQ3LCAxNjUsIDEsIDIzNSwgMTIwLCAxNjUsIDEsIDIyNywgMTY5LCAxNjUsIDEsIDIxNSwgMTU3LCAKKyAgICAxNjUsIDEsIDIxNSwgMTQ1LCAxNjUsIDEsIDI0OCwgMTQzLCAxNjUsIDEsIDI0OCwgMTI3LCAxNjUsIDEsIDIyOCwgMTE1LCAKKyAgICAxNjUsIDEsIDIxNywgMTA2LCAxNjUsIDEsIDIxNiwgMjA5LCAxNjUsIDEsIDI0OCwgMjI5LCAxNjUsIDEsIDI0OCwgMzMsIAorICAgIDE2NSwgMSwgMTk4LCAxNjUsIDEsIDE5MSwgMTY1LCAxLCAyMjUsIDE1MCwgMTY1LCAxLCAyNTIsIDE5OSwgMTY1LCAxLCAKKyAgICAyNTIsIDI2LCAxNjUsIDEsIDE4NiwgMTY1LCAxLCAxOTIsIDE2NSwgMSwgMjA1LCAxNjUsIDEsIDIyMiwgMTgxLCAxNjUsIDEsIAorICAgIDIzMywgMTQxLCAxNjUsIDEsIDIzMiwgMTkwLCAxNjUsIDEsIDIxNCwgMjcsIDE2NSwgMSwgMjIwLCAxMDQsIDE2NSwgMSwgCisgICAgMjE4LCAyMjUsIDE2NSwgMSwgMjA2LCAxNjUsIDEsIDE2MiwgMTY1LCA1LCAyMjcsIDIwOSwgMTY1LCA1LCAyNTMsIDE4MywgCisgICAgMTY1LCAyNSwgNSwgMjU1LCA4MiwgMTY1LCAyNSwgNSwgNzQsIDE2NSwgMjUsIDUsIDIzNiwgNDAsIDE2NSwgMjUsIDUsIDY5LCAKKyAgICAxNjUsIDI1LCA1LCAyMTQsIDExOCwgMTY1LCAyNSwgNSwgMTQ5LCAxNTMsIDE2NSwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE2NSwgMjUsIDUsIDc2LCAxNjUsIDI1LCA1LCAyNDUsIDIxNywgMTY1LCAyNSwgNSwgMjU0LCAyMTAsIDE2NSwgMjUsIDUsIAorICAgIDc4LCAxNjUsIDI1LCA1LCAyMjYsIDE4NywgMTY1LCAyNSwgNSwgMjUzLCAyMDAsIDE2NSwgNSwgMjEzLCAxNTIsIDE2NSwgCisgICAgMjMzLCAyOSwgNzksIDE2NSwgMjU0LCAyMTEsIDIzMywgMjksIDc5LCAxNjUsIDEsIDI0NCwgMjA0LCAxNjUsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDE2NSwgMSwgMTQ5LCAyMzIsIDE5MSwgMTY1LCAyNSwgNSwgMTQ5LCAxNTYsIDE2NSwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDE2NSwgMjEsIDIxMCwgODYsIDE2NSwgMjEsIDExMSwgMTY1LCAyMSwgMTA1LCAxNjUsIDIxLCAxNTgsIAorICAgIDE2NSwgMjEsIDE2MSwgMTY1LCAyMSwgMTkwLCAxNjUsIDIxLCAxOTUsIDE2NSwgMjEsIDE5OSwgMTY1LCAyMSwgMTk2LCAKKyAgICAxNjUsIDIxLCAyMDEsIDE2NSwgNSwgMjM1LCAxMDgsIDE2NSwgNSwgMjE0LCAxNjEsIDEzNiwgNSwgMjU0LCA4MywgMTM2LCAKKyAgICA1LCAyMTMsIDE0NywgMTM2LCAxLCA2MSwgMTM2LCAxLCAyNTUsIDgyLCAxMzYsIDEsIDc0LCAxMzYsIDEsIDIzNiwgNDAsIAorICAgIDEzNiwgMSwgNjksIDEzNiwgMSwgMjE0LCAxMTgsIDEzNiwgMSwgMTQ5LCAxNTMsIDEzNiwgMSwgMTQ5LCAxNTYsIDEzNiwgMSwgCisgICAgNzYsIDEzNiwgMSwgMjQ1LCAyMTcsIDEzNiwgMSwgMjU0LCAyMTAsIDEzNiwgMSwgNzgsIDEzNiwgMSwgMjI2LCAxODcsIAorICAgIDEzNiwgMSwgMjUzLCAyMDAsIDEzNiwgMSwgMTc2LCAxMzYsIDEsIDIzNCwgMTM4LCAxMzYsIDEsIDI0MywgMTQyLCAxMzYsIAorICAgIDEsIDI0MywgMCwgMTM2LCAxLCAyMjksIDgyLCAxMzYsIDEsIDI1MSwgNDEsIDEzNiwgMSwgMjUwLCAxNjUsIDEzNiwgMSwgCisgICAgMjM1LCAxNDcsIDEzNiwgMSwgMjM1LCAxMjAsIDEzNiwgMSwgMjI3LCAxNjksIDEzNiwgMSwgMjE1LCAxNTcsIDEzNiwgMSwgCisgICAgMjE1LCAxNDUsIDEzNiwgMSwgMjQ4LCAxNDMsIDEzNiwgMSwgMjQ4LCAxMjcsIDEzNiwgMSwgMjI4LCAxMTUsIDEzNiwgMSwgCisgICAgMjE3LCAxMDYsIDEzNiwgMSwgMjE2LCAyMDksIDEzNiwgMSwgMjQ4LCAyMjksIDEzNiwgMSwgMjQ4LCAzMywgMTM2LCAxLCAKKyAgICAxOTgsIDEzNiwgMSwgMjI4LCA5NywgMTM2LCAxLCAxOTEsIDEzNiwgMSwgMjI1LCAxNTAsIDEzNiwgMSwgMjUyLCAxOTksIAorICAgIDEzNiwgMSwgMjUyLCAyNiwgMTM2LCAxLCAxODYsIDEzNiwgMSwgMTkyLCAxMzYsIDEsIDIwNSwgMTM2LCAxLCAyMjIsIDE4MSwgCisgICAgMTM2LCAxLCAyMzMsIDE0MSwgMTM2LCAxLCAyMzIsIDE5MCwgMTM2LCAxLCAyMzIsIDE4MSwgMTM2LCAxLCAyMTQsIDI3LCAKKyAgICAxMzYsIDEsIDIyMCwgMTA0LCAxMzYsIDEsIDIxOCwgMjI1LCAxMzYsIDEsIDIwNiwgMTM2LCAxLCAxNjIsIDEzNiwgMSwgCisgICAgMjE1LCAxMjYsIDEzNiwgNSwgMjUzLCAxODMsIDEzNiwgMjUsIDUsIDI1NSwgODIsIDEzNiwgMjUsIDUsIDc0LCAxMzYsIDI1LCAKKyAgICA1LCAyMzYsIDQwLCAxMzYsIDI1LCA1LCA2OSwgMTM2LCAyNSwgNSwgMjE0LCAxMTgsIDEzNiwgMjUsIDUsIDE0OSwgMTUzLCAKKyAgICAxMzYsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxMzYsIDI1LCA1LCA3NiwgMTM2LCAyNSwgNSwgMjQ1LCAyMTcsIDEzNiwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxMzYsIDI1LCA1LCA3OCwgMTM2LCAyNSwgNSwgMjI2LCAxODcsIDEzNiwgMjUsIDUsIDI1MywgMjAwLCAKKyAgICAxMzYsIDUsIDIxMywgMTUyLCAxMzYsIDEsIDU5LCAyMjMsIDc2LCAxMzYsIDI1MywgMjAxLCAyMzMsIDI5LCA3OSwgMTM2LCAKKyAgICAxLCAxNDksIDIyMiwgMTgyLCAxMzYsIDEsIDE0OSwgMjMyLCAxOTEsIDEzNiwgMjUsIDUsIDE0OSwgMTU2LCAxMzYsIDI1LCAKKyAgICA1LCAxNDksIDIzMiwgMTkxLCAxMzYsIDIxLCAyMTAsIDg2LCAxMzYsIDIxLCAxMTEsIDEzNiwgMjEsIDEwNSwgMTM2LCAyMSwgCisgICAgMTU4LCAxMzYsIDIxLCAxNjEsIDEzNiwgMjEsIDE5MCwgMTM2LCAyMSwgMTk1LCAxMzYsIDIxLCAxOTksIDEzNiwgMjEsIAorICAgIDE5NiwgMTM2LCAyMSwgMjAxLCAxMzYsIDU0LCAyMTYsIDI0OCwgMTM2LCA1NCwgMTIzLCAyNDAsIDIxNywgMTM2LCA1NCwgCisgICAgMTIzLCAyMTYsIDE0OCwgMTM2LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDEzNiwgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAKKyAgICAxMzYsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMTM2LCAyNDgsIDE1OCwgNzksIDEzNiwgMSwgMjUwLCAxMDcsIDIyOCwgCisgICAgMTE2LCAxMzYsIDEsIDI1MCwgMTA3LCAyMzAsIDMwLCAxMzYsIDEsIDI1MCwgMTA3LCAyMjIsIDE4MiwgMTM2LCAxLCAyNTAsIAorICAgIDEwNywgMTU2LCAxMzYsIDEsIDI1MCwgMTA3LCAyMzIsIDE5MSwgMTM2LCAxLCAyNTAsIDEwNywgMjM1LCAyOSwgMTc1LCA1LCAKKyAgICAyNTQsIDgyLCAxNzUsIDUsIDIxMywgMTQ2LCAxNzUsIDEsIDI1MywgMTczLCAxNzUsIDEsIDI1NSwgMzYsIDE3NSwgMSwgCisgICAgMjU0LCAyMzIsIDE3NSwgMSwgMjU0LCAyNDcsIDE3NSwgMSwgMjM1LCAxNTcsIDE3NSwgMSwgMjM2LCAzOSwgMTc1LCAxLCAKKyAgICAyMTQsIDExMCwgMTc1LCAxLCAyMTQsIDExMiwgMTc1LCAxLCAyMzUsIDE4MCwgMTc1LCAxLCAyMzUsIDE4MSwgMTc1LCAxLCAKKyAgICAyMzYsIDI1LCAxNzUsIDEsIDIzNiwgMjcsIDE3NSwgMSwgMjQ1LCAyNSwgMTc1LCAxLCAyNDUsIDIxMiwgMTc1LCAxLCAyNTQsIAorICAgIDE5NywgMTc1LCAxLCAyMjYsIDExMiwgMTc1LCAxLCAyMjYsIDE4MSwgMTc1LCAxLCAyNTMsIDE4NiwgMTc1LCAxLCAyNTQsIAorICAgIDE1NCwgMjM0LCAxOTMsIDE3NSwgMSwgMjMxLCAyMTQsIDIzNCwgMTkzLCAxNzUsIDEsIDI1NCwgMTU0LCAyNDMsIDg5LCAKKyAgICAxNzUsIDEsIDIzMSwgMjE0LCAyNDMsIDg5LCAxNzUsIDEsIDIzNCwgMjM1LCAyMjksIDIyNywgMTc1LCAxLCAyMjEsIDIzOCwgCisgICAgMjQzLCA4OSwgMTc1LCAxLCAyNTQsIDE1NCwgMjUwLCAyMjQsIDE3NSwgMSwgMjMxLCAyMTQsIDI1MCwgMjI0LCAxNzUsIDEsIAorICAgIDI1NCwgMTU0LCAyMzUsIDEzMywgMTc1LCAxLCAyMzEsIDIxNCwgMjM1LCAxMzMsIDE3NSwgMSwgMjE3LCA5OSwgMjI5LCAKKyAgICAyMjcsIDE3NSwgMSwgMjE3LCA5OSwgMjIxLCAyMzcsIDIyOSwgMjI4LCAxNzUsIDEsIDIyMSwgMjM4LCAyMzUsIDEzMywgCisgICAgMTc1LCAxLCAyNTQsIDE1NCwgMjE1LCAxNTMsIDE3NSwgMSwgMjMxLCAyMTQsIDIxNSwgMTUzLCAxNzUsIDEsIDI1NCwgMTU0LCAKKyAgICAyNDgsIDEzNCwgMTc1LCAxLCAyMzEsIDIxNCwgMjQ4LCAxMzQsIDE3NSwgMSwgMjMwLCA1OCwgMjI5LCAxODUsIDE3NSwgMSwgCisgICAgMjIxLCAyMzgsIDI0OCwgMTM0LCAxNzUsIDEsIDI1NCwgMTU0LCAyMTcsIDMxLCAxNzUsIDEsIDIzMSwgMjE0LCAyMTcsIDMxLCAKKyAgICAxNzUsIDEsIDI1NCwgMTU0LCAyNDgsIDE1MiwgMTc1LCAxLCAyMzEsIDIxNCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjQ4LCAxODIsIAorICAgIDIyOSwgMTg1LCAxNzUsIDEsIDIyMSwgMjM4LCAyNDgsIDE1MiwgMTc1LCAxLCAyNTQsIDE1NCwgMjI1LCAyMzIsIDE3NSwgMSwgCisgICAgMjMxLCAyMTQsIDIyNSwgMjMyLCAxNzUsIDEsIDI1NCwgMTU0LCAyNTIsIDEyMCwgMTc1LCAxLCAyMzEsIDIxNCwgMjUyLCAKKyAgICAxMjAsIDE3NSwgMSwgMjMxLCAxMzYsIDE3NSwgMSwgMjU0LCAxMzksIDI1MiwgMTIwLCAxNzUsIDEsIDIxMSwgNTEsIDE3NSwgCisgICAgMSwgMjIzLCAxMzYsIDE3NSwgMSwgMjQ4LCAxODIsIDIzMywgNzMsIDE3NSwgMSwgMjE0LCAxLCAxNzUsIDEsIDIxNywgOTksIAorICAgIDIyMSwgMjEyLCAxNzUsIDEsIDIzMCwgNTgsIDIyMSwgMjEyLCAxNzUsIDEsIDI0OCwgMTgyLCAyMjEsIDIxMiwgMTc1LCAxLCAKKyAgICAyNDEsIDI0OSwgMTc1LCAxLCAyMzAsIDU4LCAyMzMsIDczLCAxNzUsIDEsIDI0NCwgMTY0LCAxNzUsIDUsIDI1NCwgMTg2LCAKKyAgICAxNzUsIDI1LCA1LCAyNTQsIDI0MiwgMTc1LCAyNSwgNSwgMjM0LCAxNjEsIDI1NCwgMjQ5LCAxNzUsIDI1LCA1LCAyNDcsIAorICAgIDIzNiwgMjU0LCAyNDksIDE3NSwgMjUsIDUsIDIzNCwgMTYxLCAyMzUsIDE3NywgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIzNSwgCisgICAgMTc3LCAxNzUsIDI1LCA1LCAyMzQsIDE2MSwgMjI2LCA5MiwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIyNiwgOTIsIDE3NSwgCisgICAgMjUsIDUsIDI0MywgMTMxLCAxNzUsIDI1LCA1LCAyMzQsIDIxLCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjM0LCAyMSwgMTc1LCAKKyAgICAyNSwgNSwgMjM0LCAyMywgMjQ4LCA3NSwgMTc1LCAyNSwgNSwgMjM0LCAyMiwgMjQyLCA1NCwgMjU0LCAyNDIsIDE3NSwgMjUsIAorICAgIDUsIDIzNCwgMjIsIDI0MiwgNTQsIDI0NywgMjM2LCAyNTQsIDI0MiwgMTc1LCAyNSwgNSwgMjM0LCAyMiwgMjQyLCA1NCwgCisgICAgMjQzLCA4OCwgMTc1LCAyNSwgNSwgMjQzLCA4OCwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDI0MywgMTMxLCAxNzUsIDI1LCA1LCAKKyAgICAyNDcsIDIzNiwgMjQzLCA4OCwgMTc1LCAyMjQsIDE0NCwgMjMzLCAyMTMsIDE2OCwgMTM1LCAyMzQsIDM1LCAyMzQsIDI1MiwgCisgICAgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEzNCwgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEwNSwgMTY4LCAxMzUsIAorICAgIDIzNCwgMTEyLCAyMzQsIDEwMSwgMTY4LCAxMzUsIDIzNCwgMTEyLCAyMzQsIDEwOSwgMTY4LCAxMzUsIDIzNCwgMTEyLCAKKyAgICAyMjMsIDE1NywgMTY4LCAxMzUsIDIyOSwgMTAsIDIyOCwgMjUzLCAxNjgsIDEzNSwgMjUwLCA5NSwgMjUwLCAxNTUsIDE2OCwgCisgICAgMTM1LCAyNTAsIDk1LCAyNTAsIDEwMywgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgMTU0LCAxNjgsIDEzNSwgMjE5LCA2MSwgCisgICAgMjE5LCA2MCwgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgOTEsIDE2OCwgMTM1LCAyMTAsIDI0NSwgMjEwLCAyNTIsIDE2OCwgCisgICAgMTM1LCAyNDcsIDE1NCwgMjUwLCAxNjIsIDE2OCwgMTM1LCAyMTYsIDQzLCAyMjUsIDI0MiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAKKyAgICAyMTYsIDIwMSwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMjksIDIwNiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMjUsIDExNCwgCisgICAgMTY4LCAxMzUsIDIyOCwgODAsIDIyOSwgMTAzLCAxNjgsIDEzNSwgMjQ3LCAxNTQsIDI0OCwgNzYsIDE2OCwgMTM1LCAyMTYsIAorICAgIDQzLCAyMTcsIDU2LCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMTMyLCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMjA1LCAKKyAgICAxNjgsIDEzNSwgMjE2LCAxNTgsIDIxNiwgMTU1LCAxNjgsIDEzNSwgMjI4LCA4MCwgMjI3LCAyNDIsIDE2OCwgMTM1LCAyNTEsIAorICAgIDIxNCwgMjUyLCAxNzIsIDE2OCwgMTM1LCAyMjUsIDIwLCAyMjUsIDQ1LCAxNjgsIDEzNSwgMjI1LCAxMjUsIDIyNSwgMTE2LCAKKyAgICAxNjgsIDEzNSwgMjQ0LCA1MiwgMjQ0LCAyMDQsIDE2OCwgMTM1LCAyMjUsIDEyNSwgMjI1LCAxNDQsIDE2OCwgMTM1LCAyNDQsIAorICAgIDUyLCAyNDQsIDE4MSwgMTY4LCAxMzUsIDIyNSwgMTI1LCAyMjEsIDI0OSwgMTY4LCAxMzUsIDIzMCwgMTY3LCAxODYsIDE2OCwgCisgICAgMTM1LCAyMTAsIDI0NSwgMjExLCA3OSwgMTY4LCAxMzUsIDIyMiwgMjE0LCAyMjIsIDE0MSwgMTY4LCAxMzUsIDIyMiwgMTQyLCAKKyAgICAxNjgsIDEzNSwgMjMyLCAxNjMsIDIzMiwgMjEyLCAxNjgsIDEzNSwgMjMyLCAxMDMsIDE2OCwgMTM1LCAyMTEsIDIyOCwgCisgICAgMjEyLCA2MSwgMTY4LCAxMzUsIDIxOSwgNjEsIDIyMiwgOCwgMTY4LCAxMzUsIDIxOSwgNjEsIDIyMiwgMTE2LCAxNjgsIAorICAgIDEzNSwgMjE5LCA2MSwgMjE4LCA4MywgMTY4LCAxMzUsIDI0MSwgNzYsIDI0MSwgMTY2LCAxNjgsIDEzNSwgMjMyLCAxNjMsIAorICAgIDI1MCwgNzYsIDE2OCwgMTM1LCAxNDQsIDI1NCwgMTIzLCAxNjgsIDEzNSwgMjQxLCA3NiwgMjI4LCA3NSwgMTY4LCAxMzUsIAorICAgIDIyNiwgNzIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNjEsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjQyLCAyNCwgMTY4LCAxMzUsIAorICAgIDIyMSwgMjMyLCAyNTUsIDgyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgMTQ0LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc0LCAKKyAgICAxNjgsIDEzNSwgMjIxLCAyMzIsIDIzNiwgNDAsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjE0LCAyMTQsIDE2OCwgMTM1LCAyMjEsIAorICAgIDIzMiwgMjE0LCAyMTIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNjksIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjE0LCAxMTgsIDE2OCwgCisgICAgMTM1LCAyMjUsIDEyNywgMTY4LCAyNDksIDEwNiwgMTYsIDI1MiwgMTczLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc2LCAxNjgsIAorICAgIDEzNSwgMjIxLCAyMzIsIDI1NCwgMjUyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDc4LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgCisgICAgMjExLCAyMzEsIDIwMywgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIDIxMSwgMjMxLCAyMDQsIDE2OCwgMTM1LCAyMzMsIAorICAgIDExMiwgMTY4LCAxMzUsIDIzMSwgMjAwLCAxNjgsIDEzNSwgMjMxLCAyMDEsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjQ1LCAKKyAgICAxODgsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDE2OCwgMTM1LCAyMzEsIDIwOSwgMjE1LCAyMjksIDE2OCwgCisgICAgMTM1LCAyMzEsIDIwOSwgMjUwLCAxNDMsIDE2OCwgMTM1LCAyMTYsIDE5OSwgMTY4LCAxMzUsIDIyOCwgMjEwLCAxNjgsIAorICAgIDEzNSwgMjExLCA3MywgMTY4LCAxMzUsIDI0NCwgNDMsIDE2OCwgMjEsIDIxMCwgODYsIDE2OCwgMjEsIDExMSwgMTY4LCAyMSwgCisgICAgMTA1LCAxNjgsIDIxLCAxNTgsIDE2OCwgMjEsIDE2MSwgMTY4LCAyMSwgMTkwLCAxNjgsIDIxLCAxOTUsIDE2OCwgMjEsIAorICAgIDE5OSwgMTY4LCAyMSwgMTk2LCAxNjgsIDIxLCAyMDEsIDE2OCwgMTM1LCAyNTQsIDExOSwgMTY4LCAxMzUsIDIzNCwgMTEwLCAKKyAgICAyMDksIDIwOSwgMSwgMjM0LCAzNCwgMjA5LCAyMDksIDEsIDIzNCwgMTEyLCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjM0LCAKKyAgICAxMTIsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyMjksIDksIDIwOSwgMjA5LCAxLCAyNDksIDI0NiwgMjA5LCAyMDksIDEsIAorICAgIDIxOSwgNjEsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyMjcsIDEzOCwgMjA5LCAyMDksIDEsIDI0NywgMTUzLCAyMDksIDIwOSwgCisgICAgMSwgMTEyLCAyMDksIDIwOSwgMSwgMjE2LCAxNTgsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMTYsIDE1OCwgMjE3LCA2MywgCisgICAgMjA5LCAyMDksIDEsIDIyOCwgNzksIDIwOSwgMjA5LCAxLCAyNTEsIDIxMywgMjA5LCAyMDksIDEsIDIyNSwgMTksIDIwOSwgCisgICAgMjA5LCAxLCAyMjUsIDEyNSwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAKKyAgICAyMjUsIDEyNSwgMjE3LCA2MywgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMzAsIDE2NiwgCisgICAgMjA5LCAyMDksIDEsIDIxMCwgMjQ0LCAyMDksIDIwOSwgMSwgMjMyLCAxNjMsIDIzMiwgMjEyLCAyMDksIDIwOSwgMSwgMjMyLCAKKyAgICAxNjMsIDIzMiwgMTI3LCAyMDksIDIwOSwgMSwgMjExLCAyMjcsIDIwOSwgMjA5LCAxLCAyMTksIDYxLCAyMTgsIDM2LCAyMDksIAorICAgIDIwOSwgMSwgMjQxLCA3NiwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDc4LCAyMDksIDIwOSwgMSwgMjQxLCA3NiwgMjE3LCA2MywgCisgICAgMjA5LCAyMDksIDI0NSwgMTcxLCAyMDksIDIwOSwgMjUsIDUsIDYxLCAyMDksIDIwOSwgMjUsIDUsIDIzMSwgMjA5LCAyMzQsIAorICAgIDI0MCwgMjA5LCAyMDksIDI1LCA1LCAyNTUsIDgyLCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMTQ0LCAyMDksIDIwOSwgMjUsIAorICAgIDUsIDc0LCAyMDksIDIwOSwgMjUsIDUsIDIzNiwgNDAsIDIwOSwgMjA5LCAyNSwgNSwgMjExLCAxMTcsIDIwOSwgMjA5LCAyNSwgCisgICAgNSwgMjEwLCAxNjksIDIwOSwgMjA5LCAyNSwgNSwgNjksIDIwOSwgMjA5LCAyNSwgNSwgMjE0LCAxMTgsIDIwOSwgMjA5LCAKKyAgICAyNSwgNSwgMjMxLCAyMDksIDIzNCwgMTksIDIwOSwgMjA5LCAyMjAsIDE0NywgNSwgMjMyLCAxNjIsIDIwOSwgMjA5LCAyMjAsIAorICAgIDE0NywgNSwgMjI3LCAxMzgsIDIwOSwgMjA5LCAyNSwgNSwgNzYsIDIwOSwgMjA5LCAyNSwgNSwgMjQ1LCAyMDMsIDIwOSwgCisgICAgMjA5LCAyNSwgNSwgNzgsIDIwOSwgMjA5LCAyNSwgNSwgMjUzLCAxNzUsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDIwOSwgMjA5LCAyMzQsIDM1LCAyMzMsIDE0MSwgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDksIDI0NSwgMTg4LCAyMDksIDIwOSwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA5LCAyMTYsIDExOCwgMjA5LCAyMDksIAorICAgIDEzOCwgMjMxLCAyMDksIDI1MCwgMjMxLCAyMDksIDIwOSwgMjUxLCAxMiwgNzksIDIwOSwgMjA5LCAyMjgsIDIxOSwgMjA5LCAKKyAgICAyMDksIDIxLCAyMTAsIDg2LCAyMDksIDIwOSwgMjEsIDExMSwgMjA5LCAyMDksIDIxLCAxMDUsIDIwOSwgMjA5LCAyMSwgCisgICAgMTU4LCAyMDksIDIwOSwgMjEsIDE2MSwgMjA5LCAyMDksIDIxLCAxOTAsIDIwOSwgMjA5LCAyMSwgMTk1LCAyMDksIDIwOSwgCisgICAgMjEsIDE5OSwgMjA5LCAyMDksIDIxLCAxOTYsIDIwOSwgMjA5LCAyMSwgMjAxLCAyMDksIDIwOSwgMjQxLCA3NiwgMjI4LCAKKyAgICA3OSwgMjA5LCAyMDksIDI0MSwgNzYsIDIzMCwgMTY2LCAyMDksIDIwOSwgMSwgMjM0LCAxMTMsIDI0MiwgMTgxLCAyMDksIAorICAgIDIwOSwgMSwgMjM0LCAxMTMsIDIyNywgMTM4LCA2MywgMywgMjI2LCAyMDgsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIAorICAgIDIzMCwgMjUzLCAyMTUsIDE5MCwgNjEsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIDIzMCwgMjUzLCAyNTUsIDE2OCwgCisgICAgMjIyLCAyMTgsIDI1MiwgODUsIDE4NiwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxMSwgMCwgMjMwLCAyNTMsIDI1NSwgMTY4LCAKKyAgICAyNDIsIDEyMiwgMjE1LCAxNzQsIDE4NiwgNjMsIDE2NCwgNjUsIDIxMSwgMCwgMjMwLCAyNTMsIDIzMSwgOTgsIDE4NiwgNjMsIAorICAgIDE2NCwgMjUwLCA0LCAyMTEsIDAsIDIzMCwgMjUzLCAyMjAsIDExMSwgMTg2LCA2MywgMTY0LCAyNTAsIDI0NywgMjExLCAwLCAKKyAgICAyMzAsIDI1MywgMjI1LCAxMTUsIDIyMCwgOTgsIDE4NiwgNjMsIDE2NCwgMjExLCAwLCAyMzAsIDI1MywgMjE1LCAxNzQsIAorICAgIDIyMCwgOTgsIDE4NiwgNjMsIDE2NCwgMjIxLCAyMTAsIDIyMCwgOTcsIDYzLCAxNjQsIDI1MSwgMTM2LCAyMTEsIDAsIDIzMCwgCisgICAgMjUyLCA2MywgMTY0LCAyNTEsIDIzMSwgMjIwLCA1LCAyMTEsIDAsIDIzMCwgMjUyLCA2MywgMTY0LCAyMzUsIDIwNCwgMjE1LCAKKyAgICAxNzMsIDYzLCAxNjQsIDI0OCwgNjksIDIxNSwgMTc0LCAyNTEsIDEzNSwgNjMsIDE2NCwgMjIwLCA5NywgNjMsIDE2NCwgCisgICAgMjI3LCAxNDMsIDIyMCwgOTcsIDYzLCAxNjQsIDIxNSwgMTc0LCAyMjAsIDk3LCA2MywgMTY0LCAyMjcsIDE0MywgMjE1LCAKKyAgICAxNzQsIDIyMCwgOTcsIDYzLCAxNjQsIDIyMiwgMjM5LCAyNTAsIDEzMCwgMjE4LCAyMzgsIDIyMCwgOTcsIDYzLCAxNjQsIAorICAgIDIyMywgNDUsIDI0MiwgMTUzLCAyMjAsIDk3LCA2MywgMTY0LCAyNTAsIDI0NywgMjU1LCAxNzIsIDIyMiwgMTQ2LCAyMzEsIAorICAgIDk3LCAyMDAsIDI1MSwgMTUsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTUsIDE3MywgNjMsIDIzMiwgMTUwLCA1LCAyNTAsIDE2MywgCisgICAgMjIyLCAxNDUsIDYzLCAyMzIsIDE1MCwgNSwgMjMzLCAyLCAyMjIsIDE0NSwgNjMsIDI1MywgMjIwLCA1LCAyMjAsIDEwNywgCisgICAgMjQzLCA3MiwgMjU1LCAxNzMsIDIyMiwgMTQ1LCA2MywgMjUzLCAyMjAsIDUsIDI1NSwgMTcwLCAxOTEsIDYzLCAyNTMsIAorICAgIDIyMCwgNSwgMjIxLCAxODQsIDIxNSwgMTY5LCA2MywgNSwgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDMsIDcxLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDIsIDE4MywgNjMsIDUsIDIyMywgMTMzLCAyNDcsIDE2NywgMjQyLCAxMjMsIDYzLCA1LCAKKyAgICAyMjMsIDEzMywgMjI5LCAyMjQsIDI0MywgNzEsIDYzLCA1LCAyMjMsIDEzMywgMjI5LCAyMjQsIDI0MiwgMTgzLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDI0NywgMTY3LCAyMjMsIDEzMywgMjI5LCAyMjMsIDYzLCAyMSwgMjEwLCA4NiwgNjMsIDIxLCAxMTEsIDYzLCAKKyAgICAyMSwgMTA1LCA2MywgMjEsIDE1OCwgNjMsIDIxLCAxNjEsIDYzLCAyMSwgMTkwLCA2MywgMjEsIDE5NSwgNjMsIDIxLCAxOTksIAorICAgIDYzLCAyMSwgMTk2LCA2MywgMjEsIDIwMSwgNjMsIDIxLCAxNjMsIDExMSwgNjMsIDIxLCAxNjMsIDEwNSwgNjMsIDIxLCAKKyAgICAxNjMsIDE1OCwgNjMsIDIxLCAxNjMsIDE2MSwgNjMsIDIxLCAxNjMsIDE5MCwgNjMsIDIxLCAxNjMsIDE5NSwgNjMsIDIxLCAKKyAgICAxNjMsIDE5OSwgNjMsIDIxLCAxNjMsIDE5NiwgNjMsIDIxLCAxNjMsIDIwMSwgNjMsIDIxLCAxNjMsIDIxMCwgODYsIDYzLCAKKyAgICAxNjQsIDI1MSwgMTM4LCAyMjIsIDE0NSwgNjMsIDE2NCwgMjI5LCA3MywgMjUxLCA3NiwgMjI3LCAxNTMsIDIxMCwgMjUsIAorICAgIDYzLCAxNjQsIDI1MCwgMjQ3LCAyNTUsIDE3MiwgMjIyLCAxNDYsIDI1MSwgNzcsIDIzMCwgMjA3LCAyNTEsIDE1LCA2MywgCisgICAgMTY0LCAyMjksIDczLCAyNTEsIDc2LCAyMjAsIDEwOCwgMjIyLCAxNDUsIDYzLCAxNjQsIDI1MCwgMTQwLCAyMzAsIDI1MiwgCisgICAgNjMsIDE2NCwgMjE1LCAxODUsIDI1NSwgMTY5LCA2MywgMTY0LCAyNDIsIDEwNywgMjIyLCAxNDYsIDI0MiwgNzAsIDYzLCAKKyAgICAxNjQsIDI0MiwgMTA3LCAyMjIsIDE0NiwgMjQyLCA3NiwgNjMsIDE2NCwgMjU0LCAxMjQsIDIzNCwgMTI5LCAyNDIsIDcwLCAKKyAgICA2MywgMTY0LCAyNTQsIDEyNCwgMjM0LCAxMjksIDI0MiwgNzYsIDYzLCA1LCAyMTEsIDY1LCAyMTUsIDE3MiwgNjMsIDUsIAorICAgIDIzMSwgMTcyLCAyMTUsIDE3MiwgNjMsIDEsIDE3NiwgNjMsIDEsIDIzNCwgMTM4LCA2MywgMSwgMjQzLCAxNDIsIDYzLCAxLCAKKyAgICAyNDMsIDAsIDYzLCAxLCAyMjksIDgyLCA2MywgMSwgMjUxLCA0MSwgNjMsIDEsIDI1MCwgMTY1LCA2MywgMSwgMjM1LCAxNDcsIAorICAgIDYzLCAxLCAyMjcsIDE2OSwgNjMsIDEsIDIxNSwgMTU3LCA2MywgMSwgMjE1LCAxNDUsIDYzLCAxLCAyNDgsIDE0MywgNjMsIAorICAgIDEsIDI0OCwgMTI3LCA2MywgMSwgMjI4LCAxMTUsIDYzLCAxLCAyMTcsIDEwNiwgNjMsIDEsIDIxNiwgMjA5LCA2MywgMSwgCisgICAgMjQ4LCAyMjksIDYzLCAxLCAyNDgsIDMzLCA2MywgMSwgMTk4LCA2MywgMSwgMTkxLCA2MywgMSwgMjI1LCAxNTAsIDYzLCAxLCAKKyAgICAyNTIsIDE5OSwgNjMsIDEsIDI1MiwgMjYsIDYzLCAxLCAxODYsIDYzLCAxLCAyMTUsIDE4NCwgNjMsIDEsIDIxNSwgMTc2LCAKKyAgICA2MywgMSwgMjQ2LCA0NiwgNjMsIDEsIDI0NiwgNDEsIDYzLCAxLCAyMTIsIDY1LCA2MywgMSwgMjEwLCA4MiwgNjMsIDEsIAorICAgIDIxMCwgMTE2LCA2MywgMSwgMjU1LCAxNzUsIDYzLCAxLCAxOTIsIDYzLCAxLCAyMDUsIDYzLCAxLCAyMzMsIDE0MSwgNjMsIAorICAgIDEsIDIyMCwgMTA0LCA2MywgMSwgMjE4LCAyMjUsIDYzLCAxLCAyMDYsIDYzLCAxLCAxNjIsIDYzLCAxLCA2MSwgNjMsIDEsIAorICAgIDIzMywgMjM3LCA2MywgMSwgMjQ0LCA4NSwgMjA1LCA2MywgMSwgMjM0LCA1MiwgNjMsIDEsIDIyMiwgMTgxLCA2MywgMjUsIAorICAgIDUsIDI1NSwgODIsIDYzLCAyNSwgNSwgNzQsIDYzLCAyNSwgNSwgMjM2LCA0MCwgNjMsIDI1LCA1LCA2OSwgNjMsIDI1LCA1LCAKKyAgICAyMTQsIDExOCwgNjMsIDI1LCA1LCAxNDksIDE1MywgNjMsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA2MywgMjUsIDUsIDE0OSwgCisgICAgMTU2LCA2MywgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDYzLCAyNSwgNSwgNzYsIDYzLCAyNSwgNSwgMjQ1LCAyMTcsIDYzLCAKKyAgICAyNSwgNSwgNzgsIDYzLCAyNSwgNSwgMjI2LCAxODcsIDYzLCA1LCAyMjIsIDIyNCwgMjE4LCA4NSwgMjI5LCA4MywgMjIyLCAKKyAgICAyMTMsIDYzLCA1LCAyMjIsIDIxOCwgMjUyLCA4NCwgNjMsIDI1LCA1LCAyMjMsIDUyLCA3NCwgNjMsIDI1LCA1LCAyMjMsIAorICAgIDUyLCAyMzYsIDQwLCA2MywgNSwgMjI3LCAxNTMsIDIxMCwgMjYsIDIyOSwgMjMxLCAyNDgsIDIyOSwgNjMsIDUsIDIxOSwgCisgICAgNzMsIDIzMywgNjYsIDYzLCAxNjQsIDI0MiwgMzYsIDYzLCAxNjQsIDIyNiwgNjEsIDYzLCA1LCAyMzMsIDY5LCAyMjIsIAorICAgIDE0NSwgNjMsIDUsIDIxMSwgNzAsIDIyMiwgMTQ1LCA2MywgNSwgMjMzLCA3MCwgMjE1LCAxODUsIDI1MSwgMTUsIDYzLCA1LCAKKyAgICAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDUsIDI0MiwgMTI2LCAyNTEsIDE2LCAyMjMsIDQzLCA2MywgNSwgMjQyLCAxMjYsIAorICAgIDIzMSwgOTAsIDIyMywgNDMsIDYzLCA1LCAyMzUsIDIwMCwgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCAyMTgsIDc0LCA1LCAKKyAgICAyMzMsIDcwLCAyMTUsIDE4NSwgMjUxLCAxNSwgNjMsIDIxOCwgNzQsIDUsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCAKKyAgICA3NCwgNSwgMjM1LCAyMDAsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCA3NCwgMSwgMTc2LCA2MywgMjE4LCA3NCwgMSwgCisgICAgMjM0LCAxMzgsIDYzLCAyMTgsIDc0LCAxLCAyNDMsIDE0MiwgNjMsIDIxOCwgNzQsIDEsIDI0MywgMCwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIyOSwgODIsIDYzLCAyMTgsIDc0LCAxLCAyNTEsIDQxLCA2MywgMjE4LCA3NCwgMSwgMjUwLCAxNjUsIDYzLCAyMTgsIAorICAgIDc0LCAxLCAyMzUsIDE0NywgNjMsIDIxOCwgNzQsIDEsIDIyNywgMTY5LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAxNTcsIDYzLCAKKyAgICAyMTgsIDc0LCAxLCAyMTUsIDE0NSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMTQzLCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAxMjcsIAorICAgIDYzLCAyMTgsIDc0LCAxLCAyMjgsIDExNSwgNjMsIDIxOCwgNzQsIDEsIDIxNywgMTA2LCA2MywgMjE4LCA3NCwgMSwgMjE2LCAKKyAgICAyMDksIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDIyOSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMzMsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICAxOTgsIDYzLCAyMTgsIDc0LCAxLCAxOTEsIDYzLCAyMTgsIDc0LCAxLCAyMjUsIDE1MCwgNjMsIDIxOCwgNzQsIDEsIDI1MiwgCisgICAgMTk5LCA2MywgMjE4LCA3NCwgMSwgMjUyLCAyNiwgNjMsIDIxOCwgNzQsIDEsIDE4NiwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgCisgICAgMTg0LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAxNzYsIDYzLCAyMTgsIDc0LCAxLCAyNDYsIDQ2LCA2MywgMjE4LCA3NCwgMSwgCisgICAgMjQ2LCA0MSwgNjMsIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDYzLCAyMTgsIDc0LCAxLCAyMTAsIDgyLCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjEwLCAxMTYsIDYzLCAyMTgsIDc0LCAxLCAyNTUsIDE3NSwgNjMsIDIxOCwgNzQsIDEsIDE5MiwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIwNSwgNjMsIDIxOCwgNzQsIDEsIDIzMywgMTQxLCA2MywgMjE4LCA3NCwgMSwgMjIwLCAxMDQsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMTgsIDIyNSwgNjMsIDIxOCwgNzQsIDEsIDIwNiwgNjMsIDIxOCwgNzQsIDEsIDE2MiwgNjMsIDIxOCwgNzQsIDEsIAorICAgIDYxLCA2MywgMjE4LCA3NCwgMSwgMjMzLCAyMzcsIDYzLCAyMTgsIDc0LCAxLCAyNDQsIDg1LCAyMTIsIDY1LCA2MywgMjE4LCAKKyAgICA3NCwgMSwgMjQ0LCA4NSwgMTkyLCA2MywgMjE4LCA3NCwgMSwgMjQ0LCA4NSwgMjA1LCA2MywgMjMzLCAyMjQsIDIyMiwgCisgICAgMTQzLCAyMzQsIDEzOCwgNjMsIDIzMywgMjI0LCAyMjIsIDE0MywgMjM0LCAxMzksIDI1MSwgNzcsIDIzMCwgMjA3LCAyNTEsIAorICAgIDE1LCA2MywgMjUxLCA0LCA1LCAxMTQsIDI1MiwgNzgsIDYzLCAyNTEsIDQsIDUsIDE5MywgMjUyLCA3OCwgNjMsIDI1MSwgNCwgCisgICAgNSwgMjUxLCA1LCAyMTcsIDIxLCA2MywgMjUxLCA0LCA1LCAyMjEsIDIwOSwgMjU1LCAxNzQsIDYzLCAxNiwgMjQ2LCA5OSwgCisgICAgMjUxLCAxMzMsIDYzLCAxNiwgMjIzLCAxMzIsIDIyMiwgMjI1LCA2MywgMTYsIDIyNiwgODEsIDI0MywgNzAsIDYzLCAxNiwgCisgICAgMjIzLCAxMzIsIDIyMiwgMjI2LCAyMjMsIDQ1LCAyNDIsIDE1MiwgNjMsIDE2LCAyMjUsIDExNSwgMTkxLCA2MywgMTYsIAorICAgIDIyOCwgNjQsIDI1MSwgMTMzLCA2MywgMTYsIDIyOCwgNjQsIDI1MSwgMTM0LCAyMjcsIDE0MywgMjU1LCAxNzEsIDYzLCAxNiwgCisgICAgMjI4LCA2NCwgMjUxLCAxMzQsIDI0MiwgMTI0LCAyNTUsIDE3MSwgNjMsIDE2LCAyMjgsIDY0LCAyNTEsIDEzNCwgMjUxLCAKKyAgICA3NywgMjU1LCAxNzEsIDYzLCA1LCAyMjMsIDEzMywgMjI5LCAyMjQsIDIyMywgMTMzLCAyNDcsIDE2NiwgNjMsIDUsIDIyMywgCisgICAgMTMzLCAyMjksIDIyNCwgMjQyLCAxMjMsIDYzLCAxNjQsIDI1MSwgMTM3LCAyMjAsIDUsIDI0MiwgMjIyLCAyMzAsIDI1MywgCisgICAgMjIzLCA0NCwgNjMsIDE2NCwgMjMwLCAxNjgsIDIxMSwgMCwgMjQyLCAyMjIsIDIzMCwgMjUzLCAyMjMsIDQ0LCA2MywgMTY0LCAKKyAgICAyMjcsIDE0MywgMjE1LCAxNzMsIDYzLCAxNjQsIDY1LCAyNTEsIDE2MCwgMjIyLCAyMTUsIDIxMSwgMCwgMjMwLCAyNTMsIAorICAgIDIzMSwgOTgsIDE4NiwgNjMsIDE2NCwgMjUwLCA0LCAyNTEsIDE2MCwgMjIyLCAyMTUsIDIxMSwgMCwgMjMwLCAyNTMsIDIyMCwgCisgICAgMTExLCAxODYsIDIyMiwgMjUzLCAyMTgsIDAsIDUwLCAyMzMsIDUxLCAyMTgsIDAsIDUwLCAyMjIsIDI1MywgMjE4LCAwLCA1LCAKKyAgICAyLCAyNDcsIDEyNiwgMjMzLCA1MSwgMjE4LCAwLCA1LCAyLCAyNDcsIDEyNiwgNjMsIDE2NCwgMjMzLCA2MSwgMjMxLCAxMDEsIAorICAgIDIyMiwgMTQ1LCA2MywgMTY0LCAyMTUsIDI1MSwgMjMxLCAxMDEsIDIyMiwgMTQ1LCA2OCwgMSwgMTc2LCA2OCwgMSwgMjM0LCAKKyAgICAxMzgsIDY4LCAxLCAyNDMsIDE0MiwgNjgsIDEsIDI0MywgMCwgNjgsIDEsIDIyOSwgODIsIDY4LCAxLCAyNTEsIDQxLCA2OCwgCisgICAgMSwgMjUwLCAxNjUsIDY4LCAxLCAyMzUsIDE0NywgNjgsIDEsIDIzNSwgMTIwLCA2OCwgMSwgMjI3LCAxNjksIDY4LCAxLCAKKyAgICAyMjgsIDgxLCA2OCwgMSwgMjE1LCAxNTcsIDY4LCAxLCAyMTUsIDE0NSwgNjgsIDEsIDI0OCwgMTQzLCA2OCwgMSwgMjQ4LCAKKyAgICAxMjcsIDY4LCAxLCAyMjgsIDExNSwgNjgsIDEsIDIxNywgMTA2LCA2OCwgMSwgMjE2LCAyMDksIDY4LCAxLCAyNDgsIDIyOSwgCisgICAgNjgsIDEsIDI0OCwgMzMsIDY4LCAxLCAxOTgsIDY4LCAxLCAxOTEsIDY4LCAxLCAyMjUsIDE1MCwgNjgsIDEsIDI1MiwgMTk5LCAKKyAgICA2OCwgMSwgMjUyLCAyNiwgNjgsIDEsIDE4NiwgNjgsIDEsIDE5MiwgNjgsIDEsIDIwNSwgNjgsIDEsIDIzMywgMTQxLCA2OCwgCisgICAgMSwgMjEyLCA2NSwgNjgsIDEsIDIwNiwgNjgsIDEsIDE2MiwgNjgsIDEsIDIzMiwgMTkwLCA2OCwgMSwgNjEsIDY4LCAxLCAKKyAgICAyMjAsIDg4LCA2MSwgNjgsIDEsIDc0LCA2OCwgMSwgMjM2LCA0MCwgNjgsIDEsIDY5LCA2OCwgMSwgMjE0LCAxMTgsIDY4LCAKKyAgICAxLCA3NiwgNjgsIDEsIDIzMCwgMTU2LCA3NiwgNjgsIDEsIDc4LCA2OCwgMSwgMjUzLCAyMDAsIDY4LCAyNSwgNSwgMjE3LCAKKyAgICA2NSwgMjU1LCA4MiwgNjgsIDI1LCA1LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDc0LCA2OCwgMjUsIDUsIDIzNiwgNDAsIDY4LCAKKyAgICAyNSwgNSwgNjksIDY4LCAyNSwgNSwgMjE0LCAxMTgsIDY4LCAyNSwgNSwgNzYsIDY4LCAyNSwgNSwgMjU0LCAyMTAsIDY4LCAKKyAgICAyNSwgNSwgMjMwLCAxNTYsIDIzNiwgNDAsIDY4LCAyNSwgNSwgMjMwLCAxNTYsIDc4LCA2OCwgMjUsIDUsIDE2MCwgNDgsIAorICAgIDY4LCA1LCAyNTQsIDgzLCA2OCwgNSwgNTksIDUxLCA2OCwgNSwgMjEzLCAxNDcsIDY4LCA1LCAyMTMsIDE1MiwgNjgsIDUsIAorICAgIDI1MywgMjQzLCA2OCwgMTE3LCA1LCAxNDcsIDE5MiwgNjgsIDExNywgNSwgMTQ3LCAyMDUsIDY4LCAxMTcsIDUsIDE0NywgCisgICAgMjEyLCA2NSwgNjgsIDExNywgNSwgMTQ3LCAxNjIsIDY4LCAxLCAyNDIsIDEzOSwgMjA2LCA2OCwgMjEsIDIxMCwgODYsIDY4LCAKKyAgICAyMSwgMTExLCA2OCwgMjEsIDEwNSwgNjgsIDIxLCAxNTgsIDY4LCAyMSwgMTYxLCA2OCwgMjEsIDE5MCwgNjgsIDIxLCAxOTUsIAorICAgIDY4LCAyMSwgMTk5LCA2OCwgMjEsIDE5NiwgNjgsIDIxLCAyMDEsIDY4LCA1LCAyMzIsIDE5OCwgMjIxLCAxNzQsIDY4LCA1LCAKKyAgICAyMjEsIDE3NCwgNjgsIDE2LCAyMzIsIDE1OSwgNjgsIDE2LCAyNDksIDIyMSwgNjgsIDE2LCAyNTQsIDIyOSwgNjgsIDE2LCAKKyAgICAyNDMsIDU1LCA2OCwgMSwgMjIwLCAxMDQsIDY4LCAxLCAyMTgsIDIyNSwgNjgsIDEsIDE0OSwgMTUzLCA2OCwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgNjgsIDEsIDE0OSwgMTU2LCA2OCwgMSwgMTQ5LCAyMzIsIDE5MSwgNjgsIDI1LCA1LCAxNDksIDE1MywgNjgsIAorICAgIDI1LCA1LCAxNDksIDIyMiwgMTgyLCA2OCwgMjUsIDUsIDE0OSwgMTU2LCA2OCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDY4LCAKKyAgICAxLCAyMzAsIDE1NiwgMjI5LCA4MiwgNjgsIDEsIDIzMCwgMTU2LCAyMzUsIDEyMCwgNjgsIDEsIDIzMCwgMTU2LCAyNTIsIAorICAgIDExOSwgNjgsIDEsIDIzMCwgMTU2LCAyNTIsIDExNCwgNjgsIDExNywgNSwgMjMwLCAxNTYsIDE0NywgMTk4LCA2OCwgMTE3LCAKKyAgICA1LCAyMzAsIDE1NiwgMTQ3LCAxODYsIDY4LCAxMTcsIDUsIDIzMCwgMTU2LCAxNDcsIDIzMywgMTQxLCA2OCwgMSwgMjIwLCAKKyAgICAxMTAsIDIzNCwgMjE5LCAyMjAsIDEwNCwgNjgsIDI1LCA1LCAyMjAsIDExMCwgMjM0LCAyMTksIDI0NSwgNjMsIDY4LCAxMzgsIAorICAgIDE2NCwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyNDEsIDI1NCwgNjgsIDEzOCwgMTY0LCAyMjAsIDExMCwgMjM0LCAyMTksIDIzNCwgCisgICAgMTg5LCAyMjUsIDEyNCwgNjgsIDEsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDIwOSwgNjgsIDEsIDIxMiwgCisgICAgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMjQsIDExNywgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgCisgICAgMjQ1LCA2MywgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE0LCAyMTQsIDY4LCA1LCAyMTIsIDcsIAorICAgIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAzMCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI5LCAKKyAgICA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjgsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIAorICAgIDIxOSwgMjE2LCAyNywgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI2LCA2OCwgMSwgMjQ1LCAKKyAgICAyMjcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjI4LCAxMTUsIDY4LCAxLCAyNDUsIDIyNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAKKyAgICAyMTAsIDE3NiwgNjgsIDEsIDI0NSwgMjI3LCAyMjQsIDExMSwgMjM0LCAyMTksIDI0MiwgMjI0LCA2OCwgMjUsIDUsIDI0MywgCisgICAgNjYsIDIzNCwgMjE5LCA3NCwgNjgsIDI1LCA1LCAyMzQsIDE5NCwgMjI2LCAyMzgsIDY4LCAyNSwgNSwgMjM0LCAxOTQsIDY5LCAKKyAgICA2OCwgMjUsIDUsIDIzNCwgMTk0LCAyNDUsIDIxNywgNjgsIDEsIDIyMCwgODgsIDE3NiwgNjgsIDEsIDIyMCwgODgsIDIzNCwgCisgICAgMTM4LCA2OCwgMSwgMjIwLCA4OCwgMjQzLCAxNDIsIDY4LCAxLCAyMjAsIDg4LCAyNTEsIDQxLCA2OCwgMSwgMjIwLCA4OCwgCisgICAgMjEwLCAxMTYsIDY4LCAxLCAyMjAsIDg4LCAyMjcsIDE2OSwgNjgsIDEsIDIyMCwgODgsIDI0OCwgMjI5LCA2OCwgMSwgMjIwLCAKKyAgICA4OCwgMTk4LCA2OCwgMSwgMjIwLCA4OCwgMjI1LCAxNTAsIDY4LCAxLCAyMjAsIDg4LCAyNDQsIDIwNCwgNjgsIDEsIDIyMCwgCisgICAgODgsIDI1MiwgMTk5LCA2OCwgMSwgMjIwLCA4OCwgMjE2LCAyMDksIDY4LCAxLCAyMjAsIDg4LCAxNjIsIDY4LCAxMTcsIDUsIAorICAgIDIyMCwgODgsIDE0NywgMjEyLCA2NSwgNjgsIDI1LCA1LCAyMjAsIDg4LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDIyMCwgODgsIAorICAgIDc2LCA2OCwgMjUsIDUsIDIyMCwgODgsIDE2MCwgNDgsIDY4LCAyNSwgNSwgMjIwLCA4OCwgNDAsIDIxMSwgMTE3LCA2OCwgNSwgCisgICAgMjIwLCA4OCwgMjE2LCAyOSwgNjgsIDUsIDIyMCwgODgsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg4LCAyMTYsIDI2LCA2OCwgCisgICAgNSwgMjIwLCA4OCwgMjE2LCAyNSwgNjgsIDUsIDIyMCwgODgsIDI0OSwgMTYwLCAyMTYsIDI5LCA2OCwgNSwgMjIwLCA4OCwgCisgICAgMjQ5LCAxNjAsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg4LCAyNDksIDE2MCwgMjQ1LCAxNjEsIDIxNiwgMzEsIDY4LCAxLCAKKyAgICAyMjIsIDEzMCwgMjI2LCA2NywgMjQ0LCAyMDQsIDY4LCA1LCAyMjIsIDEzMCwgMjI2LCA2NywgMjE2LCAyNiwgNjgsIDIyMCwgCisgICAgODgsIDIxLCAyMTAsIDg2LCA2OCwgMjIwLCA4OCwgMjEsIDExMSwgNjgsIDIyMCwgODgsIDIxLCAxMDUsIDY4LCAyMjAsIDg4LCAKKyAgICAyMSwgMTU4LCA2OCwgMjIwLCA4OCwgMjEsIDE2MSwgNjgsIDIyMCwgODgsIDIxLCAxOTAsIDY4LCAyMjAsIDg4LCAyMSwgCisgICAgMTk1LCA2OCwgMjIwLCA4OCwgMjEsIDE5OSwgNjgsIDIyMCwgODgsIDIxLCAxOTYsIDY4LCAyMjAsIDg4LCAyMSwgMjAxLCAKKyAgICA2OCwgNSwgMjM0LCAxMzIsIDIxNiwgMzAsIDY4LCA1LCAyMzQsIDEzMiwgMjE2LCAyOCwgNjgsIDI1LCA1LCAyNTQsIDE5OSwgCisgICAgNjEsIDY4LCAyNSwgNSwgMjU0LCAxOTksIDI1NCwgMjEwLCA2OCwgMTYsIDIyMCwgODgsIDExMSwgNjgsIDE2LCAyMjAsIDg4LCAKKyAgICAyNDUsIDM4LCA5OCwgNiwgMSwgMjU0LCAxMzEsIDk4LCA2LCAxLCAyNTIsIDE2MCwgOTgsIDYsIDEsIDI0MywgMTEzLCA5OCwgCisgICAgNiwgMSwgMjQ3LCAxMzYsIDk4LCA2LCAxLCAyNDUsIDE1OCwgOTgsIDYsIDEsIDIxMywgMTYwLCA5OCwgNiwgMSwgMjEwLCAKKyAgICA4OSwgOTgsIDYsIDEsIDIxNywgNjEsIDk4LCA2LCAxLCAyMzYsIDYsIDk4LCA2LCAxLCAyMzQsIDI0MCwgOTgsIDYsIDEsIAorICAgIDIzMywgODcsIDk4LCA2LCAxLCAyMzEsIDE5MCwgOTgsIDYsIDEsIDIyOSwgMjAwLCA5OCwgNiwgMSwgMjI2LCAyMDAsIDk4LCAKKyAgICA2LCAxLCAyMjYsIDIxLCA5OCwgNiwgMSwgMjEwLCA3OCwgOTgsIDYsIDEsIDIyMywgMTc0LCA5OCwgNiwgMSwgMjIxLCAyNDUsIAorICAgIDk4LCA2LCAxLCAyMTcsIDUxLCA5OCwgNiwgMSwgMjE0LCAxOTAsIDk4LCA2LCAxLCAyMjUsIDE0MywgOTgsIDYsIDEsIDIzNCwgCisgICAgMTI3LCA5OCwgNiwgMSwgMjQyLCAyNDgsIDk4LCA2LCAxLCAyMjQsIDc2LCA5OCwgNiwgMSwgMjIwLCAyMiwgOTgsIDYsIDEsIAorICAgIDI1MCwgMTA1LCA5OCwgNiwgMSwgMjUxLCAxNSwgOTgsIDYsIDEsIDIzNSwgMTA2LCA5OCwgNiwgMSwgMjUwLCA0OCwgOTgsIAorICAgIDYsIDEsIDI1MCwgMTUxLCA5OCwgNiwgMSwgMjExLCAxNjMsIDk4LCA2LCAxLCAyMzUsIDExNywgOTgsIDYsIDEsIDI0MiwgCisgICAgNTAsIDk4LCA2LCAxLCAyNDEsIDI0NSwgOTgsIDYsIDEsIDI0MSwgMTgyLCA5OCwgNiwgMSwgMjEyLCAyMiwgOTgsIDYsIDEsIAorICAgIDI0MiwgMTEsIDk4LCA2LCAxLCAyNDEsIDcyLCA5OCwgNiwgMSwgMjEwLCAyNDYsIDk4LCA2LCAxLCAyNTQsIDI0MSwgOTgsIAorICAgIDEsIDI1NCwgMTMxLCA5OCwgMSwgMjUyLCAxNjAsIDk4LCAxLCAyNDMsIDExMywgOTgsIDEsIDI0NywgMTM2LCA5OCwgMSwgCisgICAgMjQ1LCAxNTgsIDk4LCAxLCAyMTMsIDE2MCwgOTgsIDEsIDIxMCwgODksIDk4LCAxLCAyMTcsIDYxLCA5OCwgMSwgMjM2LCA2LCAKKyAgICA5OCwgMSwgMjM0LCAyNDAsIDk4LCAxLCAyMzMsIDg3LCA5OCwgMSwgMjMxLCAxOTAsIDk4LCAxLCAyMjksIDIwMCwgOTgsIDEsIAorICAgIDIyNiwgMjAwLCA5OCwgMSwgMjI2LCAyMSwgOTgsIDEsIDIxMCwgNzgsIDk4LCAxLCAyMjMsIDE3NCwgOTgsIDEsIDIyMSwgCisgICAgMjQ1LCA5OCwgMSwgMjE3LCA1MSwgOTgsIDEsIDIxNCwgMTkwLCA5OCwgMSwgMjI1LCAxNDMsIDk4LCAxLCAyMzQsIDEyNywgCisgICAgOTgsIDEsIDI0MiwgMjQ4LCA5OCwgMSwgMjI0LCA3NiwgOTgsIDEsIDIyMCwgMjIsIDk4LCAxLCAyNTAsIDEwNSwgOTgsIDEsIAorICAgIDI1MSwgMTUsIDk4LCAxLCAyMzUsIDEwNiwgOTgsIDEsIDI1MCwgNDgsIDk4LCAxLCAyNTAsIDE1MSwgOTgsIDEsIDIxMSwgCisgICAgMTYzLCA5OCwgMSwgMjM1LCAxMTcsIDk4LCAxLCAyNDIsIDUwLCA5OCwgMSwgMjQxLCAyNDUsIDk4LCAxLCAyNDEsIDE4MiwgCisgICAgOTgsIDEsIDIxMiwgMjIsIDk4LCAxLCAyNDIsIDExLCA5OCwgMSwgMjQxLCA3MiwgOTgsIDEsIDI0NCwgMTI5LCA5OCwgMSwgCisgICAgMjEwLCAyNDYsIDk4LCAxLCAyNDUsIDE3MywgOTgsIDEsIDIxNSwgOTQsIDI0MywgMTEzLCA5OCwgMSwgMjU0LCAyMDUsIDk4LCAKKyAgICAyMjYsIDE5LCAyMjAsIDEzOSwgNTgsIDEsIDk4LCAyMjksIDIwMCwgOTgsIDEsIDI1NCwgMjQxLCA5OCwgMSwgMjQyLCAxMCwgCisgICAgNTAsIDk4LCAxLCAyMzMsIDEzMywgNTAsIDI0LCAxMDAsIDIzNCwgNjQsIDI0LCAxMDAsIDIxOCwgMjE3LCAyNCwgMTAwLCAKKyAgICAyMjgsIDIzMSwgMjQsIDEwMCwgMjE2LCAxMDIsIDI0LCAxMDAsIDIxOCwgMjA2LCAyNCwgMTAwLCAyMjMsIDI5LCAyNCwgCisgICAgMTAwLCAyMzAsIDIyMiwgMjQsIDEwMCwgMjI1LCA5OCwgMjQsIDEwMCwgMjE4LCAyMTQsIDI0LCAxMDAsIDIxOSwgMTUwLCAKKyAgICAyNCwgMTAwLCAyMTgsIDIxMSwgMjQsIDEwMCwgMjM2LCA2MywgMjQsIDEwMCwgMjUwLCA1NCwgMjQsIDEwMCwgMjE4LCAyMjEsIAorICAgIDI0LCAxMDAsIDI1MCwgMTE0LCAyNCwgMTAwLCAyMzQsIDExNiwgMjQsIDEwMCwgMjE2LCAxNzQsIDI0LCAxMDAsIDIyNSwgCisgICAgMTM0LCAyNCwgMTAwLCAyNDEsIDE3OSwgMjQsIDEwMCwgMjI4LCAyMjcsIDI0LCAxMDAsIDIxOCwgMjE1LCAyNCwgMTAwLCAKKyAgICAyMjgsIDIyMSwgMjQsIDEwMCwgMjI4LCAyMjUsIDI0LCAxMDAsIDIxNiwgOTksIDI0LCAxMDAsIDIyMywgMTcsIDI0LCAxMDAsIAorICAgIDIxOCwgMjEzLCAyNCwgMTAwLCAyMjMsIDI3LCAyNCwgMTAwLCAyMzQsIDIyNCwgMjQsIDEwMCwgMjMwLCAyMTUsIDI0LCAKKyAgICAxMDAsIDIzNCwgMjI3LCAyNCwgMTAwLCAyMjUsIDkzLCAyNCwgMTAwLCAyMjUsIDkxLCAyNCwgMTAwLCAyMjUsIDc5LCAyNCwgCisgICAgMTAwLCAyMjUsIDg3LCAyNCwgMTAwLCAyMjUsIDg1LCAyNCwgMTAwLCAyMjUsIDgyLCAyNCwgMTAwLCAyMjUsIDg0LCAyNCwgCisgICAgMTAwLCAyMjUsIDgxLCAyNCwgMTAwLCAyMjUsIDg2LCAyNCwgMTAwLCAyMjUsIDk2LCAyNCwgMTAwLCAyMjUsIDk3LCAyNCwgCisgICAgMTAwLCAyMjUsIDgwLCAyNCwgMTAwLCAyMjUsIDkwLCAyNCwgMTAwLCAyMzQsIDIyNSwgMjQsIDEwMCwgMjM0LCAyMjMsIDI0LCAKKyAgICAxMDAsIDIxOSwgMTQzLCAyNCwgMTAwLCAyMTksIDE0MSwgMjQsIDEwMCwgMjE5LCAxMzMsIDI0LCAxMDAsIDIxOSwgMTM2LCAKKyAgICAyNCwgMTAwLCAyMTksIDE0MiwgMjQsIDEwMCwgMjE5LCAxMzgsIDI0LCAxMDAsIDIxOSwgMTM3LCAyNCwgMTAwLCAyMTksIAorICAgIDEzNSwgMjQsIDEwMCwgMjE5LCAxNDYsIDI0LCAxMDAsIDIxOSwgMTQ4LCAyNCwgMTAwLCAyMTksIDE0OSwgMjQsIDEwMCwgCisgICAgMjE5LCAxNDQsIDI0LCAxMDAsIDIxOSwgMTM0LCAyNCwgMTAwLCAyMTksIDEzOSwgMjQsIDEwMCwgMjE5LCAxNDcsIDI0LCAKKyAgICAxMDAsIDI1MCwgOTgsIDI0LCAxMDAsIDI1MCwgOTYsIDI0LCAxMDAsIDI1MCwgMTc2LCAyNCwgMTAwLCAyNTAsIDE3NCwgMjQsIAorICAgIDEwMCwgMjI2LCAzNiwgMjQsIDEwMCwgMjM2LCA1OCwgMjQsIDEwMCwgMjM2LCA0OSwgMjQsIDEwMCwgMjM2LCA1NywgMjQsIAorICAgIDEwMCwgMjM2LCA1NCwgMjQsIDEwMCwgMjM2LCA1MiwgMjQsIDEwMCwgMjM2LCA1NiwgMjQsIDEwMCwgMjE4LCAyMTgsIDI0LCAKKyAgICAxMDAsIDIzNiwgNjEsIDI0LCAxMDAsIDIzNiwgNjIsIDI0LCAxMDAsIDIzNiwgNTAsIDI0LCAxMDAsIDIzNiwgNTUsIDI0LCAKKyAgICAxMDAsIDIxMSwgMjYsIDI0LCAxMDAsIDI1MCwgNTMsIDI0LCAxMDAsIDI1MCwgOTksIDI0LCAxMDAsIDI1MCwgOTcsIDI0LCAKKyAgICAxMDAsIDI1MCwgMTc3LCAyNCwgMTAwLCAyNTAsIDE3NSwgMjQsIDEwMCwgMjUwLCAxMTIsIDI0LCAxMDAsIDI1MCwgMTEzLCAKKyAgICAyNCwgMTAwLCAyNTAsIDEwMCwgMjQsIDEwMCwgMjUwLCAxNzgsIDI0LCAxMDAsIDIyNSwgMTMyLCAyNCwgMTAwLCAyMzQsIAorICAgIDIyNiwgMjQsIDEwMCwgMjE4LCAyMTksIDI0LCAxMDAsIDIxMSwgMzIsIDI0LCAxMDAsIDIzNCwgNTUsIDI0LCAxMDAsIDIyOCwgCisgICAgMjIzLCAyNCwgMTAwLCAyMjgsIDIyOSwgMjQsIDEwMCwgMjI4LCAyMjgsIDI0LCAxMDAsIDIxNiwgOTYsIDI0LCAxMDAsIAorICAgIDI0NCwgMTExLCAyNCwgMTQzLCAyNDQsIDExMSwgMjQsIDE0MywgNjEsIDI0LCAxNDMsIDI1NCwgMjUyLCAyNCwgMTQzLCAKKyAgICAxOTIsIDI0LCAxNDMsIDIxMSwgOTIsIDI0LCAxNDMsIDI0NSwgMTI1LCAyNCwgMTQzLCA3NiwgMjQsIDE0MywgMjExLCAzNiwgCisgICAgMjQsIDE0MywgMjExLCA0NywgMjQsIDE0MywgNzgsIDI0LCAxNDMsIDIxMiwgNjUsIDI0LCAxNDMsIDIxMiwgNjIsIDI0LCAKKyAgICAxNDMsIDIyNiwgMjM4LCAyNCwgMTQzLCAyMTAsIDI0NCwgMjQsIDE0MywgNjksIDI0LCAxNDMsIDIxMiwgMTEsIDI0LCAxNDMsIAorICAgIDIxMiwgMjIsIDI0LCAxNDMsIDIxMSwgMjUwLCAyNCwgMTQzLCAyMTAsIDIxMiwgMjQsIDE0MywgMjQ1LCA2MywgMjQsIDE0MywgCisgICAgMjExLCA4LCAyNCwgMTQzLCA3NCwgMjQsIDE0MywgMjU1LCAxNjYsIDI0LCAxNDMsIDI1NSwgMTY1LCAyNCwgMTQzLCAyMTEsIAorICAgIDEwNiwgMjQsIDE0MywgMjExLCAxMDQsIDI0LCAxNDMsIDI0NSwgMTIzLCAyNCwgMTQzLCAyNDUsIDEyMiwgMjQsIDE0MywgCisgICAgMjQ1LCAxMjQsIDI0LCAxNDMsIDIxMSwgMzUsIDI0LCAxNDMsIDIxMSwgMzQsIDI0LCAxNDMsIDIyNywgODgsIDI0LCAxNDMsIAorICAgIDIyNywgODksIDI0LCAxNDMsIDIyNywgODIsIDI0LCAxNDMsIDIyNywgODcsIDI0LCAxNDMsIDIyNywgODUsIDI0LCAxNDMsIAorICAgIDIxMCwgMjM4LCAyNCwgMTQzLCAyMTAsIDIzNywgMjQsIDE0MywgMjEwLCAyMzYsIDI0LCAxNDMsIDIxMCwgMjM5LCAyNCwgCisgICAgMTQzLCAyMTAsIDI0MCwgMjQsIDE0MywgMjE1LCAzMCwgMjQsIDE0MywgMjE1LCAyOSwgMjQsIDE0MywgMjE1LCAyNywgMjQsIAorICAgIDE0MywgMjE1LCAyNCwgMjQsIDE0MywgMjE1LCAyNSwgMjQsIDE0MywgMjEwLCAyMTEsIDI0LCAxNDMsIDIxMCwgMjA4LCAyNCwgCisgICAgMTQzLCAyMTAsIDIwOSwgMjQsIDE0MywgMjEwLCAyMDMsIDI0LCAxNDMsIDIxMCwgMjA0LCAyNCwgMTQzLCAyMTAsIDIwNSwgCisgICAgMjQsIDE0MywgMjEwLCAyMDcsIDI0LCAxNDMsIDI0NSwgNTcsIDI0LCAxNDMsIDI0NSwgNTksIDI0LCAxNDMsIDIxMSwgNywgCisgICAgMjQsIDE0MywgMjQwLCAxNjAsIDI0LCAxNDMsIDI0MCwgMTUyLCAyNCwgMTQzLCAyNDAsIDE1NSwgMjQsIDE0MywgMjQwLCAKKyAgICAxNTMsIDI0LCAxNDMsIDI0MCwgMTU3LCAyNCwgMTQzLCAyNDAsIDE1OSwgMjQsIDE0MywgMjU0LCA0MiwgMjQsIDE0MywgCisgICAgMjU0LCAzOSwgMjQsIDE0MywgMjU0LCAzNywgMjQsIDE0MywgMjU0LCAzOCwgMjQsIDE0MywgMjE4LCAyMjIsIDI0LCAxNDMsIAorICAgIDI1NSwgMTY3LCAyNCwgMTQzLCAyMTEsIDEwNSwgMjQsIDE0MywgMjExLCAzMywgMjQsIDE0MywgMjI3LCA4NCwgMjQsIDE0MywgCisgICAgMjI3LCA4MywgMjQsIDkwLCAyMzQsIDY0LCAyNCwgOTAsIDIxOCwgMjE3LCAyNCwgOTAsIDIzNCwgNTcsIDI0LCA5MCwgMjI4LCAKKyAgICAyMzEsIDI0LCA5MCwgMjI4LCAyMjksIDI0LCA5MCwgMjI4LCAyMjgsIDI0LCA5MCwgMjE2LCAxMDIsIDI0LCA5MCwgMjIzLCAKKyAgICAyOSwgMjQsIDkwLCAyMjMsIDI0LCAyNCwgOTAsIDIyMywgMjEsIDI0LCA5MCwgMjIzLCAxNCwgMjQsIDkwLCAyMjMsIDksIAorICAgIDI0LCA5MCwgMjIzLCA0LCAyNCwgOTAsIDIyMywgMTUsIDI0LCA5MCwgMjIzLCAyNywgMjQsIDkwLCAyMzAsIDIyMiwgMjQsIAorICAgIDkwLCAyMjUsIDk4LCAyNCwgOTAsIDIyNSwgODcsIDI0LCA5MCwgMjE5LCAxNTAsIDI0LCA5MCwgMjE4LCAyMTEsIDI0LCA5MCwgCisgICAgMjM2LCA2MywgMjQsIDkwLCAyNTAsIDU0LCAyNCwgOTAsIDI1MCwgMTE0LCAyNCwgOTAsIDIzNCwgMTE2LCAyNCwgOTAsIAorICAgIDIxNiwgMTc0LCAyNCwgOTAsIDIyNSwgMTM0LCAyNCwgOTAsIDI0MSwgMTc5LCAyNCwgOTAsIDIzNCwgNTgsIDI0LCA5MCwgCisgICAgMjM0LCA1NiwgMjQsIDkwLCAyMjgsIDIyNywgMjQsIDkwLCAyMjgsIDIyMSwgMjQsIDkwLCAyMjgsIDIyMywgMjQsIDkwLCAKKyAgICAyMjgsIDIyNiwgMjQsIDkwLCAyMjgsIDIyMiwgMjQsIDkwLCAyMTYsIDk5LCAyNCwgOTAsIDIxNiwgOTYsIDI0LCA5MCwgCisgICAgMjIzLCAyMiwgMjQsIDkwLCAyMjMsIDE3LCAyNCwgOTAsIDIyMywgMywgMjQsIDkwLCAyMjMsIDIsIDI0LCA5MCwgMjE4LCAKKyAgICAyMTMsIDI0LCA5MCwgMjIzLCAxOSwgMjQsIDkwLCAyMjMsIDE4LCAyNCwgOTAsIDIyMywgMTEsIDI0LCA5MCwgMjIzLCAxMywgCisgICAgMjQsIDkwLCAyMjMsIDI2LCAyNCwgOTAsIDIyMywgNiwgMjQsIDkwLCAyMjMsIDE2LCAyNCwgOTAsIDIyMywgMjUsIDI0LCAKKyAgICA5MCwgMjIzLCAxLCAyNCwgOTAsIDIzMCwgMjE4LCAyNCwgOTAsIDIzMCwgMjEzLCAyNCwgOTAsIDIzMCwgMjE1LCAyNCwgOTAsIAorICAgIDIzMCwgMjEyLCAyNCwgOTAsIDIzMCwgMjEwLCAyNCwgOTAsIDIzMCwgMjE2LCAyNCwgOTAsIDIzMCwgMjIxLCAyNCwgOTAsIAorICAgIDIzMCwgMjE5LCAyNCwgOTAsIDIzNCwgMjI3LCAyNCwgOTAsIDIyNSwgODksIDI0LCA5MCwgMjI1LCA5MCwgMjQsIDkwLCAKKyAgICAyMjUsIDk1LCAyNCwgOTAsIDIzNCwgMjI1LCAyNCwgOTAsIDIxOSwgMTQzLCAyNCwgOTAsIDIxOSwgMTMzLCAyNCwgOTAsIAorICAgIDIxOSwgMTM2LCAyNCwgOTAsIDIxOSwgMTM4LCAyNCwgOTAsIDIyNiwgMzYsIDI0LCA5MCwgMjM2LCA1OCwgMjQsIDkwLCAKKyAgICAyMzYsIDUxLCAyNCwgOTAsIDIxOCwgMjE4LCAyNCwgOTAsIDIzNiwgNTksIDI0LCA5MCwgMjExLCAyNiwgMjQsIDkwLCAyMTEsIAorICAgIDIyLCAyNCwgOTAsIDIxMSwgMjMsIDI0LCA5MCwgMjI1LCAxMzIsIDI0LCA5MCwgMjM0LCAyMjYsIDI0LCA5MCwgMjQxLCAKKyAgICAxNzcsIDI0LCA5MCwgMjQxLCAxNzUsIDI0LCA5MCwgMjQxLCAxNzgsIDI0LCA5MCwgMjQxLCAxNzYsIDI0LCA5MCwgMjExLCAKKyAgICAzMiwgMjQsIDkwLCAyMzQsIDYwLCAyNCwgOTAsIDIzNCwgNTksIDI0LCA5MCwgMjM0LCA2MywgMjQsIDkwLCAyMzQsIDYxLCAKKyAgICAyNCwgOTAsIDIzNCwgNjIsIDI0LCA5MCwgMjE4LCAyMTUsIDI5LCAzLCAxNjIsIDI5LCAzLCAyNDAsIDIyOSwgMjksIDMsIAorICAgIDI0MSwgMTg3LCAyOSwgMywgMjQyLCA1MywgMjksIDMsIDI0MSwgMjI3LCAyOSwgMywgMjQxLCAyNDUsIDI5LCAzLCAyNDEsIAorICAgIDc1LCAyOSwgMywgMjQxLCA3NCwgMjksIDMsIDIzMywgMTQxLCAyOSwgMywgMjMyLCAxMDMsIDI5LCAzLCAyMzIsIDI0NywgCisgICAgMjksIDMsIDIzMywgMTQwLCAyOSwgMywgMjMzLCA1NiwgMjksIDMsIDIzMywgNjQsIDI5LCAzLCAyMzIsIDE2MiwgMjksIDMsIAorICAgIDIzMiwgNzUsIDI5LCAzLCAyNDEsIDE5NiwgMjksIDMsIDI0MSwgMTkwLCAyOSwgMywgMjQxLCAxOTIsIDI5LCAzLCAyNDEsIAorICAgIDE5NSwgMjksIDMsIDI0MSwgMTkzLCAyOSwgMywgMjQxLCAxOTQsIDI5LCAzLCAyNDEsIDE5MSwgMjksIDMsIDI0MSwgMTg5LCAKKyAgICAyOSwgMywgMTg2LCAyOSwgMywgMjMwLCAxMDcsIDI5LCAzLCAyMzAsIDIzNSwgMjksIDMsIDIzMSwgMjQyLCAyOSwgMywgCisgICAgMjMxLCA4NSwgMjksIDMsIDIzMSwgOTYsIDI5LCAzLCAyMzAsIDE2NiwgMjksIDMsIDIzMCwgNDcsIDI5LCAzLCAyMTcsIAorICAgIDE2NCwgMjksIDMsIDIxNywgMTU4LCAyOSwgMywgMjE3LCAxNjAsIDI5LCAzLCAyMTcsIDE2MywgMjksIDMsIDIxNywgMTYxLCAKKyAgICAyOSwgMywgMjE3LCAxNjIsIDI5LCAzLCAyMTcsIDE1OSwgMjksIDMsIDIxNywgMTU3LCAyOSwgMywgMjA1LCAyOSwgMywgCisgICAgMjIyLCAxNDIsIDI5LCAzLCAyMjMsIDM4LCAyOSwgMywgMjIzLCAxODcsIDI5LCAzLCAyMjMsIDExMSwgMjksIDMsIDIyMywgCisgICAgMTMxLCAyOSwgMywgMjIyLCAyMTMsIDI5LCAzLCAyMjIsIDExMSwgMjksIDMsIDIwNiwgMjksIDMsIDIxOCwgODQsIDI5LCAzLCAKKyAgICAyMTksIDE5MywgMjksIDMsIDIyMiwgMzMsIDI5LCAzLCAyMjEsIDE3MiwgMjksIDMsIDIyMSwgMTgzLCAyOSwgMywgMjE5LCAKKyAgICA2MCwgMjksIDMsIDIxNywgMjU0LCAyOSwgMywgMjIwLCAxMDQsIDI5LCAzLCAyMTksIDIyNywgMjksIDMsIDIyMCwgMzQsIAorICAgIDI5LCAzLCAyMjAsIDEwMCwgMjksIDMsIDIyMCwgNjMsIDI5LCAzLCAyMjAsIDY1LCAyOSwgMywgMjIwLCA5LCAyOSwgMywgCisgICAgMjE5LCAyMTAsIDI5LCAzLCAyMjQsIDkxLCAyOSwgMywgMjI0LCAzMywgMjksIDMsIDIyNCwgNTYsIDI5LCAzLCAyMjQsIDkwLCAKKyAgICAyOSwgMywgMjI0LCA3MSwgMjksIDMsIDIyNCwgNzIsIDI5LCAzLCAyMjQsIDQ1LCAyOSwgMywgMjI0LCA0NCwgMjksIDMsIAorICAgIDIyMywgMjQ1LCAyOSwgMywgMjIzLCAyNDEsIDI5LCAzLCAyMjMsIDI0NCwgMjksIDMsIDIyMywgMjQyLCAyOSwgMywgMjIzLCAKKyAgICAyNDMsIDI5LCAzLCAyMjQsIDY4LCAyOSwgMywgMjI0LCA2MiwgMjksIDMsIDIyNCwgNjQsIDI5LCAzLCAyMjQsIDY3LCAyOSwgCisgICAgMywgMjI0LCA2NSwgMjksIDMsIDIyNCwgNjYsIDI5LCAzLCAyMjQsIDYzLCAyOSwgMywgMjI0LCA2MSwgMjksIDMsIDIyNCwgCisgICAgNTcsIDI5LCAzLCAyMjQsIDYwLCAyOSwgMywgMjI0LCA1OCwgMjksIDMsIDIyNCwgNTksIDI5LCAzLCAyNTIsIDE5OSwgMjksIAorICAgIDMsIDI1MSwgMTMzLCAyOSwgMywgMjUyLCAxNCwgMjksIDMsIDI1MiwgMTk3LCAyOSwgMywgMjUyLCA3NCwgMjksIDMsIDI1MiwgCisgICAgODMsIDI5LCAzLCAyNTEsIDIxMywgMjksIDMsIDI1MSwgOTEsIDI5LCAzLCAyMTQsIDI3LCAyOSwgMywgMjEyLCAxMTYsIDI5LCAKKyAgICAzLCAyMTMsIDE3NiwgMjksIDMsIDIxNCwgMjYsIDI5LCAzLCAyMTMsIDI1MCwgMjksIDMsIDIxMywgMjU1LCAyOSwgMywgCisgICAgMjEzLCAxMzgsIDI5LCAzLCAyMTIsIDEwNywgMjksIDMsIDIxNywgMTA2LCAyOSwgMywgMjE1LCAxMTksIDI5LCAzLCAyMTYsIAorICAgIDExOCwgMjksIDMsIDIxNywgMTAyLCAyOSwgMywgMjE3LCAxMiwgMjksIDMsIDIxNywgMjMsIDI5LCAzLCAxMTIsIDI5LCAzLCAKKyAgICAyMTUsIDgwLCAyOSwgMywgMjUxLCA0MSwgMjksIDMsIDI0OSwgMTIwLCAyOSwgMywgMjUwLCA1OSwgMjksIDMsIDI1MSwgNDAsIAorICAgIDI5LCAzLCAyNTAsIDE5MCwgMjksIDMsIDI1MCwgMTk4LCAyOSwgMywgMjQ5LCAyNDYsIDI5LCAzLCAyNDksIDg5LCAyOSwgMywgCisgICAgMjExLCAxNjUsIDI5LCAzLCAyMTEsIDE0MSwgMjksIDMsIDIxMSwgMTU3LCAyOSwgMywgMjExLCAxNjQsIDI5LCAzLCAyMTEsIAorICAgIDE2MSwgMjksIDMsIDIxMSwgMTYyLCAyOSwgMywgMjExLCAxNDgsIDI5LCAzLCAyMTEsIDE0NywgMjksIDMsIDIxMSwgMTM2LCAKKyAgICAyOSwgMywgMjExLCAxMzIsIDI5LCAzLCAyMTEsIDEzNSwgMjksIDMsIDIxMSwgMTMzLCAyOSwgMywgMjExLCAxMzQsIDI5LCAKKyAgICAzLCAxOTgsIDI5LCAzLCAyMjcsIDI0MiwgMjksIDMsIDIyOCwgMjM4LCAyOSwgMywgMjI5LCAyMzAsIDI5LCAzLCAyMjksIAorICAgIDEwOCwgMjksIDMsIDIyOSwgMTEyLCAyOSwgMywgMjI4LCA3OSwgMjksIDMsIDIyNywgMTc4LCAyOSwgMywgMjI3LCAxNjksIAorICAgIDI5LCAzLCAyMjcsIDEzMiwgMjksIDMsIDIyNywgMTUyLCAyOSwgMywgMjI3LCAxNjgsIDI5LCAzLCAyMjcsIDE1OSwgMjksIAorICAgIDMsIDIyNywgMTYwLCAyOSwgMywgMjI3LCAxMzgsIDI5LCAzLCAyMjcsIDEyMywgMjksIDMsIDI0MiwgMTg3LCA2MSwgMjksIAorICAgIDMsIDI0MiwgMTg3LCA2OSwgMjksIDMsIDI0MiwgMTg3LCA3NCwgMjksIDMsIDI0MiwgMTg3LCAyNTUsIDgyLCAyOSwgMywgCisgICAgMjQyLCAxODcsIDI0NSwgMjE3LCAyOSwgMywgMjQyLCAxODcsIDc2LCAyOSwgMywgMjQyLCAxODcsIDc4LCAyOSwgMywgMjQyLCAKKyAgICAxODcsIDIxMiwgNjUsIDI5LCAzLCAxNzYsIDI5LCAzLCAyMzMsIDIyMywgMjksIDMsIDIzNCwgOTgsIDI5LCAzLCAyMzUsIAorICAgIDE2LCAyOSwgMywgMjM0LCAxODcsIDI5LCAzLCAyMzQsIDE4OCwgMjksIDMsIDIzNCwgMzQsIDI5LCAzLCAyMzQsIDMzLCAyOSwgCisgICAgMywgMjMzLCAxODgsIDI5LCAzLCAyMzMsIDE4MiwgMjksIDMsIDIzMywgMTg3LCAyOSwgMywgMjMzLCAxODMsIDI5LCAzLCAKKyAgICAyMzMsIDE4NCwgMjksIDMsIDIzMywgMTc3LCAyOSwgMywgMjMzLCAxNzEsIDI5LCAzLCAyMzMsIDE3MywgMjksIDMsIDIzMywgCisgICAgMTc2LCAyOSwgMywgMjMzLCAxNzQsIDI5LCAzLCAyMzMsIDE3NSwgMjksIDMsIDIzMywgMTcyLCAyOSwgMywgMjMzLCAxNzAsIAorICAgIDI5LCAzLCAyMzMsIDE2NiwgMjksIDMsIDIzMywgMTY5LCAyOSwgMywgMjMzLCAxNjcsIDI5LCAzLCAyMzMsIDE2OCwgMjksIAorICAgIDMsIDIxMiwgNjUsIDI5LCAzLCAyMTEsIDE5NSwgMjksIDMsIDIxMSwgMjUwLCAyOSwgMywgMjEyLCA2NCwgMjksIDMsIDIxMiwgCisgICAgMTcsIDI5LCAzLCAyMTIsIDIyLCAyOSwgMywgMjExLCAyMjcsIDI5LCAzLCAyMTEsIDIyNiwgMjksIDMsIDIyNSwgMTQyLCAKKyAgICA2MSwgMjksIDMsIDIyNSwgMTQyLCA2OSwgMjksIDMsIDIyNSwgMTQyLCA3NCwgMjksIDMsIDIyNSwgMTQyLCAyNTUsIDgyLCAKKyAgICAyOSwgMywgMjI1LCAxNDIsIDI0NSwgMjE3LCAyOSwgMywgMjI1LCAxNDIsIDc2LCAyOSwgMywgMjI1LCAxNDIsIDc4LCAyOSwgCisgICAgMywgMjEwLCAxMTYsIDI5LCAzLCAyMTAsIDEzLCAyOSwgMywgMjEwLCA0NCwgMjksIDMsIDIxMCwgMTE1LCAyOSwgMywgMjEwLCAKKyAgICA5MiwgMjksIDMsIDIxMCwgOTQsIDI5LCAzLCAyMTAsIDIzLCAyOSwgMywgMjEwLCAwLCAyOSwgMywgMjEwLCA4MiwgMjksIDMsIAorICAgIDIxMCwgNjIsIDI5LCAzLCAyMTAsIDY5LCAyOSwgMywgMjEwLCA4MSwgMjksIDMsIDIxMCwgNzMsIDI5LCAzLCAyMTAsIDc0LCAKKyAgICAyOSwgMywgMjEwLCA2NywgMjksIDMsIDIxMCwgNTMsIDI5LCAzLCAxOTIsIDI5LCAzLCAyMTAsIDIxMiwgMjksIDMsIDIxMSwgCisgICAgOCwgMjksIDMsIDIxMSwgMTAzLCAyOSwgMywgMjExLCA0NCwgMjksIDMsIDIxMSwgNDcsIDI5LCAzLCAyMTAsIDI0NCwgMjksIAorICAgIDMsIDIxMCwgMjM1LCAyOSwgMywgMjQ4LCAyMjksIDI5LCAzLCAyNDYsIDg2LCAyOSwgMywgMjQ4LCAxMSwgMjksIDMsIDI0OCwgCisgICAgMjI4LCAyOSwgMywgMjQ4LCA4NSwgMjksIDMsIDI0OCwgOTgsIDI5LCAzLCAyNDcsIDE1MywgMjksIDMsIDI0NiwgNTUsIDI5LCAKKyAgICAzLCAyNDgsIDE0MywgMjksIDMsIDI0OCwgMTA4LCAyOSwgMywgMjQ4LCAxMjAsIDI5LCAzLCAyNDgsIDE0MiwgMjksIDMsIAorICAgIDI0OCwgMTMwLCAyOSwgMywgMjQ4LCAxMzEsIDI5LCAzLCAyNDgsIDExMywgMjksIDMsIDI0OCwgOTksIDI5LCAzLCAyMzUsIAorICAgIDE0NywgMjksIDMsIDIzNSwgNTcsIDI5LCAzLCAyMzUsIDExNCwgMjksIDMsIDIzNSwgMTQ2LCAyOSwgMywgMjM1LCAxMzAsIAorICAgIDI5LCAzLCAyMzUsIDEzMiwgMjksIDMsIDIzNSwgNzQsIDI5LCAzLCAyMzUsIDM3LCAyOSwgMywgMjQzLCAxNDIsIDI5LCAzLCAKKyAgICAyNDIsIDEyMCwgMjksIDMsIDI0MiwgMjIxLCAyOSwgMywgMjQzLCAxMzksIDI5LCAzLCAyNDMsIDYyLCAyOSwgMywgMjQzLCAKKyAgICA2OSwgMjksIDMsIDI0MiwgMTgxLCAyOSwgMywgMjQyLCAxODAsIDI5LCAzLCAyNDIsIDg1LCAyOSwgMywgMjQyLCA4MSwgMjksIAorICAgIDMsIDI0MiwgODQsIDI5LCAzLCAyNDIsIDgyLCAyOSwgMywgMjQyLCA4MywgMjksIDMsIDI0MywgMzYsIDI5LCAzLCAyNDMsIAorICAgIDE2LCAyOSwgMywgMjQzLCAyNiwgMjksIDMsIDI0MywgMzUsIDI5LCAzLCAyNDMsIDMwLCAyOSwgMywgMjQzLCAzMSwgMjksIAorICAgIDMsIDI0MywgMjAsIDI5LCAzLCAyNDMsIDUsIDI5LCAzLCAyMTYsIDIwOSwgMjksIDMsIDIxNiwgMTM3LCAyOSwgMywgMjE2LCAKKyAgICAxNzYsIDI5LCAzLCAyMTYsIDIwOCwgMjksIDMsIDIxNiwgMTk1LCAyOSwgMywgMjE2LCAxOTYsIDI5LCAzLCAyMTYsIDE1NywgCisgICAgMjksIDMsIDIxNiwgMTI5LCAyOSwgMywgMjUwLCAxNjUsIDI5LCAzLCAyNTAsIDc3LCAyOSwgMywgMjUwLCAxMTgsIDI5LCAzLCAKKyAgICAyNTAsIDE2NCwgMjksIDMsIDI1MCwgMTM2LCAyOSwgMywgMjUwLCAxMzksIDI5LCAzLCAyNTAsIDk0LCAyOSwgMywgMjUwLCAKKyAgICA2NiwgMjksIDMsIDIyNSwgMTUwLCAyOSwgMywgMjI1LCAxMTcsIDI5LCAzLCAyMjUsIDEzNiwgMjksIDMsIDIyNSwgMTQ5LCAKKyAgICAyOSwgMywgMjI1LCAxMzgsIDI5LCAzLCAyMjUsIDEzOSwgMjksIDMsIDIyNSwgMTI0LCAyOSwgMywgMjI1LCAxMTMsIDI5LCAKKyAgICAzLCAyMTUsIDE4NCwgMjksIDMsIDIxNSwgMTY0LCAyOSwgMywgMjE1LCAxNjgsIDI5LCAzLCAyMTUsIDE4MywgMjksIDMsIAorICAgIDIxNSwgMTc4LCAyOSwgMywgMjE1LCAxNzksIDI5LCAzLCAyMTUsIDE2NywgMjksIDMsIDIxNSwgMTYyLCAyOSwgMywgMjE1LCAKKyAgICAzOSwgMjksIDMsIDIxNSwgMzEsIDI5LCAzLCAyMTUsIDM1LCAyOSwgMywgMjE1LCAzOCwgMjksIDMsIDIxNSwgMzYsIDI5LCAKKyAgICAzLCAyMTUsIDM3LCAyOSwgMywgMjE1LCAzMywgMjksIDMsIDIxNSwgMzIsIDI5LCAzLCAyNDQsIDIwNCwgMjksIDMsIDI0MywgCisgICAgMjQxLCAyOSwgMywgMjQ0LCAxMjksIDI5LCAzLCAyNDQsIDIwMywgMjksIDMsIDI0NCwgMTU1LCAyOSwgMywgMjQ0LCAxNjIsIAorICAgIDI5LCAzLCAyNDQsIDUxLCAyOSwgMywgMjQzLCAyMjAsIDI5LCAzLCAxOTEsIDI5LCAzLCAyMjQsIDE1MywgMjksIDMsIDIyNSwgCisgICAgMTExLCAyOSwgMywgMjI2LCA5MywgMjksIDMsIDIyNSwgMjE0LCAyOSwgMywgMjI1LCAyMjQsIDI5LCAzLCAyMjUsIDE5LCAKKyAgICAyOSwgMywgMjI0LCAxMTcsIDI5LCAzLCAyMjIsIDEwMSwgMjksIDMsIDIzMCwgMzYsIDI5LCAzLCAyNDMsIDIxNCwgMjksIAorICAgIDM4LCAyNDMsIDYwLCAyMiwgMjUsIDIzMywgMjksIDc5LCAyOSwgMzgsIDI1LCAyMzMsIDI5LCA3OSwgMjksIDM4LCAyNDMsIAorICAgIDYwLCA3OSwgMjksIDIyMSwgMTc1LCA3OSwgMjksIDIxMSwgMjA4LCAyOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyOSwgMjQ5LCAKKyAgICAyMjcsIDI5LCAyMjAsIDE1MiwgMjksIDI0OSwgMjM0LCAyOSwgMjI0LCAyMDIsIDI0OSwgMjM0LCAyOSwgMjI0LCAxNiwgNzksIAorICAgIDI5LCAyMjYsIDE5LCAyMjAsIDEzOSwgMjksIDIxLCAxMTEsIDI5LCAyMSwgMTA1LCAyOSwgMjEsIDE1OCwgMjksIDIxLCAKKyAgICAxNjEsIDI5LCAyMSwgMTkwLCAyOSwgMjEsIDE5NSwgMjksIDIxLCAxOTksIDI5LCAyMSwgMTk2LCAyOSwgMjEsIDIwMSwgMjksIAorICAgIDU0LCAyMTYsIDI0OCwgMjksIDU0LCAyMTUsIDczLCAyOSwgNTQsIDIxNiwgMTYzLCAyOSwgNTQsIDI0NCwgMjMsIDI5LCA1NCwgCisgICAgMjQ0LCAxMjIsIDI5LCA1NCwgMjE5LCAxMTMsIDI5LCA1NCwgMjIwLCAxMTgsIDI5LCA1NCwgMjQ1LCAxOTIsIDI5LCA1NCwgCisgICAgMjI4LCAyMDAsIDI5LCA1NCwgMjQwLCAyMTcsIDI5LCA1NCwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyOSwgMywgMjIxLCAxNzksIAorICAgIDIzMCwgNDcsIDI5LCAzLCAyMzAsIDQzLCAyOSwgMywgMjMwLCA0NCwgMjksIDMsIDIzMCwgNDUsIDI5LCAzLCAyMjEsIDE3OSwgCisgICAgMjUxLCA5MSwgMjksIDMsIDI1MSwgODgsIDI5LCAzLCAyNTEsIDg5LCAyOSwgMywgMjUxLCA5MCwgMjksIDMsIDIyMSwgMTc5LCAKKyAgICAyNDMsIDIyMCwgMjksIDMsIDI0MywgMjE2LCAyOSwgMywgMjQzLCAyMTcsIDI5LCAzLCAyNDMsIDIxOCwgMjksIDMsIDIyMSwgCisgICAgMTc5LCAyMjQsIDExNywgMjksIDMsIDIyNCwgMTEzLCAyOSwgMywgMjI0LCAxMTQsIDI5LCAzLCAyMjQsIDExNSwgMjksIAorICAgIDIxNiwgMzIsIDE2NCwgMjEwLCAyNDcsIDI5LCAyMTYsIDMyLCAxNjQsIDI0OCwgNDksIDI5LCAyMTYsIDMyLCAxNjQsIDIyMiwgCisgICAgMjQxLCAyOSwgMjE2LCAzMiwgMTY0LCAyMTksIDI1MywgMjIyLCAyNDEsIDI5LCAyMTYsIDMyLCAxNjQsIDI0NywgMjQzLCAKKyAgICAyOSwgMjE2LCAzMiwgMTY0LCAyMzQsIDE3MCwgMjksIDIxNiwgMzIsIDE2NCwgMjUwLCAxMDIsIDI5LCAyMTYsIDMyLCAxNjQsIAorICAgIDI0MSwgMTg0LCAyOSwgMjE2LCAzMiwgMTY0LCAyNDgsIDQ4LCAyOSwgMjE2LCAzMiwgMTY0LCAyMzMsIDIwMCwgMTY5LCAxLCAKKyAgICA2MSwgMTY5LCAxLCA3NiwgMTY5LCAxLCA3NCwgMTY5LCAxLCA3OCwgMTY5LCAxLCA2OSwgMTY5LCAxLCAyMTQsIDEwNSwgCisgICAgMTY5LCAxLCAyNDMsIDE0MiwgMTY5LCAxLCAxNzYsIDE2OSwgMSwgMjQzLCA2OSwgMTY5LCAxLCAyNDIsIDIyMSwgMTY5LCAxLCAKKyAgICAyNDIsIDE4MSwgMTY5LCAxLCAyNDIsIDEyMCwgMTY5LCAxLCAyNDIsIDg2LCAxNjksIDEsIDE2MiwgMTY5LCAxLCAyNDEsIAorICAgIDI0NSwgMTY5LCAxLCAyNDEsIDE4NywgMTY5LCAxLCAyNDEsIDc1LCAxNjksIDEsIDI0MCwgMjI5LCAxNjksIDEsIDI0MCwgCisgICAgMjA4LCAxNjksIDEsIDIzMywgMTQxLCAxNjksIDEsIDIzMywgNjQsIDE2OSwgMSwgMjMyLCAyNDcsIDE2OSwgMSwgMjMyLCAKKyAgICAxNjIsIDE2OSwgMSwgMjMyLCAxMDMsIDE2OSwgMSwgMjMyLCA3NiwgMTY5LCAxLCAxODYsIDE2OSwgMSwgMjMxLCA5NiwgCisgICAgMTY5LCAxLCAyMzAsIDIzNSwgMTY5LCAxLCAyMzAsIDE2NiwgMTY5LCAxLCAyMzAsIDEwNywgMTY5LCAxLCAxOTgsIDE2OSwgCisgICAgMSwgMjQxLCA5NywgMTY5LCAxLCAyMjksIDIxOCwgMTY5LCAxLCAyMjksIDExMiwgMTY5LCAxLCAyMjgsIDIzOCwgMTY5LCAxLCAKKyAgICAyMjgsIDc5LCAxNjksIDEsIDIyNywgMjQyLCAxNjksIDEsIDIyNywgMTgwLCAxNjksIDEsIDIyNCwgMzIsIDE2OSwgMSwgCisgICAgMjI0LCAxOSwgMTY5LCAxLCAyMjQsIDEyLCAxNjksIDEsIDIyNCwgNCwgMTY5LCAxLCAyMjMsIDI0OSwgMTY5LCAxLCAyMjMsIAorICAgIDI0NywgMTY5LCAxLCAyMDYsIDE2OSwgMSwgMjIyLCA5MywgMTY5LCAxLCAyMjEsIDE4MywgMTY5LCAxLCAyMTksIDE5MywgCisgICAgMTY5LCAxLCAyMTksIDYwLCAxNjksIDEsIDIxOCwgODQsIDE2OSwgMSwgMjE4LCAzLCAxNjksIDEsIDI0OCwgMjI5LCAxNjksIAorICAgIDEsIDIxNywgMTA2LCAxNjksIDEsIDI0OCwgOTgsIDE2OSwgMSwgMjE3LCAyMywgMTY5LCAxLCAyNDgsIDExLCAxNjksIDEsIAorICAgIDIxNiwgMTE4LCAxNjksIDEsIDI0NywgMTUzLCAxNjksIDEsIDI0NiwgODYsIDE2OSwgMSwgMjQ2LCA1OCwgMTY5LCAxLCAKKyAgICAyNDcsIDE2NCwgMTY5LCAxLCAyMTYsIDYwLCAxNjksIDEsIDIxNiwgNTksIDE2OSwgMSwgMjE2LCA0OCwgMTY5LCAxLCAyMTYsIAorICAgIDQ3LCAxNjksIDEsIDIxNiwgNDYsIDE2OSwgMSwgMjE2LCA0NSwgMTY5LCAxLCAyMTUsIDE4NCwgMTY5LCAxLCAyMTUsIDE3OSwgCisgICAgMTY5LCAxLCAyMTUsIDE2OCwgMTY5LCAxLCAyMTUsIDE2NywgMTY5LCAxLCAyMTUsIDE2NCwgMTY5LCAxLCAyMTUsIDE2MywgCisgICAgMTY5LCAxLCAyMTIsIDY1LCAxNjksIDEsIDIxMiwgMjIsIDE2OSwgMSwgMjExLCAyNTAsIDE2OSwgMSwgMjExLCAyMjcsIAorICAgIDE2OSwgMSwgMjExLCAxOTUsIDE2OSwgMSwgMjExLCAxODMsIDE2OSwgMSwgMTkyLCAxNjksIDEsIDIxMSwgNDcsIDE2OSwgMSwgCisgICAgMjExLCA4LCAxNjksIDEsIDIxMCwgMjQ0LCAxNjksIDEsIDIxMCwgMjEyLCAxNjksIDEsIDIxMCwgMTc3LCAxOCwgMTksIAorICAgIDI0MCwgMTc1LCAxOCwgMTksIDc2LCAxOCwgMTksIDI1NSwgNDYsIDE4LCAxOSwgNzQsIDE4LCAxOSwgMjM2LCA0MCwgMTgsIAorICAgIDE5LCA3OCwgMTgsIDE5LCAyMjYsIDE4NywgMTgsIDE5LCAyMTEsIDExNiwgMjI2LCAxODcsIDE4LCAxOSwgNzMsIDI0NSwgCisgICAgMjE3LCAxOCwgMTksIDczLCA3NCwgMTgsIDE5LCA2MSwgMTgsIDE5LCAyNTUsIDgyLCAxOCwgMTksIDIxMiwgMjIsIDE4LCAKKyAgICAxOSwgMTU5LCAyMTIsIDIyLCAxOCwgMTksIDIxMSwgMjUwLCAxOCwgMTksIDE1OSwgMjExLCAyNTAsIDE4LCAxOSwgMjExLCAKKyAgICAyNDIsIDE4LCAxOSwgMTU5LCAyMTEsIDI0MiwgMTgsIDE5LCAyMTEsIDIyNywgMTgsIDE5LCAxNTksIDIxMSwgMjI3LCAxOCwgCisgICAgMTksIDIxMSwgMjE1LCAxOCwgMTksIDE1OSwgMjExLCAyMTUsIDE4LCAxOSwgMjI5LCAxOTUsIDIxMSwgMjE1LCAxOCwgMTksIAorICAgIDIxMiwgNjUsIDE4LCAxOSwgMTU5LCAyMTIsIDY1LCAxOCwgMTksIDIxMiwgNjQsIDE4LCAxOSwgMTU5LCAyMTIsIDY0LCAxOCwgCisgICAgMTksIDIyOSwgMTk1LCAyMTIsIDY0LCAxOCwgMTksIDI1NCwgMjEwLCAxOCwgMTksIDIxMSwgMTE2LCAyMTIsIDk4LCAxOCwgCisgICAgMTksIDI0MiwgMTg3LCAyMTgsIDEzMSwgMTgsIDE5LCA0MCwgMTQyLCAxOCwgMTksIDQwLCAyNDIsIDE0MywgMTgsIDE5LCAKKyAgICA0MCwgMjUxLCAxODMsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgNDAsIDIxNiwgMTUsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgCisgICAgNDAsIDQ0LCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIDQwLCAyMjIsIDIzNiwgMTgsIDE5LCA0MCwgNTIsIDE0MiwgMTgsIDE5LCAKKyAgICA0MCwgNTIsIDIxOSwgMjUzLCA2NywgMjE4LCA5MiwgMTgsIDE5LCA0MCwgMjMwLCAyMjksIDI0NywgMTI4LCAxOCwgMTksIAorICAgIDQwLCAyMTksIDI1MywgMjAzLCA5MSwgMTgsIDE5LCA0MCwgMjI1LCAyNSwgMTgsIDE5LCA0MCwgMTI0LCAyMTcsIDg4LCAxOCwgCisgICAgMTksIDI0NSwgMTU4LCAxOCwgMTksIDIzNiwgNiwgMTgsIDE5LCAyMjYsIDIwMCwgMTgsIDE5LCAyNTQsIDEzMSwgMTgsIDE5LCAKKyAgICAyMjUsIDIyNCwgMTgsIDE5LCAyMjYsIDkxLCAxOCwgMTksIDIyNSwgMTExLCAxOCwgMTksIDIyNSwgNzQsIDE4LCAxOSwgCisgICAgMjI1LCAxOSwgMTgsIDE5LCAyMjQsIDI1MiwgMTgsIDE5LCAyMTEsIDExNiwgMjI0LCAyNTIsIDE4LCAxOSwgNzMsIDI0MSwgCisgICAgMjI3LCAxOCwgMTksIDczLCAyNDEsIDE4NywgMTgsIDE5LCAxOTEsIDE4LCAxOSwgMjI2LCA5MywgMTgsIDE5LCAyMjQsIAorICAgIDExNSwgMTgsIDE5LCAxNTksIDIyNCwgMTE1LCAxOCwgMTksIDIyNCwgMTEzLCAxOCwgMTksIDE1OSwgMjI0LCAxMTMsIDE4LCAKKyAgICAxOSwgMjI0LCAxMTIsIDE4LCAxOSwgMTU5LCAyMjQsIDExMiwgMTgsIDE5LCAyMjQsIDExMCwgMTgsIDE5LCAxNTksIDIyNCwgCisgICAgMTEwLCAxOCwgMTksIDIyNCwgMTA5LCAxOCwgMTksIDE1OSwgMjI0LCAxMDksIDE4LCAxOSwgMjI0LCAxMTcsIDE4LCAxOSwgCisgICAgMTU5LCAyMjQsIDExNywgMTgsIDE5LCAyMjQsIDExNiwgMTgsIDE5LCAxNTksIDIyNCwgMTE2LCAxOCwgMTksIDIxMSwgMTE2LCAKKyAgICAyMjQsIDExNiwgMTgsIDE5LCAyMjYsIDEwOSwgMTgsIDE5LCAxNTksIDIyNiwgMTA5LCAxOCwgMTksIDczLCAyNDIsIDY3LCAKKyAgICAxOCwgMTksIDIxNywgMjMsIDE4LCAxOSwgMjE3LCAxMDAsIDE4LCAxOSwgMjE2LCAxMTgsIDE4LCAxOSwgMjE2LCAxMDQsIAorICAgIDE4LCAxOSwgMTEyLCAxOCwgMTksIDIxNiwgMTgsIDE4LCAxOSwgMjExLCAxMTYsIDIxNiwgMTgsIDE4LCAxOSwgNzMsIDI0OCwgCisgICAgODUsIDE4LCAxOSwgNzMsIDI0OCwgMTEsIDE4LCAxOSwgMjE3LCAxMDYsIDE4LCAxOSwgMjE3LCAxMDIsIDE4LCAxOSwgMjE1LCAKKyAgICA3OCwgMTgsIDE5LCAxNTksIDIxNSwgNzgsIDE4LCAxOSwgMjE1LCA2MiwgMTgsIDE5LCAxNTksIDIxNSwgNjIsIDE4LCAxOSwgCisgICAgMjE1LCA2MSwgMTgsIDE5LCAxNTksIDIxNSwgNjEsIDE4LCAxOSwgMTA1LCAxOCwgMTksIDE1OSwgMTA1LCAxOCwgMTksIAorICAgIDIxNSwgNTQsIDE4LCAxOSwgMTU5LCAyMTUsIDU0LCAxOCwgMTksIDIxNSwgODAsIDE4LCAxOSwgMTU5LCAyMTUsIDgwLCAxOCwgCisgICAgMTksIDIxNSwgNzksIDE4LCAxOSwgMTU5LCAyMTUsIDc5LCAxOCwgMTksIDIyOSwgMTk1LCAyMTUsIDc5LCAxOCwgMTksIAorICAgIDIxNywgMTUzLCAxOCwgMTksIDIxNSwgMTUyLCAxOCwgMTksIDIxNSwgMTM2LCAxOCwgMTksIDIxNSwgMTM0LCAxOCwgMTksIAorICAgIDIxNSwgMTU3LCAxOCwgMTksIDIzNCwgMTg4LCAxOCwgMTksIDIzNSwgMTMsIDE4LCAxOSwgMjM0LCA5OCwgMTgsIDE5LCAKKyAgICAyMzQsIDg5LCAxOCwgMTksIDIzNCwgMzQsIDE4LCAxOSwgMjM0LCAxNiwgMTgsIDE5LCAyMTEsIDExNiwgMjM0LCAxNiwgMTgsIAorICAgIDE5LCAxNzYsIDE4LCAxOSwgMjM1LCAxNiwgMTgsIDE5LCAyMzMsIDE4NCwgMTgsIDE5LCAxNTksIDIzMywgMTg0LCAxOCwgCisgICAgMTksIDIzMywgMTgyLCAxOCwgMTksIDE1OSwgMjMzLCAxODIsIDE4LCAxOSwgMjMzLCAxODEsIDE4LCAxOSwgMTU5LCAyMzMsIAorICAgIDE4MSwgMTgsIDE5LCAyMzMsIDE4MCwgMTgsIDE5LCAxNTksIDIzMywgMTgwLCAxOCwgMTksIDIzMywgMTc5LCAxOCwgMTksIAorICAgIDE1OSwgMjMzLCAxNzksIDE4LCAxOSwgMjMzLCAxODgsIDE4LCAxOSwgMTU5LCAyMzMsIDE4OCwgMTgsIDE5LCAyMzMsIDE4NywgCisgICAgMTgsIDE5LCAxNTksIDIzMywgMTg3LCAxOCwgMTksIDIyOSwgMTk1LCAyMzMsIDE4NywgMTgsIDE5LCAyMzUsIDI5LCAxOCwgCisgICAgMTksIDIzMywgMTg5LCAxOCwgMTksIDIxOSwgMjksIDIzNCwgMTgyLCAxOCwgMTksIDIxOSwgMjksIDIzNCwgOTAsIDE4LCAKKyAgICAxOSwgMjE5LCAyOSwgMjM0LCAyOSwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDI1NCwgMTgsIDE5LCAyNTAsIDE5OCwgMTgsIAorICAgIDE5LCAyNTEsIDM5LCAxOCwgMTksIDI1MCwgNTksIDE4LCAxOSwgMjUwLCA0OSwgMTgsIDE5LCAyNDksIDI0NiwgMTgsIDE5LCAKKyAgICAyNDksIDE4MiwgMTgsIDE5LCAyMTEsIDExNiwgMjQ5LCAxODIsIDE4LCAxOSwgMjUxLCA0MSwgMTgsIDE5LCAyNTEsIDQwLCAKKyAgICAxOCwgMTksIDI0OSwgODcsIDE4LCAxOSwgMTU5LCAyNDksIDg3LCAxOCwgMTksIDI0OSwgODUsIDE4LCAxOSwgMTU5LCAyNDksIAorICAgIDg1LCAxOCwgMTksIDI0OSwgODQsIDE4LCAxOSwgMTU5LCAyNDksIDg0LCAxOCwgMTksIDI0OSwgODMsIDE4LCAxOSwgMTU5LCAKKyAgICAyNDksIDgzLCAxOCwgMTksIDI0OSwgODIsIDE4LCAxOSwgMTU5LCAyNDksIDgyLCAxOCwgMTksIDI0OSwgODksIDE4LCAxOSwgCisgICAgMTU5LCAyNDksIDg5LCAxOCwgMTksIDI0OSwgODgsIDE4LCAxOSwgMTU5LCAyNDksIDg4LCAxOCwgMTksIDIyOSwgMTk1LCAKKyAgICAyNDksIDg4LCAxOCwgMTksIDI1MSwgNzQsIDE4LCAxOSwgMjIxLCAyMTEsIDIxNiwgMjExLCAxOCwgMTksIDIzMSwgOTYsIAorICAgIDE4LCAxOSwgMjMxLCAyNDEsIDE4LCAxOSwgMjMwLCAyMzUsIDE4LCAxOSwgMjMwLCAyMDYsIDE4LCAxOSwgMjMwLCAxNjYsIAorICAgIDE4LCAxOSwgMjMwLCAxMzcsIDE4LCAxOSwgMjExLCAxMTYsIDIzMCwgMTM3LCAxOCwgMTksIDE4NiwgMTgsIDE5LCAyMzEsIAorICAgIDI0MiwgMTgsIDE5LCAyMzAsIDQ1LCAxOCwgMTksIDE1OSwgMjMwLCA0NSwgMTgsIDE5LCAyMzAsIDQzLCAxOCwgMTksIDE1OSwgCisgICAgMjMwLCA0MywgMTgsIDE5LCAyMzAsIDQyLCAxOCwgMTksIDE1OSwgMjMwLCA0MiwgMTgsIDE5LCAyMzAsIDQxLCAxOCwgMTksIAorICAgIDE1OSwgMjMwLCA0MSwgMTgsIDE5LCAyMzAsIDQwLCAxOCwgMTksIDE1OSwgMjMwLCA0MCwgMTgsIDE5LCAyMzAsIDQ3LCAxOCwgCisgICAgMTksIDE1OSwgMjMwLCA0NywgMTgsIDE5LCAyMzAsIDQ2LCAxOCwgMTksIDE1OSwgMjMwLCA0NiwgMTgsIDE5LCAyMjksIAorICAgIDE5NSwgMjMwLCA0NiwgMTgsIDE5LCAxOTQsIDE4LCAxOSwgMTU5LCAxOTQsIDE4LCAxOSwgMjMwLCAyMzksIDE4LCAxOSwgCisgICAgMjUzLCAyMTMsIDE5NCwgMTgsIDE5LCAyMjEsIDIxMSwgMTk0LCAxOCwgMTksIDIyOSwgMTEyLCAxOCwgMTksIDIyOSwgMjI5LCAKKyAgICAxOCwgMTksIDIyOCwgMjM4LCAxOCwgMTksIDIyOCwgMjEzLCAxOCwgMTksIDIyOCwgNzksIDE4LCAxOSwgMjI4LCA2OSwgMTgsIAorICAgIDE5LCAyMTEsIDExNiwgMjI4LCA2OSwgMTgsIDE5LCAxOTgsIDE4LCAxOSwgMjI5LCAyMzAsIDE4LCAxOSwgMjI3LCAxNzYsIAorICAgIDE4LCAxOSwgMTU5LCAyMjcsIDE3NiwgMTgsIDE5LCAyMjcsIDE3OCwgMTgsIDE5LCAxNTksIDIyNywgMTc4LCAxOCwgMTksIAorICAgIDIyNywgMTc3LCAxOCwgMTksIDE1OSwgMjI3LCAxNzcsIDE4LCAxOSwgMjI5LCAxOTUsIDIyNywgMTc3LCAxOCwgMTksIDIzMCwgCisgICAgMzAsIDE4LCAxOSwgNzMsIDIyOSwgODQsIDE4LCAxOSwgMjI4LCAyNDMsIDE4LCAxOSwgMjMzLCA2NCwgMTgsIDE5LCAyMzMsIAorICAgIDEzOSwgMTgsIDE5LCAyMzIsIDI0NywgMTgsIDE5LCAyMzIsIDIzMywgMTgsIDE5LCAyMzIsIDE2MiwgMTgsIDE5LCAyMzIsIAorICAgIDEzMywgMTgsIDE5LCAyMTEsIDExNiwgMjMyLCAxMzMsIDE4LCAxOSwgMjMzLCAxNDEsIDE4LCAxOSwgMjMzLCAxNDAsIDE4LCAKKyAgICAxOSwgMjMyLCA3MywgMTgsIDE5LCAxNTksIDIzMiwgNzMsIDE4LCAxOSwgMjMyLCA3MiwgMTgsIDE5LCAxNTksIDIzMiwgNzIsIAorICAgIDE4LCAxOSwgMjMyLCA3MSwgMTgsIDE5LCAxNTksIDIzMiwgNzEsIDE4LCAxOSwgMjMyLCA3MCwgMTgsIDE5LCAxNTksIDIzMiwgCisgICAgNzAsIDE4LCAxOSwgMjMyLCA2OSwgMTgsIDE5LCAxNTksIDIzMiwgNjksIDE4LCAxOSwgMjMyLCA3NSwgMTgsIDE5LCAxNTksIAorICAgIDIzMiwgNzUsIDE4LCAxOSwgMjMyLCA3NCwgMTgsIDE5LCAxNTksIDIzMiwgNzQsIDE4LCAxOSwgMTU2LCAxOCwgMTksIDE1OSwgCisgICAgMTU2LCAxOCwgMTksIDE0NywgMTU2LCAxOCwgMTksIDIyMSwgMTgzLCAxOCwgMTksIDIyMiwgMzEsIDE4LCAxOSwgMjE5LCAKKyAgICAxOTMsIDE4LCAxOSwgMjE5LCAxNzcsIDE4LCAxOSwgMjE5LCA2MCwgMTgsIDE5LCAyMTksIDQyLCAxOCwgMTksIDIxMSwgCisgICAgMTE2LCAyMTksIDQyLCAxOCwgMTksIDIwNiwgMTgsIDE5LCAyMjIsIDMzLCAxOCwgMTksIDIxNywgMjUwLCAxOCwgMTksIAorICAgIDE1OSwgMjE3LCAyNTAsIDE4LCAxOSwgMjE3LCAyNDQsIDE4LCAxOSwgMTU5LCAyMTcsIDI0NCwgMTgsIDE5LCAyMTcsIDI0MywgCisgICAgMTgsIDE5LCAxNTksIDIxNywgMjQzLCAxOCwgMTksIDIxNywgMjM5LCAxOCwgMTksIDE1OSwgMjE3LCAyMzksIDE4LCAxOSwgCisgICAgMjE3LCAyMzgsIDE4LCAxOSwgMTU5LCAyMTcsIDIzOCwgMTgsIDE5LCAyMTcsIDI1NCwgMTgsIDE5LCAxNTksIDIxNywgMjU0LCAKKyAgICAxOCwgMTksIDIxNywgMjUzLCAxOCwgMTksIDE1OSwgMjE3LCAyNTMsIDE4LCAxOSwgMjI5LCAxOTUsIDIxNywgMjUzLCAxOCwgCisgICAgMTksIDIyMiwgOTMsIDE4LCAxOSwgMjUzLCAyMTMsIDIyMiwgOTMsIDE4LCAxOSwgMjE3LCAyNTUsIDE4LCAxOSwgMjUxLCAKKyAgICAyMjYsIDIyMiwgOTMsIDE4LCAxOSwgMjMwLCAxMzIsIDIxOSwgMTEwLCAxOCwgMTksIDIyOSwgMTk1LCAyMTksIDEwMSwgMTgsIAorICAgIDE5LCAyMjksIDE5NSwgMjIyLCA5MSwgMTgsIDE5LCAyMjksIDE5NSwgMjE4LCAyMzcsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOCwgCisgICAgODcsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOSwgMTAwLCAxOCwgMTksIDIyOSwgMTk1LCAyMjEsIDE4NiwgMTgsIDE5LCAyMjAsIAorICAgIDY1LCAxOCwgMTksIDIyMCwgMzQsIDE4LCAxOSwgMjIwLCAyOSwgMTgsIDE5LCAyMjAsIDksIDE4LCAxOSwgMjIwLCAzLCAxOCwgCisgICAgMTksIDIyMCwgMTA0LCAxOCwgMTksIDIyMCwgMTAwLCAxOCwgMTksIDIxOSwgMjA4LCAxOCwgMTksIDE1OSwgMjE5LCAyMDgsIAorICAgIDE4LCAxOSwgMjE5LCAyMDcsIDE4LCAxOSwgMTU5LCAyMTksIDIwNywgMTgsIDE5LCAyMTksIDIwNiwgMTgsIDE5LCAxNTksIAorICAgIDIxOSwgMjA2LCAxOCwgMTksIDIxOSwgMjA1LCAxOCwgMTksIDE1OSwgMjE5LCAyMDUsIDE4LCAxOSwgMjE5LCAyMDQsIDE4LCAKKyAgICAxOSwgMTU5LCAyMTksIDIwNCwgMTgsIDE5LCAyMTksIDIxMCwgMTgsIDE5LCAxNTksIDIxOSwgMjEwLCAxOCwgMTksIDIxOSwgCisgICAgMjA5LCAxOCwgMTksIDE1OSwgMjE5LCAyMDksIDE4LCAxOSwgMjIwLCAxMDYsIDE4LCAxOSwgMjExLCA0NywgMTgsIDE5LCAKKyAgICAyMTEsIDEwMSwgMTgsIDE5LCAyMTEsIDgsIDE4LCAxOSwgMjEwLCAyNTUsIDE4LCAxOSwgMjEwLCAyNDQsIDE4LCAxOSwgCisgICAgMjEwLCAyMjksIDE4LCAxOSwgMjExLCAxMTYsIDIxMCwgMjI5LCAxOCwgMTksIDE5MiwgMTgsIDE5LCAyMTEsIDEwMywgMTgsIAorICAgIDE5LCAyMTAsIDE3NCwgMTgsIDE5LCAxNTksIDIxMCwgMTc0LCAxOCwgMTksIDIxMCwgMTczLCAxOCwgMTksIDE1OSwgMjEwLCAKKyAgICAxNzMsIDE4LCAxOSwgMjEwLCAxNzIsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MiwgMTgsIDE5LCAyMTAsIDE3MSwgMTgsIDE5LCAKKyAgICAxNTksIDIxMCwgMTcxLCAxOCwgMTksIDIxMCwgMTcwLCAxOCwgMTksIDE1OSwgMjEwLCAxNzAsIDE4LCAxOSwgMjEwLCAxNzYsIAorICAgIDE4LCAxOSwgMTU5LCAyMTAsIDE3NiwgMTgsIDE5LCAyMTAsIDE3NSwgMTgsIDE5LCAxNTksIDIxMCwgMTc1LCAxOCwgMTksIAorICAgIDIyOSwgMTk1LCAyMTAsIDE3NSwgMTgsIDE5LCAyMTEsIDExNywgMTgsIDE5LCAyNTIsIDEyLCAyMTEsIDExNywgMTgsIDE5LCAKKyAgICAxNTksIDIxMSwgMTE3LCAxOCwgMTksIDIyMSwgMjExLCAyMTEsIDgsIDE4LCAxOSwgMjIzLCAxMzEsIDE4LCAxOSwgMjIzLCAKKyAgICAyMjYsIDIyMywgMTMxLCAxOCwgMTksIDE1OSwgMjMzLCA2NCwgMTgsIDE5LCAyMjMsIDE4NiwgMTgsIDE5LCAyMjMsIDM4LCAKKyAgICAxOCwgMTksIDIyMiwgMjQyLCAxOCwgMTksIDIyMiwgMjEzLCAxOCwgMTksIDIyMiwgMTk5LCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICAxNjIsIDE4LCAxOSwgMjA1LCAxOCwgMTksIDIyMywgMTg3LCAxOCwgMTksIDE1OSwgMjMzLCAxNDEsIDE4LCAxOSwgMjIyLCAKKyAgICAxMTAsIDE4LCAxOSwgMTU5LCAyMjIsIDExMCwgMTgsIDE5LCAxNTMsIDE4LCAxOSwgMTU5LCAxNTMsIDE4LCAxOSwgMTQ3LCAKKyAgICAxNTMsIDE4LCAxOSwgMjQ0LCAxNjIsIDE4LCAxOSwgMjQ0LCAyMDEsIDE4LCAxOSwgMjQ0LCAxMjksIDE4LCAxOSwgMjQ0LCAKKyAgICAxMTYsIDE4LCAxOSwgMjQ0LCA1MSwgMTgsIDE5LCAyNDQsIDQyLCAxOCwgMTksIDI0NCwgMjA0LCAxOCwgMTksIDI0NCwgCisgICAgMjAzLCAxOCwgMTksIDI0MywgMjE5LCAxOCwgMTksIDE1OSwgMjQzLCAyMTksIDE4LCAxOSwgMjQ1LCAxNCwgMTgsIDE5LCAKKyAgICAyMTYsIDE5NiwgMTgsIDE5LCAyMzAsIDI4LCAyMTYsIDE5NiwgMTgsIDE5LCAyMTYsIDE3NiwgMTgsIDE5LCAyMzAsIDI4LCAKKyAgICAyMTYsIDE3NiwgMTgsIDE5LCAyMTYsIDE3MiwgMTgsIDE5LCAyMzAsIDI4LCAyMTYsIDE3MiwgMTgsIDE5LCAyMTYsIDE1NywgCisgICAgMTgsIDE5LCAyMTYsIDE1NCwgMTgsIDE5LCAyMTYsIDIwOSwgMTgsIDE5LCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDEyOCwgCisgICAgMTgsIDE5LCAxNTksIDIxNiwgMTI4LCAxOCwgMTksIDIxNiwgMjExLCAxOCwgMTksIDIxNSwgMTQzLCAxOCwgMTksIDIxNSwgCisgICAgMTQxLCAxOCwgMTksIDIxNSwgMTQwLCAxOCwgMTksIDIxNSwgMTQ1LCAxOCwgMTksIDIxNSwgMTQ2LCAxOCwgMTksIDIxNSwgCisgICAgNTIsIDE4LCAxOSwgMjE1LCA1MSwgMTgsIDE5LCAyMTUsIDUwLCAxOCwgMTksIDIxNSwgNTMsIDE4LCAxOSwgMjI3LCAxOTcsIAorICAgIDI0MSwgMjQ1LCAxOCwgMTksIDIyNywgMTk3LCAyNDEsIDE4NywgMTgsIDE5LCAyMjcsIDE5NywgMjQxLCAxNjgsIDE4LCAxOSwgCisgICAgMjI3LCAxOTcsIDI0MSwgNzUsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MSwgNjAsIDE4LCAxOSwgMjI3LCAxOTcsIDE2MiwgMTgsIAorICAgIDE5LCAyMjcsIDE5NywgMjQyLCA1MywgMTgsIDE5LCAyMjcsIDE5NywgMjQyLCA2NywgMTgsIDE5LCAyMjcsIDE5NiwgMjQyLCAKKyAgICA2NywgMTgsIDE5LCAyNDEsIDE2MSwgMTgsIDE5LCAyMjQsIDg3LCAxOCwgMTksIDIyNCwgNTYsIDE4LCAxOSwgMjI0LCA1MSwgCisgICAgMTgsIDE5LCAyMjQsIDQ1LCAxOCwgMTksIDIyNCwgNDAsIDE4LCAxOSwgMjI0LCA5MSwgMTgsIDE5LCAyMjQsIDkwLCAxOCwgCisgICAgMTksIDIyNCwgOTksIDE4LCAxOSwgMjE2LCA1NiwgMTgsIDE5LCAyMTYsIDU0LCAxOCwgMTksIDIxNiwgNTMsIDE4LCAxOSwgCisgICAgMjE2LCA1NywgMTgsIDE5LCAxNTksIDIyMywgMTMxLCAxOCwgMTksIDE1OSwgMjIzLCAzOCwgMTgsIDE5LCAxNTksIDIyMiwgCisgICAgMjEzLCAxOCwgMTksIDE1OSwgMjA1LCAxOCwgMTksIDIyOSwgODAsIDE4LCAxOSwgMjI5LCAzMiwgMTgsIDE5LCAyMjksIDI4LCAKKyAgICAxOCwgMTksIDIyOSwgOSwgMTgsIDE5LCAyMjksIDQsIDE4LCAxOSwgMjI5LCA4MiwgMTgsIDE5LCAyMjksIDgxLCAxOCwgMTksIAorICAgIDIyOSwgODQsIDE4LCAxOSwgMjI4LCAxMDgsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgNjUsIDE4LCAxOSwgMjIxLCAyMTEsIAorICAgIDIyMCwgMzQsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgOSwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCAxMDQsIDE4LCAxOSwgCisgICAgMjExLCAyMTMsIDIxNiwgMTk2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE3NiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKKyAgICAxNTcsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMjA5LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIxMSwgMTgsIDE5LCAyMzIsIAorICAgIDI1NCwgMTgsIDE5LCAyMzIsIDI1MywgMTgsIDE5LCAyMzIsIDI1MiwgMTgsIDE5LCAyMzIsIDI1MSwgMTgsIDE5LCAyMzMsIAorICAgIDQsIDE4LCAxOSwgMjMzLCAzLCAxOCwgMTksIDIzMywgNSwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAxOTYsIDE4LCAxOSwgCisgICAgMjE2LCAyMTAsIDIxNiwgMTc2LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDE3MiwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAKKyAgICAxNTcsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMTU0LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDIwOSwgMTgsIDE5LCAyMTYsIAorICAgIDIxMCwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMjExLCAxOCwgMTksIDI1NCwgMTk4LCAyNTMsIDE2NiwgCisgICAgMTgsIDE5LCAyNTEsIDIyNiwgNzYsIDE4LCAxOSwgMjUxLCAyMjYsIDc0LCAxOCwgMTksIDI1MSwgMjI2LCA3OCwgMTgsIDE5LCAKKyAgICAyNTEsIDIyNiwgNjEsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgMjIsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMSwgMjUwLCAxOCwgCisgICAgMTksIDI1MSwgMjI2LCAyMTEsIDIyNywgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCA2NSwgMTgsIDE5LCAyNTEsIDIyNiwgMjI5LCAKKyAgICAxMTIsIDE4LCAxOSwgMjUxLCAyMjYsIDIyOCwgMjM4LCAxOCwgMTksIDI1MSwgMjI2LCAyMjgsIDc5LCAxOCwgMTksIDI1MSwgCisgICAgMjI2LCAxOTgsIDE4LCAxOSwgMjUxLCAyMjYsIDIzNCwgMTg4LCAxOCwgMTksIDI1MSwgMjI2LCAyMzQsIDk4LCAxOCwgMTksIAorICAgIDI1MSwgMjI2LCAyMzQsIDM0LCAxOCwgMTksIDI1MSwgMjI2LCAxNzYsIDE4LCAxOSwgMjIxLCAyMTEsIDI0MSwgMjQ1LCAxOCwgCisgICAgMTksIDIyMSwgMjExLCAyNDEsIDE4NywgMTgsIDE5LCAyMjEsIDIxMSwgMjQxLCA3NSwgMTgsIDE5LCAyMjEsIDIxMSwgMTYyLCAKKyAgICAxOCwgMTksIDczLCAyNDIsIDIyNywgMTgsIDE5LCA3MywgMjQyLCAyMzEsIDE4LCAxOSwgNzMsIDI0MiwgMjQzLCAxOCwgMTksIAorICAgIDczLCAyNDIsIDI0MiwgMTgsIDE5LCA3MywgMjQyLCAyMzIsIDE4LCAxOSwgNzMsIDI0MywgMCwgMTgsIDE5LCA3MywgMjIyLCAKKyAgICAxNDIsIDE4LCAxOSwgNzMsIDIyMiwgMjEzLCAxOCwgMTksIDczLCAyMjMsIDEzMSwgMTgsIDE5LCA3MywgMjIzLCAxMTEsIAorICAgIDE4LCAxOSwgNzMsIDIyMywgMzgsIDE4LCAxOSwgNzMsIDIwNSwgMTgsIDE5LCA3MywgMjExLCAxOTUsIDE4LCAxOSwgNzMsIAorICAgIDIxMSwgMjI3LCAxOCwgMTksIDczLCAyMTIsIDIyLCAxOCwgMTksIDczLCAyMTIsIDE3LCAxOCwgMTksIDczLCAyMTEsIDI1MCwgCisgICAgMTgsIDE5LCA3MywgMjEyLCA2NSwgMTgsIDE5LCA3MywgMjQwLCAyMDEsIDE4LCAxOSwgNzMsIDI0MCwgMjAyLCAxOCwgMTksIAorICAgIDczLCAyNDAsIDIwNSwgMTgsIDE5LCA3MywgMjQwLCAyMDQsIDE4LCAxOSwgNzMsIDI0MCwgMjAzLCAxOCwgMTksIDczLCAKKyAgICAyNDAsIDIwNywgMTgsIDE5LCA3MywgMjE2LCAxMzcsIDE4LCAxOSwgNzMsIDIxNiwgMTU3LCAxOCwgMTksIDczLCAyMTYsIAorICAgIDE5NiwgMTgsIDE5LCA3MywgMjE2LCAxOTUsIDE4LCAxOSwgNzMsIDIxNiwgMTc2LCAxOCwgMTksIDczLCAyMTYsIDIwOSwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxMjQsIDE4LCAxOSwgNzMsIDIxNSwgMTM0LCAxOCwgMTksIDczLCAyMTUsIDE1MiwgMTgsIDE5LCAKKyAgICA3MywgMjE1LCAxNTEsIDE4LCAxOSwgNzMsIDIxNSwgMTM2LCAxOCwgMTksIDczLCAyMTUsIDE1NywgMTgsIDE5LCA3MywgCisgICAgMjI0LCAxNTMsIDE4LCAxOSwgNzMsIDIyNSwgMTksIDE4LCAxOSwgNzMsIDIyNSwgMjI0LCAxOCwgMTksIDczLCAyMjUsIAorICAgIDIxNCwgMTgsIDE5LCA3MywgMjI1LCAxMTEsIDE4LCAxOSwgNzMsIDE5MSwgMTgsIDE5LCA3MywgMjI2LCAxMDksIDE4LCAxOSwgCisgICAgNzMsIDI0MiwgMTIwLCAxOCwgMTksIDczLCAyNDIsIDE4MSwgMTgsIDE5LCA3MywgMjQzLCA2OSwgMTgsIDE5LCA3MywgMjQzLCAKKyAgICA2MiwgMTgsIDE5LCA3MywgMjQyLCAyMjEsIDE4LCAxOSwgNzMsIDI0MywgMTQyLCAxOCwgMTksIDczLCAyMzQsIDEwNiwgMTgsIAorICAgIDE5LCA3MywgMjM0LCAxMTEsIDE4LCAxOSwgNzMsIDIzNCwgMTI1LCAxOCwgMTksIDczLCAyMzQsIDEyNCwgMTgsIDE5LCA3MywgCisgICAgMjM0LCAxMTgsIDE4LCAxOSwgNzMsIDIzNCwgMTM4LCAxOCwgMTksIDczLCAyMzQsIDQ3LCAxOCwgMTksIDczLCAyMzQsIDQ4LCAKKyAgICAxOCwgMTksIDczLCAyMzQsIDUxLCAxOCwgMTksIDczLCAyMzQsIDUwLCAxOCwgMTksIDczLCAyMzQsIDQ5LCAxOCwgMTksIAorICAgIDczLCAyMzQsIDUyLCAxOCwgMTksIDczLCAyMzQsIDUzLCAxOCwgMTksIDczLCAyMjcsIDI0MiwgMTgsIDE5LCA3MywgMjI4LCAKKyAgICA3OSwgMTgsIDE5LCA3MywgMjI5LCAxMTIsIDE4LCAxOSwgNzMsIDIyOSwgMTA4LCAxOCwgMTksIDczLCAyMjgsIDIzOCwgMTgsIAorICAgIDE5LCA3MywgMTk4LCAxOCwgMTksIDczLCAyMzAsIDEwNywgMTgsIDE5LCA3MywgMjMwLCAxNjYsIDE4LCAxOSwgNzMsIDIzMSwgCisgICAgOTYsIDE4LCAxOSwgNzMsIDIzMSwgODUsIDE4LCAxOSwgNzMsIDIzMCwgMjM1LCAxOCwgMTksIDczLCAxODYsIDE4LCAxOSwgCisgICAgNzMsIDIxMCwgMjEyLCAxOCwgMTksIDczLCAyMTAsIDI0NCwgMTgsIDE5LCA3MywgMjExLCA0NywgMTgsIDE5LCA3MywgMjExLCAKKyAgICA0NCwgMTgsIDE5LCA3MywgMjExLCA4LCAxOCwgMTksIDczLCAxOTIsIDE4LCAxOSwgNzMsIDIzNSwgNTcsIDE4LCAxOSwgCisgICAgMjIxLCAyMTEsIDIzNSwgNTcsIDE4LCAxOSwgNzMsIDIzNSwgNzQsIDE4LCAxOSwgNzMsIDIzNSwgMTMyLCAxOCwgMTksIDczLCAKKyAgICAyMzUsIDEzMCwgMTgsIDE5LCA3MywgMjM1LCAxMTQsIDE4LCAxOSwgMjIxLCAyMTEsIDIzNSwgMTE0LCAxOCwgMTksIDczLCAKKyAgICAyMzUsIDE0NywgMTgsIDE5LCA3MywgMjM1LCA4NywgMTgsIDE5LCA3MywgMjM1LCA5MSwgMTgsIDE5LCA3MywgMjM1LCAxMDEsIAorICAgIDE4LCAxOSwgNzMsIDIzNSwgMTAwLCAxOCwgMTksIDczLCAyMzUsIDk5LCAxOCwgMTksIDczLCAyMzUsIDEwMiwgMTgsIDE5LCAKKyAgICA3MywgMjMyLCAxMDMsIDE4LCAxOSwgNzMsIDIzMiwgMTYyLCAxOCwgMTksIDczLCAyMzMsIDY0LCAxOCwgMTksIDczLCAyMzMsIAorICAgIDU2LCAxOCwgMTksIDczLCAyMzIsIDI0NywgMTgsIDE5LCA3MywgMjMzLCAxNDEsIDE4LCAxOSwgNzMsIDI0NywgMTU3LCAxOCwgCisgICAgMTksIDczLCAyNDcsIDE1OCwgMTgsIDE5LCA3MywgMjQ3LCAxNjMsIDE4LCAxOSwgNzMsIDI0NywgMTYyLCAxOCwgMTksIDczLCAKKyAgICAyNDcsIDE1OSwgMTgsIDE5LCA3MywgMjQ3LCAxNjQsIDE4LCAxOSwgNzMsIDIzMiwgMjUwLCAxOCwgMTksIDczLCAyMzIsIAorICAgIDI1MiwgMTgsIDE5LCA3MywgMjMzLCAwLCAxOCwgMTksIDczLCAyMzIsIDI1NSwgMTgsIDE5LCA3MywgMjMyLCAyNTQsIDE4LCAKKyAgICAxOSwgNzMsIDIzMywgNCwgMTgsIDE5LCA3MywgMjE2LCA1MSwgMTgsIDE5LCA3MywgMjE2LCA1MywgMTgsIDE5LCA3MywgCisgICAgMjE2LCA1NiwgMTgsIDE5LCA3MywgMjE2LCA1NSwgMTgsIDE5LCA3MywgMjE2LCA1NCwgMTgsIDE5LCA3MywgMjE2LCA1NywgCisgICAgMTgsIDE5LCA3MywgMjE2LCA0NiwgMTgsIDE5LCA3MywgMjE2LCA0NywgMTgsIDE5LCA3MywgMjE2LCA1OSwgMTgsIDE5LCAKKyAgICA3MywgMjE2LCA1OCwgMTgsIDE5LCA3MywgMjE2LCA0OCwgMTgsIDE5LCA3MywgMjE2LCA2MCwgMTgsIDE5LCA3MywgMjEwLCAKKyAgICAxMywgMTgsIDE5LCA3MywgMjEwLCAyMywgMTgsIDE5LCA3MywgMjEwLCA5NCwgMTgsIDE5LCA3MywgMjEwLCA5MiwgMTgsIAorICAgIDE5LCA3MywgMjEwLCA0NCwgMTgsIDE5LCA3MywgMjEwLCAxMTYsIDE4LCAxOSwgNzMsIDIxMCwgMTU5LCAxOCwgMTksIDczLCAKKyAgICA2NSwgMjEwLCAxNTksIDE4LCAxOSwgNzMsIDI0NiwgMzYsIDE4LCAxOSwgNzMsIDI0NiwgMzcsIDE4LCAxOSwgNzMsIDI0NiwgCisgICAgNDQsIDE4LCAxOSwgNzMsIDI0NiwgNDMsIDE4LCAxOSwgNzMsIDI0NiwgMzksIDE4LCAxOSwgNzMsIDI0NiwgNDYsIDE4LCAKKyAgICAxOSwgNzMsIDIxOCwgODQsIDE4LCAxOSwgNzMsIDIxOSwgNjAsIDE4LCAxOSwgNzMsIDIyMSwgMTgzLCAxOCwgMTksIDczLCAKKyAgICAyMjEsIDE3MiwgMTgsIDE5LCA3MywgMjE5LCAxOTMsIDE4LCAxOSwgNzMsIDIwNiwgMTgsIDE5LCA3MywgMjE5LCAyMjcsIAorICAgIDE4LCAxOSwgNzMsIDIyMCwgOSwgMTgsIDE5LCA3MywgMjIwLCA2NSwgMTgsIDE5LCA3MywgMjIwLCA2MywgMTgsIDE5LCA3MywgCisgICAgMjIwLCAzNCwgMTgsIDE5LCA3MywgMjIwLCAxMDQsIDE4LCAxOSwgNzMsIDIyMCwgMTA2LCAxOCwgMTksIDczLCAyMTUsIAorICAgIDE2NCwgMTgsIDE5LCA3MywgMjE1LCAxNjcsIDE4LCAxOSwgNzMsIDIxNSwgMTc5LCAxOCwgMTksIDczLCAyMTUsIDE3OCwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxNjgsIDE4LCAxOSwgNzMsIDIxNSwgMTg0LCAxOCwgMTksIDczLCAyNTAsIDc3LCAxOCwgMTksIAorICAgIDczLCAyNTAsIDk0LCAxOCwgMTksIDczLCAyNTAsIDEzOSwgMTgsIDE5LCA3MywgMjUwLCAxMzYsIDE4LCAxOSwgNzMsIDI1MCwgCisgICAgMTE4LCAxOCwgMTksIDczLCAyNTAsIDE2NSwgMTgsIDE5LCA3MywgMjE1LCAxMjcsIDE4LCAxOSwgNzMsIDIxNSwgMTI4LCAKKyAgICAxOCwgMTksIDczLCAyMTUsIDEzMSwgMTgsIDE5LCA3MywgMjE1LCAxMzAsIDE4LCAxOSwgNzMsIDIxNSwgMTI5LCAxOCwgMTksIAorICAgIDczLCAyMTUsIDEzMiwgMTgsIDE5LCAyNTAsIDExOSwgNTAsIDE4LCAxOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxOCwgMTksIAorICAgIDIyNCwgODMsIDE4LCAxOSwgMjI5LCA3OCwgMTgsIDE5LCAyMjgsIDEwNSwgMTgsIDE5LCAyMjgsIDEwNCwgMTgsIDE5LCAKKyAgICAyMjgsIDEwMywgMTgsIDE5LCAyMjgsIDEwMiwgMTgsIDE5LCAyMjgsIDEwNywgMTgsIDE5LCAyMjgsIDEwNiwgMTgsIDE5LCAKKyAgICAyMTEsIDIxMywgMjE2LCAxMjYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI1LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIAorICAgIDEyNCwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjMsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIyLCAxOCwgMTksIDIxMSwgCisgICAgMjEzLCAyMTYsIDEyOSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjgsIDE4LCAxOSwgMjExLCAyMTMsIDQwLCAyMTYsIAorICAgIDIxMSwgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCA5OCwgMjI2LCAyMzAsIDIxOSwgMjEsIDc5LCAyMjYsIDIzMCwgMSwgMjUyLCAKKyAgICA1NiwgMjI2LCAyMzAsIDEsIDIzMiwgOTIsIDIyNiwgMjMwLCAxLCAyNDQsIDE1OSwgMjI2LCAyMzAsIDEsIDIyMiwgMTcsIAorICAgIDIyNiwgMjMwLCAxLCAyMjgsIDE5OCwgMjI2LCAyMzAsIDEsIDIxNCwgMjI2LCAyMjYsIDIzMCwgMSwgMjQ4LCAyMDUsIDIyNiwgCisgICAgMjMwLCAxLCAyMTYsIDgxLCAyMjYsIDIzMCwgMSwgMjQ5LCAyMzcsIDIyNiwgMjMwLCAxLCAyNTAsIDE4OCwgMjI2LCAyMzAsIAorICAgIDEsIDIzMCwgOTYsIDIyNiwgMjMwLCAxLCAyNDIsIDE2MywgMjI2LCAyMzAsIDEsIDIyOSwgNjgsIDIyNiwgMjMwLCAxLCAKKyAgICAyMTgsIDEyNCwgMjI2LCAyMzAsIDEsIDIyMiwgMTM3LCAyMjYsIDIzMCwgMSwgMjU0LCAyMDcsIDIyNiwgMjMwLCAxLCAyMjYsIAorICAgIDE5MSwgMjI2LCAyMzAsIDEsIDIxNCwgMTUwLCAyMjYsIDIzMCwgMSwgMjQ1LCAyMzksIDIyNiwgMjMwLCAxLCAyMzUsIDE5NSwgCisgICAgMjI2LCAyMzAsIDEsIDI0NSwgMjQwLCAyMjYsIDIzMCwgMSwgMjI2LCAxNjIsIDIyNiwgMjMwLCAxLCAyMTQsIDIwNiwgMjI2LCAKKyAgICAyMzAsIDEsIDIzNiwgNDYsIDIyNiwgMjMwLCAxLCAyNDUsIDIzNywgMjI2LCAyMzAsIDEsIDIyNSwgMjA1LCAyMjYsIDIzMCwgCisgICAgMjQ0LCAxNTgsIDc5LCAyMjYsIDIzMCwgMjIzLCA1MiwgMjQ0LCAxNTgsIDc5LCAxNzgsIDEsIDI0NCwgMTQ5LCAyNDQsIAorICAgIDE0MSwgMjQ0LCAxNjMsIDI0NSwgMTQsIDE3OCwgMSwgMjE0LCAxMDUsIDE3OCwgMSwgMjE0LCAxMzUsIDIxNCwgMTUxLCA2OSwgCisgICAgMTc4LCAxLCAyMTAsIDIxNCwgMTc4LCAxLCAyMTEsIDExNywgMTc4LCAxLCAyMTIsIDk4LCAxNzgsIDEsIDIxNiwgMTMxLCAKKyAgICAyMTYsIDEzMCwgMjE2LCAxNTIsIDE3OCwgMSwgMjQ1LCA2NywgMTc4LCAxLCAyNTQsIDEwMSwgNjEsIDE3OCwgMSwgMjI2LCAKKyAgICAxNDcsIDc4LCAxNzgsIDEsIDI1NSwgMjYsIDYxLCAxNzgsIDEsIDI1NCwgMjM2LCAxNzgsIDEsIDIzMiwgMTM5LCA3OCwgCisgICAgMTc4LCAxLCAyMTksIDI0NiwgNzgsIDE3OCwgMSwgNzgsIDE3OCwgMSwgMjI2LCAyMzgsIDE3OCwgMSwgMjI2LCAyMDAsIAorICAgIDE3OCwgMSwgMjIzLCAxNjcsIDIyMywgMTgwLCAyMjMsIDk3LCAxNTMsIDE3OCwgMSwgMjM0LCAxOTksIDE3OCwgMSwgMjUwLCAKKyAgICAxODUsIDE3OCwgMSwgMjM0LCAyMDAsIDIzNSwgMjksIDE3OCwgMSwgMjQzLCAyMDksIDE3OCwgMSwgMjQ1LCAxNDYsIDE3OCwgCisgICAgMSwgMjQzLCA2NSwgMjQyLCA3MywgMjQzLCAyMDksIDE3OCwgMSwgMjQzLCAxMDMsIDE3OCwgMSwgMjExLCAxODgsIDIxMSwgCisgICAgMTgyLCAyMTIsIDk4LCAxNzgsIDEsIDI0MiwgNDUsIDI0MiwgNjcsIDE3OCwgMSwgMjQyLCA0OSwgMjQyLCA2NywgMTc4LCAxLCAKKyAgICAyMzIsIDE0MSwgMjQyLCA2NywgMTc4LCAxLCAyMTksIDI0OSwgMjQyLCA2NywgMTc4LCAxLCAyMjksIDE5MCwgMjI3LCAxNjEsIAorICAgIDIyOSwgMTkxLCAyMzAsIDMwLCAxNzgsIDEsIDIxOSwgMjQ3LCAyMzAsIDMwLCAxNzgsIDEsIDI0NiwgMTIzLCAxNzgsIDEsIAorICAgIDIzNSwgMTc1LCAyMzUsIDE3OSwgMjM1LCAxNjgsIDc0LCAxNzgsIDEsIDc2LCAxNzgsIDEsIDIzNSwgMTIzLCAyMzUsIDE1MCwgCisgICAgMTc4LCAxLCAyNDMsIDUwLCAxNzgsIDEsIDIzMiwgMTQyLCAyNTQsIDI1MiwgMTc4LCAxLCAyMTksIDI1MSwgNjEsIDE3OCwgCisgICAgMSwgMjM1LCAxNjAsIDI0NSwgMTIxLCAxNzgsIDEsIDIyNSwgMTY3LCAyMjUsIDE4OSwgMjI2LCAxMDksIDE3OCwgMSwgMjU0LCAKKyAgICAxNzIsIDI0NSwgMTE5LCAxNzgsIDEsIDIxOSwgMjYsIDIyMiwgOTMsIDE3OCwgMSwgMjE5LCAxODEsIDIzMiwgMTM4LCAyMjIsIAorICAgIDkzLCAxNzgsIDEsIDIxOSwgMjQ1LCAyMjIsIDkzLCAxNzgsIDEsIDI1MSwgNzQsIDE3OCwgMSwgMjEwLCAxNTksIDE3OCwgMSwgCisgICAgMjE2LCA2NCwgMjE2LCA3NCwgMjE1LCA0MSwgMjE3LCAxNTMsIDE3OCwgMSwgMjE5LCAyNDQsIDIxNywgMTUzLCAxNzgsIDEsIAorICAgIDI0OSwgNjgsIDE3OCwgMSwgMjUyLCAzOSwgMjUyLCA0MiwgMjUxLCAyMzIsIDI1MywgMTY2LCAxNzgsIDEsIDIxOSwgMjUwLCAKKyAgICAyNTMsIDE2NiwgMTc4LCAxLCAyNDYsIDEyMiwgMTc4LCAxLCAyMjYsIDE3NSwgMTc4LCAxLCAyNDUsIDIwNCwgMjQ1LCAyMDYsIAorICAgIDc2LCAxNzgsIDEsIDIzMSwgMTgzLCAyMzEsIDE5MSwgMTk0LCAxNzgsIDEsIDIzMiwgMTQwLCAxOTQsIDE3OCwgMSwgMjE5LCAKKyAgICAyNDgsIDE5NCwgMTc4LCAxLCAyMzMsIDc5LCAyMzMsIDEyMCwgMjMyLCAxNDksIDE1NiwgMTc4LCAxLCAyNDYsIDEyNCwgCisgICAgMTc4LCAxLCAyMzUsIDIzNywgMTc4LCAxLCAyMzUsIDIzOCwgMTc4LCAxLCAyNDgsIDIxOCwgMjQ4LCAyMjMsIDI0OSwgNjgsIAorICAgIDE3OCwgMSwgMjI2LCAxNDIsIDI0NSwgNjYsIDc4LCAxNzgsIDEsIDI0NSwgMjM1LCAxNzgsIDEsIDIzNSwgMTk0LCAxNzgsIAorICAgIDEsIDI0OSwgODYsIDE3OCwgMSwgMjUxLCAyNSwgMTc4LCAxLCAyNTAsIDE5NywgMTc4LCAxLCAyMTgsIDE2MywgMTc4LCAxLCAKKyAgICAyMzIsIDEzNywgMTc4LCAxLCAyMTksIDI0MywgMTc4LCAxLCAyNDAsIDExNywgMTc4LCAxLCAyMjQsIDk5LCAxNzgsIDEsIAorICAgIDIxMSwgMTc4LCAxNzgsIDIxOSwgMTU3LCAyMjQsIDE0MywgMTc4LCAyMzAsIDkwLCAyMjQsIDE0MywgMTc4LCAyNDksIDEzOSwgCisgICAgMjI0LCAxNDMsIDE3OCwgMjU0LCAxNCwgODcsIDE3OCwgMjE1LCA4MiwgODcsIDE3OCwgMjUyLCA1NCwgODcsIDIxNywgODQsIAorICAgIDEsIDYxLCAyMTcsIDg0LCAxLCA3NCwgMjE3LCA4NCwgMSwgNjksIDIxNywgODQsIDEsIDE3NiwgMjE3LCA4NCwgMSwgMjQzLCAKKyAgICAxNDIsIDIxNywgODQsIDEsIDIyOSwgODIsIDIxNywgODQsIDEsIDIxNywgMTA2LCAyMTcsIDg0LCAxLCAyNDgsIDIyOSwgCisgICAgMjE3LCA4NCwgMSwgMTk4LCAyMTcsIDg0LCAxLCAxOTEsIDIxNywgODQsIDEsIDI1MiwgMTk5LCAyMTcsIDg0LCAxLCAxODYsIAorICAgIDIxNywgODQsIDEsIDE5MiwgMjE3LCA4NCwgMSwgMjMzLCAxNDEsIDIxNywgODQsIDEsIDIxMiwgNjUsIDIxNywgODQsIDEsIAorICAgIDIwNiwgMjE3LCA4NCwgMSwgMTYyLCAyMTcsIDg0LCAyNSwgNSwgNzQsIDIxNywgODQsIDI1LCA1LCA2OSwgMjE3LCA4NCwgNSwgCisgICAgMjEzLCAxNTIsIDI0MiwgMTQsIDEsIDYxLCAyNDIsIDE0LCAxLCA3NCwgMjQyLCAxNCwgMSwgNjksIDI0MiwgMTQsIDEsIAorICAgIDE3NiwgMjQyLCAxNCwgMSwgMjQzLCAxNDIsIDI0MiwgMTQsIDEsIDIyOSwgODIsIDI0MiwgMTQsIDEsIDIxNywgMTA2LCAKKyAgICAyNDIsIDE0LCAxLCAyNDgsIDIyOSwgMjQyLCAxNCwgMSwgMTk4LCAyNDIsIDE0LCAxLCAxOTEsIDI0MiwgMTQsIDEsIDI1MiwgCisgICAgMTk5LCAyNDIsIDE0LCAxLCAxODYsIDI0MiwgMTQsIDEsIDE5MiwgMjQyLCAxNCwgMSwgMjA1LCAyNDIsIDE0LCAxLCAyMzMsIAorICAgIDE0MSwgMjQyLCAxNCwgMSwgMjEyLCA2NSwgMjQyLCAxNCwgMSwgMjA2LCAyNDIsIDE0LCAxLCAxNjIsIDI0MiwgMTQsIDI1LCAKKyAgICA1LCA3NCwgMjQyLCAxNCwgMjUsIDUsIDY5LCAyNDIsIDE0LCA1LCAyMjYsIDUzLCAyMjUsIDEyOSwgMjE5LCAxNTcsIDIyNCwgCisgICAgMTQzLCAyMjUsIDEyOSwgNTIsIDIyNCwgMTQzLCAyNTEsIDEyOCwgMSwgNjEsIDI1MSwgMTI4LCAxLCA3NCwgMjUxLCAxMjgsIAorICAgIDEsIDY5LCAyNTEsIDEyOCwgMSwgMTc2LCAyNTEsIDEyOCwgMSwgMjQzLCAxNDIsIDI1MSwgMTI4LCAxLCAyMjksIDgyLCAKKyAgICAyNTEsIDEyOCwgMSwgMjE3LCAxMDYsIDI1MSwgMTI4LCAxLCAyNDgsIDIyOSwgMjUxLCAxMjgsIDEsIDE5OCwgMjUxLCAxMjgsIAorICAgIDEsIDE5MSwgMjUxLCAxMjgsIDEsIDI1MiwgMTk5LCAyNTEsIDEyOCwgMSwgMTg2LCAyNTEsIDEyOCwgMSwgMTkyLCAyNTEsIAorICAgIDEyOCwgMSwgMjA1LCAyNTEsIDEyOCwgMSwgMjMzLCAxNDEsIDI1MSwgMTI4LCAxLCAyMTIsIDY1LCAyNTEsIDEyOCwgMSwgCisgICAgMjA2LCAyNTEsIDEyOCwgMSwgMTYyLCAyNTEsIDEyOCwgMjUsIDUsIDc0LCAyNTEsIDEyOCwgMjUsIDUsIDY5LCAyMTcsIDgzLCAKKyAgICAxLCA2MSwgMjE3LCA4MywgMSwgNzQsIDIxNywgODMsIDEsIDY5LCAyMTcsIDgzLCAxLCAxNzYsIDIxNywgODMsIDEsIDI0MywgCisgICAgMTQyLCAyMTcsIDgzLCAxLCAyMjksIDgyLCAyMTcsIDgzLCAxLCAyMTcsIDEwNiwgMjE3LCA4MywgMSwgMjQ4LCAyMjksIAorICAgIDIxNywgODMsIDEsIDE5OCwgMjE3LCA4MywgMSwgMTkxLCAyMTcsIDgzLCAxLCAyNTIsIDE5OSwgMjE3LCA4MywgMSwgMTg2LCAKKyAgICAyMTcsIDgzLCAxLCAxOTIsIDIxNywgODMsIDEsIDIzMywgMTQxLCAyMTcsIDgzLCAxLCAyMTIsIDY1LCAyMTcsIDgzLCAxLCAKKyAgICAyMDYsIDIxNywgODMsIDI1LCA1LCA3NCwgMjE3LCA4MywgMjUsIDUsIDY5LCA3MCwgMSwgMTc2LCA3MCwgMSwgMjM0LCAxMzgsIAorICAgIDcwLCAxLCAyMzQsIDM0LCA3MCwgMSwgMjM0LCAxMTEsIDcwLCAxLCAyMjksIDksIDcwLCAxLCAyNTEsIDQxLCA3MCwgMSwgCisgICAgMjUwLCAxNjUsIDcwLCAxLCAyNDksIDI0NiwgNzAsIDEsIDI1MCwgOTQsIDcwLCAxLCAyMjcsIDEzOCwgNzAsIDEsIDI0OCwgCisgICAgMjI5LCA3MCwgMSwgMjE1LCAxNDUsIDcwLCAxLCAyNDcsIDE1MywgNzAsIDEsIDIxNSwgMTQwLCA3MCwgMSwgMjI4LCA4NSwgCisgICAgNzAsIDEsIDIxNywgMTA2LCA3MCwgMSwgMjE2LCAyMDksIDcwLCAxLCAxMTIsIDcwLCAxLCAyMTYsIDE1NywgNzAsIDEsIAorICAgIDIyOCwgNzksIDcwLCAxLCAyNTIsIDE5OSwgNzAsIDEsIDIyNSwgMTUwLCA3MCwgMSwgMjI1LCAxOSwgNzAsIDEsIDIyNSwgCisgICAgMTI0LCA3MCwgMSwgMjMwLCAxNjYsIDcwLCAxLCAyMTAsIDI0NCwgNzAsIDEsIDIyMiwgMjEzLCA3MCwgMSwgMjMyLCAxNjIsIAorICAgIDcwLCAxLCAyMTMsIDEzOCwgNzAsIDEsIDIyMCwgMTA0LCA3MCwgMSwgMjE4LCAxODYsIDcwLCAxLCAyMDYsIDcwLCAxLCAKKyAgICAxNjIsIDcwLCAxLCAyMzMsIDE0MSwgNzAsIDEsIDIyNCwgOTEsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNzcsIDcwLCAyMzUsIAorICAgIDI1MCwgMjUsIDIyNCwgOTAsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNTYsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNTEsIAorICAgIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgMzMsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNSwgNzAsIDIzNSwgMjUwLCAyNSwgCisgICAgMjIzLCAyNDksIDcwLCAyMzUsIDI1MCwgMjUsIDIyMywgMjQ4LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjIsIDEwMiwgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgMjIyLCA5NSwgNzAsIDIzNSwgMjUwLCAyNSwgMjMyLCA2NywgNzAsIDIzNSwgMjUwLCAyNSwgMjMyLCAKKyAgICA1NywgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA3MiwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA4MywgNzAsIDIzNSwgMjUwLCAKKyAgICAyNSwgMjI0LCA0MSwgMjE1LCA0OSwgMTExLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDQxLCAyMTUsIDQ5LCAxMDUsIDcwLCAKKyAgICAyMzUsIDI1MCwgMjUsIDIyNCwgNzMsIDcwLCAyNSwgMjM1LCAyMzYsIDI1NCwgNTMsIDcwLCAyNSwgMjM1LCAyMzYsIDI1NSwgCisgICAgODIsIDcwLCAyNSwgNSwgMjU1LCA4MiwgNzAsIDI1LCA1LCA3NCwgNzAsIDI1LCA1LCAyMzYsIDQwLCA3MCwgMjUsIDUsIAorICAgIDIxMSwgMTE3LCA3MCwgMjUsIDUsIDIxMCwgMTY5LCA3MCwgMjUsIDUsIDY5LCA3MCwgMjUsIDUsIDIxNCwgMTE4LCA3MCwgCisgICAgMjUsIDUsIDIxNCwgMjI5LCA3MCwgMjUsIDUsIDIyNiwgMjM4LCA3MCwgMjUsIDUsIDE5MiwgNzAsIDI1LCA1LCAyMzYsIDY3LCAKKyAgICA3MCwgMjUsIDUsIDc2LCA3MCwgMjUsIDUsIDI1NCwgMjUyLCA3MCwgMjUsIDUsIDI1NCwgMjEwLCA3MCwgMjUsIDUsIDIyNiwgCisgICAgMTg3LCA3MCwgMjUsIDUsIDI1MywgMjAwLCA3MCwgNSwgMjI4LCAyMTEsIDcwLCA1LCAyMjMsIDEyOSwgNzAsIDUsIDIxMCwgCisgICAgMTgwLCA3MCwgNSwgMjMwLCA1NywgNzAsIDUsIDIxNSwgMjE0LCA3MCwgNSwgMjUyLCAxNTEsIDcwLCA1LCAyMjIsIDIwOCwgCisgICAgNzAsIDUsIDIxNiwgNDEsIDcwLCA1LCAyMzQsIDI0NywgNzAsIDUsIDI1NCwgMjEyLCA3MCwgNSwgMjIxLCAyNDYsIDIyMSwgCisgICAgMjQwLCA3MCwgNSwgMjEzLCAxNDksIDcwLCA1LCAyNDksIDI0MCwgNzAsIDUsIDI1MiwgMTI1LCA3MCwgNSwgMjM0LCAxMzEsIAorICAgIDcwLCA1LCAyNTIsIDE0NSwgNzAsIDUsIDI1MSwgMTcsIDIyNSwgNzUsIDIzMywgMTkzLCA3MCwgNSwgMjMzLCAzNiwgMjE2LCAKKyAgICAxOCwgNzAsIDUsIDI1MiwgMjgsIDcwLCA1LCAyMjUsIDEyNiwgMjMwLCAxMDQsIDcwLCA1LCAyMzQsIDE1LCA3MCwgMjQ5LCAKKyAgICAxMDYsIDE2LCAyMjMsIDMxLCA3MCwgNSwgMjUzLCAxODIsIDcwLCA1LCAyNTMsIDIwMywgNzAsIDIxLCAyMTAsIDg2LCA3MCwgCisgICAgMjEsIDExMSwgNzAsIDIxLCAxMDUsIDcwLCAyMSwgMTU4LCA3MCwgMjEsIDE2MSwgNzAsIDIxLCAxOTAsIDcwLCAyMSwgMTk1LCAKKyAgICA3MCwgMjEsIDE5OSwgNzAsIDIxLCAxOTYsIDcwLCAyMSwgMjAxLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMTksIAorICAgIDQ1LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMzAsIDc2LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjUsIAorICAgIDc0LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyNTIsIDU3LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyNTEsIAorICAgIDExMSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAyMTgsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgCisgICAgMjEyLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIDIxMCwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAKKyAgICAyMTYsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgMjE0LCA4MywgMjUxLCAyNDQsIDgzLCAyNDUsIDE3MSwgODMsIAorICAgIDI0OSwgMjI3LCA4MywgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MywgMjQ5LCAyMzQsIDgzLCAyNDQsIDE5LCAyNDcsIDEyNiwgCisgICAgODMsIDIxNiwgNDAsIDIxOSwgNTQsIDI0MCwgMTc1LCA4MywgMjE5LCAxOTIsIDMsIDI1MSwgMTgwLCAyMzEsIDE1OSwgODMsIAorICAgIDIzMSwgMTg4LCAyNDksIDIyNywgODMsIDIzMSwgMTg4LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgzLCAyMjgsIDE5NiwgODMsIAorICAgIDI0NCwgNSwgNDUsIDIyMSwgMTU5LCAxMTEsIDgzLCAyNDQsIDUsIDQ1LCAyMjEsIDE1OSwgMTA1LCA4MywgMjQ0LCA1LCA0NSwgCisgICAgMjIxLCAxNTksIDE1OCwgODMsIDI1LCAyMjAsIDEzOSwgODMsIDIxLCAyMTAsIDg2LCA4MywgMjEsIDExMSwgODMsIDIxLCAKKyAgICAxMDUsIDgzLCAyMSwgMTU4LCA4MywgMjEsIDE2MSwgODMsIDIxLCAxOTAsIDgzLCAyMSwgMTk1LCA4MywgMjEsIDE5OSwgODMsIAorICAgIDIxLCAxOTYsIDgzLCAyMSwgMjAxLCA4MywgMSwgNjEsIDgzLCAxLCA3NiwgODMsIDEsIDc0LCA4MywgMSwgNzgsIDgzLCAxLCAKKyAgICA2OSwgODMsIDEsIDIyNiwgMjM4LCA4MywgMSwgMjE0LCAyMTQsIDgzLCAxLCAyNDUsIDIxNywgODMsIDEsIDE5OCwgODMsIDEsIAorICAgIDI1NCwgMTIzLCA4MywgMSwgMjUyLCAxOTksIDgzLCAxLCAxOTEsIDgzLCAxLCAyMjQsIDkxLCA4MywgMSwgMjQzLCAxNDIsIAorICAgIDgzLCAxLCAxODYsIDgzLCAxLCAyMzMsIDE0MSwgODMsIDEsIDIwNiwgODMsIDEsIDIyMCwgMTA0LCA4MywgMSwgMjE3LCAKKyAgICAxMDYsIDgzLCAxLCAyNDgsIDIyOSwgODMsIDEsIDI1MCwgMTY1LCA4MywgMSwgMjM1LCAxNDcsIDgzLCAxLCAxOTIsIDgzLCAKKyAgICAxLCAyMDUsIDgzLCAxLCAyMTIsIDY1LCA4MywgMSwgMjQ0LCAyMDQsIDgzLCAxLCAxNzYsIDgzLCAxLCAyMzQsIDEzOCwgODMsIAorICAgIDEsIDIxNSwgMTg0LCA4MywgMSwgMjEwLCAxMTYsIDgzLCAxLCAyNDIsIDUzLCA4MywgMSwgMjEwLCAxNiwgODMsIDEsIDIzMywgCisgICAgNCwgODMsIDEsIDIxMCwgNjksIDgzLCAxLCAyNTAsIDExOCwgODMsIDEsIDIxNiwgNDAsIDIwMCwgMjUsIDUwLCA4MywgMSwgCisgICAgMjE2LCA0MCwgNzYsIDgzLCAxLCAyMTYsIDQwLCA3NCwgODMsIDEsIDIxNiwgNDAsIDc4LCA4MywgMSwgMjE2LCA0MCwgNjksIAorICAgIDgzLCAxLCAyMTYsIDQwLCAyMjYsIDIzOCwgODMsIDEsIDIxNiwgNDAsIDIxNCwgMjE0LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAKKyAgICAxMjMsIDgzLCAxLCAyMTYsIDQwLCAyNTIsIDE5OSwgODMsIDEsIDIxNiwgNDAsIDE5MSwgODMsIDEsIDIxNiwgNDAsIDIyNCwgCisgICAgOTEsIDgzLCAxLCAyMTYsIDQwLCAyNDMsIDE0MiwgODMsIDEsIDIxNiwgNDAsIDE4NiwgODMsIDEsIDIxNiwgNDAsIDIxNywgCisgICAgMTA2LCA4MywgMSwgMjE2LCA0MCwgMjQ4LCAyMjksIDgzLCAxLCAyMTYsIDQwLCAyNTAsIDE2NSwgODMsIDEsIDIxNiwgNDAsIAorICAgIDIzNSwgMTQ3LCA4MywgMSwgMjE2LCA0MCwgMjE1LCAxODQsIDgzLCAxLCAyMTYsIDQwLCAxOTIsIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyMTIsIDY1LCA4MywgMSwgMjE2LCA0MCwgMTc2LCA4MywgMSwgMjE2LCA0MCwgMjQzLCAxMzksIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyNDIsIDUzLCA4MywgMSwgMjE2LCA0MCwgMjM1LCAxMTMsIDgzLCAxLCAyMTYsIDQwLCAyMjgsIDIzNiwgODMsIDEsIDIxNiwgCisgICAgNDAsIDI0NiwgNDYsIDgzLCAxLCAyMTksIDE5MiwgNzYsIDgzLCAxLCAyMTksIDE5MiwgNzQsIDgzLCAxLCAyMTksIDE5MiwgCisgICAgMjM1LCAxNTgsIDgzLCAxLCAyMTksIDE5MiwgMjE0LCAyMTQsIDgzLCAxLCAyMTksIDE5MiwgNjksIDgzLCAxLCAyMTksIAorICAgIDE5MiwgMjU0LCAxMjMsIDgzLCAxLCAyMTksIDE5MiwgMTc2LCA4MywgMSwgMjE5LCAxOTIsIDI0MywgMTQyLCA4MywgMSwgCisgICAgMjE5LCAxOTIsIDE2MiwgODMsIDEsIDIxOSwgMTkyLCAxOTEsIDgzLCAxLCAyMTksIDE5MiwgMjIwLCAxMDQsIDgzLCAxLCAKKyAgICAyMTksIDE5MiwgMjE3LCAxMDYsIDgzLCAxLCAyMTksIDE5MiwgMjQ4LCAyMjksIDgzLCAxLCAyMTksIDE5MiwgMjM1LCAxNDcsIAorICAgIDgzLCAxLCAyMTksIDE5MiwgMjQ0LCAyMDQsIDgzLCAxLCAyMTksIDE5MiwgMjQzLCAxMzksIDgzLCAxLCAyMTksIDE5MiwgCisgICAgMjQyLCA1MywgODMsIDEsIDIxOSwgMTkyLCAyMTUsIDE4NCwgODMsIDEsIDIxOSwgMTkyLCAyMTAsIDExNiwgODMsIDEsIAorICAgIDIxOSwgMTkyLCAyMjMsIDE4NywgODMsIDEsIDIxOSwgMTkyLCAyNTAsIDE2NSwgODMsIDEsIDIxOSwgMTkyLCAyMTAsIDgyLCAKKyAgICA4MywgMSwgMjMxLCAxODgsIDc0LCA4MywgMSwgMjMxLCAxODgsIDE3NiwgODMsIDEsIDIzMSwgMTg4LCAyMDUsIDgzLCAxLCAKKyAgICAyMzEsIDE4OCwgMjQ0LCAyMDQsIDgzLCAxLCAyMzEsIDE4OCwgMjEwLCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgCisgICAgMjU0LCA4NCwgMTExLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTMsIDE0OCwgMTExLCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyNDgsIDE5NCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIzNSwgMjAwLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUyLCAxNjMsIDgzLCAxLCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDEzNCwgMjUyLCAxNjMsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDYxLCA4MywgMSwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCA3NCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMTc2LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMjksIDgyLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTEsIDQxLCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMTUsIDE1NywgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE1LCAxNDUsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI0OCwgMTQzLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMjgsIDExNSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMjI5LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAxOTEsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIyNSwgMTUwLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgCisgICAgMTIzLCAyMTgsIDIyNSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIAorICAgIDEyMywgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1NCwgMjE4LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAKKyAgICAxNzEsIDI0MywgMTIzLCAyMTcsIDEwNiwgODMsIDEsIDIxNiwgNDAsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIAorICAgIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0MywgMCwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAKKyAgICAxMjMsIDIyOSwgODIsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTEsIDQxLCA4MywgMSwgMjMxLCAKKyAgICAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjM1LCAxMjAsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAyMTUsIDE1NywgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMTI3LCA4MywgMSwgMjMxLCAxODgsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIAorICAgIDMzLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjE4LCAyMjUsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAKKyAgICAxNzEsIDI0MywgMTIzLCAyNDksIDgwLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCA4MiwgODMsIAorICAgIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgMTE2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAxNjMsIDY5LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAxNjMsIDE5MiwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI1MiwgMjYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgMjE5LCA4MywgMSwgMjMxLCAxODgsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMjMzLCA0LCAxOCwgMTksIDIyNiwgMTEzLCAxOCwgMTksIDI1MywgMTc1LCAxOCwgMTksIAorICAgIDI1NSwgMzcsIDE4LCAxOSwgMjEyLCAyNSwgMTgsIDE5LCAyMjQsIDIyNCwgMTgsIDE5LCAyMjUsIDIzMywgMTgsIDE5LCAKKyAgICAyMjQsIDEwOCwgMTgsIDE5LCAyMTcsIDMyLCAxOCwgMTksIDIzNCwgMTk1LCAxOCwgMTksIDIzMywgMTg1LCAxOCwgMTksIAorICAgIDIzMSwgMTM3LCAxOCwgMTksIDIyOCwgNDIsIDE4LCAxOSwgMjI5LCAxODYsIDE4LCAxOSwgMjMzLCA3NCwgMTgsIDE5LCAKKyAgICAyMTksIDI0LCAxOCwgMTksIDIyMSwgMjEzLCAxOCwgMTksIDIxOSwgMjM0LCAxOCwgMTksIDIyMCwgNjgsIDE4LCAxOSwgCisgICAgMjE5LCAyMDMsIDE4LCAxOSwgMjEwLCAyMjAsIDE4LCAxOSwgMjExLCA1MiwgMTgsIDE5LCAyMjMsIDEzNywgMTgsIDE5LCAKKyAgICAyMjcsIDE3NSwgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzUsIDE4LCAxOSwgMjI3LCAxNzQsIDE4LCAxOSwgMjI2LCAyMjAsIAorICAgIDIyNywgMTc0LCAxOCwgMTksIDIyNywgMTczLCAxOCwgMTksIDIyNiwgMjIwLCAyMjcsIDE3MywgMTgsIDE5LCAyMjcsIDE3MiwgCisgICAgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzIsIDE4LCAxOSwgMjIyLCAxMDcsIDE4LCAxOSwgMjIyLCAxMDYsIDE4LCAxOSwgCisgICAgMjIyLCAxMDUsIDE4LCAxOSwgMjIyLCAxMDQsIDE4LCAxOSwgMjIyLCAxMDMsIDE4LCAxOSwgMjIyLCAxMTEsIDE4LCAxOSwgCisgICAgMjI2LCAyMjAsIDIyNiwgMTA5LCAxOCwgMTksIDIyNiwgMjIwLCAyMTcsIDE1MywgMTgsIDE5LCAyMjYsIDIyMCwgMjM1LCAKKyAgICAyOSwgMTgsIDE5LCAyMjYsIDIyMCwgMjUxLCA3NCwgMTgsIDE5LCAyMjYsIDIyMCwgMTk0LCAxOCwgMTksIDIyNiwgMjIwLCAKKyAgICAyMzAsIDMwLCAxOCwgMTksIDIyNiwgMjIwLCAyMjIsIDkzLCAxOCwgMTksIDIyNiwgMjIwLCAyMjAsIDEwNiwgMTgsIDE5LCAKKyAgICAyNDUsIDIyNywgMjEyLCA5OCwgMTgsIDE5LCAyMTIsIDcsIDIxMiwgOTgsIDE4LCAxOSwgNDAsIDQsIDIyMiwgMjM2LCAxOCwgCisgICAgMTksIDQwLCAyMjMsIDE2MCwgMjQ3LCAxMjgsIDE4LCAxOSwgMjIzLCAyMjYsIDIyMiwgMTA4LCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICAxMzMsIDE4LCAxOSwgMTU5LCAyMzMsIDE0MCwgMTgsIDE5LCAyMTYsIDEyNywgMTgsIDE5LCAyMTYsIDEyOSwgMTgsIDE5LCAKKyAgICAyMTUsIDEzNywgMTgsIDE5LCAyMTUsIDEzOSwgMTgsIDE5LCAyMTUsIDE0NCwgMTgsIDE5LCAyMTYsIDUwLCAxOCwgMTksIAorICAgIDIxNiwgNTIsIDE4LCAxOSwgMjIxLCAyMTEsIDIxOSwgMjA4LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDMsIDE4LCAxOSwgCisgICAgMjIxLCAyMTEsIDI0MSwgNjAsIDE4LCAxOSwgNzMsIDI0MiwgODAsIDE4LCAxOSwgNzMsIDI0OCwgNjAsIDI0MywgNjIsIDE4LCAKKyAgICAxOSwgNzMsIDI0MywgMTM5LCAxOCwgMTksIDczLCAyNDIsIDg1LCAxOCwgMTksIDIyMSwgMjExLCAyMzUsIDM5LCAxOCwgMTksIAorICAgIDczLCAyMzUsIDM3LCAxOCwgMTksIDI1MiwgNzYsIDI0OCwgNjAsIDE1NiwgMTgsIDE5LCAyNTIsIDc2LCAyNDgsIDYwLCAKKyAgICAxNTMsIDE4LCAxOSwgNzMsIDI0OCwgNTUsIDIyMiwgOTMsIDIzMiwgMjI5LCAyMTMsIDEyMiwgMjMzLCAxNiwgMjMyLCAyMjksIAorICAgIDEsIDE3NiwgMjMyLCAyMjksIDEsIDIzNCwgMTM4LCAyMzIsIDIyOSwgMSwgMjQzLCAxNDIsIDIzMiwgMjI5LCAxLCAyNDMsIAorICAgIDAsIDIzMiwgMjI5LCAxLCAyMjksIDgyLCAyMzIsIDIyOSwgMSwgMjUxLCA0MSwgMjMyLCAyMjksIDEsIDI1MCwgMTY1LCAKKyAgICAyMzIsIDIyOSwgMSwgMjM1LCAxNDcsIDIzMiwgMjI5LCAxLCAyMzUsIDEyMCwgMjMyLCAyMjksIDEsIDIxMSwgNzEsIDIzMiwgCisgICAgMjI5LCAxLCAyMTcsIDEwNiwgMjMyLCAyMjksIDEsIDIxNiwgMjA5LCAyMzIsIDIyOSwgMSwgMjQ4LCAyMjksIDIzMiwgMjI5LCAKKyAgICAxLCAyNDgsIDMzLCAyMzIsIDIyOSwgMSwgMTk4LCAyMzIsIDIyOSwgMSwgMTkxLCAyMzIsIDIyOSwgMSwgMjI1LCAxNTAsIAorICAgIDIzMiwgMjI5LCAxLCAyNTIsIDE5OSwgMjMyLCAyMjksIDEsIDI1MiwgMjYsIDIzMiwgMjI5LCAxLCAxODYsIDIzMiwgMjI5LCAKKyAgICAxLCAxOTIsIDIzMiwgMjI5LCAxLCAyMDUsIDIzMiwgMjI5LCAxLCAyMzMsIDE0MSwgMjMyLCAyMjksIDEsIDIxMiwgNjUsIAorICAgIDIzMiwgMjI5LCAxLCAyMjAsIDEwNCwgMjMyLCAyMjksIDEsIDIxOCwgMjI1LCAyMzIsIDIyOSwgMSwgMjA2LCAyMzIsIDIyOSwgCisgICAgMSwgMTYyLCAyMzIsIDIyOSwgMjUsIDUsIDYxLCAyMzIsIDIyOSwgMjUsIDUsIDc0LCAyMzIsIDIyOSwgMjUsIDUsIDY5LCAKKyAgICAyMzIsIDIyOSwgMjUsIDUsIDI0NSwgMjE3LCAyMzIsIDIyOSwgMjUsIDUsIDI1NCwgMjEwLCAyMzIsIDIyOSwgMjUsIDUsIAorICAgIDIyNiwgMTg3LCAyMzIsIDIyOSwgMjUsIDUsIDI1MywgMjAwLCAyMzIsIDIyOSwgMjUsIDUsIDc2LCAyMzIsIDIyOSwgMjUsIAorICAgIDUsIDc4LCAyMzIsIDIyOSwgMjE4LCA3NCwgMSwgMTkyLCAyMzIsIDIyOSwgMjE4LCA3NCwgMSwgMjA1LCAyMzIsIDIyOSwgCisgICAgMjE4LCA3NCwgMSwgMjEyLCA2NSwgMjMyLCAyMjksIDQsIDEsIDE3NiwgMjMyLCAyMjksIDQsIDEsIDIyOSwgODIsIDIzMiwgCisgICAgMjI5LCA0LCAxLCAyNTQsIDgzLCAyMzIsIDIyOSwgNCwgMSwgMjE3LCAxMDYsIDIzMiwgMjI5LCA0LCAxLCAxOTgsIDIzMiwgCisgICAgMjI5LCA0LCAxLCAxOTEsIDIzMiwgMjI5LCA0LCAxLCAxODYsIDIzMiwgMjI5LCA0LCAxLCAyMDUsIDIzMiwgMjI5LCA0LCAxLCAKKyAgICAyMzMsIDE0MSwgMjMyLCAyMjksIDUsIDIzMCwgOTQsIDIzMiwgMjI5LCA1LCAyMzQsIDE3NywgMjMyLCAyMjksIDUsIDIyMiwgCisgICAgMzQsIDIzMiwgMjI5LCA1LCAyMzIsIDEzMywgMjMyLCAyMjksIDI0NSwgMzksIDc5LCAyMzIsIDIyOSwgMjI0LCAxNiwgNzksIAorICAgIDIzMiwgMjI5LCAyMSwgMjEwLCA4NiwgMjMyLCAyMjksIDIxLCAxMTEsIDIzMiwgMjI5LCAyMSwgMTA1LCAyMzIsIDIyOSwgCisgICAgMjEsIDE1OCwgMjMyLCAyMjksIDIxLCAxNjEsIDIzMiwgMjI5LCAyMSwgMTkwLCAyMzIsIDIyOSwgMjEsIDE5NSwgMjMyLCAKKyAgICAyMjksIDIxLCAxOTksIDIzMiwgMjI5LCAyMSwgMTk2LCAyMzIsIDIyOSwgMjEsIDIwMSwgMzksIDIzMywgNjUsIDEsIDE3NiwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxMSwgMTY1LCAzOSwgMjMzLCA2NSwgMSwgMjI5LCA4MiwgMzksIDIzMywgNjUsIDEsIDIxNSwgCisgICAgMTg0LCAzOSwgMjMzLCA2NSwgMSwgMjA2LCAzOSwgMjMzLCA2NSwgMSwgMTkyLCAzOSwgMjMzLCA2NSwgMSwgMjE3LCAxMDYsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDIwOSwgMzksIDIzMywgNjUsIDEsIDIzMywgMTQxLCAzOSwgMjMzLCA2NSwgMSwgMTkxLCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjI1LCAxNTAsIDM5LCAyMzMsIDY1LCAxLCAxODYsIDM5LCAyMzMsIDY1LCAxLCAyNDQsIDIwNCwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxNCwgMjcsIDM5LCAyMzMsIDY1LCAxLCAxNjIsIDM5LCAyMzMsIDY1LCAxLCAyMjQsIDkxLCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjM0LCAxMzgsIDM5LCAyMzMsIDY1LCAxLCAyMTUsIDE3NiwgMzksIDIzMywgNjUsIDEsIDE5OCwgCisgICAgMzksIDIzMywgNjUsIDEsIDYxLCAzOSwgMjMzLCA2NSwgMSwgNzQsIDM5LCAyMzMsIDY1LCAxLCAyNDUsIDIxNywgMzksIAorICAgIDIzMywgNjUsIDEsIDI0NSwgMjA1LCAzOSwgMjMzLCA2NSwgMSwgNjksIDM5LCAyMzMsIDY1LCAxLCAyMjYsIDE4NywgMzksIAorICAgIDIzMywgNjUsIDEsIDc4LCAzOSwgMjMzLCA2NSwgMSwgMjE0LCAyMTQsIDM5LCAyMzMsIDY1LCAxLCA3NiwgMzksIDIzMywgCisgICAgNjUsIDEsIDI1MywgMTk4LCAzOSwgMjMzLCA2NSwgMSwgMjU0LCAyMTAsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI5LCAzOSwgCisgICAgMjMzLCA2NSwgMSwgMjE2LCAyOCwgMzksIDIzMywgNjUsIDEsIDIxNiwgMjcsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI2LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyNSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyNCwgOTEsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAyMjQsIDkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTc2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxNjUsIAorICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjksIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTc2LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyMSwgMjExLCAxNjUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjksIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgCisgICAgMjE1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMDYsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTIsIDE2NiwgMzksIAorICAgIDE3MywgMSwgMTIxLCAyMTUsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAorICAgIDE5MiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNywgMTA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE2LCAyMDksIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAxOTgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTcsIDEwNiwgMTY2LCAzOSwgMTczLCAxLCAKKyAgICAxMjEsIDIxNiwgMjA5LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTk4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkxLCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMjI1LCAxNTAsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxODYsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMjUsIDE1MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE4NiwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDI0NCwgMjA0LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjUsIDIzMywgMTQxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ0LCAyMDQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKKyAgICAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxNDEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNjIsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAyNDgsIDIyOSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI1MiwgMTk5LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjQ4LCAyMjksIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNTIsIAorICAgIDE5OSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIzMywgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjExLCAxMzgsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyNSwgMjE4LCA4MywgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxOCwgODMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1LCAKKyAgICAyMTksIDI0MSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCA4MiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgNjksIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMTE4LCAxNjYsIDM5LCAxNzMsIDI1LCAKKyAgICA1LCA3NiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU0LCAyNTIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDc4LCAxNjYsIDM5LCAKKyAgICAxNzMsIDI1LCA1LCAyMjcsIDQsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMjE0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAKKyAgICAyNTMsIDE3NSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjU1LCAzNywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTEsIAorICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNiwgMTEzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjcsIDEsIDE2NiwgMzksIDE3MywgCisgICAgMjUsIDUsIDIxNCwgMjEwLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMzUsIDE1OCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjE0LCAKKyAgICAxMDUsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIyOSwgODQsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIzMCwgMzAsIDE2NiwgMzksIAorICAgIDE3MywgMSwgNDAsIDE5NCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjM1LCAyOSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjQ5LCAKKyAgICA2OCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjUzLCAxNjYsIDE2NiwgMzksIDE3MywgMTM4LCAyMzEsIDE2MywgMTY2LCAzOSwgCisgICAgMTczLCAxMzgsIDIzMSwgMTYyLCAxNjYsIDM5LCAxNzMsIDIxLCAyMTAsIDg2LCAxNjYsIDM5LCAxNzMsIDIxLCAxMTEsIAorICAgIDE2NiwgMzksIDE3MywgMjEsIDEwNSwgMTY2LCAzOSwgMTczLCAyMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDIxLCAxNjEsIDE2NiwgCisgICAgMzksIDE3MywgMjEsIDE5MCwgMTY2LCAzOSwgMTczLCAyMSwgMTk1LCAxNjYsIDM5LCAxNzMsIDIxLCAxOTksIDE2NiwgMzksIAorICAgIDE3MywgMjEsIDE5NiwgMTY2LCAzOSwgMTczLCAyMSwgMjAxLCAxNjYsIDM5LCAxNzMsIDg5LCAyMSwgMTExLCAxNjYsIDM5LCAKKyAgICAxNzMsIDUsIDIzMywgMTI2LCAxNjYsIDM5LCAxNzMsIDUsIDIzMywgMTI1LCA3MCwgMTYsIDIyNSwgMjQwLCA3MCwgMTYsIAorICAgIDIzMCwgNzcsIDIzNCwgMzEsIDcwLCAxNiwgMjI1LCA3NSwgMjM0LCAzMSwgNzAsIDE2LCAyNTIsIDU4LCAyMzQsIDMxLCA3MCwgCisgICAgMTYsIDI1MSwgMTEyLCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjE5LCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjEzLCAyMzQsIAorICAgIDMxLCA3MCwgMTYsIDIyNCwgMjExLCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgMjE3LCAyMzQsIDMxLCA3MCwgMTYsIDIyNCwgCisgICAgMjE1LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTgxLCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc3LCAyMzQsIDMxLCA3MCwgCisgICAgMTYsIDI0OCwgMTc2LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc5LCAyMzQsIDMxLCA3MCwgMTYsIDI0OCwgMTc4LCAyMzQsIAorICAgIDMxLCA3MCwgMTYsIDI0OCwgMTc1LCAyMzQsIDMxLCA3MCwgMTYsIDIxNSwgODcsIDcwLCAxNiwgMjMwLCA3NywgMjIyLCAKKyAgICAyMDcsIDcwLCAxNiwgMjI1LCA3NSwgMjIyLCAyMDcsIDcwLCAxNiwgMjUyLCA1OCwgMjIyLCAyMDcsIDcwLCAxNiwgMjUxLCAKKyAgICAxMTIsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE5LCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxMywgMjIyLCAyMDcsIAorICAgIDcwLCAxNiwgMjI0LCAyMTEsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE3LCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxNSwgCisgICAgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxODEsIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc3LCAyMjIsIDIwNywgNzAsIDE2LCAKKyAgICAyNDgsIDE3NiwgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxNzksIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc4LCAyMjIsIAorICAgIDIwNywgNzAsIDE2LCAyNDgsIDE3NSwgMjIyLCAyMDcsIDI1MSwgMTI5LCAxLCAxNzYsIDI1MSwgMTI5LCAxLCAyNDMsIDE0MiwgCisgICAgMjUxLCAxMjksIDEsIDIyOSwgODIsIDI1MSwgMTI5LCAxLCAyMjksIDI3LCAyNTEsIDEyOSwgMSwgMTkxLCAyNTEsIDEyOSwgCisgICAgMSwgMjUyLCAxOTksIDI1MSwgMTI5LCAxLCAxODYsIDI1MSwgMTI5LCAxLCAyMzAsIDExMCwgMjUxLCAxMjksIDEsIDIxNywgCisgICAgMTA2LCAyNTEsIDEyOSwgMSwgMjQ4LCAyMjksIDI1MSwgMTI5LCAxLCAxOTgsIDI1MSwgMTI5LCAxLCAyMjgsIDQxLCAyNTEsIAorICAgIDEyOSwgMSwgMjUxLCA0MSwgMjUxLCAxMjksIDEsIDIzNSwgMTQ3LCAyNTEsIDEyOSwgMSwgMjI3LCAxNjksIDI1MSwgMTI5LCAKKyAgICAxLCAyMjcsIDE2MiwgMjUxLCAxMjksIDEsIDE5MiwgMjUxLCAxMjksIDEsIDIwNSwgMjUxLCAxMjksIDEsIDIzMywgMTQxLCAKKyAgICAyNTEsIDEyOSwgMSwgMjE0LCAyNywgMjUxLCAxMjksIDEsIDIwNiwgMjUxLCAxMjksIDEsIDYxLCAyNTEsIDEyOSwgMSwgCisgICAgMTYyLCAyNTEsIDEyOSwgMjUsIDUsIDc0LCAyNTEsIDEyOSwgMjUsIDUsIDY5LCAyNTEsIDEyOSwgMjUsIDUsIDc2LCAyNTEsIAorICAgIDEyOSwgMjUsIDUsIDc4LCAyNTEsIDEyOSwgMjUsIDUsIDI1NCwgMjUyLCAyNTEsIDEyOSwgMjI2LCA2NCwgMjUxLCAxMjksIAorICAgIDI0NSwgMTUxLCA2NCwgMjIxLCAxNzQsIDM5LCA4OSwgMSwgMTI1LCAxNzYsIDM5LCA4OSwgMSwgMTI1LCAyMzQsIDEzOCwgCisgICAgMzksIDg5LCAxLCAxMjUsIDIzMywgMTc3LCAzOSwgODksIDEsIDEyMSwgMTc2LCAzOSwgODksIDEsIDEyMSwgMjMzLCAxNzcsIAorICAgIDM5LCA4OSwgMSwgMTIxLCAyMzQsIDEzOCwgMzksIDg5LCAxLCAyMjksIDgyLCAzOSwgODksIDEsIDEyNSwgMjUxLCA0MSwgCisgICAgMzksIDg5LCAxLCAxMjUsIDI1MCwgMTY1LCAzOSwgODksIDEsIDEyMSwgMjUxLCA0MSwgMzksIDg5LCAxLCAxMjEsIDIwNiwgCisgICAgMzksIDg5LCAxLCAxMjEsIDI1MCwgMTY1LCAzOSwgODksIDEsIDIyNywgMTY5LCAzOSwgODksIDEsIDIyMywgMTQzLCAzOSwgCisgICAgODksIDEsIDEyNSwgMjIzLCAxNDEsIDM5LCA4OSwgMSwgMjQ4LCAyMjksIDM5LCA4OSwgMSwgMTIxLCAyMjMsIDE0MSwgMzksIAorICAgIDg5LCAxLCAyMjMsIDE1MiwgMzksIDg5LCAxLCAxMjUsIDIxNywgMTA2LCAzOSwgODksIDEsIDEyNSwgMjE2LCAyMDksIDM5LCAKKyAgICA4OSwgMSwgMTIxLCAyMTcsIDEwNiwgMzksIDg5LCAxLCAxMjEsIDIxNiwgMjA5LCAzOSwgODksIDEsIDE5OCwgMzksIDg5LCAKKyAgICAxLCAyNTIsIDE5OSwgMzksIDg5LCAxLCAxMjUsIDE5MSwgMzksIDg5LCAxLCAxMjUsIDIyNSwgMTUwLCAzOSwgODksIDEsIAorICAgIDEyNSwgMjQ0LCAyMDQsIDM5LCA4OSwgMSwgMTIxLCAxOTEsIDM5LCA4OSwgMSwgMTIxLCAyNDQsIDIwNCwgMzksIDg5LCAxLCAKKyAgICAxMjEsIDIyNSwgMTUwLCAzOSwgODksIDEsIDE4NiwgMzksIDg5LCAxLCAxMjEsIDE5MiwgMzksIDg5LCAxLCAxMjUsIDE5MiwgCisgICAgMzksIDg5LCAxLCAyMDUsIDM5LCA4OSwgMSwgMjIyLCAxMzksIDM5LCA4OSwgMSwgMjMzLCAxNDEsIDM5LCA4OSwgMSwgMjMyLCAKKyAgICA5OCwgMzksIDg5LCAxLCAyMTIsIDY1LCAzOSwgODksIDEsIDEyNSwgMjIwLCAxMDQsIDM5LCA4OSwgMSwgMTI1LCAyMTgsIAorICAgIDIyNSwgMzksIDg5LCAxLCAxMjUsIDIwNiwgMzksIDg5LCAxLCAxMjUsIDE2MiwgMzksIDg5LCAxLCAyMzIsIDE5MCwgMzksIAorICAgIDg5LCAxLCA2MSwgMzksIDg5LCAxLCAxMjEsIDE2MiwgMzksIDg5LCAxLCA3NCwgMzksIDg5LCAxLCAyMzYsIDQwLCAzOSwgCisgICAgODksIDEsIDY5LCAzOSwgODksIDEsIDIxNCwgMTE4LCAzOSwgODksIDEsIDI0NSwgMjE3LCAzOSwgODksIDEsIDIyNiwgMTg3LCAKKyAgICAzOSwgODksIDEsIDIzMywgMTI2LCAzOSwgODksIDEsIDI0MiwgMTM5LCAyMDYsIDM5LCA4OSwgMTE3LCA1LCAxNDcsIDIwNSwgCisgICAgMzksIDg5LCAxMTcsIDUsIDE0NywgMjMzLCAxNDEsIDM5LCA4OSwgMTE3LCA1LCAyMzMsIDE0MiwgMjE3LCA1OSwgMjMzLCAKKyAgICAxMTUsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIzNCwgMjM3LCAyMzMsIDExNSwgMzksIDg5LCAxMTcsIDUsIDQwLCAyMjksIAorICAgIDgyLCAzOSwgODksIDExNywgNSwgMTIxLCAxOTEsIDM5LCA4OSwgMTE3LCA1LCAxMjUsIDIyMywgMTQyLCAxNzcsIDEyMSwgCisgICAgMTkxLCAzOSwgODksIDExNywgNSwgMTg2LCAzOSwgODksIDExNywgNSwgMjUyLCAxOTksIDM5LCA4OSwgMTE3LCA1LCAyMDYsIAorICAgIDM5LCA4OSwgNSwgMjIyLCAxMiwgMzksIDg5LCAyNSwgNSwgNjEsIDM5LCA4OSwgMjUsIDUsIDIzMSwgMjA5LCAyMjEsIDIyOCwgCisgICAgMzksIDg5LCAyNSwgNSwgMjU1LCA4MiwgMzksIDg5LCAyNSwgNSwgMjE3LCA2NSwgMjU1LCA4MiwgMzksIDg5LCAyNSwgNSwgCisgICAgNzQsIDM5LCA4OSwgMjUsIDUsIDIzNiwgNDAsIDM5LCA4OSwgMjUsIDUsIDIxNCwgMjE0LCAzOSwgODksIDI1LCA1LCAyMTQsIAorICAgIDExNywgMzksIDg5LCAyNSwgNSwgNjksIDM5LCA4OSwgMjUsIDUsIDIxNCwgMTE4LCAzOSwgODksIDI1LCA1LCA3OCwgMzksIAorICAgIDg5LCAyNSwgNSwgMjI3LCA1LCA1MSwgMzksIDg5LCAyNSwgNSwgMjI2LCAxMTMsIDM5LCA4OSwgMjUsIDUsIDc2LCAzOSwgCisgICAgODksIDI1LCA1LCAyNTQsIDI1MiwgMzksIDg5LCAyNSwgNSwgMjI2LCAxODcsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjEwLCAKKyAgICAzOSwgODksIDI1LCA1LCA4OSwgMjU0LCAyMTAsIDM5LCA4OSwgMjUsIDUsIDIyNywgNSwgNDgsIDM5LCA4OSwgNSwgMjMxLCAKKyAgICAyMDksIDIzNCwgMjM2LCAzOSwgODksIDUsIDIxNiwgMzAsIDM5LCA4OSwgNSwgMjE2LCAyOSwgMzksIDg5LCA1LCAyMzQsIAorICAgIDEwMywgMjE2LCAyOCwgMzksIDg5LCA1LCAyMzQsIDEwMywgMjE2LCAyNywgMzksIDg5LCA1LCAyMzQsIDEwMywgMjE2LCAyNiwgCisgICAgMzksIDg5LCA1LCAyMjMsIDE5MSwgMjQyLCA1MiwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjIxLCAyNTUsIDM5LCA4OSwgNSwgCisgICAgMjM0LCAxMDIsIDIzNCwgMjIxLCAzOSwgODksIDM4LCAyNDksIDEyMywgMjQ3LCAxMjgsIDM5LCA4OSwgMjQxLCA1MywgMjEsIAorICAgIDIxMCwgODYsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDExMSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTA1LCAzOSwgODksIDI0MSwgCisgICAgNTMsIDIxLCAxNTgsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE2MSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTkwLCAzOSwgODksIAorICAgIDI0MSwgNTMsIDIxLCAxOTUsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5OSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTk2LCAzOSwgCisgICAgODksIDI0MSwgNTMsIDIxLCAyMDEsIDM5LCA4OSwgODksIDIxLCAyMTAsIDg2LCAzOSwgODksIDg5LCAyMSwgMTExLCAzOSwgCisgICAgODksIDg5LCAyMSwgMTA1LCAzOSwgODksIDg5LCAyMSwgMTU4LCAzOSwgODksIDg5LCAyMSwgMTYxLCAzOSwgODksIDg5LCAKKyAgICAyMSwgMTkwLCAzOSwgODksIDg5LCAyMSwgMTk1LCAzOSwgODksIDg5LCAyMSwgMTk5LCAzOSwgODksIDg5LCAyMSwgMTk2LCAKKyAgICAzOSwgODksIDg5LCAyMSwgMjAxLCAzOSwgODksIDUsIDIxMSwgMjQ5LCAzOSwgODksIDUsIDIxMSwgMjQ4LCAzOSwgODksIDUsIAorICAgIDIyMSwgMjE3LCAzOSwgODksIDUsIDIzNCwgMTY2LCAzOSwgODksIDUsIDI0MCwgMjM5LCAzOSwgODksIDUsIDI0NywgMTQyLCAKKyAgICAzOSwgODksIDUsIDIyMywgNTIsIDIyMiwgMTg5LCAyMjMsIDE1MiwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjExLCA3MiwgMzksIAorICAgIDg5LCA1LCAyMzUsIDEyLCAzOSwgODksIDUsIDIzNSwgMTEsIDM5LCA4OSwgNSwgMjIxLCAyMjQsIDM5LCA4OSwgNSwgMjIxLCAKKyAgICAyMjMsIDM5LCA4OSwgNSwgMjQyLCAxNiwgMzksIDg5LCA1LCAyNTEsIDM4LCAxMDIsIDUsIDIxNCwgMjAwLCAyMjMsIDMzLCAKKyAgICAxMDIsIDUsIDIxNCwgMjAwLCAyNTEsIDksIDEwMiwgNSwgMjUwLCAxOTQsIDEwMiwgNSwgMjE4LCAxNiwgMTAyLCA1LCAyNTEsIAorICAgIDI0MSwgMTAyLCAxLCAyNTQsIDE5MywgMTAyLCAxLCAyNTQsIDE5NCwgMjE3LCAxNCwgMTAyLCAxLCAyMzYsIDM2LCAxMDIsIAorICAgIDEsIDIzNiwgMzcsIDIxNywgMTQsIDEwMiwgMSwgMjE0LCAyMDMsIDEwMiwgMSwgMjE0LCAyMDQsIDIxNywgMTQsIDEwMiwgMSwgCisgICAgMjIzLCAxOTEsIDIyMywgODIsIDEwMiwgMSwgMjIzLCAxOTEsIDIyMywgODMsIDIxNywgMTQsIDEwMiwgMSwgMjMzLCAxNDIsIAorICAgIDIzMywgMzAsIDEwMiwgMSwgMjMzLCAxNDIsIDIzMywgMzEsIDIxNywgMTQsIDEwMiwgMSwgMjQ1LCAxODcsIDEwMiwgMSwgCisgICAgMjU0LCAyMDgsIDEwMiwgMSwgMjI2LCAyMTYsIDEwMiwgMSwgMjI2LCAyMTcsIDIxNywgMTQsIDEwMiwgMSwgMTc2LCAxMDIsIAorICAgIDEsIDIzNSwgMTksIDIzMSwgMjEyLCAxMDIsIDEsIDI0MywgMTQyLCAxMDIsIDEsIDI0MywgMTQzLCAyNDIsIDE2OCwgMTAyLCAKKyAgICAxLCAyMjksIDgyLCAxMDIsIDEsIDI1MSwgNDEsIDEwMiwgMSwgMjUxLCA0MiwgMjMzLCAxMjksIDEwMiwgMSwgMjM1LCAxNDcsIAorICAgIDEwMiwgMSwgMjM1LCAxNDgsIDIzNSwgMTI0LCAxMDIsIDEsIDIyNywgMTY5LCAxMDIsIDEsIDIxNywgMTA3LCAyMzMsIDgyLCAKKyAgICAxMDIsIDEsIDIxNywgMTA3LCAyMzAsIDcyLCAyMzEsIDIxMiwgMTAyLCAxLCAyNDgsIDIzMCwgMjMwLCA3MiwgMjU0LCAxNTMsIAorICAgIDEwMiwgMSwgMjQ4LCAyMzAsIDIzMCwgNzIsIDIzMSwgMjEyLCAxMDIsIDEsIDIyOSwgMjM0LCAyMjMsIDE1NSwgMTAyLCAxLCAKKyAgICAyMTcsIDEwNiwgMTAyLCAxLCAyMTcsIDEwNywgMjE3LCAzNiwgMTAyLCAxLCAyNDgsIDIyOSwgMTAyLCAxLCAyNDgsIDIzMCwgCisgICAgMjMxLCAyMzAsIDEwMiwgMSwgMTk4LCAxMDIsIDEsIDE5MSwgMTAyLCAxLCAyMjYsIDk0LCAyMzQsIDIzMiwgMTAyLCAxLCAKKyAgICAyNTIsIDE5OSwgMTAyLCAxLCAyNTIsIDIwMCwgMjM0LCAxNzgsIDEwMiwgMSwgMTg2LCAxMDIsIDEsIDE5MiwgMTAyLCAxLCAKKyAgICAyMDUsIDEwMiwgMSwgMjMzLCAxNDEsIDEwMiwgMSwgMjEyLCA2NSwgMTAyLCAxLCAyMjIsIDM2LCAyMjIsIDIyLCAxMDIsIDEsIAorICAgIDIyMiwgMzYsIDIyMSwgMjM1LCAxMDIsIDEsIDIwNiwgMTAyLCAxLCAxNjIsIDEwMiwgNSwgMjIzLCA3MywgMTAyLCAyNSwgNSwgCisgICAgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjE0LCAxOTksIDEwMiwgMjUsIDUsIDIxNCwgMjAwLCAyMjEsIDIzMSwgMTAyLCAyNSwgCisgICAgNSwgMjE4LCA0OCwgMTAyLCAyNSwgNSwgMjE4LCA0OSwgMjM2LCAyOCwgMTAyLCAyNSwgNSwgMjIzLCAxOTEsIDIyMywgODIsIAorICAgIDEwMiwgMjUsIDUsIDIyMywgMTkxLCAyMjMsIDgzLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMzMsIDE0MiwgMjMzLCAzMCwgCisgICAgMTAyLCAyNSwgNSwgMjMzLCAxNDIsIDIzMywgMzEsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNywgNjYsIDEwMiwgMjUsIDUsIAorICAgIDIxNywgNjcsIDIyMywgODIsIDEwMiwgMjUsIDUsIDIxNywgNjcsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNywgNjcsIDIyMywgCisgICAgODMsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIyNSwgMTg3LCAxMDIsIDI1LCA1LCAyMjUsIDE4OCwgMjE3LCAxNCwgMTAyLCAKKyAgICAyNTUsIDMsIDI1NSwgMiwgMTAyLCAxLCAyMzUsIDEsIDIyMSwgMjMwLCAxMDIsIDEsIDIzNCwgMTA4LCAyMjEsIDIzMCwgCisgICAgMTAyLCAxLCAyMTUsIDM0LCAyMjEsIDIzMCwgMTAyLCAxLCAyNDUsIDIxMSwgMjIxLCAyMzAsIDEwMiwgMSwgMjE0LCAwLCAKKyAgICAyMjEsIDIzMCwgMTAyLCAxLCAyMTAsIDEwNywgMjIxLCAyMzAsIDEwMiwgMSwgMjUzLCAyMTcsIDIyMSwgMjMwLCAxMDIsIAorICAgIDIxLCAyMTAsIDg2LCAxMDIsIDIxLCAxMTEsIDEwMiwgMjEsIDEwNSwgMTAyLCAyMSwgMTU4LCAxMDIsIDIxLCAxNjEsIDEwMiwgCisgICAgMjEsIDE5MCwgMTAyLCAyMSwgMTk1LCAxMDIsIDIxLCAxOTksIDEwMiwgMjEsIDE5NiwgMTAyLCAyMSwgMjAxLCAxMDIsIAorICAgIDIyNiwgMzMsIDEwMiwgMjI2LCA1OSwgMTAyLCAyMTEsIDIzOCwgMTAyLCAyNTAsIDI0NCwgMjI2LCA1MiwgMTAyLCAyNTAsIAorICAgIDI0NCwgMjE5LCAxNzQsIDEwMiwgMjUwLCAyNDQsIDIyNiwgNiwgMTAyLCAyMjYsIDU4LCAxMDIsIDI4LCAxNiwgMjQ3LCAKKyAgICAxMzQsIDEwMiwgMjgsIDE2LCAyNDgsIDU5LCAxMDIsIDI4LCAxNiwgMjQ2LCA3MiwgMTAyLCAyOCwgMTYsIDI0OCwgMTg0LCAKKyAgICAxMDIsIDI4LCAxNiwgMjQ4LCAxODUsIDIxOCwgMTYsIDEwMiwgMjgsIDE2LCAyNDcsIDIxMywgMTAyLCAyOCwgMTYsIDI0OCwgCisgICAgMjIyLCAxMDIsIDI4LCAxNiwgMjQ4LCA0MSwgMTAyLCAyOCwgMTYsIDI0OCwgMjA2LCAxMDIsIDI4LCAxNiwgMjQ4LCAxODUsIAorICAgIDI0MywgNjQsIDEwMiwgMjgsIDE2LCAzOCwgMjE3LCAxMCwgMTAyLCAyOCwgMTYsIDM4LCAyNDUsIDE0OSwgMTAyLCAyOCwgCisgICAgMTYsIDM4LCAyMzQsIDE3MywgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NSwgMTAyLCAyOCwgMTYsIDM4LCAyMzUsIDEyOCwgCisgICAgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NCwgMiwgMjM1LCAxMjgsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzYsIDIsIAorICAgIDIzNSwgMTI4LCAxMDIsIDI4LCAxNiwgMzgsIDI1MiwgNDUsIDEwMiwgMjgsIDE2LCAzOCwgMjQyLCAxNzIsIDEwMiwgMjgsIAorICAgIDE2LCAyMjIsIDI1MiwgMjA0LCAyNDYsIDgyLCAxMDIsIDI4LCAxNiwgMjIyLCAyNTIsIDIwNCwgMjQ4LCAyMjAsIDEwMiwgCisgICAgMjgsIDE2LCAyMjIsIDI1MiwgMjUwLCA4LCAyMTUsIDExMiwgMTAyLCAyOCwgMTYsIDIyMiwgMjUyLCAyNTAsIDgsIDIxNywgCisgICAgNzQsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNiwgNDcsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNCwgCisgICAgMTQyLCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjUwLCA4LCAyMjUsIDQxLCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjUwLCA4LCAKKyAgICAyMjUsIDI5LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjUsIDY0LCAyMDcsIDUsIDIyNiwgMzAsIDIwNywgNSwgCisgICAgMjI2LCA0MywgMjA3LCA1LCAyMjYsIDM5LCAyMDcsIDEsIDYxLCAyMDcsIDEsIDc0LCAyMDcsIDEsIDY5LCAyMDcsIDEsIAorICAgIDI1NCwgMjUyLCAyMDcsIDEsIDc4LCAyMDcsIDEsIDc2LCAyMDcsIDEsIDI0NSwgNjMsIDIwNywgMSwgMTc2LCAyMDcsIDEsIAorICAgIDIyNCwgOTEsIDIwNywgMSwgMjQzLCAxNDIsIDIwNywgMSwgMjI5LCA4MiwgMjA3LCAxLCAyNTEsIDQxLCAyMDcsIDEsIDIzNSwgCisgICAgMTQ3LCAyMDcsIDEsIDIxMCwgMTE2LCAyMDcsIDEsIDIyNywgMTY5LCAyMDcsIDEsIDIxNywgMTA2LCAyMDcsIDEsIDI0OCwgCisgICAgMjI5LCAyMDcsIDEsIDE5OCwgMjA3LCAxLCAxOTEsIDIwNywgMSwgMjQ0LCAyMDQsIDIwNywgMSwgMjE0LCAyNywgMjA3LCAxLCAKKyAgICAyNTIsIDE5OSwgMjA3LCAxLCAxODYsIDIwNywgMSwgMTkyLCAyMDcsIDEsIDIwNSwgMjA3LCAxLCAyMzMsIDE0MSwgMjA3LCAKKyAgICAxLCAyMTIsIDY1LCAyMDcsIDEsIDIwNiwgMjA3LCAxLCAyMTEsIDE2NSwgMjA3LCAxLCAxNjIsIDIwNywgMTE3LCA1LCAyMjYsIAorICAgIDU2LCAyMDcsIDExNywgNSwgMjI2LCAzMiwgMjA3LCAxMTcsIDUsIDIyNiwgMjksIDIwNywgMjUsIDUsIDIyNiwgNDYsIDIwNywgCisgICAgMjUsIDUsIDIyNiwgMjgsIDIwNywgMjUsIDUsIDIyNiwgNTAsIDIwNywgMjUsIDUsIDIyNiwgMzgsIDIwNywgMjUsIDUsIAorICAgIDIyNiwgNTcsIDIwNywgMjUsIDUsIDIyNiwgNDgsIDIwNywgNSwgMjI2LCA2MCwgMjA3LCA1LCAyMTMsIDE1MiwgMjA3LCAKKyAgICAxMTcsIDUsIDIyNSwgMjUyLCAxODYsIDIwNywgMTE3LCA1LCAyMjUsIDI1MiwgMjEyLCA2NSwgMjA3LCAxLCAyMzQsIDEzOCwgCisgICAgMjA3LCAxLCAyMTcsIDIzMiwgMjA3LCAyMSwgMjEwLCA4NiwgMjA3LCAyMSwgMTExLCAyMDcsIDIxLCAxMDUsIDIwNywgMjEsIAorICAgIDE1OCwgMjA3LCAyMSwgMTYxLCAyMDcsIDIxLCAxOTAsIDIwNywgMjEsIDE5NSwgMjA3LCAyMSwgMTk5LCAyMDcsIDIxLCAKKyAgICAxOTYsIDIwNywgMjEsIDIwMSwgMjA3LCAyNTMsIDE4MywgMjA3LCAxLCAyMjMsIDU1LCAyMDcsIDEsIDIzMywgMTMsIDIwNywgCisgICAgMSwgMjUyLCAyNiwgMjA3LCAxLCA0MCwgMjM1LCAyOSwgMjA3LCAxLCA0MCwgMTk0LCAyNTIsIDEyOCwgMSwgNjEsIDI1MiwgCisgICAgMTI4LCAxLCAyMTksIDE2NiwgNjEsIDI1MiwgMTI4LCAxLCAxNjIsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTYyLCAyNTIsIAorICAgIDEyOCwgMSwgMjMxLCAxODYsIDE2MiwgMjUyLCAxMjgsIDEsIDI1MiwgMTk5LCAyNTIsIDEyOCwgMSwgMjM0LCAyMTgsIDI1MiwgCisgICAgMTk5LCAyNTIsIDEyOCwgMSwgMTkxLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE5MSwgMjUyLCAxMjgsIDEsIDE5OCwgMjUyLCAKKyAgICAxMjgsIDEsIDIzMSwgMTg2LCAxOTgsIDI1MiwgMTI4LCAxLCAyMTIsIDY1LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIxMiwgCisgICAgNjUsIDI1MiwgMTI4LCAxLCAyMjYsIDcxLCAyMTIsIDY1LCAyNTIsIDEyOCwgMSwgMjQzLCAxNDIsIDI1MiwgMTI4LCAxLCAKKyAgICAyMTksIDE2NiwgMjQzLCAxNDIsIDI1MiwgMTI4LCAxLCAyMzUsIDE0NywgMjUyLCAxMjgsIDEsIDI0OCwgMjI5LCAyNTIsIAorICAgIDEyOCwgMSwgMjA1LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIwNSwgMjUyLCAxMjgsIDEsIDE4NiwgMjUyLCAxMjgsIDEsIAorICAgIDIxOSwgMTY2LCAxODYsIDI1MiwgMTI4LCAxLCAyMTksIDI4LCAyMTcsIDEwNiwgMjUyLCAxMjgsIDEsIDIyOCwgNjAsIDIxNywgCisgICAgMTA2LCAyNTIsIDEyOCwgMSwgMjA2LCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIwNiwgMjUyLCAxMjgsIDEsIDIzMSwgMTg2LCAKKyAgICAyMDYsIDI1MiwgMTI4LCAxLCAxOTIsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTkyLCAyNTIsIDEyOCwgMSwgMjI5LCA4MiwgCisgICAgMjUyLCAxMjgsIDEsIDIzMywgMTQxLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDIzMywgMTQxLCAyNTIsIDEyOCwgMSwgMjI3LCAKKyAgICAxNjksIDI1MiwgMTI4LCAxLCAyNTEsIDQxLCAyNTIsIDEyOCwgMSwgMjI5LCAxNTMsIDI1MiwgMTI4LCAxLCAyMzEsIDEyOSwgCisgICAgMjUyLCAxMjgsIDEsIDc0LCAyNTIsIDEyOCwgMSwgNjksIDI1MiwgMTI4LCA1LCAyMTYsIDM0LCAyNTIsIDEyOCwgMjUsIDUsIAorICAgIDc2LCAyNTIsIDEyOCwgMjUsIDUsIDIyNiwgNzEsIDc2LCAyNTIsIDEyOCwgMjUsIDUsIDI0NSwgMjE3LCAyNTIsIDEyOCwgCisgICAgMjUsIDUsIDc0LCAyNTIsIDEyOCwgMjUsIDUsIDIzNCwgMjE4LCA3NCwgMjUyLCAxMjgsIDI1LCA1LCA3OCwgMjUyLCAxMjgsIAorICAgIDI1LCA1LCAyMzQsIDIxOCwgNzgsIDI1MiwgMTI4LCAyNSwgNSwgNjksIDI1MiwgMTI4LCAyNSwgNSwgMTA0LCAzMSwgMjE5LCAKKyAgICAxNjYsIDIwNiwgMjUyLCAxMjgsIDExNywgNSwgMjI5LCA4NCwgMjUyLCAxMjgsIDExNywgNSwgMjQyLCA2NywgMjUyLCAxMjgsIAorICAgIDIyNiwgNDEsIDI1MiwgMTI4LCAyMjYsIDM3LCAyNTIsIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMjksIDIzNCwgMjMxLCA0MiwgCisgICAgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjI1LCA2NywgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjM1LCA1NCwgMjUyLCAKKyAgICAxMjgsIDE2LCAyNTEsIDI0OSwgMjI2LCA0MSwgMTk3LCAxLCAxNzYsIDE5NywgMSwgMjM0LCA0NSwgMTk3LCAxLCAyMzQsIAorICAgIDEzOCwgMTk3LCAxLCAyNDMsIDE0MiwgMTk3LCAxLCAyNDIsIDE5MywgMTk3LCAxLCAyMjksIDgyLCAxOTcsIDEsIDI1MSwgCisgICAgNDEsIDE5NywgMSwgMjUwLCAxNjUsIDE5NywgMSwgMjM1LCAxNDcsIDE5NywgMSwgMjI3LCAxNjksIDE5NywgMSwgMjE3LCAKKyAgICAxMDYsIDE5NywgMSwgMjE2LCAyMDksIDE5NywgMSwgMjQ4LCAyMjksIDE5NywgMSwgMTk4LCAxOTcsIDEsIDE5MSwgMTk3LCAKKyAgICAxLCAyMjUsIDQ1LCAxOTcsIDEsIDIyNSwgMTUwLCAxOTcsIDEsIDI0NCwgMjA0LCAxOTcsIDEsIDI0NCwgODMsIDE5NywgMSwgCisgICAgMjUyLCAxOTksIDE5NywgMSwgMjUxLCAyMzAsIDE5NywgMSwgMTg2LCAxOTcsIDEsIDIzMCwgMTczLCAxOTcsIDEsIDIxNSwgCisgICAgMTg0LCAxOTcsIDEsIDIxNSwgMTc2LCAxOTcsIDEsIDI0NiwgNDYsIDE5NywgMSwgMTkyLCAxOTcsIDEsIDIwNSwgMTk3LCAxLCAKKyAgICAyMzMsIDE0MSwgMTk3LCAxLCAxNjIsIDE5NywgMSwgMjQxLCAxNjAsIDE5NywgMSwgMjE0LCAyNywgMTk3LCAxLCAyMDYsIAorICAgIDE5NywgMSwgMjIwLCAxMDQsIDE5NywgMSwgMjEyLCA2NSwgMTk3LCAxLCA2MSwgMTk3LCAyMTgsIDc0LCAxLCAxOTIsIDE5NywgCisgICAgMjE4LCA3NCwgMSwgMjA1LCAxOTcsIDI1LCA1LCAyNTUsIDgyLCAxOTcsIDI1LCA1LCA3NCwgMTk3LCAyNSwgNSwgNzgsIAorICAgIDE5NywgMjUsIDUsIDIyNiwgMTg3LCAxOTcsIDI1LCA1LCA2OSwgMTk3LCAyNSwgNSwgMjE0LCAxMTgsIDE5NywgMjUsIDUsIAorICAgIDc2LCAxOTcsIDExNywgNSwgMjM1LCAyOSwgMTk3LCAxMTcsIDUsIDE5NCwgMTk3LCAxMTcsIDUsIDE1NiwgMTk3LCAxMTcsIAorICAgIDUsIDIzMCwgMzAsIDE5NywgMTE3LCA1LCAyMjYsIDEwOSwgMTk3LCAxMTcsIDUsIDE1MywgMTk3LCAxMTcsIDUsIDIxNywgCisgICAgMTUzLCAxOTcsIDExNywgNSwgMjI3LCAxNDYsIDE5NywgMTE3LCA1LCAyMzQsIDIzNiwgMTk3LCA1LCAyMjMsIDE1MywgMTk3LCAKKyAgICA1LCAyMjcsIDIwOSwgMTk3LCAyMjQsIDE0NCwgMjE3LCAxMDQsIDE5NywgMjI0LCAxNDQsIDIyNywgMTU2LCAyMTYsIDEyMSwgCisgICAgMjE3LCAxMDQsIDE5NywgMjI0LCAxNDQsIDI1MCwgMTcyLCAxOTcsIDIyNCwgMTQ0LCAyMTUsIDE3MSwgMjUwLCAxNzIsIAorICAgIDE5NywgMjI0LCAxNDQsIDIxNSwgMTcwLCAxOTcsIDIxLCAyMTAsIDg2LCAxOTcsIDIxLCAxMTEsIDE5NywgMjEsIDEwNSwgCisgICAgMTk3LCAyMSwgMTU4LCAxOTcsIDIxLCAxNjEsIDE5NywgMjEsIDE5MCwgMTk3LCAyMSwgMTk1LCAxOTcsIDIxLCAxOTksIAorICAgIDE5NywgMjEsIDE5NiwgMTk3LCAyMSwgMjAxLCAxOTcsIDEsIDIxNSwgMTU3LCAxOTcsIDEsIDIxNSwgMTQ1LCAxOTcsIDEsIAorICAgIDI0OCwgMTQzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAyMTAsIDg2LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxMTEsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDEwNSwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTU4LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDIxLCAxNjEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5MCwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTk1LCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTksIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5NiwgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAyMSwgMjAxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgMTQxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIAorICAgIDI1MywgMjE0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgMjI1LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgCisgICAgMTIzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NCwgMTg3LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgMTQwLCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgNDQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU1LCA0NSwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAxLCAyNTUsIDQzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgMzgsIDIyNiwgMjE0LCAyNTAsIDExMSwgCisgICAgMSwgMjMyLCAyNDcsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxNzgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM2LCAKKyAgICA0MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE5NywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE4NiwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzIsIDEwMywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDIyMSwgMjI2LCAKKyAgICAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDIxOSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMTQsIDE2OCwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAxLCAyMTQsIDExMSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDY0LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDEsIDI0NSwgMTE2LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI0NSwgMjIwLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIAorICAgIDI0NSwgMTU4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI0NSwgOTQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMyLCAKKyAgICAxNjIsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI2LCAxNDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI3LCAwLCAyMjYsIAorICAgIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMTI5LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMjI2LCAyMjYsIDIxNCwgCisgICAgMjUwLCAxMTEsIDIzMCwgMTA4LCAyMTUsIDEyMiwgMjI2LCAyMTQsIDI1MCwgMTExLCAyNDMsIDEzNywgMjE1LCAxMjMsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjMwLCAxMDYsIDIxNSwgMTIzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIyMywgOTUsIDIyNiwgCisgICAgMjE0LCAyNTAsIDExMSwgMjI1LCAxNDgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjU0LCAyMTcsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMjI0LCAxNDQsIDIzMCwgMTAzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIyNCwgMTQ0LCA1MiwgMjMwLCAxMDMsIDIwNywgCisgICAgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMTgsIDksIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMjYsIDQyLCAyMDcsIDIyNCwgCisgICAgMTQ0LCAyNTEsIDI0OSwgMjI0LCAxMzIsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyNTEsIDI3LCAyMDcsIDIyNCwgMTQ0LCAKKyAgICAyNTEsIDI0OSwgMjMzLCAxNCwgMjIxLCAyMjcsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyMzUsIDE5LCAyMjEsIDIyNywgCisgICAgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDI0OCwgMjMwLCAyMjEsIDIyNywgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIAorICAgIDI1MiwgMjAwLCAyMjEsIDIyNywgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMTYsIDIxMywgMjUyLCAxMzgsIDIyMCwgNzksIDIxMywgCisgICAgMjUyLCAxMzgsIDIyNCwgMjAxLCAyMTMsIDI1MiwgNSwgMjI4LCAyMTQsIDIxMywgMjUyLCA1LCAyMTEsIDgwLCAyMzAsIAorICAgIDIyNywgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyNTQsIDIyMiwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjExLCA4MCwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjM0LCAyMDQsIAorICAgIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDI1MSwgMTAsIDUxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAKKyAgICAyMzQsIDIwNCwgMjM1LCAyNTAsIDIxOCwgMiwgMjIxLCAxOTksIDIxMywgMjUyLCAxMzgsIDUyLCAyMTgsIDEsIDIxMywgCisgICAgMjUyLCAxMzgsIDIxNSwgMjEyLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDIzNCwgMjA0LCAyNTQsIDg1LCAyMTMsIDI1MiwgCisgICAgMTM4LCA1OSwgNTEsIDIxMywgMjUyLCAxMzgsIDExMywgMTcwLCA1MSwgMjEzLCAyNTIsIDEzOCwgMTM0LCAxNzAsIDUxLCAKKyAgICAyMTMsIDI1MiwgMTM4LCAyMjIsIDI0MywgMjM0LCAyMTUsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDI1MywgCisgICAgMjEyLCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDIxOCwgMSwgMjEzLCAyNTIsIDUsIDIxMywgCisgICAgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIDIyMywgNTIsIDIxMywgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIAorICAgIDIxMywgMTQ4LCAyNTQsIDg1LCAyMTMsIDI1MiwgNSwgMjIzLCA1MiwgMjEzLCAxNDgsIDI1NCwgODUsIDIxMywgMjUyLCA1LCAKKyAgICAyMTMsIDE0OCwgMjE0LCAyMTcsIDIsIDIxNywgNzgsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjU0LCA4NiwgMiwgMjE3LCAKKyAgICA3OCwgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDI1NCwgOTksIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyNTIsIDE3NCwgMjEzLCAKKyAgICAyNTIsIDUsIDI1NCwgODQsIDIxNCwgMjAsIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyMTQsIDIxLCAyLCAyMTcsIDc4LCAyMTMsIAorICAgIDI1MiwgNSwgMjE2LCA2OSwgMjEzLCAyNTIsIDUsIDI0MSwgMTk4LCAyMDAsIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyMDAsIAorICAgIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyMjIsIDE0NCwgMjAwLCAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjE0LCAKKyAgICAyMjMsIDIzMCwgOTUsIDIxMywgMjUyLCA1LCAyNTQsIDI4LCAyMTMsIDI1MiwgNSwgMjIyLCAxODksIDI1NCwgMjgsIDIxMywgCisgICAgMjUyLCAxMzgsIDI1MSwgMTAsIDQ4LCAyMTMsIDI1MiwgNSwgMjM1LCAxMDgsIDIxMywgMjUyLCA1LCAyMTQsIDE2MSwgNywgCisgICAgMSwgNCwgNiwgNjEsIDcsIDEsIDQsIDYsIDI1NCwgMjUyLCA3LCA0LCAxLCAyMTUsIDk0LCAyNTQsIDI1MiwgNywgMSwgNCwgCisgICAgNiwgMjUyLCAxNDIsIDI1MywgMTY2LCA3LCAxLCA0LCA2LCAyNTEsIDc0LCA3LCAxLCA0LCA2LCAyNDksIDY4LCA3LCAxLCA0LCAKKyAgICA2LCAyNDUsIDY3LCA3LCAxLCA0LCA2LCA3NiwgNywgNCwgMSwgMjE1LCA5NCwgMjA0LCA3NiwgNywgNCwgMSwgMjE1LCA5NCwgCisgICAgNzQsIDcsIDEsIDQsIDYsIDIzNSwgMTUwLCA3LCAxLCA0LCA2LCAyMzUsIDI5LCA3LCAxLCA0LCA2LCAyMzMsIDE1NSwgMiwgCisgICAgOTEsIDcsIDEsIDQsIDYsIDE5NCwgNywgMSwgNCwgNiwgMjIzLCA1MiwgMjMwLCAzMCwgNywgMSwgNCwgNiwgNzgsIDcsIDEsIAorICAgIDQsIDYsIDIwNCwgNzgsIDcsIDQsIDEsIDIxOSwgMTg5LCA3OCwgNywgNCwgMSwgMjE5LCAxODksIDIwNCwgNzgsIDcsIDQsIAorICAgIDEsIDIxOSwgMTg5LCAxNDQsIDIsIDkxLCA3LCA0LCAxLCAyMTUsIDk0LCAyMjYsIDIzOCwgNywgMSwgNCwgNiwgMjI2LCAKKyAgICAxMzgsIDcsIDQsIDEsIDIxNiwgMTUsIDE2MywgNzgsIDcsIDQsIDEsIDI1MSwgMTgzLCAxNjMsIDc4LCA3LCAxLCA0LCA2LCAKKyAgICAyMjYsIDEwOSwgNywgMSwgNCwgNiwgMjIzLCA1MiwgMTUzLCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxNTMsIDcsIDEsIDQsIDYsIAorICAgIDIxNywgMTUzLCA3LCAxLCA0LCA2LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDY5LCA3LCA0LCAxLCAyMTksIDE4OSwgMjQ4LCAKKyAgICA4LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDIxNSwgOTQsIDE5NCwgNywgMSwgNCwgNiwgMjE0LCAxMDUsIDcsIDEsIDQsIDYsIAorICAgIDIxMiwgOTgsIDcsIDEsIDQsIDYsIDIxMCwgMTU5LCA3LCAxLCA0LCA2LCAyNDUsIDE2LCA3LCAxLCAyMTMsIDEzNSwgMjMzLCAKKyAgICA4OCwgMjE4LCAyNTIsIDcsIDEsIDI1NCwgMjA1LCAyNiwgMSwgNCwgNiwgMjQzLCAxMTQsIDI2LCAxLCA0LCA2LCAyMzMsIAorICAgIDEwNCwgMjYsIDEsIDQsIDYsIDIyNSwgMTExLCAyNiwgMSwgNCwgNiwgMjIzLCA0MCwgMjYsIDEsIDQsIDYsIDIyNCwgMTY0LCAKKyAgICAzMywgMSwgNCwgNiwgMjQ1LCAxODIsIDU4LCAxLCA2LCA2MSwgNTgsIDEsIDYsIDI1NCwgMjUyLCA1OCwgMSwgNiwgMjUzLCAKKyAgICAxNjYsIDU4LCAxLCA2LCAyNTIsIDE0MiwgMjUzLCAxNjYsIDU4LCAxLCA2LCAyNDksIDY4LCA1OCwgMSwgNiwgNzYsIDU4LCAKKyAgICAxLCA2LCAyMjMsIDUyLCA3NiwgNTgsIDEsIDYsIDI0MywgMjA5LCA1OCwgMSwgNiwgMjQyLCA2NywgNTgsIDEsIDYsIDc0LCAKKyAgICA1OCwgMSwgNiwgMjM1LCAxNTAsIDU4LCAxLCA2LCAyMzUsIDI5LCA1OCwgMSwgNiwgMTU2LCA1OCwgMSwgNiwgMTk0LCA1OCwgCisgICAgMSwgNiwgMjMwLCAzMCwgNTgsIDEsIDYsIDIyMywgNTIsIDIzMCwgMzAsIDU4LCAxLCA2LCA3OCwgNTgsIDEsIDYsIDIyNiwgCisgICAgMTM4LCA1OCwgMSwgNiwgMjI2LCAxMDksIDU4LCAxLCA2LCAxNTMsIDU4LCAxLCA2LCAyMTcsIDE1MywgNTgsIDEsIDYsIDY5LCAKKyAgICA1OCwgMSwgNiwgMjEyLCA5OCwgNTgsIDEsIDQsIDYxLCA1OCwgMSwgNCwgMjE1LCA5NCwgNjEsIDU4LCAxLCA0LCAyNTQsIAorICAgIDE1MSwgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMjUyLCA1OCwgMSwgNCwgMjUzLCAxNjYsIDU4LCAxLCA0LCAyNDksIDY4LCAKKyAgICA1OCwgMSwgNCwgNzYsIDU4LCAxLCA0LCAyMjEsIDE5NywgNTgsIDEsIDQsIDIwNCwgNzYsIDU4LCAxLCA0LCAyMTUsIDk0LCAKKyAgICAyMDQsIDc2LCA1OCwgMSwgNCwgMjQzLCAyMDksIDU4LCAxLCA0LCAyMTUsIDk0LCA3NCwgNTgsIDEsIDQsIDIzNSwgMjksIAorICAgIDU4LCAxLCA0LCAxOTQsIDU4LCAxLCA0LCAyNDUsIDE0NiwgNTgsIDEsIDQsIDc4LCA1OCwgMSwgNCwgMjA0LCA3OCwgNTgsIAorICAgIDEsIDQsIDIxNiwgMTUsIDE2MywgNzgsIDU4LCAxLCA0LCAyNTEsIDE4MywgMTYzLCA3OCwgNTgsIDEsIDQsIDIyNiwgMTA5LCAKKyAgICA1OCwgMSwgNCwgMjE3LCAxNTMsIDU4LCAxLCA0LCA2OSwgNTgsIDEsIDQsIDIxOSwgMTg5LCA2OSwgNTgsIDEsIDQsIDIxNSwgCisgICAgOTQsIDE5NCwgNTgsIDEsIDQsIDIxNCwgMTA1LCA1OCwgMSwgNCwgMjU0LCAyMDUsIDU4LCAxLCA0LCAyNTIsIDM0LCA1OCwgCisgICAgMSwgNCwgMjYsIDI0MywgMTE0LCA1OCwgMSwgNCwgMjQ4LCA2MiwgNTgsIDEsIDQsIDI2LCAyMjUsIDEzNiwgNTgsIDEsIDQsIAorICAgIDI1MCwgMTE4LCA3LCAyMTgsIDY2LCA0LCAxLCA3NCwgNywgMjE4LCA2NiwgNCwgMSwgMTUzLCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICA2OSwgNywgMjE4LCA2NiwgNCwgMSwgMjE0LCAxMDUsIDI2LCAyMTgsIDY2LCA0LCAxLCAyNTIsIDM0LCAyNiwgMjE4LCA2NiwgCisgICAgNCwgMSwgMjQzLCAxMTQsIDI2LCAyMTgsIDY2LCA0LCAxLCAyMjMsIDQwLCAyNiwgMjE4LCA2NiwgNCwgMSwgMjI1LCAxMzYsIAorICAgIDI2LCAyMTgsIDY2LCA0LCAxLCAyNTAsIDExOCwgNywgNCwgMSwgMjE0LCAyMTQsIDcsIDQsIDEsIDU3LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyNDQsIDk2LCAyMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjIyLCA5NCwgCisgICAgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIxMCwgMTYwLCAKKyAgICAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDMsIDIwOSwgNTgsIDEsIDMzLCAyNDUsIDE1OCwgNywgNCwgCisgICAgMSwgMjM1LCAyMjAsIDI0MywgMjA5LCA3LCA0LCAxLCAyMTYsIDIxMiwgMiwgMjE4LCAxMDksIDcsIDQsIDYsIDEsIDI0MCwgCisgICAgMTYxLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxOTMsIDIsIDkxLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgOTEsIDcsIDQsIDYsIAorICAgIDEsIDEwNCwgMiwgOTEsIDcsIDQsIDEsIDIxNCwgMTU4LCAyLCA5MSwgNywgNCwgMSwgNTcsIDIsIDIyNiwgNzAsIDEwMywgNywgCisgICAgNCwgMSwgMjQ5LCA2OSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyNDUsIDE1LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIAorICAgIDEsIDI0MywgMjEwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjMzLCAxNTUsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjMyLCA1NSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMzAsIDMxLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIyMywgMjI3LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjQ1LCA4NCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMTEsIDE3OSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjU0LCAxNTIsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ5LCAKKyAgICA2OSwgMiwgMjQxLCA1OSwgMjIsIDIxNywgNzgsIDcsIDQsIDEsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyMDQsIAorICAgIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyMjMsIDUyLCAyMDQsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMjEsIDE5OCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMDQsIDE0NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDUsIDg0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIAorICAgIDEwNCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyMjMsIDU4LCAxMDMsIDU4LCAxLCA0LCAyMTUsIAorICAgIDk0LCAyNTQsIDE1MSwgNTgsIDEsIDQsIDI1MSwgNzQsIDU4LCAxLCA0LCAyNTEsIDc1LCAyLCAyNDksIDEwOCwgNTgsIDEsIAorICAgIDQsIDI0NSwgNjcsIDU4LCAxLCA0LCAyMjMsIDUyLCAyMDQsIDc2LCA1OCwgMSwgNCwgMjQ1LCAxNCwgNTgsIDEsIDQsIDI0NywgCisgICAgMTI3LCAyMzUsIDE1MSwgMiwgOTEsIDU4LCAxLCA0LCAxMTksIDI0MywgMjA5LCA1OCwgMSwgNCwgMjE1LCA5NCwgMjQyLCAKKyAgICA2NywgNTgsIDEsIDQsIDI0MCwgMTYxLCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTkyLCA1OCwgMSwgNCwgNiwgNzQsIDU4LCAKKyAgICAxLCA0LCA2LCAyNDAsIDE2MSwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE1MSwgMiwgMjQ5LCAxMzUsIDU4LCAxLCA0LCAyMzMsIAorICAgIDE1NSwgMiwgMjIzLCA1OCwgMTAzLCA1OCwgMSwgNCwgMjMzLCAxNTUsIDIsIDIyNiwgNzAsIDEwMywgNTgsIDEsIDQsIDYsIAorICAgIDE1NiwgNTgsIDEsIDQsIDIzMiwgNTUsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDIzMiwgNTUsIDIsIDIwMCwgMjMzLCAKKyAgICA0MiwgNTgsIDEsIDQsIDIzMCwgMzEsIDIsIDQzLCAxMDMsIDU4LCAxLCA0LCAyMzAsIDMxLCAyLCAyMjMsIDU4LCAxMDMsIAorICAgIDU4LCAxLCA0LCA2LCAyMzAsIDMwLCA1OCwgMSwgNCwgMjUyLCAxNDIsIDc4LCA1OCwgMSwgNCwgMjI1LCAxMzYsIDU4LCAxLCAKKyAgICA0LCAyMjIsIDk0LCAyLCAxMDMsIDU4LCAxLCA0LCAyNDUsIDgzLCA1OCwgMSwgNCwgMjE3LCAxNTQsIDIsIDIyNiwgNzAsIAorICAgIDEwMywgNTgsIDEsIDQsIDEwNCwgMTMwLCA1OCwgMSwgNCwgMjE0LCAxNTcsIDU4LCAxLCA0LCA2LCA2OSwgNTgsIDEsIDQsIAorICAgIDIxNCwgMTA2LCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMTQsIDEwNSwgNTgsIDEsIDQsIDIxMCwgMTU5LCA1OCwgMSwgCisgICAgNCwgMjEwLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNTgsIDEsIDQsIDIxMCwgMTYwLCAyLCAyNDksIDEwOCwgNTgsIDEsIDQsIAorICAgIDI0NSwgMTYsIDU4LCAxLCA0LCAyMTYsIDE4MCwgMzgsIDI0NiwgMTI2LCAyNDIsIDE0NCwgMjU1LCAyMywgMzgsIDI0NiwgCisgICAgMTI2LCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjE5LCA3MSwgNTEsIDM4LCAyMTgsIDcsIDc5LCAzOCwgMjMxLCAyMzYsIDM4LCAKKyAgICAyNDIsIDE0MSwgMzgsIDIzMSwgMjM0LCAzOCwgMjU1LCAxMCwgMzgsIDI0MiwgMTQyLCAzOCwgMjU1LCAxMSwgMzgsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCA1MSwgMzgsIDI1MSwgMTUzLCAzOCwgMjMxLCAyMzUsIDM4LCA1MiwgMjUwLCAzOSwgNDgsIDM4LCAKKyAgICAyMjYsIDIyOSwgNDgsIDM4LCAyMTAsIDM1LCA1MSwgMzgsIDIzNSwgMTc5LCA1MSwgMzgsIDIxNCwgMTUxLCA0OCwgMzgsIAorICAgIDIxNCwgMTM0LCA0OCwgMzgsIDcsIDQsIDEsIDI0NCwgNzEsIDIwNCwgMTE2LCA0OCwgMzgsIDcsIDQsIDEsIDI1NCwgMjUyLCAKKyAgICAzOCwgNywgNCwgMSwgMjU0LCA4MSwgMzgsIDcsIDQsIDEsIDI1MywgMTg0LCAzOCwgNywgNCwgMSwgMjUxLCA3NSwgMjUwLCAKKyAgICAxOTEsIDM4LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgMzgsIDcsIDQsIDEsIDI0NSwgNjcsIDM4LCA3LCA0LCAxLCAKKyAgICAyNDMsIDIwOSwgMzgsIDcsIDEsIDQsIDYsIDI0MywgMjA5LCAzOCwgNywgNCwgMSwgMjM1LCAyOSwgMzgsIDcsIDQsIDEsIAorICAgIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE1NiwgMzgsIDcsIDEsIDQsIDYsIDE5NCwgMzgsIDcsIDQsIDEsIDIzMCwgMzAsIDM4LCAKKyAgICA3LCAxLCA0LCA2LCAyMzAsIDMwLCAzOCwgNywgMSwgNCwgNiwgMTUzLCAzOCwgNywgNCwgMSwgMjIzLCAyMjcsIDIyMiwgCisgICAgMTg4LCAzOCwgNywgNCwgMSwgMjIyLCA5MywgMzgsIDcsIDQsIDEsIDIwMCwgMjIyLCA5MywgMzgsIDcsIDQsIDEsIDIxMCwgCisgICAgMTU5LCAzOCwgNTIsIDIzNSwgMjAwLCAyNTEsIDE1NSwgNTEsIDM4LCAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCA1MSwgMzgsIAorICAgIDQzLCAyNTQsIDIsIDQ4LCAzOCwgNDQsIDI1NCwgMiwgMjIsIDEyNCwgMjU0LCAyLCA1MSwgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyMjIsIDIzNywgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDUxLCA3LCA2LCAxLCA1NywgMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCA1NywgMiwgNTksIDQ4LCA3LCA2LCAxLCA1NywgMiwgNTksIDUxLCA3LCA0LCAxLCA1NywgMiwgNTksIDUxLCA3LCAKKyAgICA2LCAxLCA1NywgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCA1NywgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyNTEsIAorICAgIDc1LCAyLCAyNTAsIDE5MiwgMjIsIDE0MiwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTIsIDIyLCAxNDIsIDcsIDYsIAorICAgIDEsIDI0OSwgNjksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDksIDY5LCAyLCAKKyAgICA1OSwgNTEsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjMyLCAyMjAsIDUxLCAKKyAgICA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMTkxLCA3LCA0LCAKKyAgICAxLCAyNDksIDY5LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDI0OSwgCisgICAgNjksIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMTYwLCAKKyAgICAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMTYwLCAyLCAyMTYsIDkwLCAKKyAgICA1MSwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE5MiwgMjIsIDI1MSwgMTU0LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMTkyLCAKKyAgICAyMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0NSwgMTUsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ1LCAxNSwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyMzEsIDIzNywgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDU5LCAKKyAgICA1MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNDgsIDksIDcsIDQsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIAorICAgIDI1MCwgMTkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNTEsIDE1NSwgNTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDI1MSwgCisgICAgMTU1LCA1MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjE2LCAKKyAgICA5MCwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgCisgICAgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNiwgMSwgMjM1LCAzMCwgMiwgMTQyLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAxNDIsIDcsIAorICAgIDYsIDEsIDIzNSwgMzAsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzUsIDMwLCAKKyAgICAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDU5LCAyNTIsIDUxLCAKKyAgICAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgCisgICAgMjMyLCA1NSwgMiwgMTQyLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxNDIsIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDU5LCA0OCwgCisgICAgNywgNCwgMSwgMjMyLCA1NSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMzIsIDU1LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMiwgCisgICAgNTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIAorICAgIDMxLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjMwLCAzMSwgCisgICAgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDIxNiwgCisgICAgOTAsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAKKyAgICAyMiwgMjQ4LCA5LCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAyNDgsIDksIDcsIDYsIDEsIDE0NCwgMiwgMjMxLCAKKyAgICAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIAorICAgIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA2LCAxLCAyMjYsIAorICAgIDExMCwgMiwgMTQyLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMTQyLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCAyMjYsIDExMCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjMsIAorICAgIDIyNywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgNTksIAorICAgIDUxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgNTksIDI1MiwgNTEsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMjIzLCAyMjcsIAorICAgIDIsIDU5LCAyNTIsIDUxLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCAKKyAgICA5NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDU5LCA1MSwgCisgICAgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjU1LCAxMiwgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjU1LCAxMiwgCisgICAgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDMsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTQsIAorICAgIDIsIDI1MCwgMjQzLCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgMjIyLCA5NCwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDIxNywgMTU0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxNywgCisgICAgMTU0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAKKyAgICAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIAorICAgIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDUxLCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDUxLCA3LCA2LCAxLCAxMDQsIAorICAgIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgOTAsIAorICAgIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA5MCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgCisgICAgMjIsIDI0OCwgOSwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDI0OCwgOSwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDE4NCwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxMiwgOTksIDIsIAorICAgIDI0MiwgMTQzLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNiwgMSwgCisgICAgMjEyLCA5OSwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDgsIDksIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCAKKyAgICA0OCwgNywgNCwgMSwgMjEyLCA5OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAorICAgIDIxMiwgOTksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxNzksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxNzksIDIsIAorICAgIDU5LCA0OCwgNywgNiwgMSwgMjExLCAxNzksIDIsIDI0OCwgOSwgNywgNCwgMSwgMjExLCAxNzksIDIsIDI0OCwgOSwgNywgNiwgCisgICAgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAxNjAsIAorICAgIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCAKKyAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAKKyAgICAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIAorICAgIDIxNywgMTU0LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMiwgOTksIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMjExLCAKKyAgICAxMTgsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMTE2LCAyLCA0NCwgMTYzLCAyMjIsIDIzNiwgNywgNCwgMSwgMjAwLCAKKyAgICAyMjIsIDk0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIwMCwgMjIyLCA5NCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjAwLCAKKyAgICAyMjIsIDk0LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAyMjAsIDc4LCAyMjIsIDkzLCA3LCA0LCAxLCAyNDgsIDYyLCA3LCA2LCAKKyAgICAxLCAxMTYsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDExNiwgMiwgMjQxLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDExNiwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgCisgICAgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAKKyAgICAyMiwgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAKKyAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyNTEsIDE1NSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMjQxLCA1OSwgNDgsIDcsIAorICAgIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxODQsIDcsIAorICAgIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCA1OSwgCiAgICAgNTEsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTYwLCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTYwLCAyLCAxODIsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgCi0gICAgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAKLSAgICAzMSwgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgCi0gICAgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0MSwgNTIsIDQ4LCA3LCAKLSAgICA0LCAxLCAyNDAsIDE1NCwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAotICAgIDI0MCwgMTU0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgCi0gICAgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgCi0gICAgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCA1OSwgCi0gICAgNTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgCi0gICAgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNCwgCi0gICAgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAotICAgIDEwNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgNTIsIAotICAgIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxMDQsIAotICAgIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDQsIAotICAgIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDEzNiwgNywgNCwgCi0gICAgMSwgMjExLCAxMTgsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTEsIAotICAgIDExOCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAKLSAgICAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDE4MiwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDE4MiwgNywgNiwgCi0gICAgMSwgMjMwLCAyMjMsIDIzMiwgMTg1LCA3LCA0LCAxLCAyMzAsIDIyMywgMjMyLCAxODUsIDcsIDYsIDEsIDIzMCwgMjIzLCAKLSAgICAyMTQsIDEwNSwgNywgNCwgMSwgMjMwLCAyMjMsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjMsIDcsIAotICAgIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzIsIDEyMywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCAKLSAgICA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIAotICAgIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgCi0gICAgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTUzLCAyNiwgNCwgCi0gICAgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIAotICAgIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU0LCAyNiwgCi0gICAgNiwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxMywgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgCi0gICAgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIAotICAgIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgCi0gICAgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIAotICAgIDE1NCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIAotICAgIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAKLSAgICAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAKLSAgICAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIAotICAgIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAKLSAgICAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgCi0gICAgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMjUsIDE3NSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDAsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIAotICAgIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCAKLSAgICA0LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIAotICAgIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjI2LCAyMDAsIAotICAgIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIAotICAgIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKLSAgICAyMTQsIDE1OCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIAotICAgIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1MywgMjYsIDYsIAotICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgCi0gICAgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyMjQsIDE1NCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAKLSAgICAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAKLSAgICAxMDEsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIAotICAgIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyMjYsIDExMCwgMjYsIAotICAgIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgCi0gICAgMjI2LCAyMDIsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNTQsIAotICAgIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIAotICAgIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAKLSAgICAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIAotICAgIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAKLSAgICAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIAotICAgIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAKLSAgICAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIAotICAgIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAKLSAgICAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIAotICAgIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgCi0gICAgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAotICAgIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAKLSAgICAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgCi0gICAgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgCi0gICAgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIAotICAgIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIAotICAgIDI1NCwgMTQ0LCAyLCAyMzEsIDIzMiwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCAKLSAgICA0LCAxLCAyNTQsIDE0NCwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI2LCAxMTEsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjUsIDE3NiwgCi0gICAgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIAotICAgIDIzMSwgMjMyLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNjcsIDI2LCAyMzQsIDIsIDI2LCAyMjQsIDE2NywgMjYsIDIyNCwgCi0gICAgMTU0LCAyNiwgMjI1LCAxNzUsIDI2LCAyNDcsIDI1MiwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAKLSAgICAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNDUsIAotICAgIDY0LCAyLCAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKLSAgICAyNDUsIDEwMSwgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE2NywgMjYsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgCi0gICAgMjYsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAKLSAgICAxODYsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIzMSwgMjMyLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIAotICAgIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIyNiwgMTEwLCAyNiwgCi0gICAgNCwgMSwgMjM1LCAxODYsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUyLCAyMiwgMjI1LCAKLSAgICAxNzUsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjMxLCAyMzIsIAotICAgIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjYsIDExMCwgMjYsIDI0OCwgCi0gICAgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIzMSwgMjMyLCAyNiwgNCwgCi0gICAgMSwgMjE0LCAxNTgsIDIsIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgCi0gICAgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjIzLCAzOCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMjMsIDM4LCAyLCAyNDgsIAotICAgIDE1MywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgCi0gICAgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIAotICAgIDIzMSwgMjMyLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyMjMsIDM4LCAyLCAyNDgsIDE1MywgMjYsIDI0NywgMjUyLCAyMiwgMjE0LCAxMywgMjYsIDI0NywgCi0gICAgMjUyLCAyMiwgMjI2LCAxMTAsIDI2LCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjYsIDExMSwgCi0gICAgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTY3LCAyNiwgMjI2LCAxMTAsIDI2LCAyNDgsIDE1MywgCi0gICAgMjQ1LCAxNTEsIDIyNCwgMjcsIDI0NSwgMTYwLCAyMjQsIDI3LCAyNDUsIDE1MSwgMjE5LCAxOCwgMjQ1LCAxNjAsIDIxOSwgCi0gICAgMTgsIDIxNiwgMTQxLCAyMTksIDE4LCAyNDQsIDksIDIxOSwgMTgsIDIxOSwgMTIzLCAyMTksIDE4LCAyNDQsIDExMiwgMjE5LCAKLSAgICAxOCwgMjI0LCAxNDEsIDIxOSwgMTgsIDIxNiwgMTcwLCAyMTksIDE4LCAyNDIsIDM1LCAyMTksIDE4LCAyMTAsIDg3LCAyMTEsIAotICAgIDI0NSwgMjE5LCAxOCwgMjEwLCA4NywgMjExLCAyNDUsIDIyOCwgNjcsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMzUsIDYzLCAKLSAgICAyMzMsIDM4LCA3OCwgMjIyLCAyNDMsIDc4LCAyNDAsIDE2OCwgMjI4LCA2OCwgMjQwLCAxNjgsIDI0NCwgMTEyLCAyNDgsIAotICAgIDE1NiwgMjQ1LCAxNTEsIDI0OCwgMTU2LCAyNDUsIDE2MCwgMjQ4LCAxNTYsIDIwMywgMTMwLCA1MiwgNjcsIDIzMiwgMjEzLCAKLSAgICA1MiwgMTIxLCAyMzIsIDIxMywgNDMsIDIxOSwgMTU1LCAyMjMsIDI1NCwgNzgsIDQ0LCAyMTksIDE1NSwgMjIzLCAyNTQsIAotICAgIDc4LCAyMTksIDE1NSwgMjMyLCAxMDksIDIyMywgMjU0LCA3OCwgMjE5LCAxNTUsIDI0MSwgMTYzLCAyMjMsIDI1NCwgNzgsIAotICAgIDQzLCA1MiwgMjIzLCAyNTQsIDc4LCA0NCwgNTIsIDIyMywgMjU0LCA3OCwgNTIsIDIzMiwgMTA5LCAyMjMsIDI1NCwgNzgsIAotICAgIDUyLCAyNDEsIDE2MywgMjIzLCAyNTQsIDc4LCAyNDgsIDIwNSwgNTIsIDI0OCwgMjA1LCAyNTEsIDExMywgMjE1LCAyMjIsIAotICAgIDI1MSwgMTEzLCAxMjMsIDU5LCAyMzMsIDU2LCAxMTMsIDU5LCAyMzMsIDU2LCAyMDMsIDI0NSwgMTYzLCAyNDAsIDE2NiwgCi0gICAgMjI1LCAxMCwgMjMyLCAyMTQsIDIyMCwgMTM3LCAyMjYsIDE1LCAyMjAsIDEzNywgMjMzLCAzOCwgMjQ1LCAxNTgsIDIyMiwgCi0gICAgMjQzLCAyNDUsIDE1OCwgMjI0LCAyNDYsIDI0NywgMTk2LCAyNDQsIDE5LCAyMzMsIDM4LCAyMjYsIDExNywgMjIyLCAyNDMsIAotICAgIDIyNiwgMTE3LCAyMjksIDE5NCwgMjI4LCA3MywgMjE5LCAxOCwgMjI1LCAxODMsIDIzMCwgMTkzLCA1MCwgMjI1LCAxODMsIAotICAgIDIxNiwgMjQ4LCAyMTYsIDE0OCwgNTAsIDIyNCwgMTkwLCA1MiwgMjI0LCAxOTAsIDIxNSwgMjExLCAyMjQsIDE5MCwgMjIzLCAKLSAgICA0OSwgMjI0LCAxOTAsIDIyMywgNDksIDUyLCAyMjQsIDE5MCwgMjIzLCA0OSwgMjE1LCAyMTEsIDIyNCwgMTkwLCAyNTAsIAotICAgIDIzOCwgMjE5LCAxNTUsIDIzMywgNDIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgNzgsIDIxOSwgMTU1LCAyMjIsIDI0NywgMjU0LCAKLSAgICAxMTAsIDIyMywgMjU0LCA3OCwgMjIzLCAxMDcsIDc4LCA1MiwgMjQ1LCAzMSwgNzgsIDIzNSwgMjAxLCAyMjYsIDExOSwgCi0gICAgMjE0LCAxODAsIDEzNSwgMjE2LCAxMTEsIDI1MCwgMjM5LCAyMzUsIDIxNiwgMjI1LCAxMCwgMjUzLCAyMTQsIDI0MCwgMTY5LCAKLSAgICAyNTEsIDExMywgMjQ0LCAyLCAyMTksIDk1LCA0MywgNDIsIDI1MSwgMTU4LCAyLCAyMjQsIDcsIDQ0LCA0MiwgMjUxLCAxNTgsIAotICAgIDIsIDIyNCwgNywgNTIsIDIyNCwgMTMsIDc4LCAyMjQsIDEzLCAyNDUsIDMxLCA3OCwgMjQ1LCAzMSwgMjI0LCAxMywgNzgsIAotICAgIDIxNiwgNzAsIDUsIDI0NSwgNjUsIDIyMywgNDksIDIyNSwgNjgsIDUwLCA4NSwgMTQwLCAyNTEsIDExMywgODUsIDk3LCAKLSAgICAyNTEsIDExMywgMTIxLCAyNTMsIDIxNiwgMjIzLCA0OSwgMjIwLCAxNTAsIDI1MCwgMSwgMjE0LCAxNjMsIDExMywgMjUzLCAKLSAgICAyMTUsIDI1NCwgMTU4LCAyMTMsIDE4OCwgMjQ5LCAyMTcsIDIzMCwgMTgyLCA1MCwgMjE3LCAyMzQsIDI0OCwgMTU2LCAyMzUsIAotICAgIDE5MywgMjE0LCAxODAsIDI0NCwgNTIsIDIyNCwgMTQxLCA3OCwgMTM0LCA1OSwgMjI0LCAxNDAsIDIyNCwgMjQsIDIyNCwgCi0gICAgMTkwLCAyNDQsIDExLCA1OSwgMjI0LCAxNDAsIDI0NCwgODEsIDU5LCAyMjQsIDE0MCwgMTEzLCA1OSwgMjI0LCAxNDAsIAotICAgIDI0NCwgMTEsIDU5LCA3OCwgMjQ2LCAxMTgsIDI0OSwgMTMwLCAyMTUsIDIyMSwgNjcsIDI0NCwgMTEsIDI0NywgMTE4LCAKLSAgICAyMzEsIDgyLCAxMSwgMjE5LCAxOCwgMjExLCAyMDksIDIzNSwgNjMsIDI0MywgMjI3LCAyNTQsIDUyLCAyMzUsIDE5MSwgCi0gICAgMjE2LCA4NSwgMjM1LCAxOTEsIDIyMCwgMTM3LCAyMzUsIDE5MSwgMjI1LCAyMiwgMjM1LCAyMjgsIDIxNywgMTgyLCAyMTcsIAotICAgIDI1MSwgMjU1LCA1LCAyMTcsIDE4MiwgMjE3LCAyNTEsIDIzNSwgMjI4LCAxMCwgMjQ0LCAyMCwgMjIwLCA4MCwgMjU1LCA1LCAKLSAgICAxMCwgMjQ0LCAyMCwgMjIwLCA4MCwgMjI5LCAxODksIDIxLCAyMjAsIDgxLCAyMjgsIDY5LCAyMSwgMjIwLCA4MSwgMjE4LCAKLSAgICAyMywgMjEwLCA4NiwgMjE4LCAyMywgNywgNCwgMSwgNzMsIDIxOCwgMjMsIDE2MSwgMjE4LCAyMywgMTg5LCAyMTgsIDIzLCAKLSAgICAxOTQsIDIxOCwgMjMsIDE5OCwgMjE4LCAyMywgMTk1LCAyMTgsIDIzLCAyMDAsIDIxOCwgMjMsIDk2LCA1MCwgMjE4LCAyMywgCi0gICAgMjMwLCAxODEsIDIxOCwgMjMsIDI0NSwgOTgsIDUwLCAyMTgsIDIzLCA0MywgMjI2LCAzLCAyMTgsIDIzLCA0NCwgMjI2LCAzLCAKLSAgICAyMTgsIDIzLCA3LCA0LCAxLCAyMzAsIDI1LCAyMTgsIDY1LCAyMTAsIDg2LCAyMTgsIDY1LCAxMTAsIDIxOCwgNjUsIDEwNSwgCi0gICAgMjE4LCA2NSwgMTU4LCAyMTgsIDY1LCAxNjEsIDIxOCwgNjUsIDE4OSwgMjE4LCA2NSwgMTk0LCAyMTgsIDY1LCAxOTgsIAotICAgIDIxOCwgNjUsIDE5NSwgMjE4LCA2NSwgMjAwLCAyMTgsIDY1LCA5NiwgNTAsIDIxOCwgNjUsIDIzMCwgMTgxLCAyMTgsIDY1LCAKLSAgICAyNDUsIDk4LCA1MCwgMjE4LCA2NSwgNDMsIDIyNiwgMywgMjE4LCA2NSwgNDQsIDIyNiwgMywgNywgMjE4LCA2NSwgNCwgMSwgCi0gICAgNjEsIDcsIDIxOCwgNjUsIDQsIDEsIDc1LCA3LCAyMTgsIDY1LCA0LCAxLCA3NiwgNywgMjE4LCA2NSwgNCwgMSwgMjExLCAKLSAgICAxNzgsIDcsIDIxOCwgNjUsIDQsIDEsIDIyMSwgMTk1LCA3LCAyMTgsIDY1LCA0LCAxLCAyNDIsIDYwLCA3LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMzUsIDIzLCA3LCAyMTgsIDY1LCA0LCAxLCAxNTYsIDcsIDIxOCwgNjUsIDQsIDEsIDE5MywgNywgMjE4LCA2NSwgCi0gICAgNCwgMSwgMjMwLCAyNSwgNywgMjE4LCA2NSwgNCwgMSwgMjI2LCAxMDUsIDcsIDIxOCwgNjUsIDQsIDEsIDIyMiwgOTEsIDcsIAotICAgIDIxOCwgNjUsIDQsIDEsIDIxNywgMTUyLCAyNDUsIDQ2LCA1MCwgMjQ5LCAyMjcsIDUwLCAyNDksIDExNywgNTAsIDI0MywgCi0gICAgMjUxLCAyNDMsIDI1NCwgNTAsIDIzMiwgMTk4LCA1MCwgMjMwLCAxOTQsIDUwLCAyMjksIDIxMCwgNTAsIDIyNSwgMTYyLCAKLSAgICA1MCwgMjIyLCAxMTgsIDUwLCAyMTEsIDIxNywgNTAsIDE2NiwgMjIwLCA0OSwgNTAsIDI0NywgMTI3LCA1MCwgMjQ1LCA0NywgCi0gICAgNTAsIDIzNCwgNzYsIDUwLCAyMTUsIDExMiwgNTAsIDI0NiwgMTAxLCA1MCwgMjQzLCA0MCwgMjI1LCAxOTMsIDUwLCAyMjUsIAotICAgIDE2MCwgNTAsIDI0MiwgMTA5LCA1MCwgMjUzLCAxODIsIDUwLCAyNDAsIDIyOCwgNTAsIDI1MCwgMTg1LCA1MCwgMjMyLCAKLSAgICAxOTEsIDIxNiwgMywgNTAsIDIxOSwgMCwgNTAsIDIxNiwgMjQ1LCA1MCwgMjM1LCAyNDEsIDIyMiwgMTE4LCA1MCwgMzgsIAotICAgIDQzLCAyNDEsIDI1NSwgNDgsIDM4LCA0NCwgMjQxLCAyNTUsIDQ4LCAzOCwgMTk5LCA2NywgMjMyLCAyMTQsIDIyNiwgMTIwLCAKLSAgICAzOCwgMjE5LCAyNTEsIDY3LCAyMzIsIDIxNCwgMjI2LCAxMjAsIDM4LCAyNTQsIDg4LCA4MCwgNDgsIDM4LCAyNTAsIDIsIAotICAgIDgwLCA0OCwgMzgsIDQzLCA4MCwgNDgsIDM4LCA0NCwgODAsIDQ4LCAzOCwgMjIyLCAyMzQsIDIyNiwgMTIwLCAzOCwgMjUwLCAKLSAgICAyLCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAyNTQsIDg4LCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAxMzQsIDE3MCwgNDgsIAotICAgIDM4LCAyNDQsIDExLCAxNzAsIDQ4LCAzOCwgMjQ1LCAxNDYsIDI1MCwgMzUsIDM4LCAyNDUsIDE0NiwgMjE4LCAyMzQsIDM4LCAKLSAgICAyNDUsIDE0NiwgMjQ3LCAyNDgsIDM4LCAyNDUsIDE0NiwgMjUwLCAzNiwgMjUyLCAxODAsIDM4LCA0MywgNDQsIDgwLCA0OCwgCi0gICAgMzgsIDI0NSwgMTQ2LCAyMjEsIDE4OCwgMzgsIDI0NSwgMTQ2LCAyMzQsIDEzNSwgMzgsIDI0NSwgMTQ2LCAyMTQsIDE1NSwgCi0gICAgMjI1LCA3LCAyMTUsIDIyNSwgMzgsIDIyMywgNTAsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgNTIsIDY3LCAyMTgsIDEwMywgCi0gICAgMjI2LCAxMjAsIDM4LCAyNTQsIDk4LCA4NywgMzgsIDIxNSwgMjExLCAyMTQsIDE4MiwgMzgsIDIxMSwgMjQ3LCAyNTEsIAotICAgIDE0MCwgNDgsIDM4LCAxNDAsIDgwLCAyMjYsIDEyMCwgMzgsIDE5OSwgNTIsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgOTcsIAotICAgIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDMsIDM4LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAKLSAgICAxMDMsIDM4LCA0MywgODAsIDUxLCAzOCwgNDQsIDgwLCA1MSwgMzgsIDI1MywgMjE3LCA0OCwgMjU1LCAxMSwgMjI2LCAyMzEsIAotICAgIDI1NCwgMjUxLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjE4LCA3NCwgMTM5LCA2LCAyNTEsIDY2LCAyNDgsIDcxLCAyNTAsIDE3OCwgCi0gICAgMjUwLCAxNzUsIDIzMiwgMjE0LCA4NywgMjUwLCAyNDAsIDIyNiwgMjMxLCAyNTEsIDI2LCAyMTQsIDE4OSwgMjQ1LCA0OCwgCi0gICAgMjQ5LCAxOTEsIDIyMSwgMTg1LCAyNDgsIDcxLCAyNDQsIDE3OSwgMTE5LCA0LCAyNDMsIDIwMiwgMTE5LCA2LCAyNDIsIDYwLCAKLSAgICAyNTEsIDIxOSwgNiwgMjQyLCA2MCwgMTM5LCA2LCAyNDIsIDYwLCAyMjUsIDM3LCAyNDksIDE5MSwgMjI1LCAzNywgMjQ5LCAKLSAgICAxOTIsIDExNywgMTEzLCAyMjUsIDEwOCwgMTE5LCA2LCA3MywgMjUxLCAyMTksIDYsIDczLCAxMTksIDYsIDE1NiwgMTE5LCAKLSAgICA0LCAxNTYsIDIzMywgMTQ5LCA1NywgMjUyLCAxNDEsIDg3LCAxMzksIDYsIDIzMCwgMjUsIDIyNywgMTk2LCA1MCwgMjE5LCAKLSAgICAzMSwgMjIzLCAxMTksIDI0OSwgMTYyLCAxMTksIDYsIDIyNiwgMTA1LCAxMzksIDYsIDIyNiwgMTA1LCAxMzksIDYsIDIyNCwgCi0gICAgOTYsIDExOSwgNiwgMTUzLCAyNTEsIDIxOSwgNiwgMTUzLCAxMzksIDYsIDE1MywgMjI0LCAxOTYsIDIxNywgNzEsIDIyMywgCi0gICAgNjIsIDIyMCwgMTMyLCA3OCwgMjE3LCAxLCA1MCwgMjE1LCAyNTMsIDE2NCwgNTAsIDIxMywgMjQwLCAxMzksIDYsIDIxMCwgCi0gICAgMTU5LCAyMjYsIDEzMywgNTAsIDIyNiwgMjIxLCA1MCwgMjM1LCAxOTMsIDIyNiwgMjIxLCA1MCwgMjUxLCAyMTksIDYsIAotICAgIDIxMCwgMTU5LCAyMTUsIDk0LCAyNiwgNCwgMSwgMjM1LCAxODUsIDIzNCwgMTczLCA1MCwgMjU0LCAxMDcsIDUwLCAxMTksIAotICAgIDYsIDI1MywgMTU4LCAyNTEsIDIxOSwgNiwgMjUxLCA2NiwgMjQ1LCA2OCwgODcsIDExOSwgNCwgNzUsIDExOSwgNiwgNzUsIAotICAgIDExOSwgNiwgMjQ1LCA2LCAyMTUsIDk0LCA2LCAyNDUsIDYsIDExOSwgNiwgMTkzLCAxMTksIDQsIDc2LCAxMTIsIDg3LCAKLSAgICAyNTIsIDI5LCA4NywgMjQyLCAyMDIsIDg3LCAyNDgsIDE5MCwgODcsIDIzNSwgMjMyLCAyMTksIDI5LCAyMjIsIDE4NywgNiwgCi0gICAgMjI0LCA5NiwgMjQ0LCAxODIsIDUwLCAxMzksIDQsIDIyNSwgMTA4LCAxMzksIDQsIDI0MywgMTA3LCAxMzksIDYsIDI0MywgCi0gICAgMTA3LCAxMzksIDYsIDIyNSwgMTA4LCAxMzksIDIzMCwgMjQsIDIxOCwgNDAsIDIxNSwgOTQsIDM1LCA2LCAyNDMsIDIwMiwgCi0gICAgMjE1LCA5NCwgMzUsIDYsIDE1NiwgMjIzLCA0OSwgMzUsIDYsIDE1NiwgMjE1LCA5NCwgMzUsIDYsIDIxMSwgMTE3LCAxMzksIAotICAgIDMyLCA2LCAyNDksIDYwLCAxMzksIDMyLCA0LCAyNDksIDYwLCAxMzksIDMyLCA0LCA3NSwgMTM5LCAzMiwgNCwgNzMsIDEzOSwgCi0gICAgMzIsIDQsIDIzNSwgMTQ0LCAyMjQsIDE3MCwgMjMyLCAyMTMsIDIxNSwgOTQsIDI1NCwgMTI2LCAyMjUsIDE4MywgNTAsIAotICAgIDI1NCwgMTgwLCAyMTUsIDk0LCA0LCAyNDUsIDYsIDE2LCAzMSwgMjIxLCAyNTIsIDIxOSwgMjksIDIxMiwgMTE0LCAyNDQsIAotICAgIDIsIDEyMywgMjIwLCAxMTgsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjI4LCAxOTQsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgCi0gICAgMjE2LCAyNDEsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjE2LCAxNjgsIDIxMiwgMTE0LCAyNDQsIDIsIDExMywgMjE2LCAKLSAgICAxNjYsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjQ0LCAxMTcsIDIxMiwgMTE0LCAyNDQsIDIsIDExMywgMjQ0LCAxMTYsIAotICAgIDIxMiwgMTE0LCAyNDQsIDIsIDEzNCwgMjQ0LCAxMTYsIDIxMiwgMTE0LCAyNDQsIDIsIDI0NCwgMTEsIDI0NCwgMTE2LCAKLSAgICAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDIxOSwgMTE1LCAyMTIsIDExNCwgMjQ0LCAyLCAyNDQsIDgxLCAyMTksIDExMywgCi0gICAgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMjEyLCAxMTQsIDI0NCwgMiwgMTM0LCAyNDUsIDE4NiwgMjEyLCAKLSAgICAxMTQsIDI0NCwgMiwgMjQ0LCA4MSwgMjQ1LCAxODYsIDIxMiwgMTE0LCAyNDQsIDIsIDIyMCwgMTIyLCAyNDUsIDE4NiwgCi0gICAgMjQ0LCAyLCAyMjcsIDE5NywgMTEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDExMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMDUsIAotICAgIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTU4LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE2MSwgMjIyLCAxOTgsIDIyNywgMTk4LCAKLSAgICAxODksIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5OCwgMjIyLCAxOTgsIDIyNywgCi0gICAgMTk4LCAxOTUsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjAwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNiwgMjQ3LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDI0NSwgMTY3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNSwgNzYsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMjQ0LCAxMTQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAKLSAgICAyNDAsIDIxMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ3LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDExMCwgCi0gICAgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMDUsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTU4LCA0LCAyMjIsIDE5OCwgMjI3LCAKLSAgICAxOTgsIDE2MSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxODksIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk0LCA0LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDE5OCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTUsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMjAwLCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNiwgMjQ3LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NSwgMTY3LCA0LCAKLSAgICAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxNSwgNzYsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTQsIDQsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAyNDAsIDIxMCwgCi0gICAgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjE2LCAxNDgsIAotICAgIDI1MSwgNjcsIDI0OSwgNjAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCA4MSwgMjE2LCAxNDcsIDIyMiwgMTk4LCAyMjcsIAotICAgIDE5OCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIyMywgNDksIDEyMywgMjQwLCAyMTAsIDcsIAotICAgIDQsIDEsIDIyMywgNDksIDI1MSwgNjYsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE5LCAxMjUsIDIzMywgNzgsIDE3LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDI0NCwgMTE1LCAyNDUsIDIyNiwgMTcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTUsIDIxNiwgCi0gICAgMTQ3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjQwLCAyMTEsIDIxNiwgMTQ3LCAyMTIsIDExNCwgMjQ0LCAyLCAyMTAsIAotICAgIDg3LCAyMTYsIDE2NiwgMTQwLCA3NCwgMjE0LCAxNTMsIDc0LCA5NywgNzQsIDI0NiwgMTA0LCA3NCwgNDMsIDQ0LCA3NCwgCi0gICAgMTIwLCAxMjQsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgMTQwLCA4MCwgMiwgOTEsIDk3LCA4MCwgMiwgOTEsIDE0MCwgMjEyLCAKLSAgICAzNiwgNzQsIDk3LCAyMTIsIDM2LCA3NCwgMTQwLCAxMTMsIDI0MSwgMjM0LCA3NCwgMjE0LCAxNTMsIDExMywgMjQxLCAyMzQsIAotICAgIDc0LCA5NywgMTEzLCAyNDEsIDIzNCwgNzQsIDI0NiwgMTA0LCAxMTMsIDI0MSwgMjM0LCA3NCwgMTQwLCA4MCwgMiwgMjE3LCAKLSAgICA3NywgOTcsIDgwLCAyLCAyMTcsIDc3LCAxNDAsIDgwLCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgODAsIDI0MywgMjQzLCAKLSAgICAxMzAsIDk3LCA4MCwgMjQzLCAyNDMsIDEzMCwgMjQ2LCAxMDQsIDgwLCAyNDMsIDI0MywgMTMwLCAxMjAsIDEyNCwgODAsIDIsIAotICAgIDI1MiwgMTI3LCAxNDAsIDgwLCAyLCAxMDMsIDk3LCA4MCwgMiwgMTAzLCAxNDAsIDgwLCAyLCAyMzIsIDEyMywgOTcsIDgwLCAKLSAgICAyLCAyMzIsIDEyMywgNDMsIDQ0LCAyMTIsIDM2LCA3NCwgNDMsIDQ0LCA4MCwgMiwgOTEsIDI0NiwgMTA0LCAyMTAsIDM1LCAKLSAgICA3NCwgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc3LCAyMzMsIDM3LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzcsIDIyMiwgCi0gICAgMjQxLCAyNDYsIDEwNCwgODAsIDIsIDIxNiwgNzcsIDIzMywgMzcsIDI0NiwgMTA0LCA4MCwgMiwgMjE2LCA3NywgMjIyLCAKLSAgICAyNDEsIDk3LCA4MCwgMiwgMjQ5LCAxNjEsIDI0NiwgMTAzLCAyNDYsIDEwNCwgODAsIDIsIDI0OSwgMTYxLCAyMzMsIDM3LCAKLSAgICAyNTQsIDg4LCAyMTYsIDE0LCAyMjAsIDE1MywgNzQsIDI1MCwgMiwgMjE2LCAxNCwgMjIwLCAxNTMsIDc0LCAyMjgsIDU2LCAKLSAgICAyMTIsIDksIDgwLCAyMTYsIDQyLCAxOTksIDEzMCwgMTQwLCA4MCwgMjE2LCA0MiwgMjUyLCAxNDEsIDExNywgOTcsIDgwLCAKLSAgICAyMTYsIDQyLCAxMzAsIDI1NCwgODgsIDIwNCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjA0LCAyNTAsIDM2LCA3NCwgMTQwLCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIxNCwgMTUyLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDMsIAotICAgIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjQxLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgCi0gICAgMTM5LCAyMzMsIDM3LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMTQsIDE1MiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMjQ2LCAxMDMsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjQxLCAyNDYsIDEwNCwgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCAyMzMsIDM3LCA5NywgODAsIDExNywgMTQwLCA3NCwgMjE0LCAxNTMsIDgwLCAxNDAsIDY0LCAKLSAgICAyNDYsIDEwNCwgNzQsIDE0MCwgODAsIDExNywgOTcsIDc0LCAxNDAsIDIyNiwgNzAsIDI1MywgMjQ3LCAyMTQsIDE1MywgCi0gICAgMjI2LCA3MCwgMjUzLCAyNDcsIDk3LCAyMjYsIDcwLCAyNTMsIDI0NywgMjQ2LCAxMDQsIDIyNiwgNzAsIDI1MywgMjQ3LCAKLSAgICAxNDAsIDI0MSwgMjU1LCAxMTcsIDk3LCAyNDEsIDI1NCwgOTcsIDI0MSwgMjU1LCAxMTcsIDE0MCwgMjQxLCAyNTQsIDE0MCwgCi0gICAgNTIsIDgwLCAyLCA5MSwgNDMsIDQ0LCA1MiwgODAsIDIsIDkxLCA5NywgNTIsIDgwLCAyLCA5MSwgMTQwLCA1MiwgNzQsIAotICAgIDIxNCwgMTUzLCA1MiwgNzQsIDk3LCA1MiwgNzQsIDI0NiwgMTA0LCA1MiwgNzQsIDQzLCA0NCwgNTIsIDc0LCAxMjAsIDEyNCwgCi0gICAgNTIsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDUyLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDUyLCA3NCwgMjE5LCAyOCwgMjQ1LCAKLSAgICAyMjAsIDUyLCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA1MiwgNzQsIDE0MCwgMjE1LCAyMTEsIDc0LCA5NywgMjE1LCAyMTEsIAotICAgIDc0LCAxNDAsIDIxOCwgMjMwLCA3NCwgOTcsIDIxOCwgMjMwLCA3NCwgMjE0LCAxNTMsIDgwLCAyLCA1MiwgOTEsIDI0NiwgCi0gICAgMTA0LCA4MCwgMiwgNTIsIDkxLCAxNDAsIDI0OCwgMTU1LCA3NCwgMjE0LCAxNTMsIDI0OCwgMTU1LCA3NCwgOTcsIDI0OCwgCi0gICAgMTU1LCA3NCwgMjQ2LCAxMDQsIDI0OCwgMTU1LCA3NCwgMTQwLCA4MCwgMjE2LCA0MiwgMTMwLCA5NywgODAsIDIxNiwgNDIsIAotICAgIDEzMCwgMTQwLCA3MSwgNzQsIDIxNCwgMTUzLCA3MSwgNzQsIDk3LCA3MSwgNzQsIDI0NiwgMTA0LCA3MSwgNzQsIDIxNCwgCi0gICAgMTUzLCA3MSwgODAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMTk3LCAyMjUsIDIxNCwgMjE0LCAKLSAgICAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIDIyNSwgMjE1LCAyLCAyMDMsIDEzMCwgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIAotICAgIDIyNSwgMjE1LCAyLCA2NywgMTMwLCAyMTQsIDE1MywgNzEsIDUyLCA3NCwgMjE0LCAxNTMsIDcxLCA1MiwgODAsIDIyNiwgCi0gICAgMTk3LCAyMjUsIDIxNCwgOTcsIDcxLCA4MCwgMjQzLCAyNDMsIDIxMiwgNTYsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIxNiwgCi0gICAgNDIsIDI0OSwgMTYwLCAyMTksIDI4LCAyNDUsIDIyMCwgODAsIDIxNiwgNDIsIDI0OSwgMTYwLCAxMjAsIDEyNCwgNzEsIDc0LCAKLSAgICA0NCwgODAsIDIsIDQsIDI1MCwgMzUsIDI0NiwgMTA0LCA4MCwgMTQwLCA2NCwgMjE0LCAxNTMsIDc0LCAxMzQsIDk3LCAyNTMsIAotICAgIDI0NywgMTQwLCA4MCwgMiwgNjcsIDkxLCA5NywgODAsIDIsIDY3LCA5MSwgNDMsIDQ0LCA4MCwgMiwgNjcsIDkxLCAxNDAsIAotICAgIDgwLCAyLCA1MiwgNjcsIDkxLCA5NywgODAsIDIsIDUyLCA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgCi0gICAgMjI2LCAxNzMsIDc0LCA5NywgMjI2LCAxNzMsIDc0LCA0MywgNDQsIDIyNiwgMTczLCA3NCwgMzEsIDI1NCwgMTU0LCAyNDksIAotICAgIDIxNCwgMjI1LCAyNTMsIDI0NywgMjMzLCAyMTYsIDE4NywgMjQ1LCAyNywgMjE2LCAxODcsIDI0NywgMTM4LCAyMjgsIDUyLCAKLSAgICAyNDUsIDI4LCAyNDUsIDE1MiwgMjIwLCAxMjcsIDIzNSwgMjQ1LCAyMjksIDIyMSwgMjQ1LCAxNzAsIDIyNiwgMjMxLCAyMjgsIAotICAgIDUyLCAyNTQsIDEyNCwgMjQ1LCAxNzAsIDIyNiwgMjMxLCA0LCAyNDUsIDE3MCwgMjI2LCAyMzEsIDI0OSwgMTg2LCAyNTMsIAotICAgIDIzOCwgMjMxLCA2MiwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjMxLCA2MiwgNCwgMjQ5LCAKLSAgICAxODYsIDI1MywgMjM4LCAyMzEsIDYyLCAyNDUsIDE0MywgNjQsIDIyNCwgMTcyLCAyMzAsIDI0LCAyMjQsIDE4MCwgMjMwLCAKLSAgICAyNCwgMjQ5LCAxNjUsIDIzMCwgMjQsIDIxOCwgNDAsIDIzMCwgMTgyLCA1MCwgMjMwLCAxODAsIDUwLCA1OSwgMjI1LCAyMiwgCi0gICAgMjQ3LCAxNjksIDIxOSwgOTUsIDIyMCwgMTI4LCAyMzAsIDE4MSwgMjUzLCAyMTcsIDIyNiwgMTY3LCAyMjIsIDIzNCwgMjI2LCAKLSAgICAxNjcsIDI1MSwgMTE0LCAyMjYsIDE2NywgNDIsIDIyMiwgMTkzLCAyNDksIDEwOSwgMjIyLCAxOTMsIDI0NCwgNCwgMjIyLCAKLSAgICAxOTMsIDIyNCwgMTY4LCAxMTEsIDIzNSwgMjM0LCA0NCwgMjU0LCAxMDksIDI1NCwgMTA5LCAyMzEsIDg4LCAyNTQsIDEwOSwgCi0gICAgMjE4LCAyNTUsIDI1NCwgMTA5LCAyNDcsIDE3MSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0NywgMTc0LCAyMjYsIDgsIDExMSwgCi0gICAgMjI4LCA1MiwgMjI2LCA4LCAxMTEsIDIzMiwgMTQ2LCAyNTQsIDExOCwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMzUsIDE5OCwgCi0gICAgMjE0LCAxNzUsIDIzNSwgMjExLCA1MiwgMjM1LCAyMTEsIDIxNSwgMjExLCAyMzUsIDIxMSwgMjQ5LCAxODIsIDIzNSwgMjExLCAKLSAgICAyMTgsIDEzLCAyMzUsIDIxMSwgMjEzLCAxMjksIDIzNSwgMjExLCAyNTAsIDIsIDIzNSwgMjExLCAyNTAsIDIsIDI0OSwgCi0gICAgMTgyLCAyMzUsIDIxMSwgMjU0LCA4OCwgMjQ5LCAxODIsIDIzNSwgMjExLCAyMTYsIDE4NiwgMjUyLCA2NywgMjIzLCAxMzcsIAotICAgIDIyNCwgMTY5LCA1OSwgMjMwLCAxODEsIDI0NSwgMzMsIDI0MywgNDYsIDIyNCwgMTY5LCAyNDEsIDU3LCAyMTYsIDg5LCAKLSAgICAyMjYsIDE2NywgMjIzLCA0OSwgMTgyLCAyMzUsIDE5MywgMjMzLCA2NSwgMjIyLCA5MSwgMjE5LCAxNTcsIDIxMiwgMzUsIAotICAgIDIxMSwgMjAwLCAyMjQsIDE4MCwgMjI4LCA1MiwgMTgyLCAyMzAsIDE4MiwgMTgyLCAyNTMsIDIxMCwgMTI4LCAxMTEsIDIyOCwgCi0gICAgNTIsIDI1MywgMjEwLCAxMjgsIDExMSwgMjU0LCA0OCwgMTI4LCAxMTEsIDI1NCwgNDgsIDI1MSwgODgsIDIyOCwgNTIsIAotICAgIDI1NSwgNCwgMTI4LCAxMTEsIDIyOSwgMTAwLCAyNTQsIDQ4LCAyMjgsIDU5LCAyNTUsIDQsIDEyOCwgMTExLCAyNTQsIDE0OCwgCi0gICAgMTI4LCAxMTEsIDIyOCwgNTIsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjU0LCAxNDgsIDEyOCwgMTc3LCAxMjgsIDExMSwgMjE1LCAKLSAgICAyMTEsIDE4MiwgMjU0LCAxNTUsIDEyOCwgMTExLCAyNDUsIDk0LCAxMTEsIDI0MywgNDUsIDI0NSwgOTQsIDExMSwgMjQ3LCAKLSAgICAyMzQsIDI1MiwgMjMsIDI1NCwgNTAsIDIxNiwgMTk2LCAyMzIsIDIyMSwgMjQzLCA0NSwgMTI4LCAxMTEsIDI1NCwgNDgsIAotICAgIDEyOCwgMjE2LCA0MiwgMTc3LCAyMTYsIDE5NiwgMjM2LCAxNSwgMjI2LCAyMzEsIDIzNiwgMTUsIDY0LCAxNzcsIDI1NCwgCi0gICAgNDgsIDEyOCwgMTExLCAyNDksIDIyNywgMjQ1LCA5NywgMjQ1LCA5OCwgMjQ5LCAyMjYsIDIyMiwgMjM0LCAyMzYsIDAsIAotICAgIDEyOCwgMTExLCAyMjIsIDIzNCwgMTI4LCAxMTEsIDI0OSwgMTU0LCAxMTEsIDI0NSwgNjcsIDI0NSwgOTYsIDExMSwgMjE4LCAKLSAgICAxNTcsIDI0NSwgOTcsIDI0OCwgNTUsIDEyOCwgMTExLCAxMjgsIDIxNiwgNDIsIDI1MSwgNzgsIDI0OCwgNzIsIDIzMSwgODgsIAotICAgIDI1MSwgNzcsIDIyNCwgMTEsIDEyOCwgMTExLCAyMjgsIDUyLCAxMjgsIDExMSwgMjQwLCAxMDQsIDExMSwgMjI4LCA1MiwgCi0gICAgMjQwLCAxMDQsIDExMSwgMjE4LCAxMDksIDI0NSwgOTQsIDExMSwgMjMzLCAxNSwgMTc3LCAxMjgsIDExMSwgMjQyLCAxMzAsIAotICAgIDE3NywgMTI4LCAxMTEsIDIzMywgMTUsIDExNywgMTI4LCAxMTEsIDI0MiwgMTMwLCAxMTcsIDEyOCwgMTExLCAyMzMsIDE1LCAKLSAgICAyNTEsIDg4LCAyMjgsIDUyLCAxMjgsIDExMSwgMjQyLCAxMzAsIDI1MSwgODgsIDIyOCwgNTIsIDEyOCwgMTExLCAyMzAsIAotICAgIDk3LCAyMzMsIDE0LCAyMzAsIDk3LCAyNDIsIDEyOSwgMjUyLCAyMywgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMjgsIDUyLCAKLSAgICAyMzMsIDE0LCAyMjgsIDUyLCAyNDIsIDEyOSwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDEyOCwgMTExLCAyMjksIAotICAgIDEwMCwgMjQyLCAxMzAsIDIyOCwgNTksIDEyOCwgMTExLCAyMzMsIDE1LCAxNzcsIDI0NSwgOTQsIDExMSwgMjQyLCAxMzAsIAotICAgIDE3NywgMjQ1LCA5NCwgMTExLCAyMjksIDEwMCwgMjMzLCAxNSwgMjI4LCA1OSwgMjQ1LCA5NCwgMTExLCAyMjksIDEwMCwgCi0gICAgMjQyLCAxMzAsIDIyOCwgNTksIDI0NSwgOTQsIDExMSwgMjMzLCAxNSwgMTc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDE3NywgCi0gICAgMjMzLCAxNCwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDI0MiwgMTI5LCAyMjksIDEwMCwgMjQyLCAxMzAsIDIyOCwgCi0gICAgNTksIDIzMywgMTQsIDIyNCwgMjAyLCAyMTgsIDU1LCAyMjQsIDIwMywgMTc3LCAxMjgsIDExMSwgMjE4LCA1NiwgMTc3LCAKLSAgICAxMjgsIDExMSwgMjI0LCAyMDMsIDE3NywgMjQ1LCA5NCwgMTExLCAyMTgsIDU2LCAxNzcsIDI0NSwgOTQsIDExMSwgMjQ3LCAKLSAgICAxMzgsIDIyOCwgNTIsIDIyNCwgMjA1LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjE4LCA1NywgMjE4LCA2NCwgMjI2LCAyMzEsIAotICAgIDIxOCwgMjIsIDIyNiwgMjMxLCAyMjgsIDUyLCAxMTUsIDIxOCwgNjQsIDIyNiwgMjMxLCAyMjgsIDUyLCAxMTUsIDIxOCwgCi0gICAgMjIsIDIyNiwgMjMxLCAyMTgsIDY0LCA2NCwgMTc3LCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDE3NywgMTI4LCAxMTEsIAotICAgIDIyOSwgMTAwLCAxMTUsIDIxOCwgNjQsIDY0LCAyMjgsIDU5LCAxMjgsIDExMSwgMjI5LCAxMDAsIDExNSwgMjE4LCAyMiwgCi0gICAgNjQsIDIyOCwgNTksIDEyOCwgMTExLCAyMTgsIDY0LCA2NCwgMiwgMjI4LCA1MiwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCAyLCAKLSAgICAyMjgsIDUyLCAxMjgsIDExMSwgMjMwLCA4MSwgMjMwLCA4MiwgMjMwLCA4MywgMjMwLCA4MiwgMjE0LCAxNzUsIDQyLCAyMzYsIAotICAgIDE1LCAyMjYsIDIzMSwgNDIsIDIyNiwgMTUwLCAyMjYsIDIzMSwgNDIsIDIzNiwgMTUsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgCi0gICAgMjI2LCAxNTAsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgMjUwLCAyNTEsIDQyLCAyNDksIDEwMiwgMzcsIDIyNSwgMjIsIDM3LCAKLSAgICAyMzAsIDE4MSwgMzcsIDIxNiwgODUsIDM3LCAyNDcsIDE2OSwgMjE5LCA5NSwgMzcsIDU5LCAyMjYsIDE2NywgMzcsIDIyMiwgCi0gICAgMjM0LCAyMjYsIDE2NywgMzcsIDI1MywgMjE3LCAyMjYsIDE2NywgMzcsIDI0NSwgOTcsIDM3LCAyNDgsIDE1NiwgOTIsIAotICAgIDIyNSwgMjIsIDkyLCAyMzAsIDE4MSwgOTIsIDIxNiwgODUsIDkyLCA1OSwgMjI2LCAxNjcsIDQ0LCAyMTcsIDg3LCA0MywgCi0gICAgMjE3LCA4NywgMTI0LCAyMTcsIDg3LCAxMjAsIDIxNywgODcsIDI1MywgMjIwLCAyMzAsIDE1NiwgMjE1LCAxOTEsIDI0NCwgCi0gICAgMjUsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQxLCA1MiwgNDQsIDIxNSwgCi0gICAgOTMsIDI0NywgMTM4LCAyMjgsIDUyLCAyMjQsIDE2MywgMjI4LCA1MiwgMjE1LCAxOTEsIDI0NywgMTM4LCAyMjgsIDUyLCAKLSAgICAyNDQsIDI2LCAyMjksIDEwMiwgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQ0LCAyMTUsIDkzLCAyMjQsIDIwMywgMjE0LCAxODQsIAotICAgIDIyMywgOTEsIDIxOCwgNTYsIDIxNCwgMTg0LCAyMjMsIDkxLCAyMjgsIDU3LCAyMTgsIDc3LCAyMjYsIDIzMSwgMjQ5LCAKLSAgICAxODYsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc2LCAyMjgsIDU3LCAyMTgsIDc3LCA2NCwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjQ5LCAxODYsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc3LCAxNzcsIDEyOCwgMTExLCAyMjYsIDE1MCwgMjI2LCAyMzEsIAotICAgIDIzNiwgMTUsIDIyNiwgMjMxLCAyMzAsIDg3LCAyNDEsIDIwMCwgMjQ5LCAxOTYsIDIzMSwgMTM3LCAyMzUsIDIwOCwgMjExLCAKLSAgICAxNDUsIDIyOSwgMjAyLCAyMjgsIDU4LCA0NCwgMjU0LCAxMTAsIDIsIDI1NCwgMjUsIDQ0LCAyMTUsIDIyNSwgMjMwLCAyNCwgCi0gICAgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzAsIDI0LCAyMzIsIDE0NiwgMjI2LCAxNTgsIDIzMCwgMjQsIDIzNSwgMTk4LCAyMzAsIAotICAgIDI0LCAyMTQsIDE3NSwgMjQ3LCAyNDksIDIyNiwgMTY3LCA1OSwgMjI2LCAxNjcsIDIxOCwgMTU3LCAyMjYsIDE2NywgMjQ3LCAKLSAgICAxNjksIDIxNiwgODUsIDI1MSwgMTY0LCA0MywgMjI4LCA1NywgMjQ0LCAxODEsIDIyMCwgMTQ5LCAyMjQsIDE4MCwgNDQsIAotICAgIDIyOCwgNTcsIDI0NCwgMTgxLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQzLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQ0LCAyMjAsIAotICAgIDE0OSwgMjI0LCAxODAsIDIyMywgNDksIDIxNiwgODksIDI0NSwgOTcsIDI0OSwgOTksIDIzMiwgMTQ2LCAyMjYsIDE1OCwgCi0gICAgMjQ5LCA5OSwgMjMyLCAxNDYsIDI1NCwgMTE4LCA1MiwgMjE4LCA2MywgNTIsIDIxOCwgMjEsIDUyLCAyMzUsIDE5OCwgNTIsIAotICAgIDIxNCwgMTc1LCAyMjUsIDQ3LCAxMjgsIDIyLCAyMjYsIDgsIDExMSwgMjMzLCAxNSwgMiwgMjQ3LCAxMjAsIDI0MiwgMTMwLCAKLSAgICAyLCAyNDcsIDEyMCwgMjEzLCAxODcsIDIzMCwgOTcsIDIzMywgMTQsIDIxMywgMTg3LCAyMzAsIDk3LCAyNDIsIDEyOSwgCi0gICAgMjMzLCAxNSwgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgCi0gICAgMTQsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMjksIDEyOCwgMjE2LCAKLSAgICA0MiwgMTc3LCAyMjQsIDIwMiwgMTI4LCAyMTYsIDQyLCAxNzcsIDIxOCwgNTUsIDI0NywgMTM4LCAyMjgsIDUyLCAyMjQsIAotICAgIDIwNiwgMTc3LCAyNDUsIDk5LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjE4LCA1OCwgMTc3LCAyNDUsIDk5LCAyMjgsIDUyLCA0MiwgCi0gICAgMjM2LCAxNSwgNjQsIDE3NywgMTI4LCAxMTEsIDIyOCwgNTIsIDQyLCAyMjYsIDE1MCwgNjQsIDE3NywgMTI4LCAxMTEsIDQyLCAKLSAgICAyMzYsIDE1LCA2NCwgMTc3LCAyMjgsIDUyLCAxMjgsIDExMSwgNDIsIDIyNiwgMTUwLCA2NCwgMTc3LCAyMjgsIDUyLCAxMjgsIAotICAgIDExMSwgMjMzLCAxNSwgMjUxLCA4OCwgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyNDIsIDEzMCwgMjUxLCA4OCwgMjI4LCA1MiwgCi0gICAgMjQ1LCA5NCwgMTExLCAyMjQsIDIwMywgMjUxLCA4OCwgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMTgsIDU2LCAyNTEsIDg4LCAKLSAgICAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDIyOCwgNTIsIDIyOCwgNTcsIDIxOCwgNzcsIDIyNiwgMjMxLCAyNDcsIDEzOCwgCi0gICAgMjI4LCA1MiwgMjQ5LCAxODgsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIDc2LCAyMjgsIDUyLCAyMjgsIDU3LCAyMTgsIDc3LCAKLSAgICA2NCwgMTc3LCAxMjgsIDExMSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCAKLSAgICA3NywgMTc3LCAyNDUsIDk5LCA2NywgMjQ1LCAxNjMsIDIzMCwgMjIyLCAyMDMsIDI0NSwgMTYzLCAxMjAsIDQ0LCAyNDcsIAotICAgIDI1NSwgMjQ1LCAxNjMsIDEyNCwgNDQsIDI0NywgMjU1LCAyNDUsIDE2MywgMjQ1LCAxNzAsIDY0LCAyLCAxOTksIDIwMywgCi0gICAgOTEsIDI0NSwgMTcwLCA2NCwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIDkxLCA0LCAKLSAgICAyNDUsIDE3MCwgNjQsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCA5MSwgMjQ1LCAxNzAsIAotICAgIDY0LCAyLCA1OSwgNDgsIDI0NSwgMTcwLCA2NCwgMiwgMjI2LCAxMjMsIDQsIDI0NSwgMTcwLCA2NCwgMiwgMjI2LCAxMjMsIAotICAgIDI0NSwgMTcwLCA2NCwgMiwgMjE0LCAxODMsIDI0NSwgMTcwLCA2NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTAsIDI0OSwgMTg2LCAKLSAgICAyLCAxOTksIDIwMywgOTEsIDI0OSwgMTg2LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgCi0gICAgOTEsIDQsIDI0OSwgMTg2LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgOTEsIDI0OSwgCi0gICAgMTg2LCAyLCAyMjYsIDEyMywgNCwgMjQ5LCAxODYsIDIsIDIyNiwgMTIzLCAyMTAsIDE2MCwgMTg3LCAyNTIsIDE3MywgMjMxLCAKLSAgICA2MSwgMjQ3LCAyNTAsIDUwLCAyNDUsIDE3MiwgNzQsIDI0MCwgMjM0LCAxMjAsIDI1MywgMjQ5LCAxMjQsIDI1MywgMjQ5LCAKLSAgICAyMjQsIDE3NSwgMjI1LCAxNjUsIDIxMiwgMzIsIDIzMiwgMjEzLCA0MywgMjUwLCAxODEsIDQ0LCAyNTAsIDE4MSwgNDMsIAotICAgIDI0NCwgNTcsIDQ0LCAyNDQsIDU3LCAyNTEsIDE3NSwgNDQsIDI0OSwgMTMyLCAyNTEsIDE3NSwgNDMsIDI0OSwgMTMyLCAKLSAgICAyMTYsIDE0LCA0NCwgMjQ5LCAxMzIsIDIxNiwgMTQsIDQzLCAyNDksIDEzMiwgMjIzLCA0OSwgMjI4LCA1MiwgNTAsIDQyLCAKLSAgICAyMzIsIDEwNCwgMjU0LCAyNSwgMjIxLCAxNjQsIDIyMSwgMTcxLCAyMTcsIDEsIDIyMywgMTIwLCAyMjQsIDI0MSwgMjM1LCAKLSAgICAyMzgsIDIxMywgMTY1LCAyMTgsIDIzNCwgMjI1LCA0MSwgNjQsIDIzNSwgMjA3LCA1MCwgMjE1LCA5NCwgMjI4LCA1MiwgNTAsIAotICAgIDIxMiwgNDIsIDI0MCwgMjM2LCAyMTYsIDE0LCA0MywgMjQ5LCAxNjAsIDIxNiwgMTQsIDQ0LCAyNDksIDE2MCwgMjUxLCAKLSAgICAxNzUsIDQzLCAyNDksIDE2MCwgMjUxLCAxNzUsIDQ0LCAyNDksIDE2MCwgMjE2LCAxNCwgMTYzLCAyMzUsIDIxMSwgMjUxLCAKLSAgICAxNzUsIDE2MywgMjM1LCAyMTEsIDI0MywgMjQwLCAyMTksIDc1LCAxMjAsIDI1MywgMjUwLCAyNTIsIDI0LCAxMTMsIDIwMywgCi0gICAgMjUyLCAxMjksIDIyNiwgMTYwLCAyMzQsIDEzOCwgMjQ1LCA5MCwgMjE2LCA0MiwgMjE2LCAxOTYsIDIyMiwgMjUxLCAyMTEsIAotICAgIDE3OSwgMjM2LCAwLCAxMTUsIDIyMywgMTE3LCAyNTEsIDE2MywgMjM0LCAxMzcsIDIzMywgNDIsIDI1NCwgMTEwLCAxMjcsIAotICAgIDIyMiwgMjQ3LCAyNTQsIDExMCwgMTI3LCAyNDUsIDkwLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjMzLCA0NiwgMjUyLCAzNSwgCi0gICAgMjIyLCAyMzMsIDI0OSwgNzAsIDI1NCwgMTU1LCAyNTQsIDEsIDIxNywgMTgxLCAyMTYsIDQsIDIyMiwgMTIzLCAyNDcsIAotICAgIDIxNSwgMjI2LCAxNTEsIDI0OSwgMTk4LCAyMTcsIDUyLCAyMTksIDg2LCAyNDksIDE1MSwgMjQ5LCAxNTAsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjQwLCAxNTEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE4LCAyMjgsIDIyNCwgMjcsIDI1NCwgCi0gICAgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ1LCA5OSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDcsIAotICAgIDE3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDcsIDI0OCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI1MCwgMzUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjUwLCAzNiwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjM1LCA1NiwgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMTksIDk2LCAxMzAsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUyLCAxODEsIDEzMCwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyMTksIDk1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIAotICAgIDI1MiwgMTgwLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDIzMywgMTQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjI0LCAyOCwgMjQyLCAxMjksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTQwLCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDk3LCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDE0MCwgNzQsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgOTcsIDc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDI1MiwgMTgwLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjE3LCA4OCwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjQ4LCA1NSwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMTI0LCAyNTAsIDIzOCwgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDgsIDU0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjE3LCA4OCwgCi0gICAgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTQsIDE1MywgMjE0LCAxOSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyMTQsIDE1MywgNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyMjYsIDEyMywgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDgsIDY2LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAxMjAsIDI1MCwgMjM4LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OCwgNjUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0NiwgMTA0LCAyMTQsIDE5LCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NiwgMTA0LCA3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjMsIAotICAgIDI1MywgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ4LCA1NSwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjQ3LCAyNDksIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIzNSwgNTcsIDIxNCwgMTgzLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgCi0gICAgMjIwLCA1LCAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyMywgMjUzLCAyMjQsIDI3LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI1MCwgMzYsIDIxOCwgMTU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OSwgMjI2LCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgMjE3LCA4OCwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OCwgCi0gICAgNjYsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTgsIDE1NywgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgCi0gICAgMTYsIDIzNSwgNTcsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyNDgsIDEsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMTI0LCAyMjAsIDUsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDQzLCAyMjAsIDUsIAotICAgIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxNiwgODksIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNDIsIDEzMCwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OSwgMjIwLCAxMzAsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjQ4LCA2NiwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxMCwgMzQsIDI1NCwgNjYsIDI0MywgMjI1LCAKLSAgICAxNiwgMjE4LCAxMzYsIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjAsIDE1MSwgMjE0LCAxODMsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjI4LCA1MiwgMjQ1LCA5OSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAyMjQsIDEyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyNCwgMjUwLCAyMzksIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIAotICAgIDE2LCAxMjAsIDI1MCwgMjM5LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjM1LCAxODUsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjIzLCAzNywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjYsIDIwMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNTQsIDE0NCwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ1LCAxMDEsIDIxNCwgMTgzLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDIzNSwgMTg2LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjYsIDIwMiwgMjE0LCAKLSAgICAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjU0LCAxNDMsIDIyOCwgNTIsIDI1MCwgMTMwLCA3OCwgNDQsIDI1NCwgCi0gICAgMTEwLCAyLCAyNDYsIDEwNCwgMjEwLCAzNSwgNzQsIDIxOSwgMjM1LCAyMDQsIDI1MSwgMTYzLCAyNTIsIDQ1LCA4NywgNjcsIAotICAgIDIzMiwgMjE0LCAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIzNSwgMjE2LCA4NywgMjQ5LCAxODMsIDIxNCwgMTgxLCA4NywgCi0gICAgMjQ3LCAxODksIDIxNCwgMTgxLCA4NywgMjQ1LCAxNTQsIDg3LCAyNDksIDIxMCwgODcsIDcxLCA0MiwgMiwgMjUwLCAxNzUsIAotICAgIDY3LCAyMzIsIDIxMywgMjQ1LCAxMzAsIDg3LCAyNTQsIDEzOSwgMjM0LCAxMzksIDg3LCAyNDEsIDIxMywgODcsIDM3LCAKLSAgICAyMDMsIDI1MiwgMTQxLCAyLCAyMjgsIDUwLCAzNywgMjE1LCAyMjYsIDI0NiwgMTA2LCAyNTEsIDEzNSwgMjUwLCAzNiwgMiwgCi0gICAgMjI4LCA1NCwgNzQsIDIxNCwgMTc5LCA4NywgMjMwLCAxMzcsIDg3LCAyNDAsIDE2NCwgODcsIDIyNiwgMTc0LCAyNDIsIDU5LCAKLSAgICA4NywgMjI2LCAxNzQsIDIzMywgMTQ3LCA4NywgMjI1LCAyNDQsIDg3LCAyMjUsIDI0MywgODcsIDI0NywgMTk3LCAyNDksIAotICAgIDk3LCAxNiwgMjQ0LCAyMCwgMTA1LCAyMTksIDUwLCA4NywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI3LCAyNDgsIAotICAgIDgzLCAyMjAsIDEzOCwgMjM0LCAxMzksIDg3LCAyMjQsIDE5MiwgMjI2LCA3NSwgMjI5LCA4MiwgMjI2LCA3NSwgMjI0LCAKLSAgICAxODgsIDIyMSwgMTg5LCA4NywgMjUwLCAxNywgMjIxLCAxODksIDg3LCA0MywgMjI2LCA0LCAyMTQsIDE2MCwgMTAzLCA0MywgCi0gICAgMjI2LCA0LCAyNDUsIDIxLCA0MywgMjI2LCA0LCAyMzIsIDEwOCwgMTAzLCA0NCwgMjI2LCA0LCAyMTQsIDE2MCwgMTAzLCAKLSAgICA0NCwgMjI2LCA0LCAyNDUsIDIxLCA0NCwgMjI2LCA0LCAyMzIsIDEwOCwgMTAzLCA0MywgNDIsIDI1MSwgMTU4LCAyMTQsIAotICAgIDE2MCwgMjQ5LCAxNjAsIDQzLCA0MiwgMjUxLCAxNTgsIDI0NSwgMjEsIDQzLCA0MiwgMjUxLCAxNTgsIDIzMiwgMTA4LCAKLSAgICAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMjE0LCAxNjAsIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyNDUsIAotICAgIDIxLCA0NCwgNDIsIDI1MSwgMTU4LCAyMzIsIDEwOCwgMjQ5LCAxNjAsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjE0LCAKLSAgICAxNjAsIDEwMywgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMzAsIDIyNCwgMjI1LCAxMDEsIDQzLCAyNDksIDk5LCAyNTEsIAotICAgIDE1OCwgMjMyLCAxMDgsIDEwMywgMjQ5LCA5OSwgMjUxLCAxNTgsIDI0NSwgMjEsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgCi0gICAgMjE0LCAxNjAsIDEwMywgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAyMzAsIDIyNCwgMjI1LCAxMDEsIDQ0LCAyNDksIDk5LCAKLSAgICAyNTEsIDE1OCwgMjMyLCAxMDgsIDEwMywgMjM1LCAyMTIsIDI0NSwgMjEsIDIwMywgMjMyLCAyMTQsIDI0NSwgMjEsIDIxNCwgCi0gICAgMTYwLCA0MywgMTc3LCAyMzIsIDEwOCwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjEsIDE3MiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAxNzcsIDIzMiwgMTA4LCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIyMSwgMTcyLCAyMTgsIDQxLCAyMTYsIDEzLCAyMTgsIAotICAgIDQxLCAyNTEsIDE3NCwgMjE2LCAxNCwgNDIsIDEyNywgMjUxLCAxNzUsIDQyLCAxMjcsIDI1MSwgMTc1LCA0MiwgMjUxLCAKLSAgICAxNTgsIDExNywgMjE2LCAxNCwgNDIsIDEyNywgMzQsIDE2LCAyNTEsIDE3NCwgNDMsIDY3LCA5MywgMjMyLCAyMTMsIDQ0LCAKLSAgICA2NywgOTMsIDIzMiwgMjEzLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIxMiwgMjAzLCAyMjEsIDIwNSwgMjMyLCAyMTEsIDIwMywgCi0gICAgMjIxLCAyMDUsIDIzMiwgMjEwLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIwOSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAKLSAgICAyMTYsIDE0LCAyMjIsIDI1MSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAyNTEsIDE3NSwgMjIyLCAyNTEsIDI0OCwgNDYsIAotICAgIDE2LCAxOTIsIDY3LCAyLCAyNTAsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyMDMsIDIsIDI1MCwgMzUsIDI0OCwgCi0gICAgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIDIwMywgMiwgMjUwLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIsIDIxNSwgMjI1LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyMDMsIDIsIDIxNSwgMjI1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAKLSAgICAyMDMsIDIsIDIxNSwgMjI1LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDIxMiwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIAotICAgIDEyNCwgMjIsIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgMjAzLCAyLCAyMTIsIDM1LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCAxMjQsIDIyLCAyNDEsIDQ0LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAyNDEsIDQ0LCAKLSAgICAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDIxNiwgMTQsIDIzMywgNDYsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgCi0gICAgMjUxLCAxNzUsIDIzMywgNDYsIDQyLCAyNDQsIDMyLCAyMjMsIDU0LCA4NywgMjQ1LCAxODIsIDg3LCA2NywgMjMyLCAyMTQsIAotICAgIDI0NSwgMjEsIDIzMSwgMzMsIDI1MSwgMTQ2LCAyMzEsIDMzLCAxOTksIDExNywgMjE5LCAyNTAsIDIzMSwgMzMsIDIxOSwgCi0gICAgMjUxLCAxMTcsIDIzMiwgMTM3LCAyMzEsIDMzLCAxOTksIDExNywgMTEzLCAyMTksIDIzNywgMjMxLCAzMywgMTEzLCAyMTksIAotICAgIDIzOCwgMTE3LCAyMzIsIDEzNywgMjMxLCAzMywgMTEzLCAyMTksIDIzOCwgMjM1LCA2NCwgMjMxLCAzMywgMjE1LCAyMDgsIAotICAgIDIzMSwgMzMsIDIxNiwgMjIzLCAyMzEsIDMzLCAyMjUsIDE4OCwgMjQ1LCAyMjQsIDI0MiwgMTIyLCAyNDMsIDIxOSwgMjE2LCAKLSAgICAxNCwgMjI2LCAzLCAyNTEsIDE3NSwgMjI2LCAzLCAyMTYsIDE0LCAyNDksIDk5LCAxMjcsIDI1MSwgMTc1LCAyNDksIDk5LCAKLSAgICAxMjcsIDIxNiwgMTQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyNTEsIDE3NSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDcxLCAKLSAgICAyMTUsIDIzOSwgMjUyLCAzNSwgMjIyLCAyMzQsIDIsIDI1MCwgMzUsIDIxOCwgMTIwLCAyNDQsIDY0LCAyNTUsIDE3LCAyNDksIAotICAgIDk2LCAyNDUsIDE3MSwgMjM1LCAxOTgsIDI0OCwgODMsIDI0NSwgMjQsIDg3LCA4NSwgMjIyLCAyNDcsIDUyLCAyMTUsIDIyNSwgCi0gICAgODUsIDIzMywgNDIsIDUyLCAyMTUsIDIyNSwgODUsIDIxNCwgMTYyLCA1MiwgMjE1LCAyMjUsIDg1LCAyNDYsIDEwNSwgNTIsIAotICAgIDIxNSwgMjI1LCA4NSwgMjIyLCAyNDcsIDUyLCAyMTUsIDIyNiwgMiwgNjcsIDEzMCwgODUsIDIzMywgNDIsIDUyLCAyMTUsIAotICAgIDIyNiwgMiwgNjcsIDEzMCwgODUsIDIyMiwgMjQ3LCAyMTUsIDIyNiwgMiwgNTIsIDY3LCAxMzAsIDI1NCwgMTczLCAyNTAsIAotICAgIDMsIDIxOCwgMTI2LCAyMTYsIDg2LCAyNTAsIDMsIDI0MCwgMjM3LCAyLCAyNDQsIDUwLCAyMjEsIDI0MSwgMTYsIDMxLCAKLSAgICAyMjcsIDIwMiwgMTYsIDMxLCAyMTgsIDE1MiwgNjQsIDI0MSwgMjMzLCAxNiwgMzEsIDIxOCwgMTUyLCA2NCwgMjE2LCAyMTIsIAotICAgIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTYsIDIxMiwgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIxNSwgMjQzLCAxNiwgMzEsIAotICAgIDI0NSwgMTMyLCAxNiwgMzEsIDI1NSwgNywgMTYsIDMxLCAyNTIsIDQ0LCAxNiwgMzEsIDI1MiwgMTc5LCAxNiwgMzEsIDIwMywgCi0gICAgMjE3LCA4OSwgMTYsIDMxLCAyMzIsIDIxNCwgMjQ0LCAxNDUsIDE2LCAzMSwgNjcsIDIxNywgODksIDE2LCAzMSwgMjQ0LCAKLSAgICAyMCwgMjQ0LCAxNDUsIDE2LCAzMSwgMjUwLCAyMzAsIDIyMywgNTMsIDE2LCAzMSwgMjIwLCAyOCwgMjI2LCAxMzAsIDE2LCAKLSAgICAzMSwgMjIwLCAyOCwgMjM1LCAyNTUsIDE2LCAzMSwgMjQ4LCAxNTEsIDIzMiwgMjA0LCAyNDUsIDc3LCAxNiwgMzEsIDI0OCwgCi0gICAgMzEsIDI0OSwgMTc4LCAxMTAsIDE2LCAzMSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDEwNSwgMTYsIDMxLCAyNDgsIDMxLCAyNDksIAotICAgIDE3OCwgMTU4LCAxNiwgMzEsIDI0OCwgMzEsIDI0OSwgMTc4LCAxNjEsIDE2LCAzMSwgMTUyLCAyNTUsIDcsIDE2LCAzMSwgCi0gICAgMjE3LCAxNzcsIDIzNiwgNjIsIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTUsIDI0NCwgMjUxLCAyMTMsIDE2LCAzMSwgMjUxLCAKLSAgICA1LCAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjMxLCA4MSwgMTYsIDMxLCAyMTgsIDYxLCAxNiwgMzEsIDI0NSwgNzcsIDE2LCAKLSAgICAzMSwgMjQ0LCAxMDcsIDIyMCwgMTM3LCAxNiwgMzEsIDI0MiwgMTIxLCAyMjAsIDEzNywgMTYsIDMxLCAyMjMsIDEyMSwgCi0gICAgMjIwLCAxMzcsIDE2LCAzMSwgMjE0LCAxNzQsIDIyMCwgMTM3LCAxNiwgMzEsIDIxOSwgMTgsIDE2LCAzMSwgMjQ4LCA2MywgCi0gICAgMjUxLCAyMTYsIDg3LCAyMDQsIDI1MSwgMTYzLCAxNiwgMzEsIDIyOSwgODUsIDE2LCAzMSwgMjQ4LCA2NCwgMjQ0LCAyMCwgCi0gICAgMTA1LCAxNiwgMzEsIDIxOCwgNjIsIDI0NCwgMjAsIDEwNSwgMjI2LCAyNDEsIDEwMywgMjI2LCAyNDEsIDI1MCwgMTUyLCAKLSAgICAyMjYsIDI0MSwgMjQ0LCAyMywgMjI2LCAyNDEsIDIzNSwgMTkzLCAyNDQsIDIzLCAyMjYsIDI0MSwgMjUyLCA0MiwgMjUxLCAKLSAgICAxMjQsIDIyNiwgMjQxLCAyNTEsIDE3MCwgMjE2LCAxMTEsIDIyNiwgMjQxLCAyNTEsIDE1NSwgMjUyLCAxNDYsIDI0MCwgCi0gICAgMTAzLCAyMjYsIDI0MSwgMjU0LCAxMjcsIDY0LCAyNTAsIDEyOSwgMjI2LCAyNDEsIDI0OCwgMTU2LCAyMjYsIDI0MSwgMjQ5LCAKLSAgICA4NywgMjU1LCAxMSwgMjI3LCAyMDAsIDIyNiwgMjQxLCA1MiwgMjUyLCAxODAsIDM3LCAyMSwgMTEwLCAzNywgMjEsIDEwNSwgCi0gICAgMzcsIDIxLCAxNTgsIDM3LCAyMSwgMTYxLCAzNywgMjEsIDE4OSwgMzcsIDIxLCAxOTQsIDM3LCAyMSwgMTk4LCAzNywgMjEsIAotICAgIDE5NSwgMzcsIDIxLCAyMDAsIDM3LCA1NCwgMjE2LCAyNDcsIDM3LCA1NCwgMjQ1LCAxNjcsIDM3LCA1NCwgMjE1LCA3NiwgCi0gICAgMzcsIDU0LCAyMTYsIDE2NCwgMzcsIDU0LCAyNDQsIDUsIDM3LCA1NCwgMjQ0LCAxMTgsIDM3LCA1NCwgMjE5LCAxMTksIDM3LCAKLSAgICA1NCwgMjIwLCAxMTksIDM3LCA1NCwgMjQ1LCAxOTAsIDM3LCA1NCwgMjI4LCAxOTcsIDM3LCA1NCwgMjE1LCA3MywgODgsIAotICAgIDIxLCAxMTAsIDg4LCAyMSwgMTA1LCA4OCwgMjEsIDE1OCwgODgsIDIxLCAxNjEsIDg4LCAyMSwgMTg5LCA4OCwgMjEsIDE5NCwgCi0gICAgODgsIDIxLCAxOTgsIDg4LCAyMSwgMTk1LCA4OCwgMjEsIDIwMCwgODgsIDU0LCAyMTYsIDI0NywgODgsIDU0LCAyNDUsIAotICAgIDE2NywgODgsIDU0LCAyMTUsIDc2LCA4OCwgNTQsIDIxNiwgMTY0LCA4OCwgNTQsIDI0NCwgNSwgODgsIDU0LCAyNDQsIDExOCwgCi0gICAgODgsIDU0LCAyMTksIDExOSwgODgsIDU0LCAyMjAsIDExOSwgODgsIDU0LCAyNDUsIDE5MCwgODgsIDU0LCAyMjgsIDE5NywgCi0gICAgODgsIDU0LCAyMTUsIDczLCAyMSwgMTIzLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAxMTMsIDI0MywgMjI5LCAyMTgsIAotICAgIDEyOSwgMjEsIDEzNCwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjQ0LCAxMSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgCi0gICAgMjQ0LCA4MSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjE5LCAxMjUsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIyMCwgCi0gICAgMTIyLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyNDUsIDE5MywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjI4LCAyMDAsIAotICAgIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIxNiwgMjQ4LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyNDUsIDE2OCwgMjQzLCAKLSAgICAyMjksIDIxOCwgMTI5LCA1NCwgMjE1LCA3NywgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjE2LCAxNjUsIDI0MywgMjI5LCAKLSAgICAyMTgsIDEyOSwgNTQsIDI0NCwgNiwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjQ0LCAxMTksIDI0MywgMjI5LCAyMTgsIAotICAgIDEyOSwgNTQsIDIxOSwgMTIwLCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMjAsIDEyMCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA1NCwgMjQ1LCAxOTEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIyOCwgMTk4LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAKLSAgICAyMTUsIDc0LCAyNDMsIDIyOSwgMjE4LCAxMjksIDg4LCA3LCA0LCAxLCA2MSwgODgsIDcsIDQsIDEsIDI1MywgMTU4LCA4OCwgCi0gICAgNywgNCwgMSwgMjUxLCA2NiwgODgsIDcsIDQsIDEsIDI0OSwgNjAsIDg4LCA3LCA0LCAxLCA3NSwgODgsIDcsIDQsIDEsIAotICAgIDI0NSwgNiwgODgsIDcsIDQsIDEsIDI0MywgMjAyLCA4OCwgNywgNCwgMSwgMjQyLCA2MCwgODgsIDcsIDQsIDEsIDczLCA4OCwgCi0gICAgNywgNCwgMSwgMjM1LCAxNDQsIDg4LCA3LCA0LCAxLCAyMzUsIDIzLCA4OCwgNywgNCwgMSwgMTU2LCA4OCwgNywgNCwgMSwgCi0gICAgMTkzLCA4OCwgNywgNCwgMSwgMjMwLCAyNSwgODgsIDcsIDQsIDEsIDc2LCA4OCwgNywgNCwgMSwgMjI2LCAxMDUsIDg4LCA3LCAKLSAgICA0LCAxLCAyMjQsIDk2LCA4OCwgNywgNCwgMSwgMTUzLCA4OCwgNywgNCwgMSwgMjIyLCA5MSwgODgsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCA4OCwgNywgNCwgMSwgNzAsIDg4LCA3LCA0LCAxLCAyMTQsIDEwNSwgODgsIDcsIDQsIDEsIDIxMiwgOTgsIDg4LCA3LCAKLSAgICA0LCAxLCAyMTEsIDE3OCwgODgsIDcsIDQsIDEsIDIxMSwgMTE3LCA4OCwgNywgNCwgMSwgMjEwLCAxNTksIDM3LCA3LCA2LCAKLSAgICAxLCA2MSwgMzcsIDcsIDYsIDEsIDI1MywgMTU4LCAzNywgNywgNiwgMSwgMjUxLCA2NiwgMzcsIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDM3LCA3LCA2LCAxLCA3NSwgMzcsIDcsIDYsIDEsIDI0NSwgNiwgMzcsIDcsIDYsIDEsIDI0MywgMjAyLCAzNywgNywgNiwgMSwgCi0gICAgMjQyLCA2MCwgMzcsIDcsIDYsIDEsIDczLCAzNywgNywgNiwgMSwgMjM1LCAxNDQsIDM3LCA3LCA2LCAxLCAyMzUsIDIzLCAKLSAgICAzNywgNywgNiwgMSwgMTU2LCAzNywgNywgNiwgMSwgMTkzLCAzNywgNywgNiwgMSwgMjMwLCAyNSwgMzcsIDcsIDYsIDEsIAotICAgIDc2LCAzNywgNywgNiwgMSwgMjI2LCAxMDUsIDM3LCA3LCA2LCAxLCAyMjQsIDk2LCAzNywgNywgNiwgMSwgMTUzLCAzNywgNywgCi0gICAgNiwgMSwgMjIyLCA5MSwgMzcsIDcsIDYsIDEsIDIxNywgMTUyLCAzNywgNywgNiwgMSwgNzAsIDM3LCA3LCA2LCAxLCAyMTQsIAotICAgIDEwNSwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDM3LCA3LCA2LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAKLSAgICAzNywgNywgNiwgMSwgMjEwLCAxNTksIDM3LCA3LCA0LCAxLCA2MSwgMzcsIDcsIDQsIDEsIDI1MywgMTU4LCAzNywgNywgNCwgCi0gICAgMSwgMjUxLCA2NiwgMzcsIDcsIDQsIDEsIDI0OSwgNjAsIDM3LCA3LCA0LCAxLCA3NSwgMzcsIDcsIDQsIDEsIDI0NSwgNiwgCi0gICAgMzcsIDcsIDQsIDEsIDI0MywgMjAyLCAzNywgNywgNCwgMSwgMjQyLCA2MCwgMzcsIDcsIDQsIDEsIDczLCAzNywgNywgNCwgCi0gICAgMSwgMjM1LCAxNDQsIDM3LCA3LCA0LCAxLCAyMzUsIDIzLCAzNywgNywgNCwgMSwgMTU2LCAzNywgNywgNCwgMSwgMTkzLCAKLSAgICAzNywgNywgNCwgMSwgMjMwLCAyNSwgMzcsIDcsIDQsIDEsIDc2LCAzNywgNywgNCwgMSwgMjI2LCAxMDUsIDM3LCA3LCA0LCAKLSAgICAxLCAyMjQsIDk2LCAzNywgNywgNCwgMSwgMTUzLCAzNywgNywgNCwgMSwgMjIyLCA5MSwgMzcsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCAzNywgNywgNCwgMSwgNzAsIDM3LCA3LCA0LCAxLCAyMTQsIDEwNSwgMzcsIDcsIDQsIDEsIDIxMiwgOTgsIDM3LCA3LCAKLSAgICA0LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDQsIDEsIDIxMSwgMTE3LCAzNywgNywgNCwgMSwgMjEwLCAxNTksIDM3LCAyMSwgCi0gICAgMjEwLCA4NiwgMTUyLCAzNywgNTQsIDI0NSwgMTY3LCAxNTIsIDM3LCA1NCwgMjE1LCA3NiwgMTUyLCAzNywgNTQsIDIxNiwgCi0gICAgMTY0LCAxNTIsIDM3LCA1NCwgMjQ0LCA1LCAxNTIsIDM3LCA1NCwgMjQ0LCAxMTgsIDE1MiwgMzcsIDU0LCAyMTksIDExOSwgCi0gICAgMTUyLCAzNywgNTQsIDIyMCwgMTE5LCAxNTIsIDM3LCA1NCwgMjQ1LCAxOTAsIDE1MiwgMzcsIDU0LCAyMjgsIDE5NywgMTUyLCAKLSAgICAzNywgNTQsIDIxNSwgNzMsIDUyLCAzNywgMjEsIDExMCwgNTIsIDM3LCAyMSwgMTA1LCA1MiwgMzcsIDIxLCAxNTgsIDUyLCAKLSAgICAzNywgMjEsIDE2MSwgNTIsIDM3LCAyMSwgMTg5LCA1MiwgMzcsIDIxLCAxOTQsIDUyLCAzNywgMjEsIDE5OCwgNTIsIDM3LCAKLSAgICAyMSwgMTk1LCA1MiwgMzcsIDIxLCAyMDAsIDUyLCAzNywgNTQsIDIxNiwgMjQ3LCAxNTIsIDM3LCAyMSwgMjEwLCA4NiwgOTMsIAotICAgIDk5LCAxOTIsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjEzLCAyMzksIDkzLCA5OSwgCi0gICAgMTE0LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTIsIDIxNSwgMjExLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxMTQsIAotICAgIDIxNSwgMjExLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIxNSwgMjExLCAyNDgsIDE1NywgMjEzLCAyMzksIAotICAgIDkzLCA5OSwgMTE0LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDE5MiwgMjI0LCAyNCwgMjQ4LCAKLSAgICAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAyMjQsIDI0LCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIyNCwgCi0gICAgMjQsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIyNCwgMjQsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAKLSAgICAxOTIsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgCi0gICAgMTE0LCAyMiwgNDQsIDIzMiwgMjMwLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAxMjQsIAotICAgIDIyLCAyMzMsIDQ2LCA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgMTE0LCAyMiwgCi0gICAgNDMsIDIzMiwgMjMwLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDIzMiwgCi0gICAgMjMwLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAyMzMsIDQ2LCA5MywgCi0gICAgOTksIDEyMCwgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDMsIDIzMiwgMjMwLCA5MywgCi0gICAgOTksIDExNCwgMTIwLCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDY3LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgNjcsIAotICAgIDE5MiwgMjIsIDQ0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjMwLCA5MywgOTksIAotICAgIDEyNCwgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNjcsIDExNCwgMjIsIDQ0LCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMjQsIDE5MiwgMjIsIDQ0LCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDQsIDEyNCwgMjQxLCAKLSAgICAyMjEsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgNjcsIDIyLCAyMzMsIDQ2LCA5MywgOTksIAotICAgIDY3LCAxOTIsIDIyLCA0MywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMjQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDY3LCAxMTQsIDIyLCA0MywgMjMyLCAyMzAsIAotICAgIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCA0MywgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDQzLCAxMjQsIAotICAgIDI0MSwgMjIxLCA5MywgOTksIDExNCwgNjcsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMTI0LCAyMiwgMjQxLCA0NCwgCi0gICAgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDExNCwgMjIsIDQzLCAxMjQsIAotICAgIDIzMiwgMjMwLCA5MywgOTksIDEyNCwgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDIwMywgCi0gICAgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDE5MiwgMjIsIDQzLCAxMjQsIDI0MSwgMjIxLCA5MywgOTksIDQzLCAxOTIsIDIyLCAKLSAgICA0NCwgMTI0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAKLSAgICAyNDEsIDQ0LCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgNDMsIAotICAgIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgCi0gICAgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgNDMsIDE5MiwgCi0gICAgMjIsIDQ0LCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDY3LCAKLSAgICAyMiwgMjQxLCA0NCwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDY3LCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgCi0gICAgNDMsIDY3LCAyMzIsIDIzMCwgOTMsIDk5LCA2NywgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgCi0gICAgMjIsIDEyNCwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDEyMCwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICA2NywgMTE0LCAyMiwgMjAzLCAyMzIsIDIzMCwgOTMsIDk5LCA0MywgMTIwLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzMCwgCi0gICAgOTMsIDk5LCA0NCwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzMCwgOTMsIDk5LCA0MywgMTI0LCAxMTQsIDIyLCAKLSAgICA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTI0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICAxMjQsIDE5MiwgMjIsIDEyMCwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDEyNCwgMjAzLCAyNDEsIAotICAgIDIyMSwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDY3LCAyNDEsIDIyMSwgOTMsIDk5LCA0MywgMTkyLCAyMiwgNDQsIDY3LCAKLSAgICAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDUyLCAyNDgsIDE1NywgMjQxLCAKLSAgICA0NCwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDUyLCAyNDgsIDE1NywgMjEzLCAKLSAgICAyMzksIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDUyLCAyNDEsIDQ0LCA5MywgOTksIAotICAgIDUyLCAyMTMsIDIzOSwgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDEyNCwgNTIsIAotICAgIDIyLCA0NCwgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyNCwgMjE5LCAxNTUsIAotICAgIDIyLCA0MywgMjQ2LCAxMTMsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgCi0gICAgMjMzLCA0NiwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDEyMCwgNTIsIDIyLCAKLSAgICA0NCwgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDEyMCwgMjE5LCAxNTUsIDIyLCAKLSAgICA0MywgMjQ2LCAxMTMsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgCi0gICAgMjMzLCA0NiwgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCA0NCwgMjQ2LCAxMTMsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDQsIAotICAgIDIxOSwgMTU0LCA5MywgOTksIDUyLCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDY3LCAyMTksIDE1NSwgMjIsIDQzLCAKLSAgICAyNDYsIDExMywgOTMsIDk5LCA2NywgNTIsIDIyLCA0MywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjMzLCA0NiwgCi0gICAgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIDExMywgOTMsIDk5LCAxMjQsIDUyLCAyMiwgMjAzLCAyMTksIAotICAgIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIAotICAgIDExMywgOTMsIDk5LCAxMjAsIDUyLCAyMiwgMjAzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjQxLCA0NCwgCi0gICAgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCAyMDMsIDI0NiwgMTEzLCA5MywgOTksIDY3LCA1MiwgMjIsIDIwMywgMjE5LCAKLSAgICAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyNCwgMjIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTI0LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyMCwgCi0gICAgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjAsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDI0NywgCi0gICAgMjU1LCAyMTQsIDE2MCwgNDQsIDIxNiwgNDIsIDIzMiwgMTA4LCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjQ3LCAyNTUsIAotICAgIDIxNCwgMTYwLCA0MywgMjE2LCA0MiwgMjMyLCAxMDgsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMjQ3LCAyNTUsIDI0OSwgCi0gICAgMTMwLCA5MywgOTksIDE5MiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDIxNCwgMTYzLCA5MywgOTksIDE5MiwgMjIyLCAyNTEsIAotICAgIDkzLCA5OSwgMTkyLCAyNDYsIDEwNiwgOTMsIDk5LCAxMTQsIDIzMywgNDYsIDkzLCA5OSwgMTE0LCAyMTQsIDE2MywgOTMsIAotICAgIDk5LCAxMTQsIDIyMiwgMjUxLCA5MywgOTksIDExNCwgMjQ2LCAxMDYsIDkzLCA5OSwgMTkyLCA0MywgMjIsIDExNCwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAxMTQsIDI0NiwgMTA2LCA5MywgOTksIDExNCwgNDMsIDIyLCAxOTIsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDExNCwgMTIwLCAyMiwgMTkyLCAyNDYsIDEwNiwgMjE0LCAxNjAsIDE2MywgMjUxLCAyMTMsIDIzMiwgCi0gICAgMTA4LCAxMjMsIDI0NSwgMTg5LCAyNTEsIDIxMywgMjMyLCAxMDgsIDEyMywgMjI0LCAyMiwgMjUxLCAyMTMsIDIzMiwgMTA4LCAKLSAgICAxMzQsIDI0NSwgMTg3LCAyNTEsIDIxMywgMjMyLCAxMDgsIDE2MywgMjUxLCAyMTMsIDIzMiwgMTA4LCAyNDQsIDgxLCAyNDUsIAotICAgIDE4NywgMjUxLCAyMTMsIDIzMiwgMTA4LCAxMzQsIDIyNCwgMjAsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMjIwLCAxMjIsIDI0NSwgCi0gICAgMTg3LCAyNTEsIDIxMywgMjQzLCAyMjksIDI1MSwgMjEzLCA0MywgMjIwLCAxMjIsIDI0NSwgMTg3LCAyNTEsIDIxMywgNDMsIAotICAgIDEzNCwgMjI0LCAyMCwgMjUxLCAyMTMsIDQzLCAyNDQsIDgxLCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAxNjMsIDI1MSwgCi0gICAgMjEzLCA0MywgMTM0LCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAxMjMsIDIyNCwgMjIsIDI1MSwgMjEzLCA0MywgMTIzLCAKLSAgICAyNDUsIDE4OSwgMjUxLCAyMTMsIDQ0LCAxNjMsIDI1MSwgMjEzLCAxOTIsIDIyMCwgOTIsIDIzMSwgODIsIDIyMCwgOTIsIAotICAgIDI0OCwgMTYyLCAyMjAsIDkyLCAyMTQsIDE2MCwgMTIzLCAyNDUsIDE4OSwgMjUxLCAyMTMsIDQ0LCAxMjMsIDI0NSwgMTg5LCAKLSAgICAyNTEsIDIxMywgMjI0LCAyNiwgMjMyLCAxMDgsIDIzMywgNDYsIDIyNCwgMjYsIDIzMiwgMTA4LCAyMjIsIDI1MSwgMjI0LCAKLSAgICAyNiwgMjE0LCAxNjAsIDIzMywgNDYsIDIyNCwgMjYsIDIxNCwgMTYwLCA0MywgMjIsIDIzMiwgMTA4LCA0MywgMjIsIDIzMiwgCi0gICAgMTA4LCAyMjIsIDI1MSwgMjI0LCAyNiwgMjE0LCAxNjAsIDQzLCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAKLSAgICAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDEwOCwgMjMzLCA0NiwgMjI0LCAyNiwgMjE0LCAxNjAsIAotICAgIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAyMTQsIDE2MCwgMjIyLCAKLSAgICAyNTEsIDIyNCwgMjYsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTA4LCAyMzMsIDQ2LCAyMjQsIDI2LCAyMTQsIDE2MCwgNDQsIAotICAgIDIyLCAyMzIsIDEwOCwgNDMsIDIyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDg1LCAyMTgsIDIzNCwgNzEsIDIxOCwgMjM0LCA3MSwgCi0gICAgNDIsIDIsIDIyMiwgMTgzLCAyNDksIDE1OSwgNzEsIDQyLCAyNDksIDE4NywgODUsIDQsIDIxOCwgMjM0LCA0MiwgMiwgMjAzLCAKLSAgICAyNDQsIDEwNSwgNDIsIDIsIDY3LCAyNDQsIDEwNSwgNDIsIDIsIDIyNiwgMTQ0LCAyNDksIDEyNiwgMjQ0LCAxMDUsIDQyLCAKLSAgICAyLCAyMTQsIDE2MCwgNDMsIDIxNiwgNDIsIDIzMiwgMTA4LCA0NCwgMjQ0LCAxMDUsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIAotICAgIDIxNiwgNDIsIDIzMiwgMTA4LCA0MywgMjQ0LCAxMDUsIDQyLCAyLCAyNDcsIDI1NSwgMjQ5LCAxMjYsIDI0NCwgMTA1LCA4NSwgCi0gICAgNCwgMjE4LCAyMzQsIDcxLCA0LCAyMTgsIDIzNCwgODUsIDIyMywgMTE2LCA3MSwgMjIzLCAxMTYsIDg1LCA2NywgMjIzLCAKLSAgICAxMTYsIDcxLCA2NywgMjIzLCAxMTYsIDg1LCAyMjYsIDYsIDcxLCAyMjYsIDYsIDg1LCAyMTQsIDE2MiwgMjE1LCAyMjUsIAotICAgIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjUsIDg1LCAyMTQsIDE2MiwgNCwgMjE1LCAyMjUsIDcxLCAyMTQsIDE2MiwgNCwgMjE1LCAKLSAgICAyMjUsIDg1LCAyMjIsIDI0NywgMjE1LCAyMjUsIDcxLCAyMjIsIDI0NywgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgNCwgCi0gICAgMjE1LCAyMjUsIDcxLCAyMjIsIDI0NywgNCwgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgMjI1LCA4LCA3MSwgMjIyLCAyNDcsIAotICAgIDIyNSwgOCwgODUsIDI0NiwgMTA1LCAyMTUsIDIyNSwgNzEsIDI0NiwgMTA1LCAyMTUsIDIyNSwgODUsIDI0NiwgMTA1LCA0LCAKLSAgICAyMTUsIDIyNSwgNzEsIDI0NiwgMTA1LCA0LCAyMTUsIDIyNSwgODUsIDIzMywgNDIsIDIxNSwgMjI1LCA3MSwgMjMzLCA0MiwgCi0gICAgMjE1LCAyMjUsIDg1LCAyMzMsIDQyLCA0LCAyMTUsIDIyNSwgNzEsIDIzMywgNDIsIDQsIDIxNSwgMjI1LCA4NSwgMjMzLCAKLSAgICA0MiwgMjI1LCA4LCA3MSwgMjMzLCA0MiwgMjI1LCA4LCA4NSwgMjQ3LCAyNDgsIDcxLCAyNDcsIDI0OCwgNzEsIDI0NywgCi0gICAgMjQ5LCAyNDksIDE4NywgODUsIDQsIDI0NywgMjQ4LCAyNDQsIDg5LCAyMzIsIDEwNCwgNzEsIDI1MCwgMzUsIDI0NiwgMTE4LCAKLSAgICAyNTAsIDM1LCAyNTAsIDM2LCAyLCA2NywgMjQ0LCAxMDUsIDI1MSwgMTExLCA4NSwgMjUwLCAzNSwgMjUwLCAzNiwgMiwgNDMsIAotICAgIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyMzIsIDEwOCwgMTYzLCAKLSAgICAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjI0LCAyNiwgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDI1NCwgMTU1LCAyNTEsIDg4LCAyMTQsIDE2MCwgNDMsIDIyNCwgMjYsIAotICAgIDI1MSwgMjIxLCA0MywgMTYzLCA4NSwgMjUwLCAzNSwgNDQsIDE2MywgODUsIDI1MCwgMzUsIDIzNSwgMTk0LCAyNTEsIDExMywgCi0gICAgMjM1LCAxOTQsIDcxLCAyNTAsIDM1LCAyMTQsIDE2MCwgMTYzLCAyMzUsIDE5NCwgNzEsIDI1MCwgMzUsIDIzMiwgMTA4LCAKLSAgICAxNjMsIDIzNSwgMTk0LCA3MSwgMjUwLCAzNSwgMjE0LCAxNjAsIDQzLCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMTQsIAotICAgIDE2MCwgNDQsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgMjUsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAKLSAgICAyNSwgMjMyLCAxMDgsIDQzLCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMTQsIDE2MCwgMTYzLCAyNTAsIDM1LCAyMzIsIAotICAgIDEwOCwgMTYzLCAyNTAsIDM1LCA4NSwgMjMyLCAxMDgsIDQ0LCAyMTUsIDIyNSwgODUsIDIzMiwgMTA4LCA0MywgMjE1LCAKLSAgICAyMjUsIDg1LCAyMTQsIDE2MCwgNDMsIDIxNSwgMjI1LCA4NSwgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNSwgNzEsIDI1MSwgCi0gICAgMTEzLCA0MiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIxNCwgMTYwLCAKLSAgICA0MywgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMzIsIDEwOCwgNDQsIDI0NywgMjU1LCAxNjMsIDI1MSwgCi0gICAgMjIxLCA3MSwgNDIsIDIsIDY3LCAyNTEsIDIzMiwgMjMyLCAyMTMsIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDI0NywgCi0gICAgMTIwLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDIsIDQ0LCAKLSAgICAxNjMsIDI1MSwgMjIxLCAyMzMsIDg1LCAyNTAsIDM1LCA3MSwgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyNSwgNzEsIAotICAgIDQyLCAyLCAyMzIsIDEwOCwgNDMsIDIyNCwgMjUsIDcxLCA0MiwgMiwgMjMyLCAxMDgsIDQ0LCAyMjQsIDI1LCA3MSwgNDIsIAotICAgIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyNSwgNzEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyNSwgNzEsIDI1MCwgCi0gICAgMzYsIDIsIDIzMiwgMTA4LCA0MywgMjI0LCAyNSwgNzEsIDI1MCwgMzYsIDIsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNSwgNzEsIAotICAgIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyNSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNSwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMTUsIDIyNSwgMjMyLCAxMDgsIDQzLCAyMTUsIDIyNSwgNzEsIDIzMSwgODIsIDIxOCwgMjM0LCA4NSwgMjMxLCA4MiwgCi0gICAgMjE4LCAyMzQsIDcxLCAyMzEsIDgyLCA0LCAyMTgsIDIzNCwgODUsIDIzMSwgODIsIDQsIDIxOCwgMjM0LCAyMzIsIDEwOCwgCi0gICAgNDQsIDIxNSwgMjI1LCA4NSwgMjE4LCAzOCwgMiwgMjIzLCAxMzIsIDI0OSwgMjQ3LCAyMTQsIDE5NCwgMjE5LCA2MCwgMjQ5LCAKLSAgICAyMjIsIDg1LCAyMTgsIDE1NiwgNzEsIDIxOCwgMTU2LCAyMzIsIDIyOCwgMjE2LCAxMzIsIDIxOCwgMzcsIDI1MywgMjM0LCAKLSAgICAyMjgsIDcxLCAyNDgsIDM4LCAyMjgsIDcxLCAyNDksIDE5NSwgMjI2LCAxNjMsIDg1LCAyMTcsIDAsIDcxLCAyMTcsIDAsIAotICAgIDI1MiwgMTU2LCAyNTEsIDE2MywgMjUyLCAxNTYsIDkzLCAyLCAyNTAsIDEyOSwgMjUyLCAxNTYsIDkzLCAyLCAyMTEsIDE3OCwgCi0gICAgMjIxLCAyNTQsIDIxNCwgMTk1LCAyLCAyMjMsIDE2MCwgMjQ2LCA4NCwgMjQwLCAyNDMsIDI1MiwgMjIsIDcxLCAyMjAsIDIsIAotICAgIDIyNSwgMTAxLCA4NSwgMjIwLCAyLCAyMjUsIDEwMSwgMjIwLCA4NywgMjIzLCA0OSwgMjIyLCAxODcsIDI0NCwgNTUsIDI0MSwgCi0gICAgMjI4LCAyNTEsIDExMywgODUsIDQzLCAyMjUsIDcsIDIzNSwgMjQyLCA4NSwgNDQsIDIyNSwgNywgMjM1LCAyNDIsIDcxLCAKLSAgICA0MywgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIDEyMCwgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIDQ0LCAyMjUsIDcsIDIzNSwgCi0gICAgMjQyLCA3MSwgMTI0LCAyMjUsIDcsIDIzNSwgMjQyLCAyMTksIDEwMSwgMjIsIDI0OSwgMTI5LCAyNTAsIDIxOSwgNTAsIAotICAgIDIyMywgMTcyLCA1MCwgMjUxLCAyMzksIDUwLCAyNTEsIDI1LCAyNTQsIDEwMiwgMjI2LCAxNDUsIDI0OSwgMTMwLCAyNTAsIAotICAgIDExMSwgMjIzLCAzNywgMjQ5LCAxMzEsIDY0LCAyMzIsIDExOCwgMjQ5LCAxMzEsIDY0LCAyMzUsIDExNiwgMjE4LCAxNTcsIAotICAgIDIyLCAyNDksIDEzNiwgMjQ0LCAxNjgsIDg3LCAyNTQsIDI0OCwgMjIwLCA4OSwgMjQyLCAyMiwgMjIsIDIxOSwgMTg5LCAKLSAgICAyMjUsIDIyMCwgODcsIDIxMCwgMjU0LCAyMTEsIDY5LCAyMTUsIDIxNSwgMzEsIDI0MSwgMjIzLCAyMTUsIDIxNSwgMzEsIAotICAgIDIzMywgMTA3LCAyMTUsIDIxNSwgMzEsIDI0NCwgOTYsIDIxNSwgMjE1LCAzMSwgMjE2LCAxMzMsIDIxNSwgMjE1LCAzMSwgCi0gICAgMjExLCAyMzksIDIxNSwgMjE1LCAzMSwgMjEyLCA0MCwgMjE1LCAyMTUsIDMxLCAyMzAsIDExNSwgMjE1LCAyMTUsIDMxLCAKLSAgICAyNDUsIDIyMywgMjEyLCAxLCA2NCwgMjQ4LCAxOCwgNzEsIDI0MywgMjM5LCAyNDQsIDE5MCwgNzEsIDIxOSwgNzQsIDI0NCwgCi0gICAgMTkwLCA4NSwgMjE5LCA3NCwgMjQ0LCAxOTAsIDcxLCAyMTgsIDM4LCAyLCAyMjMsIDEzMiwgMjQ0LCA5MiwgMjI0LCAyMiwgCi0gICAgMjMwLCAxMjgsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgMTI4LCAyMzEsIDU0LCAyNDQsIDEzOCwgNTAsIDI0NSwgMjIzLCAKLSAgICAyMzEsIDE5MCwgNTAsIDIzNSwgMzgsIDIyMSwgMjIwLCAyMTQsIDE0NSwgMjI5LCA5MywgMjI1LCAyMCwgMjU0LCAxMiwgCi0gICAgMjE3LCA0MCwgMjQzLCA1MiwgMjUxLCAzLCAyMzMsIDE5LCAyMTMsIDE1MCwgMjMyLCAyMzgsIDIyMSwgMTkxLCAyMjIsIDE5LCAKLSAgICAyNTAsIDI0OCwgMjU0LCA0MiwgMjI1LCA1MiwgNzEsIDI1MCwgMTE3LCAyMzQsIDc4LCA3MSwgMjUwLCAxMTcsIDIyNCwgMTQsIAotICAgIDcxLCAyNTAsIDExNywgMjIyLCAxOTUsIDcxLCAyNTAsIDExNywgMjUxLCAyMzEsIDcxLCAyNTAsIDExNywgMjM0LCAzMCwgCi0gICAgNzEsIDI1MCwgMTE3LCAyMjUsIDIzMSwgODUsIDI1MCwgMTE3LCAyMzQsIDc4LCA4NSwgMjUwLCAxMTcsIDIyNCwgMTQsIDg1LCAKLSAgICAyNTAsIDExNywgMjIyLCAxOTUsIDg1LCAyNTAsIDExNywgMjUxLCAyMzEsIDg1LCAyNTAsIDExNywgMjM0LCAzMCwgODUsIAotICAgIDI1MCwgMTE3LCAyMjUsIDIzMSwgODUsIDIxOSwgMTYsIDIxOCwgNTAsIDcxLCAyNDEsIDIyOCwgMjE4LCA1MCwgNzEsIDI0NywgCi0gICAgMjQ5LCAyMTgsIDUwLCA4NSwgMjQ5LCAyNDUsIDIxOCwgNTAsIDcxLCAyMTksIDE2LCAyMTgsIDUwLCA4NSwgMjQxLCAyMjgsIAotICAgIDIxOCwgNTAsIDg1LCAyNDcsIDI0OSwgMjE4LCA1MCwgNzEsIDI0OSwgMjQ1LCAyMTgsIDUwLCAyNDAsIDI0MywgMjE4LCAKLSAgICAyMzgsIDIyNCwgMjIsIDIyOCwgNDcsIDI0NSwgMTg5LCAyMjgsIDQ3LCAyNTIsIDczLCAyNDUsIDE4OSwgMjI4LCA0MiwgCi0gICAgMjUyLCA3MywgMjE5LCAxMTgsIDIyOCwgNDIsIDIzMCwgNTcsIDI0NCwgNjYsIDUwLCAyMzAsIDU3LCAyMjksIDE4OCwgNTAsIAotICAgIDIzMCwgNTcsIDIyMCwgNzYsIDUwLCAyMTIsIDksIDE4OCwgMjQ5LCAxMzAsIDI0NSwgMjIwLCAxODgsIDI0OSwgMTMwLCAKLSAgICAyMTQsIDE3MSwgMjIzLCAxMTIsIDg3LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ4LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQ3LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ2LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQ1LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQ0LCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyMTUsIDQzLCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIDMxLCAyMTUsIDQyLCAyMjUsIDM0LCAyMjMsIDExMiwgMTYsIAotICAgIDMxLCAyNDMsIDUwLCAyMzEsIDEzOCwgODUsIDIxNCwgMTcxLCAyMjMsIDExMiwgODcsIDIyMywgMTEzLCAyMjYsIDIwLCA4NywgCi0gICAgMjI1LCAyNTIsIDIyNiwgMjAsIDg3LCAyMjUsIDE3NCwgMjI2LCAyMCwgNTAsIDIxMSwgMjU1LCA4NywgMjQ3LCAyNDEsIAotICAgIDI0NCwgMTg5LCAyNDcsIDI0MSwgMjQ0LCAxODgsIDI0NywgMjQxLCAyNDQsIDE4NywgMjQ3LCAyNDEsIDI0NCwgMTg2LCAKLSAgICAyNDcsIDI0MSwgMjQ0LCAxODUsIDI0NywgMjQxLCAyNDQsIDE4NCwgNzEsIDI1MCwgMzYsIDIsIDU5LCAyMjIsIDI1MSwgNzEsIAotICAgIDI1MCwgMzYsIDIsIDExMywgMjQ3LCAxMTgsIDg1LCAyNTAsIDM2LCAyLCA3MSwgNTksIDIyMiwgMjUxLCA4NSwgMjUwLCAzNiwgCi0gICAgMiwgMTEzLCA3MSwgMjQ3LCAxMTgsIDIzMCwgMTQyLCAzMSwgMjExLCA2OSwgMjMwLCAxNDIsIDMxLCAyMTAsIDI1MywgMjQ3LCAKLSAgICAyMjQsIDMxLCAyNDIsIDEzMSwgMjExLCA2OSwgMjQ3LCAyMjQsIDMxLCAyMzMsIDEzLCAyMTAsIDI1MywgMjQ3LCAyMjQsIAotICAgIDMxLCAyMzMsIDEzLCAyMTEsIDY5LCAyNDcsIDIyNCwgMzEsIDI0MiwgMTMxLCAyMTAsIDI1MywgNzEsIDI0NCwgNzMsIDg1LCAKLSAgICAyNDQsIDczLCAyNDIsIDIyLCAyMiwgMjI1LCAxMDQsIDI1NCwgMTIwLCAyNDksIDEyOCwgMjE3LCAyMzUsIDIxOCwgMTY0LCAKLSAgICA2NCwgMjU0LCAyMjYsIDIyMSwgMjA2LCAyNTQsIDE2OSwgMjQ0LCA1MSwgMjQzLCA2MCwgMjE4LCAxNjQsIDY0LCAyNDEsIAotICAgIDIwMiwgMjUzLCAxOTksIDg3LCAyNDQsIDYyLCAyMjYsIDEyNiwgNzEsIDIxOCwgMTU2LCAxMzQsIDIzMiwgMjA4LCAyNDksIAotICAgIDE3NSwgMjIyLCAyNTEsIDEzNCwgMjMyLCAyMDgsIDI0OSwgMTc1LCAyMzMsIDQ2LCAyMTIsIDUwLCA1MCwgMTI1LCAyMTMsIAotICAgIDEzMCwgNTAsIDI0NiwgMTEwLCAyNDQsIDEzOCwgNTAsIDI0NiwgMTEwLCAyMzEsIDE5MCwgNTAsIDIzNSwgMjAzLCAyNDQsIAotICAgIDEzOCwgMjIsIDIzMSwgMTkwLCA1MCwgMjMxLCAxOTAsIDIyLCAyNDQsIDEzOCwgNTAsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgCi0gICAgNTAsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgMjIsIDIzMSwgMTkwLCAyMiwgMjQ0LCAxMzgsIDUwLCA2NywgMjMxLCAxOTAsIAotICAgIDIsIDIxOCwgMTAzLCA1MCwgMjAzLCAyMzEsIDE5MCwgMiwgMjE4LCAxMDMsIDUwLCAyMzEsIDgyLCA3MSwgMjUwLCAzNSwgCi0gICAgMjMxLCA4MiwgODUsIDI1MCwgMzUsIDIzMSwgODIsIDQsIDcxLCAyNTAsIDM1LCAyMzEsIDE1MywgODcsIDI0NywgMTY3LCAKLSAgICA4NywgMjE0LCAxNjksIDIyNSwgMjUxLCA4NywgMjQ5LCAyMzEsIDI0MywgMjI0LCAyMTQsIDE0MSwgMjI5LCA4OCwgMjUwLCAKLSAgICAxNjEsIDIyNiwgNjEsIDIzNSwgNDQsIDIxMywgMTg1LCAyNTAsIDkzLCA4NSwgMjMwLCAxMjksIDIzMiwgMjI1LCAyMjAsIAotICAgIDExMiwgMjIwLCAxNDcsIDIyNCwgNSwgMjIwLCAxMzAsIDIxOSwgNTUsIDI1MiwgMTU5LCAyNTIsIDEyNiwgOTIsIDIzNCwgCi0gICAgMTM4LCA3MSwgMjQ2LCA5MywgMjMxLCAxODUsIDcxLCAyNDYsIDkzLCAyMzQsIDc4LCA4NSwgMjQ2LCA5MywgMjMxLCAxODUsIAotICAgIDg1LCAyNDYsIDkzLCAyMzQsIDc4LCAyMTksIDYxLCAyMTEsIDIzMCwgMjE5LCA2NCwgMjE4LCAzOCwgMjUyLCA1MSwgMjQ5LCAKLSAgICAyNDcsIDIyMywgMTU5LCA4NSwgMjE5LCA2MCwgMjE2LCAxMzQsIDI0OSwgMjQ4LCAyMiwgMjIzLCAxNTksIDIxNSwgOTQsIAotICAgIDcxLCAyMjAsIDIsIDIyNSwgMTAxLCAyMTUsIDk0LCA4NSwgMjIwLCAyLCAyMjUsIDEwMSwgNzEsIDI0NywgMjQ5LCAyMzYsIAotICAgIDAsIDIxOCwgMjM0LCAyNDksIDEyNSwgMjMzLCA5MSwgMjQ3LCAxOTMsIDI1MCwgMjQ0LCAyMjYsIDE2NiwgMjI1LCAxMDQsIAotICAgIDI1MCwgMjQ1LCAyMTksIDg4LCAyNDEsIDIxMiwgMiwgNzEsIDI0OSwgMTMwLCAzNywgMjQ5LCAxMjUsIDIzMywgOTEsIDI1MCwgCi0gICAgMTUzLCAyMjgsIDc1LCAyNDUsIDEyNCwgMjU0LCAxNDEsIDIyNiwgMTkxLCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDg1LCAKLSAgICAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDcxLCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTEsIDg1LCAKLSAgICA0MywgMjMzLCA5MiwgMjMxLCA1MywgNzEsIDQzLCAyMzMsIDkyLCAyMzEsIDUzLCAyNDYsIDg5LCAyMTksIDgyLCA1MCwgCi0gICAgMTE0LCA3MSwgMjQ2LCAxMDUsIDIxNSwgMjI1LCA0MywgMjUwLCAwLCAyNDUsIDEyNCwgOTIsIDIyMSwgMjU0LCAyNDQsIAotICAgIDE3NSwgMjQ3LCAyNTUsIDIzNiwgMCwgNzEsIDI1MCwgMzYsIDIzNiwgMCwgODUsIDIxOCwgMjM0LCA4NSwgMjE1LCAxOTIsIAotICAgIDIyMywgNjAsIDQzLCAyNDUsIDEyMywgMjIzLCA2MCwgNDMsIDI0NSwgMTIyLCAyNTMsIDIxMSwgMTYsIDMxLCAyMTQsIDE0NSwgCi0gICAgMTE0LCAyNTAsIDM2LCAyLCAyMTgsIDEwMywgMjIsIDExMywgMTcwLCA0OCwgMjI1LCAxODksIDIyMiwgMjQ4LCAyMzUsIAotICAgIDIwNSwgMjI1LCAxODksIDIzMywgNDMsIDIzNSwgMjA1LCAyMjUsIDE4OSwgMjM1LCAxOTMsIDIyNSwgMTg5LCA4NSwgMjQ5LCAKLSAgICAxMzEsIDIyNiwgMTk3LCAyMjAsIDI5LCAyMjAsIDE3LCAyMTksIDIyOSwgMjUwLCA2MSwgMjUwLCAyMjYsIDI0MSwgMTU3LCAKLSAgICAyMTksIDEyNiwgMjQzLCA2MSwgMjExLCAyMzAsIDI0MCwgMjIwLCAyNDMsIDYxLCAyLCAyNDIsIDEyLCAyMzEsIDE3MywgMTYsIAotICAgIDMxLCAyMzIsIDIyOSwgMjMwLCAxMTUsIDIxNCwgMTk1LCAyMjYsIDE5NywgMjQyLCAxMjIsIDI0NCwgMTIsIDI0NCwgNzQsIAotICAgIDIzNiwgMCwgMjQxLCA1OSwgMjQ0LCAxMjksIDIyMiwgMTQsIDQyLCAyNDQsIDExLCAyNDksIDE1OSwgMjE5LCAxMDQsIDI0MCwgCi0gICAgMTEyLCAyMTksIDEwNywgMjI1LCAxNjgsIDIsIDI1MiwgMTU5LCAyMTYsIDI0MiwgMjM1LCAxMzEsIDI1MiwgMTQ2LCA4NywgCi0gICAgMjQxLCAyMzEsIDI0MiwgMTMzLCA4NywgMjQzLCAyMzIsIDIyNCwgMTQyLCAyNDksIDEwMywgMjI2LCAxOTcsIDg1LCAyMTgsIAotICAgIDIzNCwgNzEsIDI0NCwgNzQsIDIsIDIwMywgMjMwLCAyMjQsIDg1LCAyMTgsIDEwNCwgMjE0LCAxNjAsIDI1MSwgMjE3LCAKLSAgICAyMjEsIDE5MywgODUsIDIyMSwgMTkzLCAyMzIsIDEwOCwgMjUxLCAyMTcsIDIyMSwgMTkzLCA3MSwgMjIxLCAxOTMsIDcxLCAKLSAgICAxMTQsIDI1MCwgMTMwLCA3OCwgMjE3LCAxLCAyMzIsIDE1NCwgNTAsIDIxNywgNTMsIDI0NiwgODgsIDI1NCwgMTkxLCAyNDUsIAotICAgIDExOSwgMjIzLCAxNTcsIDI0NCwgODUsIDIyMywgMTU3LCAyNDIsIDE1LCAyMTMsIDE3NCwgMjQyLCAxNSwgMjExLCAxOTgsIAotICAgIDI0MiwgMTUsIDIzMiwgMTA4LCA0NCwgMjI1LCAxOTgsIDIyNSwgMTk4LCAyMTQsIDE2MCwgNDQsIDIyNSwgMTk4LCA3MSwgCi0gICAgMjI4LCAyMzAsIDg1LCAyMjgsIDIzMCwgMjUwLCAxMzAsIDc4LCAxMTQsIDI1MCwgMTMwLCA3OCwgMjMwLCA4NCwgMjExLCAKLSAgICAxNzgsIDExNCwgMjMwLCA4NCwgMjExLCAxNzgsIDI1MiwgMTU2LCAyMTEsIDE3OCwgMTE0LCAyNTIsIDE1NiwgMjExLCAxNzgsIAotICAgIDIyNiwgMTI2LCAyNiwgMjQ5LCAxMzAsIDExNCwgMjYsIDI0OSwgMTMwLCAyMDQsIDI1MCwgMTc1LCAyNDksIDEzMCwgMTE0LCAKLSAgICAyMDQsIDI1MCwgMTc1LCAyNDksIDEzMCwgNywgMjQ5LCAxMzAsIDIyMCwgOTEsIDcxLCA3LCAyNDksIDEzMCwgMjI2LCAxMjYsIAotICAgIDcsIDI0OSwgMTMwLCAyMzEsIDE4NywgMjQ5LCAxMzAsIDIxOCwgMTU3LCA2NCwgMjQ4LCAxNDksIDI0NCwgMTEsIDIxNywgCi0gICAgMTUsIDI1MywgMjE2LCAyNDQsIDExLCAyNTIsIDE1NywgMjUzLCAyMTYsIDExNCwgMjQ0LCAxMSwgMjUyLCAxNTcsIDI1MywgCi0gICAgMjE2LCAyNDQsIDExLCAyNDksIDI0MywgMjUzLCAyMTYsIDg1LCAyNDQsIDExLCAyMjUsIDksIDIxOCwgMTU2LCA3MSwgMjQ0LCAKLSAgICAxMSwgMjI1LCA5LCAyMTgsIDE1NiwgMjE5LCAxMSwgMjE4LCAxMTEsIDIyNiwgMTI2LCA3MSwgMjE4LCAxNTYsIDM3LCA3MSwgCi0gICAgMjE4LCAxNTYsIDIwNCwgMjUwLCAxNzUsIDg1LCAyMTgsIDE1NiwgODUsIDI1MCwgMTc1LCA3MSwgMjE4LCAxNTYsIDIyNiwgCi0gICAgMTI2LCA4NSwgMjE4LCAxNTYsIDExNCwgMjI2LCAxMjYsIDg1LCAyMTgsIDE1NiwgMjI1LCA2MCwgMjE4LCAxNTYsIDIyMCwgCi0gICAgOTEsIDcxLCAyMTgsIDE1NiwgMTE0LCAyNTMsIDIxNiwgMjA0LCAyNTAsIDE3NSwgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMTgsIAotICAgIDI0NCwgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMjUsIDksIDg1LCAyMTgsIDE1NiwgMjQ1LCAxOTMsIDIyNSwgOSwgMjI1LCA2MCwgCi0gICAgMjE4LCAxNTYsIDIxOSwgMTI1LCAyMjUsIDksIDg1LCAyMTgsIDE1NiwgMjQ1LCAxOTMsIDIyNSwgOSwgMjIzLCAxMTQsIDg1LCAKLSAgICAyMTgsIDE1NiwgMTE0LCAyNDUsIDE5MywgMjI1LCA5LCAyMjMsIDExNCwgODUsIDIxOCwgMTU2LCAyMTUsIDc3LCAyMjUsIDksIAotICAgIDg1LCAyMTgsIDE1NiwgMjE5LCAxMjAsIDIyNSwgOSwgMjUzLCAyMTYsIDIxNywgMTUsIDI1MywgMjE2LCAyMDQsIDI1MCwgCi0gICAgMTc1LCAyMTcsIDE1LCAyNTMsIDIxNiwgMTE0LCAyMTcsIDE1LCAyNTMsIDIxNiwgMjE5LCAxMjUsIDIyNSwgMTU3LCA4NSwgCi0gICAgMjIsIDcxLCAyNDQsIDU0LCA4NSwgMjQ0LCA1NCwgNzEsIDI0NCwgNTQsIDI0NSwgMTkzLCAyMjUsIDE1NywgMjI2LCAxMjYsIAotICAgIDg1LCAyNDQsIDU0LCAzNywgMjA0LCAyNTAsIDE3NSwgMjQ1LCAxOTMsIDIyNSwgOSwgMjE4LCAxNTYsIDExNCwgMjE3LCAxNSwgCi0gICAgMjI1LCA2MCwgMjUzLCAyMTYsIDIxOSwgNjIsIDIxNiwgMTA1LCAyMTUsIDIxOCwgMjE5LCA2MiwgMTE0LCAyNTAsIDExNCwgCi0gICAgMjE5LCA2MiwgMjE5LCAxMywgMTE0LCAyMTksIDEzLCAyNTIsIDE1NywgMjUzLCAyMTYsIDI0NSwgMTkzLCAyMTcsIDE1LCAKLSAgICAyMjQsIDE3MSwgMjUzLCAyMTYsIDExNCwgMjQ1LCAxOTMsIDIxNywgMTUsIDIyNCwgMTcxLCAyNTMsIDIxNiwgMjQ5LCAxMzEsIAotICAgIDc4LCAyMjAsIDkxLCA3MSwgMjUwLCAzNSwgMTUyLCA5MiwgMjQ5LCAxMzEsIDc4LCAyMzIsIDEwOCwgNDQsIDI0NiwgODYsIAotICAgIDcxLCAyMTgsIDIzNCwgMjE0LCAxNjAsIDQ0LCAyNDYsIDg2LCA3MSwgMjE4LCAyMzQsIDIzMiwgMTA4LCA0NCwgMjIwLCA5MSwgCi0gICAgNzEsIDIxOCwgMjM0LCAyMTQsIDE2MCwgNDQsIDIyMCwgOTEsIDcxLCAyMTgsIDIzNCwgODUsIDIyNCwgMTMsIDE2NCwgMjI2LCAKLSAgICAxNDcsIDcxLCAyMjQsIDEzLCAxNjQsIDIyNiwgMTQ3LCA3MSwgMjQ1LCAzMSwgMTY0LCAyMjYsIDE0NywgODUsIDI0NywgCi0gICAgMjQ5LCAyMzAsIDE4MiwgNzEsIDIxMSwgMTc4LCAxMTQsIDI0NSwgMzEsIDE2NCwgODcsIDE5MiwgNjcsIDEzMCwgMjMxLCAKLSAgICA4MiwgNjcsIDEzMCwgMTE0LCA2NywgMTMwLCAxMTQsIDIxOSwgMTU1LCAyMTUsIDk0LCAyNDksIDIyMCwgMjIzLCAyNTQsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgMjE5LCAxNTUsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCA1MiwgCi0gICAgMjE1LCA5NCwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDUyLCAyNDksIDIyMCwgMjIzLCAyNTQsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgMTIxLCAyMTksIDE1NSwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAKLSAgICAxMTQsIDEyMSwgNTIsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMjQ5LCA5MSwgMjE4LCAxNDAsIDIyNiwgCi0gICAgMTUsIDUsIDIyNiwgMTQ3LCAxMTQsIDI0NSwgMzEsIDE2NCwgMjI2LCAxNDcsIDExNCwgMjQxLCAyMjgsIDI0NSwgMzEsIAotICAgIDE2NCwgMjI2LCAxNDcsIDExNCwgODUsIDI0MSwgMjI3LCAyMjIsIDE4NywgMTE0LCA4NSwgMjQxLCAyMjgsIDI1MSwgMTEzLCAKLSAgICAyNDQsIDU1LCAyNDEsIDIyNywgMjIyLCAxODcsIDI0NCwgNTUsIDI0MSwgMjI4LCAyNTEsIDExMywgMjMxLCA4MiwgNDMsIAotICAgIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDQ0LCAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyNDQsIDYzLCA0MywgCi0gICAgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgMjQ0LCA2MywgNDQsIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDIzMywgCi0gICAgNDIsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDIzMSwgODIsIDIyMiwgMjQ3LCAyNTQsIDExMCwgMjUxLCAxNTgsIAotICAgIDIyNiwgMTQ3LCAxMTQsIDIzMywgNDIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCAyMjIsIDI0NywgCi0gICAgMjU0LCAxMTAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDIzMywgNDIsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAKLSAgICAxNDcsIDExNCwgMjIyLCAyNDcsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDE5MiwgNDMsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMjUxLCAxNTgsIDIyNiwgMTQ3LCAxOTIsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU4LCAyMjYsIDE0NywgCi0gICAgMjMxLCA4MiwgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjYsIDE0NywgMjMxLCA4MiwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAKLSAgICAyMjYsIDE0NywgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxMTAsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTA1LCAyNDcsIAotICAgIDIwNCwgMTUyLCAzNywgMjEsIDE1OCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxNjEsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgCi0gICAgMTg5LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDE5NCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxOTgsIDI0NywgMjA0LCAKLSAgICAxNTIsIDM3LCAyMSwgMTk1LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDIwMCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDU0LCAyMTYsIAotICAgIDI0NywgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDExMCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDEwNSwgMjQ3LCAyMDQsIDM3LCAKLSAgICAzNSwgMjEsIDE1OCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE4OSwgMjQ3LCAKLSAgICAyMDQsIDM3LCAzNSwgMjEsIDE5NCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDE5OCwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIAotICAgIDE5NSwgMjQ3LCAyMDQsIDM3LCAzNSwgMjEsIDIwMCwgMjQ3LCAyMDQsIDM3LCAzNSwgNTQsIDIxNiwgMjQ3LCAyNDcsIDIwNCwgCi0gICAgMTUyLCAzNywgMzUsIDIxLCAxMTAsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDEwNSwgMjQ3LCAyMDQsIDE1MiwgMzcsIAotICAgIDM1LCAyMSwgMTU4LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxNjEsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIAotICAgIDE4OSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTk0LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxOTgsIDI0NywgCi0gICAgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMjAwLCAyNDcsIDIwNCwgMTUyLCAKLSAgICAzNywgMzUsIDU0LCAyMTYsIDI0NywgMTE0LCAyMTEsIDI0NiwgOTcsIDc0LCAxMTQsIDk2LCA1MCwgMTE0LCAyMzAsIDE4MiwgCi0gICAgNTAsIDExNCwgMjQ3LCAxNjksIDUwLCAxMTQsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMTE0LCA5NywgNzQsIDExNCwgMjI4LCAKLSAgICA1NiwgMjQ1LCAyMjAsIDc0LCAyNDYsIDk4LCAyMjUsIDExLCA5NywgNzQsIDExNCwgMjIyLCAxODQsIDk3LCA3NCwgMjE1LCAKLSAgICAyMjQsIDk3LCA3NCwgMTE0LCAyMTUsIDIyNCwgOTcsIDc0LCAyNDgsIDE1NSwgMjE1LCAyMjQsIDk3LCA3NCwgMTE0LCAyNDgsIAotICAgIDE1NSwgMjE1LCAyMjQsIDk3LCA3NCwgODUsIDk3LCA3NCwgMjE2LCAxNDQsIDIxNiwgMTIsIDk3LCAyNTMsIDI0OSwgMjE2LCAKLSAgICAxNDQsIDI1MSwgMTczLCA5NywgMjUzLCAyNDksIDg1LCA5NywgMjUzLCAyNDksIDExNCwgODUsIDI0OSwgOTEsIDI0NiwgCi0gICAgMTA0LCAyMiwgOTcsIDc0LCAxMTQsIDg1LCAyNDksIDkxLCAyMTQsIDE1MywgMjIsIDk3LCA3NCwgMjE4LCAyMzEsIDg1LCAKLSAgICA5NywgNzQsIDExNCwgMjQ5LCAyMDYsIDg1LCA5NywgNzQsIDIyMiwgMjQ2LCA3MSwgOTcsIDc0LCAyMzMsIDQxLCA3MSwgOTcsIAotICAgIDc0LCAyNTIsIDE4MywgMjIwLCA5MSwgNzEsIDk3LCA3NCwgMjQzLCAyNDEsIDIyMCwgOTEsIDcxLCA5NywgNzQsIDExNCwgCi0gICAgMjMyLCAxMDgsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAxMTQsIDIxNCwgMTYwLCAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMjI4LCAKLSAgICA0OSwgMjMyLCAxMDgsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAyNDksIDk5LCAyMzIsIDEyMywgMjI4LCA0OSwgMjE0LCAxNjAsIAotICAgIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAzNywgMTE0LCA3MSwgOTcsIDc0LCAyMTEsIDI1MiwgOTcsIDc0LCAyNTEsIDIyMCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyNTEsIDIyMCwgOTcsIDc0LCAyNTEsIDIyMCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAKLSAgICAxMTQsIDI1MSwgMjIwLCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDExNCwgMjUxLCAyMjAsIDk3LCA3NCwgMTE0LCAyNTEsIAotICAgIDIyMCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMTcsIDE3LCA5NywgNzQsIDExNCwgMjE3LCAxNiwgOTcsIDc0LCAyMTIsIAotICAgIDE4LCA5NywgNzQsIDExNCwgMjEyLCAxOCwgOTcsIDc0LCAyMjYsIDE3MiwgOTcsIDc0LCA1MiwgMjQ5LCA5OSwgMjMyLCAKLSAgICAxMjMsIDEzNCwgMjQ3LCAyMTQsIDI1NCwgMTA5LCA3MSwgMjE1LCAyMjYsIDI0OSwgMTg3LCA0LCA3MSwgMjE1LCAyMjUsIAotICAgIDIyNSwgMTcxLCAyMDQsIDIxOCwgNjMsIDIwNCwgMjE4LCAyMSwgNDMsIDIyMiwgOTAsIDI1MiwgMTczLCAyNDgsIDYwLCA0NCwgCi0gICAgMjIyLCA5MCwgMjUyLCAxNzMsIDI0OCwgNjAsIDE3NywgMiwgNTksIDIzNSwgMjE1LCAyMjMsIDUwLCAyMTksIDQ3LCAyMjQsIAotICAgIDIwMSwgMjE4LCA2MywgMjE4LCAyMiwgMjI0LCAyMDEsIDIxOSwgNDYsIDY3LCAyNTIsIDE0MSwgMiwgMjAzLCA5MSwgMTEsIAotICAgIDIyMiwgMjI4LCAyNDcsIDI1NCwgMTk5LCAyNDcsIDE2OCwgMTEsIDI0NCwgMTc1LCAyNDcsIDI1NCwgOTIsIDIzMiwgMTQ2LCAKLSAgICAyNTQsIDExOCwgOTIsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgNzEsIDI0NywgMjQ5LCAyLCAyNTAsIDE3MywgMjQ3LCAxMjAsIAotICAgIDIyLCAyLCAyNDcsIDEyMCwgMjQ1LCAxNzAsIDY0LCAyMjYsIDE3MCwgMjE0LCAxNTIsIDIzMiwgMTA4LCA0NCwgMjQ5LCAKLSAgICAxNjEsIDIsIDI0NywgMTIwLCAyMTQsIDE2MCwgNDMsIDI0OSwgMTYxLCAyLCAyNDcsIDEyMCwgNDMsIDIyNiwgMTI4LCAyMzUsIAotICAgIDY2LCA0NCwgMjI2LCAxMjgsIDIzNSwgNjYsIDI0MywgMjI5LCAyMjYsIDEyOCwgMjM1LCA2NiwgMjMzLCA4NSwgMTIwLCAKLSAgICAyMTcsIDg3LCAyMzMsIDg1LCAxMjQsIDIxNywgODcsIDQzLCAyMiwgNDQsIDUyLCAyMTUsIDkzLCA0MywgMjIsIDQ0LCAyMTcsIAotICAgIDg3LCA0MywgMjMwLCA4NywgMTk5LCA0NCwgMjE3LCA4NywgMTk5LCA0MywgMjE3LCA4NywgMTIwLCAyMTcsIDg4LCAyLCAKLSAgICAyNTAsIDM2LCA0OCwgMjMyLCAxMDUsIDI0NywgMTczLCAyNTEsIDc4LCAyMDMsIDIyMiwgMTMzLCA3MSwgMjQ5LCAyMDUsIAotICAgIDI0NywgMjQ4LCA3MSwgMjQ5LCAyMDUsIDI0NywgMjQ5LCAyLCAxNDAsIDIxNiwgMTE0LCA3MSwgMjQ5LCAyMDUsIDI0NywgCi0gICAgMjQ5LCAyLCA5NywgMjE2LCAxMTQsIDcxLCA0MiwgMiwgMTQwLCAyMTYsIDExNCwgNzEsIDQyLCAyLCA5NywgMjE2LCAxMTQsIAotICAgIDExLCA0MywgNzEsIDQyLCAxMjcsIDExLCA0NCwgNzEsIDQyLCAxMjcsIDExLCA0MywgMjU0LCAxMTAsIDEyNywgMTEsIDQ0LCAKLSAgICAyNTQsIDExMCwgMTI3LCAxMSwgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCAxMSwgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCAxMSwgCi0gICAgNDMsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMTEsIDQ0LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDExLCA0MywgCi0gICAgMjQ0LCA2MywgMjI2LCAzLCAxMSwgNDQsIDI0NCwgNjMsIDIyNiwgMywgMjE0LCAxNTMsIDIyNCwgMjQsIDc0LCAyNDYsIAotICAgIDEwNCwgMjI0LCAyNCwgNzQsIDI1NCwgODgsIDI0MywgOTgsIDI1MCwgMzYsIDc0LCAyNTAsIDIsIDI0MywgOTgsIDI1MCwgCi0gICAgMzYsIDc0LCA0NCwgODAsIDIsIDM3LCAyMjUsIDIyLCAxOTksIDE0MCwgNzQsIDE5OSwgOTcsIDc0LCAxOTksIDQzLCA0NCwgCi0gICAgNzQsIDE5OSwgMTQwLCA1MiwgNzQsIDE5OSwgOTcsIDUyLCA3NCwgMTk5LCA0MywgNDQsIDUyLCA3NCwgMTk5LCAxNDAsIDgwLCAKLSAgICAyNDMsIDI0MywgMTMwLCAxOTksIDk3LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTk5LCAxNDAsIDUyLCA4MCwgMjQzLCAyNDMsIAotICAgIDEzMCwgMTk5LCA5NywgNTIsIDgwLCAyNDMsIDI0MywgMTMwLCAxOTksIDk3LCAyMTgsIDIzMCwgNzQsIDQ2LCA0NywgMjUxLCAKLSAgICAyMTUsIDQ2LCA0NywgMjQ3LCAxMTcsIDQ2LCA0NywgMjQ2LCAyNDUsIDQ2LCA0NywgMjQ3LCAxMTYsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODEsIDQ2LCA0NywgMjQ3LCA1MiwgNDYsIDQ3LCAyNDYsIDI0NCwgNDYsIDQ3LCAyNDcsIDExNSwgNDYsIDQ3LCAyNDYsIAotICAgIDE0OSwgNDYsIDQ3LCAyNDcsIDIwLCA0NiwgNDcsIDI0NiwgMjEyLCA0NiwgNDcsIDI0NywgODMsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODAsIDQ2LCA0NywgMjQ3LCA1MSwgNDYsIDQ3LCAyNDYsIDI0MywgNDYsIDQ3LCAyNDcsIDExNCwgNDYsIDQ3LCAyNDYsIAotICAgIDEzMywgNDYsIDQ3LCAyNDcsIDQsIDQ2LCA0NywgMjQ2LCAxOTYsIDQ2LCA0NywgMjQ3LCA2NywgNDYsIDQ3LCAyNDYsIDE2NCwgCi0gICAgNDYsIDQ3LCAyNDcsIDM1LCA0NiwgNDcsIDI0NiwgMjI3LCA0NiwgNDcsIDI0NywgOTgsIDQ2LCA0NywgMjQ2LCAxNDgsIDQ2LCAKLSAgICA0NywgMjQ3LCAxOSwgNDYsIDQ3LCAyNDYsIDIxMSwgNDYsIDQ3LCAyNDcsIDgyLCA0NiwgNDcsIDI0NiwgMTc5LCA0NiwgNDcsIAotICAgIDI0NywgNTAsIDQ2LCA0NywgMjQ2LCAyNDIsIDQ2LCA0NywgMjQ3LCAxMTMsIDQ2LCA0NywgMjQ2LCAxMjUsIDQ2LCA0NywgCi0gICAgMjQ2LCAyNTIsIDQ2LCA0NywgMjQ2LCAxODgsIDQ2LCA0NywgMjQ3LCA1OSwgNDYsIDQ3LCAyNDYsIDE1NiwgNDYsIDQ3LCAKLSAgICAyNDcsIDI3LCA0NiwgNDcsIDI0NiwgMjE5LCA0NiwgNDcsIDI0NywgOTAsIDQ2LCA0NywgMjQ2LCAxNDAsIDQ2LCA0NywgCi0gICAgMjQ3LCAxMSwgNDYsIDQ3LCAyNDYsIDIwMywgNDYsIDQ3LCAyNDcsIDc0LCA0NiwgNDcsIDI0NiwgMTcxLCA0NiwgNDcsIAotICAgIDI0NywgNDIsIDQ2LCA0NywgMjQ2LCAyMzQsIDQ2LCA0NywgMjQ3LCAxMDUsIDQ2LCA0NywgMjQ2LCAxMzIsIDQ2LCA0NywgCi0gICAgMjQ3LCAzLCA0NiwgNDcsIDI0NiwgMTk1LCA0NiwgNDcsIDI0NywgNjYsIDQ2LCA0NywgMjQ2LCAxNjMsIDQ2LCA0NywgMjQ3LCAKLSAgICAzNCwgNDYsIDQ3LCAyNDYsIDIyNiwgNDYsIDQ3LCAyNDcsIDk3LCA0NiwgNDcsIDI0NiwgMTQ3LCA0NiwgNDcsIDI0NywgMTgsIAotICAgIDQ2LCA0NywgMjQ2LCAyMTAsIDQ2LCA0NywgMjQ3LCA4MSwgNDYsIDQ3LCAyNDYsIDE3OCwgNDYsIDQ3LCAyNDcsIDQ5LCA0NiwgCi0gICAgNDcsIDI0NiwgMjQxLCA0NiwgNDcsIDI0NywgMTEyLCA0NiwgNDcsIDI0NiwgMTIxLCA0NiwgNDcsIDI0NiwgMjQ4LCA0NiwgCi0gICAgNDcsIDI0NiwgMTg0LCA0NiwgNDcsIDI0NywgNTUsIDQ2LCA0NywgMjQ2LCAxNTIsIDQ2LCA0NywgMjQ3LCAyMywgNDYsIDQ3LCAKLSAgICAyNDYsIDIxNSwgNDYsIDQ3LCAyNDcsIDg2LCA0NiwgNDcsIDI0NiwgMTM2LCA0NiwgNDcsIDI0NywgNywgNDYsIDQ3LCAyNDYsIAotICAgIDE5OSwgNDYsIDQ3LCAyNDcsIDcwLCA0NiwgNDcsIDI0NiwgMTY3LCA0NiwgNDcsIDI0NywgMzgsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzAsIDQ2LCA0NywgMjQ3LCAxMDEsIDQ2LCA0NywgMjQ2LCAxMjgsIDQ2LCA0NywgMjQ2LCAyNTUsIDQ2LCA0NywgMjQ2LCAKLSAgICAxOTEsIDQ2LCA0NywgMjQ3LCA2MiwgNDYsIDQ3LCAyNDYsIDE1OSwgNDYsIDQ3LCAyNDcsIDMwLCA0NiwgNDcsIDI0NiwgCi0gICAgMjIyLCA0NiwgNDcsIDI0NywgOTMsIDQ2LCA0NywgMjQ2LCAxNDMsIDQ2LCA0NywgMjQ3LCAxNCwgNDYsIDQ3LCAyNDYsIAotICAgIDIwNiwgNDYsIDQ3LCAyNDcsIDc3LCA0NiwgNDcsIDI0NiwgMTc0LCA0NiwgNDcsIDI0NywgNDUsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzcsIDQ2LCA0NywgMjQ3LCAxMDgsIDQ2LCA0NywgMjQ2LCAxMjQsIDQ2LCA0NywgMjQ2LCAyNTEsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODcsIDQ2LCA0NywgMjQ3LCA1OCwgNDYsIDQ3LCAyNDYsIDE1NSwgNDYsIDQ3LCAyNDcsIDI2LCA0NiwgNDcsIDI0NiwgCi0gICAgMjE4LCA0NiwgNDcsIDI0NywgODksIDQ2LCA0NywgMjQ2LCAxMzksIDQ2LCA0NywgMjQ3LCAxMCwgNDYsIDQ3LCAyNDYsIAotICAgIDIwMiwgNDYsIDQ3LCAyNDcsIDczLCA0NiwgNDcsIDI0NiwgMTcwLCA0NiwgNDcsIDI0NywgNDEsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMzMsIDQ2LCA0NywgMjQ3LCAxMDQsIDQ2LCA0NywgMjQ2LCAxMzEsIDQ2LCA0NywgMjQ3LCAyLCA0NiwgNDcsIDI0NiwgCi0gICAgMTk0LCA0NiwgNDcsIDI0NywgNjUsIDQ2LCA0NywgMjQ2LCAxNjIsIDQ2LCA0NywgMjQ3LCAzMywgNDYsIDQ3LCAyNDYsIAotICAgIDIyNSwgNDYsIDQ3LCAyNDcsIDk2LCA0NiwgNDcsIDI0NiwgMTQ2LCA0NiwgNDcsIDI0NywgMTcsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMDksIDQ2LCA0NywgMjQ3LCA4MCwgNDYsIDQ3LCAyNDYsIDE3NywgNDYsIDQ3LCAyNDcsIDQ4LCA0NiwgNDcsIDI0NiwgCi0gICAgMjQwLCA0NiwgNDcsIDI0NywgMTExLCA0NiwgNDcsIDI0NiwgMTE5LCA0NiwgNDcsIDI0NiwgMjQ2LCA0NiwgNDcsIDI0NiwgCi0gICAgMTgyLCA0NiwgNDcsIDI0NywgNTMsIDQ2LCA0NywgMjQ2LCAxNTAsIDQ2LCA0NywgMjQ3LCAyMSwgNDYsIDQ3LCAyNDYsIAotICAgIDIxMywgNDYsIDQ3LCAyNDcsIDg0LCA0NiwgNDcsIDI0NiwgMTM0LCA0NiwgNDcsIDI0NywgNSwgNDYsIDQ3LCAyNDYsIDE5NywgCi0gICAgNDYsIDQ3LCAyNDcsIDY4LCA0NiwgNDcsIDI0NiwgMTY1LCA0NiwgNDcsIDI0NywgMzYsIDQ2LCA0NywgMjQ2LCAyMjgsIDQ2LCAKLSAgICA0NywgMjQ3LCA5OSwgNDYsIDQ3LCAyNDYsIDEyNiwgNDYsIDQ3LCAyNDYsIDI1MywgNDYsIDQ3LCAyNDYsIDE4OSwgNDYsIAotICAgIDQ3LCAyNDcsIDYwLCA0NiwgNDcsIDI0NiwgMTU3LCA0NiwgNDcsIDI0NywgMjgsIDQ2LCA0NywgMjQ2LCAyMjAsIDQ2LCA0NywgCi0gICAgMjQ3LCA5MSwgNDYsIDQ3LCAyNDYsIDE0MSwgNDYsIDQ3LCAyNDcsIDEyLCA0NiwgNDcsIDI0NiwgMjA0LCA0NiwgNDcsIAotICAgIDI0NywgNzUsIDQ2LCA0NywgMjQ2LCAxNzIsIDQ2LCA0NywgMjQ3LCA0MywgNDYsIDQ3LCAyNDYsIDIzNSwgNDYsIDQ3LCAKLSAgICAyNDcsIDEwNiwgNDYsIDQ3LCAyNDYsIDEyMiwgNDYsIDQ3LCAyNDYsIDI0OSwgNDYsIDQ3LCAyNDYsIDE4NSwgNDYsIDQ3LCAKLSAgICAyNDcsIDU2LCA0NiwgNDcsIDI0NiwgMTUzLCA0NiwgNDcsIDI0NywgMjQsIDQ2LCA0NywgMjQ2LCAyMTYsIDQ2LCA0NywgCi0gICAgMjQ3LCA4NywgNDYsIDQ3LCAyNDYsIDEzNywgNDYsIDQ3LCAyNDcsIDgsIDQ2LCA0NywgMjQ2LCAyMDAsIDQ2LCA0NywgMjQ3LCAKLSAgICA3MSwgNDYsIDQ3LCAyNDYsIDE2OCwgNDYsIDQ3LCAyNDcsIDM5LCA0NiwgNDcsIDI0NiwgMjMxLCA0NiwgNDcsIDI0NywgCi0gICAgMTAyLCA0NiwgNDcsIDI0NiwgMTI5LCA0NiwgNDcsIDI0NywgMCwgNDYsIDQ3LCAyNDYsIDE5MiwgNDYsIDQ3LCAyNDcsIDYzLCAKLSAgICA0NiwgNDcsIDI0NiwgMTYwLCA0NiwgNDcsIDI0NywgMzEsIDQ2LCA0NywgMjQ2LCAyMjMsIDQ2LCA0NywgMjQ3LCA5NCwgNDYsIAotICAgIDQ3LCAyNDYsIDE0NCwgNDYsIDQ3LCAyNDcsIDE1LCA0NiwgNDcsIDI0NiwgMjA3LCA0NiwgNDcsIDI0NywgNzgsIDQ2LCA0NywgCi0gICAgMjQ2LCAxNzUsIDQ2LCA0NywgMjQ3LCA0NiwgNDYsIDQ3LCAyNDYsIDIzOCwgNDYsIDQ3LCAyNDcsIDEwOSwgNDYsIDQ3LCAKLSAgICAyNDYsIDEyMCwgNDYsIDQ3LCAyNDYsIDI0NywgNDYsIDQ3LCAyNDYsIDE4MywgNDYsIDQ3LCAyNDcsIDU0LCA0NiwgNDcsIAotICAgIDI0NiwgMTUxLCA0NiwgNDcsIDI0NywgMjIsIDQ2LCA0NywgMjQ2LCAyMTQsIDQ2LCA0NywgMjQ3LCA4NSwgNDYsIDQ3LCAKLSAgICAyNDYsIDEzNSwgNDYsIDQ3LCAyNDcsIDYsIDQ2LCA0NywgMjQ2LCAxOTgsIDQ2LCA0NywgMjQ3LCA2OSwgNDYsIDQ3LCAyNDYsIAotICAgIDE2NiwgNDYsIDQ3LCAyNDcsIDM3LCA0NiwgNDcsIDI0NiwgMjI5LCA0NiwgNDcsIDI0NywgMTAwLCA0NiwgNDcsIDI0NiwgCi0gICAgMTI3LCA0NiwgNDcsIDI0NiwgMjU0LCA0NiwgNDcsIDI0NiwgMTkwLCA0NiwgNDcsIDI0NywgNjEsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNTgsIDQ2LCA0NywgMjQ3LCAyOSwgNDYsIDQ3LCAyNDYsIDIyMSwgNDYsIDQ3LCAyNDcsIDkyLCA0NiwgNDcsIDI0NiwgCi0gICAgMTQyLCA0NiwgNDcsIDI0NywgMTMsIDQ2LCA0NywgMjQ2LCAyMDUsIDQ2LCA0NywgMjQ3LCA3NiwgNDYsIDQ3LCAyNDYsIAotICAgIDE3MywgNDYsIDQ3LCAyNDcsIDQ0LCA0NiwgNDcsIDI0NiwgMjM2LCA0NiwgNDcsIDI0NywgMTA3LCA0NiwgNDcsIDI0NiwgCi0gICAgMTIzLCA0NiwgNDcsIDI0NiwgMjUwLCA0NiwgNDcsIDI0NiwgMTg2LCA0NiwgNDcsIDI0NywgNTcsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNTQsIDQ2LCA0NywgMjQ3LCAyNSwgNDYsIDQ3LCAyNDYsIDIxNywgNDYsIDQ3LCAyNDcsIDg4LCA0NiwgNDcsIDI0NiwgCi0gICAgMTM4LCA0NiwgNDcsIDI0NywgOSwgNDYsIDQ3LCAyNDYsIDIwMSwgNDYsIDQ3LCAyNDcsIDcyLCA0NiwgNDcsIDI0NiwgMTY5LCAKLSAgICA0NiwgNDcsIDI0NywgNDAsIDQ2LCA0NywgMjQ2LCAyMzIsIDQ2LCA0NywgMjQ3LCAxMDMsIDQ2LCA0NywgMjQ2LCAxMzAsIAotICAgIDQ2LCA0NywgMjQ3LCAxLCA0NiwgNDcsIDI0NiwgMTkzLCA0NiwgNDcsIDI0NywgNjQsIDQ2LCA0NywgMjQ2LCAxNjEsIDQ2LCAKLSAgICA0NywgMjQ3LCAzMiwgNDYsIDQ3LCAyNDYsIDIyNCwgNDYsIDQ3LCAyNDcsIDk1LCA0NiwgNDcsIDI0NiwgMTQ1LCA0NiwgNDcsIAotICAgIDI0NywgMTYsIDQ2LCA0NywgMjQ2LCAyMDgsIDQ2LCA0NywgMjQ3LCA3OSwgNDYsIDQ3LCAyNDYsIDE3NiwgNDYsIDQ3LCAKLSAgICAyNDcsIDQ3LCA0NiwgNDcsIDI0NiwgMjM5LCA0NiwgNDcsIDI0NywgMTEwLCA5NywgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgCi0gICAgOTcsIDIxNSwgNTgsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgNTIsIDgwLCAyLCAKLSAgICA2NywgOTEsIDQzLCA0NCwgNTIsIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTQwLCAKLSAgICA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDk3LCA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDI0NiwgMTA0LCA4MCwgMiwgMjAzLCAKLSAgICA5MSwgMjE0LCAxNTMsIDgwLCAyLCAyMDMsIDkxLCAyMTQsIDE1MywgMjE1LCAyMTEsIDc0LCAyNDYsIDEwNCwgMjE1LCAyMTEsIAotICAgIDc0LCAxNDAsIDUyLCAyNDgsIDE1NywgNzQsIDk3LCA1MiwgMjQ4LCAxNTcsIDc0LCAxNDAsIDIxNSwgMjExLCAyNDgsIDE1NywgCi0gICAgNzQsIDk3LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDc0LCA5NywgMjE1LCA1OCwgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgOTcsIAotICAgIDgwLCAyLCAyNDYsIDExOCwgMjE4LCAxMzksIDIxNCwgMTUzLCA4MCwgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgODAsIDIxNiwgCi0gICAgNDIsIDEzMCwgOTcsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCAKLSAgICA5MSwgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc3LCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgCi0gICAgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDI1MywgMjUxLCA5NywgMjUzLCAyNTEsIAotICAgIDE0MCwgNTIsIDI1MywgMjUxLCA5NywgNTIsIDI1MywgMjUxLCAxNDAsIDgwLCAyMTYsIDQyLCA4NSwgMjQ3LCAyNDgsIDk3LCAKLSAgICA4MCwgMjE2LCA0MiwgODUsIDI0NywgMjQ4LCAxNDAsIDgwLCAyNDMsIDI0MywgMjUyLCAxNDEsIDIxNiwgNDIsIDg1LCAyNDcsIAotICAgIDI0OCwgOTcsIDgwLCAyNDMsIDI0MywgMjUyLCAxNDEsIDIxNiwgNDIsIDg1LCAyNDcsIDI0OCwgMjI4LCA1NiwgMjEyLCA5LCAKLSAgICAyMiwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgMjIsIDIxOSwgMjgsIDIxMiwgOSwgNzQsIAotICAgIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA1NiwgMjQ1LCAyMjAsIDgwLCAyLCAxMDMsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA4MCwgMiwgMTAzLCAyMTksIDI4LCAyMTIsIDksIDgwLCAyLCAxMDMsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDIyLCAKLSAgICAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMjIsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDgwLCAyMiwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA4MCwgMjIsIAotICAgIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyMiwgMjI4LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDI0NCwgMTc1LCAyNDcsIDI1NCwgCi0gICAgMjQ0LCAxNzUsIDI0NywgMjU1LCAyNDksIDEyNSwgMjIyLCAyMjgsIDI0NywgMjU0LCAyMTksIDI4LCAyNDUsIDIyMCwgODAsIAotICAgIDI0OSwgMTI1LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMjQ5LCAxMjUsIDIxOSwgCi0gICAgMjgsIDI0NSwgMjIwLCA3NCwgMjQ0LCAxNzUsIDI0NywgMjU1LCAyNDksIDEyNSwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAKLSAgICAyMjIsIDIyOCwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCAKLSAgICA4MCwgMjQ5LCAxMjUsIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgODAsIDI0OSwgMTI1LCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzQsIDIxMiwgMzYsIDgwLCAyMjUsIDcsIDI0NywgMTk1LCAyMjIsIDI1MSwgODAsIDIyNSwgNywgCi0gICAgOTcsIDIxNiwgMTg4LCAyNDksIDkwLCAyMTQsIDE1MiwgODAsIDIyNSwgNywgOTcsIDIxNiwgMTg4LCAyNDksIDkwLCAyNDYsIAotICAgIDEwMywgODAsIDIyNSwgNywgMjQ2LCAxMDQsIDIxNiwgMTg4LCAyNDksIDkwLCAyMzMsIDM3LCA4MCwgMjI1LCA3LCAyNDYsIAotICAgIDEwNCwgMjE2LCAxODgsIDI0OSwgOTAsIDIyMiwgMjQxLCAyMjIsIDI0NCwgMjU0LCAyNiwgMjUwLCAyLCA3NCwgMjMzLCA0MCwgCi0gICAgMjU0LCAyNiwgMjU0LCA4OCwgNzQsIDIxNiwgMTQsIDI1NCwgMjYsIDI1NCwgODgsIDc0LCAyNTEsIDE3NSwgMjU0LCAyNiwgCi0gICAgMjU0LCA4OCwgNzQsIDIxNiwgMTQsIDI1NCwgMjYsIDI1MCwgMiwgODAsIDIsIDIzMCwgMTgxLCAyMTYsIDE0LCAyNTQsIDI2LCAKLSAgICAyNTQsIDg4LCA4MCwgMiwgMjI1LCAyMiwgMjMyLCAxMDgsIDQ0LCAyMjAsIDE1MiwgMjUwLCAyLCA3NCwgMjMyLCAxMDgsIAotICAgIDQzLCAyMjAsIDE1MiwgMjU0LCA4OCwgNzQsIDI1NCwgODgsIDI1MCwgMCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjUwLCAwLCAKLSAgICAyNTAsIDM2LCA3NCwgOTcsIDgwLCA3NywgMjE5LCAyNTEsIDE0MCwgNzQsIDE0MCwgODAsIDc3LCAyMTksIDI1MSwgOTcsIAotICAgIDc0LCAyMTksIDI1MSwgOTcsIDgwLCA3NywgMTQwLCA3NCwgOTcsIDgwLCAyLCA5NiwgNTEsIDE0MCwgODAsIDIsIDk2LCA1MSwgCi0gICAgOTcsIDgwLCAyMTYsIDEzOSwgMjExLCAxNzgsIDQzLCA0NCwgODAsIDIxNiwgMTM5LCA0LCAyNTAsIDM1LCAyMTQsIDE1MywgCi0gICAgMjE1LCA1OCwgODAsIDI0MywgMjQzLCA0LCAyNTAsIDM1LCA0MywgMjUyLCAxMzksIDEyMCwgNDQsIDI1MiwgMTM5LCAxMjQsIAotICAgIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyNCwgNDQsIDI1MiwgMTM5LCAxMjAsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCAKLSAgICA0NCwgMTI0LCAyNTIsIDEzOSwgNDMsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCA0MywgMTI0LCAyNTIsIDEzOSwgNDQsIAotICAgIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyMCwgNDQsIDI1MiwgMTM5LCAxMjAsIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCAKLSAgICA0NCwgMTI0LCAyNTIsIDEzOSwgNDQsIDI0MSwgMjU0LCA0MywgMjUyLCAxMzksIDEyNCwgNDQsIDI1MiwgMTM5LCAxMjQsIAotICAgIDI0MSwgMjU0LCAxMjAsIDI1MiwgMTM5LCA0MywgMTI0LCAyNTIsIDEzOSwgNDMsIDI0MSwgMjU0LCAxNDAsIDI0MSwgMjU1LCAKLSAgICAyLCAyNTIsIDEzOSwgMTIwLCAyMTYsIDQyLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgMjE2LCA0MiwgCi0gICAgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjE2LCA0MiwgMTMwLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyMTYsIAotICAgIDQyLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjE2LCA0MiwgMTMwLCAyMTQsIDE1MywgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjE2LCA0MiwgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgCi0gICAgMjE2LCA0MiwgMTMwLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCAyNDMsIDI0MywgMTMwLCA5NywgMjQxLCAKLSAgICAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIAotICAgIDQ0LCAyNDMsIDI0MywgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0NCwgMjQzLCAyNDMsIDEzMCwgCi0gICAgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjQzLCAyNDMsIDEzMCwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMTI0LCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjQzLCAyNDMsIAotICAgIDEzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI0MywgMjQzLCAxMzAsIDE0MCwgMjQxLCAyNTUsIAotICAgIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAxMDYsIDIxNCwgMTUzLCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIAotICAgIDI1MSwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjQ2LCAKLSAgICAxMDYsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMjIsIDI1MSwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDk3LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDIxNCwgMTYzLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCA3NywgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjQ2LCAxMDYsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDE0MCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMTQsIDE2MywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCA3NywgMTQwLCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDI0NiwgMTA2LCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgMTk5LCAyNDgsIDE1NiwgCi0gICAgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjUyLCA0MywgMTk5LCAyNDgsIDE1NiwgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMTIwLCA3NywgMTk5LCAyNDgsIDE1NiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyNTIsIAotICAgIDQzLCAxOTksIDI0OCwgMTU2LCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjUyLCAzMCwgMjQ2LCAKLSAgICAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNTEsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIAotICAgIDQzLCAyNTIsIDMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI1MSwgNDQsIDUyLCA4MCwgMiwgCi0gICAgMjIyLCAxODMsIDI0MSwgMjM1LCAyNDUsIDk4LCA1LCA3NywgOTcsIDc0LCAyMTYsIDg5LCAyMjYsIDE2OCwgNzcsIDk3LCAKLSAgICA3NCwgMTQwLCA4MCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA5NywgODAsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgOTcsIAotICAgIDgwLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAyMzMsIDE1LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgMjE2LCAxMzksIDIzMywgCi0gICAgMTQsIDI0MiwgMTMwLCA3NywgOTcsIDc0LCAyMTgsIDY0LCA3NywgOTcsIDc0LCAxNDAsIDgwLCAyMTYsIDEzOSwgMjE4LCAKLSAgICA2MywgMjE4LCAyMiwgNzcsIDE0MCwgNzQsIDQzLCAyNDQsIDkxLCAyMTcsIDc3LCA0NCwgMjQ0LCA5MSwgMjE3LCA3NywgCi0gICAgMTIwLCAyNDQsIDkxLCAyMTcsIDc3LCAxMjQsIDI0NCwgOTEsIDIxNywgNzcsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIAotICAgIDI0OCwgNjAsIDIxMCwgMTYwLCAxODcsIDIxOCwgMjQyLCAyMTAsIDE2MCwgMTg3LCAyMTUsIDQ5LCAyNDksIDIyNiwgNDMsIAotICAgIDcxLCAyNDksIDk5LCAxMjcsIDQ0LCA3MSwgMjQ5LCA5OSwgMTI3LCA0MywgNzEsIDIyNiwgMywgNDQsIDcxLCAyMjYsIDMsIAotICAgIDIxMCwgMTYwLCAxODcsIDQzLCAyMzYsIDE1LCAxMjcsIDIxMCwgMTYwLCAxODcsIDQ0LCAyMzYsIDE1LCAxMjcsIDIxMCwgCi0gICAgMTYwLCAxODcsIDQzLCAyNTEsIDI0MiwgMTI3LCAyMTAsIDE2MCwgMTg3LCA0NCwgMjUxLCAyNDIsIDEyNywgNDMsIDQyLCAKLSAgICAyNTEsIDE1OCwgMiwgMjE0LCAxODMsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNCwgMTgzLCA0MywgNDIsIDI1MSwgMTU4LCAKLSAgICAyLCAyMTYsIDExNSwgMjM2LCAwLCAyMTYsIDE0LCAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMiwgMjE2LCAxMTUsIAotICAgIDIzNiwgMCwgMjUxLCAxNzUsIDI0OSwgMTYwLCA0MywgNDIsIDI1MSwgMTU4LCAyLCAyMTYsIDExNSwgMjM2LCAwLCAyNTEsIAotICAgIDE3NSwgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNiwgMTE1LCAyMzYsIDAsIDIxNiwgMTQsIDI0OSwgMTYwLCAKLSAgICA0MywgMjU0LCAxMTAsIDI1MSwgMTU4LCAyLCAyNDcsIDEyMCwgNDQsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMiwgMjQ3LCAxMjAsIAotICAgIDQzLCAyNTQsIDI2LCAyMzMsIDE1LCAxMjcsIDQ0LCAyNTQsIDI2LCAyNDIsIDEzMCwgMTI3LCA1MiwgNDMsIDI1NCwgMjYsIAotICAgIDI0MiwgMTMwLCAxMjcsIDUyLCA0NCwgMjU0LCAyNiwgMjMzLCAxNSwgMTI3LCA0MywgODUsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0NCwgODUsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyNDYsIDExOCwgMjQ0LCAxMzUsIDY3LCAyMTAsIDM1LCAyMzIsIAotICAgIDIxMywgMjMxLCA4OCwgMjU0LCAxMTAsIDIyNiwgMTcwLCAyMzMsIDQ2LCA0NCwgMjU0LCAxMTAsIDIxNCwgMTIsIDIsIDIxOCwgCi0gICAgMjM0LCAyMzEsIDg4LCA0NCwgMjU0LCAxMTAsIDIsIDI0NywgMTIwLCAyNTQsIDExMCwgMiwgMjIyLCA5MiwgMjM1LCAyMTUsIAotICAgIDI1NSwgMywgMjU0LCAxMDksIDIxOCwgMjU1LCAyNTQsIDExMCwgMjI2LCAxNzAsIDIzMywgNDYsIDIxOCwgMjU1LCAyNTQsIAotICAgIDExMCwgMjI2LCAxNzAsIDIxNCwgMTYzLCAyMTUsIDk0LCAyNTQsIDEwOSwgMjIzLCA0OSwgMjU0LCAxMDksIDI1NCwgMTEwLCAKLSAgICAyLCAyMTQsIDE4MywgMjIzLCA0OSwgMjU0LCAxMTAsIDIsIDIxNCwgMTgzLCAyMjYsIDI0OCwgMjU0LCAxMTAsIDIyNiwgCi0gICAgMTcwLCAyMTQsIDE2MywgMjI2LCAyNDgsIDI1NCwgMTEwLCAyMjYsIDE3MCwgMjQ2LCAxMDYsIDIzMSwgODgsIDI1NCwgMTEwLCAKLSAgICAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTIwLCAyMiwgMjIyLCAyNTEsIDIzMSwgODgsIAotICAgIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTIwLCAyMiwgMjMzLCA0NiwgCi0gICAgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCAxMjQsIDIyLCAKLSAgICAyMjIsIDI1MSwgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCAKLSAgICA3LCAxMjQsIDIyLCAyMzMsIDQ2LCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIAotICAgIDgwLCAyMjUsIDcsIDQ0LCAyMiwgMjE0LCAxNjMsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAKLSAgICAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgNDMsIDIyLCAyMTQsIDE2MywgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgCi0gICAgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCA0NCwgMjIsIDI0NiwgMTA2LCAyMzEsIDg4LCAyNTQsIAotICAgIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDQzLCAyMiwgMjQ2LCAxMDYsIDIyMywgCi0gICAgNDksIDI0NSwgMTUyLCAyMjAsIDEyNywgMjQ1LCAxNTIsIDIyMCwgMTI4LCAyLCAyMjYsIDEyMywgMjQ1LCAxNTIsIDIyMCwgCi0gICAgMTI4LCAyLCA0LCAyNTAsIDM2LCA0OCwgMjQ1LCAxNTIsIDIyMCwgMTI4LCAyLCA0NCwgODAsIDQ4LCAyNDUsIDE1MiwgMjIwLCAKLSAgICAxMjgsIDIsIDQzLCA4MCwgNDgsIDI1MCwgMzYsIDIsIDIwMywgMTMwLCAzNywgNjcsIDEzMCwgMzcsIDIyNiwgNywgMzcsIAotICAgIDIyMywgNTAsIDIxOSwgNDYsIDM3LCAyMjUsIDE3MSwgMjUwLCAzNiwgMjQ3LCAxNzMsIDI1MSwgNzgsIDIwMywgMjUyLCAKLSAgICAxNDEsIDIyLCAyMTYsIDE0LCAxNjMsIDI0NywgMTczLCAyNTEsIDc4LCA2NywgMTMwLCAyNTAsIDM2LCAyLCAyMTgsIDI0LCAKLSAgICAyMTEsIDE3OCwgMzcsIDI1NCwgODcsIDI0NywgMTY5LCA1MCwgMTIwLCA4MCwgMjE2LCAxMzksIDI1MCwgMzUsIDM3LCA3MSwgCi0gICAgMjUxLCAxMTMsIDM3LCAyNTEsIDExMywgMzcsIDIzMywgMTQsIDM3LCAyNDIsIDEyOSwgMjUwLCAzNiwgMiwgNCwgMjUwLCAKLSAgICAzNiwgMjE2LCA0MiwgMjE2LCAxOTYsIDIyMiwgMjUxLCAyNTAsIDM2LCAyLCAxMTMsIDIwMywgMjE4LCA5MSwgMjE2LCA0MiwgCi0gICAgMjE2LCAxOTYsIDIyMiwgMjUxLCA5MiwgMjIyLCAyMjgsIDI0NywgMjU1LCAyMTksIDk1LCA5MiwgMjQ0LCAxNzUsIDI0NywgCi0gICAgMjU1LCAyMTksIDk1LCA5MiwgMjUzLCAyMTYsIDkyLCA0LCAyNTAsIDM1LCA5MiwgMjE4LCAyMzQsIDExMywgMjM1LCA2NSwgCi0gICAgMjE4LCAyMzIsIDIxNSwgMjI2LCAyLCA1OSwgNDgsIDIxNSwgMjI2LCAyLCAyMTQsIDE4MywgMjIyLCA5MiwgMjM2LCAwLCAKLSAgICAyMTUsIDIyNSwgMjE1LCAyMjYsIDIsIDIyMCwgMTM0LCAyNTMsIDIwNywgMjUxLCAxNzQsIDQ0LCAyMTUsIDIyNiwgNzcsIAotICAgIDQzLCAyMTUsIDIyNSwgNDMsIDIxNSwgMjI2LCAyNTIsIDMwLCA2NywgMTMwLCA2NywgMjUyLCAxNDEsIDI1MiwgMzAsIDQ0LCAKLSAgICAyMTUsIDIyNSwgMjUxLCAxNjUsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyNTEsIDE2NSwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIAotICAgIDg1LCAyNTEsIDE2NCwgMzAsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAzMCwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDcxLCAKLSAgICAyNDAsIDIzNiwgODUsIDI0MCwgMjM2LCA0MywgMjExLCAyNDQsIDI0NCwgMTM1LCA0NCwgMjExLCAyNDQsIDI0NCwgMTM1LCAKLSAgICA0MywgNTIsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgNDQsIDUyLCAyMTEsIDI0NCwgMjQ0LCAxMzUsIDIzNSwgMjQ4LCAyMzUsIAotICAgIDIzNCwgMjE2LCAxMTIsIDExNywgMjM1LCAyMzQsIDIzNSwgMjM1LCAyMjksIDEwMiwgMiwgNjcsIDEzMCwgMjQ2LCAxMTIsIAotICAgIDIzMCwgODcsIDQyLCAyLCAyNDksIDE4MSwgMjI2LCAxMjcsIDIzNSwgMjQ2LCAyNTMsIDIzNywgMjE5LCAyMTksIDIyNCwgCi0gICAgMTgwLCAyNDUsIDk4LCA1LCAyMiwgMjE5LCA5NywgMjI2LCA3LCAyNDUsIDk4LCA1LCAyMiwgMjE5LCA5NywgMjI2LCA4LCAyLCAKLSAgICAyMTYsIDg5LCA0OCwgMjQwLCAxMDQsIDIxNiwgNDIsIDIyLCAyMTksIDk3LCAyMjYsIDcsIDI0MiwgMTgzLCAyMTgsIDE1NSwgCi0gICAgMjE2LCAxODUsIDI0NiwgMTA1LCAyMTUsIDIyNiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDI0NiwgMTA1LCAyMTUsIDIyNiwgCi0gICAgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDg1LCAyNDcsIDI0OSwgMiwgMTI0LCA3NCwgODUsIDIzMiwgMTA0LCA3MSwgMjUwLCAKLSAgICAzNiwgMiwgMTI0LCA3NCwgODUsIDI1MCwgMzYsIDIsIDEyNCwgNzQsIDI0NSwgODUsIDcxLCAyMTgsIDIzNCwgMjQ1LCA4NSwgCi0gICAgODUsIDIxOCwgMjM0LCAyNDUsIDg1LCA3MSwgMjQ3LCAyNDgsIDI0NSwgODUsIDg1LCAyNDcsIDI0OCwgMjQ1LCA4NSwgNzEsIAotICAgIDI1MCwgMzUsIDI0NSwgODUsIDg1LCAyNTAsIDM1LCAyMjIsIDEzMiwgMjIzLCA1MCwgMjE5LCA0NywgMjI2LCAxNjcsIDIxOSwgCi0gICAgNDcsIDIsIDIyNiwgMTIzLCAyMjMsIDUwLCAyMTksIDQ3LCAyLCAyMDMsIDkxLCAyNTEsIDI0OSwgMjE5LCA0NiwgMjUxLCAKLSAgICAyNDksIDIyMywgNTAsIDIxOSwgNDYsIDUyLCAyMjUsIDIyLCAyMTUsIDIxMSwgMjI1LCAyMiwgMjMzLCA0MiwgMjQ5LCA5MSwgCi0gICAgMjU0LCAxMTAsIDEyNywgMjIyLCAyNDcsIDI0OSwgOTEsIDI1NCwgMTEwLCAxMjcsIDIxNiwgNzgsIDIzMCwgMTc5LCAyMzAsIAotICAgIDI0LCAzNywgNTksIDIyNiwgMTY3LCAyMzAsIDI0LCAzNywgOTYsIDIyNiwgMTY3LCAyMzAsIDI0LCAzNywgMzAsIDIyNiwgCi0gICAgMTY3LCAyMzAsIDI0LCAyMTQsIDE3NiwgMjI2LCAxNjgsIDIsIDI0NywgMTIwLCAyMzAsIDI0LCAyMTQsIDE3NiwgMjI2LCAKLSAgICAxNjgsIDIsIDIyNSwgMjIsIDIzMCwgMjQsIDQyLCAyMzUsIDE5OSwgMjI2LCAxNjcsIDIzMCwgMjQsIDQyLCAyMTQsIDE3NiwgCi0gICAgMjI2LCAxNjcsIDExMywgMjMyLCAxNDYsIDIyLCAyMjYsIDE2NywgMTEzLCAyMzIsIDE0NiwgMTc3LCAyMjYsIDE2NywgMjMwLCAKLSAgICAyNCwgMzAsIDIyNiwgMTY3LCAyMzAsIDE1NCwgMTEzLCAyMTgsIDQzLCAyMTgsIDQxLCAyLCAyMzUsIDIxMSwgMjI0LCAyNCwgCi0gICAgMjM1LCAyMTIsIDIyNiwgMTY3LCAyNDQsIDk5LCAyMjUsIDI1NSwgMjM1LCAyMTEsIDIzNSwgMjEyLCAyLCA1MiwgOTEsIAotICAgIDIzNSwgMjEyLCAyNTMsIDE3MywgMiwgMjE5LCA5NSwgMjUwLCAzMiwgMjQzLCAyMjYsIDI1NCwgODgsIDIzNSwgMjA5LCAKLSAgICAyMzIsIDIxNCwgMjM1LCAyMTAsIDIsIDIyMywgMTE1LCAyMjUsIDIzNywgMjU0LCAyLCAyMjUsIDEsIDIzMiwgMjE0LCAyMzUsIAotICAgIDIxMCwgMiwgMjIwLCAxNTIsIDIyNSwgMjM3LCAyNTQsIDIsIDIyNSwgMSwgMjMyLCAyMTQsIDIzNSwgMjEwLCAyMjgsIDUyLCAKLSAgICAyMzUsIDI1MCwgMjE2LCAxOTYsIDIyNSwgMSwgMjM1LCAyMTIsIDI1NCwgMiwgMTE1LCAyMjUsIDExLCAyMjYsIDE2NywgCi0gICAgMjI0LCAxOCwgMjM1LCAyMTIsIDIyNiwgMTY3LCAyMzUsIDIxMiwgMiwgMTQwLCA4MCwgMiwgMTAzLCAyMzUsIDIxMiwgMiwgCi0gICAgMzAsIDUwLCAyMzUsIDIxMiwgMiwgMjM1LCAxOTgsIDIzNSwgMjEyLCAyLCAyMTQsIDE3NSwgMjM1LCAyMTIsIDIsIDIyNiwgCi0gICAgMTIzLCAyMzUsIDIxMiwgMiwgMjE0LCAxODMsIDIzNSwgNjYsIDIzMywgODUsIDQzLCAyMTUsIDIyNiwgMjI2LCAxNjcsIAotICAgIDIxMCwgMTYwLCAxODcsIDIyMSwgMjAxLCAyNDksIDIwOSwgMjEwLCAxNjAsIDE4NywgMjIxLCAyMDEsIDIyNSwgNTYsIDIxMCwgCi0gICAgMTYwLCAxODcsIDIyMSwgMjAxLCAyMjQsIDE3NiwgOTYsIDUsIDIsIDQsIDI1MCwgMzYsIDQ4LCA5NiwgNSwgMiwgMjUwLCAKLSAgICAzMSwgMjU1LCAxNSwgNDgsIDk2LCA1LCAyLCAyMTYsIDg5LCA0OCwgOTYsIDUsIDIsIDU5LCA1MSwgOTYsIDUsIDIsIDIxNiwgCi0gICAgODksIDUxLCA5NiwgNSwgMiwgMjE4LCA2NSwgMTA1LCA5NiwgNSwgMiwgODUsIDIxNSwgMjI1LCAyMzAsIDE4MiwgNSwgMiwgCi0gICAgMjQ5LCAyMjAsIDQ4LCAyMzAsIDE4MiwgNSwgMiwgNTksIDUxLCAyMzAsIDE4MiwgNSwgMiwgMjQ0LCAxNzUsIDI0NywgMTE4LCAKLSAgICAyMzAsIDE4MiwgNSwgMiwgMjIyLCAyMjgsIDI0NywgMTE4LCA5NiwgNSwgMjM2LCAwLCA0MywgMTYzLCAyNTAsIDM1LCA5NiwgCi0gICAgNSwgMjM2LCAwLCA0NCwgMTYzLCAyNTAsIDM1LCAyMTMsIDI1NCwgMTc3LCAyNDksIDEzMSwgMjI0LCAxODAsIDIzMCwgODQsIAotICAgIDUsIDIsIDU5LCA0OCwgMjMwLCA4NCwgNSwgMiwgMjE0LCAxODMsIDIyMCwgMTQ5LCAyMjQsIDE4MSwgMiwgMjUxLCAxNzUsIAotICAgIDI0OSwgMjU1LCAyMTksIDc3LCAyMjQsIDE4MCwgMjMwLCA4NCwgNSwgMjM2LCAwLCA0MywgMTYzLCAyNTAsIDM1LCAyMzAsIAotICAgIDg0LCA1LCAyMzYsIDAsIDQ0LCAxNjMsIDI1MCwgMzUsIDM3LCAyMzAsIDg0LCA1LCAyLCAyNTAsIDMxLCAyNTUsIDE0LCAKLSAgICAyMzAsIDg0LCA1LCAyMzYsIDAsIDUyLCAyNTAsIDM1LCAzNywgMjQ3LCAxNjksIDUwLCA5NiwgNSwgMjM2LCAwLCAyMTUsIAotICAgIDIyNSwgMjMwLCAxODIsIDUsIDIzNiwgMCwgMjE1LCAyMjUsIDIzMCwgODQsIDUsIDIzNiwgMCwgMjE1LCAyMjUsIDIzNSwgCi0gICAgMjA2LCAyMjQsIDE4MCwgMjIyLCAyNDIsIDIzNSwgMjA2LCAyMjQsIDE4MCwgMjEwLCAxNjAsIDE4NywgMjIzLCA5MCwgMjQ5LCAKLSAgICAyMDksIDI1NCwgMTM0LCAxNzcsIDI0OSwgMTY1LCAyMzUsIDE5OSwgMiwgMjQ3LCAxMjAsIDIxNCwgMTc2LCAyLCAyMzAsIAotICAgIDE4MiwgNTAsIDIxNCwgMTc2LCAyLCAyMjYsIDEyMywgMjM1LCAxOTksIDIsIDIyNiwgMTIzLCAyMzUsIDE5OSwgMiwgMjMyLCAKLSAgICAxNDYsIDI1NCwgMTE4LCAyMTQsIDE3NiwgMiwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMTQsIDE3NiwgNzcsIDIzNSwgMTk4LCAKLSAgICAyMzUsIDE5OSwgNzcsIDIxNCwgMTc1LCAyMTQsIDE3NiwgNzcsIDI1MiwgMTQxLCA3NywgMjM1LCAxOTgsIDIzNSwgMTk5LCAKLSAgICA3NywgMjUyLCAxNDEsIDc3LCAyMTQsIDE3NSwgMjE0LCAxNzYsIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyLCAyMTQsIDE3NSwgCi0gICAgMjM1LCAxOTksIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyLCAyMzUsIDE5OCwgMjUwLCAwLCAyMTQsIDE3NiwgMiwgMjIwLCAKLSAgICAxMzMsIDI1MCwgMCwgMjM1LCAxOTksIDIsIDIyMCwgMTMzLCA1MiwgNDIsIDIzNSwgMTk4LCA1MiwgNDIsIDIxNCwgMTc1LCAKLSAgICAyNTAsIDAsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNCwgMjIsIDIxOSwgNzcsIDIyNCwgMTgwLCAyMzIsIDE0NiwgMjIsIDIsIAotICAgIDU5LCA0OCwgMjMyLCAxNDYsIDE3NywgMiwgNTksIDQ4LCA1MiwgMjMyLCAxNDYsIDI1NCwgMTE4LCA1MiwgMjMyLCAxNDYsIAotICAgIDIyNiwgMTU4LCAxMTMsIDIzNSwgMjAwLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDExMywgMjM1LCAyMDAsIDIzMiwgMTQ2LCAKLSAgICAyMjYsIDE1OCwgMjE5LCA4NSwgMjMzLCA4NSwgMjI2LCAxNTgsIDIxOSwgODUsIDIzMywgODUsIDI1NCwgMTE4LCAyMzIsIAotICAgIDE0NiwgMTc3LCAyMjYsIDEyMSwgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzIsIDE0NiwgMjIsIDIsIDIzMCwgMjI0LCAyMTgsIAotICAgIDEzOSwgMjMyLCAxNDYsIDE3NywgMiwgMjMwLCAyMjQsIDIxOCwgMTM5LCAyMzIsIDE0NiwgMjIsIDIsIDIwMywgMjQ4LCAKLSAgICAxNTYsIDIzMiwgMTQ2LCAxNzcsIDIsIDIwMywgMjQ4LCAxNTYsIDIzMiwgMTQ2LCAyMiwgMiwgNTIsIDIyNiwgMTIzLCAyMzIsIAotICAgIDE0NiwgMjIsIDIsIDIxNCwgMTgzLCAyMzIsIDE0NiwgMjIsIDIsIDUyLCAyMTQsIDE4MywgNCwgMjEzLCAyNTEsIDIsIDIxNCwgCi0gICAgMTgzLCAyMzIsIDE0NiwgMTc3LCAyLCA1MiwgMjI2LCAxMjMsIDIzMiwgMTQ2LCAxNzcsIDIsIDUyLCAyMTQsIDE4MywgMjEwLCAKLSAgICAxNjAsIDE4NywgMjQ3LCAxMjksIDI1NCwgNzksIDIxMCwgMTYwLCAxODcsIDIyMywgMTQ4LCAyNTQsIDc5LCAyNDUsIDk4LCAKLSAgICA1LCAyLCA1OSwgNTEsIDI0MCwgMTA0LCAyLCA1OSwgNDgsIDIxNSwgMjExLCAyMDMsIDI1MiwgMTQxLCAyLCA1MiwgNjcsIAotICAgIDkxLCAyMTUsIDIxMSwgMjAzLCAyNTIsIDE0MSwgMiwgMjE1LCAyMTEsIDY3LCA5MSwgMjE2LCA4OSwgMjI2LCAxNjgsIDIsIAotICAgIDU5LCA0OCwgMjE2LCA4OSwgMjI2LCAxNjgsIDIsIDIyMiwgMjI4LCAyNDcsIDExOCwgMjE5LCAxNjIsIDIzMCwgMTgyLCAKLSAgICAyMTksIDE2MSwgMjQ5LCAxOTksIDIsIDU5LCA0OCwgMjQ1LCA5OCwgMiwgMjUzLCAyMTYsIDI1NCwgMTQ4LCAxMjgsIDIxNiwgCi0gICAgNDIsIDIsIDI1MCwgMzEsIDI1NSwgMTQsIDI1NCwgNDgsIDEyOCwgMTc3LCAxMjgsIDExMSwgMjQ1LCA5OCwgNSwgNzcsIDk2LCAKLSAgICA1MCwgOTYsIDUsIDc3LCAyNDUsIDk4LCA1MCwgMjQ1LCA5OCwgNSwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA1MiwgMjQ5LCAKLSAgICAyMjcsIDI0NSwgOTksIDExMywgMjQ5LCAxOTQsIDI0NSwgOTgsIDIxOSwgMTc2LCAxMzQsIDI0OSwgMTk0LCAyNDUsIDk4LCAKLSAgICAyMTksIDE3NiwgMjQ1LCA5OCwgNSwgMiwgMTEzLCAxNzAsIDc3LCAyMiwgMTEzLCAxNzAsIDUxLCAyNDUsIDk0LCAyLCAyNDQsIAotICAgIDExLCAxNzAsIDQ4LCAyMzMsIDE1LCAyLCAyNTAsIDM2LCAyMzUsIDIxNSwgMjQyLCAxMzAsIDIsIDI1MCwgMzYsIDIzNSwgCi0gICAgMjE1LCAyMzMsIDE1LCAyLCAyMjQsIDEzLCAxNjQsIDQ4LCAyNDIsIDEzMCwgMiwgMjI0LCAxMywgMTY0LCA0OCwgMjMzLCAKLSAgICAxNSwgMTc3LCAyMTksIDk3LCAxMjgsIDExMSwgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAxMTEsIDIzMywgMTUsIAotICAgIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgMjM1LCAyMTUsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgCi0gICAgMjE2LCA0MiwgMiwgNTksIDIzNSwgMjE1LCAyMzMsIDE1LCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAKLSAgICAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCA0OCwgMjMzLCAxNSwgMTc3LCAyMTksIDk3LCAKLSAgICAxMjgsIDIxNiwgNDIsIDIsIDU5LCA3NywgMjIyLCAyNTEsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgCi0gICAgMiwgNTksIDc3LCAyMzMsIDQ2LCAyMzMsIDE1LCAxNzcsIDI1NCwgNDksIDI0MiwgMTMwLCAxNzcsIDI1NCwgNDksIDIzMywgCi0gICAgMTUsIDIyLCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIDI0MiwgMTMwLCAyMiwgMjE5LCAxNTMsIDIyOCwgNTIsIAotICAgIDEyOCwgMTExLCAyMzMsIDE1LCAyMiwgMjI4LCA1MiwgMjU0LCA0OSwgMjQyLCAxMzAsIDIyLCAyMjgsIDUyLCAyNTQsIDQ5LCAKLSAgICAyMzMsIDE1LCA3NywgMjQ2LCAxMTEsIDEyOCwgNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgNzcsIDI0NiwgMTExLCAxMjgsIAotICAgIDc3LCAyMzMsIDE0LCAyMzMsIDE1LCA3NywgMjE5LCAxNjIsIDE3NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDc3LCAyMTksIDE2MiwgCi0gICAgMTc3LCAyNDUsIDk5LCAyMzMsIDE1LCA3NywgMjE5LCAxNjIsIDc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDc3LCAyMTksIAotICAgIDE2MiwgNzcsIDIzMywgMTQsIDIzMywgMTUsIDc3LCAyNDIsIDEzMCwgNzcsIDI0NiwgMTExLCAyNDUsIDk5LCAyNDIsIDEzMCwgCi0gICAgNzcsIDIzMywgMTUsIDc3LCAyNDYsIDExMSwgMjQ1LCA5OSwgMjMzLCAxNSwgNzcsIDIxOSwgOTcsIDEyOCwgNzcsIDI0MiwgCi0gICAgMTMwLCA3NywgMjE5LCA5NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDc3LCAyMTksIDk3LCAxMjgsIDc3LCAyMzMsIDE1LCA3NywgCi0gICAgMjE5LCA5NywgMjQ1LCA5OSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDIxOSwgOTcsIDEyOCwgMjE2LCAKLSAgICA0MiwgMTc3LCAyNDIsIDEyOSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTUsIDIsIDU5LCAyMzUsIDIxNSwgCi0gICAgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTMwLCAyLCA1OSwgMjM1LCAyMTUsIDI0NiwgMTExLCAxMjgsIAotICAgIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMjQ2LCAxMTEsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEyOSwgMjQ2LCAxMTEsIAotICAgIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAyNDYsIDExMSwgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAKLSAgICAxNzcsIDI0MiwgMTI5LCAyMTksIDE2MiwgMTc3LCAyMzMsIDE0LCAyMTksIDE2MiwgMTc3LCAyNDIsIDEyOSwgMjE5LCAxNjIsIAotICAgIDc3LCAyMzMsIDE1LCA3NywgMjQ1LCA5OCwgNTAsIDIxOSwgMTYyLCA3NywgMjQyLCAxMzAsIDc3LCAyNDUsIDk4LCA1MCwgCi0gICAgNTIsIDIyOSwgOTEsIDIzMywgMTQsIDUyLCAyMjksIDkxLCAyNDIsIDEyOSwgNTIsIDIyOSwgOTEsIDIzMywgMTUsIDIsIAotICAgIDIxNCwgMTgzLCAyNDIsIDEzMCwgMjI2LCAxMjEsIDIzMywgMTQsIDI0MiwgMTMwLCAyNTIsIDMwLCAyMzMsIDE0LCAyMzMsIAotICAgIDE1LCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTIsIDI0MiwgMTMwLCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTIsIDIzMywgCi0gICAgMTUsIDI1MCwgMCwgMjUxLCA3OCwgMjQ5LCA5MywgNzcsIDIxOSwgOTcsIDI0NSwgOTksIDI0MiwgMTMwLCAyNTAsIDAsIAotICAgIDI1MSwgNzgsIDI0OSwgOTMsIDc3LCAyMTksIDk3LCAyNDUsIDk5LCAyMTksIDc4LCAyMTYsIDIwMCwgMjMzLCA4MywgMjE2LCAKLSAgICAyMDAsIDIxOSwgNzgsIDIxNiwgMjAxLCAxNzcsIDEyOCwgMTExLCAyMzMsIDgzLCAyMTYsIDIwMSwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjQ1LCA5OCwgNSwgMiwgMjUxLCAxMDgsIDQ4LCAyMjQsIDIwMywgNzcsIDIxOSwgMTUzLCAyNDUsIDk4LCA1MCwgMjE4LCAKLSAgICA1NiwgNzcsIDIxOSwgMTUzLCAyNDUsIDk4LCA1MCwgMjI0LCAyMDMsIDc3LCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIAotICAgIDIxOCwgNTYsIDc3LCAyMTksIDE1MywgMjI4LCA1MiwgMTI4LCAxMTEsIDIyNCwgMjAzLCA3NywgMjQ1LCA5OCwgNTAsIDIxOCwgCi0gICAgNTYsIDc3LCAyNDUsIDk4LCA1MCwgMjI0LCAyMDMsIDc3LCAyMjgsIDUyLCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDIyOCwgCi0gICAgNTIsIDEyOCwgMTExLCAyMjQsIDIwMywgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDI1NCwgMTQ4LCAKLSAgICAxMjgsIDExMSwgMjI0LCAyMDMsIDc3LCAyMjgsIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNTYsIDc3LCAyMjgsIAotICAgIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDUyLCAyMjQsIDIwMiwgNTIsIDIxOCwgNTUsIDIxOCwgNjQsIDIsIDI0NywgMTIwLCAKLSAgICAyMTgsIDIyLCAyLCAyNDcsIDEyMCwgMjE4LCA2NCwgMiwgOTYsIDUsIDUxLCAyMTgsIDIyLCAyLCA5NiwgNSwgNTEsIDIxOCwgCi0gICAgNjQsIDIsIDIzMCwgODQsIDUsIDUxLCAyMTgsIDIyLCAyLCAyMzAsIDg0LCA1LCA1MSwgMjE4LCA2NCwgNjQsIDE3NywgMTI4LCAKLSAgICAyMTYsIDQyLCAyLCA1OSwgNDgsIDIxOCwgMjIsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAyMTgsIDY0LCAKLSAgICA2NCwgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIDIyLCA2NCwgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIDY0LCA2NCwgNzcsIDIxNiwgCi0gICAgODksIDIyNiwgMTY3LCAyMTgsIDIyLCA2NCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCAyMTgsIDY0LCA2NCwgNzcsIDI1NCwgCi0gICAgMTQ4LCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNjQsIDY0LCA3NywgMjI4LCAKLSAgICA1MiwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCA3NywgMjI4LCA1MiwgMTI4LCAxMTEsIDQyLCA0MywgMjA0LCA5MywgMjI2LCAKLSAgICAxNjcsIDQyLCA0NCwgMjA0LCA5MywgMjI2LCAxNjcsIDI1MCwgMCwgMjE4LCA2MywgMjUwLCAwLCAyMTgsIDIxLCAyNTAsIDAsIAotICAgIDIxOCwgNjQsIDE3NywgMTI4LCAxMTEsIDI1MCwgMCwgMjE4LCAyMiwgMTc3LCAxMjgsIDExMSwgMjE4LCA2NCwgNzcsIDIxOCwgCi0gICAgMjEsIDIxOCwgMjIsIDc3LCAyMTgsIDYzLCAyMTgsIDY0LCA3NywgMjE4LCA2MywgMjE4LCAyMiwgNzcsIDIxOCwgMjEsIAotICAgIDIxOCwgMjIsIDI1MiwgMzAsIDIxOCwgNjMsIDIxOCwgMjIsIDI1MiwgMzAsIDIyLCAyMzUsIDY1LCAyNTEsIDc4LCAyNDgsIAotICAgIDE1NywgMiwgMjE4LCA2MywgMjQ1LCAxNzAsIDY0LCAyMjYsIDE3MCwgMjQ2LCAxMDMsIDIyNSwgNDgsIDIsIDIxNywgMTIsIAotICAgIDIxNiwgMTMsIDIxNSwgMjQwLCAyMzUsIDE5OCwgMjQ0LCAyMSwgMjI4LCA2NSwgMjE5LCAyNTEsIDQzLCAyMTcsIDg3LCAKLSAgICAyMTksIDI1MSwgMTI0LCAyMTcsIDg3LCAyMTksIDI1MSwgMTIwLCAyMTcsIDg3LCAyMjUsIDE3MiwgMiwgMjIyLCA5MSwgNjcsIAotICAgIDI1MiwgMTQxLCAyMTUsIDIxMSwgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDEsIDQzLCAyMTUsIDkzLCA2NywgMjUyLCAKLSAgICAxNDEsIDUyLCA0MywgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQzLCAyMTUsIDkzLCAxOTksIDI0OCwgMTU3LCAKLSAgICAyNDMsIDI0MywgNDMsIDIzMSwgNjMsIDY0LCA1MiwgMjEzLCAyMzksIDIxOSwgMjUxLCAxMjQsIDIxNywgODgsIDIsIDIyNiwgCi0gICAgMTIzLCAyMTksIDI1MSwgMTIwLCAyMTcsIDg4LCAyLCAyMTQsIDE4MywgMjE5LCAyNTEsIDEyMCwgMjE3LCA4OCwgNzcsIAotICAgIDIxOSwgMjUxLCAxMjQsIDIxNywgODcsIDUyLCAxMjQsIDIxNywgODcsIDUyLCAxMjAsIDIxNywgODcsIDUyLCAyMTgsIDEwMywgCi0gICAgMjI4LCA1MiwgNTAsIDIyMywgNDksIDUyLCAyMTgsIDEwMywgMjI4LCA1MiwgNTAsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDcsIAotICAgIDE3NSwgMiwgMjIzLCA0OSwgMjI5LCAxMDEsIDIxOSwgOTUsIDY3LCAyMzIsIDIxNCwgMiwgMjUwLCAzNiwgNDgsIDY3LCAKLSAgICAyMzIsIDIxNCwgMiwgMjUwLCAzNiwgNTEsIDEyNCwgMjE3LCA4OCwgMiwgMjUwLCAzNiwgNTEsIDIyNiwgOCwgMiwgMjAzLCAKLSAgICA5MSwgMjI2LCA4LCAyLCAyMTYsIDg5LCAyMjYsIDE2NywgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgMjUxLCAyNDQsIDIyMywgCi0gICAgOTEsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDIsIDIwMywgOTEsIDIxNSwgMjExLCAyNDksIDIyNywgMjI2LCAxNjcsIAotICAgIDIxNSwgMjExLCAyMjksIDkxLCAyMzMsIDE0LCAyMTUsIDIxMSwgMjI5LCA5MSwgMjQyLCAxMjksIDI0NiwgMTExLCAyMTksIAotICAgIDk3LCAyMzMsIDE1LCAxNzcsIDEyOCwgMTExLCAyNDYsIDExMSwgMjE5LCA5NywgMjQyLCAxMzAsIDE3NywgMTI4LCAxMTEsIAotICAgIDIxNSwgMjExLCAyMTksIDQ3LCAyNTEsIDI0NCwgMjIzLCA5MSwgMjMzLCA4NSwgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgCi0gICAgMjI2LCAxNjcsIDUyLCAyMTksIDQ3LCAyMjYsIDE2NywgNzEsIDY3LCAxMzAsIDIzMCwgMjQsIDcxLCA2NywgMTMwLCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzEsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDcxLCA3NCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDcxLCA3NCwgCi0gICAgMjE5LCAyOCwgMjEyLCA5LCA3MSwgNzQsIDQzLCA0NCwgNzEsIDc0LCAxNDAsIDg1LCA3NCwgMjE0LCAxNTMsIDg1LCA3NCwgCi0gICAgMjQ2LCAxMDQsIDg1LCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDg1LCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA4NSwgNzQsIAotICAgIDIxOSwgMjgsIDI0NSwgMjIwLCA4NSwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgODUsIDc0LCA0MywgNDQsIDg1LCA3NCwgMTIwLCAKLSAgICAxMjQsIDg1LCA3NCwgOTcsIDgwLCAyLCAyMTYsIDc3LCAyNDYsIDEwMywgOTcsIDgwLCAyLCAyMTYsIDc3LCAyMTQsIDE1MiwgCi0gICAgMTQwLCA4MCwgMiwgMjE2LCA3NywgMjQ2LCAxMDMsIDE0MCwgODAsIDIsIDIxNiwgNzcsIDIxNCwgMTUyLCA0MiwgMiwgMjE2LCAKLSAgICAxNCwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDI1MSwgMTc1LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyNDcsIDI1NSwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIzMiwgMTA4LCA0MywgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIAotICAgIDI0NywgMjQ5LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAyNDcsIDI0OSwgCi0gICAgMiwgMjE2LCAxNCwgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIDIsIDI1MSwgMTc1LCAxNjMsIDI1MSwgMjIxLCAyNDYsIAotICAgIDExOCwgMjE4LCAyMzQsIDg1LCAyMzMsIDg1LCAyMTgsIDIzNCwgNzEsIDIzMywgODUsIDIxOCwgMjM0LCA4NSwgMjEzLCAKLSAgICAxODcsIDQsIDIxOCwgMjM0LCA3MSwgMjEzLCAxODcsIDQsIDIxOCwgMjM0LCA4NSwgMjI1LCAxOTAsIDcxLCAyMjUsIDE5MCwgCi0gICAgNzEsIDI0MSwgMTkzLCA4NSwgMjQxLCAxOTMsIDIwMywgODUsIDI0MSwgMTkzLCA4NSwgMjMzLCA4NSwgMjUwLCAzNSwgODUsIAotICAgIDIzMSwgODIsIDI0NywgMjQ4LCA3MSwgMjMxLCA4MiwgMjQ3LCAyNDgsIDg1LCAyMzEsIDgyLCAyMzIsIDEwNCwgNzEsIDIzMSwgCi0gICAgODIsIDIzMiwgMTA0LCA4NSwgNCwgMjQ3LCAyNDgsIDg1LCA0LCAyMzIsIDEwNCwgNzEsIDQsIDIzMiwgMTA0LCA4NSwgMjAzLCAKLSAgICAyNDUsIDE2NCwgNzEsIDIwMywgMjQ1LCAxNjQsIDg1LCA2NywgMjQ1LCAxNjQsIDcxLCA2NywgMjQ1LCAxNjQsIDQzLCA4MCwgCi0gICAgMiwgNCwgMjUwLCAzNSwgMTM0LCAxNDAsIDI1MywgMjQ3LCA0MywgODAsIDIsIDM3LCAyMjUsIDIyLCAxOTksIDE0MCwgMjE4LCAKLSAgICAyMzAsIDc0LCAxNDAsIDIxNSwgNTgsIDgwLCAyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDUyLCA2NywgOTEsIAotICAgIDE0MCwgMjE1LCA1OCwgODAsIDI0MywgMjQzLCAxMzAsIDE0MCwgMjE1LCA1OCwgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgCi0gICAgMTQwLCA4MCwgMiwgMjQ2LCAxMTgsIDIxOCwgMTM5LCAxNDAsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDE0MCwgODAsIAotICAgIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDIxNywgNzcsIDE0MCwgMjE1LCA1OCwgCi0gICAgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCA5MSwgCi0gICAgMTQwLCA4MCwgMjE2LCAxMzksIDIxMSwgMTc4LCAyMTIsIDM2LCA4MCwgMjI1LCA3LCAyNDcsIDE5NSwgMjMzLCA0NiwgMjQ1LCAKLSAgICA5OCwgNSwgNzcsIDE0MCwgNzQsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgMTY4LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgNzcsIAotICAgIDIyMywgNTAsIDI1NCwgMTQ4LCAxMjgsIDExMSwgOTcsIDgwLCAyMTYsIDEzOSwgMjQyLCAxMjksIDk3LCA4MCwgMjE2LCAKLSAgICAxMzksIDIxOCwgMjEsIDE0MCwgMjI0LCAyNCwgNzQsIDk3LCAyMjQsIDI0LCA3NCwgMjIzLCA1MCwgMjE2LCA4OSwgMjI2LCAKLSAgICAxNjgsIDc3LCA5NywgNzQsIDk3LCA4MCwgNzcsIDIyMywgNTAsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE2LCA4OSwgMjI2LCAKLSAgICAxNjgsIDc3LCAxNDAsIDc0LCAxNDAsIDgwLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAxNDAsIDgwLCA3NywgMjIzLCA1MCwgCi0gICAgMjE2LCA4OSwgMjI2LCAxNjcsIDk3LCA4MCwgNzcsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgMTY3LCA3MSwgMjMxLCA4MiwgCi0gICAgMjE4LCAxNTYsIDg1LCA0LCAyMTgsIDE1NiwgNzEsIDQsIDIxOCwgMTU2LCA4NSwgMjIyLCAyNDcsIDIyNSwgMTkwLCA3MSwgCi0gICAgMjIyLCAyNDcsIDIyNSwgMTkwLCAxMTQsIDIzMywgODUsIDI1MCwgMzUsIDExNCwgMjI2LCAxMjQsIDIsIDIyNiwgMTI0LCAKLSAgICAyMzUsIDIxNSwgMTE0LCAyNTAsIDM2LCAyLCAyNTAsIDM2LCAyMzUsIDIxNSwgMTE0LCAyNTAsIDM1LCAxMTQsIDM3LCAyMjEsIAotICAgIDI1NCwgMTQ1LCA2LCAxLCAyNTMsIDE1OSwgMTQ1LCA2LCAxLCAyNTEsIDExNywgMTQ1LCA2LCAxLCAyMTMsIDI1MywgMTQ1LCAKLSAgICA2LCAxLCAyNDIsIDE4NSwgMTQ1LCA2LCAxLCAyNDcsIDE0MCwgMTQ1LCA2LCAxLCAyMTEsIDIxLCAxNDUsIDYsIDEsIDIxMCwgCi0gICAgNjgsIDE0NSwgNiwgMSwgMjQ2LCAzNCwgMTQ1LCA2LCAxLCAyMTAsIDkxLCAxNDUsIDYsIDEsIDIzNSwgMTQ4LCAxNDUsIDYsIAotICAgIDEsIDY1LCAyMzUsIDE0OCwgMTQ1LCA2LCAxLCA3MywgMTQ1LCA2LCAxLCAyNDcsIDE2MCwgMTQ1LCA2LCAxLCAyMzQsIDI0MCwgCi0gICAgMTQ1LCA2LCAxLCAyMzIsIDE4NiwgMTQ1LCA2LCAxLCAyMzAsIDI5LCAxNDUsIDYsIDEsIDIyOSwgMTkxLCAxNDUsIDYsIDEsIAotICAgIDIyNiwgMTg1LCAxNDUsIDYsIDEsIDIyNSwgNCwgMTQ1LCA2LCAxLCAyMjIsIDIyNywgMTQ1LCA2LCAxLCAyMTksIDgzLCAKLSAgICAxNDUsIDYsIDEsIDIxNSwgODEsIDE0NSwgNiwgMSwgMjE0LCAyMDEsIDE0NSwgNiwgMSwgMjQzLCAyNDYsIDE0NSwgNiwgMSwgCi0gICAgMjQxLCAxOTksIDE0NSwgNiwgMSwgMjI2LCAxMzUsIDE0NSwgNiwgMSwgMjI1LCAyMjEsIDE0NSwgNiwgMSwgMjE5LCAyMjgsIAotICAgIDE0NSwgNiwgMSwgMjE1LCAxNjcsIDE0NSwgNiwgMSwgMjUwLCA3NSwgMTQ1LCA2LCAxLCAyMjAsIDEwMiwgMTQ1LCA2LCAxLCAKLSAgICAyMTEsIDI3LCAxNDUsIDYsIDEsIDIxMSwgMjksIDE0NSwgNiwgMSwgMjExLCA1NywgMTQ1LCA2LCAxLCAyMTgsIDI1MywgCi0gICAgMTYyLCAxNDUsIDYsIDEsIDIxMCwgMjEyLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTg0LCAKLSAgICAyLCAyMTcsIDc3LCAxNDUsIDYsIDEsIDIxMCwgMjQ0LCAxNDUsIDYsIDEsIDIzNSwgMTg0LCA0LCAyMTAsIDE4MywgMTQ1LCAKLSAgICA2LCAxLCAyNTEsIDI0OSwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjM1LCAxODQsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMTQ1LCAKLSAgICA2LCAxLCAyNDQsIDgyLCAxNDUsIDYsIDEsIDIzNSwgMTQ2LCAxNDUsIDYsIDEsIDIxOSwgMjI3LCAxNDUsIDYsIDEsIDIxNSwgCi0gICAgMjAyLCA2MSwgMTQ1LCA2LCAxLCAyMzMsIDc1LCAyMzAsIDI5LCAxNDUsIDQsIDEsIDI1MywgMTU5LCAxNDUsIDQsIDEsIAotICAgIDI1MSwgMTE3LCAxNDUsIDQsIDEsIDIxMywgMjUzLCAxNDUsIDQsIDEsIDI0MiwgMTg1LCAxNDUsIDQsIDEsIDI0NywgMTQwLCAKLSAgICAxNDUsIDQsIDEsIDIxMSwgMjEsIDE0NSwgNCwgMSwgMjEwLCA2OCwgMTQ1LCA0LCAxLCAyNDYsIDM0LCAxNDUsIDQsIDEsIAotICAgIDIxMCwgOTEsIDE0NSwgNCwgMSwgMjM1LCAxNDgsIDE0NSwgNCwgMSwgNjUsIDIzNSwgMTQ4LCAxNDUsIDQsIDEsIDczLCAKLSAgICAxNDUsIDQsIDEsIDI0NywgMTYwLCAxNDUsIDQsIDEsIDIzNCwgMjQwLCAxNDUsIDQsIDEsIDIzMiwgMTg2LCAxNDUsIDQsIDEsIAotICAgIDIzMCwgMjksIDE0NSwgNCwgMSwgMjI5LCAxOTEsIDE0NSwgNCwgMSwgMjI2LCAxODUsIDE0NSwgNCwgMSwgMjI1LCA0LCAKLSAgICAxNDUsIDQsIDEsIDIyMiwgMjI3LCAxNDUsIDQsIDEsIDIxOSwgODMsIDE0NSwgNCwgMSwgMjE1LCA4MSwgMTQ1LCA0LCAxLCAKLSAgICAyMTQsIDIwMSwgMTQ1LCA0LCAxLCAyNDMsIDI0NiwgMTQ1LCA0LCAxLCAyNDEsIDE5OSwgMTQ1LCA0LCAxLCAyMjYsIDEzNSwgCi0gICAgMTQ1LCA0LCAxLCAyMjUsIDIyMSwgMTQ1LCA0LCAxLCAyMTksIDIyOCwgMTQ1LCA0LCAxLCAyMTUsIDE2NywgMTQ1LCA0LCAxLCAKLSAgICAyNTAsIDc1LCAxNDUsIDQsIDEsIDIyMCwgMTAyLCAxNDUsIDQsIDEsIDIxMSwgMjcsIDE0NSwgNCwgMSwgMjExLCAyOSwgCi0gICAgMTQ1LCA0LCAxLCAyMTEsIDU3LCAxNDUsIDQsIDEsIDIxOCwgMjUzLCAxNjIsIDE0NSwgNCwgMSwgMjEwLCAyMTIsIDE0NSwgCi0gICAgNCwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNCwgMSwgNCwgMjEwLCAxODQsIDIsIDIxNywgNzcsIDE0NSwgNCwgMSwgMjEwLCAKLSAgICAyNDQsIDE0NSwgNCwgMSwgMjM1LCAxODQsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgCi0gICAgMTQ1LCA0LCAxLCAyMzUsIDE4NCwgMjUxLCAyNDksIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDI0NCwgODIsIDE0NSwgNCwgMSwgCi0gICAgMjM1LCAxNDYsIDE0NSwgNCwgMSwgMjE5LCAyMjcsIDE0NSwgNCwgMSwgMjE1LCAyMDIsIDYxLCAxNDUsIDQsIDEsIDIzMywgCi0gICAgNzUsIDIzMCwgMjksIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA1MiwgMTMwLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTIsIAotICAgIDEzMCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDIzMCwgMjI0LCAxODIsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCA5MSwgNywgNiwgCi0gICAgMSwgMjIzLCAyMjQsIDIsIDIxNywgNzcsIDcsIDQsIDEsIDExNSwgMiwgOTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDcsIAotICAgIDI1NSwgOTEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMzksIDcsIAotICAgIDYsIDEsIDIzNSwgMjQsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDIxMCwgCi0gICAgMTYwLCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCAzOSwgNywgNiwgMSwgMjU0LCAxNDMsIDcsIDYsIAotICAgIDEsIDIzMiwgNTAsIDIsIDEwMywgNywgNiwgMSwgMjE1LCA5NCwgNjEsIDcsIDYsIDEsIDIxNSwgOTQsIDI1NCwgMTQzLCA3LCAKLSAgICA0LCAxLCAyMTQsIDEwNiwgMiwgNDQsIDEwMywgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTAzLCA3LCA0LCAxLCAyMTIsIDk5LCAKLSAgICAyLCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyNDksIDEwMCwgNywgNiwgMSwgMTYzLCAyNDIsIDYwLCA3LCA0LCAxLCAKLSAgICAxNjMsIDI0MiwgNjAsIDcsIDQsIDEsIDIxNywgNzUsIDIyNSwgMTMzLCA3LCA0LCAxLCAxNjAsIDIsIDIyOCwgNTAsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCA3LCA0LCAxLCAxNDQsIDIsIDEyMSwgMjIyLCAyMzQsIDIzNSwgCi0gICAgMjE1LCA3LCAxLCA0LCA2LCAyMTUsIDk0LCA3NSwgNywgMjE4LCA2NSwgNCwgMSwgMjM1LCAxNDQsIDU4LCAxLCA2LCAyMTQsIAotICAgIDEwNSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyMTcsIAotICAgIDI1MCwgMjE3LCA3NywgODEsIDYsIDEsIDI1NCwgMTY0LCA4MSwgNCwgMSwgMjU0LCAxNjQsIDgxLCA2LCAxLCAyMTMsIDE3MywgCi0gICAgODEsIDQsIDEsIDIxMywgMTczLCA4MSwgNiwgMSwgMjQzLCAxMDcsIDgxLCA0LCAxLCAyNDMsIDEwNywgODEsIDYsIDEsIAotICAgIDI0OCwgMTkxLCA4MSwgNCwgMSwgMjQ4LCAxOTEsIDgxLCA2LCAxLCAyNDUsIDE5NCwgODEsIDQsIDEsIDI0NSwgMTk0LCA4MSwgCi0gICAgNiwgMSwgMjE5LCAzMywgODEsIDQsIDEsIDIxOSwgMzMsIDgxLCA2LCAxLCAyMTAsIDEwMSwgODEsIDQsIDEsIDIxMCwgMTAxLCAKLSAgICA4MSwgNiwgMSwgMjQxLCAyNDgsIDgxLCA0LCAxLCAyNDEsIDI0OCwgODEsIDYsIDEsIDIxNiwgMTc3LCA4MSwgNCwgMSwgCi0gICAgMjE2LCAxNzcsIDgxLCA2LCAxLCAyNDAsIDExNiwgODEsIDQsIDEsIDI0MCwgMTE2LCA4MSwgNiwgMSwgMjM0LCAyMjcsIDgxLCAKLSAgICA0LCAxLCAyMzQsIDIyNywgODEsIDYsIDEsIDIzMywgNzIsIDgxLCA0LCAxLCAyMzMsIDcyLCA4MSwgNiwgMSwgMjMwLCAyMzAsIAotICAgIDgxLCA0LCAxLCAyMzAsIDIzMCwgODEsIDYsIDEsIDIyOCwgMjMzLCA4MSwgNCwgMSwgMjI4LCAyMzMsIDgxLCA2LCAxLCAKLSAgICAyMzMsIDIzMywgODEsIDQsIDEsIDIzMywgMjMzLCA4MSwgNiwgMSwgNzYsIDgxLCA0LCAxLCA3NiwgODEsIDYsIDEsIDIyNSwgCi0gICAgMTA4LCA4MSwgNCwgMSwgMjI1LCAxMDgsIDgxLCA2LCAxLCAyMjIsIDIxMSwgODEsIDQsIDEsIDIyMiwgMjExLCA4MSwgNiwgCi0gICAgMSwgMjE5LCAxNjUsIDgxLCA0LCAxLCAyMTksIDE2NSwgODEsIDYsIDEsIDIxNywgNDEsIDgxLCA0LCAxLCAyMTcsIDQxLCAKLSAgICA4MSwgNiwgMSwgMjE0LCAyMjksIDgxLCA0LCAxLCAyMTQsIDIyOSwgODEsIDYsIDEsIDI0NCwgMTIxLCA4MSwgNCwgMSwgCi0gICAgMjQ0LCAxMjEsIDgxLCA2LCAxLCAyMzQsIDExMiwgODEsIDQsIDEsIDIzNCwgMTEyLCA4MSwgNiwgMSwgMjI0LCAxNjEsIDgxLCAKLSAgICA0LCAxLCAyMjQsIDE2MSwgODEsIDYsIDEsIDIyNiwgMTc4LCA4MSwgNCwgMSwgMjI2LCAxNzgsIDgxLCA2LCAxLCAyNDcsIAotICAgIDI1MywgMjU0LCAxNzAsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjU0LCAxNzAsIDgxLCA2LCAxLCA1NSwgODEsIDI1NCwgMTk2LCAKLSAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNTQsIDE5NiwgODEsIDYsIDEsIDI0OSwgMTE1LCAyNDUsIDE5NCwgODEsIDQsIDEsIDI0OSwgCi0gICAgMTE1LCAyNDUsIDE5NCwgODEsIDYsIDEsIDI0NywgMjUzLCAyMzQsIDIyNywgODEsIDQsIDEsIDI0NywgMjUzLCAyMzQsIAotICAgIDIyNywgODEsIDYsIDEsIDI0NywgMjUzLCAyMjgsIDIzMywgODEsIDQsIDEsIDI0NywgMjUzLCAyMjgsIDIzMywgODEsIDYsIAotICAgIDEsIDI0OSwgMTE1LCAyMjgsIDIzMywgODEsIDQsIDEsIDI0OSwgMTE1LCAyMjgsIDIzMywgODEsIDYsIDEsIDU1LCA4MSwgCi0gICAgMjI2LCAxNzgsIDgxLCA0LCAxLCA1NSwgODEsIDIyNiwgMTc4LCA4MSwgNiwgMSwgMjIxLCAyNDYsIDgxLCA0LCAxLCAyMjEsIAotICAgIDI0NiwgODEsIDYsIDEsIDI0OSwgMTI4LCAyMjAsIDU1LCA4MSwgNCwgMSwgMjQ5LCAxMjgsIDIyMCwgNTUsIDgxLCA2LCAxLCAKLSAgICA1NSwgODEsIDIyMCwgNTUsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgNTUsIDgxLCA2LCAxLCA1NSwgODEsIDI0NSwgNzUsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0NSwgNzUsIDgxLCA2LCAxLCAyNTQsIDE4MiwgMjM0LCAxMTcsIDgxLCA0LCAxLCAyNTQsIAotICAgIDE4MiwgMjM0LCAxMTcsIDgxLCA2LCAxLCAyNDcsIDI1MywgMjQxLCA0NSwgODEsIDQsIDEsIDI0NywgMjUzLCAyNDEsIDQ1LCAKLSAgICA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDQ1LCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDQ1LCA4MSwgNiwgMSwgNTUsIDgxLCAKLSAgICAxNjIsIDgxLCA0LCAxLCA1NSwgODEsIDE2MiwgODEsIDYsIDEsIDIzMywgMTQ4LCAxNjIsIDgxLCA0LCAxLCAyMzMsIDE0OCwgCi0gICAgMTYyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDIxNywgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyMTcsIDgxLCA2LCAxLCAKLSAgICA1NSwgODEsIDI0MSwgMjUxLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDI1MSwgODEsIDYsIDEsIDU1LCA4MSwgMjQzLCAxMDIsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0MywgMTAyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDcsIDE2MywgODEsIDQsIDEsIDU1LCA4MSwgCi0gICAgMjQ3LCAxNjMsIDgxLCA2LCAxLCA1NSwgODEsIDIyMCwgMjIsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgMjIsIDgxLCA2LCAxLCAKLSAgICA1NSwgMjI3LCAyMDgsIDIyMCwgMjIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyMCwgMjIsIDgxLCA2LCAxLCA1NSwgCi0gICAgMjI3LCAyMDgsIDIyOSwgMjcsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyOSwgMjcsIDgxLCA2LCAxLCA1NSwgMjI3LCAKLSAgICAyMDgsIDIyNywgMTQ4LCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMjcsIDE0OCwgODEsIDYsIDEsIDU1LCAyMjcsIDIwOCwgCi0gICAgMjEyLCAzNywgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjEyLCAzNywgODEsIDE2LCAyMzQsIDI0NiwgODEsIDE2LCAyMzAsIAotICAgIDIzMSwgMjIyLCAyMTEsIDgxLCAxNiwgMjI1LCAxMDksIDIyMiwgMjExLCA4MSwgMTYsIDIxOCwgMTQ3LCA4MSwgMTYsIDIxNywgCi0gICAgNDIsIDIyMiwgMjExLCA4MSwgMTYsIDIzNCwgMTEzLCAyMjIsIDIxMSwgODEsIDE2LCAyMjAsIDIzLCAyMTksIDE2NSwgODEsIAotICAgIDYsIDEsIDI0OSwgMTE1LCAyMjAsIDU1LCA4MSwgNCwgMSwgMjQ5LCAxMTUsIDIyMCwgNTUsIDgxLCA2LCAxLCAyNDksIDExNSwgCi0gICAgMjQzLCAxMDIsIDgxLCA0LCAxLCAyNDksIDExNSwgMjQzLCAxMDIsIDgxLCAzOCwgMjI4LCAyMzQsIDQ4LCA4MSwgMzgsIAotICAgIDIxOCwgMjQ3LCAyNTMsIDIyNCwgODEsIDM4LCAyMTgsIDI0NywgMjMzLCAyMSwgODEsIDYsIDEsIDI1MSwgMTk5LCAyMzQsIAotICAgIDExNywgODEsIDQsIDEsIDI1MSwgMTk5LCAyMzQsIDExNywgODEsIDU1LCAyMjcsIDIwOCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICA4MSwgNTUsIDIyNywgMjA4LCAyNDcsIDE5NywgMjI0LCAxMywgNzgsIDgxLCA1NSwgMjI3LCAyMDgsIDIzNSwgMjM3LCAyMjQsIAotICAgIDEzLCA3OCwgODEsIDU1LCAyMjcsIDIwOCwgMjEzLCAyNDEsIDI0NywgMTcyLCA4MSwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIAotICAgIDgxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDgxLCAyMzAsIDEyNCwgMjQ3LCAxNzIsIDk4LCA0LCAxLCAyNTQsIDEyMywgOTgsIAotICAgIDQsIDEsIDI1MiwgMTUyLCA5OCwgNCwgMSwgMjQzLCAxMDYsIDk4LCA0LCAxLCAyNDcsIDEyOCwgOTgsIDQsIDEsIDI0NSwgCi0gICAgMTUwLCA5OCwgNCwgMSwgMjEzLCAxNjAsIDk4LCA0LCAxLCAyMTAsIDg5LCA5OCwgNCwgMSwgMjE3LCA2MCwgOTgsIDQsIDEsIAotICAgIDIzNSwgMjU1LCA5OCwgNCwgMSwgMjM0LCAyMzQsIDk4LCA0LCAxLCAyMzMsIDgxLCA5OCwgNCwgMSwgMjMxLCAxODUsIDk4LCAKLSAgICA0LCAxLCAyMjksIDE5NSwgOTgsIDQsIDEsIDIyNiwgMTk2LCA5OCwgNCwgMSwgMjI2LCAxNywgOTgsIDQsIDEsIDIxMCwgNzgsIAotICAgIDk4LCA0LCAxLCAyMjMsIDE3MSwgOTgsIDQsIDEsIDIyMSwgMjQzLCA5OCwgNCwgMSwgMjE3LCA1MCwgOTgsIDQsIDEsIDIxNCwgCi0gICAgMTkwLCA5OCwgNCwgMSwgMjI1LCAxNDAsIDk4LCA0LCAxLCAyMzQsIDEyMSwgOTgsIDQsIDEsIDI0MiwgMjQxLCA5OCwgNCwgCi0gICAgMSwgMjI0LCA3MywgOTgsIDQsIDEsIDIyMCwgMjAsIDk4LCA0LCAxLCAyNTAsIDk3LCA5OCwgNCwgMSwgMjUxLCA3LCA5OCwgCi0gICAgNCwgMSwgMjM1LCAxMDAsIDk4LCA0LCAxLCAyNTAsIDQwLCA5OCwgNCwgMSwgMjUwLCAxNDMsIDk4LCA0LCAxLCAyMTEsIAotICAgIDE2MywgOTgsIDQsIDEsIDIzNSwgMTExLCA5OCwgNCwgMSwgMjQyLCA0MywgOTgsIDQsIDEsIDI0MSwgMjM4LCA5OCwgNCwgMSwgCi0gICAgMjQxLCAxNzUsIDk4LCA0LCAxLCAyMTIsIDIyLCA5OCwgNCwgMSwgMjQyLCA0LCA5OCwgNCwgMSwgMjQxLCA2NSwgOTgsIDQsIAotICAgIDEsIDIxMCwgMjQ2LCA5OCwgNCwgMSwgMjU0LCAyMzIsIDIxNiwgMTA4LCAxLCAxOTEsIDIxNiwgMTA4LCAxLCAyMTEsIDk5LCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA5OCwgMjE2LCAxMDgsIDEsIDIxMSwgODgsIDIxNiwgMTA4LCAxLCAyMTEsIDg2LCAyMTYsIAotICAgIDEwOCwgMSwgMjUyLCAzMiwgMjU1LCAxNiwgMjExLCA4MSwgMjE2LCAxMDgsIDEsIDIxMSwgODEsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTEsIDk2LCAyMTYsIDEwOCwgMSwgMjExLCA5MywgMjE2LCAxMDgsIDEsIDIxMSwgOTUsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDk0LCAyMTYsIDEwOCwgMSwgMjExLCAxMiwgMjE2LCAxMDgsIDEsIDIxMSwgOTAsIDIxNiwgMTA4LCAxLCAyMTEsIDc5LCAKLSAgICAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNzksIDIxNiwgMTA4LCAxLCAyMTEsIDc2LCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDgsIDEsIDI1MiwgMzIsIDI1NSwgMTYsIDIxMSwgODQsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDgsIDEsIDIxMSwgODMsIDIxNiwgMTA4LCAxLCAyMTEsIDEwMywgMjE2LCAxMDgsIDEsIDIxMSwgNzcsIAotICAgIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA3NywgMjE2LCAxMDgsIDEsIDIxMSwgNjYsIDIxNiwgMTA4LCAxLCAyMTUsIAotICAgIDExNSwgMjExLCA2NiwgMjE2LCAxMDgsIDEsIDIxMSwgOCwgMjE2LCAxMDgsIDEsIDIxMSwgNDksIDIxNiwgMTA4LCAxLCAKLSAgICAyNTQsIDIwNywgMjExLCA0OSwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDQ5LCAyMTYsIDEwOCwgMSwgMjExLCA3NSwgCi0gICAgMjE2LCAxMDgsIDEsIDIxMSwgNzQsIDIxNiwgMTA4LCAxLCAyMTEsIDcxLCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgCi0gICAgODUsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA2OSwgMjE2LCAxMDgsIDEsIDIxMSwgNjcsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTAsIDIxMiwgMjE2LCAxMDgsIDEsIDIxMSwgNjQsIDIxNiwgMTA4LCAxLCAyMTEsIDYzLCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA4NywgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDg3LCAyMTYsIDEwOCwgMSwgMjUzLCAxNjMsIDIxMSwgODcsIDIxNiwgCi0gICAgMTA4LCAxLCAyMTEsIDYyLCAyMTYsIDEwOCwgMSwgMjExLCA2MCwgMjE2LCAxMDgsIDEsIDIxMSwgNjEsIDIxNiwgMTA4LCAxLCAKLSAgICAyMTEsIDU5LCAyMTYsIDEwOCwgMSwgMjExLCA1OCwgMjE2LCAxMDgsIDEsIDIxMSwgOTcsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDU2LCAyMTYsIDEwOCwgMSwgMjExLCA1NCwgMjE2LCAxMDgsIDEsIDIxMSwgNTMsIDIxNiwgMTA4LCAxLCAyMTEsIDUyLCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA1MCwgMjE2LCAxMDgsIDEsIDIxNywgMzQsIDIxMSwgNTAsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDQ4LCAyMTYsIDEwOCwgMSwgMjExLCA0NywgMjE2LCAxMDgsIDEsIDIxMCwgMjQ0LCAyMTYsIDEwOCwgNTgsIDEsIDIzMywgCi0gICAgMTI2LCA3OCwgMjE2LCAxMDgsIDIyMCwgMTM4LCA3OCwgMjE2LCAxMDgsIDExNiwgMjM1LCA2MywgMjksIDMsIDIzMiwgMTU1LCAKLSAgICAyOSwgMywgMjMwLCAxNjAsIDI5LCAzLCAyMjIsIDIwOSwgMjksIDMsIDIxOSwgNTcsIDI5LCAzLCAyMjAsIDYsIDI5LCAzLCAKLSAgICAyNTEsIDIwNCwgMjksIDMsIDIxNiwgNDEsIDI5LCAzLCAyNDksIDIzNywgMjksIDMsIDIyOCwgNzIsIDI5LCAzLCAyMjcsIAotICAgIDEzMywgMjksIDMsIDI0MiwgMTgwLCAyMjcsIDAsIDI5LCAzLCAyMTAsIDIyLCAyOSwgMywgMjQ3LCAxNDMsIDI5LCAzLCAKLSAgICAyNDgsIDEwNCwgMjksIDMsIDIzNSwgNjcsIDI5LCAzLCAyMTYsIDE1NSwgMjksIDMsIDI1MCwgODUsIDI5LCAzLCAyMjUsIAotICAgIDEyMCwgMjksIDMsIDIyNSwgMTUsIDI5LCAzLCAyNDIsIDI1NSwgMjksIDMsIDI0MiwgMjUxLCAyOSwgMywgMjQyLCAyNTIsIAotICAgIDI5LCAzLCAyNDIsIDI1MywgMjksIDMsIDIxOCwgMjIzLCAyOSwgMywgMjE4LCAxNzksIDI5LCAzLCAyMTgsIDE5MiwgMjksIAotICAgIDMsIDIxOCwgMjIyLCAyOSwgMywgMjE4LCAxOTYsIDI5LCAzLCAyMTgsIDE5NywgMjksIDMsIDIxOCwgMTg0LCAyOSwgMywgCi0gICAgMjUwLCAyMTMsIDI5LCAzLCAyNTAsIDE5MiwgMjksIDMsIDI1MCwgMTk0LCAyOSwgMywgMjUwLCAyMTIsIDI5LCAzLCAyNTAsIAotICAgIDIxMCwgMjksIDMsIDI1MCwgMjExLCAyOSwgMywgMjUwLCAxOTMsIDI5LCAzLCAyMDksIDI0MywgMjksIDMsIDIwOSwgMjIxLCAKLSAgICAyOSwgMywgMjA5LCAyMzQsIDI5LCAzLCAyMDksIDI0MiwgMjksIDMsIDIwOSwgMjM3LCAyOSwgMywgMjA5LCAyMzgsIDI5LCAKLSAgICAzLCAyMDksIDIyNiwgMjksIDMsIDI1MCwgMjA4LCAyOSwgMywgMjUwLCAxOTUsIDI5LCAzLCAyNTAsIDE5NywgMjksIDMsIAotICAgIDI1MCwgMjA3LCAyOSwgMywgMjUwLCAyMDUsIDI5LCAzLCAyNTAsIDIwNiwgMjksIDMsIDI1MCwgMTk2LCAyOSwgMywgMjIzLCAKLSAgICAyMzYsIDI5LCAzLCAyMjMsIDIyNiwgMjksIDMsIDIyMywgMjMyLCAyOSwgMywgMjIzLCAyMzUsIDI5LCAzLCAyMjMsIDIzMywgCi0gICAgMjksIDMsIDIyMywgMjM0LCAyOSwgMywgMjIzLCAyMzEsIDI5LCAzLCAyMzMsIDE1OSwgMjksIDMsIDIzMywgMTUxLCAyOSwgCi0gICAgMywgMjMzLCAxNTQsIDI5LCAzLCAyMzMsIDE1OCwgMjksIDMsIDIzMywgMTU1LCAyOSwgMywgMjMzLCAxNTYsIDI5LCAzLCAKLSAgICAyMzMsIDE1MiwgMjksIDMsIDIxMSwgMTMwLCAyOSwgMywgMjExLCAxMjAsIDI5LCAzLCAyMTEsIDEyNiwgMjksIDMsIDIxMSwgCi0gICAgMTI5LCAyOSwgMywgMjExLCAxMjcsIDI5LCAzLCAyMTEsIDEyOCwgMjksIDMsIDIxMSwgMTI1LCAyOSwgMywgMjQyLCA3MSwgCi0gICAgMjksIDMsIDI0MiwgNjIsIDI5LCAzLCAyNDIsIDY1LCAyOSwgMywgMjQyLCA3MCwgMjksIDMsIDI0MiwgNjcsIDI5LCAzLCAKLSAgICAyNDIsIDY4LCAyOSwgMywgMjQyLCA2NCwgMzgsIDMzLCAxLCAyNTIsIDc1LCAzOCwgMzMsIDEsIDIxMywgMjU1LCAzOCwgMzMsIAotICAgIDEsIDI0MiwgMjM2LCAzOCwgMzMsIDEsIDI0OCwgOTAsIDM4LCAzMywgMSwgMjEwLCA3NCwgMzgsIDMzLCAxLCAyMTAsIDk0LCAKLSAgICAzOCwgMzMsIDEsIDE3NiwgMzgsIDMzLCAxLCAyNDUsIDE3NCwgMzgsIDMzLCAxLCAyNDUsIDE1OSwgMzgsIDMzLCAxLCAyNDUsIAotICAgIDE1MCwgMzgsIDMzLCAxLCA3NiwgMzgsIDMzLCAxLCAyMjUsIDIyMSwgMzgsIDMzLCAxLCAyNDUsIDkyLCAzOCwgMzMsIDEsIAotICAgIDI0NSwgODIsIDM4LCAzMywgMSwgMjE3LCAyMiwgMzgsIDMzLCAxLCAxNjIsIDM4LCAzMywgMSwgMjE1LCAxNzgsIDM4LCAzMywgCi0gICAgMSwgMjUwLCAxMzEsIDM4LCAzMywgMSwgMjIwLCAxMDIsIDM4LCAzMywgMSwgMjIwLCA2NSwgMzgsIDMzLCAxLCAyNDQsIDgyLCAKLSAgICAzOCwgMzMsIDEsIDI0NSwgODEsIDM4LCAzMywgMSwgNjEsIDM4LCAzMywgMSwgMjM2LCA2MCwgMzgsIDMzLCAxLCAyNDcsIAotICAgIDE2MSwgMzgsIDMzLCAxLCAyMzAsIDE0MCwgMjE0LCAyMDUsIDM4LCAzMywgMSwgMjExLCA1OSwgMzgsIDMzLCAxLCAyMTAsIAotICAgIDIxMiwgMzgsIDMzLCAxLCAyMzUsIDE4MywgNjEsIDM4LCAzMywgMSwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzgsIDMzLCAxLCAyMzUsIDE4MywgMjUxLCAyNDksIDIxMCwgMTgzLCA0NCwgMjU0LCAKLSAgICAxMTAsIDIxOCwgNjAsIDIzMSwgMTU0LCA0NCwgMjU0LCAxMTAsIDI0NiwgMTE4LCAyMTgsIDYwLCAyMzEsIDE1NCwgNDMsIAotICAgIDIxOCwgNjAsIDEyNywgNDQsIDIxOCwgNjAsIDEyNywgNDMsIDI0NiwgMTE4LCAyMTgsIDYwLCAxMjcsIDQ0LCAyNDYsIDExOCwgCi0gICAgMjE4LCA2MCwgMTI3LCAyMjMsIDE1NywgMjM1LCAyMDIsIDIzMSwgMTU0LCAyMjMsIDE1NywgMjQ2LCAxMTgsIDIzNSwgMjAyLCAKLSAgICAyMzEsIDE1NCwgMjQ2LCAxMTgsIDIxNSwgMjQxLCAyMzEsIDE1NCwgNDMsIDIxNSwgMjQxLCAxMjcsIDQ0LCAyMTUsIDI0MSwgCi0gICAgMTI3LCAyMjMsIDE1NywgMjE4LCAyMzQsIDQzLCAyMjMsIDE1NywgMjI2LCAxOTgsIDEyNywgNDQsIDIyMywgMTU3LCAyMjYsIAotICAgIDE5OCwgMTI3LCAyNDUsIDIxMCwgMjQ5LCAxNTgsIDIyNiwgMTMsIDI0NCwgMjIsIDIyNiwgMTMsIDIyMywgNDksIDI0NCwgCi0gICAgMjIsIDIyNiwgMTMsIDI0MCwgMTY1LCAyNDYsIDExOCwgMjI2LCAyNTEsIDI0NiwgMTA0LCAyNTQsIDExOSwgMjE0LCAxNTMsIAotICAgIDI1NCwgMTE5LCAyNDYsIDExOCwgMjIyLCAyNDcsIDI1NCwgMTA5LCA1MiwgMjI2LCAyNDgsIDI0MCwgMTY4LCAyMzUsIDE5MywgCi0gICAgMjM1LCAyMDEsIDIyNiwgNTksIDI1MSwgMTU0LCAyNDAsIDE2OSwgMiwgMjQ4LCAxLCAyMTYsIDg5LCAyLCAyMjIsIDIzNCwgCi0gICAgNDgsIDQzLCAxMjEsIDIyNiwgNSwgMTI3LCA0NCwgMTIxLCAyMjYsIDUsIDEyNywgMjE2LCA4OSwgMiwgNTksIDQ4LCAyMTYsIAotICAgIDg5LCAyLCA1OSwgNTEsIDQzLCA2NywgMjUyLCAxNDEsIDIsIDIyNCwgNywgNDQsIDY3LCAyNTIsIDE0MSwgMiwgMjI0LCA3LCAKLSAgICAyMTYsIDE0LCA0MywgMTYzLCAxMjcsIDIxNiwgMTQsIDQ0LCAxNjMsIDEyNywgMjUxLCAxNzUsIDQzLCAxNjMsIDEyNywgCi0gICAgMjUxLCAxNzUsIDQ0LCAxNjMsIDEyNywgNDMsIDIxOSwgMTg3LCAxMDQsIDEyNywgNDQsIDIxOSwgMTg3LCAxMDQsIDEyNywgCi0gICAgNDMsIDUyLCAyMjYsIDMsIDQ0LCA1MiwgMjI2LCAzLCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIDE0MCwgMTIzLCAKLSAgICA1OSwgMTE3LCAxMTMsIDE3MCwgMjI0LCAxNDAsIDkyLCAyNDQsIDExLCA1OSwgMjI0LCAxNDAsIDI0NCwgODEsIDU5LCA3OCwgCi0gICAgMjIzLCA0OSwgMjI0LCAxMywgNzgsIDY3LCAxODIsIDIyMiwgMjM0LCAyMjUsIDEwLCAyMTEsIDIwOSwgMjIwLCAxMzgsIAotICAgIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjE1LCA5NCwgMjQ5LCAyMTksIDIyMywgMTU3LCAyNDcsIDEyMCwgMjIzLCAxNTcsIDI0OSwgCi0gICAgMjE5LCAyMTUsIDk0LCAyMjAsIDE1MCwgMjQ4LCAyMDYsIDIsIDQzLCAyNDIsIDEwOCwgMjQ4LCAyMDYsIDIsIDQ0LCAyNDIsIAotICAgIDEwOCwgMjE1LCA5NCwgMjQ4LCAyMDUsIDIxNiwgMTQsIDE2MywgMjIxLCAxNzMsIDUwLCAyMTUsIDU5LCAyNDgsIDE1NiwgCi0gICAgMjE2LCAxNDMsIDI0OCwgMTU2LCA5LCAzNCwgMjIzLCA3NiwgOSwgMzQsIDI1MCwgMTAsIDksIDM0LCAyMjEsIDE3NiwgMTEwLCAKLSAgICA5LCAzNCwgMjIxLCAxNzYsIDEwNSwgOSwgMzQsIDIyMSwgMTc2LCAxNTgsIDksIDM0LCAyMjUsIDE2NywgOSwgMzQsIDI1MSwgCi0gICAgMTYzLCA5LCAzNCwgMjE3LCA5MiwgOSwgMzQsIDIzNCwgMzMsIDExMCwgOSwgMzQsIDIzNCwgMzMsIDEwNSwgOSwgMzQsIAotICAgIDI0NywgMTcwLCA5LCAzNCwgMjIxLCAxNzksIDksIDM0LCA0LCAxMTAsIDksIDM0LCA0LCAxMDUsIDksIDM0LCAyMzMsIDk3LCAKLSAgICAxMTAsIDksIDM0LCAyMzMsIDk3LCAxMDUsIDksIDM0LCAyMzMsIDk3LCAxNTgsIDksIDM0LCAyMzMsIDk3LCAxNjEsIDksIAotICAgIDM0LCAyMTksIDY4LCA5LCAzNCwgMjE2LCAxNDUsIDksIDM0LCAyMTksIDY2LCAxMTAsIDksIDM0LCAyMTksIDY2LCAxMDUsIAotICAgIDksIDM0LCAyNDEsIDIyOCwgMTEwLCA5LCAzNCwgMjQxLCAyMjgsIDEwNSwgOSwgMzQsIDI0MiwgMTUsIDksIDM0LCAyMjMsIAotICAgIDE0NywgOSwgMzQsIDI1MCwgODIsIDksIDM0LCAyMTgsIDM3LCA5LCAzNCwgMjMwLCAxMjgsIDksIDM0LCAyNDgsIDg4LCA5LCAKLSAgICAzNCwgMjMwLCAxMjAsIDksIDM0LCAyNTAsIDI1LCA5LCAzNCwgMjEyLCA0MSwgMTEwLCA5LCAzNCwgMjEyLCA0MSwgMTA1LCAKLSAgICA5LCAzNCwgMjQ0LCA5NiwgOSwgMzQsIDIyNSwgMjMyLCAxMTAsIDksIDM0LCAyMjUsIDIzMiwgMTA1LCA5LCAzNCwgMjE5LCAKLSAgICAxNjAsIDE2MywgMjE1LCAyMzYsIDIxNSwgMTg4LCA5LCAzNCwgMjQ5LCAxNDUsIDksIDM0LCAyNDcsIDEzNiwgOSwgMzQsIAotICAgIDIzNSwgMTM3LCA5LCAzNCwgMjUxLCAxOTgsIDY0LCAyNDksIDI1MCwgOSwgMzQsIDI0NSwgMTUsIDksIDM0LCAyMTgsIDI0OSwgCi0gICAgMTEwLCA5LCAzNCwgMjE4LCAyNDksIDEwNSwgOSwgMzQsIDI1MiwgMTU0LCA5LCAzNCwgMjE5LCAxNjcsIDksIDM0LCAyNTEsIAotICAgIDYzLCAyMTksIDE2NywgOSwgMzQsIDIyOSwgOTAsIDExMCwgOSwgMzQsIDIyOSwgOTAsIDEwNSwgOSwgMzQsIDIyOSwgOTAsIAotICAgIDE1OCwgOSwgMzQsIDIyOSwgOTAsIDE2MSwgOSwgMzQsIDIzMSwgNDYsIDksIDM0LCAyMjAsIDU3LCA5LCAzNCwgMjIzLCAKLSAgICAxNTMsIDksIDM0LCAyNDUsIDM3LCA5LCAzNCwgMjI2LCAyMDksIDksIDM0LCAyNTEsIDEzMywgMTEwLCA5LCAzNCwgMjUxLCAKLSAgICAxMzMsIDEwNSwgOSwgMzQsIDIzMSwgODYsIDksIDM0LCAyMzAsIDEyMywgOSwgMzQsIDI0MiwgMTQwLCAxMTAsIDksIDM0LCAKLSAgICAyNDIsIDE0MCwgMTA1LCA5LCAzNCwgMjQyLCAxNDAsIDE1OCwgOSwgMzQsIDIxNiwgMTA2LCA5LCAzNCwgMjQ5LCAyNDksIDksIAotICAgIDM0LCAyMTIsIDksIDExMCwgOSwgMzQsIDIxMiwgOSwgMTA1LCA5LCAzNCwgMjUxLCA2MywgMjIxLCAxNzAsIDksIDM0LCAKLSAgICAyMTksIDE2MCwgMjQwLCAyNDgsIDksIDM0LCAyNDAsIDI0OCwgOSwgMzQsIDI1MSwgNjMsIDIxOSwgMiwgOSwgMzQsIDI1MSwgCi0gICAgNjMsIDIyMCwgNTIsIDksIDM0LCAyNDQsIDMyLCA5LCAzNCwgMjUxLCA2MywgMjUwLCAyMjgsIDksIDM0LCAyMTksIDE2MCwgCi0gICAgMjEyLCA1NywgOSwgMzQsIDIxMiwgNTgsIDExMCwgOSwgMzQsIDIxMiwgNTgsIDEwNSwgOSwgMzQsIDI1MCwgMjcsIDksIDM0LCAKLSAgICAyNTEsIDYzLCAyNDIsIDE2NiwgOSwgMzQsIDE5OSwgMTEwLCA5LCAzNCwgMTk5LCAxMDUsIDksIDM0LCAyNTEsIDYzLCAyMzIsIAotICAgIDEzNywgOSwgMzQsIDI1MSwgNjMsIDI0MywgODgsIDksIDM0LCAyMzAsIDExOSwgMTEwLCA5LCAzNCwgMjMwLCAxMTksIDEwNSwgCi0gICAgOSwgMzQsIDIyMywgMTU5LCA5LCAzNCwgMjUxLCAyMDcsIDksIDM0LCAyNTEsIDYzLCAyMTcsIDU2LCAyMzMsIDUyLCA5LCAKLSAgICAzNCwgMjUxLCA2MywgMjMzLCA1MywgOSwgMzQsIDI1MSwgNjMsIDIxMSwgMjM5LCA5LCAzNCwgMjUxLCA2MywgMjQ0LCA0NiwgCi0gICAgOSwgMzQsIDI0NSwgMjE4LCAxMTAsIDksIDM0LCAyNDUsIDIxOCwgMTA1LCA5LCAzNCwgMjQ1LCAyMTgsIDE1OCwgOSwgMzQsIAotICAgIDI1MSwgNjMsIDI0NSwgMjE3LCA5LCAzNCwgMjQxLCAyMzUsIDksIDM0LCAyNTEsIDYzLCAyNDAsIDI0NSwgOSwgMzQsIDI1MSwgCi0gICAgMTk0LCA5LCAzNCwgMjQyLCAyMjIsIDksIDM0LCAyNTEsIDYzLCAyNDQsIDkwLCA5LCAzNCwgMjUxLCA2MywgMjUxLCAyMzcsIAotICAgIDksIDM0LCAyNTEsIDYzLCAyMjIsIDEsIDksIDM0LCAyMTksIDE2MCwgMjEyLCAyLCA5LCAzNCwgMjE5LCAxNjAsIDIxMSwgCi0gICAgNDEsIDksIDM0LCAyNTEsIDYzLCAyNDMsIDI0NCwgOSwgMzQsIDIzNSwgMTQzLCAyNDUsIDQxLCA5LCAzNCwgMjUxLCA2MywgCi0gICAgMjQ1LCA0MSwgOSwgMzQsIDIzNSwgMTQzLCAyMTYsIDE1LCA5LCAzNCwgMjUxLCA2MywgMjE2LCAxNSwgOSwgMzQsIDIzNSwgCi0gICAgMTQzLCAyNDYsIDk2LCA5LCAzNCwgMjUxLCA2MywgMjQ2LCA5NiwgOSwgMzQsIDIxNSwgOTEsIDksIDM0LCAyMzUsIDE0MywgCi0gICAgMjE1LCA5MSwgOSwgMzQsIDI1MSwgNjMsIDIxNSwgOTEsIDYwLCAzNCwgMTEwLCA2MCwgMzQsIDIzMiwgMjEzLCA2MCwgMzQsIAotICAgIDI0NywgMTIwLCA2MCwgMzQsIDIxOSwgOTUsIDYwLCAzNCwgMjIxLCAxNzUsIDYwLCAzNCwgMTAzLCA2MCwgMzQsIDEwNSwgCi0gICAgNjAsIDM0LCAyMzIsIDIzNywgNjAsIDM0LCAyMzEsIDE4NSwgNjAsIDM0LCAyMzMsIDMzLCA2MCwgMzQsIDI0NSwgMTI5LCAKLSAgICA2MCwgMzQsIDE5NSwgNjAsIDM0LCAxMjQsIDI1MSwgMTYzLCA2MCwgMzQsIDI0OSwgMTQ3LCA2MCwgMzQsIDI0MCwgMTExLCAKLSAgICA2MCwgMzQsIDIxNywgOTIsIDYwLCAzNCwgMjA0LCAyNTEsIDE2MywgNjAsIDM0LCAyMzQsIDMyLCA2MCwgMzQsIDIyNCwgCi0gICAgMjI0LCA2MCwgMzQsIDIxMSwgMjAyLCA2MCwgMzQsIDIxOCwgMjQzLCA2MCwgMzQsIDQ0LCAyMDQsIDI1MSwgMTYzLCA2MCwgCi0gICAgMzQsIDI0MSwgMTc2LCAyNDUsIDE0NSwgNjAsIDM0LCAyMTYsIDI0NywgNjAsIDM0LCAyNDcsIDE3MCwgNjAsIDM0LCAyMjEsIAotICAgIDE3OSwgNjAsIDM0LCAyNTAsIDEwLCA2MCwgMzQsIDIyNCwgMTgyLCA2MCwgMzQsIDI1NCwgMjE1LCA2MCwgMzQsIDIzMCwgCi0gICAgMTEwLCA2MCwgMzQsIDI0NSwgMTQ1LCA2MCwgMzQsIDI0NSwgMjIzLCA2MCwgMzQsIDIyMSwgMjAwLCA2MCwgMzQsIDI0MiwgCi0gICAgMTc0LCA2MCwgMzQsIDI0MiwgMTc1LCAyMTksIDgxLCA2MCwgMzQsIDI0NSwgNDAsIDYwLCAzNCwgMjUxLCAyNDgsIDYwLCAKLSAgICAzNCwgMjExLCAyMjEsIDYwLCAzNCwgMjUwLCAxMDEsIDYwLCAzNCwgMjIyLCAxOTYsIDYwLCAzNCwgMjM1LCAyNTEsIDYwLCAKLSAgICAzNCwgMjE5LCA3OSwgNjAsIDM0LCAyMzMsIDk2LCA2MCwgMzQsIDI0OSwgMTU2LCA2MCwgMzQsIDIxOCwgMjM3LCA2MCwgMzQsIAotICAgIDIzMCwgMTE1LCA2MCwgMzQsIDIyMiwgMjI0LCA2MCwgMzQsIDIxMSwgMjA2LCA2MCwgMzQsIDIyNiwgMTkwLCA2MCwgMzQsIAotICAgIDIxNSwgOTcsIDYwLCAzNCwgMjQ2LCA4MCwgNjAsIDM0LCAyMTksIDI1MSwgMjE2LCAxNDUsIDYwLCAzNCwgMjQ2LCAxMTgsIAotICAgIDI1MCwgMTAsIDYwLCAzNCwgMTk5LCAyMTgsIDEwOCwgNjAsIDM0LCAxMTMsIDI0MiwgMTAsIDYwLCAzNCwgMjIwLCAwLCA2MCwgCi0gICAgMzQsIDI1MSwgMTY5LCA2MCwgMzQsIDIxOSwgNjUsIDYwLCAzNCwgMjUxLCAxMzcsIDYwLCAzNCwgMjE4LCAxMzgsIDYwLCAKLSAgICAzNCwgMjQxLCAyMjcsIDYwLCAzNCwgMjQyLCAyOCwgNjAsIDM0LCAyNDcsIDEyMywgNjAsIDM0LCAyNDIsIDE1LCA2MCwgMzQsIAotICAgIDI1MSwgMTU0LCA2MCwgMzQsIDIyMywgMTQ3LCA2MCwgMzQsIDIyMSwgMTg3LCA2MCwgMzQsIDI0NywgMTk5LCA2MCwgMzQsIAotICAgIDI1MywgMTY4LCA2MCwgMzQsIDIxOCwgMjM0LCA2MCwgMzQsIDIyOCwgNTEsIDYwLCAzNCwgMjE4LCAzNywgNjAsIDM0LCAKLSAgICAyMjEsIDIxMSwgNjAsIDM0LCAyMzAsIDEyOCwgNjAsIDM0LCAyMTUsIDIzNSwgNjAsIDM0LCAyMzMsIDEyMiwgNjAsIDM0LCAKLSAgICAyMTgsIDEyOSwgNjAsIDM0LCAyNDgsIDg4LCA2MCwgMzQsIDIxMiwgMjEsIDYwLCAzNCwgMjQ3LCAxNDYsIDIyOCwgNTEsIAotICAgIDYwLCAzNCwgMjQ5LCAyMTUsIDYwLCAzNCwgMjQzLCAyMjIsIDYwLCAzNCwgMjUwLCAyMSwgNjAsIDM0LCAyMTgsIDE0MiwgCi0gICAgNjAsIDM0LCAyMTIsIDQwLCA2MCwgMzQsIDI0NCwgOTYsIDYwLCAzNCwgMjUwLCAxOCwgNjAsIDM0LCAyNDQsIDE2MSwgNjAsIAotICAgIDM0LCA1MiwgMjExLCAxNzgsIDYwLCAzNCwgMTYzLCAyMTUsIDIzNiwgMjE1LCAxODgsIDYwLCAzNCwgMjE5LCA4OSwgNjAsIAotICAgIDM0LCAyNDQsIDE3MSwgNjAsIDM0LCAyNDksIDE0NSwgNjAsIDM0LCAyNDcsIDEzNiwgNjAsIDM0LCAyMjQsIDE3OSwgNjAsIAotICAgIDM0LCAyMzUsIDEzNywgNjAsIDM0LCAyMzEsIDY3LCA2MCwgMzQsIDIxNiwgODgsIDYwLCAzNCwgMjE3LCAyNDUsIDYwLCAzNCwgCi0gICAgMjMyLCAyMzEsIDYwLCAzNCwgMjE0LCAxMzEsIDYwLCAzNCwgMjQ0LCAxMjAsIDYwLCAzNCwgMjUxLCAxOTgsIDY0LCAyNDksIAotICAgIDI1MCwgNjAsIDM0LCAyMTksIDE4OCwgNjAsIDM0LCAyNDYsIDExOCwgMjE2LCAyNDIsIDYwLCAzNCwgMjExLCAyNTMsIDYwLCAKLSAgICAzNCwgMjE5LCAxMDMsIDYwLCAzNCwgMjQ3LCAxODcsIDYwLCAzNCwgMjQ1LCAxNSwgNjAsIDM0LCAyMTksIDUsIDYwLCAzNCwgCi0gICAgNzQsIDYwLCAzNCwgMjE4LCAxMzEsIDYwLCAzNCwgMjE4LCAyNDgsIDYwLCAzNCwgMjE1LCAyNTUsIDYwLCAzNCwgMjQyLCAKLSAgICAxNDcsIDYwLCAzNCwgMjUwLCAyMTgsIDYwLCAzNCwgMjE4LCAxNjAsIDYwLCAzNCwgMjUyLCAxNTQsIDYwLCAzNCwgMjIzLCAKLSAgICAzMSwgNjAsIDM0LCAyMTksIDE2NywgNjAsIDM0LCAyMzUsIDEzMCwgNjAsIDM0LCAyMjksIDg5LCA2MCwgMzQsIDIyMCwgNTcsIAotICAgIDYwLCAzNCwgMjQ0LCAxNDksIDYwLCAzNCwgMjI2LCAyMDksIDYwLCAzNCwgMjU0LCAxMTgsIDYwLCAzNCwgMjI1LCAyOSwgCi0gICAgNjAsIDM0LCAyNDUsIDIyNywgNjAsIDM0LCAyNTEsIDEzMiwgNjAsIDM0LCAyMzEsIDg2LCA2MCwgMzQsIDIzMCwgMTgzLCAKLSAgICA2MCwgMzQsIDIyMCwgMTU2LCA2MCwgMzQsIDI1MywgMjUyLCA2MCwgMzQsIDIzMCwgMTIzLCA2MCwgMzQsIDIxNiwgMTksIAotICAgIDYwLCAzNCwgMjI2LCAxNjUsIDYwLCAzNCwgMjUxLCAyMDEsIDYwLCAzNCwgMjE4LCAxMjcsIDYwLCAzNCwgMjQ5LCAyMjUsIAotICAgIDYwLCAzNCwgMjQyLCAxMzksIDYwLCAzNCwgMjE2LCAxMDYsIDYwLCAzNCwgMjM1LCAyMTcsIDYwLCAzNCwgMjUxLCAyMTEsIAotICAgIDYwLCAzNCwgMjEyLCA1OCwgMjQ1LCAxNDUsIDYwLCAzNCwgMjQ5LCAyNDksIDYwLCAzNCwgMjEyLCA4LCA2MCwgMzQsIDIyMSwgCi0gICAgMTcwLCA2MCwgMzQsIDI0MCwgMjQ4LCA2MCwgMzQsIDIxOSwgMiwgNjAsIDM0LCAyMTQsIDIyLCA2MCwgMzQsIDI1MiwgNzIsIAotICAgIDYwLCAzNCwgMjI1LCA3MywgNjAsIDM0LCAyNTIsIDE3NCwgNjAsIDM0LCAyMjAsIDUyLCA2MCwgMzQsIDIyMywgMTEwLCA2MCwgCi0gICAgMzQsIDIyMiwgMTI2LCA2MCwgMzQsIDI0NCwgMzIsIDYwLCAzNCwgMjUxLCAyMDAsIDYwLCAzNCwgMjUwLCAyMjgsIDYwLCAKLSAgICAzNCwgMjUxLCAyMjYsIDYwLCAzNCwgMjMwLCAxMjUsIDYwLCAzNCwgMjEyLCA1NywgNjAsIDM0LCAyNTAsIDI3LCA2MCwgMzQsIAotICAgIDIxMSwgMjM2LCA2MCwgMzQsIDI0NywgMTgwLCA2MCwgMzQsIDIxMywgMTYxLCA2MCwgMzQsIDI0MiwgMTY2LCA2MCwgMzQsIAotICAgIDIzMiwgMTM3LCA2MCwgMzQsIDI0MywgODgsIDYwLCAzNCwgMjMwLCAxMTgsIDYwLCAzNCwgMjE5LCA5NCwgNjAsIDM0LCAKLSAgICAyMTksIDI1MSwgMjE3LCA3NiwgMjUxLCAyMzcsIDYwLCAzNCwgMjIzLCAxNTksIDYwLCAzNCwgMjUxLCAyMDcsIDYwLCAzNCwgCi0gICAgMjExLCAxOTcsIDYwLCAzNCwgMjQ0LCAxOTAsIDYwLCAzNCwgMjMzLCA1MiwgNjAsIDM0LCAyMTcsIDU2LCAyMzMsIDUyLCAKLSAgICA2MCwgMzQsIDIzMywgNDgsIDYwLCAzNCwgMjE5LCAzMCwgNjAsIDM0LCAyMzMsIDUzLCA2MCwgMzQsIDIxMSwgMjM5LCA2MCwgCi0gICAgMzQsIDI0NCwgNDYsIDYwLCAzNCwgMjQ1LCAyMTcsIDYwLCAzNCwgMjQxLCAyMzUsIDYwLCAzNCwgMjQ0LCAwLCA2MCwgMzQsIAotICAgIDI0MCwgMjQ1LCA2MCwgMzQsIDI1MSwgMTk0LCA2MCwgMzQsIDIxNywgNjMsIDYwLCAzNCwgMjQyLCAzNCwgNjAsIDM0LCAKLSAgICAyNDQsIDExMywgNjAsIDM0LCAyMjIsIDI4LCAyMTEsIDIzNiwgNjAsIDM0LCAyNTAsIDIyMCwgNjAsIDM0LCAyNDIsIDIyMiwgCi0gICAgNjAsIDM0LCAyNDQsIDkwLCA2MCwgMzQsIDI1MSwgMjM3LCA2MCwgMzQsIDIyMiwgMSwgNjAsIDM0LCAyNDgsIDc0LCA2MCwgCi0gICAgMzQsIDIxMiwgMiwgNjAsIDM0LCAyNDEsIDIxMCwgNjAsIDM0LCAyMTEsIDQxLCA2MCwgMzQsIDIzMCwgMTkyLCA2MCwgMzQsIAotICAgIDI1MSwgMjIxLCA2MCwgMzQsIDI0NSwgMTU1LCA2MCwgMzQsIDI0MywgMjQ0LCA2MCwgMzQsIDIxNSwgMjA5LCA2MCwgMzQsIAotICAgIDI0NiwgODIsIDYwLCAzNCwgMjIzLCAxNDEsIDYwLCAzNCwgMjI4LCA1MywgNjAsIDM0LCAyNDUsIDQxLCA2MCwgMzQsIDIxNiwgCi0gICAgMTUsIDYwLCAzNCwgMjQ2LCA5NiwgNjAsIDM0LCAyMTUsIDkxLCA2MCwgMzQsIDI0NCwgNDgsIDEwOSwgMjQ4LCAzNywgMTM1LCAKLSAgICA0MywgMjE2LCA0MiwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCA3NywgMjE2LCA0MiwgNTEsIDEwOSwgMjQ4LCAzNywgCi0gICAgMTM1LCA0MywgMjE2LCA0MiwgMjMwLCAyMjQsIDIyLCAyMjIsIDI1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDc3LCAyMTYsIDQyLCAKLSAgICAyMzAsIDIyNCwgMjIsIDUxLCAxMDksIDI0OCwgMzcsIDEzNSwgMjQzLCAyMjksIDIxOCwgMTAsIDEwOSwgMjQ4LCAzNywgCi0gICAgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgNDgsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgNTEsIAotICAgIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgMjMzLCA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgCi0gICAgMTEsIDI0MywgMjQzLCAyMTQsIDE2MCwgMjMzLCA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCAKLSAgICAyMTQsIDE2MCwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgMjMyLCAxMDgsIDIzMywgCi0gICAgNDYsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMjYsIDEyMiwgMTA5LCAyMTksIDE4LCAxMDksIDI0OSwgMjE5LCAxMDksIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgMjQ3LCAxNzcsIDc4LCAyMzUsIDEzMSwgMjM1LCAyMzYsIDIxOCwgMTU5LCA4NywgMTA5LCAyMzUsIAotICAgIDE1OCwgNzgsIDEwOSwgMjQ5LCAyNTIsIDc4LCAxMDksIDU0LCAyMTAsIDg2LCA0MywgMjU0LCAxMTAsIDEyNywgNDQsIDI1NCwgCi0gICAgMTEwLCAxMjcsIDQzLCA1MiwgMjU0LCAxMTAsIDEyNywgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCA0MywgMjQ5LCAxNjEsIAotICAgIDEyNywgNDQsIDI0OSwgMTYxLCAxMjcsIDQzLCA3MSwgMjQ5LCAxNjEsIDEyNywgNDQsIDcxLCAyNDksIDE2MSwgMTI3LCA0MywgCi0gICAgODUsIDIzMywgMjAsIDEyNywgNDQsIDg1LCAyMzMsIDIwLCAxMjcsIDIyNCwgMjM3LCA3OCwgMjQzLCAzMiwgNzgsIDQzLCAKLSAgICAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNDQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0MywgNzEsIDIzMywgMjAsIDEyNywgNDQsIAotICAgIDcxLCAyMzMsIDIwLCAxMjcsIDQzLCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQ0LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAKLSAgICAxMjcsIDQzLCA3MSwgNDIsIDEyNywgNDQsIDcxLCA0MiwgMTI3LCAyMTIsIDM2LCAyNDgsIDE1NiwgMjIzLCA0OSwgNTIsIAotICAgIDIyNCwgMTkxLCAyMjMsIDI1NCwgNzgsIDUyLCAyMjQsIDE5MSwgMjIzLCAyNTQsIDc4LCAxMjEsIDUyLCAyMjQsIDE5MSwgCi0gICAgMjIzLCAyNTQsIDc4LCAyMjQsIDIzNywgMTY0LCAyNDQsIDE5MCwgMjQyLCA4LCAyMjcsIDE5OCwgMTEwLCAyNDIsIDgsIAotICAgIDIyNywgMTk4LCAxMDUsIDI0MiwgOCwgMjI3LCAxOTgsIDE1OCwgMjQyLCA4LCAyMjcsIDE5OCwgMTYxLCAyNDIsIDgsIDIyNywgCi0gICAgMTk4LCAxODksIDI0MiwgOCwgMjI3LCAxOTgsIDE5NCwgMjQyLCA4LCAyMjcsIDE5OCwgMTk4LCAyNDIsIDgsIDIyNywgMTk4LCAKLSAgICAxOTUsIDI0MiwgOCwgMjI3LCAxOTgsIDIwMCwgMTA5LCAyMzMsIDMsIDEzOCwgNzgsIDEwOSwgMjIyLCAyMjgsIDEzOCwgNzgsIAotICAgIDEwOSwgMjQ4LCA0NCwgMTM4LCA3OCwgMTA5LCAyNDUsIDEyOCwgMTM4LCA3OCwgMjQsIDIxOSwgMTU1LCA1OSwgMTM4LCA3OCwgCi0gICAgMjQsIDUyLCA1OSwgMTM4LCA3OCwgMjEyLCAzMiwgMjQ4LCAxNTYsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgNzgsIDY3LCAKLSAgICAyMzQsIDIzMywgMjIzLCA3NywgMiwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDE2NCwgCi0gICAgMjE0LCAxNjAsIDI0MiwgMjcsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMiwgMjEzLCAxMzUsIDIxOSwgMzEsIDE2NCwgMjE0LCAKLSAgICAxNjAsIDI0MiwgMjcsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMTY0LCAyMzIsIDEwOCwgMjQyLCAyNywgMzcsIDIyNCwgCi0gICAgMjM3LCA3OCwgMTA5LCAyMTcsIDMsIDIzMiwgMjE0LCAyNDQsIDE0NiwgMjIwLCAxMzgsIDg3LCAyNDIsIDgsIDIyNywgMTk4LCAKLSAgICAyMTYsIDI0NywgMjQyLCA4LCAyMjcsIDE5OCwgMjE1LCA3MywgMjQyLCA4LCAyMjcsIDE5OCwgMjE2LCAxNjIsIDY3LCAxMDksIAotICAgIDIzNSwgMTU4LCA3OCwgMjMxLCAxNDAsIDc4LCAyMjUsIDI1NSwgMjU0LCAxNDAsIDc4LCAxMDksIDQ1LCAyMzUsIDIzOCwgCi0gICAgMTA5LCAxNjMsIDI0NCwgMTA2LCAyMTksIDE4LCAxNDEsIDEsIDQsIDYxLCAxNDEsIDEsIDYxLCAxNDEsIDEsIDQsIDczLCAKLSAgICAxNDEsIDEsIDczLCAxNDEsIDEsIDQsIDcwLCAxNDEsIDEsIDcwLCAxNDEsIDEsIDQsIDc1LCAxNDEsIDEsIDc1LCAxNDEsIDEsIAotICAgIDQsIDc2LCAxNDEsIDEsIDc2LCAxNDEsIDEsIDE3NiwgMTQxLCAxLCAyNDMsIDEzNSwgMTQxLCAxLCAyMzQsIDkyLCAxNDEsIAotICAgIDEsIDI0MiwgMjE0LCAxNDEsIDEsIDIzMywgMjE3LCAxNDEsIDEsIDI0MiwgMTEzLCAxNDEsIDEsIDIzNCwgMTgyLCAxNDEsIAotICAgIDEsIDI0MywgNjIsIDE0MSwgMSwgMjM0LCAyOCwgMTQxLCAxLCAyNDIsIDE3NCwgMTQxLCAxLCAyMDYsIDE0MSwgMSwgMjEwLCAKLSAgICAxMTYsIDE0MSwgMSwgMjE5LCAxOTEsIDE0MSwgMSwgMjEwLCA0NCwgMTQxLCAxLCAyMTgsIDgzLCAxNDEsIDEsIDIxMCwgMTMsIAotICAgIDE0MSwgMSwgMjIxLCAxODEsIDE0MSwgMSwgMjEwLCA5NCwgMTQxLCAxLCAyMTksIDU4LCAxNDEsIDEsIDIxMCwgMjMsIDE0MSwgCi0gICAgMSwgMjE3LCAxMDUsIDE0MSwgMSwgMjQ4LCAyMjEsIDE0MSwgMSwgMjE2LCAxMTcsIDE0MSwgMSwgMjQ4LCAzLCAxNDEsIDEsIAotICAgIDQsIDIxNSwgMTE4LCAxNDEsIDEsIDIxNSwgMTE4LCAxNDEsIDEsIDI0NiwgNzgsIDE0MSwgMSwgMjE3LCAyMiwgMTQxLCAxLCAKLSAgICAyNDgsIDkwLCAxNDEsIDEsIDExMSwgMTQxLCAxLCAyNDcsIDE0NSwgMTQxLCAxLCAxOTcsIDE0MSwgMSwgMjI4LCAyMzMsIAotICAgIDE0MSwgMSwgMjI3LCAyMzcsIDE0MSwgMSwgMjI5LCAxMDcsIDE0MSwgMSwgMjI4LCA3NCwgMTQxLCAxLCAxNjIsIDE0MSwgMSwgCi0gICAgMjUyLCAxOTEsIDE0MSwgMSwgMTkwLCAxNDEsIDEsIDI0MSwgMTgwLCAxNDEsIDEsIDI1MiwgNiwgMTQxLCAxLCAyMjUsIAotICAgIDEwOCwgMTQxLCAxLCAyNDAsIDIyMiwgMTQxLCAxLCAyNTEsIDEyNSwgMTQxLCAxLCAyMjQsIDE1MCwgMTQxLCAxLCAyNDEsIAotICAgIDIzOCwgMTQxLCAxLCAyNTIsIDc1LCAxNDEsIDEsIDIyNSwgMjIxLCAxNDEsIDEsIDI0MSwgNjgsIDE0MSwgMSwgMjUxLCAKLSAgICAyMDUsIDE0MSwgMSwgMjI1LCAxNiwgMTQxLCAxLCAxODQsIDE0MSwgMSwgMjMwLCAyMzAsIDE0MSwgMSwgMjMwLCAxMDIsIAotICAgIDE0MSwgMSwgMjMxLCA5MSwgMTQxLCAxLCAyMzAsIDE2MSwgMTQxLCAxLCA0LCAxOTEsIDE0MSwgMSwgMTkxLCAxNDEsIDEsIAotICAgIDQsIDIxMCwgMjEyLCAxNDEsIDEsIDIxMCwgMjEyLCAxNDEsIDEsIDQsIDIxMCwgMjQ0LCAxNDEsIDEsIDIxMCwgMjQ0LCAKLSAgICAxNDEsIDEsIDIwNSwgMTQxLCAxLCAyMjMsIDM1LCAxNDEsIDEsIDIyMiwgMTQwLCAxNDEsIDEsIDIyMywgMTI4LCAxNDEsIDEsIAotICAgIDIyMiwgMjExLCAxNDEsIDEsIDQsIDIxMiwgNjUsIDE0MSwgMSwgMjEyLCA2NSwgMTQxLCAxLCAyMTEsIDI1MCwgMTQxLCAxLCAKLSAgICAyMTIsIDIyLCAxNDEsIDEsIDIxMSwgMjI3LCAxNDEsIDEsIDIzMCwgMjUsIDE0MSwgMSwgMjEyLCAxMTYsIDE0MSwgMSwgNCwgCi0gICAgMTc2LCAxNDEsIDEsIDQsIDIzNCwgMTgyLCAzOCwgMjM0LCAyMDEsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgMzgsIDIzNCwgCi0gICAgMjAxLCAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDIzNCwgMjAxLCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDIzNCwgMjAxLCAKLSAgICAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDE0MSwgMjM1LCAxNTgsIDc4LCAxNDEsIDIxMywgMTM1LCAyMzUsIDE1OCwgNzgsIAotICAgIDE0MSwgMjQ3LCAyMjEsIDIxMCwgMjI1LCAyMzQsIDIwMSwgNTIsIDI0MCwgMTY4LCA1NiwgMSwgNCwgNjEsIDU2LCAxLCA2MSwgCi0gICAgNTYsIDEsIDQsIDczLCA1NiwgMSwgNzMsIDU2LCAxLCA0LCA3MCwgNTYsIDEsIDcwLCA1NiwgMSwgNCwgNzUsIDU2LCAxLCAKLSAgICA3NSwgNTYsIDEsIDQsIDc2LCA1NiwgMSwgNzYsIDU2LCAxLCAxNzYsIDU2LCAxLCAyNDMsIDEzNSwgNTYsIDEsIDIzNCwgOTIsIAotICAgIDU2LCAxLCAyNDIsIDIxNCwgNTYsIDEsIDIzMywgMjE3LCA1NiwgMSwgMjQyLCAxMTMsIDU2LCAxLCAyMzQsIDE4MiwgNTYsIAotICAgIDEsIDI0MywgNjIsIDU2LCAxLCAyMzQsIDI4LCA1NiwgMSwgMjQyLCAxNzQsIDU2LCAxLCAyMDYsIDU2LCAxLCAyMTAsIDExNiwgCi0gICAgNTYsIDEsIDIxOSwgMTkxLCA1NiwgMSwgMjEwLCA0NCwgNTYsIDEsIDIxOCwgODMsIDU2LCAxLCAyMTAsIDEzLCA1NiwgMSwgCi0gICAgMjIxLCAxODEsIDU2LCAxLCAyMTAsIDk0LCA1NiwgMSwgMjE5LCA1OCwgNTYsIDEsIDIxMCwgMjMsIDU2LCAxLCAyMTcsIAotICAgIDEwNSwgNTYsIDEsIDI0OCwgMjIxLCA1NiwgMSwgMjE2LCAxMTcsIDU2LCAxLCAyNDgsIDMsIDU2LCAxLCA0LCAyMTUsIDExOCwgCi0gICAgNTYsIDEsIDIxNSwgMTE4LCA1NiwgMSwgMjQ2LCA3OCwgNTYsIDEsIDIxNywgMjIsIDU2LCAxLCAyNDgsIDkwLCA1NiwgMSwgCi0gICAgMTExLCA1NiwgMSwgMjQ3LCAxNDUsIDU2LCAxLCAxOTcsIDU2LCAxLCAyMjgsIDIzMywgNTYsIDEsIDIyNywgMjM3LCA1NiwgCi0gICAgMSwgMjI5LCAxMDcsIDU2LCAxLCAyMjgsIDc0LCA1NiwgMSwgMTYyLCA1NiwgMSwgMjUyLCAxOTEsIDU2LCAxLCAxOTAsIDU2LCAKLSAgICAxLCAyNDEsIDE4MCwgNTYsIDEsIDI1MiwgNiwgNTYsIDEsIDIyNSwgMTA4LCA1NiwgMSwgMjQwLCAyMjIsIDU2LCAxLCAyNTEsIAotICAgIDEyNSwgNTYsIDEsIDIyNCwgMTUwLCA1NiwgMSwgMjQxLCAyMzgsIDU2LCAxLCAyNTIsIDc1LCA1NiwgMSwgMjI1LCAyMjEsIAotICAgIDU2LCAxLCAyNDEsIDY4LCA1NiwgMSwgMjUxLCAyMDUsIDU2LCAxLCAyMjUsIDE2LCA1NiwgMSwgMTg0LCA1NiwgMSwgMjMwLCAKLSAgICAyMzAsIDU2LCAxLCAyMzAsIDEwMiwgNTYsIDEsIDIzMSwgOTEsIDU2LCAxLCAyMzAsIDE2MSwgNTYsIDEsIDQsIDE5MSwgNTYsIAotICAgIDEsIDE5MSwgNTYsIDEsIDQsIDIxMCwgMjEyLCA1NiwgMSwgMjEwLCAyMTIsIDU2LCAxLCA0LCAyMTAsIDI0NCwgNTYsIDEsIAotICAgIDIxMCwgMjQ0LCA1NiwgMSwgMjA1LCA1NiwgMSwgMjIzLCAzNSwgNTYsIDEsIDIyMiwgMTQwLCA1NiwgMSwgMjIzLCAxMjgsIAotICAgIDU2LCAxLCAyMjIsIDIxMSwgNTYsIDEsIDQsIDIxMiwgNjUsIDU2LCAxLCAyMTIsIDY1LCA1NiwgMSwgMjExLCAyNTAsIDU2LCAKLSAgICAxLCAyMTIsIDIyLCA1NiwgMSwgMjExLCAyMjcsIDU2LCAxLCAyMzAsIDI1LCA1NiwgMSwgMjEyLCAxMTYsIDU2LCAxLCA0LCAKLSAgICAxNzYsIDU2LCAxLCA0LCAyMzQsIDE4MiwgNTYsIDEsIDIxNCwgMjcsIDU2LCAxLCAyMTMsIDE3NiwgNTYsIDEsIDIxMywgCi0gICAgMjU1LCA1NiwgMSwgMjEzLCAxMzgsIDU2LCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIzNCwgMjAxLCAyMjQsIDE3MywgMjE5LCAKLSAgICAzMSwgNzgsIDU2LCAyMzUsIDE1OCwgNzgsIDU2LCAyMTMsIDEzNSwgMjM1LCAxNTgsIDc4LCA1NiwgMjQ3LCAyMjEsIDIzMywgCi0gICAgMjU1LCAyNTEsIDE4NCwgMSwgMjUzLCAxNTgsIDI1MSwgMTg0LCAxLCAyMjYsIDEwNSwgMjUxLCAxODQsIDEsIDE5MywgMjUxLCAKLSAgICAxODQsIDEsIDI0NSwgNiwgMjUxLCAxODQsIDEsIDI0OSwgNjAsIDI1MSwgMTg0LCAxLCAyMTcsIDE1MiwgMjUxLCAxODQsIDEsIAotICAgIDIzMCwgMjUsIDI1MSwgMTg0LCAxLCAxNTYsIDI1MSwgMTg0LCAxLCAyNDMsIDIwMiwgMjUxLCAxODQsIDEsIDIzNSwgMjMsIAotICAgIDI1MSwgMTg0LCAxLCAyNDIsIDYwLCAyNTEsIDE4NCwgMSwgMjM1LCAxNDQsIDI1MSwgMTg0LCAxLCAyMjQsIDk2LCAyNTEsIAotICAgIDE4NCwgMSwgMjExLCAxNzgsIDI1MSwgMTg0LCAxLCAyMTAsIDgzLCAyNTEsIDE4NCwgMSwgMjUwLCAxNTgsIDI1MSwgMTg0LCAKLSAgICAxLCAyMjAsIDEwNCwgMjUxLCAxODQsIDEsIDE1MywgMjUxLCAxODQsIDEsIDIxMCwgMTU5LCAyNTEsIDE4NCwgMSwgMjUxLCAKLSAgICA2NiwgMjUxLCAxODQsIDEsIDIyMiwgOTEsIDI1MSwgMTg0LCAxLCA2MSwgMjUxLCAxODQsIDEsIDc2LCAyNTEsIDE4NCwgMSwgCi0gICAgNzUsIDI1MSwgMTg0LCAxLCAyNDUsIDE5NywgMjUxLCAxODQsIDEsIDI1NCwgMjAxLCAyNTEsIDE4NCwgMSwgMjQ1LCAxOTUsIAotICAgIDI1MSwgMTg0LCAxLCAyNTMsIDE5MiwgMjUxLCAxODQsIDEsIDIyNiwgMTM0LCAyNTEsIDE4NCwgMSwgMjU0LCAxMjMsIDI1MSwgCi0gICAgMTg0LCAxLCAyNDUsIDE1MCwgMjUxLCAxODQsIDEsIDI1NCwgMTE1LCAyNTEsIDE4NCwgMSwgMjQ1LCAxMzgsIDI1MSwgMTg0LCAKLSAgICAxLCAyNDUsIDkyLCAyNTEsIDE4NCwgMSwgNzMsIDI1MSwgMTg0LCAxLCA3MCwgMjUxLCAxODQsIDEsIDIzNSwgMTU2LCAyNTEsIAotICAgIDE4NCwgMSwgMjE0LCAxMDUsIDI1MSwgMTg0LCAxLCAyMjksIDc5LCAyNTEsIDE4NCwgMSwgMjQyLCAxNzgsIDI1MSwgMTg0LCAKLSAgICAxLCAyMzYsIDM0LCAyNCwgMSwgMjM0LCA1OCwgMjQsIDEsIDIxOCwgMjE1LCAyNCwgMSwgMjM0LCA1MSwgMjQsIDEsIDIyOCwgCi0gICAgMjI2LCAyNCwgMSwgMjI4LCAyMjQsIDI0LCAxLCAyMjgsIDIyMywgMjQsIDEsIDIxNiwgMTAxLCAyNCwgMSwgMjE4LCAyMDQsIAotICAgIDI0LCAxLCAyMjMsIDI2LCAyNCwgMSwgMjIzLCAyMSwgMjQsIDEsIDIyMywgMTgsIDI0LCAxLCAyMjMsIDExLCAyNCwgMSwgCi0gICAgMjIzLCA2LCAyNCwgMSwgMjIzLCAxLCAyNCwgMSwgMjIzLCAxMiwgMjQsIDEsIDIyMywgMjQsIDI0LCAxLCAyMzAsIDIxNywgCi0gICAgMjQsIDEsIDIyNSwgOTUsIDI0LCAxLCAyMTgsIDIxMiwgMjQsIDEsIDIyNSwgODQsIDI0LCAxLCAyMTksIDE0OCwgMjQsIDEsIAotICAgIDIxOCwgMjA5LCAyNCwgMSwgMjM2LCA1NiwgMjQsIDEsIDI1MCwgNDYsIDI0LCAxLCAyMTgsIDIxOSwgMjQsIDEsIDI1MCwgCi0gICAgMTA2LCAyNCwgMSwgMjM0LCAxMTAsIDI0LCAxLCAyMTYsIDE3MywgMjQsIDEsIDIyNSwgMTMxLCAyNCwgMSwgMjQxLCAxNzIsIAotICAgIDI0LCAxLCA2MSwgMjQsIDEsIDI1NCwgMjQzLCAyNCwgMSwgMTkxLCAyNCwgMSwgMjExLCA5MiwgMjQsIDEsIDI0NSwgMTE3LCAKLSAgICAyNCwgMSwgNzUsIDI0LCAxLCAyMTEsIDM2LCAyNCwgMSwgMjExLCA0NywgMjQsIDEsIDc2LCAyNCwgMSwgMjEyLCA2NSwgMjQsIAotICAgIDEsIDIxMiwgNjIsIDI0LCAxLCAyMjYsIDIzNCwgMjQsIDEsIDIxMCwgMjQ0LCAyNCwgMSwgNzAsIDI0LCAxLCAyMTIsIDExLCAKLSAgICAyNCwgMSwgMjEyLCAyMiwgMjQsIDEsIDIxMSwgMjUwLCAyNCwgMSwgMjEwLCAyMTIsIDI0LCAxLCAyNDUsIDU1LCAyNCwgMSwgCi0gICAgMjExLCA4LCAyNCwgMSwgNzMsIDI0LCAyNDQsIDEwMywgMjQsIDEsIDIxOCwgMjEzLCAyNCwgMSwgMjI4LCAyMTYsIDI0LCAxLCAKLSAgICAyMjgsIDIxOCwgMjQsIDEsIDIyOCwgMjIxLCAyNCwgMSwgMjIzLCAxOSwgMjQsIDEsIDIyMywgMCwgMjQsIDEsIDIyMywgOCwgCi0gICAgMjQsIDEsIDIyMywgMTMsIDI0LCAxLCAyMjIsIDI1NCwgMjQsIDEsIDIzMCwgMjEwLCAyNCwgMSwgMjMwLCAyMDcsIDI0LCAxLCAKLSAgICAyMzAsIDIxMSwgMjQsIDEsIDIzNCwgMjIxLCAyNCwgMSwgMjI1LCA5MCwgMjQsIDEsIDIyNSwgNzYsIDI0LCAxLCAyMjUsIAotICAgIDgyLCAyNCwgMSwgMjI1LCA3OSwgMjQsIDEsIDIyNSwgOTMsIDI0LCAxLCAyMjUsIDc3LCAyNCwgMSwgMjM0LCAyMTksIDI0LCAKLSAgICAxLCAyMzQsIDIxNywgMjQsIDEsIDIxOSwgMTQxLCAyNCwgMSwgMjE5LCAxMzksIDI0LCAxLCAyMTksIDEzMSwgMjQsIDEsIAotICAgIDIxOSwgMTM2LCAyNCwgMSwgMjE5LCAxNDYsIDI0LCAxLCAyMjYsIDMyLCAyNCwgMSwgMjE4LCAyMTYsIDI0LCAxLCAyMTEsIAotICAgIDI2LCAyNCwgMSwgMjExLCAyMiwgMjQsIDEsIDIxMSwgMjMsIDI0LCAxLCAyMzQsIDIyMCwgMjQsIDEsIDIxOCwgMjE3LCAyNCwgCi0gICAgMSwgMjExLCAzMiwgMjQsIDEsIDIxMCwgMjM4LCAyNCwgMSwgMjEwLCAyMzcsIDI0LCAxLCAyMTAsIDI0MCwgMjQsIDEsIAotICAgIDIxMCwgMjAzLCAyNCwgMSwgMjEwLCAyMDQsIDI0LCAxLCAyMTAsIDIwNywgMjQsIDEsIDI1NCwgMzQsIDI0LCAxLCAyNTQsIAotICAgIDI4LCAxMDksIDI1NCwgOTksIDIzMiwgMjAzLCA3OCwgMTA5LCAyNTQsIDk5LCAyMjMsIDUwLCA3OCwgMTA5LCAyNTQsIDk5LCAKLSAgICAxMjMsIDc4LCAxMDksIDI1NCwgOTksIDExMywgNzgsIDEwOSwgMjU0LCA5OSwgMTM0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDQsIAotICAgIDExLCA3OCwgMTA5LCAyNTQsIDk5LCAyMTYsIDE0LCA3OCwgMTA5LCAyNTQsIDk5LCAyMzAsIDIyNCwgNzgsIDEwOSwgMjU0LCAKLSAgICA5OSwgMjUxLCAxNzUsIDc4LCAxMDksIDI1NCwgOTksIDI0NCwgOTIsIDc4LCAxMDksIDI1NCwgOTksIDIyMSwgMTc2LCA3OCwgCi0gICAgMTA5LCAyNTQsIDk5LCAyMTYsIDE2OSwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ0LCA0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDEsIAotICAgIDIyNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ1LCAyMjQsIDc4LCAxMDksIDI1NCwgOTksIDIzMSwgMTg2LCA3OCwgMjUxLCAKLSAgICAxODQsIDEsIDI1MSwgMTI1LCAyNTEsIDE4NCwgMSwgMjEwLCA0NCwgMjUxLCAxODQsIDEsIDIzNSwgMTA4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjQyLCAxMTMsIDI1MSwgMTg0LCAxLCAyNDUsIDIwOSwgMjUxLCAxODQsIDEsIDI0NSwgMTM1LCAyNTEsIDE4NCwgMSwgCi0gICAgMjI2LCAxODMsIDI1MSwgMTg0LCAxLCAyMjYsIDE4NywgMjUxLCAxODQsIDEsIDIzNSwgMTc5LCAyNTEsIDE4NCwgMSwgMjU0LCAKLSAgICAxMDEsIDI1MSwgMTg0LCAxLCAyMzUsIDIyNCwgMjUxLCAxODQsIDEsIDIxNCwgMTY4LCAyNTEsIDE4NCwgMSwgMjM2LCAxNiwgCi0gICAgMjUxLCAxODQsIDEsIDIyOSwgNTcsIDI1MSwgMTg0LCAxLCAyNTQsIDE5NSwgMjUxLCAxODQsIDEsIDI1MywgMTg3LCAyNTEsIAotICAgIDE4NCwgMSwgMjU0LCAxMzYsIDI1MSwgMTg0LCAxLCAyMjYsIDIwNCwgMjUxLCAxODQsIDEsIDIyNiwgMTg5LCAyNTEsIDE4NCwgCi0gICAgMSwgMjM1LCAyMjEsIDI1MSwgMTg0LCA0MCwgMSwgMjI2LCAxMDUsIDI1MSwgMTg0LCA0MCwgMSwgMjE3LCAxNTIsIDI1MSwgCi0gICAgMTg0LCA0MCwgMSwgMjM1LCAyMywgMjUxLCAxODQsIDQwLCAxLCAyNDIsIDYwLCAyNTEsIDE4NCwgMSwgMjQyLCAyNTAsIAotICAgIDI1MSwgMTg0LCAxLCAyMzIsIDI1NSwgMjUxLCAxODQsIDEsIDIwOSwgMjUwLCA5LCAyMTgsIDEwMywgMjE3LCAxNTIsIDksIAotICAgIDIxOCwgMTAzLCAyMTIsIDQsIDksIDIxOCwgMTAzLCAyMTEsIDE1OCwgOSwgMjE4LCAxMDMsIDI1MSwgNzksIDksIDIxOCwgCi0gICAgMTAzLCAyMTcsIDI1NCwgOSwgMjE4LCAxMDMsIDI0MCwgMTU4LCA5LCAyMTgsIDEwMywgMjQwLCAxNjIsIDksIDIxOCwgMTAzLCAKLSAgICAyNDAsIDIzMSwgOSwgMjE4LCAxMDMsIDI0MCwgMTU5LCA5LCAyMTgsIDEwMywgMjE3LCAxNTUsIDksIDIxOCwgMTAzLCAyNDAsIAotICAgIDE2MSwgOSwgMjE4LCAxMDMsIDI0MCwgMTU3LCA5LCAyMTgsIDEwMywgMjQwLCAyMjksIDksIDIxOCwgMTAzLCAyNDAsIDE2MCwgCi0gICAgOSwgMjE4LCAxMDMsIDI0MCwgMTU2LCA5LCAyMTgsIDEwMywgMjMwLCAyNSwgOSwgMjE4LCAxMDMsIDI0MiwgNjAsIDksIAotICAgIDIxOCwgMTAzLCAyMjIsIDkxLCA5LCAyMTgsIDEwMywgMjI2LCAxMDUsIDksIDIxOCwgMTAzLCAyMTksIDIxLCA5LCAyMTgsIAotICAgIDEwMywgMjQ5LCA2MCwgOSwgMjE4LCAxMDMsIDI0MCwgMTYzLCA5LCAyMTgsIDEwMywgMjQxLCAxOTAsIDksIDIxOCwgMTAzLCAKLSAgICAyMTcsIDE2NCwgOSwgMjE4LCAxMDMsIDIxNywgMjMzLCA5LCAyMTgsIDEwMywgMjE4LCAxNjgsIDksIDIxOCwgMTAzLCAyMjAsIAotICAgIDExMCwgOSwgMjE4LCAxMDMsIDIyNSwgMjI0LCA5LCAyMTgsIDEwMywgMjI0LCA5OCwgOSwgMjE4LCAxMDMsIDIxNiwgNDMsIAotICAgIDksIDIxOCwgMTAzLCAyMTcsIDE1NCwgOSwgMjE4LCAxMDMsIDIxNywgMjQ0LCA5LCAyMTgsIDEwMywgMjQwLCAxNzAsIDksIAotICAgIDIxOCwgMTAzLCAyNDAsIDE1NSwgOSwgMjE4LCAxMDMsIDIyNSwgMTQ5LCA5LCAyMTgsIDEwMywgMjI0LCA5NiwgNTYsIDEsIAotICAgIDQsIDIzMywgMjE3LCA1NiwgMSwgNCwgMjE5LCAxOTEsIDU2LCAxLCA0LCAyMTgsIDgzLCA1NiwgMSwgNCwgMTExLCA1NiwgMSwgCi0gICAgNCwgMjI3LCAyMzcsIDU2LCAxLCA0LCAxNjIsIDU2LCAxLCA0LCAyNDEsIDE4MCwgNTYsIDEsIDQsIDI0MCwgMjIyLCA1NiwgCi0gICAgMSwgNCwgMjQxLCAyMzgsIDU2LCAxLCA0LCAyNDEsIDY4LCA1NiwgMSwgNCwgMjMwLCAxMDIsIDU2LCAxLCA0LCAyMDUsIDU2LCAKLSAgICAxLCA0LCAyMjMsIDM1LCA1NiwgMSwgNCwgMjIyLCAxNDAsIDU2LCAxLCA0LCAyMjMsIDEyOCwgNTYsIDEsIDQsIDIyMiwgCi0gICAgMjExLCA4OCwgMjQsIDIzNCwgNTgsIDg4LCAyNCwgMjI4LCAyMjYsIDg4LCAyNCwgMjE2LCAxMDEsIDg4LCAyNCwgMjIzLCAKLSAgICAyNiwgODgsIDI0LCAyMzAsIDIxNywgODgsIDI0LCAyMjUsIDk1LCA4OCwgMjQsIDIxOSwgMTQ4LCA4OCwgMjQsIDIzNiwgNTYsIAotICAgIDg4LCAyNCwgMjUwLCA0NiwgODgsIDI0LCAyNTAsIDEwNiwgODgsIDI0LCAyMzQsIDExMCwgODgsIDI0LCAyMTYsIDE3MywgCi0gICAgODgsIDI0LCAyMjUsIDEzMSwgODgsIDI0LCAyNDEsIDE3MiwgODgsIDI0LCAyMzQsIDU5LCA2MSwgODgsIDI0LCAyMjgsIAotICAgIDIyNywgNjEsIDg4LCAyNCwgMjE2LCAxMDIsIDYxLCA4OCwgMjQsIDIyMywgMjcsIDYxLCA4OCwgMjQsIDIzMCwgMjE4LCA2MSwgCi0gICAgODgsIDI0LCAyMjUsIDk2LCA2MSwgODgsIDI0LCAyMTksIDE0OSwgNjEsIDg4LCAyNCwgMjM2LCA1NywgNjEsIDg4LCAyNCwgCi0gICAgMjUwLCA0NywgNjEsIDg4LCAyNCwgMjUwLCAxMDcsIDYxLCA4OCwgMjQsIDIzNCwgMTExLCA2MSwgODgsIDI0LCAyMTYsIAotICAgIDE3NCwgNjEsIDg4LCAyNCwgMjI1LCAxMzIsIDYxLCA4OCwgMjQsIDI0MSwgMTczLCA2MSwgODgsIDI0LCAyNTAsIDQ3LCA3MCwgCi0gICAgODgsIDIzNCwgMywgMTM1LCAyMjYsIDIxNywgODgsIDIzNCwgMywgMTM1LCAxNDQsIDI0MCwgMjIyLCA4OCwgMTU0LCAxMTAsIAotICAgIDg4LCAxNTQsIDEwNSwgODgsIDE1NCwgMTU4LCA4OCwgMTU0LCAxNjEsIDg4LCAxNTQsIDE4OSwgODgsIDE1NCwgMTk0LCA4OCwgCi0gICAgMTU0LCAxOTgsIDg4LCAxNTQsIDE5NSwgODgsIDE1NCwgMjAwLCA4OCwgMTU0LCAyMTYsIDI0NywgODgsIDE1NCwgMjMwLCAKLSAgICAxMjgsIDg4LCAxNTQsIDI0NCwgOTYsIDg4LCAxNTQsIDIxMiwgNDAsIDg4LCAxNTQsIDIxMSwgMjE0LCA4OCwgMTU0LCAyMzEsIAotICAgIDM5LCA4OCwgMTU0LCAyNDUsIDIyMywgODgsIDE1NCwgMjE4LCAzNywgODgsIDE1NCwgMjE4LCAxMzIsIDg4LCAxNTQsIDI0MSwgCi0gICAgMjQ0LCA4OCwgMTU0LCAyMTksIDU0LCA4OCwgMTU0LCAyMjksIDIwNCwgODgsIDE1NCwgMjE5LCA0LCA4OCwgMTU0LCAyNDQsIAotICAgIDEwMiwgODgsIDE1NCwgMjQ5LCAyMDAsIDg4LCAxNTQsIDIzMywgMTI1LCA4OCwgMTU0LCAyMjMsIDcxLCA4OCwgMTU0LCAKLSAgICAyNTEsIDE1LCA4OCwgMTU0LCAyMTgsIDg3LCA4OCwgMTU0LCAyMTgsIDIwLCA4OCwgMTU0LCAyNDUsIDEyNywgODgsIDE1NCwgCi0gICAgMjIzLCA2MywgODgsIDE1NCwgMjU0LCAxNTAsIDg4LCAxNTQsIDI0NCwgMTI4LCA4OCwgMTU0LCAyMjMsIDYxLCA4OCwgMTU0LCAKLSAgICAyMjAsIDE1NiwgODgsIDE1NCwgMjIzLCAxMjcsIDM3LCAxNTQsIDIyNCwgMTIsIDM3LCAxNTQsIDIzNCwgODAsIDM3LCAxNTQsIAotICAgIDIyMSwgMTk4LCAzNywgMTU0LCAyMzMsIDI1NSwgMzcsIDU0LCAyMTYsIDI0OCwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgCi0gICAgMzcsIDU0LCAyMTUsIDc0LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDIxNiwgMTYzLCAyMjYsIDE5NywgODUsIAotICAgIDIxOCwgMjM0LCAzNywgNTQsIDI0NCwgMTYsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjQ0LCAxMTUsIDIyNiwgCi0gICAgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjE5LCAxMTIsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjIwLCAKLSAgICAxMTcsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjQ1LCAxODUsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIAotICAgIDIyNSwgMjUxLCA1MCwgMzcsIDU0LCAyMTUsIDc0LCAxMTAsIDM3LCA1NCwgMjE1LCA3NCwgMTA1LCAzNywgNTQsIDIxNSwgCi0gICAgNzQsIDE1OCwgMzcsIDU0LCAyMTUsIDc0LCAxNjEsIDM3LCA1NCwgMjE1LCA3NCwgMTg5LCAzNywgNTQsIDIxNSwgNzQsIAotICAgIDE5NCwgMzcsIDU0LCAyMTUsIDc0LCAxOTgsIDM3LCA1NCwgMjE1LCA3NCwgMTk1LCAzNywgNTQsIDIxNSwgNzQsIDIwMCwgCi0gICAgMzcsIDU0LCAyMTYsIDE2MiwgMzcsIDU0LCAyMTYsIDE2MywgMTEwLCAzNywgNTQsIDIxNiwgMTYzLCAxMDUsIDM3LCA1NCwgCi0gICAgMjE2LCAxNjMsIDE1OCwgMzcsIDU0LCAyMTYsIDE2MywgMTYxLCAzNywgNTQsIDIxNiwgMTYzLCAxODksIDM3LCAyNCwgMjM0LCAKLSAgICA1OCwgMzcsIDI0LCAyMjgsIDIyNiwgMzcsIDI0LCAyMTYsIDEwMSwgMzcsIDI0LCAyMjMsIDI2LCAzNywgMjQsIDIzMCwgCi0gICAgMjE3LCAzNywgMjQsIDIyNSwgOTUsIDM3LCAyNCwgMjE5LCAxNDgsIDM3LCAyNCwgMjM2LCA1NiwgMzcsIDI0LCAyNTAsIDQ2LCAKLSAgICAzNywgMjQsIDI1MCwgMTA2LCAzNywgMjQsIDIzNCwgMTEwLCAzNywgMjQsIDIxNiwgMTczLCAzNywgMjQsIDIyNSwgMTMxLCAKLSAgICAzNywgMjQsIDI0MSwgMTcyLCAzNywgMjQsIDIzNCwgNTksIDYxLCAzNywgMjQsIDIyOCwgMjI3LCA2MSwgMzcsIDI0LCAyMTYsIAotICAgIDEwMiwgNjEsIDM3LCAyNCwgMjIzLCAyNywgNjEsIDM3LCAyNCwgMjMwLCAyMTgsIDYxLCAzNywgMjQsIDIyNSwgOTYsIDYxLCAKLSAgICAzNywgMjQsIDIxOSwgMTQ5LCA2MSwgMzcsIDI0LCAyMzYsIDU3LCA2MSwgMzcsIDI0LCAyNTAsIDQ3LCA2MSwgMzcsIDI0LCAKLSAgICAyNTAsIDEwNywgNjEsIDM3LCAyNCwgMjM0LCAxMTEsIDYxLCAzNywgMjQsIDIxNiwgMTc0LCA2MSwgMzcsIDI0LCAyMjUsIAotICAgIDEzMiwgNjEsIDM3LCAyNCwgMjQxLCAxNzMsIDYxLCAzNywgMjM0LCAzLCAxMzUsIDI1MCwgMTQ4LCAzNywgMjM0LCAzLCAKLSAgICAxMzUsIDIzNSwgNDcsIDM3LCAyNCwgMjM2LCA1NywgNzAsIDIzNCwgMywgMjE4LCAxNTksIDg3LCAzNywgMTU0LCAxMTAsIAotICAgIDM3LCAxNTQsIDEwNSwgMzcsIDE1NCwgMTU4LCAzNywgMTU0LCAxNjEsIDM3LCAxNTQsIDE4OSwgMzcsIDE1NCwgMTk0LCAzNywgCi0gICAgMTU0LCAxOTgsIDM3LCAxNTQsIDE5NSwgMzcsIDE1NCwgMjAwLCAzNywgMTU0LCAyMTYsIDI0NywgMzcsIDE1NCwgMjMwLCAKLSAgICAxMjgsIDM3LCAxNTQsIDI0NCwgOTYsIDM3LCAxNTQsIDIxMiwgNDAsIDM3LCAxNTQsIDIxMSwgMjE0LCAzNywgMTU0LCAyMzEsIAotICAgIDM5LCAzNywgMTU0LCAyNDUsIDIyMywgMzcsIDE1NCwgMjE4LCAzNywgMzcsIDE1NCwgMjE4LCAxMzIsIDM3LCAxNTQsIDI0MSwgCi0gICAgMjQ0LCAzNywgMTU0LCAyMTksIDU0LCAzNywgMTU0LCAyMjksIDIwNCwgMzcsIDE1NCwgMjE5LCA0LCAzNywgMTU0LCAyNDQsIAotICAgIDEwMiwgMzcsIDE1NCwgMjQ5LCAyMDAsIDM3LCAxNTQsIDIzMywgMTI1LCAzNywgMTU0LCAyMjEsIDE3NCwgMzcsIDE1NCwgCi0gICAgMjMxLCAxODksIDM3LCAxNTQsIDI0NCwgMTM3LCAzNywgMTU0LCAyMTgsIDQ5LCAzNywgMTU0LCAyNDUsIDM0LCAzNywgMTU0LCAKLSAgICAyMjQsIDE4NywgMzcsIDE1NCwgMjUzLCAxOTYsIDM3LCAxNTQsIDIzNSwgMTU5LCAzNywgMTU0LCAyMjMsIDYxLCAzNywgCi0gICAgMTU0LCAyNDksIDE2NCwgMzcsIDE1NCwgMjQ5LCAxNTUsIDM3LCAxNTQsIDI0MSwgMTY1LCAzNywgMTU0LCAyNTAsIDE3NCwgCi0gICAgMzcsIDE1NCwgMjMyLCAxMTAsIDM3LCAxNTQsIDIzMywgNDYsIDM3LCAxNTQsIDIyMiwgMjUxLCAzNywgMTU0LCAyMzEsIDgzLCAKLSAgICAzNywgMTU0LCAyMjMsIDg3LCAzNywgMTU0LCAyMTgsIDg3LCAzNywgMTU0LCAyMTgsIDIwLCAzNywgMTU0LCAyNDUsIDEyNywgCi0gICAgMzcsIDE1NCwgMjIzLCA2MywgMzcsIDE1NCwgMjU0LCAxNTAsIDM3LCAxNTQsIDIyOCwgMjEyLCAzNywgNTQsIDIxNiwgMTYzLCAKLSAgICAxOTQsIDM3LCA1NCwgMjE2LCAxNjMsIDE5OCwgMzcsIDU0LCAyMTYsIDE2MywgMTk1LCAzNywgNTQsIDIxNiwgMTYzLCAyMDAsIAotICAgIDM3LCA1NCwgMjQ0LCAxNSwgMzcsIDU0LCAyNDQsIDE2LCAxMTAsIDM3LCA1NCwgMjQ0LCAxNiwgMTA1LCAzNywgNTQsIDI0NCwgCi0gICAgMTYsIDE1OCwgMzcsIDU0LCAyNDQsIDE2LCAxNjEsIDM3LCA1NCwgMjQ0LCAxNiwgMTg5LCAzNywgNTQsIDI0NCwgMTYsIAotICAgIDE5NCwgMzcsIDU0LCAyNDQsIDE2LCAxOTgsIDM3LCA1NCwgMjQ0LCAxNiwgMTk1LCAzNywgNTQsIDI0NCwgMTYsIDIwMCwgCi0gICAgMzcsIDU0LCAyNDQsIDExNCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjM1LCAxMzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIAotICAgIDI0NCwgMTQ4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMzEsIDE2MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjU0LCA0NywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjMxLCAxMzIsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzNSwgNDUsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDIzNSwgNDYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI1MywgMTg4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMjAsIAotICAgIDEzNiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjI2LCAyMzksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIyOCwgNDAsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0OCwgODUsIDQyLCAyNDEsIDE5MCwgNDIsIDI0NSwgODgsIDQyLCAyNDUsIDQzLCAyMzIsIAotICAgIDIxOSwgMjMyLCAyNDAsIDUwLCAzNywgNTYsIDYxLCAzNywgNTYsIDczLCAzNywgNTYsIDcwLCAzNywgNTYsIDc1LCAzNywgCi0gICAgNTYsIDc2LCAzNywgNTYsIDE3NiwgMzcsIDU2LCAyMzQsIDkyLCAzNywgNTYsIDIzMywgMjE3LCAzNywgNTYsIDIzNCwgMTgyLCAKLSAgICAzNywgNTYsIDIzNCwgMjgsIDM3LCA1NiwgMjA2LCAzNywgNTYsIDIxOSwgMTkxLCAzNywgNTYsIDIxOCwgODMsIDM3LCA1NiwgCi0gICAgMjIxLCAxODEsIDM3LCA1NiwgMjE5LCA1OCwgMzcsIDU2LCAyMTcsIDEwNSwgMzcsIDU2LCAyMTYsIDExNywgMzcsIDU2LCAKLSAgICAyMTUsIDExOCwgMzcsIDU2LCAyMTcsIDIyLCAzNywgNTYsIDExMSwgMzcsIDU2LCAxOTcsIDM3LCA1NiwgMjI4LCAyMzMsIAotICAgIDM3LCA1NiwgMjI3LCAyMzcsIDM3LCA1NiwgMjI5LCAxMDcsIDM3LCA1NiwgMjI4LCA3NCwgMzcsIDU2LCAxNjIsIDM3LCA1NiwgCi0gICAgMjQxLCAxODAsIDM3LCA1NiwgMjQwLCAyMjIsIDM3LCA1NiwgMjQxLCAyMzgsIDM3LCA1NiwgMjQxLCA2OCwgMzcsIDU2LCAKLSAgICAxODQsIDM3LCA1NiwgMjMwLCAyMzAsIDM3LCA1NiwgMjMwLCAxMDIsIDM3LCA1NiwgMjMxLCA5MSwgMzcsIDU2LCAyMzAsIAotICAgIDE2MSwgMzcsIDU2LCAxOTEsIDM3LCA1NiwgMjEwLCAyMTIsIDM3LCA1NiwgMjEwLCAyNDQsIDM3LCA1NiwgMjA1LCAzNywgCi0gICAgNTYsIDIyMywgMzUsIDM3LCA1NiwgMjIyLCAxNDAsIDM3LCA1NiwgMjIzLCAxMjgsIDM3LCA1NiwgMjIyLCAyMTEsIDM3LCAKLSAgICA1NiwgMjEyLCA2NSwgMzcsIDU2LCAyMTEsIDI1MCwgMzcsIDU2LCAyMTIsIDIyLCAzNywgNTYsIDIxMSwgMjI3LCA0MiwgCi0gICAgMjU0LCA3MSwgNDIsIDI1MywgMjM5LCA0MiwgMjU0LCA5NSwgNDIsIDI1NSwgMzEsIDQyLCAyMzUsIDIyNiwgNDIsIDIzNSwgCi0gICAgMTk2LCA0MiwgMjE0LCAxNjYsIDQyLCAyNDUsIDY2LCA0MiwgMjQ1LCAyMDYsIDQyLCAyMjYsIDE4NiwgNDIsIDIyNiwgMTgwLCAKLSAgICA0MiwgMjM0LCAyNDUsIDQyLCAyMzQsIDIxNCwgNDIsIDIzNCwgMjExLCA0MiwgMjQzLCA5MiwgNDIsIDI0MywgMTAxLCA0MiwgCi0gICAgMjQyLCAyMDQsIDQyLCAyNDIsIDIwMCwgNDIsIDIzMywgMTUwLCA0MiwgMjQyLCAxOTMsIDQyLCAyMzQsIDcyLCA0MiwgMjM0LCAKLSAgICA3MSwgNDIsIDIzNCwgNzAsIDQyLCAyMzQsIDY5LCA0MiwgMjQyLCA4NiwgNDIsIDI0MiwgODUsIDQyLCAyMzMsIDE5MywgNDIsIAotICAgIDIzMywgMTk1LCA0MiwgMjM0LCAxNzgsIDQyLCAyMzQsIDEsIDQyLCAyMzQsIDgsIDQyLCAyMjIsIDE2LCA0MiwgMjIxLCAKLSAgICAyMzcsIDQyLCAyMTksIDEyOSwgNDIsIDIyMCwgMTQxLCA0MiwgMjIwLCAxNDAsIDQyLCAyNDgsIDIxOCwgNDIsIDI0OCwgMzYsIAotICAgIDQyLCAyNDcsIDEyMSwgNDIsIDIxNiwgMzIsIDQyLCAyMjksIDIwMCwgNDIsIDIyOCwgNDEsIDQyLCAyNDIsIDMyLCA0MiwgCi0gICAgMjI2LCA4NCwgNDIsIDIyNiwgODMsIDQyLCAyNTIsIDE4OCwgNDIsIDIyNSwgMTA1LCA0MiwgMjI1LCA2OSwgNDIsIDIyNSwgCi0gICAgNzAsIDQyLCAyNTEsIDIzNCwgNDIsIDI0MCwgMjIxLCA0MiwgMjQwLCAyMTcsIDQyLCAyNTEsIDkxLCA0MiwgMjQwLCAyMDQsIAotICAgIDQyLCAyNDEsIDIxNSwgNDIsIDIyNSwgMTU5LCA0MiwgMjI1LCAxOTQsIDQyLCAyNDEsIDE5OCwgNDIsIDIyNSwgMTkxLCA0MiwgCi0gICAgMjI1LCAyMDcsIDQyLCAyNTIsIDYxLCA0MiwgMjI1LCA2LCA0MiwgMjUxLCAxODAsIDQyLCAyNDEsIDU2LCA0MiwgMjI0LCAKLSAgICAyNTAsIDQyLCAyNDEsIDQ4LCA0MiwgMjQxLCA1MCwgNDIsIDIzMSwgMjAxLCA0MiwgMjMxLCAxOTcsIDQyLCAyMzEsIDIwNiwgCi0gICAgNDIsIDIzMSwgMTUwLCA0MiwgMjMxLCAxNzUsIDQyLCAyMzAsIDE5NywgNDIsIDIzMCwgMTc2LCA0MiwgMjMwLCAxNzUsIDQyLCAKLSAgICAyMzEsIDc0LCA0MiwgMjMxLCA3MSwgNDIsIDIzMSwgNzUsIDQyLCAyMTEsIDEwMiwgNDIsIDIxMSwgMTAwLCA0MiwgMjEwLCAKLSAgICAyMDEsIDQyLCAyMjIsIDIyNiwgNDIsIDIyMiwgMjMwLCA0MiwgMjIyLCAxMTcsIDQyLCAyMjIsIDExMSwgNDIsIDIyMywgODUsIAotICAgIDQyLCAyMjMsIDgyLCA0MiwgMjEyLCAzOCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxMCwgODYsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxMTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxMDUsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxNTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxNjEsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxODksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTQsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAxOTUsIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMDAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTYsIDI0NywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDI0NSwgMTY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgCi0gICAgMjE1LCA3NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNiwgMTY0LCAxMDksIDIxNywgMywgMTYsIDMxLCAKLSAgICAyNDAsIDIzOSwgMjQ0LCA1LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ0LCAxMTgsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDI0MCwgMjM5LCAyMTksIDExOSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIyMCwgMTE5LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ1LCAxOTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMjgsIAotICAgIDE5NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNSwgNzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgCi0gICAgMjM5LCAyMTUsIDY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE1LCA2MywgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQwLCAyMzksIDIxNSwgNjQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTUsIDY5LCA0MiwgMjQwLCAKLSAgICAyMzAsIDQyLCAyNDgsIDIyMSwgNDIsIDI1MywgMTkyLCA0MiwgMTMwLCA0MiwgMjI2LCAxMjUsIDQyLCAyMjUsIDIyNSwgNDIsIAotICAgIDI0NywgMTQ3LCA0MiwgMjQ3LCAxNDgsIDIxOCwgMjMzLCA0MiwgMjQ3LCAxNDgsIDI0OSwgMTA4LCA0MiwgMjM1LCAxNTYsIAotICAgIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjQxLCAyMTYsIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjE3LCAxNzQsIDQyLCAKLSAgICAyNDUsIDkxLCAyMjksIDIwNSwgMjE3LCA3NCwgNDIsIDI0NSwgOTEsIDIyOSwgMjA1LCAyMzEsIDcwLCA0MiwgMjQ5LCAxNTcsIAotICAgIDQyLCAyMjYsIDkwLCAyNTQsIDEyNSwgNDIsIDE5NywgNDIsIDIzMCwgMTAzLCA2MSwgNDIsIDE4NCwgNDIsIDE3NiwgNDIsIAotICAgIDIzNCwgMTg1LCA0MiwgMjMxLCAxMjksIDQyLCAyNDMsIDgwLCA0MiwgMjUxLCAxOCwgNDIsIDIzNCwgMTg0LCA0MiwgMjI1LCAKLSAgICAxNTAsIDQyLCAyMjksIDgxLCA0MiwgMjMwLCAxMDMsIDI0NSwgNiwgNDIsIDIzMCwgMTAzLCAyNDMsIDIwMiwgNDIsIDIzMSwgCi0gICAgMTUsIDQyLCAyMzQsIDEzNCwgNDIsIDI0MCwgMTYzLCA0MiwgMjM0LCA5NCwgNDIsIDIzMCwgMjMyLCA0MiwgMjQyLCAyMTYsIAotICAgIDQyLCAyMTYsIDExOSwgNDIsIDIzMCwgMTAzLCAxNTYsIDQyLCAyMzAsIDE2OSwgNDIsIDI0NywgMTU3LCA0MiwgMjM0LCA0MCwgCi0gICAgNDIsIDI0NCwgNDUsIDQyLCAyMjgsIDExMiwgNDIsIDIzMCwgMTAzLCAxOTMsIDQyLCAyMzAsIDE2NiwgNDIsIDI0OSwgMjM5LCAKLSAgICA0MiwgMjM0LCAzNCwgNDIsIDIzMCwgMTY3LCAyMTgsIDIzMywgNDIsIDI0OSwgMjQwLCAyMTgsIDIzMywgNDIsIDIzMiwgNTAsIAotICAgIDIxOCwgMjMzLCA0MiwgMjM0LCAzNSwgMjE4LCAyMzMsIDQyLCAyMzAsIDE2NywgMjQ5LCAxMDgsIDQyLCAyNDksIDI0MCwgCi0gICAgMjQ5LCAxMDgsIDQyLCAyMzIsIDUwLCAyNDksIDEwOCwgNDIsIDIzNCwgMzUsIDI0OSwgMTA4LCA0MiwgMjMyLCA1MCwgMTE3LCAKLSAgICAyMjIsIDkxLCA0MiwgMjMyLCA1MCwgMTE3LCAyMjIsIDkyLCAyMTgsIDIzMywgNDIsIDE5MCwgNDIsIDIzMywgMjUxLCA0MiwgCi0gICAgMjMwLCAxMDUsIDQyLCAyNDIsIDE1MSwgNDIsIDIyMywgMTc2LCA0MiwgMjIzLCAxNzcsIDExNywgMjIyLCA5MSwgNDIsIAotICAgIDIyMywgMTc3LCAxMTcsIDIyMiwgOTIsIDIxOCwgMjMzLCA0MiwgMjI0LCAxNjIsIDQyLCAyMjgsIDEzLCA0MiwgMjMwLCAKLSAgICAxMDMsIDIyMiwgOTEsIDQyLCAyMzAsIDEwNCwgNDIsIDIyNCwgMTE2LCA0MiwgMjI3LCAxNzYsIDQyLCAyMzAsIDEwMywgCi0gICAgMjE0LCAxMDUsIDQyLCAyMzAsIDQ5LCA0MiwgMjMzLCAxODUsIDQyLCAyMzAsIDUwLCAyMzEsIDc0LCA0MiwgMjI0LCAxMTUsIAotICAgIDQyLCAyMjcsIDE3NSwgNDIsIDIzMCwgMTAzLCAyMTIsIDk4LCA0MiwgMjMwLCA0MywgNDIsIDIzMywgMTgzLCA0MiwgMjMwLCAKLSAgICA0NCwgMjMxLCA3NCwgNDIsIDIzNSwgMjQsIDIyNiwgMjIwLCA0MiwgMjMyLCA1MCwgMjI2LCAyMjAsIDQyLCAyNTQsIDEzNiwgCi0gICAgNDIsIDI1MSwgMTYwLCA0MiwgMjUwLCAyMTQsIDQyLCAyNTAsIDE5MSwgNDIsIDI1MSwgNjcsIDExNywgMjM0LCAxMzQsIDQyLCAKLSAgICAyNDksIDIzOCwgNDIsIDI0OCwgMTQyLCA0MiwgMjQyLCA3MiwgNDIsIDE2MiwgNDIsIDI0MCwgMjMxLCA0MiwgMjM1LCAyNTUsIAotICAgIDQyLCAyMzQsIDQ3LCA0MiwgMjM0LCAzNSwgMjUwLCAyNTAsIDQyLCAyMzMsIDIxOSwgNDIsIDIzMiwgMTU5LCA0MiwgMjMyLCAKLSAgICAxNTgsIDQyLCAyMzIsIDE0NywgNDIsIDIzMiwgNjMsIDQyLCAyMzEsIDEzMCwgMjE5LCA3OSwgNDIsIDIzMCwgMTk2LCA0MiwgCi0gICAgMjMwLCAxNTIsIDQyLCAyMjUsIDE0OCwgNDIsIDIyNSwgMTksIDQyLCAyMjQsIDIxOSwgNDIsIDIyNCwgMjE3LCA0MiwgMjE4LCAKLSAgICAyMjcsIDQyLCAyMTgsIDIsIDQyLCAyMTIsIDI0LCA0MiwgMjE0LCAxMDYsIDExNywgMTkzLCA0MiwgMTE1LCAxMTcsIDE5MywgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDExMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDEwNSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE1OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE2MSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE4OSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5NCwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDE5NSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIwMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNiwgCi0gICAgMjQ3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjQ1LCAxNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgCi0gICAgMTQ2LCAyMTUsIDc2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjQsIDEwOSwgMjE3LCAzLCAxNiwgCi0gICAgMzEsIDI0OCwgMTQ2LCAyNDQsIDUsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDQsIDExOCwgMTA5LCAyMTcsIAotICAgIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxOSwgMTE5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjIwLCAxMTksIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDUsIDE5MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIAotICAgIDIyOCwgMTk3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA3MywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgCi0gICAgMjQ4LCAxNDYsIDIxNSwgNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDYzLCAxMDksIDIxNywgMywgCi0gICAgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2NCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjksIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDcwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCAKLSAgICA2NSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgCi0gICAgMTQ2LCAyMTUsIDcyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2OCwgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQ4LCAxNDYsIDIxNiwgMTYyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjEsIDQyLCAyNDMsIAotICAgIDExOCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQ5LCAxNDAsIDI0MSwgMjIzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMjMsIDEyMiwgMjQ1LCAyMjMsIDI0MSwgMTkyLCAzMSwgMjQ3LCAyMzEsIDI1MywgMjA3LCAyMTYsIDE5NiwgMjUyLCA1NiwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMTAsIDIyMywgMjQ0LCAzOCwgMjQxLCAxOTIsIDMxLCAyMTIsIDU5LCAyNDEsIDE5MiwgMzEsIAotICAgIDI0OSwgMjAzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTQsIDMsIDI0MSwgMTkyLCAzMSwgMjQxLCA2MCwgMjE2LCAzOCwgCi0gICAgMjQxLCAxOTIsIDMxLCA0LCAyMTcsIDYxLCAyNDEsIDE5MiwgMzEsIDIxNSwgMjM3LCAyNDEsIDE5MiwgMzEsIDIyNSwgMjE5LCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxOCwgMTU4LCAyNDEsIDE5MiwgMzEsIDI0NCwgMTM5LCAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAKLSAgICAyMjQsIDI0MCwgMjQxLCAxOTIsIDMxLCAyMzAsIDE1NSwgMjQxLCAxOTIsIDMxLCAyNDUsIDEyNiwgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDQsIDM5LCAyNDEsIDE5MiwgMzEsIDIxMSwgMjA3LCAyMjYsIDE5NywgMjE2LCAxOTYsIDI0OCwgODYsIDI0MSwgMTkyLCAKLSAgICAzMSwgMjU0LCA1MSwgMjQxLCAxOTIsIDMxLCAyNDksIDE4NSwgMjQxLCAxOTIsIDMxLCAyNTEsIDIyNywgMjE2LCAxMzgsIAotICAgIDI0MSwgMTkyLCAzMSwgMjQyLCAxNDksIDI0MSwgMTkyLCAzMSwgMjE4LCAyNDUsIDI1NCwgNzAsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjIzLCA1MywgMjQxLCAxOTIsIDMxLCAyMzUsIDIyMCwgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgMjE3LCA2MSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMzAsIDExMSwgMjQ5LCAxNTksIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIDIyNCwgMTk3LCAyNDEsIDE5MiwgCi0gICAgMzEsIDIxNiwgMTk2LCAyNTUsIDE4LCAyMTIsIDQwLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTAsIDgsIDI0NCwgOTYsIAotICAgIDI0MSwgMTkyLCAzMSwgMjM1LCAyMzMsIDI0MSwgMTkyLCAzMSwgMjQ2LCA1NywgMjQxLCAxOTIsIDMxLCAyMjMsIDU2LCAKLSAgICAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAyMjQsIDIyNCwgMjQxLCAxOTIsIDMxLCAyMjQsIDE3NywgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDgsIDE2MSwgNjQsIDIxNiwgMTk2LCAyMzIsIDIzMCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQ0LCAxNzQsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjI2LCAxNjMsIDI0MSwgMTkyLCAzMSwgMjI2LCAyNDQsIDI0MSwgMTkyLCAzMSwgMjQ4LCA1OSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyNDgsIDc5LCAyNDEsIDE5MiwgMzEsIDIzNSwgMjQ3LCAyNDEsIDE5MiwgMzEsIDI1MSwgMTQ5LCAyNDEsIAotICAgIDE5MiwgMzEsIDI0OSwgMjIxLCAyMTYsIDQyLCAyMzEsIDc2LCAyNDEsIDE5MiwgMzEsIDI0MywgODcsIDIxNiwgMzgsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjI0LCAxMjUsIDIxNCwgMTU0LCAyNDEsIDE5MiwgMzEsIDIyNiwgMTYyLCAyNDEsIDE5MiwgMzEsIDIxNiwgCi0gICAgMTk2LCAyMTIsIDEzLCAyNDEsIDE5MiwgMzEsIDIyMywgNDUsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1MCwgMjIwLCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTMsIDI1NSwgMjE2LCAxMzMsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDIzNCwgCi0gICAgMTc5LCAyMTgsIDEzNCwgMjMwLCAxMTUsIDI0MSwgMTkyLCAzMSwgMjQ4LCAzMiwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgCi0gICAgMjMxLCAxNTIsIDIzMSwgMjAyLCAyNDEsIDE5MiwgMzEsIDI1NSwgMTksIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDIxMiwgCi0gICAgNTQsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI0MywgNDcsIDIxMSwgMjM5LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMzUsIDUyLCAyMzMsIDEwNywgMjQxLCAxOTIsIDMxLCAyNDcsIDE4NCwgMjQxLCAxOTIsIDMxLCAyMzIsIDIyMCwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMzUsIDIyMywgMjE1LCAxODcsIDI0MSwgMTkyLCAzMSwgNCwgMjI0LCAxOTcsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjU0LCAyMTcsIDI0OSwgMjEyLCAyNDEsIDE5MiwgMzEsIDI1MiwgNTksIDI0OSwgMjEyLCA4LCAzLCAyMzUsIDE2MCwgOCwgCi0gICAgMywgMjM1LCAxNTMsIDgsIDMsIDczLCA4LCAzLCAyMzUsIDE4MiwgOCwgMywgMjM2LCA1OCwgOCwgMywgMjM2LCA0MSwgOCwgCi0gICAgMywgMjM2LCA2MCwgOCwgMywgMjM2LCA1OSwgOCwgMywgMjUzLCAyMDYsIDgsIDMsIDI1MywgMTY5LCA4LCAzLCA2MSwgOCwgCi0gICAgMywgMjU0LCA3MiwgOCwgMywgMjE0LCAxNjQsIDgsIDMsIDIxNCwgMTY3LCA4LCAzLCAyMTQsIDE2NSwgOCwgMywgMjI2LCAKLSAgICAxNDAsIDgsIDMsIDIyNiwgMTE0LCA4LCAzLCA3NiwgOCwgMywgMjI2LCAxNzUsIDgsIDMsIDI0NSwgMzUsIDgsIDMsIDc1LCAKLSAgICA4LCAzLCAyMTEsIDE5NSwgOCwgMywgMjUxLCAyMjgsIDgsIDMsIDI1MSwgMjI1LCA4LCAzLCAyNTIsIDYsIDgsIDMsIDI1MSwgCi0gICAgMjM4LCA4LCAzLCAyNTEsIDI1MSwgOCwgMywgMjUxLCAyNTAsIDgsIDMsIDI1MSwgMjUzLCA4LCAzLCAyNTEsIDI1MiwgOCwgCi0gICAgMywgMjUyLCAxMjEsIDgsIDMsIDI1MiwgMTEzLCA4LCAzLCAyNTIsIDE5MSwgOCwgMywgMjUyLCAxNDIsIDgsIDMsIDI1MSwgCi0gICAgMTAxLCA4LCAzLCAyNTEsIDEwNSwgOCwgMywgMjUxLCAxMDIsIDgsIDMsIDI1MSwgMTc5LCA4LCAzLCAyNTEsIDE2MywgOCwgCi0gICAgMywgMjUxLCAyMDUsIDgsIDMsIDI1MSwgMTg1LCA4LCAzLCAyNTIsIDIxLCA4LCAzLCAyNTIsIDc1LCA4LCAzLCAyNTIsIDMzLCAKLSAgICA4LCAzLCAyNTEsIDg3LCA4LCAzLCAyNTEsIDg0LCA4LCAzLCAyNTEsIDEyNSwgOCwgMywgMjUxLCAxMDAsIDgsIDMsIDI1MSwgCi0gICAgOTQsIDgsIDMsIDI1MSwgOTgsIDgsIDMsIDI1MSwgNzIsIDgsIDMsIDI1MSwgNzAsIDgsIDMsIDI1MSwgNzcsIDgsIDMsIAotICAgIDI1MSwgNzUsIDgsIDMsIDI1MSwgNzMsIDgsIDMsIDI1MSwgNzQsIDgsIDMsIDIyNSwgNDksIDgsIDMsIDIyNSwgNDUsIDgsIAotICAgIDMsIDIyNSwgMTA4LCA4LCAzLCAyMjUsIDU5LCA4LCAzLCAyMjUsIDc1LCA4LCAzLCAyMjUsIDEwMiwgOCwgMywgMjI1LCA5OCwgCi0gICAgOCwgMywgMjI1LCAyNDAsIDgsIDMsIDIyNSwgMjMwLCA4LCAzLCAxOTAsIDgsIDMsIDIyNiwgMjEsIDgsIDMsIDIyNCwgMTM1LCAKLSAgICA4LCAzLCAyMjQsIDEzNywgOCwgMywgMjI0LCAxMzYsIDgsIDMsIDIyNCwgMjMzLCA4LCAzLCAyMjQsIDIyMiwgOCwgMywgCi0gICAgMjI1LCAxNiwgOCwgMywgMjI0LCAyNDUsIDgsIDMsIDIyNCwgMTIxLCA4LCAzLCAyMjQsIDExNywgOCwgMywgMjI0LCAxNTAsIAotICAgIDgsIDMsIDIyNCwgMTM0LCA4LCAzLCAyMjQsIDEyNiwgOCwgMywgMjI0LCAxMzIsIDgsIDMsIDIyNCwgMTAwLCA4LCAzLCAKLSAgICAyMjQsIDk5LCA4LCAzLCAyMjQsIDEwNCwgOCwgMywgMjI0LCAxMDMsIDgsIDMsIDIyNCwgMTAxLCA4LCAzLCAyMjQsIDEwMiwgCi0gICAgOCwgMywgMjUyLCA5NiwgOCwgMywgMjUyLCA5NSwgOCwgMywgMjUyLCAxMDIsIDgsIDMsIDI1MiwgOTcsIDgsIDMsIDI1MiwgCi0gICAgOTksIDgsIDMsIDI1MiwgOTgsIDgsIDMsIDI1MiwgMTAxLCA4LCAzLCAyNTIsIDEwMCwgOCwgMywgMjUyLCAxMDgsIDgsIDMsIAotICAgIDI1MiwgMTA3LCA4LCAzLCAyNTIsIDExMSwgOCwgMywgMjUyLCAxMDksIDgsIDMsIDI1MiwgODcsIDgsIDMsIDI1MiwgODksIAotICAgIDgsIDMsIDI1MiwgODgsIDgsIDMsIDI1MiwgOTIsIDgsIDMsIDI1MiwgOTEsIDgsIDMsIDI1MiwgOTQsIDgsIDMsIDI1MiwgCi0gICAgOTMsIDgsIDMsIDI1MiwgMTAzLCA4LCAzLCAyNTIsIDEwNiwgOCwgMywgMjUyLCAxMDQsIDgsIDMsIDI1MiwgODMsIDgsIDMsIAotICAgIDI1MiwgODIsIDgsIDMsIDI1MiwgOTAsIDgsIDMsIDI1MiwgODYsIDgsIDMsIDI1MiwgODQsIDgsIDMsIDI1MiwgODUsIDgsIAotICAgIDMsIDI1MiwgNzksIDgsIDMsIDI1MiwgNzgsIDgsIDMsIDI1MiwgODEsIDgsIDMsIDI1MiwgODAsIDgsIDMsIDIyOSwgMTY5LCAKLSAgICA4LCAzLCAyMjksIDE2OCwgOCwgMywgMjI5LCAxNzQsIDgsIDMsIDIyOSwgMTcwLCA4LCAzLCAyMjksIDE3MSwgOCwgMywgCi0gICAgMjI5LCAxNzMsIDgsIDMsIDIyOSwgMTcyLCA4LCAzLCAyMjksIDE3NywgOCwgMywgMjI5LCAxNzYsIDgsIDMsIDIyOSwgMTc5LCAKLSAgICA4LCAzLCAyMjksIDE3OCwgOCwgMywgMjI5LCAxNjUsIDgsIDMsIDIyOSwgMTY0LCA4LCAzLCAyMjksIDE2NywgOCwgMywgCi0gICAgMjI5LCAxNjYsIDgsIDMsIDIyOSwgMTU4LCA4LCAzLCAyMjksIDE1NywgOCwgMywgMjI5LCAxNjIsIDgsIDMsIDIyOSwgMTYxLCAKLSAgICA4LCAzLCAyMjksIDE1OSwgOCwgMywgMjI5LCAxNjAsIDgsIDMsIDIyOSwgMTUyLCA4LCAzLCAyMjksIDE1MSwgOCwgMywgCi0gICAgMjI5LCAxNTYsIDgsIDMsIDIyOSwgMTU1LCA4LCAzLCAyMjksIDE1MywgOCwgMywgMjI5LCAxNTQsIDgsIDMsIDI0MSwgMTEwLCAKLSAgICA4LCAzLCAyNDEsIDEwOSwgOCwgMywgMjQxLCAxMTUsIDgsIDMsIDI0MSwgMTExLCA4LCAzLCAyNDEsIDExMiwgOCwgMywgCi0gICAgMjQxLCAxMTQsIDgsIDMsIDI0MSwgMTEzLCA4LCAzLCAyNDEsIDExOCwgOCwgMywgMjQxLCAxMTcsIDgsIDMsIDI0MSwgMTIwLCAKLSAgICA4LCAzLCAyNDEsIDExOSwgOCwgMywgMjQxLCAxMDEsIDgsIDMsIDI0MSwgMTAzLCA4LCAzLCAyNDEsIDEwMiwgOCwgMywgCi0gICAgMjQxLCAxMDYsIDgsIDMsIDI0MSwgMTA1LCA4LCAzLCAyNDEsIDEwOCwgOCwgMywgMjQxLCAxMDcsIDgsIDMsIDI0MSwgOTcsIAotICAgIDgsIDMsIDI0MSwgOTYsIDgsIDMsIDI0MSwgMTA0LCA4LCAzLCAyNDEsIDEwMCwgOCwgMywgMjQxLCA5OCwgOCwgMywgMjQxLCAKLSAgICA5OSwgOCwgMywgMjQxLCA5MSwgOCwgMywgMjQxLCA5NSwgOCwgMywgMjQxLCA5NCwgOCwgMywgMjQxLCA5MiwgOCwgMywgCi0gICAgMjQxLCA5MywgOCwgMywgMjMwLCAxNzIsIDgsIDMsIDIzMCwgMTcxLCA4LCAzLCAyMzAsIDIzMCwgOCwgMywgMjMwLCAxNzgsIAotICAgIDgsIDMsIDIzMCwgMjAzLCA4LCAzLCAyMzAsIDIyMSwgOCwgMywgMjMwLCAyMTksIDgsIDMsIDIzMSwgMTM5LCA4LCAzLCAKLSAgICAyMzEsIDEzNCwgOCwgMywgMTg0LCA4LCAzLCAyMzEsIDE3MiwgOCwgMywgMjMwLCA3NCwgOCwgMywgMjMwLCA3MywgOCwgMywgCi0gICAgMjMwLCA3NywgOCwgMywgMjMwLCA3NSwgOCwgMywgMjMwLCAxMjEsIDgsIDMsIDIzMCwgMTA3LCA4LCAzLCAyMzAsIDE2MSwgCi0gICAgOCwgMywgMjMwLCAxMjYsIDgsIDMsIDIzMSwgMjYsIDgsIDMsIDIzMSwgOTEsIDgsIDMsIDIzMCwgNTUsIDgsIDMsIDIzMCwgCi0gICAgNTEsIDgsIDMsIDIzMCwgMTAyLCA4LCAzLCAyMzAsIDcwLCA4LCAzLCAyMzAsIDYzLCA4LCAzLCAyMzAsIDY4LCA4LCAzLCAKLSAgICAyMzAsIDI4LCA4LCAzLCAyMzAsIDI3LCA4LCAzLCAyMzAsIDMzLCA4LCAzLCAyMzAsIDMwLCA4LCAzLCAyNDQsIDgzLCA4LCAKLSAgICAzLCAyNDQsIDc4LCA4LCAzLCAyNDQsIDEyMSwgOCwgMywgMjQ0LCA5OCwgOCwgMywgMjQ0LCAxNjcsIDgsIDMsIDI0NCwgCi0gICAgMTU4LCA4LCAzLCAyNDQsIDE5NiwgOCwgMywgMjQ0LCAxNzAsIDgsIDMsIDI0NCwgMywgOCwgMywgMjQ0LCA0MywgOCwgMywgCi0gICAgMjQ0LCAyNywgOCwgMywgMjQzLCAyMTgsIDgsIDMsIDI0MywgMjE3LCA4LCAzLCAyNDMsIDIzNCwgOCwgMywgMjQzLCAyMjMsIAotICAgIDgsIDMsIDI0MywgMjIxLCA4LCAzLCAyNDMsIDIyMiwgOCwgMywgMjQzLCAyMDUsIDgsIDMsIDI0MywgMjA0LCA4LCAzLCAKLSAgICAyNDMsIDIwOCwgOCwgMywgMjQzLCAyMDYsIDgsIDMsIDIxMywgMTQ0LCA4LCAzLCAyMTMsIDEzOSwgOCwgMywgMjEzLCAxNzYsIAotICAgIDgsIDMsIDIxMywgMTUzLCA4LCAzLCAyMTMsIDE2NiwgOCwgMywgMjEzLCAxNjMsIDgsIDMsIDIxMywgMTY4LCA4LCAzLCAKLSAgICAyMTMsIDE2NywgOCwgMywgMjE0LCA3LCA4LCAzLCAyMTQsIDIsIDgsIDMsIDIxNCwgMjcsIDgsIDMsIDIxNCwgMTgsIDgsIDMsIAotICAgIDIxMywgMTI1LCA4LCAzLCAyMTMsIDEyMSwgOCwgMywgMjEzLCAxMzgsIDgsIDMsIDIxMywgMTI2LCA4LCAzLCAyMTMsIDE3OCwgCi0gICAgOCwgMywgMjEzLCAyNDQsIDgsIDMsIDIxMiwgMTEwLCA4LCAzLCAyMTIsIDEwOCwgOCwgMywgMjEyLCAxMTYsIDgsIDMsIAotICAgIDIxMiwgMTEzLCA4LCAzLCAyMTIsIDExMSwgOCwgMywgMjEyLCAxMTIsIDgsIDMsIDIxMiwgMTAyLCA4LCAzLCAyMTIsIDEwMSwgCi0gICAgOCwgMywgMjEyLCAxMDYsIDgsIDMsIDIxMiwgMTA1LCA4LCAzLCAyMTIsIDEwMywgOCwgMywgMjEyLCAxMDQsIDgsIDMsIAotICAgIDI0NywgMTc4LCA4LCAzLCAyNDcsIDE2NiwgOCwgMywgMjQ4LCAzLCA4LCAzLCAyNDcsIDIwMywgOCwgMywgMjQ3LCAyMzYsIAotICAgIDgsIDMsIDI0NywgMjQwLCA4LCAzLCAyNDcsIDIzOSwgOCwgMywgMjQ4LCAxNTIsIDgsIDMsIDI0OCwgMTQ3LCA4LCAzLCAKLSAgICAyNDgsIDIyMSwgOCwgMywgMjQ4LCAxNzIsIDgsIDMsIDI0NiwgNjIsIDgsIDMsIDI0NiwgNjMsIDgsIDMsIDI0NywgMTIwLCAKLSAgICA4LCAzLCAyNDYsIDEwMiwgOCwgMywgMjQ3LCAxNDUsIDgsIDMsIDI0NywgMTIyLCA4LCAzLCAyNDgsIDMwLCA4LCAzLCAyNDgsIAotICAgIDkwLCA4LCAzLCAyNDgsIDQ1LCA4LCAzLCAyNDYsIDUzLCA4LCAzLCAyNDYsIDUxLCA4LCAzLCAyNDYsIDc4LCA4LCAzLCAKLSAgICAyNDYsIDYxLCA4LCAzLCAyNDYsIDU2LCA4LCAzLCAyNDYsIDU5LCA4LCAzLCAyMTYsIDY3LCA4LCAzLCAyMTYsIDYxLCA4LCAKLSAgICAzLCAyMTYsIDExNywgOCwgMywgMjE2LCA3NiwgOCwgMywgMjE2LCAxMDksIDgsIDMsIDIxNiwgMTExLCA4LCAzLCAyMTYsIAotICAgIDExMCwgOCwgMywgMjE3LCA0NiwgOCwgMywgMjE3LCAzMywgOCwgMywgMjE3LCAxMDUsIDgsIDMsIDIxNywgNTQsIDgsIDMsIAotICAgIDIxNSwgMTAyLCA4LCAzLCAyMTUsIDEwMSwgOCwgMywgMjE1LCAxMDQsIDgsIDMsIDIxNSwgMTAzLCA4LCAzLCAyMTYsIDUsIAotICAgIDgsIDMsIDIxNiwgMSwgOCwgMywgMTExLCA4LCAzLCAyMTYsIDEzLCA4LCAzLCAyMTYsIDIxMywgOCwgMywgMjE3LCAyMiwgOCwgCi0gICAgMywgMjE2LCAyMzcsIDgsIDMsIDIxNSwgODgsIDgsIDMsIDIxNSwgODMsIDgsIDMsIDIxNSwgMTE4LCA4LCAzLCAyMTUsIAotICAgIDEwMCwgOCwgMywgMjE1LCA4OSwgOCwgMywgMjE1LCA5OCwgOCwgMywgMjQ4LCAxMDcsIDgsIDMsIDI0OCwgMTA2LCA4LCAzLCAKLSAgICAyNDgsIDExMiwgOCwgMywgMjQ4LCAxMDgsIDgsIDMsIDI0OCwgMTA5LCA4LCAzLCAyNDgsIDExMSwgOCwgMywgMjQ4LCAxMTAsIAotICAgIDgsIDMsIDI0OCwgMTI4LCA4LCAzLCAyNDgsIDEyNywgOCwgMywgMjQ4LCAxMzUsIDgsIDMsIDI0OCwgMTI5LCA4LCAzLCAKLSAgICAyNDgsIDk3LCA4LCAzLCAyNDgsIDk5LCA4LCAzLCAyNDgsIDk4LCA4LCAzLCAyNDgsIDEwMiwgOCwgMywgMjQ4LCAxMDEsIDgsIAotICAgIDMsIDI0OCwgMTA1LCA4LCAzLCAyNDgsIDEwMywgOCwgMywgMjQ4LCAxMjAsIDgsIDMsIDI0OCwgMTIzLCA4LCAzLCAyNDgsIAotICAgIDEyMSwgOCwgMywgMjQ4LCA5MywgOCwgMywgMjQ4LCA5MiwgOCwgMywgMjQ4LCAxMDAsIDgsIDMsIDI0OCwgOTYsIDgsIDMsIAotICAgIDI0OCwgOTQsIDgsIDMsIDI0OCwgOTUsIDgsIDMsIDIyOSwgMTI2LCA4LCAzLCAyMjksIDEyNSwgOCwgMywgMjI5LCAxMzMsIAotICAgIDgsIDMsIDIyOSwgMTI4LCA4LCAzLCAyMjksIDEyOSwgOCwgMywgMjI5LCAxMzAsIDgsIDMsIDIyOSwgMTQyLCA4LCAzLCAKLSAgICAyMjksIDE0MSwgOCwgMywgMjI5LCAxNDgsIDgsIDMsIDIyOSwgMTQzLCA4LCAzLCAyMjksIDExOCwgOCwgMywgMjI5LCAxMTcsIAotICAgIDgsIDMsIDIyOSwgMTI0LCA4LCAzLCAyMjksIDExOSwgOCwgMywgMjI5LCAxMzQsIDgsIDMsIDIyOSwgMTQwLCA4LCAzLCAKLSAgICAyMjksIDEzOCwgOCwgMywgMjI5LCAxMTAsIDgsIDMsIDIyOSwgMTA5LCA4LCAzLCAyMjksIDExNSwgOCwgMywgMjI5LCAxMTMsIAotICAgIDgsIDMsIDIyOSwgMTExLCA4LCAzLCAyMjksIDExMiwgOCwgMywgMjQxLCA3NywgOCwgMywgMjQxLCA3NiwgOCwgMywgMjQxLCAKLSAgICA4MywgOCwgMywgMjQxLCA3OCwgOCwgMywgMjQxLCA4MCwgOCwgMywgMjQxLCA3OSwgOCwgMywgMjQxLCA4MiwgOCwgMywgCi0gICAgMjQxLCA4MSwgOCwgMywgMjQxLCA4OCwgOCwgMywgMjQxLCA4NywgOCwgMywgMjQxLCA5MCwgOCwgMywgMjQxLCA4OSwgOCwgCi0gICAgMywgMjQxLCA3MSwgOCwgMywgMjQxLCA3MiwgOCwgMywgMjQxLCA3NCwgOCwgMywgMjQxLCA3MywgOCwgMywgMjQxLCA3NSwgCi0gICAgOCwgMywgMjQxLCA4NCwgOCwgMywgMjQxLCA4NiwgOCwgMywgMjQxLCA4NSwgOCwgMywgMjQxLCA3MCwgOCwgMywgMjI4LCAKLSAgICAxODksIDgsIDMsIDIyOCwgMTg3LCA4LCAzLCAyMjgsIDIzMywgOCwgMywgMjI4LCAxOTIsIDgsIDMsIDIyOCwgMjE1LCA4LCAKLSAgICAzLCAyMjgsIDIyOSwgOCwgMywgMjI4LCAyMjgsIDgsIDMsIDIyOSwgMTgzLCA4LCAzLCAxOTcsIDgsIDMsIDIyOSwgMTk3LCAKLSAgICA4LCAzLCAyMjcsIDE4NiwgOCwgMywgMjI3LCAxODgsIDgsIDMsIDIyNywgMTg3LCA4LCAzLCAyMjgsIDUxLCA4LCAzLCAyMjgsIAotICAgIDM4LCA4LCAzLCAyMjgsIDc0LCA4LCAzLCAyMjgsIDYwLCA4LCAzLCAyMjksIDgzLCA4LCAzLCAyMjksIDEwNywgOCwgMywgCi0gICAgMjI5LCA5NCwgOCwgMywgMjI3LCAxODEsIDgsIDMsIDIyNywgMTc3LCA4LCAzLCAyMjcsIDIzNywgOCwgMywgMjI3LCAxODUsIAotICAgIDgsIDMsIDIyNywgMTgzLCA4LCAzLCAyMjcsIDE4NCwgOCwgMywgMjQxLCAxNDEsIDgsIDMsIDI0MSwgMTQwLCA4LCAzLCAKLSAgICAyNDEsIDE0NiwgOCwgMywgMjQxLCAxNDIsIDgsIDMsIDI0MSwgMTQzLCA4LCAzLCAyNDEsIDE0NSwgOCwgMywgMjQxLCAxNDQsIAotICAgIDgsIDMsIDI0MSwgMTUxLCA4LCAzLCAyNDEsIDE1MCwgOCwgMywgMjQxLCAxNTMsIDgsIDMsIDI0MSwgMTUyLCA4LCAzLCAKLSAgICAyNDEsIDEzMywgOCwgMywgMjQxLCAxMzUsIDgsIDMsIDI0MSwgMTM0LCA4LCAzLCAyNDEsIDEzNywgOCwgMywgMjQxLCAxMzksIAotICAgIDgsIDMsIDI0MSwgMTM4LCA4LCAzLCAyNDEsIDE0NywgOCwgMywgMjQxLCAxNDksIDgsIDMsIDI0MSwgMTQ4LCA4LCAzLCAKLSAgICAyNDEsIDEyOSwgOCwgMywgMjQxLCAxMjgsIDgsIDMsIDI0MSwgMTM2LCA4LCAzLCAyNDEsIDEzMiwgOCwgMywgMjQxLCAxMzAsIAotICAgIDgsIDMsIDI0MSwgMTMxLCA4LCAzLCAyNDEsIDEyMywgOCwgMywgMjQxLCAxMjIsIDgsIDMsIDI0MSwgMTI3LCA4LCAzLCAKLSAgICAyNDEsIDEyNiwgOCwgMywgMjQxLCAxMjQsIDgsIDMsIDI0MSwgMTI1LCA4LCAzLCAyMzIsIDE5NSwgOCwgMywgMjMyLCAxODksIAotICAgIDgsIDMsIDIzMiwgMjQxLCA4LCAzLCAyMzIsIDIwMiwgOCwgMywgMjMyLCAyMzMsIDgsIDMsIDIzMiwgMjMyLCA4LCAzLCAKLSAgICAyMzIsIDIzNiwgOCwgMywgMjMyLCAyMzQsIDgsIDMsIDIzMywgNzksIDgsIDMsIDIzMywgNjksIDgsIDMsIDIzMywgMTM1LCAKLSAgICA4LCAzLCAyMzMsIDg4LCA4LCAzLCAyMzIsIDc5LCA4LCAzLCAyMzIsIDc4LCA4LCAzLCAyMzIsIDgxLCA4LCAzLCAyMzIsIAotICAgIDgwLCA4LCAzLCAyMzIsIDExNiwgOCwgMywgMjMyLCAxMDYsIDgsIDMsIDIzMiwgMTU2LCA4LCAzLCAyMzIsIDEyMCwgOCwgMywgCi0gICAgMjMzLCAyLCA4LCAzLCAyMzMsIDU4LCA4LCAzLCAyMzMsIDE3LCA4LCAzLCAyMzIsIDc0LCA4LCAzLCAyMzIsIDcyLCA4LCAzLCAKLSAgICAyMzIsIDk4LCA4LCAzLCAyMzIsIDc3LCA4LCAzLCAyMzIsIDc1LCA4LCAzLCAyMzIsIDc2LCA4LCAzLCAyMzIsIDU0LCA4LCAKLSAgICAzLCAyMzIsIDUzLCA4LCAzLCAyMzIsIDYyLCA4LCAzLCAyMzIsIDU3LCA4LCAzLCAyMzIsIDU1LCA4LCAzLCAyMzIsIDU2LCAKLSAgICA4LCAzLCAyNDIsIDE4OSwgOCwgMywgMjQyLCAxODgsIDgsIDMsIDI0MiwgMjE0LCA4LCAzLCAyNDIsIDE5OSwgOCwgMywgCi0gICAgMjQyLCAyMDYsIDgsIDMsIDI0MiwgMjA1LCA4LCAzLCAyNDIsIDIwOCwgOCwgMywgMjQyLCAyMDcsIDgsIDMsIDI0MywgODksIAotICAgIDgsIDMsIDI0MywgODQsIDgsIDMsIDI0MywgMTM1LCA4LCAzLCAyNDMsIDk5LCA4LCAzLCAyNDIsIDkxLCA4LCAzLCAyNDIsIAotICAgIDkwLCA4LCAzLCAyNDIsIDkzLCA4LCAzLCAyNDIsIDkyLCA4LCAzLCAyNDIsIDE1NCwgOCwgMywgMjQyLCAxNTIsIDgsIDMsIAotICAgIDI0MiwgMTc0LCA4LCAzLCAyNDIsIDE2MiwgOCwgMywgMjQzLCAzMywgOCwgMywgMjQzLCAzMSwgOCwgMywgMjQzLCA2MiwgOCwgCi0gICAgMywgMjQzLCA0NCwgOCwgMywgMjQyLCA4MSwgOCwgMywgMjQyLCA4MCwgOCwgMywgMjQyLCAxMTMsIDgsIDMsIDI0MiwgODksIAotICAgIDgsIDMsIDI0MiwgODIsIDgsIDMsIDI0MiwgODgsIDgsIDMsIDIzNCwgNjEsIDgsIDMsIDIzNCwgNjAsIDgsIDMsIDIzNCwgCi0gICAgOTIsIDgsIDMsIDIzNCwgNzUsIDgsIDMsIDIzNCwgODUsIDgsIDMsIDIzNCwgODgsIDgsIDMsIDIzNCwgODYsIDgsIDMsIAotICAgIDIzNCwgMjAyLCA4LCAzLCAyMzQsIDE5MCwgOCwgMywgMTc2LCA4LCAzLCAyMzQsIDIyOCwgOCwgMywgMjMzLCAyMDAsIDgsIAotICAgIDMsIDIzMywgMjA1LCA4LCAzLCAyMzMsIDIwMiwgOCwgMywgMjM0LCAwLCA4LCAzLCAyMzMsIDI1MiwgOCwgMywgMjM0LCAyOCwgCi0gICAgOCwgMywgMjM0LCA3LCA4LCAzLCAyMzQsIDE1NiwgOCwgMywgMjM0LCAxNDAsIDgsIDMsIDIzNCwgMTgyLCA4LCAzLCAyMzQsIAotICAgIDE1OSwgOCwgMywgMjMzLCAxODksIDgsIDMsIDIzMywgMTg2LCA4LCAzLCAyMzMsIDIxNywgOCwgMywgMjMzLCAxOTksIDgsIAotICAgIDMsIDIzMywgMTkyLCA4LCAzLCAyMzMsIDE5NiwgOCwgMywgMjQzLCAxNSwgOCwgMywgMjQzLCAxNCwgOCwgMywgMjQzLCAxOSwgCi0gICAgOCwgMywgMjQzLCAxNiwgOCwgMywgMjQzLCAxOCwgOCwgMywgMjQzLCAxNywgOCwgMywgMjQzLCAyNiwgOCwgMywgMjQzLCAKLSAgICAyNSwgOCwgMywgMjQzLCAyOSwgOCwgMywgMjQzLCAyNywgOCwgMywgMjQzLCA2LCA4LCAzLCAyNDMsIDUsIDgsIDMsIDI0MywgCi0gICAgOCwgOCwgMywgMjQzLCA3LCA4LCAzLCAyNDMsIDExLCA4LCAzLCAyNDMsIDEwLCA4LCAzLCAyNDMsIDEzLCA4LCAzLCAyNDMsIAotICAgIDEyLCA4LCAzLCAyNDMsIDIxLCA4LCAzLCAyNDMsIDIwLCA4LCAzLCAyNDMsIDI0LCA4LCAzLCAyNDMsIDIyLCA4LCAzLCAKLSAgICAyNDMsIDEsIDgsIDMsIDI0MywgMCwgOCwgMywgMjQzLCA5LCA4LCAzLCAyNDMsIDQsIDgsIDMsIDI0MywgMiwgOCwgMywgCi0gICAgMjQzLCAzLCA4LCAzLCAyMzAsIDI0OSwgOCwgMywgMjMwLCAyNTAsIDgsIDMsIDIzMSwgMTIsIDgsIDMsIDIzMSwgMTEsIDgsIAotICAgIDMsIDIzMSwgMTQsIDgsIDMsIDIzMSwgMTMsIDgsIDMsIDIzMCwgMjQwLCA4LCAzLCAyMzAsIDI0MiwgOCwgMywgMjMwLCAKLSAgICAyNDEsIDgsIDMsIDIzMCwgMjQ1LCA4LCAzLCAyMzAsIDI0NCwgOCwgMywgMjMwLCAyNDcsIDgsIDMsIDIzMCwgMjQ2LCA4LCAKLSAgICAzLCAyMzAsIDI1MSwgOCwgMywgMjMwLCAyNTMsIDgsIDMsIDIzMCwgMjUyLCA4LCAzLCAyMzAsIDIzNiwgOCwgMywgMjMwLCAKLSAgICAyMzUsIDgsIDMsIDIzMCwgMjQzLCA4LCAzLCAyMzAsIDIzOSwgOCwgMywgMjMwLCAyMzcsIDgsIDMsIDIzMCwgMjM4LCA4LCAKLSAgICAzLCAyNDAsIDE4MCwgOCwgMywgMjQwLCAxNzksIDgsIDMsIDI0MCwgMTg2LCA4LCAzLCAyNDAsIDE4MSwgOCwgMywgMjQwLCAKLSAgICAxODMsIDgsIDMsIDI0MCwgMTgyLCA4LCAzLCAyNDAsIDE4NSwgOCwgMywgMjQwLCAxODQsIDgsIDMsIDI0MCwgMTkxLCA4LCAKLSAgICAzLCAyNDAsIDE5MCwgOCwgMywgMjQwLCAxOTMsIDgsIDMsIDI0MCwgMTkyLCA4LCAzLCAyNDAsIDE3MiwgOCwgMywgMjQwLCAKLSAgICAxNzEsIDgsIDMsIDI0MCwgMTc0LCA4LCAzLCAyNDAsIDE3MywgOCwgMywgMjQwLCAxNzYsIDgsIDMsIDI0MCwgMTc1LCA4LCAKLSAgICAzLCAyNDAsIDE3OCwgOCwgMywgMjQwLCAxNzcsIDgsIDMsIDI0MCwgMTg3LCA4LCAzLCAyNDAsIDE4OSwgOCwgMywgMjQwLCAKLSAgICAxODgsIDgsIDMsIDIyOSwgMjQsIDgsIDMsIDIyOSwgMjYsIDgsIDMsIDIyOSwgMjUsIDgsIDMsIDIyOSwgNjcsIDgsIDMsIAotICAgIDIyOSwgNjUsIDgsIDMsIDIyOSwgNzcsIDgsIDMsIDIyOSwgNzAsIDgsIDMsIDIyOCwgMjQzLCA4LCAzLCAyMjgsIDI0MiwgOCwgCi0gICAgMywgMjI4LCAyNDQsIDgsIDMsIDIyOCwgMjUyLCA4LCAzLCAyMjgsIDI0OSwgOCwgMywgMjI5LCA0LCA4LCAzLCAyMjgsIAotICAgIDI1NCwgOCwgMywgMjI5LCA1OCwgOCwgMywgMjI5LCA2NCwgOCwgMywgMjI5LCA2MCwgOCwgMywgMjQxLCAxNTYsIDgsIDMsIAotICAgIDI0MSwgMTY2LCA4LCAzLCAyNDEsIDE3NSwgOCwgMywgMjQxLCAyNTEsIDgsIDMsIDI0MSwgMjQzLCA4LCAzLCAxNjIsIDgsIAotICAgIDMsIDI0MiwgNiwgOCwgMywgMjQwLCAyMDYsIDgsIDMsIDI0MCwgMjA1LCA4LCAzLCAyNDAsIDIwOCwgOCwgMywgMjQwLCAKLSAgICAyMDcsIDgsIDMsIDI0MCwgMjQyLCA4LCAzLCAyNDAsIDIzMywgOCwgMywgMjQxLCA2OCwgOCwgMywgMjQxLCA0NywgOCwgMywgCi0gICAgMjQxLCAxOTQsIDgsIDMsIDI0MSwgMjM4LCA4LCAzLCAyNDEsIDIwNiwgOCwgMywgMjEyLCA0MywgOCwgMywgMjEyLCAyOCwgCi0gICAgOCwgMywgMjEyLCA2NSwgOCwgMywgMjEyLCA1MSwgOCwgMywgMjExLCAxODUsIDgsIDMsIDIxMSwgMTg3LCA4LCAzLCAyMTEsIAotICAgIDE4NiwgOCwgMywgMjExLCAyMDMsIDgsIDMsIDIxMSwgMjI3LCA4LCAzLCAyMTEsIDIxMCwgOCwgMywgMjEyLCA1LCA4LCAzLCAKLSAgICAyMTIsIDIyLCA4LCAzLCAyMTIsIDEwLCA4LCAzLCAyMTAsIDMwLCA4LCAzLCAyMTAsIDI5LCA4LCAzLCAyMTAsIDQ0LCA4LCAKLSAgICAzLCAyMTAsIDMyLCA4LCAzLCAyMTAsIDM3LCA4LCAzLCAyMTAsIDM5LCA4LCAzLCAyMTAsIDM4LCA4LCAzLCAyMTAsIDEwMiwgCi0gICAgOCwgMywgMjEwLCA5OSwgOCwgMywgMjEwLCAxMTYsIDgsIDMsIDIxMCwgMTA1LCA4LCAzLCAyMTAsIDYsIDgsIDMsIDIxMCwgCi0gICAgOCwgOCwgMywgMjEwLCA3LCA4LCAzLCAyMTAsIDE5LCA4LCAzLCAyMTAsIDE4LCA4LCAzLCAyMTAsIDIzLCA4LCAzLCAyMTAsIAotICAgIDIwLCA4LCAzLCAyMTAsIDg0LCA4LCAzLCAyMTAsIDk0LCA4LCAzLCAyMTAsIDg4LCA4LCAzLCAyMTAsIDIsIDgsIDMsIDIxMCwgCi0gICAgMSwgOCwgMywgMjEwLCAxMywgOCwgMywgMjEwLCA1LCA4LCAzLCAyMTAsIDMsIDgsIDMsIDIxMCwgNCwgOCwgMywgMjA5LCAKLSAgICAyNDUsIDgsIDMsIDIwOSwgMjQ0LCA4LCAzLCAyMDksIDI1MCwgOCwgMywgMjA5LCAyNDgsIDgsIDMsIDIwOSwgMjQ2LCA4LCAKLSAgICAzLCAyMDksIDI0NywgOCwgMywgMjUwLCAyOCwgOCwgMywgMjUwLCAyNCwgOCwgMywgMjUwLCA1MSwgOCwgMywgMjUwLCAzNywgCi0gICAgOCwgMywgMjUwLCA0OCwgOCwgMywgMjUwLCA0MiwgOCwgMywgMjUwLCA1MCwgOCwgMywgMjUwLCA0OSwgOCwgMywgMjUwLCAKLSAgICAyMjQsIDgsIDMsIDI1MCwgMjE3LCA4LCAzLCAyNTEsIDMzLCA4LCAzLCAyNTAsIDI1MSwgOCwgMywgMjQ5LCAxMDQsIDgsIDMsIAotICAgIDI0OSwgMTA2LCA4LCAzLCAyNDksIDEwNSwgOCwgMywgMjQ5LCAxNTMsIDgsIDMsIDI0OSwgMTQ0LCA4LCAzLCAyNDksIDIzOCwgCi0gICAgOCwgMywgMjQ5LCAxNjksIDgsIDMsIDI1MCwgMTYwLCA4LCAzLCAyNTAsIDE5MCwgOCwgMywgMjUwLCAxNjUsIDgsIDMsIAotICAgIDI0OSwgODQsIDgsIDMsIDI0OSwgODIsIDgsIDMsIDI0OSwgMTEyLCA4LCAzLCAyNDksIDEwMiwgOCwgMywgMjQ5LCA4OSwgOCwgCi0gICAgMywgMjQ5LCAxMDEsIDgsIDMsIDI0OSwgNjMsIDgsIDMsIDI0OSwgNjIsIDgsIDMsIDI0OSwgNzMsIDgsIDMsIDI0OSwgNjksIAotICAgIDgsIDMsIDI0OSwgNjQsIDgsIDMsIDI0OSwgNjYsIDgsIDMsIDIwOSwgMjI4LCA4LCAzLCAyMDksIDIyNywgOCwgMywgMjA5LCAKLSAgICAyMzQsIDgsIDMsIDIwOSwgMjI5LCA4LCAzLCAyMDksIDIzMSwgOCwgMywgMjA5LCAyMzAsIDgsIDMsIDIwOSwgMjMzLCA4LCAKLSAgICAzLCAyMDksIDIzMiwgOCwgMywgMjA5LCAyNDAsIDgsIDMsIDIwOSwgMjM5LCA4LCAzLCAyMDksIDI0MywgOCwgMywgMjA5LCAKLSAgICAyNDEsIDgsIDMsIDIwOSwgMjI0LCA4LCAzLCAyMDksIDIyNiwgOCwgMywgMjA5LCAyMjUsIDgsIDMsIDIwOSwgMjM1LCA4LCAKLSAgICAzLCAyMDksIDIzOCwgOCwgMywgMjA5LCAyMzYsIDgsIDMsIDIwOSwgMjE3LCA4LCAzLCAyMDksIDIyMSwgOCwgMywgMjA5LCAKLSAgICAyMjAsIDgsIDMsIDIwOSwgMjE4LCA4LCAzLCAyMDksIDIxOSwgOCwgMywgMjA5LCAyMTEsIDgsIDMsIDIwOSwgMjEwLCA4LCAKLSAgICAzLCAyMDksIDIxNiwgOCwgMywgMjA5LCAyMTQsIDgsIDMsIDIwOSwgMjEyLCA4LCAzLCAyMDksIDIxMywgOCwgMywgMjI3LCAKLSAgICAxMDQsIDgsIDMsIDIyNywgMTAzLCA4LCAzLCAyMjcsIDEwOSwgOCwgMywgMjI3LCAxMDUsIDgsIDMsIDIyNywgMTA2LCA4LCAKLSAgICAzLCAyMjcsIDEwOCwgOCwgMywgMjI3LCAxMDcsIDgsIDMsIDIyNywgMTE0LCA4LCAzLCAyMjcsIDExMywgOCwgMywgMjI3LCAKLSAgICAxMTcsIDgsIDMsIDIyNywgMTE2LCA4LCAzLCAyMjcsIDk3LCA4LCAzLCAyMjcsIDk4LCA4LCAzLCAyMjcsIDEwMSwgOCwgMywgCi0gICAgMjI3LCAxMDIsIDgsIDMsIDIyNywgMTEwLCA4LCAzLCAyMjcsIDExMiwgOCwgMywgMjI3LCA5MiwgOCwgMywgMjI3LCAxMDAsIAotICAgIDgsIDMsIDIyNywgOTYsIDgsIDMsIDIyNywgOTMsIDgsIDMsIDIyNywgOTQsIDgsIDMsIDIyNywgODcsIDgsIDMsIDIyNywgCi0gICAgODYsIDgsIDMsIDIyNywgOTEsIDgsIDMsIDIyNywgOTAsIDgsIDMsIDIyNywgODgsIDgsIDMsIDIyNywgODksIDgsIDMsIAotICAgIDIxOSwgMTI3LCA4LCAzLCAxOTQsIDgsIDMsIDIxOSwgMTkxLCA4LCAzLCAyMTksIDEzMCwgOCwgMywgMjE5LCAxODMsIDgsIAotICAgIDMsIDIxOSwgMTg2LCA4LCAzLCAyMTksIDE4NCwgOCwgMywgMjIxLCAyMjYsIDgsIDMsIDIyMSwgMjE0LCA4LCAzLCAyMDYsIAotICAgIDgsIDMsIDIyMSwgMjM0LCA4LCAzLCAyMTgsIDI4LCA4LCAzLCAyMTgsIDMwLCA4LCAzLCAyMTgsIDI5LCA4LCAzLCAyMTksIAotICAgIDM0LCA4LCAzLCAyMTksIDIzLCA4LCAzLCAyMTksIDU4LCA4LCAzLCAyMTksIDM4LCA4LCAzLCAyMjAsIDExNCwgOCwgMywgCi0gICAgMjIxLCAxODEsIDgsIDMsIDIyMCwgMTM5LCA4LCAzLCAyMTgsIDUsIDgsIDMsIDIxOCwgMywgOCwgMywgMjE4LCA4MywgOCwgCi0gICAgMywgMjE4LCAyNywgOCwgMywgMjE4LCA5LCA4LCAzLCAyMTgsIDE3LCA4LCAzLCAyMTcsIDE2NiwgOCwgMywgMjE3LCAxNjUsIAotICAgIDgsIDMsIDIxNywgMjMyLCA4LCAzLCAyMTcsIDE3MywgOCwgMywgMjE3LCAxNjgsIDgsIDMsIDIxNywgMTcyLCA4LCAzLCAKLSAgICAyMTgsIDE4NiwgOCwgMywgMjE4LCAxODUsIDgsIDMsIDIxOCwgMTkyLCA4LCAzLCAyMTgsIDE4NywgOCwgMywgMjE4LCAxODksIAotICAgIDgsIDMsIDIxOCwgMTkxLCA4LCAzLCAyMTgsIDE5MCwgOCwgMywgMjE4LCAyMDAsIDgsIDMsIDIxOCwgMTk4LCA4LCAzLCAKLSAgICAyMTgsIDIyMywgOCwgMywgMjE4LCAyMDEsIDgsIDMsIDIxOCwgMTgxLCA4LCAzLCAyMTgsIDE4MCwgOCwgMywgMjE4LCAxODQsIAotICAgIDgsIDMsIDIxOCwgMTgyLCA4LCAzLCAyMTgsIDE5NCwgOCwgMywgMjE4LCAxOTcsIDgsIDMsIDIxOCwgMTk1LCA4LCAzLCAKLSAgICAyMTgsIDE3NywgOCwgMywgMjE4LCAxNzUsIDgsIDMsIDIxOCwgMTc5LCA4LCAzLCAyMTgsIDE3OCwgOCwgMywgMjE4LCAxNzAsIAotICAgIDgsIDMsIDIxOCwgMTY5LCA4LCAzLCAyMTgsIDE3NCwgOCwgMywgMjE4LCAxNzMsIDgsIDMsIDIxOCwgMTcxLCA4LCAzLCAKLSAgICAyMTgsIDE3MiwgOCwgMywgMjEwLCA3NywgOCwgMywgMjEwLCA3NiwgOCwgMywgMjEwLCA4MiwgOCwgMywgMjEwLCA3OSwgOCwgCi0gICAgMywgMjEwLCA1OSwgOCwgMywgMjEwLCA2MSwgOCwgMywgMjEwLCA2MCwgOCwgMywgMjEwLCA2NCwgOCwgMywgMjEwLCA2MywgCi0gICAgOCwgMywgMjEwLCA2NywgOCwgMywgMjEwLCA2NSwgOCwgMywgMjEwLCA3MSwgOCwgMywgMjEwLCA3MCwgOCwgMywgMjEwLCAKLSAgICA3NCwgOCwgMywgMjEwLCA3MiwgOCwgMywgMjEwLCA1NSwgOCwgMywgMjEwLCA1NCwgOCwgMywgMjEwLCA2MiwgOCwgMywgCi0gICAgMjEwLCA1OCwgOCwgMywgMjEwLCA1NiwgOCwgMywgMjEwLCA1NywgOCwgMywgMjEwLCA0NywgOCwgMywgMjEwLCA0NiwgOCwgCi0gICAgMywgMjEwLCA1MSwgOCwgMywgMjEwLCA1MCwgOCwgMywgMjEwLCA0OCwgOCwgMywgMjEwLCA0OSwgOCwgMywgMjUwLCAxMzYsIAotICAgIDgsIDMsIDI1MCwgMTMzLCA4LCAzLCAyNTAsIDE1NywgOCwgMywgMjUwLCAxNDQsIDgsIDMsIDI1MCwgNjUsIDgsIDMsIDI1MCwgCi0gICAgNjQsIDgsIDMsIDI1MCwgNjcsIDgsIDMsIDI1MCwgNjYsIDgsIDMsIDI1MCwgNzksIDgsIDMsIDI1MCwgNzgsIDgsIDMsIAotICAgIDI1MCwgODYsIDgsIDMsIDI1MCwgODEsIDgsIDMsIDI1MCwgMTE1LCA4LCAzLCAyNTAsIDExMywgOCwgMywgMjUwLCAxMzEsIAotICAgIDgsIDMsIDI1MCwgMTIxLCA4LCAzLCAyNTAsIDU5LCA4LCAzLCAyNTAsIDY5LCA4LCAzLCAyNTAsIDYzLCA4LCAzLCAyNTAsIAotICAgIDYwLCA4LCAzLCAyNTAsIDYyLCA4LCAzLCAyNTAsIDUzLCA4LCAzLCAyNTAsIDUyLCA4LCAzLCAyNTAsIDU3LCA4LCAzLCAKLSAgICAyNTAsIDU2LCA4LCAzLCAyNTAsIDU0LCA4LCAzLCAyNTAsIDU1LCA4LCAzLCAyMjIsIDE3NSwgOCwgMywgMjIyLCAxNzksIDgsIAotICAgIDMsIDIyMiwgMTU4LCA4LCAzLCAyMjIsIDE1OSwgOCwgMywgMjIyLCAxNjIsIDgsIDMsIDIyMiwgMTYxLCA4LCAzLCAyMjIsIAotICAgIDE2NSwgOCwgMywgMjIyLCAxNjMsIDgsIDMsIDIyMiwgMTY5LCA4LCAzLCAyMjIsIDE2OCwgOCwgMywgMjIyLCAxNzQsIDgsIAotICAgIDMsIDIyMiwgMTcwLCA4LCAzLCAyMjIsIDE1NCwgOCwgMywgMjIyLCAxNTIsIDgsIDMsIDIyMiwgMTYwLCA4LCAzLCAyMjIsIAotICAgIDE1NywgOCwgMywgMjIyLCAxNTUsIDgsIDMsIDIyMiwgMTU2LCA4LCAzLCAyMjIsIDE0NywgOCwgMywgMjIyLCAxNDYsIDgsIAotICAgIDMsIDIyMiwgMTUxLCA4LCAzLCAyMjIsIDE1MCwgOCwgMywgMjIyLCAxNDgsIDgsIDMsIDIyMiwgMTQ5LCA4LCAzLCAyMjgsIAotICAgIDM0LCA4LCAzLCAyMjgsIDMzLCA4LCAzLCAyMjgsIDM2LCA4LCAzLCAyMjgsIDM1LCA4LCAzLCAyMjgsIDI2LCA4LCAzLCAKLSAgICAyMjgsIDI4LCA4LCAzLCAyMjgsIDI3LCA4LCAzLCAyMjgsIDMwLCA4LCAzLCAyMjgsIDI5LCA4LCAzLCAyMjgsIDMyLCA4LCAKLSAgICAzLCAyMjgsIDMxLCA4LCAzLCAyMjgsIDIxLCA4LCAzLCAyMjgsIDIwLCA4LCAzLCAyMjgsIDI1LCA4LCAzLCAyMjgsIDI0LCAKLSAgICA4LCAzLCAyMjgsIDIyLCA4LCAzLCAyMjgsIDIzLCA4LCAzLCAyMjgsIDE1LCA4LCAzLCAyMjgsIDE0LCA4LCAzLCAyMjgsIAotICAgIDE5LCA4LCAzLCAyMjgsIDE4LCA4LCAzLCAyMjgsIDE2LCA4LCAzLCAyMjgsIDE3LCA4LCAzLCAyMjAsIDcyLCA4LCAzLCAKLSAgICAyMjAsIDY3LCA4LCAzLCAyMjAsIDEwMiwgOCwgMywgMjIwLCA4MywgOCwgMywgMjE5LCAyMTUsIDgsIDMsIDIxOSwgMjE3LCAKLSAgICA4LCAzLCAyMTksIDIxNiwgOCwgMywgMjE5LCAyMzYsIDgsIDMsIDIxOSwgMjMzLCA4LCAzLCAyMjAsIDcsIDgsIDMsIDIxOSwgCi0gICAgMjU0LCA4LCAzLCAyMjAsIDQyLCA4LCAzLCAyMjAsIDM1LCA4LCAzLCAyMjAsIDYzLCA4LCAzLCAyMjAsIDUwLCA4LCAzLCAKLSAgICAyMTksIDIxMSwgOCwgMywgMjE5LCAyMDksIDgsIDMsIDIxOSwgMjI1LCA4LCAzLCAyMTksIDIxNCwgOCwgMywgMjE5LCAyMTIsIAotICAgIDgsIDMsIDIxOSwgMjEzLCA4LCAzLCAyMTksIDE5NCwgOCwgMywgMjE5LCAxOTMsIDgsIDMsIDIxOSwgMjAwLCA4LCAzLCAKLSAgICAyMTksIDE5NywgOCwgMywgMjE5LCAxOTUsIDgsIDMsIDIxOSwgMTk2LCA4LCAzLCAyMjMsIDE0MSwgOCwgMywgMjIzLCAxMzUsIAotICAgIDgsIDMsIDIwNSwgOCwgMywgMjIzLCAxNDcsIDgsIDMsIDIyMiwgMTIwLCA4LCAzLCAyMjIsIDEyMiwgOCwgMywgMjIyLCAKLSAgICAxMjEsIDgsIDMsIDIyMiwgMTg4LCA4LCAzLCAyMjIsIDE4MSwgOCwgMywgMjIyLCAyMTEsIDgsIDMsIDIyMiwgMTkyLCA4LCAKLSAgICAzLCAyMjMsIDQzLCA4LCAzLCAyMjMsIDEyOCwgOCwgMywgMjIzLCA4MSwgOCwgMywgMjIyLCAxMTMsIDgsIDMsIDIyMiwgCi0gICAgMTEwLCA4LCAzLCAyMjIsIDE0MCwgOCwgMywgMjIyLCAxMTksIDgsIDMsIDIyMiwgMTE1LCA4LCAzLCAyMjIsIDExNiwgOCwgCi0gICAgMywgMjIyLCA5NSwgOCwgMywgMjIyLCA5NCwgOCwgMywgMjIyLCAxMDAsIDgsIDMsIDIyMiwgOTgsIDgsIDMsIDIyMiwgOTYsIAotICAgIDgsIDMsIDIyMiwgOTcsIDgsIDMsIDIzNSwgOTgsIDgsIDMsIDIzNSwgOTcsIDgsIDMsIDIzNSwgMTA4LCA4LCAzLCAyMzUsIAotICAgIDk5LCA4LCAzLCAyMzUsIDEwNCwgOCwgMywgMjM1LCAxMDMsIDgsIDMsIDIzNSwgMTA2LCA4LCAzLCAyMzUsIDEwNSwgOCwgMywgCi0gICAgMjM1LCA0MSwgOCwgMywgMjM1LCA0MCwgOCwgMywgMjM1LCA0MywgOCwgMywgMjM1LCA0MiwgOCwgMywgMjM1LCA1NiwgOCwgCi0gICAgMywgMjM1LCA1NCwgOCwgMywgMjM1LCA2OCwgOCwgMywgMjM1LCA1OCwgOCwgMywgMjM1LCAzNCwgOCwgMywgMjM1LCAzMiwgCi0gICAgOCwgMywgMjM1LCA1MSwgOCwgMywgMjM1LCAzOSwgOCwgMywgMjM1LCAzNiwgOCwgMywgMjM1LCAzNywgOCwgMywgMjM1LCAKLSAgICAyNiwgOCwgMywgMjM1LCAyNSwgOCwgMywgMjM1LCAzMCwgOCwgMywgMjM1LCAyOSwgOCwgMywgMjM1LCAyNywgOCwgMywgCi0gICAgMjM1LCAyOCwgOCwgMywgMjI0LCA0NiwgOCwgMywgMjI0LCA0NCwgOCwgMywgMjI0LCA1MywgOCwgMywgMjI0LCA0NywgOCwgCi0gICAgMywgMjI0LCA1MCwgOCwgMywgMjI0LCA0OSwgOCwgMywgMjI0LCA1MiwgOCwgMywgMjI0LCA1MSwgOCwgMywgMjIzLCAyNTUsIAotICAgIDgsIDMsIDIyMywgMjUyLCA4LCAzLCAyMjQsIDEsIDgsIDMsIDIyNCwgMCwgOCwgMywgMjI0LCAzMywgOCwgMywgMjI0LCAzMiwgCi0gICAgOCwgMywgMjI0LCA0MiwgOCwgMywgMjI0LCAzNiwgOCwgMywgMjIzLCAyNDcsIDgsIDMsIDIyMywgMjQzLCA4LCAzLCAyMjQsIAotICAgIDMwLCA4LCAzLCAyMjMsIDI1MSwgOCwgMywgMjIzLCAyNDksIDgsIDMsIDIyMywgMjUwLCA4LCAzLCAyMjMsIDIyNywgOCwgMywgCi0gICAgMjIzLCAyMjUsIDgsIDMsIDIyMywgMjM3LCA4LCAzLCAyMjMsIDIzMCwgOCwgMywgMjIzLCAyMjgsIDgsIDMsIDIyMywgMjI5LCAKLSAgICA4LCAzLCAyMzUsIDg3LCA4LCAzLCAyMzUsIDg2LCA4LCAzLCAyMzUsIDkzLCA4LCAzLCAyMzUsIDg4LCA4LCAzLCAyMzUsIAotICAgIDkwLCA4LCAzLCAyMzUsIDg5LCA4LCAzLCAyMzUsIDkyLCA4LCAzLCAyMzUsIDkxLCA4LCAzLCAyMzUsIDc4LCA4LCAzLCAKLSAgICAyMzUsIDgwLCA4LCAzLCAyMzUsIDc5LCA4LCAzLCAyMzUsIDgzLCA4LCAzLCAyMzUsIDgyLCA4LCAzLCAyMzUsIDg1LCA4LCAKLSAgICAzLCAyMzUsIDg0LCA4LCAzLCAyMzUsIDc0LCA4LCAzLCAyMzUsIDczLCA4LCAzLCAyMzUsIDgxLCA4LCAzLCAyMzUsIDc3LCAKLSAgICA4LCAzLCAyMzUsIDc1LCA4LCAzLCAyMzUsIDc2LCA4LCAzLCAyMzUsIDcwLCA4LCAzLCAyMzUsIDY5LCA4LCAzLCAyMzUsIAotICAgIDcyLCA4LCAzLCAyMzUsIDcxLCA4LCAzLCAyMjgsIDE2MiwgOCwgMywgMjI4LCAxNjEsIDgsIDMsIDIyOCwgMTY5LCA4LCAzLCAKLSAgICAyMjgsIDE2MywgOCwgMywgMjI4LCAxNjUsIDgsIDMsIDIyOCwgMTY0LCA4LCAzLCAyMjgsIDE2OCwgOCwgMywgMjI4LCAxNjYsIAotICAgIDgsIDMsIDIyOCwgMTUxLCA4LCAzLCAyMjgsIDE1MiwgOCwgMywgMjI4LCAxNTcsIDgsIDMsIDIyOCwgMTU2LCA4LCAzLCAKLSAgICAyMjgsIDE2MCwgOCwgMywgMjI4LCAxNTgsIDgsIDMsIDIyOCwgMTQ2LCA4LCAzLCAyMjgsIDE1NSwgOCwgMywgMjI4LCAxNTAsIAotICAgIDgsIDMsIDIyOCwgMTQ3LCA4LCAzLCAyMjgsIDE0OCwgOCwgMywgMjI4LCAxNDEsIDgsIDMsIDIyOCwgMTQwLCA4LCAzLCAKLSAgICAyMjgsIDE0NSwgOCwgMywgMjI4LCAxNDQsIDgsIDMsIDIyOCwgMTQyLCA4LCAzLCAyMjgsIDE0MywgOCwgMywgMjI3LCAxMzcsIAotICAgIDgsIDMsIDIyNywgMTM2LCA4LCAzLCAyMjcsIDE0OCwgOCwgMywgMjI3LCAxNDEsIDgsIDMsIDIyNywgMTQ1LCA4LCAzLCAKLSAgICAyMjcsIDE0NCwgOCwgMywgMjI3LCAxNDcsIDgsIDMsIDIyNywgMTQ2LCA4LCAzLCAyMjcsIDEyNCwgOCwgMywgMjI3LCAxMjYsIAotICAgIDgsIDMsIDIyNywgMTI1LCA4LCAzLCAyMjcsIDEzMCwgOCwgMywgMjI3LCAxMjksIDgsIDMsIDIyNywgMTM0LCA4LCAzLCAKLSAgICAyMjcsIDEzMSwgOCwgMywgMjI3LCAxMjIsIDgsIDMsIDIyNywgMTIwLCA4LCAzLCAyMjcsIDEyOCwgOCwgMywgMjI3LCAxMjMsIAotICAgIDgsIDMsIDIxMSwgMTUwLCA4LCAzLCAyMTEsIDE0OSwgOCwgMywgMjExLCAxNTcsIDgsIDMsIDIxMSwgMTUyLCA4LCAzLCAKLSAgICAyMTEsIDE1NCwgOCwgMywgMjExLCAxNTMsIDgsIDMsIDIxMSwgMTU2LCA4LCAzLCAyMTEsIDE1NSwgOCwgMywgMjExLCAxMzksIAotICAgIDgsIDMsIDIxMSwgMTQwLCA4LCAzLCAyMTEsIDE0NCwgOCwgMywgMjExLCAxNDMsIDgsIDMsIDIxMSwgMTQ4LCA4LCAzLCAKLSAgICAyMTEsIDE0NiwgOCwgMywgMjExLCAxMjEsIDgsIDMsIDIxMSwgMTE5LCA4LCAzLCAyMTEsIDEzMSwgOCwgMywgMjExLCAxMjQsIAotICAgIDgsIDMsIDIxMSwgMTIyLCA4LCAzLCAyMTEsIDEyMywgOCwgMywgMjEwLCAyNTAsIDgsIDMsIDIxMCwgMjQ4LCA4LCAzLCAKLSAgICAyMTEsIDgsIDgsIDMsIDIxMCwgMjUxLCA4LCAzLCAyMTEsIDIsIDgsIDMsIDIxMSwgMSwgOCwgMywgMjExLCA1LCA4LCAzLCAKLSAgICAyMTEsIDMsIDgsIDMsIDIxMCwgMTkxLCA4LCAzLCAyMTAsIDE5MCwgOCwgMywgMjEwLCAxOTQsIDgsIDMsIDIxMCwgMTkyLCAKLSAgICA4LCAzLCAyMTAsIDIyNCwgOCwgMywgMjEwLCAyMjEsIDgsIDMsIDIxMCwgMjQ0LCA4LCAzLCAyMTAsIDIyOCwgOCwgMywgCi0gICAgMjEwLCAxODIsIDgsIDMsIDIxMCwgMTc4LCA4LCAzLCAyMTAsIDIxMiwgOCwgMywgMjEwLCAxODksIDgsIDMsIDIxMCwgMTg1LCAKLSAgICA4LCAzLCAyMTAsIDE4NiwgOCwgMywgMjEwLCAxNjIsIDgsIDMsIDIxMCwgMTYxLCA4LCAzLCAyMTAsIDE2OSwgOCwgMywgCi0gICAgMjEwLCAxNjUsIDgsIDMsIDIxMCwgMTYzLCA4LCAzLCAyMTAsIDE2NCwgOCwgMzQsIDIyNCwgMzMsIDgsIDM0LCAyMzIsIAotICAgIDI0MSwgOCwgMzQsIDIzNCwgNjEsIDgsIDM0LCAyMjcsIDE0MSwgOCwgMzQsIDI0OSwgNjksIDgsIDM0LCAyMTgsIDE5MiwgOCwgCi0gICAgMzQsIDI0MywgMTIsIDgsIDM0LCAyNDMsIDQ0LCA4LCAzNCwgMjMwLCAyMzAsIDgsIDM0LCAyNDAsIDE4MCwgOCwgMzQsIAotICAgIDIzMiwgNTYsIDgsIDM0LCAyNTIsIDgzLCA4LCAzNCwgMjMwLCAxMjYsIDgsIDM0LCAyMTAsIDI0NCwgOCwgMzQsIDIyNCwgCi0gICAgMTIxLCA4LCAzNCwgMjQwLCAxNzQsIDgsIDM0LCAyMTcsIDQ2LCA4LCAzNCwgMjQzLCAxMzUsIDgsIDM0LCAyMTAsIDUsIDgsIAotICAgIDM0LCAyNDksIDYzLCA4LCAzNCwgMjQ4LCA5NSwgOCwgMzQsIDI1MSwgOTgsIDgsIDM0LCAyNDMsIDgsIDgsIDM0LCAyMjcsIAotICAgIDEzMSwgOCwgMzQsIDIxNSwgMTE4LCA4LCAzNCwgMjI2LCAxNzUsIDgsIDM0LCAyMzUsIDc0LCA4LCAzNCwgMjEwLCAxOSwgOCwgCi0gICAgMzQsIDIyNCwgMTAwLCA4LCAzNCwgMjQxLCAxMDgsIDgsIDM0LCAyMTAsIDI1MCwgOCwgMzQsIDIxMiwgMTEyLCA4LCAzNCwgCi0gICAgMjE5LCAyMDAsIDgsIDM0LCAyMTMsIDI0NCwgOCwgMzQsIDIxMCwgMTE2LCA4LCAzNCwgMjM1LCA2OCwgOCwgMzQsIDIyNywgCi0gICAgOTYsIDgsIDM0LCAyMzUsIDcyLCA4LCAzNCwgMjQyLCAxNTQsIDgsIDM0LCAyMzUsIDkyLCA4LCAzNCwgMjExLCAyMjcsIDgsIAotICAgIDM0LCAyNDYsIDc4LCA4LCAzNCwgMjE5LCAyMTMsIDgsIDM0LCAyMzIsIDIzNiwgOCwgMzQsIDI0OSwgNzMsIDgsIDM0LCAKLSAgICAyNDksIDEwNSwgOCwgMzQsIDI1MCwgMzcsIDgsIDM0LCAyNDAsIDE3NywgOCwgMzQsIDIyMCwgNzIsIDgsIDM0LCAyMTAsIDQsIAotICAgIDgsIDM0LCAyMTksIDI1NCwgOCwgMzQsIDI1MCwgMTMxLCA4LCAzNCwgMjA5LCAyMzEsIDgsIDM0LCAyMjksIDE3MywgOCwgCi0gICAgMzQsIDIzNCwgMTgyLCAyMzIsIDE5NiwgMSwgMjUyLCAxOTEsIDIzMiwgMTk2LCAxLCAxOTAsIDIzMiwgMTk2LCAxLCAyMjUsIAotICAgIDE0NywgMjMyLCAxOTYsIDEsIDI0OCwgMjIxLCAyMzIsIDE5NiwgMSwgMjE3LCAxMDUsIDIzMiwgMTk2LCAxLCAyMTYsIDIwOCwgCi0gICAgMjMyLCAxOTYsIDEsIDI0MywgMTM1LCAyMzIsIDE5NiwgMSwgMTc2LCAyMzIsIDE5NiwgMSwgMjM0LCAxMzIsIDIzMiwgMTk2LCAKLSAgICAxLCAyMzUsIDE0MSwgMjMyLCAxOTYsIDEsIDI1MSwgMzMsIDIzMiwgMTk2LCAxLCAyNTAsIDE1NywgMjMyLCAxOTYsIDEsIAotICAgIDI0NiwgMzgsIDIzMiwgMTk2LCAxLCAyMTUsIDE4MywgMjMyLCAxOTYsIDEsIDIxNSwgMTc1LCAyMzIsIDE5NiwgMSwgMTg0LCAKLSAgICAyMzIsIDE5NiwgMSwgMTk3LCAyMzIsIDE5NiwgMSwgMjMzLCAxMzUsIDIzMiwgMTk2LCAxLCAyMDYsIDIzMiwgMTk2LCAxLCAKLSAgICAyMTAsIDgyLCAyMzIsIDE5NiwgMSwgMjEwLCAxMTYsIDIzMiwgMTk2LCAxLCAyMjksIDc3LCAyMzIsIDE5NiwgMSwgMTYyLCAKLSAgICAyMzIsIDE5NiwgMSwgMjExLCAxNjUsIDIzMiwgMTk2LCAxLCAyNDEsIDE4OSwgMjMyLCAxOTYsIDEsIDI0NCwgMTk2LCAyMzIsIAotICAgIDE5NiwgMSwgMjEyLCA2NSwgMjMyLCAxOTYsIDEsIDIyMCwgMTAyLCAyMzIsIDE5NiwgMSwgMTkxLCAyMzIsIDE5NiwgMSwgCi0gICAgMjQyLCAyNDksIDIzMiwgMTk2LCAxLCA2MSwgMjMyLCAxOTYsIDEsIDI1NCwgMjQzLCAyMzIsIDE5NiwgMSwgNzUsIDIzMiwgCi0gICAgMTk2LCAxLCAyNDUsIDU1LCAyMzIsIDE5NiwgMSwgNzMsIDIzMiwgMTk2LCAxLCA3NiwgMjMyLCAxOTYsIDEsIDcwLCAyMzIsIAotICAgIDE5NiwgMSwgMjE0LCAyMTQsIDIzMiwgMTk2LCAxLCAyMTQsIDIwOCwgMjMyLCAxOTYsIDEsIDIyNiwgMjM0LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAyMTYsIDExNywgMjMyLCAxOTYsIDEsIDEzOCwgMjI5LCAyMjksIDIyNSwgMTYsIDIzMiwgMTk2LCAKLSAgICAxLCAxMzgsIDIzMCwgMzIsIDI0OSwgNzIsIDIzMiwgMTk2LCAxLCAxMzgsIDIzMCwgMzIsIDI1MSwgMjA1LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAxOTcsIDIzMiwgMTk2LCAxLCAxMzgsIDIzMCwgMzIsIDIzNSwgMTE1LCAyMzIsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDI0OSwgMjE5LCAyMzIsIDE5NiwgMjI0LCAxNDEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNDEsIDMsIDI0NSwgMjA5LCAKLSAgICA0MSwgMywgMjQ1LCAyMDUsIDQxLCAzLCAyNDEsIDIyMCwgNDEsIDMsIDIxMiwgMTcsIDQxLCAzLCAyMTIsIDE2LCA0MSwgMywgCi0gICAgMjI1LCAyMTEsIDQxLCAzLCAyNTIsIDEzLCA0MSwgMywgMjUyLCA2NiwgNDEsIDMsIDIzMSwgMTE2LCA0MSwgMywgMjMzLCAKLSAgICAyNDcsIDQxLCAzLCAyMzEsIDYsIDQxLCAzLCAyNDMsIDc1LCA0MSwgMywgMjQ0LCAxNDcsIDQxLCAzLCAyMTMsIDI1MCwgNDEsIAotICAgIDMsIDIxNywgMTEsIDQxLCAzLCAyMTYsIDE5NCwgNDEsIDMsIDI0OCwgMTYsIDQxLCAzLCAyNDgsIDEzLCA0MSwgMywgMjMzLCAKLSAgICA1MCwgNDEsIDMsIDIyMywgMTA4LCA0MSwgMywgMjQ4LCA3NywgNDEsIDMsIDIyOSwgMTM5LCA0MSwgMywgMjIxLCAxNzAsIAotICAgIDQxLCAzLCAyMjAsIDYxLCA0MSwgMywgMjEwLCA5MiwgNDEsIDMsIDIxMCwgNzMsIDQxLCAzLCAyNTAsIDE4MiwgNDEsIDMsIAotICAgIDIzNSwgMTI0LCA0MSwgMywgMjI4LCAxNzYsIDQxLCAzLCAyMTEsIDQ0LCA0MSwgMywgMjM0LCAxODEsIDQxLCAzLCAyMjksIAotICAgIDUxLCA0MSwgMywgMjQzLCA1NSwgNDEsIDMsIDIzMSwgODAsIDQxLCAzLCAyMjksIDEwMywgNDEsIDMsIDIyNywgMTU1LCA0MSwgCi0gICAgMywgNzMsIDQxLCAzLCAyMzUsIDI1NSwgNDEsIDMsIDI0MSwgMTgwLCA0MSwgMywgMjQxLCAxNjAsIDQxLCAzLCAyMTEsIAotICAgIDI1MCwgNDEsIDMsIDIxMSwgMjQxLCA0MSwgMywgMjI1LCAxMDgsIDQxLCAzLCAyNTIsIDExLCA0MSwgMywgMjUyLCA2LCA0MSwgCi0gICAgMywgMjMxLCAxMDksIDQxLCAzLCAyMzMsIDI0NCwgNDEsIDMsIDIzMSwgMywgNDEsIDMsIDI0MywgNzEsIDQxLCAzLCAyNDQsIAotICAgIDEyMSwgNDEsIDMsIDIxMywgMTc2LCA0MSwgMywgMjE2LCAxMTcsIDQxLCAzLCAyMTYsIDE3NSwgNDEsIDMsIDI0OCwgOCwgCi0gICAgNDEsIDMsIDI0OCwgMTIsIDQxLCAzLCAyMzIsIDI0MSwgNDEsIDMsIDIyMywgMzUsIDQxLCAzLCAyNDgsIDMsIDQxLCAzLCAKLSAgICAyMjksIDEzMywgNDEsIDMsIDIxOSwgMTkxLCA0MSwgMywgMjIwLCAzMiwgNDEsIDMsIDIxMCwgNDQsIDQxLCAzLCAyMTAsIAotICAgIDY5LCA0MSwgMywgMjUwLCA1MSwgNDEsIDMsIDIzNSwgMTA4LCA0MSwgMywgMjI4LCAxNjksIDQxLCAzLCAyMTEsIDgsIDQxLCAKLSAgICAzLCAyMzQsIDkyLCA0MSwgMywgMjI5LCA0MywgNDEsIDMsIDI0MiwgMjE0LCA0MSwgMywgMjMwLCAyMzAsIDQxLCAzLCAyMjgsIAotICAgIDIzMywgNDEsIDMsIDIyNywgMTQ4LCA0MSwgMywgNjEsIDQxLCAzLCAyNTQsIDEyMywgNDEsIDMsIDIyOSwgNzIsIDQxLCAzLCAKLSAgICAxNjIsIDQxLCAzLCAyNDIsIDE4LCA0MSwgMywgMjEyLCA2NSwgNDEsIDMsIDIxMiwgNTUsIDQxLCAzLCAxOTAsIDQxLCAzLCAKLSAgICAyNTIsIDE4LCA0MSwgMywgMjUyLCAxOTEsIDQxLCAzLCAyMzEsIDEyNCwgNDEsIDMsIDIzMywgMjUxLCA0MSwgMywgMjMzLCAKLSAgICAyNTAsIDQxLCAzLCAyMzEsIDEwLCA0MSwgMywgMjQzLCA3OSwgNDEsIDMsIDI0NCwgMTk2LCA0MSwgMywgMjE0LCAyNywgNDEsIAotICAgIDMsIDIxNywgMTA1LCA0MSwgMywgMjE2LCAyMDgsIDQxLCAzLCAyNDgsIDI1LCA0MSwgMywgMjQ4LCAxNSwgNDEsIDMsIDIzMywgCi0gICAgMTM1LCA0MSwgMywgMjA1LCA0MSwgMywgMjQ4LCAyMjEsIDQxLCAzLCAyMjksIDE0OCwgNDEsIDMsIDIwNiwgNDEsIDMsIAotICAgIDIyMCwgMTAyLCA0MSwgMywgMjEwLCAxMTYsIDQxLCAzLCAyMTAsIDgyLCA0MSwgMywgMjUxLCAzMywgNDEsIDMsIDIzNSwgCi0gICAgMTQxLCA0MSwgMywgMjI4LCAxODUsIDQxLCAzLCAxOTEsIDQxLCAzLCAxNzYsIDQxLCAzLCAyMzQsIDIzNCwgNDEsIDMsIAotICAgIDIyOSwgNTYsIDQxLCAzLCAyNDMsIDEzNSwgNDEsIDMsIDE4NCwgNDEsIDMsIDE5NywgNDEsIDMsIDIyNywgMTY1LCA0MSwgMywgCi0gICAgMjI2LCAxODMsIDQxLCAzLCAyMjYsIDE3OSwgNDEsIDMsIDI0MSwgNTMsIDQxLCAzLCAyMTEsIDIxNSwgNDEsIDMsIDIxMSwgCi0gICAgMjExLCA0MSwgMywgMjI0LCAyNDksIDQxLCAzLCAyNTIsIDksIDQxLCAzLCAyNTEsIDE5MywgNDEsIDMsIDIzMSwgMTA0LCAKLSAgICA0MSwgMywgMjMzLCAyNDIsIDQxLCAzLCAyMzAsIDI1NSwgNDEsIDMsIDI0MywgNjcsIDQxLCAzLCAyNDQsIDM0LCA0MSwgMywgCi0gICAgMjEzLCAxMjcsIDQxLCAzLCAyMTYsIDE3LCA0MSwgMywgMjE2LCAxNTMsIDQxLCAzLCAyNDgsIDYsIDQxLCAzLCAyNDgsIDEwLCAKLSAgICA0MSwgMywgMjMyLCAxMjcsIDQxLCAzLCAyMjIsIDE5NywgNDEsIDMsIDI0NywgMTI1LCA0MSwgMywgMjI5LCAxMjAsIDQxLCAKLSAgICAzLCAyMTksIDQwLCA0MSwgMywgMjIwLCAxLCA0MSwgMywgMjEwLCAyMSwgNDEsIDMsIDIxMCwgNjYsIDQxLCAzLCAyNDksIAotICAgIDE3NCwgNDEsIDMsIDIzNSwgNTksIDQxLCAzLCAyMjgsIDE1OSwgNDEsIDMsIDIxMCwgMjI5LCA0MSwgMywgMjM0LCAxMCwgCi0gICAgNDEsIDMsIDIyOSwgNDEsIDQxLCAzLCAyNDIsIDE2NCwgNDEsIDMsIDIzMCwgMTMyLCA0MSwgMywgMjI4LCA2NCwgNDEsIDMsIAotICAgIDIyNywgMTMyLCA0MSwgMywgNzAsIDQxLCAzLCAyMTQsIDE5MCwgNDEsIDMsIDI0MCwgMjIyLCA0MSwgMywgMjQwLCAyMTIsIAotICAgIDQxLCAzLCAyMTEsIDE5NSwgNDEsIDMsIDIxMSwgMTg5LCA0MSwgMywgMjI0LCAxNTAsIDQxLCAzLCAyNTIsIDgsIDQxLCAzLCAKLSAgICAyNTEsIDEyNSwgNDEsIDMsIDIzMSwgMTAzLCA0MSwgMywgMjMzLCAyNDAsIDQxLCAzLCAyMzAsIDI1NCwgNDEsIDMsIDI0MywgCi0gICAgNjYsIDQxLCAzLCAyNDMsIDIzNCwgNDEsIDMsIDIxMiwgMTE2LCA0MSwgMywgMjE1LCAxMTgsIDQxLCAzLCAyMTYsIDEzNiwgCi0gICAgNDEsIDMsIDI0OCwgNCwgNDEsIDMsIDI0OCwgOSwgNDEsIDMsIDIzMiwgOTgsIDQxLCAzLCAyMjIsIDE0MCwgNDEsIDMsIAotICAgIDI0NiwgNzgsIDQxLCAzLCAyMjksIDExNSwgNDEsIDMsIDIxOCwgODMsIDQxLCAzLCAyMTksIDIyNSwgNDEsIDMsIDIxMCwgCi0gICAgMTMsIDQxLCAzLCAyMTAsIDYyLCA0MSwgMywgMjQ5LCAxMTIsIDQxLCAzLCAyMzUsIDUxLCA0MSwgMywgMjI4LCAxNTUsIDQxLCAKLSAgICAzLCAyMTAsIDIxMiwgNDEsIDMsIDIzMywgMjE3LCA0MSwgMywgMjI5LCA0MCwgNDEsIDMsIDI0MiwgMTEzLCA0MSwgMywgCi0gICAgMjMwLCAxMDIsIDQxLCAzLCAyMjcsIDIzNywgNDEsIDMsIDIyNywgMTI4LCA0MSwgMywgNzYsIDQxLCAzLCAyMjYsIDE5NiwgCi0gICAgNDEsIDMsIDIyOSwgMCwgNDEsIDMsIDI0MSwgNjgsIDQxLCAzLCAyNDEsIDU2LCA0MSwgMywgMjExLCAyMjcsIDQxLCAzLCAKLSAgICAyMTEsIDIxNiwgNDEsIDMsIDIyNSwgMTYsIDQxLCAzLCAyNTIsIDEwLCA0MSwgMywgMjUxLCAyMDUsIDQxLCAzLCAyMzEsIAotICAgIDEwNSwgNDEsIDMsIDIzMywgMjQzLCA0MSwgMywgMjMxLCAxLCA0MSwgMywgMjQzLCA2OSwgNDEsIDMsIDI0MywgNjgsIDQxLCAKLSAgICAzLCAyNDQsIDQzLCA0MSwgMywgMjEzLCAxMzgsIDQxLCAzLCAxMTEsIDQxLCAzLCAyMTYsIDE1NiwgNDEsIDMsIDI0OCwgNywgCi0gICAgNDEsIDMsIDI0OCwgMTEsIDQxLCAzLCAyMzIsIDE1NiwgNDEsIDMsIDIyMiwgMjExLCA0MSwgMywgMjQ3LCAxNDUsIDQxLCAzLCAKLSAgICAyMjksIDEyNCwgNDEsIDMsIDIxOSwgNTgsIDQxLCAzLCAyMjAsIDcsIDQxLCAzLCAyMTAsIDIzLCA0MSwgMywgMjEwLCA2NywgCi0gICAgNDEsIDMsIDI0OSwgMjM4LCA0MSwgMywgMjM1LCA2OCwgNDEsIDMsIDIyOCwgMTYwLCA0MSwgMywgMjEwLCAyNDQsIDQxLCAzLCAKLSAgICAyMzQsIDI4LCA0MSwgMywgMjI5LCA0MiwgNDEsIDMsIDI0MiwgMTc0LCA0MSwgMywgMjMwLCAxNjEsIDQxLCAzLCAyMjgsIAotICAgIDc0LCA0MSwgMywgMjI3LCAxMzQsIDQxLCAzLCA3NSwgNDEsIDMsIDI0NSwgMTUwLCA0MSwgMywgMjI5LCA2MSwgNDEsIDMsIAotICAgIDI0MSwgMjM4LCA0MSwgMywgMjQxLCAyMDksIDQxLCAzLCAyMTIsIDIyLCA0MSwgMywgMjEyLCAxMiwgNDEsIDMsIDIyNSwgCi0gICAgMjIxLCA0MSwgMywgMjUyLCAxNCwgNDEsIDMsIDI1MiwgNzUsIDQxLCAzLCAyMzEsIDExNywgNDEsIDMsIDIzMywgMjQ4LCAKLSAgICA0MSwgMywgMjMzLCAyNDYsIDQxLCAzLCAyMzEsIDcsIDQxLCAzLCAyNDMsIDc2LCA0MSwgMywgMjQzLCA3NCwgNDEsIDMsIAotICAgIDI0NCwgMTU0LCA0MSwgMywgMjEzLCAyNTUsIDQxLCAzLCAyMTcsIDIyLCA0MSwgMywgMjE2LCAxOTUsIDQxLCAzLCAyNDgsIAotICAgIDE3LCA0MSwgMywgMjQ4LCAxNCwgNDEsIDMsIDIzMywgNTgsIDQxLCAzLCAyMjMsIDEyOCwgNDEsIDMsIDI0OCwgOTAsIDQxLCAKLSAgICAzLCAyMjksIDE0MCwgNDEsIDMsIDIyMSwgMTgxLCA0MSwgMywgMjIwLCA2MywgNDEsIDMsIDIxMCwgOTQsIDQxLCAzLCAyMTAsIAotICAgIDc0LCA0MSwgMywgMjUwLCAxOTAsIDQxLCAzLCAyMzUsIDEyNiwgNDEsIDMsIDIyOCwgMTc4LCA0MSwgMywgMjExLCA0NywgCi0gICAgNDEsIDMsIDIzNCwgMTgyLCA0MSwgMywgMjI5LCA1MiwgNDEsIDMsIDIyOSwgNDgsIDQxLCAzLCAyNDMsIDYyLCA0MSwgMywgCi0gICAgMjQzLCA1MSwgNDEsIDMsIDIzMSwgOTEsIDQxLCAzLCAyMjksIDEwNywgNDEsIDMsIDIyNywgMTU2LCA0MSwgMywgMjI5LCAKLSAgICA3OSwgNDEsIDMsIDIzMywgMjIsIDQxLCAyNDksIDIxOSwgNDEsIDI0MywgMjI5LCAyMTgsIDEyOSwgNDEsIDIyNCwgMTMsIAotICAgIDc4LCA0MSwgMywgMjI5LCAxMjMsIDI0NCwgMTk2LCA0MSwgMywgMjI5LCAxMjMsIDE3NiwgNDEsIDMsIDIyOSwgMTIzLCAKLSAgICAyMTksIDQwLCA0MSwgMTYsIDI0NCwgMTQ0LCA0MSwgMTYsIDIzNCwgMTgwLCA0MSwgMTYsIDIxNiwgODEsIDQxLCAxNiwgCi0gICAgMjI4LCAyMDgsIDQxLCAxNiwgMjUyLCAxNDcsIDQxLCAxNiwgMjQ0LCAxOTUsIDQxLCAxNiwgMjE3LCAxMDEsIDQxLCAxNiwgCi0gICAgMjQ4LCAxNzYsIDQxLCAxNiwgMjQ3LCAxMjQsIDQxLCAxNiwgMjMzLCAyMDYsIDQxLCAxNiwgMjE2LCAyMSwgNDEsIDE2LCAKLSAgICAyNDcsIDE0NCwgNDEsIDE2LCAyMzUsIDYwLCA0MSwgMjEsIDIxMCwgODYsIDQxLCAyMSwgMTEwLCA0MSwgMjEsIDEwNSwgNDEsIAotICAgIDIxLCAxNTgsIDQxLCAyMSwgMTYxLCA0MSwgMjEsIDE4OSwgNDEsIDIxLCAxOTQsIDQxLCAyMSwgMTk4LCA0MSwgMjEsIDE5NSwgCi0gICAgNDEsIDIxLCAyMDAsIDQxLCAzLCAyMjksIDEyMywgMTg0LCA0MSwgMywgMjI5LCAxMjMsIDI0NywgMTQ1LCAzMywgNiwgMSwgCi0gICAgMjEwLCA5MCwgMzMsIDQsIDEsIDIxMCwgOTAsIDMzLCA2LCAxLCAyNDYsIDM0LCAzMywgNCwgMSwgMjQ2LCAzNCwgMzMsIDYsIAotICAgIDEsIDIyMywgNDksIDI0NiwgMzYsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyNDYsIDM2LCAzMywgNiwgMSwgMjM1LCAxODUsIDMzLCAKLSAgICA0LCAxLCAyMzUsIDE4NSwgMzMsIDYsIDEsIDI0NywgMTYxLCAzMywgNCwgMSwgMjQ3LCAxNjEsIDMzLCA2LCAxLCAyMzAsIAotICAgIDE0MCwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMzAsIDE0MCwgMjE0LCAyMDUsIDMzLCA2LCAxLCAyNTEsIDEzNiwgMjI2LCAKLSAgICAyMDEsIDMzLCA0LCAxLCAyNTEsIDEzNiwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMjksIDg3LCAyMTEsIDMxLCAzMywgNCwgMSwgCi0gICAgMjI5LCA4NywgMjExLCAzMSwgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIDI1MiwgMTg1LCAyMTEsIDMxLCAzMywgNCwgMSwgMjExLCAKLSAgICAyOCwgMiwgMjUyLCAxODUsIDIxMSwgMzEsIDMzLCA2LCAxLCAyMzUsIDE4MywgMjExLCA1OSwgMzMsIDQsIDEsIDIzNSwgCi0gICAgMTgzLCAyMTEsIDU5LCAzMywgNiwgMSwgMjIzLCA0OSwgMjEwLCAyMTIsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyMTAsIDIxMiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTgzLCA2MSwgMzMsIDQsIDEsIDIzNSwgMTgzLCA2MSwgMzMsIDYsIDEsIDI1MCwgMCwgMjMyLCAKLSAgICAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUwLCAwLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTEsIDIxNCwgCi0gICAgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDIxNCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgMjUwLCAwLCAyMzIsIAotICAgIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjUwLCAwLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAKLSAgICAyMTAsIDI0NiwgMzMsIDQsIDEsIDIxMCwgMjQ2LCAzMywgNiwgMSwgMjIzLCA0OSwgMjE1LCAxNzgsIDMzLCA0LCAxLCAyMjMsIAotICAgIDQ5LCAyMTUsIDE3OCwgMzMsIDYsIDEsIDIxOSwgNTIsIDI0OCwgOTAsIDMzLCA0LCAxLCAyMTksIDUyLCAyNDgsIDkwLCAzMywgCi0gICAgNiwgMSwgMjE5LCA1MiwgMjQ1LCAxNzQsIDMzLCA0LCAxLCAyMTksIDUyLCAyNDUsIDE3NCwgMzMsIDYsIDEsIDIxOSwgNTIsIAotICAgIDI0NSwgMTU5LCAzMywgNCwgMSwgMjE5LCA1MiwgMjQ1LCAxNTksIDMzLCA2LCAxLCAyMzAsIDE0NCwgNzYsIDMzLCA0LCAxLCAKLSAgICAyMzAsIDE0NCwgNzYsIDMzLCA2LCAxLCAyNTEsIDI0MCwgNzYsIDMzLCA0LCAxLCAyNTEsIDI0MCwgNzYsIDMzLCA2LCAxLCAKLSAgICA1MiwgMjMwLCAxNDQsIDc2LCAzMywgNCwgMSwgNTIsIDIzMCwgMTQ0LCA3NiwgMzMsIDEsIDIzMCwgODYsIDc2LCAzOCwgMzMsIAotICAgIDIxMiwgMTAwLCAzOCwgMzMsIDIxNiwgMjQ4LCAyMzAsIDE5MSwgNTAsIDM4LCAzMywgMjQwLCAyMTEsIDIzMCwgMTkxLCA1MCwgCi0gICAgMzgsIDMzLCAyMTYsIDE0OCwgMjMwLCAxOTEsIDUwLCAyMTksIDkzLCAyNTMsIDIxNiwgMzgsIDMzLCAxLCAyMTQsIDIwMiwgCi0gICAgMjM2LCA2MCwgMzgsIDMzLCAxLCA3MywgMzgsIDMzLCAxLCAyMTEsIDgsIDM4LCAzMywgMSwgNzAsIDM4LCAzMywgMSwgMjQyLCAKLSAgICAzLCA1MCwgMzgsIDMzLCAxLCAyMTEsIDI3LCAzOCwgMzMsIDEsIDIxOSwgNTIsIDUwLCAzOCwgMzMsIDEsIDIyNiwgMjAxLCAKLSAgICAzOCwgMzMsIDIzNCwgMTkyLCAzOCwgMzMsIDIyNSwgMjI3LCAzMywgMjM0LCAxOTIsIDMzLCAyMjUsIDIyNywgMzMsIDYsIDEsIAotICAgIDI0NiwgNDYsIDMzLCA0LCAxLCAyNDYsIDQ2LCAzMywgNiwgMSwgMjQ2LCAyNywgMzMsIDQsIDEsIDI0NiwgMjcsIDMzLCA2LCAKLSAgICAxLCAyMTAsIDUyLCAzMywgNCwgMSwgMjEwLCA1MiwgMzMsIDYsIDEsIDI1MCwgMjA2LCAzMywgNCwgMSwgMjUwLCAyMDYsIAotICAgIDMzLCA2LCAxLCAyNDYsIDI1LCAzMywgNCwgMSwgMjQ2LCAyNSwgMzMsIDYsIDEsIDIxNywgMjMsIDIsIDIzMCwgMjI0LCAKLSAgICAxMDMsIDMzLCA0LCAxLCAyMTcsIDIzLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjE1LCA3OCwgMzMsIDQsIDEsIAotICAgIDIxNSwgNzgsIDMzLCA2LCAxLCAyMTUsIDE2MCwgMzMsIDQsIDEsIDIxNSwgMTYwLCAzMywgNiwgMSwgMjE1LCAxNjQsIDMzLCAKLSAgICA0LCAxLCAyMTUsIDE2NCwgMzMsIDYsIDEsIDIxNywgMjgsIDMzLCA0LCAxLCAyMTcsIDI4LCAzMywgNiwgMSwgMjQwLCAxOTgsIAotICAgIDMzLCA0LCAxLCAyNDAsIDE5OCwgMzMsIDYsIDEsIDIxOSwgMjA2LCAzMywgNCwgMSwgMjE5LCAyMDYsIDM4LCAzMywgMSwgCi0gICAgMjM1LCAxODMsIDc1LCAyMCwgMSwgNjEsIDIwLCAxLCAxNzYsIDIwLCAxLCA3MCwgMjAsIDEsIDIzMywgMjE3LCAyMCwgMSwgCi0gICAgMjQ1LCAyMDksIDIwLCAxLCAyMjMsIDEwOCwgMjAsIDEsIDIxNywgODYsIDIwLCAxLCA3NiwgMjAsIDEsIDIyNywgMTQ4LCAKLSAgICAyMCwgMSwgNzMsIDIwLCAxLCAyMzMsIDEzNSwgMjAsIDEsIDE5MCwgMjAsIDEsIDIyMiwgMjM5LCAyMCwgMSwgMjIzLCAyOSwgCi0gICAgMjAsIDEsIDIzMywgNDksIDIwLCAxLCAyMzEsIDc5LCAyMCwgMSwgMjE3LCAxMDEsIDIwLCAxLCAyMjksIDE0NiwgMjAsIDEsIAotICAgIDIyOCwgMTgzLCAyMCwgMSwgMTkzLCAyMCwgMSwgMjE4LCA0LCAyMCwgMSwgMjMwLCAxMDIsIDIwLCAxLCAyMjAsIDI3LCAyMCwgCi0gICAgMSwgMjE5LCAxOTEsIDIwLCAxLCAyMjAsIDM3LCAyMCwgMSwgMjIwLCAxMjMsIDIwLCAxLCAyMzMsIDE1NSwgMjAsIDEsIAotICAgIDIzNCwgMTU2LCAyMCwgMSwgMjI3LCAyMDksIDIwLCAxLCAyMjcsIDIzNywgMjAsIDEsIDIyOCwgMTU0LCAyMCwgMSwgMjEwLCAKLSAgICAyMjYsIDIwLCAxLCAyMTksIDIyNSwgMjAsIDEsIDIxMCwgMTg3LCAyMCwgMSwgMTkxLCAyMCwgMSwgMjI4LCA5LCAyMCwgMSwgCi0gICAgMjM0LCAxNDIsIDIwLCAxLCAyMjUsIDE1MSwgMjAsIDEsIDIyOCwgMTc2LCAyMCwgMSwgMjI3LCAyNDYsIDIwLCAxLCAyMjQsIAotICAgIDE0NCwgMjAsIDEsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAyMTEsIDIwLCAxLCAyNDQsIDE0NywgMjAsIDEsIDIyMiwgMTQwLCAKLSAgICAyMCwgMSwgMjMyLCA5OCwgMjAsIDEsIDIzMCwgMjMwLCAyMCwgMSwgMjI4LCAyMzMsIDIwLCAxLCAyMjMsIDUxLCAyMCwgMSwgCi0gICAgMjIzLCAxNzEsIDIwLCAxLCAyMzQsIDE2NSwgMjAsIDEsIDIyOSwgNywgMjAsIDEsIDIyOSwgNTYsIDIwLCAxLCAyMjksIDc3LCAKLSAgICAyMCwgMSwgMjIwLCA3LCAyMCwgMSwgMjI0LCAxNDcsIDIwLCAxLCAyNDMsIDIzNCwgMjAsIDEsIDI0NCwgMzcsIDIwLCAxLCAKLSAgICAyMTIsIDY1LCAyMCwgMSwgMTk3LCAyMCwgMSwgMjMyLCAyNDEsIDIwLCAxLCAyMjUsIDEwOCwgMjAsIDEsIDIzMiwgMTE5LCAKLSAgICAyMCwgMSwgMjM0LCAyOCwgMjAsIDEsIDIzMSwgMTE0LCAyMCwgMSwgMjIzLCA4MywgMjAsIDEsIDIzMSwgNTgsIDIwLCAxLCAKLSAgICAxODQsIDIwLCAxLCAyMTYsIDExNywgMjAsIDEsIDIzNCwgOTIsIDIwLCAxLCAyMzAsIDE2MSwgMjAsIDEsIDIzMSwgMTIyLCAKLSAgICAyMCwgMSwgMjE2LCAyMzAsIDIwLCAxLCAyMzMsIDI1MSwgMjAsIDEsIDIxNiwgMjQ3LCAyMCwgMSwgMjI3LCAyMzgsIDIwLCAKLSAgICAxLCAyMjEsIDI1MSwgMjAsIDEsIDI0NCwgMTkyLCAyMCwgMSwgMjMzLCAyNTMsIDIwLCAxLCAyMzQsIDI0LCAyMCwgMzgsIAotICAgIDE2NCwgMjM0LCA1LCAyMCwgMzgsIDE2NCwgMjE1LCAxMTAsIDIwLCAyMjgsIDE4MiwgMjAsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgMjAsIDI0OSwgMjI2LCAyMCwgMjQ5LCAyMTksIDIwLCAyMjAsIDE1MCwgMjAsIDIyNCwgMTMsIDc4LCA1OCwgMSwgMjUwLCAKLSAgICA5NiwgMTM4LCAyMTAsIDI1NCwgMjI1LCA2MSwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjExLCA3MCwgMjI1LCA2MSwgNTgsIDEsIAotICAgIDI1MCwgOTYsIDEzOCwgMjEwLCAyNTQsIDIyMCwgODQsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMSwgNzAsIDIyMCwgODQsIAotICAgIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjQsIDMwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTEsIDcwLCAKLSAgICAyMjQsIDMwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTAsIDI1NCwgMjIyLCAxNDAsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIAotICAgIDIxMSwgNzAsIDIyMiwgMTQwLCA1OCwgMSwgMjQ1LCAyMCwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIAotICAgIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDExOCwgCi0gICAgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyNDYsIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDIwLCAyNDYsIDExOCwgCi0gICAgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgCi0gICAgMjI1LCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIAotICAgIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjAsIDIzMywgCi0gICAgMzksIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjI1LCAyMzMsIDM5LCAKLSAgICAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyMzMsIDM5LCAxMzgsIAotICAgIDEzMCwgNTgsIDEsIDU5LCA2NywgMTMwLCA1OCwgMSwgNTksIDIxOSwgOTUsIDU4LCAxLCA1OSwgMjAzLCAxMzAsIDU4LCAxLCAKLSAgICAyMzIsIDEwOCwgNDQsIDI0OSwgMTYxLCAyNTQsIDEwOSwgNTgsIDEsIDIyMywgMTU3LCAxMjAsIDc0LCA1OCwgMSwgMjIzLCAKLSAgICAxNTcsIDEyNCwgNzQsIDU4LCAxLCAyMjMsIDE1NywgMjQ1LCAzMSwgNzgsIDU4LCAxLCAyMjMsIDE1NywgMjM1LCAxOTMsIAotICAgIDI0NSwgMzEsIDc4LCA1OCwgMSwgMTIxLCAyMzUsIDE5MywgMjQ1LCAzMSwgNzgsIDU4LCAxLCAyMTgsIDExMSwgMjIsIDEyNSwgCi0gICAgMjE2LCAzMCwgNTgsIDEsIDIxOCwgMTExLCAyMiwgMTIxLCAyMTYsIDMwLCA3LCA2LCAxLCAyNDUsIDE5OSwgMjU0LCAxNzAsIAotICAgIDcsIDQsIDEsIDI0NSwgMTk5LCAyNTQsIDE3MCwgNywgNiwgMSwgMjQ1LCAxOTksIDI1NCwgMTk2LCA3LCA0LCAxLCAyNDUsIAotICAgIDE5OSwgMjU0LCAxOTYsIDcsIDYsIDEsIDI0MSwgMjA3LCA3LCA0LCAxLCAyNDEsIDIwNywgNywgNiwgMSwgMjE1LCA0MCwgNywgCi0gICAgNCwgMSwgMjE1LCA0MCwgNywgNiwgMSwgMjE1LCAyMjksIDcsIDQsIDEsIDIxNSwgMjI5LCA3LCA2LCAxLCAyNDksIDExMCwgCi0gICAgNywgNCwgMSwgMjQ5LCAxMTAsIDcsIDYsIDEsIDI0OSwgMTExLCAyLCAyNDksIDIxOSwgNywgNCwgMSwgMjQ5LCAxMTEsIDIsIAotICAgIDI0OSwgMjE5LCA3LCAxLCA0LCA2LCAyNDUsIDYsIDcsIDEsIDQsIDYsIDIyMiwgOTEsIDcsIDYsIDEsIDI1NSwgNzMsIDcsIAotICAgIDQsIDEsIDI1NSwgNzMsIDcsIDYsIDEsIDI1NCwgNzMsIDcsIDQsIDEsIDI1NCwgNzMsIDcsIDYsIDEsIDI1MywgMTkyLCA3LCAKLSAgICA0LCAxLCAyNTMsIDE5MiwgNywgNiwgMSwgMjUzLCAxNzYsIDcsIDQsIDEsIDI1MywgMTc2LCA3LCA2LCAxLCAyNTMsIDE3NywgCi0gICAgMiwgMjAzLCAxMzAsIDcsIDQsIDEsIDI1MywgMTc3LCAyLCAyMDMsIDEzMCwgNywgNiwgMSwgMjUzLCAxNjcsIDcsIDQsIDEsIAotICAgIDI1MywgMTY3LCA3LCA2LCAxLCAyMjMsIDQ5LCAyNTEsIDY3LCAyLCAyNDcsIDEyMCwgNywgNCwgMSwgMjIzLCA0OSwgMjUxLCAKLSAgICA2NywgMiwgMjQ3LCAxMjAsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCA5MSwgNywgNiwgCi0gICAgMSwgMjM1LCAyNCwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIDEsIAotICAgIDIzNSwgMjQsIDIsIDIxOCwgMTAzLCAyMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyMTgsIDEwMywgCi0gICAgMjIsIDI0NywgMjU1LCA5MSwgNywgNiwgMSwgMjUxLCAxMzUsIDE1NiwgNywgNCwgMSwgMjUxLCAxMzUsIDE1NiwgNywgNiwgCi0gICAgMSwgMjMzLCAxNDksIDIsIDEyNSwgOTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDE5OSwgMjE4LCAxMDMsIDIyNiwgMTIwLCA3LCA0LCAxLCAxNDQsIDIsIDE5OSwgMjE4LCAxMDMsIDIyNiwgMTIwLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDIzMiwgMTIzLCA3LCA0LCAxLCAxNDQsIDIsIDIzMiwgMTIzLCA3LCA2LCAxLCAyMjYsIDE4MywgNywgNCwgCi0gICAgMSwgMjI2LCAxODMsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDQsIDEsIAotICAgIDIyNiwgMTA2LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyNDQsIDUzLCAKLSAgICA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjQ0LCA1MywgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDIxOCwgMjI5LCAyMTcsIDc3LCAKLSAgICA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjE4LCAyMjksIDIxNywgNzcsIDcsIDYsIDEsIDIyNCwgOTcsIDIsIDIxOCwgMTAzLCAKLSAgICAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgMjI0LCA5NywgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCAKLSAgICA2LCAxLCAyMjQsIDk3LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDI0NywgMjU1LCA5MSwgNywgNiwgCi0gICAgMSwgMjIzLCAyMjQsIDIyMiwgMTg2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMjIyLCAxODYsIDcsIDYsIDEsIDIyMiwgMTMwLCAKLSAgICAyMjIsIDE4NiwgNywgNCwgMSwgMjIyLCAxMzAsIDIyMiwgMTg2LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMjQ3LCAyNTUsIAotICAgIDkxLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAxLCAyMTIsIDEwNiwgNywgNCwgMSwgMjEyLCAKLSAgICAxMDYsIDcsIDYsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNCwgMSwgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA2LCAxLCAKLSAgICAyMTYsIDE1MiwgMiwgOTEsIDcsIDQsIDEsIDIxNiwgMTUyLCAyLCA5MSwgNywgNiwgMSwgMjE2LCAxNTIsIDIsIDIxOCwgCi0gICAgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgMjE2LCAxNTIsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAKLSAgICAzOSwgNywgNiwgMSwgMjEzLCAyNDUsIDcsIDQsIDEsIDIxMywgMjQ1LCA3LCA2LCAxLCAyNDUsIDY1LCA3LCA0LCAxLCAyNDUsIAotICAgIDY1LCA3LCA2LCAxLCAyMzUsIDE3MSwgNywgNCwgMSwgMjM1LCAxNzEsIDcsIDYsIDEsIDI0OSwgMjA3LCA3LCA0LCAxLCAKLSAgICAyNDksIDIwNywgNTgsIDEsIDIxNCwgMTMzLCA3LCA0LCAxLCAyNDYsIDY5LCA3LCA0LCAxLCAyMzIsIDg0LCA3LCA0LCAxLCAKLSAgICAyMzAsIDgwLCA3LCA0LCAxLCAyMjcsIDIwMSwgNywgNCwgMSwgMjIyLCAxMjksIDcsIDEsIDQsIDYsIDIyMiwgMTI5LCA3LCAKLSAgICA0LCAxLCAyMTUsIDEwOCwgNywgNCwgMSwgMjE0LCAxOTcsIDcsIDYsIDEsIDIzNSwgMjEzLCAyNDksIDYwLCA3LCA0LCAxLCAKLSAgICAyMzUsIDIxMywgMjQ5LCA2MCwgNywgNiwgMSwgMjM1LCAyMTMsIDI0NSwgNiwgNywgNCwgMSwgMjM1LCAyMTMsIDI0NSwgNiwgCi0gICAgNywgNiwgMSwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA2LCAxLCAyMTUsIDk0LCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNiwgMSwgMjE1LCA5NCwgMTU2LCA3LCA0LCAxLCAyMTUsIDk0LCAKLSAgICAxNTYsIDcsIDYsIDEsIDIzNSwgMjEzLCAxNTMsIDcsIDQsIDEsIDIzNSwgMjEzLCAxNTMsIDcsIDYsIDEsIDIzNSwgMjEzLCAKLSAgICAyMjIsIDkxLCA3LCA0LCAxLCAyMzUsIDIxMywgMjIyLCA5MSwgNywgNiwgMSwgMjM1LCAyMTMsIDIxNywgMTUyLCA3LCA0LCAKLSAgICAxLCAyMzUsIDIxMywgMjE3LCAxNTIsIDU4LCAxLCAxMjEsIDI1MCwgMzEsIDI1NSwgMTQsIDU4LCAxLCAyNDksIDIyNiwgNTgsIAotICAgIDEsIDIxOSwgMjUxLCAyNDUsIDk4LCA1MCwgNywgNiwgMSwgMjIxLCAyNTUsIDcsIDQsIDEsIDIyMSwgMjU1LCA3LCA2LCAxLCAKLSAgICAyMTUsIDk0LCAyNDIsIDYwLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjIzLCA1NSwgMjQxLCA1MiwgMjIsIDI1MiwgNDEsIDcsIAotICAgIDYsIDEsIDIzMCwgMjYsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDI1MSwgCi0gICAgNjcsIDIsIDEzMCwgNywgNCwgMSwgMjUxLCA2NywgMiwgMTMwLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjI2LCAyNDgsIDkxLCAKLSAgICA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIAotICAgIDQsIDEsIDIzNSwgMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA0LCAKLSAgICAxLCAyMzAsIDI2LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNCwgMSwgCi0gICAgMjIyLCA5MiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAxMDMsIDU4LCAxLCA2LCAyNDIsIDYxLCAyLCAKLSAgICA5MSwgNTgsIDEsIDQsIDI3LCAyMjYsIDIzNCwgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTkzLCA3LCAyNDUsIDEwMywgMSwgCi0gICAgMjIzLCA0OSwgMjQ1LCA2LCA3LCAyNDUsIDEwMywgMSwgMjIzLCA0OSwgMjI2LCAxMDUsIDcsIDI0NSwgMTAzLCAxLCAyMzUsIAotICAgIDE5MywgMTkzLCA3LCAyNDUsIDEwMywgMSwgMjQwLCAxNTQsIDIzMiwgMTI5LCA3LCAyNDUsIDEwMywgMSwgMjU0LCAyMywgCi0gICAgMTkzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDYxLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDczLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDUsIDI0NiwgNDgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzAsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzUsIAotICAgIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzYsIDIxNywgMjMwLCAyMjksIDIxNCwgNSwgMjQxLCAyNTMsIDIxNywgMjMwLCAKLSAgICAyMjksIDIxNCwgMSwgMjM0LCAyOCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzQsIDEwNSwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAyNDIsIDE3NCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDIsIDIyNCwgMjE3LCAyMzAsIDIyOSwgMjE0LCA1LCAKLSAgICAyNTQsIDc1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0OSwgMjM4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI1MCwgODYsIAotICAgIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjM1LCA2OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzUsIDEwOSwgMjE3LCAKLSAgICAyMzAsIDIyOSwgMjE0LCAxLCAyMTUsIDEzMywgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMTUsIDEzOSwgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyNDgsIDEwNSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDgsIDExNCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAxMTEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjE2LCAxNTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ3LCAKLSAgICAxNDUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ4LCA3LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyOCwgNzQsIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMSwgMjI1LCAxNiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjUsIDEyMSwgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyNTEsIDIwNSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNTIsIDEwLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDEsIDIzMCwgMTYxLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyMiwgMjExLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIAotICAgIDIzMiwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyMiwgMTY1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIxOSwgCi0gICAgNTgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQxLCA2OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgNjEsIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDczLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCA3MCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAyNSwgNSwgNzUsIDIxNywgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDIyNiwgMTgzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIAotICAgIDIyNSwgMTIsIDIzMSwgMTU4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDIyNSwgMTIsIDIzMSwgMTU3LCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDIyNSwgMTIsIDIzMSwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDIyNSwgMTIsIDIzMSwgMTU1LCAyMjgsIDU2LCAKLSAgICAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgMjQyLCAyNywgCi0gICAgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTM0LCAyMjQsIDE5LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIAotICAgIDIxOSwgMTE3LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDI0NSwgMTg4LCAyMjgsIDU2LCAyMzUsIDI0MCwgCi0gICAgMjQ0LCAyLCAxMzQsIDIxOSwgMTE2LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjI0LCAyMiwgNzgsIDIyOCwgNTYsIDIzNSwgMjQwLCAKLSAgICAyMjUsIDQwLCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyMiwgMTE4LCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyNCwgMjMsIAotICAgIDc4LCAyMjUsIDE0NCwgMSwgMTc2LCAyMjUsIDE0NCwgMSwgMjM0LCAxMzIsIDIyNSwgMTQ0LCAxLCAyNDMsIDEzNSwgMjI1LCAKLSAgICAxNDQsIDEsIDIyOSwgNzcsIDIyNSwgMTQ0LCAxLCAyNTEsIDMzLCAyMjUsIDE0NCwgMSwgMjUwLCAxNTcsIDIyNSwgMTQ0LCAKLSAgICAxLCAyMzUsIDE0MSwgMjI1LCAxNDQsIDEsIDIyNywgMTY1LCAyMjUsIDE0NCwgMSwgMjE3LCAxMDUsIDIyNSwgMTQ0LCAxLCAKLSAgICAyMTYsIDIwOCwgMjI1LCAxNDQsIDEsIDI0OCwgMjIxLCAyMjUsIDE0NCwgMSwgMTk3LCAyMjUsIDE0NCwgMSwgMTkwLCAyMjUsIAotICAgIDE0NCwgMSwgMjI1LCAxNDcsIDIyNSwgMTQ0LCAxLCAyNTIsIDE5MSwgMjI1LCAxNDQsIDEsIDE4NCwgMjI1LCAxNDQsIDEsIAotICAgIDIxNSwgMTgzLCAyMjUsIDE0NCwgMSwgMjE1LCAxNzUsIDIyNSwgMTQ0LCAxLCAyNDYsIDM4LCAyMjUsIDE0NCwgMSwgMjEyLCAKLSAgICA2NSwgMjI1LCAxNDQsIDEsIDIxMCwgODIsIDIyNSwgMTQ0LCAxLCAyMTAsIDExNiwgMjI1LCAxNDQsIDEsIDQsIDYxLCAyMjUsIAotICAgIDE0NCwgMSwgMTkxLCAyMjUsIDE0NCwgMSwgMjA1LCAyMjUsIDE0NCwgMSwgMjMzLCAxMzUsIDIyNSwgMTQ0LCAxLCAyMjAsIAotICAgIDEwMiwgMjI1LCAxNDQsIDEsIDIwNiwgMjI1LCAxNDQsIDEsIDE2MiwgMjI1LCAxNDQsIDEsIDYxLCAyMjUsIDE0NCwgMSwgCi0gICAgNzMsIDIyNSwgMTQ0LCAxLCA3MCwgMjI1LCAxNDQsIDEsIDc1LCAyMjUsIDE0NCwgMSwgNzYsIDIyNSwgMTQ0LCAxLCAyMjQsIAotICAgIDg4LCAyMjUsIDE0NCwgMSwgMjExLCAxNjUsIDIyNSwgMTQ0LCAxLCAyNDQsIDE5NiwgMjI1LCAxNDQsIDEsIDI0MywgMjksIAotICAgIDIyNSwgMTQ0LCAxLCAyNDUsIDIwOSwgMjI1LCAxNDQsIDIxOCwgNzMsIDEsIDIxMiwgNjUsIDIyNSwgMTQ0LCAyMTgsIDczLCAKLSAgICAxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMTUsIDE1NiwgMjI1LCAxNDQsIDEsIDIxNSwgMTQ0LCAyMjUsIDE0NCwgMSwgMjQ4LCAKLSAgICAxMzUsIDIyNSwgMTQ0LCAxLCAyMjgsIDExMCwgMjI1LCAxNDQsIDEsIDI1NCwgMTQxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMTMsIAotICAgIDEzNCwgMjIwLCAxMDIsIDIyNSwgMTQ0LCAxLCAyMTMsIDEzNSwgMTYyLCAyMjUsIDE0NCwgMSwgMjUzLCAyMjMsIDI0NCwgCi0gICAgMTk2LCAyMjUsIDE0NCwgMjE4LCA3MywgMSwgMjA1LCAyMjUsIDE0NCwgMjE4LCAyNSwgMSwgMjA1LCAyMjUsIDE0NCwgMSwgCi0gICAgMjUwLCAyNTUsIDIyNSwgMTQ0LCAyMTksIDE1NSwgMjQxLCAyMzYsIDc4LCAyMjUsIDE0NCwgNTIsIDI0MSwgMjM2LCA3OCwgCi0gICAgMjI1LCAxNDQsIDE2NCwgMjIwLCA5NSwgMjI1LCAxNDQsIDE2NCwgNTIsIDIyMCwgOTUsIDE3OSwgNSwgMjU0LCA3NSwgMTc5LCAKLSAgICA1LCAyMTMsIDE0NywgMTc5LCAxLCA2MSwgMTc5LCAxLCAyNTUsIDczLCAxNzksIDEsIDczLCAxNzksIDEsIDIzNiwgMzMsIAotICAgIDE3OSwgMSwgNzAsIDE3OSwgMSwgMjE0LCAxMTgsIDE3OSwgMSwgMTQ5LCAxNTMsIDE3OSwgMSwgMTQ5LCAyMjIsIDE4MCwgCi0gICAgMTc5LCAxLCAxNDksIDE1NiwgMTc5LCAxLCAxNDksIDIzMiwgMTg1LCAxNzksIDEsIDc1LCAxNzksIDEsIDI0NSwgMjA5LCAKLSAgICAxNzksIDEsIDI1NCwgMjAxLCAxNzksIDEsIDc2LCAxNzksIDEsIDIyNiwgMTgzLCAxNzksIDEsIDI1MywgMTkyLCAxNzksIDEsIAotICAgIDE3NiwgMTc5LCAxLCAyMzQsIDEzMiwgMTc5LCAxLCAyNDMsIDEzNSwgMTc5LCAxLCAyNDIsIDI0OSwgMTc5LCAxLCAyMjksIAotICAgIDc3LCAxNzksIDEsIDI1MSwgMzMsIDE3OSwgMSwgMjUwLCAxNTcsIDE3OSwgMSwgMjM1LCAxNDEsIDE3OSwgMSwgMjM1LCAKLSAgICAxMTQsIDE3OSwgMSwgMjI3LCAxNjUsIDE3OSwgMSwgMjE1LCAxNTYsIDE3OSwgMSwgMjE1LCAxNDQsIDE3OSwgMSwgMjQ4LCAKLSAgICAxMzUsIDE3OSwgMSwgMjQ4LCAxMTksIDE3OSwgMSwgMjI4LCAxMTAsIDE3OSwgMSwgMjE3LCAxMDUsIDE3OSwgMSwgMjE2LCAKLSAgICAyMDgsIDE3OSwgMSwgMjQ4LCAyMjEsIDE3OSwgMSwgMjQ4LCAyNSwgMTc5LCAxLCAxOTcsIDE3OSwgMSwgMTkwLCAxNzksIDEsIAotICAgIDIyNSwgMTQ3LCAxNzksIDEsIDI1MiwgMTkxLCAxNzksIDEsIDI1MiwgMTgsIDE3OSwgMSwgMTg0LCAxNzksIDEsIDE5MSwgCi0gICAgMTc5LCAxLCAyMDUsIDE3OSwgMSwgMjMzLCAxMzUsIDE3OSwgMSwgMjE0LCAyNywgMTc5LCAxLCAyMjAsIDEwMiwgMTc5LCAxLCAKLSAgICAyMTgsIDIyMywgMTc5LCAxLCAyMDYsIDE3OSwgMSwgMTYyLCAxNzksIDEsIDIzMiwgMTg0LCAxNzksIDExNiwgNSwgMjQyLCAKLSAgICA0NCwgMTc5LCAyNSwgNSwgMjU1LCA3MywgMTc5LCAyNSwgNSwgNzMsIDE3OSwgMjUsIDUsIDIzNiwgMzMsIDE3OSwgMjUsIDUsIAotICAgIDcwLCAxNzksIDI1LCA1LCAyMTQsIDExOCwgMTc5LCAyNSwgNSwgMTQ5LCAxNTMsIDE3OSwgMjUsIDUsIDE0OSwgMjIyLCAKLSAgICAxODAsIDE3OSwgMjUsIDUsIDE0OSwgMTU2LCAxNzksIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzksIDI1LCA1LCA3NSwgCi0gICAgMTc5LCAyNSwgNSwgMjQ1LCAyMDksIDE3OSwgMjUsIDUsIDI1NCwgMjAxLCAxNzksIDI1LCA1LCA3NiwgMTc5LCAyNSwgNSwgCi0gICAgMjI2LCAxODMsIDE3OSwgMjUsIDUsIDI1MywgMTkyLCAxNzksIDUsIDIxMywgMTUyLCAxNzksIDI0OCwgMTc4LCAxNzksIDUyLCAKLSAgICAyNDgsIDE3OCwgMTc5LCAyMSwgMjEwLCA4NiwgMTc5LCAyMSwgMTEwLCAxNzksIDIxLCAxMDUsIDE3OSwgMjEsIDE1OCwgCi0gICAgMTc5LCAyMSwgMTYxLCAxNzksIDIxLCAxODksIDE3OSwgMjEsIDE5NCwgMTc5LCAyMSwgMTk4LCAxNzksIDIxLCAxOTUsIAotICAgIDE3OSwgMjEsIDIwMCwgMzgsIDg0LCAyMSwgMjEwLCA4NiwgMzgsIDg0LCAyMSwgMTEwLCAzOCwgODQsIDIxLCAxMDUsIDM4LCAKLSAgICA4NCwgMjEsIDE1OCwgMzgsIDg0LCAyMSwgMTYxLCAzOCwgODQsIDIxLCAxODksIDM4LCA4NCwgMjEsIDE5NCwgMzgsIDg0LCAKLSAgICAyMSwgMTk4LCAzOCwgODQsIDIxLCAxOTUsIDM4LCA4NCwgMjEsIDIwMCwgMzgsIDg0LCAxLCA2MSwgMzgsIDg0LCAxLCA3MCwgCi0gICAgMzgsIDg0LCAxLCAxNzYsIDM4LCA4NCwgMSwgMTk3LCAzOCwgODQsIDEsIDE5MCwgMzgsIDg0LCAxLCAyMDUsIDM4LCA4NCwgCi0gICAgMSwgMjEzLCAxNzYsIDM4LCA4NCwgNSwgMjUzLCAxNzUsIDg0LCA1LCAyMTksIDE3LCAyNTAsIDI1NSwgODQsIDUsIDI1MSwgCi0gICAgMCwgMjEzLCAxNTIsIDg0LCA1LCA1MiwgMjUxLCAwLCAyMTMsIDE1MiwgODQsIDUsIDI1MSwgMCwgMTA1LCA4NCwgNSwgMjUxLCAKLSAgICAwLCAxNTgsIDg0LCA1LCAyNTEsIDAsIDI1MywgMTc1LCA4NCwgNSwgMjI0LCAxMjQsIDg0LCAyNDMsIDEwMCwgMjQ0LCAxMDMsIAotICAgIDg0LCAyNTAsIDIzOCwgODQsIDI0MSwgMjMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAyMTAsIDg2LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDIxLCAxMTAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDEwNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgCi0gICAgMTU4LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxNjEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDE4OSwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAyMSwgMTk0LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxOTgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIAotICAgIDE5NSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMjAwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE3NiwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCAyMzQsIDEzMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDMsIDEzNSwgMjM0LCAxODgsIDIzMiwgCi0gICAgMjQyLCAxLCAyMjksIDc3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIwNiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjAsIAotICAgIDEwMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTAsIDExNiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjcsIDE2NSwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTcsIDEwNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDAsIDIyNiwgMjM0LCAKLSAgICAxODgsIDIzMiwgMjQyLCAxLCAxOTcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTkwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDIyNSwgMTQ3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE4NCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNDgsIDIyMSwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNTIsIDE5MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMDUsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMSwgMTkxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIzMywgMTM1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDIxMiwgNjUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjE2LCAyMDgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTYyLCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxNCwgMjcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjUxLCAzMywgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCA2MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjYsIDIzNCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAKLSAgICA3MywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMjYsIDE4MywgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgMjE0LCAyMTQsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDc1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCA3MCwgMjM0LCAxODgsIDIzMiwgCi0gICAgMjQyLCAyNSwgMjQ1LCAyMDksIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDc2LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEzOCwgCi0gICAgMjI1LCAzMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxMzgsIDI1MSwgMTIsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMTM4LCAyNTEsIAotICAgIDEzLCAyMjUsIDMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDUsIDI0OSwgNzcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgNSwgMjE5LCAKLSAgICAxOTksIDIyMywgOTMsIDEsIDE3NiwgMjIzLCA5MywgMSwgMjQzLCAxMzUsIDIyMywgOTMsIDEsIDIyOSwgNzcsIDIyMywgOTMsIAotICAgIDEsIDIxNywgMTA1LCAyMjMsIDkzLCAxLCAyNDgsIDIyMSwgMjIzLCA5MywgMSwgMTk3LCAyMjMsIDkzLCAxLCAxOTAsIDIyMywgCi0gICAgOTMsIDEsIDI1MiwgMTkxLCAyMjMsIDkzLCAxLCAxODQsIDIyMywgOTMsIDEsIDI1MSwgMzMsIDIyMywgOTMsIDEsIDIzNSwgCi0gICAgMTQxLCAyMjMsIDkzLCAxLCAyMjcsIDE2NSwgMjIzLCA5MywgMSwgMjA2LCAyMjMsIDkzLCAxLCAyMDUsIDIyMywgOTMsIDEsIAotICAgIDIzMywgMTM1LCAyMjMsIDkzLCAxLCAxOTEsIDIyMywgOTMsIDEsIDIxMiwgNjUsIDIyMywgOTMsIDEsIDE2MiwgMjIzLCA5MywgCi0gICAgMSwgMjMxLCAxMjQsIDIyMywgOTMsIDEsIDIyOSwgNTYsIDIyMywgOTMsIDEsIDIyOSwgMTQ4LCAyMjMsIDkzLCAxLCAyMjcsIAotICAgIDEzNSwgMjIzLCA5MywgMSwgNjEsIDIyMywgOTMsIDI1LCA1LCA3MywgMjIzLCA5MywgMjUsIDUsIDcwLCAyMjMsIDkzLCAyNSwgCi0gICAgNSwgNzUsIDIyMywgOTMsIDI1LCA1LCAyNTQsIDIwMSwgMjIzLCA5MywgMjUsIDUsIDc2LCAyMjMsIDkzLCAyNSwgNSwgMjUzLCAKLSAgICAxOTIsIDIyMywgOTMsIDI1LCA1LCAyNDUsIDU1LCAyMjMsIDkzLCAyNSwgNSwgMjQ1LCAyMzMsIDIyMywgOTMsIDExNiwgNSwgCi0gICAgMjI5LCA3OSwgMjIzLCA5MywgMTE2LCA1LCAyMzAsIDI1LCAyMjMsIDkzLCAxMTYsIDUsIDE1MywgMjIzLCA5MywgMTE2LCA1LCAKLSAgICAyNDIsIDYwLCAyMjMsIDkzLCAyMTMsIDE1MiwgMjIzLCA5MywgMjIxLCAxNzMsIDc4LCAyNCwgMTAwLCAyMTYsIDk3LCAyNCwgCi0gICAgMTAwLCAyMTYsIDk2LCAyNCwgMTAwLCAyMTYsIDk0LCAyNCwgMTAwLCAyMTYsIDk5LCAyNCwgMTAwLCAyMjMsIDIxLCAyNCwgCi0gICAgMTAwLCAyMjMsIDUsIDI0LCAxMDAsIDIyMywgMCwgMjQsIDEwMCwgMjIzLCAyLCAyNCwgMTAwLCAyMjMsIDE4LCAyNCwgMTAwLCAKLSAgICAyMjMsIDExLCAyNCwgMTAwLCAyMjMsIDQsIDI0LCAxMDAsIDIyMywgMjMsIDI0LCAxMDAsIDIyMywgNiwgMjQsIDEwMCwgCi0gICAgMjIzLCAyNSwgMjQsIDEwMCwgMjIzLCAyMiwgMjQsIDEwMCwgMjMwLCAyMTMsIDI0LCAxMDAsIDIzMCwgMjA0LCAyNCwgMTAwLCAKLSAgICAyMzAsIDIwNywgMjQsIDEwMCwgMjI1LCA4MCwgMjQsIDEwMCwgMjI1LCA5MSwgMjQsIDEwMCwgMjI1LCA5MiwgMjQsIDEwMCwgCi0gICAgMjE4LCAyMDcsIDI0LCAxMDAsIDIzNiwgNDYsIDI0LCAxMDAsIDIzNiwgNTMsIDI0LCAxMDAsIDIxOCwgMjE4LCAyNCwgMTAwLCAKLSAgICAyMTgsIDIwNSwgMjQsIDEwMCwgMjI1LCAxMzAsIDI0LCAxMDAsIDI0MSwgMTY3LCAyNCwgMTAwLCAyMTgsIDIwMiwgMTU1LCAKLSAgICA1LCAyMjYsIDI3LCAxNTUsIDUsIDI1MCwgMTg3LCAxNTUsIDUsIDIzMywgNjYsIDE1NSwgNSwgMjExLCAyNDMsIDE1NSwgMSwgCi0gICAgNjEsIDE1NSwgMSwgMjQwLCAxNTQsIDIzNCwgMTkxLCAxNTUsIDEsIDczLCAxNTUsIDEsIDIzNiwgMzMsIDE1NSwgMSwgNzAsIAotICAgIDE1NSwgMSwgMjI2LCA5MCwgMjUwLCAxNjMsIDE1NSwgMSwgMjI5LCA3OCwgMjMzLCAyOCwgMTU1LCAxLCAyMjksIDc4LCAKLSAgICAyMzMsIDI5LCAyMjMsIDE0MiwgMTU1LCAxLCA3NSwgMTU1LCAxLCAyNTQsIDIwMSwgMTU1LCAxLCA3NiwgMTU1LCAxLCAxNzYsIAotICAgIDE1NSwgMSwgMjM1LCAxMywgMjIxLCAyMjgsIDE1NSwgMSwgMjM1LCAxMywgMjMwLCA2NiwgMTU1LCAxLCAyNDMsIDEzNSwgCi0gICAgMTU1LCAxLCAyNDMsIDEzNiwgMjMwLCA2NiwgMTU1LCAxLCAyMjksIDc3LCAxNTUsIDEsIDI1MSwgMzMsIDE1NSwgMSwgMjUxLCAKLSAgICAzNCwgMjMwLCA2NiwgMTU1LCAxLCAyMzUsIDE0MSwgMTU1LCAxLCAyMjcsIDE2NiwgMjMwLCA2NiwgMTU1LCAxLCAyMzUsIAotICAgIDE0MiwgMjMxLCAyMDcsIDE1NSwgMSwgMjI3LCAxNjUsIDE1NSwgMSwgMjE1LCAxNTYsIDE1NSwgMSwgMjE1LCAxNTcsIDIzMSwgCi0gICAgMjA3LCAxNTUsIDEsIDI0OCwgMTM1LCAxNTUsIDEsIDI0OCwgMTM2LCAyMzEsIDIwNywgMTU1LCAxLCAyMjksIDIyOSwgMjMwLCAKLSAgICA2NiwgMTU1LCAxLCAyMTcsIDEwNSwgMTU1LCAxLCAyMTcsIDEwNiwgMjMwLCA2NiwgMTU1LCAxLCAyNDgsIDIyMSwgMTU1LCAKLSAgICAxLCAyNDgsIDIyMiwgMjMxLCAyMDcsIDE1NSwgMSwgMTk3LCAxNTUsIDEsIDE5MCwgMTU1LCAxLCAyMjYsIDkwLCAyMzAsIAotICAgIDY2LCAxNTUsIDEsIDI1MiwgMTkxLCAxNTUsIDEsIDI1MiwgMTkyLCAyMzAsIDY2LCAxNTUsIDEsIDE4NCwgMTU1LCAxLCAKLSAgICAxOTEsIDE1NSwgMSwgMjA1LCAxNTUsIDEsIDIyMywgMTg4LCAyNTQsIDIxMCwgMTU1LCAxLCAyMzMsIDEzNSwgMTU1LCAxLCAKLSAgICAyMTIsIDY1LCAxNTUsIDEsIDIyMiwgMzQsIDIzMCwgNjYsIDE1NSwgMSwgMjIyLCAzNCwgMjMxLCAyMDcsIDE1NSwgMSwgCi0gICAgMjA2LCAxNTUsIDEsIDE2MiwgMTU1LCA1LCAyNTAsIDE4OCwgMjE2LCAyNTAsIDE1NSwgMjUsIDUsIDIxNywgNDcsIDE1NSwgCi0gICAgMjUsIDUsIDIxNiwgMzUsIDE1NSwgMjUsIDUsIDIxMSwgMTkwLCAxNTUsIDI1LCA1LCAyMTEsIDE5MSwgMjMxLCA2OSwgMTU1LCAKLSAgICAyNSwgNSwgMjE4LCA0NywgMTU1LCAyNSwgNSwgMjE4LCA0OCwgMjMxLCA1NywgMTU1LCAyNSwgNSwgMjE3LCA2NSwgMTU1LCAKLSAgICAyNSwgNSwgMjQ3LCAxOTQsIDIzMCwgNjUsIDE1NSwgMjUsIDUsIDIyNSwgMTg0LCAxNTUsIDExNiwgNSwgMjM0LCAxNTgsIAotICAgIDE1NSwgMTE2LCA1LCAyMjUsIDE5NiwgMTU1LCAxMTYsIDUsIDI1MSwgMTksIDE1NSwgMjI2LCA0MCwgMTU1LCA0MywgMjIzLCAKLSAgICA2OSwgMTU1LCA0NCwgMjIzLCA2OSwgMTU1LCAyMjYsIDc5LCAyNTQsIDExNywgMTU1LCAyMjYsIDc5LCAyMzEsIDIyNCwgCi0gICAgMTU1LCAyMjYsIDc5LCAyMzIsIDg4LCAxNTUsIDIyNiwgNzksIDIxMSwgMjM4LCAxNTUsIDIyNiwgNzksIDIyNiwgNDEsIAotICAgIDE1NSwgMjI2LCA3OSwgMjMyLCAyMDUsIDE1NSwgMjI2LCA3OSwgMjMyLCA4MiwgMTU1LCAyMjYsIDc5LCAyNTQsIDI0OSwgCi0gICAgMTU1LCAyMjYsIDc5LCAyNTQsIDI1MCwgMjU0LCAyNDksIDE1NSwgMjI2LCA3OSwgMjI1LCA1MSwgMTU1LCAyMTUsIDk0LCAKLSAgICAyMjYsIDc5LCAyMjUsIDUxLCAxNTUsIDIyNiwgMzYsIDE1NSwgMjEsIDIxMCwgODYsIDE1NSwgMjEsIDExMCwgMTU1LCAyMSwgCi0gICAgMTA1LCAxNTUsIDIxLCAxNTgsIDE1NSwgMjEsIDE2MSwgMTU1LCAyMSwgMTg5LCAxNTUsIDIxLCAxOTQsIDE1NSwgMjEsIAotICAgIDE5OCwgMTU1LCAyMSwgMTk1LCAxNTUsIDIxLCAyMDAsIDE1NSwgMjI2LCA3OSwgMjE2LCA2OSwgMjE1LCAxMDYsIDE1NSwgCi0gICAgMjI2LCA3OSwgMjM1LCAxNjcsIDE3MiwgMSwgNjEsIDE3MiwgMSwgNzMsIDE3MiwgMSwgNzAsIDE3MiwgMSwgNzUsIDE3MiwgCi0gICAgMSwgMjU0LCAyMDEsIDE3MiwgMSwgNzYsIDE3MiwgMSwgMTc2LCAxNzIsIDEsIDIzNCwgMTMyLCAxNzIsIDEsIDI0MywgMTM1LCAKLSAgICAxNzIsIDEsIDI0MiwgMjQ5LCAxNzIsIDEsIDIyOCwgMjQ1LCAxNzIsIDEsIDIyOSwgNzcsIDE3MiwgMSwgMjUwLCAxNTcsIAotICAgIDE3MiwgMSwgMjUwLCAxMTIsIDE3MiwgMSwgMjM1LCAxNDEsIDE3MiwgMSwgMjM1LCAxMTQsIDE3MiwgMSwgMjI4LCAyMzUsIAotICAgIDE3MiwgMSwgMjI4LCAyMzcsIDE3MiwgMSwgMjI4LCAyMzYsIDE3MiwgMSwgMjE3LCAxMDUsIDE3MiwgMSwgMjE2LCAyMDgsIAotICAgIDE3MiwgMSwgMjQ4LCAyMjEsIDE3MiwgMSwgMjQ4LCAyNSwgMTcyLCAxLCAyMjcsIDIwNywgMTcyLCAxLCAxOTcsIDE3MiwgMSwgCi0gICAgMjQ4LCAxMzUsIDE3MiwgMSwgMTkwLCAxNzIsIDEsIDIyNCwgMjIwLCAxNzIsIDEsIDIyNSwgMTQ3LCAxNzIsIDEsIDI1MiwgCi0gICAgMTkxLCAxNzIsIDEsIDI1MiwgMTgsIDE3MiwgMSwgMjMwLCA5NSwgMTcyLCAxLCAxODQsIDE3MiwgMSwgMjUyLCAxMTEsIAotICAgIDE3MiwgMSwgMTkxLCAxNzIsIDEsIDIwNSwgMTcyLCAxLCAyMzMsIDEzNSwgMTcyLCAxLCAyMTQsIDI3LCAxNzIsIDEsIDIxOCwgCi0gICAgMjIzLCAxNzIsIDEsIDIwNiwgMTcyLCAxLCAxNjIsIDE3MiwgMjUsIDUsIDI1NSwgNzMsIDE3MiwgMjUsIDUsIDczLCAxNzIsIAotICAgIDI1LCA1LCAyMzYsIDMzLCAxNzIsIDI1LCA1LCAyNDUsIDE5NSwgMTcyLCAyNSwgNSwgNzAsIDE3MiwgMjUsIDUsIDIyNiwgCi0gICAgMjM0LCAxNzIsIDI1LCA1LCA3NiwgMTcyLCAyNSwgNSwgMjU0LCAyMDEsIDE3MiwgMjUsIDUsIDI1MywgMTkyLCAxNzIsIDI1LCAKLSAgICA1LCAyMTQsIDIxNCwgMTcyLCAxMTYsIDUsIDE5MSwgMTcyLCAxMTYsIDUsIDIwNSwgMTcyLCAxMTYsIDUsIDIzMywgMTM1LCAKLSAgICAxNzIsIDExNiwgNSwgMjEyLCA2NSwgMTcyLCAxLCA0MCwgMjM1LCAyMywgMTcyLCAxLCA0MCwgMjQzLCAyMDIsIDE3MiwgMSwgCi0gICAgNDAsIDIyOSwgNzksIDE3MiwgMTE2LCA1LCA0MCwgMjI5LCA3OSwgMTcyLCAxLCA0MCwgMjUwLCAxNTgsIDE3MiwgMSwgNDAsIAotICAgIDIxNywgMTUyLCAxNzIsIDEsIDQwLCAyMzAsIDI1LCAxNzIsIDEsIDQwLCAyMjYsIDEwNSwgMTcyLCAxLCA0MCwgMjExLCAKLSAgICAxMTcsIDE3MiwgMSwgNDAsIDE1MywgMTcyLCAxLCA0MCwgMTU2LCAxNzIsIDEsIDQwLCAyMTgsIDIyNiwgMTcyLCAxMTYsIDUsIAotICAgIDQwLCAxOTMsIDE3MiwgMTE2LCA1LCA0MCwgMjQyLCA2MCwgMTcyLCAyMSwgMjEwLCA4NiwgMTcyLCAyMSwgMTEwLCAxNzIsIAotICAgIDIxLCAxMDUsIDE3MiwgMjEsIDE1OCwgMTcyLCAyMSwgMTYxLCAxNzIsIDIxLCAxODksIDE3MiwgMjEsIDE5NCwgMTcyLCAyMSwgCi0gICAgMTk4LCAxNzIsIDIxLCAxOTUsIDE3MiwgMjEsIDIwMCwgMTcyLCAyMjQsIDE0MSwgMjE4LCAyNTEsIDE3MiwgMjI0LCAxNDEsIAotICAgIDI0OCwgMTc4LCAxNzIsIDIyNCwgMTQxLCA1MiwgMjQ4LCAxNzgsIDE3MiwgMjI0LCAxNDEsIDIxNSwgMjExLCAyNDgsIDE3OCwgCi0gICAgNjgsIDEsIDIzNCwgMTI2LCAyNDMsIDEzNSwgNjgsIDEsIDIzNCwgMTI2LCAyNTEsIDMzLCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDI1MCwgMTU3LCA2OCwgMSwgMjM0LCAxMjYsIDIzNSwgMTQxLCA2OCwgMSwgMjM0LCAxMjYsIDIzNSwgMTE0LCA2OCwgMSwgCi0gICAgMjM0LCAxMjYsIDIyNywgMTY1LCA2OCwgMSwgMjM0LCAxMjYsIDIxNSwgMTU2LCA2OCwgMSwgMjM0LCAxMjYsIDIxNSwgMTQ0LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDI0OCwgMTM1LCA2OCwgMSwgMjM0LCAxMjYsIDI0OCwgMTE5LCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDI0OCwgMjUsIDY4LCAxLCAyMzQsIDEyNiwgMTk3LCA2OCwgMSwgMjM0LCAxMjYsIDIwNiwgNjgsIDEsIDIzNCwgMTI2LCAKLSAgICAxNjIsIDY4LCAxLCAyMzQsIDEyNiwgMjQxLCAxODksIDY4LCAxLCAyMzQsIDEyNiwgMjQ0LCAxOTYsIDY4LCA1OCwgMSwgCi0gICAgMjM0LCAxMjYsIDIyMywgMTA5LCA2OCwgMSwgMjM0LCAxMjYsIDIxMSwgMTY1LCA2OCwgMSwgMjM0LCAxMjYsIDIxMCwgMTE2LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDIwNSwgNjgsIDIzMiwgMTQ1LCAyMzQsIDEyNiwgMjI2LCAyNTMsIDY4LCAyMzIsIDE0NSwgCi0gICAgMjM0LCAxMjYsIDIyNCwgNDMsIDY4LCAyMzIsIDE0NSwgMjM0LCAxMjYsIDI0MSwgMTIxLCA2OCwgMTYsIDI1NCwgMTkwLCAKLSAgICAyNDUsIDMwLCA2OCwgMTYsIDI1NCwgMTkwLCAxMTAsIDY4LCAxNiwgMjU0LCAxOTAsIDEwNSwgNjgsIDEsIDI1NCwgMTkwLCAKLSAgICAyMDUsIDY4LCA1LCAyMjYsIDIzLCAyMzQsIDIxMywgMjE2LCAzMCwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDI4LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIzNCwgMjgsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAxMDUsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAKLSAgICAxMDUsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAxMTQsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMTQsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjQyLCAxNzQsIDM5LCAyMDgsIDEsIDEyNSwgMjQyLCAxNzQsIDM5LCAyMDgsIDEsIDEyMSwgMjI5LCA0LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIyOSwgNCwgMzksIDIwOCwgMSwgMTIxLCAyNDksIDIzOCwgMzksIDIwOCwgMSwgMTI1LCAyNDksIAotICAgIDIzOCwgMzksIDIwOCwgMSwgMTIxLCAyNTAsIDg2LCAzOSwgMjA4LCAxLCAxMjUsIDI1MCwgODYsIDM5LCAyMDgsIDEsIDEyMSwgCi0gICAgMjE5LCA1OCwgMzksIDIwOCwgMSwgMTI1LCAyMTksIDU4LCAzOSwgMjA4LCAxLCAxMjEsIDIyNywgMTM0LCAzOSwgMjA4LCAxLCAKLSAgICAxMjUsIDIyNywgMTM0LCAzOSwgMjA4LCAxLCAxMjEsIDI0NywgMTQ1LCAzOSwgMjA4LCAxLCAxMjUsIDI0NywgMTQ1LCAzOSwgCi0gICAgMjA4LCAxLCAxMjEsIDExMSwgMzksIDIwOCwgMSwgMTI1LCAxMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjE2LCAxNTYsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjE2LCAxNTYsIDM5LCAyMDgsIDEsIDEyMSwgMjI4LCA3NCwgMzksIDIwOCwgMSwgMTI1LCAyMjgsIAotICAgIDc0LCAzOSwgMjA4LCAxLCAxMjEsIDI1MSwgMjA1LCAzOSwgMjA4LCAxLCAxMjUsIDI1MSwgMjA1LCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDIyNSwgMTYsIDM5LCAyMDgsIDEsIDEyNSwgMjI1LCAxNiwgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDEyMSwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMjUsIDEyMSwgMzksIDIwOCwgMSwgMTIxLCAyNDQsIDQzLCAzOSwgMjA4LCAxLCAxMjUsIDI0NCwgCi0gICAgNDMsIDM5LCAyMDgsIDEsIDEyMSwgMjMwLCAxNjEsIDM5LCAyMDgsIDEsIDEyNSwgMjMwLCAxNjEsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyNSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyMSwgMjIyLCAyMTEsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjIyLCAyMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjMyLCAxNTYsIDM5LCAyMDgsIDEsIDEyNSwgMjMyLCAKLSAgICAxNTYsIDM5LCAyMDgsIDEsIDEyMSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjQxLCA2OCwgMzksIDIwOCwgMSwgMTI1LCAyNDEsIDY4LCAzOSwgMjA4LCAxLCAxMjEsIDc2LCAzOSwgMjA4LCAxLCAKLSAgICAxMjUsIDc2LCAzOSwgMjA4LCAyMzEsIDIwNCwgMjM0LCAyMzAsIDM5LCAyMDgsIDI1LCAyNTUsIDczLCAzOSwgMjA4LCAyNSwgCi0gICAgNzMsIDM5LCAyMDgsIDI1LCAyMTQsIDIxNCwgMzksIDIwOCwgMjUsIDcwLCAzOSwgMjA4LCAyNSwgNzUsIDM5LCAyMDgsIDI1LCAKLSAgICA3NiwgMzksIDIwOCwgMjMxLCAyMDQsIDIzNCwgMTA4LCAzOSwgMjA4LCAyNSwgMjQwLCAxMTksIDM5LCAyMDgsIDI1LCAyMTQsIAotICAgIDIxMywgMzksIDIwOCwgMjUsIDIxNCwgMjI5LCAzOSwgMjA4LCAyNSwgMjUzLCAxOTAsIDM5LCAyMDgsIDI1LCAyNTMsIDE2NywgCi0gICAgMzksIDIwOCwgMjUsIDI1NCwgMTIzLCAzOSwgMjA4LCAyNSwgMjU0LCAxMzYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIAotICAgIDI0NSwgMTgwLCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAyMjcsIDIwNiwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgMjE2LCAKLSAgICAxNTYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIDIxOSwgNDIsIDM5LCAyMDgsIDE2LCAyMzQsIDEzLCAzOSwgMjA4LCAxNiwgCi0gICAgMjI3LCAyMDYsIDM5LCAyMDgsIDE2LCAyMjEsIDI1MywgMzksIDIwOCwgMTYsIDI0MSwgNjksIDI0MSwgNjQsIDM5LCAyMDgsIAotICAgIDE2LCAyMzQsIDIyLCAyMzQsIDIxLCAxODYsIDE4NSwgMSwgNzUsIDE4NiwgMTg1LCAxLCA3NiwgMTg2LCAxODUsIDEsIDI1MCwgCi0gICAgMTU3LCAxODYsIDE4NSwgMSwgMjI3LCAxNjUsIDE4NiwgMTg1LCAxLCAyMTUsIDE1NiwgMTg2LCAxODUsIDEsIDIxNSwgMTQ0LCAKLSAgICAxODYsIDE4NSwgMSwgMjQ4LCAxMzUsIDE4NiwgMTg1LCAxLCAyNDgsIDExOSwgMTg2LCAxODUsIDEsIDIyOCwgMTEwLCAxODYsIAotICAgIDE4NSwgMSwgMjIwLCAxMDIsIDE4NiwgMTg1LCAxLCAyMTgsIDIyMywgMTg2LCAxODUsIDI1LCA1LCAyMzYsIDMzLCAxODYsIAotICAgIDE4NSwgMjUsIDUsIDIxNCwgMTE4LCAxODYsIDE4NSwgMjUsIDUsIDI1NSwgMzcsIDE4NiwgMTg1LCAyNSwgNSwgMjUzLCAKLSAgICAxOTIsIDE4NiwgMTg1LCAyNSwgNSwgMjU1LCAzMCwgMTg2LCAxODUsIDI1MCwgMTI1LCAxODYsIDE4NSwgMjU0LCAyMDYsIAotICAgIDIzNCwgOTgsIDE4NiwgMTg1LCAyNTQsIDEwMywgMTg2LCAxODUsIDMsIDIyMywgNzQsIDc4LCAxODYsIDE4NSwgMjExLCAKLSAgICAyMDksIDIyMywgNzQsIDc4LCAxODYsIDE4NSwgMjUsIDUsIDIxMywgMTQ3LCAxODYsIDE4NSwgMjEzLCAxNTIsIDI5LCAzLCAKLSAgICAyMTUsIDEzNywgMjksIDMsIDIxNSwgMTQwLCAyOSwgMywgMjE1LCAxNDMsIDI5LCAzLCAyMTUsIDE0MSwgMjksIDMsIDIxNSwgCi0gICAgMTQyLCAyOSwgMywgMjE1LCAxMzksIDI5LCAzLCAyNDgsIDExMywgMjksIDMsIDI0OCwgMTE1LCAyOSwgMywgMjQ4LCAxMTgsIAotICAgIDI5LCAzLCAyNDgsIDExNiwgMjksIDMsIDI0OCwgMTE3LCAyOSwgMywgMjQ4LCAxMTQsIDI5LCAzLCAyNDYsIDI4LCAyOSwgMywgCi0gICAgMjQ2LCAzMSwgMjksIDMsIDI0NiwgMzcsIDI5LCAzLCAyNDYsIDM1LCAyOSwgMywgMjQ2LCAzNiwgMjksIDMsIDI0NiwgMjksIAotICAgIDI5LCAzLCAyNTAsIDIwNCwgMjksIDMsIDI1MCwgMTk4LCAyOSwgMywgMjUwLCAyMDAsIDI5LCAzLCAyNTAsIDIwMywgMjksIAotICAgIDMsIDI1MCwgMjAxLCAyOSwgMywgMjUwLCAyMDIsIDI5LCAzLCAyNTAsIDE5OSwgMjksIDMsIDI1MiwgMTExLCAyOSwgMywgCi0gICAgMjUyLCA5MCwgMjksIDMsIDI1MiwgMTAyLCAyOSwgMywgMjUyLCAxMTAsIDI5LCAzLCAyNTIsIDEwNSwgMjksIDMsIDI1MiwgCi0gICAgMTA2LCAyOSwgMywgMjUyLCA5NCwgMTg2LCAxODUsIDEsIDIzNCwgMTksIDE4NiwgMTg1LCAxLCAyMjEsIDI1MywgMTg2LCAKLSAgICAxODUsIDEsIDIzMywgMTA5LCAxODYsIDE4NSwgMSwgMjMwLCAxNzIsIDE4NiwgMTg1LCAxLCAxOTAsIDE4NiwgMTg1LCAxLCAKLSAgICAxOTcsIDE4NiwgMTg1LCAxLCAyNTAsIDEwMiwgMTg2LCAxODUsIDEsIDIxNiwgOTAsIDE4NiwgMTg1LCAxLCAyMzQsIDEwMSwgCi0gICAgMTg2LCAxODUsIDEsIDIyOCwgMjUwLCAxODYsIDE4NSwgMSwgMjE2LCAxNTAsIDE4NiwgMTg1LCAxLCAyMTIsIDYwLCAxODYsIAotICAgIDE4NSwgMSwgMjExLCA2OSwgMTg2LCAxODUsIDEsIDI0MCwgMjE2LCAxODYsIDE4NSwgMSwgMjE0LCAxOTAsIDE4NiwgMTg1LCAKLSAgICAxLCA3MywgMTg2LCAxODUsIDEsIDIyNSwgMTQyLCAxODYsIDE4NSwgMSwgMjUzLCAyMDIsIDE4NiwgMTg1LCAxLCAyNDIsIAotICAgIDE2NywgMTg2LCAxODUsIDEsIDIzNSwgMTEyLCAxODYsIDE4NSwgMSwgMjIzLCAxNjYsIDE4NiwgMTg1LCAxLCAyNTIsIDE5MSwgCi0gICAgMTg2LCAxODUsIDEsIDIzNSwgMTAwLCAxODYsIDE4NSwgMSwgMjQ3LCAyMTksIDE4NiwgMTg1LCAxLCAyNDIsIDIyMSwgMTg2LCAKLSAgICAxODUsIDEsIDI0OCwgNSwgMTg2LCAxODUsIDEsIDI1MiwgMTYsIDE4NiwgMTg1LCAxLCAyMzQsIDIwLCAyMzIsIDEyOCwgCi0gICAgMTg2LCAxODUsIDEsIDIzMywgMTEwLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDIzMCwgMTczLCAyMzIsIDEyOCwgMTg2LCAKLSAgICAxODUsIDEsIDIyNiwgOTAsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjI5LCAyMjksIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgCi0gICAgMjE2LCA5MSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyMjgsIDI1MSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyNDAsIAotICAgIDE1NCwgMjMyLCAxMjgsIDE4NiwgMTg1LCAyNSwgNSwgMjI2LCAxOTUsIDE4NiwgMTg1LCAyNSwgNSwgMjM1LCAyNTMsIDE4NiwgCi0gICAgMTg1LCAyNSwgNSwgMjU0LCAxMjIsIDE4NiwgMTg1LCAyNSwgNSwgMjExLCAzOCwgMTg2LCAxODUsIDI1LCA1LCAyMTksIDMyLCAKLSAgICAxODYsIDE4NSwgMjUsIDUsIDIxNCwgMTg3LCAxODYsIDE4NSwgMjUsIDUsIDI1MCwgMTIzLCAxODYsIDE4NSwgMjUsIDUsIAotICAgIDIyNywgMTkxLCAxODYsIDE4NSwgMjUwLCAxMjQsIDE4NiwgMTg1LCAyMzIsIDg1LCAyMzUsIDE1MCwgMTg2LCAxODUsIDI1NCwgCi0gICAgNDYsIDIzNSwgMTUwLCAxODYsIDE4NSwgMjEsIDIxMCwgODYsIDE4NiwgMTg1LCAyMSwgMTEwLCAxODYsIDE4NSwgMjEsIAotICAgIDEwNSwgMTg2LCAxODUsIDIxLCAxNTgsIDE4NiwgMTg1LCAyMSwgMTYxLCAxODYsIDE4NSwgMjEsIDE4OSwgMTg2LCAxODUsIAotICAgIDIxLCAxOTQsIDE4NiwgMTg1LCAyMSwgMTk4LCAxODYsIDE4NSwgMjEsIDE5NSwgMTg2LCAxODUsIDIxLCAyMDAsIDI0LCAKLSAgICAxNDMsIDIyNywgNzcsIDI0LCAxNDMsIDIyNywgODIsIDI0LCAxNDMsIDIxMCwgMjQzLCAyNCwgMTQzLCAyMTAsIDI0MiwgMjQsIAotICAgIDE0MywgMjEwLCAyNDEsIDI0LCAxNDMsIDIxNSwgMjMsIDI0LCAxNDMsIDIxNSwgMjYsIDI0LCAxNDMsIDIxMCwgMjEwLCAyNCwgCi0gICAgMTQzLCAyMTAsIDIwNiwgMjQsIDE0MywgMjQ1LCA1NCwgMjQsIDE0MywgMjQ1LCA1MiwgMjQsIDE0MywgMjQ1LCA1MywgMjQsIAotICAgIDE0MywgMjQ1LCA1MCwgMjQsIDE0MywgMjQwLCAxNDQsIDI0LCAxNDMsIDI0MCwgMTQzLCAyNCwgMTQzLCAyNDAsIDE0MSwgCi0gICAgMjQsIDE0MywgMjQwLCAxNDIsIDI0LCAxNDMsIDI0MCwgMTQ3LCAyNCwgMTQzLCAyNDAsIDE0MCwgMjQsIDE0MywgMjQwLCAKLSAgICAxMzksIDI0LCAxNDMsIDI0MCwgMTQ5LCAyNCwgMTQzLCAyNTQsIDMzLCAyNCwgMTQzLCAyNTQsIDMyLCAyNCwgOTAsIDIyOCwgCi0gICAgMjE5LCAyNCwgOTAsIDIyOCwgMjI1LCAyNCwgOTAsIDIxOCwgMjA0LCAyNCwgOTAsIDIxOCwgMjAzLCAyNCwgOTAsIDIxNiwgCi0gICAgOTYsIDI0LCA5MCwgMjE2LCA5NCwgMjQsIDkwLCAyMTYsIDkzLCAyNCwgOTAsIDIxNiwgOTksIDI0LCA5MCwgMjE2LCAxMDAsIAotICAgIDI0LCA5MCwgMjE2LCA5MiwgMjQsIDkwLCAyMjMsIDUsIDI0LCA5MCwgMjIzLCAyMCwgMjQsIDkwLCAyMTgsIDIxMCwgMjQsIAotICAgIDkwLCAyMjMsIDE3LCAyNCwgOTAsIDIyMywgNywgMjQsIDkwLCAyMjMsIDksIDI0LCA5MCwgMjIyLCAyNTIsIDI0LCA5MCwgCi0gICAgMjIyLCAyNTMsIDI0LCA5MCwgMjM0LCAyMTgsIDI0LCA5MCwgMjMwLCAyMTIsIDI0LCA5MCwgMjMwLCAyMDYsIDI0LCA5MCwgCi0gICAgMjE4LCAyMTQsIDI0LCA5MCwgMjMwLCAyMDksIDI0LCA5MCwgMjMwLCAyMTUsIDI0LCA5MCwgMjI1LCA3NiwgMjQsIDkwLCAKLSAgICAyMjUsIDg1LCAyNCwgOTAsIDIyNSwgODksIDI0LCA5MCwgMjE4LCAyMTIsIDI0LCA5MCwgMjI1LCA3OSwgMjQsIDkwLCAyMjUsIAotICAgIDkzLCAyNCwgOTAsIDIyNSwgOTQsIDI0LCA5MCwgMjE5LCAxNDAsIDI0LCA5MCwgMjE5LCAxNDMsIDI0LCA5MCwgMjE4LCAKLSAgICAyMDgsIDI0LCA5MCwgMjE4LCAyMDYsIDI0LCA5MCwgMjE5LCAxMzgsIDI0LCA5MCwgMjE5LCAxNDYsIDI0LCA5MCwgMjE5LCAKLSAgICAxNDcsIDI0LCA5MCwgMjE5LCAxMzIsIDI0LCA5MCwgMjE5LCAxNDUsIDI0LCA5MCwgMjI2LCAzMCwgMjQsIDkwLCAyMjYsIAotICAgIDMxLCAyNCwgOTAsIDIxMSwgMjQsIDI0LCA5MCwgMjExLCAyNSwgMjQsIDkwLCAyNTAsIDQ0LCAyNCwgOTAsIDI1MCwgNDMsIAotICAgIDI0LCA5MCwgMjE4LCAyMTksIDI0LCA5MCwgMjI1LCAxMjgsIDI0LCA5MCwgMjI1LCAxMjcsIDksIDE0LCAyMzgsIDI0LCA5LCAKLSAgICAxNCwgMjM4LCAyMywgOSwgMTQsIDIzOCwgMjIsIDksIDE0LCAyMzgsIDIxLCA5LCAxNCwgMjM4LCAyMCwgOSwgMTQsIDIzOCwgCi0gICAgMTksIDksIDE0LCAyMzgsIDE4LCA5LCAxNCwgMjM4LCAxNywgOSwgMTQsIDIzOCwgMTYsIDksIDE0LCAyMzgsIDE1LCA5LCAKLSAgICAxNCwgMjM4LCAxNCwgOSwgMTQsIDIzOCwgMTMsIDksIDE0LCAyMzgsIDEyLCA5LCAxNCwgMjM4LCAxMSwgOSwgMTQsIDIzOCwgCi0gICAgMTAsIDksIDE0LCAyMzgsIDksIDksIDE0LCAyMzgsIDgsIDksIDE0LCAyMzgsIDcsIDksIDE0LCAyMzgsIDYsIDksIDE0LCAKLSAgICAyMzgsIDUsIDksIDE0LCAyMzgsIDQsIDksIDE0LCAyMzgsIDMsIDksIDE0LCAyMzgsIDIsIDksIDE0LCAyMzgsIDEsIDksIAotICAgIDE0LCAyMzgsIDAsIDksIDE0LCAyMzcsIDI1NSwgOSwgMTQsIDIzNywgMjU0LCA5LCAxNCwgMjM3LCAyNTMsIDksIDE0LCAKLSAgICAyMzcsIDI1MiwgOSwgMTQsIDIzNywgMjUxLCA5LCAxNCwgMjM3LCAyNTAsIDksIDE0LCAyMzcsIDI0OSwgOSwgMTQsIDIzNywgCi0gICAgMjQ4LCA5LCAxNCwgMjM3LCAyNDcsIDksIDE0LCAyMzcsIDI0NiwgOSwgMTQsIDIzNywgMjQ1LCA5LCAxNCwgMjM3LCAyNDQsIAotICAgIDksIDE0LCAyMzcsIDI0MywgOSwgMTQsIDIzNywgMjQyLCA5LCAxNCwgMjM3LCAyNDEsIDksIDE0LCAyMzcsIDI0MCwgOSwgCi0gICAgMTQsIDIzNywgMjM5LCA5LCAxNCwgMjM3LCAyMzgsIDksIDE0LCAyMzcsIDIzNywgOSwgMTQsIDIzNywgMjM2LCA5LCAxNCwgCi0gICAgMjM3LCAyMzUsIDksIDE0LCAyMzcsIDIzNCwgOSwgMTQsIDIzNywgMjMzLCA5LCAxNCwgMjM3LCAyMzIsIDksIDE0LCAyMzcsIAotICAgIDIzMSwgOSwgMTQsIDIzNywgMjMwLCA5LCAxNCwgMjM3LCAyMjksIDksIDE0LCAyMzcsIDIyOCwgOSwgMTQsIDIzNywgMjI3LCAKLSAgICA5LCAxNCwgMjM3LCAyMjYsIDksIDE0LCAyMzcsIDIyNSwgOSwgMTQsIDIzNywgMjI0LCA5LCAxNCwgMjM3LCAyMjMsIDksIAotICAgIDE0LCAyMzcsIDIyMiwgOSwgMTQsIDIzNywgMjIxLCA5LCAxNCwgMjM3LCAyMjAsIDksIDE0LCAyMzcsIDIxOSwgOSwgMTQsIAotICAgIDIzNywgMjE4LCA5LCAxNCwgMjM3LCAyMTcsIDksIDE0LCAyMzcsIDIxNiwgOSwgMTQsIDIzNywgMjE1LCA5LCAxNCwgMjM3LCAKLSAgICAyMTQsIDksIDE0LCAyMzcsIDIxMywgOSwgMTQsIDIzNywgMjEyLCA5LCAxNCwgMjM3LCAyMTEsIDksIDE0LCAyMzcsIDIxMCwgCi0gICAgOSwgMTQsIDIzNywgMjA5LCA5LCAxNCwgMjM3LCAyMDgsIDksIDE0LCAyMzcsIDIwNywgOSwgMTQsIDIzNywgMjA2LCA5LCAKLSAgICAxNCwgMjM3LCAyMDUsIDksIDE0LCAyMzcsIDIwNCwgOSwgMTQsIDIzNywgMjAzLCA5LCAxNCwgMjM3LCAyMDIsIDksIDE0LCAKLSAgICAyMzcsIDIwMSwgOSwgMTQsIDIzNywgMjAwLCA5LCAxNCwgMjM3LCAxOTksIDksIDE0LCAyMzcsIDE5OCwgOSwgMTQsIDIzNywgCi0gICAgMTk3LCA5LCAxNCwgMjM3LCAxOTYsIDksIDE0LCAyMzcsIDE5NSwgOSwgMTQsIDIzNywgMTk0LCA5LCAxNCwgMjM3LCAxOTMsIAotICAgIDksIDE0LCAyMzcsIDE5MiwgOSwgMTQsIDIzNywgMTkxLCA5LCAxNCwgMjM3LCAxOTAsIDksIDE0LCAyMzcsIDE4OSwgOSwgCi0gICAgMTQsIDIzNywgMTg4LCA5LCAxNCwgMjM3LCAxODcsIDksIDE0LCAyMzcsIDE4NiwgOSwgMTQsIDIzNywgMTg1LCA5LCAxNCwgCi0gICAgMjM3LCAxODQsIDksIDE0LCAyMzcsIDE4MywgOSwgMTQsIDIzNywgMTgyLCA5LCAxNCwgMjM3LCAxODEsIDksIDE0LCAyMzcsIAotICAgIDE4MCwgOSwgMTQsIDIzNywgMTc5LCA5LCAxNCwgMjM3LCAxNzgsIDksIDE0LCAyMzcsIDE3NywgOSwgMTQsIDIzNywgMTc2LCAKLSAgICA5LCAxNCwgMjM3LCAxNzUsIDksIDE0LCAyMzcsIDE3NCwgOSwgMTQsIDIzNywgMTczLCA5LCAxNCwgMjM3LCAxNzIsIDksIAotICAgIDE0LCAyMzcsIDE3MSwgOSwgMTQsIDIzNywgMTcwLCA5LCAxNCwgMjM3LCAxNjksIDksIDE0LCAyMzcsIDE2OCwgOSwgMTQsIAotICAgIDIzNywgMTY3LCA5LCAxNCwgMjM3LCAxNjYsIDksIDE0LCAyMzcsIDE2NSwgOSwgMTQsIDIzNywgMTY0LCA5LCAxNCwgMjM3LCAKLSAgICAxNjMsIDksIDE0LCAyMzcsIDE2MiwgOSwgMTQsIDIzNywgMTYxLCA5LCAxNCwgMjM3LCAxNjAsIDksIDE0LCAyMzcsIDE1OSwgCi0gICAgOSwgMTQsIDIzNywgMTU4LCA5LCAxNCwgMjM3LCAxNTcsIDksIDE0LCAyMzcsIDE1NiwgOSwgMTQsIDIzNywgMTU1LCA5LCAKLSAgICAxNCwgMjM3LCAxNTQsIDksIDE0LCAyMzcsIDE1MywgOSwgMTQsIDIzNywgMTUyLCA5LCAxNCwgMjM3LCAxNTEsIDksIDE0LCAKLSAgICAyMzcsIDE1MCwgOSwgMTQsIDIzNywgMTQ5LCA5LCAxNCwgMjM3LCAxNDgsIDksIDE0LCAyMzcsIDE0NywgOSwgMTQsIDIzNywgCi0gICAgMTQ2LCA5LCAxNCwgMjM3LCAxNDUsIDksIDE0LCAyMzcsIDE0NCwgOSwgMTQsIDIzNywgMTQzLCA5LCAxNCwgMjM3LCAxNDIsIAotICAgIDksIDE0LCAyMzcsIDE0MSwgOSwgMTQsIDIzNywgMTQwLCA5LCAxNCwgMjM3LCAxMzksIDksIDE0LCAyMzcsIDEzOCwgOSwgCi0gICAgMTQsIDIzNywgMTM3LCA5LCAxNCwgMjM3LCAxMzYsIDksIDE0LCAyMzcsIDEzNSwgOSwgMTQsIDIzNywgMTM0LCA5LCAxNCwgCi0gICAgMjM3LCAxMzMsIDksIDE0LCAyMzcsIDEzMiwgOSwgMTQsIDIzNywgMTMxLCA5LCAxNCwgMjM3LCAxMzAsIDksIDE0LCAyMzcsIAotICAgIDEyOSwgOSwgMTQsIDIzNywgMTI4LCA5LCAxNCwgMjM3LCAxMjcsIDksIDE0LCAyMzcsIDEyNiwgOSwgMTQsIDIzNywgMTI1LCAKLSAgICA5LCAxNCwgMjM3LCAxMjQsIDksIDE0LCAyMzcsIDEyMywgOSwgMTQsIDIzNywgMTIyLCA5LCAxNCwgMjM3LCAxMjEsIDksIAotICAgIDE0LCAyMzcsIDEyMCwgOSwgMTQsIDIzNywgMTE5LCA5LCAxNCwgMjM3LCAxMTgsIDksIDE0LCAyMzcsIDExNywgOSwgMTQsIAotICAgIDIzNywgMTE2LCA5LCAxNCwgMjM3LCAxMTUsIDksIDE0LCAyMzcsIDExNCwgOSwgMTQsIDIzNywgMTEzLCA5LCAxNCwgMjM3LCAKLSAgICAxMTIsIDksIDE0LCAyMzcsIDExMSwgOSwgMTQsIDIzNywgMTEwLCA5LCAxNCwgMjM3LCAxMDksIDksIDE0LCAyMzcsIDEwOCwgCi0gICAgOSwgMTQsIDIzNywgMTA3LCA5LCAxNCwgMjM3LCAxMDYsIDksIDE0LCAyMzcsIDEwNSwgOSwgMTQsIDIzNywgMTA0LCA5LCAKLSAgICAxNCwgMjM3LCAxMDMsIDksIDE0LCAyMzcsIDEwMiwgOSwgMTQsIDIzNywgMTAxLCA5LCAxNCwgMjM3LCAxMDAsIDksIDE0LCAKLSAgICAyMzcsIDk5LCA5LCAxNCwgMjM3LCA5OCwgOSwgMTQsIDIzNywgOTcsIDksIDE0LCAyMzcsIDk2LCA5LCAxNCwgMjM3LCA5NSwgCi0gICAgOSwgMTQsIDIzNywgOTQsIDksIDE0LCAyMzcsIDkzLCA5LCAxNCwgMjM3LCA5MiwgOSwgMTQsIDIzNywgOTEsIDksIDE0LCAKLSAgICAyMzcsIDkwLCA5LCAxNCwgMjM3LCA4OSwgOSwgMTQsIDIzNywgODgsIDksIDE0LCAyMzcsIDg3LCA5LCAxNCwgMjM3LCA4NiwgCi0gICAgOSwgMTQsIDIzNywgODUsIDksIDE0LCAyMzcsIDg0LCA5LCAxNCwgMjM3LCA4MywgOSwgMTQsIDIzNywgODIsIDksIDE0LCAKLSAgICAyMzcsIDgxLCA5LCAxNCwgMjM3LCA4MCwgOSwgMTQsIDIzNywgNzksIDksIDE0LCAyMzcsIDc4LCA5LCAxNCwgMjM3LCA3NywgCi0gICAgOSwgMTQsIDIzNywgNzYsIDksIDE0LCAyMzcsIDc1LCA5LCAxNCwgMjM3LCA3NCwgOSwgMTQsIDIzNywgNzMsIDksIDE0LCAKLSAgICAyMzcsIDcyLCA5LCAxNCwgMjM3LCA3MSwgOSwgMTQsIDIzNywgNzAsIDksIDE0LCAyMzcsIDY5LCA5LCAxNCwgMjM3LCA2OCwgCi0gICAgOSwgMTQsIDIzNywgNjcsIDksIDE0LCAyMzcsIDY2LCA5LCAxNCwgMjM3LCA2NSwgOSwgMTQsIDIzNywgNjQsIDksIDE0LCAKLSAgICAyMzcsIDYzLCA5LCAxNCwgMjM3LCA2MiwgOSwgMTQsIDIzNywgNjEsIDksIDE0LCAyMzcsIDYwLCA5LCAxNCwgMjM3LCA1OSwgCi0gICAgOSwgMTQsIDIzNywgNTgsIDksIDE0LCAyMzcsIDU3LCA5LCAxNCwgMjM3LCA1NiwgOSwgMTQsIDIzNywgNTUsIDksIDE0LCAKLSAgICAyMzcsIDU0LCA5LCAxNCwgMjM3LCA1MywgOSwgMTQsIDIzNywgNTIsIDksIDE0LCAyMzcsIDUxLCA5LCAxNCwgMjM3LCA1MCwgCi0gICAgOSwgMTQsIDIzNywgNDksIDksIDE0LCAyMzcsIDQ4LCA5LCAxNCwgMjM3LCA0NywgOSwgMTQsIDIzNywgNDYsIDksIDE0LCAKLSAgICAyMzcsIDQ1LCA5LCAxNCwgMjM3LCA0NCwgOSwgMTQsIDIzNywgNDMsIDksIDE0LCAyMzcsIDQyLCA5LCAxNCwgMjM3LCA0MSwgCi0gICAgOSwgMTQsIDIzNywgNDAsIDksIDE0LCAyMzcsIDM5LCA5LCAxNCwgMjM3LCAzOCwgOSwgMTQsIDIzNywgMzcsIDksIDE0LCAKLSAgICAyMzcsIDM2LCA5LCAxNCwgMjM3LCAzNSwgOSwgMTQsIDIzNywgMzQsIDksIDE0LCAyMzcsIDMzLCA5LCAxNCwgMjM3LCAzMiwgCi0gICAgOSwgMTQsIDIzNywgMzEsIDksIDE0LCAyMzcsIDMwLCA5LCAxNCwgMjM3LCAyOSwgOSwgMTQsIDIzNywgMjgsIDksIDE0LCAKLSAgICAyMzcsIDI3LCA5LCAxNCwgMjM3LCAyNiwgOSwgMTQsIDIzNywgMjUsIDksIDE0LCAyMzcsIDI0LCA5LCAxNCwgMjM3LCAyMywgCi0gICAgOSwgMTQsIDIzNywgMjIsIDksIDE0LCAyMzcsIDIxLCA5LCAxNCwgMjM3LCAyMCwgOSwgMTQsIDIzNywgMTksIDksIDE0LCAKLSAgICAyMzcsIDE4LCA5LCAxNCwgMjM3LCAxNywgOSwgMTQsIDIzNywgMTYsIDksIDE0LCAyMzcsIDE1LCA5LCAxNCwgMjM3LCAxNCwgCi0gICAgOSwgMTQsIDIzNywgMTMsIDksIDE0LCAyMzcsIDEyLCA5LCAxNCwgMjM3LCAxMSwgOSwgMTQsIDIzNywgMTAsIDksIDE0LCAKLSAgICAyMzcsIDksIDksIDE0LCAyMzcsIDgsIDksIDE0LCAyMzcsIDcsIDksIDE0LCAyMzcsIDYsIDksIDE0LCAyMzcsIDUsIDksIAotICAgIDE0LCAyMzcsIDQsIDksIDE0LCAyMzcsIDMsIDksIDE0LCAyMzcsIDIsIDksIDE0LCAyMzcsIDEsIDksIDE0LCAyMzcsIDAsIAotICAgIDksIDE0LCAyMzYsIDI1NSwgOSwgMTQsIDIzNiwgMjU0LCA5LCAxNCwgMjM2LCAyNTMsIDksIDE0LCAyMzYsIDI1MiwgOSwgCi0gICAgMTQsIDIzNiwgMjUxLCA5LCAxNCwgMjM2LCAyNTAsIDksIDE0LCAyMzYsIDI0OSwgOSwgMTQsIDIzNiwgMjQ4LCA5LCAxNCwgCi0gICAgMjM2LCAyNDcsIDksIDE0LCAyMzYsIDI0NiwgOSwgMTQsIDIzNiwgMjQ1LCA5LCAxNCwgMjM2LCAyNDQsIDksIDE0LCAyMzYsIAotICAgIDI0MywgOSwgMTQsIDIzNiwgMjQyLCA5LCAxNCwgMjM2LCAyNDEsIDksIDE0LCAyMzYsIDI0MCwgOSwgMTQsIDIzNiwgMjM5LCAKLSAgICA5LCAxNCwgMjM2LCAyMzgsIDksIDE0LCAyMzYsIDIzNywgOSwgMTQsIDIzNiwgMjM2LCA5LCAxNCwgMjM2LCAyMzUsIDksIAotICAgIDE0LCAyMzYsIDIzNCwgOSwgMTQsIDIzNiwgMjMzLCA5LCAxNCwgMjM2LCAyMzIsIDksIDE0LCAyMzYsIDIzMSwgOSwgMTQsIAotICAgIDIzNiwgMjMwLCA5LCAxNCwgMjM2LCAyMjksIDksIDE0LCAyMzYsIDIyOCwgOSwgMTQsIDIzNiwgMjI3LCA5LCAxNCwgMjM2LCAKLSAgICAyMjYsIDksIDE0LCAyMzYsIDIyNSwgOSwgMTQsIDIzNiwgMjI0LCA5LCAxNCwgMjM2LCAyMjMsIDksIDE0LCAyMzYsIDIyMiwgCi0gICAgOSwgMTQsIDIzNiwgMjIxLCA5LCAxNCwgMjM2LCAyMjAsIDksIDE0LCAyMzYsIDIxOSwgOSwgMTQsIDIzNiwgMjE4LCA5LCAKLSAgICAxNCwgMjM2LCAyMTcsIDksIDE0LCAyMzYsIDIxNiwgOSwgMTQsIDIzNiwgMjE1LCA5LCAxNCwgMjM2LCAyMTQsIDksIDE0LCAKLSAgICAyMzYsIDIxMywgOSwgMTQsIDIzNiwgMjEyLCA5LCAxNCwgMjM2LCAyMTEsIDksIDE0LCAyMzYsIDIxMCwgOSwgMTQsIDIzNiwgCi0gICAgMjA5LCA5LCAxNCwgMjM2LCAyMDgsIDksIDE0LCAyMzYsIDIwNywgOSwgMTQsIDIzNiwgMjA2LCA5LCAxNCwgMjM2LCAyMDUsIAotICAgIDksIDE0LCAyMzYsIDIwNCwgOSwgMTQsIDIzNiwgMjAzLCA5LCAxNCwgMjM2LCAyMDIsIDksIDE0LCAyMzYsIDIwMSwgOSwgCi0gICAgMTQsIDIzNiwgMjAwLCA5LCAxNCwgMjM2LCAxOTksIDksIDE0LCAyMzYsIDE5OCwgOSwgMTQsIDIzNiwgMTk3LCA5LCAxNCwgCi0gICAgMjM2LCAxOTYsIDksIDE0LCAyMzYsIDE5NSwgOSwgMTQsIDIzNiwgMTk0LCA5LCAxNCwgMjM2LCAxOTMsIDksIDE0LCAyMzYsIAotICAgIDE5MiwgOSwgMTQsIDIzNiwgMTkxLCA5LCAxNCwgMjM2LCAxOTAsIDksIDE0LCAyMzYsIDE4OSwgOSwgMTQsIDIzNiwgMTg4LCAKLSAgICA5LCAxNCwgMjM2LCAxODcsIDksIDE0LCAyMzYsIDE4NiwgOSwgMTQsIDIzNiwgMTg1LCA5LCAxNCwgMjM2LCAxODQsIDksIAotICAgIDE0LCAyMzYsIDE4MywgOSwgMTQsIDIzNiwgMTgyLCA5LCAxNCwgMjM2LCAxODEsIDksIDE0LCAyMzYsIDE4MCwgOSwgMTQsIAotICAgIDIzNiwgMTc5LCA5LCAxNCwgMjM2LCAxNzgsIDksIDE0LCAyMzYsIDE3NywgOSwgMTQsIDIzNiwgMTc2LCA5LCAxNCwgMjM2LCAKLSAgICAxNzUsIDksIDE0LCAyMzYsIDE3NCwgOSwgMTQsIDIzNiwgMTczLCA5LCAxNCwgMjM2LCAxNzIsIDksIDE0LCAyMzYsIDE3MSwgCi0gICAgOSwgMTQsIDIzNiwgMTcwLCA5LCAxNCwgMjM2LCAxNjksIDksIDE0LCAyMzYsIDE2OCwgOSwgMTQsIDIzNiwgMTY3LCA5LCAKLSAgICAxNCwgMjM2LCAxNjYsIDksIDE0LCAyMzYsIDE2NSwgOSwgMTQsIDIzNiwgMTY0LCA5LCAxNCwgMjM2LCAxNjMsIDksIDE0LCAKLSAgICAyMzYsIDE2MiwgOSwgMTQsIDIzNiwgMTYxLCA5LCAxNCwgMjM2LCAxNjAsIDksIDE0LCAyMzYsIDE1OSwgOSwgMTQsIDIzNiwgCi0gICAgMTU4LCA5LCAxNCwgMjM2LCAxNTcsIDksIDE0LCAyMzYsIDE1NiwgOSwgMTQsIDIzNiwgMTU1LCA5LCAxNCwgMjM2LCAxNTQsIAotICAgIDksIDE0LCAyMzYsIDE1MywgOSwgMTQsIDIzNiwgMTUyLCA5LCAxNCwgMjM2LCAxNTEsIDksIDE0LCAyMzYsIDE1MCwgOSwgCi0gICAgMTQsIDIzNiwgMTQ5LCA5LCAxNCwgMjM2LCAxNDgsIDksIDE0LCAyMzYsIDE0NywgOSwgMTQsIDIzNiwgMTQ2LCA5LCAxNCwgCi0gICAgMjM2LCAxNDUsIDksIDE0LCAyMzYsIDE0NCwgOSwgMTQsIDIzNiwgMTQzLCA5LCAxNCwgMjM2LCAxNDIsIDksIDE0LCAyMzYsIAotICAgIDE0MSwgOSwgMTQsIDIzNiwgMTQwLCA5LCAxNCwgMjM2LCAxMzksIDksIDE0LCAyMzYsIDEzOCwgOSwgMTQsIDIzNiwgMTM3LCAKLSAgICA5LCAxNCwgMjM2LCAxMzYsIDksIDE0LCAyMzYsIDEzNSwgOSwgMTQsIDIzNiwgMTM0LCA5LCAxNCwgMjM2LCAxMzMsIDksIAotICAgIDE0LCAyMzYsIDEzMiwgOSwgMTQsIDIzNiwgMTMxLCA5LCAxNCwgMjM2LCAxMzAsIDksIDE0LCAyMzYsIDEyOSwgOSwgMTQsIAotICAgIDIzNiwgMTI4LCA5LCAxNCwgMjM2LCAxMjcsIDksIDE0LCAyMzYsIDEyNiwgOSwgMTQsIDIzNiwgMTI1LCA5LCAxNCwgMjM2LCAKLSAgICAxMjQsIDksIDE0LCAyMzYsIDEyMywgOSwgMTQsIDIzNiwgMTIyLCA5LCAxNCwgMjM2LCAxMjEsIDksIDE0LCAyMzYsIDEyMCwgCi0gICAgOSwgMTQsIDIzNiwgMTE5LCA5LCAxNCwgMjM2LCAxMTgsIDksIDE0LCAyMzYsIDExNywgOSwgMTQsIDIzNiwgMTE2LCA5LCAKLSAgICAxNCwgMjM2LCAxMTUsIDksIDE0LCAyMzYsIDExNCwgOSwgMTQsIDIzNiwgMTEzLCA5LCAxNCwgMjM2LCAxMTIsIDksIDE0LCAKLSAgICAyMzYsIDExMSwgOSwgMTQsIDIzNiwgMTEwLCA5LCAxNCwgMjM2LCAxMDksIDksIDE0LCAyMzYsIDEwOCwgOSwgMTQsIDIzNiwgCi0gICAgMTA3LCA5LCAxNCwgMjM2LCAxMDYsIDksIDE0LCAyMzYsIDEwNSwgOSwgMTQsIDIzNiwgMTA0LCA5LCAxNCwgMjM2LCAxMDMsIAotICAgIDksIDE0LCAyMzYsIDEwMiwgOSwgMTQsIDIzNiwgMTAxLCA5LCAxNCwgMjM2LCAxMDAsIDksIDE0LCAyMzYsIDk5LCA5LCAxNCwgCi0gICAgMjM2LCA5OCwgOSwgMTQsIDIzNiwgOTcsIDksIDE0LCAyMzYsIDk2LCA5LCAxNCwgMjM2LCA5NSwgOSwgMTQsIDIzNiwgOTQsIAotICAgIDksIDE0LCAyMzYsIDkzLCA5LCAxNCwgMjM2LCA5MiwgOSwgMTQsIDIzNiwgOTEsIDksIDE0LCAyMzYsIDkwLCA5LCAxNCwgCi0gICAgMjM2LCA4OSwgOSwgMTQsIDIzNiwgODgsIDksIDE0LCAyMzYsIDg3LCA5LCAxNCwgMjM2LCA4NiwgOSwgMTQsIDIzNiwgODUsIAotICAgIDksIDE0LCAyMzYsIDg0LCA5LCAxNCwgMjM2LCA4MywgOSwgMTQsIDIzNiwgODIsIDksIDE0LCAyMzYsIDgxLCA5LCAxNCwgCi0gICAgMjM2LCA4MCwgOSwgMTQsIDIzNiwgNzksIDksIDE0LCAyMzYsIDc4LCA5LCAxNCwgMjM2LCA3NywgOSwgMTQsIDIzNiwgNzYsIAotICAgIDksIDE0LCAyMzYsIDc1LCA5LCAxNCwgMjM2LCA3NCwgOSwgMTQsIDIzNiwgNzMsIDksIDE0LCAyMzYsIDcyLCA5LCAxNCwgCi0gICAgMjM2LCA3MSwgOSwgMTQsIDIzNiwgNzAsIDksIDE0LCAyMzYsIDY5LCA5LCAxNCwgMjM2LCA2OCwgOSwgMTQsIDIzNiwgNjcsIAotICAgIDksIDE0LCAyMzYsIDY2LCA5LCAxNCwgMjM2LCA2NSwgNywgNCwgMjcsIDI0NCwgMTI1LCA3LCA0LCAyNywgMjQ0LCAxMjEsIAotICAgIDcsIDQsIDI3LCAyNDQsIDc2LCA3LCA0LCAyNywgMjQ0LCAxMjQsIDcsIDQsIDI3LCAyNDQsIDEyMywgNywgNCwgMjcsIDE5OSwgCi0gICAgMjIyLCA5MiwgMjE3LCAxNTIsIDcsIDQsIDI3LCAyMTgsIDE2OCwgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjI4LCAzOSwgMTUwLCAKLSAgICA0LCAyNywgMjMxLCA1OSwgMjQ1LCAyMTMsIDE1MCwgNCwgMjcsIDIzMSwgNTksIDIzNSwgMjI3LCAxNTAsIDQsIDI3LCAyMTMsIAotICAgIDE4MCwgMjI4LCAzOSwgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjExLCAxNjAsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQxLCAKLSAgICAxNTgsIDk0LCAyMjUsIDExLCAyMzUsIDUwLCAyMTQsIDExLCA5NCwgMjcsIDIxMSwgNiwgMjEwLCAyMzQsIDIxMCwgMjM0LCAKLSAgICAyMjUsIDIzOSwgOTQsIDEsIDI1NCwgMTM5LCAyNTMsIDE2MiwgOTQsIDEsIDIxMSwgMjQ3LCAyNTQsIDE3MCwgOTQsIDEsIAotICAgIDIxMSwgMjQ3LCAyNDgsIDE4OSwgOTQsIDEsIDIxMSwgMjQ3LCAyNDEsIDIzOCwgOTQsIDEsIDIxMSwgMjQ3LCAyMzQsIDI1MCwgCi0gICAgOTQsIDEsIDIxMSwgMjQ3LCAyMzMsIDk0LCA5NCwgMSwgMjExLCAyNDcsIDQwLCAyMzEsIDY1LCA5NCwgMSwgMjExLCAyNDcsIAotICAgIDIyMywgNjcsIDk0LCAxLCAyMTEsIDI0NywgMjE3LCAzOCwgOTQsIDEsIDI1NCwgMTM5LCA5NiwgNTAsIDk0LCAxLCAyMjAsIAotICAgIDIxLCAyLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIDEsIDIyMCwgMjEsIDIsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDEsIAotICAgIDIyMCwgMjEsIDIsIDI0OCwgMjA4LCAyMiwgMjIwLCAyMSwgMjQ3LCAxMjAsIDk0LCAxLCAyMjAsIDIxLCAyLCAyNDgsIDIwOCwgCi0gICAgMjIsIDIxOSwgMTU5LCAyNDcsIDEyMCwgOTQsIDEsIDExMiwgMiwgMjI1LCAyMzksIDk0LCAxLCAxMTIsIDIsIDIyNCwgNzYsIAotICAgIDk0LCAxLCAxMTIsIDIsIDIzMSwgMTcxLCA5NCwgMSwgMjUyLCAyOSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyNDIsIDIwMiwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyNDgsIDE5MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyNDEsIDIzOSwgMiwgMjMxLCAxNzEsIDk0LCAKLSAgICAxLCAyMTQsIDQsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjEwLCA5OCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTYsIDIzMSwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCA0MCwgMjM0LCAyNTEsIDIsIDI0OCwgMjA3LCAKLSAgICA5NCwgMSwgMjM0LCAyNTEsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjMzLCA5NSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMzEsIAotICAgIDY2LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyNywgMTk1LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyMSwgMjUwLCAyLCAyNDgsIAotICAgIDIwNywgOTQsIDEsIDQwLCAyMjUsIDIyMiwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjUsIDIyMiwgMiwgMjQ4LCAyMDcsIDk0LCAKLSAgICAxLCAyMTUsIDE4MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjQsIDQwLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyMywgNjgsIDIsIAotICAgIDI0OCwgMjA3LCA5NCwgMSwgMjIwLCAyMSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTcsIDM5LCAyLCAyNDgsIDIwNywgOTQsIAotICAgIDEsIDIxNCwgNCwgMiwgMjQxLCA2MSwgOTQsIDEsIDI1MiwgMjksIDIsIDIyMywgMTY5LCA5NCwgMSwgMjM0LCAyNTEsIDIsIAotICAgIDIyMywgMTY5LCA5NCwgMSwgMjI1LCAyMjIsIDIsIDIyMywgMTY5LCA5NCwgMjcsIDExMiwgMjMzLCA5NCwgMTAsIDEsIDExMiwgCi0gICAgMjEyLCA0NywgNTMsIDE3LCAxMCwgMSwgMTEyLCAyMTIsIDQ3LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDY1LCA1MywgMTcsIDEwLCAKLSAgICAxLCAyNTIsIDY1LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDY1LCA2NSwgMTcsIDEwLCAxLCAyNTIsIDY1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjI1LCAyMDYsIDUzLCAxNywgMTAsIDEsIDIyNSwgMjA2LCA0MCwgMTcsIDEwLCAxLCAyMjUsIDIwNiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjI1LCAyMDYsIDE0NywgMTcsIDEwLCAxLCAyNTIsIDUzLCA1MywgMTcsIDEwLCAxLCAyNTIsIDUzLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyNTIsIDUzLCA2NSwgMTcsIDEwLCAxLCAyNTIsIDUzLCAxNDcsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIxNSwgMTQ3LCA0MCwgMTcsIDEwLCAxLCAyMTUsIDE0NywgNjUsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDE0NywgCi0gICAgMTcsIDEwLCAxLCAyMTcsIDYsIDUzLCAxNywgMTAsIDEsIDIxNywgNiwgNDAsIDE3LCAxMCwgMSwgMjE3LCA2LCA2NSwgMTcsIAotICAgIDEwLCAxLCAyMTcsIDYsIDE0NywgMTcsIDEwLCAxLCAyMTUsIDE0OSwgNTMsIDE3LCAxMCwgMSwgMjE1LCAxNDksIDQwLCAxNywgCi0gICAgMTAsIDEsIDIxNSwgMTQ5LCA2NSwgMTcsIDEwLCAxLCAyMTUsIDE0OSwgMTQ3LCAxNywgMTAsIDEsIDIxMywgMjQ5LCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMTMsIDI0OSwgNDAsIDE3LCAxMCwgMSwgMjEzLCAyNDksIDY1LCAxNywgMTAsIDEsIDIxMywgMjQ5LCAKLSAgICAxNDcsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDUzLCAxNywgMTAsIDEsIDIyNSwgMjA0LCA0MCwgMTcsIDEwLCAxLCAyMjUsIAotICAgIDIwNCwgNjUsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDE0NywgMTcsIDEwLCAxLCAyNDYsIDQ0LCA1MywgMTcsIDEwLCAxLCAKLSAgICAyNDYsIDQ0LCA0MCwgMTcsIDEwLCAxLCAyNDYsIDQ0LCA2NSwgMTcsIDEwLCAxLCAyNDYsIDQ0LCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjI3LCAxNTQsIDUzLCAxNywgMTAsIDEsIDIyNywgMTU0LCA0MCwgMTcsIDEwLCAxLCAyMjcsIDE1NCwgNjUsIDE3LCAxMCwgCi0gICAgMSwgMjI3LCAxNTQsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDI3LCA1MywgMTcsIDEwLCAxLCAyMTcsIDI3LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyMTcsIDI3LCA2NSwgMTcsIDEwLCAxLCAyMTcsIDI3LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCAyNSwgNTMsIDE3LCAxMCwgCi0gICAgMSwgMjE3LCAyNSwgNDAsIDE3LCAxMCwgMSwgMjE3LCAyNSwgNjUsIDE3LCAxMCwgMSwgMjE3LCAyNSwgMTQ3LCAxNywgMTAsIAotICAgIDEsIDI0OCwgMTMzLCA1MywgMTcsIDEwLCAxLCAyNDgsIDEzMywgNDAsIDE3LCAxMCwgMSwgMjQ4LCAyMDIsIDUzLCAxNywgCi0gICAgMTAsIDEsIDI0OCwgMjAyLCA0MCwgMTcsIDEwLCAxLCAyNDYsIDcxLCA1MywgMTcsIDEwLCAxLCAyNDYsIDcxLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyNDgsIDEzMSwgNTMsIDE3LCAxMCwgMSwgMjQ4LCAxMzEsIDQwLCAxNywgMTAsIDEsIDIzNSwgMTIxLCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMzUsIDEyMSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAxNzIsIDUzLCAxNywgMTAsIDEsIDIyMiwgMTcyLCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMzQsIDE3NSwgNTMsIDE3LCAxMCwgMSwgMjM0LCAxNzUsIDQwLCAxNywgMTAsIDEsIDIzNCwgCi0gICAgMTc1LCA2NSwgMTcsIDEwLCAxLCAyMzQsIDE3NSwgMTQ3LCAxNywgMTAsIDEsIDI0MywgMTIzLCA1MywgMTcsIDEwLCAxLCAKLSAgICAyNDMsIDEyMywgNDAsIDE3LCAxMCwgMSwgMjQzLCAxMjMsIDY1LCAxNywgMTAsIDEsIDI0MywgMTIzLCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQyLCAxMDIsIDUzLCAxNywgMTAsIDEsIDI0MiwgMTAyLCA0MCwgMTcsIDEwLCAxLCAyNDIsIDEwMiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjQyLCAxMDIsIDE0NywgMTcsIDEwLCAxLCAyMjksIDMsIDUzLCAxNywgMTAsIDEsIDIyOSwgMywgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjI5LCAzLCA2NSwgMTcsIDEwLCAxLCAyMjksIDMsIDE0NywgMTcsIDEwLCAxLCAyMjgsIDYzLCAyNDIsIDIxOSwgCi0gICAgNTMsIDE3LCAxMCwgMSwgMjI4LCA2MywgMjQyLCAyMTksIDQwLCAxNywgMTAsIDEsIDIyMiwgMjE1LCA1MywgMTcsIDEwLCAxLCAKLSAgICAyMjIsIDIxNSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAyMTUsIDY1LCAxNywgMTAsIDEsIDIyMiwgMjE1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQxLCAyMTksIDIsIDc5LCA3NywgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDIsIDc5LCA3NywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDIsIDE3MiwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0NywgMTQyLCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQ3LCAxNDIsIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MiwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0NywgMTQyLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgNzksIDI1MiwgMTMzLCA1MywgMTcsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDQwLCAxNywgMTAsIDEsIDc5LCAyNTIsIDEzMywgCi0gICAgMiwgMjAyLCA3NywgNTMsIDE3LCAxMCwgMSwgNzksIDI1MiwgMTMzLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxNiwgNTksIAotICAgIDQ4LCAxMCwgMTYsIDU5LCA1MSwgMTAsIDE2LCAxMTMsIDE3MCwgNDgsIDEwLCAxNiwgMTEzLCAxNzAsIDUxLCAxMCwgMTYsIAotICAgIDEzNCwgMTcwLCA0OCwgMTAsIDE2LCAxMzQsIDE3MCwgNTEsIDEwLCAxNiwgMTM0LCAxNzAsIDIyNSwgNywgMjQ2LCAxMDQsIAotICAgIDQ4LCAxMCwgMTYsIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCA1MSwgMTAsIDE2LCAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgCi0gICAgMTYsIDI0NCwgMTEsIDE3MCwgNTEsIDEwLCAxNiwgNTIsIDY3LCAyNTIsIDE0MSwgNTEsIDEwLCAxNiwgMTEzLCAxNzAsIAotICAgIDIxMywgMTg5LCA0OCwgMTAsIDE2LCAxMTMsIDE3MCwgMjEzLCAxODksIDUxLCAxMCwgMTYsIDIyMiwgMjMzLCAxMCwgMTYsIAotICAgIDQsIDIxNywgODEsIDQ4LCAxMCwgMTYsIDQsIDIxNywgODEsIDUxLCAxMCwgMSwgMjI5LCA4MCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjI5LCA4MCwgNDAsIDE3LCAxMCwgMSwgMjI5LCA4MCwgNjUsIDE3LCAxMCwgMSwgMjI5LCA4MCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDEwNCwgNTMsIDE3LCAxMCwgMSwgMTA0LCA0MCwgMTcsIDEwLCAxLCAyMjYsIDIzNSwgNTMsIDE3LCAxMCwgMSwgMjI2LCAKLSAgICAyMzUsIDQwLCAxNywgMTAsIDEsIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAxLCAyMTAsIDIxMywgNDAsIDE3LCAxMCwgMSwgCi0gICAgMTA0LCAyLCAyMDIsIDc3LCA1MywgMTcsIDEwLCAxLCAyMTQsIDAsIDUzLCAxNywgMTAsIDEsIDIxNCwgMCwgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjM0LCA3MywgMjI2LCAyMzUsIDUzLCAxNywgMTAsIDEsIDIzNCwgNzMsIDIyNiwgMjM1LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyMzQsIDczLCAyMTAsIDIxMywgNTMsIDE3LCAxMCwgMSwgMjM0LCA3MywgMjEwLCAyMTMsIDQwLCAxNywgMTAsIDEsIAotICAgIDE2MCwgNTMsIDE3LCAxMCwgMSwgMTYwLCA0MCwgMTcsIDEwLCAxLCAxNjAsIDY1LCAxNywgMTAsIDEsIDE2MCwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIxNCwgMjA3LCAyMzQsIDE4NiwgMjM0LCA3MywgMTEyLCAyMzEsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjE0LCAKLSAgICAyMDcsIDIzNCwgMTg2LCAyMzQsIDczLCAxMTIsIDIzMSwgMTkzLCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTEyLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIAotICAgIDIwMiwgNzcsIDIsIDI1NCwgMjQ0LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDI1NCwgMjQ0LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMiwgMzEsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgCi0gICAgMiwgMjEyLCAzMSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMDQsIDUzLCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMiwgMTA0LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyNiwgMjM1LCA1MywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyNiwgMjM1LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIAotICAgIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMCwgMjEzLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDIwMiwgNzcsIDIsIDE2MCwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNjAsIDQwLCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTYwLCA2NSwgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAKLSAgICAyMDIsIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAyMDIsIAotICAgIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE0LCAyMDcsIDIzNCwgNzMsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDUzLCAxNywgMTAsIDEsIDI0NCwgMTY4LCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDE0NywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMjIsIAotICAgIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDI1MiwgNTUsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgCi0gICAgNTUsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIAotICAgIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIAotICAgIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDExMiwgMjMxLCAKLSAgICAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDE1MSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDUzLCAxNywgMTAsIAotICAgIDI3LCAxNTEsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDY2LCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMjIsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTUxLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMiwgMjcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgCi0gICAgMjE3LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyNDgsIAotICAgIDIxNywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAKLSAgICA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgMTUxLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDE1MSwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMjM0LCAxMzAsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTEyLCAyMzEsIDE5MywgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDEyMiwgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDIyNCwgODIsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyNCwgODIsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzNCwgMjUxLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjM0LCAKLSAgICAyNTEsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIAotICAgIDI3LCAyMzQsIDI1MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMjMzLCAxMDMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCAKLSAgICAxMjIsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgNjYsIDUzLCAxNywgCi0gICAgMTAsIDI3LCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyOCwgNjMsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgCi0gICAgNjMsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNDEsIAotICAgIDIxOSwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMTUxLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE2LCAyMDMsIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMywgOTYsIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDExMiwgMjMxLCAxOTMsIDIsIDIxOCwgMjMsIDExMiwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDI0OCwgMTgzLCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjM0LCAKLSAgICAyMDQsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDQsIDE2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIAotICAgIDI0OCwgMTg1LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjM0LCAyMDYsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAKLSAgICAyLCAyMTgsIDIzLCAxMTIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgCi0gICAgNzcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMTYsIDE5MywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAyMjgsIDYzLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE2LCAxOTMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAKLSAgICAxMDMsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAKLSAgICA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIyOCwgNjMsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIyOCwgNjMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDExMiwgMjMxLCAxOTMsIDIsIDIxOCwgMjMsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMjMsIDk2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDc5LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMjAyLCA3NywgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDI0MSwgMjE5LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjUyLCA1NSwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMTcsIDgsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMTcsIAotICAgIDgsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAKLSAgICAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgCi0gICAgMTMwLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAKLSAgICAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIAotICAgIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDEyMiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjQ0LCAxNDMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyNDQsIAotICAgIDE0MywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjQsIAotICAgIDgyLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAKLSAgICAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzNCwgCi0gICAgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMjIsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCA2NSwgCi0gICAgMTcsIDEwLCAyNywgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCAKLSAgICAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgMjE4LCAKLSAgICAyMywgMTEyLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgNzksIAotICAgIDIsIDIwMiwgNzcsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjE2LCAxOTMsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIwLCA2MCwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgMTAzLCAxNDcsIAotICAgIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIDE0NywgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjQxLCAyMTksIDE0NywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAKLSAgICAyMjAsIDk0LCAyLCAyNDQsIDE2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDgsIDE4NSwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjAsIDk0LCAyLCAyMzQsIDIwNiwgMTQ3LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTEyLCAyMzEsIDE5MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA1MywgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMTUxLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjAsIAotICAgIDYwLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgCi0gICAgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgCi0gICAgMiwgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjE3LCAKLSAgICA4MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjU0LCAxOTcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjIzLCA5NiwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjIzLCA5NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjEsIDE2NywgMiwgMTIyLCAxNDcsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDE0NywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIxMCwgMTEyLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAxMTIsIDIsIDI0NCwgMTY0LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMTEyLCAyLCAyNDQsIDE2NCwgNTMsIDE3LCAyMjYsIDE0NiwgNDMsIDIyNiwgMywgMjI2LCAxNDYsIDQ0LCAyMjYsIDMsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDIsIDE1MSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgCi0gICAgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgOCwgMiwgNjYsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxMjIsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDEyMiwgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAKLSAgICAxNjcsIDIsIDE1MSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgMTIyLCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIAotICAgIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgCi0gICAgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyMjIsIDI3LCAyLCAxMjIsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAKLSAgICAyLCAyMzQsIDEzMCwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIyMCwgNjAsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI0OCwgMjE3LCAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAKLSAgICAxMzAsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgODEsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIAotICAgIDY2LCA0MCwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAKLSAgICA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI0NCwgCi0gICAgMTQzLCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDEyMiwgMiwgNjYsIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAKLSAgICAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCAxNTEsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCAxNTEsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIAotICAgIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzMywgCi0gICAgMTAzLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIAotICAgIDI3LCA2NiwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDY2LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNjYsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDIsIDE1MSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCAyLCAyMzQsIDEzMCwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCAKLSAgICAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIAotICAgIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDE1MSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxNTEsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgCi0gICAgMTMwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTIyLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDE1MSwgMiwgCi0gICAgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDY2LCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDEyMiwgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIAotICAgIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAxNTEsIDIsIAotICAgIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAxMjIsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgCi0gICAgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNTIsIAotICAgIDU1LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNjYsIDIsIDY2LCA2NSwgCi0gICAgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjIsIDQsIDIxNCwgMTI4LCAyNTMsIDIzOCwgMjM0LCA0LCAyMTgsIDEzMCwgCi0gICAgNSwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgNzgsIDIxNCwgMTI4LCAyNTMsIDIzOCwgMjM0LCA0LCAyMTgsIDEzMCwgNSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI1NCwgMTUzLCA1MywgMTcsIDEwLCAyNywgMjU0LCAxODMsIDUzLCAxNywgMTAsIDI3LCAyMzAsIDE1MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIyMiwgNSwgNTMsIDE3LCAxMCwgMjcsIDIyMywgMTQzLCA1MywgMTcsIDEwLCAyNywgMjU0LCAKLSAgICAxNzIsIDUzLCAxNywgMTAsIDI3LCAyMTIsIDQ5LCA1MywgMTcsIDEwLCAyNywgMjIyLCA0LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjIyLCAzLCAyNTQsIDE3MiwgMjEyLCA0OCwgMTAsIDI3LCAyMzUsIDEzNCwgMjIzLCAzNCwgNTAsIDEwLCAyNywgMjUxLCAKLSAgICAyMzAsIDI1NCwgMzksIDI1NCwgNDAsIDQ1LCAyMjEsIDE1NiwgNDUsIDIyMSwgNDUsIDQ1LCAyMjAsIDIzMywgNDUsIDIyMCwgCi0gICAgMjIyLCA0NSwgMjIwLCAyMTEsIDQ1LCAyMjAsIDIwMCwgNDUsIDIyMCwgMTg5LCA0NSwgMjIwLCAxNzgsIDQ1LCAyMjAsIAotICAgIDE2NywgNDUsIDIyMSwgMTU1LCA0NSwgMjIxLCAxNDQsIDQ1LCAyMjEsIDEzMywgNDUsIDIyMSwgMTIyLCA0NSwgMjIxLCAKLSAgICAxMTEsIDQ1LCAyMjEsIDEwMCwgNDUsIDIyMSwgODksIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0OSwgMjE5LCAyMjQsIAotICAgIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAxMDksIDI0OSwgMjE5LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAxMDksIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ5LCAyMjYsIDIyNCwgMTk0LCAyNDQsIDIwLCAKLSAgICAzMSwgNjcsIDIyMCwgMTUwLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDMxLCA3OCwgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgMjI0LCAxMywgNzgsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA3MSwgMjMzLCAyMCwgMTI3LCAKLSAgICAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNzEsIDIzMywgMjAsIDI1MSwgMTU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgCi0gICAgMzEsIDY3LCAyMDMsIDI0NSwgMTYzLCAzOCwgMjcsIDQzLCAyNDIsIDI3LCAzOCwgMjcsIDQ0LCAyNDIsIDI3LCAzOCwgNTIsIAotICAgIDIxNiwgODksIDQzLCAyNDIsIDI3LCAzOCwgNTIsIDIxNiwgODksIDQ0LCAyNDIsIDI3LCAzOCwgMjMxLCAyMzMsIDQzLCAKLSAgICAyNDIsIDI3LCAzOCwgMjMxLCAyMzMsIDQ0LCAyNDIsIDI3LCAzOCwgMjQ5LCAxOTcsIDIzMSwgMjMyLCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCAxMTMsIDU5LCAyMzMsIDU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDE2MCwgCi0gICAgMjQ4LCAxNTYsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0NSwgMTUxLCAyNDgsIDE1NiwgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgMTIxLCAyMzIsIDIxMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjEyLCAzMiwgMTIxLCAyMzIsIAotICAgIDIxMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDIyNiwgMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgCi0gICAgNDQsIDIyNiwgMywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDI0OSwgOTksIDEyNywgMjI0LCAxOTQsIDI0NCwgCi0gICAgMjAsIDMxLCA2NywgNDQsIDI0OSwgOTksIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQzLCA4NSwgMjMzLCAyMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgODUsIAotICAgIDIzMywgMjAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNTIsIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAKLSAgICAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDMsIDI0OSwgMTYxLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCAyNDksIAotICAgIDE2MSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNzEsIDI0OSwgMTYxLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA3MSwgMjQ5LCAxNjEsIDEyNywgMjIwLCAxMzEsIDI0NywgMTIwLCA3MSwgMjIwLCAxMzEsIAotICAgIDI0NywgMTIwLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNDIsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCAKLSAgICA2NywgNDQsIDQyLCAxMjcsIDI0OCwgMTU1LCAyMjYsIDExOSwgMjUwLCAxNzIsIDIyNiwgMTE5LCAyMTIsIDMyLCAyMjYsIAotICAgIDExOSwgNTIsIDIxMiwgMzIsIDIyNiwgMTE5LCAyNDgsIDE1NSwgMTIxLCAyMzIsIDIxMywgMjUwLCAxNzIsIDEyMSwgMjMyLCAKLSAgICAyMTMsIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTMsIDQsIDI0OSwgMjE5LCA0LCAxMDksIDI0OSwgMjE5LCA0LCAyNDMsIDIyOSwgCi0gICAgMjE4LCAxMjksIDQsIDIyMCwgMTUwLCA0LCAyNDksIDIyNiwgNCwgMjI0LCAxMywgNzgsIDQsIDI0NSwgMzEsIDc4LCA0LCAKLSAgICAyNDUsIDE2MCwgMjQ4LCAxNTYsIDQsIDQzLCAyMjYsIDMsIDQsIDQ0LCAyMjYsIDMsIDQsIDQzLCAyNDksIDk5LCAxMjcsIDQsIAotICAgIDQ0LCAyNDksIDk5LCAxMjcsIDQsIDQzLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNCwgNDQsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0LCA1NCwgNTAsIDQsIDI1NCwgMTI2LCA0LCAyNTMsIDIxNiwgNCwgOTYsIDUwLCA0LCAyNDAsIDE2NywgNCwgMjMzLCAKLSAgICAxNSwgNTAsIDQsIDI0MiwgMTMwLCA1MCwgNCwgMjQ1LCA5OCwgNTAsIDQsIDIyMywgNTAsIDIxOSwgNDYsIDQsIDI0NywgCi0gICAgMTMyLCA1MCwgNCwgMjI1LCAxODIsIDUwLCA0LCAyNDksIDIxNywgMjUzLCAyMDYsIDEwLCAyNDQsIDE2NCwgNTMsIDE3LCAKLSAgICAxMCwgMjE3LCA0NCwgMiwgMjQ0LCAxNjQsIDQ4LCAxMCwgMjQ4LCAxODMsIDUzLCAxNywgMTAsIDIxNywgNzgsIDI0NCwgMSwgCi0gICAgMTAsIDIzNCwgMjA0LCA1MywgMTcsIDEwLCAyNDQsIDE2NiwgNTMsIDE3LCAxMCwgMjQ0LCAxNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNDgsIDE4NSwgNTMsIDE3LCAxMCwgMjQ4LCAxODUsIDE0NywgMTcsIDEwLCAyMzQsIDIwNiwgNTMsIDE3LCAxMCwgMjM0LCAKLSAgICAyMDYsIDE0NywgMTcsIDEwLCAyMjAsIDk0LCA1MywgMTcsIDEwLCAyMjAsIDk0LCAxNDcsIDE3LCAxMCwgMjE4LCA0NiwgNTMsIAotICAgIDE3LCAxMCwgMjE4LCA0NiwgMTQ3LCAxNywgMTAsIDEsIDIwMiwgNTMsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMzEsIDIyOCwgCi0gICAgNzcsIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjMxLCAyMjgsIDc3LCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgNzcsIAotICAgIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA3NywgNTMsIAotICAgIDE3LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDI1MiwgNDMsIDUzLCAKLSAgICAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCAyNTIsIDQzLCA0MCwgMTcsIDEwLCAxLCA3OSwgMiwgMjAyLCA3NywgNTMsIDE3LCAKLSAgICAxMCwgMSwgNzksIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDEsIDc5LCAyLCAyMDIsIDc3LCA2NSwgMTcsIDEwLCAxLCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMTQ3LCAxNywgMTAsIDEsIDExMiwgNTMsIDE3LCAxMCwgMSwgMTEyLCA0MCwgMTcsIDEwLCAxLCAyNTIsIAotICAgIDU1LCA1MywgMTcsIDEwLCAxLCAyNTIsIDU1LCA0MCwgMTcsIDEwLCAxLCAyNTIsIDU1LCA2NSwgMTcsIDEwLCAxLCAyNTIsIAotICAgIDU1LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NSwgNTMsIDE3LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NSwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjE3LCA4LCA1MywgMTcsIDEwLCAxLCAyMTcsIDgsIDQwLCAxNywgMTAsIDEsIDIxNywgOCwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjE3LCA4LCAxNDcsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDUzLCAxNywgMTAsIDEsIDIxNiwgMTkzLCA0MCwgCi0gICAgMTcsIDEwLCAxLCAyMTYsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDE0NywgMTcsIDEwLCAxLCAxNTEsIDUzLCAKLSAgICAxNywgMTAsIDEsIDE1MSwgNDAsIDE3LCAxMCwgMSwgMTUxLCA2NSwgMTcsIDEwLCAxLCAxNTEsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAxMjIsIDUzLCAxNywgMTAsIDEsIDEyMiwgNDAsIDE3LCAxMCwgMSwgMTIyLCA2NSwgMTcsIDEwLCAxLCAxMjIsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMSwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDEsIDIzNCwgMTMwLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMzQsIDEzMCwgMTQ3LCAxNywgMTAsIDEsIDI0OCwgMTk2LCA1MywgMTcsIDEwLCAxLCAyNDgsIDE5NiwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjE2LCAyMDMsIDUzLCAxNywgMTAsIDEsIDIxNiwgMjAzLCA0MCwgMTcsIDEwLCAxLCAyMjMsIDk2LCAKLSAgICA1MywgMTcsIDEwLCAxLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAxLCAyMTAsIDEwOSwgNTMsIDE3LCAxMCwgMSwgMjEwLCAxMDksIAotICAgIDQwLCAxNywgMTAsIDEsIDIyMSwgMTY3LCA1MywgMTcsIDEwLCAxLCAyMjEsIDE2NywgNDAsIDE3LCAxMCwgMSwgMjIxLCAKLSAgICAxNjcsIDY1LCAxNywgMTAsIDEsIDIyMSwgMTY3LCAxNDcsIDE3LCAxMCwgMSwgMjIwLCA2MCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjIwLCA2MCwgNDAsIDE3LCAxMCwgMSwgMjIwLCA2MCwgNjUsIDE3LCAxMCwgMSwgMjIwLCA2MCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjcsIDUzLCAxNywgMTAsIDEsIDIyMiwgMjcsIDQwLCAxNywgMTAsIDEsIDIyMiwgMjcsIDY1LCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjcsIDE0NywgMTcsIDEwLCAxLCAyNDgsIDIxNywgNTMsIDE3LCAxMCwgMSwgMjQ4LCAyMTcsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0OCwgMjE3LCA2NSwgMTcsIDEwLCAxLCAyNDgsIDIxNywgMTQ3LCAxNywgMTAsIDEsIDIxNywgODEsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIxNywgODEsIDQwLCAxNywgMTAsIDEsIDIxNywgODEsIDY1LCAxNywgMTAsIDEsIDIxNywgODEsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMTAsIDExMiwgNTMsIDE3LCAxMCwgMSwgMjEwLCAxMTIsIDQwLCAxNywgMTAsIDEsIDIxMCwgMTEyLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMTAsIDExMiwgMTQ3LCAxNywgMTAsIDEsIDI1NCwgMTk3LCA1MywgMTcsIDEwLCAxLCAyNTQsIDE5NywgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIDY1LCAxNywgMTAsIDEsIDI1NCwgMTk3LCAxNDcsIDE3LCAxMCwgMSwgMjQyLCAKLSAgICAyNDUsIDUzLCAxNywgMTAsIDEsIDI0MiwgMjQ1LCA0MCwgMTcsIDEwLCAxLCAyNDIsIDI0NSwgNjUsIDE3LCAxMCwgMSwgCi0gICAgMjQyLCAyNDUsIDE0NywgMTcsIDEwLCAxLCAyNDQsIDE0MywgNTMsIDE3LCAxMCwgMSwgMjQ0LCAxNDMsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0NCwgMTQzLCA2NSwgMTcsIDEwLCAxLCAyNDQsIDE0MywgMTQ3LCAxNywgMTAsIDEsIDIyNCwgODIsIDUzLCAxNywgCi0gICAgMTAsIDEsIDIyNCwgODIsIDQwLCAxNywgMTAsIDEsIDIyNCwgODIsIDY1LCAxNywgMTAsIDEsIDIyNCwgODIsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMzQsIDI1MSwgNTMsIDE3LCAxMCwgMSwgMjM0LCAyNTEsIDQwLCAxNywgMTAsIDEsIDIzNCwgMjUxLCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMzQsIDI1MSwgMTQ3LCAxNywgMTAsIDEsIDIzMywgMTAzLCA1MywgMTcsIDEwLCAxLCAyMzMsIDEwMywgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIDY1LCAxNywgMTAsIDEsIDIzMywgMTAzLCAxNDcsIDE3LCAxMCwgMSwgNjYsIDUzLCAKLSAgICAxNywgMTAsIDEsIDY2LCA0MCwgMTcsIDEwLCAxLCA2NiwgNjUsIDE3LCAxMCwgMSwgNjYsIDE0NywgMTcsIDEwLCAxLCAyMjgsIAotICAgIDYzLCA1MywgMTcsIDEwLCAxLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAxLCAyMjgsIDYzLCA2NSwgMTcsIDEwLCAxLCAyMjgsIAotICAgIDYzLCAxNDcsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCA0MCwgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAxLCAyMTIsIDMxLCA1MywgMTcsIDEwLCAKLSAgICAxLCAyMTIsIDMxLCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAxLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA0MCwgMTcsIDEwLCAxLCA3OSwgNTMsIDE3LCAxMCwgMSwgNzksIDQwLCAxNywgMTAsIDEsIDc5LCA2NSwgMTcsIDEwLCAxLCAKLSAgICA3OSwgMTQ3LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAKLSAgICAyMDIsIDc3LCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIwMiwgMjUyLCA0MywgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIAotICAgIDIwMiwgMjUyLCA0MywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgCi0gICAgMiwgMTEyLCA0MCwgMTcsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMjgsIDczLCAyMTksIDE4LCAxMjYsIDI0NSwgMzEsIDc4LCAKLSAgICAxMjYsIDIyMywgMjU0LCA3OCwgMTI2LCA1NCwgNTAsIDEyNiwgMjQ3LCAxMzIsIDUwLCAxMjYsIDIyNSwgMTgyLCA1MCwgCi0gICAgMTI2LCAyNTQsIDEyNiwgMTI2LCAyNTQsIDU3LCAxMjYsIDQzLCAyMjYsIDMsIDEyNiwgNDQsIDIyNiwgMywgMTI2LCAyNTMsIAotICAgIDIxNiwgMTI2LCA5NiwgNTAsIDEyNiwgMjQ5LCAyMTksIDEyNiwgMjQwLCAxNjcsIDEyNiwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAxMjYsIDIxOSwgNDYsIDEyNiwgMjEsIDIxMCwgODYsIDEyNiwgMjEsIDExMCwgMTI2LCAyMSwgMTA1LCAxMjYsIDIxLCAxNTgsIAotICAgIDEyNiwgMjEsIDE2MSwgMTI2LCAyMSwgMTg5LCAxMjYsIDIxLCAxOTQsIDEyNiwgMjEsIDE5OCwgMTI2LCAyMSwgMTk1LCAKLSAgICAxMjYsIDIxLCAyMDAsIDEyNiwgMjQ5LCAyMjYsIDEyNiwgMjIwLCAxNTAsIDEyNiwgMjMzLCAxNSwgNTAsIDEyNiwgMjQ1LCAKLSAgICA5OCwgNTAsIDEyNiwgMjQyLCAxMzAsIDUwLCAxMjYsIDIyNCwgMTMsIDc4LCAxMjYsIDI0OSwgMjE3LCAyNTMsIDIwNiwgCi0gICAgMTI2LCA3LCA2LCAxLCA2MSwgMTI2LCA3LCA2LCAxLCAyNTMsIDE1OCwgMTI2LCA3LCA2LCAxLCAyNTEsIDY2LCAxMjYsIDcsIAotICAgIDYsIDEsIDI0OSwgNjAsIDEyNiwgNywgNiwgMSwgNzUsIDEyNiwgNywgNiwgMSwgMjQ1LCA2LCAxMjYsIDcsIDYsIDEsIDI0MywgCi0gICAgMjAyLCAxMjYsIDcsIDYsIDEsIDI0MiwgNjAsIDEyNiwgNywgNiwgMSwgNzMsIDEyNiwgNywgNiwgMSwgMjM1LCAxNDQsIAotICAgIDEyNiwgNywgNiwgMSwgMjM1LCAyMywgMTI2LCA3LCA2LCAxLCAxNTYsIDEyNiwgNywgNiwgMSwgMTkzLCAxMjYsIDcsIDYsIAotICAgIDEsIDIzMCwgMjUsIDEyNiwgNywgNiwgMSwgNzYsIDEyNiwgNywgNiwgMSwgMjI2LCAxMDUsIDEyNiwgNywgNiwgMSwgMjI0LCAKLSAgICA5NiwgMTI2LCA3LCA2LCAxLCAxNTMsIDEyNiwgNywgNiwgMSwgMjIyLCA5MSwgMTI2LCA3LCA2LCAxLCAyMTcsIDE1MiwgCi0gICAgMTI2LCA3LCA2LCAxLCA3MCwgMTI2LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTI2LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjYsIDcsIAotICAgIDYsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDYsIDEsIDIxMSwgMTE3LCAxMjYsIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjYsIDQzLCAKLSAgICA0MiwgMTI3LCAxMjYsIDIyMywgNTAsIDIxOSwgNDYsIDEyNiwgNDQsIDQyLCAxMjcsIDEyNiwgMjUwLCAzMSwgMjU1LCAxNCwgCi0gICAgMTI2LCAxMjEsIDIzMiwgMjEzLCAxMjYsIDI0MiwgMTM3LCAyNTUsIDE0LCAxMjYsIDcsIDQsIDEsIDYxLCAxMjYsIDcsIDQsIAotICAgIDEsIDI1MywgMTU4LCAxMjYsIDcsIDQsIDEsIDI1MSwgNjYsIDEyNiwgNywgNCwgMSwgMjQ5LCA2MCwgMTI2LCA3LCA0LCAxLCAKLSAgICA3NSwgMTI2LCA3LCA0LCAxLCAyNDUsIDYsIDEyNiwgNywgNCwgMSwgMjQzLCAyMDIsIDEyNiwgNywgNCwgMSwgMjQyLCA2MCwgCi0gICAgMTI2LCA3LCA0LCAxLCA3MywgMTI2LCA3LCA0LCAxLCAyMzUsIDE0NCwgMTI2LCA3LCA0LCAxLCAyMzUsIDIzLCAxMjYsIDcsIAotICAgIDQsIDEsIDE1NiwgMTI2LCA3LCA0LCAxLCAxOTMsIDEyNiwgNywgNCwgMSwgMjMwLCAyNSwgMTI2LCA3LCA0LCAxLCA3NiwgCi0gICAgMTI2LCA3LCA0LCAxLCAyMjYsIDEwNSwgMTI2LCA3LCA0LCAxLCAyMjQsIDk2LCAxMjYsIDcsIDQsIDEsIDE1MywgMTI2LCA3LCAKLSAgICA0LCAxLCAyMjIsIDkxLCAxMjYsIDcsIDQsIDEsIDIxNywgMTUyLCAxMjYsIDcsIDQsIDEsIDcwLCAxMjYsIDcsIDQsIDEsIAotICAgIDIxNCwgMTA1LCAxMjYsIDcsIDQsIDEsIDIxMiwgOTgsIDEyNiwgNywgNCwgMSwgMjExLCAxNzgsIDEyNiwgNywgNCwgMSwgCi0gICAgMjExLCAxMTcsIDEyNiwgNywgNCwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIDI0OSwgOTksIDEyNywgMTI2LCA2NywgMjMyLCAKLSAgICAyMTMsIDEyNiwgNDQsIDI0OSwgOTksIDEyNywgMTI2LCAxODIsIDEyNiwgNDMsIDcxLCAyMjYsIDMsIDEyNiwgNDQsIDcxLCAKLSAgICAyMjYsIDMsIDEwMSwgMTA5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDEwMSwgNDMsIDI0OSwgMTYxLCAxMjcsIDEwMSwgNDQsIAotICAgIDI0OSwgMTYxLCAxMjcsIDEwMSwgMTA5LCAyNDksIDIxOSwgMTAxLCA1NiwgMjMwLCAyMjQsIDI0NywgMTIwLCAxMDEsIDU2LCAKLSAgICAxLCAyMTEsIDIyNywgMTAxLCA1NiwgMSwgNCwgNjEsIDEwMSwgNTYsIDEsIDQsIDczLCAxMDEsIDU2LCAxLCA0LCA3MCwgCi0gICAgMTAxLCA1NiwgMSwgNCwgNzUsIDEwMSwgNTYsIDEsIDQsIDc2LCAxMDEsIDU2LCAxLCA0LCAxOTEsIDEwMSwgNTYsIDEsIDQsIAotICAgIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCA0LCAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgNCwgMjE1LCAxMTgsIDEwMSwgMjM0LCAKLSAgICAyMDEsIDIyNCwgMTczLCAyMTksIDMxLCA3OCwgMTAxLCA1NiwgMSwgNjEsIDEwMSwgNTYsIDEsIDczLCAxMDEsIDU2LCAxLCAKLSAgICA3MCwgMTAxLCA1NiwgMSwgNzUsIDEwMSwgNTYsIDEsIDc2LCAxMDEsIDU2LCAxLCAxNzYsIDEwMSwgNTYsIDEsIDIzNCwgOTIsIAotICAgIDEwMSwgNTYsIDEsIDIzMywgMjE3LCAxMDEsIDU2LCAxLCAyMzQsIDE4MiwgMTAxLCA1NiwgMSwgMjM0LCAyOCwgMTAxLCA1NiwgCi0gICAgMSwgMjA2LCAxMDEsIDU2LCAxLCAyMTksIDE5MSwgMTAxLCA1NiwgMSwgMjE4LCA4MywgMTAxLCA1NiwgMSwgMjIxLCAxODEsIAotICAgIDEwMSwgNTYsIDEsIDIxOSwgNTgsIDEwMSwgNTYsIDEsIDIxNywgMTA1LCAxMDEsIDU2LCAxLCAyMTYsIDExNywgMTAxLCA1NiwgCi0gICAgMSwgMjE1LCAxMTgsIDEwMSwgNTYsIDEsIDIxNywgMjIsIDEwMSwgNTYsIDEsIDExMSwgMTAxLCA1NiwgMSwgMTk3LCAxMDEsIAotICAgIDU2LCAxLCAyMjgsIDIzMywgMTAxLCA1NiwgMSwgMjI3LCAyMzcsIDEwMSwgNTYsIDEsIDIyOSwgMTA3LCAxMDEsIDU2LCAxLCAKLSAgICAyMjgsIDc0LCAxMDEsIDU2LCAxLCAxNjIsIDEwMSwgNTYsIDEsIDI0MSwgMTgwLCAxMDEsIDU2LCAxLCAyNDAsIDIyMiwgCi0gICAgMTAxLCA1NiwgMSwgMjQxLCAyMzgsIDEwMSwgNTYsIDEsIDI0MSwgNjgsIDEwMSwgNTYsIDEsIDE4NCwgMTAxLCA1NiwgMSwgCi0gICAgMjMwLCAyMzAsIDEwMSwgNTYsIDEsIDIzMCwgMTAyLCAxMDEsIDU2LCAxLCAyMzEsIDkxLCAxMDEsIDU2LCAxLCAyMzAsIAotICAgIDE2MSwgMTAxLCA1NiwgMSwgMTkxLCAxMDEsIDU2LCAxLCAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgMjEwLCAyNDQsIDEwMSwgCi0gICAgNTYsIDEsIDIwNSwgMTAxLCA1NiwgMSwgMjIzLCAzNSwgMTAxLCA1NiwgMSwgMjIyLCAxNDAsIDEwMSwgNTYsIDEsIDIyMywgCi0gICAgMTI4LCAxMDEsIDU2LCAxLCAyMjIsIDIxMSwgMTAxLCA1NiwgMSwgMjEyLCA2NSwgMTAxLCA1NiwgMSwgMjMwLCAyNSwgMTAxLCAKLSAgICA1NiwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCAxMDEsIDU2LCAyMjAsIDE1NSwgMjE5LCAzMSwgNzgsIDEwMSwgMjQsIDI0NCwgCi0gICAgMTAzLCAxMDEsIDI0LCAxLCAyMzQsIDU4LCAxMDEsIDI0LCAxLCAyMTgsIDIxNSwgMTAxLCAyNCwgMSwgMjM0LCA1MSwgMTAxLCAKLSAgICAyNCwgMSwgMjI4LCAyMjYsIDEwMSwgMjQsIDEsIDIyOCwgMjI0LCAxMDEsIDI0LCAxLCAyMjgsIDIyMywgMTAxLCAyNCwgMSwgCi0gICAgMjE2LCAxMDEsIDEwMSwgMjQsIDEsIDIxOCwgMjA0LCAxMDEsIDI0LCAxLCAyMjMsIDI2LCAxMDEsIDI0LCAxLCAyMjMsIDIxLCAKLSAgICAxMDEsIDI0LCAxLCAyMjMsIDE4LCAxMDEsIDI0LCAxLCAyMjMsIDExLCAxMDEsIDI0LCAxLCAyMjMsIDYsIDEwMSwgMjQsIDEsIAotICAgIDIyMywgMSwgMTAxLCAyNCwgMSwgMjIzLCAxMiwgMTAxLCAyNCwgMSwgMjIzLCAyNCwgMTAxLCAyNCwgMSwgMjMwLCAyMTcsIAotICAgIDEwMSwgMjQsIDEsIDIyNSwgOTUsIDEwMSwgMjQsIDEsIDIxOCwgMjEyLCAxMDEsIDI0LCAxLCAyMjUsIDg0LCAxMDEsIDI0LCAKLSAgICAxLCAyMTksIDE0OCwgMTAxLCAyNCwgMSwgMjE4LCAyMDksIDEwMSwgMjQsIDEsIDIzNiwgNTYsIDEwMSwgMjQsIDEsIDI1MCwgCi0gICAgNDYsIDEwMSwgMjQsIDEsIDIxOCwgMjE5LCAxMDEsIDI0LCAxLCAyNTAsIDEwNiwgMTAxLCAyNCwgMSwgMjM0LCAxMTAsIAotICAgIDEwMSwgMjQsIDEsIDIxNiwgMTczLCAxMDEsIDI0LCAxLCAyMjUsIDEzMSwgMTAxLCAyNCwgMSwgMjQxLCAxNzIsIDEwMSwgCi0gICAgMjQsIDEsIDYxLCAxMDEsIDI0LCAxLCAyNTQsIDI0MywgMTAxLCAyNCwgMSwgMTkxLCAxMDEsIDI0LCAxLCAyMTEsIDkyLCAKLSAgICAxMDEsIDI0LCAxLCAyNDUsIDExNywgMTAxLCAyNCwgMSwgNzUsIDEwMSwgMjQsIDEsIDIxMSwgMzYsIDEwMSwgMjQsIDEsIAotICAgIDIxMSwgNDcsIDEwMSwgMjQsIDEsIDc2LCAxMDEsIDI0LCAxLCAyMTIsIDY1LCAxMDEsIDI0LCAxLCAyMTIsIDYyLCAxMDEsIAotICAgIDI0LCAxLCAyMjYsIDIzNCwgMTAxLCAyNCwgMSwgMjEwLCAyNDQsIDEwMSwgMjQsIDEsIDcwLCAxMDEsIDI0LCAxLCAyMTIsIAotICAgIDExLCAxMDEsIDI0LCAxLCAyMTIsIDIyLCAxMDEsIDI0LCAxLCAyMTEsIDI1MCwgMTAxLCAyNCwgMSwgMjEwLCAyMTIsIDEwMSwgCi0gICAgMjQsIDEsIDI0NSwgNTUsIDEwMSwgMjQsIDEsIDIxMSwgOCwgMTAxLCAyNCwgMSwgNzMsIDEyNiwgMjUwLCAxNzYsIDUwLCAKLSAgICAxMjYsIDIyNCwgMjI4LCA1MCwgMTI2LCAyMjgsIDUyLCA1MCwgMTI2LCAyMzEsIDIzMiwgMTI2LCAyNTEsIDEzNSwgMTMwLCAKLSAgICAxMjYsIDIxMSwgNDAsIDUwLCAxMjYsIDIxMSwgMjE3LCA1MCwgMTAxLCAyNDQsIDE4LCAxOTIsIDIxMywgMjM5LCAxMDEsIAotICAgIDE0MCwgNzQsIDEwMSwgMjE0LCAxNTMsIDc0LCAxMDEsIDk3LCA3NCwgMTAxLCAyNDYsIDEwNCwgNzQsIDEwMSwgODUsIDIxOCwgCi0gICAgMjM0LCAxMDEsIDcxLCAyNTAsIDM1LCAyMzUsIDIwNCwgMjU0LCA5OSwgMjU0LCAxMjAsIDIzNSwgMjA0LCAyNTQsIDk5LCAKLSAgICAyMjAsIDEzNywgMjM1LCAyMDQsIDI1NCwgOTksIDIxNiwgMjM2LCAyMjYsIDI0OSwgMjIzLCA3MiwgMjUwLCAxNDIsIDIyMywgCi0gICAgNzIsIDI1MCwgMTQyLCA2MiwgNTcsIDMsIDI1MywgMTQyLCA2MSwgNjIsIDU3LCAzLCAyNTMsIDExMSwgNzUsIDYyLCA1NywgCi0gICAgMywgMjUzLCAxMjAsIDczLCA2MiwgNTcsIDMsIDI1MywgODgsIDc2LCA2MiwgNTcsIDMsIDI1MywgMTM4LCA3MCwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDE1NywgMjQ4LCAyMjEsIDYyLCA1NywgMywgMjUzLCAxMDQsIDI0OCwgOTAsIDYyLCA1NywgMywgMjUzLCAxNDQsIAotICAgIDI0OCwgMywgNjIsIDU3LCAzLCAyNTMsIDEzNCwgMjQ3LCAxNDUsIDYyLCA1NywgMywgMjUzLCA5OCwgMjQ2LCA3OCwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDkyLCAyMzUsIDE0MSwgNjIsIDU3LCAzLCAyNTMsIDEwMywgMjM1LCAxMjYsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMTMsIDIzNSwgNjgsIDYyLCA1NywgMywgMjUzLCA4NCwgMjM1LCA1MSwgNjIsIDU3LCAzLCAyNTMsIDcyLCAxNzYsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMDUsIDIzNCwgMTgyLCA2MiwgNTcsIDMsIDI1MywgODIsIDIzNCwgOTIsIDYyLCA1NywgMywgMjUzLCAKLSAgICA3OSwgMjM0LCAyOCwgNjIsIDU3LCAzLCAyNTMsIDY4LCAyMzMsIDIxNywgNjIsIDU3LCAzLCAyNTMsIDY5LCAxODQsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMzUsIDIzMSwgOTEsIDYyLCA1NywgMywgMjUzLCA3NiwgMjMwLCAyMzAsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMzMsIDIzMCwgMTYxLCA2MiwgNTcsIDMsIDI1MywgMTI1LCAyMzAsIDEwMiwgNjIsIDU3LCAzLCAyNTMsIDE0NiwgMTk3LCAKLSAgICA2MiwgNTcsIDMsIDI1MywgMTI0LCAyMjksIDEwNywgNjIsIDU3LCAzLCAyNTMsIDExOCwgMjI4LCAyMzMsIDYyLCA1NywgMywgCi0gICAgMjUzLCA5NywgMjI4LCA3NCwgNjIsIDU3LCAzLCAyNTMsIDk0LCAyMjcsIDIzNywgNjIsIDU3LCAzLCAyNTMsIDE1MywgMTkwLCAKLSAgICA2MiwgNTcsIDMsIDI1MywgNzcsIDIyNSwgMjIxLCA2MiwgNTcsIDMsIDI1MywgMTEwLCAyMjUsIDEwOCwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDEzNywgMjI1LCAxNiwgNjIsIDU3LCAzLCAyNTMsIDk5LCAyMjQsIDE1MCwgNjIsIDU3LCAzLCAyNTMsIDEzMiwgCi0gICAgMjI0LCA4OCwgNjIsIDU3LCAzLCAyNTMsIDcxLCAyMjQsIDY5LCA2MiwgNTcsIDMsIDI1MywgMTI3LCAyMjQsIDUzLCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTE2LCAyMjQsIDQyLCA2MiwgNTcsIDMsIDI1MywgODksIDIwNSwgNjIsIDU3LCAzLCAyNTMsIDEyMSwgCi0gICAgMjIzLCAxMjgsIDYyLCA1NywgMywgMjUzLCA5NiwgMjIzLCAzNSwgNjIsIDU3LCAzLCAyNTMsIDE1NSwgMjIyLCAyMTEsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMjIsIDIyMiwgMTQwLCA2MiwgNTcsIDMsIDI1MywgMTE3LCAyMDYsIDYyLCA1NywgMywgMjUzLCAxNDAsIAotICAgIDIyMSwgMTgxLCA2MiwgNTcsIDMsIDI1MywgMTA4LCAyMTksIDE5MSwgNjIsIDU3LCAzLCAyNTMsIDEzNiwgMjE5LCA1OCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDkxLCAyMTgsIDgzLCA2MiwgNTcsIDMsIDI1MywgOTAsIDIxNywgMTA1LCA2MiwgNTcsIDMsIAotICAgIDI1MywgMTUxLCAyMTcsIDIyLCA2MiwgNTcsIDMsIDI1MywgMTEyLCAyMTYsIDExNywgNjIsIDU3LCAzLCAyNTMsIDE0OSwgCi0gICAgMTExLCA2MiwgNTcsIDMsIDI1MywgODAsIDIxNSwgMTE4LCA2MiwgNTcsIDMsIDI1MywgOTUsIDIxMiwgNjUsIDYyLCA1NywgCi0gICAgMywgMjUzLCA3NCwgMjEyLCAyMiwgNjIsIDU3LCAzLCAyNTMsIDEwOSwgMjExLCAyNTAsIDYyLCA1NywgMywgMjUzLCAxMDcsIAotICAgIDIxMSwgMjI3LCA2MiwgNTcsIDMsIDI1MywgMTMxLCAyMTAsIDExNiwgNjIsIDU3LCAzLCAyNTMsIDc1LCAyMTAsIDk0LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTI4LCAyMTAsIDIzLCA2MiwgNTcsIDMsIDI1MywgMTIzLCAyNTUsIDc1LCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTA2LCAyNTUsIDc0LCA2MiwgNTcsIDMsIDI1MywgNjUsIDI1MywgMTkyLCA2MiwgNTcsIDMsIDI1MywgNzgsIDI0NiwgNDYsIAotICAgIDYyLCA1NywgMywgMjUzLCA2MSwgMjQ2LCA0NSwgNjIsIDU3LCAzLCAyNTMsIDEwMSwgMjI3LCAxNzQsIDYyLCA1NywgMywgCi0gICAgMjUzLCAxMTksIDIyNCwgMTQ4LCA2MiwgNTcsIDMsIDI1MywgODcsIDIyNCwgMTUyLCA2MiwgNTcsIDMsIDI1MywgNzMsIAotICAgIDIyMywgMTg2LCA2MiwgNTcsIDMsIDI1MywgMTE1LCAyMjMsIDE4NSwgNjIsIDU3LCAzLCAyNTMsIDgxLCAyMjIsIDIxMCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDgzLCAyMTcsIDEwMiwgNjIsIDU3LCAzLCAyNTMsIDYzLCAyMTUsIDc4LCA2MiwgNTcsIDMsIAotICAgIDI1MywgNjAsIDEwNSwgNjIsIDU3LCAxNiwgMjUzLCAxMzAsIDYyLCA1NywgMTYsIDI1MywgMTI5LCA2MiwgNTcsIDE2LCAKLSAgICAyNTMsIDEyNiwgNjIsIDU3LCAxNiwgMjUzLCAxMTQsIDYyLCA1NywgMTYsIDI1MywgMTAyLCA2MiwgNTcsIDE2LCAyNTMsIAotICAgIDEwMCwgNjIsIDU3LCAxNiwgMjUzLCA5MywgNjIsIDU3LCAxNiwgMjUzLCA4NiwgNjIsIDU3LCAxNiwgMjUzLCA4NSwgNjIsIAotICAgIDU3LCAxNiwgMjUzLCA3MCwgNjIsIDU3LCAxNiwgMjUzLCA2NywgNjIsIDU3LCAxNiwgMjUzLCA2NiwgNjIsIDU3LCAxNiwgCi0gICAgMjUzLCA2NCwgNjIsIDU3LCAxNiwgMjUzLCA2MiwgNjIsIDU3LCAxMDYsIDI1MywgNTksIDIzMSwgMTg1LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCA1OCwgMjExLCAyMjEsIDYyLCA1NywgMTA2LCAyNTMsIDU3LCAyNDgsIDc0LCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICA1NiwgMjQ1LCA5NSwgNjIsIDU3LCAxMDYsIDI1MywgNTUsIDIzMSwgMTU5LCA2MiwgNTcsIDEwNiwgMjUzLCA1NCwgMjE4LCAKLSAgICAxNjIsIDYyLCA1NywgMTA2LCAyNTMsIDUzLCAyNDUsIDM3LCA2MiwgNTcsIDEwNiwgMjUzLCA1MiwgMjIzLCAxNTMsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDUxLCAyMjAsIDYyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MCwgMjQxLCAyMzcsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDQ5LCAyMTksIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCA0OCwgMjUxLCAyMDMsIDYyLCA1NywgMTA2LCAyNTMsIDQ3LCAKLSAgICAyNDksIDE0NSwgNjIsIDU3LCAxMDYsIDI1MywgNDYsIDI1MSwgMTE1LCA2MiwgNTcsIDEwNiwgMjUzLCA0NSwgMjEyLCAyLCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCA0NCwgMjUyLCAxMzYsIDYyLCA1NywgMTA2LCAyNTMsIDQzLCAyMjYsIDIwNSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgNDIsIDIxOCwgMjU0LCA2MiwgNTcsIDEwNiwgMjUzLCA0MSwgMjQ5LCA2OCwgNjIsIDU3LCAyMzAsIDE0MiwgCi0gICAgMjUzLCA0MCwgMjM0LCAyMjQsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMzksIDIzNCwgMjMyLCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICAzOCwgMjI2LCAyMTgsIDYyLCA1NywgMTA2LCAyNTMsIDM3LCAyMTEsIDIzNiwgNjIsIDU3LCAxMDYsIDI1MywgMzYsIDYyLCAKLSAgICA1NywgMjMwLCAxNDIsIDI1MywgMzUsIDI1NCwgMTcsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMzQsIDIzMSwgNTIsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDMzLCAyNTEsIDEzNCwgNjIsIDU3LCAxMDYsIDI1MywgMzIsIDI0MiwgMTY2LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCAzMSwgNjIsIDU3LCAxMDYsIDI1MywgMzAsIDIxMSwgMjEyLCA2MiwgNTcsIDEwNiwgMjUzLCAyOSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgMjgsIDYyLCA1NywgMTA2LCAyNTMsIDI3LCAyNDAsIDI0OCwgNjIsIDU3LCAxMDYsIDI1MywgMjYsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCAyNCwgNjIsIDU3LCAyMzAsIDE0MiwgMjUzLCAyMiwgMjE1LCAKLSAgICA5MiwgNjIsIDU3LCAxMDYsIDI1MywgMjEsIDYyLCA1NywgMTA2LCAyNTMsIDIwLCA2MiwgNTcsIDEwNiwgMjUzLCAxOSwgCi0gICAgMjQ5LCAyNTAsIDYyLCA1NywgMTA2LCAyNTMsIDE4LCA2MiwgNTcsIDEwNiwgMjUzLCAxNywgNjIsIDU3LCAxMDYsIDI1MywgCi0gICAgMTYsIDI0MywgOTMsIDYyLCA1NywgMTA2LCAyNTMsIDE1LCAyNTQsIDQsIDYyLCA1NywgMTA2LCAyNTMsIDE0LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCAxMywgNjIsIDU3LCAxMDYsIDI1MywgMTIsIDYyLCA1NywgMTA2LCAyNTMsIDExLCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCAxMCwgNjIsIDU3LCAxMDYsIDI1MywgOSwgNjIsIDU3LCAxMDYsIDI1MywgOCwgNjIsIDU3LCAxMDYsIDI1MywgNywgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgNiwgNjIsIDU3LCAxMDYsIDI1MywgNSwgMjMwLCAxMzQsIDYyLCA1NywgMTA2LCAyNTMsIDQsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDMsIDIxNSwgMjM1LCA2MiwgNTcsIDEwNiwgMjUzLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAxLCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTUsIDYyLCA1NywgMTA2LCAyNTIsIDI1NCwgNjIsIAotICAgIDU3LCAxMDYsIDI1MiwgMjUzLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTIsIDYyLCA1NywgMTA2LCAyNTIsIDI1MSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MiwgMjUwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNDksIDYyLCA1NywgMTA2LCAyNTIsIDI0OCwgNjIsIDU3LCAxMDYsIAotICAgIDI1MiwgMjQ3LCAyNDEsIDIxMSwgNjIsIDU3LCAxMDYsIDI1MiwgMjI2LCAyNDQsIDI4LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMjMsIDI1MiwgMTE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTgsIDIxOSwgNSwgNjIsIDU3LCAxMDYsIDI1MiwgMjE3LCA3NCwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMjE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTUsIDIxNywgMjM2LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMTQsIDYyLCA1NywgMTA2LCAyNTIsIDIxMywgNjIsIDU3LCAxMDYsIDI1MiwgMjEyLCAyMTEsIDI1NCwgMjUwLCAxMzksIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDIxMSwgMjUwLCAxMzksIDYyLCA1NywgMTA2LCAyNTIsIDIxMCwgMjUwLCAxNDAsIDI0MywgCi0gICAgMjU1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDksIDIxMiwgMCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA4LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUyLCAyMDcsIDYyLCA1NywgMjMwLCAxNDIsIDI1MiwgMjA2LCAyNDcsIDE5OCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA1LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAyMDQsIDYyLCA1NywgMTA2LCAyNTIsIDIwMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjAxLCA2MiwgCi0gICAgNTcsIDEwNiwgMjUyLCAyMDAsIDYyLCA1NywgMTA2LCAyNTIsIDE5OSwgMjQ4LCAxNTksIDYyLCA1NywgMTA2LCAyNTIsIAotICAgIDE5OCwgNjIsIDU3LCAxMDYsIDI1MiwgMTk3LCA2MiwgNTcsIDEwNiwgMjUyLCAxOTYsIDYyLCA1NywgMTA2LCAyNTIsIDE5NSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMTk0LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MywgMjMsIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyNDYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCi0gICAgMjUyLCAyNDQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKLSAgICAyNDIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDAsIAotICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzgsIDYyLCA1NywgCi0gICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzYsIDYyLCA1NywgMTA2LCAKLSAgICAyMTMsIDE4NiwgMjUyLCAyMzUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzQsIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyMzMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCi0gICAgMjUyLCAyMzEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKLSAgICAyMjksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjcsIAotICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjQsIDYyLCA1NywgCi0gICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjEsIDYyLCA1NywgMTA2LCAKLSAgICAyMTMsIDE4NiwgMjUyLCAyMjAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMTksIDYyLCA1NywgMTA2LCAyMTMsIAotICAgIDE4NiwgMjUyLCAyMDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAxOTMsIDI1NCwgMjM2LCAyMTEsIDIwOSwgMjIwLCAKLSAgICAxMzgsIDIzMiwgMjEzLCAyNTQsIDIzNiwgMjExLCAyMDksIDIyMCwgMTM4LCAyNDcsIDEyMCwgMjU0LCAyMzYsIDI1MCwgCi0gICAgMTMwLCA3OCwgMjU0LCAyMzYsIDU0LCAxMTAsIDI1NCwgMjM2LCA1NCwgMTA1LCAyNTQsIDIzNiwgNTQsIDE1OCwgMjU0LCAKLSAgICAyMzYsIDU0LCAxNjEsIDI1NCwgMjM2LCA1NCwgMTg5LCAyNTQsIDIzNiwgNTQsIDE5NCwgMjU0LCAyMzYsIDU0LCAxOTgsIAotICAgIDI1NCwgMjM2LCA1NCwgMTk1LCAyNTQsIDIzNiwgNTQsIDIwMCwgMjU0LCAyMzYsIDU0LCAyMTYsIDI0NywgMjU0LCAyMzYsIAotICAgIDU0LCAyMTUsIDczLCAyNTQsIDIzNiwgNTQsIDIxNiwgMTYyLCAyNTQsIDIzNiwgNTQsIDI0NCwgMTUsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjQ0LCAxMTQsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMTEsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMTYsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjQ1LCAxODQsIDI1NCwgMjM2LCA1NCwgMjI4LCAxOTUsIDI1NCwgMjM2LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjU0LCAyMzYsIAotICAgIDU0LCAxMTMsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDEzNCwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxMSwgCi0gICAgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMjUsIDI0MCwgCi0gICAgMjEwLCAyNTQsIDIzNiwgNTQsIDIyMCwgMTIyLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyNDUsIDE5MywgMjQwLCAyMTAsIAotICAgIDI1NCwgMjM2LCA1NCwgMjI4LCAyMDAsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDEyMywgMjE2LCAxNDcsIDI1NCwgMjM2LCAKLSAgICA1NCwgMTEzLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAxMzQsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgMTEsIAotICAgIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgODEsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIxOSwgMTI1LCAyMTYsIAotICAgIDE0NywgMjU0LCAyMzYsIDU0LCAyMjAsIDEyMiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ1LCAxOTMsIDIxNiwgMTQ3LCAKLSAgICAyNTQsIDIzNiwgNTQsIDIyOCwgMjAwLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDI1NCwgCi0gICAgMjM2LCA1NCwgMjE1LCA3NCwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjE2LCAxNjMsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgCi0gICAgNTQsIDI0NCwgMTYsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NCwgMTE1LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAKLSAgICAyMTksIDExMiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMTcsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NSwgCi0gICAgMTg1LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMjgsIDE5NiwgMjE2LCAxNDcsIDI1NCwgMjM2LCAyMTIsIDE0LCAyNTIsIAotICAgIDEyOCwgMjE0LCAxNzMsIDI1NCwgMjM2LCAyMTIsIDE0LCAyNDQsIDkyLCAyMTgsIDU5LCAyNTQsIDIzNiwgMjEyLCAxNCwgCi0gICAgMjIxLCAxNzYsIDIxOCwgNTksIDI1NCwgMjM2LCAyMTIsIDE0LCAyMTYsIDE2OSwgMjE4LCA1OSwgMjU0LCAyMzYsIDIxMiwgCi0gICAgMTQsIDI0NCwgNCwgMjE4LCA1OSwgMjU0LCAyMzYsIDI0NiwgODEsIDIzMSwgOTAsIDI0NCwgOTIsIDIxOCwgNTksIDI1NCwgCi0gICAgMjM2LCAyMzIsIDE5OSwgMjMxLCA5MCwgMjQ0LCA5MiwgMjE4LCA1OSwgMjU0LCAyMzYsIDIzMSwgOTAsIDIyMSwgMTc2LCAKLSAgICAyMTgsIDU5LCAyNTQsIDIzNiwgMjMxLCA5MCwgMjE2LCAxNjksIDIxOCwgNTksIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDIyNCwgMjEsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDI0MiwgMjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDI0NiwgMTAwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTg5LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTQsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDIxNiwgCi0gICAgMTQ3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAKLSAgICA4MSwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIAotICAgIDE5NCwgMjQ0LCAxMTUsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDI0MCwgMjExLCAyMTcsIDY3LCAyNiwgCi0gICAgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTEsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDIxNiwgMTQ4LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjE2LCAxNDgsIDIxNywgNjcsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMTgsIAotICAgIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE1LCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjQwLCAyMTEsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTEsIDIxOCwgMTUwLCAKLSAgICAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAyMTYsIDE0OCwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIAotICAgIDI0OCwgMjE2LCAxNDgsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxNiwgMTQ4LCAyMTgsIAotICAgIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgMjQ4LCAyMzAsIDE2NCwgMjYsIDI1NSwgNiwgMjQxLCAyMDUsIDEyMywgCi0gICAgMjI1LCAzMSwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDExMCwgMjYsIDI1NSwgNiwgMjQxLCAyMDEsIDExMCwgMjYsIDI1NSwgCi0gICAgNiwgMjQ1LCAxMDQsIDEwNSwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDEwNSwgMjYsIDI1NSwgNiwgMjQ5LCA2NSwgMTEzLCAKLSAgICAyNDYsIDk5LCAyNiwgMjU1LCA2LCAyNDUsIDEwNCwgMTEzLCAyNDYsIDk5LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMTg5LCAKLSAgICAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyMTYsIDI0OCwgMjU0LCAxNDEsIAotICAgIDE3LCAyNiwgMjU1LCA2LCAyNDEsIDIwMSwgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIzMSwgNDEsIDIxNiwgMjQ3LCAyNiwgCi0gICAgMjU1LCA2LCAyMTYsIDE4MSwgMjE2LCAyNDcsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAyMTYsIDE2MiwgMjYsIDI1NSwgNiwgCi0gICAgMjE1LCAyMDMsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjQ0LCAxMTUsIDI1NCwgMTQxLCAxNywgMjYsIAotICAgIDI1NSwgNiwgMjQxLCAyMDEsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCAxMTQsIDI2LCAyNTUsIDYsIAotICAgIDIxNiwgMTgxLCAxMjMsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTM0LCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgCi0gICAgMjQ1LCAxMDQsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAKLSAgICAyNTUsIDYsIDIxNiwgMTgxLCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjUwLCAyMjcsIDI0NCwgODEsIDI0MCwgCi0gICAgMjEwLCAyNiwgMjU1LCA2LCAyMjksIDE4MiwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMjMsIAotICAgIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCA4MSwgMjE2LCAxNDcsIDI2LCAyNTUsIDYsIDI0OCwgNTcsIAotICAgIDI0NCwgODEsIDIzMCwgMTY0LCAyNiwgMjU1LCA2LCAyMTgsIDExOCwgMjQ0LCAxMTUsIDIzMCwgMTY0LCAyNiwgMTIzLCAKLSAgICAxNjMsIDUwLCAyNiwgMTIzLCAxNjMsIDUsIDI1NCwgMTQxLCAxNywgMjYsIDExMywgMjE2LCAxNjcsIDUwLCAyNiwgMTM0LCAKLSAgICAyMjQsIDIwLCA1MCwgMjYsIDIxMSwgNDUsIDUwLCAyNiwgMjE3LCA2OCwgNTAsIDI2LCAyNDYsIDEwMSwgNTAsIDI2LCAyMjYsIAotICAgIDI0NiwgNTAsIDI2LCAxMTMsIDIyNiwgMjQ1LCA1MCwgMjYsIDEzNCwgMjI2LCAyNDUsIDUwLCAyNiwgMjQ0LCAxMSwgMjI2LCAKLSAgICAyNDUsIDUwLCAyNiwgMjQ0LCA4MSwgMjI2LCAyNDUsIDUwLCAyNiwgMjMxLCAzNSwgNTAsIDI2LCAyMzMsIDE1NywgMjUyLCAKLSAgICAxMjgsIDUwLCAyNiwgMjMyLCAxOTQsIDUwLCAyNiwgMjI2LCAxMzEsIDUwLCAyNiwgMjExLCAxNTksIDUwLCAyNiwgMjUzLCAKLSAgICAyNDMsIDUwLCAyNiwgMjU0LCAwLCA1MCwgMjYsIDI0MiwgMTQ0LCA1MCwgMjYsIDIxNSwgMTg2LCAyNTIsIDEyOCwgNTAsIAotICAgIDI2LCAyMTAsIDg3LCA1MCwgMjIyLCAxOTgsIDIyMCwgMTEzLCA1MCwgMjIyLCAxOTgsIDIxNCwgMTg1LCA1MCwgMjIyLCAKLSAgICAxOTgsIDIyMCwgMTQyLCA1MCwgMjIyLCAxOTgsIDIyMCwgMTExLCA1MCwgMjIyLCAxOTgsIDI0NywgMjEzLCAyMjAsIDExMSwgCi0gICAgNTAsIDIyMiwgMTk4LCAyMTksIDE2OCwgNTAsIDIyMiwgMTk4LCAyNDgsIDUzLCA1MCwgMjIyLCAxOTgsIDIyNCwgNiwgNTAsIAotICAgIDIyMiwgMTk4LCAyMjAsIDEyOSwgNTAsIDIyMiwgMTk4LCAyNDYsIDYwLCA1MCwgMjIyLCAxOTgsIDI1MywgMjM4LCA1MCwgCi0gICAgMjIyLCAxOTgsIDI1MCwgMTcxLCA1MCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjUsIDIxMywgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMjUsIDI0LCAyNDEsIDIzNSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTcsIDQ1LCAyNDEsIDIzNSwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDI0NywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDEwMSwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyMTEsIDIyMSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDEsIDIxMSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyNDMsIDg1LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxNiwgMTE2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDc0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MSwgMTY5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMCwgMjksIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjQ5LCAyNDQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjMxLCAxODQsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjMxLCAxMzYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjIxLCAyMTYsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjMyLCAyMzcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUxLCAxODgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgMjUwLCAyMzEsIDIyNSwgMzUsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ3LCAxMzMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgCi0gICAgNSwgMjQ5LCAyMjMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE5LCA4NywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDksIAotICAgIDIyNCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTIsIDYzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMCwgMTYsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjQwLCAyNDgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQxLCAxNzgsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjUxLCAxMTIsIDIzMywgMzYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUwLCAyMjQsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjIzLCAxNTMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ1LCAyMzAsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjQ2LCAxMDcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE1LCAxMDUsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjUyLCA2NiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjUsIDM2LCAyMTUsIDIzNSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMTMsIDE1OSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjYsIDE4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDIyMiwgMTkwLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIzMiwgMjI0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNiwgCi0gICAgMTE1LCAyNTIsIDE4NCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDQsIDQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDI0MiwgMTM4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxOCwgMTE5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDQsIDI1MywgCi0gICAgMTY4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxMiwgMzIsIDI1MiwgMTQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDM4LCAKLSAgICAyMjYsIDI0OCwgOTEsIDIzMiwgNjAsIDEsIDYxLCAyMzIsIDYwLCAxLCA3NSwgMjMyLCA2MCwgMSwgMjUzLCAxNTgsIDIzMiwgCi0gICAgNjAsIDEsIDI1MiwgMTksIDIzMiwgNjAsIDEsIDI0MywgMjAyLCAyMzIsIDYwLCAxLCAyNDksIDYwLCAyMzIsIDYwLCAxLCAKLSAgICA3MywgMjMyLCA2MCwgMSwgMjEyLCA5OCwgMjMyLCA2MCwgMSwgMjEwLCAxNTksIDIzMiwgNjAsIDEsIDIxNiwgMjEwLCAyMzIsIAotICAgIDYwLCAxLCAyMzUsIDE0NCwgMjMyLCA2MCwgMSwgMjM1LCAyMywgMjMyLCA2MCwgMSwgMjI0LCA5NiwgMjMyLCA2MCwgMSwgCi0gICAgMTU2LCAyMzIsIDYwLCAxLCAxOTMsIDIzMiwgNjAsIDEsIDIzMCwgMjUsIDIzMiwgNjAsIDEsIDIzMCwgMTY2LCAyMzIsIDYwLCAKLSAgICAxLCAyMjgsIDExMSwgMjMyLCA2MCwgMSwgNzAsIDIzMiwgNjAsIDEsIDIyNiwgMTA1LCAyMzIsIDYwLCAxLCAyMzQsIDQ3LCAKLSAgICAyMzIsIDYwLCAxLCAxNTMsIDIzMiwgNjAsIDEsIDIyMiwgOTEsIDIzMiwgNjAsIDEsIDIxNywgMTUyLCAyMzIsIDYwLCAxLCAKLSAgICAyMTUsIDE1OSwgMjMyLCA2MCwgMSwgMjU0LCAxMjMsIDIzMiwgNjAsIDEsIDI0NSwgMTUwLCAyMzIsIDYwLCAxLCAyNDIsIAotICAgIDYwLCAyMzIsIDYwLCAxLCAyMTEsIDE3OCwgMjUwLCAyMzcsIDEsIDYxLCAyNTAsIDIzNywgMSwgMjI2LCA5MSwgMjUwLCAKLSAgICAyMzcsIDEsIDI0OSwgNjAsIDI1MCwgMjM3LCAxLCAxNTYsIDI1MCwgMjM3LCAxLCAyMTQsIDExNiwgMjUwLCAyMzcsIDEsIAotICAgIDE1MywgMjUwLCAyMzcsIDEsIDIzMywgNjIsIDI1MCwgMjM3LCAxLCAyNTUsIDc1LCAyNTAsIDIzNywgMSwgMjI0LCA5NiwgCi0gICAgMjUwLCAyMzcsIDEsIDI1MywgMTU4LCAyNTAsIDIzNywgMSwgMTkzLCAyNTAsIDIzNywgMSwgNzYsIDI1MCwgMjM3LCAxLCAKLSAgICAyNDgsIDIyMywgMjUwLCAyMzcsIDEsIDIxNywgMTUyLCAyNTAsIDIzNywgMSwgMjIwLCAxMDQsIDI1MCwgMjM3LCAxLCAyMjAsIAotICAgIDEwMywgMjUwLCAyMzcsIDEsIDIyMiwgOTEsIDI1MCwgMjM3LCAxLCAyNTEsIDY1LCAyNTAsIDIzNywgMSwgNzAsIDI1MCwgCi0gICAgMjM3LCAxLCAyMjgsIDExMSwgMjUwLCAyMzcsIDEsIDIxMSwgMTc4LCAyNTAsIDIzNywgMSwgMjMwLCAyNSwgMjUwLCAyMzcsIAotICAgIDEsIDIxNSwgMTU4LCAyNTAsIDIzNywgMSwgMjI2LCAxMDUsIDI1MCwgMjM3LCAxLCAyMTgsIDIyNiwgMjUwLCAyMzcsIDEsIAotICAgIDczLCAyNTAsIDIzNywgMSwgNzUsIDI1MCwgMjM3LCAxLCAyMTQsIDExMywgMjUwLCAyMzcsIDEsIDIzNSwgMjMsIDI1MCwgCi0gICAgMjM3LCAxLCAyMzUsIDE0LCAyNTAsIDIzNywgMSwgMjI5LCAxNTAsIDI1MCwgMjM3LCAxLCAyMTQsIDExOCwgMjUwLCAyMzcsIAotICAgIDEsIDI0MywgMjAyLCAyNTAsIDIzNywgMSwgMjQzLCAxMzcsIDI1MCwgMjM3LCAxLCAyMTgsIDE2OCwgMjUwLCAyMzcsIDEsIAotICAgIDIxOCwgMTY3LCAyNTAsIDIzNywgMSwgMjI5LCA3OSwgMjUwLCAyMzcsIDEsIDIzNiwgMzMsIDI1MCwgMjM3LCAxLCAyNTEsIAotICAgIDY0LCAyNTAsIDIzNywgMSwgMjE1LCAxNTksIDI1MCwgMjM3LCAxLCAyMTQsIDExNSwgMjUwLCAyMzcsIDEsIDIyMiwgMTgwLCAKLSAgICAyNTAsIDIzNywgMSwgMjMxLCAxMjksIDI1MCwgMjM3LCAxLCAyMzEsIDEyOCwgMjUwLCAyMzcsIDEsIDIzMSwgMTI3LCAyNTAsIAotICAgIDIzNywgMSwgMjMxLCAxMjYsIDI1MCwgMjM3LCAxLCAyMzMsIDYxLCAyNTAsIDIzNywgMSwgMjQ1LCAyMzQsIDI1MCwgMjM3LCAKLSAgICAxLCAyMTQsIDExNCwgNTUsIDMyLCAxLCA2MSwgNTUsIDMyLCAxLCAyNTIsIDc1LCA1NSwgMzIsIDEsIDIzNCwgMTgyLCA1NSwgCi0gICAgMzIsIDEsIDI0OCwgOTAsIDU1LCAzMiwgMSwgNzUsIDU1LCAzMiwgMSwgMjEzLCAyNTUsIDU1LCAzMiwgMSwgMjEwLCA5NCwgCi0gICAgNTUsIDMyLCAxLCAyNDEsIDIzOCwgNTUsIDMyLCAxLCAyMTYsIDE5NSwgNTUsIDMyLCAxLCA3MywgNTUsIDMyLCAxLCAxNzYsIAotICAgIDU1LCAzMiwgMSwgMjQ1LCAxNzQsIDU1LCAzMiwgMSwgMjQ1LCAxNTksIDU1LCAzMiwgMSwgMjQ1LCAxNTAsIDU1LCAzMiwgMSwgCi0gICAgMjQ1LCA3NSwgNTUsIDMyLCAxLCA3NiwgNTUsIDMyLCAxLCAyMjUsIDIyMSwgNTUsIDMyLCAxLCAyMjAsIDYzLCA1NSwgMzIsIAotICAgIDEsIDIzMywgMjE3LCA1NSwgMzIsIDEsIDI0NSwgOTIsIDU1LCAzMiwgMSwgMjQ1LCA4MiwgNTUsIDMyLCAxLCAyMTcsIDIyLCAKLSAgICA1NSwgMzIsIDEsIDcwLCA1NSwgMzIsIDEsIDI0NSwgMTc3LCA1NSwgMzIsIDEsIDIyNSwgMTM2LCA1NSwgMzIsIDEsIDIzNCwgCi0gICAgMTE5LCA1NSwgMzIsIDEsIDI0NSwgMjAyLCA1NSwgMzIsIDEsIDI0NSwgODQsIDU1LCAzMiwgMSwgMjUwLCAxMzEsIDU1LCAKLSAgICAzMiwgMSwgMjM2LCAzMywgNTUsIDMyLCAxLCAyMTQsIDExOCwgNTUsIDMyLCAyMjcsIDE5OCwgMTEwLCA1NSwgMzIsIDIyNywgCi0gICAgMTk4LCAxODksIDU1LCAzMiwgMjI3LCAxOTgsIDIxNiwgMjQ3LCA1NSwgMzIsIDIyNywgMTk4LCAyNDQsIDExNCwgMjQyLCAKLSAgICAxNTMsIDEsIDI1NCwgMjA0LCAyNDIsIDE1MywgMSwgMjUyLCAxNjMsIDI0MiwgMTUzLCAxLCAyNDIsIDIxMSwgMjQyLCAxNTMsIAotICAgIDEsIDI0OCwgMjA0LCAyNDIsIDE1MywgMSwgMjU0LCAyMDAsIDI0MiwgMTUzLCAxLCAyMjQsIDc5LCAyNDIsIDE1MywgMSwgCi0gICAgMjM1LCAxNTUsIDI0MiwgMTUzLCAxLCAyNDIsIDM5LCAyNDIsIDE1MywgMSwgMjE2LCAxNTgsIDI0MiwgMTUzLCAxLCAyNDUsIAotICAgIDE4MywgMjQyLCAxNTMsIDEsIDIzMywgMTkwLCAyNDIsIDE1MywgMSwgMjMzLCAxMTMsIDI0MiwgMTUzLCAxLCAyMzEsIDE3OSwgCi0gICAgMjQyLCAxNTMsIDEsIDIyOSwgMTg0LCAyNDIsIDE1MywgMSwgMjM1LCAxMTksIDI0MiwgMTUzLCAxLCAyMTQsIDEzNiwgMjQyLCAKLSAgICAxNTMsIDEsIDIyNiwgNjksIDI0MiwgMTUzLCAxLCAyMjgsIDE5NSwgMjQyLCAxNTMsIDEsIDIyMywgMTY1LCAyNDIsIDE1MywgCi0gICAgMSwgMjIxLCAyMTgsIDI0MiwgMTUzLCAxLCAyMTcsIDQsIDI0MiwgMTUzLCAxLCAyMTEsIDIzNCwgMjQyLCAxNTMsIDEsIAotICAgIDI0NCwgMTc4LCAyNDIsIDE1MywgMSwgMjM2LCAzNywgMjQyLCAxNTMsIDEsIDI0MCwgMTk5LCAyNDIsIDE1MywgMSwgMjI2LCAKLSAgICAxMzksIDI0MiwgMTUzLCAxLCAyMjgsIDIwMCwgMjQwLCAyMTAsIDIxNCwgMjA5LCAxLCAyNTQsIDE0NywgMjE0LCAyMDksIDEsIAotICAgIDI1MiwgMjYsIDIxNCwgMjA5LCAxLCAyNDMsIDEwOCwgMjE0LCAyMDksIDEsIDIzNCwgMTMyLCAyMTQsIDIwOSwgMSwgMjQ4LCAKLSAgICA1NCwgMjE0LCAyMDksIDEsIDI0MSwgNjgsIDIxNCwgMjA5LCAxLCAyMTEsIDIyNywgMjE0LCAyMDksIDEsIDIxMCwgODUsIAotICAgIDIxNCwgMjA5LCAxLCAyNDAsIDI0MSwgMjE0LCAyMDksIDEsIDIxNiwgMjMwLCAyMTQsIDIwOSwgMSwgMjEwLCAyMzMsIDIxNCwgCi0gICAgMjA5LCAxLCAyMzQsIDI1MCwgMjE0LCAyMDksIDEsIDIyMCwgMjAsIDIxNCwgMjA5LCAxLCAyMzMsIDk4LCAyMTQsIDIwOSwgCi0gICAgMSwgMjMxLCA2NSwgMjE0LCAyMDksIDEsIDI0OCwgMjEsIDIxNCwgMjA5LCAxLCAyMjcsIDE5NCwgMjE0LCAyMDksIDEsIAotICAgIDIxMCwgMTMsIDIxNCwgMjA5LCAxLCAyMjEsIDI0OCwgMjE0LCAyMDksIDEsIDI1NCwgMTk2LCAyMTQsIDIwOSwgMSwgMjI0LCAKLSAgICAxNTAsIDIxNCwgMjA5LCAxLCAyMjIsIDI1LCAyMTQsIDIwOSwgMSwgMjI0LCAzNSwgMjE0LCAyMDksIDEsIDIyMywgMTQ0LCAKLSAgICAyMTQsIDIwOSwgMSwgMjE2LCAxOTksIDIxNCwgMjA5LCAxLCAyNDIsIDI0NCwgMjE0LCAyMDksIDEsIDExMSwgMjE0LCAyMDksIAotICAgIDEsIDczLCAyMTQsIDIwOSwgMSwgNzAsIDIxNCwgMjA5LCAxLCAyMTgsIDE3OSwgMjE0LCAyMDksIDIxMSwgMjA5LCAyNDcsIAotICAgIDE3MiwgNTUsIDIyNSwgMTY5LCA1LCA2MSwgNTUsIDIyNSwgMTY5LCA1LCA3MywgNTUsIDIyNSwgMTY5LCA1LCA3MCwgNTUsIAotICAgIDIyNSwgMTY5LCA1LCAxNzYsIDU1LCAyMjUsIDE2OSwgNSwgMjMzLCAyMTcsIDU1LCAyMjUsIDE2OSwgNSwgMjQzLCAxMzUsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjQyLCAxMTMsIDU1LCAyMjUsIDE2OSwgNSwgMjExLCAxNjUsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjUxLCAzMywgNTUsIDIyNSwgMTY5LCA1LCAyMzUsIDE0MSwgNTUsIDIyNSwgMTY5LCA1LCAyMzUsIDEwOCwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAyMTcsIDEwNSwgNTUsIDIyNSwgMTY5LCA1LCAyMTUsIDExOCwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDIyMSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDMsIDU1LCAyMjUsIDE2OSwgNSwgMjQ2LCA3OCwgNTUsIDIyNSwgMTY5LCA1LCAyMTYsIAotICAgIDIwOCwgNTUsIDIyNSwgMTY5LCA1LCAxOTAsIDU1LCAyMjUsIDE2OSwgNSwgMjUyLCAxOTEsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjQ0LCAxOTYsIDU1LCAyMjUsIDE2OSwgNSwgMTk3LCA1NSwgMjI1LCAxNjksIDUsIDIyNywgMjM3LCA1NSwgMjI1LCAxNjksIAotICAgIDUsIDE4NCwgNTUsIDIyNSwgMTY5LCA1LCAyMzAsIDIzMCwgNTUsIDIyNSwgMTY5LCA1LCAyMzAsIDEwMiwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAxOTEsIDU1LCAyMjUsIDE2OSwgNSwgMjE0LCAyNywgNTUsIDIyNSwgMTY5LCA1LCAyMTMsIDE3NiwgNTUsIAotICAgIDIyNSwgMTY5LCA1LCAyMDUsIDU1LCAyMjUsIDE2OSwgNSwgMjIyLCAxNDAsIDU1LCAyMjUsIDE2OSwgNSwgMjMzLCAxMzUsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjA2LCA1NSwgMjI1LCAxNjksIDUsIDIxMCwgMTE2LCA1NSwgMjI1LCAxNjksIDUsIDIyMCwgCi0gICAgMTAyLCA1NSwgMjI1LCAxNjksIDUsIDIxOCwgMjIzLCA1NSwgMjI1LCAxNjksIDUsIDE2MiwgNTUsIDIyNSwgMTY5LCA1LCAKLSAgICAyNTMsIDE4NiwgNTUsIDIyNSwgMTY5LCA1LCAyNTMsIDE4NSwgNTUsIDIyNSwgMTY5LCA1LCAyNTMsIDE4NCwgNTUsIDIyNSwgCi0gICAgMTY5LCA1LCAyMTEsIDE0MiwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDIwMCwgNTUsIDIyNSwgMTY5LCA1LCAyNDgsIDE5OSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNTIsIDE3MCwgNTUsIDIyNSwgMTY5LCA1LCAyNTEsIDg1LCA1NSwgMjI1LCAxNjksIDIxMSwgCi0gICAgMjA5LCAyNDcsIDE3MiwgNTUsIDIyNSwgMTY5LCA1NCwgMTEwLCA1NSwgMjI1LCAxNjksIDU0LCAxMDUsIDU1LCAyMjUsIAotICAgIDE2OSwgNTQsIDIxNiwgMjQ3LCA1NSwgMjI1LCAxNjksIDU0LCAyMTUsIDczLCA1NSwgMjI1LCAxNjksIDU0LCAyNDAsIDIxMCwgCi0gICAgMTgxLCA2LCAxLCAxOTksIDczLCAxODEsIDYsIDEsIDE5OSwgNzUsIDE4MSwgNiwgMSwgMTk5LCA2MSwgMTgxLCA2LCAxLCAKLSAgICAxOTksIDI1NCwgMjA5LCAxODEsIDYsIDEsIDE5OSwgNzYsIDE4MSwgNiwgMSwgMTk5LCAyMjYsIDE4MywgMTgxLCA2LCAxLCAKLSAgICAyMTksIDI1MSwgNzMsIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDc1LCAxODEsIDYsIDEsIDIxOSwgMjUxLCA2MSwgMTgxLCA2LCAKLSAgICAxLCAyMTksIDI1MSwgMjU0LCAyMDksIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDc2LCAxODEsIDYsIDEsIDIxOSwgMjUxLCAyMjYsIAotICAgIDE4MywgMTgxLCA2LCAxLCAyNTMsIDE2NywgMTgxLCA2LCAxLCAyMjYsIDExNiwgMTgxLCA2LCAxLCAyMTEsIDE5NSwgMTgxLCAKLSAgICA2LCAxLCAyMTEsIDQ0LCAxODEsIDYsIDEsIDI0MiwgNjAsIDE4MSwgNiwgMSwgMjI1LCAyMTEsIDE4MSwgNiwgMSwgMjUyLCAKLSAgICA2NiwgMTgxLCA2LCAxLCAyMTcsIDExLCAxODEsIDYsIDEsIDI0OCwgNzcsIDE4MSwgNiwgMSwgMjUwLCAxMjgsIDE4MSwgNiwgCi0gICAgMSwgMjM1LCAxMjQsIDE4MSwgNiwgMSwgMjM0LCAxODksIDE4MSwgNiwgMSwgMjQzLCA4MywgMTgxLCA2LCAxLCAyNDUsIAotICAgIDIwMiwgMTgxLCA2LCAxLCAyMTMsIDI1MCwgMTgxLCA2LCAxLCAyNDUsIDU5LCAxODEsIDYsIDEsIDIxNiwgMTk0LCAxODEsIAotICAgIDYsIDEsIDI0NSwgODIsIDE4MSwgNiwgMSwgMjEwLCA5MiwgMTgxLCA2LCAxLCAyNDUsIDc1LCAxODEsIDYsIDEsIDIxMCwgCi0gICAgNzMsIDE4MSwgNiwgMSwgMjQ1LCA5MiwgMTgxLCA2LCAxLCAyNDUsIDE3NCwgMTgxLCA2LCAxLCAyNDUsIDE1OSwgMTgxLCA2LCAKLSAgICAxLCAyNDUsIDE1MCwgMTgxLCA2LCAxLCAyNDUsIDEzOCwgMTgxLCA2LCAxLCAyMjYsIDIxOSwgMTgxLCA2LCAxLCAyNDUsIAotICAgIDM4LCAxODEsIDQsIDEsIDE5OSwgNzMsIDE4MSwgNCwgMSwgMTk5LCA3NSwgMTgxLCA0LCAxLCAxOTksIDYxLCAxODEsIDQsIAotICAgIDEsIDE5OSwgMjU0LCAyMDksIDE4MSwgNCwgMSwgMTk5LCA3NiwgMTgxLCA0LCAxLCAxOTksIDIyNiwgMTgzLCAxODEsIDQsIAotICAgIDEsIDIxOSwgMjUxLCA3MywgMTgxLCA0LCAxLCAyMTksIDI1MSwgNzUsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIDYxLCAxODEsIAotICAgIDQsIDEsIDIxOSwgMjUxLCAyNTQsIDIwOSwgMTgxLCA0LCAxLCAyMTksIDI1MSwgNzYsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIAotICAgIDIyNiwgMTgzLCAxODEsIDQsIDEsIDI1MywgMTY3LCAxODEsIDQsIDEsIDIyNiwgMTE2LCAxODEsIDQsIDEsIDIxMSwgMTk1LCAKLSAgICAxODEsIDQsIDEsIDIxMSwgNDQsIDE4MSwgNCwgMSwgMjQyLCA2MCwgMTgxLCA0LCAxLCAyMjUsIDIxMSwgMTgxLCA0LCAxLCAKLSAgICAyNTIsIDY2LCAxODEsIDQsIDEsIDIxNywgMTEsIDE4MSwgNCwgMSwgMjQ4LCA3NywgMTgxLCA0LCAxLCAyNTAsIDEyOCwgCi0gICAgMTgxLCA0LCAxLCAyMzUsIDEyNCwgMTgxLCA0LCAxLCAyMzQsIDE4OSwgMTgxLCA0LCAxLCAyNDMsIDgzLCAxODEsIDQsIDEsIAotICAgIDI0NSwgMjAyLCAxODEsIDQsIDEsIDIxMywgMjUwLCAxODEsIDQsIDEsIDI0NSwgNTksIDE4MSwgNCwgMSwgMjE2LCAxOTQsIAotICAgIDE4MSwgNCwgMSwgMjQ1LCA4MiwgMTgxLCA0LCAxLCAyMTAsIDkyLCAxODEsIDQsIDEsIDI0NSwgNzUsIDE4MSwgNCwgMSwgCi0gICAgMjEwLCA3MywgMTgxLCA0LCAxLCAyNDUsIDkyLCAxODEsIDQsIDEsIDI0NSwgMTc0LCAxODEsIDQsIDEsIDI0NSwgMTU5LCAKLSAgICAxODEsIDQsIDEsIDI0NSwgMTUwLCAxODEsIDQsIDEsIDI0NSwgMTM4LCAxODEsIDQsIDEsIDIyNiwgMjE5LCAxODEsIDQsIDEsIAotICAgIDI0NSwgMzgsIDIyMCwgNjksIDEsIDIyNSwgMjA5LCAyMjAsIDY5LCAxLCAyMTYsIDUsIDIyMCwgNjksIDEsIDIzNCwgOTEsIAotICAgIDIyMCwgNjksIDEsIDI0NCwgMTQ3LCAyMjAsIDY5LCAxLCAyMTYsIDE3MiwgMjIwLCA2OSwgMSwgMjE5LCA1OCwgMjIwLCA2OSwgCi0gICAgMSwgMjE4LCAxNCwgMjIwLCA2OSwgMSwgMjUwLCA2MSwgMjIwLCA2OSwgMSwgMjExLCA0NiwgMjIwLCA2OSwgMSwgMjQwLCAKLSAgICAyMDksIDIyMCwgNjksIDEsIDI1MiwgNSwgMjIwLCA2OSwgMSwgMjQ4LCA4OSwgMjIwLCA2OSwgMSwgMjQzLCAxMjEsIDIyMCwgCi0gICAgNjksIDEsIDIxMywgMTIzLCAyMjAsIDY5LCAxLCAyMTYsIDE3NiwgMjIwLCA2OSwgMSwgMjEwLCAyMSwgMjIwLCA2OSwgMSwgCi0gICAgMjMxLCA4OSwgMjIwLCA2OSwgMSwgMjM1LCA0OSwgMjIwLCA2OSwgMSwgMjExLCAyMjUsIDIyMCwgNjksIDEsIDI0MiwgNDgsIAotICAgIDIyMCwgNjksIDEsIDIzMiwgMTQyLCAyMjAsIDY5LCAxLCAyMzAsIDE4OSwgMjIwLCA2OSwgMSwgMjM2LCA0MCwgMjIwLCA2OSwgCi0gICAgMSwgMjQ1LCAyMDEsIDIyMCwgNjksIDEsIDI1MywgMjMxLCAyMjAsIDY5LCAxLCAyNTQsIDI0NywgMjIwLCA2OSwgMSwgMjI2LCAKLSAgICAxOTYsIDIyMCwgNjksIDEsIDIxMSwgMjEyLCAyMjAsIDY5LCAxLCAyMjYsIDEzMCwgMjIwLCA2OSwgMSwgMjU0LCAyMDksIAotICAgIDIyMCwgNjksIDEsIDIyMiwgMjA4LCAyMjAsIDY5LCAxLCAyMjcsIDE5NCwgMjIwLCA2OSwgMSwgMjQ1LCAyMTcsIDIyMCwgCi0gICAgNjksIDEsIDI1NCwgMjE0LCAyMjAsIDY5LCAxLCAyNDAsIDExMSwgMjIwLCA2OSwgMSwgMjE0LCAxNjMsIDIyMCwgNjksIDEsIAotICAgIDIyNiwgMjU0LCAyMjAsIDY5LCAxLCAyMjYsIDE3NiwgMjIwLCA2OSwgMSwgMjI2LCAyMTgsIDIyMCwgNjksIDEsIDI1MywgCi0gICAgMTcwLCAyMjAsIDY5LCAxLCAyNTQsIDE5LCAyMjAsIDY5LCAxLCAyMjYsIDE1OCwgMjIwLCA2OSwgMSwgMjU0LCAxOTIsIAotICAgIDIyMCwgNjksIDEsIDI0NSwgODYsIDIyMCwgNjksIDEsIDI1MywgMjUzLCAyMjAsIDY5LCAxLCAyNDUsIDIyNywgMjIwLCA2OSwgCi0gICAgMSwgMjQwLCAxMTgsIDIyMCwgNjksIDEsIDIxMSwgMTMsIDIyNiwgMTQxLCAxLCAyNTQsIDE3MCwgMjI2LCAxNDEsIDEsIAotICAgIDI1MiwgMTkxLCAyMjYsIDE0MSwgMSwgMjE3LCAxMDUsIDIyNiwgMTQxLCAxLCAyMzUsIDE0MSwgMjI2LCAxNDEsIDEsIDIxMSwgCi0gICAgMTY1LCAyMjYsIDE0MSwgMSwgMjM0LCAxMzIsIDIyNiwgMTQxLCAxLCAyNDgsIDc2LCAyMjYsIDE0MSwgMSwgMjA1LCAyMjYsIAotICAgIDE0MSwgMSwgMjA2LCAyMjYsIDE0MSwgMSwgMjIwLCAyNiwgMjI2LCAxNDEsIDEsIDI0OCwgMjUsIDIyNiwgMTQxLCAxLCAKLSAgICAyNTAsIDIxNSwgMjI2LCAxNDEsIDEsIDI0MywgMTM1LCAyMjYsIDE0MSwgMSwgMjQ0LCAxOTYsIDIyNiwgMTQxLCAxLCAyMjQsIAotICAgIDg2LCAyMjYsIDE0MSwgMSwgMjM1LCA5LCAyMjYsIDE0MSwgMSwgMjMzLCAxMzAsIDIyNiwgMTQxLCAxLCAyMzAsIDIwMCwgCi0gICAgMjI2LCAxNDEsIDEsIDIyNywgMTc4LCAyMjYsIDE0MSwgMSwgMjEyLCAzMCwgMjI2LCAxNDEsIDEsIDE2MiwgMjI2LCAxNDEsIAotICAgIDEsIDE5MSwgMjI2LCAxNDEsIDEsIDYxLCAyMjYsIDE0MSwgMSwgNzUsIDIyNiwgMTQxLCAxLCA3MywgMjI2LCAxNDEsIDEsIAotICAgIDc2LCAyMjYsIDE0MSwgMSwgNzAsIDIyNiwgMTQxLCAxLCAyNTUsIDczLCAyMjYsIDE0MSwgMSwgMjQ1LCAyMDksIDIyNiwgCi0gICAgMTQxLCAxLCAyMjYsIDE4MywgMjI2LCAxNDEsIDIxLCAyMTAsIDg2LCAyMjYsIDE0MSwgMjEsIDExMCwgMjI2LCAxNDEsIDIxLCAKLSAgICAxMDUsIDIyNiwgMTQxLCAyMSwgMTU4LCAyMjYsIDE0MSwgMjEsIDE2MSwgMjI2LCAxNDEsIDIxLCAxODksIDIyNiwgMTQxLCAKLSAgICAyMSwgMTk0LCAyMjYsIDE0MSwgMjEsIDE5OCwgMjI2LCAxNDEsIDIxLCAxOTUsIDIyNiwgMTQxLCAyMSwgMjAwLCAyNDksIAotICAgIDY3LCAzLCA2MSwgMjQ5LCA2NywgMywgNzUsIDI0OSwgNjcsIDMsIDczLCAyNDksIDY3LCAzLCA3NiwgMjQ5LCA2NywgMywgCi0gICAgNzAsIDI0OSwgNjcsIDMsIDIzNSwgMTQxLCAyNDksIDY3LCAzLCAyMzUsIDY4LCAyNDksIDY3LCAzLCAxNzYsIDI0OSwgNjcsIAotICAgIDMsIDIzNCwgMTgyLCAyNDksIDY3LCAzLCAyMzQsIDkyLCAyNDksIDY3LCAzLCAyMzQsIDI4LCAyNDksIDY3LCAzLCAyMzMsIAotICAgIDIxNywgMjQ5LCA2NywgMywgMjMzLCAxMzUsIDI0OSwgNjcsIDMsIDIzMywgNTgsIDI0OSwgNjcsIDMsIDIzMiwgMjQxLCAKLSAgICAyNDksIDY3LCAzLCAyMzIsIDE1NiwgMjQ5LCA2NywgMywgMjMyLCA5OCwgMjQ5LCA2NywgMywgMTg0LCAyNDksIDY3LCAzLCAKLSAgICAyMzEsIDkxLCAyNDksIDY3LCAzLCAyMzAsIDIzMCwgMjQ5LCA2NywgMywgMjMwLCAxNjEsIDI0OSwgNjcsIDMsIDIzMCwgCi0gICAgMTAyLCAyNDksIDY3LCAzLCAxOTcsIDI0OSwgNjcsIDMsIDIyOSwgMTA3LCAyNDksIDY3LCAzLCAyMjgsIDIzMywgMjQ5LCAKLSAgICA2NywgMywgMjI4LCA3NCwgMjQ5LCA2NywgMywgMjI3LCAyMzcsIDI0OSwgNjcsIDMsIDE5MCwgMjQ5LCA2NywgMywgMjI1LCAKLSAgICAyMjEsIDI0OSwgNjcsIDMsIDIyNSwgMTA4LCAyNDksIDY3LCAzLCAyMjUsIDE2LCAyNDksIDY3LCAzLCAyMjQsIDE1MCwgCi0gICAgMjQ5LCA2NywgMywgMjA1LCAyNDksIDY3LCAzLCAyMjMsIDEyOCwgMjQ5LCA2NywgMywgMjIzLCAzNSwgMjQ5LCA2NywgMywgCi0gICAgMjIyLCAyMTEsIDI0OSwgNjcsIDMsIDIyMiwgMTQwLCAyNDksIDY3LCAzLCAyMDYsIDI0OSwgNjcsIDMsIDIyMSwgMTgxLCAKLSAgICAyNDksIDY3LCAzLCAyMTksIDE5MSwgMjQ5LCA2NywgMywgMjE5LCA1OCwgMjQ5LCA2NywgMywgMjE4LCA4MywgMjQ5LCA2NywgCi0gICAgMywgMjE3LCAxMDUsIDI0OSwgNjcsIDMsIDIxNywgMjIsIDI0OSwgNjcsIDMsIDIxNiwgMTE3LCAyNDksIDY3LCAzLCAxMTEsIAotICAgIDI0OSwgNjcsIDMsIDIxNSwgMTE4LCAyNDksIDY3LCAzLCAyMTIsIDY1LCAyNDksIDY3LCAzLCAyMTIsIDIyLCAyNDksIDY3LCAKLSAgICAzLCAyMTEsIDI1MCwgMjQ5LCA2NywgMywgMjExLCAyMjcsIDI0OSwgNjcsIDMsIDIxMSwgMTY1LCAyNDksIDY3LCAzLCAyMTEsIAotICAgIDE2MiwgMjQ5LCA2NywgMywgMjEwLCAxMTYsIDI0OSwgNjcsIDMsIDIxMCwgMjMsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjU0LCAKLSAgICAxNjgsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjUyLCAyNSwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDIsIDIwMSwgMjM2LCAxLCAKLSAgICAyNTQsIDI3LCAxLCAyNDgsIDE4OCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDEsIDIzOCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAKLSAgICAyMTIsIDMwLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIxMCwgOTcsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjQxLCAxOTUsIDIzNiwgCi0gICAgMSwgMjU0LCAyNywgMSwgMjE2LCAyMjYsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjEwLCAyMzIsIDIzNiwgMSwgMjU0LCAyNywgCi0gICAgMSwgMjM0LCAyMjUsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjMzLCA5MywgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMzEsIDY1LCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNywgMTk0LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMSwgMjQ5LCAyMzYsIDEsIDI1NCwgCi0gICAgMjcsIDEsIDI1MywgMTYyLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNSwgMjIxLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMiwgCi0gICAgMjQsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjI0LCAzNCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjMsIDY3LCAyMzYsIDEsIAotICAgIDI1NCwgMjcsIDEsIDIyMCwgMjAsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjE3LCAzNiwgMjM2LCAxLCAyNTQsIDI3LCAyMjEsIAotICAgIDE3MywgNTAsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDExMCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTA1LCAyMzYsIDEsIDI1NCwgCi0gICAgMjcsIDU0LCAxNTgsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDIxNiwgMjQ3LCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTUsIDczLCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDIyNSwgMTE5LCAxLCAyNTQsIDE2NSwgMjI1LCAxMTksIAotICAgIDEsIDI1MiwgMjgsIDIyNSwgMTE5LCAxLCAyNDMsIDEwOSwgMjI1LCAxMTksIDEsIDI0OCwgNTYsIDIyNSwgMTE5LCAxLCAKLSAgICAyNDEsIDIzOCwgMjI1LCAxMTksIDEsIDIxMiwgMzcsIDIyNSwgMTE5LCAxLCAyMTAsIDExMCwgMjI1LCAxMTksIDEsIDI0MSwgCi0gICAgMTk3LCAyMjUsIDExOSwgMSwgMjE2LCAyMzAsIDIyNSwgMTE5LCAxLCAyMTAsIDIzMywgMjI1LCAxMTksIDEsIDIzNCwgMjUwLCAKLSAgICAyMjUsIDExOSwgMSwgMjMzLCA5OSwgMjI1LCAxMTksIDEsIDIzMSwgNjUsIDIyNSwgMTE5LCAxLCAyMjcsIDE5NCwgMjI1LCAKLSAgICAxMTksIDEsIDIyMCwgMTQ0LCAyMjUsIDExOSwgMSwgMjU0LCAxOTYsIDIyNSwgMTE5LCAxLCAyMjUsIDIyMSwgMjI1LCAxMTksIAotICAgIDEsIDIyMiwgMjUsIDIyNSwgMTE5LCAxLCAyMjQsIDM5LCAyMjUsIDExOSwgMSwgMjIyLCAxODksIDIyNSwgMTE5LCAxLCAKLSAgICAyMjAsIDIwLCAyMjUsIDExOSwgMSwgMjE3LCA0MSwgMjI1LCAxMTksIDU0LCAxMTAsIDIyNSwgMTE5LCA1NCwgMjE2LCAyNDcsIAotICAgIDIyNSwgMTE5LCA1NCwgMjE1LCA3MywgMjI1LCAxMTksIDU0LCAxMjMsIDI0MCwgMjEwLCAyMjUsIDExOSwgNTQsIDEwNSwgCi0gICAgMjI1LCAxMTksIDU0LCAxNTgsIDIyNSwgMTE5LCAyMTEsIDIwOSwgMjIwLCAxMzcsIDIzMiwgNTksIDEsIDYxLCAyMzIsIDU5LCAKLSAgICAxLCAyNTMsIDE1OCwgMjMyLCA1OSwgMSwgMjQzLCAyMDIsIDIzMiwgNTksIDEsIDI0OSwgNjAsIDIzMiwgNTksIDEsIDc1LCAKLSAgICAyMzIsIDU5LCAxLCAyMTQsIDEwNSwgMjMyLCA1OSwgMSwgNzMsIDIzMiwgNTksIDEsIDIxMSwgMTE3LCAyMzIsIDU5LCAxLCAKLSAgICAyMzUsIDIzLCAyMzIsIDU5LCAxLCAxNTYsIDIzMiwgNTksIDEsIDE5MywgMjMyLCA1OSwgMSwgMjMwLCAyNSwgMjMyLCA1OSwgCi0gICAgMSwgNzYsIDIzMiwgNTksIDEsIDE1MywgMjMyLCA1OSwgMSwgMjE4LCAyMjYsIDIzMiwgNTksIDEsIDIxNywgMTUyLCAyMzIsIAotICAgIDU5LCAxLCA3MCwgMjMyLCA1OSwgMSwgMjQ1LCA2LCAyMzIsIDU5LCAxLCAyMjQsIDk2LCAyMzIsIDU5LCAxLCAyMjIsIDkxLCAKLSAgICAyMzIsIDU5LCAxLCAyMTUsIDE1OSwgMjMyLCA1OSwgMSwgMjU0LCAxMjMsIDIzMiwgNTksIDEsIDI0NSwgMTUwLCAyMzIsIAotICAgIDU5LCAxLCAyMzIsIDYyLCAyMzIsIDU5LCAxLCAyMjgsIDExMSwgMjMyLCA1OSwgMSwgMjUxLCA2NiwgMjMyLCA1OSwgMjE1LCAKLSAgICAyMjIsIDc4LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNjEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCA3NSwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDczLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNzYsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxOTEsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMTIsIDY1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjUyLCAxOTEsIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCAyNTIsIDE5MCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5MCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDE4NCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5NywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyOSwgMjI4LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjI5LCAxMDcsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjksIDEwNiwgMjMxLCA0OCwgMjQxLCAxNzQsIAotICAgIDEsIDIwNSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyMywgMTg3LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjMzLCAxMzUsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMzQsIDEzMiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI0MSwgMTg5LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjA2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjIyLCAzMywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDIyMSwgMTgxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTc2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjI0LCA4OCwgMjMxLCAKLSAgICA0OCwgMjQxLCAxNzQsIDEsIDIxNywgMTA1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAxMDQsIDIzMSwgNDgsIDI0MSwgCi0gICAgMTc0LCAxLCAyMTcsIDIyLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAyMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIAotICAgIDExMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI0OCwgMjIxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMTYsIDIxMywgMTcwLCAKLSAgICAyMzEsIDQ4LCAyNDEsIDE3NCwgMTYsIDIxMywgMTY5LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA2MSwgMjMxLCA0OCwgMjQ5LCAKLSAgICA5NCwgMSwgNzUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDczLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA3NiwgMjMxLCA0OCwgCi0gICAgMjQ5LCA5NCwgMSwgMTkxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMTIsIDY1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNTIsIAotICAgIDE5MSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTkwLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxODQsIDIzMSwgNDgsIDI0OSwgCi0gICAgOTQsIDEsIDE5NywgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjI5LCAxMDcsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIwNSwgMjMxLCAKLSAgICA0OCwgMjQ5LCA5NCwgMSwgMjMzLCAxMzUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIzNCwgMTMyLCAyMzEsIDQ4LCAyNDksIAotICAgIDk0LCAxLCAyNDEsIDE4OSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjA2LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNTQsIDIzLCAKLSAgICAyMDYsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIyMSwgMTgxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxNzYsIDIzMSwgNDgsIAotICAgIDI0OSwgOTQsIDEsIDIyNCwgODgsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIxNywgMTA1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAKLSAgICAyMTcsIDIyLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxMTEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDI0OCwgMjIxLCAyMzEsIAotICAgIDQ4LCAyNDksIDk0LCAyMzIsIDE0NSwgMjIyLCAyMTcsIDIzMSwgNDgsIDI0OSwgOTQsIDIzMiwgMTQ1LCAyMzYsIDYsIDIzNCwgCi0gICAgMTIwLCAxLCA2MSwgMjM0LCAxMjAsIDI1LCA1LCA3MywgMjM0LCAxMjAsIDI1LCA1LCA3MCwgMjM0LCAxMjAsIDI1LCA1LCAKLSAgICAxNDksIDE1MywgMjM0LCAxMjAsIDI1LCA1LCA3NSwgMjM0LCAxMjAsIDI1LCA1LCA3NiwgMjM0LCAxMjAsIDI1LCAyMzMsIAotICAgIDIzLCA3OCwgMjM0LCAxMjAsIDUsIDUyLCAyMjIsIDIzNCwgNTEsIDIzNCwgMTIwLCA1LCAyNTQsIDc1LCAyMzQsIDEyMCwgNSwgCi0gICAgMjEzLCAxNDcsIDIzNCwgMTIwLCAxLCAxNzYsIDIzNCwgMTIwLCAxLCAyMzQsIDEzMiwgMjM0LCAxMjAsIDEsIDI0MywgMTM1LCAKLSAgICAyMzQsIDEyMCwgMSwgMjQyLCAyNDksIDIzNCwgMTIwLCAxLCAyNTEsIDMzLCAyMzQsIDEyMCwgMSwgMjUwLCAxNTcsIDIzNCwgCi0gICAgMTIwLCAxLCAyMzUsIDE0MSwgMjM0LCAxMjAsIDEsIDIyNywgMTY1LCAyMzQsIDEyMCwgMSwgMjE1LCAxNTYsIDIzNCwgMTIwLCAKLSAgICAxLCAyMTUsIDE0NCwgMjM0LCAxMjAsIDEsIDI0OCwgMTM1LCAyMzQsIDEyMCwgMSwgMjQ4LCAxMTksIDIzNCwgMTIwLCAxLCAKLSAgICAyMjgsIDExMCwgMjM0LCAxMjAsIDEsIDIxNywgMTA1LCAyMzQsIDEyMCwgMSwgMjE2LCAyMDgsIDIzNCwgMTIwLCAxLCAyNDgsIAotICAgIDIyMSwgMjM0LCAxMjAsIDEsIDI0OCwgMjUsIDIzNCwgMTIwLCAxLCAxOTcsIDIzNCwgMTIwLCAxLCAxOTAsIDIzNCwgMTIwLCAKLSAgICAxLCAyMjUsIDE0NywgMjM0LCAxMjAsIDEsIDI1MiwgMTkxLCAyMzQsIDEyMCwgMSwgMjUyLCAxOCwgMjM0LCAxMjAsIDEsIAotICAgIDE4NCwgMjM0LCAxMjAsIDEsIDE5MSwgMjM0LCAxMjAsIDEsIDIwNSwgMjM0LCAxMjAsIDEsIDIzMywgMTM1LCAyMzQsIDEyMCwgCi0gICAgMSwgMjE0LCAyNywgMjM0LCAxMjAsIDEsIDIyMCwgMTAyLCAyMzQsIDEyMCwgMSwgMjE4LCAyMjMsIDIzNCwgMTIwLCAxLCAKLSAgICAyMDYsIDIzNCwgMTIwLCAxLCAyMTAsIDExNiwgMjM0LCAxMjAsIDEsIDE2MiwgMjM0LCAxMjAsIDEsIDIzNCwgNDYsIDIzNCwgCi0gICAgMTIwLCAxLCAyMTUsIDEyNCwgMjM0LCAxMjAsIDUsIDI1MiwgMTQxLCA0OCwgMjM0LCAxMjAsIDUsIDI1MCwgMjIxLCAyMzQsIAotICAgIDEyMCwgNSwgNTksIDUxLCAyMzQsIDEyMCwgMjEzLCAxNTIsIDIzNCwgMTIwLCAyMSwgMTEwLCAyMzQsIDEyMCwgMjEsIDEwNSwgCi0gICAgMjM0LCAxMjAsIDIxLCAxNTgsIDIzNCwgMTIwLCAyMSwgMTYxLCAyMzQsIDEyMCwgNTQsIDIxNiwgMjQ3LCAyMzQsIDEyMCwgCi0gICAgNTQsIDIxNSwgNzMsIDIzNCwgMTIwLCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM0LCAxMjAsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0NywgMTIwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIDQsIDI1MCwgMzUsIDIzNCwgMTIwLCAKLSAgICAyMjQsIDE0MSwgMjUwLCAzNSwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyNDksIDEzNywgMTMwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIAotICAgIDIzMSwgMTgwLCAyMzQsIDEyMCwgMjI0LCAxNDEsIDIzMiwgMTE1LCAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0OCwgMTc4LCAKLSAgICAyMzQsIDEyMCwgMjI0LCAxNDEsIDUyLCAyNDgsIDE3OCwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyMzIsIDIwNywgNTUsIDIxOSwgCi0gICAgMjgsIDI1NCwgMzgsIDEsIDI0MSwgMjM4LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjMzLCA5MywgNTUsIDIxOSwgMjgsIAotICAgIDI1NCwgMzgsIDEsIDI0MSwgMTk1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjMxLCA2NSwgNTUsIDIxOSwgMjgsIDI1NCwgCi0gICAgMzgsIDEsIDIyNCwgMzQsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTIsIDMwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgCi0gICAgMSwgMjIwLCAyMCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMywgNjcsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAKLSAgICAyNTIsIDI1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjE3LCAzNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMSwgCi0gICAgMjI2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjM0LCAyMjUsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjcsIAotICAgIDE5NCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzNCwgMTE2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIyLCAyNCwgCi0gICAgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMSwgMjQ5LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQ0LCAxNTQsIDU1LCAKLSAgICAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNTQsIDE3MCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI1MywgMTYxLCA1NSwgCi0gICAgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQ4LCAyMiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0MiwgMjAxLCA1NSwgMjE5LCAKLSAgICAyOCwgMjU0LCAzOCwgMSwgMjQ4LCAxODgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDIsIDIzOCwgNTUsIDIxOSwgMjgsIAotICAgIDI1NCwgMzgsIDEsIDIxNiwgMjI2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjEwLCA5NiwgNTUsIDIxOSwgMjgsIDI1NCwgCi0gICAgMzgsIDEsIDI0OCwgMTksIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTAsIDIzMiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIAotICAgIDEsIDIxNiwgMTk3LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjE2LCAxNzgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCA1NCwgCi0gICAgMTEwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgNTQsIDI0NCwgMTE0LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMTMyLCAyMzUsIAotICAgIDIzOCwgMjUzLCAxNzIsIDEsIDYxLCAyNTMsIDE3MiwgMSwgMjU1LCA3MywgMjUzLCAxNzIsIDEsIDI1NCwgNzMsIDI1MywgCi0gICAgMTcyLCAxLCAyNTUsIDMyLCAyNTMsIDE3MiwgMSwgMjU0LCAxMjMsIDI1MywgMTcyLCAxLCAyNTUsIDMzLCAyNTMsIDE3MiwgCi0gICAgMSwgMjU0LCAyNDMsIDI1MywgMTcyLCAxLCAyNTQsIDIzOSwgMjUzLCAxNzIsIDEsIDc1LCAyNTMsIDE3MiwgMSwgMjQ1LCAKLSAgICAyMDksIDI1MywgMTcyLCAxLCA3NiwgMjUzLCAxNzIsIDEsIDIyNiwgMTgzLCAyNTMsIDE3MiwgMSwgNzMsIDI1MywgMTcyLCAKLSAgICAxLCAyMzYsIDMzLCAyNTMsIDE3MiwgMSwgNzAsIDI1MywgMTcyLCAxLCAyMTQsIDExOCwgMjUzLCAxNzIsIDEsIDIzNCwgCi0gICAgMTgyLCAyNTMsIDE3MiwgMSwgMjExLCAxNjIsIDI1MywgMTcyLCAxLCAyMTEsIDEyOCwgMjUzLCAxNzIsIDEsIDIxMSwgMTM3LCAKLSAgICAyNTMsIDE3MiwgMSwgMjQzLCA2MiwgMjUzLCAxNzIsIDEsIDI0MywgMjQsIDI1MywgMTcyLCAxLCAyNDIsIDIzNiwgMjUzLCAKLSAgICAxNzIsIDEsIDI1MCwgMTkwLCAyNTMsIDE3MiwgMSwgMjM1LCAxMjYsIDI1MywgMTcyLCAxLCAyMTcsIDIyLCAyNTMsIDE3MiwgCi0gICAgMSwgMjE2LCAxOTUsIDI1MywgMTcyLCAxLCAyNDgsIDkwLCAyNTMsIDE3MiwgMSwgMjQ4LCAxNywgMjUzLCAxNzIsIDEsIAotICAgIDIxNSwgMTUxLCAyNTMsIDE3MiwgMSwgMjI1LCAyMjEsIDI1MywgMTcyLCAxLCAyNDQsIDE1NCwgMjUzLCAxNzIsIDEsIDI1MiwgCi0gICAgNzUsIDI1MywgMTcyLCAxLCAyNTIsIDE0LCAyNTMsIDE3MiwgMSwgMjI5LCA2NCwgMjUzLCAxNzIsIDEsIDIyOCwgMjM5LCAKLSAgICAyNTMsIDE3MiwgMSwgMjI4LCAyNDAsIDI1MywgMTcyLCAxLCAyMjksIDEwNywgMjUzLCAxNzIsIDEsIDIyNywgMTU2LCAyNTMsIAotICAgIDE3MiwgMSwgMjI4LCAxMDUsIDI1MywgMTcyLCAxLCAyMzEsIDkxLCAyNTMsIDE3MiwgMSwgMjQxLCAxMTYsIDI1MywgMTcyLCAKLSAgICAxLCAyMTAsIDE2NiwgMjUzLCAxNzIsIDEsIDIxMSwgNDcsIDI1MywgMTcyLCAxLCAyMTMsIDI1NSwgMjUzLCAxNzIsIDEsIAotICAgIDIyMywgMTI4LCAyNTMsIDE3MiwgMSwgMjMzLCA1OCwgMjUzLCAxNzIsIDEsIDIyMSwgMTgxLCAyNTMsIDE3MiwgMSwgMjEwLCAKLSAgICA5NCwgMjUzLCAxNzIsIDEsIDIyMCwgNjMsIDI1MywgMTcyLCAxLCAyMTAsIDc0LCAyNTMsIDE3MiwgMSwgMjE5LCAxOTgsIAotICAgIDI1MywgMTcyLCAxLCAyMTgsIDE5MywgMjUzLCAxNzIsIDEsIDI0MSwgMjM4LCAyNTMsIDE3MiwgMjU1LCAyMSwgNzgsIDIxNiwgCi0gICAgNzksIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgMTQwLCA0LCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIAotICAgIDE0MCwgMjMzLCA4NSwgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAxNDAsIDIzMywgODUsIDEyMywgNTksIDExNywgCi0gICAgMTEzLCAxNzAsIDIyNCwgMTQwLCAyMzMsIDg1LCAxMTMsIDIyMiwgMjMyLCAxMTcsIDEyMywgMjIyLCAyMzQsIDIyNCwgMTQwLCAKLSAgICAyMzMsIDg1LCAxMjMsIDIyMiwgMjM0LCAxMTcsIDExMywgMjIyLCAyMzIsIDIyNCwgMTQwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIAotICAgIDEsIDI1NCwgMTY4LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI1MiwgMjUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQyLCAKLSAgICAyMDEsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQ4LCAxODgsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjQxLCAyMzgsIAotICAgIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjEyLCAzMCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTAsIDk3LCAyMzUsIDIxOCwgCi0gICAgMjI1LCAyNTQsIDEsIDI0MSwgMTk1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxNiwgMjI2LCAyMzUsIDIxOCwgMjI1LCAKLSAgICAyNTQsIDEsIDIxMCwgMjMyLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIzNCwgMjI1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIAotICAgIDIzMywgOTMsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjMxLCA2NSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjcsIDE5NCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjEsIDI0OSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNTMsIDE2MiwgMjM1LCAKLSAgICAyMTgsIDIyNSwgMjU0LCAxLCAyMjUsIDIyMSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjIsIDI0LCAyMzUsIDIxOCwgCi0gICAgMjI1LCAyNTQsIDEsIDIyNCwgMzQsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjIzLCA2NywgMjM1LCAyMTgsIDIyNSwgMjU0LCAKLSAgICAxLCAyMjAsIDIwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxNywgMzYsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDExMCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTA1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxNTgsIDIzNSwgMjE4LCAyMjUsIAotICAgIDI1NCwgNTQsIDE2MSwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMjE2LCAyNDcsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIAotICAgIDIxNSwgNzMsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDEyMywgMjQwLCAyMTAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIAotICAgIDEyMywgMjE2LCAxNDcsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNTQsIDE2OCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI1MiwgCi0gICAgMjUsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNDIsIDIwMSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0OCwgMTg4LCAyMzUsIAotICAgIDIxOCwgMjI2LCA3MiwgMSwgMjQxLCAyMzgsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTIsIDI5LCAyMzUsIDIxOCwgMjI2LCAKLSAgICA3MiwgMSwgMjEwLCA5NywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0MSwgMTk1LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgCi0gICAgMjE2LCAyMjYsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTAsIDIzMiwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzNCwgMjI1LCAKLSAgICAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjMzLCA5MywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzMSwgNjQsIDIzNSwgMjE4LCAKLSAgICAyMjYsIDcyLCAxLCAyMjcsIDE5NCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIyMSwgMjQ5LCAyMzUsIDIxOCwgMjI2LCA3MiwgCi0gICAgMSwgMjI1LCAyMjEsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMjIsIDI0LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjIwLCAKLSAgICAyMCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIxNywgMzYsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTEwLCAyMzUsIDIxOCwgCi0gICAgMjI2LCA3MiwgNTQsIDEwNSwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxNTgsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTYxLCAKLSAgICAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDIxNiwgMjQ3LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDIxNSwgNzMsIDIzNSwgCi0gICAgMjE4LCAyMjYsIDcyLCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxMjMsIDIxNiwgMTQ3LCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgNjEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDYxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAKLSAgICAyNTQsIDI0MywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDczLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCA3MywgNTUsIDIwMSwgMSwgCi0gICAgMjExLCAzNywgNzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCA3NiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMjM0LCAKLSAgICA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMjYsIDIzNCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NSwgMjUsIDU1LCAyMDEsIDEsIAotICAgIDIxMSwgMzcsIDI1NSwgMjUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDI0MiwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAyNDIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIxNiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMTYsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzNywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzcsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNTQsIDI1NSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyNTUsIDU1LCAyMDEsIDEsIDIyNiwgCi0gICAgMTQ5LCAyNTQsIDI0MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTIsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgCi0gICAgMTIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTMsIDE2NywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAxNjcsIDU1LCAKLSAgICAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyNCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMjQsIDU1LCAyMDEsIDEsIAotICAgIDIyNiwgMTQ5LCAyNTQsIDIzNSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyMjYsIDIzMywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjI2LCAyMzMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDE3OCwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAxNzgsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzNCwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0NSwgMTYxLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxNTksIDU1LCAyMDEsIDEsIDIyNiwgCi0gICAgMTQ5LCAyNTQsIDEyMywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjMyLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIAotICAgIDIzMiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTMxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDEzMSwgNTUsIAotICAgIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTQ3LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDE0NywgNTUsIDIwMSwgMSwgCi0gICAgMjI2LCAxNDksIDI0NSwgMTE4LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDExOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAxMTUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEzOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMzEsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEwOCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMTc1LCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjQwLCAxMTMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDIxNSwgNTUsIDIwMSwgMSwgMjExLCAKLSAgICAzNywgMjQ1LCAyMTUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDQ1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIAotICAgIDQ1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjM1LCAxODEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIzNSwgMTgxLCA1NSwgCi0gICAgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAxNTksIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIyNiwgMTU5LCA1NSwgMjAxLCAxLCAKLSAgICAyMjYsIDE0OSwgMjU0LCA0MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCA0MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIAotICAgIDI1NCwgMjMwLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjUzLCAyMzcsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyOCwgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1MywgMjMxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTMsIDIzMSwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0NSwgNzUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgNzUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyNTMsIDIwNiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAyMDYsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIyNSwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAyMjUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDE0MCwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI1MiwgMTI1LCAyMjIsIDEyNywgMjEsIDExMCwgMjIyLCAxMjcsIDIxLCAxMDUsIDIyMiwgMTI3LCAKLSAgICAyMSwgMTU4LCAyMjIsIDEyNywgMjEsIDE2MSwgMjIyLCAxMjcsIDIxLCAxODksIDIyMiwgMTI3LCAyMSwgMTk0LCAyMjIsIAotICAgIDEyNywgMjEsIDE5OCwgMjIyLCAxMjcsIDIxLCAxOTUsIDIyMiwgMTI3LCAyMSwgMjAwLCAyMjIsIDEyNywgNTQsIDIxNiwgCi0gICAgMjQ3LCAyMjIsIDEyNywgNTQsIDIxNSwgNzMsIDIyMiwgMTI3LCA1NCwgMjE2LCAxNjIsIDIyMiwgMTI3LCA1NCwgMjQ0LCAKLSAgICAxNSwgMjIyLCAxMjcsIDU0LCAyNDQsIDExNCwgMjIyLCAxMjcsIDU0LCAyMTksIDExMSwgMjIyLCAxMjcsIDU0LCAyMjAsIAotICAgIDExNiwgMjIyLCAxMjcsIDU0LCAyNDUsIDE4NCwgMjIyLCAxMjcsIDU0LCAyMjgsIDE5NSwgMjIyLCAxMjcsIDU0LCAxMjMsIAotICAgIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDExMywgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMTM0LCAyNDAsIDIxMCwgMjIyLCAKLSAgICAxMjcsIDU0LCAyNDQsIDExLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjIyLCAxMjcsIAotICAgIDU0LCAyMTksIDEyNSwgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMjIwLCAxMjIsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIAotICAgIDI0NSwgMTkzLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyMjgsIDIwMCwgMjQwLCAyMTAsIDIyMiwgMTI3LCAyNDQsIDIsIAotICAgIDEyMywgMjQyLCAyNywgMjIyLCAxMjcsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMjIsIDEyNywgMjQ0LCAyLCAxMjMsIDIxNiwgCi0gICAgMTY4LCAyMjIsIDEyNywgMjQ0LCAyLCAxMTMsIDIxNiwgMTY2LCAxMTgsIDUsIDI1MCwgMjU1LCAxMTgsIDUsIDI1NCwgNzUsIAotICAgIDExOCwgNSwgMjEzLCAxNDcsIDExOCwgNSwgMjM1LCAxMDIsIDExOCwgNSwgMjE0LCAxNjEsIDExOCwgMSwgNjEsIDExOCwgMSwgCi0gICAgMjU1LCA3MywgMTE4LCAxLCA3MywgMTE4LCAxLCAyMzYsIDMzLCAxMTgsIDEsIDcwLCAxMTgsIDEsIDIxNCwgMTE4LCAxMTgsIAotICAgIDEsIDE0OSwgMTUzLCAxMTgsIDEsIDE0OSwgMjIyLCAxODAsIDExOCwgMSwgMTQ5LCAxNTYsIDExOCwgMSwgMTQ5LCAyMzIsIAotICAgIDE4NSwgMTE4LCAxLCA3NSwgMTE4LCAxLCAyNTQsIDIwMSwgMTE4LCAxLCA3NiwgMTE4LCAxLCAyNTMsIDE5MiwgMTE4LCAxLCAKLSAgICAxNzYsIDExOCwgMSwgMjM0LCAxMzIsIDExOCwgMSwgMjQzLCAxMzUsIDExOCwgMSwgMjQyLCAyNDksIDExOCwgMSwgMjI5LCAKLSAgICA3NywgMTE4LCAxLCAyNTEsIDMzLCAxMTgsIDEsIDI1MCwgMTU3LCAxMTgsIDEsIDIzNSwgMTQxLCAxMTgsIDEsIDIzNSwgCi0gICAgMTE0LCAxMTgsIDEsIDIyNywgMTY1LCAxMTgsIDEsIDIxNSwgMTU2LCAxMTgsIDEsIDIxNSwgMTQ0LCAxMTgsIDEsIDI0OCwgCi0gICAgMTM1LCAxMTgsIDEsIDI0OCwgMTE5LCAxMTgsIDEsIDIyOCwgMTEwLCAxMTgsIDEsIDIxNywgMTA1LCAxMTgsIDEsIDIxNiwgCi0gICAgMjA4LCAxMTgsIDEsIDI0OCwgMjIxLCAxMTgsIDEsIDI0OCwgMjUsIDExOCwgMSwgMTk3LCAxMTgsIDEsIDE5MCwgMTE4LCAxLCAKLSAgICAyMjUsIDE0NywgMTE4LCAxLCAyNTIsIDE5MSwgMTE4LCAxLCAyNTIsIDE4LCAxMTgsIDEsIDE4NCwgMTE4LCAxLCAxOTEsIAotICAgIDExOCwgMSwgMjA1LCAxMTgsIDEsIDIzMywgMTM1LCAxMTgsIDEsIDIxNCwgMjcsIDExOCwgMSwgMjIwLCAxMDIsIDExOCwgMSwgCi0gICAgMjE4LCAyMjMsIDExOCwgMSwgMjA2LCAxMTgsIDEsIDE2MiwgMTE4LCAxLCAyMzIsIDE4NCwgMTE4LCAxLCA1NSwgMzYsIAotICAgIDIzMiwgMTc1LCAxMTgsIDEsIDU1LCAzNiwgMjIyLCAxNzksIDExOCwgMSwgNTUsIDM2LCAyMjgsIDkyLCAxMTgsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAxMTgsIDI1LCA1LCAyNTIsIDE1LCAyNTUsIDczLCAxMTgsIDI1LCA1LCA3MywgMTE4LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgMTE4LCAyNSwgNSwgNzAsIDExOCwgMjUsIDUsIDIxNCwgMTE4LCAxMTgsIDI1LCA1LCAxNDksIDE1MywgMTE4LCAyNSwgCi0gICAgNSwgMTQ5LCAyMjIsIDE4MCwgMTE4LCAyNSwgNSwgMTQ5LCAxNTYsIDExOCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDExOCwgCi0gICAgMjUsIDUsIDc1LCAxMTgsIDI1LCA1LCAyNTQsIDIwMSwgMTE4LCAyNSwgNSwgNzYsIDExOCwgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAxMTgsIDIxMywgMTUyLCAxMTgsIDI0OCwgMTc4LCAxMTgsIDUyLCAyNDgsIDE3OCwgMTE4LCAyMjQsIDE0MSwgMjQ3LCAxMjAsIAotICAgIDExOCwgMjI0LCAxNDEsIDUyLCAyNDcsIDEyMCwgMTE4LCAyMjQsIDE0MSwgMjMyLCAyMTMsIDExOCwgMjI0LCAxNDEsIDI0OSwgCi0gICAgMTM3LCAxMzAsIDExOCwgMjI0LCAxNDEsIDIzMiwgMTE1LCAxMTgsIDU0LCAxMTAsIDExOCwgNTQsIDEwNSwgMTE4LCA1NCwgCi0gICAgMTU4LCAxMTgsIDU0LCAxNjEsIDExOCwgNTQsIDE4OSwgMTE4LCA1NCwgMTk0LCAxMTgsIDU0LCAxOTgsIDExOCwgNTQsIAotICAgIDE5NSwgMTE4LCA1NCwgMjAwLCAxMTgsIDU0LCAyMTYsIDI0NywgMTE4LCA1NCwgMjE1LCA3MywgMTE4LCA1NCwgMjE2LCAKLSAgICAxNjIsIDExOCwgNTQsIDI0NCwgMTUsIDExOCwgNTQsIDI0NCwgMTE0LCAxMTgsIDU0LCAyMTksIDExMSwgMTE4LCA1NCwgCi0gICAgMjIwLCAxMTYsIDExOCwgNTQsIDI0NSwgMTg0LCAxMTgsIDU0LCAyMjgsIDE5NSwgMTE4LCA1NCwgMTIzLCAyNDAsIDIxMCwgCi0gICAgMTE4LCA1NCwgMTIzLCAyMTYsIDE0NywgMTE4LCAyMSwgMjEwLCA4NiwgMTE4LCAyMSwgMTEwLCAxMTgsIDIxLCAxMDUsIAotICAgIDExOCwgMjEsIDE1OCwgMTE4LCAyMSwgMTYxLCAxMTgsIDIxLCAxODksIDExOCwgMjEsIDE5NCwgMTE4LCAyMSwgMTk4LCAKLSAgICAxMTgsIDIxLCAxOTUsIDExOCwgMjEsIDIwMCwgMjM0LCAyNDQsIDUsIDI1MCwgMjU1LCAyMzQsIDI0NCwgNSwgMjU0LCA3NSwgCi0gICAgMjM0LCAyNDQsIDUsIDIxMywgMTQ3LCAyMzQsIDI0NCwgMSwgNjEsIDIzNCwgMjQ0LCAxLCAyNTUsIDczLCAyMzQsIDI0NCwgCi0gICAgMSwgNzMsIDIzNCwgMjQ0LCAxLCAyMzYsIDMzLCAyMzQsIDI0NCwgMSwgNzAsIDIzNCwgMjQ0LCAxLCAyMTQsIDExOCwgMjM0LCAKLSAgICAyNDQsIDEsIDc1LCAyMzQsIDI0NCwgMSwgMjU0LCAyMDEsIDIzNCwgMjQ0LCAxLCA3NiwgMjM0LCAyNDQsIDEsIDI1MywgCi0gICAgMTkyLCAyMzQsIDI0NCwgMSwgMTc2LCAyMzQsIDI0NCwgMSwgMjM0LCAxMzIsIDIzNCwgMjQ0LCAxLCAyNDMsIDEzNSwgMjM0LCAKLSAgICAyNDQsIDEsIDI0MiwgMjQ5LCAyMzQsIDI0NCwgMSwgMjI5LCA3NywgMjM0LCAyNDQsIDEsIDI1MSwgMzMsIDIzNCwgMjQ0LCAKLSAgICAxLCAyNTAsIDE1NywgMjM0LCAyNDQsIDEsIDIzNSwgMTQxLCAyMzQsIDI0NCwgMSwgMjM1LCAxMTQsIDIzNCwgMjQ0LCAxLCAKLSAgICAyMjcsIDE2NSwgMjM0LCAyNDQsIDEsIDIxNSwgMTU2LCAyMzQsIDI0NCwgMSwgMjE1LCAxNDQsIDIzNCwgMjQ0LCAxLCAyNDgsIAotICAgIDEzNSwgMjM0LCAyNDQsIDEsIDI0OCwgMTI0LCAyMzQsIDI0NCwgMSwgMjQ4LCAxMTksIDIzNCwgMjQ0LCAxLCAyMjMsIDM5LCAKLSAgICAyMzQsIDI0NCwgMSwgMjI4LCAxMTAsIDIzNCwgMjQ0LCAxLCAyMTcsIDEwNSwgMjM0LCAyNDQsIDEsIDIxNiwgMjA4LCAyMzQsIAotICAgIDI0NCwgMSwgMjQ4LCAyMjEsIDIzNCwgMjQ0LCAxLCAyNDgsIDI1LCAyMzQsIDI0NCwgMSwgMTk3LCAyMzQsIDI0NCwgMSwgCi0gICAgMTkwLCAyMzQsIDI0NCwgMSwgMjI1LCAxNDcsIDIzNCwgMjQ0LCAxLCAyNTIsIDE5MSwgMjM0LCAyNDQsIDEsIDI1MiwgMTgsIAotICAgIDIzNCwgMjQ0LCAxLCAxODQsIDIzNCwgMjQ0LCAxLCAxOTEsIDIzNCwgMjQ0LCAxLCAyMDUsIDIzNCwgMjQ0LCAxLCAyMzMsIAotICAgIDEzNSwgMjM0LCAyNDQsIDEsIDIxNCwgMjcsIDIzNCwgMjQ0LCAxLCAyMjAsIDEwMiwgMjM0LCAyNDQsIDEsIDIxOCwgMjIzLCAKLSAgICAyMzQsIDI0NCwgMSwgMjA2LCAyMzQsIDI0NCwgMSwgMTYyLCAyMzQsIDI0NCwgMjUsIDUsIDI1NSwgNzMsIDIzNCwgMjQ0LCAKLSAgICAyNSwgNSwgNzMsIDIzNCwgMjQ0LCAyNSwgNSwgMjM2LCAzMywgMjM0LCAyNDQsIDI1LCA1LCA3MCwgMjM0LCAyNDQsIDI1LCAKLSAgICA1LCAyMTQsIDExOCwgMjM0LCAyNDQsIDI1LCA1LCA3NSwgMjM0LCAyNDQsIDI1LCA1LCAyNTQsIDIwMSwgMjM0LCAyNDQsIAotICAgIDI1LCA1LCA3NiwgMjM0LCAyNDQsIDI1LCA1LCAyNTMsIDE5MiwgMjM0LCAyNDQsIDUsIDIxMywgMTUyLCAyMzQsIDI0NCwgNSwgCi0gICAgMjI3LCAyMDUsIDIzNCwgMjQ0LCAyNTUsIDIxLCA1MCwgMjM0LCAyNDQsIDI0NSwgMTIxLCA1MCwgMjM0LCAyNDQsIDU0LCAKLSAgICA1MCwgMjM0LCAyNDQsIDIyMSwgMTczLCA3OCwgMjM0LCAyNDQsIDUyLCAyMjEsIDE3MywgNzgsIDIzNCwgMjQ0LCAyNDgsIAotICAgIDE3OCwgMjM0LCAyNDQsIDUyLCAyNDgsIDE3OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjIyLCAxOCwgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjE3LCA4MCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjUyLCAxNjgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI1MSwgCi0gICAgMjMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0OCwgMjAzLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDMsIDEyMCwgMjE5LCAKLSAgICAzNiwgMjE5LCA0NCwgMSwgMjMxLCAyMTAsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyOSwgNzQsIDIxOSwgMzYsIDIxOSwgNDQsIAotICAgIDEsIDIzMywgMTEyLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjksIDIxMywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjE0LCAyNCwgCi0gICAgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI2LCA3MywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjExLCA4NCwgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjIzLCAxNjgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0MiwgMzcsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIzNCwgCi0gICAgMjQ4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMzUsIDEzNiwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI3LCAxNjIsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDEsIDI1NCwgMjA5LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDUsIDIwNywgMjE5LCAzNiwgMjE5LCAKLSAgICA0NCwgMSwgMjM2LCAzNCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjE0LCAyMDgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyNiwgCi0gICAgMjIyLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDUsIDE5NywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjMxLCAyMjMsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDIxLCAyMTAsIDg2LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTEwLCAyMTksIDM2LCAyMTksIDQ0LCAKLSAgICAyMSwgMTA1LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTU4LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTYxLCAyMTksIDM2LCAKLSAgICAyMTksIDQ0LCAyMSwgMTg5LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk0LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk4LCAKLSAgICAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMTk1LCAyMTksIDM2LCAyMTksIDQ0LCAyMSwgMjAwLCAyNTAsIDE1MSwgNSwgMjUwLCAKLSAgICAyNTUsIDI1MCwgMTUxLCA1LCAyNTQsIDc1LCAyNTAsIDE1MSwgNSwgMjEzLCAxNDcsIDI1MCwgMTUxLCAxLCAyNTUsIDczLCAKLSAgICAyNTAsIDE1MSwgMSwgNzMsIDI1MCwgMTUxLCAxLCA3MCwgMjUwLCAxNTEsIDEsIDc1LCAyNTAsIDE1MSwgMSwgMjM1LCAxMCwgCi0gICAgMjUwLCAxNTEsIDEsIDIzNCwgMTMxLCAyNTAsIDE1MSwgMSwgMjQzLCAxMzIsIDI1MCwgMTUxLCAxLCAyNDIsIDI0OCwgMjUwLCAKLSAgICAxNTEsIDEsIDIyOSwgNzYsIDI1MCwgMTUxLCAxLCAyNTEsIDMyLCAyNTAsIDE1MSwgMSwgMjUwLCAxNTYsIDI1MCwgMTUxLCAKLSAgICAxLCAyMzUsIDE0MCwgMjUwLCAxNTEsIDEsIDIzNSwgMTEzLCAyNTAsIDE1MSwgMSwgMjI3LCAxNjQsIDI1MCwgMTUxLCAxLCAKLSAgICAyMTUsIDE1NSwgMjUwLCAxNTEsIDEsIDIxNSwgMTQzLCAyNTAsIDE1MSwgMSwgMjQ4LCAxMzQsIDI1MCwgMTUxLCAxLCAyNDgsIAotICAgIDExOCwgMjUwLCAxNTEsIDEsIDIyOCwgMTA5LCAyNTAsIDE1MSwgMSwgMjE3LCAxMDEsIDI1MCwgMTUxLCAxLCAyMTYsIDIwNywgCi0gICAgMjUwLCAxNTEsIDEsIDI0OCwgMjIwLCAyNTAsIDE1MSwgMSwgMjQ4LCAyNCwgMjUwLCAxNTEsIDEsIDIyOSwgMjI1LCAyNTAsIAotICAgIDE1MSwgMSwgMjI2LCA4OSwgMjUwLCAxNTEsIDEsIDIyNSwgMTQ2LCAyNTAsIDE1MSwgMSwgMjUyLCAxODksIDI1MCwgMTUxLCAKLSAgICAxLCAyNTIsIDE3LCAyNTAsIDE1MSwgMSwgMjMxLCAyMzcsIDI1MCwgMTUxLCAxLCAyMTAsIDE2NywgMjUwLCAxNTEsIDEsIAotICAgIDIxMSwgMTAzLCAyNTAsIDE1MSwgMSwgMjIzLCAxODQsIDI1MCwgMTUxLCAxLCAyMzMsIDEzNCwgMjUwLCAxNTEsIDEsIDIxMiwgCi0gICAgNjQsIDI1MCwgMTUxLCAxLCAyMjIsIDMxLCAyNTAsIDE1MSwgMSwgMjQyLCA0NiwgMjUwLCAxNTEsIDI1LCA1LCA2MSwgMjUwLCAKLSAgICAxNTEsIDI1LCA1LCA3MywgMjUwLCAxNTEsIDI1LCA1LCAyMzYsIDMzLCAyNTAsIDE1MSwgMjUsIDUsIDcwLCAyNTAsIDE1MSwgCi0gICAgMjUsIDUsIDIxNCwgMTE4LCAyNTAsIDE1MSwgMjUsIDUsIDc1LCAyNTAsIDE1MSwgMjUsIDUsIDI1NCwgMjAxLCAyNTAsIAotICAgIDE1MSwgMjUsIDUsIDc2LCAyNTAsIDE1MSwgMjUsIDUsIDI1MywgMTkyLCAyNTAsIDE1MSwgMjUsIDUsIDIyNiwgMjE5LCAKLSAgICAyNTAsIDE1MSwgMTQ0LCA3OCwgMjUwLCAxNTEsIDI1MywgMTkzLCA3OCwgMjUwLCAxNTEsIDIxMywgMTUyLCAyNTAsIDE1MSwgCi0gICAgMjMxLCAyMzUsIDI1MCwgMTUxLCAyMSwgMjEwLCA4NiwgMjUwLCAxNTEsIDIxLCAxMTAsIDI1MCwgMTUxLCAyMSwgMTA1LCAKLSAgICAyNTAsIDE1MSwgMjEsIDE1OCwgMjUwLCAxNTEsIDIxLCAxNjEsIDI1MCwgMTUxLCAyMSwgMTg5LCAyNTAsIDE1MSwgMjEsIAotICAgIDE5NCwgMjUwLCAxNTEsIDIxLCAxOTgsIDI1MCwgMTUxLCAyMSwgMTk1LCAyNTAsIDE1MSwgMjEsIDIwMCwgMjUwLCAxNTEsIAotICAgIDIyMSwgMTczLCA3OCwgMjUwLCAxNTEsIDI0OCwgMTc4LCAyNTAsIDE1MSwgNTIsIDI0OCwgMTc4LCAyNTAsIDE1MSwgMjI0LCAKLSAgICAxMywgNzgsIDE3NCwgNSwgMjUwLCAyNTUsIDE3NCwgNSwgMjU0LCA3NSwgMTc0LCA1LCAyMTMsIDE0NywgMTc0LCAxLCA2MSwgCi0gICAgMTc0LCAxLCAyNTUsIDczLCAxNzQsIDEsIDczLCAxNzQsIDEsIDIzNiwgMzMsIDE3NCwgMSwgNzAsIDE3NCwgMSwgMjE0LCAKLSAgICAxMTgsIDE3NCwgMSwgMTQ5LCAxNTMsIDE3NCwgMSwgMTQ5LCAyMjIsIDE4MCwgMTc0LCAxLCAxNDksIDE1NiwgMTc0LCAxLCAKLSAgICAxNDksIDIzMiwgMTg1LCAxNzQsIDEsIDc1LCAxNzQsIDEsIDI1NCwgMjAxLCAxNzQsIDEsIDc2LCAxNzQsIDEsIDI1MywgCi0gICAgMTkyLCAxNzQsIDEsIDE3NiwgMTc0LCAxLCAyMzQsIDEzMiwgMTc0LCAxLCAyNDMsIDEzNSwgMTc0LCAxLCAyNDIsIDI0OSwgCi0gICAgMTc0LCAxLCAyMjksIDc3LCAxNzQsIDEsIDI1MSwgMzMsIDE3NCwgMSwgMjUwLCAxNTcsIDE3NCwgMSwgMjM1LCAxNDEsIAotICAgIDE3NCwgMSwgMjM1LCAxMTQsIDE3NCwgMSwgMjI3LCAxNjUsIDE3NCwgMSwgMjE1LCAxNTYsIDE3NCwgMSwgMjE1LCAxNDQsIAotICAgIDE3NCwgMSwgMjQ4LCAxMzUsIDE3NCwgMSwgMjQ4LCAxMTksIDE3NCwgMSwgMjI4LCAxMTAsIDE3NCwgMSwgMjE3LCAxMDUsIAotICAgIDE3NCwgMSwgMjE2LCAyMDgsIDE3NCwgMSwgMjQ4LCAyMjEsIDE3NCwgMSwgMjQ4LCAyNSwgMTc0LCAxLCAxOTcsIDE3NCwgMSwgCi0gICAgMTkwLCAxNzQsIDEsIDIyNSwgMTQ3LCAxNzQsIDEsIDI1MiwgMTkxLCAxNzQsIDEsIDI1MiwgMTgsIDE3NCwgMSwgMTg0LCAKLSAgICAxNzQsIDEsIDE5MSwgMTc0LCAxLCAyMDUsIDE3NCwgMSwgMjMzLCAxMzUsIDE3NCwgMSwgMjMyLCAxODQsIDE3NCwgMSwgCi0gICAgMjE0LCAyNywgMTc0LCAxLCAyMjAsIDEwMiwgMTc0LCAxLCAyMTgsIDIyMywgMTc0LCAxLCAyMDYsIDE3NCwgMSwgMTYyLCAKLSAgICAxNzQsIDI1LCA1LCAyNTUsIDczLCAxNzQsIDI1LCA1LCA3MywgMTc0LCAyNSwgNSwgMjM2LCAzMywgMTc0LCAyNSwgNSwgNzAsIAotICAgIDE3NCwgMjUsIDUsIDIxNCwgMTE4LCAxNzQsIDI1LCA1LCAxNDksIDE1MywgMTc0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgCi0gICAgMTc0LCAyNSwgNSwgMTQ5LCAxNTYsIDE3NCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE3NCwgMjUsIDUsIDc1LCAxNzQsIDI1LCAKLSAgICA1LCAyNTQsIDIwMSwgMTc0LCAyNSwgNSwgNzYsIDE3NCwgMjUsIDUsIDI1MywgMTkyLCAxNzQsIDUsIDIxMywgMTUyLCAxNzQsIAotICAgIDUsIDI1MywgMTc1LCAxNzQsIDUsIDIzNSwgMTAyLCAxNzQsIDUsIDIxNCwgMTYxLCAxNzQsIDIyNiwgMjA0LCAxNzQsIDI0OCwgCi0gICAgMTc4LCAxNzQsIDUyLCAyNDgsIDE3OCwgMTc0LCAyNTUsIDIxLCA1MCwgMTc0LCAyMjAsIDEzNywgMTc0LCAyMSwgMjEwLCAKLSAgICA4NiwgMTc0LCAyMSwgMTEwLCAxNzQsIDIxLCAxMDUsIDE3NCwgMjEsIDE1OCwgMTc0LCAyMSwgMTYxLCAxNzQsIDIxLCAxODksIAotICAgIDE3NCwgMjEsIDE5NCwgMTc0LCAyMSwgMTk4LCAxNzQsIDIxLCAxOTUsIDE3NCwgMjEsIDIwMCwgMjE3LCA2OSwgMSwgNjEsIAotICAgIDIxNywgNjksIDEsIDI1NSwgNzMsIDIxNywgNjksIDEsIDczLCAyMTcsIDY5LCAxLCAyMzYsIDMzLCAyMTcsIDY5LCAxLCA3MCwgCi0gICAgMjE3LCA2OSwgMSwgMjE0LCAxMTgsIDIxNywgNjksIDEsIDc1LCAyMTcsIDY5LCAxLCAyNTQsIDIwMSwgMjE3LCA2OSwgMSwgCi0gICAgNzYsIDIxNywgNjksIDEsIDI1MywgMTkyLCAyMTcsIDY5LCAxLCAxNzYsIDIxNywgNjksIDEsIDIzNCwgMTMyLCAyMTcsIDY5LCAKLSAgICAxLCAyNDMsIDEzNSwgMjE3LCA2OSwgMSwgMjQyLCAyNDksIDIxNywgNjksIDEsIDIyOSwgNzcsIDIxNywgNjksIDEsIDI1MSwgCi0gICAgMzMsIDIxNywgNjksIDEsIDI1MCwgMTU3LCAyMTcsIDY5LCAxLCAyMzUsIDE0MSwgMjE3LCA2OSwgMSwgMjM1LCAxMTQsIAotICAgIDIxNywgNjksIDEsIDIyNywgMTY1LCAyMTcsIDY5LCAxLCAyMTUsIDE1NiwgMjE3LCA2OSwgMSwgMjE1LCAxNDQsIDIxNywgCi0gICAgNjksIDEsIDI0OCwgMTM1LCAyMTcsIDY5LCAxLCAyNDgsIDExOSwgMjE3LCA2OSwgMSwgMjI4LCAxMTAsIDIxNywgNjksIDEsIAotICAgIDIxNywgMTA1LCAyMTcsIDY5LCAxLCAyMTYsIDIwOCwgMjE3LCA2OSwgMSwgMjQ4LCAyMjEsIDIxNywgNjksIDEsIDI0OCwgCi0gICAgMjUsIDIxNywgNjksIDEsIDE5NywgMjE3LCA2OSwgMSwgMTkwLCAyMTcsIDY5LCAxLCAyMjUsIDE0NywgMjE3LCA2OSwgMSwgCi0gICAgMjUyLCAxOTEsIDIxNywgNjksIDEsIDI1MiwgMTgsIDIxNywgNjksIDEsIDE4NCwgMjE3LCA2OSwgMSwgMTkxLCAyMTcsIDY5LCAKLSAgICAxLCAyMDUsIDIxNywgNjksIDEsIDIzMywgMTM1LCAyMTcsIDY5LCAxLCAyMTQsIDI3LCAyMTcsIDY5LCAxLCAyMjAsIDEwMiwgCi0gICAgMjE3LCA2OSwgMSwgMjA2LCAyMTcsIDY5LCAxLCAxNjIsIDIxNywgNjksIDEsIDIyMiwgMTc5LCAyMTcsIDY5LCA1LCAyNTQsIAotICAgIDc1LCAyMTcsIDY5LCA1LCAyMTMsIDE0NywgMjE3LCA2OSwgMjUsIDUsIDI1NSwgNzMsIDIxNywgNjksIDI1LCA1LCA3MywgCi0gICAgMjE3LCA2OSwgMjUsIDUsIDIzNiwgMzMsIDIxNywgNjksIDI1LCA1LCA3MCwgMjE3LCA2OSwgMjUsIDUsIDIxNCwgMTE4LCAKLSAgICAyMTcsIDY5LCAyNSwgNSwgNzUsIDIxNywgNjksIDI1LCA1LCAyNTQsIDIwMSwgMjE3LCA2OSwgMjUsIDUsIDc2LCAyMTcsIAotICAgIDY5LCAyNSwgNSwgMjUzLCAxOTIsIDIxNywgNjksIDUsIDIxMywgMTUyLCAyMTcsIDY5LCA1LCAyMjcsIDIwNSwgMjE3LCA2OSwgCi0gICAgMjEsIDIxMCwgODYsIDIxNywgNjksIDIxLCAxMTAsIDIxNywgNjksIDIxLCAxMDUsIDIxNywgNjksIDIxLCAxNTgsIDIxNywgCi0gICAgNjksIDIxLCAxNjEsIDIxNywgNjksIDIxLCAxODksIDIxNywgNjksIDIxLCAxOTQsIDIxNywgNjksIDIxLCAxOTgsIDIxNywgCi0gICAgNjksIDIxLCAxOTUsIDIxNywgNjksIDIxLCAyMDAsIDE1LCA1LCA2MSwgMTUsIDUsIDExNSwgMzAsIDYxLCAxNSwgNSwgMTE1LCAKLSAgICAzMCwgMjUyLCAxNzYsIDE1LCA1LCAxMTUsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAxMTUsIDMwLCAxNjIsIAotICAgIDE1LCA1LCAxMTUsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMTE1LCAzMCwgMjMzLCAxMTYsIDI0MiwgOTQsIDE1LCA1LCAxMTUsIAotICAgIDMwLCAyMzAsIDYxLCAxNSwgNSwgMTE1LCAzMCwgMjIyLCAyMSwgMTUsIDUsIDI1NSwgNzUsIDE1LCA1LCAyNTUsIDI1LCAxNSwgCi0gICAgNSwgMjU1LCAyNiwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDI0NiwgNjcsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNTUsIDI2LCAzMCwgMjQzLCAxMTgsIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjU1LCAyNiwgMzAsIDE2MiwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjU1LCAyNiwgCi0gICAgMzAsIDIzNiwgOSwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMzMsIDExNywgMTUsIDUsIDI1NSwgMjYsIDMwLCAyMjAsIDQ4LCAKLSAgICAxNSwgNSwgMjU1LCAyNiwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDcwLCAxNSwgNSwgMjU1LCAyNiwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI1NSwgMjMsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjUyLCAxNjAsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjU1LCAyNCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMjAsIAotICAgIDEwMCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjU0LCAyNTUsIDE1LCA1LCAyNTQsIDE4NiwgMTUsIAotICAgIDUsIDI1NCwgMTg3LCAzMCwgMjQ1LCA4NywgMTUsIDUsIDI1NCwgMTg3LCAzMCwgMjIwLCAxMCwgOTYsIDI0MiwgMTkwLCAxNSwgCi0gICAgNSwgMjU0LCAxNzgsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDI1NCwgMTc4LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyNDcsIAotICAgIDIxNiwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjQyLCAxOTAsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDE2MiwgMTUsIDUsIDI1NCwgCi0gICAgMTc5LCAzMCwgMjM0LCAyNTUsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIAotICAgIDIyMCwgNjMsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjU0LCAxNzUsIDE1LCA1LCAyNTQsIDE2OCwgCi0gICAgMTUsIDUsIDI1NCwgMTMyLCAxNSwgNSwgMjU0LCAxMzMsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjU0LCAxMjMsIDE1LCA1LCAKLSAgICAyNTQsIDEyNCwgMTE3LCAyNTQsIDEyMywgMTUsIDUsIDI1NCwgMTI0LCAxMzQsIDIxNiwgODUsIDE1LCA1LCAyNTQsIDEyNCwgCi0gICAgOTYsIDIyOSwgMjE3LCAyMjYsIDE2NCwgMjU0LCAxMjQsIDk2LCAyMjksIDIxNiwgMTUsIDUsIDI1NCwgMTI0LCA5NiwgMjI5LCAKLSAgICAyMTcsIDIxOCwgMjMzLCAxNSwgNSwgMjU0LCA5NCwgMTUsIDUsIDI1NCwgNjcsIDE1LCA1LCAyNTQsIDM1LCAxNSwgNSwgCi0gICAgMjU0LCAzNiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjU0LCA4LCAxNSwgNSwgMjUzLCAyMzYsIDE1LCA1LCAyNTMsIDIzMSwgCi0gICAgMTUsIDUsIDI1MywgMjMyLCAyMTAsIDQwLCAyMTYsIDIzOSwgMTUsIDUsIDI1MywgMjMyLCAyMzUsIDMsIDIxNiwgMjM5LCAKLSAgICAxNSwgNSwgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDIxNSwgMTE0LCAxMTcsIDIxNSwgMTE0LCAyMTUsIDExNCwgMTE3LCAKLSAgICAyMTUsIDExNCwgMjI2LCAyMSwgMTUsIDUsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMxLCAxNSwgNSwgCi0gICAgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDI0OSwgMTI1LCAyNTMsIDIzMiwgMTE3LCAyNTMsIAotICAgIDIzMiwgMTE3LCAyNTMsIDIzMSwgMTUsIDUsIDI1MywgMjI5LCAxNSwgNSwgMjUzLCAyMjYsIDE1LCA1LCAyNTIsIDE5MSwgCi0gICAgMTUsIDUsIDI1MiwgMTc2LCAxNSwgNSwgMjUyLCAxNzEsIDE1LCA1LCAyNTIsIDE2NywgMTUsIDUsIDI1MiwgMTYxLCAxNSwgCi0gICAgNSwgMjUyLCAxNjIsIDExNywgMjUyLCAxNjEsIDE1LCA1LCAyNTIsIDE2MCwgMTUsIDUsIDEzMCwgMTUsIDUsIDI1MiwgMTQwLCAKLSAgICAxNSwgNSwgMjUyLCA2LCAxNSwgNSwgMjUyLCA3LCAzMCwgNjEsIDE1LCA1LCAyNTIsIDcsIDMwLCAyNDMsIDk2LCAxNSwgNSwgCi0gICAgMjUyLCA3LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI1MSwgMTI1LCAxNSwgNSwgMjUxLCAxMjYsIDExNywgMjUxLCAKLSAgICAxMjYsIDI1NSwgMjUsIDE1LCA1LCAyNTEsIDEyNiwgMTE3LCAyNTEsIDEyNiwgMjE0LCAxOTAsIDE1LCA1LCAyNTEsIDEyNiwgCi0gICAgMjQ5LCAxMjUsIDI1MSwgMTI1LCAxNSwgNSwgMjUxLCAxMDksIDE1LCA1LCAyNTEsIDExMCwgMTE3LCAyNTEsIDEwOSwgMTUsIAotICAgIDUsIDI1MSwgOTgsIDE1LCA1LCAyNTEsIDk3LCAxNSwgNSwgMjQ4LCAyMjEsIDE1LCA1LCAyNDgsIDIxMiwgMTUsIDUsIDI0OCwgCi0gICAgMjEzLCAyMzQsIDY2LCAzMCwgMTE1LCA5NiwgMjMxLCAxNDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI1NCwgCi0gICAgMTMyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNTIsIDE2MCwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAKLSAgICAzMCwgMjUyLCA2LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIAotICAgIDY2LCAzMCwgMjQzLCAxMzYsIDk2LCAyMzEsIDE0NywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjQyLCAyMTQsIAotICAgIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAKLSAgICAyNDIsIDEwMywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMTYyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIAotICAgIDMwLCAyMzUsIDE3OSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjM1LCAxODAsIDk2LCAyMzIsIDk4LCAxNSwgNSwgCi0gICAgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMzLCAxMzUsIAotICAgIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgCi0gICAgOTksIDk2LCAyMzEsIDE0NiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMyLCA4NCwgMTUsIDUsIDI0OCwgMjEzLCAKLSAgICAyMzQsIDY2LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIyNiwgMjIsIDk2LCAyMjYsIAotICAgIDIxLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMTksIDE5MSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgCi0gICAgMjE3LCA3MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE0LCAyMzEsIDk2LCAyNDIsIDE5NywgMTUsIDUsIAotICAgIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyNDgsIDE4NywgMTUsIDUsIDI0OCwgMTY2LCAxNSwgNSwgCi0gICAgMjQ4LCAxNjUsIDE1LCA1LCAyNDgsIDE2NCwgMTUsIDUsIDI0OCwgMywgMTUsIDUsIDI0NywgMjQyLCAxNSwgNSwgMjQ3LCAKLSAgICAyMTcsIDE1LCA1LCAyNDcsIDIxOCwgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDcsIDIxNiwgMTUsIDUsIDI0NywgMjA2LCAxNSwgCi0gICAgNSwgMjQ3LCAyMDcsIDIzNCwgMjA4LCAxMDQsIDI0MiwgOTUsIDI0NywgMTg3LCAxNSwgNSwgMjQ3LCAxODcsIDE1LCA1LCAKLSAgICAyNDYsIDc4LCAxNSwgNSwgMjQ2LCA3OSwgMTE3LCAyNDYsIDc4LCAxNSwgNSwgMjQ2LCA3OSwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI0NiwgNzksIDIyMCwgNDUsIDE1LCA1LCAyNDYsIDc2LCAxNSwgNSwgMjQ2LCA3NywgMzAsIDI0NSwgNzIsIDE1LCA1LCAKLSAgICAyNDYsIDc1LCAxNSwgNSwgMjQ2LCA3NCwgMTUsIDUsIDI0NiwgNzMsIDE1LCA1LCAyNDYsIDcyLCAxNSwgNSwgMjQ2LCA2OCwgCi0gICAgMTUsIDUsIDI0NiwgNjYsIDE1LCA1LCAyNDYsIDY3LCAyNDIsIDk0LCAxNSwgNSwgMjQ2LCA2NywgMjQyLCA5NSwgMjQyLCAKLSAgICA5NCwgMTUsIDUsIDI0NiwgNjUsIDE1LCA1LCAyNDYsIDU4LCAxNSwgNSwgNzUsIDE1LCA1LCAxNjAsIDMwLCAyMjYsIDIxLCAKLSAgICAxNSwgNSwgMTYwLCAxMTcsIDE2MCwgMjI3LCAxOTUsIDExNywgMjI3LCAxOTQsIDE1LCA1LCAyNDUsIDIzNCwgMTUsIDUsIAotICAgIDI0NSwgMjM1LCAzMCwgMTE1LCA5NiwgMjQyLCA0OSwgOTYsIDI0OCwgMjIxLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyNDMsIAotICAgIDk2LCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDI0NSwgMjM1LCAzMCwgMjIyLCA4LCAxNSwgNSwgCi0gICAgMjQ1LCAyMzUsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCA3MCwgMTUsIDUsIDI0NSwgMjExLCAxNSwgNSwgCi0gICAgMjQ1LCAyMDAsIDE1LCA1LCAyNDUsIDE3NCwgMTUsIDUsIDI0NSwgMTUwLCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyNDMsIAotICAgIDEwNCwgMTUsIDUsIDI0NSwgMTUxLCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyMzEsIAotICAgIDkxLCAxNSwgNSwgMjQ1LCAxNTEsIDI0OSwgMTI1LCAyNDUsIDE1MCwgMTUsIDUsIDI0NSwgMTUxLCAyMjYsIDE2NCwgMjQ1LCAKLSAgICAxNTAsIDE1LCA1LCAyNDUsIDE1MSwgMjE4LCAyMzMsIDE1LCA1LCAyNDUsIDg5LCAxNSwgNSwgMjQ1LCA4NywgMTUsIDUsIAotICAgIDI0NSwgNzIsIDE1LCA1LCAyNDUsIDEwLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDYxLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDExNSwgCi0gICAgOTYsIDIzMywgMTA0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDExNSwgOTYsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAKLSAgICAyNDUsIDExLCAzMCwgMjU0LCAxMjMsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjQ2LCA2NywgMjQyLCA5NCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNDYsIDY3LCAyNDIsIDk1LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjQ1LCAxMSwgMzAsIDE2MiwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNDIsIDQ5LCAyNDIsIDk0LCAxNSwgNSwgMjQ1LCAxMSwgCi0gICAgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjM0LCAyMDgsIDIxOCwgMjMzLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMywgMjE1LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDIzMywgMTM1LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjMyLCAyNDEsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjMyLCA5OCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMTQsIDIzMCwgMTUsIAotICAgIDUsIDI0NSwgMTEsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTM1LCAxNSwgNSwgMjQzLCAxMzYsIDI0MiwgOTQsIDE1LCAKLSAgICA1LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTE1LCA5NiwgMjQ4LCAyMjIsIDk2LCAxNjIsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDExNSwgOTYsIDE2MiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTE1LCA5NiwgMjM2LCAzNSwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjU1LCAyNCwgMjE2LCAyNDAsIDk2LCAyMTcsIDkzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTQsIDEyMywgCi0gICAgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUzLCAyMzEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MywgMjMwLCA5NiwgMjQzLCAKLSAgICAxMTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTIsIDE0MSwgOTYsIAotICAgIDIwNSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUxLCA5OCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUxLCA5OSwgOTYsIDIwNSwgCi0gICAgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ4LCAyMjEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0OCwgMywgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQ3LCAyMTgsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDYsIDc2LCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDUsIDE3NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ1LCAxNzUsIDk2LCAyMzMsIDEzNSwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjQ1LCAxNTAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0NSwgMTUxLCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMjE0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDIxMiwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjQyLCAyMTMsIDk2LCA2MSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAxOTgsIDk2LCAyMTgsIAotICAgIDgzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDQ5LCA5NiwgMjMyLCA5OSwgOTYsIDI0NSwgNzIsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0MiwgMzAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMzEsIDk2LCAyMzMsIDEzNSwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQxLCAxODEsIDk2LCAyMzIsIDI0MSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQwLCAyMTgsIDE1LCA1LCAKLSAgICAyNDMsIDEzNCwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNSwgMTY2LCA5NiwgMjQwLCAKLSAgICAyMjMsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIAotICAgIDIzNCwgMjA3LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDg5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDkwLCA5NiwgCi0gICAgMjMzLCAxMDQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzMywgMjE2LCA5NiwgMjU0LCAxMjMsIDE1LCA1LCAyNDMsIDEzNCwgCi0gICAgMzAsIDIzMywgMTM1LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjI3LCAxOTUsIDExNywgMjI3LCAxOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDE5MCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjIyLCA4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjEsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjIwLCA2MywgMTUsIAotICAgIDUsIDI0MywgMTM0LCAzMCwgMjIwLCA2NCwgOTYsIDIxNSwgOTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyMCwgMzAsIDE1LCAKLSAgICA1LCAyNDMsIDEzNCwgMzAsIDIxOCwgNDMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIxNywgNzIsIDE1LCA1LCAyNDMsIDEzNCwgCi0gICAgMzAsIDcwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjE0LCAyMjAsIDk2LCAKLSAgICAyNDYsIDc4LCAxNSwgNSwgMjQzLCAxMzQsIDExNywgMjQzLCAxMzMsIDE1LCA1LCAyNDMsIDEyOCwgMTUsIDUsIDI0MywgCi0gICAgMTI5LCAyNDksIDEyNSwgMjQzLCAxMjgsIDE1LCA1LCAyNDMsIDEyNiwgMTUsIDUsIDI0MywgMTI3LCAxMTcsIDI0MywgMTI3LCAKLSAgICAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAyNDMsIDExOCwgMTUsIDUsIDI0MywgMTE5LCAyNDMsIDEyNywgMTE3LCAKLSAgICAyNDMsIDEyNywgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMjQzLCAxMTcsIDE1LCA1LCAyNDMsIDExNSwgMTUsIDUsIAotICAgIDI0MywgMTA2LCAxNSwgNSwgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDMsIDEwNSwgCi0gICAgMTE3LCAyNDMsIDEwNCwgMTUsIDUsIDI0MywgMTA1LCAyNDksIDEyNSwgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDk2LCAxNSwgCi0gICAgNSwgMjQzLCA5NSwgMTUsIDUsIDI0MywgOTAsIDE1LCA1LCAyNDMsIDM2LCAxNSwgNSwgMjQzLCAzNywgMzAsIDIzMywgMTk2LCAKLSAgICAxNSwgNSwgMjQyLCAyMTQsIDE1LCA1LCAyNDIsIDIxNSwgMzAsIDc1LCAxNSwgNSwgMjQyLCAyMTUsIDMwLCA3MCwgMTUsIDUsIAotICAgIDI0MiwgMjE1LCAyNDksIDEyNSwgMjQyLCAyMTQsIDE1LCA1LCAyNDIsIDIxMiwgMTUsIDUsIDI0MiwgMjEzLCAxMTcsIDI0MiwgCi0gICAgMjEyLCAxNSwgNSwgMjQyLCAyMTMsIDI0OSwgMTI1LCAyNDIsIDIxMiwgMTUsIDUsIDI0MiwgMjA5LCAxNSwgNSwgMjQyLCAKLSAgICAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMTk1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAxMTUsIAotICAgIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDIsIDE5NiwgCi0gICAgMzAsIDIzNiwgMzUsIDE1LCA1LCAyNDIsIDE5NiwgMzAsIDIzMiwgOTksIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIAotICAgIDMwLCAxOTAsIDE1LCA1LCAyNDIsIDE5MiwgMTUsIDUsIDI0MiwgMTkwLCAxNSwgNSwgMjQyLCAxOTEsIDI0OSwgMTI1LCAKLSAgICAyNDIsIDE5MCwgMTUsIDUsIDI0MiwgMTkxLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDIsIDE5MSwgMzAsIDIxNywgNzIsIAotICAgIDE1LCA1LCAyNDIsIDE5MSwgMjE2LCAyMzksIDE1LCA1LCAyNDIsIDExMywgMTUsIDUsIDI0MiwgMTE0LCAyNDksIDEyNSwgCi0gICAgMjQyLCAxMTMsIDE1LCA1LCAyNDIsIDExMSwgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDIsIAotICAgIDExMiwgMzAsIDIzNCwgMjQzLCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjI3LCAxOTQsIAotICAgIDE1LCA1LCAyNDIsIDExMiwgMzAsIDIyMiwgOSwgOTYsIDIxNSwgMTEzLCAxNSwgNSwgMjQyLCAxMTIsIDI0MiwgOTQsIDE1LCAKLSAgICA1LCAyNDIsIDEwMywgMTUsIDUsIDI0MiwgMTA0LCAzMCwgMTE1LCA5NiwgMjMzLCAxOTYsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIAotICAgIDIzMywgMTk2LCAxNSwgNSwgMjQyLCAxMDQsIDExNywgMjQyLCAxMDQsIDIzMiwgOTEsIDE1LCA1LCAyNDIsIDk4LCAxNSwgNSwgCi0gICAgMjQyLCA5NiwgMTUsIDUsIDI0MiwgOTcsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQyLCA4OCwgMTUsIDUsIDI0MiwgODcsIDE1LCAKLSAgICA1LCAyNDIsIDg0LCAxNSwgNSwgMjQyLCA4MywgMTUsIDUsIDE2MiwgMTUsIDUsIDI0MiwgNDksIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjQyLCA0OSwgMjQyLCA5NCwgMTUsIDUsIDI0MiwgMzAsIDE1LCA1LCAyNDEsIDE4MCwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgCi0gICAgMjUzLCAyMzEsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNTIsIDE3NiwgCi0gICAgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjQ3LCAxODcsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI0MywgMTI2LCAxNSwgNSwgMjQxLCAKLSAgICAxODEsIDMwLCAyMzQsIDgxLCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgCi0gICAgMjIwLCA2MywgMTUsIDUsIDI0MSwgMTgxLCAzMCwgNzAsIDE1LCA1LCAyNDAsIDIyMiwgMTUsIDUsIDI0MCwgMjE4LCAxNSwgCi0gICAgNSwgMjQwLCAyMTksIDMwLCAyNTQsIDEyMywgMTUsIDUsIDI0MCwgMjE5LCAzMCwgMjQyLCAzMCwgMTUsIDUsIDI0MCwgMjE5LCAKLSAgICAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyNDAsIDIxOSwgMzAsIDIzMiwgMTk3LCAxNSwgNSwgMjQwLCAyMTksIDMwLCAyMTQsIAotICAgIDIxOSwgMTUsIDUsIDI0MCwgMjE1LCAxNSwgNSwgNzMsIDE1LCA1LCAyNDAsIDE1NCwgNjEsIDE1LCA1LCAyNDAsIDExNSwgCi0gICAgMTUsIDUsIDIzNiwgNjMsIDE1LCA1LCAyMzYsIDY0LCAxMTcsIDIzNiwgNjQsIDI1MSwgOTgsIDE1LCA1LCAyMzYsIDY0LCAKLSAgICAxMTcsIDIzNiwgNjQsIDIxOCwgMjMzLCAxNSwgNSwgMjM2LCAzOCwgMTUsIDUsIDIzNiwgMzUsIDE1LCA1LCAyMzYsIDM2LCAKLSAgICAyNDcsIDI0MiwgMTUsIDUsIDIzNiwgMzYsIDIyMywgMzUsIDE1LCA1LCAyMzYsIDM2LCAxMTcsIDIzNiwgMzYsIDIyMCwgMTQsIAotICAgIDExNywgMjIwLCAxNCwgMjE0LCAyMjAsIDExNywgMjE0LCAyMTksIDE1LCA1LCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjM2LCAyNywgMTUsIDUsIDIzNiwgMjgsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMzYsIDI2LCAxNSwgNSwgCi0gICAgMjM2LCAxNiwgMTUsIDUsIDIzNiwgMTcsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjM2LCAxNywgMjQ5LCAxMjUsIDIzNiwgMTYsIAotICAgIDE1LCA1LCAyMzYsIDE3LCAyMjYsIDE2NCwgMjM2LCAxNiwgMTUsIDUsIDIzNiwgMTcsIDIxOCwgMjMzLCAxNSwgNSwgMjM2LCAKLSAgICA5LCAxNSwgNSwgMjM1LCAyNTUsIDE1LCA1LCAyMzUsIDE3OSwgMTUsIDUsIDIzNSwgMTY1LCAxNSwgNSwgMTc2LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDYxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1NCwgMjU1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1NSwgCi0gICAgMCwgOTYsIDIzMywgMjE1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MiwgCi0gICAgMTc2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI1MiwgMTYwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDEzMCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQ1LCA4NywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDUsIDcyLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgMTM1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgMTE4LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjM1LCAxMywgCi0gICAgMzAsIDI0MywgOTcsIDk2LCAyMjAsIDEwMSwgOTYsIDYxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMjE0LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMTkxLCA5NiwgMjIxLCAyMzEsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjQyLCAxOTEsIDI0OSwgMTI1LCAyNDIsIDE5MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDExMywgCi0gICAgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDg3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMzUsIDEzLCAKLSAgICAzMCwgMjM2LCAxNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDkyLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNCwgODksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMyLCAyNDEsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjMyLCA5OCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzEsIDkxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgCi0gICAgOTIsIDk2LCAyNDYsIDc4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgOTIsIDk2LCAyNDIsIDIxNCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzEsIDkyLCA5NiwgMjE3LCAyMiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzAsIDIzMSwgOTYsIDIyNywgMTg5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyNSwgMTA4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMiwgCi0gICAgMTQwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIwNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjEsIDIzMSwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMjAsIDEwMiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMCwgCi0gICAgMzAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE5LCAxODIsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjE4LCA1MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTcsIDUwLCAxNSwgNSwgMjM1LCAxMywgMzAsIAotICAgIDcwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMjE5LCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDIxNCwgMTkzLCAzMCwgMTkwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIxMCwgNDQsIDE1LCA1LCAyMzUsIDExLCAxNSwgNSwgMjM1LCAxMiwgMjQ5LCAxMjUsIDIzNSwgMTEsIDE1LCAKLSAgICA1LCAyMzUsIDQsIDE1LCA1LCAyMzUsIDEsIDE1LCA1LCAyMzQsIDI1NSwgMTUsIDUsIDIzNCwgMjU0LCAxNSwgNSwgMjM0LCAKLSAgICAyNTIsIDE1LCA1LCAyMzQsIDI1MywgMTE3LCAyMzQsIDI1MiwgMTUsIDUsIDIzNCwgMjQyLCAxNSwgNSwgMjM0LCAyNDMsIAotICAgIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjM0LCAyMzgsIDE1LCA1LCAyMzQsIDIzOSwgMzAsIDI1MiwgMTc2LCAxNSwgCi0gICAgNSwgMjM0LCAyMzksIDI0OSwgMTI1LCAyMzQsIDIzOCwgMTUsIDUsIDIzNCwgMjM2LCAxNSwgNSwgMjM0LCAyMzUsIDE1LCA1LCAKLSAgICAyMzQsIDIwNywgMTUsIDUsIDIzNCwgMjA4LCAyMzMsIDExOCwgMzAsIDEwNCwgMTE3LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgCi0gICAgNSwgMjM0LCAyMDgsIDExNywgMjM0LCAyMDgsIDIzMywgMTE4LCAzMCwgMTA0LCAxMTcsIDIzMywgMTE4LCAzMCwgNzAsIDE1LCAKLSAgICA1LCAyMzQsIDE1NywgMTUsIDUsIDIzNCwgOTIsIDE1LCA1LCAyMzQsIDkzLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzQsIAotICAgIDkzLCAzMCwgNzAsIDE1LCA1LCAyMzQsIDkzLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMzQsIDg5LCAxNSwgNSwgMjM0LCA4MSwgCi0gICAgMTUsIDUsIDIzNCwgNjgsIDE1LCA1LCAyMzQsIDY3LCAxNSwgNSwgMjM0LCA2NSwgMTUsIDUsIDIzNCwgNjYsIDExNywgMjM0LCAKLSAgICA2NSwgMTUsIDUsIDIzMywgMjE3LCAxNSwgNSwgMjMzLCAyMTgsIDExNywgMjQxLCAxODEsIDMwLCAyNTMsIDIzMCwgMjMzLCAKLSAgICAyMTgsIDExNywgMjQxLCAxODEsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAyMTMsIDE1LCAKLSAgICA1LCAyMzMsIDIxNCwgMjE0LCAxMiwgMTcsIDE1LCA1LCAyMzMsIDIxMiwgMTUsIDUsIDIzMywgMjA5LCAxNSwgNSwgMjMzLCAKLSAgICAyMTAsIDI0MiwgOTQsIDE1LCA1LCAyMzMsIDIwOCwgMTUsIDUsIDIzMywgMTk2LCAxNSwgNSwgMjMzLCAxOTcsIDIyNiwgCi0gICAgMTY0LCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTkxLCAxNSwgNSwgMjMzLCAxNzIsIDE1LCA1LCAyMzMsIDEzNSwgMTUsIDUsIAotICAgIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTE1LCA5NiwgMjQ4LCAKLSAgICAyMjIsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDExNSwgOTYsIDI0MywgOTYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDExNSwgOTYsIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNTQsIDE3OCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjU0LCAxMjMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1MywgMjMyLCAyMTAsIDQwLCAyMTYsIDIzOSwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1MiwgNiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQ4LCAKLSAgICAxNjYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0NSwgMTUwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDI0MiwgMTA0LCA5NiwgMjQyLCAxMDMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjQyLCAzMCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQxLCAxODEsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM2LCAxNiwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjM2LCAxNywgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM2LCAxNywgOTYsIDIzMiwgOTgsIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzNCwgODEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDIwOSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMzLCAyMTAsIAotICAgIDk2LCAyNDEsIDE4MSwgOTYsIDYxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDExNywgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjMyLCAxOTcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMiwgODYsIDE1LCAKLSAgICA1LCAyMzMsIDExOCwgMzAsIDIzMSwgOTEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjMwLCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDIyMCwgNjQsIDk2LCAyMTgsIDQzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTEsIDk2LCAKLSAgICAyNDUsIDg3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTEsIDIxNiwgMjM5LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDMwLCAyMTksIDIyMywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE5LCAyMjQsIDk2LCAyMTksIDIyMywgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE3LCA4NCwgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjE3LCA3MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE3LCAyMywgOTYsIDExNSwgOTYsIDIxOCwgODQsIDk2LCAxOTcsIAotICAgIDE1LCA1LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIzMywgCi0gICAgMTE4LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAKLSAgICAyMzEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAyMTgsIDIzMywgMTUsIDUsIDIzMywgMTE1LCAxNSwgNSwgMjMzLCAxMTYsIDMwLCAyMjAsIDYzLCAxNSwgNSwgCi0gICAgMjMzLCAxMTYsIDMwLCAyMjAsIDY0LCA5NiwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE2LCAyNDIsIDk0LCAxNSwgNSwgMjMzLCAKLSAgICAxMTYsIDI0MiwgOTUsIDExNywgMjMzLCAxMTYsIDI0MiwgOTUsIDIyMCwgNjMsIDE1LCA1LCAyMzMsIDExMSwgMTUsIDUsIAotICAgIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMDUsIDMwLCAyMzMsIDEwNCwgMTUsIDUsIDIzMywgMTAyLCAxNSwgNSwgMjMzLCAKLSAgICAxMDMsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTAzLCAzMCwgMjMzLCAxOTcsIDk2LCAyMjIsIDE0MCwgMTUsIDUsIAotICAgIDIzMiwgMjQxLCAxNSwgNSwgMjMyLCAyMjYsIDE1LCA1LCAyMzIsIDIxNiwgMTUsIDUsIDIzMiwgMTk3LCAxNSwgNSwgMjMyLCAKLSAgICA5OCwgMTUsIDUsIDIzMiwgOTksIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgCi0gICAgMjU0LCAxNzgsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQ1LCA3MiwgMTUsIAotICAgIDUsIDIzMiwgOTcsIDMwLCAyNDUsIDczLCAyMTYsIDIzOSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNDMsIDEwNSwgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQxLCAxODEsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzYsIAotICAgIDE2LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNSwgMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzQsIDI1NSwgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMzUsIDAsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIzMywgMTM2LCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIyNywgMjM3LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIxOSwgMTkyLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjE5LCAxNzQsIDk2LCAyNTEsIDEyNSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMTUsIDExMywgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDIxNiwgMjM5LCAxNSwgNSwgMjMyLCA5NywgMjQ5LCAxMjUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMjYsIAotICAgIDE2NCwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDIxOCwgMjMzLCAxNSwgNSwgMjMyLCA5NywgMjIwLCA0NSwgMTUsIDUsIAotICAgIDIzMiwgOTUsIDE1LCA1LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgMTE3LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgCi0gICAgMjI2LCAxNjQsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDkyLCAyMjAsIDQ1LCAxNSwgNSwgMjMyLCA4OSwgMTUsIDUsIDIzMiwgCi0gICAgODYsIDE1LCA1LCAyMzIsIDg0LCAxNSwgNSwgMjMyLCA4NSwgMTE3LCAyMzIsIDg0LCAxNSwgNSwgMjMyLCA4NSwgMTE3LCAKLSAgICAyMzIsIDg1LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAxODQsIDE1LCA1LCAyMzEsIDIzOSwgMzAsIDIxNywgNzIsIAotICAgIDE1LCA1LCAyMzEsIDIzOSwgMjQyLCA5NCwgMTUsIDUsIDIzMSwgMjM4LCAxNSwgNSwgMjMxLCAyMTAsIDE1LCA1LCAyMzEsIAotICAgIDE2NiwgMTUsIDUsIDIzMSwgMTQ3LCAxNSwgNSwgMjMxLCAxNDYsIDE1LCA1LCAyMzEsIDkxLCAxNSwgNSwgMjMxLCA0NywgCi0gICAgMTUsIDUsIDIzMCwgMjMwLCAxNSwgNSwgMjMwLCAxODgsIDE1LCA1LCAyMzAsIDEwMiwgMTUsIDUsIDIzMCwgMTAzLCAxMTcsIAotICAgIDIzMCwgMTAyLCAxNSwgNSwgMjMwLCA5MywgMTUsIDUsIDIzMCwgOTQsIDI0MiwgOTQsIDE1LCA1LCAyMzAsIDc4LCAxNSwgNSwgCi0gICAgMjMwLCA2NCwgMTUsIDUsIDIzMCwgNjEsIDE1LCA1LCAyMzAsIDYyLCAzMCwgNjEsIDE1LCA1LCAyMzAsIDYyLCAzMCwgMjMzLCAKLSAgICAxOTYsIDE1LCA1LCAyMzAsIDYyLCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMzAsIDYyLCAxMTcsIDIzMCwgNjEsIDE1LCA1LCAKLSAgICAyMzAsIDYyLCAxMTcsIDIzMCwgNjIsIDMwLCAxMTUsIDk2LCAxOTcsIDE1LCA1LCAyMzAsIDYyLCAyNDksIDEyNSwgMjMwLCAKLSAgICA2MSwgMTUsIDUsIDIzMCwgNTksIDE1LCA1LCAyMzAsIDYwLCAzMCwgNjEsIDE1LCA1LCAyMzAsIDYwLCAzMCwgMTE1LCA5NiwgCi0gICAgMjQ4LCAzLCAxNSwgNSwgMjMwLCA2MCwgMzAsIDI0OCwgMywgMTUsIDUsIDIzMCwgNjAsIDI0MiwgOTQsIDE1LCA1LCAxOTcsIAotICAgIDE1LCA1LCAyMjksIDIyNywgMTUsIDUsIDIyOSwgMjE2LCAxNSwgNSwgMjI5LCAyMTcsIDIzNSwgMTkyLCAxNSwgNSwgMjI5LCAKLSAgICAyMTcsIDMwLCAyMTksIDIyNiwgMjE2LCAyMzksIDE1LCA1LCAyMjksIDIxNywgMjI2LCAxNjQsIDIyOSwgMjE2LCAxNSwgNSwgCi0gICAgMjI5LCAyMTUsIDE1LCA1LCAyMjksIDIwOCwgMjI3LCAxODAsIDE1LCA1LCAyMjksIDIwNywgMTUsIDUsIDIyOSwgMjA2LCAKLSAgICAxNSwgNSwgMjI5LCAxMDcsIDE1LCA1LCAyMjksIDEwOCwgMzAsIDYxLCAxNSwgNSwgMjI5LCAxMDgsIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIyOSwgMTA4LCAyMjAsIDQ1LCAxNSwgNSwgMjI4LCAyMzMsIDE1LCA1LCAyMjgsIDIzNCwgMzAsIDc1LCAxNSwgCi0gICAgNSwgMjI4LCAyMzIsIDE1LCA1LCAyMjgsIDIwMywgMTUsIDUsIDIyOCwgMjA0LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAKLSAgICAxNSwgNSwgMjI4LCAyMDQsIDMwLCAyNDMsIDk3LCA5NiwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjI4LCAyMDEsIAotICAgIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDI1NCwgMTIzLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgCi0gICAgMjAyLCAzMCwgMjUzLCAyMzIsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAKLSAgICAyMjgsIDIwMiwgMzAsIDIzMSwgOTIsIDk2LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyOSwgCi0gICAgMTA3LCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2MywgMTUsIDUsIAotICAgIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgOTYsIDExNSwgMjU0LCAxMjMsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyMCwgNjQsIAotICAgIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgOTYsIDI1MywgMjMyLCA5NiwgMjUzLCAyMzEsIAotICAgIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIxNCwgCi0gICAgMTI2LCAxNSwgNSwgMjI4LCAxOTAsIDE1LCA1LCAyMjcsIDIzNywgMTUsIDUsIDIyNywgMjEwLCAxNSwgNSwgMjI3LCAxOTQsIAotICAgIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgCi0gICAgMjMxLCAxNDcsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAKLSAgICAxMTYsIDMwLCAyMjIsIDksIDExNywgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgMjIyLCA4LCAxNSwgNSwgMjI3LCAxOTUsIAotICAgIDIzMywgMTE2LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjcsIDE5NSwgMjE2LCAyMzksIDE1LCA1LCAyMjcsIDE5NSwgMTE3LCAKLSAgICAyMjcsIDE5NCwgMTUsIDUsIDIyNywgMTk1LCAyNDksIDEyNSwgMjI3LCAxOTQsIDE1LCA1LCAyMjcsIDE5NSwgMjQ5LCAxMjUsIAotICAgIDIyNywgMTk1LCAyMzMsIDExNiwgMTE3LCAyMzMsIDExNSwgMTUsIDUsIDIyNywgMTg5LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgCi0gICAgMjQsIDMwLCAyNTMsIDIyNiwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjUyLCA2LCAxNSwgNSwgMjI3LCAxOTAsIAotICAgIDI1NSwgMjQsIDMwLCAyNDYsIDc0LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyNDIsIDEwMywgMTUsIDUsIDIyNywgCi0gICAgMTkwLCAyNTUsIDI0LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjM0LCAKLSAgICAyNTUsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDIzMywgMTM1LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIAotICAgIDMwLCAyMjksIDEwNywgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjE5LCAxNzEsIDE1LCA1LCAyMjcsIDE5MCwgCi0gICAgMjU1LCAyNCwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI3LCAxOTAsIDIzNCwgNjYsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMjcsIAotICAgIDE5MCwgMjM0LCA2NiwgMzAsIDI1MiwgNywgNzAsIDE1LCA1LCAxOTAsIDE1LCA1LCAyMjYsIDgwLCAxNSwgNSwgMjI2LCA0NywgCi0gICAgMTUsIDUsIDIyNiwgMjEsIDE1LCA1LCAyMjUsIDE2MSwgMTUsIDUsIDIyNSwgMTA4LCAxNSwgNSwgMjI1LCAxMDksIDMwLCAKLSAgICA2MSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjU1LCAyNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjUyLCA2LCAxNSwgNSwgCi0gICAgMjI1LCAxMDksIDMwLCAyNTEsIDEyNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDczLCAKLSAgICAxNSwgNSwgMjI1LCAxMDksIDMwLCAyNDAsIDExNSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzAsIDE1LCA1LCAyMjUsIDEwOSwgCi0gICAgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI1LCAxMDksIDI0OSwgMTI1LCAyMjUsIDEwOCwgMTUsIDUsIDIyNSwgNTMsIDE1LCA1LCAKLSAgICAyMjUsIDU0LCAzMCwgMjM0LCAyMzgsIDE1LCA1LCAyMjUsIDU0LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMjUsIDU0LCAzMCwgCi0gICAgMjEwLCAxMTYsIDE1LCA1LCAyMjUsIDU0LCAyMjYsIDE2NCwgMjI1LCA1MywgMTUsIDUsIDIwNSwgMTUsIDUsIDIyMywgMTgyLCAKLSAgICAxNSwgNSwgMjIzLCAzNSwgMTUsIDUsIDIyMiwgMTQwLCAxNSwgNSwgMjA2LCAxNSwgNSwgMjIyLCAyMiwgMjI3LCAxODAsIAotICAgIDE1LCA1LCAyMjIsIDIxLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDYxLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDI0NiwgNzgsIDE1LCAKLSAgICA1LCAyMjIsIDIyLCAzMCwgMjQ2LCA3NiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAxNjIsIDE1LCA1LCAyMjIsIDIyLCAzMCwgCi0gICAgMjM0LCAyNDIsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjMyLCA4NCwgMTUsIAotICAgIDUsIDIyMiwgMjIsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIyMiwgMjIsIAotICAgIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjIwLCAzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTcsIDkzLCAxNSwgCi0gICAgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMjI1LCAxNSwgNSwgMjIyLCAyMiwgCi0gICAgMzAsIDIxNCwgMTk3LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMTUwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNCwgMTI2LCAKLSAgICAxNSwgNSwgMjIyLCAyMiwgMTE3LCAyMjIsIDIxLCAxNSwgNSwgMjIyLCAyMiwgMjQyLCA5NCwgMTUsIDUsIDIyMiwgOCwgMTUsIAotICAgIDUsIDIyMiwgOSwgMjMzLCAxMTgsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIyMSwgMjM5LCAxNSwgNSwgMjIxLCAyMzEsIDE1LCAKLSAgICA1LCAyMjAsIDEwMiwgMTUsIDUsIDIyMCwgMTAwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCA2MSwgMTUsIDUsIDIyMCwgMTAxLCAKLSAgICAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDI0MiwgMTkwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyMjksIAotICAgIDEwNywgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjE5LCAyMjMsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDIxNSwgOTgsIDE1LCA1LCAKLSAgICAyMjAsIDEwMSwgMzAsIDcwLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIyMCwgOTksIDE1LCAKLSAgICA1LCAyMjAsIDk3LCAxNSwgNSwgMjIwLCA3OCwgMTUsIDUsIDIyMCwgNjMsIDE1LCA1LCAyMjAsIDY0LCAyNDAsIDIyMiwgMTUsIAotICAgIDUsIDIyMCwgNjQsIDExNywgMjIwLCA2NCwgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgCi0gICAgMTUsIDUsIDIyMCwgNjQsIDExNywgMjIwLCA2NCwgMjE3LCA5NCwgMTE3LCAyMTcsIDk0LCAyNDMsIDk3LCAxMTcsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyMjAsIDU2LCAxNSwgNSwgMjIwLCA1MSwgMTUsIDUsIDIyMCwgNDgsIDE1LCA1LCAyMjAsIDQ3LCAxNSwgCi0gICAgNSwgMjIwLCA0NCwgMTUsIDUsIDIyMCwgMzAsIDE1LCA1LCAyMjAsIDMxLCAzMCwgNjEsIDE1LCA1LCAyMjAsIDMxLCAzMCwgCi0gICAgMjM2LCAxNiwgMTUsIDUsIDIyMCwgMjQsIDE1LCA1LCAyMjAsIDI1LCAzMCwgNjEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjUyLCAKLSAgICAxNjEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjUxLCAxMDksIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjQ3LCAyMDYsIDE1LCA1LCAKLSAgICAyMjAsIDI1LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjIwLCAyNSwgMzAsIAotICAgIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMzLCAxOTEsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMyLCAKLSAgICA4NiwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzAsIDkzLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIyMiwgOCwgMTUsIDUsIDIyMCwgCi0gICAgMTgsIDE1LCA1LCAyMjAsIDEzLCAxNSwgNSwgMjIwLCAxNCwgMjE2LCAyMzksIDE1LCA1LCAyMjAsIDE0LCAxMTcsIDIyMCwgCi0gICAgMTQsIDI1MSwgOTksIDExNywgMjUxLCA5OCwgMTUsIDUsIDIyMCwgOSwgMTUsIDUsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAKLSAgICAyMjYsIDExNywgMjM1LCAxOTMsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAyMjMsIDE1LCA1LCAyMTksIDIyMiwgMTUsIDUsIAotICAgIDIxOSwgMTkxLCAxNSwgNSwgMjE5LCAxOTIsIDI0MiwgOTQsIDE1LCA1LCAyMTksIDE4MiwgMTUsIDUsIDIxOSwgMTgwLCAxNSwgCi0gICAgNSwgMjE5LCAxODEsIDExNywgMjE5LCAxODEsIDIxOSwgMjIzLCAxNSwgNSwgMjE5LCAxNzMsIDE1LCA1LCAyMTksIDE3MSwgCi0gICAgMTUsIDUsIDIxOCwgODMsIDE1LCA1LCAyMTgsIDg0LCAxMTcsIDIxOCwgODMsIDE1LCA1LCAyMTgsIDU0LCAxNSwgNSwgMjE4LCAKLSAgICA1MywgMTUsIDUsIDIxOCwgNTEsIDE1LCA1LCAyMTgsIDQzLCAxNSwgNSwgMjE4LCA0MiwgMTUsIDUsIDIxOCwgMTcsIDE1LCAKLSAgICA1LCAyMTgsIDE2LCAxNSwgNSwgMjE3LCAxMDUsIDE1LCA1LCAyMTcsIDEwNiwgMjUzLCAyMTYsIDE1LCA1LCAyMTcsIDEwNiwgCi0gICAgMzAsIDI0MSwgMTgwLCAxNSwgNSwgMjE3LCAxMDYsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIxNywgMTA2LCAyNDIsIDk0LCAKLSAgICAxNSwgNSwgMjE3LCA5MywgMTUsIDUsIDIxNywgOTQsIDExNywgMjE3LCA5NCwgMjI4LCAyMzQsIDExNywgMjI4LCAyMzQsIAotICAgIDI0NywgMTg4LCAxMTcsIDI0NywgMTg3LCAxNSwgNSwgMjE3LCA5NCwgMjE4LCAyMzMsIDE1LCA1LCAyMTcsIDg0LCAxNSwgNSwgCi0gICAgMTI5LCAzMCwgMjUyLCA2LCAxNSwgNSwgMTI5LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAxMjksIDMwLCAyMjAsIDYzLCAxNSwgCi0gICAgNSwgMTI5LCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAxMjksIDMwLCAyMTUsIDExMywgMTUsIDUsIDEyOSwgMzAsIDIxNCwgMjE5LCAKLSAgICAxNSwgNSwgMjE3LCA3MiwgMTUsIDUsIDIxNywgNTAsIDE1LCA1LCAyMTcsIDIyLCAxNSwgNSwgMjE3LCAyMywgMjQyLCA5NCwgCi0gICAgMTUsIDUsIDIxNiwgMTE3LCAxNSwgNSwgMjE2LCAxMTgsIDIxNiwgMjM5LCAxNSwgNSwgMjE2LCA5MCwgMTUsIDUsIDIxNiwgCi0gICAgNzIsIDE1LCA1LCAyMTYsIDczLCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIxNiwgNzMsIDExNywgMjE2LCA3MiwgMTUsIDUsIAotICAgIDIxNiwgNzMsIDExNywgMjE2LCA3MywgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgCi0gICAgMTUsIDUsIDIxNSwgMTE4LCAxNSwgNSwgMjE1LCAxMTMsIDE1LCA1LCAyMTUsIDExMSwgMTUsIDUsIDIxNSwgMTA4LCAxNSwgCi0gICAgNSwgMjE1LCA5OCwgMTUsIDUsIDIxNSwgOTksIDExNywgMjE1LCA5OSwgMjEwLCAxMTcsIDExNywgMjEwLCAxMTYsIDE1LCA1LCAKLSAgICA3MCwgMTUsIDUsIDEwNCwgMjQyLCAxMDMsIDE1LCA1LCAxMDQsIDEwNCwgNzAsIDE1LCA1LCAxMDQsIDExNywgMTA0LCAyMjYsIAotICAgIDkwLCAxMTcsIDIyNiwgOTAsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDIxOCwgMTgsIAotICAgIDExNywgMjE4LCAxNywgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDEwNCwgMjIzLCA0OSwgMTE3LCAxMDQsIDIyMywgNDgsIDE1LCAKLSAgICA1LCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMjI1LCAxNSwgNSwgMjE0LCAyMTksIDE1LCA1LCAyMTQsIDIyMCwgMjMzLCAxOTEsIAotICAgIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDIxNCwgCi0gICAgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIAotICAgIDEwNCwgMjQyLCA5NCwgMTUsIDUsIDIxNCwgMjIwLCAyNDIsIDk0LCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDUsIDE1LCA1LCAKLSAgICAyMTQsIDIyMCwgMjIwLCA0NiwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjE0LCAyMTUsIDE1LCA1LCAyMTQsIDE5NywgMTUsIDUsIAotICAgIDIxNCwgMTk4LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMSwgOTIsIDk2LCAyNDgsIDIyMSwgMTUsIAotICAgIDUsIDIxNCwgMTk4LCAzMCwgMjIwLCAxMDAsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDcwLCAxNSwgNSwgMjE0LCAxOTYsIDE1LCAKLSAgICA1LCAyMTQsIDE5MiwgMTUsIDUsIDIxNCwgMTkzLCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDE5MCwgMTUsIAotICAgIDUsIDIxNCwgMTkwLCAxNSwgNSwgMjE0LCAxOTEsIDI0MiwgOTQsIDE1LCA1LCAyMTQsIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAKLSAgICAyNDksIDEyNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjIwLCA0NSwgMTUsIDUsIDIxNCwgMTQ4LCAxNSwgNSwgCi0gICAgMjE0LCAxNDksIDMwLCAxMTUsIDk2LCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDExNSwgOTYsIDE5NywgMTUsIDUsIAotICAgIDIxNCwgMTQ5LCAzMCwgMjU0LCAxNzgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgCi0gICAgMjI3LCAxOTQsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgCi0gICAgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MiwgNiwgMTUsIDUsIDIxNCwgMTQ3LCAKLSAgICAxNSwgNSwgMjE0LCAxNDQsIDE1LCA1LCAyMTQsIDE0MywgMTUsIDUsIDIxNCwgMTM5LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICA2MSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjUzLCAyMjYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEzMCwgMTUsIDUsIDIxNCwgCi0gICAgMTQwLCAzMCwgMjQ2LCA2OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDI0MywgMTE4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDI0MywgOTYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MiwgMTEzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxNjIsIDE1LCA1LCAKLSAgICAyMTQsIDE0MCwgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNiwgMTYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDIzNSwgMTY1LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzIsIDg0LCAxNSwgCi0gICAgNSwgMjE0LCAxNDAsIDMwLCAyMzAsIDE4OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTkwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyMjAsIDYzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTksIDE4MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE1LCAxMTgsIAotICAgIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEwNCwgOTYsIDI0MiwgMTAzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM4LCAzMCwgNzAsIAotICAgIDE1LCA1LCAyMTQsIDEyNiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgNjEsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMjE3LCAKLSAgICAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIxNCwgCi0gICAgMTIyLCAxNSwgNSwgMjE0LCAxMjUsIDE1LCA1LCAyMTQsIDEyMywgMTUsIDUsIDIxNCwgMTE5LCAxNSwgNSwgMjE0LCAxMDgsIAotICAgIDE1LCA1LCAyMTQsIDEwOSwgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjE0LCAxMDcsIDE1LCA1LCAyMTAsIDExNiwgMTUsIDUsIAotICAgIDIxMCwgMTE3LCAyMTYsIDIzOSwgMTUsIDUsIDIxMCwgMTE3LCA5MiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjEwLCAxMTMsIAotICAgIDE1LCA1LCAyMTAsIDEwNiwgMTUsIDUsIDIxMCwgOTMsIDE1LCA1LCAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0NSwgMTE3LCAKLSAgICAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0MywgMTUsIDUsIDIxMCwgNDEsIDE1LCA1LCAyMTAsIDQyLCAyMzUsIDMsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjEwLCAzNiwgMTUsIDUsIDIxMCwgMjgsIDE1LCA1LCAyMTAsIDEzLCAxNSwgNSwgMjEwLCAxMSwgMTUsIAotICAgIDUsIDIxMCwgMTIsIDMwLCA2MSwgMTUsIDUsIDIxMCwgMTAsIDE1LCA1LCAyMTAsIDksIDE1LCAxMzIsIDUsIDExMywgMjUzLCAKLSAgICAyMzEsIDE1LCAxMzIsIDUsIDEzNCwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI1MywgMjMxLCAxNSwgMTMyLCAKLSAgICA1LCAyNDQsIDgxLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyMjAsIAotICAgIDEyMiwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDI1MywgCi0gICAgMjMxLCAxNSwgMTMyLCA1LCAxMzQsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNDcsIDE4NywgMTUsIDEzMiwgCi0gICAgNSwgMjQ0LCA4MSwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjIwLCAKLSAgICAxMjIsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNDcsIAotICAgIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgNzAsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDcwLCAxNSwgMTMyLCA1LCAyMTksIAotICAgIDEyNSwgNzAsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCA3MCwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDcwLCAxNSwgMTMyLCA1LCAKLSAgICAyMjgsIDIwMCwgNzAsIDE1LCAxMzIsIDUsIDEyMywgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDM4LCAxNSwgCi0gICAgMTMyLCA1LCAxMzQsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDI0NCwgODEsIAotICAgIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjQzLCAzOCwgCi0gICAgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAKLSAgICAxMjMsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDExMywgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDM1LCAxNSwgCi0gICAgMTMyLCA1LCAyNDQsIDExLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAxMTMsIAotICAgIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc5LCAyMTQsIDEyLCAxNywgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgCi0gICAgMjE5LCAxMjUsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgCi0gICAgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEyMywgMjIwLCA3MywgMTUsIAotICAgIDEzMiwgNSwgMTEzLCAyMjAsIDczLCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NCwgCi0gICAgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDIyMCwgNzMsIAotICAgIDE1LCAxMzIsIDUsIDIyMCwgNzksIDMwLCAyNDMsIDExOSwgOTYsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMjAsIDc5LCAzMCwgCi0gICAgMjQzLCAxMTksIDk2LCAyMzAsIDE4OCwgMTUsIDEzMiwgNSwgMTIzLCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAxMTMsIDI1MSwgCi0gICAgOTUsIDE1LCAxMzIsIDUsIDEzNCwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDk2LCAyMTQsIDEyLCAxNywgMTUsIAotICAgIDEzMiwgNSwgMjQ0LCAxMSwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTM0LCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCAyNDUsIDc0LCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIDI0NCwgMjAsIDI0NSwgNzEsIAotICAgIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgMjE3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxNSwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAKLSAgICAyMTgsIDYxLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxOCwgMjUzLCAxNTgsIDE1LCAKLSAgICAxMzIsIDUsIDIxOSwgMTI1LCAyMTQsIDEyLCAyNDQsIDIwLCAyNTMsIDIyOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgCi0gICAgMTIsIDI0NCwgMjAsIDIzNiwgOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMTAsIDYxLCAKLSAgICAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAxMCwgMjUzLCAxNTgsIDE1LCAxMzIsIDUsIAotICAgIDI0NSwgMTkzLCAyMTQsIDEyLCAyNDQsIDIwLCAyMTQsIDEyMSwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDIxNCwgMTIsIDI0NCwgCi0gICAgMjAsIDIxNCwgMTIwLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyNCwgMTUsIDEzMiwgCi0gICAgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMjMsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAKLSAgICAyNDQsIDIwLCAyMzYsIDIyLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyNSwgNjEsIAotICAgIDE1LCAxMzIsIDUsIDExMywgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAxMzQsIDI1MywgMjMyLCAyMTYsIDIzOSwgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTMsIDIzMiwgCi0gICAgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNTMsIDIzMiwgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDEyMywgMjUyLCAKLSAgICAxNTAsIDE1LCAxMzIsIDUsIDExMywgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIDEzNCwgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIAotICAgIDI0NCwgMTEsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNTIsIDE1MSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIAotICAgIDUsIDI0NCwgODEsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTIsIDE1MSwgMjE0LCAxMiwgMTcsIDE1LCAKLSAgICAxMzIsIDUsIDIyOCwgMjEwLCAxNSwgMTMyLCA1LCAyMjgsIDIxMSwgMTUsIDEzMiwgNSwgMTIzLCAyNDUsIDcwLCAxNSwgCi0gICAgMTMyLCA1LCAxMTMsIDI0NSwgNzAsIDE1LCAxMzIsIDUsIDEyMywgMjE2LCAxNjksIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAKLSAgICAxMTMsIDIxNiwgMTY3LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjE5LCAxMTQsIDI0NywgMTg3LCAxNSwgCi0gICAgMTMyLCA1LCAxMjMsIDIxNiwgMTY5LCAyMTQsIDEyLCAyNDQsIDIwLCA2MSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2NywgCi0gICAgMjE0LCAxMiwgMjQ0LCAyMCwgNjEsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCAxODksIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAKLSAgICAxMjMsIDIyNCwgMjIsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCA1NSwgMjUzLCAyMTksIDEyMywgMjE5LCAxMTUsIDE1LCAxMzIsIAotICAgIDUsIDU1LCAyNTMsIDIxOSwgMTIzLCAyMjQsIDIxLCAxNSwgMjI0LCAxNDEsIDUsIDU1LCAyNTMsIDIxOSwgMjExLCAyMDksIAotICAgIDI0NywgMTcyLCAxNSwgMjI0LCAxNDEsIDUsIDY3LCAyNDksIDIyNiwgMTUsIDIyNCwgMTQxLCA1LCAyNDcsIDI1NSwgMjQ5LCAKLSAgICAyMjYsIDE1LCAyMjQsIDE0MSwgNSwgMjQ3LCAyNTUsIDIxNSwgMjIxLCAxMiwgMTMsIDI1NSwgMTU1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTU0LCAxMiwgMTMsIDI1NSwgMTUzLCAxMiwgMTMsIDI1NSwgMTUyLCAxMiwgMTMsIDI1NSwgMTUxLCAxMiwgMTMsIDI1NSwgCi0gICAgMTUwLCAxMiwgMTMsIDI1NSwgMTQ5LCAxMiwgMTMsIDI1NSwgMTQ4LCAxMiwgMTMsIDI1NSwgMTQ3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTQ2LCAxMiwgMTMsIDI1NSwgMTQ1LCAxMiwgMTMsIDI1NSwgMTQ0LCAxMiwgMTMsIDI1NSwgMTQzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTQyLCAxMiwgMTMsIDI1NSwgMTQxLCAxMiwgMTMsIDI1NSwgMTQwLCAxMiwgMTMsIDI1NSwgMTM5LCAxMiwgMTMsIDI1NSwgCi0gICAgMTM4LCAxMiwgMTMsIDI1NSwgMTM3LCAxMiwgMTMsIDI1NSwgMTM2LCAxMiwgMTMsIDI1NSwgMTM1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTM0LCAxMiwgMTMsIDI1NSwgMTMzLCAxMiwgMTMsIDI1NSwgMTMyLCAxMiwgMTMsIDI1NSwgMTMxLCAxMiwgMTMsIDI1NSwgCi0gICAgMTMwLCAxMiwgMTMsIDI1NSwgMTI5LCAxMiwgMTMsIDI1NSwgMTI4LCAxMiwgMTMsIDI1NSwgMTI3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTI2LCAxMiwgMTMsIDI1NSwgMTI1LCAxMiwgMTMsIDI1NSwgMTI0LCAxMiwgMTMsIDI1NSwgMTIzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTIyLCAxMiwgMTMsIDI1NSwgMTIxLCAxMiwgMTMsIDI1NSwgMTIwLCAxMiwgMTMsIDI1NSwgMTE5LCAxMiwgMTMsIDI1NSwgCi0gICAgMTE4LCAxMiwgMTMsIDI1NSwgMTE3LCAxMiwgMTMsIDI1NSwgMTE2LCAxMiwgMTMsIDI1NSwgMTE1LCAxMiwgMTMsIDI1NSwgCi0gICAgMTE0LCAxMiwgMTMsIDI1NSwgMTEzLCAxMiwgMTMsIDI1NSwgMTEyLCAxMiwgMTMsIDI1NSwgMTExLCAxMiwgMTMsIDI1NSwgCi0gICAgMTEwLCAxMiwgMTMsIDI1NSwgMTA5LCAxMiwgMTMsIDI1NSwgMTA4LCAxMiwgMTMsIDI1NSwgMTA3LCAxMiwgMTMsIDI1NSwgCi0gICAgMTA2LCAxMiwgMTMsIDI1NSwgMTA1LCAxMiwgMTMsIDI1NSwgMTA0LCAxMiwgMTMsIDI1NSwgMTAzLCAxMiwgMTMsIDI1NSwgCi0gICAgMTAyLCAxMiwgMTMsIDI1NSwgMTAxLCAxMiwgMTMsIDI1NSwgMTAwLCAxMiwgMTMsIDI1NSwgOTksIDEyLCAxMywgMjU1LCAKLSAgICA5OCwgMTIsIDEzLCAyNTUsIDk3LCAxMiwgMTMsIDI1NSwgOTYsIDEyLCAxMywgMjU1LCA5NSwgMTIsIDEzLCAyNTUsIDk0LCAKLSAgICAxMiwgMTMsIDI1NSwgOTMsIDEyLCAxMywgMjU1LCA5MiwgMTIsIDEzLCAyNTUsIDkxLCAxMiwgMTMsIDI1NSwgOTAsIDEyLCAKLSAgICAxMywgMjU1LCA4OSwgMTIsIDEzLCAyNTUsIDg4LCAxMiwgMTMsIDI1NSwgODcsIDEyLCAxMywgMjU1LCA4NiwgMTIsIDEzLCAKLSAgICAyNTUsIDg1LCAxMiwgMTMsIDI1NSwgODQsIDEyLCAxMywgMjU1LCA4MywgMTIsIDEzLCAyNTUsIDgyLCAxMiwgMTMsIDI1NSwgCi0gICAgODEsIDEyLCAxMywgMjU1LCA4MCwgMTIsIDEzLCAyNTUsIDc5LCAxMiwgMTMsIDI1NSwgNzgsIDEyLCAxMywgMjU1LCA3NywgCi0gICAgMTIsIDEzLCAyNTUsIDc2LCAxMiwgMTMsIDI1MywgMTU2LCAxMiwgMTMsIDI1MywgMTU0LCAxMiwgMTMsIDI1MywgMTUyLCAKLSAgICAxMiwgMTMsIDI1MywgMTUwLCAxMiwgMTMsIDI1MywgMTQ4LCAxMiwgMTMsIDI1MywgMTQ3LCAxMiwgMTMsIDI1MywgMTQ1LCAKLSAgICAxMiwgMTMsIDI1MywgMTQzLCAxMiwgMTMsIDI1MywgMTQxLCAxMiwgMTMsIDI1MywgMTM5LCAxMiwgMTMsIDI1MSwgNjIsIAotICAgIDEyLCAxMywgMjUxLCA2MSwgMTIsIDEzLCAyNTEsIDYwLCAxMiwgMTMsIDI1MSwgNTksIDEyLCAxMywgMjUxLCA1OCwgMTIsIAotICAgIDEzLCAyNTEsIDU3LCAxMiwgMTMsIDI1MSwgNTYsIDEyLCAxMywgMjUxLCA1NSwgMTIsIDEzLCAyNTEsIDU0LCAxMiwgMTMsIAotICAgIDI1MSwgNTMsIDEyLCAxMywgMjUxLCA1MiwgMTIsIDEzLCAyNTEsIDUxLCAxMiwgMTMsIDI1MSwgNTAsIDEyLCAxMywgMjUxLCAKLSAgICA0OSwgMTIsIDEzLCAyNTEsIDQ4LCAxMiwgMTMsIDI1MSwgNDcsIDEyLCAxMywgMjUxLCA0NiwgMTIsIDEzLCAyNTEsIDQ1LCAKLSAgICAxMiwgMTMsIDI1MSwgNDQsIDEyLCAxMywgMjUxLCA0MywgMTIsIDEzLCAyNTEsIDQyLCAxMiwgMTMsIDI1MSwgNDEsIDEyLCAKLSAgICAxMywgMjUxLCA0MCwgMTIsIDEzLCAyNTEsIDM5LCAxMiwgMTMsIDI1MSwgMzgsIDEyLCAxMywgMjUxLCAzNywgMTIsIDEzLCAKLSAgICAyNTEsIDM2LCAxMiwgMTMsIDI1MSwgMzUsIDEyLCAxMywgMjQ5LCA1OSwgMTIsIDEzLCAyNDksIDU4LCAxMiwgMTMsIDI0OSwgCi0gICAgNTcsIDEyLCAxMywgMjQ5LCA1NiwgMTIsIDEzLCAyNDksIDU1LCAxMiwgMTMsIDI0OSwgNTQsIDEyLCAxMywgMjQ5LCA1MywgCi0gICAgMTIsIDEzLCAyNDksIDUyLCAxMiwgMTMsIDI0OSwgNTEsIDEyLCAxMywgMjQ5LCA1MCwgMTIsIDEzLCAyNDksIDQ5LCAxMiwgCi0gICAgMTMsIDI0OSwgNDgsIDEyLCAxMywgMjQ5LCA0NywgMTIsIDEzLCAyNDksIDQ2LCAxMiwgMTMsIDI0OSwgNDUsIDEyLCAxMywgCi0gICAgMjQ5LCA0NCwgMTIsIDEzLCAyNDksIDQzLCAxMiwgMTMsIDI0OSwgNDIsIDEyLCAxMywgMjQ5LCA0MSwgMTIsIDEzLCAyNDksIAotICAgIDQwLCAxMiwgMTMsIDI0OSwgMzksIDEyLCAxMywgMjQ5LCAzOCwgMTIsIDEzLCAyNDksIDM3LCAxMiwgMTMsIDI0OSwgMzYsIAotICAgIDEyLCAxMywgMjQ5LCAzNSwgMTIsIDEzLCAyNDksIDM0LCAxMiwgMTMsIDI0OSwgMzMsIDEyLCAxMywgMjQ5LCAzMiwgMTIsIAotICAgIDEzLCAyNDksIDMxLCAxMiwgMTMsIDI0OSwgMzAsIDEyLCAxMywgMjQ5LCAyOSwgMTIsIDEzLCAyNDksIDI4LCAxMiwgMTMsIAotICAgIDI0OSwgMjcsIDEyLCAxMywgMjQ5LCAyNiwgMTIsIDEzLCAyNDksIDI1LCAxMiwgMTMsIDI0OSwgMjQsIDEyLCAxMywgMjQ5LCAKLSAgICAyMywgMTIsIDEzLCAyNDksIDIyLCAxMiwgMTMsIDI0OSwgMjEsIDEyLCAxMywgMjQ5LCAyMCwgMTIsIDEzLCAyNDksIDE5LCAKLSAgICAxMiwgMTMsIDI0OSwgMTgsIDEyLCAxMywgMjQ5LCAxNywgMTIsIDEzLCAyNDksIDE2LCAxMiwgMTMsIDI0OSwgMTUsIDEyLCAKLSAgICAxMywgMjQ5LCAxNCwgMTIsIDEzLCAyNDksIDEzLCAxMiwgMTMsIDI0OSwgMTIsIDEyLCAxMywgMjQ5LCAxMSwgMTIsIDEzLCAKLSAgICAyNDksIDEwLCAxMiwgMTMsIDI0OSwgOSwgMTIsIDEzLCAyNDksIDgsIDEyLCAxMywgMjQ5LCA3LCAxMiwgMTMsIDI0OSwgNiwgCi0gICAgMTIsIDEzLCAyNDksIDUsIDEyLCAxMywgMjQ5LCA0LCAxMiwgMTMsIDI0OSwgMywgMTIsIDEzLCAyNDksIDIsIDEyLCAxMywgCi0gICAgMjQ5LCAxLCAxMiwgMTMsIDI0OSwgMCwgMTIsIDEzLCAyNDgsIDI1NSwgMTIsIDEzLCAyNDgsIDI1NCwgMTIsIDEzLCAyNDgsIAotICAgIDI1MywgMTIsIDEzLCAyNDgsIDI1MiwgMTIsIDEzLCAyNDgsIDI1MSwgMTIsIDEzLCAyNDgsIDI1MCwgMTIsIDEzLCAyNDgsIAotICAgIDI0OSwgMTIsIDEzLCAyNDgsIDI0OCwgMTIsIDEzLCAyNDgsIDI0NywgMTIsIDEzLCAyNDgsIDI0NiwgMTIsIDEzLCAyNDgsIAotICAgIDI0NSwgMTIsIDEzLCAyNDgsIDI0NCwgMTIsIDEzLCAyNDgsIDI0MywgMTIsIDEzLCAyNDgsIDI0MiwgMTIsIDEzLCAyNDgsIAotICAgIDI0MSwgMTIsIDEzLCAyNDgsIDI0MCwgMTIsIDEzLCAyNDgsIDIzOSwgMTIsIDEzLCAyNDgsIDIzOCwgMTIsIDEzLCAyNDgsIAotICAgIDIzNywgMTIsIDEzLCAyNDgsIDIzNiwgMTIsIDEzLCAyNDgsIDIzNSwgMTIsIDEzLCAyNDgsIDIzNCwgMTIsIDEzLCAyNDgsIAotICAgIDIzMywgMTIsIDEzLCAyNDgsIDIzMiwgMTIsIDEzLCAyNDgsIDIzMSwgMTIsIDEzLCAyNDgsIDIzMCwgMTIsIDEzLCAyNDgsIAotICAgIDIyOSwgMTIsIDEzLCAyNDgsIDIyOCwgMTIsIDEzLCAyNDgsIDIyNywgMTIsIDEzLCAyNDgsIDIyNiwgMTIsIDEzLCAyNDgsIAotICAgIDIyNSwgMTIsIDEzLCAyNDgsIDIyNCwgMTIsIDEzLCAyNDYsIDIzLCAxMiwgMTMsIDI0NiwgMjIsIDEyLCAxMywgMjQ2LCAyMSwgCi0gICAgMTIsIDEzLCAyNDYsIDIwLCAxMiwgMTMsIDI0NiwgMTksIDEyLCAxMywgMjQ2LCAxOCwgMTIsIDEzLCAyNDYsIDE3LCAxMiwgCi0gICAgMTMsIDI0NiwgMTYsIDEyLCAxMywgMjQ2LCAxNSwgMTIsIDEzLCAyNDYsIDE0LCAxMiwgMTMsIDI0NiwgMTMsIDEyLCAxMywgCi0gICAgMjQ2LCAxMiwgMTIsIDEzLCAyNDYsIDExLCAxMiwgMTMsIDI0NiwgMTAsIDEyLCAxMywgMjQ2LCA5LCAxMiwgMTMsIDI0NiwgCi0gICAgOCwgMTIsIDEzLCAyNDYsIDcsIDEyLCAxMywgMjQ2LCA2LCAxMiwgMTMsIDI0NiwgNSwgMTIsIDEzLCAyNDYsIDQsIDEyLCAKLSAgICAxMywgMjQ2LCAzLCAxMiwgMTMsIDI0NiwgMiwgMTIsIDEzLCAyNDYsIDEsIDEyLCAxMywgMjQ2LCAwLCAxMiwgMTMsIDI0NSwgCi0gICAgMjU1LCAxMiwgMTMsIDI0NSwgMjU0LCAxMiwgMTMsIDI0NSwgMjUzLCAxMiwgMTMsIDI0NSwgMjUyLCAxMiwgMTMsIDI0NSwgCi0gICAgMjUxLCAxMiwgMTMsIDI0NSwgMjUwLCAxMiwgMTMsIDI0NSwgMjQ5LCAxMiwgMTMsIDI0NSwgMjQ4LCAxMiwgMTMsIDI0NSwgCi0gICAgMjQ3LCAxMiwgMTMsIDI0NSwgMjQ2LCAxMiwgMTMsIDI0NSwgMjQ1LCAxMiwgMTMsIDI0NSwgMjQ0LCAxMiwgMTMsIDI0NSwgCi0gICAgMjQzLCAxMiwgMTMsIDI0NSwgMjQyLCAxMiwgMTMsIDI0NSwgMjQxLCAxMiwgMTMsIDI0NSwgMjQwLCAxMiwgMTMsIDI0NSwgCi0gICAgMjM5LCAxMiwgMTMsIDI0NSwgMjM4LCAxMiwgMTMsIDI0NSwgMjM3LCAxMiwgMTMsIDI0NSwgMjM2LCAxMiwgMTMsIDI0NSwgCi0gICAgNSwgMTIsIDEzLCAyNDUsIDQsIDEyLCAxMywgMjQ1LCAzLCAxMiwgMTMsIDI0NSwgMiwgMTIsIDEzLCAyNDUsIDEsIDEyLCAKLSAgICAxMywgMjQ1LCAwLCAxMiwgMTMsIDI0NCwgMjU1LCAxMiwgMTMsIDI0NCwgMjU0LCAxMiwgMTMsIDI0NCwgMjUzLCAxMiwgMTMsIAotICAgIDI0NCwgMjUyLCAxMiwgMTMsIDI0NCwgMjUxLCAxMiwgMTMsIDI0NCwgMjUwLCAxMiwgMTMsIDI0NCwgMjQ5LCAxMiwgMTMsIAotICAgIDI0NCwgMjQ4LCAxMiwgMTMsIDI0NCwgMjQ3LCAxMiwgMTMsIDI0NCwgMjQ2LCAxMiwgMTMsIDI0NCwgMjQ1LCAxMiwgMTMsIAotICAgIDI0NCwgMjQ0LCAxMiwgMTMsIDI0NCwgMjQzLCAxMiwgMTMsIDI0NCwgMjQyLCAxMiwgMTMsIDI0NCwgMjQxLCAxMiwgMTMsIAotICAgIDI0NCwgMjQwLCAxMiwgMTMsIDI0NCwgMjM5LCAxMiwgMTMsIDI0NCwgMjM4LCAxMiwgMTMsIDI0NCwgMjM3LCAxMiwgMTMsIAotICAgIDI0NCwgMjM2LCAxMiwgMTMsIDI0NCwgMjM1LCAxMiwgMTMsIDI0NCwgMjM0LCAxMiwgMTMsIDI0NCwgMjMzLCAxMiwgMTMsIAotICAgIDI0NCwgMjMyLCAxMiwgMTMsIDI0NCwgMjMxLCAxMiwgMTMsIDI0NCwgMjMwLCAxMiwgMTMsIDI0NCwgMjI5LCAxMiwgMTMsIAotICAgIDI0NCwgMjI4LCAxMiwgMTMsIDI0NCwgMjI3LCAxMiwgMTMsIDI0NCwgMjI2LCAxMiwgMTMsIDI0NCwgMjI1LCAxMiwgMTMsIAotICAgIDI0NCwgMjI0LCAxMiwgMTMsIDI0NCwgMjIzLCAxMiwgMTMsIDI0NCwgMjIyLCAxMiwgMTMsIDI0NCwgMjIxLCAxMiwgMTMsIAotICAgIDI0NCwgMjIwLCAxMiwgMTMsIDI0NCwgMjE5LCAxMiwgMTMsIDI0NCwgMjE4LCAxMiwgMTMsIDI0NCwgMjE3LCAxMiwgMTMsIAotICAgIDI0NCwgMjE2LCAxMiwgMTMsIDI0NCwgMjE1LCAxMiwgMTMsIDI0NCwgMjE0LCAxMiwgMTMsIDI0NCwgMjEzLCAxMiwgMTMsIAotICAgIDI0NCwgMjEyLCAxMiwgMTMsIDI0NCwgMjExLCAxMiwgMTMsIDI0NCwgMjEwLCAxMiwgMTMsIDI0NCwgMjA5LCAxMiwgMTMsIAotICAgIDI0NCwgMjA4LCAxMiwgMTMsIDI0NCwgMjA3LCAxMiwgMTMsIDI0NCwgMjA2LCAxMiwgMTMsIDI0NCwgMjA1LCAxMiwgMTMsIAotICAgIDI0NCwgMjA0LCAxMiwgMTMsIDI0NCwgMjAzLCAxMiwgMTMsIDI0NCwgMjAyLCAxMiwgMTMsIDI0NCwgMjAxLCAxMiwgMTMsIAotICAgIDI0NCwgMjAwLCAxMiwgMTMsIDI0NCwgMTk5LCAxMiwgMTMsIDI0NCwgMTk4LCAxMiwgMTMsIDI0NCwgMTk3LCAxMiwgMTMsIAorICAgIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDE4NCwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAKKyAgICAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCAKKyAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgCisgICAgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQxLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDI0MCwgMTYxLCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjQwLCAxNjEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCAKKyAgICA2LCAxLCAxNDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAorICAgIDI1MCwgMzksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAKKyAgICAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgCisgICAgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCAKKyAgICA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDU5LCAKKyAgICA1MSwgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMTQyLCAKKyAgICA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgCisgICAgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIAorICAgIDAsIDIyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgCisgICAgMCwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQxLCAwLCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDEwNCwgMiwgCisgICAgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIAorICAgIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNiwgMSwgCisgICAgMTA0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMjExLCAxMTgsIAorICAgIDIsIDU5LCA1MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxODQsIDcsIDQsIAorICAgIDEsIDIxMSwgMTE4LCAyLCAxODQsIDcsIDYsIDEsIDIzMCwgMjI4LCAyMzIsIDE5MSwgNywgNCwgMSwgMjMwLCAyMjgsIDIzMiwgCisgICAgMTkxLCA3LCA2LCAxLCAyMzAsIDIyOCwgMjE0LCAxMDUsIDcsIDQsIDEsIDIzMCwgMjI4LCAyMTQsIDEwNSwgNywgNiwgMSwgCisgICAgMjExLCAxMTgsIDIsIDIzMiwgMTI5LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjksIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgCisgICAgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIAorICAgIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU3LCAKKyAgICAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIAorICAgIDI0NSwgMTA5LCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCAKKyAgICA0LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDI0NSwgCisgICAgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIAorICAgIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MSwgMjYsIAorICAgIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgCisgICAgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAorICAgIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgCisgICAgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU3LCAyNiwgNiwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAKKyAgICAyNDgsIDE2MSwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIAorICAgIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAKKyAgICAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA0LCAKKyAgICAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCisgICAgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjIsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIAorICAgIDE2MSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCAKKyAgICA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgCisgICAgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjEsIAorICAgIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIAorICAgIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgCisgICAgMjU0LCAxNTIsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIAorICAgIDEwOSwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIAorICAgIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMTQsIDEzLCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIxNCwgMTMsIDI2LCA0LCAKKyAgICAxLCAyMjYsIDIwNCwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgCisgICAgMTU4LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgCisgICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIAorICAgIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDQsIDEsIDI0NSwgNzIsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxMCwgMjE5LCAKKyAgICAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAKKyAgICAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIAorICAgIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIAorICAgIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgCisgICAgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAKKyAgICAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIAorICAgIDIsIDI0OCwgMTYyLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAKKyAgICAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIAorICAgIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAKKyAgICAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAKKyAgICAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA0LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjMxLCAyMzcsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjE0LCAKKyAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIAorICAgIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMTMsIDEyMCwgMjYsIDYsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyMzEsIDIzNywgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTcwLCAyNiwgMjM0LCA4LCAyNiwgMjI0LCAKKyAgICAxNzAsIDI2LCAyMjQsIDE1NywgMjYsIDIyNSwgMTc4LCAyNiwgMjQ4LCA0LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIAorICAgIDI0NSwgNzIsIDIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjUsIDE3OCwgMjYsIAorICAgIDQsIDEsIDI0NSwgNzIsIDIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTcwLCAyNiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMTQsIDEzLCAyNiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAKKyAgICAxLCAyMzUsIDE5MywgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjMxLCAyMzcsIDI2LCA0LCAxLCAyMzUsIAorICAgIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMjYsIDExNCwgCisgICAgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMzEsIDIzNywgCisgICAgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNiwgMTE0LCAyNiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIAorICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzcsIDI2LCA0LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIyMywgNDEsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjIzLCA0MSwgMiwgMjQ4LCAxNjEsIAorICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzcsIAorICAgIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDIyMywgNDEsIDIsIDI0OCwgMTYxLCAyNiwgMjQ4LCA0LCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgNCwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIAorICAgIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjUsIDE3OSwgMjIsIDIxMCwgCisgICAgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjI2LCAxMTQsIDI2LCAKKyAgICA2LCAxLCAyMjYsIDIwNiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyMjQsIDE3MCwgMjYsIDIyNiwgMTE0LCAyNiwgMjQ4LCAxNjEsIDI0NSwgMTU5LCAyMjQsIDMwLCAKKyAgICAyNDUsIDE2OCwgMjI0LCAzMCwgMjQ1LCAxNTksIDIxOSwgMjAsIDI0NSwgMTY4LCAyMTksIDIwLCAyMTYsIDE0MiwgMjE5LCAKKyAgICAyMCwgMjQ0LCAxNywgMjE5LCAyMCwgMjE5LCAxMjUsIDIxOSwgMjAsIDI0NCwgMTIwLCAyMTksIDIwLCAyMjQsIDE0NCwgCisgICAgMjE5LCAyMCwgMjE2LCAxNzEsIDIxOSwgMjAsIDI0MiwgNDIsIDIxOSwgMjAsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMTksIDIwLCAKKyAgICAyMTAsIDg3LCAyMTEsIDI0NSwgMjI4LCA3MiwgMjEwLCA4NywgMjExLCAyNDUsIDIzNSwgNjksIDIzMywgNDQsIDc5LCAyMjIsIAorICAgIDI0NiwgNzksIDI0MCwgMTc1LCAyMjgsIDczLCAyNDAsIDE3NSwgMjQ0LCAxMjAsIDI0OCwgMTY0LCAyNDUsIDE1OSwgMjQ4LCAKKyAgICAxNjQsIDI0NSwgMTY4LCAyNDgsIDE2NCwgMjAzLCAxMzAsIDUyLCA2NywgMjMyLCAyMTksIDUyLCAxMjEsIDIzMiwgMjE5LCAKKyAgICA0MywgMjE5LCAxNTcsIDIyNCwgMSwgNzksIDQ0LCAyMTksIDE1NywgMjI0LCAxLCA3OSwgMjE5LCAxNTcsIDIzMiwgMTE1LCAKKyAgICAyMjQsIDEsIDc5LCAyMTksIDE1NywgMjQxLCAxNzAsIDIyNCwgMSwgNzksIDQzLCA1MiwgMjI0LCAxLCA3OSwgNDQsIDUyLCAKKyAgICAyMjQsIDEsIDc5LCA1MiwgMjMyLCAxMTUsIDIyNCwgMSwgNzksIDUyLCAyNDEsIDE3MCwgMjI0LCAxLCA3OSwgMjQ4LCAyMTMsIAorICAgIDUyLCAyNDgsIDIxMywgMjUxLCAxMjEsIDIxNSwgMjIzLCAyNTEsIDEyMSwgMTIzLCA1OSwgMjMzLCA2MiwgMTEzLCA1OSwgCisgICAgMjMzLCA2MiwgMjAzLCAyNDUsIDE3MSwgMjQwLCAxNzMsIDIyNSwgMTMsIDIzMiwgMjIwLCAyMjAsIDEzOSwgMjI2LCAxOSwgCisgICAgMjIwLCAxMzksIDIzMywgNDQsIDI0NSwgMTY2LCAyMjIsIDI0NiwgMjQ1LCAxNjYsIDIyNCwgMjQ5LCAyNDcsIDIwNCwgMjQ0LCAKKyAgICAyNywgMjMzLCA0NCwgMjI2LCAxMjEsIDIyMiwgMjQ2LCAyMjYsIDEyMSwgMjI5LCAxOTksIDIyOCwgNzgsIDIxOSwgMjAsIAorICAgIDIyNSwgMTg2LCAyMzAsIDE5OCwgNTAsIDIyNSwgMTg2LCAyMTYsIDI0OSwgMjE2LCAxNDksIDUwLCAyMjQsIDE5MywgNTIsIAorICAgIDIyNCwgMTkzLCAyMTUsIDIxMiwgMjI0LCAxOTMsIDIyMywgNTIsIDIyNCwgMTkzLCAyMjMsIDUyLCA1MiwgMjI0LCAxOTMsIAorICAgIDIyMywgNTIsIDIxNSwgMjEyLCAyMjQsIDE5MywgMjUwLCAyNDYsIDIxOSwgMTU3LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjI0LCAKKyAgICAxLCA3OSwgMjE5LCAxNTcsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjI0LCAxLCA3OSwgMjIzLCAxMTAsIDc5LCA1MiwgMjQ1LCAKKyAgICAzOSwgNzksIDIzNSwgMjA4LCAyMjYsIDEyMywgMjE0LCAxODAsIDEzNSwgMjE2LCAxMTIsIDI1MCwgMjQ3LCAyMzUsIDIyMywgCisgICAgMjI1LCAxMywgMjUzLCAyMjIsIDI0MCwgMTc2LCAyNTEsIDEyMSwgMjQ0LCAxMCwgMjE5LCA5NywgNDMsIDQyLCAyNTEsIAorICAgIDE2NiwgMiwgMjI0LCAxMCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjI0LCAxMCwgNTIsIDIyNCwgMTYsIDc5LCAyMjQsIDE2LCAKKyAgICAyNDUsIDM5LCA3OSwgMjQ1LCAzOSwgMjI0LCAxNiwgNzksIDIxNiwgNzEsIDUsIDI0NSwgNzMsIDIyMywgNTIsIDIyNSwgNzEsIAorICAgIDUwLCA4NSwgMTQwLCAyNTEsIDEyMSwgODUsIDk3LCAyNTEsIDEyMSwgMTIxLCAyNTMsIDIyNCwgMjIzLCA1MiwgMjIwLCAKKyAgICAxNTIsIDI1MCwgOSwgMjE0LCAxNjMsIDExMywgMjUzLCAyMjMsIDI1NCwgMTY3LCAyMTMsIDE4OCwgMjQ5LCAyMjUsIDIzMCwgCisgICAgMTg3LCA1MCwgMjE3LCAyMzUsIDI0OCwgMTY0LCAyMzUsIDIwMCwgMjE0LCAxODAsIDI0NCwgNjAsIDIyNCwgMTQ0LCA3OSwgCisgICAgMTM0LCA1OSwgMjI0LCAxNDMsIDIyNCwgMjcsIDIyNCwgMTkzLCAyNDQsIDE5LCA1OSwgMjI0LCAxNDMsIDI0NCwgODksIDU5LCAKKyAgICAyMjQsIDE0MywgMTEzLCA1OSwgMjI0LCAxNDMsIDI0NCwgMTksIDU5LCA3OSwgMjQ2LCAxMjYsIDI0OSwgMTM4LCAyMTUsIAorICAgIDIyMiwgNjcsIDI0NCwgMTksIDI0NywgMTI2LCAyMzEsIDg3LCAxMSwgMjE5LCAyMCwgMjExLCAyMDksIDIzNSwgNjksIDI0MywgCisgICAgMjM0LCAyNTQsIDYwLCAyMzUsIDE5OCwgMjE2LCA4NiwgMjM1LCAxOTgsIDIyMCwgMTM5LCAyMzUsIDE5OCwgMjI1LCAyNSwgCisgICAgMjMzLCA0NCwgMjM1LCAxNzEsIDIyMiwgMjQ2LCAyMzUsIDE3MSwgMjQ0LCAxMDAsIDIxOCwgOTEsIDIzNSwgMTcxLCAyMjQsIAorICAgIDI0OSwgMjQ3LCAyMDQsIDIzNSwgMTcxLCAyMzUsIDIzNSwgMjE3LCAxODMsIDIxNywgMjUyLCAyNTUsIDE0LCAyMTcsIDE4MywgCisgICAgMjE3LCAyNTIsIDIzNSwgMjM1LCA5LCAyNDQsIDI4LCAyMjAsIDgyLCAyNTUsIDE0LCA5LCAyNDQsIDI4LCAyMjAsIDgyLCAKKyAgICAyMjksIDE5NCwgMjEsIDIyMCwgODMsIDIyOCwgNzQsIDIxLCAyMjAsIDgzLCAyMTgsIDI0LCAyMTAsIDg2LCAyMTgsIDI0LCAKKyAgICA3LCA0LCAxLCA3NCwgMjE4LCAyNCwgMTYxLCAyMTgsIDI0LCAxOTAsIDIxOCwgMjQsIDE5NSwgMjE4LCAyNCwgMTk5LCAyMTgsIAorICAgIDI0LCAxOTYsIDIxOCwgMjQsIDIwMSwgMjE4LCAyNCwgOTYsIDUwLCAyMTgsIDI0LCAyMzAsIDE4NiwgMjE4LCAyNCwgMjQ1LCAKKyAgICAxMDYsIDUwLCAyMTgsIDI0LCA0MywgMjI2LCA3LCAyMTgsIDI0LCA0NCwgMjI2LCA3LCAyMTgsIDI0LCA3LCA0LCAxLCAyMzAsIAorICAgIDMwLCAyMTgsIDY2LCAyMTAsIDg2LCAyMTgsIDY2LCAxMTEsIDIxOCwgNjYsIDEwNSwgMjE4LCA2NiwgMTU4LCAyMTgsIDY2LCAKKyAgICAxNjEsIDIxOCwgNjYsIDE5MCwgMjE4LCA2NiwgMTk1LCAyMTgsIDY2LCAxOTksIDIxOCwgNjYsIDE5NiwgMjE4LCA2NiwgCisgICAgMjAxLCAyMTgsIDY2LCA5NiwgNTAsIDIxOCwgNjYsIDIzMCwgMTg2LCAyMTgsIDY2LCAyNDUsIDEwNiwgNTAsIDIxOCwgNjYsIAorICAgIDQzLCAyMjYsIDcsIDIxOCwgNjYsIDQ0LCAyMjYsIDcsIDcsIDIxOCwgNjYsIDQsIDEsIDYxLCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICA3NiwgNywgMjE4LCA2NiwgNCwgMSwgNzgsIDcsIDIxOCwgNjYsIDQsIDEsIDIxMSwgMTc4LCA3LCAyMTgsIDY2LCA0LCAxLCAKKyAgICAyMjEsIDE5NywgNywgMjE4LCA2NiwgNCwgMSwgMjQyLCA2NywgNywgMjE4LCA2NiwgNCwgMSwgMjM1LCAyOSwgNywgMjE4LCAKKyAgICA2NiwgNCwgMSwgMTU2LCA3LCAyMTgsIDY2LCA0LCAxLCAxOTQsIDcsIDIxOCwgNjYsIDQsIDEsIDIzMCwgMzAsIDcsIDIxOCwgCisgICAgNjYsIDQsIDEsIDIyNiwgMTA5LCA3LCAyMTgsIDY2LCA0LCAxLCAyMjIsIDkzLCA3LCAyMTgsIDY2LCA0LCAxLCAyMTcsIAorICAgIDE1MywgMjQ1LCA1NCwgNTAsIDI0OSwgMjM1LCA1MCwgMjQ5LCAxMjUsIDUwLCAyNDQsIDMsIDI0NCwgNiwgNTAsIDIzMiwgCisgICAgMjA0LCA1MCwgMjMwLCAxOTksIDUwLCAyMjksIDIxNSwgNTAsIDIyNSwgMTY1LCA1MCwgMjIyLCAxMjAsIDUwLCAyMTEsIAorICAgIDIxNywgNTAsIDE2NiwgMjIwLCA1MSwgNTAsIDI0NywgMTM1LCA1MCwgMjQ1LCA1NSwgNTAsIDIzNCwgODIsIDUwLCAyMTUsIAorICAgIDExMywgNTAsIDI0NiwgMTA5LCA1MCwgMjQzLCA0NywgMjI1LCAxOTYsIDUwLCAyMjUsIDE2MywgNTAsIDI0MiwgMTE2LCA1MCwgCisgICAgMjUzLCAxOTAsIDUwLCAyNDAsIDIzNSwgNTAsIDI1MCwgMTkzLCA1MCwgMjMyLCAxOTcsIDIxNiwgNCwgNTAsIDIxOSwgMiwgCisgICAgNTAsIDIxNiwgMjQ2LCA1MCwgMjM1LCAyNDgsIDIyMiwgMTIwLCA1MCwgMjE1LCA5NywgMjMyLCAyMDQsIDUwLCAzOCwgNDMsIAorICAgIDI0MiwgNiwgNDgsIDM4LCA0NCwgMjQyLCA2LCA0OCwgMzgsIDIwMCwgNjcsIDIzMiwgMjIwLCAyMjYsIDEyNCwgMzgsIDIxOSwgCisgICAgMjUzLCA2NywgMjMyLCAyMjAsIDIyNiwgMTI0LCAzOCwgMjU0LCA5NiwgODAsIDQ4LCAzOCwgMjUwLCAxMCwgODAsIDQ4LCAKKyAgICAzOCwgNDMsIDgwLCA0OCwgMzgsIDQ0LCA4MCwgNDgsIDM4LCAyMjIsIDIzNywgMjI2LCAxMjQsIDM4LCAyNTAsIDEwLCAyMjIsIAorICAgIDIzNywgMjI2LCAxMjQsIDM4LCAyNTQsIDk2LCAyMjIsIDIzNywgMjI2LCAxMjQsIDM4LCAxMzQsIDE3MCwgNDgsIDM4LCAKKyAgICAyNDQsIDE5LCAxNzAsIDQ4LCAzOCwgMjQ1LCAxNTQsIDI1MCwgNDMsIDM4LCAyNDUsIDE1NCwgMjE4LCAyMzYsIDM4LCAyNDUsIAorICAgIDE1NCwgMjQ4LCAwLCAzOCwgMjQ1LCAxNTQsIDI1MCwgNDQsIDI1MiwgMTg4LCAzOCwgNDMsIDQ0LCA4MCwgNDgsIDM4LCAKKyAgICAyNDUsIDE1NCwgMjIxLCAxOTAsIDM4LCAyNDUsIDE1NCwgMjM0LCAxNDEsIDM4LCAyNDUsIDE1NCwgMjE0LCAxNTUsIDIyNSwgCisgICAgMTAsIDIxNSwgMjI2LCAzOCwgMjIzLCA1MywgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA1MiwgNjcsIDIxOCwgMTA1LCAyMjYsIAorICAgIDEyNCwgMzgsIDI1NCwgMTA2LCA4NywgMzgsIDIxNSwgMjEyLCAyMTQsIDE4MiwgMzgsIDIxMSwgMjQ3LCAyNTEsIDE0OCwgCisgICAgNDgsIDM4LCAxNDAsIDgwLCAyMjYsIDEyNCwgMzgsIDIwMCwgNTIsIDIxOSwgNDksIDIyNiwgMTI0LCAzOCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAzOCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgMzgsIDQzLCAKKyAgICA4MCwgNTEsIDM4LCA0NCwgODAsIDUxLCAzOCwgMjUzLCAyMjUsIDQ4LCAyNTUsIDIwLCAyMjYsIDIzNSwgMjU1LCA0LCAyMTYsIAorICAgIDQzLCAyMTYsIDE5NywgMjE4LCA3NSwgMTM5LCA2LCAyNTEsIDc0LCAyNDgsIDc5LCAyNTAsIDE4NiwgMjUwLCAxODMsIDIzMiwgCisgICAgMjIwLCA4NywgMjUwLCAyNDgsIDIyNiwgMjM1LCAyNTEsIDM0LCAyMTQsIDE4OSwgMjQ1LCA1NiwgMjQ5LCAxOTksIDIyMSwgCisgICAgMTg3LCAyNDgsIDc5LCAyNDQsIDE4NywgMTE5LCA0LCAyNDMsIDIwOSwgMTE5LCA2LCAyNDIsIDY3LCAyNTEsIDIyNywgNiwgCisgICAgMjQyLCA2NywgMTM5LCA2LCAyNDIsIDY3LCAyMjUsIDQwLCAyNDksIDE5OSwgMjI1LCA0MCwgMjQ5LCAyMDAsIDExNSwgMTEzLCAKKyAgICAyMjUsIDExMSwgMTE5LCA2LCA3NCwgMjUxLCAyMjcsIDYsIDc0LCAxMTksIDYsIDE1NiwgMTE5LCA0LCAxNTYsIDIzMywgCisgICAgMTU1LCA1NywgMjUyLCAxNDksIDg3LCAxMzksIDYsIDIzMCwgMzAsIDIyNywgMjAwLCA1MCwgMjE5LCAzMywgMjIzLCAxMjIsIAorICAgIDI0OSwgMTcwLCAxMTksIDYsIDIyNiwgMTA5LCAxMzksIDYsIDIyNiwgMTA5LCAxMzksIDYsIDIyNCwgOTksIDExOSwgNiwgCisgICAgMTUzLCAyNTEsIDIyNywgNiwgMTUzLCAxMzksIDYsIDE1MywgMjI0LCAxOTksIDIxNywgNzIsIDIyMywgNjUsIDIyMCwgMTM0LCAKKyAgICA3OSwgMjE3LCAyLCA1MCwgMjE1LCAyNTQsIDE2NCwgNTAsIDIxMywgMjQwLCAxMzksIDYsIDIxMCwgMTU5LCAyMjYsIDEzNywgCisgICAgNTAsIDIyNiwgMjI1LCA1MCwgMjM1LCAyMDAsIDIyNiwgMjI1LCA1MCwgMjUxLCAyMjcsIDYsIDIxMCwgMTU5LCAyMTUsIDk0LCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTIsIDIzNCwgMTc5LCA1MCwgMjU0LCAxMTUsIDUwLCAxMTksIDYsIDI1MywgMTY2LCAyNTEsIAorICAgIDIyNywgNiwgMjUxLCA3NCwgMjQ1LCA3NiwgODcsIDExOSwgNCwgNzYsIDExOSwgNiwgNzYsIDExOSwgNiwgMjQ1LCAxNCwgCisgICAgMjE1LCA5NCwgNiwgMjQ1LCAxNCwgMTE5LCA2LCAxOTQsIDExOSwgNCwgNzgsIDEwOSwgODcsIDI1MiwgMzcsIDg3LCAyNDIsIAorICAgIDIwOSwgODcsIDI0OCwgMTk4LCA4NywgMjM1LCAyMzksIDIxOSwgMzEsIDIyMiwgMTg5LCA2LCAyMjQsIDk5LCAyNDQsIDE5MCwgCisgICAgNTAsIDEzOSwgNCwgMjI1LCAxMTEsIDEzOSwgNCwgMjQzLCAxMTQsIDEzOSwgNiwgMjQzLCAxMTQsIDEzOSwgNiwgMjI1LCAKKyAgICAxMTEsIDEzOSwgMjMwLCAyOSwgMjE4LCA0MSwgMjE1LCA5NCwgMzUsIDYsIDI0MywgMjA5LCAyMTUsIDk0LCAzNSwgNiwgCisgICAgMTU2LCAyMjMsIDUyLCAzNSwgNiwgMTU2LCAyMTUsIDk0LCAzNSwgNiwgMjExLCAxMTcsIDEzOSwgMzIsIDYsIDI0OSwgNjgsIAorICAgIDEzOSwgMzIsIDQsIDI0OSwgNjgsIDEzOSwgMzIsIDQsIDc2LCAxMzksIDMyLCA0LCA3NCwgMTM5LCAzMiwgNCwgMjM1LCAKKyAgICAxNTAsIDIyNCwgMTczLCAyMzIsIDIxOSwgMjE1LCA5NCwgMjU0LCAxMzQsIDIyNSwgMTg2LCA1MCwgMjU0LCAxODksIDIxNSwgCisgICAgOTQsIDQsIDI0NSwgMTQsIDE2LCAzMSwgMjIxLCAyNTQsIDIxOSwgMzEsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyMCwgCisgICAgMTIwLCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMjgsIDE5OSwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjE2LCAyNDIsIAorICAgIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIxNiwgMTY5LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTEzLCAyMTYsIDE2NywgMjEyLCAKKyAgICAxMTQsIDI0NCwgMTAsIDEyMywgMjQ0LCAxMjUsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMTMsIDI0NCwgMTI0LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTM0LCAyNDQsIDEyNCwgMjEyLCAxMTQsIDI0NCwgMTAsIDI0NCwgMTksIDI0NCwgMTI0LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTIzLCAyMTksIDExNywgMjEyLCAxMTQsIDI0NCwgMTAsIDI0NCwgODksIDIxOSwgMTE1LCAyMTIsIDExNCwgCisgICAgMjQ0LCAxMCwgMTIzLCAyNDUsIDE5NiwgMjEyLCAxMTQsIDI0NCwgMTAsIDEzNCwgMjQ1LCAxOTQsIDIxMiwgMTE0LCAyNDQsIAorICAgIDEwLCAyNDQsIDg5LCAyNDUsIDE5NCwgMjEyLCAxMTQsIDI0NCwgMTAsIDIyMCwgMTI0LCAyNDUsIDE5NCwgMjQ0LCAxMCwgCisgICAgMjI3LCAyMDEsIDExMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMTEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTA1LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDE1OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxNjEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTkwLCAKKyAgICAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTksIDIyMiwgMjAwLCAyMjcsIDIwMiwgCisgICAgMTk2LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIwMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTYsIDI0OCwgMjIyLCAyMDAsIAorICAgIDIyNywgMjAyLCAyNDUsIDE3NSwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTUsIDc2LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgCisgICAgMTIyLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjQwLCAKKyAgICAyMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMTEsIDQsIAorICAgIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTA1LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE1OCwgNCwgMjIyLCAyMDAsIDIyNywgCisgICAgMjAyLCAxNjEsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTkwLCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NSwgNCwgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAxOTksIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk2LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIAorICAgIDIwMSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTYsIDI0OCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDUsIDE3NSwgNCwgCisgICAgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTUsIDc2LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIyLCA0LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTcsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIAorICAgIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ5LCAKKyAgICAyNTEsIDc1LCAyNDksIDY4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgODksIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAKKyAgICAyMDIsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMjMsIDUyLCAxMjMsIDI0MCwgMjE3LCA3LCAKKyAgICA0LCAxLCAyMjMsIDUyLCAyNTEsIDc0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxOSwgMTI3LCAyMzMsIDg0LCAxNywgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAyNDQsIDEyMywgMjQ1LCAyMzQsIDE3LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIzLCAyMTYsIAorICAgIDE0OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTYsIDE0OCwgMjEyLCAxMTQsIDI0NCwgMTAsIDIxMCwgCisgICAgODcsIDIxNiwgMTY3LCAxNDAsIDc1LCAyMTQsIDE1MywgNzUsIDk3LCA3NSwgMjQ2LCAxMTIsIDc1LCA0MywgNDQsIDc1LCAKKyAgICAxMjAsIDEyNCwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgNzUsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjE5LCAzMCwgMjQ1LCAKKyAgICAyMjgsIDc1LCAyMTksIDMwLCAyMTIsIDksIDc1LCAxNDAsIDgwLCAyLCA5MSwgOTcsIDgwLCAyLCA5MSwgMTQwLCAyMTIsIAorICAgIDM2LCA3NSwgOTcsIDIxMiwgMzYsIDc1LCAxNDAsIDExMywgMjQxLCAyNDEsIDc1LCAyMTQsIDE1MywgMTEzLCAyNDEsIDI0MSwgCisgICAgNzUsIDk3LCAxMTMsIDI0MSwgMjQxLCA3NSwgMjQ2LCAxMTIsIDExMywgMjQxLCAyNDEsIDc1LCAxNDAsIDgwLCAyLCAyMTcsIAorICAgIDc4LCA5NywgODAsIDIsIDIxNywgNzgsIDE0MCwgODAsIDI0MywgMjUxLCAxMzAsIDIxNCwgMTUzLCA4MCwgMjQzLCAyNTEsIAorICAgIDEzMCwgOTcsIDgwLCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgODAsIDI0MywgMjUxLCAxMzAsIDEyMCwgMTI0LCA4MCwgMiwgCisgICAgMjUyLCAxMzUsIDE0MCwgODAsIDIsIDEwMywgOTcsIDgwLCAyLCAxMDMsIDE0MCwgODAsIDIsIDIzMiwgMTI5LCA5NywgODAsIAorICAgIDIsIDIzMiwgMTI5LCA0MywgNDQsIDIxMiwgMzYsIDc1LCA0MywgNDQsIDgwLCAyLCA5MSwgMjQ2LCAxMTIsIDIxMCwgMzUsIAorICAgIDc1LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzgsIDIzMywgNDMsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3OCwgMjIyLCAKKyAgICAyNDQsIDI0NiwgMTEyLCA4MCwgMiwgMjE2LCA3OCwgMjMzLCA0MywgMjQ2LCAxMTIsIDgwLCAyLCAyMTYsIDc4LCAyMjIsIAorICAgIDI0NCwgOTcsIDgwLCAyLCAyNDksIDE2OSwgMjQ2LCAxMTEsIDI0NiwgMTEyLCA4MCwgMiwgMjQ5LCAxNjksIDIzMywgNDMsIAorICAgIDI1NCwgOTYsIDIxNiwgMTUsIDIyMCwgMTU1LCA3NSwgMjUwLCAxMCwgMjE2LCAxNSwgMjIwLCAxNTUsIDc1LCAyMjgsIDYxLCAKKyAgICAyMTIsIDksIDgwLCAyMTYsIDQzLCAyMDAsIDEzMCwgMTQwLCA4MCwgMjE2LCA0MywgMjUyLCAxNDksIDExNSwgOTcsIDgwLCAKKyAgICAyMTYsIDQzLCAxMzAsIDI1NCwgOTYsIDIwNCwgMjUwLCA0NCwgNzUsIDI1MCwgMTAsIDIwNCwgMjUwLCA0NCwgNzUsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNTIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIDIxNCwgCisgICAgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI0NCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIzMywgCisgICAgNDMsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE1MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAKKyAgICAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNDQsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICAyMzMsIDQzLCA5NywgODAsIDExNSwgMTQwLCA3NSwgMjE0LCAxNTMsIDgwLCAxNDAsIDY0LCAyNDYsIDExMiwgNzUsIDE0MCwgCisgICAgODAsIDExNSwgOTcsIDc1LCAxNDAsIDIyNiwgNzQsIDI1MywgMjU1LCAyMTQsIDE1MywgMjI2LCA3NCwgMjUzLCAyNTUsIDk3LCAKKyAgICAyMjYsIDc0LCAyNTMsIDI1NSwgMjQ2LCAxMTIsIDIyNiwgNzQsIDI1MywgMjU1LCAxNDAsIDI0MiwgNiwgMTE1LCA5NywgCisgICAgMjQyLCA1LCA5NywgMjQyLCA2LCAxMTUsIDE0MCwgMjQyLCA1LCAxNDAsIDUyLCA4MCwgMiwgOTEsIDQzLCA0NCwgNTIsIDgwLCAKKyAgICAyLCA5MSwgOTcsIDUyLCA4MCwgMiwgOTEsIDE0MCwgNTIsIDc1LCAyMTQsIDE1MywgNTIsIDc1LCA5NywgNTIsIDc1LCAyNDYsIAorICAgIDExMiwgNTIsIDc1LCA0MywgNDQsIDUyLCA3NSwgMTIwLCAxMjQsIDUyLCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA1MiwgNzUsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCA1MiwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA1MiwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgCisgICAgNTIsIDc1LCAxNDAsIDIxNSwgMjEyLCA3NSwgOTcsIDIxNSwgMjEyLCA3NSwgMTQwLCAyMTgsIDIzMiwgNzUsIDk3LCAyMTgsIAorICAgIDIzMiwgNzUsIDIxNCwgMTUzLCA4MCwgMiwgNTIsIDkxLCAyNDYsIDExMiwgODAsIDIsIDUyLCA5MSwgMTQwLCAyNDgsIDE2MywgCisgICAgNzUsIDIxNCwgMTUzLCAyNDgsIDE2MywgNzUsIDk3LCAyNDgsIDE2MywgNzUsIDI0NiwgMTEyLCAyNDgsIDE2MywgNzUsIAorICAgIDE0MCwgODAsIDIxNiwgNDMsIDEzMCwgOTcsIDgwLCAyMTYsIDQzLCAxMzAsIDE0MCwgNzEsIDc1LCAyMTQsIDE1MywgNzEsIAorICAgIDc1LCA5NywgNzEsIDc1LCAyNDYsIDExMiwgNzEsIDc1LCAyMTQsIDE1MywgNzEsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMTQsIAorICAgIDE1MywgNzEsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTcsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxOCwgMiwgCisgICAgMjAzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxOCwgMiwgNjcsIDEzMCwgMjE0LCAxNTMsIDcxLCAKKyAgICA1MiwgNzUsIDIxNCwgMTUzLCA3MSwgNTIsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTcsIDk3LCA3MSwgODAsIDI0MywgMjUxLCAKKyAgICAyMTIsIDU2LCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyMTYsIDQzLCAyNDksIDE2OCwgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAKKyAgICAyMTYsIDQzLCAyNDksIDE2OCwgMTIwLCAxMjQsIDcxLCA3NSwgNDQsIDgwLCAyLCA0LCAyNTAsIDQzLCAyNDYsIDExMiwgODAsIAorICAgIDE0MCwgNjQsIDIxNCwgMTUzLCA3NSwgMTM0LCA5NywgMjUzLCAyNTUsIDE0MCwgODAsIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCAKKyAgICA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDY3LCA5MSwgMTQwLCA4MCwgMiwgNTIsIDY3LCA5MSwgOTcsIDgwLCAyLCA1MiwgNjcsIAorICAgIDkxLCA0MywgNDQsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDIyNiwgMTc3LCA3NSwgOTcsIDIyNiwgMTc3LCA3NSwgNDMsIAorICAgIDQ0LCAyMjYsIDE3NywgNzUsIDMxLCAyNTQsIDE2MywgMjQ5LCAyMjIsIDIyNiwgMSwgMjQ3LCAyNDEsIDIxNiwgMTg4LCAKKyAgICAyNDUsIDM1LCAyMTYsIDE4OCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NSwgMzYsIDI0NSwgMTYwLCAyMjAsIDEyOSwgMjM1LCAKKyAgICAyNTIsIDIyOSwgMjI2LCAyNDUsIDE3OCwgMjI2LCAyMzUsIDIyOCwgNTcsIDI1NCwgMTMyLCAyNDUsIDE3OCwgMjI2LCAyMzUsIAorICAgIDQsIDI0NSwgMTc4LCAyMjYsIDIzNSwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAyMzEsIDY3LCAyNDcsIDE0NiwgMjI4LCA1NywgCisgICAgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMzEsIDY3LCA0LCAyNDksIDE5NCwgMjUzLCAyNDYsIDIzMSwgNjcsIDI0NSwgMTUxLCAKKyAgICA2NCwgMjI0LCAxNzUsIDIzMCwgMjksIDIyNCwgMTgzLCAyMzAsIDI5LCAyNDksIDE3MywgMjMwLCAyOSwgMjE4LCA0MSwgCisgICAgMjMwLCAxODcsIDUwLCAyMzAsIDE4NSwgNTAsIDU5LCAyMjUsIDI1LCAyNDcsIDE3NywgMjE5LCA5NywgMjIwLCAxMzAsIAorICAgIDIzMCwgMTg2LCAyNTMsIDIyNSwgMjI2LCAxNzEsIDIyMiwgMjM3LCAyMjYsIDE3MSwgMjUxLCAxMjIsIDIyNiwgMTcxLCA0MiwgCisgICAgMjIyLCAxOTUsIDI0OSwgMTE3LCAyMjIsIDE5NSwgMjQ0LCAxMiwgMjIyLCAxOTUsIDIyNCwgMTcxLCAxMTIsIDIzNSwgMjQxLCAKKyAgICA0NCwgMjU0LCAxMTcsIDI1NCwgMTE3LCAyMzEsIDkzLCAyNTQsIDExNywgMjE5LCAxLCAyNTQsIDExNywgMjQ3LCAxNzksIAorICAgIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDcsIDE4MiwgMjI2LCAxMiwgMTEyLCAyMjgsIDU3LCAyMjYsIDEyLCAxMTIsIDIzMiwgCisgICAgMTUyLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMzUsIDIwNSwgMjE0LCAxNzUsIDIzNSwgMjE4LCA1MiwgMjM1LCAKKyAgICAyMTgsIDIxNSwgMjEyLCAyMzUsIDIxOCwgMjQ5LCAxOTAsIDIzNSwgMjE4LCAyMTgsIDE0LCAyMzUsIDIxOCwgMjEzLCAxMjksIAorICAgIDIzNSwgMjE4LCAyNTAsIDEwLCAyMzUsIDIxOCwgMjUwLCAxMCwgMjQ5LCAxOTAsIDIzNSwgMjE4LCAyNTQsIDk2LCAyNDksIAorICAgIDE5MCwgMjM1LCAyMTgsIDIxNiwgMTg3LCAyNTIsIDc1LCAyMjMsIDE0MCwgMjI0LCAxNzIsIDU5LCAyMzAsIDE4NiwgMjQ1LCAKKyAgICA0MSwgMjQzLCA1MywgMjI0LCAxNzIsIDI0MSwgNjQsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMjMsIDUyLCAxODQsIDIzNSwgCisgICAgMjAwLCAyMzMsIDcxLCAyMjIsIDkzLCAyMTksIDE1OSwgMjEyLCAzNSwgMjExLCAyMDAsIDIyNCwgMTgzLCAyMjgsIDU3LCAKKyAgICAxODQsIDIzMCwgMTg3LCAxODQsIDI1MywgMjE4LCAxMjgsIDExMiwgMjI4LCA1NywgMjUzLCAyMTgsIDEyOCwgMTEyLCAyNTQsIAorICAgIDU2LCAxMjgsIDExMiwgMjU0LCA1NiwgMjUxLCA5NiwgMjI4LCA1NywgMjU1LCAxMywgMTI4LCAxMTIsIDIyOSwgMTA1LCAKKyAgICAyNTQsIDU2LCAyMjgsIDY0LCAyNTUsIDEzLCAxMjgsIDExMiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMjgsIDU3LCAyNTQsIAorICAgIDE1NiwgMTI4LCAxMTIsIDI1NCwgMTU2LCAxMjgsIDE3NywgMTI4LCAxMTIsIDIxNSwgMjEyLCAxODQsIDI1NCwgMTY0LCAKKyAgICAxMjgsIDExMiwgMjQ1LCAxMDIsIDExMiwgMjQzLCA1MiwgMjQ1LCAxMDIsIDExMiwgMjQ3LCAyNDIsIDI1MiwgMzEsIDI1NCwgCisgICAgNTgsIDIxNiwgMTk3LCAyMzIsIDIyNywgMjQzLCA1MiwgMTI4LCAxMTIsIDI1NCwgNTYsIDEyOCwgMjE2LCA0MywgMTc3LCAKKyAgICAyMTYsIDE5NywgMjM2LCAyMiwgMjI2LCAyMzUsIDIzNiwgMjIsIDY0LCAxNzcsIDI1NCwgNTYsIDEyOCwgMTEyLCAyNDksIAorICAgIDIzNSwgMjQ1LCAxMDUsIDI0NSwgMTA2LCAyNDksIDIzNCwgMjIyLCAyMzcsIDIzNiwgNywgMTI4LCAxMTIsIDIyMiwgMjM3LCAKKyAgICAxMjgsIDExMiwgMjQ5LCAxNjIsIDExMiwgMjQ1LCA3NSwgMjQ1LCAxMDQsIDExMiwgMjE4LCAxNTksIDI0NSwgMTA1LCAyNDgsIAorICAgIDYzLCAxMjgsIDExMiwgMTI4LCAyMTYsIDQzLCAyNTEsIDg2LCAyNDgsIDgwLCAyMzEsIDkzLCAyNTEsIDg1LCAyMjQsIDE0LCAKKyAgICAxMjgsIDExMiwgMjI4LCA1NywgMTI4LCAxMTIsIDI0MCwgMTExLCAxMTIsIDIyOCwgNTcsIDI0MCwgMTExLCAxMTIsIDIxOCwgCisgICAgMTExLCAyNDUsIDEwMiwgMTEyLCAyMzMsIDIxLCAxNzcsIDEyOCwgMTEyLCAyNDIsIDEzNywgMTc3LCAxMjgsIDExMiwgMjMzLCAKKyAgICAyMSwgMTE1LCAxMjgsIDExMiwgMjQyLCAxMzcsIDExNSwgMTI4LCAxMTIsIDIzMywgMjEsIDI1MSwgOTYsIDIyOCwgNTcsIAorICAgIDEyOCwgMTEyLCAyNDIsIDEzNywgMjUxLCA5NiwgMjI4LCA1NywgMTI4LCAxMTIsIDIzMCwgMTAyLCAyMzMsIDIwLCAyMzAsIAorICAgIDEwMiwgMjQyLCAxMzYsIDI1MiwgMzEsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDIyOCwgNTcsIDIzMywgMjAsIDIyOCwgCisgICAgNTcsIDI0MiwgMTM2LCAyMjksIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMTI4LCAxMTIsIDIyOSwgMTA1LCAyNDIsIDEzNywgCisgICAgMjI4LCA2NCwgMTI4LCAxMTIsIDIzMywgMjEsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjQyLCAxMzcsIDE3NywgMjQ1LCAxMDIsIAorICAgIDExMiwgMjI5LCAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDI0NSwgMTAyLCAxMTIsIDIyOSwgMTA1LCAyNDIsIDEzNywgMjI4LCAKKyAgICA2NCwgMjQ1LCAxMDIsIDExMiwgMjMzLCAyMSwgMTc3LCAyNDIsIDEzNiwgMjQyLCAxMzcsIDE3NywgMjMzLCAyMCwgMjI5LCAKKyAgICAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDI0MiwgMTM2LCAyMjksIDEwNSwgMjQyLCAxMzcsIDIyOCwgNjQsIDIzMywgMjAsIAorICAgIDIyNCwgMjA1LCAyMTgsIDU2LCAyMjQsIDIwNiwgMTc3LCAxMjgsIDExMiwgMjE4LCA1NywgMTc3LCAxMjgsIDExMiwgMjI0LCAKKyAgICAyMDYsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjE4LCA1NywgMTc3LCAyNDUsIDEwMiwgMTEyLCAyNDcsIDE0NiwgMjI4LCA1NywgCisgICAgMjI0LCAyMDgsIDI0NywgMTQ2LCAyMjgsIDU3LCAyMTgsIDU4LCAyMTgsIDY1LCAyMjYsIDIzNSwgMjE4LCAyMywgMjI2LCAKKyAgICAyMzUsIDIyOCwgNTcsIDExNiwgMjE4LCA2NSwgMjI2LCAyMzUsIDIyOCwgNTcsIDExNiwgMjE4LCAyMywgMjI2LCAyMzUsIAorICAgIDIxOCwgNjUsIDY0LCAxNzcsIDEyOCwgMTEyLCAyMTgsIDIzLCA2NCwgMTc3LCAxMjgsIDExMiwgMjI5LCAxMDUsIDExNiwgCisgICAgMjE4LCA2NSwgNjQsIDIyOCwgNjQsIDEyOCwgMTEyLCAyMjksIDEwNSwgMTE2LCAyMTgsIDIzLCA2NCwgMjI4LCA2NCwgMTI4LCAKKyAgICAxMTIsIDIxOCwgNjUsIDY0LCAyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCAyMywgNjQsIDIsIDIyOCwgNTcsIDEyOCwgCisgICAgMTEyLCAyMzAsIDg2LCAyMzAsIDg3LCAyMzAsIDg4LCAyMzAsIDg3LCAyMTQsIDE3NSwgNDIsIDIzNiwgMjIsIDIyNiwgMjM1LCAKKyAgICA0MiwgMjI2LCAxNTQsIDIyNiwgMjM1LCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgMTI4LCAxMTIsIDQyLCAyMjYsIDE1NCwgNjQsIAorICAgIDE3NywgMTI4LCAxMTIsIDQyLCAyNTEsIDMsIDQyLCAyNDksIDExMCwgMzcsIDIyNSwgMjUsIDM3LCAyMzAsIDE4NiwgMzcsIAorICAgIDIxNiwgODYsIDM3LCAyNDcsIDE3NywgMjE5LCA5NywgMzcsIDU5LCAyMjYsIDE3MSwgMzcsIDIyMiwgMjM3LCAyMjYsIDE3MSwgCisgICAgMzcsIDI1MywgMjI1LCAyMjYsIDE3MSwgMzcsIDI0NSwgMTA1LCAzNywgMjQ4LCAxNjQsIDkyLCAyMjUsIDI1LCA5MiwgMjMwLCAKKyAgICAxODYsIDkyLCAyMTYsIDg2LCA5MiwgNTksIDIyNiwgMTcxLCA0NCwgMjE3LCA4OCwgNDMsIDIxNywgODgsIDEyNCwgMjE3LCAKKyAgICA4OCwgMTIwLCAyMTcsIDg4LCAyNTMsIDIyOCwgMjMwLCAxNjEsIDIxNSwgMTkyLCAyNDQsIDMzLCAyMTUsIDIxMiwgNjcsIAorICAgIDI1MiwgMTQ5LCA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQ0LCAyMTUsIDkzLCAyNDcsIDE0NiwgMjI4LCAKKyAgICA1NywgMjI0LCAxNjYsIDIyOCwgNTcsIDIxNSwgMTkyLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ0LCAzNCwgMjI5LCAxMDcsIAorICAgIDUyLCA2NywgMjUyLCAxNDksIDUyLCA0NCwgMjE1LCA5MywgMjI0LCAyMDYsIDIxNCwgMTg0LCAyMjMsIDk0LCAyMTgsIDU3LCAKKyAgICAyMTQsIDE4NCwgMjIzLCA5NCwgMjI4LCA2MiwgMjE4LCA3OCwgMjI2LCAyMzUsIDI0OSwgMTk0LCAyNTMsIDI0NiwgMjI4LCAKKyAgICA2MiwgMjE4LCA3NywgMjI4LCA2MiwgMjE4LCA3OCwgNjQsIDE3NywgMTI4LCAxMTIsIDI0OSwgMTk0LCAyNTMsIDI0NiwgCisgICAgMjI4LCA2MiwgMjE4LCA3OCwgMTc3LCAxMjgsIDExMiwgMjI2LCAxNTQsIDIyNiwgMjM1LCAyMzYsIDIyLCAyMjYsIDIzNSwgCisgICAgMjMwLCA5MiwgMjQxLCAyMDcsIDI0OSwgMjA0LCAyMzEsIDE0MiwgMjM1LCAyMTUsIDIxMSwgMTQ1LCAyMjksIDIwNywgMjI4LCAKKyAgICA2MywgNDQsIDI1NCwgMTE4LCAyLCAyNTQsIDMzLCA0NCwgMjE1LCAyMjYsIDIzMCwgMjksIDIzMiwgMTUyLCAyNTQsIDEyNiwgCisgICAgMjMwLCAyOSwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMzAsIDI5LCAyMzUsIDIwNSwgMjMwLCAyOSwgMjE0LCAxNzUsIDI0OCwgCisgICAgMSwgMjI2LCAxNzEsIDU5LCAyMjYsIDE3MSwgMjE4LCAxNTksIDIyNiwgMTcxLCAyNDcsIDE3NywgMjE2LCA4NiwgMjUxLCAKKyAgICAxNzIsIDQzLCAyMjgsIDYyLCAyNDQsIDE4OSwgMjIwLCAxNTEsIDIyNCwgMTgzLCA0NCwgMjI4LCA2MiwgMjQ0LCAxODksIAorICAgIDIyMCwgMTUxLCAyMjQsIDE4MywgNDMsIDIyMCwgMTUxLCAyMjQsIDE4MywgNDQsIDIyMCwgMTUxLCAyMjQsIDE4MywgMjIzLCAKKyAgICA1MiwgMjE2LCA5MCwgMjQ1LCAxMDUsIDI0OSwgMTA3LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDI0OSwgMTA3LCAyMzIsIDE1MiwgCisgICAgMjU0LCAxMjYsIDUyLCAyMTgsIDY0LCA1MiwgMjE4LCAyMiwgNTIsIDIzNSwgMjA1LCA1MiwgMjE0LCAxNzUsIDIyNSwgNTAsIAorICAgIDEyOCwgMjIsIDIyNiwgMTIsIDExMiwgMjMzLCAyMSwgMiwgMjQ3LCAxMjgsIDI0MiwgMTM3LCAyLCAyNDcsIDEyOCwgMjEzLCAKKyAgICAxODcsIDIzMCwgMTAyLCAyMzMsIDIwLCAyMTMsIDE4NywgMjMwLCAxMDIsIDI0MiwgMTM2LCAyMzMsIDIxLCAxMjgsIDIxNiwgCisgICAgNDMsIDE3NywgMjQyLCAxMzYsIDI0MiwgMTM3LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMTI4LCAyMTYsIDQzLCAKKyAgICAxNzcsIDIzMywgMjAsIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMTI4LCAyMTYsIDQzLCAxNzcsIDIyNCwgMjA1LCAKKyAgICAxMjgsIDIxNiwgNDMsIDE3NywgMjE4LCA1NiwgMjQ3LCAxNDYsIDIyOCwgNTcsIDIyNCwgMjA5LCAxNzcsIDI0NSwgMTA3LCAKKyAgICAyNDcsIDE0NiwgMjI4LCA1NywgMjE4LCA1OSwgMTc3LCAyNDUsIDEwNywgMjI4LCA1NywgNDIsIDIzNiwgMjIsIDY0LCAxNzcsIAorICAgIDEyOCwgMTEyLCAyMjgsIDU3LCA0MiwgMjI2LCAxNTQsIDY0LCAxNzcsIDEyOCwgMTEyLCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgCisgICAgMjI4LCA1NywgMTI4LCAxMTIsIDQyLCAyMjYsIDE1NCwgNjQsIDE3NywgMjI4LCA1NywgMTI4LCAxMTIsIDIzMywgMjEsIAorICAgIDI1MSwgOTYsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDI0MiwgMTM3LCAyNTEsIDk2LCAyMjgsIDU3LCAyNDUsIDEwMiwgCisgICAgMTEyLCAyMjQsIDIwNiwgMjUxLCA5NiwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjE4LCA1NywgMjUxLCA5NiwgMjI4LCAKKyAgICA1NywgMjQ1LCAxMDIsIDExMiwgMjI4LCA1NywgMjI4LCA2MiwgMjE4LCA3OCwgMjI2LCAyMzUsIDI0NywgMTQ2LCAyMjgsIAorICAgIDU3LCAyNDksIDE5NiwgMjUzLCAyNDYsIDIyOCwgNjIsIDIxOCwgNzcsIDIyOCwgNTcsIDIyOCwgNjIsIDIxOCwgNzgsIDY0LCAKKyAgICAxNzcsIDEyOCwgMTEyLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMjgsIDYyLCAyMTgsIDc4LCAKKyAgICAxNzcsIDI0NSwgMTA3LCA2NywgMjQ1LCAxNzEsIDIzMCwgMjI3LCAyMDMsIDI0NSwgMTcxLCAxMjAsIDQ0LCAyNDgsIDcsIAorICAgIDI0NSwgMTcxLCAxMjQsIDQ0LCAyNDgsIDcsIDI0NSwgMTcxLCAyNDUsIDE3OCwgNjQsIDIsIDIwMCwgMjAzLCA5MSwgMjQ1LCAKKyAgICAxNzgsIDY0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIDQsIDI0NSwgMTc4LCAKKyAgICA2NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAyNDUsIDE3OCwgNjQsIDIsIAorICAgIDU5LCA0OCwgMjQ1LCAxNzgsIDY0LCAyLCAyMjYsIDEyNywgNCwgMjQ1LCAxNzgsIDY0LCAyLCAyMjYsIDEyNywgMjQ1LCAKKyAgICAxNzgsIDY0LCAyLCAyMTQsIDE4MywgMjQ1LCAxNzgsIDY0LCAyLCAxMTMsIDIwMywgMjE4LCA5MiwgMjQ5LCAxOTQsIDIsIAorICAgIDIwMCwgMjAzLCA5MSwgMjQ5LCAxOTQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgCisgICAgNCwgMjQ5LCAxOTQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgMjQ5LCAxOTQsIAorICAgIDIsIDIyNiwgMTI3LCA0LCAyNDksIDE5NCwgMiwgMjI2LCAxMjcsIDIxMCwgMTYwLCAxODksIDI1MiwgMTgxLCAyMzEsIDY2LCAKKyAgICAyNDgsIDIsIDUwLCAyNDUsIDE4MCwgNzUsIDI0MCwgMjQxLCAxMjAsIDI1NCwgMSwgMTI0LCAyNTQsIDEsIDIyNCwgMTc4LCAKKyAgICAyMjUsIDE2OCwgMjEyLCAzMiwgMjMyLCAyMTksIDQzLCAyNTAsIDE4OSwgNDQsIDI1MCwgMTg5LCA0MywgMjQ0LCA2NSwgNDQsIAorICAgIDI0NCwgNjUsIDI1MSwgMTgzLCA0NCwgMjQ5LCAxNDAsIDI1MSwgMTgzLCA0MywgMjQ5LCAxNDAsIDIxNiwgMTUsIDQ0LCAKKyAgICAyNDksIDE0MCwgMjE2LCAxNSwgNDMsIDI0OSwgMTQwLCAyMjMsIDUyLCAyMjgsIDU3LCA1MCwgNDIsIDIzMiwgMTEwLCAyNTQsIAorICAgIDMzLCAyMjEsIDE2NiwgMjIxLCAxNzMsIDIxNywgMiwgMjIzLCAxMjMsIDIyNCwgMjQ0LCAyMzUsIDI0NSwgMjEzLCAxNjUsIAorICAgIDIxOCwgMjM2LCAyMjUsIDQ0LCA2NCwgMjM1LCAyMTQsIDUwLCAyMTUsIDk0LCAyMjgsIDU3LCA1MCwgMjEyLCA0MiwgMjQwLCAKKyAgICAyNDMsIDIxNiwgMTUsIDQzLCAyNDksIDE2OCwgMjE2LCAxNSwgNDQsIDI0OSwgMTY4LCAyNTEsIDE4MywgNDMsIDI0OSwgCisgICAgMTY4LCAyNTEsIDE4MywgNDQsIDI0OSwgMTY4LCAyMTYsIDE1LCAxNjMsIDIzNSwgMjE4LCAyNTEsIDE4MywgMTYzLCAyMzUsIAorICAgIDIxOCwgMjQzLCAyNDgsIDIxOSwgNzcsIDEyMCwgMjU0LCAyLCAyNTIsIDMyLCAxMTMsIDIwMywgMjUyLCAxMzcsIDIyNiwgCisgICAgMTY0LCAyMzQsIDE0NCwgMjQ1LCA5OCwgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCAyMTEsIDE3OSwgMjM2LCA3LCAKKyAgICAxMTYsIDIyMywgMTIwLCAyNTEsIDE3MSwgMjM0LCAxNDMsIDIzMywgNDgsIDI1NCwgMTE4LCAxMjcsIDIyMiwgMjUwLCAyNTQsIAorICAgIDExOCwgMTI3LCAyNDUsIDk4LCAyMTYsIDQzLCAyMTYsIDE5NywgMjMzLCA1MiwgMjUyLCA0MywgMjIyLCAyMzYsIDI0OSwgCisgICAgNzgsIDI1NCwgMTY0LCAyNTQsIDksIDIxNywgMTgyLCAyMTYsIDUsIDIyMiwgMTI1LCAyNDcsIDIyMywgMjI2LCAxNTUsIAorICAgIDI0OSwgMjA2LCAyMTcsIDUzLCAyMTksIDg4LCAyNDksIDE1OSwgMjQ5LCAxNTgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjQwLCAxNTgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE4LCAyMzAsIDIyNCwgMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjI0LCAzMSwgMjQ1LCAxMDcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQ3LCAxODIsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQ4LCAwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIzNSwgNjIsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjUwLCA0MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAKKyAgICAyMTgsIDEzNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIxOSwgOTgsIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTIsIDE4OSwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIyNCwgMzEsIDIxOSwgOTcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjUyLCAxODgsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjMzLCAyMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDIsIDEzNiwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxNDAsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgOTcsIDIxNCwgMTksIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMTQwLCA3NSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAKKyAgICA5NywgNzUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjUyLCAxODgsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMTI0LCAyMTcsIDg5LCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDYzLCAyMTgsIDEzNywgMjU0LCAKKyAgICA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAxMjQsIDI1MCwgMjQ2LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIAorICAgIDI0OCwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTI0LCAyMTcsIDg5LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIxNCwgMTUzLCAyMTQsIDE5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIxNCwgMTUzLCA3NSwgMjU0LCAKKyAgICA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDIyNiwgMTI3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNzQsIAorICAgIDIxOCwgMTM3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDEyMCwgMjUwLCAyNDYsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMSwgMjQ4LCA3MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDIzNSwgNjIsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ2LCAxMTIsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgCisgICAgMjQ2LCAxMTIsIDc1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMCwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjQ4LCA2MywgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCAxLCAyMTQsIDE4MywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMzUsIDYzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMTQsIAorICAgIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIyMCwgNywgMjM1LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMjQsIDAsIDIyNCwgMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjE4LCAxNTgsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMSwgMjQ5LCAyMzQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMTcsIDg5LCAyNDgsIDksIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA3NCwgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxOCwgMTU5LCAKKyAgICAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjM1LCA2MywgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDI1MCwgNDQsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjQsIDIyMCwgNywgMjE4LCAxMzcsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgNDMsIDIyMCwgNywgMjE4LCAxMzcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE2LCA5MCwgMjQ4LCAKKyAgICA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0MiwgMTM3LCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ5LCAKKyAgICAyMjgsIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDc0LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjEwLCAzNCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTgsIDEzOCwgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIyMCwgMTUzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMjgsIDU3LCAyNDUsIDEwNywgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMjQsIDE1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyNCwgMjUwLCAKKyAgICAyNDcsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDI1MCwgMjQ3LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjM1LCAxOTIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjIzLCA0MCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjYsIAorICAgIDIwNSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTQsIDE1MiwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjQ1LCAxMDksIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIzNSwgMTkzLCAyMTQsIDE4MywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMjYsIDIwNiwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjU0LCAxNTEsIDIyOCwgCisgICAgNTcsIDI1MCwgMTM4LCA3OSwgNDQsIDI1NCwgMTE4LCAyLCAyNDYsIDExMiwgMjEwLCAzNSwgNzUsIDIxOSwgMjM3LCAyMDQsIAorICAgIDI1MSwgMTcxLCAyNTIsIDUzLCA4NywgNjcsIDIzMiwgMjIwLCAyLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIzNSwgMjIzLCA4NywgCisgICAgMjQ5LCAxOTEsIDIxNCwgMTgxLCA4NywgMjQ3LCAxOTcsIDIxNCwgMTgxLCA4NywgMjQ1LCAxNjIsIDg3LCAyNDksIDIxOCwgCisgICAgODcsIDcxLCA0MiwgMiwgMjUwLCAxODMsIDY3LCAyMzIsIDIxOSwgMjQ1LCAxMzgsIDg3LCAyNTQsIDE0NywgMjM0LCAxNDUsIAorICAgIDg3LCAyNDEsIDIyMCwgODcsIDM3LCAyMDMsIDI1MiwgMTQ5LCAyLCAyMjgsIDU1LCAzNywgMjE1LCAyMjcsIDI0NiwgMTE0LCAKKyAgICAyNTEsIDE0MywgMjUwLCA0NCwgMiwgMjI4LCA1OSwgNzUsIDIxNCwgMTc5LCA4NywgMjMwLCAxNDIsIDg3LCAyNDAsIDE3MSwgCisgICAgODcsIDIyNiwgMTc4LCAyNDIsIDY2LCA4NywgMjI2LCAxNzgsIDIzMywgMTUzLCA4NywgMjI1LCAyNDgsIDg3LCAyMjUsIAorICAgIDI0NywgODcsIDI0NywgMjA1LCAyNDksIDEwNSwgMTYsIDI0NCwgMjgsIDEwNSwgMjE5LCA1MiwgODcsIDI1NCwgNzQsIDI0MywgCisgICAgMjMyLCAxNiwgMjI0LCAzMCwgMjQ4LCA5MSwgMjIwLCAxNDAsIDIzNCwgMTQ1LCA4NywgMjI0LCAxOTUsIDIyNiwgNzksIAorICAgIDIyOSwgODcsIDIyNiwgNzksIDIyNCwgMTkxLCAyMjEsIDE5MSwgODcsIDI1MCwgMjUsIDIyMSwgMTkxLCA4NywgNDMsIDIyNiwgCisgICAgOCwgMjE0LCAxNjAsIDEwMywgNDMsIDIyNiwgOCwgMjQ1LCAyOSwgNDMsIDIyNiwgOCwgMjMyLCAxMTQsIDEwMywgNDQsIAorICAgIDIyNiwgOCwgMjE0LCAxNjAsIDEwMywgNDQsIDIyNiwgOCwgMjQ1LCAyOSwgNDQsIDIyNiwgOCwgMjMyLCAxMTQsIDEwMywgCisgICAgNDMsIDQyLCAyNTEsIDE2NiwgMjE0LCAxNjAsIDI0OSwgMTY4LCA0MywgNDIsIDI1MSwgMTY2LCAyNDUsIDI5LCA0MywgNDIsIAorICAgIDI1MSwgMTY2LCAyMzIsIDExNCwgMjQ5LCAxNjgsIDQ0LCA0MiwgMjUxLCAxNjYsIDIxNCwgMTYwLCAyNDksIDE2OCwgNDQsIAorICAgIDQyLCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDQsIDQyLCAyNTEsIDE2NiwgMjMyLCAxMTQsIDI0OSwgMTY4LCA0MywgMjQ5LCAKKyAgICAxMDcsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMTAzLCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzAsIDIyOSwgMjI1LCAxMDQsIAorICAgIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMiwgMTE0LCAxMDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDQsIAorICAgIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjE0LCAxNjAsIDEwMywgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMwLCAyMjksIDIyNSwgCisgICAgMTA0LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzIsIDExNCwgMTAzLCAyMzUsIDIxOSwgMjQ1LCAyOSwgMjAzLCAyMzIsIAorICAgIDIyMCwgMjQ1LCAyOSwgMjE0LCAxNjAsIDQzLCAxNzcsIDIzMiwgMTE0LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjEsIAorICAgIDE3NCwgMjE0LCAxNjAsIDQ0LCAxNzcsIDIzMiwgMTE0LCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjEsIDE3NCwgMjE4LCAKKyAgICA0MiwgMjE2LCAxNCwgMjE4LCA0MiwgMjUxLCAxODIsIDIxNiwgMTUsIDQyLCAxMjcsIDI1MSwgMTgzLCA0MiwgMTI3LCAyNTEsIAorICAgIDE4MywgNDIsIDI1MSwgMTY2LCAxMTUsIDIxNiwgMTUsIDQyLCAxMjcsIDM0LCAxNiwgMjUxLCAxODIsIDQzLCA2NywgOTMsIAorICAgIDIzMiwgMjE5LCA0NCwgNjcsIDkzLCAyMzIsIDIxOSwgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTgsIDIwMywgMjIxLCAyMDcsIAorICAgIDIzMiwgMjE3LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxNiwgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTUsIDI0OCwgNTQsIDE2LCAKKyAgICAxOTMsIDY3LCAyMiwgMjE2LCAxNSwgMjIyLCAyNTQsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyMiwgMjUxLCAxODMsIDIyMiwgCisgICAgMjU0LCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMiwgMjUwLCA0MywgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAKKyAgICAyNTAsIDQzLCAyNDgsIDU0LCAxNiwgMTkzLCAxMjAsIDIyLCAyMDMsIDIsIDI1MCwgNDMsIDI0OCwgNTQsIDE2LCAxOTMsIAorICAgIDY3LCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgCisgICAgMTYsIDE5MywgMTIwLCAyMiwgMjAzLCAyLCAyMTUsIDIyNiwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyMTIsIDM1LCAKKyAgICAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIDIxMiwgMzUsIDI0OCwgNTQsIDE2LCAxOTMsIDEyMCwgMjIsIAorICAgIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjQxLCA1MSwgMjQ4LCA1NCwgMTYsIDE5MywgCisgICAgMTIwLCAyMiwgMjQxLCA1MSwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyMTYsIDE1LCAyMzMsIDUyLCAyNDgsIDU0LCAKKyAgICAxNiwgMTkzLCA2NywgMjIsIDI1MSwgMTgzLCAyMzMsIDUyLCA0MiwgMjQ0LCA0MCwgMjIzLCA1NywgODcsIDI0NSwgMTkwLCAKKyAgICA4NywgNjcsIDIzMiwgMjIwLCAyNDUsIDI5LCAyMzEsIDM4LCAyNTEsIDE1NCwgMjMxLCAzOCwgMjAwLCAxMTUsIDIxOSwgCisgICAgMjUyLCAyMzEsIDM4LCAyMTksIDI1MywgMTE1LCAyMzIsIDE0MywgMjMxLCAzOCwgMjAwLCAxMTUsIDExMywgMjE5LCAyMzksIAorICAgIDIzMSwgMzgsIDExMywgMjE5LCAyNDAsIDExNSwgMjMyLCAxNDMsIDIzMSwgMzgsIDExMywgMjE5LCAyNDAsIDIzNSwgNzAsIAorICAgIDIzMSwgMzgsIDIxNSwgMjA5LCAyMzEsIDM4LCAyMTYsIDIyNCwgMjMxLCAzOCwgMjI1LCAxOTEsIDI0NSwgMjMyLCAyNDIsIAorICAgIDEyOSwgMjQzLCAyMjYsIDIxNiwgMTUsIDIyNiwgNywgMjUxLCAxODMsIDIyNiwgNywgMjE2LCAxNSwgMjQ5LCAxMDcsIDEyNywgCisgICAgMjUxLCAxODMsIDI0OSwgMTA3LCAxMjcsIDIxNiwgMTUsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyNTEsIDE4MywgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDcxLCAyMTUsIDI0MCwgMjUyLCA0MywgMjIyLCAyMzcsIDIsIDI1MCwgNDMsIDIxOCwgMTIyLCAyNDQsIAorICAgIDcyLCAyNTUsIDI2LCAyNDksIDEwNCwgMjQ1LCAxNzksIDIzNSwgMjA1LCAyNDgsIDkxLCAyNDUsIDMyLCA4NywgODUsIDIyMiwgCisgICAgMjUwLCA1MiwgMjE1LCAyMjYsIDg1LCAyMzMsIDQ4LCA1MiwgMjE1LCAyMjYsIDg1LCAyMTQsIDE2MiwgNTIsIDIxNSwgMjI2LCAKKyAgICA4NSwgMjQ2LCAxMTMsIDUyLCAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCA1MiwgMjE1LCAyMjcsIDIsIDY3LCAxMzAsIDg1LCAKKyAgICAyMzMsIDQ4LCA1MiwgMjE1LCAyMjcsIDIsIDY3LCAxMzAsIDg1LCAyMjIsIDI1MCwgMjE1LCAyMjcsIDIsIDUyLCA2NywgCisgICAgMTMwLCAyNTQsIDE4MiwgMjUwLCAxMSwgMjE4LCAxMjgsIDIxNiwgODcsIDI1MCwgMTEsIDI0MCwgMjQ0LCAyLCAyNDQsIDU4LCAKKyAgICAyMjEsIDI0MywgMTYsIDMxLCAyMjcsIDIwNiwgMTYsIDMxLCAyMTgsIDE1NCwgNjQsIDI0MSwgMjQwLCAxNiwgMzEsIDIxOCwgCisgICAgMTU0LCA2NCwgMjE2LCAyMTMsIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMTYsIDIxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIAorICAgIDIxNSwgMjQ0LCAxNiwgMzEsIDI0NSwgMTQwLCAxNiwgMzEsIDI1NSwgMTYsIDE2LCAzMSwgMjUyLCA1MiwgMTYsIDMxLCAKKyAgICAyNTIsIDE4NywgMTYsIDMxLCAyMDMsIDIxNywgOTAsIDE2LCAzMSwgMjMyLCAyMjAsIDI0NCwgMTUzLCAxNiwgMzEsIDY3LCAKKyAgICAyMTcsIDkwLCAxNiwgMzEsIDI0NCwgMjgsIDI0NCwgMTUzLCAxNiwgMzEsIDI1MCwgMjM4LCAyMjMsIDU2LCAxNiwgMzEsIAorICAgIDIyMCwgMzAsIDIyNiwgMTM0LCAxNiwgMzEsIDIyMCwgMzAsIDIzNiwgNiwgMTYsIDMxLCAyNDgsIDE1OSwgMjMyLCAyMTAsIAorICAgIDI0NSwgODUsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDExMSwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTA1LCAKKyAgICAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxNTgsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDE2MSwgMTYsIDMxLCAKKyAgICAxNTIsIDI1NSwgMTYsIDE2LCAzMSwgMjE3LCAxNzgsIDIzNiwgNjksIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMTUsIDI0NSwgCisgICAgMjUxLCAyMjEsIDE2LCAzMSwgMjUxLCAxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIzMSwgODYsIDE2LCAzMSwgMjE4LCAKKyAgICA2MiwgMTYsIDMxLCAyNDUsIDg1LCAxNiwgMzEsIDI0NCwgMTE1LCAyMjAsIDEzOSwgMTYsIDMxLCAyNDIsIDEyOCwgMjIwLCAKKyAgICAxMzksIDE2LCAzMSwgMjIzLCAxMjQsIDIyMCwgMTM5LCAxNiwgMzEsIDIxNCwgMTc0LCAyMjAsIDEzOSwgMTYsIDMxLCAyMTksIAorICAgIDIwLCAxNiwgMzEsIDI0OCwgNzEsIDI1MSwgMjI0LCA4NywgMjA0LCAyNTEsIDE3MSwgMTYsIDMxLCAyMjksIDkwLCAxNiwgCisgICAgMzEsIDI0OCwgNzIsIDI0NCwgMjgsIDEwNSwgMTYsIDMxLCAyMTgsIDYzLCAyNDQsIDI4LCAxMDUsIDIyNiwgMjQ1LCAxMDMsIAorICAgIDIyNiwgMjQ1LCAyNTAsIDE2MCwgMjI2LCAyNDUsIDI0NCwgMzEsIDIyNiwgMjQ1LCAyMzUsIDIwMCwgMjQ0LCAzMSwgMjI2LCAKKyAgICAyNDUsIDI1MiwgNTAsIDI1MSwgMTMyLCAyMjYsIDI0NSwgMjUxLCAxNzgsIDIxNiwgMTEyLCAyMjYsIDI0NSwgMjUxLCAxNjMsIAorICAgIDI1MiwgMTU0LCAyNDAsIDExMCwgMjI2LCAyNDUsIDI1NCwgMTM1LCA2NCwgMjUwLCAxMzcsIDIyNiwgMjQ1LCAyNDgsIDE2NCwgCisgICAgMjI2LCAyNDUsIDI0OSwgOTUsIDI1NSwgMjAsIDIyNywgMjA0LCAyMjYsIDI0NSwgNTIsIDI1MiwgMTg4LCAzNywgMjEsIAorICAgIDExMSwgMzcsIDIxLCAxMDUsIDM3LCAyMSwgMTU4LCAzNywgMjEsIDE2MSwgMzcsIDIxLCAxOTAsIDM3LCAyMSwgMTk1LCAzNywgCisgICAgMjEsIDE5OSwgMzcsIDIxLCAxOTYsIDM3LCAyMSwgMjAxLCAzNywgNTQsIDIxNiwgMjQ4LCAzNywgNTQsIDI0NSwgMTc1LCAKKyAgICAzNywgNTQsIDIxNSwgNzYsIDM3LCA1NCwgMjE2LCAxNjUsIDM3LCA1NCwgMjQ0LCAxMywgMzcsIDU0LCAyNDQsIDEyNiwgMzcsIAorICAgIDU0LCAyMTksIDEyMSwgMzcsIDU0LCAyMjAsIDEyMSwgMzcsIDU0LCAyNDUsIDE5OCwgMzcsIDU0LCAyMjgsIDIwMiwgMzcsIAorICAgIDU0LCAyMTUsIDczLCA4OCwgMjEsIDExMSwgODgsIDIxLCAxMDUsIDg4LCAyMSwgMTU4LCA4OCwgMjEsIDE2MSwgODgsIDIxLCAKKyAgICAxOTAsIDg4LCAyMSwgMTk1LCA4OCwgMjEsIDE5OSwgODgsIDIxLCAxOTYsIDg4LCAyMSwgMjAxLCA4OCwgNTQsIDIxNiwgCisgICAgMjQ4LCA4OCwgNTQsIDI0NSwgMTc1LCA4OCwgNTQsIDIxNSwgNzYsIDg4LCA1NCwgMjE2LCAxNjUsIDg4LCA1NCwgMjQ0LCAKKyAgICAxMywgODgsIDU0LCAyNDQsIDEyNiwgODgsIDU0LCAyMTksIDEyMSwgODgsIDU0LCAyMjAsIDEyMSwgODgsIDU0LCAyNDUsIAorICAgIDE5OCwgODgsIDU0LCAyMjgsIDIwMiwgODgsIDU0LCAyMTUsIDczLCAyMSwgMTIzLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAKKyAgICAxMTMsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDEzNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ0LCAxOSwgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ0LCA4OSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjE5LCAxMjcsIDI0MywgMjM2LCAKKyAgICAyMTgsIDEzMSwgMjEsIDIyMCwgMTI0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDUsIDIwMSwgMjQzLCAyMzYsIDIxOCwgCisgICAgMTMxLCAyMSwgMjI4LCAyMDUsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIxNiwgMjQ5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIAorICAgIDU0LCAyNDUsIDE3NiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjE1LCA3NywgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgCisgICAgMjE2LCAxNjYsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NCwgMTQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NCwgCisgICAgMTI3LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTksIDEyMiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjIwLCAxMjIsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDI0NSwgMTk5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMjgsIDIwMywgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCA1NCwgMjE1LCA3NCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA4OCwgNywgNCwgMSwgNjEsIDg4LCA3LCAKKyAgICA0LCAxLCAyNTMsIDE2NiwgODgsIDcsIDQsIDEsIDI1MSwgNzQsIDg4LCA3LCA0LCAxLCAyNDksIDY4LCA4OCwgNywgNCwgMSwgCisgICAgNzYsIDg4LCA3LCA0LCAxLCAyNDUsIDE0LCA4OCwgNywgNCwgMSwgMjQzLCAyMDksIDg4LCA3LCA0LCAxLCAyNDIsIDY3LCAKKyAgICA4OCwgNywgNCwgMSwgNzQsIDg4LCA3LCA0LCAxLCAyMzUsIDE1MCwgODgsIDcsIDQsIDEsIDIzNSwgMjksIDg4LCA3LCA0LCAKKyAgICAxLCAxNTYsIDg4LCA3LCA0LCAxLCAxOTQsIDg4LCA3LCA0LCAxLCAyMzAsIDMwLCA4OCwgNywgNCwgMSwgNzgsIDg4LCA3LCAKKyAgICA0LCAxLCAyMjYsIDEwOSwgODgsIDcsIDQsIDEsIDIyNCwgOTksIDg4LCA3LCA0LCAxLCAxNTMsIDg4LCA3LCA0LCAxLCAyMjIsIAorICAgIDkzLCA4OCwgNywgNCwgMSwgMjE3LCAxNTMsIDg4LCA3LCA0LCAxLCA2OSwgODgsIDcsIDQsIDEsIDIxNCwgMTA1LCA4OCwgNywgCisgICAgNCwgMSwgMjEyLCA5OCwgODgsIDcsIDQsIDEsIDIxMSwgMTc4LCA4OCwgNywgNCwgMSwgMjExLCAxMTcsIDg4LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMzcsIDcsIDYsIDEsIDYxLCAzNywgNywgNiwgMSwgMjUzLCAxNjYsIDM3LCA3LCA2LCAxLCAyNTEsIDc0LCAKKyAgICAzNywgNywgNiwgMSwgMjQ5LCA2OCwgMzcsIDcsIDYsIDEsIDc2LCAzNywgNywgNiwgMSwgMjQ1LCAxNCwgMzcsIDcsIDYsIDEsIAorICAgIDI0MywgMjA5LCAzNywgNywgNiwgMSwgMjQyLCA2NywgMzcsIDcsIDYsIDEsIDc0LCAzNywgNywgNiwgMSwgMjM1LCAxNTAsIAorICAgIDM3LCA3LCA2LCAxLCAyMzUsIDI5LCAzNywgNywgNiwgMSwgMTU2LCAzNywgNywgNiwgMSwgMTk0LCAzNywgNywgNiwgMSwgCisgICAgMjMwLCAzMCwgMzcsIDcsIDYsIDEsIDc4LCAzNywgNywgNiwgMSwgMjI2LCAxMDksIDM3LCA3LCA2LCAxLCAyMjQsIDk5LCAKKyAgICAzNywgNywgNiwgMSwgMTUzLCAzNywgNywgNiwgMSwgMjIyLCA5MywgMzcsIDcsIDYsIDEsIDIxNywgMTUzLCAzNywgNywgNiwgCisgICAgMSwgNjksIDM3LCA3LCA2LCAxLCAyMTQsIDEwNSwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDM3LCA3LCA2LCAxLCAyMTEsIAorICAgIDE3OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAzNywgNywgNiwgMSwgMjEwLCAxNTksIDM3LCA3LCA0LCAxLCA2MSwgMzcsIAorICAgIDcsIDQsIDEsIDI1MywgMTY2LCAzNywgNywgNCwgMSwgMjUxLCA3NCwgMzcsIDcsIDQsIDEsIDI0OSwgNjgsIDM3LCA3LCA0LCAKKyAgICAxLCA3NiwgMzcsIDcsIDQsIDEsIDI0NSwgMTQsIDM3LCA3LCA0LCAxLCAyNDMsIDIwOSwgMzcsIDcsIDQsIDEsIDI0MiwgNjcsIAorICAgIDM3LCA3LCA0LCAxLCA3NCwgMzcsIDcsIDQsIDEsIDIzNSwgMTUwLCAzNywgNywgNCwgMSwgMjM1LCAyOSwgMzcsIDcsIDQsIAorICAgIDEsIDE1NiwgMzcsIDcsIDQsIDEsIDE5NCwgMzcsIDcsIDQsIDEsIDIzMCwgMzAsIDM3LCA3LCA0LCAxLCA3OCwgMzcsIDcsIAorICAgIDQsIDEsIDIyNiwgMTA5LCAzNywgNywgNCwgMSwgMjI0LCA5OSwgMzcsIDcsIDQsIDEsIDE1MywgMzcsIDcsIDQsIDEsIDIyMiwgCisgICAgOTMsIDM3LCA3LCA0LCAxLCAyMTcsIDE1MywgMzcsIDcsIDQsIDEsIDY5LCAzNywgNywgNCwgMSwgMjE0LCAxMDUsIDM3LCA3LCAKKyAgICA0LCAxLCAyMTIsIDk4LCAzNywgNywgNCwgMSwgMjExLCAxNzgsIDM3LCA3LCA0LCAxLCAyMTEsIDExNywgMzcsIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAzNywgMjEsIDIxMCwgODYsIDE1MiwgMzcsIDU0LCAyNDUsIDE3NSwgMTUyLCAzNywgNTQsIDIxNSwgNzYsIAorICAgIDE1MiwgMzcsIDU0LCAyMTYsIDE2NSwgMTUyLCAzNywgNTQsIDI0NCwgMTMsIDE1MiwgMzcsIDU0LCAyNDQsIDEyNiwgMTUyLCAKKyAgICAzNywgNTQsIDIxOSwgMTIxLCAxNTIsIDM3LCA1NCwgMjIwLCAxMjEsIDE1MiwgMzcsIDU0LCAyNDUsIDE5OCwgMTUyLCAzNywgCisgICAgNTQsIDIyOCwgMjAyLCAxNTIsIDM3LCA1NCwgMjE1LCA3MywgNTIsIDM3LCAyMSwgMTExLCA1MiwgMzcsIDIxLCAxMDUsIDUyLCAKKyAgICAzNywgMjEsIDE1OCwgNTIsIDM3LCAyMSwgMTYxLCA1MiwgMzcsIDIxLCAxOTAsIDUyLCAzNywgMjEsIDE5NSwgNTIsIDM3LCAKKyAgICAyMSwgMTk5LCA1MiwgMzcsIDIxLCAxOTYsIDUyLCAzNywgMjEsIDIwMSwgNTIsIDM3LCA1NCwgMjE2LCAyNDgsIDE1MiwgMzcsIAorICAgIDIxLCAyMTAsIDg2LCA5MywgOTksIDE5MywgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAKKyAgICAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIxMywgMjM5LCA5MywgOTksIDE5MywgMjE1LCAyMTIsIDI0OCwgMTY1LCAyNDEsIAorICAgIDUxLCA5MywgOTksIDExNCwgMjE1LCAyMTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDE5MywgMjE1LCAyMTIsIDI0OCwgCisgICAgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIxNSwgMjEyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAKKyAgICAyMjQsIDI3LCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDIyNCwgMjcsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgCisgICAgOTksIDE5MywgMjI0LCAyNywgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjI0LCAyNywgMjQ4LCAxNjUsIAorICAgIDIxMywgMjM5LCA5MywgOTksIDE5MywgMTI0LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0NCwgMjQxLCAKKyAgICAyMjgsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMjIsIDI1NCwgCisgICAgOTMsIDk5LCAxOTMsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgMTI0LCAxMTQsIDIyLCA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIAorICAgIDE5MywgMTIwLCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCA0NCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKKyAgICAxMTQsIDIyLCA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDEyMCwgCisgICAgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAKKyAgICA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDE5MywgNjcsIDIyLCAyMjIsIAorICAgIDI1NCwgOTMsIDk5LCA2NywgMTkzLCAyMiwgNDQsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDEyNCwgCisgICAgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTE0LCAyMiwgCisgICAgNDQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxOTMsIAorICAgIDIyLCA0NCwgMTI0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCA2NywgCisgICAgMjIsIDIzMywgNTIsIDkzLCA5OSwgNjcsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQzLCAKKyAgICAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDExNCwgCisgICAgMjIsIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQzLCAxMjAsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTkzLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCAKKyAgICAxMjQsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgCisgICAgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIAorICAgIDEyNCwgMTE0LCAyMiwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTkzLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgNDMsIDE5MywgMjIsIDQ0LCAxMjQsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjQxLCA1MSwgOTMsIAorICAgIDk5LCAxOTMsIDEyMCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgCisgICAgOTksIDQ0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDIwMywgMjQxLCAyMjgsIAorICAgIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgMTIwLCAyNDEsIAorICAgIDIyOCwgOTMsIDk5LCA0MywgMTkzLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyNDEsIAorICAgIDUxLCA5MywgOTksIDE5MywgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgNjcsIDIzMiwgMjM2LCAKKyAgICA5MywgOTksIDQ0LCAxMTQsIDIyLCA0MywgNjcsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxOTMsIDIyLCAyMDMsIDI0MSwgCisgICAgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgMTI0LCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgMTIwLCAKKyAgICAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQzLCAxMjAsIDExNCwgCisgICAgMjIsIDQ0LCAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxMjAsIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjM2LCA5MywgCisgICAgOTksIDQzLCAxMjQsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxMjQsIDExNCwgMjIsIDQzLCAKKyAgICAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgMTIwLCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTkzLCAyMiwgMTI0LCAyMDMsIDI0MSwgMjI4LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgNjcsIDI0MSwgMjI4LCA5MywgCisgICAgOTksIDQzLCAxOTMsIDIyLCA0NCwgNjcsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIAorICAgIDE5MywgNTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIAorICAgIDE5MywgNTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgCisgICAgNTIsIDI0MSwgNTEsIDkzLCA5OSwgNTIsIDIxMywgMjM5LCA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjQsIDUyLCAyMiwgNDMsIDIxOSwgCisgICAgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyMCwgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTIwLCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjAsIDUyLCAyMiwgNDMsIDIxOSwgCisgICAgMTU2LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDY3LCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAorICAgIDEyMSwgOTMsIDk5LCA2NywgNTIsIDIyLCA0NCwgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjIyLCAyNTQsIDkzLCAKKyAgICA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDY3LCA1MiwgMjIsIDQzLCAyMTksIDE1NiwgOTMsIAorICAgIDk5LCA1MiwgNjcsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgCisgICAgOTksIDEyNCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyNDEsIDUxLCA5MywgOTksIAorICAgIDEyMCwgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgOTksIDEyMCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgCisgICAgOTksIDUyLCAxMjAsIDIyLCAyNDEsIDUxLCA5MywgOTksIDY3LCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCAKKyAgICA5OSwgNjcsIDUyLCAyMiwgMjAzLCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyNDEsIDUxLCA5MywgOTksIDE5MywgCisgICAgMjU0LCAzNCwgMTI0LCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAyNTQsIDM0LCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgCisgICAgOTksIDE5MywgMjU0LCAzNCwgMTIwLCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIDI1NCwgMzQsIDEyMCwgMjIsIDIyMiwgCisgICAgMjU0LCA5MywgOTksIDE5MywgMjQ4LCA3LCAyMTQsIDE2MCwgNDQsIDIxNiwgNDMsIDIzMiwgMTE0LCAyMzMsIDUyLCA5MywgCisgICAgOTksIDE5MywgMjQ4LCA3LCAyMTQsIDE2MCwgNDMsIDIxNiwgNDMsIDIzMiwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIAorICAgIDI0OCwgNywgMjQ5LCAxMzgsIDkzLCA5OSwgMTkzLCAyMzMsIDUyLCA5MywgOTksIDE5MywgMjE0LCAxNjMsIDkzLCA5OSwgCisgICAgMTkzLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDI0NiwgMTE0LCA5MywgOTksIDExNCwgMjMzLCA1MiwgOTMsIDk5LCAxMTQsIAorICAgIDIxNCwgMTYzLCA5MywgOTksIDExNCwgMjIyLCAyNTQsIDkzLCA5OSwgMTE0LCAyNDYsIDExNCwgOTMsIDk5LCAxOTMsIDQzLCAKKyAgICAyMiwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDEyMCwgMjIsIDExNCwgMjQ2LCAxMTQsIDkzLCA5OSwgMTE0LCA0MywgCisgICAgMjIsIDE5MywgMjIyLCAyNTQsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAxOTMsIDI0NiwgMTE0LCAyMTQsIDE2MCwgMTYzLCAKKyAgICAyNTEsIDIyMSwgMjMyLCAxMTQsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTIzLCAyMjQsIDI1LCAyNTEsIAorICAgIDIyMSwgMjMyLCAxMTQsIDEzNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTYzLCAyNTEsIDIyMSwgMjMyLCAKKyAgICAxMTQsIDI0NCwgODksIDI0NSwgMTk1LCAyNTEsIDIyMSwgMjMyLCAxMTQsIDEzNCwgMjI0LCAyMywgMjUxLCAyMjEsIDIzMiwgCisgICAgMTE0LCAyMjAsIDEyNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyNDMsIDIzNiwgMjUxLCAyMjEsIDQzLCAyMjAsIDEyNCwgMjQ1LCAKKyAgICAxOTUsIDI1MSwgMjIxLCA0MywgMTM0LCAyMjQsIDIzLCAyNTEsIDIyMSwgNDMsIDI0NCwgODksIDI0NSwgMTk1LCAyNTEsIAorICAgIDIyMSwgNDMsIDE2MywgMjUxLCAyMjEsIDQzLCAxMzQsIDI0NSwgMTk1LCAyNTEsIDIyMSwgNDMsIDEyMywgMjI0LCAyNSwgCisgICAgMjUxLCAyMjEsIDQzLCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgNDQsIDE2MywgMjUxLCAyMjEsIDE5MywgMjIwLCA5NCwgCisgICAgMjMxLCA4NywgMjIwLCA5NCwgMjQ4LCAxNzAsIDIyMCwgOTQsIDIxNCwgMTYwLCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgCisgICAgNDQsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAyMjQsIDI5LCAyMzIsIDExNCwgMjMzLCA1MiwgMjI0LCAyOSwgMjMyLCAKKyAgICAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgMjMzLCA1MiwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgCisgICAgMjMyLCAxMTQsIDQzLCAyMiwgMjMyLCAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMzIsIAorICAgIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCAKKyAgICAyMzMsIDUyLCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgMjIyLCAyNTQsIAorICAgIDIyNCwgMjksIDIxNCwgMTYwLCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIDIzMywgCisgICAgNTIsIDIyNCwgMjksIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCA0MywgMjIsIDIzMiwgMTE0LCAyMjIsIDI1NCwgODUsIAorICAgIDIxOCwgMjM2LCA3MSwgMjE4LCAyMzYsIDcxLCA0MiwgMiwgMjIyLCAxODUsIDI0OSwgMTY3LCA3MSwgNDIsIDI0OSwgMTk1LCAKKyAgICA4NSwgNCwgMjE4LCAyMzYsIDQyLCAyLCAyMDMsIDI0NCwgMTEzLCA0MiwgMiwgNjcsIDI0NCwgMTEzLCA0MiwgMiwgMjI2LCAKKyAgICAxNDgsIDI0OSwgMTM0LCAyNDQsIDExMywgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjE2LCA0MywgMjMyLCAxMTQsIDQ0LCAyNDQsIAorICAgIDExMywgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjE2LCA0MywgMjMyLCAxMTQsIDQzLCAyNDQsIDExMywgNDIsIDIsIDI0OCwgNywgCisgICAgMjQ5LCAxMzQsIDI0NCwgMTEzLCA4NSwgNCwgMjE4LCAyMzYsIDcxLCA0LCAyMTgsIDIzNiwgODUsIDIyMywgMTE5LCA3MSwgCisgICAgMjIzLCAxMTksIDg1LCA2NywgMjIzLCAxMTksIDcxLCA2NywgMjIzLCAxMTksIDg1LCAyMjYsIDEwLCA3MSwgMjI2LCAxMCwgCisgICAgODUsIDIxNCwgMTYyLCAyMTUsIDIyNiwgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNiwgODUsIDIxNCwgMTYyLCA0LCAyMTUsIAorICAgIDIyNiwgNzEsIDIxNCwgMTYyLCA0LCAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCAyMTUsIDIyNiwgNzEsIDIyMiwgMjUwLCAKKyAgICAyMTUsIDIyNiwgODUsIDIyMiwgMjUwLCA0LCAyMTUsIDIyNiwgNzEsIDIyMiwgMjUwLCA0LCAyMTUsIDIyNiwgODUsIDIyMiwgCisgICAgMjUwLCAyMjUsIDExLCA3MSwgMjIyLCAyNTAsIDIyNSwgMTEsIDg1LCAyNDYsIDExMywgMjE1LCAyMjYsIDcxLCAyNDYsIAorICAgIDExMywgMjE1LCAyMjYsIDg1LCAyNDYsIDExMywgNCwgMjE1LCAyMjYsIDcxLCAyNDYsIDExMywgNCwgMjE1LCAyMjYsIDg1LCAKKyAgICAyMzMsIDQ4LCAyMTUsIDIyNiwgNzEsIDIzMywgNDgsIDIxNSwgMjI2LCA4NSwgMjMzLCA0OCwgNCwgMjE1LCAyMjYsIDcxLCAKKyAgICAyMzMsIDQ4LCA0LCAyMTUsIDIyNiwgODUsIDIzMywgNDgsIDIyNSwgMTEsIDcxLCAyMzMsIDQ4LCAyMjUsIDExLCA4NSwgCisgICAgMjQ4LCAwLCA3MSwgMjQ4LCAwLCA3MSwgMjQ4LCAxLCAyNDksIDE5NSwgODUsIDQsIDI0OCwgMCwgMjQ0LCA5NywgMjMyLCAKKyAgICAxMTAsIDcxLCAyNTAsIDQzLCAyNDYsIDEyNiwgMjUwLCA0MywgMjUwLCA0NCwgMiwgNjcsIDI0NCwgMTEzLCAyNTEsIDExOSwgCisgICAgODUsIDI1MCwgNDMsIDI1MCwgNDQsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCA0NCwgMTYzLCAyNTEsIAorICAgIDIyOSwgMjUwLCA0NCwgMiwgMjMyLCAxMTQsIDE2MywgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNTAsIDQ0LCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjksIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCAyNTQsIDE2NCwgCisgICAgMjUxLCA5NiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI5LCAyNTEsIDIyOSwgNDMsIDE2MywgODUsIDI1MCwgNDMsIDQ0LCAxNjMsIAorICAgIDg1LCAyNTAsIDQzLCAyMzUsIDIwMSwgMjUxLCAxMjEsIDIzNSwgMjAxLCA3MSwgMjUwLCA0MywgMjE0LCAxNjAsIDE2MywgCisgICAgMjM1LCAyMDEsIDcxLCAyNTAsIDQzLCAyMzIsIDExNCwgMTYzLCAyMzUsIDIwMSwgNzEsIDI1MCwgNDMsIDIxNCwgMTYwLCAKKyAgICA0MywgMjI0LCAyOSwgMjUwLCA0MSwgMjU0LCAzMywgMjE0LCAxNjAsIDQ0LCAyMjQsIDI5LCAyNTAsIDQxLCAyNTQsIDMzLCAKKyAgICAyMzIsIDExNCwgNDQsIDIyNCwgMjksIDI1MCwgNDEsIDI1NCwgMzMsIDIzMiwgMTE0LCA0MywgMjI0LCAyOSwgMjUwLCA0MSwgCisgICAgMjU0LCAzMywgMjE0LCAxNjAsIDE2MywgMjUwLCA0MywgMjMyLCAxMTQsIDE2MywgMjUwLCA0MywgODUsIDIzMiwgMTE0LCAKKyAgICA0NCwgMjE1LCAyMjYsIDg1LCAyMzIsIDExNCwgNDMsIDIxNSwgMjI2LCA4NSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNiwgODUsIAorICAgIDIxNCwgMTYwLCA0NCwgMjE1LCAyMjYsIDcxLCAyNTEsIDEyMSwgNDIsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgCisgICAgNDQsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAyMTQsIDE2MCwgNDMsIDI0OCwgNywgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCA3MSwgNDIsIDIsIDY3LCAyNTEsIDI0MCwgMjMyLCAyMTksIAorICAgIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDI0NywgMTI4LCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDQzLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyMTQsIDE2MiwgMjE1LCAyMjcsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCAyMzMsIDkxLCAyNTAsIDQzLCA3MSwgNDIsIAorICAgIDIsIDIxNCwgMTYwLCA0MywgMjI0LCAyOCwgNzEsIDQyLCAyLCAyMzIsIDExNCwgNDMsIDIyNCwgMjgsIDcxLCA0MiwgMiwgCisgICAgMjMyLCAxMTQsIDQ0LCAyMjQsIDI4LCA3MSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIAorICAgIDIxNCwgMTYwLCA0MywgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIDIzMiwgMTE0LCA0MywgMjI0LCAyOCwgNzEsIDI1MCwgCisgICAgNDQsIDIsIDIzMiwgMTE0LCA0NCwgMjI0LCAyOCwgNzEsIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOCwgMjE0LCAKKyAgICAxNjAsIDQzLCAyMTUsIDIyNiwgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNiwgMjMyLCAxMTQsIDQzLCAyMTUsIDIyNiwgNzEsIAorICAgIDIzMSwgODcsIDIxOCwgMjM2LCA4NSwgMjMxLCA4NywgMjE4LCAyMzYsIDcxLCAyMzEsIDg3LCA0LCAyMTgsIDIzNiwgODUsIAorICAgIDIzMSwgODcsIDQsIDIxOCwgMjM2LCAyMzIsIDExNCwgNDQsIDIxNSwgMjI2LCA4NSwgMjE4LCAzOSwgMiwgMjIzLCAxMzUsIAorICAgIDI0OSwgMjU1LCAyMTQsIDE5NCwgMjE5LCA2MiwgMjQ5LCAyMzAsIDg1LCAyMTgsIDE1OCwgNzEsIDIxOCwgMTU4LCAyMzIsIAorICAgIDIzNCwgMjE2LCAxMzMsIDIxOCwgMzgsIDI1MywgMjQyLCAyMjgsIDc2LCAyNDgsIDQ2LCAyMjgsIDc2LCAyNDksIDIwMywgCisgICAgMjI2LCAxNjcsIDg1LCAyMTcsIDEsIDcxLCAyMTcsIDEsIDI1MiwgMTY0LCAyNTEsIDE3MSwgMjUyLCAxNjQsIDkzLCAyLCAKKyAgICAyNTAsIDEzNywgMjUyLCAxNjQsIDkzLCAyLCAyMTEsIDE3OCwgMjIyLCAwLCAyMTQsIDE5NSwgMiwgMjIzLCAxNjMsIDI0NiwgCisgICAgOTIsIDI0MCwgMjUwLCAyNTIsIDMwLCA3MSwgMjIwLCA0LCAyMjUsIDEwNCwgODUsIDIyMCwgNCwgMjI1LCAxMDQsIDIyMCwgCisgICAgODksIDIyMywgNTIsIDIyMiwgMTg5LCAyNDQsIDYzLCAyNDEsIDIzNSwgMjUxLCAxMjEsIDg1LCA0MywgMjI1LCAxMCwgMjM1LCAKKyAgICAyNDksIDg1LCA0NCwgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCA0MywgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCAxMjAsIDIyNSwgCisgICAgMTAsIDIzNSwgMjQ5LCA3MSwgNDQsIDIyNSwgMTAsIDIzNSwgMjQ5LCA3MSwgMTI0LCAyMjUsIDEwLCAyMzUsIDI0OSwgMjE5LCAKKyAgICAxMDMsIDIyLCAyNDksIDEzNywgMjUwLCAyMjcsIDUwLCAyMjMsIDE3NSwgNTAsIDI1MSwgMjQ3LCA1MCwgMjUxLCAzMywgCisgICAgMjU0LCAxMTAsIDIyNiwgMTQ5LCAyNDksIDEzOCwgMjUwLCAxMTksIDIyMywgNDAsIDI0OSwgMTM5LCA2NCwgMjMyLCAxMjQsIAorICAgIDI0OSwgMTM5LCA2NCwgMjM1LCAxMjIsIDIxOCwgMTU5LCAyMiwgMjQ5LCAxNDQsIDI0NCwgMTc2LCA4NywgMjU1LCAxLCAKKyAgICAyMjAsIDkxLCAyNDIsIDI5LCAyMiwgMjE5LCAxOTEsIDIyNSwgMjIzLCA4NywgMjEwLCAyNTQsIDIxMSwgNjksIDIxNSwgCisgICAgMjE2LCAzMSwgMjQxLCAyMzAsIDIxNSwgMjE2LCAzMSwgMjMzLCAxMTMsIDIxNSwgMjE2LCAzMSwgMjQ0LCAxMDQsIDIxNSwgCisgICAgMjE2LCAzMSwgMjE2LCAxMzQsIDIxNSwgMjE2LCAzMSwgMjExLCAyMzksIDIxNSwgMjE2LCAzMSwgMjEyLCA0MCwgMjE1LCAKKyAgICAyMTYsIDMxLCAyMzAsIDEyMCwgMjE1LCAyMTYsIDMxLCAyNDUsIDIzMSwgMjEyLCAxLCA2NCwgMjQ4LCAyNiwgNzEsIDI0MywgCisgICAgMjQ3LCAyNDQsIDE5OCwgNzEsIDIxOSwgNzYsIDI0NCwgMTk4LCA4NSwgMjE5LCA3NiwgMjQ0LCAxOTgsIDcxLCAyMTgsIDM5LCAKKyAgICAyLCAyMjMsIDEzNSwgMjQ0LCAxMDAsIDIyNCwgMjUsIDIzMCwgMTMzLCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzMywgCisgICAgMjMxLCA1OSwgMjQ0LCAxNDYsIDUwLCAyNDUsIDIzMSwgMjMxLCAxOTUsIDUwLCAyMzUsIDQ0LCAyMjEsIDIyMiwgMjE0LCAKKyAgICAxNDUsIDIyOSwgOTgsIDIyNSwgMjMsIDI1NCwgMjAsIDIxNywgNDEsIDI0MywgNTksIDI1MSwgMTEsIDIzMywgMjUsIDIxMywgCisgICAgMTUwLCAyMzIsIDI0NCwgMjIxLCAxOTMsIDIyMiwgMjEsIDI1MSwgMCwgMjU0LCA1MCwgMjI1LCA1NSwgNzEsIDI1MCwgMTI1LCAKKyAgICAyMzQsIDg0LCA3MSwgMjUwLCAxMjUsIDIyNCwgMTcsIDcxLCAyNTAsIDEyNSwgMjIyLCAxOTcsIDcxLCAyNTAsIDEyNSwgCisgICAgMjUxLCAyMzksIDcxLCAyNTAsIDEyNSwgMjM0LCAzNiwgNzEsIDI1MCwgMTI1LCAyMjUsIDIzNSwgODUsIDI1MCwgMTI1LCAKKyAgICAyMzQsIDg0LCA4NSwgMjUwLCAxMjUsIDIyNCwgMTcsIDg1LCAyNTAsIDEyNSwgMjIyLCAxOTcsIDg1LCAyNTAsIDEyNSwgCisgICAgMjUxLCAyMzksIDg1LCAyNTAsIDEyNSwgMjM0LCAzNiwgODUsIDI1MCwgMTI1LCAyMjUsIDIzNSwgODUsIDIxOSwgMTgsIAorICAgIDIxOCwgNTEsIDcxLCAyNDEsIDIzNSwgMjE4LCA1MSwgNzEsIDI0OCwgMSwgMjE4LCA1MSwgODUsIDI0OSwgMjUzLCAyMTgsIAorICAgIDUxLCA3MSwgMjE5LCAxOCwgMjE4LCA1MSwgODUsIDI0MSwgMjM1LCAyMTgsIDUxLCA4NSwgMjQ4LCAxLCAyMTgsIDUxLCA3MSwgCisgICAgMjQ5LCAyNTMsIDIxOCwgNTEsIDI0MCwgMjUwLCAyMTgsIDI0MCwgMjI0LCAyNSwgMjI4LCA1MiwgMjQ1LCAxOTcsIDIyOCwgCisgICAgNTIsIDI1MiwgODEsIDI0NSwgMTk3LCAyMjgsIDQ3LCAyNTIsIDgxLCAyMTksIDEyMCwgMjI4LCA0NywgMjMwLCA2MiwgMjQ0LCAKKyAgICA3NCwgNTAsIDIzMCwgNjIsIDIyOSwgMTkzLCA1MCwgMjMwLCA2MiwgMjIwLCA3OCwgNTAsIDIxMiwgOSwgMTgzLCAyNDksIAorICAgIDEzOCwgMjQ1LCAyMjgsIDE4MywgMjQ5LCAxMzgsIDIxNCwgMTcxLCAyMjMsIDExNSwgODcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDgsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDcsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDYsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDUsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDQsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDIxNSwgNDMsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIAorICAgIDIxNSwgNDIsIDIyNSwgMzcsIDIyMywgMTE1LCAxNiwgMzEsIDI0MywgNTcsIDIzMSwgMTQzLCA4NSwgMjE0LCAxNzEsIDIyMywgCisgICAgMTE1LCA4NywgMjIzLCAxMTYsIDIyNiwgMjQsIDg3LCAyMjYsIDAsIDIyNiwgMjQsIDg3LCAyMjUsIDE3NywgMjI2LCAyNCwgCisgICAgNTAsIDIxMSwgMjU1LCA4NywgMjQ3LCAyNDksIDI0NCwgMTk3LCAyNDcsIDI0OSwgMjQ0LCAxOTYsIDI0NywgMjQ5LCAyNDQsIAorICAgIDE5NSwgMjQ3LCAyNDksIDI0NCwgMTk0LCAyNDcsIDI0OSwgMjQ0LCAxOTMsIDI0NywgMjQ5LCAyNDQsIDE5MiwgNzEsIDI1MCwgCisgICAgNDQsIDIsIDU5LCAyMjIsIDI1NCwgNzEsIDI1MCwgNDQsIDIsIDExMywgMjQ3LCAxMjYsIDg1LCAyNTAsIDQ0LCAyLCA3MSwgCisgICAgNTksIDIyMiwgMjU0LCA4NSwgMjUwLCA0NCwgMiwgMTEzLCA3MSwgMjQ3LCAxMjYsIDIzMCwgMTQ3LCAzMSwgMjExLCA2OSwgCisgICAgMjMwLCAxNDcsIDMxLCAyMTAsIDI1MywgMjQ3LCAyMzIsIDMxLCAyNDIsIDEzOCwgMjExLCA2OSwgMjQ3LCAyMzIsIDMxLCAKKyAgICAyMzMsIDE5LCAyMTAsIDI1MywgMjQ3LCAyMzIsIDMxLCAyMzMsIDE5LCAyMTEsIDY5LCAyNDcsIDIzMiwgMzEsIDI0MiwgCisgICAgMTM4LCAyMTAsIDI1MywgNzEsIDI0NCwgODEsIDg1LCAyNDQsIDgxLCAyNDIsIDI5LCAyMiwgMjI1LCAxMDcsIDI1NCwgMTI4LCAKKyAgICAyNDksIDEzNiwgMjE3LCAyMzYsIDIxOCwgMTY2LCA2NCwgMjU0LCAyMzUsIDIyMSwgMjA4LCAyNTQsIDE3OCwgMjQ0LCA1OSwgCisgICAgMjQzLCA2NywgMjE4LCAxNjYsIDY0LCAyNDEsIDIwOSwgMjUzLCAyMDcsIDg3LCAyNDQsIDcwLCAyMjYsIDEzMCwgNzEsIAorICAgIDIxOCwgMTU4LCAxMzQsIDIzMiwgMjE0LCAyNDksIDE4MywgMjIyLCAyNTQsIDEzNCwgMjMyLCAyMTQsIDI0OSwgMTgzLCAKKyAgICAyMzMsIDUyLCAyMTIsIDUwLCA1MCwgMTI1LCAyMTMsIDEzMCwgNTAsIDI0NiwgMTE4LCAyNDQsIDE0NiwgNTAsIDI0NiwgCisgICAgMTE4LCAyMzEsIDE5NSwgNTAsIDIzNSwgMjEwLCAyNDQsIDE0NiwgMjIsIDIzMSwgMTk1LCA1MCwgMjMxLCAxOTUsIDIyLCAKKyAgICAyNDQsIDE0NiwgNTAsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgNTAsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgMjIsIDIzMSwgCisgICAgMTk1LCAyMiwgMjQ0LCAxNDYsIDUwLCA2NywgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCA1MCwgMjAzLCAyMzEsIDE5NSwgMiwgCisgICAgMjE4LCAxMDUsIDUwLCAyMzEsIDg3LCA3MSwgMjUwLCA0MywgMjMxLCA4NywgODUsIDI1MCwgNDMsIDIzMSwgODcsIDQsIDcxLCAKKyAgICAyNTAsIDQzLCAyMzEsIDE1OCwgODcsIDI0NywgMTc1LCA4NywgMjE0LCAxNjksIDIyNSwgMjU1LCA4NywgMjQ5LCAyMzksIAorICAgIDI0MywgMjMxLCAyMTQsIDE0MSwgMjI5LCA5MywgMjUwLCAxNjksIDIyNiwgNjUsIDIzNSwgNTAsIDIxMywgMTg1LCAyNTAsIAorICAgIDEwMSwgODUsIDIzMCwgMTM0LCAyMzIsIDIzMSwgMjIwLCAxMTQsIDIyMCwgMTQ5LCAyMjQsIDgsIDIyMCwgMTMyLCAyMTksIAorICAgIDU3LCAyNTIsIDE2NywgMjUyLCAxMzQsIDkyLCAyMzQsIDE0NCwgNzEsIDI0NiwgMTAxLCAyMzEsIDE5MCwgNzEsIDI0NiwgCisgICAgMTAxLCAyMzQsIDg0LCA4NSwgMjQ2LCAxMDEsIDIzMSwgMTkwLCA4NSwgMjQ2LCAxMDEsIDIzNCwgODQsIDIxOSwgNjMsIAorICAgIDIxMSwgMjMwLCAyMTksIDY2LCAyMTgsIDM5LCAyNTIsIDU5LCAyNDksIDI1NSwgMjIzLCAxNjIsIDg1LCAyMTksIDYyLCAKKyAgICAyMTYsIDEzNSwgMjUwLCAwLCAyMiwgMjIzLCAxNjIsIDIxNSwgOTQsIDcxLCAyMjAsIDQsIDIyNSwgMTA0LCAyMTUsIDk0LCAKKyAgICA4NSwgMjIwLCA0LCAyMjUsIDEwNCwgNzEsIDI0OCwgMSwgMjM2LCA3LCAyMTgsIDIzNiwgMjQ5LCAxMzMsIDIzMywgOTcsIAorICAgIDI0NywgMjAxLCAyNTAsIDI1MiwgMjI2LCAxNzAsIDIyNSwgMTA3LCAyNTAsIDI1MywgMjE5LCA5MCwgMjQxLCAyMTksIDIsIAorICAgIDcxLCAyNDksIDEzOCwgMzcsIDI0OSwgMTMzLCAyMzMsIDk3LCAyNTAsIDE2MSwgMjI4LCA4MCwgMjQ1LCAxMzIsIDI1NCwgCisgICAgMTQ5LCAyMjYsIDE5NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCA4NSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCAKKyAgICA3MSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUyLCA4NSwgNDMsIDIzMywgOTgsIDIzMSwgNTgsIDcxLCA0MywgCisgICAgMjMzLCA5OCwgMjMxLCA1OCwgMjQ2LCA5NywgMjE5LCA4NCwgNTAsIDExNCwgNzEsIDI0NiwgMTEzLCAyMTUsIDIyNiwgNDMsIAorICAgIDI1MCwgOCwgMjQ1LCAxMzIsIDkyLCAyMjIsIDAsIDI0NCwgMTgzLCAyNDgsIDcsIDIzNiwgNywgNzEsIDI1MCwgNDQsIDIzNiwgCisgICAgNywgODUsIDIxOCwgMjM2LCA4NSwgMjE1LCAxOTMsIDIyMywgNjMsIDQzLCAyNDUsIDEzMSwgMjIzLCA2MywgNDMsIDI0NSwgCisgICAgMTMwLCAyNTMsIDIxOSwgMTYsIDMxLCAyMTQsIDE0NSwgMTE0LCAyNTAsIDQ0LCAyLCAyMTgsIDEwNSwgMjIsIDExMywgMTcwLCAKKyAgICA0OCwgMjI1LCAxOTIsIDIyMiwgMjUxLCAyMzUsIDIxMiwgMjI1LCAxOTIsIDIzMywgNDksIDIzNSwgMjEyLCAyMjUsIDE5MiwgCisgICAgMjM1LCAyMDAsIDIyNSwgMTkyLCA4NSwgMjQ5LCAxMzksIDIyNiwgMjAxLCAyMjAsIDMxLCAyMjAsIDE5LCAyMTksIDIzMSwgCisgICAgMjUwLCA2OSwgMjUwLCAyMzQsIDI0MSwgMTY0LCAyMTksIDEyOCwgMjQzLCA2OCwgMjExLCAyMzAsIDI0MCwgMjI3LCAyNDMsIAorICAgIDY4LCAyLCAyNDIsIDE5LCAyMzEsIDE3OCwgMTYsIDMxLCAyMzIsIDIzNSwgMjMwLCAxMjAsIDIxNCwgMTk1LCAyMjYsIDIwMSwgCisgICAgMjQyLCAxMjksIDI0NCwgMjAsIDI0NCwgODIsIDIzNiwgNywgMjQxLCA2NiwgMjQ0LCAxMzcsIDIyMiwgMTYsIDQyLCAyNDQsIAorICAgIDE5LCAyNDksIDE2NywgMjE5LCAxMDYsIDI0MCwgMTE5LCAyMTksIDEwOSwgMjI1LCAxNzEsIDIsIDI1MiwgMTY3LCAyMTYsIAorICAgIDI0MywgMjM1LCAxMzcsIDI1MiwgMTU0LCA4NywgMjQxLCAyMzgsIDI0MiwgMTQwLCA4NywgMjQzLCAyMzksIDIyNCwgMTQ1LCAKKyAgICAyNDksIDExMSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgNzEsIDI0NCwgODIsIDIsIDIwMywgMjMwLCAyMjksIDg1LCAyMTgsIAorICAgIDEwNiwgMjE0LCAxNjAsIDI1MSwgMjI1LCAyMjEsIDE5NSwgODUsIDIyMSwgMTk1LCAyMzIsIDExNCwgMjUxLCAyMjUsIDIyMSwgCisgICAgMTk1LCA3MSwgMjIxLCAxOTUsIDcxLCAxMTQsIDI1MCwgMTM4LCA3OSwgMjE3LCAyLCAyMzIsIDE2MCwgNTAsIDIxNywgNTQsIAorICAgIDI0NiwgOTYsIDI1NCwgMjAwLCAyNDUsIDEyNywgMjIzLCAxNjAsIDI0NCwgOTMsIDIyMywgMTYwLCAyNDIsIDIyLCAyMTMsIAorICAgIDE3NCwgMjQyLCAyMiwgMjExLCAxOTgsIDI0MiwgMjIsIDIzMiwgMTE0LCA0NCwgMjI1LCAyMDEsIDIyNSwgMjAxLCAyMTQsIAorICAgIDE2MCwgNDQsIDIyNSwgMjAxLCA3MSwgMjI4LCAyMzUsIDg1LCAyMjgsIDIzNSwgMjUwLCAxMzgsIDc5LCAxMTQsIDI1MCwgCisgICAgMTM4LCA3OSwgMjMwLCA4OSwgMjExLCAxNzgsIDExNCwgMjMwLCA4OSwgMjExLCAxNzgsIDI1MiwgMTY0LCAyMTEsIDE3OCwgCisgICAgMTE0LCAyNTIsIDE2NCwgMjExLCAxNzgsIDIyNiwgMTMwLCAyNiwgMjQ5LCAxMzgsIDExNCwgMjYsIDI0OSwgMTM4LCAyMDQsIAorICAgIDI1MCwgMTgzLCAyNDksIDEzOCwgMTE0LCAyMDQsIDI1MCwgMTgzLCAyNDksIDEzOCwgNywgMjQ5LCAxMzgsIDIyMCwgOTMsIAorICAgIDcxLCA3LCAyNDksIDEzOCwgMjI2LCAxMzAsIDcsIDI0OSwgMTM4LCAyMzEsIDE5MiwgMjQ5LCAxMzgsIDIxOCwgMTU5LCA2NCwgCisgICAgMjQ4LCAxNTcsIDI0NCwgMTksIDIxNywgMTYsIDI1MywgMjI0LCAyNDQsIDE5LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDExNCwgCisgICAgMjQ0LCAxOSwgMjUyLCAxNjUsIDI1MywgMjI0LCAyNDQsIDE5LCAyNDksIDI1MSwgMjUzLCAyMjQsIDg1LCAyNDQsIDE5LCAKKyAgICAyMjUsIDEyLCAyMTgsIDE1OCwgNzEsIDI0NCwgMTksIDIyNSwgMTIsIDIxOCwgMTU4LCAyMTksIDEzLCAyMTgsIDExMywgCisgICAgMjI2LCAxMzAsIDcxLCAyMTgsIDE1OCwgMzcsIDcxLCAyMTgsIDE1OCwgMjA0LCAyNTAsIDE4MywgODUsIDIxOCwgMTU4LCAKKyAgICA4NSwgMjUwLCAxODMsIDcxLCAyMTgsIDE1OCwgMjI2LCAxMzAsIDg1LCAyMTgsIDE1OCwgMTE0LCAyMjYsIDEzMCwgODUsIAorICAgIDIxOCwgMTU4LCAyMjUsIDYzLCAyMTgsIDE1OCwgMjIwLCA5MywgNzEsIDIxOCwgMTU4LCAxMTQsIDI1MywgMjI0LCAyMDQsIAorICAgIDI1MCwgMTgzLCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIxOCwgMjQ2LCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDg1LCAKKyAgICAyMTgsIDE1OCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDIyNSwgNjMsIDIxOCwgMTU4LCAyMTksIDEyNywgMjI1LCAxMiwgODUsIAorICAgIDIxOCwgMTU4LCAyNDUsIDIwMSwgMjI1LCAxMiwgMjIzLCAxMTcsIDg1LCAyMTgsIDE1OCwgMTE0LCAyNDUsIDIwMSwgMjI1LCAKKyAgICAxMiwgMjIzLCAxMTcsIDg1LCAyMTgsIDE1OCwgMjE1LCA3NywgMjI1LCAxMiwgODUsIDIxOCwgMTU4LCAyMTksIDEyMiwgCisgICAgMjI1LCAxMiwgMjUzLCAyMjQsIDIxNywgMTYsIDI1MywgMjI0LCAyMDQsIDI1MCwgMTgzLCAyMTcsIDE2LCAyNTMsIDIyNCwgCisgICAgMTE0LCAyMTcsIDE2LCAyNTMsIDIyNCwgMjE5LCAxMjcsIDIyNSwgMTYwLCA4NSwgMjIsIDcxLCAyNDQsIDYyLCA4NSwgMjQ0LCAKKyAgICA2MiwgNzEsIDI0NCwgNjIsIDI0NSwgMjAxLCAyMjUsIDE2MCwgMjI2LCAxMzAsIDg1LCAyNDQsIDYyLCAzNywgMjA0LCAyNTAsIAorICAgIDE4MywgMjQ1LCAyMDEsIDIyNSwgMTIsIDIxOCwgMTU4LCAxMTQsIDIxNywgMTYsIDIyNSwgNjMsIDI1MywgMjI0LCAyMTksIAorICAgIDY0LCAyMTYsIDEwNiwgMjE1LCAyMTksIDIxOSwgNjQsIDExNCwgMjUwLCAxMjIsIDIxOSwgNjQsIDIxOSwgMTUsIDExNCwgCisgICAgMjE5LCAxNSwgMjUyLCAxNjUsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjE3LCAxNiwgMjI0LCAxNzQsIDI1MywgMjI0LCAxMTQsIAorICAgIDI0NSwgMjAxLCAyMTcsIDE2LCAyMjQsIDE3NCwgMjUzLCAyMjQsIDI0OSwgMTM5LCA3OSwgMjIwLCA5MywgNzEsIDI1MCwgCisgICAgNDMsIDE1MiwgOTIsIDI0OSwgMTM5LCA3OSwgMjMyLCAxMTQsIDQ0LCAyNDYsIDk0LCA3MSwgMjE4LCAyMzYsIDIxNCwgMTYwLCAKKyAgICA0NCwgMjQ2LCA5NCwgNzEsIDIxOCwgMjM2LCAyMzIsIDExNCwgNDQsIDIyMCwgOTMsIDcxLCAyMTgsIDIzNiwgMjE0LCAxNjAsIAorICAgIDQ0LCAyMjAsIDkzLCA3MSwgMjE4LCAyMzYsIDg1LCAyMjQsIDE2LCAxNjQsIDIyNiwgMTUxLCA3MSwgMjI0LCAxNiwgMTY0LCAKKyAgICAyMjYsIDE1MSwgNzEsIDI0NSwgMzksIDE2NCwgMjI2LCAxNTEsIDg1LCAyNDgsIDEsIDIzMCwgMTg3LCA3MSwgMjExLCAxNzgsIAorICAgIDExNCwgMjQ1LCAzOSwgMTY0LCA4NywgMTkzLCA2NywgMTMwLCAyMzEsIDg3LCA2NywgMTMwLCAxMTQsIDY3LCAxMzAsIDExNCwgCisgICAgMjE5LCAxNTcsIDIxNSwgOTQsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMjE5LCAxNTcsIDI0OSwgCisgICAgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgNTIsIDIxNSwgOTQsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAKKyAgICAxNTEsIDExNCwgNTIsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMTIxLCAyMTksIDE1NywgMjQ5LCAKKyAgICAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAxMjEsIDUyLCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgCisgICAgMTUxLCAyNDksIDk5LCAyMTgsIDE0MiwgMjI2LCAxOSwgNSwgMjI2LCAxNTEsIDExNCwgMjQ1LCAzOSwgMTY0LCAyMjYsIAorICAgIDE1MSwgMTE0LCAyNDEsIDIzNSwgMjQ1LCAzOSwgMTY0LCAyMjYsIDE1MSwgMTE0LCA4NSwgMjQxLCAyMzQsIDIyMiwgMTg5LCAKKyAgICAxMTQsIDg1LCAyNDEsIDIzNSwgMjUxLCAxMjEsIDI0NCwgNjMsIDI0MSwgMjM0LCAyMjIsIDE4OSwgMjQ0LCA2MywgMjQxLCAKKyAgICAyMzUsIDI1MSwgMTIxLCAyMzEsIDg3LCA0MywgMjI2LCA4LCAyMjYsIDE1MSwgMjMxLCA4NywgNDQsIDIyNiwgOCwgMjI2LCAKKyAgICAxNTEsIDIzMSwgODcsIDI0NCwgNzEsIDQzLCAyMjYsIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCAyNDQsIDcxLCA0NCwgMjI2LCAKKyAgICA4LCAyMjYsIDE1MSwgMjMxLCA4NywgMjMzLCA0OCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjMxLCA4NywgCisgICAgMjIyLCAyNTAsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDExNCwgMjMzLCA0OCwgMjU0LCAxMTgsIDIyNCwgMSwgCisgICAgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMjIsIDI1MCwgMjU0LCAxMTgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMzMsIAorICAgIDQ4LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgMTUxLCAxMTQsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgCisgICAgMTUxLCAxOTMsIDQzLCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMTkzLCA0NCwgMjE2LCA3LCAyMjAsIAorICAgIDU1LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDIzMSwgODcsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIyNiwgMTUxLCAyMzEsIAorICAgIDg3LCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxMTEsIDI0NywgCisgICAgMjEyLCAxNTIsIDM3LCAyMSwgMTA1LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE1OCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAKKyAgICAxNjEsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTkwLCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE5NSwgMjQ3LCAyMTIsIAorICAgIDE1MiwgMzcsIDIxLCAxOTksIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTk2LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDIwMSwgCisgICAgMjQ3LCAyMTIsIDE1MiwgMzcsIDU0LCAyMTYsIDI0OCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDExMSwgMjQ3LCAyMTIsIDM3LCAKKyAgICAzNSwgMjEsIDEwNSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE1OCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAKKyAgICAyMTIsIDM3LCAzNSwgMjEsIDE5MCwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIAorICAgIDE5OSwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDE5NiwgMjQ3LCAyMTIsIDM3LCAzNSwgMjEsIDIwMSwgMjQ3LCAyMTIsIDM3LCAKKyAgICAzNSwgNTQsIDIxNiwgMjQ4LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxMTEsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgCisgICAgMjEsIDEwNSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTU4LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxNjEsIAorICAgIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5MCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTk1LCAyNDcsIDIxMiwgCisgICAgMTUyLCAzNywgMzUsIDIxLCAxOTksIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5NiwgMjQ3LCAyMTIsIDE1MiwgMzcsIAorICAgIDM1LCAyMSwgMjAxLCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDU0LCAyMTYsIDI0OCwgMTE0LCAyMTEsIDI0NiwgOTcsIDc1LCAKKyAgICAxMTQsIDk2LCA1MCwgMTE0LCAyMzAsIDE4NywgNTAsIDExNCwgMjQ3LCAxNzcsIDUwLCAxMTQsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMTE0LCA5NywgNzUsIDExNCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyNDYsIDEwNiwgMjI1LCAxNCwgOTcsIAorICAgIDc1LCAxMTQsIDIyMiwgMTg2LCA5NywgNzUsIDIxNSwgMjI1LCA5NywgNzUsIDExNCwgMjE1LCAyMjUsIDk3LCA3NSwgMjQ4LCAKKyAgICAxNjMsIDIxNSwgMjI1LCA5NywgNzUsIDExNCwgMjQ4LCAxNjMsIDIxNSwgMjI1LCA5NywgNzUsIDg1LCA5NywgNzUsIDIxNiwgCisgICAgMTQ1LCAyMTYsIDEzLCA5NywgMjU0LCAxLCAyMTYsIDE0NSwgMjUxLCAxODEsIDk3LCAyNTQsIDEsIDg1LCA5NywgMjU0LCAxLCAKKyAgICAxMTQsIDg1LCAyNDksIDk5LCAyNDYsIDExMiwgMjIsIDk3LCA3NSwgMTE0LCA4NSwgMjQ5LCA5OSwgMjE0LCAxNTMsIDIyLCAKKyAgICA5NywgNzUsIDIxOCwgMjMzLCA4NSwgOTcsIDc1LCAxMTQsIDI0OSwgMjE0LCA4NSwgOTcsIDc1LCAyMjIsIDI0OSwgNzEsIAorICAgIDk3LCA3NSwgMjMzLCA0NywgNzEsIDk3LCA3NSwgMjUyLCAxOTEsIDIyMCwgOTMsIDcxLCA5NywgNzUsIDI0MywgMjQ5LCAKKyAgICAyMjAsIDkzLCA3MSwgOTcsIDc1LCAxMTQsIDIzMiwgMTE0LCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMTE0LCAyMTQsIDE2MCwgCisgICAgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDIyOCwgNTQsIDIzMiwgMTE0LCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMjQ5LCAxMDcsIAorICAgIDIzMiwgMTI5LCAyMjgsIDU0LCAyMTQsIDE2MCwgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDM3LCAxMTQsIDcxLCA5NywgNzUsIAorICAgIDIxMSwgMjUyLCA5NywgNzUsIDI1MSwgMjI4LCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDI1MSwgMjI4LCA5NywgNzUsIDI1MSwgCisgICAgMjI4LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDExNCwgMjUxLCAyMjgsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMTE0LCAKKyAgICAyNTEsIDIyOCwgOTcsIDc1LCAxMTQsIDI1MSwgMjI4LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIxNywgMTgsIDk3LCA3NSwgCisgICAgMTE0LCAyMTcsIDE3LCA5NywgNzUsIDIxMiwgMTgsIDk3LCA3NSwgMTE0LCAyMTIsIDE4LCA5NywgNzUsIDIyNiwgMTc2LCAKKyAgICA5NywgNzUsIDUyLCAyNDksIDEwNywgMjMyLCAxMjksIDEzNCwgMjQ3LCAyMjIsIDI1NCwgMTE3LCA3MSwgMjE1LCAyMjcsIAorICAgIDI0OSwgMTk1LCA0LCA3MSwgMjE1LCAyMjYsIDIyNSwgMTc0LCAyMDQsIDIxOCwgNjQsIDIwNCwgMjE4LCAyMiwgNDMsIDIyMiwgCisgICAgOTIsIDI1MiwgMTgxLCAyNDgsIDY4LCA0NCwgMjIyLCA5MiwgMjUyLCAxODEsIDI0OCwgNjgsIDE3NywgMiwgNTksIDIzNSwgCisgICAgMjIyLCAyMjMsIDUzLCAyMTksIDQ5LCAyMjQsIDIwNCwgMjE4LCA2NCwgMjE4LCAyMywgMjI0LCAyMDQsIDIxOSwgNDgsIDY3LCAKKyAgICAyNTIsIDE0OSwgMiwgMjAzLCA5MSwgMTEsIDIyMiwgMjMxLCAyNDgsIDYsIDIwMCwgMjQ3LCAxNzYsIDExLCAyNDQsIDE4MywgCisgICAgMjQ4LCA2LCA5MiwgMjMyLCAxNTIsIDI1NCwgMTI2LCA5MiwgMjMyLCAxNTIsIDIyNiwgMTYyLCA3MSwgMjQ4LCAxLCAyLCAKKyAgICAyNTAsIDE4MSwgMjQ3LCAxMjgsIDIyLCAyLCAyNDcsIDEyOCwgMjQ1LCAxNzgsIDY0LCAyMjYsIDE3NCwgMjE0LCAxNTIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjQ5LCAxNjksIDIsIDI0NywgMTI4LCAyMTQsIDE2MCwgNDMsIDI0OSwgMTY5LCAyLCAyNDcsIDEyOCwgCisgICAgNDMsIDIyNiwgMTMyLCAyMzUsIDcyLCA0NCwgMjI2LCAxMzIsIDIzNSwgNzIsIDI0MywgMjM2LCAyMjYsIDEzMiwgMjM1LCAKKyAgICA3MiwgMjMzLCA5MSwgMTIwLCAyMTcsIDg4LCAyMzMsIDkxLCAxMjQsIDIxNywgODgsIDQzLCAyMiwgNDQsIDUyLCAyMTUsIAorICAgIDkzLCA0MywgMjIsIDQ0LCAyMTcsIDg4LCA0MywgMjMwLCA5MiwgMjAwLCA0NCwgMjE3LCA4OCwgMjAwLCA0MywgMjE3LCA4OCwgCisgICAgMTIwLCAyMTcsIDg5LCAyLCAyNTAsIDQ0LCA0OCwgMjMyLCAxMTEsIDI0NywgMTgxLCAyNTEsIDg2LCAyMDMsIDIyMiwgMTM1LCAKKyAgICA3MSwgMjQ5LCAyMTMsIDI0OCwgMCwgNzEsIDI0OSwgMjEzLCAyNDgsIDEsIDIsIDE0MCwgMjE2LCAxMTUsIDcxLCAyNDksIAorICAgIDIxMywgMjQ4LCAxLCAyLCA5NywgMjE2LCAxMTUsIDcxLCA0MiwgMiwgMTQwLCAyMTYsIDExNSwgNzEsIDQyLCAyLCA5NywgCisgICAgMjE2LCAxMTUsIDExLCA0MywgNzEsIDQyLCAxMjcsIDExLCA0NCwgNzEsIDQyLCAxMjcsIDExLCA0MywgMjU0LCAxMTgsIAorICAgIDEyNywgMTEsIDQ0LCAyNTQsIDExOCwgMTI3LCAxMSwgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCAxMSwgNDQsIDUyLCAyNTQsIAorICAgIDExOCwgMTI3LCAxMSwgNDMsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMTEsIDQ0LCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAKKyAgICAxMjcsIDExLCA0MywgMjQ0LCA3MSwgMjI2LCA3LCAxMSwgNDQsIDI0NCwgNzEsIDIyNiwgNywgMjE0LCAxNTMsIDIyNCwgMjcsIAorICAgIDc1LCAyNDYsIDExMiwgMjI0LCAyNywgNzUsIDI1NCwgOTYsIDI0MywgMTA1LCAyNTAsIDQ0LCA3NSwgMjUwLCAxMCwgMjQzLCAKKyAgICAxMDUsIDI1MCwgNDQsIDc1LCA0NCwgODAsIDIsIDM3LCAyMjUsIDI1LCAyMDAsIDE0MCwgNzUsIDIwMCwgOTcsIDc1LCAyMDAsIAorICAgIDQzLCA0NCwgNzUsIDIwMCwgMTQwLCA1MiwgNzUsIDIwMCwgOTcsIDUyLCA3NSwgMjAwLCA0MywgNDQsIDUyLCA3NSwgMjAwLCAKKyAgICAxNDAsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCA4MCwgMjQzLCAyNTEsIDEzMCwgMjAwLCAxNDAsIDUyLCA4MCwgCisgICAgMjQzLCAyNTEsIDEzMCwgMjAwLCA5NywgNTIsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCAyMTgsIDIzMiwgNzUsIDQ2LCAKKyAgICA0NywgMjUxLCAyMjMsIDQ2LCA0NywgMjQ3LCAxMjUsIDQ2LCA0NywgMjQ2LCAyNTMsIDQ2LCA0NywgMjQ3LCAxMjQsIDQ2LCAKKyAgICA0NywgMjQ2LCAxODksIDQ2LCA0NywgMjQ3LCA2MCwgNDYsIDQ3LCAyNDYsIDI1MiwgNDYsIDQ3LCAyNDcsIDEyMywgNDYsIAorICAgIDQ3LCAyNDYsIDE1NywgNDYsIDQ3LCAyNDcsIDI4LCA0NiwgNDcsIDI0NiwgMjIwLCA0NiwgNDcsIDI0NywgOTEsIDQ2LCA0NywgCisgICAgMjQ2LCAxODgsIDQ2LCA0NywgMjQ3LCA1OSwgNDYsIDQ3LCAyNDYsIDI1MSwgNDYsIDQ3LCAyNDcsIDEyMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE0MSwgNDYsIDQ3LCAyNDcsIDEyLCA0NiwgNDcsIDI0NiwgMjA0LCA0NiwgNDcsIDI0NywgNzUsIDQ2LCA0NywgCisgICAgMjQ2LCAxNzIsIDQ2LCA0NywgMjQ3LCA0MywgNDYsIDQ3LCAyNDYsIDIzNSwgNDYsIDQ3LCAyNDcsIDEwNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE1NiwgNDYsIDQ3LCAyNDcsIDI3LCA0NiwgNDcsIDI0NiwgMjE5LCA0NiwgNDcsIDI0NywgOTAsIDQ2LCA0NywgCisgICAgMjQ2LCAxODcsIDQ2LCA0NywgMjQ3LCA1OCwgNDYsIDQ3LCAyNDYsIDI1MCwgNDYsIDQ3LCAyNDcsIDEyMSwgNDYsIDQ3LCAKKyAgICAyNDYsIDEzMywgNDYsIDQ3LCAyNDcsIDQsIDQ2LCA0NywgMjQ2LCAxOTYsIDQ2LCA0NywgMjQ3LCA2NywgNDYsIDQ3LCAyNDYsIAorICAgIDE2NCwgNDYsIDQ3LCAyNDcsIDM1LCA0NiwgNDcsIDI0NiwgMjI3LCA0NiwgNDcsIDI0NywgOTgsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNDgsIDQ2LCA0NywgMjQ3LCAxOSwgNDYsIDQ3LCAyNDYsIDIxMSwgNDYsIDQ3LCAyNDcsIDgyLCA0NiwgNDcsIDI0NiwgCisgICAgMTc5LCA0NiwgNDcsIDI0NywgNTAsIDQ2LCA0NywgMjQ2LCAyNDIsIDQ2LCA0NywgMjQ3LCAxMTMsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNDAsIDQ2LCA0NywgMjQ3LCAxMSwgNDYsIDQ3LCAyNDYsIDIwMywgNDYsIDQ3LCAyNDcsIDc0LCA0NiwgNDcsIDI0NiwgCisgICAgMTcxLCA0NiwgNDcsIDI0NywgNDIsIDQ2LCA0NywgMjQ2LCAyMzQsIDQ2LCA0NywgMjQ3LCAxMDUsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNTUsIDQ2LCA0NywgMjQ3LCAyNiwgNDYsIDQ3LCAyNDYsIDIxOCwgNDYsIDQ3LCAyNDcsIDg5LCA0NiwgNDcsIDI0NiwgCisgICAgMTg2LCA0NiwgNDcsIDI0NywgNTcsIDQ2LCA0NywgMjQ2LCAyNDksIDQ2LCA0NywgMjQ3LCAxMjAsIDQ2LCA0NywgMjQ2LCAKKyAgICAxMjksIDQ2LCA0NywgMjQ3LCAwLCA0NiwgNDcsIDI0NiwgMTkyLCA0NiwgNDcsIDI0NywgNjMsIDQ2LCA0NywgMjQ2LCAxNjAsIAorICAgIDQ2LCA0NywgMjQ3LCAzMSwgNDYsIDQ3LCAyNDYsIDIyMywgNDYsIDQ3LCAyNDcsIDk0LCA0NiwgNDcsIDI0NiwgMTQ0LCA0NiwgCisgICAgNDcsIDI0NywgMTUsIDQ2LCA0NywgMjQ2LCAyMDcsIDQ2LCA0NywgMjQ3LCA3OCwgNDYsIDQ3LCAyNDYsIDE3NSwgNDYsIDQ3LCAKKyAgICAyNDcsIDQ2LCA0NiwgNDcsIDI0NiwgMjM4LCA0NiwgNDcsIDI0NywgMTA5LCA0NiwgNDcsIDI0NiwgMTM2LCA0NiwgNDcsIAorICAgIDI0NywgNywgNDYsIDQ3LCAyNDYsIDE5OSwgNDYsIDQ3LCAyNDcsIDcwLCA0NiwgNDcsIDI0NiwgMTY3LCA0NiwgNDcsIDI0NywgCisgICAgMzgsIDQ2LCA0NywgMjQ2LCAyMzAsIDQ2LCA0NywgMjQ3LCAxMDEsIDQ2LCA0NywgMjQ2LCAxNTEsIDQ2LCA0NywgMjQ3LCAKKyAgICAyMiwgNDYsIDQ3LCAyNDYsIDIxNCwgNDYsIDQ3LCAyNDcsIDg1LCA0NiwgNDcsIDI0NiwgMTgyLCA0NiwgNDcsIDI0NywgNTMsIAorICAgIDQ2LCA0NywgMjQ2LCAyNDUsIDQ2LCA0NywgMjQ3LCAxMTYsIDQ2LCA0NywgMjQ2LCAxMzIsIDQ2LCA0NywgMjQ3LCAzLCA0NiwgCisgICAgNDcsIDI0NiwgMTk1LCA0NiwgNDcsIDI0NywgNjYsIDQ2LCA0NywgMjQ2LCAxNjMsIDQ2LCA0NywgMjQ3LCAzNCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyNiwgNDYsIDQ3LCAyNDcsIDk3LCA0NiwgNDcsIDI0NiwgMTQ3LCA0NiwgNDcsIDI0NywgMTgsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTAsIDQ2LCA0NywgMjQ3LCA4MSwgNDYsIDQ3LCAyNDYsIDE3OCwgNDYsIDQ3LCAyNDcsIDQ5LCA0NiwgNDcsIAorICAgIDI0NiwgMjQxLCA0NiwgNDcsIDI0NywgMTEyLCA0NiwgNDcsIDI0NiwgMTM5LCA0NiwgNDcsIDI0NywgMTAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDIsIDQ2LCA0NywgMjQ3LCA3MywgNDYsIDQ3LCAyNDYsIDE3MCwgNDYsIDQ3LCAyNDcsIDQxLCA0NiwgNDcsIAorICAgIDI0NiwgMjMzLCA0NiwgNDcsIDI0NywgMTA0LCA0NiwgNDcsIDI0NiwgMTU0LCA0NiwgNDcsIDI0NywgMjUsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTcsIDQ2LCA0NywgMjQ3LCA4OCwgNDYsIDQ3LCAyNDYsIDE4NSwgNDYsIDQ3LCAyNDcsIDU2LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ4LCA0NiwgNDcsIDI0NywgMTE5LCA0NiwgNDcsIDI0NiwgMTI3LCA0NiwgNDcsIDI0NiwgMjU0LCA0NiwgNDcsIAorICAgIDI0NiwgMTkwLCA0NiwgNDcsIDI0NywgNjEsIDQ2LCA0NywgMjQ2LCAxNTgsIDQ2LCA0NywgMjQ3LCAyOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyMSwgNDYsIDQ3LCAyNDcsIDkyLCA0NiwgNDcsIDI0NiwgMTQyLCA0NiwgNDcsIDI0NywgMTMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDUsIDQ2LCA0NywgMjQ3LCA3NiwgNDYsIDQ3LCAyNDYsIDE3MywgNDYsIDQ3LCAyNDcsIDQ0LCA0NiwgNDcsIAorICAgIDI0NiwgMjM2LCA0NiwgNDcsIDI0NywgMTA3LCA0NiwgNDcsIDI0NiwgMTM0LCA0NiwgNDcsIDI0NywgNSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5NywgNDYsIDQ3LCAyNDcsIDY4LCA0NiwgNDcsIDI0NiwgMTY1LCA0NiwgNDcsIDI0NywgMzYsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjgsIDQ2LCA0NywgMjQ3LCA5OSwgNDYsIDQ3LCAyNDYsIDE0OSwgNDYsIDQ3LCAyNDcsIDIwLCA0NiwgNDcsIAorICAgIDI0NiwgMjEyLCA0NiwgNDcsIDI0NywgODMsIDQ2LCA0NywgMjQ2LCAxODAsIDQ2LCA0NywgMjQ3LCA1MSwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MywgNDYsIDQ3LCAyNDcsIDExNCwgNDYsIDQ3LCAyNDYsIDEzMCwgNDYsIDQ3LCAyNDcsIDEsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTMsIDQ2LCA0NywgMjQ3LCA2NCwgNDYsIDQ3LCAyNDYsIDE2MSwgNDYsIDQ3LCAyNDcsIDMyLCA0NiwgNDcsIAorICAgIDI0NiwgMjI0LCA0NiwgNDcsIDI0NywgOTUsIDQ2LCA0NywgMjQ2LCAxNDUsIDQ2LCA0NywgMjQ3LCAxNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwOCwgNDYsIDQ3LCAyNDcsIDc5LCA0NiwgNDcsIDI0NiwgMTc2LCA0NiwgNDcsIDI0NywgNDcsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzksIDQ2LCA0NywgMjQ3LCAxMTAsIDQ2LCA0NywgMjQ2LCAxMzcsIDQ2LCA0NywgMjQ3LCA4LCA0NiwgNDcsIAorICAgIDI0NiwgMjAwLCA0NiwgNDcsIDI0NywgNzEsIDQ2LCA0NywgMjQ2LCAxNjgsIDQ2LCA0NywgMjQ3LCAzOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzMSwgNDYsIDQ3LCAyNDcsIDEwMiwgNDYsIDQ3LCAyNDYsIDE1MiwgNDYsIDQ3LCAyNDcsIDIzLCA0NiwgNDcsIAorICAgIDI0NiwgMjE1LCA0NiwgNDcsIDI0NywgODYsIDQ2LCA0NywgMjQ2LCAxODMsIDQ2LCA0NywgMjQ3LCA1NCwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0NiwgNDYsIDQ3LCAyNDcsIDExNywgNDYsIDQ3LCAyNDYsIDEyOCwgNDYsIDQ3LCAyNDYsIDI1NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5MSwgNDYsIDQ3LCAyNDcsIDYyLCA0NiwgNDcsIDI0NiwgMTU5LCA0NiwgNDcsIDI0NywgMzAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjIsIDQ2LCA0NywgMjQ3LCA5MywgNDYsIDQ3LCAyNDYsIDE0MywgNDYsIDQ3LCAyNDcsIDE0LCA0NiwgNDcsIAorICAgIDI0NiwgMjA2LCA0NiwgNDcsIDI0NywgNzcsIDQ2LCA0NywgMjQ2LCAxNzQsIDQ2LCA0NywgMjQ3LCA0NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzNywgNDYsIDQ3LCAyNDcsIDEwOCwgNDYsIDQ3LCAyNDYsIDEzNSwgNDYsIDQ3LCAyNDcsIDYsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTgsIDQ2LCA0NywgMjQ3LCA2OSwgNDYsIDQ3LCAyNDYsIDE2NiwgNDYsIDQ3LCAyNDcsIDM3LCA0NiwgNDcsIAorICAgIDI0NiwgMjI5LCA0NiwgNDcsIDI0NywgMTAwLCA0NiwgNDcsIDI0NiwgMTUwLCA0NiwgNDcsIDI0NywgMjEsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTMsIDQ2LCA0NywgMjQ3LCA4NCwgNDYsIDQ3LCAyNDYsIDE4MSwgNDYsIDQ3LCAyNDcsIDUyLCA0NiwgNDcsIAorICAgIDI0NiwgMjQ0LCA0NiwgNDcsIDI0NywgMTE1LCA0NiwgNDcsIDI0NiwgMTMxLCA0NiwgNDcsIDI0NywgMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5NCwgNDYsIDQ3LCAyNDcsIDY1LCA0NiwgNDcsIDI0NiwgMTYyLCA0NiwgNDcsIDI0NywgMzMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjUsIDQ2LCA0NywgMjQ3LCA5NiwgNDYsIDQ3LCAyNDYsIDE0NiwgNDYsIDQ3LCAyNDcsIDE3LCA0NiwgNDcsIAorICAgIDI0NiwgMjA5LCA0NiwgNDcsIDI0NywgODAsIDQ2LCA0NywgMjQ2LCAxNzcsIDQ2LCA0NywgMjQ3LCA0OCwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MCwgNDYsIDQ3LCAyNDcsIDExMSwgNDYsIDQ3LCAyNDYsIDEzOCwgNDYsIDQ3LCAyNDcsIDksIDQ2LCA0NywgCisgICAgMjQ2LCAyMDEsIDQ2LCA0NywgMjQ3LCA3MiwgNDYsIDQ3LCAyNDYsIDE2OSwgNDYsIDQ3LCAyNDcsIDQwLCA0NiwgNDcsIAorICAgIDI0NiwgMjMyLCA0NiwgNDcsIDI0NywgMTAzLCA0NiwgNDcsIDI0NiwgMTUzLCA0NiwgNDcsIDI0NywgMjQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTYsIDQ2LCA0NywgMjQ3LCA4NywgNDYsIDQ3LCAyNDYsIDE4NCwgNDYsIDQ3LCAyNDcsIDU1LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ3LCA0NiwgNDcsIDI0NywgMTE4LCA5NywgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAKKyAgICAyLCA1MiwgNjcsIDkxLCAxNDAsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgNTIsIDgwLCAyLCA2NywgOTEsIDQzLCA0NCwgNTIsIAorICAgIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDEzMCwgMTQwLCA1MiwgODAsIDI0MywgMjUxLCAKKyAgICAxMzAsIDk3LCA1MiwgODAsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCA4MCwgMiwgMjAzLCA5MSwgMjE0LCAxNTMsIDgwLCAKKyAgICAyLCAyMDMsIDkxLCAyMTQsIDE1MywgMjE1LCAyMTIsIDc1LCAyNDYsIDExMiwgMjE1LCAyMTIsIDc1LCAxNDAsIDUyLCAyNDgsIAorICAgIDE2NSwgNzUsIDk3LCA1MiwgMjQ4LCAxNjUsIDc1LCAxNDAsIDIxNSwgMjEyLCAyNDgsIDE2NSwgNzUsIDk3LCAyMTUsIDIxMiwgCisgICAgMjQ4LCAxNjUsIDc1LCA5NywgMjE1LCA1OCwgMjE1LCAyMTIsIDI0OCwgMTY1LCA3NSwgOTcsIDgwLCAyLCAyNDYsIDEyNiwgCisgICAgMjE4LCAxNDEsIDIxNCwgMTUzLCA4MCwgMjE2LCA0MywgMTMwLCAyNDYsIDExMiwgODAsIDIxNiwgNDMsIDEzMCwgOTcsIDgwLCAKKyAgICAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIAorICAgIDgwLCAyLCAyMTcsIDc4LCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAKKyAgICAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDI1NCwgMywgOTcsIDI1NCwgMywgMTQwLCA1MiwgMjU0LCAzLCA5NywgCisgICAgNTIsIDI1NCwgMywgMTQwLCA4MCwgMjE2LCA0MywgODUsIDI0OCwgMCwgOTcsIDgwLCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCAKKyAgICAxNDAsIDgwLCAyNDMsIDI1MSwgMjUyLCAxNDksIDIxNiwgNDMsIDg1LCAyNDgsIDAsIDk3LCA4MCwgMjQzLCAyNTEsIDI1MiwgCisgICAgMTQ5LCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCAyMjgsIDYxLCAyMTIsIDksIDIyLCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCAyMiwgMjE5LCAzMCwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMiwgMTAzLCAKKyAgICAyMjgsIDYxLCAyNDUsIDIyOCwgODAsIDIsIDEwMywgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAyLCAxMDMsIDIxOSwgMzAsIAorICAgIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMjIsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjI4LCAKKyAgICA2MSwgMjQ1LCAyMjgsIDgwLCAyMiwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDIyLCAKKyAgICAyMTksIDMwLCAyMTIsIDksIDc1LCAyMTksIDMwLCAyMTIsIDksIDgwLCAyMiwgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjIyLCAKKyAgICAyMzEsIDI0OCwgNywgMjQ5LCAxMzMsIDI0NCwgMTgzLCAyNDgsIDYsIDI0NCwgMTgzLCAyNDgsIDcsIDI0OSwgMTMzLCAyMjIsIAorICAgIDIzMSwgMjQ4LCA2LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDI0OSwgMTMzLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIyOCwgCisgICAgNjEsIDI0NSwgMjI4LCA4MCwgMjQ5LCAxMzMsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMjQ0LCAxODMsIDI0OCwgNywgMjQ5LCAKKyAgICAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjIyLCAyMzEsIDI0OCwgNywgMjQ5LCAxMzMsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMjI4LCA2MSwgMjQ1LCAyMjgsIDgwLCAyNDksIDEzMywgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgCisgICAgMjEyLCA5LCA4MCwgMjQ5LCAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjEyLCAzNiwgODAsIDIyNSwgMTAsIDI0NywgCisgICAgMjAzLCAyMjIsIDI1NCwgODAsIDIyNSwgMTAsIDk3LCAyMTYsIDE4OSwgMjQ5LCA5OCwgMjE0LCAxNTIsIDgwLCAyMjUsIDEwLCAKKyAgICA5NywgMjE2LCAxODksIDI0OSwgOTgsIDI0NiwgMTExLCA4MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDIxNiwgMTg5LCAyNDksIAorICAgIDk4LCAyMzMsIDQzLCA4MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDIxNiwgMTg5LCAyNDksIDk4LCAyMjIsIDI0NCwgMjIyLCAKKyAgICAyNDcsIDI1NCwgMzQsIDI1MCwgMTAsIDc1LCAyMzMsIDQ2LCAyNTQsIDM0LCAyNTQsIDk2LCA3NSwgMjE2LCAxNSwgMjU0LCAKKyAgICAzNCwgMjU0LCA5NiwgNzUsIDI1MSwgMTgzLCAyNTQsIDM0LCAyNTQsIDk2LCA3NSwgMjE2LCAxNSwgMjU0LCAzNCwgMjUwLCAKKyAgICAxMCwgODAsIDIsIDIzMCwgMTg2LCAyMTYsIDE1LCAyNTQsIDM0LCAyNTQsIDk2LCA4MCwgMiwgMjI1LCAyNSwgMjMyLCAxMTQsIAorICAgIDQ0LCAyMjAsIDE1NCwgMjUwLCAxMCwgNzUsIDIzMiwgMTE0LCA0MywgMjIwLCAxNTQsIDI1NCwgOTYsIDc1LCAyNTQsIDk2LCAKKyAgICAyNTAsIDgsIDI1MCwgNDQsIDc1LCAyNTAsIDEwLCAyNTAsIDgsIDI1MCwgNDQsIDc1LCA5NywgODAsIDcyLCAyMTksIDI1MywgCisgICAgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDIxOSwgMjUzLCA5NywgNzUsIDIxOSwgMjUzLCA5NywgODAsIDcyLCAxNDAsIDc1LCAKKyAgICA5NywgODAsIDIsIDk2LCA1MSwgMTQwLCA4MCwgMiwgOTYsIDUxLCA5NywgODAsIDIxNiwgMTQwLCAyMTEsIDE3OCwgNDMsIAorICAgIDQ0LCA4MCwgMjE2LCAxNDAsIDQsIDI1MCwgNDMsIDIxNCwgMTUzLCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDQsIDI1MCwgCisgICAgNDMsIDQzLCAyNTIsIDE0NywgMTIwLCA0NCwgMjUyLCAxNDcsIDEyNCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIDEyNCwgNDQsIAorICAgIDI1MiwgMTQ3LCAxMjAsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDQsIDEyNCwgMjUyLCAxNDcsIDQzLCAyNDIsIDUsIDEyMCwgCisgICAgMjUyLCAxNDcsIDQzLCAxMjQsIDI1MiwgMTQ3LCA0NCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIDEyMCwgNDQsIDI1MiwgMTQ3LCAKKyAgICAxMjAsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDQsIDEyNCwgMjUyLCAxNDcsIDQ0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgCisgICAgMTI0LCA0NCwgMjUyLCAxNDcsIDEyNCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0MywgMTI0LCAyNTIsIDE0NywgNDMsIAorICAgIDI0MiwgNSwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDIxNiwgNDMsIDEzMCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDEyMCwgMjE2LCA0MywgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDIxNiwgNDMsIDEzMCwgCisgICAgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQ0LCAyMTYsIDQzLCAxMzAsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgMTI0LCAyMTYsIDQzLCAxMzAsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDIxNiwgNDMsIDEzMCwgMjE0LCAKKyAgICAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQzLCAyMTYsIDQzLCAxMzAsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCA0MywgMjE2LCA0MywgMTMwLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjQzLCAyNTEsIDEzMCwgOTcsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjQzLCAyNTEsIDEzMCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAorICAgIDQ0LCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDI0MywgMjUxLCAxMzAsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNDMsIDI1MSwgMTMwLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAKKyAgICAyNDMsIDI1MSwgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDMsIDI0MywgMjUxLCAxMzAsIDI0NiwgCisgICAgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjQzLCAyNTEsIDEzMCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICAxMjAsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgNDMsIDI1MiwgMzgsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgOTcsIDI0MiwgNiwgMiwgCisgICAgMjUyLCAxNDcsIDEyMCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgMjQ2LCAxMTIsIDI0MiwgNiwgCisgICAgMiwgMjUyLCAxNDcsIDQzLCAyNTIsIDM4LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTYzLCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDEyMCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNjMsIDk3LCAyNDIsIDYsIAorICAgIDIsIDI1MiwgMTQ3LCAxMjQsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAxNDAsIDI0MiwgNiwgMiwgCisgICAgMjUyLCAxNDcsIDEyMCwgNzIsIDIwMCwgMjQ4LCAxNjQsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNTIsIDUxLCAKKyAgICAyMDAsIDI0OCwgMTY0LCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgMjAwLCAyNDgsIDE2NCwgOTcsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjUyLCA1MSwgMjAwLCAyNDgsIDE2NCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDQzLCAyNTIsIDM4LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDI0NiwgMTEyLCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjUyLCAzOCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCA0NCwgCisgICAgNTIsIDgwLCAyLCAyMjIsIDE4NSwgMjQxLCAyNDIsIDI0NSwgMTA2LCA1LCA3MiwgOTcsIDc1LCAyMTYsIDkwLCAyMjYsIAorICAgIDE3MiwgNzIsIDk3LCA3NSwgMTQwLCA4MCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyMTYsIDkwLCAKKyAgICAyMjYsIDE3MSwgOTcsIDgwLCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMzMsIDIxLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgCisgICAgMjE2LCAxNDAsIDIzMywgMjAsIDI0MiwgMTM3LCA3MiwgOTcsIDc1LCAyMTgsIDY1LCA3MiwgOTcsIDc1LCAxNDAsIDgwLCAKKyAgICAyMTYsIDE0MCwgMjE4LCA2NCwgMjE4LCAyMywgNzIsIDE0MCwgNzUsIDQzLCAyNDQsIDk5LCAyMTcsIDc4LCA0NCwgMjQ0LCAKKyAgICA5OSwgMjE3LCA3OCwgMTIwLCAyNDQsIDk5LCAyMTcsIDc4LCAxMjQsIDI0NCwgOTksIDIxNywgNzgsIDIxNSwgMjEyLCA2NywgCisgICAgMjUyLCAxNDksIDI0OCwgNjgsIDIxMCwgMTYwLCAxODksIDIxOCwgMjQ0LCAyMTAsIDE2MCwgMTg5LCAyMTUsIDQ5LCAyNDksIAorICAgIDIzNCwgNDMsIDcxLCAyNDksIDEwNywgMTI3LCA0NCwgNzEsIDI0OSwgMTA3LCAxMjcsIDQzLCA3MSwgMjI2LCA3LCA0NCwgCisgICAgNzEsIDIyNiwgNywgMjEwLCAxNjAsIDE4OSwgNDMsIDIzNiwgMjIsIDEyNywgMjEwLCAxNjAsIDE4OSwgNDQsIDIzNiwgMjIsIAorICAgIDEyNywgMjEwLCAxNjAsIDE4OSwgNDMsIDI1MSwgMjUwLCAxMjcsIDIxMCwgMTYwLCAxODksIDQ0LCAyNTEsIDI1MCwgMTI3LCAKKyAgICA0MywgNDIsIDI1MSwgMTY2LCAyLCAyMTQsIDE4MywgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjE0LCAxODMsIDQzLCA0MiwgCisgICAgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIDcsIDIxNiwgMTUsIDI0OSwgMTY4LCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAKKyAgICAyMTYsIDExNiwgMjM2LCA3LCAyNTEsIDE4MywgMjQ5LCAxNjgsIDQzLCA0MiwgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIAorICAgIDcsIDI1MSwgMTgzLCAyNDksIDE2OCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgNywgMjE2LCAxNSwgCisgICAgMjQ5LCAxNjgsIDQzLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIsIDI0NywgMTI4LCA0NCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyLCAKKyAgICAyNDcsIDEyOCwgNDMsIDI1NCwgMzQsIDIzMywgMjEsIDEyNywgNDQsIDI1NCwgMzQsIDI0MiwgMTM3LCAxMjcsIDUyLCA0MywgCisgICAgMjU0LCAzNCwgMjQyLCAxMzcsIDEyNywgNTIsIDQ0LCAyNTQsIDM0LCAyMzMsIDIxLCAxMjcsIDQzLCA4NSwgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDQ0LCA4NSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDI0NiwgMTI2LCAyNDQsIDE0MywgNjcsIDIxMCwgCisgICAgMzUsIDIzMiwgMjE5LCAyMzEsIDkzLCAyNTQsIDExOCwgMjI2LCAxNzQsIDIzMywgNTIsIDQ0LCAyNTQsIDExOCwgMjE0LCAKKyAgICAxMiwgMiwgMjE4LCAyMzYsIDIzMSwgOTMsIDQ0LCAyNTQsIDExOCwgMiwgMjQ3LCAxMjgsIDI1NCwgMTE4LCAyLCAyMjIsIAorICAgIDk0LCAyMzUsIDIyMiwgMjU1LCAxMiwgMjU0LCAxMTcsIDIxOSwgMSwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMzMsIDUyLCAKKyAgICAyMTksIDEsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjE0LCAxNjMsIDIxNSwgOTQsIDI1NCwgMTE3LCAyMjMsIDUyLCAyNTQsIAorICAgIDExNywgMjU0LCAxMTgsIDIsIDIxNCwgMTgzLCAyMjMsIDUyLCAyNTQsIDExOCwgMiwgMjE0LCAxODMsIDIyNiwgMjUyLCAKKyAgICAyNTQsIDExOCwgMjI2LCAxNzQsIDIxNCwgMTYzLCAyMjYsIDI1MiwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyNDYsIDExNCwgCisgICAgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyMCwgCisgICAgMjIsIDIyMiwgMjU0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgCisgICAgMjI1LCAxMCwgMTIwLCAyMiwgMjMzLCA1MiwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIAorICAgIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyNCwgMjIsIDIyMiwgMjU0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIAorICAgIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTI0LCAyMiwgMjMzLCA1MiwgMjMxLCA5MywgMjU0LCAxMTgsIAorICAgIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDQ0LCAyMiwgMjE0LCAxNjMsIDIzMSwgCisgICAgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCA0MywgMjIsIAorICAgIDIxNCwgMTYzLCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAKKyAgICAxMCwgNDQsIDIyLCAyNDYsIDExNCwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgCisgICAgNywgODAsIDIyNSwgMTAsIDQzLCAyMiwgMjQ2LCAxMTQsIDIyMywgNTIsIDI0NSwgMTYwLCAyMjAsIDEyOSwgMjQ1LCAxNjAsIAorICAgIDIyMCwgMTMwLCAyLCAyMjYsIDEyNywgMjQ1LCAxNjAsIDIyMCwgMTMwLCAyLCA0LCAyNTAsIDQ0LCA0OCwgMjQ1LCAxNjAsIAorICAgIDIyMCwgMTMwLCAyLCA0NCwgODAsIDQ4LCAyNDUsIDE2MCwgMjIwLCAxMzAsIDIsIDQzLCA4MCwgNDgsIDI1MCwgNDQsIDIsIAorICAgIDIwMywgMTMwLCAzNywgNjcsIDEzMCwgMzcsIDIyNiwgMTEsIDM3LCAyMjMsIDUzLCAyMTksIDQ4LCAzNywgMjI1LCAxNzQsIAorICAgIDI1MCwgNDQsIDI0NywgMTgxLCAyNTEsIDg2LCAyMDMsIDI1MiwgMTQ5LCAyMiwgMjE2LCAxNSwgMTYzLCAyNDcsIDE4MSwgCisgICAgMjUxLCA4NiwgNjcsIDEzMCwgMjUwLCA0NCwgMiwgMjE4LCAyNSwgMjExLCAxNzgsIDM3LCAyNTQsIDk1LCAyNDcsIDE3NywgCisgICAgNTAsIDEyMCwgODAsIDIxNiwgMTQwLCAyNTAsIDQzLCAzNywgNzEsIDI1MSwgMTIxLCAzNywgMjUxLCAxMjEsIDM3LCAyMzMsIAorICAgIDIwLCAzNywgMjQyLCAxMzYsIDI1MCwgNDQsIDIsIDQsIDI1MCwgNDQsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgCisgICAgMjUwLCA0NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTMsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgOTIsIDIyMiwgMjMxLCAKKyAgICAyNDgsIDcsIDIxOSwgOTcsIDkyLCAyNDQsIDE4MywgMjQ4LCA3LCAyMTksIDk3LCA5MiwgMjUzLCAyMjQsIDkyLCA0LCAyNTAsIAorICAgIDQzLCA5MiwgMjE4LCAyMzYsIDExMywgMjM1LCA3MSwgMjE4LCAyMzQsIDIxNSwgMjI3LCAyLCA1OSwgNDgsIDIxNSwgMjI3LCAKKyAgICAyLCAyMTQsIDE4MywgMjIyLCA5NCwgMjM2LCA3LCAyMTUsIDIyNiwgMjE1LCAyMjcsIDIsIDIyMCwgMTM2LCAyNTMsIDIxNSwgCisgICAgMjUxLCAxODIsIDQ0LCAyMTUsIDIyNywgNzIsIDQzLCAyMTUsIDIyNiwgNDMsIDIxNSwgMjI3LCAyNTIsIDM4LCA2NywgMTMwLCAKKyAgICA2NywgMjUyLCAxNDksIDI1MiwgMzgsIDQ0LCAyMTUsIDIyNiwgMjUxLCAxNzMsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAyNTEsIAorICAgIDE3MywgMiwgNDQsIDE2MywgMjUxLCAyMjksIDg1LCAyNTEsIDE3MiwgMzAsIDIsIDQzLCAxNjMsIDI1MSwgMjI5LCAzMCwgMiwgCisgICAgNDQsIDE2MywgMjUxLCAyMjksIDcxLCAyNDAsIDI0MywgODUsIDI0MCwgMjQzLCA0MywgMjExLCAyNDQsIDI0NCwgMTQzLCAKKyAgICA0NCwgMjExLCAyNDQsIDI0NCwgMTQzLCA0MywgNTIsIDIxMSwgMjQ0LCAyNDQsIDE0MywgNDQsIDUyLCAyMTEsIDI0NCwgCisgICAgMjQ0LCAxNDMsIDIzNSwgMjU1LCAyMzUsIDI0MSwgMjE2LCAxMTMsIDExNSwgMjM1LCAyNDEsIDIzNSwgMjQyLCAyMjksIAorICAgIDEwNywgMiwgNjcsIDEzMCwgMjQ2LCAxMjAsIDIzMCwgOTIsIDQyLCAyLCAyNDksIDE4OSwgMjI2LCAxMzEsIDIzNSwgMjUzLCAKKyAgICAyNTMsIDI0NSwgMjE5LCAyMjEsIDIyNCwgMTgzLCAyNDUsIDEwNiwgNSwgMjIsIDIxOSwgOTksIDIyNiwgMTEsIDI0NSwgCisgICAgMTA2LCA1LCAyMiwgMjE5LCA5OSwgMjI2LCAxMiwgMiwgMjE2LCA5MCwgNDgsIDI0MCwgMTExLCAyMTYsIDQzLCAyMiwgMjE5LCAKKyAgICA5OSwgMjI2LCAxMSwgMjQyLCAxOTAsIDIxOCwgMTU3LCAyMTYsIDE4NiwgMjQ2LCAxMTMsIDIxNSwgMjI3LCAyLCA0MywgCisgICAgMTYzLCAyNTEsIDIyOSwgMjQ2LCAxMTMsIDIxNSwgMjI3LCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgODUsIDI0OCwgMSwgMiwgCisgICAgMTI0LCA3NSwgODUsIDIzMiwgMTEwLCA3MSwgMjUwLCA0NCwgMiwgMTI0LCA3NSwgODUsIDI1MCwgNDQsIDIsIDEyNCwgNzUsIAorICAgIDI0NSwgOTMsIDcxLCAyMTgsIDIzNiwgMjQ1LCA5MywgODUsIDIxOCwgMjM2LCAyNDUsIDkzLCA3MSwgMjQ4LCAwLCAyNDUsIAorICAgIDkzLCA4NSwgMjQ4LCAwLCAyNDUsIDkzLCA3MSwgMjUwLCA0MywgMjQ1LCA5MywgODUsIDI1MCwgNDMsIDIyMiwgMTM0LCAKKyAgICAyMjMsIDUzLCAyMTksIDQ5LCAyMjYsIDE3MSwgMjE5LCA0OSwgMiwgMjI2LCAxMjcsIDIyMywgNTMsIDIxOSwgNDksIDIsIAorICAgIDIwMywgOTEsIDI1MiwgMSwgMjE5LCA0OCwgMjUyLCAxLCAyMjMsIDUzLCAyMTksIDQ4LCA1MiwgMjI1LCAyNSwgMjE1LCAKKyAgICAyMTIsIDIyNSwgMjUsIDIzMywgNDgsIDI0OSwgOTksIDI1NCwgMTE4LCAxMjcsIDIyMiwgMjUwLCAyNDksIDk5LCAyNTQsIAorICAgIDExOCwgMTI3LCAyMTYsIDc5LCAyMzAsIDE4NCwgMjMwLCAyOSwgMzcsIDU5LCAyMjYsIDE3MSwgMjMwLCAyOSwgMzcsIDk2LCAKKyAgICAyMjYsIDE3MSwgMjMwLCAyOSwgMzcsIDMwLCAyMjYsIDE3MSwgMjMwLCAyOSwgMjE0LCAxNzYsIDIyNiwgMTcyLCAyLCAyNDcsIAorICAgIDEyOCwgMjMwLCAyOSwgMjE0LCAxNzYsIDIyNiwgMTcyLCAyLCAyMjUsIDI1LCAyMzAsIDI5LCA0MiwgMjM1LCAyMDYsIDIyNiwgCisgICAgMTcxLCAyMzAsIDI5LCA0MiwgMjE0LCAxNzYsIDIyNiwgMTcxLCAxMTMsIDIzMiwgMTUyLCAyMiwgMjI2LCAxNzEsIDExMywgCisgICAgMjMyLCAxNTIsIDE3NywgMjI2LCAxNzEsIDIzMCwgMjksIDMwLCAyMjYsIDE3MSwgMjMwLCAxNTksIDExMywgMjE4LCA0NCwgCisgICAgMjE4LCA0MiwgMiwgMjM1LCAyMTgsIDIyNCwgMjcsIDIzNSwgMjE5LCAyMjYsIDE3MSwgMjQ0LCAxMDcsIDIyNiwgMywgMjM1LCAKKyAgICAyMTgsIDIzNSwgMjE5LCAyLCA1MiwgOTEsIDIzNSwgMjE5LCAyNTMsIDE4MSwgMiwgMjE5LCA5NywgMjUwLCA0MCwgMjQzLCAKKyAgICAyMzMsIDI1NCwgOTYsIDIzNSwgMjE2LCAyMzIsIDIyMCwgMjM1LCAyMTcsIDIsIDIyMywgMTE4LCAyMjUsIDI0MSwgMjU0LCAKKyAgICAxMCwgMjI1LCA0LCAyMzIsIDIyMCwgMjM1LCAyMTcsIDIsIDIyMCwgMTU0LCAyMjUsIDI0MSwgMjU0LCAxMCwgMjI1LCA0LCAKKyAgICAyMzIsIDIyMCwgMjM1LCAyMTcsIDIyOCwgNTcsIDIzNiwgMSwgMjE2LCAxOTcsIDIyNSwgNCwgMjM1LCAyMTksIDI1NCwgMTAsIAorICAgIDExNiwgMjI1LCAxNCwgMjI2LCAxNzEsIDIyNCwgMjEsIDIzNSwgMjE5LCAyMjYsIDE3MSwgMjM1LCAyMTksIDIsIDE0MCwgCisgICAgODAsIDIsIDEwMywgMjM1LCAyMTksIDIsIDMwLCA1MCwgMjM1LCAyMTksIDIsIDIzNSwgMjA1LCAyMzUsIDIxOSwgMiwgMjE0LCAKKyAgICAxNzUsIDIzNSwgMjE5LCAyLCAyMjYsIDEyNywgMjM1LCAyMTksIDIsIDIxNCwgMTgzLCAyMzUsIDcyLCAyMzMsIDkxLCA0MywgCisgICAgMjE1LCAyMjcsIDIyNiwgMTcxLCAyMTAsIDE2MCwgMTg5LCAyMjEsIDIwMywgMjQ5LCAyMTcsIDIxMCwgMTYwLCAxODksIAorICAgIDIyMSwgMjAzLCAyMjUsIDU5LCAyMTAsIDE2MCwgMTg5LCAyMjEsIDIwMywgMjI0LCAxNzksIDk2LCA1LCAyLCA0LCAyNTAsIAorICAgIDQ0LCA0OCwgOTYsIDUsIDIsIDI1MCwgMzksIDI1NSwgMjQsIDQ4LCA5NiwgNSwgMiwgMjE2LCA5MCwgNDgsIDk2LCA1LCAyLCAKKyAgICA1OSwgNTEsIDk2LCA1LCAyLCAyMTYsIDkwLCA1MSwgOTYsIDUsIDIsIDIxOCwgNjYsIDEwNSwgOTYsIDUsIDIsIDg1LCAyMTUsIAorICAgIDIyNiwgMjMwLCAxODcsIDUsIDIsIDI0OSwgMjI4LCA0OCwgMjMwLCAxODcsIDUsIDIsIDU5LCA1MSwgMjMwLCAxODcsIDUsIAorICAgIDIsIDI0NCwgMTgzLCAyNDcsIDEyNiwgMjMwLCAxODcsIDUsIDIsIDIyMiwgMjMxLCAyNDcsIDEyNiwgOTYsIDUsIDIzNiwgNywgCisgICAgNDMsIDE2MywgMjUwLCA0MywgOTYsIDUsIDIzNiwgNywgNDQsIDE2MywgMjUwLCA0MywgMjEzLCAyNTQsIDE3NywgMjQ5LCAKKyAgICAxMzksIDIyNCwgMTgzLCAyMzAsIDg5LCA1LCAyLCA1OSwgNDgsIDIzMCwgODksIDUsIDIsIDIxNCwgMTgzLCAyMjAsIDE1MSwgCisgICAgMjI0LCAxODQsIDIsIDI1MSwgMTgzLCAyNTAsIDcsIDIxOSwgNzksIDIyNCwgMTgzLCAyMzAsIDg5LCA1LCAyMzYsIDcsIDQzLCAKKyAgICAxNjMsIDI1MCwgNDMsIDIzMCwgODksIDUsIDIzNiwgNywgNDQsIDE2MywgMjUwLCA0MywgMzcsIDIzMCwgODksIDUsIDIsIAorICAgIDI1MCwgMzksIDI1NSwgMjMsIDIzMCwgODksIDUsIDIzNiwgNywgNTIsIDI1MCwgNDMsIDM3LCAyNDcsIDE3NywgNTAsIDk2LCAKKyAgICA1LCAyMzYsIDcsIDIxNSwgMjI2LCAyMzAsIDE4NywgNSwgMjM2LCA3LCAyMTUsIDIyNiwgMjMwLCA4OSwgNSwgMjM2LCA3LCAKKyAgICAyMTUsIDIyNiwgMjM1LCAyMTMsIDIyNCwgMTgzLCAyMjIsIDI0NSwgMjM1LCAyMTMsIDIyNCwgMTgzLCAyMTAsIDE2MCwgCisgICAgMTg5LCAyMjMsIDkzLCAyNDksIDIxNywgMjU0LCAxNDIsIDE3NywgMjQ5LCAxNzMsIDIzNSwgMjA2LCAyLCAyNDcsIDEyOCwgCisgICAgMjE0LCAxNzYsIDIsIDIzMCwgMTg3LCA1MCwgMjE0LCAxNzYsIDIsIDIyNiwgMTI3LCAyMzUsIDIwNiwgMiwgMjI2LCAxMjcsIAorICAgIDIzNSwgMjA2LCAyLCAyMzIsIDE1MiwgMjU0LCAxMjYsIDIxNCwgMTc2LCAyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIxNCwgCisgICAgMTc2LCA3MiwgMjM1LCAyMDUsIDIzNSwgMjA2LCA3MiwgMjE0LCAxNzUsIDIxNCwgMTc2LCA3MiwgMjUyLCAxNDksIDcyLCAKKyAgICAyMzUsIDIwNSwgMjM1LCAyMDYsIDcyLCAyNTIsIDE0OSwgNzIsIDIxNCwgMTc1LCAyMTQsIDE3NiwgMjUyLCAzOCwgMjIsIAorICAgIDIzNSwgNzEsIDIsIDIxNCwgMTc1LCAyMzUsIDIwNiwgMjUyLCAzOCwgMjIsIDIzNSwgNzEsIDIsIDIzNSwgMjA1LCAyNTAsIAorICAgIDgsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNSwgMjUwLCA4LCAyMzUsIDIwNiwgMiwgMjIwLCAxMzUsIDUyLCA0MiwgMjM1LCAKKyAgICAyMDUsIDUyLCA0MiwgMjE0LCAxNzUsIDI1MCwgOCwgMjE0LCAxNzYsIDIsIDIyMCwgMTM2LCAyMiwgMjE5LCA3OSwgMjI0LCAKKyAgICAxODMsIDIzMiwgMTUyLCAyMiwgMiwgNTksIDQ4LCAyMzIsIDE1MiwgMTc3LCAyLCA1OSwgNDgsIDUyLCAyMzIsIDE1MiwgCisgICAgMjU0LCAxMjYsIDUyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDExMywgMjM1LCAyMDcsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMTEzLCAKKyAgICAyMzUsIDIwNywgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMTksIDg3LCAyMzMsIDkxLCAyMjYsIDE2MiwgMjE5LCA4NywgMjMzLCAKKyAgICA5MSwgMjU0LCAxMjYsIDIzMiwgMTUyLCAxNzcsIDIyNiwgMTI1LCAyMzIsIDE1MiwgMjU0LCAxMjYsIDIzMiwgMTUyLCAyMiwgCisgICAgMiwgMjMwLCAyMjksIDIxOCwgMTQxLCAyMzIsIDE1MiwgMTc3LCAyLCAyMzAsIDIyOSwgMjE4LCAxNDEsIDIzMiwgMTUyLCAKKyAgICAyMiwgMiwgMjAzLCAyNDgsIDE2NCwgMjMyLCAxNTIsIDE3NywgMiwgMjAzLCAyNDgsIDE2NCwgMjMyLCAxNTIsIDIyLCAyLCAKKyAgICA1MiwgMjI2LCAxMjcsIDIzMiwgMTUyLCAyMiwgMiwgMjE0LCAxODMsIDIzMiwgMTUyLCAyMiwgMiwgNTIsIDIxNCwgMTgzLCAKKyAgICA0LCAyMTMsIDI1MSwgMiwgMjE0LCAxODMsIDIzMiwgMTUyLCAxNzcsIDIsIDUyLCAyMjYsIDEyNywgMjMyLCAxNTIsIDE3NywgCisgICAgMiwgNTIsIDIxNCwgMTgzLCAyMTAsIDE2MCwgMTg5LCAyNDcsIDEzNywgMjU0LCA4NywgMjEwLCAxNjAsIDE4OSwgMjIzLCAKKyAgICAxNTEsIDI1NCwgODcsIDI0NSwgMTA2LCA1LCAyLCA1OSwgNTEsIDI0MCwgMTExLCAyLCA1OSwgNDgsIDIxNSwgMjEyLCAyMDMsIAorICAgIDI1MiwgMTQ5LCAyLCA1MiwgNjcsIDkxLCAyMTUsIDIxMiwgMjAzLCAyNTIsIDE0OSwgMiwgMjE1LCAyMTIsIDY3LCA5MSwgCisgICAgMjE2LCA5MCwgMjI2LCAxNzIsIDIsIDU5LCA0OCwgMjE2LCA5MCwgMjI2LCAxNzIsIDIsIDIyMiwgMjMxLCAyNDcsIDEyNiwgCisgICAgMjE5LCAxNjQsIDIzMCwgMTg3LCAyMTksIDE2MywgMjQ5LCAyMDcsIDIsIDU5LCA0OCwgMjQ1LCAxMDYsIDIsIDI1MywgMjI0LCAKKyAgICAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCAyLCAyNTAsIDM5LCAyNTUsIDIzLCAyNTQsIDU2LCAxMjgsIDE3NywgMTI4LCAxMTIsIAorICAgIDI0NSwgMTA2LCA1LCA3MiwgOTYsIDUwLCA5NiwgNSwgNzIsIDI0NSwgMTA2LCA1MCwgMjQ1LCAxMDYsIDUsIDcyLCAyMTYsIAorICAgIDkwLCAyMjYsIDE3MSwgNTIsIDI0OSwgMjM1LCAyNDUsIDEwNywgMTEzLCAyNDksIDIwMiwgMjQ1LCAxMDYsIDIxOSwgMTc4LCAKKyAgICAxMzQsIDI0OSwgMjAyLCAyNDUsIDEwNiwgMjE5LCAxNzgsIDI0NSwgMTA2LCA1LCAyLCAxMTMsIDE3MCwgNzIsIDIyLCAxMTMsIAorICAgIDE3MCwgNTEsIDI0NSwgMTAyLCAyLCAyNDQsIDE5LCAxNzAsIDQ4LCAyMzMsIDIxLCAyLCAyNTAsIDQ0LCAyMzUsIDIyMiwgCisgICAgMjQyLCAxMzcsIDIsIDI1MCwgNDQsIDIzNSwgMjIyLCAyMzMsIDIxLCAyLCAyMjQsIDE2LCAxNjQsIDQ4LCAyNDIsIDEzNywgCisgICAgMiwgMjI0LCAxNiwgMTY0LCA0OCwgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDExMiwgMjQyLCAxMzcsIDE3NywgMjE5LCAKKyAgICA5OSwgMTI4LCAxMTIsIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgMjM1LCAyMjIsIDI0MiwgCisgICAgMTM3LCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDIzNSwgMjIyLCAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIAorICAgIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyNDIsIDEzNywgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgCisgICAgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA3MiwgMjIyLCAyNTQsIDI0MiwgMTM3LCAxNzcsIAorICAgIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDcyLCAyMzMsIDUyLCAyMzMsIDIxLCAxNzcsIDI1NCwgNTcsIDI0MiwgCisgICAgMTM3LCAxNzcsIDI1NCwgNTcsIDIzMywgMjEsIDIyLCAyMTksIDE1NSwgMjI4LCA1NywgMTI4LCAxMTIsIDI0MiwgMTM3LCAKKyAgICAyMiwgMjE5LCAxNTUsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMzMsIDIxLCAyMiwgMjI4LCA1NywgMjU0LCA1NywgMjQyLCAxMzcsIAorICAgIDIyLCAyMjgsIDU3LCAyNTQsIDU3LCAyMzMsIDIxLCA3MiwgMjQ2LCAxMTksIDEyOCwgNzIsIDI0MiwgMTM2LCAyNDIsIDEzNywgCisgICAgNzIsIDI0NiwgMTE5LCAxMjgsIDcyLCAyMzMsIDIwLCAyMzMsIDIxLCA3MiwgMjE5LCAxNjQsIDE3NywgMjQ1LCAxMDcsIAorICAgIDI0MiwgMTM3LCA3MiwgMjE5LCAxNjQsIDE3NywgMjQ1LCAxMDcsIDIzMywgMjEsIDcyLCAyMTksIDE2NCwgNzIsIDI0MiwgCisgICAgMTM2LCAyNDIsIDEzNywgNzIsIDIxOSwgMTY0LCA3MiwgMjMzLCAyMCwgMjMzLCAyMSwgNzIsIDI0MiwgMTM3LCA3MiwgMjQ2LCAKKyAgICAxMTksIDI0NSwgMTA3LCAyNDIsIDEzNywgNzIsIDIzMywgMjEsIDcyLCAyNDYsIDExOSwgMjQ1LCAxMDcsIDIzMywgMjEsIAorICAgIDcyLCAyMTksIDk5LCAxMjgsIDcyLCAyNDIsIDEzNywgNzIsIDIxOSwgOTksIDI0NSwgMTA3LCAyNDIsIDEzNywgNzIsIDIxOSwgCisgICAgOTksIDEyOCwgNzIsIDIzMywgMjEsIDcyLCAyMTksIDk5LCAyNDUsIDEwNywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIAorICAgIDIzMywgMjAsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAKKyAgICAxNzcsIDIzMywgMjEsIDIsIDU5LCAyMzUsIDIyMiwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM3LCAyLCAKKyAgICA1OSwgMjM1LCAyMjIsIDI0NiwgMTE5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMjQ2LCAxMTksIDEyOCwgMjE2LCAKKyAgICA0MywgMTc3LCAyNDIsIDEzNiwgMjQ2LCAxMTksIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAyNDYsIAorICAgIDExOSwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAyMTksIDE2NCwgMTc3LCAyMzMsIDIwLCAyMTksIAorICAgIDE2NCwgMTc3LCAyNDIsIDEzNiwgMjE5LCAxNjQsIDcyLCAyMzMsIDIxLCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTksIDE2NCwgCisgICAgNzIsIDI0MiwgMTM3LCA3MiwgMjQ1LCAxMDYsIDUwLCA1MiwgMjI5LCA5NiwgMjMzLCAyMCwgNTIsIDIyOSwgOTYsIDI0MiwgCisgICAgMTM2LCA1MiwgMjI5LCA5NiwgMjMzLCAyMSwgMiwgMjE0LCAxODMsIDI0MiwgMTM3LCAyMjYsIDEyNSwgMjMzLCAyMCwgMjQyLCAKKyAgICAxMzcsIDI1MiwgMzgsIDIzMywgMjAsIDIzMywgMjEsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDAsIDI0MiwgMTM3LCAyNTAsIAorICAgIDgsIDI1MSwgODYsIDI0OSwgMTAwLCAyMzMsIDIxLCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAxLCA3MiwgMjE5LCA5OSwgCisgICAgMjQ1LCAxMDcsIDI0MiwgMTM3LCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAxLCA3MiwgMjE5LCA5OSwgMjQ1LCAxMDcsIAorICAgIDIxOSwgODAsIDIxNiwgMjAxLCAyMzMsIDg5LCAyMTYsIDIwMSwgMjE5LCA4MCwgMjE2LCAyMDIsIDE3NywgMTI4LCAxMTIsIAorICAgIDIzMywgODksIDIxNiwgMjAyLCAxNzcsIDEyOCwgMTEyLCAyNDUsIDEwNiwgNSwgMiwgMjUxLCAxMTYsIDQ4LCAyMjQsIDIwNiwgCisgICAgNzIsIDIxOSwgMTU1LCAyNDUsIDEwNiwgNTAsIDIxOCwgNTcsIDcyLCAyMTksIDE1NSwgMjQ1LCAxMDYsIDUwLCAyMjQsIAorICAgIDIwNiwgNzIsIDIxOSwgMTU1LCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDIxOSwgMTU1LCAyMjgsIDU3LCAKKyAgICAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgNTcsIDcyLCAyNDUsIDEwNiwgNTAsIDIyNCwgCisgICAgMjA2LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAKKyAgICAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIyNCwgMjA2LCA3MiwgMjI4LCAKKyAgICA1NywgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjI4LCA1NywgMjU0LCAxNTYsIDEyOCwgMTEyLCA1MiwgCisgICAgMjI0LCAyMDUsIDUyLCAyMTgsIDU2LCAyMTgsIDY1LCAyLCAyNDcsIDEyOCwgMjE4LCAyMywgMiwgMjQ3LCAxMjgsIDIxOCwgCisgICAgNjUsIDIsIDk2LCA1LCA1MSwgMjE4LCAyMywgMiwgOTYsIDUsIDUxLCAyMTgsIDY1LCAyLCAyMzAsIDg5LCA1LCA1MSwgMjE4LCAKKyAgICAyMywgMiwgMjMwLCA4OSwgNSwgNTEsIDIxOCwgNjUsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyMTgsIAorICAgIDIzLCA2NCwgMTc3LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgMjE4LCA2NSwgNjQsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgCisgICAgMjMsIDY0LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTgsIDY1LCA2NCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMTgsIDIzLCAKKyAgICA2NCwgNzIsIDIxNiwgOTAsIDIyNiwgMTcxLCAyMTgsIDY1LCA2NCwgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCAyMywgCisgICAgNjQsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNjUsIDY0LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgMjMsIAorICAgIDY0LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDQyLCA0MywgMjA0LCA5MywgMjI2LCAxNzEsIDQyLCA0NCwgMjA0LCA5MywgCisgICAgMjI2LCAxNzEsIDI1MCwgOCwgMjE4LCA2NCwgMjUwLCA4LCAyMTgsIDIyLCAyNTAsIDgsIDIxOCwgNjUsIDE3NywgMTI4LCAKKyAgICAxMTIsIDI1MCwgOCwgMjE4LCAyMywgMTc3LCAxMjgsIDExMiwgMjE4LCA2NSwgNzIsIDIxOCwgMjIsIDIxOCwgMjMsIDcyLCAKKyAgICAyMTgsIDY0LCAyMTgsIDY1LCA3MiwgMjE4LCA2NCwgMjE4LCAyMywgNzIsIDIxOCwgMjIsIDIxOCwgMjMsIDI1MiwgMzgsIAorICAgIDIxOCwgNjQsIDIxOCwgMjMsIDI1MiwgMzgsIDIyLCAyMzUsIDcxLCAyNTEsIDg2LCAyNDgsIDE2NSwgMiwgMjE4LCA2NCwgCisgICAgMjQ1LCAxNzgsIDY0LCAyMjYsIDE3NCwgMjQ2LCAxMTEsIDIyNSwgNTEsIDIsIDIxNywgMTMsIDIxNiwgMTQsIDIxNSwgMjQxLCAKKyAgICAyMzUsIDIwNSwgMjQ0LCAyOSwgMjI4LCA3MCwgMjE5LCAyNTMsIDQzLCAyMTcsIDg4LCAyMTksIDI1MywgMTI0LCAyMTcsIAorICAgIDg4LCAyMTksIDI1MywgMTIwLCAyMTcsIDg4LCAyMjUsIDE3NSwgMiwgMjIyLCA5MywgNjcsIDI1MiwgMTQ5LCAyMTUsIDIxMiwgCisgICAgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDksIDQzLCAyMTUsIDkzLCA2NywgMjUyLCAxNDksIDUyLCA0MywgMjE1LCAKKyAgICA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQzLCAyMTUsIDkzLCAyMDAsIDI0OCwgMTY1LCAyNDMsIDI1MSwgNDMsIDIzMSwgCisgICAgNjgsIDY0LCA1MiwgMjEzLCAyMzksIDIxOSwgMjUzLCAxMjQsIDIxNywgODksIDIsIDIyNiwgMTI3LCAyMTksIDI1MywgMTIwLCAKKyAgICAyMTcsIDg5LCAyLCAyMTQsIDE4MywgMjE5LCAyNTMsIDEyMCwgMjE3LCA4OSwgNzIsIDIxOSwgMjUzLCAxMjQsIDIxNywgODgsIAorICAgIDUyLCAxMjQsIDIxNywgODgsIDUyLCAxMjAsIDIxNywgODgsIDUyLCAyMTgsIDEwNSwgMjI4LCA1NywgNTAsIDIyMywgNTIsIAorICAgIDUyLCAyMTgsIDEwNSwgMjI4LCA1NywgNTAsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDcsIDE4MywgMiwgMjIzLCA1MiwgMjI5LCAKKyAgICAxMDYsIDIxOSwgOTcsIDY3LCAyMzIsIDIyMCwgMiwgMjUwLCA0NCwgNDgsIDY3LCAyMzIsIDIyMCwgMiwgMjUwLCA0NCwgNTEsIAorICAgIDEyNCwgMjE3LCA4OSwgMiwgMjUwLCA0NCwgNTEsIDIyNiwgMTIsIDIsIDIwMywgOTEsIDIyNiwgMTIsIDIsIDIxNiwgOTAsIAorICAgIDIyNiwgMTcxLCAyMTUsIDIxMiwgNjcsIDI1MiwgMTQ5LCAyNTEsIDI1MiwgMjIzLCA5NCwgMjE1LCAyMTIsIDY3LCAyNTIsIAorICAgIDE0OSwgMiwgMjAzLCA5MSwgMjE1LCAyMTIsIDI0OSwgMjM1LCAyMjYsIDE3MSwgMjE1LCAyMTIsIDIyOSwgOTYsIDIzMywgCisgICAgMjAsIDIxNSwgMjEyLCAyMjksIDk2LCAyNDIsIDEzNiwgMjQ2LCAxMTksIDIxOSwgOTksIDIzMywgMjEsIDE3NywgMTI4LCAKKyAgICAxMTIsIDI0NiwgMTE5LCAyMTksIDk5LCAyNDIsIDEzNywgMTc3LCAxMjgsIDExMiwgMjE1LCAyMTIsIDIxOSwgNDksIDI1MSwgCisgICAgMjUyLCAyMjMsIDk0LCAyMzMsIDkxLCAyMTUsIDIxMiwgNjcsIDI1MiwgMTQ5LCAyMjYsIDE3MSwgNTIsIDIxOSwgNDksIAorICAgIDIyNiwgMTcxLCA3MSwgNjcsIDEzMCwgMjMwLCAyOSwgNzEsIDY3LCAxMzAsIDIyOCwgNjEsIDI0NSwgMjI4LCA3MSwgNzUsIAorICAgIDIyOCwgNjEsIDIxMiwgOSwgNzEsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgNzEsIDc1LCAyMTksIDMwLCAyMTIsIDksIDcxLCAKKyAgICA3NSwgNDMsIDQ0LCA3MSwgNzUsIDE0MCwgODUsIDc1LCAyMTQsIDE1MywgODUsIDc1LCAyNDYsIDExMiwgODUsIDc1LCAyMjgsIAorICAgIDYxLCAyNDUsIDIyOCwgODUsIDc1LCAyMjgsIDYxLCAyMTIsIDksIDg1LCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDg1LCA3NSwgCisgICAgMjE5LCAzMCwgMjEyLCA5LCA4NSwgNzUsIDQzLCA0NCwgODUsIDc1LCAxMjAsIDEyNCwgODUsIDc1LCA5NywgODAsIDIsIAorICAgIDIxNiwgNzgsIDI0NiwgMTExLCA5NywgODAsIDIsIDIxNiwgNzgsIDIxNCwgMTUyLCAxNDAsIDgwLCAyLCAyMTYsIDc4LCAKKyAgICAyNDYsIDExMSwgMTQwLCA4MCwgMiwgMjE2LCA3OCwgMjE0LCAxNTIsIDQyLCAyLCAyMTYsIDE1LCAxNjMsIDI1MSwgMjI5LCAKKyAgICA0MiwgMiwgMjUxLCAxODMsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAyMTQsIDE2MCwgNDQsIDI0OCwgNywgMTYzLCAyNTEsIAorICAgIDIyOSwgNDIsIDIsIDIzMiwgMTE0LCA0MywgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCAyNDgsIDEsIDIsIDQzLCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNDgsIDEsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCAyNDgsIDEsIDIsIDIxNiwgMTUsIDE2MywgMjUxLCAyMjksIAorICAgIDI0OCwgMSwgMiwgMjUxLCAxODMsIDE2MywgMjUxLCAyMjksIDI0NiwgMTI2LCAyMTgsIDIzNiwgODUsIDIzMywgOTEsIDIxOCwgCisgICAgMjM2LCA3MSwgMjMzLCA5MSwgMjE4LCAyMzYsIDg1LCAyMTMsIDE4NywgNCwgMjE4LCAyMzYsIDcxLCAyMTMsIDE4NywgNCwgCisgICAgMjE4LCAyMzYsIDg1LCAyMjUsIDE5MywgNzEsIDIyNSwgMTkzLCA3MSwgMjQxLCAyMDAsIDg1LCAyNDEsIDIwMCwgMjAzLCAKKyAgICA4NSwgMjQxLCAyMDAsIDg1LCAyMzMsIDkxLCAyNTAsIDQzLCA4NSwgMjMxLCA4NywgMjQ4LCAwLCA3MSwgMjMxLCA4NywgCisgICAgMjQ4LCAwLCA4NSwgMjMxLCA4NywgMjMyLCAxMTAsIDcxLCAyMzEsIDg3LCAyMzIsIDExMCwgODUsIDQsIDI0OCwgMCwgODUsIAorICAgIDQsIDIzMiwgMTEwLCA3MSwgNCwgMjMyLCAxMTAsIDg1LCAyMDMsIDI0NSwgMTcyLCA3MSwgMjAzLCAyNDUsIDE3MiwgODUsIAorICAgIDY3LCAyNDUsIDE3MiwgNzEsIDY3LCAyNDUsIDE3MiwgNDMsIDgwLCAyLCA0LCAyNTAsIDQzLCAxMzQsIDE0MCwgMjUzLCAKKyAgICAyNTUsIDQzLCA4MCwgMiwgMzcsIDIyNSwgMjUsIDIwMCwgMTQwLCAyMTgsIDIzMiwgNzUsIDE0MCwgMjE1LCA1OCwgODAsIDIsIAorICAgIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMjQzLCAyNTEsIDEzMCwgCisgICAgMTQwLCAyMTUsIDU4LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDc1LCAxNDAsIDgwLCAyLCAyNDYsIDEyNiwgMjE4LCAxNDEsIAorICAgIDE0MCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgMTQwLCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgMTQwLCAKKyAgICAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCAxNDAsIAorICAgIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDgwLCAyMTYsIDE0MCwgMjExLCAxNzgsIDIxMiwgCisgICAgMzYsIDgwLCAyMjUsIDEwLCAyNDcsIDIwMywgMjMzLCA1MiwgMjQ1LCAxMDYsIDUsIDcyLCAxNDAsIDc1LCAyMjMsIDUzLCAKKyAgICAyMTYsIDkwLCAyMjYsIDE3MiwgNzIsIDE0MCwgNzUsIDE0MCwgODAsIDcyLCAyMjMsIDUzLCAyNTQsIDE1NiwgMTI4LCAxMTIsIAorICAgIDk3LCA4MCwgMjE2LCAxNDAsIDI0MiwgMTM2LCA5NywgODAsIDIxNiwgMTQwLCAyMTgsIDIyLCAxNDAsIDIyNCwgMjcsIDc1LCAKKyAgICA5NywgMjI0LCAyNywgNzUsIDIyMywgNTMsIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgOTcsIDc1LCA5NywgODAsIDcyLCAyMjMsIAorICAgIDUzLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDI1NCwgCisgICAgMTU2LCAxMjgsIDExMiwgMTQwLCA4MCwgNzIsIDIyMywgNTMsIDIxNiwgOTAsIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyMjMsIAorICAgIDUzLCAyMTYsIDkwLCAyMjYsIDE3MSwgNzEsIDIzMSwgODcsIDIxOCwgMTU4LCA4NSwgNCwgMjE4LCAxNTgsIDcxLCA0LCAKKyAgICAyMTgsIDE1OCwgODUsIDIyMiwgMjUwLCAyMjUsIDE5MywgNzEsIDIyMiwgMjUwLCAyMjUsIDE5MywgMTE0LCAyMzMsIDkxLCAKKyAgICAyNTAsIDQzLCAxMTQsIDIyNiwgMTI4LCAyLCAyMjYsIDEyOCwgMjM1LCAyMjIsIDExNCwgMjUwLCA0NCwgMiwgMjUwLCA0NCwgCisgICAgMjM1LCAyMjIsIDExNCwgMjUwLCA0MywgMTE0LCAzNywgMjIyLCAwLCAxNDUsIDYsIDEsIDI1MywgMTY3LCAxNDUsIDYsIDEsIAorICAgIDI1MSwgMTI1LCAxNDUsIDYsIDEsIDIxMywgMjUzLCAxNDUsIDYsIDEsIDI0MiwgMTkyLCAxNDUsIDYsIDEsIDI0NywgMTQ4LCAKKyAgICAxNDUsIDYsIDEsIDIxMSwgMjEsIDE0NSwgNiwgMSwgMjEwLCA2OCwgMTQ1LCA2LCAxLCAyNDYsIDQyLCAxNDUsIDYsIDEsIAorICAgIDIxMCwgOTEsIDE0NSwgNiwgMSwgMjM1LCAxNTQsIDE0NSwgNiwgMSwgNjUsIDIzNSwgMTU0LCAxNDUsIDYsIDEsIDc0LCAKKyAgICAxNDUsIDYsIDEsIDI0NywgMTY4LCAxNDUsIDYsIDEsIDIzNCwgMjQ2LCAxNDUsIDYsIDEsIDIzMiwgMTkyLCAxNDUsIDYsIDEsIAorICAgIDIzMCwgMzQsIDE0NSwgNiwgMSwgMjI5LCAxOTYsIDE0NSwgNiwgMSwgMjI2LCAxODksIDE0NSwgNiwgMSwgMjI1LCA3LCAKKyAgICAxNDUsIDYsIDEsIDIyMiwgMjMwLCAxNDUsIDYsIDEsIDIxOSwgODUsIDE0NSwgNiwgMSwgMjE1LCA4MSwgMTQ1LCA2LCAxLCAKKyAgICAyMTQsIDIwMSwgMTQ1LCA2LCAxLCAyNDMsIDI1NCwgMTQ1LCA2LCAxLCAyNDEsIDIwNiwgMTQ1LCA2LCAxLCAyMjYsIDEzOSwgCisgICAgMTQ1LCA2LCAxLCAyMjUsIDIyNCwgMTQ1LCA2LCAxLCAyMTksIDIzMCwgMTQ1LCA2LCAxLCAyMTUsIDE2OCwgMTQ1LCA2LCAxLCAKKyAgICAyNTAsIDgzLCAxNDUsIDYsIDEsIDIyMCwgMTA0LCAxNDUsIDYsIDEsIDIxMSwgMjcsIDE0NSwgNiwgMSwgMjExLCAyOSwgCisgICAgMTQ1LCA2LCAxLCAyMTEsIDU3LCAxNDUsIDYsIDEsIDIxOCwgMjU1LCAxNjIsIDE0NSwgNiwgMSwgMjEwLCAyMTIsIDE0NSwgCisgICAgNiwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNiwgMSwgNCwgMjEwLCAxODQsIDIsIDIxNywgNzgsIDE0NSwgNiwgMSwgMjEwLCAKKyAgICAyNDQsIDE0NSwgNiwgMSwgMjM1LCAxOTEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgCisgICAgNiwgMSwgMjM1LCAxOTEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjQ0LCA5MCwgMTQ1LCA2LCAxLCAyMzUsIAorICAgIDE1MiwgMTQ1LCA2LCAxLCAyMTksIDIyOSwgMTQ1LCA2LCAxLCAyMTUsIDIwMywgNjEsIDE0NSwgNiwgMSwgMjMzLCA4MSwgCisgICAgMjMwLCAzNCwgMTQ1LCA0LCAxLCAyNTMsIDE2NywgMTQ1LCA0LCAxLCAyNTEsIDEyNSwgMTQ1LCA0LCAxLCAyMTMsIDI1MywgCisgICAgMTQ1LCA0LCAxLCAyNDIsIDE5MiwgMTQ1LCA0LCAxLCAyNDcsIDE0OCwgMTQ1LCA0LCAxLCAyMTEsIDIxLCAxNDUsIDQsIDEsIAorICAgIDIxMCwgNjgsIDE0NSwgNCwgMSwgMjQ2LCA0MiwgMTQ1LCA0LCAxLCAyMTAsIDkxLCAxNDUsIDQsIDEsIDIzNSwgMTU0LCAKKyAgICAxNDUsIDQsIDEsIDY1LCAyMzUsIDE1NCwgMTQ1LCA0LCAxLCA3NCwgMTQ1LCA0LCAxLCAyNDcsIDE2OCwgMTQ1LCA0LCAxLCAKKyAgICAyMzQsIDI0NiwgMTQ1LCA0LCAxLCAyMzIsIDE5MiwgMTQ1LCA0LCAxLCAyMzAsIDM0LCAxNDUsIDQsIDEsIDIyOSwgMTk2LCAKKyAgICAxNDUsIDQsIDEsIDIyNiwgMTg5LCAxNDUsIDQsIDEsIDIyNSwgNywgMTQ1LCA0LCAxLCAyMjIsIDIzMCwgMTQ1LCA0LCAxLCAKKyAgICAyMTksIDg1LCAxNDUsIDQsIDEsIDIxNSwgODEsIDE0NSwgNCwgMSwgMjE0LCAyMDEsIDE0NSwgNCwgMSwgMjQzLCAyNTQsIAorICAgIDE0NSwgNCwgMSwgMjQxLCAyMDYsIDE0NSwgNCwgMSwgMjI2LCAxMzksIDE0NSwgNCwgMSwgMjI1LCAyMjQsIDE0NSwgNCwgMSwgCisgICAgMjE5LCAyMzAsIDE0NSwgNCwgMSwgMjE1LCAxNjgsIDE0NSwgNCwgMSwgMjUwLCA4MywgMTQ1LCA0LCAxLCAyMjAsIDEwNCwgCisgICAgMTQ1LCA0LCAxLCAyMTEsIDI3LCAxNDUsIDQsIDEsIDIxMSwgMjksIDE0NSwgNCwgMSwgMjExLCA1NywgMTQ1LCA0LCAxLCAKKyAgICAyMTgsIDI1NSwgMTYyLCAxNDUsIDQsIDEsIDIxMCwgMjEyLCAxNDUsIDQsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDQsIAorICAgIDIxMCwgMTg0LCAyLCAyMTcsIDc4LCAxNDUsIDQsIDEsIDIxMCwgMjQ0LCAxNDUsIDQsIDEsIDIzNSwgMTkxLCA0LCAyMTAsIAorICAgIDE4MywgMTQ1LCA0LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDIzNSwgMTkxLCAyNTIsIDEsIDIxMCwgMTgzLCAKKyAgICAxNDUsIDQsIDEsIDI0NCwgOTAsIDE0NSwgNCwgMSwgMjM1LCAxNTIsIDE0NSwgNCwgMSwgMjE5LCAyMjksIDE0NSwgNCwgMSwgCisgICAgMjE1LCAyMDMsIDYxLCAxNDUsIDQsIDEsIDIzMywgODEsIDIzMCwgMzQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA1MiwgMTMwLCAKKyAgICA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgNTIsIDEzMCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDYsIAorICAgIDEsIDIyNiwgMTEwLCAyLCA5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDExNiwgMiwgOTEsIAorICAgIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNDgsIDQ3LCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAKKyAgICAyNDgsIDQ3LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCA0NywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI0OCwgNDcsIDcsIAorICAgIDYsIDEsIDI1NCwgMTUxLCA3LCA2LCAxLCAyMzIsIDU1LCAyLCAxMDMsIDcsIDYsIDEsIDIxNSwgOTQsIDYxLCA3LCA2LCAxLCAKKyAgICAyMTUsIDk0LCAyNTQsIDE1MSwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDQ0LCAxMDMsIDcsIDYsIDEsIDIxMiwgOTksIDIsIAorICAgIDEwMywgNywgNCwgMSwgMjEyLCA5OSwgMiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ5LCAxMDgsIDcsIDYsIDEsIAorICAgIDE2MywgMjQyLCA2NywgNywgNCwgMSwgMTYzLCAyNDIsIDY3LCA3LCA0LCAxLCAyMTcsIDc2LCAyMjUsIDEzNiwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyMjgsIDU1LCA3LCA0LCAxLCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMjE3LCA3OCwgNywgNCwgMSwgMTQ0LCAyLCAKKyAgICAxMjEsIDIyMiwgMjM3LCAyMzUsIDIyMiwgNywgMSwgNCwgNiwgMjE1LCA5NCwgNzYsIDcsIDIxOCwgNjYsIDQsIDEsIDIzNSwgCisgICAgMTUwLCA1OCwgMSwgNiwgMjE0LCAxMDUsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDIxNywgMjUxLCAyMTcsIDc4LCA3LCA2LCAxLCAKKyAgICAyMTAsIDE2MCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDgxLCA2LCAxLCAyNTQsIDE3MywgODEsIDQsIDEsIDI1NCwgMTczLCAKKyAgICA4MSwgNiwgMSwgMjEzLCAxNzMsIDgxLCA0LCAxLCAyMTMsIDE3MywgODEsIDYsIDEsIDI0MywgMTE0LCA4MSwgNCwgMSwgCisgICAgMjQzLCAxMTQsIDgxLCA2LCAxLCAyNDgsIDE5OSwgODEsIDQsIDEsIDI0OCwgMTk5LCA4MSwgNiwgMSwgMjQ1LCAyMDIsIDgxLCAKKyAgICA0LCAxLCAyNDUsIDIwMiwgODEsIDYsIDEsIDIxOSwgMzUsIDgxLCA0LCAxLCAyMTksIDM1LCA4MSwgNiwgMSwgMjEwLCAxMDEsIAorICAgIDgxLCA0LCAxLCAyMTAsIDEwMSwgODEsIDYsIDEsIDI0MSwgMjU1LCA4MSwgNCwgMSwgMjQxLCAyNTUsIDgxLCA2LCAxLCAKKyAgICAyMTYsIDE3OCwgODEsIDQsIDEsIDIxNiwgMTc4LCA4MSwgNiwgMSwgMjQwLCAxMjMsIDgxLCA0LCAxLCAyNDAsIDEyMywgODEsIAorICAgIDYsIDEsIDIzNCwgMjMzLCA4MSwgNCwgMSwgMjM0LCAyMzMsIDgxLCA2LCAxLCAyMzMsIDc4LCA4MSwgNCwgMSwgMjMzLCA3OCwgCisgICAgODEsIDYsIDEsIDIzMCwgMjM1LCA4MSwgNCwgMSwgMjMwLCAyMzUsIDgxLCA2LCAxLCAyMjgsIDIzOCwgODEsIDQsIDEsIAorICAgIDIyOCwgMjM4LCA4MSwgNiwgMSwgMjMzLCAyMzksIDgxLCA0LCAxLCAyMzMsIDIzOSwgODEsIDYsIDEsIDc4LCA4MSwgNCwgMSwgCisgICAgNzgsIDgxLCA2LCAxLCAyMjUsIDExMSwgODEsIDQsIDEsIDIyNSwgMTExLCA4MSwgNiwgMSwgMjIyLCAyMTMsIDgxLCA0LCAxLCAKKyAgICAyMjIsIDIxMywgODEsIDYsIDEsIDIxOSwgMTY3LCA4MSwgNCwgMSwgMjE5LCAxNjcsIDgxLCA2LCAxLCAyMTcsIDQyLCA4MSwgCisgICAgNCwgMSwgMjE3LCA0MiwgODEsIDYsIDEsIDIxNCwgMjI5LCA4MSwgNCwgMSwgMjE0LCAyMjksIDgxLCA2LCAxLCAyNDQsIAorICAgIDEyOSwgODEsIDQsIDEsIDI0NCwgMTI5LCA4MSwgNiwgMSwgMjM0LCAxMTgsIDgxLCA0LCAxLCAyMzQsIDExOCwgODEsIDYsIAorICAgIDEsIDIyNCwgMTY0LCA4MSwgNCwgMSwgMjI0LCAxNjQsIDgxLCA2LCAxLCAyMjYsIDE4MiwgODEsIDQsIDEsIDIyNiwgMTgyLCAKKyAgICA4MSwgNiwgMSwgMjQ4LCA1LCAyNTQsIDE3OSwgODEsIDQsIDEsIDI0OCwgNSwgMjU0LCAxNzksIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDI1NCwgMjA1LCA4MSwgNCwgMSwgNTUsIDgxLCAyNTQsIDIwNSwgODEsIDYsIDEsIDI0OSwgMTIzLCAyNDUsIDIwMiwgODEsIAorICAgIDQsIDEsIDI0OSwgMTIzLCAyNDUsIDIwMiwgODEsIDYsIDEsIDI0OCwgNSwgMjM0LCAyMzMsIDgxLCA0LCAxLCAyNDgsIDUsIAorICAgIDIzNCwgMjMzLCA4MSwgNiwgMSwgMjQ4LCA1LCAyMjgsIDIzOCwgODEsIDQsIDEsIDI0OCwgNSwgMjI4LCAyMzgsIDgxLCA2LCAKKyAgICAxLCAyNDksIDEyMywgMjI4LCAyMzgsIDgxLCA0LCAxLCAyNDksIDEyMywgMjI4LCAyMzgsIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDIyNiwgMTgyLCA4MSwgNCwgMSwgNTUsIDgxLCAyMjYsIDE4MiwgODEsIDYsIDEsIDIyMSwgMjQ4LCA4MSwgNCwgMSwgMjIxLCAKKyAgICAyNDgsIDgxLCA2LCAxLCAyNDksIDEzNiwgMjIwLCA1NywgODEsIDQsIDEsIDI0OSwgMTM2LCAyMjAsIDU3LCA4MSwgNiwgMSwgCisgICAgNTUsIDgxLCAyMjAsIDU3LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDU3LCA4MSwgNiwgMSwgNTUsIDgxLCAyNDUsIDgzLCAKKyAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNDUsIDgzLCA4MSwgNiwgMSwgMjU0LCAxOTEsIDIzNCwgMTIzLCA4MSwgNCwgMSwgMjU0LCAKKyAgICAxOTEsIDIzNCwgMTIzLCA4MSwgNiwgMSwgMjQ4LCA1LCAyNDEsIDUyLCA4MSwgNCwgMSwgMjQ4LCA1LCAyNDEsIDUyLCA4MSwgCisgICAgNiwgMSwgNTUsIDgxLCAyNDEsIDUyLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDUyLCA4MSwgNiwgMSwgNTUsIDgxLCAxNjIsIAorICAgIDgxLCA0LCAxLCA1NSwgODEsIDE2MiwgODEsIDYsIDEsIDIzMywgMTU0LCAxNjIsIDgxLCA0LCAxLCAyMzMsIDE1NCwgMTYyLCAKKyAgICA4MSwgNiwgMSwgNTUsIDgxLCAyNDEsIDIyNCwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyMjQsIDgxLCA2LCAxLCA1NSwgODEsIAorICAgIDI0MiwgMiwgODEsIDQsIDEsIDU1LCA4MSwgMjQyLCAyLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDMsIDEwOSwgODEsIDQsIDEsIAorICAgIDU1LCA4MSwgMjQzLCAxMDksIDgxLCA2LCAxLCA1NSwgODEsIDI0NywgMTcxLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDcsIDE3MSwgCisgICAgODEsIDYsIDEsIDU1LCA4MSwgMjIwLCAyNCwgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCAyNCwgODEsIDYsIDEsIDU1LCAyMjcsIAorICAgIDIxMiwgMjIwLCAyNCwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjIwLCAyNCwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgCisgICAgMjI5LCAzMiwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjI5LCAzMiwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgMjI3LCAKKyAgICAxNTIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIyNywgMTUyLCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAyMTIsIDM3LCAKKyAgICA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMTIsIDM3LCA4MSwgMTYsIDIzNCwgMjUyLCA4MSwgMTYsIDIzMCwgMjM2LCAyMjIsIAorICAgIDIxMywgODEsIDE2LCAyMjUsIDExMiwgMjIyLCAyMTMsIDgxLCAxNiwgMjE4LCAxNDksIDgxLCAxNiwgMjE3LCA0MywgMjIyLCAKKyAgICAyMTMsIDgxLCAxNiwgMjM0LCAxMTksIDIyMiwgMjEzLCA4MSwgMTYsIDIyMCwgMjUsIDIxOSwgMTY3LCA4MSwgNiwgMSwgCisgICAgMjQ5LCAxMjMsIDIyMCwgNTcsIDgxLCA0LCAxLCAyNDksIDEyMywgMjIwLCA1NywgODEsIDYsIDEsIDI0OSwgMTIzLCAyNDMsIAorICAgIDEwOSwgODEsIDQsIDEsIDI0OSwgMTIzLCAyNDMsIDEwOSwgODEsIDM4LCAyMjgsIDIzOSwgNDgsIDgxLCAzOCwgMjE4LCAKKyAgICAyNDksIDI1MywgMjMyLCA4MSwgMzgsIDIxOCwgMjQ5LCAyMzMsIDI3LCA4MSwgNiwgMSwgMjUxLCAyMDcsIDIzNCwgMTIzLCAKKyAgICA4MSwgNCwgMSwgMjUxLCAyMDcsIDIzNCwgMTIzLCA4MSwgNTUsIDIyNywgMjEyLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgxLCAKKyAgICA1NSwgMjI3LCAyMTIsIDI0NywgMjA1LCAyMjQsIDE2LCA3OSwgODEsIDU1LCAyMjcsIDIxMiwgMjM1LCAyNDQsIDIyNCwgMTYsIAorICAgIDc5LCA4MSwgNTUsIDIyNywgMjEyLCAyMTMsIDI0MSwgMjQ3LCAxODAsIDgxLCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDgxLCAKKyAgICAyNDMsIDIzNiwgMjE4LCAxMzEsIDgxLCAyMzAsIDEyOSwgMjQ3LCAxODAsIDk4LCA0LCAxLCAyNTQsIDEzMSwgOTgsIDQsIDEsIAorICAgIDI1MiwgMTYwLCA5OCwgNCwgMSwgMjQzLCAxMTMsIDk4LCA0LCAxLCAyNDcsIDEzNiwgOTgsIDQsIDEsIDI0NSwgMTU4LCA5OCwgCisgICAgNCwgMSwgMjEzLCAxNjAsIDk4LCA0LCAxLCAyMTAsIDg5LCA5OCwgNCwgMSwgMjE3LCA2MSwgOTgsIDQsIDEsIDIzNiwgNiwgCisgICAgOTgsIDQsIDEsIDIzNCwgMjQwLCA5OCwgNCwgMSwgMjMzLCA4NywgOTgsIDQsIDEsIDIzMSwgMTkwLCA5OCwgNCwgMSwgMjI5LCAKKyAgICAyMDAsIDk4LCA0LCAxLCAyMjYsIDIwMCwgOTgsIDQsIDEsIDIyNiwgMjEsIDk4LCA0LCAxLCAyMTAsIDc4LCA5OCwgNCwgMSwgCisgICAgMjIzLCAxNzQsIDk4LCA0LCAxLCAyMjEsIDI0NSwgOTgsIDQsIDEsIDIxNywgNTEsIDk4LCA0LCAxLCAyMTQsIDE5MCwgOTgsIAorICAgIDQsIDEsIDIyNSwgMTQzLCA5OCwgNCwgMSwgMjM0LCAxMjcsIDk4LCA0LCAxLCAyNDIsIDI0OCwgOTgsIDQsIDEsIDIyNCwgCisgICAgNzYsIDk4LCA0LCAxLCAyMjAsIDIyLCA5OCwgNCwgMSwgMjUwLCAxMDUsIDk4LCA0LCAxLCAyNTEsIDE1LCA5OCwgNCwgMSwgCisgICAgMjM1LCAxMDYsIDk4LCA0LCAxLCAyNTAsIDQ4LCA5OCwgNCwgMSwgMjUwLCAxNTEsIDk4LCA0LCAxLCAyMTEsIDE2MywgOTgsIAorICAgIDQsIDEsIDIzNSwgMTE3LCA5OCwgNCwgMSwgMjQyLCA1MCwgOTgsIDQsIDEsIDI0MSwgMjQ1LCA5OCwgNCwgMSwgMjQxLCAKKyAgICAxODIsIDk4LCA0LCAxLCAyMTIsIDIyLCA5OCwgNCwgMSwgMjQyLCAxMSwgOTgsIDQsIDEsIDI0MSwgNzIsIDk4LCA0LCAxLCAKKyAgICAyMTAsIDI0NiwgOTgsIDQsIDEsIDI1NCwgMjQxLCAyMTYsIDEwOSwgMSwgMTkyLCAyMTYsIDEwOSwgMSwgMjExLCA5OSwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgOTgsIDIxNiwgMTA5LCAxLCAyMTEsIDg4LCAyMTYsIDEwOSwgMSwgMjExLCA4NiwgMjE2LCAKKyAgICAxMDksIDEsIDI1MiwgNDAsIDI1NSwgMjUsIDIxMSwgODEsIDIxNiwgMTA5LCAxLCAyMTEsIDgxLCAyMTYsIDEwOSwgMSwgCisgICAgMjExLCA5NiwgMjE2LCAxMDksIDEsIDIxMSwgOTMsIDIxNiwgMTA5LCAxLCAyMTEsIDk1LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA5NCwgMjE2LCAxMDksIDEsIDIxMSwgMTIsIDIxNiwgMTA5LCAxLCAyMTEsIDkwLCAyMTYsIDEwOSwgMSwgMjExLCA3OSwgCisgICAgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDc5LCAyMTYsIDEwOSwgMSwgMjExLCA3NiwgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgODQsIDIxNiwgMTA5LCAxLCAyNTIsIDQwLCAyNTUsIDI1LCAyMTEsIDg0LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgCisgICAgODQsIDIxNiwgMTA5LCAxLCAyMTEsIDgzLCAyMTYsIDEwOSwgMSwgMjExLCAxMDMsIDIxNiwgMTA5LCAxLCAyMTEsIDc3LCAKKyAgICAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNzcsIDIxNiwgMTA5LCAxLCAyMTEsIDY2LCAyMTYsIDEwOSwgMSwgMjE1LCAKKyAgICAxMTYsIDIxMSwgNjYsIDIxNiwgMTA5LCAxLCAyMTEsIDgsIDIxNiwgMTA5LCAxLCAyMTEsIDQ5LCAyMTYsIDEwOSwgMSwgCisgICAgMjU0LCAyMTYsIDIxMSwgNDksIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA0OSwgMjE2LCAxMDksIDEsIDIxMSwgNzUsIAorICAgIDIxNiwgMTA5LCAxLCAyMTEsIDc0LCAyMTYsIDEwOSwgMSwgMjExLCA3MSwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIAorICAgIDg1LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNjksIDIxNiwgMTA5LCAxLCAyMTEsIDY3LCAyMTYsIDEwOSwgMSwgCisgICAgMjEwLCAyMTIsIDIxNiwgMTA5LCAxLCAyMTEsIDY0LCAyMTYsIDEwOSwgMSwgMjExLCA2MywgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgODcsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA4NywgMjE2LCAxMDksIDEsIDI1MywgMTcxLCAyMTEsIDg3LCAyMTYsIAorICAgIDEwOSwgMSwgMjExLCA2MiwgMjE2LCAxMDksIDEsIDIxMSwgNjAsIDIxNiwgMTA5LCAxLCAyMTEsIDYxLCAyMTYsIDEwOSwgMSwgCisgICAgMjExLCA1OSwgMjE2LCAxMDksIDEsIDIxMSwgNTgsIDIxNiwgMTA5LCAxLCAyMTEsIDk3LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA1NiwgMjE2LCAxMDksIDEsIDIxMSwgNTQsIDIxNiwgMTA5LCAxLCAyMTEsIDUzLCAyMTYsIDEwOSwgMSwgMjExLCA1MiwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgNTAsIDIxNiwgMTA5LCAxLCAyMTcsIDM1LCAyMTEsIDUwLCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA0OCwgMjE2LCAxMDksIDEsIDIxMSwgNDcsIDIxNiwgMTA5LCAxLCAyMTAsIDI0NCwgMjE2LCAxMDksIDU4LCAxLCAyMzMsIAorICAgIDEzMiwgNzksIDIxNiwgMTA5LCAyMjAsIDE0MCwgNzksIDIxNiwgMTA5LCAxMTcsIDIzNSwgNjksIDI5LCAzLCAyMzIsIDE2MSwgCisgICAgMjksIDMsIDIzMCwgMTY1LCAyOSwgMywgMjIyLCAyMTEsIDI5LCAzLCAyMTksIDU5LCAyOSwgMywgMjIwLCA4LCAyOSwgMywgCisgICAgMjUxLCAyMTIsIDI5LCAzLCAyMTYsIDQyLCAyOSwgMywgMjQ5LCAyNDUsIDI5LCAzLCAyMjgsIDc3LCAyOSwgMywgMjI3LCAKKyAgICAxMzcsIDI5LCAzLCAyNDIsIDE4NywgMjI3LCA0LCAyOSwgMywgMjEwLCAyMiwgMjksIDMsIDI0NywgMTUxLCAyOSwgMywgCisgICAgMjQ4LCAxMTIsIDI5LCAzLCAyMzUsIDczLCAyOSwgMywgMjE2LCAxNTYsIDI5LCAzLCAyNTAsIDkzLCAyOSwgMywgMjI1LCAKKyAgICAxMjMsIDI5LCAzLCAyMjUsIDE4LCAyOSwgMywgMjQzLCA2LCAyOSwgMywgMjQzLCAyLCAyOSwgMywgMjQzLCAzLCAyOSwgMywgCisgICAgMjQzLCA0LCAyOSwgMywgMjE4LCAyMjUsIDI5LCAzLCAyMTgsIDE4MSwgMjksIDMsIDIxOCwgMTk0LCAyOSwgMywgMjE4LCAKKyAgICAyMjQsIDI5LCAzLCAyMTgsIDE5OCwgMjksIDMsIDIxOCwgMTk5LCAyOSwgMywgMjE4LCAxODYsIDI5LCAzLCAyNTAsIDIyMSwgCisgICAgMjksIDMsIDI1MCwgMjAwLCAyOSwgMywgMjUwLCAyMDIsIDI5LCAzLCAyNTAsIDIyMCwgMjksIDMsIDI1MCwgMjE4LCAyOSwgCisgICAgMywgMjUwLCAyMTksIDI5LCAzLCAyNTAsIDIwMSwgMjksIDMsIDIwOSwgMjQzLCAyOSwgMywgMjA5LCAyMjEsIDI5LCAzLCAKKyAgICAyMDksIDIzNCwgMjksIDMsIDIwOSwgMjQyLCAyOSwgMywgMjA5LCAyMzcsIDI5LCAzLCAyMDksIDIzOCwgMjksIDMsIDIwOSwgCisgICAgMjI2LCAyOSwgMywgMjUwLCAyMTYsIDI5LCAzLCAyNTAsIDIwMywgMjksIDMsIDI1MCwgMjA1LCAyOSwgMywgMjUwLCAyMTUsIAorICAgIDI5LCAzLCAyNTAsIDIxMywgMjksIDMsIDI1MCwgMjE0LCAyOSwgMywgMjUwLCAyMDQsIDI5LCAzLCAyMjMsIDIzOSwgMjksIAorICAgIDMsIDIyMywgMjI5LCAyOSwgMywgMjIzLCAyMzUsIDI5LCAzLCAyMjMsIDIzOCwgMjksIDMsIDIyMywgMjM2LCAyOSwgMywgCisgICAgMjIzLCAyMzcsIDI5LCAzLCAyMjMsIDIzNCwgMjksIDMsIDIzMywgMTY1LCAyOSwgMywgMjMzLCAxNTcsIDI5LCAzLCAyMzMsIAorICAgIDE2MCwgMjksIDMsIDIzMywgMTY0LCAyOSwgMywgMjMzLCAxNjEsIDI5LCAzLCAyMzMsIDE2MiwgMjksIDMsIDIzMywgMTU4LCAKKyAgICAyOSwgMywgMjExLCAxMzAsIDI5LCAzLCAyMTEsIDEyMCwgMjksIDMsIDIxMSwgMTI2LCAyOSwgMywgMjExLCAxMjksIDI5LCAKKyAgICAzLCAyMTEsIDEyNywgMjksIDMsIDIxMSwgMTI4LCAyOSwgMywgMjExLCAxMjUsIDI5LCAzLCAyNDIsIDc4LCAyOSwgMywgCisgICAgMjQyLCA2OSwgMjksIDMsIDI0MiwgNzIsIDI5LCAzLCAyNDIsIDc3LCAyOSwgMywgMjQyLCA3NCwgMjksIDMsIDI0MiwgNzUsIAorICAgIDI5LCAzLCAyNDIsIDcxLCAzOCwgMzMsIDEsIDI1MiwgODMsIDM4LCAzMywgMSwgMjEzLCAyNTUsIDM4LCAzMywgMSwgMjQyLCAKKyAgICAyNDMsIDM4LCAzMywgMSwgMjQ4LCA5OCwgMzgsIDMzLCAxLCAyMTAsIDc0LCAzOCwgMzMsIDEsIDIxMCwgOTQsIDM4LCAzMywgCisgICAgMSwgMTc2LCAzOCwgMzMsIDEsIDI0NSwgMTgyLCAzOCwgMzMsIDEsIDI0NSwgMTY3LCAzOCwgMzMsIDEsIDI0NSwgMTU4LCAKKyAgICAzOCwgMzMsIDEsIDc4LCAzOCwgMzMsIDEsIDIyNSwgMjI0LCAzOCwgMzMsIDEsIDI0NSwgMTAwLCAzOCwgMzMsIDEsIDI0NSwgCisgICAgOTAsIDM4LCAzMywgMSwgMjE3LCAyMywgMzgsIDMzLCAxLCAxNjIsIDM4LCAzMywgMSwgMjE1LCAxNzksIDM4LCAzMywgMSwgCisgICAgMjUwLCAxMzksIDM4LCAzMywgMSwgMjIwLCAxMDQsIDM4LCAzMywgMSwgMjIwLCA2NywgMzgsIDMzLCAxLCAyNDQsIDkwLCAKKyAgICAzOCwgMzMsIDEsIDI0NSwgODksIDM4LCAzMywgMSwgNjEsIDM4LCAzMywgMSwgMjM2LCA2NywgMzgsIDMzLCAxLCAyNDcsIAorICAgIDE2OSwgMzgsIDMzLCAxLCAyMzAsIDE0NSwgMjE0LCAyMDUsIDM4LCAzMywgMSwgMjExLCA1OSwgMzgsIDMzLCAxLCAyMTAsIAorICAgIDIxMiwgMzgsIDMzLCAxLCAyMzUsIDE5MCwgNjEsIDM4LCAzMywgMSwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIAorICAgIDI1MiwgMSwgMjEwLCAxODMsIDM4LCAzMywgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAxODMsIDQ0LCAyNTQsIDExOCwgCisgICAgMjE4LCA2MSwgMjMxLCAxNTksIDQ0LCAyNTQsIDExOCwgMjQ2LCAxMjYsIDIxOCwgNjEsIDIzMSwgMTU5LCA0MywgMjE4LCAKKyAgICA2MSwgMTI3LCA0NCwgMjE4LCA2MSwgMTI3LCA0MywgMjQ2LCAxMjYsIDIxOCwgNjEsIDEyNywgNDQsIDI0NiwgMTI2LCAyMTgsIAorICAgIDYxLCAxMjcsIDIyMywgMTYwLCAyMzUsIDIwOSwgMjMxLCAxNTksIDIyMywgMTYwLCAyNDYsIDEyNiwgMjM1LCAyMDksIDIzMSwgCisgICAgMTU5LCAyNDYsIDEyNiwgMjE1LCAyNDIsIDIzMSwgMTU5LCA0MywgMjE1LCAyNDIsIDEyNywgNDQsIDIxNSwgMjQyLCAxMjcsIAorICAgIDIyMywgMTYwLCAyMTgsIDIzNiwgNDMsIDIyMywgMTYwLCAyMjYsIDIwMiwgMTI3LCA0NCwgMjIzLCAxNjAsIDIyNiwgMjAyLCAKKyAgICAxMjcsIDI0NSwgMjE4LCAyNDksIDE2NiwgMjI2LCAxNywgMjQ0LCAzMCwgMjI2LCAxNywgMjIzLCA1MiwgMjQ0LCAzMCwgCisgICAgMjI2LCAxNywgMjQwLCAxNzIsIDI0NiwgMTI2LCAyMjYsIDI1NSwgMjQ2LCAxMTIsIDI1NCwgMTI3LCAyMTQsIDE1MywgMjU0LCAKKyAgICAxMjcsIDI0NiwgMTI2LCAyMjIsIDI1MCwgMjU0LCAxMTcsIDUyLCAyMjYsIDI1MiwgMjQwLCAxNzUsIDIzNSwgMjAwLCAyMzUsIAorICAgIDIwOCwgMjI2LCA2MywgMjUxLCAxNjIsIDI0MCwgMTc2LCAyLCAyNDgsIDksIDIxNiwgOTAsIDIsIDIyMiwgMjM3LCA0OCwgCisgICAgNDMsIDEyMSwgMjI2LCA5LCAxMjcsIDQ0LCAxMjEsIDIyNiwgOSwgMTI3LCAyMTYsIDkwLCAyLCA1OSwgNDgsIDIxNiwgOTAsIAorICAgIDIsIDU5LCA1MSwgNDMsIDY3LCAyNTIsIDE0OSwgMiwgMjI0LCAxMCwgNDQsIDY3LCAyNTIsIDE0OSwgMiwgMjI0LCAxMCwgCisgICAgMjE2LCAxNSwgNDMsIDE2MywgMTI3LCAyMTYsIDE1LCA0NCwgMTYzLCAxMjcsIDI1MSwgMTgzLCA0MywgMTYzLCAxMjcsIAorICAgIDI1MSwgMTgzLCA0NCwgMTYzLCAxMjcsIDQzLCAyMTksIDE4OSwgMTA0LCAxMjcsIDQ0LCAyMTksIDE4OSwgMTA0LCAxMjcsIAorICAgIDQzLCA1MiwgMjI2LCA3LCA0NCwgNTIsIDIyNiwgNywgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDEyMywgCisgICAgNTksIDExNSwgMTEzLCAxNzAsIDIyNCwgMTQzLCA5MiwgMjQ0LCAxOSwgNTksIDIyNCwgMTQzLCAyNDQsIDg5LCA1OSwgNzksIAorICAgIDIyMywgNTIsIDIyNCwgMTYsIDc5LCA2NywgMTg0LCAyMjIsIDIzNywgMjI1LCAxMywgMjExLCAyMDksIDIyMCwgMTQwLCAKKyAgICAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIxNSwgOTQsIDI0OSwgMjI3LCAyMjMsIDE2MCwgMjQ3LCAxMjgsIDIyMywgMTYwLCAyNDksIAorICAgIDIyNywgMjE1LCA5NCwgMjIwLCAxNTIsIDI0OCwgMjE0LCAyLCA0MywgMjQyLCAxMTUsIDI0OCwgMjE0LCAyLCA0NCwgMjQyLCAKKyAgICAxMTUsIDIxNSwgOTQsIDI0OCwgMjEzLCAyMTYsIDE1LCAxNjMsIDIyMSwgMTc1LCA1MCwgMjE1LCA1OSwgMjQ4LCAxNjQsIAorICAgIDIxNiwgMTQ0LCAyNDgsIDE2NCwgMTAsIDM0LCAyMjMsIDc5LCAxMCwgMzQsIDI1MCwgMTgsIDEwLCAzNCwgMjIxLCAxNzgsIAorICAgIDExMSwgMTAsIDM0LCAyMjEsIDE3OCwgMTA1LCAxMCwgMzQsIDIyMSwgMTc4LCAxNTgsIDEwLCAzNCwgMjI1LCAxNzAsIDEwLCAKKyAgICAzNCwgMjUxLCAxNzEsIDEwLCAzNCwgMjE3LCA5MywgMTAsIDM0LCAyMzQsIDM5LCAxMTEsIDEwLCAzNCwgMjM0LCAzOSwgCisgICAgMTA1LCAxMCwgMzQsIDI0NywgMTc4LCAxMCwgMzQsIDIyMSwgMTgxLCAxMCwgMzQsIDQsIDExMSwgMTAsIDM0LCA0LCAxMDUsIAorICAgIDEwLCAzNCwgMjMzLCAxMDMsIDExMSwgMTAsIDM0LCAyMzMsIDEwMywgMTA1LCAxMCwgMzQsIDIzMywgMTAzLCAxNTgsIDEwLCAKKyAgICAzNCwgMjMzLCAxMDMsIDE2MSwgMTAsIDM0LCAyMTksIDcwLCAxMCwgMzQsIDIxNiwgMTQ2LCAxMCwgMzQsIDIxOSwgNjgsIAorICAgIDExMSwgMTAsIDM0LCAyMTksIDY4LCAxMDUsIDEwLCAzNCwgMjQxLCAyMzUsIDExMSwgMTAsIDM0LCAyNDEsIDIzNSwgMTA1LCAKKyAgICAxMCwgMzQsIDI0MiwgMjIsIDEwLCAzNCwgMjIzLCAxNTAsIDEwLCAzNCwgMjUwLCA5MCwgMTAsIDM0LCAyMTgsIDM4LCAxMCwgCisgICAgMzQsIDIzMCwgMTMzLCAxMCwgMzQsIDI0OCwgOTYsIDEwLCAzNCwgMjMwLCAxMjUsIDEwLCAzNCwgMjUwLCAzMywgMTAsIDM0LCAKKyAgICAyMTIsIDQxLCAxMTEsIDEwLCAzNCwgMjEyLCA0MSwgMTA1LCAxMCwgMzQsIDI0NCwgMTA0LCAxMCwgMzQsIDIyNSwgMjM2LCAKKyAgICAxMTEsIDEwLCAzNCwgMjI1LCAyMzYsIDEwNSwgMTAsIDM0LCAyMTksIDE2MiwgMTYzLCAyMTUsIDIzNywgMjE1LCAxODksIAorICAgIDEwLCAzNCwgMjQ5LCAxNTMsIDEwLCAzNCwgMjQ3LCAxNDQsIDEwLCAzNCwgMjM1LCAxNDMsIDEwLCAzNCwgMjUxLCAyMDYsIAorICAgIDY0LCAyNTAsIDIsIDEwLCAzNCwgMjQ1LCAyMywgMTAsIDM0LCAyMTgsIDI1MSwgMTExLCAxMCwgMzQsIDIxOCwgMjUxLCAKKyAgICAxMDUsIDEwLCAzNCwgMjUyLCAxNjIsIDEwLCAzNCwgMjE5LCAxNjksIDEwLCAzNCwgMjUxLCA3MSwgMjE5LCAxNjksIDEwLCAKKyAgICAzNCwgMjI5LCA5NSwgMTExLCAxMCwgMzQsIDIyOSwgOTUsIDEwNSwgMTAsIDM0LCAyMjksIDk1LCAxNTgsIDEwLCAzNCwgCisgICAgMjI5LCA5NSwgMTYxLCAxMCwgMzQsIDIzMSwgNTEsIDEwLCAzNCwgMjIwLCA1OSwgMTAsIDM0LCAyMjMsIDE1NiwgMTAsIDM0LCAKKyAgICAyNDUsIDQ1LCAxMCwgMzQsIDIyNiwgMjEzLCAxMCwgMzQsIDI1MSwgMTQxLCAxMTEsIDEwLCAzNCwgMjUxLCAxNDEsIDEwNSwgCisgICAgMTAsIDM0LCAyMzEsIDkxLCAxMCwgMzQsIDIzMCwgMTI4LCAxMCwgMzQsIDI0MiwgMTQ3LCAxMTEsIDEwLCAzNCwgMjQyLCAKKyAgICAxNDcsIDEwNSwgMTAsIDM0LCAyNDIsIDE0NywgMTU4LCAxMCwgMzQsIDIxNiwgMTA3LCAxMCwgMzQsIDI1MCwgMSwgMTAsIAorICAgIDM0LCAyMTIsIDksIDExMSwgMTAsIDM0LCAyMTIsIDksIDEwNSwgMTAsIDM0LCAyNTEsIDcxLCAyMjEsIDE3MiwgMTAsIDM0LCAKKyAgICAyMTksIDE2MiwgMjQwLCAyNTUsIDEwLCAzNCwgMjQwLCAyNTUsIDEwLCAzNCwgMjUxLCA3MSwgMjE5LCA0LCAxMCwgMzQsIAorICAgIDI1MSwgNzEsIDIyMCwgNTQsIDEwLCAzNCwgMjQ0LCA0MCwgMTAsIDM0LCAyNTEsIDcxLCAyNTAsIDIzNiwgMTAsIDM0LCAKKyAgICAyMTksIDE2MiwgMjEyLCA1NywgMTAsIDM0LCAyMTIsIDU4LCAxMTEsIDEwLCAzNCwgMjEyLCA1OCwgMTA1LCAxMCwgMzQsIAorICAgIDI1MCwgMzUsIDEwLCAzNCwgMjUxLCA3MSwgMjQyLCAxNzMsIDEwLCAzNCwgMjAwLCAxMTEsIDEwLCAzNCwgMjAwLCAxMDUsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjMyLCAxNDMsIDEwLCAzNCwgMjUxLCA3MSwgMjQzLCA5NSwgMTAsIDM0LCAyMzAsIDEyNCwgCisgICAgMTExLCAxMCwgMzQsIDIzMCwgMTI0LCAxMDUsIDEwLCAzNCwgMjIzLCAxNjIsIDEwLCAzNCwgMjUxLCAyMTUsIDEwLCAzNCwgCisgICAgMjUxLCA3MSwgMjE3LCA1NywgMjMzLCA1OCwgMTAsIDM0LCAyNTEsIDcxLCAyMzMsIDU5LCAxMCwgMzQsIDI1MSwgNzEsIAorICAgIDIxMSwgMjM5LCAxMCwgMzQsIDI1MSwgNzEsIDI0NCwgNTQsIDEwLCAzNCwgMjQ1LCAyMjYsIDExMSwgMTAsIDM0LCAyNDUsIAorICAgIDIyNiwgMTA1LCAxMCwgMzQsIDI0NSwgMjI2LCAxNTgsIDEwLCAzNCwgMjUxLCA3MSwgMjQ1LCAyMjUsIDEwLCAzNCwgMjQxLCAKKyAgICAyNDIsIDEwLCAzNCwgMjUxLCA3MSwgMjQwLCAyNTIsIDEwLCAzNCwgMjUxLCAyMDIsIDEwLCAzNCwgMjQyLCAyMjksIDEwLCAKKyAgICAzNCwgMjUxLCA3MSwgMjQ0LCA5OCwgMTAsIDM0LCAyNTEsIDcxLCAyNTEsIDI0NSwgMTAsIDM0LCAyNTEsIDcxLCAyMjIsIDMsIAorICAgIDEwLCAzNCwgMjE5LCAxNjIsIDIxMiwgMiwgMTAsIDM0LCAyMTksIDE2MiwgMjExLCA0MSwgMTAsIDM0LCAyNTEsIDcxLCAKKyAgICAyNDMsIDI1MiwgMTAsIDM0LCAyMzUsIDE0OSwgMjQ1LCA0OSwgMTAsIDM0LCAyNTEsIDcxLCAyNDUsIDQ5LCAxMCwgMzQsIAorICAgIDIzNSwgMTQ5LCAyMTYsIDE2LCAxMCwgMzQsIDI1MSwgNzEsIDIxNiwgMTYsIDEwLCAzNCwgMjM1LCAxNDksIDI0NiwgMTA0LCAKKyAgICAxMCwgMzQsIDI1MSwgNzEsIDI0NiwgMTA0LCAxMCwgMzQsIDIxNSwgOTEsIDEwLCAzNCwgMjM1LCAxNDksIDIxNSwgOTEsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjE1LCA5MSwgNjAsIDM0LCAxMTEsIDYwLCAzNCwgMjMyLCAyMTksIDYwLCAzNCwgMjQ3LCAKKyAgICAxMjgsIDYwLCAzNCwgMjE5LCA5NywgNjAsIDM0LCAyMjEsIDE3NywgNjAsIDM0LCAxMDMsIDYwLCAzNCwgMTA1LCA2MCwgMzQsIAorICAgIDIzMiwgMjQzLCA2MCwgMzQsIDIzMSwgMTkwLCA2MCwgMzQsIDIzMywgMzksIDYwLCAzNCwgMjQ1LCAxMzcsIDYwLCAzNCwgCisgICAgMTk2LCA2MCwgMzQsIDEyNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjQ5LCAxNTUsIDYwLCAzNCwgMjQwLCAxMTgsIDYwLCAzNCwgCisgICAgMjE3LCA5MywgNjAsIDM0LCAyMDQsIDI1MSwgMTcxLCA2MCwgMzQsIDIzNCwgMzgsIDYwLCAzNCwgMjI0LCAyMjcsIDYwLCAKKyAgICAzNCwgMjExLCAyMDIsIDYwLCAzNCwgMjE4LCAyNDUsIDYwLCAzNCwgNDQsIDIwNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjQxLCAKKyAgICAxODMsIDI0NSwgMTUzLCA2MCwgMzQsIDIxNiwgMjQ4LCA2MCwgMzQsIDI0NywgMTc4LCA2MCwgMzQsIDIyMSwgMTgxLCA2MCwgCisgICAgMzQsIDI1MCwgMTgsIDYwLCAzNCwgMjI0LCAxODUsIDYwLCAzNCwgMjU0LCAyMjQsIDYwLCAzNCwgMjMwLCAxMTUsIDYwLCAKKyAgICAzNCwgMjQ1LCAxNTMsIDYwLCAzNCwgMjQ1LCAyMzEsIDYwLCAzNCwgMjIxLCAyMDIsIDYwLCAzNCwgMjQyLCAxODEsIDYwLCAKKyAgICAzNCwgMjQyLCAxODIsIDIxOSwgODMsIDYwLCAzNCwgMjQ1LCA0OCwgNjAsIDM0LCAyNTIsIDAsIDYwLCAzNCwgMjExLCAyMjEsIAorICAgIDYwLCAzNCwgMjUwLCAxMDksIDYwLCAzNCwgMjIyLCAxOTgsIDYwLCAzNCwgMjM2LCAyLCA2MCwgMzQsIDIxOSwgODEsIDYwLCAKKyAgICAzNCwgMjMzLCAxMDIsIDYwLCAzNCwgMjQ5LCAxNjQsIDYwLCAzNCwgMjE4LCAyMzksIDYwLCAzNCwgMjMwLCAxMjAsIDYwLCAKKyAgICAzNCwgMjIyLCAyMjcsIDYwLCAzNCwgMjExLCAyMDYsIDYwLCAzNCwgMjI2LCAxOTQsIDYwLCAzNCwgMjE1LCA5OCwgNjAsIAorICAgIDM0LCAyNDYsIDg4LCA2MCwgMzQsIDIxOSwgMjUzLCAyMTYsIDE0NiwgNjAsIDM0LCAyNDYsIDEyNiwgMjUwLCAxOCwgNjAsIAorICAgIDM0LCAyMDAsIDIxOCwgMTEwLCA2MCwgMzQsIDExMywgMjQyLCAxNywgNjAsIDM0LCAyMjAsIDIsIDYwLCAzNCwgMjUxLCAKKyAgICAxNzcsIDYwLCAzNCwgMjE5LCA2NywgNjAsIDM0LCAyNTEsIDE0NSwgNjAsIDM0LCAyMTgsIDE0MCwgNjAsIDM0LCAyNDEsIAorICAgIDIzNCwgNjAsIDM0LCAyNDIsIDM1LCA2MCwgMzQsIDI0NywgMTMxLCA2MCwgMzQsIDI0MiwgMjIsIDYwLCAzNCwgMjUxLCAKKyAgICAxNjIsIDYwLCAzNCwgMjIzLCAxNTAsIDYwLCAzNCwgMjIxLCAxODksIDYwLCAzNCwgMjQ3LCAyMDcsIDYwLCAzNCwgMjUzLCAKKyAgICAxNzYsIDYwLCAzNCwgMjE4LCAyMzYsIDYwLCAzNCwgMjI4LCA1NiwgNjAsIDM0LCAyMTgsIDM4LCA2MCwgMzQsIDIyMSwgCisgICAgMjEzLCA2MCwgMzQsIDIzMCwgMTMzLCA2MCwgMzQsIDIxNSwgMjM2LCA2MCwgMzQsIDIzMywgMTI4LCA2MCwgMzQsIDIxOCwgCisgICAgMTMxLCA2MCwgMzQsIDI0OCwgOTYsIDYwLCAzNCwgMjEyLCAyMSwgNjAsIDM0LCAyNDcsIDE1NCwgMjI4LCA1NiwgNjAsIDM0LCAKKyAgICAyNDksIDIyMywgNjAsIDM0LCAyNDMsIDIyOSwgNjAsIDM0LCAyNTAsIDI5LCA2MCwgMzQsIDIxOCwgMTQ0LCA2MCwgMzQsIAorICAgIDIxMiwgNDAsIDYwLCAzNCwgMjQ0LCAxMDQsIDYwLCAzNCwgMjUwLCAyNiwgNjAsIDM0LCAyNDQsIDE2OSwgNjAsIDM0LCA1MiwgCisgICAgMjExLCAxNzgsIDYwLCAzNCwgMTYzLCAyMTUsIDIzNywgMjE1LCAxODksIDYwLCAzNCwgMjE5LCA5MSwgNjAsIDM0LCAyNDQsIAorICAgIDE3OSwgNjAsIDM0LCAyNDksIDE1MywgNjAsIDM0LCAyNDcsIDE0NCwgNjAsIDM0LCAyMjQsIDE4MiwgNjAsIDM0LCAyMzUsIAorICAgIDE0MywgNjAsIDM0LCAyMzEsIDcyLCA2MCwgMzQsIDIxNiwgODksIDYwLCAzNCwgMjE3LCAyNDYsIDYwLCAzNCwgMjMyLCAKKyAgICAyMzcsIDYwLCAzNCwgMjE0LCAxMzEsIDYwLCAzNCwgMjQ0LCAxMjgsIDYwLCAzNCwgMjUxLCAyMDYsIDY0LCAyNTAsIDIsIAorICAgIDYwLCAzNCwgMjE5LCAxOTAsIDYwLCAzNCwgMjQ2LCAxMjYsIDIxNiwgMjQzLCA2MCwgMzQsIDIxMSwgMjUzLCA2MCwgMzQsIAorICAgIDIxOSwgMTA1LCA2MCwgMzQsIDI0NywgMTk1LCA2MCwgMzQsIDI0NSwgMjMsIDYwLCAzNCwgMjE5LCA3LCA2MCwgMzQsIDc1LCAKKyAgICA2MCwgMzQsIDIxOCwgMTMzLCA2MCwgMzQsIDIxOCwgMjUwLCA2MCwgMzQsIDIxNiwgMCwgNjAsIDM0LCAyNDIsIDE1NCwgNjAsIAorICAgIDM0LCAyNTAsIDIyNiwgNjAsIDM0LCAyMTgsIDE2MiwgNjAsIDM0LCAyNTIsIDE2MiwgNjAsIDM0LCAyMjMsIDM0LCA2MCwgCisgICAgMzQsIDIxOSwgMTY5LCA2MCwgMzQsIDIzNSwgMTM2LCA2MCwgMzQsIDIyOSwgOTQsIDYwLCAzNCwgMjIwLCA1OSwgNjAsIDM0LCAKKyAgICAyNDQsIDE1NywgNjAsIDM0LCAyMjYsIDIxMywgNjAsIDM0LCAyNTQsIDEyNiwgNjAsIDM0LCAyMjUsIDMyLCA2MCwgMzQsIAorICAgIDI0NSwgMjM1LCA2MCwgMzQsIDI1MSwgMTQwLCA2MCwgMzQsIDIzMSwgOTEsIDYwLCAzNCwgMjMwLCAxODgsIDYwLCAzNCwgCisgICAgMjIwLCAxNTgsIDYwLCAzNCwgMjU0LCA0LCA2MCwgMzQsIDIzMCwgMTI4LCA2MCwgMzQsIDIxNiwgMjAsIDYwLCAzNCwgMjI2LCAKKyAgICAxNjksIDYwLCAzNCwgMjUxLCAyMDksIDYwLCAzNCwgMjE4LCAxMjksIDYwLCAzNCwgMjQ5LCAyMzMsIDYwLCAzNCwgMjQyLCAKKyAgICAxNDYsIDYwLCAzNCwgMjE2LCAxMDcsIDYwLCAzNCwgMjM1LCAyMjQsIDYwLCAzNCwgMjUxLCAyMTksIDYwLCAzNCwgMjEyLCAKKyAgICA1OCwgMjQ1LCAxNTMsIDYwLCAzNCwgMjUwLCAxLCA2MCwgMzQsIDIxMiwgOCwgNjAsIDM0LCAyMjEsIDE3MiwgNjAsIDM0LCAKKyAgICAyNDAsIDI1NSwgNjAsIDM0LCAyMTksIDQsIDYwLCAzNCwgMjE0LCAyMiwgNjAsIDM0LCAyNTIsIDgwLCA2MCwgMzQsIDIyNSwgCisgICAgNzYsIDYwLCAzNCwgMjUyLCAxODIsIDYwLCAzNCwgMjIwLCA1NCwgNjAsIDM0LCAyMjMsIDExMywgNjAsIDM0LCAyMjIsIAorICAgIDEyOCwgNjAsIDM0LCAyNDQsIDQwLCA2MCwgMzQsIDI1MSwgMjA4LCA2MCwgMzQsIDI1MCwgMjM2LCA2MCwgMzQsIDI1MSwgCisgICAgMjM0LCA2MCwgMzQsIDIzMCwgMTMwLCA2MCwgMzQsIDIxMiwgNTcsIDYwLCAzNCwgMjUwLCAzNSwgNjAsIDM0LCAyMTEsIAorICAgIDIzNiwgNjAsIDM0LCAyNDcsIDE4OCwgNjAsIDM0LCAyMTMsIDE2MSwgNjAsIDM0LCAyNDIsIDE3MywgNjAsIDM0LCAyMzIsIAorICAgIDE0MywgNjAsIDM0LCAyNDMsIDk1LCA2MCwgMzQsIDIzMCwgMTIzLCA2MCwgMzQsIDIxOSwgOTYsIDYwLCAzNCwgMjE5LCAKKyAgICAyNTMsIDIxNywgNzcsIDI1MSwgMjQ1LCA2MCwgMzQsIDIyMywgMTYyLCA2MCwgMzQsIDI1MSwgMjE1LCA2MCwgMzQsIDIxMSwgCisgICAgMTk3LCA2MCwgMzQsIDI0NCwgMTk4LCA2MCwgMzQsIDIzMywgNTgsIDYwLCAzNCwgMjE3LCA1NywgMjMzLCA1OCwgNjAsIDM0LCAKKyAgICAyMzMsIDU0LCA2MCwgMzQsIDIxOSwgMzIsIDYwLCAzNCwgMjMzLCA1OSwgNjAsIDM0LCAyMTEsIDIzOSwgNjAsIDM0LCAyNDQsIAorICAgIDU0LCA2MCwgMzQsIDI0NSwgMjI1LCA2MCwgMzQsIDI0MSwgMjQyLCA2MCwgMzQsIDI0NCwgOCwgNjAsIDM0LCAyNDAsIDI1MiwgCisgICAgNjAsIDM0LCAyNTEsIDIwMiwgNjAsIDM0LCAyMTcsIDY0LCA2MCwgMzQsIDI0MiwgNDEsIDYwLCAzNCwgMjQ0LCAxMjEsIDYwLCAKKyAgICAzNCwgMjIyLCAzMCwgMjExLCAyMzYsIDYwLCAzNCwgMjUwLCAyMjgsIDYwLCAzNCwgMjQyLCAyMjksIDYwLCAzNCwgMjQ0LCAKKyAgICA5OCwgNjAsIDM0LCAyNTEsIDI0NSwgNjAsIDM0LCAyMjIsIDMsIDYwLCAzNCwgMjQ4LCA4MiwgNjAsIDM0LCAyMTIsIDIsIAorICAgIDYwLCAzNCwgMjQxLCAyMTcsIDYwLCAzNCwgMjExLCA0MSwgNjAsIDM0LCAyMzAsIDE5NywgNjAsIDM0LCAyNTEsIDIyOSwgCisgICAgNjAsIDM0LCAyNDUsIDE2MywgNjAsIDM0LCAyNDMsIDI1MiwgNjAsIDM0LCAyMTUsIDIxMCwgNjAsIDM0LCAyNDYsIDkwLCAKKyAgICA2MCwgMzQsIDIyMywgMTQ0LCA2MCwgMzQsIDIyOCwgNTgsIDYwLCAzNCwgMjQ1LCA0OSwgNjAsIDM0LCAyMTYsIDE2LCA2MCwgCisgICAgMzQsIDI0NiwgMTA0LCA2MCwgMzQsIDIxNSwgOTEsIDYwLCAzNCwgMjQ0LCA1NiwgMTEwLCAyNDgsIDQ1LCAxMzUsIDQzLCAKKyAgICAyMTYsIDQzLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDcyLCAyMTYsIDQzLCA1MSwgMTEwLCAyNDgsIDQ1LCAxMzUsIAorICAgIDQzLCAyMTYsIDQzLCAyMzAsIDIyOSwgMjIsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgNzIsIDIxNiwgNDMsIDIzMCwgCisgICAgMjI5LCAyMiwgNTEsIDExMCwgMjQ4LCA0NSwgMTM1LCAyNDMsIDIzNiwgMjE4LCAxMSwgMTEwLCAyNDgsIDQ1LCAxMzUsIAorICAgIDIxOCwgMTIsIDI0MywgMjUxLCA0OCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCA1MSwgMTEwLCAKKyAgICAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMzMsIDUyLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgCisgICAgMjQzLCAyNTEsIDIxNCwgMTYwLCAyMzMsIDUyLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIxNCwgCisgICAgMTYwLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMzIsIDExNCwgMjMzLCA1MiwgCisgICAgMTEwLCAyNDgsIDQ1LCAxMzUsIDIyNiwgMTI2LCAxMTAsIDIxOSwgMjAsIDExMCwgMjQ5LCAyMjcsIDExMCwgMjQzLCAyMzYsIAorICAgIDIxOCwgMTMxLCAyNDcsIDE4NSwgNzksIDIzNSwgMTM3LCAyMzUsIDI0MywgMjE4LCAxNjEsIDg3LCAxMTAsIDIzNSwgMTY0LCAKKyAgICA3OSwgMTEwLCAyNTAsIDQsIDc5LCAxMTAsIDU0LCAyMTAsIDg2LCA0MywgMjU0LCAxMTgsIDEyNywgNDQsIDI1NCwgMTE4LCAKKyAgICAxMjcsIDQzLCA1MiwgMjU0LCAxMTgsIDEyNywgNDQsIDUyLCAyNTQsIDExOCwgMTI3LCA0MywgMjQ5LCAxNjksIDEyNywgNDQsIAorICAgIDI0OSwgMTY5LCAxMjcsIDQzLCA3MSwgMjQ5LCAxNjksIDEyNywgNDQsIDcxLCAyNDksIDE2OSwgMTI3LCA0MywgODUsIDIzMywgCisgICAgMjYsIDEyNywgNDQsIDg1LCAyMzMsIDI2LCAxMjcsIDIyNCwgMjQwLCA3OSwgMjQzLCAzOSwgNzksIDQzLCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDEyNywgNDQsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCA0MywgNzEsIDIzMywgMjYsIDEyNywgNDQsIDcxLCAKKyAgICAyMzMsIDI2LCAxMjcsIDQzLCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQ0LCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIAorICAgIDQzLCA3MSwgNDIsIDEyNywgNDQsIDcxLCA0MiwgMTI3LCAyMTIsIDM2LCAyNDgsIDE2NCwgMjIzLCA1MiwgNTIsIDIyNCwgCisgICAgMTk0LCAyMjQsIDEsIDc5LCA1MiwgMjI0LCAxOTQsIDIyNCwgMSwgNzksIDEyMSwgNTIsIDIyNCwgMTk0LCAyMjQsIDEsIDc5LCAKKyAgICAyMjQsIDI0MCwgMTY0LCAyNDQsIDE5OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDExMSwgMjQyLCAxNSwgMjI3LCAyMDIsIDEwNSwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDE1OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDE2MSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5MCwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDE5NSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5OSwgMjQyLCAxNSwgMjI3LCAyMDIsIDE5NiwgCisgICAgMjQyLCAxNSwgMjI3LCAyMDIsIDIwMSwgMTEwLCAyMzMsIDksIDEzOCwgNzksIDExMCwgMjIyLCAyMzEsIDEzOCwgNzksIAorICAgIDExMCwgMjQ4LCA1MiwgMTM4LCA3OSwgMTEwLCAyNDUsIDEzNiwgMTM4LCA3OSwgMjQsIDIxOSwgMTU3LCA1OSwgMTM4LCA3OSwgCisgICAgMjQsIDUyLCA1OSwgMTM4LCA3OSwgMjEyLCAzMiwgMjQ4LCAxNjQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgNzksIDY3LCAKKyAgICAyMzQsIDIzOSwgMjIzLCA4MCwgMiwgMjEzLCAxMzUsIDIxOSwgMzMsIDc5LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDE2NCwgCisgICAgMjE0LCAxNjAsIDI0MiwgMzQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMiwgMjEzLCAxMzUsIDIxOSwgMzMsIDE2NCwgMjE0LCAKKyAgICAxNjAsIDI0MiwgMzQsIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMTY0LCAyMzIsIDExNCwgMjQyLCAzNCwgMzcsIDIyNCwgCisgICAgMjQwLCA3OSwgMTEwLCAyMTcsIDQsIDIzMiwgMjIwLCAyNDQsIDE1NCwgMjIwLCAxNDAsIDg3LCAyNDIsIDE1LCAyMjcsIAorICAgIDIwMiwgMjE2LCAyNDgsIDI0MiwgMTUsIDIyNywgMjAyLCAyMTUsIDczLCAyNDIsIDE1LCAyMjcsIDIwMiwgMjE2LCAxNjMsIAorICAgIDY3LCAxMTAsIDIzNSwgMTY0LCA3OSwgMjMxLCAxNDUsIDc5LCAyMjYsIDMsIDI1NCwgMTQ4LCA3OSwgMTEwLCA0NSwgMjM1LCAKKyAgICAyNDUsIDExMCwgMTYzLCAyNDQsIDExNCwgMjE5LCAyMCwgMTQxLCAxLCA0LCA2MSwgMTQxLCAxLCA2MSwgMTQxLCAxLCA0LCAKKyAgICA3NCwgMTQxLCAxLCA3NCwgMTQxLCAxLCA0LCA2OSwgMTQxLCAxLCA2OSwgMTQxLCAxLCA0LCA3NiwgMTQxLCAxLCA3NiwgCisgICAgMTQxLCAxLCA0LCA3OCwgMTQxLCAxLCA3OCwgMTQxLCAxLCAxNzYsIDE0MSwgMSwgMjQzLCAxNDIsIDE0MSwgMSwgMjM0LCAKKyAgICA5OCwgMTQxLCAxLCAyNDIsIDIyMSwgMTQxLCAxLCAyMzMsIDIyMywgMTQxLCAxLCAyNDIsIDEyMCwgMTQxLCAxLCAyMzQsIAorICAgIDE4OCwgMTQxLCAxLCAyNDMsIDY5LCAxNDEsIDEsIDIzNCwgMzQsIDE0MSwgMSwgMjQyLCAxODEsIDE0MSwgMSwgMjA2LCAKKyAgICAxNDEsIDEsIDIxMCwgMTE2LCAxNDEsIDEsIDIxOSwgMTkzLCAxNDEsIDEsIDIxMCwgNDQsIDE0MSwgMSwgMjE4LCA4NCwgCisgICAgMTQxLCAxLCAyMTAsIDEzLCAxNDEsIDEsIDIyMSwgMTgzLCAxNDEsIDEsIDIxMCwgOTQsIDE0MSwgMSwgMjE5LCA2MCwgMTQxLCAKKyAgICAxLCAyMTAsIDIzLCAxNDEsIDEsIDIxNywgMTA2LCAxNDEsIDEsIDI0OCwgMjI5LCAxNDEsIDEsIDIxNiwgMTE4LCAxNDEsIDEsIAorICAgIDI0OCwgMTEsIDE0MSwgMSwgNCwgMjE1LCAxMTksIDE0MSwgMSwgMjE1LCAxMTksIDE0MSwgMSwgMjQ2LCA4NiwgMTQxLCAxLCAKKyAgICAyMTcsIDIzLCAxNDEsIDEsIDI0OCwgOTgsIDE0MSwgMSwgMTEyLCAxNDEsIDEsIDI0NywgMTUzLCAxNDEsIDEsIDE5OCwgCisgICAgMTQxLCAxLCAyMjgsIDIzOCwgMTQxLCAxLCAyMjcsIDI0MiwgMTQxLCAxLCAyMjksIDExMiwgMTQxLCAxLCAyMjgsIDc5LCAKKyAgICAxNDEsIDEsIDE2MiwgMTQxLCAxLCAyNTIsIDE5OSwgMTQxLCAxLCAxOTEsIDE0MSwgMSwgMjQxLCAxODcsIDE0MSwgMSwgCisgICAgMjUyLCAxNCwgMTQxLCAxLCAyMjUsIDExMSwgMTQxLCAxLCAyNDAsIDIyOSwgMTQxLCAxLCAyNTEsIDEzMywgMTQxLCAxLCAKKyAgICAyMjQsIDE1MywgMTQxLCAxLCAyNDEsIDI0NSwgMTQxLCAxLCAyNTIsIDgzLCAxNDEsIDEsIDIyNSwgMjI0LCAxNDEsIDEsIAorICAgIDI0MSwgNzUsIDE0MSwgMSwgMjUxLCAyMTMsIDE0MSwgMSwgMjI1LCAxOSwgMTQxLCAxLCAxODYsIDE0MSwgMSwgMjMwLCAKKyAgICAyMzUsIDE0MSwgMSwgMjMwLCAxMDcsIDE0MSwgMSwgMjMxLCA5NiwgMTQxLCAxLCAyMzAsIDE2NiwgMTQxLCAxLCA0LCAxOTIsIAorICAgIDE0MSwgMSwgMTkyLCAxNDEsIDEsIDQsIDIxMCwgMjEyLCAxNDEsIDEsIDIxMCwgMjEyLCAxNDEsIDEsIDQsIDIxMCwgMjQ0LCAKKyAgICAxNDEsIDEsIDIxMCwgMjQ0LCAxNDEsIDEsIDIwNSwgMTQxLCAxLCAyMjMsIDM4LCAxNDEsIDEsIDIyMiwgMTQyLCAxNDEsIDEsIAorICAgIDIyMywgMTMxLCAxNDEsIDEsIDIyMiwgMjEzLCAxNDEsIDEsIDQsIDIxMiwgNjUsIDE0MSwgMSwgMjEyLCA2NSwgMTQxLCAxLCAKKyAgICAyMTEsIDI1MCwgMTQxLCAxLCAyMTIsIDIyLCAxNDEsIDEsIDIxMSwgMjI3LCAxNDEsIDEsIDIzMCwgMzAsIDE0MSwgMSwgCisgICAgMjEyLCAxMTYsIDE0MSwgMSwgNCwgMTc2LCAxNDEsIDEsIDQsIDIzNCwgMTg4LCAzOCwgMjM0LCAyMDcsIDIxMywgMTM1LCAKKyAgICAyMTksIDMzLCA3OSwgMzgsIDIzNCwgMjA3LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDIzNCwgMjA3LCAyMTMsIDEzNSwgCisgICAgMjE5LCAzMywgNzksIDIzNCwgMjA3LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDE0MSwgMjM1LCAxNjQsIDc5LCAxNDEsIAorICAgIDIxMywgMTM1LCAyMzUsIDE2NCwgNzksIDE0MSwgMjQ3LCAyMjksIDIxMCwgMjI1LCAyMzQsIDIwNywgNTIsIDI0MCwgMTc1LCAKKyAgICA1NiwgMSwgNCwgNjEsIDU2LCAxLCA2MSwgNTYsIDEsIDQsIDc0LCA1NiwgMSwgNzQsIDU2LCAxLCA0LCA2OSwgNTYsIDEsIAorICAgIDY5LCA1NiwgMSwgNCwgNzYsIDU2LCAxLCA3NiwgNTYsIDEsIDQsIDc4LCA1NiwgMSwgNzgsIDU2LCAxLCAxNzYsIDU2LCAxLCAKKyAgICAyNDMsIDE0MiwgNTYsIDEsIDIzNCwgOTgsIDU2LCAxLCAyNDIsIDIyMSwgNTYsIDEsIDIzMywgMjIzLCA1NiwgMSwgMjQyLCAKKyAgICAxMjAsIDU2LCAxLCAyMzQsIDE4OCwgNTYsIDEsIDI0MywgNjksIDU2LCAxLCAyMzQsIDM0LCA1NiwgMSwgMjQyLCAxODEsIAorICAgIDU2LCAxLCAyMDYsIDU2LCAxLCAyMTAsIDExNiwgNTYsIDEsIDIxOSwgMTkzLCA1NiwgMSwgMjEwLCA0NCwgNTYsIDEsIDIxOCwgCisgICAgODQsIDU2LCAxLCAyMTAsIDEzLCA1NiwgMSwgMjIxLCAxODMsIDU2LCAxLCAyMTAsIDk0LCA1NiwgMSwgMjE5LCA2MCwgNTYsIAorICAgIDEsIDIxMCwgMjMsIDU2LCAxLCAyMTcsIDEwNiwgNTYsIDEsIDI0OCwgMjI5LCA1NiwgMSwgMjE2LCAxMTgsIDU2LCAxLCAKKyAgICAyNDgsIDExLCA1NiwgMSwgNCwgMjE1LCAxMTksIDU2LCAxLCAyMTUsIDExOSwgNTYsIDEsIDI0NiwgODYsIDU2LCAxLCAyMTcsIAorICAgIDIzLCA1NiwgMSwgMjQ4LCA5OCwgNTYsIDEsIDExMiwgNTYsIDEsIDI0NywgMTUzLCA1NiwgMSwgMTk4LCA1NiwgMSwgMjI4LCAKKyAgICAyMzgsIDU2LCAxLCAyMjcsIDI0MiwgNTYsIDEsIDIyOSwgMTEyLCA1NiwgMSwgMjI4LCA3OSwgNTYsIDEsIDE2MiwgNTYsIDEsIAorICAgIDI1MiwgMTk5LCA1NiwgMSwgMTkxLCA1NiwgMSwgMjQxLCAxODcsIDU2LCAxLCAyNTIsIDE0LCA1NiwgMSwgMjI1LCAxMTEsIAorICAgIDU2LCAxLCAyNDAsIDIyOSwgNTYsIDEsIDI1MSwgMTMzLCA1NiwgMSwgMjI0LCAxNTMsIDU2LCAxLCAyNDEsIDI0NSwgNTYsIAorICAgIDEsIDI1MiwgODMsIDU2LCAxLCAyMjUsIDIyNCwgNTYsIDEsIDI0MSwgNzUsIDU2LCAxLCAyNTEsIDIxMywgNTYsIDEsIDIyNSwgCisgICAgMTksIDU2LCAxLCAxODYsIDU2LCAxLCAyMzAsIDIzNSwgNTYsIDEsIDIzMCwgMTA3LCA1NiwgMSwgMjMxLCA5NiwgNTYsIDEsIAorICAgIDIzMCwgMTY2LCA1NiwgMSwgNCwgMTkyLCA1NiwgMSwgMTkyLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDU2LCAxLCAyMTAsIDIxMiwgCisgICAgNTYsIDEsIDQsIDIxMCwgMjQ0LCA1NiwgMSwgMjEwLCAyNDQsIDU2LCAxLCAyMDUsIDU2LCAxLCAyMjMsIDM4LCA1NiwgMSwgCisgICAgMjIyLCAxNDIsIDU2LCAxLCAyMjMsIDEzMSwgNTYsIDEsIDIyMiwgMjEzLCA1NiwgMSwgNCwgMjEyLCA2NSwgNTYsIDEsIAorICAgIDIxMiwgNjUsIDU2LCAxLCAyMTEsIDI1MCwgNTYsIDEsIDIxMiwgMjIsIDU2LCAxLCAyMTEsIDIyNywgNTYsIDEsIDIzMCwgCisgICAgMzAsIDU2LCAxLCAyMTIsIDExNiwgNTYsIDEsIDQsIDE3NiwgNTYsIDEsIDQsIDIzNCwgMTg4LCA1NiwgMSwgMjE0LCAyNywgCisgICAgNTYsIDEsIDIxMywgMTc2LCA1NiwgMSwgMjEzLCAyNTUsIDU2LCAxLCAyMTMsIDEzOCwgNTYsIDIzMCwgMjI5LCAyNDcsIAorICAgIDEyOCwgMjM0LCAyMDcsIDIyNCwgMTc2LCAyMTksIDMzLCA3OSwgNTYsIDIzNSwgMTY0LCA3OSwgNTYsIDIxMywgMTM1LCAKKyAgICAyMzUsIDE2NCwgNzksIDU2LCAyNDcsIDIyOSwgMjM0LCA1LCAyNTEsIDE5MiwgMSwgMjUzLCAxNjYsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjYsIDEwOSwgMjUxLCAxOTIsIDEsIDE5NCwgMjUxLCAxOTIsIDEsIDI0NSwgMTQsIDI1MSwgMTkyLCAxLCAyNDksIDY4LCAKKyAgICAyNTEsIDE5MiwgMSwgMjE3LCAxNTMsIDI1MSwgMTkyLCAxLCAyMzAsIDMwLCAyNTEsIDE5MiwgMSwgMTU2LCAyNTEsIDE5MiwgCisgICAgMSwgMjQzLCAyMDksIDI1MSwgMTkyLCAxLCAyMzUsIDI5LCAyNTEsIDE5MiwgMSwgMjQyLCA2NywgMjUxLCAxOTIsIDEsIAorICAgIDIzNSwgMTUwLCAyNTEsIDE5MiwgMSwgMjI0LCA5OSwgMjUxLCAxOTIsIDEsIDIxMSwgMTc4LCAyNTEsIDE5MiwgMSwgMjEwLCAKKyAgICA4MywgMjUxLCAxOTIsIDEsIDI1MCwgMTY2LCAyNTEsIDE5MiwgMSwgMjIwLCAxMDYsIDI1MSwgMTkyLCAxLCAxNTMsIDI1MSwgCisgICAgMTkyLCAxLCAyMTAsIDE1OSwgMjUxLCAxOTIsIDEsIDI1MSwgNzQsIDI1MSwgMTkyLCAxLCAyMjIsIDkzLCAyNTEsIDE5MiwgCisgICAgMSwgNjEsIDI1MSwgMTkyLCAxLCA3OCwgMjUxLCAxOTIsIDEsIDc2LCAyNTEsIDE5MiwgMSwgMjQ1LCAyMDUsIDI1MSwgMTkyLCAKKyAgICAxLCAyNTQsIDIxMCwgMjUxLCAxOTIsIDEsIDI0NSwgMjAzLCAyNTEsIDE5MiwgMSwgMjUzLCAyMDAsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjYsIDEzOCwgMjUxLCAxOTIsIDEsIDI1NCwgMTMxLCAyNTEsIDE5MiwgMSwgMjQ1LCAxNTgsIDI1MSwgMTkyLCAxLCAyNTQsIAorICAgIDEyMywgMjUxLCAxOTIsIDEsIDI0NSwgMTQ2LCAyNTEsIDE5MiwgMSwgMjQ1LCAxMDAsIDI1MSwgMTkyLCAxLCA3NCwgMjUxLCAKKyAgICAxOTIsIDEsIDY5LCAyNTEsIDE5MiwgMSwgMjM1LCAxNjIsIDI1MSwgMTkyLCAxLCAyMTQsIDEwNSwgMjUxLCAxOTIsIDEsIAorICAgIDIyOSwgODQsIDI1MSwgMTkyLCAxLCAyNDIsIDE4NSwgMjUxLCAxOTIsIDEsIDIzNiwgNDEsIDI0LCAxLCAyMzQsIDY0LCAyNCwgCisgICAgMSwgMjE4LCAyMTcsIDI0LCAxLCAyMzQsIDU3LCAyNCwgMSwgMjI4LCAyMzEsIDI0LCAxLCAyMjgsIDIyOSwgMjQsIDEsIAorICAgIDIyOCwgMjI4LCAyNCwgMSwgMjE2LCAxMDIsIDI0LCAxLCAyMTgsIDIwNiwgMjQsIDEsIDIyMywgMjksIDI0LCAxLCAyMjMsIAorICAgIDI0LCAyNCwgMSwgMjIzLCAyMSwgMjQsIDEsIDIyMywgMTQsIDI0LCAxLCAyMjMsIDksIDI0LCAxLCAyMjMsIDQsIDI0LCAxLCAKKyAgICAyMjMsIDE1LCAyNCwgMSwgMjIzLCAyNywgMjQsIDEsIDIzMCwgMjIyLCAyNCwgMSwgMjI1LCA5OCwgMjQsIDEsIDIxOCwgCisgICAgMjE0LCAyNCwgMSwgMjI1LCA4NywgMjQsIDEsIDIxOSwgMTUwLCAyNCwgMSwgMjE4LCAyMTEsIDI0LCAxLCAyMzYsIDYzLCAKKyAgICAyNCwgMSwgMjUwLCA1NCwgMjQsIDEsIDIxOCwgMjIxLCAyNCwgMSwgMjUwLCAxMTQsIDI0LCAxLCAyMzQsIDExNiwgMjQsIDEsIAorICAgIDIxNiwgMTc0LCAyNCwgMSwgMjI1LCAxMzQsIDI0LCAxLCAyNDEsIDE3OSwgMjQsIDEsIDYxLCAyNCwgMSwgMjU0LCAyNTIsIAorICAgIDI0LCAxLCAxOTIsIDI0LCAxLCAyMTEsIDkyLCAyNCwgMSwgMjQ1LCAxMjUsIDI0LCAxLCA3NiwgMjQsIDEsIDIxMSwgMzYsIAorICAgIDI0LCAxLCAyMTEsIDQ3LCAyNCwgMSwgNzgsIDI0LCAxLCAyMTIsIDY1LCAyNCwgMSwgMjEyLCA2MiwgMjQsIDEsIDIyNiwgCisgICAgMjM4LCAyNCwgMSwgMjEwLCAyNDQsIDI0LCAxLCA2OSwgMjQsIDEsIDIxMiwgMTEsIDI0LCAxLCAyMTIsIDIyLCAyNCwgMSwgCisgICAgMjExLCAyNTAsIDI0LCAxLCAyMTAsIDIxMiwgMjQsIDEsIDI0NSwgNjMsIDI0LCAxLCAyMTEsIDgsIDI0LCAxLCA3NCwgMjQsIAorICAgIDI0NCwgMTExLCAyNCwgMSwgMjE4LCAyMTUsIDI0LCAxLCAyMjgsIDIyMSwgMjQsIDEsIDIyOCwgMjIzLCAyNCwgMSwgMjI4LCAKKyAgICAyMjYsIDI0LCAxLCAyMjMsIDIyLCAyNCwgMSwgMjIzLCAzLCAyNCwgMSwgMjIzLCAxMSwgMjQsIDEsIDIyMywgMTYsIDI0LCAKKyAgICAxLCAyMjMsIDEsIDI0LCAxLCAyMzAsIDIxNSwgMjQsIDEsIDIzMCwgMjEyLCAyNCwgMSwgMjMwLCAyMTYsIDI0LCAxLCAyMzQsIAorICAgIDIyNywgMjQsIDEsIDIyNSwgOTMsIDI0LCAxLCAyMjUsIDc5LCAyNCwgMSwgMjI1LCA4NSwgMjQsIDEsIDIyNSwgODIsIDI0LCAKKyAgICAxLCAyMjUsIDk2LCAyNCwgMSwgMjI1LCA4MCwgMjQsIDEsIDIzNCwgMjI1LCAyNCwgMSwgMjM0LCAyMjMsIDI0LCAxLCAyMTksIAorICAgIDE0MywgMjQsIDEsIDIxOSwgMTQxLCAyNCwgMSwgMjE5LCAxMzMsIDI0LCAxLCAyMTksIDEzOCwgMjQsIDEsIDIxOSwgMTQ4LCAKKyAgICAyNCwgMSwgMjI2LCAzNiwgMjQsIDEsIDIxOCwgMjE4LCAyNCwgMSwgMjExLCAyNiwgMjQsIDEsIDIxMSwgMjIsIDI0LCAxLCAKKyAgICAyMTEsIDIzLCAyNCwgMSwgMjM0LCAyMjYsIDI0LCAxLCAyMTgsIDIxOSwgMjQsIDEsIDIxMSwgMzIsIDI0LCAxLCAyMTAsIAorICAgIDIzOCwgMjQsIDEsIDIxMCwgMjM3LCAyNCwgMSwgMjEwLCAyNDAsIDI0LCAxLCAyMTAsIDIwMywgMjQsIDEsIDIxMCwgMjA0LCAKKyAgICAyNCwgMSwgMjEwLCAyMDcsIDI0LCAxLCAyNTQsIDQyLCAyNCwgMSwgMjU0LCAzNiwgMTEwLCAyNTQsIDEwNywgMjMyLCAyMDksIAorICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyMjMsIDUzLCA3OSwgMTEwLCAyNTQsIDEwNywgMTIzLCA3OSwgMTEwLCAyNTQsIDEwNywgCisgICAgMTEzLCA3OSwgMTEwLCAyNTQsIDEwNywgMTM0LCA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxOSwgNzksIDExMCwgMjU0LCAKKyAgICAxMDcsIDIxNiwgMTUsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMzAsIDIyOSwgNzksIDExMCwgMjU0LCAxMDcsIDI1MSwgMTgzLCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxMDAsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMjEsIDE3OCwgNzksIDExMCwgMjU0LCAKKyAgICAxMDcsIDIxNiwgMTcwLCA3OSwgMTEwLCAyNTQsIDEwNywgMjQ0LCAxMiwgNzksIDExMCwgMjU0LCAxMDcsIDI0MSwgMjMxLCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjQ1LCAyMzIsIDc5LCAxMTAsIDI1NCwgMTA3LCAyMzEsIDE5MSwgNzksIDI1MSwgMTkyLCAKKyAgICAxLCAyNTEsIDEzMywgMjUxLCAxOTIsIDEsIDIxMCwgNDQsIDI1MSwgMTkyLCAxLCAyMzUsIDExNCwgMjUxLCAxOTIsIDEsIAorICAgIDI0MiwgMTIwLCAyNTEsIDE5MiwgMSwgMjQ1LCAyMTcsIDI1MSwgMTkyLCAxLCAyNDUsIDE0MywgMjUxLCAxOTIsIDEsIDIyNiwgCisgICAgMTg3LCAyNTEsIDE5MiwgMSwgMjI2LCAxOTEsIDI1MSwgMTkyLCAxLCAyMzUsIDE4NiwgMjUxLCAxOTIsIDEsIDI1NCwgMTA5LCAKKyAgICAyNTEsIDE5MiwgMSwgMjM1LCAyMzEsIDI1MSwgMTkyLCAxLCAyMTQsIDE2OCwgMjUxLCAxOTIsIDEsIDIzNiwgMjMsIDI1MSwgCisgICAgMTkyLCAxLCAyMjksIDYyLCAyNTEsIDE5MiwgMSwgMjU0LCAyMDQsIDI1MSwgMTkyLCAxLCAyNTMsIDE5NSwgMjUxLCAxOTIsIAorICAgIDEsIDI1NCwgMTQ0LCAyNTEsIDE5MiwgMSwgMjI2LCAyMDgsIDI1MSwgMTkyLCAxLCAyMjYsIDE5MywgMjUxLCAxOTIsIDEsIAorICAgIDIzNSwgMjI4LCAyNTEsIDE5MiwgNDAsIDEsIDIyNiwgMTA5LCAyNTEsIDE5MiwgNDAsIDEsIDIxNywgMTUzLCAyNTEsIDE5MiwgCisgICAgNDAsIDEsIDIzNSwgMjksIDI1MSwgMTkyLCA0MCwgMSwgMjQyLCA2NywgMjUxLCAxOTIsIDEsIDI0MywgMSwgMjUxLCAxOTIsIAorICAgIDEsIDIzMywgNSwgMjUxLCAxOTIsIDEsIDIwOSwgMjUwLCAxMCwgMjE4LCAxMDUsIDIxNywgMTUzLCAxMCwgMjE4LCAxMDUsIAorICAgIDIxMiwgNCwgMTAsIDIxOCwgMTA1LCAyMTEsIDE1OCwgMTAsIDIxOCwgMTA1LCAyNTEsIDg3LCAxMCwgMjE4LCAxMDUsIDIxNywgCisgICAgMjU1LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY1LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY5LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMjM4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY2LCAxMCwgMjE4LCAxMDUsIDIxNywgMTU2LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMTY4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTY0LCAxMCwgMjE4LCAxMDUsIDI0MCwgMjM2LCAxMCwgMjE4LCAxMDUsIDI0MCwgCisgICAgMTY3LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTYzLCAxMCwgMjE4LCAxMDUsIDIzMCwgMzAsIDEwLCAyMTgsIDEwNSwgMjQyLCAKKyAgICA2NywgMTAsIDIxOCwgMTA1LCAyMjIsIDkzLCAxMCwgMjE4LCAxMDUsIDIyNiwgMTA5LCAxMCwgMjE4LCAxMDUsIDIxOSwgMjMsIAorICAgIDEwLCAyMTgsIDEwNSwgMjQ5LCA2OCwgMTAsIDIxOCwgMTA1LCAyNDAsIDE3MCwgMTAsIDIxOCwgMTA1LCAyNDEsIDE5NywgCisgICAgMTAsIDIxOCwgMTA1LCAyMTcsIDE2NSwgMTAsIDIxOCwgMTA1LCAyMTcsIDIzNCwgMTAsIDIxOCwgMTA1LCAyMTgsIDE3MCwgCisgICAgMTAsIDIxOCwgMTA1LCAyMjAsIDExMiwgMTAsIDIxOCwgMTA1LCAyMjUsIDIyOCwgMTAsIDIxOCwgMTA1LCAyMjQsIDEwMSwgCisgICAgMTAsIDIxOCwgMTA1LCAyMTYsIDQ0LCAxMCwgMjE4LCAxMDUsIDIxNywgMTU1LCAxMCwgMjE4LCAxMDUsIDIxNywgMjQ1LCAKKyAgICAxMCwgMjE4LCAxMDUsIDI0MCwgMTc3LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTYyLCAxMCwgMjE4LCAxMDUsIDIyNSwgMTUyLCAKKyAgICAxMCwgMjE4LCAxMDUsIDIyNCwgOTksIDU2LCAxLCA0LCAyMzMsIDIyMywgNTYsIDEsIDQsIDIxOSwgMTkzLCA1NiwgMSwgNCwgCisgICAgMjE4LCA4NCwgNTYsIDEsIDQsIDExMiwgNTYsIDEsIDQsIDIyNywgMjQyLCA1NiwgMSwgNCwgMTYyLCA1NiwgMSwgNCwgMjQxLCAKKyAgICAxODcsIDU2LCAxLCA0LCAyNDAsIDIyOSwgNTYsIDEsIDQsIDI0MSwgMjQ1LCA1NiwgMSwgNCwgMjQxLCA3NSwgNTYsIDEsIDQsIAorICAgIDIzMCwgMTA3LCA1NiwgMSwgNCwgMjA1LCA1NiwgMSwgNCwgMjIzLCAzOCwgNTYsIDEsIDQsIDIyMiwgMTQyLCA1NiwgMSwgNCwgCisgICAgMjIzLCAxMzEsIDU2LCAxLCA0LCAyMjIsIDIxMywgODgsIDI0LCAyMzQsIDY0LCA4OCwgMjQsIDIyOCwgMjMxLCA4OCwgMjQsIAorICAgIDIxNiwgMTAyLCA4OCwgMjQsIDIyMywgMjksIDg4LCAyNCwgMjMwLCAyMjIsIDg4LCAyNCwgMjI1LCA5OCwgODgsIDI0LCAKKyAgICAyMTksIDE1MCwgODgsIDI0LCAyMzYsIDYzLCA4OCwgMjQsIDI1MCwgNTQsIDg4LCAyNCwgMjUwLCAxMTQsIDg4LCAyNCwgCisgICAgMjM0LCAxMTYsIDg4LCAyNCwgMjE2LCAxNzQsIDg4LCAyNCwgMjI1LCAxMzQsIDg4LCAyNCwgMjQxLCAxNzksIDg4LCAyNCwgCisgICAgMjM0LCA2NSwgNjEsIDg4LCAyNCwgMjI4LCAyMzIsIDYxLCA4OCwgMjQsIDIxNiwgMTAzLCA2MSwgODgsIDI0LCAyMjMsIDMwLCAKKyAgICA2MSwgODgsIDI0LCAyMzAsIDIyMywgNjEsIDg4LCAyNCwgMjI1LCA5OSwgNjEsIDg4LCAyNCwgMjE5LCAxNTEsIDYxLCA4OCwgCisgICAgMjQsIDIzNiwgNjQsIDYxLCA4OCwgMjQsIDI1MCwgNTUsIDYxLCA4OCwgMjQsIDI1MCwgMTE1LCA2MSwgODgsIDI0LCAyMzQsIAorICAgIDExNywgNjEsIDg4LCAyNCwgMjE2LCAxNzUsIDYxLCA4OCwgMjQsIDIyNSwgMTM1LCA2MSwgODgsIDI0LCAyNDEsIDE4MCwgCisgICAgNjEsIDg4LCAyNCwgMjUwLCA1NSwgNjksIDg4LCAyMzQsIDksIDEzNSwgMjI2LCAyMjEsIDg4LCAyMzQsIDksIDEzNSwgMTQ0LCAKKyAgICAyNDAsIDIyOSwgODgsIDE1NCwgMTExLCA4OCwgMTU0LCAxMDUsIDg4LCAxNTQsIDE1OCwgODgsIDE1NCwgMTYxLCA4OCwgCisgICAgMTU0LCAxOTAsIDg4LCAxNTQsIDE5NSwgODgsIDE1NCwgMTk5LCA4OCwgMTU0LCAxOTYsIDg4LCAxNTQsIDIwMSwgODgsIAorICAgIDE1NCwgMjE2LCAyNDgsIDg4LCAxNTQsIDIzMCwgMTMzLCA4OCwgMTU0LCAyNDQsIDEwNCwgODgsIDE1NCwgMjEyLCA0MCwgCisgICAgODgsIDE1NCwgMjExLCAyMTQsIDg4LCAxNTQsIDIzMSwgNDQsIDg4LCAxNTQsIDI0NSwgMjMxLCA4OCwgMTU0LCAyMTgsIDM4LCAKKyAgICA4OCwgMTU0LCAyMTgsIDEzNCwgODgsIDE1NCwgMjQxLCAyNTEsIDg4LCAxNTQsIDIxOSwgNTYsIDg4LCAxNTQsIDIyOSwgCisgICAgMjA5LCA4OCwgMTU0LCAyMTksIDYsIDg4LCAxNTQsIDI0NCwgMTEwLCA4OCwgMTU0LCAyNDksIDIwOCwgODgsIDE1NCwgMjMzLCAKKyAgICAxMzEsIDg4LCAxNTQsIDIyMywgNzQsIDg4LCAxNTQsIDI1MSwgMjMsIDg4LCAxNTQsIDIxOCwgODgsIDg4LCAxNTQsIDIxOCwgCisgICAgMjEsIDg4LCAxNTQsIDI0NSwgMTM1LCA4OCwgMTU0LCAyMjMsIDY2LCA4OCwgMTU0LCAyNTQsIDE1OSwgODgsIDE1NCwgMjQ0LCAKKyAgICAxMzYsIDg4LCAxNTQsIDIyMywgNjQsIDg4LCAxNTQsIDIyMCwgMTU4LCA4OCwgMTU0LCAyMjMsIDEzMCwgMzcsIDE1NCwgCisgICAgMjI0LCAxNSwgMzcsIDE1NCwgMjM0LCA4NiwgMzcsIDE1NCwgMjIxLCAyMDAsIDM3LCAxNTQsIDIzNCwgNSwgMzcsIDU0LCAKKyAgICAyMTYsIDI0OSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMTUsIDc0LCAyMjYsIDIwMSwgODUsIDIxOCwgCisgICAgMjM2LCAzNywgNTQsIDIxNiwgMTY0LCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDI0NCwgMjQsIDIyNiwgMjAxLCAKKyAgICA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjQ0LCAxMjMsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjE5LCAxMTQsIAorICAgIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjIwLCAxMTksIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgCisgICAgMjQ1LCAxOTMsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDIyNSwgMjU1LCA1MCwgMzcsIDU0LCAyMTUsIDc0LCAxMTEsIDM3LCAKKyAgICA1NCwgMjE1LCA3NCwgMTA1LCAzNywgNTQsIDIxNSwgNzQsIDE1OCwgMzcsIDU0LCAyMTUsIDc0LCAxNjEsIDM3LCA1NCwgCisgICAgMjE1LCA3NCwgMTkwLCAzNywgNTQsIDIxNSwgNzQsIDE5NSwgMzcsIDU0LCAyMTUsIDc0LCAxOTksIDM3LCA1NCwgMjE1LCAKKyAgICA3NCwgMTk2LCAzNywgNTQsIDIxNSwgNzQsIDIwMSwgMzcsIDU0LCAyMTYsIDE2MywgMzcsIDU0LCAyMTYsIDE2NCwgMTExLCAKKyAgICAzNywgNTQsIDIxNiwgMTY0LCAxMDUsIDM3LCA1NCwgMjE2LCAxNjQsIDE1OCwgMzcsIDU0LCAyMTYsIDE2NCwgMTYxLCAzNywgCisgICAgNTQsIDIxNiwgMTY0LCAxOTAsIDM3LCAyNCwgMjM0LCA2NCwgMzcsIDI0LCAyMjgsIDIzMSwgMzcsIDI0LCAyMTYsIDEwMiwgCisgICAgMzcsIDI0LCAyMjMsIDI5LCAzNywgMjQsIDIzMCwgMjIyLCAzNywgMjQsIDIyNSwgOTgsIDM3LCAyNCwgMjE5LCAxNTAsIDM3LCAKKyAgICAyNCwgMjM2LCA2MywgMzcsIDI0LCAyNTAsIDU0LCAzNywgMjQsIDI1MCwgMTE0LCAzNywgMjQsIDIzNCwgMTE2LCAzNywgMjQsIAorICAgIDIxNiwgMTc0LCAzNywgMjQsIDIyNSwgMTM0LCAzNywgMjQsIDI0MSwgMTc5LCAzNywgMjQsIDIzNCwgNjUsIDYxLCAzNywgCisgICAgMjQsIDIyOCwgMjMyLCA2MSwgMzcsIDI0LCAyMTYsIDEwMywgNjEsIDM3LCAyNCwgMjIzLCAzMCwgNjEsIDM3LCAyNCwgMjMwLCAKKyAgICAyMjMsIDYxLCAzNywgMjQsIDIyNSwgOTksIDYxLCAzNywgMjQsIDIxOSwgMTUxLCA2MSwgMzcsIDI0LCAyMzYsIDY0LCA2MSwgCisgICAgMzcsIDI0LCAyNTAsIDU1LCA2MSwgMzcsIDI0LCAyNTAsIDExNSwgNjEsIDM3LCAyNCwgMjM0LCAxMTcsIDYxLCAzNywgMjQsIAorICAgIDIxNiwgMTc1LCA2MSwgMzcsIDI0LCAyMjUsIDEzNSwgNjEsIDM3LCAyNCwgMjQxLCAxODAsIDYxLCAzNywgMjM0LCA5LCAKKyAgICAxMzUsIDI1MCwgMTU2LCAzNywgMjM0LCA5LCAxMzUsIDIzNSwgNTMsIDM3LCAyNCwgMjM2LCA2NCwgNjksIDIzNCwgOSwgCisgICAgMjE4LCAxNjEsIDg3LCAzNywgMTU0LCAxMTEsIDM3LCAxNTQsIDEwNSwgMzcsIDE1NCwgMTU4LCAzNywgMTU0LCAxNjEsIDM3LCAKKyAgICAxNTQsIDE5MCwgMzcsIDE1NCwgMTk1LCAzNywgMTU0LCAxOTksIDM3LCAxNTQsIDE5NiwgMzcsIDE1NCwgMjAxLCAzNywgCisgICAgMTU0LCAyMTYsIDI0OCwgMzcsIDE1NCwgMjMwLCAxMzMsIDM3LCAxNTQsIDI0NCwgMTA0LCAzNywgMTU0LCAyMTIsIDQwLCAKKyAgICAzNywgMTU0LCAyMTEsIDIxNCwgMzcsIDE1NCwgMjMxLCA0NCwgMzcsIDE1NCwgMjQ1LCAyMzEsIDM3LCAxNTQsIDIxOCwgMzgsIAorICAgIDM3LCAxNTQsIDIxOCwgMTM0LCAzNywgMTU0LCAyNDEsIDI1MSwgMzcsIDE1NCwgMjE5LCA1NiwgMzcsIDE1NCwgMjI5LCAKKyAgICAyMDksIDM3LCAxNTQsIDIxOSwgNiwgMzcsIDE1NCwgMjQ0LCAxMTAsIDM3LCAxNTQsIDI0OSwgMjA4LCAzNywgMTU0LCAyMzMsIAorICAgIDEzMSwgMzcsIDE1NCwgMjIxLCAxNzYsIDM3LCAxNTQsIDIzMSwgMTk0LCAzNywgMTU0LCAyNDQsIDE0NSwgMzcsIDE1NCwgCisgICAgMjE4LCA1MCwgMzcsIDE1NCwgMjQ1LCA0MiwgMzcsIDE1NCwgMjI0LCAxOTAsIDM3LCAxNTQsIDI1MywgMjA0LCAzNywgMTU0LCAKKyAgICAyMzUsIDE2NSwgMzcsIDE1NCwgMjIzLCA2NCwgMzcsIDE1NCwgMjQ5LCAxNzIsIDM3LCAxNTQsIDI0OSwgMTYzLCAzNywgCisgICAgMTU0LCAyNDEsIDE3MiwgMzcsIDE1NCwgMjUwLCAxODIsIDM3LCAxNTQsIDIzMiwgMTE2LCAzNywgMTU0LCAyMzMsIDUyLCAKKyAgICAzNywgMTU0LCAyMjIsIDI1NCwgMzcsIDE1NCwgMjMxLCA4OCwgMzcsIDE1NCwgMjIzLCA5MCwgMzcsIDE1NCwgMjE4LCA4OCwgCisgICAgMzcsIDE1NCwgMjE4LCAyMSwgMzcsIDE1NCwgMjQ1LCAxMzUsIDM3LCAxNTQsIDIyMywgNjYsIDM3LCAxNTQsIDI1NCwgMTU5LCAKKyAgICAzNywgMTU0LCAyMjgsIDIxNywgMzcsIDU0LCAyMTYsIDE2NCwgMTk1LCAzNywgNTQsIDIxNiwgMTY0LCAxOTksIDM3LCA1NCwgCisgICAgMjE2LCAxNjQsIDE5NiwgMzcsIDU0LCAyMTYsIDE2NCwgMjAxLCAzNywgNTQsIDI0NCwgMjMsIDM3LCA1NCwgMjQ0LCAyNCwgCisgICAgMTExLCAzNywgNTQsIDI0NCwgMjQsIDEwNSwgMzcsIDU0LCAyNDQsIDI0LCAxNTgsIDM3LCA1NCwgMjQ0LCAyNCwgMTYxLCAKKyAgICAzNywgNTQsIDI0NCwgMjQsIDE5MCwgMzcsIDU0LCAyNDQsIDI0LCAxOTUsIDM3LCA1NCwgMjQ0LCAyNCwgMTk5LCAzNywgNTQsIAorICAgIDI0NCwgMjQsIDE5NiwgMzcsIDU0LCAyNDQsIDI0LCAyMDEsIDM3LCA1NCwgMjQ0LCAxMjIsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDIzNSwgMTM5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDQsIDE1NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjMxLCAKKyAgICAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI1NCwgNTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIzMSwgMTM3LCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyMzUsIDUxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMzUsIDUyLCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyNTMsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjIwLCAxMzgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIyNiwgCisgICAgMjQzLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMjgsIDQ1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDkzLCA0MiwgMjQxLCAKKyAgICAxOTcsIDQyLCAyNDUsIDk2LCA0MiwgMjQ1LCA1MSwgMjMyLCAyMjUsIDIzMiwgMjQ2LCA1MCwgMzcsIDU2LCA2MSwgMzcsIAorICAgIDU2LCA3NCwgMzcsIDU2LCA2OSwgMzcsIDU2LCA3NiwgMzcsIDU2LCA3OCwgMzcsIDU2LCAxNzYsIDM3LCA1NiwgMjM0LCA5OCwgCisgICAgMzcsIDU2LCAyMzMsIDIyMywgMzcsIDU2LCAyMzQsIDE4OCwgMzcsIDU2LCAyMzQsIDM0LCAzNywgNTYsIDIwNiwgMzcsIDU2LCAKKyAgICAyMTksIDE5MywgMzcsIDU2LCAyMTgsIDg0LCAzNywgNTYsIDIyMSwgMTgzLCAzNywgNTYsIDIxOSwgNjAsIDM3LCA1NiwgCisgICAgMjE3LCAxMDYsIDM3LCA1NiwgMjE2LCAxMTgsIDM3LCA1NiwgMjE1LCAxMTksIDM3LCA1NiwgMjE3LCAyMywgMzcsIDU2LCAKKyAgICAxMTIsIDM3LCA1NiwgMTk4LCAzNywgNTYsIDIyOCwgMjM4LCAzNywgNTYsIDIyNywgMjQyLCAzNywgNTYsIDIyOSwgMTEyLCAKKyAgICAzNywgNTYsIDIyOCwgNzksIDM3LCA1NiwgMTYyLCAzNywgNTYsIDI0MSwgMTg3LCAzNywgNTYsIDI0MCwgMjI5LCAzNywgNTYsIAorICAgIDI0MSwgMjQ1LCAzNywgNTYsIDI0MSwgNzUsIDM3LCA1NiwgMTg2LCAzNywgNTYsIDIzMCwgMjM1LCAzNywgNTYsIDIzMCwgCisgICAgMTA3LCAzNywgNTYsIDIzMSwgOTYsIDM3LCA1NiwgMjMwLCAxNjYsIDM3LCA1NiwgMTkyLCAzNywgNTYsIDIxMCwgMjEyLCAKKyAgICAzNywgNTYsIDIxMCwgMjQ0LCAzNywgNTYsIDIwNSwgMzcsIDU2LCAyMjMsIDM4LCAzNywgNTYsIDIyMiwgMTQyLCAzNywgNTYsIAorICAgIDIyMywgMTMxLCAzNywgNTYsIDIyMiwgMjEzLCAzNywgNTYsIDIxMiwgNjUsIDM3LCA1NiwgMjExLCAyNTAsIDM3LCA1NiwgCisgICAgMjEyLCAyMiwgMzcsIDU2LCAyMTEsIDIyNywgNDIsIDI1NCwgNzksIDQyLCAyNTMsIDI0NywgNDIsIDI1NCwgMTAzLCA0MiwgCisgICAgMjU1LCA0MCwgNDIsIDIzNSwgMjMzLCA0MiwgMjM1LCAyMDMsIDQyLCAyMTQsIDE2NiwgNDIsIDI0NSwgNzQsIDQyLCAyNDUsIAorICAgIDIxNCwgNDIsIDIyNiwgMTkwLCA0MiwgMjI2LCAxODQsIDQyLCAyMzQsIDI1MSwgNDIsIDIzNCwgMjIwLCA0MiwgMjM0LCAKKyAgICAyMTcsIDQyLCAyNDMsIDk5LCA0MiwgMjQzLCAxMDgsIDQyLCAyNDIsIDIxMSwgNDIsIDI0MiwgMjA3LCA0MiwgMjMzLCAxNTYsIAorICAgIDQyLCAyNDIsIDIwMCwgNDIsIDIzNCwgNzgsIDQyLCAyMzQsIDc3LCA0MiwgMjM0LCA3NiwgNDIsIDIzNCwgNzUsIDQyLCAKKyAgICAyNDIsIDkzLCA0MiwgMjQyLCA5MiwgNDIsIDIzMywgMTk5LCA0MiwgMjMzLCAyMDEsIDQyLCAyMzQsIDE4NCwgNDIsIDIzNCwgCisgICAgNywgNDIsIDIzNCwgMTQsIDQyLCAyMjIsIDE4LCA0MiwgMjIxLCAyMzksIDQyLCAyMTksIDEzMSwgNDIsIDIyMCwgMTQzLCAKKyAgICA0MiwgMjIwLCAxNDIsIDQyLCAyNDgsIDIyNiwgNDIsIDI0OCwgNDQsIDQyLCAyNDcsIDEyOSwgNDIsIDIxNiwgMzMsIDQyLCAKKyAgICAyMjksIDIwNSwgNDIsIDIyOCwgNDYsIDQyLCAyNDIsIDM5LCA0MiwgMjI2LCA4OCwgNDIsIDIyNiwgODcsIDQyLCAyNTIsIAorICAgIDE5NiwgNDIsIDIyNSwgMTA4LCA0MiwgMjI1LCA3MiwgNDIsIDIyNSwgNzMsIDQyLCAyNTEsIDI0MiwgNDIsIDI0MCwgMjI4LCAKKyAgICA0MiwgMjQwLCAyMjQsIDQyLCAyNTEsIDk5LCA0MiwgMjQwLCAyMTEsIDQyLCAyNDEsIDIyMiwgNDIsIDIyNSwgMTYyLCA0MiwgCisgICAgMjI1LCAxOTcsIDQyLCAyNDEsIDIwNSwgNDIsIDIyNSwgMTk0LCA0MiwgMjI1LCAyMTAsIDQyLCAyNTIsIDY5LCA0MiwgMjI1LCAKKyAgICA5LCA0MiwgMjUxLCAxODgsIDQyLCAyNDEsIDYzLCA0MiwgMjI0LCAyNTMsIDQyLCAyNDEsIDU1LCA0MiwgMjQxLCA1NywgNDIsIAorICAgIDIzMSwgMjA2LCA0MiwgMjMxLCAyMDIsIDQyLCAyMzEsIDIxMSwgNDIsIDIzMSwgMTU1LCA0MiwgMjMxLCAxODAsIDQyLCAKKyAgICAyMzAsIDIwMiwgNDIsIDIzMCwgMTgxLCA0MiwgMjMwLCAxODAsIDQyLCAyMzEsIDc5LCA0MiwgMjMxLCA3NiwgNDIsIDIzMSwgCisgICAgODAsIDQyLCAyMTEsIDEwMiwgNDIsIDIxMSwgMTAwLCA0MiwgMjEwLCAyMDEsIDQyLCAyMjIsIDIyOSwgNDIsIDIyMiwgMjMzLCAKKyAgICA0MiwgMjIyLCAxMTksIDQyLCAyMjIsIDExMywgNDIsIDIyMywgODgsIDQyLCAyMjMsIDg1LCA0MiwgMjEyLCAzOCwgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxMCwgODYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxMTEsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxMDUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxNTgsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxNjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTAsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTksIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAxOTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMDEsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTYsIDI0OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIAorICAgIDI0NSwgMTc1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA3NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgCisgICAgMjQwLCAyNDYsIDIxNiwgMTY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjQ0LCAxMywgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQwLCAyNDYsIDI0NCwgMTI2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE5LCAxMjEsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMjAsIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDI0NSwgCisgICAgMTk4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjI4LCAyMDIsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgCisgICAgMjQ2LCAyMTUsIDczLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2NywgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjQwLCAyNDYsIDIxNSwgNjMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY0LCAxMTAsIDIxNywgCisgICAgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2OSwgNDIsIDI0MCwgMjM3LCA0MiwgMjQ4LCAyMjksIDQyLCAyNTMsIDIwMCwgCisgICAgNDIsIDEzMCwgNDIsIDIyNiwgMTI5LCA0MiwgMjI1LCAyMjksIDQyLCAyNDcsIDE1NSwgNDIsIDI0NywgMTU2LCAyMTgsIAorICAgIDIzNSwgNDIsIDI0NywgMTU2LCAyNDksIDExNiwgNDIsIDIzNSwgMTYyLCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDI0MSwgCisgICAgMjIzLCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDIxNywgMTc1LCA0MiwgMjQ1LCA5OSwgMjI5LCAyMTAsIDIxNywgNzUsIDQyLCAKKyAgICAyNDUsIDk5LCAyMjksIDIxMCwgMjMxLCA3NSwgNDIsIDI0OSwgMTY1LCA0MiwgMjI2LCA5NCwgMjU0LCAxMzMsIDQyLCAxOTgsIAorICAgIDQyLCAyMzAsIDEwOCwgNjEsIDQyLCAxODYsIDQyLCAxNzYsIDQyLCAyMzQsIDE5MSwgNDIsIDIzMSwgMTM0LCA0MiwgMjQzLCAKKyAgICA4NywgNDIsIDI1MSwgMjYsIDQyLCAyMzQsIDE5MCwgNDIsIDIyNSwgMTUzLCA0MiwgMjI5LCA4NiwgNDIsIDIzMCwgMTA4LCAKKyAgICAyNDUsIDE0LCA0MiwgMjMwLCAxMDgsIDI0MywgMjA5LCA0MiwgMjMxLCAyMCwgNDIsIDIzNCwgMTQwLCA0MiwgMjQwLCAxNzAsIAorICAgIDQyLCAyMzQsIDEwMCwgNDIsIDIzMCwgMjM3LCA0MiwgMjQyLCAyMjMsIDQyLCAyMTYsIDEyMCwgNDIsIDIzMCwgMTA4LCAKKyAgICAxNTYsIDQyLCAyMzAsIDE3NCwgNDIsIDI0NywgMTY1LCA0MiwgMjM0LCA0NiwgNDIsIDI0NCwgNTMsIDQyLCAyMjgsIDExNywgCisgICAgNDIsIDIzMCwgMTA4LCAxOTQsIDQyLCAyMzAsIDE3MSwgNDIsIDI0OSwgMjQ3LCA0MiwgMjM0LCA0MCwgNDIsIDIzMCwgMTcyLCAKKyAgICAyMTgsIDIzNSwgNDIsIDI0OSwgMjQ4LCAyMTgsIDIzNSwgNDIsIDIzMiwgNTUsIDIxOCwgMjM1LCA0MiwgMjM0LCA0MSwgCisgICAgMjE4LCAyMzUsIDQyLCAyMzAsIDE3MiwgMjQ5LCAxMTYsIDQyLCAyNDksIDI0OCwgMjQ5LCAxMTYsIDQyLCAyMzIsIDU1LCAKKyAgICAyNDksIDExNiwgNDIsIDIzNCwgNDEsIDI0OSwgMTE2LCA0MiwgMjMyLCA1NSwgMTE1LCAyMjIsIDkzLCA0MiwgMjMyLCA1NSwgCisgICAgMTE1LCAyMjIsIDk0LCAyMTgsIDIzNSwgNDIsIDE5MSwgNDIsIDIzNCwgMSwgNDIsIDIzMCwgMTEwLCA0MiwgMjQyLCAxNTgsIAorICAgIDQyLCAyMjMsIDE3OSwgNDIsIDIyMywgMTgwLCAxMTUsIDIyMiwgOTMsIDQyLCAyMjMsIDE4MCwgMTE1LCAyMjIsIDk0LCAKKyAgICAyMTgsIDIzNSwgNDIsIDIyNCwgMTY1LCA0MiwgMjI4LCAxOCwgNDIsIDIzMCwgMTA4LCAyMjIsIDkzLCA0MiwgMjMwLCAxMDksIAorICAgIDQyLCAyMjQsIDExOSwgNDIsIDIyNywgMTgwLCA0MiwgMjMwLCAxMDgsIDIxNCwgMTA1LCA0MiwgMjMwLCA1NCwgNDIsIDIzMywgCisgICAgMTkxLCA0MiwgMjMwLCA1NSwgMjMxLCA3OSwgNDIsIDIyNCwgMTE4LCA0MiwgMjI3LCAxNzksIDQyLCAyMzAsIDEwOCwgMjEyLCAKKyAgICA5OCwgNDIsIDIzMCwgNDgsIDQyLCAyMzMsIDE4OSwgNDIsIDIzMCwgNDksIDIzMSwgNzksIDQyLCAyMzUsIDMwLCAyMjYsIAorICAgIDIyNCwgNDIsIDIzMiwgNTUsIDIyNiwgMjI0LCA0MiwgMjU0LCAxNDQsIDQyLCAyNTEsIDE2OCwgNDIsIDI1MCwgMjIyLCA0MiwgCisgICAgMjUwLCAxOTksIDQyLCAyNTEsIDc1LCAxMTUsIDIzNCwgMTQwLCA0MiwgMjQ5LCAyNDYsIDQyLCAyNDgsIDE1MCwgNDIsIAorICAgIDI0MiwgNzksIDQyLCAxNjIsIDQyLCAyNDAsIDIzOCwgNDIsIDIzNiwgNiwgNDIsIDIzNCwgNTMsIDQyLCAyMzQsIDQxLCAKKyAgICAyNTEsIDIsIDQyLCAyMzMsIDIyNSwgNDIsIDIzMiwgMTY1LCA0MiwgMjMyLCAxNjQsIDQyLCAyMzIsIDE1MywgNDIsIDIzMiwgCisgICAgNjgsIDQyLCAyMzEsIDEzNSwgMjE5LCA4MSwgNDIsIDIzMCwgMjAxLCA0MiwgMjMwLCAxNTcsIDQyLCAyMjUsIDE1MSwgNDIsIAorICAgIDIyNSwgMjIsIDQyLCAyMjQsIDIyMiwgNDIsIDIyNCwgMjIwLCA0MiwgMjE4LCAyMjksIDQyLCAyMTgsIDMsIDQyLCAyMTIsIAorICAgIDI0LCA0MiwgMjE0LCAxMDYsIDExNSwgMTk0LCA0MiwgMTE2LCAxMTUsIDE5NCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDExMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDEwNSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE1OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE2MSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE5MCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE5NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDE5OSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDIwMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMjQ4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAKKyAgICAyNDgsIDE1NCwgMjQ1LCAxNzUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDc2LCAxMTAsIDIxNywgNCwgCisgICAgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyNDQsIDEzLCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjQ0LCAxMjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTksIAorICAgIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIyMCwgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMjQ1LCAxOTgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMjgsIDIwMiwgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjQ4LCAxNTQsIDIxNSwgNzMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY3LCAxMTAsIDIxNywgCisgICAgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjQsIAorICAgIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgCisgICAgMjE1LCA3MCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIAorICAgIDI0OCwgMTU0LCAyMTUsIDY2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA3MiwgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDE2MywgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMTYyLCA0MiwgMjQzLCAxMjUsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIAorICAgIDI0OSwgMTQ4LCAyNDEsIDIzMCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjIzLCAxMjUsIDI0NSwgMjMxLCAyNDEsIDE5OSwgCisgICAgMzEsIDI0NywgMjM5LCAyNTMsIDIxNSwgMjE2LCAxOTcsIDI1MiwgNjQsIDI0MSwgMTk5LCAzMSwgMjEwLCAyMjMsIDI0NCwgCisgICAgNDYsIDI0MSwgMTk5LCAzMSwgMjEyLCA1OSwgMjQxLCAxOTksIDMxLCAyNDksIDIxMSwgMjQxLCAxOTksIDMxLCAyMTYsIAorICAgIDE5NywgMjU0LCAxMSwgMjQxLCAxOTksIDMxLCAyNDEsIDY3LCAyMTYsIDM5LCAyNDEsIDE5OSwgMzEsIDQsIDIxNywgNjIsIAorICAgIDI0MSwgMTk5LCAzMSwgMjE1LCAyMzgsIDI0MSwgMTk5LCAzMSwgMjI1LCAyMjIsIDI0MSwgMTk5LCAzMSwgMjE4LCAxNjAsIAorICAgIDI0MSwgMTk5LCAzMSwgMjQ0LCAxNDcsIDI0MSwgMTk5LCAzMSwgMjQyLCAxMzksIDIyNCwgMjQzLCAyNDEsIDE5OSwgMzEsIAorICAgIDIzMCwgMTYwLCAyNDEsIDE5OSwgMzEsIDI0NSwgMTM0LCAyNDEsIDE5OSwgMzEsIDI0NCwgNDcsIDI0MSwgMTk5LCAzMSwgCisgICAgMjExLCAyMDcsIDIyNiwgMjAxLCAyMTYsIDE5NywgMjQ4LCA5NCwgMjQxLCAxOTksIDMxLCAyNTQsIDU5LCAyNDEsIDE5OSwgCisgICAgMzEsIDI0OSwgMTkzLCAyNDEsIDE5OSwgMzEsIDI1MSwgMjM1LCAyMTYsIDEzOSwgMjQxLCAxOTksIDMxLCAyNDIsIDE1NiwgCisgICAgMjQxLCAxOTksIDMxLCAyMTgsIDI0NywgMjU0LCA3OCwgMjQxLCAxOTksIDMxLCAyMjMsIDU2LCAyNDEsIDE5OSwgMzEsIAorICAgIDIzNSwgMjI3LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTM5LCAyMTcsIDYyLCAyNDEsIDE5OSwgMzEsIDIzMCwgMTE2LCAyNDksIAorICAgIDE2NywgMjQxLCAxOTksIDMxLCAyNDIsIDEzOSwgMjI0LCAyMDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1NSwgMjcsIAorICAgIDIxMiwgNDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1MCwgMTYsIDI0NCwgMTA0LCAyNDEsIDE5OSwgMzEsIDIzNSwgCisgICAgMjQwLCAyNDEsIDE5OSwgMzEsIDI0NiwgNjUsIDI0MSwgMTk5LCAzMSwgMjIzLCA1OSwgMjQxLCAxOTksIDMxLCAyNDIsIAorICAgIDEzOSwgMjI0LCAyMjcsIDI0MSwgMTk5LCAzMSwgMjI0LCAxODAsIDI0MSwgMTk5LCAzMSwgMjQ4LCAxNjksIDY0LCAyMTYsIAorICAgIDE5NywgMjMyLCAyMzYsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI0NCwgMTgyLCAyNDEsIDE5OSwgMzEsIDIyNiwgMTY3LCAKKyAgICAyNDEsIDE5OSwgMzEsIDIyNiwgMjQ4LCAyNDEsIDE5OSwgMzEsIDI0OCwgNjcsIDI0MSwgMTk5LCAzMSwgMjQ4LCA4NywgCisgICAgMjQxLCAxOTksIDMxLCAyMzUsIDI1NCwgMjQxLCAxOTksIDMxLCAyNTEsIDE1NywgMjQxLCAxOTksIDMxLCAyNDksIDIyOSwgCisgICAgMjE2LCA0MywgMjMxLCA4MSwgMjQxLCAxOTksIDMxLCAyNDMsIDk0LCAyMTYsIDM5LCAyNDEsIDE5OSwgMzEsIDIyNCwgMTI4LCAKKyAgICAyMTQsIDE1NCwgMjQxLCAxOTksIDMxLCAyMjYsIDE2NiwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjEyLCAxMywgMjQxLCAKKyAgICAxOTksIDMxLCAyMjMsIDQ4LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNTAsIDIyOCwgMjQxLCAxOTksIDMxLCAyMTYsIAorICAgIDE5NywgMjU0LCA3LCAyMTYsIDEzNCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjM0LCAxODUsIDIxOCwgMTM2LCAyMzAsIAorICAgIDEyMCwgMjQxLCAxOTksIDMxLCAyNDgsIDQwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMzEsIDE1NywgMjMxLCAyMDcsIAorICAgIDI0MSwgMTk5LCAzMSwgMjU1LCAyOCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjEyLCA1NCwgMjQxLCAxOTksIDMxLCAKKyAgICAyMTYsIDE5NywgMjQzLCA1NCwgMjExLCAyMzksIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIzNSwgNTgsIDIzMywgMTEzLCAKKyAgICAyNDEsIDE5OSwgMzEsIDI0NywgMTkyLCAyNDEsIDE5OSwgMzEsIDIzMiwgMjI2LCAyNDEsIDE5OSwgMzEsIDIzNSwgMjMwLCAKKyAgICAyMTUsIDE4OCwgMjQxLCAxOTksIDMxLCA0LCAyMjQsIDIwMCwgMjQxLCAxOTksIDMxLCAyNTQsIDIyNiwgMjQ5LCAyMjAsIAorICAgIDI0MSwgMTk5LCAzMSwgMjUyLCA2NywgMjQ5LCAyMjAsIDgsIDMsIDIzNSwgMTY2LCA4LCAzLCAyMzUsIDE1OSwgOCwgMywgCisgICAgNzQsIDgsIDMsIDIzNSwgMTg5LCA4LCAzLCAyMzYsIDY1LCA4LCAzLCAyMzYsIDQ4LCA4LCAzLCAyMzYsIDY3LCA4LCAzLCAKKyAgICAyMzYsIDY2LCA4LCAzLCAyNTMsIDIxNCwgOCwgMywgMjUzLCAxNzcsIDgsIDMsIDYxLCA4LCAzLCAyNTQsIDgwLCA4LCAzLCAKKyAgICAyMTQsIDE2NCwgOCwgMywgMjE0LCAxNjcsIDgsIDMsIDIxNCwgMTY1LCA4LCAzLCAyMjYsIDE0NCwgOCwgMywgMjI2LCAxMTgsIAorICAgIDgsIDMsIDc4LCA4LCAzLCAyMjYsIDE3OSwgOCwgMywgMjQ1LCA0MywgOCwgMywgNzYsIDgsIDMsIDIxMSwgMTk1LCA4LCAzLCAKKyAgICAyNTEsIDIzNiwgOCwgMywgMjUxLCAyMzMsIDgsIDMsIDI1MiwgMTQsIDgsIDMsIDI1MSwgMjQ2LCA4LCAzLCAyNTIsIDMsIDgsIAorICAgIDMsIDI1MiwgMiwgOCwgMywgMjUyLCA1LCA4LCAzLCAyNTIsIDQsIDgsIDMsIDI1MiwgMTI5LCA4LCAzLCAyNTIsIDEyMSwgOCwgCisgICAgMywgMjUyLCAxOTksIDgsIDMsIDI1MiwgMTUwLCA4LCAzLCAyNTEsIDEwOSwgOCwgMywgMjUxLCAxMTMsIDgsIDMsIDI1MSwgCisgICAgMTEwLCA4LCAzLCAyNTEsIDE4NywgOCwgMywgMjUxLCAxNzEsIDgsIDMsIDI1MSwgMjEzLCA4LCAzLCAyNTEsIDE5MywgOCwgCisgICAgMywgMjUyLCAyOSwgOCwgMywgMjUyLCA4MywgOCwgMywgMjUyLCA0MSwgOCwgMywgMjUxLCA5NSwgOCwgMywgMjUxLCA5MiwgCisgICAgOCwgMywgMjUxLCAxMzMsIDgsIDMsIDI1MSwgMTA4LCA4LCAzLCAyNTEsIDEwMiwgOCwgMywgMjUxLCAxMDYsIDgsIDMsIAorICAgIDI1MSwgODAsIDgsIDMsIDI1MSwgNzgsIDgsIDMsIDI1MSwgODUsIDgsIDMsIDI1MSwgODMsIDgsIDMsIDI1MSwgODEsIDgsIAorICAgIDMsIDI1MSwgODIsIDgsIDMsIDIyNSwgNTIsIDgsIDMsIDIyNSwgNDgsIDgsIDMsIDIyNSwgMTExLCA4LCAzLCAyMjUsIDYyLCAKKyAgICA4LCAzLCAyMjUsIDc4LCA4LCAzLCAyMjUsIDEwNSwgOCwgMywgMjI1LCAxMDEsIDgsIDMsIDIyNSwgMjQ0LCA4LCAzLCAyMjUsIAorICAgIDIzNCwgOCwgMywgMTkxLCA4LCAzLCAyMjYsIDI1LCA4LCAzLCAyMjQsIDEzOCwgOCwgMywgMjI0LCAxNDAsIDgsIDMsIDIyNCwgCisgICAgMTM5LCA4LCAzLCAyMjQsIDIzNiwgOCwgMywgMjI0LCAyMjUsIDgsIDMsIDIyNSwgMTksIDgsIDMsIDIyNCwgMjQ4LCA4LCAzLCAKKyAgICAyMjQsIDEyNCwgOCwgMywgMjI0LCAxMjAsIDgsIDMsIDIyNCwgMTUzLCA4LCAzLCAyMjQsIDEzNywgOCwgMywgMjI0LCAxMjksIAorICAgIDgsIDMsIDIyNCwgMTM1LCA4LCAzLCAyMjQsIDEwMywgOCwgMywgMjI0LCAxMDIsIDgsIDMsIDIyNCwgMTA3LCA4LCAzLCAKKyAgICAyMjQsIDEwNiwgOCwgMywgMjI0LCAxMDQsIDgsIDMsIDIyNCwgMTA1LCA4LCAzLCAyNTIsIDEwNCwgOCwgMywgMjUyLCAxMDMsIAorICAgIDgsIDMsIDI1MiwgMTEwLCA4LCAzLCAyNTIsIDEwNSwgOCwgMywgMjUyLCAxMDcsIDgsIDMsIDI1MiwgMTA2LCA4LCAzLCAKKyAgICAyNTIsIDEwOSwgOCwgMywgMjUyLCAxMDgsIDgsIDMsIDI1MiwgMTE2LCA4LCAzLCAyNTIsIDExNSwgOCwgMywgMjUyLCAxMTksIAorICAgIDgsIDMsIDI1MiwgMTE3LCA4LCAzLCAyNTIsIDk1LCA4LCAzLCAyNTIsIDk3LCA4LCAzLCAyNTIsIDk2LCA4LCAzLCAyNTIsIAorICAgIDEwMCwgOCwgMywgMjUyLCA5OSwgOCwgMywgMjUyLCAxMDIsIDgsIDMsIDI1MiwgMTAxLCA4LCAzLCAyNTIsIDExMSwgOCwgMywgCisgICAgMjUyLCAxMTQsIDgsIDMsIDI1MiwgMTEyLCA4LCAzLCAyNTIsIDkxLCA4LCAzLCAyNTIsIDkwLCA4LCAzLCAyNTIsIDk4LCA4LCAKKyAgICAzLCAyNTIsIDk0LCA4LCAzLCAyNTIsIDkyLCA4LCAzLCAyNTIsIDkzLCA4LCAzLCAyNTIsIDg3LCA4LCAzLCAyNTIsIDg2LCAKKyAgICA4LCAzLCAyNTIsIDg5LCA4LCAzLCAyNTIsIDg4LCA4LCAzLCAyMjksIDE3NCwgOCwgMywgMjI5LCAxNzMsIDgsIDMsIDIyOSwgCisgICAgMTc5LCA4LCAzLCAyMjksIDE3NSwgOCwgMywgMjI5LCAxNzYsIDgsIDMsIDIyOSwgMTc4LCA4LCAzLCAyMjksIDE3NywgOCwgCisgICAgMywgMjI5LCAxODIsIDgsIDMsIDIyOSwgMTgxLCA4LCAzLCAyMjksIDE4NCwgOCwgMywgMjI5LCAxODMsIDgsIDMsIDIyOSwgCisgICAgMTcwLCA4LCAzLCAyMjksIDE2OSwgOCwgMywgMjI5LCAxNzIsIDgsIDMsIDIyOSwgMTcxLCA4LCAzLCAyMjksIDE2MywgOCwgCisgICAgMywgMjI5LCAxNjIsIDgsIDMsIDIyOSwgMTY3LCA4LCAzLCAyMjksIDE2NiwgOCwgMywgMjI5LCAxNjQsIDgsIDMsIDIyOSwgCisgICAgMTY1LCA4LCAzLCAyMjksIDE1NywgOCwgMywgMjI5LCAxNTYsIDgsIDMsIDIyOSwgMTYxLCA4LCAzLCAyMjksIDE2MCwgOCwgCisgICAgMywgMjI5LCAxNTgsIDgsIDMsIDIyOSwgMTU5LCA4LCAzLCAyNDEsIDExNywgOCwgMywgMjQxLCAxMTYsIDgsIDMsIDI0MSwgCisgICAgMTIyLCA4LCAzLCAyNDEsIDExOCwgOCwgMywgMjQxLCAxMTksIDgsIDMsIDI0MSwgMTIxLCA4LCAzLCAyNDEsIDEyMCwgOCwgCisgICAgMywgMjQxLCAxMjUsIDgsIDMsIDI0MSwgMTI0LCA4LCAzLCAyNDEsIDEyNywgOCwgMywgMjQxLCAxMjYsIDgsIDMsIDI0MSwgCisgICAgMTA4LCA4LCAzLCAyNDEsIDExMCwgOCwgMywgMjQxLCAxMDksIDgsIDMsIDI0MSwgMTEzLCA4LCAzLCAyNDEsIDExMiwgOCwgCisgICAgMywgMjQxLCAxMTUsIDgsIDMsIDI0MSwgMTE0LCA4LCAzLCAyNDEsIDEwNCwgOCwgMywgMjQxLCAxMDMsIDgsIDMsIDI0MSwgCisgICAgMTExLCA4LCAzLCAyNDEsIDEwNywgOCwgMywgMjQxLCAxMDUsIDgsIDMsIDI0MSwgMTA2LCA4LCAzLCAyNDEsIDk4LCA4LCAzLCAKKyAgICAyNDEsIDEwMiwgOCwgMywgMjQxLCAxMDEsIDgsIDMsIDI0MSwgOTksIDgsIDMsIDI0MSwgMTAwLCA4LCAzLCAyMzAsIDE3NywgCisgICAgOCwgMywgMjMwLCAxNzYsIDgsIDMsIDIzMCwgMjM1LCA4LCAzLCAyMzAsIDE4MywgOCwgMywgMjMwLCAyMDgsIDgsIDMsIAorICAgIDIzMCwgMjI2LCA4LCAzLCAyMzAsIDIyNCwgOCwgMywgMjMxLCAxNDQsIDgsIDMsIDIzMSwgMTM5LCA4LCAzLCAxODYsIDgsIAorICAgIDMsIDIzMSwgMTc3LCA4LCAzLCAyMzAsIDc5LCA4LCAzLCAyMzAsIDc4LCA4LCAzLCAyMzAsIDgyLCA4LCAzLCAyMzAsIDgwLCAKKyAgICA4LCAzLCAyMzAsIDEyNiwgOCwgMywgMjMwLCAxMTIsIDgsIDMsIDIzMCwgMTY2LCA4LCAzLCAyMzAsIDEzMSwgOCwgMywgCisgICAgMjMxLCAzMSwgOCwgMywgMjMxLCA5NiwgOCwgMywgMjMwLCA2MCwgOCwgMywgMjMwLCA1NiwgOCwgMywgMjMwLCAxMDcsIDgsIAorICAgIDMsIDIzMCwgNzUsIDgsIDMsIDIzMCwgNjgsIDgsIDMsIDIzMCwgNzMsIDgsIDMsIDIzMCwgMzMsIDgsIDMsIDIzMCwgMzIsIAorICAgIDgsIDMsIDIzMCwgMzgsIDgsIDMsIDIzMCwgMzUsIDgsIDMsIDI0NCwgOTEsIDgsIDMsIDI0NCwgODYsIDgsIDMsIDI0NCwgCisgICAgMTI5LCA4LCAzLCAyNDQsIDEwNiwgOCwgMywgMjQ0LCAxNzUsIDgsIDMsIDI0NCwgMTY2LCA4LCAzLCAyNDQsIDIwNCwgOCwgCisgICAgMywgMjQ0LCAxNzgsIDgsIDMsIDI0NCwgMTEsIDgsIDMsIDI0NCwgNTEsIDgsIDMsIDI0NCwgMzUsIDgsIDMsIDI0MywgMjI1LCAKKyAgICA4LCAzLCAyNDMsIDIyNCwgOCwgMywgMjQzLCAyNDEsIDgsIDMsIDI0MywgMjMwLCA4LCAzLCAyNDMsIDIyOCwgOCwgMywgCisgICAgMjQzLCAyMjksIDgsIDMsIDI0MywgMjEyLCA4LCAzLCAyNDMsIDIxMSwgOCwgMywgMjQzLCAyMTUsIDgsIDMsIDI0MywgMjEzLCAKKyAgICA4LCAzLCAyMTMsIDE0NCwgOCwgMywgMjEzLCAxMzksIDgsIDMsIDIxMywgMTc2LCA4LCAzLCAyMTMsIDE1MywgOCwgMywgCisgICAgMjEzLCAxNjYsIDgsIDMsIDIxMywgMTYzLCA4LCAzLCAyMTMsIDE2OCwgOCwgMywgMjEzLCAxNjcsIDgsIDMsIDIxNCwgNywgCisgICAgOCwgMywgMjE0LCAyLCA4LCAzLCAyMTQsIDI3LCA4LCAzLCAyMTQsIDE4LCA4LCAzLCAyMTMsIDEyNSwgOCwgMywgMjEzLCAKKyAgICAxMjEsIDgsIDMsIDIxMywgMTM4LCA4LCAzLCAyMTMsIDEyNiwgOCwgMywgMjEzLCAxNzgsIDgsIDMsIDIxMywgMjQ0LCA4LCAKKyAgICAzLCAyMTIsIDExMCwgOCwgMywgMjEyLCAxMDgsIDgsIDMsIDIxMiwgMTE2LCA4LCAzLCAyMTIsIDExMywgOCwgMywgMjEyLCAKKyAgICAxMTEsIDgsIDMsIDIxMiwgMTEyLCA4LCAzLCAyMTIsIDEwMiwgOCwgMywgMjEyLCAxMDEsIDgsIDMsIDIxMiwgMTA2LCA4LCAKKyAgICAzLCAyMTIsIDEwNSwgOCwgMywgMjEyLCAxMDMsIDgsIDMsIDIxMiwgMTA0LCA4LCAzLCAyNDcsIDE4NiwgOCwgMywgMjQ3LCAKKyAgICAxNzQsIDgsIDMsIDI0OCwgMTEsIDgsIDMsIDI0NywgMjExLCA4LCAzLCAyNDcsIDI0NCwgOCwgMywgMjQ3LCAyNDgsIDgsIDMsIAorICAgIDI0NywgMjQ3LCA4LCAzLCAyNDgsIDE2MCwgOCwgMywgMjQ4LCAxNTUsIDgsIDMsIDI0OCwgMjI5LCA4LCAzLCAyNDgsIDE4MCwgCisgICAgOCwgMywgMjQ2LCA3MCwgOCwgMywgMjQ2LCA3MSwgOCwgMywgMjQ3LCAxMjgsIDgsIDMsIDI0NiwgMTEwLCA4LCAzLCAyNDcsIAorICAgIDE1MywgOCwgMywgMjQ3LCAxMzAsIDgsIDMsIDI0OCwgMzgsIDgsIDMsIDI0OCwgOTgsIDgsIDMsIDI0OCwgNTMsIDgsIDMsIAorICAgIDI0NiwgNjEsIDgsIDMsIDI0NiwgNTksIDgsIDMsIDI0NiwgODYsIDgsIDMsIDI0NiwgNjksIDgsIDMsIDI0NiwgNjQsIDgsIAorICAgIDMsIDI0NiwgNjcsIDgsIDMsIDIxNiwgNjgsIDgsIDMsIDIxNiwgNjIsIDgsIDMsIDIxNiwgMTE4LCA4LCAzLCAyMTYsIDc3LCAKKyAgICA4LCAzLCAyMTYsIDExMCwgOCwgMywgMjE2LCAxMTIsIDgsIDMsIDIxNiwgMTExLCA4LCAzLCAyMTcsIDQ3LCA4LCAzLCAyMTcsIAorICAgIDM0LCA4LCAzLCAyMTcsIDEwNiwgOCwgMywgMjE3LCA1NSwgOCwgMywgMjE1LCAxMDMsIDgsIDMsIDIxNSwgMTAyLCA4LCAzLCAKKyAgICAyMTUsIDEwNSwgOCwgMywgMjE1LCAxMDQsIDgsIDMsIDIxNiwgNiwgOCwgMywgMjE2LCAyLCA4LCAzLCAxMTIsIDgsIDMsIAorICAgIDIxNiwgMTQsIDgsIDMsIDIxNiwgMjE0LCA4LCAzLCAyMTcsIDIzLCA4LCAzLCAyMTYsIDIzOCwgOCwgMywgMjE1LCA4OCwgOCwgCisgICAgMywgMjE1LCA4MywgOCwgMywgMjE1LCAxMTksIDgsIDMsIDIxNSwgMTAxLCA4LCAzLCAyMTUsIDg5LCA4LCAzLCAyMTUsIDk5LCAKKyAgICA4LCAzLCAyNDgsIDExNSwgOCwgMywgMjQ4LCAxMTQsIDgsIDMsIDI0OCwgMTIwLCA4LCAzLCAyNDgsIDExNiwgOCwgMywgCisgICAgMjQ4LCAxMTcsIDgsIDMsIDI0OCwgMTE5LCA4LCAzLCAyNDgsIDExOCwgOCwgMywgMjQ4LCAxMzYsIDgsIDMsIDI0OCwgMTM1LCAKKyAgICA4LCAzLCAyNDgsIDE0MywgOCwgMywgMjQ4LCAxMzcsIDgsIDMsIDI0OCwgMTA1LCA4LCAzLCAyNDgsIDEwNywgOCwgMywgCisgICAgMjQ4LCAxMDYsIDgsIDMsIDI0OCwgMTEwLCA4LCAzLCAyNDgsIDEwOSwgOCwgMywgMjQ4LCAxMTMsIDgsIDMsIDI0OCwgMTExLCAKKyAgICA4LCAzLCAyNDgsIDEyOCwgOCwgMywgMjQ4LCAxMzEsIDgsIDMsIDI0OCwgMTI5LCA4LCAzLCAyNDgsIDEwMSwgOCwgMywgCisgICAgMjQ4LCAxMDAsIDgsIDMsIDI0OCwgMTA4LCA4LCAzLCAyNDgsIDEwNCwgOCwgMywgMjQ4LCAxMDIsIDgsIDMsIDI0OCwgMTAzLCAKKyAgICA4LCAzLCAyMjksIDEzMSwgOCwgMywgMjI5LCAxMzAsIDgsIDMsIDIyOSwgMTM4LCA4LCAzLCAyMjksIDEzMywgOCwgMywgCisgICAgMjI5LCAxMzQsIDgsIDMsIDIyOSwgMTM1LCA4LCAzLCAyMjksIDE0NywgOCwgMywgMjI5LCAxNDYsIDgsIDMsIDIyOSwgMTUzLCAKKyAgICA4LCAzLCAyMjksIDE0OCwgOCwgMywgMjI5LCAxMjMsIDgsIDMsIDIyOSwgMTIyLCA4LCAzLCAyMjksIDEyOSwgOCwgMywgCisgICAgMjI5LCAxMjQsIDgsIDMsIDIyOSwgMTM5LCA4LCAzLCAyMjksIDE0NSwgOCwgMywgMjI5LCAxNDMsIDgsIDMsIDIyOSwgMTE1LCAKKyAgICA4LCAzLCAyMjksIDExNCwgOCwgMywgMjI5LCAxMjAsIDgsIDMsIDIyOSwgMTE4LCA4LCAzLCAyMjksIDExNiwgOCwgMywgCisgICAgMjI5LCAxMTcsIDgsIDMsIDI0MSwgODQsIDgsIDMsIDI0MSwgODMsIDgsIDMsIDI0MSwgOTAsIDgsIDMsIDI0MSwgODUsIDgsIAorICAgIDMsIDI0MSwgODcsIDgsIDMsIDI0MSwgODYsIDgsIDMsIDI0MSwgODksIDgsIDMsIDI0MSwgODgsIDgsIDMsIDI0MSwgOTUsIAorICAgIDgsIDMsIDI0MSwgOTQsIDgsIDMsIDI0MSwgOTcsIDgsIDMsIDI0MSwgOTYsIDgsIDMsIDI0MSwgNzgsIDgsIDMsIDI0MSwgCisgICAgNzksIDgsIDMsIDI0MSwgODEsIDgsIDMsIDI0MSwgODAsIDgsIDMsIDI0MSwgODIsIDgsIDMsIDI0MSwgOTEsIDgsIDMsIAorICAgIDI0MSwgOTMsIDgsIDMsIDI0MSwgOTIsIDgsIDMsIDI0MSwgNzcsIDgsIDMsIDIyOCwgMTk0LCA4LCAzLCAyMjgsIDE5MiwgOCwgCisgICAgMywgMjI4LCAyMzgsIDgsIDMsIDIyOCwgMTk3LCA4LCAzLCAyMjgsIDIyMCwgOCwgMywgMjI4LCAyMzQsIDgsIDMsIDIyOCwgCisgICAgMjMzLCA4LCAzLCAyMjksIDE4OCwgOCwgMywgMTk4LCA4LCAzLCAyMjksIDIwMiwgOCwgMywgMjI3LCAxOTAsIDgsIDMsIAorICAgIDIyNywgMTkyLCA4LCAzLCAyMjcsIDE5MSwgOCwgMywgMjI4LCA1NiwgOCwgMywgMjI4LCA0MywgOCwgMywgMjI4LCA3OSwgOCwgCisgICAgMywgMjI4LCA2NSwgOCwgMywgMjI5LCA4OCwgOCwgMywgMjI5LCAxMTIsIDgsIDMsIDIyOSwgOTksIDgsIDMsIDIyNywgMTg1LCAKKyAgICA4LCAzLCAyMjcsIDE4MSwgOCwgMywgMjI3LCAyNDIsIDgsIDMsIDIyNywgMTg5LCA4LCAzLCAyMjcsIDE4NywgOCwgMywgCisgICAgMjI3LCAxODgsIDgsIDMsIDI0MSwgMTQ4LCA4LCAzLCAyNDEsIDE0NywgOCwgMywgMjQxLCAxNTMsIDgsIDMsIDI0MSwgMTQ5LCAKKyAgICA4LCAzLCAyNDEsIDE1MCwgOCwgMywgMjQxLCAxNTIsIDgsIDMsIDI0MSwgMTUxLCA4LCAzLCAyNDEsIDE1OCwgOCwgMywgCisgICAgMjQxLCAxNTcsIDgsIDMsIDI0MSwgMTYwLCA4LCAzLCAyNDEsIDE1OSwgOCwgMywgMjQxLCAxNDAsIDgsIDMsIDI0MSwgMTQyLCAKKyAgICA4LCAzLCAyNDEsIDE0MSwgOCwgMywgMjQxLCAxNDQsIDgsIDMsIDI0MSwgMTQ2LCA4LCAzLCAyNDEsIDE0NSwgOCwgMywgCisgICAgMjQxLCAxNTQsIDgsIDMsIDI0MSwgMTU2LCA4LCAzLCAyNDEsIDE1NSwgOCwgMywgMjQxLCAxMzYsIDgsIDMsIDI0MSwgMTM1LCAKKyAgICA4LCAzLCAyNDEsIDE0MywgOCwgMywgMjQxLCAxMzksIDgsIDMsIDI0MSwgMTM3LCA4LCAzLCAyNDEsIDEzOCwgOCwgMywgCisgICAgMjQxLCAxMzAsIDgsIDMsIDI0MSwgMTI5LCA4LCAzLCAyNDEsIDEzNCwgOCwgMywgMjQxLCAxMzMsIDgsIDMsIDI0MSwgMTMxLCAKKyAgICA4LCAzLCAyNDEsIDEzMiwgOCwgMywgMjMyLCAyMDEsIDgsIDMsIDIzMiwgMTk1LCA4LCAzLCAyMzIsIDI0NywgOCwgMywgCisgICAgMjMyLCAyMDgsIDgsIDMsIDIzMiwgMjM5LCA4LCAzLCAyMzIsIDIzOCwgOCwgMywgMjMyLCAyNDIsIDgsIDMsIDIzMiwgMjQwLCAKKyAgICA4LCAzLCAyMzMsIDg1LCA4LCAzLCAyMzMsIDc1LCA4LCAzLCAyMzMsIDE0MSwgOCwgMywgMjMzLCA5NCwgOCwgMywgMjMyLCAKKyAgICA4NCwgOCwgMywgMjMyLCA4MywgOCwgMywgMjMyLCA4NiwgOCwgMywgMjMyLCA4NSwgOCwgMywgMjMyLCAxMjIsIDgsIDMsIAorICAgIDIzMiwgMTEyLCA4LCAzLCAyMzIsIDE2MiwgOCwgMywgMjMyLCAxMjYsIDgsIDMsIDIzMywgOCwgOCwgMywgMjMzLCA2NCwgOCwgCisgICAgMywgMjMzLCAyMywgOCwgMywgMjMyLCA3OSwgOCwgMywgMjMyLCA3NywgOCwgMywgMjMyLCAxMDMsIDgsIDMsIDIzMiwgODIsIAorICAgIDgsIDMsIDIzMiwgODAsIDgsIDMsIDIzMiwgODEsIDgsIDMsIDIzMiwgNTksIDgsIDMsIDIzMiwgNTgsIDgsIDMsIDIzMiwgCisgICAgNjcsIDgsIDMsIDIzMiwgNjIsIDgsIDMsIDIzMiwgNjAsIDgsIDMsIDIzMiwgNjEsIDgsIDMsIDI0MiwgMTk2LCA4LCAzLCAKKyAgICAyNDIsIDE5NSwgOCwgMywgMjQyLCAyMjEsIDgsIDMsIDI0MiwgMjA2LCA4LCAzLCAyNDIsIDIxMywgOCwgMywgMjQyLCAyMTIsIAorICAgIDgsIDMsIDI0MiwgMjE1LCA4LCAzLCAyNDIsIDIxNCwgOCwgMywgMjQzLCA5NiwgOCwgMywgMjQzLCA5MSwgOCwgMywgMjQzLCAKKyAgICAxNDIsIDgsIDMsIDI0MywgMTA2LCA4LCAzLCAyNDIsIDk4LCA4LCAzLCAyNDIsIDk3LCA4LCAzLCAyNDIsIDEwMCwgOCwgMywgCisgICAgMjQyLCA5OSwgOCwgMywgMjQyLCAxNjEsIDgsIDMsIDI0MiwgMTU5LCA4LCAzLCAyNDIsIDE4MSwgOCwgMywgMjQyLCAxNjksIAorICAgIDgsIDMsIDI0MywgNDAsIDgsIDMsIDI0MywgMzgsIDgsIDMsIDI0MywgNjksIDgsIDMsIDI0MywgNTEsIDgsIDMsIDI0MiwgCisgICAgODgsIDgsIDMsIDI0MiwgODcsIDgsIDMsIDI0MiwgMTIwLCA4LCAzLCAyNDIsIDk2LCA4LCAzLCAyNDIsIDg5LCA4LCAzLCAKKyAgICAyNDIsIDk1LCA4LCAzLCAyMzQsIDY3LCA4LCAzLCAyMzQsIDY2LCA4LCAzLCAyMzQsIDk4LCA4LCAzLCAyMzQsIDgxLCA4LCAKKyAgICAzLCAyMzQsIDkxLCA4LCAzLCAyMzQsIDk0LCA4LCAzLCAyMzQsIDkyLCA4LCAzLCAyMzQsIDIwOCwgOCwgMywgMjM0LCAxOTYsIAorICAgIDgsIDMsIDE3NiwgOCwgMywgMjM0LCAyMzQsIDgsIDMsIDIzMywgMjA2LCA4LCAzLCAyMzMsIDIxMSwgOCwgMywgMjMzLCAKKyAgICAyMDgsIDgsIDMsIDIzNCwgNiwgOCwgMywgMjM0LCAyLCA4LCAzLCAyMzQsIDM0LCA4LCAzLCAyMzQsIDEzLCA4LCAzLCAyMzQsIAorICAgIDE2MiwgOCwgMywgMjM0LCAxNDYsIDgsIDMsIDIzNCwgMTg4LCA4LCAzLCAyMzQsIDE2NSwgOCwgMywgMjMzLCAxOTUsIDgsIAorICAgIDMsIDIzMywgMTkyLCA4LCAzLCAyMzMsIDIyMywgOCwgMywgMjMzLCAyMDUsIDgsIDMsIDIzMywgMTk4LCA4LCAzLCAyMzMsIAorICAgIDIwMiwgOCwgMywgMjQzLCAyMiwgOCwgMywgMjQzLCAyMSwgOCwgMywgMjQzLCAyNiwgOCwgMywgMjQzLCAyMywgOCwgMywgCisgICAgMjQzLCAyNSwgOCwgMywgMjQzLCAyNCwgOCwgMywgMjQzLCAzMywgOCwgMywgMjQzLCAzMiwgOCwgMywgMjQzLCAzNiwgOCwgCisgICAgMywgMjQzLCAzNCwgOCwgMywgMjQzLCAxMywgOCwgMywgMjQzLCAxMiwgOCwgMywgMjQzLCAxNSwgOCwgMywgMjQzLCAxNCwgCisgICAgOCwgMywgMjQzLCAxOCwgOCwgMywgMjQzLCAxNywgOCwgMywgMjQzLCAyMCwgOCwgMywgMjQzLCAxOSwgOCwgMywgMjQzLCAKKyAgICAyOCwgOCwgMywgMjQzLCAyNywgOCwgMywgMjQzLCAzMSwgOCwgMywgMjQzLCAyOSwgOCwgMywgMjQzLCA4LCA4LCAzLCAyNDMsIAorICAgIDcsIDgsIDMsIDI0MywgMTYsIDgsIDMsIDI0MywgMTEsIDgsIDMsIDI0MywgOSwgOCwgMywgMjQzLCAxMCwgOCwgMywgMjMwLCAKKyAgICAyNTQsIDgsIDMsIDIzMCwgMjU1LCA4LCAzLCAyMzEsIDE3LCA4LCAzLCAyMzEsIDE2LCA4LCAzLCAyMzEsIDE5LCA4LCAzLCAKKyAgICAyMzEsIDE4LCA4LCAzLCAyMzAsIDI0NSwgOCwgMywgMjMwLCAyNDcsIDgsIDMsIDIzMCwgMjQ2LCA4LCAzLCAyMzAsIDI1MCwgCisgICAgOCwgMywgMjMwLCAyNDksIDgsIDMsIDIzMCwgMjUyLCA4LCAzLCAyMzAsIDI1MSwgOCwgMywgMjMxLCAwLCA4LCAzLCAyMzEsIAorICAgIDIsIDgsIDMsIDIzMSwgMSwgOCwgMywgMjMwLCAyNDEsIDgsIDMsIDIzMCwgMjQwLCA4LCAzLCAyMzAsIDI0OCwgOCwgMywgCisgICAgMjMwLCAyNDQsIDgsIDMsIDIzMCwgMjQyLCA4LCAzLCAyMzAsIDI0MywgOCwgMywgMjQwLCAxODcsIDgsIDMsIDI0MCwgMTg2LCAKKyAgICA4LCAzLCAyNDAsIDE5MywgOCwgMywgMjQwLCAxODgsIDgsIDMsIDI0MCwgMTkwLCA4LCAzLCAyNDAsIDE4OSwgOCwgMywgCisgICAgMjQwLCAxOTIsIDgsIDMsIDI0MCwgMTkxLCA4LCAzLCAyNDAsIDE5OCwgOCwgMywgMjQwLCAxOTcsIDgsIDMsIDI0MCwgMjAwLCAKKyAgICA4LCAzLCAyNDAsIDE5OSwgOCwgMywgMjQwLCAxNzksIDgsIDMsIDI0MCwgMTc4LCA4LCAzLCAyNDAsIDE4MSwgOCwgMywgCisgICAgMjQwLCAxODAsIDgsIDMsIDI0MCwgMTgzLCA4LCAzLCAyNDAsIDE4MiwgOCwgMywgMjQwLCAxODUsIDgsIDMsIDI0MCwgMTg0LCAKKyAgICA4LCAzLCAyNDAsIDE5NCwgOCwgMywgMjQwLCAxOTYsIDgsIDMsIDI0MCwgMTk1LCA4LCAzLCAyMjksIDI5LCA4LCAzLCAyMjksIAorICAgIDMxLCA4LCAzLCAyMjksIDMwLCA4LCAzLCAyMjksIDcyLCA4LCAzLCAyMjksIDcwLCA4LCAzLCAyMjksIDgyLCA4LCAzLCAKKyAgICAyMjksIDc1LCA4LCAzLCAyMjgsIDI0OCwgOCwgMywgMjI4LCAyNDcsIDgsIDMsIDIyOCwgMjQ5LCA4LCAzLCAyMjksIDEsIDgsIAorICAgIDMsIDIyOCwgMjU0LCA4LCAzLCAyMjksIDksIDgsIDMsIDIyOSwgMywgOCwgMywgMjI5LCA2MywgOCwgMywgMjI5LCA2OSwgOCwgCisgICAgMywgMjI5LCA2NSwgOCwgMywgMjQxLCAxNjMsIDgsIDMsIDI0MSwgMTczLCA4LCAzLCAyNDEsIDE4MiwgOCwgMywgMjQyLCAyLCAKKyAgICA4LCAzLCAyNDEsIDI1MCwgOCwgMywgMTYyLCA4LCAzLCAyNDIsIDEzLCA4LCAzLCAyNDAsIDIxMywgOCwgMywgMjQwLCAyMTIsIAorICAgIDgsIDMsIDI0MCwgMjE1LCA4LCAzLCAyNDAsIDIxNCwgOCwgMywgMjQwLCAyNDksIDgsIDMsIDI0MCwgMjQwLCA4LCAzLCAKKyAgICAyNDEsIDc1LCA4LCAzLCAyNDEsIDU0LCA4LCAzLCAyNDEsIDIwMSwgOCwgMywgMjQxLCAyNDUsIDgsIDMsIDI0MSwgMjEzLCAKKyAgICA4LCAzLCAyMTIsIDQzLCA4LCAzLCAyMTIsIDI4LCA4LCAzLCAyMTIsIDY1LCA4LCAzLCAyMTIsIDUxLCA4LCAzLCAyMTEsIAorICAgIDE4NSwgOCwgMywgMjExLCAxODcsIDgsIDMsIDIxMSwgMTg2LCA4LCAzLCAyMTEsIDIwMywgOCwgMywgMjExLCAyMjcsIDgsIAorICAgIDMsIDIxMSwgMjEwLCA4LCAzLCAyMTIsIDUsIDgsIDMsIDIxMiwgMjIsIDgsIDMsIDIxMiwgMTAsIDgsIDMsIDIxMCwgMzAsIAorICAgIDgsIDMsIDIxMCwgMjksIDgsIDMsIDIxMCwgNDQsIDgsIDMsIDIxMCwgMzIsIDgsIDMsIDIxMCwgMzcsIDgsIDMsIDIxMCwgCisgICAgMzksIDgsIDMsIDIxMCwgMzgsIDgsIDMsIDIxMCwgMTAyLCA4LCAzLCAyMTAsIDk5LCA4LCAzLCAyMTAsIDExNiwgOCwgMywgCisgICAgMjEwLCAxMDUsIDgsIDMsIDIxMCwgNiwgOCwgMywgMjEwLCA4LCA4LCAzLCAyMTAsIDcsIDgsIDMsIDIxMCwgMTksIDgsIDMsIAorICAgIDIxMCwgMTgsIDgsIDMsIDIxMCwgMjMsIDgsIDMsIDIxMCwgMjAsIDgsIDMsIDIxMCwgODQsIDgsIDMsIDIxMCwgOTQsIDgsIAorICAgIDMsIDIxMCwgODgsIDgsIDMsIDIxMCwgMiwgOCwgMywgMjEwLCAxLCA4LCAzLCAyMTAsIDEzLCA4LCAzLCAyMTAsIDUsIDgsIAorICAgIDMsIDIxMCwgMywgOCwgMywgMjEwLCA0LCA4LCAzLCAyMDksIDI0NSwgOCwgMywgMjA5LCAyNDQsIDgsIDMsIDIwOSwgMjUwLCAKKyAgICA4LCAzLCAyMDksIDI0OCwgOCwgMywgMjA5LCAyNDYsIDgsIDMsIDIwOSwgMjQ3LCA4LCAzLCAyNTAsIDM2LCA4LCAzLCAyNTAsIAorICAgIDMyLCA4LCAzLCAyNTAsIDU5LCA4LCAzLCAyNTAsIDQ1LCA4LCAzLCAyNTAsIDU2LCA4LCAzLCAyNTAsIDUwLCA4LCAzLCAKKyAgICAyNTAsIDU4LCA4LCAzLCAyNTAsIDU3LCA4LCAzLCAyNTAsIDIzMiwgOCwgMywgMjUwLCAyMjUsIDgsIDMsIDI1MSwgNDEsIDgsIAorICAgIDMsIDI1MSwgMywgOCwgMywgMjQ5LCAxMTIsIDgsIDMsIDI0OSwgMTE0LCA4LCAzLCAyNDksIDExMywgOCwgMywgMjQ5LCAKKyAgICAxNjEsIDgsIDMsIDI0OSwgMTUyLCA4LCAzLCAyNDksIDI0NiwgOCwgMywgMjQ5LCAxNzcsIDgsIDMsIDI1MCwgMTY4LCA4LCAKKyAgICAzLCAyNTAsIDE5OCwgOCwgMywgMjUwLCAxNzMsIDgsIDMsIDI0OSwgOTIsIDgsIDMsIDI0OSwgOTAsIDgsIDMsIDI0OSwgCisgICAgMTIwLCA4LCAzLCAyNDksIDExMCwgOCwgMywgMjQ5LCA5NywgOCwgMywgMjQ5LCAxMDksIDgsIDMsIDI0OSwgNzEsIDgsIDMsIAorICAgIDI0OSwgNzAsIDgsIDMsIDI0OSwgODEsIDgsIDMsIDI0OSwgNzcsIDgsIDMsIDI0OSwgNzIsIDgsIDMsIDI0OSwgNzQsIDgsIAorICAgIDMsIDIwOSwgMjI4LCA4LCAzLCAyMDksIDIyNywgOCwgMywgMjA5LCAyMzQsIDgsIDMsIDIwOSwgMjI5LCA4LCAzLCAyMDksIAorICAgIDIzMSwgOCwgMywgMjA5LCAyMzAsIDgsIDMsIDIwOSwgMjMzLCA4LCAzLCAyMDksIDIzMiwgOCwgMywgMjA5LCAyNDAsIDgsIAorICAgIDMsIDIwOSwgMjM5LCA4LCAzLCAyMDksIDI0MywgOCwgMywgMjA5LCAyNDEsIDgsIDMsIDIwOSwgMjI0LCA4LCAzLCAyMDksIAorICAgIDIyNiwgOCwgMywgMjA5LCAyMjUsIDgsIDMsIDIwOSwgMjM1LCA4LCAzLCAyMDksIDIzOCwgOCwgMywgMjA5LCAyMzYsIDgsIAorICAgIDMsIDIwOSwgMjE3LCA4LCAzLCAyMDksIDIyMSwgOCwgMywgMjA5LCAyMjAsIDgsIDMsIDIwOSwgMjE4LCA4LCAzLCAyMDksIAorICAgIDIxOSwgOCwgMywgMjA5LCAyMTEsIDgsIDMsIDIwOSwgMjEwLCA4LCAzLCAyMDksIDIxNiwgOCwgMywgMjA5LCAyMTQsIDgsIAorICAgIDMsIDIwOSwgMjEyLCA4LCAzLCAyMDksIDIxMywgOCwgMywgMjI3LCAxMDgsIDgsIDMsIDIyNywgMTA3LCA4LCAzLCAyMjcsIAorICAgIDExMywgOCwgMywgMjI3LCAxMDksIDgsIDMsIDIyNywgMTEwLCA4LCAzLCAyMjcsIDExMiwgOCwgMywgMjI3LCAxMTEsIDgsIAorICAgIDMsIDIyNywgMTE4LCA4LCAzLCAyMjcsIDExNywgOCwgMywgMjI3LCAxMjEsIDgsIDMsIDIyNywgMTIwLCA4LCAzLCAyMjcsIAorICAgIDEwMSwgOCwgMywgMjI3LCAxMDIsIDgsIDMsIDIyNywgMTA1LCA4LCAzLCAyMjcsIDEwNiwgOCwgMywgMjI3LCAxMTQsIDgsIAorICAgIDMsIDIyNywgMTE2LCA4LCAzLCAyMjcsIDk2LCA4LCAzLCAyMjcsIDEwNCwgOCwgMywgMjI3LCAxMDAsIDgsIDMsIDIyNywgCisgICAgOTcsIDgsIDMsIDIyNywgOTgsIDgsIDMsIDIyNywgOTEsIDgsIDMsIDIyNywgOTAsIDgsIDMsIDIyNywgOTUsIDgsIDMsIAorICAgIDIyNywgOTQsIDgsIDMsIDIyNywgOTIsIDgsIDMsIDIyNywgOTMsIDgsIDMsIDIxOSwgMTI5LCA4LCAzLCAxOTUsIDgsIDMsIAorICAgIDIxOSwgMTkzLCA4LCAzLCAyMTksIDEzMiwgOCwgMywgMjE5LCAxODUsIDgsIDMsIDIxOSwgMTg4LCA4LCAzLCAyMTksIDE4NiwgCisgICAgOCwgMywgMjIxLCAyMjgsIDgsIDMsIDIyMSwgMjE2LCA4LCAzLCAyMDYsIDgsIDMsIDIyMSwgMjM2LCA4LCAzLCAyMTgsIDI5LCAKKyAgICA4LCAzLCAyMTgsIDMxLCA4LCAzLCAyMTgsIDMwLCA4LCAzLCAyMTksIDM2LCA4LCAzLCAyMTksIDI1LCA4LCAzLCAyMTksIAorICAgIDYwLCA4LCAzLCAyMTksIDQwLCA4LCAzLCAyMjAsIDExNiwgOCwgMywgMjIxLCAxODMsIDgsIDMsIDIyMCwgMTQxLCA4LCAzLCAKKyAgICAyMTgsIDYsIDgsIDMsIDIxOCwgNCwgOCwgMywgMjE4LCA4NCwgOCwgMywgMjE4LCAyOCwgOCwgMywgMjE4LCAxMCwgOCwgMywgCisgICAgMjE4LCAxOCwgOCwgMywgMjE3LCAxNjcsIDgsIDMsIDIxNywgMTY2LCA4LCAzLCAyMTcsIDIzMywgOCwgMywgMjE3LCAxNzQsIAorICAgIDgsIDMsIDIxNywgMTY5LCA4LCAzLCAyMTcsIDE3MywgOCwgMywgMjE4LCAxODgsIDgsIDMsIDIxOCwgMTg3LCA4LCAzLCAKKyAgICAyMTgsIDE5NCwgOCwgMywgMjE4LCAxODksIDgsIDMsIDIxOCwgMTkxLCA4LCAzLCAyMTgsIDE5MywgOCwgMywgMjE4LCAxOTIsIAorICAgIDgsIDMsIDIxOCwgMjAyLCA4LCAzLCAyMTgsIDIwMCwgOCwgMywgMjE4LCAyMjUsIDgsIDMsIDIxOCwgMjAzLCA4LCAzLCAKKyAgICAyMTgsIDE4MywgOCwgMywgMjE4LCAxODIsIDgsIDMsIDIxOCwgMTg2LCA4LCAzLCAyMTgsIDE4NCwgOCwgMywgMjE4LCAxOTYsIAorICAgIDgsIDMsIDIxOCwgMTk5LCA4LCAzLCAyMTgsIDE5NywgOCwgMywgMjE4LCAxNzksIDgsIDMsIDIxOCwgMTc3LCA4LCAzLCAKKyAgICAyMTgsIDE4MSwgOCwgMywgMjE4LCAxODAsIDgsIDMsIDIxOCwgMTcyLCA4LCAzLCAyMTgsIDE3MSwgOCwgMywgMjE4LCAxNzYsIAorICAgIDgsIDMsIDIxOCwgMTc1LCA4LCAzLCAyMTgsIDE3MywgOCwgMywgMjE4LCAxNzQsIDgsIDMsIDIxMCwgNzcsIDgsIDMsIDIxMCwgCisgICAgNzYsIDgsIDMsIDIxMCwgODIsIDgsIDMsIDIxMCwgNzksIDgsIDMsIDIxMCwgNTksIDgsIDMsIDIxMCwgNjEsIDgsIDMsIAorICAgIDIxMCwgNjAsIDgsIDMsIDIxMCwgNjQsIDgsIDMsIDIxMCwgNjMsIDgsIDMsIDIxMCwgNjcsIDgsIDMsIDIxMCwgNjUsIDgsIAorICAgIDMsIDIxMCwgNzEsIDgsIDMsIDIxMCwgNzAsIDgsIDMsIDIxMCwgNzQsIDgsIDMsIDIxMCwgNzIsIDgsIDMsIDIxMCwgNTUsIAorICAgIDgsIDMsIDIxMCwgNTQsIDgsIDMsIDIxMCwgNjIsIDgsIDMsIDIxMCwgNTgsIDgsIDMsIDIxMCwgNTYsIDgsIDMsIDIxMCwgCisgICAgNTcsIDgsIDMsIDIxMCwgNDcsIDgsIDMsIDIxMCwgNDYsIDgsIDMsIDIxMCwgNTEsIDgsIDMsIDIxMCwgNTAsIDgsIDMsIAorICAgIDIxMCwgNDgsIDgsIDMsIDIxMCwgNDksIDgsIDMsIDI1MCwgMTQ0LCA4LCAzLCAyNTAsIDE0MSwgOCwgMywgMjUwLCAxNjUsIAorICAgIDgsIDMsIDI1MCwgMTUyLCA4LCAzLCAyNTAsIDczLCA4LCAzLCAyNTAsIDcyLCA4LCAzLCAyNTAsIDc1LCA4LCAzLCAyNTAsIAorICAgIDc0LCA4LCAzLCAyNTAsIDg3LCA4LCAzLCAyNTAsIDg2LCA4LCAzLCAyNTAsIDk0LCA4LCAzLCAyNTAsIDg5LCA4LCAzLCAKKyAgICAyNTAsIDEyMywgOCwgMywgMjUwLCAxMjEsIDgsIDMsIDI1MCwgMTM5LCA4LCAzLCAyNTAsIDEyOSwgOCwgMywgMjUwLCA2NywgCisgICAgOCwgMywgMjUwLCA3NywgOCwgMywgMjUwLCA3MSwgOCwgMywgMjUwLCA2OCwgOCwgMywgMjUwLCA3MCwgOCwgMywgMjUwLCAKKyAgICA2MSwgOCwgMywgMjUwLCA2MCwgOCwgMywgMjUwLCA2NSwgOCwgMywgMjUwLCA2NCwgOCwgMywgMjUwLCA2MiwgOCwgMywgCisgICAgMjUwLCA2MywgOCwgMywgMjIyLCAxNzcsIDgsIDMsIDIyMiwgMTgxLCA4LCAzLCAyMjIsIDE2MCwgOCwgMywgMjIyLCAxNjEsIAorICAgIDgsIDMsIDIyMiwgMTY0LCA4LCAzLCAyMjIsIDE2MywgOCwgMywgMjIyLCAxNjcsIDgsIDMsIDIyMiwgMTY1LCA4LCAzLCAKKyAgICAyMjIsIDE3MSwgOCwgMywgMjIyLCAxNzAsIDgsIDMsIDIyMiwgMTc2LCA4LCAzLCAyMjIsIDE3MiwgOCwgMywgMjIyLCAxNTYsIAorICAgIDgsIDMsIDIyMiwgMTU0LCA4LCAzLCAyMjIsIDE2MiwgOCwgMywgMjIyLCAxNTksIDgsIDMsIDIyMiwgMTU3LCA4LCAzLCAKKyAgICAyMjIsIDE1OCwgOCwgMywgMjIyLCAxNDksIDgsIDMsIDIyMiwgMTQ4LCA4LCAzLCAyMjIsIDE1MywgOCwgMywgMjIyLCAxNTIsIAorICAgIDgsIDMsIDIyMiwgMTUwLCA4LCAzLCAyMjIsIDE1MSwgOCwgMywgMjI4LCAzOSwgOCwgMywgMjI4LCAzOCwgOCwgMywgMjI4LCAKKyAgICA0MSwgOCwgMywgMjI4LCA0MCwgOCwgMywgMjI4LCAzMSwgOCwgMywgMjI4LCAzMywgOCwgMywgMjI4LCAzMiwgOCwgMywgCisgICAgMjI4LCAzNSwgOCwgMywgMjI4LCAzNCwgOCwgMywgMjI4LCAzNywgOCwgMywgMjI4LCAzNiwgOCwgMywgMjI4LCAyNiwgOCwgCisgICAgMywgMjI4LCAyNSwgOCwgMywgMjI4LCAzMCwgOCwgMywgMjI4LCAyOSwgOCwgMywgMjI4LCAyNywgOCwgMywgMjI4LCAyOCwgCisgICAgOCwgMywgMjI4LCAyMCwgOCwgMywgMjI4LCAxOSwgOCwgMywgMjI4LCAyNCwgOCwgMywgMjI4LCAyMywgOCwgMywgMjI4LCAKKyAgICAyMSwgOCwgMywgMjI4LCAyMiwgOCwgMywgMjIwLCA3NCwgOCwgMywgMjIwLCA2OSwgOCwgMywgMjIwLCAxMDQsIDgsIDMsIAorICAgIDIyMCwgODUsIDgsIDMsIDIxOSwgMjE3LCA4LCAzLCAyMTksIDIxOSwgOCwgMywgMjE5LCAyMTgsIDgsIDMsIDIxOSwgMjM4LCAKKyAgICA4LCAzLCAyMTksIDIzNSwgOCwgMywgMjIwLCA5LCA4LCAzLCAyMjAsIDAsIDgsIDMsIDIyMCwgNDQsIDgsIDMsIDIyMCwgMzcsIAorICAgIDgsIDMsIDIyMCwgNjUsIDgsIDMsIDIyMCwgNTIsIDgsIDMsIDIxOSwgMjEzLCA4LCAzLCAyMTksIDIxMSwgOCwgMywgMjE5LCAKKyAgICAyMjcsIDgsIDMsIDIxOSwgMjE2LCA4LCAzLCAyMTksIDIxNCwgOCwgMywgMjE5LCAyMTUsIDgsIDMsIDIxOSwgMTk2LCA4LCAKKyAgICAzLCAyMTksIDE5NSwgOCwgMywgMjE5LCAyMDIsIDgsIDMsIDIxOSwgMTk5LCA4LCAzLCAyMTksIDE5NywgOCwgMywgMjE5LCAKKyAgICAxOTgsIDgsIDMsIDIyMywgMTQ0LCA4LCAzLCAyMjMsIDEzOCwgOCwgMywgMjA1LCA4LCAzLCAyMjMsIDE1MCwgOCwgMywgCisgICAgMjIyLCAxMjIsIDgsIDMsIDIyMiwgMTI0LCA4LCAzLCAyMjIsIDEyMywgOCwgMywgMjIyLCAxOTAsIDgsIDMsIDIyMiwgMTgzLCAKKyAgICA4LCAzLCAyMjIsIDIxMywgOCwgMywgMjIyLCAxOTQsIDgsIDMsIDIyMywgNDYsIDgsIDMsIDIyMywgMTMxLCA4LCAzLCAyMjMsIAorICAgIDg0LCA4LCAzLCAyMjIsIDExNSwgOCwgMywgMjIyLCAxMTIsIDgsIDMsIDIyMiwgMTQyLCA4LCAzLCAyMjIsIDEyMSwgOCwgMywgCisgICAgMjIyLCAxMTcsIDgsIDMsIDIyMiwgMTE4LCA4LCAzLCAyMjIsIDk3LCA4LCAzLCAyMjIsIDk2LCA4LCAzLCAyMjIsIDEwMiwgCisgICAgOCwgMywgMjIyLCAxMDAsIDgsIDMsIDIyMiwgOTgsIDgsIDMsIDIyMiwgOTksIDgsIDMsIDIzNSwgMTA0LCA4LCAzLCAyMzUsIAorICAgIDEwMywgOCwgMywgMjM1LCAxMTQsIDgsIDMsIDIzNSwgMTA1LCA4LCAzLCAyMzUsIDExMCwgOCwgMywgMjM1LCAxMDksIDgsIAorICAgIDMsIDIzNSwgMTEyLCA4LCAzLCAyMzUsIDExMSwgOCwgMywgMjM1LCA0NywgOCwgMywgMjM1LCA0NiwgOCwgMywgMjM1LCA0OSwgCisgICAgOCwgMywgMjM1LCA0OCwgOCwgMywgMjM1LCA2MiwgOCwgMywgMjM1LCA2MCwgOCwgMywgMjM1LCA3NCwgOCwgMywgMjM1LCAKKyAgICA2NCwgOCwgMywgMjM1LCA0MCwgOCwgMywgMjM1LCAzOCwgOCwgMywgMjM1LCA1NywgOCwgMywgMjM1LCA0NSwgOCwgMywgCisgICAgMjM1LCA0MiwgOCwgMywgMjM1LCA0MywgOCwgMywgMjM1LCAzMiwgOCwgMywgMjM1LCAzMSwgOCwgMywgMjM1LCAzNiwgOCwgCisgICAgMywgMjM1LCAzNSwgOCwgMywgMjM1LCAzMywgOCwgMywgMjM1LCAzNCwgOCwgMywgMjI0LCA0OSwgOCwgMywgMjI0LCA0NywgCisgICAgOCwgMywgMjI0LCA1NiwgOCwgMywgMjI0LCA1MCwgOCwgMywgMjI0LCA1MywgOCwgMywgMjI0LCA1MiwgOCwgMywgMjI0LCAKKyAgICA1NSwgOCwgMywgMjI0LCA1NCwgOCwgMywgMjI0LCAyLCA4LCAzLCAyMjMsIDI1NSwgOCwgMywgMjI0LCA0LCA4LCAzLCAyMjQsIAorICAgIDMsIDgsIDMsIDIyNCwgMzYsIDgsIDMsIDIyNCwgMzUsIDgsIDMsIDIyNCwgNDUsIDgsIDMsIDIyNCwgMzksIDgsIDMsIDIyMywgCisgICAgMjUwLCA4LCAzLCAyMjMsIDI0NiwgOCwgMywgMjI0LCAzMywgOCwgMywgMjIzLCAyNTQsIDgsIDMsIDIyMywgMjUyLCA4LCAzLCAKKyAgICAyMjMsIDI1MywgOCwgMywgMjIzLCAyMzAsIDgsIDMsIDIyMywgMjI4LCA4LCAzLCAyMjMsIDI0MCwgOCwgMywgMjIzLCAyMzMsIAorICAgIDgsIDMsIDIyMywgMjMxLCA4LCAzLCAyMjMsIDIzMiwgOCwgMywgMjM1LCA5MywgOCwgMywgMjM1LCA5MiwgOCwgMywgMjM1LCAKKyAgICA5OSwgOCwgMywgMjM1LCA5NCwgOCwgMywgMjM1LCA5NiwgOCwgMywgMjM1LCA5NSwgOCwgMywgMjM1LCA5OCwgOCwgMywgCisgICAgMjM1LCA5NywgOCwgMywgMjM1LCA4NCwgOCwgMywgMjM1LCA4NiwgOCwgMywgMjM1LCA4NSwgOCwgMywgMjM1LCA4OSwgOCwgCisgICAgMywgMjM1LCA4OCwgOCwgMywgMjM1LCA5MSwgOCwgMywgMjM1LCA5MCwgOCwgMywgMjM1LCA4MCwgOCwgMywgMjM1LCA3OSwgCisgICAgOCwgMywgMjM1LCA4NywgOCwgMywgMjM1LCA4MywgOCwgMywgMjM1LCA4MSwgOCwgMywgMjM1LCA4MiwgOCwgMywgMjM1LCAKKyAgICA3NiwgOCwgMywgMjM1LCA3NSwgOCwgMywgMjM1LCA3OCwgOCwgMywgMjM1LCA3NywgOCwgMywgMjI4LCAxNjcsIDgsIDMsIAorICAgIDIyOCwgMTY2LCA4LCAzLCAyMjgsIDE3NCwgOCwgMywgMjI4LCAxNjgsIDgsIDMsIDIyOCwgMTcwLCA4LCAzLCAyMjgsIDE2OSwgCisgICAgOCwgMywgMjI4LCAxNzMsIDgsIDMsIDIyOCwgMTcxLCA4LCAzLCAyMjgsIDE1NiwgOCwgMywgMjI4LCAxNTcsIDgsIDMsIAorICAgIDIyOCwgMTYyLCA4LCAzLCAyMjgsIDE2MSwgOCwgMywgMjI4LCAxNjUsIDgsIDMsIDIyOCwgMTYzLCA4LCAzLCAyMjgsIDE1MSwgCisgICAgOCwgMywgMjI4LCAxNjAsIDgsIDMsIDIyOCwgMTU1LCA4LCAzLCAyMjgsIDE1MiwgOCwgMywgMjI4LCAxNTMsIDgsIDMsIAorICAgIDIyOCwgMTQ2LCA4LCAzLCAyMjgsIDE0NSwgOCwgMywgMjI4LCAxNTAsIDgsIDMsIDIyOCwgMTQ5LCA4LCAzLCAyMjgsIDE0NywgCisgICAgOCwgMywgMjI4LCAxNDgsIDgsIDMsIDIyNywgMTQxLCA4LCAzLCAyMjcsIDE0MCwgOCwgMywgMjI3LCAxNTIsIDgsIDMsIAorICAgIDIyNywgMTQ1LCA4LCAzLCAyMjcsIDE0OSwgOCwgMywgMjI3LCAxNDgsIDgsIDMsIDIyNywgMTUxLCA4LCAzLCAyMjcsIDE1MCwgCisgICAgOCwgMywgMjI3LCAxMjgsIDgsIDMsIDIyNywgMTMwLCA4LCAzLCAyMjcsIDEyOSwgOCwgMywgMjI3LCAxMzQsIDgsIDMsIAorICAgIDIyNywgMTMzLCA4LCAzLCAyMjcsIDEzOCwgOCwgMywgMjI3LCAxMzUsIDgsIDMsIDIyNywgMTI2LCA4LCAzLCAyMjcsIDEyNCwgCisgICAgOCwgMywgMjI3LCAxMzIsIDgsIDMsIDIyNywgMTI3LCA4LCAzLCAyMTEsIDE1MCwgOCwgMywgMjExLCAxNDksIDgsIDMsIAorICAgIDIxMSwgMTU3LCA4LCAzLCAyMTEsIDE1MiwgOCwgMywgMjExLCAxNTQsIDgsIDMsIDIxMSwgMTUzLCA4LCAzLCAyMTEsIDE1NiwgCisgICAgOCwgMywgMjExLCAxNTUsIDgsIDMsIDIxMSwgMTM5LCA4LCAzLCAyMTEsIDE0MCwgOCwgMywgMjExLCAxNDQsIDgsIDMsIAorICAgIDIxMSwgMTQzLCA4LCAzLCAyMTEsIDE0OCwgOCwgMywgMjExLCAxNDYsIDgsIDMsIDIxMSwgMTIxLCA4LCAzLCAyMTEsIDExOSwgCisgICAgOCwgMywgMjExLCAxMzEsIDgsIDMsIDIxMSwgMTI0LCA4LCAzLCAyMTEsIDEyMiwgOCwgMywgMjExLCAxMjMsIDgsIDMsIAorICAgIDIxMCwgMjUwLCA4LCAzLCAyMTAsIDI0OCwgOCwgMywgMjExLCA4LCA4LCAzLCAyMTAsIDI1MSwgOCwgMywgMjExLCAyLCA4LCAKKyAgICAzLCAyMTEsIDEsIDgsIDMsIDIxMSwgNSwgOCwgMywgMjExLCAzLCA4LCAzLCAyMTAsIDE5MSwgOCwgMywgMjEwLCAxOTAsIDgsIAorICAgIDMsIDIxMCwgMTk0LCA4LCAzLCAyMTAsIDE5MiwgOCwgMywgMjEwLCAyMjQsIDgsIDMsIDIxMCwgMjIxLCA4LCAzLCAyMTAsIAorICAgIDI0NCwgOCwgMywgMjEwLCAyMjgsIDgsIDMsIDIxMCwgMTgyLCA4LCAzLCAyMTAsIDE3OCwgOCwgMywgMjEwLCAyMTIsIDgsIAorICAgIDMsIDIxMCwgMTg5LCA4LCAzLCAyMTAsIDE4NSwgOCwgMywgMjEwLCAxODYsIDgsIDMsIDIxMCwgMTYyLCA4LCAzLCAyMTAsIAorICAgIDE2MSwgOCwgMywgMjEwLCAxNjksIDgsIDMsIDIxMCwgMTY1LCA4LCAzLCAyMTAsIDE2MywgOCwgMywgMjEwLCAxNjQsIDgsIAorICAgIDM0LCAyMjQsIDM2LCA4LCAzNCwgMjMyLCAyNDcsIDgsIDM0LCAyMzQsIDY3LCA4LCAzNCwgMjI3LCAxNDUsIDgsIDM0LCAKKyAgICAyNDksIDc3LCA4LCAzNCwgMjE4LCAxOTQsIDgsIDM0LCAyNDMsIDE5LCA4LCAzNCwgMjQzLCA1MSwgOCwgMzQsIDIzMCwgCisgICAgMjM1LCA4LCAzNCwgMjQwLCAxODcsIDgsIDM0LCAyMzIsIDYxLCA4LCAzNCwgMjUyLCA5MSwgOCwgMzQsIDIzMCwgMTMxLCA4LCAKKyAgICAzNCwgMjEwLCAyNDQsIDgsIDM0LCAyMjQsIDEyNCwgOCwgMzQsIDI0MCwgMTgxLCA4LCAzNCwgMjE3LCA0NywgOCwgMzQsIAorICAgIDI0MywgMTQyLCA4LCAzNCwgMjEwLCA1LCA4LCAzNCwgMjQ5LCA3MSwgOCwgMzQsIDI0OCwgMTAzLCA4LCAzNCwgMjUxLCAKKyAgICAxMDYsIDgsIDM0LCAyNDMsIDE1LCA4LCAzNCwgMjI3LCAxMzUsIDgsIDM0LCAyMTUsIDExOSwgOCwgMzQsIDIyNiwgMTc5LCAKKyAgICA4LCAzNCwgMjM1LCA4MCwgOCwgMzQsIDIxMCwgMTksIDgsIDM0LCAyMjQsIDEwMywgOCwgMzQsIDI0MSwgMTE1LCA4LCAzNCwgCisgICAgMjEwLCAyNTAsIDgsIDM0LCAyMTIsIDExMiwgOCwgMzQsIDIxOSwgMjAyLCA4LCAzNCwgMjEzLCAyNDQsIDgsIDM0LCAyMTAsIAorICAgIDExNiwgOCwgMzQsIDIzNSwgNzQsIDgsIDM0LCAyMjcsIDEwMCwgOCwgMzQsIDIzNSwgNzgsIDgsIDM0LCAyNDIsIDE2MSwgOCwgCisgICAgMzQsIDIzNSwgOTgsIDgsIDM0LCAyMTEsIDIyNywgOCwgMzQsIDI0NiwgODYsIDgsIDM0LCAyMTksIDIxNSwgOCwgMzQsIAorICAgIDIzMiwgMjQyLCA4LCAzNCwgMjQ5LCA4MSwgOCwgMzQsIDI0OSwgMTEzLCA4LCAzNCwgMjUwLCA0NSwgOCwgMzQsIDI0MCwgCisgICAgMTg0LCA4LCAzNCwgMjIwLCA3NCwgOCwgMzQsIDIxMCwgNCwgOCwgMzQsIDIyMCwgMCwgOCwgMzQsIDI1MCwgMTM5LCA4LCAKKyAgICAzNCwgMjA5LCAyMzEsIDgsIDM0LCAyMjksIDE3OCwgOCwgMzQsIDIzNCwgMTg4LCAyMzIsIDIwMiwgMSwgMjUyLCAxOTksIAorICAgIDIzMiwgMjAyLCAxLCAxOTEsIDIzMiwgMjAyLCAxLCAyMjUsIDE1MCwgMjMyLCAyMDIsIDEsIDI0OCwgMjI5LCAyMzIsIDIwMiwgCisgICAgMSwgMjE3LCAxMDYsIDIzMiwgMjAyLCAxLCAyMTYsIDIwOSwgMjMyLCAyMDIsIDEsIDI0MywgMTQyLCAyMzIsIDIwMiwgMSwgCisgICAgMTc2LCAyMzIsIDIwMiwgMSwgMjM0LCAxMzgsIDIzMiwgMjAyLCAxLCAyMzUsIDE0NywgMjMyLCAyMDIsIDEsIDI1MSwgNDEsIAorICAgIDIzMiwgMjAyLCAxLCAyNTAsIDE2NSwgMjMyLCAyMDIsIDEsIDI0NiwgNDYsIDIzMiwgMjAyLCAxLCAyMTUsIDE4NCwgMjMyLCAKKyAgICAyMDIsIDEsIDIxNSwgMTc2LCAyMzIsIDIwMiwgMSwgMTg2LCAyMzIsIDIwMiwgMSwgMTk4LCAyMzIsIDIwMiwgMSwgMjMzLCAKKyAgICAxNDEsIDIzMiwgMjAyLCAxLCAyMDYsIDIzMiwgMjAyLCAxLCAyMTAsIDgyLCAyMzIsIDIwMiwgMSwgMjEwLCAxMTYsIDIzMiwgCisgICAgMjAyLCAxLCAyMjksIDgyLCAyMzIsIDIwMiwgMSwgMTYyLCAyMzIsIDIwMiwgMSwgMjExLCAxNjUsIDIzMiwgMjAyLCAxLCAKKyAgICAyNDEsIDE5NiwgMjMyLCAyMDIsIDEsIDI0NCwgMjA0LCAyMzIsIDIwMiwgMSwgMjEyLCA2NSwgMjMyLCAyMDIsIDEsIDIyMCwgCisgICAgMTA0LCAyMzIsIDIwMiwgMSwgMTkyLCAyMzIsIDIwMiwgMSwgMjQzLCAwLCAyMzIsIDIwMiwgMSwgNjEsIDIzMiwgMjAyLCAxLCAKKyAgICAyNTQsIDI1MiwgMjMyLCAyMDIsIDEsIDc2LCAyMzIsIDIwMiwgMSwgMjQ1LCA2MywgMjMyLCAyMDIsIDEsIDc0LCAyMzIsIAorICAgIDIwMiwgMSwgNzgsIDIzMiwgMjAyLCAxLCA2OSwgMjMyLCAyMDIsIDEsIDIxNCwgMjE0LCAyMzIsIDIwMiwgMSwgMjE0LCAKKyAgICAyMDgsIDIzMiwgMjAyLCAxLCAyMjYsIDIzOCwgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMjE2LCAxMTgsIDIzMiwgCisgICAgMjAyLCAxLCAxMzgsIDIyOSwgMjM0LCAyMjUsIDE5LCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyNDksIDgwLCAyMzIsIAorICAgIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyNTEsIDIxMywgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMTk4LCAyMzIsIDIwMiwgCisgICAgMSwgMTM4LCAyMzAsIDM3LCAyMzUsIDEyMSwgMjMyLCAyMDIsIDIyNCwgMTQ0LCAyNDksIDIyNywgMjMyLCAyMDIsIDIyNCwgCisgICAgMTQ0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQxLCAzLCAyNDUsIDIxNywgNDEsIDMsIDI0NSwgMjEzLCA0MSwgMywgMjQxLCAKKyAgICAyMjcsIDQxLCAzLCAyMTIsIDE3LCA0MSwgMywgMjEyLCAxNiwgNDEsIDMsIDIyNSwgMjE0LCA0MSwgMywgMjUyLCAyMSwgNDEsIAorICAgIDMsIDI1MiwgNzQsIDQxLCAzLCAyMzEsIDEyMSwgNDEsIDMsIDIzMywgMjUzLCA0MSwgMywgMjMxLCAxMSwgNDEsIDMsIDI0MywgCisgICAgODIsIDQxLCAzLCAyNDQsIDE1NSwgNDEsIDMsIDIxMywgMjUwLCA0MSwgMywgMjE3LCAxMiwgNDEsIDMsIDIxNiwgMTk1LCAKKyAgICA0MSwgMywgMjQ4LCAyNCwgNDEsIDMsIDI0OCwgMjEsIDQxLCAzLCAyMzMsIDU2LCA0MSwgMywgMjIzLCAxMTEsIDQxLCAzLCAKKyAgICAyNDgsIDg1LCA0MSwgMywgMjI5LCAxNDQsIDQxLCAzLCAyMjEsIDE3MiwgNDEsIDMsIDIyMCwgNjMsIDQxLCAzLCAyMTAsIAorICAgIDkyLCA0MSwgMywgMjEwLCA3MywgNDEsIDMsIDI1MCwgMTkwLCA0MSwgMywgMjM1LCAxMzAsIDQxLCAzLCAyMjgsIDE4MSwgCisgICAgNDEsIDMsIDIxMSwgNDQsIDQxLCAzLCAyMzQsIDE4NywgNDEsIDMsIDIyOSwgNTYsIDQxLCAzLCAyNDMsIDYyLCA0MSwgMywgCisgICAgMjMxLCA4NSwgNDEsIDMsIDIyOSwgMTA4LCA0MSwgMywgMjI3LCAxNTksIDQxLCAzLCA3NCwgNDEsIDMsIDIzNiwgNiwgNDEsIAorICAgIDMsIDI0MSwgMTg3LCA0MSwgMywgMjQxLCAxNjcsIDQxLCAzLCAyMTEsIDI1MCwgNDEsIDMsIDIxMSwgMjQxLCA0MSwgMywgCisgICAgMjI1LCAxMTEsIDQxLCAzLCAyNTIsIDE5LCA0MSwgMywgMjUyLCAxNCwgNDEsIDMsIDIzMSwgMTE0LCA0MSwgMywgMjMzLCAKKyAgICAyNTAsIDQxLCAzLCAyMzEsIDgsIDQxLCAzLCAyNDMsIDc4LCA0MSwgMywgMjQ0LCAxMjksIDQxLCAzLCAyMTMsIDE3NiwgNDEsIAorICAgIDMsIDIxNiwgMTE4LCA0MSwgMywgMjE2LCAxNzYsIDQxLCAzLCAyNDgsIDE2LCA0MSwgMywgMjQ4LCAyMCwgNDEsIDMsIDIzMiwgCisgICAgMjQ3LCA0MSwgMywgMjIzLCAzOCwgNDEsIDMsIDI0OCwgMTEsIDQxLCAzLCAyMjksIDEzOCwgNDEsIDMsIDIxOSwgMTkzLCAKKyAgICA0MSwgMywgMjIwLCAzNCwgNDEsIDMsIDIxMCwgNDQsIDQxLCAzLCAyMTAsIDY5LCA0MSwgMywgMjUwLCA1OSwgNDEsIDMsIAorICAgIDIzNSwgMTE0LCA0MSwgMywgMjI4LCAxNzQsIDQxLCAzLCAyMTEsIDgsIDQxLCAzLCAyMzQsIDk4LCA0MSwgMywgMjI5LCA0OCwgCisgICAgNDEsIDMsIDI0MiwgMjIxLCA0MSwgMywgMjMwLCAyMzUsIDQxLCAzLCAyMjgsIDIzOCwgNDEsIDMsIDIyNywgMTUyLCA0MSwgCisgICAgMywgNjEsIDQxLCAzLCAyNTQsIDEzMSwgNDEsIDMsIDIyOSwgNzcsIDQxLCAzLCAxNjIsIDQxLCAzLCAyNDIsIDI1LCA0MSwgCisgICAgMywgMjEyLCA2NSwgNDEsIDMsIDIxMiwgNTUsIDQxLCAzLCAxOTEsIDQxLCAzLCAyNTIsIDI2LCA0MSwgMywgMjUyLCAxOTksIAorICAgIDQxLCAzLCAyMzEsIDEyOSwgNDEsIDMsIDIzNCwgMSwgNDEsIDMsIDIzNCwgMCwgNDEsIDMsIDIzMSwgMTUsIDQxLCAzLCAKKyAgICAyNDMsIDg2LCA0MSwgMywgMjQ0LCAyMDQsIDQxLCAzLCAyMTQsIDI3LCA0MSwgMywgMjE3LCAxMDYsIDQxLCAzLCAyMTYsIAorICAgIDIwOSwgNDEsIDMsIDI0OCwgMzMsIDQxLCAzLCAyNDgsIDIzLCA0MSwgMywgMjMzLCAxNDEsIDQxLCAzLCAyMDUsIDQxLCAzLCAKKyAgICAyNDgsIDIyOSwgNDEsIDMsIDIyOSwgMTUzLCA0MSwgMywgMjA2LCA0MSwgMywgMjIwLCAxMDQsIDQxLCAzLCAyMTAsIDExNiwgCisgICAgNDEsIDMsIDIxMCwgODIsIDQxLCAzLCAyNTEsIDQxLCA0MSwgMywgMjM1LCAxNDcsIDQxLCAzLCAyMjgsIDE5MCwgNDEsIDMsIAorICAgIDE5MiwgNDEsIDMsIDE3NiwgNDEsIDMsIDIzNCwgMjQwLCA0MSwgMywgMjI5LCA2MSwgNDEsIDMsIDI0MywgMTQyLCA0MSwgMywgCisgICAgMTg2LCA0MSwgMywgMTk4LCA0MSwgMywgMjI3LCAxNjksIDQxLCAzLCAyMjYsIDE4NywgNDEsIDMsIDIyNiwgMTgzLCA0MSwgCisgICAgMywgMjQxLCA2MCwgNDEsIDMsIDIxMSwgMjE1LCA0MSwgMywgMjExLCAyMTEsIDQxLCAzLCAyMjQsIDI1MiwgNDEsIDMsIAorICAgIDI1MiwgMTcsIDQxLCAzLCAyNTEsIDIwMSwgNDEsIDMsIDIzMSwgMTA5LCA0MSwgMywgMjMzLCAyNDgsIDQxLCAzLCAyMzEsIAorICAgIDQsIDQxLCAzLCAyNDMsIDc0LCA0MSwgMywgMjQ0LCA0MiwgNDEsIDMsIDIxMywgMTI3LCA0MSwgMywgMjE2LCAxOCwgNDEsIAorICAgIDMsIDIxNiwgMTU0LCA0MSwgMywgMjQ4LCAxNCwgNDEsIDMsIDI0OCwgMTgsIDQxLCAzLCAyMzIsIDEzMywgNDEsIDMsIDIyMiwgCisgICAgMTk5LCA0MSwgMywgMjQ3LCAxMzMsIDQxLCAzLCAyMjksIDEyNSwgNDEsIDMsIDIxOSwgNDIsIDQxLCAzLCAyMjAsIDMsIDQxLCAKKyAgICAzLCAyMTAsIDIxLCA0MSwgMywgMjEwLCA2NiwgNDEsIDMsIDI0OSwgMTgyLCA0MSwgMywgMjM1LCA2NSwgNDEsIDMsIDIyOCwgCisgICAgMTY0LCA0MSwgMywgMjEwLCAyMjksIDQxLCAzLCAyMzQsIDE2LCA0MSwgMywgMjI5LCA0NiwgNDEsIDMsIDI0MiwgMTcxLCAKKyAgICA0MSwgMywgMjMwLCAxMzcsIDQxLCAzLCAyMjgsIDY5LCA0MSwgMywgMjI3LCAxMzYsIDQxLCAzLCA2OSwgNDEsIDMsIDIxNCwgCisgICAgMTkwLCA0MSwgMywgMjQwLCAyMjksIDQxLCAzLCAyNDAsIDIxOSwgNDEsIDMsIDIxMSwgMTk1LCA0MSwgMywgMjExLCAxODksIAorICAgIDQxLCAzLCAyMjQsIDE1MywgNDEsIDMsIDI1MiwgMTYsIDQxLCAzLCAyNTEsIDEzMywgNDEsIDMsIDIzMSwgMTA4LCA0MSwgMywgCisgICAgMjMzLCAyNDYsIDQxLCAzLCAyMzEsIDMsIDQxLCAzLCAyNDMsIDczLCA0MSwgMywgMjQzLCAyNDEsIDQxLCAzLCAyMTIsIAorICAgIDExNiwgNDEsIDMsIDIxNSwgMTE5LCA0MSwgMywgMjE2LCAxMzcsIDQxLCAzLCAyNDgsIDEyLCA0MSwgMywgMjQ4LCAxNywgCisgICAgNDEsIDMsIDIzMiwgMTAzLCA0MSwgMywgMjIyLCAxNDIsIDQxLCAzLCAyNDYsIDg2LCA0MSwgMywgMjI5LCAxMjAsIDQxLCAzLCAKKyAgICAyMTgsIDg0LCA0MSwgMywgMjE5LCAyMjcsIDQxLCAzLCAyMTAsIDEzLCA0MSwgMywgMjEwLCA2MiwgNDEsIDMsIDI0OSwgCisgICAgMTIwLCA0MSwgMywgMjM1LCA1NywgNDEsIDMsIDIyOCwgMTYwLCA0MSwgMywgMjEwLCAyMTIsIDQxLCAzLCAyMzMsIDIyMywgCisgICAgNDEsIDMsIDIyOSwgNDUsIDQxLCAzLCAyNDIsIDEyMCwgNDEsIDMsIDIzMCwgMTA3LCA0MSwgMywgMjI3LCAyNDIsIDQxLCAzLCAKKyAgICAyMjcsIDEzMiwgNDEsIDMsIDc4LCA0MSwgMywgMjI2LCAyMDAsIDQxLCAzLCAyMjksIDUsIDQxLCAzLCAyNDEsIDc1LCA0MSwgCisgICAgMywgMjQxLCA2MywgNDEsIDMsIDIxMSwgMjI3LCA0MSwgMywgMjExLCAyMTYsIDQxLCAzLCAyMjUsIDE5LCA0MSwgMywgMjUyLCAKKyAgICAxOCwgNDEsIDMsIDI1MSwgMjEzLCA0MSwgMywgMjMxLCAxMTAsIDQxLCAzLCAyMzMsIDI0OSwgNDEsIDMsIDIzMSwgNiwgNDEsIAorICAgIDMsIDI0MywgNzYsIDQxLCAzLCAyNDMsIDc1LCA0MSwgMywgMjQ0LCA1MSwgNDEsIDMsIDIxMywgMTM4LCA0MSwgMywgMTEyLCAKKyAgICA0MSwgMywgMjE2LCAxNTcsIDQxLCAzLCAyNDgsIDE1LCA0MSwgMywgMjQ4LCAxOSwgNDEsIDMsIDIzMiwgMTYyLCA0MSwgMywgCisgICAgMjIyLCAyMTMsIDQxLCAzLCAyNDcsIDE1MywgNDEsIDMsIDIyOSwgMTI5LCA0MSwgMywgMjE5LCA2MCwgNDEsIDMsIDIyMCwgCisgICAgOSwgNDEsIDMsIDIxMCwgMjMsIDQxLCAzLCAyMTAsIDY3LCA0MSwgMywgMjQ5LCAyNDYsIDQxLCAzLCAyMzUsIDc0LCA0MSwgCisgICAgMywgMjI4LCAxNjUsIDQxLCAzLCAyMTAsIDI0NCwgNDEsIDMsIDIzNCwgMzQsIDQxLCAzLCAyMjksIDQ3LCA0MSwgMywgMjQyLCAKKyAgICAxODEsIDQxLCAzLCAyMzAsIDE2NiwgNDEsIDMsIDIyOCwgNzksIDQxLCAzLCAyMjcsIDEzOCwgNDEsIDMsIDc2LCA0MSwgMywgCisgICAgMjQ1LCAxNTgsIDQxLCAzLCAyMjksIDY2LCA0MSwgMywgMjQxLCAyNDUsIDQxLCAzLCAyNDEsIDIxNiwgNDEsIDMsIDIxMiwgCisgICAgMjIsIDQxLCAzLCAyMTIsIDEyLCA0MSwgMywgMjI1LCAyMjQsIDQxLCAzLCAyNTIsIDIyLCA0MSwgMywgMjUyLCA4MywgNDEsIAorICAgIDMsIDIzMSwgMTIyLCA0MSwgMywgMjMzLCAyNTQsIDQxLCAzLCAyMzMsIDI1MiwgNDEsIDMsIDIzMSwgMTIsIDQxLCAzLCAKKyAgICAyNDMsIDgzLCA0MSwgMywgMjQzLCA4MSwgNDEsIDMsIDI0NCwgMTYyLCA0MSwgMywgMjEzLCAyNTUsIDQxLCAzLCAyMTcsIAorICAgIDIzLCA0MSwgMywgMjE2LCAxOTYsIDQxLCAzLCAyNDgsIDI1LCA0MSwgMywgMjQ4LCAyMiwgNDEsIDMsIDIzMywgNjQsIDQxLCAKKyAgICAzLCAyMjMsIDEzMSwgNDEsIDMsIDI0OCwgOTgsIDQxLCAzLCAyMjksIDE0NSwgNDEsIDMsIDIyMSwgMTgzLCA0MSwgMywgCisgICAgMjIwLCA2NSwgNDEsIDMsIDIxMCwgOTQsIDQxLCAzLCAyMTAsIDc0LCA0MSwgMywgMjUwLCAxOTgsIDQxLCAzLCAyMzUsIAorICAgIDEzMiwgNDEsIDMsIDIyOCwgMTgzLCA0MSwgMywgMjExLCA0NywgNDEsIDMsIDIzNCwgMTg4LCA0MSwgMywgMjI5LCA1NywgCisgICAgNDEsIDMsIDIyOSwgNTMsIDQxLCAzLCAyNDMsIDY5LCA0MSwgMywgMjQzLCA1OCwgNDEsIDMsIDIzMSwgOTYsIDQxLCAzLCAKKyAgICAyMjksIDExMiwgNDEsIDMsIDIyNywgMTYwLCA0MSwgMywgMjI5LCA4NCwgNDEsIDMsIDIzMywgMjgsIDQxLCAyNDksIDIyNywgCisgICAgNDEsIDI0MywgMjM2LCAyMTgsIDEzMSwgNDEsIDIyNCwgMTYsIDc5LCA0MSwgMywgMjI5LCAxMjgsIDI0NCwgMjA0LCA0MSwgCisgICAgMywgMjI5LCAxMjgsIDE3NiwgNDEsIDMsIDIyOSwgMTI4LCAyMTksIDQyLCA0MSwgMTYsIDI0NCwgMTUyLCA0MSwgMTYsIAorICAgIDIzNCwgMTg2LCA0MSwgMTYsIDIxNiwgODIsIDQxLCAxNiwgMjI4LCAyMTMsIDQxLCAxNiwgMjUyLCAxNTUsIDQxLCAxNiwgCisgICAgMjQ0LCAyMDMsIDQxLCAxNiwgMjE3LCAxMDIsIDQxLCAxNiwgMjQ4LCAxODQsIDQxLCAxNiwgMjQ3LCAxMzIsIDQxLCAxNiwgCisgICAgMjMzLCAyMTIsIDQxLCAxNiwgMjE2LCAyMiwgNDEsIDE2LCAyNDcsIDE1MiwgNDEsIDE2LCAyMzUsIDY2LCA0MSwgMjEsIAorICAgIDIxMCwgODYsIDQxLCAyMSwgMTExLCA0MSwgMjEsIDEwNSwgNDEsIDIxLCAxNTgsIDQxLCAyMSwgMTYxLCA0MSwgMjEsIDE5MCwgCisgICAgNDEsIDIxLCAxOTUsIDQxLCAyMSwgMTk5LCA0MSwgMjEsIDE5NiwgNDEsIDIxLCAyMDEsIDQxLCAzLCAyMjksIDEyOCwgMTg2LCAKKyAgICA0MSwgMywgMjI5LCAxMjgsIDI0NywgMTUzLCAzMywgNiwgMSwgMjEwLCA5MCwgMzMsIDQsIDEsIDIxMCwgOTAsIDMzLCA2LCAKKyAgICAxLCAyNDYsIDQyLCAzMywgNCwgMSwgMjQ2LCA0MiwgMzMsIDYsIDEsIDIyMywgNTIsIDI0NiwgNDQsIDMzLCA0LCAxLCAyMjMsIAorICAgIDUyLCAyNDYsIDQ0LCAzMywgNiwgMSwgMjM1LCAxOTIsIDMzLCA0LCAxLCAyMzUsIDE5MiwgMzMsIDYsIDEsIDI0NywgMTY5LCAKKyAgICAzMywgNCwgMSwgMjQ3LCAxNjksIDMzLCA2LCAxLCAyMzAsIDE0NSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMzAsIDE0NSwgCisgICAgMjE0LCAyMDUsIDMzLCA2LCAxLCAyNTEsIDE0NCwgMjI2LCAyMDUsIDMzLCA0LCAxLCAyNTEsIDE0NCwgMjI2LCAyMDUsIDMzLCAKKyAgICA2LCAxLCAyMjksIDkyLCAyMTEsIDMxLCAzMywgNCwgMSwgMjI5LCA5MiwgMjExLCAzMSwgMzMsIDYsIDEsIDIxMSwgMjgsIDIsIAorICAgIDI1MiwgMTkzLCAyMTEsIDMxLCAzMywgNCwgMSwgMjExLCAyOCwgMiwgMjUyLCAxOTMsIDIxMSwgMzEsIDMzLCA2LCAxLCAKKyAgICAyMzUsIDE5MCwgMjExLCA1OSwgMzMsIDQsIDEsIDIzNSwgMTkwLCAyMTEsIDU5LCAzMywgNiwgMSwgMjIzLCA1MiwgMjEwLCAKKyAgICAyMTIsIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTAsIDIxMiwgMzMsIDYsIDEsIDIzNSwgMTkwLCA2MSwgMzMsIDQsIDEsIDIzNSwgCisgICAgMTkwLCA2MSwgMzMsIDYsIDEsIDI1MCwgOCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUwLCA4LCAyMzIsIAorICAgIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyNTEsIDIyMiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDIyMiwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzUsIDE5MCwgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE5MCwgCisgICAgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMTAsIDI0NiwgMzMsIDQsIDEsIDIxMCwgMjQ2LCAzMywgCisgICAgNiwgMSwgMjIzLCA1MiwgMjE1LCAxNzksIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTUsIDE3OSwgMzMsIDYsIDEsIDIxOSwgNTQsIAorICAgIDI0OCwgOTgsIDMzLCA0LCAxLCAyMTksIDU0LCAyNDgsIDk4LCAzMywgNiwgMSwgMjE5LCA1NCwgMjQ1LCAxODIsIDMzLCA0LCAKKyAgICAxLCAyMTksIDU0LCAyNDUsIDE4MiwgMzMsIDYsIDEsIDIxOSwgNTQsIDI0NSwgMTY3LCAzMywgNCwgMSwgMjE5LCA1NCwgCisgICAgMjQ1LCAxNjcsIDMzLCA2LCAxLCAyMzAsIDE0OSwgNzgsIDMzLCA0LCAxLCAyMzAsIDE0OSwgNzgsIDMzLCA2LCAxLCAyNTEsIAorICAgIDI0OCwgNzgsIDMzLCA0LCAxLCAyNTEsIDI0OCwgNzgsIDMzLCA2LCAxLCA1MiwgMjMwLCAxNDksIDc4LCAzMywgNCwgMSwgCisgICAgNTIsIDIzMCwgMTQ5LCA3OCwgMzMsIDEsIDIzMCwgOTEsIDc4LCAzOCwgMzMsIDIxMiwgMTAwLCAzOCwgMzMsIDIxNiwgMjQ5LCAKKyAgICAyMzAsIDE5NiwgNTAsIDM4LCAzMywgMjQwLCAyMTgsIDIzMCwgMTk2LCA1MCwgMzgsIDMzLCAyMTYsIDE0OSwgMjMwLCAxOTYsIAorICAgIDUwLCAyMTksIDk1LCAyNTMsIDIyNCwgMzgsIDMzLCAxLCAyMTQsIDIwMiwgMjM2LCA2NywgMzgsIDMzLCAxLCA3NCwgMzgsIAorICAgIDMzLCAxLCAyMTEsIDgsIDM4LCAzMywgMSwgNjksIDM4LCAzMywgMSwgMjQyLCAxMCwgNTAsIDM4LCAzMywgMSwgMjExLCAyNywgCisgICAgMzgsIDMzLCAxLCAyMTksIDU0LCA1MCwgMzgsIDMzLCAxLCAyMjYsIDIwNSwgMzgsIDMzLCAyMzQsIDE5OCwgMzgsIDMzLCAKKyAgICAyMjUsIDIzMSwgMzMsIDIzNCwgMTk4LCAzMywgMjI1LCAyMzEsIDMzLCA2LCAxLCAyNDYsIDU0LCAzMywgNCwgMSwgMjQ2LCAKKyAgICA1NCwgMzMsIDYsIDEsIDI0NiwgMzUsIDMzLCA0LCAxLCAyNDYsIDM1LCAzMywgNiwgMSwgMjEwLCA1MiwgMzMsIDQsIDEsIAorICAgIDIxMCwgNTIsIDMzLCA2LCAxLCAyNTAsIDIxNCwgMzMsIDQsIDEsIDI1MCwgMjE0LCAzMywgNiwgMSwgMjQ2LCAzMywgMzMsIAorICAgIDQsIDEsIDI0NiwgMzMsIDMzLCA2LCAxLCAyMTcsIDI0LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjE3LCAyNCwgMiwgCisgICAgMjMwLCAyMjksIDEwMywgMzMsIDYsIDEsIDIxNSwgNzgsIDMzLCA0LCAxLCAyMTUsIDc4LCAzMywgNiwgMSwgMjE1LCAxNjEsIAorICAgIDMzLCA0LCAxLCAyMTUsIDE2MSwgMzMsIDYsIDEsIDIxNSwgMTY1LCAzMywgNCwgMSwgMjE1LCAxNjUsIDMzLCA2LCAxLCAKKyAgICAyMTcsIDI5LCAzMywgNCwgMSwgMjE3LCAyOSwgMzMsIDYsIDEsIDI0MCwgMjA1LCAzMywgNCwgMSwgMjQwLCAyMDUsIDMzLCAKKyAgICA2LCAxLCAyMTksIDIwOCwgMzMsIDQsIDEsIDIxOSwgMjA4LCAzOCwgMzMsIDEsIDIzNSwgMTkwLCA3NiwgMjAsIDEsIDYxLCAKKyAgICAyMCwgMSwgMTc2LCAyMCwgMSwgNjksIDIwLCAxLCAyMzMsIDIyMywgMjAsIDEsIDI0NSwgMjE3LCAyMCwgMSwgMjIzLCAxMTEsIAorICAgIDIwLCAxLCAyMTcsIDg3LCAyMCwgMSwgNzgsIDIwLCAxLCAyMjcsIDE1MiwgMjAsIDEsIDc0LCAyMCwgMSwgMjMzLCAxNDEsIAorICAgIDIwLCAxLCAxOTEsIDIwLCAxLCAyMjIsIDI0MiwgMjAsIDEsIDIyMywgMzIsIDIwLCAxLCAyMzMsIDU1LCAyMCwgMSwgMjMxLCAKKyAgICA4NCwgMjAsIDEsIDIxNywgMTAyLCAyMCwgMSwgMjI5LCAxNTEsIDIwLCAxLCAyMjgsIDE4OCwgMjAsIDEsIDE5NCwgMjAsIDEsIAorICAgIDIxOCwgNSwgMjAsIDEsIDIzMCwgMTA3LCAyMCwgMSwgMjIwLCAyOSwgMjAsIDEsIDIxOSwgMTkzLCAyMCwgMSwgMjIwLCAzOSwgCisgICAgMjAsIDEsIDIyMCwgMTI1LCAyMCwgMSwgMjMzLCAxNjEsIDIwLCAxLCAyMzQsIDE2MiwgMjAsIDEsIDIyNywgMjEzLCAyMCwgCisgICAgMSwgMjI3LCAyNDIsIDIwLCAxLCAyMjgsIDE1OSwgMjAsIDEsIDIxMCwgMjI2LCAyMCwgMSwgMjE5LCAyMjcsIDIwLCAxLCAKKyAgICAyMTAsIDE4NywgMjAsIDEsIDE5MiwgMjAsIDEsIDIyOCwgMTQsIDIwLCAxLCAyMzQsIDE0OCwgMjAsIDEsIDIyNSwgMTU0LCAKKyAgICAyMCwgMSwgMjI4LCAxODEsIDIwLCAxLCAyMjcsIDI1MSwgMjAsIDEsIDIyNCwgMTQ3LCAyMCwgMSwgMjExLCAxOTIsIDIwLCAKKyAgICAxLCAyMjUsIDIxNCwgMjAsIDEsIDI0NCwgMTU1LCAyMCwgMSwgMjIyLCAxNDIsIDIwLCAxLCAyMzIsIDEwMywgMjAsIDEsIAorICAgIDIzMCwgMjM1LCAyMCwgMSwgMjI4LCAyMzgsIDIwLCAxLCAyMjMsIDU0LCAyMCwgMSwgMjIzLCAxNzQsIDIwLCAxLCAyMzQsIAorICAgIDE3MSwgMjAsIDEsIDIyOSwgMTIsIDIwLCAxLCAyMjksIDYxLCAyMCwgMSwgMjI5LCA4MiwgMjAsIDEsIDIyMCwgOSwgMjAsIAorICAgIDEsIDIyNCwgMTUwLCAyMCwgMSwgMjQzLCAyNDEsIDIwLCAxLCAyNDQsIDQ1LCAyMCwgMSwgMjEyLCA2NSwgMjAsIDEsIDE5OCwgCisgICAgMjAsIDEsIDIzMiwgMjQ3LCAyMCwgMSwgMjI1LCAxMTEsIDIwLCAxLCAyMzIsIDEyNSwgMjAsIDEsIDIzNCwgMzQsIDIwLCAxLCAKKyAgICAyMzEsIDExOSwgMjAsIDEsIDIyMywgODYsIDIwLCAxLCAyMzEsIDYzLCAyMCwgMSwgMTg2LCAyMCwgMSwgMjE2LCAxMTgsIAorICAgIDIwLCAxLCAyMzQsIDk4LCAyMCwgMSwgMjMwLCAxNjYsIDIwLCAxLCAyMzEsIDEyNywgMjAsIDEsIDIxNiwgMjMxLCAyMCwgMSwgCisgICAgMjM0LCAxLCAyMCwgMSwgMjE2LCAyNDgsIDIwLCAxLCAyMjcsIDI0MywgMjAsIDEsIDIyMSwgMjUzLCAyMCwgMSwgMjQ0LCAKKyAgICAyMDAsIDIwLCAxLCAyMzQsIDMsIDIwLCAxLCAyMzQsIDMwLCAyMCwgMzgsIDE2NCwgMjM0LCAxMSwgMjAsIDM4LCAxNjQsIAorICAgIDIxNSwgMTExLCAyMCwgMjI4LCAxODcsIDIwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIwLCAyNDksIDIzNCwgMjAsIDI0OSwgCisgICAgMjI3LCAyMCwgMjIwLCAxNTIsIDIwLCAyMjQsIDE2LCA3OSwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMCwgMjU0LCAyMjUsIAorICAgIDY0LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjI1LCA2NCwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMCwgCisgICAgMjU0LCAyMjAsIDg2LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjIwLCA4NiwgNTgsIDEsIDI1MCwgMTA0LCAKKyAgICAxMzgsIDIxMCwgMjU0LCAyMjQsIDMzLCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjI0LCAzMywgNTgsIDEsIAorICAgIDI1MCwgMTA0LCAxMzgsIDIxMCwgMjU0LCAyMjIsIDE0MiwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyMiwgCisgICAgMTQyLCA1OCwgMSwgMjQ1LCAyOCwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIDEyNiwgMTM4LCAxMzAsIAorICAgIDU4LCAxLCAyMzAsIDIzMCwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAKKyAgICAxLCAyNDUsIDI3LCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI4LCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAKKyAgICAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjMwLCAyNDYsIDEyNiwgCisgICAgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgCisgICAgMjcsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjgsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgCisgICAgMSwgMTI1LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjMwLCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIAorICAgIDEyMSwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDU5LCA2NywgCisgICAgMTMwLCA1OCwgMSwgNTksIDIxOSwgOTcsIDU4LCAxLCA1OSwgMjAzLCAxMzAsIDU4LCAxLCAyMzIsIDExNCwgNDQsIDI0OSwgCisgICAgMTY5LCAyNTQsIDExNywgNTgsIDEsIDIyMywgMTYwLCAxMjAsIDc1LCA1OCwgMSwgMjIzLCAxNjAsIDEyNCwgNzUsIDU4LCAxLCAKKyAgICAyMjMsIDE2MCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAyMjMsIDE2MCwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCA1OCwgMSwgCisgICAgMTIxLCAyMzUsIDIwMCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAyMTgsIDExMywgMjIsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIAorICAgIDIxOCwgMTEzLCAyMiwgMTIxLCAyMTYsIDMxLCA3LCA2LCAxLCAyNDUsIDIwNywgMjU0LCAxNzksIDcsIDQsIDEsIDI0NSwgCisgICAgMjA3LCAyNTQsIDE3OSwgNywgNiwgMSwgMjQ1LCAyMDcsIDI1NCwgMjA1LCA3LCA0LCAxLCAyNDUsIDIwNywgMjU0LCAyMDUsIAorICAgIDcsIDYsIDEsIDI0MSwgMjE0LCA3LCA0LCAxLCAyNDEsIDIxNCwgNywgNiwgMSwgMjE1LCA0MCwgNywgNCwgMSwgMjE1LCA0MCwgCisgICAgNywgNiwgMSwgMjE1LCAyMzAsIDcsIDQsIDEsIDIxNSwgMjMwLCA3LCA2LCAxLCAyNDksIDExOCwgNywgNCwgMSwgMjQ5LCAKKyAgICAxMTgsIDcsIDYsIDEsIDI0OSwgMTE5LCAyLCAyNDksIDIyNywgNywgNCwgMSwgMjQ5LCAxMTksIDIsIDI0OSwgMjI3LCA3LCAKKyAgICAxLCA0LCA2LCAyNDUsIDE0LCA3LCAxLCA0LCA2LCAyMjIsIDkzLCA3LCA2LCAxLCAyNTUsIDgyLCA3LCA0LCAxLCAyNTUsIAorICAgIDgyLCA3LCA2LCAxLCAyNTQsIDgxLCA3LCA0LCAxLCAyNTQsIDgxLCA3LCA2LCAxLCAyNTMsIDIwMCwgNywgNCwgMSwgMjUzLCAKKyAgICAyMDAsIDcsIDYsIDEsIDI1MywgMTg0LCA3LCA0LCAxLCAyNTMsIDE4NCwgNywgNiwgMSwgMjUzLCAxODUsIDIsIDIwMywgCisgICAgMTMwLCA3LCA0LCAxLCAyNTMsIDE4NSwgMiwgMjAzLCAxMzAsIDcsIDYsIDEsIDI1MywgMTc1LCA3LCA0LCAxLCAyNTMsIAorICAgIDE3NSwgNywgNiwgMSwgMjIzLCA1MiwgMjUxLCA3NSwgMiwgMjQ3LCAxMjgsIDcsIDQsIDEsIDIyMywgNTIsIDI1MSwgNzUsIAorICAgIDIsIDI0NywgMTI4LCA3LCA2LCAxLCAyMzUsIDMwLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgOTEsIDcsIDYsIDEsIAorICAgIDIzNSwgMzAsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDIzNSwgCisgICAgMzAsIDIsIDIxOCwgMTA1LCAyMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjE4LCAxMDUsIDIyLCAyNDgsIAorICAgIDcsIDkxLCA3LCA2LCAxLCAyNTEsIDE0MywgMTU2LCA3LCA0LCAxLCAyNTEsIDE0MywgMTU2LCA3LCA2LCAxLCAyMzMsIDE1NSwgCisgICAgMiwgMTI1LCA5MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDE0NCwgMiwgMjAwLCAyMTgsIAorICAgIDEwNSwgMjI2LCAxMjQsIDcsIDQsIDEsIDE0NCwgMiwgMjAwLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDcsIDYsIDEsIDE0NCwgMiwgCisgICAgMjMyLCAxMjksIDcsIDQsIDEsIDE0NCwgMiwgMjMyLCAxMjksIDcsIDYsIDEsIDIyNiwgMTg3LCA3LCA0LCAxLCAyMjYsIAorICAgIDE4NywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNCwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDI0NCwgNjEsIDcsIDQsIAorICAgIDEsIDIyNiwgMTEwLCAyLCAyNDQsIDYxLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjE4LCAyMzEsIDIxNywgNzgsIDcsIDQsIAorICAgIDEsIDIyNiwgMTEwLCAyLCAyMTgsIDIzMSwgMjE3LCA3OCwgNywgNiwgMSwgMjI0LCAxMDAsIDIsIDIxOCwgMTA1LCAyMTYsIAorICAgIDE0MCwgMjQ4LCA0NywgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgCisgICAgMjI0LCAxMDAsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyMjMsIAorICAgIDIyNywgMjIyLCAxODgsIDcsIDQsIDEsIDIyMywgMjI3LCAyMjIsIDE4OCwgNywgNiwgMSwgMjIyLCAxMzIsIDIyMiwgMTg4LCAKKyAgICA3LCA0LCAxLCAyMjIsIDEzMiwgMjIyLCAxODgsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAKKyAgICAyMTQsIDEwNiwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjEyLCAxMDYsIDcsIDQsIDEsIDIxMiwgMTA2LCA3LCA2LCAxLCAKKyAgICAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDQsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNiwgMSwgMjE2LCAxNTMsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyMTYsIDE1MywgMiwgOTEsIDcsIDYsIDEsIDIxNiwgMTUzLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIAorICAgIDI0OCwgNDcsIDcsIDQsIDEsIDIxNiwgMTUzLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDYsIDEsIDIxMywgCisgICAgMjQ1LCA3LCA0LCAxLCAyMTMsIDI0NSwgNywgNiwgMSwgMjQ1LCA3MywgNywgNCwgMSwgMjQ1LCA3MywgNywgNiwgMSwgMjM1LCAKKyAgICAxNzgsIDcsIDQsIDEsIDIzNSwgMTc4LCA3LCA2LCAxLCAyNDksIDIxNSwgNywgNCwgMSwgMjQ5LCAyMTUsIDU4LCAxLCAyMTQsIAorICAgIDEzMywgNywgNCwgMSwgMjQ2LCA3NywgNywgNCwgMSwgMjMyLCA4OSwgNywgNCwgMSwgMjMwLCA4NSwgNywgNCwgMSwgMjI3LCAKKyAgICAyMDUsIDcsIDQsIDEsIDIyMiwgMTMxLCA3LCAxLCA0LCA2LCAyMjIsIDEzMSwgNywgNCwgMSwgMjE1LCAxMDksIDcsIDQsIDEsIAorICAgIDIxNCwgMTk3LCA3LCA2LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgNywgNCwgMSwgMjM1LCAyMjAsIDI0OSwgNjgsIDcsIDYsIAorICAgIDEsIDIzNSwgMjIwLCAyNDUsIDE0LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ1LCAxNCwgNywgNiwgMSwgMjM1LCAyMjAsIDI0MywgCisgICAgMjA5LCA3LCA2LCAxLCAyMTUsIDk0LCAyMzUsIDIyMCwgMjQzLCAyMDksIDcsIDQsIDEsIDIxNSwgOTQsIDIzNSwgMjIwLCAKKyAgICAyNDMsIDIwOSwgNywgNiwgMSwgMjE1LCA5NCwgMTU2LCA3LCA0LCAxLCAyMTUsIDk0LCAxNTYsIDcsIDYsIDEsIDIzNSwgCisgICAgMjIwLCAxNTMsIDcsIDQsIDEsIDIzNSwgMjIwLCAxNTMsIDcsIDYsIDEsIDIzNSwgMjIwLCAyMjIsIDkzLCA3LCA0LCAxLCAKKyAgICAyMzUsIDIyMCwgMjIyLCA5MywgNywgNiwgMSwgMjM1LCAyMjAsIDIxNywgMTUzLCA3LCA0LCAxLCAyMzUsIDIyMCwgMjE3LCAKKyAgICAxNTMsIDU4LCAxLCAxMjEsIDI1MCwgMzksIDI1NSwgMjMsIDU4LCAxLCAyNDksIDIzNCwgNTgsIDEsIDIxOSwgMjUzLCAyNDUsIAorICAgIDEwNiwgNTAsIDcsIDYsIDEsIDIyMiwgMSwgNywgNCwgMSwgMjIyLCAxLCA3LCA2LCAxLCAyMTUsIDk0LCAyNDIsIDY3LCA3LCAKKyAgICA0LCAxLCAyMzMsIDE1NSwgMiwgMjIzLCA1OCwgMjQxLCA1OSwgMjIsIDI1MiwgNDksIDcsIDYsIDEsIDIzMCwgMzEsIDIsIAorICAgIDI0OCwgNDcsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0OCwgNDcsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDEzMCwgNywgNCwgMSwgCisgICAgMjUxLCA3NSwgMiwgMTMwLCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAxMDMsIDU4LCAxLCA2LCAyNDIsIDY4LCAyLCA5MSwgNTgsIDEsIAorICAgIDQsIDI3LCAyMjYsIDIzOCwgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTk0LCA3LCAyNDUsIDExMSwgMSwgMjIzLCA1MiwgMjQ1LCAKKyAgICAxNCwgNywgMjQ1LCAxMTEsIDEsIDIyMywgNTIsIDIyNiwgMTA5LCA3LCAyNDUsIDExMSwgMSwgMjM1LCAyMDAsIDE5NCwgNywgCisgICAgMjQ1LCAxMTEsIDEsIDI0MCwgMTYxLCAyMzIsIDEzNSwgNywgMjQ1LCAxMTEsIDEsIDI1NCwgMzEsIDE5NCwgMjE3LCAyMzEsIAorICAgIDIyOSwgMjE5LCAxLCA2MSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCA3NCwgMjE3LCAyMzEsIDIyOSwgMjE5LCA1LCAyNDYsIAorICAgIDU2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDY5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDc2LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDc4LCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI0MiwgNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzQsIAorICAgIDM0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNCwgMTExLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0MiwgMTgxLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0MiwgMjMxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI1NCwgODMsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQ5LCAyNDYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjUwLCA5NCwgMjE3LCAyMzEsIAorICAgIDIyOSwgMjE5LCAxLCAyMzUsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNSwgMTE1LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDIxNSwgMTM0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxNSwgMTQwLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIAorICAgIDI0OCwgMTEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0OCwgMTIyLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDExMiwgCisgICAgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMTYsIDE1NywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDcsIDE1MywgMjE3LCAKKyAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDgsIDE1LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyOCwgNzksIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMSwgMjI1LCAxOSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjUsIDEyNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAKKyAgICAyNTEsIDIxMywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNTIsIDE4LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzMCwgCisgICAgMTY2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyMiwgMjEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzMiwgMTYyLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyMiwgMTY3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxOSwgNjAsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQxLCA3NSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgNjEsIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMjUsIDUsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCA2OSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgCisgICAgNzYsIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIDIyNiwgMTg3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIAorICAgIDIzMSwgMTYzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIDIzMSwgMTYyLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgCisgICAgMTUsIDIzMSwgMTYxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDIyNSwgMTUsIDIzMSwgMTYwLCAyMjgsIDYxLCAyMzUsIDI0NywgCisgICAgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAyMjgsIDYxLCAKKyAgICAyMzUsIDI0NywgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyMTksIAorICAgIDExOSwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgMTAsIDEyMywgMjQ1LCAxOTYsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIAorICAgIDEwLCAxMzQsIDIxOSwgMTE4LCAyMjgsIDYxLCAyMzUsIDI0NywgMjI0LCAyNSwgNzksIDIyOCwgNjEsIDIzNSwgMjQ3LCAKKyAgICAyMjUsIDQzLCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyMiwgMTIwLCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyNCwgMjYsIAorICAgIDc5LCAyMjUsIDE0NywgMSwgMTc2LCAyMjUsIDE0NywgMSwgMjM0LCAxMzgsIDIyNSwgMTQ3LCAxLCAyNDMsIDE0MiwgMjI1LCAKKyAgICAxNDcsIDEsIDIyOSwgODIsIDIyNSwgMTQ3LCAxLCAyNTEsIDQxLCAyMjUsIDE0NywgMSwgMjUwLCAxNjUsIDIyNSwgMTQ3LCAKKyAgICAxLCAyMzUsIDE0NywgMjI1LCAxNDcsIDEsIDIyNywgMTY5LCAyMjUsIDE0NywgMSwgMjE3LCAxMDYsIDIyNSwgMTQ3LCAxLCAKKyAgICAyMTYsIDIwOSwgMjI1LCAxNDcsIDEsIDI0OCwgMjI5LCAyMjUsIDE0NywgMSwgMTk4LCAyMjUsIDE0NywgMSwgMTkxLCAyMjUsIAorICAgIDE0NywgMSwgMjI1LCAxNTAsIDIyNSwgMTQ3LCAxLCAyNTIsIDE5OSwgMjI1LCAxNDcsIDEsIDE4NiwgMjI1LCAxNDcsIDEsIAorICAgIDIxNSwgMTg0LCAyMjUsIDE0NywgMSwgMjE1LCAxNzYsIDIyNSwgMTQ3LCAxLCAyNDYsIDQ2LCAyMjUsIDE0NywgMSwgMjEyLCAKKyAgICA2NSwgMjI1LCAxNDcsIDEsIDIxMCwgODIsIDIyNSwgMTQ3LCAxLCAyMTAsIDExNiwgMjI1LCAxNDcsIDEsIDQsIDYxLCAyMjUsIAorICAgIDE0NywgMSwgMTkyLCAyMjUsIDE0NywgMSwgMjA1LCAyMjUsIDE0NywgMSwgMjMzLCAxNDEsIDIyNSwgMTQ3LCAxLCAyMjAsIAorICAgIDEwNCwgMjI1LCAxNDcsIDEsIDIwNiwgMjI1LCAxNDcsIDEsIDE2MiwgMjI1LCAxNDcsIDEsIDYxLCAyMjUsIDE0NywgMSwgCisgICAgNzQsIDIyNSwgMTQ3LCAxLCA2OSwgMjI1LCAxNDcsIDEsIDc2LCAyMjUsIDE0NywgMSwgNzgsIDIyNSwgMTQ3LCAxLCAyMjQsIAorICAgIDkxLCAyMjUsIDE0NywgMSwgMjExLCAxNjUsIDIyNSwgMTQ3LCAxLCAyNDQsIDIwNCwgMjI1LCAxNDcsIDEsIDI0MywgMzYsIAorICAgIDIyNSwgMTQ3LCAxLCAyNDUsIDIxNywgMjI1LCAxNDcsIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDIyNSwgMTQ3LCAyMTgsIDc0LCAKKyAgICAxLCAxOTIsIDIyNSwgMTQ3LCAxLCAyMTUsIDE1NywgMjI1LCAxNDcsIDEsIDIxNSwgMTQ1LCAyMjUsIDE0NywgMSwgMjQ4LCAKKyAgICAxNDMsIDIyNSwgMTQ3LCAxLCAyMjgsIDExNSwgMjI1LCAxNDcsIDEsIDI1NCwgMTQ5LCAxOTIsIDIyNSwgMTQ3LCAxLCAyMTMsIAorICAgIDEzNCwgMjIwLCAxMDQsIDIyNSwgMTQ3LCAxLCAyMTMsIDEzNSwgMTYyLCAyMjUsIDE0NywgMSwgMjUzLCAyMzEsIDI0NCwgCisgICAgMjA0LCAyMjUsIDE0NywgMjE4LCA3NCwgMSwgMjA1LCAyMjUsIDE0NywgMjE4LCAyNiwgMSwgMjA1LCAyMjUsIDE0NywgMSwgCisgICAgMjUxLCA3LCAyMjUsIDE0NywgMjE5LCAxNTcsIDI0MSwgMjQzLCA3OSwgMjI1LCAxNDcsIDUyLCAyNDEsIDI0MywgNzksIAorICAgIDIyNSwgMTQ3LCAxNjQsIDIyMCwgOTcsIDIyNSwgMTQ3LCAxNjQsIDUyLCAyMjAsIDk3LCAxNzksIDUsIDI1NCwgODMsIDE3OSwgCisgICAgNSwgMjEzLCAxNDcsIDE3OSwgMSwgNjEsIDE3OSwgMSwgMjU1LCA4MiwgMTc5LCAxLCA3NCwgMTc5LCAxLCAyMzYsIDQwLCAKKyAgICAxNzksIDEsIDY5LCAxNzksIDEsIDIxNCwgMTE4LCAxNzksIDEsIDE0OSwgMTUzLCAxNzksIDEsIDE0OSwgMjIyLCAxODIsIAorICAgIDE3OSwgMSwgMTQ5LCAxNTYsIDE3OSwgMSwgMTQ5LCAyMzIsIDE5MSwgMTc5LCAxLCA3NiwgMTc5LCAxLCAyNDUsIDIxNywgCisgICAgMTc5LCAxLCAyNTQsIDIxMCwgMTc5LCAxLCA3OCwgMTc5LCAxLCAyMjYsIDE4NywgMTc5LCAxLCAyNTMsIDIwMCwgMTc5LCAxLCAKKyAgICAxNzYsIDE3OSwgMSwgMjM0LCAxMzgsIDE3OSwgMSwgMjQzLCAxNDIsIDE3OSwgMSwgMjQzLCAwLCAxNzksIDEsIDIyOSwgODIsIAorICAgIDE3OSwgMSwgMjUxLCA0MSwgMTc5LCAxLCAyNTAsIDE2NSwgMTc5LCAxLCAyMzUsIDE0NywgMTc5LCAxLCAyMzUsIDEyMCwgCisgICAgMTc5LCAxLCAyMjcsIDE2OSwgMTc5LCAxLCAyMTUsIDE1NywgMTc5LCAxLCAyMTUsIDE0NSwgMTc5LCAxLCAyNDgsIDE0MywgCisgICAgMTc5LCAxLCAyNDgsIDEyNywgMTc5LCAxLCAyMjgsIDExNSwgMTc5LCAxLCAyMTcsIDEwNiwgMTc5LCAxLCAyMTYsIDIwOSwgCisgICAgMTc5LCAxLCAyNDgsIDIyOSwgMTc5LCAxLCAyNDgsIDMzLCAxNzksIDEsIDE5OCwgMTc5LCAxLCAxOTEsIDE3OSwgMSwgMjI1LCAKKyAgICAxNTAsIDE3OSwgMSwgMjUyLCAxOTksIDE3OSwgMSwgMjUyLCAyNiwgMTc5LCAxLCAxODYsIDE3OSwgMSwgMTkyLCAxNzksIDEsIAorICAgIDIwNSwgMTc5LCAxLCAyMzMsIDE0MSwgMTc5LCAxLCAyMTQsIDI3LCAxNzksIDEsIDIyMCwgMTA0LCAxNzksIDEsIDIxOCwgCisgICAgMjI1LCAxNzksIDEsIDIwNiwgMTc5LCAxLCAxNjIsIDE3OSwgMSwgMjMyLCAxOTAsIDE3OSwgMTE3LCA1LCAyNDIsIDUxLCAKKyAgICAxNzksIDI1LCA1LCAyNTUsIDgyLCAxNzksIDI1LCA1LCA3NCwgMTc5LCAyNSwgNSwgMjM2LCA0MCwgMTc5LCAyNSwgNSwgNjksIAorICAgIDE3OSwgMjUsIDUsIDIxNCwgMTE4LCAxNzksIDI1LCA1LCAxNDksIDE1MywgMTc5LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTc5LCAyNSwgNSwgMTQ5LCAxNTYsIDE3OSwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE3OSwgMjUsIDUsIDc2LCAxNzksIDI1LCAKKyAgICA1LCAyNDUsIDIxNywgMTc5LCAyNSwgNSwgMjU0LCAyMTAsIDE3OSwgMjUsIDUsIDc4LCAxNzksIDI1LCA1LCAyMjYsIDE4NywgCisgICAgMTc5LCAyNSwgNSwgMjUzLCAyMDAsIDE3OSwgNSwgMjEzLCAxNTIsIDE3OSwgMjQ4LCAxODYsIDE3OSwgNTIsIDI0OCwgMTg2LCAKKyAgICAxNzksIDIxLCAyMTAsIDg2LCAxNzksIDIxLCAxMTEsIDE3OSwgMjEsIDEwNSwgMTc5LCAyMSwgMTU4LCAxNzksIDIxLCAxNjEsIAorICAgIDE3OSwgMjEsIDE5MCwgMTc5LCAyMSwgMTk1LCAxNzksIDIxLCAxOTksIDE3OSwgMjEsIDE5NiwgMTc5LCAyMSwgMjAxLCAzOCwgCisgICAgODQsIDIxLCAyMTAsIDg2LCAzOCwgODQsIDIxLCAxMTEsIDM4LCA4NCwgMjEsIDEwNSwgMzgsIDg0LCAyMSwgMTU4LCAzOCwgCisgICAgODQsIDIxLCAxNjEsIDM4LCA4NCwgMjEsIDE5MCwgMzgsIDg0LCAyMSwgMTk1LCAzOCwgODQsIDIxLCAxOTksIDM4LCA4NCwgCisgICAgMjEsIDE5NiwgMzgsIDg0LCAyMSwgMjAxLCAzOCwgODQsIDEsIDYxLCAzOCwgODQsIDEsIDY5LCAzOCwgODQsIDEsIDE3NiwgCisgICAgMzgsIDg0LCAxLCAxOTgsIDM4LCA4NCwgMSwgMTkxLCAzOCwgODQsIDEsIDIwNSwgMzgsIDg0LCAxLCAyMTMsIDE3NiwgMzgsIAorICAgIDg0LCA1LCAyNTMsIDE4MywgODQsIDUsIDIxOSwgMTksIDI1MSwgNywgODQsIDUsIDI1MSwgOCwgMjEzLCAxNTIsIDg0LCA1LCAKKyAgICA1MiwgMjUxLCA4LCAyMTMsIDE1MiwgODQsIDUsIDI1MSwgOCwgMTA1LCA4NCwgNSwgMjUxLCA4LCAxNTgsIDg0LCA1LCAyNTEsIAorICAgIDgsIDI1MywgMTgzLCA4NCwgNSwgMjI0LCAxMjcsIDg0LCAyNDMsIDEwNywgMjQ0LCAxMTEsIDg0LCAyNTAsIDI0NiwgODQsIAorICAgIDI0MSwgMjM3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAyMTAsIDg2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxMTEsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDEwNSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTU4LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDIxLCAxNjEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5MCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTk1LCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5NiwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAyMSwgMjAxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE3NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMzQsIAorICAgIDEzOCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDMsIDE0MiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjksIDgyLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIwNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjAsIDEwNCwgMjM0LCAxOTQsIAorICAgIDIzMiwgMjQ4LCAxLCAyMTAsIDExNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjcsIDE2OSwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyMTcsIDEwNiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDAsIDIzMywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAKKyAgICAxOTgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTkxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNSwgMTUwLCAyMzQsIAorICAgIDE5NCwgMjMyLCAyNDgsIDEsIDE4NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNDgsIDIyOSwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyNTIsIDE5OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMDUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTkyLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIzMywgMTQxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIxMiwgNjUsIDIzNCwgCisgICAgMTk0LCAyMzIsIDI0OCwgMSwgMjE2LCAyMDksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTYyLCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDEsIDIxNCwgMjcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjUxLCA0MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAKKyAgICA2MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjYsIDIzOCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCA3NCwgMjM0LCAxOTQsIAorICAgIDIzMiwgMjQ4LCAxLCAyMjYsIDE4NywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgMjE0LCAyMTQsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMjUsIDc2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCA2OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgMjQ1LCAKKyAgICAyMTcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDc4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEzOCwgMjI1LCAzMywgMjM0LCAKKyAgICAxOTQsIDIzMiwgMjQ4LCAxMzgsIDI1MSwgMjAsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMTM4LCAyNTEsIDIxLCAyMjUsIDMzLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDUsIDI0OSwgODUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgNSwgMjE5LCAyMDEsIDIyMywgOTYsIAorICAgIDEsIDE3NiwgMjIzLCA5NiwgMSwgMjQzLCAxNDIsIDIyMywgOTYsIDEsIDIyOSwgODIsIDIyMywgOTYsIDEsIDIxNywgMTA2LCAKKyAgICAyMjMsIDk2LCAxLCAyNDgsIDIyOSwgMjIzLCA5NiwgMSwgMTk4LCAyMjMsIDk2LCAxLCAxOTEsIDIyMywgOTYsIDEsIDI1MiwgCisgICAgMTk5LCAyMjMsIDk2LCAxLCAxODYsIDIyMywgOTYsIDEsIDI1MSwgNDEsIDIyMywgOTYsIDEsIDIzNSwgMTQ3LCAyMjMsIDk2LCAKKyAgICAxLCAyMjcsIDE2OSwgMjIzLCA5NiwgMSwgMjA2LCAyMjMsIDk2LCAxLCAyMDUsIDIyMywgOTYsIDEsIDIzMywgMTQxLCAyMjMsIAorICAgIDk2LCAxLCAxOTIsIDIyMywgOTYsIDEsIDIxMiwgNjUsIDIyMywgOTYsIDEsIDE2MiwgMjIzLCA5NiwgMSwgMjMxLCAxMjksIAorICAgIDIyMywgOTYsIDEsIDIyOSwgNjEsIDIyMywgOTYsIDEsIDIyOSwgMTUzLCAyMjMsIDk2LCAxLCAyMjcsIDEzOSwgMjIzLCA5NiwgCisgICAgMSwgNjEsIDIyMywgOTYsIDI1LCA1LCA3NCwgMjIzLCA5NiwgMjUsIDUsIDY5LCAyMjMsIDk2LCAyNSwgNSwgNzYsIDIyMywgCisgICAgOTYsIDI1LCA1LCAyNTQsIDIxMCwgMjIzLCA5NiwgMjUsIDUsIDc4LCAyMjMsIDk2LCAyNSwgNSwgMjUzLCAyMDAsIDIyMywgCisgICAgOTYsIDI1LCA1LCAyNDUsIDYzLCAyMjMsIDk2LCAyNSwgNSwgMjQ1LCAyNDEsIDIyMywgOTYsIDExNywgNSwgMjI5LCA4NCwgCisgICAgMjIzLCA5NiwgMTE3LCA1LCAyMzAsIDMwLCAyMjMsIDk2LCAxMTcsIDUsIDE1MywgMjIzLCA5NiwgMTE3LCA1LCAyNDIsIDY3LCAKKyAgICAyMjMsIDk2LCAyMTMsIDE1MiwgMjIzLCA5NiwgMjIxLCAxNzUsIDc5LCAyNCwgMTAwLCAyMTYsIDk4LCAyNCwgMTAwLCAyMTYsIAorICAgIDk3LCAyNCwgMTAwLCAyMTYsIDk1LCAyNCwgMTAwLCAyMTYsIDEwMCwgMjQsIDEwMCwgMjIzLCAyNCwgMjQsIDEwMCwgMjIzLCAKKyAgICA4LCAyNCwgMTAwLCAyMjMsIDMsIDI0LCAxMDAsIDIyMywgNSwgMjQsIDEwMCwgMjIzLCAyMSwgMjQsIDEwMCwgMjIzLCAxNCwgCisgICAgMjQsIDEwMCwgMjIzLCA3LCAyNCwgMTAwLCAyMjMsIDI2LCAyNCwgMTAwLCAyMjMsIDksIDI0LCAxMDAsIDIyMywgMjgsIDI0LCAKKyAgICAxMDAsIDIyMywgMjUsIDI0LCAxMDAsIDIzMCwgMjE4LCAyNCwgMTAwLCAyMzAsIDIwOSwgMjQsIDEwMCwgMjMwLCAyMTIsIAorICAgIDI0LCAxMDAsIDIyNSwgODMsIDI0LCAxMDAsIDIyNSwgOTQsIDI0LCAxMDAsIDIyNSwgOTUsIDI0LCAxMDAsIDIxOCwgMjA5LCAKKyAgICAyNCwgMTAwLCAyMzYsIDUzLCAyNCwgMTAwLCAyMzYsIDYwLCAyNCwgMTAwLCAyMTgsIDIyMCwgMjQsIDEwMCwgMjE4LCAyMDcsIAorICAgIDI0LCAxMDAsIDIyNSwgMTMzLCAyNCwgMTAwLCAyNDEsIDE3NCwgMjQsIDEwMCwgMjE4LCAyMDQsIDE1NSwgNSwgMjI2LCAzMSwgCisgICAgMTU1LCA1LCAyNTAsIDE5NSwgMTU1LCA1LCAyMzMsIDcyLCAxNTUsIDUsIDIxMSwgMjQzLCAxNTUsIDEsIDYxLCAxNTUsIDEsIAorICAgIDI0MCwgMTYxLCAyMzQsIDE5NywgMTU1LCAxLCA3NCwgMTU1LCAxLCAyMzYsIDQwLCAxNTUsIDEsIDY5LCAxNTUsIDEsIDIyNiwgCisgICAgOTQsIDI1MCwgMTcxLCAxNTUsIDEsIDIyOSwgODMsIDIzMywgMzQsIDE1NSwgMSwgMjI5LCA4MywgMjMzLCAzNSwgMjIzLCAKKyAgICAxNDUsIDE1NSwgMSwgNzYsIDE1NSwgMSwgMjU0LCAyMTAsIDE1NSwgMSwgNzgsIDE1NSwgMSwgMTc2LCAxNTUsIDEsIDIzNSwgCisgICAgMTksIDIyMSwgMjMwLCAxNTUsIDEsIDIzNSwgMTksIDIzMCwgNzEsIDE1NSwgMSwgMjQzLCAxNDIsIDE1NSwgMSwgMjQzLCAKKyAgICAxNDMsIDIzMCwgNzEsIDE1NSwgMSwgMjI5LCA4MiwgMTU1LCAxLCAyNTEsIDQxLCAxNTUsIDEsIDI1MSwgNDIsIDIzMCwgNzEsIAorICAgIDE1NSwgMSwgMjM1LCAxNDcsIDE1NSwgMSwgMjI3LCAxNzAsIDIzMCwgNzEsIDE1NSwgMSwgMjM1LCAxNDgsIDIzMSwgMjEyLCAKKyAgICAxNTUsIDEsIDIyNywgMTY5LCAxNTUsIDEsIDIxNSwgMTU3LCAxNTUsIDEsIDIxNSwgMTU4LCAyMzEsIDIxMiwgMTU1LCAxLCAKKyAgICAyNDgsIDE0MywgMTU1LCAxLCAyNDgsIDE0NCwgMjMxLCAyMTIsIDE1NSwgMSwgMjI5LCAyMzQsIDIzMCwgNzEsIDE1NSwgMSwgCisgICAgMjE3LCAxMDYsIDE1NSwgMSwgMjE3LCAxMDcsIDIzMCwgNzEsIDE1NSwgMSwgMjQ4LCAyMjksIDE1NSwgMSwgMjQ4LCAyMzAsIAorICAgIDIzMSwgMjEyLCAxNTUsIDEsIDE5OCwgMTU1LCAxLCAxOTEsIDE1NSwgMSwgMjI2LCA5NCwgMjMwLCA3MSwgMTU1LCAxLCAKKyAgICAyNTIsIDE5OSwgMTU1LCAxLCAyNTIsIDIwMCwgMjMwLCA3MSwgMTU1LCAxLCAxODYsIDE1NSwgMSwgMTkyLCAxNTUsIDEsIAorICAgIDIwNSwgMTU1LCAxLCAyMjMsIDE5MSwgMjU0LCAyMTksIDE1NSwgMSwgMjMzLCAxNDEsIDE1NSwgMSwgMjEyLCA2NSwgMTU1LCAKKyAgICAxLCAyMjIsIDM2LCAyMzAsIDcxLCAxNTUsIDEsIDIyMiwgMzYsIDIzMSwgMjEyLCAxNTUsIDEsIDIwNiwgMTU1LCAxLCAxNjIsIAorICAgIDE1NSwgNSwgMjUwLCAxOTYsIDIxNiwgMjUxLCAxNTUsIDI1LCA1LCAyMTcsIDQ4LCAxNTUsIDI1LCA1LCAyMTYsIDM2LCAKKyAgICAxNTUsIDI1LCA1LCAyMTEsIDE5MCwgMTU1LCAyNSwgNSwgMjExLCAxOTEsIDIzMSwgNzQsIDE1NSwgMjUsIDUsIDIxOCwgNDgsIAorICAgIDE1NSwgMjUsIDUsIDIxOCwgNDksIDIzMSwgNjIsIDE1NSwgMjUsIDUsIDIxNywgNjYsIDE1NSwgMjUsIDUsIDI0NywgMjAyLCAKKyAgICAyMzAsIDcwLCAxNTUsIDI1LCA1LCAyMjUsIDE4NywgMTU1LCAxMTcsIDUsIDIzNCwgMTY0LCAxNTUsIDExNywgNSwgMjI1LCAKKyAgICAxOTksIDE1NSwgMTE3LCA1LCAyNTEsIDI3LCAxNTUsIDIyNiwgNDQsIDE1NSwgNDMsIDIyMywgNzIsIDE1NSwgNDQsIDIyMywgCisgICAgNzIsIDE1NSwgMjI2LCA4MywgMjU0LCAxMjUsIDE1NSwgMjI2LCA4MywgMjMxLCAyMjksIDE1NSwgMjI2LCA4MywgMjMyLCAKKyAgICA5MywgMTU1LCAyMjYsIDgzLCAyMTEsIDIzOCwgMTU1LCAyMjYsIDgzLCAyMjYsIDQ1LCAxNTUsIDIyNiwgODMsIDIzMiwgCisgICAgMjExLCAxNTUsIDIyNiwgODMsIDIzMiwgODcsIDE1NSwgMjI2LCA4MywgMjU1LCAyLCAxNTUsIDIyNiwgODMsIDI1NSwgMywgCisgICAgMjU1LCAyLCAxNTUsIDIyNiwgODMsIDIyNSwgNTQsIDE1NSwgMjE1LCA5NCwgMjI2LCA4MywgMjI1LCA1NCwgMTU1LCAyMjYsIAorICAgIDQwLCAxNTUsIDIxLCAyMTAsIDg2LCAxNTUsIDIxLCAxMTEsIDE1NSwgMjEsIDEwNSwgMTU1LCAyMSwgMTU4LCAxNTUsIDIxLCAKKyAgICAxNjEsIDE1NSwgMjEsIDE5MCwgMTU1LCAyMSwgMTk1LCAxNTUsIDIxLCAxOTksIDE1NSwgMjEsIDE5NiwgMTU1LCAyMSwgCisgICAgMjAxLCAxNTUsIDIyNiwgODMsIDIxNiwgNzAsIDIxNSwgMTA3LCAxNTUsIDIyNiwgODMsIDIzNSwgMTc0LCAxNzIsIDEsIDYxLCAKKyAgICAxNzIsIDEsIDc0LCAxNzIsIDEsIDY5LCAxNzIsIDEsIDc2LCAxNzIsIDEsIDI1NCwgMjEwLCAxNzIsIDEsIDc4LCAxNzIsIDEsIAorICAgIDE3NiwgMTcyLCAxLCAyMzQsIDEzOCwgMTcyLCAxLCAyNDMsIDE0MiwgMTcyLCAxLCAyNDMsIDAsIDE3MiwgMSwgMjI4LCAKKyAgICAyNTAsIDE3MiwgMSwgMjI5LCA4MiwgMTcyLCAxLCAyNTAsIDE2NSwgMTcyLCAxLCAyNTAsIDEyMCwgMTcyLCAxLCAyMzUsIAorICAgIDE0NywgMTcyLCAxLCAyMzUsIDEyMCwgMTcyLCAxLCAyMjgsIDI0MCwgMTcyLCAxLCAyMjgsIDI0MiwgMTcyLCAxLCAyMjgsIAorICAgIDI0MSwgMTcyLCAxLCAyMTcsIDEwNiwgMTcyLCAxLCAyMTYsIDIwOSwgMTcyLCAxLCAyNDgsIDIyOSwgMTcyLCAxLCAyNDgsIAorICAgIDMzLCAxNzIsIDEsIDIyNywgMjExLCAxNzIsIDEsIDE5OCwgMTcyLCAxLCAyNDgsIDE0MywgMTcyLCAxLCAxOTEsIDE3MiwgMSwgCisgICAgMjI0LCAyMjMsIDE3MiwgMSwgMjI1LCAxNTAsIDE3MiwgMSwgMjUyLCAxOTksIDE3MiwgMSwgMjUyLCAyNiwgMTcyLCAxLCAKKyAgICAyMzAsIDEwMCwgMTcyLCAxLCAxODYsIDE3MiwgMSwgMjUyLCAxMTksIDE3MiwgMSwgMTkyLCAxNzIsIDEsIDIwNSwgMTcyLCAKKyAgICAxLCAyMzMsIDE0MSwgMTcyLCAxLCAyMTQsIDI3LCAxNzIsIDEsIDIxOCwgMjI1LCAxNzIsIDEsIDIwNiwgMTcyLCAxLCAxNjIsIAorICAgIDE3MiwgMjUsIDUsIDI1NSwgODIsIDE3MiwgMjUsIDUsIDc0LCAxNzIsIDI1LCA1LCAyMzYsIDQwLCAxNzIsIDI1LCA1LCAKKyAgICAyNDUsIDIwMywgMTcyLCAyNSwgNSwgNjksIDE3MiwgMjUsIDUsIDIyNiwgMjM4LCAxNzIsIDI1LCA1LCA3OCwgMTcyLCAyNSwgCisgICAgNSwgMjU0LCAyMTAsIDE3MiwgMjUsIDUsIDI1MywgMjAwLCAxNzIsIDI1LCA1LCAyMTQsIDIxNCwgMTcyLCAxMTcsIDUsIAorICAgIDE5MiwgMTcyLCAxMTcsIDUsIDIwNSwgMTcyLCAxMTcsIDUsIDIzMywgMTQxLCAxNzIsIDExNywgNSwgMjEyLCA2NSwgMTcyLCAKKyAgICAxLCA0MCwgMjM1LCAyOSwgMTcyLCAxLCA0MCwgMjQzLCAyMDksIDE3MiwgMSwgNDAsIDIyOSwgODQsIDE3MiwgMTE3LCA1LCAKKyAgICA0MCwgMjI5LCA4NCwgMTcyLCAxLCA0MCwgMjUwLCAxNjYsIDE3MiwgMSwgNDAsIDIxNywgMTUzLCAxNzIsIDEsIDQwLCAyMzAsIAorICAgIDMwLCAxNzIsIDEsIDQwLCAyMjYsIDEwOSwgMTcyLCAxLCA0MCwgMjExLCAxMTcsIDE3MiwgMSwgNDAsIDE1MywgMTcyLCAxLCAKKyAgICA0MCwgMTU2LCAxNzIsIDEsIDQwLCAyMTgsIDIyOCwgMTcyLCAxMTcsIDUsIDQwLCAxOTQsIDE3MiwgMTE3LCA1LCA0MCwgCisgICAgMjQyLCA2NywgMTcyLCAyMSwgMjEwLCA4NiwgMTcyLCAyMSwgMTExLCAxNzIsIDIxLCAxMDUsIDE3MiwgMjEsIDE1OCwgMTcyLCAKKyAgICAyMSwgMTYxLCAxNzIsIDIxLCAxOTAsIDE3MiwgMjEsIDE5NSwgMTcyLCAyMSwgMTk5LCAxNzIsIDIxLCAxOTYsIDE3MiwgMjEsIAorICAgIDIwMSwgMTcyLCAyMjQsIDE0NCwgMjE4LCAyNTMsIDE3MiwgMjI0LCAxNDQsIDI0OCwgMTg2LCAxNzIsIDIyNCwgMTQ0LCA1MiwgCisgICAgMjQ4LCAxODYsIDE3MiwgMjI0LCAxNDQsIDIxNSwgMjEyLCAyNDgsIDE4NiwgNjgsIDEsIDIzNCwgMTMyLCAyNDMsIDE0MiwgCisgICAgNjgsIDEsIDIzNCwgMTMyLCAyNTEsIDQxLCA2OCwgMSwgMjM0LCAxMzIsIDI1MCwgMTY1LCA2OCwgMSwgMjM0LCAxMzIsIAorICAgIDIzNSwgMTQ3LCA2OCwgMSwgMjM0LCAxMzIsIDIzNSwgMTIwLCA2OCwgMSwgMjM0LCAxMzIsIDIyNywgMTY5LCA2OCwgMSwgCisgICAgMjM0LCAxMzIsIDIxNSwgMTU3LCA2OCwgMSwgMjM0LCAxMzIsIDIxNSwgMTQ1LCA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMTQzLCAKKyAgICA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMTI3LCA2OCwgMSwgMjM0LCAxMzIsIDI0OCwgMzMsIDY4LCAxLCAyMzQsIDEzMiwgCisgICAgMTk4LCA2OCwgMSwgMjM0LCAxMzIsIDIwNiwgNjgsIDEsIDIzNCwgMTMyLCAxNjIsIDY4LCAxLCAyMzQsIDEzMiwgMjQxLCAKKyAgICAxOTYsIDY4LCAxLCAyMzQsIDEzMiwgMjQ0LCAyMDQsIDY4LCA1OCwgMSwgMjM0LCAxMzIsIDIyMywgMTEyLCA2OCwgMSwgCisgICAgMjM0LCAxMzIsIDIxMSwgMTY1LCA2OCwgMSwgMjM0LCAxMzIsIDIxMCwgMTE2LCA2OCwgMSwgMjM0LCAxMzIsIDIwNSwgNjgsIAorICAgIDIzMiwgMTUxLCAyMzQsIDEzMiwgMjI3LCAxLCA2OCwgMjMyLCAxNTEsIDIzNCwgMTMyLCAyMjQsIDQ2LCA2OCwgMjMyLCAKKyAgICAxNTEsIDIzNCwgMTMyLCAyNDEsIDEyOCwgNjgsIDE2LCAyNTQsIDE5OSwgMjQ1LCAzOCwgNjgsIDE2LCAyNTQsIDE5OSwgCisgICAgMTExLCA2OCwgMTYsIDI1NCwgMTk5LCAxMDUsIDY4LCAxLCAyNTQsIDE5OSwgMjA1LCA2OCwgNSwgMjI2LCAyNywgMjM0LCAKKyAgICAyMTksIDIxNiwgMzEsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAzNCwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDM0LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIzNCwgMTExLCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTExLCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgCisgICAgMTIwLCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTIwLCAzOSwgMjA4LCAxLCAxMjEsIDI0MiwgMTgxLCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDI0MiwgMTgxLCAzOSwgMjA4LCAxLCAxMjEsIDIyOSwgOSwgMzksIDIwOCwgMSwgMTI1LCAyMjksIDksIDM5LCAyMDgsIAorICAgIDEsIDEyMSwgMjQ5LCAyNDYsIDM5LCAyMDgsIDEsIDEyNSwgMjQ5LCAyNDYsIDM5LCAyMDgsIDEsIDEyMSwgMjUwLCA5NCwgCisgICAgMzksIDIwOCwgMSwgMTI1LCAyNTAsIDk0LCAzOSwgMjA4LCAxLCAxMjEsIDIxOSwgNjAsIDM5LCAyMDgsIDEsIDEyNSwgMjE5LCAKKyAgICA2MCwgMzksIDIwOCwgMSwgMTIxLCAyMjcsIDEzOCwgMzksIDIwOCwgMSwgMTI1LCAyMjcsIDEzOCwgMzksIDIwOCwgMSwgCisgICAgMTIxLCAyNDcsIDE1MywgMzksIDIwOCwgMSwgMTI1LCAyNDcsIDE1MywgMzksIDIwOCwgMSwgMTIxLCAxMTIsIDM5LCAyMDgsIAorICAgIDEsIDEyNSwgMTEyLCAzOSwgMjA4LCAxLCAxMjEsIDIxNiwgMTU3LCAzOSwgMjA4LCAxLCAxMjUsIDIxNiwgMTU3LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIyOCwgNzksIDM5LCAyMDgsIDEsIDEyNSwgMjI4LCA3OSwgMzksIDIwOCwgMSwgMTIxLCAyNTEsIAorICAgIDIxMywgMzksIDIwOCwgMSwgMTI1LCAyNTEsIDIxMywgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDE5LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDIyNSwgMTksIDM5LCAyMDgsIDEsIDEyMSwgMjI1LCAxMjQsIDM5LCAyMDgsIDEsIDEyNSwgMjI1LCAxMjQsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjQ0LCA1MSwgMzksIDIwOCwgMSwgMTI1LCAyNDQsIDUxLCAzOSwgMjA4LCAxLCAxMjEsIDIzMCwgCisgICAgMTY2LCAzOSwgMjA4LCAxLCAxMjUsIDIzMCwgMTY2LCAzOSwgMjA4LCAxLCAxMjEsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAxMjEsIDIyMiwgMjEzLCAzOSwgMjA4LCAxLCAxMjUsIDIyMiwgMjEzLCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDIzMiwgMTYyLCAzOSwgMjA4LCAxLCAxMjUsIDIzMiwgMTYyLCAzOSwgMjA4LCAxLCAxMjEsIDIxMywgCisgICAgMTM4LCAzOSwgMjA4LCAxLCAxMjUsIDIxMywgMTM4LCAzOSwgMjA4LCAxLCAxMjEsIDI0MSwgNzUsIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjQxLCA3NSwgMzksIDIwOCwgMSwgMTIxLCA3OCwgMzksIDIwOCwgMSwgMTI1LCA3OCwgMzksIDIwOCwgMjMxLCAKKyAgICAyMDksIDIzNCwgMjM2LCAzOSwgMjA4LCAyNSwgMjU1LCA4MiwgMzksIDIwOCwgMjUsIDc0LCAzOSwgMjA4LCAyNSwgMjE0LCAKKyAgICAyMTQsIDM5LCAyMDgsIDI1LCA2OSwgMzksIDIwOCwgMjUsIDc2LCAzOSwgMjA4LCAyNSwgNzgsIDM5LCAyMDgsIDIzMSwgCisgICAgMjA5LCAyMzQsIDExNCwgMzksIDIwOCwgMjUsIDI0MCwgMTI2LCAzOSwgMjA4LCAyNSwgMjE0LCAyMTMsIDM5LCAyMDgsIDI1LCAKKyAgICAyMTQsIDIyOSwgMzksIDIwOCwgMjUsIDI1MywgMTk4LCAzOSwgMjA4LCAyNSwgMjUzLCAxNzUsIDM5LCAyMDgsIDI1LCAyNTQsIAorICAgIDEzMSwgMzksIDIwOCwgMjUsIDI1NCwgMTQ0LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA5LCAyNDUsIDE4OCwgMzksIDIwOCwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjI3LCAyMTAsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDksIDIxNiwgMTU3LCAzOSwgMjA4LCAxMzgsIAorICAgIDIzMSwgMjA5LCAyMTksIDQ0LCAzOSwgMjA4LCAxNiwgMjM0LCAxOSwgMzksIDIwOCwgMTYsIDIyNywgMjEwLCAzOSwgMjA4LCAKKyAgICAxNiwgMjIxLCAyNTUsIDM5LCAyMDgsIDE2LCAyNDEsIDc2LCAyNDEsIDcxLCAzOSwgMjA4LCAxNiwgMjM0LCAyOCwgMjM0LCAKKyAgICAyNywgMTg4LCAxODcsIDEsIDc2LCAxODgsIDE4NywgMSwgNzgsIDE4OCwgMTg3LCAxLCAyNTAsIDE2NSwgMTg4LCAxODcsIDEsIAorICAgIDIyNywgMTY5LCAxODgsIDE4NywgMSwgMjE1LCAxNTcsIDE4OCwgMTg3LCAxLCAyMTUsIDE0NSwgMTg4LCAxODcsIDEsIDI0OCwgCisgICAgMTQzLCAxODgsIDE4NywgMSwgMjQ4LCAxMjcsIDE4OCwgMTg3LCAxLCAyMjgsIDExNSwgMTg4LCAxODcsIDEsIDIyMCwgMTA0LCAKKyAgICAxODgsIDE4NywgMSwgMjE4LCAyMjUsIDE4OCwgMTg3LCAyNSwgNSwgMjM2LCA0MCwgMTg4LCAxODcsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTg4LCAxODcsIDI1LCA1LCAyNTUsIDQ2LCAxODgsIDE4NywgMjUsIDUsIDI1MywgMjAwLCAxODgsIDE4NywgMjUsIAorICAgIDUsIDI1NSwgMzksIDE4OCwgMTg3LCAyNTAsIDEzMywgMTg4LCAxODcsIDI1NCwgMjE1LCAyMzQsIDEwNCwgMTg4LCAxODcsIAorICAgIDI1NCwgMTExLCAxODgsIDE4NywgMywgMjIzLCA3NywgNzksIDE4OCwgMTg3LCAyMTEsIDIwOSwgMjIzLCA3NywgNzksIDE4OCwgCisgICAgMTg3LCAyNSwgNSwgMjEzLCAxNDcsIDE4OCwgMTg3LCAyMTMsIDE1MiwgMjksIDMsIDIxNSwgMTM4LCAyOSwgMywgMjE1LCAKKyAgICAxNDEsIDI5LCAzLCAyMTUsIDE0NCwgMjksIDMsIDIxNSwgMTQyLCAyOSwgMywgMjE1LCAxNDMsIDI5LCAzLCAyMTUsIDE0MCwgCisgICAgMjksIDMsIDI0OCwgMTIxLCAyOSwgMywgMjQ4LCAxMjMsIDI5LCAzLCAyNDgsIDEyNiwgMjksIDMsIDI0OCwgMTI0LCAyOSwgCisgICAgMywgMjQ4LCAxMjUsIDI5LCAzLCAyNDgsIDEyMiwgMjksIDMsIDI0NiwgMzYsIDI5LCAzLCAyNDYsIDM5LCAyOSwgMywgMjQ2LCAKKyAgICA0NSwgMjksIDMsIDI0NiwgNDMsIDI5LCAzLCAyNDYsIDQ0LCAyOSwgMywgMjQ2LCAzNywgMjksIDMsIDI1MCwgMjEyLCAyOSwgCisgICAgMywgMjUwLCAyMDYsIDI5LCAzLCAyNTAsIDIwOCwgMjksIDMsIDI1MCwgMjExLCAyOSwgMywgMjUwLCAyMDksIDI5LCAzLCAKKyAgICAyNTAsIDIxMCwgMjksIDMsIDI1MCwgMjA3LCAyOSwgMywgMjUyLCAxMTksIDI5LCAzLCAyNTIsIDk4LCAyOSwgMywgMjUyLCAKKyAgICAxMTAsIDI5LCAzLCAyNTIsIDExOCwgMjksIDMsIDI1MiwgMTEzLCAyOSwgMywgMjUyLCAxMTQsIDI5LCAzLCAyNTIsIDEwMiwgCisgICAgMTg4LCAxODcsIDEsIDIzNCwgMjUsIDE4OCwgMTg3LCAxLCAyMjEsIDI1NSwgMTg4LCAxODcsIDEsIDIzMywgMTE1LCAxODgsIAorICAgIDE4NywgMSwgMjMwLCAxNzcsIDE4OCwgMTg3LCAxLCAxOTEsIDE4OCwgMTg3LCAxLCAxOTgsIDE4OCwgMTg3LCAxLCAyNTAsIAorICAgIDExMCwgMTg4LCAxODcsIDEsIDIxNiwgOTEsIDE4OCwgMTg3LCAxLCAyMzQsIDEwNywgMTg4LCAxODcsIDEsIDIyOCwgMjU1LCAKKyAgICAxODgsIDE4NywgMSwgMjE2LCAxNTEsIDE4OCwgMTg3LCAxLCAyMTIsIDYwLCAxODgsIDE4NywgMSwgMjExLCA2OSwgMTg4LCAKKyAgICAxODcsIDEsIDI0MCwgMjIzLCAxODgsIDE4NywgMSwgMjE0LCAxOTAsIDE4OCwgMTg3LCAxLCA3NCwgMTg4LCAxODcsIDEsIAorICAgIDIyNSwgMTQ1LCAxODgsIDE4NywgMSwgMjUzLCAyMTAsIDE4OCwgMTg3LCAxLCAyNDIsIDE3NCwgMTg4LCAxODcsIDEsIDIzNSwgCisgICAgMTE4LCAxODgsIDE4NywgMSwgMjIzLCAxNjksIDE4OCwgMTg3LCAxLCAyNTIsIDE5OSwgMTg4LCAxODcsIDEsIDIzNSwgMTA2LCAKKyAgICAxODgsIDE4NywgMSwgMjQ3LCAyMjcsIDE4OCwgMTg3LCAxLCAyNDIsIDIyOCwgMTg4LCAxODcsIDEsIDI0OCwgMTMsIDE4OCwgCisgICAgMTg3LCAxLCAyNTIsIDI0LCAxODgsIDE4NywgMSwgMjM0LCAyNiwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMzMsIDExNiwgCisgICAgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMzAsIDE3OCwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMjYsIDk0LCAyMzIsIAorICAgIDEzNCwgMTg4LCAxODcsIDEsIDIyOSwgMjM0LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIxNiwgOTIsIDIzMiwgMTM0LCAKKyAgICAxODgsIDE4NywgMSwgMjI5LCAwLCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDI0MCwgMTYxLCAyMzIsIDEzNCwgMTg4LCAxODcsIAorICAgIDI1LCA1LCAyMjYsIDE5OSwgMTg4LCAxODcsIDI1LCA1LCAyMzYsIDQsIDE4OCwgMTg3LCAyNSwgNSwgMjU0LCAxMzAsIDE4OCwgCisgICAgMTg3LCAyNSwgNSwgMjExLCAzOCwgMTg4LCAxODcsIDI1LCA1LCAyMTksIDM0LCAxODgsIDE4NywgMjUsIDUsIDIxNCwgMTg3LCAKKyAgICAxODgsIDE4NywgMjUsIDUsIDI1MCwgMTMxLCAxODgsIDE4NywgMjUsIDUsIDIyNywgMTk1LCAxODgsIDE4NywgMjUwLCAxMzIsIAorICAgIDE4OCwgMTg3LCAyMzIsIDkwLCAyMzUsIDE1NiwgMTg4LCAxODcsIDI1NCwgNTQsIDIzNSwgMTU2LCAxODgsIDE4NywgMjEsIAorICAgIDIxMCwgODYsIDE4OCwgMTg3LCAyMSwgMTExLCAxODgsIDE4NywgMjEsIDEwNSwgMTg4LCAxODcsIDIxLCAxNTgsIDE4OCwgCisgICAgMTg3LCAyMSwgMTYxLCAxODgsIDE4NywgMjEsIDE5MCwgMTg4LCAxODcsIDIxLCAxOTUsIDE4OCwgMTg3LCAyMSwgMTk5LCAKKyAgICAxODgsIDE4NywgMjEsIDE5NiwgMTg4LCAxODcsIDIxLCAyMDEsIDI0LCAxNDMsIDIyNywgODEsIDI0LCAxNDMsIDIyNywgODYsIAorICAgIDI0LCAxNDMsIDIxMCwgMjQzLCAyNCwgMTQzLCAyMTAsIDI0MiwgMjQsIDE0MywgMjEwLCAyNDEsIDI0LCAxNDMsIDIxNSwgCisgICAgMjMsIDI0LCAxNDMsIDIxNSwgMjYsIDI0LCAxNDMsIDIxMCwgMjEwLCAyNCwgMTQzLCAyMTAsIDIwNiwgMjQsIDE0MywgMjQ1LCAKKyAgICA2MiwgMjQsIDE0MywgMjQ1LCA2MCwgMjQsIDE0MywgMjQ1LCA2MSwgMjQsIDE0MywgMjQ1LCA1OCwgMjQsIDE0MywgMjQwLCAKKyAgICAxNTEsIDI0LCAxNDMsIDI0MCwgMTUwLCAyNCwgMTQzLCAyNDAsIDE0OCwgMjQsIDE0MywgMjQwLCAxNDksIDI0LCAxNDMsIAorICAgIDI0MCwgMTU0LCAyNCwgMTQzLCAyNDAsIDE0NywgMjQsIDE0MywgMjQwLCAxNDYsIDI0LCAxNDMsIDI0MCwgMTU2LCAyNCwgCisgICAgMTQzLCAyNTQsIDQxLCAyNCwgMTQzLCAyNTQsIDQwLCAyNCwgOTAsIDIyOCwgMjI0LCAyNCwgOTAsIDIyOCwgMjMwLCAyNCwgCisgICAgOTAsIDIxOCwgMjA2LCAyNCwgOTAsIDIxOCwgMjA1LCAyNCwgOTAsIDIxNiwgOTcsIDI0LCA5MCwgMjE2LCA5NSwgMjQsIDkwLCAKKyAgICAyMTYsIDk0LCAyNCwgOTAsIDIxNiwgMTAwLCAyNCwgOTAsIDIxNiwgMTAxLCAyNCwgOTAsIDIxNiwgOTMsIDI0LCA5MCwgCisgICAgMjIzLCA4LCAyNCwgOTAsIDIyMywgMjMsIDI0LCA5MCwgMjE4LCAyMTIsIDI0LCA5MCwgMjIzLCAyMCwgMjQsIDkwLCAyMjMsIAorICAgIDEwLCAyNCwgOTAsIDIyMywgMTIsIDI0LCA5MCwgMjIyLCAyNTUsIDI0LCA5MCwgMjIzLCAwLCAyNCwgOTAsIDIzNCwgMjI0LCAKKyAgICAyNCwgOTAsIDIzMCwgMjE3LCAyNCwgOTAsIDIzMCwgMjExLCAyNCwgOTAsIDIxOCwgMjE2LCAyNCwgOTAsIDIzMCwgMjE0LCAKKyAgICAyNCwgOTAsIDIzMCwgMjIwLCAyNCwgOTAsIDIyNSwgNzksIDI0LCA5MCwgMjI1LCA4OCwgMjQsIDkwLCAyMjUsIDkyLCAyNCwgCisgICAgOTAsIDIxOCwgMjE0LCAyNCwgOTAsIDIyNSwgODIsIDI0LCA5MCwgMjI1LCA5NiwgMjQsIDkwLCAyMjUsIDk3LCAyNCwgOTAsIAorICAgIDIxOSwgMTQyLCAyNCwgOTAsIDIxOSwgMTQ1LCAyNCwgOTAsIDIxOCwgMjEwLCAyNCwgOTAsIDIxOCwgMjA4LCAyNCwgOTAsIAorICAgIDIxOSwgMTQwLCAyNCwgOTAsIDIxOSwgMTQ4LCAyNCwgOTAsIDIxOSwgMTQ5LCAyNCwgOTAsIDIxOSwgMTM0LCAyNCwgOTAsIAorICAgIDIxOSwgMTQ3LCAyNCwgOTAsIDIyNiwgMzQsIDI0LCA5MCwgMjI2LCAzNSwgMjQsIDkwLCAyMTEsIDI0LCAyNCwgOTAsIDIxMSwgCisgICAgMjUsIDI0LCA5MCwgMjUwLCA1MiwgMjQsIDkwLCAyNTAsIDUxLCAyNCwgOTAsIDIxOCwgMjIxLCAyNCwgOTAsIDIyNSwgMTMxLCAKKyAgICAyNCwgOTAsIDIyNSwgMTMwLCAxMCwgMTQsIDIzOCwgMzEsIDEwLCAxNCwgMjM4LCAzMCwgMTAsIDE0LCAyMzgsIDI5LCAxMCwgCisgICAgMTQsIDIzOCwgMjgsIDEwLCAxNCwgMjM4LCAyNywgMTAsIDE0LCAyMzgsIDI2LCAxMCwgMTQsIDIzOCwgMjUsIDEwLCAxNCwgCisgICAgMjM4LCAyNCwgMTAsIDE0LCAyMzgsIDIzLCAxMCwgMTQsIDIzOCwgMjIsIDEwLCAxNCwgMjM4LCAyMSwgMTAsIDE0LCAyMzgsIAorICAgIDIwLCAxMCwgMTQsIDIzOCwgMTksIDEwLCAxNCwgMjM4LCAxOCwgMTAsIDE0LCAyMzgsIDE3LCAxMCwgMTQsIDIzOCwgMTYsIAorICAgIDEwLCAxNCwgMjM4LCAxNSwgMTAsIDE0LCAyMzgsIDE0LCAxMCwgMTQsIDIzOCwgMTMsIDEwLCAxNCwgMjM4LCAxMiwgMTAsIAorICAgIDE0LCAyMzgsIDExLCAxMCwgMTQsIDIzOCwgMTAsIDEwLCAxNCwgMjM4LCA5LCAxMCwgMTQsIDIzOCwgOCwgMTAsIDE0LCAKKyAgICAyMzgsIDcsIDEwLCAxNCwgMjM4LCA2LCAxMCwgMTQsIDIzOCwgNSwgMTAsIDE0LCAyMzgsIDQsIDEwLCAxNCwgMjM4LCAzLCAKKyAgICAxMCwgMTQsIDIzOCwgMiwgMTAsIDE0LCAyMzgsIDEsIDEwLCAxNCwgMjM4LCAwLCAxMCwgMTQsIDIzNywgMjU1LCAxMCwgMTQsIAorICAgIDIzNywgMjU0LCAxMCwgMTQsIDIzNywgMjUzLCAxMCwgMTQsIDIzNywgMjUyLCAxMCwgMTQsIDIzNywgMjUxLCAxMCwgMTQsIAorICAgIDIzNywgMjUwLCAxMCwgMTQsIDIzNywgMjQ5LCAxMCwgMTQsIDIzNywgMjQ4LCAxMCwgMTQsIDIzNywgMjQ3LCAxMCwgMTQsIAorICAgIDIzNywgMjQ2LCAxMCwgMTQsIDIzNywgMjQ1LCAxMCwgMTQsIDIzNywgMjQ0LCAxMCwgMTQsIDIzNywgMjQzLCAxMCwgMTQsIAorICAgIDIzNywgMjQyLCAxMCwgMTQsIDIzNywgMjQxLCAxMCwgMTQsIDIzNywgMjQwLCAxMCwgMTQsIDIzNywgMjM5LCAxMCwgMTQsIAorICAgIDIzNywgMjM4LCAxMCwgMTQsIDIzNywgMjM3LCAxMCwgMTQsIDIzNywgMjM2LCAxMCwgMTQsIDIzNywgMjM1LCAxMCwgMTQsIAorICAgIDIzNywgMjM0LCAxMCwgMTQsIDIzNywgMjMzLCAxMCwgMTQsIDIzNywgMjMyLCAxMCwgMTQsIDIzNywgMjMxLCAxMCwgMTQsIAorICAgIDIzNywgMjMwLCAxMCwgMTQsIDIzNywgMjI5LCAxMCwgMTQsIDIzNywgMjI4LCAxMCwgMTQsIDIzNywgMjI3LCAxMCwgMTQsIAorICAgIDIzNywgMjI2LCAxMCwgMTQsIDIzNywgMjI1LCAxMCwgMTQsIDIzNywgMjI0LCAxMCwgMTQsIDIzNywgMjIzLCAxMCwgMTQsIAorICAgIDIzNywgMjIyLCAxMCwgMTQsIDIzNywgMjIxLCAxMCwgMTQsIDIzNywgMjIwLCAxMCwgMTQsIDIzNywgMjE5LCAxMCwgMTQsIAorICAgIDIzNywgMjE4LCAxMCwgMTQsIDIzNywgMjE3LCAxMCwgMTQsIDIzNywgMjE2LCAxMCwgMTQsIDIzNywgMjE1LCAxMCwgMTQsIAorICAgIDIzNywgMjE0LCAxMCwgMTQsIDIzNywgMjEzLCAxMCwgMTQsIDIzNywgMjEyLCAxMCwgMTQsIDIzNywgMjExLCAxMCwgMTQsIAorICAgIDIzNywgMjEwLCAxMCwgMTQsIDIzNywgMjA5LCAxMCwgMTQsIDIzNywgMjA4LCAxMCwgMTQsIDIzNywgMjA3LCAxMCwgMTQsIAorICAgIDIzNywgMjA2LCAxMCwgMTQsIDIzNywgMjA1LCAxMCwgMTQsIDIzNywgMjA0LCAxMCwgMTQsIDIzNywgMjAzLCAxMCwgMTQsIAorICAgIDIzNywgMjAyLCAxMCwgMTQsIDIzNywgMjAxLCAxMCwgMTQsIDIzNywgMjAwLCAxMCwgMTQsIDIzNywgMTk5LCAxMCwgMTQsIAorICAgIDIzNywgMTk4LCAxMCwgMTQsIDIzNywgMTk3LCAxMCwgMTQsIDIzNywgMTk2LCAxMCwgMTQsIDIzNywgMTk1LCAxMCwgMTQsIAorICAgIDIzNywgMTk0LCAxMCwgMTQsIDIzNywgMTkzLCAxMCwgMTQsIDIzNywgMTkyLCAxMCwgMTQsIDIzNywgMTkxLCAxMCwgMTQsIAorICAgIDIzNywgMTkwLCAxMCwgMTQsIDIzNywgMTg5LCAxMCwgMTQsIDIzNywgMTg4LCAxMCwgMTQsIDIzNywgMTg3LCAxMCwgMTQsIAorICAgIDIzNywgMTg2LCAxMCwgMTQsIDIzNywgMTg1LCAxMCwgMTQsIDIzNywgMTg0LCAxMCwgMTQsIDIzNywgMTgzLCAxMCwgMTQsIAorICAgIDIzNywgMTgyLCAxMCwgMTQsIDIzNywgMTgxLCAxMCwgMTQsIDIzNywgMTgwLCAxMCwgMTQsIDIzNywgMTc5LCAxMCwgMTQsIAorICAgIDIzNywgMTc4LCAxMCwgMTQsIDIzNywgMTc3LCAxMCwgMTQsIDIzNywgMTc2LCAxMCwgMTQsIDIzNywgMTc1LCAxMCwgMTQsIAorICAgIDIzNywgMTc0LCAxMCwgMTQsIDIzNywgMTczLCAxMCwgMTQsIDIzNywgMTcyLCAxMCwgMTQsIDIzNywgMTcxLCAxMCwgMTQsIAorICAgIDIzNywgMTcwLCAxMCwgMTQsIDIzNywgMTY5LCAxMCwgMTQsIDIzNywgMTY4LCAxMCwgMTQsIDIzNywgMTY3LCAxMCwgMTQsIAorICAgIDIzNywgMTY2LCAxMCwgMTQsIDIzNywgMTY1LCAxMCwgMTQsIDIzNywgMTY0LCAxMCwgMTQsIDIzNywgMTYzLCAxMCwgMTQsIAorICAgIDIzNywgMTYyLCAxMCwgMTQsIDIzNywgMTYxLCAxMCwgMTQsIDIzNywgMTYwLCAxMCwgMTQsIDIzNywgMTU5LCAxMCwgMTQsIAorICAgIDIzNywgMTU4LCAxMCwgMTQsIDIzNywgMTU3LCAxMCwgMTQsIDIzNywgMTU2LCAxMCwgMTQsIDIzNywgMTU1LCAxMCwgMTQsIAorICAgIDIzNywgMTU0LCAxMCwgMTQsIDIzNywgMTUzLCAxMCwgMTQsIDIzNywgMTUyLCAxMCwgMTQsIDIzNywgMTUxLCAxMCwgMTQsIAorICAgIDIzNywgMTUwLCAxMCwgMTQsIDIzNywgMTQ5LCAxMCwgMTQsIDIzNywgMTQ4LCAxMCwgMTQsIDIzNywgMTQ3LCAxMCwgMTQsIAorICAgIDIzNywgMTQ2LCAxMCwgMTQsIDIzNywgMTQ1LCAxMCwgMTQsIDIzNywgMTQ0LCAxMCwgMTQsIDIzNywgMTQzLCAxMCwgMTQsIAorICAgIDIzNywgMTQyLCAxMCwgMTQsIDIzNywgMTQxLCAxMCwgMTQsIDIzNywgMTQwLCAxMCwgMTQsIDIzNywgMTM5LCAxMCwgMTQsIAorICAgIDIzNywgMTM4LCAxMCwgMTQsIDIzNywgMTM3LCAxMCwgMTQsIDIzNywgMTM2LCAxMCwgMTQsIDIzNywgMTM1LCAxMCwgMTQsIAorICAgIDIzNywgMTM0LCAxMCwgMTQsIDIzNywgMTMzLCAxMCwgMTQsIDIzNywgMTMyLCAxMCwgMTQsIDIzNywgMTMxLCAxMCwgMTQsIAorICAgIDIzNywgMTMwLCAxMCwgMTQsIDIzNywgMTI5LCAxMCwgMTQsIDIzNywgMTI4LCAxMCwgMTQsIDIzNywgMTI3LCAxMCwgMTQsIAorICAgIDIzNywgMTI2LCAxMCwgMTQsIDIzNywgMTI1LCAxMCwgMTQsIDIzNywgMTI0LCAxMCwgMTQsIDIzNywgMTIzLCAxMCwgMTQsIAorICAgIDIzNywgMTIyLCAxMCwgMTQsIDIzNywgMTIxLCAxMCwgMTQsIDIzNywgMTIwLCAxMCwgMTQsIDIzNywgMTE5LCAxMCwgMTQsIAorICAgIDIzNywgMTE4LCAxMCwgMTQsIDIzNywgMTE3LCAxMCwgMTQsIDIzNywgMTE2LCAxMCwgMTQsIDIzNywgMTE1LCAxMCwgMTQsIAorICAgIDIzNywgMTE0LCAxMCwgMTQsIDIzNywgMTEzLCAxMCwgMTQsIDIzNywgMTEyLCAxMCwgMTQsIDIzNywgMTExLCAxMCwgMTQsIAorICAgIDIzNywgMTEwLCAxMCwgMTQsIDIzNywgMTA5LCAxMCwgMTQsIDIzNywgMTA4LCAxMCwgMTQsIDIzNywgMTA3LCAxMCwgMTQsIAorICAgIDIzNywgMTA2LCAxMCwgMTQsIDIzNywgMTA1LCAxMCwgMTQsIDIzNywgMTA0LCAxMCwgMTQsIDIzNywgMTAzLCAxMCwgMTQsIAorICAgIDIzNywgMTAyLCAxMCwgMTQsIDIzNywgMTAxLCAxMCwgMTQsIDIzNywgMTAwLCAxMCwgMTQsIDIzNywgOTksIDEwLCAxNCwgCisgICAgMjM3LCA5OCwgMTAsIDE0LCAyMzcsIDk3LCAxMCwgMTQsIDIzNywgOTYsIDEwLCAxNCwgMjM3LCA5NSwgMTAsIDE0LCAyMzcsIAorICAgIDk0LCAxMCwgMTQsIDIzNywgOTMsIDEwLCAxNCwgMjM3LCA5MiwgMTAsIDE0LCAyMzcsIDkxLCAxMCwgMTQsIDIzNywgOTAsIAorICAgIDEwLCAxNCwgMjM3LCA4OSwgMTAsIDE0LCAyMzcsIDg4LCAxMCwgMTQsIDIzNywgODcsIDEwLCAxNCwgMjM3LCA4NiwgMTAsIAorICAgIDE0LCAyMzcsIDg1LCAxMCwgMTQsIDIzNywgODQsIDEwLCAxNCwgMjM3LCA4MywgMTAsIDE0LCAyMzcsIDgyLCAxMCwgMTQsIAorICAgIDIzNywgODEsIDEwLCAxNCwgMjM3LCA4MCwgMTAsIDE0LCAyMzcsIDc5LCAxMCwgMTQsIDIzNywgNzgsIDEwLCAxNCwgMjM3LCAKKyAgICA3NywgMTAsIDE0LCAyMzcsIDc2LCAxMCwgMTQsIDIzNywgNzUsIDEwLCAxNCwgMjM3LCA3NCwgMTAsIDE0LCAyMzcsIDczLCAKKyAgICAxMCwgMTQsIDIzNywgNzIsIDEwLCAxNCwgMjM3LCA3MSwgMTAsIDE0LCAyMzcsIDcwLCAxMCwgMTQsIDIzNywgNjksIDEwLCAKKyAgICAxNCwgMjM3LCA2OCwgMTAsIDE0LCAyMzcsIDY3LCAxMCwgMTQsIDIzNywgNjYsIDEwLCAxNCwgMjM3LCA2NSwgMTAsIDE0LCAKKyAgICAyMzcsIDY0LCAxMCwgMTQsIDIzNywgNjMsIDEwLCAxNCwgMjM3LCA2MiwgMTAsIDE0LCAyMzcsIDYxLCAxMCwgMTQsIDIzNywgCisgICAgNjAsIDEwLCAxNCwgMjM3LCA1OSwgMTAsIDE0LCAyMzcsIDU4LCAxMCwgMTQsIDIzNywgNTcsIDEwLCAxNCwgMjM3LCA1NiwgCisgICAgMTAsIDE0LCAyMzcsIDU1LCAxMCwgMTQsIDIzNywgNTQsIDEwLCAxNCwgMjM3LCA1MywgMTAsIDE0LCAyMzcsIDUyLCAxMCwgCisgICAgMTQsIDIzNywgNTEsIDEwLCAxNCwgMjM3LCA1MCwgMTAsIDE0LCAyMzcsIDQ5LCAxMCwgMTQsIDIzNywgNDgsIDEwLCAxNCwgCisgICAgMjM3LCA0NywgMTAsIDE0LCAyMzcsIDQ2LCAxMCwgMTQsIDIzNywgNDUsIDEwLCAxNCwgMjM3LCA0NCwgMTAsIDE0LCAyMzcsIAorICAgIDQzLCAxMCwgMTQsIDIzNywgNDIsIDEwLCAxNCwgMjM3LCA0MSwgMTAsIDE0LCAyMzcsIDQwLCAxMCwgMTQsIDIzNywgMzksIAorICAgIDEwLCAxNCwgMjM3LCAzOCwgMTAsIDE0LCAyMzcsIDM3LCAxMCwgMTQsIDIzNywgMzYsIDEwLCAxNCwgMjM3LCAzNSwgMTAsIAorICAgIDE0LCAyMzcsIDM0LCAxMCwgMTQsIDIzNywgMzMsIDEwLCAxNCwgMjM3LCAzMiwgMTAsIDE0LCAyMzcsIDMxLCAxMCwgMTQsIAorICAgIDIzNywgMzAsIDEwLCAxNCwgMjM3LCAyOSwgMTAsIDE0LCAyMzcsIDI4LCAxMCwgMTQsIDIzNywgMjcsIDEwLCAxNCwgMjM3LCAKKyAgICAyNiwgMTAsIDE0LCAyMzcsIDI1LCAxMCwgMTQsIDIzNywgMjQsIDEwLCAxNCwgMjM3LCAyMywgMTAsIDE0LCAyMzcsIDIyLCAKKyAgICAxMCwgMTQsIDIzNywgMjEsIDEwLCAxNCwgMjM3LCAyMCwgMTAsIDE0LCAyMzcsIDE5LCAxMCwgMTQsIDIzNywgMTgsIDEwLCAKKyAgICAxNCwgMjM3LCAxNywgMTAsIDE0LCAyMzcsIDE2LCAxMCwgMTQsIDIzNywgMTUsIDEwLCAxNCwgMjM3LCAxNCwgMTAsIDE0LCAKKyAgICAyMzcsIDEzLCAxMCwgMTQsIDIzNywgMTIsIDEwLCAxNCwgMjM3LCAxMSwgMTAsIDE0LCAyMzcsIDEwLCAxMCwgMTQsIDIzNywgCisgICAgOSwgMTAsIDE0LCAyMzcsIDgsIDEwLCAxNCwgMjM3LCA3LCAxMCwgMTQsIDIzNywgNiwgMTAsIDE0LCAyMzcsIDUsIDEwLCAKKyAgICAxNCwgMjM3LCA0LCAxMCwgMTQsIDIzNywgMywgMTAsIDE0LCAyMzcsIDIsIDEwLCAxNCwgMjM3LCAxLCAxMCwgMTQsIDIzNywgCisgICAgMCwgMTAsIDE0LCAyMzYsIDI1NSwgMTAsIDE0LCAyMzYsIDI1NCwgMTAsIDE0LCAyMzYsIDI1MywgMTAsIDE0LCAyMzYsIAorICAgIDI1MiwgMTAsIDE0LCAyMzYsIDI1MSwgMTAsIDE0LCAyMzYsIDI1MCwgMTAsIDE0LCAyMzYsIDI0OSwgMTAsIDE0LCAyMzYsIAorICAgIDI0OCwgMTAsIDE0LCAyMzYsIDI0NywgMTAsIDE0LCAyMzYsIDI0NiwgMTAsIDE0LCAyMzYsIDI0NSwgMTAsIDE0LCAyMzYsIAorICAgIDI0NCwgMTAsIDE0LCAyMzYsIDI0MywgMTAsIDE0LCAyMzYsIDI0MiwgMTAsIDE0LCAyMzYsIDI0MSwgMTAsIDE0LCAyMzYsIAorICAgIDI0MCwgMTAsIDE0LCAyMzYsIDIzOSwgMTAsIDE0LCAyMzYsIDIzOCwgMTAsIDE0LCAyMzYsIDIzNywgMTAsIDE0LCAyMzYsIAorICAgIDIzNiwgMTAsIDE0LCAyMzYsIDIzNSwgMTAsIDE0LCAyMzYsIDIzNCwgMTAsIDE0LCAyMzYsIDIzMywgMTAsIDE0LCAyMzYsIAorICAgIDIzMiwgMTAsIDE0LCAyMzYsIDIzMSwgMTAsIDE0LCAyMzYsIDIzMCwgMTAsIDE0LCAyMzYsIDIyOSwgMTAsIDE0LCAyMzYsIAorICAgIDIyOCwgMTAsIDE0LCAyMzYsIDIyNywgMTAsIDE0LCAyMzYsIDIyNiwgMTAsIDE0LCAyMzYsIDIyNSwgMTAsIDE0LCAyMzYsIAorICAgIDIyNCwgMTAsIDE0LCAyMzYsIDIyMywgMTAsIDE0LCAyMzYsIDIyMiwgMTAsIDE0LCAyMzYsIDIyMSwgMTAsIDE0LCAyMzYsIAorICAgIDIyMCwgMTAsIDE0LCAyMzYsIDIxOSwgMTAsIDE0LCAyMzYsIDIxOCwgMTAsIDE0LCAyMzYsIDIxNywgMTAsIDE0LCAyMzYsIAorICAgIDIxNiwgMTAsIDE0LCAyMzYsIDIxNSwgMTAsIDE0LCAyMzYsIDIxNCwgMTAsIDE0LCAyMzYsIDIxMywgMTAsIDE0LCAyMzYsIAorICAgIDIxMiwgMTAsIDE0LCAyMzYsIDIxMSwgMTAsIDE0LCAyMzYsIDIxMCwgMTAsIDE0LCAyMzYsIDIwOSwgMTAsIDE0LCAyMzYsIAorICAgIDIwOCwgMTAsIDE0LCAyMzYsIDIwNywgMTAsIDE0LCAyMzYsIDIwNiwgMTAsIDE0LCAyMzYsIDIwNSwgMTAsIDE0LCAyMzYsIAorICAgIDIwNCwgMTAsIDE0LCAyMzYsIDIwMywgMTAsIDE0LCAyMzYsIDIwMiwgMTAsIDE0LCAyMzYsIDIwMSwgMTAsIDE0LCAyMzYsIAorICAgIDIwMCwgMTAsIDE0LCAyMzYsIDE5OSwgMTAsIDE0LCAyMzYsIDE5OCwgMTAsIDE0LCAyMzYsIDE5NywgMTAsIDE0LCAyMzYsIAorICAgIDE5NiwgMTAsIDE0LCAyMzYsIDE5NSwgMTAsIDE0LCAyMzYsIDE5NCwgMTAsIDE0LCAyMzYsIDE5MywgMTAsIDE0LCAyMzYsIAorICAgIDE5MiwgMTAsIDE0LCAyMzYsIDE5MSwgMTAsIDE0LCAyMzYsIDE5MCwgMTAsIDE0LCAyMzYsIDE4OSwgMTAsIDE0LCAyMzYsIAorICAgIDE4OCwgMTAsIDE0LCAyMzYsIDE4NywgMTAsIDE0LCAyMzYsIDE4NiwgMTAsIDE0LCAyMzYsIDE4NSwgMTAsIDE0LCAyMzYsIAorICAgIDE4NCwgMTAsIDE0LCAyMzYsIDE4MywgMTAsIDE0LCAyMzYsIDE4MiwgMTAsIDE0LCAyMzYsIDE4MSwgMTAsIDE0LCAyMzYsIAorICAgIDE4MCwgMTAsIDE0LCAyMzYsIDE3OSwgMTAsIDE0LCAyMzYsIDE3OCwgMTAsIDE0LCAyMzYsIDE3NywgMTAsIDE0LCAyMzYsIAorICAgIDE3NiwgMTAsIDE0LCAyMzYsIDE3NSwgMTAsIDE0LCAyMzYsIDE3NCwgMTAsIDE0LCAyMzYsIDE3MywgMTAsIDE0LCAyMzYsIAorICAgIDE3MiwgMTAsIDE0LCAyMzYsIDE3MSwgMTAsIDE0LCAyMzYsIDE3MCwgMTAsIDE0LCAyMzYsIDE2OSwgMTAsIDE0LCAyMzYsIAorICAgIDE2OCwgMTAsIDE0LCAyMzYsIDE2NywgMTAsIDE0LCAyMzYsIDE2NiwgMTAsIDE0LCAyMzYsIDE2NSwgMTAsIDE0LCAyMzYsIAorICAgIDE2NCwgMTAsIDE0LCAyMzYsIDE2MywgMTAsIDE0LCAyMzYsIDE2MiwgMTAsIDE0LCAyMzYsIDE2MSwgMTAsIDE0LCAyMzYsIAorICAgIDE2MCwgMTAsIDE0LCAyMzYsIDE1OSwgMTAsIDE0LCAyMzYsIDE1OCwgMTAsIDE0LCAyMzYsIDE1NywgMTAsIDE0LCAyMzYsIAorICAgIDE1NiwgMTAsIDE0LCAyMzYsIDE1NSwgMTAsIDE0LCAyMzYsIDE1NCwgMTAsIDE0LCAyMzYsIDE1MywgMTAsIDE0LCAyMzYsIAorICAgIDE1MiwgMTAsIDE0LCAyMzYsIDE1MSwgMTAsIDE0LCAyMzYsIDE1MCwgMTAsIDE0LCAyMzYsIDE0OSwgMTAsIDE0LCAyMzYsIAorICAgIDE0OCwgMTAsIDE0LCAyMzYsIDE0NywgMTAsIDE0LCAyMzYsIDE0NiwgMTAsIDE0LCAyMzYsIDE0NSwgMTAsIDE0LCAyMzYsIAorICAgIDE0NCwgMTAsIDE0LCAyMzYsIDE0MywgMTAsIDE0LCAyMzYsIDE0MiwgMTAsIDE0LCAyMzYsIDE0MSwgMTAsIDE0LCAyMzYsIAorICAgIDE0MCwgMTAsIDE0LCAyMzYsIDEzOSwgMTAsIDE0LCAyMzYsIDEzOCwgMTAsIDE0LCAyMzYsIDEzNywgMTAsIDE0LCAyMzYsIAorICAgIDEzNiwgMTAsIDE0LCAyMzYsIDEzNSwgMTAsIDE0LCAyMzYsIDEzNCwgMTAsIDE0LCAyMzYsIDEzMywgMTAsIDE0LCAyMzYsIAorICAgIDEzMiwgMTAsIDE0LCAyMzYsIDEzMSwgMTAsIDE0LCAyMzYsIDEzMCwgMTAsIDE0LCAyMzYsIDEyOSwgMTAsIDE0LCAyMzYsIAorICAgIDEyOCwgMTAsIDE0LCAyMzYsIDEyNywgMTAsIDE0LCAyMzYsIDEyNiwgMTAsIDE0LCAyMzYsIDEyNSwgMTAsIDE0LCAyMzYsIAorICAgIDEyNCwgMTAsIDE0LCAyMzYsIDEyMywgMTAsIDE0LCAyMzYsIDEyMiwgMTAsIDE0LCAyMzYsIDEyMSwgMTAsIDE0LCAyMzYsIAorICAgIDEyMCwgMTAsIDE0LCAyMzYsIDExOSwgMTAsIDE0LCAyMzYsIDExOCwgMTAsIDE0LCAyMzYsIDExNywgMTAsIDE0LCAyMzYsIAorICAgIDExNiwgMTAsIDE0LCAyMzYsIDExNSwgMTAsIDE0LCAyMzYsIDExNCwgMTAsIDE0LCAyMzYsIDExMywgMTAsIDE0LCAyMzYsIAorICAgIDExMiwgMTAsIDE0LCAyMzYsIDExMSwgMTAsIDE0LCAyMzYsIDExMCwgMTAsIDE0LCAyMzYsIDEwOSwgMTAsIDE0LCAyMzYsIAorICAgIDEwOCwgMTAsIDE0LCAyMzYsIDEwNywgMTAsIDE0LCAyMzYsIDEwNiwgMTAsIDE0LCAyMzYsIDEwNSwgMTAsIDE0LCAyMzYsIAorICAgIDEwNCwgMTAsIDE0LCAyMzYsIDEwMywgMTAsIDE0LCAyMzYsIDEwMiwgMTAsIDE0LCAyMzYsIDEwMSwgMTAsIDE0LCAyMzYsIAorICAgIDEwMCwgMTAsIDE0LCAyMzYsIDk5LCAxMCwgMTQsIDIzNiwgOTgsIDEwLCAxNCwgMjM2LCA5NywgMTAsIDE0LCAyMzYsIDk2LCAKKyAgICAxMCwgMTQsIDIzNiwgOTUsIDEwLCAxNCwgMjM2LCA5NCwgMTAsIDE0LCAyMzYsIDkzLCAxMCwgMTQsIDIzNiwgOTIsIDEwLCAKKyAgICAxNCwgMjM2LCA5MSwgMTAsIDE0LCAyMzYsIDkwLCAxMCwgMTQsIDIzNiwgODksIDEwLCAxNCwgMjM2LCA4OCwgMTAsIDE0LCAKKyAgICAyMzYsIDg3LCAxMCwgMTQsIDIzNiwgODYsIDEwLCAxNCwgMjM2LCA4NSwgMTAsIDE0LCAyMzYsIDg0LCAxMCwgMTQsIDIzNiwgCisgICAgODMsIDEwLCAxNCwgMjM2LCA4MiwgMTAsIDE0LCAyMzYsIDgxLCAxMCwgMTQsIDIzNiwgODAsIDEwLCAxNCwgMjM2LCA3OSwgCisgICAgMTAsIDE0LCAyMzYsIDc4LCAxMCwgMTQsIDIzNiwgNzcsIDEwLCAxNCwgMjM2LCA3NiwgMTAsIDE0LCAyMzYsIDc1LCAxMCwgCisgICAgMTQsIDIzNiwgNzQsIDEwLCAxNCwgMjM2LCA3MywgMTAsIDE0LCAyMzYsIDcyLCA3LCA0LCAyNywgMjQ0LCAxMzMsIDcsIDQsIAorICAgIDI3LCAyNDQsIDEyOSwgNywgNCwgMjcsIDI0NCwgODQsIDcsIDQsIDI3LCAyNDQsIDEzMiwgNywgNCwgMjcsIDI0NCwgMTMxLCAKKyAgICA3LCA0LCAyNywgMjAwLCAyMjIsIDk0LCAyMTcsIDE1MywgNywgNCwgMjcsIDIxOCwgMTcwLCAxNTAsIDQsIDI3LCAyMzEsIAorICAgIDY0LCAyMjgsIDQ0LCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyNDUsIDIyMSwgMTUwLCA0LCAyNywgMjMxLCA2NCwgMjM1LCAKKyAgICAyMzQsIDE1MCwgNCwgMjcsIDIxMywgMTgwLCAyMjgsIDQ0LCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyMTEsIDE2MCwgOTQsIDEsIAorICAgIDIxMCwgMjM0LCAyLCAyNDEsIDE2NSwgOTQsIDIyNSwgMTQsIDIzNSwgNTYsIDIxNCwgMTEsIDk0LCAyNywgMjExLCA2LCAKKyAgICAyMTAsIDIzNCwgMjEwLCAyMzQsIDIyNSwgMjQzLCA5NCwgMSwgMjU0LCAxNDcsIDI1MywgMTcwLCA5NCwgMSwgMjExLCAyNDcsIAorICAgIDI1NCwgMTc5LCA5NCwgMSwgMjExLCAyNDcsIDI0OCwgMTk3LCA5NCwgMSwgMjExLCAyNDcsIDI0MSwgMjQ1LCA5NCwgMSwgCisgICAgMjExLCAyNDcsIDIzNSwgMCwgOTQsIDEsIDIxMSwgMjQ3LCAyMzMsIDEwMCwgOTQsIDEsIDIxMSwgMjQ3LCA0MCwgMjMxLCAKKyAgICA3MCwgOTQsIDEsIDIxMSwgMjQ3LCAyMjMsIDcwLCA5NCwgMSwgMjExLCAyNDcsIDIxNywgMzksIDk0LCAxLCAyNTQsIDE0NywgCisgICAgOTYsIDUwLCA5NCwgMSwgMjIwLCAyMywgMiwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAxLCAyMjAsIDIzLCAyLCAyMTksIAorICAgIDE2MSwgMjQ3LCAxMjgsIDk0LCAxLCAyMjAsIDIzLCAyLCAyNDgsIDIxNiwgMjIsIDIyMCwgMjMsIDI0NywgMTI4LCA5NCwgMSwgCisgICAgMjIwLCAyMywgMiwgMjQ4LCAyMTYsIDIyLCAyMTksIDE2MSwgMjQ3LCAxMjgsIDk0LCAxLCAxMDksIDIsIDIyNSwgMjQzLCAKKyAgICA5NCwgMSwgMTA5LCAyLCAyMjQsIDc5LCA5NCwgMSwgMTA5LCAyLCAyMzEsIDE3NiwgOTQsIDEsIDI1MiwgMzcsIDIsIDI0OCwgCisgICAgMjE1LCA5NCwgMSwgMjQyLCAyMDksIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjQ4LCAxOTgsIDIsIDI0OCwgMjE1LCA5NCwgMSwgCisgICAgMjQxLCAyNDYsIDIsIDIzMSwgMTc2LCA5NCwgMSwgMjE0LCA0LCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxMCwgOTgsIDIsIAorICAgIDI0OCwgMjE1LCA5NCwgMSwgMjE2LCAyMzIsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjEwLCAyMzQsIDIsIDI0OCwgMjE1LCA5NCwgCisgICAgMSwgNDAsIDIzNSwgMSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzUsIDEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjMzLCAxMDEsIAorICAgIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjMxLCA3MSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMjcsIDE5OSwgMiwgMjQ4LCAyMTUsIAorICAgIDk0LCAxLCAyMjEsIDI1MiwgMiwgMjQ4LCAyMTUsIDk0LCAxLCA0MCwgMjI1LCAyMjUsIDIsIDI0OCwgMjE1LCA5NCwgMSwgCisgICAgMjI1LCAyMjUsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjE1LCAxODEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjI0LCA0MywgMiwgCisgICAgMjQ4LCAyMTUsIDk0LCAxLCAyMjMsIDcxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIyMCwgMjMsIDIsIDI0OCwgMjE1LCA5NCwgCisgICAgMSwgMjE3LCA0MCwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTQsIDQsIDIsIDI0MSwgNjgsIDk0LCAxLCAyNTIsIDM3LCAyLCAKKyAgICAyMjMsIDE3MiwgOTQsIDEsIDIzNSwgMSwgMiwgMjIzLCAxNzIsIDk0LCAxLCAyMjUsIDIyNSwgMiwgMjIzLCAxNzIsIDk0LCAKKyAgICAyNywgMTA5LCAyMzMsIDEwMCwgOSwgMSwgMTA5LCAyMTIsIDQ3LCA1MywgMTcsIDksIDEsIDEwOSwgMjEyLCA0NywgNDAsIAorICAgIDE3LCA5LCAxLCAyNTIsIDczLCA1MywgMTcsIDksIDEsIDI1MiwgNzMsIDQwLCAxNywgOSwgMSwgMjUyLCA3MywgNjUsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDczLCAxNDcsIDE3LCA5LCAxLCAyMjUsIDIwOSwgNTMsIDE3LCA5LCAxLCAyMjUsIDIwOSwgNDAsIDE3LCAKKyAgICA5LCAxLCAyMjUsIDIwOSwgNjUsIDE3LCA5LCAxLCAyMjUsIDIwOSwgMTQ3LCAxNywgOSwgMSwgMjUyLCA2MSwgNTMsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDYxLCA0MCwgMTcsIDksIDEsIDI1MiwgNjEsIDY1LCAxNywgOSwgMSwgMjUyLCA2MSwgMTQ3LCAxNywgOSwgCisgICAgMSwgMjE1LCAxNDgsIDUzLCAxNywgOSwgMSwgMjE1LCAxNDgsIDQwLCAxNywgOSwgMSwgMjE1LCAxNDgsIDY1LCAxNywgOSwgCisgICAgMSwgMjE1LCAxNDgsIDE0NywgMTcsIDksIDEsIDIxNywgNywgNTMsIDE3LCA5LCAxLCAyMTcsIDcsIDQwLCAxNywgOSwgMSwgCisgICAgMjE3LCA3LCA2NSwgMTcsIDksIDEsIDIxNywgNywgMTQ3LCAxNywgOSwgMSwgMjE1LCAxNTAsIDUzLCAxNywgOSwgMSwgMjE1LCAKKyAgICAxNTAsIDQwLCAxNywgOSwgMSwgMjE1LCAxNTAsIDY1LCAxNywgOSwgMSwgMjE1LCAxNTAsIDE0NywgMTcsIDksIDEsIDIxMywgCisgICAgMjQ5LCA1MywgMTcsIDksIDEsIDIxMywgMjQ5LCA0MCwgMTcsIDksIDEsIDIxMywgMjQ5LCA2NSwgMTcsIDksIDEsIDIxMywgCisgICAgMjQ5LCAxNDcsIDE3LCA5LCAxLCAyMjUsIDIwNywgNTMsIDE3LCA5LCAxLCAyMjUsIDIwNywgNDAsIDE3LCA5LCAxLCAyMjUsIAorICAgIDIwNywgNjUsIDE3LCA5LCAxLCAyMjUsIDIwNywgMTQ3LCAxNywgOSwgMSwgMjQ2LCA1MiwgNTMsIDE3LCA5LCAxLCAyNDYsIAorICAgIDUyLCA0MCwgMTcsIDksIDEsIDI0NiwgNTIsIDY1LCAxNywgOSwgMSwgMjQ2LCA1MiwgMTQ3LCAxNywgOSwgMSwgMjI3LCAKKyAgICAxNTgsIDUzLCAxNywgOSwgMSwgMjI3LCAxNTgsIDQwLCAxNywgOSwgMSwgMjI3LCAxNTgsIDY1LCAxNywgOSwgMSwgMjI3LCAKKyAgICAxNTgsIDE0NywgMTcsIDksIDEsIDIxNywgMjgsIDUzLCAxNywgOSwgMSwgMjE3LCAyOCwgNDAsIDE3LCA5LCAxLCAyMTcsIAorICAgIDI4LCA2NSwgMTcsIDksIDEsIDIxNywgMjgsIDE0NywgMTcsIDksIDEsIDIxNywgMjYsIDUzLCAxNywgOSwgMSwgMjE3LCAyNiwgCisgICAgNDAsIDE3LCA5LCAxLCAyMTcsIDI2LCA2NSwgMTcsIDksIDEsIDIxNywgMjYsIDE0NywgMTcsIDksIDEsIDI0OCwgMTQxLCAKKyAgICA1MywgMTcsIDksIDEsIDI0OCwgMTQxLCA0MCwgMTcsIDksIDEsIDI0OCwgMjEwLCA1MywgMTcsIDksIDEsIDI0OCwgMjEwLCAKKyAgICA0MCwgMTcsIDksIDEsIDI0NiwgNzksIDUzLCAxNywgOSwgMSwgMjQ2LCA3OSwgNDAsIDE3LCA5LCAxLCAyNDgsIDEzOSwgNTMsIAorICAgIDE3LCA5LCAxLCAyNDgsIDEzOSwgNDAsIDE3LCA5LCAxLCAyMzUsIDEyNywgNTMsIDE3LCA5LCAxLCAyMzUsIDEyNywgNDAsIAorICAgIDE3LCA5LCAxLCAyMjIsIDE3NCwgNTMsIDE3LCA5LCAxLCAyMjIsIDE3NCwgNDAsIDE3LCA5LCAxLCAyMzQsIDE4MSwgNTMsIAorICAgIDE3LCA5LCAxLCAyMzQsIDE4MSwgNDAsIDE3LCA5LCAxLCAyMzQsIDE4MSwgNjUsIDE3LCA5LCAxLCAyMzQsIDE4MSwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQzLCAxMzAsIDUzLCAxNywgOSwgMSwgMjQzLCAxMzAsIDQwLCAxNywgOSwgMSwgMjQzLCAxMzAsIDY1LCAKKyAgICAxNywgOSwgMSwgMjQzLCAxMzAsIDE0NywgMTcsIDksIDEsIDI0MiwgMTA5LCA1MywgMTcsIDksIDEsIDI0MiwgMTA5LCA0MCwgCisgICAgMTcsIDksIDEsIDI0MiwgMTA5LCA2NSwgMTcsIDksIDEsIDI0MiwgMTA5LCAxNDcsIDE3LCA5LCAxLCAyMjksIDgsIDUzLCAKKyAgICAxNywgOSwgMSwgMjI5LCA4LCA0MCwgMTcsIDksIDEsIDIyOSwgOCwgNjUsIDE3LCA5LCAxLCAyMjksIDgsIDE0NywgMTcsIDksIAorICAgIDEsIDIyOCwgNjgsIDI0MiwgMjI2LCA1MywgMTcsIDksIDEsIDIyOCwgNjgsIDI0MiwgMjI2LCA0MCwgMTcsIDksIDEsIDIyMiwgCisgICAgMjE3LCA1MywgMTcsIDksIDEsIDIyMiwgMjE3LCA0MCwgMTcsIDksIDEsIDIyMiwgMjE3LCA2NSwgMTcsIDksIDEsIDIyMiwgCisgICAgMjE3LCAxNDcsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMiwgNzcsIDcyLCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgCisgICAgNzIsIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgCisgICAgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDY1LCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAxNDcsIAorICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCA0MCwgMTcsIAorICAgIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgNjUsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDE0NywgMTcsIDksIAorICAgIDEsIDc3LCAyNTIsIDE0MSwgNTMsIDE3LCA5LCAxLCA3NywgMjUyLCAxNDEsIDQwLCAxNywgOSwgMSwgNzcsIDI1MiwgMTQxLCAKKyAgICAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxNiwgNTksIAorICAgIDQ4LCA5LCAxNiwgNTksIDUxLCA5LCAxNiwgMTEzLCAxNzAsIDQ4LCA5LCAxNiwgMTEzLCAxNzAsIDUxLCA5LCAxNiwgMTM0LCAKKyAgICAxNzAsIDQ4LCA5LCAxNiwgMTM0LCAxNzAsIDUxLCA5LCAxNiwgMTM0LCAxNzAsIDIyNSwgMTAsIDI0NiwgMTEyLCA0OCwgOSwgCisgICAgMTYsIDEzNCwgMTcwLCAyMjUsIDEwLCAyNDYsIDExMiwgNTEsIDksIDE2LCAyNDQsIDE5LCAxNzAsIDQ4LCA5LCAxNiwgMjQ0LCAKKyAgICAxOSwgMTcwLCA1MSwgOSwgMTYsIDUyLCA2NywgMjUyLCAxNDksIDUxLCA5LCAxNiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgCisgICAgOSwgMTYsIDExMywgMTcwLCAyMTMsIDE4OSwgNTEsIDksIDE2LCAyMjIsIDIzNiwgOSwgMTYsIDQsIDIxNywgODIsIDQ4LCA5LCAKKyAgICAxNiwgNCwgMjE3LCA4MiwgNTEsIDksIDEsIDIyOSwgODUsIDUzLCAxNywgOSwgMSwgMjI5LCA4NSwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjksIDg1LCA2NSwgMTcsIDksIDEsIDIyOSwgODUsIDE0NywgMTcsIDksIDEsIDEwNCwgNTMsIDE3LCA5LCAxLCAxMDQsIAorICAgIDQwLCAxNywgOSwgMSwgMjI2LCAyMzksIDUzLCAxNywgOSwgMSwgMjI2LCAyMzksIDQwLCAxNywgOSwgMSwgMjEwLCAyMTMsIAorICAgIDUzLCAxNywgOSwgMSwgMjEwLCAyMTMsIDQwLCAxNywgOSwgMSwgMTA0LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDIxNCwgCisgICAgMCwgNTMsIDE3LCA5LCAxLCAyMTQsIDAsIDQwLCAxNywgOSwgMSwgMjM0LCA3OSwgMjI2LCAyMzksIDUzLCAxNywgOSwgMSwgCisgICAgMjM0LCA3OSwgMjI2LCAyMzksIDQwLCAxNywgOSwgMSwgMjM0LCA3OSwgMjEwLCAyMTMsIDUzLCAxNywgOSwgMSwgMjM0LCAKKyAgICA3OSwgMjEwLCAyMTMsIDQwLCAxNywgOSwgMSwgMTYwLCA1MywgMTcsIDksIDEsIDE2MCwgNDAsIDE3LCA5LCAxLCAxNjAsIAorICAgIDY1LCAxNywgOSwgMSwgMTYwLCAxNDcsIDE3LCA5LCAxLCAyMTQsIDIwNywgMjM0LCAxOTIsIDIzNCwgNzksIDEwOSwgMjMxLCAKKyAgICAxOTgsIDY1LCAxNywgOSwgMSwgMjE0LCAyMDcsIDIzNCwgMTkyLCAyMzQsIDc5LCAxMDksIDIzMSwgMTk4LCAxNDcsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgNDAsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI1NCwgMjUzLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgCisgICAgMjU0LCAyNTMsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTIsIDMxLCA1MywgMTcsIDksIDI3LCA3NywgCisgICAgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwNCwgNTMsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwNCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgMjM5LCAKKyAgICA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjI2LCAyMzksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAyMTAsIDIxMywgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMCwgMjEzLCA0MCwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA0MCwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTYwLCA2NSwgMTcsIDksIDI3LCAyMTQsIDIwNywgMjM0LCA3OSwgNzcsIAorICAgIDIsIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIxNCwgMjA3LCAyMzQsIDc5LCA3NywgMiwgCisgICAgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE0LCAyMDcsIDIzNCwgNzksIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA2NSwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgNTMsIDE3LCA5LCAxLCAyNDQsIDE3NiwgCisgICAgNzcsIDQwLCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCA2NSwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgMTQ3LCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMjIsIDUzLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgCisgICAgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIzNCwgCisgICAgMTM2LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTA5LCAyMzEsIAorICAgIDE5OCwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCA1MywgCisgICAgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA5LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIAorICAgIDI3LCAyMTcsIDksIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMTYsIAorICAgIDE5NCwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMTYsIDE5NCwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAKKyAgICA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMTIyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjM0LCAxMzYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjM0LCAKKyAgICAxMzYsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgCisgICAgMTIyLCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAKKyAgICA2NiwgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCA2NiwgNTMsIAorICAgIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEyMiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIAorICAgIDIxNywgODIsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxMCwgMTEyLCAKKyAgICAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAKKyAgICA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDUzLCAxNywgCisgICAgOSwgMjcsIDI0NCwgMTUxLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIAorICAgIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDQsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDc3LCA1MywgMTcsIDksIAorICAgIDI3LCAyMjQsIDg1LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjQsIAorICAgIDg1LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjM1LCAKKyAgICAxLCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEyMiwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIDEwOSwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCA1MywgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIAorICAgIDEyMiwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgNjYsIDUzLCAxNywgOSwgCisgICAgMjcsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyOCwgCisgICAgNjgsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAKKyAgICAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgMTUxLCAKKyAgICA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCAxMDksIDIzMSwgCisgICAgMTk4LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxNTEsIDUzLCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIAorICAgIDY2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDc3LCA1MywgCisgICAgMTcsIDksIDI3LCAyMTYsIDIwNCwgMiwgMjE4LCAyNCwgMTA5LCA1MywgMTcsIDksIDI3LCAyMjMsIDk5LCAyLCAyMTgsIDI0LCAKKyAgICAxMDksIDUzLCAxNywgOSwgMjcsIDEwOSwgMjMxLCAxOTgsIDIsIDIxOCwgMjQsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ4LCAxOTEsIDUzLCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDIzNCwgMjEwLCA1MywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyNDQsIDE3NCwgNTMsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjQ4LCAxOTMsIDUzLCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDIzNCwgMjEyLCA1MywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyMTgsIDI0LCAxMDksIDUzLCAxNywgOSwgMjcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEwLCAxMDksIAorICAgIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDIyOCwgNjgsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIAorICAgIDI1MiwgNjMsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjUyLCAKKyAgICA2MywgMiwgMjI4LCA2OCwgNDAsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjUyLCA2MywgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMjgsIAorICAgIDY4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjEwLCAKKyAgICAxMDksIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDIyOCwgNjgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIDEwOSwgCisgICAgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDQwLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNzcsIDQwLCAxNywgCisgICAgOSwgMjcsIDY2LCAyLCAxMDksIDQwLCAxNywgOSwgMjcsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgCisgICAgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjEwLCAxMDksIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIAorICAgIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMDksIAorICAgIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTA5LCAyMzEsIDE5OCwgMiwgCisgICAgMjE4LCAyNCwgMTA5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDIxMCwgCisgICAgMTA5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgCisgICAgMTgyLCA3MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxNTEsIAorICAgIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMTcsIAorICAgIDksIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIAorICAgIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDE1MSwgMiwgMTIyLCA2NSwgCisgICAgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMTIyLCAyLCAKKyAgICA2NiwgNjUsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTIyLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjIyLCAyOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjIyLCAKKyAgICAyOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAKKyAgICAxMjIsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIxMCwgMTEyLCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyNDIsIDI1MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI0NCwgCisgICAgMTUxLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAKKyAgICAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDE1MSwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjM1LCAxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIzNSwgMSwgMiwgMjMzLCAxMDksIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzMywgCisgICAgMTA5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxMjIsIDY1LCAxNywgCisgICAgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAKKyAgICAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjM0LCAKKyAgICAxMzYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyNDEsIDIyNiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCA2NSwgMTcsIAorICAgIDksIDI3LCAyNDEsIDIyNiwgMiwgMjE4LCAyNCwgMTA5LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTUxLCA2NSwgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgCisgICAgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAKKyAgICA2NiwgMTQ3LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzMsIAorICAgIDEwOSwgMTQ3LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDE0NywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDE0NywgCisgICAgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgNzcsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ0LCAxNzQsIDE0NywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyNDgsIDE5MywgMTQ3LCAxNywgOSwgMjcsIAorICAgIDIyMCwgOTYsIDIsIDIzNCwgMjEyLCAxNDcsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjE3LCA4MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIAorICAgIDksIDI3LCAyNTQsIDIwNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgCisgICAgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAKKyAgICAxNywgOSwgMjcsIDEyMiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMTUxLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDIzNCwgMTM2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjIyLCAyOSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDgsIDIyNSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgCisgICAgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgCisgICAgNjYsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIyMywgOTksIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMjMsIAorICAgIDk5LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMjMsIDk5LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjIzLCAKKyAgICA5OSwgNTMsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDIsIAorICAgIDI1MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjEsIDE2OSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMCwgNjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDEyMiwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA3NywgCisgICAgNDAsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMjMsIDk5LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjIzLCA5OSwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjIxLCAxNjksIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA4MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDE0NywgMTcsIDksIDI3LCAyMjEsIAorICAgIDE2OSwgMiwgMTIyLCAxNDcsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA2MiwgMiwgMTUxLCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgCisgICAgMjM0LCAxMzYsIDE0NywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIxMCwgMTEyLCAyLCAKKyAgICA2NiwgMTQ3LCAxNywgOSwgMjcsIDEwOSwgMiwgMjQ0LCAxNzIsIDQwLCAxNywgOSwgMjcsIDEwOSwgMiwgMjQ0LCAxNzIsIAorICAgIDUzLCAxNywgMjI2LCAxNTAsIDQzLCAyMjYsIDcsIDIyNiwgMTUwLCA0NCwgMjI2LCA3LCA5LCAyNywgMjE3LCA5LCAyLCAKKyAgICAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAorICAgIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgCisgICAgOSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgCisgICAgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAorICAgIDksIDI3LCAxMjIsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCAKKyAgICAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMSwgMTY5LCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgNjYsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEyMiwgMiwgCisgICAgMTIyLCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMjIsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgCisgICAgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAKKyAgICAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIAorICAgIDYyLCAyLCA2NiwgMiwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgMiwgNjYsIAorICAgIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0OCwgCisgICAgMjI1LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIAorICAgIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjU0LCAKKyAgICAyMDYsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIDY2LCA0MCwgCisgICAgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgNjYsIDIsIAorICAgIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgMiwgNjYsIDQwLCAxNywgOSwgCisgICAgMjcsIDI0NCwgMTUxLCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCAxMjIsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgCisgICAgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAyLCAxNTEsIDY1LCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCAyLCAKKyAgICA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIAorICAgIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA2NiwgCisgICAgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCAKKyAgICAyLCA2NiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIAorICAgIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDEsIAorICAgIDIyNiwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjI4LCA2OCwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyOCwgCisgICAgNjgsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDI1MiwgNjMsIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDIsIDc3LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAKKyAgICAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCAKKyAgICAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjIyLCAKKyAgICAyOSwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgMjQ4LCAyMjUsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIAorICAgIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIAorICAgIDY2LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgMjI4LCA2OCwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgMiwgNzcsIDQwLCAKKyAgICAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEyMiwgCisgICAgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgCisgICAgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDE1MSwgCisgICAgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjUyLCAKKyAgICA2MywgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDI1NCwgMjA2LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgNzcsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMiwgNiwgMjE0LCAxMjgsIDI1MywgMjQ2LCAyMzQsIDEwLCAyMTgsIDEzMiwgNSwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjI0LCA4MSwgMjE0LCAxMjgsIDI1MywgMjQ2LCAyMzQsIDEwLCAyMTgsIDEzMiwgNSwgNTMsIDE3LCA5LCAyNywgCisgICAgMjU0LCAxNjIsIDUzLCAxNywgOSwgMjcsIDI1NCwgMTkyLCA1MywgMTcsIDksIDI3LCAyMzAsIDE1OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjIyLCA3LCA1MywgMTcsIDksIDI3LCAyMjMsIDE0NiwgNTMsIDE3LCA5LCAyNywgMjU0LCAxODEsIDUzLCAxNywgOSwgCisgICAgMjcsIDIxMiwgNDksIDUzLCAxNywgOSwgMjcsIDIyMiwgNiwgNTMsIDE3LCA5LCAyNywgMjIyLCA1LCAyNTQsIDE4MSwgMjEyLCAKKyAgICA0OCwgOSwgMjcsIDIzNSwgMTQwLCAyMjMsIDM3LCA1MCwgOSwgMjcsIDI1MSwgMjM4LCAyNTQsIDQ3LCAyNTQsIDQ4LCA0NSwgCisgICAgMjIxLCAxNTgsIDQ1LCAyMjEsIDQ3LCA0NSwgMjIwLCAyMzUsIDQ1LCAyMjAsIDIyNCwgNDUsIDIyMCwgMjEzLCA0NSwgMjIwLCAKKyAgICAyMDIsIDQ1LCAyMjAsIDE5MSwgNDUsIDIyMCwgMTgwLCA0NSwgMjIwLCAxNjksIDQ1LCAyMjEsIDE1NywgNDUsIDIyMSwgCisgICAgMTQ2LCA0NSwgMjIxLCAxMzUsIDQ1LCAyMjEsIDEyNCwgNDUsIDIyMSwgMTEzLCA0NSwgMjIxLCAxMDIsIDQ1LCAyMjEsIDkxLCAKKyAgICAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyNDksIDIyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEwLCAyNDksIAorICAgIDIyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIyNCwgMTk3LCAyNDQsIAorICAgIDI4LCAzMSwgNjcsIDI0OSwgMjM0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMjAsIDE1MiwgMjI0LCAxOTcsIDI0NCwgCisgICAgMjgsIDMxLCA2NywgMjQ1LCAzOSwgNzksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIyNCwgMTYsIDc5LCAyMjQsIAorICAgIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgNzEsIDIzMywgMjYsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgCisgICAgNDQsIDcxLCAyMzMsIDI2LCAyNTEsIDE2NCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjAzLCAyNDUsIDE3MSwgMzgsIAorICAgIDI3LCA0MywgMjQyLCAzNCwgMzgsIDI3LCA0NCwgMjQyLCAzNCwgMzgsIDUyLCAyMTYsIDkwLCA0MywgMjQyLCAzNCwgMzgsIAorICAgIDUyLCAyMTYsIDkwLCA0NCwgMjQyLCAzNCwgMzgsIDIzMSwgMjM4LCA0MywgMjQyLCAzNCwgMzgsIDIzMSwgMjM4LCA0NCwgCisgICAgMjQyLCAzNCwgMzgsIDI0OSwgMjA1LCAyMzEsIDIzNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTEzLCA1OSwgMjMzLCAKKyAgICA2MiwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjQ1LCAxNjgsIDI0OCwgMTY0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCAyNDUsIDE1OSwgMjQ4LCAxNjQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDEyMSwgMjMyLCAyMTksIDIyNCwgCisgICAgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIAorICAgIDQzLCAyMjYsIDcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyMjYsIDcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQzLCAyNDksIDEwNywgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgMjQ5LCAxMDcsIDEyNywgMjI0LCAKKyAgICAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCA4NSwgMjMzLCAyNiwgCisgICAgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgODUsIDIzMywgMjYsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIAorICAgIDMxLCA2NywgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNTIsIDI1NCwgCisgICAgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAKKyAgICAyOCwgMzEsIDY3LCA0NCwgMjU0LCAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDI0OSwgMTY5LCAKKyAgICAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyNDksIDE2OSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgNzEsIDI0OSwgMTY5LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA3MSwgMjQ5LCAxNjksIAorICAgIDEyNywgMjIwLCAxMzMsIDI0NywgMTI4LCA3MSwgMjIwLCAxMzMsIDI0NywgMTI4LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgNDIsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDQyLCAxMjcsIDI0OCwgMTYzLCAyMjYsIAorICAgIDEyMywgMjUwLCAxODAsIDIyNiwgMTIzLCAyMTIsIDMyLCAyMjYsIDEyMywgNTIsIDIxMiwgMzIsIDIyNiwgMTIzLCAyNDgsIAorICAgIDE2MywgMTIxLCAyMzIsIDIxOSwgMjUwLCAxODAsIDEyMSwgMjMyLCAyMTksIDIxMiwgMzIsIDEyMSwgMjMyLCAyMTksIDQsIAorICAgIDI0OSwgMjI3LCA0LCAxMTAsIDI0OSwgMjI3LCA0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQsIDIyMCwgMTUyLCA0LCAyNDksIAorICAgIDIzNCwgNCwgMjI0LCAxNiwgNzksIDQsIDI0NSwgMzksIDc5LCA0LCAyNDUsIDE2OCwgMjQ4LCAxNjQsIDQsIDQzLCAyMjYsIAorICAgIDcsIDQsIDQ0LCAyMjYsIDcsIDQsIDQzLCAyNDksIDEwNywgMTI3LCA0LCA0NCwgMjQ5LCAxMDcsIDEyNywgNCwgNDMsIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMTI3LCA0LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQsIDU0LCA1MCwgNCwgMjU0LCAxMzQsIDQsIAorICAgIDI1MywgMjI0LCA0LCA5NiwgNTAsIDQsIDI0MCwgMTc0LCA0LCAyMzMsIDIxLCA1MCwgNCwgMjQyLCAxMzcsIDUwLCA0LCAKKyAgICAyNDUsIDEwNiwgNTAsIDQsIDIyMywgNTMsIDIxOSwgNDgsIDQsIDI0NywgMTQwLCA1MCwgNCwgMjI1LCAxODUsIDUwLCA0LCAKKyAgICAyNDksIDIyNSwgMjUzLCAyMTQsIDksIDI0NCwgMTcyLCA1MywgMTcsIDksIDIxNywgNDUsIDIsIDI0NCwgMTcyLCA0OCwgOSwgCisgICAgMjQ4LCAxOTEsIDUzLCAxNywgOSwgMjE3LCA3OSwgMjQ0LCA5LCA5LCAyMzQsIDIxMCwgNTMsIDE3LCA5LCAyNDQsIDE3NCwgCisgICAgNTMsIDE3LCA5LCAyNDQsIDE3NCwgMTQ3LCAxNywgOSwgMjQ4LCAxOTMsIDUzLCAxNywgOSwgMjQ4LCAxOTMsIDE0NywgMTcsIAorICAgIDksIDIzNCwgMjEyLCA1MywgMTcsIDksIDIzNCwgMjEyLCAxNDcsIDE3LCA5LCAyMjAsIDk2LCA1MywgMTcsIDksIDIyMCwgCisgICAgOTYsIDE0NywgMTcsIDksIDIxOCwgNDcsIDUzLCAxNywgOSwgMjE4LCA0NywgMTQ3LCAxNywgOSwgMSwgMTgyLCA1MywgMTcsIAorICAgIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA0MCwgMTcsIAorICAgIDksIDEsIDEwOSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAxMDksIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAyMTIsIDMxLCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDEwOSwgMiwgCisgICAgMTgyLCAyNTIsIDUxLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMTgyLCAyNTIsIDUxLCA0MCwgMTcsIDksIDEsIDc3LCAyLCAKKyAgICAxODIsIDcyLCA1MywgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCA2NSwgCisgICAgMTcsIDksIDEsIDc3LCAyLCAxODIsIDcyLCAxNDcsIDE3LCA5LCAxLCAxMDksIDUzLCAxNywgOSwgMSwgMTA5LCA0MCwgMTcsIAorICAgIDksIDEsIDI1MiwgNjMsIDUzLCAxNywgOSwgMSwgMjUyLCA2MywgNDAsIDE3LCA5LCAxLCAyNTIsIDYzLCA2NSwgMTcsIDksIAorICAgIDEsIDI1MiwgNjMsIDE0NywgMTcsIDksIDEsIDIxNywgOSwgMjMxLCAxNzAsIDUzLCAxNywgOSwgMSwgMjE3LCA5LCAyMzEsIAorICAgIDE3MCwgNDAsIDE3LCA5LCAxLCAyMTcsIDksIDUzLCAxNywgOSwgMSwgMjE3LCA5LCA0MCwgMTcsIDksIDEsIDIxNywgOSwgCisgICAgNjUsIDE3LCA5LCAxLCAyMTcsIDksIDE0NywgMTcsIDksIDEsIDIxNiwgMTk0LCA1MywgMTcsIDksIDEsIDIxNiwgMTk0LCAKKyAgICA0MCwgMTcsIDksIDEsIDIxNiwgMTk0LCA2NSwgMTcsIDksIDEsIDIxNiwgMTk0LCAxNDcsIDE3LCA5LCAxLCAxNTEsIDUzLCAKKyAgICAxNywgOSwgMSwgMTUxLCA0MCwgMTcsIDksIDEsIDE1MSwgNjUsIDE3LCA5LCAxLCAxNTEsIDE0NywgMTcsIDksIDEsIDEyMiwgCisgICAgNTMsIDE3LCA5LCAxLCAxMjIsIDQwLCAxNywgOSwgMSwgMTIyLCA2NSwgMTcsIDksIDEsIDEyMiwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjM0LCAxMzYsIDUzLCAxNywgOSwgMSwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMSwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMSwgCisgICAgMjM0LCAxMzYsIDE0NywgMTcsIDksIDEsIDI0OCwgMjA0LCA1MywgMTcsIDksIDEsIDI0OCwgMjA0LCA0MCwgMTcsIDksIDEsIAorICAgIDIxNiwgMjA0LCA1MywgMTcsIDksIDEsIDIxNiwgMjA0LCA0MCwgMTcsIDksIDEsIDIyMywgOTksIDUzLCAxNywgOSwgMSwgCisgICAgMjIzLCA5OSwgNDAsIDE3LCA5LCAxLCAyMTAsIDEwOSwgNTMsIDE3LCA5LCAxLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjEsIDE2OSwgNTMsIDE3LCA5LCAxLCAyMjEsIDE2OSwgNDAsIDE3LCA5LCAxLCAyMjEsIDE2OSwgNjUsIDE3LCA5LCAxLCAKKyAgICAyMjEsIDE2OSwgMTQ3LCAxNywgOSwgMSwgMjIwLCA2MiwgNTMsIDE3LCA5LCAxLCAyMjAsIDYyLCA0MCwgMTcsIDksIDEsIAorICAgIDIyMCwgNjIsIDY1LCAxNywgOSwgMSwgMjIwLCA2MiwgMTQ3LCAxNywgOSwgMSwgMjIyLCAyOSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMjIsIDI5LCA0MCwgMTcsIDksIDEsIDIyMiwgMjksIDY1LCAxNywgOSwgMSwgMjIyLCAyOSwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjQ4LCAyMjUsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMjUsIDQwLCAxNywgOSwgMSwgMjQ4LCAyMjUsIDY1LCAxNywgOSwgMSwgCisgICAgMjQ4LCAyMjUsIDE0NywgMTcsIDksIDEsIDIxNywgODIsIDUzLCAxNywgOSwgMSwgMjE3LCA4MiwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMTcsIDgyLCA2NSwgMTcsIDksIDEsIDIxNywgODIsIDE0NywgMTcsIDksIDEsIDIxMCwgMTEyLCA1MywgMTcsIDksIDEsIAorICAgIDIxMCwgMTEyLCA0MCwgMTcsIDksIDEsIDIxMCwgMTEyLCA2NSwgMTcsIDksIDEsIDIxMCwgMTEyLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgNTMsIDE3LCA5LCAxLCAyNTQsIDIwNiwgNDAsIDE3LCA5LCAxLCAyNTQsIDIwNiwgNjUsIDE3LCA5LCAxLCAKKyAgICAyNTQsIDIwNiwgMTQ3LCAxNywgOSwgMSwgMjQyLCAyNTIsIDUzLCAxNywgOSwgMSwgMjQyLCAyNTIsIDQwLCAxNywgOSwgMSwgCisgICAgMjQyLCAyNTIsIDY1LCAxNywgOSwgMSwgMjQyLCAyNTIsIDE0NywgMTcsIDksIDEsIDI0NCwgMTUxLCA1MywgMTcsIDksIDEsIAorICAgIDI0NCwgMTUxLCA0MCwgMTcsIDksIDEsIDI0NCwgMTUxLCA2NSwgMTcsIDksIDEsIDI0NCwgMTUxLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyMjQsIDg1LCA1MywgMTcsIDksIDEsIDIyNCwgODUsIDQwLCAxNywgOSwgMSwgMjI0LCA4NSwgNjUsIDE3LCA5LCAxLCAyMjQsIAorICAgIDg1LCAxNDcsIDE3LCA5LCAxLCAyMzUsIDEsIDUzLCAxNywgOSwgMSwgMjM1LCAxLCA0MCwgMTcsIDksIDEsIDIzNSwgMSwgCisgICAgNjUsIDE3LCA5LCAxLCAyMzUsIDEsIDE0NywgMTcsIDksIDEsIDIzMywgMTA5LCA1MywgMTcsIDksIDEsIDIzMywgMTA5LCAKKyAgICA0MCwgMTcsIDksIDEsIDIzMywgMTA5LCA2NSwgMTcsIDksIDEsIDIzMywgMTA5LCAxNDcsIDE3LCA5LCAxLCA2NiwgNTMsIAorICAgIDE3LCA5LCAxLCA2NiwgNDAsIDE3LCA5LCAxLCA2NiwgNjUsIDE3LCA5LCAxLCA2NiwgMTQ3LCAxNywgOSwgMSwgMjI4LCA2OCwgCisgICAgNTMsIDE3LCA5LCAxLCAyMjgsIDY4LCA0MCwgMTcsIDksIDEsIDIyOCwgNjgsIDY1LCAxNywgOSwgMSwgMjI4LCA2OCwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDY1LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDEsIDIxMiwgMzEsIDUzLCAxNywgOSwgMSwgMjEyLCAzMSwgNDAsIAorICAgIDE3LCA5LCAxLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDEsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMSwgNzcsIAorICAgIDUzLCAxNywgOSwgMSwgNzcsIDQwLCAxNywgOSwgMSwgNzcsIDY1LCAxNywgOSwgMSwgNzcsIDE0NywgMTcsIDksIDI3LCAKKyAgICAyMzMsIDEwOSwgMiwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIAorICAgIDIzMSwgMjMzLCA3MiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCAKKyAgICAyNTIsIDUxLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDI1MiwgNTEsIDQwLCAxNywgOSwgMjcsIAorICAgIDIzMywgMTA5LCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDQwLCAxNywgMjEwLCA4NywgMjExLCAKKyAgICAyNDUsIDIyOCwgNzgsIDIxOSwgMjAsIDEyNiwgMjQ1LCAzOSwgNzksIDEyNiwgMjI0LCAxLCA3OSwgMTI2LCA1NCwgNTAsIAorICAgIDEyNiwgMjQ3LCAxNDAsIDUwLCAxMjYsIDIyNSwgMTg1LCA1MCwgMTI2LCAyNTQsIDEzNCwgMTI2LCAyNTQsIDY1LCAxMjYsIAorICAgIDQzLCAyMjYsIDcsIDEyNiwgNDQsIDIyNiwgNywgMTI2LCAyNTMsIDIyNCwgMTI2LCA5NiwgNTAsIDEyNiwgMjQ5LCAyMjcsIAorICAgIDEyNiwgMjQwLCAxNzQsIDEyNiwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxMjYsIDIxOSwgNDgsIDEyNiwgMjEsIDIxMCwgODYsIAorICAgIDEyNiwgMjEsIDExMSwgMTI2LCAyMSwgMTA1LCAxMjYsIDIxLCAxNTgsIDEyNiwgMjEsIDE2MSwgMTI2LCAyMSwgMTkwLCAKKyAgICAxMjYsIDIxLCAxOTUsIDEyNiwgMjEsIDE5OSwgMTI2LCAyMSwgMTk2LCAxMjYsIDIxLCAyMDEsIDEyNiwgMjQ5LCAyMzQsIAorICAgIDEyNiwgMjIwLCAxNTIsIDEyNiwgMjMzLCAyMSwgNTAsIDEyNiwgMjQ1LCAxMDYsIDUwLCAxMjYsIDI0MiwgMTM3LCA1MCwgCisgICAgMTI2LCAyMjQsIDE2LCA3OSwgMTI2LCAyNDksIDIyNSwgMjUzLCAyMTQsIDEyNiwgNywgNiwgMSwgNjEsIDEyNiwgNywgNiwgCisgICAgMSwgMjUzLCAxNjYsIDEyNiwgNywgNiwgMSwgMjUxLCA3NCwgMTI2LCA3LCA2LCAxLCAyNDksIDY4LCAxMjYsIDcsIDYsIDEsIAorICAgIDc2LCAxMjYsIDcsIDYsIDEsIDI0NSwgMTQsIDEyNiwgNywgNiwgMSwgMjQzLCAyMDksIDEyNiwgNywgNiwgMSwgMjQyLCA2NywgCisgICAgMTI2LCA3LCA2LCAxLCA3NCwgMTI2LCA3LCA2LCAxLCAyMzUsIDE1MCwgMTI2LCA3LCA2LCAxLCAyMzUsIDI5LCAxMjYsIDcsIAorICAgIDYsIDEsIDE1NiwgMTI2LCA3LCA2LCAxLCAxOTQsIDEyNiwgNywgNiwgMSwgMjMwLCAzMCwgMTI2LCA3LCA2LCAxLCA3OCwgCisgICAgMTI2LCA3LCA2LCAxLCAyMjYsIDEwOSwgMTI2LCA3LCA2LCAxLCAyMjQsIDk5LCAxMjYsIDcsIDYsIDEsIDE1MywgMTI2LCA3LCAKKyAgICA2LCAxLCAyMjIsIDkzLCAxMjYsIDcsIDYsIDEsIDIxNywgMTUzLCAxMjYsIDcsIDYsIDEsIDY5LCAxMjYsIDcsIDYsIDEsIAorICAgIDIxNCwgMTA1LCAxMjYsIDcsIDYsIDEsIDIxMiwgOTgsIDEyNiwgNywgNiwgMSwgMjExLCAxNzgsIDEyNiwgNywgNiwgMSwgCisgICAgMjExLCAxMTcsIDEyNiwgNywgNiwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIDQyLCAxMjcsIDEyNiwgMjIzLCA1MywgMjE5LCAKKyAgICA0OCwgMTI2LCA0NCwgNDIsIDEyNywgMTI2LCAyNTAsIDM5LCAyNTUsIDIzLCAxMjYsIDEyMSwgMjMyLCAyMTksIDEyNiwgCisgICAgMjQyLCAxNDQsIDI1NSwgMjMsIDEyNiwgNywgNCwgMSwgNjEsIDEyNiwgNywgNCwgMSwgMjUzLCAxNjYsIDEyNiwgNywgNCwgCisgICAgMSwgMjUxLCA3NCwgMTI2LCA3LCA0LCAxLCAyNDksIDY4LCAxMjYsIDcsIDQsIDEsIDc2LCAxMjYsIDcsIDQsIDEsIDI0NSwgCisgICAgMTQsIDEyNiwgNywgNCwgMSwgMjQzLCAyMDksIDEyNiwgNywgNCwgMSwgMjQyLCA2NywgMTI2LCA3LCA0LCAxLCA3NCwgMTI2LCAKKyAgICA3LCA0LCAxLCAyMzUsIDE1MCwgMTI2LCA3LCA0LCAxLCAyMzUsIDI5LCAxMjYsIDcsIDQsIDEsIDE1NiwgMTI2LCA3LCA0LCAKKyAgICAxLCAxOTQsIDEyNiwgNywgNCwgMSwgMjMwLCAzMCwgMTI2LCA3LCA0LCAxLCA3OCwgMTI2LCA3LCA0LCAxLCAyMjYsIDEwOSwgCisgICAgMTI2LCA3LCA0LCAxLCAyMjQsIDk5LCAxMjYsIDcsIDQsIDEsIDE1MywgMTI2LCA3LCA0LCAxLCAyMjIsIDkzLCAxMjYsIDcsIAorICAgIDQsIDEsIDIxNywgMTUzLCAxMjYsIDcsIDQsIDEsIDY5LCAxMjYsIDcsIDQsIDEsIDIxNCwgMTA1LCAxMjYsIDcsIDQsIDEsIAorICAgIDIxMiwgOTgsIDEyNiwgNywgNCwgMSwgMjExLCAxNzgsIDEyNiwgNywgNCwgMSwgMjExLCAxMTcsIDEyNiwgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDEyNiwgNDMsIDI0OSwgMTA3LCAxMjcsIDEyNiwgNjcsIDIzMiwgMjE5LCAxMjYsIDQ0LCAyNDksIDEwNywgCisgICAgMTI3LCAxMjYsIDE4NCwgMTI2LCA0MywgNzEsIDIyNiwgNywgMTI2LCA0NCwgNzEsIDIyNiwgNywgMTAxLCAxMTAsIDI0MywgCisgICAgMjM2LCAyMTgsIDEzMSwgMTAxLCA0MywgMjQ5LCAxNjksIDEyNywgMTAxLCA0NCwgMjQ5LCAxNjksIDEyNywgMTAxLCAxMTAsIAorICAgIDI0OSwgMjI3LCAxMDEsIDU2LCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDEwMSwgNTYsIDEsIDIxMSwgMjI3LCAxMDEsIDU2LCAxLCAKKyAgICA0LCA2MSwgMTAxLCA1NiwgMSwgNCwgNzQsIDEwMSwgNTYsIDEsIDQsIDY5LCAxMDEsIDU2LCAxLCA0LCA3NiwgMTAxLCA1NiwgCisgICAgMSwgNCwgNzgsIDEwMSwgNTYsIDEsIDQsIDE5MiwgMTAxLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDQsIAorICAgIDIxMCwgMjQ0LCAxMDEsIDU2LCAxLCA0LCAyMTUsIDExOSwgMTAxLCAyMzQsIDIwNywgMjI0LCAxNzYsIDIxOSwgMzMsIDc5LCAKKyAgICAxMDEsIDU2LCAxLCA2MSwgMTAxLCA1NiwgMSwgNzQsIDEwMSwgNTYsIDEsIDY5LCAxMDEsIDU2LCAxLCA3NiwgMTAxLCA1NiwgCisgICAgMSwgNzgsIDEwMSwgNTYsIDEsIDE3NiwgMTAxLCA1NiwgMSwgMjM0LCA5OCwgMTAxLCA1NiwgMSwgMjMzLCAyMjMsIDEwMSwgCisgICAgNTYsIDEsIDIzNCwgMTg4LCAxMDEsIDU2LCAxLCAyMzQsIDM0LCAxMDEsIDU2LCAxLCAyMDYsIDEwMSwgNTYsIDEsIDIxOSwgCisgICAgMTkzLCAxMDEsIDU2LCAxLCAyMTgsIDg0LCAxMDEsIDU2LCAxLCAyMjEsIDE4MywgMTAxLCA1NiwgMSwgMjE5LCA2MCwgMTAxLCAKKyAgICA1NiwgMSwgMjE3LCAxMDYsIDEwMSwgNTYsIDEsIDIxNiwgMTE4LCAxMDEsIDU2LCAxLCAyMTUsIDExOSwgMTAxLCA1NiwgMSwgCisgICAgMjE3LCAyMywgMTAxLCA1NiwgMSwgMTEyLCAxMDEsIDU2LCAxLCAxOTgsIDEwMSwgNTYsIDEsIDIyOCwgMjM4LCAxMDEsIDU2LCAKKyAgICAxLCAyMjcsIDI0MiwgMTAxLCA1NiwgMSwgMjI5LCAxMTIsIDEwMSwgNTYsIDEsIDIyOCwgNzksIDEwMSwgNTYsIDEsIDE2MiwgCisgICAgMTAxLCA1NiwgMSwgMjQxLCAxODcsIDEwMSwgNTYsIDEsIDI0MCwgMjI5LCAxMDEsIDU2LCAxLCAyNDEsIDI0NSwgMTAxLCAKKyAgICA1NiwgMSwgMjQxLCA3NSwgMTAxLCA1NiwgMSwgMTg2LCAxMDEsIDU2LCAxLCAyMzAsIDIzNSwgMTAxLCA1NiwgMSwgMjMwLCAKKyAgICAxMDcsIDEwMSwgNTYsIDEsIDIzMSwgOTYsIDEwMSwgNTYsIDEsIDIzMCwgMTY2LCAxMDEsIDU2LCAxLCAxOTIsIDEwMSwgNTYsIAorICAgIDEsIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgMjA1LCAxMDEsIDU2LCAxLCAyMjMsIDM4LCAKKyAgICAxMDEsIDU2LCAxLCAyMjIsIDE0MiwgMTAxLCA1NiwgMSwgMjIzLCAxMzEsIDEwMSwgNTYsIDEsIDIyMiwgMjEzLCAxMDEsIAorICAgIDU2LCAxLCAyMTIsIDY1LCAxMDEsIDU2LCAxLCAyMzAsIDMwLCAxMDEsIDU2LCAyMTMsIDEzNSwgMjE5LCAzMywgNzksIDEwMSwgCisgICAgNTYsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMTAxLCAyNCwgMjQ0LCAxMTEsIDEwMSwgMjQsIDEsIDIzNCwgNjQsIDEwMSwgCisgICAgMjQsIDEsIDIxOCwgMjE3LCAxMDEsIDI0LCAxLCAyMzQsIDU3LCAxMDEsIDI0LCAxLCAyMjgsIDIzMSwgMTAxLCAyNCwgMSwgCisgICAgMjI4LCAyMjksIDEwMSwgMjQsIDEsIDIyOCwgMjI4LCAxMDEsIDI0LCAxLCAyMTYsIDEwMiwgMTAxLCAyNCwgMSwgMjE4LCAKKyAgICAyMDYsIDEwMSwgMjQsIDEsIDIyMywgMjksIDEwMSwgMjQsIDEsIDIyMywgMjQsIDEwMSwgMjQsIDEsIDIyMywgMjEsIDEwMSwgCisgICAgMjQsIDEsIDIyMywgMTQsIDEwMSwgMjQsIDEsIDIyMywgOSwgMTAxLCAyNCwgMSwgMjIzLCA0LCAxMDEsIDI0LCAxLCAyMjMsIAorICAgIDE1LCAxMDEsIDI0LCAxLCAyMjMsIDI3LCAxMDEsIDI0LCAxLCAyMzAsIDIyMiwgMTAxLCAyNCwgMSwgMjI1LCA5OCwgMTAxLCAKKyAgICAyNCwgMSwgMjE4LCAyMTQsIDEwMSwgMjQsIDEsIDIyNSwgODcsIDEwMSwgMjQsIDEsIDIxOSwgMTUwLCAxMDEsIDI0LCAxLCAKKyAgICAyMTgsIDIxMSwgMTAxLCAyNCwgMSwgMjM2LCA2MywgMTAxLCAyNCwgMSwgMjUwLCA1NCwgMTAxLCAyNCwgMSwgMjE4LCAyMjEsIAorICAgIDEwMSwgMjQsIDEsIDI1MCwgMTE0LCAxMDEsIDI0LCAxLCAyMzQsIDExNiwgMTAxLCAyNCwgMSwgMjE2LCAxNzQsIDEwMSwgCisgICAgMjQsIDEsIDIyNSwgMTM0LCAxMDEsIDI0LCAxLCAyNDEsIDE3OSwgMTAxLCAyNCwgMSwgNjEsIDEwMSwgMjQsIDEsIDI1NCwgCisgICAgMjUyLCAxMDEsIDI0LCAxLCAxOTIsIDEwMSwgMjQsIDEsIDIxMSwgOTIsIDEwMSwgMjQsIDEsIDI0NSwgMTI1LCAxMDEsIDI0LCAKKyAgICAxLCA3NiwgMTAxLCAyNCwgMSwgMjExLCAzNiwgMTAxLCAyNCwgMSwgMjExLCA0NywgMTAxLCAyNCwgMSwgNzgsIDEwMSwgMjQsIAorICAgIDEsIDIxMiwgNjUsIDEwMSwgMjQsIDEsIDIxMiwgNjIsIDEwMSwgMjQsIDEsIDIyNiwgMjM4LCAxMDEsIDI0LCAxLCAyMTAsIAorICAgIDI0NCwgMTAxLCAyNCwgMSwgNjksIDEwMSwgMjQsIDEsIDIxMiwgMTEsIDEwMSwgMjQsIDEsIDIxMiwgMjIsIDEwMSwgMjQsIAorICAgIDEsIDIxMSwgMjUwLCAxMDEsIDI0LCAxLCAyMTAsIDIxMiwgMTAxLCAyNCwgMSwgMjQ1LCA2MywgMTAxLCAyNCwgMSwgMjExLCAKKyAgICA4LCAxMDEsIDI0LCAxLCA3NCwgMTI2LCAyNTAsIDE4NCwgNTAsIDEyNiwgMjI0LCAyMzEsIDUwLCAxMjYsIDIyOCwgNTcsIAorICAgIDUwLCAxMjYsIDIzMSwgMjM3LCAxMjYsIDI1MSwgMTQzLCAxMzAsIDEyNiwgMjExLCA0MCwgNTAsIDEyNiwgMjExLCAyMTcsIAorICAgIDUwLCAxMDEsIDI0NCwgMjYsIDE5MywgMjEzLCAyMzksIDEwMSwgMTQwLCA3NSwgMTAxLCAyMTQsIDE1MywgNzUsIDEwMSwgCisgICAgOTcsIDc1LCAxMDEsIDI0NiwgMTEyLCA3NSwgMTAxLCA4NSwgMjE4LCAyMzYsIDEwMSwgNzEsIDI1MCwgNDMsIDIzNSwgMjExLCAKKyAgICAyNTQsIDEwNywgMjU0LCAxMjgsIDIzNSwgMjExLCAyNTQsIDEwNywgMjIwLCAxMzksIDIzNSwgMjExLCAyNTQsIDEwNywgCisgICAgMjE2LCAyMzcsIDIyNiwgMjUzLCAyMjMsIDc1LCAyNTAsIDE1MCwgMjIzLCA3NSwgMjUwLCAxNTAsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxNTAsIDYxLCA2MiwgNTcsIDMsIDI1MywgMTE5LCA3NiwgNjIsIDU3LCAzLCAyNTMsIDEyOCwgNzQsIDYyLCA1NywgMywgCisgICAgMjUzLCA5NiwgNzgsIDYyLCA1NywgMywgMjUzLCAxNDYsIDY5LCA2MiwgNTcsIDMsIDI1MywgMTY1LCAyNDgsIDIyOSwgNjIsIAorICAgIDU3LCAzLCAyNTMsIDExMiwgMjQ4LCA5OCwgNjIsIDU3LCAzLCAyNTMsIDE1MiwgMjQ4LCAxMSwgNjIsIDU3LCAzLCAyNTMsIAorICAgIDE0MiwgMjQ3LCAxNTMsIDYyLCA1NywgMywgMjUzLCAxMDYsIDI0NiwgODYsIDYyLCA1NywgMywgMjUzLCAxMDAsIDIzNSwgCisgICAgMTQ3LCA2MiwgNTcsIDMsIDI1MywgMTExLCAyMzUsIDEzMiwgNjIsIDU3LCAzLCAyNTMsIDEyMSwgMjM1LCA3NCwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDkyLCAyMzUsIDU3LCA2MiwgNTcsIDMsIDI1MywgODAsIDE3NiwgNjIsIDU3LCAzLCAyNTMsIDExMywgMjM0LCAKKyAgICAxODgsIDYyLCA1NywgMywgMjUzLCA5MCwgMjM0LCA5OCwgNjIsIDU3LCAzLCAyNTMsIDg3LCAyMzQsIDM0LCA2MiwgNTcsIDMsIAorICAgIDI1MywgNzYsIDIzMywgMjIzLCA2MiwgNTcsIDMsIDI1MywgNzcsIDE4NiwgNjIsIDU3LCAzLCAyNTMsIDE0MywgMjMxLCA5NiwgCisgICAgNjIsIDU3LCAzLCAyNTMsIDg0LCAyMzAsIDIzNSwgNjIsIDU3LCAzLCAyNTMsIDE0MSwgMjMwLCAxNjYsIDYyLCA1NywgMywgCisgICAgMjUzLCAxMzMsIDIzMCwgMTA3LCA2MiwgNTcsIDMsIDI1MywgMTU0LCAxOTgsIDYyLCA1NywgMywgMjUzLCAxMzIsIDIyOSwgCisgICAgMTEyLCA2MiwgNTcsIDMsIDI1MywgMTI2LCAyMjgsIDIzOCwgNjIsIDU3LCAzLCAyNTMsIDEwNSwgMjI4LCA3OSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDEwMiwgMjI3LCAyNDIsIDYyLCA1NywgMywgMjUzLCAxNjEsIDE5MSwgNjIsIDU3LCAzLCAyNTMsIDg1LCAyMjUsIAorICAgIDIyNCwgNjIsIDU3LCAzLCAyNTMsIDExOCwgMjI1LCAxMTEsIDYyLCA1NywgMywgMjUzLCAxNDUsIDIyNSwgMTksIDYyLCA1NywgCisgICAgMywgMjUzLCAxMDcsIDIyNCwgMTUzLCA2MiwgNTcsIDMsIDI1MywgMTQwLCAyMjQsIDkxLCA2MiwgNTcsIDMsIDI1MywgNzksIAorICAgIDIyNCwgNzIsIDYyLCA1NywgMywgMjUzLCAxMzUsIDIyNCwgNTYsIDYyLCA1NywgMywgMjUzLCAxMjQsIDIyNCwgNDUsIDYyLCAKKyAgICA1NywgMywgMjUzLCA5NywgMjA1LCA2MiwgNTcsIDMsIDI1MywgMTI5LCAyMjMsIDEzMSwgNjIsIDU3LCAzLCAyNTMsIDEwNCwgCisgICAgMjIzLCAzOCwgNjIsIDU3LCAzLCAyNTMsIDE2MywgMjIyLCAyMTMsIDYyLCA1NywgMywgMjUzLCAxMzAsIDIyMiwgMTQyLCAKKyAgICA2MiwgNTcsIDMsIDI1MywgMTI1LCAyMDYsIDYyLCA1NywgMywgMjUzLCAxNDgsIDIyMSwgMTgzLCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTE2LCAyMTksIDE5MywgNjIsIDU3LCAzLCAyNTMsIDE0NCwgMjE5LCA2MCwgNjIsIDU3LCAzLCAyNTMsIDk5LCAyMTgsIDg0LCAKKyAgICA2MiwgNTcsIDMsIDI1MywgOTgsIDIxNywgMTA2LCA2MiwgNTcsIDMsIDI1MywgMTU5LCAyMTcsIDIzLCA2MiwgNTcsIDMsIAorICAgIDI1MywgMTIwLCAyMTYsIDExOCwgNjIsIDU3LCAzLCAyNTMsIDE1NywgMTEyLCA2MiwgNTcsIDMsIDI1MywgODgsIDIxNSwgCisgICAgMTE5LCA2MiwgNTcsIDMsIDI1MywgMTAzLCAyMTIsIDY1LCA2MiwgNTcsIDMsIDI1MywgODIsIDIxMiwgMjIsIDYyLCA1NywgCisgICAgMywgMjUzLCAxMTcsIDIxMSwgMjUwLCA2MiwgNTcsIDMsIDI1MywgMTE1LCAyMTEsIDIyNywgNjIsIDU3LCAzLCAyNTMsIAorICAgIDEzOSwgMjEwLCAxMTYsIDYyLCA1NywgMywgMjUzLCA4MywgMjEwLCA5NCwgNjIsIDU3LCAzLCAyNTMsIDEzNiwgMjEwLCAyMywgCisgICAgNjIsIDU3LCAzLCAyNTMsIDEzMSwgMjU1LCA4NCwgNjIsIDU3LCAzLCAyNTMsIDExNCwgMjU1LCA4MywgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDczLCAyNTMsIDIwMCwgNjIsIDU3LCAzLCAyNTMsIDg2LCAyNDYsIDU0LCA2MiwgNTcsIDMsIDI1MywgNjksIDI0NiwgCisgICAgNTMsIDYyLCA1NywgMywgMjUzLCAxMDksIDIyNywgMTc4LCA2MiwgNTcsIDMsIDI1MywgMTI3LCAyMjQsIDE1MSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDk1LCAyMjQsIDE1NSwgNjIsIDU3LCAzLCAyNTMsIDgxLCAyMjMsIDE4OSwgNjIsIDU3LCAzLCAyNTMsIDEyMywgCisgICAgMjIzLCAxODgsIDYyLCA1NywgMywgMjUzLCA4OSwgMjIyLCAyMTIsIDYyLCA1NywgMywgMjUzLCA5MSwgMjE3LCAxMDMsIDYyLCAKKyAgICA1NywgMywgMjUzLCA3MSwgMjE1LCA3OCwgNjIsIDU3LCAzLCAyNTMsIDY4LCAxMDUsIDYyLCA1NywgMTYsIDI1MywgMTM4LCAKKyAgICA2MiwgNTcsIDE2LCAyNTMsIDEzNywgNjIsIDU3LCAxNiwgMjUzLCAxMzQsIDYyLCA1NywgMTYsIDI1MywgMTIyLCA2MiwgNTcsIAorICAgIDE2LCAyNTMsIDExMCwgNjIsIDU3LCAxNiwgMjUzLCAxMDgsIDYyLCA1NywgMTYsIDI1MywgMTAxLCA2MiwgNTcsIDE2LCAKKyAgICAyNTMsIDk0LCA2MiwgNTcsIDE2LCAyNTMsIDkzLCA2MiwgNTcsIDE2LCAyNTMsIDc4LCA2MiwgNTcsIDE2LCAyNTMsIDc1LCAKKyAgICA2MiwgNTcsIDE2LCAyNTMsIDc0LCA2MiwgNTcsIDE2LCAyNTMsIDcyLCA2MiwgNTcsIDE2LCAyNTMsIDcwLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCA2NywgMjMxLCAxOTAsIDYyLCA1NywgMTA2LCAyNTMsIDY2LCAyMTEsIDIyMSwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgNjUsIDI0OCwgODIsIDYyLCA1NywgMTA2LCAyNTMsIDY0LCAyNDUsIDEwMywgNjIsIDU3LCAxMDYsIDI1MywgNjMsIDIzMSwgCisgICAgMTY0LCA2MiwgNTcsIDEwNiwgMjUzLCA2MiwgMjE4LCAxNjQsIDYyLCA1NywgMTA2LCAyNTMsIDYxLCAyNDUsIDQ1LCA2MiwgCisgICAgNTcsIDEwNiwgMjUzLCA2MCwgMjIzLCAxNTYsIDYyLCA1NywgMTA2LCAyNTMsIDU5LCAyMjAsIDY0LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA1OCwgMjQxLCAyNDQsIDYyLCA1NywgMTA2LCAyNTMsIDU3LCAyMTksIDI3LCA2MiwgNTcsIDEwNiwgMjUzLCA1NiwgCisgICAgMjUxLCAyMTEsIDYyLCA1NywgMTA2LCAyNTMsIDU1LCAyNDksIDE1MywgNjIsIDU3LCAxMDYsIDI1MywgNTQsIDI1MSwgMTIzLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCA1MywgMjEyLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MiwgMjUyLCAxNDQsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDUxLCAyMjYsIDIwOSwgNjIsIDU3LCAxMDYsIDI1MywgNTAsIDIxOSwgMCwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgNDksIDI0OSwgNzYsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgNDgsIDIzNCwgMjMwLCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIAorICAgIDQ3LCAyMzQsIDIzOCwgNjIsIDU3LCAxMDYsIDI1MywgNDYsIDIyNiwgMjIyLCA2MiwgNTcsIDEwNiwgMjUzLCA0NSwgMjExLCAKKyAgICAyMzYsIDYyLCA1NywgMTA2LCAyNTMsIDQ0LCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIDQzLCAyNTQsIDI1LCA2MiwgNTcsIAorICAgIDIzMCwgMTQ3LCAyNTMsIDQyLCAyMzEsIDU3LCA2MiwgNTcsIDEwNiwgMjUzLCA0MSwgMjUxLCAxNDIsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDQwLCAyNDIsIDE3MywgNjIsIDU3LCAxMDYsIDI1MywgMzksIDYyLCA1NywgMTA2LCAyNTMsIDM4LCAyMTEsIDIxMiwgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgMzcsIDYyLCA1NywgMTA2LCAyNTMsIDM2LCA2MiwgNTcsIDEwNiwgMjUzLCAzNSwgMjQwLCAKKyAgICAyNTUsIDYyLCA1NywgMTA2LCAyNTMsIDM0LCA2MiwgNTcsIDEwNiwgMjUzLCAzMywgNjIsIDU3LCAxMDYsIDI1MywgMzIsIAorICAgIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgMzAsIDIxNSwgOTIsIDYyLCA1NywgMTA2LCAyNTMsIDI5LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAyOCwgNjIsIDU3LCAxMDYsIDI1MywgMjcsIDI1MCwgMiwgNjIsIDU3LCAxMDYsIDI1MywgMjYsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDI1LCA2MiwgNTcsIDEwNiwgMjUzLCAyNCwgMjQzLCAxMDAsIDYyLCA1NywgMTA2LCAyNTMsIDIzLCAyNTQsIDEyLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAyMiwgNjIsIDU3LCAxMDYsIDI1MywgMjEsIDYyLCA1NywgMTA2LCAyNTMsIDIwLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCAxOSwgNjIsIDU3LCAxMDYsIDI1MywgMTgsIDYyLCA1NywgMTA2LCAyNTMsIDE3LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAxNiwgNjIsIDU3LCAxMDYsIDI1MywgMTUsIDYyLCA1NywgMTA2LCAyNTMsIDE0LCA2MiwgNTcsIDEwNiwgMjUzLCAKKyAgICAxMywgMjMwLCAxMzksIDYyLCA1NywgMTA2LCAyNTMsIDEyLCA2MiwgNTcsIDEwNiwgMjUzLCAxMSwgMjE1LCAyMzYsIDYyLCAKKyAgICA1NywgMTA2LCAyNTMsIDEwLCA2MiwgNTcsIDEwNiwgMjUzLCA5LCA2MiwgNTcsIDEwNiwgMjUzLCA4LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA3LCA2MiwgNTcsIDEwNiwgMjUzLCA2LCA2MiwgNTcsIDEwNiwgMjUzLCA1LCA2MiwgNTcsIDEwNiwgMjUzLCA0LCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAzLCA2MiwgNTcsIDEwNiwgMjUzLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAxLCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTUsIDI0MSwgMjE4LCA2MiwgNTcsIDEwNiwgMjUyLCAyMzQsIDI0NCwgCisgICAgMzYsIDYyLCA1NywgMTA2LCAyNTIsIDIzMSwgMjUyLCAxMjQsIDYyLCA1NywgMTA2LCAyNTIsIDIyNiwgMjE5LCA3LCA2MiwgCisgICAgNTcsIDEwNiwgMjUyLCAyMjUsIDc1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjQsIDYyLCA1NywgMTA2LCAyNTIsIDIyMywgMjE3LCAKKyAgICAyMzcsIDYyLCA1NywgMTA2LCAyNTIsIDIyMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjIxLCA2MiwgNTcsIDEwNiwgMjUyLCAyMjAsIAorICAgIDIxMSwgMjU0LCAyNTAsIDE0NywgNjIsIDU3LCAxMDYsIDI1MiwgMjE5LCAyNTAsIDE0NywgNjIsIDU3LCAxMDYsIDI1MiwgCisgICAgMjE4LCAyNTAsIDE0OCwgMjQ0LCA3LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTcsIDIxMiwgMCwgNjIsIDU3LCAxMDYsIDI1MiwgCisgICAgMjE2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTUsIDYyLCA1NywgMjMwLCAxNDcsIDI1MiwgMjE0LCAyNDcsIDIwNiwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MiwgMjEzLCA2MiwgNTcsIDEwNiwgMjUyLCAyMTIsIDYyLCA1NywgMTA2LCAyNTIsIDIxMCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MiwgMjA5LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDgsIDYyLCA1NywgMTA2LCAyNTIsIDIwNywgMjQ4LCAxNjcsIDYyLCA1NywgCisgICAgMTA2LCAyNTIsIDIwNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjA1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDQsIDYyLCA1NywgMTA2LCAKKyAgICAyNTIsIDIwMywgNjIsIDU3LCAxMDYsIDI1MiwgMjAyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MywgMzEsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTMsIDYyLCA1NywgMTA2LCAKKyAgICAyMTMsIDE4NiwgMjUyLCAyNTIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNTEsIDYyLCA1NywgMTA2LCAyMTMsIAorICAgIDE4NiwgMjUyLCAyNTAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCisgICAgMjUyLCAyNDgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKKyAgICAyNDYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDQsIAorICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDIsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyNDAsIDYyLCA1NywgMTA2LCAKKyAgICAyMTMsIDE4NiwgMjUyLCAyMzksIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzgsIDYyLCA1NywgMTA2LCAyMTMsIAorICAgIDE4NiwgMjUyLCAyMzcsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzYsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgCisgICAgMjUyLCAyMzUsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzMsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAKKyAgICAyMzIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMzAsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjksIAorICAgIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjgsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMjcsIDYyLCA1NywgCisgICAgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMTEsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUyLCAyMDEsIDI1NCwgMjQ1LCAyMTEsIAorICAgIDIwOSwgMjIwLCAxNDAsIDIzMiwgMjE5LCAyNTQsIDI0NSwgMjExLCAyMDksIDIyMCwgMTQwLCAyNDcsIDEyOCwgMjU0LCAKKyAgICAyNDUsIDI1MCwgMTM4LCA3OSwgMjU0LCAyNDUsIDU0LCAxMTEsIDI1NCwgMjQ1LCA1NCwgMTA1LCAyNTQsIDI0NSwgNTQsIAorICAgIDE1OCwgMjU0LCAyNDUsIDU0LCAxNjEsIDI1NCwgMjQ1LCA1NCwgMTkwLCAyNTQsIDI0NSwgNTQsIDE5NSwgMjU0LCAyNDUsIAorICAgIDU0LCAxOTksIDI1NCwgMjQ1LCA1NCwgMTk2LCAyNTQsIDI0NSwgNTQsIDIwMSwgMjU0LCAyNDUsIDU0LCAyMTYsIDI0OCwgCisgICAgMjU0LCAyNDUsIDU0LCAyMTUsIDczLCAyNTQsIDI0NSwgNTQsIDIxNiwgMTYzLCAyNTQsIDI0NSwgNTQsIDI0NCwgMjMsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjQ0LCAxMjIsIDI1NCwgMjQ1LCA1NCwgMjE5LCAxMTMsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMTgsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjQ1LCAxOTIsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDAsIDI1NCwgMjQ1LCA1NCwgMTIzLCAyNDAsIAorICAgIDIxNywgMjU0LCAyNDUsIDU0LCAxMTMsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDEzNCwgMjQwLCAyMTcsIDI1NCwgMjQ1LCAKKyAgICA1NCwgMjQ0LCAxOSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgCisgICAgMjE5LCAxMjcsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDIyMCwgMTI0LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyNDUsIAorICAgIDIwMSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDUsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDEyMywgMjE2LCAKKyAgICAxNDgsIDI1NCwgMjQ1LCA1NCwgMTEzLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAxMzQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgCisgICAgNTQsIDI0NCwgMTksIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgODksIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIAorICAgIDIxOSwgMTI3LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjAsIDEyNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ1LCAKKyAgICAyMDEsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyOCwgMjA1LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTYsIDI0OSwgCisgICAgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE1LCA3NCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE2LCAxNjQsIDIxNiwgCisgICAgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgMjQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NCwgMTIzLCAyMTYsIDE0OCwgCisgICAgMjU0LCAyNDUsIDU0LCAyMTksIDExNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMTksIDIxNiwgMTQ4LCAyNTQsIAorICAgIDI0NSwgNTQsIDI0NSwgMTkzLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjgsIDIwMSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCAKKyAgICAyMTIsIDE0LCAyNTIsIDEzNiwgMjE0LCAxNzMsIDI1NCwgMjQ1LCAyMTIsIDE0LCAyNDQsIDEwMCwgMjE4LCA2MCwgMjU0LCAKKyAgICAyNDUsIDIxMiwgMTQsIDIyMSwgMTc4LCAyMTgsIDYwLCAyNTQsIDI0NSwgMjEyLCAxNCwgMjE2LCAxNzAsIDIxOCwgNjAsIAorICAgIDI1NCwgMjQ1LCAyMTIsIDE0LCAyNDQsIDEyLCAyMTgsIDYwLCAyNTQsIDI0NSwgMjQ2LCA4OSwgMjMxLCA5NSwgMjQ0LCAKKyAgICAxMDAsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyMzIsIDIwNSwgMjMxLCA5NSwgMjQ0LCAxMDAsIDIxOCwgNjAsIDI1NCwgMjQ1LCAKKyAgICAyMzEsIDk1LCAyMjEsIDE3OCwgMjE4LCA2MCwgMjU0LCAyNDUsIDIzMSwgOTUsIDIxNiwgMTcwLCAyMTgsIDYwLCAyNiwgCisgICAgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjI0LCAyNCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0MiwgMzQsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDYsIDEwOCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxOTAsIDI2LCAyNTUsIAorICAgIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIAorICAgIDIxNiwgMTQ4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgCisgICAgMjE2LCAyNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAKKyAgICAyNTMsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIAorICAgIDIxOCwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDIxNiwgMTQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgCisgICAgMjUzLCAyMDIsIDI0NCwgODksIDIxNiwgMTQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIAorICAgIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgCisgICAgMjAyLCAyNDQsIDEyMywgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE4LCAxNTIsIAorICAgIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAyMTgsIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAKKyAgICAyMDIsIDEyMywgMjE2LCAxNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgCisgICAgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCAxMjMsIDIxNiwgMTQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgCisgICAgMTUsIDI1MywgMjAyLCAyMTYsIDI0OSwgMjMwLCAxNjksIDI2LCAyNTUsIDE1LCAyNDEsIDIxMiwgMTIzLCAyMjUsIDM0LCAKKyAgICAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDExMSwgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAxMTEsIDI2LCAyNTUsIDE1LCAyNDUsIAorICAgIDExMiwgMTA1LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDEwNSwgMjYsIDI1NSwgMTUsIDI0OSwgNzMsIDExMywgMjQ2LCAKKyAgICAxMDcsIDI2LCAyNTUsIDE1LCAyNDUsIDExMiwgMTEzLCAyNDYsIDEwNywgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAxOTAsIAorICAgIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjE2LCAyNDgsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjE2LCAyNDksIDI1NCwgCisgICAgMTQ5LCAxNywgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAyMTYsIDI0OCwgMjYsIDI1NSwgMTUsIDIzMSwgNDYsIDIxNiwgMjQ4LCAKKyAgICAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDIxNiwgMjQ4LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDIxNiwgMTYzLCAyNiwgCisgICAgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgMTIyLCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgMTIzLCAyNTQsIDE0OSwgCisgICAgMTcsIDI2LCAyNTUsIDE1LCAyNDEsIDIwOCwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCAxMjIsIDI2LCAKKyAgICAyNTUsIDE1LCAyMTYsIDE4MiwgMTIzLCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAxMzQsIDI0MCwgMjE3LCAKKyAgICAyNiwgMjU1LCAxNSwgMjQ1LCAxMTIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDI0NCwgODksIAorICAgIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjUwLCAKKyAgICAyMzUsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjI5LCAxODcsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgCisgICAgMjU1LCAxNSwgMjE2LCAxODIsIDEyMywgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCA4OSwgMjE2LCAKKyAgICAxNDgsIDI2LCAyNTUsIDE1LCAyNDgsIDY1LCAyNDQsIDg5LCAyMzAsIDE2OSwgMjYsIDI1NSwgMTUsIDIxOCwgMTIwLCAyNDQsIAorICAgIDEyMywgMjMwLCAxNjksIDI2LCAxMjMsIDE2MywgNTAsIDI2LCAxMjMsIDE2MywgNSwgMjU0LCAxNDksIDE3LCAyNiwgMTEzLCAKKyAgICAyMTYsIDE2OCwgNTAsIDI2LCAxMzQsIDIyNCwgMjMsIDUwLCAyNiwgMjExLCA0NSwgNTAsIDI2LCAyMTcsIDY5LCA1MCwgMjYsIAorICAgIDI0NiwgMTA5LCA1MCwgMjYsIDIyNiwgMjUwLCA1MCwgMjYsIDExMywgMjI2LCAyNDksIDUwLCAyNiwgMTM0LCAyMjYsIDI0OSwgCisgICAgNTAsIDI2LCAyNDQsIDE5LCAyMjYsIDI0OSwgNTAsIDI2LCAyNDQsIDg5LCAyMjYsIDI0OSwgNTAsIDI2LCAyMzEsIDQwLCAKKyAgICA1MCwgMjYsIDIzMywgMTYzLCAyNTIsIDEzNiwgNTAsIDI2LCAyMzIsIDIwMCwgNTAsIDI2LCAyMjYsIDEzNSwgNTAsIDI2LCAKKyAgICAyMTEsIDE1OSwgNTAsIDI2LCAyNTMsIDI1MSwgNTAsIDI2LCAyNTQsIDgsIDUwLCAyNiwgMjQyLCAxNTEsIDUwLCAyNiwgCisgICAgMjE1LCAxODcsIDI1MiwgMTM2LCA1MCwgMjYsIDIxMCwgODcsIDUwLCAyMjIsIDIwMCwgMjIwLCAxMTUsIDUwLCAyMjIsIAorICAgIDIwMCwgMjE0LCAxODUsIDUwLCAyMjIsIDIwMCwgMjIwLCAxNDQsIDUwLCAyMjIsIDIwMCwgMjIwLCAxMTMsIDUwLCAyMjIsIAorICAgIDIwMCwgMjQ3LCAyMjEsIDIyMCwgMTEzLCA1MCwgMjIyLCAyMDAsIDIxOSwgMTcwLCA1MCwgMjIyLCAyMDAsIDI0OCwgNjEsIAorICAgIDUwLCAyMjIsIDIwMCwgMjI0LCA5LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTMxLCA1MCwgMjIyLCAyMDAsIDI0NiwgNjgsIDUwLCAKKyAgICAyMjIsIDIwMCwgMjUzLCAyNDYsIDUwLCAyMjIsIDIwMCwgMjUwLCAxNzksIDUwLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDIyNSwgMjE2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyNSwgMjcsIDI0MSwgMjQyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDIxNywgNDYsIDI0MSwgMjQyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjU1LCAyMjUsIDE0NiwgMjQ3LCAKKyAgICAxOTksIDUsIDI1MCwgMTA5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMSwgMjIxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI0MSwgMjE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0MywgOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE2LCAKKyAgICAxMTcsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgNzUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUxLCAxNzcsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjIwLCAzMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDI1MiwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyMzEsIDE4OSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzEsIDE0MSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyMjEsIDIxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzIsIDI0MywgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyNTEsIDE5NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDIzOSwgMjI1LCAzOCwgMjI1LCAxNDYsIDI0NywgMTk5LCAKKyAgICA1LCAyNDcsIDE0MSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDIzMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTksIAorICAgIDg5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjMyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MiwgNzEsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjIwLCAxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDAsIDI1NSwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyNDEsIDE4NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTEsIDEyMCwgMjMzLCA0MiwgMjI1LCAKKyAgICAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDIzMiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjMsIDE1NiwgMjI1LCAxNDYsIAorICAgIDI0NywgMTk5LCA1LCAyNDUsIDIzOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDYsIDExNSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyMTUsIDEwNiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTIsIDc0LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDIyNSwgMzksIDIxNSwgMjM2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMywgMTU5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDIyNiwgMjIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjIyLCAxOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjMyLCAKKyAgICAyMzAsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjI2LCAxMTksIDI1MiwgMTkyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI0NCwgNTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQyLCAxNDUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE4LCAKKyAgICAxMjEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgNCwgMjUzLCAxNzYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjEyLCAzMiwgCisgICAgMjUyLCAxNTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMzgsIDIyNiwgMjUyLCA5MSwgMjMyLCA2NSwgMSwgNjEsIDIzMiwgCisgICAgNjUsIDEsIDc2LCAyMzIsIDY1LCAxLCAyNTMsIDE2NiwgMjMyLCA2NSwgMSwgMjUyLCAyNywgMjMyLCA2NSwgMSwgMjQzLCAKKyAgICAyMDksIDIzMiwgNjUsIDEsIDI0OSwgNjgsIDIzMiwgNjUsIDEsIDc0LCAyMzIsIDY1LCAxLCAyMTIsIDk4LCAyMzIsIDY1LCAKKyAgICAxLCAyMTAsIDE1OSwgMjMyLCA2NSwgMSwgMjE2LCAyMTEsIDIzMiwgNjUsIDEsIDIzNSwgMTUwLCAyMzIsIDY1LCAxLCAyMzUsIAorICAgIDI5LCAyMzIsIDY1LCAxLCAyMjQsIDk5LCAyMzIsIDY1LCAxLCAxNTYsIDIzMiwgNjUsIDEsIDE5NCwgMjMyLCA2NSwgMSwgCisgICAgMjMwLCAzMCwgMjMyLCA2NSwgMSwgMjMwLCAxNzEsIDIzMiwgNjUsIDEsIDIyOCwgMTE2LCAyMzIsIDY1LCAxLCA2OSwgMjMyLCAKKyAgICA2NSwgMSwgMjI2LCAxMDksIDIzMiwgNjUsIDEsIDIzNCwgNTMsIDIzMiwgNjUsIDEsIDE1MywgMjMyLCA2NSwgMSwgMjIyLCAKKyAgICA5MywgMjMyLCA2NSwgMSwgMjE3LCAxNTMsIDIzMiwgNjUsIDEsIDIxNSwgMTYwLCAyMzIsIDY1LCAxLCAyNTQsIDEzMSwgCisgICAgMjMyLCA2NSwgMSwgMjQ1LCAxNTgsIDIzMiwgNjUsIDEsIDI0MiwgNjcsIDIzMiwgNjUsIDEsIDIxMSwgMTc4LCAyNTAsIAorICAgIDI0NSwgMSwgNjEsIDI1MCwgMjQ1LCAxLCAyMjYsIDk1LCAyNTAsIDI0NSwgMSwgMjQ5LCA2OCwgMjUwLCAyNDUsIDEsIDE1NiwgCisgICAgMjUwLCAyNDUsIDEsIDIxNCwgMTE2LCAyNTAsIDI0NSwgMSwgMTUzLCAyNTAsIDI0NSwgMSwgMjMzLCA2OCwgMjUwLCAyNDUsIAorICAgIDEsIDI1NSwgODQsIDI1MCwgMjQ1LCAxLCAyMjQsIDk5LCAyNTAsIDI0NSwgMSwgMjUzLCAxNjYsIDI1MCwgMjQ1LCAxLCAKKyAgICAxOTQsIDI1MCwgMjQ1LCAxLCA3OCwgMjUwLCAyNDUsIDEsIDI0OCwgMjMxLCAyNTAsIDI0NSwgMSwgMjE3LCAxNTMsIDI1MCwgCisgICAgMjQ1LCAxLCAyMjAsIDEwNiwgMjUwLCAyNDUsIDEsIDIyMCwgMTA1LCAyNTAsIDI0NSwgMSwgMjIyLCA5MywgMjUwLCAyNDUsIAorICAgIDEsIDI1MSwgNzMsIDI1MCwgMjQ1LCAxLCA2OSwgMjUwLCAyNDUsIDEsIDIyOCwgMTE2LCAyNTAsIDI0NSwgMSwgMjExLCAKKyAgICAxNzgsIDI1MCwgMjQ1LCAxLCAyMzAsIDMwLCAyNTAsIDI0NSwgMSwgMjE1LCAxNTksIDI1MCwgMjQ1LCAxLCAyMjYsIDEwOSwgCisgICAgMjUwLCAyNDUsIDEsIDIxOCwgMjI4LCAyNTAsIDI0NSwgMSwgNzQsIDI1MCwgMjQ1LCAxLCA3NiwgMjUwLCAyNDUsIDEsIAorICAgIDIxNCwgMTEzLCAyNTAsIDI0NSwgMSwgMjM1LCAyOSwgMjUwLCAyNDUsIDEsIDIzNSwgMjAsIDI1MCwgMjQ1LCAxLCAyMjksIAorICAgIDE1NSwgMjUwLCAyNDUsIDEsIDIxNCwgMTE4LCAyNTAsIDI0NSwgMSwgMjQzLCAyMDksIDI1MCwgMjQ1LCAxLCAyNDMsIDE0NCwgCisgICAgMjUwLCAyNDUsIDEsIDIxOCwgMTcwLCAyNTAsIDI0NSwgMSwgMjE4LCAxNjksIDI1MCwgMjQ1LCAxLCAyMjksIDg0LCAyNTAsIAorICAgIDI0NSwgMSwgMjM2LCA0MCwgMjUwLCAyNDUsIDEsIDI1MSwgNzIsIDI1MCwgMjQ1LCAxLCAyMTUsIDE2MCwgMjUwLCAyNDUsIAorICAgIDEsIDIxNCwgMTE1LCAyNTAsIDI0NSwgMSwgMjIyLCAxODIsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzNCwgMjUwLCAyNDUsIDEsIAorICAgIDIzMSwgMTMzLCAyNTAsIDI0NSwgMSwgMjMxLCAxMzIsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzMSwgMjUwLCAyNDUsIDEsIDIzMywgCisgICAgNjcsIDI1MCwgMjQ1LCAxLCAyNDUsIDI0MiwgMjUwLCAyNDUsIDEsIDIxNCwgMTE0LCA1NSwgMzIsIDEsIDYxLCA1NSwgMzIsIAorICAgIDEsIDI1MiwgODMsIDU1LCAzMiwgMSwgMjM0LCAxODgsIDU1LCAzMiwgMSwgMjQ4LCA5OCwgNTUsIDMyLCAxLCA3NiwgNTUsIAorICAgIDMyLCAxLCAyMTMsIDI1NSwgNTUsIDMyLCAxLCAyMTAsIDk0LCA1NSwgMzIsIDEsIDI0MSwgMjQ1LCA1NSwgMzIsIDEsIDIxNiwgCisgICAgMTk2LCA1NSwgMzIsIDEsIDc0LCA1NSwgMzIsIDEsIDE3NiwgNTUsIDMyLCAxLCAyNDUsIDE4MiwgNTUsIDMyLCAxLCAyNDUsIAorICAgIDE2NywgNTUsIDMyLCAxLCAyNDUsIDE1OCwgNTUsIDMyLCAxLCAyNDUsIDgzLCA1NSwgMzIsIDEsIDc4LCA1NSwgMzIsIDEsIAorICAgIDIyNSwgMjI0LCA1NSwgMzIsIDEsIDIyMCwgNjUsIDU1LCAzMiwgMSwgMjMzLCAyMjMsIDU1LCAzMiwgMSwgMjQ1LCAxMDAsIAorICAgIDU1LCAzMiwgMSwgMjQ1LCA5MCwgNTUsIDMyLCAxLCAyMTcsIDIzLCA1NSwgMzIsIDEsIDY5LCA1NSwgMzIsIDEsIDI0NSwgCisgICAgMTg1LCA1NSwgMzIsIDEsIDIyNSwgMTM5LCA1NSwgMzIsIDEsIDIzNCwgMTI1LCA1NSwgMzIsIDEsIDI0NSwgMjEwLCA1NSwgCisgICAgMzIsIDEsIDI0NSwgOTIsIDU1LCAzMiwgMSwgMjUwLCAxMzksIDU1LCAzMiwgMSwgMjM2LCA0MCwgNTUsIDMyLCAxLCAyMTQsIAorICAgIDExOCwgNTUsIDMyLCAyMjcsIDIwMiwgMTExLCA1NSwgMzIsIDIyNywgMjAyLCAxOTAsIDU1LCAzMiwgMjI3LCAyMDIsIDIxNiwgCisgICAgMjQ4LCA1NSwgMzIsIDIyNywgMjAyLCAyNDQsIDEyMiwgMjQyLCAxNjAsIDEsIDI1NCwgMjEzLCAyNDIsIDE2MCwgMSwgMjUyLCAKKyAgICAxNzEsIDI0MiwgMTYwLCAxLCAyNDIsIDIxOCwgMjQyLCAxNjAsIDEsIDI0OCwgMjEyLCAyNDIsIDE2MCwgMSwgMjU0LCAyMDksIAorICAgIDI0MiwgMTYwLCAxLCAyMjQsIDgyLCAyNDIsIDE2MCwgMSwgMjM1LCAxNjEsIDI0MiwgMTYwLCAxLCAyNDIsIDQ2LCAyNDIsIAorICAgIDE2MCwgMSwgMjE2LCAxNTksIDI0MiwgMTYwLCAxLCAyNDUsIDE5MSwgMjQyLCAxNjAsIDEsIDIzMywgMTk2LCAyNDIsIDE2MCwgCisgICAgMSwgMjMzLCAxMTksIDI0MiwgMTYwLCAxLCAyMzEsIDE4NCwgMjQyLCAxNjAsIDEsIDIyOSwgMTg5LCAyNDIsIDE2MCwgMSwgCisgICAgMjM1LCAxMjUsIDI0MiwgMTYwLCAxLCAyMTQsIDEzNiwgMjQyLCAxNjAsIDEsIDIyNiwgNzMsIDI0MiwgMTYwLCAxLCAyMjgsIAorICAgIDIwMCwgMjQyLCAxNjAsIDEsIDIyMywgMTY4LCAyNDIsIDE2MCwgMSwgMjIxLCAyMjAsIDI0MiwgMTYwLCAxLCAyMTcsIDUsIAorICAgIDI0MiwgMTYwLCAxLCAyMTEsIDIzNCwgMjQyLCAxNjAsIDEsIDI0NCwgMTg2LCAyNDIsIDE2MCwgMSwgMjM2LCA0NCwgMjQyLCAKKyAgICAxNjAsIDEsIDI0MCwgMjA2LCAyNDIsIDE2MCwgMSwgMjI2LCAxNDMsIDI0MiwgMTYwLCAxLCAyMjgsIDIwNSwgMjQwLCAyMTcsIAorICAgIDIxNCwgMjA5LCAxLCAyNTQsIDE1NSwgMjE0LCAyMDksIDEsIDI1MiwgMzQsIDIxNCwgMjA5LCAxLCAyNDMsIDExNSwgMjE0LCAKKyAgICAyMDksIDEsIDIzNCwgMTM4LCAyMTQsIDIwOSwgMSwgMjQ4LCA2MiwgMjE0LCAyMDksIDEsIDI0MSwgNzUsIDIxNCwgMjA5LCAKKyAgICAxLCAyMTEsIDIyNywgMjE0LCAyMDksIDEsIDIxMCwgODUsIDIxNCwgMjA5LCAxLCAyNDAsIDI0OCwgMjE0LCAyMDksIDEsIAorICAgIDIxNiwgMjMxLCAyMTQsIDIwOSwgMSwgMjEwLCAyMzMsIDIxNCwgMjA5LCAxLCAyMzUsIDAsIDIxNCwgMjA5LCAxLCAyMjAsIAorICAgIDIyLCAyMTQsIDIwOSwgMSwgMjMzLCAxMDQsIDIxNCwgMjA5LCAxLCAyMzEsIDcwLCAyMTQsIDIwOSwgMSwgMjQ4LCAyOSwgCisgICAgMjE0LCAyMDksIDEsIDIyNywgMTk4LCAyMTQsIDIwOSwgMSwgMjEwLCAxMywgMjE0LCAyMDksIDEsIDIyMSwgMjUwLCAyMTQsIAorICAgIDIwOSwgMSwgMjU0LCAyMDUsIDIxNCwgMjA5LCAxLCAyMjQsIDE1MywgMjE0LCAyMDksIDEsIDIyMiwgMjcsIDIxNCwgMjA5LCAKKyAgICAxLCAyMjQsIDM4LCAyMTQsIDIwOSwgMSwgMjIzLCAxNDcsIDIxNCwgMjA5LCAxLCAyMTYsIDIwMCwgMjE0LCAyMDksIDEsIAorICAgIDI0MiwgMjUxLCAyMTQsIDIwOSwgMSwgMTEyLCAyMTQsIDIwOSwgMSwgNzQsIDIxNCwgMjA5LCAxLCA2OSwgMjE0LCAyMDksIAorICAgIDEsIDIxOCwgMTgxLCAyMTQsIDIwOSwgMjExLCAyMDksIDI0NywgMTgwLCA1NSwgMjI1LCAxNzIsIDUsIDYxLCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDc0LCA1NSwgMjI1LCAxNzIsIDUsIDY5LCA1NSwgMjI1LCAxNzIsIDUsIDE3NiwgNTUsIDIyNSwgMTcyLCA1LCAKKyAgICAyMzMsIDIyMywgNTUsIDIyNSwgMTcyLCA1LCAyNDMsIDE0MiwgNTUsIDIyNSwgMTcyLCA1LCAyNDIsIDEyMCwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCAyMTEsIDE2NSwgNTUsIDIyNSwgMTcyLCA1LCAyNTEsIDQxLCA1NSwgMjI1LCAxNzIsIDUsIDIzNSwgMTQ3LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDIzNSwgMTE0LCA1NSwgMjI1LCAxNzIsIDUsIDIxNywgMTA2LCA1NSwgMjI1LCAxNzIsIDUsIAorICAgIDIxNSwgMTE5LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMjI5LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMTEsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgMjQ2LCA4NiwgNTUsIDIyNSwgMTcyLCA1LCAyMTYsIDIwOSwgNTUsIDIyNSwgMTcyLCA1LCAxOTEsIDU1LCAKKyAgICAyMjUsIDE3MiwgNSwgMjUyLCAxOTksIDU1LCAyMjUsIDE3MiwgNSwgMjQ0LCAyMDQsIDU1LCAyMjUsIDE3MiwgNSwgMTk4LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDIyNywgMjQyLCA1NSwgMjI1LCAxNzIsIDUsIDE4NiwgNTUsIDIyNSwgMTcyLCA1LCAyMzAsIAorICAgIDIzNSwgNTUsIDIyNSwgMTcyLCA1LCAyMzAsIDEwNywgNTUsIDIyNSwgMTcyLCA1LCAxOTIsIDU1LCAyMjUsIDE3MiwgNSwgCisgICAgMjE0LCAyNywgNTUsIDIyNSwgMTcyLCA1LCAyMTMsIDE3NiwgNTUsIDIyNSwgMTcyLCA1LCAyMDUsIDU1LCAyMjUsIDE3MiwgCisgICAgNSwgMjIyLCAxNDIsIDU1LCAyMjUsIDE3MiwgNSwgMjMzLCAxNDEsIDU1LCAyMjUsIDE3MiwgNSwgMjA2LCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDIxMCwgMTE2LCA1NSwgMjI1LCAxNzIsIDUsIDIyMCwgMTA0LCA1NSwgMjI1LCAxNzIsIDUsIDIxOCwgMjI1LCAKKyAgICA1NSwgMjI1LCAxNzIsIDUsIDE2MiwgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIDE5NCwgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIAorICAgIDE5MywgNTUsIDIyNSwgMTcyLCA1LCAyNTMsIDE5MiwgNTUsIDIyNSwgMTcyLCA1LCAyMTEsIDE0MiwgNTUsIDIyNSwgMTcyLCAKKyAgICA1LCAyNDgsIDIwOCwgNTUsIDIyNSwgMTcyLCA1LCAyNDgsIDIwNywgNTUsIDIyNSwgMTcyLCA1LCAyNTIsIDE3OCwgNTUsIAorICAgIDIyNSwgMTcyLCA1LCAyNTEsIDkzLCA1NSwgMjI1LCAxNzIsIDIxMSwgMjA5LCAyNDcsIDE4MCwgNTUsIDIyNSwgMTcyLCA1NCwgCisgICAgMTExLCA1NSwgMjI1LCAxNzIsIDU0LCAxMDUsIDU1LCAyMjUsIDE3MiwgNTQsIDIxNiwgMjQ4LCA1NSwgMjI1LCAxNzIsIDU0LCAKKyAgICAyMTUsIDczLCA1NSwgMjI1LCAxNzIsIDU0LCAyNDAsIDIxNywgMTgxLCA2LCAxLCAyMDAsIDc0LCAxODEsIDYsIDEsIDIwMCwgCisgICAgNzYsIDE4MSwgNiwgMSwgMjAwLCA2MSwgMTgxLCA2LCAxLCAyMDAsIDI1NCwgMjE4LCAxODEsIDYsIDEsIDIwMCwgNzgsIAorICAgIDE4MSwgNiwgMSwgMjAwLCAyMjYsIDE4NywgMTgxLCA2LCAxLCAyMTksIDI1MywgNzQsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIAorICAgIDc2LCAxODEsIDYsIDEsIDIxOSwgMjUzLCA2MSwgMTgxLCA2LCAxLCAyMTksIDI1MywgMjU0LCAyMTgsIDE4MSwgNiwgMSwgCisgICAgMjE5LCAyNTMsIDc4LCAxODEsIDYsIDEsIDIxOSwgMjUzLCAyMjYsIDE4NywgMTgxLCA2LCAxLCAyNTMsIDE3NSwgMTgxLCA2LCAKKyAgICAxLCAyMjYsIDEyMCwgMTgxLCA2LCAxLCAyMTEsIDE5NSwgMTgxLCA2LCAxLCAyMTEsIDQ0LCAxODEsIDYsIDEsIDI0MiwgNjcsIAorICAgIDE4MSwgNiwgMSwgMjI1LCAyMTQsIDE4MSwgNiwgMSwgMjUyLCA3NCwgMTgxLCA2LCAxLCAyMTcsIDEyLCAxODEsIDYsIDEsIAorICAgIDI0OCwgODUsIDE4MSwgNiwgMSwgMjUwLCAxMzYsIDE4MSwgNiwgMSwgMjM1LCAxMzAsIDE4MSwgNiwgMSwgMjM0LCAxOTUsIAorICAgIDE4MSwgNiwgMSwgMjQzLCA5MCwgMTgxLCA2LCAxLCAyNDUsIDIxMCwgMTgxLCA2LCAxLCAyMTMsIDI1MCwgMTgxLCA2LCAxLCAKKyAgICAyNDUsIDY3LCAxODEsIDYsIDEsIDIxNiwgMTk1LCAxODEsIDYsIDEsIDI0NSwgOTAsIDE4MSwgNiwgMSwgMjEwLCA5MiwgCisgICAgMTgxLCA2LCAxLCAyNDUsIDgzLCAxODEsIDYsIDEsIDIxMCwgNzMsIDE4MSwgNiwgMSwgMjQ1LCAxMDAsIDE4MSwgNiwgMSwgCisgICAgMjQ1LCAxODIsIDE4MSwgNiwgMSwgMjQ1LCAxNjcsIDE4MSwgNiwgMSwgMjQ1LCAxNTgsIDE4MSwgNiwgMSwgMjQ1LCAxNDYsIAorICAgIDE4MSwgNiwgMSwgMjI2LCAyMjMsIDE4MSwgNiwgMSwgMjQ1LCA0NiwgMTgxLCA0LCAxLCAyMDAsIDc0LCAxODEsIDQsIDEsIAorICAgIDIwMCwgNzYsIDE4MSwgNCwgMSwgMjAwLCA2MSwgMTgxLCA0LCAxLCAyMDAsIDI1NCwgMjE4LCAxODEsIDQsIDEsIDIwMCwgCisgICAgNzgsIDE4MSwgNCwgMSwgMjAwLCAyMjYsIDE4NywgMTgxLCA0LCAxLCAyMTksIDI1MywgNzQsIDE4MSwgNCwgMSwgMjE5LCAKKyAgICAyNTMsIDc2LCAxODEsIDQsIDEsIDIxOSwgMjUzLCA2MSwgMTgxLCA0LCAxLCAyMTksIDI1MywgMjU0LCAyMTgsIDE4MSwgNCwgCisgICAgMSwgMjE5LCAyNTMsIDc4LCAxODEsIDQsIDEsIDIxOSwgMjUzLCAyMjYsIDE4NywgMTgxLCA0LCAxLCAyNTMsIDE3NSwgMTgxLCAKKyAgICA0LCAxLCAyMjYsIDEyMCwgMTgxLCA0LCAxLCAyMTEsIDE5NSwgMTgxLCA0LCAxLCAyMTEsIDQ0LCAxODEsIDQsIDEsIDI0MiwgCisgICAgNjcsIDE4MSwgNCwgMSwgMjI1LCAyMTQsIDE4MSwgNCwgMSwgMjUyLCA3NCwgMTgxLCA0LCAxLCAyMTcsIDEyLCAxODEsIDQsIAorICAgIDEsIDI0OCwgODUsIDE4MSwgNCwgMSwgMjUwLCAxMzYsIDE4MSwgNCwgMSwgMjM1LCAxMzAsIDE4MSwgNCwgMSwgMjM0LCAKKyAgICAxOTUsIDE4MSwgNCwgMSwgMjQzLCA5MCwgMTgxLCA0LCAxLCAyNDUsIDIxMCwgMTgxLCA0LCAxLCAyMTMsIDI1MCwgMTgxLCAKKyAgICA0LCAxLCAyNDUsIDY3LCAxODEsIDQsIDEsIDIxNiwgMTk1LCAxODEsIDQsIDEsIDI0NSwgOTAsIDE4MSwgNCwgMSwgMjEwLCAKKyAgICA5MiwgMTgxLCA0LCAxLCAyNDUsIDgzLCAxODEsIDQsIDEsIDIxMCwgNzMsIDE4MSwgNCwgMSwgMjQ1LCAxMDAsIDE4MSwgNCwgCisgICAgMSwgMjQ1LCAxODIsIDE4MSwgNCwgMSwgMjQ1LCAxNjcsIDE4MSwgNCwgMSwgMjQ1LCAxNTgsIDE4MSwgNCwgMSwgMjQ1LCAKKyAgICAxNDYsIDE4MSwgNCwgMSwgMjI2LCAyMjMsIDE4MSwgNCwgMSwgMjQ1LCA0NiwgMjIwLCA3MSwgMSwgMjI1LCAyMTIsIDIyMCwgCisgICAgNzEsIDEsIDIxNiwgNiwgMjIwLCA3MSwgMSwgMjM0LCA5NywgMjIwLCA3MSwgMSwgMjQ0LCAxNTUsIDIyMCwgNzEsIDEsIAorICAgIDIxNiwgMTczLCAyMjAsIDcxLCAxLCAyMTksIDYwLCAyMjAsIDcxLCAxLCAyMTgsIDE1LCAyMjAsIDcxLCAxLCAyNTAsIDY5LCAKKyAgICAyMjAsIDcxLCAxLCAyMTEsIDQ2LCAyMjAsIDcxLCAxLCAyNDAsIDIxNiwgMjIwLCA3MSwgMSwgMjUyLCAxMywgMjIwLCA3MSwgCisgICAgMSwgMjQ4LCA5NywgMjIwLCA3MSwgMSwgMjQzLCAxMjgsIDIyMCwgNzEsIDEsIDIxMywgMTIzLCAyMjAsIDcxLCAxLCAyMTYsIAorICAgIDE3NywgMjIwLCA3MSwgMSwgMjEwLCAyMSwgMjIwLCA3MSwgMSwgMjMxLCA5NCwgMjIwLCA3MSwgMSwgMjM1LCA1NSwgMjIwLCAKKyAgICA3MSwgMSwgMjExLCAyMjUsIDIyMCwgNzEsIDEsIDI0MiwgNTUsIDIyMCwgNzEsIDEsIDIzMiwgMTQ4LCAyMjAsIDcxLCAxLCAKKyAgICAyMzAsIDE5NCwgMjIwLCA3MSwgMSwgMjM2LCA0NywgMjIwLCA3MSwgMSwgMjQ1LCAyMDksIDIyMCwgNzEsIDEsIDI1MywgCisgICAgMjM5LCAyMjAsIDcxLCAxLCAyNTUsIDAsIDIyMCwgNzEsIDEsIDIyNiwgMjAwLCAyMjAsIDcxLCAxLCAyMTEsIDIxMiwgMjIwLCAKKyAgICA3MSwgMSwgMjI2LCAxMzQsIDIyMCwgNzEsIDEsIDI1NCwgMjE4LCAyMjAsIDcxLCAxLCAyMjIsIDIxMCwgMjIwLCA3MSwgMSwgCisgICAgMjI3LCAxOTgsIDIyMCwgNzEsIDEsIDI0NSwgMjI1LCAyMjAsIDcxLCAxLCAyNTQsIDIyMywgMjIwLCA3MSwgMSwgMjQwLCAKKyAgICAxMTgsIDIyMCwgNzEsIDEsIDIxNCwgMTYzLCAyMjAsIDcxLCAxLCAyMjcsIDIsIDIyMCwgNzEsIDEsIDIyNiwgMTgwLCAyMjAsIAorICAgIDcxLCAxLCAyMjYsIDIyMiwgMjIwLCA3MSwgMSwgMjUzLCAxNzgsIDIyMCwgNzEsIDEsIDI1NCwgMjcsIDIyMCwgNzEsIDEsIAorICAgIDIyNiwgMTYyLCAyMjAsIDcxLCAxLCAyNTQsIDIwMSwgMjIwLCA3MSwgMSwgMjQ1LCA5NCwgMjIwLCA3MSwgMSwgMjU0LCA1LCAKKyAgICAyMjAsIDcxLCAxLCAyNDUsIDIzNSwgMjIwLCA3MSwgMSwgMjQwLCAxMjUsIDIyMCwgNzEsIDEsIDIxMSwgMTMsIDIyNiwgCisgICAgMTQ1LCAxLCAyNTQsIDE3OSwgMjI2LCAxNDUsIDEsIDI1MiwgMTk5LCAyMjYsIDE0NSwgMSwgMjE3LCAxMDYsIDIyNiwgMTQ1LCAKKyAgICAxLCAyMzUsIDE0NywgMjI2LCAxNDUsIDEsIDIxMSwgMTY1LCAyMjYsIDE0NSwgMSwgMjM0LCAxMzgsIDIyNiwgMTQ1LCAxLCAKKyAgICAyNDgsIDg0LCAyMjYsIDE0NSwgMSwgMjA1LCAyMjYsIDE0NSwgMSwgMjA2LCAyMjYsIDE0NSwgMSwgMjIwLCAyOCwgMjI2LCAKKyAgICAxNDUsIDEsIDI0OCwgMzMsIDIyNiwgMTQ1LCAxLCAyNTAsIDIyMywgMjI2LCAxNDUsIDEsIDI0MywgMTQyLCAyMjYsIDE0NSwgCisgICAgMSwgMjQ0LCAyMDQsIDIyNiwgMTQ1LCAxLCAyMjQsIDg5LCAyMjYsIDE0NSwgMSwgMjM1LCAxNSwgMjI2LCAxNDUsIDEsIAorICAgIDIzMywgMTM2LCAyMjYsIDE0NSwgMSwgMjMwLCAyMDUsIDIyNiwgMTQ1LCAxLCAyMjcsIDE4MiwgMjI2LCAxNDUsIDEsIDIxMiwgCisgICAgMzAsIDIyNiwgMTQ1LCAxLCAxNjIsIDIyNiwgMTQ1LCAxLCAxOTIsIDIyNiwgMTQ1LCAxLCA2MSwgMjI2LCAxNDUsIDEsIDc2LCAKKyAgICAyMjYsIDE0NSwgMSwgNzQsIDIyNiwgMTQ1LCAxLCA3OCwgMjI2LCAxNDUsIDEsIDY5LCAyMjYsIDE0NSwgMSwgMjU1LCA4MiwgCisgICAgMjI2LCAxNDUsIDEsIDI0NSwgMjE3LCAyMjYsIDE0NSwgMSwgMjI2LCAxODcsIDIyNiwgMTQ1LCAyMSwgMjEwLCA4NiwgMjI2LCAKKyAgICAxNDUsIDIxLCAxMTEsIDIyNiwgMTQ1LCAyMSwgMTA1LCAyMjYsIDE0NSwgMjEsIDE1OCwgMjI2LCAxNDUsIDIxLCAxNjEsIAorICAgIDIyNiwgMTQ1LCAyMSwgMTkwLCAyMjYsIDE0NSwgMjEsIDE5NSwgMjI2LCAxNDUsIDIxLCAxOTksIDIyNiwgMTQ1LCAyMSwgCisgICAgMTk2LCAyMjYsIDE0NSwgMjEsIDIwMSwgMjQ5LCA3NSwgMywgNjEsIDI0OSwgNzUsIDMsIDc2LCAyNDksIDc1LCAzLCA3NCwgCisgICAgMjQ5LCA3NSwgMywgNzgsIDI0OSwgNzUsIDMsIDY5LCAyNDksIDc1LCAzLCAyMzUsIDE0NywgMjQ5LCA3NSwgMywgMjM1LCAKKyAgICA3NCwgMjQ5LCA3NSwgMywgMTc2LCAyNDksIDc1LCAzLCAyMzQsIDE4OCwgMjQ5LCA3NSwgMywgMjM0LCA5OCwgMjQ5LCA3NSwgCisgICAgMywgMjM0LCAzNCwgMjQ5LCA3NSwgMywgMjMzLCAyMjMsIDI0OSwgNzUsIDMsIDIzMywgMTQxLCAyNDksIDc1LCAzLCAyMzMsIAorICAgIDY0LCAyNDksIDc1LCAzLCAyMzIsIDI0NywgMjQ5LCA3NSwgMywgMjMyLCAxNjIsIDI0OSwgNzUsIDMsIDIzMiwgMTAzLCAKKyAgICAyNDksIDc1LCAzLCAxODYsIDI0OSwgNzUsIDMsIDIzMSwgOTYsIDI0OSwgNzUsIDMsIDIzMCwgMjM1LCAyNDksIDc1LCAzLCAKKyAgICAyMzAsIDE2NiwgMjQ5LCA3NSwgMywgMjMwLCAxMDcsIDI0OSwgNzUsIDMsIDE5OCwgMjQ5LCA3NSwgMywgMjI5LCAxMTIsIAorICAgIDI0OSwgNzUsIDMsIDIyOCwgMjM4LCAyNDksIDc1LCAzLCAyMjgsIDc5LCAyNDksIDc1LCAzLCAyMjcsIDI0MiwgMjQ5LCA3NSwgCisgICAgMywgMTkxLCAyNDksIDc1LCAzLCAyMjUsIDIyNCwgMjQ5LCA3NSwgMywgMjI1LCAxMTEsIDI0OSwgNzUsIDMsIDIyNSwgMTksIAorICAgIDI0OSwgNzUsIDMsIDIyNCwgMTUzLCAyNDksIDc1LCAzLCAyMDUsIDI0OSwgNzUsIDMsIDIyMywgMTMxLCAyNDksIDc1LCAzLCAKKyAgICAyMjMsIDM4LCAyNDksIDc1LCAzLCAyMjIsIDIxMywgMjQ5LCA3NSwgMywgMjIyLCAxNDIsIDI0OSwgNzUsIDMsIDIwNiwgCisgICAgMjQ5LCA3NSwgMywgMjIxLCAxODMsIDI0OSwgNzUsIDMsIDIxOSwgMTkzLCAyNDksIDc1LCAzLCAyMTksIDYwLCAyNDksIDc1LCAKKyAgICAzLCAyMTgsIDg0LCAyNDksIDc1LCAzLCAyMTcsIDEwNiwgMjQ5LCA3NSwgMywgMjE3LCAyMywgMjQ5LCA3NSwgMywgMjE2LCAKKyAgICAxMTgsIDI0OSwgNzUsIDMsIDExMiwgMjQ5LCA3NSwgMywgMjE1LCAxMTksIDI0OSwgNzUsIDMsIDIxMiwgNjUsIDI0OSwgNzUsIAorICAgIDMsIDIxMiwgMjIsIDI0OSwgNzUsIDMsIDIxMSwgMjUwLCAyNDksIDc1LCAzLCAyMTEsIDIyNywgMjQ5LCA3NSwgMywgMjExLCAKKyAgICAxNjUsIDI0OSwgNzUsIDMsIDIxMSwgMTYyLCAyNDksIDc1LCAzLCAyMTAsIDExNiwgMjQ5LCA3NSwgMywgMjEwLCAyMywgCisgICAgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTQsIDE3NywgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTIsIDMzLCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDEsIDI0MiwgMjA4LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI0OCwgMTk2LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI0MSwgCisgICAgMjQ1LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxMiwgMzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjEwLCA5NywgMjM2LCA4LCAKKyAgICAyNTQsIDM1LCAxLCAyNDEsIDIwMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTYsIDIyNywgMjM2LCA4LCAyNTQsIDM1LCAxLCAKKyAgICAyMTAsIDIzMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMzQsIDIzMSwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMzMsIDk5LCAyMzYsIAorICAgIDgsIDI1NCwgMzUsIDEsIDIzMSwgNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI3LCAxOTgsIDIzNiwgOCwgMjU0LCAzNSwgMSwgCisgICAgMjIxLCAyNTEsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjUzLCAxNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI1LCAyMjQsIAorICAgIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjIyLCAyNiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjQsIDM3LCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDEsIDIyMywgNzAsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjIwLCAyMiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTcsIDM3LCAKKyAgICAyMzYsIDgsIDI1NCwgMzUsIDIyMSwgMTc1LCA1MCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTExLCAyMzYsIDgsIDI1NCwgMzUsIAorICAgIDU0LCAxMDUsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDE1OCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMjE2LCAyNDgsIDIzNiwgOCwgCisgICAgMjU0LCAzNSwgNTQsIDIxNSwgNzMsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDEyMywgMjQwLCAyMTcsIDIzNiwgOCwgMjU0LCAKKyAgICAzNSwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjI1LCAxMjIsIAorICAgIDEsIDI1NCwgMTc0LCAyMjUsIDEyMiwgMSwgMjUyLCAzNiwgMjI1LCAxMjIsIDEsIDI0MywgMTE2LCAyMjUsIDEyMiwgMSwgCisgICAgMjQ4LCA2NCwgMjI1LCAxMjIsIDEsIDI0MSwgMjQ1LCAyMjUsIDEyMiwgMSwgMjEyLCAzNywgMjI1LCAxMjIsIDEsIDIxMCwgCisgICAgMTEwLCAyMjUsIDEyMiwgMSwgMjQxLCAyMDQsIDIyNSwgMTIyLCAxLCAyMTYsIDIzMSwgMjI1LCAxMjIsIDEsIDIxMCwgMjMzLCAKKyAgICAyMjUsIDEyMiwgMSwgMjM1LCAwLCAyMjUsIDEyMiwgMSwgMjMzLCAxMDUsIDIyNSwgMTIyLCAxLCAyMzEsIDcwLCAyMjUsIAorICAgIDEyMiwgMSwgMjI3LCAxOTgsIDIyNSwgMTIyLCAxLCAyMjAsIDE0NiwgMjI1LCAxMjIsIDEsIDI1NCwgMjA1LCAyMjUsIDEyMiwgCisgICAgMSwgMjI1LCAyMjQsIDIyNSwgMTIyLCAxLCAyMjIsIDI3LCAyMjUsIDEyMiwgMSwgMjI0LCA0MiwgMjI1LCAxMjIsIDEsIAorICAgIDIyMiwgMTkxLCAyMjUsIDEyMiwgMSwgMjIwLCAyMiwgMjI1LCAxMjIsIDEsIDIxNywgNDIsIDIyNSwgMTIyLCA1NCwgMTExLCAKKyAgICAyMjUsIDEyMiwgNTQsIDIxNiwgMjQ4LCAyMjUsIDEyMiwgNTQsIDIxNSwgNzMsIDIyNSwgMTIyLCA1NCwgMTIzLCAyNDAsIAorICAgIDIxNywgMjI1LCAxMjIsIDU0LCAxMDUsIDIyNSwgMTIyLCA1NCwgMTU4LCAyMjUsIDEyMiwgMjExLCAyMDksIDIyMCwgMTM5LCAKKyAgICAyMzIsIDY0LCAxLCA2MSwgMjMyLCA2NCwgMSwgMjUzLCAxNjYsIDIzMiwgNjQsIDEsIDI0MywgMjA5LCAyMzIsIDY0LCAxLCAKKyAgICAyNDksIDY4LCAyMzIsIDY0LCAxLCA3NiwgMjMyLCA2NCwgMSwgMjE0LCAxMDUsIDIzMiwgNjQsIDEsIDc0LCAyMzIsIDY0LCAKKyAgICAxLCAyMTEsIDExNywgMjMyLCA2NCwgMSwgMjM1LCAyOSwgMjMyLCA2NCwgMSwgMTU2LCAyMzIsIDY0LCAxLCAxOTQsIDIzMiwgCisgICAgNjQsIDEsIDIzMCwgMzAsIDIzMiwgNjQsIDEsIDc4LCAyMzIsIDY0LCAxLCAxNTMsIDIzMiwgNjQsIDEsIDIxOCwgMjI4LCAKKyAgICAyMzIsIDY0LCAxLCAyMTcsIDE1MywgMjMyLCA2NCwgMSwgNjksIDIzMiwgNjQsIDEsIDI0NSwgMTQsIDIzMiwgNjQsIDEsIAorICAgIDIyNCwgOTksIDIzMiwgNjQsIDEsIDIyMiwgOTMsIDIzMiwgNjQsIDEsIDIxNSwgMTYwLCAyMzIsIDY0LCAxLCAyNTQsIDEzMSwgCisgICAgMjMyLCA2NCwgMSwgMjQ1LCAxNTgsIDIzMiwgNjQsIDEsIDIzMiwgNjcsIDIzMiwgNjQsIDEsIDIyOCwgMTE2LCAyMzIsIDY0LCAKKyAgICAxLCAyNTEsIDc0LCAyMzIsIDY0LCAyMTUsIDIyMywgNzksIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA2MSwgMjMxLCA1MywgCisgICAgMjQxLCAxODEsIDEsIDc2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgNzQsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA3OCwgMjMxLCAKKyAgICA1MywgMjQxLCAxODEsIDEsIDE5MiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxMiwgNjUsIDIzMSwgNTMsIDI0MSwgMTgxLCAKKyAgICAxLCAyNTIsIDE5OSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDI1MiwgMTk4LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTkxLCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTg2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTk4LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjI5LCAyMzMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjksIDExMiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyOSwgCisgICAgMTExLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjA1LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIzLCAxOTAsIDIzMSwgNTMsIAorICAgIDI0MSwgMTgxLCAxLCAyMzMsIDE0MSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIzNCwgMTM4LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjQxLCAxOTYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMDYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjIsIDM1LCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIxLCAxODMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxNzYsIDIzMSwgNTMsIDI0MSwgCisgICAgMTgxLCAxLCAyMjQsIDkxLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjE3LCAxMDYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAKKyAgICAyMTcsIDEwNSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxNywgMjMsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTcsIDIyLCAKKyAgICAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTEyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjQ4LCAyMjksIDIzMSwgNTMsIDI0MSwgCisgICAgMTgxLCAxNiwgMjEzLCAxNzAsIDIzMSwgNTMsIDI0MSwgMTgxLCAxNiwgMjEzLCAxNjksIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKKyAgICA2MSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDc2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgNzQsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCA3OCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5MiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIxMiwgNjUsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNTIsIDE5OSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5MSwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDE4NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE5OCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIyOSwgMTEyLCAKKyAgICAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjA1LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjMzLCAxNDEsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCAyMzQsIDEzOCwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI0MSwgMTk2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgMjA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjU0LCAzMSwgMjA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjIxLCAxODMsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxNzYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMjQsIDkxLCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgMjE3LCAxMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMTcsIDIzLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgMTEyLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjQ4LCAyMjksIDIzMSwgNTMsIDI0OSwgMTAyLCAyMzIsIDE1MSwgMjIyLCAKKyAgICAyMTksIDIzMSwgNTMsIDI0OSwgMTAyLCAyMzIsIDE1MSwgMjM2LCAxMywgMjM0LCAxMjYsIDEsIDYxLCAyMzQsIDEyNiwgMjUsIAorICAgIDUsIDc0LCAyMzQsIDEyNiwgMjUsIDUsIDY5LCAyMzQsIDEyNiwgMjUsIDUsIDE0OSwgMTUzLCAyMzQsIDEyNiwgMjUsIDUsIAorICAgIDc2LCAyMzQsIDEyNiwgMjUsIDUsIDc4LCAyMzQsIDEyNiwgMjUsIDIzMywgMjksIDc5LCAyMzQsIDEyNiwgNSwgNTIsIDIyMiwgCisgICAgMjM3LCA1MSwgMjM0LCAxMjYsIDUsIDI1NCwgODMsIDIzNCwgMTI2LCA1LCAyMTMsIDE0NywgMjM0LCAxMjYsIDEsIDE3NiwgCisgICAgMjM0LCAxMjYsIDEsIDIzNCwgMTM4LCAyMzQsIDEyNiwgMSwgMjQzLCAxNDIsIDIzNCwgMTI2LCAxLCAyNDMsIDAsIDIzNCwgCisgICAgMTI2LCAxLCAyNTEsIDQxLCAyMzQsIDEyNiwgMSwgMjUwLCAxNjUsIDIzNCwgMTI2LCAxLCAyMzUsIDE0NywgMjM0LCAxMjYsIAorICAgIDEsIDIyNywgMTY5LCAyMzQsIDEyNiwgMSwgMjE1LCAxNTcsIDIzNCwgMTI2LCAxLCAyMTUsIDE0NSwgMjM0LCAxMjYsIDEsIAorICAgIDI0OCwgMTQzLCAyMzQsIDEyNiwgMSwgMjQ4LCAxMjcsIDIzNCwgMTI2LCAxLCAyMjgsIDExNSwgMjM0LCAxMjYsIDEsIDIxNywgCisgICAgMTA2LCAyMzQsIDEyNiwgMSwgMjE2LCAyMDksIDIzNCwgMTI2LCAxLCAyNDgsIDIyOSwgMjM0LCAxMjYsIDEsIDI0OCwgMzMsIAorICAgIDIzNCwgMTI2LCAxLCAxOTgsIDIzNCwgMTI2LCAxLCAxOTEsIDIzNCwgMTI2LCAxLCAyMjUsIDE1MCwgMjM0LCAxMjYsIDEsIAorICAgIDI1MiwgMTk5LCAyMzQsIDEyNiwgMSwgMjUyLCAyNiwgMjM0LCAxMjYsIDEsIDE4NiwgMjM0LCAxMjYsIDEsIDE5MiwgMjM0LCAKKyAgICAxMjYsIDEsIDIwNSwgMjM0LCAxMjYsIDEsIDIzMywgMTQxLCAyMzQsIDEyNiwgMSwgMjE0LCAyNywgMjM0LCAxMjYsIDEsIAorICAgIDIyMCwgMTA0LCAyMzQsIDEyNiwgMSwgMjE4LCAyMjUsIDIzNCwgMTI2LCAxLCAyMDYsIDIzNCwgMTI2LCAxLCAyMTAsIDExNiwgCisgICAgMjM0LCAxMjYsIDEsIDE2MiwgMjM0LCAxMjYsIDEsIDIzNCwgNTIsIDIzNCwgMTI2LCAxLCAyMTUsIDEyNSwgMjM0LCAxMjYsIAorICAgIDUsIDI1MiwgMTQ5LCA0OCwgMjM0LCAxMjYsIDUsIDI1MCwgMjI5LCAyMzQsIDEyNiwgNSwgNTksIDUxLCAyMzQsIDEyNiwgCisgICAgMjEzLCAxNTIsIDIzNCwgMTI2LCAyMSwgMTExLCAyMzQsIDEyNiwgMjEsIDEwNSwgMjM0LCAxMjYsIDIxLCAxNTgsIDIzNCwgCisgICAgMTI2LCAyMSwgMTYxLCAyMzQsIDEyNiwgNTQsIDIxNiwgMjQ4LCAyMzQsIDEyNiwgNTQsIDIxNSwgNzMsIDIzNCwgMTI2LCAKKyAgICA1NCwgMTIzLCAyNDAsIDIxNywgMjM0LCAxMjYsIDU0LCAxMjMsIDIxNiwgMTQ4LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI0NywgCisgICAgMTI4LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDQsIDI1MCwgNDMsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjUwLCA0MywgMjM0LCAKKyAgICAxMjYsIDIyNCwgMTQ0LCAyNDksIDE0NSwgMTMwLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDIzMSwgMTg1LCAyMzQsIDEyNiwgCisgICAgMjI0LCAxNDQsIDIzMiwgMTIxLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI0OCwgMTg2LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDUyLCAKKyAgICAyNDgsIDE4NiwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyMzIsIDIxMywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MSwgCisgICAgMjQ1LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjMzLCA5OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MSwgMjAyLCAKKyAgICA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjMxLCA3MCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyNCwgMzcsIDU1LCAKKyAgICAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTIsIDMwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIwLCAyMiwgNTUsIDIxOSwgCisgICAgMzAsIDI1NCwgNDYsIDEsIDIyMywgNzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNTIsIDMzLCA1NSwgMjE5LCAzMCwgCisgICAgMjU0LCA0NiwgMSwgMjE3LCAzNywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyMSwgMjI4LCA1NSwgMjE5LCAzMCwgMjU0LCAKKyAgICA0NiwgMSwgMjM0LCAyMzEsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjcsIDE5OCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIAorICAgIDEsIDIzNCwgMTIyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIyLCAyNiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIAorICAgIDIyMSwgMjUxLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ0LCAxNjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAKKyAgICAyNTQsIDE3OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI1MywgMTY5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgCisgICAgMjQ4LCAzMCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MiwgMjA4LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ4LCAKKyAgICAxOTYsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDIsIDI0NSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgCisgICAgMjI3LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjEwLCA5NiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0OCwgMjcsIAorICAgIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTAsIDIzMiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgMTk4LCA1NSwgCisgICAgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAxNzksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCA1NCwgMTExLCA1NSwgMjE5LCAKKyAgICAzMCwgMjU0LCA0NiwgNTQsIDI0NCwgMTIyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMTMyLCAyMzUsIDI0NSwgMjUzLCAxODAsIAorICAgIDEsIDYxLCAyNTMsIDE4MCwgMSwgMjU1LCA4MiwgMjUzLCAxODAsIDEsIDI1NCwgODEsIDI1MywgMTgwLCAxLCAyNTUsIDQxLCAKKyAgICAyNTMsIDE4MCwgMSwgMjU0LCAxMzEsIDI1MywgMTgwLCAxLCAyNTUsIDQyLCAyNTMsIDE4MCwgMSwgMjU0LCAyNTIsIDI1MywgCisgICAgMTgwLCAxLCAyNTQsIDI0OCwgMjUzLCAxODAsIDEsIDc2LCAyNTMsIDE4MCwgMSwgMjQ1LCAyMTcsIDI1MywgMTgwLCAxLCAKKyAgICA3OCwgMjUzLCAxODAsIDEsIDIyNiwgMTg3LCAyNTMsIDE4MCwgMSwgNzQsIDI1MywgMTgwLCAxLCAyMzYsIDQwLCAyNTMsIAorICAgIDE4MCwgMSwgNjksIDI1MywgMTgwLCAxLCAyMTQsIDExOCwgMjUzLCAxODAsIDEsIDIzNCwgMTg4LCAyNTMsIDE4MCwgMSwgCisgICAgMjExLCAxNjIsIDI1MywgMTgwLCAxLCAyMTEsIDEyOCwgMjUzLCAxODAsIDEsIDIxMSwgMTM3LCAyNTMsIDE4MCwgMSwgMjQzLCAKKyAgICA2OSwgMjUzLCAxODAsIDEsIDI0MywgMzEsIDI1MywgMTgwLCAxLCAyNDIsIDI0MywgMjUzLCAxODAsIDEsIDI1MCwgMTk4LCAKKyAgICAyNTMsIDE4MCwgMSwgMjM1LCAxMzIsIDI1MywgMTgwLCAxLCAyMTcsIDIzLCAyNTMsIDE4MCwgMSwgMjE2LCAxOTYsIDI1MywgCisgICAgMTgwLCAxLCAyNDgsIDk4LCAyNTMsIDE4MCwgMSwgMjQ4LCAyNSwgMjUzLCAxODAsIDEsIDIxNSwgMTUyLCAyNTMsIDE4MCwgCisgICAgMSwgMjI1LCAyMjQsIDI1MywgMTgwLCAxLCAyNDQsIDE2MiwgMjUzLCAxODAsIDEsIDI1MiwgODMsIDI1MywgMTgwLCAxLCAKKyAgICAyNTIsIDIyLCAyNTMsIDE4MCwgMSwgMjI5LCA2OSwgMjUzLCAxODAsIDEsIDIyOCwgMjQ0LCAyNTMsIDE4MCwgMSwgMjI4LCAKKyAgICAyNDUsIDI1MywgMTgwLCAxLCAyMjksIDExMiwgMjUzLCAxODAsIDEsIDIyNywgMTYwLCAyNTMsIDE4MCwgMSwgMjI4LCAxMTAsIAorICAgIDI1MywgMTgwLCAxLCAyMzEsIDk2LCAyNTMsIDE4MCwgMSwgMjQxLCAxMjMsIDI1MywgMTgwLCAxLCAyMTAsIDE2NiwgMjUzLCAKKyAgICAxODAsIDEsIDIxMSwgNDcsIDI1MywgMTgwLCAxLCAyMTMsIDI1NSwgMjUzLCAxODAsIDEsIDIyMywgMTMxLCAyNTMsIDE4MCwgCisgICAgMSwgMjMzLCA2NCwgMjUzLCAxODAsIDEsIDIyMSwgMTgzLCAyNTMsIDE4MCwgMSwgMjEwLCA5NCwgMjUzLCAxODAsIDEsIAorICAgIDIyMCwgNjUsIDI1MywgMTgwLCAxLCAyMTAsIDc0LCAyNTMsIDE4MCwgMSwgMjE5LCAyMDAsIDI1MywgMTgwLCAxLCAyMTgsIAorICAgIDE5NSwgMjUzLCAxODAsIDEsIDI0MSwgMjQ1LCAyNTMsIDE4MCwgMjU1LCAzMCwgNzksIDIxNiwgODAsIDExMywgMTcwLCAKKyAgICAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCA0LCAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMjMzLCA5MSwgCisgICAgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDIzMywgOTEsIDEyMywgNTksIDExNSwgMTEzLCAxNzAsIDIyNCwgCisgICAgMTQzLCAyMzMsIDkxLCAxMTMsIDIyMiwgMjM1LCAxMTUsIDEyMywgMjIyLCAyMzcsIDIyNCwgMTQzLCAyMzMsIDkxLCAxMjMsIAorICAgIDIyMiwgMjM3LCAxMTUsIDExMywgMjIyLCAyMzUsIDIyNCwgMTQzLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTQsIDE3NywgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjUyLCAzMywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQyLCAyMDgsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDEsIDI0OCwgMTk2LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDEsIDI0NSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgCisgICAgMjEyLCAzMCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjEwLCA5NywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQxLCAyMDIsIAorICAgIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxNiwgMjI3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTAsIDIzMiwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgMSwgMjM0LCAyMzEsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIzMywgOTksIDIzNSwgMjI1LCAyMjYsIDIsIDEsIAorICAgIDIzMSwgNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNywgMTk4LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjEsIDI1MSwgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjUzLCAxNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNSwgMjI0LCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCAxLCAyMjIsIDI2LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjQsIDM3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAKKyAgICAyMjMsIDcwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjAsIDIyLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTcsIDM3LCAyMzUsIAorICAgIDIyNSwgMjI2LCAyLCA1NCwgMTExLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTA1LCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgCisgICAgMTU4LCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTYxLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMjE2LCAyNDgsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDU0LCAyMTUsIDczLCAyMzUsIDIyNSwgMjI2LCAyLCA1NCwgMTIzLCAyNDAsIDIxNywgMjM1LCAyMjUsIDIyNiwgCisgICAgMiwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNTQsIDE3NywgMjM1LCAyMjUsIDIyNiwgNzYsIAorICAgIDEsIDI1MiwgMzMsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDIsIDIwOCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0OCwgCisgICAgMTk2LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQxLCAyNDUsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTIsIDI5LCAyMzUsIAorICAgIDIyNSwgMjI2LCA3NiwgMSwgMjEwLCA5NywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0MSwgMjAyLCAyMzUsIDIyNSwgMjI2LCAKKyAgICA3NiwgMSwgMjE2LCAyMjcsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTAsIDIzMiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIAorICAgIDIzNCwgMjMxLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjMzLCA5OSwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIzMSwgNjksIAorICAgIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjcsIDE5OCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyMSwgMjUxLCAyMzUsIDIyNSwgCisgICAgMjI2LCA3NiwgMSwgMjI1LCAyMjQsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjIsIDI2LCAyMzUsIDIyNSwgMjI2LCA3NiwgCisgICAgMSwgMjIwLCAyMiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxNywgMzcsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTExLCAKKyAgICAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDEwNSwgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxNTgsIDIzNSwgMjI1LCAyMjYsIAorICAgIDc2LCA1NCwgMTYxLCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDIxNiwgMjQ4LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDIxNSwgCisgICAgNzMsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTIzLCAyNDAsIDIxNywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMjMsIAorICAgIDIxNiwgMTQ4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgNjEsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDYxLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNTQsIDI1MiwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDc0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCA3NCwgNTUsIAorICAgIDIwMiwgMSwgMjExLCAzNywgNzYsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCA3OCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgCisgICAgMjM4LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDIzOCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NSwgMzQsIDU1LCAKKyAgICAyMDIsIDEsIDIxMSwgMzcsIDI1NSwgMzQsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI1MSwgNTUsIDIwMiwgMSwgCisgICAgMjExLCAzNywgMjU0LCAyNTEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIyNSwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjU0LCAyMjUsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI0NiwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyNDYsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTUsIDgsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NSwgOCwgNTUsIDIwMiwgMSwgCisgICAgMjI2LCAxNTMsIDI1NCwgMjUwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAyMCwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjQ1LCAyMCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1MywgMTc1LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDE3NSwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjMzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDIzMywgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI1NCwgMjQ0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDI0NCwgNTUsIDIwMiwgMSwgMjI2LCAKKyAgICAxNTMsIDIyNiwgMjM3LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDIzNywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgCisgICAgMTg3LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDE4NywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjQzLCA1NSwgCisgICAgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNjksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE2NywgNTUsIDIwMiwgMSwgCisgICAgMjI2LCAxNTMsIDI1NCwgMTMxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNDEsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgMjQxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxMzksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTM5LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNTUsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTU1LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjQ1LCAxMjYsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgMTI2LCA1NSwgMjAyLCAxLCAyMTEsIAorICAgIDM3LCAyNTQsIDEyMywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTQ2LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIAorICAgIDI0MCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTE2LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAxNzksIDU1LCAKKyAgICAyMDIsIDEsIDIyNiwgMTUzLCAyNDAsIDEyMCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMjIzLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNDUsIDIyMywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgNTMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgNTMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMzUsIDE4OCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjM1LCAxODgsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIDE2MywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjI2LCAxNjMsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNTQsIDQ5LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDQ5LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgCisgICAgMjU0LCAyMzksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTMsIDI0NSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjM3LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjUzLCAyMzksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMjM5LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjQ1LCA4MywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCA4MywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIAorICAgIDI1MywgMjE0LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDIxNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjM0LCAKKyAgICA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDIzNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgMTQ0LCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjUyLCAxMzMsIDIyMiwgMTI5LCAyMSwgMTExLCAyMjIsIDEyOSwgMjEsIDEwNSwgMjIyLCAxMjksIAorICAgIDIxLCAxNTgsIDIyMiwgMTI5LCAyMSwgMTYxLCAyMjIsIDEyOSwgMjEsIDE5MCwgMjIyLCAxMjksIDIxLCAxOTUsIDIyMiwgCisgICAgMTI5LCAyMSwgMTk5LCAyMjIsIDEyOSwgMjEsIDE5NiwgMjIyLCAxMjksIDIxLCAyMDEsIDIyMiwgMTI5LCA1NCwgMjE2LCAKKyAgICAyNDgsIDIyMiwgMTI5LCA1NCwgMjE1LCA3MywgMjIyLCAxMjksIDU0LCAyMTYsIDE2MywgMjIyLCAxMjksIDU0LCAyNDQsIAorICAgIDIzLCAyMjIsIDEyOSwgNTQsIDI0NCwgMTIyLCAyMjIsIDEyOSwgNTQsIDIxOSwgMTEzLCAyMjIsIDEyOSwgNTQsIDIyMCwgCisgICAgMTE4LCAyMjIsIDEyOSwgNTQsIDI0NSwgMTkyLCAyMjIsIDEyOSwgNTQsIDIyOCwgMjAwLCAyMjIsIDEyOSwgNTQsIDEyMywgCisgICAgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMTEzLCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAxMzQsIDI0MCwgMjE3LCAyMjIsIAorICAgIDEyOSwgNTQsIDI0NCwgMTksIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDI0NCwgODksIDI0MCwgMjE3LCAyMjIsIDEyOSwgCisgICAgNTQsIDIxOSwgMTI3LCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAyMjAsIDEyNCwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgCisgICAgMjQ1LCAyMDEsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDIyOCwgMjA1LCAyNDAsIDIxNywgMjIyLCAxMjksIDI0NCwgMTAsIAorICAgIDEyMywgMjQyLCAzNCwgMjIyLCAxMjksIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjIyLCAxMjksIDI0NCwgMTAsIDEyMywgCisgICAgMjE2LCAxNjksIDIyMiwgMTI5LCAyNDQsIDEwLCAxMTMsIDIxNiwgMTY3LCAxMTgsIDUsIDI1MSwgNywgMTE4LCA1LCAyNTQsIAorICAgIDgzLCAxMTgsIDUsIDIxMywgMTQ3LCAxMTgsIDUsIDIzNSwgMTA4LCAxMTgsIDUsIDIxNCwgMTYxLCAxMTgsIDEsIDYxLCAKKyAgICAxMTgsIDEsIDI1NSwgODIsIDExOCwgMSwgNzQsIDExOCwgMSwgMjM2LCA0MCwgMTE4LCAxLCA2OSwgMTE4LCAxLCAyMTQsIAorICAgIDExOCwgMTE4LCAxLCAxNDksIDE1MywgMTE4LCAxLCAxNDksIDIyMiwgMTgyLCAxMTgsIDEsIDE0OSwgMTU2LCAxMTgsIDEsIAorICAgIDE0OSwgMjMyLCAxOTEsIDExOCwgMSwgNzYsIDExOCwgMSwgMjU0LCAyMTAsIDExOCwgMSwgNzgsIDExOCwgMSwgMjUzLCAKKyAgICAyMDAsIDExOCwgMSwgMTc2LCAxMTgsIDEsIDIzNCwgMTM4LCAxMTgsIDEsIDI0MywgMTQyLCAxMTgsIDEsIDI0MywgMCwgCisgICAgMTE4LCAxLCAyMjksIDgyLCAxMTgsIDEsIDI1MSwgNDEsIDExOCwgMSwgMjUwLCAxNjUsIDExOCwgMSwgMjM1LCAxNDcsIAorICAgIDExOCwgMSwgMjM1LCAxMjAsIDExOCwgMSwgMjI3LCAxNjksIDExOCwgMSwgMjE1LCAxNTcsIDExOCwgMSwgMjE1LCAxNDUsIAorICAgIDExOCwgMSwgMjQ4LCAxNDMsIDExOCwgMSwgMjQ4LCAxMjcsIDExOCwgMSwgMjI4LCAxMTUsIDExOCwgMSwgMjE3LCAxMDYsIAorICAgIDExOCwgMSwgMjE2LCAyMDksIDExOCwgMSwgMjQ4LCAyMjksIDExOCwgMSwgMjQ4LCAzMywgMTE4LCAxLCAxOTgsIDExOCwgMSwgCisgICAgMTkxLCAxMTgsIDEsIDIyNSwgMTUwLCAxMTgsIDEsIDI1MiwgMTk5LCAxMTgsIDEsIDI1MiwgMjYsIDExOCwgMSwgMTg2LCAKKyAgICAxMTgsIDEsIDE5MiwgMTE4LCAxLCAyMDUsIDExOCwgMSwgMjMzLCAxNDEsIDExOCwgMSwgMjE0LCAyNywgMTE4LCAxLCAyMjAsIAorICAgIDEwNCwgMTE4LCAxLCAyMTgsIDIyNSwgMTE4LCAxLCAyMDYsIDExOCwgMSwgMTYyLCAxMTgsIDEsIDIzMiwgMTkwLCAxMTgsIAorICAgIDEsIDU1LCAzNiwgMjMyLCAxODEsIDExOCwgMSwgNTUsIDM2LCAyMjIsIDE4MSwgMTE4LCAxLCA1NSwgMzYsIDIyOCwgOTcsIAorICAgIDExOCwgMjUsIDUsIDI1NSwgODIsIDExOCwgMjUsIDUsIDI1MiwgMjMsIDI1NSwgODIsIDExOCwgMjUsIDUsIDc0LCAxMTgsIAorICAgIDI1LCA1LCAyMzYsIDQwLCAxMTgsIDI1LCA1LCA2OSwgMTE4LCAyNSwgNSwgMjE0LCAxMTgsIDExOCwgMjUsIDUsIDE0OSwgCisgICAgMTUzLCAxMTgsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxMTgsIDI1LCA1LCAxNDksIDE1NiwgMTE4LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTE4LCAyNSwgNSwgNzYsIDExOCwgMjUsIDUsIDI1NCwgMjEwLCAxMTgsIDI1LCA1LCA3OCwgMTE4LCAyNSwgCisgICAgNSwgMjUzLCAyMDAsIDExOCwgMjEzLCAxNTIsIDExOCwgMjQ4LCAxODYsIDExOCwgNTIsIDI0OCwgMTg2LCAxMTgsIDIyNCwgCisgICAgMTQ0LCAyNDcsIDEyOCwgMTE4LCAyMjQsIDE0NCwgNTIsIDI0NywgMTI4LCAxMTgsIDIyNCwgMTQ0LCAyMzIsIDIxOSwgMTE4LCAKKyAgICAyMjQsIDE0NCwgMjQ5LCAxNDUsIDEzMCwgMTE4LCAyMjQsIDE0NCwgMjMyLCAxMjEsIDExOCwgNTQsIDExMSwgMTE4LCA1NCwgCisgICAgMTA1LCAxMTgsIDU0LCAxNTgsIDExOCwgNTQsIDE2MSwgMTE4LCA1NCwgMTkwLCAxMTgsIDU0LCAxOTUsIDExOCwgNTQsIAorICAgIDE5OSwgMTE4LCA1NCwgMTk2LCAxMTgsIDU0LCAyMDEsIDExOCwgNTQsIDIxNiwgMjQ4LCAxMTgsIDU0LCAyMTUsIDczLCAKKyAgICAxMTgsIDU0LCAyMTYsIDE2MywgMTE4LCA1NCwgMjQ0LCAyMywgMTE4LCA1NCwgMjQ0LCAxMjIsIDExOCwgNTQsIDIxOSwgCisgICAgMTEzLCAxMTgsIDU0LCAyMjAsIDExOCwgMTE4LCA1NCwgMjQ1LCAxOTIsIDExOCwgNTQsIDIyOCwgMjAwLCAxMTgsIDU0LCAKKyAgICAxMjMsIDI0MCwgMjE3LCAxMTgsIDU0LCAxMjMsIDIxNiwgMTQ4LCAxMTgsIDIxLCAyMTAsIDg2LCAxMTgsIDIxLCAxMTEsIAorICAgIDExOCwgMjEsIDEwNSwgMTE4LCAyMSwgMTU4LCAxMTgsIDIxLCAxNjEsIDExOCwgMjEsIDE5MCwgMTE4LCAyMSwgMTk1LCAKKyAgICAxMTgsIDIxLCAxOTksIDExOCwgMjEsIDE5NiwgMTE4LCAyMSwgMjAxLCAyMzQsIDI1MCwgNSwgMjUxLCA3LCAyMzQsIDI1MCwgCisgICAgNSwgMjU0LCA4MywgMjM0LCAyNTAsIDUsIDIxMywgMTQ3LCAyMzQsIDI1MCwgMSwgNjEsIDIzNCwgMjUwLCAxLCAyNTUsIDgyLCAKKyAgICAyMzQsIDI1MCwgMSwgNzQsIDIzNCwgMjUwLCAxLCAyMzYsIDQwLCAyMzQsIDI1MCwgMSwgNjksIDIzNCwgMjUwLCAxLCAyMTQsIAorICAgIDExOCwgMjM0LCAyNTAsIDEsIDc2LCAyMzQsIDI1MCwgMSwgMjU0LCAyMTAsIDIzNCwgMjUwLCAxLCA3OCwgMjM0LCAyNTAsIAorICAgIDEsIDI1MywgMjAwLCAyMzQsIDI1MCwgMSwgMTc2LCAyMzQsIDI1MCwgMSwgMjM0LCAxMzgsIDIzNCwgMjUwLCAxLCAyNDMsIAorICAgIDE0MiwgMjM0LCAyNTAsIDEsIDI0MywgMCwgMjM0LCAyNTAsIDEsIDIyOSwgODIsIDIzNCwgMjUwLCAxLCAyNTEsIDQxLCAKKyAgICAyMzQsIDI1MCwgMSwgMjUwLCAxNjUsIDIzNCwgMjUwLCAxLCAyMzUsIDE0NywgMjM0LCAyNTAsIDEsIDIzNSwgMTIwLCAyMzQsIAorICAgIDI1MCwgMSwgMjI3LCAxNjksIDIzNCwgMjUwLCAxLCAyMTUsIDE1NywgMjM0LCAyNTAsIDEsIDIxNSwgMTQ1LCAyMzQsIDI1MCwgCisgICAgMSwgMjQ4LCAxNDMsIDIzNCwgMjUwLCAxLCAyNDgsIDEzMiwgMjM0LCAyNTAsIDEsIDI0OCwgMTI3LCAyMzQsIDI1MCwgMSwgCisgICAgMjIzLCA0MiwgMjM0LCAyNTAsIDEsIDIyOCwgMTE1LCAyMzQsIDI1MCwgMSwgMjE3LCAxMDYsIDIzNCwgMjUwLCAxLCAyMTYsIAorICAgIDIwOSwgMjM0LCAyNTAsIDEsIDI0OCwgMjI5LCAyMzQsIDI1MCwgMSwgMjQ4LCAzMywgMjM0LCAyNTAsIDEsIDE5OCwgMjM0LCAKKyAgICAyNTAsIDEsIDE5MSwgMjM0LCAyNTAsIDEsIDIyNSwgMTUwLCAyMzQsIDI1MCwgMSwgMjUyLCAxOTksIDIzNCwgMjUwLCAxLCAKKyAgICAyNTIsIDI2LCAyMzQsIDI1MCwgMSwgMTg2LCAyMzQsIDI1MCwgMSwgMTkyLCAyMzQsIDI1MCwgMSwgMjA1LCAyMzQsIDI1MCwgCisgICAgMSwgMjMzLCAxNDEsIDIzNCwgMjUwLCAxLCAyMTQsIDI3LCAyMzQsIDI1MCwgMSwgMjIwLCAxMDQsIDIzNCwgMjUwLCAxLCAKKyAgICAyMTgsIDIyNSwgMjM0LCAyNTAsIDEsIDIwNiwgMjM0LCAyNTAsIDEsIDE2MiwgMjM0LCAyNTAsIDI1LCA1LCAyNTUsIDgyLCAKKyAgICAyMzQsIDI1MCwgMjUsIDUsIDc0LCAyMzQsIDI1MCwgMjUsIDUsIDIzNiwgNDAsIDIzNCwgMjUwLCAyNSwgNSwgNjksIDIzNCwgCisgICAgMjUwLCAyNSwgNSwgMjE0LCAxMTgsIDIzNCwgMjUwLCAyNSwgNSwgNzYsIDIzNCwgMjUwLCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDIzNCwgMjUwLCAyNSwgNSwgNzgsIDIzNCwgMjUwLCAyNSwgNSwgMjUzLCAyMDAsIDIzNCwgMjUwLCA1LCAyMTMsIDE1MiwgCisgICAgMjM0LCAyNTAsIDUsIDIyNywgMjA5LCAyMzQsIDI1MCwgMjU1LCAzMCwgNTAsIDIzNCwgMjUwLCAyNDUsIDEyOSwgNTAsIAorICAgIDIzNCwgMjUwLCA1NCwgNTAsIDIzNCwgMjUwLCAyMjEsIDE3NSwgNzksIDIzNCwgMjUwLCA1MiwgMjIxLCAxNzUsIDc5LCAKKyAgICAyMzQsIDI1MCwgMjQ4LCAxODYsIDIzNCwgMjUwLCA1MiwgMjQ4LCAxODYsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyMiwgMjAsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIxNywgODEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI1MiwgMTc2LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyNTEsIDMxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDgsIDIxMSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjQzLCAxMjcsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzMSwgMjE1LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjksIDc5LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzMsIDExOCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI5LCAyMTgsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIxNCwgMjQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyNiwgNzcsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIAorICAgIDIxMSwgODQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyMywgMTcxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDIsIDQ0LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzQsIDI1NCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjM1LCAxNDIsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIyNywgMTY2LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNTQsIDIxOCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjQ1LCAyMTUsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzNiwgNDEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIxNCwgMjA4LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjYsIDIyNiwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjQ1LCAyMDUsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDIzMSwgMjI4LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMjEwLCA4NiwgMjE5LCAzOCwgMjE5LCA0NiwgCisgICAgMjEsIDExMSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDEwNSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE1OCwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMjEsIDE2MSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5MCwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5NSwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5OSwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDE5NiwgMjE5LCAzOCwgMjE5LCA0NiwgCisgICAgMjEsIDIwMSwgMjUwLCAxNTksIDUsIDI1MSwgNywgMjUwLCAxNTksIDUsIDI1NCwgODMsIDI1MCwgMTU5LCA1LCAyMTMsIAorICAgIDE0NywgMjUwLCAxNTksIDEsIDI1NSwgODIsIDI1MCwgMTU5LCAxLCA3NCwgMjUwLCAxNTksIDEsIDY5LCAyNTAsIDE1OSwgMSwgCisgICAgNzYsIDI1MCwgMTU5LCAxLCAyMzUsIDE2LCAyNTAsIDE1OSwgMSwgMjM0LCAxMzcsIDI1MCwgMTU5LCAxLCAyNDMsIDEzOSwgCisgICAgMjUwLCAxNTksIDEsIDI0MiwgMjU1LCAyNTAsIDE1OSwgMSwgMjI5LCA4MSwgMjUwLCAxNTksIDEsIDI1MSwgNDAsIDI1MCwgCisgICAgMTU5LCAxLCAyNTAsIDE2NCwgMjUwLCAxNTksIDEsIDIzNSwgMTQ2LCAyNTAsIDE1OSwgMSwgMjM1LCAxMTksIDI1MCwgMTU5LCAKKyAgICAxLCAyMjcsIDE2OCwgMjUwLCAxNTksIDEsIDIxNSwgMTU2LCAyNTAsIDE1OSwgMSwgMjE1LCAxNDQsIDI1MCwgMTU5LCAxLCAKKyAgICAyNDgsIDE0MiwgMjUwLCAxNTksIDEsIDI0OCwgMTI2LCAyNTAsIDE1OSwgMSwgMjI4LCAxMTQsIDI1MCwgMTU5LCAxLCAyMTcsIAorICAgIDEwMiwgMjUwLCAxNTksIDEsIDIxNiwgMjA4LCAyNTAsIDE1OSwgMSwgMjQ4LCAyMjgsIDI1MCwgMTU5LCAxLCAyNDgsIDMyLCAKKyAgICAyNTAsIDE1OSwgMSwgMjI5LCAyMzAsIDI1MCwgMTU5LCAxLCAyMjYsIDkzLCAyNTAsIDE1OSwgMSwgMjI1LCAxNDksIDI1MCwgCisgICAgMTU5LCAxLCAyNTIsIDE5NywgMjUwLCAxNTksIDEsIDI1MiwgMjUsIDI1MCwgMTU5LCAxLCAyMzEsIDI0MiwgMjUwLCAxNTksIAorICAgIDEsIDIxMCwgMTY3LCAyNTAsIDE1OSwgMSwgMjExLCAxMDMsIDI1MCwgMTU5LCAxLCAyMjMsIDE4NywgMjUwLCAxNTksIDEsIAorICAgIDIzMywgMTQwLCAyNTAsIDE1OSwgMSwgMjEyLCA2NCwgMjUwLCAxNTksIDEsIDIyMiwgMzMsIDI1MCwgMTU5LCAxLCAyNDIsIAorICAgIDUzLCAyNTAsIDE1OSwgMjUsIDUsIDYxLCAyNTAsIDE1OSwgMjUsIDUsIDc0LCAyNTAsIDE1OSwgMjUsIDUsIDIzNiwgNDAsIAorICAgIDI1MCwgMTU5LCAyNSwgNSwgNjksIDI1MCwgMTU5LCAyNSwgNSwgMjE0LCAxMTgsIDI1MCwgMTU5LCAyNSwgNSwgNzYsIDI1MCwgCisgICAgMTU5LCAyNSwgNSwgMjU0LCAyMTAsIDI1MCwgMTU5LCAyNSwgNSwgNzgsIDI1MCwgMTU5LCAyNSwgNSwgMjUzLCAyMDAsIAorICAgIDI1MCwgMTU5LCAyNSwgNSwgMjI2LCAyMjMsIDI1MCwgMTU5LCAxNDQsIDc5LCAyNTAsIDE1OSwgMjUzLCAyMDEsIDc5LCAKKyAgICAyNTAsIDE1OSwgMjEzLCAxNTIsIDI1MCwgMTU5LCAyMzEsIDI0MCwgMjUwLCAxNTksIDIxLCAyMTAsIDg2LCAyNTAsIDE1OSwgCisgICAgMjEsIDExMSwgMjUwLCAxNTksIDIxLCAxMDUsIDI1MCwgMTU5LCAyMSwgMTU4LCAyNTAsIDE1OSwgMjEsIDE2MSwgMjUwLCAKKyAgICAxNTksIDIxLCAxOTAsIDI1MCwgMTU5LCAyMSwgMTk1LCAyNTAsIDE1OSwgMjEsIDE5OSwgMjUwLCAxNTksIDIxLCAxOTYsIAorICAgIDI1MCwgMTU5LCAyMSwgMjAxLCAyNTAsIDE1OSwgMjIxLCAxNzUsIDc5LCAyNTAsIDE1OSwgMjQ4LCAxODYsIDI1MCwgMTU5LCAKKyAgICA1MiwgMjQ4LCAxODYsIDI1MCwgMTU5LCAyMjQsIDE2LCA3OSwgMTc0LCA1LCAyNTEsIDcsIDE3NCwgNSwgMjU0LCA4MywgCisgICAgMTc0LCA1LCAyMTMsIDE0NywgMTc0LCAxLCA2MSwgMTc0LCAxLCAyNTUsIDgyLCAxNzQsIDEsIDc0LCAxNzQsIDEsIDIzNiwgCisgICAgNDAsIDE3NCwgMSwgNjksIDE3NCwgMSwgMjE0LCAxMTgsIDE3NCwgMSwgMTQ5LCAxNTMsIDE3NCwgMSwgMTQ5LCAyMjIsIAorICAgIDE4MiwgMTc0LCAxLCAxNDksIDE1NiwgMTc0LCAxLCAxNDksIDIzMiwgMTkxLCAxNzQsIDEsIDc2LCAxNzQsIDEsIDI1NCwgCisgICAgMjEwLCAxNzQsIDEsIDc4LCAxNzQsIDEsIDI1MywgMjAwLCAxNzQsIDEsIDE3NiwgMTc0LCAxLCAyMzQsIDEzOCwgMTc0LCAxLCAKKyAgICAyNDMsIDE0MiwgMTc0LCAxLCAyNDMsIDAsIDE3NCwgMSwgMjI5LCA4MiwgMTc0LCAxLCAyNTEsIDQxLCAxNzQsIDEsIDI1MCwgCisgICAgMTY1LCAxNzQsIDEsIDIzNSwgMTQ3LCAxNzQsIDEsIDIzNSwgMTIwLCAxNzQsIDEsIDIyNywgMTY5LCAxNzQsIDEsIDIxNSwgCisgICAgMTU3LCAxNzQsIDEsIDIxNSwgMTQ1LCAxNzQsIDEsIDI0OCwgMTQzLCAxNzQsIDEsIDI0OCwgMTI3LCAxNzQsIDEsIDIyOCwgCisgICAgMTE1LCAxNzQsIDEsIDIxNywgMTA2LCAxNzQsIDEsIDIxNiwgMjA5LCAxNzQsIDEsIDI0OCwgMjI5LCAxNzQsIDEsIDI0OCwgCisgICAgMzMsIDE3NCwgMSwgMTk4LCAxNzQsIDEsIDE5MSwgMTc0LCAxLCAyMjUsIDE1MCwgMTc0LCAxLCAyNTIsIDE5OSwgMTc0LCAxLCAKKyAgICAyNTIsIDI2LCAxNzQsIDEsIDE4NiwgMTc0LCAxLCAxOTIsIDE3NCwgMSwgMjA1LCAxNzQsIDEsIDIzMywgMTQxLCAxNzQsIDEsIAorICAgIDIzMiwgMTkwLCAxNzQsIDEsIDIxNCwgMjcsIDE3NCwgMSwgMjIwLCAxMDQsIDE3NCwgMSwgMjE4LCAyMjUsIDE3NCwgMSwgCisgICAgMjA2LCAxNzQsIDEsIDE2MiwgMTc0LCAyNSwgNSwgMjU1LCA4MiwgMTc0LCAyNSwgNSwgNzQsIDE3NCwgMjUsIDUsIDIzNiwgCisgICAgNDAsIDE3NCwgMjUsIDUsIDY5LCAxNzQsIDI1LCA1LCAyMTQsIDExOCwgMTc0LCAyNSwgNSwgMTQ5LCAxNTMsIDE3NCwgMjUsIAorICAgIDUsIDE0OSwgMjIyLCAxODIsIDE3NCwgMjUsIDUsIDE0OSwgMTU2LCAxNzQsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzQsIAorICAgIDI1LCA1LCA3NiwgMTc0LCAyNSwgNSwgMjU0LCAyMTAsIDE3NCwgMjUsIDUsIDc4LCAxNzQsIDI1LCA1LCAyNTMsIDIwMCwgCisgICAgMTc0LCA1LCAyMTMsIDE1MiwgMTc0LCA1LCAyNTMsIDE4MywgMTc0LCA1LCAyMzUsIDEwOCwgMTc0LCA1LCAyMTQsIDE2MSwgCisgICAgMTc0LCAyMjYsIDIwOCwgMTc0LCAyNDgsIDE4NiwgMTc0LCA1MiwgMjQ4LCAxODYsIDE3NCwgMjU1LCAzMCwgNTAsIDE3NCwgCisgICAgMjIwLCAxMzksIDE3NCwgMjEsIDIxMCwgODYsIDE3NCwgMjEsIDExMSwgMTc0LCAyMSwgMTA1LCAxNzQsIDIxLCAxNTgsIAorICAgIDE3NCwgMjEsIDE2MSwgMTc0LCAyMSwgMTkwLCAxNzQsIDIxLCAxOTUsIDE3NCwgMjEsIDE5OSwgMTc0LCAyMSwgMTk2LCAKKyAgICAxNzQsIDIxLCAyMDEsIDIxNywgNzAsIDEsIDYxLCAyMTcsIDcwLCAxLCAyNTUsIDgyLCAyMTcsIDcwLCAxLCA3NCwgMjE3LCAKKyAgICA3MCwgMSwgMjM2LCA0MCwgMjE3LCA3MCwgMSwgNjksIDIxNywgNzAsIDEsIDIxNCwgMTE4LCAyMTcsIDcwLCAxLCA3NiwgCisgICAgMjE3LCA3MCwgMSwgMjU0LCAyMTAsIDIxNywgNzAsIDEsIDc4LCAyMTcsIDcwLCAxLCAyNTMsIDIwMCwgMjE3LCA3MCwgMSwgCisgICAgMTc2LCAyMTcsIDcwLCAxLCAyMzQsIDEzOCwgMjE3LCA3MCwgMSwgMjQzLCAxNDIsIDIxNywgNzAsIDEsIDI0MywgMCwgMjE3LCAKKyAgICA3MCwgMSwgMjI5LCA4MiwgMjE3LCA3MCwgMSwgMjUxLCA0MSwgMjE3LCA3MCwgMSwgMjUwLCAxNjUsIDIxNywgNzAsIDEsIAorICAgIDIzNSwgMTQ3LCAyMTcsIDcwLCAxLCAyMzUsIDEyMCwgMjE3LCA3MCwgMSwgMjI3LCAxNjksIDIxNywgNzAsIDEsIDIxNSwgCisgICAgMTU3LCAyMTcsIDcwLCAxLCAyMTUsIDE0NSwgMjE3LCA3MCwgMSwgMjQ4LCAxNDMsIDIxNywgNzAsIDEsIDI0OCwgMTI3LCAKKyAgICAyMTcsIDcwLCAxLCAyMjgsIDExNSwgMjE3LCA3MCwgMSwgMjE3LCAxMDYsIDIxNywgNzAsIDEsIDIxNiwgMjA5LCAyMTcsIAorICAgIDcwLCAxLCAyNDgsIDIyOSwgMjE3LCA3MCwgMSwgMjQ4LCAzMywgMjE3LCA3MCwgMSwgMTk4LCAyMTcsIDcwLCAxLCAxOTEsIAorICAgIDIxNywgNzAsIDEsIDIyNSwgMTUwLCAyMTcsIDcwLCAxLCAyNTIsIDE5OSwgMjE3LCA3MCwgMSwgMjUyLCAyNiwgMjE3LCA3MCwgCisgICAgMSwgMTg2LCAyMTcsIDcwLCAxLCAxOTIsIDIxNywgNzAsIDEsIDIwNSwgMjE3LCA3MCwgMSwgMjMzLCAxNDEsIDIxNywgNzAsIAorICAgIDEsIDIxNCwgMjcsIDIxNywgNzAsIDEsIDIyMCwgMTA0LCAyMTcsIDcwLCAxLCAyMDYsIDIxNywgNzAsIDEsIDE2MiwgMjE3LCAKKyAgICA3MCwgMSwgMjIyLCAxODEsIDIxNywgNzAsIDUsIDI1NCwgODMsIDIxNywgNzAsIDUsIDIxMywgMTQ3LCAyMTcsIDcwLCAyNSwgCisgICAgNSwgMjU1LCA4MiwgMjE3LCA3MCwgMjUsIDUsIDc0LCAyMTcsIDcwLCAyNSwgNSwgMjM2LCA0MCwgMjE3LCA3MCwgMjUsIDUsIAorICAgIDY5LCAyMTcsIDcwLCAyNSwgNSwgMjE0LCAxMTgsIDIxNywgNzAsIDI1LCA1LCA3NiwgMjE3LCA3MCwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCAyMTcsIDcwLCAyNSwgNSwgNzgsIDIxNywgNzAsIDI1LCA1LCAyNTMsIDIwMCwgMjE3LCA3MCwgNSwgMjEzLCAxNTIsIAorICAgIDIxNywgNzAsIDUsIDIyNywgMjA5LCAyMTcsIDcwLCAyMSwgMjEwLCA4NiwgMjE3LCA3MCwgMjEsIDExMSwgMjE3LCA3MCwgCisgICAgMjEsIDEwNSwgMjE3LCA3MCwgMjEsIDE1OCwgMjE3LCA3MCwgMjEsIDE2MSwgMjE3LCA3MCwgMjEsIDE5MCwgMjE3LCA3MCwgCisgICAgMjEsIDE5NSwgMjE3LCA3MCwgMjEsIDE5OSwgMjE3LCA3MCwgMjEsIDE5NiwgMjE3LCA3MCwgMjEsIDIwMSwgMTUsIDUsIDYxLCAKKyAgICAxNSwgNSwgMTE2LCAzMCwgNjEsIDE1LCA1LCAxMTYsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDExNiwgMzAsIDI0MywgMTEyLCAKKyAgICAyMTYsIDI0MCwgMTUsIDUsIDExNiwgMzAsIDE2MiwgMTUsIDUsIDExNiwgMzAsIDIzNiwgNDIsIDE1LCA1LCAxMTYsIDMwLCAKKyAgICAyMzMsIDEyMiwgMjQyLCAxMDEsIDE1LCA1LCAxMTYsIDMwLCAyMzAsIDY2LCAxNSwgNSwgMTE2LCAzMCwgMjIyLCAyMywgMTUsIAorICAgIDUsIDI1NSwgODQsIDE1LCA1LCAyNTUsIDM0LCAxNSwgNSwgMjU1LCAzNSwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjU1LCAzNSwgCisgICAgMzAsIDI0NiwgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDI0MywgMTI1LCAxNSwgNSwgMjU1LCAzNSwgMzAsIAorICAgIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI1NSwgMzUsIDMwLCAxNjIsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjM2LCA0MywgCisgICAgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjM2LCAxNiwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzMsIDEyMywgMTUsIAorICAgIDUsIDI1NSwgMzUsIDMwLCAyMjAsIDUwLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDY5LCAxNSwgNSwgCisgICAgMjU1LCAzNSwgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDMyLCAxNSwgNSwgMjU1LCAzMywgMzAsIDI1MiwgMTY4LCAxNSwgNSwgCisgICAgMjU1LCAzMywgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAKKyAgICAxNTgsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjIwLCAxMDIsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDI1NSwgOCwgMTUsIDUsIDI1NCwgMTk1LCAxNSwgNSwgMjU0LCAxOTYsIDMwLCAyNDUsIDk1LCAxNSwgNSwgMjU0LCAxOTYsIAorICAgIDMwLCAyMjAsIDEyLCA5NiwgMjQyLCAxOTcsIDE1LCA1LCAyNTQsIDE4NywgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjU0LCAKKyAgICAxODcsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDI0NywgMjI0LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyNDIsIDE5NywgMTUsIDUsIAorICAgIDI1NCwgMTg4LCAzMCwgMTYyLCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMzUsIDUsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIzNCwgCisgICAgOTgsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgCisgICAgMjU0LCAxODQsIDE1LCA1LCAyNTQsIDE3NywgMTUsIDUsIDI1NCwgMTQwLCAxNSwgNSwgMjU0LCAxNDEsIDMwLCAyMjAsIDY1LCAKKyAgICAxNSwgNSwgMjU0LCAxMzEsIDE1LCA1LCAyNTQsIDEzMiwgMTE1LCAyNTQsIDEzMSwgMTUsIDUsIDI1NCwgMTMyLCAxMzQsIAorICAgIDIxNiwgODYsIDE1LCA1LCAyNTQsIDEzMiwgOTYsIDIyOSwgMjIyLCAyMjYsIDE2OCwgMjU0LCAxMzIsIDk2LCAyMjksIDIyMSwgCisgICAgMTUsIDUsIDI1NCwgMTMyLCA5NiwgMjI5LCAyMjIsIDIxOCwgMjM1LCAxNSwgNSwgMjU0LCAxMDIsIDE1LCA1LCAyNTQsIDc1LCAKKyAgICAxNSwgNSwgMjU0LCA0MywgMTUsIDUsIDI1NCwgNDQsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDI1NCwgMTYsIDE1LCA1LCAyNTMsIAorICAgIDI0NCwgMTUsIDUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyNDAsIDIxMCwgNDAsIDIxNiwgMjQwLCAxNSwgNSwgMjUzLCAKKyAgICAyNDAsIDIzNSwgOSwgMjE2LCAyNDAsIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMjE1LCAxMTUsIDExNSwgCisgICAgMjE1LCAxMTUsIDIxNSwgMTE1LCAxMTUsIDIxNSwgMTE1LCAyMjYsIDI1LCAxNSwgNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAKKyAgICAyNDAsIDExNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMjQ5LCAKKyAgICAxMzMsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyMzcsIDE1LCA1LCAyNTMsIAorICAgIDIzNCwgMTUsIDUsIDI1MiwgMTk5LCAxNSwgNSwgMjUyLCAxODQsIDE1LCA1LCAyNTIsIDE3OSwgMTUsIDUsIDI1MiwgMTc1LCAKKyAgICAxNSwgNSwgMjUyLCAxNjksIDE1LCA1LCAyNTIsIDE3MCwgMTE1LCAyNTIsIDE2OSwgMTUsIDUsIDI1MiwgMTY4LCAxNSwgNSwgCisgICAgMTMwLCAxNSwgNSwgMjUyLCAxNDgsIDE1LCA1LCAyNTIsIDE0LCAxNSwgNSwgMjUyLCAxNSwgMzAsIDYxLCAxNSwgNSwgMjUyLCAKKyAgICAxNSwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjUyLCAxNSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjUxLCAxMzMsIAorICAgIDE1LCA1LCAyNTEsIDEzNCwgMTE1LCAyNTEsIDEzNCwgMjU1LCAzNCwgMTUsIDUsIDI1MSwgMTM0LCAxMTUsIDI1MSwgMTM0LCAKKyAgICAyMTQsIDE5MCwgMTUsIDUsIDI1MSwgMTM0LCAyNDksIDEzMywgMjUxLCAxMzMsIDE1LCA1LCAyNTEsIDExNywgMTUsIDUsIAorICAgIDI1MSwgMTE4LCAxMTUsIDI1MSwgMTE3LCAxNSwgNSwgMjUxLCAxMDYsIDE1LCA1LCAyNTEsIDEwNSwgMTUsIDUsIDI0OCwgCisgICAgMjI5LCAxNSwgNSwgMjQ4LCAyMjAsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDExNiwgOTYsIDIzMSwgMTUyLCAKKyAgICAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNTQsIDE0MCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjUyLCAxNjgsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI1MiwgMTQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCAKKyAgICA3MiwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDMsIDE0MywgOTYsIDIzMSwgMTUyLCAKKyAgICAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDIsIDIyMSwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjQyLCAyMDQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MiwgMTEwLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgCisgICAgNzIsIDMwLCAxNjIsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzNSwgMTg2LCAxNSwgNSwgMjQ4LCAyMjEsIAorICAgIDIzNCwgNzIsIDMwLCAyMzUsIDE4NywgOTYsIDIzMiwgMTAzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzQsIAorICAgIDI0OCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgCisgICAgMzAsIDIzMiwgMTAzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzIsIDEwNCwgOTYsIDIzMSwgMTUxLCAxNSwgCisgICAgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzIsIDg5LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMjksIAorICAgIDExMiwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjI2LCAyNiwgOTYsIDIyNiwgMjUsIDE1LCA1LCAyNDgsIDIyMSwgCisgICAgMjM0LCA3MiwgMzAsIDIxOSwgMTkzLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjQ4LCAKKyAgICAyMjEsIDIzNCwgNzIsIDMwLCAyMTQsIDIzMSwgOTYsIDI0MiwgMjA0LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKKyAgICAyMTQsIDEyNiwgMTUsIDUsIDI0OCwgMTk1LCAxNSwgNSwgMjQ4LCAxNzQsIDE1LCA1LCAyNDgsIDE3MywgMTUsIDUsIDI0OCwgCisgICAgMTcyLCAxNSwgNSwgMjQ4LCAxMSwgMTUsIDUsIDI0NywgMjUwLCAxNSwgNSwgMjQ3LCAyMjUsIDE1LCA1LCAyNDcsIDIyNiwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDcsIDIyNCwgMTUsIDUsIDI0NywgMjE0LCAxNSwgNSwgMjQ3LCAyMTUsIDIzNCwgMjE0LCAKKyAgICAxMDQsIDI0MiwgMTAyLCAyNDcsIDE5NSwgMTUsIDUsIDI0NywgMTk1LCAxNSwgNSwgMjQ2LCA4NiwgMTUsIDUsIDI0NiwgODcsIAorICAgIDExNSwgMjQ2LCA4NiwgMTUsIDUsIDI0NiwgODcsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA4NywgMjIwLCA0NywgMTUsIDUsIAorICAgIDI0NiwgODQsIDE1LCA1LCAyNDYsIDg1LCAzMCwgMjQ1LCA4MCwgMTUsIDUsIDI0NiwgODMsIDE1LCA1LCAyNDYsIDgyLCAxNSwgCisgICAgNSwgMjQ2LCA4MSwgMTUsIDUsIDI0NiwgODAsIDE1LCA1LCAyNDYsIDc2LCAxNSwgNSwgMjQ2LCA3NCwgMTUsIDUsIDI0NiwgCisgICAgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA3NSwgMjQyLCAxMDIsIDI0MiwgMTAxLCAxNSwgNSwgMjQ2LCA3MywgMTUsIDUsIAorICAgIDI0NiwgNjYsIDE1LCA1LCA3NiwgMTUsIDUsIDE2MCwgMzAsIDIyNiwgMjUsIDE1LCA1LCAxNjAsIDExNSwgMTYwLCAyMjcsIAorICAgIDE5OSwgMTE1LCAyMjcsIDE5OCwgMTUsIDUsIDI0NSwgMjQyLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAxMTYsIDk2LCAyNDIsIAorICAgIDU2LCA5NiwgMjQ4LCAyMjksIDE1LCA1LCAyNDUsIDI0MywgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAKKyAgICAyMzAsIDIzNSwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjIyLCAxMCwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjIwLCA2NSwgMTUsIAorICAgIDUsIDI0NSwgMjQzLCAzMCwgNjksIDE1LCA1LCAyNDUsIDIxOSwgMTUsIDUsIDI0NSwgMjA4LCAxNSwgNSwgMjQ1LCAxODIsIAorICAgIDE1LCA1LCAyNDUsIDE1OCwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjQzLCAxMTEsIDE1LCA1LCAyNDUsIDE1OSwgMzAsIDI0MywgCisgICAgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjMxLCA5NiwgMTUsIDUsIDI0NSwgMTU5LCAyNDksIDEzMywgCisgICAgMjQ1LCAxNTgsIDE1LCA1LCAyNDUsIDE1OSwgMjI2LCAxNjgsIDI0NSwgMTU4LCAxNSwgNSwgMjQ1LCAxNTksIDIxOCwgMjM1LCAKKyAgICAxNSwgNSwgMjQ1LCA5NywgMTUsIDUsIDI0NSwgOTUsIDE1LCA1LCAyNDUsIDgwLCAxNSwgNSwgMjQ1LCAxOCwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCA2MSwgMTUsIDUsIDI0NSwgMTksIDMwLCAxMTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIDI0NSwgMTksIAorICAgIDMwLCAxMTYsIDk2LCAyMzMsIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDI0NiwgNzUsIDI0MiwgMTAxLCAxNSwgNSwgMjQ1LCAKKyAgICAxOSwgMzAsIDI0NiwgNzUsIDI0MiwgMTAyLCAyNDIsIDEwMSwgMTUsIDUsIDI0NSwgMTksIDMwLCAxNjIsIDE1LCA1LCAyNDUsIAorICAgIDE5LCAzMCwgMjQyLCA1NiwgMjQyLCAxMDEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjM0LCAyMTQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDIzMywgMjIxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIAorICAgIDIzMywgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjMyLCAyNDcsIDE1LCA1LCAyNDUsIDE5LCAzMCwgCisgICAgMjMyLCAxMDMsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjE0LCAyMTksIDE1LCAKKyAgICA1LCAyNDMsIDE0MiwgMTUsIDUsIDI0MywgMTQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MywgMTQwLCAxNSwgNSwgMjQzLCAxNDEsIAorICAgIDMwLCAxMTYsIDk2LCAyNDgsIDIzMCwgOTYsIDE2MiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMTE2LCA5NiwgMTYyLCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAxMTYsIDk2LCAyMzYsIDQyLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTUsIDMzLCAyMTYsIDI0MSwgCisgICAgOTYsIDIxNywgOTQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTMsIAorICAgIDIzOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUzLCAyMzgsIDk2LCAyNDMsIDEyNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MiwgMTQ5LCA5NiwgMjA1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNTEsIDEwNiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUxLCAxMDcsIDk2LCAyMDUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI0OCwgMjI5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDgsIDExLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDcsIDIyNiwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NiwgODQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgMTgyLCAKKyAgICAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIDE4MywgOTYsIDIzMywgMTQxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIAorICAgIDE1OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAxNTksIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MiwgMjIxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDIxOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjQyLCAyMjAsIDk2LCA2MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAyMDUsIDk2LCAyMTgsIDg0LCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyNDIsIDU2LCA5NiwgMjMyLCAxMDQsIDk2LCAyNDUsIDgwLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIAorICAgIDM3LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDM4LCA5NiwgMjMzLCAxNDEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MSwgCisgICAgMTg4LCA5NiwgMjMyLCAyNDcsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MCwgMjI1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM1LCAxNzMsIDk2LCAyNDAsIDIzMCwgOTYsIDI1MywgCisgICAgMjM5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDIzNCwgOTUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNCwgOTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMjMzLCAyMjIsIDk2LCAyNTQsIDEzMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjMzLCAxNDEsIDE1LCAKKyAgICA1LCAyNDMsIDE0MSwgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIDE1OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjMwLCAyMzUsIAorICAgIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjcsIDE5OSwgMTE1LCAyMjcsIAorICAgIDE5OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMTkxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyMjEsIDIzMywgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjIwLCA2NiwgOTYsIDIxNSwgOTksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDIxOCwgNDQsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIxNywgNzMsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDY5LCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjE0LCAyMjAsIDk2LCAyNDYsIDg2LCAxNSwgCisgICAgNSwgMjQzLCAxNDEsIDExNSwgMjQzLCAxNDAsIDE1LCA1LCAyNDMsIDEzNSwgMTUsIDUsIDI0MywgMTM2LCAyNDksIDEzMywgCisgICAgMjQzLCAxMzUsIDE1LCA1LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIDEwNCwgMTE1LCAKKyAgICAyNDMsIDEwMywgMTUsIDUsIDI0MywgMTI1LCAxNSwgNSwgMjQzLCAxMjYsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIAorICAgIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDI0MywgMTI0LCAxNSwgNSwgMjQzLCAxMjIsIDE1LCA1LCAyNDMsIDExMywgCisgICAgMTUsIDUsIDI0MywgMTExLCAxNSwgNSwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQzLCAxMTIsIDExNSwgMjQzLCAKKyAgICAxMTEsIDE1LCA1LCAyNDMsIDExMiwgMjQ5LCAxMzMsIDI0MywgMTExLCAxNSwgNSwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIAorICAgIDEwMiwgMTUsIDUsIDI0MywgOTcsIDE1LCA1LCAyNDMsIDQzLCAxNSwgNSwgMjQzLCA0NCwgMzAsIDIzMywgMjAyLCAxNSwgNSwgCisgICAgMjQyLCAyMjEsIDE1LCA1LCAyNDIsIDIyMiwgMzAsIDc2LCAxNSwgNSwgMjQyLCAyMjIsIDMwLCA2OSwgMTUsIDUsIDI0MiwgCisgICAgMjIyLCAyNDksIDEzMywgMjQyLCAyMjEsIDE1LCA1LCAyNDIsIDIxOSwgMTUsIDUsIDI0MiwgMjIwLCAxMTUsIDI0MiwgMjE5LCAKKyAgICAxNSwgNSwgMjQyLCAyMjAsIDI0OSwgMTMzLCAyNDIsIDIxOSwgMTUsIDUsIDI0MiwgMjE2LCAxNSwgNSwgMjQyLCAyMDQsIAorICAgIDE1LCA1LCAyNDIsIDIwNSwgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIDIwMiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMTE2LCA5NiwgCisgICAgMjM2LCA0MiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAKKyAgICAyMzYsIDQyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAyMzIsIDEwNCwgOTYsIDIzNiwgNDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIAorICAgIDE5MSwgMTUsIDUsIDI0MiwgMTk5LCAxNSwgNSwgMjQyLCAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMjQ5LCAxMzMsIDI0MiwgCisgICAgMTk3LCAxNSwgNSwgMjQyLCAxOTgsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDI0MiwgMTk4LCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDI0MiwgMTk4LCAyMTYsIDI0MCwgMTUsIDUsIDI0MiwgMTIwLCAxNSwgNSwgMjQyLCAxMjEsIDI0OSwgMTMzLCAyNDIsIDEyMCwgCisgICAgMTUsIDUsIDI0MiwgMTE4LCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjM0LCAKKyAgICAyNDksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyNDIsIAorICAgIDExOSwgMzAsIDIyMiwgMTEsIDk2LCAyMTUsIDExNCwgMTUsIDUsIDI0MiwgMTE5LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgCisgICAgMTEwLCAxNSwgNSwgMjQyLCAxMTEsIDMwLCAxMTYsIDk2LCAyMzMsIDIwMiwgMTUsIDUsIDI0MiwgMTExLCAzMCwgMjMzLCAKKyAgICAyMDIsIDE1LCA1LCAyNDIsIDExMSwgMTE1LCAyNDIsIDExMSwgMjMyLCA5NiwgMTUsIDUsIDI0MiwgMTA1LCAxNSwgNSwgCisgICAgMjQyLCAxMDMsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDIsIDk1LCAxNSwgNSwgMjQyLCA5NCwgCisgICAgMTUsIDUsIDI0MiwgOTEsIDE1LCA1LCAyNDIsIDkwLCAxNSwgNSwgMTYyLCAxNSwgNSwgMjQyLCA1NiwgMjE2LCAyNDAsIDE1LCAKKyAgICA1LCAyNDIsIDU2LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMzcsIDE1LCA1LCAyNDEsIDE4NywgMTUsIDUsIDI0MSwgMTg4LCAKKyAgICAzMCwgMjUzLCAyMzksIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjQ3LCAxOTUsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI0MywgMTMzLCAxNSwgNSwgCisgICAgMjQxLCAxODgsIDMwLCAyMzQsIDg3LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDI0MSwgMTg4LCAKKyAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgNjksIDE1LCA1LCAyNDAsIDIyOSwgMTUsIDUsIDI0MCwgMjI1LCAKKyAgICAxNSwgNSwgMjQwLCAyMjYsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDI0MCwgMjI2LCAzMCwgMjQyLCAzNywgMTUsIDUsIDI0MCwgCisgICAgMjI2LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyNDAsIDIyNiwgMzAsIDIzMiwgMjAzLCAxNSwgNSwgMjQwLCAyMjYsIDMwLCAKKyAgICAyMTQsIDIxOSwgMTUsIDUsIDI0MCwgMjIyLCAxNSwgNSwgNzQsIDE1LCA1LCAyNDAsIDE2MSwgNjEsIDE1LCA1LCAyNDAsIAorICAgIDEyMiwgMTUsIDUsIDIzNiwgNzAsIDE1LCA1LCAyMzYsIDcxLCAxMTUsIDIzNiwgNzEsIDI1MSwgMTA2LCAxNSwgNSwgMjM2LCAKKyAgICA3MSwgMTE1LCAyMzYsIDcxLCAyMTgsIDIzNSwgMTUsIDUsIDIzNiwgNDUsIDE1LCA1LCAyMzYsIDQyLCAxNSwgNSwgMjM2LCAKKyAgICA0MywgMjQ3LCAyNTAsIDE1LCA1LCAyMzYsIDQzLCAyMjMsIDM4LCAxNSwgNSwgMjM2LCA0MywgMTE1LCAyMzYsIDQzLCAyMjAsIAorICAgIDE2LCAxMTUsIDIyMCwgMTYsIDIxNCwgMjIwLCAxMTUsIDIxNCwgMjE5LCAxNSwgNSwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCAKKyAgICA1LCAyMzYsIDM0LCAxNSwgNSwgMjM2LCAzNSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzNiwgMzMsIDE1LCAKKyAgICA1LCAyMzYsIDIzLCAxNSwgNSwgMjM2LCAyNCwgMzAsIDIxNywgNzMsIDE1LCA1LCAyMzYsIDI0LCAyNDksIDEzMywgMjM2LCAKKyAgICAyMywgMTUsIDUsIDIzNiwgMjQsIDIyNiwgMTY4LCAyMzYsIDIzLCAxNSwgNSwgMjM2LCAyNCwgMjE4LCAyMzUsIDE1LCA1LCAKKyAgICAyMzYsIDE2LCAxNSwgNSwgMjM2LCA2LCAxNSwgNSwgMjM1LCAxODYsIDE1LCA1LCAyMzUsIDE3MiwgMTUsIDUsIDE3NiwgMTUsIAorICAgIDUsIDIzNSwgMTksIDMwLCA2MSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTUsIDgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjU1LCAKKyAgICA5LCA5NiwgMjMzLCAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjUyLCAxNjgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMTMwLCAxNSwgNSwgMjM1LCAKKyAgICAxOSwgMzAsIDI1MiwgMTQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQ1LCA5NSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDUsIAorICAgIDgwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTI1LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDMsIDEwMywgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyNDMsIDEwNCwgOTYsIDIyMCwgMTAzLCA5NiwgNjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAKKyAgICAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAyMDQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAxOTgsIDk2LCAyMjEsIAorICAgIDIzMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDE5OCwgMjQ5LCAxMzMsIDI0MiwgMTk3LCAxNSwgNSwgMjM1LCAxOSwgCisgICAgMzAsIDI0MiwgMTIwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgOTQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM2LCA0MiwgCisgICAgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjM1LCAKKyAgICAxOSwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM0LCA5NSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzIsIAorICAgIDI0NywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzIsIDEwMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk2LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyNDYsIDg2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyNDIsIAorICAgIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk3LCA5NiwgMjE3LCAyMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzAsIAorICAgIDIzNSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzAsIDIzNiwgOTYsIDIyNywgMTkzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyOSwgCisgICAgMTEyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyNSwgMTExLCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIyMiwgMTQyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIwNiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjEsIAorICAgIDIzMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjAsIDEwNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjAsIDY1LCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE5LCAyMjcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgCisgICAgMjE5LCAxODQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE4LCA1MiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTcsIDUxLCAxNSwgCisgICAgNSwgMjM1LCAxOSwgMzAsIDY5LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIAorICAgIDIxNCwgMjE5LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgMTkzLCAzMCwgMTkxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNCwgCisgICAgMTI2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxMCwgNDQsIDE1LCA1LCAyMzUsIDE3LCAxNSwgNSwgMjM1LCAxOCwgMjQ5LCAKKyAgICAxMzMsIDIzNSwgMTcsIDE1LCA1LCAyMzUsIDEwLCAxNSwgNSwgMjM1LCA3LCAxNSwgNSwgMjM1LCA1LCAxNSwgNSwgMjM1LCAKKyAgICA0LCAxNSwgNSwgMjM1LCAyLCAxNSwgNSwgMjM1LCAzLCAxMTUsIDIzNSwgMiwgMTUsIDUsIDIzNCwgMjQ4LCAxNSwgNSwgCisgICAgMjM0LCAyNDksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIzNCwgMjQ0LCAxNSwgNSwgMjM0LCAyNDUsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDIzNCwgMjQ1LCAyNDksIDEzMywgMjM0LCAyNDQsIDE1LCA1LCAyMzQsIDI0MiwgMTUsIDUsIAorICAgIDIzNCwgMjQxLCAxNSwgNSwgMjM0LCAyMTMsIDE1LCA1LCAyMzQsIDIxNCwgMjMzLCAxMjQsIDMwLCAxMDQsIDExNSwgMjMzLCAKKyAgICAxMjQsIDMwLCA2OSwgMTUsIDUsIDIzNCwgMjE0LCAxMTUsIDIzNCwgMjE0LCAyMzMsIDEyNCwgMzAsIDEwNCwgMTE1LCAyMzMsIAorICAgIDEyNCwgMzAsIDY5LCAxNSwgNSwgMjM0LCAxNjMsIDE1LCA1LCAyMzQsIDk4LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDY5LCAxNSwgNSwgMjM0LCA5OSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjM0LCAKKyAgICA5NSwgMTUsIDUsIDIzNCwgODcsIDE1LCA1LCAyMzQsIDc0LCAxNSwgNSwgMjM0LCA3MywgMTUsIDUsIDIzNCwgNzEsIDE1LCAKKyAgICA1LCAyMzQsIDcyLCAxMTUsIDIzNCwgNzEsIDE1LCA1LCAyMzMsIDIyMywgMTUsIDUsIDIzMywgMjI0LCAxMTUsIDI0MSwgCisgICAgMTg4LCAzMCwgMjUzLCAyMzgsIDIzMywgMjI0LCAxMTUsIDI0MSwgMTg4LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMzMsIAorICAgIDIyMSwgMTUsIDUsIDIzMywgMjE5LCAxNSwgNSwgMjMzLCAyMjAsIDIxNCwgMTIsIDE3LCAxNSwgNSwgMjMzLCAyMTgsIDE1LCAKKyAgICA1LCAyMzMsIDIxNSwgMTUsIDUsIDIzMywgMjE2LCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgMjE0LCAxNSwgNSwgMjMzLCAyMDIsIAorICAgIDE1LCA1LCAyMzMsIDIwMywgMjI2LCAxNjgsIDIzMywgMjAyLCAxNSwgNSwgMjMzLCAxOTcsIDE1LCA1LCAyMzMsIDE3OCwgCisgICAgMTUsIDUsIDIzMywgMTQxLCAxNSwgNSwgMjMzLCAxMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDYxLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAxMTYsIDk2LCAyNDgsIDIzMCwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMTE2LCA5NiwgMjQzLCAKKyAgICAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDExNiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTQsIAorICAgIDE4NywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MywgMjQwLCAyMTAsIAorICAgIDQwLCAyMTYsIDI0MCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MiwgCisgICAgMTQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0OCwgMTc0LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDUsIDE1OCwgMTUsIDUsIAorICAgIDIzMywgMTI0LCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyNDIsIDExMCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQyLCAxMTEsIDk2LCAyNDIsIDExMCwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDIsIDM3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDEsIAorICAgIDE4OCwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMjM2LCAyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjM2LCAyNCwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjM2LCAyNCwgOTYsIDIzMiwgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMzQsIDg3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzMsIDIyMSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMzLCAKKyAgICAyMTUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMywgMjE2LCA5NiwgMjQxLCAxODgsIDk2LCA2MSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMjMzLCAxMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMiwgMjAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAKKyAgICAyMzIsIDEwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMyLCA5MSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMxLCA5NiwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjMxLCA5NywgOTYsIDI0NSwgMTU4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzAsIDY2LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjIwLCA2NiwgOTYsIDIxOCwgNDQsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIyMCwgMTIsIDk2LCAyNDIsIDE5OCwgOTYsIDI0NSwgOTUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIAorICAgIDIyMCwgMTIsIDk2LCAyNDIsIDE5OCwgMjE2LCAyNDAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxOSwgMjI1LCAxNSwgNSwgCisgICAgMjMzLCAxMjQsIDMwLCAyMTksIDIyNiwgOTYsIDIxOSwgMjI1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTgsIDQ0LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMTcsIDg1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMTcsIDI0LCA5NiwgMTE2LCA5NiwgMjE4LCA4NSwgOTYsIDE5OCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgNjksIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDEwNCwgOTYsIDYxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA2OSwgCisgICAgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAKKyAgICAyMTksIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjMzLCAxMjQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjMzLCAxMjEsIDE1LCA1LCAyMzMsIDEyMiwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyMzMsIDEyMiwgMzAsIDIyMCwgNjYsIDk2LCAKKyAgICAyMTgsIDQ0LCAxNSwgNSwgMjMzLCAxMjIsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAxMjIsIDI0MiwgMTAyLCAxMTUsIDIzMywgCisgICAgMTIyLCAyNDIsIDEwMiwgMjIwLCA2NSwgMTUsIDUsIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIAorICAgIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAxMDgsIDE1LCA1LCAyMzMsIDEwOSwgMzAsIDIzMywgMjAyLCAxNSwgNSwgCisgICAgMjMzLCAxMDksIDMwLCAyMzMsIDIwMywgOTYsIDIyMiwgMTQyLCAxNSwgNSwgMjMyLCAyNDcsIDE1LCA1LCAyMzIsIDIzMiwgCisgICAgMTUsIDUsIDIzMiwgMjIyLCAxNSwgNSwgMjMyLCAyMDMsIDE1LCA1LCAyMzIsIDEwMywgMTUsIDUsIDIzMiwgMTA0LCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjU0LCAxODcsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNDUsIDgwLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAKKyAgICAyNDUsIDgxLCAyMTYsIDI0MCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyNDEsIDE4OCwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzYsIDIzLCAxNSwgNSwgCisgICAgMjMyLCAxMDIsIDMwLCAyMzUsIDcsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNSwgNSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgCisgICAgMjM1LCA2LCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIAorICAgIDIzMywgMTQyLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzMywgMTIzLCAxNSwgNSwgMjMyLCAxMDIsIAorICAgIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAxNTgsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyMjcsIDI0MiwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjE5LCAxOTQsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIzMiwgMTAyLCAzMCwgMjE5LCAxNzYsIDk2LCAyNTEsIDEzMywgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjE1LCAxMTQsIDE1LCAKKyAgICA1LCAyMzIsIDEwMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzIsIDEwMiwgMjQ5LCAxMzMsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDIyNiwgMTY4LCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgMTAyLCAyMTgsIDIzNSwgMTUsIDUsIDIzMiwgMTAyLCAyMjAsIAorICAgIDQ3LCAxNSwgNSwgMjMyLCAxMDAsIDE1LCA1LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMTE1LCAyMzIsIDk2LCAxNSwgNSwgCisgICAgMjMyLCA5NywgMjI2LCAxNjgsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMjAsIDQ3LCAxNSwgNSwgMjMyLCA5NCwgMTUsIAorICAgIDUsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCA5MCwgMTE1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCA5MCwgCisgICAgMTE1LCAyMzIsIDkwLCAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDE4NiwgMTUsIDUsIDIzMSwgMjQ0LCAzMCwgCisgICAgMjE3LCA3MywgMTUsIDUsIDIzMSwgMjQ0LCAyNDIsIDEwMSwgMTUsIDUsIDIzMSwgMjQzLCAxNSwgNSwgMjMxLCAyMTUsIDE1LCAKKyAgICA1LCAyMzEsIDE3MSwgMTUsIDUsIDIzMSwgMTUyLCAxNSwgNSwgMjMxLCAxNTEsIDE1LCA1LCAyMzEsIDk2LCAxNSwgNSwgCisgICAgMjMxLCA1MiwgMTUsIDUsIDIzMCwgMjM1LCAxNSwgNSwgMjMwLCAxOTMsIDE1LCA1LCAyMzAsIDEwNywgMTUsIDUsIDIzMCwgCisgICAgMTA4LCAxMTUsIDIzMCwgMTA3LCAxNSwgNSwgMjMwLCA5OCwgMTUsIDUsIDIzMCwgOTksIDI0MiwgMTAxLCAxNSwgNSwgMjMwLCAKKyAgICA4MywgMTUsIDUsIDIzMCwgNjksIDE1LCA1LCAyMzAsIDY2LCAxNSwgNSwgMjMwLCA2NywgMzAsIDYxLCAxNSwgNSwgMjMwLCAKKyAgICA2NywgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjMwLCA2NywgMzAsIDIxMCwgMTE2LCAxNSwgNSwgMjMwLCA2NywgMTE1LCAyMzAsIAorICAgIDY2LCAxNSwgNSwgMjMwLCA2NywgMTE1LCAyMzAsIDY3LCAzMCwgMTE2LCA5NiwgMTk4LCAxNSwgNSwgMjMwLCA2NywgMjQ5LCAKKyAgICAxMzMsIDIzMCwgNjYsIDE1LCA1LCAyMzAsIDY0LCAxNSwgNSwgMjMwLCA2NSwgMzAsIDYxLCAxNSwgNSwgMjMwLCA2NSwgMzAsIAorICAgIDExNiwgOTYsIDI0OCwgMTEsIDE1LCA1LCAyMzAsIDY1LCAzMCwgMjQ4LCAxMSwgMTUsIDUsIDIzMCwgNjUsIDI0MiwgMTAxLCAKKyAgICAxNSwgNSwgMTk4LCAxNSwgNSwgMjI5LCAyMzIsIDE1LCA1LCAyMjksIDIyMSwgMTUsIDUsIDIyOSwgMjIyLCAyMzUsIDE5OSwgCisgICAgMTUsIDUsIDIyOSwgMjIyLCAzMCwgMjE5LCAyMjgsIDIxNiwgMjQwLCAxNSwgNSwgMjI5LCAyMjIsIDIyNiwgMTY4LCAyMjksIAorICAgIDIyMSwgMTUsIDUsIDIyOSwgMjIwLCAxNSwgNSwgMjI5LCAyMTMsIDIyNywgMTg0LCAxNSwgNSwgMjI5LCAyMTIsIDE1LCA1LCAKKyAgICAyMjksIDIxMSwgMTUsIDUsIDIyOSwgMTEyLCAxNSwgNSwgMjI5LCAxMTMsIDMwLCA2MSwgMTUsIDUsIDIyOSwgMTEzLCAzMCwgCisgICAgMjE0LCAyMTksIDE1LCA1LCAyMjksIDExMywgMjIwLCA0NywgMTUsIDUsIDIyOCwgMjM4LCAxNSwgNSwgMjI4LCAyMzksIDMwLCAKKyAgICA3NiwgMTUsIDUsIDIyOCwgMjM3LCAxNSwgNSwgMjI4LCAyMDgsIDE1LCA1LCAyMjgsIDIwOSwgMzAsIDI0MywgMTEyLCAyMTYsIAorICAgIDI0MCwgMTUsIDUsIDIyOCwgMjA5LCAzMCwgMjQzLCAxMDQsIDk2LCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMjgsIAorICAgIDIwNiwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDI1MywgMjM5LCAxNSwgNSwgCisgICAgMjI4LCAyMDcsIDMwLCAyNTMsIDI0MCwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyNDIsIDExMCwgMTUsIAorICAgIDUsIDIyOCwgMjA3LCAzMCwgMjMxLCA5NywgOTYsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgCisgICAgMjI5LCAxMTIsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY1LCAKKyAgICAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY2LCA5NiwgMTE2LCAyNTQsIDEzMSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgCisgICAgMjIwLCA2NiwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjAsIDY2LCA5NiwgMjUzLCAyNDAsIDk2LCAKKyAgICAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAKKyAgICAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjgsIDE5NSwgMTUsIDUsIDIyNywgMjQyLCAxNSwgNSwgMjI3LCAyMTQsIDE1LCA1LCAKKyAgICAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjI3LCAxOTksIDIzMywgCisgICAgMTIyLCAzMCwgMjMxLCAxNTIsIDE1LCA1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjI3LCAKKyAgICAxOTksIDIzMywgMTIyLCAzMCwgMjIyLCAxMSwgMTE1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDEwLCAxNSwgNSwgCisgICAgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjcsIDE5OSwgMjE2LCAyNDAsIDE1LCA1LCAyMjcsIAorICAgIDE5OSwgMTE1LCAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAyNDksIDEzMywgMjI3LCAxOTgsIDE1LCA1LCAyMjcsIDE5OSwgCisgICAgMjQ5LCAxMzMsIDIyNywgMTk5LCAyMzMsIDEyMiwgMTE1LCAyMzMsIDEyMSwgMTUsIDUsIDIyNywgMTkzLCAxNSwgNSwgMjI3LCAKKyAgICAxOTQsIDI1NSwgMzMsIDMwLCAyNTMsIDIzNCwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjUyLCAxNCwgMTUsIDUsIAorICAgIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjQ2LCA4MiwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjQyLCAxMTAsIAorICAgIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgCisgICAgMzMsIDMwLCAyMzUsIDUsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjI3LCAxOTQsIAorICAgIDI1NSwgMzMsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjE5LCAxNzMsIDE1LCA1LCAKKyAgICAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI3LCAxOTQsIDIzNCwgNzIsIDMwLCAyNTIsIDE0LCAKKyAgICAxNSwgNSwgMjI3LCAxOTQsIDIzNCwgNzIsIDMwLCAyNTIsIDE1LCA2OSwgMTUsIDUsIDE5MSwgMTUsIDUsIDIyNiwgODQsIAorICAgIDE1LCA1LCAyMjYsIDUxLCAxNSwgNSwgMjI2LCAyNSwgMTUsIDUsIDIyNSwgMTY0LCAxNSwgNSwgMjI1LCAxMTEsIDE1LCA1LCAKKyAgICAyMjUsIDExMiwgMzAsIDYxLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTUsIDM0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTIsIAorICAgIDE0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNTEsIDEzMywgMTUsIDUsIDIyNSwgMTEyLCAzMCwgNzYsIDE1LCA1LCAyMjUsIAorICAgIDExMiwgMzAsIDc0LCAxNSwgNSwgMjI1LCAxMTIsIDMwLCAyNDAsIDEyMiwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgNjksIDE1LCAKKyAgICA1LCAyMjUsIDExMiwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjI1LCAxMTIsIDI0OSwgMTMzLCAyMjUsIDExMSwgMTUsIDUsIAorICAgIDIyNSwgNTYsIDE1LCA1LCAyMjUsIDU3LCAzMCwgMjM0LCAyNDQsIDE1LCA1LCAyMjUsIDU3LCAzMCwgMjE0LCAyMTksIDE1LCAKKyAgICA1LCAyMjUsIDU3LCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMjUsIDU3LCAyMjYsIDE2OCwgMjI1LCA1NiwgMTUsIDUsIDIwNSwgCisgICAgMTUsIDUsIDIyMywgMTg1LCAxNSwgNSwgMjIzLCAzOCwgMTUsIDUsIDIyMiwgMTQyLCAxNSwgNSwgMjA2LCAxNSwgNSwgMjIyLCAKKyAgICAyNCwgMjI3LCAxODQsIDE1LCA1LCAyMjIsIDIzLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDYxLCAxNSwgNSwgMjIyLCAyNCwgMzAsIAorICAgIDI0NiwgODYsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjQ2LCA4NCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAxNjIsIDE1LCA1LCAKKyAgICAyMjIsIDI0LCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjMyLCA4OSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMzAsIDIzNSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMjcsIDE5OCwgMTUsIAorICAgIDUsIDIyMiwgMjQsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIyMCwgMzIsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjE3LCA5NCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDIyNSwgMTUsIAorICAgIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDE5NywgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMTQsIDE1MCwgMTUsIDUsIDIyMiwgMjQsIAorICAgIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyMiwgMjQsIDExNSwgMjIyLCAyMywgMTUsIDUsIDIyMiwgMjQsIDI0MiwgMTAxLCAxNSwgCisgICAgNSwgMjIyLCAxMCwgMTUsIDUsIDIyMiwgMTEsIDIzMywgMTI0LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyMjEsIDI0MSwgMTUsIAorICAgIDUsIDIyMSwgMjMzLCAxNSwgNSwgMjIwLCAxMDQsIDE1LCA1LCAyMjAsIDEwMiwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgNjEsIAorICAgIDE1LCA1LCAyMjAsIDEwMywgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAyNDIsIDE5NywgMTUsIDUsIDIyMCwgCisgICAgMTAzLCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMjAsIDEwMywgMzAsIDIxOSwgMjI1LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAKKyAgICAyMTUsIDk5LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCA2OSwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMTA0LCA5NiwgNjEsIDE1LCAKKyAgICA1LCAyMjAsIDEwMSwgMTUsIDUsIDIyMCwgOTksIDE1LCA1LCAyMjAsIDgwLCAxNSwgNSwgMjIwLCA2NSwgMTUsIDUsIDIyMCwgCisgICAgNjYsIDI0MCwgMjI5LCAxNSwgNSwgMjIwLCA2NiwgMTE1LCAyMjAsIDY2LCAyNDMsIDEzNCwgMTE1LCAyNDMsIDEzNCwgMjQzLCAKKyAgICAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDY2LCAxMTUsIDIyMCwgNjYsIDIxNywgOTUsIDExNSwgMjE3LCA5NSwgCisgICAgMjQzLCAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDU4LCAxNSwgNSwgMjIwLCA1MywgMTUsIDUsIDIyMCwgNTAsIAorICAgIDE1LCA1LCAyMjAsIDQ5LCAxNSwgNSwgMjIwLCA0NiwgMTUsIDUsIDIyMCwgMzIsIDE1LCA1LCAyMjAsIDMzLCAzMCwgNjEsIAorICAgIDE1LCA1LCAyMjAsIDMzLCAzMCwgMjM2LCAyMywgMTUsIDUsIDIyMCwgMjYsIDE1LCA1LCAyMjAsIDI3LCAzMCwgNjEsIDE1LCAKKyAgICA1LCAyMjAsIDI3LCAzMCwgMjUyLCAxNjksIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjUxLCAxMTcsIDE1LCA1LCAyMjAsIDI3LCAKKyAgICAzMCwgMjQ3LCAyMTQsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjM2LCA0MiwgCisgICAgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzMsIDE5NywgMTUsIAorICAgIDUsIDIyMCwgMjcsIDMwLCAyMzIsIDkxLCAxNSwgNSwgMjIwLCAyNywgMzAsIDIzMCwgOTgsIDE1LCA1LCAyMjAsIDI3LCAzMCwgCisgICAgMjIyLCAxMCwgMTUsIDUsIDIyMCwgMjAsIDE1LCA1LCAyMjAsIDE1LCAxNSwgNSwgMjIwLCAxNiwgMjE2LCAyNDAsIDE1LCA1LCAKKyAgICAyMjAsIDE2LCAxMTUsIDIyMCwgMTYsIDI1MSwgMTA3LCAxMTUsIDI1MSwgMTA2LCAxNSwgNSwgMjIwLCAxMSwgMTUsIDUsIAorICAgIDIxOSwgMjI3LCAxNSwgNSwgMjE5LCAyMjgsIDExNSwgMjM1LCAyMDAsIDIxOSwgMjI3LCAxNSwgNSwgMjE5LCAyMjUsIDE1LCAKKyAgICA1LCAyMTksIDIyNCwgMTUsIDUsIDIxOSwgMTkzLCAxNSwgNSwgMjE5LCAxOTQsIDI0MiwgMTAxLCAxNSwgNSwgMjE5LCAxODQsIAorICAgIDE1LCA1LCAyMTksIDE4MiwgMTUsIDUsIDIxOSwgMTgzLCAxMTUsIDIxOSwgMTgzLCAyMTksIDIyNSwgMTUsIDUsIDIxOSwgCisgICAgMTc1LCAxNSwgNSwgMjE5LCAxNzMsIDE1LCA1LCAyMTgsIDg0LCAxNSwgNSwgMjE4LCA4NSwgMTE1LCAyMTgsIDg0LCAxNSwgCisgICAgNSwgMjE4LCA1NSwgMTUsIDUsIDIxOCwgNTQsIDE1LCA1LCAyMTgsIDUyLCAxNSwgNSwgMjE4LCA0NCwgMTUsIDUsIDIxOCwgCisgICAgNDMsIDE1LCA1LCAyMTgsIDE4LCAxNSwgNSwgMjE4LCAxNywgMTUsIDUsIDIxNywgMTA2LCAxNSwgNSwgMjE3LCAxMDcsIAorICAgIDI1MywgMjI0LCAxNSwgNSwgMjE3LCAxMDcsIDMwLCAyNDEsIDE4NywgMTUsIDUsIDIxNywgMTA3LCAzMCwgMjMwLCAyMzUsIAorICAgIDE1LCA1LCAyMTcsIDEwNywgMjQyLCAxMDEsIDE1LCA1LCAyMTcsIDk0LCAxNSwgNSwgMjE3LCA5NSwgMTE1LCAyMTcsIDk1LCAKKyAgICAyMjgsIDIzOSwgMTE1LCAyMjgsIDIzOSwgMjQ3LCAxOTYsIDExNSwgMjQ3LCAxOTUsIDE1LCA1LCAyMTcsIDk1LCAyMTgsIAorICAgIDIzNSwgMTUsIDUsIDIxNywgODUsIDE1LCA1LCAxMjksIDMwLCAyNTIsIDE0LCAxNSwgNSwgMTI5LCAzMCwgMjQyLCAxMTAsIAorICAgIDE1LCA1LCAxMjksIDMwLCAyMjAsIDY1LCAxNSwgNSwgMTI5LCAzMCwgMjE5LCAyMjcsIDE1LCA1LCAxMjksIDMwLCAyMTUsIAorICAgIDExNCwgMTUsIDUsIDEyOSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjE3LCA3MywgMTUsIDUsIDIxNywgNTEsIDE1LCA1LCAKKyAgICAyMTcsIDIzLCAxNSwgNSwgMjE3LCAyNCwgMjQyLCAxMDEsIDE1LCA1LCAyMTYsIDExOCwgMTUsIDUsIDIxNiwgMTE5LCAyMTYsIAorICAgIDI0MCwgMTUsIDUsIDIxNiwgOTEsIDE1LCA1LCAyMTYsIDczLCAxNSwgNSwgMjE2LCA3NCwgMzAsIDIxNywgNzMsIDE1LCA1LCAKKyAgICAyMTYsIDc0LCAxMTUsIDIxNiwgNzMsIDE1LCA1LCAyMTYsIDc0LCAxMTUsIDIxNiwgNzQsIDI0MywgMTM0LCAxMTUsIDI0MywgCisgICAgMTM0LCAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIxNSwgMTE5LCAxNSwgNSwgMjE1LCAxMTQsIDE1LCA1LCAKKyAgICAyMTUsIDExMiwgMTUsIDUsIDIxNSwgMTA5LCAxNSwgNSwgMjE1LCA5OSwgMTUsIDUsIDIxNSwgMTAwLCAxMTUsIDIxNSwgCisgICAgMTAwLCAyMTAsIDExNywgMTE1LCAyMTAsIDExNiwgMTUsIDUsIDY5LCAxNSwgNSwgMTA0LCAyNDIsIDExMCwgMTUsIDUsIAorICAgIDEwNCwgMTA0LCA2OSwgMTUsIDUsIDEwNCwgMTE1LCAxMDQsIDIyNiwgOTQsIDExNSwgMjI2LCA5NCwgMjQzLCAxMDQsIDExNSwgCisgICAgMjQzLCAxMDMsIDE1LCA1LCAxMDQsIDExNSwgMTA0LCAyMTgsIDE5LCAxMTUsIDIxOCwgMTgsIDE1LCA1LCAxMDQsIDExNSwgCisgICAgMTA0LCAxMDQsIDIyMywgNTIsIDExNSwgMTA0LCAyMjMsIDUxLCAxNSwgNSwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDIyNSwgCisgICAgMTUsIDUsIDIxNCwgMjE5LCAxNSwgNSwgMjE0LCAyMjAsIDIzMywgMTk3LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjMwLCAyMzUsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgCisgICAgOTYsIDY5LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCAxMDQsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAKKyAgICAyMjAsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDcsIDE1LCA1LCAyMTQsIDIyMCwgMjIwLCA0OCwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjE0LCAyMTUsIDE1LCA1LCAyMTQsIDE5NywgMTUsIDUsIDIxNCwgMTk4LCAzMCwgMjMzLCAKKyAgICAxMjMsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMSwgOTcsIDk2LCAyNDgsIDIyOSwgMTUsIDUsIDIxNCwgMTk4LCAzMCwgCisgICAgMjIwLCAxMDIsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDY5LCAxNSwgNSwgMjE0LCAxOTYsIDE1LCA1LCAyMTQsIDE5MiwgMTUsIAorICAgIDUsIDIxNCwgMTkzLCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDE5MSwgMTUsIDUsIDIxNCwgMTkwLCAxNSwgCisgICAgNSwgMjE0LCAxOTEsIDI0MiwgMTAxLCAxNSwgNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjQ5LCAxMzMsIDIxNCwgCisgICAgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIDIyMCwgNDcsIDE1LCA1LCAyMTQsIDE0OCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTE2LCAKKyAgICA5NiwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxMTYsIDk2LCAxOTgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDI1NCwgCisgICAgMTg3LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjE0LCAKKyAgICAxNDksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTIsIDE0LCAxNSwgNSwgMjE0LCAxNDcsIDE1LCA1LCAyMTQsIDE0NCwgCisgICAgMTUsIDUsIDIxNCwgMTQzLCAxNSwgNSwgMjE0LCAxMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDYxLCAxNSwgNSwgMjE0LCAKKyAgICAxNDAsIDMwLCAyNTMsIDIzNCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTMwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDYsIAorICAgIDc2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAKKyAgICAyMTQsIDE0MCwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAKKyAgICAyMTQsIDE0MCwgMzAsIDI0MiwgMTIwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAorICAgIDIzNiwgNDIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNSwgMTcyLCAxNSwgCisgICAgNSwgMjE0LCAxNDAsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzIsIDg5LCAxNSwgNSwgMjE0LCAxNDAsIAorICAgIDMwLCAyMzAsIDE5MywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTkxLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMjAsIDY1LCAxNSwgCisgICAgNSwgMjE0LCAxNDAsIDMwLCAyMTksIDE4MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE1LCAxMTksIDE1LCA1LCAyMTQsIAorICAgIDE0MCwgMzAsIDEwNCwgOTYsIDI0MiwgMTEwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIxNCwgCisgICAgMTQwLCAzMCwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM4LCAzMCwgNjksIDE1LCA1LCAyMTQsIAorICAgIDEyNiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgNjEsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMjIzLCAxNSwgNSwgMjE0LCAKKyAgICAxMjcsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjE3LCA3MywgMTUsIDUsIDIxNCwgMTIyLCAxNSwgNSwgCisgICAgMjE0LCAxMjUsIDE1LCA1LCAyMTQsIDEyMywgMTUsIDUsIDIxNCwgMTE5LCAxNSwgNSwgMjE0LCAxMDgsIDE1LCA1LCAyMTQsIAorICAgIDEwOSwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjE0LCAxMDcsIDE1LCA1LCAyMTAsIDExNiwgMTUsIDUsIDIxMCwgMTE3LCAKKyAgICAyMTYsIDI0MCwgMTUsIDUsIDIxMCwgMTE3LCA5MiwgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjEwLCAxMTMsIDE1LCA1LCAyMTAsIAorICAgIDEwNiwgMTUsIDUsIDIxMCwgOTMsIDE1LCA1LCAyMTAsIDQ0LCAxNSwgNSwgMjEwLCA0NSwgMTE1LCAyMTAsIDQ0LCAxNSwgNSwgCisgICAgMjEwLCA0MywgMTUsIDUsIDIxMCwgNDEsIDE1LCA1LCAyMTAsIDQyLCAyMzUsIDksIDIxNiwgMjQwLCAxNSwgNSwgMjEwLCAKKyAgICAzNiwgMTUsIDUsIDIxMCwgMjgsIDE1LCA1LCAyMTAsIDEzLCAxNSwgNSwgMjEwLCAxMSwgMTUsIDUsIDIxMCwgMTIsIDMwLCAKKyAgICA2MSwgMTUsIDUsIDIxMCwgMTAsIDE1LCA1LCAyMTAsIDksIDE1LCAxMzIsIDUsIDExMywgMjUzLCAyMzksIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTMsIAorICAgIDIzOSwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjUzLCAyMzksIDE1LCAKKyAgICAxMzIsIDUsIDI0NSwgMjAxLCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjQ3LCAKKyAgICAxOTUsIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDI0NywgMTk1LCAxNSwgCisgICAgMTMyLCA1LCAyNDUsIDIwMSwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgCisgICAgMjQ0LCAxOSwgNjksIDE1LCAxMzIsIDUsIDI0NCwgODksIDY5LCAxNSwgMTMyLCA1LCAyMTksIDEyNywgNjksIDE1LCAxMzIsIAorICAgIDUsIDIyMCwgMTI0LCA2OSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDY5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgNjksIDE1LCAKKyAgICAxMzIsIDUsIDEyMywgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMzQsIDI0MywgNDUsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0MywgNDUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI0MywgNDUsIDE1LCAxMzIsIDUsIAorICAgIDIxOSwgMTI3LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIAorICAgIDI0MywgNDUsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMjMsIDI0MywgNDIsIDE1LCAKKyAgICAxMzIsIDUsIDExMywgMjQzLCA0MiwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDMsIAorICAgIDQyLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAxMTMsIDIyMCwgODAsIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDgxLCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgCisgICAgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDIyMCwgODAsIDE1LCAKKyAgICAxMzIsIDUsIDIyMCwgMTI0LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgCisgICAgMjI4LCAyMDUsIDIyMCwgODAsIDE1LCAxMzIsIDUsIDEyMywgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMTEzLCAyMjAsIDc1LCAKKyAgICAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NiwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIAorICAgIDUsIDI0NCwgMTksIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDIyMCwgODEsIAorICAgIDMwLCAyNDMsIDEyNiwgOTYsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyMjAsIDgxLCAzMCwgMjQzLCAxMjYsIDk2LCAyMzAsIAorICAgIDE5MywgMTUsIDEzMiwgNSwgMTIzLCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTEzLCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDEwNCwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgCisgICAgMTksIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMTM0LCAyMTQsIDEyLCAKKyAgICAyNDQsIDI4LCAyNDUsIDgyLCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIDI0NCwgMjgsIDI0NSwgNzksIDE1LCAxMzIsIDUsIAorICAgIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgMjgsIDIzMiwgMjIzLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIAorICAgIDI4LCAyMzIsIDIyMSwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjMyLCAyMjQsIDYxLCAxNSwgCisgICAgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzIsIDIyNCwgMjUzLCAxNjYsIDE1LCAxMzIsIDUsIDIxOSwgCisgICAgMTI3LCAyMTQsIDEyLCAyNDQsIDI4LCAyNTMsIDIzNiwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIAorICAgIDIzNiwgMTUsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDE3LCA2MSwgMTUsIDEzMiwgNSwgCisgICAgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMTcsIDI1MywgMTY2LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjE0LCAKKyAgICAxMiwgMjQ0LCAyOCwgMjE0LCAxMjEsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMTQsIDEyLCAyNDQsIDI4LCAyMTQsIDEyMCwgCisgICAgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzEsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAKKyAgICAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDMwLCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAKKyAgICAyOSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzIsIDYxLCAxNSwgMTMyLCA1LCAxMTMsIAorICAgIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMTM0LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDI0NCwgCisgICAgMTksIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCAKKyAgICA1LCAyMTksIDEyNywgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAxMjMsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAKKyAgICAxMTMsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAxMzQsIDI1MiwgMTU4LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNTIsIDE1OCwgCisgICAgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjUyLCAxNTksIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTIsIAorICAgIDE1OCwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUyLCAxNTksIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyMjgsIDIxNSwgCisgICAgMTUsIDEzMiwgNSwgMjI4LCAyMTYsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCA3OCwgMTUsIDEzMiwgNSwgMTEzLCAyNDUsIDc4LCAKKyAgICAxNSwgMTMyLCA1LCAxMjMsIDIxNiwgMTcwLCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2OCwgMjQ3LCAxOTUsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgODksIDIxOSwgMTE2LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMTIzLCAyMTYsIDE3MCwgMjE0LCAKKyAgICAxMiwgMjQ0LCAyOCwgNjEsIDE1LCAxMzIsIDUsIDExMywgMjE2LCAxNjgsIDIxNCwgMTIsIDI0NCwgMjgsIDYxLCAxNSwgCisgICAgMTMyLCA1LCAxMjMsIDI0NSwgMTk3LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMTIzLCAyMjQsIDI1LCAyNTMsIDIzOSwgMTUsIAorICAgIDEzMiwgNSwgNTUsIDI1MywgMjI3LCAxMjMsIDIxOSwgMTE3LCAxNSwgMTMyLCA1LCA1NSwgMjUzLCAyMjcsIDEyMywgMjI0LCAKKyAgICAyNCwgMTUsIDIyNCwgMTQ0LCA1LCA1NSwgMjUzLCAyMjcsIDIxMSwgMjA5LCAyNDcsIDE4MCwgMTUsIDIyNCwgMTQ0LCA1LCAKKyAgICA2NywgMjQ5LCAyMzQsIDE1LCAyMjQsIDE0NCwgNSwgMjQ4LCA3LCAyNDksIDIzNCwgMTUsIDIyNCwgMTQ0LCA1LCAyNDgsIDcsIAorICAgIDIxNSwgMjIyLCAxMiwgMTMsIDI1NSwgMTY0LCAxMiwgMTMsIDI1NSwgMTYzLCAxMiwgMTMsIDI1NSwgMTYyLCAxMiwgMTMsIAorICAgIDI1NSwgMTYxLCAxMiwgMTMsIDI1NSwgMTYwLCAxMiwgMTMsIDI1NSwgMTU5LCAxMiwgMTMsIDI1NSwgMTU4LCAxMiwgMTMsIAorICAgIDI1NSwgMTU3LCAxMiwgMTMsIDI1NSwgMTU2LCAxMiwgMTMsIDI1NSwgMTU1LCAxMiwgMTMsIDI1NSwgMTU0LCAxMiwgMTMsIAorICAgIDI1NSwgMTUzLCAxMiwgMTMsIDI1NSwgMTUyLCAxMiwgMTMsIDI1NSwgMTUxLCAxMiwgMTMsIDI1NSwgMTUwLCAxMiwgMTMsIAorICAgIDI1NSwgMTQ5LCAxMiwgMTMsIDI1NSwgMTQ4LCAxMiwgMTMsIDI1NSwgMTQ3LCAxMiwgMTMsIDI1NSwgMTQ2LCAxMiwgMTMsIAorICAgIDI1NSwgMTQ1LCAxMiwgMTMsIDI1NSwgMTQ0LCAxMiwgMTMsIDI1NSwgMTQzLCAxMiwgMTMsIDI1NSwgMTQyLCAxMiwgMTMsIAorICAgIDI1NSwgMTQxLCAxMiwgMTMsIDI1NSwgMTQwLCAxMiwgMTMsIDI1NSwgMTM5LCAxMiwgMTMsIDI1NSwgMTM4LCAxMiwgMTMsIAorICAgIDI1NSwgMTM3LCAxMiwgMTMsIDI1NSwgMTM2LCAxMiwgMTMsIDI1NSwgMTM1LCAxMiwgMTMsIDI1NSwgMTM0LCAxMiwgMTMsIAorICAgIDI1NSwgMTMzLCAxMiwgMTMsIDI1NSwgMTMyLCAxMiwgMTMsIDI1NSwgMTMxLCAxMiwgMTMsIDI1NSwgMTMwLCAxMiwgMTMsIAorICAgIDI1NSwgMTI5LCAxMiwgMTMsIDI1NSwgMTI4LCAxMiwgMTMsIDI1NSwgMTI3LCAxMiwgMTMsIDI1NSwgMTI2LCAxMiwgMTMsIAorICAgIDI1NSwgMTI1LCAxMiwgMTMsIDI1NSwgMTI0LCAxMiwgMTMsIDI1NSwgMTIzLCAxMiwgMTMsIDI1NSwgMTIyLCAxMiwgMTMsIAorICAgIDI1NSwgMTIxLCAxMiwgMTMsIDI1NSwgMTIwLCAxMiwgMTMsIDI1NSwgMTE5LCAxMiwgMTMsIDI1NSwgMTE4LCAxMiwgMTMsIAorICAgIDI1NSwgMTE3LCAxMiwgMTMsIDI1NSwgMTE2LCAxMiwgMTMsIDI1NSwgMTE1LCAxMiwgMTMsIDI1NSwgMTE0LCAxMiwgMTMsIAorICAgIDI1NSwgMTEzLCAxMiwgMTMsIDI1NSwgMTEyLCAxMiwgMTMsIDI1NSwgMTExLCAxMiwgMTMsIDI1NSwgMTEwLCAxMiwgMTMsIAorICAgIDI1NSwgMTA5LCAxMiwgMTMsIDI1NSwgMTA4LCAxMiwgMTMsIDI1NSwgMTA3LCAxMiwgMTMsIDI1NSwgMTA2LCAxMiwgMTMsIAorICAgIDI1NSwgMTA1LCAxMiwgMTMsIDI1NSwgMTA0LCAxMiwgMTMsIDI1NSwgMTAzLCAxMiwgMTMsIDI1NSwgMTAyLCAxMiwgMTMsIAorICAgIDI1NSwgMTAxLCAxMiwgMTMsIDI1NSwgMTAwLCAxMiwgMTMsIDI1NSwgOTksIDEyLCAxMywgMjU1LCA5OCwgMTIsIDEzLCAKKyAgICAyNTUsIDk3LCAxMiwgMTMsIDI1NSwgOTYsIDEyLCAxMywgMjU1LCA5NSwgMTIsIDEzLCAyNTUsIDk0LCAxMiwgMTMsIDI1NSwgCisgICAgOTMsIDEyLCAxMywgMjU1LCA5MiwgMTIsIDEzLCAyNTUsIDkxLCAxMiwgMTMsIDI1NSwgOTAsIDEyLCAxMywgMjU1LCA4OSwgCisgICAgMTIsIDEzLCAyNTUsIDg4LCAxMiwgMTMsIDI1NSwgODcsIDEyLCAxMywgMjU1LCA4NiwgMTIsIDEzLCAyNTUsIDg1LCAxMiwgCisgICAgMTMsIDI1MywgMTY0LCAxMiwgMTMsIDI1MywgMTYyLCAxMiwgMTMsIDI1MywgMTYwLCAxMiwgMTMsIDI1MywgMTU4LCAxMiwgCisgICAgMTMsIDI1MywgMTU2LCAxMiwgMTMsIDI1MywgMTU1LCAxMiwgMTMsIDI1MywgMTUzLCAxMiwgMTMsIDI1MywgMTUxLCAxMiwgCisgICAgMTMsIDI1MywgMTQ5LCAxMiwgMTMsIDI1MywgMTQ3LCAxMiwgMTMsIDI1MSwgNzAsIDEyLCAxMywgMjUxLCA2OSwgMTIsIDEzLCAKKyAgICAyNTEsIDY4LCAxMiwgMTMsIDI1MSwgNjcsIDEyLCAxMywgMjUxLCA2NiwgMTIsIDEzLCAyNTEsIDY1LCAxMiwgMTMsIDI1MSwgCisgICAgNjQsIDEyLCAxMywgMjUxLCA2MywgMTIsIDEzLCAyNTEsIDYyLCAxMiwgMTMsIDI1MSwgNjEsIDEyLCAxMywgMjUxLCA2MCwgCisgICAgMTIsIDEzLCAyNTEsIDU5LCAxMiwgMTMsIDI1MSwgNTgsIDEyLCAxMywgMjUxLCA1NywgMTIsIDEzLCAyNTEsIDU2LCAxMiwgCisgICAgMTMsIDI1MSwgNTUsIDEyLCAxMywgMjUxLCA1NCwgMTIsIDEzLCAyNTEsIDUzLCAxMiwgMTMsIDI1MSwgNTIsIDEyLCAxMywgCisgICAgMjUxLCA1MSwgMTIsIDEzLCAyNTEsIDUwLCAxMiwgMTMsIDI1MSwgNDksIDEyLCAxMywgMjUxLCA0OCwgMTIsIDEzLCAyNTEsIAorICAgIDQ3LCAxMiwgMTMsIDI1MSwgNDYsIDEyLCAxMywgMjUxLCA0NSwgMTIsIDEzLCAyNTEsIDQ0LCAxMiwgMTMsIDI1MSwgNDMsIAorICAgIDEyLCAxMywgMjQ5LCA2NywgMTIsIDEzLCAyNDksIDY2LCAxMiwgMTMsIDI0OSwgNjUsIDEyLCAxMywgMjQ5LCA2NCwgMTIsIAorICAgIDEzLCAyNDksIDYzLCAxMiwgMTMsIDI0OSwgNjIsIDEyLCAxMywgMjQ5LCA2MSwgMTIsIDEzLCAyNDksIDYwLCAxMiwgMTMsIAorICAgIDI0OSwgNTksIDEyLCAxMywgMjQ5LCA1OCwgMTIsIDEzLCAyNDksIDU3LCAxMiwgMTMsIDI0OSwgNTYsIDEyLCAxMywgMjQ5LCAKKyAgICA1NSwgMTIsIDEzLCAyNDksIDU0LCAxMiwgMTMsIDI0OSwgNTMsIDEyLCAxMywgMjQ5LCA1MiwgMTIsIDEzLCAyNDksIDUxLCAKKyAgICAxMiwgMTMsIDI0OSwgNTAsIDEyLCAxMywgMjQ5LCA0OSwgMTIsIDEzLCAyNDksIDQ4LCAxMiwgMTMsIDI0OSwgNDcsIDEyLCAKKyAgICAxMywgMjQ5LCA0NiwgMTIsIDEzLCAyNDksIDQ1LCAxMiwgMTMsIDI0OSwgNDQsIDEyLCAxMywgMjQ5LCA0MywgMTIsIDEzLCAKKyAgICAyNDksIDQyLCAxMiwgMTMsIDI0OSwgNDEsIDEyLCAxMywgMjQ5LCA0MCwgMTIsIDEzLCAyNDksIDM5LCAxMiwgMTMsIDI0OSwgCisgICAgMzgsIDEyLCAxMywgMjQ5LCAzNywgMTIsIDEzLCAyNDksIDM2LCAxMiwgMTMsIDI0OSwgMzUsIDEyLCAxMywgMjQ5LCAzNCwgCisgICAgMTIsIDEzLCAyNDksIDMzLCAxMiwgMTMsIDI0OSwgMzIsIDEyLCAxMywgMjQ5LCAzMSwgMTIsIDEzLCAyNDksIDMwLCAxMiwgCisgICAgMTMsIDI0OSwgMjksIDEyLCAxMywgMjQ5LCAyOCwgMTIsIDEzLCAyNDksIDI3LCAxMiwgMTMsIDI0OSwgMjYsIDEyLCAxMywgCisgICAgMjQ5LCAyNSwgMTIsIDEzLCAyNDksIDI0LCAxMiwgMTMsIDI0OSwgMjMsIDEyLCAxMywgMjQ5LCAyMiwgMTIsIDEzLCAyNDksIAorICAgIDIxLCAxMiwgMTMsIDI0OSwgMjAsIDEyLCAxMywgMjQ5LCAxOSwgMTIsIDEzLCAyNDksIDE4LCAxMiwgMTMsIDI0OSwgMTcsIAorICAgIDEyLCAxMywgMjQ5LCAxNiwgMTIsIDEzLCAyNDksIDE1LCAxMiwgMTMsIDI0OSwgMTQsIDEyLCAxMywgMjQ5LCAxMywgMTIsIAorICAgIDEzLCAyNDksIDEyLCAxMiwgMTMsIDI0OSwgMTEsIDEyLCAxMywgMjQ5LCAxMCwgMTIsIDEzLCAyNDksIDksIDEyLCAxMywgCisgICAgMjQ5LCA4LCAxMiwgMTMsIDI0OSwgNywgMTIsIDEzLCAyNDksIDYsIDEyLCAxMywgMjQ5LCA1LCAxMiwgMTMsIDI0OSwgNCwgCisgICAgMTIsIDEzLCAyNDksIDMsIDEyLCAxMywgMjQ5LCAyLCAxMiwgMTMsIDI0OSwgMSwgMTIsIDEzLCAyNDksIDAsIDEyLCAxMywgCisgICAgMjQ4LCAyNTUsIDEyLCAxMywgMjQ4LCAyNTQsIDEyLCAxMywgMjQ4LCAyNTMsIDEyLCAxMywgMjQ4LCAyNTIsIDEyLCAxMywgCisgICAgMjQ4LCAyNTEsIDEyLCAxMywgMjQ4LCAyNTAsIDEyLCAxMywgMjQ4LCAyNDksIDEyLCAxMywgMjQ4LCAyNDgsIDEyLCAxMywgCisgICAgMjQ4LCAyNDcsIDEyLCAxMywgMjQ4LCAyNDYsIDEyLCAxMywgMjQ4LCAyNDUsIDEyLCAxMywgMjQ4LCAyNDQsIDEyLCAxMywgCisgICAgMjQ4LCAyNDMsIDEyLCAxMywgMjQ4LCAyNDIsIDEyLCAxMywgMjQ4LCAyNDEsIDEyLCAxMywgMjQ4LCAyNDAsIDEyLCAxMywgCisgICAgMjQ4LCAyMzksIDEyLCAxMywgMjQ4LCAyMzgsIDEyLCAxMywgMjQ4LCAyMzcsIDEyLCAxMywgMjQ4LCAyMzYsIDEyLCAxMywgCisgICAgMjQ4LCAyMzUsIDEyLCAxMywgMjQ4LCAyMzQsIDEyLCAxMywgMjQ4LCAyMzMsIDEyLCAxMywgMjQ4LCAyMzIsIDEyLCAxMywgCisgICAgMjQ2LCAzMSwgMTIsIDEzLCAyNDYsIDMwLCAxMiwgMTMsIDI0NiwgMjksIDEyLCAxMywgMjQ2LCAyOCwgMTIsIDEzLCAyNDYsIAorICAgIDI3LCAxMiwgMTMsIDI0NiwgMjYsIDEyLCAxMywgMjQ2LCAyNSwgMTIsIDEzLCAyNDYsIDI0LCAxMiwgMTMsIDI0NiwgMjMsIAorICAgIDEyLCAxMywgMjQ2LCAyMiwgMTIsIDEzLCAyNDYsIDIxLCAxMiwgMTMsIDI0NiwgMjAsIDEyLCAxMywgMjQ2LCAxOSwgMTIsIAorICAgIDEzLCAyNDYsIDE4LCAxMiwgMTMsIDI0NiwgMTcsIDEyLCAxMywgMjQ2LCAxNiwgMTIsIDEzLCAyNDYsIDE1LCAxMiwgMTMsIAorICAgIDI0NiwgMTQsIDEyLCAxMywgMjQ2LCAxMywgMTIsIDEzLCAyNDYsIDEyLCAxMiwgMTMsIDI0NiwgMTEsIDEyLCAxMywgMjQ2LCAKKyAgICAxMCwgMTIsIDEzLCAyNDYsIDksIDEyLCAxMywgMjQ2LCA4LCAxMiwgMTMsIDI0NiwgNywgMTIsIDEzLCAyNDYsIDYsIDEyLCAKKyAgICAxMywgMjQ2LCA1LCAxMiwgMTMsIDI0NiwgNCwgMTIsIDEzLCAyNDYsIDMsIDEyLCAxMywgMjQ2LCAyLCAxMiwgMTMsIDI0NiwgCisgICAgMSwgMTIsIDEzLCAyNDYsIDAsIDEyLCAxMywgMjQ1LCAyNTUsIDEyLCAxMywgMjQ1LCAyNTQsIDEyLCAxMywgMjQ1LCAyNTMsIAorICAgIDEyLCAxMywgMjQ1LCAyNTIsIDEyLCAxMywgMjQ1LCAyNTEsIDEyLCAxMywgMjQ1LCAyNTAsIDEyLCAxMywgMjQ1LCAyNDksIAorICAgIDEyLCAxMywgMjQ1LCAyNDgsIDEyLCAxMywgMjQ1LCAyNDcsIDEyLCAxMywgMjQ1LCAyNDYsIDEyLCAxMywgMjQ1LCAyNDUsIAorICAgIDEyLCAxMywgMjQ1LCAyNDQsIDEyLCAxMywgMjQ1LCAxMywgMTIsIDEzLCAyNDUsIDEyLCAxMiwgMTMsIDI0NSwgMTEsIDEyLCAKKyAgICAxMywgMjQ1LCAxMCwgMTIsIDEzLCAyNDUsIDksIDEyLCAxMywgMjQ1LCA4LCAxMiwgMTMsIDI0NSwgNywgMTIsIDEzLCAyNDUsIAorICAgIDYsIDEyLCAxMywgMjQ1LCA1LCAxMiwgMTMsIDI0NSwgNCwgMTIsIDEzLCAyNDUsIDMsIDEyLCAxMywgMjQ1LCAyLCAxMiwgCisgICAgMTMsIDI0NSwgMSwgMTIsIDEzLCAyNDUsIDAsIDEyLCAxMywgMjQ0LCAyNTUsIDEyLCAxMywgMjQ0LCAyNTQsIDEyLCAxMywgCisgICAgMjQ0LCAyNTMsIDEyLCAxMywgMjQ0LCAyNTIsIDEyLCAxMywgMjQ0LCAyNTEsIDEyLCAxMywgMjQ0LCAyNTAsIDEyLCAxMywgCisgICAgMjQ0LCAyNDksIDEyLCAxMywgMjQ0LCAyNDgsIDEyLCAxMywgMjQ0LCAyNDcsIDEyLCAxMywgMjQ0LCAyNDYsIDEyLCAxMywgCisgICAgMjQ0LCAyNDUsIDEyLCAxMywgMjQ0LCAyNDQsIDEyLCAxMywgMjQ0LCAyNDMsIDEyLCAxMywgMjQ0LCAyNDIsIDEyLCAxMywgCisgICAgMjQ0LCAyNDEsIDEyLCAxMywgMjQ0LCAyNDAsIDEyLCAxMywgMjQ0LCAyMzksIDEyLCAxMywgMjQ0LCAyMzgsIDEyLCAxMywgCisgICAgMjQ0LCAyMzcsIDEyLCAxMywgMjQ0LCAyMzYsIDEyLCAxMywgMjQ0LCAyMzUsIDEyLCAxMywgMjQ0LCAyMzQsIDEyLCAxMywgCisgICAgMjQ0LCAyMzMsIDEyLCAxMywgMjQ0LCAyMzIsIDEyLCAxMywgMjQ0LCAyMzEsIDEyLCAxMywgMjQ0LCAyMzAsIDEyLCAxMywgCisgICAgMjQ0LCAyMjksIDEyLCAxMywgMjQ0LCAyMjgsIDEyLCAxMywgMjQ0LCAyMjcsIDEyLCAxMywgMjQ0LCAyMjYsIDEyLCAxMywgCisgICAgMjQ0LCAyMjUsIDEyLCAxMywgMjQ0LCAyMjQsIDEyLCAxMywgMjQ0LCAyMjMsIDEyLCAxMywgMjQ0LCAyMjIsIDEyLCAxMywgCisgICAgMjQ0LCAyMjEsIDEyLCAxMywgMjQ0LCAyMjAsIDEyLCAxMywgMjQ0LCAyMTksIDEyLCAxMywgMjQ0LCAyMTgsIDEyLCAxMywgCisgICAgMjQ0LCAyMTcsIDEyLCAxMywgMjQ0LCAyMTYsIDEyLCAxMywgMjQ0LCAyMTUsIDEyLCAxMywgMjQ0LCAyMTQsIDEyLCAxMywgCisgICAgMjQ0LCAyMTMsIDEyLCAxMywgMjQ0LCAyMTIsIDEyLCAxMywgMjQ0LCAyMTEsIDEyLCAxMywgMjQ0LCAyMTAsIDEyLCAxMywgCisgICAgMjQ0LCAyMDksIDEyLCAxMywgMjQ0LCAyMDgsIDEyLCAxMywgMjQ0LCAyMDcsIDEyLCAxMywgMjQ0LCAyMDYsIDEyLCAxMywgCisgICAgMjQ0LCAyMDUsIDEyLCAxMywgMjQzLCAyMDgsIDEyLCAxMywgMjQzLCAyMDcsIDEyLCAxMywgMjQzLCAyMDYsIDEyLCAxMywgCisgICAgMjQzLCAyMDUsIDEyLCAxMywgMjQzLCAyMDQsIDEyLCAxMywgMjQzLCAyMDMsIDEyLCAxMywgMjQzLCAyMDIsIDEyLCAxMywgCiAgICAgMjQzLCAyMDEsIDEyLCAxMywgMjQzLCAyMDAsIDEyLCAxMywgMjQzLCAxOTksIDEyLCAxMywgMjQzLCAxOTgsIDEyLCAxMywgCiAgICAgMjQzLCAxOTcsIDEyLCAxMywgMjQzLCAxOTYsIDEyLCAxMywgMjQzLCAxOTUsIDEyLCAxMywgMjQzLCAxOTQsIDEyLCAxMywgCiAgICAgMjQzLCAxOTMsIDEyLCAxMywgMjQzLCAxOTIsIDEyLCAxMywgMjQzLCAxOTEsIDEyLCAxMywgMjQzLCAxOTAsIDEyLCAxMywgCkBAIC0xMjAxNSw4MSArMTIwMTYsODAgQEAKICAgICAyNDMsIDE1NywgMTIsIDEzLCAyNDMsIDE1NiwgMTIsIDEzLCAyNDMsIDE1NSwgMTIsIDEzLCAyNDMsIDE1NCwgMTIsIDEzLCAKICAgICAyNDMsIDE1MywgMTIsIDEzLCAyNDMsIDE1MiwgMTIsIDEzLCAyNDMsIDE1MSwgMTIsIDEzLCAyNDMsIDE1MCwgMTIsIDEzLCAKICAgICAyNDMsIDE0OSwgMTIsIDEzLCAyNDMsIDE0OCwgMTIsIDEzLCAyNDMsIDE0NywgMTIsIDEzLCAyNDMsIDE0NiwgMTIsIDEzLCAKLSAgICAyNDMsIDE0NSwgMTIsIDEzLCAyNDMsIDE0NCwgMTIsIDEzLCAyNDMsIDE0MywgMTIsIDEzLCAyNDMsIDE0MiwgMTIsIDEzLCAKLSAgICAyNDMsIDE0MSwgMTIsIDEzLCAyNDMsIDE0MCwgMTIsIDEzLCAyNDMsIDEzOSwgMTIsIDEzLCAyNDMsIDEzOCwgMTIsIDEzLCAKLSAgICAyNDIsIDU4LCAxMiwgMTMsIDI0MiwgNTcsIDEyLCAxMywgMjQyLCA1NiwgMTIsIDEzLCAyNDIsIDU1LCAxMiwgMTMsIDI0MiwgCi0gICAgNTQsIDEyLCAxMywgMjQyLCA1MywgMTIsIDEzLCAyNDIsIDUyLCAxMiwgMTMsIDI0MiwgNTEsIDEyLCAxMywgMjQyLCA1MCwgCisgICAgMjQzLCAxNDUsIDEyLCAxMywgMjQyLCA2NSwgMTIsIDEzLCAyNDIsIDY0LCAxMiwgMTMsIDI0MiwgNjMsIDEyLCAxMywgMjQyLCAKKyAgICA2MiwgMTIsIDEzLCAyNDIsIDYxLCAxMiwgMTMsIDI0MiwgNjAsIDEyLCAxMywgMjQyLCA1OSwgMTIsIDEzLCAyNDIsIDU4LCAKKyAgICAxMiwgMTMsIDI0MiwgNTcsIDEyLCAxMywgMjQwLCAxNDUsIDEyLCAxMywgMjQwLCAxNDQsIDEyLCAxMywgMjQwLCAxNDMsIAorICAgIDEyLCAxMywgMjQwLCAxNDIsIDEyLCAxMywgMjQwLCAxNDEsIDEyLCAxMywgMjQwLCAxNDAsIDEyLCAxMywgMjQwLCAxMzksIAogICAgIDEyLCAxMywgMjQwLCAxMzgsIDEyLCAxMywgMjQwLCAxMzcsIDEyLCAxMywgMjQwLCAxMzYsIDEyLCAxMywgMjQwLCAxMzUsIAogICAgIDEyLCAxMywgMjQwLCAxMzQsIDEyLCAxMywgMjQwLCAxMzMsIDEyLCAxMywgMjQwLCAxMzIsIDEyLCAxMywgMjQwLCAxMzEsIAogICAgIDEyLCAxMywgMjQwLCAxMzAsIDEyLCAxMywgMjQwLCAxMjksIDEyLCAxMywgMjQwLCAxMjgsIDEyLCAxMywgMjQwLCAxMjcsIAotICAgIDEyLCAxMywgMjQwLCAxMjYsIDEyLCAxMywgMjQwLCAxMjUsIDEyLCAxMywgMjQwLCAxMjQsIDEyLCAxMywgMjQwLCAxMjMsIAotICAgIDEyLCAxMywgMjQwLCAxMjIsIDEyLCAxMywgMjQwLCAxMjEsIDEyLCAxMywgMjQwLCAxMjAsIDEyLCAxMywgMjM1LCAyMiwgCi0gICAgMTIsIDEzLCAyMzUsIDIxLCAxMiwgMTMsIDIzNSwgMjAsIDEyLCAxMywgMjM1LCAxOSwgMTIsIDEzLCAyMzUsIDE4LCAxMiwgCi0gICAgMTMsIDIzNSwgMTcsIDEyLCAxMywgMjM1LCAxNiwgMTIsIDEzLCAyMzUsIDE1LCAxMiwgMTMsIDIzMywgMTQ2LCAxMiwgMTMsIAotICAgIDIzMywgMTQ1LCAxMiwgMTMsIDIzMywgMTQ0LCAxMiwgMTMsIDIzMywgMTQzLCAxMiwgMTMsIDIzMywgMTQyLCAxMiwgMTMsIAotICAgIDIzMywgMTQxLCAxMiwgMTMsIDIzMywgMTQwLCAxMiwgMTMsIDIzMywgMTM5LCAxMiwgMTMsIDIzMywgMTM4LCAxMiwgMTMsIAotICAgIDIzMywgMTM3LCAxMiwgMTMsIDIzMiwgNDksIDEyLCAxMywgMjMyLCA0OCwgMTIsIDEzLCAyMzIsIDQ3LCAxMiwgMTMsIDIzMiwgCi0gICAgNDYsIDEyLCAxMywgMjMyLCA0NSwgMTIsIDEzLCAyMzIsIDQ0LCAxMiwgMTMsIDIzMiwgNDMsIDEyLCAxMywgMjMyLCA0MiwgCi0gICAgMTIsIDEzLCAyMzIsIDQxLCAxMiwgMTMsIDIzMiwgNDAsIDEyLCAxMywgMjMyLCAzOSwgMTIsIDEzLCAyMzIsIDM4LCAxMiwgCi0gICAgMTMsIDIzMiwgMzcsIDEyLCAxMywgMjMyLCAzNiwgMTIsIDEzLCAyMzIsIDM1LCAxMiwgMTMsIDIzMiwgMzQsIDEyLCAxMywgCi0gICAgMjMyLCAzMywgMTIsIDEzLCAyMzIsIDMyLCAxMiwgMTMsIDIzMiwgMzEsIDEyLCAxMywgMjMyLCAzMCwgMTIsIDEzLCAyMzIsIAotICAgIDI5LCAxMiwgMTMsIDIzMiwgMjgsIDEyLCAxMywgMjMyLCAyNywgMTIsIDEzLCAyMzIsIDI2LCAxMiwgMTMsIDIzMiwgMjUsIAotICAgIDEyLCAxMywgMjMyLCAyNCwgMTIsIDEzLCAyMzIsIDIzLCAxMiwgMTMsIDIzMiwgMjIsIDEyLCAxMywgMjMyLCAyMSwgMTIsIAotICAgIDEzLCAyMzIsIDIwLCAxMiwgMTMsIDIzMiwgMTksIDEyLCAxMywgMjMyLCAxOCwgMTIsIDEzLCAyMzIsIDE3LCAxMiwgMTMsIAotICAgIDIzMiwgMTYsIDEyLCAxMywgMjMyLCAxNSwgMTIsIDEzLCAyMzIsIDE0LCAxMiwgMTMsIDIzMiwgMTMsIDEyLCAxMywgMjMyLCAKLSAgICAxMiwgMTIsIDEzLCAyMzIsIDExLCAxMiwgMTMsIDIzMiwgMTAsIDEyLCAxMywgMjMyLCA5LCAxMiwgMTMsIDIzMiwgOCwgMTIsIAotICAgIDEzLCAyMzIsIDcsIDEyLCAxMywgMjMyLCA2LCAxMiwgMTMsIDIzMiwgNSwgMTIsIDEzLCAyMzIsIDQsIDEyLCAxMywgMjMyLCAKLSAgICAzLCAxMiwgMTMsIDIzMiwgMiwgMTIsIDEzLCAyMzIsIDEsIDEyLCAxMywgMjMyLCAwLCAxMiwgMTMsIDIzMSwgMjU1LCAxMiwgCi0gICAgMTMsIDIzMSwgMjU0LCAxMiwgMTMsIDIzMSwgMjUzLCAxMiwgMTMsIDIzMSwgMjUyLCAxMiwgMTMsIDIzMSwgMjUxLCAxMiwgCi0gICAgMTMsIDIzMSwgMjUwLCAxMiwgMTMsIDIzMSwgMjQ5LCAxMiwgMTMsIDIzMSwgMjQ4LCAxMiwgMTMsIDIzMSwgMjQ3LCAxMiwgCi0gICAgMTMsIDIzMSwgMjQ2LCAxMiwgMTMsIDIzMSwgMjQ1LCAxMiwgMTMsIDIzMSwgMjQ0LCAxMiwgMTMsIDIzMSwgMjQzLCAxMiwgCi0gICAgMTMsIDIzMSwgMjQyLCAxMiwgMTMsIDIzMSwgMjQxLCAxMiwgMTMsIDIzMSwgMjQwLCAxMiwgMTMsIDIzMCwgMjIsIDEyLCAKLSAgICAxMywgMjMwLCAyMSwgMTIsIDEzLCAyMzAsIDIwLCAxMiwgMTMsIDIzMCwgMTksIDEyLCAxMywgMjMwLCAxOCwgMTIsIDEzLCAKLSAgICAyMzAsIDE3LCAxMiwgMTMsIDIzMCwgMTYsIDEyLCAxMywgMjMwLCAxNSwgMTIsIDEzLCAyMzAsIDE0LCAxMiwgMTMsIDIzMCwgCi0gICAgMTMsIDEyLCAxMywgMjMwLCAxMiwgMTIsIDEzLCAyMzAsIDExLCAxMiwgMTMsIDIzMCwgMTAsIDEyLCAxMywgMjMwLCA5LCAKLSAgICAxMiwgMTMsIDIzMCwgOCwgMTIsIDEzLCAyMzAsIDcsIDEyLCAxMywgMjMwLCA2LCAxMiwgMTMsIDIzMCwgNSwgMTIsIDEzLCAKLSAgICAyMzAsIDQsIDEyLCAxMywgMjMwLCAzLCAxMiwgMTMsIDIzMCwgMiwgMTIsIDEzLCAyMzAsIDEsIDEyLCAxMywgMjMwLCAwLCAKLSAgICAxMiwgMTMsIDIyOSwgMjU1LCAxMiwgMTMsIDIyOSwgMjU0LCAxMiwgMTMsIDIyOSwgMjUzLCAxMiwgMTMsIDIyOSwgMjUyLCAKLSAgICAxMiwgMTMsIDIyOSwgMjUxLCAxMiwgMTMsIDIyOSwgMjUwLCAxMiwgMTMsIDIyOSwgMjQ5LCAxMiwgMTMsIDIyOSwgMjQ4LCAKLSAgICAxMiwgMTMsIDIyOSwgMjQ3LCAxMiwgMTMsIDIyOSwgMjQ2LCAxMiwgMTMsIDIyOSwgMjQ1LCAxMiwgMTMsIDIyOSwgMjQ0LCAKLSAgICAxMiwgMTMsIDIyOSwgMjQzLCAxMiwgMTMsIDIyOSwgMjQyLCAxMiwgMTMsIDIyOSwgMjQxLCAxMiwgMTMsIDIyOSwgMjQwLCAKLSAgICAxMiwgMTMsIDIyOSwgMjM5LCAxMiwgMTMsIDIyOSwgMjM4LCAxMiwgMTMsIDIyOSwgMjM3LCAxMiwgMTMsIDIyOSwgMjM2LCAKLSAgICAxMiwgMTMsIDIyOSwgMjM1LCAxMiwgMTMsIDIyOSwgMjM0LCAxMiwgMTMsIDIyOSwgMjMzLCAxMiwgMTMsIDIyOSwgMjMyLCAKLSAgICAxMiwgMTMsIDIyOSwgMjMxLCAxMiwgMTMsIDIyOSwgMjMwLCAxMiwgMTMsIDIyOCwgMTM0LCAxMiwgMTMsIDIyOCwgMTMzLCAKLSAgICAxMiwgMTMsIDIyOCwgMTMyLCAxMiwgMTMsIDIyOCwgMTMxLCAxMiwgMTMsIDIyOCwgMTMwLCAxMiwgMTMsIDIyOCwgMTI5LCAKLSAgICAxMiwgMTMsIDIyOCwgMTI4LCAxMiwgMTMsIDIyOCwgMTI3LCAxMiwgMTMsIDIyOCwgMTI2LCAxMiwgMTMsIDIyOCwgMTI1LCAKLSAgICAxMiwgMTMsIDIyOCwgMTI0LCAxMiwgMTMsIDIyOCwgMTIzLCAxMiwgMTMsIDIyOCwgMTIyLCAxMiwgMTMsIDIyOCwgMTIxLCAKLSAgICAxMiwgMTMsIDIyOCwgMTIwLCAxMiwgMTMsIDIyOCwgMTE5LCAxMiwgMTMsIDIyOCwgMTE4LCAxMiwgMTMsIDIyOCwgMTE3LCAKLSAgICAxMiwgMTMsIDIyOCwgMTE2LCAxMiwgMTMsIDIyOCwgMTE1LCAxMiwgMTMsIDIyOCwgMTE0LCAxMiwgMTMsIDIyOCwgMTEzLCAKLSAgICAxMiwgMTMsIDIyNywgMjM2LCAxMiwgMTMsIDIyNywgMjM1LCAxMiwgMTMsIDIyNywgMjM0LCAxMiwgMTMsIDIyNywgMjMzLCAKLSAgICAxMiwgMTMsIDIyNywgMjMyLCAxMiwgMTMsIDIyNywgMjMxLCAxMiwgMTMsIDIyNywgMjMwLCAxMiwgMTMsIDIyNywgMjI5LCAKLSAgICAxMiwgMTMsIDIyNywgMjI4LCAxMiwgMTMsIDIyNywgMjI3LCAxMiwgMTMsIDIyNywgMjI2LCAxMiwgMTMsIDIyNywgMjI1LCAKLSAgICAxMiwgMTMsIDIyNywgMjI0LCAxMiwgMTMsIDIyNywgMjIzLCAxMiwgMTMsIDIyNywgMjIyLCAxMiwgMTMsIDIyNywgMjIxLCAKLSAgICAxMiwgMTMsIDIyNywgMjIwLCAxMiwgMTMsIDIyNywgMjE5LCAxMiwgMTMsIDIyNywgMjE4LCAxMiwgMTMsIDIyNywgMjE3LCAKLSAgICAxMiwgMTMsIDIyNywgMjE2LCAxMiwgMTMsIDIyNywgMjE1LCAxMiwgMTMsIDIyNywgMjE0LCAxMiwgMTMsIDIyNywgMjEzLCAKLSAgICAxMiwgMTMsIDIyNywgMjEyLCAxMiwgMTMsIDIyNywgMjExLCAxMiwgMTMsIDIyNywgNzYsIDEyLCAxMywgMjI3LCA3NSwgMTIsIAotICAgIDEzLCAyMjcsIDc0LCAxMiwgMTMsIDIyNywgNzMsIDEyLCAxMywgMjI3LCA3MiwgMTIsIDEzLCAyMjcsIDcxLCAxMiwgMTMsIAotICAgIDIyNywgNzAsIDEyLCAxMywgMjI3LCA2OSwgMTIsIDEzLCAyMjcsIDY4LCAxMiwgMTMsIDIyNywgNjcsIDEyLCAxMywgMjI3LCAKLSAgICA2NiwgMTIsIDEzLCAyMjcsIDY1LCAxMiwgMTMsIDIyNywgNjQsIDEyLCAxMywgMjI3LCA2MywgMTIsIDEzLCAyMjcsIDYyLCAKLSAgICAxMiwgMTMsIDIyNywgNjEsIDEyLCAxMywgMjI3LCA2MCwgMTIsIDEzLCAyMjcsIDU5LCAxMiwgMTMsIDIyNywgNTgsIDEyLCAKLSAgICAxMywgMjI3LCA1NywgMTIsIDEzLCAyMjcsIDU2LCAxMiwgMTMsIDIyNywgNTUsIDEyLCAxMywgMjI3LCA1NCwgMTIsIDEzLCAKLSAgICAyMjcsIDUzLCAxMiwgMTMsIDIyNywgNTIsIDEyLCAxMywgMjI3LCA1MSwgMTIsIDEzLCAyMjcsIDUwLCAxMiwgMTMsIDIyNywgCi0gICAgNDksIDEyLCAxMywgMjI3LCA0OCwgMTIsIDEzLCAyMjcsIDQ3LCAxMiwgMTMsIDIyNywgNDYsIDEyLCAxMywgMjI3LCA0NSwgCi0gICAgMTIsIDEzLCAyMjcsIDQ0LCAxMiwgMTMsIDIyNywgNDMsIDEyLCAxMywgMjI3LCA0MiwgMTIsIDEzLCAyMjcsIDQxLCAxMiwgCi0gICAgMTMsIDIyNywgNDAsIDEyLCAxMywgMjI3LCAzOSwgMTIsIDEzLCAyMjcsIDM4LCAxMiwgMTMsIDIyNywgMzcsIDEyLCAxMywgCi0gICAgMjI3LCAzNiwgMTIsIDEzLCAyMjcsIDM1LCAxMiwgMTMsIDIyNywgMzQsIDEyLCAxMywgMjI3LCAzMywgMTIsIDEzLCAyMjcsIAotICAgIDMyLCAxMiwgMTMsIDIyNywgMzEsIDEyLCAxMywgMjI3LCAzMCwgMTIsIDEzLCAyMjcsIDI5LCAxMiwgMTMsIDIyNywgMjgsIAotICAgIDEyLCAxMywgMjI3LCAyNywgMTIsIDEzLCAyMjcsIDI2LCAxMiwgMTMsIDIyNywgMjUsIDEyLCAxMywgMjI3LCAyNCwgMTIsIAotICAgIDEzLCAyMjcsIDIzLCAxMiwgMTMsIDIyNywgMjIsIDEyLCAxMywgMjI3LCAyMSwgMTIsIDEzLCAyMjcsIDIwLCAxMiwgMTMsIAotICAgIDIyNywgMTksIDEyLCAxMywgMjI3LCAxOCwgMTIsIDEzLCAyMjcsIDE3LCAxMiwgMTMsIDIyNywgMTYsIDEyLCAxMywgMjI3LCAKLSAgICAxNSwgMTIsIDEzLCAyMjcsIDE0LCAxMiwgMTMsIDIyNywgMTMsIDEyLCAxMywgMjI3LCAxMiwgMTIsIDEzLCAyMjcsIDExLCAKLSAgICAxMiwgMTMsIDIyNywgMTAsIDEyLCAxMywgMjI3LCA5LCAxMiwgMTMsIDIyNywgOCwgMTIsIDEzLCAyMjcsIDcsIDEyLCAxMywgCi0gICAgMjI3LCA2LCAxMiwgMTMsIDIyNywgNSwgMTIsIDEzLCAyMjcsIDQsIDEyLCAxMywgMjI3LCAzLCAxMiwgMTMsIDIyNywgMiwgCi0gICAgMTIsIDEzLCAyMjYsIDEwNCwgMTIsIDEzLCAyMjYsIDEwMywgMTIsIDEzLCAyMjYsIDEwMiwgMTIsIDEzLCAyMjYsIDEwMSwgCi0gICAgMTIsIDEzLCAyMjYsIDEwMCwgMTIsIDEzLCAyMjYsIDk5LCAxMiwgMTMsIDIyNiwgOTgsIDEyLCAxMywgMjI2LCA5NywgMTIsIAotICAgIDEzLCAyMjYsIDk2LCAxMiwgMTMsIDIyNiwgOTUsIDEyLCAxMywgMjI2LCA5NCwgMTIsIDEzLCAyMjYsIDkzLCAxMiwgMTMsIAotICAgIDIyNiwgOTIsIDEyLCAxMywgMjI0LCA5NSwgMTIsIDEzLCAyMjQsIDk0LCAxMiwgMTMsIDIyNCwgOTMsIDEyLCAxMywgMjI0LCAKLSAgICA5MiwgMTIsIDEzLCAyMjQsIDkxLCAxMiwgMTMsIDIyNCwgOTAsIDEyLCAxMywgMjI0LCA4OSwgMTIsIDEzLCAyMjMsIDIyMiwgCisgICAgMTIsIDEzLCAyMzUsIDI4LCAxMiwgMTMsIDIzNSwgMjcsIDEyLCAxMywgMjM1LCAyNiwgMTIsIDEzLCAyMzUsIDI1LCAxMiwgCisgICAgMTMsIDIzNSwgMjQsIDEyLCAxMywgMjM1LCAyMywgMTIsIDEzLCAyMzUsIDIyLCAxMiwgMTMsIDIzNSwgMjEsIDEyLCAxMywgCisgICAgMjMzLCAxNTIsIDEyLCAxMywgMjMzLCAxNTEsIDEyLCAxMywgMjMzLCAxNTAsIDEyLCAxMywgMjMzLCAxNDksIDEyLCAxMywgCisgICAgMjMzLCAxNDgsIDEyLCAxMywgMjMzLCAxNDcsIDEyLCAxMywgMjMzLCAxNDYsIDEyLCAxMywgMjMzLCAxNDUsIDEyLCAxMywgCisgICAgMjMzLCAxNDQsIDEyLCAxMywgMjMzLCAxNDMsIDEyLCAxMywgMjMyLCA1NCwgMTIsIDEzLCAyMzIsIDUzLCAxMiwgMTMsIAorICAgIDIzMiwgNTIsIDEyLCAxMywgMjMyLCA1MSwgMTIsIDEzLCAyMzIsIDUwLCAxMiwgMTMsIDIzMiwgNDksIDEyLCAxMywgMjMyLCAKKyAgICA0OCwgMTIsIDEzLCAyMzIsIDQ3LCAxMiwgMTMsIDIzMiwgNDYsIDEyLCAxMywgMjMyLCA0NSwgMTIsIDEzLCAyMzIsIDQ0LCAKKyAgICAxMiwgMTMsIDIzMiwgNDMsIDEyLCAxMywgMjMyLCA0MiwgMTIsIDEzLCAyMzIsIDQxLCAxMiwgMTMsIDIzMiwgNDAsIDEyLCAKKyAgICAxMywgMjMyLCAzOSwgMTIsIDEzLCAyMzIsIDM4LCAxMiwgMTMsIDIzMiwgMzcsIDEyLCAxMywgMjMyLCAzNiwgMTIsIDEzLCAKKyAgICAyMzIsIDM1LCAxMiwgMTMsIDIzMiwgMzQsIDEyLCAxMywgMjMyLCAzMywgMTIsIDEzLCAyMzIsIDMyLCAxMiwgMTMsIDIzMiwgCisgICAgMzEsIDEyLCAxMywgMjMyLCAzMCwgMTIsIDEzLCAyMzIsIDI5LCAxMiwgMTMsIDIzMiwgMjgsIDEyLCAxMywgMjMyLCAyNywgCisgICAgMTIsIDEzLCAyMzIsIDI2LCAxMiwgMTMsIDIzMiwgMjUsIDEyLCAxMywgMjMyLCAyNCwgMTIsIDEzLCAyMzIsIDIzLCAxMiwgCisgICAgMTMsIDIzMiwgMjIsIDEyLCAxMywgMjMyLCAyMSwgMTIsIDEzLCAyMzIsIDIwLCAxMiwgMTMsIDIzMiwgMTksIDEyLCAxMywgCisgICAgMjMyLCAxOCwgMTIsIDEzLCAyMzIsIDE3LCAxMiwgMTMsIDIzMiwgMTYsIDEyLCAxMywgMjMyLCAxNSwgMTIsIDEzLCAyMzIsIAorICAgIDE0LCAxMiwgMTMsIDIzMiwgMTMsIDEyLCAxMywgMjMyLCAxMiwgMTIsIDEzLCAyMzIsIDExLCAxMiwgMTMsIDIzMiwgMTAsIAorICAgIDEyLCAxMywgMjMyLCA5LCAxMiwgMTMsIDIzMiwgOCwgMTIsIDEzLCAyMzIsIDcsIDEyLCAxMywgMjMyLCA2LCAxMiwgMTMsIAorICAgIDIzMiwgNSwgMTIsIDEzLCAyMzIsIDQsIDEyLCAxMywgMjMyLCAzLCAxMiwgMTMsIDIzMiwgMiwgMTIsIDEzLCAyMzIsIDEsIAorICAgIDEyLCAxMywgMjMyLCAwLCAxMiwgMTMsIDIzMSwgMjU1LCAxMiwgMTMsIDIzMSwgMjU0LCAxMiwgMTMsIDIzMSwgMjUzLCAxMiwgCisgICAgMTMsIDIzMSwgMjUyLCAxMiwgMTMsIDIzMSwgMjUxLCAxMiwgMTMsIDIzMSwgMjUwLCAxMiwgMTMsIDIzMSwgMjQ5LCAxMiwgCisgICAgMTMsIDIzMSwgMjQ4LCAxMiwgMTMsIDIzMSwgMjQ3LCAxMiwgMTMsIDIzMSwgMjQ2LCAxMiwgMTMsIDIzMSwgMjQ1LCAxMiwgCisgICAgMTMsIDIzMCwgMjcsIDEyLCAxMywgMjMwLCAyNiwgMTIsIDEzLCAyMzAsIDI1LCAxMiwgMTMsIDIzMCwgMjQsIDEyLCAxMywgCisgICAgMjMwLCAyMywgMTIsIDEzLCAyMzAsIDIyLCAxMiwgMTMsIDIzMCwgMjEsIDEyLCAxMywgMjMwLCAyMCwgMTIsIDEzLCAyMzAsIAorICAgIDE5LCAxMiwgMTMsIDIzMCwgMTgsIDEyLCAxMywgMjMwLCAxNywgMTIsIDEzLCAyMzAsIDE2LCAxMiwgMTMsIDIzMCwgMTUsIAorICAgIDEyLCAxMywgMjMwLCAxNCwgMTIsIDEzLCAyMzAsIDEzLCAxMiwgMTMsIDIzMCwgMTIsIDEyLCAxMywgMjMwLCAxMSwgMTIsIAorICAgIDEzLCAyMzAsIDEwLCAxMiwgMTMsIDIzMCwgOSwgMTIsIDEzLCAyMzAsIDgsIDEyLCAxMywgMjMwLCA3LCAxMiwgMTMsIDIzMCwgCisgICAgNiwgMTIsIDEzLCAyMzAsIDUsIDEyLCAxMywgMjMwLCA0LCAxMiwgMTMsIDIzMCwgMywgMTIsIDEzLCAyMzAsIDIsIDEyLCAKKyAgICAxMywgMjMwLCAxLCAxMiwgMTMsIDIzMCwgMCwgMTIsIDEzLCAyMjksIDI1NSwgMTIsIDEzLCAyMjksIDI1NCwgMTIsIDEzLCAKKyAgICAyMjksIDI1MywgMTIsIDEzLCAyMjksIDI1MiwgMTIsIDEzLCAyMjksIDI1MSwgMTIsIDEzLCAyMjksIDI1MCwgMTIsIDEzLCAKKyAgICAyMjksIDI0OSwgMTIsIDEzLCAyMjksIDI0OCwgMTIsIDEzLCAyMjksIDI0NywgMTIsIDEzLCAyMjksIDI0NiwgMTIsIDEzLCAKKyAgICAyMjksIDI0NSwgMTIsIDEzLCAyMjksIDI0NCwgMTIsIDEzLCAyMjksIDI0MywgMTIsIDEzLCAyMjksIDI0MiwgMTIsIDEzLCAKKyAgICAyMjksIDI0MSwgMTIsIDEzLCAyMjksIDI0MCwgMTIsIDEzLCAyMjksIDIzOSwgMTIsIDEzLCAyMjksIDIzOCwgMTIsIDEzLCAKKyAgICAyMjksIDIzNywgMTIsIDEzLCAyMjksIDIzNiwgMTIsIDEzLCAyMjksIDIzNSwgMTIsIDEzLCAyMjgsIDEzOSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzOCwgMTIsIDEzLCAyMjgsIDEzNywgMTIsIDEzLCAyMjgsIDEzNiwgMTIsIDEzLCAyMjgsIDEzNSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzNCwgMTIsIDEzLCAyMjgsIDEzMywgMTIsIDEzLCAyMjgsIDEzMiwgMTIsIDEzLCAyMjgsIDEzMSwgMTIsIDEzLCAKKyAgICAyMjgsIDEzMCwgMTIsIDEzLCAyMjgsIDEyOSwgMTIsIDEzLCAyMjgsIDEyOCwgMTIsIDEzLCAyMjgsIDEyNywgMTIsIDEzLCAKKyAgICAyMjgsIDEyNiwgMTIsIDEzLCAyMjgsIDEyNSwgMTIsIDEzLCAyMjgsIDEyNCwgMTIsIDEzLCAyMjgsIDEyMywgMTIsIDEzLCAKKyAgICAyMjgsIDEyMiwgMTIsIDEzLCAyMjgsIDEyMSwgMTIsIDEzLCAyMjgsIDEyMCwgMTIsIDEzLCAyMjgsIDExOSwgMTIsIDEzLCAKKyAgICAyMjgsIDExOCwgMTIsIDEzLCAyMjcsIDI0MSwgMTIsIDEzLCAyMjcsIDI0MCwgMTIsIDEzLCAyMjcsIDIzOSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzOCwgMTIsIDEzLCAyMjcsIDIzNywgMTIsIDEzLCAyMjcsIDIzNiwgMTIsIDEzLCAyMjcsIDIzNSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzNCwgMTIsIDEzLCAyMjcsIDIzMywgMTIsIDEzLCAyMjcsIDIzMiwgMTIsIDEzLCAyMjcsIDIzMSwgMTIsIDEzLCAKKyAgICAyMjcsIDIzMCwgMTIsIDEzLCAyMjcsIDIyOSwgMTIsIDEzLCAyMjcsIDIyOCwgMTIsIDEzLCAyMjcsIDIyNywgMTIsIDEzLCAKKyAgICAyMjcsIDIyNiwgMTIsIDEzLCAyMjcsIDIyNSwgMTIsIDEzLCAyMjcsIDIyNCwgMTIsIDEzLCAyMjcsIDIyMywgMTIsIDEzLCAKKyAgICAyMjcsIDIyMiwgMTIsIDEzLCAyMjcsIDIyMSwgMTIsIDEzLCAyMjcsIDIyMCwgMTIsIDEzLCAyMjcsIDIxOSwgMTIsIDEzLCAKKyAgICAyMjcsIDIxOCwgMTIsIDEzLCAyMjcsIDIxNywgMTIsIDEzLCAyMjcsIDIxNiwgMTIsIDEzLCAyMjcsIDgwLCAxMiwgMTMsIAorICAgIDIyNywgNzksIDEyLCAxMywgMjI3LCA3OCwgMTIsIDEzLCAyMjcsIDc3LCAxMiwgMTMsIDIyNywgNzYsIDEyLCAxMywgMjI3LCAKKyAgICA3NSwgMTIsIDEzLCAyMjcsIDc0LCAxMiwgMTMsIDIyNywgNzMsIDEyLCAxMywgMjI3LCA3MiwgMTIsIDEzLCAyMjcsIDcxLCAKKyAgICAxMiwgMTMsIDIyNywgNzAsIDEyLCAxMywgMjI3LCA2OSwgMTIsIDEzLCAyMjcsIDY4LCAxMiwgMTMsIDIyNywgNjcsIDEyLCAKKyAgICAxMywgMjI3LCA2NiwgMTIsIDEzLCAyMjcsIDY1LCAxMiwgMTMsIDIyNywgNjQsIDEyLCAxMywgMjI3LCA2MywgMTIsIDEzLCAKKyAgICAyMjcsIDYyLCAxMiwgMTMsIDIyNywgNjEsIDEyLCAxMywgMjI3LCA2MCwgMTIsIDEzLCAyMjcsIDU5LCAxMiwgMTMsIDIyNywgCisgICAgNTgsIDEyLCAxMywgMjI3LCA1NywgMTIsIDEzLCAyMjcsIDU2LCAxMiwgMTMsIDIyNywgNTUsIDEyLCAxMywgMjI3LCA1NCwgCisgICAgMTIsIDEzLCAyMjcsIDUzLCAxMiwgMTMsIDIyNywgNTIsIDEyLCAxMywgMjI3LCA1MSwgMTIsIDEzLCAyMjcsIDUwLCAxMiwgCisgICAgMTMsIDIyNywgNDksIDEyLCAxMywgMjI3LCA0OCwgMTIsIDEzLCAyMjcsIDQ3LCAxMiwgMTMsIDIyNywgNDYsIDEyLCAxMywgCisgICAgMjI3LCA0NSwgMTIsIDEzLCAyMjcsIDQ0LCAxMiwgMTMsIDIyNywgNDMsIDEyLCAxMywgMjI3LCA0MiwgMTIsIDEzLCAyMjcsIAorICAgIDQxLCAxMiwgMTMsIDIyNywgNDAsIDEyLCAxMywgMjI3LCAzOSwgMTIsIDEzLCAyMjcsIDM4LCAxMiwgMTMsIDIyNywgMzcsIAorICAgIDEyLCAxMywgMjI3LCAzNiwgMTIsIDEzLCAyMjcsIDM1LCAxMiwgMTMsIDIyNywgMzQsIDEyLCAxMywgMjI3LCAzMywgMTIsIAorICAgIDEzLCAyMjcsIDMyLCAxMiwgMTMsIDIyNywgMzEsIDEyLCAxMywgMjI3LCAzMCwgMTIsIDEzLCAyMjcsIDI5LCAxMiwgMTMsIAorICAgIDIyNywgMjgsIDEyLCAxMywgMjI3LCAyNywgMTIsIDEzLCAyMjcsIDI2LCAxMiwgMTMsIDIyNywgMjUsIDEyLCAxMywgMjI3LCAKKyAgICAyNCwgMTIsIDEzLCAyMjcsIDIzLCAxMiwgMTMsIDIyNywgMjIsIDEyLCAxMywgMjI3LCAyMSwgMTIsIDEzLCAyMjcsIDIwLCAKKyAgICAxMiwgMTMsIDIyNywgMTksIDEyLCAxMywgMjI3LCAxOCwgMTIsIDEzLCAyMjcsIDE3LCAxMiwgMTMsIDIyNywgMTYsIDEyLCAKKyAgICAxMywgMjI3LCAxNSwgMTIsIDEzLCAyMjcsIDE0LCAxMiwgMTMsIDIyNywgMTMsIDEyLCAxMywgMjI3LCAxMiwgMTIsIDEzLCAKKyAgICAyMjcsIDExLCAxMiwgMTMsIDIyNywgMTAsIDEyLCAxMywgMjI3LCA5LCAxMiwgMTMsIDIyNywgOCwgMTIsIDEzLCAyMjcsIDcsIAorICAgIDEyLCAxMywgMjI3LCA2LCAxMiwgMTMsIDIyNiwgMTA4LCAxMiwgMTMsIDIyNiwgMTA3LCAxMiwgMTMsIDIyNiwgMTA2LCAxMiwgCisgICAgMTMsIDIyNiwgMTA1LCAxMiwgMTMsIDIyNiwgMTA0LCAxMiwgMTMsIDIyNiwgMTAzLCAxMiwgMTMsIDIyNiwgMTAyLCAxMiwgCisgICAgMTMsIDIyNiwgMTAxLCAxMiwgMTMsIDIyNiwgMTAwLCAxMiwgMTMsIDIyNiwgOTksIDEyLCAxMywgMjI2LCA5OCwgMTIsIDEzLCAKKyAgICAyMjYsIDk3LCAxMiwgMTMsIDIyNiwgOTYsIDEyLCAxMywgMjI0LCA5OCwgMTIsIDEzLCAyMjQsIDk3LCAxMiwgMTMsIDIyNCwgCisgICAgOTYsIDEyLCAxMywgMjI0LCA5NSwgMTIsIDEzLCAyMjQsIDk0LCAxMiwgMTMsIDIyNCwgOTMsIDEyLCAxMywgMjI0LCA5MiwgCisgICAgMTIsIDEzLCAyMjMsIDIyNSwgMTIsIDEzLCAyMjMsIDIyNCwgMTIsIDEzLCAyMjMsIDIyMywgMTIsIDEzLCAyMjMsIDIyMiwgCiAgICAgMTIsIDEzLCAyMjMsIDIyMSwgMTIsIDEzLCAyMjMsIDIyMCwgMTIsIDEzLCAyMjMsIDIxOSwgMTIsIDEzLCAyMjMsIDIxOCwgCiAgICAgMTIsIDEzLCAyMjMsIDIxNywgMTIsIDEzLCAyMjMsIDIxNiwgMTIsIDEzLCAyMjMsIDIxNSwgMTIsIDEzLCAyMjMsIDIxNCwgCiAgICAgMTIsIDEzLCAyMjMsIDIxMywgMTIsIDEzLCAyMjMsIDIxMiwgMTIsIDEzLCAyMjMsIDIxMSwgMTIsIDEzLCAyMjMsIDIxMCwgCkBAIC0xMjA5NywxNzI2ICsxMjA5NywxNzQzIEBACiAgICAgMTIsIDEzLCAyMjMsIDIwNSwgMTIsIDEzLCAyMjMsIDIwNCwgMTIsIDEzLCAyMjMsIDIwMywgMTIsIDEzLCAyMjMsIDIwMiwgCiAgICAgMTIsIDEzLCAyMjMsIDIwMSwgMTIsIDEzLCAyMjMsIDIwMCwgMTIsIDEzLCAyMjMsIDE5OSwgMTIsIDEzLCAyMjMsIDE5OCwgCiAgICAgMTIsIDEzLCAyMjMsIDE5NywgMTIsIDEzLCAyMjMsIDE5NiwgMTIsIDEzLCAyMjMsIDE5NSwgMTIsIDEzLCAyMjMsIDE5NCwgCi0gICAgMTIsIDEzLCAyMjMsIDE5MywgMTIsIDEzLCAyMjMsIDE5MiwgMTIsIDEzLCAyMjMsIDE5MSwgMTIsIDEzLCAyMjMsIDE5MCwgCi0gICAgMTIsIDEzLCAyMjMsIDE4OSwgMTIsIDEzLCAyMjIsIDg4LCAxMiwgMTMsIDIyMiwgODcsIDEyLCAxMywgMjIyLCA4NiwgMTIsIAotICAgIDEzLCAyMjIsIDg1LCAxMiwgMTMsIDIyMiwgODQsIDEyLCAxMywgMjIyLCA4MywgMTIsIDEzLCAyMjIsIDgyLCAxMiwgMTMsIAotICAgIDIyMiwgODEsIDEyLCAxMywgMjIyLCA4MCwgMTIsIDEzLCAyMjIsIDc5LCAxMiwgMTMsIDIyMiwgNzgsIDEyLCAxMywgMjIyLCAKLSAgICA3NywgMTIsIDEzLCAyMjIsIDc2LCAxMiwgMTMsIDIyMiwgNzUsIDEyLCAxMywgMjIyLCA3NCwgMTIsIDEzLCAyMjIsIDczLCAKLSAgICAxMiwgMTMsIDIyMiwgNzIsIDEyLCAxMywgMjIyLCA3MSwgMTIsIDEzLCAyMjIsIDcwLCAxMiwgMTMsIDIyMiwgNjksIDEyLCAKLSAgICAxMywgMjIyLCA2OCwgMTIsIDEzLCAyMjIsIDY3LCAxMiwgMTMsIDIyMiwgNjYsIDEyLCAxMywgMjIyLCA2NSwgMTIsIDEzLCAKLSAgICAyMjIsIDY0LCAxMiwgMTMsIDIyMiwgNjMsIDEyLCAxMywgMjIyLCA2MiwgMTIsIDEzLCAyMjIsIDYxLCAxMiwgMTMsIDIyMiwgCi0gICAgNjAsIDEyLCAxMywgMjIyLCA1OSwgMTIsIDEzLCAyMjIsIDU4LCAxMiwgMTMsIDIyMiwgNTcsIDEyLCAxMywgMjIyLCA1NiwgCi0gICAgMTIsIDEzLCAyMjIsIDU1LCAxMiwgMTMsIDIyMiwgNTQsIDEyLCAxMywgMjIyLCA1MywgMTIsIDEzLCAyMjIsIDUyLCAxMiwgCi0gICAgMTMsIDIyMiwgNTEsIDEyLCAxMywgMjIyLCA1MCwgMTIsIDEzLCAyMjIsIDQ5LCAxMiwgMTMsIDIyMiwgNDgsIDEyLCAxMywgCi0gICAgMjIyLCA0NywgMTIsIDEzLCAyMjIsIDQ2LCAxMiwgMTMsIDIyMiwgNDUsIDEyLCAxMywgMjIyLCA0NCwgMTIsIDEzLCAyMjIsIAotICAgIDQzLCAxMiwgMTMsIDIyMiwgNDIsIDEyLCAxMywgMjIyLCA0MSwgMTIsIDEzLCAyMjIsIDQwLCAxMiwgMTMsIDIyMiwgMzksIAotICAgIDEyLCAxMywgMjIyLCAzOCwgMTIsIDEzLCAyMjIsIDM3LCAxMiwgMTMsIDIyMiwgMzYsIDEyLCAxMywgMjIyLCAzNSwgMTIsIAotICAgIDEzLCAyMTcsIDE1MCwgMTIsIDEzLCAyMTcsIDE0OSwgMTIsIDEzLCAyMTcsIDE0OCwgMTIsIDEzLCAyMTcsIDE0NywgMTIsIAotICAgIDEzLCAyMTcsIDE0NiwgMTIsIDEzLCAyMTcsIDE0NSwgMTIsIDEzLCAyMTcsIDE0NCwgMTIsIDEzLCAyMTcsIDE0MywgMTIsIAotICAgIDEzLCAyMTcsIDE0MiwgMTIsIDEzLCAyMTcsIDE0MSwgMTIsIDEzLCAyMTcsIDE0MCwgMTIsIDEzLCAyMTcsIDEzOSwgMTIsIAotICAgIDEzLCAyMTcsIDEzOCwgMTIsIDEzLCAyMTcsIDEzNywgMTIsIDEzLCAyMTcsIDEzNiwgMTIsIDEzLCAyMTcsIDEzNSwgMTIsIAotICAgIDEzLCAyMTcsIDEzNCwgMTIsIDEzLCAyMTcsIDEzMywgMTIsIDEzLCAyMTcsIDEzMiwgMTIsIDEzLCAyMTcsIDEzMSwgMTIsIAotICAgIDEzLCAyMTcsIDEzMCwgMTIsIDEzLCAyMTcsIDEyOSwgMTIsIDEzLCAyMTcsIDEyOCwgMTIsIDEzLCAyMTcsIDEyNywgMTIsIAotICAgIDEzLCAyMTcsIDEyNiwgMTIsIDEzLCAyMTcsIDEyNSwgMTIsIDEzLCAyMTcsIDEyNCwgMTIsIDEzLCAyMTcsIDEyMywgMTIsIAotICAgIDEzLCAyMTcsIDEyMiwgMTIsIDEzLCAyMTcsIDEyMSwgMTIsIDEzLCAyMTcsIDEyMCwgMTIsIDEzLCAyMTcsIDExOSwgMTIsIAotICAgIDEzLCAyMTcsIDExOCwgMTIsIDEzLCAyMTcsIDExNywgMTIsIDEzLCAyMTcsIDExNiwgMTIsIDEzLCAyMTcsIDExNSwgMTIsIAotICAgIDEzLCAyMTcsIDExNCwgMTIsIDEzLCAyMTcsIDExMywgMTIsIDEzLCAyMTcsIDExMiwgMTIsIDEzLCAyMTcsIDExMSwgMTIsIAotICAgIDEzLCAyMTcsIDExMCwgMTIsIDEzLCAyMTcsIDEwOSwgMTIsIDEzLCAyMTcsIDEwOCwgMTIsIDEzLCAyMTcsIDEwNywgMTIsIAotICAgIDEzLCAyMTUsIDIyLCAxMiwgMTMsIDIxNSwgMjEsIDEyLCAxMywgMjE1LCAyMCwgMTIsIDEzLCAyMTUsIDE5LCAxMiwgMTMsIAotICAgIDIxNSwgMTgsIDEyLCAxMywgMjE1LCAxNywgMTIsIDEzLCAyMTUsIDE2LCAxMiwgMTMsIDIxNSwgMTUsIDEyLCAxMywgMjE1LCAKLSAgICAxNCwgMTIsIDEzLCAyMTUsIDEzLCAxMiwgMTMsIDIxNSwgMTIsIDEyLCAxMywgMjE1LCAxMSwgMTIsIDEzLCAyMTUsIDEwLCAKLSAgICAxMiwgMTMsIDIxNSwgOSwgMTIsIDEzLCAyMTUsIDgsIDEyLCAxMywgMjE1LCA3LCAxMiwgMTMsIDIxNSwgNiwgMTIsIDEzLCAKLSAgICAyMTUsIDUsIDEyLCAxMywgMjE1LCA0LCAxMiwgMTMsIDIxNSwgMywgMTIsIDEzLCAyMTUsIDIsIDEyLCAxMywgMjE1LCAxLCAKLSAgICAxMiwgMTMsIDIxNSwgMCwgMTIsIDEzLCAyMTQsIDI1NSwgMTIsIDEzLCAyMTQsIDI1NCwgMTIsIDEzLCAyMTQsIDI1MywgMTIsIAotICAgIDEzLCAyMTQsIDI1MiwgMTIsIDEzLCAyMTQsIDI1MSwgMTIsIDEzLCAyMTQsIDI1MCwgMTIsIDEzLCAyMTQsIDI0OSwgMTIsIAotICAgIDEzLCAyMTQsIDI0OCwgMTIsIDEzLCAyMTQsIDI0NywgMTIsIDEzLCAyMTQsIDI0NiwgMTIsIDEzLCAyMTQsIDI0NSwgMTIsIAotICAgIDEzLCAyMTQsIDI0NCwgMTIsIDEzLCAyMTQsIDI0MywgMTIsIDEzLCAyMTQsIDI0MiwgMTIsIDEzLCAyMTQsIDI0MSwgMTIsIAotICAgIDEzLCAyMTQsIDI0MCwgMTIsIDEzLCAyMTQsIDIzOSwgMTIsIDEzLCAyMTQsIDIzOCwgMTIsIDEzLCAyMTQsIDIzNywgMTIsIAotICAgIDEzLCAyMTQsIDIzNiwgMTIsIDEzLCAyMTQsIDIzNSwgMTIsIDEzLCAyMTQsIDIzNCwgMTIsIDEzLCAyMTQsIDIzMywgMTIsIAotICAgIDEzLCAyMTQsIDIzMiwgMTIsIDEzLCAyMTQsIDEwNCwgMTIsIDEzLCAyMTQsIDEwMywgMTIsIDEzLCAyMTQsIDEwMiwgMTIsIAotICAgIDEzLCAyMTQsIDEwMSwgMTIsIDEzLCAyMTQsIDEwMCwgMTIsIDEzLCAyMTQsIDk5LCAxMiwgMTMsIDIxNCwgOTgsIDEyLCAxMywgCi0gICAgMjE0LCA5NywgMTIsIDEzLCAyMTQsIDk2LCAxMiwgMTMsIDIxNCwgOTUsIDEyLCAxMywgMjE0LCA5NCwgMTIsIDEzLCAyMTQsIAotICAgIDkzLCAxMiwgMTMsIDIxNCwgOTIsIDEyLCAxMywgMjE0LCA5MSwgMTIsIDEzLCAyMTQsIDkwLCAxMiwgMTMsIDIxNCwgODksIAotICAgIDEyLCAxMywgMjE0LCA4OCwgMTIsIDEzLCAyMTQsIDg3LCAxMiwgMTMsIDIxNCwgODYsIDEyLCAxMywgMjE0LCA4NSwgMTIsIAotICAgIDEzLCAyMTQsIDg0LCAxMiwgMTMsIDIxNCwgODMsIDEyLCAxMywgMjE0LCA4MiwgMTIsIDEzLCAyMTQsIDgxLCAxMiwgMTMsIAotICAgIDIxNCwgODAsIDEyLCAxMywgMjE0LCA3OSwgMTIsIDEzLCAyMTQsIDc4LCAxMiwgMTMsIDIxNCwgNzcsIDEyLCAxMywgMjE0LCAKLSAgICA3NiwgMTIsIDEzLCAyMTQsIDc1LCAxMiwgMTMsIDIxNCwgNzQsIDEyLCAxMywgMjE0LCA3MywgMTIsIDEzLCAyMTQsIDcyLCAKLSAgICAxMiwgMTMsIDIxNCwgNzEsIDEyLCAxMywgMjE0LCA3MCwgMTIsIDEzLCAyMTQsIDY5LCAxMiwgMTMsIDIxNCwgNjgsIDEyLCAKLSAgICAxMywgMjE0LCA2NywgMTIsIDEzLCAyMTQsIDY2LCAxMiwgMTMsIDIxNCwgNjUsIDEyLCAxMywgMjE0LCA2NCwgMTIsIDEzLCAKLSAgICAyMTQsIDYzLCAxMiwgMTMsIDIxNCwgNjIsIDEyLCAxMywgMjE0LCA2MSwgMTIsIDEzLCAyMTQsIDYwLCAxMiwgMTMsIDIxNCwgCi0gICAgNTksIDEyLCAxMywgMjE0LCA1OCwgMTIsIDEzLCAyMTQsIDU3LCAxMiwgMTMsIDIxNCwgNTYsIDEyLCAxMywgMjE0LCA1NSwgCi0gICAgMTIsIDEzLCAyMTQsIDU0LCAxMiwgMTMsIDIxNCwgNTMsIDEyLCAxMywgMjE0LCA1MiwgMTIsIDEzLCAyMTQsIDUxLCAxMiwgCi0gICAgMTMsIDIxNCwgNTAsIDEyLCAxMywgMjE0LCA0OSwgMTIsIDEzLCAyMTQsIDQ4LCAxMiwgMTMsIDIxNCwgNDcsIDEyLCAxMywgCi0gICAgMjE0LCA0NiwgMTIsIDEzLCAyMTQsIDQ1LCAxMiwgMTMsIDIxNCwgNDQsIDEyLCAxMywgMjE0LCA0MywgMTIsIDEzLCAyMTQsIAotICAgIDQyLCAxMiwgMTMsIDIxNCwgNDEsIDEyLCAxMywgMjE0LCA0MCwgMTIsIDEzLCAyMTQsIDM5LCAxMiwgMTMsIDIxNCwgMzgsIAotICAgIDEyLCAxMywgMjE0LCAzNywgMTIsIDEzLCAyMTQsIDM2LCAxMiwgMTMsIDIxNCwgMzUsIDEyLCAxMywgMjE0LCAzNCwgMTIsIAotICAgIDEzLCAyMTQsIDMzLCAxMiwgMTMsIDIxNCwgMzIsIDEyLCAxMywgMjE0LCAzMSwgMTIsIDEzLCAyMTQsIDMwLCAxMiwgMTMsIAotICAgIDIxNCwgMjksIDEyLCAxMywgMjE0LCAyOCwgMTIsIDEzLCAyMTIsIDk3LCAxMiwgMTMsIDIxMiwgOTYsIDEyLCAxMywgMjEyLCAKLSAgICA5NSwgMTIsIDEzLCAyMTIsIDk0LCAxMiwgMTMsIDIxMiwgOTMsIDEyLCAxMywgMjEyLCA5MiwgMTIsIDEzLCAyMTIsIDkxLCAKLSAgICAxMiwgMTMsIDIxMiwgOTAsIDEyLCAxMywgMjEyLCA4OSwgMTIsIDEzLCAyMTIsIDg4LCAxMiwgMTMsIDIxMiwgODcsIDEyLCAKLSAgICAxMywgMjEyLCA4NiwgMTIsIDEzLCAyMTIsIDg1LCAxMiwgMTMsIDIxMiwgODQsIDEyLCAxMywgMjEyLCA4MywgMTIsIDEzLCAKLSAgICAyMTIsIDgyLCAxMiwgMTMsIDIxMiwgODEsIDEyLCAxMywgMjEyLCA4MCwgMTIsIDEzLCAyMTIsIDc5LCAxMiwgMTMsIDIxMiwgCi0gICAgNzgsIDEyLCAxMywgMjEyLCA3NywgMTIsIDEzLCAyMTIsIDc2LCAxMiwgMTMsIDIxMiwgNzUsIDEyLCAxMywgMjEyLCA3NCwgCi0gICAgMTIsIDEzLCAyMTIsIDczLCAxMiwgMTMsIDIxMiwgNzIsIDEyLCAxMywgMjEyLCA3MSwgMTIsIDEzLCAyMTIsIDcwLCAxMiwgCi0gICAgMTMsIDIxMiwgNjksIDEyLCAxMywgMjEyLCA2OCwgMTIsIDEzLCAyMTIsIDY3LCAxMiwgMTMsIDIxMiwgNjYsIDEyLCAxMywgCi0gICAgMjExLCAxNzcsIDEyLCAxMywgMjExLCAxNzYsIDEyLCAxMywgMjExLCAxNzUsIDEyLCAxMywgMjExLCAxNzQsIDEyLCAxMywgCi0gICAgMjExLCAxNzMsIDEyLCAxMywgMjExLCAxNzIsIDEyLCAxMywgMjExLCAxNzEsIDEyLCAxMywgMjExLCAxNzAsIDEyLCAxMywgCi0gICAgMjExLCAxNjksIDEyLCAxMywgMjExLCAxNjgsIDEyLCAxMywgMjExLCAxNjcsIDEyLCAxMywgMjExLCAxNjYsIDEyLCAxMywgCi0gICAgMjExLCAxMTUsIDEyLCAxMywgMjExLCAxMTQsIDEyLCAxMywgMjExLCAxMTMsIDEyLCAxMywgMjExLCAxMTIsIDEyLCAxMywgCi0gICAgMjExLCAxMTEsIDEyLCAxMywgMjExLCAxMTAsIDEyLCAxMywgMjExLCAxMDksIDEyLCAxMywgMjExLCAxMDgsIDEyLCAxMywgCi0gICAgMjExLCAxMDcsIDEyLCAxMywgMjEwLCAxNTgsIDEyLCAxMywgMjEwLCAxNTcsIDEyLCAxMywgMjEwLCAxNTYsIDEyLCAxMywgCi0gICAgMjEwLCAxNTUsIDEyLCAxMywgMjEwLCAxNTQsIDEyLCAxMywgMjEwLCAxNTMsIDEyLCAxMywgMjEwLCAxNTIsIDEyLCAxMywgCi0gICAgMjEwLCAxNTEsIDEyLCAxMywgMjEwLCAxNTAsIDEyLCAxMywgMjEwLCAxNDksIDEyLCAxMywgMjEwLCAxNDgsIDEyLCAxMywgCi0gICAgMjEwLCAxNDcsIDEyLCAxMywgMjEwLCAxNDYsIDEyLCAxMywgMjEwLCAxNDUsIDEyLCAxMywgMjEwLCAxNDQsIDEyLCAxMywgCi0gICAgMjEwLCAxNDMsIDEyLCAxMywgMjEwLCAxNDIsIDEyLCAxMywgMjEwLCAxNDEsIDEyLCAxMywgMjEwLCAxNDAsIDEyLCAxMywgCi0gICAgMjEwLCAxMzksIDEyLCAxMywgMjEwLCAxMzgsIDEyLCAxMywgMjEwLCAxMzcsIDEyLCAxMywgMjEwLCAxMzYsIDEyLCAxMywgCi0gICAgMjEwLCAxMzUsIDEyLCAxMywgMjEwLCAxMzQsIDEyLCAxMywgMjEwLCAxMzMsIDEyLCAxMywgMjEwLCAxMzIsIDEyLCAxMywgCi0gICAgMjEwLCAxMzEsIDEyLCAxMywgMjEwLCAxMzAsIDEyLCAxMywgMjEwLCAxMjksIDEyLCAxMywgMjEwLCAxMjgsIDEyLCAxMywgCi0gICAgMjEwLCAxMjcsIDEyLCAxMywgMjEwLCAxMjYsIDEyLCAxMywgMjEwLCAxMjUsIDEyLCAxMywgMjEwLCAxMjQsIDEyLCAxMywgCi0gICAgMjEwLCAxMjMsIDEyLCAxMywgMjEwLCAxMjIsIDEyLCAxMywgMjEwLCAxMjEsIDEyLCAxMywgMjEwLCAxMjAsIDEyLCAxMywgCi0gICAgMjEwLCAxMTksIDEyLCAxMywgMjEwLCAxMTgsIDEyLCAxMywgMjU1LCA3MiwgMTIsIDEzLCAyNTUsIDcxLCAxMiwgMTMsIAotICAgIDI1NSwgNzAsIDEyLCAxMywgMjU1LCA2OSwgMTIsIDEzLCAyNTUsIDY4LCAxMiwgMTMsIDI1NSwgNjcsIDEyLCAxMywgMjU1LCAKLSAgICA2NiwgMTIsIDEzLCAyNTUsIDY1LCAxMiwgMTMsIDI1NSwgNjQsIDEyLCAxMywgMjU1LCA2MywgMTIsIDEzLCAyNTUsIDYyLCAKLSAgICAxMiwgMTMsIDI1NSwgNjEsIDEyLCAxMywgMjU1LCA2MCwgMTIsIDEzLCAyNTUsIDU5LCAxMiwgMTMsIDI1NSwgNTgsIDEyLCAKLSAgICAxMywgMjU1LCA1NywgMTIsIDEzLCAyNTUsIDU2LCAxMiwgMTMsIDI1NSwgNTUsIDEyLCAxMywgMjU1LCA1NCwgMTIsIDEzLCAKLSAgICAyNTUsIDUzLCAxMiwgMTMsIDI1NSwgNTIsIDEyLCAxMywgMjU1LCA1MSwgMTIsIDEzLCAyNTUsIDUwLCAxMiwgMTMsIDI1NSwgCi0gICAgNDksIDEyLCAxMywgMjU1LCA0OCwgMTIsIDEzLCAyNTUsIDQ3LCAxMiwgMTMsIDI1NSwgNDYsIDEyLCAxMywgMjU1LCA0NSwgCi0gICAgMTIsIDEzLCAyNTUsIDQ0LCAxMiwgMTMsIDI1NSwgNDMsIDEyLCAxMywgMjU1LCA0MiwgMTIsIDEzLCAyNTUsIDQxLCAxMiwgCi0gICAgMTMsIDI1NSwgNDAsIDEyLCAxMywgMjU1LCAzOSwgMjAsIDEsIDE2NywgMjI5LCAxMiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgCi0gICAgMjQzLCA3MCwgMjQ0LCAzNiwgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIzMSwgMTcsIDIyNSwgNTcsIDIwLCAxLCAxNjcsIAotICAgIDIyNCwgMjUxLCAyMzEsIDE3LCAyMjUsIDU4LCAyMCwgMSwgMTY3LCAyMjksIDIyNiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgCi0gICAgMjE5LCAyMjEsIDIwLCAxLCAxNjcsIDIxNiwgNjYsIDIzMSwgMTYsIDIwLCAxLCAxNjcsIDIyNywgMTE4LCAyMzEsIDE2LCAKLSAgICAyMCwgMSwgMTY3LCAyMjAsIDE5LCAyMjYsIDkwLCAyMjgsIDE2OSwgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIyNiwgOTAsIAotICAgIDIyOCwgMTcwLCAyMjUsIDU3LCAyMCwgMSwgMTY3LCAyMjQsIDI1MSwgMjI2LCA5MCwgMjI4LCAxNzAsIDIyNSwgNTgsIDIwLCAKLSAgICAxLCAxNjcsIDIzMSwgMjE4LCAyMCwgMSwgMTY3LCAyMTUsIDExOSwgMjMxLCAyMTksIDIwLCAxLCAxNjcsIDIyOSwgNzEsIAotICAgIDIwLCAxLCAxNjcsIDIzMSwgMjE1LCAyMCwgMSwgMTY3LCAyMzEsIDE3NiwgMjAsIDEsIDE2NywgMjMwLCA0OCwgMjAsIDEsIAotICAgIDE2NywgMjIwLCAxMjQsIDIwLCAxLCAxNjcsIDIyNywgMjQxLCAyMCwgMSwgMTY3LCAyMzQsIDE0OSwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCAxMzgsIDIwLCAxLCAxNjcsIDIxOCwgNCwgMjAsIDEsIDE2NywgMjI5LCAxMSwgMjAsIDEsIDE2NywgMjMzLCA4NywgCi0gICAgMjAsIDEsIDE2NywgMjMzLCAxMiwgMjMzLCAxODksIDIwLCAxLCAxNjcsIDIyNywgMjQ4LCAyMzEsIDI0LCAyMCwgMSwgMTY3LCAKLSAgICAyMzEsIDIyMiwgMjAsIDEsIDE2NywgMjI1LCAyNDYsIDIwLCAxLCAxNjcsIDI0MiwgMjMxLCAyMCwgMSwgMTY3LCAyMjYsIAotICAgIDUwLCAyMCwgMSwgMTY3LCAyMzAsIDE1MSwgMjI5LCA0NSwgMjAsIDEsIDE2NywgMjI3LCA5OSwgMjMxLCAyNywgMjAsIDEsIAotICAgIDE2NywgMTA0LCAyMTAsIDE4OCwgMjI5LCAyMjAsIDIwLCAxLCAxNjcsIDI0MiwgMjMyLCAyMCwgMSwgMTY3LCAyMjcsIDI0OCwgCi0gICAgMjI3LCAyNDksIDIwLCAxLCAxNjcsIDIxOSwgMTI4LCAyMCwgMSwgMTY3LCAyMzEsIDksIDIwLCAxLCAxNjcsIDIzMSwgMzAsIAotICAgIDIwLCAxLCAxNjcsIDIzMCwgMTMwLCAyMCwgMSwgMTY3LCAyMzQsIDI0OSwgMjAsIDEsIDE2NywgMjI2LCA5MCwgMjMzLCA0NywgCi0gICAgMjAsIDEsIDE2NywgMjI5LCAxNDksIDIzMywgNDcsIDIwLCAxLCAxNjcsIDIyNSwgMTU4LCAyMCwgMSwgMTY3LCAyMzEsIAotICAgIDIxNiwgMjAsIDEsIDE2NywgMjI4LCAyMDcsIDIwLCAxLCAxNjcsIDIyNCwgMTM0LCAyMCwgMSwgMTY3LCAyMTUsIDExNiwgCi0gICAgMjAsIDEsIDE2NywgMjMyLCA5NCwgMjAsIDEsIDE2NywgMjE5LCA0MSwgMjAsIDEsIDE2NywgMjE2LCAyMTYsIDIwLCAxLCAKLSAgICAxNjcsIDIzMSwgMjEzLCAyMCwgMSwgMTY3LCAyMzQsIDE1NiwgMjAsIDEsIDE2NywgMjI5LCAxNDUsIDIwLCAxLCAxNjcsIAotICAgIDIzMywgMjAxLCAyMCwgMSwgMTY3LCAyMzAsIDEzMSwgMjAsIDEsIDE2NywgMjE5LCAyMTgsIDIwLCAxLCAxNjcsIDIzMiwgCi0gICAgMTM4LCAyMCwgMSwgMTY3LCAyNDQsIDkzLCAyMCwgMSwgMTY3LCAyMjIsIDE5OSwgMjAsIDEsIDE2NywgMjMzLCAyNDEsIDIwLCAKLSAgICAxLCAxNjcsIDIxOSwgMzcsIDIwLCAxLCAxNjcsIDIzMSwgMTczLCAyMjUsIDk5LCAyMCwgMSwgMTY3LCAyMjAsIDEyLCAyMCwgCi0gICAgMSwgMTY3LCAyMjcsIDI0NywgMjAsIDEsIDE2NywgMjE5LCAyNTMsIDIyOCwgMiwgMjEwLCAxOTYsIDIwLCAxLCAxNjcsIAotICAgIDIyNywgMTM4LCAyMzAsIDE0OCwgMjAsIDEsIDE2NywgMjI2LCA4NSwgMjAsIDEsIDE2NywgMjI4LCAxMzksIDIwLCAxLCAKLSAgICAxNjcsIDIxNCwgMTcwLCAyMCwgMSwgMTY3LCAyMjksIDQ4LCAyMCwgMSwgMTY3LCAyMzEsIDIxMiwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCAxODEsIDIwLCAxLCAxNjcsIDIzMSwgMTE5LCAyMCwgMSwgMTY3LCAyMjcsIDE1MSwgMjAsIDEsIDE2NywgMjE2LCAKLSAgICAyMjAsIDIwLCAxLCAxNjcsIDIxOSwgMzQsIDIwLCAxLCAxNjcsIDIyNiwgODYsIDIwLCAxLCAxNjcsIDIyOCwgNiwgMjAsIDEsIAotICAgIDE2NywgMjMxLCAyMjAsIDIwLCAxLCAxNjcsIDIyNywgMTQ4LCAyMCwgMSwgMTY3LCAyMzQsIDIxNiwgMjAsIDEsIDE2NywgCi0gICAgMjI4LCA5LCAyMCwgMSwgMTY3LCAyMTMsIDI1MCwgMjAsIDEsIDE2NywgMjMyLCA5OCwgMjAsIDEsIDE2NywgMjI5LCA5OCwgCi0gICAgMjAsIDEsIDE2NywgMjI5LCAxOTYsIDIwLCAxLCAxNjcsIDIzMSwgMTE4LCAyMCwgMSwgMjI1LCAxMzgsIDIyOCwgNCwgMjAsIAotICAgIDEsIDIyNSwgMTM4LCAyMTUsIDExOSwgMjMxLCAyMTcsIDIwLCAxLCAyMjUsIDEzOCwgMjE5LCAxODUsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjIwLCAxMjgsIDIxNSwgMTE4LCAyMCwgMSwgMjI1LCAxMzgsIDIzMiwgMTQwLCAyMjcsIDI0NCwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMzEsIDEyNSwgMjMxLCAyMjEsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCA4NywgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIAotICAgIDE1LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTIwLCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgMjM3LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIyNSwgMjA4LCAyMCwgMSwgMjI1LCAxMzgsIDIxMSwgODksIDIzMywgNDcsIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAKLSAgICAxMDMsIDIyOCwgMiwgMjI3LCAxNjAsIDIwLCAxLCAyMjUsIDEzOCwgMjI3LCAyNDIsIDIyMCwgMzgsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjI5LCAxMTYsIDIyOCwgMTg0LCAyMCwgMSwgMjI1LCAxMzgsIDI0MiwgMjI5LCAyMCwgMSwgMjI1LCAxMzgsIDIyNSwgCi0gICAgNDksIDIwLCAxLCAyMjUsIDEzOCwgMjE1LCAxMTksIDIyOCwgMCwgMjAsIDEsIDIyNSwgMTM4LCAyMjAsIDQzLCAyMjgsIAotICAgIDE3OSwgMjAsIDEsIDIyNSwgMTM4LCAyMjAsIDM5LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTcsIDIxNiwgMjE5LCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIzMSwgMTA3LCAyMzEsIDEyMSwgMjAsIDEsIDIyNSwgMTM4LCAyMjcsIDE0OSwgMjI3LCAyNDQsIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjM0LCAxNDUsIDIwLCAxLCAyMjUsIDEzOCwgMjQyLCAyMzAsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCAxNDEsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAxMjksIDIwLCAxLCAyMjUsIDEzOCwgMjI1LCAyNDksIDIwLCAxLCAyMjUsIDEzOCwgCi0gICAgMjEzLCAxODIsIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAxMywgMjMwLCA0NiwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDQ3LCAKLSAgICAyMzEsIDEwMywgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIDE5MywgMjAsIDEsIDIyNSwgMTM4LCAyMjIsIDExLCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIxNywgOTcsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyOSwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDMyLCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMzMsIDIzMywgODQsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxOSwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMTgsIDUyLCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTExLCAyMCwgMSwgMjI1LCAxMzgsIDIzMCwgMTMzLCAyMCwgCi0gICAgMSwgMjI1LCAxMzgsIDIyNywgMTYzLCAyMCwgMSwgMjI1LCAxMzgsIDIyNCwgMTM4LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgCi0gICAgMjgsIDIyOSwgNDksIDIwLCAxLCAyMjUsIDEzOCwgMjQ0LCAxMjYsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCA5OCwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyNDQsIDE0NywgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDE1MywgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDIzOSwgCi0gICAgMjI4LCAxNzMsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyMzksIDIyOCwgMTQ5LCAyMCwgMSwgMjI1LCAxMzgsIDIzMywgMTEsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCA1NSwgMjAsIDEsIDIyNSwgMTM4LCAyMjgsIDExLCAyMCwgMSwgMjI1LCAxMzgsIDE4NCwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDc0LCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMSwgMjAsIDEsIDEzNywgMjI5LCAxMiwgCi0gICAgMjMxLCAyMTksIDIwLCAxLCAxMzcsIDIyNywgMTE3LCAyMCwgMSwgMTM3LCAyMTAsIDE5NiwgMjAsIDEsIDEzNywgMjEyLCAKLSAgICA1MywgMjAsIDEsIDEzNywgMjI5LCA0OCwgMjAsIDEsIDEzNywgMjI5LCAxMzcsIDIwLCAxLCAxMzcsIDIyOSwgMTksIDIwLCAKLSAgICAxLCAxMzcsIDI0MiwgMjM5LCAyMCwgMSwgMTM3LCAyMzEsIDExNSwgMjAsIDEsIDEzNywgMjQzLCA3NywgMjAsIDEsIDEzNywgCi0gICAgMjI3LCAxNDAsIDIzMCwgMTcwLCAyMzEsIDMxLCAyMCwgMSwgMTM3LCAyMjcsIDI0MCwgMjMxLCAxMDYsIDIwLCAxLCAxMzcsIAotICAgIDIzMSwgMTEyLCAyMCwgMSwgMTM3LCAyMjUsIDU1LCAyMCwgMSwgMTM3LCAyMjksIDEyMiwgMjAsIDEsIDEzNywgMjMxLCAKLSAgICAxMjMsIDI1MSwgMjksIDIwLCAxLCAxMzcsIDIzNCwgMTQzLCAyMCwgMSwgMTM3LCAyNDIsIDI0MCwgMjAsIDEsIDEzNywgCi0gICAgMjM0LCAxNTAsIDIwLCAxLCAxMzcsIDIxMCwgMjEzLCAyMzAsIDc2LCAyMCwgMSwgMTM3LCAyMjcsIDExMSwgMjAsIDEsIAotICAgIDEzNywgMjMxLCAxMDAsIDIwLCAxLCAxMzcsIDIyOCwgMTAsIDIwLCAxLCAxMzcsIDIzMSwgMTA2LCAyMCwgMSwgMTM3LCAKLSAgICAyMTEsIDE2LCAyMCwgMSwgMTM3LCAyMzMsIDI0OSwgMjAsIDEsIDEzNywgMjM1LCAxMCwgMjAsIDEsIDEzNywgMjIwLCAxMjMsIAotICAgIDIwLCAxLCAxMzcsIDIyOSwgMTMxLCAyMCwgMSwgMTM3LCAyMTcsIDk1LCAyMCwgMSwgMTM3LCAyMjgsIDE1MywgMjAsIDEsIAotICAgIDEzNywgMjE2LCA2NiwgMjEwLCAxOTgsIDIwLCAxLCAxMzcsIDIxOCwgNzksIDIwLCAxLCAxMzcsIDIyOSwgMzksIDIyNywgCi0gICAgMTYwLCAyMCwgMSwgMTM3LCAyMTMsIDE4MSwgMjAsIDEsIDEzNywgMjI5LCAxOTksIDIwLCAxLCAxMzcsIDIzMSwgMjM5LCAKLSAgICAyMzQsIDE1MiwgMjAsIDEsIDEzNywgMjI3LCAyNDksIDIwLCAxLCAxMzcsIDIyOSwgMzQsIDIwLCAxLCAxMzcsIDIzMywgODgsIAotICAgIDIwLCAxLCAxMzcsIDIzMSwgMTA4LCAyMCwgMSwgMTM3LCAyMzEsIDgsIDIwLCAxLCAxMzcsIDIyNywgMjQzLCAyMCwgMSwgCi0gICAgMTM3LCAyMTYsIDIxNSwgMjAsIDEsIDEzNywgMjI5LCAzNiwgMjAsIDEsIDEzNywgMjQzLCAyMzMsIDIwLCAxLCAxMzcsIAotICAgIDIyOSwgMTM2LCAyMCwgMSwgMTM3LCAyMjgsIDEyLCAyMCwgMSwgMTM3LCAyMjgsIDgsIDIwLCAxLCAxMzcsIDI1MSwgMTA3LCAKLSAgICAyMCwgMSwgMTM3LCAyMTMsIDE4MywgMjAsIDEsIDEzNywgMjMxLCAxMTMsIDIwLCAxLCAxMzcsIDIyMiwgMTQwLCAyMCwgMSwgCi0gICAgMTM3LCAyMjgsIDE4MywgMjAsIDEsIDEzNywgMjMzLCAxMDIsIDIwLCAxLCAxMzcsIDIxNiwgNjQsIDIwLCAxLCAxMzcsIAotICAgIDIyNywgMjUwLCAyMjksIDEsIDIwLCAxLCAxMzcsIDIyOCwgMTc1LCAyMCwgMSwgMTM3LCAyMzQsIDE1NiwgMjAsIDEsIDEzNywgCi0gICAgMjI5LCA0MCwgMjAsIDEsIDEzNywgMjMxLCAyMTIsIDIwLCAxLCAxMzcsIDIzMSwgMTAxLCAyMCwgMSwgMTM3LCAyMzIsIDk4LCAKLSAgICAyMCwgMSwgMTM3LCAyMzMsIDE4OSwgMjAsIDEsIDEzNywgMjI4LCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMSwgMjAsIDEsIAotICAgIDEzNywgMjExLCAxODQsIDIwLCAxLCAxMzcsIDIyOSwgMzcsIDIwLCAxLCAxMzcsIDIyNywgMjUzLCAyMCwgMSwgMTM3LCAKLSAgICAyMjcsIDI0NSwgMjAsIDEsIDEzNywgMjMzLCAyMDMsIDIyOCwgMTM5LCAyMCwgMSwgMTM3LCAyMjcsIDI1MSwgMjAsIDEsIAotICAgIDEzNywgMjI5LCAxNDQsIDIwLCAxLCAxMzcsIDIzMSwgMjM5LCAyMjgsIDAsIDIwLCAxLCAxMzcsIDIxMSwgMTAzLCAyMCwgMSwgCi0gICAgMTM3LCAyMjksIDE0MywgMjAsIDEsIDEzNywgMjE5LCAyMjAsIDIwLCAxLCAxMzcsIDIyMCwgMTI2LCAyMCwgMSwgMTM3LCAKLSAgICAyMzEsIDEwOSwgMjAsIDEsIDEzNywgMjMxLCAyMTksIDIwLCAxLCAxMzcsIDIzMSwgMTE5LCAyMCwgMSwgMTM3LCAyMzQsIAotICAgIDE0NCwgMjAsIDEsIDEzNywgMjMxLCAxMTAsIDIwLCAxLCAxMzcsIDIzNCwgMTQ4LCAyMCwgMSwgMTM3LCAyMzEsIDEyMywgCi0gICAgMjI1LCAxMDMsIDIwLCAxLCAxMzcsIDIxMCwgMTc5LCAyMCwgMSwgMTM3LCAyMjgsIDE3MSwgMjAsIDEsIDEzNywgMjMwLCAKLSAgICAyMjAsIDIwLCAxLCAxMzcsIDIzMCwgMTAwLCAyMCwgMSwgMTM3LCAyMjAsIDE1LCAyMCwgMSwgMTM3LCAyMzQsIDE2NiwgCi0gICAgMjMzLCA3MCwgMjAsIDEsIDEzNywgMjM0LCAxNjYsIDI0NCwgMTYwLCAyMCwgMSwgMTM3LCAyMjksIDY5LCAyMCwgMSwgMTM3LCAKLSAgICAyMjksIDE5NiwgMjAsIDEsIDEzNywgMjMyLCAyMDAsIDIwLCAxLCAxMzcsIDIyNSwgNjUsIDIwLCAxLCAxMzcsIDIyNSwgCi0gICAgMTk5LCAyMCwgMSwgMTM3LCAyMTYsIDIzMCwgMjAsIDEsIDEwNywgMjMxLCA5OSwgMjAsIDEsIDEwNywgMjEyLCA1MSwgMjAsIAotICAgIDEsIDEwNywgMjI4LCAxNjksIDIwLCAxLCAxMDcsIDIzMSwgMTYsIDIwLCAxLCAxMDcsIDIyOCwgMTY3LCAyMCwgMSwgMTA3LCAKLSAgICAyMzIsIDIzNSwgMjAsIDEsIDEwNywgMjI4LCAxNzIsIDIwLCAxLCAxMDcsIDIyOCwgNywgMjAsIDEsIDEwNywgMjI5LCA1NCwgCi0gICAgMjAsIDEsIDEwNywgMjI3LCAxNjAsIDIwLCAxLCAxMDcsIDIxMSwgMTk0LCAyMCwgMSwgMTA3LCAyMjksIDksIDIwLCAxLCAKLSAgICAxMDcsIDIyMCwgNjEsIDIwLCAxLCAxMDcsIDIyOSwgMjAsIDIwLCAxLCAxMDcsIDIzNCwgMTUxLCAyMCwgMSwgMTA3LCAyMTYsIAotICAgIDIxNywgMjAsIDEsIDEwNywgMjIwLCA0MSwgMjAsIDEsIDEwNywgMjI4LCAxODAsIDIwLCAxLCAxMDcsIDIxOCwgNTIsIDIwLCAKLSAgICAxLCAxMDcsIDIzNCwgMTU2LCAyMCwgMSwgMTA3LCAyMTEsIDkxLCAyMCwgMSwgMTA3LCAyMzMsIDIwNCwgMjAsIDEsIDEwNywgCi0gICAgMjIxLCAyMzQsIDIwLCAxLCAxMDcsIDIzMSwgMjEsIDIwLCAxLCAxMDcsIDIyOSwgMTM1LCAyMCwgMSwgMTA3LCAyMzEsIAotICAgIDE4OCwgMjAsIDEsIDEwNywgMjMxLCAyNywgMjAsIDEsIDEwNywgMjIwLCAxMjUsIDIwLCAxLCAxMDcsIDIxMSwgMzksIDIwLCAKLSAgICAxLCAxMDcsIDIyOCwgMTc0LCAyMCwgMSwgMTA3LCAyMzQsIDE0NywgMjMxLCAxMDIsIDIwLCAxLCAxMDcsIDIyOSwgMTYsIAotICAgIDIwLCAxLCAxMDcsIDIxNSwgMTE4LCAyMCwgMSwgMTA3LCAyNDIsIDI0OCwgMjAsIDEsIDEwNywgMjI5LCA2LCAyMCwgMSwgCi0gICAgMTA3LCAyNDQsIDEyNywgMjAsIDEsIDEwNywgMjI5LCAxMzksIDIwLCAxLCAxMDcsIDIzMSwgMCwgMjAsIDEsIDEwNywgMjMzLCAKLSAgICA1LCAyMCwgMSwgMTA3LCAyMjksIDEyMSwgMjAsIDEsIDEwNywgMjMwLCAxNDcsIDIwLCAxLCAxMDcsIDIzMSwgNCwgMjAsIDEsIAotICAgIDEwNywgMjI0LCAxMTgsIDIwLCAxLCAxMDcsIDIzMSwgMiwgMjAsIDEsIDEwNywgMjMxLCAxOCwgMjAsIDEsIDEwNywgMjMyLCAKLSAgICA4NCwgMjAsIDEsIDEwNywgMjI3LCAyNTUsIDIwLCAxLCAxMDcsIDIzMSwgMTIyLCAyMCwgMSwgMTA3LCAyMzMsIDE4MCwgMjAsIAotICAgIDEsIDEwNywgMjI3LCAxNTEsIDIwLCAxLCAxMDcsIDIxNiwgMjIwLCAyMCwgMSwgMTA3LCAyMTksIDM0LCAyMCwgMSwgMTA3LCAKLSAgICAyMTAsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNDgsIDIwLCAxLCAxMDcsIDIyMywgMTcwLCAyMCwgMSwgMTA3LCAyMTcsIAotICAgIDEwLCAyMCwgMSwgMTA3LCAyMjksIDE3LCAyMCwgMSwgMTA3LCAyMzEsIDIzLCAyMCwgMSwgMTA3LCAyMjcsIDI1NCwgMjAsIAotICAgIDEsIDEwNywgMjM0LCAxNDYsIDIwLCAxLCAxMDcsIDIyNSwgNTksIDIwLCAxLCAxMDcsIDIyNSwgMTUyLCAyMCwgMSwgMTA3LCAKLSAgICAyMjcsIDEyNywgMjAsIDEsIDEwNywgMjMzLCAxMSwgMjAsIDEsIDEwNywgMjI5LCA1NSwgMjAsIDEsIDEwNywgMjMxLCAyMCwgCi0gICAgMjAsIDEsIDEwNywgMjI5LCAyOSwgMjAsIDEsIDEwNywgMjEwLCAxOTMsIDIwLCAxLCAxMDcsIDIyNiwgMjEsIDIwLCAxLCAKLSAgICAxMDcsIDIxMCwgMTkyLCAyMCwgMSwgMTA3LCAyMjksIDE0NCwgMjAsIDEsIDEwNywgMjI3LCAyNDQsIDIwLCAxLCAxMDcsIAotICAgIDIxOCwgODEsIDIwLCAxLCAxMDcsIDIzMywgMjA4LCAyMCwgMSwgMTA3LCAyMjksIDQ0LCAyMCwgMSwgMTA3LCAyMjksIDE0LCAKLSAgICAyMCwgMSwgMTA3LCAyMTUsIDEwMiwgMjAsIDEsIDEwNywgMjMxLCAzMSwgMjAsIDEsIDEwNywgMjMzLCAxOTgsIDIwLCAxLCAKLSAgICAxMDcsIDIyNywgMjUyLCAyMCwgMSwgMTA3LCAyMTYsIDIxOCwgMjAsIDEsIDEwNywgMjMxLCAyMTQsIDIwLCAxLCAxMDcsIAotICAgIDIyOSwgNTMsIDIwLCAxLCAxMDcsIDIzMywgNCwgMjAsIDEsIDEwNywgMjI5LCAzNSwgMjAsIDEsIDEwNywgMjI4LCAxLCAyMCwgCi0gICAgMSwgMTA3LCAyMjgsIDE1MywgMjAsIDEsIDEwNywgMjQyLCAyMzMsIDIwLCAxLCAxMDcsIDIzMywgMjE3LCAyMCwgMSwgMTA3LCAKLSAgICAyMjMsIDg0LCAyMjYsIDIwOSwgMjAsIDEsIDEwNywgMjE3LCA4NiwgMjAsIDEsIDEwNywgMjE2LCAxMCwgMjAsIDEsIDEwNywgCi0gICAgMjI3LCAxNDgsIDIwLCAxLCAxMDcsIDIyMiwgMjM5LCAyMCwgMSwgMTA3LCAyMzMsIDQ5LCAyMCwgMSwgMTA3LCAyMzEsIDc5LCAKLSAgICAyMCwgMSwgMTA3LCAxOTMsIDIwLCAxLCAxMDcsIDIxOCwgNCwgMjAsIDEsIDEwNywgMjMwLCAxMDIsIDIwLCAxLCAxMDcsIAotICAgIDIyMCwgMjcsIDIwLCAxLCAxMDcsIDIyMCwgMzcsIDIwLCAxLCAxMDcsIDIzMywgMTU1LCAyMCwgMSwgMTA3LCAyMjcsIDIzNywgCi0gICAgMjAsIDEsIDEwNywgMjE5LCAyMjUsIDIwLCAxLCAxMDcsIDIyNywgMjQ2LCAyMCwgMSwgMTA3LCAyMjUsIDIxMSwgMjAsIDEsIAotICAgIDEwNywgMjI4LCAyMzMsIDIwLCAxLCAxMDcsIDIxOSwgMjUyLCAyMCwgMSwgMTA3LCAyMjQsIDEzMywgMjAsIDEsIDEwNywgCi0gICAgMjMwLCA0NiwgMjAsIDEsIDEwNywgMjMyLCAxMTksIDIwLCAxLCAxMDcsIDIyMywgODQsIDIzMCwgOTYsIDIwLCAxLCAxMDcsIAotICAgIDIxNiwgMTE3LCAyMCwgMSwgMTA3LCAyMjcsIDIzOCwgMjAsIDEsIDEwNywgMjMxLCAxMjMsIDE5OCwgMjAsIDEsIDEwNywgCi0gICAgMjIxLCAyMzIsIDIwLCAxLCAxMDcsIDI0NCwgMTk1LCAyMCwgMSwgODIsIDIyOSwgMTQzLCAyMCwgMSwgODIsIDIxNiwgMTYsIAotICAgIDIwLCAxLCA4MiwgMjMxLCAxMTIsIDIwLCAxLCA4MiwgMjMzLCA4OCwgMjAsIDEsIDgyLCAyMTMsIDEyOCwgMjAsIDEsIDgyLCAKLSAgICAyMzIsIDEyNSwgMjAsIDEsIDgyLCAyMjYsIDg5LCAyMCwgMSwgODIsIDIxOSwgNDUsIDIwLCAxLCA4MiwgMjIzLCAxNDUsIAotICAgIDIwLCAxLCA4MiwgMjI4LCAzLCAyMCwgMSwgODIsIDIyOSwgMTE0LCAyMCwgMSwgODIsIDIyNCwgMTQ3LCAyMCwgMSwgODIsIAotICAgIDIxNywgNjIsIDIwLCAxLCA4MiwgMjI5LCAyMiwgMjAsIDEsIDgyLCAyMzMsIDI0NSwgMjAsIDEsIDgyLCAyMTEsIDE4NywgCi0gICAgMjAsIDEsIDgyLCAyMjEsIDE3MCwgMjAsIDEsIDgyLCAyMjksIDQ1LCAyMCwgMSwgODIsIDIyNiwgODYsIDIwLCAxLCA4MiwgCi0gICAgMjE2LCAxNywgMjAsIDEsIDgyLCAyMzMsIDIwMiwgMjAsIDEsIDgyLCAyMzIsIDEzOSwgMjAsIDEsIDgyLCAyMjgsIDYsIDIwLCAKLSAgICAxLCA4MiwgMjI4LCAyNTQsIDIwLCAxLCA4MiwgMjMxLCAyMjAsIDIwLCAxLCA4MiwgMjI5LCAxNSwgMjAsIDEsIDgyLCAyMjgsIAotICAgIDI1MywgMjAsIDEsIDgyLCAyMjgsIDUsIDIwLCAxLCA4MiwgMjIyLCAyMzcsIDIwLCAxLCA4MiwgMjI4LCAxNzEsIDIwLCAxLCAKLSAgICA4MiwgMjI1LCAyMTAsIDIwLCAxLCA4MiwgMjIyLCAzMSwgMjAsIDEsIDgyLCAyMjksIDMwLCAyMCwgMSwgODIsIDIzMSwgMTAsIAotICAgIDIwLCAxLCA4MiwgMjQyLCAyMjcsIDIwLCAxLCA4MiwgMjI5LCAxOCwgMjAsIDEsIDgyLCAyMjgsIDE4MiwgMjAsIDEsIDgyLCAKLSAgICAyMzEsIDE3MiwgMjAsIDEsIDgyLCAyMzIsIDEyMSwgMjAsIDEsIDgyLCAyMjksIDUwLCAyMCwgMSwgODIsIDIyOSwgMTI3LCAKLSAgICAyMCwgMSwgODIsIDIxNywgODUsIDIyNywgMjQ0LCAyMCwgMSwgODIsIDIyMCwgMTI3LCAyMCwgMSwgODIsIDIyNCwgMTQzLCAKLSAgICAyMCwgMSwgODIsIDIyOSwgMTQ3LCAyMTksIDUxLCAyMCwgMSwgODIsIDIyOSwgMzgsIDIyNywgMTYwLCAyMCwgMSwgODIsIAotICAgIDIxMSwgNCwgMjAsIDEsIDgyLCAyNDIsIDIyOCwgMjAsIDEsIDgyLCAyMTUsIDExNywgMjAsIDEsIDgyLCAyMTEsIDE5LCAyMCwgCi0gICAgMSwgODIsIDIyNSwgMTYsIDIwLCAxLCA4MiwgMjE1LCAxMDcsIDIwLCAxLCA4MiwgMjM0LCAxNTQsIDIwLCAxLCA4MiwgMjE4LCAKLSAgICA4MCwgMjAsIDEsIDgyLCAyMTYsIDIxOSwgMjAsIDEsIDgyLCAyMTMsIDE4NCwgMjAsIDEsIDgyLCAyMTIsIDYsIDIwLCAxLCAKLSAgICA4MiwgMjMzLCAxMzIsIDIwLCAxLCA4MiwgMjI0LCAxNTAsIDIwLCAxLCA4MiwgMjE3LCA5NiwgMjAsIDEsIDgyLCAyNDIsIAotICAgIDI0NywgMjAsIDEsIDgyLCAyMjksIDU5LCAyMCwgMSwgODIsIDIyMCwgNDAsIDIwLCAxLCA4MiwgMjMxLCA1LCAyMCwgMSwgCi0gICAgODIsIDIzMSwgMTE2LCAyMCwgMSwgODIsIDIyNywgMTE1LCAyMCwgMSwgODIsIDIyOCwgMTM2LCAyMCwgMSwgODIsIDI0MywgCi0gICAgNzMsIDIwLCAxLCA4MiwgMjE1LCAxMDgsIDIwLCAxLCA4MiwgMjMzLCAyMTEsIDIwLCAxLCA4MiwgMjExLCA2NywgMjAsIDEsIAotICAgIDgyLCAyMjcsIDE0OSwgMjUwLCAxNiwgMjAsIDEsIDgyLCAyMTAsIDI1MCwgMjAsIDEsIDgyLCAyMzEsIDIyLCAyMCwgMSwgCi0gICAgODIsIDIyOSwgMTMyLCAyMCwgMSwgODIsIDIyNSwgMTAwLCAyMCwgMSwgODIsIDIxMCwgMTk3LCAyMCwgMSwgODIsIDIzMywgCi0gICAgNiwgMjAsIDEsIDgyLCAyNDMsIDIzMywgMjAsIDEsIDgyLCAyNDMsIDcyLCAyMCwgMSwgODIsIDIyOSwgOCwgMjAsIDEsIDgyLCAKLSAgICAyMzQsIDE1NiwgMjAsIDEsIDgyLCAyMzEsIDIyMywgMjAsIDEsIDgyLCAyMjksIDIxLCAyMCwgMSwgODIsIDI0MiwgMjM0LCAKLSAgICAyMCwgMSwgODIsIDI0NCwgMTk2LCAyMCwgMSwgODIsIDIyNywgMjM5LCAyMCwgMSwgODIsIDIyNSwgMTUzLCAyMCwgMSwgODIsIAotICAgIDIxMSwgMTcsIDIwLCAxLCA4MiwgMjI5LCA0NiwgMjAsIDEsIDgyLCAyMjcsIDE0OSwgMjUyLCAyMywgMjAsIDEsIDgyLCAKLSAgICAyMjcsIDk1LCAyMCwgMSwgODIsIDIyNCwgMjQ3LCAyMCwgMSwgODIsIDIzMCwgMjIwLCAyMCwgMSwgODIsIDI0MywgMjMxLCAKLSAgICAyMCwgMSwgODIsIDIyOSwgMjIwLCAyMCwgMSwgODIsIDIzMCwgMTAwLCAyMCwgMSwgODIsIDI0MiwgMjMzLCAyMCwgMSwgODIsIAotICAgIDI0MywgMjM1LCA3MywgMjAsIDEsIDgyLCAyMzAsIDQ3LCAyMCwgMSwgODIsIDIyNCwgMTQ2LCAyMCwgMSwgODIsIDIyOSwgCi0gICAgMTAsIDIwLCAxLCA4MiwgMjMzLCAxODksIDIwLCAxLCA4MiwgMjI1LCA5NywgMjAsIDEsIDgyLCAyMjcsIDI0NywgMjAsIDEsIAotICAgIDgyLCAyMTEsIDE4LCAyMCwgMSwgODIsIDIyOSwgMzEsIDIwLCAxLCA4MiwgMjI2LCA5MCwgMjI1LCAxODcsIDIwLCAxLCA4MiwgCi0gICAgMjQzLCAyMzUsIDI1MSwgMTUsIDIwLCAxLCA4MiwgMjQ0LCAzNywgMjAsIDEsIDgyLCAyMjgsIDE3NiwgMjAsIDEsIDgyLCAKLSAgICA2MSwgMjAsIDEsIDgyLCAyMTYsIDEwLCAyMCwgMSwgODIsIDc2LCAyMCwgMSwgODIsIDczLCAyMCwgMSwgODIsIDIzMywgODYsIAotICAgIDIwLCAxLCA4MiwgMjI2LCA5MCwgMjI1LCAyMywgMjAsIDEsIDgyLCAyMTcsIDEwMSwgMjAsIDEsIDgyLCAyMTcsIDUxLCAyMCwgCi0gICAgMSwgODIsIDIyOSwgMTQ3LCAyMzAsIDM0LCAyNDAsIDIzNCwgMjAsIDEsIDgyLCAyMjAsIDE1LCAyMCwgMSwgODIsIDIxMSwgCi0gICAgMTQsIDIwLCAxLCA4MiwgMjI4LCAyNDcsIDIwLCAxLCA4MiwgMjEwLCAyMDIsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDIxNywgCi0gICAgMjQwLCAyMCwgMSwgODIsIDIxMCwgMjI3LCAyNDksIDE0NywgMjAsIDEsIDgyLCAyMTAsIDE4NywgMjAsIDEsIDgyLCAyMTAsIAotICAgIDE5NSwgMjAsIDEsIDgyLCAyMzQsIDE0MiwgMjAsIDEsIDgyLCAyMjUsIDE1MSwgMjAsIDEsIDgyLCAyMjgsIDE3NywgMjQ1LCAKLSAgICAxMDIsIDIwLCAxLCA4MiwgMjI0LCAxNDQsIDIwLCAxLCA4MiwgMjExLCAxOTIsIDIwLCAxLCA4MiwgMjQ0LCAxNDcsIDIwLCAKLSAgICAxLCA4MiwgMjEzLCAyNTAsIDIwLCAxLCA4MiwgMjMyLCA5OCwgMjAsIDEsIDgyLCAyMzAsIDIzMCwgMjAsIDEsIDgyLCAyMjMsIAotICAgIDUxLCAyMCwgMSwgODIsIDIyMywgMTcxLCAyMCwgMSwgODIsIDIyOCwgMjQ2LCAyMCwgMSwgODIsIDIyOSwgNzcsIDIwLCAxLCAKLSAgICA4MiwgMjIwLCA3LCAyMCwgMSwgODIsIDIxOSwgMjUyLCAyMCwgMSwgODIsIDI0MywgMjM1LCAyMjMsIDg2LCAyMCwgMSwgODIsIAotICAgIDE5NywgMjAsIDEsIDgyLCAyMjUsIDEwOCwgMjAsIDEsIDgyLCAyMzIsIDExOSwgMjAsIDEsIDgyLCAyMzQsIDI4LCAyMCwgMSwgCi0gICAgODIsIDIzMSwgNTgsIDIwLCAxLCA4MiwgMTg0LCAyMCwgMSwgODIsIDIzMSwgMTY5LCAyMCwgMSwgODIsIDIxNiwgMjIxLCAKLSAgICAyMCwgMSwgODIsIDIzNCwgOTIsIDIwLCAxLCA4MiwgMjMwLCAxNTAsIDIwLCAxLCA4MiwgMjE2LCAyNDcsIDIwLCAxLCA4MiwgCi0gICAgMjQ0LCAxNjksIDIwLCAxLCA4MiwgMjQyLCAyMjMsIDIwLCAxLCAyMjUsIDEzNywgMTc2LCAyMCwgMSwgMjI1LCAxMzcsIDcwLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIzMywgMjE3LCAyMCwgMSwgMjI1LCAxMzcsIDI0NSwgMjA5LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyMywgMTA4LCAyMCwgMSwgMjI1LCAxMzcsIDIxNywgODYsIDIwLCAxLCAyMjUsIDEzNywgMjI3LCAxNDgsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjMzLCAxMzUsIDIwLCAxLCAyMjUsIDEzNywgMjIyLCAyMzksIDIwLCAxLCAyMjUsIDEzNywgMjIzLCAyOSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzEsIDc5LCAyMCwgMSwgMjI1LCAxMzcsIDIxNywgMTAxLCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyOSwgMTQ2LCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgMTgzLCAyMCwgMSwgMjI1LCAxMzcsIDE5MywgMjAsIDEsIDIyNSwgCi0gICAgMTM3LCAyMTgsIDQsIDIwLCAxLCAyMjUsIDEzNywgMjIwLCAyNywgMjAsIDEsIDIyNSwgMTM3LCAyMTksIDE5MSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyMjAsIDEyMywgMjAsIDEsIDIyNSwgMTM3LCAyMzMsIDE1NSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDE1NiwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDIwOSwgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDIzNywgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjgsIDE1NCwgMjAsIDEsIDIyNSwgMTM3LCAyMTAsIDIyNiwgMjAsIDEsIDIyNSwgMTM3LCAyMTksIDIyNSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAxOTEsIDIwLCAxLCAyMjUsIDEzNywgMjI4LCA5LCAyMCwgMSwgMjI1LCAxMzcsIDIyNSwgMTUxLCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDIyNywgMjQ2LCAyMCwgMSwgMjI1LCAxMzcsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAxMzcsIDIyNSwgMjExLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIyMiwgMTQwLCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgMjMzLCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyMywgNTEsIDIwLCAxLCAyMjUsIDEzNywgMjM0LCAxNjUsIDIwLCAxLCAyMjUsIDEzNywgMjI5LCA3LCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIyOSwgNTYsIDIwLCAxLCAyMjUsIDEzNywgMjIwLCA3LCAyMCwgMSwgMjI1LCAxMzcsIDIyNCwgMTQ3LCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDI0NCwgMzcsIDIwLCAxLCAyMjUsIDEzNywgMjEyLCA2NSwgMjAsIDEsIDIyNSwgMTM3LCAyMzIsIDI0MSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzIsIDExOSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDI4LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIzMSwgMTE0LCAyMCwgMSwgMjI1LCAxMzcsIDIyMywgODMsIDIwLCAxLCAyMjUsIDEzNywgMTg0LCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIzMCwgMTYxLCAyMCwgMSwgMjI1LCAxMzcsIDIzMSwgMTIyLCAyMCwgMSwgMjI1LCAxMzcsIDIxNiwgMjMwLCAyMCwgCi0gICAgMSwgMjI1LCAxMzcsIDIzMywgMjUxLCAyMCwgMSwgMjI1LCAxMzcsIDIyMSwgMjUxLCAyMCwgMSwgMjI1LCAxMzcsIDIxMiwgCi0gICAgMTE1LCA5NSwgMSwgMTkwLCA5NSwgMSwgMjUyLCAxOTEsIDk1LCAxLCA4LCAxOTAsIDk1LCAxLCAyMjUsIDQyLCA5NSwgMSwgCi0gICAgMTg0LCA5NSwgMSwgMjMwLCAyMzMsIDk1LCAxLCAyNTQsIDIzLCAxODQsIDk1LCAxLCAyNDQsIDE5NiwgOTUsIDEsIDIxNCwgCi0gICAgMjcsIDk1LCAxLCAyMTMsIDE3NywgOTUsIDEsIDIxNywgMTA1LCA5NSwgMSwgMjQ4LCAyMjEsIDk1LCAxLCA4LCAyMTUsIAotICAgIDE1NiwgOTUsIDEsIDgsIDIxNywgMTA1LCA5NSwgMSwgMjE1LCAxNTYsIDk1LCAxLCAyNDgsIDEzNSwgOTUsIDEsIDE5NywgCi0gICAgOTUsIDEsIDIyOCwgMjM3LCA5NSwgMSwgOCwgMjI4LCAxMTAsIDk1LCAxLCAyNTQsIDIzLCAxOTcsIDk1LCAxLCAyMjgsIAotICAgIDExMCwgOTUsIDEsIDIyOCwgOTYsIDk1LCAxLCAyMzMsIDEzNSwgOTUsIDEsIDIzMiwgNjEsIDk1LCAxLCAyMzIsIDI1NCwgCi0gICAgOTUsIDEsIDIzMiwgMjQzLCA5NSwgMSwgMjE2LCA1NiwgOTUsIDEsIDI0NywgMTUzLCA5NSwgMSwgMjE2LCA0OCwgOTUsIDEsIAotICAgIDI0NywgMTUyLCA5NSwgMSwgMTc2LCA5NSwgMSwgMjQzLCAxMzUsIDk1LCAxLCA4LCAxNzYsIDk1LCAxLCAyMjQsIDg4LCA5NSwgCi0gICAgMSwgMjI0LCA2NiwgOTUsIDEsIDIyOSwgNzcsIDk1LCAxLCAyMjksIDI4LCA5NSwgMSwgMjU0LCAyMywgMjI5LCA3NywgOTUsIAotICAgIDEsIDE2MiwgOTUsIDEsIDIxMSwgMTY1LCA5NSwgMSwgMjQyLCAyNDksIDk1LCAxLCAyNDIsIDIyNiwgOTUsIDEsIDIxNSwgCi0gICAgMTY1LCA5NSwgMSwgMjQ2LCAyNiwgOTUsIDEsIDIyNywgMTY1LCA5NSwgMSwgMjI3LCAxNTAsIDk1LCAxLCAyMTUsIDE3NSwgCi0gICAgOTUsIDEsIDI0NiwgMzMsIDk1LCAxLCA4LCAyMTUsIDE3NSwgOTUsIDEsIDgsIDI0NiwgMzMsIDk1LCAxLCAyMjMsIDEwNiwgCi0gICAgMjE1LCAxNzUsIDk1LCAxLCAyMjAsIDEwMiwgOTUsIDEsIDIxOCwgMjIzLCA5NSwgMSwgMjEwLCA4MiwgOTUsIDEsIDIxMCwgCi0gICAgMTQsIDk1LCAxLCAyMTUsIDE4MywgOTUsIDEsIDI0NiwgMzgsIDk1LCAxLCA4LCAyMTUsIDE4MywgOTUsIDEsIDIwNiwgOTUsIAotICAgIDEsIDIxMCwgMTE2LCA5NSwgMSwgMjEwLCAxNSwgOTUsIDEsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAyMjMsIDk1LCAxLCAKLSAgICAyNTQsIDIzLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjE1LCA5NSwgMSwgMjA5LCAyMjIsIDk1LCAxLCAyMTIsIDY1LCA5NSwgCi0gICAgMSwgMjU0LCAyMDksIDk1LCAxLCAyNDEsIDE4OSwgOTUsIDEsIDIyOSwgMTkyLCA5NSwgNSwgMjUzLCAyMjIsIDk1LCA1LCAKLSAgICAyMjMsIDEwNiwgMjEzLCAxMzMsIDk1LCA1LCAyMjMsIDEwNiwgMjUzLCAyMjIsIDk1LCAyNSwgNSwgNjEsIDk1LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgOTUsIDI1LCA1LCAyNTQsIDIwNSwgOTUsIDI1LCA1LCAyNTQsIDEyMywgOTUsIDI1LCA1LCAyNTQsIDExNSwgCi0gICAgOTUsIDI1LCA1LCA3NiwgOTUsIDI1LCA1LCAyMjYsIDE4MywgOTUsIDI1LCA1LCAyMTEsIDIyNywgOTUsIDI1LCA1LCAyMTIsIAotICAgIDk4LCA5NSwgMjUsIDUsIDc1LCA5NSwgMjUsIDUsIDI0NSwgMTUwLCA5NSwgMjUsIDUsIDI0NSwgMTM4LCA5NSwgMjUsIDUsIAotICAgIDIyNiwgMjMyLCA5NSwgMjUsIDUsIDczLCA5NSwgMjUsIDUsIDI0MCwgMTE5LCA5NSwgMjUsIDUsIDI0MCwgMTE4LCA5NSwgCi0gICAgMjUsIDUsIDI0MCwgMTE3LCA5NSwgMjUsIDUsIDIzNSwgMTg5LCA5NSwgMjUsIDUsIDIzNiwgNjAsIDk1LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgOTUsIDI1LCA1LCAyMzUsIDE1NiwgOTUsIDI1LCA1LCAyMzUsIDIzMSwgOTUsIDI1LCA1LCA3MCwgOTUsIDI1LCA1LCAKLSAgICAyMTQsIDIyOSwgOTUsIDI1LCA1LCAyMTQsIDIyOCwgOTUsIDI1LCA1LCAyMTQsIDIyNywgOTUsIDI1LCA1LCAyMTQsIDExOCwgCi0gICAgOTUsIDI1LCA1LCAyMTQsIDIxMSwgOTUsIDI1LCA1LCAyMTQsIDE3OCwgOTUsIDI1LCA1LCAyMTEsIDExNywgOTUsIDI1LCA1LCAKLSAgICAyMTEsIDgsIDk1LCAyNSwgNSwgMjU0LCAyNDMsIDk1LCAyNSwgNSwgMjU0LCAyMzksIDk1LCAyNSwgNSwgMjQ1LCA4NiwgOTUsIAotICAgIDI1LCA1LCAyMjIsIDE4MywgMjQ1LCA4NiwgOTUsIDI1LCA1LCAyNDUsIDkyLCA5NSwgMjUsIDUsIDIyMiwgMTgzLCAyNDUsIAotICAgIDkyLCA5NSwgMjUsIDUsIDI1NCwgMjAxLCA5NSwgMjUsIDUsIDI0NSwgMTk1LCA5NSwgMjUsIDUsIDI1MywgMTkyLCA5NSwgCi0gICAgMjUsIDUsIDIyNiwgMTM0LCA5NSwgMjUsIDUsIDIzMCwgMjUsIDk1LCAyNSwgNSwgMjI5LCA3OSwgOTUsIDEzOCwgMjIyLCAKLSAgICAyNTEsIDk1LCAxMzgsIDIxNiwgMTQsIDIyMiwgMjUxLCA5NSwgMTM4LCA0OCwgOTUsIDEzOCwgNTEsIDk1LCAxLCAyMTYsIAotICAgIDI4LCA5NSwgMSwgMjE2LCAyNywgOTUsIDEsIDIxNiwgMjYsIDk1LCAxLCAyMTYsIDI1LCA5NSwgMSwgMjE2LCAyNCwgOTUsIAotICAgIDEsIDIxNiwgMjMsIDk1LCAxLCAyMTYsIDIyLCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjksIDk1LCAxLCAyMjMsIDEwNiwgCi0gICAgMjE2LCAyOCwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDI2LCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjUsIDk1LCAxLCAyMjMsIAotICAgIDEwNiwgMjE2LCAyNCwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDIyLCA1NiwgMSwgMjU0LCAyMywgNzUsIDE0MSwgMSwgMjU0LCAKLSAgICAyMywgMjExLCA0NywgNDksIDI4LCAxNiwgMjI0LCAxNTQsIDQ5LCAyOCwgMTYsIDI0OCwgMTU4LCA0OSwgMjgsIDE2LCAyMjUsIAotICAgIDE3NSwgNDksIDI4LCAxNiwgMjI2LCAxMTMsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMjYsIDExMywgMjQ3LCAyMDEsIDQ5LCAKLSAgICAyOCwgMTYsIDIxNCwgMTYsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAxOTcsIDQ5LCAyOCwgMTYsIDIxNywgMTY5LCA0OSwgMjgsIDE2LCAyMjYsIDksIDQ5LCAyOCwgMTYsIDIxMCwgMjE3LCAKLSAgICA0OSwgMjgsIDE2LCAyMTAsIDIxOCwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIDIzMywgMjM0LCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDY4LCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjQ1LCAyNiwgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDIxNywgMiwgNDksIDI4LCAKLSAgICAxNiwgMjM0LCAxNjEsIDQ5LCAyOCwgMTYsIDI1NCwgNTgsIDQ5LCAyOCwgMTYsIDI1NCwgNTksIDI0NywgMjAxLCA0OSwgMjgsIAotICAgIDE2LCAyMTcsIDE3NSwgNDksIDI4LCAxNiwgMjE2LCAxNTksIDQ5LCAyOCwgMTYsIDIyNiwgMjA2LCAyNTQsIDIxLCA0OSwgCi0gICAgMjgsIDE2LCAyNDIsIDE1OSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjI0LCAxNTMsIDQ5LCAyOCwgMTYsIDI1MCwgMTQ5LCAKLSAgICA0OSwgMjgsIDE2LCAyMTQsIDYsIDQ5LCAyOCwgMTYsIDIzNSwgMTY0LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgCi0gICAgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyMSwgMjEzLCA0OSwgMjgsIDE2LCAKLSAgICAyMjYsIDAsIDQ5LCAyOCwgMTYsIDIxOCwgMTQ2LCAyNTQsIDYxLCA0OSwgMjgsIDE2LCAyMjYsIDExMiwgMjU0LCAyMSwgNDksIAotICAgIDI4LCAxNiwgMjE0LCAxNSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCA2MiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICA1NiwgNDksIDI4LCAxNiwgMjM0LCAzNywgNDksIDI4LCAxNiwgMjIzLCA0NiwgNDksIDI4LCAxNiwgMjI1LCAxMDYsIDI1NCwgCi0gICAgMjEsIDQ5LCAyOCwgMTYsIDIxNiwgODMsIDQ5LCAyOCwgMTYsIDI1NCwgMTIxLCA0OSwgMjgsIDE2LCAyMjEsIDE1OSwgNDksIAotICAgIDI4LCAxNiwgMjE3LCAxNzgsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIxNywgMTc4LCAyMzEsIDQwLCAyMTgsIDE0NCwgNDksIAotICAgIDI4LCAxNiwgMjI2LCAxMDcsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIxNiwgMTkwLCA0OSwgMjgsIDE2LCAyMzMsIDI3LCA0OSwgCi0gICAgMjgsIDE2LCAyNDYsIDQxLCA0OSwgMjgsIDE2LCAyMTUsIDIyNywgNDksIDI4LCAxNiwgMjE2LCAyMzIsIDQ5LCAyOCwgMTYsIAotICAgIDIzMywgMjM3LCA0OSwgMjgsIDE2LCAyNTQsIDY4LCAyNDUsIDI2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgCi0gICAgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM2LCAxMiwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMjAwLCAyMTUsIDE5OCwgNDksIDI4LCAxNiwgMjI1LCAyMDAsIDQ5LCAyOCwgMTYsIDIyNCwgMTU4LCA0OSwgMjgsIAotICAgIDE2LCAyMzQsIDExLCA0OSwgMjgsIDE2LCAyNTAsIDgwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjMsIDE0NiwgNDksIDI4LCAKLSAgICAxNiwgMjI2LCAxMiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjI2LCAxMCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjQwLCAxMDksIAotICAgIDQ5LCAyOCwgMTYsIDIyOSwgMjAzLCA0OSwgMjgsIDE2LCAyMjUsIDE1NiwgNDksIDI4LCAxNiwgMjM0LCAxMiwgMjU0LCAKLSAgICAxNDksIDQ5LCAyOCwgMTYsIDIxNSwgMTk5LCAyNTQsIDE0OSwgNDksIDI4LCAxNiwgMjE4LCAxMjMsIDQ5LCAyOCwgMTYsIAotICAgIDI0MiwgMTIzLCA0OSwgMjgsIDE2LCAyMzUsIDE2NCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI2LCAyMDYsIDIyOSwgOTUsIAotICAgIDQ5LCAyOCwgMTYsIDIyNiwgMTEzLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjUsIDE1NSwgNDksIDI4LCAxNiwgMjMzLCAKLSAgICAyNTQsIDQ5LCAyOCwgMTYsIDIyNSwgMTU0LCA0OSwgMjgsIDE2LCAyMzMsIDIzNiwgNDksIDI4LCAxNiwgMjI1LCAyMDEsIAotICAgIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgCi0gICAgMjI5LCA5NiwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjEwLCAyMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNTksIDIyOSwgOTUsIDQ5LCAKLSAgICAyOCwgMTYsIDI1NCwgNjAsIDIxNywgMTc2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTAsIDIxNiwgNDksIDI4LCAxNiwgCi0gICAgMjMzLCAyMzUsIDQ5LCAyOCwgMTYsIDI0NSwgMTczLCA0OSwgMjgsIDE2LCAyNTAsIDE1MCwgNDksIDI4LCAxNiwgMjMwLCAKLSAgICAxOTgsIDIzNSwgMTYzLCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjUsIDEwNiwgMjI5LCAKLSAgICA5NSwgNDksIDI4LCAxNiwgMjI0LCAxNTksIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNiwgMjAzLCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDg0LCA0OSwgMjgsIDE2LCAyMzIsIDU4LCA0OSwgMjgsIDE2LCAyMjYsIDEwLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjYsIAotICAgIDEyLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDUsIDYwLCAyMjYsIDExLCA0OSwgMjgsIDE2LCAyMzMsIDE1MywgNDksIDI4LCAKLSAgICAxNiwgMjU0LCA4NSwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgMTc2LCA0OSwgMjgsIAotICAgIDE2LCAyMTcsIDE3OCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjE3LCAxNzAsIDQ5LCAyOCwgMTYsIDI1MCwgODAsIDIyOSwgCi0gICAgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgMTA2LCA0OSwgMjgsIDE2LCAyMjEsIDE2MCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjExLCAKLSAgICAxNTEsIDIzNCwgMzcsIDQ5LCAyOCwgMTYsIDIxNSwgMTk2LCA0OSwgMjgsIDE2LCAyMjQsIDE2MCwgNDksIDI4LCAxNiwgCi0gICAgMjE1LCAyMDAsIDQ5LCAyOCwgMTYsIDIxNSwgMTk3LCA0OSwgMjgsIDE2LCAyMjQsIDE1NywgNDksIDI4LCAxNiwgMjE1LCAKLSAgICAxOTUsIDQ5LCAyOCwgMTYsIDIyNCwgMTU2LCA0OSwgMjgsIDE2LCAyNDIsIDE1OCwgNDksIDI4LCAxNiwgMjU0LCAxNCwgNDksIAotICAgIDI4LCAxNiwgMjQ1LCA2MCwgMjU0LCAxNCwgNDksIDI4LCAxNiwgMjI2LCAxMDcsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxNiwgCi0gICAgMTg5LCAyNDUsIDY5LCA0OSwgMjgsIDE2LCAyMTYsIDE4OSwgMjQ1LCAyNSwgNDksIDI4LCAxNiwgMjE2LCAxOTEsIDI1NCwgCi0gICAgNjMsIDQ5LCAyOCwgMTYsIDIxNiwgMTg0LCAyMzQsIDI0NywgMjU0LCA1NSwgNDksIDI4LCAxNiwgMjM0LCAxOTksIDQ5LCAKLSAgICAyOCwgMTYsIDI0NSwgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDExLCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjExLCAxMSwgCi0gICAgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjE4LCAxNDUsIDQ5LCAyOCwgMTYsIDIzNCwgMzgsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjAyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjMzLCAyMzgsIAotICAgIDI1NCwgMTQ5LCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjU0LCA2MiwgMjI5LCA5NSwgCi0gICAgNDksIDI4LCAxNiwgMjU0LCA2NCwgNDksIDI4LCAxNiwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIDIxNSwgMjEwLCA0OSwgMjgsIAotICAgIDE2LCAyMTYsIDIyNCwgNDksIDI4LCAxNiwgMjM0LCAyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyNDUsIDEzNCwgMjUwLCA3MSwgCi0gICAgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjQ2LCA0MiwgMjUwLCA3MiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjE1LCAyMTIsIAotICAgIDI1MCwgNzIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDIxNiwgMjM0LCAyNTAsIDcyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAKLSAgICAyMzYsIDcsIDI1MCwgNzEsIDQ5LCAyOCwgMTYsIDI0MiwgMTU5LCAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyNDIsIAotICAgIDE1OSwgMjI2LCAxLCAyNTQsIDEwLCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI2LCAxLCAyNDgsIDI5LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDIyNSwgNDksIDI4LCAxNiwgMjQ3LCAyMjYsIDIyNiwgMSwgMjU0LCAxMSwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjI2LCAyMjYsIDEsIDI1NCwgMTEsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDI0NywgMjI2LCAyMjYsIDEsIDI0OCwgCi0gICAgMjksIDQ5LCAyOCwgMTYsIDIxNSwgMjE2LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCA0OSwgMjgsIDE2LCAyMzYsIDE0LCA0OSwgCi0gICAgMjgsIDE2LCAyNDcsIDI0NiwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIyNSwgMCwgMjU0LCAxNiwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICAyMTEsIDI1NCwgMTMsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyNTQsIDE2LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjMxLCAKLSAgICAzNCwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIzMSwgNDUsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyNDIsIDE2MCwgNDksIAotICAgIDI4LCAxNiwgMjU0LCAyMTEsIDI0MiwgMTU3LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjI1LCAwLCAyNDIsIDE2MCwgNDksIAotICAgIDI4LCAxNiwgMjMxLCAxNTEsIDIyNCwgMTY1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDI1NCwgMTUxLCAKLSAgICAyMjQsIDE2NSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyNDgsIDI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgCi0gICAgMjMxLCAxNTEsIDI1NCwgMTUxLCAyNDgsIDI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNSwgMjA1LCAKLSAgICAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNSwgMjE3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE2LCAyMjgsIAotICAgIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE2LCAyMjgsIDIzMywgMzUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAKLSAgICAyMzEsIDE1MSwgMjMzLCAzNSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMjUsIDM5LCAyNDAsIDEwNywgNDksIAotICAgIDI4LCAxNiwgMjM1LCAxNjksIDIxNiwgMjUxLCAyNDAsIDEwOCwgNDksIDI4LCAxNiwgMjU0LCA2MCwgMjE2LCAyNTEsIDI0MCwgCi0gICAgMTA4LCA0OSwgMjgsIDE2LCAyNDQsIDE3MiwgMjE2LCAyMjUsIDQ5LCAyOCwgMTYsIDI0NCwgMTcyLCAyMzAsIDE0MywgNDksIAotICAgIDI4LCAxNiwgMjQ0LCAxNzIsIDI0NywgMjMwLCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE0LCAxMCwgMjQwLCAxMDcsIDQ5LCAKLSAgICAyOCwgMTYsIDIzMSwgMTUxLCAyMjQsIDE2NCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMjUsIDM5LCAyMTYsIAotICAgIDIyOCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDI0MiwgMTU1LCAyMzAsIDI2LCAyNTQsIDYzLCA0OSwgMjgsIDE2LCAyNDIsIAotICAgIDE1NSwgMjMwLCAyNiwgMjQ3LCAyMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTQ4LCAyMzQsIDI0NywgMjQzLCAyMzYsIDIxMywgCi0gICAgMTI0LCA0OSwgMjgsIDE2LCAyMzYsIDEzLCA0OSwgMjgsIDE2LCAyMzYsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjU0LCAKLSAgICAyMiwgMjQ4LCAyNywgMjQwLCAxMDYsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMTkwLCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOSwgMjAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjI5LCAxOTgsIDI0MCwgMTA3LCAKLSAgICA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDI0OCwgMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIxOSwgMTAyLCAKLSAgICAyNDcsIDI0MywgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIzNCwgMTgyLCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjI4LCAyMzQsIAotICAgIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOCwgMjM0LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDIzNiwgMjMxLCAxOTEsIDI1MCwgNzMsIDI0NywgMjMwLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjMxLCAxOTEsIAotICAgIDI1MCwgNzMsIDIzMCwgMTQzLCA0OSwgMjgsIDE2LCAyNDQsIDEyMiwgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNCwgOSwgNDksIAotICAgIDI4LCAxNiwgMjQzLCAyMzYsIDIxOSwgMTAyLCAyNTAsIDczLCAyMTcsIDE3OSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIyOSwgCi0gICAgOTcsIDQ5LCAyOCwgMTYsIDI1MCwgNzQsIDIwOSwgMjQ5LCA0OSwgMjgsIDE2LCAyNTAsIDc0LCAyMzQsIDM2LCA0OSwgMjgsIAotICAgIDE2LCAyNTAsIDc0LCAyMTksIDksIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDAsIDE1NCwgMjExLCAxMCwgMjE2LCAyMjksIAotICAgIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDUsIDE0OSwgMjU0LCA4NiwgNDksIDI4LCAxNiwgMjExLCAxMCwgMjE1LCAyMDYsIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMTUsIDIwNiwgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIxNiwgMjI5LCA0OSwgMjgsIAotICAgIDE2LCAyNDcsIDIzOCwgMjU0LCA2NSwgMjQ2LCA0MiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMzAsIDE0MSwgCi0gICAgMjE2LCAyMzMsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjQ3LCAyMjIsIDI0NSwgMzYsIDI0NywgMTM5LCAKLSAgICA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjE1LCAyMTQsIDIyNiwgMjExLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMCwgCi0gICAgMjU0LCA2NSwgMjQ2LCA0MiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDIzMCwgMTQxLCAyMTYsIDIzMywgMjQ3LCAKLSAgICAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI0NywgMjIyLCAyNDUsIDM2LCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAKLSAgICAxMCwgMjE1LCAyMTQsIDIyNiwgMjExLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjQzLCA0OSwgMjQ3LCAyMzcsIDQ5LCAyOCwgCi0gICAgMTYsIDI0MywgNDksIDIxMSwgOSwgNDksIDI4LCAxNiwgMjQ3LCAyNDUsIDI1NCwgNjUsIDIzMCwgMTk5LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDI0NSwgMjU0LCA2NSwgMjMxLCA3MywgNDksIDI4LCAxNiwgMjQ3LCAyNDUsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDI0NSwgMjE2LCAxODIsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyMTYsIDE4MiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIAotICAgIDIxNiwgMTgzLCAyNDcsIDE4NiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDIxNiwgMTgzLCAyMTUsIDIwNywgNDksIDI4LCAxNiwgCi0gICAgMjE5LCAxNjMsIDIxNiwgMTgzLCAyMTYsIDIyMiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDI1MywgMjQ0LCA0OSwgMjgsIDE2LCAKLSAgICAyMTksIDE2MywgMjUzLCAyNDUsIDI0NywgMTg2LCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDUsIDIxNSwgMjA3LCAKLSAgICA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDUsIDIxNiwgMjIyLCA0OSwgMjgsIDE2LCAyNDcsIDIyMywgMjQzLCAzMCwgCi0gICAgNDksIDI4LCAxNiwgMjQ3LCAyMjksIDIyNiwgMTM0LCA0OSwgMjgsIDE2LCAyMTgsIDEzNywgNDksIDI4LCAxNiwgMjU0LCA3LCAKLSAgICAxOTAsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjEzLCAxMjQsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjQzLCAxMzUsIDQ5LCAyOCwgCi0gICAgMTYsIDI1NCwgNywgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNTQsIDcsIDIzNCwgMTgyLCA0OSwgMjgsIDE2LCAyNTQsIDcsIAotICAgIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjI4LCAyMzMsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyMjksIDk2LCAKLSAgICAyMzEsIDQ0LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgMjI5LCA5NiwgMjMxLCA0NCwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIAotICAgIDIyOSwgOTYsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyMzQsIDE2MywgMjI5LCA5NiwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMzgsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI5LCA5NiwgMjM0LCAxOTYsIDI4LCAxNiwgMjE5LCAKLSAgICAxNTUsIDI1MiwgMTM1LCAyOCwgMTYsIDUyLCAyNTIsIDEzNSwgMjgsIDE2LCA0MCwgMjUyLCAxMzUsIDI4LCAxNiwgMjIzLCAKLSAgICA1MCwgNDAsIDI1MiwgMTM1LCAyOCwgMTYsIDI0OCwgMTU1LCAyNTIsIDEzNSwgMjgsIDE2LCAyMTksIDI1MSwgMjUyLCAxMzUsIAotICAgIDI4LCAxNiwgNDMsIDIyMywgNzcsIDUwLCAyOCwgMTYsIDQ0LCAyMjMsIDc3LCA1MCwgMjgsIDE2LCAyMjMsIDc3LCAyNDcsIAotICAgIDExOCwgMjgsIDE2LCAyNDgsIDE5NiwgMjIxLCAxNjMsIDI4LCAxNiwgMjQ4LCAyMjIsIDI1MCwgMjQ5LCAyOCwgMTYsIDIyMSwgCi0gICAgMTYzLCAyOCwgMTYsIDI0OSwgMjM0LCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgMTExLCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgCi0gICAgMTEwLCAyOCwgMTYsIDIyMywgNzUsIDI0NCwgMTA5LCAyOCwgMTYsIDI0NCwgMTMxLCAyOCwgMTYsIDI0NCwgMTMyLCA1MSwgCi0gICAgMjgsIDE2LCAyNTEsIDE0OCwgNzgsIDI4LCAxNiwgMjUxLCAyNCwgMjgsIDE2LCAyNTEsIDE1OSwgMjgsIDE2LCAxMjcsIDI4LCAKLSAgICAxNiwgMjI2LCAxOTMsIDIxOCwgMTYzLCAyOCwgMTYsIDIxNSwgNTcsIDIxOCwgMTYzLCAyOCwgMTYsIDIxNiwgMTQyLCAyMTgsIAotICAgIDE2MywgMjgsIDE2LCAyNDQsIDEwLCAyMTgsIDE2MywgMjgsIDE2LCAyNDQsIDgwLCAyMTgsIDE2MywgMjgsIDE2LCAyMTksIAotICAgIDEyNCwgMjE4LCAxNjMsIDI4LCAxNiwgMjE5LCAxMjIsIDI0MywgMjUwLCAyOCwgMTYsIDI0NCwgOCwgMjQzLCAyNTAsIDI4LCAKLSAgICAxNiwgMjQzLCAyMDMsIDI1MCwgMTQsIDI4LCAxNiwgMjQzLCAyMDMsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIAotICAgIDE2LCAyNDMsIDIwMywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgMTYsIDI1MSwgNjcsIDI1MCwgMTQsIDI4LCAKLSAgICAxNiwgMjQ1LCA3LCAyNTAsIDE0LCAyOCwgMTYsIDI0NSwgNywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1NCwgMTQyLCAyOCwgMTYsIAotICAgIDI0NSwgNywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgMTYsIDI0NiwgODMsIDI1MCwgMTMsIDI4LCAxNiwgCi0gICAgMjQ2LCA4MywgMjUwLCAxMiwgMjgsIDE2LCAyMzAsIDg1LCAyMzEsIDkwLCAyMjMsIDYxLCAyOCwgMTYsIDUyLCAyMjAsIDc1LCAKLSAgICAyOCwgMTYsIDUyLCAyNDQsIDY1LCAyOCwgMTYsIDI0NCwgNjYsIDIxNCwgMTYzLCAyOCwgMTYsIDI0NCwgNjYsIDI0NiwgCi0gICAgMTA2LCAyOCwgMTYsIDIyOSwgMTg4LCAyMTQsIDE2MywgMjgsIDE2LCAyMjksIDE4OCwgMjQ2LCAxMDYsIDI4LCAxNiwgMjIwLCAKLSAgICA3NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjIwLCA3NiwgMjQ2LCAxMDYsIDI4LCAxNiwgMjI0LCAyMiwgMTM4LCAyMjAsIDc1LCAKLSAgICAyOCwgMTYsIDIyNCwgMjIsIDEzOCwgMjQ0LCA2NSwgMjgsIDE2LCAyNDksIDIxNiwgMjE2LCA4NywgMjgsIDE2LCAyNDksIAotICAgIDg1LCAyMTYsIDg3LCAyOCwgMTYsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIDE2LCAyMjYsIDEzNiwgMjUyLCAxMjIsIDI4LCAKLSAgICAxNiwgMjI0LCA0LCAyNTQsIDE0MiwgMjgsIDE2LCAyMjQsIDQsIDI1MiwgMTIyLCAyOCwgMTYsIDIzMCwgODgsIDIyMywgNjEsIAotICAgIDI4LCAxNiwgMjExLCAyNTEsIDIyMywgNjEsIDI4LCAxNiwgMTYzLCAyMjMsIDYxLCAyOCwgMTYsIDIyNCwgMjIsIDIyMywgCi0gICAgNjEsIDI4LCAxNiwgMjQ1LCAxODksIDIyMywgNjEsIDI4LCAxNiwgMjE5LCAxMTgsIDIyMywgNjEsIDI4LCAxNiwgMjE2LCAKLSAgICAxNjAsIDIyMywgNjEsIDI4LCAxNiwgMjE5LCAxMTAsIDIyMywgNjEsIDI4LCAxNiwgMTIzLCAyNDAsIDIxMSwgMjE1LCA3MSwgCi0gICAgMjIzLCA2MSwgMjgsIDE2LCAyMTEsIDE3OSwgMjI4LCA0MywgMjgsIDE2LCA5NiwgMjI4LCA0MywgMjgsIDE2LCAyNTAsIDM2LCAKLSAgICAyMTEsIDE3OSwgMjI4LCA0MywgMjgsIDE2LCA0MiwgMjI4LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgNDIsIDIyOCwgNDQsIAotICAgIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAKLSAgICAyMjgsIDQ0LCAxMjAsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0MywgMjExLCAyNTMsIDI4LCAxNiwgCi0gICAgMjE1LCAyMjYsIDIyOCwgNDQsIDQzLCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgNDQsIDIxMSwgMjUzLCAKLSAgICAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyNCwgCi0gICAgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyNCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIAotICAgIDIyOCwgNDQsIDEyMCwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjAsIDQ0LCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMzAsIDEyOSwgMjI4LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjMwLCAxMjksIDIyOCwgNDQsIDI1MSwgMjIxLCAKLSAgICAyOCwgMTYsIDIxNSwgMjIzLCAyMjgsIDQ0LCAxMjQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjIzLCAyMjgsIDQ0LCAxMjQsIAotICAgIDI1MSwgMjIxLCAyOCwgMTYsIDIyNiwgNCwgMjI4LCA0MywgMjgsIDE2LCAyMTMsIDEzMiwgMjI4LCA0MywgMjgsIDE2LCAKLSAgICAyMjgsIDQ0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMjcsIDIwMywgMjI4LCA0MywgMjgsIDE2LCAyNDksIDI0MSwgMjI4LCA0NCwgCi0gICAgMjExLCAyNTMsIDI4LCAxNiwgMjQ5LCAyNDEsIDIyOCwgNDQsIDI1MSwgMjIxLCAyOCwgMTYsIDI1MSwgMTQ2LCAyOCwgMTYsIAotICAgIDIxMSwgMjUxLCAyMjgsIDQ3LCAyOCwgMTYsIDE2MywgMjI4LCA0NywgMjgsIDE2LCAyMjQsIDIyLCAyMjgsIDQ3LCAyOCwgCi0gICAgMTYsIDI0NSwgMTg5LCAyMjgsIDQ3LCAyOCwgMTYsIDIxOSwgMTE4LCAyMjgsIDQ3LCAyOCwgMTYsIDIxNiwgMTYwLCAyMjgsIAotICAgIDQ3LCAyOCwgMTYsIDIxOSwgMTEwLCAyMjgsIDQ3LCAyOCwgMTYsIDEyMywgMjQwLCAyMTEsIDIxNSwgNzEsIDIyOCwgNDcsIAotICAgIDI4LCAxNiwgMzgsIDIxOCwgMTM5LCAyOCwgMTYsIDM4LCAyMTgsIDI0MCwgMjE4LCAxMzksIDI4LCAxNiwgMzgsIDIxNSwgCi0gICAgMjM0LCAyOCwgMTYsIDM4LCAyMTUsIDIzMywgMjgsIDE2LCAzOCwgMjE1LCAyMzIsIDI4LCAxNiwgMjQ0LCAxMDEsIDIxNSwgCi0gICAgMjM0LCAyOCwgMTYsIDI0NCwgMTAxLCAyMTUsIDIzMywgMjgsIDE2LCAyNDQsIDEwMSwgMjE1LCAyMzIsIDI4LCAxNiwgMzgsIAotICAgIDI1MywgMTg5LCAyNDcsIDEyMCwgMjgsIDE2LCAzOCwgMjQ0LCA3MiwgMjgsIDE2LCAzOCwgMjQ0LCA3MSwgMjgsIDE2LCAzOCwgCi0gICAgMjQ0LCA3MCwgMjgsIDE2LCAzOCwgMjQ0LCA2OSwgMjgsIDE2LCAzOCwgMjQ0LCA2OCwgMjgsIDE2LCAyNTIsIDU4LCAyNTIsIAotICAgIDc0LCAyOCwgMTYsIDI0NSwgMTQzLCAyNTIsIDc0LCAyOCwgMTYsIDI1MiwgNTgsIDIxNiwgMTExLCAyOCwgMTYsIDI0NSwgCi0gICAgMTQzLCAyMTYsIDExMSwgMjgsIDE2LCAyNTIsIDU4LCAyMTksIDgwLCAyOCwgMTYsIDI0NSwgMTQzLCAyMTksIDgwLCAyOCwgCi0gICAgMTYsIDI1MiwgNTgsIDIyNSwgMTE1LCAyOCwgMTYsIDI0NSwgMTQzLCAyMjUsIDExNSwgMjgsIDE2LCAzOCwgMjU1LCAxNCwgCi0gICAgMjgsIDE2LCAzOCwgMjE4LCAxNjUsIDI4LCAxNiwgMzgsIDIxNiwgMjM4LCAyOCwgMTYsIDM4LCAyMTgsIDE2NiwgMjgsIDE2LCAKLSAgICAzOCwgMjMxLCAxNjIsIDI4LCAxNiwgMzgsIDIzMSwgMTYxLCAyOCwgMTYsIDM4LCAyNTUsIDEzLCAyOCwgMTYsIDM4LCAyMzIsIAotICAgIDExMiwgMjgsIDE2LCAyNTMsIDI1NCwgMjE0LCAxNjMsIDI4LCAxNiwgMjUzLCAyNTQsIDI0NiwgMTA2LCAyOCwgMTYsIDM4LCAKLSAgICAyNDcsIDEzNSwgMjgsIDE2LCAzOCwgMjIyLCAyMzEsIDI4LCAxNiwgMzgsIDI0NCwgNTgsIDI4LCAxNiwgMzgsIDIxOSwgNzYsIAotICAgIDI4LCAxNiwgMzgsIDI1MiwgMzgsIDI4LCAxNiwgMzgsIDUyLCAyMTYsIDE5LCAyOCwgMTYsIDM4LCAyMTUsIDIxMSwgMjE2LCAKLSAgICAxOSwgMjgsIDE2LCAyMjIsIDIzNSwgMjgsIDE2LCAyMTgsIDc1LCAyOCwgMTYsIDIxMCwgMTU5LCAyOCwgMTYsIDIyNSwgCi0gICAgMTA3LCAyOCwgMTYsIDIzMSwgMjUsIDI4LCAxNiwgMjQ0LCAxNywgMjgsIDE2LCAyNDksIDEzOCwgMjgsIDE2LCAyNDgsIDc4LCAKLSAgICAyOCwgMTYsIDI0MiwgMTUwLCAyMjgsIDQ4LCAyMTksIDk1LCAyOCwgMTYsIDI0MiwgMTUwLCAyMjgsIDQ4LCAyMjgsIDc1LCAKLSAgICAyMTksIDk1LCAyOCwgMTYsIDIxNiwgMCwgMjgsIDE2LCAyMTUsIDk1LCAyOCwgMTYsIDIzNSwgMTkzLCAyMTUsIDk1LCAyOCwgCi0gICAgMTYsIDIxNSwgOTYsIDIxOSwgOTUsIDI4LCAxNiwgMjE1LCA5NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgCi0gICAgMTAyLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk5LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk4LCAyOCwgMTYsIDIyNiwgCi0gICAgMTQ4LCAyMTgsIDk3LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk2LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDk1LCAyOCwgCi0gICAgMTYsIDIyNiwgMTQ4LCAyMTgsIDk0LCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDkzLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIAotICAgIDkyLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDEwMSwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAxMDAsIDI4LCAxNiwgMjQxLCAKLSAgICAyNDUsIDI4LCAxNiwgMjI5LCAxMDUsIDI4LCAxNiwgMjQ1LCAxNDMsIDY0LCAyMTgsIDEzMywgMjgsIDE2LCAyNDgsIDcxLCAKLSAgICAyMTksIDk1LCAyOCwgMTYsIDM4LCAxMjQsIDI1MSwgMTY5LCAyOCwgMTYsIDM4LCAxMjAsIDI1MSwgMTY5LCAyOCwgMTYsIAotICAgIDM4LCAyNDIsIDAsIDI4LCAxNiwgMzgsIDIxOSwgNjcsIDIyNSwgNDMsIDI4LCAxNiwgMjI1LCAyMTYsIDc4LCAyOCwgMTYsIAotICAgIDIyNSwgMjE2LCAxMjAsIDc4LCAyOCwgMTYsIDE2MywgMjI1LCAyMTYsIDc4LCAyOCwgMTYsIDI0MiwgMTgyLCAyMTQsIDE2MywgCi0gICAgMjgsIDE2LCAyNDIsIDE4MiwgMjQ2LCAxMDYsIDI4LCAxNiwgMiwgMjQ0LCAxMDAsIDI4LCAxNiwgMjQ4LCAxODAsIDI4LCAKLSAgICAxNiwgMjQ4LCAxODEsIDI1NCwgMTU0LCAyOCwgMTYsIDIzMSwgMTMzLCAyOCwgMTYsIDIzMiwgMTI5LCAyOCwgMTYsIDI1MSwgCi0gICAgMTQzLCAyOCwgMTYsIDIyMCwgMTU0LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjMwLCAKLSAgICAxODQsIDI4LCAxNiwgMjMwLCAxODUsIDI1MSwgMjIxLCAyOCwgMTYsIDIyMCwgMTQ4LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIAotICAgIDE0OCwgMjUxLCAyMjEsIDI4LCAxNiwgMjQzLCAyMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDI0MywgMjIwLCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMzIsIDEzMCwgMjI1LCAxODAsIDIyMywgNjEsIDI4LCAxNiwgMjMyLCAxMzAsIDIzNiwgNCwgMjIzLCA2MSwgCi0gICAgMjgsIDE2LCAyNTEsIDE0NCwgMjIzLCA2MSwgMjgsIDE2LCAyMjAsIDE1NCwgMjIzLCA2MSwgMjgsIDE2LCAyMzAsIDE4NSwgCi0gICAgMjIzLCA2MSwgMjgsIDE2LCAyMjAsIDE0OCwgMjIzLCA2MSwgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAKLSAgICAyMjQsIDE3NCwgMjI1LCAxNzksIDI4LCAxNiwgMjE2LCAyNDksIDIyNSwgMTc4LCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgCi0gICAgMywgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjI1LCAxODAsIDI0NywgMjExLCAKLSAgICAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjI1LCAxNzksIDI4LCAxNiwgMjE2LCAyNDksIAotICAgIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMzYsIDMsIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIAotICAgIDIyNCwgMTc0LCAyMzYsIDQsIDI0NywgMjExLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgCi0gICAgMjM2LCA0LCAyNDcsIDIxMCwgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgNCwgCi0gICAgMjQ3LCAyMDksIDI4LCAxNiwgMjQ5LCAxMzMsIDI4LCAxNiwgMjQyLCAxMjYsIDI1MSwgNjcsIDI1MCwgMTQsIDI4LCAxNiwgCi0gICAgMjQyLCAxMjYsIDI0NSwgNywgMjUwLCAxNCwgMjgsIDE2LCA0MiwgMjUzLCAxNTgsIDI4LCAxNiwgMjEzLCAxNTEsIDI4LCAKLSAgICAxNiwgMjI1LCAxNCwgMjgsIDE2LCAyNTAsIDUsIDI4LCAxNiwgMjIxLCAyMDMsIDI4LCAxNiwgMjUwLCA5LCAyOCwgMTYsIAotICAgIDIxNiwgNywgMjgsIDE2LCAyMjQsIDI0MiwgMjgsIDE2LCAyMjQsIDI0MywgMjQ0LCA2MCwgMjgsIDE2LCAyMjEsIDIwNCwgCi0gICAgMjQ0LCA2MCwgMjgsIDE2LCAyMTYsIDgsIDIyMywgNTgsIDI4LCAxNiwgMjI1LCAxNjMsIDIxOCwgNjYsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyOSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE4LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMDgsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIwMSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTkzLCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAxODcsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE4NiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMTg1LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxODQsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyOCwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjI3LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIyNSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjI0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjMsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyMiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjIxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMjAsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxOSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE3LCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMTYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxNSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjE0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTMsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE5MiwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMTkxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxOTAsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDE4OSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTg4LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjksIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIxOCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjAxLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTMsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE4NiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg1LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMjcsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyNiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjI1LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyMSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjIwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIxNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTIsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIxMSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMDksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjA2LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMDUsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjAzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDIsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwMCwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMTk5LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTgsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDE5NywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTk2LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTUsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDE5NCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTkyLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTEsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5MCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg5LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAxODgsIDM4LCAyNiwgMjgsIDIxNSwgMjA4LCAzOCwgMjYsIDI4LCAyMTYsIDIyMywgMzgsIDI2LCAKLSAgICAyOCwgMjI1LCAxODgsIDI2LCAyOCwgMjMzLCAzMSwgMjMwLCAxNDIsIDMxLCAyNDUsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDEsIAotICAgIDIyMiwgMjQ1LCAyMjMsIDI0NywgMjI0LCAzMSwgMjQwLCAyMTQsIDI0NSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0NSwgMjIyLCAKLSAgICAyNDEsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDUsIDIyMiwgMjQwLCAyMTMsIDI0NywgMjI0LCAzMSwgMjQ1LCAyMjMsIDE4MCwgCi0gICAgMzEsIDI1MCwgMTc0LCAxODAsIDMxLCAyNDMsIDIyOSwgMjUwLCAzNSwgMTgwLCAzMSwgMjMwLCAxNzcsIDE4MCwgMzEsIAotICAgIDI1MiwgMTMwLCAxODAsIDMxLCAyMzQsIDE3OSwgMjE5LCA3OSwgMTgwLCAzMSwgMjQ5LCAxNzksIDE4MCwgMzEsIDI1MywgCi0gICAgMjMzLCAxODAsIDMxLCAyMjYsIDE2MywgMTgwLCAzMSwgMjUxLCAxNTMsIDIyNiwgMTMwLCAxODAsIDMxLCAyNDgsIDczLCAKLSAgICAxNzcsIDI0NywgMTc5LCAxODAsIDMxLCAyNDcsIDE3NiwgMTgwLCAzMSwgMjEwLCAyMjIsIDE4MCwgMzEsIDIzNSwgMjQ3LCAKLSAgICAxODAsIDMxLCAyMjUsIDE5NywgMTgwLCAzMSwgMjIzLCAxMjcsIDE4MCwgMzEsIDI0OSwgMTg5LCAxODAsIDMxLCAyNDEsIAotICAgIDYwLCAyNTIsIDE4NCwgMTgwLCAzMSwgMjEyLCA1OSwgMTgwLCAzMSwgMjQ0LCAzOSwgMTgwLCAzMSwgMjU0LCAyNDYsIDE4MCwgCi0gICAgMzEsIDIyMywgODksIDE4MCwgMzEsIDIyMywgNjUsIDE4MCwgMzEsIDI0NSwgMjIxLCAxODAsIDMxLCAyMzUsIDUzLCAxODAsIAotICAgIDMxLCAyNDksIDE4NCwgMTgwLCAzMSwgMjQ1LCAxNDIsIDE4MCwgMzEsIDI0NiwgNTIsIDE4MCwgMzEsIDI1MCwgMTQ1LCAKLSAgICAxODAsIDMxLCAyNDgsIDgyLCAxODAsIDMxLCAyMywgMjIzLCA2NCwgMTgwLCAzMSwgMjI2LCA4MSwgMTgwLCAzMSwgMjMzLCAKLSAgICAzNCwgMTgwLCAzMSwgMjQ5LCAyNTQsIDE4MCwgMzEsIDIzNCwgNzcsIDE4MCwgMzEsIDI0MywgODYsIDE4MCwgMzEsIDIxOCwgCi0gICAgMTEyLCAxODAsIDMxLCAyMjQsIDEzMCwgMTgwLCAzMSwgMjQzLCAyMjgsIDE4MCwgMzEsIDIyMywgNjYsIDE4MCwgMzEsIAotICAgIDIzMywgNzEsIDE3NywgMjMwLCAxNTcsIDE4MCwgMzEsIDIyMywgNjIsIDE4MCwgMzEsIDI0MiwgMTY4LCAyMTYsIDQyLCAKLSAgICAyMzEsIDc2LCAxODAsIDMxLCAyNDUsIDE0NCwgMTgwLCAzMSwgMjE4LCAxMjQsIDE4MCwgMzEsIDI0MiwgMTI4LCAxODAsIAotICAgIDMxLCAyNDUsIDEzNiwgMTgwLCAzMSwgMjI1LCAyMzUsIDE4MCwgMzEsIDIyMiwgMjI1LCAxODAsIDMxLCAyNDQsIDU5LCAKLSAgICAxODAsIDMxLCAyMTQsIDgsIDE3NywgMjEyLCA0NCwgMTgwLCAzMSwgMjQ5LCAxOTMsIDE4MCwgMzEsIDIzMSwgODksIDE4MCwgCi0gICAgMzEsIDI0NSwgNjEsIDE4MCwgMzEsIDIxNCwgMTcyLCAxODAsIDMxLCAyNDcsIDIxMiwgMTgwLCAzMSwgMjUwLCAwLCAyMzAsIAotICAgIDExMCwgMTgwLCAzMSwgMjQyLCAxMDYsIDE4MCwgMzEsIDI0MywgODcsIDIzNSwgMjU1LCAxODAsIDMxLCAyMzEsIDE0MSwgCi0gICAgMTgwLCAzMSwgMjU1LCAxMCwgMTgwLCAzMSwgMjQ1LCAxNTcsIDE4MCwgMzEsIDI0NiwgMTA5LCAxODAsIDMxLCAyMTIsIDQyLCAKLSAgICAxODAsIDMxLCAyMTksIDE1MCwgMTgwLCAzMSwgMjM1LCAyMjIsIDE4MCwgMzEsIDI0OCwgNDIsIDE4MCwgMzEsIDI0OCwgCi0gICAgMTYwLCAxODAsIDMxLCAyNDcsIDIwOCwgMTgwLCAzMSwgMjQ1LCAyOSwgMTgwLCAzMSwgMjIwLCAxMTUsIDE4MCwgMzEsIAotICAgIDIxOCwgMTI4LCAxODAsIDMxLCAyNDIsIDIsIDE4MCwgMzEsIDI0OSwgMjEyLCAxODAsIDMxLCAyNDksIDI1MSwgMTgwLCAzMSwgCi0gICAgMjQ0LCAxNzcsIDE4MCwgMzEsIDI1NCwgMjEyLCAxODAsIDMxLCAyNDksIDIxMSwgMTgwLCAzMSwgMjI2LCAxOTcsIDIxNiwgCi0gICAgMTk2LCAyMTMsIDI0MiwgMTgwLCAzMSwgMjQ3LCAyMzIsIDE4MCwgMzEsIDIzMywgMTI0LCAxODAsIDMxLCAyNDQsIDEzLCAKLSAgICAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTEwLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgCi0gICAgMTA1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTU4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAKLSAgICAyMSwgMTYxLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTg5LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgCi0gICAgMTc0LCAyMSwgMTk0LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMTk4LCAyNDksIDE0OSwgMjIyLCAyMDIsIAotICAgIDIxNCwgMTc0LCAyMSwgMTk1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNCwgMTc0LCAyMSwgMjAwLCAyNDksIDE0OSwgMjIyLCAKLSAgICAyMDIsIDIxNiwgMjQzLCAyMSwgMTEwLCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTA1LCAyNDksIDE0OSwgCi0gICAgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTU4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTYxLCAyNDksIAotICAgIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTg5LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTk0LCAKLSAgICAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMTk4LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgCi0gICAgMTk1LCAyNDksIDE0OSwgMjIyLCAyMDIsIDIxNiwgMjQzLCAyMSwgMjAwLCAxMSwgMjMsIDYsIDYxLCAxMSwgMjMsIDYsIAotICAgIDI1MywgMTU4LCAxMSwgMjMsIDYsIDI1MSwgNjYsIDExLCAyMywgNiwgMjQ5LCA2MCwgMTEsIDIzLCA2LCA3NSwgMTEsIDIzLCAKLSAgICA2LCAyNDUsIDYsIDExLCAyMywgNiwgMjQzLCAyMDIsIDExLCAyMywgNiwgMjQyLCA2MCwgMTEsIDIzLCA2LCA3MywgMTEsIAotICAgIDIzLCA2LCAyMzUsIDE0NCwgMTEsIDIzLCA2LCAyMzUsIDIzLCAxMSwgMjMsIDYsIDE1NiwgMTEsIDIzLCA2LCAxOTMsIDExLCAKLSAgICAyMywgNiwgMjMwLCAyNSwgMTEsIDIzLCA2LCA3NiwgMTEsIDIzLCA2LCAyMjYsIDEwNSwgMTEsIDIzLCA2LCAyMjQsIDk2LCAKLSAgICAxMSwgMjMsIDYsIDE1MywgMTEsIDIzLCA2LCAyMjIsIDkxLCAxMSwgMjMsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDYsIDcwLCAKLSAgICAxMSwgMjMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDYsIDIxMiwgOTgsIDExLCAyMywgNiwgMjExLCAxNzgsIDExLCAyMywgNiwgCi0gICAgMjExLCAxMTcsIDExLCAyMywgNiwgMjEwLCAxNTksIDExLCAyMywgNCwgNjEsIDExLCAyMywgNCwgMjUzLCAxNTgsIDExLCAKLSAgICAyMywgNCwgMjUxLCA2NiwgMTEsIDIzLCA0LCAyNDksIDYwLCAxMSwgMjMsIDQsIDc1LCAxMSwgMjMsIDQsIDI0NSwgNiwgMTEsIAotICAgIDIzLCA0LCAyNDMsIDIwMiwgMTEsIDIzLCA0LCAyNDIsIDYwLCAxMSwgMjMsIDQsIDczLCAxMSwgMjMsIDQsIDIzNSwgMTQ0LCAKLSAgICAxMSwgMjMsIDQsIDIzNSwgMjMsIDExLCAyMywgNCwgMTU2LCAxMSwgMjMsIDQsIDE5MywgMTEsIDIzLCA0LCAyMzAsIDI1LCAKLSAgICAxMSwgMjMsIDQsIDc2LCAxMSwgMjMsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDQsIDIyNCwgOTYsIDExLCAyMywgNCwgMTUzLCAKLSAgICAxMSwgMjMsIDQsIDIyMiwgOTEsIDExLCAyMywgNCwgMjE3LCAxNTIsIDExLCAyMywgNCwgNzAsIDExLCAyMywgNCwgMjE0LCAKLSAgICAxMDUsIDExLCAyMywgNCwgMjEyLCA5OCwgMTEsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCA0LCAyMTEsIDExNywgMTEsIAotICAgIDIzLCA0LCAyMTAsIDE1OSwgMTEsIDMyLCA2LCA2MSwgMTEsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDMyLCA2LCAyNTEsIDY2LCAKLSAgICAxMSwgMzIsIDYsIDI0OSwgNjAsIDExLCAzMiwgNiwgNzUsIDExLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMzIsIDYsIDI0MywgCi0gICAgMjAyLCAxMSwgMzIsIDYsIDI0MiwgNjAsIDExLCAzMiwgNiwgNzMsIDExLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAzMiwgNiwgCi0gICAgMjM1LCAyMywgMTEsIDMyLCA2LCAxNTYsIDExLCAzMiwgNiwgMTkzLCAxMSwgMzIsIDYsIDIzMCwgMjUsIDExLCAzMiwgNiwgCi0gICAgNzYsIDExLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAzMiwgNiwgMjI0LCA5NiwgMTEsIDMyLCA2LCAxNTMsIDExLCAzMiwgNiwgCi0gICAgMjIyLCA5MSwgMTEsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDMyLCA2LCA3MCwgMTEsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDMyLCAKLSAgICA2LCAyMTIsIDk4LCAxMSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzIsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzIsIDQsIDYxLCAxMSwgMzIsIDQsIDI1MywgMTU4LCAxMSwgMzIsIDQsIDI1MSwgNjYsIDExLCAzMiwgNCwgCi0gICAgMjQ5LCA2MCwgMTEsIDMyLCA0LCA3NSwgMTEsIDMyLCA0LCAyNDUsIDYsIDExLCAzMiwgNCwgMjQzLCAyMDIsIDExLCAzMiwgCi0gICAgNCwgNzMsIDExLCAzMiwgNCwgMjM1LCAxNDQsIDExLCAzMiwgNCwgMjM1LCAyMywgMTEsIDMyLCA0LCAxNTYsIDExLCAzMiwgCi0gICAgNCwgMTkzLCAxMSwgMzIsIDQsIDIzMCwgMjUsIDExLCAzMiwgNCwgNzYsIDExLCAzMiwgNCwgMjI2LCAxMDUsIDExLCAzMiwgCi0gICAgNCwgMjI0LCA5NiwgMTEsIDMyLCA0LCAxNTMsIDExLCAzMiwgNCwgMjIyLCA5MSwgMTEsIDMyLCA0LCAyMTcsIDE1MiwgMTEsIAotICAgIDMyLCA0LCA3MCwgMTEsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzIsIDQsIDIxMSwgMTc4LCAKLSAgICAxMSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA2LCA2MSwgMTEsIDIzLCAzMiwgCi0gICAgNiwgMjUzLCAxNTgsIDExLCAyMywgMzIsIDYsIDI1MSwgNjYsIDExLCAyMywgMzIsIDYsIDI0OSwgNjAsIDExLCAyMywgMzIsIAotICAgIDYsIDc1LCAxMSwgMjMsIDMyLCA2LCAyNDUsIDYsIDExLCAyMywgMzIsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyNDIsIDYwLCAxMSwgMjMsIDMyLCA2LCA3MywgMTEsIDIzLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAyMywgMzIsIDYsIDIzNSwgCi0gICAgMjMsIDExLCAyMywgMzIsIDYsIDE1NiwgMTEsIDIzLCAzMiwgNiwgMTkzLCAxMSwgMjMsIDMyLCA2LCAyMzAsIDI1LCAxMSwgCi0gICAgMjMsIDMyLCA2LCA3NiwgMTEsIDIzLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAyMywgMzIsIDYsIDIyNCwgOTYsIDExLCAyMywgCi0gICAgMzIsIDYsIDE1MywgMTEsIDIzLCAzMiwgNiwgMjIyLCA5MSwgMTEsIDIzLCAzMiwgNiwgMjE3LCAxNTIsIDExLCAyMywgMzIsIAotICAgIDYsIDcwLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNiwgMjEyLCA5OCwgMTEsIDIzLCAzMiwgNiwgCi0gICAgMjExLCAxNzgsIDExLCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgCi0gICAgNCwgNjEsIDExLCAyMywgMzIsIDQsIDI1MywgMTU4LCAxMSwgMjMsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyNDksIDYwLCAxMSwgMjMsIDMyLCA0LCA3NSwgMTEsIDIzLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMjMsIDMyLCA0LCAyNDMsIAotICAgIDIwMiwgMTEsIDIzLCAzMiwgNCwgMjQyLCA2MCwgMTEsIDIzLCAzMiwgNCwgNzMsIDExLCAyMywgMzIsIDQsIDIzNSwgMTQ0LCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDMyLCA0LCAxNTYsIDExLCAyMywgMzIsIDQsIDE5MywgMTEsIDIzLCAKLSAgICAzMiwgNCwgMjMwLCAyNSwgMTEsIDIzLCAzMiwgNCwgNzYsIDExLCAyMywgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDMyLCAKLSAgICA0LCAyMjQsIDk2LCAxMSwgMjMsIDMyLCA0LCAxNTMsIDExLCAyMywgMzIsIDQsIDIyMiwgOTEsIDExLCAyMywgMzIsIDQsIAotICAgIDIxNywgMTUyLCAxMSwgMjMsIDMyLCA0LCA3MCwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDQsIDIxMiwgCi0gICAgOTgsIDExLCAyMywgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAxMTksIDYsIDYxLCAxMSwgMTE5LCA2LCAyNTEsIDY2LCAxMSwgMTE5LCA2LCAyNDksIDYwLCAxMSwgMTE5LCAKLSAgICA2LCAyNDMsIDIwMiwgMTEsIDExOSwgNiwgMjM1LCAxNDQsIDExLCAxMTksIDYsIDIzNSwgMjMsIDExLCAxMTksIDYsIDIzMCwgCi0gICAgMjUsIDExLCAxMTksIDYsIDc2LCAxMSwgMTE5LCA2LCAyMjYsIDEwNSwgMTEsIDExOSwgNiwgMjI0LCA5NiwgMTEsIDExOSwgCi0gICAgNiwgMjIyLCA5MSwgMTEsIDExOSwgNiwgMjE3LCAxNTIsIDExLCAxMTksIDYsIDcwLCAxMSwgMTE5LCA2LCAyMTQsIDEwNSwgCi0gICAgMTEsIDExOSwgNiwgMjEyLCA5OCwgMTEsIDExOSwgNiwgMjExLCAxNzgsIDExLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMTE5LCAKLSAgICA2LCAyMTAsIDE1OSwgMTEsIDExOSwgNCwgNjEsIDExLCAxMTksIDQsIDI1MywgMTU4LCAxMSwgMTE5LCA0LCAyNTEsIDY2LCAKLSAgICAxMSwgMTE5LCA0LCAyNDksIDYwLCAxMSwgMTE5LCA0LCAyNDUsIDYsIDExLCAxMTksIDQsIDI0MiwgNjAsIDExLCAxMTksIDQsIAotICAgIDczLCAxMSwgMTE5LCA0LCAyMzUsIDE0NCwgMTEsIDExOSwgNCwgMjM1LCAyMywgMTEsIDExOSwgNCwgMTU2LCAxMSwgMTE5LCAKLSAgICA0LCAxOTMsIDExLCAxMTksIDQsIDIzMCwgMjUsIDExLCAxMTksIDQsIDIyNiwgMTA1LCAxMSwgMTE5LCA0LCAyMjQsIDk2LCAKLSAgICAxMSwgMTE5LCA0LCAxNTMsIDExLCAxMTksIDQsIDIyMiwgOTEsIDExLCAxMTksIDQsIDIxNywgMTUyLCAxMSwgMTE5LCA0LCAKLSAgICA3MCwgMTEsIDExOSwgNCwgMjE0LCAxMDUsIDExLCAxMTksIDQsIDIxMiwgOTgsIDExLCAxMTksIDQsIDIxMSwgMTc4LCAxMSwgCi0gICAgMTE5LCA0LCAyMTEsIDExNywgMTEsIDExOSwgNCwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA2LCA2MSwgMTEsIDIzLCAxMTksIAotICAgIDYsIDI1MywgMTU4LCAxMSwgMjMsIDExOSwgNiwgMjUxLCA2NiwgMTEsIDIzLCAxMTksIDYsIDI0OSwgNjAsIDExLCAyMywgCi0gICAgMTE5LCA2LCA3NSwgMTEsIDIzLCAxMTksIDYsIDI0NSwgNiwgMTEsIDIzLCAxMTksIDYsIDI0MywgMjAyLCAxMSwgMjMsIAotICAgIDExOSwgNiwgMjQyLCA2MCwgMTEsIDIzLCAxMTksIDYsIDczLCAxMSwgMjMsIDExOSwgNiwgMjM1LCAxNDQsIDExLCAyMywgCi0gICAgMTE5LCA2LCAyMzUsIDIzLCAxMSwgMjMsIDExOSwgNiwgMTU2LCAxMSwgMjMsIDExOSwgNiwgMTkzLCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjMwLCAyNSwgMTEsIDIzLCAxMTksIDYsIDc2LCAxMSwgMjMsIDExOSwgNiwgMjI2LCAxMDUsIDExLCAyMywgMTE5LCA2LCAKLSAgICAyMjQsIDk2LCAxMSwgMjMsIDExOSwgNiwgMTUzLCAxMSwgMjMsIDExOSwgNiwgMjIyLCA5MSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIxNywgMTUyLCAxMSwgMjMsIDExOSwgNiwgNzAsIDExLCAyMywgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIxMiwgOTgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA0LCA2MSwgMTEsIDIzLCAxMTksIDQsIDI1MywgMTU4LCAxMSwgMjMsIDExOSwgCi0gICAgNCwgMjUxLCA2NiwgMTEsIDIzLCAxMTksIDQsIDI0OSwgNjAsIDExLCAyMywgMTE5LCA0LCA3NSwgMTEsIDIzLCAxMTksIDQsIAotICAgIDI0NSwgNiwgMTEsIDIzLCAxMTksIDQsIDI0MywgMjAyLCAxMSwgMjMsIDExOSwgNCwgMjQyLCA2MCwgMTEsIDIzLCAxMTksIAotICAgIDQsIDczLCAxMSwgMjMsIDExOSwgNCwgMjM1LCAxNDQsIDExLCAyMywgMTE5LCA0LCAyMzUsIDIzLCAxMSwgMjMsIDExOSwgNCwgCi0gICAgMTU2LCAxMSwgMjMsIDExOSwgNCwgMTkzLCAxMSwgMjMsIDExOSwgNCwgMjMwLCAyNSwgMTEsIDIzLCAxMTksIDQsIDc2LCAKLSAgICAxMSwgMjMsIDExOSwgNCwgMjI2LCAxMDUsIDExLCAyMywgMTE5LCA0LCAyMjQsIDk2LCAxMSwgMjMsIDExOSwgNCwgMTUzLCAKLSAgICAxMSwgMjMsIDExOSwgNCwgMjIyLCA5MSwgMTEsIDIzLCAxMTksIDQsIDIxNywgMTUyLCAxMSwgMjMsIDExOSwgNCwgNzAsIAorICAgIDEyLCAxMywgMjIzLCAxOTMsIDEyLCAxMywgMjIzLCAxOTIsIDEyLCAxMywgMjIyLCA5MCwgMTIsIDEzLCAyMjIsIDg5LCAxMiwgCisgICAgMTMsIDIyMiwgODgsIDEyLCAxMywgMjIyLCA4NywgMTIsIDEzLCAyMjIsIDg2LCAxMiwgMTMsIDIyMiwgODUsIDEyLCAxMywgCisgICAgMjIyLCA4NCwgMTIsIDEzLCAyMjIsIDgzLCAxMiwgMTMsIDIyMiwgODIsIDEyLCAxMywgMjIyLCA4MSwgMTIsIDEzLCAyMjIsIAorICAgIDgwLCAxMiwgMTMsIDIyMiwgNzksIDEyLCAxMywgMjIyLCA3OCwgMTIsIDEzLCAyMjIsIDc3LCAxMiwgMTMsIDIyMiwgNzYsIAorICAgIDEyLCAxMywgMjIyLCA3NSwgMTIsIDEzLCAyMjIsIDc0LCAxMiwgMTMsIDIyMiwgNzMsIDEyLCAxMywgMjIyLCA3MiwgMTIsIAorICAgIDEzLCAyMjIsIDcxLCAxMiwgMTMsIDIyMiwgNzAsIDEyLCAxMywgMjIyLCA2OSwgMTIsIDEzLCAyMjIsIDY4LCAxMiwgMTMsIAorICAgIDIyMiwgNjcsIDEyLCAxMywgMjIyLCA2NiwgMTIsIDEzLCAyMjIsIDY1LCAxMiwgMTMsIDIyMiwgNjQsIDEyLCAxMywgMjIyLCAKKyAgICA2MywgMTIsIDEzLCAyMjIsIDYyLCAxMiwgMTMsIDIyMiwgNjEsIDEyLCAxMywgMjIyLCA2MCwgMTIsIDEzLCAyMjIsIDU5LCAKKyAgICAxMiwgMTMsIDIyMiwgNTgsIDEyLCAxMywgMjIyLCA1NywgMTIsIDEzLCAyMjIsIDU2LCAxMiwgMTMsIDIyMiwgNTUsIDEyLCAKKyAgICAxMywgMjIyLCA1NCwgMTIsIDEzLCAyMjIsIDUzLCAxMiwgMTMsIDIyMiwgNTIsIDEyLCAxMywgMjIyLCA1MSwgMTIsIDEzLCAKKyAgICAyMjIsIDUwLCAxMiwgMTMsIDIyMiwgNDksIDEyLCAxMywgMjIyLCA0OCwgMTIsIDEzLCAyMjIsIDQ3LCAxMiwgMTMsIDIyMiwgCisgICAgNDYsIDEyLCAxMywgMjIyLCA0NSwgMTIsIDEzLCAyMjIsIDQ0LCAxMiwgMTMsIDIyMiwgNDMsIDEyLCAxMywgMjIyLCA0MiwgCisgICAgMTIsIDEzLCAyMjIsIDQxLCAxMiwgMTMsIDIyMiwgNDAsIDEyLCAxMywgMjIyLCAzOSwgMTIsIDEzLCAyMjIsIDM4LCAxMiwgCisgICAgMTMsIDIyMiwgMzcsIDEyLCAxMywgMjE3LCAxNTEsIDEyLCAxMywgMjE3LCAxNTAsIDEyLCAxMywgMjE3LCAxNDksIDEyLCAKKyAgICAxMywgMjE3LCAxNDgsIDEyLCAxMywgMjE3LCAxNDcsIDEyLCAxMywgMjE3LCAxNDYsIDEyLCAxMywgMjE3LCAxNDUsIDEyLCAKKyAgICAxMywgMjE3LCAxNDQsIDEyLCAxMywgMjE3LCAxNDMsIDEyLCAxMywgMjE3LCAxNDIsIDEyLCAxMywgMjE3LCAxNDEsIDEyLCAKKyAgICAxMywgMjE3LCAxNDAsIDEyLCAxMywgMjE3LCAxMzksIDEyLCAxMywgMjE3LCAxMzgsIDEyLCAxMywgMjE3LCAxMzcsIDEyLCAKKyAgICAxMywgMjE3LCAxMzYsIDEyLCAxMywgMjE3LCAxMzUsIDEyLCAxMywgMjE3LCAxMzQsIDEyLCAxMywgMjE3LCAxMzMsIDEyLCAKKyAgICAxMywgMjE3LCAxMzIsIDEyLCAxMywgMjE3LCAxMzEsIDEyLCAxMywgMjE3LCAxMzAsIDEyLCAxMywgMjE3LCAxMjksIDEyLCAKKyAgICAxMywgMjE3LCAxMjgsIDEyLCAxMywgMjE3LCAxMjcsIDEyLCAxMywgMjE3LCAxMjYsIDEyLCAxMywgMjE3LCAxMjUsIDEyLCAKKyAgICAxMywgMjE3LCAxMjQsIDEyLCAxMywgMjE3LCAxMjMsIDEyLCAxMywgMjE3LCAxMjIsIDEyLCAxMywgMjE3LCAxMjEsIDEyLCAKKyAgICAxMywgMjE3LCAxMjAsIDEyLCAxMywgMjE3LCAxMTksIDEyLCAxMywgMjE3LCAxMTgsIDEyLCAxMywgMjE3LCAxMTcsIDEyLCAKKyAgICAxMywgMjE3LCAxMTYsIDEyLCAxMywgMjE3LCAxMTUsIDEyLCAxMywgMjE3LCAxMTQsIDEyLCAxMywgMjE3LCAxMTMsIDEyLCAKKyAgICAxMywgMjE3LCAxMTIsIDEyLCAxMywgMjE3LCAxMTEsIDEyLCAxMywgMjE3LCAxMTAsIDEyLCAxMywgMjE3LCAxMDksIDEyLCAKKyAgICAxMywgMjE3LCAxMDgsIDEyLCAxMywgMjE1LCAyMiwgMTIsIDEzLCAyMTUsIDIxLCAxMiwgMTMsIDIxNSwgMjAsIDEyLCAxMywgCisgICAgMjE1LCAxOSwgMTIsIDEzLCAyMTUsIDE4LCAxMiwgMTMsIDIxNSwgMTcsIDEyLCAxMywgMjE1LCAxNiwgMTIsIDEzLCAyMTUsIAorICAgIDE1LCAxMiwgMTMsIDIxNSwgMTQsIDEyLCAxMywgMjE1LCAxMywgMTIsIDEzLCAyMTUsIDEyLCAxMiwgMTMsIDIxNSwgMTEsIAorICAgIDEyLCAxMywgMjE1LCAxMCwgMTIsIDEzLCAyMTUsIDksIDEyLCAxMywgMjE1LCA4LCAxMiwgMTMsIDIxNSwgNywgMTIsIDEzLCAKKyAgICAyMTUsIDYsIDEyLCAxMywgMjE1LCA1LCAxMiwgMTMsIDIxNSwgNCwgMTIsIDEzLCAyMTUsIDMsIDEyLCAxMywgMjE1LCAyLCAKKyAgICAxMiwgMTMsIDIxNSwgMSwgMTIsIDEzLCAyMTUsIDAsIDEyLCAxMywgMjE0LCAyNTUsIDEyLCAxMywgMjE0LCAyNTQsIDEyLCAKKyAgICAxMywgMjE0LCAyNTMsIDEyLCAxMywgMjE0LCAyNTIsIDEyLCAxMywgMjE0LCAyNTEsIDEyLCAxMywgMjE0LCAyNTAsIDEyLCAKKyAgICAxMywgMjE0LCAyNDksIDEyLCAxMywgMjE0LCAyNDgsIDEyLCAxMywgMjE0LCAyNDcsIDEyLCAxMywgMjE0LCAyNDYsIDEyLCAKKyAgICAxMywgMjE0LCAyNDUsIDEyLCAxMywgMjE0LCAyNDQsIDEyLCAxMywgMjE0LCAyNDMsIDEyLCAxMywgMjE0LCAyNDIsIDEyLCAKKyAgICAxMywgMjE0LCAyNDEsIDEyLCAxMywgMjE0LCAyNDAsIDEyLCAxMywgMjE0LCAyMzksIDEyLCAxMywgMjE0LCAyMzgsIDEyLCAKKyAgICAxMywgMjE0LCAyMzcsIDEyLCAxMywgMjE0LCAyMzYsIDEyLCAxMywgMjE0LCAyMzUsIDEyLCAxMywgMjE0LCAyMzQsIDEyLCAKKyAgICAxMywgMjE0LCAyMzMsIDEyLCAxMywgMjE0LCAyMzIsIDEyLCAxMywgMjE0LCAxMDQsIDEyLCAxMywgMjE0LCAxMDMsIDEyLCAKKyAgICAxMywgMjE0LCAxMDIsIDEyLCAxMywgMjE0LCAxMDEsIDEyLCAxMywgMjE0LCAxMDAsIDEyLCAxMywgMjE0LCA5OSwgMTIsIAorICAgIDEzLCAyMTQsIDk4LCAxMiwgMTMsIDIxNCwgOTcsIDEyLCAxMywgMjE0LCA5NiwgMTIsIDEzLCAyMTQsIDk1LCAxMiwgMTMsIAorICAgIDIxNCwgOTQsIDEyLCAxMywgMjE0LCA5MywgMTIsIDEzLCAyMTQsIDkyLCAxMiwgMTMsIDIxNCwgOTEsIDEyLCAxMywgMjE0LCAKKyAgICA5MCwgMTIsIDEzLCAyMTQsIDg5LCAxMiwgMTMsIDIxNCwgODgsIDEyLCAxMywgMjE0LCA4NywgMTIsIDEzLCAyMTQsIDg2LCAKKyAgICAxMiwgMTMsIDIxNCwgODUsIDEyLCAxMywgMjE0LCA4NCwgMTIsIDEzLCAyMTQsIDgzLCAxMiwgMTMsIDIxNCwgODIsIDEyLCAKKyAgICAxMywgMjE0LCA4MSwgMTIsIDEzLCAyMTQsIDgwLCAxMiwgMTMsIDIxNCwgNzksIDEyLCAxMywgMjE0LCA3OCwgMTIsIDEzLCAKKyAgICAyMTQsIDc3LCAxMiwgMTMsIDIxNCwgNzYsIDEyLCAxMywgMjE0LCA3NSwgMTIsIDEzLCAyMTQsIDc0LCAxMiwgMTMsIDIxNCwgCisgICAgNzMsIDEyLCAxMywgMjE0LCA3MiwgMTIsIDEzLCAyMTQsIDcxLCAxMiwgMTMsIDIxNCwgNzAsIDEyLCAxMywgMjE0LCA2OSwgCisgICAgMTIsIDEzLCAyMTQsIDY4LCAxMiwgMTMsIDIxNCwgNjcsIDEyLCAxMywgMjE0LCA2NiwgMTIsIDEzLCAyMTQsIDY1LCAxMiwgCisgICAgMTMsIDIxNCwgNjQsIDEyLCAxMywgMjE0LCA2MywgMTIsIDEzLCAyMTQsIDYyLCAxMiwgMTMsIDIxNCwgNjEsIDEyLCAxMywgCisgICAgMjE0LCA2MCwgMTIsIDEzLCAyMTQsIDU5LCAxMiwgMTMsIDIxNCwgNTgsIDEyLCAxMywgMjE0LCA1NywgMTIsIDEzLCAyMTQsIAorICAgIDU2LCAxMiwgMTMsIDIxNCwgNTUsIDEyLCAxMywgMjE0LCA1NCwgMTIsIDEzLCAyMTQsIDUzLCAxMiwgMTMsIDIxNCwgNTIsIAorICAgIDEyLCAxMywgMjE0LCA1MSwgMTIsIDEzLCAyMTQsIDUwLCAxMiwgMTMsIDIxNCwgNDksIDEyLCAxMywgMjE0LCA0OCwgMTIsIAorICAgIDEzLCAyMTQsIDQ3LCAxMiwgMTMsIDIxNCwgNDYsIDEyLCAxMywgMjE0LCA0NSwgMTIsIDEzLCAyMTQsIDQ0LCAxMiwgMTMsIAorICAgIDIxNCwgNDMsIDEyLCAxMywgMjE0LCA0MiwgMTIsIDEzLCAyMTQsIDQxLCAxMiwgMTMsIDIxNCwgNDAsIDEyLCAxMywgMjE0LCAKKyAgICAzOSwgMTIsIDEzLCAyMTQsIDM4LCAxMiwgMTMsIDIxNCwgMzcsIDEyLCAxMywgMjE0LCAzNiwgMTIsIDEzLCAyMTQsIDM1LCAKKyAgICAxMiwgMTMsIDIxNCwgMzQsIDEyLCAxMywgMjE0LCAzMywgMTIsIDEzLCAyMTQsIDMyLCAxMiwgMTMsIDIxNCwgMzEsIDEyLCAKKyAgICAxMywgMjE0LCAzMCwgMTIsIDEzLCAyMTQsIDI5LCAxMiwgMTMsIDIxNCwgMjgsIDEyLCAxMywgMjEyLCA5NywgMTIsIDEzLCAKKyAgICAyMTIsIDk2LCAxMiwgMTMsIDIxMiwgOTUsIDEyLCAxMywgMjEyLCA5NCwgMTIsIDEzLCAyMTIsIDkzLCAxMiwgMTMsIDIxMiwgCisgICAgOTIsIDEyLCAxMywgMjEyLCA5MSwgMTIsIDEzLCAyMTIsIDkwLCAxMiwgMTMsIDIxMiwgODksIDEyLCAxMywgMjEyLCA4OCwgCisgICAgMTIsIDEzLCAyMTIsIDg3LCAxMiwgMTMsIDIxMiwgODYsIDEyLCAxMywgMjEyLCA4NSwgMTIsIDEzLCAyMTIsIDg0LCAxMiwgCisgICAgMTMsIDIxMiwgODMsIDEyLCAxMywgMjEyLCA4MiwgMTIsIDEzLCAyMTIsIDgxLCAxMiwgMTMsIDIxMiwgODAsIDEyLCAxMywgCisgICAgMjEyLCA3OSwgMTIsIDEzLCAyMTIsIDc4LCAxMiwgMTMsIDIxMiwgNzcsIDEyLCAxMywgMjEyLCA3NiwgMTIsIDEzLCAyMTIsIAorICAgIDc1LCAxMiwgMTMsIDIxMiwgNzQsIDEyLCAxMywgMjEyLCA3MywgMTIsIDEzLCAyMTIsIDcyLCAxMiwgMTMsIDIxMiwgNzEsIAorICAgIDEyLCAxMywgMjEyLCA3MCwgMTIsIDEzLCAyMTIsIDY5LCAxMiwgMTMsIDIxMiwgNjgsIDEyLCAxMywgMjEyLCA2NywgMTIsIAorICAgIDEzLCAyMTIsIDY2LCAxMiwgMTMsIDIxMSwgMTc3LCAxMiwgMTMsIDIxMSwgMTc2LCAxMiwgMTMsIDIxMSwgMTc1LCAxMiwgCisgICAgMTMsIDIxMSwgMTc0LCAxMiwgMTMsIDIxMSwgMTczLCAxMiwgMTMsIDIxMSwgMTcyLCAxMiwgMTMsIDIxMSwgMTcxLCAxMiwgCisgICAgMTMsIDIxMSwgMTcwLCAxMiwgMTMsIDIxMSwgMTY5LCAxMiwgMTMsIDIxMSwgMTY4LCAxMiwgMTMsIDIxMSwgMTY3LCAxMiwgCisgICAgMTMsIDIxMSwgMTY2LCAxMiwgMTMsIDIxMSwgMTE1LCAxMiwgMTMsIDIxMSwgMTE0LCAxMiwgMTMsIDIxMSwgMTEzLCAxMiwgCisgICAgMTMsIDIxMSwgMTEyLCAxMiwgMTMsIDIxMSwgMTExLCAxMiwgMTMsIDIxMSwgMTEwLCAxMiwgMTMsIDIxMSwgMTA5LCAxMiwgCisgICAgMTMsIDIxMSwgMTA4LCAxMiwgMTMsIDIxMSwgMTA3LCAxMiwgMTMsIDIxMCwgMTU4LCAxMiwgMTMsIDIxMCwgMTU3LCAxMiwgCisgICAgMTMsIDIxMCwgMTU2LCAxMiwgMTMsIDIxMCwgMTU1LCAxMiwgMTMsIDIxMCwgMTU0LCAxMiwgMTMsIDIxMCwgMTUzLCAxMiwgCisgICAgMTMsIDIxMCwgMTUyLCAxMiwgMTMsIDIxMCwgMTUxLCAxMiwgMTMsIDIxMCwgMTUwLCAxMiwgMTMsIDIxMCwgMTQ5LCAxMiwgCisgICAgMTMsIDIxMCwgMTQ4LCAxMiwgMTMsIDIxMCwgMTQ3LCAxMiwgMTMsIDIxMCwgMTQ2LCAxMiwgMTMsIDIxMCwgMTQ1LCAxMiwgCisgICAgMTMsIDIxMCwgMTQ0LCAxMiwgMTMsIDIxMCwgMTQzLCAxMiwgMTMsIDIxMCwgMTQyLCAxMiwgMTMsIDIxMCwgMTQxLCAxMiwgCisgICAgMTMsIDIxMCwgMTQwLCAxMiwgMTMsIDIxMCwgMTM5LCAxMiwgMTMsIDIxMCwgMTM4LCAxMiwgMTMsIDIxMCwgMTM3LCAxMiwgCisgICAgMTMsIDIxMCwgMTM2LCAxMiwgMTMsIDIxMCwgMTM1LCAxMiwgMTMsIDIxMCwgMTM0LCAxMiwgMTMsIDIxMCwgMTMzLCAxMiwgCisgICAgMTMsIDIxMCwgMTMyLCAxMiwgMTMsIDIxMCwgMTMxLCAxMiwgMTMsIDIxMCwgMTMwLCAxMiwgMTMsIDIxMCwgMTI5LCAxMiwgCisgICAgMTMsIDIxMCwgMTI4LCAxMiwgMTMsIDIxMCwgMTI3LCAxMiwgMTMsIDIxMCwgMTI2LCAxMiwgMTMsIDIxMCwgMTI1LCAxMiwgCisgICAgMTMsIDIxMCwgMTI0LCAxMiwgMTMsIDIxMCwgMTIzLCAxMiwgMTMsIDIxMCwgMTIyLCAxMiwgMTMsIDIxMCwgMTIxLCAxMiwgCisgICAgMTMsIDIxMCwgMTIwLCAxMiwgMTMsIDIxMCwgMTE5LCAxMiwgMTMsIDIxMCwgMTE4LCAxMiwgMTMsIDI1NSwgODEsIDEyLCAKKyAgICAxMywgMjU1LCA4MCwgMTIsIDEzLCAyNTUsIDc5LCAxMiwgMTMsIDI1NSwgNzgsIDEyLCAxMywgMjU1LCA3NywgMTIsIDEzLCAKKyAgICAyNTUsIDc2LCAxMiwgMTMsIDI1NSwgNzUsIDEyLCAxMywgMjU1LCA3NCwgMTIsIDEzLCAyNTUsIDczLCAxMiwgMTMsIDI1NSwgCisgICAgNzIsIDEyLCAxMywgMjU1LCA3MSwgMTIsIDEzLCAyNTUsIDcwLCAxMiwgMTMsIDI1NSwgNjksIDEyLCAxMywgMjU1LCA2OCwgCisgICAgMTIsIDEzLCAyNTUsIDY3LCAxMiwgMTMsIDI1NSwgNjYsIDEyLCAxMywgMjU1LCA2NSwgMTIsIDEzLCAyNTUsIDY0LCAxMiwgCisgICAgMTMsIDI1NSwgNjMsIDEyLCAxMywgMjU1LCA2MiwgMTIsIDEzLCAyNTUsIDYxLCAxMiwgMTMsIDI1NSwgNjAsIDEyLCAxMywgCisgICAgMjU1LCA1OSwgMTIsIDEzLCAyNTUsIDU4LCAxMiwgMTMsIDI1NSwgNTcsIDEyLCAxMywgMjU1LCA1NiwgMTIsIDEzLCAyNTUsIAorICAgIDU1LCAxMiwgMTMsIDI1NSwgNTQsIDEyLCAxMywgMjU1LCA1MywgMTIsIDEzLCAyNTUsIDUyLCAxMiwgMTMsIDI1NSwgNTEsIAorICAgIDEyLCAxMywgMjU1LCA1MCwgMTIsIDEzLCAyNTUsIDQ5LCAxMiwgMTMsIDI1NSwgNDgsIDIwLCAxLCAxNjcsIDIyOSwgMTcsIAorICAgIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDI0MywgNzcsIDI0NCwgNDQsIDIwLCAxLCAxNjcsIDIyNCwgMjU0LCAyMzEsIDIyLCAKKyAgICAyMjUsIDYwLCAyMCwgMSwgMTY3LCAyMjQsIDI1NCwgMjMxLCAyMiwgMjI1LCA2MSwgMjAsIDEsIDE2NywgMjI5LCAyMzEsIAorICAgIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDIxOSwgMjIzLCAyMCwgMSwgMTY3LCAyMTYsIDY3LCAyMzEsIDIxLCAyMCwgMSwgMTY3LCAKKyAgICAyMjcsIDEyMiwgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjIwLCAyMSwgMjI2LCA5NCwgMjI4LCAxNzQsIDIwLCAxLCAxNjcsIAorICAgIDIyNCwgMjU0LCAyMjYsIDk0LCAyMjgsIDE3NSwgMjI1LCA2MCwgMjAsIDEsIDE2NywgMjI0LCAyNTQsIDIyNiwgOTQsIDIyOCwgCisgICAgMTc1LCAyMjUsIDYxLCAyMCwgMSwgMTY3LCAyMzEsIDIyMywgMjAsIDEsIDE2NywgMjE1LCAxMjAsIDIzMSwgMjI0LCAyMCwgCisgICAgMSwgMTY3LCAyMjksIDc2LCAyMCwgMSwgMTY3LCAyMzEsIDIyMCwgMjAsIDEsIDE2NywgMjMxLCAxODEsIDIwLCAxLCAxNjcsIAorICAgIDIzMCwgNTMsIDIwLCAxLCAxNjcsIDIyMCwgMTI2LCAyMCwgMSwgMTY3LCAyMjcsIDI0NiwgMjAsIDEsIDE2NywgMjM0LCAKKyAgICAxNTUsIDIwLCAxLCAxNjcsIDIyOCwgMTQzLCAyMCwgMSwgMTY3LCAyMTgsIDUsIDIwLCAxLCAxNjcsIDIyOSwgMTYsIDIwLCAKKyAgICAxLCAxNjcsIDIzMywgOTMsIDIwLCAxLCAxNjcsIDIzMywgMTgsIDIzMywgMTk1LCAyMCwgMSwgMTY3LCAyMjcsIDI1MywgCisgICAgMjMxLCAyOSwgMjAsIDEsIDE2NywgMjMxLCAyMjcsIDIwLCAxLCAxNjcsIDIyNSwgMjUwLCAyMCwgMSwgMTY3LCAyNDIsIAorICAgIDIzOCwgMjAsIDEsIDE2NywgMjI2LCA1NCwgMjAsIDEsIDE2NywgMjMwLCAxNTYsIDIyOSwgNTAsIDIwLCAxLCAxNjcsIDIyNywgCisgICAgMTAzLCAyMzEsIDMyLCAyMCwgMSwgMTY3LCAxMDQsIDIxMCwgMTg4LCAyMjksIDIyNSwgMjAsIDEsIDE2NywgMjQyLCAyMzksIAorICAgIDIwLCAxLCAxNjcsIDIyNywgMjUzLCAyMjcsIDI1NCwgMjAsIDEsIDE2NywgMjE5LCAxMzAsIDIwLCAxLCAxNjcsIDIzMSwgCisgICAgMTQsIDIwLCAxLCAxNjcsIDIzMSwgMzUsIDIwLCAxLCAxNjcsIDIzMCwgMTM1LCAyMCwgMSwgMTY3LCAyMzQsIDI1NSwgMjAsIAorICAgIDEsIDE2NywgMjI2LCA5NCwgMjMzLCA1MywgMjAsIDEsIDE2NywgMjI5LCAxNTQsIDIzMywgNTMsIDIwLCAxLCAxNjcsIDIyNSwgCisgICAgMTYxLCAyMCwgMSwgMTY3LCAyMzEsIDIyMSwgMjAsIDEsIDE2NywgMjI4LCAyMTIsIDIwLCAxLCAxNjcsIDIyNCwgMTM3LCAKKyAgICAyMCwgMSwgMTY3LCAyMTUsIDExNywgMjAsIDEsIDE2NywgMjMyLCA5OSwgMjAsIDEsIDE2NywgMjE5LCA0MywgMjAsIDEsIAorICAgIDE2NywgMjE2LCAyMTcsIDIwLCAxLCAxNjcsIDIzMSwgMjE4LCAyMCwgMSwgMTY3LCAyMzQsIDE2MiwgMjAsIDEsIDE2NywgCisgICAgMjI5LCAxNTAsIDIwLCAxLCAxNjcsIDIzMywgMjA3LCAyMCwgMSwgMTY3LCAyMzAsIDEzNiwgMjAsIDEsIDE2NywgMjE5LCAKKyAgICAyMjAsIDIwLCAxLCAxNjcsIDIzMiwgMTQ0LCAyMCwgMSwgMTY3LCAyNDQsIDEwMSwgMjAsIDEsIDE2NywgMjIyLCAyMDEsIAorICAgIDIwLCAxLCAxNjcsIDIzMywgMjQ3LCAyMCwgMSwgMTY3LCAyMTksIDM5LCAyMCwgMSwgMTY3LCAyMzEsIDE3OCwgMjI1LCAKKyAgICAxMDIsIDIwLCAxLCAxNjcsIDIyMCwgMTQsIDIwLCAxLCAxNjcsIDIyNywgMjUyLCAyMCwgMSwgMTY3LCAyMTksIDI1NSwgCisgICAgMjI4LCA3LCAyMTAsIDE5NiwgMjAsIDEsIDE2NywgMjI3LCAxNDIsIDIzMCwgMTUzLCAyMCwgMSwgMTY3LCAyMjYsIDg5LCAKKyAgICAyMCwgMSwgMTY3LCAyMjgsIDE0NCwgMjAsIDEsIDE2NywgMjE0LCAxNzAsIDIwLCAxLCAxNjcsIDIyOSwgNTMsIDIwLCAxLCAKKyAgICAxNjcsIDIzMSwgMjE3LCAyMCwgMSwgMTY3LCAyMjgsIDE4NiwgMjAsIDEsIDE2NywgMjMxLCAxMjQsIDIwLCAxLCAxNjcsIAorICAgIDIyNywgMTU1LCAyMCwgMSwgMTY3LCAyMTYsIDIyMSwgMjAsIDEsIDE2NywgMjE5LCAzNiwgMjAsIDEsIDE2NywgMjI2LCA5MCwgCisgICAgMjAsIDEsIDE2NywgMjI4LCAxMSwgMjAsIDEsIDE2NywgMjMxLCAyMjUsIDIwLCAxLCAxNjcsIDIyNywgMTUyLCAyMCwgMSwgCisgICAgMTY3LCAyMzQsIDIyMiwgMjAsIDEsIDE2NywgMjI4LCAxNCwgMjAsIDEsIDE2NywgMjEzLCAyNTAsIDIwLCAxLCAxNjcsIAorICAgIDIzMiwgMTAzLCAyMCwgMSwgMTY3LCAyMjksIDEwMywgMjAsIDEsIDE2NywgMjI5LCAyMDEsIDIwLCAxLCAxNjcsIDIzMSwgCisgICAgMTIzLCAyMCwgMSwgMjI1LCAxNDEsIDIyOCwgOSwgMjAsIDEsIDIyNSwgMTQxLCAyMTUsIDEyMCwgMjMxLCAyMjIsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjE5LCAxODcsIDIwLCAxLCAyMjUsIDE0MSwgMjIwLCAxMzAsIDIxNSwgMTE5LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzMiwgMTQ2LCAyMjcsIDI0OSwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDEzMCwgMjMxLCAyMjYsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjM0LCA5MywgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDE1LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTI1LCAyMCwgMSwgMjI1LCAKKyAgICAxNDEsIDIzNCwgMjQzLCAyMCwgMSwgMjI1LCAxNDEsIDIyNSwgMjExLCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgODksIDIzMywgCisgICAgNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjMzLCAxMDksIDIyOCwgNywgMjI3LCAxNjQsIDIwLCAxLCAyMjUsIDE0MSwgMjI3LCAKKyAgICAyNDcsIDIyMCwgNDAsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAxMjEsIDIyOCwgMTg5LCAyMCwgMSwgMjI1LCAxNDEsIDI0MiwgCisgICAgMjM2LCAyMCwgMSwgMjI1LCAxNDEsIDIyNSwgNTIsIDIwLCAxLCAyMjUsIDE0MSwgMjE1LCAxMjAsIDIyOCwgNSwgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMjAsIDQ1LCAyMjgsIDE4NCwgMjAsIDEsIDIyNSwgMTQxLCAyMjAsIDQxLCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzMSwgMjIsIDIxNiwgMjIwLCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTEyLCAyMzEsIDEyNiwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMjcsIDE1MywgMjI3LCAyNDksIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNTEsIDIwLCAxLCAyMjUsIDE0MSwgMjQyLCAyMzcsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNDcsIDIwLCAxLCAyMjUsIDE0MSwgMjMzLCAxMzUsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjI1LCAyNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjEzLCAxODIsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAxOCwgMjMwLCA1MSwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDUyLCAyMzEsIDEwOCwgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDE5MywgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMjIsIDEzLCAyMCwgMSwgMjI1LCAxNDEsIDIxNywgOTgsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAzNCwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDM3LCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMzgsIDIzMywgOTAsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjMxLCAyNCwgMjAsIDEsIDIyNSwgMTQxLCAyMTgsIDUzLCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTE2LCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIzMCwgMTM4LCAyMCwgMSwgMjI1LCAxNDEsIDIyNywgMTY3LCAyMCwgMSwgMjI1LCAxNDEsIDIyNCwgMTQxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMzMsIDIyOSwgNTQsIDIwLCAxLCAyMjUsIDE0MSwgMjQ0LCAxMzQsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjMxLCAxMDMsIDIwLCAxLCAyMjUsIDE0MSwgMjQ0LCAxNTUsIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCAxNTksIDIwLCAKKyAgICAxLCAyMjUsIDE0MSwgMjMxLCAyNDQsIDIyOCwgMTc4LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMjQ0LCAyMjgsIDE1NCwgMjAsIAorICAgIDEsIDIyNSwgMTQxLCAyMzMsIDE3LCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNjAsIDIwLCAxLCAyMjUsIDE0MSwgMjI4LCAxNiwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAxODYsIDIwLCAxLCAyMjUsIDE0MSwgMjM0LCA4MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDYsIAorICAgIDIwLCAxLCAxMzcsIDIyOSwgMTcsIDIzMSwgMjI0LCAyMCwgMSwgMTM3LCAyMjcsIDEyMSwgMjAsIDEsIDEzNywgMjEwLCAKKyAgICAxOTYsIDIwLCAxLCAxMzcsIDIxMiwgNTMsIDIwLCAxLCAxMzcsIDIyOSwgNTMsIDIwLCAxLCAxMzcsIDIyOSwgMTQyLCAyMCwgCisgICAgMSwgMTM3LCAyMjksIDI0LCAyMCwgMSwgMTM3LCAyNDIsIDI0NiwgMjAsIDEsIDEzNywgMjMxLCAxMjAsIDIwLCAxLCAxMzcsIAorICAgIDI0MywgODQsIDIwLCAxLCAxMzcsIDIyNywgMTQ0LCAyMzAsIDE3NSwgMjMxLCAzNiwgMjAsIDEsIDEzNywgMjI3LCAyNDUsIAorICAgIDIzMSwgMTExLCAyMCwgMSwgMTM3LCAyMzEsIDExNywgMjAsIDEsIDEzNywgMjI1LCA1OCwgMjAsIDEsIDEzNywgMjI5LCAKKyAgICAxMjcsIDIwLCAxLCAxMzcsIDIzMSwgMTI4LCAyNTEsIDM3LCAyMCwgMSwgMTM3LCAyMzQsIDE0OSwgMjAsIDEsIDEzNywgCisgICAgMjQyLCAyNDcsIDIwLCAxLCAxMzcsIDIzNCwgMTU2LCAyMCwgMSwgMTM3LCAyMTAsIDIxMywgMjMwLCA4MSwgMjAsIDEsIAorICAgIDEzNywgMjI3LCAxMTUsIDIwLCAxLCAxMzcsIDIzMSwgMTA1LCAyMCwgMSwgMTM3LCAyMjgsIDE1LCAyMCwgMSwgMTM3LCAKKyAgICAyMzEsIDExMSwgMjAsIDEsIDEzNywgMjExLCAxNiwgMjAsIDEsIDEzNywgMjMzLCAyNTUsIDIwLCAxLCAxMzcsIDIzNSwgMTYsIAorICAgIDIwLCAxLCAxMzcsIDIyMCwgMTI1LCAyMCwgMSwgMTM3LCAyMjksIDEzNiwgMjAsIDEsIDEzNywgMjE3LCA5NiwgMjAsIDEsIAorICAgIDEzNywgMjI4LCAxNTgsIDIwLCAxLCAxMzcsIDIxNiwgNjcsIDIxMCwgMTk4LCAyMCwgMSwgMTM3LCAyMTgsIDgwLCAyMCwgMSwgCisgICAgMTM3LCAyMjksIDQ0LCAyMjcsIDE2NCwgMjAsIDEsIDEzNywgMjEzLCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMjA0LCAyMCwgCisgICAgMSwgMTM3LCAyMzEsIDI0NCwgMjM0LCAxNTgsIDIwLCAxLCAxMzcsIDIyNywgMjU0LCAyMCwgMSwgMTM3LCAyMjksIDM5LCAKKyAgICAyMCwgMSwgMTM3LCAyMzMsIDk0LCAyMCwgMSwgMTM3LCAyMzEsIDExMywgMjAsIDEsIDEzNywgMjMxLCAxMywgMjAsIDEsIAorICAgIDEzNywgMjI3LCAyNDgsIDIwLCAxLCAxMzcsIDIxNiwgMjE2LCAyMCwgMSwgMTM3LCAyMjksIDQxLCAyMCwgMSwgMTM3LCAKKyAgICAyNDMsIDI0MCwgMjAsIDEsIDEzNywgMjI5LCAxNDEsIDIwLCAxLCAxMzcsIDIyOCwgMTcsIDIwLCAxLCAxMzcsIDIyOCwgMTMsIAorICAgIDIwLCAxLCAxMzcsIDI1MSwgMTE1LCAyMCwgMSwgMTM3LCAyMTMsIDE4MywgMjAsIDEsIDEzNywgMjMxLCAxMTgsIDIwLCAxLCAKKyAgICAxMzcsIDIyMiwgMTQyLCAyMCwgMSwgMTM3LCAyMjgsIDE4OCwgMjAsIDEsIDEzNywgMjMzLCAxMDgsIDIwLCAxLCAxMzcsIAorICAgIDIxNiwgNjUsIDIwLCAxLCAxMzcsIDIyNywgMjU1LCAyMjksIDYsIDIwLCAxLCAxMzcsIDIyOCwgMTgwLCAyMCwgMSwgMTM3LCAKKyAgICAyMzQsIDE2MiwgMjAsIDEsIDEzNywgMjI5LCA0NSwgMjAsIDEsIDEzNywgMjMxLCAyMTcsIDIwLCAxLCAxMzcsIDIzMSwgCisgICAgMTA2LCAyMCwgMSwgMTM3LCAyMzIsIDEwMywgMjAsIDEsIDEzNywgMjMzLCAxOTUsIDIwLCAxLCAxMzcsIDIyOCwgMTg2LCAKKyAgICAyMCwgMSwgMTM3LCAyMjksIDYsIDIwLCAxLCAxMzcsIDIxMSwgMTg0LCAyMCwgMSwgMTM3LCAyMjksIDQyLCAyMCwgMSwgCisgICAgMTM3LCAyMjgsIDIsIDIwLCAxLCAxMzcsIDIyNywgMjUwLCAyMCwgMSwgMTM3LCAyMzMsIDIwOSwgMjI4LCAxNDQsIDIwLCAxLCAKKyAgICAxMzcsIDIyOCwgMCwgMjAsIDEsIDEzNywgMjI5LCAxNDksIDIwLCAxLCAxMzcsIDIzMSwgMjQ0LCAyMjgsIDUsIDIwLCAxLCAKKyAgICAxMzcsIDIxMSwgMTAzLCAyMCwgMSwgMTM3LCAyMjksIDE0OCwgMjAsIDEsIDEzNywgMjE5LCAyMjIsIDIwLCAxLCAxMzcsIAorICAgIDIyMCwgMTI4LCAyMCwgMSwgMTM3LCAyMzEsIDExNCwgMjAsIDEsIDEzNywgMjMxLCAyMjQsIDIwLCAxLCAxMzcsIDIzMSwgCisgICAgMTI0LCAyMCwgMSwgMTM3LCAyMzQsIDE1MCwgMjAsIDEsIDEzNywgMjMxLCAxMTUsIDIwLCAxLCAxMzcsIDIzNCwgMTU0LCAKKyAgICAyMCwgMSwgMTM3LCAyMzEsIDEyOCwgMjI1LCAxMDYsIDIwLCAxLCAxMzcsIDIxMCwgMTc5LCAyMCwgMSwgMTM3LCAyMjgsIAorICAgIDE3NiwgMjAsIDEsIDEzNywgMjMwLCAyMjUsIDIwLCAxLCAxMzcsIDIzMCwgMTA1LCAyMCwgMSwgMTM3LCAyMjAsIDE3LCAyMCwgCisgICAgMSwgMTM3LCAyMzQsIDE3MiwgMjMzLCA3NiwgMjAsIDEsIDEzNywgMjM0LCAxNzIsIDI0NCwgMTY4LCAyMCwgMSwgMTM3LCAKKyAgICAyMjksIDc0LCAyMCwgMSwgMTM3LCAyMjksIDIwMSwgMjAsIDEsIDEzNywgMjMyLCAyMDYsIDIwLCAxLCAxMzcsIDIyNSwgNjgsIAorICAgIDIwLCAxLCAxMzcsIDIyNSwgMjAyLCAyMCwgMSwgMTM3LCAyMTYsIDIzMSwgMjAsIDEsIDEwNywgMjMxLCAxMDQsIDIwLCAxLCAKKyAgICAxMDcsIDIxMiwgNTEsIDIwLCAxLCAxMDcsIDIyOCwgMTc0LCAyMCwgMSwgMTA3LCAyMzEsIDIxLCAyMCwgMSwgMTA3LCAyMjgsIAorICAgIDE3MiwgMjAsIDEsIDEwNywgMjMyLCAyNDEsIDIwLCAxLCAxMDcsIDIyOCwgMTc3LCAyMCwgMSwgMTA3LCAyMjgsIDEyLCAyMCwgCisgICAgMSwgMTA3LCAyMjksIDU5LCAyMCwgMSwgMTA3LCAyMjcsIDE2NCwgMjAsIDEsIDEwNywgMjExLCAxOTQsIDIwLCAxLCAxMDcsIAorICAgIDIyOSwgMTQsIDIwLCAxLCAxMDcsIDIyMCwgNjMsIDIwLCAxLCAxMDcsIDIyOSwgMjUsIDIwLCAxLCAxMDcsIDIzNCwgMTU3LCAKKyAgICAyMCwgMSwgMTA3LCAyMTYsIDIxOCwgMjAsIDEsIDEwNywgMjIwLCA0MywgMjAsIDEsIDEwNywgMjI4LCAxODUsIDIwLCAxLCAKKyAgICAxMDcsIDIxOCwgNTMsIDIwLCAxLCAxMDcsIDIzNCwgMTYyLCAyMCwgMSwgMTA3LCAyMTEsIDkxLCAyMCwgMSwgMTA3LCAyMzMsIAorICAgIDIxMCwgMjAsIDEsIDEwNywgMjIxLCAyMzYsIDIwLCAxLCAxMDcsIDIzMSwgMjYsIDIwLCAxLCAxMDcsIDIyOSwgMTQwLCAyMCwgCisgICAgMSwgMTA3LCAyMzEsIDE5MywgMjAsIDEsIDEwNywgMjMxLCAzMiwgMjAsIDEsIDEwNywgMjIwLCAxMjcsIDIwLCAxLCAxMDcsIAorICAgIDIxMSwgMzksIDIwLCAxLCAxMDcsIDIyOCwgMTc5LCAyMCwgMSwgMTA3LCAyMzQsIDE1MywgMjMxLCAxMDcsIDIwLCAxLCAKKyAgICAxMDcsIDIyOSwgMjEsIDIwLCAxLCAxMDcsIDIxNSwgMTE5LCAyMCwgMSwgMTA3LCAyNDIsIDI1NSwgMjAsIDEsIDEwNywgCisgICAgMjI5LCAxMSwgMjAsIDEsIDEwNywgMjQ0LCAxMzUsIDIwLCAxLCAxMDcsIDIyOSwgMTQ0LCAyMCwgMSwgMTA3LCAyMzEsIDUsIAorICAgIDIwLCAxLCAxMDcsIDIzMywgMTEsIDIwLCAxLCAxMDcsIDIyOSwgMTI2LCAyMCwgMSwgMTA3LCAyMzAsIDE1MiwgMjAsIDEsIAorICAgIDEwNywgMjMxLCA5LCAyMCwgMSwgMTA3LCAyMjQsIDEyMSwgMjAsIDEsIDEwNywgMjMxLCA3LCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDIzLCAyMCwgMSwgMTA3LCAyMzIsIDg5LCAyMCwgMSwgMTA3LCAyMjgsIDQsIDIwLCAxLCAxMDcsIDIzMSwgMTI3LCAyMCwgMSwgCisgICAgMTA3LCAyMzMsIDE4NiwgMjAsIDEsIDEwNywgMjI3LCAxNTUsIDIwLCAxLCAxMDcsIDIxNiwgMjIxLCAyMCwgMSwgMTA3LCAKKyAgICAyMTksIDM2LCAyMCwgMSwgMTA3LCAyMTAsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNTQsIDIwLCAxLCAxMDcsIDIyMywgCisgICAgMTczLCAyMCwgMSwgMTA3LCAyMTcsIDExLCAyMCwgMSwgMTA3LCAyMjksIDIyLCAyMCwgMSwgMTA3LCAyMzEsIDI4LCAyMCwgCisgICAgMSwgMTA3LCAyMjgsIDMsIDIwLCAxLCAxMDcsIDIzNCwgMTUyLCAyMCwgMSwgMTA3LCAyMjUsIDYyLCAyMCwgMSwgMTA3LCAKKyAgICAyMjUsIDE1NSwgMjAsIDEsIDEwNywgMjI3LCAxMzEsIDIwLCAxLCAxMDcsIDIzMywgMTcsIDIwLCAxLCAxMDcsIDIyOSwgNjAsIAorICAgIDIwLCAxLCAxMDcsIDIzMSwgMjUsIDIwLCAxLCAxMDcsIDIyOSwgMzQsIDIwLCAxLCAxMDcsIDIxMCwgMTkzLCAyMCwgMSwgCisgICAgMTA3LCAyMjYsIDI1LCAyMCwgMSwgMTA3LCAyMTAsIDE5MiwgMjAsIDEsIDEwNywgMjI5LCAxNDksIDIwLCAxLCAxMDcsIAorICAgIDIyNywgMjQ5LCAyMCwgMSwgMTA3LCAyMTgsIDgyLCAyMCwgMSwgMTA3LCAyMzMsIDIxNCwgMjAsIDEsIDEwNywgMjI5LCA0OSwgCisgICAgMjAsIDEsIDEwNywgMjI5LCAxOSwgMjAsIDEsIDEwNywgMjE1LCAxMDMsIDIwLCAxLCAxMDcsIDIzMSwgMzYsIDIwLCAxLCAKKyAgICAxMDcsIDIzMywgMjA0LCAyMCwgMSwgMTA3LCAyMjgsIDEsIDIwLCAxLCAxMDcsIDIxNiwgMjE5LCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDIxOSwgMjAsIDEsIDEwNywgMjI5LCA1OCwgMjAsIDEsIDEwNywgMjMzLCAxMCwgMjAsIDEsIDEwNywgMjI5LCA0MCwgMjAsIAorICAgIDEsIDEwNywgMjI4LCA2LCAyMCwgMSwgMTA3LCAyMjgsIDE1OCwgMjAsIDEsIDEwNywgMjQyLCAyNDAsIDIwLCAxLCAxMDcsIAorICAgIDIzMywgMjIzLCAyMCwgMSwgMTA3LCAyMjMsIDg3LCAyMjYsIDIxMywgMjAsIDEsIDEwNywgMjE3LCA4NywgMjAsIDEsIDEwNywgCisgICAgMjE2LCAxMSwgMjAsIDEsIDEwNywgMjI3LCAxNTIsIDIwLCAxLCAxMDcsIDIyMiwgMjQyLCAyMCwgMSwgMTA3LCAyMzMsIDU1LCAKKyAgICAyMCwgMSwgMTA3LCAyMzEsIDg0LCAyMCwgMSwgMTA3LCAxOTQsIDIwLCAxLCAxMDcsIDIxOCwgNSwgMjAsIDEsIDEwNywgCisgICAgMjMwLCAxMDcsIDIwLCAxLCAxMDcsIDIyMCwgMjksIDIwLCAxLCAxMDcsIDIyMCwgMzksIDIwLCAxLCAxMDcsIDIzMywgMTYxLCAKKyAgICAyMCwgMSwgMTA3LCAyMjcsIDI0MiwgMjAsIDEsIDEwNywgMjE5LCAyMjcsIDIwLCAxLCAxMDcsIDIyNywgMjUxLCAyMCwgMSwgCisgICAgMTA3LCAyMjUsIDIxNCwgMjAsIDEsIDEwNywgMjI4LCAyMzgsIDIwLCAxLCAxMDcsIDIxOSwgMjU0LCAyMCwgMSwgMTA3LCAKKyAgICAyMjQsIDEzNiwgMjAsIDEsIDEwNywgMjMwLCA1MSwgMjAsIDEsIDEwNywgMjMyLCAxMjUsIDIwLCAxLCAxMDcsIDIyMywgODcsIAorICAgIDIzMCwgMTAxLCAyMCwgMSwgMTA3LCAyMTYsIDExOCwgMjAsIDEsIDEwNywgMjI3LCAyNDMsIDIwLCAxLCAxMDcsIDIzMSwgCisgICAgMTI4LCAxOTksIDIwLCAxLCAxMDcsIDIyMSwgMjM0LCAyMCwgMSwgMTA3LCAyNDQsIDIwMywgMjAsIDEsIDgyLCAyMjksIAorICAgIDE0OCwgMjAsIDEsIDgyLCAyMTYsIDE3LCAyMCwgMSwgODIsIDIzMSwgMTE3LCAyMCwgMSwgODIsIDIzMywgOTQsIDIwLCAxLCAKKyAgICA4MiwgMjEzLCAxMjgsIDIwLCAxLCA4MiwgMjMyLCAxMzEsIDIwLCAxLCA4MiwgMjI2LCA5MywgMjAsIDEsIDgyLCAyMTksIAorICAgIDQ3LCAyMCwgMSwgODIsIDIyMywgMTQ4LCAyMCwgMSwgODIsIDIyOCwgOCwgMjAsIDEsIDgyLCAyMjksIDExOSwgMjAsIDEsIAorICAgIDgyLCAyMjQsIDE1MCwgMjAsIDEsIDgyLCAyMTcsIDYzLCAyMCwgMSwgODIsIDIyOSwgMjcsIDIwLCAxLCA4MiwgMjMzLCAKKyAgICAyNTEsIDIwLCAxLCA4MiwgMjExLCAxODcsIDIwLCAxLCA4MiwgMjIxLCAxNzIsIDIwLCAxLCA4MiwgMjI5LCA1MCwgMjAsIDEsIAorICAgIDgyLCAyMjYsIDkwLCAyMCwgMSwgODIsIDIxNiwgMTgsIDIwLCAxLCA4MiwgMjMzLCAyMDgsIDIwLCAxLCA4MiwgMjMyLCAKKyAgICAxNDUsIDIwLCAxLCA4MiwgMjI4LCAxMSwgMjAsIDEsIDgyLCAyMjksIDMsIDIwLCAxLCA4MiwgMjMxLCAyMjUsIDIwLCAxLCAKKyAgICA4MiwgMjI5LCAyMCwgMjAsIDEsIDgyLCAyMjksIDIsIDIwLCAxLCA4MiwgMjI4LCAxMCwgMjAsIDEsIDgyLCAyMjIsIDI0MCwgCisgICAgMjAsIDEsIDgyLCAyMjgsIDE3NiwgMjAsIDEsIDgyLCAyMjUsIDIxMywgMjAsIDEsIDgyLCAyMjIsIDMzLCAyMCwgMSwgODIsIAorICAgIDIyOSwgMzUsIDIwLCAxLCA4MiwgMjMxLCAxNSwgMjAsIDEsIDgyLCAyNDIsIDIzNCwgMjAsIDEsIDgyLCAyMjksIDIzLCAyMCwgCisgICAgMSwgODIsIDIyOCwgMTg3LCAyMCwgMSwgODIsIDIzMSwgMTc3LCAyMCwgMSwgODIsIDIzMiwgMTI3LCAyMCwgMSwgODIsIAorICAgIDIyOSwgNTUsIDIwLCAxLCA4MiwgMjI5LCAxMzIsIDIwLCAxLCA4MiwgMjE3LCA4NiwgMjI3LCAyNDksIDIwLCAxLCA4MiwgCisgICAgMjIwLCAxMjksIDIwLCAxLCA4MiwgMjI0LCAxNDYsIDIwLCAxLCA4MiwgMjI5LCAxNTIsIDIxOSwgNTMsIDIwLCAxLCA4MiwgCisgICAgMjI5LCA0MywgMjI3LCAxNjQsIDIwLCAxLCA4MiwgMjExLCA0LCAyMCwgMSwgODIsIDI0MiwgMjM1LCAyMCwgMSwgODIsIAorICAgIDIxNSwgMTE4LCAyMCwgMSwgODIsIDIxMSwgMTksIDIwLCAxLCA4MiwgMjI1LCAxOSwgMjAsIDEsIDgyLCAyMTUsIDEwOCwgCisgICAgMjAsIDEsIDgyLCAyMzQsIDE2MCwgMjAsIDEsIDgyLCAyMTgsIDgxLCAyMCwgMSwgODIsIDIxNiwgMjIwLCAyMCwgMSwgODIsIAorICAgIDIxMywgMTg0LCAyMCwgMSwgODIsIDIxMiwgNiwgMjAsIDEsIDgyLCAyMzMsIDEzOCwgMjAsIDEsIDgyLCAyMjQsIDE1MywgCisgICAgMjAsIDEsIDgyLCAyMTcsIDk3LCAyMCwgMSwgODIsIDI0MiwgMjU0LCAyMCwgMSwgODIsIDIyOSwgNjQsIDIwLCAxLCA4MiwgCisgICAgMjIwLCA0MiwgMjAsIDEsIDgyLCAyMzEsIDEwLCAyMCwgMSwgODIsIDIzMSwgMTIxLCAyMCwgMSwgODIsIDIyNywgMTE5LCAKKyAgICAyMCwgMSwgODIsIDIyOCwgMTQxLCAyMCwgMSwgODIsIDI0MywgODAsIDIwLCAxLCA4MiwgMjE1LCAxMDksIDIwLCAxLCA4MiwgCisgICAgMjMzLCAyMTcsIDIwLCAxLCA4MiwgMjExLCA2NywgMjAsIDEsIDgyLCAyMjcsIDE1MywgMjUwLCAyNCwgMjAsIDEsIDgyLCAKKyAgICAyMTAsIDI1MCwgMjAsIDEsIDgyLCAyMzEsIDI3LCAyMCwgMSwgODIsIDIyOSwgMTM3LCAyMCwgMSwgODIsIDIyNSwgMTAzLCAKKyAgICAyMCwgMSwgODIsIDIxMCwgMTk3LCAyMCwgMSwgODIsIDIzMywgMTIsIDIwLCAxLCA4MiwgMjQzLCAyNDAsIDIwLCAxLCA4MiwgCisgICAgMjQzLCA3OSwgMjAsIDEsIDgyLCAyMjksIDEzLCAyMCwgMSwgODIsIDIzNCwgMTYyLCAyMCwgMSwgODIsIDIzMSwgMjI4LCAKKyAgICAyMCwgMSwgODIsIDIyOSwgMjYsIDIwLCAxLCA4MiwgMjQyLCAyNDEsIDIwLCAxLCA4MiwgMjQ0LCAyMDQsIDIwLCAxLCA4MiwgCisgICAgMjI3LCAyNDQsIDIwLCAxLCA4MiwgMjI1LCAxNTYsIDIwLCAxLCA4MiwgMjExLCAxNywgMjAsIDEsIDgyLCAyMjksIDUxLCAKKyAgICAyMCwgMSwgODIsIDIyNywgMTUzLCAyNTIsIDMxLCAyMCwgMSwgODIsIDIyNywgOTksIDIwLCAxLCA4MiwgMjI0LCAyNTAsIAorICAgIDIwLCAxLCA4MiwgMjMwLCAyMjUsIDIwLCAxLCA4MiwgMjQzLCAyMzgsIDIwLCAxLCA4MiwgMjI5LCAyMjUsIDIwLCAxLCA4MiwgCisgICAgMjMwLCAxMDUsIDIwLCAxLCA4MiwgMjQyLCAyNDAsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDc0LCAyMCwgMSwgODIsIDIzMCwgCisgICAgNTIsIDIwLCAxLCA4MiwgMjI0LCAxNDksIDIwLCAxLCA4MiwgMjI5LCAxNSwgMjAsIDEsIDgyLCAyMzMsIDE5NSwgMjAsIDEsIAorICAgIDgyLCAyMjUsIDEwMCwgMjAsIDEsIDgyLCAyMjcsIDI1MiwgMjAsIDEsIDgyLCAyMTEsIDE4LCAyMCwgMSwgODIsIDIyOSwgCisgICAgMzYsIDIwLCAxLCA4MiwgMjI2LCA5NCwgMjI1LCAxOTAsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDI1MSwgMjMsIDIwLCAxLCAKKyAgICA4MiwgMjQ0LCA0NSwgMjAsIDEsIDgyLCAyMjgsIDE4MSwgMjAsIDEsIDgyLCA2MSwgMjAsIDEsIDgyLCAyMTYsIDExLCAyMCwgCisgICAgMSwgODIsIDc4LCAyMCwgMSwgODIsIDc0LCAyMCwgMSwgODIsIDIzMywgOTIsIDIwLCAxLCA4MiwgMjI2LCA5NCwgMjI1LCAKKyAgICAyNiwgMjAsIDEsIDgyLCAyMTcsIDEwMiwgMjAsIDEsIDgyLCAyMTcsIDUyLCAyMCwgMSwgODIsIDIyOSwgMTUyLCAyMzAsIAorICAgIDM5LCAyNDAsIDI0MSwgMjAsIDEsIDgyLCAyMjAsIDE3LCAyMCwgMSwgODIsIDIxMSwgMTQsIDIwLCAxLCA4MiwgMjI4LCAKKyAgICAyNTIsIDIwLCAxLCA4MiwgMjEwLCAyMDIsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDIxNywgMjQxLCAyMCwgMSwgODIsIDIxMCwgCisgICAgMjI3LCAyNDksIDE1NSwgMjAsIDEsIDgyLCAyMTAsIDE4NywgMjAsIDEsIDgyLCAyMTAsIDE5NSwgMjAsIDEsIDgyLCAyMzQsIAorICAgIDE0OCwgMjAsIDEsIDgyLCAyMjUsIDE1NCwgMjAsIDEsIDgyLCAyMjgsIDE4MiwgMjQ1LCAxMTAsIDIwLCAxLCA4MiwgMjI0LCAKKyAgICAxNDcsIDIwLCAxLCA4MiwgMjExLCAxOTIsIDIwLCAxLCA4MiwgMjQ0LCAxNTUsIDIwLCAxLCA4MiwgMjEzLCAyNTAsIDIwLCAKKyAgICAxLCA4MiwgMjMyLCAxMDMsIDIwLCAxLCA4MiwgMjMwLCAyMzUsIDIwLCAxLCA4MiwgMjIzLCA1NCwgMjAsIDEsIDgyLCAyMjMsIAorICAgIDE3NCwgMjAsIDEsIDgyLCAyMjgsIDI1MSwgMjAsIDEsIDgyLCAyMjksIDgyLCAyMCwgMSwgODIsIDIyMCwgOSwgMjAsIDEsIAorICAgIDgyLCAyMTksIDI1NCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgMjIzLCA4OSwgMjAsIDEsIDgyLCAxOTgsIDIwLCAxLCA4MiwgCisgICAgMjI1LCAxMTEsIDIwLCAxLCA4MiwgMjMyLCAxMjUsIDIwLCAxLCA4MiwgMjM0LCAzNCwgMjAsIDEsIDgyLCAyMzEsIDYzLCAKKyAgICAyMCwgMSwgODIsIDE4NiwgMjAsIDEsIDgyLCAyMzEsIDE3NCwgMjAsIDEsIDgyLCAyMTYsIDIyMiwgMjAsIDEsIDgyLCAyMzQsIAorICAgIDk4LCAyMCwgMSwgODIsIDIzMCwgMTU1LCAyMCwgMSwgODIsIDIxNiwgMjQ4LCAyMCwgMSwgODIsIDI0NCwgMTc3LCAyMCwgMSwgCisgICAgODIsIDI0MiwgMjMwLCAyMCwgMSwgMjI1LCAxNDAsIDE3NiwgMjAsIDEsIDIyNSwgMTQwLCA2OSwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMzMsIDIyMywgMjAsIDEsIDIyNSwgMTQwLCAyNDUsIDIxNywgMjAsIDEsIDIyNSwgMTQwLCAyMjMsIDExMSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMTcsIDg3LCAyMCwgMSwgMjI1LCAxNDAsIDIyNywgMTUyLCAyMCwgMSwgMjI1LCAxNDAsIDIzMywgMTQxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIyMiwgMjQyLCAyMCwgMSwgMjI1LCAxNDAsIDIyMywgMzIsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjMxLCA4NCwgMjAsIDEsIDIyNSwgMTQwLCAyMTcsIDEwMiwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIDE1MSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMjgsIDE4OCwgMjAsIDEsIDIyNSwgMTQwLCAxOTQsIDIwLCAxLCAyMjUsIDE0MCwgMjE4LCA1LCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIyMCwgMjksIDIwLCAxLCAyMjUsIDE0MCwgMjE5LCAxOTMsIDIwLCAxLCAyMjUsIDE0MCwgMjIwLCAxMjUsIAorICAgIDIwLCAxLCAyMjUsIDE0MCwgMjMzLCAxNjEsIDIwLCAxLCAyMjUsIDE0MCwgMjM0LCAxNjIsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjI3LCAyMTMsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAyNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI4LCAxNTksIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjEwLCAyMjYsIDIwLCAxLCAyMjUsIDE0MCwgMjE5LCAyMjcsIDIwLCAxLCAyMjUsIDE0MCwgMTkyLCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIyOCwgMTQsIDIwLCAxLCAyMjUsIDE0MCwgMjI1LCAxNTQsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAKKyAgICAyNTEsIDIwLCAxLCAyMjUsIDE0MCwgMjExLCAxOTIsIDIwLCAxLCAyMjUsIDE0MCwgMjI1LCAyMTQsIDIwLCAxLCAyMjUsIAorICAgIDE0MCwgMjIyLCAxNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI4LCAyMzgsIDIwLCAxLCAyMjUsIDE0MCwgMjIzLCA1NCwgMjAsIAorICAgIDEsIDIyNSwgMTQwLCAyMzQsIDE3MSwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIDEyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgCisgICAgNjEsIDIwLCAxLCAyMjUsIDE0MCwgMjIwLCA5LCAyMCwgMSwgMjI1LCAxNDAsIDIyNCwgMTUwLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDI0NCwgNDUsIDIwLCAxLCAyMjUsIDE0MCwgMjEyLCA2NSwgMjAsIDEsIDIyNSwgMTQwLCAyMzIsIDI0NywgMjAsIDEsIDIyNSwgCisgICAgMTQwLCAyMzIsIDEyNSwgMjAsIDEsIDIyNSwgMTQwLCAyMzQsIDM0LCAyMCwgMSwgMjI1LCAxNDAsIDIzMSwgMTE5LCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIyMywgODYsIDIwLCAxLCAyMjUsIDE0MCwgMTg2LCAyMCwgMSwgMjI1LCAxNDAsIDIzMCwgMTY2LCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIzMSwgMTI3LCAyMCwgMSwgMjI1LCAxNDAsIDIxNiwgMjMxLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIzNCwgMSwgMjAsIDEsIDIyNSwgMTQwLCAyMjEsIDI1MywgMjAsIDEsIDIyNSwgMTQwLCAyMTIsIDExNSwgOTUsIDEsIDE5MSwgCisgICAgOTUsIDEsIDI1MiwgMTk5LCA5NSwgMSwgOCwgMTkxLCA5NSwgMSwgMjI1LCA0NSwgOTUsIDEsIDE4NiwgOTUsIDEsIDIzMCwgCisgICAgMjM4LCA5NSwgMSwgMjU0LCAzMSwgMTg2LCA5NSwgMSwgMjQ0LCAyMDQsIDk1LCAxLCAyMTQsIDI3LCA5NSwgMSwgMjEzLCAKKyAgICAxNzcsIDk1LCAxLCAyMTcsIDEwNiwgOTUsIDEsIDI0OCwgMjI5LCA5NSwgMSwgOCwgMjE1LCAxNTcsIDk1LCAxLCA4LCAyMTcsIAorICAgIDEwNiwgOTUsIDEsIDIxNSwgMTU3LCA5NSwgMSwgMjQ4LCAxNDMsIDk1LCAxLCAxOTgsIDk1LCAxLCAyMjgsIDI0MiwgOTUsIAorICAgIDEsIDgsIDIyOCwgMTE1LCA5NSwgMSwgMjU0LCAzMSwgMTk4LCA5NSwgMSwgMjI4LCAxMTUsIDk1LCAxLCAyMjgsIDEwMSwgCisgICAgOTUsIDEsIDIzMywgMTQxLCA5NSwgMSwgMjMyLCA2NiwgOTUsIDEsIDIzMywgNCwgOTUsIDEsIDIzMiwgMjQ5LCA5NSwgMSwgCisgICAgMjE2LCA1NywgOTUsIDEsIDI0NywgMTYxLCA5NSwgMSwgMjE2LCA0OSwgOTUsIDEsIDI0NywgMTYwLCA5NSwgMSwgMTc2LCAKKyAgICA5NSwgMSwgMjQzLCAxNDIsIDk1LCAxLCA4LCAxNzYsIDk1LCAxLCAyMjQsIDkxLCA5NSwgMSwgMjI0LCA2OSwgOTUsIDEsIAorICAgIDIyOSwgODIsIDk1LCAxLCAyMjksIDMzLCA5NSwgMSwgMjU0LCAzMSwgMjI5LCA4MiwgOTUsIDEsIDE2MiwgOTUsIDEsIDIxMSwgCisgICAgMTY1LCA5NSwgMSwgMjQzLCAwLCA5NSwgMSwgMjQyLCAyMzMsIDk1LCAxLCAyMTUsIDE2NiwgOTUsIDEsIDI0NiwgMzQsIDk1LCAKKyAgICAxLCAyMjcsIDE2OSwgOTUsIDEsIDIyNywgMTU0LCA5NSwgMSwgMjE1LCAxNzYsIDk1LCAxLCAyNDYsIDQxLCA5NSwgMSwgOCwgCisgICAgMjE1LCAxNzYsIDk1LCAxLCA4LCAyNDYsIDQxLCA5NSwgMSwgMjIzLCAxMDksIDIxNSwgMTc2LCA5NSwgMSwgMjIwLCAxMDQsIAorICAgIDk1LCAxLCAyMTgsIDIyNSwgOTUsIDEsIDIxMCwgODIsIDk1LCAxLCAyMTAsIDE0LCA5NSwgMSwgMjE1LCAxODQsIDk1LCAxLCAKKyAgICAyNDYsIDQ2LCA5NSwgMSwgOCwgMjE1LCAxODQsIDk1LCAxLCAyMDYsIDk1LCAxLCAyMTAsIDExNiwgOTUsIDEsIDIxMCwgMTUsIAorICAgIDk1LCAxLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjIzLCA5NSwgMSwgMjU0LCAzMSwgMjA5LCAyNDMsIDk1LCAxLCAyMDksIAorICAgIDIxNSwgOTUsIDEsIDIwOSwgMjIyLCA5NSwgMSwgMjEyLCA2NSwgOTUsIDEsIDI1NCwgMjE4LCA5NSwgMSwgMjQxLCAxOTYsIAorICAgIDk1LCAxLCAyMjksIDE5NywgOTUsIDUsIDI1MywgMjMwLCA5NSwgNSwgMjIzLCAxMDksIDIxMywgMTMzLCA5NSwgNSwgMjIzLCAKKyAgICAxMDksIDI1MywgMjMwLCA5NSwgMjUsIDUsIDYxLCA5NSwgMjUsIDUsIDI1NSwgODIsIDk1LCAyNSwgNSwgMjU0LCAyMTQsIAorICAgIDk1LCAyNSwgNSwgMjU0LCAxMzEsIDk1LCAyNSwgNSwgMjU0LCAxMjMsIDk1LCAyNSwgNSwgNzgsIDk1LCAyNSwgNSwgMjI2LCAKKyAgICAxODcsIDk1LCAyNSwgNSwgMjExLCAyMjcsIDk1LCAyNSwgNSwgMjEyLCA5OCwgOTUsIDI1LCA1LCA3NiwgOTUsIDI1LCA1LCAKKyAgICAyNDUsIDE1OCwgOTUsIDI1LCA1LCAyNDUsIDE0NiwgOTUsIDI1LCA1LCAyMjYsIDIzNiwgOTUsIDI1LCA1LCA3NCwgOTUsIAorICAgIDI1LCA1LCAyNDAsIDEyNiwgOTUsIDI1LCA1LCAyNDAsIDEyNSwgOTUsIDI1LCA1LCAyNDAsIDEyNCwgOTUsIDI1LCA1LCAKKyAgICAyMzUsIDE5NiwgOTUsIDI1LCA1LCAyMzYsIDY3LCA5NSwgMjUsIDUsIDIzNiwgNDAsIDk1LCAyNSwgNSwgMjM1LCAxNjIsIAorICAgIDk1LCAyNSwgNSwgMjM1LCAyMzgsIDk1LCAyNSwgNSwgNjksIDk1LCAyNSwgNSwgMjE0LCAyMjksIDk1LCAyNSwgNSwgMjE0LCAKKyAgICAyMjgsIDk1LCAyNSwgNSwgMjE0LCAyMjcsIDk1LCAyNSwgNSwgMjE0LCAxMTgsIDk1LCAyNSwgNSwgMjE0LCAyMTEsIDk1LCAKKyAgICAyNSwgNSwgMjE0LCAxNzgsIDk1LCAyNSwgNSwgMjExLCAxMTcsIDk1LCAyNSwgNSwgMjExLCA4LCA5NSwgMjUsIDUsIDI1NCwgCisgICAgMjUyLCA5NSwgMjUsIDUsIDI1NCwgMjQ4LCA5NSwgMjUsIDUsIDI0NSwgOTQsIDk1LCAyNSwgNSwgMjIyLCAxODUsIDI0NSwgCisgICAgOTQsIDk1LCAyNSwgNSwgMjQ1LCAxMDAsIDk1LCAyNSwgNSwgMjIyLCAxODUsIDI0NSwgMTAwLCA5NSwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCA5NSwgMjUsIDUsIDI0NSwgMjAzLCA5NSwgMjUsIDUsIDI1MywgMjAwLCA5NSwgMjUsIDUsIDIyNiwgMTM4LCA5NSwgCisgICAgMjUsIDUsIDIzMCwgMzAsIDk1LCAyNSwgNSwgMjI5LCA4NCwgOTUsIDEzOCwgMjIyLCAyNTQsIDk1LCAxMzgsIDIxNiwgMTUsIAorICAgIDIyMiwgMjU0LCA5NSwgMTM4LCA0OCwgOTUsIDEzOCwgNTEsIDk1LCAxLCAyMTYsIDI5LCA5NSwgMSwgMjE2LCAyOCwgOTUsIAorICAgIDEsIDIxNiwgMjcsIDk1LCAxLCAyMTYsIDI2LCA5NSwgMSwgMjE2LCAyNSwgOTUsIDEsIDIxNiwgMjQsIDk1LCAxLCAyMTYsIAorICAgIDIzLCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMzAsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyOSwgOTUsIDEsIDIyMywgMTA5LCAKKyAgICAyMTYsIDI3LCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMjYsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyNSwgOTUsIDEsIDIyMywgCisgICAgMTA5LCAyMTYsIDIzLCA1NiwgMSwgMjU0LCAzMSwgNzYsIDE0MSwgMSwgMjU0LCAzMSwgMjExLCA0NywgNDksIDI4LCAxNiwgCisgICAgMjI0LCAxNTcsIDQ5LCAyOCwgMTYsIDI0OCwgMTY2LCA0OSwgMjgsIDE2LCAyMjUsIDE3OCwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxMTcsIDI0NSwgMTg2LCA0OSwgMjgsIDE2LCAyMjYsIDExNywgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDI0NSwgCisgICAgMTg2LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjM0LCAyMDMsIDQ5LCAyOCwgMTYsIAorICAgIDIxNywgMTcwLCA0OSwgMjgsIDE2LCAyMjYsIDEzLCA0OSwgMjgsIDE2LCAyMTAsIDIxNywgNDksIDI4LCAxNiwgMjEwLCAKKyAgICAyMTgsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMzMsIDI0MCwgNDksIDI4LCAxNiwgMjU0LCA3NiwgMjQ1LCAxODYsIDQ5LCAKKyAgICAyOCwgMTYsIDI0NSwgMzQsIDI0NSwgMTg2LCA0OSwgMjgsIDE2LCAyMTcsIDMsIDQ5LCAyOCwgMTYsIDIzNCwgMTY3LCA0OSwgCisgICAgMjgsIDE2LCAyNTQsIDY2LCA0OSwgMjgsIDE2LCAyNTQsIDY3LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE3LCAxNzYsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNiwgMTYwLCA0OSwgMjgsIDE2LCAyMjYsIDIxMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjQyLCAxNjYsIAorICAgIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyNCwgMTU2LCA0OSwgMjgsIDE2LCAyNTAsIDE1NywgNDksIDI4LCAxNiwgMjE0LCA2LCAKKyAgICA0OSwgMjgsIDE2LCAyMzUsIDE3MCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjM0LCAxNjksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgMTY4LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjEsIDIxNSwgNDksIDI4LCAxNiwgMjI2LCA0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTgsIDE0OCwgMjU0LCA2OSwgNDksIDI4LCAxNiwgMjI2LCAxMTYsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNCwgMTUsIAorICAgIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI1NCwgNzAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI1NCwgNjQsIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgNDMsIDQ5LCAyOCwgMTYsIDIyMywgNDksIDQ5LCAyOCwgMTYsIDIyNSwgMTA5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAKKyAgICAyMTYsIDg0LCA0OSwgMjgsIDE2LCAyNTQsIDEyOSwgNDksIDI4LCAxNiwgMjIxLCAxNjEsIDQ5LCAyOCwgMTYsIDIxNywgCisgICAgMTc5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTcsIDE3OSwgMjMxLCA0NSwgMjE4LCAxNDYsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTExLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTYsIDE5MSwgNDksIDI4LCAxNiwgMjMzLCAzMywgNDksIDI4LCAxNiwgMjQ2LCAKKyAgICA0OSwgNDksIDI4LCAxNiwgMjE1LCAyMjgsIDQ5LCAyOCwgMTYsIDIxNiwgMjMzLCA0OSwgMjgsIDE2LCAyMzMsIDI0MywgNDksIAorICAgIDI4LCAxNiwgMjU0LCA3NiwgMjQ1LCAzNCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNTQsIDI5LCA0OSwgCisgICAgMjgsIDE2LCAyMzYsIDE5LCA0OSwgMjgsIDE2LCAyMTUsIDIwMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjM0LCAyMDYsIAorICAgIDIxNSwgMTk5LCA0OSwgMjgsIDE2LCAyMjUsIDIwMywgNDksIDI4LCAxNiwgMjI0LCAxNjEsIDQ5LCAyOCwgMTYsIDIzNCwgCisgICAgMTcsIDQ5LCAyOCwgMTYsIDI1MCwgODgsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyMywgMTQ5LCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDE2LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjYsIDE0LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNDAsIDExNiwgNDksIDI4LCAKKyAgICAxNiwgMjI5LCAyMDgsIDQ5LCAyOCwgMTYsIDIyNSwgMTU5LCA0OSwgMjgsIDE2LCAyMzQsIDE4LCAyNTQsIDE1OCwgNDksIAorICAgIDI4LCAxNiwgMjE1LCAyMDAsIDI1NCwgMTU4LCA0OSwgMjgsIDE2LCAyMTgsIDEyNSwgNDksIDI4LCAxNiwgMjQyLCAxMzAsIAorICAgIDQ5LCAyOCwgMTYsIDIzNSwgMTcwLCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI2LCAyMTAsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyMjYsIDExNywgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNSwgMTU4LCA0OSwgMjgsIDE2LCAyMzQsIDQsIDQ5LCAyOCwgCisgICAgMTYsIDIyNSwgMTU3LCA0OSwgMjgsIDE2LCAyMzMsIDI0MiwgNDksIDI4LCAxNiwgMjI1LCAyMDQsIDIyOSwgMTAwLCA0OSwgCisgICAgMjgsIDE2LCAyMzQsIDE2OCwgMjI5LCAxMDEsIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgMjI5LCAxMDEsIAorICAgIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMTAsIDIxNSwgNDksIDI4LCAxNiwgMjU0LCA2NywgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDI1NCwgNjgsIDIxNywgMTc3LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjEwLCAyMTYsIDQ5LCAyOCwgMTYsIDIzMywgCisgICAgMjQxLCA0OSwgMjgsIDE2LCAyNDUsIDE4MSwgNDksIDI4LCAxNiwgMjUwLCAxNTgsIDQ5LCAyOCwgMTYsIDIzMCwgMjAzLCAKKyAgICAyMzUsIDE2OSwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNSwgMTA5LCAyMjksIDEwMCwgCisgICAgNDksIDI4LCAxNiwgMjI0LCAxNjIsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjYsIDIwNywgNDksIDI4LCAxNiwgMjU0LCAKKyAgICA5MiwgNDksIDI4LCAxNiwgMjMyLCA2MywgNDksIDI4LCAxNiwgMjI2LCAxNCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTYsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDY4LCAyMjYsIDE1LCA0OSwgMjgsIDE2LCAyMzMsIDE1OSwgNDksIDI4LCAKKyAgICAxNiwgMjU0LCA5MywgNDksIDI4LCAxNiwgMjE1LCAyMDAsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDE4NCwgNDksIAorICAgIDI4LCAxNiwgMjE3LCAxNzksIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMTcsIDE3MSwgNDksIDI4LCAxNiwgMjUwLCA4OCwgCisgICAgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTE0LCA0OSwgMjgsIDE2LCAyMjEsIDE2MiwgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDIxMSwgMTUxLCAyMzQsIDQzLCA0OSwgMjgsIDE2LCAyMTUsIDE5NywgNDksIDI4LCAxNiwgMjI0LCAxNjMsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNSwgMjAxLCA0OSwgMjgsIDE2LCAyMTUsIDE5OCwgNDksIDI4LCAxNiwgMjI0LCAxNjAsIDQ5LCAyOCwgMTYsIAorICAgIDIxNSwgMTk2LCA0OSwgMjgsIDE2LCAyMjQsIDE1OSwgNDksIDI4LCAxNiwgMjQyLCAxNjUsIDQ5LCAyOCwgMTYsIDI1NCwgCisgICAgMjIsIDQ5LCAyOCwgMTYsIDI0NSwgNjgsIDI1NCwgMjIsIDQ5LCAyOCwgMTYsIDIyNiwgMTExLCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjE2LCAxOTAsIDI0NSwgNzcsIDQ5LCAyOCwgMTYsIDIxNiwgMTkwLCAyNDUsIDMzLCA0OSwgMjgsIDE2LCAyMTYsIAorICAgIDE5MiwgMjU0LCA3MSwgNDksIDI4LCAxNiwgMjE2LCAxODUsIDIzNCwgMjUzLCAyNTQsIDYzLCA0OSwgMjgsIDE2LCAyMzQsIAorICAgIDIwNSwgNDksIDI4LCAxNiwgMjQ1LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTEsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyMTEsIDExLCAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjE4LCAxNDcsIDQ5LCAyOCwgMTYsIDIzNCwgNDQsIDI1NCwgMTA0LCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIxMCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjMzLCAyNDQsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIzMywgMjQ0LCAyNTQsIDE1OCwgNDksIDI4LCAxNiwgMjMzLCAyNDQsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNTQsIDcwLCAKKyAgICAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjU0LCA3MiwgNDksIDI4LCAxNiwgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNSwgCisgICAgMjExLCA0OSwgMjgsIDE2LCAyMTYsIDIyNSwgNDksIDI4LCAxNiwgMjM0LCA4LCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAyNDUsIAorICAgIDE0MiwgMjUwLCA3OSwgNDksIDI4LCAxNiwgMjMzLCAzOCwgMjQ2LCA1MCwgMjUwLCA4MCwgNDksIDI4LCAxNiwgMjMzLCAzOCwgCisgICAgMjE1LCAyMTMsIDI1MCwgODAsIDQ5LCAyOCwgMTYsIDIzMywgMzgsIDIxNiwgMjM1LCAyNTAsIDgwLCA0OSwgMjgsIDE2LCAKKyAgICAyMzMsIDM4LCAyMzYsIDE0LCAyNTAsIDc5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgMjI5LCAxMDEsIDI1NCwgMTA0LCA0OSwgCisgICAgMjgsIDE2LCAyNDIsIDE2NiwgMjI2LCA1LCAyNTQsIDE4LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgMjI2LCA1LCAyNDgsIDM3LCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzMywgNDksIDI4LCAxNiwgMjQ3LCAyMzQsIDIyNiwgNSwgMjU0LCAxOSwgMjM0LCAyMDIsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM0LCAyMjYsIDUsIDI1NCwgMTksIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyNDcsIDIzNCwgCisgICAgMjI2LCA1LCAyNDgsIDM3LCA0OSwgMjgsIDE2LCAyMTUsIDIxNywgNDksIDI4LCAxNiwgMjU0LCAyMywgNDksIDI4LCAxNiwgCisgICAgMjM2LCAyMSwgNDksIDI4LCAxNiwgMjQ3LCAyNTQsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMjUsIDMsIDI1NCwgMjQsIDQ5LCAKKyAgICAyOCwgMTYsIDI1NCwgMjIwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjU0LCAyNCwgNDksIDI4LCAxNiwgCisgICAgMjU0LCAyMjAsIDIzMSwgMzksIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMzEsIDUwLCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgCisgICAgMjQyLCAxNjcsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyNDIsIDE2NCwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIyNSwgMywgCisgICAgMjQyLCAxNjcsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjQsIDE2OCwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyNTQsIDE2MCwgMjI0LCAxNjgsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjQ4LCAzNiwgMjQwLCAxMTQsIAorICAgIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyNTQsIDE2MCwgMjQ4LCAzNiwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyMTUsIDIwNiwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMTUsIDIxOCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDIxNiwgMjI5LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNiwgMjI5LCAyMzMsIDQxLCAyNDAsIDExNCwgCisgICAgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIzMywgNDEsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI1LCA0MiwgCisgICAgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzNSwgMTc2LCAyMTYsIDI1MiwgMjQwLCAxMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNjgsIAorICAgIDIxNiwgMjUyLCAyNDAsIDExNSwgNDksIDI4LCAxNiwgMjQ0LCAxODAsIDIxNiwgMjI2LCA0OSwgMjgsIDE2LCAyNDQsIDE4MCwgCisgICAgMjMwLCAxNDgsIDQ5LCAyOCwgMTYsIDI0NCwgMTgwLCAyNDcsIDIzOCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNCwgMTAsIAorICAgIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI0LCAxNjcsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjI1LCA0MiwgMjE2LCAyMjksIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyNDIsIDE2MiwgMjMwLCAzMSwgMjU0LCA3MSwgNDksIAorICAgIDI4LCAxNiwgMjQyLCAxNjIsIDIzMCwgMzEsIDI0NywgMjA4LCA0OSwgMjgsIDE2LCAyNDUsIDE1NiwgMjM0LCAyNTMsIDI0MywgCisgICAgMjQzLCAyMTMsIDEyNCwgNDksIDI4LCAxNiwgMjM2LCAyMCwgNDksIDI4LCAxNiwgMjM2LCAxOCwgNDksIDI4LCAxNiwgMjQzLCAKKyAgICAyNDMsIDI1NCwgMzAsIDI0OCwgMzUsIDI0MCwgMTEzLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDE5MSwgNDksIAorICAgIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMjksIDIwOCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIyOSwgMjAzLCAKKyAgICAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyNDgsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgCisgICAgMjE5LCAxMDQsIDI0NywgMjUxLCAyNDgsIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIzNCwgMTg4LCAKKyAgICA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgCisgICAgMjI4LCAyMzksIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIyOCwgMjM5LCAyNTQsIDEwNCwgCisgICAgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIzMSwgMTk2LCAyNTAsIDgxLCAyNDcsIDIzOCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIAorICAgIDIzMSwgMTk2LCAyNTAsIDgxLCAyMzAsIDE0OCwgNDksIDI4LCAxNiwgMjQ0LCAxMzAsIDIxOSwgMTA0LCAyNTAsIDgxLCAKKyAgICAyMTQsIDksIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMTksIDEwNCwgMjUwLCA4MSwgMjE3LCAxODAsIDQ5LCAyOCwgMTYsIAorICAgIDI0MywgMjQzLCAyMjksIDEwMiwgNDksIDI4LCAxNiwgMjUwLCA4MiwgMjA5LCAyNDksIDQ5LCAyOCwgMTYsIDI1MCwgODIsIAorICAgIDIzNCwgNDIsIDQ5LCAyOCwgMTYsIDI1MCwgODIsIDIxOSwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDAsIDE2MSwgCisgICAgMjExLCAxMCwgMjE2LCAyMzAsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDUsIDE1NywgMjU0LCA5NCwgNDksIDI4LCAxNiwgCisgICAgMjExLCAxMCwgMjE1LCAyMDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyMTUsIDIwNywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIAorICAgIDIxNiwgMjMwLCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjU0LCA3MywgMjQ2LCA1MCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIAorICAgIDI0NywgMjQ2LCAyMzAsIDE0NiwgMjE2LCAyMzQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjQ3LCAyMzAsIAorICAgIDI0NSwgNDQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjE1LCAyMTUsIDIyNiwgMjE1LCAyNDcsIDE0NywgCisgICAgNDksIDI4LCAxNiwgMjExLCAxMCwgMjU0LCA3MywgMjQ2LCA1MCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIAorICAgIDIzMCwgMTQ2LCAyMTYsIDIzNCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI0NywgMjMwLCAyNDUsIDQ0LCAKKyAgICAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgMjE1LCAyMTUsIDIyNiwgMjE1LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgCisgICAgMjQzLCA1NiwgMjQ3LCAyNDUsIDQ5LCAyOCwgMTYsIDI0MywgNTYsIDIxMSwgOSwgNDksIDI4LCAxNiwgMjQ3LCAyNTMsIAorICAgIDI1NCwgNzMsIDIzMCwgMjA0LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgMjU0LCA3MywgMjMxLCA3OCwgNDksIDI4LCAxNiwgCisgICAgMjQ3LCAyNTMsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgMjE2LCAxODMsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAKKyAgICAyMTYsIDE4MywgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDIxNiwgMTg0LCAyNDcsIDE5NCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIAorICAgIDIxNiwgMTg0LCAyMTUsIDIwOCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDIxNiwgMTg0LCAyMTYsIDIyMywgNDksIDI4LCAxNiwgCisgICAgMjE5LCAxNjUsIDI1MywgMjUyLCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjUzLCAyNTMsIDI0NywgMTk0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTksIDE2NSwgMjUzLCAyNTMsIDIxNSwgMjA4LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjUzLCAyNTMsIDIxNiwgMjIzLCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzMSwgMjQzLCAzNywgNDksIDI4LCAxNiwgMjQ3LCAyMzcsIDIyNiwgMTM4LCA0OSwgMjgsIAorICAgIDE2LCAyMTgsIDEzOSwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMTkxLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyMTMsIDEyNCwgCisgICAgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjQzLCAxNDIsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIAorICAgIDI1NCwgMTUsIDIzNCwgMTg4LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAKKyAgICAyMjgsIDIzOCwgNDksIDI4LCAxNiwgMjM0LCAxNjgsIDIyOSwgMTAxLCAyMzEsIDQ5LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgCisgICAgMjI5LCAxMDEsIDIzMSwgNDksIDQ5LCAyOCwgMTYsIDIzNCwgMTY4LCAyMjksIDEwMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAorICAgIDIzNCwgMTY5LCAyMjksIDEwMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIDIzNCwgNDQsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyNDIsIDE2NiwgMjI5LCAxMDEsIDIzNCwgMjAyLCAyOCwgMTYsIDIxOSwgMTU3LCAyNTIsIDE0MywgMjgsIDE2LCA1MiwgCisgICAgMjUyLCAxNDMsIDI4LCAxNiwgNDAsIDI1MiwgMTQzLCAyOCwgMTYsIDIyMywgNTMsIDQwLCAyNTIsIDE0MywgMjgsIDE2LCAKKyAgICAyNDgsIDE2MywgMjUyLCAxNDMsIDI4LCAxNiwgMjE5LCAyNTMsIDI1MiwgMTQzLCAyOCwgMTYsIDQzLCAyMjMsIDgwLCA1MCwgCisgICAgMjgsIDE2LCA0NCwgMjIzLCA4MCwgNTAsIDI4LCAxNiwgMjIzLCA4MCwgMjQ3LCAxMjYsIDI4LCAxNiwgMjQ4LCAyMDQsIAorICAgIDIyMSwgMTY1LCAyOCwgMTYsIDI0OCwgMjMwLCAyNTEsIDEsIDI4LCAxNiwgMjIxLCAxNjUsIDI4LCAxNiwgMjQ5LCAyNDIsIAorICAgIDI4LCAxNiwgMjIzLCA3OCwgMjQ0LCAxMTksIDI4LCAxNiwgMjIzLCA3OCwgMjQ0LCAxMTgsIDI4LCAxNiwgMjIzLCA3OCwgCisgICAgMjQ0LCAxMTcsIDI4LCAxNiwgMjQ0LCAxMzksIDI4LCAxNiwgMjQ0LCAxNDAsIDUxLCAyOCwgMTYsIDI1MSwgMTU2LCA3OSwgCisgICAgMjgsIDE2LCAyNTEsIDMyLCAyOCwgMTYsIDI1MSwgMTY3LCAyOCwgMTYsIDEyNywgMjgsIDE2LCAyMjYsIDE5NywgMjE4LCAKKyAgICAxNjUsIDI4LCAxNiwgMjE1LCA1NywgMjE4LCAxNjUsIDI4LCAxNiwgMjE2LCAxNDMsIDIxOCwgMTY1LCAyOCwgMTYsIDI0NCwgCisgICAgMTgsIDIxOCwgMTY1LCAyOCwgMTYsIDI0NCwgODgsIDIxOCwgMTY1LCAyOCwgMTYsIDIxOSwgMTI2LCAyMTgsIDE2NSwgMjgsIAorICAgIDE2LCAyMTksIDEyNCwgMjQ0LCAyLCAyOCwgMTYsIDI0NCwgMTYsIDI0NCwgMiwgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMiwgCisgICAgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMywgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIzLCAKKyAgICAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjUxLCA3NSwgMjUwLCAyMiwgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIyLCAKKyAgICAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjMsIDIyNiwgMTQwLCAyNTQsIDE1MCwgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIzLCAKKyAgICAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjQ2LCA5MSwgMjUwLCAyMSwgMjgsIDE2LCAyNDYsIDkxLCAyNTAsIDIwLCAKKyAgICAyOCwgMTYsIDIzMCwgOTAsIDIzMSwgOTUsIDIyMywgNjQsIDI4LCAxNiwgNTIsIDIyMCwgNzcsIDI4LCAxNiwgNTIsIDI0NCwgCisgICAgNzMsIDI4LCAxNiwgMjQ0LCA3NCwgMjE0LCAxNjMsIDI4LCAxNiwgMjQ0LCA3NCwgMjQ2LCAxMTQsIDI4LCAxNiwgMjI5LCAKKyAgICAxOTMsIDIxNCwgMTYzLCAyOCwgMTYsIDIyOSwgMTkzLCAyNDYsIDExNCwgMjgsIDE2LCAyMjAsIDc4LCAyMTQsIDE2MywgMjgsIAorICAgIDE2LCAyMjAsIDc4LCAyNDYsIDExNCwgMjgsIDE2LCAyMjQsIDI1LCAxMzgsIDIyMCwgNzcsIDI4LCAxNiwgMjI0LCAyNSwgCisgICAgMTM4LCAyNDQsIDczLCAyOCwgMTYsIDI0OSwgMjI0LCAyMTYsIDg4LCAyOCwgMTYsIDI0OSwgOTMsIDIxNiwgODgsIDI4LCAKKyAgICAxNiwgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyMjQsIDcsIDI1NCwgCisgICAgMTUwLCAyOCwgMTYsIDIyNCwgNywgMjUyLCAxMzAsIDI4LCAxNiwgMjMwLCA5MywgMjIzLCA2NCwgMjgsIDE2LCAyMTEsIAorICAgIDI1MSwgMjIzLCA2NCwgMjgsIDE2LCAxNjMsIDIyMywgNjQsIDI4LCAxNiwgMjI0LCAyNSwgMjIzLCA2NCwgMjgsIDE2LCAKKyAgICAyNDUsIDE5NywgMjIzLCA2NCwgMjgsIDE2LCAyMTksIDEyMCwgMjIzLCA2NCwgMjgsIDE2LCAyMTYsIDE2MSwgMjIzLCA2NCwgCisgICAgMjgsIDE2LCAyMTksIDExMiwgMjIzLCA2NCwgMjgsIDE2LCAxMjMsIDI0MCwgMjE4LCAyMTUsIDcxLCAyMjMsIDY0LCAyOCwgCisgICAgMTYsIDIxMSwgMTc5LCAyMjgsIDQ4LCAyOCwgMTYsIDk2LCAyMjgsIDQ4LCAyOCwgMTYsIDI1MCwgNDQsIDIxMSwgMTc5LCAKKyAgICAyMjgsIDQ4LCAyOCwgMTYsIDQyLCAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCA0MiwgMjI4LCA0OSwgMjUxLCAyMjksIAorICAgIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgCisgICAgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDQzLCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCAKKyAgICA0OSwgNDMsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAKKyAgICAyMjcsIDIyOCwgNDksIDQ0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTI0LCAyMTEsIDI1MywgMjgsIAorICAgIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTI0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCA0NCwgCisgICAgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgNDQsIDI1MSwgMjI5LCAyOCwgMTYsIDIzMCwgMTM0LCAKKyAgICAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCAyMzAsIDEzNCwgMjI4LCA0OSwgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjQsIAorICAgIDIyOCwgNDksIDEyNCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjQsIDIyOCwgNDksIDEyNCwgMjUxLCAyMjksIDI4LCAxNiwgCisgICAgMjI2LCA4LCAyMjgsIDQ4LCAyOCwgMTYsIDIxMywgMTMyLCAyMjgsIDQ4LCAyOCwgMTYsIDIyOCwgNDksIDI1MSwgMjI5LCAKKyAgICAyOCwgMTYsIDIyNywgMjA3LCAyMjgsIDQ4LCAyOCwgMTYsIDI0OSwgMjQ5LCAyMjgsIDQ5LCAyMTEsIDI1MywgMjgsIDE2LCAKKyAgICAyNDksIDI0OSwgMjI4LCA0OSwgMjUxLCAyMjksIDI4LCAxNiwgMjUxLCAxNTQsIDI4LCAxNiwgMjExLCAyNTEsIDIyOCwgNTIsIAorICAgIDI4LCAxNiwgMTYzLCAyMjgsIDUyLCAyOCwgMTYsIDIyNCwgMjUsIDIyOCwgNTIsIDI4LCAxNiwgMjQ1LCAxOTcsIDIyOCwgCisgICAgNTIsIDI4LCAxNiwgMjE5LCAxMjAsIDIyOCwgNTIsIDI4LCAxNiwgMjE2LCAxNjEsIDIyOCwgNTIsIDI4LCAxNiwgMjE5LCAKKyAgICAxMTIsIDIyOCwgNTIsIDI4LCAxNiwgMTIzLCAyNDAsIDIxOCwgMjE1LCA3MSwgMjI4LCA1MiwgMjgsIDE2LCAzOCwgMjE4LCAKKyAgICAxNDEsIDI4LCAxNiwgMzgsIDIxOCwgMjQyLCAyMTgsIDE0MSwgMjgsIDE2LCAzOCwgMjE1LCAyMzUsIDI4LCAxNiwgMzgsIAorICAgIDIxNSwgMjM0LCAyOCwgMTYsIDM4LCAyMTUsIDIzMywgMjgsIDE2LCAyNDQsIDEwOSwgMjE1LCAyMzUsIDI4LCAxNiwgMjQ0LCAKKyAgICAxMDksIDIxNSwgMjM0LCAyOCwgMTYsIDI0NCwgMTA5LCAyMTUsIDIzMywgMjgsIDE2LCAzOCwgMjUzLCAxOTcsIDI0NywgCisgICAgMTI4LCAyOCwgMTYsIDM4LCAyNDQsIDgwLCAyOCwgMTYsIDM4LCAyNDQsIDc5LCAyOCwgMTYsIDM4LCAyNDQsIDc4LCAyOCwgCisgICAgMTYsIDM4LCAyNDQsIDc3LCAyOCwgMTYsIDM4LCAyNDQsIDc2LCAyOCwgMTYsIDI1MiwgNjYsIDI1MiwgODIsIDI4LCAxNiwgCisgICAgMjQ1LCAxNTEsIDI1MiwgODIsIDI4LCAxNiwgMjUyLCA2NiwgMjE2LCAxMTIsIDI4LCAxNiwgMjQ1LCAxNTEsIDIxNiwgMTEyLCAKKyAgICAyOCwgMTYsIDI1MiwgNjYsIDIxOSwgODIsIDI4LCAxNiwgMjQ1LCAxNTEsIDIxOSwgODIsIDI4LCAxNiwgMjUyLCA2NiwgCisgICAgMjI1LCAxMTgsIDI4LCAxNiwgMjQ1LCAxNTEsIDIyNSwgMTE4LCAyOCwgMTYsIDM4LCAyNTUsIDIzLCAyOCwgMTYsIDM4LCAKKyAgICAyMTgsIDE2NywgMjgsIDE2LCAzOCwgMjE2LCAyMzksIDI4LCAxNiwgMzgsIDIxOCwgMTY4LCAyOCwgMTYsIDM4LCAyMzEsIAorICAgIDE2NywgMjgsIDE2LCAzOCwgMjMxLCAxNjYsIDI4LCAxNiwgMzgsIDI1NSwgMjIsIDI4LCAxNiwgMzgsIDIzMiwgMTE4LCAyOCwgCisgICAgMTYsIDI1NCwgNiwgMjE0LCAxNjMsIDI4LCAxNiwgMjU0LCA2LCAyNDYsIDExNCwgMjgsIDE2LCAzOCwgMjQ3LCAxNDMsIDI4LCAKKyAgICAxNiwgMzgsIDIyMiwgMjM0LCAyOCwgMTYsIDM4LCAyNDQsIDY2LCAyOCwgMTYsIDM4LCAyMTksIDc4LCAyOCwgMTYsIDM4LCAKKyAgICAyNTIsIDQ2LCAyOCwgMTYsIDM4LCA1MiwgMjE2LCAyMCwgMjgsIDE2LCAzOCwgMjE1LCAyMTIsIDIxNiwgMjAsIDI4LCAxNiwgCisgICAgMjIyLCAyMzgsIDI4LCAxNiwgMjE4LCA3NiwgMjgsIDE2LCAyMTAsIDE1OSwgMjgsIDE2LCAyMjUsIDExMCwgMjgsIDE2LCAKKyAgICAyMzEsIDMwLCAyOCwgMTYsIDI0NCwgMjUsIDI4LCAxNiwgMjQ5LCAxNDYsIDI4LCAxNiwgMjQ4LCA4NiwgMjgsIDE2LCAyNDIsIAorICAgIDE1NywgMjI4LCA1MywgMjE5LCA5NywgMjgsIDE2LCAyNDIsIDE1NywgMjI4LCA1MywgMjI4LCA4MCwgMjE5LCA5NywgMjgsIAorICAgIDE2LCAyMTYsIDEsIDI4LCAxNiwgMjE1LCA5NSwgMjgsIDE2LCAyMzUsIDIwMCwgMjE1LCA5NSwgMjgsIDE2LCAyMTUsIDk2LCAKKyAgICAyMTksIDk3LCAyOCwgMTYsIDIxNSwgOTYsIDIxNCwgMTYzLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDEwNCwgMjgsIDE2LCAKKyAgICAyMjYsIDE1MiwgMjE4LCAxMDEsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgMTAwLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIAorICAgIDk5LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk4LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk3LCAyOCwgMTYsIDIyNiwgCisgICAgMTUyLCAyMTgsIDk2LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk1LCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDk0LCAyOCwgCisgICAgMTYsIDIyNiwgMTUyLCAyMTgsIDEwMywgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDIsIDI4LCAxNiwgMjQxLCAyNTIsIDI4LCAKKyAgICAxNiwgMjI5LCAxMTAsIDI4LCAxNiwgMjQ1LCAxNTEsIDY0LCAyMTgsIDEzNSwgMjgsIDE2LCAyNDgsIDc5LCAyMTksIDk3LCAKKyAgICAyOCwgMTYsIDM4LCAxMjQsIDI1MSwgMTc3LCAyOCwgMTYsIDM4LCAxMjAsIDI1MSwgMTc3LCAyOCwgMTYsIDM4LCAyNDIsIDcsIAorICAgIDI4LCAxNiwgMzgsIDIxOSwgNjksIDIyNSwgNDYsIDI4LCAxNiwgMjI1LCAyMTksIDc5LCAyOCwgMTYsIDIyNSwgMjE5LCAKKyAgICAxMjAsIDc5LCAyOCwgMTYsIDE2MywgMjI1LCAyMTksIDc5LCAyOCwgMTYsIDI0MiwgMTg5LCAyMTQsIDE2MywgMjgsIDE2LCAKKyAgICAyNDIsIDE4OSwgMjQ2LCAxMTQsIDI4LCAxNiwgMiwgMjQ0LCAxMDgsIDI4LCAxNiwgMjQ4LCAxODgsIDI4LCAxNiwgMjQ4LCAKKyAgICAxODksIDI1NCwgMTYzLCAyOCwgMTYsIDIzMSwgMTM4LCAyOCwgMTYsIDIzMiwgMTM1LCAyOCwgMTYsIDI1MSwgMTUxLCAyOCwgCisgICAgMTYsIDIyMCwgMTU2LCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1NiwgMjUxLCAyMjksIDI4LCAxNiwgMjMwLCAxODksIDI4LCAKKyAgICAxNiwgMjMwLCAxOTAsIDI1MSwgMjI5LCAyOCwgMTYsIDIyMCwgMTUwLCAyMTEsIDI1MywgMjgsIDE2LCAyMjAsIDE1MCwgCisgICAgMjUxLCAyMjksIDI4LCAxNiwgMjQzLCAyMjcsIDIxMSwgMjUzLCAyOCwgMTYsIDI0MywgMjI3LCAyNTEsIDIyOSwgMjgsIDE2LCAKKyAgICAyMzIsIDEzNiwgMjI1LCAxODMsIDIyMywgNjQsIDI4LCAxNiwgMjMyLCAxMzYsIDIzNiwgMTEsIDIyMywgNjQsIDI4LCAxNiwgCisgICAgMjUxLCAxNTIsIDIyMywgNjQsIDI4LCAxNiwgMjIwLCAxNTYsIDIyMywgNjQsIDI4LCAxNiwgMjMwLCAxOTAsIDIyMywgNjQsIAorICAgIDI4LCAxNiwgMjIwLCAxNTAsIDIyMywgNjQsIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAKKyAgICAxNzcsIDIyNSwgMTgyLCAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMzYsIDEwLCAKKyAgICAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMjUsIDE4MywgMjQ3LCAyMTksIDI4LCAKKyAgICAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMjUsIDE4MiwgMjgsIDE2LCAyMTYsIDI1MCwgCisgICAgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAxNzcsIDIzNiwgMTAsIDI4LCAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIAorICAgIDIyNCwgMTc3LCAyMzYsIDExLCAyNDcsIDIxOSwgMjgsIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAKKyAgICAxNzcsIDIzNiwgMTEsIDI0NywgMjE4LCAyOCwgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIDE3NywgCisgICAgMjM2LCAxMSwgMjQ3LCAyMTcsIDI4LCAxNiwgMjQ5LCAxNDEsIDI4LCAxNiwgMjQyLCAxMzMsIDI1MSwgNzUsIDI1MCwgMjIsIAorICAgIDI4LCAxNiwgMjQyLCAxMzMsIDI0NSwgMTUsIDI1MCwgMjIsIDI4LCAxNiwgNDIsIDI1MywgMTY2LCAyOCwgMTYsIDIxMywgCisgICAgMTUxLCAyOCwgMTYsIDIyNSwgMTcsIDI4LCAxNiwgMjUwLCAxMywgMjgsIDE2LCAyMjEsIDIwNSwgMjgsIDE2LCAyNTAsIDE3LCAKKyAgICAyOCwgMTYsIDIxNiwgOCwgMjgsIDE2LCAyMjQsIDI0NSwgMjgsIDE2LCAyMjQsIDI0NiwgMjQ0LCA2OCwgMjgsIDE2LCAyMjEsIAorICAgIDIwNiwgMjQ0LCA2OCwgMjgsIDE2LCAyMTYsIDksIDIyMywgNjEsIDI4LCAxNiwgMjI1LCAxNjYsIDIxOCwgNjcsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIzMCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE5LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMDksIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIwMiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTk0LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODgsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE4NywgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMTg2LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyOSwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjI4LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjcsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIyNiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjQsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMywgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjIyLCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMjEsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE4LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTcsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNiwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjE1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTQsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE5MywgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMTkyLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTEsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDE5MCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTg5LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMzAsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxOSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjAyLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE4NywgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTg2LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjgsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyNywgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjI2LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjUsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyMiwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjIxLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjAsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIxNSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjE0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTMsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxMiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjExLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMTAsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwOCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA3LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDYsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwNSwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjA0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDMsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMSwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjAwLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTksIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDE5OCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTk3LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTYsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5NSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkzLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTIsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5MSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkwLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAxODksIDM4LCAyNiwgMjgsIDIxNSwgMjA5LCAzOCwgMjYsIDI4LCAyMTYsIDIyNCwgMzgsIAorICAgIDI2LCAyOCwgMjI1LCAxOTEsIDI2LCAyOCwgMjMzLCAzNywgMjMwLCAxNDcsIDMxLCAyNDUsIDIzMSwgMjQ3LCAyMzIsIDMxLCAKKyAgICAyNDEsIDIyOSwgMjQ1LCAyMzEsIDI0NywgMjMyLCAzMSwgMjQwLCAyMjEsIDI0NSwgMjMxLCAyNDcsIDIzMiwgMzEsIDI0NSwgCisgICAgMjMwLCAyNDEsIDIzMCwgMjQ3LCAyMzIsIDMxLCAyNDUsIDIzMCwgMjQwLCAyMjAsIDI0NywgMjMyLCAzMSwgMjQ1LCAyMzEsIAorICAgIDE4MCwgMzEsIDI1MCwgMTgyLCAxODAsIDMxLCAyNDMsIDIzNiwgMjUwLCA0MywgMTgwLCAzMSwgMjMwLCAxODIsIDE4MCwgCisgICAgMzEsIDI1MiwgMTM4LCAxODAsIDMxLCAyMzQsIDE4NSwgMjE5LCA4MSwgMTgwLCAzMSwgMjQ5LCAxODcsIDE4MCwgMzEsIAorICAgIDI1MywgMjQxLCAxODAsIDMxLCAyMjYsIDE2NywgMTgwLCAzMSwgMjUxLCAxNjEsIDIyNiwgMTM0LCAxODAsIDMxLCAyNDgsIAorICAgIDgxLCAxNzcsIDI0NywgMTg3LCAxODAsIDMxLCAyNDcsIDE4NCwgMTgwLCAzMSwgMjEwLCAyMjIsIDE4MCwgMzEsIDIzNSwgCisgICAgMjU0LCAxODAsIDMxLCAyMjUsIDIwMCwgMTgwLCAzMSwgMjIzLCAxMzAsIDE4MCwgMzEsIDI0OSwgMTk3LCAxODAsIDMxLCAKKyAgICAyNDEsIDY3LCAyNTIsIDE5MiwgMTgwLCAzMSwgMjEyLCA1OSwgMTgwLCAzMSwgMjQ0LCA0NywgMTgwLCAzMSwgMjU0LCAyNTUsIAorICAgIDE4MCwgMzEsIDIyMywgOTIsIDE4MCwgMzEsIDIyMywgNjgsIDE4MCwgMzEsIDI0NSwgMjI5LCAxODAsIDMxLCAyMzUsIDU5LCAKKyAgICAxODAsIDMxLCAyNDksIDE5MiwgMTgwLCAzMSwgMjQ1LCAxNTAsIDE4MCwgMzEsIDI0NiwgNjAsIDE4MCwgMzEsIDI1MCwgCisgICAgMTUzLCAxODAsIDMxLCAyNDgsIDkwLCAxODAsIDMxLCAyMywgMjIzLCA2NywgMTgwLCAzMSwgMjI2LCA4NSwgMTgwLCAzMSwgCisgICAgMjMzLCA0MCwgMTgwLCAzMSwgMjUwLCA2LCAxODAsIDMxLCAyMzQsIDgzLCAxODAsIDMxLCAyNDMsIDkzLCAxODAsIDMxLCAKKyAgICAyMTgsIDExNCwgMTgwLCAzMSwgMjI0LCAxMzMsIDE4MCwgMzEsIDI0MywgMjM1LCAxODAsIDMxLCAyMjMsIDY5LCAxODAsIAorICAgIDMxLCAyMzMsIDc3LCAxNzcsIDIzMCwgMTYyLCAxODAsIDMxLCAyMjMsIDY1LCAxODAsIDMxLCAyNDIsIDE3NSwgMjE2LCA0MywgCisgICAgMjMxLCA4MSwgMTgwLCAzMSwgMjQ1LCAxNTIsIDE4MCwgMzEsIDIxOCwgMTI2LCAxODAsIDMxLCAyNDIsIDEzNSwgMTgwLCAKKyAgICAzMSwgMjQ1LCAxNDQsIDE4MCwgMzEsIDIyNSwgMjM5LCAxODAsIDMxLCAyMjIsIDIyOCwgMTgwLCAzMSwgMjQ0LCA2NywgCisgICAgMTgwLCAzMSwgMjE0LCA4LCAxNzcsIDIxMiwgNDQsIDE4MCwgMzEsIDI0OSwgMjAxLCAxODAsIDMxLCAyMzEsIDk0LCAxODAsIAorICAgIDMxLCAyNDUsIDY5LCAxODAsIDMxLCAyMTQsIDE3MiwgMTgwLCAzMSwgMjQ3LCAyMjAsIDE4MCwgMzEsIDI1MCwgOCwgMjMwLCAKKyAgICAxMTUsIDE4MCwgMzEsIDI0MiwgMTEzLCAxODAsIDMxLCAyNDMsIDk0LCAyMzYsIDYsIDE4MCwgMzEsIDIzMSwgMTQ2LCAxODAsIAorICAgIDMxLCAyNTUsIDE5LCAxODAsIDMxLCAyNDUsIDE2NSwgMTgwLCAzMSwgMjQ2LCAxMTcsIDE4MCwgMzEsIDIxMiwgNDIsIDE4MCwgCisgICAgMzEsIDIxOSwgMTUyLCAxODAsIDMxLCAyMzUsIDIyOSwgMTgwLCAzMSwgMjQ4LCA1MCwgMTgwLCAzMSwgMjQ4LCAxNjgsIAorICAgIDE4MCwgMzEsIDI0NywgMjE2LCAxODAsIDMxLCAyNDUsIDM3LCAxODAsIDMxLCAyMjAsIDExNywgMTgwLCAzMSwgMjE4LCAKKyAgICAxMzAsIDE4MCwgMzEsIDI0MiwgOSwgMTgwLCAzMSwgMjQ5LCAyMjAsIDE4MCwgMzEsIDI1MCwgMywgMTgwLCAzMSwgMjQ0LCAKKyAgICAxODUsIDE4MCwgMzEsIDI1NCwgMjIxLCAxODAsIDMxLCAyNDksIDIxOSwgMTgwLCAzMSwgMjI2LCAyMDEsIDIxNiwgMTk3LCAKKyAgICAyMTMsIDI0MiwgMTgwLCAzMSwgMjQ3LCAyNDAsIDE4MCwgMzEsIDIzMywgMTMwLCAxODAsIDMxLCAyNDQsIDIxLCAyNDksIAorICAgIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTExLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTA1LCAKKyAgICAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTU4LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgCisgICAgMTYxLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTkwLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAKKyAgICAyMSwgMTk1LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMTk5LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgCisgICAgMTc0LCAyMSwgMTk2LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNCwgMTc0LCAyMSwgMjAxLCAyNDksIDE1NywgMjIyLCAyMDQsIAorICAgIDIxNiwgMjQ0LCAyMSwgMTExLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTA1LCAyNDksIDE1NywgMjIyLCAKKyAgICAyMDQsIDIxNiwgMjQ0LCAyMSwgMTU4LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTYxLCAyNDksIDE1NywgCisgICAgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTkwLCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk1LCAyNDksIAorICAgIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk5LCAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMTk2LCAKKyAgICAyNDksIDE1NywgMjIyLCAyMDQsIDIxNiwgMjQ0LCAyMSwgMjAxLCAxMSwgMjMsIDYsIDYxLCAxMSwgMjMsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDYsIDI1MSwgNzQsIDExLCAyMywgNiwgMjQ5LCA2OCwgMTEsIDIzLCA2LCA3NiwgMTEsIDIzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDYsIDI0MywgMjA5LCAxMSwgMjMsIDYsIDI0MiwgNjcsIDExLCAyMywgNiwgNzQsIDExLCAyMywgCisgICAgNiwgMjM1LCAxNTAsIDExLCAyMywgNiwgMjM1LCAyOSwgMTEsIDIzLCA2LCAxNTYsIDExLCAyMywgNiwgMTk0LCAxMSwgMjMsIAorICAgIDYsIDIzMCwgMzAsIDExLCAyMywgNiwgNzgsIDExLCAyMywgNiwgMjI2LCAxMDksIDExLCAyMywgNiwgMjI0LCA5OSwgMTEsIAorICAgIDIzLCA2LCAxNTMsIDExLCAyMywgNiwgMjIyLCA5MywgMTEsIDIzLCA2LCAyMTcsIDE1MywgMTEsIDIzLCA2LCA2OSwgMTEsIAorICAgIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDYsIDIxMSwgCisgICAgMTE3LCAxMSwgMjMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDQsIDYxLCAxMSwgMjMsIDQsIDI1MywgMTY2LCAxMSwgMjMsIDQsIAorICAgIDI1MSwgNzQsIDExLCAyMywgNCwgMjQ5LCA2OCwgMTEsIDIzLCA0LCA3NiwgMTEsIDIzLCA0LCAyNDUsIDE0LCAxMSwgMjMsIAorICAgIDQsIDI0MywgMjA5LCAxMSwgMjMsIDQsIDI0MiwgNjcsIDExLCAyMywgNCwgNzQsIDExLCAyMywgNCwgMjM1LCAxNTAsIDExLCAKKyAgICAyMywgNCwgMjM1LCAyOSwgMTEsIDIzLCA0LCAxNTYsIDExLCAyMywgNCwgMTk0LCAxMSwgMjMsIDQsIDIzMCwgMzAsIDExLCAKKyAgICAyMywgNCwgNzgsIDExLCAyMywgNCwgMjI2LCAxMDksIDExLCAyMywgNCwgMjI0LCA5OSwgMTEsIDIzLCA0LCAxNTMsIDExLCAKKyAgICAyMywgNCwgMjIyLCA5MywgMTEsIDIzLCA0LCAyMTcsIDE1MywgMTEsIDIzLCA0LCA2OSwgMTEsIDIzLCA0LCAyMTQsIDEwNSwgCisgICAgMTEsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMzIsIDYsIDYxLCAxMSwgMzIsIDYsIDI1MywgMTY2LCAxMSwgMzIsIDYsIDI1MSwgNzQsIDExLCAzMiwgCisgICAgNiwgMjQ5LCA2OCwgMTEsIDMyLCA2LCA3NiwgMTEsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzIsIDYsIDI0MywgMjA5LCAxMSwgCisgICAgMzIsIDYsIDI0MiwgNjcsIDExLCAzMiwgNiwgNzQsIDExLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzMiwgNiwgMjM1LCAyOSwgCisgICAgMTEsIDMyLCA2LCAxNTYsIDExLCAzMiwgNiwgMTk0LCAxMSwgMzIsIDYsIDIzMCwgMzAsIDExLCAzMiwgNiwgNzgsIDExLCAKKyAgICAzMiwgNiwgMjI2LCAxMDksIDExLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDMyLCA2LCAxNTMsIDExLCAzMiwgNiwgMjIyLCA5MywgCisgICAgMTEsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDMyLCA2LCA2OSwgMTEsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDMyLCA2LCAyMTIsIAorICAgIDk4LCAxMSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgCisgICAgMzIsIDQsIDYxLCAxMSwgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzIsIDQsIDI1MSwgNzQsIDExLCAzMiwgNCwgMjQ5LCA2OCwgCisgICAgMTEsIDMyLCA0LCA3NiwgMTEsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMzIsIDQsIDI0MywgMjA5LCAxMSwgMzIsIDQsIDc0LCAKKyAgICAxMSwgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMzIsIDQsIDIzNSwgMjksIDExLCAzMiwgNCwgMTU2LCAxMSwgMzIsIDQsIDE5NCwgCisgICAgMTEsIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzIsIDQsIDc4LCAxMSwgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzIsIDQsIDIyNCwgCisgICAgOTksIDExLCAzMiwgNCwgMTUzLCAxMSwgMzIsIDQsIDIyMiwgOTMsIDExLCAzMiwgNCwgMjE3LCAxNTMsIDExLCAzMiwgNCwgCisgICAgNjksIDExLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDMyLCAKKyAgICA0LCAyMTEsIDExNywgMTEsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgNiwgNjEsIDExLCAyMywgMzIsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDMyLCA2LCAyNTEsIDc0LCAxMSwgMjMsIDMyLCA2LCAyNDksIDY4LCAxMSwgMjMsIDMyLCA2LCA3NiwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDIzLCAzMiwgNiwgMjQzLCAyMDksIDExLCAyMywgMzIsIDYsIDI0MiwgNjcsIAorICAgIDExLCAyMywgMzIsIDYsIDc0LCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAyOSwgMTEsIAorICAgIDIzLCAzMiwgNiwgMTU2LCAxMSwgMjMsIDMyLCA2LCAxOTQsIDExLCAyMywgMzIsIDYsIDIzMCwgMzAsIDExLCAyMywgMzIsIAorICAgIDYsIDc4LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDIzLCAzMiwgNiwgCisgICAgMTUzLCAxMSwgMjMsIDMyLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDIzLCAzMiwgNiwgNjksIAorICAgIDExLCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA0LCA2MSwgMTEsIAorICAgIDIzLCAzMiwgNCwgMjUzLCAxNjYsIDExLCAyMywgMzIsIDQsIDI1MSwgNzQsIDExLCAyMywgMzIsIDQsIDI0OSwgNjgsIDExLCAKKyAgICAyMywgMzIsIDQsIDc2LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjQyLCA2NywgMTEsIDIzLCAzMiwgNCwgNzQsIDExLCAyMywgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMjMsIDMyLCAKKyAgICA0LCAyMzUsIDI5LCAxMSwgMjMsIDMyLCA0LCAxNTYsIDExLCAyMywgMzIsIDQsIDE5NCwgMTEsIDIzLCAzMiwgNCwgMjMwLCAKKyAgICAzMCwgMTEsIDIzLCAzMiwgNCwgNzgsIDExLCAyMywgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMjMsIDMyLCA0LCAyMjQsIDk5LCAKKyAgICAxMSwgMjMsIDMyLCA0LCAxNTMsIDExLCAyMywgMzIsIDQsIDIyMiwgOTMsIDExLCAyMywgMzIsIDQsIDIxNywgMTUzLCAxMSwgCisgICAgMjMsIDMyLCA0LCA2OSwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDQsIDIxMiwgOTgsIDExLCAyMywgCisgICAgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNCwgMjEwLCAxNTksIDExLCAKKyAgICAxMTksIDYsIDYxLCAxMSwgMTE5LCA2LCAyNTEsIDc0LCAxMSwgMTE5LCA2LCAyNDksIDY4LCAxMSwgMTE5LCA2LCAyNDMsIAorICAgIDIwOSwgMTEsIDExOSwgNiwgMjM1LCAxNTAsIDExLCAxMTksIDYsIDIzNSwgMjksIDExLCAxMTksIDYsIDIzMCwgMzAsIDExLCAKKyAgICAxMTksIDYsIDc4LCAxMSwgMTE5LCA2LCAyMjYsIDEwOSwgMTEsIDExOSwgNiwgMjI0LCA5OSwgMTEsIDExOSwgNiwgMjIyLCAKKyAgICA5MywgMTEsIDExOSwgNiwgMjE3LCAxNTMsIDExLCAxMTksIDYsIDY5LCAxMSwgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDExOSwgCisgICAgNiwgMjEyLCA5OCwgMTEsIDExOSwgNiwgMjExLCAxNzgsIDExLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMTE5LCA2LCAyMTAsIAorICAgIDE1OSwgMTEsIDExOSwgNCwgNjEsIDExLCAxMTksIDQsIDI1MywgMTY2LCAxMSwgMTE5LCA0LCAyNTEsIDc0LCAxMSwgMTE5LCAKKyAgICA0LCAyNDksIDY4LCAxMSwgMTE5LCA0LCAyNDUsIDE0LCAxMSwgMTE5LCA0LCAyNDIsIDY3LCAxMSwgMTE5LCA0LCA3NCwgMTEsIAorICAgIDExOSwgNCwgMjM1LCAxNTAsIDExLCAxMTksIDQsIDIzNSwgMjksIDExLCAxMTksIDQsIDE1NiwgMTEsIDExOSwgNCwgMTk0LCAKKyAgICAxMSwgMTE5LCA0LCAyMzAsIDMwLCAxMSwgMTE5LCA0LCAyMjYsIDEwOSwgMTEsIDExOSwgNCwgMjI0LCA5OSwgMTEsIDExOSwgCisgICAgNCwgMTUzLCAxMSwgMTE5LCA0LCAyMjIsIDkzLCAxMSwgMTE5LCA0LCAyMTcsIDE1MywgMTEsIDExOSwgNCwgNjksIDExLCAKKyAgICAxMTksIDQsIDIxNCwgMTA1LCAxMSwgMTE5LCA0LCAyMTIsIDk4LCAxMSwgMTE5LCA0LCAyMTEsIDE3OCwgMTEsIDExOSwgNCwgCisgICAgMjExLCAxMTcsIDExLCAxMTksIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNiwgNjEsIDExLCAyMywgMTE5LCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzLCAxMTksIDYsIDI1MSwgNzQsIDExLCAyMywgMTE5LCA2LCAyNDksIDY4LCAxMSwgMjMsIDExOSwgNiwgCisgICAgNzYsIDExLCAyMywgMTE5LCA2LCAyNDUsIDE0LCAxMSwgMjMsIDExOSwgNiwgMjQzLCAyMDksIDExLCAyMywgMTE5LCA2LCAKKyAgICAyNDIsIDY3LCAxMSwgMjMsIDExOSwgNiwgNzQsIDExLCAyMywgMTE5LCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAxMTksIDYsIAorICAgIDIzNSwgMjksIDExLCAyMywgMTE5LCA2LCAxNTYsIDExLCAyMywgMTE5LCA2LCAxOTQsIDExLCAyMywgMTE5LCA2LCAyMzAsIAorICAgIDMwLCAxMSwgMjMsIDExOSwgNiwgNzgsIDExLCAyMywgMTE5LCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAxMTksIDYsIDIyNCwgCisgICAgOTksIDExLCAyMywgMTE5LCA2LCAxNTMsIDExLCAyMywgMTE5LCA2LCAyMjIsIDkzLCAxMSwgMjMsIDExOSwgNiwgMjE3LCAKKyAgICAxNTMsIDExLCAyMywgMTE5LCA2LCA2OSwgMTEsIDIzLCAxMTksIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDExOSwgNiwgMjEyLCAKKyAgICA5OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxMTcsIDExLCAyMywgMTE5LCA2LCAKKyAgICAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDQsIDYxLCAxMSwgMjMsIDExOSwgNCwgMjUzLCAxNjYsIDExLCAyMywgMTE5LCA0LCAKKyAgICAyNTEsIDc0LCAxMSwgMjMsIDExOSwgNCwgMjQ5LCA2OCwgMTEsIDIzLCAxMTksIDQsIDc2LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMjQ1LCAxNCwgMTEsIDIzLCAxMTksIDQsIDI0MywgMjA5LCAxMSwgMjMsIDExOSwgNCwgMjQyLCA2NywgMTEsIDIzLCAxMTksIAorICAgIDQsIDc0LCAxMSwgMjMsIDExOSwgNCwgMjM1LCAxNTAsIDExLCAyMywgMTE5LCA0LCAyMzUsIDI5LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMTU2LCAxMSwgMjMsIDExOSwgNCwgMTk0LCAxMSwgMjMsIDExOSwgNCwgMjMwLCAzMCwgMTEsIDIzLCAxMTksIDQsIDc4LCAKKyAgICAxMSwgMjMsIDExOSwgNCwgMjI2LCAxMDksIDExLCAyMywgMTE5LCA0LCAyMjQsIDk5LCAxMSwgMjMsIDExOSwgNCwgMTUzLCAKKyAgICAxMSwgMjMsIDExOSwgNCwgMjIyLCA5MywgMTEsIDIzLCAxMTksIDQsIDIxNywgMTUzLCAxMSwgMjMsIDExOSwgNCwgNjksIAogICAgIDExLCAyMywgMTE5LCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDQsIDIxMiwgOTgsIDExLCAyMywgMTE5LCA0LCAyMTEsIAogICAgIDE3OCwgMTEsIDIzLCAxMTksIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgNCwgMjEwLCAxNTksIDExLCAxMzMsIDYsIDYxLCAKLSAgICAxMSwgMTMzLCA2LCAyNTMsIDE1OCwgMTEsIDEzMywgNiwgMjQ5LCA2MCwgMTEsIDEzMywgNiwgNzUsIDExLCAxMzMsIDYsIAotICAgIDI0NSwgNiwgMTEsIDEzMywgNiwgMjQzLCAyMDIsIDExLCAxMzMsIDYsIDIzNSwgMTQ0LCAxMSwgMTMzLCA2LCAyMzUsIDIzLCAKLSAgICAxMSwgMTMzLCA2LCAxNTYsIDExLCAxMzMsIDYsIDE5MywgMTEsIDEzMywgNiwgMjMwLCAyNSwgMTEsIDEzMywgNiwgNzYsIAotICAgIDExLCAxMzMsIDYsIDIyNiwgMTA1LCAxMSwgMTMzLCA2LCAyMjQsIDk2LCAxMSwgMTMzLCA2LCAyMjIsIDkxLCAxMSwgMTMzLCAKLSAgICA2LCAyMTcsIDE1MiwgMTEsIDEzMywgNiwgNzAsIDExLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMTMzLCA2LCAyMTIsIDk4LCAKKyAgICAxMSwgMTMzLCA2LCAyNTMsIDE2NiwgMTEsIDEzMywgNiwgMjQ5LCA2OCwgMTEsIDEzMywgNiwgNzYsIDExLCAxMzMsIDYsIAorICAgIDI0NSwgMTQsIDExLCAxMzMsIDYsIDI0MywgMjA5LCAxMSwgMTMzLCA2LCAyMzUsIDE1MCwgMTEsIDEzMywgNiwgMjM1LCAyOSwgCisgICAgMTEsIDEzMywgNiwgMTU2LCAxMSwgMTMzLCA2LCAxOTQsIDExLCAxMzMsIDYsIDIzMCwgMzAsIDExLCAxMzMsIDYsIDc4LCAKKyAgICAxMSwgMTMzLCA2LCAyMjYsIDEwOSwgMTEsIDEzMywgNiwgMjI0LCA5OSwgMTEsIDEzMywgNiwgMjIyLCA5MywgMTEsIDEzMywgCisgICAgNiwgMjE3LCAxNTMsIDExLCAxMzMsIDYsIDY5LCAxMSwgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDEzMywgNiwgMjEyLCA5OCwgCiAgICAgMTEsIDEzMywgNiwgMjExLCAxNzgsIDExLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMTMzLCA0LCA2MSwgMTEsIDEzMywgNCwgCi0gICAgMjUzLCAxNTgsIDExLCAxMzMsIDQsIDI1MSwgNjYsIDExLCAxMzMsIDQsIDI0OSwgNjAsIDExLCAxMzMsIDQsIDc1LCAxMSwgCi0gICAgMTMzLCA0LCAyNDUsIDYsIDExLCAxMzMsIDQsIDI0MywgMjAyLCAxMSwgMTMzLCA0LCAyNDIsIDYwLCAxMSwgMTMzLCA0LCAKLSAgICA3MywgMTEsIDEzMywgNCwgMjM1LCAxNDQsIDExLCAxMzMsIDQsIDIzNSwgMjMsIDExLCAxMzMsIDQsIDE1NiwgMTEsIDEzMywgCi0gICAgNCwgMTkzLCAxMSwgMTMzLCA0LCAyMzAsIDI1LCAxMSwgMTMzLCA0LCA3NiwgMTEsIDEzMywgNCwgMjI2LCAxMDUsIDExLCAKLSAgICAxMzMsIDQsIDIyNCwgOTYsIDExLCAxMzMsIDQsIDE1MywgMTEsIDEzMywgNCwgMjIyLCA5MSwgMTEsIDEzMywgNCwgMjE3LCAKLSAgICAxNTIsIDExLCAxMzMsIDQsIDcwLCAxMSwgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDEzMywgNCwgMjEyLCA5OCwgMTEsIDEzMywgCisgICAgMjUzLCAxNjYsIDExLCAxMzMsIDQsIDI1MSwgNzQsIDExLCAxMzMsIDQsIDI0OSwgNjgsIDExLCAxMzMsIDQsIDc2LCAxMSwgCisgICAgMTMzLCA0LCAyNDUsIDE0LCAxMSwgMTMzLCA0LCAyNDMsIDIwOSwgMTEsIDEzMywgNCwgMjQyLCA2NywgMTEsIDEzMywgNCwgCisgICAgNzQsIDExLCAxMzMsIDQsIDIzNSwgMTUwLCAxMSwgMTMzLCA0LCAyMzUsIDI5LCAxMSwgMTMzLCA0LCAxNTYsIDExLCAxMzMsIAorICAgIDQsIDE5NCwgMTEsIDEzMywgNCwgMjMwLCAzMCwgMTEsIDEzMywgNCwgNzgsIDExLCAxMzMsIDQsIDIyNiwgMTA5LCAxMSwgCisgICAgMTMzLCA0LCAyMjQsIDk5LCAxMSwgMTMzLCA0LCAxNTMsIDExLCAxMzMsIDQsIDIyMiwgOTMsIDExLCAxMzMsIDQsIDIxNywgCisgICAgMTUzLCAxMSwgMTMzLCA0LCA2OSwgMTEsIDEzMywgNCwgMjE0LCAxMDUsIDExLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAxMzMsIAogICAgIDQsIDIxMSwgMTc4LCAxMSwgMTMzLCA0LCAyMTEsIDExNywgMTEsIDEzMywgNCwgMjEwLCAxNTksIDExLCAxMzksIDYsIDYxLCAKLSAgICAxMSwgMTM5LCA2LCAyNTMsIDE1OCwgMTEsIDEzOSwgNiwgMjQ5LCA2MCwgMTEsIDEzOSwgNiwgNzUsIDExLCAxMzksIDYsIAotICAgIDI0NSwgNiwgMTEsIDEzOSwgNiwgMjQzLCAyMDIsIDExLCAxMzksIDYsIDczLCAxMSwgMTM5LCA2LCAyMzUsIDE0NCwgMTEsIAotICAgIDEzOSwgNiwgMjM1LCAyMywgMTEsIDEzOSwgNiwgMTU2LCAxMSwgMTM5LCA2LCAxOTMsIDExLCAxMzksIDYsIDc2LCAxMSwgCi0gICAgMTM5LCA2LCAyMjIsIDkxLCAxMSwgMTM5LCA2LCAyMTcsIDE1MiwgMTEsIDEzOSwgNiwgNzAsIDExLCAxMzksIDYsIDIxNCwgCisgICAgMTEsIDEzOSwgNiwgMjUzLCAxNjYsIDExLCAxMzksIDYsIDI0OSwgNjgsIDExLCAxMzksIDYsIDc2LCAxMSwgMTM5LCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMTM5LCA2LCAyNDMsIDIwOSwgMTEsIDEzOSwgNiwgNzQsIDExLCAxMzksIDYsIDIzNSwgMTUwLCAxMSwgCisgICAgMTM5LCA2LCAyMzUsIDI5LCAxMSwgMTM5LCA2LCAxNTYsIDExLCAxMzksIDYsIDE5NCwgMTEsIDEzOSwgNiwgNzgsIDExLCAKKyAgICAxMzksIDYsIDIyMiwgOTMsIDExLCAxMzksIDYsIDIxNywgMTUzLCAxMSwgMTM5LCA2LCA2OSwgMTEsIDEzOSwgNiwgMjE0LCAKICAgICAxMDUsIDExLCAxMzksIDYsIDIxMiwgOTgsIDExLCAxMzksIDYsIDIxMSwgMTc4LCAxMSwgMTM5LCA2LCAyMTEsIDExNywgMTEsIAotICAgIDEzOSwgNCwgNjEsIDExLCAxMzksIDQsIDI1MywgMTU4LCAxMSwgMTM5LCA0LCAyNTEsIDY2LCAxMSwgMTM5LCA0LCAyNDksIAotICAgIDYwLCAxMSwgMTM5LCA0LCA3NSwgMTEsIDEzOSwgNCwgMjQ1LCA2LCAxMSwgMTM5LCA0LCAyNDMsIDIwMiwgMTEsIDEzOSwgNCwgCi0gICAgMjQyLCA2MCwgMTEsIDEzOSwgNCwgNzMsIDExLCAxMzksIDQsIDIzNSwgMTQ0LCAxMSwgMTM5LCA0LCAyMzUsIDIzLCAxMSwgCi0gICAgMTM5LCA0LCAxNTYsIDExLCAxMzksIDQsIDE5MywgMTEsIDEzOSwgNCwgMjMwLCAyNSwgMTEsIDEzOSwgNCwgNzYsIDExLCAKLSAgICAxMzksIDQsIDIyNiwgMTA1LCAxMSwgMTM5LCA0LCAyMjQsIDk2LCAxMSwgMTM5LCA0LCAxNTMsIDExLCAxMzksIDQsIDIyMiwgCi0gICAgOTEsIDExLCAxMzksIDQsIDIxNywgMTUyLCAxMSwgMTM5LCA0LCA3MCwgMTEsIDEzOSwgNCwgMjE0LCAxMDUsIDExLCAxMzksIAotICAgIDQsIDIxMiwgOTgsIDExLCAxMzksIDQsIDIxMSwgMTc4LCAxMSwgMTM5LCA0LCAyMTEsIDExNywgMTEsIDEzOSwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAyMywgMTMzLCA2LCA2MSwgMTEsIDIzLCAxMzMsIDYsIDI1MywgMTU4LCAxMSwgMjMsIDEzMywgNiwgMjUxLCAKLSAgICA2NiwgMTEsIDIzLCAxMzMsIDYsIDI0OSwgNjAsIDExLCAyMywgMTMzLCA2LCA3NSwgMTEsIDIzLCAxMzMsIDYsIDI0NSwgNiwgCi0gICAgMTEsIDIzLCAxMzMsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDEzMywgNiwgMjQyLCA2MCwgMTEsIDIzLCAxMzMsIDYsIDczLCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMjM1LCAxNDQsIDExLCAyMywgMTMzLCA2LCAyMzUsIDIzLCAxMSwgMjMsIDEzMywgNiwgMTU2LCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMTkzLCAxMSwgMjMsIDEzMywgNiwgMjMwLCAyNSwgMTEsIDIzLCAxMzMsIDYsIDc2LCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjI2LCAxMDUsIDExLCAyMywgMTMzLCA2LCAyMjQsIDk2LCAxMSwgMjMsIDEzMywgNiwgMTUzLCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjIyLCA5MSwgMTEsIDIzLCAxMzMsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDEzMywgNiwgNzAsIDExLCAyMywgCi0gICAgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMzMsIDYsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA2LCAyMTEsIDE3OCwgMTEsIAotICAgIDIzLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNiwgMjEwLCAxNTksIDExLCAyMywgMTMzLCA0LCA2MSwgMTEsIAotICAgIDIzLCAxMzMsIDQsIDI1MywgMTU4LCAxMSwgMjMsIDEzMywgNCwgMjUxLCA2NiwgMTEsIDIzLCAxMzMsIDQsIDI0OSwgNjAsIAotICAgIDExLCAyMywgMTMzLCA0LCA3NSwgMTEsIDIzLCAxMzMsIDQsIDI0NSwgNiwgMTEsIDIzLCAxMzMsIDQsIDI0MywgMjAyLCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjQyLCA2MCwgMTEsIDIzLCAxMzMsIDQsIDczLCAxMSwgMjMsIDEzMywgNCwgMjM1LCAxNDQsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDEzMywgNCwgMTU2LCAxMSwgMjMsIDEzMywgNCwgMTkzLCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjMwLCAyNSwgMTEsIDIzLCAxMzMsIDQsIDc2LCAxMSwgMjMsIDEzMywgNCwgMjI2LCAxMDUsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMjQsIDk2LCAxMSwgMjMsIDEzMywgNCwgMTUzLCAxMSwgMjMsIDEzMywgNCwgMjIyLCA5MSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIxNywgMTUyLCAxMSwgMjMsIDEzMywgNCwgNzAsIDExLCAyMywgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAxMzMsIDQsIDIxMSwgMTE3LCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjEwLCAxNTksIDExLCAzNSwgNiwgNjEsIDExLCAzNSwgNiwgMjUzLCAxNTgsIDExLCAzNSwgNiwgMjUxLCAKLSAgICA2NiwgMTEsIDM1LCA2LCAyNDksIDYwLCAxMSwgMzUsIDYsIDc1LCAxMSwgMzUsIDYsIDI0NSwgNiwgMTEsIDM1LCA2LCAyNDMsIAotICAgIDIwMiwgMTEsIDM1LCA2LCAyNDIsIDYwLCAxMSwgMzUsIDYsIDczLCAxMSwgMzUsIDYsIDIzNSwgMTQ0LCAxMSwgMzUsIDYsIAotICAgIDIzNSwgMjMsIDExLCAzNSwgNiwgMTU2LCAxMSwgMzUsIDYsIDE5MywgMTEsIDM1LCA2LCAyMzAsIDI1LCAxMSwgMzUsIDYsIAotICAgIDc2LCAxMSwgMzUsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDYsIDIyNCwgOTYsIDExLCAzNSwgNiwgMTUzLCAxMSwgMzUsIDYsIAotICAgIDIyMiwgOTEsIDExLCAzNSwgNiwgMjE3LCAxNTIsIDExLCAzNSwgNiwgNzAsIDExLCAzNSwgNiwgMjE0LCAxMDUsIDExLCAzNSwgCi0gICAgNiwgMjEyLCA5OCwgMTEsIDM1LCA2LCAyMTEsIDE3OCwgMTEsIDM1LCA2LCAyMTEsIDExNywgMTEsIDM1LCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDM1LCA0LCA2MSwgMTEsIDM1LCA0LCAyNTMsIDE1OCwgMTEsIDM1LCA0LCAyNTEsIDY2LCAxMSwgMzUsIDQsIAotICAgIDI0OSwgNjAsIDExLCAzNSwgNCwgNzUsIDExLCAzNSwgNCwgMjQ1LCA2LCAxMSwgMzUsIDQsIDI0MywgMjAyLCAxMSwgMzUsIAotICAgIDQsIDI0MiwgNjAsIDExLCAzNSwgNCwgNzMsIDExLCAzNSwgNCwgMjM1LCAxNDQsIDExLCAzNSwgNCwgMjM1LCAyMywgMTEsIAotICAgIDM1LCA0LCAxNTYsIDExLCAzNSwgNCwgMTkzLCAxMSwgMzUsIDQsIDIzMCwgMjUsIDExLCAzNSwgNCwgNzYsIDExLCAzNSwgNCwgCi0gICAgMjI2LCAxMDUsIDExLCAzNSwgNCwgMjI0LCA5NiwgMTEsIDM1LCA0LCAxNTMsIDExLCAzNSwgNCwgMjIyLCA5MSwgMTEsIDM1LCAKLSAgICA0LCAyMTcsIDE1MiwgMTEsIDM1LCA0LCA3MCwgMTEsIDM1LCA0LCAyMTQsIDEwNSwgMTEsIDM1LCA0LCAyMTIsIDk4LCAxMSwgCi0gICAgMzUsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCA2LCAKLSAgICA2MSwgMTEsIDM1LCAyMywgNiwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDYsIDI1MSwgNjYsIDExLCAzNSwgMjMsIDYsIDI0OSwgCi0gICAgNjAsIDExLCAzNSwgMjMsIDYsIDc1LCAxMSwgMzUsIDIzLCA2LCAyNDUsIDYsIDExLCAzNSwgMjMsIDYsIDI0MywgMjAyLCAKLSAgICAxMSwgMzUsIDIzLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCA2LCA3MywgMTEsIDM1LCAyMywgNiwgMjM1LCAxNDQsIDExLCAKLSAgICAzNSwgMjMsIDYsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDYsIDE1NiwgMTEsIDM1LCAyMywgNiwgMTkzLCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCA2LCA3NiwgMTEsIDM1LCAyMywgNiwgMjI2LCAxMDUsIDExLCAzNSwgMjMsIDYsIAotICAgIDIyNCwgOTYsIDExLCAzNSwgMjMsIDYsIDE1MywgMTEsIDM1LCAyMywgNiwgMjIyLCA5MSwgMTEsIDM1LCAyMywgNiwgMjE3LCAKLSAgICAxNTIsIDExLCAzNSwgMjMsIDYsIDcwLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgNiwgMjEyLCA5OCwgCi0gICAgMTEsIDM1LCAyMywgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDM1LCAyMywgNCwgNjEsIDExLCAzNSwgMjMsIDQsIDI1MywgMTU4LCAxMSwgMzUsIDIzLCA0LCAyNTEsIDY2LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyNDksIDYwLCAxMSwgMzUsIDIzLCA0LCA3NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCA2LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyNDMsIDIwMiwgMTEsIDM1LCAyMywgNCwgMjQyLCA2MCwgMTEsIDM1LCAyMywgNCwgNzMsIDExLCAzNSwgMjMsIAotICAgIDQsIDIzNSwgMTQ0LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCA0LCAxNTYsIDExLCAzNSwgMjMsIDQsIAotICAgIDE5MywgMTEsIDM1LCAyMywgNCwgMjMwLCAyNSwgMTEsIDM1LCAyMywgNCwgNzYsIDExLCAzNSwgMjMsIDQsIDIyNiwgMTA1LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMjQsIDk2LCAxMSwgMzUsIDIzLCA0LCAxNTMsIDExLCAzNSwgMjMsIDQsIDIyMiwgOTEsIDExLCAKLSAgICAzNSwgMjMsIDQsIDIxNywgMTUyLCAxMSwgMzUsIDIzLCA0LCA3MCwgMTEsIDM1LCAyMywgNCwgMjE0LCAxMDUsIDExLCAzNSwgCi0gICAgMjMsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDExNywgMTEsIDM1LCAKLSAgICAyMywgNCwgMjEwLCAxNTksIDExLCAzNSwgMzIsIDYsIDYxLCAxMSwgMzUsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDM1LCAzMiwgCi0gICAgNiwgMjUxLCA2NiwgMTEsIDM1LCAzMiwgNiwgMjQ5LCA2MCwgMTEsIDM1LCAzMiwgNiwgNzUsIDExLCAzNSwgMzIsIDYsIAotICAgIDI0NSwgNiwgMTEsIDM1LCAzMiwgNiwgMjQzLCAyMDIsIDExLCAzNSwgMzIsIDYsIDI0MiwgNjAsIDExLCAzNSwgMzIsIDYsIAotICAgIDczLCAxMSwgMzUsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDM1LCAzMiwgNiwgMjM1LCAyMywgMTEsIDM1LCAzMiwgNiwgMTU2LCAKLSAgICAxMSwgMzUsIDMyLCA2LCAxOTMsIDExLCAzNSwgMzIsIDYsIDIzMCwgMjUsIDExLCAzNSwgMzIsIDYsIDc2LCAxMSwgMzUsIAotICAgIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAzMiwgNiwgMjI0LCA5NiwgMTEsIDM1LCAzMiwgNiwgMTUzLCAxMSwgMzUsIDMyLCAKLSAgICA2LCAyMjIsIDkxLCAxMSwgMzUsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDM1LCAzMiwgNiwgNzAsIDExLCAzNSwgMzIsIDYsIAotICAgIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAzMiwgNiwgCi0gICAgMjExLCAxMTcsIDExLCAzNSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA0LCA2MSwgMTEsIDM1LCAzMiwgNCwgMjUzLCAKLSAgICAxNTgsIDExLCAzNSwgMzIsIDQsIDI1MSwgNjYsIDExLCAzNSwgMzIsIDQsIDI0OSwgNjAsIDExLCAzNSwgMzIsIDQsIDc1LCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyNDUsIDYsIDExLCAzNSwgMzIsIDQsIDI0MywgMjAyLCAxMSwgMzUsIDMyLCA0LCAyNDIsIDYwLCAKLSAgICAxMSwgMzUsIDMyLCA0LCA3MywgMTEsIDM1LCAzMiwgNCwgMjM1LCAxNDQsIDExLCAzNSwgMzIsIDQsIDIzNSwgMjMsIDExLCAKLSAgICAzNSwgMzIsIDQsIDE1NiwgMTEsIDM1LCAzMiwgNCwgMTkzLCAxMSwgMzUsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDMyLCAKLSAgICA0LCA3NiwgMTEsIDM1LCAzMiwgNCwgMjI2LCAxMDUsIDExLCAzNSwgMzIsIDQsIDIyNCwgOTYsIDExLCAzNSwgMzIsIDQsIAotICAgIDE1MywgMTEsIDM1LCAzMiwgNCwgMjIyLCA5MSwgMTEsIDM1LCAzMiwgNCwgMjE3LCAxNTIsIDExLCAzNSwgMzIsIDQsIDcwLCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxNzgsIAotICAgIDExLCAzNSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDYsIDYxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgMzIsIDYsIDc1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNiwgMjQzLCAyMDIsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCAzMiwgNiwgNzMsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAxNTYsIDExLCAzNSwgMjMsIDMyLCA2LCAxOTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgNzYsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNCwgOTYsIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCAxNTIsIAotICAgIDExLCAzNSwgMjMsIDMyLCA2LCA3MCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjEyLCA5OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDQsIDYxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUzLCAKLSAgICAxNTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDc1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQzLCAyMDIsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA0LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCAzMiwgNCwgNzMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIAotICAgIDE0NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDMyLCA0LCAxNTYsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAxOTMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCAzMiwgNCwgNzYsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgOTYsIDExLCAzNSwgMjMsIDMyLCA0LCAxNTMsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE3LCAxNTIsIDExLCAzNSwgMjMsIDMyLCA0LCAKLSAgICA3MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDIzMCwgMTM4LCA2LCA2MSwgMTEsIDIzMCwgMTM4LCA2LCAyNTMsIDE1OCwgMTEsIDIzMCwgMTM4LCA2LCAKLSAgICAyNTEsIDY2LCAxMSwgMjMwLCAxMzgsIDYsIDI0OSwgNjAsIDExLCAyMzAsIDEzOCwgNiwgNzUsIDExLCAyMzAsIDEzOCwgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMjMwLCAxMzgsIDYsIDI0MywgMjAyLCAxMSwgMjMwLCAxMzgsIDYsIDI0MiwgNjAsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgNzMsIDExLCAyMzAsIDEzOCwgNiwgMjM1LCAxNDQsIDExLCAyMzAsIDEzOCwgNiwgMjM1LCAyMywgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCAxNTYsIDExLCAyMzAsIDEzOCwgNiwgMTkzLCAxMSwgMjMwLCAxMzgsIDYsIDIzMCwgMjUsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgNzYsIDExLCAyMzAsIDEzOCwgNiwgMjI2LCAxMDUsIDExLCAyMzAsIDEzOCwgNiwgMjI0LCA5NiwgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCAxNTMsIDExLCAyMzAsIDEzOCwgNiwgMjIyLCA5MSwgMTEsIDIzMCwgMTM4LCA2LCAyMTcsIDE1MiwgMTEsIAotICAgIDIzMCwgMTM4LCA2LCA3MCwgMTEsIDIzMCwgMTM4LCA2LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTM4LCA2LCAyMTIsIDk4LCAxMSwgCi0gICAgMjMwLCAxMzgsIDYsIDIxMSwgMTc4LCAxMSwgMjMwLCAxMzgsIDYsIDIxMSwgMTE3LCAxMSwgMjMwLCAxMzgsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMjMwLCAxMzgsIDQsIDYxLCAxMSwgMjMwLCAxMzgsIDQsIDI1MywgMTU4LCAxMSwgMjMwLCAxMzgsIDQsIAotICAgIDI1MSwgNjYsIDExLCAyMzAsIDEzOCwgNCwgMjQ5LCA2MCwgMTEsIDIzMCwgMTM4LCA0LCA3NSwgMTEsIDIzMCwgMTM4LCA0LCAKLSAgICAyNDUsIDYsIDExLCAyMzAsIDEzOCwgNCwgMjQzLCAyMDIsIDExLCAyMzAsIDEzOCwgNCwgMjQyLCA2MCwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCA3MywgMTEsIDIzMCwgMTM4LCA0LCAyMzUsIDE0NCwgMTEsIDIzMCwgMTM4LCA0LCAyMzUsIDIzLCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDE1NiwgMTEsIDIzMCwgMTM4LCA0LCAxOTMsIDExLCAyMzAsIDEzOCwgNCwgMjMwLCAyNSwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCA3NiwgMTEsIDIzMCwgMTM4LCA0LCAyMjYsIDEwNSwgMTEsIDIzMCwgMTM4LCA0LCAyMjQsIDk2LCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDE1MywgMTEsIDIzMCwgMTM4LCA0LCAyMjIsIDkxLCAxMSwgMjMwLCAxMzgsIDQsIDIxNywgMTUyLCAxMSwgCi0gICAgMjMwLCAxMzgsIDQsIDcwLCAxMSwgMjMwLCAxMzgsIDQsIDIxNCwgMTA1LCAxMSwgMjMwLCAxMzgsIDQsIDIxMiwgOTgsIDExLCAKLSAgICAyMzAsIDEzOCwgNCwgMjExLCAxNzgsIDExLCAyMzAsIDEzOCwgNCwgMjExLCAxMTcsIDExLCAyMzAsIDEzOCwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAzMiwgNCwgMjQ3LCAxMTksIDczLCAxMSwgMzIsIDQsIDI0NywgMTE5LCAyMzUsIDE0NCwgMTEsIDIzLCA2LCAKLSAgICAyNTQsIDE0MywgMTEsIDIzLCA2LCAyNTIsIDI2LCAxMSwgMjMsIDYsIDI0MywgMTA3LCAxMSwgMjMsIDYsIDI0OCwgNTQsIAotICAgIDExLCAyMywgNiwgMjQ1LCAxMDAsIDExLCAyMywgNiwgMjEwLCA4NSwgMTEsIDIzLCA2LCAyNDUsIDYzLCAxMSwgMjMsIDYsIAotICAgIDIxNiwgMTc5LCAxMSwgMjMsIDYsIDIzNSwgMTg1LCAxMSwgMjMsIDYsIDIzNCwgMjIyLCAxMSwgMjMsIDYsIDIzMywgOTgsIAotICAgIDExLCAyMywgNiwgMjMwLCAxMDIsIDExLCAyMywgNiwgMjI3LCAyMzcsIDExLCAyMywgNiwgMjExLCAxNTcsIDExLCAyMywgNiwgCi0gICAgMjI2LCAxOTksIDExLCAyMywgNiwgMjI1LCAxMDgsIDExLCAyMywgNiwgMjIzLCAzNywgMTEsIDIzLCA2LCAyMTYsIDE4MCwgCi0gICAgODcsIDExLCAyMywgNiwgMjE5LCAxNzcsIDExLCAyMywgNiwgMjE3LCA0MSwgMTEsIDIzLCA2LCAyMTQsIDE1NywgMTEsIDIzLCAKLSAgICA2LCAyMjUsIDEzMywgMTEsIDIzLCA2LCAyNTAsIDExMCwgMTEsIDIzLCA2LCAyMjQsIDE2MSwgMTEsIDIzLCA2LCAyMjYsIAotICAgIDIwMSwgMTEsIDIzLCAyMjksIDIyMSwgMTEsIDIzLCA0LCAyNTQsIDE0MywgMTEsIDIzLCA0LCAyNTIsIDI2LCAxMSwgMjMsIAotICAgIDQsIDI0MywgMTA3LCAxMSwgMjMsIDQsIDI0OCwgNTQsIDExLCAyMywgNCwgMjQ1LCAxMDAsIDExLCAyMywgNCwgMjEwLCA4NSwgCi0gICAgMTEsIDIzLCA0LCAyNDUsIDYzLCAxMSwgMjMsIDQsIDIxNiwgMTc5LCAxMSwgMjMsIDQsIDIzNSwgMTg1LCAxMSwgMjMsIDQsIAotICAgIDIzNCwgMjIyLCAxMSwgMjMsIDQsIDIzMywgOTgsIDExLCAyMywgNCwgMjMwLCAxMDIsIDExLCAyMywgNCwgMjI3LCAyMzcsIAotICAgIDExLCAyMywgNCwgMjExLCAxNTcsIDExLCAyMywgNCwgMjI2LCAxOTksIDExLCAyMywgNCwgMjI1LCAxMDgsIDExLCAyMywgNCwgCi0gICAgMjIzLCAzNywgMTEsIDIzLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAyMywgNCwgMjE5LCAxNzcsIDExLCAyMywgNCwgMjE3LCAKLSAgICA0MSwgMTEsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDIzLCA0LCAyMjUsIDEzMywgMTEsIDIzLCA0LCAyNTAsIDExMCwgMTEsIAotICAgIDIzLCA0LCAyMjQsIDE2MSwgMTEsIDIzLCA0LCAyMjYsIDIwMSwgMTEsIDIzLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAyMywgCi0gICAgMjQ1LCAxMDEsIDg3LCAxMSwgMjMsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAyMzQsIDIyMywgODcsIDExLCAyMywgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMjMsIDIyMywgMzgsIDg3LCAxMSwgMjMsIDIyNSwgMTA5LCA4NywgMTEsIDMyLCA2LCAyNTQsIDE0MywgCi0gICAgMTEsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMzIsIDYsIDI0MywgMTA3LCAxMSwgMzIsIDYsIDI0OCwgNTQsIDExLCAzMiwgNiwgCi0gICAgMjQ1LCAxMDAsIDExLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDMyLCA2LCAyNDUsIDYzLCAxMSwgMzIsIDYsIDIxNiwgMTc5LCAKLSAgICAxMSwgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMzIsIDYsIDIzNCwgMjIyLCAxMSwgMzIsIDYsIDIzMywgOTgsIDExLCAzMiwgNiwgCi0gICAgMjMwLCAxMDIsIDExLCAzMiwgNiwgMjI3LCAyMzcsIDExLCAzMiwgNiwgMjExLCAxNTcsIDExLCAzMiwgNiwgMjI2LCAxOTksIAotICAgIDExLCAzMiwgNiwgMjI1LCAxMDgsIDExLCAzMiwgNiwgMjIzLCAzNywgMTEsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAzMiwgCi0gICAgNiwgMjE5LCAxNzcsIDExLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDMyLCA2LCAyMTQsIDE1NywgMTEsIDMyLCA2LCAyMjUsIAotICAgIDEzMywgMTEsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIDMyLCA2LCAyMjYsIDIwMSwgMTEsIAotICAgIDMyLCAyMjksIDIyMSwgMTEsIDMyLCA0LCAyNTQsIDE0MywgMTEsIDMyLCA0LCAyNTIsIDI2LCAxMSwgMzIsIDQsIDI0MywgCi0gICAgMTA3LCAxMSwgMzIsIDQsIDI0OCwgNTQsIDExLCAzMiwgNCwgMjQ1LCAxMDAsIDExLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDMyLCAKLSAgICA0LCAyNDUsIDYzLCAxMSwgMzIsIDQsIDIxNiwgMTc5LCAxMSwgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMzIsIDQsIDIzNCwgCi0gICAgMjIyLCAxMSwgMzIsIDQsIDIzMywgOTgsIDExLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAzMiwgNCwgMjI3LCAyMzcsIDExLCAKLSAgICAzMiwgNCwgMjExLCAxNTcsIDExLCAzMiwgNCwgMjI2LCAxOTksIDExLCAzMiwgNCwgMjI1LCAxMDgsIDExLCAzMiwgNCwgCi0gICAgMjIzLCAzNywgMTEsIDMyLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAzMiwgNCwgMjE5LCAxNzcsIDExLCAzMiwgNCwgMjE3LCAKLSAgICA0MSwgMTEsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDMyLCA0LCAyMjUsIDEzMywgMTEsIDMyLCA0LCAyNTAsIDExMCwgMTEsIAotICAgIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDMyLCA0LCAyMjYsIDIwMSwgMTEsIDMyLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAzMiwgCi0gICAgMjQ1LCAxMDEsIDg3LCAxMSwgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDMyLCAyMzQsIDIyMywgODcsIDExLCAzMiwgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMzIsIDIyMywgMzgsIDg3LCAxMSwgMzIsIDIyNSwgMTA5LCA4NywgMTEsIDIzLCAzMiwgNiwgMjU0LCAKLSAgICAxNDMsIDExLCAyMywgMzIsIDYsIDI1MiwgMjYsIDExLCAyMywgMzIsIDYsIDI0MywgMTA3LCAxMSwgMjMsIDMyLCA2LCAyNDgsIAotICAgIDU0LCAxMSwgMjMsIDMyLCA2LCAyNDUsIDEwMCwgMTEsIDIzLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAKLSAgICA2MywgMTEsIDIzLCAzMiwgNiwgMjE2LCAxNzksIDExLCAyMywgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMjMsIDMyLCA2LCAyMzQsIAotICAgIDIyMiwgMTEsIDIzLCAzMiwgNiwgMjMzLCA5OCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAxMDIsIDExLCAyMywgMzIsIDYsIDIyNywgCi0gICAgMjM3LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNiwgMjI2LCAxOTksIDExLCAyMywgMzIsIDYsIAotICAgIDIyNSwgMTA4LCAxMSwgMjMsIDMyLCA2LCAyMjMsIDM3LCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAyMywgCi0gICAgMzIsIDYsIDIxOSwgMTc3LCAxMSwgMjMsIDMyLCA2LCAyMTcsIDQxLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDE1NywgMTEsIDIzLCAKLSAgICAzMiwgNiwgMjI1LCAxMzMsIDExLCAyMywgMzIsIDYsIDI1MCwgMTEwLCAxMSwgMjMsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIAotICAgIDIzLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAyMywgMzIsIDIyOSwgMjIxLCAxMSwgMjMsIDMyLCA0LCAyNTQsIDE0MywgMTEsIAotICAgIDIzLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDIzLCAzMiwgNCwgMjQzLCAxMDcsIDExLCAyMywgMzIsIDQsIDI0OCwgNTQsIDExLCAKLSAgICAyMywgMzIsIDQsIDI0NSwgMTAwLCAxMSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDYzLCAxMSwgCi0gICAgMjMsIDMyLCA0LCAyMTYsIDE3OSwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxODUsIDExLCAyMywgMzIsIDQsIDIzNCwgMjIyLCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMjMsIDMyLCA0LCAyMzAsIDEwMiwgMTEsIDIzLCAzMiwgNCwgMjI3LCAyMzcsIAotICAgIDExLCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDE5OSwgMTEsIDIzLCAzMiwgNCwgMjI1LCAKLSAgICAxMDgsIDExLCAyMywgMzIsIDQsIDIyMywgMzcsIDExLCAyMywgMzIsIDQsIDQwLCAyMTksIDE3NywgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjE5LCAxNzcsIDExLCAyMywgMzIsIDQsIDIxNywgNDEsIDExLCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyMjUsIDEzMywgMTEsIDIzLCAzMiwgNCwgMjUwLCAxMTAsIDExLCAyMywgMzIsIDQsIDIyNCwgMTYxLCAxMSwgMjMsIDMyLCAKLSAgICA0LCAyMjYsIDIwMSwgMTEsIDIzLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMjMsIDMyLCAyNDUsIDEwMSwgODcsIAotICAgIDExLCAyMywgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDEzNCwgCi0gICAgODcsIDExLCAyMywgMzIsIDIyMywgMzgsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAzNSwgMjMsIDYsIAotICAgIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCA2LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCA2LCAyNDMsIDEwNywgMTEsIDM1LCAyMywgNiwgCi0gICAgMjQ4LCA1NCwgMTEsIDM1LCAyMywgNiwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDYsIDIxMCwgODUsIDExLCAzNSwgMjMsIDYsIAotICAgIDI0NSwgNjMsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTc5LCAxMSwgMzUsIDIzLCA2LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjM0LCAyMjIsIDExLCAzNSwgMjMsIDYsIDIzMywgOTgsIDExLCAzNSwgMjMsIDYsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyMjcsIDIzNywgMTEsIDM1LCAyMywgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDYsIDIyNiwgMTk5LCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyMjUsIDEwOCwgMTEsIDM1LCAyMywgNiwgMjIzLCAzNywgMTEsIDM1LCAyMywgNiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIAotICAgIDIzLCA2LCAyMTksIDE3NywgMTEsIDM1LCAyMywgNiwgMjE3LCA0MSwgMTEsIDM1LCAyMywgNiwgMjE0LCAxNTcsIDExLCAzNSwgCi0gICAgMjMsIDYsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCA2LCAyNTAsIDExMCwgMTEsIDM1LCAyMywgNiwgMjI0LCAxNjEsIDExLCAKLSAgICAzNSwgMjMsIDYsIDIyNiwgMjAxLCAxMSwgMzUsIDIzLCAyMjksIDIyMSwgMTEsIDM1LCAyMywgNCwgMjU0LCAxNDMsIDExLCAKLSAgICAzNSwgMjMsIDQsIDI1MiwgMjYsIDExLCAzNSwgMjMsIDQsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCA0LCAyNDgsIDU0LCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyNDUsIDEwMCwgMTEsIDM1LCAyMywgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCA2MywgMTEsIAotICAgIDM1LCAyMywgNCwgMjE2LCAxNzksIDExLCAzNSwgMjMsIDQsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCA0LCAyMzQsIDIyMiwgCi0gICAgMTEsIDM1LCAyMywgNCwgMjMzLCA5OCwgMTEsIDM1LCAyMywgNCwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDQsIDIyNywgMjM3LCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNCwgMjI2LCAxOTksIDExLCAzNSwgMjMsIDQsIDIyNSwgCi0gICAgMTA4LCAxMSwgMzUsIDIzLCA0LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDQsIAotICAgIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCA0LCAyMTcsIDQxLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgNCwgCi0gICAgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDQsIDI1MCwgMTEwLCAxMSwgMzUsIDIzLCA0LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgCi0gICAgNCwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDM1LCAyMywgMjQ1LCAxMDEsIDg3LCAKLSAgICAxMSwgMzUsIDIzLCAyMTYsIDE4MCwgODcsIDExLCAzNSwgMjMsIDIzNCwgMjIzLCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMzQsIAotICAgIDg3LCAxMSwgMzUsIDIzLCAyMjMsIDM4LCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMDksIDg3LCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjU0LCAxNDMsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQzLCAxMDcsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyNDgsIDU0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA2MywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTc5LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzQsIDIyMiwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMywgCi0gICAgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNywgMjM3LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDE5OSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNSwgCi0gICAgMTA4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIzLCAzNywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNCwgCi0gICAgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIyNCwgMTYxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDMyLCAyMjksIAotICAgIDIyMSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ4LCA1NCwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgMTAwLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgNjMsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyMTYsIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM0LCAyMjIsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyMjcsIDIzNywgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAxOTksIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDEwOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyMywgMzcsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCA0MCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTksIDE3NywgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgNDEsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMjUwLCAxMTAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMjAxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMzUsIDIzLCAzMiwgMjQ1LCAxMDEsIDg3LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAKLSAgICAxMzQsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjIzLCAzOCwgODcsIDExLCAzNSwgMjMsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAKLSAgICAyMywgNiwgMjQ3LCAyMjcsIDExLCAyMywgNCwgMjQ3LCAyMjcsIDExLCAyMywgMjEsIDIxMCwgODYsIDExLCAyMywgMjEsIAotICAgIDExMCwgMTEsIDIzLCAyMSwgMTA1LCAxMSwgMjMsIDIxLCAxNTgsIDExLCAyMywgMjEsIDE2MSwgMTEsIDIzLCAyMSwgMTg5LCAKLSAgICAxMSwgMjMsIDIxLCAxOTQsIDExLCAyMywgMjEsIDE5OCwgMTEsIDIzLCAyMSwgMTk1LCAxMSwgMjMsIDIxLCAyMDAsIDExLCAKLSAgICAxMzksIDIxLCAyMTAsIDg2LCAxMSwgMTM5LCAyMSwgMTEwLCAxMSwgMTM5LCAyMSwgMTA1LCAxMSwgMTM5LCAyMSwgMTU4LCAKLSAgICAxMSwgMTM5LCAyMSwgMTYxLCAxMSwgMTM5LCAyMSwgMTg5LCAxMSwgMTM5LCAyMSwgMTk0LCAxMSwgMTM5LCAyMSwgMTk4LCAKLSAgICAxMSwgMTM5LCAyMSwgMTk1LCAxMSwgMTM5LCAyMSwgMjAwLCAxMSwgMzUsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIxLCAxMTAsIAotICAgIDExLCAzNSwgMjEsIDEwNSwgMTEsIDM1LCAyMSwgMTU4LCAxMSwgMzUsIDIxLCAxNjEsIDExLCAzNSwgMjEsIDE4OSwgMTEsIAotICAgIDM1LCAyMSwgMTk0LCAxMSwgMzUsIDIxLCAxOTgsIDExLCAzNSwgMjEsIDE5NSwgMTEsIDM1LCAyMSwgMjAwLCAxMSwgMzUsIAotICAgIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMywgMjEsIDExMCwgMTEsIDM1LCAyMywgMjEsIDEwNSwgMTEsIDM1LCAyMywgCi0gICAgMjEsIDE1OCwgMTEsIDM1LCAyMywgMjEsIDE2MSwgMTEsIDM1LCAyMywgMjEsIDE4OSwgMTEsIDM1LCAyMywgMjEsIDE5NCwgCi0gICAgMTEsIDM1LCAyMywgMjEsIDE5OCwgMTEsIDM1LCAyMywgMjEsIDE5NSwgMTEsIDM1LCAyMywgMjEsIDIwMCwgMTEsIDIzMCwgCi0gICAgMTM4LCAyMSwgMjEwLCA4NiwgMTEsIDIzMCwgMTM4LCAyMSwgMTEwLCAxMSwgMjMwLCAxMzgsIDIxLCAxMDUsIDExLCAyMzAsIAotICAgIDEzOCwgMjEsIDE1OCwgMTEsIDIzMCwgMTM4LCAyMSwgMTYxLCAxMSwgMjMwLCAxMzgsIDIxLCAxODksIDExLCAyMzAsIDEzOCwgCi0gICAgMjEsIDE5NCwgMTEsIDIzMCwgMTM4LCAyMSwgMTk4LCAxMSwgMjMwLCAxMzgsIDIxLCAxOTUsIDExLCAyMzAsIDEzOCwgMjEsIAotICAgIDIwMCwgMTAsIDExLCAyNTQsIDE3MCwgMTAsIDExLCAyNTIsIDU0LCAxMCwgMTEsIDIzNSwgMTIzLCAxMCwgMTEsIDI0OCwgCi0gICAgMTk1LCAxMCwgMTEsIDIxMiwgMzAsIDEwLCAxMSwgMjEwLCAxMDgsIDEwLCAxMSwgMjQyLCAzNywgMTAsIDExLCAyMTcsIDgwLCAKLSAgICAxMCwgMTEsIDIxMSwgNDMsIDEwLCAxMSwgMjM0LCAyNTAsIDEwLCAxMSwgMjMzLCAxMDIsIDEwLCAxMSwgMjMxLCA3OCwgMTAsIAotICAgIDExLCAyMjgsIDYyLCAxMCwgMTEsIDIyMSwgMTY2LCAxMCwgMTEsIDI1NCwgMTk2LCAxMCwgMTEsIDI0NCwgMTQyLCAxMCwgCi0gICAgMTEsIDIyMiwgMjYsIDEwLCAxMSwgMjI0LCA4MSwgMTAsIDExLCAyMjMsIDk1LCAxMCwgMTEsIDIyMCwgNTksIDEwLCAxMSwgCi0gICAgMjE3LCA3LCAxMCwgMTEsIDIxNiwgMTkyLCAxMCwgMTEsIDIzNCwgMTI5LCAxMCwgMTEsIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDI0OCwgMjE2LCAxMCwgMTEsIDIxMCwgMTExLCAxMCwgMTEsIDI0MiwgMjQ0LCAxMCwgMTEsIDI0NywgMTE5LCAyNTIsIDU0LCAKLSAgICAxMCwgMTEsIDI0NywgMTE5LCAyMjgsIDYyLCAxMCwgMTEsIDI0NywgMTE5LCAyNDQsIDE0MiwgMTAsIDExLCAyNDcsIDExOSwgCi0gICAgMjI0LCA4MSwgMTAsIDExLCA2NSwgMjUyLCA1NCwgMTAsIDExLCA2NSwgMjM1LCAxMjMsIDEwLCAxMSwgNjUsIDI0MSwgMjE4LCAKLSAgICAxMCwgMTEsIDY1LCAyNDIsIDM3LCAxMCwgMTEsIDY1LCAyMTEsIDQzLCAxMCwgMTEsIDY1LCAyMzQsIDI1MCwgMTAsIDExLCAKLSAgICA2NSwgMjMzLCAxMDIsIDEwLCAxMSwgNjUsIDIzMSwgNzgsIDEwLCAxMSwgNjUsIDIyOCwgNjIsIDEwLCAxMSwgNjUsIDIyMSwgCi0gICAgMTY2LCAxMCwgMTEsIDY1LCAyNTQsIDE5NiwgMTAsIDExLCA2NSwgMjQ0LCAxNDIsIDEwLCAxMSwgNjUsIDIyMiwgMjYsIDEwLCAKLSAgICAxMSwgNjUsIDIyNCwgODEsIDEwLCAxMSwgNjUsIDIyMCwgNTksIDEwLCAxMSwgNjUsIDIxNywgNywgMTAsIDExLCA2NSwgCi0gICAgMjE2LCAxOTIsIDEwLCAxMSwgNjUsIDIzNCwgMTI5LCAxMCwgMTEsIDY1LCAyNDgsIDIxNiwgMTAsIDExLCA2NSwgMjQyLCAKLSAgICAyNDQsIDEwLCAxMSwgMjE3LCA3NiwgMjM1LCAxMjMsIDEwLCAxMSwgMjE3LCA3NiwgMjQyLCAzNywgMTAsIDExLCAyMTcsIAotICAgIDc2LCAyMTEsIDQzLCAxMCwgMTEsIDIxNywgNzYsIDIzMywgMTAyLCAxMCwgMTEsIDIxNywgNzYsIDIyOCwgNjIsIDEwLCAxMSwgCi0gICAgMjE3LCA3NiwgMjIxLCAxNjYsIDEwLCAxMSwgMjE3LCA3NiwgMjU0LCAxOTYsIDEwLCAxMSwgMjE3LCA3NiwgMjIyLCAyNiwgCi0gICAgMTAsIDExLCAyMTcsIDc2LCAyMjQsIDgxLCAxMCwgMTEsIDIxNywgNzYsIDIyMCwgNTksIDEwLCAxMSwgMjE3LCA3NiwgMjM0LCAKLSAgICAxMjksIDEwLCAxMSwgMjE3LCA3NiwgMjQ4LCAyMTYsIDEwLCAxMSwgMjE3LCA3NiwgMjQyLCAyNDQsIDEwLCAxMSwgMjE3LCAKLSAgICA3NiwgMjQ3LCAxMTksIDIyOCwgNjIsIDEwLCAxMSwgMjE3LCA3NiwgMjQ3LCAxMTksIDIyNCwgODEsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDI1MiwgNTQsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNSwgMTIzLCAxMCwgMTEsIDIxOCwgMTEwLCAyNDEsIDIxOCwgMTAsIAotICAgIDExLCAyMTgsIDExMCwgMjQyLCAzNywgMTAsIDExLCAyMTgsIDExMCwgMjE3LCA4MCwgMTAsIDExLCAyMTgsIDExMCwgMjExLCAKLSAgICA0MywgMTAsIDExLCAyMTgsIDExMCwgMjM0LCAyNTAsIDEwLCAxMSwgMjE4LCAxMTAsIDIzMSwgNzgsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDIyOCwgNjIsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMSwgMTY2LCAxMCwgMTEsIDIxOCwgMTEwLCAyNTQsIDE5NiwgMTAsIAotICAgIDExLCAyMTgsIDExMCwgMjQ0LCAxNDIsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMiwgMjYsIDEwLCAxMSwgMjE4LCAxMTAsIDIyNCwgCi0gICAgODEsIDEwLCAxMSwgMjE4LCAxMTAsIDIyMCwgNTksIDEwLCAxMSwgMjE4LCAxMTAsIDIxNywgNywgMTAsIDExLCAyMTgsIAotICAgIDExMCwgMjE2LCAxOTIsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNCwgMTI5LCAxMCwgMTEsIDIxOCwgMTEwLCAyNDgsIDIxNiwgCi0gICAgMTAsIDExLCAyMTgsIDExMCwgMjEwLCAxMTEsIDEwLCAxMSwgMjE4LCAxMTAsIDI0MiwgMjQ0LCAxMCwgMTEsIDIxOCwgMTEwLCAKLSAgICAyNDcsIDExOSwgMjUyLCA1NCwgMTAsIDExLCAyMTgsIDExMCwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMTEsIDIzMiwgCi0gICAgMTIyLCAyNTQsIDE3MCwgMTAsIDExLCAyMzIsIDEyMiwgMjUyLCA1NCwgMTAsIDExLCAyMzIsIDEyMiwgMjM1LCAxMjMsIDEwLCAKLSAgICAxMSwgMjMyLCAxMjIsIDI0OCwgMTk1LCAxMCwgMTEsIDIzMiwgMTIyLCAyNDEsIDIxOCwgMTAsIDExLCAyMzIsIDEyMiwgCi0gICAgMjEyLCAzMCwgMTAsIDExLCAyMzIsIDEyMiwgMjEwLCAxMDgsIDEwLCAxMSwgMjMyLCAxMjIsIDI0MiwgMzcsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDIxNywgODAsIDEwLCAxMSwgMjMyLCAxMjIsIDIxMSwgNDMsIDEwLCAxMSwgMjMyLCAxMjIsIDIzMywgMTAyLCAKLSAgICAxMCwgMTEsIDIzMiwgMTIyLCAyMzEsIDc4LCAxMCwgMTEsIDIzMiwgMTIyLCAyMjgsIDYyLCAxMCwgMTEsIDIzMiwgMTIyLCAKLSAgICAyMjEsIDE2NiwgMTAsIDExLCAyMzIsIDEyMiwgMjU0LCAxOTYsIDEwLCAxMSwgMjMyLCAxMjIsIDI0NCwgMTQyLCAxMCwgMTEsIAotICAgIDIzMiwgMTIyLCAyMjIsIDI2LCAxMCwgMTEsIDIzMiwgMTIyLCAyMjQsIDgxLCAxMCwgMTEsIDIzMiwgMTIyLCAyMjMsIDk1LCAKLSAgICAxMCwgMTEsIDIzMiwgMTIyLCAyMjAsIDU5LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTcsIDcsIDEwLCAxMSwgMjMyLCAxMjIsIAotICAgIDIxNiwgMTkyLCAxMCwgMTEsIDIzMiwgMTIyLCAyMzQsIDEyOSwgMTAsIDExLCAyMzIsIDEyMiwgMjE2LCAyMDIsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDI0OCwgMjE2LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTAsIDExMSwgMTAsIDExLCAyMzIsIDEyMiwgMjQyLCAKLSAgICAyNDQsIDEwLCAxMSwgMTM5LCAyNTIsIDU0LCAxMCwgMTEsIDEzOSwgMjM1LCAxMjMsIDEwLCAxMSwgMTM5LCAyNDgsIDE5NSwgCi0gICAgMTAsIDExLCAxMzksIDIxMiwgMzAsIDEwLCAxMSwgMTM5LCAyMTAsIDEwOCwgMTAsIDExLCAxMzksIDI0MiwgMzcsIDEwLCAKLSAgICAxMSwgMTM5LCAyMTcsIDgwLCAxMCwgMTEsIDEzOSwgMjExLCA0MywgMTAsIDExLCAxMzksIDIzMywgMTAyLCAxMCwgMTEsIAotICAgIDEzOSwgMjMxLCA3OCwgMTAsIDExLCAxMzksIDIyOCwgNjIsIDEwLCAxMSwgMTM5LCAyMjEsIDE2NiwgMTAsIDExLCAxMzksIAotICAgIDI1NCwgMTk2LCAxMCwgMTEsIDEzOSwgMjQ0LCAxNDIsIDEwLCAxMSwgMTM5LCAyMjIsIDI2LCAxMCwgMTEsIDEzOSwgMjI0LCAKLSAgICA4MSwgMTAsIDExLCAxMzksIDIyMywgOTUsIDEwLCAxMSwgMTM5LCAyMjAsIDU5LCAxMCwgMTEsIDEzOSwgMjE3LCA3LCAxMCwgCi0gICAgMTEsIDEzOSwgMjE2LCAxOTIsIDEwLCAxMSwgMTM5LCAyMzQsIDEyOSwgMTAsIDExLCAxMzksIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDEzOSwgMjQ4LCAyMTYsIDEwLCAxMSwgMTM5LCAyMTAsIDExMSwgMTAsIDExLCAxMzksIDI0MiwgMjQ0LCAxMCwgMTEsIDIyNiwgCi0gICAgMTY4LCA2NiwgMiwgMTIyLCAyLCAyMTcsIDQzLCAxMCwgMTEsIDIyNiwgMTY4LCAxMjIsIDIsIDI0OCwgMTk1LCAyMzEsIAotICAgIDIwNSwgODYsIDI0NSwgMjIwLCAyMTEsIDIzOSwgMjMxLCAyMDUsIDg2LCAyMTksIDI4LCAyMTEsIDIzOSwgMjMxLCAyMDUsIAotICAgIDg2LCAyMTIsIDksIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIyOCwgNTYsIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIyMywgCi0gICAgMTExLCAyNDYsIDk2LCAyMzEsIDIwNSwgODYsIDI0MiwgMTI3LCAyNDYsIDk2LCAyMzEsIDIwNSwgODYsIDcxLCAyNDYsIDk2LCAKLSAgICAyMzEsIDIwNSwgODYsIDEyMywgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDExMywgNjQsIDI1MCwgMTQxLCAyMzEsIAotICAgIDIwNSwgODYsIDEzNCwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDI0NCwgMTEsIDY0LCAyNTAsIDE0MSwgMjMxLCAKLSAgICAyMDUsIDg2LCAyNDQsIDgxLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTAsIDE0MSwgCi0gICAgMjMxLCAyMDUsIDg2LCAyMjAsIDEyMiwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDI0NSwgMTkzLCA2NCwgMjUwLCAKLSAgICAxNDEsIDIzMSwgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAxMjMsIDY0LCAyNTIsIAotICAgIDE1MywgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAxMzQsIDY0LCAyNTIsIDE1MywgCi0gICAgMjMxLCAyMDUsIDg2LCAyNDQsIDExLCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MiwgMTUzLCAKLSAgICAyMzEsIDIwNSwgODYsIDIxOSwgMTI1LCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjIwLCAxMjIsIDY0LCAyNTIsIAotICAgIDE1MywgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDIyOCwgMjAwLCA2NCwgCi0gICAgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMTIzLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTAsIDM0LCAKLSAgICAyMzEsIDIwNSwgODYsIDEzNCwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjQ0LCAxMSwgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTAsIDM0LCAyMzEsIAotICAgIDIwNSwgODYsIDIyMCwgMTIyLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDIyNSwgMjUsIDIzMSwgMjA1LCA4NiwgMjI2LCAKLSAgICAxNTYsIDIzMSwgMjA1LCA4NiwgMjUyLCAxNTQsIDIzMSwgMjA1LCA4NiwgMjUwLCA3MCwgMjMxLCAyMDUsIDg2LCAyMTgsIAotICAgIDIzOSwgMjMxLCAyMDUsIDg2LCAyMTgsIDM5LCAyMzEsIDIwNSwgODYsIDI1MywgMTc5LCAyMzEsIDIwNSwgODYsIDIxMSwgCi0gICAgMjMyLCAyMzEsIDIwNSwgODYsIDIzNSwgNjIsIDIzMSwgMjA1LCA4NiwgMjUyLCAxODQsIDEzMSwgODYsIDIwMywgMjUyLCAKLSAgICAxODQsIDEzMSwgODYsIDI0MSwgNDMsIDEzMSwgODYsIDI0MSwgNDIsIDEzMSwgODYsIDI0MSwgNDEsIDEzMSwgODYsIDI0MSwgCi0gICAgNDAsIDEzMSwgODYsIDI0MSwgMzksIDEzMSwgODYsIDI0MSwgMzgsIDEzMSwgODYsIDI0MSwgMzcsIDEzMSwgODYsIDI0MSwgCi0gICAgMzYsIDEzMSwgODYsIDI0MSwgMzUsIDEzMSwgODYsIDI0MSwgMzQsIDEzMSwgODYsIDI0MSwgMzMsIDEzMSwgODYsIDI0MSwgCi0gICAgMzIsIDEzMSwgODYsIDI0MSwgMzEsIDEzMSwgODYsIDI0MSwgMzAsIDEzMSwgODYsIDI0MSwgMjksIDEzMSwgODYsIDI0MSwgCi0gICAgMjgsIDEzMSwgODYsIDI0MSwgMjcsIDEzMSwgODYsIDI0MSwgMjYsIDEzMSwgODYsIDI0MSwgMjUsIDEzMSwgODYsIDI0MSwgCi0gICAgMjQsIDEzMSwgODYsIDI0MSwgMjMsIDEzMSwgODYsIDI0MSwgMjIsIDEzMSwgODYsIDI0MSwgMjEsIDEzMSwgODYsIDI0MSwgCi0gICAgMjAsIDEzMSwgODYsIDI0MSwgMTksIDEzMSwgODYsIDI0MSwgMTgsIDEzMSwgODYsIDI0MSwgMTcsIDEzMSwgODYsIDI0MSwgCi0gICAgMTYsIDEzMSwgODYsIDI0MSwgMTUsIDEzMSwgODYsIDI0MSwgMTQsIDEzMSwgODYsIDI0MSwgMTMsIDEzMSwgODYsIDI0MSwgCi0gICAgMTIsIDEzMSwgODYsIDI0MSwgMTEsIDEzMSwgODYsIDI0MSwgMTAsIDEzMSwgODYsIDI0MSwgOSwgMTMxLCA4NiwgMjQxLCA4LCAKLSAgICAxMzEsIDg2LCAyNDEsIDcsIDEzMSwgODYsIDI0MSwgNiwgMTMxLCA4NiwgMjQxLCA1LCAxMzEsIDg2LCAyNDEsIDQsIDEzMSwgCi0gICAgODYsIDI0MSwgMywgMTMxLCA4NiwgMjQxLCAyLCAxMzEsIDg2LCAyNDEsIDEsIDEzMSwgODYsIDI0MSwgMCwgMTMxLCA4NiwgCi0gICAgMjQwLCAyNTUsIDEzMSwgODYsIDI0MCwgMjU0LCAxMzEsIDg2LCAyNDAsIDI1MywgMTMxLCA4NiwgMjQwLCAyNTIsIDEzMSwgCi0gICAgODYsIDI0MCwgMjUxLCAxMzEsIDg2LCA2NywgMjUyLCAxODQsIDEzMSwgODYsIDIxMywgMjM4LCAxMzEsIDg2LCAyMTMsIAotICAgIDIzNywgMTMxLCA4NiwgMjEzLCAyMzYsIDEzMSwgODYsIDIxMywgMjM1LCAxMzEsIDg2LCAyMTMsIDIzNCwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMzMsIDEzMSwgODYsIDIxMywgMjMyLCAxMzEsIDg2LCAyMTMsIDIzMSwgMTMxLCA4NiwgMjEzLCAyMzAsIDEzMSwgCi0gICAgODYsIDIxMywgMjI5LCAxMzEsIDg2LCAyMTMsIDIyOCwgMTMxLCA4NiwgMjEzLCAyMjcsIDEzMSwgODYsIDIxMywgMjI2LCAKLSAgICAxMzEsIDg2LCAyMTMsIDIyNSwgMTMxLCA4NiwgMjEzLCAyMjQsIDEzMSwgODYsIDIxMywgMjIzLCAxMzEsIDg2LCAyMTMsIAotICAgIDIyMiwgMTMxLCA4NiwgMjEzLCAyMjEsIDEzMSwgODYsIDIxMywgMjIwLCAxMzEsIDg2LCAyMTMsIDIxOSwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMTgsIDEzMSwgODYsIDIxMywgMjE3LCAxMzEsIDg2LCAyMTMsIDIxNiwgMTMxLCA4NiwgMjEzLCAyMTUsIDEzMSwgCi0gICAgODYsIDIxMywgMjE0LCAxMzEsIDg2LCAyMTMsIDIxMywgMTMxLCA4NiwgMjEzLCAyMTIsIDEzMSwgODYsIDIxMywgMjExLCAKLSAgICAxMzEsIDg2LCAyMTMsIDIxMCwgMTMxLCA4NiwgMjEzLCAyMDksIDEzMSwgODYsIDIxMywgMjA4LCAxMzEsIDg2LCAyMTMsIAotICAgIDIwNywgMTMxLCA4NiwgMjEzLCAyMDYsIDEzMSwgODYsIDIxMywgMjA1LCAxMzEsIDg2LCAyMTMsIDIwNCwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMDMsIDEzMSwgODYsIDIxMywgMjAyLCAxMzEsIDg2LCAyMTMsIDIwMSwgMTMxLCA4NiwgMjEzLCAyMDAsIDEzMSwgCi0gICAgODYsIDIxMywgMTk5LCAxMzEsIDg2LCAyMTMsIDE5OCwgMTMxLCA4NiwgMjEzLCAxOTcsIDEzMSwgODYsIDIxMywgMTk2LCAKLSAgICAxMzEsIDg2LCAyMTMsIDE5NSwgMTMxLCA4NiwgMjEzLCAxOTQsIDEzMSwgODYsIDIxMywgMTkzLCAxMzEsIDg2LCAyMTMsIAotICAgIDE5MiwgMTMxLCA4NiwgMjEzLCAxOTEsIDEzMSwgODYsIDIxMywgMTkwLCAyMjUsIDMzLCAyNTAsIDI0MywgMjUyLCAxODQsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgMjE5LCAKLSAgICAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgCi0gICAgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgODEsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjE5LCAKLSAgICAxMjUsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjQ1LCAxOTMsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAyMTksIDE1LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjE2LCAyNDgsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM1LCAxMzksIAotICAgIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMjQsIDE1LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAKLSAgICAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAyNDEsIDIyNSwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAxMSwgNjQsIAotICAgIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgMjE5LCAxMjUsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQxLCAyMjUsIDIyNSwgCi0gICAgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAKLSAgICAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMzUsIDEzOSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0MSwgMjI1LCAyMjUsIAotICAgIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIDI0MSwgCi0gICAgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAKLSAgICAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAKLSAgICAxMSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjE5LCAxMjUsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQ3LCAyNDcsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIAotICAgIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyMzUsIDEzOSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0NywgMjQ3LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIAotICAgIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgODUsIDIzNSwgNjIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAKLSAgICAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCAKLSAgICA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyNDQsIDgxLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTksIDEyNSwgNjQsIDI0OSwgMjQyLCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NSwgMTkzLCAKLSAgICA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjE2LCAyNDgsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNSwgMTM5LCA2NCwgMjQ5LCAyNDIsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjQsIDE1LCA2NCwgCi0gICAgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICA3MSwgMjM1LCA2MiwgMjEsIDIxMCwgODcsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIxMCwgODcsIDI0OSwgMjE5LCAyMSwgCi0gICAgMTIzLCAyNDksIDIxOSwgMjEsIDExMywgMjQ5LCAyMTksIDIxLCAxMzQsIDI0OSwgMjE5LCAyMSwgMjQ0LCAxMSwgMjQ5LCAKLSAgICAyMTksIDIxLCAyNDQsIDgxLCAyNDksIDIxOSwgMjEsIDIxOSwgMTI1LCAyNDksIDIxOSwgMjEsIDIyMCwgMTIyLCAyNDksIAotICAgIDIxOSwgMjEsIDI0NSwgMTkzLCAyNDksIDIxOSwgMjEsIDIyOCwgMjAwLCAyNDksIDIxOSwgODgsIDcsIDYsIDEsIDYxLCA4OCwgCi0gICAgNywgNiwgMSwgMjUzLCAxNTgsIDg4LCA3LCA2LCAxLCAyNTEsIDY2LCA4OCwgNywgNiwgMSwgMjQ5LCA2MCwgODgsIDcsIDYsIAotICAgIDEsIDc1LCA4OCwgNywgNiwgMSwgMjQ1LCA2LCA4OCwgNywgNiwgMSwgMjQzLCAyMDIsIDg4LCA3LCA2LCAxLCAyNDIsIDYwLCAKLSAgICA4OCwgNywgNiwgMSwgNzMsIDg4LCA3LCA2LCAxLCAyMzUsIDE0NCwgODgsIDcsIDYsIDEsIDIzNSwgMjMsIDg4LCA3LCA2LCAKLSAgICAxLCAxNTYsIDg4LCA3LCA2LCAxLCAxOTMsIDg4LCA3LCA2LCAxLCAyMzAsIDI1LCA4OCwgNywgNiwgMSwgNzYsIDg4LCA3LCAKLSAgICA2LCAxLCAyMjYsIDEwNSwgODgsIDcsIDYsIDEsIDIyNCwgOTYsIDg4LCA3LCA2LCAxLCAxNTMsIDg4LCA3LCA2LCAxLCAyMjIsIAotICAgIDkxLCA4OCwgNywgNiwgMSwgMjE3LCAxNTIsIDg4LCA3LCA2LCAxLCA3MCwgODgsIDcsIDYsIDEsIDIxNCwgMTA1LCA4OCwgNywgCi0gICAgNiwgMSwgMjEyLCA5OCwgODgsIDcsIDYsIDEsIDIxMSwgMTc4LCA4OCwgNywgNiwgMSwgMjExLCAxMTcsIDg4LCA3LCA2LCAxLCAKLSAgICAyMTAsIDE1OSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgNywgNiwgMSwgMjIyLCA5MSwgMzcsIDMyLCA3LCA2LCAxLCAKLSAgICAyNTEsIDY2LCAzNywgMzIsIDcsIDYsIDEsIDE1MywgMzcsIDI1MCwgMTkxLCAzNywgMjExLCAxODAsIDkyLCA3LCA2LCAxLCAKLSAgICA2MSwgOTIsIDcsIDYsIDEsIDI1MywgMTU4LCA5MiwgNywgNiwgMSwgMjUxLCA2NiwgOTIsIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDkyLCA3LCA2LCAxLCA3NSwgOTIsIDcsIDYsIDEsIDI0NSwgNiwgOTIsIDcsIDYsIDEsIDI0MywgMjAyLCA5MiwgNywgNiwgMSwgCi0gICAgMjQyLCA2MCwgOTIsIDcsIDYsIDEsIDczLCA5MiwgNywgNiwgMSwgMjM1LCAxNDQsIDkyLCA3LCA2LCAxLCAyMzUsIDIzLCAKLSAgICA5MiwgNywgNiwgMSwgMTU2LCA5MiwgNywgNiwgMSwgMTkzLCA5MiwgNywgNiwgMSwgMjMwLCAyNSwgOTIsIDcsIDYsIDEsIAotICAgIDc2LCA5MiwgNywgNiwgMSwgMjI2LCAxMDUsIDkyLCA3LCA2LCAxLCAyMjQsIDk2LCA5MiwgNywgNiwgMSwgMTUzLCA5MiwgNywgCi0gICAgNiwgMSwgMjIyLCA5MSwgOTIsIDcsIDYsIDEsIDIxNywgMTUyLCA5MiwgNywgNiwgMSwgNzAsIDkyLCA3LCA2LCAxLCAyMTQsIAotICAgIDEwNSwgOTIsIDcsIDYsIDEsIDIxMiwgOTgsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTE3LCAKLSAgICA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDkyLCAyNDAsIDIwMSwgOTIsIDIzMCwgNDksIDkyLCAyMjEsIDE4MywgOTIsIDIxOCwgCi0gICAgMjI2LCA5MiwgMjI0LCAyMTgsIDkyLCAyMTIsIDIzLCAxNTIsIDM3LCA3LCA2LCAxLCA2MSwgMTUyLCAzNywgNywgNiwgMSwgCi0gICAgMjUzLCAxNTgsIDE1MiwgMzcsIDcsIDYsIDEsIDI1MSwgNjYsIDE1MiwgMzcsIDcsIDYsIDEsIDI0OSwgNjAsIDE1MiwgMzcsIAotICAgIDcsIDYsIDEsIDc1LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDUsIDYsIDE1MiwgMzcsIDcsIDYsIDEsIDI0MywgMjAyLCAxNTIsIAotICAgIDM3LCA3LCA2LCAxLCAyNDIsIDYwLCAxNTIsIDM3LCA3LCA2LCAxLCA3MywgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAxNDQsIAotICAgIDE1MiwgMzcsIDcsIDYsIDEsIDIzNSwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDE1NiwgMTUyLCAzNywgNywgNiwgMSwgMTkzLCAKLSAgICAxNTIsIDM3LCA3LCA2LCAxLCAyMzAsIDI1LCAxNTIsIDM3LCA3LCA2LCAxLCA3NiwgMTUyLCAzNywgNywgNiwgMSwgMjI2LCAKLSAgICAxMDUsIDE1MiwgMzcsIDcsIDYsIDEsIDIyNCwgOTYsIDE1MiwgMzcsIDcsIDYsIDEsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgCi0gICAgMjIyLCA5MSwgMTUyLCAzNywgNywgNiwgMSwgMjE3LCAxNTIsIDE1MiwgMzcsIDcsIDYsIDEsIDcwLCAxNTIsIDM3LCA3LCA2LCAKLSAgICAxLCAyMTQsIDEwNSwgMTUyLCAzNywgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgCi0gICAgMzcsIDcsIDYsIDEsIDIxMSwgMTE3LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjIzLCAxNTcsIDIzMSwgOTcsIDUwLCAKLSAgICAyMjMsIDE1NywgMjMxLCA5NCwgNTAsIDE1MiwgOTIsIDcsIDYsIDEsIDYxLCAxNTIsIDkyLCA3LCA2LCAxLCAyNTMsIDE1OCwgCi0gICAgMTUyLCA5MiwgNywgNiwgMSwgMjUxLCA2NiwgMTUyLCA5MiwgNywgNiwgMSwgMjQ5LCA2MCwgMTUyLCA5MiwgNywgNiwgMSwgCi0gICAgNzUsIDE1MiwgOTIsIDcsIDYsIDEsIDI0NSwgNiwgMTUyLCA5MiwgNywgNiwgMSwgMjQzLCAyMDIsIDE1MiwgOTIsIDcsIDYsIAotICAgIDEsIDI0MiwgNjAsIDE1MiwgOTIsIDcsIDYsIDEsIDczLCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIDE0NCwgMTUyLCA5MiwgNywgCi0gICAgNiwgMSwgMjM1LCAyMywgMTUyLCA5MiwgNywgNiwgMSwgMTU2LCAxNTIsIDkyLCA3LCA2LCAxLCAxOTMsIDE1MiwgOTIsIDcsIAotICAgIDYsIDEsIDIzMCwgMjUsIDE1MiwgOTIsIDcsIDYsIDEsIDc2LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwNSwgMTUyLCA5MiwgCi0gICAgNywgNiwgMSwgMjI0LCA5NiwgMTUyLCA5MiwgNywgNiwgMSwgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCAyMjIsIDkxLCAxNTIsIAotICAgIDkyLCA3LCA2LCAxLCAyMTcsIDE1MiwgMTUyLCA5MiwgNywgNiwgMSwgNzAsIDE1MiwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCAKLSAgICAxNTIsIDkyLCA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCA5MiwgNywgNiwgMSwgCi0gICAgMjExLCAxMTcsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMCwgMTU5LCAyNDksIDEyOCwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAKLSAgICAxMDUsIDE1MiwgOTIsIDI0MCwgMTEzLCAxNTIsIDkyLCAxOTAsIDE1MiwgOTIsIDIwNiwgMTUyLCA5MiwgMjU1LCAyNSwgCi0gICAgMTUyLCA5MiwgMjEyLCAyMywgNDIsIDI0NywgMTY0LCA5MiwgMjUwLCAyMywgOTIsIDI0OSwgMTcwLCA5MiwgMjQzLCAyNTIsIAotICAgIDkyLCAyNDAsIDEwNSwgOTIsIDIyOSwgODYsIDkyLCAyMjksIDc5LCA5MiwgMjI2LCAyMTQsIDkyLCAyMTksIDM1LCA5MiwgCi0gICAgMTIwLCAyLCAyNDUsIDMxLCA3OCwgOTIsIDIxMywgMTE5LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA2MSwgMjIzLCAKLSAgICAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjUzLCAxNTgsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI1MSwgNjYsIDIyMywgCi0gICAgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI0OSwgNjAsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDc1LCAyMjMsIDEwMywgCi0gICAgMjM1LCAyMzksIDE2LCAxLCAyNDUsIDYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI0MywgMjAyLCAyMjMsIDEwMywgCi0gICAgMjM1LCAyMzksIDE2LCAxLCAyNDIsIDYwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3MywgMjIzLCAxMDMsIDIzNSwgCi0gICAgMjM5LCAxNiwgMSwgMjM1LCAxNDQsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIzNSwgMjMsIDIyMywgMTAzLCAyMzUsIAotICAgIDIzOSwgMTYsIDEsIDE1NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMTkzLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAKLSAgICAxLCAyMzAsIDI1LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgCi0gICAgMjI2LCAxMDUsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIyNCwgOTYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIAotICAgIDE1MywgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjIyLCA5MSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjE3LCAKLSAgICAxNTIsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDcwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTQsIDEwNSwgCi0gICAgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjEyLCA5OCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjExLCAxNzgsIAotICAgIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMSwgMTE3LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTAsIDE1OSwgCi0gICAgNDIsIDE0MSwgMjQxLCA2MywgOTIsIDU2LCAyMzQsIDE4LCA5MiwgNTYsIDIwNiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDUwLCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTQsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2MiwgOTIsIDU2LCAyNDgsIDkwLCA5MiwgCi0gICAgOSwgMjE0LCAxNzcsIDIzOCwgNjksIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI4LCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2OCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIAotICAgIDQyLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0NCwgOTIsIDksIDIxNCwgMTc3LCAKLSAgICAyMzgsIDY1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTEsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NywgOTIsIDksIDIxNCwgCi0gICAgMTc3LCAyMzgsIDQzLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyOSwgOTIsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDM0LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjcsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NywgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzcsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAKLSAgICA0OCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNzIsIDkyLCA5LCAyMTQsIDE3NywgCi0gICAgMjM4LCA3MSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTIsIDkyLCA5LCAyMTQsIAotICAgIDE3NywgMjM4LCA3MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYxLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDcsIDkyLCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCAyNiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzEsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzMCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgCi0gICAgMzgsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQxLCA5MiwgOSwgMjE0LCAxNzcsIAotICAgIDIzOCwgMzMsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU4LCAyMTYsIDYsIDIyMCwgCi0gICAgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCAzOSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNzEsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDY5LCAyMTYsIDYsIAotICAgIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA1MywgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgMzYsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDQ5LCAyMTYsIAotICAgIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCAzMiwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgNjMsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDQ1LCAzNywgCi0gICAgMTU0LCAyNTQsIDI0NSwgMzcsIDE1NCwgMjU1LCAxMiwgMjQ5LCA3MSwgMjQ0LCA0MiwgMjUwLCAwLCAyMTQsIDE5NCwgMjI4LCAKLSAgICAyMTMsIDIsIDIxOCwgMTUzLCAyMTgsIDMzLCAxMTcsIDIzMCwgMTE0LCAyMTgsIDMyLCAyNTAsIDI2LCAyNTMsIDIwNywgCi0gICAgMjQ2LCA1NCwgMjE4LCAzMSwgMTE3LCAyNTEsIDExOCwgMjIzLCAxNTgsIDI1MSwgMTQwLCAyNTMsIDIwNywgMjI4LCAyMTIsIAotICAgIDIxMiwgNDEsIDIxMiwgMzUsIDIxMywgMTMxLCAyMzAsIDE5NSwgMjEyLCAyNSwgMjQ1LCAyMjQsIDI0MiwgMTgxLCAyNDUsIAotICAgIDQ1LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI1NCwgMTI4LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI1MywgMjI1LCAyNDIsIDE4MSwgCi0gICAgMiwgMjMxLCA1MSwgMTY2LCAyMzAsIDEyOSwgODcsIDIxMiwgMjcsIDI0OSwgMTM3LCAyMzAsIDEyOSwgODcsIDI0NCwgOTIsIAotICAgIDIyNCwgMjIsIDIzMCwgMTI5LCA4NywgMjEyLCAyNywgMjQyLCAyMTAsIDIzMCwgMTI5LCA4NywgMjQzLCAyMjksIDIzMCwgCi0gICAgMTI5LCA4NywgMjEyLCA1MiwgMjQyLCAyMTAsIDIzMCwgMTI5LCA4NywgMjMzLCA4MCwgMjI0LCAyMiwgMjMwLCAxMjksIDg3LCAKLSAgICAyMTIsIDUyLCAyNDksIDEzNywgMjMwLCAxMjksIDg3LCAyNDksIDEzNywgMjMwLCAxMjgsIDE2NiwgMjMwLCAxMjksIDIsIAotICAgIDI0NCwgMTkwLCAyNDQsIDkyLCAyMjQsIDIyLCAyMzAsIDEyOSwgMiwgMjQ0LCAxOTAsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgCi0gICAgMTI5LCAyLCAyNDQsIDE5MCwgMjQzLCAyMjksIDIzMCwgMTI5LCAyLCAyNDQsIDE5MCwgMjE4LCAzOCwgMiwgMjQ0LCAxOTAsIAotICAgIDI0MiwgMTc5LCAyMTgsIDE1NiwgMjE5LCAyNTUsIDIxOCwgMTU2LCAyNTAsIDExNiwgMjIxLCAxNjgsIDI0NSwgMzksIDIxNSwgCi0gICAgMjM1LCAyNDgsIDg0LCAyMTUsIDIzNSwgMjI2LCA1OSwgMjE1LCAyMzUsIDI1MSwgMjcsIDIxNSwgMTA5LCAyNTAsIDExOCwgCi0gICAgMjUxLCAyMTAsIDIyMiwgMTkxLCAyNDEsIDE3OSwgMjE4LCAzNiwgMjUxLCAyMTAsIDI0NSwgMjI4LCA2NCwgMjMxLCAxOTQsIAotICAgIDI0NSwgMjI4LCA2NCwgMjIzLCAzMSwgMjQxLCAyMDQsIDI0NCwgMTEsIDIzMywgNTQsIDI0OSwgMjQ2LCAyMzEsIDE3MCwgCi0gICAgMjMzLCA1MywgMjQ0LCAxNzYsIDIzMywgNTMsIDIzMywgNTQsIDI0NCwgNDcsIDIzNiwgMCwgMjExLCAyMzksIDIzMCwgNTgsIAotICAgIDIxNiwgMzQsIDI1MywgMTkxLCAyNDIsIDE0MywgMjMxLCA2NywgMjEyLCAzOSwgMjE3LCA1NywgMjMzLCAyNiwgMjUyLCAKLSAgICAxNDksIDIyNSwgNjIsIDIyMywgMTExLCAyNTQsIDU0LCAyNDIsIDEyNywgMjU0LCA1NCwgMjI1LCAyMTcsIDIyNSwgMjE4LCAKLSAgICAyNTAsIDExOSwgMjE4LCAxMTQsIDI0MiwgMjMsIDIxOSwgOTAsIDY0LCAyMjUsIDQ0LCAyMzEsIDg3LCAyMjYsIDE5NywgCi0gICAgMjUxLCAxOTQsIDIyNCwgMjI5LCAyMzMsIDM2LCAyMjMsIDMyLCAyNDksIDE0MiwgMjIzLCAzMiwgMjUyLCAxNTksIDI0OSwgCi0gICAgMTczLCAyMjMsIDMxLCAyNDksIDk1LCAyMiwgMjIzLCAzMSwgMjE4LCAxNDEsIDI1MSwgMTY3LCAyMTksIDE0LCAyNTEsIAotICAgIDE1MSwgMjQzLCAyNTEsIDI0MywgMjQ3LCAyMjIsIDIwNywgMjE3LCAyNDYsIDIyNCwgMjMxLCAyNDgsIDE3NSwgMjI2LCAKLSAgICAyMzYsIDIxOCwgNywgMjQzLCAyNDgsIDIxOSwgMjMwLCAyNDQsIDkxLCAyNTEsIDIxLCAyLCAyMTcsIDIzOSwgMjQ4LCAzNSwgCi0gICAgMjE5LCA1MiwgMjQwLCAxMTIsIDI0OSwgMTQxLCAyMjAsIDcwLCAyNDAsIDExMSwgMjQwLCAxMTIsIDI0OSwgMTQxLCAyNDYsIAotICAgIDEwOCwgMjQ5LCAxNzIsIDI1MCwgODQsIDEzMCwgMjUwLCAyNTQsIDIzMiwgMTQxLCAyNDksIDg4LCAyNDEsIDU1LCAyMjQsIAotICAgIDIzMywgMjE5LCAyNDAsIDI1MiwgMzYsIDI1MSwgMTYzLCAyMjQsIDIzNCwgNjQsIDI0NCwgMzMsIDI0OSwgMTcxLCAyNDQsIAotICAgIDI0LCAyMiwgMjM0LCAzMiwgMjE3LCAxOSwgMjExLCAyMzAsIDI0MiwgMTMsIDIyMiwgMTIsIDI1MSwgMTc3LCAyMiwgMjQ5LCAKLSAgICAxMDIsIDIxMSwgMjM3LCAyNDIsIDE4NCwgMjQ5LCAyMzUsIDI0MiwgMTg0LCAyMTUsIDE5MywgMjQ2LCA5MCwgMjUyLCA2MiwgCi0gICAgMjMwLCA5MywgMjUwLCA3LCAyNTIsIDYyLCAyMzAsIDkyLCAyNTIsIDE4NywgMjUxLCAxNzYsIDIyMywgMzMsIDIxMSwgMjAxLCAKLSAgICAyMjQsIDE5NSwgMjUxLCAyMzUsIDI1MSwgMjAsIDIzNSwgMTM4LCAyNTAsIDc3LCAyMTUsIDIzNSwgMjQ0LCAxNjIsIDI1MCwgCi0gICAgNzYsIDI0NCwgOTQsIDI0NCwgOTUsIDIxOSwgMTIsIDI1MiwgMTU4LCAyMjUsIDI1MCwgMjI0LCAyNDQsIDI0OSwgMjA0LCAKLSAgICAyNTIsIDE1OSwgMjE3LCA1OSwgMjE1LCAyMzUsIDI0OSwgMTI4LCAyNDQsIDY3LCAyMjUsIDYzLCAyNDgsIDgxLCAyMzUsIAotICAgIDEzMSwgMjQ3LCAxMzEsIDI1MCwgMjMyLCAyMTgsIDExMywgMjExLCAyNDAsIDI1MCwgOTgsIDIzMCwgMTI5LCAyMTMsIDE2NCwgCi0gICAgMjUwLCAxNjIsIDIyMSwgMTk5LCAyMjEsIDIyNCwgMjQyLCAxNDgsIDI1MCwgMjUxLCAyNTAsIDIzMywgMjQwLCAyNDUsIAotICAgIDI0NCwgMTMwLCAyMTIsIDAsIDIyMiwgMjAwLCAyNDksIDIzNiwgMjQ0LCA4NiwgMjI1LCAyLCAyMiwgMjQ0LCA5MCwgMjMwLCAKLSAgICAyMjcsIDIzMCwgMTA4LCAyNTEsIDEwLCAyNTAsIDM5LCAyNDEsIDIzMiwgMjUzLCAyNDEsIDIyNiwgNjIsIDIxNiwgMTQsIAotICAgIDI0MSwgMjUxLCAyNTAsIDI5LCAyMTYsIDI0MiwgMjE2LCAxMTMsIDI1MCwgMjAsIDI1MSwgMjAyLCAyMjUsIDE3NywgMjUzLCAKLSAgICAyNDAsIDIxMywgMTcyLCAyNDMsIDExMCwgMjQ3LCAxOTcsIDI0MSwgMTU2LCAyMTksIDg0LCAyMzEsIDIzNCwgMjUxLCAyNDUsIAotICAgIDI0MywgMTExLCAyNDcsIDI0MCwgMjUxLCAxNjYsIDI0NCwgNTIsIDIyNSwgMzMsIDI1MCwgMjQxLCAyOCwgMjI4LCA0NywgCi0gICAgMjMwLCA4NSwgMjgsIDIyOCwgNDIsIDIyMSwgMjEyLCAyNDIsIDk5LCAyOCwgMjM0LCAxMzcsIDIxNSwgMTkwLCAyMTMsIAotICAgIDE1NCwgMjgsIDIyMSwgMTkyLCAyMjIsIDEyNCwgMjIwLCAxMSwgMiwgMjIxLCAyMjcsIDIxNiwgMjQ0LCAyMjMsIDE3OCwgCi0gICAgMjIsIDI1MiwgMTU5LCAyMTksIDEwNSwgMjIsIDIxOSwgMTA1LCAyNTEsIDE4NywgMjUyLCAxMjMsIDIyLCAyNDEsIDQ5LCAKLSAgICAyNTAsIDEyMCwgMjQ0LCA3MywgMjE5LCA2MywgMjIyLCAxMjUsIDIxOCwgMTIsIDIxNSwgMTk0LCAyNDAsIDI0NiwgMjIzLCAKLSAgICAxNzksIDI1NCwgMTI5LCAyNDQsIDMxLCAyMjIsIDEzNiwgMjQ0LCAzMSwgMjE3LCAyNDEsIDI0MCwgMjM1LCAyNTEsIDExOSwgCi0gICAgMjQwLCAyMzUsIDIsIDI0MywgOTQsIDIyNiwgMjI5LCAyNTEsIDExOSwgMjM1LCAxMzEsIDIyNCwgMjM5LCAyMjYsIDIyOCwgCi0gICAgMjQ1LCA0NCwgMjI0LCAyMzksIDIyNiwgMjI4LCAyNDAsIDI0NCwgMjUyLCAxNDUsIDI1MywgMTgxLCAyMTYsIDI1MiwgMjMxLCAKLSAgICAyMzQsIDI0MCwgMjQwLCAyMzIsIDExMSwgMjQwLCAyNDAsIDI0OSwgMTc2LCAyMTgsIDEyNSwgMjIxLCAxOTgsIDI0OCwgNDMsIAotICAgIDIxOCwgMTI1LCAyNDQsIDE4MCwgMjM1LCAxNDksIDIzMywgODksIDIzNSwgMTMxLCAyNTAsIDIyNiwgMjQ1LCA0NCwgMjUwLCAKLSAgICAyMjYsIDIyMywgMTQxLCAyMzAsIDExMiwgMjI2LCAxMTQsIDIxMiwgNDEsIDI1MSwgMTIzLCAyNDksIDE0NSwgMjE2LCAxMDYsIAotICAgIDIzMywgMTgsIDIyMywgMTgwLCAyNTAsIDIyNCwgMjQ2LCA5NiwgMjQ5LCAxMzUsIDIxMiwgMywgMjE5LCA3MCwgMjE5LCA2OCwgCi0gICAgMjQwLCAyNDUsIDIyMywgMTUzLCAyNDIsIDE3MCwgMjIwLCA1NywgMjMwLCAxNDUsIDIyMiwgMTk0LCAyNTAsIDEwOCwgMjQ3LCAKLSAgICAxMzYsIDIyNSwgNzMsIDI1MSwgMjAzLCAyNDUsIDE2OSwgMjI2LCAyMzgsIDIxOCwgMjUyLCAyMjAsIDUyLCAyNTEsIDEyMiwgCi0gICAgMjU0LCA5MiwgMjQxLCA1NCwgMjMzLCAxMjEsIDI1MiwgNjAsIDI0NCwgOTAsIDIxNSwgMTkzLCAyNDQsIDkwLCAyNTEsIAotICAgIDIwOSwgMjE1LCA5MSwgMjQxLCAyNDksIDI1MCwgMTA5LCAyNTIsIDE4NywgMjUwLCAxMDksIDI0MywgMjQyLCAyNTIsIDE4NywgCi0gICAgMjUwLCAxMDksIDI1MSwgMjM3LCAyMjUsIDE5NSwgMjM0LCAyNiwgMjI0LCAyNDgsIDI0NiwgODcsIDI1MSwgMTEsIDI1MiwgCi0gICAgMTc3LCAyNTEsIDExLCAyNDcsIDEzMCwgMjMwLCAxMTMsIDI0NCwgMTkwLCAyNDksIDE0NiwgMjQ0LCAxOTAsIDIxNiwgMTA3LCAKLSAgICAyNDQsIDE5MCwgMjIzLCAxODEsIDI0NCwgMTkwLCAyNTAsIDIyNSwgMjQ0LCAxOTAsIDI0NiwgOTcsIDI0NCwgMTkwLCAyMTgsIAotICAgIDI0MSwgMjEyLCAzLCAyNDAsIDI0NiwgMjQ0LCAxOTAsIDIzMCwgMTQ2LCAyNDQsIDE5MCwgMjQ3LCAxMzcsIDI0NCwgMTkwLCAKLSAgICAyMjUsIDc0LCAyNDQsIDE5MCwgMjQzLCAyNDUsIDI0NCwgMTkwLCAyNDIsIDIwLCAyNDQsIDE5MCwgMjExLCAyMjQsIDI0NCwgCi0gICAgMTkwLCAyNTIsIDcxLCAyNDQsIDE5MCwgMjI2LCA0NSwgMjQ0LCAxOTAsIDIyNSwgNzQsIDIyOCwgNTMsIDIyNSwgMjMyLCAKLSAgICAyMjQsIDE4NiwgMjQ1LCAxMywgMjQ1LCAyMjcsIDIyOCwgNTMsIDIzMCwgMTEwLCAyMTYsIDE5LCA3MSwgMTIwLCAyMjUsIDcsIAotICAgIDI1MiwgMTgyLCAyMzUsIDI0MiwgNzEsIDEyNCwgMjI1LCA3LCAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCA0MywgMjI1LCA3LCAKLSAgICAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCA0NCwgMjI1LCA3LCAyNTIsIDE4MiwgMjM1LCAyNDIsIDI0NCwgODQsIDI0MiwgMTYsIAotICAgIDUwLCAyMTIsIDMzLCAyNDIsIDE2LCA1MCwgMjI2LCAyMTUsIDI0MiwgMTYsIDUwLCAyMTYsIDEzNSwgMTIwLCA1MCwgMjE2LCAKLSAgICAxMzUsIDEyNCwgNTAsIDI1MCwgMTksIDI0MiwgMTEsIDUwLCAyMDQsIDI0MiwgMTEsIDUwLCAyNDksIDEyMywgMjExLCAyMjAsIAotICAgIDI0MSwgMjUxLCAyNDUsIDE0LCAyMjksIDEwNCwgMjE3LCAxNTEsIDIzNSwgMTI1LCAyNDYsIDkyLCAyMzQsIDgyLCAyNTEsIAotICAgIDI0NywgMjExLCAyMjAsIDI0OSwgMjQ5LCAyMjQsIDEyNywgMjQyLCAxNCwgMjI0LCAyMzAsIDIzMSwgMTc3LCAyMjAsIDQsIAotICAgIDI1MywgMjAzLCAyMjAsIDQsIDI0MSwgMTY0LCAyMjAsIDQsIDIxMSwgMjIwLCAyMjEsIDI0MCwgMjExLCAyMjAsIDI1MSwgCi0gICAgMTg2LCAyNDQsIDI5LCAyNTEsIDkwLCAyMzYsIDAsIDIxOSwgMTY5LCAyNTEsIDg5LCAyMzYsIDAsIDIxOSwgMTY5LCAyNTEsIAotICAgIDE2MiwgMjQyLCAxOTQsIDIzMSwgMTg1LCAyMTEsIDIyMSwgMjQ0LCAxNzQsIDIzMSwgMTg2LCAyMiwgMjExLCAyMjIsIDI0MSwgCi0gICAgNjAsIDI0MiwgMTAsIDExMywgMjMxLCA1OSwgMjQxLCA2MCwgMjQyLCAxMCwgMTEzLCAyMTEsIDIxOSwgMjQxLCA2MCwgMjQyLCAKLSAgICAxMCwgMjI0LCAyNTUsIDIyNiwgMjI3LCAyMTEsIDIyMiwgMiwgMjUxLCAxMDYsIDI0NSwgMjI1LCAyNTEsIDE0MSwgMiwgCi0gICAgMjEzLCAyNDYsIDIyNSwgMTY4LCAyLCAyNTEsIDIxMiwgMjQyLCAzNCwgMjMxLCAxODYsIDIsIDI0MiwgMTEwLCAyMjUsIAotICAgIDEwOSwgMjMxLCAxNzQsIDIzMSwgMTg2LCAyLCAyMTUsIDk3LCAyMjYsIDIwOCwgMjMxLCAxODUsIDIyNiwgMjA4LCAyMTEsIAotICAgIDIyMSwgMjUyLCAxODYsIDI0OSwgMTkwLCAyMTEsIDIwNSwgMjI0LCAxODksIDIzNSwgMTMxLCAyMjYsIDIyMywgMjM1LCAKLSAgICAxMzEsIDI0MiwgMTY5LCAyNDIsIDIyMiwgMjUyLCAxODcsIDI1NCwgMTEzLCAyNDUsIDE4LCAyNTQsIDE2MCwgMjU0LCAxNjEsIAotICAgIDIzMCwgMTM2LCAyMzYsIDUsIDIxOSwgMTAwLCAyMzUsIDIzMiwgMjQ4LCAzNCwgMjI1LCAxNjcsIDI0MiwgMTA1LCAyNDgsIAotICAgIDE3OSwgMjMyLCAyMDEsIDIyOSwgMjExLCAyMjQsIDI1NCwgMjQ0LCAxOTEsIDIzMSwgMTQyLCAyNDIsIDMzLCAyNTIsIDEzOCwgCi0gICAgMjI1LCAxLCAyMTcsIDE3MSwgMjI1LCA2NiwgMjM0LCA2NCwgNzgsIDIzMiwgMTExLCAyMzMsIDEwLCAyMjIsIDIzMywgMjQzLCAKLSAgICA1NCwgMjE4LCAxMzEsIDIzNCwgNjMsIDI1MSwgMTcxLCAyNDksIDE0OCwgMiwgMjQxLCAyMjcsIDIxMiwgMTksIDI1MiwgNjksIAotICAgIDI0MSwgMjI3LCAyNTEsIDEzNSwgMjQxLCAyMjcsIDExMywgMjQxLCAyMjUsIDIxOSwgMTAsIDI0MSwgMjI3LCAyNDIsIDEyMCwgCi0gICAgMjQxLCAyMjcsIDI0MSwgMjI4LCAyLCA3NCwgMjUxLCAyMDgsIDI0MSwgMjI3LCAyNDIsIDEyNywgMjQxLCAyMjcsIDIxMSwgCi0gICAgNDIsIDI0MSwgMjI3LCAyMjQsIDEyOCwgMjQxLCAyMjcsIDI0MSwgMjI4LCAyLCAyMjMsIDMzLCAyMjMsIDQ0LCAyNDEsIAotICAgIDIyNSwgMjQxLCAyMjgsIDI0OCwgODEsIDI0NywgMjQ5LCAyMjAsIDgyLCAyLCAxMTUsIDU5LCAyMzUsIDIxNSwgMjQ1LCAKLSAgICAxNzIsIDE5MiwgMjUxLCAxMTYsIDI1NCwgMTEyLCA4NywgMjUxLCAxOTUsIDIxOSwgOTIsIDg3LCAyNDksIDIyOCwgODcsIAotICAgIDIxOCwgMjQ2LCAyMTcsIDI0OCwgODcsIDI0NiwgODUsIDI0OCwgMTU3LCA4NywgMjI1LCA2NywgNjQsIDIyNCwgMjQ5LCAKLSAgICAyNDQsIDYxLCAyNTIsIDMsIDI0NywgMTY1LCA4NywgMjE5LCAzLCAyNTIsIDE1OCwgMjE2LCAxNDksIDI1MiwgMTU4LCA3MSwgCi0gICAgMjQ0LCA1MSwgMjQwLCAyMTEsIDIyNSwgNSwgODcsIDIzMCwgMTQ5LCAyNTIsIDE3MiwgMjQ5LCA5OCwgMjQ1LCAzMiwgMTE0LCAKLSAgICAyNDcsIDEzMiwgNTAsIDI0OSwgMTM5LCAyNTAsIDI0MiwgMjUyLCAxNDQsIDIsIDIxMSwgNDAsIDUwLCAyNTIsIDE0NCwgMiwgCi0gICAgMjQ3LCAxMzIsIDUwLCAyNTIsIDE0NCwgMiwgMjQ1LCA0NywgNTAsIDI1MiwgMTQ0LCAyLCAyMjQsIDIyOCwgNTAsIDIzMCwgCi0gICAgMTQ5LCAyLCAyMTEsIDIzNSwgMjUwLCAxMzgsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMSwgMjIsIDIxMSwgNDAsIDUwLCAyMjEsIAotICAgIDE3OCwgMjI1LCAxNjYsIDI0OSwgMjA4LCAyNTEsIDEzOSwgMjMwLCAxODYsIDI0NCwgNTYsIDI0NywgMTg1LCAyMjYsIDE2MSwgCi0gICAgMjQ3LCAxOTAsIDI0NiwgNDksIDI0NCwgMTA3LCAyNDQsIDQwLCAyMDQsIDI0NCwgMTA3LCAyNDQsIDQwLCAyMjYsIDc2LCAyLCAKLSAgICAyNDksIDEwMCwgMjI2LCA3NiwgMjQ0LCAxODMsIDIxNCwgMTYzLCAyNTEsIDE2LCAyMTcsIDE4LCAyNTEsIDE2LCAyNTAsIAotICAgIDI0MywgMjM1LCAyNDIsIDI1MCwgMTM4LCAyLCAyMTQsIDE1MywgMjE1LCAyMzAsIDI1MCwgMTM4LCAyLCAyNDYsIDEwNCwgCi0gICAgMjE1LCAyMzAsIDI1MiwgMTQxLCAyNTAsIDEzNywgMjUwLCA2LCAyMjQsIDEyMywgMjIyLCAxODUsIDIyNCwgMTIzLCAyMjYsIAotICAgIDE5LCAyMTgsIDEyMSwgMjIyLCAxMzEsIDIxNSwgMjIyLCAyMjIsIDEzMSwgMjUxLCAxOTEsIDIxNywgOTEsIDIzMywgNTEsIAotICAgIDIyOCwgNDUsIDIyOCwgNDYsIDIsIDI0OCwgODAsIDI0OSwgMTQ3LCAyNTAsIDAsIDI1MSwgMTkyLCAyMDQsIDI1MSwgMTkyLCAKLSAgICAyNDIsIDEyNywgMjUxLCAxOTIsIDI1MSwgMjA4LCAyNTEsIDE5MiwgMjI2LCAxNTcsIDI1MSwgMTkyLCAyNTEsIDE4OSwgCi0gICAgMjI5LCAyMDUsIDI1MiwgMTc1LCAyMjEsIDE4NiwgMjMxLCA2MCwgMjE3LCAxLCAyMjMsIDEyMywgMjI2LCA3NCwgMjQ0LCAKLSAgICAxNTksIDIzMSwgMjM0LCAyMjEsIDIyMywgMjU0LCA4OSwgMjI0LCAxNDUsIDI1NCwgMjUyLCAyMzIsIDExMywgMjUwLCAxMjcsIAotICAgIDIzMSwgNzIsIDIyNiwgMTI5LCAyMTUsIDIzOCwgMjM1LCAyNTIsIDIxNSwgMjM4LCAyMjYsIDgyLCAyNDYsIDI0LCA4NywgCi0gICAgMjM1LCAyNDksIDI0NSwgMTE5LCAyNDUsIDEyMCwgMiwgMjQ2LCAxMDQsIDgwLCA0OCwgMjUwLCAwLCAyMzEsIDIwMCwgMiwgCi0gICAgMjMyLCAxMDcsIDI0NCwgNzMsIDI1MCwgMCwgMjMxLCAyMDAsIDIsIDIyMywgMTU3LCAyNDQsIDczLCAyMDQsIDIzMSwgMjAwLCAKLSAgICAyLCAyMjMsIDE1NywgMjQ0LCA3MywgMjA0LCAyMzEsIDIwMCwgMiwgMjMyLCAxMDcsIDI0NCwgNzMsIDIyNCwgMjM2LCAyMjQsIAotICAgIDIzNywgMjQwLCAyNDgsIDIyOSwgODQsIDIzMCwgMTU5LCAyMjUsIDExNywgMjMwLCAxNTksIDIyNSwgMTE4LCAyLCA5NywgCi0gICAgODAsIDI1MywgMjA3LCAyMzMsIDQ2LCAyMTMsIDE3NSwgMjMwLCAxNTgsIDIzMCwgMTU5LCAyMjUsIDExOCwgMjI2LCAyMzAsIAotICAgIDIyOCwgNzUsIDIzMCwgMTU5LCAyMjUsIDExNiwgMjU0LCA5MCwgMiwgMjUyLCAxMjksIDI1MSwgMTAsIDIxMywgMTcyLCAKLSAgICAyNTEsIDEwLCAyMTYsIDI1NCwgMjIzLCAxNzMsIDIxMywgMTcxLCAyMTUsIDYwLCA5NywgMjUzLCAyNDcsIDI1MCwgMiwgOTcsIAotICAgIDIyLCAxNDAsIDIwNCwgMjUwLCAzNiwgMjUzLCAyNDcsIDI1MCwgMiwgOTcsIDIyLCAxNDAsIDIwNCwgMjUwLCAzNiwgMjUzLCAKLSAgICAyNDgsIDIsIDM3LCAxMjMsIDIyNiwgMTIwLCAyNTAsIDIsIDI0NiwgMTA0LCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCAzNiwgCi0gICAgMjUzLCAyNDcsIDI1NCwgODgsIDI0NiwgMTA0LCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCAzNiwgMjUzLCAyNDcsIDEyMSwgCi0gICAgMjUxLCAxMzgsIDg3LCAxMjUsIDI1MSwgMTM4LCA4NywgMjE5LCA3LCAyLCAyNTEsIDQsIDkxLCAyMTksIDYsIDIxOSwgNywgCi0gICAgMiwgMTIzLCAyMTksIDMxLCAyMTIsIDM1LCAyMTksIDcsIDIsIDEzNCwgMjE5LCAzMSwgMjEyLCAzNCwgMjUyLCAxMTUsIAotICAgIDI0NSwgMTcyLCAyMjUsIDI3LCAyMzMsIDQyLCAyMzEsIDIxMSwgMjQyLCAxODQsIDIyMiwgMjQ3LCAyMzEsIDIxMSwgMjQyLCAKLSAgICAxODQsIDIzMiwgMTUyLCAyLCAyMzUsIDIyNSwgMjI1LCAxOTksIDI1MCwgMCwgMjMyLCAxNTIsIDIsIDIzNCwgMTM4LCAyMzQsIAotICAgIDEzOCwgMjMyLCAxNTEsIDIwNCwgMjMyLCAxNTEsIDI1MiwgNDQsIDI1MiwgNDUsIDIsIDI1MSwgNCwgOTEsIDI1MSwgMTkwLCAKLSAgICAyMzIsIDIwNCwgODcsIDIyMywgMTc0LCAyNTEsIDg2LCAyNTIsIDE4NSwgMiwgMTQwLCA4MCwgNDgsIDI0NSwgMTQzLCAyLCAKLSAgICAxNDAsIDgwLCA0OCwgMjI2LCAxOTcsIDIsIDI0NSwgMzEsIDE2NCwgMiwgNDMsIDQ0LCA4MCwgNDgsIDIxOSwgMzksIDIsIAotICAgIDk3LCA4MCwgNDgsIDIxNiwgMTQsIDIsIDIxNCwgMTUzLCA4MCwgNDgsIDIyOCwgNzUsIDEyMywgMjE0LCAxODQsIDI0NSwgCi0gICAgMTkxLCA4NywgMjM0LCAxMzYsIDIxNiwgMjQ3LCAyMzUsIDIxOSwgMTYsIDMxLCA3LCA2LCAyMzMsIDksIDIzNSwgMjE5LCAKLSAgICAxNiwgMzEsIDcsIDQsIDIzMywgOSwgMjM1LCAyMTksIDE2LCAzMSwgMjI3LCAxOTksIDIzNSwgMjE5LCAxNiwgMzEsIDIxNywgCi0gICAgMTgzLCAyMzUsIDIxOSwgMTYsIDMxLCA3LCAyMzMsIDksIDI0NCwgOTYsIDI0NSwgMTcyLCAyMTYsIDksIDIxMSwgMTk5LCAKLSAgICAyNDIsIDIxLCAyMjcsIDE4MiwgMjIsIDI1MSwgMTk3LCAyNDEsIDY2LCAyMjUsIDUwLCAyMzAsIDIyNiwgMjE2LCAyNTUsIAotICAgIDI0OSwgMTE0LCAyNTIsIDE1OSwgMjE5LCAxMjUsIDIyNSwgOSwgMjE4LCAxNTcsIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgCi0gICAgMjM1LCAxMzEsIDE2LCAzMSwgMjUyLCA1NywgMjE1LCAyMjAsIDI0NSwgMTU2LCA4NSwgNDIsIDI1MSwgODYsIDcxLCA0MiwgCi0gICAgMjUxLCA4NiwgMjMzLCA4NSwgMjIzLCAxMTEsIDI1MCwgMzUsIDIzMywgODUsIDI1MSwgMjA4LCAyNTAsIDM1LCAyMzMsIDg1LCAKLSAgICAyMjYsIDE1NywgMjQ3LCAyNDgsIDIzMywgODUsIDI1MSwgMjA4LCAyNDcsIDI0OCwgNCwgMjI2LCAxNTcsIDI0NywgMjQ4LCAKLSAgICA0LCAyNTEsIDIwOCwgMjQ3LCAyNDgsIDIxNCwgMTYyLCAyMjMsIDExMSwgMjE1LCAyMjUsIDI0NiwgMTA1LCAyMjMsIDExMSwgCi0gICAgMjE1LCAyMjUsIDIxNCwgMTYyLCA0LCAyMjMsIDExMSwgMjE1LCAyMjUsIDI0NiwgMTA1LCA0LCAyMjMsIDExMSwgMjE1LCAKLSAgICAyMjUsIDM3LCAyNDksIDEzMSwgMjI0LCAyNTIsIDI0OSwgMTMxLCAyMjQsIDI1MywgMiwgMjQyLCAyNiwgNTEsIDI0OSwgCi0gICAgMTMxLCAyMjQsIDI1MiwgMjI4LCA0OSwgNDMsIDIyMCwgMTUzLCAyLCAxMzQsIDI0NywgMTE4LCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAxMjMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAxMTMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAxMzQsIAotICAgIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDExLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA4MSwgCi0gICAgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxOSwgMTI1LCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjIwLCAKLSAgICAxMjIsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDUsIDE5MywgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIAotICAgIDIyOCwgMjAwLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAyNDgsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgCi0gICAgMTkxLCAyNDUsIDE2OCwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNSwgNzcsIDIyNiwgMjQyLCAyNTAsIDQsIAotICAgIDI0NCwgMTkxLCAyMjYsIDE5MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA1NiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAKLSAgICAxNDAsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgNywgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA3OSwgMjUwLCA0LCAyNDQsIAotICAgIDE5MSwgMjE5LCAxMjEsIDI1MCwgNCwgMjQ0LCAxOTEsIDIyMCwgMTIxLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDUsIDE5MiwgCi0gICAgMjUwLCA0LCAyNDQsIDE5MSwgMjI4LCAxOTksIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNiwgMjQ2LCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAyNDUsIDE2NiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA3NSwgMjMwLCAxMTcsIDI0MywgMjMwLCAyMTYsIDM2LCAyMTYsIDIsIAotICAgIDIxOCwgMTQ4LCA2NCwgMjMyLCAyMzksIDIxOSwgMTcwLCA2NCwgMjM1LCAxMzIsIDIzMCwgMTA2LCAyNDIsIDEyNCwgMjQ0LCAKLSAgICAxOTAsIDI0MiwgMTI0LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjQ0LCAxOTEsIDIsIDIxNywgMTQsIDY0LCAKLSAgICAyMzUsIDUzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgCi0gICAgMjMwLCAxMTEsIDIyLCAyMTksIDc0LCAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMSwgMjIsIAotICAgIDI0OSwgMjMwLCAyMTcsIDI0NywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTEsIDIyLCAyMTYsIDEwNCwgCi0gICAgMjQ1LCAxMywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MiwgMjUsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyNDAsIDI0NywgCi0gICAgMjExLCAyMzMsIDI0NCwgMTkwLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjQ0LCAxOTEsIAotICAgIDIyMSwgMjE3LCAyNDgsIDYyLCAyNDQsIDMzLCAyMjMsIDg4LCAyNDQsIDE5MCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MSwgCi0gICAgMjI2LCAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjE4LCAzNCwgMjE5LCA3MywgMjQ0LCAxOTAsIDIyOSwgODcsIAotICAgIDI0NCwgMTkwLCAyNDUsIDIzLCAyNDQsIDE5MCwgMjE0LCAxODgsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjQ5LCAyMzAsIAotICAgIDIxNywgMjQ3LCAyMjUsIDE5MiwgMjQ0LCAxOTAsIDI0OSwgMjAxLCAyNDQsIDE5MCwgMjQ5LCAyMDIsIDI0NCwgMTkwLCAKLSAgICAyMzQsIDYyLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIxNiwgMTM3LCAxMTUsIDIzNCwgNjMsIDIzNCwgNjIsIDI0NCwgMTkxLCAKLSAgICAyLCAyMTksIDc0LCAyNDUsIDEzLCAyMzQsIDYyLCAyNDQsIDE5MSwgMiwgMjUwLCAwLCAyNDUsIDEzLCAyNDQsIDE5MSwgMiwgCi0gICAgMjE4LCA4OCwgMjE2LCAxOSwgMjQ0LCAxOTEsIDIsIDIxOCwgODgsIDIxNiwgMjAsIDIyLCAyMTEsIDIzMywgMjQ1LCAxNSwgCi0gICAgMjQ0LCAxOTEsIDIsIDIxOCwgODgsIDIxNiwgMjAsIDIyLCAyMTYsIDEwNCwgMjQ1LCAxMywgMjQ3LCAxOTIsIDI0NCwgMTkwLCAKLSAgICAyMTEsIDIwNCwgMjQ0LCAxOTAsIDI1NCwgMTA4LCAyNDQsIDE5MCwgMjI0LCAyMjcsIDI0NCwgMTkwLCAyNDksIDExNiwgCi0gICAgMjQ0LCAxOTAsIDIyNSwgMTcwLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIsIDIzMiwgMTI2LCA2NCwgMjE1LCAyMDQsIDI0NywgCi0gICAgMTkyLCAyNTEsIDg4LCAyMjMsIDg4LCAyNDQsIDE5MCwgMjQzLCAyMzksIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAKLSAgICAyNTQsIDEwNiwgMjQ0LCAxOTAsIDI0NCwgMTUyLCAyNDQsIDE5MCwgMjEyLCAyMCwgMjQ0LCAxOTAsIDIxOSwgOTEsIDI0NCwgCi0gICAgMTkwLCAyMTYsIDcxLCAyNDQsIDE5MCwgMjQyLCAxMjUsIDI0NCwgMTkwLCAyMzIsIDExNCwgMjQ5LCAxMTYsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjQwLCAyMDMsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIAotICAgIDExMSwgMjIsIDI0OSwgMjMwLCAyMTcsIDI0NywgMjQ0LCAxOTEsIDIyMSwgMTkwLCAyMzYsIDAsIDI0NCwgMTUzLCAyNTMsIAotICAgIDIxMywgMjQ0LCAxOTAsIDI0NCwgNDksIDI0NCwgMTkwLCAyMTksIDkyLCAyNDQsIDE5MCwgMjQ3LCAxNjUsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMjExLCAyMzAsIDIzMCwgMTEwLCAyNDQsIDE5MSwgMiwgMjMxLCA4NCwgMjMxLCAxNDQsIDI0MiwgMTI0LCAKLSAgICAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjE3LCAxNCwgCi0gICAgNjQsIDIzNSwgNTMsIDIxOSwgNzQsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgMjE5LCA3NCwgMjUwLCAKLSAgICAyMjUsIDI0NCwgMTkxLCAyLCAyNDEsIDIyNiwgMjQ1LCAxMywgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMTEsIDE5NiwgCi0gICAgMjE5LCA3NSwgMjM0LCA2MiwgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyNTAsIDAsIDI0NSwgMTMsIDIyNCwgMjI3LCAyNTAsIAotICAgIDIyNSwgMjQ0LCAxOTAsIDI0OSwgMTE2LCAyNTAsIDIyNSwgMjQ0LCAxOTAsIDIxMiwgMjAsIDI1MCwgMjI1LCAyNDQsIDE5MCwgCi0gICAgMjQ0LCAxOTEsIDIsIDIyOCwgNzUsIDI0MiwgMTYzLCAyNDMsIDM0LCAyNDQsIDE5MSwgMiwgMjI2LCAyMTUsIDI0MywgMzQsIAotICAgIDIyNSwgMTY4LCAyNTEsIDE2OCwgMjQ4LCA3NSwgMjIxLCAxNjksIDIzMCwgMTQ1LCAyNDEsIDIyOSwgMjMwLCAxNDUsIDIxOSwgCi0gICAgOCwgMjMwLCAxNDUsIDI0MiwgNSwgMjI1LCAxNjgsIDIyMywgMTU2LCAxMjMsIDI0MiwgMTUsIDIyNSwgMTY4LCAyMjMsIAotICAgIDE1NiwgMjUxLCAxNzgsIDI0MiwgMTEsIDIzNiwgMCwgMjUwLCAxNzksIDIyNSwgMTY4LCAyNDMsIDIzOCwgMjI1LCAxNjgsIAotICAgIDIsIDIyNCwgMjI3LCAyNDQsIDE5MCwgMjI1LCAxNjgsIDIsIDI0NCwgNDEsIDI0MiwgMTAsIDIyMiwgMjAzLCAyNDEsIDIxNCwgCi0gICAgMjE4LCAxNDMsIDIzMiwgMTQ5LCAyMjMsIDE2MiwgMjUwLCAyNDQsIDI0MSwgMTYyLCAyMTUsIDI0OCwgMjQxLCAxNjIsIAotICAgIDIxNSwgMjQ5LCAyLCAyNTEsIDExNCwgMjI4LCA1MywgMjE1LCAyNDgsIDIzMSwgMzIsIDE5MiwgMjIzLCAxNjMsIDIxOCwgCi0gICAgMTQ5LCAyMTUsIDI0NiwgMjE1LCAyNDcsIDI1MCwgMjQ0LCAyNTEsIDkyLCAyMjYsIDE5NCwgMjUxLCA5MiwgMjE1LCAyMDEsIAotICAgIDI1MSwgOTMsIDIxOCwgMTI5LCAyMzAsIDE4NywgMjU0LCAxMzAsIDI0NCwgOTcsIDI0NSwgMTM3LCAyMjQsIDI1NSwgMjUwLCAKLSAgICAyNDQsIDIyNiwgMTk0LCAyMjQsIDI1NSwgMjUwLCAyNDQsIDIxNywgMzIsIDIyNiwgMTk0LCAyMTcsIDMyLCAyNTMsIDE4MCwgCi0gICAgMjI2LCAxOTQsIDI1MywgMTgwLCAyMjMsIDExOCwgMjEzLCAyNDcsIDI0OCwgNTgsIDIxNSwgMTkyLCAyNTMsIDI0MiwgMjMyLCAKLSAgICAxMTcsIDIxNSwgMjU0LCAyMzAsIDEzOSwgMjMwLCAxMTYsIDIyMywgMTYxLCAyMTgsIDYsIDIyMywgMTYxLCAyMzAsIDExNiwgCi0gICAgMjUxLCAyOCwgMjU0LCAyMjksIDIxNSwgMjQ1LCAyMjAsIDE2LCAyMjIsIDE4MiwgMjE5LCAxLCAyMDMsIDIxNSwgMjUyLCAKLSAgICAyMzIsIDIzMCwgNjcsIDIxNSwgMjUyLCAyMzIsIDIzMCwgMjQ5LCAxOTAsIDUwLCAyMjQsIDI1NSwgMjUwLCAyMjksIDIyMywgCi0gICAgNDQsIDIzMiwgMjMwLCAyMTUsIDIyMiwgMjQ0LCA3NCwgMjI2LCAxOTcsIDIyNCwgMjM4LCAyNDcsIDEyMywgMjI4LCA3NSwgCi0gICAgMjQ1LCAxMjUsIDUwLCAyMTksIDcyLCA4NywgMjI4LCA3NSwgMjE5LCA3MiwgODcsIDIyNCwgMTIyLCAyMzIsIDE5MywgMjM2LCAKLSAgICAwLCAyMzUsIDE1NywgMjI1LCA0MSwgODcsIDI0NywgMTQ2LCAyMjgsIDUyLCAyMzIsIDE5MywgODcsIDIyNCwgMjMyLCAyMTIsIAotICAgIDQxLCA4NywgMjI4LCA2NiwgMjEyLCA0MSwgODcsIDI1MiwgMiwgMjI4LCA3NSwgMjUyLCAxLCAyNTIsIDAsIDIzMCwgMTE2LCAKLSAgICAyNTIsIDAsIDIyNSwgMjEzLCAyMjgsIDc1LCAyMjUsIDIxMiwgMjUwLCAxMDAsIDI0OSwgMTI0LCAyMzEsIDU2LCA4NywgCi0gICAgMjExLCAyMTgsIDg3LCAyMjMsIDU5LCAyNTIsIDE4NywgODcsIDIxNiwgMzcsIDIxMiwgNDEsIDI0OSwgMjUzLCAyMTksIAotICAgIDIzNCwgMjUyLCAxMTgsIDI1MiwgMTE2LCAyMjUsIDI0MiwgMjQ5LCAxNzcsIDI0OSwgODYsIDI1MiwgMTY5LCAyNTAsIDIyLCAKLSAgICA0MywgMjMyLCA5MCwgMTA4LCAxNiwgMzEsIDIyNCwgMywgMTA4LCAxNiwgMzEsIDI1NCwgMTkyLCAxMDgsIDE2LCAzMSwgCi0gICAgMjQ0LCA5NiwgMTA4LCAxNiwgMzEsIDI0NSwgMjIzLCAxMDgsIDE2LCAzMSwgMjEyLCA0MCwgMTA4LCAxNiwgMzEsIDI1NCwgCi0gICAgNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMjMsIDEwNSwgMTA4LCAxNiwgMzEsIDI1NCwgNDQsIDIyMywgMTA0LCAxMDgsIAotICAgIDE2LCAzMSwgMjU0LCA0NCwgMjEzLCAxNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMTMsIDE0MiwgMTA4LCAxNiwgMzEsIAorICAgIDEzOSwgNCwgNjEsIDExLCAxMzksIDQsIDI1MywgMTY2LCAxMSwgMTM5LCA0LCAyNTEsIDc0LCAxMSwgMTM5LCA0LCAyNDksIAorICAgIDY4LCAxMSwgMTM5LCA0LCA3NiwgMTEsIDEzOSwgNCwgMjQ1LCAxNCwgMTEsIDEzOSwgNCwgMjQzLCAyMDksIDExLCAxMzksIAorICAgIDQsIDI0MiwgNjcsIDExLCAxMzksIDQsIDc0LCAxMSwgMTM5LCA0LCAyMzUsIDE1MCwgMTEsIDEzOSwgNCwgMjM1LCAyOSwgCisgICAgMTEsIDEzOSwgNCwgMTU2LCAxMSwgMTM5LCA0LCAxOTQsIDExLCAxMzksIDQsIDIzMCwgMzAsIDExLCAxMzksIDQsIDc4LCAKKyAgICAxMSwgMTM5LCA0LCAyMjYsIDEwOSwgMTEsIDEzOSwgNCwgMjI0LCA5OSwgMTEsIDEzOSwgNCwgMTUzLCAxMSwgMTM5LCA0LCAKKyAgICAyMjIsIDkzLCAxMSwgMTM5LCA0LCAyMTcsIDE1MywgMTEsIDEzOSwgNCwgNjksIDExLCAxMzksIDQsIDIxNCwgMTA1LCAxMSwgCisgICAgMTM5LCA0LCAyMTIsIDk4LCAxMSwgMTM5LCA0LCAyMTEsIDE3OCwgMTEsIDEzOSwgNCwgMjExLCAxMTcsIDExLCAxMzksIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMjMsIDEzMywgNiwgNjEsIDExLCAyMywgMTMzLCA2LCAyNTMsIDE2NiwgMTEsIDIzLCAxMzMsIDYsIAorICAgIDI1MSwgNzQsIDExLCAyMywgMTMzLCA2LCAyNDksIDY4LCAxMSwgMjMsIDEzMywgNiwgNzYsIDExLCAyMywgMTMzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDEzMywgNiwgMjQzLCAyMDksIDExLCAyMywgMTMzLCA2LCAyNDIsIDY3LCAxMSwgMjMsIDEzMywgCisgICAgNiwgNzQsIDExLCAyMywgMTMzLCA2LCAyMzUsIDE1MCwgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMjksIDExLCAyMywgMTMzLCA2LCAKKyAgICAxNTYsIDExLCAyMywgMTMzLCA2LCAxOTQsIDExLCAyMywgMTMzLCA2LCAyMzAsIDMwLCAxMSwgMjMsIDEzMywgNiwgNzgsIAorICAgIDExLCAyMywgMTMzLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCAxMzMsIDYsIDIyNCwgOTksIDExLCAyMywgMTMzLCA2LCAxNTMsIAorICAgIDExLCAyMywgMTMzLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDEzMywgNiwgMjE3LCAxNTMsIDExLCAyMywgMTMzLCA2LCA2OSwgCisgICAgMTEsIDIzLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDEzMywgNiwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDYsIDIxMSwgCisgICAgMTc4LCAxMSwgMjMsIDEzMywgNiwgMjExLCAxMTcsIDExLCAyMywgMTMzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDYxLCAxMSwgMjMsIDEzMywgNCwgMjUzLCAxNjYsIDExLCAyMywgMTMzLCA0LCAyNTEsIDc0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjQ5LCA2OCwgMTEsIDIzLCAxMzMsIDQsIDc2LCAxMSwgMjMsIDEzMywgNCwgMjQ1LCAxNCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDI0MywgMjA5LCAxMSwgMjMsIDEzMywgNCwgMjQyLCA2NywgMTEsIDIzLCAxMzMsIDQsIDc0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjM1LCAxNTAsIDExLCAyMywgMTMzLCA0LCAyMzUsIDI5LCAxMSwgMjMsIDEzMywgNCwgMTU2LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMTk0LCAxMSwgMjMsIDEzMywgNCwgMjMwLCAzMCwgMTEsIDIzLCAxMzMsIDQsIDc4LCAxMSwgMjMsIDEzMywgNCwgMjI2LCAKKyAgICAxMDksIDExLCAyMywgMTMzLCA0LCAyMjQsIDk5LCAxMSwgMjMsIDEzMywgNCwgMTUzLCAxMSwgMjMsIDEzMywgNCwgMjIyLCAKKyAgICA5MywgMTEsIDIzLCAxMzMsIDQsIDIxNywgMTUzLCAxMSwgMjMsIDEzMywgNCwgNjksIDExLCAyMywgMTMzLCA0LCAyMTQsIAorICAgIDEwNSwgMTEsIDIzLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNCwgMjEwLCAxNTksIDExLCAzNSwgNiwgNjEsIDExLCAzNSwgNiwgMjUzLCAxNjYsIAorICAgIDExLCAzNSwgNiwgMjUxLCA3NCwgMTEsIDM1LCA2LCAyNDksIDY4LCAxMSwgMzUsIDYsIDc2LCAxMSwgMzUsIDYsIDI0NSwgCisgICAgMTQsIDExLCAzNSwgNiwgMjQzLCAyMDksIDExLCAzNSwgNiwgMjQyLCA2NywgMTEsIDM1LCA2LCA3NCwgMTEsIDM1LCA2LCAKKyAgICAyMzUsIDE1MCwgMTEsIDM1LCA2LCAyMzUsIDI5LCAxMSwgMzUsIDYsIDE1NiwgMTEsIDM1LCA2LCAxOTQsIDExLCAzNSwgNiwgCisgICAgMjMwLCAzMCwgMTEsIDM1LCA2LCA3OCwgMTEsIDM1LCA2LCAyMjYsIDEwOSwgMTEsIDM1LCA2LCAyMjQsIDk5LCAxMSwgMzUsIAorICAgIDYsIDE1MywgMTEsIDM1LCA2LCAyMjIsIDkzLCAxMSwgMzUsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDYsIDY5LCAxMSwgMzUsIAorICAgIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDYsIDIxMiwgOTgsIDExLCAzNSwgNiwgMjExLCAxNzgsIDExLCAzNSwgNiwgMjExLCAKKyAgICAxMTcsIDExLCAzNSwgNiwgMjEwLCAxNTksIDExLCAzNSwgNCwgNjEsIDExLCAzNSwgNCwgMjUzLCAxNjYsIDExLCAzNSwgNCwgCisgICAgMjUxLCA3NCwgMTEsIDM1LCA0LCAyNDksIDY4LCAxMSwgMzUsIDQsIDc2LCAxMSwgMzUsIDQsIDI0NSwgMTQsIDExLCAzNSwgCisgICAgNCwgMjQzLCAyMDksIDExLCAzNSwgNCwgMjQyLCA2NywgMTEsIDM1LCA0LCA3NCwgMTEsIDM1LCA0LCAyMzUsIDE1MCwgMTEsIAorICAgIDM1LCA0LCAyMzUsIDI5LCAxMSwgMzUsIDQsIDE1NiwgMTEsIDM1LCA0LCAxOTQsIDExLCAzNSwgNCwgMjMwLCAzMCwgMTEsIAorICAgIDM1LCA0LCA3OCwgMTEsIDM1LCA0LCAyMjYsIDEwOSwgMTEsIDM1LCA0LCAyMjQsIDk5LCAxMSwgMzUsIDQsIDE1MywgMTEsIAorICAgIDM1LCA0LCAyMjIsIDkzLCAxMSwgMzUsIDQsIDIxNywgMTUzLCAxMSwgMzUsIDQsIDY5LCAxMSwgMzUsIDQsIDIxNCwgMTA1LCAKKyAgICAxMSwgMzUsIDQsIDIxMiwgOTgsIDExLCAzNSwgNCwgMjExLCAxNzgsIDExLCAzNSwgNCwgMjExLCAxMTcsIDExLCAzNSwgNCwgCisgICAgMjEwLCAxNTksIDExLCAzNSwgMjMsIDYsIDYxLCAxMSwgMzUsIDIzLCA2LCAyNTMsIDE2NiwgMTEsIDM1LCAyMywgNiwgMjUxLCAKKyAgICA3NCwgMTEsIDM1LCAyMywgNiwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgNiwgNzYsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTQsIAorICAgIDExLCAzNSwgMjMsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCA2LCAyNDIsIDY3LCAxMSwgMzUsIDIzLCA2LCA3NCwgMTEsIAorICAgIDM1LCAyMywgNiwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDYsIDIzNSwgMjksIDExLCAzNSwgMjMsIDYsIDE1NiwgMTEsIDM1LCAKKyAgICAyMywgNiwgMTk0LCAxMSwgMzUsIDIzLCA2LCAyMzAsIDMwLCAxMSwgMzUsIDIzLCA2LCA3OCwgMTEsIDM1LCAyMywgNiwgCisgICAgMjI2LCAxMDksIDExLCAzNSwgMjMsIDYsIDIyNCwgOTksIDExLCAzNSwgMjMsIDYsIDE1MywgMTEsIDM1LCAyMywgNiwgMjIyLCAKKyAgICA5MywgMTEsIDM1LCAyMywgNiwgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDYsIDY5LCAxMSwgMzUsIDIzLCA2LCAyMTQsIDEwNSwgCisgICAgMTEsIDM1LCAyMywgNiwgMjEyLCA5OCwgMTEsIDM1LCAyMywgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTE3LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgNCwgNjEsIDExLCAzNSwgMjMsIDQsIDI1MywgMTY2LCAxMSwgCisgICAgMzUsIDIzLCA0LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCA0LCAyNDksIDY4LCAxMSwgMzUsIDIzLCA0LCA3NiwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjQ1LCAxNCwgMTEsIDM1LCAyMywgNCwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDQsIDI0MiwgNjcsIDExLCAzNSwgCisgICAgMjMsIDQsIDc0LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgNCwgMjM1LCAyOSwgMTEsIDM1LCAyMywgCisgICAgNCwgMTU2LCAxMSwgMzUsIDIzLCA0LCAxOTQsIDExLCAzNSwgMjMsIDQsIDIzMCwgMzAsIDExLCAzNSwgMjMsIDQsIDc4LCAKKyAgICAxMSwgMzUsIDIzLCA0LCAyMjYsIDEwOSwgMTEsIDM1LCAyMywgNCwgMjI0LCA5OSwgMTEsIDM1LCAyMywgNCwgMTUzLCAxMSwgCisgICAgMzUsIDIzLCA0LCAyMjIsIDkzLCAxMSwgMzUsIDIzLCA0LCAyMTcsIDE1MywgMTEsIDM1LCAyMywgNCwgNjksIDExLCAzNSwgCisgICAgMjMsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA2LCA2MSwgMTEsIDM1LCAzMiwgCisgICAgNiwgMjUzLCAxNjYsIDExLCAzNSwgMzIsIDYsIDI1MSwgNzQsIDExLCAzNSwgMzIsIDYsIDI0OSwgNjgsIDExLCAzNSwgMzIsIAorICAgIDYsIDc2LCAxMSwgMzUsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzUsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAzMiwgNiwgCisgICAgMjQyLCA2NywgMTEsIDM1LCAzMiwgNiwgNzQsIDExLCAzNSwgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDMyLCA2LCAyMzUsIAorICAgIDI5LCAxMSwgMzUsIDMyLCA2LCAxNTYsIDExLCAzNSwgMzIsIDYsIDE5NCwgMTEsIDM1LCAzMiwgNiwgMjMwLCAzMCwgMTEsIAorICAgIDM1LCAzMiwgNiwgNzgsIDExLCAzNSwgMzIsIDYsIDIyNiwgMTA5LCAxMSwgMzUsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzUsIAorICAgIDMyLCA2LCAxNTMsIDExLCAzNSwgMzIsIDYsIDIyMiwgOTMsIDExLCAzNSwgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDMyLCAKKyAgICA2LCA2OSwgMTEsIDM1LCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMzIsIDYsIAorICAgIDIxMSwgMTc4LCAxMSwgMzUsIDMyLCA2LCAyMTEsIDExNywgMTEsIDM1LCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMzIsIAorICAgIDQsIDYxLCAxMSwgMzUsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDM1LCAzMiwgNCwgMjUxLCA3NCwgMTEsIDM1LCAzMiwgNCwgCisgICAgMjQ5LCA2OCwgMTEsIDM1LCAzMiwgNCwgNzYsIDExLCAzNSwgMzIsIDQsIDI0NSwgMTQsIDExLCAzNSwgMzIsIDQsIDI0MywgCisgICAgMjA5LCAxMSwgMzUsIDMyLCA0LCAyNDIsIDY3LCAxMSwgMzUsIDMyLCA0LCA3NCwgMTEsIDM1LCAzMiwgNCwgMjM1LCAxNTAsIAorICAgIDExLCAzNSwgMzIsIDQsIDIzNSwgMjksIDExLCAzNSwgMzIsIDQsIDE1NiwgMTEsIDM1LCAzMiwgNCwgMTk0LCAxMSwgMzUsIAorICAgIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzUsIDMyLCA0LCA3OCwgMTEsIDM1LCAzMiwgNCwgMjI2LCAxMDksIDExLCAzNSwgMzIsIAorICAgIDQsIDIyNCwgOTksIDExLCAzNSwgMzIsIDQsIDE1MywgMTEsIDM1LCAzMiwgNCwgMjIyLCA5MywgMTEsIDM1LCAzMiwgNCwgCisgICAgMjE3LCAxNTMsIDExLCAzNSwgMzIsIDQsIDY5LCAxMSwgMzUsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjEyLCAKKyAgICA5OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA0LCAyMTAsIAorICAgIDE1OSwgMTEsIDM1LCAyMywgMzIsIDYsIDYxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUzLCAxNjYsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgMzIsIDYsIDc2LCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQyLCAKKyAgICA2NywgMTEsIDM1LCAyMywgMzIsIDYsIDc0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTU2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTk0LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNiwgMjMwLCAzMCwgMTEsIDM1LCAyMywgMzIsIDYsIDc4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAxMDksIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIyLCAKKyAgICA5MywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgNjksIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICA2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDMyLCA0LCA3NiwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgMTQsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0MiwgNjcsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICA3NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAyOSwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDE1NiwgMTEsIDM1LCAyMywgMzIsIDQsIDE5NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMzAsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCA3OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCA5OSwgCisgICAgMTEsIDM1LCAyMywgMzIsIDQsIDE1MywgMTEsIDM1LCAyMywgMzIsIDQsIDIyMiwgOTMsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDM1LCAyMywgMzIsIDQsIDY5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDExNywgCisgICAgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMwLCAxNDMsIDYsIDYxLCAxMSwgMjMwLCAxNDMsIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMwLCAxNDMsIDYsIDI1MSwgNzQsIDExLCAyMzAsIDE0MywgNiwgMjQ5LCA2OCwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICA3NiwgMTEsIDIzMCwgMTQzLCA2LCAyNDUsIDE0LCAxMSwgMjMwLCAxNDMsIDYsIDI0MywgMjA5LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDI0MiwgNjcsIDExLCAyMzAsIDE0MywgNiwgNzQsIDExLCAyMzAsIDE0MywgNiwgMjM1LCAxNTAsIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjM1LCAyOSwgMTEsIDIzMCwgMTQzLCA2LCAxNTYsIDExLCAyMzAsIDE0MywgNiwgMTk0LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIzMCwgMzAsIDExLCAyMzAsIDE0MywgNiwgNzgsIDExLCAyMzAsIDE0MywgNiwgMjI2LCAxMDksIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjI0LCA5OSwgMTEsIDIzMCwgMTQzLCA2LCAxNTMsIDExLCAyMzAsIDE0MywgNiwgMjIyLCA5MywgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMTcsIDE1MywgMTEsIDIzMCwgMTQzLCA2LCA2OSwgMTEsIDIzMCwgMTQzLCA2LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTQzLCAKKyAgICA2LCAyMTIsIDk4LCAxMSwgMjMwLCAxNDMsIDYsIDIxMSwgMTc4LCAxMSwgMjMwLCAxNDMsIDYsIDIxMSwgMTE3LCAxMSwgCisgICAgMjMwLCAxNDMsIDYsIDIxMCwgMTU5LCAxMSwgMjMwLCAxNDMsIDQsIDYxLCAxMSwgMjMwLCAxNDMsIDQsIDI1MywgMTY2LCAKKyAgICAxMSwgMjMwLCAxNDMsIDQsIDI1MSwgNzQsIDExLCAyMzAsIDE0MywgNCwgMjQ5LCA2OCwgMTEsIDIzMCwgMTQzLCA0LCA3NiwgCisgICAgMTEsIDIzMCwgMTQzLCA0LCAyNDUsIDE0LCAxMSwgMjMwLCAxNDMsIDQsIDI0MywgMjA5LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDI0MiwgNjcsIDExLCAyMzAsIDE0MywgNCwgNzQsIDExLCAyMzAsIDE0MywgNCwgMjM1LCAxNTAsIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjM1LCAyOSwgMTEsIDIzMCwgMTQzLCA0LCAxNTYsIDExLCAyMzAsIDE0MywgNCwgMTk0LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIzMCwgMzAsIDExLCAyMzAsIDE0MywgNCwgNzgsIDExLCAyMzAsIDE0MywgNCwgMjI2LCAxMDksIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjI0LCA5OSwgMTEsIDIzMCwgMTQzLCA0LCAxNTMsIDExLCAyMzAsIDE0MywgNCwgMjIyLCA5MywgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDIzMCwgMTQzLCA0LCA2OSwgMTEsIDIzMCwgMTQzLCA0LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTQzLCAKKyAgICA0LCAyMTIsIDk4LCAxMSwgMjMwLCAxNDMsIDQsIDIxMSwgMTc4LCAxMSwgMjMwLCAxNDMsIDQsIDIxMSwgMTE3LCAxMSwgCisgICAgMjMwLCAxNDMsIDQsIDIxMCwgMTU5LCAxMSwgMzIsIDQsIDI0NywgMTI3LCA3NCwgMTEsIDMyLCA0LCAyNDcsIDEyNywgMjM1LCAKKyAgICAxNTAsIDExLCAyMywgNiwgMjU0LCAxNTEsIDExLCAyMywgNiwgMjUyLCAzNCwgMTEsIDIzLCA2LCAyNDMsIDExNCwgMTEsIAorICAgIDIzLCA2LCAyNDgsIDYyLCAxMSwgMjMsIDYsIDI0NSwgMTA4LCAxMSwgMjMsIDYsIDIxMCwgODUsIDExLCAyMywgNiwgMjQ1LCAKKyAgICA3MSwgMTEsIDIzLCA2LCAyMTYsIDE4MCwgMTEsIDIzLCA2LCAyMzUsIDE5MiwgMTEsIDIzLCA2LCAyMzQsIDIyOCwgMTEsIAorICAgIDIzLCA2LCAyMzMsIDEwNCwgMTEsIDIzLCA2LCAyMzAsIDEwNywgMTEsIDIzLCA2LCAyMjcsIDI0MiwgMTEsIDIzLCA2LCAKKyAgICAyMTEsIDE1NywgMTEsIDIzLCA2LCAyMjYsIDIwMywgMTEsIDIzLCA2LCAyMjUsIDExMSwgMTEsIDIzLCA2LCAyMjMsIDQwLCAKKyAgICAxMSwgMjMsIDYsIDIxNiwgMTgxLCA4NywgMTEsIDIzLCA2LCAyMTksIDE3OSwgMTEsIDIzLCA2LCAyMTcsIDQyLCAxMSwgMjMsIAorICAgIDYsIDIxNCwgMTU3LCAxMSwgMjMsIDYsIDIyNSwgMTM2LCAxMSwgMjMsIDYsIDI1MCwgMTE4LCAxMSwgMjMsIDYsIDIyNCwgCisgICAgMTY0LCAxMSwgMjMsIDYsIDIyNiwgMjA1LCAxMSwgMjMsIDIyOSwgMjI2LCAxMSwgMjMsIDQsIDI1NCwgMTUxLCAxMSwgMjMsIAorICAgIDQsIDI1MiwgMzQsIDExLCAyMywgNCwgMjQzLCAxMTQsIDExLCAyMywgNCwgMjQ4LCA2MiwgMTEsIDIzLCA0LCAyNDUsIDEwOCwgCisgICAgMTEsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDQsIDI0NSwgNzEsIDExLCAyMywgNCwgMjE2LCAxODAsIDExLCAyMywgNCwgCisgICAgMjM1LCAxOTIsIDExLCAyMywgNCwgMjM0LCAyMjgsIDExLCAyMywgNCwgMjMzLCAxMDQsIDExLCAyMywgNCwgMjMwLCAxMDcsIAorICAgIDExLCAyMywgNCwgMjI3LCAyNDIsIDExLCAyMywgNCwgMjExLCAxNTcsIDExLCAyMywgNCwgMjI2LCAyMDMsIDExLCAyMywgNCwgCisgICAgMjI1LCAxMTEsIDExLCAyMywgNCwgMjIzLCA0MCwgMTEsIDIzLCA0LCA0MCwgMjE5LCAxNzksIDExLCAyMywgNCwgMjE5LCAKKyAgICAxNzksIDExLCAyMywgNCwgMjE3LCA0MiwgMTEsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDIzLCA0LCAyMjUsIDEzNiwgMTEsIAorICAgIDIzLCA0LCAyNTAsIDExOCwgMTEsIDIzLCA0LCAyMjQsIDE2NCwgMTEsIDIzLCA0LCAyMjYsIDIwNSwgMTEsIDIzLCAyMjYsIAorICAgIDEsIDI0NywgMjQxLCAxMSwgMjMsIDI0NSwgMTA5LCA4NywgMTEsIDIzLCAyMTYsIDE4MSwgODcsIDExLCAyMywgMjM0LCAKKyAgICAyMjksIDg3LCAxMSwgMjMsIDIyNSwgMTM3LCA4NywgMTEsIDIzLCAyMjMsIDQxLCA4NywgMTEsIDIzLCAyMjUsIDExMiwgODcsIAorICAgIDExLCAzMiwgNiwgMjU0LCAxNTEsIDExLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDMyLCA2LCAyNDMsIDExNCwgMTEsIDMyLCA2LCAKKyAgICAyNDgsIDYyLCAxMSwgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMzIsIDYsIDIxMCwgODUsIDExLCAzMiwgNiwgMjQ1LCA3MSwgMTEsIAorICAgIDMyLCA2LCAyMTYsIDE4MCwgMTEsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDMyLCA2LCAyMzQsIDIyOCwgMTEsIDMyLCA2LCAKKyAgICAyMzMsIDEwNCwgMTEsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDMyLCA2LCAyMjcsIDI0MiwgMTEsIDMyLCA2LCAyMTEsIDE1NywgCisgICAgMTEsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDMyLCA2LCAyMjUsIDExMSwgMTEsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMzIsIDYsIAorICAgIDIxNiwgMTgxLCA4NywgMTEsIDMyLCA2LCAyMTksIDE3OSwgMTEsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMzIsIDYsIDIxNCwgCisgICAgMTU3LCAxMSwgMzIsIDYsIDIyNSwgMTM2LCAxMSwgMzIsIDYsIDI1MCwgMTE4LCAxMSwgMzIsIDYsIDIyNCwgMTY0LCAxMSwgCisgICAgMzIsIDYsIDIyNiwgMjA1LCAxMSwgMzIsIDIyOSwgMjI2LCAxMSwgMzIsIDQsIDI1NCwgMTUxLCAxMSwgMzIsIDQsIDI1MiwgCisgICAgMzQsIDExLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAzMiwgNCwgMjQ4LCA2MiwgMTEsIDMyLCA0LCAyNDUsIDEwOCwgMTEsIDMyLCAKKyAgICA0LCAyMTAsIDg1LCAxMSwgMzIsIDQsIDI0NSwgNzEsIDExLCAzMiwgNCwgMjE2LCAxODAsIDExLCAzMiwgNCwgMjM1LCAxOTIsIAorICAgIDExLCAzMiwgNCwgMjM0LCAyMjgsIDExLCAzMiwgNCwgMjMzLCAxMDQsIDExLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAzMiwgNCwgCisgICAgMjI3LCAyNDIsIDExLCAzMiwgNCwgMjExLCAxNTcsIDExLCAzMiwgNCwgMjI2LCAyMDMsIDExLCAzMiwgNCwgMjI1LCAxMTEsIAorICAgIDExLCAzMiwgNCwgMjIzLCA0MCwgMTEsIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzMiwgNCwgMjE5LCAxNzksIDExLCAzMiwgCisgICAgNCwgMjE3LCA0MiwgMTEsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDMyLCA0LCAyNTAsIAorICAgIDExOCwgMTEsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIDMyLCA0LCAyMjYsIDIwNSwgMTEsIDMyLCAyMjYsIDEsIDI0NywgMjQxLCAKKyAgICAxMSwgMzIsIDI0NSwgMTA5LCA4NywgMTEsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAzMiwgMjM0LCAyMjksIDg3LCAxMSwgMzIsIAorICAgIDIyNSwgMTM3LCA4NywgMTEsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDMyLCAyMjUsIDExMiwgODcsIDExLCAyMywgMzIsIDYsIAorICAgIDI1NCwgMTUxLCAxMSwgMjMsIDMyLCA2LCAyNTIsIDM0LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDExNCwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjQ4LCA2MiwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxMDgsIDExLCAyMywgMzIsIDYsIDIxMCwgODUsIDExLCAyMywgMzIsIDYsIAorICAgIDI0NSwgNzEsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgwLCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjM0LCAyMjgsIDExLCAyMywgMzIsIDYsIDIzMywgMTA0LCAxMSwgMjMsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDIzLCAzMiwgCisgICAgNiwgMjI3LCAyNDIsIDExLCAyMywgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDIzLCAKKyAgICAzMiwgNiwgMjI1LCAxMTEsIDExLCAyMywgMzIsIDYsIDIyMywgNDAsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgxLCA4NywgMTEsIAorICAgIDIzLCAzMiwgNiwgMjE5LCAxNzksIDExLCAyMywgMzIsIDYsIDIxNywgNDIsIDExLCAyMywgMzIsIDYsIDIxNCwgMTU3LCAxMSwgCisgICAgMjMsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDIzLCAzMiwgNiwgMjUwLCAxMTgsIDExLCAyMywgMzIsIDYsIDIyNCwgMTY0LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDIzLCAzMiwgMjI5LCAyMjYsIDExLCAyMywgMzIsIDQsIDI1NCwgMTUxLCAKKyAgICAxMSwgMjMsIDMyLCA0LCAyNTIsIDM0LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDExNCwgMTEsIDIzLCAzMiwgNCwgMjQ4LCA2MiwgCisgICAgMTEsIDIzLCAzMiwgNCwgMjQ1LCAxMDgsIDExLCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAyMywgMzIsIDQsIDI0NSwgNzEsIAorICAgIDExLCAyMywgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE5MiwgMTEsIDIzLCAzMiwgNCwgMjM0LCAKKyAgICAyMjgsIDExLCAyMywgMzIsIDQsIDIzMywgMTA0LCAxMSwgMjMsIDMyLCA0LCAyMzAsIDEwNywgMTEsIDIzLCAzMiwgNCwgCisgICAgMjI3LCAyNDIsIDExLCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDIwMywgMTEsIDIzLCAzMiwgCisgICAgNCwgMjI1LCAxMTEsIDExLCAyMywgMzIsIDQsIDIyMywgNDAsIDExLCAyMywgMzIsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjE5LCAxNzksIDExLCAyMywgMzIsIDQsIDIxNywgNDIsIDExLCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDIzLCAzMiwgNCwgMjUwLCAxMTgsIDExLCAyMywgMzIsIDQsIDIyNCwgMTY0LCAxMSwgCisgICAgMjMsIDMyLCA0LCAyMjYsIDIwNSwgMTEsIDIzLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDIzLCAzMiwgMjQ1LCAxMDksIAorICAgIDg3LCAxMSwgMjMsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAyMywgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDIzLCAzMiwgMjI1LCAKKyAgICAxMzcsIDg3LCAxMSwgMjMsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDIzLCAzMiwgMjI1LCAxMTIsIDg3LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNTQsIDE1MSwgMTEsIDM1LCAyMywgNiwgMjUyLCAzNCwgMTEsIDM1LCAyMywgNiwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIAorICAgIDYsIDI0OCwgNjIsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNDUsIDcxLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgNiwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIAorICAgIDYsIDIzNCwgMjI4LCAxMSwgMzUsIDIzLCA2LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgNiwgMjMwLCAxMDcsIDExLCAzNSwgCisgICAgMjMsIDYsIDIyNywgMjQyLCAxMSwgMzUsIDIzLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNiwgMjI2LCAyMDMsIDExLCAKKyAgICAzNSwgMjMsIDYsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCA2LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MSwgODcsIAorICAgIDExLCAzNSwgMjMsIDYsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCA2LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDE1NywgCisgICAgMTEsIDM1LCAyMywgNiwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDYsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCA2LCAyMjQsIAorICAgIDE2NCwgMTEsIDM1LCAyMywgNiwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDIyOSwgMjI2LCAxMSwgMzUsIDIzLCA0LCAyNTQsIAorICAgIDE1MSwgMTEsIDM1LCAyMywgNCwgMjUyLCAzNCwgMTEsIDM1LCAyMywgNCwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIDQsIDI0OCwgCisgICAgNjIsIDExLCAzNSwgMjMsIDQsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCA0LCAyNDUsIAorICAgIDcxLCAxMSwgMzUsIDIzLCA0LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgNCwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDQsIDIzNCwgCisgICAgMjI4LCAxMSwgMzUsIDIzLCA0LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgNCwgMjMwLCAxMDcsIDExLCAzNSwgMjMsIDQsIAorICAgIDIyNywgMjQyLCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNCwgMjI2LCAyMDMsIDExLCAzNSwgMjMsIAorICAgIDQsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCA0LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzNSwgCisgICAgMjMsIDQsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCA0LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAKKyAgICAyMywgNCwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDQsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCA0LCAyMjQsIDE2NCwgMTEsIAorICAgIDM1LCAyMywgNCwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAzNSwgMjMsIDI0NSwgMTA5LCAKKyAgICA4NywgMTEsIDM1LCAyMywgMjE2LCAxODEsIDg3LCAxMSwgMzUsIDIzLCAyMzQsIDIyOSwgODcsIDExLCAzNSwgMjMsIDIyNSwgCisgICAgMTM3LCA4NywgMTEsIDM1LCAyMywgMjIzLCA0MSwgODcsIDExLCAzNSwgMjMsIDIyNSwgMTEyLCA4NywgMTEsIDM1LCAyMywgCisgICAgMzIsIDYsIDI1NCwgMTUxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMTE0LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ4LCA2MiwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgNzEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM0LCAyMjgsIDExLCAzNSwgMjMsIDMyLCA2LCAKKyAgICAyMzMsIDEwNCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMCwgMTA3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI3LCAyNDIsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMjAzLCAxMSwgMzUsIDIzLCAzMiwgNiwgCisgICAgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxODEsIDg3LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MCwgMTE4LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNiwgMjI0LCAxNjQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDM1LCAyMywgMzIsIAorICAgIDIyOSwgMjI2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjU0LCAxNTEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTIsIDM0LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDgsIDYyLCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA3MSwgMTEsIDM1LCAKKyAgICAyMywgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzQsIAorICAgIDIyOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMywgMTA0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCAyMjcsIDI0MiwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAKKyAgICAyMDMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyMywgNDAsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA0LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgCisgICAgNDIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMjUwLCAxMTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgCisgICAgMjA1LCAxMSwgMzUsIDIzLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDM1LCAyMywgMzIsIDI0NSwgMTA5LCA4NywgMTEsIAorICAgIDM1LCAyMywgMzIsIDIxNiwgMTgxLCA4NywgMTEsIDM1LCAyMywgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDM1LCAyMywgMzIsIAorICAgIDIyNSwgMTM3LCA4NywgMTEsIDM1LCAyMywgMzIsIDIyMywgNDEsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAxMTIsIDg3LCAKKyAgICAxMSwgMjMsIDYsIDI0NywgMjM1LCAxMSwgMjMsIDQsIDI0NywgMjM1LCAxMSwgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMjMsIAorICAgIDIxLCAxMTEsIDExLCAyMywgMjEsIDEwNSwgMTEsIDIzLCAyMSwgMTU4LCAxMSwgMjMsIDIxLCAxNjEsIDExLCAyMywgMjEsIAorICAgIDE5MCwgMTEsIDIzLCAyMSwgMTk1LCAxMSwgMjMsIDIxLCAxOTksIDExLCAyMywgMjEsIDE5NiwgMTEsIDIzLCAyMSwgMjAxLCAKKyAgICAxMSwgMTM5LCAyMSwgMjEwLCA4NiwgMTEsIDEzOSwgMjEsIDExMSwgMTEsIDEzOSwgMjEsIDEwNSwgMTEsIDEzOSwgMjEsIAorICAgIDE1OCwgMTEsIDEzOSwgMjEsIDE2MSwgMTEsIDEzOSwgMjEsIDE5MCwgMTEsIDEzOSwgMjEsIDE5NSwgMTEsIDEzOSwgMjEsIAorICAgIDE5OSwgMTEsIDEzOSwgMjEsIDE5NiwgMTEsIDEzOSwgMjEsIDIwMSwgMTEsIDM1LCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMSwgCisgICAgMTExLCAxMSwgMzUsIDIxLCAxMDUsIDExLCAzNSwgMjEsIDE1OCwgMTEsIDM1LCAyMSwgMTYxLCAxMSwgMzUsIDIxLCAxOTAsIAorICAgIDExLCAzNSwgMjEsIDE5NSwgMTEsIDM1LCAyMSwgMTk5LCAxMSwgMzUsIDIxLCAxOTYsIDExLCAzNSwgMjEsIDIwMSwgMTEsIAorICAgIDM1LCAyMywgMjEsIDIxMCwgODYsIDExLCAzNSwgMjMsIDIxLCAxMTEsIDExLCAzNSwgMjMsIDIxLCAxMDUsIDExLCAzNSwgCisgICAgMjMsIDIxLCAxNTgsIDExLCAzNSwgMjMsIDIxLCAxNjEsIDExLCAzNSwgMjMsIDIxLCAxOTAsIDExLCAzNSwgMjMsIDIxLCAKKyAgICAxOTUsIDExLCAzNSwgMjMsIDIxLCAxOTksIDExLCAzNSwgMjMsIDIxLCAxOTYsIDExLCAzNSwgMjMsIDIxLCAyMDEsIDExLCAKKyAgICAyMzAsIDE0MywgMjEsIDIxMCwgODYsIDExLCAyMzAsIDE0MywgMjEsIDExMSwgMTEsIDIzMCwgMTQzLCAyMSwgMTA1LCAxMSwgCisgICAgMjMwLCAxNDMsIDIxLCAxNTgsIDExLCAyMzAsIDE0MywgMjEsIDE2MSwgMTEsIDIzMCwgMTQzLCAyMSwgMTkwLCAxMSwgMjMwLCAKKyAgICAxNDMsIDIxLCAxOTUsIDExLCAyMzAsIDE0MywgMjEsIDE5OSwgMTEsIDIzMCwgMTQzLCAyMSwgMTk2LCAxMSwgMjMwLCAxNDMsIAorICAgIDIxLCAyMDEsIDksIDExLCAyNTQsIDE3OSwgOSwgMTEsIDI1MiwgNjIsIDksIDExLCAyMzUsIDEyOSwgOSwgMTEsIDI0OCwgCisgICAgMjAzLCA5LCAxMSwgMjEyLCAzMCwgOSwgMTEsIDIxMCwgMTA4LCA5LCAxMSwgMjQyLCA0NCwgOSwgMTEsIDIxNywgODEsIDksIAorICAgIDExLCAyMTEsIDQzLCA5LCAxMSwgMjM1LCAwLCA5LCAxMSwgMjMzLCAxMDgsIDksIDExLCAyMzEsIDgzLCA5LCAxMSwgMjI4LCAKKyAgICA2NywgOSwgMTEsIDIyMSwgMTY4LCA5LCAxMSwgMjU0LCAyMDUsIDksIDExLCAyNDQsIDE1MCwgOSwgMTEsIDIyMiwgMjgsIDksIAorICAgIDExLCAyMjQsIDg0LCA5LCAxMSwgMjIzLCA5OCwgOSwgMTEsIDIyMCwgNjEsIDksIDExLCAyMTcsIDgsIDksIDExLCAyMTYsIAorICAgIDE5MywgOSwgMTEsIDIzNCwgMTM1LCA5LCAxMSwgMjE2LCAyMDMsIDksIDExLCAyNDgsIDIyNCwgOSwgMTEsIDIxMCwgMTExLCAKKyAgICA5LCAxMSwgMjQyLCAyNTEsIDksIDExLCAyNDcsIDEyNywgMjUyLCA2MiwgOSwgMTEsIDI0NywgMTI3LCAyMjgsIDY3LCA5LCAKKyAgICAxMSwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxMSwgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDExLCA2NSwgMjUyLCA2MiwgOSwgCisgICAgMTEsIDY1LCAyMzUsIDEyOSwgOSwgMTEsIDY1LCAyNDEsIDIyNSwgOSwgMTEsIDY1LCAyNDIsIDQ0LCA5LCAxMSwgNjUsIAorICAgIDIxMSwgNDMsIDksIDExLCA2NSwgMjM1LCAwLCA5LCAxMSwgNjUsIDIzMywgMTA4LCA5LCAxMSwgNjUsIDIzMSwgODMsIDksIAorICAgIDExLCA2NSwgMjI4LCA2NywgOSwgMTEsIDY1LCAyMjEsIDE2OCwgOSwgMTEsIDY1LCAyNTQsIDIwNSwgOSwgMTEsIDY1LCAKKyAgICAyNDQsIDE1MCwgOSwgMTEsIDY1LCAyMjIsIDI4LCA5LCAxMSwgNjUsIDIyNCwgODQsIDksIDExLCA2NSwgMjIwLCA2MSwgOSwgCisgICAgMTEsIDY1LCAyMTcsIDgsIDksIDExLCA2NSwgMjE2LCAxOTMsIDksIDExLCA2NSwgMjM0LCAxMzUsIDksIDExLCA2NSwgMjQ4LCAKKyAgICAyMjQsIDksIDExLCA2NSwgMjQyLCAyNTEsIDksIDExLCAyMTcsIDc3LCAyMzUsIDEyOSwgOSwgMTEsIDIxNywgNzcsIDI0MiwgCisgICAgNDQsIDksIDExLCAyMTcsIDc3LCAyMTEsIDQzLCA5LCAxMSwgMjE3LCA3NywgMjMzLCAxMDgsIDksIDExLCAyMTcsIDc3LCAKKyAgICAyMjgsIDY3LCA5LCAxMSwgMjE3LCA3NywgMjIxLCAxNjgsIDksIDExLCAyMTcsIDc3LCAyNTQsIDIwNSwgOSwgMTEsIDIxNywgCisgICAgNzcsIDIyMiwgMjgsIDksIDExLCAyMTcsIDc3LCAyMjQsIDg0LCA5LCAxMSwgMjE3LCA3NywgMjIwLCA2MSwgOSwgMTEsIAorICAgIDIxNywgNzcsIDIzNCwgMTM1LCA5LCAxMSwgMjE3LCA3NywgMjQ4LCAyMjQsIDksIDExLCAyMTcsIDc3LCAyNDIsIDI1MSwgOSwgCisgICAgMTEsIDIxNywgNzcsIDI0NywgMTI3LCAyMjgsIDY3LCA5LCAxMSwgMjE3LCA3NywgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDExLCAKKyAgICAyMTgsIDExMiwgMjUyLCA2MiwgOSwgMTEsIDIxOCwgMTEyLCAyMzUsIDEyOSwgOSwgMTEsIDIxOCwgMTEyLCAyNDEsIDIyNSwgCisgICAgOSwgMTEsIDIxOCwgMTEyLCAyNDIsIDQ0LCA5LCAxMSwgMjE4LCAxMTIsIDIxNywgODEsIDksIDExLCAyMTgsIDExMiwgMjExLCAKKyAgICA0MywgOSwgMTEsIDIxOCwgMTEyLCAyMzUsIDAsIDksIDExLCAyMTgsIDExMiwgMjMxLCA4MywgOSwgMTEsIDIxOCwgMTEyLCAKKyAgICAyMjgsIDY3LCA5LCAxMSwgMjE4LCAxMTIsIDIyMSwgMTY4LCA5LCAxMSwgMjE4LCAxMTIsIDI1NCwgMjA1LCA5LCAxMSwgCisgICAgMjE4LCAxMTIsIDI0NCwgMTUwLCA5LCAxMSwgMjE4LCAxMTIsIDIyMiwgMjgsIDksIDExLCAyMTgsIDExMiwgMjI0LCA4NCwgCisgICAgOSwgMTEsIDIxOCwgMTEyLCAyMjAsIDYxLCA5LCAxMSwgMjE4LCAxMTIsIDIxNywgOCwgOSwgMTEsIDIxOCwgMTEyLCAyMTYsIAorICAgIDE5MywgOSwgMTEsIDIxOCwgMTEyLCAyMzQsIDEzNSwgOSwgMTEsIDIxOCwgMTEyLCAyNDgsIDIyNCwgOSwgMTEsIDIxOCwgCisgICAgMTEyLCAyMTAsIDExMSwgOSwgMTEsIDIxOCwgMTEyLCAyNDIsIDI1MSwgOSwgMTEsIDIxOCwgMTEyLCAyNDcsIDEyNywgMjUyLCAKKyAgICA2MiwgOSwgMTEsIDIxOCwgMTEyLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDExLCAyMzIsIDEyOCwgMjU0LCAxNzksIDksIAorICAgIDExLCAyMzIsIDEyOCwgMjUyLCA2MiwgOSwgMTEsIDIzMiwgMTI4LCAyMzUsIDEyOSwgOSwgMTEsIDIzMiwgMTI4LCAyNDgsIAorICAgIDIwMywgOSwgMTEsIDIzMiwgMTI4LCAyNDEsIDIyNSwgOSwgMTEsIDIzMiwgMTI4LCAyMTIsIDMwLCA5LCAxMSwgMjMyLCAKKyAgICAxMjgsIDIxMCwgMTA4LCA5LCAxMSwgMjMyLCAxMjgsIDI0MiwgNDQsIDksIDExLCAyMzIsIDEyOCwgMjE3LCA4MSwgOSwgMTEsIAorICAgIDIzMiwgMTI4LCAyMTEsIDQzLCA5LCAxMSwgMjMyLCAxMjgsIDIzMywgMTA4LCA5LCAxMSwgMjMyLCAxMjgsIDIzMSwgODMsIAorICAgIDksIDExLCAyMzIsIDEyOCwgMjI4LCA2NywgOSwgMTEsIDIzMiwgMTI4LCAyMjEsIDE2OCwgOSwgMTEsIDIzMiwgMTI4LCAKKyAgICAyNTQsIDIwNSwgOSwgMTEsIDIzMiwgMTI4LCAyNDQsIDE1MCwgOSwgMTEsIDIzMiwgMTI4LCAyMjIsIDI4LCA5LCAxMSwgCisgICAgMjMyLCAxMjgsIDIyNCwgODQsIDksIDExLCAyMzIsIDEyOCwgMjIzLCA5OCwgOSwgMTEsIDIzMiwgMTI4LCAyMjAsIDYxLCA5LCAKKyAgICAxMSwgMjMyLCAxMjgsIDIxNywgOCwgOSwgMTEsIDIzMiwgMTI4LCAyMTYsIDE5MywgOSwgMTEsIDIzMiwgMTI4LCAyMzQsIAorICAgIDEzNSwgOSwgMTEsIDIzMiwgMTI4LCAyMTYsIDIwMywgOSwgMTEsIDIzMiwgMTI4LCAyNDgsIDIyNCwgOSwgMTEsIDIzMiwgCisgICAgMTI4LCAyMTAsIDExMSwgOSwgMTEsIDIzMiwgMTI4LCAyNDIsIDI1MSwgOSwgMTEsIDEzOSwgMjUyLCA2MiwgOSwgMTEsIAorICAgIDEzOSwgMjM1LCAxMjksIDksIDExLCAxMzksIDI0OCwgMjAzLCA5LCAxMSwgMTM5LCAyMTIsIDMwLCA5LCAxMSwgMTM5LCAKKyAgICAyMTAsIDEwOCwgOSwgMTEsIDEzOSwgMjQyLCA0NCwgOSwgMTEsIDEzOSwgMjE3LCA4MSwgOSwgMTEsIDEzOSwgMjExLCA0MywgCisgICAgOSwgMTEsIDEzOSwgMjMzLCAxMDgsIDksIDExLCAxMzksIDIzMSwgODMsIDksIDExLCAxMzksIDIyOCwgNjcsIDksIDExLCAKKyAgICAxMzksIDIyMSwgMTY4LCA5LCAxMSwgMTM5LCAyNTQsIDIwNSwgOSwgMTEsIDEzOSwgMjQ0LCAxNTAsIDksIDExLCAxMzksIAorICAgIDIyMiwgMjgsIDksIDExLCAxMzksIDIyNCwgODQsIDksIDExLCAxMzksIDIyMywgOTgsIDksIDExLCAxMzksIDIyMCwgNjEsIAorICAgIDksIDExLCAxMzksIDIxNywgOCwgOSwgMTEsIDEzOSwgMjE2LCAxOTMsIDksIDExLCAxMzksIDIzNCwgMTM1LCA5LCAxMSwgCisgICAgMTM5LCAyMTYsIDIwMywgOSwgMTEsIDEzOSwgMjQ4LCAyMjQsIDksIDExLCAxMzksIDIxMCwgMTExLCA5LCAxMSwgMTM5LCAKKyAgICAyNDIsIDI1MSwgOSwgMTEsIDIyNiwgMTcyLCA2NiwgMiwgMTIyLCAyLCAyMTcsIDQ0LCA5LCAxMSwgMjI2LCAxNzIsIDEyMiwgCisgICAgMiwgMjQ4LCAyMDMsIDIzMSwgMjEwLCA4NiwgMjQ1LCAyMjgsIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIxOSwgMzAsIAorICAgIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIxMiwgOSwgMjExLCAyMzksIDIzMSwgMjEwLCA4NiwgMjI4LCA2MSwgMjExLCAKKyAgICAyMzksIDIzMSwgMjEwLCA4NiwgMjIzLCAxMTQsIDI0NiwgMTA0LCAyMzEsIDIxMCwgODYsIDI0MiwgMTM0LCAyNDYsIDEwNCwgCisgICAgMjMxLCAyMTAsIDg2LCA3MSwgMjQ2LCAxMDQsIDIzMSwgMjEwLCA4NiwgMTIzLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCAKKyAgICA4NiwgMTEzLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMTM0LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ0LCAxOSwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDI0NCwgODksIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMTksIDEyNywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDIyMCwgMTI0LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCAKKyAgICA4NiwgMjQ1LCAyMDEsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MCwgMTQ5LCAyMzEsIAorICAgIDIxMCwgODYsIDEyMywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDExMywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgCisgICAgODYsIDEzNCwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDI0NCwgMTksIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDg5LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMjE5LCAxMjcsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIAorICAgIDg2LCAyMjAsIDEyNCwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDI0NSwgMjAxLCA2NCwgMjUyLCAxNjEsIDIzMSwgCisgICAgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAxMjMsIDY0LCAyNTAsIDQyLCAyMzEsIAorICAgIDIxMCwgODYsIDExMywgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMTM0LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDE5LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyNDQsIDg5LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMTksIDEyNywgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjIwLCAxMjQsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDI0NSwgMjAxLCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjI1LCAyOCwgMjMxLCAyMTAsIDg2LCAyMjYsIDE2MCwgMjMxLCAyMTAsIDg2LCAyNTIsIDE2MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTAsIDc4LCAyMzEsIDIxMCwgODYsIDIxOCwgMjQxLCAyMzEsIDIxMCwgODYsIDIxOCwgNDAsIDIzMSwgMjEwLCA4NiwgCisgICAgMjUzLCAxODcsIDIzMSwgMjEwLCA4NiwgMjExLCAyMzIsIDIzMSwgMjEwLCA4NiwgMjM1LCA2OCwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTIsIDE5MiwgMTMxLCA4NiwgMjAzLCAyNTIsIDE5MiwgMTMxLCA4NiwgMjQxLCA1MCwgMTMxLCA4NiwgMjQxLCA0OSwgCisgICAgMTMxLCA4NiwgMjQxLCA0OCwgMTMxLCA4NiwgMjQxLCA0NywgMTMxLCA4NiwgMjQxLCA0NiwgMTMxLCA4NiwgMjQxLCA0NSwgCisgICAgMTMxLCA4NiwgMjQxLCA0NCwgMTMxLCA4NiwgMjQxLCA0MywgMTMxLCA4NiwgMjQxLCA0MiwgMTMxLCA4NiwgMjQxLCA0MSwgCisgICAgMTMxLCA4NiwgMjQxLCA0MCwgMTMxLCA4NiwgMjQxLCAzOSwgMTMxLCA4NiwgMjQxLCAzOCwgMTMxLCA4NiwgMjQxLCAzNywgCisgICAgMTMxLCA4NiwgMjQxLCAzNiwgMTMxLCA4NiwgMjQxLCAzNSwgMTMxLCA4NiwgMjQxLCAzNCwgMTMxLCA4NiwgMjQxLCAzMywgCisgICAgMTMxLCA4NiwgMjQxLCAzMiwgMTMxLCA4NiwgMjQxLCAzMSwgMTMxLCA4NiwgMjQxLCAzMCwgMTMxLCA4NiwgMjQxLCAyOSwgCisgICAgMTMxLCA4NiwgMjQxLCAyOCwgMTMxLCA4NiwgMjQxLCAyNywgMTMxLCA4NiwgMjQxLCAyNiwgMTMxLCA4NiwgMjQxLCAyNSwgCisgICAgMTMxLCA4NiwgMjQxLCAyNCwgMTMxLCA4NiwgMjQxLCAyMywgMTMxLCA4NiwgMjQxLCAyMiwgMTMxLCA4NiwgMjQxLCAyMSwgCisgICAgMTMxLCA4NiwgMjQxLCAyMCwgMTMxLCA4NiwgMjQxLCAxOSwgMTMxLCA4NiwgMjQxLCAxOCwgMTMxLCA4NiwgMjQxLCAxNywgCisgICAgMTMxLCA4NiwgMjQxLCAxNiwgMTMxLCA4NiwgMjQxLCAxNSwgMTMxLCA4NiwgMjQxLCAxNCwgMTMxLCA4NiwgMjQxLCAxMywgCisgICAgMTMxLCA4NiwgMjQxLCAxMiwgMTMxLCA4NiwgMjQxLCAxMSwgMTMxLCA4NiwgMjQxLCAxMCwgMTMxLCA4NiwgMjQxLCA5LCAKKyAgICAxMzEsIDg2LCAyNDEsIDgsIDEzMSwgODYsIDI0MSwgNywgMTMxLCA4NiwgMjQxLCA2LCAxMzEsIDg2LCAyNDEsIDUsIDEzMSwgCisgICAgODYsIDI0MSwgNCwgMTMxLCA4NiwgMjQxLCAzLCAxMzEsIDg2LCAyNDEsIDIsIDEzMSwgODYsIDY3LCAyNTIsIDE5MiwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMzgsIDEzMSwgODYsIDIxMywgMjM3LCAxMzEsIDg2LCAyMTMsIDIzNiwgMTMxLCA4NiwgMjEzLCAyMzUsIAorICAgIDEzMSwgODYsIDIxMywgMjM0LCAxMzEsIDg2LCAyMTMsIDIzMywgMTMxLCA4NiwgMjEzLCAyMzIsIDEzMSwgODYsIDIxMywgCisgICAgMjMxLCAxMzEsIDg2LCAyMTMsIDIzMCwgMTMxLCA4NiwgMjEzLCAyMjksIDEzMSwgODYsIDIxMywgMjI4LCAxMzEsIDg2LCAKKyAgICAyMTMsIDIyNywgMTMxLCA4NiwgMjEzLCAyMjYsIDEzMSwgODYsIDIxMywgMjI1LCAxMzEsIDg2LCAyMTMsIDIyNCwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMjMsIDEzMSwgODYsIDIxMywgMjIyLCAxMzEsIDg2LCAyMTMsIDIyMSwgMTMxLCA4NiwgMjEzLCAyMjAsIAorICAgIDEzMSwgODYsIDIxMywgMjE5LCAxMzEsIDg2LCAyMTMsIDIxOCwgMTMxLCA4NiwgMjEzLCAyMTcsIDEzMSwgODYsIDIxMywgCisgICAgMjE2LCAxMzEsIDg2LCAyMTMsIDIxNSwgMTMxLCA4NiwgMjEzLCAyMTQsIDEzMSwgODYsIDIxMywgMjEzLCAxMzEsIDg2LCAKKyAgICAyMTMsIDIxMiwgMTMxLCA4NiwgMjEzLCAyMTEsIDEzMSwgODYsIDIxMywgMjEwLCAxMzEsIDg2LCAyMTMsIDIwOSwgMTMxLCAKKyAgICA4NiwgMjEzLCAyMDgsIDEzMSwgODYsIDIxMywgMjA3LCAxMzEsIDg2LCAyMTMsIDIwNiwgMTMxLCA4NiwgMjEzLCAyMDUsIAorICAgIDEzMSwgODYsIDIxMywgMjA0LCAxMzEsIDg2LCAyMTMsIDIwMywgMTMxLCA4NiwgMjEzLCAyMDIsIDEzMSwgODYsIDIxMywgCisgICAgMjAxLCAxMzEsIDg2LCAyMTMsIDIwMCwgMTMxLCA4NiwgMjEzLCAxOTksIDEzMSwgODYsIDIxMywgMTk4LCAxMzEsIDg2LCAKKyAgICAyMTMsIDE5NywgMTMxLCA4NiwgMjEzLCAxOTYsIDEzMSwgODYsIDIxMywgMTk1LCAxMzEsIDg2LCAyMTMsIDE5NCwgMTMxLCAKKyAgICA4NiwgMjEzLCAxOTMsIDEzMSwgODYsIDIxMywgMTkyLCAxMzEsIDg2LCAyMTMsIDE5MSwgMTMxLCA4NiwgMjEzLCAxOTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTIsIDE5MiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyMTksIDE3LCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMTEzLCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDIxOSwgMTcsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAKKyAgICAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgCisgICAgMjIwLCAxMjQsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjI4LCAyMDUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyMTksIAorICAgIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCAzNywgCisgICAgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDIzNCwgODUsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMTEzLCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyNDEsIDIzMiwgMjI1LCAKKyAgICAzNiwgMjUwLCAyNTEsIDI0NCwgMTksIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAyNDEsIAorICAgIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjAsIAorICAgIDEyNCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIyOCwgMjA1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIDI0OSwgNjQsIDI0MSwgCisgICAgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgCisgICAgMzcsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDIzNCwgODUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDcsIDI1NSwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDExMywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIAorICAgIDg5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjIwLCAxMjQsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjgsIDIwNSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAKKyAgICAyNDksIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMzQsIDM3LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQ3LCAKKyAgICAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDg1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCA4NSwgCisgICAgMjM1LCA2OCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDExMywgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyNDQsIDE5LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgMjQ5LCAyNTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjIwLCAxMjQsIAorICAgIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMjgsIDIwNSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyNDksIDI1MCwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDM3LCAKKyAgICA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMzQsIDg1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCA3MSwgMjM1LCA2OCwgMjEsIDIxMCwgODcsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDIxMCwgODcsIDI0OSwgMjI3LCAyMSwgMTIzLCAyNDksIDIyNywgMjEsIDExMywgCisgICAgMjQ5LCAyMjcsIDIxLCAxMzQsIDI0OSwgMjI3LCAyMSwgMjQ0LCAxOSwgMjQ5LCAyMjcsIDIxLCAyNDQsIDg5LCAyNDksIAorICAgIDIyNywgMjEsIDIxOSwgMTI3LCAyNDksIDIyNywgMjEsIDIyMCwgMTI0LCAyNDksIDIyNywgMjEsIDI0NSwgMjAxLCAyNDksIAorICAgIDIyNywgMjEsIDIyOCwgMjA1LCAyNDksIDIyNywgODgsIDcsIDYsIDEsIDYxLCA4OCwgNywgNiwgMSwgMjUzLCAxNjYsIDg4LCAKKyAgICA3LCA2LCAxLCAyNTEsIDc0LCA4OCwgNywgNiwgMSwgMjQ5LCA2OCwgODgsIDcsIDYsIDEsIDc2LCA4OCwgNywgNiwgMSwgCisgICAgMjQ1LCAxNCwgODgsIDcsIDYsIDEsIDI0MywgMjA5LCA4OCwgNywgNiwgMSwgMjQyLCA2NywgODgsIDcsIDYsIDEsIDc0LCAKKyAgICA4OCwgNywgNiwgMSwgMjM1LCAxNTAsIDg4LCA3LCA2LCAxLCAyMzUsIDI5LCA4OCwgNywgNiwgMSwgMTU2LCA4OCwgNywgNiwgCisgICAgMSwgMTk0LCA4OCwgNywgNiwgMSwgMjMwLCAzMCwgODgsIDcsIDYsIDEsIDc4LCA4OCwgNywgNiwgMSwgMjI2LCAxMDksIDg4LCAKKyAgICA3LCA2LCAxLCAyMjQsIDk5LCA4OCwgNywgNiwgMSwgMTUzLCA4OCwgNywgNiwgMSwgMjIyLCA5MywgODgsIDcsIDYsIDEsIAorICAgIDIxNywgMTUzLCA4OCwgNywgNiwgMSwgNjksIDg4LCA3LCA2LCAxLCAyMTQsIDEwNSwgODgsIDcsIDYsIDEsIDIxMiwgOTgsIAorICAgIDg4LCA3LCA2LCAxLCAyMTEsIDE3OCwgODgsIDcsIDYsIDEsIDIxMSwgMTE3LCA4OCwgNywgNiwgMSwgMjEwLCAxNTksIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDcsIDYsIDEsIDIyMiwgOTMsIDM3LCAzMiwgNywgNiwgMSwgMjUxLCA3NCwgMzcsIDMyLCAKKyAgICA3LCA2LCAxLCAxNTMsIDM3LCAyNTAsIDE5OSwgMzcsIDIxMSwgMTgwLCA5MiwgNywgNiwgMSwgNjEsIDkyLCA3LCA2LCAxLCAKKyAgICAyNTMsIDE2NiwgOTIsIDcsIDYsIDEsIDI1MSwgNzQsIDkyLCA3LCA2LCAxLCAyNDksIDY4LCA5MiwgNywgNiwgMSwgNzYsIAorICAgIDkyLCA3LCA2LCAxLCAyNDUsIDE0LCA5MiwgNywgNiwgMSwgMjQzLCAyMDksIDkyLCA3LCA2LCAxLCAyNDIsIDY3LCA5MiwgNywgCisgICAgNiwgMSwgNzQsIDkyLCA3LCA2LCAxLCAyMzUsIDE1MCwgOTIsIDcsIDYsIDEsIDIzNSwgMjksIDkyLCA3LCA2LCAxLCAxNTYsIAorICAgIDkyLCA3LCA2LCAxLCAxOTQsIDkyLCA3LCA2LCAxLCAyMzAsIDMwLCA5MiwgNywgNiwgMSwgNzgsIDkyLCA3LCA2LCAxLCAKKyAgICAyMjYsIDEwOSwgOTIsIDcsIDYsIDEsIDIyNCwgOTksIDkyLCA3LCA2LCAxLCAxNTMsIDkyLCA3LCA2LCAxLCAyMjIsIDkzLCAKKyAgICA5MiwgNywgNiwgMSwgMjE3LCAxNTMsIDkyLCA3LCA2LCAxLCA2OSwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCA5MiwgNywgNiwgCisgICAgMSwgMjEyLCA5OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCA5MiwgNywgNiwgMSwgMjExLCAxMTcsIDkyLCA3LCA2LCAxLCAKKyAgICAyMTAsIDE1OSwgOTIsIDI0MCwgMjA4LCA5MiwgMjMwLCA1NCwgOTIsIDIyMSwgMTg1LCA5MiwgMjE4LCAyMjgsIDkyLCAyMjQsIAorICAgIDIyMSwgOTIsIDIxMiwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDYxLCAxNTIsIDM3LCA3LCA2LCAxLCAyNTMsIDE2NiwgMTUyLCAKKyAgICAzNywgNywgNiwgMSwgMjUxLCA3NCwgMTUyLCAzNywgNywgNiwgMSwgMjQ5LCA2OCwgMTUyLCAzNywgNywgNiwgMSwgNzYsIAorICAgIDE1MiwgMzcsIDcsIDYsIDEsIDI0NSwgMTQsIDE1MiwgMzcsIDcsIDYsIDEsIDI0MywgMjA5LCAxNTIsIDM3LCA3LCA2LCAxLCAKKyAgICAyNDIsIDY3LCAxNTIsIDM3LCA3LCA2LCAxLCA3NCwgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAxNTAsIDE1MiwgMzcsIDcsIDYsIAorICAgIDEsIDIzNSwgMjksIDE1MiwgMzcsIDcsIDYsIDEsIDE1NiwgMTUyLCAzNywgNywgNiwgMSwgMTk0LCAxNTIsIDM3LCA3LCA2LCAKKyAgICAxLCAyMzAsIDMwLCAxNTIsIDM3LCA3LCA2LCAxLCA3OCwgMTUyLCAzNywgNywgNiwgMSwgMjI2LCAxMDksIDE1MiwgMzcsIDcsIAorICAgIDYsIDEsIDIyNCwgOTksIDE1MiwgMzcsIDcsIDYsIDEsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgMjIyLCA5MywgMTUyLCAzNywgCisgICAgNywgNiwgMSwgMjE3LCAxNTMsIDE1MiwgMzcsIDcsIDYsIDEsIDY5LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTUyLCAKKyAgICAzNywgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMSwgCisgICAgMTE3LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjIzLCAxNjAsIDIzMSwgMTAyLCA1MCwgMjIzLCAxNjAsIDIzMSwgCisgICAgOTksIDUwLCAxNTIsIDkyLCA3LCA2LCAxLCA2MSwgMTUyLCA5MiwgNywgNiwgMSwgMjUzLCAxNjYsIDE1MiwgOTIsIDcsIDYsIAorICAgIDEsIDI1MSwgNzQsIDE1MiwgOTIsIDcsIDYsIDEsIDI0OSwgNjgsIDE1MiwgOTIsIDcsIDYsIDEsIDc2LCAxNTIsIDkyLCA3LCAKKyAgICA2LCAxLCAyNDUsIDE0LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDMsIDIwOSwgMTUyLCA5MiwgNywgNiwgMSwgMjQyLCA2NywgCisgICAgMTUyLCA5MiwgNywgNiwgMSwgNzQsIDE1MiwgOTIsIDcsIDYsIDEsIDIzNSwgMTUwLCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIAorICAgIDI5LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTYsIDE1MiwgOTIsIDcsIDYsIDEsIDE5NCwgMTUyLCA5MiwgNywgNiwgMSwgMjMwLCAKKyAgICAzMCwgMTUyLCA5MiwgNywgNiwgMSwgNzgsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA5LCAxNTIsIDkyLCA3LCA2LCAxLCAKKyAgICAyMjQsIDk5LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTMsIDE1MiwgOTIsIDcsIDYsIDEsIDIyMiwgOTMsIDE1MiwgOTIsIDcsIDYsIAorICAgIDEsIDIxNywgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCA2OSwgMTUyLCA5MiwgNywgNiwgMSwgMjE0LCAxMDUsIDE1MiwgOTIsIAorICAgIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDExNywgCisgICAgMTUyLCA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDI0OSwgMTM2LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwOSwgMTUyLCAKKyAgICA5MiwgMjQwLCAxMjAsIDE1MiwgOTIsIDE5MSwgMTUyLCA5MiwgMjA2LCAxNTIsIDkyLCAyNTUsIDM0LCAxNTIsIDkyLCAyMTIsIAorICAgIDIzLCA0MiwgMjQ3LCAxNzIsIDkyLCAyNTAsIDMxLCA5MiwgMjQ5LCAxNzgsIDkyLCAyNDQsIDQsIDkyLCAyNDAsIDExMiwgCisgICAgOTIsIDIyOSwgOTEsIDkyLCAyMjksIDg0LCA5MiwgMjI2LCAyMTgsIDkyLCAyMTksIDM3LCA5MiwgMTIwLCAyLCAyNDUsIDM5LCAKKyAgICA3OSwgOTIsIDIxMywgMTE5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA2MSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgCisgICAgMSwgMjUzLCAxNjYsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDI1MSwgNzQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIAorICAgIDEsIDI0OSwgNjgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc2LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAKKyAgICAyNDUsIDE0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyNDMsIDIwOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgCisgICAgMjQyLCA2NywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIzNSwgCisgICAgMTUwLCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMzUsIDI5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxNTYsIAorICAgIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDE5NCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjMwLCAzMCwgMjIzLCAKKyAgICAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIyNiwgMTA5LCAyMjMsIDEwNiwgCisgICAgMjM1LCAyNDYsIDE2LCAxLCAyMjQsIDk5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxNTMsIDIyMywgMTA2LCAyMzUsIAorICAgIDI0NiwgMTYsIDEsIDIyMiwgOTMsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxNywgMTUzLCAyMjMsIDEwNiwgMjM1LCAKKyAgICAyNDYsIDE2LCAxLCA2OSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjE0LCAxMDUsIDIyMywgMTA2LCAyMzUsIDI0NiwgCisgICAgMTYsIDEsIDIxMiwgOTgsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxMSwgMTc4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIAorICAgIDE2LCAxLCAyMTEsIDExNywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjEwLCAxNTksIDQyLCAxNDEsIDI0MSwgNzAsIAorICAgIDkyLCA1NiwgMjM0LCAyNCwgOTIsIDU2LCAyMDYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTcsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjksIDkyLCA1NiwgMjQ4LCA5OCwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA3NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNSwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA2MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA0OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1MSwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA3MiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1MCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICAzNiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNCwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2NCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1MywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA3OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzMiwgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA1OSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA3NywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2OCwgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA1NCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzMywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA1NiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzOCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAzNywgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2NywgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0NywgOTIsIAorICAgIDEwLCAyMTQsIDE3NywgMjM4LCA0OCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA0MCwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCAKKyAgICA3MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2NSwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAKKyAgICAyMzgsIDQ2LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzgsIDIxNiwgNywgMjIwLCAKKyAgICA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA3NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDYwLCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNDMsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA1NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIAorICAgIDIxNCwgMTc3LCAyMzgsIDM5LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzAsIDIxNiwgCisgICAgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA1MiwgMzcsIDE1NCwgMjU0LCAyNTQsIDM3LCAxNTQsIAorICAgIDI1NSwgMjEsIDI0OSwgNzksIDI0NCwgNTAsIDI1MCwgOCwgMjE0LCAxOTQsIDIyOCwgMjE4LCAyLCAyMTgsIDE1NSwgMjE4LCAKKyAgICAzNCwgMTE1LCAyMzAsIDExOSwgMjE4LCAzMywgMjUwLCAzNCwgMjUzLCAyMTUsIDI0NiwgNjIsIDIxOCwgMzIsIDExNSwgCisgICAgMjUxLCAxMjYsIDIyMywgMTYxLCAyNTEsIDE0OCwgMjUzLCAyMTUsIDIyOCwgMjE3LCAyMTIsIDQxLCAyMTIsIDM1LCAyMTMsIAorICAgIDEzMSwgMjMwLCAyMDAsIDIxMiwgMjUsIDI0NSwgMjMyLCAyNDIsIDE4OCwgMjQ1LCA1MywgMjQ1LCAyMzIsIDI0MiwgMTg4LCAKKyAgICAyNTQsIDEzNiwgMjQ1LCAyMzIsIDI0MiwgMTg4LCAyNTMsIDIzMywgMjQyLCAxODgsIDIsIDIzMSwgNTYsIDE2NiwgMjMwLCAKKyAgICAxMzQsIDg3LCAyMTIsIDI3LCAyNDksIDE0NSwgMjMwLCAxMzQsIDg3LCAyNDQsIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzQsIAorICAgIDg3LCAyMTIsIDI3LCAyNDIsIDIxNywgMjMwLCAxMzQsIDg3LCAyNDMsIDIzNiwgMjMwLCAxMzQsIDg3LCAyMTIsIDUyLCAKKyAgICAyNDIsIDIxNywgMjMwLCAxMzQsIDg3LCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzNCwgODcsIDIxMiwgNTIsIDI0OSwgCisgICAgMTQ1LCAyMzAsIDEzNCwgODcsIDI0OSwgMTQ1LCAyMzAsIDEzMywgMTY2LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDI0NCwgCisgICAgMTAwLCAyMjQsIDI1LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDIzMywgODYsIDIyNCwgMjUsIDIzMCwgMTM0LCAyLCAyNDQsIAorICAgIDE5OCwgMjQzLCAyMzYsIDIzMCwgMTM0LCAyLCAyNDQsIDE5OCwgMjE4LCAzOSwgMiwgMjQ0LCAxOTgsIDI0MiwgMTg2LCAKKyAgICAyMTgsIDE1OCwgMjIwLCAxLCAyMTgsIDE1OCwgMjUwLCAxMjQsIDIyMSwgMTcwLCAyNDUsIDQ3LCAyMTUsIDIzNiwgMjQ4LCAKKyAgICA5MiwgMjE1LCAyMzYsIDIyNiwgNjMsIDIxNSwgMjM2LCAyNTEsIDM1LCAyMTUsIDExMCwgMjUwLCAxMjYsIDI1MSwgMjE4LCAKKyAgICAyMjIsIDE5MywgMjQxLCAxODYsIDIxOCwgMzcsIDI1MSwgMjE4LCAyNDUsIDIzNiwgNjQsIDIzMSwgMTk5LCAyNDUsIDIzNiwgCisgICAgNjQsIDIyMywgMzQsIDI0MSwgMjExLCAyNDQsIDE5LCAyMzMsIDYwLCAyNDksIDI1NCwgMjMxLCAxNzUsIDIzMywgNTksIAorICAgIDI0NCwgMTg0LCAyMzMsIDU5LCAyMzMsIDYwLCAyNDQsIDU1LCAyMzYsIDcsIDIxMSwgMjM5LCAyMzAsIDYzLCAyMTYsIDM1LCAKKyAgICAyNTMsIDE5OSwgMjQyLCAxNTAsIDIzMSwgNzIsIDIxMiwgMzksIDIxNywgNTgsIDIzMywgMzIsIDI1MiwgMTU3LCAyMjUsIAorICAgIDY1LCAyMjMsIDExNCwgMjU0LCA2MiwgMjQyLCAxMzQsIDI1NCwgNjIsIDIyNSwgMjIwLCAyMjUsIDIyMSwgMjUwLCAxMjcsIAorICAgIDIxOCwgMTE2LCAyNDIsIDMwLCAyMTksIDkyLCA2NCwgMjI1LCA0NywgMjMxLCA5MiwgMjI2LCAyMDEsIDI1MSwgMjAyLCAKKyAgICAyMjQsIDIzMiwgMjMzLCA0MiwgMjIzLCAzNSwgMjQ5LCAxNTAsIDIyMywgMzUsIDI1MiwgMTY3LCAyNDksIDE4MSwgMjIzLCAKKyAgICAzNCwgMjQ5LCAxMDMsIDIyLCAyMjMsIDM0LCAyMTgsIDE0MywgMjUxLCAxNzUsIDIxOSwgMTYsIDI1MSwgMTU5LCAyNDQsIDMsIAorICAgIDI0MywgMjU1LCAyMjIsIDIwOSwgMjE3LCAyNDcsIDIyNCwgMjM0LCAyNDgsIDE4MywgMjI2LCAyNDAsIDIxOCwgOCwgMjQ0LCAKKyAgICAwLCAyMTksIDIzMiwgMjQ0LCA5OSwgMjUxLCAyOSwgMiwgMjE3LCAyNDAsIDI0OCwgNDMsIDIxOSwgNTQsIDI0MCwgMTE5LCAKKyAgICAyNDksIDE0OSwgMjIwLCA3MiwgMjQwLCAxMTgsIDI0MCwgMTE5LCAyNDksIDE0OSwgMjQ2LCAxMTYsIDI0OSwgMTgwLCAyNTAsIAorICAgIDkyLCAxMzAsIDI1MSwgNiwgMjMyLCAxNDcsIDI0OSwgOTYsIDI0MSwgNjIsIDIyNCwgMjM2LCAyMTksIDI0MiwgMjUyLCA0NCwgCisgICAgMjUxLCAxNzEsIDIyNCwgMjM3LCA2NCwgMjQ0LCA0MSwgMjQ5LCAxNzksIDI0NCwgMzIsIDIyLCAyMzQsIDM4LCAyMTcsIDIwLCAKKyAgICAyMTEsIDIzMCwgMjQyLCAyMCwgMjIyLCAxNCwgMjUxLCAxODUsIDIyLCAyNDksIDExMCwgMjExLCAyMzcsIDI0MiwgMTkxLCAKKyAgICAyNDksIDI0MywgMjQyLCAxOTEsIDIxNSwgMTk0LCAyNDYsIDk4LCAyNTIsIDcwLCAyMzAsIDk4LCAyNTAsIDE1LCAyNTIsIAorICAgIDcwLCAyMzAsIDk3LCAyNTIsIDE5NSwgMjUxLCAxODQsIDIyMywgMzYsIDIxMSwgMjAxLCAyMjQsIDE5OCwgMjUxLCAyNDMsIAorICAgIDI1MSwgMjgsIDIzNSwgMTQ0LCAyNTAsIDg1LCAyMTUsIDIzNiwgMjQ0LCAxNzAsIDI1MCwgODQsIDI0NCwgMTAyLCAyNDQsIAorICAgIDEwMywgMjE5LCAxNCwgMjUyLCAxNjYsIDIyNSwgMjU0LCAyMjQsIDI0NywgMjQ5LCAyMTIsIDI1MiwgMTY3LCAyMTcsIDYwLCAKKyAgICAyMTUsIDIzNiwgMjQ5LCAxMzYsIDI0NCwgNzUsIDIyNSwgNjYsIDI0OCwgODksIDIzNSwgMTM3LCAyNDcsIDEzOSwgMjUwLCAKKyAgICAyNDAsIDIxOCwgMTE1LCAyMTEsIDI0MCwgMjUwLCAxMDYsIDIzMCwgMTM0LCAyMTMsIDE2NCwgMjUwLCAxNzAsIDIyMSwgCisgICAgMjAxLCAyMjEsIDIyNiwgMjQyLCAxNTUsIDI1MSwgMywgMjUwLCAyNDEsIDI0MCwgMjUyLCAyNDQsIDEzOCwgMjEyLCAwLCAKKyAgICAyMjIsIDIwMiwgMjQ5LCAyNDQsIDI0NCwgOTQsIDIyNSwgNSwgMjIsIDI0NCwgOTgsIDIzMCwgMjMyLCAyMzAsIDExMywgCisgICAgMjUxLCAxOCwgMjUwLCA0NywgMjQxLCAyMzksIDI1MywgMjQ5LCAyMjYsIDY2LCAyMTYsIDE1LCAyNDIsIDIsIDI1MCwgMzcsIAorICAgIDIxNiwgMjQzLCAyMTYsIDExNCwgMjUwLCAyOCwgMjUxLCAyMTAsIDIyNSwgMTgwLCAyNTMsIDI0OCwgMjEzLCAxNzIsIDI0MywgCisgICAgMTE3LCAyNDcsIDIwNSwgMjQxLCAxNjMsIDIxOSwgODYsIDIzMSwgMjM5LCAyNTEsIDI1MywgMjQzLCAxMTgsIDI0NywgMjQ4LCAKKyAgICAyNTEsIDE3NCwgMjQ0LCA2MCwgMjI1LCAzNiwgMjUwLCAyNDksIDI4LCAyMjgsIDUyLCAyMzAsIDkwLCAyOCwgMjI4LCA0NywgCisgICAgMjIxLCAyMTQsIDI0MiwgMTA2LCAyOCwgMjM0LCAxNDMsIDIxNSwgMTkxLCAyMTMsIDE1NCwgMjgsIDIyMSwgMTk0LCAyMjIsIAorICAgIDEyNiwgMjIwLCAxMywgMiwgMjIxLCAyMjksIDIxNiwgMjQ1LCAyMjMsIDE4MSwgMjIsIDI1MiwgMTY3LCAyMTksIDEwNywgCisgICAgMjIsIDIxOSwgMTA3LCAyNTEsIDE5NSwgMjUyLCAxMzEsIDIyLCAyNDEsIDU2LCAyNTAsIDEyOCwgMjQ0LCA4MSwgMjE5LCAKKyAgICA2NSwgMjIyLCAxMjcsIDIxOCwgMTMsIDIxNSwgMTk1LCAyNDAsIDI1MywgMjIzLCAxODIsIDI1NCwgMTM3LCAyNDQsIDM5LCAKKyAgICAyMjIsIDEzOCwgMjQ0LCAzOSwgMjE3LCAyNDIsIDI0MCwgMjQyLCAyNTEsIDEyNywgMjQwLCAyNDIsIDIsIDI0MywgMTAxLCAKKyAgICAyMjYsIDIzMywgMjUxLCAxMjcsIDIzNSwgMTM3LCAyMjQsIDI0MiwgMjI2LCAyMzIsIDI0NSwgNTIsIDIyNCwgMjQyLCAyMjYsIAorICAgIDIzMiwgMjQwLCAyNTEsIDI1MiwgMTUzLCAyNTMsIDE4OSwgMjE2LCAyNTMsIDIzMSwgMjM5LCAyNDAsIDI0NywgMjMyLCAKKyAgICAxMTcsIDI0MCwgMjQ3LCAyNDksIDE4NCwgMjE4LCAxMjcsIDIyMSwgMjAwLCAyNDgsIDUxLCAyMTgsIDEyNywgMjQ0LCAxODgsIAorICAgIDIzNSwgMTU1LCAyMzMsIDk1LCAyMzUsIDEzNywgMjUwLCAyMzQsIDI0NSwgNTIsIDI1MCwgMjM0LCAyMjMsIDE0NCwgMjMwLCAKKyAgICAxMTcsIDIyNiwgMTE4LCAyMTIsIDQxLCAyNTEsIDEzMSwgMjQ5LCAxNTMsIDIxNiwgMTA3LCAyMzMsIDI0LCAyMjMsIDE4MywgCisgICAgMjUwLCAyMzIsIDI0NiwgMTA0LCAyNDksIDE0MywgMjEyLCAzLCAyMTksIDcyLCAyMTksIDcwLCAyNDAsIDI1MiwgMjIzLCAKKyAgICAxNTYsIDI0MiwgMTc3LCAyMjAsIDU5LCAyMzAsIDE1MCwgMjIyLCAxOTYsIDI1MCwgMTE2LCAyNDcsIDE0NCwgMjI1LCA3NiwgCisgICAgMjUxLCAyMTEsIDI0NSwgMTc3LCAyMjYsIDI0MiwgMjE4LCAyNTQsIDIyMCwgNTQsIDI1MSwgMTMwLCAyNTQsIDEwMCwgMjQxLCAKKyAgICA2MSwgMjMzLCAxMjcsIDI1MiwgNjgsIDI0NCwgOTgsIDIxNSwgMTk0LCAyNDQsIDk4LCAyNTEsIDIxNywgMjE1LCA5MSwgCisgICAgMjQyLCAwLCAyNTAsIDExNywgMjUyLCAxOTUsIDI1MCwgMTE3LCAyNDMsIDI1MCwgMjUyLCAxOTUsIDI1MCwgMTE3LCAyNTEsIAorICAgIDI0NSwgMjI1LCAxOTgsIDIzNCwgMzIsIDIyNCwgMjUxLCAyNDYsIDk1LCAyNTEsIDE5LCAyNTIsIDE4NSwgMjUxLCAxOSwgCisgICAgMjQ3LCAxMzgsIDIzMCwgMTE4LCAyNDQsIDE5OCwgMjQ5LCAxNTQsIDI0NCwgMTk4LCAyMTYsIDEwOCwgMjQ0LCAxOTgsIAorICAgIDIyMywgMTg0LCAyNDQsIDE5OCwgMjUwLCAyMzMsIDI0NCwgMTk4LCAyNDYsIDEwNSwgMjQ0LCAxOTgsIDIxOCwgMjQzLCAKKyAgICAyMTIsIDMsIDI0MCwgMjUzLCAyNDQsIDE5OCwgMjMwLCAxNTEsIDI0NCwgMTk4LCAyNDcsIDE0NSwgMjQ0LCAxOTgsIDIyNSwgCisgICAgNzcsIDI0NCwgMTk4LCAyNDMsIDI1MywgMjQ0LCAxOTgsIDI0MiwgMjcsIDI0NCwgMTk4LCAyMTEsIDIyNCwgMjQ0LCAxOTgsIAorICAgIDI1MiwgNzksIDI0NCwgMTk4LCAyMjYsIDQ5LCAyNDQsIDE5OCwgMjI1LCA3NywgMjI4LCA1OCwgMjI1LCAyMzYsIDIyNCwgCisgICAgMTg5LCAyNDUsIDIxLCAyNDUsIDIzNSwgMjI4LCA1OCwgMjMwLCAxMTUsIDIxNiwgMjAsIDcxLCAxMjAsIDIyNSwgMTAsIAorICAgIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDEyNCwgMjI1LCAxMCwgMjUyLCAxOTAsIDIzNSwgMjQ5LCA3MSwgNDMsIDIyNSwgCisgICAgMTAsIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDQ0LCAyMjUsIDEwLCAyNTIsIDE5MCwgMjM1LCAyNDksIDI0NCwgOTIsIAorICAgIDI0MiwgMjMsIDUwLCAyMTIsIDMzLCAyNDIsIDIzLCA1MCwgMjI2LCAyMTksIDI0MiwgMjMsIDUwLCAyMTYsIDEzNiwgMTIwLCAKKyAgICA1MCwgMjE2LCAxMzYsIDEyNCwgNTAsIDI1MCwgMjcsIDI0MiwgMTgsIDUwLCAyMDQsIDI0MiwgMTgsIDUwLCAyNDksIDEzMSwgCisgICAgMjExLCAyMjAsIDI0MiwgMiwgMjQ1LCAyMiwgMjI5LCAxMDksIDIxNywgMTUyLCAyMzUsIDEzMSwgMjQ2LCAxMDAsIDIzNCwgCisgICAgODgsIDI1MSwgMjU1LCAyMTEsIDIyMCwgMjUwLCAxLCAyMjQsIDEzMCwgMjQyLCAyMSwgMjI0LCAyMzMsIDIzMSwgMTgyLCAKKyAgICAyMjAsIDYsIDI1MywgMjExLCAyMjAsIDYsIDI0MSwgMTcxLCAyMjAsIDYsIDIxMSwgMjIwLCAyMjEsIDI0MiwgMjExLCAyMjAsIAorICAgIDI1MSwgMTk0LCAyNDQsIDM3LCAyNTEsIDk4LCAyMzYsIDcsIDIxOSwgMTcxLCAyNTEsIDk3LCAyMzYsIDcsIDIxOSwgMTcxLCAKKyAgICAyNTEsIDE3MCwgMjQyLCAyMDEsIDIzMSwgMTkwLCAyMTEsIDIyMSwgMjQ0LCAxODIsIDIzMSwgMTkxLCAyMiwgMjExLCAyMjIsIAorICAgIDI0MSwgNjcsIDI0MiwgMTcsIDExMywgMjMxLCA2NCwgMjQxLCA2NywgMjQyLCAxNywgMTEzLCAyMTEsIDIxOSwgMjQxLCA2NywgCisgICAgMjQyLCAxNywgMjI1LCAyLCAyMjYsIDIzMSwgMjExLCAyMjIsIDIsIDI1MSwgMTE0LCAyNDUsIDIzMywgMjUxLCAxNDksIDIsIAorICAgIDIxMywgMjQ2LCAyMjUsIDE3MSwgMiwgMjUxLCAyMjAsIDI0MiwgNDEsIDIzMSwgMTkxLCAyLCAyNDIsIDExNywgMjI1LCAKKyAgICAxMTIsIDIzMSwgMTc5LCAyMzEsIDE5MSwgMiwgMjE1LCA5OCwgMjI2LCAyMTIsIDIzMSwgMTkwLCAyMjYsIDIxMiwgMjExLCAKKyAgICAyMjEsIDI1MiwgMTk0LCAyNDksIDE5OCwgMjExLCAyMDUsIDIyNCwgMTkyLCAyMzUsIDEzNywgMjI2LCAyMjcsIDIzNSwgCisgICAgMTM3LCAyNDIsIDE3NiwgMjQyLCAyMjksIDI1MiwgMTk1LCAyNTQsIDEyMSwgMjQ1LCAyNiwgMjU0LCAxNjksIDI1NCwgMTcwLCAKKyAgICAyMzAsIDE0MSwgMjM2LCAxMiwgMjE5LCAxMDIsIDIzNSwgMjM5LCAyNDgsIDQyLCAyMjUsIDE3MCwgMjQyLCAxMTIsIDI0OCwgCisgICAgMTg3LCAyMzIsIDIwNywgMjI5LCAyMTYsIDIyNSwgMSwgMjQ0LCAxOTksIDIzMSwgMTQ3LCAyNDIsIDQwLCAyNTIsIDE0NiwgCisgICAgMjI1LCA0LCAyMTcsIDE3MiwgMjI1LCA2OSwgMjM0LCA3MCwgNzksIDIzMiwgMTE3LCAyMzMsIDE2LCAyMjIsIDIzNiwgMjQzLCAKKyAgICA2MSwgMjE4LCAxMzMsIDIzNCwgNjksIDI1MSwgMTc5LCAyNDksIDE1NiwgMiwgMjQxLCAyMzQsIDIxMiwgMTksIDI1MiwgNzcsIAorICAgIDI0MSwgMjM0LCAyNTEsIDE0MywgMjQxLCAyMzQsIDExMywgMjQxLCAyMzIsIDIxOSwgMTIsIDI0MSwgMjM0LCAyNDIsIDEyNywgCisgICAgMjQxLCAyMzQsIDI0MSwgMjM1LCAyLCA3NSwgMjUxLCAyMTYsIDI0MSwgMjM0LCAyNDIsIDEzNCwgMjQxLCAyMzQsIDIxMSwgCisgICAgNDIsIDI0MSwgMjM0LCAyMjQsIDEzMSwgMjQxLCAyMzQsIDI0MSwgMjM1LCAyLCAyMjMsIDM2LCAyMjMsIDQ3LCAyNDEsIAorICAgIDIzMiwgMjQxLCAyMzUsIDI0OCwgODksIDI0OCwgMSwgMjIwLCA4NCwgMiwgMTE2LCA1OSwgMjM1LCAyMjIsIDI0NSwgMTgwLCAKKyAgICAxOTMsIDI1MSwgMTI0LCAyNTQsIDEyMCwgODcsIDI1MSwgMjAzLCAyMTksIDk0LCA4NywgMjQ5LCAyMzYsIDg3LCAyMTgsIAorICAgIDI0OCwgMjE3LCAyNDksIDg3LCAyNDYsIDkzLCAyNDgsIDE2NSwgODcsIDIyNSwgNzAsIDY0LCAyMjQsIDI1MiwgMjQ0LCA2OSwgCisgICAgMjUyLCAxMSwgMjQ3LCAxNzMsIDg3LCAyMTksIDUsIDI1MiwgMTY2LCAyMTYsIDE1MCwgMjUyLCAxNjYsIDcxLCAyNDQsIDU5LCAKKyAgICAyNDAsIDIxOCwgMjI1LCA4LCA4NywgMjMwLCAxNTQsIDI1MiwgMTgwLCAyNDksIDEwNiwgMjQ1LCA0MCwgMTE0LCAyNDcsIAorICAgIDE0MCwgNTAsIDI0OSwgMTQ3LCAyNTAsIDI1MCwgMjUyLCAxNTIsIDIsIDIxMSwgNDAsIDUwLCAyNTIsIDE1MiwgMiwgMjQ3LCAKKyAgICAxNDAsIDUwLCAyNTIsIDE1MiwgMiwgMjQ1LCA1NSwgNTAsIDI1MiwgMTUyLCAyLCAyMjQsIDIzMSwgNTAsIDIzMCwgMTU0LCAKKyAgICAyLCAyMTEsIDIzNSwgMjUwLCAxNDYsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMiwgMjIsIDIxMSwgNDAsIDUwLCAyMjEsIDE4MCwgCisgICAgMjI1LCAxNjksIDI0OSwgMjE2LCAyNTEsIDE0NywgMjMwLCAxOTEsIDI0NCwgNjQsIDI0NywgMTkzLCAyMjYsIDE2NSwgMjQ3LCAKKyAgICAxOTgsIDI0NiwgNTcsIDI0NCwgMTE1LCAyNDQsIDQ4LCAyMDQsIDI0NCwgMTE1LCAyNDQsIDQ4LCAyMjYsIDgwLCAyLCAyNDksIAorICAgIDEwOCwgMjI2LCA4MCwgMjQ0LCAxOTEsIDIxNCwgMTYzLCAyNTEsIDI0LCAyMTcsIDE5LCAyNTEsIDI0LCAyNTAsIDI1MSwgCisgICAgMjM1LCAyNDksIDI1MCwgMTQ2LCAyLCAyMTQsIDE1MywgMjE1LCAyMzEsIDI1MCwgMTQ2LCAyLCAyNDYsIDExMiwgMjE1LCAKKyAgICAyMzEsIDI1MiwgMTQ5LCAyNTAsIDE0NSwgMjUwLCAxNCwgMjI0LCAxMjYsIDIyMiwgMTg3LCAyMjQsIDEyNiwgMjI2LCAyMywgCisgICAgMjE4LCAxMjMsIDIyMiwgMTMzLCAyMTUsIDIyMywgMjIyLCAxMzMsIDI1MSwgMTk5LCAyMTcsIDkyLCAyMzMsIDU3LCAyMjgsIAorICAgIDUwLCAyMjgsIDUxLCAyLCAyNDgsIDg4LCAyNDksIDE1NSwgMjUwLCA4LCAyNTEsIDIwMCwgMjA0LCAyNTEsIDIwMCwgMjQyLCAKKyAgICAxMzQsIDI1MSwgMjAwLCAyNTEsIDIxNiwgMjUxLCAyMDAsIDIyNiwgMTYxLCAyNTEsIDIwMCwgMjUxLCAxOTcsIDIyOSwgCisgICAgMjEwLCAyNTIsIDE4MywgMjIxLCAxODgsIDIzMSwgNjUsIDIxNywgMiwgMjIzLCAxMjYsIDIyNiwgNzgsIDI0NCwgMTY3LCAKKyAgICAyMzEsIDIzOSwgMjIxLCAyMjUsIDI1NCwgOTcsIDIyNCwgMTQ4LCAyNTUsIDUsIDIzMiwgMTE5LCAyNTAsIDEzNSwgMjMxLCAKKyAgICA3NywgMjI2LCAxMzMsIDIxNSwgMjM5LCAyMzYsIDMsIDIxNSwgMjM5LCAyMjYsIDg2LCAyNDYsIDMyLCA4NywgMjM2LCAwLCAKKyAgICAyNDUsIDEyNywgMjQ1LCAxMjgsIDIsIDI0NiwgMTEyLCA4MCwgNDgsIDI1MCwgOCwgMjMxLCAyMDUsIDIsIDIzMiwgMTEzLCAKKyAgICAyNDQsIDgxLCAyNTAsIDgsIDIzMSwgMjA1LCAyLCAyMjMsIDE2MCwgMjQ0LCA4MSwgMjA0LCAyMzEsIDIwNSwgMiwgMjIzLCAKKyAgICAxNjAsIDI0NCwgODEsIDIwNCwgMjMxLCAyMDUsIDIsIDIzMiwgMTEzLCAyNDQsIDgxLCAyMjQsIDIzOSwgMjI0LCAyNDAsIAorICAgIDI0MCwgMjU1LCAyMjksIDg5LCAyMzAsIDE2NCwgMjI1LCAxMjAsIDIzMCwgMTY0LCAyMjUsIDEyMSwgMiwgOTcsIDgwLCAKKyAgICAyNTMsIDIxNSwgMjMzLCA1MiwgMjEzLCAxNzUsIDIzMCwgMTYzLCAyMzAsIDE2NCwgMjI1LCAxMjEsIDIyNiwgMjM0LCAyMjgsIAorICAgIDgwLCAyMzAsIDE2NCwgMjI1LCAxMTksIDI1NCwgOTgsIDIsIDI1MiwgMTM3LCAyNTEsIDE4LCAyMTMsIDE3MiwgMjUxLCAxOCwgCisgICAgMjE2LCAyNTUsIDIyMywgMTc2LCAyMTMsIDE3MSwgMjE1LCA2MCwgOTcsIDI1MywgMjU1LCAyNTAsIDEwLCA5NywgMjIsIAorICAgIDE0MCwgMjA0LCAyNTAsIDQ0LCAyNTMsIDI1NSwgMjUwLCAxMCwgOTcsIDIyLCAxNDAsIDIwNCwgMjUwLCA0NCwgMjU0LCAwLCAKKyAgICAyLCAzNywgMTIzLCAyMjYsIDEyNCwgMjUwLCAxMCwgMjQ2LCAxMTIsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDQ0LCAyNTMsIAorICAgIDI1NSwgMjU0LCA5NiwgMjQ2LCAxMTIsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDQ0LCAyNTMsIDI1NSwgMTIxLCAyNTEsIAorICAgIDE0NiwgODcsIDEyNSwgMjUxLCAxNDYsIDg3LCAyMTksIDksIDIsIDI1MSwgMTIsIDkxLCAyMTksIDgsIDIxOSwgOSwgMiwgCisgICAgMTIzLCAyMTksIDMzLCAyMTIsIDM1LCAyMTksIDksIDIsIDEzNCwgMjE5LCAzMywgMjEyLCAzNCwgMjUyLCAxMjMsIDI0NSwgCisgICAgMTgwLCAyMjUsIDMwLCAyMzMsIDQ4LCAyMzEsIDIxNiwgMjQyLCAxOTEsIDIyMiwgMjUwLCAyMzEsIDIxNiwgMjQyLCAxOTEsIAorICAgIDIzMiwgMTU4LCAyLCAyMzUsIDIzMiwgMjI1LCAyMDIsIDI1MCwgOCwgMjMyLCAxNTgsIDIsIDIzNCwgMTQ0LCAyMzQsIDE0NCwgCisgICAgMjMyLCAxNTcsIDIwNCwgMjMyLCAxNTcsIDI1MiwgNTIsIDI1MiwgNTMsIDIsIDI1MSwgMTIsIDkxLCAyNTEsIDE5OCwgMjMyLCAKKyAgICAyMTAsIDg3LCAyMjMsIDE3NywgMjUxLCA5NCwgMjUyLCAxOTMsIDIsIDE0MCwgODAsIDQ4LCAyNDUsIDE1MSwgMiwgMTQwLCAKKyAgICA4MCwgNDgsIDIyNiwgMjAxLCAyLCAyNDUsIDM5LCAxNjQsIDIsIDQzLCA0NCwgODAsIDQ4LCAyMTksIDQxLCAyLCA5NywgODAsIAorICAgIDQ4LCAyMTYsIDE1LCAyLCAyMTQsIDE1MywgODAsIDQ4LCAyMjgsIDgwLCAxMjMsIDIxNCwgMTg0LCAyNDUsIDE5OSwgODcsIAorICAgIDIzNCwgMTQyLCAyMTYsIDI0OCwgMjM1LCAyMjYsIDE2LCAzMSwgNywgNiwgMjMzLCAxNSwgMjM1LCAyMjYsIDE2LCAzMSwgNywgCisgICAgNCwgMjMzLCAxNSwgMjM1LCAyMjYsIDE2LCAzMSwgMjI3LCAyMDMsIDIzNSwgMjI2LCAxNiwgMzEsIDIxNywgMTg0LCAyMzUsIAorICAgIDIyNiwgMTYsIDMxLCA3LCAyMzMsIDE1LCAyNDQsIDEwNCwgMjQ1LCAxODAsIDIxNiwgMTAsIDIxMSwgMTk5LCAyNDIsIDI4LCAKKyAgICAyMjcsIDE4NiwgMjIsIDI1MSwgMjA1LCAyNDEsIDczLCAyMjUsIDUzLCAyMzAsIDIzMSwgMjE3LCAwLCAyNDksIDEyMiwgCisgICAgMjUyLCAxNjcsIDIxOSwgMTI3LCAyMjUsIDEyLCAyMTgsIDE1OSwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCAyMzUsIDEzNywgCisgICAgMTYsIDMxLCAyNTIsIDY1LCAyMTUsIDIyMSwgMjQ1LCAxNjQsIDg1LCA0MiwgMjUxLCA5NCwgNzEsIDQyLCAyNTEsIDk0LCAKKyAgICAyMzMsIDkxLCAyMjMsIDExNCwgMjUwLCA0MywgMjMzLCA5MSwgMjUxLCAyMTYsIDI1MCwgNDMsIDIzMywgOTEsIDIyNiwgCisgICAgMTYxLCAyNDgsIDAsIDIzMywgOTEsIDI1MSwgMjE2LCAyNDgsIDAsIDQsIDIyNiwgMTYxLCAyNDgsIDAsIDQsIDI1MSwgMjE2LCAKKyAgICAyNDgsIDAsIDIxNCwgMTYyLCAyMjMsIDExNCwgMjE1LCAyMjYsIDI0NiwgMTEzLCAyMjMsIDExNCwgMjE1LCAyMjYsIDIxNCwgCisgICAgMTYyLCA0LCAyMjMsIDExNCwgMjE1LCAyMjYsIDI0NiwgMTEzLCA0LCAyMjMsIDExNCwgMjE1LCAyMjYsIDM3LCAyNDksIAorICAgIDEzOSwgMjI0LCAyNTUsIDI0OSwgMTM5LCAyMjUsIDAsIDIsIDI0MiwgMzMsIDUxLCAyNDksIDEzOSwgMjI0LCAyNTUsIDIyOCwgCisgICAgNTQsIDQzLCAyMjAsIDE1NSwgMiwgMTM0LCAyNDcsIDEyNiwgMjUwLCAxMiwgMjQ0LCAxOTksIDEyMywgMjI2LCAyNDYsIAorICAgIDI1MCwgMTIsIDI0NCwgMTk5LCAxMTMsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMTM0LCAyMjYsIDI0NiwgMjUwLCAKKyAgICAxMiwgMjQ0LCAxOTksIDI0NCwgMTksIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ0LCA4OSwgMjI2LCAyNDYsIAorICAgIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTksIDEyNywgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjAsIDEyNCwgMjI2LCAKKyAgICAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIDIwMSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjgsIDIwNSwgCisgICAgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDI0OSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIAorICAgIDE3NiwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDc3LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIAorICAgIDIyNiwgMTk2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA1NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMTQxLCAyNTAsIAorICAgIDEyLCAyNDQsIDE5OSwgMjQ0LCAxNSwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NCwgODcsIDI1MCwgMTIsIDI0NCwgMTk5LCAKKyAgICAyMTksIDEyMywgMjUwLCAxMiwgMjQ0LCAxOTksIDIyMCwgMTIzLCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAyMDAsIDI1MCwgCisgICAgMTIsIDI0NCwgMTk5LCAyMjgsIDIwNCwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMjQ3LCAyNTAsIDEyLCAyNDQsIDE5OSwgCisgICAgMjQ1LCAxNzQsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDc1LCAyMzAsIDEyMiwgMjQzLCAyMzcsIDIxNiwgMzcsIDIxNiwgCisgICAgMywgMjE4LCAxNTAsIDY0LCAyMzIsIDI0NSwgMjE5LCAxNzIsIDY0LCAyMzUsIDEzOCwgMjMwLCAxMTEsIDI0MiwgMTMxLCAKKyAgICAyNDQsIDE5OCwgMjQyLCAxMzEsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNDQsIDE5OSwgMiwgMjE3LCAxNSwgCisgICAgNjQsIDIzNSwgNTksIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgCisgICAgMjA0LCAyMzAsIDExNiwgMjIsIDIxOSwgNzYsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE2LCAKKyAgICAyMiwgMjQ5LCAyMzgsIDIxNywgMjQ4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNiwgMjIsIDIxNiwgCisgICAgMTA1LCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjQyLCAzMiwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDI0MCwgCisgICAgMjU0LCAyMTEsIDIzMywgMjQ0LCAxOTgsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNDQsIAorICAgIDE5OSwgMjIxLCAyMTksIDI0OCwgNzAsIDI0NCwgNDEsIDIyMywgOTEsIDI0NCwgMTk4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgCisgICAgMjQxLCAyMzMsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMTgsIDM1LCAyMTksIDc1LCAyNDQsIDE5OCwgMjI5LCAKKyAgICA5MiwgMjQ0LCAxOTgsIDI0NSwgMzEsIDI0NCwgMTk4LCAyMTQsIDE4OCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyNDksIAorICAgIDIzOCwgMjE3LCAyNDgsIDIyNSwgMTk1LCAyNDQsIDE5OCwgMjQ5LCAyMDksIDI0NCwgMTk4LCAyNDksIDIxMCwgMjQ0LCAKKyAgICAxOTgsIDIzNCwgNjgsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMjE2LCAxMzgsIDExNiwgMjM0LCA2OSwgMjM0LCA2OCwgMjQ0LCAKKyAgICAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDIzNCwgNjgsIDI0NCwgMTk5LCAyLCAyNTAsIDgsIDI0NSwgMjEsIDI0NCwgCisgICAgMTk5LCAyLCAyMTgsIDg5LCAyMTYsIDIwLCAyNDQsIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMSwgMjIsIDIxMSwgMjMzLCAKKyAgICAyNDUsIDIzLCAyNDQsIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMSwgMjIsIDIxNiwgMTA1LCAyNDUsIDIxLCAyNDcsIDIwMCwgCisgICAgMjQ0LCAxOTgsIDIxMSwgMjA0LCAyNDQsIDE5OCwgMjU0LCAxMTYsIDI0NCwgMTk4LCAyMjQsIDIzMCwgMjQ0LCAxOTgsIAorICAgIDI0OSwgMTI0LCAyNDQsIDE5OCwgMjI1LCAxNzMsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjMyLCAxMzIsIDY0LCAyMTUsIAorICAgIDIwNSwgMjQ3LCAyMDAsIDI1MSwgOTYsIDIyMywgOTEsIDI0NCwgMTk4LCAyNDMsIDI0NywgMjQ0LCAxOTksIDIsIDIwNCwgCisgICAgMjMwLCAxMTUsIDI1NCwgMTE0LCAyNDQsIDE5OCwgMjQ0LCAxNjAsIDI0NCwgMTk4LCAyMTIsIDIwLCAyNDQsIDE5OCwgMjE5LCAKKyAgICA5MywgMjQ0LCAxOTgsIDIxNiwgNzIsIDI0NCwgMTk4LCAyNDIsIDEzMiwgMjQ0LCAxOTgsIDIzMiwgMTIwLCAyNDksIDEyNCwgCisgICAgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyNDAsIDIxMCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAKKyAgICAyMDQsIDIzMCwgMTE2LCAyMiwgMjQ5LCAyMzgsIDIxNywgMjQ4LCAyNDQsIDE5OSwgMjIxLCAxOTIsIDIzNiwgNywgMjQ0LCAKKyAgICAxNjEsIDI1MywgMjIxLCAyNDQsIDE5OCwgMjQ0LCA1NywgMjQ0LCAxOTgsIDIxOSwgOTQsIDI0NCwgMTk4LCAyNDcsIDE3MywgCisgICAgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyMTEsIDIzMCwgMjMwLCAxMTUsIDI0NCwgMTk5LCAyLCAyMzEsIDg5LCAyMzEsIDE0OSwgCisgICAgMjQyLCAxMzEsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAKKyAgICAyMTcsIDE1LCA2NCwgMjM1LCA1OSwgMjE5LCA3NiwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE1LCAyMTksIAorICAgIDc2LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDI0MSwgMjMzLCAyNDUsIDIxLCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDIxMSwgCisgICAgMTk2LCAyMTksIDc3LCAyMzQsIDY4LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDI1MCwgOCwgMjQ1LCAyMSwgMjI0LCAyMzAsIAorICAgIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjQ5LCAxMjQsIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjEyLCAyMCwgMjUwLCAyMzMsIDI0NCwgCisgICAgMTk4LCAyNDQsIDE5OSwgMiwgMjI4LCA4MCwgMjQyLCAxNzAsIDI0MywgNDEsIDI0NCwgMTk5LCAyLCAyMjYsIDIxOSwgMjQzLCAKKyAgICA0MSwgMjI1LCAxNzEsIDI1MSwgMTc2LCAyNDgsIDgzLCAyMjEsIDE3MSwgMjMwLCAxNTAsIDI0MSwgMjM2LCAyMzAsIDE1MCwgCisgICAgMjE5LCAxMCwgMjMwLCAxNTAsIDI0MiwgMTIsIDIyNSwgMTcxLCAyMjMsIDE1OSwgMTIzLCAyNDIsIDIyLCAyMjUsIDE3MSwgCisgICAgMjIzLCAxNTksIDI1MSwgMTg2LCAyNDIsIDE4LCAyMzYsIDcsIDI1MCwgMTg3LCAyMjUsIDE3MSwgMjQzLCAyNDYsIDIyNSwgCisgICAgMTcxLCAyLCAyMjQsIDIzMCwgMjQ0LCAxOTgsIDIyNSwgMTcxLCAyLCAyNDQsIDQ5LCAyNDIsIDE3LCAyMjIsIDIwNSwgMjQxLCAKKyAgICAyMjEsIDIxOCwgMTQ1LCAyMzIsIDE1NSwgMjIzLCAxNjUsIDI1MCwgMjUyLCAyNDEsIDE2OSwgMjE1LCAyNDksIDI0MSwgCisgICAgMTY5LCAyMTUsIDI1MCwgMiwgMjUxLCAxMjIsIDIyOCwgNTgsIDIxNSwgMjQ5LCAyMzEsIDM3LCAxOTMsIDIyMywgMTY2LCAKKyAgICAyMTgsIDE1MSwgMjE1LCAyNDcsIDIxNSwgMjQ4LCAyNTAsIDI1MiwgMjUxLCAxMDAsIDIyNiwgMTk4LCAyNTEsIDEwMCwgCisgICAgMjE1LCAyMDIsIDI1MSwgMTAxLCAyMTgsIDEzMSwgMjMwLCAxOTIsIDI1NCwgMTM4LCAyNDQsIDEwNSwgMjQ1LCAxNDUsIAorICAgIDIyNSwgMiwgMjUwLCAyNTIsIDIyNiwgMTk4LCAyMjUsIDIsIDI1MCwgMjUyLCAyMTcsIDMzLCAyMjYsIDE5OCwgMjE3LCAzMywgCisgICAgMjUzLCAxODgsIDIyNiwgMTk4LCAyNTMsIDE4OCwgMjIzLCAxMjEsIDIxMywgMjQ3LCAyNDgsIDY2LCAyMTUsIDE5MywgMjUzLCAKKyAgICAyNTAsIDIzMiwgMTIzLCAyMTUsIDI1NSwgMjMwLCAxNDQsIDIzMCwgMTIxLCAyMjMsIDE2NCwgMjE4LCA3LCAyMjMsIDE2NCwgCisgICAgMjMwLCAxMjEsIDI1MSwgMzYsIDI1NCwgMjM4LCAyMTUsIDI0NiwgMjIwLCAxOCwgMjIyLCAxODQsIDIxOSwgMywgMjAzLCAKKyAgICAyMTUsIDI1MywgMjMyLCAyMzYsIDY3LCAyMTUsIDI1MywgMjMyLCAyMzYsIDI0OSwgMTk4LCA1MCwgMjI1LCAyLCAyNTAsIAorICAgIDIzNywgMjIzLCA0NywgMjMyLCAyMzYsIDIxNSwgMjIzLCAyNDQsIDgyLCAyMjYsIDIwMSwgMjI0LCAyNDEsIDI0NywgMTMxLCAKKyAgICAyMjgsIDgwLCAyNDUsIDEzMywgNTAsIDIxOSwgNzQsIDg3LCAyMjgsIDgwLCAyMTksIDc0LCA4NywgMjI0LCAxMjUsIDIzMiwgCisgICAgMTk5LCAyMzYsIDcsIDIzNSwgMTYzLCAyMjUsIDQ0LCA4NywgMjQ3LCAxNTQsIDIyOCwgNTcsIDIzMiwgMTk5LCA4NywgMjI0LCAKKyAgICAyMzUsIDIxMiwgNDEsIDg3LCAyMjgsIDcxLCAyMTIsIDQxLCA4NywgMjUyLCAxMCwgMjI4LCA4MCwgMjUyLCA5LCAyNTIsIDgsIAorICAgIDIzMCwgMTIxLCAyNTIsIDgsIDIyNSwgMjE2LCAyMjgsIDgwLCAyMjUsIDIxNSwgMjUwLCAxMDgsIDI0OSwgMTMyLCAyMzEsIAorICAgIDYxLCA4NywgMjExLCAyMTgsIDg3LCAyMjMsIDYyLCAyNTIsIDE5NSwgODcsIDIxNiwgMzgsIDIxMiwgNDEsIDI1MCwgNSwgCisgICAgMjE5LCAyMzYsIDI1MiwgMTI2LCAyNTIsIDEyNCwgMjI1LCAyNDYsIDI0OSwgMTg1LCAyNDksIDk0LCAyNTIsIDE3NywgMjUwLCAKKyAgICAzMCwgNDMsIDIzMiwgOTUsIDEwOCwgMTYsIDMxLCAyMjQsIDYsIDEwOCwgMTYsIDMxLCAyNTQsIDIwMSwgMTA4LCAxNiwgMzEsIAorICAgIDI0NCwgMTA0LCAxMDgsIDE2LCAzMSwgMjQ1LCAyMzEsIDEwOCwgMTYsIDMxLCAyMTIsIDQwLCAxMDgsIDE2LCAzMSwgMjU0LCAKKyAgICA1MSwgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIyMywgMTA4LCAxMDgsIDE2LCAzMSwgMjU0LCA1MiwgMjIzLCAxMDcsIDEwOCwgCisgICAgMTYsIDMxLCAyNTQsIDUyLCAyMTMsIDE0MywgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIxMywgMTQyLCAxMDgsIDE2LCAzMSwgCiAgICAgMjEzLCAxNTcsIDEwOCwgMTYsIDMxLCAyMTMsIDE1NiwgMTA4LCAxNiwgMzEsIDIxMywgMTU1LCAxMDgsIDE2LCAzMSwgMjE4LCAKLSAgICA0NCwgMTA4LCAxNiwgMzEsIDIyNSwgMTI1LCAyMTgsIDQ0LCAxMDgsIDE2LCAzMSwgODUsIDIxOCwgNDQsIDEwOCwgMTYsIAotICAgIDMxLCAyMzEsIDU1LCAyMTgsIDcxLCAxMDgsIDE2LCAzMSwgMjMxLCA1NSwgMjE4LCA3MCwgMTA4LCAxNiwgMzEsIDIzMSwgCi0gICAgNTUsIDIxOCwgNjksIDEwOCwgMTYsIDMxLCAyNTAsIDM4LCAxMDgsIDE2LCAzMSwgMjIyLCAxLCAxMDgsIDE2LCAzMSwgMjI4LCAKLSAgICAxODgsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MSwgMTA4LCAxNiwgMzEsIDIxMywgMTQwLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDQsIAotICAgIDIyMiwgMSwgMTA4LCAxNiwgMzEsIDIyMiwgMjA0LCAyMjIsIDAsIDEwOCwgMTYsIDMxLCAyNDIsIDE2NiwgMTA4LCAxNiwgCi0gICAgMzEsIDIxOSwgMTY2LCAxMDgsIDE2LCAzMSwgMjM1LCAxNzcsIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjM1LCAxNzcsIAotICAgIDIyNiwgMTUyLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyMzUsIDE3NiwgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCA2NCwgCi0gICAgMjM1LCAxNzYsIDEwOCwgMTYsIDMxLCAyNDksIDE2OCwgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyMzUsIDE3NSwgMjI2LCAKLSAgICAxNTMsIDEwOCwgMTYsIDMxLCAyMTgsIDcyLCA2NCwgMjQ5LCAxNjcsIDEwOCwgMTYsIDMxLCAyNDksIDEzNCwgNjQsIDI0OSwgCi0gICAgMTY3LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyNDksIDE2NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTY4LCAyNTQsIDgzLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIyLCAyLCA2NCwgMjQ5LCAxNjgsIDI1NCwgODMsIDEwOCwgMTYsIDMxLCAyMTgsIDcyLCA2NCwgCi0gICAgMjIyLCAyLCA2NCwgMjQ5LCAxNjcsIDEwOCwgMTYsIDMxLCAyMTMsIDI0MywgMTA4LCAxNiwgMzEsIDIxNiwgODQsIDIyNiwgCi0gICAgMTUzLCAxMDgsIDE2LCAzMSwgMjMzLCA1NywgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyNTQsIDgyLCAyMjYsIDE1MywgMTA4LCAKLSAgICAxNiwgMzEsIDIxOCwgNzIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjIyLCAyLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgCi0gICAgMzEsIDIxOCwgNzIsIDY0LCAyMjIsIDIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjEzLCAxNTgsIDY0LCAyNTQsIDgxLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAyNTQsIDgwLCAKLSAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDAsIDEwOCwgMTYsIDMxLCAyMjMsIDk5LCAxMDgsIDE2LCAzMSwgMjIzLCA5OCwgMTA4LCAKLSAgICAxNiwgMzEsIDIyMywgOTcsIDEwOCwgMTYsIDMxLCAyNTQsIDE1NywgMTA4LCAxNiwgMzEsIDI1NCwgMTU2LCAxMDgsIDE2LCAKLSAgICAzMSwgMjMxLCAxNjMsIDEwOCwgMTYsIDMxLCAyMjIsIDcsIDEwOCwgMTYsIDMxLCAyNTMsIDI0NiwgMTA4LCAxNiwgMzEsIAotICAgIDIyMywgMTI1LCAxMDgsIDE2LCAzMSwgMjIzLCAxMjQsIDEwOCwgMTYsIDMxLCAyNTMsIDE4MywgMTA4LCAxNiwgMzEsIDI1MSwgCi0gICAgMjI5LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDIxNywgNDksIDEwOCwgMTYsIDMxLCAyMTcsIDQ4LCAxMDgsIDE2LCAzMSwgCi0gICAgMjI0LCA4LCAyMzIsIDIyMiwgMTA4LCAxNiwgMzEsIDI1MSwgMTgzLCAxMDgsIDE2LCAzMSwgMjUxLCAxODIsIDEwOCwgMTYsIAotICAgIDMxLCAyNTEsIDE4MSwgMTA4LCAxNiwgMzEsIDI1NCwgMTM4LCAxMDgsIDE2LCAzMSwgMjI2LCAyMTgsIDEwOCwgMTYsIDMxLCAKLSAgICAyMTgsIDI0OCwgMTA4LCAxNiwgMzEsIDIxNiwgODIsIDEwOCwgMTYsIDMxLCAyNDIsIDk2LCAxMDgsIDE2LCAzMSwgMjEyLCAKLSAgICAyOCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI2LCAxMDgsIDE2LCAzMSwgMjUxLCAxNCwgMTA4LCAxNiwgMzEsIDIxNSwgODYsIAotICAgIDEwOCwgMTYsIDMxLCAyNTAsIDI0NiwgMjMwLCAxMjIsIDEwOCwgMTYsIDMxLCAyMjEsIDIwMiwgNjQsIDIzNSwgNTUsIDEwOCwgCi0gICAgMTYsIDMxLCAyNTEsIDI1LCAxMDgsIDE2LCAzMSwgMjE1LCAyMTksIDEwOCwgMTYsIDMxLCAyMTgsIDE1NCwgMjE1LCAyMTksIAotICAgIDEwOCwgMTYsIDMxLCAyMzIsIDE0OCwgMTA4LCAxNiwgMzEsIDIxOSwgNTYsIDEwOCwgMTYsIDMxLCAyMTQsIDE0MiwgMTA4LCAKLSAgICAxNiwgMzEsIDI0MCwgMjQ2LCAyNDYsIDY0LCAxMDgsIDE2LCAzMSwgMjUzLCAyMjcsIDEwOCwgMTYsIDMxLCAyMjQsIDIzNCwgCi0gICAgMjUzLCAyMjcsIDEwOCwgMTYsIDMxLCAyNTEsIDE0MiwgMTA4LCAxNiwgMzEsIDIyNCwgMjI1LCAyNTEsIDE0MiwgMTA4LCAKLSAgICAxNiwgMzEsIDI1NCwgMTM1LCAxMDgsIDE2LCAzMSwgMjE4LCAxMTcsIDIxOCwgMjYsIDIxOCwgMTE2LCAxMDgsIDE2LCAzMSwgCi0gICAgMjE4LCAxMTcsIDIxOCwgMjYsIDIxOCwgMTE1LCAxMDgsIDE2LCAzMSwgMjE4LCA2OCwgMTA4LCAxNiwgMzEsIDIyNCwgMjAwLCAKLSAgICAxMDgsIDE2LCAzMSwgMjQ3LCAxODEsIDEwOCwgMTYsIDMxLCAyNDcsIDE4MywgMTA4LCAxNiwgMzEsIDI0NywgMTgyLCAxMDgsIAotICAgIDE2LCAzMSwgMjI0LCAxMzEsIDEwOCwgMTYsIDMxLCAyMjQsIDEyMCwgMTA4LCAxNiwgMzEsIDI0OSwgMTIyLCAxMDgsIDE2LCAKLSAgICAzMSwgMjQ5LCAxMjEsIDEwOCwgMTYsIDMxLCAyNDksIDEyMCwgMTA4LCAxNiwgMzEsIDI0OSwgMTE5LCAxMDgsIDE2LCAzMSwgCi0gICAgMjQ5LCAxMTgsIDEwOCwgMTYsIDMxLCAyNTQsIDE2OSwgMTA4LCAxNiwgMzEsIDI1MiwgMTE5LCA2NCwgMjMxLCAxNDksIAotICAgIDEwOCwgMTYsIDMxLCAyNTIsIDExOSwgNjQsIDIxNCwgMTcsIDEwOCwgMTYsIDMxLCAyMjMsIDU3LCAxMDgsIDE2LCAzMSwgCi0gICAgMjQwLCAyMzgsIDEwOCwgMTYsIDMxLCAyMjgsIDIxMiwgMTA4LCAxNiwgMzEsIDI0OCwgMTQ1LCAxMDgsIDE2LCAzMSwgMjMwLCAKLSAgICAxMzQsIDEwOCwgMTYsIDMxLCAxNjMsIDI0NiwgOTQsIDEwOCwgMTYsIDMxLCAxNjMsIDIyNiwgMTMyLCA5LCAxNCwgMjQwLCAKLSAgICAxMDIsIDksIDE0LCAyNDAsIDEwMSwgOSwgMTQsIDI0MCwgMTAwLCA5LCAxNCwgMjQwLCA5OSwgOSwgMTQsIDI0MCwgOTgsIDksIAotICAgIDE0LCAyNDAsIDk3LCA5LCAxNCwgMjQwLCA5NiwgOSwgMTQsIDI0MCwgOTUsIDksIDE0LCAyNDAsIDk0LCA5LCAxNCwgMjQwLCAKLSAgICA5MywgOSwgMTQsIDI0MCwgOTIsIDksIDE0LCAyNDAsIDkxLCA5LCAxNCwgMjQwLCA5MCwgOSwgMTQsIDI0MCwgODksIDksIAotICAgIDE0LCAyNDAsIDg4LCA5LCAxNCwgMjQwLCA4NywgOSwgMTQsIDI0MCwgODYsIDksIDE0LCAyNDAsIDg1LCA5LCAxNCwgMjQwLCAKLSAgICA4NCwgOSwgMTQsIDI0MCwgODMsIDksIDE0LCAyNDAsIDgyLCA5LCAxNCwgMjQwLCA4MSwgOSwgMTQsIDI0MCwgODAsIDksIAotICAgIDE0LCAyNDAsIDc5LCA5LCAxNCwgMjQwLCA3OCwgOSwgMTQsIDI0MCwgNzcsIDksIDE0LCAyNDAsIDc2LCA5LCAxNCwgMjQwLCAKLSAgICA3NSwgOSwgMTQsIDI0MCwgNzQsIDksIDE0LCAyNDAsIDczLCA5LCAxNCwgMjQwLCA3MiwgOSwgMTQsIDI0MCwgNzEsIDksIAotICAgIDE0LCAyNDAsIDcwLCA5LCAxNCwgMjQwLCA2OSwgOSwgMTQsIDI0MCwgNjgsIDksIDE0LCAyNDAsIDY3LCA5LCAxNCwgMjQwLCAKLSAgICA2NiwgOSwgMTQsIDI0MCwgNjUsIDksIDE0LCAyNDAsIDY0LCA5LCAxNCwgMjQwLCA2MywgOSwgMTQsIDI0MCwgNjIsIDksIAotICAgIDE0LCAyNDAsIDYxLCA5LCAxNCwgMjQwLCA2MCwgOSwgMTQsIDI0MCwgNTksIDksIDE0LCAyNDAsIDU4LCA5LCAxNCwgMjQwLCAKLSAgICA1NywgOSwgMTQsIDI0MCwgNTYsIDksIDE0LCAyNDAsIDU1LCA5LCAxNCwgMjQwLCA1NCwgOSwgMTQsIDI0MCwgNTMsIDksIAotICAgIDE0LCAyNDAsIDUyLCA5LCAxNCwgMjQwLCA1MSwgOSwgMTQsIDI0MCwgNTAsIDksIDE0LCAyNDAsIDQ5LCA5LCAxNCwgMjQwLCAKLSAgICA0OCwgOSwgMTQsIDI0MCwgNDcsIDksIDE0LCAyNDAsIDQ2LCA5LCAxNCwgMjQwLCA0NSwgOSwgMTQsIDI0MCwgNDQsIDksIAotICAgIDE0LCAyNDAsIDQzLCA5LCAxNCwgMjQwLCA0MiwgOSwgMTQsIDI0MCwgNDEsIDksIDE0LCAyNDAsIDQwLCA5LCAxNCwgMjQwLCAKLSAgICAzOSwgOSwgMTQsIDI0MCwgMzgsIDksIDE0LCAyNDAsIDM3LCA5LCAxNCwgMjQwLCAzNiwgOSwgMTQsIDI0MCwgMzUsIDksIAotICAgIDE0LCAyNDAsIDM0LCA5LCAxNCwgMjQwLCAzMywgOSwgMTQsIDI0MCwgMzIsIDksIDE0LCAyNDAsIDMxLCA5LCAxNCwgMjQwLCAKLSAgICAzMCwgOSwgMTQsIDI0MCwgMjksIDksIDE0LCAyNDAsIDI4LCA5LCAxNCwgMjQwLCAyNywgOSwgMTQsIDI0MCwgMjYsIDksIAotICAgIDE0LCAyNDAsIDI1LCA5LCAxNCwgMjQwLCAyNCwgOSwgMTQsIDI0MCwgMjMsIDksIDE0LCAyNDAsIDIyLCA5LCAxNCwgMjQwLCAKLSAgICAyMSwgOSwgMTQsIDI0MCwgMjAsIDksIDE0LCAyNDAsIDE5LCA5LCAxNCwgMjQwLCAxOCwgOSwgMTQsIDI0MCwgMTcsIDksIAotICAgIDE0LCAyNDAsIDE2LCA5LCAxNCwgMjQwLCAxNSwgOSwgMTQsIDI0MCwgMTQsIDksIDE0LCAyNDAsIDEzLCA5LCAxNCwgMjQwLCAKLSAgICAxMiwgOSwgMTQsIDI0MCwgMTEsIDksIDE0LCAyNDAsIDEwLCA5LCAxNCwgMjQwLCA5LCA5LCAxNCwgMjQwLCA4LCA5LCAxNCwgCi0gICAgMjQwLCA3LCA5LCAxNCwgMjQwLCA2LCA5LCAxNCwgMjQwLCA1LCA5LCAxNCwgMjQwLCA0LCA5LCAxNCwgMjQwLCAzLCA5LCAKLSAgICAxNCwgMjQwLCAyLCA5LCAxNCwgMjQwLCAxLCA5LCAxNCwgMjQwLCAwLCA5LCAxNCwgMjM5LCAyNTUsIDksIDE0LCAyMzksIAotICAgIDI1NCwgOSwgMTQsIDIzOSwgMjUzLCA5LCAxNCwgMjM5LCAyNTIsIDksIDE0LCAyMzksIDI1MSwgOSwgMTQsIDIzOSwgMjUwLCAKLSAgICA5LCAxNCwgMjM5LCAyNDksIDksIDE0LCAyMzksIDI0OCwgOSwgMTQsIDIzOSwgMjQ3LCA5LCAxNCwgMjM5LCAyNDYsIDksIAotICAgIDE0LCAyMzksIDI0NSwgOSwgMTQsIDIzOSwgMjQ0LCA5LCAxNCwgMjM5LCAyNDMsIDksIDE0LCAyMzksIDI0MiwgOSwgMTQsIAotICAgIDIzOSwgMjQxLCA5LCAxNCwgMjM5LCAyNDAsIDksIDE0LCAyMzksIDIzOSwgOSwgMTQsIDIzOSwgMjM4LCA5LCAxNCwgMjM5LCAKLSAgICAyMzcsIDksIDE0LCAyMzksIDIzNiwgOSwgMTQsIDIzOSwgMjM1LCA5LCAxNCwgMjM5LCAyMzQsIDksIDE0LCAyMzksIDIzMywgCi0gICAgOSwgMTQsIDIzOSwgMjMyLCA5LCAxNCwgMjM5LCAyMzEsIDksIDE0LCAyMzksIDIzMCwgOSwgMTQsIDIzOSwgMjI5LCA5LCAKLSAgICAxNCwgMjM5LCAyMjgsIDksIDE0LCAyMzksIDIyNywgOSwgMTQsIDIzOSwgMjI2LCA5LCAxNCwgMjM5LCAyMjUsIDksIDE0LCAKLSAgICAyMzksIDIyNCwgOSwgMTQsIDIzOSwgMjIzLCA5LCAxNCwgMjM5LCAyMjIsIDksIDE0LCAyMzksIDIyMSwgOSwgMTQsIDIzOSwgCi0gICAgMjIwLCA5LCAxNCwgMjM5LCAyMTksIDksIDE0LCAyMzksIDIxOCwgOSwgMTQsIDIzOSwgMjE3LCA5LCAxNCwgMjM5LCAyMTYsIAotICAgIDksIDE0LCAyMzksIDIxNSwgOSwgMTQsIDIzOSwgMjE0LCA5LCAxNCwgMjM5LCAyMTMsIDksIDE0LCAyMzksIDIxMiwgOSwgCi0gICAgMTQsIDIzOSwgMjExLCA5LCAxNCwgMjM5LCAyMTAsIDksIDE0LCAyMzksIDIwOSwgOSwgMTQsIDIzOSwgMjA4LCA5LCAxNCwgCi0gICAgMjM5LCAyMDcsIDksIDE0LCAyMzksIDIwNiwgOSwgMTQsIDIzOSwgMjA1LCA5LCAxNCwgMjM5LCAyMDQsIDksIDE0LCAyMzksIAotICAgIDIwMywgOSwgMTQsIDIzOSwgMjAyLCA5LCAxNCwgMjM5LCAyMDEsIDksIDE0LCAyMzksIDIwMCwgOSwgMTQsIDIzOSwgMTk5LCAKLSAgICA5LCAxNCwgMjM5LCAxOTgsIDksIDE0LCAyMzksIDE5NywgOSwgMTQsIDIzOSwgMTk2LCA5LCAxNCwgMjM5LCAxOTUsIDksIAotICAgIDE0LCAyMzksIDE5NCwgOSwgMTQsIDIzOSwgMTkzLCA5LCAxNCwgMjM5LCAxOTIsIDksIDE0LCAyMzksIDE5MSwgOSwgMTQsIAotICAgIDIzOSwgMTkwLCA5LCAxNCwgMjM5LCAxODksIDksIDE0LCAyMzksIDE4OCwgOSwgMTQsIDIzOSwgMTg3LCA5LCAxNCwgMjM5LCAKLSAgICAxODYsIDksIDE0LCAyMzksIDE4NSwgOSwgMTQsIDIzOSwgMTg0LCA5LCAxNCwgMjM5LCAxODMsIDksIDE0LCAyMzksIDE4MiwgCi0gICAgOSwgMTQsIDIzOSwgMTgxLCA5LCAxNCwgMjM5LCAxODAsIDksIDE0LCAyMzksIDE3OSwgOSwgMTQsIDIzOSwgMTc4LCA5LCAKLSAgICAxNCwgMjM5LCAxNzcsIDksIDE0LCAyMzksIDE3NiwgOSwgMTQsIDIzOSwgMTc1LCA5LCAxNCwgMjM5LCAxNzQsIDksIDE0LCAKLSAgICAyMzksIDE3MywgOSwgMTQsIDIzOSwgMTcyLCA5LCAxNCwgMjM5LCAxNzEsIDksIDE0LCAyMzksIDE3MCwgOSwgMTQsIDIzOSwgCi0gICAgMTY5LCA5LCAxNCwgMjM5LCAxNjgsIDksIDE0LCAyMzksIDE2NywgOSwgMTQsIDIzOSwgMTY2LCA5LCAxNCwgMjM5LCAxNjUsIAotICAgIDksIDE0LCAyMzksIDE2NCwgOSwgMTQsIDIzOSwgMTYzLCA5LCAxNCwgMjM5LCAxNjIsIDksIDE0LCAyMzksIDE2MSwgOSwgCi0gICAgMTQsIDIzOSwgMTYwLCA5LCAxNCwgMjM5LCAxNTksIDksIDE0LCAyMzksIDE1OCwgOSwgMTQsIDIzOSwgMTU3LCA5LCAxNCwgCi0gICAgMjM5LCAxNTYsIDksIDE0LCAyMzksIDE1NSwgOSwgMTQsIDIzOSwgMTU0LCA5LCAxNCwgMjM5LCAxNTMsIDksIDE0LCAyMzksIAotICAgIDE1MiwgOSwgMTQsIDIzOSwgMTUxLCA5LCAxNCwgMjM5LCAxNTAsIDksIDE0LCAyMzksIDE0OSwgOSwgMTQsIDIzOSwgMTQ4LCAKLSAgICA5LCAxNCwgMjM5LCAxNDcsIDksIDE0LCAyMzksIDE0NiwgOSwgMTQsIDIzOSwgMTQ1LCA5LCAxNCwgMjM5LCAxNDQsIDksIAotICAgIDE0LCAyMzksIDE0MywgOSwgMTQsIDIzOSwgMTQyLCA5LCAxNCwgMjM5LCAxNDEsIDksIDE0LCAyMzksIDE0MCwgOSwgMTQsIAotICAgIDIzOSwgMTM5LCA5LCAxNCwgMjM5LCAxMzgsIDksIDE0LCAyMzksIDEzNywgOSwgMTQsIDIzOSwgMTM2LCA5LCAxNCwgMjM5LCAKLSAgICAxMzUsIDksIDE0LCAyMzksIDEzNCwgOSwgMTQsIDIzOSwgMTMzLCA5LCAxNCwgMjM5LCAxMzIsIDksIDE0LCAyMzksIDEzMSwgCi0gICAgOSwgMTQsIDIzOSwgMTMwLCA5LCAxNCwgMjM5LCAxMjksIDksIDE0LCAyMzksIDEyOCwgOSwgMTQsIDIzOSwgMTI3LCA5LCAKLSAgICAxNCwgMjM5LCAxMjYsIDksIDE0LCAyMzksIDEyNSwgOSwgMTQsIDIzOSwgMTI0LCA5LCAxNCwgMjM5LCAxMjMsIDksIDE0LCAKLSAgICAyMzksIDEyMiwgOSwgMTQsIDIzOSwgMTIxLCA5LCAxNCwgMjM5LCAxMjAsIDksIDE0LCAyMzksIDExOSwgOSwgMTQsIDIzOSwgCi0gICAgMTE4LCA5LCAxNCwgMjM5LCAxMTcsIDksIDE0LCAyMzksIDExNiwgOSwgMTQsIDIzOSwgMTE1LCA5LCAxNCwgMjM5LCAxMTQsIAotICAgIDksIDE0LCAyMzksIDExMywgOSwgMTQsIDIzOSwgMTEyLCA5LCAxNCwgMjM5LCAxMTEsIDksIDE0LCAyMzksIDExMCwgOSwgCi0gICAgMTQsIDIzOSwgMTA5LCA5LCAxNCwgMjM5LCAxMDgsIDksIDE0LCAyMzksIDEwNywgOSwgMTQsIDIzOSwgMTA2LCA5LCAxNCwgCi0gICAgMjM5LCAxMDUsIDksIDE0LCAyMzksIDEwNCwgOSwgMTQsIDIzOSwgMTAzLCA5LCAxNCwgMjM5LCAxMDIsIDksIDE0LCAyMzksIAotICAgIDEwMSwgOSwgMTQsIDIzOSwgMTAwLCA5LCAxNCwgMjM5LCA5OSwgOSwgMTQsIDIzOSwgOTgsIDksIDE0LCAyMzksIDk3LCA5LCAKLSAgICAxNCwgMjM5LCA5NiwgOSwgMTQsIDIzOSwgOTUsIDksIDE0LCAyMzksIDk0LCA5LCAxNCwgMjM5LCA5MywgOSwgMTQsIDIzOSwgCi0gICAgOTIsIDksIDE0LCAyMzksIDkxLCA5LCAxNCwgMjM5LCA5MCwgOSwgMTQsIDIzOSwgODksIDksIDE0LCAyMzksIDg4LCA5LCAKLSAgICAxNCwgMjM5LCA4NywgOSwgMTQsIDIzOSwgODYsIDksIDE0LCAyMzksIDg1LCA5LCAxNCwgMjM5LCA4NCwgOSwgMTQsIDIzOSwgCi0gICAgODMsIDksIDE0LCAyMzksIDgyLCA5LCAxNCwgMjM5LCA4MSwgOSwgMTQsIDIzOSwgODAsIDksIDE0LCAyMzksIDc5LCA5LCAKLSAgICAxNCwgMjM5LCA3OCwgOSwgMTQsIDIzOSwgNzcsIDksIDE0LCAyMzksIDc2LCA5LCAxNCwgMjM5LCA3NSwgOSwgMTQsIDIzOSwgCi0gICAgNzQsIDksIDE0LCAyMzksIDczLCA5LCAxNCwgMjM5LCA3MiwgOSwgMTQsIDIzOSwgNzEsIDksIDE0LCAyMzksIDcwLCA5LCAKLSAgICAxNCwgMjM5LCA2OSwgOSwgMTQsIDIzOSwgNjgsIDksIDE0LCAyMzksIDY3LCA5LCAxNCwgMjM5LCA2NiwgOSwgMTQsIDIzOSwgCi0gICAgNjUsIDksIDE0LCAyMzksIDY0LCA5LCAxNCwgMjM5LCA2MywgOSwgMTQsIDIzOSwgNjIsIDksIDE0LCAyMzksIDYxLCA5LCAKLSAgICAxNCwgMjM5LCA2MCwgOSwgMTQsIDIzOSwgNTksIDksIDE0LCAyMzksIDU4LCA5LCAxNCwgMjM5LCA1NywgOSwgMTQsIDIzOSwgCi0gICAgNTYsIDksIDE0LCAyMzksIDU1LCA5LCAxNCwgMjM5LCA1NCwgOSwgMTQsIDIzOSwgNTMsIDksIDE0LCAyMzksIDUyLCA5LCAKLSAgICAxNCwgMjM5LCA1MSwgOSwgMTQsIDIzOSwgNTAsIDksIDE0LCAyMzksIDQ5LCA5LCAxNCwgMjM5LCA0OCwgOSwgMTQsIDIzOSwgCi0gICAgNDcsIDksIDE0LCAyMzksIDQ2LCA5LCAxNCwgMjM5LCA0NSwgOSwgMTQsIDIzOSwgNDQsIDksIDE0LCAyMzksIDQzLCA5LCAKLSAgICAxNCwgMjM5LCA0MiwgOSwgMTQsIDIzOSwgNDEsIDksIDE0LCAyMzksIDQwLCA5LCAxNCwgMjM5LCAzOSwgOSwgMTQsIDIzOSwgCi0gICAgMzgsIDksIDE0LCAyMzksIDM3LCA5LCAxNCwgMjM5LCAzNiwgOSwgMTQsIDIzOSwgMzUsIDksIDE0LCAyMzksIDM0LCA5LCAKLSAgICAxNCwgMjM5LCAzMywgOSwgMTQsIDIzOSwgMzIsIDksIDE0LCAyMzksIDMxLCA5LCAxNCwgMjM5LCAzMCwgOSwgMTQsIDIzOSwgCi0gICAgMjksIDksIDE0LCAyMzksIDI4LCA5LCAxNCwgMjM5LCAyNywgOSwgMTQsIDIzOSwgMjYsIDksIDE0LCAyMzksIDI1LCA5LCAKLSAgICAxNCwgMjM5LCAyNCwgOSwgMTQsIDIzOSwgMjMsIDksIDE0LCAyMzksIDIyLCA5LCAxNCwgMjM5LCAyMSwgOSwgMTQsIDIzOSwgCi0gICAgMjAsIDksIDE0LCAyMzksIDE5LCA5LCAxNCwgMjM5LCAxOCwgOSwgMTQsIDIzOSwgMTcsIDksIDE0LCAyMzksIDE2LCA5LCAKLSAgICAxNCwgMjM5LCAxNSwgOSwgMTQsIDIzOSwgMTQsIDksIDE0LCAyMzksIDEzLCA5LCAxNCwgMjM5LCAxMiwgOSwgMTQsIDIzOSwgCi0gICAgMTEsIDksIDE0LCAyMzksIDEwLCA5LCAxNCwgMjM5LCA5LCA5LCAxNCwgMjM5LCA4LCA5LCAxNCwgMjM5LCA3LCA5LCAxNCwgCi0gICAgMjM5LCA2LCA5LCAxNCwgMjM5LCA1LCA5LCAxNCwgMjM5LCA0LCA5LCAxNCwgMjM5LCAzLCA5LCAxNCwgMjM5LCAyLCA5LCAKLSAgICAxNCwgMjM5LCAxLCA5LCAxNCwgMjM5LCAwLCA5LCAxNCwgMjM4LCAyNTUsIDksIDE0LCAyMzgsIDI1NCwgOSwgMTQsIDIzOCwgCi0gICAgMjUzLCA5LCAxNCwgMjM4LCAyNTIsIDksIDE0LCAyMzgsIDI1MSwgOSwgMTQsIDIzOCwgMjUwLCA5LCAxNCwgMjM4LCAyNDksIAotICAgIDksIDE0LCAyMzgsIDI0OCwgOSwgMTQsIDIzOCwgMjQ3LCA5LCAxNCwgMjM4LCAyNDYsIDksIDE0LCAyMzgsIDI0NSwgOSwgCi0gICAgMTQsIDIzOCwgMjQ0LCA5LCAxNCwgMjM4LCAyNDMsIDksIDE0LCAyMzgsIDI0MiwgOSwgMTQsIDIzOCwgMjQxLCA5LCAxNCwgCi0gICAgMjM4LCAyNDAsIDksIDE0LCAyMzgsIDIzOSwgOSwgMTQsIDIzOCwgMjM4LCA5LCAxNCwgMjM4LCAyMzcsIDksIDE0LCAyMzgsIAotICAgIDIzNiwgOSwgMTQsIDIzOCwgMjM1LCA5LCAxNCwgMjM4LCAyMzQsIDksIDE0LCAyMzgsIDIzMywgOSwgMTQsIDIzOCwgMjMyLCAKLSAgICA5LCAxNCwgMjM4LCAyMzEsIDksIDE0LCAyMzgsIDIzMCwgOSwgMTQsIDIzOCwgMjI5LCA5LCAxNCwgMjM4LCAyMjgsIDksIAotICAgIDE0LCAyMzgsIDIyNywgOSwgMTQsIDIzOCwgMjI2LCA5LCAxNCwgMjM4LCAyMjUsIDksIDE0LCAyMzgsIDIyNCwgOSwgMTQsIAotICAgIDIzOCwgMjIzLCA5LCAxNCwgMjM4LCAyMjIsIDksIDE0LCAyMzgsIDIyMSwgOSwgMTQsIDIzOCwgMjIwLCA5LCAxNCwgMjM4LCAKLSAgICAyMTksIDksIDE0LCAyMzgsIDIxOCwgOSwgMTQsIDIzOCwgMjE3LCA5LCAxNCwgMjM4LCAyMTYsIDksIDE0LCAyMzgsIDIxNSwgCi0gICAgOSwgMTQsIDIzOCwgMjE0LCA5LCAxNCwgMjM4LCAyMTMsIDksIDE0LCAyMzgsIDIxMiwgOSwgMTQsIDIzOCwgMjExLCA5LCAKLSAgICAxNCwgMjM4LCAyMTAsIDksIDE0LCAyMzgsIDIwOSwgOSwgMTQsIDIzOCwgMjA4LCA5LCAxNCwgMjM4LCAyMDcsIDksIDE0LCAKLSAgICAyMzgsIDIwNiwgOSwgMTQsIDIzOCwgMjA1LCA5LCAxNCwgMjM4LCAyMDQsIDksIDE0LCAyMzgsIDIwMywgOSwgMTQsIDIzOCwgCi0gICAgMjAyLCA5LCAxNCwgMjM4LCAyMDEsIDksIDE0LCAyMzgsIDIwMCwgOSwgMTQsIDIzOCwgMTk5LCA5LCAxNCwgMjM4LCAxOTgsIAotICAgIDksIDE0LCAyMzgsIDE5NywgOSwgMTQsIDIzOCwgMTk2LCA5LCAxNCwgMjM4LCAxOTUsIDksIDE0LCAyMzgsIDE5NCwgOSwgCi0gICAgMTQsIDIzOCwgMTkzLCA5LCAxNCwgMjM4LCAxOTIsIDksIDE0LCAyMzgsIDE5MSwgOSwgMTQsIDIzOCwgMTkwLCA5LCAxNCwgCi0gICAgMjM4LCAxODksIDksIDE0LCAyMzgsIDE4OCwgOSwgMTQsIDIzOCwgMTg3LCA5LCAxNCwgMjM4LCAxODYsIDksIDE0LCAyMzgsIAotICAgIDE4NSwgOSwgMTQsIDIzOCwgMTg0LCA5LCAxNCwgMjM4LCAxODMsIDksIDE0LCAyMzgsIDE4MiwgOSwgMTQsIDIzOCwgMTgxLCAKLSAgICA5LCAxNCwgMjM4LCAxODAsIDksIDE0LCAyMzgsIDE3OSwgOSwgMTQsIDIzOCwgMTc4LCA5LCAxNCwgMjM4LCAxNzcsIDksIAotICAgIDE0LCAyMzgsIDE3NiwgOSwgMTQsIDIzOCwgMTc1LCA5LCAxNCwgMjM4LCAxNzQsIDksIDE0LCAyMzgsIDE3MywgOSwgMTQsIAotICAgIDIzOCwgMTcyLCA5LCAxNCwgMjM4LCAxNzEsIDksIDE0LCAyMzgsIDE3MCwgOSwgMTQsIDIzOCwgMTY5LCA5LCAxNCwgMjM4LCAKLSAgICAxNjgsIDksIDE0LCAyMzgsIDE2NywgOSwgMTQsIDIzOCwgMTY2LCA5LCAxNCwgMjM4LCAxNjUsIDksIDE0LCAyMzgsIDE2NCwgCi0gICAgOSwgMTQsIDIzOCwgMTYzLCA5LCAxNCwgMjM4LCAxNjIsIDksIDE0LCAyMzgsIDE2MSwgOSwgMTQsIDIzOCwgMTYwLCA5LCAKLSAgICAxNCwgMjM4LCAxNTksIDksIDE0LCAyMzgsIDE1OCwgOSwgMTQsIDIzOCwgMTU3LCA5LCAxNCwgMjM4LCAxNTYsIDksIDE0LCAKLSAgICAyMzgsIDE1NSwgOSwgMTQsIDIzOCwgMTU0LCA5LCAxNCwgMjM4LCAxNTMsIDksIDE0LCAyMzgsIDE1MiwgOSwgMTQsIDIzOCwgCi0gICAgMTUxLCA5LCAxNCwgMjM4LCAxNTAsIDksIDE0LCAyMzgsIDE0OSwgOSwgMTQsIDIzOCwgMTQ4LCA5LCAxNCwgMjM4LCAxNDcsIAotICAgIDksIDE0LCAyMzgsIDE0NiwgOSwgMTQsIDIzOCwgMTQ1LCA5LCAxNCwgMjM4LCAxNDQsIDksIDE0LCAyMzgsIDE0MywgOSwgCi0gICAgMTQsIDIzOCwgMTQyLCA5LCAxNCwgMjM4LCAxNDEsIDksIDE0LCAyMzgsIDE0MCwgOSwgMTQsIDIzOCwgMTM5LCA5LCAxNCwgCi0gICAgMjM4LCAxMzgsIDksIDE0LCAyMzgsIDEzNywgOSwgMTQsIDIzOCwgMTM2LCA5LCAxNCwgMjM4LCAxMzUsIDksIDE0LCAyMzgsIAotICAgIDEzNCwgOSwgMTQsIDIzOCwgMTMzLCA5LCAxNCwgMjM4LCAxMzIsIDksIDE0LCAyMzgsIDEzMSwgOSwgMTQsIDIzOCwgMTMwLCAKLSAgICA5LCAxNCwgMjM4LCAxMjksIDksIDE0LCAyMzgsIDEyOCwgOSwgMTQsIDIzOCwgMTI3LCA5LCAxNCwgMjM4LCAxMjYsIDksIAotICAgIDE0LCAyMzgsIDEyNSwgOSwgMTQsIDIzOCwgMTI0LCA5LCAxNCwgMjM4LCAxMjMsIDksIDE0LCAyMzgsIDEyMiwgOSwgMTQsIAotICAgIDIzOCwgMTIxLCA5LCAxNCwgMjM4LCAxMjAsIDksIDE0LCAyMzgsIDExOSwgOSwgMTQsIDIzOCwgMTE4LCA5LCAxNCwgMjM4LCAKLSAgICAxMTcsIDksIDE0LCAyMzgsIDExNiwgOSwgMTQsIDIzOCwgMTE1LCA5LCAxNCwgMjM4LCAxMTQsIDksIDE0LCAyMzgsIDExMywgCi0gICAgOSwgMTQsIDIzOCwgMTEyLCA5LCAxNCwgMjM4LCAxMTEsIDksIDE0LCAyMzgsIDExMCwgOSwgMTQsIDIzOCwgMTA5LCA5LCAKLSAgICAxNCwgMjM4LCAxMDgsIDksIDE0LCAyMzgsIDEwNywgOSwgMTQsIDIzOCwgMTA2LCA5LCAxNCwgMjM4LCAxMDUsIDksIDE0LCAKLSAgICAyMzgsIDEwNCwgOSwgMTQsIDIzOCwgMTAzLCA5LCAxNCwgMjM4LCAxMDIsIDksIDE0LCAyMzgsIDEwMSwgOSwgMTQsIDIzOCwgCi0gICAgMTAwLCA5LCAxNCwgMjM4LCA5OSwgOSwgMTQsIDIzOCwgOTgsIDksIDE0LCAyMzgsIDk3LCA5LCAxNCwgMjM4LCA5NiwgOSwgCi0gICAgMTQsIDIzOCwgOTUsIDksIDE0LCAyMzgsIDk0LCA5LCAxNCwgMjM4LCA5MywgOSwgMTQsIDIzOCwgOTIsIDksIDE0LCAyMzgsIAotICAgIDkxLCA5LCAxNCwgMjM4LCA5MCwgOSwgMTQsIDIzOCwgODksIDksIDE0LCAyMzgsIDg4LCA5LCAxNCwgMjM4LCA4NywgOSwgCi0gICAgMTQsIDIzOCwgODYsIDksIDE0LCAyMzgsIDg1LCA5LCAxNCwgMjM4LCA4NCwgOSwgMTQsIDIzOCwgODMsIDksIDE0LCAyMzgsIAotICAgIDgyLCA5LCAxNCwgMjM4LCA4MSwgOSwgMTQsIDIzOCwgODAsIDksIDE0LCAyMzgsIDc5LCA5LCAxNCwgMjM4LCA3OCwgOSwgCi0gICAgMTQsIDIzOCwgNzcsIDksIDE0LCAyMzgsIDc2LCA5LCAxNCwgMjM4LCA3NSwgOSwgMTQsIDIzOCwgNzQsIDksIDE0LCAyMzgsIAotICAgIDczLCAyMzMsIDkwLCAyMTcsIDg0LCAxMjksIDIxOSwgMTgsIDEyOSwgMjQ1LCAzMSwgNzgsIDEyOSwgMjIzLCAyNTQsIDc4LCAKLSAgICAxMjksIDU0LCA1MCwgMTI5LCAyNDcsIDEzMiwgNTAsIDEyOSwgMjI1LCAxODIsIDUwLCAxMjksIDI1NCwgMTI2LCAxMjksIAotICAgIDI1NCwgNTcsIDEyOSwgNDMsIDIyNiwgMywgMTI5LCA0NCwgMjI2LCAzLCAxMjksIDI1MywgMjE2LCAxMjksIDk2LCA1MCwgCi0gICAgMTI5LCAyNDksIDIxOSwgMTI5LCAyNDAsIDE2NywgMTI5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDEyOSwgMjE5LCA0NiwgMTI5LCAKLSAgICAyMSwgMjEwLCA4NiwgMTI5LCAyMSwgMTEwLCAxMjksIDIxLCAxMDUsIDEyOSwgMjEsIDE1OCwgMTI5LCAyMSwgMTYxLCAxMjksIAotICAgIDIxLCAxODksIDEyOSwgMjEsIDE5NCwgMTI5LCAyMSwgMTk4LCAxMjksIDIxLCAxOTUsIDEyOSwgMjEsIDIwMCwgMTI5LCAKLSAgICAyNDksIDIyNiwgMTI5LCAyMjAsIDE1MCwgMTI5LCAyMzMsIDE1LCA1MCwgMTI5LCAyNDUsIDk4LCA1MCwgMTI5LCAyNDIsIAotICAgIDEzMCwgNTAsIDEyOSwgMjI0LCAxMywgNzgsIDEyOSwgMjQ5LCAyMTcsIDI1MywgMjA2LCAxMjksIDcsIDYsIDEsIDYxLCAKLSAgICAxMjksIDcsIDYsIDEsIDI1MywgMTU4LCAxMjksIDcsIDYsIDEsIDI1MSwgNjYsIDEyOSwgNywgNiwgMSwgMjQ5LCA2MCwgCi0gICAgMTI5LCA3LCA2LCAxLCA3NSwgMTI5LCA3LCA2LCAxLCAyNDUsIDYsIDEyOSwgNywgNiwgMSwgMjQzLCAyMDIsIDEyOSwgNywgCi0gICAgNiwgMSwgMjQyLCA2MCwgMTI5LCA3LCA2LCAxLCA3MywgMTI5LCA3LCA2LCAxLCAyMzUsIDE0NCwgMTI5LCA3LCA2LCAxLCAKLSAgICAyMzUsIDIzLCAxMjksIDcsIDYsIDEsIDE1NiwgMTI5LCA3LCA2LCAxLCAxOTMsIDEyOSwgNywgNiwgMSwgMjMwLCAyNSwgCi0gICAgMTI5LCA3LCA2LCAxLCA3NiwgMTI5LCA3LCA2LCAxLCAyMjYsIDEwNSwgMTI5LCA3LCA2LCAxLCAyMjQsIDk2LCAxMjksIDcsIAotICAgIDYsIDEsIDE1MywgMTI5LCA3LCA2LCAxLCAyMjIsIDkxLCAxMjksIDcsIDYsIDEsIDIxNywgMTUyLCAxMjksIDcsIDYsIDEsIAotICAgIDcwLCAxMjksIDcsIDYsIDEsIDIxNCwgMTA1LCAxMjksIDcsIDYsIDEsIDIxMiwgOTgsIDEyOSwgNywgNiwgMSwgMjExLCAKLSAgICAxNzgsIDEyOSwgNywgNiwgMSwgMjExLCAxMTcsIDEyOSwgNywgNiwgMSwgMjEwLCAxNTksIDEyOSwgNDMsIDQyLCAxMjcsIAotICAgIDEyOSwgMjIzLCA1MCwgMjE5LCA0NiwgMTI5LCA0NCwgNDIsIDEyNywgMTI5LCAyNTAsIDMxLCAyNTUsIDE0LCAxMjksIDEyMSwgCi0gICAgMjMyLCAyMTMsIDEyOSwgMjQyLCAxMzcsIDI1NSwgMTQsIDEyOSwgNywgNCwgMSwgNjEsIDEyOSwgNywgNCwgMSwgMjUzLCAKLSAgICAxNTgsIDEyOSwgNywgNCwgMSwgMjUxLCA2NiwgMTI5LCA3LCA0LCAxLCAyNDksIDYwLCAxMjksIDcsIDQsIDEsIDc1LCAxMjksIAotICAgIDcsIDQsIDEsIDI0NSwgNiwgMTI5LCA3LCA0LCAxLCAyNDMsIDIwMiwgMTI5LCA3LCA0LCAxLCAyNDIsIDYwLCAxMjksIDcsIAotICAgIDQsIDEsIDczLCAxMjksIDcsIDQsIDEsIDIzNSwgMTQ0LCAxMjksIDcsIDQsIDEsIDIzNSwgMjMsIDEyOSwgNywgNCwgMSwgCi0gICAgMTU2LCAxMjksIDcsIDQsIDEsIDE5MywgMTI5LCA3LCA0LCAxLCAyMzAsIDI1LCAxMjksIDcsIDQsIDEsIDc2LCAxMjksIDcsIAotICAgIDQsIDEsIDIyNiwgMTA1LCAxMjksIDcsIDQsIDEsIDIyNCwgOTYsIDEyOSwgNywgNCwgMSwgMTUzLCAxMjksIDcsIDQsIDEsIAotICAgIDIyMiwgOTEsIDEyOSwgNywgNCwgMSwgMjE3LCAxNTIsIDEyOSwgNywgNCwgMSwgNzAsIDEyOSwgNywgNCwgMSwgMjE0LCAKLSAgICAxMDUsIDEyOSwgNywgNCwgMSwgMjEyLCA5OCwgMTI5LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI5LCA3LCA0LCAxLCAyMTEsIAotICAgIDExNywgMTI5LCA3LCA0LCAxLCAyMTAsIDE1OSwgMTI5LCA0MywgMjQ5LCA5OSwgMTI3LCAxMjksIDY3LCAyMzIsIDIxMywgCi0gICAgMTI5LCA0NCwgMjQ5LCA5OSwgMTI3LCAxMjksIDE4MiwgMjUxLCA2LCAyMTcsIDg0LCA0NSwgMjIxLCA3OCwgNDUsIDIyMSwgCi0gICAgNjcsIDQ1LCAyMjEsIDU2LCA0NSwgMjIxLCA0NCwgNDUsIDIyMSwgMzMsIDQ1LCAyMjEsIDIyLCA0NSwgMjIxLCAxMSwgNDUsIAotICAgIDIyMSwgMCwgNDUsIDIyMCwgMjQ1LCA0NSwgMjIwLCAyMzcsIDQ1LCAyMjAsIDIzNiwgNDUsIDIyMCwgMjM1LCA0NSwgMjIwLCAKLSAgICAyMzQsIDQ1LCAyMjAsIDIzMiwgNDUsIDIyMCwgMjMxLCA0NSwgMjIwLCAyMzAsIDQ1LCAyMjAsIDIyOSwgNDUsIDIyMCwgCi0gICAgMjI4LCA0NSwgMjIwLCAyMjcsIDQ1LCAyMjAsIDIyNiwgNDUsIDIyMCwgMjI1LCA0NSwgMjIwLCAyMjQsIDQ1LCAyMjAsIAotICAgIDIyMywgNDUsIDIyMCwgMjIxLCA0NSwgMjIwLCAyMjAsIDQ1LCAyMjAsIDIxOSwgNDUsIDIyMCwgMjE4LCA0NSwgMjIwLCAKLSAgICAyMTcsIDQ1LCAyMjAsIDIxNiwgNDUsIDIyMCwgMjE1LCA0NSwgMjIwLCAyMTQsIDQ1LCAyMjAsIDIxMywgNDUsIDIyMCwgCi0gICAgMjEyLCA0NSwgMjIwLCAyMTAsIDQ1LCAyMjAsIDIwOSwgNDUsIDIyMCwgMjA4LCA0NSwgMjIwLCAyMDcsIDQ1LCAyMjAsIAotICAgIDIwNiwgNDUsIDIyMCwgMjA1LCA0NSwgMjIwLCAyMDQsIDQ1LCAyMjAsIDIwMywgNDUsIDIyMCwgMjAyLCA0NSwgMjIwLCAKLSAgICAyMDEsIDQ1LCAyMjAsIDE5OSwgNDUsIDIyMCwgMTk4LCA0NSwgMjIwLCAxOTcsIDQ1LCAyMjAsIDE5NiwgNDUsIDIyMCwgCi0gICAgMTk1LCA0NSwgMjIwLCAxOTQsIDQ1LCAyMjAsIDE5MywgNDUsIDIyMCwgMTkyLCA0NSwgMjIwLCAxOTEsIDQ1LCAyMjAsIAotICAgIDE5MCwgNDUsIDIyMCwgMTg4LCA0NSwgMjIwLCAxODcsIDQ1LCAyMjAsIDE4NiwgNDUsIDIyMCwgMTg1LCA0NSwgMjIwLCAKLSAgICAxODQsIDQ1LCAyMjAsIDE4MywgNDUsIDIyMCwgMTgyLCA0NSwgMjIwLCAxODEsIDQ1LCAyMjAsIDE4MCwgNDUsIDIyMCwgCi0gICAgMTc5LCA0NSwgMjIwLCAxNzcsIDQ1LCAyMjAsIDE3NiwgNDUsIDIyMCwgMTc1LCA0NSwgMjIwLCAxNzQsIDQ1LCAyMjAsIAotICAgIDE3MywgNDUsIDIyMCwgMTcyLCA0NSwgMjIwLCAxNzEsIDQ1LCAyMjAsIDE3MCwgNDUsIDIyMCwgMTY5LCA0NSwgMjIwLCAKLSAgICAxNjgsIDQ1LCAyMjAsIDE2NiwgNDUsIDIyMCwgMTY1LCA0NSwgMjIwLCAxNjQsIDQ1LCAyMjAsIDE2MywgNDUsIDIyMCwgCi0gICAgMTYyLCA0NSwgMjIwLCAxNjEsIDQ1LCAyMjAsIDE2MCwgNDUsIDIyMCwgMTU5LCA0NSwgMjIwLCAxNTgsIDQ1LCAyMjAsIAotICAgIDE1NywgNDUsIDIyMSwgMTU0LCA0NSwgMjIxLCAxNTMsIDQ1LCAyMjEsIDE1MiwgNDUsIDIyMSwgMTUxLCA0NSwgMjIxLCAKLSAgICAxNTAsIDQ1LCAyMjEsIDE0OSwgNDUsIDIyMSwgMTQ4LCA0NSwgMjIxLCAxNDcsIDQ1LCAyMjEsIDE0NiwgNDUsIDIyMSwgCi0gICAgMTQ1LCA0NSwgMjIxLCAxNDMsIDQ1LCAyMjEsIDE0MiwgNDUsIDIyMSwgMTQxLCA0NSwgMjIxLCAxNDAsIDQ1LCAyMjEsIAotICAgIDEzOSwgNDUsIDIyMSwgMTM4LCA0NSwgMjIxLCAxMzcsIDQ1LCAyMjEsIDEzNiwgNDUsIDIyMSwgMTM1LCA0NSwgMjIxLCAKLSAgICAxMzQsIDQ1LCAyMjEsIDEzMiwgNDUsIDIyMSwgMTMxLCA0NSwgMjIxLCAxMzAsIDQ1LCAyMjEsIDEyOSwgNDUsIDIyMSwgCi0gICAgMTI4LCA0NSwgMjIxLCAxMjcsIDQ1LCAyMjEsIDEyNiwgNDUsIDIyMSwgMTI1LCA0NSwgMjIxLCAxMjQsIDQ1LCAyMjEsIAotICAgIDEyMywgNDUsIDIyMSwgMTIxLCA0NSwgMjIxLCAxMjAsIDQ1LCAyMjEsIDExOSwgNDUsIDIyMSwgMTE4LCA0NSwgMjIxLCAKLSAgICAxMTcsIDQ1LCAyMjEsIDExNiwgNDUsIDIyMSwgMTE1LCA0NSwgMjIxLCAxMTQsIDQ1LCAyMjEsIDExMywgNDUsIDIyMSwgCi0gICAgMTEyLCA0NSwgMjIxLCAxMTAsIDQ1LCAyMjEsIDEwOSwgNDUsIDIyMSwgMTA4LCA0NSwgMjIxLCAxMDcsIDQ1LCAyMjEsIAotICAgIDEwNiwgNDUsIDIyMSwgMTA1LCA0NSwgMjIxLCAxMDQsIDQ1LCAyMjEsIDEwMywgNDUsIDIyMSwgMTAyLCA0NSwgMjIxLCAKLSAgICAxMDEsIDQ1LCAyMjEsIDk5LCA0NSwgMjIxLCA5OCwgNDUsIDIyMSwgOTcsIDQ1LCAyMjEsIDk2LCA0NSwgMjIxLCA5NSwgNDUsIAotICAgIDIyMSwgOTQsIDQ1LCAyMjEsIDkzLCA0NSwgMjIxLCA5MiwgNDUsIDIyMSwgOTEsIDQ1LCAyMjEsIDkwLCA0NSwgMjIxLCA4OCwgCi0gICAgNDUsIDIyMSwgODcsIDQ1LCAyMjEsIDg2LCA0NSwgMjIxLCA4NSwgNDUsIDIyMSwgODQsIDQ1LCAyMjEsIDgzLCA0NSwgMjIxLCAKLSAgICA4MiwgNDUsIDIyMSwgODEsIDQ1LCAyMjEsIDgwLCA0NSwgMjIxLCA3OSwgNDUsIDIyMSwgNzcsIDQ1LCAyMjEsIDc2LCA0NSwgCi0gICAgMjIxLCA3NSwgNDUsIDIyMSwgNzQsIDQ1LCAyMjEsIDczLCA0NSwgMjIxLCA3MiwgNDUsIDIyMSwgNzEsIDQ1LCAyMjEsIDcwLCAKLSAgICA0NSwgMjIxLCA2OSwgNDUsIDIyMSwgNjgsIDQ1LCAyMjEsIDY2LCA0NSwgMjIxLCA2NSwgNDUsIDIyMSwgNjQsIDQ1LCAyMjEsIAotICAgIDYzLCA0NSwgMjIxLCA2MiwgNDUsIDIyMSwgNjEsIDQ1LCAyMjEsIDYwLCA0NSwgMjIxLCA1OSwgNDUsIDIyMSwgNTgsIDQ1LCAKLSAgICAyMjEsIDU3LCA0NSwgMjIxLCA1NSwgNDUsIDIyMSwgNTQsIDQ1LCAyMjEsIDUzLCA0NSwgMjIxLCA1MiwgNDUsIDIyMSwgNTEsIAotICAgIDQ1LCAyMjEsIDUwLCA0NSwgMjIxLCA0OSwgNDUsIDIyMSwgNDgsIDQ1LCAyMjEsIDQ3LCA0NSwgMjIxLCA0NiwgNDUsIDIyMSwgCi0gICAgNDMsIDQ1LCAyMjEsIDQyLCA0NSwgMjIxLCA0MSwgNDUsIDIyMSwgNDAsIDQ1LCAyMjEsIDM5LCA0NSwgMjIxLCAzOCwgNDUsIAotICAgIDIyMSwgMzcsIDQ1LCAyMjEsIDM2LCA0NSwgMjIxLCAzNSwgNDUsIDIyMSwgMzQsIDQ1LCAyMjEsIDMyLCA0NSwgMjIxLCAzMSwgCi0gICAgNDUsIDIyMSwgMzAsIDQ1LCAyMjEsIDI5LCA0NSwgMjIxLCAyOCwgNDUsIDIyMSwgMjcsIDQ1LCAyMjEsIDI2LCA0NSwgMjIxLCAKLSAgICAyNSwgNDUsIDIyMSwgMjQsIDQ1LCAyMjEsIDIzLCA0NSwgMjIxLCAyMSwgNDUsIDIyMSwgMjAsIDQ1LCAyMjEsIDE5LCA0NSwgCi0gICAgMjIxLCAxOCwgNDUsIDIyMSwgMTcsIDQ1LCAyMjEsIDE2LCA0NSwgMjIxLCAxNSwgNDUsIDIyMSwgMTQsIDQ1LCAyMjEsIDEzLCAKLSAgICA0NSwgMjIxLCAxMiwgNDUsIDIyMSwgMTAsIDQ1LCAyMjEsIDksIDQ1LCAyMjEsIDgsIDQ1LCAyMjEsIDcsIDQ1LCAyMjEsIDYsIAotICAgIDQ1LCAyMjEsIDUsIDQ1LCAyMjEsIDQsIDQ1LCAyMjEsIDMsIDQ1LCAyMjEsIDIsIDQ1LCAyMjEsIDEsIDQ1LCAyMjAsIDI1NSwgCi0gICAgNDUsIDIyMCwgMjU0LCA0NSwgMjIwLCAyNTMsIDQ1LCAyMjAsIDI1MiwgNDUsIDIyMCwgMjUxLCA0NSwgMjIwLCAyNTAsIDQ1LCAKLSAgICAyMjAsIDI0OSwgNDUsIDIyMCwgMjQ4LCA0NSwgMjIwLCAyNDcsIDQ1LCAyMjAsIDI0NiwgNDUsIDIyMCwgMjQ0LCA0NSwgCi0gICAgMjIwLCAyNDMsIDQ1LCAyMjAsIDI0MiwgNDUsIDIyMCwgMjQxLCA0NSwgMjIwLCAyNDAsIDQ1LCAyMjAsIDIzOSwgNDUsIAotICAgIDIyMCwgMjM4LCAyMjcsIDIwMiwgMjI3LCAyMDQsIDIxOCwgMTUyLCA2NCwgMjQxLCAyMzMsIDIxOSwgNDgsIDIxOCwgMTUyLCAKLSAgICA2NCwgMjE2LCAyMTIsIDIxOCwgODUsIDI0NSwgMTQzLCA2NCwgMjE2LCAyMTIsIDI0NSwgNTYsIDI0NSwgMTQzLCA2NCwgCi0gICAgMjE1LCAyNDMsIDI0NSwgMTA5LCAyNDUsIDEzMiwgMjQ1LCAxMzMsIDI1NSwgNywgMjU1LCA4LCAyNTQsIDE2NywgMjUyLCAKLSAgICA0NywgMjUyLCAxNzksIDI1MSwgMTMxLCAxMzUsIDIxNywgODksIDIwMywgMjE3LCA4OSwgMjQwLCAyMjcsIDIxNywgOTMsIAotICAgIDIzMiwgMjE0LCAyNDQsIDE0NSwgMTY2LCAyMzIsIDIxMywgMjQ1LCAxNDMsIDY0LCAyMzIsIDIxMywgMjMzLCAwLCAyMjgsIAotICAgIDEzNSwgMjQ1LCAxMTIsIDIzMiwgMjE0LCAyMTcsIDg5LCA2NywgMjE3LCA4OSwgMjEyLCAxMTgsIDI0NCwgMjAsIDI0NCwgCi0gICAgMTQ1LCAyNDQsIDEyNSwgMjUwLCAyMzAsIDIyMywgNTMsIDI0OSwgMTQzLCAyMjAsIDI4LCAyMjYsIDEzMCwgMjMyLCAxNTAsIAotICAgIDExMCwgMjE5LCA1OCwgMjIwLCAyOCwgMjM1LCAyNTUsIDIzMiwgMTUwLCAyMTAsIDg2LCAyMTksIDE5MSwgMjQ4LCAxNTEsIAotICAgIDIzMiwgMjA0LCAyNDUsIDc3LCAyNDcsIDE1NSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDExMCwgMjQ4LCAxNDEsIDI0OCwgMzEsIAotICAgIDI0OSwgMTc4LCAxMDUsIDI0OCwgMTQwLCAyNDgsIDMxLCAyNDksIDE3OCwgMTU4LCAyNDgsIDEzOSwgMjQ4LCAzMSwgMjQ5LCAKLSAgICAxNzgsIDE2MSwgMjQ4LCAxMzgsIDE1MiwgMjU1LCA3LCAyMjksIDIwOSwgMjE3LCAxNzcsIDIzNiwgNjIsIDIxNywgMTgwLCAKLSAgICAyNDUsIDE0MywgNjQsIDIxNSwgMjQ0LCAyNTEsIDIxMywgMjQ1LCA2MiwgMjUxLCA1LCAyNTEsIDcsIDI0NSwgMTQzLCA2NCwgCi0gICAgMjMxLCA4MSwgMjQ1LCAxMTAsIDIxOCwgNjEsIDIxOCwgNzgsIDI0NSwgNzcsIDI0NSwgNzgsIDIzNSwgMjMyLCAyMjAsIAotICAgIDEzOCwgMTYxLCAyNDQsIDEwNywgMjIwLCAxMzcsIDI0MywgMjM3LCAyMzUsIDIzMiwgMjIwLCAxMzgsIDE1OCwgMjQyLCAKLSAgICAxMjEsIDIyMCwgMTM3LCAyNDIsIDExOCwgMjM1LCAyMzIsIDIyMCwgMTM4LCAxMDUsIDIyMywgMTIxLCAyMjAsIDEzNywgCi0gICAgMjIyLCAxNDUsIDIzNSwgMjMyLCAyMjAsIDEzOCwgMTEwLCAyMTQsIDE3NCwgMjIwLCAxMzcsIDIxNCwgMTMzLCAyMTksIDIxLCAKLSAgICAyNDgsIDYzLCAyNDgsIDY1LCAyMjYsIDc4LCAyNTAsIDE0MiwgMjI2LCA4MCwgMTI1LCAyMjYsIDI0MCwgMjI0LCAxOTMsIAotICAgIDI0MSwgNDcsIDI1MSwgMTUwLCAyMjUsIDE3MywgMjQxLCAyMDMsIDI1MSwgMTYxLCAyMjgsIDc1LCAyNTEsIDE1MCwgMjQxLCAKLSAgICAyMDMsIDIyOSwgMTc1LCAyMzUsIDI0MiwgMjM1LCAyNDQsIDIyOSwgODIsIDIzMiwgMjEzLCAyMjksIDk5LCAyMTgsIDE1MiwgCi0gICAgNjQsIDIyMSwgMTU4LCAyNTQsIDE4LCAyMTgsIDIyMywgMjQ1LCAxNDMsIDY0LCAyMjEsIDE1OCwgMjU0LCAxOCwgMjQ1LCAKLSAgICA4MCwgMTM1LCAyMTcsIDkwLCAyMjAsIDEyNywgMjAzLCAyMTcsIDkwLCAyMjAsIDEyNywgMjQwLCAyMjQsIDEzNSwgMjE3LCAKLSAgICA5MCwgMiwgMjM1LCAzNSwgMjAzLCAyMTcsIDkwLCAyLCAyMzUsIDM1LCAyNDAsIDIyNSwgMjMyLCAyMTQsIDIxNywgOTAsIAotICAgIDIyMCwgMTI3LCA2NywgMjE3LCA5MCwgMjIwLCAxMjcsIDIxMiwgMTE3LCAyMjUsIDI1MywgMjMyLCAyMTQsIDI0NCwgMTQsIAotICAgIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjQ2LCAxMDYsIDIyNSwgMzIsIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjUyLCAxNzgsIDIyNSwgCi0gICAgMjUzLCAyMzIsIDIxNCwgMjE0LCAxNjMsIDIyNSwgMjgsIDIyMywgNTAsIDIzMiwgMjE0LCAyNDQsIDE0NSwgMjIzLCA1MCwgCi0gICAgMjM1LCAyNDIsIDIyMywgMzUsIDIxOSwgMTU1LCAyMjAsIDI4LCAxMDUsIDIxOSwgMTUyLCAyMTgsIDIyNSwgMjE5LCAxNTUsIAotICAgIDIyMCwgMjgsIDE1OCwgMjE5LCAxNTEsIDIxOCwgMjI0LCAyNDgsIDMxLCAyNDksIDE3OCwgMjE4LCAxMDUsIDI0OCwgMTM3LCAKLSAgICAyMjQsIDE4MywgMjE0LCAxMzIsIDExMCwgMjI0LCAxODMsIDIxNCwgMTMwLCAyMjQsIDE0OSwgMjI0LCAxODMsIDIxNCwgCi0gICAgMTMyLCAxMDUsIDIyNCwgMTgzLCAyMTQsIDEyOSwgMjI0LCAxNDgsIDIyMCwgMTI4LCAyMTUsIDI0MiwgMjE4LCAxNTEsIAotICAgIDIxOCwgODksIDI1MSwgNiwgMjUwLCAxNDIsIDI1MCwgMjA5LCAyMzEsIDQzLCAyMTIsIDU5LCAyMzAsIDQzLCAyMTgsIDE1MiwgCi0gICAgNjQsIDI0MiwgMTA3LCAyNTQsIDE4LCAyMTgsIDE1MiwgNjQsIDIyNCwgMTY2LCAyNTQsIDE4LCAyMTksIDIwLCAyNDUsIAotICAgIDE0MywgNjQsIDI0MiwgMTA3LCAyNTQsIDE4LCAyNDUsIDE0MywgNjQsIDIyNCwgMTY2LCAyNTQsIDE4LCAyNDUsIDEwNywgCi0gICAgMjE4LCAxNTIsIDY0LCAyMTgsIDEwNSwgMjE5LCAzNSwgMjE5LCAxNTUsIDI0MiwgMTQxLCAxMzUsIDIzNSwgMTk1LCAyMjAsIAotICAgIDEwNywgMjE5LCAxNTUsIDEzNSwgMjM1LCAxOTUsIDIyMSwgMTk0LCAyNDksIDE3OCwgMjIwLCAxMzUsIDIzNSwgMTk1LCAKLSAgICAyNDksIDExMywgMjE4LCAxMDYsIDIxNiwgMjM2LCAyMTgsIDE2OCwgMjI2LCAxNjksIDIxNywgMTY3LCAyNDksIDIxOCwgCi0gICAgMjI2LCAxNDIsIDIyNCwgMTg0LCAyMzEsIDQyLCAyMjUsIDE5LCAyNTQsIDUzLCAyMjQsIDE3OCwgMjQ5LCAyMTgsIDI1NCwgCi0gICAgNjksIDIyOSwgMTYzLCAyMTksIDIwMCwgNywgNiwgMSwgMjQyLCAyNDksIDcsIDQsIDEsIDI0MiwgMjQ5LCAyNTAsIDE1OSwgCi0gICAgMTY1LCAxLCAyMzIsIDE3NSwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIDI0NCwgMzYsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAKLSAgICAyNDQsIDE1NywgMjA5LCAyMDksIDEsIDIyMiwgMjExLCAyMDksIDIwOSwgMSwgMjMyLCAxNTYsIDYzLCAxNjQsIDI1MSwgCi0gICAgMjIzLCAyMjAsIDMsIDI0MiwgMjE1LCAyMzAsIDI0OCwgMjIzLCA0MSwgMjQzLCAyMTYsIDI0MywgMjE1LCAyNDMsIDIxNCwgCi0gICAgMjMwLCA0NSwgMjA5LCAyNTEsIDIwOSwgMjUyLCAyMDksIDI1NCwgMjMyLCAxMDIsIDIyMiwgMjE5LCAyMzIsIDEwMywgMjIyLCAKLSAgICAyMjAsIDIyNSwgMjIzLCAyMzIsIDEwMSwgMjIyLCAyMTgsIDIyOCwgMTA2LCAyMzAsIDE2NSwgMjExLCAyMjksIDIxMiwgMTUsIAotICAgIDI0NSwgMTYyLCAyNDMsIDIyNiwgMjMwLCAyMjksIDIyNiwgMTk3LCAyMTQsIDEzNCwgODcsIDIzMCwgMjI5LCAyNDgsIDE1NywgCi0gICAgODcsIDgsIDMsIDIzNSwgMTU4LCA3OCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDcxLCAyMzMsIDIwLCAxMjcsIAotICAgIDIxMywgMTE4LCAyMTMsIDcsIDIxMiwgMTk1LCAyMTIsIDE4NCwgMjEyLCAxNzMsIDIxMiwgMTYyLCAyMTIsIDE1MSwgMjEyLCAKLSAgICAxNDAsIDIxMiwgMTI5LCAyMTMsIDExNywgMjEzLCAxMDYsIDIxMywgOTUsIDIxMywgODQsIDIxMywgNzMsIDIxMywgNjIsIAotICAgIDIxMywgNTEsIDI1MSwgNzEsIDIyNiwgMTU1LCA3OCwgMjUxLCAxOTYsIDIwOSwgMjUzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgCi0gICAgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNCwgOSwgMjEzLCA0MCwgMjEzLCAyOSwgMjEzLCAxOCwgMjEzLCA2LCAyMTIsIDI1MSwgCi0gICAgMjEyLCAyNDAsIDIxMiwgMjI5LCAyMTIsIDIxOCwgMjEyLCAyMDcsIDIxMiwgMTk5LCAyMTIsIDE5OCwgMjEyLCAxOTcsIAotICAgIDIxMiwgMTk2LCAyMTIsIDE5NCwgMjEyLCAxOTMsIDIxMiwgMTkyLCAyMTIsIDE5MSwgMjEyLCAxOTAsIDIxMiwgMTg5LCAKLSAgICAyMTIsIDE4OCwgMjEyLCAxODcsIDIxMiwgMTg2LCAyMTIsIDE4NSwgMjEyLCAxODMsIDIxMiwgMTgyLCAyMTIsIDE4MSwgCi0gICAgMjEyLCAxODAsIDIxMiwgMTc5LCAyMTIsIDE3OCwgMjEyLCAxNzcsIDIxMiwgMTc2LCAyMTIsIDE3NSwgMjEyLCAxNzQsIAotICAgIDIxMiwgMTcyLCAyMTIsIDE3MSwgMjEyLCAxNzAsIDIxMiwgMTY5LCAyMTIsIDE2OCwgMjEyLCAxNjcsIDIxMiwgMTY2LCAKLSAgICAyMTIsIDE2NSwgMjEyLCAxNjQsIDIxMiwgMTYzLCAyMTIsIDE2MSwgMjEyLCAxNjAsIDIxMiwgMTU5LCAyMTIsIDE1OCwgCi0gICAgMjEyLCAxNTcsIDIxMiwgMTU2LCAyMTIsIDE1NSwgMjEyLCAxNTQsIDIxMiwgMTUzLCAyMTIsIDE1MiwgMjEyLCAxNTAsIAotICAgIDIxMiwgMTQ5LCAyMTIsIDE0OCwgMjEyLCAxNDcsIDIxMiwgMTQ2LCAyMTIsIDE0NSwgMjEyLCAxNDQsIDIxMiwgMTQzLCAKLSAgICAyMTIsIDE0MiwgMjEyLCAxNDEsIDIxMiwgMTM5LCAyMTIsIDEzOCwgMjEyLCAxMzcsIDIxMiwgMTM2LCAyMTIsIDEzNSwgCi0gICAgMjEyLCAxMzQsIDIxMiwgMTMzLCAyMTIsIDEzMiwgMjEyLCAxMzEsIDIxMiwgMTMwLCAyMTIsIDEyOCwgMjEyLCAxMjcsIAotICAgIDIxMiwgMTI2LCAyMTIsIDEyNSwgMjEyLCAxMjQsIDIxMiwgMTIzLCAyMTIsIDEyMiwgMjEyLCAxMjEsIDIxMiwgMTIwLCAKLSAgICAyMTIsIDExOSwgMjEzLCAxMTYsIDIxMywgMTE1LCAyMTMsIDExNCwgMjEzLCAxMTMsIDIxMywgMTEyLCAyMTMsIDExMSwgCi0gICAgMjEzLCAxMTAsIDIxMywgMTA5LCAyMTMsIDEwOCwgMjEzLCAxMDcsIDIxMywgMTA1LCAyMTMsIDEwNCwgMjEzLCAxMDMsIAotICAgIDIxMywgMTAyLCAyMTMsIDEwMSwgMjEzLCAxMDAsIDIxMywgOTksIDIxMywgOTgsIDIxMywgOTcsIDIxMywgOTYsIDIxMywgCi0gICAgOTQsIDIxMywgOTMsIDIxMywgOTIsIDIxMywgOTEsIDIxMywgOTAsIDIxMywgODksIDIxMywgODgsIDIxMywgODcsIDIxMywgCi0gICAgODYsIDIxMywgODUsIDIxMywgODMsIDIxMywgODIsIDIxMywgODEsIDIxMywgODAsIDIxMywgNzksIDIxMywgNzgsIDIxMywgCi0gICAgNzcsIDIxMywgNzYsIDIxMywgNzUsIDIxMywgNzQsIDIxMywgNzIsIDIxMywgNzEsIDIxMywgNzAsIDIxMywgNjksIDIxMywgCi0gICAgNjgsIDIxMywgNjcsIDIxMywgNjYsIDIxMywgNjUsIDIxMywgNjQsIDIxMywgNjMsIDIxMywgNjEsIDIxMywgNjAsIDIxMywgCi0gICAgNTksIDIxMywgNTgsIDIxMywgNTcsIDIxMywgNTYsIDIxMywgNTUsIDIxMywgNTQsIDIxMywgNTMsIDIxMywgNTIsIDIxMywgCi0gICAgNTAsIDIxMywgNDksIDIxMywgNDgsIDIxMywgNDcsIDIxMywgNDYsIDIxMywgNDUsIDIxMywgNDQsIDIxMywgNDMsIDIxMywgCi0gICAgNDIsIDIxMywgNDEsIDIxMywgMzksIDIxMywgMzgsIDIxMywgMzcsIDIxMywgMzYsIDIxMywgMzUsIDIxMywgMzQsIDIxMywgCi0gICAgMzMsIDIxMywgMzIsIDIxMywgMzEsIDIxMywgMzAsIDIxMywgMjgsIDIxMywgMjcsIDIxMywgMjYsIDIxMywgMjUsIDIxMywgCi0gICAgMjQsIDIxMywgMjMsIDIxMywgMjIsIDIxMywgMjEsIDIxMywgMjAsIDIxMywgMTksIDIxMywgMTcsIDIxMywgMTYsIDIxMywgCi0gICAgMTUsIDIxMywgMTQsIDIxMywgMTMsIDIxMywgMTIsIDIxMywgMTEsIDIxMywgMTAsIDIxMywgOSwgMjEzLCA4LCAyMTMsIDUsIAotICAgIDIxMywgNCwgMjEzLCAzLCAyMTMsIDIsIDIxMywgMSwgMjEzLCAwLCAyMTIsIDI1NSwgMjEyLCAyNTQsIDIxMiwgMjUzLCAKLSAgICAyMTIsIDI1MiwgMjEyLCAyNTAsIDIxMiwgMjQ5LCAyMTIsIDI0OCwgMjEyLCAyNDcsIDIxMiwgMjQ2LCAyMTIsIDI0NSwgCi0gICAgMjEyLCAyNDQsIDIxMiwgMjQzLCAyMTIsIDI0MiwgMjEyLCAyNDEsIDIxMiwgMjM5LCAyMTIsIDIzOCwgMjEyLCAyMzcsIAotICAgIDIxMiwgMjM2LCAyMTIsIDIzNSwgMjEyLCAyMzQsIDIxMiwgMjMzLCAyMTIsIDIzMiwgMjEyLCAyMzEsIDIxMiwgMjMwLCAKLSAgICAyMTIsIDIyOCwgMjEyLCAyMjcsIDIxMiwgMjI2LCAyMTIsIDIyNSwgMjEyLCAyMjQsIDIxMiwgMjIzLCAyMTIsIDIyMiwgCi0gICAgMjEyLCAyMjEsIDIxMiwgMjIwLCAyMTIsIDIxOSwgMjEyLCAyMTcsIDIxMiwgMjE2LCAyMTIsIDIxNSwgMjEyLCAyMTQsIAotICAgIDIxMiwgMjEzLCAyMTIsIDIxMiwgMjEyLCAyMTEsIDIxMiwgMjEwLCAyMTIsIDIwOSwgMjEyLCAyMDgsIDIxMiwgMjA2LCAKLSAgICAyMTIsIDIwNSwgMjEyLCAyMDQsIDIxMiwgMjAzLCAyMTIsIDIwMiwgMjEyLCAyMDEsIDIxMiwgMjAwLCA3LCA2LCAxLCAxMTUsIAotICAgIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIAotICAgIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgCi0gICAgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjUwLCAyMzQsIDcsIAotICAgIDYsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAKLSAgICAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDU5LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMjI5LCAKLSAgICA4MCwgMiwgMjE2LCA4OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAKLSAgICA2NywgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCAKLSAgICA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIAotICAgIDIyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDY3LCAKLSAgICAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAKLSAgICAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAKLSAgICA1OSwgNzcsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCAKLSAgICA3NywgMjIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDU5LCA3NywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIAotICAgIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNSwgMjIsIDU5LCA3NywgMjIsIDE0MiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgCi0gICAgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIAotICAgIDEsIDIzNSwgMTQ1LCAyLCAxODIsIDcsIDQsIDEsIDIzNSwgMTQ1LCAyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIDEsIDIzMywgCi0gICAgMTQ5LCAyLCAxODIsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxODIsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDE4MiwgNywgNCwgCi0gICAgMSwgMjMyLCA1MCwgMiwgMTgyLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMTgyLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCA3LCA0LCAxLCAxMDQsIDIsIDIyNiwgMjI1LCAyMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTgyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMTgyLCAKLSAgICA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgCi0gICAgMjA0LCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTUsIAotICAgIDk0LCAyMTQsIDEwNiwgMiwgMTQyLCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIyMSwgMTk2LCAKLSAgICAyLCAxNDIsIDcsIDQsIDEsIDI0MSwgNTEsIDIyMSwgMTk2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQxLCA1MSwgMjIxLCAKLSAgICAxOTYsIDIsIDE0MiwgMTQ2LCAxLCAyMzQsIDEwOSwgMzYsIDExNiwgMjM1LCAyMywgMzYsIDExNiwgMjI5LCA3OSwgMzYsIAotICAgIDExNiwgMjUxLCA2NiwgMzYsIDExNiwgMjI3LCAxNjcsIDM2LCAxMTYsIDIxNSwgMTU5LCAzNiwgMTE2LCAyMjgsIDExMSwgCi0gICAgMzYsIDExNiwgMjE3LCAxNTIsIDM2LCAxMTYsIDIzMCwgMjUsIDM2LCAxMTYsIDIyNiwgMTA1LCAzNiwgMTE2LCAxOTMsIDM2LCAKLSAgICAxMTYsIDIxMSwgMTE3LCAzNiwgMTE2LCAxNTMsIDM2LCAxMTYsIDE1NiwgMzYsIDExNiwgMjE0LCAxMDUsIDM2LCAxMTYsIAotICAgIDIzMiwgMTc2LCAzNiwgMTE2LCAyMzIsIDE4NSwgMzYsIDExNiwgMjIyLCAxODAsIDM2LCAxMTYsIDIyOCwgOTMsIDM2LCAKLSAgICAxMTYsIDIzNSwgMTQ0LCAzNiwgMTE2LCAyMjAsIDEwNCwgMzYsIDExNiwgMjE4LCAyMjYsIDM2LCAxMTYsIDIyMiwgOTEsIAotICAgIDM2LCAxMTYsIDI0MiwgNjAsIDM2LCAxMTYsIDIzMywgMjMyLCAzNiwgMywgMjM1LCAxMCwgMzYsIDMsIDIzNCwgOTIsIDM2LCAKLSAgICAzLCAyMzQsIDgzLCAzNiwgMywgMjMzLCAyMTcsIDM2LCAzLCAyMzMsIDE4OCwgMzYsIDMsIDIzNCwgMTgyLCAzNiwgMywgCi0gICAgMjM0LCAxODEsIDM2LCAzLCAyMzQsIDI0NiwgMzYsIDMsIDIzNCwgMjgsIDM2LCAzLCAyMzQsIDEwLCAzNiwgMywgMjM0LCAKLSAgICAxOTUsIDM2LCAzLCAyMjksIDc2LCAzNiwgMywgMjI5LCAyNywgMzYsIDMsIDIyOSwgMjMsIDM2LCAzLCAyMjgsIDI0OCwgMzYsIAotICAgIDMsIDIyOCwgMjQxLCAzNiwgMywgMjI5LCA2NCwgMzYsIDMsIDIyOSwgNjIsIDM2LCAzLCAyMjksIDczLCAzNiwgMywgMjI5LCAKLSAgICA0LCAzNiwgMywgMjI4LCAyNTUsIDM2LCAzLCAyMjksIDY2LCAzNiwgMywgMjUxLCAzMiwgMzYsIDMsIDI1MCwgNTEsIDM2LCAKLSAgICAzLCAyNTAsIDQxLCAzNiwgMywgMjQ5LCAxMTIsIDM2LCAzLCAyNDksIDgzLCAzNiwgMywgMjUwLCAxOTAsIDM2LCAzLCAyNTAsIAotICAgIDE4MiwgMzYsIDMsIDI1MSwgMjIsIDM2LCAzLCAyNDksIDIzOCwgMzYsIDMsIDI0OSwgMTc0LCAzNiwgMywgMjUwLCAyMjIsIAotICAgIDM2LCAzLCAyMjcsIDE2NCwgMzYsIDMsIDIyNywgMTQ4LCAzNiwgMywgMjI3LCAxNDMsIDM2LCAzLCAyMjcsIDEyOCwgMzYsIAotICAgIDMsIDIyNywgMTIxLCAzNiwgMywgMjI3LCAxNTYsIDM2LCAzLCAyMjcsIDE1NSwgMzYsIDMsIDIyNywgMTYxLCAzNiwgMywgCi0gICAgMjI3LCAxMzQsIDM2LCAzLCAyMjcsIDEzMiwgMzYsIDMsIDIyNywgMTU5LCAzNiwgMywgMjE1LCAxNTUsIDM2LCAzLCAyMTUsIAotICAgIDEzNSwgMzYsIDMsIDIxNSwgMTM0LCAzNiwgMywgMjE1LCAxMjMsIDM2LCAzLCAyMTUsIDEyMCwgMzYsIDMsIDIxNSwgMTUxLCAKLSAgICAzNiwgMywgMjE1LCAxNTAsIDM2LCAzLCAyMTUsIDE1NCwgMzYsIDMsIDIxNSwgMTMzLCAzNiwgMywgMjE1LCAxMzIsIDM2LCAKLSAgICAzLCAyMTUsIDE1MywgMzYsIDMsIDIyOCwgMTA5LCAzNiwgMywgMjI4LCA5NSwgMzYsIDMsIDIyOCwgOTQsIDM2LCAzLCAyMjgsIAotICAgIDc4LCAzNiwgMywgMjI4LCA3NywgMzYsIDMsIDIyOCwgMTA1LCAzNiwgMywgMjI4LCAxMDQsIDM2LCAzLCAyMjgsIDEwOCwgCi0gICAgMzYsIDMsIDIyOCwgODAsIDM2LCAzLCAyMjgsIDc5LCAzNiwgMywgMjI4LCAxMDcsIDM2LCAzLCAyMTcsIDEwMSwgMzYsIDMsIAotICAgIDIxNiwgMTE3LCAzNiwgMywgMjE2LCAxMDMsIDM2LCAzLCAyMTUsIDExOCwgMzYsIDMsIDIxNSwgODUsIDM2LCAzLCAyMTcsIAotICAgIDIyLCAzNiwgMywgMjE3LCAxMSwgMzYsIDMsIDIxNywgNzksIDM2LCAzLCAxMTEsIDM2LCAzLCAyMTYsIDE3LCAzNiwgMywgCi0gICAgMjE3LCA0MSwgMzYsIDMsIDIyOSwgMjI1LCAzNiwgMywgMjI4LCAyMzMsIDM2LCAzLCAyMjgsIDIwOCwgMzYsIDMsIDIyNywgCi0gICAgMjM3LCAzNiwgMywgMjI3LCAxNzksIDM2LCAzLCAyMjksIDEwNywgMzYsIDMsIDIyOSwgMTAzLCAzNiwgMywgMjI5LCAyMTIsIAotICAgIDM2LCAzLCAyMjgsIDc0LCAzNiwgMywgMjI4LCA2NCwgMzYsIDMsIDIyOSwgMTg3LCAzNiwgMywgMjI2LCA4OSwgMzYsIDMsIAotICAgIDIyNSwgMTA4LCAzNiwgMywgMjI1LCA3MSwgMzYsIDMsIDIyNCwgMTUwLCAzNiwgMywgMjI0LCAxMTksIDM2LCAzLCAyMjUsIAotICAgIDIyMSwgMzYsIDMsIDIyNSwgMjExLCAzNiwgMywgMjI2LCA3MSwgMzYsIDMsIDIyNSwgMTYsIDM2LCAzLCAyMjQsIDI0OSwgCi0gICAgMzYsIDMsIDIyNSwgMjM0LCAzNiwgMywgMjMxLCAyMzcsIDM2LCAzLCAyMzAsIDIzMCwgMzYsIDMsIDIzMCwgMjAxLCAzNiwgCi0gICAgMywgMjMwLCAxMDIsIDM2LCAzLCAyMzAsIDU0LCAzNiwgMywgMjMxLCA5MSwgMzYsIDMsIDIzMSwgODAsIDM2LCAzLCAyMzEsIAotICAgIDIwMywgMzYsIDMsIDIzMCwgMTYxLCAzNiwgMywgMjMwLCAxMzIsIDM2LCAzLCAyMzEsIDEzNSwgMzYsIDMsIDIxMSwgMTAzLCAKLSAgICAzNiwgMywgMjExLCA4LCAzNiwgMywgMjEwLCAyNTUsIDM2LCAzLCAyMTAsIDIxMiwgMzYsIDMsIDIxMCwgMTgxLCAzNiwgMywgCi0gICAgMjExLCA0NywgMzYsIDMsIDIxMSwgNDQsIDM2LCAzLCAyMTEsIDgyLCAzNiwgMywgMjEwLCAyNDQsIDM2LCAzLCAyMTAsIAotICAgIDIyOSwgMzYsIDMsIDIxMSwgNTUsIDM2LCAzLCAyMjMsIDE4NCwgMzYsIDMsIDIyMywgMzUsIDM2LCAzLCAyMjIsIDIzOSwgCi0gICAgMzYsIDMsIDIyMiwgMTQwLCAzNiwgMywgMjIyLCAxMTIsIDM2LCAzLCAyMjMsIDEyOCwgMzYsIDMsIDIyMywgMTA4LCAzNiwgCi0gICAgMywgMjIzLCAxNjYsIDM2LCAzLCAyMjIsIDIxMSwgMzYsIDMsIDIyMiwgMTk3LCAzNiwgMywgMjIzLCAxMzYsIDM2LCAzLCAKLSAgICAyMzMsIDEzNCwgMzYsIDMsIDIzMiwgMjQxLCAzNiwgMywgMjMyLCAyMjcsIDM2LCAzLCAyMzIsIDk4LCAzNiwgMywgMjMyLCAKLSAgICA3MywgMzYsIDMsIDIzMywgNTgsIDM2LCAzLCAyMzMsIDUwLCAzNiwgMywgMjMzLCAxMDksIDM2LCAzLCAyMzIsIDE1NiwgMzYsIAotICAgIDMsIDIzMiwgMTI3LCAzNiwgMywgMjMzLCA3NCwgMzYsIDMsIDIxNCwgMjYsIDM2LCAzLCAyMTMsIDE3NiwgMzYsIDMsIDIxMywgCi0gICAgMTYyLCAzNiwgMywgMjEyLCAxMTYsIDM2LCAzLCAyMTIsIDEwOSwgMzYsIDMsIDIxMywgMjU1LCAzNiwgMywgMjEzLCAyNTAsIAotICAgIDM2LCAzLCAyMTQsIDIzLCAzNiwgMywgMjEzLCAxMzgsIDM2LCAzLCAyMTMsIDEyNywgMzYsIDMsIDIxNCwgNSwgMzYsIDMsIAotICAgIDIzMiwgMTc0LCAzNiwgMywgMjMyLCAxNjksIDM2LCAzLCAyMzIsIDE2OCwgMzYsIDMsIDIzMiwgMTY1LCAzNiwgMywgMjMyLCAKLSAgICAxNjQsIDM2LCAzLCAyMzIsIDE3MSwgMzYsIDMsIDIzMiwgMTcwLCAzNiwgMywgMjMyLCAxNzMsIDM2LCAzLCAyMzIsIDE2NywgCi0gICAgMzYsIDMsIDIzMiwgMTY2LCAzNiwgMywgMjMyLCAxNzIsIDM2LCAzLCAyMzIsIDE4MywgMzYsIDMsIDIzMiwgMTc4LCAzNiwgCi0gICAgMywgMjMyLCAxNzcsIDM2LCAzLCAyMzIsIDE2MSwgMzYsIDMsIDIzMiwgMTYwLCAzNiwgMywgMjMyLCAxODAsIDM2LCAzLCAKLSAgICAyMzIsIDE3OSwgMzYsIDMsIDIzMiwgMTgyLCAzNiwgMywgMjMyLCAxNjMsIDM2LCAzLCAyMzIsIDE2MiwgMzYsIDMsIDIzMiwgCi0gICAgMTgxLCAzNiwgMywgMjIyLCAxNzgsIDM2LCAzLCAyMjIsIDE2NywgMzYsIDMsIDIyMiwgMTY2LCAzNiwgMywgMjIyLCAxNjAsIAotICAgIDM2LCAzLCAyMjIsIDE1MywgMzYsIDMsIDIyMiwgMTc0LCAzNiwgMywgMjIyLCAxNzMsIDM2LCAzLCAyMjIsIDE3NywgMzYsIAotICAgIDMsIDIyMiwgMTY1LCAzNiwgMywgMjIyLCAxNjQsIDM2LCAzLCAyMjIsIDE3NiwgMzYsIDMsIDIyOCwgOTEsIDM2LCAzLCAKLSAgICAyMjgsIDg2LCAzNiwgMywgMjI4LCA4NSwgMzYsIDMsIDIyOCwgODIsIDM2LCAzLCAyMjgsIDgxLCAzNiwgMywgMjI4LCA4OCwgCi0gICAgMzYsIDMsIDIyOCwgODcsIDM2LCAzLCAyMjgsIDkwLCAzNiwgMywgMjI4LCA4NCwgMzYsIDMsIDIyOCwgODMsIDM2LCAzLCAKLSAgICAyMjgsIDg5LCAzNiwgMywgMjM1LCAxNDAsIDM2LCAzLCAyMzUsIDEwOCwgMzYsIDMsIDIzNSwgMTAxLCAzNiwgMywgMjM1LCAKLSAgICA1MSwgMzYsIDMsIDIzNSwgMzMsIDM2LCAzLCAyMzUsIDEyNiwgMzYsIDMsIDIzNSwgMTI0LCAzNiwgMywgMjM1LCAxMzUsIAotICAgIDM2LCAzLCAyMzUsIDY4LCAzNiwgMywgMjM1LCA1OSwgMzYsIDMsIDIzNSwgMTI5LCAzNiwgMywgMjIwLCA5OCwgMzYsIDMsIAotICAgIDIyMCwgMzIsIDM2LCAzLCAyMjAsIDI3LCAzNiwgMywgMjE5LCAyMjUsIDM2LCAzLCAyMTksIDIxMCwgMzYsIDMsIDIyMCwgCi0gICAgNjMsIDM2LCAzLCAyMjAsIDYxLCAzNiwgMywgMjIwLCA5MCwgMzYsIDMsIDIyMCwgNywgMzYsIDMsIDIyMCwgMSwgMzYsIDMsIAotICAgIDIyMCwgNzEsIDM2LCAzLCAyMTgsIDIyMiwgMzYsIDMsIDIxOCwgMTkyLCAzNiwgMywgMjE4LCAxODgsIDM2LCAzLCAyMTgsIAotICAgIDE3OSwgMzYsIDMsIDIxOCwgMTc2LCAzNiwgMywgMjE4LCAxOTcsIDM2LCAzLCAyMTgsIDE5NiwgMzYsIDMsIDIxOCwgMjIxLCAKLSAgICAzNiwgMywgMjE4LCAxODQsIDM2LCAzLCAyMTgsIDE4MywgMzYsIDMsIDIxOCwgMTk5LCAzNiwgMywgMjIyLCAzMSwgMzYsIDMsIAotICAgIDIxOSwgMTkxLCAzNiwgMywgMjE5LCAxNzUsIDM2LCAzLCAyMTgsIDgzLCAzNiwgMywgMjE4LCA0LCAzNiwgMywgMjIxLCAKLSAgICAxODEsIDM2LCAzLCAyMjEsIDE3MCwgMzYsIDMsIDIyMiwgMTcsIDM2LCAzLCAyMTksIDU4LCAzNiwgMywgMjE5LCA0MCwgMzYsIAotICAgIDMsIDIyMSwgMjE5LCAzNiwgMywgMjQyLCA0NiwgMzYsIDMsIDI0MSwgMTgwLCAzNiwgMywgMjQxLCAxNjEsIDM2LCAzLCAKLSAgICAyNDAsIDIyMiwgMzYsIDMsIDI0MCwgMjAyLCAzNiwgMywgMjQxLCAyMzgsIDM2LCAzLCAyNDEsIDIyMCwgMzYsIDMsIDI0MiwgCi0gICAgMzYsIDM2LCAzLCAyNDEsIDY4LCAzNiwgMywgMjQxLCA1MywgMzYsIDMsIDI0MSwgMjQ2LCAzNiwgMywgMjMzLCAyMzEsIDM2LCAKLSAgICAzLCAyMzMsIDIzMCwgMzYsIDMsIDIzMywgMjI1LCAzNiwgMywgMjMzLCAyMjQsIDM2LCAzLCAyMzMsIDIyMSwgMzYsIDMsIAotICAgIDIzMywgMjIwLCAzNiwgMywgMjMzLCAyMjcsIDM2LCAzLCAyMzMsIDIyNiwgMzYsIDMsIDIzMywgMjI5LCAzNiwgMywgMjMzLCAKLSAgICAyMjMsIDM2LCAzLCAyMzMsIDIyMiwgMzYsIDMsIDIzMywgMjI4LCAzNiwgMywgMjE5LCAyMzEsIDE3NSwgMTE2LCA1LCAyMTEsIAotICAgIDY4LCAxNzUsIDExNiwgNSwgMjIzLCAxNTUsIDE3NSwgMTE2LCA1LCAyMjMsIDc4LCA5OCwgMSwgMjE1LCAyOCwgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDE3NiwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzNCwgMTMyLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgCi0gICAgMjM0LCAyOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzNCwgMTA1LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI5LCA0LCAKLSAgICA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUxLCAzMywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MCwgMTU3LCA2OSwgMTE2LCAKLSAgICA1LCAyNDksIDIzMywgMjQ5LCAyMzgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTAsIDg2LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjI3LCAxMzQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNDgsIDIyMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNSwgCi0gICAgMTQ0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjQ3LCAxNDUsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTUsIDEzOSwgNjksIAotICAgIDExNiwgNSwgMjQ5LCAyMzMsIDE5NywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNywgMTA1LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjE2LCAyMDgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAxMTEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTYsIDE1NiwgCi0gICAgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyOCwgNzQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTIsIDE5MSwgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDIyNSwgMTQ3LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI1LCAxNiwgNjksIDExNiwgNSwgMjQ5LCAKLSAgICAyMzMsIDIyNSwgMTIxLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMwLCAxNjEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTAsIAotICAgIDI0NCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyMiwgMjExLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMyLCAxNTYsIDY5LCAKLSAgICAxMTYsIDUsIDI0OSwgMjMzLCAyMTMsIDEzOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyMCwgMTAyLCA2OSwgMTE2LCA1LCAKLSAgICAyNDksIDIzMywgMjE4LCAyMjMsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMDYsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAxNjIsIAotICAgIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzMsIDEzNSwgNjksIDI1LCA1LCAyNDksIDIzMywgMjI0LCA4OCwgNjksIDIzNSwgCi0gICAgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyNCwgMzAsIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAyMjIsIDEwMCwgCi0gICAgNjksIDIzNSwgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyMiwgOTMsIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAKLSAgICAyMjQsIDY5LCA2OSwgMjUsIDUsIDIyNiwgMjA0LCA2OSwgMjUsIDUsIDI1NSwgMzQsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgCi0gICAgNzcsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgMjcsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOCwgMjQ4LCAxNDEsIDEsIDI1MSwgCi0gICAgMjU1LCAyMjksIDY0LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjksIDQsIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA3NywgNTYsIDEsIAotICAgIDI1MSwgMjU1LCAyMjksIDI3LCA1NiwgMSwgMjUxLCAyNTUsIDIyOCwgMjQ4LCA1NiwgMSwgMjUxLCAyNTUsIDIyOSwgNjQsIAotICAgIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA0LCA1NiwgMSwgMjU0LCAxOTQsIDI1MCwgMTkwLCA1NiwgMSwgMjU0LCAxOTQsIDIxNSwgCi0gICAgMTE4LCA1NiwgMSwgMjU0LCAxOTQsIDExMSwgNTYsIDEsIDI1NCwgMTk0LCAyMjYsIDEwNSwgNTgsIDEsIDI0NSwgMjAsIAotICAgIDI0NSwgMTksIDI0OSwgMTgyLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NSwgMjAsIDI0OSwgMTgyLCAxMzgsIDEzMCwgCisgICAgNDUsIDEwOCwgMTYsIDMxLCAyMjUsIDEyOCwgMjE4LCA0NSwgMTA4LCAxNiwgMzEsIDg1LCAyMTgsIDQ1LCAxMDgsIDE2LCAKKyAgICAzMSwgMjMxLCA2MCwgMjE4LCA3MiwgMTA4LCAxNiwgMzEsIDIzMSwgNjAsIDIxOCwgNzEsIDEwOCwgMTYsIDMxLCAyMzEsIAorICAgIDYwLCAyMTgsIDcwLCAxMDgsIDE2LCAzMSwgMjUwLCA0NiwgMTA4LCAxNiwgMzEsIDIyMiwgMywgMTA4LCAxNiwgMzEsIDIyOCwgCisgICAgMTkzLCAxMDgsIDE2LCAzMSwgMjEzLCAxNDEsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MCwgMTA4LCAxNiwgMzEsIDIyMiwgMjA2LCAKKyAgICAyMjIsIDMsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNiwgMjIyLCAyLCAxMDgsIDE2LCAzMSwgMjQyLCAxNzMsIDEwOCwgMTYsIAorICAgIDMxLCAyMTksIDE2OCwgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAKKyAgICAyMjYsIDE1NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjM1LCAxODMsIDEwOCwgMTYsIDMxLCAyMjMsIDEwNCwgNjQsIAorICAgIDIzNSwgMTgzLCAxMDgsIDE2LCAzMSwgMjQ5LCAxNzYsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjM1LCAxODIsIDIyNiwgCisgICAgMTU3LCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNDIsIDY0LCAyNDksIAorICAgIDE3NSwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjQ5LCAxNzQsIDEwOCwgMTYsIDMxLCAyNDksIDE3NiwgMjU0LCA5MSwgCisgICAgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI0OSwgMTc2LCAyNTQsIDkxLCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIAorICAgIDIyMiwgNCwgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjEzLCAyNDMsIDEwOCwgMTYsIDMxLCAyMTYsIDg1LCAyMjYsIAorICAgIDE1NywgMTA4LCAxNiwgMzEsIDIzMywgNjMsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjU0LCA5MCwgMjI2LCAxNTcsIDEwOCwgCisgICAgMTYsIDMxLCAyMTgsIDczLCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI1NCwgODksIDEwOCwgMTYsIAorICAgIDMxLCAyMTgsIDczLCA2NCwgMjIyLCA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIxMywgMTU4LCA2NCwgMjU0LCA4OSwgCisgICAgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OCwgCisgICAgMTA4LCAxNiwgMzEsIDIyMywgMTAzLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDIsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgMTA4LCAKKyAgICAxNiwgMzEsIDIyMywgMTAwLCAxMDgsIDE2LCAzMSwgMjU0LCAxNjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE2NSwgMTA4LCAxNiwgCisgICAgMzEsIDIzMSwgMTY4LCAxMDgsIDE2LCAzMSwgMjIyLCA5LCAxMDgsIDE2LCAzMSwgMjUzLCAyNTQsIDEwOCwgMTYsIDMxLCAKKyAgICAyMjMsIDEyOCwgMTA4LCAxNiwgMzEsIDIyMywgMTI3LCAxMDgsIDE2LCAzMSwgMjUzLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIAorICAgIDIzNywgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyMTcsIDUwLCAxMDgsIDE2LCAzMSwgMjE3LCA0OSwgMTA4LCAxNiwgMzEsIAorICAgIDIyNCwgMTEsIDIzMiwgMjI4LCAxMDgsIDE2LCAzMSwgMjUxLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIDE5MCwgMTA4LCAxNiwgCisgICAgMzEsIDI1MSwgMTg5LCAxMDgsIDE2LCAzMSwgMjU0LCAxNDYsIDEwOCwgMTYsIDMxLCAyMjYsIDIyMiwgMTA4LCAxNiwgMzEsIAorICAgIDIxOCwgMjUwLCAxMDgsIDE2LCAzMSwgMjE2LCA4MywgMTA4LCAxNiwgMzEsIDI0MiwgMTAzLCAxMDgsIDE2LCAzMSwgMjEyLCAKKyAgICAyOCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI5LCAxMDgsIDE2LCAzMSwgMjUxLCAyMiwgMTA4LCAxNiwgMzEsIDIxNSwgODYsIAorICAgIDEwOCwgMTYsIDMxLCAyNTAsIDI1NCwgMjMwLCAxMjcsIDEwOCwgMTYsIDMxLCAyMjEsIDIwNCwgNjQsIDIzNSwgNjEsIDEwOCwgCisgICAgMTYsIDMxLCAyNTEsIDMzLCAxMDgsIDE2LCAzMSwgMjE1LCAyMjAsIDEwOCwgMTYsIDMxLCAyMTgsIDE1NiwgMjE1LCAyMjAsIAorICAgIDEwOCwgMTYsIDMxLCAyMzIsIDE1NCwgMTA4LCAxNiwgMzEsIDIxOSwgNTgsIDEwOCwgMTYsIDMxLCAyMTQsIDE0MiwgMTA4LCAKKyAgICAxNiwgMzEsIDI0MCwgMjUzLCAyNDYsIDcyLCAxMDgsIDE2LCAzMSwgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyMjQsIDIzNywgCisgICAgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyNTEsIDE1MCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI4LCAyNTEsIDE1MCwgMTA4LCAKKyAgICAxNiwgMzEsIDI1NCwgMTQzLCAxMDgsIDE2LCAzMSwgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE4LCAxMDgsIDE2LCAzMSwgCisgICAgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE3LCAxMDgsIDE2LCAzMSwgMjE4LCA2OSwgMTA4LCAxNiwgMzEsIDIyNCwgMjAzLCAKKyAgICAxMDgsIDE2LCAzMSwgMjQ3LCAxODksIDEwOCwgMTYsIDMxLCAyNDcsIDE5MSwgMTA4LCAxNiwgMzEsIDI0NywgMTkwLCAxMDgsIAorICAgIDE2LCAzMSwgMjI0LCAxMzQsIDEwOCwgMTYsIDMxLCAyMjQsIDEyMywgMTA4LCAxNiwgMzEsIDI0OSwgMTMwLCAxMDgsIDE2LCAKKyAgICAzMSwgMjQ5LCAxMjksIDEwOCwgMTYsIDMxLCAyNDksIDEyOCwgMTA4LCAxNiwgMzEsIDI0OSwgMTI3LCAxMDgsIDE2LCAzMSwgCisgICAgMjQ5LCAxMjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE3OCwgMTA4LCAxNiwgMzEsIDI1MiwgMTI3LCA2NCwgMjMxLCAxNTQsIAorICAgIDEwOCwgMTYsIDMxLCAyNTIsIDEyNywgNjQsIDIxNCwgMTcsIDEwOCwgMTYsIDMxLCAyMjMsIDYwLCAxMDgsIDE2LCAzMSwgCisgICAgMjQwLCAyNDUsIDEwOCwgMTYsIDMxLCAyMjgsIDIxNywgMTA4LCAxNiwgMzEsIDI0OCwgMTUzLCAxMDgsIDE2LCAzMSwgMjMwLCAKKyAgICAxMzksIDEwOCwgMTYsIDMxLCAxNjMsIDI0NiwgMTAyLCAxMDgsIDE2LCAzMSwgMTYzLCAyMjYsIDEzNiwgMTAsIDE0LCAyNDAsIAorICAgIDEwOSwgMTAsIDE0LCAyNDAsIDEwOCwgMTAsIDE0LCAyNDAsIDEwNywgMTAsIDE0LCAyNDAsIDEwNiwgMTAsIDE0LCAyNDAsIAorICAgIDEwNSwgMTAsIDE0LCAyNDAsIDEwNCwgMTAsIDE0LCAyNDAsIDEwMywgMTAsIDE0LCAyNDAsIDEwMiwgMTAsIDE0LCAyNDAsIAorICAgIDEwMSwgMTAsIDE0LCAyNDAsIDEwMCwgMTAsIDE0LCAyNDAsIDk5LCAxMCwgMTQsIDI0MCwgOTgsIDEwLCAxNCwgMjQwLCA5NywgCisgICAgMTAsIDE0LCAyNDAsIDk2LCAxMCwgMTQsIDI0MCwgOTUsIDEwLCAxNCwgMjQwLCA5NCwgMTAsIDE0LCAyNDAsIDkzLCAxMCwgCisgICAgMTQsIDI0MCwgOTIsIDEwLCAxNCwgMjQwLCA5MSwgMTAsIDE0LCAyNDAsIDkwLCAxMCwgMTQsIDI0MCwgODksIDEwLCAxNCwgCisgICAgMjQwLCA4OCwgMTAsIDE0LCAyNDAsIDg3LCAxMCwgMTQsIDI0MCwgODYsIDEwLCAxNCwgMjQwLCA4NSwgMTAsIDE0LCAyNDAsIAorICAgIDg0LCAxMCwgMTQsIDI0MCwgODMsIDEwLCAxNCwgMjQwLCA4MiwgMTAsIDE0LCAyNDAsIDgxLCAxMCwgMTQsIDI0MCwgODAsIAorICAgIDEwLCAxNCwgMjQwLCA3OSwgMTAsIDE0LCAyNDAsIDc4LCAxMCwgMTQsIDI0MCwgNzcsIDEwLCAxNCwgMjQwLCA3NiwgMTAsIAorICAgIDE0LCAyNDAsIDc1LCAxMCwgMTQsIDI0MCwgNzQsIDEwLCAxNCwgMjQwLCA3MywgMTAsIDE0LCAyNDAsIDcyLCAxMCwgMTQsIAorICAgIDI0MCwgNzEsIDEwLCAxNCwgMjQwLCA3MCwgMTAsIDE0LCAyNDAsIDY5LCAxMCwgMTQsIDI0MCwgNjgsIDEwLCAxNCwgMjQwLCAKKyAgICA2NywgMTAsIDE0LCAyNDAsIDY2LCAxMCwgMTQsIDI0MCwgNjUsIDEwLCAxNCwgMjQwLCA2NCwgMTAsIDE0LCAyNDAsIDYzLCAKKyAgICAxMCwgMTQsIDI0MCwgNjIsIDEwLCAxNCwgMjQwLCA2MSwgMTAsIDE0LCAyNDAsIDYwLCAxMCwgMTQsIDI0MCwgNTksIDEwLCAKKyAgICAxNCwgMjQwLCA1OCwgMTAsIDE0LCAyNDAsIDU3LCAxMCwgMTQsIDI0MCwgNTYsIDEwLCAxNCwgMjQwLCA1NSwgMTAsIDE0LCAKKyAgICAyNDAsIDU0LCAxMCwgMTQsIDI0MCwgNTMsIDEwLCAxNCwgMjQwLCA1MiwgMTAsIDE0LCAyNDAsIDUxLCAxMCwgMTQsIDI0MCwgCisgICAgNTAsIDEwLCAxNCwgMjQwLCA0OSwgMTAsIDE0LCAyNDAsIDQ4LCAxMCwgMTQsIDI0MCwgNDcsIDEwLCAxNCwgMjQwLCA0NiwgCisgICAgMTAsIDE0LCAyNDAsIDQ1LCAxMCwgMTQsIDI0MCwgNDQsIDEwLCAxNCwgMjQwLCA0MywgMTAsIDE0LCAyNDAsIDQyLCAxMCwgCisgICAgMTQsIDI0MCwgNDEsIDEwLCAxNCwgMjQwLCA0MCwgMTAsIDE0LCAyNDAsIDM5LCAxMCwgMTQsIDI0MCwgMzgsIDEwLCAxNCwgCisgICAgMjQwLCAzNywgMTAsIDE0LCAyNDAsIDM2LCAxMCwgMTQsIDI0MCwgMzUsIDEwLCAxNCwgMjQwLCAzNCwgMTAsIDE0LCAyNDAsIAorICAgIDMzLCAxMCwgMTQsIDI0MCwgMzIsIDEwLCAxNCwgMjQwLCAzMSwgMTAsIDE0LCAyNDAsIDMwLCAxMCwgMTQsIDI0MCwgMjksIAorICAgIDEwLCAxNCwgMjQwLCAyOCwgMTAsIDE0LCAyNDAsIDI3LCAxMCwgMTQsIDI0MCwgMjYsIDEwLCAxNCwgMjQwLCAyNSwgMTAsIAorICAgIDE0LCAyNDAsIDI0LCAxMCwgMTQsIDI0MCwgMjMsIDEwLCAxNCwgMjQwLCAyMiwgMTAsIDE0LCAyNDAsIDIxLCAxMCwgMTQsIAorICAgIDI0MCwgMjAsIDEwLCAxNCwgMjQwLCAxOSwgMTAsIDE0LCAyNDAsIDE4LCAxMCwgMTQsIDI0MCwgMTcsIDEwLCAxNCwgMjQwLCAKKyAgICAxNiwgMTAsIDE0LCAyNDAsIDE1LCAxMCwgMTQsIDI0MCwgMTQsIDEwLCAxNCwgMjQwLCAxMywgMTAsIDE0LCAyNDAsIDEyLCAKKyAgICAxMCwgMTQsIDI0MCwgMTEsIDEwLCAxNCwgMjQwLCAxMCwgMTAsIDE0LCAyNDAsIDksIDEwLCAxNCwgMjQwLCA4LCAxMCwgMTQsIAorICAgIDI0MCwgNywgMTAsIDE0LCAyNDAsIDYsIDEwLCAxNCwgMjQwLCA1LCAxMCwgMTQsIDI0MCwgNCwgMTAsIDE0LCAyNDAsIDMsIAorICAgIDEwLCAxNCwgMjQwLCAyLCAxMCwgMTQsIDI0MCwgMSwgMTAsIDE0LCAyNDAsIDAsIDEwLCAxNCwgMjM5LCAyNTUsIDEwLCAxNCwgCisgICAgMjM5LCAyNTQsIDEwLCAxNCwgMjM5LCAyNTMsIDEwLCAxNCwgMjM5LCAyNTIsIDEwLCAxNCwgMjM5LCAyNTEsIDEwLCAxNCwgCisgICAgMjM5LCAyNTAsIDEwLCAxNCwgMjM5LCAyNDksIDEwLCAxNCwgMjM5LCAyNDgsIDEwLCAxNCwgMjM5LCAyNDcsIDEwLCAxNCwgCisgICAgMjM5LCAyNDYsIDEwLCAxNCwgMjM5LCAyNDUsIDEwLCAxNCwgMjM5LCAyNDQsIDEwLCAxNCwgMjM5LCAyNDMsIDEwLCAxNCwgCisgICAgMjM5LCAyNDIsIDEwLCAxNCwgMjM5LCAyNDEsIDEwLCAxNCwgMjM5LCAyNDAsIDEwLCAxNCwgMjM5LCAyMzksIDEwLCAxNCwgCisgICAgMjM5LCAyMzgsIDEwLCAxNCwgMjM5LCAyMzcsIDEwLCAxNCwgMjM5LCAyMzYsIDEwLCAxNCwgMjM5LCAyMzUsIDEwLCAxNCwgCisgICAgMjM5LCAyMzQsIDEwLCAxNCwgMjM5LCAyMzMsIDEwLCAxNCwgMjM5LCAyMzIsIDEwLCAxNCwgMjM5LCAyMzEsIDEwLCAxNCwgCisgICAgMjM5LCAyMzAsIDEwLCAxNCwgMjM5LCAyMjksIDEwLCAxNCwgMjM5LCAyMjgsIDEwLCAxNCwgMjM5LCAyMjcsIDEwLCAxNCwgCisgICAgMjM5LCAyMjYsIDEwLCAxNCwgMjM5LCAyMjUsIDEwLCAxNCwgMjM5LCAyMjQsIDEwLCAxNCwgMjM5LCAyMjMsIDEwLCAxNCwgCisgICAgMjM5LCAyMjIsIDEwLCAxNCwgMjM5LCAyMjEsIDEwLCAxNCwgMjM5LCAyMjAsIDEwLCAxNCwgMjM5LCAyMTksIDEwLCAxNCwgCisgICAgMjM5LCAyMTgsIDEwLCAxNCwgMjM5LCAyMTcsIDEwLCAxNCwgMjM5LCAyMTYsIDEwLCAxNCwgMjM5LCAyMTUsIDEwLCAxNCwgCisgICAgMjM5LCAyMTQsIDEwLCAxNCwgMjM5LCAyMTMsIDEwLCAxNCwgMjM5LCAyMTIsIDEwLCAxNCwgMjM5LCAyMTEsIDEwLCAxNCwgCisgICAgMjM5LCAyMTAsIDEwLCAxNCwgMjM5LCAyMDksIDEwLCAxNCwgMjM5LCAyMDgsIDEwLCAxNCwgMjM5LCAyMDcsIDEwLCAxNCwgCisgICAgMjM5LCAyMDYsIDEwLCAxNCwgMjM5LCAyMDUsIDEwLCAxNCwgMjM5LCAyMDQsIDEwLCAxNCwgMjM5LCAyMDMsIDEwLCAxNCwgCisgICAgMjM5LCAyMDIsIDEwLCAxNCwgMjM5LCAyMDEsIDEwLCAxNCwgMjM5LCAyMDAsIDEwLCAxNCwgMjM5LCAxOTksIDEwLCAxNCwgCisgICAgMjM5LCAxOTgsIDEwLCAxNCwgMjM5LCAxOTcsIDEwLCAxNCwgMjM5LCAxOTYsIDEwLCAxNCwgMjM5LCAxOTUsIDEwLCAxNCwgCisgICAgMjM5LCAxOTQsIDEwLCAxNCwgMjM5LCAxOTMsIDEwLCAxNCwgMjM5LCAxOTIsIDEwLCAxNCwgMjM5LCAxOTEsIDEwLCAxNCwgCisgICAgMjM5LCAxOTAsIDEwLCAxNCwgMjM5LCAxODksIDEwLCAxNCwgMjM5LCAxODgsIDEwLCAxNCwgMjM5LCAxODcsIDEwLCAxNCwgCisgICAgMjM5LCAxODYsIDEwLCAxNCwgMjM5LCAxODUsIDEwLCAxNCwgMjM5LCAxODQsIDEwLCAxNCwgMjM5LCAxODMsIDEwLCAxNCwgCisgICAgMjM5LCAxODIsIDEwLCAxNCwgMjM5LCAxODEsIDEwLCAxNCwgMjM5LCAxODAsIDEwLCAxNCwgMjM5LCAxNzksIDEwLCAxNCwgCisgICAgMjM5LCAxNzgsIDEwLCAxNCwgMjM5LCAxNzcsIDEwLCAxNCwgMjM5LCAxNzYsIDEwLCAxNCwgMjM5LCAxNzUsIDEwLCAxNCwgCisgICAgMjM5LCAxNzQsIDEwLCAxNCwgMjM5LCAxNzMsIDEwLCAxNCwgMjM5LCAxNzIsIDEwLCAxNCwgMjM5LCAxNzEsIDEwLCAxNCwgCisgICAgMjM5LCAxNzAsIDEwLCAxNCwgMjM5LCAxNjksIDEwLCAxNCwgMjM5LCAxNjgsIDEwLCAxNCwgMjM5LCAxNjcsIDEwLCAxNCwgCisgICAgMjM5LCAxNjYsIDEwLCAxNCwgMjM5LCAxNjUsIDEwLCAxNCwgMjM5LCAxNjQsIDEwLCAxNCwgMjM5LCAxNjMsIDEwLCAxNCwgCisgICAgMjM5LCAxNjIsIDEwLCAxNCwgMjM5LCAxNjEsIDEwLCAxNCwgMjM5LCAxNjAsIDEwLCAxNCwgMjM5LCAxNTksIDEwLCAxNCwgCisgICAgMjM5LCAxNTgsIDEwLCAxNCwgMjM5LCAxNTcsIDEwLCAxNCwgMjM5LCAxNTYsIDEwLCAxNCwgMjM5LCAxNTUsIDEwLCAxNCwgCisgICAgMjM5LCAxNTQsIDEwLCAxNCwgMjM5LCAxNTMsIDEwLCAxNCwgMjM5LCAxNTIsIDEwLCAxNCwgMjM5LCAxNTEsIDEwLCAxNCwgCisgICAgMjM5LCAxNTAsIDEwLCAxNCwgMjM5LCAxNDksIDEwLCAxNCwgMjM5LCAxNDgsIDEwLCAxNCwgMjM5LCAxNDcsIDEwLCAxNCwgCisgICAgMjM5LCAxNDYsIDEwLCAxNCwgMjM5LCAxNDUsIDEwLCAxNCwgMjM5LCAxNDQsIDEwLCAxNCwgMjM5LCAxNDMsIDEwLCAxNCwgCisgICAgMjM5LCAxNDIsIDEwLCAxNCwgMjM5LCAxNDEsIDEwLCAxNCwgMjM5LCAxNDAsIDEwLCAxNCwgMjM5LCAxMzksIDEwLCAxNCwgCisgICAgMjM5LCAxMzgsIDEwLCAxNCwgMjM5LCAxMzcsIDEwLCAxNCwgMjM5LCAxMzYsIDEwLCAxNCwgMjM5LCAxMzUsIDEwLCAxNCwgCisgICAgMjM5LCAxMzQsIDEwLCAxNCwgMjM5LCAxMzMsIDEwLCAxNCwgMjM5LCAxMzIsIDEwLCAxNCwgMjM5LCAxMzEsIDEwLCAxNCwgCisgICAgMjM5LCAxMzAsIDEwLCAxNCwgMjM5LCAxMjksIDEwLCAxNCwgMjM5LCAxMjgsIDEwLCAxNCwgMjM5LCAxMjcsIDEwLCAxNCwgCisgICAgMjM5LCAxMjYsIDEwLCAxNCwgMjM5LCAxMjUsIDEwLCAxNCwgMjM5LCAxMjQsIDEwLCAxNCwgMjM5LCAxMjMsIDEwLCAxNCwgCisgICAgMjM5LCAxMjIsIDEwLCAxNCwgMjM5LCAxMjEsIDEwLCAxNCwgMjM5LCAxMjAsIDEwLCAxNCwgMjM5LCAxMTksIDEwLCAxNCwgCisgICAgMjM5LCAxMTgsIDEwLCAxNCwgMjM5LCAxMTcsIDEwLCAxNCwgMjM5LCAxMTYsIDEwLCAxNCwgMjM5LCAxMTUsIDEwLCAxNCwgCisgICAgMjM5LCAxMTQsIDEwLCAxNCwgMjM5LCAxMTMsIDEwLCAxNCwgMjM5LCAxMTIsIDEwLCAxNCwgMjM5LCAxMTEsIDEwLCAxNCwgCisgICAgMjM5LCAxMTAsIDEwLCAxNCwgMjM5LCAxMDksIDEwLCAxNCwgMjM5LCAxMDgsIDEwLCAxNCwgMjM5LCAxMDcsIDEwLCAxNCwgCisgICAgMjM5LCAxMDYsIDEwLCAxNCwgMjM5LCAxMDUsIDEwLCAxNCwgMjM5LCAxMDQsIDEwLCAxNCwgMjM5LCAxMDMsIDEwLCAxNCwgCisgICAgMjM5LCAxMDIsIDEwLCAxNCwgMjM5LCAxMDEsIDEwLCAxNCwgMjM5LCAxMDAsIDEwLCAxNCwgMjM5LCA5OSwgMTAsIDE0LCAKKyAgICAyMzksIDk4LCAxMCwgMTQsIDIzOSwgOTcsIDEwLCAxNCwgMjM5LCA5NiwgMTAsIDE0LCAyMzksIDk1LCAxMCwgMTQsIDIzOSwgCisgICAgOTQsIDEwLCAxNCwgMjM5LCA5MywgMTAsIDE0LCAyMzksIDkyLCAxMCwgMTQsIDIzOSwgOTEsIDEwLCAxNCwgMjM5LCA5MCwgCisgICAgMTAsIDE0LCAyMzksIDg5LCAxMCwgMTQsIDIzOSwgODgsIDEwLCAxNCwgMjM5LCA4NywgMTAsIDE0LCAyMzksIDg2LCAxMCwgCisgICAgMTQsIDIzOSwgODUsIDEwLCAxNCwgMjM5LCA4NCwgMTAsIDE0LCAyMzksIDgzLCAxMCwgMTQsIDIzOSwgODIsIDEwLCAxNCwgCisgICAgMjM5LCA4MSwgMTAsIDE0LCAyMzksIDgwLCAxMCwgMTQsIDIzOSwgNzksIDEwLCAxNCwgMjM5LCA3OCwgMTAsIDE0LCAyMzksIAorICAgIDc3LCAxMCwgMTQsIDIzOSwgNzYsIDEwLCAxNCwgMjM5LCA3NSwgMTAsIDE0LCAyMzksIDc0LCAxMCwgMTQsIDIzOSwgNzMsIAorICAgIDEwLCAxNCwgMjM5LCA3MiwgMTAsIDE0LCAyMzksIDcxLCAxMCwgMTQsIDIzOSwgNzAsIDEwLCAxNCwgMjM5LCA2OSwgMTAsIAorICAgIDE0LCAyMzksIDY4LCAxMCwgMTQsIDIzOSwgNjcsIDEwLCAxNCwgMjM5LCA2NiwgMTAsIDE0LCAyMzksIDY1LCAxMCwgMTQsIAorICAgIDIzOSwgNjQsIDEwLCAxNCwgMjM5LCA2MywgMTAsIDE0LCAyMzksIDYyLCAxMCwgMTQsIDIzOSwgNjEsIDEwLCAxNCwgMjM5LCAKKyAgICA2MCwgMTAsIDE0LCAyMzksIDU5LCAxMCwgMTQsIDIzOSwgNTgsIDEwLCAxNCwgMjM5LCA1NywgMTAsIDE0LCAyMzksIDU2LCAKKyAgICAxMCwgMTQsIDIzOSwgNTUsIDEwLCAxNCwgMjM5LCA1NCwgMTAsIDE0LCAyMzksIDUzLCAxMCwgMTQsIDIzOSwgNTIsIDEwLCAKKyAgICAxNCwgMjM5LCA1MSwgMTAsIDE0LCAyMzksIDUwLCAxMCwgMTQsIDIzOSwgNDksIDEwLCAxNCwgMjM5LCA0OCwgMTAsIDE0LCAKKyAgICAyMzksIDQ3LCAxMCwgMTQsIDIzOSwgNDYsIDEwLCAxNCwgMjM5LCA0NSwgMTAsIDE0LCAyMzksIDQ0LCAxMCwgMTQsIDIzOSwgCisgICAgNDMsIDEwLCAxNCwgMjM5LCA0MiwgMTAsIDE0LCAyMzksIDQxLCAxMCwgMTQsIDIzOSwgNDAsIDEwLCAxNCwgMjM5LCAzOSwgCisgICAgMTAsIDE0LCAyMzksIDM4LCAxMCwgMTQsIDIzOSwgMzcsIDEwLCAxNCwgMjM5LCAzNiwgMTAsIDE0LCAyMzksIDM1LCAxMCwgCisgICAgMTQsIDIzOSwgMzQsIDEwLCAxNCwgMjM5LCAzMywgMTAsIDE0LCAyMzksIDMyLCAxMCwgMTQsIDIzOSwgMzEsIDEwLCAxNCwgCisgICAgMjM5LCAzMCwgMTAsIDE0LCAyMzksIDI5LCAxMCwgMTQsIDIzOSwgMjgsIDEwLCAxNCwgMjM5LCAyNywgMTAsIDE0LCAyMzksIAorICAgIDI2LCAxMCwgMTQsIDIzOSwgMjUsIDEwLCAxNCwgMjM5LCAyNCwgMTAsIDE0LCAyMzksIDIzLCAxMCwgMTQsIDIzOSwgMjIsIAorICAgIDEwLCAxNCwgMjM5LCAyMSwgMTAsIDE0LCAyMzksIDIwLCAxMCwgMTQsIDIzOSwgMTksIDEwLCAxNCwgMjM5LCAxOCwgMTAsIAorICAgIDE0LCAyMzksIDE3LCAxMCwgMTQsIDIzOSwgMTYsIDEwLCAxNCwgMjM5LCAxNSwgMTAsIDE0LCAyMzksIDE0LCAxMCwgMTQsIAorICAgIDIzOSwgMTMsIDEwLCAxNCwgMjM5LCAxMiwgMTAsIDE0LCAyMzksIDExLCAxMCwgMTQsIDIzOSwgMTAsIDEwLCAxNCwgMjM5LCAKKyAgICA5LCAxMCwgMTQsIDIzOSwgOCwgMTAsIDE0LCAyMzksIDcsIDEwLCAxNCwgMjM5LCA2LCAxMCwgMTQsIDIzOSwgNSwgMTAsIAorICAgIDE0LCAyMzksIDQsIDEwLCAxNCwgMjM5LCAzLCAxMCwgMTQsIDIzOSwgMiwgMTAsIDE0LCAyMzksIDEsIDEwLCAxNCwgMjM5LCAKKyAgICAwLCAxMCwgMTQsIDIzOCwgMjU1LCAxMCwgMTQsIDIzOCwgMjU0LCAxMCwgMTQsIDIzOCwgMjUzLCAxMCwgMTQsIDIzOCwgCisgICAgMjUyLCAxMCwgMTQsIDIzOCwgMjUxLCAxMCwgMTQsIDIzOCwgMjUwLCAxMCwgMTQsIDIzOCwgMjQ5LCAxMCwgMTQsIDIzOCwgCisgICAgMjQ4LCAxMCwgMTQsIDIzOCwgMjQ3LCAxMCwgMTQsIDIzOCwgMjQ2LCAxMCwgMTQsIDIzOCwgMjQ1LCAxMCwgMTQsIDIzOCwgCisgICAgMjQ0LCAxMCwgMTQsIDIzOCwgMjQzLCAxMCwgMTQsIDIzOCwgMjQyLCAxMCwgMTQsIDIzOCwgMjQxLCAxMCwgMTQsIDIzOCwgCisgICAgMjQwLCAxMCwgMTQsIDIzOCwgMjM5LCAxMCwgMTQsIDIzOCwgMjM4LCAxMCwgMTQsIDIzOCwgMjM3LCAxMCwgMTQsIDIzOCwgCisgICAgMjM2LCAxMCwgMTQsIDIzOCwgMjM1LCAxMCwgMTQsIDIzOCwgMjM0LCAxMCwgMTQsIDIzOCwgMjMzLCAxMCwgMTQsIDIzOCwgCisgICAgMjMyLCAxMCwgMTQsIDIzOCwgMjMxLCAxMCwgMTQsIDIzOCwgMjMwLCAxMCwgMTQsIDIzOCwgMjI5LCAxMCwgMTQsIDIzOCwgCisgICAgMjI4LCAxMCwgMTQsIDIzOCwgMjI3LCAxMCwgMTQsIDIzOCwgMjI2LCAxMCwgMTQsIDIzOCwgMjI1LCAxMCwgMTQsIDIzOCwgCisgICAgMjI0LCAxMCwgMTQsIDIzOCwgMjIzLCAxMCwgMTQsIDIzOCwgMjIyLCAxMCwgMTQsIDIzOCwgMjIxLCAxMCwgMTQsIDIzOCwgCisgICAgMjIwLCAxMCwgMTQsIDIzOCwgMjE5LCAxMCwgMTQsIDIzOCwgMjE4LCAxMCwgMTQsIDIzOCwgMjE3LCAxMCwgMTQsIDIzOCwgCisgICAgMjE2LCAxMCwgMTQsIDIzOCwgMjE1LCAxMCwgMTQsIDIzOCwgMjE0LCAxMCwgMTQsIDIzOCwgMjEzLCAxMCwgMTQsIDIzOCwgCisgICAgMjEyLCAxMCwgMTQsIDIzOCwgMjExLCAxMCwgMTQsIDIzOCwgMjEwLCAxMCwgMTQsIDIzOCwgMjA5LCAxMCwgMTQsIDIzOCwgCisgICAgMjA4LCAxMCwgMTQsIDIzOCwgMjA3LCAxMCwgMTQsIDIzOCwgMjA2LCAxMCwgMTQsIDIzOCwgMjA1LCAxMCwgMTQsIDIzOCwgCisgICAgMjA0LCAxMCwgMTQsIDIzOCwgMjAzLCAxMCwgMTQsIDIzOCwgMjAyLCAxMCwgMTQsIDIzOCwgMjAxLCAxMCwgMTQsIDIzOCwgCisgICAgMjAwLCAxMCwgMTQsIDIzOCwgMTk5LCAxMCwgMTQsIDIzOCwgMTk4LCAxMCwgMTQsIDIzOCwgMTk3LCAxMCwgMTQsIDIzOCwgCisgICAgMTk2LCAxMCwgMTQsIDIzOCwgMTk1LCAxMCwgMTQsIDIzOCwgMTk0LCAxMCwgMTQsIDIzOCwgMTkzLCAxMCwgMTQsIDIzOCwgCisgICAgMTkyLCAxMCwgMTQsIDIzOCwgMTkxLCAxMCwgMTQsIDIzOCwgMTkwLCAxMCwgMTQsIDIzOCwgMTg5LCAxMCwgMTQsIDIzOCwgCisgICAgMTg4LCAxMCwgMTQsIDIzOCwgMTg3LCAxMCwgMTQsIDIzOCwgMTg2LCAxMCwgMTQsIDIzOCwgMTg1LCAxMCwgMTQsIDIzOCwgCisgICAgMTg0LCAxMCwgMTQsIDIzOCwgMTgzLCAxMCwgMTQsIDIzOCwgMTgyLCAxMCwgMTQsIDIzOCwgMTgxLCAxMCwgMTQsIDIzOCwgCisgICAgMTgwLCAxMCwgMTQsIDIzOCwgMTc5LCAxMCwgMTQsIDIzOCwgMTc4LCAxMCwgMTQsIDIzOCwgMTc3LCAxMCwgMTQsIDIzOCwgCisgICAgMTc2LCAxMCwgMTQsIDIzOCwgMTc1LCAxMCwgMTQsIDIzOCwgMTc0LCAxMCwgMTQsIDIzOCwgMTczLCAxMCwgMTQsIDIzOCwgCisgICAgMTcyLCAxMCwgMTQsIDIzOCwgMTcxLCAxMCwgMTQsIDIzOCwgMTcwLCAxMCwgMTQsIDIzOCwgMTY5LCAxMCwgMTQsIDIzOCwgCisgICAgMTY4LCAxMCwgMTQsIDIzOCwgMTY3LCAxMCwgMTQsIDIzOCwgMTY2LCAxMCwgMTQsIDIzOCwgMTY1LCAxMCwgMTQsIDIzOCwgCisgICAgMTY0LCAxMCwgMTQsIDIzOCwgMTYzLCAxMCwgMTQsIDIzOCwgMTYyLCAxMCwgMTQsIDIzOCwgMTYxLCAxMCwgMTQsIDIzOCwgCisgICAgMTYwLCAxMCwgMTQsIDIzOCwgMTU5LCAxMCwgMTQsIDIzOCwgMTU4LCAxMCwgMTQsIDIzOCwgMTU3LCAxMCwgMTQsIDIzOCwgCisgICAgMTU2LCAxMCwgMTQsIDIzOCwgMTU1LCAxMCwgMTQsIDIzOCwgMTU0LCAxMCwgMTQsIDIzOCwgMTUzLCAxMCwgMTQsIDIzOCwgCisgICAgMTUyLCAxMCwgMTQsIDIzOCwgMTUxLCAxMCwgMTQsIDIzOCwgMTUwLCAxMCwgMTQsIDIzOCwgMTQ5LCAxMCwgMTQsIDIzOCwgCisgICAgMTQ4LCAxMCwgMTQsIDIzOCwgMTQ3LCAxMCwgMTQsIDIzOCwgMTQ2LCAxMCwgMTQsIDIzOCwgMTQ1LCAxMCwgMTQsIDIzOCwgCisgICAgMTQ0LCAxMCwgMTQsIDIzOCwgMTQzLCAxMCwgMTQsIDIzOCwgMTQyLCAxMCwgMTQsIDIzOCwgMTQxLCAxMCwgMTQsIDIzOCwgCisgICAgMTQwLCAxMCwgMTQsIDIzOCwgMTM5LCAxMCwgMTQsIDIzOCwgMTM4LCAxMCwgMTQsIDIzOCwgMTM3LCAxMCwgMTQsIDIzOCwgCisgICAgMTM2LCAxMCwgMTQsIDIzOCwgMTM1LCAxMCwgMTQsIDIzOCwgMTM0LCAxMCwgMTQsIDIzOCwgMTMzLCAxMCwgMTQsIDIzOCwgCisgICAgMTMyLCAxMCwgMTQsIDIzOCwgMTMxLCAxMCwgMTQsIDIzOCwgMTMwLCAxMCwgMTQsIDIzOCwgMTI5LCAxMCwgMTQsIDIzOCwgCisgICAgMTI4LCAxMCwgMTQsIDIzOCwgMTI3LCAxMCwgMTQsIDIzOCwgMTI2LCAxMCwgMTQsIDIzOCwgMTI1LCAxMCwgMTQsIDIzOCwgCisgICAgMTI0LCAxMCwgMTQsIDIzOCwgMTIzLCAxMCwgMTQsIDIzOCwgMTIyLCAxMCwgMTQsIDIzOCwgMTIxLCAxMCwgMTQsIDIzOCwgCisgICAgMTIwLCAxMCwgMTQsIDIzOCwgMTE5LCAxMCwgMTQsIDIzOCwgMTE4LCAxMCwgMTQsIDIzOCwgMTE3LCAxMCwgMTQsIDIzOCwgCisgICAgMTE2LCAxMCwgMTQsIDIzOCwgMTE1LCAxMCwgMTQsIDIzOCwgMTE0LCAxMCwgMTQsIDIzOCwgMTEzLCAxMCwgMTQsIDIzOCwgCisgICAgMTEyLCAxMCwgMTQsIDIzOCwgMTExLCAxMCwgMTQsIDIzOCwgMTEwLCAxMCwgMTQsIDIzOCwgMTA5LCAxMCwgMTQsIDIzOCwgCisgICAgMTA4LCAxMCwgMTQsIDIzOCwgMTA3LCAxMCwgMTQsIDIzOCwgMTA2LCAxMCwgMTQsIDIzOCwgMTA1LCAxMCwgMTQsIDIzOCwgCisgICAgMTA0LCAxMCwgMTQsIDIzOCwgMTAzLCAxMCwgMTQsIDIzOCwgMTAyLCAxMCwgMTQsIDIzOCwgMTAxLCAxMCwgMTQsIDIzOCwgCisgICAgMTAwLCAxMCwgMTQsIDIzOCwgOTksIDEwLCAxNCwgMjM4LCA5OCwgMTAsIDE0LCAyMzgsIDk3LCAxMCwgMTQsIDIzOCwgOTYsIAorICAgIDEwLCAxNCwgMjM4LCA5NSwgMTAsIDE0LCAyMzgsIDk0LCAxMCwgMTQsIDIzOCwgOTMsIDEwLCAxNCwgMjM4LCA5MiwgMTAsIAorICAgIDE0LCAyMzgsIDkxLCAxMCwgMTQsIDIzOCwgOTAsIDEwLCAxNCwgMjM4LCA4OSwgMTAsIDE0LCAyMzgsIDg4LCAxMCwgMTQsIAorICAgIDIzOCwgODcsIDEwLCAxNCwgMjM4LCA4NiwgMTAsIDE0LCAyMzgsIDg1LCAxMCwgMTQsIDIzOCwgODQsIDEwLCAxNCwgMjM4LCAKKyAgICA4MywgMTAsIDE0LCAyMzgsIDgyLCAxMCwgMTQsIDIzOCwgODEsIDEwLCAxNCwgMjM4LCA4MCwgMjMzLCA5NiwgMjE3LCA4NSwgCisgICAgMTI5LCAyMTksIDIwLCAxMjksIDI0NSwgMzksIDc5LCAxMjksIDIyNCwgMSwgNzksIDEyOSwgNTQsIDUwLCAxMjksIDI0NywgCisgICAgMTQwLCA1MCwgMTI5LCAyMjUsIDE4NSwgNTAsIDEyOSwgMjU0LCAxMzQsIDEyOSwgMjU0LCA2NSwgMTI5LCA0MywgMjI2LCA3LCAKKyAgICAxMjksIDQ0LCAyMjYsIDcsIDEyOSwgMjUzLCAyMjQsIDEyOSwgOTYsIDUwLCAxMjksIDI0OSwgMjI3LCAxMjksIDI0MCwgCisgICAgMTc0LCAxMjksIDI0MywgMjM2LCAyMTgsIDEzMSwgMTI5LCAyMTksIDQ4LCAxMjksIDIxLCAyMTAsIDg2LCAxMjksIDIxLCAKKyAgICAxMTEsIDEyOSwgMjEsIDEwNSwgMTI5LCAyMSwgMTU4LCAxMjksIDIxLCAxNjEsIDEyOSwgMjEsIDE5MCwgMTI5LCAyMSwgCisgICAgMTk1LCAxMjksIDIxLCAxOTksIDEyOSwgMjEsIDE5NiwgMTI5LCAyMSwgMjAxLCAxMjksIDI0OSwgMjM0LCAxMjksIDIyMCwgCisgICAgMTUyLCAxMjksIDIzMywgMjEsIDUwLCAxMjksIDI0NSwgMTA2LCA1MCwgMTI5LCAyNDIsIDEzNywgNTAsIDEyOSwgMjI0LCAKKyAgICAxNiwgNzksIDEyOSwgMjQ5LCAyMjUsIDI1MywgMjE0LCAxMjksIDcsIDYsIDEsIDYxLCAxMjksIDcsIDYsIDEsIDI1MywgCisgICAgMTY2LCAxMjksIDcsIDYsIDEsIDI1MSwgNzQsIDEyOSwgNywgNiwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA2LCAxLCA3NiwgMTI5LCAKKyAgICA3LCA2LCAxLCAyNDUsIDE0LCAxMjksIDcsIDYsIDEsIDI0MywgMjA5LCAxMjksIDcsIDYsIDEsIDI0MiwgNjcsIDEyOSwgNywgCisgICAgNiwgMSwgNzQsIDEyOSwgNywgNiwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNiwgMSwgMjM1LCAyOSwgMTI5LCA3LCA2LCAxLCAKKyAgICAxNTYsIDEyOSwgNywgNiwgMSwgMTk0LCAxMjksIDcsIDYsIDEsIDIzMCwgMzAsIDEyOSwgNywgNiwgMSwgNzgsIDEyOSwgNywgCisgICAgNiwgMSwgMjI2LCAxMDksIDEyOSwgNywgNiwgMSwgMjI0LCA5OSwgMTI5LCA3LCA2LCAxLCAxNTMsIDEyOSwgNywgNiwgMSwgCisgICAgMjIyLCA5MywgMTI5LCA3LCA2LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA2LCAxLCA2OSwgMTI5LCA3LCA2LCAxLCAyMTQsIAorICAgIDEwNSwgMTI5LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjksIDcsIDYsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDYsIDEsIDIxMSwgCisgICAgMTE3LCAxMjksIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjksIDQzLCA0MiwgMTI3LCAxMjksIDIyMywgNTMsIDIxOSwgNDgsIAorICAgIDEyOSwgNDQsIDQyLCAxMjcsIDEyOSwgMjUwLCAzOSwgMjU1LCAyMywgMTI5LCAxMjEsIDIzMiwgMjE5LCAxMjksIDI0MiwgCisgICAgMTQ0LCAyNTUsIDIzLCAxMjksIDcsIDQsIDEsIDYxLCAxMjksIDcsIDQsIDEsIDI1MywgMTY2LCAxMjksIDcsIDQsIDEsIAorICAgIDI1MSwgNzQsIDEyOSwgNywgNCwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA0LCAxLCA3NiwgMTI5LCA3LCA0LCAxLCAyNDUsIDE0LCAKKyAgICAxMjksIDcsIDQsIDEsIDI0MywgMjA5LCAxMjksIDcsIDQsIDEsIDI0MiwgNjcsIDEyOSwgNywgNCwgMSwgNzQsIDEyOSwgNywgCisgICAgNCwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNCwgMSwgMjM1LCAyOSwgMTI5LCA3LCA0LCAxLCAxNTYsIDEyOSwgNywgNCwgMSwgCisgICAgMTk0LCAxMjksIDcsIDQsIDEsIDIzMCwgMzAsIDEyOSwgNywgNCwgMSwgNzgsIDEyOSwgNywgNCwgMSwgMjI2LCAxMDksIAorICAgIDEyOSwgNywgNCwgMSwgMjI0LCA5OSwgMTI5LCA3LCA0LCAxLCAxNTMsIDEyOSwgNywgNCwgMSwgMjIyLCA5MywgMTI5LCA3LCAKKyAgICA0LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA0LCAxLCA2OSwgMTI5LCA3LCA0LCAxLCAyMTQsIDEwNSwgMTI5LCA3LCA0LCAxLCAKKyAgICAyMTIsIDk4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTE3LCAxMjksIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAxMjksIDQzLCAyNDksIDEwNywgMTI3LCAxMjksIDY3LCAyMzIsIDIxOSwgMTI5LCA0NCwgMjQ5LCAxMDcsIAorICAgIDEyNywgMTI5LCAxODQsIDI1MSwgMTQsIDIxNywgODUsIDQ1LCAyMjEsIDgwLCA0NSwgMjIxLCA2OSwgNDUsIDIyMSwgNTgsIAorICAgIDQ1LCAyMjEsIDQ2LCA0NSwgMjIxLCAzNSwgNDUsIDIyMSwgMjQsIDQ1LCAyMjEsIDEzLCA0NSwgMjIxLCAyLCA0NSwgMjIwLCAKKyAgICAyNDcsIDQ1LCAyMjAsIDIzOSwgNDUsIDIyMCwgMjM4LCA0NSwgMjIwLCAyMzcsIDQ1LCAyMjAsIDIzNiwgNDUsIDIyMCwgCisgICAgMjM0LCA0NSwgMjIwLCAyMzMsIDQ1LCAyMjAsIDIzMiwgNDUsIDIyMCwgMjMxLCA0NSwgMjIwLCAyMzAsIDQ1LCAyMjAsIAorICAgIDIyOSwgNDUsIDIyMCwgMjI4LCA0NSwgMjIwLCAyMjcsIDQ1LCAyMjAsIDIyNiwgNDUsIDIyMCwgMjI1LCA0NSwgMjIwLCAKKyAgICAyMjMsIDQ1LCAyMjAsIDIyMiwgNDUsIDIyMCwgMjIxLCA0NSwgMjIwLCAyMjAsIDQ1LCAyMjAsIDIxOSwgNDUsIDIyMCwgCisgICAgMjE4LCA0NSwgMjIwLCAyMTcsIDQ1LCAyMjAsIDIxNiwgNDUsIDIyMCwgMjE1LCA0NSwgMjIwLCAyMTQsIDQ1LCAyMjAsIAorICAgIDIxMiwgNDUsIDIyMCwgMjExLCA0NSwgMjIwLCAyMTAsIDQ1LCAyMjAsIDIwOSwgNDUsIDIyMCwgMjA4LCA0NSwgMjIwLCAKKyAgICAyMDcsIDQ1LCAyMjAsIDIwNiwgNDUsIDIyMCwgMjA1LCA0NSwgMjIwLCAyMDQsIDQ1LCAyMjAsIDIwMywgNDUsIDIyMCwgCisgICAgMjAxLCA0NSwgMjIwLCAyMDAsIDQ1LCAyMjAsIDE5OSwgNDUsIDIyMCwgMTk4LCA0NSwgMjIwLCAxOTcsIDQ1LCAyMjAsIAorICAgIDE5NiwgNDUsIDIyMCwgMTk1LCA0NSwgMjIwLCAxOTQsIDQ1LCAyMjAsIDE5MywgNDUsIDIyMCwgMTkyLCA0NSwgMjIwLCAKKyAgICAxOTAsIDQ1LCAyMjAsIDE4OSwgNDUsIDIyMCwgMTg4LCA0NSwgMjIwLCAxODcsIDQ1LCAyMjAsIDE4NiwgNDUsIDIyMCwgCisgICAgMTg1LCA0NSwgMjIwLCAxODQsIDQ1LCAyMjAsIDE4MywgNDUsIDIyMCwgMTgyLCA0NSwgMjIwLCAxODEsIDQ1LCAyMjAsIAorICAgIDE3OSwgNDUsIDIyMCwgMTc4LCA0NSwgMjIwLCAxNzcsIDQ1LCAyMjAsIDE3NiwgNDUsIDIyMCwgMTc1LCA0NSwgMjIwLCAKKyAgICAxNzQsIDQ1LCAyMjAsIDE3MywgNDUsIDIyMCwgMTcyLCA0NSwgMjIwLCAxNzEsIDQ1LCAyMjAsIDE3MCwgNDUsIDIyMCwgCisgICAgMTY4LCA0NSwgMjIwLCAxNjcsIDQ1LCAyMjAsIDE2NiwgNDUsIDIyMCwgMTY1LCA0NSwgMjIwLCAxNjQsIDQ1LCAyMjAsIAorICAgIDE2MywgNDUsIDIyMCwgMTYyLCA0NSwgMjIwLCAxNjEsIDQ1LCAyMjAsIDE2MCwgNDUsIDIyMCwgMTU5LCA0NSwgMjIxLCAKKyAgICAxNTYsIDQ1LCAyMjEsIDE1NSwgNDUsIDIyMSwgMTU0LCA0NSwgMjIxLCAxNTMsIDQ1LCAyMjEsIDE1MiwgNDUsIDIyMSwgCisgICAgMTUxLCA0NSwgMjIxLCAxNTAsIDQ1LCAyMjEsIDE0OSwgNDUsIDIyMSwgMTQ4LCA0NSwgMjIxLCAxNDcsIDQ1LCAyMjEsIAorICAgIDE0NSwgNDUsIDIyMSwgMTQ0LCA0NSwgMjIxLCAxNDMsIDQ1LCAyMjEsIDE0MiwgNDUsIDIyMSwgMTQxLCA0NSwgMjIxLCAKKyAgICAxNDAsIDQ1LCAyMjEsIDEzOSwgNDUsIDIyMSwgMTM4LCA0NSwgMjIxLCAxMzcsIDQ1LCAyMjEsIDEzNiwgNDUsIDIyMSwgCisgICAgMTM0LCA0NSwgMjIxLCAxMzMsIDQ1LCAyMjEsIDEzMiwgNDUsIDIyMSwgMTMxLCA0NSwgMjIxLCAxMzAsIDQ1LCAyMjEsIAorICAgIDEyOSwgNDUsIDIyMSwgMTI4LCA0NSwgMjIxLCAxMjcsIDQ1LCAyMjEsIDEyNiwgNDUsIDIyMSwgMTI1LCA0NSwgMjIxLCAKKyAgICAxMjMsIDQ1LCAyMjEsIDEyMiwgNDUsIDIyMSwgMTIxLCA0NSwgMjIxLCAxMjAsIDQ1LCAyMjEsIDExOSwgNDUsIDIyMSwgCisgICAgMTE4LCA0NSwgMjIxLCAxMTcsIDQ1LCAyMjEsIDExNiwgNDUsIDIyMSwgMTE1LCA0NSwgMjIxLCAxMTQsIDQ1LCAyMjEsIAorICAgIDExMiwgNDUsIDIyMSwgMTExLCA0NSwgMjIxLCAxMTAsIDQ1LCAyMjEsIDEwOSwgNDUsIDIyMSwgMTA4LCA0NSwgMjIxLCAKKyAgICAxMDcsIDQ1LCAyMjEsIDEwNiwgNDUsIDIyMSwgMTA1LCA0NSwgMjIxLCAxMDQsIDQ1LCAyMjEsIDEwMywgNDUsIDIyMSwgCisgICAgMTAxLCA0NSwgMjIxLCAxMDAsIDQ1LCAyMjEsIDk5LCA0NSwgMjIxLCA5OCwgNDUsIDIyMSwgOTcsIDQ1LCAyMjEsIDk2LCAKKyAgICA0NSwgMjIxLCA5NSwgNDUsIDIyMSwgOTQsIDQ1LCAyMjEsIDkzLCA0NSwgMjIxLCA5MiwgNDUsIDIyMSwgOTAsIDQ1LCAyMjEsIAorICAgIDg5LCA0NSwgMjIxLCA4OCwgNDUsIDIyMSwgODcsIDQ1LCAyMjEsIDg2LCA0NSwgMjIxLCA4NSwgNDUsIDIyMSwgODQsIDQ1LCAKKyAgICAyMjEsIDgzLCA0NSwgMjIxLCA4MiwgNDUsIDIyMSwgODEsIDQ1LCAyMjEsIDc5LCA0NSwgMjIxLCA3OCwgNDUsIDIyMSwgNzcsIAorICAgIDQ1LCAyMjEsIDc2LCA0NSwgMjIxLCA3NSwgNDUsIDIyMSwgNzQsIDQ1LCAyMjEsIDczLCA0NSwgMjIxLCA3MiwgNDUsIDIyMSwgCisgICAgNzEsIDQ1LCAyMjEsIDcwLCA0NSwgMjIxLCA2OCwgNDUsIDIyMSwgNjcsIDQ1LCAyMjEsIDY2LCA0NSwgMjIxLCA2NSwgNDUsIAorICAgIDIyMSwgNjQsIDQ1LCAyMjEsIDYzLCA0NSwgMjIxLCA2MiwgNDUsIDIyMSwgNjEsIDQ1LCAyMjEsIDYwLCA0NSwgMjIxLCA1OSwgCisgICAgNDUsIDIyMSwgNTcsIDQ1LCAyMjEsIDU2LCA0NSwgMjIxLCA1NSwgNDUsIDIyMSwgNTQsIDQ1LCAyMjEsIDUzLCA0NSwgMjIxLCAKKyAgICA1MiwgNDUsIDIyMSwgNTEsIDQ1LCAyMjEsIDUwLCA0NSwgMjIxLCA0OSwgNDUsIDIyMSwgNDgsIDQ1LCAyMjEsIDQ1LCA0NSwgCisgICAgMjIxLCA0NCwgNDUsIDIyMSwgNDMsIDQ1LCAyMjEsIDQyLCA0NSwgMjIxLCA0MSwgNDUsIDIyMSwgNDAsIDQ1LCAyMjEsIDM5LCAKKyAgICA0NSwgMjIxLCAzOCwgNDUsIDIyMSwgMzcsIDQ1LCAyMjEsIDM2LCA0NSwgMjIxLCAzNCwgNDUsIDIyMSwgMzMsIDQ1LCAyMjEsIAorICAgIDMyLCA0NSwgMjIxLCAzMSwgNDUsIDIyMSwgMzAsIDQ1LCAyMjEsIDI5LCA0NSwgMjIxLCAyOCwgNDUsIDIyMSwgMjcsIDQ1LCAKKyAgICAyMjEsIDI2LCA0NSwgMjIxLCAyNSwgNDUsIDIyMSwgMjMsIDQ1LCAyMjEsIDIyLCA0NSwgMjIxLCAyMSwgNDUsIDIyMSwgMjAsIAorICAgIDQ1LCAyMjEsIDE5LCA0NSwgMjIxLCAxOCwgNDUsIDIyMSwgMTcsIDQ1LCAyMjEsIDE2LCA0NSwgMjIxLCAxNSwgNDUsIDIyMSwgCisgICAgMTQsIDQ1LCAyMjEsIDEyLCA0NSwgMjIxLCAxMSwgNDUsIDIyMSwgMTAsIDQ1LCAyMjEsIDksIDQ1LCAyMjEsIDgsIDQ1LCAKKyAgICAyMjEsIDcsIDQ1LCAyMjEsIDYsIDQ1LCAyMjEsIDUsIDQ1LCAyMjEsIDQsIDQ1LCAyMjEsIDMsIDQ1LCAyMjEsIDEsIDQ1LCAKKyAgICAyMjEsIDAsIDQ1LCAyMjAsIDI1NSwgNDUsIDIyMCwgMjU0LCA0NSwgMjIwLCAyNTMsIDQ1LCAyMjAsIDI1MiwgNDUsIDIyMCwgCisgICAgMjUxLCA0NSwgMjIwLCAyNTAsIDQ1LCAyMjAsIDI0OSwgNDUsIDIyMCwgMjQ4LCA0NSwgMjIwLCAyNDYsIDQ1LCAyMjAsIAorICAgIDI0NSwgNDUsIDIyMCwgMjQ0LCA0NSwgMjIwLCAyNDMsIDQ1LCAyMjAsIDI0MiwgNDUsIDIyMCwgMjQxLCA0NSwgMjIwLCAKKyAgICAyNDAsIDIyNywgMjA2LCAyMjcsIDIwOCwgMjE4LCAxNTQsIDY0LCAyNDEsIDI0MCwgMjE5LCA1MCwgMjE4LCAxNTQsIDY0LCAKKyAgICAyMTYsIDIxMywgMjE4LCA4NiwgMjQ1LCAxNTEsIDY0LCAyMTYsIDIxMywgMjQ1LCA2NCwgMjQ1LCAxNTEsIDY0LCAyMTUsIAorICAgIDI0NCwgMjQ1LCAxMTcsIDI0NSwgMTQwLCAyNDUsIDE0MSwgMjU1LCAxNiwgMjU1LCAxNywgMjU0LCAxNzYsIDI1MiwgNTUsIAorICAgIDI1MiwgMTg3LCAyNTEsIDEzOSwgMTM1LCAyMTcsIDkwLCAyMDMsIDIxNywgOTAsIDI0MCwgMjM0LCAyMTcsIDk0LCAyMzIsIAorICAgIDIyMCwgMjQ0LCAxNTMsIDE2NiwgMjMyLCAyMTksIDI0NSwgMTUxLCA2NCwgMjMyLCAyMTksIDIzMywgNiwgMjI4LCAxNDAsIAorICAgIDI0NSwgMTIwLCAyMzIsIDIyMCwgMjE3LCA5MCwgNjcsIDIxNywgOTAsIDIxMiwgMTE4LCAyNDQsIDI4LCAyNDQsIDE1MywgCisgICAgMjQ0LCAxMzMsIDI1MCwgMjM4LCAyMjMsIDU2LCAyNDksIDE1MSwgMjIwLCAzMCwgMjI2LCAxMzQsIDIzMiwgMTU2LCAxMTEsIAorICAgIDIxOSwgNjAsIDIyMCwgMzAsIDIzNiwgNiwgMjMyLCAxNTYsIDIxMCwgODYsIDIxOSwgMTkzLCAyNDgsIDE1OSwgMjMyLCAKKyAgICAyMTAsIDI0NSwgODUsIDI0NywgMTYzLCAyNDgsIDM5LCAyNDksIDE4NiwgMTExLCAyNDgsIDE0OSwgMjQ4LCAzOSwgMjQ5LCAKKyAgICAxODYsIDEwNSwgMjQ4LCAxNDgsIDI0OCwgMzksIDI0OSwgMTg2LCAxNTgsIDI0OCwgMTQ3LCAyNDgsIDM5LCAyNDksIDE4NiwgCisgICAgMTYxLCAyNDgsIDE0NiwgMTUyLCAyNTUsIDE2LCAyMjksIDIxNCwgMjE3LCAxNzgsIDIzNiwgNjksIDIxNywgMTgxLCAyNDUsIAorICAgIDE1MSwgNjQsIDIxNSwgMjQ1LCAyNTEsIDIyMSwgMjQ1LCA3MCwgMjUxLCAxMywgMjUxLCAxNSwgMjQ1LCAxNTEsIDY0LCAKKyAgICAyMzEsIDg2LCAyNDUsIDExOCwgMjE4LCA2MiwgMjE4LCA3OSwgMjQ1LCA4NSwgMjQ1LCA4NiwgMjM1LCAyMzksIDIyMCwgCisgICAgMTQwLCAxNjEsIDI0NCwgMTE1LCAyMjAsIDEzOSwgMjQzLCAyNDUsIDIzNSwgMjM5LCAyMjAsIDE0MCwgMTU4LCAyNDIsIAorICAgIDEyOCwgMjIwLCAxMzksIDI0MiwgMTI1LCAyMzUsIDIzOSwgMjIwLCAxNDAsIDEwNSwgMjIzLCAxMjQsIDIyMCwgMTM5LCAKKyAgICAyMjIsIDE0NywgMjM1LCAyMzksIDIyMCwgMTQwLCAxMTEsIDIxNCwgMTc0LCAyMjAsIDEzOSwgMjE0LCAxMzMsIDIxOSwgMjMsIAorICAgIDI0OCwgNzEsIDI0OCwgNzMsIDIyNiwgODIsIDI1MCwgMTUwLCAyMjYsIDg0LCAxMjUsIDIyNiwgMjQ0LCAyMjQsIDE5NiwgCisgICAgMjQxLCA1NCwgMjUxLCAxNTgsIDIyNSwgMTc2LCAyNDEsIDIxMCwgMjUxLCAxNjksIDIyOCwgODAsIDI1MSwgMTU4LCAyNDEsIAorICAgIDIxMCwgMjI5LCAxODAsIDIzNSwgMjQ5LCAyMzUsIDI1MSwgMjI5LCA4NywgMjMyLCAyMTksIDIyOSwgMTA0LCAyMTgsIDE1NCwgCisgICAgNjQsIDIyMSwgMTYwLCAyNTQsIDI2LCAyMTgsIDIyNSwgMjQ1LCAxNTEsIDY0LCAyMjEsIDE2MCwgMjU0LCAyNiwgMjQ1LCAKKyAgICA4OCwgMTM1LCAyMTcsIDkxLCAyMjAsIDEyOSwgMjAzLCAyMTcsIDkxLCAyMjAsIDEyOSwgMjQwLCAyMzEsIDEzNSwgMjE3LCAKKyAgICA5MSwgMiwgMjM1LCA0MSwgMjAzLCAyMTcsIDkxLCAyLCAyMzUsIDQxLCAyNDAsIDIzMiwgMjMyLCAyMjAsIDIxNywgOTEsIAorICAgIDIyMCwgMTI5LCA2NywgMjE3LCA5MSwgMjIwLCAxMjksIDIxMiwgMTE3LCAyMjYsIDEsIDIzMiwgMjIwLCAyNDQsIDIyLCAKKyAgICAyMjYsIDEsIDIzMiwgMjIwLCAyNDYsIDExNCwgMjI1LCAzNSwgMjI2LCAxLCAyMzIsIDIyMCwgMjUyLCAxODYsIDIyNiwgMSwgCisgICAgMjMyLCAyMjAsIDIxNCwgMTYzLCAyMjUsIDMxLCAyMjMsIDUzLCAyMzIsIDIyMCwgMjQ0LCAxNTMsIDIyMywgNTMsIDIzNSwgCisgICAgMjQ5LCAyMjMsIDM4LCAyMTksIDE1NywgMjIwLCAzMCwgMTA1LCAyMTksIDE1NCwgMjE4LCAyMjcsIDIxOSwgMTU3LCAyMjAsIAorICAgIDMwLCAxNTgsIDIxOSwgMTUzLCAyMTgsIDIyNiwgMjQ4LCAzOSwgMjQ5LCAxODYsIDIxOCwgMTA3LCAyNDgsIDE0NSwgMjI0LCAKKyAgICAxODYsIDIxNCwgMTMyLCAxMTEsIDIyNCwgMTg2LCAyMTQsIDEzMCwgMjI0LCAxNTIsIDIyNCwgMTg2LCAyMTQsIDEzMiwgCisgICAgMTA1LCAyMjQsIDE4NiwgMjE0LCAxMjksIDIyNCwgMTUxLCAyMjAsIDEzMCwgMjE1LCAyNDMsIDIxOCwgMTUzLCAyMTgsIDkwLCAKKyAgICAyNTEsIDE0LCAyNTAsIDE1MCwgMjUwLCAyMTcsIDIzMSwgNDgsIDIxMiwgNTksIDIzMCwgNDgsIDIxOCwgMTU0LCA2NCwgCisgICAgMjQyLCAxMTQsIDI1NCwgMjYsIDIxOCwgMTU0LCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDIxOSwgMjIsIDI0NSwgMTUxLCAKKyAgICA2NCwgMjQyLCAxMTQsIDI1NCwgMjYsIDI0NSwgMTUxLCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDI0NSwgMTE1LCAyMTgsIAorICAgIDE1NCwgNjQsIDIxOCwgMTA3LCAyMTksIDM3LCAyMTksIDE1NywgMjQyLCAxNDgsIDEzNSwgMjM1LCAyMDIsIDIyMCwgMTA5LCAKKyAgICAyMTksIDE1NywgMTM1LCAyMzUsIDIwMiwgMjIxLCAxOTYsIDI0OSwgMTg2LCAyMjAsIDEzNywgMjM1LCAyMDIsIDI0OSwgCisgICAgMTIxLCAyMTgsIDEwOCwgMjE2LCAyMzcsIDIxOCwgMTcwLCAyMjYsIDE3MywgMjE3LCAxNjgsIDI0OSwgMjI2LCAyMjYsIAorICAgIDE0NiwgMjI0LCAxODcsIDIzMSwgNDcsIDIyNSwgMjIsIDI1NCwgNjEsIDIyNCwgMTgxLCAyNDksIDIyNiwgMjU0LCA3NywgCisgICAgMjI5LCAxNjgsIDIxOSwgMjAyLCA3LCA2LCAxLCAyNDMsIDAsIDcsIDQsIDEsIDI0MywgMCwgMjUwLCAxNjcsIDI1NCwgMTU3LCAKKyAgICAxODMsIDIxOCwgNjgsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTY1LCAxLCAyMzIsIDE4MSwgMjA5LCAyMDksIDEsIAorICAgIDI0NCwgNTIsIDI0NCwgNDQsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyNDQsIDE2NSwgMjA5LCAyMDksIDEsIDIyMiwgMjEzLCAKKyAgICAyMDksIDIwOSwgMSwgMjMyLCAxNjIsIDYzLCAxNjQsIDI1MSwgMjMxLCAyMjAsIDUsIDI0MiwgMjIyLCAyMzAsIDI1MywgCisgICAgMjIzLCA0NCwgMjQzLCAyMjMsIDI0MywgMjIyLCAyNDMsIDIyMSwgMjMwLCA1MCwgMjA5LCAyNTEsIDIwOSwgMjUyLCAyMDksIAorICAgIDI1NCwgMjMyLCAxMDcsIDIyMiwgMjIxLCAyMzIsIDEwOSwgMjIyLCAyMjMsIDIyNSwgMjI3LCAyMzIsIDEwNiwgMjIyLCAKKyAgICAyMjAsIDIyOCwgMTExLCAyMzAsIDE3MCwgMjExLCAyMjksIDIzMiwgMTA4LCAyMjIsIDIyMiwgMjQzLCAyNDQsIDIyNSwgCisgICAgMjI2LCAyMTIsIDE1LCAyNDUsIDE3MCwgMjQzLCAyMzMsIDIzMCwgMjM0LCAyMjYsIDIwMSwgMjE0LCAxMzQsIDg3LCAyMzAsIAorICAgIDIzNCwgMjQ4LCAxNjUsIDg3LCA4LCAzLCAyMzUsIDE2NCwgNzksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA3MSwgCisgICAgMjMzLCAyNiwgMTI3LCAyMTMsIDExOCwgMjEzLCA3LCAyMTIsIDE5NSwgMjEyLCAxODQsIDIxMiwgMTczLCAyMTIsIDE2MiwgCisgICAgMjEyLCAxNTEsIDIxMiwgMTQwLCAyMTIsIDEyOSwgMjEzLCAxMTcsIDIxMywgMTA2LCAyMTMsIDk1LCAyMTMsIDg0LCAyMTMsIAorICAgIDczLCAyMTMsIDYyLCAyMTMsIDUxLCAyNTEsIDc5LCAyMjYsIDE1OSwgNzksIDI1MSwgMjA0LCAyMDksIDI1MywgMTUsIDUsIAorICAgIDIyNywgMjE1LCAyMTYsIDI0MCwgMTUsIDUsIDIyNywgMjE1LCAxMTUsIDIyNywgMjE1LCAyNTEsIDEwNywgMTE1LCAyNTEsIAorICAgIDEwNiwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIxOSwgMTA0LCAyNTAsIDgxLCAyMTQsIDksIDIxMywgNDAsIDIxMywgMjksIAorICAgIDIxMywgMTgsIDIxMywgNiwgMjEyLCAyNTEsIDIxMiwgMjQwLCAyMTIsIDIyOSwgMjEyLCAyMTgsIDIxMiwgMjA3LCAyMTIsIAorICAgIDE5OSwgMjEyLCAxOTgsIDIxMiwgMTk3LCAyMTIsIDE5NiwgMjEyLCAxOTQsIDIxMiwgMTkzLCAyMTIsIDE5MiwgMjEyLCAKKyAgICAxOTEsIDIxMiwgMTkwLCAyMTIsIDE4OSwgMjEyLCAxODgsIDIxMiwgMTg3LCAyMTIsIDE4NiwgMjEyLCAxODUsIDIxMiwgCisgICAgMTgzLCAyMTIsIDE4MiwgMjEyLCAxODEsIDIxMiwgMTgwLCAyMTIsIDE3OSwgMjEyLCAxNzgsIDIxMiwgMTc3LCAyMTIsIAorICAgIDE3NiwgMjEyLCAxNzUsIDIxMiwgMTc0LCAyMTIsIDE3MiwgMjEyLCAxNzEsIDIxMiwgMTcwLCAyMTIsIDE2OSwgMjEyLCAKKyAgICAxNjgsIDIxMiwgMTY3LCAyMTIsIDE2NiwgMjEyLCAxNjUsIDIxMiwgMTY0LCAyMTIsIDE2MywgMjEyLCAxNjEsIDIxMiwgCisgICAgMTYwLCAyMTIsIDE1OSwgMjEyLCAxNTgsIDIxMiwgMTU3LCAyMTIsIDE1NiwgMjEyLCAxNTUsIDIxMiwgMTU0LCAyMTIsIAorICAgIDE1MywgMjEyLCAxNTIsIDIxMiwgMTUwLCAyMTIsIDE0OSwgMjEyLCAxNDgsIDIxMiwgMTQ3LCAyMTIsIDE0NiwgMjEyLCAKKyAgICAxNDUsIDIxMiwgMTQ0LCAyMTIsIDE0MywgMjEyLCAxNDIsIDIxMiwgMTQxLCAyMTIsIDEzOSwgMjEyLCAxMzgsIDIxMiwgCisgICAgMTM3LCAyMTIsIDEzNiwgMjEyLCAxMzUsIDIxMiwgMTM0LCAyMTIsIDEzMywgMjEyLCAxMzIsIDIxMiwgMTMxLCAyMTIsIAorICAgIDEzMCwgMjEyLCAxMjgsIDIxMiwgMTI3LCAyMTIsIDEyNiwgMjEyLCAxMjUsIDIxMiwgMTI0LCAyMTIsIDEyMywgMjEyLCAKKyAgICAxMjIsIDIxMiwgMTIxLCAyMTIsIDEyMCwgMjEyLCAxMTksIDIxMywgMTE2LCAyMTMsIDExNSwgMjEzLCAxMTQsIDIxMywgCisgICAgMTEzLCAyMTMsIDExMiwgMjEzLCAxMTEsIDIxMywgMTEwLCAyMTMsIDEwOSwgMjEzLCAxMDgsIDIxMywgMTA3LCAyMTMsIAorICAgIDEwNSwgMjEzLCAxMDQsIDIxMywgMTAzLCAyMTMsIDEwMiwgMjEzLCAxMDEsIDIxMywgMTAwLCAyMTMsIDk5LCAyMTMsIDk4LCAKKyAgICAyMTMsIDk3LCAyMTMsIDk2LCAyMTMsIDk0LCAyMTMsIDkzLCAyMTMsIDkyLCAyMTMsIDkxLCAyMTMsIDkwLCAyMTMsIDg5LCAKKyAgICAyMTMsIDg4LCAyMTMsIDg3LCAyMTMsIDg2LCAyMTMsIDg1LCAyMTMsIDgzLCAyMTMsIDgyLCAyMTMsIDgxLCAyMTMsIDgwLCAKKyAgICAyMTMsIDc5LCAyMTMsIDc4LCAyMTMsIDc3LCAyMTMsIDc2LCAyMTMsIDc1LCAyMTMsIDc0LCAyMTMsIDcyLCAyMTMsIDcxLCAKKyAgICAyMTMsIDcwLCAyMTMsIDY5LCAyMTMsIDY4LCAyMTMsIDY3LCAyMTMsIDY2LCAyMTMsIDY1LCAyMTMsIDY0LCAyMTMsIDYzLCAKKyAgICAyMTMsIDYxLCAyMTMsIDYwLCAyMTMsIDU5LCAyMTMsIDU4LCAyMTMsIDU3LCAyMTMsIDU2LCAyMTMsIDU1LCAyMTMsIDU0LCAKKyAgICAyMTMsIDUzLCAyMTMsIDUyLCAyMTMsIDUwLCAyMTMsIDQ5LCAyMTMsIDQ4LCAyMTMsIDQ3LCAyMTMsIDQ2LCAyMTMsIDQ1LCAKKyAgICAyMTMsIDQ0LCAyMTMsIDQzLCAyMTMsIDQyLCAyMTMsIDQxLCAyMTMsIDM5LCAyMTMsIDM4LCAyMTMsIDM3LCAyMTMsIDM2LCAKKyAgICAyMTMsIDM1LCAyMTMsIDM0LCAyMTMsIDMzLCAyMTMsIDMyLCAyMTMsIDMxLCAyMTMsIDMwLCAyMTMsIDI4LCAyMTMsIDI3LCAKKyAgICAyMTMsIDI2LCAyMTMsIDI1LCAyMTMsIDI0LCAyMTMsIDIzLCAyMTMsIDIyLCAyMTMsIDIxLCAyMTMsIDIwLCAyMTMsIDE5LCAKKyAgICAyMTMsIDE3LCAyMTMsIDE2LCAyMTMsIDE1LCAyMTMsIDE0LCAyMTMsIDEzLCAyMTMsIDEyLCAyMTMsIDExLCAyMTMsIDEwLCAKKyAgICAyMTMsIDksIDIxMywgOCwgMjEzLCA1LCAyMTMsIDQsIDIxMywgMywgMjEzLCAyLCAyMTMsIDEsIDIxMywgMCwgMjEyLCAyNTUsIAorICAgIDIxMiwgMjU0LCAyMTIsIDI1MywgMjEyLCAyNTIsIDIxMiwgMjUwLCAyMTIsIDI0OSwgMjEyLCAyNDgsIDIxMiwgMjQ3LCAKKyAgICAyMTIsIDI0NiwgMjEyLCAyNDUsIDIxMiwgMjQ0LCAyMTIsIDI0MywgMjEyLCAyNDIsIDIxMiwgMjQxLCAyMTIsIDIzOSwgCisgICAgMjEyLCAyMzgsIDIxMiwgMjM3LCAyMTIsIDIzNiwgMjEyLCAyMzUsIDIxMiwgMjM0LCAyMTIsIDIzMywgMjEyLCAyMzIsIAorICAgIDIxMiwgMjMxLCAyMTIsIDIzMCwgMjEyLCAyMjgsIDIxMiwgMjI3LCAyMTIsIDIyNiwgMjEyLCAyMjUsIDIxMiwgMjI0LCAKKyAgICAyMTIsIDIyMywgMjEyLCAyMjIsIDIxMiwgMjIxLCAyMTIsIDIyMCwgMjEyLCAyMTksIDIxMiwgMjE3LCAyMTIsIDIxNiwgCisgICAgMjEyLCAyMTUsIDIxMiwgMjE0LCAyMTIsIDIxMywgMjEyLCAyMTIsIDIxMiwgMjExLCAyMTIsIDIxMCwgMjEyLCAyMDksIAorICAgIDIxMiwgMjA4LCAyMTIsIDIwNiwgMjEyLCAyMDUsIDIxMiwgMjA0LCAyMTIsIDIwMywgMjEyLCAyMDIsIDIxMiwgMjAxLCAKKyAgICAyMTIsIDIwMCwgNywgNiwgMSwgMTE2LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDIzMSwgCisgICAgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMTYwLCAyLCAKKyAgICA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIAorICAgIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIAorICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCisgICAgMzksIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDE2MCwgCisgICAgMiwgMjUwLCAzOSwgMjIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgCisgICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDIyOSwgODUsIDIsIDIxNiwgOTAsIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIAorICAgIDIyMCwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAKKyAgICAyMjAsIDI1MiwgNTEsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAKKyAgICAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgCisgICAgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMTQyLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCAKKyAgICA3LCA0LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCA1OSwgCisgICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDcyLCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3MiwgCisgICAgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgNzIsIAorICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNiwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjksIDIyLCA1OSwgNzIsIDIyLCAKKyAgICAxNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzUsIDE1MSwgMiwgMTg0LCA3LCA0LCAxLCAyMzUsIDE1MSwgCisgICAgMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCAKKyAgICA3LCA2LCAxLCAyMzIsIDU1LCAyLCAxODQsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDE4NCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAKKyAgICAyMDQsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgCisgICAgMTA2LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDYsIDIsIDE0MiwgNywgNCwgMSwgMjIxLCAxOTgsIAorICAgIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMjEsIDE5OCwgMiwgMTQyLCA3LCA0LCAxLCAyNDEsIDU4LCAyMjEsIDE5OCwgMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MSwgNTgsIDIyMSwgMTk4LCAyLCAxNDIsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMjU0LCAxNzksIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMCwgOSwgMjIwLCAxMzcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk3LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgCisgICAgMjM4LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY5LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDIxMCwgMjEyLCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDc2LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDI1NCwgMjUyLCA5LCAyMjAsIDEzNywgMjI4LCA2OCwgMiwgMjM0LCAxODAsIDE0NiwgMSwgMjM0LCAxMTUsIDM2LCAKKyAgICAxMTcsIDIzNSwgMjksIDM2LCAxMTcsIDIyOSwgODQsIDM2LCAxMTcsIDI1MSwgNzQsIDM2LCAxMTcsIDIyNywgMTcxLCAzNiwgCisgICAgMTE3LCAyMTUsIDE2MCwgMzYsIDExNywgMjI4LCAxMTYsIDM2LCAxMTcsIDIxNywgMTUzLCAzNiwgMTE3LCAyMzAsIDMwLCAKKyAgICAzNiwgMTE3LCAyMjYsIDEwOSwgMzYsIDExNywgMTk0LCAzNiwgMTE3LCAyMTEsIDExNywgMzYsIDExNywgMTUzLCAzNiwgCisgICAgMTE3LCAxNTYsIDM2LCAxMTcsIDIxNCwgMTA1LCAzNiwgMTE3LCAyMzIsIDE4MiwgMzYsIDExNywgMjMyLCAxOTEsIDM2LCAKKyAgICAxMTcsIDIyMiwgMTgyLCAzNiwgMTE3LCAyMjgsIDk4LCAzNiwgMTE3LCAyMzUsIDE1MCwgMzYsIDExNywgMjIwLCAxMDYsIAorICAgIDM2LCAxMTcsIDIxOCwgMjI4LCAzNiwgMTE3LCAyMjIsIDkzLCAzNiwgMTE3LCAyNDIsIDY3LCAzNiwgMTE3LCAyMzMsIDIzOCwgCisgICAgMzYsIDMsIDIzNSwgMTYsIDM2LCAzLCAyMzQsIDk4LCAzNiwgMywgMjM0LCA4OSwgMzYsIDMsIDIzMywgMjIzLCAzNiwgMywgCisgICAgMjMzLCAxOTQsIDM2LCAzLCAyMzQsIDE4OCwgMzYsIDMsIDIzNCwgMTg3LCAzNiwgMywgMjM0LCAyNTIsIDM2LCAzLCAyMzQsIAorICAgIDM0LCAzNiwgMywgMjM0LCAxNiwgMzYsIDMsIDIzNCwgMjAxLCAzNiwgMywgMjI5LCA4MSwgMzYsIDMsIDIyOSwgMzIsIDM2LCAKKyAgICAzLCAyMjksIDI4LCAzNiwgMywgMjI4LCAyNTMsIDM2LCAzLCAyMjgsIDI0NiwgMzYsIDMsIDIyOSwgNjksIDM2LCAzLCAyMjksIAorICAgIDY3LCAzNiwgMywgMjI5LCA3OCwgMzYsIDMsIDIyOSwgOSwgMzYsIDMsIDIyOSwgNCwgMzYsIDMsIDIyOSwgNzEsIDM2LCAzLCAKKyAgICAyNTEsIDQwLCAzNiwgMywgMjUwLCA1OSwgMzYsIDMsIDI1MCwgNDksIDM2LCAzLCAyNDksIDEyMCwgMzYsIDMsIDI0OSwgOTEsIAorICAgIDM2LCAzLCAyNTAsIDE5OCwgMzYsIDMsIDI1MCwgMTkwLCAzNiwgMywgMjUxLCAzMCwgMzYsIDMsIDI0OSwgMjQ2LCAzNiwgMywgCisgICAgMjQ5LCAxODIsIDM2LCAzLCAyNTAsIDIzMCwgMzYsIDMsIDIyNywgMTY4LCAzNiwgMywgMjI3LCAxNTIsIDM2LCAzLCAyMjcsIAorICAgIDE0NywgMzYsIDMsIDIyNywgMTMyLCAzNiwgMywgMjI3LCAxMjUsIDM2LCAzLCAyMjcsIDE2MCwgMzYsIDMsIDIyNywgMTU5LCAKKyAgICAzNiwgMywgMjI3LCAxNjUsIDM2LCAzLCAyMjcsIDEzOCwgMzYsIDMsIDIyNywgMTM2LCAzNiwgMywgMjI3LCAxNjMsIDM2LCAKKyAgICAzLCAyMTUsIDE1NiwgMzYsIDMsIDIxNSwgMTM2LCAzNiwgMywgMjE1LCAxMzUsIDM2LCAzLCAyMTUsIDEyNCwgMzYsIDMsIAorICAgIDIxNSwgMTIxLCAzNiwgMywgMjE1LCAxNTIsIDM2LCAzLCAyMTUsIDE1MSwgMzYsIDMsIDIxNSwgMTU1LCAzNiwgMywgMjE1LCAKKyAgICAxMzQsIDM2LCAzLCAyMTUsIDEzMywgMzYsIDMsIDIxNSwgMTU0LCAzNiwgMywgMjI4LCAxMTQsIDM2LCAzLCAyMjgsIDEwMCwgCisgICAgMzYsIDMsIDIyOCwgOTksIDM2LCAzLCAyMjgsIDgzLCAzNiwgMywgMjI4LCA4MiwgMzYsIDMsIDIyOCwgMTEwLCAzNiwgMywgCisgICAgMjI4LCAxMDksIDM2LCAzLCAyMjgsIDExMywgMzYsIDMsIDIyOCwgODUsIDM2LCAzLCAyMjgsIDg0LCAzNiwgMywgMjI4LCAKKyAgICAxMTIsIDM2LCAzLCAyMTcsIDEwMiwgMzYsIDMsIDIxNiwgMTE4LCAzNiwgMywgMjE2LCAxMDQsIDM2LCAzLCAyMTUsIDExOSwgCisgICAgMzYsIDMsIDIxNSwgODUsIDM2LCAzLCAyMTcsIDIzLCAzNiwgMywgMjE3LCAxMiwgMzYsIDMsIDIxNywgODAsIDM2LCAzLCAKKyAgICAxMTIsIDM2LCAzLCAyMTYsIDE4LCAzNiwgMywgMjE3LCA0MiwgMzYsIDMsIDIyOSwgMjMwLCAzNiwgMywgMjI4LCAyMzgsIAorICAgIDM2LCAzLCAyMjgsIDIxMywgMzYsIDMsIDIyNywgMjQyLCAzNiwgMywgMjI3LCAxODMsIDM2LCAzLCAyMjksIDExMiwgMzYsIAorICAgIDMsIDIyOSwgMTA4LCAzNiwgMywgMjI5LCAyMTcsIDM2LCAzLCAyMjgsIDc5LCAzNiwgMywgMjI4LCA2OSwgMzYsIDMsIDIyOSwgCisgICAgMTkyLCAzNiwgMywgMjI2LCA5MywgMzYsIDMsIDIyNSwgMTExLCAzNiwgMywgMjI1LCA3NCwgMzYsIDMsIDIyNCwgMTUzLCAKKyAgICAzNiwgMywgMjI0LCAxMjIsIDM2LCAzLCAyMjUsIDIyNCwgMzYsIDMsIDIyNSwgMjE0LCAzNiwgMywgMjI2LCA3NSwgMzYsIDMsIAorICAgIDIyNSwgMTksIDM2LCAzLCAyMjQsIDI1MiwgMzYsIDMsIDIyNSwgMjM4LCAzNiwgMywgMjMxLCAyNDIsIDM2LCAzLCAyMzAsIAorICAgIDIzNSwgMzYsIDMsIDIzMCwgMjA2LCAzNiwgMywgMjMwLCAxMDcsIDM2LCAzLCAyMzAsIDU5LCAzNiwgMywgMjMxLCA5NiwgCisgICAgMzYsIDMsIDIzMSwgODUsIDM2LCAzLCAyMzEsIDIwOCwgMzYsIDMsIDIzMCwgMTY2LCAzNiwgMywgMjMwLCAxMzcsIDM2LCAzLCAKKyAgICAyMzEsIDE0MCwgMzYsIDMsIDIxMSwgMTAzLCAzNiwgMywgMjExLCA4LCAzNiwgMywgMjEwLCAyNTUsIDM2LCAzLCAyMTAsIAorICAgIDIxMiwgMzYsIDMsIDIxMCwgMTgxLCAzNiwgMywgMjExLCA0NywgMzYsIDMsIDIxMSwgNDQsIDM2LCAzLCAyMTEsIDgyLCAzNiwgCisgICAgMywgMjEwLCAyNDQsIDM2LCAzLCAyMTAsIDIyOSwgMzYsIDMsIDIxMSwgNTUsIDM2LCAzLCAyMjMsIDE4NywgMzYsIDMsIAorICAgIDIyMywgMzgsIDM2LCAzLCAyMjIsIDI0MiwgMzYsIDMsIDIyMiwgMTQyLCAzNiwgMywgMjIyLCAxMTQsIDM2LCAzLCAyMjMsIAorICAgIDEzMSwgMzYsIDMsIDIyMywgMTExLCAzNiwgMywgMjIzLCAxNjksIDM2LCAzLCAyMjIsIDIxMywgMzYsIDMsIDIyMiwgMTk5LCAKKyAgICAzNiwgMywgMjIzLCAxMzksIDM2LCAzLCAyMzMsIDE0MCwgMzYsIDMsIDIzMiwgMjQ3LCAzNiwgMywgMjMyLCAyMzMsIDM2LCAKKyAgICAzLCAyMzIsIDEwMywgMzYsIDMsIDIzMiwgNzgsIDM2LCAzLCAyMzMsIDY0LCAzNiwgMywgMjMzLCA1NiwgMzYsIDMsIDIzMywgCisgICAgMTE1LCAzNiwgMywgMjMyLCAxNjIsIDM2LCAzLCAyMzIsIDEzMywgMzYsIDMsIDIzMywgODAsIDM2LCAzLCAyMTQsIDI2LCAKKyAgICAzNiwgMywgMjEzLCAxNzYsIDM2LCAzLCAyMTMsIDE2MiwgMzYsIDMsIDIxMiwgMTE2LCAzNiwgMywgMjEyLCAxMDksIDM2LCAKKyAgICAzLCAyMTMsIDI1NSwgMzYsIDMsIDIxMywgMjUwLCAzNiwgMywgMjE0LCAyMywgMzYsIDMsIDIxMywgMTM4LCAzNiwgMywgCisgICAgMjEzLCAxMjcsIDM2LCAzLCAyMTQsIDUsIDM2LCAzLCAyMzIsIDE4MCwgMzYsIDMsIDIzMiwgMTc1LCAzNiwgMywgMjMyLCAKKyAgICAxNzQsIDM2LCAzLCAyMzIsIDE3MSwgMzYsIDMsIDIzMiwgMTcwLCAzNiwgMywgMjMyLCAxNzcsIDM2LCAzLCAyMzIsIDE3NiwgCisgICAgMzYsIDMsIDIzMiwgMTc5LCAzNiwgMywgMjMyLCAxNzMsIDM2LCAzLCAyMzIsIDE3MiwgMzYsIDMsIDIzMiwgMTc4LCAzNiwgCisgICAgMywgMjMyLCAxODksIDM2LCAzLCAyMzIsIDE4NCwgMzYsIDMsIDIzMiwgMTgzLCAzNiwgMywgMjMyLCAxNjcsIDM2LCAzLCAKKyAgICAyMzIsIDE2NiwgMzYsIDMsIDIzMiwgMTg2LCAzNiwgMywgMjMyLCAxODUsIDM2LCAzLCAyMzIsIDE4OCwgMzYsIDMsIDIzMiwgCisgICAgMTY5LCAzNiwgMywgMjMyLCAxNjgsIDM2LCAzLCAyMzIsIDE4NywgMzYsIDMsIDIyMiwgMTgwLCAzNiwgMywgMjIyLCAxNjksIAorICAgIDM2LCAzLCAyMjIsIDE2OCwgMzYsIDMsIDIyMiwgMTYyLCAzNiwgMywgMjIyLCAxNTUsIDM2LCAzLCAyMjIsIDE3NiwgMzYsIAorICAgIDMsIDIyMiwgMTc1LCAzNiwgMywgMjIyLCAxNzksIDM2LCAzLCAyMjIsIDE2NywgMzYsIDMsIDIyMiwgMTY2LCAzNiwgMywgCisgICAgMjIyLCAxNzgsIDM2LCAzLCAyMjgsIDk2LCAzNiwgMywgMjI4LCA5MSwgMzYsIDMsIDIyOCwgOTAsIDM2LCAzLCAyMjgsIDg3LCAKKyAgICAzNiwgMywgMjI4LCA4NiwgMzYsIDMsIDIyOCwgOTMsIDM2LCAzLCAyMjgsIDkyLCAzNiwgMywgMjI4LCA5NSwgMzYsIDMsIAorICAgIDIyOCwgODksIDM2LCAzLCAyMjgsIDg4LCAzNiwgMywgMjI4LCA5NCwgMzYsIDMsIDIzNSwgMTQ2LCAzNiwgMywgMjM1LCAKKyAgICAxMTQsIDM2LCAzLCAyMzUsIDEwNywgMzYsIDMsIDIzNSwgNTcsIDM2LCAzLCAyMzUsIDM5LCAzNiwgMywgMjM1LCAxMzIsIAorICAgIDM2LCAzLCAyMzUsIDEzMCwgMzYsIDMsIDIzNSwgMTQxLCAzNiwgMywgMjM1LCA3NCwgMzYsIDMsIDIzNSwgNjUsIDM2LCAzLCAKKyAgICAyMzUsIDEzNSwgMzYsIDMsIDIyMCwgMTAwLCAzNiwgMywgMjIwLCAzNCwgMzYsIDMsIDIyMCwgMjksIDM2LCAzLCAyMTksIAorICAgIDIyNywgMzYsIDMsIDIxOSwgMjEyLCAzNiwgMywgMjIwLCA2NSwgMzYsIDMsIDIyMCwgNjMsIDM2LCAzLCAyMjAsIDkyLCAzNiwgCisgICAgMywgMjIwLCA5LCAzNiwgMywgMjIwLCAzLCAzNiwgMywgMjIwLCA3MywgMzYsIDMsIDIxOCwgMjI0LCAzNiwgMywgMjE4LCAKKyAgICAxOTQsIDM2LCAzLCAyMTgsIDE5MCwgMzYsIDMsIDIxOCwgMTgxLCAzNiwgMywgMjE4LCAxNzgsIDM2LCAzLCAyMTgsIDE5OSwgCisgICAgMzYsIDMsIDIxOCwgMTk4LCAzNiwgMywgMjE4LCAyMjMsIDM2LCAzLCAyMTgsIDE4NiwgMzYsIDMsIDIxOCwgMTg1LCAzNiwgCisgICAgMywgMjE4LCAyMDEsIDM2LCAzLCAyMjIsIDMzLCAzNiwgMywgMjE5LCAxOTMsIDM2LCAzLCAyMTksIDE3NywgMzYsIDMsIAorICAgIDIxOCwgODQsIDM2LCAzLCAyMTgsIDUsIDM2LCAzLCAyMjEsIDE4MywgMzYsIDMsIDIyMSwgMTcyLCAzNiwgMywgMjIyLCAxOSwgCisgICAgMzYsIDMsIDIxOSwgNjAsIDM2LCAzLCAyMTksIDQyLCAzNiwgMywgMjIxLCAyMjEsIDM2LCAzLCAyNDIsIDUzLCAzNiwgMywgCisgICAgMjQxLCAxODcsIDM2LCAzLCAyNDEsIDE2OCwgMzYsIDMsIDI0MCwgMjI5LCAzNiwgMywgMjQwLCAyMDksIDM2LCAzLCAyNDEsIAorICAgIDI0NSwgMzYsIDMsIDI0MSwgMjI3LCAzNiwgMywgMjQyLCA0MywgMzYsIDMsIDI0MSwgNzUsIDM2LCAzLCAyNDEsIDYwLCAzNiwgCisgICAgMywgMjQxLCAyNTMsIDM2LCAzLCAyMzMsIDIzNywgMzYsIDMsIDIzMywgMjM2LCAzNiwgMywgMjMzLCAyMzEsIDM2LCAzLCAKKyAgICAyMzMsIDIzMCwgMzYsIDMsIDIzMywgMjI3LCAzNiwgMywgMjMzLCAyMjYsIDM2LCAzLCAyMzMsIDIzMywgMzYsIDMsIDIzMywgCisgICAgMjMyLCAzNiwgMywgMjMzLCAyMzUsIDM2LCAzLCAyMzMsIDIyOSwgMzYsIDMsIDIzMywgMjI4LCAzNiwgMywgMjMzLCAyMzQsIAorICAgIDM2LCAzLCAyMTksIDIzMywgMTc1LCAxMTcsIDUsIDIxMSwgNjgsIDE3NSwgMTE3LCA1LCAyMjMsIDE1OCwgMTc1LCAxMTcsIAorICAgIDUsIDIyMywgODEsIDk4LCAxLCAyMTUsIDI4LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTc2LCA3MCwgMTE3LCA1LCAyNDksIAorICAgIDI0MSwgMjM0LCAxMzgsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzQsIDM0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjM0LCAKKyAgICAxMTEsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjksIDksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNTEsIDQxLCA3MCwgCisgICAgMTE3LCA1LCAyNDksIDI0MSwgMjUwLCAxNjUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDksIDI0NiwgNzAsIDExNywgNSwgCisgICAgMjQ5LCAyNDEsIDI1MCwgOTQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjcsIDEzOCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDI0OCwgMjI5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE1LCAxNDUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDcsIDE1MywgCisgICAgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNSwgMTQwLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTk4LCA3MCwgMTE3LCA1LCAKKyAgICAyNDksIDI0MSwgMjE3LCAxMDYsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTYsIDIwOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDExMiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNiwgMTU3LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI4LCA3OSwgNzAsIAorICAgIDExNywgNSwgMjQ5LCAyNDEsIDI1MiwgMTk5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxNTAsIDcwLCAxMTcsIDUsIAorICAgIDI0OSwgMjQxLCAyMjUsIDE5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxMjQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAKKyAgICAyMzAsIDE2NiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMCwgMjQ0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjIyLCAyMTMsIAorICAgIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzIsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMywgMTM4LCA3MCwgMTE3LCAKKyAgICA1LCAyNDksIDI0MSwgMjIwLCAxMDQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTgsIDIyNSwgNzAsIDExNywgNSwgMjQ5LCAKKyAgICAyNDEsIDIwNiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzMywgMTQxLCA3MCwgCisgICAgMjUsIDUsIDI0OSwgMjQxLCAyMjQsIDkxLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjI0LCAzMywgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyMiwgMTAyLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjIyLCAKKyAgICA5NSwgNzAsIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyNCwgNzIsIDcwLCAyNSwgNSwgMjI2LCAyMDgsIDcwLCAyNSwgCisgICAgNSwgMjU1LCA0MywgMTQxLCAxLCAyNTIsIDcsIDIyOSwgODIsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDMyLCAxNDEsIDEsIAorICAgIDI1MiwgNywgMjI4LCAyNTMsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDY5LCAxNDEsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgCisgICAgMjUyLCA3LCAyMjksIDgyLCA1NiwgMSwgMjUyLCA3LCAyMjksIDMyLCA1NiwgMSwgMjUyLCA3LCAyMjgsIDI1MywgNTYsIDEsIAorICAgIDI1MiwgNywgMjI5LCA2OSwgNTYsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgMjU0LCAyMDMsIDI1MCwgMTk4LCA1NiwgMSwgCisgICAgMjU0LCAyMDMsIDIxNSwgMTE5LCA1NiwgMSwgMjU0LCAyMDMsIDExMiwgNTYsIDEsIDI1NCwgMjAzLCAyMjYsIDEwOSwgNTgsIAorICAgIDEsIDI0NSwgMjgsIDI0NSwgMjcsIDI0OSwgMTkwLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDI0NSwgMjgsIDI0OSwgCisgICAgMTkwLCAxMzgsIDEzMCwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBwaHJhc2Vib29rX29mZnNldDFbXSA9IHsKQEAgLTE0NDMxLDI0NTEgKzE0NDQ4LDI0NTEgQEAKICAgICA4NjQ3LCAwLCAwLCAwLCAwLCAwLCA4NjUxLCA4NjU4LCA4NjY2LCA4NjczLCA4Njc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCA4NjgzLCA4Njg2LCA4NjkwLCA4Njk1LCA4Njk5LCAwLCA4NzAzLCA4NzA5LCA4NzE1LCA4NzE4LCAKICAgICA4NzI1LCA4NzM0LCA4NzM3LCA4NzQwLCA4NzQ1LCA4NzUxLCA4NzU1LCA4NzYzLCA4NzY5LCA4Nzc1LCA4NzgzLCA4Nzg3LCAKLSAgICA4NzkyLCA4ODAzLCA4ODA4LCA4ODEyLCA4ODE2LCA4ODIwLCAwLCAwLCA4ODIzLCA4ODMwLCA4ODM0LCA4ODQwLCA4ODQ0LCAKLSAgICA4ODUxLCA4ODU3LCA4ODY0LCA4ODcwLCA4ODc2LCA4ODgwLCA4ODg0LCA4ODkwLCA4ODk0LCA4ODk4LCA4OTAyLCA4OTA2LCAKLSAgICA4OTEwLCA4OTE0LCA4OTE4LCA4OTIyLCA4OTI2LCA4OTMwLCA4OTM0LCA4OTM4LCA4OTQyLCA4OTQ2LCA4OTUwLCA4OTU0LCAKLSAgICA4OTU4LCA4OTY2LCA4OTc0LCA4OTg0LCA4OTkzLCA5MDAyLCA5MDA1LCA5MDA5LCA5MDEzLCA5MDE3LCA5MDIxLCA5MDI1LCAKLSAgICA5MDI5LCA5MDMzLCA5MDM3LCA5MDQyLCA5MDQ2LCA5MDQ5LCA5MDUyLCA5MDU1LCA5MDU4LCA5MDYxLCA5MDY0LCA5MDY3LCAKLSAgICA5MDcwLCA5MDc0LCA5MDc3LCA5MDgwLCA5MDg1LCA5MDkwLCA5MDk2LCA5MDk5LCA5MTA2LCA5MTE1LCA5MTIwLCA5MTI1LCAKLSAgICA5MTMyLCA5MTM3LCA5MTQyLCA5MTQ2LCA5MTUwLCA5MTU0LCA5MTU4LCA5MTYyLCA5MTY2LCA5MTcwLCA5MTc0LCA5MTc4LCAKLSAgICA5MTgyLCA5MTg3LCA5MTkyLCA5MTk5LCA5MjA1LCA5MjExLCA5MjE3LCA5MjIyLCA5MjMwLCA5MjM4LCA5MjQzLCA5MjQ5LCAKLSAgICA5MjU1LCA5MjYxLCA5MjY3LCA5MjcxLCA5Mjc1LCA5Mjc5LCA5Mjg2LCA5Mjk2LCA5MzAwLCA5MzA0LCA5MzA4LCA5MzE0LCAKLSAgICA5MzIyLCA5MzI2LCA5MzMwLCA5MzM3LCA5MzQxLCA5MzQ1LCA5MzQ5LCA5MzU2LCA5MzYzLCA5Mzc1LCA5Mzc5LCA5MzgzLCAKLSAgICA5Mzg3LCA5Mzk3LCA5NDA2LCA5NDEwLCA5NDE4LCA5NDI1LCA5NDMyLCA5NDQxLCA5NDUyLCA5NDYwLCA5NDY0LCA5NDczLCAKLSAgICA5NDg0LCA5NDkyLCA5NTA1LCA5NTEzLCA5NTIxLCA5NTI5LCA5NTM3LCA5NTQzLCA5NTUyLCA5NTU5LCA5NTYzLCA5NTcxLCAKLSAgICA5NTc1LCA5NTgyLCA5NTkwLCA5NTk0LCA5NjAwLCA5NjA3LCA5NjE0LCA5NjE4LCA5NjI2LCA5NjMwLCA5NjM3LCA5NjQxLCAKLSAgICA5NjQ5LCA5NjUzLCA5NjYxLCA5NjY5LCA5Njc2LCA5Njg0LCA5NjkyLCA5Njk5LCA5NzA1LCA5NzA5LCA5NzE2LCA5NzI0LCAKLSAgICA5NzMwLCA5NzM3LCA5NzQ0LCA5NzUwLCA5NzU5LCA5NzY3LCA5Nzc0LCA5NzgwLCA5Nzg0LCA5Nzg3LCA5NzkxLCA5Nzk3LCAKLSAgICA5ODA1LCA5ODA5LCA5ODE1LCA5ODIxLCA5ODI4LCA5ODM1LCA5ODM4LCA5ODQ1LCA5ODUwLCA5ODU4LCA5ODYzLCA5ODY3LCAKLSAgICA5ODgwLCA5ODkzLCA5ODk5LCA5OTA2LCA5OTExLCA5OTE3LCA5OTIyLCA5OTI4LCA5OTM4LCA5OTQ1LCA5OTU0LCA5OTY0LCAKLSAgICA5OTcwLCA5OTc1LCA5OTgwLCA5OTg0LCA5OTg4LCA5OTkzLCA5OTk4LCAxMDAwNCwgMTAwMTIsIDEwMDIwLCAxMDAzMSwgCi0gICAgMTAwMzYsIDEwMDQ1LCAxMDA1NCwgMTAwNjEsIDEwMDY3LCAxMDA3MywgMTAwNzksIDEwMDg1LCAxMDA5MSwgMTAwOTcsIAotICAgIDEwMTAzLCAxMDEwOSwgMTAxMTUsIDEwMTIyLCAxMDEyOSwgMTAxMzYsIDEwMTQyLCAxMDE1MCwgMTAxNTksIDEwMTY1LCAKLSAgICAxMDE3MiwgMTAxNzksIDEwMTg0LCAxMDE4OSwgMTAxOTMsIDEwMjAwLCAxMDIwNywgMTAyMTYsIDEwMjI1LCAxMDIyOCwgCi0gICAgMTAyMzMsIDEwMjM4LCAwLCAxMDI0MywgMTAyNDcsIDEwMjUxLCAxMDI1NywgMTAyNjEsIDEwMjY1LCAxMDI3MSwgMTAyNzUsIAotICAgIDEwMjgzLCAxMDI4NywgMTAyOTEsIDEwMjk1LCAxMDI5OSwgMTAzMDMsIDEwMzA5LCAxMDMxMywgMTAzMTksIDEwMzIzLCAKLSAgICAxMDMyNywgMTAzMzEsIDEwMzM1LCAxMDMzOSwgMTAzNDQsIDEwMzQ3LCAxMDM1MSwgMTAzNTcsIDEwMzYxLCAxMDM2NSwgCi0gICAgMTAzNjksIDEwMzczLCAxMDM3NywgMTAzODMsIDEwMzg5LCAxMDM5NSwgMTAzOTksIDEwNDAzLCAxMDQwOCwgMTA0MTIsIAotICAgIDEwNDE2LCAxMDQyMSwgMTA0MjUsIDEwNDI5LCAxMDQzNiwgMTA0NDMsIDEwNDQ3LCAxMDQ1MSwgMTA0NTYsIDEwNDYwLCAKLSAgICAxMDQ2NCwgMTA0NjcsIDEwNDcyLCAxMDQ3NSwgMTA0NzgsIDEwNDgzLCAxMDQ4OCwgMTA0OTIsIDEwNDk2LCAxMDUwMiwgCi0gICAgMTA1MDgsIDEwNTExLCAwLCAwLCAxMDUxNCwgMTA1MjAsIDEwNTI2LCAxMDUzMiwgMTA1NDIsIDEwNTU0LCAxMDU2NiwgCi0gICAgMTA1ODMsIDEwNTk1LCAxMDYwNiwgMTA2MTQsIDEwNjIxLCAxMDYzMiwgMTA2NDcsIDEwNjU4LCAxMDY2NCwgMTA2NzMsIAotICAgIDEwNjgxLCAxMDY5MywgMTA3MDMsIDEwNzExLCAxMDcyMywgMTA3MzAsIDEwNzM4LCAxMDc1MCwgMTA3NTYsIDEwNzYyLCAKLSAgICAxMDc3MCwgMTA3NzgsIDEwNzg2LCAxMDc5MiwgMTA4MDIsIDEwODA5LCAxMDgxOSwgMTA4MjksIDEwODQyLCAxMDg1NiwgCi0gICAgMTA4NzAsIDEwODgwLCAxMDg5MSwgMTA5MDIsIDEwOTE1LCAxMDkyOCwgMTA5NDIsIDEwOTU0LCAxMDk2NiwgMTA5NzksIAotICAgIDEwOTkyLCAxMTAwNCwgMTEwMTcsIDExMDI2LCAxMTAzNCwgMTEwMzksIDExMDQ0LCAxMTA0OSwgMTEwNTQsIDExMDU5LCAKLSAgICAxMTA2NCwgMTEwNjksIDExMDc0LCAxMTA3OSwgMTEwODQsIDExMDg5LCAxMTA5NCwgMTEwOTksIDExMTA0LCAxMTEwOSwgCi0gICAgMTExMTQsIDExMTE5LCAxMTEyNCwgMTExMjksIDExMTM0LCAxMTEzOSwgMTExNDQsIDExMTQ5LCAxMTE1NCwgMTExNTksIAotICAgIDExMTY0LCAxMTE2OSwgMTExNzQsIDExMTc5LCAxMTE4NCwgMTExODksIDExMTk0LCAxMTE5OCwgMTEyMDMsIDExMjA4LCAKLSAgICAxMTIxMywgMTEyMTgsIDExMjIzLCAxMTIyNywgMTEyMzEsIDExMjM1LCAxMTIzOSwgMTEyNDMsIDExMjQ3LCAxMTI1MSwgCi0gICAgMTEyNTUsIDExMjU5LCAxMTI2MywgMTEyNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExMjcyLCAxMTI3NywgMTEyODEsIDExMjg1LCAxMTI4OSwgMTEyOTMsIDExMjk3LCAxMTMwMSwgMTEzMDUsIDExMzA5LCAKLSAgICAxMTMxMywgMTEzMTcsIDExMzIyLCAxMTMyNiwgMTEzMzAsIDExMzM0LCAxMTMzOSwgMTEzNDMsIDExMzQ4LCAxMTM1MywgCi0gICAgMTEzNTgsIDExMzYyLCAxMTM2NywgMTEzNzIsIDExMzc3LCAxMTM4MiwgMTEzODYsIDExMzkxLCAxMTM5NSwgMTE0MDAsIAotICAgIDExNDA1LCAxMTQwOSwgMTE0MTQsIDExNDIxLCAxMTQyNSwgMTE0MzAsIDExNDM0LCAxMTQzOCwgMTE0NDMsIDExNDQ3LCAKLSAgICAxMTQ1NCwgMTE0NjEsIDExNDY4LCAxMTQ3NCwgMTE0ODIsIDExNDkwLCAxMTQ5OSwgMTE1MDcsIDExNTE0LCAxMTUyMSwgCi0gICAgMTE1MjksIDExNTM1LCAxMTU0MSwgMTE1NDcsIDExNTUzLCAxMTU2MCwgMTE1NjUsIDExNTY5LCAxMTU3NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTE1NzgsIDExNTgzLCAxMTU4OCwgMTE1OTMsIDExNTk4LCAxMTYwMywgMTE2MDgsIDExNjEzLCAxMTYxOCwgCi0gICAgMTE2MjMsIDExNjI4LCAxMTYzMywgMTE2MzgsIDExNjQzLCAxMTY0OCwgMTE2NTMsIDExNjU4LCAxMTY2MywgMTE2NjgsIAotICAgIDExNjczLCAxMTY3OCwgMTE2ODMsIDExNjg4LCAxMTY5MywgMTE2OTgsIDExNzAzLCAxMTcwOCwgMTE3MTYsIDExNzIzLCAKLSAgICAxMTcyOSwgMTE3MzQsIDExNzQyLCAxMTc0OSwgMTE3NTUsIDExNzYyLCAxMTc2OCwgMTE3NzMsIDExNzgwLCAxMTc4NywgCi0gICAgMTE3OTMsIDExNzk4LCAxMTgwMywgMTE4MDksIDExODE0LCAxMTgxOSwgMTE4MjUsIDAsIDAsIDExODMwLCAxMTgzNiwgCi0gICAgMTE4NDIsIDExODQ4LCAxMTg1NCwgMTE4NjAsIDExODY2LCAxMTg3MSwgMTE4NzksIDExODg1LCAxMTg5MSwgMTE4OTcsIAotICAgIDExOTAzLCAxMTkwOSwgMTE5MTcsIDAsIDExOTIzLCAxMTkyOCwgMTE5MzMsIDExOTM4LCAxMTk0MywgMTE5NDgsIDExOTUzLCAKLSAgICAxMTk1OCwgMTE5NjMsIDExOTY4LCAxMTk3MywgMTE5NzgsIDExOTgzLCAxMTk4OCwgMTE5OTMsIDExOTk4LCAxMjAwMywgCi0gICAgMTIwMDgsIDEyMDEzLCAxMjAxOCwgMTIwMjMsIDEyMDI4LCAxMjAzMywgMTIwMzgsIDEyMDQzLCAxMjA0OCwgMTIwNTMsIAotICAgIDEyMDU4LCAwLCAwLCAxMjA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgODc5MiwgODgwMywgODgwOCwgODgxMiwgODgxNiwgODgyMCwgODgyMywgMCwgODgyNiwgODgzMywgODgzNywgODg0MywgCisgICAgODg0NywgODg1NCwgODg2MCwgODg2NywgODg3MywgODg3OSwgODg4MywgODg4NywgODg5MywgODg5NywgODkwMSwgODkwNSwgCisgICAgODkwOSwgODkxMywgODkxNywgODkyMSwgODkyNSwgODkyOSwgODkzMywgODkzNywgODk0MSwgODk0NSwgODk0OSwgODk1MywgCisgICAgODk1NywgODk2MSwgODk2OSwgODk3NywgODk4NywgODk5NiwgOTAwNSwgOTAwOCwgOTAxMiwgOTAxNiwgOTAyMCwgOTAyNCwgCisgICAgOTAyOCwgOTAzMiwgOTAzNiwgOTA0MCwgOTA0NSwgOTA0OSwgOTA1MiwgOTA1NSwgOTA1OCwgOTA2MSwgOTA2NCwgOTA2NywgCisgICAgOTA3MCwgOTA3MywgOTA3NywgOTA4MCwgOTA4MywgOTA4OCwgOTA5MywgOTA5OSwgOTEwMiwgOTEwOSwgOTExOCwgOTEyMywgCisgICAgOTEyOCwgOTEzNSwgOTE0MCwgOTE0NSwgOTE0OSwgOTE1MywgOTE1NywgOTE2MSwgOTE2NSwgOTE2OSwgOTE3MywgOTE3NywgCisgICAgOTE4MSwgOTE4NSwgOTE5MCwgOTE5NSwgOTIwMiwgOTIwOCwgOTIxNCwgOTIyMCwgOTIyNSwgOTIzMywgOTI0MSwgOTI0NiwgCisgICAgOTI1MiwgOTI1OCwgOTI2NCwgOTI3MCwgOTI3NCwgOTI3OCwgOTI4MiwgOTI4OSwgOTI5OSwgOTMwMywgOTMwNywgOTMxMSwgCisgICAgOTMxNywgOTMyNSwgOTMyOSwgOTMzMywgOTM0MCwgOTM0NCwgOTM0OCwgOTM1MiwgOTM1OSwgOTM2NiwgOTM3OCwgOTM4MiwgCisgICAgOTM4NiwgOTM5MCwgOTQwMCwgOTQwOSwgOTQxMywgOTQyMSwgOTQyOCwgOTQzNSwgOTQ0NCwgOTQ1NSwgOTQ2MywgOTQ2NywgCisgICAgOTQ3NiwgOTQ4NywgOTQ5NSwgOTUwOCwgOTUxNiwgOTUyNCwgOTUzMiwgOTU0MCwgOTU0NiwgOTU1NSwgOTU2MiwgOTU2NiwgCisgICAgOTU3NCwgOTU3OCwgOTU4NSwgOTU5MywgOTU5NywgOTYwMywgOTYxMCwgOTYxNywgOTYyMSwgOTYyOSwgOTYzMywgOTY0MCwgCisgICAgOTY0NCwgOTY1MiwgOTY1NiwgOTY2NCwgOTY3MiwgOTY3OSwgOTY4NywgOTY5NSwgOTcwMiwgOTcwOCwgOTcxMiwgOTcxOSwgCisgICAgOTcyNywgOTczMywgOTc0MCwgOTc0NywgOTc1MywgOTc2MiwgOTc3MCwgOTc3NywgOTc4MywgOTc4NywgOTc5MCwgOTc5NCwgCisgICAgOTgwMCwgOTgwOCwgOTgxMiwgOTgxOCwgOTgyNCwgOTgzMSwgOTgzOCwgOTg0MSwgOTg0OCwgOTg1MywgOTg2MSwgOTg2NiwgCisgICAgOTg3MCwgOTg4MywgOTg5NiwgOTkwMiwgOTkwOSwgOTkxNCwgOTkyMCwgOTkyNSwgOTkzMSwgOTk0MSwgOTk0OCwgOTk1NywgCisgICAgOTk2NywgOTk3MywgOTk3OCwgOTk4MywgOTk4NywgOTk5MSwgOTk5NiwgMTAwMDEsIDEwMDA3LCAxMDAxNSwgMTAwMjMsIAorICAgIDEwMDM0LCAxMDAzOSwgMTAwNDgsIDEwMDU3LCAxMDA2NCwgMTAwNzAsIDEwMDc2LCAxMDA4MiwgMTAwODgsIDEwMDk0LCAKKyAgICAxMDEwMCwgMTAxMDYsIDEwMTEyLCAxMDExOCwgMTAxMjUsIDEwMTMyLCAxMDEzOSwgMTAxNDUsIDEwMTUzLCAxMDE2MiwgCisgICAgMTAxNjgsIDEwMTc1LCAxMDE4MiwgMTAxODcsIDEwMTkyLCAxMDE5NiwgMTAyMDMsIDEwMjEwLCAxMDIxOSwgMTAyMjgsIAorICAgIDEwMjMxLCAxMDIzNiwgMTAyNDEsIDAsIDEwMjQ2LCAxMDI1MCwgMTAyNTQsIDEwMjYwLCAxMDI2NCwgMTAyNjgsIDEwMjc0LCAKKyAgICAxMDI3OCwgMTAyODYsIDEwMjkwLCAxMDI5NCwgMTAyOTgsIDEwMzAyLCAxMDMwNiwgMTAzMTIsIDEwMzE2LCAxMDMyMiwgCisgICAgMTAzMjYsIDEwMzMwLCAxMDMzNCwgMTAzMzgsIDEwMzQyLCAxMDM0NywgMTAzNTAsIDEwMzU0LCAxMDM2MCwgMTAzNjQsIAorICAgIDEwMzY4LCAxMDM3MiwgMTAzNzYsIDEwMzgwLCAxMDM4NiwgMTAzOTIsIDEwMzk4LCAxMDQwMiwgMTA0MDYsIDEwNDExLCAKKyAgICAxMDQxNSwgMTA0MTksIDEwNDI0LCAxMDQyOCwgMTA0MzIsIDEwNDM5LCAxMDQ0NiwgMTA0NTAsIDEwNDU0LCAxMDQ1OSwgCisgICAgMTA0NjMsIDEwNDY3LCAxMDQ3MCwgMTA0NzUsIDEwNDc4LCAxMDQ4MSwgMTA0ODYsIDEwNDkxLCAxMDQ5NSwgMTA0OTksIAorICAgIDEwNTA1LCAxMDUxMSwgMTA1MTQsIDAsIDAsIDEwNTE3LCAxMDUyMywgMTA1MjksIDEwNTM1LCAxMDU0NSwgMTA1NTcsIAorICAgIDEwNTY5LCAxMDU4NiwgMTA1OTgsIDEwNjA5LCAxMDYxNywgMTA2MjQsIDEwNjM1LCAxMDY1MCwgMTA2NjEsIDEwNjY3LCAKKyAgICAxMDY3NiwgMTA2ODQsIDEwNjk2LCAxMDcwNiwgMTA3MTQsIDEwNzI2LCAxMDczMywgMTA3NDEsIDEwNzUzLCAxMDc1OSwgCisgICAgMTA3NjUsIDEwNzczLCAxMDc4MSwgMTA3ODksIDEwNzk1LCAxMDgwNSwgMTA4MTIsIDEwODIyLCAxMDgzMiwgMTA4NDUsIAorICAgIDEwODU5LCAxMDg3MywgMTA4ODMsIDEwODk0LCAxMDkwNSwgMTA5MTgsIDEwOTMxLCAxMDk0NSwgMTA5NTcsIDEwOTY5LCAKKyAgICAxMDk4MiwgMTA5OTUsIDExMDA3LCAxMTAyMCwgMTEwMjksIDExMDM3LCAxMTA0MiwgMTEwNDcsIDExMDUyLCAxMTA1NywgCisgICAgMTEwNjIsIDExMDY3LCAxMTA3MiwgMTEwNzcsIDExMDgyLCAxMTA4NywgMTEwOTIsIDExMDk3LCAxMTEwMiwgMTExMDcsIAorICAgIDExMTEyLCAxMTExNywgMTExMjIsIDExMTI3LCAxMTEzMiwgMTExMzcsIDExMTQyLCAxMTE0NywgMTExNTIsIDExMTU3LCAKKyAgICAxMTE2MiwgMTExNjcsIDExMTcyLCAxMTE3NywgMTExODIsIDExMTg3LCAxMTE5MiwgMTExOTcsIDExMjAxLCAxMTIwNiwgCisgICAgMTEyMTEsIDExMjE2LCAxMTIyMSwgMTEyMjYsIDExMjMwLCAxMTIzNCwgMTEyMzgsIDExMjQyLCAxMTI0NiwgMTEyNTAsIAorICAgIDExMjU0LCAxMTI1OCwgMTEyNjIsIDExMjY2LCAxMTI3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTEyNzUsIDExMjgwLCAxMTI4NCwgMTEyODgsIDExMjkyLCAxMTI5NiwgMTEzMDAsIDExMzA0LCAxMTMwOCwgMTEzMTIsIAorICAgIDExMzE2LCAxMTMyMCwgMTEzMjUsIDExMzI5LCAxMTMzMywgMTEzMzcsIDExMzQyLCAxMTM0NiwgMTEzNTEsIDExMzU2LCAKKyAgICAxMTM2MSwgMTEzNjUsIDExMzcwLCAxMTM3NSwgMTEzODAsIDExMzg1LCAxMTM4OSwgMTEzOTQsIDExMzk4LCAxMTQwMywgCisgICAgMTE0MDgsIDExNDEyLCAxMTQxNywgMTE0MjQsIDExNDI4LCAxMTQzMywgMTE0MzcsIDExNDQxLCAxMTQ0NiwgMTE0NTAsIAorICAgIDExNDU3LCAxMTQ2NCwgMTE0NzEsIDExNDc3LCAxMTQ4NSwgMTE0OTMsIDExNTAyLCAxMTUxMCwgMTE1MTcsIDExNTI0LCAKKyAgICAxMTUzMiwgMTE1MzgsIDExNTQ0LCAxMTU1MCwgMTE1NTYsIDExNTYzLCAxMTU2OCwgMTE1NzIsIDExNTc3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMTU4MSwgMTE1ODYsIDExNTkxLCAxMTU5NiwgMTE2MDEsIDExNjA2LCAxMTYxMSwgMTE2MTYsIDExNjIxLCAKKyAgICAxMTYyNiwgMTE2MzEsIDExNjM2LCAxMTY0MSwgMTE2NDYsIDExNjUxLCAxMTY1NiwgMTE2NjEsIDExNjY2LCAxMTY3MSwgCisgICAgMTE2NzYsIDExNjgxLCAxMTY4NiwgMTE2OTEsIDExNjk2LCAxMTcwMSwgMTE3MDYsIDExNzExLCAxMTcxOSwgMTE3MjYsIAorICAgIDExNzMyLCAxMTczNywgMTE3NDUsIDExNzUyLCAxMTc1OCwgMTE3NjUsIDExNzcxLCAxMTc3NiwgMTE3ODMsIDExNzkwLCAKKyAgICAxMTc5NiwgMTE4MDEsIDExODA2LCAxMTgxMiwgMTE4MTcsIDExODIyLCAxMTgyOCwgMCwgMCwgMTE4MzMsIDExODM5LCAKKyAgICAxMTg0NSwgMTE4NTEsIDExODU3LCAxMTg2MywgMTE4NjksIDExODc0LCAxMTg4MiwgMTE4ODgsIDExODk0LCAxMTkwMCwgCisgICAgMTE5MDYsIDExOTEyLCAxMTkyMCwgMCwgMTE5MjYsIDExOTMxLCAxMTkzNiwgMTE5NDEsIDExOTQ2LCAxMTk1MSwgMTE5NTYsIAorICAgIDExOTYxLCAxMTk2NiwgMTE5NzEsIDExOTc2LCAxMTk4MSwgMTE5ODYsIDExOTkxLCAxMTk5NiwgMTIwMDEsIDEyMDA2LCAKKyAgICAxMjAxMSwgMTIwMTYsIDEyMDIxLCAxMjAyNiwgMTIwMzEsIDEyMDM2LCAxMjA0MSwgMTIwNDYsIDEyMDUxLCAxMjA1NiwgCisgICAgMTIwNjEsIDAsIDAsIDEyMDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjA2NywgMCwgMTIwNzYsIDEyMDgzLCAxMjA5MSwgMTIxMDMsIDEyMTEwLCAxMjExNywgMTIxMjQsIDEyMTM1LCAxMjE0NiwgCi0gICAgMTIxNTMsIDEyMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjA3MCwgMCwgMTIwNzksIDEyMDg2LCAxMjA5NCwgMTIxMDYsIDEyMTEzLCAxMjEyMCwgMTIxMjcsIDEyMTM4LCAxMjE0OSwgCisgICAgMTIxNTYsIDEyMTY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE2NywgMTIxNzIsIDEyMTc3LCAxMjE4MiwgMTIxODcsIAotICAgIDEyMTkyLCAxMjE5NywgMTIyMDIsIDEyMjA3LCAxMjIxMiwgMTIyMTcsIDEyMjIyLCAxMjIyNywgMTIyMzEsIDEyMjM1LCAKLSAgICAxMjIzOSwgMTIyNDQsIDEyMjUwLCAxMjI1NiwgMTIyNjIsIDEyMjY3LCAxMjI3MiwgMTIyNzcsIDEyMjgyLCAxMjI4OCwgCi0gICAgMTIyOTcsIDEyMzA1LCAwLCAxMjMxMSwgMTIzMTcsIDEyMzIxLCAxMjMyNSwgMTIzMjksIDEyMzM0LCAxMjMzNywgMTIzNDEsIAotICAgIDEyMzQ0LCAxMjM0OCwgMTIzNTEsIDEyMzU1LCAxMjM1OSwgMTIzNjMsIDEyMzY4LCAxMjM3MywgMTIzNzYsIDEyMzgwLCAKLSAgICAxMjM4NSwgMTIzOTAsIDEyMzkzLCAxMjM5NywgMTI0MDAsIDEyNDA0LCAxMjQwOCwgMTI0MTIsIDEyNDE2LCAxMjQyMCwgCi0gICAgMTI0MjQsIDEyNDI4LCAxMjQzMiwgMTI0MzYsIDEyNDQwLCAxMjQ0NCwgMTI0NDgsIDEyNDUyLCAxMjQ1NiwgMTI0NjAsIAotICAgIDEyNDY0LCAxMjQ2OCwgMTI0NzIsIDEyNDc1LCAxMjQ3OSwgMTI0ODIsIDEyNDg2LCAxMjQ5MCwgMTI0OTQsIDEyNDk3LCAKLSAgICAxMjUwMCwgMTI1MDMsIDEyNTA3LCAxMjUxMSwgMTI1MTUsIDEyNTE5LCAxMjUyMywgMTI1MjcsIDEyNTMxLCAxMjUzNCwgCi0gICAgMTI1MzcsIDEyNTQyLCAxMjU0NywgMTI1NTEsIDEyNTU1LCAxMjU2MCwgMTI1NjQsIDEyNTY5LCAxMjU3MywgMTI1NzgsIAotICAgIDEyNTgzLCAxMjU4OSwgMTI1OTUsIDEyNjAxLCAxMjYwNSwgMTI2MTAsIDEyNjE2LCAxMjYyMiwgMTI2MjYsIDEyNjMxLCAKLSAgICAxMjYzNSwgMTI2NDEsIDEyNjQ2LCAxMjY0OSwgMTI2NTUsIDEyNjYxLCAxMjY2NiwgMTI2NzEsIDEyNjc4LCAxMjY4MywgCi0gICAgMTI2ODgsIDEyNjkyLCAxMjY5NiwgMTI3MDAsIDEyNzA0LCAxMjcwOCwgMTI3MTIsIDEyNzE2LCAxMjcyMCwgMTI3MjUsIAotICAgIDEyNzMwLCAxMjczNSwgMTI3NDEsIDEyNzQ0LCAxMjc0OCwgMTI3NTIsIDEyNzU1LCAxMjc1OCwgMTI3NjEsIDEyNzY0LCAKLSAgICAxMjc2NywgMTI3NzAsIDEyNzczLCAxMjc3NiwgMTI3NzksIDEyNzgzLCAxMjc5MCwgMTI3OTUsIDEyNzk5LCAxMjgwMywgCi0gICAgMTI4MDcsIDEyODExLCAwLCAxMjgxNSwgMTI4MTksIDEyODIzLCAxMjgyNywgMTI4MzEsIDEyODM3LCAxMjg0MSwgMCwgCi0gICAgMTI4NDUsIDEyODQ5LCAxMjg1MywgMCwgMTI4NTcsIDEyODYwLCAxMjg2NCwgMTI4NjcsIDEyODcxLCAxMjg3NCwgMTI4NzgsIAotICAgIDEyODgyLCAwLCAwLCAxMjg4NiwgMTI4ODksIDAsIDAsIDEyODkzLCAxMjg5NiwgMTI5MDAsIDEyOTAzLCAxMjkwNywgCi0gICAgMTI5MTEsIDEyOTE1LCAxMjkxOSwgMTI5MjMsIDEyOTI3LCAxMjkzMSwgMTI5MzUsIDEyOTM5LCAxMjk0MywgMTI5NDcsIAotICAgIDEyOTUxLCAxMjk1NSwgMTI5NTksIDEyOTYzLCAxMjk2NywgMTI5NzEsIDEyOTc1LCAwLCAxMjk3OCwgMTI5ODEsIDEyOTg1LCAKLSAgICAxMjk4OSwgMTI5OTMsIDEyOTk2LCAxMjk5OSwgMCwgMTMwMDIsIDAsIDAsIDAsIDEzMDA2LCAxMzAxMCwgMTMwMTQsIAotICAgIDEzMDE3LCAwLCAwLCAxMzAyMCwgMTMwMjQsIDEzMDI4LCAxMzAzMywgMTMwMzcsIDEzMDQyLCAxMzA0NiwgMTMwNTEsIAotICAgIDEzMDU2LCAwLCAwLCAxMzA2MiwgMTMwNjYsIDAsIDAsIDEzMDcxLCAxMzA3NSwgMTMwODAsIDEzMDg0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMzA5MCwgMCwgMCwgMCwgMCwgMTMwOTYsIDEzMTAwLCAwLCAxMzEwNCwgMTMxMDgsIDEzMTEzLCAKLSAgICAxMzExOCwgMTMxMjMsIDAsIDAsIDEzMTI5LCAxMzEzMywgMTMxMzYsIDEzMTM5LCAxMzE0MiwgMTMxNDUsIDEzMTQ4LCAKLSAgICAxMzE1MSwgMTMxNTQsIDEzMTU3LCAxMzE2MCwgMTMxNjksIDEzMTc4LCAxMzE4MiwgMTMxODYsIDEzMTkyLCAxMzE5OCwgCi0gICAgMTMyMDQsIDEzMjEwLCAxMzIyNCwgMTMyMzEsIDEzMjM0LCAwLCAwLCAwLCAwLCAwLCAxMzIzOCwgMTMyNDQsIDEzMjQ4LCAwLCAKLSAgICAxMzI1MiwgMTMyNTUsIDEzMjU5LCAxMzI2MiwgMTMyNjYsIDEzMjY5LCAwLCAwLCAwLCAwLCAxMzI3MywgMTMyNzcsIDAsIDAsIAotICAgIDEzMjgxLCAxMzI4NSwgMTMyODksIDEzMjkyLCAxMzI5NiwgMTMzMDAsIDEzMzA0LCAxMzMwOCwgMTMzMTIsIDEzMzE2LCAKLSAgICAxMzMyMCwgMTMzMjQsIDEzMzI4LCAxMzMzMiwgMTMzMzYsIDEzMzQwLCAxMzM0NCwgMTMzNDgsIDEzMzUyLCAxMzM1NiwgCi0gICAgMTMzNjAsIDEzMzY0LCAwLCAxMzM2NywgMTMzNzAsIDEzMzc0LCAxMzM3OCwgMTMzODIsIDEzMzg1LCAxMzM4OCwgMCwgCi0gICAgMTMzOTEsIDEzMzk1LCAwLCAxMzM5OSwgMTM0MDMsIDAsIDEzNDA3LCAxMzQxMCwgMCwgMCwgMTM0MTMsIDAsIDEzNDE3LCAKLSAgICAxMzQyMiwgMTM0MjYsIDEzNDMxLCAxMzQzNSwgMCwgMCwgMCwgMCwgMTM0NDAsIDEzNDQ1LCAwLCAwLCAxMzQ1MCwgMTM0NTUsIAotICAgIDEzNDYwLCAwLCAwLCAwLCAxMzQ2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0NjgsIDEzNDcyLCAxMzQ3NiwgMTM0ODAsIAotICAgIDAsIDEzNDg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ4OCwgMTM0OTIsIDEzNDk1LCAxMzQ5OCwgMTM1MDEsIDEzNTA0LCAKLSAgICAxMzUwNywgMTM1MTAsIDEzNTEzLCAxMzUxNiwgMTM1MTksIDEzNTIyLCAxMzUyNSwgMTM1MjgsIDEzNTMxLCAxMzUzNiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1NDAsIDEzNTQ0LCAxMzU0OCwgMCwgMTM1NTIsIDEzNTU1LCAKLSAgICAxMzU1OSwgMTM1NjIsIDEzNTY2LCAxMzU2OSwgMTM1NzMsIDEzNTc3LCAxMzU4MSwgMCwgMTM1ODYsIDEzNTg5LCAxMzU5MywgCi0gICAgMCwgMTM1OTgsIDEzNjAxLCAxMzYwNSwgMTM2MDgsIDEzNjEyLCAxMzYxNiwgMTM2MjAsIDEzNjI0LCAxMzYyOCwgMTM2MzIsIAotICAgIDEzNjM2LCAxMzY0MCwgMTM2NDQsIDEzNjQ4LCAxMzY1MiwgMTM2NTYsIDEzNjYwLCAxMzY2NCwgMTM2NjgsIDEzNjcyLCAKLSAgICAxMzY3NiwgMTM2ODAsIDAsIDEzNjgzLCAxMzY4NiwgMTM2OTAsIDEzNjk0LCAxMzY5OCwgMTM3MDEsIDEzNzA0LCAwLCAKLSAgICAxMzcwNywgMTM3MTEsIDAsIDEzNzE1LCAxMzcxOSwgMTM3MjMsIDEzNzI3LCAxMzczMCwgMCwgMCwgMTM3MzMsIDEzNzM3LCAKLSAgICAxMzc0MSwgMTM3NDYsIDEzNzUwLCAxMzc1NSwgMTM3NTksIDEzNzY0LCAxMzc2OSwgMTM3NzUsIDAsIDEzNzgxLCAxMzc4NSwgCi0gICAgMTM3OTAsIDAsIDEzNzk2LCAxMzgwMCwgMTM4MDUsIDAsIDAsIDEzODA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMzgxMiwgMTM4MTcsIDEzODIyLCAxMzgyNywgMCwgMCwgMTM4MzMsIDEzODM3LCAxMzg0MCwgCi0gICAgMTM4NDMsIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjEsIDEzODY0LCAxMzg2OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM4NzIsIDEzODc2LCAxMzg4MCwgMCwgMTM4ODQsIDEzODg3LCAKLSAgICAxMzg5MSwgMTM4OTQsIDEzODk4LCAxMzkwMSwgMTM5MDUsIDEzOTA5LCAwLCAwLCAxMzkxMywgMTM5MTYsIDAsIDAsIAotICAgIDEzOTIwLCAxMzkyMywgMTM5MjcsIDEzOTMwLCAxMzkzNCwgMTM5MzgsIDEzOTQyLCAxMzk0NiwgMTM5NTAsIDEzOTU0LCAKLSAgICAxMzk1OCwgMTM5NjIsIDEzOTY2LCAxMzk3MCwgMTM5NzQsIDEzOTc4LCAxMzk4MiwgMTM5ODYsIDEzOTkwLCAxMzk5NCwgCi0gICAgMTM5OTgsIDE0MDAyLCAwLCAxNDAwNSwgMTQwMDgsIDE0MDEyLCAxNDAxNiwgMTQwMjAsIDE0MDIzLCAxNDAyNiwgMCwgCi0gICAgMTQwMjksIDE0MDMzLCAwLCAxNDAzNywgMTQwNDEsIDE0MDQ1LCAxNDA0OSwgMTQwNTIsIDAsIDAsIDE0MDU1LCAxNDA1OSwgCi0gICAgMTQwNjMsIDE0MDY4LCAxNDA3MiwgMTQwNzcsIDE0MDgxLCAxNDA4NiwgMTQwOTEsIDAsIDAsIDE0MDk3LCAxNDEwMSwgMCwgCi0gICAgMCwgMTQxMDYsIDE0MTEwLCAxNDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQxMTksIDE0MTI1LCAwLCAwLCAwLCAwLCAKLSAgICAxNDEzMSwgMTQxMzUsIDAsIDE0MTM5LCAxNDE0MywgMTQxNDgsIDE0MTUzLCAxNDE1OCwgMCwgMCwgMTQxNjQsIDE0MTY4LCAKLSAgICAxNDE3MSwgMTQxNzQsIDE0MTc3LCAxNDE4MCwgMTQxODMsIDE0MTg2LCAxNDE4OSwgMTQxOTIsIDE0MTk1LCAxNDE5OCwgCi0gICAgMTQyMDIsIDE0MjA4LCAxNDIxNCwgMTQyMjAsIDE0MjI2LCAxNDIzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTQyMzgsIDE0MjQyLCAwLCAxNDI0NiwgMTQyNDksIDE0MjUzLCAxNDI1NiwgMTQyNjAsIDE0MjYzLCAwLCAwLCAwLCAKLSAgICAxNDI2NywgMTQyNzAsIDE0Mjc0LCAwLCAxNDI3OCwgMTQyODEsIDE0Mjg1LCAxNDI4OSwgMCwgMCwgMCwgMTQyOTIsIAotICAgIDE0Mjk2LCAwLCAxNDMwMCwgMCwgMTQzMDQsIDE0MzA4LCAwLCAwLCAwLCAxNDMxMiwgMTQzMTYsIDAsIDAsIDAsIDE0MzIwLCAKLSAgICAxNDMyMywgMTQzMjcsIDAsIDAsIDAsIDE0MzMwLCAxNDMzMywgMTQzMzYsIDE0MzM5LCAxNDM0MywgMTQzNDcsIDE0MzUxLCAKLSAgICAxNDM1NSwgMTQzNTksIDE0MzYzLCAxNDM2NywgMTQzNzAsIDAsIDAsIDAsIDAsIDE0MzczLCAxNDM3OCwgMTQzODIsIAotICAgIDE0Mzg3LCAxNDM5MSwgMCwgMCwgMCwgMTQzOTYsIDE0NDAwLCAxNDQwNSwgMCwgMTQ0MTAsIDE0NDE0LCAxNDQxOSwgCi0gICAgMTQ0MjQsIDAsIDAsIDE0NDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTQ0MzcsIDE0NDQxLCAxNDQ0NCwgMTQ0NDcsIDE0NDUwLCAxNDQ1MywgMTQ0NTYsIDE0NDU5LCAKLSAgICAxNDQ2MiwgMTQ0NjUsIDE0NDY4LCAxNDQ3MiwgMTQ0NzcsIDE0NDgyLCAxNDQ4NiwgMTQ0OTAsIDE0NDk0LCAxNDQ5OCwgCi0gICAgMTQ1MDIsIDE0NTA3LCAxNDUxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ1MTQsIDE0NTE4LCAxNDUyMiwgMCwgMTQ1MjYsIAotICAgIDE0NTI5LCAxNDUzMywgMTQ1MzYsIDE0NTQwLCAxNDU0MywgMTQ1NDcsIDE0NTUxLCAwLCAxNDU1NSwgMTQ1NTgsIDE0NTYyLCAKLSAgICAwLCAxNDU2NiwgMTQ1NjksIDE0NTczLCAxNDU3NywgMTQ1ODAsIDE0NTg0LCAxNDU4OCwgMTQ1OTIsIDE0NTk2LCAxNDYwMCwgCi0gICAgMTQ2MDQsIDE0NjA4LCAxNDYxMiwgMTQ2MTYsIDE0NjIwLCAxNDYyNCwgMTQ2MjgsIDE0NjMyLCAxNDYzNiwgMTQ2NDAsIAotICAgIDE0NjQ0LCAxNDY0OCwgMTQ2NTIsIDAsIDE0NjU1LCAxNDY1OCwgMTQ2NjIsIDE0NjY2LCAxNDY3MCwgMTQ2NzMsIDE0Njc2LCAKLSAgICAxNDY3OSwgMTQ2ODMsIDE0Njg3LCAwLCAxNDY5MSwgMTQ2OTUsIDE0Njk5LCAxNDcwMywgMTQ3MDYsIDAsIDAsIDAsIAotICAgIDE0NzA5LCAxNDcxMywgMTQ3MTgsIDE0NzIyLCAxNDcyNywgMTQ3MzEsIDE0NzM2LCAxNDc0MSwgMCwgMTQ3NDcsIDE0NzUxLCAKLSAgICAxNDc1NiwgMCwgMTQ3NjEsIDE0NzY1LCAxNDc3MCwgMTQ3NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0Nzc5LCAxNDc4MywgCi0gICAgMCwgMTQ3ODksIDE0NzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc5NywgMTQ4MDIsIDE0ODA3LCAxNDgxMiwgMCwgMCwgCi0gICAgMTQ4MTgsIDE0ODIyLCAxNDgyNSwgMTQ4MjgsIDE0ODMxLCAxNDgzNCwgMTQ4MzcsIDE0ODQwLCAxNDg0MywgMTQ4NDYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODQ5LCAxNDg2MiwgMTQ4NzQsIDE0ODg2LCAxNDg5OCwgMTQ5MTAsIDE0OTIyLCAKLSAgICAxNDkzNCwgMCwgMCwgMTQ5MzgsIDE0OTQyLCAwLCAxNDk0NiwgMTQ5NDksIDE0OTUzLCAxNDk1NiwgMTQ5NjAsIDE0OTYzLCAKLSAgICAxNDk2NywgMTQ5NzEsIDAsIDE0OTc1LCAxNDk3OCwgMTQ5ODIsIDAsIDE0OTg2LCAxNDk4OSwgMTQ5OTMsIDE0OTk3LCAKLSAgICAxNTAwMCwgMTUwMDQsIDE1MDA4LCAxNTAxMiwgMTUwMTYsIDE1MDIwLCAxNTAyNCwgMTUwMjgsIDE1MDMyLCAxNTAzNiwgCi0gICAgMTUwNDAsIDE1MDQ0LCAxNTA0OCwgMTUwNTIsIDE1MDU2LCAxNTA2MCwgMTUwNjQsIDE1MDY4LCAxNTA3MiwgMCwgMTUwNzUsIAotICAgIDE1MDc4LCAxNTA4MiwgMTUwODYsIDE1MDkwLCAxNTA5MywgMTUwOTYsIDE1MDk5LCAxNTEwMywgMTUxMDcsIDAsIDE1MTExLCAKLSAgICAxNTExNSwgMTUxMTksIDE1MTIzLCAxNTEyNiwgMCwgMCwgMTUxMjksIDE1MTMzLCAxNTEzNywgMTUxNDIsIDE1MTQ2LCAKLSAgICAxNTE1MSwgMTUxNTUsIDE1MTYwLCAxNTE2NSwgMCwgMTUxNzEsIDE1MTc1LCAxNTE4MCwgMCwgMTUxODUsIDE1MTg5LCAKLSAgICAxNTE5NCwgMTUxOTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MjAzLCAxNTIwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTUyMTMsIDAsIDE1MjE3LCAxNTIyMiwgMTUyMjcsIDE1MjMyLCAwLCAwLCAxNTIzOCwgMTUyNDIsIDE1MjQ1LCAxNTI0OCwgCi0gICAgMTUyNTEsIDE1MjU0LCAxNTI1NywgMTUyNjAsIDE1MjYzLCAxNTI2NiwgMCwgMTUyNjksIDE1MjczLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTI3NywgMTUyODEsIDAsIDE1Mjg1LCAxNTI4OCwgMTUyOTIsIAotICAgIDE1Mjk1LCAxNTI5OSwgMTUzMDIsIDE1MzA2LCAxNTMxMCwgMCwgMTUzMTQsIDE1MzE3LCAxNTMyMSwgMCwgMTUzMjUsIAotICAgIDE1MzI4LCAxNTMzMiwgMTUzMzYsIDE1MzM5LCAxNTM0MywgMTUzNDcsIDE1MzUxLCAxNTM1NSwgMTUzNTksIDE1MzYzLCAKLSAgICAxNTM2NywgMTUzNzEsIDE1Mzc1LCAxNTM3OSwgMTUzODMsIDE1Mzg3LCAxNTM5MSwgMTUzOTUsIDE1Mzk5LCAxNTQwMywgCi0gICAgMTU0MDcsIDE1NDExLCAxNTQxNCwgMTU0MTgsIDE1NDIxLCAxNTQyNSwgMTU0MjksIDE1NDMzLCAxNTQzNiwgMTU0MzksIAotICAgIDE1NDQyLCAxNTQ0NiwgMTU0NTAsIDE1NDU0LCAxNTQ1OCwgMTU0NjIsIDE1NDY2LCAxNTQ3MCwgMTU0NzMsIDE1NDc2LCAwLCAKLSAgICAwLCAxNTQ4MCwgMTU0ODQsIDE1NDg5LCAxNTQ5MywgMTU0OTgsIDE1NTAyLCAxNTUwNywgMTU1MTIsIDAsIDE1NTE4LCAKLSAgICAxNTUyMiwgMTU1MjcsIDAsIDE1NTMyLCAxNTUzNiwgMTU1NDEsIDE1NTQ2LCAxNTU1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTU1NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NTYxLCAxNTU2NiwgMTU1NzEsIDE1NTc2LCAwLCAwLCAKLSAgICAxNTU4MiwgMTU1ODYsIDE1NTg5LCAxNTU5MiwgMTU1OTUsIDE1NTk4LCAxNTYwMSwgMTU2MDQsIDE1NjA3LCAxNTYxMCwgCi0gICAgMTU2MTMsIDE1NjE3LCAxNTYyMiwgMTU2MjcsIDE1NjMzLCAxNTYzOSwgMCwgMCwgMCwgMTU2NDUsIDE1NjQ5LCAxNTY1NSwgCi0gICAgMTU2NjEsIDE1NjY3LCAxNTY3MiwgMTU2NzgsIDAsIDAsIDE1Njg0LCAxNTY4OCwgMCwgMTU2OTIsIDE1Njk2LCAxNTcwMCwgCi0gICAgMTU3MDQsIDE1NzA4LCAxNTcxMiwgMTU3MTYsIDE1NzIwLCAxNTcyNCwgMTU3MjgsIDE1NzMyLCAxNTczNiwgMTU3NDAsIAotICAgIDE1NzQ0LCAxNTc0OCwgMTU3NTIsIDE1NzU2LCAxNTc2MCwgMCwgMCwgMCwgMTU3NjQsIDE1NzcwLCAxNTc3NiwgMTU3ODIsIAotICAgIDE1Nzg4LCAxNTc5NCwgMTU4MDAsIDE1ODA2LCAxNTgxMiwgMTU4MTgsIDE1ODI0LCAxNTgzMCwgMTU4MzgsIDE1ODQ0LCAKLSAgICAxNTg1MCwgMTU4NTYsIDE1ODYyLCAxNTg2OCwgMTU4NzQsIDE1ODgwLCAxNTg4NiwgMTU4OTIsIDE1ODk4LCAxNTkwNCwgMCwgCi0gICAgMTU5MTAsIDE1OTE2LCAxNTkyMiwgMTU5MjgsIDE1OTM0LCAxNTk0MCwgMTU5NDQsIDE1OTUwLCAxNTk1NCwgMCwgMTU5NTgsIAotICAgIDAsIDAsIDE1OTY0LCAxNTk2OCwgMTU5NzQsIDE1OTgwLCAxNTk4NiwgMTU5OTAsIDE1OTk2LCAwLCAwLCAwLCAxNjAwMCwgMCwgCi0gICAgMCwgMCwgMCwgMTYwMDQsIDE2MDA5LCAxNjAxNiwgMTYwMjMsIDE2MDMwLCAxNjAzNywgMCwgMTYwNDQsIDAsIDE2MDUxLCAKLSAgICAxNjA1NiwgMTYwNjEsIDE2MDY4LCAxNjA3NSwgMTYwODQsIDE2MDk1LCAxNjEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYxMDksIDE2MTE2LCAxNjEyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTYxMjgsIDE2MTM0LCAxNjE0MCwgMTYxNDYsIDE2MTUyLCAxNjE1OCwgMTYxNjQsIDE2MTcwLCAKLSAgICAxNjE3NiwgMTYxODIsIDE2MTg4LCAxNjE5NCwgMTYyMDAsIDE2MjA2LCAxNjIxMiwgMTYyMTgsIDE2MjI0LCAxNjIzMCwgCi0gICAgMTYyMzYsIDE2MjQyLCAxNjI0OCwgMTYyNTQsIDE2MjYwLCAxNjI2NiwgMTYyNzIsIDE2Mjc4LCAxNjI4NCwgMTYyOTAsIAotICAgIDE2Mjk2LCAxNjMwMiwgMTYzMDgsIDE2MzE0LCAxNjMyMCwgMTYzMjUsIDE2MzMxLCAxNjMzNywgMTYzNDEsIDE2MzQ3LCAKLSAgICAxNjM1MSwgMTYzNTcsIDE2MzYzLCAxNjM2OSwgMTYzNzUsIDE2MzgxLCAxNjM4NywgMTYzOTIsIDE2Mzk4LCAxNjQwMiwgCi0gICAgMTY0MDcsIDE2NDEzLCAxNjQxOSwgMTY0MjUsIDE2NDMwLCAxNjQzNiwgMTY0NDIsIDE2NDQ4LCAxNjQ1MywgMTY0NTksIDAsIAotICAgIDAsIDAsIDAsIDE2NDYzLCAxNjQ2OSwgMTY0NzQsIDE2NDgwLCAxNjQ4NSwgMTY0OTMsIDE2NTAxLCAxNjUwNSwgMTY1MDksIAotICAgIDE2NTEzLCAxNjUxOSwgMTY1MjUsIDE2NTMxLCAxNjUzNywgMTY1NDEsIDE2NTQ1LCAxNjU0OSwgMTY1NTMsIDE2NTU3LCAKLSAgICAxNjU2MCwgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4OCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNzAsIDEyMTc1LCAxMjE4MCwgMTIxODUsIDEyMTkwLCAKKyAgICAxMjE5NSwgMTIyMDAsIDEyMjA1LCAxMjIxMCwgMTIyMTUsIDEyMjIwLCAxMjIyNSwgMTIyMzAsIDEyMjM0LCAxMjIzOCwgCisgICAgMTIyNDIsIDEyMjQ3LCAxMjI1MywgMTIyNTksIDEyMjY1LCAxMjI3MCwgMTIyNzUsIDEyMjgwLCAxMjI4NSwgMTIyOTEsIAorICAgIDEyMzAwLCAxMjMwOCwgMCwgMTIzMTQsIDEyMzIwLCAxMjMyNCwgMTIzMjgsIDEyMzMyLCAxMjMzNywgMTIzNDAsIDEyMzQ0LCAKKyAgICAxMjM0NywgMTIzNTEsIDEyMzU0LCAxMjM1OCwgMTIzNjIsIDEyMzY2LCAxMjM3MSwgMTIzNzYsIDEyMzc5LCAxMjM4MywgCisgICAgMTIzODgsIDEyMzkzLCAxMjM5NiwgMTI0MDAsIDEyNDAzLCAxMjQwNywgMTI0MTEsIDEyNDE1LCAxMjQxOSwgMTI0MjMsIAorICAgIDEyNDI3LCAxMjQzMSwgMTI0MzUsIDEyNDM5LCAxMjQ0MywgMTI0NDcsIDEyNDUxLCAxMjQ1NSwgMTI0NTksIDEyNDYzLCAKKyAgICAxMjQ2NywgMTI0NzEsIDEyNDc1LCAxMjQ3OCwgMTI0ODIsIDEyNDg1LCAxMjQ4OSwgMTI0OTMsIDEyNDk3LCAxMjUwMCwgCisgICAgMTI1MDMsIDEyNTA2LCAxMjUxMCwgMTI1MTQsIDEyNTE4LCAxMjUyMiwgMTI1MjYsIDEyNTMwLCAxMjUzNCwgMTI1MzcsIAorICAgIDEyNTQwLCAxMjU0NSwgMTI1NTAsIDEyNTU0LCAxMjU1OCwgMTI1NjMsIDEyNTY3LCAxMjU3MiwgMTI1NzYsIDEyNTgxLCAKKyAgICAxMjU4NiwgMTI1OTIsIDEyNTk4LCAxMjYwNCwgMTI2MDgsIDEyNjEzLCAxMjYxOSwgMTI2MjUsIDEyNjI5LCAxMjYzNCwgCisgICAgMTI2MzgsIDEyNjQ0LCAxMjY0OSwgMTI2NTIsIDEyNjU4LCAxMjY2NCwgMTI2NjksIDEyNjc0LCAxMjY4MSwgMTI2ODYsIAorICAgIDEyNjkxLCAxMjY5NSwgMTI2OTksIDEyNzAzLCAxMjcwNywgMTI3MTEsIDEyNzE1LCAxMjcxOSwgMTI3MjMsIDEyNzI4LCAKKyAgICAxMjczMywgMTI3MzgsIDEyNzQ0LCAxMjc0NywgMTI3NTEsIDEyNzU1LCAxMjc1OCwgMTI3NjEsIDEyNzY0LCAxMjc2NywgCisgICAgMTI3NzAsIDEyNzczLCAxMjc3NiwgMTI3NzksIDEyNzgyLCAxMjc4NiwgMTI3OTMsIDEyNzk4LCAxMjgwMiwgMTI4MDYsIAorICAgIDEyODEwLCAxMjgxNCwgMCwgMTI4MTgsIDEyODIyLCAxMjgyNiwgMTI4MzAsIDEyODM0LCAxMjg0MCwgMTI4NDQsIDAsIAorICAgIDEyODQ4LCAxMjg1MiwgMTI4NTYsIDAsIDEyODYwLCAxMjg2MywgMTI4NjcsIDEyODcwLCAxMjg3NCwgMTI4NzcsIDEyODgxLCAKKyAgICAxMjg4NSwgMCwgMCwgMTI4ODksIDEyODkyLCAwLCAwLCAxMjg5NiwgMTI4OTksIDEyOTAzLCAxMjkwNiwgMTI5MTAsIAorICAgIDEyOTE0LCAxMjkxOCwgMTI5MjIsIDEyOTI2LCAxMjkzMCwgMTI5MzQsIDEyOTM4LCAxMjk0MiwgMTI5NDYsIDEyOTUwLCAKKyAgICAxMjk1NCwgMTI5NTgsIDEyOTYyLCAxMjk2NiwgMTI5NzAsIDEyOTc0LCAxMjk3OCwgMCwgMTI5ODEsIDEyOTg0LCAxMjk4OCwgCisgICAgMTI5OTIsIDEyOTk2LCAxMjk5OSwgMTMwMDIsIDAsIDEzMDA1LCAwLCAwLCAwLCAxMzAwOSwgMTMwMTMsIDEzMDE3LCAKKyAgICAxMzAyMCwgMCwgMCwgMTMwMjMsIDEzMDI3LCAxMzAzMSwgMTMwMzYsIDEzMDQwLCAxMzA0NSwgMTMwNDksIDEzMDU0LCAKKyAgICAxMzA1OSwgMCwgMCwgMTMwNjUsIDEzMDY5LCAwLCAwLCAxMzA3NCwgMTMwNzgsIDEzMDgzLCAxMzA4NywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTMwOTMsIDAsIDAsIDAsIDAsIDEzMDk5LCAxMzEwMywgMCwgMTMxMDcsIDEzMTExLCAxMzExNiwgCisgICAgMTMxMjEsIDEzMTI2LCAwLCAwLCAxMzEzMiwgMTMxMzYsIDEzMTM5LCAxMzE0MiwgMTMxNDUsIDEzMTQ4LCAxMzE1MSwgCisgICAgMTMxNTQsIDEzMTU3LCAxMzE2MCwgMTMxNjMsIDEzMTcyLCAxMzE4MSwgMTMxODUsIDEzMTg5LCAxMzE5NSwgMTMyMDEsIAorICAgIDEzMjA3LCAxMzIxMywgMTMyMjcsIDEzMjM0LCAxMzIzNywgMCwgMCwgMCwgMCwgMCwgMTMyNDEsIDEzMjQ3LCAxMzI1MSwgMCwgCisgICAgMTMyNTUsIDEzMjU4LCAxMzI2MiwgMTMyNjUsIDEzMjY5LCAxMzI3MiwgMCwgMCwgMCwgMCwgMTMyNzYsIDEzMjgwLCAwLCAwLCAKKyAgICAxMzI4NCwgMTMyODgsIDEzMjkyLCAxMzI5NSwgMTMyOTksIDEzMzAzLCAxMzMwNywgMTMzMTEsIDEzMzE1LCAxMzMxOSwgCisgICAgMTMzMjMsIDEzMzI3LCAxMzMzMSwgMTMzMzUsIDEzMzM5LCAxMzM0MywgMTMzNDcsIDEzMzUxLCAxMzM1NSwgMTMzNTksIAorICAgIDEzMzYzLCAxMzM2NywgMCwgMTMzNzAsIDEzMzczLCAxMzM3NywgMTMzODEsIDEzMzg1LCAxMzM4OCwgMTMzOTEsIDAsIAorICAgIDEzMzk0LCAxMzM5OCwgMCwgMTM0MDIsIDEzNDA2LCAwLCAxMzQxMCwgMTM0MTMsIDAsIDAsIDEzNDE2LCAwLCAxMzQyMCwgCisgICAgMTM0MjUsIDEzNDI5LCAxMzQzNCwgMTM0MzgsIDAsIDAsIDAsIDAsIDEzNDQzLCAxMzQ0OCwgMCwgMCwgMTM0NTMsIDEzNDU4LCAKKyAgICAxMzQ2MywgMCwgMCwgMCwgMTM0NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDcxLCAxMzQ3NSwgMTM0NzksIDEzNDgzLCAKKyAgICAwLCAxMzQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0OTEsIDEzNDk1LCAxMzQ5OCwgMTM1MDEsIDEzNTA0LCAxMzUwNywgCisgICAgMTM1MTAsIDEzNTEzLCAxMzUxNiwgMTM1MTksIDEzNTIyLCAxMzUyNSwgMTM1MjgsIDEzNTMxLCAxMzUzNCwgMTM1MzksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNTQzLCAxMzU0NywgMTM1NTEsIDAsIDEzNTU1LCAxMzU1OCwgCisgICAgMTM1NjIsIDEzNTY1LCAxMzU2OSwgMTM1NzIsIDEzNTc2LCAxMzU4MCwgMTM1ODQsIDAsIDEzNTg5LCAxMzU5MiwgMTM1OTYsIAorICAgIDAsIDEzNjAxLCAxMzYwNCwgMTM2MDgsIDEzNjExLCAxMzYxNSwgMTM2MTksIDEzNjIzLCAxMzYyNywgMTM2MzEsIDEzNjM1LCAKKyAgICAxMzYzOSwgMTM2NDMsIDEzNjQ3LCAxMzY1MSwgMTM2NTUsIDEzNjU5LCAxMzY2MywgMTM2NjcsIDEzNjcxLCAxMzY3NSwgCisgICAgMTM2NzksIDEzNjgzLCAwLCAxMzY4NiwgMTM2ODksIDEzNjkzLCAxMzY5NywgMTM3MDEsIDEzNzA0LCAxMzcwNywgMCwgCisgICAgMTM3MTAsIDEzNzE0LCAwLCAxMzcxOCwgMTM3MjIsIDEzNzI2LCAxMzczMCwgMTM3MzMsIDAsIDAsIDEzNzM2LCAxMzc0MCwgCisgICAgMTM3NDQsIDEzNzQ5LCAxMzc1MywgMTM3NTgsIDEzNzYyLCAxMzc2NywgMTM3NzIsIDEzNzc4LCAwLCAxMzc4NCwgMTM3ODgsIAorICAgIDEzNzkzLCAwLCAxMzc5OSwgMTM4MDMsIDEzODA4LCAwLCAwLCAxMzgxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTM4MTUsIDEzODIwLCAxMzgyNSwgMTM4MzAsIDAsIDAsIDEzODM2LCAxMzg0MCwgMTM4NDMsIAorICAgIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjEsIDEzODY0LCAxMzg2NywgMTM4NzEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODc1LCAxMzg3OSwgMTM4ODMsIDAsIDEzODg3LCAxMzg5MCwgCisgICAgMTM4OTQsIDEzODk3LCAxMzkwMSwgMTM5MDQsIDEzOTA4LCAxMzkxMiwgMCwgMCwgMTM5MTYsIDEzOTE5LCAwLCAwLCAKKyAgICAxMzkyMywgMTM5MjYsIDEzOTMwLCAxMzkzMywgMTM5MzcsIDEzOTQxLCAxMzk0NSwgMTM5NDksIDEzOTUzLCAxMzk1NywgCisgICAgMTM5NjEsIDEzOTY1LCAxMzk2OSwgMTM5NzMsIDEzOTc3LCAxMzk4MSwgMTM5ODUsIDEzOTg5LCAxMzk5MywgMTM5OTcsIAorICAgIDE0MDAxLCAxNDAwNSwgMCwgMTQwMDgsIDE0MDExLCAxNDAxNSwgMTQwMTksIDE0MDIzLCAxNDAyNiwgMTQwMjksIDAsIAorICAgIDE0MDMyLCAxNDAzNiwgMCwgMTQwNDAsIDE0MDQ0LCAxNDA0OCwgMTQwNTIsIDE0MDU1LCAwLCAwLCAxNDA1OCwgMTQwNjIsIAorICAgIDE0MDY2LCAxNDA3MSwgMTQwNzUsIDE0MDgwLCAxNDA4NCwgMTQwODksIDE0MDk0LCAwLCAwLCAxNDEwMCwgMTQxMDQsIDAsIAorICAgIDAsIDE0MTA5LCAxNDExMywgMTQxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTIyLCAxNDEyOCwgMCwgMCwgMCwgMCwgCisgICAgMTQxMzQsIDE0MTM4LCAwLCAxNDE0MiwgMTQxNDYsIDE0MTUxLCAxNDE1NiwgMTQxNjEsIDAsIDAsIDE0MTY3LCAxNDE3MSwgCisgICAgMTQxNzQsIDE0MTc3LCAxNDE4MCwgMTQxODMsIDE0MTg2LCAxNDE4OSwgMTQxOTIsIDE0MTk1LCAxNDE5OCwgMTQyMDEsIAorICAgIDE0MjA1LCAxNDIxMSwgMTQyMTcsIDE0MjIzLCAxNDIyOSwgMTQyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE0MjQxLCAxNDI0NSwgMCwgMTQyNDksIDE0MjUyLCAxNDI1NiwgMTQyNTksIDE0MjYzLCAxNDI2NiwgMCwgMCwgMCwgCisgICAgMTQyNzAsIDE0MjczLCAxNDI3NywgMCwgMTQyODEsIDE0Mjg0LCAxNDI4OCwgMTQyOTIsIDAsIDAsIDAsIDE0Mjk1LCAKKyAgICAxNDI5OSwgMCwgMTQzMDMsIDAsIDE0MzA3LCAxNDMxMSwgMCwgMCwgMCwgMTQzMTUsIDE0MzE5LCAwLCAwLCAwLCAxNDMyMywgCisgICAgMTQzMjYsIDE0MzMwLCAwLCAwLCAwLCAxNDMzMywgMTQzMzYsIDE0MzM5LCAxNDM0MiwgMTQzNDYsIDE0MzUwLCAxNDM1NCwgCisgICAgMTQzNTgsIDE0MzYyLCAxNDM2NiwgMTQzNzAsIDE0MzczLCAwLCAwLCAwLCAwLCAxNDM3NiwgMTQzODEsIDE0Mzg1LCAKKyAgICAxNDM5MCwgMTQzOTQsIDAsIDAsIDAsIDE0Mzk5LCAxNDQwMywgMTQ0MDgsIDAsIDE0NDEzLCAxNDQxNywgMTQ0MjIsIAorICAgIDE0NDI3LCAwLCAwLCAxNDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE0NDQwLCAxNDQ0NCwgMTQ0NDcsIDE0NDUwLCAxNDQ1MywgMTQ0NTYsIDE0NDU5LCAxNDQ2MiwgCisgICAgMTQ0NjUsIDE0NDY4LCAxNDQ3MSwgMTQ0NzUsIDE0NDgwLCAxNDQ4NSwgMTQ0ODksIDE0NDkzLCAxNDQ5NywgMTQ1MDEsIAorICAgIDE0NTA1LCAxNDUxMCwgMTQ1MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NTE3LCAxNDUyMSwgMTQ1MjUsIDAsIDE0NTI5LCAKKyAgICAxNDUzMiwgMTQ1MzYsIDE0NTM5LCAxNDU0MywgMTQ1NDYsIDE0NTUwLCAxNDU1NCwgMCwgMTQ1NTgsIDE0NTYxLCAxNDU2NSwgCisgICAgMCwgMTQ1NjksIDE0NTcyLCAxNDU3NiwgMTQ1ODAsIDE0NTgzLCAxNDU4NywgMTQ1OTEsIDE0NTk1LCAxNDU5OSwgMTQ2MDMsIAorICAgIDE0NjA3LCAxNDYxMSwgMTQ2MTUsIDE0NjE5LCAxNDYyMywgMTQ2MjcsIDE0NjMxLCAxNDYzNSwgMTQ2MzksIDE0NjQzLCAKKyAgICAxNDY0NywgMTQ2NTEsIDE0NjU1LCAwLCAxNDY1OCwgMTQ2NjEsIDE0NjY1LCAxNDY2OSwgMTQ2NzMsIDE0Njc2LCAxNDY3OSwgCisgICAgMTQ2ODIsIDE0Njg2LCAxNDY5MCwgMCwgMTQ2OTQsIDE0Njk4LCAxNDcwMiwgMTQ3MDYsIDE0NzA5LCAwLCAwLCAwLCAKKyAgICAxNDcxMiwgMTQ3MTYsIDE0NzIxLCAxNDcyNSwgMTQ3MzAsIDE0NzM0LCAxNDczOSwgMTQ3NDQsIDAsIDE0NzUwLCAxNDc1NCwgCisgICAgMTQ3NTksIDAsIDE0NzY0LCAxNDc2OCwgMTQ3NzMsIDE0Nzc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc4MiwgMTQ3ODYsIAorICAgIDAsIDE0NzkyLCAxNDc5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4MDAsIDE0ODA1LCAxNDgxMCwgMTQ4MTUsIDAsIDAsIAorICAgIDE0ODIxLCAxNDgyNSwgMTQ4MjgsIDE0ODMxLCAxNDgzNCwgMTQ4MzcsIDE0ODQwLCAxNDg0MywgMTQ4NDYsIDE0ODQ5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDg1MiwgMTQ4NjUsIDE0ODc3LCAxNDg4OSwgMTQ5MDEsIDE0OTEzLCAxNDkyNSwgCisgICAgMTQ5MzcsIDAsIDAsIDE0OTQxLCAxNDk0NSwgMCwgMTQ5NDksIDE0OTUyLCAxNDk1NiwgMTQ5NTksIDE0OTYzLCAxNDk2NiwgCisgICAgMTQ5NzAsIDE0OTc0LCAwLCAxNDk3OCwgMTQ5ODEsIDE0OTg1LCAwLCAxNDk4OSwgMTQ5OTIsIDE0OTk2LCAxNTAwMCwgCisgICAgMTUwMDMsIDE1MDA3LCAxNTAxMSwgMTUwMTUsIDE1MDE5LCAxNTAyMywgMTUwMjcsIDE1MDMxLCAxNTAzNSwgMTUwMzksIAorICAgIDE1MDQzLCAxNTA0NywgMTUwNTEsIDE1MDU1LCAxNTA1OSwgMTUwNjMsIDE1MDY3LCAxNTA3MSwgMTUwNzUsIDAsIDE1MDc4LCAKKyAgICAxNTA4MSwgMTUwODUsIDE1MDg5LCAxNTA5MywgMTUwOTYsIDE1MDk5LCAxNTEwMiwgMTUxMDYsIDE1MTEwLCAwLCAxNTExNCwgCisgICAgMTUxMTgsIDE1MTIyLCAxNTEyNiwgMTUxMjksIDAsIDAsIDE1MTMyLCAxNTEzNiwgMTUxNDAsIDE1MTQ1LCAxNTE0OSwgCisgICAgMTUxNTQsIDE1MTU4LCAxNTE2MywgMTUxNjgsIDAsIDE1MTc0LCAxNTE3OCwgMTUxODMsIDAsIDE1MTg4LCAxNTE5MiwgCisgICAgMTUxOTcsIDE1MjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIwNiwgMTUyMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE1MjE2LCAwLCAxNTIyMCwgMTUyMjUsIDE1MjMwLCAxNTIzNSwgMCwgMCwgMTUyNDEsIDE1MjQ1LCAxNTI0OCwgMTUyNTEsIAorICAgIDE1MjU0LCAxNTI1NywgMTUyNjAsIDE1MjYzLCAxNTI2NiwgMTUyNjksIDAsIDE1MjcyLCAxNTI3NiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyODAsIDE1Mjg0LCAwLCAxNTI4OCwgMTUyOTEsIDE1Mjk1LCAKKyAgICAxNTI5OCwgMTUzMDIsIDE1MzA1LCAxNTMwOSwgMTUzMTMsIDAsIDE1MzE3LCAxNTMyMCwgMTUzMjQsIDAsIDE1MzI4LCAKKyAgICAxNTMzMSwgMTUzMzUsIDE1MzM5LCAxNTM0MiwgMTUzNDYsIDE1MzUwLCAxNTM1NCwgMTUzNTgsIDE1MzYyLCAxNTM2NiwgCisgICAgMTUzNzAsIDE1Mzc0LCAxNTM3OCwgMTUzODIsIDE1Mzg2LCAxNTM5MCwgMTUzOTQsIDE1Mzk4LCAxNTQwMiwgMTU0MDYsIAorICAgIDE1NDEwLCAxNTQxNCwgMTU0MTcsIDE1NDIxLCAxNTQyNCwgMTU0MjgsIDE1NDMyLCAxNTQzNiwgMTU0MzksIDE1NDQyLCAKKyAgICAxNTQ0NSwgMTU0NDksIDE1NDUzLCAxNTQ1NywgMTU0NjEsIDE1NDY1LCAxNTQ2OSwgMTU0NzMsIDE1NDc2LCAxNTQ3OSwgMCwgCisgICAgMCwgMTU0ODMsIDE1NDg3LCAxNTQ5MiwgMTU0OTYsIDE1NTAxLCAxNTUwNSwgMTU1MTAsIDE1NTE1LCAwLCAxNTUyMSwgCisgICAgMTU1MjUsIDE1NTMwLCAwLCAxNTUzNSwgMTU1MzksIDE1NTQ0LCAxNTU0OSwgMTU1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE1NTU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU2NCwgMTU1NjksIDE1NTc0LCAxNTU3OSwgMCwgMCwgCisgICAgMTU1ODUsIDE1NTg5LCAxNTU5MiwgMTU1OTUsIDE1NTk4LCAxNTYwMSwgMTU2MDQsIDE1NjA3LCAxNTYxMCwgMTU2MTMsIAorICAgIDE1NjE2LCAxNTYyMCwgMTU2MjUsIDE1NjMwLCAxNTYzNiwgMTU2NDIsIDAsIDAsIDAsIDE1NjQ4LCAxNTY1MiwgMTU2NTgsIAorICAgIDE1NjY0LCAxNTY3MCwgMTU2NzUsIDE1NjgxLCAwLCAwLCAxNTY4NywgMTU2OTEsIDAsIDE1Njk1LCAxNTY5OSwgMTU3MDMsIAorICAgIDE1NzA3LCAxNTcxMSwgMTU3MTUsIDE1NzE5LCAxNTcyMywgMTU3MjcsIDE1NzMxLCAxNTczNSwgMTU3MzksIDE1NzQzLCAKKyAgICAxNTc0NywgMTU3NTEsIDE1NzU1LCAxNTc1OSwgMTU3NjMsIDAsIDAsIDAsIDE1NzY3LCAxNTc3MywgMTU3NzksIDE1Nzg1LCAKKyAgICAxNTc5MSwgMTU3OTcsIDE1ODAzLCAxNTgwOSwgMTU4MTUsIDE1ODIxLCAxNTgyNywgMTU4MzMsIDE1ODQxLCAxNTg0NywgCisgICAgMTU4NTMsIDE1ODU5LCAxNTg2NSwgMTU4NzEsIDE1ODc3LCAxNTg4MywgMTU4ODksIDE1ODk1LCAxNTkwMSwgMTU5MDcsIDAsIAorICAgIDE1OTEzLCAxNTkxOSwgMTU5MjUsIDE1OTMxLCAxNTkzNywgMTU5NDMsIDE1OTQ3LCAxNTk1MywgMTU5NTcsIDAsIDE1OTYxLCAKKyAgICAwLCAwLCAxNTk2NywgMTU5NzEsIDE1OTc3LCAxNTk4MywgMTU5ODksIDE1OTkzLCAxNTk5OSwgMCwgMCwgMCwgMTYwMDMsIDAsIAorICAgIDAsIDAsIDAsIDE2MDA3LCAxNjAxMiwgMTYwMTksIDE2MDI2LCAxNjAzMywgMTYwNDAsIDAsIDE2MDQ3LCAwLCAxNjA1NCwgCisgICAgMTYwNTksIDE2MDY0LCAxNjA3MSwgMTYwNzgsIDE2MDg3LCAxNjA5OCwgMTYxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTEyLCAxNjExOSwgMTYxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE2MTMxLCAxNjEzNywgMTYxNDMsIDE2MTQ5LCAxNjE1NSwgMTYxNjEsIDE2MTY3LCAxNjE3MywgCisgICAgMTYxNzksIDE2MTg1LCAxNjE5MSwgMTYxOTcsIDE2MjAzLCAxNjIwOSwgMTYyMTUsIDE2MjIxLCAxNjIyNywgMTYyMzMsIAorICAgIDE2MjM5LCAxNjI0NSwgMTYyNTEsIDE2MjU3LCAxNjI2MywgMTYyNjksIDE2Mjc1LCAxNjI4MSwgMTYyODcsIDE2MjkzLCAKKyAgICAxNjI5OSwgMTYzMDUsIDE2MzExLCAxNjMxNywgMTYzMjMsIDE2MzI4LCAxNjMzNCwgMTYzNDAsIDE2MzQ0LCAxNjM1MCwgCisgICAgMTYzNTQsIDE2MzYwLCAxNjM2NiwgMTYzNzIsIDE2Mzc4LCAxNjM4NCwgMTYzOTAsIDE2Mzk1LCAxNjQwMSwgMTY0MDUsIAorICAgIDE2NDEwLCAxNjQxNiwgMTY0MjIsIDE2NDI4LCAxNjQzMywgMTY0MzksIDE2NDQ1LCAxNjQ1MSwgMTY0NTYsIDE2NDYyLCAwLCAKKyAgICAwLCAwLCAwLCAxNjQ2NiwgMTY0NzIsIDE2NDc3LCAxNjQ4MywgMTY0ODgsIDE2NDk2LCAxNjUwNCwgMTY1MDgsIDE2NTEyLCAKKyAgICAxNjUxNiwgMTY1MjIsIDE2NTI4LCAxNjUzNCwgMTY1NDAsIDE2NTQ0LCAxNjU0OCwgMTY1NTIsIDE2NTU2LCAxNjU2MCwgCisgICAgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4NywgMTY1OTEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTkyLCAxNjU5NywgMCwgMTY2MDQsIDAsIDAsIDE2NjExLCAKLSAgICAxNjYxNiwgMCwgMTY2MjEsIDAsIDAsIDE2NjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjYzMywgMTY2MzgsIDE2NjQyLCAKLSAgICAxNjY0OSwgMCwgMTY2NTYsIDE2NjYxLCAxNjY2NiwgMTY2NzEsIDE2Njc4LCAxNjY4NSwgMTY2OTIsIDAsIDE2Njk5LCAKLSAgICAxNjcwNCwgMTY3MDksIDAsIDE2NzE2LCAwLCAxNjcyMywgMCwgMCwgMTY3MjgsIDE2NzM1LCAwLCAxNjc0MiwgMTY3NDYsIAotICAgIDE2NzUzLCAxNjc1NywgMTY3NjIsIDE2NzcwLCAxNjc3NiwgMTY3ODIsIDE2Nzg3LCAxNjc5MywgMTY3OTksIDE2ODA1LCAKLSAgICAxNjgxMCwgMCwgMTY4MTYsIDE2ODI0LCAxNjgzMSwgMCwgMCwgMTY4MzgsIDE2ODQzLCAxNjg0OSwgMTY4NTQsIDE2ODYwLCAKLSAgICAwLCAxNjg2NiwgMCwgMTY4NzIsIDE2ODc5LCAxNjg4NiwgMTY4OTMsIDE2OTAwLCAxNjkwNSwgMCwgMCwgMTY5MDksIAotICAgIDE2OTE0LCAxNjkxOCwgMTY5MjIsIDE2OTI2LCAxNjkzMCwgMTY5MzQsIDE2OTM4LCAxNjk0MiwgMTY5NDYsIDAsIDAsIAotICAgIDE2OTUwLCAxNjk1NiwgMTY5NjIsIDE2OTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjk3NiwgMTY5ODAsIDE2OTkxLCAKLSAgICAxNzAwNiwgMTcwMjEsIDE3MDMxLCAxNzA0MiwgMTcwNTUsIDE3MDY2LCAxNzA3MiwgMTcwODAsIDE3MDkwLCAxNzA5NiwgCi0gICAgMTcxMDQsIDE3MTA4LCAxNzExNCwgMTcxMjAsIDE3MTI4LCAxNzEzOCwgMTcxNDYsIDE3MTU5LCAxNzE2NSwgMTcxNzMsIAotICAgIDE3MTgxLCAxNzE5MywgMTcyMDAsIDE3MjA4LCAxNzIxNiwgMTcyMjQsIDE3MjMyLCAxNzI0MCwgMTcyNDgsIDE3MjU4LCAKLSAgICAxNzI2MiwgMTcyNjUsIDE3MjY4LCAxNzI3MSwgMTcyNzQsIDE3Mjc3LCAxNzI4MCwgMTcyODMsIDE3Mjg2LCAxNzI4OSwgCi0gICAgMTcyOTMsIDE3Mjk3LCAxNzMwMSwgMTczMDUsIDE3MzA5LCAxNzMxMywgMTczMTcsIDE3MzIxLCAxNzMyNSwgMTczMzAsIAotICAgIDE3MzM2LCAxNzM0NiwgMTczNjAsIDE3MzcwLCAxNzM3NiwgMTczODIsIDE3MzkwLCAxNzM5OCwgMTc0MDYsIDE3NDE0LCAKLSAgICAxNzQyMCwgMTc0MjYsIDE3NDI5LCAxNzQzMywgMTc0MzcsIDE3NDQxLCAxNzQ0NSwgMTc0NDksIDE3NDUzLCAwLCAxNzQ1NywgCi0gICAgMTc0NjEsIDE3NDY1LCAxNzQ2OSwgMTc0NzMsIDE3NDc3LCAxNzQ4MSwgMTc0ODUsIDE3NDg5LCAxNzQ5MywgMTc0OTcsIAotICAgIDE3NTAwLCAxNzUwMywgMTc1MDcsIDE3NTExLCAxNzUxNSwgMTc1MTgsIDE3NTIyLCAxNzUyNiwgMTc1MzAsIDE3NTM0LCAKLSAgICAxNzUzOCwgMTc1NDIsIDE3NTQ2LCAxNzU1MCwgMTc1NTMsIDE3NTU2LCAxNzU2MCwgMTc1NjQsIDE3NTY4LCAxNzU3MSwgCi0gICAgMTc1NzQsIDE3NTc3LCAxNzU4MSwgMTc1ODYsIDE3NTkwLCAwLCAwLCAwLCAwLCAxNzU5NCwgMTc1OTksIDE3NjAzLCAKLSAgICAxNzYwOCwgMTc2MTIsIDE3NjE3LCAxNzYyMiwgMTc2MjgsIDE3NjMzLCAxNzYzOSwgMTc2NDMsIDE3NjQ4LCAxNzY1MiwgCi0gICAgMTc2NTcsIDE3NjY3LCAxNzY3MywgMTc2NzksIDE3Njg2LCAxNzY5NiwgMTc3MDIsIDE3NzA2LCAxNzcxMCwgMTc3MTYsIAotICAgIDE3NzIyLCAxNzczMCwgMTc3MzYsIDE3NzQ0LCAxNzc1MiwgMTc3NjAsIDE3NzcwLCAxNzc3OCwgMTc3ODgsIDE3NzkzLCAKLSAgICAxNzc5OSwgMTc4MDUsIDE3ODExLCAxNzgxNywgMTc4MjMsIDE3ODI5LCAwLCAxNzgzNSwgMTc4NDEsIDE3ODQ3LCAxNzg1MywgCi0gICAgMTc4NTksIDE3ODY1LCAxNzg3MSwgMTc4NzcsIDE3ODgzLCAxNzg4OSwgMTc4OTUsIDE3OTAwLCAxNzkwNSwgMTc5MTEsIAotICAgIDE3OTE3LCAxNzkyMywgMTc5MjgsIDE3OTM0LCAxNzk0MCwgMTc5NDYsIDE3OTUyLCAxNzk1OCwgMTc5NjQsIDE3OTcwLCAKLSAgICAxNzk3NiwgMTc5ODEsIDE3OTg2LCAxNzk5MiwgMTc5OTgsIDE4MDA0LCAxODAwOSwgMTgwMTQsIDE4MDE5LCAxODAyNSwgCi0gICAgMTgwMzMsIDE4MDQwLCAwLCAxODA0NywgMTgwNTQsIDE4MDY3LCAxODA3NCwgMTgwODEsIDE4MDg5LCAxODA5NywgMTgxMDMsIAotICAgIDE4MTA5LCAxODExNSwgMTgxMjUsIDE4MTMwLCAxODEzNiwgMTgxNDYsIDE4MTU2LCAwLCAxODE2NiwgMTgxNzYsIDE4MTg0LCAKLSAgICAxODE5NiwgMTgyMDgsIDE4MjE0LCAxODIyOCwgMTgyNDMsIDE4MjQ4LCAxODI1MywgMTgyNjEsIDE4MjY5LCAxODI3NywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY1OTUsIDE2NjAwLCAwLCAxNjYwNywgMCwgMCwgMTY2MTQsIAorICAgIDE2NjE5LCAwLCAxNjYyNCwgMCwgMCwgMTY2MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NjM2LCAxNjY0MSwgMTY2NDUsIAorICAgIDE2NjUyLCAwLCAxNjY1OSwgMTY2NjQsIDE2NjY5LCAxNjY3NCwgMTY2ODEsIDE2Njg4LCAxNjY5NSwgMCwgMTY3MDIsIAorICAgIDE2NzA3LCAxNjcxMiwgMCwgMTY3MTksIDAsIDE2NzI2LCAwLCAwLCAxNjczMSwgMTY3MzgsIDAsIDE2NzQ1LCAxNjc0OSwgCisgICAgMTY3NTYsIDE2NzYwLCAxNjc2NSwgMTY3NzMsIDE2Nzc5LCAxNjc4NSwgMTY3OTAsIDE2Nzk2LCAxNjgwMiwgMTY4MDgsIAorICAgIDE2ODEzLCAwLCAxNjgxOSwgMTY4MjcsIDE2ODM0LCAwLCAwLCAxNjg0MSwgMTY4NDYsIDE2ODUyLCAxNjg1NywgMTY4NjMsIAorICAgIDAsIDE2ODY5LCAwLCAxNjg3NSwgMTY4ODIsIDE2ODg5LCAxNjg5NiwgMTY5MDMsIDE2OTA4LCAwLCAwLCAxNjkxMiwgCisgICAgMTY5MTcsIDE2OTIxLCAxNjkyNSwgMTY5MjksIDE2OTMzLCAxNjkzNywgMTY5NDEsIDE2OTQ1LCAxNjk0OSwgMCwgMCwgCisgICAgMTY5NTMsIDE2OTU5LCAxNjk2NSwgMTY5NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OTc5LCAxNjk4MywgMTY5OTQsIAorICAgIDE3MDA5LCAxNzAyNCwgMTcwMzQsIDE3MDQ1LCAxNzA1OCwgMTcwNjksIDE3MDc1LCAxNzA4MywgMTcwOTMsIDE3MDk5LCAKKyAgICAxNzEwNywgMTcxMTEsIDE3MTE3LCAxNzEyMywgMTcxMzEsIDE3MTQxLCAxNzE0OSwgMTcxNjIsIDE3MTY4LCAxNzE3NiwgCisgICAgMTcxODQsIDE3MTk2LCAxNzIwMywgMTcyMTEsIDE3MjE5LCAxNzIyNywgMTcyMzUsIDE3MjQzLCAxNzI1MSwgMTcyNjEsIAorICAgIDE3MjY1LCAxNzI2OCwgMTcyNzEsIDE3Mjc0LCAxNzI3NywgMTcyODAsIDE3MjgzLCAxNzI4NiwgMTcyODksIDE3MjkyLCAKKyAgICAxNzI5NiwgMTczMDAsIDE3MzA0LCAxNzMwOCwgMTczMTIsIDE3MzE2LCAxNzMyMCwgMTczMjQsIDE3MzI4LCAxNzMzMywgCisgICAgMTczMzksIDE3MzQ5LCAxNzM2MywgMTczNzMsIDE3Mzc5LCAxNzM4NSwgMTczOTMsIDE3NDAxLCAxNzQwOSwgMTc0MTcsIAorICAgIDE3NDIzLCAxNzQyOSwgMTc0MzIsIDE3NDM2LCAxNzQ0MCwgMTc0NDQsIDE3NDQ4LCAxNzQ1MiwgMTc0NTYsIDAsIDE3NDYwLCAKKyAgICAxNzQ2NCwgMTc0NjgsIDE3NDcyLCAxNzQ3NiwgMTc0ODAsIDE3NDg0LCAxNzQ4OCwgMTc0OTIsIDE3NDk2LCAxNzUwMCwgCisgICAgMTc1MDMsIDE3NTA2LCAxNzUxMCwgMTc1MTQsIDE3NTE4LCAxNzUyMSwgMTc1MjUsIDE3NTI5LCAxNzUzMywgMTc1MzcsIAorICAgIDE3NTQxLCAxNzU0NSwgMTc1NDksIDE3NTUzLCAxNzU1NiwgMTc1NTksIDE3NTYzLCAxNzU2NywgMTc1NzEsIDE3NTc0LCAKKyAgICAxNzU3NywgMTc1ODAsIDE3NTg0LCAxNzU4OSwgMTc1OTMsIDAsIDAsIDAsIDAsIDE3NTk3LCAxNzYwMiwgMTc2MDYsIAorICAgIDE3NjExLCAxNzYxNSwgMTc2MjAsIDE3NjI1LCAxNzYzMSwgMTc2MzYsIDE3NjQyLCAxNzY0NiwgMTc2NTEsIDE3NjU1LCAKKyAgICAxNzY2MCwgMTc2NzAsIDE3Njc2LCAxNzY4MiwgMTc2ODksIDE3Njk5LCAxNzcwNSwgMTc3MDksIDE3NzEzLCAxNzcxOSwgCisgICAgMTc3MjUsIDE3NzMzLCAxNzczOSwgMTc3NDcsIDE3NzU1LCAxNzc2MywgMTc3NzMsIDE3NzgxLCAxNzc5MSwgMTc3OTYsIAorICAgIDE3ODAyLCAxNzgwOCwgMTc4MTQsIDE3ODIwLCAxNzgyNiwgMTc4MzIsIDAsIDE3ODM4LCAxNzg0NCwgMTc4NTAsIDE3ODU2LCAKKyAgICAxNzg2MiwgMTc4NjgsIDE3ODc0LCAxNzg4MCwgMTc4ODYsIDE3ODkyLCAxNzg5OCwgMTc5MDMsIDE3OTA4LCAxNzkxNCwgCisgICAgMTc5MjAsIDE3OTI2LCAxNzkzMSwgMTc5MzcsIDE3OTQzLCAxNzk0OSwgMTc5NTUsIDE3OTYxLCAxNzk2NywgMTc5NzMsIAorICAgIDE3OTc5LCAxNzk4NCwgMTc5ODksIDE3OTk1LCAxODAwMSwgMTgwMDcsIDE4MDEyLCAxODAxNywgMTgwMjIsIDE4MDI4LCAKKyAgICAxODAzNiwgMTgwNDMsIDAsIDE4MDUwLCAxODA1NywgMTgwNzAsIDE4MDc3LCAxODA4NCwgMTgwOTIsIDE4MTAwLCAxODEwNiwgCisgICAgMTgxMTIsIDE4MTE4LCAxODEyOCwgMTgxMzMsIDE4MTM5LCAxODE0OSwgMTgxNTksIDAsIDE4MTY5LCAxODE3OSwgMTgxODcsIAorICAgIDE4MTk5LCAxODIxMSwgMTgyMTcsIDE4MjMxLCAxODI0NiwgMTgyNTEsIDE4MjU2LCAxODI2NCwgMTgyNzIsIDE4MjgwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODI4NSwgMTgyODgsIDE4MjkyLCAxODI5NiwgMTgzMDAsIAotICAgIDE4MzA0LCAxODMwOCwgMTgzMTIsIDE4MzE2LCAxODMyMCwgMTgzMjQsIDE4MzI4LCAxODMzMiwgMTgzMzYsIDE4MzQwLCAKLSAgICAxODM0NCwgMTgzNDgsIDE4MzUyLCAxODM1NiwgMTgzNjAsIDE4MzY0LCAxODM2NywgMTgzNzAsIDE4Mzc0LCAxODM3OCwgCi0gICAgMTgzODIsIDE4Mzg1LCAxODM4OCwgMTgzOTEsIDE4Mzk1LCAxODM5OSwgMTg0MDIsIDE4NDA1LCAxODQwOSwgMTg0MTIsIAotICAgIDE4NDE3LCAxODQyMCwgMTg0MjQsIDE4NDI3LCAxODQzMSwgMTg0MzQsIDE4NDM5LCAxODQ0MiwgMTg0NDYsIDE4NDUzLCAKLSAgICAxODQ1OCwgMTg0NjIsIDE4NDY3LCAxODQ3MSwgMTg0NzYsIDE4NDgwLCAxODQ4NSwgMTg0OTIsIDE4NDk4LCAxODUwMywgCi0gICAgMTg1MDcsIDE4NTExLCAxODUxNSwgMTg1MTksIDE4NTIzLCAxODUyOCwgMTg1MzMsIDE4NTM5LCAxODU0NCwgMTg1NDksIAotICAgIDE4NTUzLCAxODU1NiwgMTg1NTksIDE4NTYyLCAxODU2NSwgMTg1NjgsIDE4NTcxLCAxODU3NCwgMTg1NzcsIDE4NTgwLCAKLSAgICAxODU4NiwgMTg1OTAsIDE4NTk0LCAxODU5OCwgMTg2MDIsIDE4NjA2LCAxODYxMCwgMTg2MTQsIDE4NjE4LCAxODYyMywgCi0gICAgMTg2MjcsIDE4NjMyLCAxODYzNywgMTg2NDMsIDE4NjQ4LCAxODY1NCwgMTg2NjAsIDE4NjY2LCAxODY3MiwgMTg2NzgsIAotICAgIDE4Njg1LCAxODY5MiwgMTg3MDAsIDE4NzA4LCAxODcxNywgMTg3MjYsIDE4NzM3LCAxODc0NywgMTg3NTcsIDE4NzY4LCAKLSAgICAxODc3OSwgMTg3ODksIDE4Nzk5LCAxODgwOSwgMTg4MTksIDE4ODI5LCAxODgzOSwgMTg4NDksIDE4ODU5LCAxODg2NywgCi0gICAgMTg4NzQsIDE4ODgwLCAxODg4NywgMTg4OTIsIDE4ODk4LCAxODkwNCwgMTg5MTAsIDE4OTE2LCAxODkyMiwgMTg5MjgsIAotICAgIDE4OTMzLCAxODkzOSwgMTg5NDUsIDE4OTUxLCAxODk1NywgMTg5NjIsIDE4OTcwLCAxODk3NywgMTg5ODMsIDE4OTkwLCAKLSAgICAxODk5OCwgMTkwMDQsIDE5MDEwLCAxOTAxNiwgMTkwMjIsIDE5MDMwLCAxOTAzOCwgMTkwNDgsIDE5MDU2LCAxOTA2NCwgCi0gICAgMTkwNzAsIDE5MDc1LCAxOTA4MCwgMTkwODUsIDE5MDkwLCAxOTA5NSwgMTkxMDAsIDE5MTA1LCAxOTExMCwgMTkxMTUsIAotICAgIDE5MTIxLCAxOTEyNywgMTkxMzMsIDE5MTQwLCAxOTE0NSwgMTkxNTEsIDE5MTU2LCAxOTE2MSwgMTkxNjYsIDE5MTcxLCAKLSAgICAxOTE3NiwgMTkxODEsIDE5MTg2LCAxOTE5MSwgMTkxOTYsIDE5MjAxLCAxOTIwNiwgMTkyMTEsIDE5MjE2LCAxOTIyMSwgCi0gICAgMTkyMjYsIDE5MjMxLCAxOTIzNiwgMTkyNDEsIDE5MjQ2LCAxOTI1MSwgMTkyNTYsIDE5MjYxLCAxOTI2NiwgMTkyNzEsIAotICAgIDE5Mjc2LCAxOTI4MSwgMTkyODYsIDE5MjkxLCAxOTI5NiwgMTkzMDEsIDE5MzA2LCAxOTMxMSwgMTkzMTYsIDE5MzIxLCAKLSAgICAxOTMyNiwgMTkzMzEsIDE5MzM2LCAwLCAxOTM0MSwgMCwgMCwgMCwgMCwgMCwgMTkzNDYsIDAsIDAsIDE5MzUxLCAxOTM1NSwgCi0gICAgMTkzNTksIDE5MzYzLCAxOTM2NywgMTkzNzEsIDE5Mzc1LCAxOTM3OSwgMTkzODMsIDE5Mzg3LCAxOTM5MSwgMTkzOTUsIAotICAgIDE5Mzk5LCAxOTQwMywgMTk0MDcsIDE5NDExLCAxOTQxNSwgMTk0MTksIDE5NDIzLCAxOTQyNywgMTk0MzEsIDE5NDM1LCAKLSAgICAxOTQzOSwgMTk0NDMsIDE5NDQ3LCAxOTQ1MSwgMTk0NTUsIDE5NDU5LCAxOTQ2MywgMTk0NjcsIDE5NDcxLCAxOTQ3NSwgCi0gICAgMTk0NzksIDE5NDgzLCAxOTQ4NywgMTk0OTEsIDE5NDk1LCAxOTQ5OSwgMTk1MDMsIDE5NTA3LCAxOTUxMSwgMTk1MTUsIAotICAgIDE5NTIxLCAxOTUyNSwgMTk1MzAsIDE5NTM1LCAxOTUzOSwgMTk1NDQsIDE5NTQ5LCAxOTU1MywgMTk1NTcsIDE5NTYxLCAKLSAgICAxOTU2NSwgMTk1NjksIDE5NTczLCAxOTU3NywgMTk1ODEsIDE5NTg1LCAxOTU4OSwgMTk1OTMsIDE5NTk3LCAxOTYwMSwgCi0gICAgMTk2MDUsIDE5NjA5LCAxOTYxMywgMTk2MTcsIDE5NjIxLCAxOTYyNSwgMTk2MjksIDE5NjMzLCAxOTYzNywgMTk2NDEsIAotICAgIDE5NjQ1LCAxOTY0OSwgMTk2NTMsIDE5NjU3LCAxOTY2MSwgMTk2NjUsIDE5NjY5LCAxOTY3MywgMTk2NzcsIDE5NjgxLCAKLSAgICAxOTY4NSwgMTk2ODksIDE5NjkzLCAxOTY5NywgMTk3MDEsIDE5NzA1LCAxOTcwOSwgMTk3MTMsIDE5NzE3LCAxOTcyMSwgCi0gICAgMTk3MjUsIDE5NzI5LCAxOTczMywgMTk3MzcsIDE5NzQxLCAxOTc0NSwgMTk3NDksIDE5NzUzLCAxOTc1NywgMTk3NjEsIAotICAgIDE5NzY1LCAxOTc2OSwgMTk3NzMsIDE5Nzc3LCAxOTc4MSwgMTk3ODUsIDE5Nzg5LCAxOTc5MywgMTk3OTcsIDE5ODAxLCAKLSAgICAxOTgwNSwgMTk4MDksIDE5ODEzLCAxOTgxNywgMTk4MjEsIDE5ODI1LCAxOTgyOSwgMTk4MzMsIDE5ODM3LCAxOTg0MSwgCi0gICAgMTk4NDUsIDE5ODQ5LCAxOTg1MywgMTk4NTcsIDE5ODYxLCAxOTg2NSwgMTk4NjksIDE5ODczLCAxOTg3NywgMTk4ODEsIAotICAgIDE5ODg1LCAxOTg4OSwgMTk4OTMsIDE5ODk3LCAxOTkwMSwgMTk5MDUsIDE5OTA5LCAxOTkxMywgMTk5MTcsIDE5OTIxLCAKLSAgICAxOTkyNSwgMTk5MjksIDE5OTMzLCAxOTkzNywgMTk5NDAsIDE5OTQ0LCAxOTk0NywgMTk5NTEsIDE5OTU1LCAxOTk1OCwgCi0gICAgMTk5NjIsIDE5OTY2LCAxOTk2OSwgMTk5NzMsIDE5OTc3LCAxOTk4MSwgMTk5ODUsIDE5OTg4LCAxOTk5MiwgMTk5OTYsIAotICAgIDIwMDAwLCAyMDAwNCwgMjAwMDgsIDIwMDEyLCAyMDAxNSwgMjAwMTksIDIwMDIzLCAyMDAyNywgMjAwMzEsIDIwMDM1LCAKLSAgICAyMDAzOSwgMjAwNDMsIDIwMDQ3LCAyMDA1MSwgMjAwNTUsIDIwMDU5LCAyMDA2MywgMjAwNjcsIDIwMDcxLCAyMDA3NSwgCi0gICAgMjAwNzksIDIwMDgzLCAyMDA4NywgMjAwOTEsIDIwMDk1LCAyMDA5OSwgMjAxMDMsIDIwMTA3LCAyMDExMSwgMjAxMTUsIAotICAgIDIwMTE5LCAyMDEyMywgMjAxMjcsIDIwMTMxLCAyMDEzNSwgMjAxMzksIDIwMTQzLCAyMDE0NywgMjAxNTEsIDIwMTU1LCAKLSAgICAyMDE1OSwgMjAxNjMsIDIwMTY3LCAyMDE3MSwgMjAxNzUsIDIwMTc5LCAyMDE4MywgMjAxODcsIDIwMTkxLCAyMDE5NSwgCi0gICAgMjAxOTksIDIwMjAzLCAyMDIwNywgMjAyMTEsIDIwMjE1LCAyMDIxOSwgMjAyMjMsIDIwMjI3LCAyMDIzMSwgMjAyMzUsIAotICAgIDIwMjM5LCAyMDI0MywgMjAyNDcsIDIwMjUxLCAyMDI1NSwgMjAyNTksIDIwMjYzLCAyMDI2NywgMjAyNzEsIDIwMjc1LCAKLSAgICAyMDI3OSwgMjAyODMsIDIwMjg3LCAyMDI5MSwgMjAyOTUsIDIwMjk5LCAyMDMwMywgMjAzMDcsIDIwMzExLCAyMDMxNSwgCi0gICAgMjAzMTksIDIwMzIzLCAyMDMyNywgMjAzMzEsIDIwMzM1LCAyMDMzOSwgMjAzNDMsIDIwMzQ3LCAyMDM1MSwgMjAzNTUsIAotICAgIDIwMzU5LCAyMDM2MywgMjAzNjcsIDIwMzcxLCAyMDM3NSwgMjAzNzksIDIwMzgzLCAyMDM4NywgMjAzOTEsIDIwMzk1LCAKLSAgICAyMDM5OSwgMjA0MDMsIDIwNDA3LCAyMDQxMSwgMjA0MTUsIDIwNDE5LCAyMDQyMywgMjA0MjcsIDIwNDMxLCAyMDQzNSwgCi0gICAgMjA0MzksIDIwNDQzLCAyMDQ0NywgMjA0NTEsIDIwNDU1LCAyMDQ1OSwgMjA0NjMsIDIwNDY3LCAyMDQ3MSwgMjA0NzUsIAotICAgIDIwNDc5LCAyMDQ4MywgMjA0ODcsIDIwNDkxLCAyMDQ5NSwgMjA0OTksIDIwNTAzLCAyMDUwNywgMjA1MTEsIDIwNTE1LCAKLSAgICAyMDUxOSwgMjA1MjMsIDIwNTI3LCAyMDUzMSwgMjA1MzUsIDIwNTM5LCAyMDU0MywgMjA1NDcsIDIwNTUxLCAyMDU1NSwgCi0gICAgMjA1NTksIDIwNTYzLCAyMDU2NywgMjA1NzAsIDIwNTc0LCAyMDU3OCwgMjA1ODIsIDIwNTg2LCAyMDU5MCwgMjA1OTQsIAotICAgIDIwNTk4LCAyMDYwMiwgMjA2MDYsIDIwNjEwLCAyMDYxNCwgMjA2MTgsIDIwNjIyLCAyMDYyNiwgMjA2MzAsIDIwNjM0LCAKLSAgICAyMDYzOCwgMjA2NDIsIDIwNjQ2LCAyMDY1MCwgMjA2NTQsIDIwNjU4LCAyMDY2MiwgMjA2NjUsIDIwNjY5LCAyMDY3MywgCi0gICAgMjA2NzcsIDIwNjgxLCAyMDY4NSwgMjA2ODksIDIwNjkzLCAyMDY5NywgMjA3MDEsIDIwNzA1LCAyMDcwOSwgMjA3MTMsIAotICAgIDIwNzE3LCAyMDcyMSwgMjA3MjUsIDIwNzI4LCAyMDczMiwgMjA3MzYsIDIwNzQwLCAyMDc0NCwgMjA3NDgsIDIwNzUyLCAKLSAgICAyMDc1NiwgMjA3NTksIDIwNzYzLCAyMDc2NywgMjA3NzEsIDIwNzc1LCAyMDc3OSwgMjA3ODMsIDIwNzg3LCAyMDc5MSwgCi0gICAgMjA3OTUsIDIwNzk5LCAyMDgwMywgMjA4MDcsIDIwODExLCAyMDgxNSwgMjA4MTksIDIwODIzLCAyMDgyNywgMjA4MzEsIAotICAgIDIwODM1LCAyMDgzOSwgMjA4NDMsIDIwODQ3LCAyMDg1MSwgMCwgMjA4NTUsIDIwODU5LCAyMDg2MywgMjA4NjcsIDAsIDAsIAotICAgIDIwODcxLCAyMDg3NSwgMjA4NzksIDIwODgzLCAyMDg4NywgMjA4OTEsIDIwODk1LCAwLCAyMDg5OSwgMCwgMjA5MDMsIAotICAgIDIwOTA3LCAyMDkxMSwgMjA5MTUsIDAsIDAsIDIwOTE5LCAyMDkyMywgMjA5MjcsIDIwOTMxLCAyMDkzNSwgMjA5MzksIAotICAgIDIwOTQzLCAyMDk0NywgMjA5NTEsIDIwOTU1LCAyMDk1OSwgMjA5NjMsIDIwOTY3LCAyMDk3MSwgMjA5NzUsIDIwOTc5LCAKLSAgICAyMDk4MywgMjA5ODcsIDIwOTkxLCAyMDk5NSwgMjA5OTksIDIxMDAzLCAyMTAwNywgMjEwMTAsIDIxMDE0LCAyMTAxOCwgCi0gICAgMjEwMjIsIDIxMDI2LCAyMTAzMCwgMjEwMzQsIDIxMDM4LCAyMTA0MiwgMjEwNDYsIDIxMDUwLCAyMTA1NCwgMjEwNTgsIAotICAgIDIxMDYyLCAyMTA2NiwgMjEwNzAsIDIxMDc0LCAyMTA3OCwgMCwgMjEwODIsIDIxMDg2LCAyMTA5MCwgMjEwOTQsIDAsIDAsIAotICAgIDIxMDk4LCAyMTEwMSwgMjExMDUsIDIxMTA5LCAyMTExMywgMjExMTcsIDIxMTIxLCAyMTEyNSwgMjExMjksIDIxMTMzLCAKLSAgICAyMTEzNywgMjExNDEsIDIxMTQ1LCAyMTE0OSwgMjExNTMsIDIxMTU3LCAyMTE2MSwgMjExNjYsIDIxMTcxLCAyMTE3NiwgCi0gICAgMjExODIsIDIxMTg4LCAyMTE5MywgMjExOTgsIDIxMjA0LCAyMTIwNywgMjEyMTEsIDIxMjE1LCAyMTIxOSwgMjEyMjMsIAotICAgIDIxMjI3LCAyMTIzMSwgMjEyMzUsIDAsIDIxMjM5LCAyMTI0MywgMjEyNDcsIDIxMjUxLCAwLCAwLCAyMTI1NSwgMjEyNTksIAotICAgIDIxMjYzLCAyMTI2NywgMjEyNzEsIDIxMjc1LCAyMTI3OSwgMCwgMjEyODMsIDAsIDIxMjg3LCAyMTI5MSwgMjEyOTUsIAotICAgIDIxMjk5LCAwLCAwLCAyMTMwMywgMjEzMDcsIDIxMzExLCAyMTMxNSwgMjEzMTksIDIxMzIzLCAyMTMyNywgMjEzMzEsIAotICAgIDIxMzM1LCAyMTM0MCwgMjEzNDUsIDIxMzUwLCAyMTM1NiwgMjEzNjIsIDIxMzY3LCAwLCAyMTM3MiwgMjEzNzYsIDIxMzgwLCAKLSAgICAyMTM4NCwgMjEzODgsIDIxMzkyLCAyMTM5NiwgMjE0MDAsIDIxNDA0LCAyMTQwOCwgMjE0MTIsIDIxNDE2LCAyMTQyMCwgCi0gICAgMjE0MjQsIDIxNDI4LCAyMTQzMiwgMjE0MzYsIDIxNDM5LCAyMTQ0MywgMjE0NDcsIDIxNDUxLCAyMTQ1NSwgMjE0NTksIAotICAgIDIxNDYzLCAyMTQ2NywgMjE0NzEsIDIxNDc1LCAyMTQ3OSwgMjE0ODMsIDIxNDg3LCAyMTQ5MSwgMjE0OTUsIDIxNDk5LCAKLSAgICAyMTUwMywgMjE1MDcsIDIxNTExLCAyMTUxNSwgMjE1MTksIDIxNTIzLCAyMTUyNywgMjE1MzEsIDIxNTM1LCAyMTUzOSwgCi0gICAgMjE1NDMsIDIxNTQ3LCAyMTU1MSwgMjE1NTUsIDIxNTU5LCAyMTU2MywgMjE1NjcsIDIxNTcxLCAyMTU3NSwgMjE1NzksIAotICAgIDIxNTgzLCAyMTU4NywgMjE1OTEsIDIxNTk1LCAwLCAyMTU5OSwgMjE2MDMsIDIxNjA3LCAyMTYxMSwgMCwgMCwgMjE2MTUsIAotICAgIDIxNjE5LCAyMTYyMywgMjE2MjcsIDIxNjMxLCAyMTYzNSwgMjE2MzksIDIxNjQzLCAyMTY0NywgMjE2NTEsIDIxNjU1LCAKLSAgICAyMTY1OSwgMjE2NjMsIDIxNjY3LCAyMTY3MSwgMjE2NzUsIDIxNjc5LCAyMTY4MywgMjE2ODcsIDIxNjkxLCAyMTY5NSwgCi0gICAgMjE2OTksIDIxNzAzLCAyMTcwNywgMjE3MTEsIDIxNzE1LCAyMTcxOSwgMjE3MjMsIDIxNzI3LCAyMTczMSwgMjE3MzUsIAotICAgIDIxNzM5LCAyMTc0MywgMjE3NDcsIDIxNzUxLCAyMTc1NSwgMjE3NTksIDIxNzYzLCAyMTc2NywgMjE3NzEsIDIxNzc1LCAKLSAgICAyMTc3OSwgMjE3ODMsIDIxNzg3LCAyMTc5MSwgMjE3OTUsIDIxNzk5LCAyMTgwMywgMjE4MDcsIDIxODExLCAyMTgxNSwgCi0gICAgMjE4MTksIDIxODIzLCAyMTgyNywgMjE4MzEsIDIxODM1LCAyMTgzOSwgMjE4NDIsIDIxODQ2LCAyMTg1MCwgMjE4NTQsIAotICAgIDIxODU4LCAyMTg2MiwgMjE4NjYsIDIxODcwLCAyMTg3NCwgMjE4NzgsIDAsIDAsIDIxODgyLCAyMTg5MSwgMjE4OTcsIAotICAgIDIxOTAyLCAyMTkwNiwgMjE5MDksIDIxOTE0LCAyMTkxNywgMjE5MjAsIDIxOTIzLCAyMTkyOCwgMjE5MzIsIDIxOTM3LCAKLSAgICAyMTk0MCwgMjE5NDMsIDIxOTQ2LCAyMTk0OSwgMjE5NTIsIDIxOTU1LCAyMTk1OCwgMjE5NjEsIDIxOTY0LCAyMTk2OCwgCi0gICAgMjE5NzIsIDIxOTc2LCAyMTk4MCwgMjE5ODQsIDIxOTg4LCAyMTk5MiwgMjE5OTYsIDIyMDAwLCAyMjAwNCwgMCwgMCwgMCwgCi0gICAgMjIwMTAsIDIyMDE2LCAyMjAyMCwgMjIwMjQsIDIyMDI4LCAyMjAzNCwgMjIwMzgsIDIyMDQyLCAyMjA0NiwgMjIwNTIsIAotICAgIDIyMDU2LCAyMjA2MCwgMjIwNjQsIDIyMDcwLCAyMjA3NCwgMjIwNzgsIDIyMDgyLCAyMjA4OCwgMjIwOTQsIDIyMTAwLCAKLSAgICAyMjEwOCwgMjIxMTQsIDIyMTIwLCAyMjEyNiwgMjIxMzIsIDIyMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAyMjE0NCwgMjIxNDcsIAotICAgIDIyMTUwLCAyMjE1MywgMjIxNTYsIDIyMTU5LCAyMjE2MywgMjIxNjcsIDIyMTcwLCAyMjE3NCwgMjIxNzgsIDIyMTgyLCAKLSAgICAyMjE4NiwgMjIxOTAsIDIyMTkzLCAyMjE5NywgMjIyMDEsIDIyMjA1LCAyMjIwOSwgMjIyMTMsIDIyMjE3LCAyMjIyMSwgCi0gICAgMjIyMjUsIDIyMjI5LCAyMjIzMywgMjIyMzcsIDIyMjQwLCAyMjI0NCwgMjIyNDgsIDIyMjUyLCAyMjI1NiwgMjIyNTksIAotICAgIDIyMjYzLCAyMjI2NywgMjIyNzEsIDIyMjc1LCAyMjI3OSwgMjIyODMsIDIyMjg3LCAyMjI5MSwgMjIyOTUsIDIyMjk5LCAKLSAgICAyMjMwMywgMjIzMDcsIDIyMzExLCAyMjMxNCwgMjIzMTgsIDIyMzIyLCAyMjMyNiwgMjIzMzAsIDIyMzM0LCAyMjMzOCwgCi0gICAgMjIzNDIsIDIyMzQ2LCAyMjM1MCwgMjIzNTQsIDIyMzU4LCAyMjM2MiwgMjIzNjYsIDIyMzcwLCAyMjM3NCwgMjIzNzgsIAotICAgIDIyMzgyLCAyMjM4NiwgMjIzOTAsIDIyMzk0LCAyMjM5OCwgMjI0MDIsIDIyNDA2LCAyMjQxMCwgMjI0MTQsIDIyNDE4LCAKLSAgICAyMjQyMiwgMjI0MjYsIDIyNDMwLCAyMjQzNCwgMjI0MzgsIDIyNDQyLCAyMjQ0NiwgMjI0NTAsIDIyNDUzLCAyMjQ1NywgCi0gICAgMjI0NjEsIDIyNDY1LCAyMjQ2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI0NzMsIDIyNDc3LCAKLSAgICAyMjQ4MCwgMjI0ODQsIDIyNDg3LCAyMjQ5MSwgMjI0OTQsIDIyNDk4LCAyMjUwNCwgMjI1MDksIDIyNTEzLCAyMjUxNiwgCi0gICAgMjI1MjAsIDIyNTI0LCAyMjUyOSwgMjI1MzMsIDIyNTM4LCAyMjU0MiwgMjI1NDcsIDIyNTUxLCAyMjU1NiwgMjI1NjAsIAotICAgIDIyNTY1LCAyMjU3MSwgMjI1NzUsIDIyNTgwLCAyMjU4NCwgMjI1ODksIDIyNTk1LCAyMjU5OSwgMjI2MDUsIDIyNjExLCAKLSAgICAyMjYxNSwgMjI2MjAsIDIyNjI4LCAyMjYzNiwgMjI2NDMsIDIyNjQ4LCAyMjY1MywgMjI2NjIsIDIyNjY5LCAyMjY3NiwgCi0gICAgMjI2ODEsIDIyNjg3LCAyMjY5MSwgMjI2OTUsIDIyNjk5LCAyMjcwMywgMjI3MDcsIDIyNzExLCAyMjcxNSwgMjI3MTksIAotICAgIDIyNzIzLCAyMjcyNywgMjI3MzMsIDIyNzM4LCAyMjc0MywgMjI3NDYsIDIyNzUwLCAyMjc1NCwgMjI3NTksIDIyNzYzLCAKLSAgICAyMjc2OCwgMjI3NzIsIDIyNzc3LCAyMjc4MSwgMjI3ODYsIDIyNzkwLCAyMjc5NSwgMjI3OTksIDIyODA0LCAyMjgwOCwgCi0gICAgMjI4MTMsIDIyODE5LCAyMjgyMywgMjI4MjgsIDIyODMzLCAyMjgzNywgMjI4NDEsIDIyODQ1LCAyMjg0OSwgMjI4NTIsIAotICAgIDIyODU2LCAyMjg2MiwgMjI4NjcsIDIyODcyLCAyMjg3NiwgMjI4ODAsIDIyODg0LCAyMjg4OSwgMjI4OTMsIDIyODk4LCAKLSAgICAyMjkwMiwgMjI5MDcsIDIyOTEwLCAyMjkxNCwgMjI5MTgsIDIyOTIzLCAyMjkyNywgMjI5MzIsIDIyOTM2LCAyMjk0MSwgCi0gICAgMjI5NDcsIDIyOTUxLCAyMjk1NSwgMjI5NTksIDIyOTYzLCAyMjk2NywgMjI5NzEsIDIyOTc1LCAyMjk3OSwgMjI5ODMsIAotICAgIDIyOTg3LCAyMjk5MSwgMjI5OTcsIDIzMDAwLCAyMzAwNCwgMjMwMDgsIDIzMDEzLCAyMzAxNywgMjMwMjIsIDIzMDI2LCAKLSAgICAyMzAzMSwgMjMwMzUsIDIzMDQwLCAyMzA0NCwgMjMwNDksIDIzMDUzLCAyMzA1OCwgMjMwNjIsIDIzMDY3LCAyMzA3MywgCi0gICAgMjMwNzcsIDIzMDgxLCAyMzA4NywgMjMwOTMsIDIzMDk5LCAyMzEwNSwgMjMxMDksIDIzMTEzLCAyMzExNywgMjMxMjEsIAotICAgIDIzMTI1LCAyMzEyOSwgMjMxMzUsIDIzMTM5LCAyMzE0MywgMjMxNDcsIDIzMTUyLCAyMzE1NiwgMjMxNjEsIDIzMTY1LCAKLSAgICAyMzE3MCwgMjMxNzQsIDIzMTc5LCAyMzE4MywgMjMxODgsIDIzMTkyLCAyMzE5NywgMjMyMDEsIDIzMjA2LCAyMzIxMiwgCi0gICAgMjMyMTYsIDIzMjIyLCAyMzIyNiwgMjMyMzAsIDIzMjM0LCAyMzIzOCwgMjMyNDIsIDIzMjQ2LCAyMzI1MiwgMjMyNTUsIAotICAgIDIzMjU5LCAyMzI2MywgMjMyNjgsIDIzMjcyLCAyMzI3NywgMjMyODEsIDIzMjg2LCAyMzI5MCwgMjMyOTUsIDIzMjk5LCAKLSAgICAyMzMwNCwgMjMzMDgsIDIzMzEzLCAyMzMxNywgMjMzMjIsIDIzMzI4LCAyMzMzMSwgMjMzMzUsIDIzMzM5LCAyMzM0NCwgCi0gICAgMjMzNDksIDIzMzUzLCAyMzM1NywgMjMzNjEsIDIzMzY1LCAyMzM2OSwgMjMzNzMsIDIzMzc5LCAyMzM4MiwgMjMzODYsIAotICAgIDIzMzkwLCAyMzM5NSwgMjMzOTksIDIzNDA0LCAyMzQwOCwgMjM0MTMsIDIzNDE5LCAyMzQyMywgMjM0MjgsIDIzNDMyLCAKLSAgICAyMzQzNiwgMjM0NDAsIDIzNDQ0LCAyMzQ0OCwgMjM0NTIsIDIzNDU2LCAyMzQ2MiwgMjM0NjYsIDIzNDcwLCAyMzQ3NCwgCi0gICAgMjM0NzksIDIzNDgzLCAyMzQ4OCwgMjM0OTIsIDIzNDk3LCAyMzUwMSwgMjM1MDYsIDIzNTEwLCAyMzUxNSwgMjM1MTksIAotICAgIDIzNTI0LCAyMzUyOCwgMjM1MzMsIDIzNTM2LCAyMzU0MCwgMjM1NDQsIDIzNTQ4LCAyMzU1MiwgMjM1NTYsIDIzNTYwLCAKLSAgICAyMzU2NCwgMjM1NjgsIDIzNTc0LCAyMzU3NywgMjM1ODEsIDIzNTg1LCAyMzU5MCwgMjM1OTQsIDIzNTk5LCAyMzYwMywgCi0gICAgMjM2MDgsIDIzNjEyLCAyMzYxNywgMjM2MjEsIDIzNjI2LCAyMzYzMCwgMjM2MzUsIDIzNjM5LCAyMzY0NCwgMjM2NTAsIAotICAgIDIzNjU0LCAyMzY2MCwgMjM2NjQsIDIzNjcwLCAyMzY3NiwgMjM2ODIsIDIzNjg4LCAyMzY5NCwgMjM3MDAsIDIzNzA2LCAKLSAgICAyMzcxMiwgMjM3MTYsIDIzNzIwLCAyMzcyNCwgMjM3MjgsIDIzNzMyLCAyMzczNiwgMjM3NDAsIDIzNzQ0LCAyMzc0OSwgCi0gICAgMjM3NTMsIDIzNzU4LCAyMzc2MiwgMjM3NjcsIDIzNzcxLCAyMzc3NiwgMjM3ODAsIDIzNzg1LCAyMzc4OSwgMjM3OTQsIAotICAgIDIzNzk4LCAyMzgwMywgMjM4MDcsIDIzODExLCAyMzgxNSwgMjM4MTksIDIzODIzLCAyMzgyNywgMjM4MzEsIDIzODM3LCAKLSAgICAyMzg0MCwgMjM4NDQsIDIzODQ4LCAyMzg1MywgMjM4NTcsIDIzODYyLCAyMzg2NiwgMjM4NzEsIDIzODc1LCAyMzg4MCwgCi0gICAgMjM4ODQsIDIzODg5LCAyMzg5MywgMjM4OTgsIDIzOTAyLCAyMzkwNywgMjM5MTMsIDIzOTE3LCAyMzkyMywgMjM5MjgsIAotICAgIDIzOTM0LCAyMzkzOCwgMjM5NDQsIDIzOTQ5LCAyMzk1MywgMjM5NTcsIDIzOTYxLCAyMzk2NSwgMjM5NjksIDIzOTc0LCAKLSAgICAyMzk3NywgMjM5ODEsIDIzOTg2LCAyMzk5MCwgMjM5OTUsIDIzOTk4LCAyNDAwMiwgMjQwMDYsIDI0MDEwLCAyNDAxNCwgCi0gICAgMjQwMTgsIDI0MDIyLCAyNDAyNiwgMjQwMzAsIDI0MDM0LCAyNDAzOCwgMjQwNDIsIDI0MDQ3LCAyNDA1MSwgMjQwNTUsIAotICAgIDI0MDYxLCAyNDA2NSwgMjQwNzEsIDI0MDc1LCAyNDA4MSwgMjQwODUsIDI0MDg5LCAyNDA5MywgMjQwOTcsIDI0MTAxLCAKLSAgICAyNDEwNiwgMjQxMTAsIDI0MTE0LCAyNDExOCwgMjQxMjIsIDI0MTI2LCAyNDEzMCwgMjQxMzQsIDI0MTM4LCAyNDE0MiwgCi0gICAgMjQxNDYsIDI0MTUyLCAyNDE1OCwgMjQxNjQsIDI0MTcwLCAyNDE3NiwgMjQxODEsIDI0MTg3LCAyNDE5MywgMjQxOTksIAotICAgIDI0MjAzLCAyNDIwNywgMjQyMTEsIDI0MjE1LCAyNDIxOSwgMjQyMjMsIDI0MjI3LCAyNDIzMSwgMjQyMzUsIDI0MjM5LCAKLSAgICAyNDI0MywgMjQyNDcsIDI0MjUxLCAyNDI1NiwgMjQyNjEsIDI0MjY2LCAyNDI3MCwgMjQyNzQsIDI0Mjc4LCAyNDI4MiwgCi0gICAgMjQyODYsIDI0MjkwLCAyNDI5NCwgMjQyOTgsIDI0MzAyLCAyNDMwNiwgMjQzMTIsIDI0MzE4LCAyNDMyNCwgMjQzMzAsIAotICAgIDI0MzM2LCAyNDM0MiwgMjQzNDgsIDI0MzU0LCAyNDM2MCwgMjQzNjQsIDI0MzY4LCAyNDM3MiwgMjQzNzYsIDI0MzgwLCAKLSAgICAyNDM4NCwgMjQzODgsIDI0Mzk0LCAyNDQwMCwgMjQ0MDYsIDI0NDEyLCAyNDQxOCwgMjQ0MjQsIDI0NDMwLCAyNDQzNiwgCi0gICAgMjQ0NDIsIDI0NDQ3LCAyNDQ1MiwgMjQ0NTcsIDI0NDYyLCAyNDQ2OCwgMjQ0NzQsIDI0NDgwLCAyNDQ4NiwgMjQ0OTIsIAotICAgIDI0NDk4LCAyNDUwNCwgMjQ1MDksIDI0NTE1LCAyNDUyMSwgMjQ1MjcsIDI0NTMyLCAyNDUzOCwgMjQ1NDQsIDI0NTUwLCAKLSAgICAyNDU1NSwgMjQ1NjAsIDI0NTY1LCAyNDU3MCwgMjQ1NzUsIDI0NTgwLCAyNDU4NSwgMjQ1OTAsIDI0NTk1LCAyNDYwMCwgCi0gICAgMjQ2MDUsIDI0NjEwLCAyNDYxNCwgMjQ2MTksIDI0NjI0LCAyNDYyOSwgMjQ2MzQsIDI0NjM5LCAyNDY0NCwgMjQ2NDksIAotICAgIDI0NjU0LCAyNDY1OSwgMjQ2NjQsIDI0NjY5LCAyNDY3NCwgMjQ2NzksIDI0Njg0LCAyNDY4OSwgMjQ2OTQsIDI0Njk5LCAKLSAgICAyNDcwNCwgMjQ3MDksIDI0NzE0LCAyNDcxOSwgMjQ3MjQsIDI0NzI5LCAyNDczNCwgMjQ3MzksIDI0NzQ0LCAyNDc0OSwgCi0gICAgMjQ3NTQsIDI0NzU5LCAyNDc2MywgMjQ3NjgsIDI0NzczLCAyNDc3OCwgMjQ3ODMsIDI0Nzg4LCAyNDc5MywgMjQ3OTgsIAotICAgIDI0ODAzLCAyNDgwOCwgMjQ4MTMsIDI0ODE4LCAyNDgyMywgMjQ4MjgsIDI0ODMzLCAyNDgzOCwgMjQ4NDMsIDI0ODQ4LCAKLSAgICAyNDg1MywgMjQ4NTgsIDI0ODYzLCAyNDg2OCwgMjQ4NzMsIDI0ODc4LCAyNDg4MywgMjQ4ODgsIDI0ODkyLCAyNDg5NywgCi0gICAgMjQ5MDIsIDI0OTA3LCAyNDkxMiwgMjQ5MTcsIDI0OTIxLCAyNDkyNiwgMjQ5MzEsIDI0OTM2LCAyNDk0MSwgMjQ5NDYsIAotICAgIDI0OTUwLCAyNDk1NSwgMjQ5NjEsIDI0OTY2LCAyNDk3MSwgMjQ5NzYsIDI0OTgxLCAyNDk4NywgMjQ5OTIsIDI0OTk3LCAKLSAgICAyNTAwMiwgMjUwMDcsIDI1MDEyLCAyNTAxNywgMjUwMjIsIDI1MDI3LCAyNTAzMiwgMjUwMzcsIDI1MDQyLCAyNTA0NywgCi0gICAgMjUwNTIsIDI1MDU3LCAyNTA2MiwgMjUwNjcsIDI1MDcyLCAyNTA3NywgMjUwODIsIDI1MDg3LCAyNTA5MiwgMjUwOTcsIAotICAgIDI1MTAyLCAyNTEwNywgMjUxMTIsIDI1MTE3LCAyNTEyMiwgMjUxMjcsIDI1MTMyLCAyNTEzNywgMjUxNDIsIDI1MTQ3LCAKLSAgICAyNTE1MiwgMjUxNTcsIDI1MTYyLCAyNTE2NywgMjUxNzIsIDI1MTc3LCAyNTE4MiwgMjUxODcsIDI1MTkyLCAyNTE5NywgCi0gICAgMjUyMDIsIDI1MjA3LCAyNTIxMywgMjUyMTgsIDI1MjIzLCAyNTIyOCwgMjUyMzMsIDI1MjM4LCAyNTI0MywgMjUyNDgsIAotICAgIDI1MjUzLCAyNTI1OCwgMjUyNjMsIDI1MjY4LCAyNTI3MiwgMjUyNzcsIDI1MjgyLCAyNTI4NywgMjUyOTIsIDI1Mjk3LCAKLSAgICAyNTMwMiwgMjUzMDcsIDI1MzEyLCAyNTMxNywgMjUzMjIsIDI1MzI3LCAyNTMzMiwgMjUzMzcsIDI1MzQyLCAyNTM0NywgCi0gICAgMjUzNTIsIDI1MzU3LCAyNTM2MiwgMjUzNjcsIDI1MzcyLCAyNTM3NywgMjUzODIsIDI1Mzg3LCAyNTM5MiwgMjUzOTcsIAotICAgIDI1NDAyLCAyNTQwOCwgMjU0MTIsIDI1NDE2LCAyNTQyMCwgMjU0MjQsIDI1NDI4LCAyNTQzMiwgMjU0MzYsIDI1NDQwLCAKLSAgICAyNTQ0NiwgMjU0NTIsIDI1NDU4LCAyNTQ2NCwgMjU0NzAsIDI1NDc2LCAyNTQ4MiwgMjU0ODksIDI1NDk1LCAyNTUwMCwgCi0gICAgMjU1MDUsIDI1NTEwLCAyNTUxNSwgMjU1MjAsIDI1NTI1LCAyNTUzMCwgMjU1MzUsIDI1NTQwLCAyNTU0NSwgMjU1NTAsIAotICAgIDI1NTU1LCAyNTU2MCwgMjU1NjUsIDI1NTcwLCAyNTU3NSwgMjU1ODAsIDI1NTg1LCAyNTU5MCwgMjU1OTUsIDI1NjAwLCAKLSAgICAyNTYwNSwgMjU2MTAsIDI1NjE1LCAyNTYyMCwgMjU2MjUsIDI1NjMwLCAyNTYzNSwgMCwgMCwgMCwgMjU2NDIsIDI1NjUyLCAKLSAgICAyNTY1NiwgMjU2NjMsIDI1NjY3LCAyNTY3MSwgMjU2NzUsIDI1NjgzLCAyNTY4NywgMjU2OTIsIDI1Njk3LCAyNTcwMiwgCi0gICAgMjU3MDYsIDI1NzExLCAyNTcxNiwgMjU3MTksIDI1NzIzLCAyNTcyNywgMjU3MzYsIDI1NzQwLCAyNTc0NCwgMjU3NTAsIAotICAgIDI1NzU0LCAyNTc1OCwgMjU3NjYsIDI1NzcwLCAyNTc3OCwgMjU3ODQsIDI1NzkwLCAyNTc5NiwgMjU4MDIsIDI1ODEyLCAKLSAgICAyNTgxOCwgMjU4MjIsIDI1ODMxLCAyNTgzNCwgMjU4NDAsIDI1ODQ0LCAyNTg1MCwgMjU4NTUsIDI1ODYxLCAyNTg2OSwgCi0gICAgMjU4NzUsIDI1ODgxLCAyNTg4OSwgMjU4OTUsIDI1ODk5LCAyNTkwMywgMjU5MTMsIDI1OTE5LCAyNTkyMywgMjU5MzMsIAotICAgIDI1OTM5LCAyNTk0MywgMjU5NDcsIDI1OTU0LCAyNTk2MSwgMjU5NjYsIDI1OTcxLCAyNTk4MCwgMjU5ODQsIDI1OTg4LCAKLSAgICAyNTk5MiwgMjYwMDAsIDI2MDA3LCAyNjAxMSwgMjYwMTUsIDI2MDE5LCAyNjAyMywgMjYwMjcsIDI2MDMxLCAyNjAzNSwgCi0gICAgMjYwMzksIDI2MDQzLCAyNjA0NywgMjYwNTEsIDI2MDU2LCAyNjA2MSwgMjYwNjYsIDI2MDcwLCAyNjA3NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwNzgsIDI2MDgyLCAyNjA4NiwgMjYwOTAsIDI2MDk0LCAKLSAgICAyNjA5OSwgMjYxMDQsIDI2MTA5LCAyNjExNCwgMjYxMTgsIDI2MTIyLCAyNjEyNywgMjYxMzEsIDAsIDI2MTM1LCAyNjE0MCwgCi0gICAgMjYxNDUsIDI2MTQ5LCAyNjE1MywgMjYxNTgsIDI2MTYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjE2OCwgMjYxNzIsIDI2MTc2LCAyNjE4MCwgMjYxODQsIDI2MTg5LCAyNjE5NCwgMjYxOTksIDI2MjA0LCAyNjIwOCwgCi0gICAgMjYyMTIsIDI2MjE3LCAyNjIyMSwgMjYyMjUsIDI2MjI5LCAyNjIzNCwgMjYyMzksIDI2MjQzLCAyNjI0NywgMjYyNTIsIAotICAgIDI2MjU3LCAyNjI2MiwgMjYyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MjczLCAyNjI3NywgMjYyODEsIAotICAgIDI2Mjg1LCAyNjI4OSwgMjYyOTQsIDI2Mjk5LCAyNjMwNCwgMjYzMDksIDI2MzEzLCAyNjMxNywgMjYzMjIsIDI2MzI2LCAKLSAgICAyNjMzMCwgMjYzMzQsIDI2MzM5LCAyNjM0NCwgMjYzNDgsIDI2MzUyLCAyNjM1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMjYzNjIsIDI2MzY2LCAyNjM3MCwgMjYzNzQsIDI2Mzc4LCAyNjM4MywgMjYzODgsIDI2MzkzLCAKLSAgICAyNjM5OCwgMjY0MDIsIDI2NDA2LCAyNjQxMSwgMjY0MTUsIDAsIDI2NDE5LCAyNjQyNCwgMjY0MjksIDAsIDI2NDMzLCAKLSAgICAyNjQzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0NDMsIDI2NDQ2LCAyNjQ1MCwgMjY0NTQsIAotICAgIDI2NDU4LCAyNjQ2MiwgMjY0NjYsIDI2NDcwLCAyNjQ3NCwgMjY0NzgsIDI2NDgyLCAyNjQ4NiwgMjY0OTAsIDI2NDk0LCAKLSAgICAyNjQ5OCwgMjY1MDIsIDI2NTA2LCAyNjUxMCwgMjY1MTMsIDI2NTE3LCAyNjUyMSwgMjY1MjUsIDI2NTI5LCAyNjUzMywgCi0gICAgMjY1MzcsIDI2NTQxLCAyNjU0NSwgMjY1NDksIDI2NTUzLCAyNjU1NywgMjY1NjEsIDI2NTY1LCAyNjU2OCwgMjY1NzEsIAotICAgIDI2NTc1LCAyNjU3OSwgMjY1ODUsIDI2NTkxLCAyNjU5NywgMjY2MDMsIDI2NjA5LCAyNjYxNSwgMjY2MjEsIDI2NjI3LCAKLSAgICAyNjYzMywgMjY2MzksIDI2NjQ1LCAyNjY1MSwgMjY2NTcsIDI2NjYzLCAyNjY3MiwgMjY2ODEsIDI2Njg3LCAyNjY5MywgCi0gICAgMjY2OTksIDI2NzA0LCAyNjcwOCwgMjY3MTMsIDI2NzE4LCAyNjcyMywgMjY3MjcsIDI2NzMyLCAyNjczNywgMjY3NDIsIAotICAgIDI2NzQ2LCAyNjc1MSwgMjY3NTUsIDI2NzYwLCAyNjc2NSwgMjY3NzAsIDI2Nzc1LCAyNjc3OSwgMjY3ODMsIDI2Nzg3LCAKLSAgICAyNjc5MSwgMjY3OTUsIDI2Nzk5LCAyNjgwMywgMjY4MDcsIDI2ODExLCAyNjgxNSwgMjY4MjEsIDI2ODI1LCAyNjgyOSwgCi0gICAgMjY4MzMsIDI2ODM3LCAyNjg0MSwgMjY4NDksIDI2ODU1LCAyNjg1OSwgMjY4NjUsIDI2ODY5LCAyNjg3NSwgMjY4NzksIDAsIAotICAgIDAsIDI2ODgzLCAyNjg4NywgMjY4OTAsIDI2ODkzLCAyNjg5NiwgMjY4OTksIDI2OTAyLCAyNjkwNSwgMjY5MDgsIDI2OTExLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjkxNCwgMjY5MjIsIDI2OTMwLCAyNjkzOCwgMjY5NDYsIDI2OTU0LCAyNjk2MiwgMjY5NzAsIAotICAgIDI2OTc4LCAyNjk4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5OTQsIDI2OTk3LCAyNzAwMCwgMjcwMDMsIDI3MDA4LCAyNzAxMSwgCi0gICAgMjcwMTYsIDI3MDIzLCAyNzAzMSwgMjcwMzYsIDI3MDQzLCAyNzA0NiwgMjcwNTMsIDI3MDYwLCAyNzA2NywgMCwgMjcwNzEsIAotICAgIDI3MDc1LCAyNzA3OCwgMjcwODEsIDI3MDg0LCAyNzA4NywgMjcwOTAsIDI3MDkzLCAyNzA5NiwgMjcwOTksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDI3MTAyLCAyNzEwNSwgMjcxMDgsIDI3MTExLCAyNzExNCwgMjcxMTcsIDI3MTIxLCAyNzEyNSwgMjcxMjksIAotICAgIDI3MTMyLCAyNzEzNiwgMjcxNDAsIDI3MTQzLCAyNzE0NywgMjcxNTEsIDI3MTU0LCAyNzE1OCwgMjcxNjEsIDI3MTY1LCAKLSAgICAyNzE2OSwgMjcxNzMsIDI3MTc3LCAyNzE4MSwgMjcxODQsIDI3MTg3LCAyNzE5MSwgMjcxOTUsIDI3MTk4LCAyNzIwMiwgCi0gICAgMjcyMDYsIDI3MjEwLCAyNzIxNCwgMjcyMTgsIDI3MjIyLCAyNzIyNiwgMjcyMzAsIDI3MjM3LCAyNzI0MiwgMjcyNDcsIAotICAgIDI3MjUyLCAyNzI1NywgMjcyNjMsIDI3MjY5LCAyNzI3NSwgMjcyODEsIDI3Mjg2LCAyNzI5MiwgMjcyOTgsIDI3MzAzLCAKLSAgICAyNzMwOSwgMjczMTUsIDI3MzIxLCAyNzMyNywgMjczMzMsIDI3MzM4LCAyNzM0NCwgMjczNDksIDI3MzU1LCAyNzM2MSwgCi0gICAgMjczNjcsIDI3MzczLCAyNzM3OSwgMjczODQsIDI3Mzg5LCAyNzM5NSwgMjc0MDEsIDI3NDA2LCAyNzQxMiwgMjc0MTcsIAotICAgIDI3NDIzLCAyNzQyOCwgMjc0MzMsIDI3NDM5LCAyNzQ0NSwgMjc0NTEsIDI3NDU3LCAyNzQ2MywgMjc0NjksIDI3NDc1LCAKLSAgICAyNzQ4MSwgMjc0ODcsIDI3NDkzLCAyNzQ5OSwgMjc1MDUsIDI3NTEwLCAyNzUxNSwgMjc1MjAsIDI3NTI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNzUzMiwgMjc1NDEsIDI3NTUwLCAyNzU1OCwgMjc1NjYsIDI3NTc2LCAyNzU4NCwgMjc1OTMsIAotICAgIDI3NjAwLCAyNzYwNywgMjc2MTQsIDI3NjIyLCAyNzYzMCwgMjc2MzgsIDI3NjQ2LCAyNzY1NCwgMjc2NjIsIDI3NjcwLCAKLSAgICAyNzY3OCwgMjc2ODUsIDI3NjkzLCAyNzcwMSwgMjc3MDksIDI3NzE3LCAyNzcyNSwgMjc3MzUsIDI3NzQ1LCAyNzc1NSwgCi0gICAgMjc3NjUsIDI3Nzc1LCAyNzc4NSwgMjc3OTUsIDI3ODA1LCAyNzgxNSwgMjc4MjUsIDI3ODM1LCAyNzg0NSwgMjc4NTUsIAotICAgIDI3ODY1LCAyNzg3MywgMjc4ODEsIDI3ODkxLCAyNzg5OSwgMCwgMCwgMCwgMCwgMCwgMjc5MDksIDI3OTEzLCAyNzkxNywgCi0gICAgMjc5MjEsIDI3OTI1LCAyNzkyOSwgMjc5MzMsIDI3OTM3LCAyNzk0MSwgMjc5NDUsIDI3OTQ5LCAyNzk1MywgMjc5NTcsIAotICAgIDI3OTYxLCAyNzk2NSwgMjc5NjksIDI3OTczLCAyNzk3NywgMjc5ODEsIDI3OTg1LCAyNzk4OSwgMjc5OTMsIDI3OTk3LCAKLSAgICAyODAwMSwgMjgwMDcsIDI4MDExLCAyODAxNywgMjgwMjEsIDI4MDI3LCAyODAzMSwgMjgwMzcsIDI4MDQxLCAyODA0NSwgCi0gICAgMjgwNDksIDI4MDUzLCAyODA1NywgMjgwNjEsIDI4MDY3LCAyODA3MywgMjgwNzksIDI4MDg1LCAyODA5MCwgMjgwOTYsIAotICAgIDI4MTAyLCAyODEwOCwgMjgxMTQsIDI4MTIwLCAyODEyNiwgMjgxMzMsIDI4MTM5LCAyODE0NCwgMjgxNDksIDI4MTUzLCAKLSAgICAyODE1NywgMjgxNjEsIDI4MTY1LCAyODE2OSwgMjgxNzMsIDI4MTc3LCAyODE4MywgMjgxODksIDI4MTk1LCAyODIwMCwgCi0gICAgMjgyMDcsIDI4MjEyLCAyODIxNywgMjgyMjMsIDI4MjI4LCAyODIzNSwgMjgyNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI4MjQ5LCAyODI1NSwgMjgyNTksIDI4MjY0LCAyODI2OSwgMjgyNzQsIDI4Mjc5LCAyODI4NCwgMjgyODksIAotICAgIDI4Mjk0LCAyODI5OSwgMjgzMDQsIDI4MzA5LCAyODMxNCwgMjgzMTksIDI4MzI0LCAyODMyOCwgMjgzMzIsIDI4MzM3LCAKLSAgICAyODM0MiwgMjgzNDcsIDI4MzUxLCAyODM1NSwgMjgzNTksIDI4MzY0LCAyODM2OSwgMjgzNzQsIDI4Mzc5LCAyODM4MywgMCwgCi0gICAgMCwgMCwgMjgzODcsIDI4MzkyLCAyODM5NywgMjg0MDIsIDI4NDA4LCAyODQxNCwgMjg0MjAsIDI4NDI2LCAyODQzMSwgCi0gICAgMjg0MzYsIDI4NDQyLCAyODQ0OCwgMCwgMCwgMCwgMCwgMjg0NTUsIDI4NDYwLCAyODQ2NiwgMjg0NzIsIDI4NDc4LCAKLSAgICAyODQ4MywgMjg0ODgsIDI4NDkzLCAyODQ5OCwgMjg1MDQsIDI4NTA5LCAyODUxNCwgMCwgMCwgMCwgMCwgMjg1MTksIDAsIDAsIAotICAgIDAsIDI4NTI0LCAyODUyOSwgMjg1MzQsIDI4NTM5LCAyODU0MywgMjg1NDcsIDI4NTUxLCAyODU1NSwgMjg1NTksIDI4NTYzLCAKLSAgICAyODU2NywgMjg1NzEsIDI4NTc1LCAyODU4MCwgMjg1ODYsIDI4NTkyLCAyODU5OCwgMjg2MDMsIDI4NjA4LCAyODYxNCwgCi0gICAgMjg2MjAsIDI4NjI2LCAyODYzMSwgMjg2MzcsIDI4NjQyLCAyODY0OCwgMjg2NTQsIDI4NjU5LCAyODY2NSwgMjg2NzEsIAotICAgIDI4Njc3LCAyODY4MiwgMjg2ODcsIDI4NjkyLCAyODY5OCwgMjg3MDQsIDI4NzA5LCAyODcxNSwgMjg3MjAsIDI4NzI2LCAKLSAgICAyODczMSwgMjg3MzcsIDAsIDAsIDI4NzQzLCAyODc0OSwgMjg3NTUsIDI4NzYxLCAyODc2NywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjg3NzMsIDI4NzgwLCAyODc4NywgMjg3OTMsIDI4ODAwLCAyODgwNywgMjg4MTMsIDI4ODIwLCAKLSAgICAyODgyNywgMjg4MzQsIDI4ODQwLCAyODg0NiwgMjg4NTMsIDI4ODU5LCAyODg2NSwgMjg4NzIsIDI4ODc5LCAyODg4NSwgCi0gICAgMjg4OTIsIDI4ODk5LCAyODkwNSwgMjg5MTEsIDI4OTE4LCAyODkyNCwgMjg5MzAsIDI4OTM3LCAyODk0MywgMjg5NTAsIAotICAgIDI4OTU3LCAyODk2NCwgMjg5NzEsIDI4OTc4LCAyODk4NSwgMjg5OTEsIDI4OTk4LCAyOTAwNSwgMjkwMTEsIDI5MDE4LCAKLSAgICAyOTAyNSwgMjkwMzIsIDI5MDM5LCAyOTA0NiwgMjkwNTMsIDI5MDYwLCAwLCAwLCAwLCAwLCAyOTA2NywgMjkwNzUsIAotICAgIDI5MDgyLCAyOTA4OSwgMjkwOTUsIDI5MTAyLCAyOTEwOCwgMjkxMTUsIDI5MTIxLCAyOTEyOCwgMjkxMzUsIDI5MTQyLCAKLSAgICAyOTE0OSwgMjkxNTYsIDI5MTYzLCAyOTE3MCwgMjkxNzcsIDI5MTg0LCAyOTE5MSwgMjkxOTgsIDI5MjA1LCAyOTIxMSwgCi0gICAgMjkyMTgsIDI5MjI1LCAyOTIzMiwgMjkyMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MjQ0LCAyOTI1MCwgMjkyNTUsIDI5MjYwLCAKLSAgICAyOTI2NSwgMjkyNzAsIDI5Mjc1LCAyOTI4MCwgMjkyODUsIDI5MjkwLCAyOTI5NSwgMCwgMCwgMCwgMjkzMDEsIDI5MzA3LCAKLSAgICAyOTMxMywgMjkzMTcsIDI5MzIzLCAyOTMyOSwgMjkzMzUsIDI5MzQxLCAyOTM0NywgMjkzNTMsIDI5MzU5LCAyOTM2NSwgCi0gICAgMjkzNzEsIDI5Mzc3LCAyOTM4MywgMjkzODksIDI5Mzk1LCAyOTQwMSwgMjk0MDcsIDI5NDExLCAyOTQxNywgMjk0MjMsIAotICAgIDI5NDI5LCAyOTQzNSwgMjk0NDEsIDI5NDQ3LCAyOTQ1MywgMjk0NTksIDI5NDY1LCAyOTQ3MSwgMjk0NzcsIDI5NDgzLCAKLSAgICAyOTQ4OSwgMjk0OTUsIDI5NTAxLCAyOTUwNSwgMjk1MTAsIDI5NTE1LCAyOTUyMCwgMjk1MjQsIDI5NTI5LCAyOTUzMywgCi0gICAgMjk1MzgsIDI5NTQzLCAyOTU0OCwgMjk1NTIsIDI5NTU3LCAyOTU2MiwgMjk1NjcsIDI5NTcyLCAyOTU3NywgMjk1ODEsIAotICAgIDI5NTg1LCAyOTU5MCwgMjk1OTUsIDI5NTk5LCAyOTYwMywgMjk2MDcsIDI5NjEyLCAyOTYxNywgMjk2MjIsIDI5NjI3LCAwLCAKLSAgICAwLCAyOTYzMywgMjk2MzcsIDI5NjQ0LCAyOTY0OSwgMjk2NTUsIDI5NjYxLCAyOTY2NiwgMjk2NzIsIDI5Njc4LCAyOTY4MywgCi0gICAgMjk2ODksIDI5Njk1LCAyOTcwMSwgMjk3MDYsIDI5NzEyLCAyOTcxNywgMjk3MjIsIDI5NzI4LCAyOTczMywgMjk3MzksIAotICAgIDI5NzQ0LCAyOTc1MCwgMjk3NTYsIDI5NzYyLCAyOTc2OCwgMjk3NzIsIDI5Nzc3LCAyOTc4MiwgMjk3ODgsIDI5Nzk0LCAKLSAgICAyOTc5OSwgMjk4MDUsIDI5ODExLCAyOTgxNSwgMjk4MjAsIDI5ODI1LCAyOTgyOSwgMjk4MzQsIDI5ODM5LCAyOTg0NCwgCi0gICAgMjk4NDksIDI5ODU1LCAyOTg2MSwgMjk4NjYsIDI5ODcxLCAyOTg3NiwgMjk4ODAsIDI5ODg1LCAyOTg4OSwgMjk4OTQsIAotICAgIDI5ODk4LCAyOTkwMywgMjk5MDgsIDI5OTEzLCAyOTkxOCwgMjk5MjQsIDI5OTMwLCAyOTkzNywgMjk5NDcsIDI5OTU2LCAKLSAgICAyOTk2MywgMjk5NjksIDI5OTc5LCAyOTk4NCwgMjk5OTAsIDAsIDI5OTk1LCAzMDAwMCwgMzAwMDUsIDMwMDEzLCAzMDAxOSwgCi0gICAgMzAwMjcsIDMwMDMyLCAzMDAzOCwgMzAwNDQsIDMwMDUwLCAzMDA1NSwgMzAwNjEsIDMwMDY2LCAzMDA3MywgMzAwNzksIAotICAgIDMwMDg0LCAzMDA5MCwgMzAwOTYsIDMwMTAyLCAzMDEwOSwgMzAxMTYsIDMwMTIzLCAzMDEyOCwgMzAxMzMsIDMwMTQwLCAKLSAgICAzMDE0NywgMzAxNTQsIDMwMTYxLCAzMDE2OCwgMCwgMCwgMzAxNzUsIDMwMTgyLCAzMDE4OSwgMzAxOTUsIDMwMjAxLCAKLSAgICAzMDIwNywgMzAyMTMsIDMwMjE5LCAzMDIyNSwgMzAyMzEsIDMwMjM3LCAwLCAwLCAwLCAwLCAwLCAwLCAzMDI0MywgMzAyNDksIAotICAgIDMwMjU0LCAzMDI1OSwgMzAyNjQsIDMwMjY5LCAzMDI3NCwgMzAyNzksIDMwMjg0LCAzMDI4OSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzAyOTQsIDMwMjk5LCAzMDMwNCwgMzAzMDksIDMwMzE0LCAzMDMxOSwgMzAzMjQsIDMwMzMzLCAzMDM0MCwgMzAzNDUsIAotICAgIDMwMzUwLCAzMDM1NSwgMzAzNjAsIDMwMzY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODI4OCwgMTgyOTEsIDE4Mjk1LCAxODI5OSwgMTgzMDMsIAorICAgIDE4MzA3LCAxODMxMSwgMTgzMTUsIDE4MzE5LCAxODMyMywgMTgzMjcsIDE4MzMxLCAxODMzNSwgMTgzMzksIDE4MzQzLCAKKyAgICAxODM0NywgMTgzNTEsIDE4MzU1LCAxODM1OSwgMTgzNjMsIDE4MzY3LCAxODM3MCwgMTgzNzMsIDE4Mzc3LCAxODM4MSwgCisgICAgMTgzODUsIDE4Mzg4LCAxODM5MSwgMTgzOTQsIDE4Mzk4LCAxODQwMiwgMTg0MDUsIDE4NDA4LCAxODQxMiwgMTg0MTUsIAorICAgIDE4NDIwLCAxODQyMywgMTg0MjcsIDE4NDMwLCAxODQzNCwgMTg0MzcsIDE4NDQyLCAxODQ0NSwgMTg0NDksIDE4NDU2LCAKKyAgICAxODQ2MSwgMTg0NjUsIDE4NDcwLCAxODQ3NCwgMTg0NzksIDE4NDgzLCAxODQ4OCwgMTg0OTUsIDE4NTAxLCAxODUwNiwgCisgICAgMTg1MTAsIDE4NTE0LCAxODUxOCwgMTg1MjIsIDE4NTI2LCAxODUzMSwgMTg1MzYsIDE4NTQyLCAxODU0NywgMTg1NTIsIAorICAgIDE4NTU2LCAxODU1OSwgMTg1NjIsIDE4NTY1LCAxODU2OCwgMTg1NzEsIDE4NTc0LCAxODU3NywgMTg1ODAsIDE4NTgzLCAKKyAgICAxODU4OSwgMTg1OTMsIDE4NTk3LCAxODYwMSwgMTg2MDUsIDE4NjA5LCAxODYxMywgMTg2MTcsIDE4NjIxLCAxODYyNiwgCisgICAgMTg2MzAsIDE4NjM1LCAxODY0MCwgMTg2NDYsIDE4NjUxLCAxODY1NywgMTg2NjMsIDE4NjY5LCAxODY3NSwgMTg2ODEsIAorICAgIDE4Njg4LCAxODY5NSwgMTg3MDMsIDE4NzExLCAxODcyMCwgMTg3MjksIDE4NzQwLCAxODc1MCwgMTg3NjAsIDE4NzcxLCAKKyAgICAxODc4MiwgMTg3OTIsIDE4ODAyLCAxODgxMiwgMTg4MjIsIDE4ODMyLCAxODg0MiwgMTg4NTIsIDE4ODYyLCAxODg3MCwgCisgICAgMTg4NzcsIDE4ODgzLCAxODg5MCwgMTg4OTUsIDE4OTAxLCAxODkwNywgMTg5MTMsIDE4OTE5LCAxODkyNSwgMTg5MzEsIAorICAgIDE4OTM2LCAxODk0MiwgMTg5NDgsIDE4OTU0LCAxODk2MCwgMTg5NjUsIDE4OTczLCAxODk4MCwgMTg5ODYsIDE4OTkzLCAKKyAgICAxOTAwMSwgMTkwMDcsIDE5MDEzLCAxOTAxOSwgMTkwMjUsIDE5MDMzLCAxOTA0MSwgMTkwNTEsIDE5MDU5LCAxOTA2NywgCisgICAgMTkwNzMsIDE5MDc4LCAxOTA4MywgMTkwODgsIDE5MDkzLCAxOTA5OCwgMTkxMDMsIDE5MTA4LCAxOTExMywgMTkxMTgsIAorICAgIDE5MTI0LCAxOTEzMCwgMTkxMzYsIDE5MTQzLCAxOTE0OCwgMTkxNTQsIDE5MTU5LCAxOTE2NCwgMTkxNjksIDE5MTc0LCAKKyAgICAxOTE3OSwgMTkxODQsIDE5MTg5LCAxOTE5NCwgMTkxOTksIDE5MjA0LCAxOTIwOSwgMTkyMTQsIDE5MjE5LCAxOTIyNCwgCisgICAgMTkyMjksIDE5MjM0LCAxOTIzOSwgMTkyNDQsIDE5MjQ5LCAxOTI1NCwgMTkyNTksIDE5MjY0LCAxOTI2OSwgMTkyNzQsIAorICAgIDE5Mjc5LCAxOTI4NCwgMTkyODksIDE5Mjk0LCAxOTI5OSwgMTkzMDQsIDE5MzA5LCAxOTMxNCwgMTkzMTksIDE5MzI0LCAKKyAgICAxOTMyOSwgMTkzMzQsIDE5MzM5LCAwLCAxOTM0NCwgMCwgMCwgMCwgMCwgMCwgMTkzNDksIDAsIDAsIDE5MzU0LCAxOTM1OCwgCisgICAgMTkzNjIsIDE5MzY2LCAxOTM3MCwgMTkzNzQsIDE5Mzc4LCAxOTM4MiwgMTkzODYsIDE5MzkwLCAxOTM5NCwgMTkzOTgsIAorICAgIDE5NDAyLCAxOTQwNiwgMTk0MTAsIDE5NDE0LCAxOTQxOCwgMTk0MjIsIDE5NDI2LCAxOTQzMCwgMTk0MzQsIDE5NDM4LCAKKyAgICAxOTQ0MiwgMTk0NDYsIDE5NDUwLCAxOTQ1NCwgMTk0NTgsIDE5NDYyLCAxOTQ2NiwgMTk0NzAsIDE5NDc0LCAxOTQ3OCwgCisgICAgMTk0ODIsIDE5NDg2LCAxOTQ5MCwgMTk0OTQsIDE5NDk4LCAxOTUwMiwgMTk1MDYsIDE5NTEwLCAxOTUxNCwgMTk1MTgsIAorICAgIDE5NTI0LCAxOTUyOCwgMTk1MzMsIDE5NTM4LCAxOTU0MiwgMTk1NDcsIDE5NTUyLCAxOTU1NiwgMTk1NjAsIDE5NTY0LCAKKyAgICAxOTU2OCwgMTk1NzIsIDE5NTc2LCAxOTU4MCwgMTk1ODQsIDE5NTg4LCAxOTU5MiwgMTk1OTYsIDE5NjAwLCAxOTYwNCwgCisgICAgMTk2MDgsIDE5NjEyLCAxOTYxNiwgMTk2MjAsIDE5NjI0LCAxOTYyOCwgMTk2MzIsIDE5NjM2LCAxOTY0MCwgMTk2NDQsIAorICAgIDE5NjQ4LCAxOTY1MiwgMTk2NTYsIDE5NjYwLCAxOTY2NCwgMTk2NjgsIDE5NjcyLCAxOTY3NiwgMTk2ODAsIDE5Njg0LCAKKyAgICAxOTY4OCwgMTk2OTIsIDE5Njk2LCAxOTcwMCwgMTk3MDQsIDE5NzA4LCAxOTcxMiwgMTk3MTYsIDE5NzIwLCAxOTcyNCwgCisgICAgMTk3MjgsIDE5NzMyLCAxOTczNiwgMTk3NDAsIDE5NzQ0LCAxOTc0OCwgMTk3NTIsIDE5NzU2LCAxOTc2MCwgMTk3NjQsIAorICAgIDE5NzY4LCAxOTc3MiwgMTk3NzYsIDE5NzgwLCAxOTc4NCwgMTk3ODgsIDE5NzkyLCAxOTc5NiwgMTk4MDAsIDE5ODA0LCAKKyAgICAxOTgwOCwgMTk4MTIsIDE5ODE2LCAxOTgyMCwgMTk4MjQsIDE5ODI4LCAxOTgzMiwgMTk4MzYsIDE5ODQwLCAxOTg0NCwgCisgICAgMTk4NDgsIDE5ODUyLCAxOTg1NiwgMTk4NjAsIDE5ODY0LCAxOTg2OCwgMTk4NzIsIDE5ODc2LCAxOTg4MCwgMTk4ODQsIAorICAgIDE5ODg4LCAxOTg5MiwgMTk4OTYsIDE5OTAwLCAxOTkwNCwgMTk5MDgsIDE5OTEyLCAxOTkxNiwgMTk5MjAsIDE5OTI0LCAKKyAgICAxOTkyOCwgMTk5MzIsIDE5OTM2LCAxOTk0MCwgMTk5NDMsIDE5OTQ3LCAxOTk1MCwgMTk5NTQsIDE5OTU4LCAxOTk2MSwgCisgICAgMTk5NjUsIDE5OTY5LCAxOTk3MiwgMTk5NzYsIDE5OTgwLCAxOTk4NCwgMTk5ODgsIDE5OTkxLCAxOTk5NSwgMTk5OTksIAorICAgIDIwMDAzLCAyMDAwNywgMjAwMTEsIDIwMDE1LCAyMDAxOCwgMjAwMjIsIDIwMDI2LCAyMDAzMCwgMjAwMzQsIDIwMDM4LCAKKyAgICAyMDA0MiwgMjAwNDYsIDIwMDUwLCAyMDA1NCwgMjAwNTgsIDIwMDYyLCAyMDA2NiwgMjAwNzAsIDIwMDc0LCAyMDA3OCwgCisgICAgMjAwODIsIDIwMDg2LCAyMDA5MCwgMjAwOTQsIDIwMDk4LCAyMDEwMiwgMjAxMDYsIDIwMTEwLCAyMDExNCwgMjAxMTgsIAorICAgIDIwMTIyLCAyMDEyNiwgMjAxMzAsIDIwMTM0LCAyMDEzOCwgMjAxNDIsIDIwMTQ2LCAyMDE1MCwgMjAxNTQsIDIwMTU4LCAKKyAgICAyMDE2MiwgMjAxNjYsIDIwMTcwLCAyMDE3NCwgMjAxNzgsIDIwMTgyLCAyMDE4NiwgMjAxOTAsIDIwMTk0LCAyMDE5OCwgCisgICAgMjAyMDIsIDIwMjA2LCAyMDIxMCwgMjAyMTQsIDIwMjE4LCAyMDIyMiwgMjAyMjYsIDIwMjMwLCAyMDIzNCwgMjAyMzgsIAorICAgIDIwMjQyLCAyMDI0NiwgMjAyNTAsIDIwMjU0LCAyMDI1OCwgMjAyNjIsIDIwMjY2LCAyMDI3MCwgMjAyNzQsIDIwMjc4LCAKKyAgICAyMDI4MiwgMjAyODYsIDIwMjkwLCAyMDI5NCwgMjAyOTgsIDIwMzAyLCAyMDMwNiwgMjAzMTAsIDIwMzE0LCAyMDMxOCwgCisgICAgMjAzMjIsIDIwMzI2LCAyMDMzMCwgMjAzMzQsIDIwMzM4LCAyMDM0MiwgMjAzNDYsIDIwMzUwLCAyMDM1NCwgMjAzNTgsIAorICAgIDIwMzYyLCAyMDM2NiwgMjAzNzAsIDIwMzc0LCAyMDM3OCwgMjAzODIsIDIwMzg2LCAyMDM5MCwgMjAzOTQsIDIwMzk4LCAKKyAgICAyMDQwMiwgMjA0MDYsIDIwNDEwLCAyMDQxNCwgMjA0MTgsIDIwNDIyLCAyMDQyNiwgMjA0MzAsIDIwNDM0LCAyMDQzOCwgCisgICAgMjA0NDIsIDIwNDQ2LCAyMDQ1MCwgMjA0NTQsIDIwNDU4LCAyMDQ2MiwgMjA0NjYsIDIwNDcwLCAyMDQ3NCwgMjA0NzgsIAorICAgIDIwNDgyLCAyMDQ4NiwgMjA0OTAsIDIwNDk0LCAyMDQ5OCwgMjA1MDIsIDIwNTA2LCAyMDUxMCwgMjA1MTQsIDIwNTE4LCAKKyAgICAyMDUyMiwgMjA1MjYsIDIwNTMwLCAyMDUzNCwgMjA1MzgsIDIwNTQyLCAyMDU0NiwgMjA1NTAsIDIwNTU0LCAyMDU1OCwgCisgICAgMjA1NjIsIDIwNTY2LCAyMDU3MCwgMjA1NzMsIDIwNTc3LCAyMDU4MSwgMjA1ODUsIDIwNTg5LCAyMDU5MywgMjA1OTcsIAorICAgIDIwNjAxLCAyMDYwNSwgMjA2MDksIDIwNjEzLCAyMDYxNywgMjA2MjEsIDIwNjI1LCAyMDYyOSwgMjA2MzMsIDIwNjM3LCAKKyAgICAyMDY0MSwgMjA2NDUsIDIwNjQ5LCAyMDY1MywgMjA2NTcsIDIwNjYxLCAyMDY2NSwgMjA2NjgsIDIwNjcyLCAyMDY3NiwgCisgICAgMjA2ODAsIDIwNjg0LCAyMDY4OCwgMjA2OTIsIDIwNjk2LCAyMDcwMCwgMjA3MDQsIDIwNzA4LCAyMDcxMiwgMjA3MTYsIAorICAgIDIwNzIwLCAyMDcyNCwgMjA3MjgsIDIwNzMxLCAyMDczNSwgMjA3MzksIDIwNzQzLCAyMDc0NywgMjA3NTEsIDIwNzU1LCAKKyAgICAyMDc1OSwgMjA3NjIsIDIwNzY2LCAyMDc3MCwgMjA3NzQsIDIwNzc4LCAyMDc4MiwgMjA3ODYsIDIwNzkwLCAyMDc5NCwgCisgICAgMjA3OTgsIDIwODAyLCAyMDgwNiwgMjA4MTAsIDIwODE0LCAyMDgxOCwgMjA4MjIsIDIwODI2LCAyMDgzMCwgMjA4MzQsIAorICAgIDIwODM4LCAyMDg0MiwgMjA4NDYsIDIwODUwLCAyMDg1NCwgMCwgMjA4NTgsIDIwODYyLCAyMDg2NiwgMjA4NzAsIDAsIDAsIAorICAgIDIwODc0LCAyMDg3OCwgMjA4ODIsIDIwODg2LCAyMDg5MCwgMjA4OTQsIDIwODk4LCAwLCAyMDkwMiwgMCwgMjA5MDYsIAorICAgIDIwOTEwLCAyMDkxNCwgMjA5MTgsIDAsIDAsIDIwOTIyLCAyMDkyNiwgMjA5MzAsIDIwOTM0LCAyMDkzOCwgMjA5NDIsIAorICAgIDIwOTQ2LCAyMDk1MCwgMjA5NTQsIDIwOTU4LCAyMDk2MiwgMjA5NjYsIDIwOTcwLCAyMDk3NCwgMjA5NzgsIDIwOTgyLCAKKyAgICAyMDk4NiwgMjA5OTAsIDIwOTk0LCAyMDk5OCwgMjEwMDIsIDIxMDA2LCAyMTAxMCwgMjEwMTMsIDIxMDE3LCAyMTAyMSwgCisgICAgMjEwMjUsIDIxMDI5LCAyMTAzMywgMjEwMzcsIDIxMDQxLCAyMTA0NSwgMjEwNDksIDIxMDUzLCAyMTA1NywgMjEwNjEsIAorICAgIDIxMDY1LCAyMTA2OSwgMjEwNzMsIDIxMDc3LCAyMTA4MSwgMCwgMjEwODUsIDIxMDg5LCAyMTA5MywgMjEwOTcsIDAsIDAsIAorICAgIDIxMTAxLCAyMTEwNCwgMjExMDgsIDIxMTEyLCAyMTExNiwgMjExMjAsIDIxMTI0LCAyMTEyOCwgMjExMzIsIDIxMTM2LCAKKyAgICAyMTE0MCwgMjExNDQsIDIxMTQ4LCAyMTE1MiwgMjExNTYsIDIxMTYwLCAyMTE2NCwgMjExNjksIDIxMTc0LCAyMTE3OSwgCisgICAgMjExODUsIDIxMTkxLCAyMTE5NiwgMjEyMDEsIDIxMjA3LCAyMTIxMCwgMjEyMTQsIDIxMjE4LCAyMTIyMiwgMjEyMjYsIAorICAgIDIxMjMwLCAyMTIzNCwgMjEyMzgsIDAsIDIxMjQyLCAyMTI0NiwgMjEyNTAsIDIxMjU0LCAwLCAwLCAyMTI1OCwgMjEyNjIsIAorICAgIDIxMjY2LCAyMTI3MCwgMjEyNzQsIDIxMjc4LCAyMTI4MiwgMCwgMjEyODYsIDAsIDIxMjkwLCAyMTI5NCwgMjEyOTgsIAorICAgIDIxMzAyLCAwLCAwLCAyMTMwNiwgMjEzMTAsIDIxMzE0LCAyMTMxOCwgMjEzMjIsIDIxMzI2LCAyMTMzMCwgMjEzMzQsIAorICAgIDIxMzM4LCAyMTM0MywgMjEzNDgsIDIxMzUzLCAyMTM1OSwgMjEzNjUsIDIxMzcwLCAwLCAyMTM3NSwgMjEzNzksIDIxMzgzLCAKKyAgICAyMTM4NywgMjEzOTEsIDIxMzk1LCAyMTM5OSwgMjE0MDMsIDIxNDA3LCAyMTQxMSwgMjE0MTUsIDIxNDE5LCAyMTQyMywgCisgICAgMjE0MjcsIDIxNDMxLCAyMTQzNSwgMjE0MzksIDIxNDQyLCAyMTQ0NiwgMjE0NTAsIDIxNDU0LCAyMTQ1OCwgMjE0NjIsIAorICAgIDIxNDY2LCAyMTQ3MCwgMjE0NzQsIDIxNDc4LCAyMTQ4MiwgMjE0ODYsIDIxNDkwLCAyMTQ5NCwgMjE0OTgsIDIxNTAyLCAKKyAgICAyMTUwNiwgMjE1MTAsIDIxNTE0LCAyMTUxOCwgMjE1MjIsIDIxNTI2LCAyMTUzMCwgMjE1MzQsIDIxNTM4LCAyMTU0MiwgCisgICAgMjE1NDYsIDIxNTUwLCAyMTU1NCwgMjE1NTgsIDIxNTYyLCAyMTU2NiwgMjE1NzAsIDIxNTc0LCAyMTU3OCwgMjE1ODIsIAorICAgIDIxNTg2LCAyMTU5MCwgMjE1OTQsIDIxNTk4LCAwLCAyMTYwMiwgMjE2MDYsIDIxNjEwLCAyMTYxNCwgMCwgMCwgMjE2MTgsIAorICAgIDIxNjIyLCAyMTYyNiwgMjE2MzAsIDIxNjM0LCAyMTYzOCwgMjE2NDIsIDIxNjQ2LCAyMTY1MCwgMjE2NTQsIDIxNjU4LCAKKyAgICAyMTY2MiwgMjE2NjYsIDIxNjcwLCAyMTY3NCwgMjE2NzgsIDIxNjgyLCAyMTY4NiwgMjE2OTAsIDIxNjk0LCAyMTY5OCwgCisgICAgMjE3MDIsIDIxNzA2LCAyMTcxMCwgMjE3MTQsIDIxNzE4LCAyMTcyMiwgMjE3MjYsIDIxNzMwLCAyMTczNCwgMjE3MzgsIAorICAgIDIxNzQyLCAyMTc0NiwgMjE3NTAsIDIxNzU0LCAyMTc1OCwgMjE3NjIsIDIxNzY2LCAyMTc3MCwgMjE3NzQsIDIxNzc4LCAKKyAgICAyMTc4MiwgMjE3ODYsIDIxNzkwLCAyMTc5NCwgMjE3OTgsIDIxODAyLCAyMTgwNiwgMjE4MTAsIDIxODE0LCAyMTgxOCwgCisgICAgMjE4MjIsIDIxODI2LCAyMTgzMCwgMjE4MzQsIDIxODM4LCAyMTg0MiwgMjE4NDUsIDIxODQ5LCAyMTg1MywgMjE4NTcsIAorICAgIDIxODYxLCAyMTg2NSwgMjE4NjksIDIxODczLCAyMTg3NywgMjE4ODEsIDAsIDAsIDIxODg1LCAyMTg5NCwgMjE5MDAsIAorICAgIDIxOTA1LCAyMTkwOSwgMjE5MTIsIDIxOTE3LCAyMTkyMCwgMjE5MjMsIDIxOTI2LCAyMTkzMSwgMjE5MzUsIDIxOTQwLCAKKyAgICAyMTk0MywgMjE5NDYsIDIxOTQ5LCAyMTk1MiwgMjE5NTUsIDIxOTU4LCAyMTk2MSwgMjE5NjQsIDIxOTY3LCAyMTk3MSwgCisgICAgMjE5NzUsIDIxOTc5LCAyMTk4MywgMjE5ODcsIDIxOTkxLCAyMTk5NSwgMjE5OTksIDIyMDAzLCAyMjAwNywgMCwgMCwgMCwgCisgICAgMjIwMTMsIDIyMDE5LCAyMjAyMywgMjIwMjcsIDIyMDMxLCAyMjAzNywgMjIwNDEsIDIyMDQ1LCAyMjA0OSwgMjIwNTUsIAorICAgIDIyMDU5LCAyMjA2MywgMjIwNjcsIDIyMDczLCAyMjA3NywgMjIwODEsIDIyMDg1LCAyMjA5MSwgMjIwOTcsIDIyMTAzLCAKKyAgICAyMjExMSwgMjIxMTcsIDIyMTIzLCAyMjEyOSwgMjIxMzUsIDIyMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjE0NywgMjIxNTAsIAorICAgIDIyMTUzLCAyMjE1NiwgMjIxNTksIDIyMTYyLCAyMjE2NiwgMjIxNzAsIDIyMTczLCAyMjE3NywgMjIxODEsIDIyMTg1LCAKKyAgICAyMjE4OSwgMjIxOTMsIDIyMTk2LCAyMjIwMCwgMjIyMDQsIDIyMjA4LCAyMjIxMiwgMjIyMTYsIDIyMjIwLCAyMjIyNCwgCisgICAgMjIyMjgsIDIyMjMyLCAyMjIzNiwgMjIyNDAsIDIyMjQzLCAyMjI0NywgMjIyNTEsIDIyMjU1LCAyMjI1OSwgMjIyNjIsIAorICAgIDIyMjY2LCAyMjI3MCwgMjIyNzQsIDIyMjc4LCAyMjI4MiwgMjIyODYsIDIyMjkwLCAyMjI5NCwgMjIyOTgsIDIyMzAyLCAKKyAgICAyMjMwNiwgMjIzMTAsIDIyMzE0LCAyMjMxNywgMjIzMjEsIDIyMzI1LCAyMjMyOSwgMjIzMzMsIDIyMzM3LCAyMjM0MSwgCisgICAgMjIzNDUsIDIyMzQ5LCAyMjM1MywgMjIzNTcsIDIyMzYxLCAyMjM2NSwgMjIzNjksIDIyMzczLCAyMjM3NywgMjIzODEsIAorICAgIDIyMzg1LCAyMjM4OSwgMjIzOTMsIDIyMzk3LCAyMjQwMSwgMjI0MDUsIDIyNDA5LCAyMjQxMywgMjI0MTcsIDIyNDIxLCAKKyAgICAyMjQyNSwgMjI0MjksIDIyNDMzLCAyMjQzNywgMjI0NDEsIDIyNDQ1LCAyMjQ0OSwgMjI0NTMsIDIyNDU2LCAyMjQ2MCwgCisgICAgMjI0NjQsIDIyNDY4LCAyMjQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI0NzYsIDIyNDgwLCAKKyAgICAyMjQ4MywgMjI0ODcsIDIyNDkwLCAyMjQ5NCwgMjI0OTcsIDIyNTAxLCAyMjUwNywgMjI1MTIsIDIyNTE2LCAyMjUxOSwgCisgICAgMjI1MjMsIDIyNTI3LCAyMjUzMiwgMjI1MzYsIDIyNTQxLCAyMjU0NSwgMjI1NTAsIDIyNTU0LCAyMjU1OSwgMjI1NjMsIAorICAgIDIyNTY4LCAyMjU3NCwgMjI1NzgsIDIyNTgzLCAyMjU4NywgMjI1OTIsIDIyNTk4LCAyMjYwMiwgMjI2MDgsIDIyNjE0LCAKKyAgICAyMjYxOCwgMjI2MjMsIDIyNjMxLCAyMjYzOSwgMjI2NDYsIDIyNjUxLCAyMjY1NiwgMjI2NjUsIDIyNjcyLCAyMjY3OSwgCisgICAgMjI2ODQsIDIyNjkwLCAyMjY5NCwgMjI2OTgsIDIyNzAyLCAyMjcwNiwgMjI3MTAsIDIyNzE0LCAyMjcxOCwgMjI3MjIsIAorICAgIDIyNzI2LCAyMjczMCwgMjI3MzYsIDIyNzQxLCAyMjc0NiwgMjI3NDksIDIyNzUzLCAyMjc1NywgMjI3NjIsIDIyNzY2LCAKKyAgICAyMjc3MSwgMjI3NzUsIDIyNzgwLCAyMjc4NCwgMjI3ODksIDIyNzkzLCAyMjc5OCwgMjI4MDIsIDIyODA3LCAyMjgxMSwgCisgICAgMjI4MTYsIDIyODIyLCAyMjgyNiwgMjI4MzEsIDIyODM2LCAyMjg0MCwgMjI4NDQsIDIyODQ4LCAyMjg1MiwgMjI4NTUsIAorICAgIDIyODU5LCAyMjg2NSwgMjI4NzAsIDIyODc1LCAyMjg3OSwgMjI4ODMsIDIyODg3LCAyMjg5MiwgMjI4OTYsIDIyOTAxLCAKKyAgICAyMjkwNSwgMjI5MTAsIDIyOTEzLCAyMjkxNywgMjI5MjEsIDIyOTI2LCAyMjkzMCwgMjI5MzUsIDIyOTM5LCAyMjk0NCwgCisgICAgMjI5NTAsIDIyOTU0LCAyMjk1OCwgMjI5NjIsIDIyOTY2LCAyMjk3MCwgMjI5NzQsIDIyOTc4LCAyMjk4MiwgMjI5ODYsIAorICAgIDIyOTkwLCAyMjk5NCwgMjMwMDAsIDIzMDAzLCAyMzAwNywgMjMwMTEsIDIzMDE2LCAyMzAyMCwgMjMwMjUsIDIzMDI5LCAKKyAgICAyMzAzNCwgMjMwMzgsIDIzMDQzLCAyMzA0NywgMjMwNTIsIDIzMDU2LCAyMzA2MSwgMjMwNjUsIDIzMDcwLCAyMzA3NiwgCisgICAgMjMwODAsIDIzMDg0LCAyMzA5MCwgMjMwOTYsIDIzMTAyLCAyMzEwOCwgMjMxMTIsIDIzMTE2LCAyMzEyMCwgMjMxMjQsIAorICAgIDIzMTI4LCAyMzEzMiwgMjMxMzgsIDIzMTQyLCAyMzE0NiwgMjMxNTAsIDIzMTU1LCAyMzE1OSwgMjMxNjQsIDIzMTY4LCAKKyAgICAyMzE3MywgMjMxNzcsIDIzMTgyLCAyMzE4NiwgMjMxOTEsIDIzMTk1LCAyMzIwMCwgMjMyMDQsIDIzMjA5LCAyMzIxNSwgCisgICAgMjMyMTksIDIzMjI1LCAyMzIyOSwgMjMyMzMsIDIzMjM3LCAyMzI0MSwgMjMyNDUsIDIzMjQ5LCAyMzI1NSwgMjMyNTgsIAorICAgIDIzMjYyLCAyMzI2NiwgMjMyNzEsIDIzMjc1LCAyMzI4MCwgMjMyODQsIDIzMjg5LCAyMzI5MywgMjMyOTgsIDIzMzAyLCAKKyAgICAyMzMwNywgMjMzMTEsIDIzMzE2LCAyMzMyMCwgMjMzMjUsIDIzMzMxLCAyMzMzNCwgMjMzMzgsIDIzMzQyLCAyMzM0NywgCisgICAgMjMzNTIsIDIzMzU2LCAyMzM2MCwgMjMzNjQsIDIzMzY4LCAyMzM3MiwgMjMzNzYsIDIzMzgyLCAyMzM4NSwgMjMzODksIAorICAgIDIzMzkzLCAyMzM5OCwgMjM0MDIsIDIzNDA3LCAyMzQxMSwgMjM0MTYsIDIzNDIyLCAyMzQyNiwgMjM0MzEsIDIzNDM1LCAKKyAgICAyMzQzOSwgMjM0NDMsIDIzNDQ3LCAyMzQ1MSwgMjM0NTUsIDIzNDU5LCAyMzQ2NSwgMjM0NjksIDIzNDczLCAyMzQ3NywgCisgICAgMjM0ODIsIDIzNDg2LCAyMzQ5MSwgMjM0OTUsIDIzNTAwLCAyMzUwNCwgMjM1MDksIDIzNTEzLCAyMzUxOCwgMjM1MjIsIAorICAgIDIzNTI3LCAyMzUzMSwgMjM1MzYsIDIzNTM5LCAyMzU0MywgMjM1NDcsIDIzNTUxLCAyMzU1NSwgMjM1NTksIDIzNTYzLCAKKyAgICAyMzU2NywgMjM1NzEsIDIzNTc3LCAyMzU4MCwgMjM1ODQsIDIzNTg4LCAyMzU5MywgMjM1OTcsIDIzNjAyLCAyMzYwNiwgCisgICAgMjM2MTEsIDIzNjE1LCAyMzYyMCwgMjM2MjQsIDIzNjI5LCAyMzYzMywgMjM2MzgsIDIzNjQyLCAyMzY0NywgMjM2NTMsIAorICAgIDIzNjU3LCAyMzY2MywgMjM2NjcsIDIzNjczLCAyMzY3OSwgMjM2ODUsIDIzNjkxLCAyMzY5NywgMjM3MDMsIDIzNzA5LCAKKyAgICAyMzcxNSwgMjM3MTksIDIzNzIzLCAyMzcyNywgMjM3MzEsIDIzNzM1LCAyMzczOSwgMjM3NDMsIDIzNzQ3LCAyMzc1MiwgCisgICAgMjM3NTYsIDIzNzYxLCAyMzc2NSwgMjM3NzAsIDIzNzc0LCAyMzc3OSwgMjM3ODMsIDIzNzg4LCAyMzc5MiwgMjM3OTcsIAorICAgIDIzODAxLCAyMzgwNiwgMjM4MTAsIDIzODE0LCAyMzgxOCwgMjM4MjIsIDIzODI2LCAyMzgzMCwgMjM4MzQsIDIzODQwLCAKKyAgICAyMzg0MywgMjM4NDcsIDIzODUxLCAyMzg1NiwgMjM4NjAsIDIzODY1LCAyMzg2OSwgMjM4NzQsIDIzODc4LCAyMzg4MywgCisgICAgMjM4ODcsIDIzODkyLCAyMzg5NiwgMjM5MDEsIDIzOTA1LCAyMzkxMCwgMjM5MTYsIDIzOTIwLCAyMzkyNiwgMjM5MzEsIAorICAgIDIzOTM3LCAyMzk0MSwgMjM5NDcsIDIzOTUyLCAyMzk1NiwgMjM5NjAsIDIzOTY0LCAyMzk2OCwgMjM5NzIsIDIzOTc3LCAKKyAgICAyMzk4MCwgMjM5ODQsIDIzOTg5LCAyMzk5MywgMjM5OTgsIDI0MDAxLCAyNDAwNSwgMjQwMDksIDI0MDEzLCAyNDAxNywgCisgICAgMjQwMjEsIDI0MDI1LCAyNDAyOSwgMjQwMzMsIDI0MDM3LCAyNDA0MSwgMjQwNDUsIDI0MDUwLCAyNDA1NCwgMjQwNTgsIAorICAgIDI0MDY0LCAyNDA2OCwgMjQwNzQsIDI0MDc4LCAyNDA4NCwgMjQwODgsIDI0MDkyLCAyNDA5NiwgMjQxMDAsIDI0MTA0LCAKKyAgICAyNDEwOSwgMjQxMTMsIDI0MTE3LCAyNDEyMSwgMjQxMjUsIDI0MTI5LCAyNDEzMywgMjQxMzcsIDI0MTQxLCAyNDE0NSwgCisgICAgMjQxNDksIDI0MTU1LCAyNDE2MSwgMjQxNjcsIDI0MTczLCAyNDE3OSwgMjQxODQsIDI0MTkwLCAyNDE5NiwgMjQyMDIsIAorICAgIDI0MjA2LCAyNDIxMCwgMjQyMTQsIDI0MjE4LCAyNDIyMiwgMjQyMjYsIDI0MjMwLCAyNDIzNCwgMjQyMzgsIDI0MjQyLCAKKyAgICAyNDI0NiwgMjQyNTAsIDI0MjU0LCAyNDI1OSwgMjQyNjQsIDI0MjY5LCAyNDI3MywgMjQyNzcsIDI0MjgxLCAyNDI4NSwgCisgICAgMjQyODksIDI0MjkzLCAyNDI5NywgMjQzMDEsIDI0MzA1LCAyNDMwOSwgMjQzMTUsIDI0MzIxLCAyNDMyNywgMjQzMzMsIAorICAgIDI0MzM5LCAyNDM0NSwgMjQzNTEsIDI0MzU3LCAyNDM2MywgMjQzNjcsIDI0MzcxLCAyNDM3NSwgMjQzNzksIDI0MzgzLCAKKyAgICAyNDM4NywgMjQzOTEsIDI0Mzk3LCAyNDQwMywgMjQ0MDksIDI0NDE1LCAyNDQyMSwgMjQ0MjcsIDI0NDMzLCAyNDQzOSwgCisgICAgMjQ0NDUsIDI0NDUwLCAyNDQ1NSwgMjQ0NjAsIDI0NDY1LCAyNDQ3MSwgMjQ0NzcsIDI0NDgzLCAyNDQ4OSwgMjQ0OTUsIAorICAgIDI0NTAxLCAyNDUwNywgMjQ1MTIsIDI0NTE4LCAyNDUyNCwgMjQ1MzAsIDI0NTM1LCAyNDU0MSwgMjQ1NDcsIDI0NTUzLCAKKyAgICAyNDU1OCwgMjQ1NjMsIDI0NTY4LCAyNDU3MywgMjQ1NzgsIDI0NTgzLCAyNDU4OCwgMjQ1OTMsIDI0NTk4LCAyNDYwMywgCisgICAgMjQ2MDgsIDI0NjEzLCAyNDYxNywgMjQ2MjIsIDI0NjI3LCAyNDYzMiwgMjQ2MzcsIDI0NjQyLCAyNDY0NywgMjQ2NTIsIAorICAgIDI0NjU3LCAyNDY2MiwgMjQ2NjcsIDI0NjcyLCAyNDY3NywgMjQ2ODIsIDI0Njg3LCAyNDY5MiwgMjQ2OTcsIDI0NzAyLCAKKyAgICAyNDcwNywgMjQ3MTIsIDI0NzE3LCAyNDcyMiwgMjQ3MjcsIDI0NzMyLCAyNDczNywgMjQ3NDIsIDI0NzQ3LCAyNDc1MiwgCisgICAgMjQ3NTcsIDI0NzYyLCAyNDc2NiwgMjQ3NzEsIDI0Nzc2LCAyNDc4MSwgMjQ3ODYsIDI0NzkxLCAyNDc5NiwgMjQ4MDEsIAorICAgIDI0ODA2LCAyNDgxMSwgMjQ4MTYsIDI0ODIxLCAyNDgyNiwgMjQ4MzEsIDI0ODM2LCAyNDg0MSwgMjQ4NDYsIDI0ODUxLCAKKyAgICAyNDg1NiwgMjQ4NjEsIDI0ODY2LCAyNDg3MSwgMjQ4NzYsIDI0ODgxLCAyNDg4NiwgMjQ4OTEsIDI0ODk1LCAyNDkwMCwgCisgICAgMjQ5MDUsIDI0OTEwLCAyNDkxNSwgMjQ5MjAsIDI0OTI0LCAyNDkyOSwgMjQ5MzQsIDI0OTM5LCAyNDk0NCwgMjQ5NDksIAorICAgIDI0OTUzLCAyNDk1OCwgMjQ5NjQsIDI0OTY5LCAyNDk3NCwgMjQ5NzksIDI0OTg0LCAyNDk5MCwgMjQ5OTUsIDI1MDAwLCAKKyAgICAyNTAwNSwgMjUwMTAsIDI1MDE1LCAyNTAyMCwgMjUwMjUsIDI1MDMwLCAyNTAzNSwgMjUwNDAsIDI1MDQ1LCAyNTA1MCwgCisgICAgMjUwNTUsIDI1MDYwLCAyNTA2NSwgMjUwNzAsIDI1MDc1LCAyNTA4MCwgMjUwODUsIDI1MDkwLCAyNTA5NSwgMjUxMDAsIAorICAgIDI1MTA1LCAyNTExMCwgMjUxMTUsIDI1MTIwLCAyNTEyNSwgMjUxMzAsIDI1MTM1LCAyNTE0MCwgMjUxNDUsIDI1MTUwLCAKKyAgICAyNTE1NSwgMjUxNjAsIDI1MTY1LCAyNTE3MCwgMjUxNzUsIDI1MTgwLCAyNTE4NSwgMjUxOTAsIDI1MTk1LCAyNTIwMCwgCisgICAgMjUyMDUsIDI1MjEwLCAyNTIxNiwgMjUyMjEsIDI1MjI2LCAyNTIzMSwgMjUyMzYsIDI1MjQxLCAyNTI0NiwgMjUyNTEsIAorICAgIDI1MjU2LCAyNTI2MSwgMjUyNjYsIDI1MjcxLCAyNTI3NSwgMjUyODAsIDI1Mjg1LCAyNTI5MCwgMjUyOTUsIDI1MzAwLCAKKyAgICAyNTMwNSwgMjUzMTAsIDI1MzE1LCAyNTMyMCwgMjUzMjUsIDI1MzMwLCAyNTMzNSwgMjUzNDAsIDI1MzQ1LCAyNTM1MCwgCisgICAgMjUzNTUsIDI1MzYwLCAyNTM2NSwgMjUzNzAsIDI1Mzc1LCAyNTM4MCwgMjUzODUsIDI1MzkwLCAyNTM5NSwgMjU0MDAsIAorICAgIDI1NDA1LCAyNTQxMSwgMjU0MTUsIDI1NDE5LCAyNTQyMywgMjU0MjcsIDI1NDMxLCAyNTQzNSwgMjU0MzksIDI1NDQzLCAKKyAgICAyNTQ0OSwgMjU0NTUsIDI1NDYxLCAyNTQ2NywgMjU0NzMsIDI1NDc5LCAyNTQ4NSwgMjU0OTIsIDI1NDk4LCAyNTUwMywgCisgICAgMjU1MDgsIDI1NTEzLCAyNTUxOCwgMjU1MjMsIDI1NTI4LCAyNTUzMywgMjU1MzgsIDI1NTQzLCAyNTU0OCwgMjU1NTMsIAorICAgIDI1NTU4LCAyNTU2MywgMjU1NjgsIDI1NTczLCAyNTU3OCwgMjU1ODMsIDI1NTg4LCAyNTU5MywgMjU1OTgsIDI1NjAzLCAKKyAgICAyNTYwOCwgMjU2MTMsIDI1NjE4LCAyNTYyMywgMjU2MjgsIDI1NjMzLCAyNTYzOCwgMCwgMCwgMCwgMjU2NDUsIDI1NjU1LCAKKyAgICAyNTY1OSwgMjU2NjYsIDI1NjcwLCAyNTY3NCwgMjU2NzgsIDI1Njg2LCAyNTY5MCwgMjU2OTUsIDI1NzAwLCAyNTcwNSwgCisgICAgMjU3MDksIDI1NzE0LCAyNTcxOSwgMjU3MjIsIDI1NzI2LCAyNTczMCwgMjU3MzksIDI1NzQzLCAyNTc0NywgMjU3NTMsIAorICAgIDI1NzU3LCAyNTc2MSwgMjU3NjksIDI1NzczLCAyNTc4MSwgMjU3ODcsIDI1NzkzLCAyNTc5OSwgMjU4MDUsIDI1ODE1LCAKKyAgICAyNTgyMSwgMjU4MjUsIDI1ODM0LCAyNTgzNywgMjU4NDMsIDI1ODQ3LCAyNTg1MywgMjU4NTgsIDI1ODY0LCAyNTg3MiwgCisgICAgMjU4NzgsIDI1ODg0LCAyNTg5MiwgMjU4OTgsIDI1OTAyLCAyNTkwNiwgMjU5MTYsIDI1OTIyLCAyNTkyNiwgMjU5MzYsIAorICAgIDI1OTQyLCAyNTk0NiwgMjU5NTAsIDI1OTU3LCAyNTk2NCwgMjU5NjksIDI1OTc0LCAyNTk4MywgMjU5ODcsIDI1OTkxLCAKKyAgICAyNTk5NSwgMjYwMDMsIDI2MDEwLCAyNjAxNCwgMjYwMTgsIDI2MDIyLCAyNjAyNiwgMjYwMzAsIDI2MDM0LCAyNjAzOCwgCisgICAgMjYwNDIsIDI2MDQ2LCAyNjA1MCwgMjYwNTQsIDI2MDU5LCAyNjA2NCwgMjYwNjksIDI2MDczLCAyNjA3NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwODEsIDI2MDg1LCAyNjA4OSwgMjYwOTMsIDI2MDk3LCAKKyAgICAyNjEwMiwgMjYxMDcsIDI2MTEyLCAyNjExNywgMjYxMjEsIDI2MTI1LCAyNjEzMCwgMjYxMzQsIDAsIDI2MTM4LCAyNjE0MywgCisgICAgMjYxNDgsIDI2MTUyLCAyNjE1NiwgMjYxNjEsIDI2MTY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNjE3MSwgMjYxNzUsIDI2MTc5LCAyNjE4MywgMjYxODcsIDI2MTkyLCAyNjE5NywgMjYyMDIsIDI2MjA3LCAyNjIxMSwgCisgICAgMjYyMTUsIDI2MjIwLCAyNjIyNCwgMjYyMjgsIDI2MjMyLCAyNjIzNywgMjYyNDIsIDI2MjQ2LCAyNjI1MCwgMjYyNTUsIAorICAgIDI2MjYwLCAyNjI2NSwgMjYyNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2Mjc2LCAyNjI4MCwgMjYyODQsIAorICAgIDI2Mjg4LCAyNjI5MiwgMjYyOTcsIDI2MzAyLCAyNjMwNywgMjYzMTIsIDI2MzE2LCAyNjMyMCwgMjYzMjUsIDI2MzI5LCAKKyAgICAyNjMzMywgMjYzMzcsIDI2MzQyLCAyNjM0NywgMjYzNTEsIDI2MzU1LCAyNjM2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjYzNjUsIDI2MzY5LCAyNjM3MywgMjYzNzcsIDI2MzgxLCAyNjM4NiwgMjYzOTEsIDI2Mzk2LCAKKyAgICAyNjQwMSwgMjY0MDUsIDI2NDA5LCAyNjQxNCwgMjY0MTgsIDAsIDI2NDIyLCAyNjQyNywgMjY0MzIsIDAsIDI2NDM2LCAKKyAgICAyNjQ0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0NDYsIDI2NDQ5LCAyNjQ1MywgMjY0NTcsIAorICAgIDI2NDYxLCAyNjQ2NSwgMjY0NjksIDI2NDczLCAyNjQ3NywgMjY0ODEsIDI2NDg1LCAyNjQ4OSwgMjY0OTMsIDI2NDk3LCAKKyAgICAyNjUwMSwgMjY1MDUsIDI2NTA5LCAyNjUxMywgMjY1MTYsIDI2NTIwLCAyNjUyNCwgMjY1MjgsIDI2NTMyLCAyNjUzNiwgCisgICAgMjY1NDAsIDI2NTQ0LCAyNjU0OCwgMjY1NTIsIDI2NTU2LCAyNjU2MCwgMjY1NjQsIDI2NTY4LCAyNjU3MSwgMjY1NzQsIAorICAgIDI2NTc4LCAyNjU4MiwgMjY1ODgsIDI2NTk0LCAyNjYwMCwgMjY2MDYsIDI2NjEyLCAyNjYxOCwgMjY2MjQsIDI2NjMwLCAKKyAgICAyNjYzNiwgMjY2NDIsIDI2NjQ4LCAyNjY1NCwgMjY2NjAsIDI2NjY2LCAyNjY3NSwgMjY2ODQsIDI2NjkwLCAyNjY5NiwgCisgICAgMjY3MDIsIDI2NzA3LCAyNjcxMSwgMjY3MTYsIDI2NzIxLCAyNjcyNiwgMjY3MzAsIDI2NzM1LCAyNjc0MCwgMjY3NDUsIAorICAgIDI2NzQ5LCAyNjc1NCwgMjY3NTgsIDI2NzYzLCAyNjc2OCwgMjY3NzMsIDI2Nzc4LCAyNjc4MiwgMjY3ODYsIDI2NzkwLCAKKyAgICAyNjc5NCwgMjY3OTgsIDI2ODAyLCAyNjgwNiwgMjY4MTAsIDI2ODE0LCAyNjgxOCwgMjY4MjQsIDI2ODI4LCAyNjgzMiwgCisgICAgMjY4MzYsIDI2ODQwLCAyNjg0NCwgMjY4NTIsIDI2ODU4LCAyNjg2MiwgMjY4NjgsIDI2ODcyLCAyNjg3OCwgMjY4ODIsIDAsIAorICAgIDAsIDI2ODg2LCAyNjg5MCwgMjY4OTMsIDI2ODk2LCAyNjg5OSwgMjY5MDIsIDI2OTA1LCAyNjkwOCwgMjY5MTEsIDI2OTE0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjkxNywgMjY5MjUsIDI2OTMzLCAyNjk0MSwgMjY5NDksIDI2OTU3LCAyNjk2NSwgMjY5NzMsIAorICAgIDI2OTgxLCAyNjk4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5OTcsIDI3MDAwLCAyNzAwMywgMjcwMDYsIDI3MDExLCAyNzAxNCwgCisgICAgMjcwMTksIDI3MDI2LCAyNzAzNCwgMjcwMzksIDI3MDQ2LCAyNzA0OSwgMjcwNTYsIDI3MDYzLCAyNzA3MCwgMCwgMjcwNzQsIAorICAgIDI3MDc4LCAyNzA4MSwgMjcwODQsIDI3MDg3LCAyNzA5MCwgMjcwOTMsIDI3MDk2LCAyNzA5OSwgMjcxMDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDI3MTA1LCAyNzEwOCwgMjcxMTEsIDI3MTE0LCAyNzExNywgMjcxMjAsIDI3MTI0LCAyNzEyOCwgMjcxMzIsIAorICAgIDI3MTM1LCAyNzEzOSwgMjcxNDMsIDI3MTQ2LCAyNzE1MCwgMjcxNTQsIDI3MTU3LCAyNzE2MSwgMjcxNjQsIDI3MTY4LCAKKyAgICAyNzE3MiwgMjcxNzYsIDI3MTgwLCAyNzE4NCwgMjcxODcsIDI3MTkwLCAyNzE5NCwgMjcxOTgsIDI3MjAxLCAyNzIwNSwgCisgICAgMjcyMDksIDI3MjEzLCAyNzIxNywgMjcyMjEsIDI3MjI1LCAyNzIyOSwgMjcyMzMsIDI3MjQwLCAyNzI0NSwgMjcyNTAsIAorICAgIDI3MjU1LCAyNzI2MCwgMjcyNjYsIDI3MjcyLCAyNzI3OCwgMjcyODQsIDI3Mjg5LCAyNzI5NSwgMjczMDEsIDI3MzA2LCAKKyAgICAyNzMxMiwgMjczMTgsIDI3MzI0LCAyNzMzMCwgMjczMzYsIDI3MzQxLCAyNzM0NywgMjczNTIsIDI3MzU4LCAyNzM2NCwgCisgICAgMjczNzAsIDI3Mzc2LCAyNzM4MiwgMjczODcsIDI3MzkyLCAyNzM5OCwgMjc0MDQsIDI3NDA5LCAyNzQxNSwgMjc0MjAsIAorICAgIDI3NDI2LCAyNzQzMSwgMjc0MzYsIDI3NDQyLCAyNzQ0OCwgMjc0NTQsIDI3NDYwLCAyNzQ2NiwgMjc0NzIsIDI3NDc4LCAKKyAgICAyNzQ4NCwgMjc0OTAsIDI3NDk2LCAyNzUwMiwgMjc1MDgsIDI3NTEzLCAyNzUxOCwgMjc1MjMsIDI3NTI5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyNzUzNSwgMjc1NDQsIDI3NTUzLCAyNzU2MSwgMjc1NjksIDI3NTc5LCAyNzU4NywgMjc1OTYsIAorICAgIDI3NjAzLCAyNzYxMCwgMjc2MTcsIDI3NjI1LCAyNzYzMywgMjc2NDEsIDI3NjQ5LCAyNzY1NywgMjc2NjUsIDI3NjczLCAKKyAgICAyNzY4MSwgMjc2ODgsIDI3Njk2LCAyNzcwNCwgMjc3MTIsIDI3NzIwLCAyNzcyOCwgMjc3MzgsIDI3NzQ4LCAyNzc1OCwgCisgICAgMjc3NjgsIDI3Nzc4LCAyNzc4OCwgMjc3OTgsIDI3ODA4LCAyNzgxOCwgMjc4MjgsIDI3ODM4LCAyNzg0OCwgMjc4NTgsIAorICAgIDI3ODY4LCAyNzg3NiwgMjc4ODQsIDI3ODk0LCAyNzkwMiwgMCwgMCwgMCwgMCwgMCwgMjc5MTIsIDI3OTE2LCAyNzkyMCwgCisgICAgMjc5MjQsIDI3OTI4LCAyNzkzMiwgMjc5MzYsIDI3OTQwLCAyNzk0NCwgMjc5NDgsIDI3OTUyLCAyNzk1NiwgMjc5NjAsIAorICAgIDI3OTY0LCAyNzk2OCwgMjc5NzIsIDI3OTc2LCAyNzk4MCwgMjc5ODQsIDI3OTg4LCAyNzk5MiwgMjc5OTYsIDI4MDAwLCAKKyAgICAyODAwNCwgMjgwMTAsIDI4MDE0LCAyODAyMCwgMjgwMjQsIDI4MDMwLCAyODAzNCwgMjgwNDAsIDI4MDQ0LCAyODA0OCwgCisgICAgMjgwNTIsIDI4MDU2LCAyODA2MCwgMjgwNjQsIDI4MDcwLCAyODA3NiwgMjgwODIsIDI4MDg4LCAyODA5MywgMjgwOTksIAorICAgIDI4MTA1LCAyODExMSwgMjgxMTcsIDI4MTIzLCAyODEyOSwgMjgxMzYsIDI4MTQyLCAyODE0NywgMjgxNTIsIDI4MTU2LCAKKyAgICAyODE2MCwgMjgxNjQsIDI4MTY4LCAyODE3MiwgMjgxNzYsIDI4MTgwLCAyODE4NiwgMjgxOTIsIDI4MTk4LCAyODIwMywgCisgICAgMjgyMTAsIDI4MjE1LCAyODIyMCwgMjgyMjYsIDI4MjMxLCAyODIzOCwgMjgyNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDI4MjUyLCAyODI1OCwgMjgyNjIsIDI4MjY3LCAyODI3MiwgMjgyNzcsIDI4MjgyLCAyODI4NywgMjgyOTIsIAorICAgIDI4Mjk3LCAyODMwMiwgMjgzMDcsIDI4MzEyLCAyODMxNywgMjgzMjIsIDI4MzI3LCAyODMzMSwgMjgzMzUsIDI4MzQwLCAKKyAgICAyODM0NSwgMjgzNTAsIDI4MzU0LCAyODM1OCwgMjgzNjIsIDI4MzY3LCAyODM3MiwgMjgzNzcsIDI4MzgyLCAyODM4NiwgMCwgCisgICAgMCwgMCwgMjgzOTAsIDI4Mzk1LCAyODQwMCwgMjg0MDUsIDI4NDExLCAyODQxNywgMjg0MjMsIDI4NDI5LCAyODQzNCwgCisgICAgMjg0MzksIDI4NDQ1LCAyODQ1MSwgMCwgMCwgMCwgMCwgMjg0NTgsIDI4NDYzLCAyODQ2OSwgMjg0NzUsIDI4NDgxLCAKKyAgICAyODQ4NiwgMjg0OTEsIDI4NDk2LCAyODUwMSwgMjg1MDcsIDI4NTEyLCAyODUxNywgMCwgMCwgMCwgMCwgMjg1MjIsIDAsIDAsIAorICAgIDAsIDI4NTI3LCAyODUzMiwgMjg1MzcsIDI4NTQyLCAyODU0NiwgMjg1NTAsIDI4NTU0LCAyODU1OCwgMjg1NjIsIDI4NTY2LCAKKyAgICAyODU3MCwgMjg1NzQsIDI4NTc4LCAyODU4MywgMjg1ODksIDI4NTk1LCAyODYwMSwgMjg2MDYsIDI4NjExLCAyODYxNywgCisgICAgMjg2MjMsIDI4NjI5LCAyODYzNCwgMjg2NDAsIDI4NjQ1LCAyODY1MSwgMjg2NTcsIDI4NjYyLCAyODY2OCwgMjg2NzQsIAorICAgIDI4NjgwLCAyODY4NSwgMjg2OTAsIDI4Njk1LCAyODcwMSwgMjg3MDcsIDI4NzEyLCAyODcxOCwgMjg3MjMsIDI4NzI5LCAKKyAgICAyODczNCwgMjg3NDAsIDAsIDAsIDI4NzQ2LCAyODc1MiwgMjg3NTgsIDI4NzY0LCAyODc3MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjg3NzYsIDI4NzgzLCAyODc5MCwgMjg3OTYsIDI4ODAzLCAyODgxMCwgMjg4MTYsIDI4ODIzLCAKKyAgICAyODgzMCwgMjg4MzcsIDI4ODQzLCAyODg0OSwgMjg4NTYsIDI4ODYyLCAyODg2OCwgMjg4NzUsIDI4ODgyLCAyODg4OCwgCisgICAgMjg4OTUsIDI4OTAyLCAyODkwOCwgMjg5MTQsIDI4OTIxLCAyODkyNywgMjg5MzMsIDI4OTQwLCAyODk0NiwgMjg5NTMsIAorICAgIDI4OTYwLCAyODk2NywgMjg5NzQsIDI4OTgxLCAyODk4OCwgMjg5OTQsIDI5MDAxLCAyOTAwOCwgMjkwMTQsIDI5MDIxLCAKKyAgICAyOTAyOCwgMjkwMzUsIDI5MDQyLCAyOTA0OSwgMjkwNTYsIDI5MDYzLCAwLCAwLCAwLCAwLCAyOTA3MCwgMjkwNzgsIAorICAgIDI5MDg1LCAyOTA5MiwgMjkwOTgsIDI5MTA1LCAyOTExMSwgMjkxMTgsIDI5MTI0LCAyOTEzMSwgMjkxMzgsIDI5MTQ1LCAKKyAgICAyOTE1MiwgMjkxNTksIDI5MTY2LCAyOTE3MywgMjkxODAsIDI5MTg3LCAyOTE5NCwgMjkyMDEsIDI5MjA4LCAyOTIxNCwgCisgICAgMjkyMjEsIDI5MjI4LCAyOTIzNSwgMjkyNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MjQ3LCAyOTI1MywgMjkyNTgsIDI5MjYzLCAKKyAgICAyOTI2OCwgMjkyNzMsIDI5Mjc4LCAyOTI4MywgMjkyODgsIDI5MjkzLCAyOTI5OCwgMCwgMCwgMCwgMjkzMDQsIDI5MzEwLCAKKyAgICAyOTMxNiwgMjkzMjAsIDI5MzI2LCAyOTMzMiwgMjkzMzgsIDI5MzQ0LCAyOTM1MCwgMjkzNTYsIDI5MzYyLCAyOTM2OCwgCisgICAgMjkzNzQsIDI5MzgwLCAyOTM4NiwgMjkzOTIsIDI5Mzk4LCAyOTQwNCwgMjk0MTAsIDI5NDE0LCAyOTQyMCwgMjk0MjYsIAorICAgIDI5NDMyLCAyOTQzOCwgMjk0NDQsIDI5NDUwLCAyOTQ1NiwgMjk0NjIsIDI5NDY4LCAyOTQ3NCwgMjk0ODAsIDI5NDg2LCAKKyAgICAyOTQ5MiwgMjk0OTgsIDI5NTA0LCAyOTUwOCwgMjk1MTMsIDI5NTE4LCAyOTUyMywgMjk1MjcsIDI5NTMyLCAyOTUzNiwgCisgICAgMjk1NDEsIDI5NTQ2LCAyOTU1MSwgMjk1NTUsIDI5NTYwLCAyOTU2NSwgMjk1NzAsIDI5NTc1LCAyOTU4MCwgMjk1ODQsIAorICAgIDI5NTg4LCAyOTU5MywgMjk1OTgsIDI5NjAyLCAyOTYwNiwgMjk2MTAsIDI5NjE1LCAyOTYyMCwgMjk2MjUsIDI5NjMwLCAwLCAKKyAgICAwLCAyOTYzNiwgMjk2NDAsIDI5NjQ3LCAyOTY1MiwgMjk2NTgsIDI5NjY0LCAyOTY2OSwgMjk2NzUsIDI5NjgxLCAyOTY4NiwgCisgICAgMjk2OTIsIDI5Njk4LCAyOTcwNCwgMjk3MDksIDI5NzE1LCAyOTcyMCwgMjk3MjUsIDI5NzMxLCAyOTczNiwgMjk3NDIsIAorICAgIDI5NzQ3LCAyOTc1MywgMjk3NTksIDI5NzY1LCAyOTc3MSwgMjk3NzUsIDI5NzgwLCAyOTc4NSwgMjk3OTEsIDI5Nzk3LCAKKyAgICAyOTgwMiwgMjk4MDgsIDI5ODE0LCAyOTgxOCwgMjk4MjMsIDI5ODI4LCAyOTgzMiwgMjk4MzcsIDI5ODQyLCAyOTg0NywgCisgICAgMjk4NTIsIDI5ODU4LCAyOTg2NCwgMjk4NjksIDI5ODc0LCAyOTg3OSwgMjk4ODMsIDI5ODg4LCAyOTg5MiwgMjk4OTcsIAorICAgIDI5OTAxLCAyOTkwNiwgMjk5MTEsIDI5OTE2LCAyOTkyMSwgMjk5MjcsIDI5OTMzLCAyOTk0MCwgMjk5NTAsIDI5OTU5LCAKKyAgICAyOTk2NiwgMjk5NzIsIDI5OTgyLCAyOTk4NywgMjk5OTMsIDAsIDI5OTk4LCAzMDAwMywgMzAwMDgsIDMwMDE2LCAzMDAyMiwgCisgICAgMzAwMzAsIDMwMDM1LCAzMDA0MSwgMzAwNDcsIDMwMDUzLCAzMDA1OCwgMzAwNjQsIDMwMDY5LCAzMDA3NiwgMzAwODIsIAorICAgIDMwMDg3LCAzMDA5MywgMzAwOTksIDMwMTA1LCAzMDExMiwgMzAxMTksIDMwMTI2LCAzMDEzMSwgMzAxMzYsIDMwMTQzLCAKKyAgICAzMDE1MCwgMzAxNTcsIDMwMTY0LCAzMDE3MSwgMCwgMCwgMzAxNzgsIDMwMTg1LCAzMDE5MiwgMzAxOTgsIDMwMjA0LCAKKyAgICAzMDIxMCwgMzAyMTYsIDMwMjIyLCAzMDIyOCwgMzAyMzQsIDMwMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDI0NiwgMzAyNTIsIAorICAgIDMwMjU3LCAzMDI2MiwgMzAyNjcsIDMwMjcyLCAzMDI3NywgMzAyODIsIDMwMjg3LCAzMDI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzAyOTcsIDMwMzAyLCAzMDMwNywgMzAzMTIsIDMwMzE3LCAzMDMyMiwgMzAzMjcsIDMwMzM2LCAzMDM0MywgMzAzNDgsIAorICAgIDMwMzUzLCAzMDM1OCwgMzAzNjMsIDMwMzY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDM3MCwgMzAzNzYsIAotICAgIDMwMzgyLCAzMDM4NiwgMzAzOTAsIDMwMzk0LCAzMDM5OCwgMzA0MDQsIDMwNDA4LCAzMDQxNCwgMzA0MTgsIDMwNDI0LCAKLSAgICAzMDQzMCwgMzA0MzgsIDMwNDQ0LCAzMDQ1MiwgMzA0NTYsIDMwNDYwLCAzMDQ2NCwgMzA0NzAsIDMwNDczLCAzMDQ3OSwgCi0gICAgMzA0ODMsIDMwNDg5LCAzMDQ5MywgMzA0OTcsIDMwNTAzLCAzMDUwNywgMzA1MTMsIDMwNTE3LCAzMDUyMywgMzA1MzEsIAotICAgIDMwNTM5LCAzMDU0NywgMzA1NTMsIDMwNTU3LCAzMDU2MywgMzA1NjcsIDMwNTczLCAzMDU3NiwgMzA1NzksIDMwNTg1LCAKLSAgICAzMDU4OSwgMzA1OTUsIDMwNTk4LCAzMDYwMSwgMzA2MDQsIDMwNjA4LCAzMDYxMiwgMzA2MTgsIDMwNjI0LCAzMDYyNywgCi0gICAgMzA2MzAsIDMwNjM0LCAzMDYzOSwgMzA2NDQsIDMwNjUxLCAzMDY1NiwgMzA2NjMsIDMwNjcwLCAzMDY3OSwgMzA2ODYsIAotICAgIDMwNjk1LCAzMDcwMCwgMzA3MDcsIDMwNzE0LCAzMDcyMywgMzA3MjgsIDMwNzM1LCAzMDc0MCwgMzA3NDYsIDMwNzUyLCAKLSAgICAzMDc1OCwgMzA3NjQsIDMwNzcwLCAzMDc3NiwgMCwgMCwgMCwgMCwgMzA3ODIsIDMwNzg2LCAzMDc4OSwgMzA3OTIsIAotICAgIDMwNzk1LCAzMDc5OCwgMzA4MDEsIDMwODA0LCAzMDgwNywgMzA4MTAsIDMwODEzLCAzMDgxNiwgMzA4MTksIDMwODIyLCAKLSAgICAzMDgyNywgMzA4MzIsIDMwODM3LCAzMDg0MCwgMzA4NDUsIDMwODUwLCAzMDg1NSwgMzA4NjAsIDMwODY3LCAzMDg3MiwgCi0gICAgMzA4NzcsIDMwODgyLCAzMDg4NywgMzA4OTQsIDMwOTAwLCAzMDkwNiwgMzA5MTIsIDMwOTE4LCAzMDkyNCwgMzA5MzMsIAotICAgIDMwOTQyLCAzMDk0OCwgMzA5NTQsIDMwOTYyLCAzMDk3MCwgMzA5NzksIDMwOTg4LCAzMDk5NiwgMzEwMDQsIDMxMDEzLCAKLSAgICAzMTAyMiwgMCwgMCwgMCwgMzEwMzAsIDMxMDM0LCAzMTAzOCwgMzEwNDIsIDMxMDQ1LCAzMTA0OCwgMzEwNTEsIDMxMDU1LCAKLSAgICAzMTA1OCwgMzEwNjEsIDMxMDY1LCAzMTA2OCwgMzEwNzIsIDMxMDc2LCAzMTA4MCwgMzEwODQsIDMxMDg4LCAzMTA5MiwgCi0gICAgMzEwOTYsIDMxMTAwLCAzMTEwNCwgMzExMDcsIDMxMTEwLCAzMTExNCwgMzExMTgsIDMxMTIyLCAzMTEyNSwgMzExMjgsIAotICAgIDMxMTMxLCAzMTEzNSwgMzExMzksIDMxMTQyLCAzMTE0NiwgMzExNDksIDMxMTU0LCAzMTE1OSwgMzExNjQsIDMxMTY5LCAKLSAgICAzMTE3NCwgMzExNzksIDMxMTg0LCAzMTE4OSwgMzExOTQsIDMxMTk4LCAzMTIwMiwgMzEyMDgsIDMxMjE1LCAzMTIxOSwgCi0gICAgMzEyMjMsIDMxMjI3LCAzMTIzMCwgMzEyMzMsIDMxMjM2LCAzMTIzOSwgMzEyNDIsIDMxMjQ1LCAzMTI0OCwgMzEyNTEsIAotICAgIDMxMjU0LCAzMTI1NywgMzEyNjEsIDMxMjY1LCAzMTI2OSwgMzEyNzQsIDMxMjc4LCAzMTI4MiwgMzEyODgsIDMxMjkyLCAKLSAgICAzMTI5OCwgMzEzMDQsIDMxMzA5LCAzMTMxNiwgMzEzMjAsIDMxMzI2LCAzMTMzMCwgMzEzMzYsIDMxMzQxLCAzMTM0OCwgCi0gICAgMzEzNTUsIDMxMzYwLCAzMTM2NywgMzEzNzIsIDMxMzc3LCAzMTM4MSwgMzEzODcsIDMxMzkxLCAzMTM5NywgMzE0MDQsIAotICAgIDMxNDExLCAzMTQxNSwgMzE0MjEsIDMxNDI3LCAzMTQzMSwgMzE0MzcsIDMxNDQyLCAzMTQ0NywgMzE0NTQsIDMxNDU5LCAKLSAgICAzMTQ2NCwgMzE0NjksIDMxNDc0LCAzMTQ3OCwgMzE0ODIsIDMxNDg3LCAzMTQ5MiwgMzE0OTksIDMxNTA1LCAzMTUxMCwgCi0gICAgMzE1MTcsIDMxNTIyLCAzMTUyOSwgMzE1MzQsIDMxNTQzLCAzMTU0OSwgMzE1NTUsIDMxNTU5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAzMTU2MywgMzE1NzIsIDMxNTc5LCAzMTU4NiwgMzE1OTMsIDMxNTk2LCAzMTYwMCwgMzE2MDQsIDMxNjA4LCAKLSAgICAzMTYxMiwgMzE2MTYsIDMxNjIwLCAzMTYyNCwgMzE2MjgsIDMxNjMyLCAzMTYzNiwgMzE2NDAsIDMxNjQ0LCAzMTY0NywgCi0gICAgMzE2NTAsIDMxNjU0LCAzMTY1OCwgMzE2NjIsIDMxNjY2LCAzMTY3MCwgMzE2NzQsIDMxNjc3LCAzMTY4MSwgMzE2ODUsIAotICAgIDMxNjg5LCAzMTY5MywgMzE2OTYsIDMxNjk5LCAzMTcwMywgMzE3MDYsIDMxNzEwLCAzMTcxNCwgMzE3MTcsIDMxNzIxLCAKLSAgICAzMTcyNSwgMzE3MjgsIDMxNzMzLCAzMTczOCwgMzE3NDMsIDMxNzQ3LCAzMTc1MSwgMzE3NTYsIDMxNzYwLCAzMTc2NSwgCi0gICAgMzE3NjksIDMxNzc0LCAzMTc3OCwgMzE3ODIsIDMxNzg3LCAzMTc5MiwgMzE3OTYsIDMxODAxLCAzMTgwNiwgMzE4MTEsIAotICAgIDMxODE1LCAwLCAwLCAwLCAzMTgxOSwgMzE4MjQsIDMxODMzLCAzMTgzOCwgMzE4NDUsIDMxODUwLCAzMTg1NCwgMzE4NTcsIAotICAgIDMxODYwLCAzMTg2MywgMzE4NjYsIDMxODY5LCAzMTg3MiwgMzE4NzUsIDMxODc4LCAwLCAwLCAwLCAzMTg4MSwgMzE4ODUsIAotICAgIDMxODg5LCAzMTg5MywgMzE5MDAsIDMxOTA2LCAzMTkxMiwgMzE5MTgsIDMxOTI0LCAzMTkzMCwgMzE5MzYsIDMxOTQyLCAKLSAgICAzMTk0OCwgMzE5NTQsIDMxOTYxLCAzMTk2OCwgMzE5NzUsIDMxOTgyLCAzMTk4OSwgMzE5OTYsIDMyMDAzLCAzMjAxMCwgCi0gICAgMzIwMTcsIDMyMDI0LCAzMjAzMSwgMzIwMzgsIDMyMDQ1LCAzMjA1MiwgMzIwNTksIDMyMDY2LCAzMjA3MywgMzIwODAsIAotICAgIDMyMDg3LCAzMjA5NCwgMzIxMDEsIDMyMTA4LCAzMjExNSwgMzIxMjIsIDMyMTI5LCAzMjEzNiwgMzIxNDMsIDMyMTUwLCAKLSAgICAzMjE1NywgMzIxNjQsIDMyMTcyLCAzMjE4MCwgMzIxODgsIDMyMTk0LCAzMjIwMCwgMzIyMDYsIDMyMjE0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDM3MywgMzAzNzksIAorICAgIDMwMzg1LCAzMDM4OSwgMzAzOTMsIDMwMzk3LCAzMDQwMSwgMzA0MDcsIDMwNDExLCAzMDQxNywgMzA0MjEsIDMwNDI3LCAKKyAgICAzMDQzMywgMzA0NDEsIDMwNDQ3LCAzMDQ1NSwgMzA0NTksIDMwNDYzLCAzMDQ2NywgMzA0NzMsIDMwNDc2LCAzMDQ4MiwgCisgICAgMzA0ODYsIDMwNDkyLCAzMDQ5NiwgMzA1MDAsIDMwNTA2LCAzMDUxMCwgMzA1MTYsIDMwNTIwLCAzMDUyNiwgMzA1MzQsIAorICAgIDMwNTQyLCAzMDU1MCwgMzA1NTYsIDMwNTYwLCAzMDU2NiwgMzA1NzAsIDMwNTc2LCAzMDU3OSwgMzA1ODIsIDMwNTg4LCAKKyAgICAzMDU5MiwgMzA1OTgsIDMwNjAxLCAzMDYwNCwgMzA2MDcsIDMwNjExLCAzMDYxNSwgMzA2MjEsIDMwNjI3LCAzMDYzMCwgCisgICAgMzA2MzMsIDMwNjM3LCAzMDY0MiwgMzA2NDcsIDMwNjU0LCAzMDY1OSwgMzA2NjYsIDMwNjczLCAzMDY4MiwgMzA2ODksIAorICAgIDMwNjk4LCAzMDcwMywgMzA3MTAsIDMwNzE3LCAzMDcyNiwgMzA3MzEsIDMwNzM4LCAzMDc0MywgMzA3NDksIDMwNzU1LCAKKyAgICAzMDc2MSwgMzA3NjcsIDMwNzczLCAzMDc3OSwgMCwgMCwgMCwgMCwgMzA3ODUsIDMwNzg5LCAzMDc5MiwgMzA3OTUsIAorICAgIDMwNzk4LCAzMDgwMSwgMzA4MDQsIDMwODA3LCAzMDgxMCwgMzA4MTMsIDMwODE2LCAzMDgxOSwgMzA4MjIsIDMwODI1LCAKKyAgICAzMDgzMCwgMzA4MzUsIDMwODQwLCAzMDg0MywgMzA4NDgsIDMwODUzLCAzMDg1OCwgMzA4NjMsIDMwODcwLCAzMDg3NSwgCisgICAgMzA4ODAsIDMwODg1LCAzMDg5MCwgMzA4OTcsIDMwOTAzLCAzMDkwOSwgMzA5MTUsIDMwOTIxLCAzMDkyNywgMzA5MzYsIAorICAgIDMwOTQ1LCAzMDk1MSwgMzA5NTcsIDMwOTY1LCAzMDk3MywgMzA5ODIsIDMwOTkxLCAzMDk5OSwgMzEwMDcsIDMxMDE2LCAKKyAgICAzMTAyNSwgMCwgMCwgMCwgMzEwMzMsIDMxMDM3LCAzMTA0MSwgMzEwNDUsIDMxMDQ4LCAzMTA1MSwgMzEwNTQsIDMxMDU4LCAKKyAgICAzMTA2MSwgMzEwNjQsIDMxMDY4LCAzMTA3MSwgMzEwNzUsIDMxMDc5LCAzMTA4MywgMzEwODcsIDMxMDkxLCAzMTA5NSwgCisgICAgMzEwOTksIDMxMTAzLCAzMTEwNywgMzExMTAsIDMxMTEzLCAzMTExNywgMzExMjEsIDMxMTI1LCAzMTEyOCwgMzExMzEsIAorICAgIDMxMTM0LCAzMTEzOCwgMzExNDIsIDMxMTQ1LCAzMTE0OSwgMzExNTIsIDMxMTU3LCAzMTE2MiwgMzExNjcsIDMxMTcyLCAKKyAgICAzMTE3NywgMzExODIsIDMxMTg3LCAzMTE5MiwgMzExOTcsIDMxMjAxLCAzMTIwNSwgMzEyMTEsIDMxMjE4LCAzMTIyMiwgCisgICAgMzEyMjYsIDMxMjMwLCAzMTIzMywgMzEyMzYsIDMxMjM5LCAzMTI0MiwgMzEyNDUsIDMxMjQ4LCAzMTI1MSwgMzEyNTQsIAorICAgIDMxMjU3LCAzMTI2MCwgMzEyNjQsIDMxMjY4LCAzMTI3MiwgMzEyNzcsIDMxMjgxLCAzMTI4NSwgMzEyOTEsIDMxMjk1LCAKKyAgICAzMTMwMSwgMzEzMDcsIDMxMzEyLCAzMTMxOSwgMzEzMjMsIDMxMzI5LCAzMTMzMywgMzEzMzksIDMxMzQ0LCAzMTM1MSwgCisgICAgMzEzNTgsIDMxMzYzLCAzMTM3MCwgMzEzNzUsIDMxMzgwLCAzMTM4NCwgMzEzOTAsIDMxMzk0LCAzMTQwMCwgMzE0MDcsIAorICAgIDMxNDE0LCAzMTQxOCwgMzE0MjQsIDMxNDMwLCAzMTQzNCwgMzE0NDAsIDMxNDQ1LCAzMTQ1MCwgMzE0NTcsIDMxNDYyLCAKKyAgICAzMTQ2NywgMzE0NzIsIDMxNDc3LCAzMTQ4MSwgMzE0ODUsIDMxNDkwLCAzMTQ5NSwgMzE1MDIsIDMxNTA4LCAzMTUxMywgCisgICAgMzE1MjAsIDMxNTI1LCAzMTUzMiwgMzE1MzcsIDMxNTQ2LCAzMTU1MiwgMzE1NTgsIDMxNTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAzMTU2NiwgMzE1NzUsIDMxNTgyLCAzMTU4OSwgMzE1OTYsIDMxNTk5LCAzMTYwMywgMzE2MDcsIDMxNjExLCAKKyAgICAzMTYxNSwgMzE2MTksIDMxNjIzLCAzMTYyNywgMzE2MzEsIDMxNjM1LCAzMTYzOSwgMzE2NDMsIDMxNjQ3LCAzMTY1MCwgCisgICAgMzE2NTMsIDMxNjU3LCAzMTY2MSwgMzE2NjUsIDMxNjY5LCAzMTY3MywgMzE2NzcsIDMxNjgwLCAzMTY4NCwgMzE2ODgsIAorICAgIDMxNjkyLCAzMTY5NiwgMzE2OTksIDMxNzAyLCAzMTcwNiwgMzE3MDksIDMxNzEzLCAzMTcxNywgMzE3MjAsIDMxNzI0LCAKKyAgICAzMTcyOCwgMzE3MzEsIDMxNzM2LCAzMTc0MSwgMzE3NDYsIDMxNzUwLCAzMTc1NCwgMzE3NTksIDMxNzYzLCAzMTc2OCwgCisgICAgMzE3NzIsIDMxNzc3LCAzMTc4MSwgMzE3ODUsIDMxNzkwLCAzMTc5NSwgMzE3OTksIDMxODA0LCAzMTgwOSwgMzE4MTQsIAorICAgIDMxODE4LCAwLCAwLCAwLCAzMTgyMiwgMzE4MjcsIDMxODM2LCAzMTg0MSwgMzE4NDgsIDMxODUzLCAzMTg1NywgMzE4NjAsIAorICAgIDMxODYzLCAzMTg2NiwgMzE4NjksIDMxODcyLCAzMTg3NSwgMzE4NzgsIDMxODgxLCAwLCAwLCAwLCAzMTg4NCwgMzE4ODgsIAorICAgIDMxODkyLCAzMTg5NiwgMzE5MDMsIDMxOTA5LCAzMTkxNSwgMzE5MjEsIDMxOTI3LCAzMTkzMywgMzE5MzksIDMxOTQ1LCAKKyAgICAzMTk1MSwgMzE5NTcsIDMxOTY0LCAzMTk3MSwgMzE5NzgsIDMxOTg1LCAzMTk5MiwgMzE5OTksIDMyMDA2LCAzMjAxMywgCisgICAgMzIwMjAsIDMyMDI3LCAzMjAzNCwgMzIwNDEsIDMyMDQ4LCAzMjA1NSwgMzIwNjIsIDMyMDY5LCAzMjA3NiwgMzIwODMsIAorICAgIDMyMDkwLCAzMjA5NywgMzIxMDQsIDMyMTExLCAzMjExOCwgMzIxMjUsIDMyMTMyLCAzMjEzOSwgMzIxNDYsIDMyMTUzLCAKKyAgICAzMjE2MCwgMzIxNjcsIDMyMTc1LCAzMjE4MywgMzIxOTEsIDMyMTk3LCAzMjIwMywgMzIyMDksIDMyMjE3LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIyMywgMzIyMzAsIDMyMjM3LCAzMjI0NCwgMzIyNTEsIAotICAgIDMyMjYwLCAzMjI2OSwgMzIyNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjg3LCAzMjI5MiwgMzIyOTcsIDMyMzAyLCAKLSAgICAzMjMwNywgMzIzMTYsIDMyMzI3LCAzMjMzNiwgMzIzNDcsIDMyMzUzLCAzMjM2NiwgMzIzNzIsIDMyMzc5LCAzMjM4NiwgCi0gICAgMzIzOTEsIDMyMzk3LCAzMjQwMywgMzI0MTQsIDMyNDIzLCAzMjQzMCwgMzI0MzcsIDMyNDQ2LCAzMjQ1MywgMzI0NjIsIAotICAgIDMyNDcyLCAzMjQ4MiwgMzI0ODksIDMyNDk2LCAzMjUwMywgMzI1MTMsIDMyNTE4LCAzMjUyNiwgMzI1MzIsIDMyNTQwLCAKLSAgICAzMjU0OSwgMzI1NTQsIDMyNTYxLCAzMjU2NywgMzI1NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNTc3LCAKLSAgICAzMjU4MiwgMzI1ODgsIDMyNTk1LCAzMjYwMywgMzI2MDksIDMyNjE1LCAzMjYyMSwgMzI2MjYsIDMyNjMzLCAzMjYzOSwgCi0gICAgMzI2NDUsIDMyNjUxLCAzMjY1OSwgMzI2NjQsIDMyNjcyLCAzMjY3NywgMzI2ODMsIDMyNjg5LCAzMjY5NiwgMzI3MDQsIAotICAgIDMyNzExLCAzMjcxNywgMzI3MjQsIDMyNzMxLCAzMjczNywgMzI3NDQsIDMyNzUxLCAzMjc1NywgMzI3NjIsIDMyNzY4LCAKLSAgICAzMjc3NiwgMzI3ODQsIDMyNzkwLCAzMjc5NiwgMzI4MDIsIDMyODA4LCAzMjgxNiwgMzI4MjAsIDMyODI2LCAzMjgzMiwgCi0gICAgMzI4MzgsIDMyODQ0LCAzMjg1MCwgMzI4NTYsIDMyODYwLCAzMjg2NSwgMzI4NzAsIDMyODc3LCAzMjg4MiwgMzI4ODYsIAotICAgIDMyODkyLCAzMjg5NywgMzI5MDIsIDMyOTA2LCAzMjkxMSwgMzI5MTYsIDMyOTIwLCAzMjkyNCwgMzI5MjksIDMyOTM2LCAKLSAgICAzMjk0MCwgMzI5NDUsIDMyOTUwLCAzMjk1NCwgMzI5NTksIDMyOTYzLCAzMjk2OCwgMzI5NzIsIDMyOTc4LCAzMjk4MywgCi0gICAgMzI5OTAsIDMyOTk1LCAzMzAwMCwgMzMwMDQsIDMzMDA5LCAzMzAxNCwgMzMwMjEsIDMzMDI2LCAzMzAzMiwgMzMwMzcsIAotICAgIDMzMDQxLCAzMzA0NiwgMzMwNTAsIDMzMDU1LCAzMzA2MiwgMzMwNjksIDMzMDc0LCAzMzA3OSwgMzMwODMsIDMzMDg5LCAKLSAgICAzMzA5NSwgMzMxMDAsIDMzMTA1LCAzMzExMCwgMzMxMTYsIDMzMTIxLCAzMzEyNywgMzMxMzIsIDMzMTM4LCAzMzE0NCwgCi0gICAgMzMxNTAsIDMzMTU3LCAzMzE2NCwgMzMxNzEsIDMzMTc4LCAzMzE4NSwgMzMxOTIsIDMzMTk3LCAzMzIwNSwgMzMyMTQsIAotICAgIDMzMjIzLCAzMzIzMiwgMzMyNDEsIDMzMjUwLCAzMzI1OSwgMzMyNzEsIDMzMjgwLCAzMzI4OSwgMzMyOTgsIDMzMzA1LCAKLSAgICAzMzMxMCwgMzMzMTcsIDMzMzI1LCAzMzMzMywgMzMzNDAsIDMzMzQ3LCAzMzM1NCwgMzMzNjEsIDMzMzY5LCAzMzM3OCwgCi0gICAgMzMzODcsIDMzMzk2LCAzMzQwNSwgMzM0MTQsIDMzNDIzLCAzMzQzMiwgMzM0NDEsIDMzNDUwLCAzMzQ1OSwgMzM0NjgsIAotICAgIDMzNDc3LCAzMzQ4NiwgMzM0OTUsIDMzNTAzLCAzMzUxMiwgMzM1MjMsIDMzNTMxLCAzMzU0MCwgMzM1NTEsIDMzNTYwLCAKLSAgICAzMzU2OSwgMzM1NzgsIDMzNTg3LCAzMzU5NSwgMzM2MDQsIDMzNjExLCAzMzYxNiwgMzM2MjQsIDMzNjI5LCAzMzYzNiwgCi0gICAgMzM2NDEsIDMzNjUwLCAzMzY1NiwgMzM2NjMsIDMzNjcwLCAzMzY3NSwgMzM2ODAsIDMzNjg4LCAzMzY5NiwgMzM3MDUsIAotICAgIDMzNzE0LCAzMzcxOSwgMzM3MjYsIDMzNzM3LCAzMzc0NSwgMzM3NTQsIDMzNzYwLCAzMzc2NiwgMzM3NzEsIDMzNzc4LCAKLSAgICAzMzc4MywgMzM3OTIsIDMzNzk3LCAzMzgwMiwgMzM4MDcsIDMzODE0LCAzMzgyMSwgMzM4MjYsIDMzODM1LCAzMzg0MywgCi0gICAgMzM4NDgsIDMzODUzLCAzMzg2MCwgMzM4NjcsIDMzODcxLCAzMzg3NSwgMzM4NzgsIDMzODgxLCAzMzg4NCwgMzM4ODcsIAotICAgIDMzODkwLCAzMzg5MywgMzM5MDAsIDMzOTAzLCAzMzkwNiwgMzM5MTEsIDMzOTE1LCAzMzkxOSwgMzM5MjMsIDMzOTI3LCAKLSAgICAzMzkzMSwgMzM5NDAsIDMzOTQ2LCAzMzk1MiwgMzM5NTgsIDMzOTY2LCAzMzk3NCwgMzM5ODAsIDMzOTg2LCAzMzk5MywgCi0gICAgMzM5OTksIDM0MDA0LCAzNDAxMCwgMzQwMTYsIDM0MDIyLCAzNDAyOSwgMzQwMzUsIDM0MDQzLCAzNDA0OSwgMzQwNTYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDYyLCAzNDA2OSwgCi0gICAgMzQwNzYsIDM0MDgxLCAzNDA5MCwgMzQwOTgsIDM0MTA2LCAzNDExMywgMzQxMjAsIDM0MTI3LCAzNDEzNCwgMzQxNDIsIAotICAgIDM0MTUwLCAzNDE2MCwgMzQxNzAsIDM0MTc4LCAzNDE4NiwgMzQxOTQsIDM0MjAyLCAzNDIxMSwgMzQyMjAsIDM0MjI4LCAKLSAgICAzNDIzNiwgMzQyNDUsIDM0MjU0LCAzNDI2NCwgMzQyNzQsIDM0MjgzLCAzNDI5MiwgMzQzMDAsIDM0MzA4LCAzNDMxNiwgCi0gICAgMzQzMjQsIDM0MzM0LCAzNDM0NCwgMzQzNTIsIDM0MzYwLCAzNDM2OCwgMzQzNzYsIDM0Mzg0LCAzNDM5MiwgMzQ0MDAsIAotICAgIDM0NDA4LCAzNDQxNiwgMzQ0MjQsIDM0NDMyLCAzNDQ0MCwgMzQ0NDksIDM0NDU4LCAzNDQ2NywgMzQ0NzYsIDM0NDg2LCAKLSAgICAzNDQ5NiwgMzQ1MDMsIDM0NTEwLCAzNDUxOCwgMzQ1MjYsIDM0NTM1LCAzNDU0NCwgMzQ1NTIsIDM0NTYwLCAzNDU3MiwgCi0gICAgMzQ1ODQsIDM0NTkzLCAzNDYwMiwgMzQ2MTEsIDM0NjIwLCAzNDYyNywgMzQ2MzQsIDM0NjQyLCAzNDY1MCwgMzQ2NTgsIAotICAgIDM0NjY2LCAzNDY3NCwgMzQ2ODIsIDM0NjkwLCAzNDY5OCwgMzQ3MDcsIDM0NzE2LCAzNDcyNSwgMzQ3MzQsIDM0NzQzLCAKLSAgICAzNDc1MiwgMzQ3NjIsIDM0NzcyLCAzNDc4MiwgMzQ3OTIsIDM0ODAxLCAzNDgxMCwgMzQ4MTcsIDM0ODI0LCAzNDgzMiwgCi0gICAgMzQ4NDAsIDM0ODQ4LCAzNDg1NiwgMzQ4NjQsIDM0ODcyLCAzNDg4NCwgMzQ4OTYsIDM0OTA1LCAzNDkxNCwgMzQ5MjIsIAotICAgIDM0OTMwLCAzNDkzOCwgMzQ5NDYsIDM0OTU3LCAzNDk2OCwgMzQ5NzksIDM0OTkwLCAzNTAwMiwgMzUwMTQsIDM1MDIyLCAKLSAgICAzNTAzMCwgMzUwMzgsIDM1MDQ2LCAzNTA1NSwgMzUwNjQsIDM1MDczLCAzNTA4MiwgMzUwOTAsIDM1MDk4LCAzNTEwNiwgCi0gICAgMzUxMTQsIDM1MTIyLCAzNTEzMCwgMzUxMzksIDM1MTQ4LCAzNTE1OCwgMzUxNjgsIDM1MTc1LCAzNTE4MiwgMzUxOTAsIAotICAgIDM1MTk4LCAzNTIwNiwgMzUyMTQsIDM1MjIxLCAzNTIyOCwgMzUyMzYsIDM1MjQ0LCAzNTI1MiwgMzUyNjAsIDM1MjY4LCAKLSAgICAzNTI3NiwgMzUyODQsIDM1MjkyLCAzNTMwMCwgMzUzMDgsIDM1MzE2LCAzNTMyNCwgMzUzMzIsIDM1MzQwLCAzNTM0OCwgCi0gICAgMzUzNTYsIDM1MzY1LCAzNTM3NCwgMzUzODMsIDM1MzkxLCAzNTQwMCwgMzU0MDksIDM1NDE4LCAzNTQyNywgMzU0MzcsIAotICAgIDM1NDQ2LCAzNTQ1MywgMzU0NTgsIDM1NDY1LCAzNTQ3MiwgMzU0ODAsIDM1NDg4LCAzNTQ5NywgMzU1MDYsIDM1NTE2LCAKLSAgICAzNTUyNiwgMzU1MzcsIDM1NTQ4LCAzNTU1NywgMzU1NjYsIDM1NTc2LCAzNTU4NiwgMzU1OTUsIDM1NjA0LCAzNTYxNCwgCi0gICAgMzU2MjQsIDM1NjM1LCAzNTY0NiwgMzU2NTUsIDM1NjY0LCAzNTY3NCwgMzU2ODQsIDM1NjkxLCAzNTY5OCwgMzU3MDYsIAotICAgIDM1NzE0LCAzNTcyMCwgMzU3MjYsIDM1NzM1LCAzNTc0NCwgMzU3NTQsIDM1NzY0LCAzNTc3NSwgMzU3ODYsIDM1Nzk1LCAKLSAgICAzNTgwNCwgMzU4MTQsIDM1ODI0LCAzNTgzMywgMzU4NDIsIDM1ODUwLCAzNTg1OCwgMzU4NjUsIDM1ODcyLCAzNTg4MCwgCi0gICAgMzU4ODgsIDM1ODk3LCAzNTkwNiwgMzU5MTYsIDM1OTI2LCAzNTkzNywgMzU5NDgsIDM1OTU3LCAzNTk2NiwgMzU5NzYsIAotICAgIDM1OTg2LCAzNTk5NSwgMzYwMDQsIDM2MDE0LCAzNjAyNCwgMzYwMzUsIDM2MDQ2LCAzNjA1NSwgMzYwNjQsIDM2MDc0LCAKLSAgICAzNjA4NCwgMzYwOTEsIDM2MDk4LCAzNjEwNiwgMzYxMTQsIDM2MTIzLCAzNjEzMiwgMzYxNDIsIDM2MTUyLCAzNjE2MywgCi0gICAgMzYxNzQsIDM2MTgzLCAzNjE5MiwgMzYyMDIsIDM2MjEyLCAzNjIyMCwgMzYyMjgsIDM2MjM2LCAzNjI0NCwgMzYyNTMsIAotICAgIDM2MjYyLCAzNjI2OSwgMzYyNzYsIDM2MjgzLCAzNjI5MCwgMzYyOTcsIDM2MzA0LCAzNjMxMiwgMzYzMjAsIDM2MzI4LCAKLSAgICAzNjMzNiwgMzYzNDcsIDM2MzU4LCAzNjM2OSwgMzYzODAsIDM2MzkxLCAzNjQwMiwgMzY0MTAsIDM2NDE4LCAzNjQyOSwgCi0gICAgMzY0NDAsIDM2NDUxLCAzNjQ2MiwgMzY0NzMsIDM2NDg0LCAzNjQ5MiwgMzY1MDAsIDM2NTExLCAzNjUyMiwgMzY1MzMsIDAsIAotICAgIDAsIDM2NTQ0LCAzNjU1MiwgMzY1NjAsIDM2NTcxLCAzNjU4MiwgMzY1OTMsIDAsIDAsIDM2NjA0LCAzNjYxMiwgMzY2MjAsIAotICAgIDM2NjMxLCAzNjY0MiwgMzY2NTMsIDM2NjY0LCAzNjY3NSwgMzY2ODYsIDM2Njk0LCAzNjcwMiwgMzY3MTMsIDM2NzI0LCAKLSAgICAzNjczNSwgMzY3NDYsIDM2NzU3LCAzNjc2OCwgMzY3NzYsIDM2Nzg0LCAzNjc5NSwgMzY4MDYsIDM2ODE3LCAzNjgyOCwgCi0gICAgMzY4MzksIDM2ODUwLCAzNjg1OCwgMzY4NjYsIDM2ODc3LCAzNjg4OCwgMzY4OTksIDM2OTEwLCAzNjkyMSwgMzY5MzIsIAotICAgIDM2OTQwLCAzNjk0OCwgMzY5NTksIDM2OTcwLCAzNjk4MSwgMCwgMCwgMzY5OTIsIDM3MDAwLCAzNzAwOCwgMzcwMTksIAotICAgIDM3MDMwLCAzNzA0MSwgMCwgMCwgMzcwNTIsIDM3MDYwLCAzNzA2OCwgMzcwNzksIDM3MDkwLCAzNzEwMSwgMzcxMTIsIAotICAgIDM3MTIzLCAwLCAzNzEzNCwgMCwgMzcxNDIsIDAsIDM3MTUzLCAwLCAzNzE2NCwgMzcxNzUsIDM3MTgzLCAzNzE5MSwgCi0gICAgMzcyMDIsIDM3MjEzLCAzNzIyNCwgMzcyMzUsIDM3MjQ2LCAzNzI1NywgMzcyNjUsIDM3MjczLCAzNzI4NCwgMzcyOTUsIAotICAgIDM3MzA2LCAzNzMxNywgMzczMjgsIDM3MzM5LCAzNzM0NywgMzczNTUsIDM3MzYzLCAzNzM3MSwgMzczNzksIDM3Mzg3LCAKLSAgICAzNzM5NSwgMzc0MDMsIDM3NDExLCAzNzQxOSwgMzc0MjcsIDM3NDM1LCAzNzQ0MywgMCwgMCwgMzc0NTEsIDM3NDYyLCAKLSAgICAzNzQ3MywgMzc0ODcsIDM3NTAxLCAzNzUxNSwgMzc1MjksIDM3NTQzLCAzNzU1NywgMzc1NjgsIDM3NTc5LCAzNzU5MywgCi0gICAgMzc2MDcsIDM3NjIxLCAzNzYzNSwgMzc2NDksIDM3NjYzLCAzNzY3NCwgMzc2ODUsIDM3Njk5LCAzNzcxMywgMzc3MjcsIAotICAgIDM3NzQxLCAzNzc1NSwgMzc3NjksIDM3NzgwLCAzNzc5MSwgMzc4MDUsIDM3ODE5LCAzNzgzMywgMzc4NDcsIDM3ODYxLCAKLSAgICAzNzg3NSwgMzc4ODYsIDM3ODk3LCAzNzkxMSwgMzc5MjUsIDM3OTM5LCAzNzk1MywgMzc5NjcsIDM3OTgxLCAzNzk5MiwgCi0gICAgMzgwMDMsIDM4MDE3LCAzODAzMSwgMzgwNDUsIDM4MDU5LCAzODA3MywgMzgwODcsIDM4MDk1LCAzODEwMywgMzgxMTQsIAotICAgIDM4MTIyLCAwLCAzODEzMywgMzgxNDEsIDM4MTUyLCAzODE2MCwgMzgxNjgsIDM4MTc2LCAzODE4NCwgMzgxOTIsIDM4MTk1LCAKLSAgICAzODE5OCwgMzgyMDEsIDM4MjA0LCAzODIxMCwgMzgyMjEsIDM4MjI5LCAwLCAzODI0MCwgMzgyNDgsIDM4MjU5LCAzODI2NywgCi0gICAgMzgyNzUsIDM4MjgzLCAzODI5MSwgMzgyOTksIDM4MzA1LCAzODMxMSwgMzgzMTcsIDM4MzI1LCAzODMzMywgMzgzNDQsIDAsIAotICAgIDAsIDM4MzU1LCAzODM2MywgMzgzNzQsIDM4MzgyLCAzODM5MCwgMzgzOTgsIDAsIDM4NDA2LCAzODQxMiwgMzg0MTgsIAotICAgIDM4NDI0LCAzODQzMiwgMzg0NDAsIDM4NDUxLCAzODQ2MiwgMzg0NzAsIDM4NDc4LCAzODQ4NiwgMzg0OTcsIDM4NTA1LCAKLSAgICAzODUxMywgMzg1MjEsIDM4NTI5LCAzODUzNywgMzg1NDMsIDM4NTQ5LCAwLCAwLCAzODU1MiwgMzg1NjMsIDM4NTcxLCAwLCAKLSAgICAzODU4MiwgMzg1OTAsIDM4NjAxLCAzODYwOSwgMzg2MTcsIDM4NjI1LCAzODYzMywgMzg2NDEsIDM4NjQ0LCAwLCAzODY0NywgCi0gICAgMzg2NTEsIDM4NjU1LCAzODY1OSwgMzg2NjMsIDM4NjY3LCAzODY3MSwgMzg2NzUsIDM4Njc5LCAzODY4MywgMzg2ODcsIAotICAgIDM4NjkxLCAzODY5NywgMzg3MDMsIDM4NzA5LCAzODcxMiwgMzg3MTUsIDM4NzE3LCAzODcyMSwgMzg3MjUsIDM4NzI5LCAKLSAgICAzODczMywgMzg3MzUsIDM4NzM5LCAzODc0MywgMzg3NDksIDM4NzU1LCAzODc2MiwgMzg3NjksIDM4Nzc0LCAzODc3OSwgCi0gICAgMzg3ODUsIDM4NzkxLCAzODc5MywgMzg3OTYsIDM4Nzk4LCAzODgwMiwgMzg4MDYsIDM4ODEwLCAzODgxMywgMzg4MTcsIAotICAgIDM4ODIxLCAzODgyNSwgMzg4MjksIDM4ODMzLCAzODgzOSwgMzg4NDMsIDM4ODQ3LCAzODg1MywgMzg4NTgsIDM4ODY1LCAKLSAgICAzODg2NywgMzg4NzAsIDM4ODc0LCAzODg3OCwgMzg4ODMsIDM4ODg5LCAzODg5MSwgMzg5MDAsIDM4OTA5LCAzODkxMiwgCi0gICAgMzg5MTYsIDM4OTE4LCAzODkyMCwgMzg5MjIsIDM4OTI1LCAzODkzMSwgMzg5MzMsIDM4OTM3LCAzODk0MSwgMzg5NDgsIAotICAgIDM4OTU1LCAzODk1OSwgMzg5NjQsIDM4OTY5LCAzODk3NCwgMzg5NzksIDM4OTgzLCAzODk4NywgMzg5OTAsIDM4OTk0LCAKLSAgICAzODk5OCwgMzkwMDUsIDM5MDEwLCAzOTAxNCwgMzkwMTgsIDM5MDIzLCAzOTAyNywgMzkwMzEsIDM5MDM2LCAzOTA0MSwgCi0gICAgMzkwNDUsIDM5MDQ5LCAzOTA1MywgMzkwNTUsIDM5MDYwLCAzOTA2NSwgMzkwNjksIDM5MDczLCAzOTA3NywgMzkwODEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDM5MDg1LCAzOTA5MSwgMzkwOTcsIDM5MTA0LCAzOTExMSwgMzkxMTYsIDM5MTIxLCAzOTEyNSwgMCwgMCwgCi0gICAgMzkxMzEsIDM5MTM0LCAzOTEzNywgMzkxNDAsIDM5MTQzLCAzOTE0NiwgMzkxNDksIDM5MTUzLCAzOTE1NywgMzkxNjIsIAotICAgIDM5MTY3LCAzOTE3MiwgMzkxNzksIDM5MTgzLCAzOTE4NiwgMzkxODksIDM5MTkyLCAzOTE5NSwgMzkxOTgsIDM5MjAxLCAKLSAgICAzOTIwNCwgMzkyMDcsIDM5MjEwLCAzOTIxNCwgMzkyMTgsIDM5MjIzLCAzOTIyOCwgMCwgMzkyMzMsIDM5MjM5LCAzOTI0NSwgCi0gICAgMzkyNTEsIDM5MjU4LCAzOTI2NSwgMzkyNzIsIDM5Mjc5LCAzOTI4NSwgMzkyOTEsIDM5Mjk4LCAzOTMwNSwgMzkzMTIsIDAsIAotICAgIDAsIDAsIDM5MzE5LCAzOTMyMiwgMzkzMjUsIDM5MzI4LCAzOTMzMywgMzkzMzYsIDM5MzM5LCAzOTM0MiwgMzkzNDUsIAotICAgIDM5MzQ4LCAzOTM1MSwgMzkzNTUsIDM5MzU4LCAzOTM2MSwgMzkzNjQsIDM5MzY3LCAzOTM3MCwgMzkzNzUsIDM5Mzc4LCAKLSAgICAzOTM4MSwgMzkzODQsIDM5Mzg3LCAzOTM5MCwgMzkzOTUsIDM5Mzk4LCAzOTQwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk0MDYsIDM5NDExLCAzOTQxNiwgMzk0MjMsIAotICAgIDM5NDMxLCAzOTQzNiwgMzk0NDEsIDM5NDQ1LCAzOTQ0OSwgMzk0NTQsIDM5NDYxLCAzOTQ2OCwgMzk0NzIsIDM5NDc3LCAKLSAgICAzOTQ4MiwgMzk0ODcsIDM5NDkyLCAzOTQ5OSwgMzk1MDQsIDM5NTA5LCAzOTUxNCwgMzk1MjMsIDM5NTMwLCAzOTUzNywgCi0gICAgMzk1NDEsIDM5NTQ2LCAzOTU1MiwgMzk1NTcsIDM5NTY0LCAzOTU3MywgMzk1ODIsIDM5NTg2LCAzOTU5MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk1OTQsIDM5NTk4LCAzOTYwNiwgMzk2MTAsIDM5NjE0LCAKLSAgICAzOTYxOSwgMzk2MjMsIDM5NjI3LCAzOTYzMSwgMzk2MzMsIDM5NjM3LCAzOTY0MSwgMzk2NDUsIDM5NjUwLCAzOTY1NCwgCi0gICAgMzk2NTgsIDM5NjY2LCAzOTY2OSwgMzk2NzMsIDM5Njc2LCAzOTY3OSwgMzk2ODUsIDM5Njg5LCAzOTY5MiwgMzk2OTgsIAotICAgIDM5NzAyLCAzOTcwNiwgMzk3MTAsIDM5NzEzLCAzOTcxNywgMzk3MjAsIDM5NzI0LCAzOTcyNiwgMzk3MjksIDM5NzMyLCAKLSAgICAzOTczNiwgMzk3MzgsIDM5NzQyLCAzOTc0NSwgMzk3NDgsIDM5NzUzLCAzOTc1OCwgMzk3NjUsIDM5NzY4LCAzOTc3MSwgCi0gICAgMzk3NzUsIDM5NzgwLCAzOTc4MywgMzk3ODYsIDM5Nzg5LCAzOTc5MywgMzk3OTgsIDM5ODAxLCAzOTgwNCwgMzk4MDYsIAotICAgIDM5ODA5LCAzOTgxMiwgMzk4MTUsIDM5ODE5LCAzOTgyNCwgMzk4MjcsIDM5ODMxLCAzOTgzNSwgMzk4MzksIDM5ODQzLCAKLSAgICAzOTg0OCwgMzk4NTQsIDM5ODU5LCAzOTg2NCwgMzk4NzAsIDM5ODc1LCAzOTg4MCwgMzk4ODQsIDM5ODg4LCAzOTg5MywgCi0gICAgMzk4OTcsIDM5OTAxLCAzOTkwNCwgMzk5MDYsIDM5OTExLCAzOTkxNywgMzk5MjQsIDM5OTMxLCAzOTkzOCwgMzk5NDUsIAotICAgIDM5OTUyLCAzOTk1OSwgMzk5NjYsIDM5OTczLCAzOTk4MSwgMzk5ODgsIDM5OTk2LCA0MDAwMywgNDAwMTAsIDQwMDE4LCAKLSAgICA0MDAyNiwgNDAwMzEsIDQwMDM2LCA0MDA0MSwgNDAwNDYsIDQwMDUxLCA0MDA1NiwgNDAwNjEsIDQwMDY2LCA0MDA3MSwgCi0gICAgNDAwNzYsIDQwMDgyLCA0MDA4OCwgNDAwOTQsIDQwMTAwLCA0MDEwNywgNDAxMTUsIDQwMTIyLCA0MDEyOCwgNDAxMzQsIAotICAgIDQwMTQwLCA0MDE0NiwgNDAxNTIsIDQwMTU4LCA0MDE2NCwgNDAxNzAsIDQwMTc2LCA0MDE4MywgNDAxOTAsIDQwMTk3LCAKLSAgICA0MDIwNCwgNDAyMTIsIDQwMjIxLCA0MDIyOSwgNDAyNDAsIDQwMjQ4LCA0MDI1NiwgNDAyNjUsIDQwMjcyLCA0MDI4MSwgCi0gICAgNDAyOTAsIDQwMjk4LCA0MDMwNywgMCwgMCwgMCwgMCwgMCwgMCwgNDAzMTUsIDQwMzE3LCA0MDMyMCwgNDAzMjIsIDQwMzI1LCAKLSAgICA0MDMyOCwgNDAzMzEsIDQwMzM2LCA0MDM0MSwgNDAzNDYsIDQwMzUxLCA0MDM1NSwgNDAzNTksIDQwMzYzLCA0MDM2NywgCi0gICAgNDAzNzIsIDQwMzc4LCA0MDM4MywgNDAzODksIDQwMzk0LCA0MDM5OSwgNDA0MDQsIDQwNDEwLCA0MDQxNSwgNDA0MjEsIAotICAgIDQwNDI3LCA0MDQzMSwgNDA0MzUsIDQwNDQwLCA0MDQ0NSwgNDA0NTAsIDQwNDU1LCA0MDQ2MCwgNDA0NjgsIDQwNDc2LCAKLSAgICA0MDQ4NCwgNDA0OTIsIDQwNDk5LCA0MDUwNywgNDA1MTQsIDQwNTIxLCA0MDUzMCwgNDA1NDIsIDQwNTQ4LCA0MDU1NCwgCi0gICAgNDA1NjIsIDQwNTcwLCA0MDU3OSwgNDA1ODgsIDQwNTk2LCA0MDYwNCwgNDA2MTMsIDQwNjIyLCA0MDYyNywgNDA2MzUsIAotICAgIDQwNjQwLCA0MDY0NSwgNDA2NTEsIDQwNjU2LCA0MDY2MiwgNDA2NjksIDQwNjc2LCA0MDY4MSwgNDA2ODcsIDQwNjkyLCAKLSAgICA0MDY5NSwgNDA2OTksIDQwNzAyLCA0MDcwNiwgNDA3MTAsIDQwNzE0LCA0MDcyMCwgNDA3MjYsIDQwNzMyLCA0MDczOCwgCi0gICAgNDA3NDIsIDQwNzQ2LCA0MDc1MCwgNDA3NTQsIDQwNzYwLCA0MDc2NiwgNDA3NzAsIDQwNzc1LCA0MDc3OSwgNDA3ODQsIAotICAgIDQwNzg5LCA0MDc5NCwgNDA3OTcsIDQwODAxLCA0MDgwNCwgNDA4MDgsIDQwODE1LCA0MDgyMywgNDA4MzQsIDQwODQ1LCAKLSAgICA0MDg1MCwgNDA4NTksIDQwODY2LCA0MDg3NSwgNDA4ODQsIDQwODg4LCA0MDg5NCwgNDA5MDIsIDQwOTA2LCA0MDkxMSwgCi0gICAgNDA5MTYsIDQwOTIyLCA0MDkyOCwgNDA5MzQsIDQwOTQxLCA0MDk0NSwgNDA5NDksIDQwOTU0LCA0MDk1NywgNDA5NTksIAotICAgIDQwOTYzLCA0MDk2NywgNDA5NzUsIDQwOTc5LCA0MDk4MSwgNDA5ODMsIDQwOTg3LCA0MDk5NSwgNDEwMDAsIDQxMDA2LCAKLSAgICA0MTAxNiwgNDEwMjMsIDQxMDI4LCA0MTAzMiwgNDEwMzYsIDQxMDQwLCA0MTA0MywgNDEwNDYsIDQxMDQ5LCA0MTA1MywgCi0gICAgNDEwNTcsIDQxMDYxLCA0MTA2NSwgNDEwNjksIDQxMDcyLCA0MTA3NiwgNDEwODAsIDQxMDgzLCA0MTA4NSwgNDEwODgsIAotICAgIDQxMDkwLCA0MTA5NCwgNDEwOTgsIDQxMTAwLCA0MTEwNiwgNDExMDksIDQxMTE0LCA0MTExOCwgNDExMjIsIDQxMTI0LCAKLSAgICA0MTEyNiwgNDExMjgsIDQxMTMxLCA0MTEzNSwgNDExMzksIDQxMTQzLCA0MTE0NywgNDExNTEsIDQxMTU3LCA0MTE2MywgCi0gICAgNDExNjUsIDQxMTY3LCA0MTE2OSwgNDExNzEsIDQxMTc0LCA0MTE3NiwgNDExODAsIDQxMTgyLCA0MTE4NiwgNDExODksIAotICAgIDQxMTk1LCA0MTE5OSwgNDEyMDMsIDQxMjA2LCA0MTIwOSwgNDEyMTMsIDQxMjE5LCA0MTIyMywgNDEyMzMsIDQxMjQzLCAKLSAgICA0MTI0NywgNDEyNTMsIDQxMjU5LCA0MTI2MiwgNDEyNjYsIDQxMjY5LCA0MTI3NCwgNDEyNzgsIDQxMjg0LCA0MTI4OCwgCi0gICAgNDEzMDAsIDQxMzA4LCA0MTMxMiwgNDEzMTYsIDQxMzIyLCA0MTMyNiwgNDEzMjksIDQxMzMxLCA0MTMzNCwgNDEzMzgsIAotICAgIDQxMzQyLCA0MTM0OSwgNDEzNTMsIDQxMzU3LCA0MTM2MSwgNDEzNjQsIDQxMzY5LCA0MTM3NCwgNDEzNzksIDQxMzg0LCAKLSAgICA0MTM4OSwgNDEzOTQsIDQxNDAyLCA0MTQxMCwgNDE0MTQsIDQxNDE4LCA0MTQyMCwgNDE0MjUsIDQxNDI5LCA0MTQzMywgCi0gICAgNDE0NDEsIDQxNDQ5LCA0MTQ1NSwgNDE0NjEsIDQxNDcwLCA0MTQ3OSwgNDE0ODQsIDQxNDg5LCA0MTQ5NywgNDE1MDUsIAotICAgIDQxNTA3LCA0MTUwOSwgNDE1MTQsIDQxNTE5LCA0MTUyNSwgNDE1MzEsIDQxNTM3LCA0MTU0MywgNDE1NDcsIDQxNTUxLCAKLSAgICA0MTU1OCwgNDE1NjUsIDQxNTcxLCA0MTU3NywgNDE1ODcsIDQxNTk3LCA0MTYwNSwgNDE2MTMsIDQxNjE1LCA0MTYxOSwgCi0gICAgNDE2MjMsIDQxNjI4LCA0MTYzMywgNDE2NDAsIDQxNjQ3LCA0MTY1MCwgNDE2NTMsIDQxNjU2LCA0MTY1OSwgNDE2NjIsIAotICAgIDQxNjY3LCA0MTY3MSwgNDE2NzYsIDQxNjgxLCA0MTY4NCwgNDE2ODcsIDQxNjkwLCA0MTY5MywgNDE2OTYsIDQxNzAwLCAKLSAgICA0MTcwMywgNDE3MDYsIDQxNzA5LCA0MTcxMiwgNDE3MTQsIDQxNzE2LCA0MTcxOCwgNDE3MjAsIDQxNzI4LCA0MTczNiwgCi0gICAgNDE3NDIsIDQxNzQ2LCA0MTc1MiwgNDE3NjIsIDQxNzY4LCA0MTc3NCwgNDE3ODAsIDQxNzg4LCA0MTc5NiwgNDE4MDcsIAotICAgIDQxODExLCA0MTgxNSwgNDE4MTcsIDQxODIzLCA0MTgyNSwgNDE4MjcsIDQxODI5LCA0MTgzMSwgNDE4MzcsIDQxODQwLCAKLSAgICA0MTg0NiwgNDE4NTIsIDQxODU2LCA0MTg2MCwgNDE4NjQsIDQxODY3LCA0MTg3MSwgNDE4NzUsIDQxODc3LCA0MTg4NiwgCi0gICAgNDE4OTUsIDQxOTAwLCA0MTkwNSwgNDE5MTEsIDQxOTE3LCA0MTkyMywgNDE5MjYsIDQxOTI5LCA0MTkzMiwgNDE5MzUsIAotICAgIDQxOTM3LCA0MTk0MiwgNDE5NDcsIDQxOTUyLCA0MTk1OCwgNDE5NjQsIDQxOTcyLCA0MTk4MCwgNDE5ODYsIDQxOTkyLCAKLSAgICA0MTk5OCwgNDIwMDQsIDQyMDEzLCA0MjAyMiwgNDIwMzEsIDQyMDQwLCA0MjA0OSwgNDIwNTgsIDQyMDY3LCA0MjA3NiwgCi0gICAgNDIwODUsIDQyMDk0LCA0MjEwMiwgNDIxMTQsIDQyMTI0LCA0MjEzOSwgNDIxNDIsIDQyMTQ3LCA0MjE1MywgNDIxNTksIAotICAgIDQyMTY2LCA0MjE4MCwgNDIxOTUsIDQyMjAxLCA0MjIwNywgNDIyMTQsIDQyMjIwLCA0MjIyOCwgNDIyMzQsIDQyMjQ3LCAKLSAgICA0MjI2MSwgNDIyNjYsIDQyMjcyLCA0MjI3OSwgNDIyODIsIDQyMjg1LCA0MjI4NywgNDIyOTAsIDQyMjkzLCA0MjI5NSwgCi0gICAgNDIyOTcsIDQyMzAxLCA0MjMwNCwgNDIzMDcsIDQyMzEwLCA0MjMxMywgNDIzMTgsIDQyMzIzLCA0MjMyOCwgNDIzMzMsIAotICAgIDQyMzM4LCA0MjM0MSwgNDIzNDMsIDQyMzQ1LCA0MjM0NywgNDIzNTEsIDQyMzU1LCA0MjM1OSwgNDIzNjUsIDQyMzcwLCAKLSAgICA0MjM3MiwgNDIzNzQsIDQyMzc5LCA0MjM4NCwgNDIzODksIDQyMzk0LCA0MjM5OSwgNDI0MDQsIDQyNDA2LCA0MjQwOCwgCi0gICAgNDI0MTcsIDQyNDIxLCA0MjQyOSwgNDI0MzgsIDQyNDQwLCA0MjQ0NSwgNDI0NTAsIDQyNDU4LCA0MjQ2MiwgNDI0NjQsIAotICAgIDQyNDY4LCA0MjQ3MCwgNDI0NzQsIDQyNDc4LCA0MjQ4MiwgNDI0ODQsIDQyNDg2LCA0MjQ4OCwgNDI0OTUsIDQyNTA0LCAKLSAgICA0MjUxMywgNDI1MjIsIDQyNTMxLCA0MjU0MCwgNDI1NDksIDQyNTU4LCA0MjU2NywgNDI1NzUsIDQyNTgzLCA0MjU5MiwgCi0gICAgNDI2MDEsIDQyNjEwLCA0MjYxOSwgNDI2MjcsIDQyNjM1LCA0MjY0NCwgNDI2NTMsIDQyNjYyLCA0MjY3MiwgNDI2ODEsIAotICAgIDQyNjkxLCA0MjcwMCwgNDI3MTAsIDQyNzE5LCA0MjcyOSwgNDI3MzksIDQyNzQ4LCA0Mjc1OCwgNDI3NjcsIDQyNzc3LCAKLSAgICA0Mjc4NiwgNDI3OTYsIDQyODA1LCA0MjgxNCwgNDI4MjMsIDQyODMyLCA0Mjg0MSwgNDI4NTEsIDQyODYwLCA0Mjg2OSwgCi0gICAgNDI4NzgsIDQyODg4LCA0Mjg5NywgNDI5MDYsIDQyOTE1LCA0MjkyNCwgNDI5MzQsIDQyOTQ0LCA0Mjk1MywgNDI5NjIsIAotICAgIDQyOTcwLCA0Mjk3OCwgNDI5ODUsIDQyOTkzLCA0MzAwMiwgNDMwMTMsIDQzMDIyLCA0MzAzMSwgNDMwNDAsIDQzMDQ3LCAKLSAgICA0MzA1NCwgNDMwNjEsIDQzMDcwLCA0MzA3OSwgNDMwODgsIDQzMDk3LCA0MzEwNCwgNDMxMDksIDQzMTE4LCA0MzEyMywgCi0gICAgNDMxMjYsIDQzMTM0LCA0MzEzNywgNDMxNDIsIDQzMTQ3LCA0MzE1MCwgNDMxNTMsIDQzMTYxLCA0MzE2NCwgNDMxNjksIAotICAgIDQzMTcyLCA0MzE3OSwgNDMxODQsIDQzMTkyLCA0MzE5NSwgNDMxOTgsIDQzMjAxLCA0MzIwNiwgNDMyMTEsIDQzMjE0LCAKLSAgICA0MzIxNywgNDMyMjUsIDQzMjI4LCA0MzIzNSwgNDMyNDIsIDQzMjQ2LCA0MzI1MCwgNDMyNTUsIDQzMjYwLCA0MzI2NiwgCi0gICAgNDMyNzEsIDQzMjc3LCA0MzI4MywgNDMyODgsIDQzMjk0LCA0MzMwMiwgNDMzMDgsIDQzMzE2LCA0MzMyNCwgNDMzMzAsIAotICAgIDQzMzM4LCA0MzM0NiwgNDMzNTUsIDQzMzYzLCA0MzM2OSwgNDMzNzcsIDQzMzg2LCA0MzM5NCwgNDMzOTgsIDQzNDAzLCAKLSAgICA0MzQxNiwgNDM0MjksIDQzNDMzLCA0MzQzNywgNDM0NDEsIDQzNDQ1LCA0MzQ1NSwgNDM0NTksIDQzNDY0LCA0MzQ2OSwgCi0gICAgNDM0NzQsIDQzNDc5LCA0MzQ4NCwgNDM0ODksIDQzNDk5LCA0MzUwOSwgNDM1MTcsIDQzNTI3LCA0MzUzNywgNDM1NDUsIAotICAgIDQzNTU1LCA0MzU2NSwgNDM1NzMsIDQzNTgzLCA0MzU5MywgNDM2MDEsIDQzNjA5LCA0MzYxOSwgNDM2MjksIDQzNjMyLCAKLSAgICA0MzYzNSwgNDM2MzgsIDQzNjQzLCA0MzY0NywgNDM2NTMsIDQzNjYwLCA0MzY2NywgNDM2NzUsIDQzNjgyLCA0MzY4NiwgCi0gICAgNDM2OTAsIDQzNjk0LCA0MzY5OCwgNDM3MDAsIDQzNzA0LCA0MzcwOCwgNDM3MTMsIDQzNzE4LCA0MzcyNSwgNDM3MzIsIAotICAgIDQzNzM1LCA0Mzc0MiwgNDM3NDQsIDQzNzQ2LCA0Mzc1MCwgNDM3NTQsIDQzNzU5LCA0Mzc2NSwgNDM3NzEsIDQzNzc3LCAKLSAgICA0Mzc4MywgNDM3OTIsIDQzODAxLCA0MzgxMCwgNDM4MTQsIDQzODE2LCA0MzgyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDM4MjcsIDQzODMxLCA0MzgzOCwgNDM4NDUsIDQzODUyLCA0Mzg1OSwgNDM4NjMsIDQzODY3LCAKLSAgICA0Mzg3MSwgNDM4NzUsIDQzODgwLCA0Mzg4NiwgNDM4OTEsIDQzODk3LCA0MzkwMywgNDM5MDksIDQzOTE1LCA0MzkyMywgCi0gICAgNDM5MzAsIDQzOTM3LCA0Mzk0NCwgNDM5NTEsIDQzOTU2LCA0Mzk2MiwgNDM5NzEsIDQzOTc1LCA0Mzk4MiwgNDM5ODYsIAotICAgIDQzOTkwLCA0Mzk5NiwgNDQwMDIsIDQ0MDA4LCA0NDAxNCwgNDQwMTgsIDQ0MDIyLCA0NDAyNSwgNDQwMjgsIDQ0MDMyLCAKLSAgICA0NDAzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDQwNDYsIDQ0MDQ5LCA0NDA1MywgNDQwNTcsIDQ0MDYzLCA0NDA2OSwgNDQwNzUsIDQ0MDgzLCA0NDA5MCwgCi0gICAgNDQwOTQsIDQ0MTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0NDEwNywgNDQxMTAsIDQ0MTEzLCA0NDExNiwgNDQxMTksIDQ0MTIyLCA0NDEyNSwgNDQxMjgsIDQ0MTMxLCA0NDEzNCwgCi0gICAgNDQxMzgsIDQ0MTQyLCA0NDE0NiwgNDQxNTAsIDQ0MTU0LCA0NDE1OCwgNDQxNjIsIDQ0MTY2LCA0NDE3MCwgNDQxNzQsIAotICAgIDQ0MTc4LCA0NDE4MSwgNDQxODQsIDQ0MTg3LCA0NDE5MCwgNDQxOTMsIDQ0MTk2LCA0NDE5OSwgNDQyMDIsIDQ0MjA1LCAKLSAgICA0NDIwOSwgNDQyMTMsIDQ0MjE3LCA0NDIyMSwgNDQyMjUsIDQ0MjI5LCA0NDIzMywgNDQyMzcsIDQ0MjQxLCA0NDI0NSwgCi0gICAgNDQyNDksIDQ0MjU1LCA0NDI2MSwgNDQyNjcsIDQ0Mjc0LCA0NDI4MSwgNDQyODgsIDQ0Mjk1LCA0NDMwMiwgNDQzMDksIAotICAgIDQ0MzE2LCA0NDMyMywgNDQzMzAsIDQ0MzM3LCA0NDM0NCwgNDQzNTEsIDQ0MzU4LCA0NDM2NSwgNDQzNzIsIDQ0Mzc5LCAKLSAgICA0NDM4NiwgNDQzOTEsIDQ0Mzk3LCA0NDQwMywgNDQ0MDksIDQ0NDE0LCA0NDQyMCwgNDQ0MjYsIDQ0NDMyLCA0NDQzNywgCi0gICAgNDQ0NDMsIDQ0NDQ5LCA0NDQ1NCwgNDQ0NTksIDQ0NDY1LCA0NDQ3MCwgNDQ0NzYsIDQ0NDgyLCA0NDQ4NywgNDQ0OTMsIAotICAgIDQ0NDk5LCA0NDUwNCwgNDQ1MTAsIDQ0NTE2LCA0NDUyMiwgNDQ1MjgsIDQ0NTM0LCA0NDUzOSwgNDQ1NDUsIDQ0NTUxLCAKLSAgICA0NDU1NywgNDQ1NjIsIDQ0NTY4LCA0NDU3NCwgNDQ1ODAsIDQ0NTg1LCA0NDU5MSwgNDQ1OTcsIDQ0NjAyLCA0NDYwNywgCi0gICAgNDQ2MTMsIDQ0NjE4LCA0NDYyNCwgNDQ2MzAsIDQ0NjM1LCA0NDY0MSwgNDQ2NDcsIDQ0NjUyLCA0NDY1OCwgNDQ2NjQsIAotICAgIDQ0NjcwLCA0NDY3NiwgNDQ2ODIsIDQ0Njg3LCA0NDY5MywgNDQ2OTksIDQ0NzA1LCA0NDcxMCwgNDQ3MTYsIDQ0NzIyLCAKLSAgICA0NDcyOCwgNDQ3MzMsIDQ0NzM5LCA0NDc0NSwgNDQ3NTAsIDQ0NzU1LCA0NDc2MSwgNDQ3NjYsIDQ0NzcyLCA0NDc3OCwgCi0gICAgNDQ3ODMsIDQ0Nzg5LCA0NDc5NSwgNDQ4MDAsIDQ0ODA2LCA0NDgxMiwgNDQ4MTgsIDQ0ODI0LCA0NDgzMCwgNDQ4MzQsIAotICAgIDQ0ODM5LCA0NDg0NCwgNDQ4NDksIDQ0ODU0LCA0NDg1OSwgNDQ4NjQsIDQ0ODY5LCA0NDg3NCwgNDQ4NzksIDQ0ODg0LCAKLSAgICA0NDg4OCwgNDQ4OTIsIDQ0ODk2LCA0NDkwMCwgNDQ5MDQsIDQ0OTA4LCA0NDkxMiwgNDQ5MTYsIDQ0OTIwLCA0NDkyNSwgCi0gICAgNDQ5MzAsIDQ0OTM1LCA0NDk0MCwgNDQ5NDUsIDQ0OTUwLCA0NDk1OSwgNDQ5NjgsIDQ0OTc3LCA0NDk4NiwgNDQ5OTUsIAotICAgIDQ1MDA0LCA0NTAxMywgNDUwMjIsIDQ1MDI5LCA0NTAzNywgNDUwNDUsIDQ1MDUyLCA0NTA1OSwgNDUwNjcsIDQ1MDc1LCAKLSAgICA0NTA4MiwgNDUwODksIDQ1MDk3LCA0NTEwNSwgNDUxMTIsIDQ1MTE5LCA0NTEyNywgNDUxMzUsIDQ1MTQyLCA0NTE0OSwgCi0gICAgNDUxNTcsIDQ1MTY2LCA0NTE3NSwgNDUxODMsIDQ1MTkyLCA0NTIwMSwgNDUyMDgsIDQ1MjE1LCA0NTIyMywgNDUyMzIsIAotICAgIDQ1MjQxLCA0NTI0OSwgNDUyNTgsIDQ1MjY3LCA0NTI3NCwgNDUyODEsIDQ1MjkwLCA0NTI5OSwgNDUzMDcsIDQ1MzE1LCAKLSAgICA0NTMyNCwgNDUzMzMsIDQ1MzQwLCA0NTM0NywgNDUzNTYsIDQ1MzY1LCA0NTM3MywgNDUzODEsIDQ1MzkwLCA0NTM5OSwgCi0gICAgNDU0MDYsIDQ1NDEzLCA0NTQyMiwgNDU0MzEsIDQ1NDM5LCA0NTQ0OCwgNDU0NTcsIDQ1NDY1LCA0NTQ3NSwgNDU0ODUsIAotICAgIDQ1NDk1LCA0NTUwNSwgNDU1MTQsIDQ1NTIzLCA0NTUzMiwgNDU1NDEsIDQ1NTQ4LCA0NTU1NiwgNDU1NjQsIDQ1NTcyLCAKLSAgICA0NTU4MCwgNDU1ODUsIDQ1NTkwLCA0NTU5OSwgNDU2MDcsIDQ1NjE0LCA0NTYyMywgNDU2MzEsIDQ1NjM4LCA0NTY0NywgCi0gICAgNDU2NTUsIDQ1NjYyLCA0NTY3MSwgNDU2NzksIDQ1Njg2LCA0NTY5NSwgNDU3MDMsIDQ1NzEwLCA0NTcxOSwgNDU3MjcsIAotICAgIDQ1NzM0LCA0NTc0MywgNDU3NTEsIDQ1NzU4LCA0NTc2NywgNDU3NzUsIDQ1NzgyLCA0NTc5MSwgNDU3OTksIDQ1ODA2LCAKLSAgICA0NTgxNSwgNDU4MjQsIDQ1ODMzLCA0NTg0MiwgNDU4NTYsIDQ1ODcwLCA0NTg3NywgNDU4ODIsIDQ1ODg3LCA0NTg5MiwgCi0gICAgNDU4OTcsIDQ1OTAyLCA0NTkwNywgNDU5MTIsIDQ1OTE3LCA0NTkyNSwgNDU5MzMsIDQ1OTQxLCA0NTk0OSwgNDU5NTQsIAotICAgIDQ1OTYxLCA0NTk2OCwgNDU5NzUsIDQ1OTgwLCA0NTk4OCwgNDU5OTUsIDQ2MDAzLCA0NjAwNywgNDYwMTQsIDQ2MDIwLCAKLSAgICA0NjAyNywgNDYwMzEsIDQ2MDM3LCA0NjA0MywgNDYwNDksIDQ2MDUzLCA0NjA1NiwgNDYwNjAsIDQ2MDY0LCA0NjA3MSwgCi0gICAgNDYwNzcsIDQ2MDgzLCA0NjA4OSwgNDYwOTUsIDQ2MTA5LCA0NjExOSwgNDYxMzMsIDQ2MTQ3LCA0NjE1MywgNDYxNjMsIAotICAgIDQ2MTc3LCA0NjE4MCwgNDYxODMsIDQ2MTkwLCA0NjE5OCwgNDYyMDMsIDQ2MjA4LCA0NjIxNiwgNDYyMjgsIDQ2MjQwLCAKLSAgICA0NjI0OCwgNDYyNTIsIDQ2MjU2LCA0NjI1OSwgNDYyNjIsIDQ2MjY2LCA0NjI3MCwgNDYyNzMsIDQ2Mjc2LCA0NjI4MSwgCi0gICAgNDYyODYsIDQ2MjkyLCA0NjI5OCwgNDYzMDMsIDQ2MzA4LCA0NjMxNCwgNDYzMjAsIDQ2MzI1LCA0NjMzMCwgNDYzMzUsIAotICAgIDQ2MzQwLCA0NjM0NiwgNDYzNTIsIDQ2MzU3LCA0NjM2MiwgNDYzNjgsIDQ2Mzc0LCA0NjM3OSwgNDYzODQsIDQ2Mzg3LCAKLSAgICA0NjM5MCwgNDYzOTksIDQ2NDAxLCA0NjQwMywgNDY0MDYsIDQ2NDEwLCA0NjQxNiwgNDY0MTgsIDQ2NDIxLCA0NjQyOCwgCi0gICAgNDY0MzUsIDQ2NDQzLCA0NjQ1MSwgNDY0NjEsIDQ2NDc1LCA0NjQ4MCwgNDY0ODUsIDQ2NDg5LCA0NjQ5NCwgNDY1MDIsIAotICAgIDQ2NTEwLCA0NjUxOSwgNDY1MjgsIDQ2NTM3LCA0NjU0NiwgNDY1NTEsIDQ2NTU2LCA0NjU2MiwgNDY1NjgsIDQ2NTc0LCAKLSAgICA0NjU4MCwgNDY1ODMsIDQ2NTg5LCA0NjU5NSwgNDY2MDUsIDQ2NjE1LCA0NjYyMywgNDY2MzEsIDQ2NjQwLCA0NjY0OSwgCi0gICAgNDY2NTMsIDQ2NjYxLCA0NjY2OSwgNDY2NzcsIDQ2Njg1LCA0NjY5NCwgNDY3MDMsIDQ2NzEyLCA0NjcyMSwgNDY3MjYsIAotICAgIDQ2NzMxLCA0NjczNiwgNDY3NDEsIDQ2NzQ2LCA0Njc1MiwgNDY3NTgsIDQ2NzYzLCA0Njc2OSwgNDY3NzEsIDQ2NzczLCAKLSAgICA0Njc3NSwgNDY3NzcsIDQ2NzgwLCA0Njc4MywgNDY3ODUsIDQ2Nzg3LCA0Njc4OSwgNDY3OTMsIDQ2Nzk3LCA0Njc5OSwgCi0gICAgNDY4MDEsIDQ2ODA0LCA0NjgwNywgNDY4MTEsIDQ2ODE3LCA0NjgyMywgNDY4MjUsIDQ2ODMyLCA0NjgzNiwgNDY4NDEsIAotICAgIDQ2ODQ2LCA0Njg0OCwgNDY4NTgsIDQ2ODY0LCA0Njg3MCwgNDY4NzYsIDQ2ODgyLCA0Njg4OCwgNDY4OTQsIDQ2ODk5LCAKLSAgICA0NjkwMiwgNDY5MDUsIDQ2OTA4LCA0NjkxMCwgNDY5MTIsIDQ2OTE2LCA0NjkyMCwgNDY5MjUsIDQ2OTMwLCA0NjkzNSwgCi0gICAgNDY5MzgsIDQ2OTQyLCA0Njk0NywgNDY5NTAsIDQ2OTU0LCA0Njk1OSwgNDY5NjQsIDQ2OTY5LCA0Njk3NCwgNDY5NzksIAotICAgIDQ2OTg0LCA0Njk4OSwgNDY5OTQsIDQ2OTk5LCA0NzAwNCwgNDcwMDksIDQ3MDE0LCA0NzAyMCwgNDcwMjYsIDQ3MDMyLCAKLSAgICA0NzAzNCwgNDcwMzcsIDQ3MDM5LCA0NzA0MiwgNDcwNDQsIDQ3MDQ2LCA0NzA0OCwgNDcwNTAsIDQ3MDUyLCA0NzA1NCwgCi0gICAgNDcwNTYsIDQ3MDU4LCA0NzA2MCwgNDcwNjIsIDQ3MDY0LCA0NzA2NiwgNDcwNjgsIDQ3MDcwLCA0NzA3MiwgNDcwNzQsIAotICAgIDQ3MDc2LCA0NzA4MSwgNDcwODYsIDQ3MDkxLCA0NzA5NiwgNDcxMDEsIDQ3MTA2LCA0NzExMSwgNDcxMTYsIDQ3MTIxLCAKLSAgICA0NzEyNiwgNDcxMzEsIDQ3MTM2LCA0NzE0MSwgNDcxNDYsIDQ3MTUxLCA0NzE1NiwgNDcxNjEsIDQ3MTY2LCA0NzE3MSwgCi0gICAgNDcxNzYsIDQ3MTgwLCA0NzE4NCwgNDcxODgsIDQ3MTk0LCA0NzIwMCwgNDcyMDUsIDQ3MjEwLCA0NzIxNSwgNDcyMjAsIAotICAgIDQ3MjI1LCA0NzIzMCwgNDcyMzgsIDQ3MjQ2LCA0NzI1NCwgNDcyNjIsIDQ3MjcwLCA0NzI3OCwgNDcyODYsIDQ3Mjk0LCAKLSAgICA0NzMwMCwgNDczMDUsIDQ3MzEwLCA0NzMxNSwgNDczMTgsIDQ3MzIyLCA0NzMyNiwgNDczMzAsIDQ3MzM0LCA0NzMzOCwgCi0gICAgNDczNDIsIDQ3MzQ5LCA0NzM1NiwgNDczNjQsIDQ3MzcyLCA0NzM3NywgNDczODIsIDQ3Mzg5LCA0NzM5NiwgNDc0MDMsIAotICAgIDQ3NDEwLCA0NzQxMywgNDc0MTYsIDQ3NDIxLCA0NzQyMywgNDc0MjcsIDQ3NDMyLCA0NzQzNCwgNDc0MzYsIDQ3NDM4LCAKLSAgICA0NzQ0MCwgNDc0NDUsIDQ3NDQ4LCA0NzQ1MCwgNDc0NTUsIDQ3NDYyLCA0NzQ2OSwgNDc0NzIsIDQ3NDc2LCA0NzQ4MSwgCi0gICAgNDc0ODYsIDQ3NDk0LCA0NzUwMCwgNDc1MDYsIDQ3NTE4LCA0NzUyNSwgNDc1MzIsIDQ3NTM3LCA0NzU0MiwgNDc1NDgsIAotICAgIDQ3NTUxLCA0NzU1NCwgNDc1NTksIDQ3NTYxLCA0NzU2NSwgNDc1NjcsIDQ3NTY5LCA0NzU3MSwgNDc1NzMsIDQ3NTc1LCAKLSAgICA0NzU3NywgNDc1ODIsIDQ3NTg0LCA0NzU4NiwgNDc1ODgsIDQ3NTkwLCA0NzU5NCwgNDc1OTYsIDQ3NTk5LCA0NzYwNCwgCi0gICAgNDc2MDksIDQ3NjE0LCA0NzYxOSwgNDc2MjUsIDQ3NjMxLCA0NzYzMywgNDc2MzYsIDQ3NjQzLCA0NzY1MCwgNDc2NTcsIAotICAgIDQ3NjY0LCA0NzY2OCwgNDc2NzIsIDQ3Njc0LCA0NzY3NiwgNDc2ODAsIDQ3Njg2LCA0NzY5MSwgNDc2OTMsIDQ3Njk3LCAKLSAgICA0NzcwNiwgNDc3MTQsIDQ3NzIyLCA0NzcyOCwgNDc3MzQsIDQ3NzM5LCA0Nzc0NSwgNDc3NTAsIDQ3NzUzLCA0Nzc2NywgCi0gICAgNDc3NzAsIDQ3Nzc1LCA0Nzc4MCwgNDc3ODYsIDQ3Nzk2LCA0Nzc5OCwgNDc4MDQsIDQ3ODEwLCA0NzgxNCwgNDc4MjEsIAotICAgIDQ3ODI1LCA0NzgyNywgNDc4MjksIDQ3ODMzLCA0NzgzOSwgNDc4NDQsIDQ3ODUwLCA0Nzg1MiwgNDc4NTgsIDQ3ODYwLCAKLSAgICA0Nzg2NiwgNDc4NjgsIDQ3ODcwLCA0Nzg3NSwgNDc4NzcsIDQ3ODgxLCA0Nzg4NiwgNDc4ODgsIDQ3ODkzLCA0Nzg5OCwgCi0gICAgNDc5MDIsIDQ3OTA5LCAwLCA0NzkxOSwgNDc5MjUsIDQ3OTI4LCA0NzkzNCwgNDc5MzcsIDQ3OTQyLCA0Nzk0NywgNDc5NTEsIAotICAgIDQ3OTUzLCA0Nzk1NSwgNDc5NTksIDQ3OTYzLCA0Nzk2NywgNDc5NzEsIDQ3OTc2LCA0Nzk3OCwgNDc5ODMsIDQ3OTg2LCAKLSAgICA0Nzk4OSwgNDc5OTIsIDQ3OTk2LCA0ODAwMCwgNDgwMDUsIDQ4MDA5LCA0ODAxNCwgNDgwMTksIDQ4MDIzLCA0ODAyOCwgCi0gICAgNDgwMzQsIDQ4MDM3LCA0ODA0MywgNDgwNDgsIDQ4MDUyLCA0ODA1NywgNDgwNjMsIDQ4MDY5LCA0ODA3NiwgNDgwODIsIAotICAgIDQ4MDg5LCA0ODA5NiwgNDgwOTgsIDQ4MTA1LCA0ODEwOSwgNDgxMTUsIDQ4MTIxLCA0ODEyNiwgNDgxMzIsIDQ4MTM2LCAKLSAgICA0ODE0MSwgNDgxNDQsIDQ4MTQ5LCA0ODE1NSwgNDgxNjIsIDQ4MTcwLCA0ODE3NywgNDgxODYsIDQ4MTk2LCA0ODIwMywgCi0gICAgNDgyMDksIDQ4MjEzLCA0ODIyMCwgNDgyMjUsIDQ4MjM0LCA0ODIzNywgNDgyNDAsIDQ4MjQ5LCA0ODI1OSwgNDgyNjYsIAotICAgIDQ4MjY4LCA0ODI3NCwgNDgyNzksIDQ4MjgxLCA0ODI4NCwgNDgyODgsIDQ4Mjk2LCA0ODMwNSwgNDgzMDgsIDQ4MzEzLCAKLSAgICA0ODMxOCwgNDgzMjYsIDQ4MzM0LCA0ODM0MiwgNDgzNTAsIDQ4MzU2LCA0ODM2MiwgNDgzNjgsIDQ4Mzc2LCA0ODM4MSwgCi0gICAgNDgzODQsIDQ4Mzg4LCA0ODM5MSwgNDg0MDMsIDQ4NDEzLCA0ODQyNCwgNDg0MzMsIDQ4NDQ0LCA0ODQ1NCwgNDg0NjMsIAotICAgIDQ4NDY5LCA0ODQ3NywgNDg0ODEsIDQ4NDg5LCA0ODQ5MywgNDg1MDEsIDQ4NTA4LCA0ODUxNSwgNDg1MjQsIDQ4NTMzLCAKLSAgICA0ODU0MywgNDg1NTMsIDQ4NTYzLCA0ODU3MywgNDg1ODIsIDQ4NTkxLCA0ODYwMSwgNDg2MTEsIDQ4NjIwLCA0ODYyOSwgCi0gICAgNDg2MzUsIDQ4NjQxLCA0ODY0NywgNDg2NTMsIDQ4NjU5LCA0ODY2NSwgNDg2NzEsIDQ4Njc3LCA0ODY4MywgNDg2OTAsIAotICAgIDQ4Njk2LCA0ODcwMiwgNDg3MDgsIDQ4NzE0LCA0ODcyMCwgNDg3MjYsIDQ4NzMyLCA0ODczOCwgNDg3NDQsIDQ4NzUxLCAKLSAgICA0ODc1OCwgNDg3NjUsIDQ4NzcyLCA0ODc3OSwgNDg3ODYsIDQ4NzkzLCA0ODgwMCwgNDg4MDcsIDQ4ODE0LCA0ODgyMiwgCi0gICAgNDg4MjcsIDQ4ODMwLCA0ODgzNCwgNDg4MzgsIDQ4ODQ0LCA0ODg0NywgNDg4NTMsIDQ4ODU5LCA0ODg2NCwgNDg4NjgsIAotICAgIDQ4ODczLCA0ODg3OSwgNDg4ODYsIDQ4ODg5LCA0ODg5NiwgNDg5MDMsIDQ4OTA3LCA0ODkxNiwgNDg5MjUsIDQ4OTMwLCAKLSAgICA0ODkzNiwgNDg5NDEsIDQ4OTQ2LCA0ODk1MywgNDg5NjAsIDQ4OTY4LCA0ODk3NiwgNDg5ODUsIDQ4OTg5LCA0ODk5OCwgCi0gICAgNDkwMDMsIDQ5MDA3LCA0OTAxNCwgNDkwMTgsIDQ5MDI1LCA0OTAzMywgNDkwMzgsIDQ5MDQ2LCA0OTA1MCwgNDkwNTUsIAotICAgIDQ5MDU5LCA0OTA2NCwgNDkwNjgsIDQ5MDczLCA0OTA3OCwgNDkwODcsIDQ5MDg5LCA0OTA5MiwgNDkwOTUsIDQ5MTAyLCAKLSAgICA0OTEwOSwgNDkxMTQsIDQ5MTIyLCA0OTEyOCwgNDkxMzQsIDQ5MTM5LCA0OTE0MiwgNDkxNDcsIDQ5MTUyLCA0OTE1NywgCi0gICAgNDkxNjUsIDQ5MTY5LCA0OTE3NiwgNDkxODQsIDQ5MTkyLCA0OTE5NywgNDkyMDIsIDQ5MjA4LCA0OTIxMywgNDkyMTgsIAotICAgIDQ5MjI0LCA0OTIyOSwgNDkyMzIsIDQ5MjM2LCA0OTI0MCwgNDkyNDcsIDQ5MjU2LCA0OTI2MSwgNDkyNzAsIDQ5Mjc5LCAKLSAgICA0OTI4NSwgNDkyOTEsIDQ5Mjk2LCA0OTMwMSwgNDkzMDYsIDQ5MzExLCA0OTMxNywgNDkzMjMsIDQ5MzMxLCA0OTMzOSwgCi0gICAgNDkzNDUsIDQ5MzUxLCA0OTM1NiwgNDkzNjEsIDQ5MzY4LCA0OTM3NSwgNDkzODEsIDQ5Mzg0LCA0OTM4NywgNDkzOTEsIAotICAgIDQ5Mzk1LCA0OTM5OSwgNDk0MDQsIDQ5NDEwLCA0OTQxNiwgNDk0MjMsIDQ5NDMwLCA0OTQzNSwgNDk0MzksIDQ5NDQzLCAKLSAgICA0OTQ0NywgNDk0NTEsIDQ5NDU1LCA0OTQ1OSwgNDk0NjMsIDQ5NDY3LCA0OTQ3MSwgNDk0NzUsIDQ5NDc5LCA0OTQ4MywgCi0gICAgNDk0ODcsIDQ5NDkxLCA0OTQ5NSwgNDk0OTksIDQ5NTAzLCA0OTUwNywgNDk1MTEsIDQ5NTE1LCA0OTUxOSwgNDk1MjMsIAotICAgIDQ5NTI3LCA0OTUzMSwgNDk1MzUsIDQ5NTM5LCA0OTU0MywgNDk1NDcsIDQ5NTUxLCA0OTU1NSwgNDk1NTksIDQ5NTYzLCAKLSAgICA0OTU2NywgNDk1NzEsIDQ5NTc1LCA0OTU3OSwgNDk1ODMsIDQ5NTg3LCA0OTU5MSwgNDk1OTUsIDQ5NTk5LCA0OTYwMywgCi0gICAgNDk2MDcsIDQ5NjExLCA0OTYxNSwgNDk2MTksIDQ5NjIzLCA0OTYyNywgNDk2MzEsIDQ5NjM1LCA0OTYzOSwgNDk2NDMsIAotICAgIDQ5NjQ3LCA0OTY1MSwgNDk2NTUsIDQ5NjU5LCA0OTY2MywgNDk2NjcsIDQ5NjcxLCA0OTY3NSwgNDk2NzksIDQ5NjgzLCAKLSAgICA0OTY4NywgNDk2OTEsIDQ5Njk1LCA0OTY5OSwgNDk3MDMsIDQ5NzA3LCA0OTcxMSwgNDk3MTUsIDQ5NzE5LCA0OTcyMywgCi0gICAgNDk3MjcsIDQ5NzMxLCA0OTczNSwgNDk3MzksIDQ5NzQzLCA0OTc0NywgNDk3NTEsIDQ5NzU1LCA0OTc1OSwgNDk3NjMsIAotICAgIDQ5NzY3LCA0OTc3MSwgNDk3NzUsIDQ5Nzc5LCA0OTc4MywgNDk3ODcsIDQ5NzkxLCA0OTc5NSwgNDk3OTksIDQ5ODAzLCAKLSAgICA0OTgwNywgNDk4MTEsIDQ5ODE1LCA0OTgxOSwgNDk4MjMsIDQ5ODI3LCA0OTgzMSwgNDk4MzUsIDQ5ODM5LCA0OTg0MywgCi0gICAgNDk4NDcsIDQ5ODUxLCA0OTg1NSwgNDk4NTksIDQ5ODYzLCA0OTg2NywgNDk4NzEsIDQ5ODc1LCA0OTg3OSwgNDk4ODMsIAotICAgIDQ5ODg3LCA0OTg5MSwgNDk4OTUsIDQ5ODk5LCA0OTkwMywgNDk5MDcsIDQ5OTExLCA0OTkxNSwgNDk5MTksIDQ5OTIzLCAKLSAgICA0OTkyNywgNDk5MzEsIDQ5OTM1LCA0OTkzOSwgNDk5NDMsIDQ5OTQ3LCA0OTk1MSwgNDk5NTUsIDQ5OTU5LCA0OTk2MywgCi0gICAgNDk5NjcsIDQ5OTcxLCA0OTk3NSwgNDk5NzksIDQ5OTgzLCA0OTk4NywgNDk5OTEsIDQ5OTk1LCA0OTk5OSwgNTAwMDMsIAotICAgIDUwMDA3LCA1MDAxMSwgNTAwMTUsIDUwMDE5LCA1MDAyMywgNTAwMjcsIDUwMDMxLCA1MDAzNSwgNTAwMzksIDUwMDQzLCAKLSAgICA1MDA0NywgNTAwNTEsIDUwMDU1LCA1MDA1OSwgNTAwNjMsIDUwMDY3LCA1MDA3MSwgNTAwNzUsIDUwMDc5LCA1MDA4MywgCi0gICAgNTAwODcsIDUwMDkxLCA1MDA5NSwgNTAwOTksIDUwMTAzLCA1MDEwNywgNTAxMTEsIDUwMTE1LCA1MDExOSwgNTAxMjMsIAotICAgIDUwMTI3LCA1MDEzMSwgNTAxMzUsIDUwMTM5LCA1MDE0MywgNTAxNDcsIDUwMTUxLCA1MDE1NSwgNTAxNTksIDUwMTYzLCAKLSAgICA1MDE2NywgNTAxNzEsIDUwMTc1LCA1MDE3OSwgNTAxODMsIDUwMTg3LCA1MDE5MSwgNTAxOTUsIDUwMTk5LCA1MDIwMywgCi0gICAgNTAyMDcsIDUwMjExLCA1MDIxNSwgNTAyMTksIDUwMjIzLCA1MDIyNywgNTAyMzEsIDUwMjM1LCA1MDIzOSwgNTAyNDMsIAotICAgIDUwMjQ3LCA1MDI1MSwgNTAyNTUsIDUwMjU5LCA1MDI2MywgNTAyNjcsIDUwMjcxLCA1MDI3NSwgNTAyNzksIDUwMjgzLCAKLSAgICA1MDI4NywgNTAyOTEsIDUwMjk1LCA1MDI5OSwgNTAzMDMsIDUwMzA3LCA1MDMxMSwgNTAzMTUsIDUwMzE5LCA1MDMyMywgCi0gICAgNTAzMjcsIDUwMzMxLCA1MDMzNSwgNTAzMzksIDUwMzQzLCA1MDM0NywgNTAzNTEsIDUwMzU1LCA1MDM1OSwgNTAzNjMsIAotICAgIDUwMzY3LCA1MDM3MSwgNTAzNzUsIDUwMzc5LCA1MDM4MywgNTAzODcsIDUwMzkxLCA1MDM5NSwgNTAzOTksIDUwNDAzLCAKLSAgICA1MDQwNywgNTA0MTEsIDUwNDE1LCA1MDQxOSwgNTA0MjMsIDUwNDI3LCA1MDQzMSwgNTA0MzUsIDUwNDM5LCA1MDQ0MywgCi0gICAgNTA0NDcsIDUwNDUxLCA1MDQ1NSwgNTA0NTksIDUwNDY2LCA1MDQ3NCwgNTA0ODAsIDUwNDg2LCA1MDQ5MywgNTA1MDAsIAotICAgIDUwNTA2LCA1MDUxMiwgNTA1MTgsIDUwNTI0LCA1MDUyOSwgNTA1MzQsIDUwNTM5LCA1MDU0NCwgNTA1NTAsIDUwNTU2LCAKLSAgICA1MDU2NCwgNTA1NzEsIDUwNTc3LCA1MDU4MywgNTA1OTEsIDUwNjAwLCA1MDYwNywgNTA2MTcsIDUwNjI4LCA1MDYzMSwgCi0gICAgNTA2MzQsIDUwNjM4LCA1MDY0MiwgNTA2NDksIDUwNjU2LCA1MDY2NywgNTA2NzgsIDUwNjg4LCA1MDY5OCwgNTA3MDUsIAotICAgIDUwNzEyLCA1MDcxOSwgNTA3MjYsIDUwNzM3LCA1MDc0OCwgNTA3NTksIDUwNzcwLCA1MDc4MCwgNTA3OTAsIDUwODAyLCAKLSAgICA1MDgxNCwgNTA4MjUsIDUwODM2LCA1MDg0OCwgNTA4NjAsIDUwODY5LCA1MDg3OSwgNTA4ODksIDUwOTAwLCA1MDkxMSwgCi0gICAgNTA5MTgsIDUwOTI1LCA1MDkzMiwgNTA5MzksIDUwOTQ5LCA1MDk1OSwgNTA5NjcsIDUwOTc1LCA1MDk4MiwgNTA5ODksIAotICAgIDUwOTk2LCA1MTAwMywgNTEwMTAsIDUxMDE1LCA1MTAyMCwgNTEwMjYsIDUxMDM0LCA1MTA0NCwgNTEwNTQsIDUxMDY0LCAKLSAgICA1MTA3NCwgNTEwODQsIDUxMDk0LCA1MTEwNCwgNTExMTQsIDUxMTI0LCA1MTEzNCwgNTExNDQsIDUxMTU1LCA1MTE2NiwgCi0gICAgNTExNzYsIDUxMTg2LCA1MTE5NywgNTEyMDgsIDUxMjE4LCA1MTIyOCwgNTEyMzksIDUxMjUwLCA1MTI2MCwgNTEyNzAsIAotICAgIDUxMjgxLCA1MTI5MiwgNTEzMDgsIDUxMzI3LCA1MTM0MywgNTEzNjIsIDUxMzc4LCA1MTM5NCwgNTE0MTAsIDUxNDI2LCAKLSAgICA1MTQzNywgNTE0NDksIDUxNDYwLCA1MTQ3MiwgNTE0OTEsIDUxNTEwLCA1MTUxOCwgNTE1MjQsIDUxNTMxLCA1MTUzOCwgCi0gICAgNTE1NDUsIDUxNTUyLCA1MTU1NywgNTE1NjMsIDUxNTY4LCA1MTU3MywgNTE1NzksIDUxNTg0LCA1MTU4OSwgNTE1OTQsIAotICAgIDUxNTk5LCA1MTYwNCwgNTE2MTEsIDUxNjE2LCA1MTYyMywgNTE2MjgsIDUxNjMzLCA1MTYzNywgNTE2NDEsIDUxNjQ4LCAKLSAgICA1MTY1NSwgNTE2NjIsIDUxNjY5LCA1MTY3NiwgNTE2ODMsIDUxNjk2LCA1MTcwOSwgNTE3MjIsIDUxNzM1LCA1MTc0MywgCi0gICAgNTE3NTEsIDUxNzU3LCA1MTc2MywgNTE3NzAsIDUxNzc3LCA1MTc4NCwgNTE3OTEsIDUxNzk1LCA1MTgwMCwgNTE4MDgsIAotICAgIDUxODE2LCA1MTgyNCwgNTE4MzEsIDUxODM1LCA1MTg0MywgNTE4NTEsIDUxODU1LCA1MTg1OSwgNTE4NjQsIDUxODcxLCAKLSAgICA1MTg3OSwgNTE4ODcsIDUxOTA2LCA1MTkyNSwgNTE5NDQsIDUxOTYzLCA1MTk4MiwgNTIwMDEsIDUyMDIwLCA1MjAzOSwgCi0gICAgNTIwNDUsIDUyMDUyLCA1MjA2MSwgNTIwNjksIDUyMDc3LCA1MjA4MiwgNTIwODUsIDUyMDg4LCA1MjA5MywgNTIwOTYsIAotICAgIDUyMTE1LCA1MjEyMiwgNTIxMjgsIDUyMTM0LCA1MjEzOCwgNTIxNDEsIDUyMTQ0LCA1MjE0NywgNTIxNTksIDUyMTcyLCAKLSAgICA1MjE3OSwgNTIxODYsIDUyMTg5LCA1MjE5MywgNTIxOTYsIDUyMjAxLCA1MjIwNiwgNTIyMTEsIDUyMjE3LCA1MjIyNiwgCi0gICAgNTIyMzMsIDUyMjQwLCA1MjI0OCwgNTIyNTUsIDUyMjYyLCA1MjI2NSwgNTIyNzEsIDUyMjc3LCA1MjI4MCwgNTIyODMsIAotICAgIDUyMjg4LCA1MjI5MywgNTIyOTksIDUyMzA1LCA1MjMwOSwgNTIzMTQsIDUyMzIxLCA1MjMyNSwgNTIzMzEsIDUyMzM1LCAKLSAgICA1MjMzOSwgNTIzNDcsIDUyMzU5LCA1MjM2OCwgNTIzNzIsIDUyMzc0LCA1MjM4MywgNTIzOTIsIDUyMzk4LCA1MjQwMSwgCi0gICAgNTI0MDcsIDUyNDEzLCA1MjQxOCwgNTI0MjMsIDUyNDI4LCA1MjQzMywgNTI0MzgsIDUyNDQzLCA1MjQ0NSwgNTI0NTEsIAotICAgIDUyNDU2LCA1MjQ2MywgNTI0NjcsIDUyNDczLCA1MjQ3NiwgNTI0ODAsIDUyNDg3LCA1MjQ5NCwgNTI0OTYsIDUyNDk4LCAKLSAgICA1MjUwNCwgNTI1MTAsIDUyNTE2LCA1MjUyNSwgNTI1MzQsIDUyNTQxLCA1MjU0OCwgNTI1NTQsIDUyNTYwLCA1MjU2NSwgCi0gICAgNTI1NzAsIDUyNTc1LCA1MjU4MSwgNTI1ODcsIDUyNTkyLCA1MjU5OSwgNTI2MDMsIDUyNjA3LCA1MjYyMCwgNTI2MzMsIAotICAgIDUyNjQ1LCA1MjY1NCwgNTI2NjAsIDUyNjY3LCA1MjY3MiwgNTI2NzcsIDUyNjgyLCA1MjY4NywgNTI2OTIsIDUyNjk0LCAKLSAgICA1MjcwMSwgNTI3MDgsIDUyNzE1LCA1MjcyMiwgNTI3MjksIDUyNzM3LCA1Mjc0MywgNTI3NDgsIDUyNzU0LCA1Mjc2MCwgCi0gICAgNTI3NjYsIDUyNzczLCA1Mjc3OSwgNTI3ODcsIDUyNzk1LCA1MjgwMywgNTI4MTEsIDUyODE4LCA1MjgyNCwgNTI4MzAsIAotICAgIDUyODM5LCA1Mjg0MywgNTI4NTIsIDUyODYxLCA1Mjg3MCwgNTI4NzgsIDUyODgyLCA1Mjg4OCwgNTI4OTUsIDUyOTAyLCAKLSAgICA1MjkwNiwgNTI5MTIsIDUyOTE5LCA1MjkyNCwgNTI5MjksIDUyOTM1LCA1Mjk0MCwgNTI5NDUsIDUyOTUyLCA1Mjk1OSwgCi0gICAgNTI5NjQsIDUyOTY5LCA1Mjk3NywgNTI5ODUsIDUyOTk1LCA1MzAwNSwgNTMwMTIsIDUzMDE5LCA1MzAyMywgNTMwMjcsIAotICAgIDUzMDM5LCA1MzA0NSwgNTMwNTEsIDUzMDU2LCA1MzA2MSwgNTMwNjgsIDUzMDc1LCA1MzA4MSwgNTMwODcsIDUzMDk2LCAKLSAgICA1MzEwNCwgNTMxMTIsIDUzMTE5LCA1MzEyNiwgNTMxMzMsIDUzMTM5LCA1MzE0NiwgNTMxNTIsIDUzMTU5LCA1MzE2NiwgCi0gICAgNTMxNzMsIDUzMTgwLCA1MzE4NiwgNTMxOTEsIDUzMjAwLCA1MzIxMCwgNTMyMTcsIDUzMjI2LCA1MzIzMiwgNTMyMzcsIAotICAgIDUzMjQyLCA1MzI1MiwgNTMyNTgsIDUzMjY0LCA1MzI3MCwgNTMyNzgsIDUzMjgzLCA1MzI5MCwgNTMyOTcsIDUzMzA4LCAKLSAgICA1MzMxNSwgNTMzMjIsIDUzMzI5LCA1MzMzNiwgNTMzNDMsIDUzMzUwLCA1MzM1NywgNTMzNjksIDUzMzgxLCA1MzM5MiwgCi0gICAgNTM0MDMsIDUzNDE2LCA1MzQyOSwgNTM0MzQsIDUzNDM5LCA1MzQ0OCwgNTM0NTcsIDUzNDY0LCA1MzQ3MSwgNTM0ODAsIAotICAgIDUzNDg5LCA1MzQ5NywgNTM1MDUsIDUzNTEzLCA1MzUyMSwgNTM1MzEsIDUzNTQxLCA1MzU1NSwgNTM1NjksIDUzNTc3LCAKLSAgICA1MzU4NSwgNTM1OTcsIDUzNjA5LCA1MzYxNywgNTM2MjUsIDUzNjM1LCA1MzY0NSwgNTM2NTAsIDUzNjU1LCA1MzY2NCwgCi0gICAgNTM2NzMsIDUzNjc4LCA1MzY4MywgNTM2OTEsIDUzNjk3LCA1MzcwMywgNTM3MTEsIDUzNzE5LCA1MzczMiwgNTM3NDUsIAotICAgIDUzNzQ5LCA1Mzc1MywgNTM3NjAsIDUzNzY3LCA1Mzc3NCwgNTM3ODIsIDUzNzkwLCA1Mzc5OSwgNTM4MDgsIDUzODE0LCAKLSAgICA1MzgyMCwgNTM4MjcsIDUzODM0LCA1Mzg0MSwgNTM4NDgsIDUzODU3LCA1Mzg2NiwgNTM4NjksIDUzODcyLCA1Mzg3NywgCi0gICAgNTM4ODIsIDUzODg4LCA1Mzg5NCwgNTM5MDEsIDUzOTA4LCA1MzkxOCwgNTM5MjgsIDUzOTM1LCA1Mzk0MiwgNTM5NTAsIAotICAgIDUzOTU4LCA1Mzk2NiwgNTM5NzQsIDUzOTgyLCA1Mzk5MCwgNTM5OTYsIDU0MDAyLCA1NDAwNiwgNTQwMTAsIDU0MDE3LCAKLSAgICA1NDAyNCwgNTQwMjksIDU0MDM0LCA1NDAzOSwgNTQwNDQsIDU0MDUwLCA1NDA2NCwgNTQwNzEsIDU0MDc4LCA1NDA4MiwgCi0gICAgNTQwODQsIDU0MDg2LCA1NDA5MSwgNTQwOTYsIDU0MTAxLCA1NDEwNiwgNTQxMTQsIDU0MTIxLCA1NDEyOCwgNTQxMzYsIAotICAgIDU0MTQ4LCA1NDE1NiwgNTQxNjQsIDU0MTc1LCA1NDE3OSwgNTQxODMsIDU0MTg5LCA1NDE5NywgNTQyMTAsIDU0MjE3LCAKLSAgICA1NDIyNCwgNTQyMzEsIDU0MjM2LCA1NDI0MywgNTQyNTIsIDU0MjYwLCA1NDI2NiwgNTQyNzIsIDU0Mjc4LCA1NDI4NywgCi0gICAgNTQyOTYsIDU0MzA0LCA1NDMxMywgNTQzMTgsIDU0MzIxLCA1NDMyNiwgNTQzMzIsIDU0MzM4LCA1NDM0NCwgNTQzNTAsIAotICAgIDU0MzU0LCA1NDM1NywgNTQzNjEsIDU0MzY1LCA1NDM3MSwgNTQzNzcsIDU0MzgzLCA1NDM4OSwgNTQzOTMsIDU0Mzk3LCAKLSAgICA1NDQwNCwgNTQ0MTEsIDU0NDE4LCA1NDQyNSwgNTQ0MzIsIDU0NDM5LCA1NDQ0OSwgNTQ0NTksIDU0NDY2LCA1NDQ3MywgCi0gICAgNTQ0ODEsIDU0NDg5LCA1NDQ5MywgNTQ0OTgsIDU0NTAzLCA1NDUwOSwgNTQ1MTUsIDU0NTE4LCA1NDUyMSwgNTQ1MjQsIAotICAgIDU0NTI3LCA1NDUzMSwgNTQ1MzYsIDU0NTQxLCA1NDU0NiwgNTQ1NTEsIDU0NTU2LCA1NDU2MCwgNTQ1NjQsIDU0NTY4LCAKLSAgICA1NDU3MiwgNTQ1NzYsIDU0NTgwLCA1NDU4NCwgNTQ1OTAsIDU0NTk0LCA1NDYwMCwgNTQ2MDUsIDU0NjEyLCA1NDYyMCwgCi0gICAgNTQ2MjcsIDU0NjM1LCA1NDY0MiwgNTQ2NTAsIDU0NjU5LCA1NDY2NiwgNTQ2NzYsIDU0Njg3LCA1NDY5MywgNTQ3MDIsIAotICAgIDU0NzA4LCA1NDcxNywgNTQ3MjYsIDU0NzMyLCA1NDczOCwgNTQ3NDIsIDU0NzQ2LCA1NDc1NSwgNTQ3NjQsIDU0NzcxLCAKLSAgICA1NDc3OCwgNTQ3ODcsIDAsIDAsIDAsIDU0Nzk2LCA1NDgwMSwgNTQ4MDUsIDU0ODA5LCA1NDgxNCwgNTQ4MTksIDU0ODI0LCAKLSAgICA1NDgzMiwgNTQ4NDAsIDU0ODQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIyNiwgMzIyMzMsIDMyMjQwLCAzMjI0NywgMzIyNTQsIAorICAgIDMyMjYzLCAzMjI3MiwgMzIyODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjkwLCAzMjI5NSwgMzIzMDAsIDMyMzA1LCAKKyAgICAzMjMxMCwgMzIzMTksIDMyMzMwLCAzMjMzOSwgMzIzNTAsIDMyMzU2LCAzMjM2OSwgMzIzNzUsIDMyMzgyLCAzMjM4OSwgCisgICAgMzIzOTQsIDMyNDAwLCAzMjQwNiwgMzI0MTcsIDMyNDI2LCAzMjQzMywgMzI0NDAsIDMyNDQ5LCAzMjQ1NiwgMzI0NjUsIAorICAgIDMyNDc1LCAzMjQ4NSwgMzI0OTIsIDMyNDk5LCAzMjUwNiwgMzI1MTYsIDMyNTIxLCAzMjUyOSwgMzI1MzUsIDMyNTQzLCAKKyAgICAzMjU1MiwgMzI1NTcsIDMyNTY0LCAzMjU3MCwgMzI1NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNTgwLCAKKyAgICAzMjU4NSwgMzI1OTEsIDMyNTk4LCAzMjYwNiwgMzI2MTIsIDMyNjE4LCAzMjYyNCwgMzI2MjksIDMyNjM2LCAzMjY0MiwgCisgICAgMzI2NDgsIDMyNjU0LCAzMjY2MiwgMzI2NjcsIDMyNjc1LCAzMjY4MCwgMzI2ODYsIDMyNjkyLCAzMjY5OSwgMzI3MDcsIAorICAgIDMyNzE0LCAzMjcyMCwgMzI3MjcsIDMyNzM0LCAzMjc0MCwgMzI3NDcsIDMyNzU0LCAzMjc2MCwgMzI3NjUsIDMyNzcxLCAKKyAgICAzMjc3OSwgMzI3ODcsIDMyNzkzLCAzMjc5OSwgMzI4MDUsIDMyODExLCAzMjgxOSwgMzI4MjMsIDMyODI5LCAzMjgzNSwgCisgICAgMzI4NDEsIDMyODQ3LCAzMjg1MywgMzI4NTksIDMyODYzLCAzMjg2OCwgMzI4NzMsIDMyODgwLCAzMjg4NSwgMzI4ODksIAorICAgIDMyODk1LCAzMjkwMCwgMzI5MDUsIDMyOTA5LCAzMjkxNCwgMzI5MTksIDMyOTIzLCAzMjkyNywgMzI5MzIsIDMyOTM5LCAKKyAgICAzMjk0MywgMzI5NDgsIDMyOTUzLCAzMjk1NywgMzI5NjIsIDMyOTY2LCAzMjk3MSwgMzI5NzUsIDMyOTgxLCAzMjk4NiwgCisgICAgMzI5OTMsIDMyOTk4LCAzMzAwMywgMzMwMDcsIDMzMDEyLCAzMzAxNywgMzMwMjQsIDMzMDI5LCAzMzAzNSwgMzMwNDAsIAorICAgIDMzMDQ0LCAzMzA0OSwgMzMwNTMsIDMzMDU4LCAzMzA2NSwgMzMwNzIsIDMzMDc3LCAzMzA4MiwgMzMwODYsIDMzMDkyLCAKKyAgICAzMzA5OCwgMzMxMDMsIDMzMTA4LCAzMzExMywgMzMxMTksIDMzMTI0LCAzMzEzMCwgMzMxMzUsIDMzMTQxLCAzMzE0NywgCisgICAgMzMxNTMsIDMzMTYwLCAzMzE2NywgMzMxNzQsIDMzMTgxLCAzMzE4OCwgMzMxOTUsIDMzMjAwLCAzMzIwOCwgMzMyMTcsIAorICAgIDMzMjI2LCAzMzIzNSwgMzMyNDQsIDMzMjUzLCAzMzI2MiwgMzMyNzQsIDMzMjgzLCAzMzI5MiwgMzMzMDEsIDMzMzA4LCAKKyAgICAzMzMxMywgMzMzMjAsIDMzMzI4LCAzMzMzNiwgMzMzNDMsIDMzMzUwLCAzMzM1NywgMzMzNjQsIDMzMzcyLCAzMzM4MSwgCisgICAgMzMzOTAsIDMzMzk5LCAzMzQwOCwgMzM0MTcsIDMzNDI2LCAzMzQzNSwgMzM0NDQsIDMzNDUzLCAzMzQ2MiwgMzM0NzEsIAorICAgIDMzNDgwLCAzMzQ4OSwgMzM0OTgsIDMzNTA2LCAzMzUxNSwgMzM1MjYsIDMzNTM0LCAzMzU0MywgMzM1NTQsIDMzNTYzLCAKKyAgICAzMzU3MiwgMzM1ODEsIDMzNTkwLCAzMzU5OCwgMzM2MDcsIDMzNjE0LCAzMzYxOSwgMzM2MjcsIDMzNjMyLCAzMzYzOSwgCisgICAgMzM2NDQsIDMzNjUzLCAzMzY1OSwgMzM2NjYsIDMzNjczLCAzMzY3OCwgMzM2ODMsIDMzNjkxLCAzMzY5OSwgMzM3MDgsIAorICAgIDMzNzE3LCAzMzcyMiwgMzM3MjksIDMzNzQwLCAzMzc0OCwgMzM3NTcsIDMzNzYzLCAzMzc2OSwgMzM3NzQsIDMzNzgxLCAKKyAgICAzMzc4NiwgMzM3OTUsIDMzODAwLCAzMzgwNSwgMzM4MTAsIDMzODE3LCAzMzgyNCwgMzM4MjksIDMzODM4LCAzMzg0NiwgCisgICAgMzM4NTEsIDMzODU2LCAzMzg2MywgMzM4NzAsIDMzODc0LCAzMzg3OCwgMzM4ODEsIDMzODg0LCAzMzg4NywgMzM4OTAsIAorICAgIDMzODkzLCAzMzg5NiwgMzM5MDMsIDMzOTA2LCAzMzkwOSwgMzM5MTQsIDMzOTE4LCAzMzkyMiwgMzM5MjYsIDMzOTMwLCAKKyAgICAzMzkzNCwgMzM5NDMsIDMzOTQ5LCAzMzk1NSwgMzM5NjEsIDMzOTY5LCAzMzk3NywgMzM5ODMsIDMzOTg5LCAzMzk5NiwgCisgICAgMzQwMDIsIDM0MDA3LCAzNDAxMywgMzQwMTksIDM0MDI1LCAzNDAzMiwgMzQwMzgsIDM0MDQ2LCAzNDA1MiwgMzQwNTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDY1LCAzNDA3MiwgCisgICAgMzQwNzksIDM0MDg0LCAzNDA5MywgMzQxMDEsIDM0MTA5LCAzNDExNiwgMzQxMjMsIDM0MTMwLCAzNDEzNywgMzQxNDUsIAorICAgIDM0MTUzLCAzNDE2MywgMzQxNzMsIDM0MTgxLCAzNDE4OSwgMzQxOTcsIDM0MjA1LCAzNDIxNCwgMzQyMjMsIDM0MjMxLCAKKyAgICAzNDIzOSwgMzQyNDgsIDM0MjU3LCAzNDI2NywgMzQyNzcsIDM0Mjg2LCAzNDI5NSwgMzQzMDMsIDM0MzExLCAzNDMxOSwgCisgICAgMzQzMjcsIDM0MzM3LCAzNDM0NywgMzQzNTUsIDM0MzYzLCAzNDM3MSwgMzQzNzksIDM0Mzg3LCAzNDM5NSwgMzQ0MDMsIAorICAgIDM0NDExLCAzNDQxOSwgMzQ0MjcsIDM0NDM1LCAzNDQ0MywgMzQ0NTIsIDM0NDYxLCAzNDQ3MCwgMzQ0NzksIDM0NDg5LCAKKyAgICAzNDQ5OSwgMzQ1MDYsIDM0NTEzLCAzNDUyMSwgMzQ1MjksIDM0NTM4LCAzNDU0NywgMzQ1NTUsIDM0NTYzLCAzNDU3NSwgCisgICAgMzQ1ODcsIDM0NTk2LCAzNDYwNSwgMzQ2MTQsIDM0NjIzLCAzNDYzMCwgMzQ2MzcsIDM0NjQ1LCAzNDY1MywgMzQ2NjEsIAorICAgIDM0NjY5LCAzNDY3NywgMzQ2ODUsIDM0NjkzLCAzNDcwMSwgMzQ3MTAsIDM0NzE5LCAzNDcyOCwgMzQ3MzcsIDM0NzQ2LCAKKyAgICAzNDc1NSwgMzQ3NjUsIDM0Nzc1LCAzNDc4NSwgMzQ3OTUsIDM0ODA0LCAzNDgxMywgMzQ4MjAsIDM0ODI3LCAzNDgzNSwgCisgICAgMzQ4NDMsIDM0ODUxLCAzNDg1OSwgMzQ4NjcsIDM0ODc1LCAzNDg4NywgMzQ4OTksIDM0OTA4LCAzNDkxNywgMzQ5MjUsIAorICAgIDM0OTMzLCAzNDk0MSwgMzQ5NDksIDM0OTYwLCAzNDk3MSwgMzQ5ODIsIDM0OTkzLCAzNTAwNSwgMzUwMTcsIDM1MDI1LCAKKyAgICAzNTAzMywgMzUwNDEsIDM1MDQ5LCAzNTA1OCwgMzUwNjcsIDM1MDc2LCAzNTA4NSwgMzUwOTMsIDM1MTAxLCAzNTEwOSwgCisgICAgMzUxMTcsIDM1MTI1LCAzNTEzMywgMzUxNDIsIDM1MTUxLCAzNTE2MSwgMzUxNzEsIDM1MTc4LCAzNTE4NSwgMzUxOTMsIAorICAgIDM1MjAxLCAzNTIwOSwgMzUyMTcsIDM1MjI0LCAzNTIzMSwgMzUyMzksIDM1MjQ3LCAzNTI1NSwgMzUyNjMsIDM1MjcxLCAKKyAgICAzNTI3OSwgMzUyODcsIDM1Mjk1LCAzNTMwMywgMzUzMTEsIDM1MzE5LCAzNTMyNywgMzUzMzUsIDM1MzQzLCAzNTM1MSwgCisgICAgMzUzNTksIDM1MzY4LCAzNTM3NywgMzUzODYsIDM1Mzk0LCAzNTQwMywgMzU0MTIsIDM1NDIxLCAzNTQzMCwgMzU0NDAsIAorICAgIDM1NDQ5LCAzNTQ1NiwgMzU0NjEsIDM1NDY4LCAzNTQ3NSwgMzU0ODMsIDM1NDkxLCAzNTUwMCwgMzU1MDksIDM1NTE5LCAKKyAgICAzNTUyOSwgMzU1NDAsIDM1NTUxLCAzNTU2MCwgMzU1NjksIDM1NTc5LCAzNTU4OSwgMzU1OTgsIDM1NjA3LCAzNTYxNywgCisgICAgMzU2MjcsIDM1NjM4LCAzNTY0OSwgMzU2NTgsIDM1NjY3LCAzNTY3NywgMzU2ODcsIDM1Njk0LCAzNTcwMSwgMzU3MDksIAorICAgIDM1NzE3LCAzNTcyMywgMzU3MjksIDM1NzM4LCAzNTc0NywgMzU3NTcsIDM1NzY3LCAzNTc3OCwgMzU3ODksIDM1Nzk4LCAKKyAgICAzNTgwNywgMzU4MTcsIDM1ODI3LCAzNTgzNiwgMzU4NDUsIDM1ODUzLCAzNTg2MSwgMzU4NjgsIDM1ODc1LCAzNTg4MywgCisgICAgMzU4OTEsIDM1OTAwLCAzNTkwOSwgMzU5MTksIDM1OTI5LCAzNTk0MCwgMzU5NTEsIDM1OTYwLCAzNTk2OSwgMzU5NzksIAorICAgIDM1OTg5LCAzNTk5OCwgMzYwMDcsIDM2MDE3LCAzNjAyNywgMzYwMzgsIDM2MDQ5LCAzNjA1OCwgMzYwNjcsIDM2MDc3LCAKKyAgICAzNjA4NywgMzYwOTQsIDM2MTAxLCAzNjEwOSwgMzYxMTcsIDM2MTI2LCAzNjEzNSwgMzYxNDUsIDM2MTU1LCAzNjE2NiwgCisgICAgMzYxNzcsIDM2MTg2LCAzNjE5NSwgMzYyMDUsIDM2MjE1LCAzNjIyMywgMzYyMzEsIDM2MjM5LCAzNjI0NywgMzYyNTYsIAorICAgIDM2MjY1LCAzNjI3MiwgMzYyNzksIDM2Mjg2LCAzNjI5MywgMzYzMDAsIDM2MzA3LCAzNjMxNSwgMzYzMjMsIDM2MzMxLCAKKyAgICAzNjMzOSwgMzYzNTAsIDM2MzYxLCAzNjM3MiwgMzYzODMsIDM2Mzk0LCAzNjQwNSwgMzY0MTMsIDM2NDIxLCAzNjQzMiwgCisgICAgMzY0NDMsIDM2NDU0LCAzNjQ2NSwgMzY0NzYsIDM2NDg3LCAzNjQ5NSwgMzY1MDMsIDM2NTE0LCAzNjUyNSwgMzY1MzYsIDAsIAorICAgIDAsIDM2NTQ3LCAzNjU1NSwgMzY1NjMsIDM2NTc0LCAzNjU4NSwgMzY1OTYsIDAsIDAsIDM2NjA3LCAzNjYxNSwgMzY2MjMsIAorICAgIDM2NjM0LCAzNjY0NSwgMzY2NTYsIDM2NjY3LCAzNjY3OCwgMzY2ODksIDM2Njk3LCAzNjcwNSwgMzY3MTYsIDM2NzI3LCAKKyAgICAzNjczOCwgMzY3NDksIDM2NzYwLCAzNjc3MSwgMzY3NzksIDM2Nzg3LCAzNjc5OCwgMzY4MDksIDM2ODIwLCAzNjgzMSwgCisgICAgMzY4NDIsIDM2ODUzLCAzNjg2MSwgMzY4NjksIDM2ODgwLCAzNjg5MSwgMzY5MDIsIDM2OTEzLCAzNjkyNCwgMzY5MzUsIAorICAgIDM2OTQzLCAzNjk1MSwgMzY5NjIsIDM2OTczLCAzNjk4NCwgMCwgMCwgMzY5OTUsIDM3MDAzLCAzNzAxMSwgMzcwMjIsIAorICAgIDM3MDMzLCAzNzA0NCwgMCwgMCwgMzcwNTUsIDM3MDYzLCAzNzA3MSwgMzcwODIsIDM3MDkzLCAzNzEwNCwgMzcxMTUsIAorICAgIDM3MTI2LCAwLCAzNzEzNywgMCwgMzcxNDUsIDAsIDM3MTU2LCAwLCAzNzE2NywgMzcxNzgsIDM3MTg2LCAzNzE5NCwgCisgICAgMzcyMDUsIDM3MjE2LCAzNzIyNywgMzcyMzgsIDM3MjQ5LCAzNzI2MCwgMzcyNjgsIDM3Mjc2LCAzNzI4NywgMzcyOTgsIAorICAgIDM3MzA5LCAzNzMyMCwgMzczMzEsIDM3MzQyLCAzNzM1MCwgMzczNTgsIDM3MzY2LCAzNzM3NCwgMzczODIsIDM3MzkwLCAKKyAgICAzNzM5OCwgMzc0MDYsIDM3NDE0LCAzNzQyMiwgMzc0MzAsIDM3NDM4LCAzNzQ0NiwgMCwgMCwgMzc0NTQsIDM3NDY1LCAKKyAgICAzNzQ3NiwgMzc0OTAsIDM3NTA0LCAzNzUxOCwgMzc1MzIsIDM3NTQ2LCAzNzU2MCwgMzc1NzEsIDM3NTgyLCAzNzU5NiwgCisgICAgMzc2MTAsIDM3NjI0LCAzNzYzOCwgMzc2NTIsIDM3NjY2LCAzNzY3NywgMzc2ODgsIDM3NzAyLCAzNzcxNiwgMzc3MzAsIAorICAgIDM3NzQ0LCAzNzc1OCwgMzc3NzIsIDM3NzgzLCAzNzc5NCwgMzc4MDgsIDM3ODIyLCAzNzgzNiwgMzc4NTAsIDM3ODY0LCAKKyAgICAzNzg3OCwgMzc4ODksIDM3OTAwLCAzNzkxNCwgMzc5MjgsIDM3OTQyLCAzNzk1NiwgMzc5NzAsIDM3OTg0LCAzNzk5NSwgCisgICAgMzgwMDYsIDM4MDIwLCAzODAzNCwgMzgwNDgsIDM4MDYyLCAzODA3NiwgMzgwOTAsIDM4MDk4LCAzODEwNiwgMzgxMTcsIAorICAgIDM4MTI1LCAwLCAzODEzNiwgMzgxNDQsIDM4MTU1LCAzODE2MywgMzgxNzEsIDM4MTc5LCAzODE4NywgMzgxOTUsIDM4MTk4LCAKKyAgICAzODIwMSwgMzgyMDQsIDM4MjA3LCAzODIxMywgMzgyMjQsIDM4MjMyLCAwLCAzODI0MywgMzgyNTEsIDM4MjYyLCAzODI3MCwgCisgICAgMzgyNzgsIDM4Mjg2LCAzODI5NCwgMzgzMDIsIDM4MzA4LCAzODMxNCwgMzgzMjAsIDM4MzI4LCAzODMzNiwgMzgzNDcsIDAsIAorICAgIDAsIDM4MzU4LCAzODM2NiwgMzgzNzcsIDM4Mzg1LCAzODM5MywgMzg0MDEsIDAsIDM4NDA5LCAzODQxNSwgMzg0MjEsIAorICAgIDM4NDI3LCAzODQzNSwgMzg0NDMsIDM4NDU0LCAzODQ2NSwgMzg0NzMsIDM4NDgxLCAzODQ4OSwgMzg1MDAsIDM4NTA4LCAKKyAgICAzODUxNiwgMzg1MjQsIDM4NTMyLCAzODU0MCwgMzg1NDYsIDM4NTUyLCAwLCAwLCAzODU1NSwgMzg1NjYsIDM4NTc0LCAwLCAKKyAgICAzODU4NSwgMzg1OTMsIDM4NjA0LCAzODYxMiwgMzg2MjAsIDM4NjI4LCAzODYzNiwgMzg2NDQsIDM4NjQ3LCAwLCAzODY1MCwgCisgICAgMzg2NTQsIDM4NjU4LCAzODY2MiwgMzg2NjYsIDM4NjcwLCAzODY3NCwgMzg2NzgsIDM4NjgyLCAzODY4NiwgMzg2OTAsIAorICAgIDM4Njk0LCAzODcwMCwgMzg3MDYsIDM4NzEyLCAzODcxNSwgMzg3MTgsIDM4NzIwLCAzODcyNCwgMzg3MjgsIDM4NzMyLCAKKyAgICAzODczNiwgMzg3MzgsIDM4NzQyLCAzODc0NiwgMzg3NTIsIDM4NzU4LCAzODc2NSwgMzg3NzIsIDM4Nzc3LCAzODc4MiwgCisgICAgMzg3ODgsIDM4Nzk0LCAzODc5NiwgMzg3OTksIDM4ODAxLCAzODgwNSwgMzg4MDksIDM4ODEzLCAzODgxNiwgMzg4MjAsIAorICAgIDM4ODI0LCAzODgyOCwgMzg4MzIsIDM4ODM2LCAzODg0MiwgMzg4NDYsIDM4ODUwLCAzODg1NiwgMzg4NjEsIDM4ODY4LCAKKyAgICAzODg3MCwgMzg4NzMsIDM4ODc3LCAzODg4MSwgMzg4ODYsIDM4ODkyLCAzODg5NCwgMzg5MDMsIDM4OTEyLCAzODkxNSwgCisgICAgMzg5MTksIDM4OTIxLCAzODkyMywgMzg5MjUsIDM4OTI4LCAzODkzNCwgMzg5MzYsIDM4OTQwLCAzODk0NCwgMzg5NTEsIAorICAgIDM4OTU4LCAzODk2MiwgMzg5NjcsIDM4OTcyLCAzODk3NywgMzg5ODIsIDM4OTg2LCAzODk5MCwgMzg5OTMsIDM4OTk3LCAKKyAgICAzOTAwMSwgMzkwMDgsIDM5MDEzLCAzOTAxNywgMzkwMjEsIDM5MDI2LCAzOTAzMCwgMzkwMzQsIDM5MDM5LCAzOTA0NCwgCisgICAgMzkwNDgsIDM5MDUyLCAzOTA1NiwgMzkwNTgsIDM5MDYzLCAzOTA2OCwgMzkwNzIsIDM5MDc2LCAzOTA4MCwgMzkwODQsIDAsIAorICAgIDM5MDg4LCAzOTA5MiwgMzkwOTYsIDM5MTAyLCAzOTEwOCwgMzkxMTQsIDM5MTIwLCAzOTEyNywgMzkxMzQsIDM5MTM5LCAKKyAgICAzOTE0NCwgMzkxNDgsIDAsIDAsIDM5MTU0LCAzOTE1NywgMzkxNjAsIDM5MTYzLCAzOTE2NiwgMzkxNjksIDM5MTcyLCAKKyAgICAzOTE3NiwgMzkxODAsIDM5MTg1LCAzOTE5MCwgMzkxOTUsIDM5MjAyLCAzOTIwNiwgMzkyMDksIDM5MjEyLCAzOTIxNSwgCisgICAgMzkyMTgsIDM5MjIxLCAzOTIyNCwgMzkyMjcsIDM5MjMwLCAzOTIzMywgMzkyMzcsIDM5MjQxLCAzOTI0NiwgMzkyNTEsIDAsIAorICAgIDM5MjU2LCAzOTI2MiwgMzkyNjgsIDM5Mjc0LCAzOTI4MSwgMzkyODgsIDM5Mjk1LCAzOTMwMiwgMzkzMDgsIDM5MzE0LCAKKyAgICAzOTMyMSwgMzkzMjgsIDM5MzM1LCAwLCAwLCAwLCAzOTM0MiwgMzkzNDUsIDM5MzQ4LCAzOTM1MSwgMzkzNTYsIDM5MzU5LCAKKyAgICAzOTM2MiwgMzkzNjUsIDM5MzY4LCAzOTM3MSwgMzkzNzQsIDM5Mzc4LCAzOTM4MSwgMzkzODQsIDM5Mzg3LCAzOTM5MCwgCisgICAgMzkzOTMsIDM5Mzk4LCAzOTQwMSwgMzk0MDQsIDM5NDA3LCAzOTQxMCwgMzk0MTMsIDM5NDE4LCAzOTQyMSwgMzk0MjQsIAorICAgIDM5NDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzOTQzNCwgMzk0MzksIDM5NDQ0LCAzOTQ1MSwgMzk0NTksIDM5NDY0LCAzOTQ2OSwgMzk0NzMsIDM5NDc3LCAzOTQ4MiwgCisgICAgMzk0ODksIDM5NDk2LCAzOTUwMCwgMzk1MDUsIDM5NTEwLCAzOTUxNSwgMzk1MjAsIDM5NTI3LCAzOTUzMiwgMzk1MzcsIAorICAgIDM5NTQyLCAzOTU1MSwgMzk1NTgsIDM5NTY1LCAzOTU2OSwgMzk1NzQsIDM5NTgwLCAzOTU4NSwgMzk1OTIsIDM5NjAxLCAKKyAgICAzOTYxMCwgMzk2MTQsIDM5NjE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTYyMiwgCisgICAgMzk2MjYsIDM5NjM0LCAzOTYzOCwgMzk2NDIsIDM5NjQ3LCAzOTY1MSwgMzk2NTUsIDM5NjU5LCAzOTY2MSwgMzk2NjUsIAorICAgIDM5NjY5LCAzOTY3MywgMzk2NzgsIDM5NjgyLCAzOTY4NiwgMzk2OTQsIDM5Njk3LCAzOTcwMSwgMzk3MDQsIDM5NzA3LCAKKyAgICAzOTcxMywgMzk3MTcsIDM5NzIwLCAzOTcyNiwgMzk3MzAsIDM5NzM0LCAzOTczOCwgMzk3NDEsIDM5NzQ1LCAzOTc0OCwgCisgICAgMzk3NTIsIDM5NzU0LCAzOTc1NywgMzk3NjAsIDM5NzY0LCAzOTc2NiwgMzk3NzAsIDM5NzczLCAzOTc3NiwgMzk3ODEsIAorICAgIDM5Nzg2LCAzOTc5MywgMzk3OTYsIDM5Nzk5LCAzOTgwMywgMzk4MDgsIDM5ODExLCAzOTgxNCwgMzk4MTcsIDM5ODIxLCAKKyAgICAzOTgyNiwgMzk4MjksIDM5ODMyLCAzOTgzNCwgMzk4MzcsIDM5ODQwLCAzOTg0MywgMzk4NDcsIDM5ODUyLCAzOTg1NSwgCisgICAgMzk4NTksIDM5ODYzLCAzOTg2NywgMzk4NzEsIDM5ODc2LCAzOTg4MiwgMzk4ODcsIDM5ODkyLCAzOTg5OCwgMzk5MDMsIAorICAgIDM5OTA4LCAzOTkxMiwgMzk5MTYsIDM5OTIxLCAzOTkyNSwgMzk5MjksIDM5OTMyLCAzOTkzNCwgMzk5MzksIDM5OTQ1LCAKKyAgICAzOTk1MiwgMzk5NTksIDM5OTY2LCAzOTk3MywgMzk5ODAsIDM5OTg3LCAzOTk5NCwgNDAwMDEsIDQwMDA5LCA0MDAxNiwgCisgICAgNDAwMjQsIDQwMDMxLCA0MDAzOCwgNDAwNDYsIDQwMDU0LCA0MDA1OSwgNDAwNjQsIDQwMDY5LCA0MDA3NCwgNDAwNzksIAorICAgIDQwMDg0LCA0MDA4OSwgNDAwOTQsIDQwMDk5LCA0MDEwNCwgNDAxMTAsIDQwMTE2LCA0MDEyMiwgNDAxMjgsIDQwMTM1LCAKKyAgICA0MDE0MywgNDAxNTAsIDQwMTU2LCA0MDE2MiwgNDAxNjgsIDQwMTc0LCA0MDE4MCwgNDAxODYsIDQwMTkyLCA0MDE5OCwgCisgICAgNDAyMDQsIDQwMjExLCA0MDIxOCwgNDAyMjUsIDQwMjMyLCA0MDI0MCwgNDAyNDksIDQwMjU3LCA0MDI2OCwgNDAyNzYsIAorICAgIDQwMjg0LCA0MDI5MywgNDAzMDAsIDQwMzA5LCA0MDMxOCwgNDAzMjYsIDQwMzM1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MDM0MywgCisgICAgNDAzNDUsIDQwMzQ4LCA0MDM1MCwgNDAzNTMsIDQwMzU2LCA0MDM1OSwgNDAzNjQsIDQwMzY5LCA0MDM3NCwgNDAzNzksIAorICAgIDQwMzgzLCA0MDM4NywgNDAzOTEsIDQwMzk1LCA0MDQwMCwgNDA0MDYsIDQwNDExLCA0MDQxNywgNDA0MjIsIDQwNDI3LCAKKyAgICA0MDQzMiwgNDA0MzgsIDQwNDQzLCA0MDQ0OSwgNDA0NTUsIDQwNDU5LCA0MDQ2MywgNDA0NjgsIDQwNDczLCA0MDQ3OCwgCisgICAgNDA0ODMsIDQwNDg4LCA0MDQ5NiwgNDA1MDQsIDQwNTEyLCA0MDUyMCwgNDA1MjcsIDQwNTM1LCA0MDU0MiwgNDA1NDksIAorICAgIDQwNTU4LCA0MDU3MCwgNDA1NzYsIDQwNTgyLCA0MDU5MCwgNDA1OTgsIDQwNjA3LCA0MDYxNiwgNDA2MjQsIDQwNjMyLCAKKyAgICA0MDY0MSwgNDA2NTAsIDQwNjU1LCA0MDY2MywgNDA2NjgsIDQwNjczLCA0MDY3OSwgNDA2ODQsIDQwNjkwLCA0MDY5NywgCisgICAgNDA3MDQsIDQwNzA5LCA0MDcxNSwgNDA3MjAsIDQwNzIzLCA0MDcyNywgNDA3MzAsIDQwNzM0LCA0MDczOCwgNDA3NDIsIAorICAgIDQwNzQ4LCA0MDc1NCwgNDA3NjAsIDQwNzY2LCA0MDc3MCwgNDA3NzQsIDQwNzc4LCA0MDc4MiwgNDA3ODgsIDQwNzk0LCAKKyAgICA0MDc5OCwgNDA4MDMsIDQwODA3LCA0MDgxMiwgNDA4MTcsIDQwODIyLCA0MDgyNSwgNDA4MjksIDQwODMyLCA0MDgzNiwgCisgICAgNDA4NDMsIDQwODUxLCA0MDg2MiwgNDA4NzMsIDQwODc4LCA0MDg4NywgNDA4OTQsIDQwOTAzLCA0MDkxMiwgNDA5MTYsIAorICAgIDQwOTIyLCA0MDkzMCwgNDA5MzQsIDQwOTM5LCA0MDk0NCwgNDA5NTAsIDQwOTU2LCA0MDk2MiwgNDA5NjksIDQwOTczLCAKKyAgICA0MDk3NywgNDA5ODIsIDQwOTg1LCA0MDk4NywgNDA5OTEsIDQwOTk1LCA0MTAwMywgNDEwMDcsIDQxMDA5LCA0MTAxMSwgCisgICAgNDEwMTUsIDQxMDIzLCA0MTAyOCwgNDEwMzQsIDQxMDQ0LCA0MTA1MSwgNDEwNTYsIDQxMDYwLCA0MTA2NCwgNDEwNjgsIAorICAgIDQxMDcxLCA0MTA3NCwgNDEwNzcsIDQxMDgxLCA0MTA4NSwgNDEwODksIDQxMDkzLCA0MTA5NywgNDExMDAsIDQxMTA0LCAKKyAgICA0MTEwOCwgNDExMTEsIDQxMTEzLCA0MTExNiwgNDExMTgsIDQxMTIyLCA0MTEyNiwgNDExMjgsIDQxMTM0LCA0MTEzNywgCisgICAgNDExNDIsIDQxMTQ2LCA0MTE1MCwgNDExNTIsIDQxMTU0LCA0MTE1NiwgNDExNTksIDQxMTYzLCA0MTE2NywgNDExNzEsIAorICAgIDQxMTc1LCA0MTE3OSwgNDExODUsIDQxMTkxLCA0MTE5MywgNDExOTUsIDQxMTk3LCA0MTE5OSwgNDEyMDIsIDQxMjA0LCAKKyAgICA0MTIwOCwgNDEyMTAsIDQxMjE0LCA0MTIxNywgNDEyMjMsIDQxMjI3LCA0MTIzMSwgNDEyMzQsIDQxMjM3LCA0MTI0MSwgCisgICAgNDEyNDcsIDQxMjUxLCA0MTI2MSwgNDEyNzEsIDQxMjc1LCA0MTI4MSwgNDEyODcsIDQxMjkwLCA0MTI5NCwgNDEyOTcsIAorICAgIDQxMzAyLCA0MTMwNiwgNDEzMTIsIDQxMzE2LCA0MTMyOCwgNDEzMzYsIDQxMzQwLCA0MTM0NCwgNDEzNTAsIDQxMzU0LCAKKyAgICA0MTM1NywgNDEzNTksIDQxMzYyLCA0MTM2NiwgNDEzNzAsIDQxMzc3LCA0MTM4MSwgNDEzODUsIDQxMzg5LCA0MTM5MiwgCisgICAgNDEzOTcsIDQxNDAyLCA0MTQwNywgNDE0MTIsIDQxNDE3LCA0MTQyMiwgNDE0MzAsIDQxNDM4LCA0MTQ0MiwgNDE0NDYsIAorICAgIDQxNDQ4LCA0MTQ1MywgNDE0NTcsIDQxNDYxLCA0MTQ2OSwgNDE0NzcsIDQxNDgzLCA0MTQ4OSwgNDE0OTgsIDQxNTA3LCAKKyAgICA0MTUxMiwgNDE1MTcsIDQxNTI1LCA0MTUzMywgNDE1MzUsIDQxNTM3LCA0MTU0MiwgNDE1NDcsIDQxNTUzLCA0MTU1OSwgCisgICAgNDE1NjUsIDQxNTcxLCA0MTU3NSwgNDE1NzksIDQxNTg2LCA0MTU5MywgNDE1OTksIDQxNjA1LCA0MTYxNSwgNDE2MjUsIAorICAgIDQxNjMzLCA0MTY0MSwgNDE2NDMsIDQxNjQ3LCA0MTY1MSwgNDE2NTYsIDQxNjYxLCA0MTY2OCwgNDE2NzUsIDQxNjc4LCAKKyAgICA0MTY4MSwgNDE2ODQsIDQxNjg3LCA0MTY5MCwgNDE2OTUsIDQxNjk5LCA0MTcwNCwgNDE3MDksIDQxNzEyLCA0MTcxNSwgCisgICAgNDE3MTgsIDQxNzIxLCA0MTcyNCwgNDE3MjgsIDQxNzMxLCA0MTczNCwgNDE3MzcsIDQxNzQwLCA0MTc0MiwgNDE3NDQsIAorICAgIDQxNzQ2LCA0MTc0OCwgNDE3NTYsIDQxNzY0LCA0MTc3MCwgNDE3NzQsIDQxNzgwLCA0MTc5MCwgNDE3OTYsIDQxODAyLCAKKyAgICA0MTgwOCwgNDE4MTYsIDQxODI0LCA0MTgzNSwgNDE4MzksIDQxODQzLCA0MTg0NSwgNDE4NTEsIDQxODUzLCA0MTg1NSwgCisgICAgNDE4NTcsIDQxODU5LCA0MTg2NSwgNDE4NjgsIDQxODc0LCA0MTg4MCwgNDE4ODQsIDQxODg4LCA0MTg5MiwgNDE4OTUsIAorICAgIDQxODk5LCA0MTkwMywgNDE5MDUsIDQxOTE0LCA0MTkyMywgNDE5MjgsIDQxOTMzLCA0MTkzOSwgNDE5NDUsIDQxOTUxLCAKKyAgICA0MTk1NCwgNDE5NTcsIDQxOTYwLCA0MTk2MywgNDE5NjUsIDQxOTcwLCA0MTk3NSwgNDE5ODAsIDQxOTg2LCA0MTk5MiwgCisgICAgNDIwMDAsIDQyMDA4LCA0MjAxNCwgNDIwMjAsIDQyMDI2LCA0MjAzMiwgNDIwNDEsIDQyMDUwLCA0MjA1OSwgNDIwNjgsIAorICAgIDQyMDc3LCA0MjA4NiwgNDIwOTUsIDQyMTA0LCA0MjExMywgNDIxMjIsIDQyMTMwLCA0MjE0MiwgNDIxNTIsIDQyMTY3LCAKKyAgICA0MjE3MCwgNDIxNzUsIDQyMTgxLCA0MjE4NywgNDIxOTQsIDQyMjA4LCA0MjIyMywgNDIyMjksIDQyMjM1LCA0MjI0MiwgCisgICAgNDIyNDgsIDQyMjU2LCA0MjI2MiwgNDIyNzUsIDQyMjg5LCA0MjI5NCwgNDIzMDAsIDQyMzA3LCA0MjMxMCwgNDIzMTMsIAorICAgIDQyMzE1LCA0MjMxOCwgNDIzMjEsIDQyMzIzLCA0MjMyNSwgNDIzMjksIDQyMzMyLCA0MjMzNSwgNDIzMzgsIDQyMzQxLCAKKyAgICA0MjM0NiwgNDIzNTEsIDQyMzU2LCA0MjM2MSwgNDIzNjYsIDQyMzY5LCA0MjM3MSwgNDIzNzMsIDQyMzc1LCA0MjM3OSwgCisgICAgNDIzODMsIDQyMzg3LCA0MjM5MywgNDIzOTgsIDQyNDAwLCA0MjQwMiwgNDI0MDcsIDQyNDEyLCA0MjQxNywgNDI0MjIsIAorICAgIDQyNDI3LCA0MjQzMiwgNDI0MzQsIDQyNDM2LCA0MjQ0NSwgNDI0NDksIDQyNDU3LCA0MjQ2NiwgNDI0NjgsIDQyNDczLCAKKyAgICA0MjQ3OCwgNDI0ODYsIDQyNDkwLCA0MjQ5MiwgNDI0OTYsIDQyNDk4LCA0MjUwMiwgNDI1MDYsIDQyNTEwLCA0MjUxMiwgCisgICAgNDI1MTQsIDQyNTE2LCA0MjUyMywgNDI1MzIsIDQyNTQxLCA0MjU1MCwgNDI1NTksIDQyNTY4LCA0MjU3NywgNDI1ODYsIAorICAgIDQyNTk1LCA0MjYwMywgNDI2MTEsIDQyNjIwLCA0MjYyOSwgNDI2MzgsIDQyNjQ3LCA0MjY1NSwgNDI2NjMsIDQyNjcyLCAKKyAgICA0MjY4MSwgNDI2OTAsIDQyNzAwLCA0MjcwOSwgNDI3MTksIDQyNzI4LCA0MjczOCwgNDI3NDcsIDQyNzU3LCA0Mjc2NywgCisgICAgNDI3NzYsIDQyNzg2LCA0Mjc5NSwgNDI4MDUsIDQyODE0LCA0MjgyNCwgNDI4MzMsIDQyODQyLCA0Mjg1MSwgNDI4NjAsIAorICAgIDQyODY5LCA0Mjg3OSwgNDI4ODgsIDQyODk3LCA0MjkwNiwgNDI5MTYsIDQyOTI1LCA0MjkzNCwgNDI5NDMsIDQyOTUyLCAKKyAgICA0Mjk2MiwgNDI5NzIsIDQyOTgxLCA0Mjk5MCwgNDI5OTgsIDQzMDA2LCA0MzAxMywgNDMwMjEsIDQzMDMwLCA0MzA0MSwgCisgICAgNDMwNTAsIDQzMDU5LCA0MzA2OCwgNDMwNzUsIDQzMDgyLCA0MzA4OSwgNDMwOTgsIDQzMTA3LCA0MzExNiwgNDMxMjUsIAorICAgIDQzMTMyLCA0MzEzNywgNDMxNDYsIDQzMTUxLCA0MzE1NCwgNDMxNjIsIDQzMTY1LCA0MzE3MCwgNDMxNzUsIDQzMTc4LCAKKyAgICA0MzE4MSwgNDMxODksIDQzMTkyLCA0MzE5NywgNDMyMDAsIDQzMjA3LCA0MzIxMiwgNDMyMjAsIDQzMjIzLCA0MzIyNiwgCisgICAgNDMyMjksIDQzMjM0LCA0MzIzOSwgNDMyNDIsIDQzMjQ1LCA0MzI1MywgNDMyNTYsIDQzMjYzLCA0MzI3MCwgNDMyNzQsIAorICAgIDQzMjc4LCA0MzI4MywgNDMyODgsIDQzMjk0LCA0MzI5OSwgNDMzMDUsIDQzMzExLCA0MzMxNiwgNDMzMjIsIDQzMzMwLCAKKyAgICA0MzMzNiwgNDMzNDQsIDQzMzUyLCA0MzM1OCwgNDMzNjYsIDQzMzc0LCA0MzM4MywgNDMzOTEsIDQzMzk3LCA0MzQwNSwgCisgICAgNDM0MTQsIDQzNDIyLCA0MzQyNiwgNDM0MzEsIDQzNDQ0LCA0MzQ1NywgNDM0NjEsIDQzNDY1LCA0MzQ2OSwgNDM0NzMsIAorICAgIDQzNDgzLCA0MzQ4NywgNDM0OTIsIDQzNDk3LCA0MzUwMiwgNDM1MDcsIDQzNTEyLCA0MzUxNywgNDM1MjcsIDQzNTM3LCAKKyAgICA0MzU0NSwgNDM1NTUsIDQzNTY1LCA0MzU3MywgNDM1ODMsIDQzNTkzLCA0MzYwMSwgNDM2MTEsIDQzNjIxLCA0MzYyOSwgCisgICAgNDM2MzcsIDQzNjQ3LCA0MzY1NywgNDM2NjAsIDQzNjYzLCA0MzY2NiwgNDM2NzEsIDQzNjc1LCA0MzY4MSwgNDM2ODgsIAorICAgIDQzNjk1LCA0MzcwMywgNDM3MTAsIDQzNzE0LCA0MzcxOCwgNDM3MjIsIDQzNzI2LCA0MzcyOCwgNDM3MzIsIDQzNzM2LCAKKyAgICA0Mzc0MSwgNDM3NDYsIDQzNzUzLCA0Mzc2MCwgNDM3NjMsIDQzNzcwLCA0Mzc3MiwgNDM3NzQsIDQzNzc4LCA0Mzc4MiwgCisgICAgNDM3ODcsIDQzNzkzLCA0Mzc5OSwgNDM4MDUsIDQzODExLCA0MzgyMCwgNDM4MjksIDQzODM4LCA0Mzg0MiwgNDM4NDQsIAorICAgIDQzODQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Mzg1NSwgNDM4NTksIDQzODY2LCA0Mzg3MywgCisgICAgNDM4ODAsIDQzODg3LCA0Mzg5MSwgNDM4OTUsIDQzODk5LCA0MzkwMywgNDM5MDgsIDQzOTE0LCA0MzkxOSwgNDM5MjUsIAorICAgIDQzOTMxLCA0MzkzNywgNDM5NDMsIDQzOTUxLCA0Mzk1OCwgNDM5NjUsIDQzOTcyLCA0Mzk3OSwgNDM5ODQsIDQzOTkwLCAKKyAgICA0Mzk5OSwgNDQwMDMsIDQ0MDEwLCA0NDAxNCwgNDQwMTgsIDQ0MDI0LCA0NDAzMCwgNDQwMzYsIDQ0MDQyLCA0NDA0NiwgCisgICAgNDQwNTAsIDQ0MDUzLCA0NDA1NiwgNDQwNjAsIDQ0MDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDA3NCwgNDQwNzcsIDQ0MDgxLCA0NDA4NSwgNDQwOTEsIAorICAgIDQ0MDk3LCA0NDEwMywgNDQxMTEsIDQ0MTE4LCA0NDEyMiwgNDQxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MTM1LCA0NDEzOCwgNDQxNDEsIDQ0MTQ0LCA0NDE0NywgCisgICAgNDQxNTAsIDQ0MTUzLCA0NDE1NiwgNDQxNTksIDQ0MTYyLCA0NDE2NiwgNDQxNzAsIDQ0MTc0LCA0NDE3OCwgNDQxODIsIAorICAgIDQ0MTg2LCA0NDE5MCwgNDQxOTQsIDQ0MTk4LCA0NDIwMiwgNDQyMDYsIDQ0MjA5LCA0NDIxMiwgNDQyMTUsIDQ0MjE4LCAKKyAgICA0NDIyMSwgNDQyMjQsIDQ0MjI3LCA0NDIzMCwgNDQyMzMsIDQ0MjM3LCA0NDI0MSwgNDQyNDUsIDQ0MjQ5LCA0NDI1MywgCisgICAgNDQyNTcsIDQ0MjYxLCA0NDI2NSwgNDQyNjksIDQ0MjczLCA0NDI3NywgNDQyODMsIDQ0Mjg5LCA0NDI5NSwgNDQzMDIsIAorICAgIDQ0MzA5LCA0NDMxNiwgNDQzMjMsIDQ0MzMwLCA0NDMzNywgNDQzNDQsIDQ0MzUxLCA0NDM1OCwgNDQzNjUsIDQ0MzcyLCAKKyAgICA0NDM3OSwgNDQzODYsIDQ0MzkzLCA0NDQwMCwgNDQ0MDcsIDQ0NDE0LCA0NDQxOSwgNDQ0MjUsIDQ0NDMxLCA0NDQzNywgCisgICAgNDQ0NDIsIDQ0NDQ4LCA0NDQ1NCwgNDQ0NjAsIDQ0NDY1LCA0NDQ3MSwgNDQ0NzcsIDQ0NDgyLCA0NDQ4NywgNDQ0OTMsIAorICAgIDQ0NDk4LCA0NDUwNCwgNDQ1MTAsIDQ0NTE1LCA0NDUyMSwgNDQ1MjcsIDQ0NTMyLCA0NDUzOCwgNDQ1NDQsIDQ0NTUwLCAKKyAgICA0NDU1NiwgNDQ1NjIsIDQ0NTY3LCA0NDU3MywgNDQ1NzksIDQ0NTg1LCA0NDU5MCwgNDQ1OTYsIDQ0NjAyLCA0NDYwOCwgCisgICAgNDQ2MTMsIDQ0NjE5LCA0NDYyNSwgNDQ2MzAsIDQ0NjM1LCA0NDY0MSwgNDQ2NDYsIDQ0NjUyLCA0NDY1OCwgNDQ2NjMsIAorICAgIDQ0NjY5LCA0NDY3NSwgNDQ2ODAsIDQ0Njg2LCA0NDY5MiwgNDQ2OTgsIDQ0NzA0LCA0NDcxMCwgNDQ3MTUsIDQ0NzIxLCAKKyAgICA0NDcyNywgNDQ3MzMsIDQ0NzM4LCA0NDc0NCwgNDQ3NTAsIDQ0NzU2LCA0NDc2MSwgNDQ3NjcsIDQ0NzczLCA0NDc3OCwgCisgICAgNDQ3ODMsIDQ0Nzg5LCA0NDc5NCwgNDQ4MDAsIDQ0ODA2LCA0NDgxMSwgNDQ4MTcsIDQ0ODIzLCA0NDgyOCwgNDQ4MzQsIAorICAgIDQ0ODQwLCA0NDg0NiwgNDQ4NTIsIDQ0ODU4LCA0NDg2MiwgNDQ4NjcsIDQ0ODcyLCA0NDg3NywgNDQ4ODIsIDQ0ODg3LCAKKyAgICA0NDg5MiwgNDQ4OTcsIDQ0OTAyLCA0NDkwNywgNDQ5MTIsIDQ0OTE2LCA0NDkyMCwgNDQ5MjQsIDQ0OTI4LCA0NDkzMiwgCisgICAgNDQ5MzYsIDQ0OTQwLCA0NDk0NCwgNDQ5NDgsIDQ0OTUzLCA0NDk1OCwgNDQ5NjMsIDQ0OTY4LCA0NDk3MywgNDQ5NzgsIAorICAgIDQ0OTg3LCA0NDk5NiwgNDUwMDUsIDQ1MDE0LCA0NTAyMywgNDUwMzIsIDQ1MDQxLCA0NTA1MCwgNDUwNTcsIDQ1MDY1LCAKKyAgICA0NTA3MywgNDUwODAsIDQ1MDg3LCA0NTA5NSwgNDUxMDMsIDQ1MTEwLCA0NTExNywgNDUxMjUsIDQ1MTMzLCA0NTE0MCwgCisgICAgNDUxNDcsIDQ1MTU1LCA0NTE2MywgNDUxNzAsIDQ1MTc3LCA0NTE4NSwgNDUxOTQsIDQ1MjAzLCA0NTIxMSwgNDUyMjAsIAorICAgIDQ1MjI5LCA0NTIzNiwgNDUyNDMsIDQ1MjUxLCA0NTI2MCwgNDUyNjksIDQ1Mjc3LCA0NTI4NiwgNDUyOTUsIDQ1MzAyLCAKKyAgICA0NTMwOSwgNDUzMTgsIDQ1MzI3LCA0NTMzNSwgNDUzNDMsIDQ1MzUyLCA0NTM2MSwgNDUzNjgsIDQ1Mzc1LCA0NTM4NCwgCisgICAgNDUzOTMsIDQ1NDAxLCA0NTQwOSwgNDU0MTgsIDQ1NDI3LCA0NTQzNCwgNDU0NDEsIDQ1NDUwLCA0NTQ1OSwgNDU0NjcsIAorICAgIDQ1NDc2LCA0NTQ4NSwgNDU0OTMsIDQ1NTAzLCA0NTUxMywgNDU1MjMsIDQ1NTMzLCA0NTU0MiwgNDU1NTEsIDQ1NTYwLCAKKyAgICA0NTU2OSwgNDU1NzYsIDQ1NTg0LCA0NTU5MiwgNDU2MDAsIDQ1NjA4LCA0NTYxMywgNDU2MTgsIDQ1NjI3LCA0NTYzNSwgCisgICAgNDU2NDIsIDQ1NjUxLCA0NTY1OSwgNDU2NjYsIDQ1Njc1LCA0NTY4MywgNDU2OTAsIDQ1Njk5LCA0NTcwNywgNDU3MTQsIAorICAgIDQ1NzIzLCA0NTczMSwgNDU3MzgsIDQ1NzQ3LCA0NTc1NSwgNDU3NjIsIDQ1NzcxLCA0NTc3OSwgNDU3ODYsIDQ1Nzk1LCAKKyAgICA0NTgwMywgNDU4MTAsIDQ1ODE5LCA0NTgyNywgNDU4MzQsIDQ1ODQzLCA0NTg1MiwgNDU4NjEsIDQ1ODcwLCA0NTg4NCwgCisgICAgNDU4OTgsIDQ1OTA1LCA0NTkxMCwgNDU5MTUsIDQ1OTIwLCA0NTkyNSwgNDU5MzAsIDQ1OTM1LCA0NTk0MCwgNDU5NDUsIAorICAgIDQ1OTUzLCA0NTk2MSwgNDU5NjksIDQ1OTc3LCA0NTk4MiwgNDU5ODksIDQ1OTk2LCA0NjAwMywgNDYwMDgsIDQ2MDE2LCAKKyAgICA0NjAyMywgNDYwMzEsIDQ2MDM1LCA0NjA0MiwgNDYwNDgsIDQ2MDU1LCA0NjA1OSwgNDYwNjUsIDQ2MDcxLCA0NjA3NywgCisgICAgNDYwODEsIDQ2MDg0LCA0NjA4OCwgNDYwOTIsIDQ2MDk5LCA0NjEwNSwgNDYxMTEsIDQ2MTE3LCA0NjEyMywgNDYxMzcsIAorICAgIDQ2MTQ3LCA0NjE2MSwgNDYxNzUsIDQ2MTgxLCA0NjE5MSwgNDYyMDUsIDQ2MjA4LCA0NjIxMSwgNDYyMTgsIDQ2MjI2LCAKKyAgICA0NjIzMSwgNDYyMzYsIDQ2MjQ0LCA0NjI1NiwgNDYyNjgsIDQ2Mjc2LCA0NjI4MCwgNDYyODQsIDQ2Mjg3LCA0NjI5MCwgCisgICAgNDYyOTQsIDQ2Mjk4LCA0NjMwMSwgNDYzMDQsIDQ2MzA5LCA0NjMxNCwgNDYzMjAsIDQ2MzI2LCA0NjMzMSwgNDYzMzYsIAorICAgIDQ2MzQyLCA0NjM0OCwgNDYzNTMsIDQ2MzU4LCA0NjM2MywgNDYzNjgsIDQ2Mzc0LCA0NjM4MCwgNDYzODUsIDQ2MzkwLCAKKyAgICA0NjM5NiwgNDY0MDIsIDQ2NDA3LCA0NjQxMiwgNDY0MTUsIDQ2NDE4LCA0NjQyNywgNDY0MjksIDQ2NDMxLCA0NjQzNCwgCisgICAgNDY0MzgsIDQ2NDQ0LCA0NjQ0NiwgNDY0NDksIDQ2NDU2LCA0NjQ2MywgNDY0NzEsIDQ2NDc5LCA0NjQ4OSwgNDY1MDMsIAorICAgIDQ2NTA4LCA0NjUxMywgNDY1MTcsIDQ2NTIyLCA0NjUzMCwgNDY1MzgsIDQ2NTQ3LCA0NjU1NiwgNDY1NjUsIDQ2NTc0LCAKKyAgICA0NjU3OSwgNDY1ODQsIDQ2NTkwLCA0NjU5NiwgNDY2MDIsIDQ2NjA4LCA0NjYxMSwgNDY2MTcsIDQ2NjIzLCA0NjYzMywgCisgICAgNDY2NDMsIDQ2NjUxLCA0NjY1OSwgNDY2NjgsIDQ2Njc3LCA0NjY4MSwgNDY2ODksIDQ2Njk3LCA0NjcwNSwgNDY3MTMsIAorICAgIDQ2NzIyLCA0NjczMSwgNDY3NDAsIDQ2NzQ5LCA0Njc1NCwgNDY3NTksIDQ2NzY0LCA0Njc2OSwgNDY3NzQsIDQ2NzgwLCAKKyAgICA0Njc4NiwgNDY3OTEsIDQ2Nzk3LCA0Njc5OSwgNDY4MDEsIDQ2ODAzLCA0NjgwNSwgNDY4MDgsIDQ2ODExLCA0NjgxMywgCisgICAgNDY4MTUsIDQ2ODE3LCA0NjgyMSwgNDY4MjUsIDQ2ODI3LCA0NjgyOSwgNDY4MzIsIDQ2ODM1LCA0NjgzOSwgNDY4NDUsIAorICAgIDQ2ODUxLCA0Njg1MywgNDY4NjAsIDQ2ODY0LCA0Njg2OSwgNDY4NzQsIDQ2ODc2LCA0Njg4NiwgNDY4OTIsIDQ2ODk4LCAKKyAgICA0NjkwNCwgNDY5MTAsIDQ2OTE2LCA0NjkyMiwgNDY5MjcsIDQ2OTMwLCA0NjkzMywgNDY5MzYsIDQ2OTM4LCA0Njk0MCwgCisgICAgNDY5NDQsIDQ2OTQ4LCA0Njk1MywgNDY5NTgsIDQ2OTYzLCA0Njk2NiwgNDY5NzAsIDQ2OTc1LCA0Njk3OCwgNDY5ODIsIAorICAgIDQ2OTg3LCA0Njk5MiwgNDY5OTcsIDQ3MDAyLCA0NzAwNywgNDcwMTIsIDQ3MDE3LCA0NzAyMiwgNDcwMjcsIDQ3MDMyLCAKKyAgICA0NzAzNywgNDcwNDIsIDQ3MDQ4LCA0NzA1NCwgNDcwNjAsIDQ3MDYyLCA0NzA2NSwgNDcwNjcsIDQ3MDcwLCA0NzA3MiwgCisgICAgNDcwNzQsIDQ3MDc2LCA0NzA3OCwgNDcwODAsIDQ3MDgyLCA0NzA4NCwgNDcwODYsIDQ3MDg4LCA0NzA5MCwgNDcwOTIsIAorICAgIDQ3MDk0LCA0NzA5NiwgNDcwOTgsIDQ3MTAwLCA0NzEwMiwgNDcxMDQsIDQ3MTA5LCA0NzExNCwgNDcxMTksIDQ3MTI0LCAKKyAgICA0NzEyOSwgNDcxMzQsIDQ3MTM5LCA0NzE0NCwgNDcxNDksIDQ3MTU0LCA0NzE1OSwgNDcxNjQsIDQ3MTY5LCA0NzE3NCwgCisgICAgNDcxNzksIDQ3MTg0LCA0NzE4OSwgNDcxOTQsIDQ3MTk5LCA0NzIwNCwgNDcyMDgsIDQ3MjEyLCA0NzIxNiwgNDcyMjIsIAorICAgIDQ3MjI4LCA0NzIzMywgNDcyMzgsIDQ3MjQzLCA0NzI0OCwgNDcyNTMsIDQ3MjU4LCA0NzI2NiwgNDcyNzQsIDQ3MjgyLCAKKyAgICA0NzI5MCwgNDcyOTgsIDQ3MzA2LCA0NzMxNCwgNDczMjIsIDQ3MzI4LCA0NzMzMywgNDczMzgsIDQ3MzQzLCA0NzM0NiwgCisgICAgNDczNTAsIDQ3MzU0LCA0NzM1OCwgNDczNjIsIDQ3MzY2LCA0NzM3MCwgNDczNzcsIDQ3Mzg0LCA0NzM5MiwgNDc0MDAsIAorICAgIDQ3NDA1LCA0NzQxMCwgNDc0MTcsIDQ3NDI0LCA0NzQzMSwgNDc0MzgsIDQ3NDQxLCA0NzQ0NCwgNDc0NDksIDQ3NDUxLCAKKyAgICA0NzQ1NSwgNDc0NjAsIDQ3NDYyLCA0NzQ2NCwgNDc0NjYsIDQ3NDY4LCA0NzQ3MywgNDc0NzYsIDQ3NDc4LCA0NzQ4MywgCisgICAgNDc0OTAsIDQ3NDk3LCA0NzUwMCwgNDc1MDQsIDQ3NTA5LCA0NzUxNCwgNDc1MjIsIDQ3NTI4LCA0NzUzNCwgNDc1NDYsIAorICAgIDQ3NTUzLCA0NzU2MCwgNDc1NjUsIDQ3NTcwLCA0NzU3NiwgNDc1NzksIDQ3NTgyLCA0NzU4NywgNDc1ODksIDQ3NTkzLCAKKyAgICA0NzU5NSwgNDc1OTcsIDQ3NTk5LCA0NzYwMSwgNDc2MDMsIDQ3NjA1LCA0NzYxMCwgNDc2MTIsIDQ3NjE0LCA0NzYxNiwgCisgICAgNDc2MTgsIDQ3NjIyLCA0NzYyNCwgNDc2MjcsIDQ3NjMyLCA0NzYzNywgNDc2NDIsIDQ3NjQ3LCA0NzY1MywgNDc2NTksIAorICAgIDQ3NjYxLCA0NzY2NCwgNDc2NzEsIDQ3Njc4LCA0NzY4NSwgNDc2OTIsIDQ3Njk2LCA0NzcwMCwgNDc3MDIsIDQ3NzA0LCAKKyAgICA0NzcwOCwgNDc3MTQsIDQ3NzE5LCA0NzcyMSwgNDc3MjUsIDQ3NzM0LCA0Nzc0MiwgNDc3NTAsIDQ3NzU2LCA0Nzc2MiwgCisgICAgNDc3NjcsIDQ3NzczLCA0Nzc3OCwgNDc3ODEsIDQ3Nzk1LCA0Nzc5OCwgNDc4MDMsIDQ3ODA4LCA0NzgxNCwgNDc4MjQsIAorICAgIDQ3ODI2LCA0NzgzMiwgNDc4MzgsIDQ3ODQyLCA0Nzg0OSwgNDc4NTMsIDQ3ODU1LCA0Nzg1NywgNDc4NjEsIDQ3ODY3LCAKKyAgICA0Nzg3MiwgNDc4NzgsIDQ3ODgwLCA0Nzg4NiwgNDc4ODgsIDQ3ODk0LCA0Nzg5NiwgNDc4OTgsIDQ3OTAzLCA0NzkwNSwgCisgICAgNDc5MDksIDQ3OTE0LCA0NzkxNiwgNDc5MjEsIDQ3OTI2LCA0NzkzMCwgNDc5MzcsIDAsIDQ3OTQ3LCA0Nzk1MywgNDc5NTYsIAorICAgIDQ3OTYyLCA0Nzk2NSwgNDc5NzAsIDQ3OTc1LCA0Nzk3OSwgNDc5ODEsIDQ3OTgzLCA0Nzk4NywgNDc5OTEsIDQ3OTk1LCAKKyAgICA0Nzk5OSwgNDgwMDQsIDQ4MDA2LCA0ODAxMSwgNDgwMTQsIDQ4MDE3LCA0ODAyMCwgNDgwMjQsIDQ4MDI4LCA0ODAzMywgCisgICAgNDgwMzcsIDQ4MDQyLCA0ODA0NywgNDgwNTEsIDQ4MDU2LCA0ODA2MiwgNDgwNjUsIDQ4MDcxLCA0ODA3NiwgNDgwODAsIAorICAgIDQ4MDg1LCA0ODA5MSwgNDgwOTcsIDQ4MTA0LCA0ODExMCwgNDgxMTcsIDQ4MTI0LCA0ODEyNiwgNDgxMzMsIDQ4MTM3LCAKKyAgICA0ODE0MywgNDgxNDksIDQ4MTU0LCA0ODE2MCwgNDgxNjQsIDQ4MTY5LCA0ODE3MiwgNDgxNzcsIDQ4MTgzLCA0ODE5MCwgCisgICAgNDgxOTgsIDQ4MjA1LCA0ODIxNCwgNDgyMjQsIDQ4MjMxLCA0ODIzNywgNDgyNDEsIDQ4MjQ4LCA0ODI1MywgNDgyNjIsIAorICAgIDQ4MjY1LCA0ODI2OCwgNDgyNzcsIDQ4Mjg3LCA0ODI5NCwgNDgyOTYsIDQ4MzAyLCA0ODMwNywgNDgzMDksIDQ4MzEyLCAKKyAgICA0ODMxNiwgNDgzMjQsIDQ4MzMzLCA0ODMzNiwgNDgzNDEsIDQ4MzQ2LCA0ODM1NCwgNDgzNjIsIDQ4MzcwLCA0ODM3OCwgCisgICAgNDgzODQsIDQ4MzkwLCA0ODM5NiwgNDg0MDQsIDQ4NDA5LCA0ODQxMiwgNDg0MTYsIDQ4NDE5LCA0ODQzMSwgNDg0NDEsIAorICAgIDQ4NDUyLCA0ODQ2MSwgNDg0NzIsIDQ4NDgyLCA0ODQ5MSwgNDg0OTcsIDQ4NTA1LCA0ODUwOSwgNDg1MTcsIDQ4NTIxLCAKKyAgICA0ODUyOSwgNDg1MzYsIDQ4NTQzLCA0ODU1MiwgNDg1NjEsIDQ4NTcxLCA0ODU4MSwgNDg1OTEsIDQ4NjAxLCA0ODYxMCwgCisgICAgNDg2MTksIDQ4NjI5LCA0ODYzOSwgNDg2NDgsIDQ4NjU3LCA0ODY2MywgNDg2NjksIDQ4Njc1LCA0ODY4MSwgNDg2ODcsIAorICAgIDQ4NjkzLCA0ODY5OSwgNDg3MDUsIDQ4NzExLCA0ODcxOCwgNDg3MjQsIDQ4NzMwLCA0ODczNiwgNDg3NDIsIDQ4NzQ4LCAKKyAgICA0ODc1NCwgNDg3NjAsIDQ4NzY2LCA0ODc3MiwgNDg3NzksIDQ4Nzg2LCA0ODc5MywgNDg4MDAsIDQ4ODA3LCA0ODgxNCwgCisgICAgNDg4MjEsIDQ4ODI4LCA0ODgzNSwgNDg4NDIsIDQ4ODUwLCA0ODg1NSwgNDg4NTgsIDQ4ODYyLCA0ODg2NiwgNDg4NzIsIAorICAgIDQ4ODc1LCA0ODg4MSwgNDg4ODcsIDQ4ODkyLCA0ODg5NiwgNDg5MDEsIDQ4OTA3LCA0ODkxNCwgNDg5MTcsIDQ4OTI0LCAKKyAgICA0ODkzMSwgNDg5MzUsIDQ4OTQ0LCA0ODk1MywgNDg5NTgsIDQ4OTY0LCA0ODk2OSwgNDg5NzQsIDQ4OTgxLCA0ODk4OCwgCisgICAgNDg5OTYsIDQ5MDA0LCA0OTAxMywgNDkwMTcsIDQ5MDI2LCA0OTAzMSwgNDkwMzUsIDQ5MDQyLCA0OTA0NiwgNDkwNTMsIAorICAgIDQ5MDYxLCA0OTA2NiwgNDkwNzQsIDQ5MDc4LCA0OTA4MywgNDkwODcsIDQ5MDkyLCA0OTA5NiwgNDkxMDEsIDQ5MTA2LCAKKyAgICA0OTExNSwgNDkxMTcsIDQ5MTIwLCA0OTEyMywgNDkxMzAsIDQ5MTM3LCA0OTE0MiwgNDkxNTAsIDQ5MTU2LCA0OTE2MiwgCisgICAgNDkxNjcsIDQ5MTcwLCA0OTE3NSwgNDkxODAsIDQ5MTg1LCA0OTE5MywgNDkxOTcsIDQ5MjA0LCA0OTIxMiwgNDkyMjAsIAorICAgIDQ5MjI1LCA0OTIzMCwgNDkyMzYsIDQ5MjQxLCA0OTI0NiwgNDkyNTIsIDQ5MjU3LCA0OTI2MCwgNDkyNjQsIDQ5MjY4LCAKKyAgICA0OTI3NSwgNDkyODQsIDQ5Mjg5LCA0OTI5OCwgNDkzMDcsIDQ5MzEzLCA0OTMxOSwgNDkzMjQsIDQ5MzI5LCA0OTMzNCwgCisgICAgNDkzMzksIDQ5MzQ1LCA0OTM1MSwgNDkzNTksIDQ5MzY3LCA0OTM3MywgNDkzNzksIDQ5Mzg0LCA0OTM4OSwgNDkzOTYsIAorICAgIDQ5NDAzLCA0OTQwOSwgNDk0MTIsIDQ5NDE1LCA0OTQxOSwgNDk0MjMsIDQ5NDI3LCA0OTQzMiwgNDk0MzgsIDQ5NDQ0LCAKKyAgICA0OTQ1MSwgNDk0NTgsIDQ5NDYzLCA0OTQ2NywgNDk0NzEsIDQ5NDc1LCA0OTQ3OSwgNDk0ODMsIDQ5NDg3LCA0OTQ5MSwgCisgICAgNDk0OTUsIDQ5NDk5LCA0OTUwMywgNDk1MDcsIDQ5NTExLCA0OTUxNSwgNDk1MTksIDQ5NTIzLCA0OTUyNywgNDk1MzEsIAorICAgIDQ5NTM1LCA0OTUzOSwgNDk1NDMsIDQ5NTQ3LCA0OTU1MSwgNDk1NTUsIDQ5NTU5LCA0OTU2MywgNDk1NjcsIDQ5NTcxLCAKKyAgICA0OTU3NSwgNDk1NzksIDQ5NTgzLCA0OTU4NywgNDk1OTEsIDQ5NTk1LCA0OTU5OSwgNDk2MDMsIDQ5NjA3LCA0OTYxMSwgCisgICAgNDk2MTUsIDQ5NjE5LCA0OTYyMywgNDk2MjcsIDQ5NjMxLCA0OTYzNSwgNDk2MzksIDQ5NjQzLCA0OTY0NywgNDk2NTEsIAorICAgIDQ5NjU1LCA0OTY1OSwgNDk2NjMsIDQ5NjY3LCA0OTY3MSwgNDk2NzUsIDQ5Njc5LCA0OTY4MywgNDk2ODcsIDQ5NjkxLCAKKyAgICA0OTY5NSwgNDk2OTksIDQ5NzAzLCA0OTcwNywgNDk3MTEsIDQ5NzE1LCA0OTcxOSwgNDk3MjMsIDQ5NzI3LCA0OTczMSwgCisgICAgNDk3MzUsIDQ5NzM5LCA0OTc0MywgNDk3NDcsIDQ5NzUxLCA0OTc1NSwgNDk3NTksIDQ5NzYzLCA0OTc2NywgNDk3NzEsIAorICAgIDQ5Nzc1LCA0OTc3OSwgNDk3ODMsIDQ5Nzg3LCA0OTc5MSwgNDk3OTUsIDQ5Nzk5LCA0OTgwMywgNDk4MDcsIDQ5ODExLCAKKyAgICA0OTgxNSwgNDk4MTksIDQ5ODIzLCA0OTgyNywgNDk4MzEsIDQ5ODM1LCA0OTgzOSwgNDk4NDMsIDQ5ODQ3LCA0OTg1MSwgCisgICAgNDk4NTUsIDQ5ODU5LCA0OTg2MywgNDk4NjcsIDQ5ODcxLCA0OTg3NSwgNDk4NzksIDQ5ODgzLCA0OTg4NywgNDk4OTEsIAorICAgIDQ5ODk1LCA0OTg5OSwgNDk5MDMsIDQ5OTA3LCA0OTkxMSwgNDk5MTUsIDQ5OTE5LCA0OTkyMywgNDk5MjcsIDQ5OTMxLCAKKyAgICA0OTkzNSwgNDk5MzksIDQ5OTQzLCA0OTk0NywgNDk5NTEsIDQ5OTU1LCA0OTk1OSwgNDk5NjMsIDQ5OTY3LCA0OTk3MSwgCisgICAgNDk5NzUsIDQ5OTc5LCA0OTk4MywgNDk5ODcsIDQ5OTkxLCA0OTk5NSwgNDk5OTksIDUwMDAzLCA1MDAwNywgNTAwMTEsIAorICAgIDUwMDE1LCA1MDAxOSwgNTAwMjMsIDUwMDI3LCA1MDAzMSwgNTAwMzUsIDUwMDM5LCA1MDA0MywgNTAwNDcsIDUwMDUxLCAKKyAgICA1MDA1NSwgNTAwNTksIDUwMDYzLCA1MDA2NywgNTAwNzEsIDUwMDc1LCA1MDA3OSwgNTAwODMsIDUwMDg3LCA1MDA5MSwgCisgICAgNTAwOTUsIDUwMDk5LCA1MDEwMywgNTAxMDcsIDUwMTExLCA1MDExNSwgNTAxMTksIDUwMTIzLCA1MDEyNywgNTAxMzEsIAorICAgIDUwMTM1LCA1MDEzOSwgNTAxNDMsIDUwMTQ3LCA1MDE1MSwgNTAxNTUsIDUwMTU5LCA1MDE2MywgNTAxNjcsIDUwMTcxLCAKKyAgICA1MDE3NSwgNTAxNzksIDUwMTgzLCA1MDE4NywgNTAxOTEsIDUwMTk1LCA1MDE5OSwgNTAyMDMsIDUwMjA3LCA1MDIxMSwgCisgICAgNTAyMTUsIDUwMjE5LCA1MDIyMywgNTAyMjcsIDUwMjMxLCA1MDIzNSwgNTAyMzksIDUwMjQzLCA1MDI0NywgNTAyNTEsIAorICAgIDUwMjU1LCA1MDI1OSwgNTAyNjMsIDUwMjY3LCA1MDI3MSwgNTAyNzUsIDUwMjc5LCA1MDI4MywgNTAyODcsIDUwMjkxLCAKKyAgICA1MDI5NSwgNTAyOTksIDUwMzAzLCA1MDMwNywgNTAzMTEsIDUwMzE1LCA1MDMxOSwgNTAzMjMsIDUwMzI3LCA1MDMzMSwgCisgICAgNTAzMzUsIDUwMzM5LCA1MDM0MywgNTAzNDcsIDUwMzUxLCA1MDM1NSwgNTAzNTksIDUwMzYzLCA1MDM2NywgNTAzNzEsIAorICAgIDUwMzc1LCA1MDM3OSwgNTAzODMsIDUwMzg3LCA1MDM5MSwgNTAzOTUsIDUwMzk5LCA1MDQwMywgNTA0MDcsIDUwNDExLCAKKyAgICA1MDQxNSwgNTA0MTksIDUwNDIzLCA1MDQyNywgNTA0MzEsIDUwNDM1LCA1MDQzOSwgNTA0NDMsIDUwNDQ3LCA1MDQ1MSwgCisgICAgNTA0NTUsIDUwNDU5LCA1MDQ2MywgNTA0NjcsIDUwNDcxLCA1MDQ3NSwgNTA0NzksIDUwNDgzLCA1MDQ4NywgNTA0OTQsIAorICAgIDUwNTAyLCA1MDUwOCwgNTA1MTQsIDUwNTIxLCA1MDUyOCwgNTA1MzQsIDUwNTQwLCA1MDU0NiwgNTA1NTIsIDUwNTU3LCAKKyAgICA1MDU2MiwgNTA1NjcsIDUwNTcyLCA1MDU3OCwgNTA1ODQsIDUwNTkyLCA1MDU5OSwgNTA2MDUsIDUwNjExLCA1MDYxOSwgCisgICAgNTA2MjgsIDUwNjM1LCA1MDY0NSwgNTA2NTYsIDUwNjU5LCA1MDY2MiwgNTA2NjYsIDUwNjcwLCA1MDY3NywgNTA2ODQsIAorICAgIDUwNjk1LCA1MDcwNiwgNTA3MTYsIDUwNzI2LCA1MDczMywgNTA3NDAsIDUwNzQ3LCA1MDc1NCwgNTA3NjUsIDUwNzc2LCAKKyAgICA1MDc4NywgNTA3OTgsIDUwODA4LCA1MDgxOCwgNTA4MzAsIDUwODQyLCA1MDg1MywgNTA4NjQsIDUwODc2LCA1MDg4OCwgCisgICAgNTA4OTcsIDUwOTA3LCA1MDkxNywgNTA5MjgsIDUwOTM5LCA1MDk0NiwgNTA5NTMsIDUwOTYwLCA1MDk2NywgNTA5NzcsIAorICAgIDUwOTg3LCA1MDk5NSwgNTEwMDMsIDUxMDEwLCA1MTAxNywgNTEwMjQsIDUxMDMxLCA1MTAzOCwgNTEwNDMsIDUxMDQ4LCAKKyAgICA1MTA1NCwgNTEwNjIsIDUxMDcyLCA1MTA4MiwgNTEwOTIsIDUxMTAyLCA1MTExMiwgNTExMjIsIDUxMTMyLCA1MTE0MiwgCisgICAgNTExNTIsIDUxMTYyLCA1MTE3MiwgNTExODMsIDUxMTk0LCA1MTIwNCwgNTEyMTQsIDUxMjI1LCA1MTIzNiwgNTEyNDYsIAorICAgIDUxMjU2LCA1MTI2NywgNTEyNzgsIDUxMjg4LCA1MTI5OCwgNTEzMDksIDUxMzIwLCA1MTMzNiwgNTEzNTUsIDUxMzcxLCAKKyAgICA1MTM5MCwgNTE0MDYsIDUxNDIyLCA1MTQzOCwgNTE0NTQsIDUxNDY1LCA1MTQ3NywgNTE0ODgsIDUxNTAwLCA1MTUxOSwgCisgICAgNTE1MzgsIDUxNTQ2LCA1MTU1MiwgNTE1NTksIDUxNTY2LCA1MTU3MywgNTE1ODAsIDUxNTg1LCA1MTU5MSwgNTE1OTYsIAorICAgIDUxNjAxLCA1MTYwNywgNTE2MTIsIDUxNjE3LCA1MTYyMiwgNTE2MjcsIDUxNjMyLCA1MTYzOSwgNTE2NDQsIDUxNjUxLCAKKyAgICA1MTY1NiwgNTE2NjEsIDUxNjY1LCA1MTY2OSwgNTE2NzYsIDUxNjgzLCA1MTY5MCwgNTE2OTcsIDUxNzA0LCA1MTcxMSwgCisgICAgNTE3MjQsIDUxNzM3LCA1MTc1MCwgNTE3NjMsIDUxNzcxLCA1MTc3OSwgNTE3ODUsIDUxNzkxLCA1MTc5OCwgNTE4MDUsIAorICAgIDUxODEyLCA1MTgxOSwgNTE4MjMsIDUxODI4LCA1MTgzNiwgNTE4NDQsIDUxODUyLCA1MTg1OSwgNTE4NjMsIDUxODcxLCAKKyAgICA1MTg3OSwgNTE4ODMsIDUxODg3LCA1MTg5MiwgNTE4OTksIDUxOTA3LCA1MTkxNSwgNTE5MzQsIDUxOTUzLCA1MTk3MiwgCisgICAgNTE5OTEsIDUyMDEwLCA1MjAyOSwgNTIwNDgsIDUyMDY3LCA1MjA3MywgNTIwODAsIDUyMDg5LCA1MjA5NywgNTIxMDUsIAorICAgIDUyMTEwLCA1MjExMywgNTIxMTYsIDUyMTIxLCA1MjEyNCwgNTIxNDMsIDUyMTUwLCA1MjE1NiwgNTIxNjIsIDUyMTY2LCAKKyAgICA1MjE2OSwgNTIxNzIsIDUyMTc1LCA1MjE4NywgNTIyMDAsIDUyMjA3LCA1MjIxNCwgNTIyMTcsIDUyMjIxLCA1MjIyNCwgCisgICAgNTIyMjksIDUyMjM0LCA1MjIzOSwgNTIyNDUsIDUyMjU0LCA1MjI2MSwgNTIyNjgsIDUyMjc2LCA1MjI4MywgNTIyOTAsIAorICAgIDUyMjkzLCA1MjI5OSwgNTIzMDUsIDUyMzA4LCA1MjMxMSwgNTIzMTYsIDUyMzIxLCA1MjMyNywgNTIzMzMsIDUyMzM3LCAKKyAgICA1MjM0MiwgNTIzNDksIDUyMzUzLCA1MjM1OSwgNTIzNjMsIDUyMzY3LCA1MjM3NSwgNTIzODcsIDUyMzk2LCA1MjQwMCwgCisgICAgNTI0MDIsIDUyNDExLCA1MjQyMCwgNTI0MjYsIDUyNDI5LCA1MjQzNSwgNTI0NDEsIDUyNDQ2LCA1MjQ1MSwgNTI0NTYsIAorICAgIDUyNDYxLCA1MjQ2NiwgNTI0NzEsIDUyNDczLCA1MjQ3OSwgNTI0ODQsIDUyNDkxLCA1MjQ5NSwgNTI1MDEsIDUyNTA0LCAKKyAgICA1MjUwOCwgNTI1MTUsIDUyNTIyLCA1MjUyNCwgNTI1MjYsIDUyNTMyLCA1MjUzOCwgNTI1NDQsIDUyNTUzLCA1MjU2MiwgCisgICAgNTI1NjksIDUyNTc2LCA1MjU4MiwgNTI1ODgsIDUyNTkzLCA1MjU5OCwgNTI2MDMsIDUyNjA5LCA1MjYxNSwgNTI2MjAsIAorICAgIDUyNjI3LCA1MjYzMSwgNTI2MzUsIDUyNjQ4LCA1MjY2MSwgNTI2NzMsIDUyNjgyLCA1MjY4OCwgNTI2OTUsIDUyNzAwLCAKKyAgICA1MjcwNSwgNTI3MTAsIDUyNzE1LCA1MjcyMCwgNTI3MjIsIDUyNzI5LCA1MjczNiwgNTI3NDMsIDUyNzUwLCA1Mjc1NywgCisgICAgNTI3NjUsIDUyNzcxLCA1Mjc3NiwgNTI3ODIsIDUyNzg4LCA1Mjc5NCwgNTI4MDEsIDUyODA3LCA1MjgxNSwgNTI4MjMsIAorICAgIDUyODMxLCA1MjgzOSwgNTI4NDYsIDUyODUyLCA1Mjg1OCwgNTI4NjcsIDUyODcxLCA1Mjg4MCwgNTI4ODksIDUyODk4LCAKKyAgICA1MjkwNiwgNTI5MTAsIDUyOTE2LCA1MjkyMywgNTI5MzAsIDUyOTM0LCA1Mjk0MCwgNTI5NDcsIDUyOTUyLCA1Mjk1NywgCisgICAgNTI5NjMsIDUyOTY4LCA1Mjk3MywgNTI5ODAsIDUyOTg3LCA1Mjk5MiwgNTI5OTcsIDUzMDA1LCA1MzAxMywgNTMwMjMsIAorICAgIDUzMDMzLCA1MzA0MCwgNTMwNDcsIDUzMDUxLCA1MzA1NSwgNTMwNjcsIDUzMDczLCA1MzA3OSwgNTMwODQsIDUzMDg5LCAKKyAgICA1MzA5NiwgNTMxMDMsIDUzMTA5LCA1MzExNSwgNTMxMjQsIDUzMTMyLCA1MzE0MCwgNTMxNDcsIDUzMTU0LCA1MzE2MSwgCisgICAgNTMxNjcsIDUzMTc0LCA1MzE4MCwgNTMxODcsIDUzMTk0LCA1MzIwMSwgNTMyMDgsIDUzMjE0LCA1MzIxOSwgNTMyMjgsIAorICAgIDUzMjM4LCA1MzI0NSwgNTMyNTQsIDUzMjYwLCA1MzI2NSwgNTMyNzAsIDUzMjgwLCA1MzI4NiwgNTMyOTIsIDUzMjk4LCAKKyAgICA1MzMwNiwgNTMzMTEsIDUzMzE4LCA1MzMyNSwgNTMzMzYsIDUzMzQzLCA1MzM1MCwgNTMzNTcsIDUzMzY0LCA1MzM3MSwgCisgICAgNTMzNzgsIDUzMzg1LCA1MzM5NywgNTM0MDksIDUzNDIwLCA1MzQzMSwgNTM0NDQsIDUzNDU3LCA1MzQ2MiwgNTM0NjcsIAorICAgIDUzNDc2LCA1MzQ4NSwgNTM0OTIsIDUzNDk5LCA1MzUwOCwgNTM1MTcsIDUzNTI1LCA1MzUzMywgNTM1NDEsIDUzNTQ5LCAKKyAgICA1MzU1OSwgNTM1NjksIDUzNTgzLCA1MzU5NywgNTM2MDUsIDUzNjEzLCA1MzYyNSwgNTM2MzcsIDUzNjQ1LCA1MzY1MywgCisgICAgNTM2NjMsIDUzNjczLCA1MzY3OCwgNTM2ODMsIDUzNjkyLCA1MzcwMSwgNTM3MDYsIDUzNzExLCA1MzcxOSwgNTM3MjUsIAorICAgIDUzNzMxLCA1MzczOSwgNTM3NDcsIDUzNzYwLCA1Mzc3MywgNTM3NzcsIDUzNzgxLCA1Mzc4OCwgNTM3OTUsIDUzODAyLCAKKyAgICA1MzgxMCwgNTM4MTgsIDUzODI3LCA1MzgzNiwgNTM4NDIsIDUzODQ4LCA1Mzg1NSwgNTM4NjIsIDUzODY5LCA1Mzg3NiwgCisgICAgNTM4ODUsIDUzODk0LCA1Mzg5NywgNTM5MDAsIDUzOTA1LCA1MzkxMCwgNTM5MTYsIDUzOTIyLCA1MzkyOSwgNTM5MzYsIAorICAgIDUzOTQ2LCA1Mzk1NiwgNTM5NjMsIDUzOTcwLCA1Mzk3OCwgNTM5ODYsIDUzOTk0LCA1NDAwMiwgNTQwMTAsIDU0MDE4LCAKKyAgICA1NDAyNCwgNTQwMzAsIDU0MDM0LCA1NDAzOCwgNTQwNDUsIDU0MDUyLCA1NDA1NywgNTQwNjIsIDU0MDY3LCA1NDA3MiwgCisgICAgNTQwNzgsIDU0MDkyLCA1NDA5OSwgNTQxMDYsIDU0MTEwLCA1NDExMiwgNTQxMTQsIDU0MTE5LCA1NDEyNCwgNTQxMjksIAorICAgIDU0MTM0LCA1NDE0MiwgNTQxNDksIDU0MTU2LCA1NDE2NCwgNTQxNzYsIDU0MTg0LCA1NDE5MiwgNTQyMDMsIDU0MjA3LCAKKyAgICA1NDIxMSwgNTQyMTcsIDU0MjI1LCA1NDIzOCwgNTQyNDUsIDU0MjUyLCA1NDI1OSwgNTQyNjQsIDU0MjcxLCA1NDI4MCwgCisgICAgNTQyODgsIDU0Mjk0LCA1NDMwMCwgNTQzMDYsIDU0MzE1LCA1NDMyNCwgNTQzMzIsIDU0MzQxLCA1NDM0NiwgNTQzNDksIAorICAgIDU0MzU0LCA1NDM2MCwgNTQzNjYsIDU0MzcyLCA1NDM3OCwgNTQzODIsIDU0Mzg1LCA1NDM4OSwgNTQzOTMsIDU0Mzk5LCAKKyAgICA1NDQwNSwgNTQ0MTEsIDU0NDE3LCA1NDQyMSwgNTQ0MjUsIDU0NDMyLCA1NDQzOSwgNTQ0NDYsIDU0NDUzLCA1NDQ2MCwgCisgICAgNTQ0NjcsIDU0NDc3LCA1NDQ4NywgNTQ0OTQsIDU0NTAxLCA1NDUwOSwgNTQ1MTcsIDU0NTIxLCA1NDUyNiwgNTQ1MzEsIAorICAgIDU0NTM3LCA1NDU0MywgNTQ1NDYsIDU0NTQ5LCA1NDU1MiwgNTQ1NTUsIDU0NTU5LCA1NDU2NCwgNTQ1NjksIDU0NTc0LCAKKyAgICA1NDU3OSwgNTQ1ODQsIDU0NTg4LCA1NDU5MiwgNTQ1OTYsIDU0NjAwLCA1NDYwNCwgNTQ2MDgsIDU0NjEyLCA1NDYxOCwgCisgICAgNTQ2MjIsIDU0NjI4LCA1NDYzMywgNTQ2NDAsIDU0NjQ4LCA1NDY1NSwgNTQ2NjMsIDU0NjcwLCA1NDY3OCwgNTQ2ODcsIAorICAgIDU0Njk0LCA1NDcwNCwgNTQ3MTUsIDU0NzIxLCA1NDczMCwgNTQ3MzYsIDU0NzQ1LCA1NDc1NCwgNTQ3NjAsIDU0NzY2LCAKKyAgICA1NDc3MCwgNTQ3NzQsIDU0NzgzLCA1NDc5MiwgNTQ3OTksIDU0ODA2LCA1NDgxNSwgMCwgMCwgMCwgNTQ4MjQsIDU0ODI5LCAKKyAgICA1NDgzMywgNTQ4MzcsIDU0ODQyLCA1NDg0NywgNTQ4NTIsIDU0ODYwLCA1NDg2OCwgNTQ4NzEsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU0ODQ3LCA1NDg1MiwgNTQ4NTcsIDU0ODYyLCA1NDg2NywgNTQ4NzIsIDU0ODc3LCA1NDg4MiwgCi0gICAgNTQ4ODcsIDU0ODkyLCA1NDg5NywgNTQ5MDMsIDU0OTA3LCA1NDkxMiwgNTQ5MTcsIDU0OTIyLCA1NDkyNywgNTQ5MzIsIAotICAgIDU0OTM3LCA1NDk0MiwgNTQ5NDcsIDU0OTUyLCA1NDk1NywgNTQ5NjIsIDU0OTY3LCA1NDk3MiwgNTQ5NzcsIDU0OTgyLCAKLSAgICA1NDk4NywgNTQ5OTIsIDU0OTk3LCA1NTAwMiwgNTUwMDcsIDU1MDEyLCA1NTAxNywgNTUwMjMsIDU1MDI4LCA1NTAzNCwgCi0gICAgNTUwNDMsIDU1MDQ4LCA1NTA1NiwgNTUwNjMsIDU1MDcyLCA1NTA3NywgNTUwODIsIDU1MDg3LCA1NTA5MywgMCwgNTUxMDAsIAotICAgIDU1MTA1LCA1NTExMCwgNTUxMTUsIDU1MTIwLCA1NTEyNSwgNTUxMzAsIDU1MTM1LCA1NTE0MCwgNTUxNDUsIDU1MTUwLCAKLSAgICA1NTE1NiwgNTUxNjAsIDU1MTY1LCA1NTE3MCwgNTUxNzUsIDU1MTgwLCA1NTE4NSwgNTUxOTAsIDU1MTk1LCA1NTIwMCwgCi0gICAgNTUyMDUsIDU1MjEwLCA1NTIxNSwgNTUyMjAsIDU1MjI1LCA1NTIzMCwgNTUyMzUsIDU1MjQwLCA1NTI0NSwgNTUyNTAsIAotICAgIDU1MjU1LCA1NTI2MCwgNTUyNjUsIDU1MjcwLCA1NTI3NiwgNTUyODEsIDU1Mjg3LCA1NTI5NiwgNTUzMDEsIDU1MzA5LCAKLSAgICA1NTMxNiwgNTUzMjUsIDU1MzMwLCA1NTMzNSwgNTUzNDAsIDU1MzQ2LCAwLCA1NTM1MywgNTUzNjEsIDU1MzY5LCA1NTM3OCwgCi0gICAgNTUzODUsIDU1MzkzLCA1NTM5OSwgNTU0MDgsIDU1NDE2LCA1NTQyNCwgNTU0MzIsIDU1NDQwLCA1NTQ0OCwgNTU0NTYsIAotICAgIDU1NDYxLCA1NTQ2OCwgNTU0NzQsIDU1NDgxLCA1NTQ4OSwgNTU0OTYsIDU1NTAzLCA1NTUxMSwgNTU1MTcsIDU1NTIzLCAKLSAgICA1NTUzMCwgNTU1MzcsIDU1NTQ3LCA1NTU1NywgNTU1NjQsIDU1NTcxLCA1NTU3NiwgNTU1ODYsIDU1NTk2LCA1NTYwMSwgCi0gICAgNTU2MDYsIDU1NjExLCA1NTYxNiwgNTU2MjEsIDU1NjI2LCA1NTYzMSwgNTU2MzYsIDU1NjQxLCA1NTY0NiwgNTU2NTEsIAotICAgIDU1NjU2LCA1NTY2MSwgNTU2NjYsIDU1NjcxLCA1NTY3NiwgNTU2ODEsIDU1Njg2LCA1NTY5MSwgNTU2OTYsIDU1NzAxLCAKLSAgICA1NTcwNiwgNTU3MTEsIDU1NzE2LCA1NTcyMSwgNTU3MjYsIDU1NzMxLCA1NTczNiwgNTU3NDEsIDU1NzQ2LCA1NTc1MCwgCi0gICAgNTU3NTQsIDU1NzU5LCA1NTc2NCwgNTU3NjksIDU1Nzc0LCA1NTc3OSwgNTU3ODQsIDU1Nzg5LCA1NTc5NCwgNTU3OTksIAotICAgIDU1ODA0LCA1NTgwOSwgNTU4MTQsIDU1ODE5LCA1NTgyNCwgNTU4MjksIDU1ODM0LCA1NTgzOSwgNTU4NDQsIDU1ODUxLCAKLSAgICA1NTg1OCwgNTU4NjUsIDU1ODcyLCA1NTg3OSwgNTU4ODYsIDU1ODkzLCA1NTkwMCwgNTU5MDcsIDU1OTE0LCA1NTkyMSwgCi0gICAgNTU5MjgsIDU1OTM1LCA1NTk0MiwgNTU5NDcsIDU1OTUyLCA1NTk1OSwgNTU5NjYsIDU1OTczLCA1NTk4MCwgNTU5ODcsIAotICAgIDU1OTk0LCA1NjAwMSwgNTYwMDgsIDU2MDE1LCA1NjAyMiwgNTYwMjksIDU2MDM2LCA1NjA0MiwgNTYwNDgsIDU2MDU0LCAKLSAgICA1NjA2MCwgNTYwNjcsIDU2MDc0LCA1NjA4MSwgNTYwODgsIDU2MDk1LCA1NjEwMiwgNTYxMDksIDU2MTE2LCA1NjEyMywgCi0gICAgNTYxMzAsIDU2MTM4LCA1NjE0NiwgNTYxNTQsIDU2MTYyLCA1NjE3MCwgNTYxNzgsIDU2MTg2LCA1NjE5NCwgNTYxOTgsIAotICAgIDU2MjA0LCA1NjIxMCwgNTYyMTQsIDU2MjIwLCA1NjIyNiwgNTYyMzIsIDU2MjM5LCA1NjI0NiwgNTYyNTMsIDU2MjYwLCAKLSAgICA1NjI2NSwgNTYyNzEsIDU2Mjc3LCA1NjI4NCwgMCwgMCwgMCwgMCwgMCwgNTYyOTEsIDU2Mjk5LCA1NjMwOCwgNTYzMTcsIAotICAgIDU2MzI1LCA1NjMzMSwgNTYzMzYsIDU2MzQxLCA1NjM0NiwgNTYzNTEsIDU2MzU2LCA1NjM2MSwgNTYzNjYsIDU2MzcxLCAKLSAgICA1NjM3NiwgNTYzODEsIDU2Mzg2LCA1NjM5MSwgNTYzOTYsIDU2NDAxLCA1NjQwNiwgNTY0MTEsIDU2NDE2LCA1NjQyMSwgCi0gICAgNTY0MjYsIDU2NDMxLCA1NjQzNiwgNTY0NDEsIDU2NDQ2LCA1NjQ1MSwgNTY0NTYsIDU2NDYxLCA1NjQ2NiwgNTY0NzEsIAotICAgIDU2NDc2LCA1NjQ4MSwgNTY0ODYsIDU2NDkxLCA1NjQ5NiwgNTY1MDEsIDU2NTA2LCA1NjUxMSwgNTY1MTYsIDU2NTIxLCAKLSAgICA1NjUyNiwgMCwgNTY1MzEsIDAsIDAsIDAsIDAsIDAsIDU2NTM2LCAwLCAwLCA1NjU0MSwgNTY1NDUsIDU2NTUwLCA1NjU1NSwgCi0gICAgNTY1NjAsIDU2NTY1LCA1NjU3NCwgNTY1NzksIDU2NTg0LCA1NjU4OSwgNTY1OTQsIDU2NTk5LCA1NjYwNCwgNTY2MDksIAotICAgIDU2NjE0LCA1NjYyMSwgNTY2MjYsIDU2NjMxLCA1NjY0MCwgNTY2NDcsIDU2NjUyLCA1NjY1NywgNTY2NjIsIDU2NjY5LCAKLSAgICA1NjY3NCwgNTY2ODEsIDU2Njg2LCA1NjY5MSwgNTY2OTgsIDU2NzA1LCA1NjcxMCwgNTY3MTUsIDU2NzIwLCA1NjcyNywgCi0gICAgNTY3MzQsIDU2NzM5LCA1Njc0NCwgNTY3NDksIDU2NzU0LCA1Njc1OSwgNTY3NjYsIDU2NzczLCA1Njc3OCwgNTY3ODMsIAotICAgIDU2Nzg4LCA1Njc5MywgNTY3OTgsIDU2ODAzLCA1NjgwOCwgNTY4MTMsIDU2ODE4LCA1NjgyMywgNTY4MjgsIDU2ODM1LCAKLSAgICA1Njg0MCwgNTY4NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2ODUwLCA1Njg1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTY4NjIsIDU2ODY3LCA1Njg3MSwgNTY4NzUsIDU2ODc5LCA1Njg4MywgNTY4ODcsIDU2ODkxLCAKLSAgICA1Njg5NSwgNTY4OTksIDU2OTAzLCA1NjkwNywgNTY5MTMsIDU2OTE3LCA1NjkyMSwgNTY5MjUsIDU2OTI5LCA1NjkzMywgCi0gICAgNTY5MzcsIDU2OTQxLCA1Njk0NSwgNTY5NDksIDU2OTUzLCA1Njk1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTY5NjEsIDU2OTY1LCA1Njk2OSwgNTY5NzMsIDU2OTc3LCA1Njk4MSwgNTY5ODUsIDAsIDU2OTg5LCA1Njk5MywgNTY5OTcsIAotICAgIDU3MDAxLCA1NzAwNSwgNTcwMDksIDU3MDEzLCAwLCA1NzAxNywgNTcwMjEsIDU3MDI1LCA1NzAyOSwgNTcwMzMsIDU3MDM3LCAKLSAgICA1NzA0MSwgMCwgNTcwNDUsIDU3MDQ5LCA1NzA1MywgNTcwNTcsIDU3MDYxLCA1NzA2NSwgNTcwNjksIDAsIDU3MDczLCAKLSAgICA1NzA3NywgNTcwODEsIDU3MDg1LCA1NzA4OSwgNTcwOTMsIDU3MDk3LCAwLCA1NzEwMSwgNTcxMDUsIDU3MTA5LCA1NzExMywgCi0gICAgNTcxMTcsIDU3MTIxLCA1NzEyNSwgMCwgNTcxMjksIDU3MTMzLCA1NzEzNywgNTcxNDEsIDU3MTQ1LCA1NzE0OSwgNTcxNTMsIAotICAgIDAsIDU3MTU3LCA1NzE2MSwgNTcxNjUsIDU3MTY5LCA1NzE3MywgNTcxNzcsIDU3MTgxLCAwLCA1NzE4NSwgNTcxOTAsIAotICAgIDU3MTk1LCA1NzIwMCwgNTcyMDUsIDU3MjEwLCA1NzIxNSwgNTcyMTksIDU3MjI0LCA1NzIyOSwgNTcyMzQsIDU3MjM4LCAKLSAgICA1NzI0MywgNTcyNDgsIDU3MjUzLCA1NzI1OCwgNTcyNjIsIDU3MjY3LCA1NzI3MiwgNTcyNzcsIDU3MjgyLCA1NzI4NywgCi0gICAgNTcyOTIsIDU3Mjk2LCA1NzMwMSwgNTczMDYsIDU3MzEzLCA1NzMxOCwgNTczMjMsIDU3MzI5LCA1NzMzNiwgNTczNDMsIAotICAgIDU3MzUyLCA1NzM1OSwgNTczNjgsIDU3MzcyLCA1NzM3NiwgNTczODIsIDU3Mzg4LCA1NzM5NCwgNTc0MDIsIDU3NDA4LCAKLSAgICA1NzQxMiwgNTc0MTYsIDU3NDIwLCA1NzQyNiwgNTc0MzIsIDU3NDM2LCA1NzQzOCwgNTc0NDIsIDU3NDQ4LCA1NzQ1MCwgCi0gICAgNTc0NTQsIDU3NDU4LCA1NzQ2MiwgNTc0NjgsIDU3NDczLCA1NzQ3NywgNTc0ODEsIDU3NDg2LCA1NzQ5MiwgNTc0OTcsIAotICAgIDU3NTAyLCA1NzUwNywgNTc1MTIsIDU3NTE5LCA1NzUyNiwgNTc1MzEsIDU3NTM2LCA1NzU0MSwgNTc1NDYsIDU3NTUxLCAKLSAgICA1NzU1NiwgNTc1NjAsIDU3NTY0LCA1NzU3MSwgNTc1NzgsIDU3NTg0LCA1NzU4OCwgNTc1OTMsIDU3NTk1LCA1NzU5OSwgCi0gICAgNTc2MDcsIDU3NjExLCA1NzYxNSwgNTc2MTksIDU3NjIzLCA1NzYyOSwgNTc2MzUsIDU3NjM5LCA1NzY0NSwgNTc2NDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0ODc1LCA1NDg4MCwgNTQ4ODUsIAorICAgIDU0ODkwLCA1NDg5NSwgNTQ5MDAsIDU0OTA1LCA1NDkxMCwgNTQ5MTUsIDU0OTIwLCA1NDkyNSwgNTQ5MzEsIDU0OTM1LCAKKyAgICA1NDk0MCwgNTQ5NDUsIDU0OTUwLCA1NDk1NSwgNTQ5NjAsIDU0OTY1LCA1NDk3MCwgNTQ5NzUsIDU0OTgwLCA1NDk4NSwgCisgICAgNTQ5OTAsIDU0OTk1LCA1NTAwMCwgNTUwMDUsIDU1MDEwLCA1NTAxNSwgNTUwMjAsIDU1MDI1LCA1NTAzMCwgNTUwMzUsIAorICAgIDU1MDQwLCA1NTA0NSwgNTUwNTEsIDU1MDU2LCA1NTA2MiwgNTUwNzEsIDU1MDc2LCA1NTA4NCwgNTUwOTEsIDU1MTAwLCAKKyAgICA1NTEwNSwgNTUxMTAsIDU1MTE1LCA1NTEyMSwgMCwgNTUxMjgsIDU1MTMzLCA1NTEzOCwgNTUxNDMsIDU1MTQ4LCA1NTE1MywgCisgICAgNTUxNTgsIDU1MTYzLCA1NTE2OCwgNTUxNzMsIDU1MTc4LCA1NTE4NCwgNTUxODgsIDU1MTkzLCA1NTE5OCwgNTUyMDMsIAorICAgIDU1MjA4LCA1NTIxMywgNTUyMTgsIDU1MjIzLCA1NTIyOCwgNTUyMzMsIDU1MjM4LCA1NTI0MywgNTUyNDgsIDU1MjUzLCAKKyAgICA1NTI1OCwgNTUyNjMsIDU1MjY4LCA1NTI3MywgNTUyNzgsIDU1MjgzLCA1NTI4OCwgNTUyOTMsIDU1Mjk4LCA1NTMwNCwgCisgICAgNTUzMDksIDU1MzE1LCA1NTMyNCwgNTUzMjksIDU1MzM3LCA1NTM0NCwgNTUzNTMsIDU1MzU4LCA1NTM2MywgNTUzNjgsIAorICAgIDU1Mzc0LCAwLCA1NTM4MSwgNTUzODksIDU1Mzk3LCA1NTQwNiwgNTU0MTMsIDU1NDIxLCA1NTQyNywgNTU0MzYsIDU1NDQ0LCAKKyAgICA1NTQ1MiwgNTU0NjAsIDU1NDY4LCA1NTQ3NiwgNTU0ODQsIDU1NDg5LCA1NTQ5NiwgNTU1MDIsIDU1NTA5LCA1NTUxNywgCisgICAgNTU1MjQsIDU1NTMxLCA1NTUzOSwgNTU1NDUsIDU1NTUxLCA1NTU1OCwgNTU1NjUsIDU1NTc1LCA1NTU4NSwgNTU1OTIsIAorICAgIDU1NTk5LCA1NTYwNCwgNTU2MTQsIDU1NjI0LCA1NTYyOSwgNTU2MzQsIDU1NjM5LCA1NTY0NCwgNTU2NDksIDU1NjU0LCAKKyAgICA1NTY1OSwgNTU2NjQsIDU1NjY5LCA1NTY3NCwgNTU2NzksIDU1Njg0LCA1NTY4OSwgNTU2OTQsIDU1Njk5LCA1NTcwNCwgCisgICAgNTU3MDksIDU1NzE0LCA1NTcxOSwgNTU3MjQsIDU1NzI5LCA1NTczNCwgNTU3MzksIDU1NzQ0LCA1NTc0OSwgNTU3NTQsIAorICAgIDU1NzU5LCA1NTc2NCwgNTU3NjksIDU1Nzc0LCA1NTc3OCwgNTU3ODIsIDU1Nzg3LCA1NTc5MiwgNTU3OTcsIDU1ODAyLCAKKyAgICA1NTgwNywgNTU4MTIsIDU1ODE3LCA1NTgyMiwgNTU4MjcsIDU1ODMyLCA1NTgzNywgNTU4NDIsIDU1ODQ3LCA1NTg1MiwgCisgICAgNTU4NTcsIDU1ODYyLCA1NTg2NywgNTU4NzIsIDU1ODc5LCA1NTg4NiwgNTU4OTMsIDU1OTAwLCA1NTkwNywgNTU5MTQsIAorICAgIDU1OTIxLCA1NTkyOCwgNTU5MzUsIDU1OTQyLCA1NTk0OSwgNTU5NTYsIDU1OTYzLCA1NTk3MCwgNTU5NzUsIDU1OTgwLCAKKyAgICA1NTk4NywgNTU5OTQsIDU2MDAxLCA1NjAwOCwgNTYwMTUsIDU2MDIyLCA1NjAyOSwgNTYwMzYsIDU2MDQzLCA1NjA1MCwgCisgICAgNTYwNTcsIDU2MDY0LCA1NjA3MCwgNTYwNzYsIDU2MDgyLCA1NjA4OCwgNTYwOTUsIDU2MTAyLCA1NjEwOSwgNTYxMTYsIAorICAgIDU2MTIzLCA1NjEzMCwgNTYxMzcsIDU2MTQ0LCA1NjE1MSwgNTYxNTgsIDU2MTY2LCA1NjE3NCwgNTYxODIsIDU2MTkwLCAKKyAgICA1NjE5OCwgNTYyMDYsIDU2MjE0LCA1NjIyMiwgNTYyMjYsIDU2MjMyLCA1NjIzOCwgNTYyNDIsIDU2MjQ4LCA1NjI1NCwgCisgICAgNTYyNjAsIDU2MjY3LCA1NjI3NCwgNTYyODEsIDU2Mjg4LCA1NjI5MywgNTYyOTksIDU2MzA1LCA1NjMxMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTYzMTksIDU2MzI3LCA1NjMzNiwgNTYzNDUsIDU2MzUzLCA1NjM1OSwgNTYzNjQsIDU2MzY5LCA1NjM3NCwgCisgICAgNTYzNzksIDU2Mzg0LCA1NjM4OSwgNTYzOTQsIDU2Mzk5LCA1NjQwNCwgNTY0MDksIDU2NDE0LCA1NjQxOSwgNTY0MjQsIAorICAgIDU2NDI5LCA1NjQzNCwgNTY0MzksIDU2NDQ0LCA1NjQ0OSwgNTY0NTQsIDU2NDU5LCA1NjQ2NCwgNTY0NjksIDU2NDc0LCAKKyAgICA1NjQ3OSwgNTY0ODQsIDU2NDg5LCA1NjQ5NCwgNTY0OTksIDU2NTA0LCA1NjUwOSwgNTY1MTQsIDU2NTE5LCA1NjUyNCwgCisgICAgNTY1MjksIDU2NTM0LCA1NjUzOSwgNTY1NDQsIDU2NTQ5LCA1NjU1NCwgMCwgNTY1NTksIDAsIDAsIDAsIDAsIDAsIDU2NTY0LCAKKyAgICAwLCAwLCA1NjU2OSwgNTY1NzMsIDU2NTc4LCA1NjU4MywgNTY1ODgsIDU2NTkzLCA1NjYwMiwgNTY2MDcsIDU2NjEyLCAKKyAgICA1NjYxNywgNTY2MjIsIDU2NjI3LCA1NjYzMiwgNTY2MzcsIDU2NjQyLCA1NjY0OSwgNTY2NTQsIDU2NjU5LCA1NjY2OCwgCisgICAgNTY2NzUsIDU2NjgwLCA1NjY4NSwgNTY2OTAsIDU2Njk3LCA1NjcwMiwgNTY3MDksIDU2NzE0LCA1NjcxOSwgNTY3MjYsIAorICAgIDU2NzMzLCA1NjczOCwgNTY3NDMsIDU2NzQ4LCA1Njc1NSwgNTY3NjIsIDU2NzY3LCA1Njc3MiwgNTY3NzcsIDU2NzgyLCAKKyAgICA1Njc4NywgNTY3OTQsIDU2ODAxLCA1NjgwNiwgNTY4MTEsIDU2ODE2LCA1NjgyMSwgNTY4MjYsIDU2ODMxLCA1NjgzNiwgCisgICAgNTY4NDEsIDU2ODQ2LCA1Njg1MSwgNTY4NTYsIDU2ODYzLCA1Njg2OCwgNTY4NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU2ODc4LCA1Njg4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY4OTAsIDU2ODk1LCAKKyAgICA1Njg5OSwgNTY5MDMsIDU2OTA3LCA1NjkxMSwgNTY5MTUsIDU2OTE5LCA1NjkyMywgNTY5MjcsIDU2OTMxLCA1NjkzNSwgCisgICAgNTY5NDEsIDU2OTQ1LCA1Njk0OSwgNTY5NTMsIDU2OTU3LCA1Njk2MSwgNTY5NjUsIDU2OTY5LCA1Njk3MywgNTY5NzcsIAorICAgIDU2OTgxLCA1Njk4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY5ODksIDU2OTkzLCA1Njk5NywgNTcwMDEsIAorICAgIDU3MDA1LCA1NzAwOSwgNTcwMTMsIDAsIDU3MDE3LCA1NzAyMSwgNTcwMjUsIDU3MDI5LCA1NzAzMywgNTcwMzcsIDU3MDQxLCAKKyAgICAwLCA1NzA0NSwgNTcwNDksIDU3MDUzLCA1NzA1NywgNTcwNjEsIDU3MDY1LCA1NzA2OSwgMCwgNTcwNzMsIDU3MDc3LCAKKyAgICA1NzA4MSwgNTcwODUsIDU3MDg5LCA1NzA5MywgNTcwOTcsIDAsIDU3MTAxLCA1NzEwNSwgNTcxMDksIDU3MTEzLCA1NzExNywgCisgICAgNTcxMjEsIDU3MTI1LCAwLCA1NzEyOSwgNTcxMzMsIDU3MTM3LCA1NzE0MSwgNTcxNDUsIDU3MTQ5LCA1NzE1MywgMCwgCisgICAgNTcxNTcsIDU3MTYxLCA1NzE2NSwgNTcxNjksIDU3MTczLCA1NzE3NywgNTcxODEsIDAsIDU3MTg1LCA1NzE4OSwgNTcxOTMsIAorICAgIDU3MTk3LCA1NzIwMSwgNTcyMDUsIDU3MjA5LCAwLCA1NzIxMywgNTcyMTgsIDU3MjIzLCA1NzIyOCwgNTcyMzMsIDU3MjM4LCAKKyAgICA1NzI0MywgNTcyNDcsIDU3MjUyLCA1NzI1NywgNTcyNjIsIDU3MjY2LCA1NzI3MSwgNTcyNzYsIDU3MjgxLCA1NzI4NiwgCisgICAgNTcyOTAsIDU3Mjk1LCA1NzMwMCwgNTczMDUsIDU3MzEwLCA1NzMxNSwgNTczMjAsIDU3MzI0LCA1NzMyOSwgNTczMzQsIAorICAgIDU3MzQxLCA1NzM0NiwgNTczNTEsIDU3MzU3LCA1NzM2NCwgNTczNzEsIDU3MzgwLCA1NzM4NywgNTczOTYsIDU3NDAwLCAKKyAgICA1NzQwNCwgNTc0MTAsIDU3NDE2LCA1NzQyMiwgNTc0MzAsIDU3NDM2LCA1NzQ0MCwgNTc0NDQsIDU3NDQ4LCA1NzQ1NCwgCisgICAgNTc0NjAsIDU3NDY0LCA1NzQ2NiwgNTc0NzAsIDU3NDc2LCA1NzQ3OCwgNTc0ODIsIDU3NDg2LCA1NzQ5MCwgNTc0OTYsIAorICAgIDU3NTAxLCA1NzUwNSwgNTc1MDksIDU3NTE0LCA1NzUyMCwgNTc1MjUsIDU3NTMwLCA1NzUzNSwgNTc1NDAsIDU3NTQ3LCAKKyAgICA1NzU1NCwgNTc1NTksIDU3NTY0LCA1NzU2OSwgNTc1NzQsIDU3NTc5LCA1NzU4NCwgNTc1ODgsIDU3NTkyLCA1NzU5OSwgCisgICAgNTc2MDYsIDU3NjEyLCA1NzYxNiwgNTc2MjEsIDU3NjIzLCA1NzYyNywgNTc2MzUsIDU3NjM5LCA1NzY0MywgNTc2NDcsIAorICAgIDU3NjUxLCA1NzY1NywgNTc2NjMsIDU3NjY3LCA1NzY3MywgNTc2NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NjUzLCA1NzY1NywgCi0gICAgNTc2NjEsIDU3NjY2LCA1NzY3MSwgNTc2NzYsIDU3NjgwLCA1NzY4NCwgNTc2ODgsIDU3NjkzLCA1NzY5OCwgNTc3MDIsIAotICAgIDU3NzA2LCA1NzcxMCwgNTc3MTQsIDU3NzE5LCA1NzcyNCwgNTc3MjksIDU3NzM0LCA1NzczOCwgNTc3NDIsIDU3NzQ3LCAKLSAgICA1Nzc1MiwgNTc3NTcsIDU3NzYyLCA1Nzc2NiwgMCwgNTc3NzAsIDU3Nzc0LCA1Nzc3OCwgNTc3ODIsIDU3Nzg2LCA1Nzc5MCwgCi0gICAgNTc3OTQsIDU3Nzk5LCA1NzgwNCwgNTc4MDgsIDU3ODEzLCA1NzgxOCwgNTc4MjcsIDU3ODMxLCA1NzgzNSwgNTc4MzksIAotICAgIDU3ODQ2LCA1Nzg1MCwgNTc4NTUsIDU3ODYwLCA1Nzg2NCwgNTc4NjgsIDU3ODc0LCA1Nzg3OSwgNTc4ODQsIDU3ODg5LCAKLSAgICA1Nzg5NCwgNTc4OTgsIDU3OTAyLCA1NzkwNiwgNTc5MTAsIDU3OTE0LCA1NzkxOSwgNTc5MjQsIDU3OTI4LCA1NzkzMiwgCi0gICAgNTc5MzcsIDU3OTQyLCA1Nzk0NywgNTc5NTEsIDU3OTU1LCA1Nzk2MCwgNTc5NjUsIDU3OTcxLCA1Nzk3NywgNTc5ODEsIAotICAgIDU3OTg3LCA1Nzk5MywgNTc5OTcsIDU4MDAzLCA1ODAwOSwgNTgwMTQsIDU4MDE5LCA1ODAyMywgNTgwMjksIDU4MDMzLCAKLSAgICA1ODAzNywgNTgwNDMsIDU4MDQ5LCA1ODA1NCwgNTgwNTksIDU4MDYzLCA1ODA2NywgNTgwNzUsIDU4MDgxLCA1ODA4NywgCi0gICAgNTgwOTMsIDU4MDk4LCA1ODEwMywgNTgxMDgsIDU4MTE0LCA1ODExOCwgNTgxMjQsIDU4MTI4LCA1ODEzMiwgNTgxMzgsIAotICAgIDU4MTQ0LCA1ODE1MCwgNTgxNTYsIDU4MTYyLCA1ODE2OCwgNTgxNzQsIDU4MTgwLCA1ODE4NiwgNTgxOTIsIDU4MTk4LCAKLSAgICA1ODIwNCwgNTgyMDgsIDU4MjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODIyMCwgNTgyMjMsIAotICAgIDU4MjI3LCA1ODIzMSwgNTgyMzUsIDU4MjM5LCA1ODI0MiwgNTgyNDUsIDU4MjQ5LCA1ODI1MywgNTgyNTcsIDU4MjYxLCAKLSAgICA1ODI2NCwgNTgyNjksIDU4MjczLCA1ODI3NywgNTgyODEsIDU4Mjg2LCA1ODI5MCwgNTgyOTQsIDU4Mjk4LCA1ODMwMiwgCi0gICAgNTgzMDgsIDU4MzE0LCA1ODMxOCwgNTgzMjIsIDU4MzI2LCA1ODMzMCwgNTgzMzQsIDU4MzM4LCA1ODM0MiwgNTgzNDYsIAotICAgIDU4MzUwLCA1ODM1NCwgNTgzNTgsIDU4MzY0LCA1ODM2OCwgNTgzNzIsIDU4Mzc2LCA1ODM4MCwgNTgzODQsIDU4Mzg4LCAKLSAgICA1ODM5MiwgNTgzOTYsIDU4NDAwLCA1ODQwNCwgNTg0MDgsIDU4NDEyLCA1ODQxNiwgNTg0MjAsIDU4NDI0LCA1ODQyOCwgCi0gICAgNTg0MzQsIDU4NDQwLCA1ODQ0NSwgNTg0NTAsIDU4NDU0LCA1ODQ1OCwgNTg0NjIsIDU4NDY2LCA1ODQ3MCwgNTg0NzQsIAotICAgIDU4NDc4LCA1ODQ4MiwgNTg0ODYsIDU4NDkwLCA1ODQ5NCwgNTg0OTgsIDU4NTAyLCA1ODUwNiwgNTg1MTAsIDU4NTE0LCAKLSAgICA1ODUxOCwgNTg1MjIsIDU4NTI2LCA1ODUzMCwgNTg1MzQsIDU4NTM4LCA1ODU0MiwgNTg1NDYsIDU4NTUyLCA1ODU1NiwgCi0gICAgNTg1NjAsIDU4NTY0LCA1ODU2OCwgNTg1NzIsIDU4NTc2LCA1ODU4MCwgNTg1ODQsIDU4NTg5LCA1ODU5NiwgNTg2MDAsIAotICAgIDU4NjA0LCA1ODYwOCwgNTg2MTIsIDU4NjE2LCA1ODYyMCwgNTg2MjQsIDU4NjI4LCA1ODYzMiwgNTg2MzYsIDU4NjQwLCAKLSAgICA1ODY0NCwgNTg2NTEsIDU4NjU1LCA1ODY2MSwgNTg2NjUsIDU4NjY5LCA1ODY3MywgNTg2NzcsIDU4NjgxLCA1ODY4NCwgCi0gICAgNTg2ODgsIDU4NjkyLCA1ODY5NiwgNTg3MDAsIDU4NzA0LCA1ODcwOCwgNTg3MTIsIDU4NzE2LCA1ODcyMCwgNTg3MjQsIAotICAgIDU4NzI4LCA1ODczMiwgNTg3MzYsIDU4NzQwLCA1ODc0NCwgNTg3NDgsIDU4NzUyLCA1ODc1NiwgNTg3NjAsIDU4NzY0LCAKLSAgICA1ODc2OCwgNTg3NzIsIDU4Nzc2LCA1ODc4MCwgNTg3ODQsIDU4Nzg4LCA1ODc5MiwgNTg3OTYsIDU4ODAwLCA1ODgwNCwgCi0gICAgNTg4MDgsIDU4ODEyLCA1ODgxOCwgNTg4MjIsIDU4ODI2LCA1ODgzMCwgNTg4MzQsIDU4ODM4LCA1ODg0MiwgNTg4NDYsIAotICAgIDU4ODUwLCA1ODg1NCwgNTg4NTgsIDU4ODYyLCA1ODg2NiwgNTg4NzAsIDU4ODc0LCA1ODg3OCwgNTg4ODIsIDU4ODg2LCAKLSAgICA1ODg5MCwgNTg4OTQsIDU4ODk4LCA1ODkwMiwgNTg5MDYsIDU4OTEwLCA1ODkxNCwgNTg5MTgsIDU4OTIyLCA1ODkyNiwgCi0gICAgNTg5MzQsIDU4OTM4LCA1ODk0MiwgNTg5NDYsIDU4OTUwLCA1ODk1NCwgNTg5NjAsIDU4OTY0LCA1ODk2OCwgNTg5NzIsIAotICAgIDU4OTc2LCA1ODk4MCwgNTg5ODQsIDU4OTg4LCA1ODk5MiwgNTg5OTYsIDU5MDAwLCA1OTAwNCwgNTkwMDgsIDU5MDEyLCAKLSAgICA1OTAxOCwgNTkwMjIsIDU5MDI2LCA1OTAzMCwgNTkwMzQsIDU5MDM4LCA1OTA0MiwgNTkwNDYsIDU5MDUwLCA1OTA1NCwgCi0gICAgNTkwNTgsIDU5MDYyLCA1OTA2NiwgNTkwNzAsIDU5MDc0LCA1OTA3OCwgNTkwODIsIDU5MDg2LCA1OTA5MCwgNTkwOTQsIAotICAgIDU5MDk4LCA1OTEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTkxMDYsIDU5MTE1LCA1OTEyMywgNTkxMzUsIDU5MTQ2LCA1OTE1NCwgNTkxNjMsIDU5MTcyLCAKLSAgICA1OTE4MiwgNTkxOTQsIDU5MjA2LCA1OTIxOCwgMCwgMCwgMCwgMCwgNTkyMjQsIDU5MjI3LCA1OTIzMCwgNTkyMzUsIAotICAgIDU5MjM4LCA1OTI0NSwgNTkyNDksIDU5MjUzLCA1OTI1NywgNTkyNjEsIDU5MjY1LCA1OTI3MCwgNTkyNzUsIDU5Mjc5LCAKLSAgICA1OTI4MywgNTkyODgsIDU5MjkzLCA1OTI5OCwgNTkzMDMsIDU5MzA2LCA1OTMwOSwgNTkzMTUsIDU5MzIxLCA1OTMyNiwgCi0gICAgNTkzMzEsIDU5MzM4LCA1OTM0NSwgNTkzNDksIDU5MzUzLCA1OTM1NywgNTkzNjUsIDU5MzcxLCA1OTM3OCwgNTkzODMsIAotICAgIDU5Mzg4LCA1OTM5MywgNTkzOTgsIDU5NDAzLCA1OTQwOCwgNTk0MTMsIDU5NDE4LCA1OTQyMywgNTk0MjgsIDU5NDMzLCAKLSAgICA1OTQzOCwgNTk0NDMsIDU5NDQ4LCA1OTQ1NCwgNTk0NTksIDU5NDYzLCA1OTQ2OSwgNTk0ODAsIDU5NDkwLCA1OTUwNSwgCi0gICAgNTk1MTUsIDU5NTE5LCA1OTUyOSwgNTk1MzUsIDU5NTQxLCA1OTU0NywgNTk1NTIsIDU5NTU1LCA1OTU2MCwgNTk1NjQsIDAsIAotICAgIDU5NTcwLCA1OTU3NCwgNTk1NzcsIDU5NTgxLCA1OTU4NCwgNTk1ODgsIDU5NTkxLCA1OTU5NSwgNTk1OTgsIDU5NjAyLCAKLSAgICA1OTYwNSwgNTk2MDgsIDU5NjEyLCA1OTYxNiwgNTk2MjAsIDU5NjI0LCA1OTYyOCwgNTk2MzIsIDU5NjM2LCA1OTY0MCwgCi0gICAgNTk2NDQsIDU5NjQ3LCA1OTY1MSwgNTk2NTUsIDU5NjU5LCA1OTY2MywgNTk2NjcsIDU5NjcxLCA1OTY3NSwgNTk2NzksIAotICAgIDU5NjgzLCA1OTY4NywgNTk2OTEsIDU5Njk1LCA1OTY5OSwgNTk3MDQsIDU5NzA4LCA1OTcxMiwgNTk3MTYsIDU5NzIwLCAKLSAgICA1OTcyMywgNTk3MjcsIDU5NzMwLCA1OTczNCwgNTk3MzgsIDU5NzQyLCA1OTc0NiwgNTk3NDksIDU5NzUzLCA1OTc1NiwgCi0gICAgNTk3NjAsIDU5NzY0LCA1OTc2OCwgNTk3NzIsIDU5Nzc2LCA1OTc4MCwgNTk3ODQsIDU5Nzg4LCA1OTc5MiwgNTk3OTYsIAotICAgIDU5ODAwLCA1OTgwNCwgNTk4MDcsIDU5ODExLCA1OTgxNSwgNTk4MTksIDU5ODIzLCA1OTgyNywgNTk4MzAsIDU5ODM1LCAKLSAgICA1OTgzOSwgNTk4NDQsIDU5ODQ4LCA1OTg1MSwgNTk4NTUsIDU5ODU5LCA1OTg2MywgNTk4NjcsIDU5ODcyLCA1OTg3NiwgCi0gICAgNTk4ODAsIDU5ODg0LCA1OTg4OCwgNTk4OTIsIDU5ODk2LCA1OTkwMCwgMCwgMCwgNTk5MDUsIDU5OTEzLCA1OTkyMSwgCi0gICAgNTk5MjgsIDU5OTM1LCA1OTkzOSwgNTk5NDUsIDU5OTUwLCA1OTk1NSwgNTk5NTksIDU5OTYyLCA1OTk2NiwgNTk5NjksIAotICAgIDU5OTczLCA1OTk3NiwgNTk5ODAsIDU5OTgzLCA1OTk4NywgNTk5OTAsIDU5OTkzLCA1OTk5NywgNjAwMDEsIDYwMDA1LCAKLSAgICA2MDAwOSwgNjAwMTMsIDYwMDE3LCA2MDAyMSwgNjAwMjUsIDYwMDI5LCA2MDAzMiwgNjAwMzYsIDYwMDQwLCA2MDA0NCwgCi0gICAgNjAwNDgsIDYwMDUyLCA2MDA1NiwgNjAwNjAsIDYwMDY0LCA2MDA2OCwgNjAwNzIsIDYwMDc2LCA2MDA4MCwgNjAwODQsIAotICAgIDYwMDg5LCA2MDA5MywgNjAwOTcsIDYwMTAxLCA2MDEwNSwgNjAxMDgsIDYwMTEyLCA2MDExNSwgNjAxMTksIDYwMTIzLCAKLSAgICA2MDEyNywgNjAxMzEsIDYwMTM0LCA2MDEzOCwgNjAxNDEsIDYwMTQ1LCA2MDE0OSwgNjAxNTMsIDYwMTU3LCA2MDE2MSwgCi0gICAgNjAxNjUsIDYwMTY5LCA2MDE3MywgNjAxNzcsIDYwMTgxLCA2MDE4NSwgNjAxODksIDYwMTkyLCA2MDE5NiwgNjAyMDAsIAotICAgIDYwMjA0LCA2MDIwOCwgNjAyMTIsIDYwMjE1LCA2MDIyMCwgNjAyMjQsIDYwMjI5LCA2MDIzMywgNjAyMzYsIDYwMjQwLCAKLSAgICA2MDI0NCwgNjAyNDgsIDYwMjUyLCA2MDI1NywgNjAyNjEsIDYwMjY1LCA2MDI2OSwgNjAyNzMsIDYwMjc3LCA2MDI4MSwgCi0gICAgNjAyODUsIDYwMjkwLCA2MDI5NCwgNjAyOTgsIDYwMzAyLCA2MDMwNiwgNjAzMTEsIDYwMzE4LCA2MDMyMiwgNjAzMjgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDYwMzMzLCA2MDMzOCwgNjAzNDMsIDYwMzQ3LCA2MDM1MiwgNjAzNTcsIDYwMzYyLCA2MDM2NywgCi0gICAgNjAzNzEsIDYwMzc2LCA2MDM4MSwgNjAzODYsIDYwMzkxLCA2MDM5NiwgNjA0MDEsIDYwNDA2LCA2MDQxMSwgNjA0MTYsIAotICAgIDYwNDIwLCA2MDQyNSwgNjA0MzAsIDYwNDM1LCA2MDQzOSwgNjA0NDMsIDYwNDQ3LCA2MDQ1MiwgNjA0NTcsIDYwNDYyLCAKLSAgICA2MDQ2NywgNjA0NzIsIDYwNDc3LCA2MDQ4MiwgNjA0ODcsIDYwNDkyLCA2MDQ5NywgNjA1MDEsIDYwNTA1LCA2MDUxMCwgCi0gICAgNjA1MTUsIDYwNTIwLCA2MDUyNSwgMCwgMCwgMCwgNjA1MzAsIDYwNTM0LCA2MDUzOCwgNjA1NDIsIDYwNTQ2LCA2MDU1MCwgCi0gICAgNjA1NTQsIDYwNTU4LCA2MDU2MiwgNjA1NjYsIDYwNTcwLCA2MDU3NCwgNjA1NzgsIDYwNTgyLCA2MDU4NiwgNjA1OTAsIAotICAgIDYwNTk0LCA2MDU5OCwgNjA2MDIsIDYwNjA2LCA2MDYxMCwgNjA2MTQsIDYwNjE4LCA2MDYyMiwgNjA2MjYsIDYwNjMwLCAKLSAgICA2MDYzNCwgNjA2MzgsIDYwNjQyLCA2MDY0NiwgNjA2NTAsIDYwNjUzLCA2MDY1NywgNjA2NjAsIDYwNjY0LCA2MDY2OCwgCi0gICAgNjA2NzEsIDYwNjc1LCA2MDY3OSwgNjA2ODIsIDYwNjg2LCA2MDY5MCwgNjA2OTQsIDYwNjk4LCA2MDcwMSwgNjA3MDUsIAotICAgIDYwNzA5LCA2MDcxMywgNjA3MTcsIDYwNzIxLCA2MDcyNSwgNjA3MjgsIDYwNzMxLCA2MDczNSwgNjA3MzksIDYwNzQzLCAKLSAgICA2MDc0NywgNjA3NTEsIDYwNzU1LCA2MDc1OSwgNjA3NjMsIDYwNzY3LCA2MDc3MSwgNjA3NzUsIDYwNzc5LCA2MDc4MywgCi0gICAgNjA3ODcsIDYwNzkxLCA2MDc5NSwgNjA3OTksIDYwODAzLCA2MDgwNywgNjA4MTEsIDYwODE1LCA2MDgxOSwgNjA4MjMsIAotICAgIDYwODI3LCA2MDgzMSwgNjA4MzUsIDYwODM5LCA2MDg0MywgNjA4NDcsIDYwODUxLCA2MDg1NSwgNjA4NTksIDYwODYzLCAKLSAgICA2MDg2NywgNjA4NzEsIDYwODc1LCA2MDg3OSwgNjA4ODMsIDYwODg3LCA2MDg5MSwgNjA4OTUsIDAsIDYwODk5LCA2MDkwNSwgCi0gICAgNjA5MTEsIDYwOTE2LCA2MDkyMSwgNjA5MjYsIDYwOTMyLCA2MDkzOCwgNjA5NDQsIDYwOTUwLCA2MDk1NiwgNjA5NjIsIAotICAgIDYwOTY4LCA2MDk3NCwgNjA5ODAsIDYwOTg2LCA2MDk5MiwgNjA5OTcsIDYxMDAyLCA2MTAwNywgNjEwMTIsIDYxMDE3LCAKLSAgICA2MTAyMiwgNjEwMjcsIDYxMDMyLCA2MTAzNywgNjEwNDIsIDYxMDQ3LCA2MTA1MiwgNjEwNTcsIDYxMDYyLCA2MTA2NywgCi0gICAgNjEwNzIsIDYxMDc3LCA2MTA4MiwgNjEwODcsIDYxMDkyLCA2MTA5OCwgNjExMDQsIDYxMTEwLCA2MTExNiwgNjExMjEsIAotICAgIDYxMTI2LCAwLCAwLCAwLCAwLCAwLCA2MTEzMSwgNjExMzYsIDYxMTQxLCA2MTE0NiwgNjExNTEsIDYxMTU2LCA2MTE2MSwgCi0gICAgNjExNjYsIDYxMTcxLCA2MTE3NiwgNjExODEsIDYxMTg2LCA2MTE5MSwgNjExOTYsIDYxMjAxLCA2MTIwNiwgNjEyMTEsIAotICAgIDYxMjE2LCA2MTIyMSwgNjEyMjYsIDYxMjMxLCA2MTIzNiwgNjEyNDEsIDYxMjQ2LCA2MTI1MSwgNjEyNTYsIDYxMjYxLCAKLSAgICA2MTI2NiwgNjEyNzEsIDYxMjc2LCA2MTI4MSwgNjEyODYsIDYxMjkxLCA2MTI5NiwgNjEzMDEsIDYxMzA2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTMxMSwgNjEzMTYsIDYxMzIxLCA2MTMyNiwgNjEzMzAsIDYxMzM1LCAKLSAgICA2MTMzOSwgNjEzNDQsIDYxMzQ5LCA2MTM1NCwgNjEzNTksIDYxMzY0LCA2MTM2OCwgNjEzNzMsIDYxMzc4LCA2MTM4MywgCi0gICAgNjEzODgsIDYxMzkyLCA2MTM5NiwgNjE0MDAsIDYxNDA0LCA2MTQwOCwgNjE0MTIsIDYxNDE2LCA2MTQyMCwgNjE0MjQsIAotICAgIDYxNDI4LCA2MTQzMiwgNjE0MzYsIDYxNDQwLCA2MTQ0NCwgNjE0NDksIDYxNDU0LCA2MTQ1OSwgNjE0NjQsIDYxNDY5LCAKLSAgICA2MTQ3NCwgNjE0NzksIDYxNDg0LCA2MTQ4OSwgNjE0OTQsIDYxNDk5LCA2MTUwNCwgNjE1MDksIDYxNTE0LCA2MTUxOSwgCi0gICAgNjE1MjUsIDAsIDYxNTMyLCA2MTUzNSwgNjE1MzgsIDYxNTQxLCA2MTU0NCwgNjE1NDcsIDYxNTUwLCA2MTU1MywgNjE1NTYsIAotICAgIDYxNTU5LCA2MTU2MywgNjE1NjcsIDYxNTcxLCA2MTU3NSwgNjE1NzksIDYxNTgzLCA2MTU4NywgNjE1OTEsIDYxNTk1LCAKLSAgICA2MTU5OSwgNjE2MDMsIDYxNjA3LCA2MTYxMSwgNjE2MTUsIDYxNjE5LCA2MTYyMywgNjE2MjcsIDYxNjMxLCA2MTYzNSwgCi0gICAgNjE2MzksIDYxNjQzLCA2MTY0NywgNjE2NTEsIDYxNjU1LCA2MTY1OSwgNjE2NjMsIDYxNjY3LCA2MTY3MSwgNjE2NzUsIAotICAgIDYxNjc5LCA2MTY4MywgNjE2OTIsIDYxNzAxLCA2MTcxMCwgNjE3MTksIDYxNzI4LCA2MTczNywgNjE3NDYsIDYxNzU1LCAKLSAgICA2MTc1OCwgNjE3NjMsIDYxNzY4LCA2MTc3MywgNjE3NzgsIDYxNzgzLCA2MTc4OCwgNjE3OTMsIDYxNzk4LCA2MTgwMywgCi0gICAgNjE4MDcsIDYxODEyLCA2MTgxNywgNjE4MjIsIDYxODI3LCA2MTgzMiwgNjE4MzYsIDYxODQwLCA2MTg0NCwgNjE4NDgsIAotICAgIDYxODUyLCA2MTg1NiwgNjE4NjAsIDYxODY0LCA2MTg2OCwgNjE4NzIsIDYxODc2LCA2MTg4MCwgNjE4ODQsIDYxODg4LCAKLSAgICA2MTg5MywgNjE4OTgsIDYxOTAzLCA2MTkwOCwgNjE5MTMsIDYxOTE4LCA2MTkyMywgNjE5MjgsIDYxOTMzLCA2MTkzOCwgCi0gICAgNjE5NDMsIDYxOTQ4LCA2MTk1MywgNjE5NTgsIDYxOTY0LCA2MTk3MCwgNjE5NzUsIDYxOTgwLCA2MTk4MywgNjE5ODYsIAotICAgIDYxOTg5LCA2MTk5MiwgNjE5OTUsIDYxOTk4LCA2MjAwMSwgNjIwMDQsIDYyMDA3LCA2MjAxMSwgNjIwMTUsIDYyMDE5LCAKLSAgICA2MjAyMywgNjIwMjcsIDYyMDMxLCA2MjAzNSwgNjIwMzksIDYyMDQzLCA2MjA0NywgNjIwNTEsIDYyMDU1LCA2MjA1OSwgCi0gICAgNjIwNjMsIDYyMDY3LCA2MjA3MSwgNjIwNzUsIDYyMDc5LCA2MjA4MywgNjIwODcsIDYyMDkxLCA2MjA5NSwgNjIwOTksIAotICAgIDYyMTAzLCA2MjEwNywgNjIxMTEsIDYyMTE1LCA2MjExOSwgNjIxMjMsIDYyMTI3LCA2MjEzMSwgNjIxMzUsIDYyMTM5LCAKLSAgICA2MjE0MywgNjIxNDcsIDYyMTUxLCA2MjE1NSwgNjIxNTksIDYyMTYzLCA2MjE2NywgNjIxNzIsIDYyMTc3LCA2MjE4MiwgCi0gICAgNjIxODcsIDYyMTkxLCA2MjE5NiwgNjIyMDEsIDYyMjA2LCA2MjIxMSwgNjIyMTYsIDYyMjIxLCA2MjIyNiwgNjIyMzEsIAotICAgIDYyMjM2LCA2MjI0MCwgNjIyNDcsIDYyMjU0LCA2MjI2MSwgNjIyNjgsIDYyMjc1LCA2MjI4MiwgNjIyODksIDYyMjk2LCAKLSAgICA2MjMwMywgNjIzMTAsIDYyMzE3LCA2MjMyNCwgNjIzMjcsIDYyMzMwLCA2MjMzMywgNjIzMzgsIDYyMzQxLCA2MjM0NCwgCi0gICAgNjIzNDcsIDYyMzUwLCA2MjM1MywgNjIzNTYsIDYyMzYwLCA2MjM2NCwgNjIzNjgsIDYyMzcyLCA2MjM3NSwgNjIzNzksIAotICAgIDYyMzgzLCA2MjM4NywgNjIzOTEsIDYyMzk1LCA2MjM5OSwgNjI0MDMsIDYyNDA3LCA2MjQxMCwgNjI0MTMsIDYyNDE3LCAKLSAgICA2MjQyMSwgNjI0MjUsIDYyNDI5LCA2MjQzMiwgNjI0MzYsIDYyNDQwLCA2MjQ0NCwgNjI0NDgsIDYyNDUxLCA2MjQ1NSwgCi0gICAgNjI0NTksIDYyNDYzLCA2MjQ2NywgNjI0NzAsIDYyNDc0LCA2MjQ3OCwgNjI0ODEsIDYyNDg1LCA2MjQ4OSwgNjI0OTMsIAotICAgIDYyNDk3LCA2MjUwMSwgNjI1MDUsIDYyNTA5LCAwLCA2MjUxMywgNjI1MTYsIDYyNTE5LCA2MjUyMiwgNjI1MjUsIDYyNTI4LCAKLSAgICA2MjUzMSwgNjI1MzQsIDYyNTM3LCA2MjU0MCwgNjI1NDMsIDYyNTQ2LCA2MjU0OSwgNjI1NTIsIDYyNTU1LCA2MjU1OCwgCi0gICAgNjI1NjEsIDYyNTY0LCA2MjU2NywgNjI1NzAsIDYyNTczLCA2MjU3NiwgNjI1NzksIDYyNTgyLCA2MjU4NSwgNjI1ODgsIAotICAgIDYyNTkxLCA2MjU5NCwgNjI1OTcsIDYyNjAwLCA2MjYwMywgNjI2MDYsIDYyNjA5LCA2MjYxMiwgNjI2MTUsIDYyNjE4LCAKLSAgICA2MjYyMSwgNjI2MjQsIDYyNjI3LCA2MjYzMCwgNjI2MzMsIDYyNjM2LCA2MjYzOSwgNjI2NDIsIDYyNjQ1LCA2MjY0OCwgCi0gICAgNjI2NTEsIDYyNjU0LCA2MjY1NywgNjI2NjAsIDYyNjYzLCA2MjY2NiwgNjI2NjksIDYyNjcyLCA2MjY3NSwgNjI2NzgsIAotICAgIDYyNjgxLCA2MjY4NCwgNjI2ODcsIDYyNjkwLCA2MjY5MywgNjI2OTYsIDYyNjk5LCA2MjcwMiwgNjI3MDUsIDYyNzA4LCAKLSAgICA2MjcxMSwgNjI3MTQsIDYyNzE3LCA2MjcyMCwgNjI3MjMsIDYyNzI2LCA2MjcyOSwgNjI3MzIsIDYyNzM1LCA2MjczOCwgCi0gICAgNjI3NDEsIDYyNzQ0LCA2Mjc0NywgNjI3NTAsIDYyNzUzLCA2Mjc1NiwgNjI3NTksIDYyNzYyLCA2Mjc2NSwgNjI3NjgsIAotICAgIDYyNzcxLCA2Mjc3NCwgNjI3NzcsIDYyNzg2LCA2Mjc5NCwgNjI4MDIsIDYyODEwLCA2MjgxOCwgNjI4MjYsIDYyODM0LCAKLSAgICA2Mjg0MiwgNjI4NTAsIDYyODU4LCA2Mjg2NywgNjI4NzYsIDYyODg1LCA2Mjg5NCwgNjI5MDMsIDYyOTEyLCA2MjkyMSwgCi0gICAgNjI5MzAsIDYyOTM5LCA2Mjk0OCwgNjI5NTcsIDYyOTY2LCA2Mjk3NSwgNjI5ODQsIDYyOTkzLCA2Mjk5NiwgNjI5OTksIAotICAgIDYzMDAyLCA2MzAwNCwgNjMwMDcsIDYzMDEwLCA2MzAxMywgNjMwMTgsIDYzMDIzLCA2MzAyNiwgNjMwMzMsIDYzMDQwLCAKLSAgICA2MzA0NywgNjMwNTQsIDYzMDU3LCA2MzA2MiwgNjMwNjQsIDYzMDY4LCA2MzA3MCwgNjMwNzIsIDYzMDc1LCA2MzA3OCwgCi0gICAgNjMwODEsIDYzMDg0LCA2MzA4NywgNjMwOTAsIDYzMDkzLCA2MzA5OCwgNjMxMDMsIDYzMTA2LCA2MzEwOSwgNjMxMTIsIAotICAgIDYzMTE1LCA2MzExOCwgNjMxMjEsIDYzMTI0LCA2MzEyOCwgNjMxMzEsIDYzMTM0LCA2MzEzNywgNjMxNDAsIDYzMTQzLCAKLSAgICA2MzE0NywgNjMxNTAsIDYzMTUzLCA2MzE1NiwgNjMxNjEsIDYzMTY2LCA2MzE3MSwgNjMxNzYsIDYzMTgxLCA2MzE4NiwgCi0gICAgNjMxOTEsIDYzMTk2LCA2MzIwMiwgNjMyMTAsIDYzMjEyLCA2MzIxNSwgNjMyMTgsIDYzMjIxLCA2MzIyNCwgNjMyMzAsIAotICAgIDYzMjM4LCA2MzI0MSwgNjMyNDQsIDYzMjQ5LCA2MzI1MiwgNjMyNTUsIDYzMjU4LCA2MzI2MywgNjMyNjYsIDYzMjY5LCAKLSAgICA2MzI3NCwgNjMyNzcsIDYzMjgwLCA2MzI4NSwgNjMyODgsIDYzMjkxLCA2MzI5NiwgNjMzMDEsIDYzMzA2LCA2MzMwOSwgCi0gICAgNjMzMTIsIDYzMzE1LCA2MzMxOCwgNjMzMjQsIDYzMzI3LCA2MzMzMCwgNjMzMzMsIDYzMzM1LCA2MzMzOCwgNjMzNDEsIAotICAgIDYzMzQ0LCA2MzM0OSwgNjMzNTIsIDYzMzU1LCA2MzM1OCwgNjMzNjEsIDYzMzY0LCA2MzM2OSwgNjMzNzIsIDYzMzc1LCAKLSAgICA2MzM3OCwgNjMzODEsIDYzMzg0LCA2MzM4NywgNjMzOTAsIDYzMzkzLCA2MzM5NiwgNjM0MDEsIDYzNDA1LCA2MzQxMywgCi0gICAgNjM0MjEsIDYzNDI5LCA2MzQzNywgNjM0NDUsIDYzNDUzLCA2MzQ2MSwgNjM0NjksIDYzNDc3LCA2MzQ4NiwgNjM0OTUsIAotICAgIDYzNTA0LCA2MzUxMywgNjM1MjIsIDYzNTMxLCA2MzU0MCwgNjM1NDksIDYzNTU4LCA2MzU2NywgNjM1NzYsIDYzNTg1LCAKLSAgICA2MzU5NCwgNjM2MDMsIDYzNjEyLCA2MzYyMSwgNjM2MzAsIDYzNjM5LCA2MzY0OCwgNjM2NTcsIDYzNjY2LCA2MzY3NSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc2ODEsIDU3Njg1LCA1NzY4OSwgNTc2OTQsIDU3Njk5LCA1NzcwNCwgCisgICAgNTc3MDgsIDU3NzEyLCA1NzcxNiwgNTc3MjEsIDU3NzI2LCA1NzczMCwgNTc3MzQsIDU3NzM4LCA1Nzc0MiwgNTc3NDcsIAorICAgIDU3NzUyLCA1Nzc1NywgNTc3NjIsIDU3NzY2LCA1Nzc3MCwgNTc3NzUsIDU3NzgwLCA1Nzc4NSwgNTc3OTAsIDU3Nzk0LCAwLCAKKyAgICA1Nzc5OCwgNTc4MDIsIDU3ODA2LCA1NzgxMCwgNTc4MTQsIDU3ODE4LCA1NzgyMiwgNTc4MjcsIDU3ODMyLCA1NzgzNiwgCisgICAgNTc4NDEsIDU3ODQ2LCA1Nzg1NSwgNTc4NTksIDU3ODYzLCA1Nzg2NywgNTc4NzQsIDU3ODc4LCA1Nzg4MywgNTc4ODgsIAorICAgIDU3ODkyLCA1Nzg5NiwgNTc5MDIsIDU3OTA3LCA1NzkxMiwgNTc5MTcsIDU3OTIyLCA1NzkyNiwgNTc5MzAsIDU3OTM0LCAKKyAgICA1NzkzOCwgNTc5NDIsIDU3OTQ3LCA1Nzk1MiwgNTc5NTYsIDU3OTYwLCA1Nzk2NSwgNTc5NzAsIDU3OTc1LCA1Nzk3OSwgCisgICAgNTc5ODMsIDU3OTg4LCA1Nzk5MywgNTc5OTksIDU4MDA1LCA1ODAwOSwgNTgwMTUsIDU4MDIxLCA1ODAyNSwgNTgwMzEsIAorICAgIDU4MDM3LCA1ODA0MiwgNTgwNDcsIDU4MDUxLCA1ODA1NywgNTgwNjEsIDU4MDY1LCA1ODA3MSwgNTgwNzcsIDU4MDgyLCAKKyAgICA1ODA4NywgNTgwOTEsIDU4MDk1LCA1ODEwMywgNTgxMDksIDU4MTE1LCA1ODEyMSwgNTgxMjYsIDU4MTMxLCA1ODEzNiwgCisgICAgNTgxNDIsIDU4MTQ2LCA1ODE1MiwgNTgxNTYsIDU4MTYwLCA1ODE2NiwgNTgxNzIsIDU4MTc4LCA1ODE4NCwgNTgxOTAsIAorICAgIDU4MTk2LCA1ODIwMiwgNTgyMDgsIDU4MjE0LCA1ODIyMCwgNTgyMjYsIDU4MjMyLCA1ODIzNiwgNTgyNDIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MjQ4LCA1ODI1MSwgNTgyNTUsIDU4MjU5LCA1ODI2MywgNTgyNjcsIAorICAgIDU4MjcwLCA1ODI3MywgNTgyNzcsIDU4MjgxLCA1ODI4NSwgNTgyODksIDU4MjkyLCA1ODI5NywgNTgzMDEsIDU4MzA1LCAKKyAgICA1ODMwOSwgNTgzMTQsIDU4MzE4LCA1ODMyMiwgNTgzMjYsIDU4MzMwLCA1ODMzNiwgNTgzNDIsIDU4MzQ2LCA1ODM1MCwgCisgICAgNTgzNTQsIDU4MzU4LCA1ODM2MiwgNTgzNjYsIDU4MzcwLCA1ODM3NCwgNTgzNzgsIDU4MzgyLCA1ODM4NiwgNTgzOTIsIAorICAgIDU4Mzk2LCA1ODQwMCwgNTg0MDQsIDU4NDA4LCA1ODQxMiwgNTg0MTYsIDU4NDIwLCA1ODQyNCwgNTg0MjgsIDU4NDMyLCAKKyAgICA1ODQzNiwgNTg0NDAsIDU4NDQ0LCA1ODQ0OCwgNTg0NTIsIDU4NDU2LCA1ODQ2MiwgNTg0NjgsIDU4NDczLCA1ODQ3OCwgCisgICAgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgNTg0OTQsIDU4NDk4LCA1ODUwMiwgNTg1MDYsIDU4NTEwLCA1ODUxNCwgNTg1MTgsIAorICAgIDU4NTIyLCA1ODUyNiwgNTg1MzAsIDU4NTM0LCA1ODUzOCwgNTg1NDIsIDU4NTQ2LCA1ODU1MCwgNTg1NTQsIDU4NTU4LCAKKyAgICA1ODU2MiwgNTg1NjYsIDU4NTcwLCA1ODU3NCwgNTg1ODAsIDU4NTg0LCA1ODU4OCwgNTg1OTIsIDU4NTk2LCA1ODYwMCwgCisgICAgNTg2MDQsIDU4NjA4LCA1ODYxMiwgNTg2MTcsIDU4NjI0LCA1ODYyOCwgNTg2MzIsIDU4NjM2LCA1ODY0MCwgNTg2NDQsIAorICAgIDU4NjQ4LCA1ODY1MiwgNTg2NTYsIDU4NjYwLCA1ODY2NCwgNTg2NjgsIDU4NjcyLCA1ODY3OSwgNTg2ODMsIDU4Njg5LCAKKyAgICA1ODY5MywgNTg2OTcsIDU4NzAxLCA1ODcwNSwgNTg3MDksIDU4NzEyLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCA1ODcyOCwgCisgICAgNTg3MzIsIDU4NzM2LCA1ODc0MCwgNTg3NDQsIDU4NzQ4LCA1ODc1MiwgNTg3NTYsIDU4NzYwLCA1ODc2NCwgNTg3NjgsIAorICAgIDU4NzcyLCA1ODc3NiwgNTg3ODAsIDU4Nzg0LCA1ODc4OCwgNTg3OTIsIDU4Nzk2LCA1ODgwMCwgNTg4MDQsIDU4ODA4LCAKKyAgICA1ODgxMiwgNTg4MTYsIDU4ODIwLCA1ODgyNCwgNTg4MjgsIDU4ODMyLCA1ODgzNiwgNTg4NDAsIDU4ODQ2LCA1ODg1MCwgCisgICAgNTg4NTQsIDU4ODU4LCA1ODg2MiwgNTg4NjYsIDU4ODcwLCA1ODg3NCwgNTg4NzgsIDU4ODgyLCA1ODg4NiwgNTg4OTAsIAorICAgIDU4ODk0LCA1ODg5OCwgNTg5MDIsIDU4OTA2LCA1ODkxMCwgNTg5MTQsIDU4OTE4LCA1ODkyMiwgNTg5MjYsIDU4OTMwLCAKKyAgICA1ODkzNCwgNTg5MzgsIDU4OTQyLCA1ODk0NiwgNTg5NTAsIDU4OTU0LCA1ODk2MiwgNTg5NjYsIDU4OTcwLCA1ODk3NCwgCisgICAgNTg5NzgsIDU4OTgyLCA1ODk4OCwgNTg5OTIsIDU4OTk2LCA1OTAwMCwgNTkwMDQsIDU5MDA4LCA1OTAxMiwgNTkwMTYsIAorICAgIDU5MDIwLCA1OTAyNCwgNTkwMjgsIDU5MDMyLCA1OTAzNiwgNTkwNDAsIDU5MDQ2LCA1OTA1MCwgNTkwNTQsIDU5MDU4LCAKKyAgICA1OTA2MiwgNTkwNjYsIDU5MDcwLCA1OTA3NCwgNTkwNzgsIDU5MDgyLCA1OTA4NiwgNTkwOTAsIDU5MDk0LCA1OTA5OCwgCisgICAgNTkxMDIsIDU5MTA2LCA1OTExMCwgNTkxMTQsIDU5MTE4LCA1OTEyMiwgNTkxMjYsIDU5MTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTEzNCwgNTkxNDMsIAorICAgIDU5MTUxLCA1OTE2MywgNTkxNzQsIDU5MTgyLCA1OTE5MSwgNTkyMDAsIDU5MjEwLCA1OTIyMiwgNTkyMzQsIDU5MjQ2LCAwLCAKKyAgICAwLCAwLCAwLCA1OTI1MiwgNTkyNTUsIDU5MjU4LCA1OTI2MywgNTkyNjYsIDU5MjczLCA1OTI3NywgNTkyODEsIDU5Mjg1LCAKKyAgICA1OTI4OSwgNTkyOTMsIDU5Mjk4LCA1OTMwMywgNTkzMDcsIDU5MzExLCA1OTMxNiwgNTkzMjEsIDU5MzI2LCA1OTMzMSwgCisgICAgNTkzMzQsIDU5MzM3LCA1OTM0MywgNTkzNDksIDU5MzU0LCA1OTM1OSwgNTkzNjYsIDU5MzczLCA1OTM3NywgNTkzODEsIAorICAgIDU5Mzg1LCA1OTM5MywgNTkzOTksIDU5NDA2LCA1OTQxMSwgNTk0MTYsIDU5NDIxLCA1OTQyNiwgNTk0MzEsIDU5NDM2LCAKKyAgICA1OTQ0MSwgNTk0NDYsIDU5NDUxLCA1OTQ1NiwgNTk0NjEsIDU5NDY2LCA1OTQ3MSwgNTk0NzYsIDU5NDgyLCA1OTQ4NywgCisgICAgNTk0OTEsIDU5NDk3LCA1OTUwOCwgNTk1MTgsIDU5NTMzLCA1OTU0MywgNTk1NDcsIDU5NTU3LCA1OTU2MywgNTk1NjksIAorICAgIDU5NTc1LCA1OTU4MCwgNTk1ODMsIDU5NTg4LCA1OTU5MiwgMCwgNTk1OTgsIDU5NjAyLCA1OTYwNSwgNTk2MDksIDU5NjEyLCAKKyAgICA1OTYxNiwgNTk2MTksIDU5NjIzLCA1OTYyNiwgNTk2MzAsIDU5NjMzLCA1OTYzNiwgNTk2NDAsIDU5NjQ0LCA1OTY0OCwgCisgICAgNTk2NTIsIDU5NjU2LCA1OTY2MCwgNTk2NjQsIDU5NjY4LCA1OTY3MiwgNTk2NzUsIDU5Njc5LCA1OTY4MywgNTk2ODcsIAorICAgIDU5NjkxLCA1OTY5NSwgNTk2OTksIDU5NzAzLCA1OTcwNywgNTk3MTEsIDU5NzE1LCA1OTcxOSwgNTk3MjMsIDU5NzI3LCAKKyAgICA1OTczMiwgNTk3MzYsIDU5NzQwLCA1OTc0NCwgNTk3NDgsIDU5NzUxLCA1OTc1NSwgNTk3NTgsIDU5NzYyLCA1OTc2NiwgCisgICAgNTk3NzAsIDU5Nzc0LCA1OTc3NywgNTk3ODEsIDU5Nzg0LCA1OTc4OCwgNTk3OTIsIDU5Nzk2LCA1OTgwMCwgNTk4MDQsIAorICAgIDU5ODA4LCA1OTgxMiwgNTk4MTYsIDU5ODIwLCA1OTgyNCwgNTk4MjgsIDU5ODMyLCA1OTgzNSwgNTk4MzksIDU5ODQzLCAKKyAgICA1OTg0NywgNTk4NTEsIDU5ODU1LCA1OTg1OCwgNTk4NjMsIDU5ODY3LCA1OTg3MiwgNTk4NzYsIDU5ODc5LCA1OTg4MywgCisgICAgNTk4ODcsIDU5ODkxLCA1OTg5NSwgNTk5MDAsIDU5OTA0LCA1OTkwOCwgNTk5MTIsIDU5OTE2LCA1OTkyMCwgNTk5MjQsIAorICAgIDU5OTI4LCAwLCAwLCA1OTkzMywgNTk5NDEsIDU5OTQ5LCA1OTk1NiwgNTk5NjMsIDU5OTY3LCA1OTk3MywgNTk5NzgsIAorICAgIDU5OTgzLCA1OTk4NywgNTk5OTAsIDU5OTk0LCA1OTk5NywgNjAwMDEsIDYwMDA0LCA2MDAwOCwgNjAwMTEsIDYwMDE1LCAKKyAgICA2MDAxOCwgNjAwMjEsIDYwMDI1LCA2MDAyOSwgNjAwMzMsIDYwMDM3LCA2MDA0MSwgNjAwNDUsIDYwMDQ5LCA2MDA1MywgCisgICAgNjAwNTcsIDYwMDYwLCA2MDA2NCwgNjAwNjgsIDYwMDcyLCA2MDA3NiwgNjAwODAsIDYwMDg0LCA2MDA4OCwgNjAwOTIsIAorICAgIDYwMDk2LCA2MDEwMCwgNjAxMDQsIDYwMTA4LCA2MDExMiwgNjAxMTcsIDYwMTIxLCA2MDEyNSwgNjAxMjksIDYwMTMzLCAKKyAgICA2MDEzNiwgNjAxNDAsIDYwMTQzLCA2MDE0NywgNjAxNTEsIDYwMTU1LCA2MDE1OSwgNjAxNjIsIDYwMTY2LCA2MDE2OSwgCisgICAgNjAxNzMsIDYwMTc3LCA2MDE4MSwgNjAxODUsIDYwMTg5LCA2MDE5MywgNjAxOTcsIDYwMjAxLCA2MDIwNSwgNjAyMDksIAorICAgIDYwMjEzLCA2MDIxNywgNjAyMjAsIDYwMjI0LCA2MDIyOCwgNjAyMzIsIDYwMjM2LCA2MDI0MCwgNjAyNDMsIDYwMjQ4LCAKKyAgICA2MDI1MiwgNjAyNTcsIDYwMjYxLCA2MDI2NCwgNjAyNjgsIDYwMjcyLCA2MDI3NiwgNjAyODAsIDYwMjg1LCA2MDI4OSwgCisgICAgNjAyOTMsIDYwMjk3LCA2MDMwMSwgNjAzMDUsIDYwMzA5LCA2MDMxMywgNjAzMTgsIDYwMzIyLCA2MDMyNiwgNjAzMzAsIAorICAgIDYwMzM0LCA2MDMzOSwgNjAzNDYsIDYwMzUwLCA2MDM1NiwgMCwgMCwgMCwgMCwgMCwgNjAzNjEsIDYwMzY2LCA2MDM3MSwgCisgICAgNjAzNzUsIDYwMzgwLCA2MDM4NSwgNjAzOTAsIDYwMzk1LCA2MDM5OSwgNjA0MDQsIDYwNDA5LCA2MDQxNCwgNjA0MTksIAorICAgIDYwNDI0LCA2MDQyOSwgNjA0MzQsIDYwNDM5LCA2MDQ0NCwgNjA0NDgsIDYwNDUzLCA2MDQ1OCwgNjA0NjMsIDYwNDY3LCAKKyAgICA2MDQ3MSwgNjA0NzUsIDYwNDgwLCA2MDQ4NSwgNjA0OTAsIDYwNDk1LCA2MDUwMCwgNjA1MDUsIDYwNTEwLCA2MDUxNSwgCisgICAgNjA1MjAsIDYwNTI1LCA2MDUyOSwgNjA1MzMsIDYwNTM4LCA2MDU0MywgNjA1NDgsIDYwNTUzLCAwLCAwLCAwLCA2MDU1OCwgCisgICAgNjA1NjIsIDYwNTY2LCA2MDU3MCwgNjA1NzQsIDYwNTc4LCA2MDU4MiwgNjA1ODYsIDYwNTkwLCA2MDU5NCwgNjA1OTgsIAorICAgIDYwNjAyLCA2MDYwNiwgNjA2MTAsIDYwNjE0LCA2MDYxOCwgNjA2MjIsIDYwNjI2LCA2MDYzMCwgNjA2MzQsIDYwNjM4LCAKKyAgICA2MDY0MiwgNjA2NDYsIDYwNjUwLCA2MDY1NCwgNjA2NTgsIDYwNjYyLCA2MDY2NiwgNjA2NzAsIDYwNjc0LCA2MDY3OCwgCisgICAgNjA2ODEsIDYwNjg1LCA2MDY4OCwgNjA2OTIsIDYwNjk2LCA2MDY5OSwgNjA3MDMsIDYwNzA3LCA2MDcxMCwgNjA3MTQsIAorICAgIDYwNzE4LCA2MDcyMiwgNjA3MjYsIDYwNzI5LCA2MDczMywgNjA3MzcsIDYwNzQxLCA2MDc0NSwgNjA3NDksIDYwNzUzLCAKKyAgICA2MDc1NiwgNjA3NTksIDYwNzYzLCA2MDc2NywgNjA3NzEsIDYwNzc1LCA2MDc3OSwgNjA3ODMsIDYwNzg3LCA2MDc5MSwgCisgICAgNjA3OTUsIDYwNzk5LCA2MDgwMywgNjA4MDcsIDYwODExLCA2MDgxNSwgNjA4MTksIDYwODIzLCA2MDgyNywgNjA4MzEsIAorICAgIDYwODM1LCA2MDgzOSwgNjA4NDMsIDYwODQ3LCA2MDg1MSwgNjA4NTUsIDYwODU5LCA2MDg2MywgNjA4NjcsIDYwODcxLCAKKyAgICA2MDg3NSwgNjA4NzksIDYwODgzLCA2MDg4NywgNjA4OTEsIDYwODk1LCA2MDg5OSwgNjA5MDMsIDYwOTA3LCA2MDkxMSwgCisgICAgNjA5MTUsIDYwOTE5LCA2MDkyMywgMCwgNjA5MjcsIDYwOTMzLCA2MDkzOSwgNjA5NDQsIDYwOTQ5LCA2MDk1NCwgNjA5NjAsIAorICAgIDYwOTY2LCA2MDk3MiwgNjA5NzgsIDYwOTg0LCA2MDk5MCwgNjA5OTYsIDYxMDAyLCA2MTAwOCwgNjEwMTQsIDYxMDIwLCAKKyAgICA2MTAyNSwgNjEwMzAsIDYxMDM1LCA2MTA0MCwgNjEwNDUsIDYxMDUwLCA2MTA1NSwgNjEwNjAsIDYxMDY1LCA2MTA3MCwgCisgICAgNjEwNzUsIDYxMDgwLCA2MTA4NSwgNjEwOTAsIDYxMDk1LCA2MTEwMCwgNjExMDUsIDYxMTEwLCA2MTExNSwgNjExMjAsIAorICAgIDYxMTI2LCA2MTEzMiwgNjExMzgsIDYxMTQ0LCA2MTE0OSwgNjExNTQsIDAsIDAsIDAsIDAsIDAsIDYxMTU5LCA2MTE2NCwgCisgICAgNjExNjksIDYxMTc0LCA2MTE3OSwgNjExODQsIDYxMTg5LCA2MTE5NCwgNjExOTksIDYxMjA0LCA2MTIwOSwgNjEyMTQsIAorICAgIDYxMjE5LCA2MTIyNCwgNjEyMjksIDYxMjM0LCA2MTIzOSwgNjEyNDQsIDYxMjQ5LCA2MTI1NCwgNjEyNTksIDYxMjY0LCAKKyAgICA2MTI2OSwgNjEyNzQsIDYxMjc5LCA2MTI4NCwgNjEyODksIDYxMjk0LCA2MTI5OSwgNjEzMDQsIDYxMzA5LCA2MTMxNCwgCisgICAgNjEzMTksIDYxMzI0LCA2MTMyOSwgNjEzMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMzM5LCAKKyAgICA2MTM0NCwgNjEzNDksIDYxMzU0LCA2MTM1OCwgNjEzNjMsIDYxMzY3LCA2MTM3MiwgNjEzNzcsIDYxMzgyLCA2MTM4NywgCisgICAgNjEzOTIsIDYxMzk2LCA2MTQwMSwgNjE0MDYsIDYxNDExLCA2MTQxNiwgNjE0MjAsIDYxNDI0LCA2MTQyOCwgNjE0MzIsIAorICAgIDYxNDM2LCA2MTQ0MCwgNjE0NDQsIDYxNDQ4LCA2MTQ1MiwgNjE0NTYsIDYxNDYwLCA2MTQ2NCwgNjE0NjgsIDYxNDcyLCAKKyAgICA2MTQ3NywgNjE0ODIsIDYxNDg3LCA2MTQ5MiwgNjE0OTcsIDYxNTAyLCA2MTUwNywgNjE1MTIsIDYxNTE3LCA2MTUyMiwgCisgICAgNjE1MjcsIDYxNTMyLCA2MTUzNywgNjE1NDIsIDYxNTQ3LCA2MTU1MywgMCwgNjE1NjAsIDYxNTYzLCA2MTU2NiwgNjE1NjksIAorICAgIDYxNTcyLCA2MTU3NSwgNjE1NzgsIDYxNTgxLCA2MTU4NCwgNjE1ODcsIDYxNTkxLCA2MTU5NSwgNjE1OTksIDYxNjAzLCAKKyAgICA2MTYwNywgNjE2MTEsIDYxNjE1LCA2MTYxOSwgNjE2MjMsIDYxNjI3LCA2MTYzMSwgNjE2MzUsIDYxNjM5LCA2MTY0MywgCisgICAgNjE2NDcsIDYxNjUxLCA2MTY1NSwgNjE2NTksIDYxNjYzLCA2MTY2NywgNjE2NzEsIDYxNjc1LCA2MTY3OSwgNjE2ODMsIAorICAgIDYxNjg3LCA2MTY5MSwgNjE2OTUsIDYxNjk5LCA2MTcwMywgNjE3MDcsIDYxNzExLCA2MTcyMCwgNjE3MjksIDYxNzM4LCAKKyAgICA2MTc0NywgNjE3NTYsIDYxNzY1LCA2MTc3NCwgNjE3ODMsIDYxNzg2LCA2MTc5MSwgNjE3OTYsIDYxODAxLCA2MTgwNiwgCisgICAgNjE4MTEsIDYxODE2LCA2MTgyMSwgNjE4MjYsIDYxODMxLCA2MTgzNSwgNjE4NDAsIDYxODQ1LCA2MTg1MCwgNjE4NTUsIAorICAgIDYxODYwLCA2MTg2NCwgNjE4NjgsIDYxODcyLCA2MTg3NiwgNjE4ODAsIDYxODg0LCA2MTg4OCwgNjE4OTIsIDYxODk2LCAKKyAgICA2MTkwMCwgNjE5MDQsIDYxOTA4LCA2MTkxMiwgNjE5MTYsIDYxOTIxLCA2MTkyNiwgNjE5MzEsIDYxOTM2LCA2MTk0MSwgCisgICAgNjE5NDYsIDYxOTUxLCA2MTk1NiwgNjE5NjEsIDYxOTY2LCA2MTk3MSwgNjE5NzYsIDYxOTgxLCA2MTk4NiwgNjE5OTIsIAorICAgIDYxOTk4LCA2MjAwMywgNjIwMDgsIDYyMDExLCA2MjAxNCwgNjIwMTcsIDYyMDIwLCA2MjAyMywgNjIwMjYsIDYyMDI5LCAKKyAgICA2MjAzMiwgNjIwMzUsIDYyMDM5LCA2MjA0MywgNjIwNDcsIDYyMDUxLCA2MjA1NSwgNjIwNTksIDYyMDYzLCA2MjA2NywgCisgICAgNjIwNzEsIDYyMDc1LCA2MjA3OSwgNjIwODMsIDYyMDg3LCA2MjA5MSwgNjIwOTUsIDYyMDk5LCA2MjEwMywgNjIxMDcsIAorICAgIDYyMTExLCA2MjExNSwgNjIxMTksIDYyMTIzLCA2MjEyNywgNjIxMzEsIDYyMTM1LCA2MjEzOSwgNjIxNDMsIDYyMTQ3LCAKKyAgICA2MjE1MSwgNjIxNTUsIDYyMTU5LCA2MjE2MywgNjIxNjcsIDYyMTcxLCA2MjE3NSwgNjIxNzksIDYyMTgzLCA2MjE4NywgCisgICAgNjIxOTEsIDYyMTk1LCA2MjIwMCwgNjIyMDUsIDYyMjEwLCA2MjIxNSwgNjIyMTksIDYyMjI0LCA2MjIyOSwgNjIyMzQsIAorICAgIDYyMjM5LCA2MjI0NCwgNjIyNDksIDYyMjU0LCA2MjI1OSwgNjIyNjQsIDYyMjY4LCA2MjI3NSwgNjIyODIsIDYyMjg5LCAKKyAgICA2MjI5NiwgNjIzMDMsIDYyMzEwLCA2MjMxNywgNjIzMjQsIDYyMzMxLCA2MjMzOCwgNjIzNDUsIDYyMzUyLCA2MjM1NSwgCisgICAgNjIzNTgsIDYyMzYxLCA2MjM2NiwgNjIzNjksIDYyMzcyLCA2MjM3NSwgNjIzNzgsIDYyMzgxLCA2MjM4NCwgNjIzODgsIAorICAgIDYyMzkyLCA2MjM5NiwgNjI0MDAsIDYyNDAzLCA2MjQwNywgNjI0MTEsIDYyNDE1LCA2MjQxOSwgNjI0MjMsIDYyNDI3LCAKKyAgICA2MjQzMSwgNjI0MzUsIDYyNDM4LCA2MjQ0MSwgNjI0NDUsIDYyNDQ5LCA2MjQ1MywgNjI0NTcsIDYyNDYwLCA2MjQ2NCwgCisgICAgNjI0NjgsIDYyNDcyLCA2MjQ3NiwgNjI0NzksIDYyNDgzLCA2MjQ4NywgNjI0OTEsIDYyNDk1LCA2MjQ5OCwgNjI1MDIsIAorICAgIDYyNTA2LCA2MjUwOSwgNjI1MTMsIDYyNTE3LCA2MjUyMSwgNjI1MjUsIDYyNTI5LCA2MjUzMywgNjI1MzcsIDAsIDYyNTQxLCAKKyAgICA2MjU0NCwgNjI1NDcsIDYyNTUwLCA2MjU1MywgNjI1NTYsIDYyNTU5LCA2MjU2MiwgNjI1NjUsIDYyNTY4LCA2MjU3MSwgCisgICAgNjI1NzQsIDYyNTc3LCA2MjU4MCwgNjI1ODMsIDYyNTg2LCA2MjU4OSwgNjI1OTIsIDYyNTk1LCA2MjU5OCwgNjI2MDEsIAorICAgIDYyNjA0LCA2MjYwNywgNjI2MTAsIDYyNjEzLCA2MjYxNiwgNjI2MTksIDYyNjIyLCA2MjYyNSwgNjI2MjgsIDYyNjMxLCAKKyAgICA2MjYzNCwgNjI2MzcsIDYyNjQwLCA2MjY0MywgNjI2NDYsIDYyNjQ5LCA2MjY1MiwgNjI2NTUsIDYyNjU4LCA2MjY2MSwgCisgICAgNjI2NjQsIDYyNjY3LCA2MjY3MCwgNjI2NzMsIDYyNjc2LCA2MjY3OSwgNjI2ODIsIDYyNjg1LCA2MjY4OCwgNjI2OTEsIAorICAgIDYyNjk0LCA2MjY5NywgNjI3MDAsIDYyNzAzLCA2MjcwNiwgNjI3MDksIDYyNzEyLCA2MjcxNSwgNjI3MTgsIDYyNzIxLCAKKyAgICA2MjcyNCwgNjI3MjcsIDYyNzMwLCA2MjczMywgNjI3MzYsIDYyNzM5LCA2Mjc0MiwgNjI3NDUsIDYyNzQ4LCA2Mjc1MSwgCisgICAgNjI3NTQsIDYyNzU3LCA2Mjc2MCwgNjI3NjMsIDYyNzY2LCA2Mjc2OSwgNjI3NzIsIDYyNzc1LCA2Mjc3OCwgNjI3ODEsIAorICAgIDYyNzg0LCA2Mjc4NywgNjI3OTAsIDYyNzkzLCA2Mjc5NiwgNjI3OTksIDYyODAyLCA2MjgwNSwgNjI4MTQsIDYyODIyLCAKKyAgICA2MjgzMCwgNjI4MzgsIDYyODQ2LCA2Mjg1NCwgNjI4NjIsIDYyODcwLCA2Mjg3OCwgNjI4ODYsIDYyODk1LCA2MjkwNCwgCisgICAgNjI5MTMsIDYyOTIyLCA2MjkzMSwgNjI5NDAsIDYyOTQ5LCA2Mjk1OCwgNjI5NjcsIDYyOTc2LCA2Mjk4NSwgNjI5OTQsIAorICAgIDYzMDAzLCA2MzAxMiwgNjMwMjEsIDYzMDI0LCA2MzAyNywgNjMwMzAsIDYzMDMyLCA2MzAzNSwgNjMwMzgsIDYzMDQxLCAKKyAgICA2MzA0NiwgNjMwNTEsIDYzMDU0LCA2MzA2MSwgNjMwNjgsIDYzMDc1LCA2MzA4MiwgNjMwODUsIDYzMDkwLCA2MzA5MiwgCisgICAgNjMwOTYsIDYzMDk4LCA2MzEwMCwgNjMxMDMsIDYzMTA2LCA2MzEwOSwgNjMxMTIsIDYzMTE1LCA2MzExOCwgNjMxMjEsIAorICAgIDYzMTI2LCA2MzEzMSwgNjMxMzQsIDYzMTM3LCA2MzE0MCwgNjMxNDMsIDYzMTQ2LCA2MzE0OSwgNjMxNTIsIDYzMTU2LCAKKyAgICA2MzE1OSwgNjMxNjIsIDYzMTY1LCA2MzE2OCwgNjMxNzEsIDYzMTc1LCA2MzE3OCwgNjMxODEsIDYzMTg0LCA2MzE4OSwgCisgICAgNjMxOTQsIDYzMTk5LCA2MzIwNCwgNjMyMDksIDYzMjE0LCA2MzIxOSwgNjMyMjQsIDYzMjMwLCA2MzIzOCwgNjMyNDAsIAorICAgIDYzMjQzLCA2MzI0NiwgNjMyNDksIDYzMjUyLCA2MzI1OCwgNjMyNjYsIDYzMjY5LCA2MzI3MiwgNjMyNzcsIDYzMjgwLCAKKyAgICA2MzI4MywgNjMyODYsIDYzMjkxLCA2MzI5NCwgNjMyOTcsIDYzMzAyLCA2MzMwNSwgNjMzMDgsIDYzMzEzLCA2MzMxNiwgCisgICAgNjMzMTksIDYzMzI0LCA2MzMyOSwgNjMzMzQsIDYzMzM3LCA2MzM0MCwgNjMzNDMsIDYzMzQ2LCA2MzM1MiwgNjMzNTUsIAorICAgIDYzMzU4LCA2MzM2MSwgNjMzNjMsIDYzMzY2LCA2MzM2OSwgNjMzNzIsIDYzMzc3LCA2MzM4MCwgNjMzODMsIDYzMzg2LCAKKyAgICA2MzM4OSwgNjMzOTIsIDYzMzk3LCA2MzQwMCwgNjM0MDMsIDYzNDA2LCA2MzQwOSwgNjM0MTIsIDYzNDE1LCA2MzQxOCwgCisgICAgNjM0MjEsIDYzNDI0LCA2MzQyOSwgNjM0MzMsIDYzNDQxLCA2MzQ0OSwgNjM0NTcsIDYzNDY1LCA2MzQ3MywgNjM0ODEsIAorICAgIDYzNDg5LCA2MzQ5NywgNjM1MDUsIDYzNTE0LCA2MzUyMywgNjM1MzIsIDYzNTQxLCA2MzU1MCwgNjM1NTksIDYzNTY4LCAKKyAgICA2MzU3NywgNjM1ODYsIDYzNTk1LCA2MzYwNCwgNjM2MTMsIDYzNjIyLCA2MzYzMSwgNjM2NDAsIDYzNjQ5LCA2MzY1OCwgCisgICAgNjM2NjcsIDYzNjc2LCA2MzY4NSwgNjM2OTQsIDYzNzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzY3OCwgNjM2ODcsIDYzNjk2LCA2MzcwNywgCi0gICAgNjM3MTQsIDYzNzE5LCA2MzcyNCwgNjM3MzEsIDYzNzM4LCA2Mzc0NCwgNjM3NDksIDYzNzU0LCA2Mzc1OSwgNjM3NjQsIAotICAgIDYzNzcxLCA2Mzc3NiwgNjM3ODEsIDYzNzg2LCA2Mzc5NywgNjM4MDIsIDYzODA3LCA2MzgxNCwgNjM4MTksIDYzODI2LCAKLSAgICA2MzgzMSwgNjM4MzYsIDYzODQzLCA2Mzg1MCwgNjM4NTcsIDYzODY2LCA2Mzg3NSwgNjM4ODAsIDYzODg1LCA2Mzg5MCwgCi0gICAgNjM4OTcsIDYzOTAyLCA2MzkxMiwgNjM5MTksIDYzOTI0LCA2MzkyOSwgNjM5MzQsIDYzOTM5LCA2Mzk0NCwgNjM5NDksIAotICAgIDYzOTU4LCA2Mzk2NSwgNjM5NzIsIDYzOTc3LCA2Mzk4NCwgNjM5ODksIDYzOTk2LCA2NDAwNSwgNjQwMTYsIDY0MDIxLCAKLSAgICA2NDAzMCwgNjQwMzUsIDY0MDQyLCA2NDA1MSwgNjQwNjAsIDY0MDY1LCA2NDA3MCwgNjQwNzcsIDY0MDgzLCA2NDA5MCwgCi0gICAgNjQwOTcsIDY0MTAxLCA2NDEwNSwgNjQxMDgsIDY0MTEyLCA2NDExNiwgNjQxMjAsIDY0MTI0LCA2NDEyOCwgNjQxMzIsIAotICAgIDY0MTM2LCA2NDEzOSwgNjQxNDMsIDY0MTQ3LCA2NDE1MSwgNjQxNTUsIDY0MTU5LCA2NDE2MywgNjQxNjYsIDY0MTcwLCAKLSAgICA2NDE3NCwgNjQxNzcsIDY0MTgxLCA2NDE4NSwgNjQxODksIDY0MTkzLCA2NDE5NywgNjQyMDEsIDY0MjA1LCA2NDIwOSwgCi0gICAgNjQyMTMsIDY0MjE3LCA2NDIyMSwgNjQyMjUsIDY0MjI5LCA2NDIzMywgNjQyMzcsIDY0MjQxLCA2NDI0NSwgNjQyNDksIAotICAgIDY0MjUzLCA2NDI1NywgNjQyNjEsIDY0MjY1LCA2NDI2OSwgNjQyNzMsIDY0Mjc3LCA2NDI4MSwgNjQyODUsIDY0Mjg5LCAKLSAgICA2NDI5MywgNjQyOTcsIDY0MzAxLCA2NDMwNSwgNjQzMDksIDY0MzEzLCA2NDMxNywgNjQzMjEsIDY0MzI1LCA2NDMyOSwgCi0gICAgNjQzMzMsIDY0MzM3LCA2NDM0MSwgNjQzNDUsIDY0MzQ5LCA2NDM1MywgNjQzNTYsIDY0MzYwLCA2NDM2NCwgNjQzNjgsIAotICAgIDY0MzcyLCA2NDM3NiwgNjQzODAsIDY0Mzg0LCA2NDM4OCwgNjQzOTIsIDY0Mzk2LCA2NDQwMCwgNjQ0MDQsIDY0NDA4LCAKLSAgICA2NDQxMiwgNjQ0MTYsIDY0NDIwLCA2NDQyNCwgNjQ0MjgsIDY0NDMyLCA2NDQzNiwgNjQ0NDAsIDY0NDQ0LCA2NDQ0OCwgCi0gICAgNjQ0NTIsIDY0NDU2LCA2NDQ2MCwgNjQ0NjQsIDY0NDY4LCA2NDQ3MiwgNjQ0NzYsIDY0NDgwLCA2NDQ4NCwgNjQ0ODgsIAotICAgIDY0NDkyLCA2NDQ5NiwgNjQ1MDAsIDY0NTA0LCA2NDUwOCwgNjQ1MTIsIDY0NTE2LCA2NDUyMCwgNjQ1MjQsIDY0NTI4LCAKLSAgICA2NDUzMiwgNjQ1MzYsIDY0NTQwLCA2NDU0NCwgNjQ1NDgsIDY0NTUyLCA2NDU1NiwgNjQ1NjAsIDY0NTY0LCA2NDU2OCwgCi0gICAgNjQ1NzIsIDY0NTc2LCA2NDU4MCwgNjQ1ODQsIDY0NTg4LCA2NDU5MiwgNjQ1OTYsIDY0NjAwLCA2NDYwNCwgNjQ2MDgsIAotICAgIDY0NjEyLCA2NDYxNiwgNjQ2MjAsIDY0NjI0LCA2NDYyOCwgNjQ2MzIsIDY0NjM2LCA2NDY0MCwgNjQ2NDQsIDY0NjQ4LCAKLSAgICA2NDY1MiwgNjQ2NTYsIDY0NjYwLCA2NDY2NCwgNjQ2NjgsIDY0NjcyLCA2NDY3NiwgNjQ2ODAsIDY0Njg0LCA2NDY4OCwgCi0gICAgNjQ2OTIsIDY0Njk2LCA2NDcwMCwgNjQ3MDQsIDY0NzA4LCA2NDcxMiwgNjQ3MTYsIDY0NzIwLCA2NDcyNCwgNjQ3MjgsIAotICAgIDY0NzMyLCA2NDczNiwgNjQ3NDAsIDY0NzQ0LCA2NDc0OCwgNjQ3NTIsIDY0NzU2LCA2NDc2MCwgNjQ3NjQsIDY0NzY4LCAKLSAgICA2NDc3MiwgNjQ3NzYsIDY0NzgwLCA2NDc4NCwgNjQ3ODgsIDY0NzkyLCA2NDc5NiwgNjQ4MDAsIDY0ODA0LCA2NDgwOCwgCi0gICAgNjQ4MTIsIDY0ODE2LCA2NDgyMCwgNjQ4MjQsIDY0ODI3LCA2NDgzMSwgNjQ4MzUsIDY0ODM5LCA2NDg0MywgNjQ4NDcsIAotICAgIDY0ODUxLCA2NDg1NSwgNjQ4NTksIDY0ODYzLCA2NDg2NywgNjQ4NzEsIDY0ODc1LCA2NDg3OSwgNjQ4ODMsIDY0ODg3LCAKLSAgICA2NDg5MSwgNjQ4OTUsIDY0ODk5LCA2NDkwMywgNjQ5MDcsIDY0OTExLCA2NDkxNSwgNjQ5MTksIDY0OTIzLCA2NDkyNywgCi0gICAgNjQ5MzEsIDY0OTM1LCA2NDkzOSwgNjQ5NDMsIDY0OTQ3LCA2NDk1MSwgNjQ5NTUsIDY0OTU5LCA2NDk2MywgNjQ5NjcsIAotICAgIDY0OTcxLCA2NDk3NSwgNjQ5NzksIDY0OTgzLCA2NDk4NywgNjQ5OTEsIDY0OTk1LCA2NDk5OSwgNjUwMDMsIDY1MDA3LCAKLSAgICA2NTAxMSwgNjUwMTUsIDY1MDE5LCA2NTAyMywgNjUwMjcsIDY1MDMxLCA2NTAzNSwgNjUwMzksIDY1MDQzLCA2NTA0NywgCi0gICAgNjUwNTEsIDY1MDU1LCA2NTA1OSwgNjUwNjMsIDY1MDY3LCA2NTA3MSwgNjUwNzUsIDY1MDc5LCA2NTA4MywgNjUwODcsIAotICAgIDY1MDkxLCA2NTA5NSwgNjUwOTksIDY1MTAzLCA2NTEwNywgNjUxMTEsIDY1MTE1LCA2NTExOSwgNjUxMjMsIDY1MTI3LCAKLSAgICA2NTEzMSwgNjUxMzUsIDY1MTM5LCA2NTE0MywgNjUxNDcsIDY1MTUxLCA2NTE1NSwgNjUxNTksIDY1MTYzLCA2NTE2NywgCi0gICAgNjUxNzEsIDY1MTc1LCA2NTE3OSwgNjUxODMsIDY1MTg3LCA2NTE5MSwgNjUxOTUsIDY1MTk5LCA2NTIwMywgNjUyMDcsIAotICAgIDY1MjExLCA2NTIxNSwgNjUyMTksIDY1MjIzLCA2NTIyNywgNjUyMzEsIDY1MjM1LCA2NTIzOSwgNjUyNDMsIDY1MjQ3LCAKLSAgICA2NTI1MSwgNjUyNTUsIDY1MjU5LCA2NTI2MywgNjUyNjcsIDY1MjcxLCA2NTI3NSwgNjUyNzksIDY1MjgzLCA2NTI4NywgCi0gICAgNjUyOTAsIDY1Mjk0LCA2NTI5OCwgNjUzMDIsIDY1MzA2LCA2NTMxMCwgNjUzMTQsIDY1MzE4LCA2NTMyMiwgNjUzMjYsIAotICAgIDY1MzMwLCA2NTMzNCwgNjUzMzgsIDY1MzQyLCA2NTM0NiwgNjUzNTAsIDY1MzU0LCA2NTM1OCwgNjUzNjIsIDY1MzY2LCAKLSAgICA2NTM3MCwgNjUzNzQsIDY1Mzc4LCA2NTM4MiwgNjUzODYsIDY1MzkwLCA2NTM5NCwgNjUzOTgsIDY1NDAyLCA2NTQwNiwgCi0gICAgNjU0MTAsIDY1NDE0LCA2NTQxOCwgNjU0MjIsIDY1NDI2LCA2NTQzMCwgNjU0MzQsIDY1NDM4LCA2NTQ0MiwgNjU0NDYsIAotICAgIDY1NDUwLCA2NTQ1NCwgNjU0NTgsIDY1NDYyLCA2NTQ2NiwgNjU0NzAsIDY1NDc0LCA2NTQ3OCwgNjU0ODIsIDY1NDg2LCAKLSAgICA2NTQ5MCwgNjU0OTQsIDY1NDk4LCA2NTUwMiwgNjU1MDYsIDY1NTEwLCA2NTUxNCwgNjU1MTgsIDY1NTIyLCA2NTUyNiwgCi0gICAgNjU1MzAsIDY1NTM0LCA2NTUzOCwgNjU1NDIsIDY1NTQ2LCA2NTU1MCwgNjU1NTQsIDY1NTU4LCA2NTU2MiwgNjU1NjYsIAotICAgIDY1NTcwLCA2NTU3NCwgNjU1NzgsIDY1NTgyLCA2NTU4NiwgNjU1OTAsIDY1NTk0LCA2NTU5OCwgNjU2MDIsIDY1NjA2LCAKLSAgICA2NTYxMCwgNjU2MTQsIDY1NjE4LCA2NTYyMiwgNjU2MjYsIDY1NjMwLCA2NTYzNCwgNjU2MzgsIDY1NjQyLCA2NTY0NiwgCi0gICAgNjU2NDksIDY1NjUzLCA2NTY1NywgNjU2NjEsIDY1NjY1LCA2NTY2OSwgNjU2NzMsIDY1Njc3LCA2NTY4MSwgNjU2ODUsIAotICAgIDY1Njg5LCA2NTY5MywgNjU2OTcsIDY1NzAxLCA2NTcwNSwgNjU3MDksIDY1NzEzLCA2NTcxNywgNjU3MjEsIDY1NzI1LCAKLSAgICA2NTcyOSwgNjU3MzMsIDY1NzM3LCA2NTc0MSwgNjU3NDUsIDY1NzQ5LCA2NTc1MywgNjU3NTcsIDY1NzYxLCA2NTc2NSwgCi0gICAgNjU3NjksIDY1NzczLCA2NTc3NywgNjU3ODEsIDY1Nzg1LCA2NTc4OSwgNjU3OTMsIDY1Nzk3LCA2NTgwMSwgNjU4MDUsIAotICAgIDY1ODA5LCA2NTgxMywgNjU4MTcsIDY1ODIxLCA2NTgyNSwgNjU4MjksIDY1ODMzLCA2NTgzNywgNjU4NDEsIDY1ODQ1LCAKLSAgICA2NTg0OSwgNjU4NTMsIDY1ODU3LCA2NTg2MSwgNjU4NjUsIDY1ODY5LCA2NTg3MywgNjU4NzcsIDY1ODgxLCA2NTg4NSwgCi0gICAgNjU4ODksIDY1ODkzLCA2NTg5NywgNjU5MDEsIDY1OTA1LCA2NTkwOSwgNjU5MTMsIDY1OTE3LCA2NTkyMSwgNjU5MjUsIAotICAgIDY1OTI5LCA2NTkzMywgNjU5MzcsIDY1OTQxLCA2NTk0NSwgNjU5NDksIDY1OTUzLCA2NTk1NywgNjU5NjEsIDY1OTY1LCAKLSAgICA2NTk2OSwgNjU5NzMsIDY1OTc3LCA2NTk4MSwgNjU5ODUsIDY1OTg5LCA2NTk5MywgNjU5OTcsIDY2MDAxLCA2NjAwNSwgCi0gICAgNjYwMDksIDY2MDEzLCA2NjAxNywgNjYwMjEsIDY2MDI1LCA2NjAyOSwgNjYwMzMsIDY2MDM3LCA2NjA0MSwgNjYwNDUsIAotICAgIDY2MDQ5LCA2NjA1MywgNjYwNTcsIDY2MDYxLCA2NjA2NSwgNjYwNjksIDY2MDczLCA2NjA3NywgNjYwODEsIDY2MDg1LCAKLSAgICA2NjA4OSwgNjYwOTMsIDY2MDk3LCA2NjEwMSwgNjYxMDUsIDY2MTA5LCA2NjExMywgNjYxMTcsIDY2MTIxLCA2NjEyNSwgCi0gICAgNjYxMjksIDY2MTMzLCA2NjEzNywgNjYxNDEsIDY2MTQ0LCA2NjE0OCwgNjYxNTIsIDY2MTU2LCA2NjE2MCwgNjYxNjQsIAotICAgIDY2MTY4LCA2NjE3MiwgNjYxNzYsIDY2MTgwLCA2NjE4NCwgNjYxODgsIDY2MTkyLCA2NjE5NiwgNjYyMDAsIDY2MjA0LCAKLSAgICA2NjIwOCwgNjYyMTIsIDY2MjE2LCA2NjIyMCwgNjYyMjQsIDY2MjI4LCA2NjIzMiwgNjYyMzYsIDY2MjQwLCA2NjI0NCwgCi0gICAgNjYyNDgsIDY2MjUyLCA2NjI1NiwgNjYyNjAsIDY2MjY0LCA2NjI2OCwgNjYyNzIsIDY2Mjc2LCA2NjI4MCwgNjYyODQsIAotICAgIDY2Mjg4LCA2NjI5MiwgNjYyOTYsIDY2MzAwLCA2NjMwNCwgNjYzMDgsIDY2MzEyLCA2NjMxNiwgNjYzMjAsIDY2MzI0LCAKLSAgICA2NjMyOCwgNjYzMzIsIDY2MzM2LCA2NjM0MCwgNjYzNDQsIDY2MzQ4LCA2NjM1MiwgNjYzNTYsIDY2MzYwLCA2NjM2NCwgCi0gICAgNjYzNjgsIDY2MzcyLCA2NjM3NiwgNjYzODAsIDY2Mzg0LCA2NjM4OCwgNjYzOTIsIDY2Mzk2LCA2NjQwMCwgNjY0MDQsIAotICAgIDY2NDA4LCA2NjQxMiwgNjY0MTYsIDY2NDIwLCA2NjQyNCwgNjY0MjgsIDY2NDMyLCA2NjQzNiwgNjY0NDAsIDY2NDQ0LCAKLSAgICA2NjQ0OCwgNjY0NTIsIDY2NDU2LCA2NjQ2MCwgNjY0NjQsIDY2NDY4LCA2NjQ3MiwgNjY0NzYsIDY2NDgwLCA2NjQ4NCwgCi0gICAgNjY0ODgsIDY2NDkyLCA2NjQ5NiwgNjY1MDAsIDY2NTA0LCA2NjUwOCwgNjY1MTIsIDY2NTE2LCA2NjUyMCwgNjY1MjQsIAotICAgIDY2NTI4LCA2NjUzMiwgNjY1MzYsIDY2NTQwLCA2NjU0NCwgNjY1NDgsIDY2NTUyLCA2NjU1NiwgNjY1NjAsIDY2NTY0LCAKLSAgICA2NjU2OCwgNjY1NzIsIDY2NTc2LCA2NjU4MCwgNjY1ODQsIDY2NTg4LCA2NjU5MiwgNjY1OTYsIDY2NTk5LCA2NjYwMywgCi0gICAgNjY2MDcsIDY2NjExLCA2NjYxNSwgNjY2MTksIDY2NjIzLCA2NjYyNywgNjY2MzEsIDY2NjM1LCA2NjYzOSwgNjY2NDMsIAotICAgIDY2NjQ3LCA2NjY1MSwgNjY2NTUsIDY2NjU5LCA2NjY2MywgNjY2NjcsIDY2NjcxLCA2NjY3NSwgNjY2NzksIDY2NjgzLCAKLSAgICA2NjY4NywgNjY2OTEsIDY2Njk1LCA2NjY5OSwgNjY3MDMsIDY2NzA3LCA2NjcxMSwgNjY3MTUsIDY2NzE5LCA2NjcyMywgCi0gICAgNjY3MjcsIDY2NzMxLCA2NjczNSwgNjY3MzksIDY2NzQzLCA2Njc0NywgNjY3NTEsIDY2NzU1LCA2Njc1OSwgNjY3NjMsIAotICAgIDY2NzY3LCA2Njc3MSwgNjY3NzUsIDY2Nzc5LCA2Njc4MywgNjY3ODcsIDY2NzkxLCA2Njc5NSwgNjY3OTksIDY2ODAzLCAKLSAgICA2NjgwNywgNjY4MTEsIDY2ODE1LCA2NjgxOSwgNjY4MjMsIDY2ODI3LCA2NjgzMSwgNjY4MzUsIDY2ODM5LCA2Njg0MywgCi0gICAgNjY4NDcsIDY2ODUxLCA2Njg1NSwgNjY4NTksIDY2ODYzLCA2Njg2NywgNjY4NzEsIDY2ODc1LCA2Njg3OSwgNjY4ODMsIAotICAgIDY2ODg3LCA2Njg5MSwgNjY4OTUsIDY2ODk5LCA2NjkwMywgNjY5MDcsIDY2OTExLCA2NjkxNSwgNjY5MTksIDY2OTIzLCAKLSAgICA2NjkyNywgNjY5MzEsIDY2OTM1LCA2NjkzOSwgNjY5NDMsIDY2OTQ3LCA2Njk1MSwgNjY5NTUsIDY2OTU5LCA2Njk2MywgCi0gICAgNjY5NjcsIDY2OTcxLCA2Njk3NSwgNjY5NzksIDY2OTgzLCA2Njk4NywgNjY5OTEsIDY2OTk1LCA2Njk5OSwgNjcwMDMsIAotICAgIDY3MDA3LCA2NzAxMSwgNjcwMTUsIDY3MDE5LCA2NzAyMywgNjcwMjcsIDY3MDMxLCA2NzAzNSwgNjcwMzksIDY3MDQzLCAKLSAgICA2NzA0NywgNjcwNTEsIDY3MDU1LCA2NzA1OSwgNjcwNjMsIDY3MDY3LCA2NzA3MSwgNjcwNzUsIDY3MDc5LCA2NzA4MywgCi0gICAgNjcwODcsIDY3MDkxLCA2NzA5NSwgNjcwOTksIDY3MTAzLCA2NzEwNywgNjcxMTEsIDY3MTE1LCA2NzExOSwgNjcxMjMsIAotICAgIDY3MTI3LCA2NzEzMSwgNjcxMzUsIDY3MTM5LCA2NzE0MywgNjcxNDcsIDY3MTUxLCA2NzE1NSwgNjcxNTksIDY3MTYzLCAKLSAgICA2NzE2NywgNjcxNzEsIDY3MTc1LCA2NzE3OSwgNjcxODMsIDY3MTg3LCA2NzE5MSwgNjcxOTUsIDY3MTk5LCA2NzIwMiwgCi0gICAgNjcyMDYsIDY3MjEwLCA2NzIxNCwgNjcyMTgsIDY3MjIyLCA2NzIyNiwgNjcyMzAsIDY3MjMzLCA2NzIzNywgNjcyNDEsIAotICAgIDY3MjQ1LCA2NzI0OSwgNjcyNTMsIDY3MjU3LCA2NzI2MSwgNjcyNjUsIDY3MjY5LCA2NzI3MywgNjcyNzcsIDY3MjgxLCAKLSAgICA2NzI4NSwgNjcyODksIDY3MjkzLCA2NzI5NywgNjczMDEsIDY3MzA1LCA2NzMwOSwgNjczMTMsIDY3MzE3LCA2NzMyMSwgCi0gICAgNjczMjUsIDY3MzI5LCA2NzMzMywgNjczMzcsIDY3MzQxLCA2NzM0NSwgNjczNDksIDY3MzUzLCA2NzM1NywgNjczNjEsIAotICAgIDY3MzY1LCA2NzM2OSwgNjczNzMsIDY3Mzc3LCA2NzM4MSwgNjczODUsIDY3Mzg5LCA2NzM5MywgNjczOTcsIDY3NDAxLCAKLSAgICA2NzQwNSwgNjc0MDksIDY3NDEzLCA2NzQxNywgNjc0MjEsIDY3NDI1LCA2NzQyOSwgNjc0MzMsIDY3NDM3LCA2NzQ0MSwgCi0gICAgNjc0NDUsIDY3NDQ5LCA2NzQ1MywgNjc0NTcsIDY3NDYxLCA2NzQ2NSwgNjc0NjksIDY3NDczLCA2NzQ3NywgNjc0ODEsIAotICAgIDY3NDg1LCA2NzQ4OSwgNjc0OTMsIDY3NDk3LCA2NzUwMSwgNjc1MDUsIDY3NTA5LCA2NzUxMywgNjc1MTcsIDY3NTIxLCAKLSAgICA2NzUyNSwgNjc1MjksIDY3NTMzLCA2NzUzNywgNjc1NDEsIDY3NTQ1LCA2NzU0OSwgNjc1NTMsIDY3NTU3LCA2NzU2MSwgCi0gICAgNjc1NjUsIDY3NTY5LCA2NzU3MywgNjc1NzcsIDY3NTgxLCA2NzU4NSwgNjc1ODksIDY3NTkzLCA2NzU5NywgNjc2MDEsIAotICAgIDY3NjA1LCA2NzYwOSwgNjc2MTMsIDY3NjE3LCA2NzYyMSwgNjc2MjUsIDY3NjI5LCA2NzYzMywgNjc2MzcsIDY3NjQxLCAKLSAgICA2NzY0NSwgNjc2NDksIDY3NjUzLCA2NzY1NywgNjc2NjEsIDY3NjY1LCA2NzY2OSwgNjc2NzMsIDY3Njc3LCA2NzY4MSwgCi0gICAgNjc2ODUsIDY3Njg5LCA2NzY5MywgNjc2OTcsIDY3NzAxLCA2NzcwNSwgNjc3MDksIDY3NzEzLCA2NzcxNywgNjc3MjEsIAotICAgIDY3NzI1LCA2NzcyOSwgNjc3MzMsIDY3NzM3LCA2Nzc0MSwgNjc3NDUsIDY3NzQ5LCA2Nzc1MywgNjc3NTcsIDY3NzYxLCAKLSAgICA2Nzc2NSwgNjc3NjksIDY3NzczLCA2Nzc3NywgNjc3ODEsIDY3Nzg1LCA2Nzc4OSwgNjc3OTMsIDY3Nzk3LCA2NzgwMSwgCi0gICAgNjc4MDUsIDY3ODA5LCA2NzgxMywgNjc4MTcsIDY3ODIxLCA2NzgyNSwgNjc4MjksIDY3ODMzLCA2NzgzNywgNjc4NDEsIAotICAgIDY3ODQ1LCA2Nzg0OSwgNjc4NTMsIDY3ODU3LCA2Nzg2MSwgNjc4NjUsIDY3ODY5LCA2Nzg3MywgNjc4NzcsIDY3ODgxLCAKLSAgICA2Nzg4NSwgNjc4ODksIDY3ODkzLCA2Nzg5NywgNjc5MDEsIDY3OTA1LCA2NzkwOSwgNjc5MTMsIDY3OTE3LCA2NzkyMSwgCi0gICAgNjc5MjUsIDY3OTI5LCA2NzkzMywgNjc5MzcsIDY3OTQxLCA2Nzk0NSwgNjc5NDksIDY3OTUzLCA2Nzk1NywgNjc5NjAsIAotICAgIDY3OTY0LCA2Nzk2OCwgNjc5NzIsIDY3OTc2LCA2Nzk4MCwgNjc5ODQsIDY3OTg4LCA2Nzk5MiwgNjc5OTYsIDY4MDAwLCAKLSAgICA2ODAwNCwgNjgwMDgsIDY4MDEyLCA2ODAxNiwgNjgwMjAsIDY4MDI0LCA2ODAyOCwgNjgwMzIsIDY4MDM2LCA2ODA0MCwgCi0gICAgNjgwNDQsIDY4MDQ4LCA2ODA1MiwgNjgwNTYsIDY4MDYwLCA2ODA2NCwgNjgwNjgsIDY4MDcyLCA2ODA3NiwgNjgwODAsIAotICAgIDY4MDg0LCA2ODA4OCwgNjgwOTIsIDY4MDk2LCA2ODEwMCwgNjgxMDQsIDY4MTA4LCA2ODExMiwgNjgxMTYsIDY4MTIwLCAKLSAgICA2ODEyNCwgNjgxMjgsIDY4MTMyLCA2ODEzNiwgNjgxNDAsIDY4MTQ0LCA2ODE0OCwgNjgxNTIsIDY4MTU2LCA2ODE2MCwgCi0gICAgNjgxNjQsIDY4MTY4LCA2ODE3MiwgNjgxNzYsIDY4MTgwLCA2ODE4NCwgNjgxODgsIDY4MTkyLCA2ODE5NiwgNjgyMDAsIAotICAgIDY4MjA0LCA2ODIwOCwgNjgyMTIsIDY4MjE2LCA2ODIyMCwgNjgyMjQsIDY4MjI4LCA2ODIzMiwgNjgyMzYsIDY4MjQwLCAKLSAgICA2ODI0NCwgNjgyNDgsIDY4MjUyLCA2ODI1NiwgNjgyNjAsIDY4MjY0LCA2ODI2OCwgNjgyNzIsIDY4Mjc2LCA2ODI4MCwgCi0gICAgNjgyODQsIDY4Mjg4LCA2ODI5MiwgNjgyOTYsIDY4MzAwLCA2ODMwNCwgNjgzMDgsIDY4MzEyLCA2ODMxNiwgNjgzMjAsIAotICAgIDY4MzI0LCA2ODMyOCwgNjgzMzIsIDY4MzM2LCA2ODM0MCwgNjgzNDQsIDY4MzQ4LCA2ODM1MiwgNjgzNTYsIDY4MzYwLCAKLSAgICA2ODM2NCwgNjgzNjgsIDY4MzcyLCA2ODM3NiwgNjgzODAsIDY4Mzg0LCA2ODM4OCwgNjgzOTIsIDY4Mzk2LCA2ODQwMCwgCi0gICAgNjg0MDQsIDY4NDA4LCA2ODQxMiwgNjg0MTYsIDY4NDIwLCA2ODQyNCwgNjg0MjgsIDY4NDMyLCA2ODQzNiwgNjg0NDAsIAotICAgIDY4NDQ0LCA2ODQ0OCwgNjg0NTIsIDY4NDU2LCA2ODQ2MCwgNjg0NjQsIDY4NDY4LCA2ODQ3MiwgNjg0NzYsIDY4NDgwLCAKLSAgICA2ODQ4NCwgNjg0ODgsIDY4NDkyLCA2ODQ5NiwgNjg1MDAsIDY4NTA0LCA2ODUwOCwgNjg1MTIsIDY4NTE2LCA2ODUyMCwgCi0gICAgNjg1MjQsIDY4NTI4LCA2ODUzMiwgNjg1MzYsIDY4NTQwLCA2ODU0NCwgNjg1NDgsIDY4NTUyLCA2ODU1NiwgNjg1NjAsIAotICAgIDY4NTY0LCA2ODU2OCwgNjg1NzIsIDY4NTc2LCA2ODU4MCwgNjg1ODQsIDY4NTg4LCA2ODU5MiwgNjg1OTYsIDY4NjAwLCAKLSAgICA2ODYwNCwgNjg2MDgsIDY4NjEyLCA2ODYxNiwgNjg2MjAsIDY4NjI0LCA2ODYyOCwgNjg2MzIsIDY4NjM2LCA2ODY0MCwgCi0gICAgNjg2NDQsIDY4NjQ4LCA2ODY1MiwgNjg2NTYsIDY4NjYwLCA2ODY2NCwgNjg2NjgsIDY4NjcyLCA2ODY3NiwgNjg2ODAsIAotICAgIDY4Njg0LCA2ODY4OCwgNjg2OTIsIDY4Njk2LCA2ODcwMCwgNjg3MDQsIDY4NzA4LCA2ODcxMiwgNjg3MTYsIDY4NzIwLCAKLSAgICA2ODcyNCwgNjg3MjgsIDY4NzMyLCA2ODczNiwgNjg3NDAsIDAsIDAsIDAsIDY4NzQ0LCA2ODc0OCwgNjg3NTIsIDY4NzU2LCAKLSAgICA2ODc2MCwgNjg3NjQsIDY4NzY4LCA2ODc3MiwgNjg3NzYsIDY4NzgwLCA2ODc4NCwgNjg3ODgsIDY4NzkyLCA2ODc5NiwgCi0gICAgNjg4MDAsIDY4ODA0LCA2ODgwOCwgNjg4MTIsIDY4ODE2LCA2ODgyMCwgNjg4MjQsIDY4ODI4LCA2ODgzMiwgNjg4MzYsIAotICAgIDY4ODQwLCA2ODg0NCwgNjg4NDgsIDY4ODUyLCA2ODg1NiwgNjg4NjAsIDY4ODY0LCA2ODg2OCwgNjg4NzIsIDY4ODc2LCAKLSAgICA2ODg4MCwgNjg4ODQsIDY4ODg4LCA2ODg5MiwgNjg4OTYsIDY4OTAwLCA2ODkwNCwgNjg5MDgsIDY4OTEyLCA2ODkxNiwgCi0gICAgNjg5MjAsIDY4OTI0LCA2ODkyOCwgNjg5MzIsIDY4OTM2LCA2ODk0MCwgNjg5NDQsIDY4OTQ4LCA2ODk1MiwgNjg5NTYsIAotICAgIDY4OTYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODk2NCwgNjg5NjksIDY4OTczLCA2ODk3OCwgNjg5ODMsIAotICAgIDY4OTg4LCA2ODk5MywgNjg5OTgsIDY5MDAyLCA2OTAwNywgNjkwMTIsIDY5MDE3LCA2OTAyMiwgNjkwMjcsIDY5MDMyLCAKLSAgICA2OTAzNywgNjkwNDEsIDY5MDQ1LCA2OTA1MCwgNjkwNTQsIDY5MDU5LCA2OTA2NCwgNjkwNjksIDY5MDczLCA2OTA3OCwgCi0gICAgNjkwODMsIDY5MDg4LCA2OTA5MywgNjkwOTgsIDY5MTAyLCA2OTEwNywgNjkxMTEsIDY5MTE2LCA2OTEyMCwgNjkxMjUsIAotICAgIDY5MTI5LCA2OTEzMywgNjkxMzcsIDY5MTQyLCA2OTE0NywgNjkxNTIsIDY5MTYwLCA2OTE2OCwgNjkxNzYsIDY5MTg0LCAKLSAgICA2OTE5MSwgNjkxOTksIDY5MjA1LCA2OTIxMywgNjkyMTcsIDY5MjIxLCA2OTIyNSwgNjkyMjksIDY5MjMzLCA2OTIzNywgCi0gICAgNjkyNDEsIDY5MjQ1LCA2OTI0OSwgNjkyNTMsIDY5MjU3LCA2OTI2MSwgNjkyNjUsIDY5MjY5LCA2OTI3MywgNjkyNzcsIAotICAgIDY5MjgxLCA2OTI4NSwgNjkyODksIDY5MjkzLCA2OTI5NywgNjkzMDEsIDY5MzA1LCA2OTMwOSwgNjkzMTMsIDY5MzE3LCAKLSAgICA2OTMyMSwgNjkzMjUsIDY5MzI5LCA2OTMzMywgNjkzMzcsIDY5MzQxLCA2OTM0NSwgNjkzNDksIDY5MzUzLCA2OTM1NywgCi0gICAgNjkzNjAsIDY5MzY0LCA2OTM2OCwgNjkzNzIsIDY5Mzc2LCA2OTM4MCwgNjkzODQsIDY5Mzg4LCA2OTM5MiwgNjkzOTYsIAotICAgIDY5NDAwLCA2OTQwNCwgNjk0MDgsIDY5NDEyLCA2OTQxNiwgNjk0MjAsIDY5NDI0LCA2OTQyOCwgNjk0MzIsIDY5NDM2LCAKLSAgICA2OTQ0MCwgNjk0NDQsIDY5NDQ4LCA2OTQ1MiwgNjk0NTYsIDY5NDYwLCA2OTQ2NCwgNjk0NjgsIDY5NDcyLCA2OTQ3NiwgCi0gICAgNjk0ODAsIDY5NDg0LCA2OTQ4OCwgNjk0OTIsIDY5NDk2LCA2OTUwMCwgNjk1MDQsIDY5NTA3LCA2OTUxMSwgNjk1MTUsIAotICAgIDY5NTE4LCA2OTUyMiwgNjk1MjYsIDY5NTMwLCA2OTUzMywgNjk1MzcsIDY5NTQxLCA2OTU0NSwgNjk1NDksIDY5NTUzLCAKLSAgICA2OTU1NywgNjk1NjEsIDY5NTY1LCA2OTU2OSwgNjk1NzMsIDY5NTc3LCA2OTU4MSwgNjk1ODUsIDY5NTg5LCA2OTU5MiwgCi0gICAgNjk1OTYsIDY5NjAwLCA2OTYwMywgNjk2MDcsIDY5NjExLCA2OTYxNSwgNjk2MTksIDY5NjIzLCA2OTYyNywgNjk2MzAsIAotICAgIDY5NjMzLCA2OTYzNywgNjk2NDEsIDY5NjQ1LCA2OTY0OCwgNjk2NTEsIDY5NjU1LCA2OTY1OSwgNjk2NjMsIDY5NjY3LCAKLSAgICA2OTY3MSwgNjk2NzUsIDY5Njc5LCA2OTY4MywgNjk2ODcsIDY5NjkxLCA2OTY5NSwgNjk2OTksIDY5NzAzLCA2OTcwNywgCi0gICAgNjk3MTEsIDY5NzE1LCA2OTcxOSwgNjk3MjMsIDY5NzI3LCA2OTczMSwgNjk3MzUsIDY5NzM5LCA2OTc0MywgNjk3NDcsIAotICAgIDY5NzUxLCA2OTc1NSwgNjk3NTksIDY5NzYzLCA2OTc2NywgNjk3NzEsIDY5Nzc1LCA2OTc3OSwgNjk3ODMsIDY5Nzg3LCAKLSAgICA2OTc5MSwgNjk3OTUsIDY5Nzk5LCA2OTgwMiwgNjk4MDYsIDY5ODEwLCA2OTgxNCwgNjk4MTgsIDY5ODIyLCA2OTgyNiwgCi0gICAgNjk4MzAsIDY5ODM0LCA2OTgzOCwgNjk4NDIsIDY5ODQ2LCA2OTg1MCwgNjk4NTQsIDY5ODU4LCA2OTg2MiwgNjk4NjYsIAotICAgIDY5ODcwLCA2OTg3NCwgNjk4NzgsIDY5ODgyLCA2OTg4NiwgNjk4OTAsIDY5ODk0LCA2OTg5OCwgNjk5MDIsIDY5OTA2LCAKLSAgICA2OTkxMCwgNjk5MTQsIDY5OTE4LCA2OTkyMiwgNjk5MjYsIDY5OTMwLCA2OTkzNCwgNjk5MzgsIDY5OTQyLCA2OTk0NiwgCi0gICAgNjk5NDksIDY5OTUzLCA2OTk1NywgNjk5NjEsIDY5OTY1LCA2OTk2OSwgNjk5NzMsIDY5OTc3LCA2OTk4MSwgNjk5ODUsIAotICAgIDY5OTg5LCA2OTk5MywgNjk5OTcsIDcwMDAxLCA3MDAwNSwgNzAwMDksIDcwMDEzLCA3MDAxNiwgNzAwMjAsIDcwMDI0LCAKLSAgICA3MDAyOCwgNzAwMzIsIDcwMDM2LCA3MDA0MCwgNzAwNDQsIDcwMDQ4LCA3MDA1MiwgNzAwNTYsIDcwMDYwLCA3MDA2NCwgCi0gICAgNzAwNjgsIDcwMDcyLCA3MDA3NiwgNzAwODAsIDcwMDg0LCA3MDA4OCwgNzAwOTIsIDcwMDk2LCA3MDEwMCwgNzAxMDMsIAotICAgIDcwMTA3LCA3MDExMSwgNzAxMTUsIDcwMTE5LCA3MDEyMywgNzAxMjcsIDcwMTMxLCA3MDEzNSwgNzAxMzksIDcwMTQzLCAKLSAgICA3MDE0NywgNzAxNTEsIDcwMTU1LCA3MDE1OSwgNzAxNjMsIDcwMTY3LCA3MDE3MSwgNzAxNzUsIDcwMTc5LCA3MDE4MywgCi0gICAgNzAxODcsIDcwMTkxLCA3MDE5NSwgNzAxOTksIDcwMjAzLCA3MDIwNywgNzAyMTEsIDcwMjE1LCA3MDIxOSwgNzAyMjMsIAotICAgIDcwMjI3LCA3MDIzMSwgNzAyMzUsIDcwMjM5LCA3MDI0MywgNzAyNDcsIDcwMjUxLCA3MDI1NSwgNzAyNTksIDcwMjYzLCAKLSAgICA3MDI2NywgNzAyNzEsIDcwMjc1LCA3MDI3OCwgNzAyODMsIDcwMjg3LCA3MDI5MywgNzAyOTgsIDcwMzA0LCA3MDMwOCwgCi0gICAgNzAzMTIsIDcwMzE2LCA3MDMyMCwgNzAzMjQsIDcwMzI4LCA3MDMzMiwgNzAzMzYsIDcwMzQwLCA3MDM0NCwgNzAzNDgsIAotICAgIDcwMzUyLCA3MDM1NiwgNzAzNjAsIDcwMzYzLCA3MDM2NiwgNzAzNjksIDcwMzcyLCA3MDM3NSwgNzAzNzgsIDcwMzgxLCAKLSAgICA3MDM4NCwgNzAzODcsIDcwMzkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3MDM5OCwgNzA0MDMsIDcwNDA4LCA3MDQxMywgNzA0MTgsIDcwNDI1LCA3MDQzMiwgNzA0MzcsIDcwNDQyLCAKLSAgICA3MDQ0NywgNzA0NTIsIDcwNDU5LCA3MDQ2NiwgNzA0NzMsIDcwNDgwLCA3MDQ4NywgNzA0OTQsIDcwNTA0LCA3MDUxNCwgCi0gICAgNzA1MjEsIDcwNTI4LCA3MDUzNSwgNzA1NDIsIDcwNTQ4LCA3MDU1NCwgNzA1NjMsIDcwNTcyLCA3MDU3OSwgNzA1ODYsIAotICAgIDcwNTk3LCA3MDYwOCwgNzA2MTMsIDcwNjE4LCA3MDYyNSwgNzA2MzIsIDcwNjM5LCA3MDY0NiwgNzA2NTMsIDcwNjYwLCAKLSAgICA3MDY2NywgNzA2NzQsIDcwNjgwLCA3MDY4NiwgNzA2OTIsIDcwNjk4LCA3MDcwNSwgNzA3MTIsIDcwNzE3LCA3MDcyMSwgCi0gICAgNzA3MjgsIDcwNzM1LCA3MDc0MiwgNzA3NDYsIDcwNzUzLCA3MDc1NywgNzA3NjIsIDcwNzY2LCA3MDc3MiwgNzA3NzcsIAotICAgIDcwNzgzLCA3MDc4OCwgNzA3OTIsIDcwNzk2LCA3MDc5OSwgNzA4MDIsIDcwODA3LCA3MDgxMiwgNzA4MTcsIDcwODIyLCAKLSAgICA3MDgyNywgNzA4MzIsIDcwODM3LCA3MDg0MiwgNzA4NDcsIDcwODUyLCA3MDg2MSwgNzA4NzAsIDcwODc1LCA3MDg4MCwgCi0gICAgNzA4ODUsIDcwODkwLCA3MDg5NSwgNzA5MDAsIDcwOTA1LCA3MDkxMCwgNzA5MTUsIDcwOTIwLCA3MDkyNSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzA5MzAsIDcwOTM2LCA3MDkzOSwgNzA5NDIsIDcwOTQ1LCA3MDk0OSwgNzA5NTMsIDcwOTU3LCAKLSAgICA3MDk2MSwgNzA5NjQsIDcwOTY4LCA3MDk3MSwgNzA5NzUsIDcwOTc4LCA3MDk4MiwgNzA5ODYsIDcwOTkwLCA3MDk5NCwgCi0gICAgNzA5OTgsIDcxMDAyLCA3MTAwNiwgNzEwMDksIDcxMDEzLCA3MTAxNywgNzEwMjEsIDcxMDI1LCA3MTAyOSwgNzEwMzMsIAotICAgIDcxMDM3LCA3MTA0MSwgNzEwNDUsIDcxMDQ5LCA3MTA1MywgNzEwNTcsIDcxMDYxLCA3MTA2NSwgNzEwNjgsIDcxMDcyLCAKLSAgICA3MTA3NiwgNzEwODAsIDcxMDg0LCA3MTA4OCwgNzEwOTIsIDcxMDk2LCA3MTEwMCwgNzExMDQsIDcxMTA4LCA3MTExMiwgCi0gICAgNzExMTYsIDcxMTIwLCA3MTEyNCwgNzExMjgsIDcxMTMyLCA3MTEzNiwgNzExNDAsIDcxMTQ0LCA3MTE0OCwgNzExNTIsIAotICAgIDcxMTU2LCA3MTE2MCwgNzExNjQsIDcxMTY3LCA3MTE3MSwgNzExNzUsIDcxMTc5LCA3MTE4MywgNzExODcsIDcxMTkxLCAKLSAgICA3MTE5NSwgNzExOTgsIDcxMjAyLCA3MTIwNiwgNzEyMTAsIDcxMjE0LCA3MTIxOCwgNzEyMjIsIDcxMjI2LCA3MTIzMCwgCi0gICAgNzEyMzQsIDcxMjM4LCA3MTI0MiwgNzEyNDYsIDcxMjUxLCA3MTI1NiwgNzEyNTksIDcxMjY0LCA3MTI2NywgNzEyNzAsIAotICAgIDcxMjczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MTI3NywgNzEyODYsIDcxMjk1LCA3MTMwNCwgNzEzMTMsIDcxMzIyLCAKLSAgICA3MTMzMSwgNzEzNDAsIDcxMzQ5LCA3MTM1NywgNzEzNjQsIDcxMzcyLCA3MTM3OSwgNzEzODcsIDcxMzk3LCA3MTQwNiwgCi0gICAgNzE0MTYsIDcxNDI1LCA3MTQzNSwgNzE0NDMsIDcxNDUwLCA3MTQ1OCwgNzE0NjUsIDcxNDczLCA3MTQ3OCwgNzE0ODMsIAotICAgIDcxNDg4LCA3MTQ5NywgNzE1MDMsIDcxNTA5LCA3MTUxNiwgNzE1MjUsIDcxNTMzLCA3MTU0MSwgNzE1NDksIDcxNTU2LCAKLSAgICA3MTU2MywgNzE1NzAsIDcxNTc3LCA3MTU4MiwgNzE1ODcsIDcxNTkyLCA3MTU5NywgNzE2MDIsIDcxNjA3LCA3MTYxMiwgCi0gICAgNzE2MTcsIDcxNjI1LCA3MTYzMywgNzE2MzksIDcxNjQ1LCA3MTY1MCwgNzE2NTUsIDcxNjYwLCA3MTY2NSwgNzE2NzAsIAotICAgIDcxNjc1LCA3MTY4MCwgNzE2ODUsIDcxNjkzLCA3MTcwMSwgNzE3MDYsIDcxNzExLCA3MTcyMSwgNzE3MzEsIDcxNzM4LCAKLSAgICA3MTc0NSwgNzE3NTQsIDcxNzYzLCA3MTc3NSwgNzE3ODcsIDcxNzkzLCA3MTc5OSwgNzE4MDcsIDcxODE1LCA3MTgyNSwgCi0gICAgNzE4MzUsIDcxODQyLCA3MTg0OSwgNzE4NTQsIDcxODU5LCA3MTg3MSwgNzE4ODMsIDcxODkxLCA3MTg5OSwgNzE5MDksIAotICAgIDcxOTE5LCA3MTkzMSwgNzE5NDMsIDcxOTUyLCA3MTk2MSwgNzE5NjgsIDcxOTc1LCA3MTk4MiwgNzE5ODksIDcxOTk4LCAKLSAgICA3MjAwNywgNzIwMTIsIDcyMDE3LCA3MjAyNCwgNzIwMzEsIDcyMDM4LCA3MjA0NSwgNzIwNTcsIDcyMDY5LCA3MjA3NCwgCi0gICAgNzIwNzksIDcyMDg0LCA3MjA4OSwgNzIwOTQsIDcyMDk5LCA3MjEwNCwgNzIxMDksIDcyMTEzLCA3MjExOCwgNzIxMjMsIAotICAgIDcyMTI4LCA3MjEzMywgNzIxMzgsIDcyMTQ0LCA3MjE0OSwgNzIxNTQsIDcyMTYxLCA3MjE2OCwgNzIxNzUsIDcyMTgyLCAKLSAgICA3MjE4OSwgNzIxOTgsIDcyMjA3LCA3MjIxMywgNzIyMTksIDcyMjI1LCA3MjIzMSwgNzIyMzgsIDcyMjQ1LCA3MjI1MiwgCi0gICAgNzIyNTksIDcyMjY2LCA3MjI3MCwgNzIyNzcsIDcyMjgyLCA3MjI4NywgNzIyOTQsIDAsIDcyMzA3LCA3MjMxNSwgNzIzMjMsIAotICAgIDcyMzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjMzNywgNzIzNDYsIDcyMzU1LCA3MjM2NCwgCi0gICAgNzIzNzMsIDcyMzgyLCA3MjM5MSwgNzI0MDAsIDcyNDA5LCA3MjQxOCwgNzI0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDYzNzA2LCA2MzcxNSwgNjM3MjQsIDYzNzM1LCA2Mzc0MiwgNjM3NDcsIDYzNzUyLCA2Mzc1OSwgNjM3NjYsIAorICAgIDYzNzcyLCA2Mzc3NywgNjM3ODIsIDYzNzg3LCA2Mzc5MiwgNjM3OTksIDYzODA0LCA2MzgwOSwgNjM4MTQsIDYzODI1LCAKKyAgICA2MzgzMCwgNjM4MzUsIDYzODQyLCA2Mzg0NywgNjM4NTQsIDYzODU5LCA2Mzg2NCwgNjM4NzEsIDYzODc4LCA2Mzg4NSwgCisgICAgNjM4OTQsIDYzOTAzLCA2MzkwOCwgNjM5MTMsIDYzOTE4LCA2MzkyNSwgNjM5MzAsIDYzOTQwLCA2Mzk0NywgNjM5NTIsIAorICAgIDYzOTU3LCA2Mzk2MiwgNjM5NjcsIDYzOTcyLCA2Mzk3NywgNjM5ODYsIDYzOTkzLCA2NDAwMCwgNjQwMDUsIDY0MDEyLCAKKyAgICA2NDAxNywgNjQwMjQsIDY0MDMzLCA2NDA0NCwgNjQwNDksIDY0MDU4LCA2NDA2MywgNjQwNzAsIDY0MDc5LCA2NDA4OCwgCisgICAgNjQwOTMsIDY0MDk4LCA2NDEwNSwgNjQxMTEsIDY0MTE4LCA2NDEyNSwgNjQxMjksIDY0MTMzLCA2NDEzNiwgNjQxNDAsIAorICAgIDY0MTQ0LCA2NDE0OCwgNjQxNTIsIDY0MTU2LCA2NDE2MCwgNjQxNjQsIDY0MTY3LCA2NDE3MSwgNjQxNzUsIDY0MTc5LCAKKyAgICA2NDE4MywgNjQxODcsIDY0MTkxLCA2NDE5NCwgNjQxOTgsIDY0MjAyLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxNywgCisgICAgNjQyMjEsIDY0MjI1LCA2NDIyOSwgNjQyMzMsIDY0MjM3LCA2NDI0MSwgNjQyNDUsIDY0MjQ5LCA2NDI1MywgNjQyNTcsIAorICAgIDY0MjYxLCA2NDI2NSwgNjQyNjksIDY0MjczLCA2NDI3NywgNjQyODEsIDY0Mjg1LCA2NDI4OSwgNjQyOTMsIDY0Mjk3LCAKKyAgICA2NDMwMSwgNjQzMDUsIDY0MzA5LCA2NDMxMywgNjQzMTcsIDY0MzIxLCA2NDMyNSwgNjQzMjksIDY0MzMzLCA2NDMzNywgCisgICAgNjQzNDEsIDY0MzQ1LCA2NDM0OSwgNjQzNTMsIDY0MzU3LCA2NDM2MSwgNjQzNjUsIDY0MzY5LCA2NDM3MywgNjQzNzcsIAorICAgIDY0MzgxLCA2NDM4NCwgNjQzODgsIDY0MzkyLCA2NDM5NiwgNjQ0MDAsIDY0NDA0LCA2NDQwOCwgNjQ0MTIsIDY0NDE2LCAKKyAgICA2NDQyMCwgNjQ0MjQsIDY0NDI4LCA2NDQzMiwgNjQ0MzYsIDY0NDQwLCA2NDQ0NCwgNjQ0NDgsIDY0NDUyLCA2NDQ1NiwgCisgICAgNjQ0NjAsIDY0NDY0LCA2NDQ2OCwgNjQ0NzIsIDY0NDc2LCA2NDQ4MCwgNjQ0ODQsIDY0NDg4LCA2NDQ5MiwgNjQ0OTYsIAorICAgIDY0NTAwLCA2NDUwNCwgNjQ1MDgsIDY0NTEyLCA2NDUxNiwgNjQ1MjAsIDY0NTI0LCA2NDUyOCwgNjQ1MzIsIDY0NTM2LCAKKyAgICA2NDU0MCwgNjQ1NDQsIDY0NTQ4LCA2NDU1MiwgNjQ1NTYsIDY0NTYwLCA2NDU2NCwgNjQ1NjgsIDY0NTcyLCA2NDU3NiwgCisgICAgNjQ1ODAsIDY0NTg0LCA2NDU4OCwgNjQ1OTIsIDY0NTk2LCA2NDYwMCwgNjQ2MDQsIDY0NjA4LCA2NDYxMiwgNjQ2MTYsIAorICAgIDY0NjIwLCA2NDYyNCwgNjQ2MjgsIDY0NjMyLCA2NDYzNiwgNjQ2NDAsIDY0NjQ0LCA2NDY0OCwgNjQ2NTIsIDY0NjU2LCAKKyAgICA2NDY2MCwgNjQ2NjQsIDY0NjY4LCA2NDY3MiwgNjQ2NzYsIDY0NjgwLCA2NDY4NCwgNjQ2ODgsIDY0NjkyLCA2NDY5NiwgCisgICAgNjQ3MDAsIDY0NzA0LCA2NDcwOCwgNjQ3MTIsIDY0NzE2LCA2NDcyMCwgNjQ3MjQsIDY0NzI4LCA2NDczMiwgNjQ3MzYsIAorICAgIDY0NzQwLCA2NDc0NCwgNjQ3NDgsIDY0NzUyLCA2NDc1NiwgNjQ3NjAsIDY0NzY0LCA2NDc2OCwgNjQ3NzIsIDY0Nzc2LCAKKyAgICA2NDc4MCwgNjQ3ODQsIDY0Nzg4LCA2NDc5MiwgNjQ3OTYsIDY0ODAwLCA2NDgwNCwgNjQ4MDgsIDY0ODEyLCA2NDgxNiwgCisgICAgNjQ4MjAsIDY0ODI0LCA2NDgyOCwgNjQ4MzIsIDY0ODM2LCA2NDg0MCwgNjQ4NDQsIDY0ODQ4LCA2NDg1MiwgNjQ4NTUsIAorICAgIDY0ODU5LCA2NDg2MywgNjQ4NjcsIDY0ODcxLCA2NDg3NSwgNjQ4NzksIDY0ODgzLCA2NDg4NywgNjQ4OTEsIDY0ODk1LCAKKyAgICA2NDg5OSwgNjQ5MDMsIDY0OTA3LCA2NDkxMSwgNjQ5MTUsIDY0OTE5LCA2NDkyMywgNjQ5MjcsIDY0OTMxLCA2NDkzNSwgCisgICAgNjQ5MzksIDY0OTQzLCA2NDk0NywgNjQ5NTEsIDY0OTU1LCA2NDk1OSwgNjQ5NjMsIDY0OTY3LCA2NDk3MSwgNjQ5NzUsIAorICAgIDY0OTc5LCA2NDk4MywgNjQ5ODcsIDY0OTkxLCA2NDk5NSwgNjQ5OTksIDY1MDAzLCA2NTAwNywgNjUwMTEsIDY1MDE1LCAKKyAgICA2NTAxOSwgNjUwMjMsIDY1MDI3LCA2NTAzMSwgNjUwMzUsIDY1MDM5LCA2NTA0MywgNjUwNDcsIDY1MDUxLCA2NTA1NSwgCisgICAgNjUwNTksIDY1MDYzLCA2NTA2NywgNjUwNzEsIDY1MDc1LCA2NTA3OSwgNjUwODMsIDY1MDg3LCA2NTA5MSwgNjUwOTUsIAorICAgIDY1MDk5LCA2NTEwMywgNjUxMDcsIDY1MTExLCA2NTExNSwgNjUxMTksIDY1MTIzLCA2NTEyNywgNjUxMzEsIDY1MTM1LCAKKyAgICA2NTEzOSwgNjUxNDMsIDY1MTQ3LCA2NTE1MSwgNjUxNTUsIDY1MTU5LCA2NTE2MywgNjUxNjcsIDY1MTcxLCA2NTE3NSwgCisgICAgNjUxNzksIDY1MTgzLCA2NTE4NywgNjUxOTEsIDY1MTk1LCA2NTE5OSwgNjUyMDMsIDY1MjA3LCA2NTIxMSwgNjUyMTUsIAorICAgIDY1MjE5LCA2NTIyMywgNjUyMjcsIDY1MjMxLCA2NTIzNSwgNjUyMzksIDY1MjQzLCA2NTI0NywgNjUyNTEsIDY1MjU1LCAKKyAgICA2NTI1OSwgNjUyNjMsIDY1MjY3LCA2NTI3MSwgNjUyNzUsIDY1Mjc5LCA2NTI4MywgNjUyODcsIDY1MjkxLCA2NTI5NSwgCisgICAgNjUyOTksIDY1MzAzLCA2NTMwNywgNjUzMTEsIDY1MzE1LCA2NTMxOCwgNjUzMjIsIDY1MzI2LCA2NTMzMCwgNjUzMzQsIAorICAgIDY1MzM4LCA2NTM0MiwgNjUzNDYsIDY1MzUwLCA2NTM1NCwgNjUzNTgsIDY1MzYyLCA2NTM2NiwgNjUzNzAsIDY1Mzc0LCAKKyAgICA2NTM3OCwgNjUzODIsIDY1Mzg2LCA2NTM5MCwgNjUzOTQsIDY1Mzk4LCA2NTQwMiwgNjU0MDYsIDY1NDEwLCA2NTQxNCwgCisgICAgNjU0MTgsIDY1NDIyLCA2NTQyNiwgNjU0MzAsIDY1NDM0LCA2NTQzOCwgNjU0NDIsIDY1NDQ2LCA2NTQ1MCwgNjU0NTQsIAorICAgIDY1NDU4LCA2NTQ2MiwgNjU0NjYsIDY1NDcwLCA2NTQ3NCwgNjU0NzgsIDY1NDgyLCA2NTQ4NiwgNjU0OTAsIDY1NDk0LCAKKyAgICA2NTQ5OCwgNjU1MDIsIDY1NTA2LCA2NTUxMCwgNjU1MTQsIDY1NTE4LCA2NTUyMiwgNjU1MjYsIDY1NTMwLCA2NTUzNCwgCisgICAgNjU1MzgsIDY1NTQyLCA2NTU0NiwgNjU1NTAsIDY1NTU0LCA2NTU1OCwgNjU1NjIsIDY1NTY2LCA2NTU3MCwgNjU1NzQsIAorICAgIDY1NTc4LCA2NTU4MiwgNjU1ODYsIDY1NTkwLCA2NTU5NCwgNjU1OTgsIDY1NjAyLCA2NTYwNiwgNjU2MTAsIDY1NjE0LCAKKyAgICA2NTYxOCwgNjU2MjIsIDY1NjI2LCA2NTYzMCwgNjU2MzQsIDY1NjM4LCA2NTY0MiwgNjU2NDYsIDY1NjUwLCA2NTY1NCwgCisgICAgNjU2NTgsIDY1NjYyLCA2NTY2NiwgNjU2NzAsIDY1Njc0LCA2NTY3NywgNjU2ODEsIDY1Njg1LCA2NTY4OSwgNjU2OTMsIAorICAgIDY1Njk3LCA2NTcwMSwgNjU3MDUsIDY1NzA5LCA2NTcxMywgNjU3MTcsIDY1NzIxLCA2NTcyNSwgNjU3MjksIDY1NzMzLCAKKyAgICA2NTczNywgNjU3NDEsIDY1NzQ1LCA2NTc0OSwgNjU3NTMsIDY1NzU3LCA2NTc2MSwgNjU3NjUsIDY1NzY5LCA2NTc3MywgCisgICAgNjU3NzcsIDY1NzgxLCA2NTc4NSwgNjU3ODksIDY1NzkzLCA2NTc5NywgNjU4MDEsIDY1ODA1LCA2NTgwOSwgNjU4MTMsIAorICAgIDY1ODE3LCA2NTgyMSwgNjU4MjUsIDY1ODI5LCA2NTgzMywgNjU4MzcsIDY1ODQxLCA2NTg0NSwgNjU4NDksIDY1ODUzLCAKKyAgICA2NTg1NywgNjU4NjEsIDY1ODY1LCA2NTg2OSwgNjU4NzMsIDY1ODc3LCA2NTg4MSwgNjU4ODUsIDY1ODg5LCA2NTg5MywgCisgICAgNjU4OTcsIDY1OTAxLCA2NTkwNSwgNjU5MDksIDY1OTEzLCA2NTkxNywgNjU5MjEsIDY1OTI1LCA2NTkyOSwgNjU5MzMsIAorICAgIDY1OTM3LCA2NTk0MSwgNjU5NDUsIDY1OTQ5LCA2NTk1MywgNjU5NTcsIDY1OTYxLCA2NTk2NSwgNjU5NjksIDY1OTczLCAKKyAgICA2NTk3NywgNjU5ODEsIDY1OTg1LCA2NTk4OSwgNjU5OTMsIDY1OTk3LCA2NjAwMSwgNjYwMDUsIDY2MDA5LCA2NjAxMywgCisgICAgNjYwMTcsIDY2MDIxLCA2NjAyNSwgNjYwMjksIDY2MDMzLCA2NjAzNywgNjYwNDEsIDY2MDQ1LCA2NjA0OSwgNjYwNTMsIAorICAgIDY2MDU3LCA2NjA2MSwgNjYwNjUsIDY2MDY5LCA2NjA3MywgNjYwNzcsIDY2MDgxLCA2NjA4NSwgNjYwODksIDY2MDkzLCAKKyAgICA2NjA5NywgNjYxMDEsIDY2MTA1LCA2NjEwOSwgNjYxMTMsIDY2MTE3LCA2NjEyMSwgNjYxMjUsIDY2MTI5LCA2NjEzMywgCisgICAgNjYxMzcsIDY2MTQxLCA2NjE0NSwgNjYxNDksIDY2MTUzLCA2NjE1NywgNjYxNjEsIDY2MTY1LCA2NjE2OSwgNjYxNzIsIAorICAgIDY2MTc2LCA2NjE4MCwgNjYxODQsIDY2MTg4LCA2NjE5MiwgNjYxOTYsIDY2MjAwLCA2NjIwNCwgNjYyMDgsIDY2MjEyLCAKKyAgICA2NjIxNiwgNjYyMjAsIDY2MjI0LCA2NjIyOCwgNjYyMzIsIDY2MjM2LCA2NjI0MCwgNjYyNDQsIDY2MjQ4LCA2NjI1MiwgCisgICAgNjYyNTYsIDY2MjYwLCA2NjI2NCwgNjYyNjgsIDY2MjcyLCA2NjI3NiwgNjYyODAsIDY2Mjg0LCA2NjI4OCwgNjYyOTIsIAorICAgIDY2Mjk2LCA2NjMwMCwgNjYzMDQsIDY2MzA4LCA2NjMxMiwgNjYzMTYsIDY2MzIwLCA2NjMyNCwgNjYzMjgsIDY2MzMyLCAKKyAgICA2NjMzNiwgNjYzNDAsIDY2MzQ0LCA2NjM0OCwgNjYzNTIsIDY2MzU2LCA2NjM2MCwgNjYzNjQsIDY2MzY4LCA2NjM3MiwgCisgICAgNjYzNzYsIDY2MzgwLCA2NjM4NCwgNjYzODgsIDY2MzkyLCA2NjM5NiwgNjY0MDAsIDY2NDA0LCA2NjQwOCwgNjY0MTIsIAorICAgIDY2NDE2LCA2NjQyMCwgNjY0MjQsIDY2NDI4LCA2NjQzMiwgNjY0MzYsIDY2NDQwLCA2NjQ0NCwgNjY0NDgsIDY2NDUyLCAKKyAgICA2NjQ1NiwgNjY0NjAsIDY2NDY0LCA2NjQ2OCwgNjY0NzIsIDY2NDc2LCA2NjQ4MCwgNjY0ODQsIDY2NDg4LCA2NjQ5MiwgCisgICAgNjY0OTYsIDY2NTAwLCA2NjUwNCwgNjY1MDgsIDY2NTEyLCA2NjUxNiwgNjY1MjAsIDY2NTI0LCA2NjUyOCwgNjY1MzIsIAorICAgIDY2NTM2LCA2NjU0MCwgNjY1NDQsIDY2NTQ4LCA2NjU1MiwgNjY1NTYsIDY2NTYwLCA2NjU2NCwgNjY1NjgsIDY2NTcyLCAKKyAgICA2NjU3NiwgNjY1ODAsIDY2NTg0LCA2NjU4OCwgNjY1OTIsIDY2NTk2LCA2NjYwMCwgNjY2MDQsIDY2NjA4LCA2NjYxMiwgCisgICAgNjY2MTYsIDY2NjIwLCA2NjYyNCwgNjY2MjcsIDY2NjMxLCA2NjYzNSwgNjY2MzksIDY2NjQzLCA2NjY0NywgNjY2NTEsIAorICAgIDY2NjU1LCA2NjY1OSwgNjY2NjMsIDY2NjY3LCA2NjY3MSwgNjY2NzUsIDY2Njc5LCA2NjY4MywgNjY2ODcsIDY2NjkxLCAKKyAgICA2NjY5NSwgNjY2OTksIDY2NzAzLCA2NjcwNywgNjY3MTEsIDY2NzE1LCA2NjcxOSwgNjY3MjMsIDY2NzI3LCA2NjczMSwgCisgICAgNjY3MzUsIDY2NzM5LCA2Njc0MywgNjY3NDcsIDY2NzUxLCA2Njc1NSwgNjY3NTksIDY2NzYzLCA2Njc2NywgNjY3NzEsIAorICAgIDY2Nzc1LCA2Njc3OSwgNjY3ODMsIDY2Nzg3LCA2Njc5MSwgNjY3OTUsIDY2Nzk5LCA2NjgwMywgNjY4MDcsIDY2ODExLCAKKyAgICA2NjgxNSwgNjY4MTksIDY2ODIzLCA2NjgyNywgNjY4MzEsIDY2ODM1LCA2NjgzOSwgNjY4NDMsIDY2ODQ3LCA2Njg1MSwgCisgICAgNjY4NTUsIDY2ODU5LCA2Njg2MywgNjY4NjcsIDY2ODcxLCA2Njg3NSwgNjY4NzksIDY2ODgzLCA2Njg4NywgNjY4OTEsIAorICAgIDY2ODk1LCA2Njg5OSwgNjY5MDMsIDY2OTA3LCA2NjkxMSwgNjY5MTUsIDY2OTE5LCA2NjkyMywgNjY5MjcsIDY2OTMxLCAKKyAgICA2NjkzNSwgNjY5MzksIDY2OTQzLCA2Njk0NywgNjY5NTEsIDY2OTU1LCA2Njk1OSwgNjY5NjMsIDY2OTY3LCA2Njk3MSwgCisgICAgNjY5NzUsIDY2OTc5LCA2Njk4MywgNjY5ODcsIDY2OTkxLCA2Njk5NSwgNjY5OTksIDY3MDAzLCA2NzAwNywgNjcwMTEsIAorICAgIDY3MDE1LCA2NzAxOSwgNjcwMjMsIDY3MDI3LCA2NzAzMSwgNjcwMzUsIDY3MDM5LCA2NzA0MywgNjcwNDcsIDY3MDUxLCAKKyAgICA2NzA1NSwgNjcwNTksIDY3MDYzLCA2NzA2NywgNjcwNzEsIDY3MDc1LCA2NzA3OSwgNjcwODMsIDY3MDg3LCA2NzA5MSwgCisgICAgNjcwOTUsIDY3MDk5LCA2NzEwMywgNjcxMDcsIDY3MTExLCA2NzExNSwgNjcxMTksIDY3MTIzLCA2NzEyNywgNjcxMzEsIAorICAgIDY3MTM1LCA2NzEzOSwgNjcxNDMsIDY3MTQ3LCA2NzE1MSwgNjcxNTUsIDY3MTU5LCA2NzE2MywgNjcxNjcsIDY3MTcxLCAKKyAgICA2NzE3NSwgNjcxNzksIDY3MTgzLCA2NzE4NywgNjcxOTEsIDY3MTk1LCA2NzE5OSwgNjcyMDMsIDY3MjA3LCA2NzIxMSwgCisgICAgNjcyMTUsIDY3MjE5LCA2NzIyMywgNjcyMjcsIDY3MjMwLCA2NzIzNCwgNjcyMzgsIDY3MjQyLCA2NzI0NiwgNjcyNTAsIAorICAgIDY3MjU0LCA2NzI1OCwgNjcyNjEsIDY3MjY1LCA2NzI2OSwgNjcyNzMsIDY3Mjc3LCA2NzI4MSwgNjcyODUsIDY3Mjg5LCAKKyAgICA2NzI5MywgNjcyOTcsIDY3MzAxLCA2NzMwNSwgNjczMDksIDY3MzEzLCA2NzMxNywgNjczMjEsIDY3MzI1LCA2NzMyOSwgCisgICAgNjczMzMsIDY3MzM3LCA2NzM0MSwgNjczNDUsIDY3MzQ5LCA2NzM1MywgNjczNTcsIDY3MzYxLCA2NzM2NSwgNjczNjksIAorICAgIDY3MzczLCA2NzM3NywgNjczODEsIDY3Mzg1LCA2NzM4OSwgNjczOTMsIDY3Mzk3LCA2NzQwMSwgNjc0MDUsIDY3NDA5LCAKKyAgICA2NzQxMywgNjc0MTcsIDY3NDIxLCA2NzQyNSwgNjc0MjksIDY3NDMzLCA2NzQzNywgNjc0NDEsIDY3NDQ1LCA2NzQ0OSwgCisgICAgNjc0NTMsIDY3NDU3LCA2NzQ2MSwgNjc0NjUsIDY3NDY5LCA2NzQ3MywgNjc0NzcsIDY3NDgxLCA2NzQ4NSwgNjc0ODksIAorICAgIDY3NDkzLCA2NzQ5NywgNjc1MDEsIDY3NTA1LCA2NzUwOSwgNjc1MTMsIDY3NTE3LCA2NzUyMSwgNjc1MjUsIDY3NTI5LCAKKyAgICA2NzUzMywgNjc1MzcsIDY3NTQxLCA2NzU0NSwgNjc1NDksIDY3NTUzLCA2NzU1NywgNjc1NjEsIDY3NTY1LCA2NzU2OSwgCisgICAgNjc1NzMsIDY3NTc3LCA2NzU4MSwgNjc1ODUsIDY3NTg5LCA2NzU5MywgNjc1OTcsIDY3NjAxLCA2NzYwNSwgNjc2MDksIAorICAgIDY3NjEzLCA2NzYxNywgNjc2MjEsIDY3NjI1LCA2NzYyOSwgNjc2MzMsIDY3NjM3LCA2NzY0MSwgNjc2NDUsIDY3NjQ5LCAKKyAgICA2NzY1MywgNjc2NTcsIDY3NjYxLCA2NzY2NSwgNjc2NjksIDY3NjczLCA2NzY3NywgNjc2ODEsIDY3Njg1LCA2NzY4OSwgCisgICAgNjc2OTMsIDY3Njk3LCA2NzcwMSwgNjc3MDUsIDY3NzA5LCA2NzcxMywgNjc3MTcsIDY3NzIxLCA2NzcyNSwgNjc3MjksIAorICAgIDY3NzMzLCA2NzczNywgNjc3NDEsIDY3NzQ1LCA2Nzc0OSwgNjc3NTMsIDY3NzU3LCA2Nzc2MSwgNjc3NjUsIDY3NzY5LCAKKyAgICA2Nzc3MywgNjc3NzcsIDY3NzgxLCA2Nzc4NSwgNjc3ODksIDY3NzkzLCA2Nzc5NywgNjc4MDEsIDY3ODA1LCA2NzgwOSwgCisgICAgNjc4MTMsIDY3ODE3LCA2NzgyMSwgNjc4MjUsIDY3ODI5LCA2NzgzMywgNjc4MzcsIDY3ODQxLCA2Nzg0NSwgNjc4NDksIAorICAgIDY3ODUzLCA2Nzg1NywgNjc4NjEsIDY3ODY1LCA2Nzg2OSwgNjc4NzMsIDY3ODc3LCA2Nzg4MSwgNjc4ODUsIDY3ODg5LCAKKyAgICA2Nzg5MywgNjc4OTcsIDY3OTAxLCA2NzkwNSwgNjc5MDksIDY3OTEzLCA2NzkxNywgNjc5MjEsIDY3OTI1LCA2NzkyOSwgCisgICAgNjc5MzMsIDY3OTM3LCA2Nzk0MSwgNjc5NDUsIDY3OTQ5LCA2Nzk1MywgNjc5NTcsIDY3OTYxLCA2Nzk2NSwgNjc5NjksIAorICAgIDY3OTczLCA2Nzk3NywgNjc5ODEsIDY3OTg1LCA2Nzk4OCwgNjc5OTIsIDY3OTk2LCA2ODAwMCwgNjgwMDQsIDY4MDA4LCAKKyAgICA2ODAxMiwgNjgwMTYsIDY4MDIwLCA2ODAyNCwgNjgwMjgsIDY4MDMyLCA2ODAzNiwgNjgwNDAsIDY4MDQ0LCA2ODA0OCwgCisgICAgNjgwNTIsIDY4MDU2LCA2ODA2MCwgNjgwNjQsIDY4MDY4LCA2ODA3MiwgNjgwNzYsIDY4MDgwLCA2ODA4NCwgNjgwODgsIAorICAgIDY4MDkyLCA2ODA5NiwgNjgxMDAsIDY4MTA0LCA2ODEwOCwgNjgxMTIsIDY4MTE2LCA2ODEyMCwgNjgxMjQsIDY4MTI4LCAKKyAgICA2ODEzMiwgNjgxMzYsIDY4MTQwLCA2ODE0NCwgNjgxNDgsIDY4MTUyLCA2ODE1NiwgNjgxNjAsIDY4MTY0LCA2ODE2OCwgCisgICAgNjgxNzIsIDY4MTc2LCA2ODE4MCwgNjgxODQsIDY4MTg4LCA2ODE5MiwgNjgxOTYsIDY4MjAwLCA2ODIwNCwgNjgyMDgsIAorICAgIDY4MjEyLCA2ODIxNiwgNjgyMjAsIDY4MjI0LCA2ODIyOCwgNjgyMzIsIDY4MjM2LCA2ODI0MCwgNjgyNDQsIDY4MjQ4LCAKKyAgICA2ODI1MiwgNjgyNTYsIDY4MjYwLCA2ODI2NCwgNjgyNjgsIDY4MjcyLCA2ODI3NiwgNjgyODAsIDY4Mjg0LCA2ODI4OCwgCisgICAgNjgyOTIsIDY4Mjk2LCA2ODMwMCwgNjgzMDQsIDY4MzA4LCA2ODMxMiwgNjgzMTYsIDY4MzIwLCA2ODMyNCwgNjgzMjgsIAorICAgIDY4MzMyLCA2ODMzNiwgNjgzNDAsIDY4MzQ0LCA2ODM0OCwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgNjgzNjQsIDY4MzY4LCAKKyAgICA2ODM3MiwgNjgzNzYsIDY4MzgwLCA2ODM4NCwgNjgzODgsIDY4MzkyLCA2ODM5NiwgNjg0MDAsIDY4NDA0LCA2ODQwOCwgCisgICAgNjg0MTIsIDY4NDE2LCA2ODQyMCwgNjg0MjQsIDY4NDI4LCA2ODQzMiwgNjg0MzYsIDY4NDQwLCA2ODQ0NCwgNjg0NDgsIAorICAgIDY4NDUyLCA2ODQ1NiwgNjg0NjAsIDY4NDY0LCA2ODQ2OCwgNjg0NzIsIDY4NDc2LCA2ODQ4MCwgNjg0ODQsIDY4NDg4LCAKKyAgICA2ODQ5MiwgNjg0OTYsIDY4NTAwLCA2ODUwNCwgNjg1MDgsIDY4NTEyLCA2ODUxNiwgNjg1MjAsIDY4NTI0LCA2ODUyOCwgCisgICAgNjg1MzIsIDY4NTM2LCA2ODU0MCwgNjg1NDQsIDY4NTQ4LCA2ODU1MiwgNjg1NTYsIDY4NTYwLCA2ODU2NCwgNjg1NjgsIAorICAgIDY4NTcyLCA2ODU3NiwgNjg1ODAsIDY4NTg0LCA2ODU4OCwgNjg1OTIsIDY4NTk2LCA2ODYwMCwgNjg2MDQsIDY4NjA4LCAKKyAgICA2ODYxMiwgNjg2MTYsIDY4NjIwLCA2ODYyNCwgNjg2MjgsIDY4NjMyLCA2ODYzNiwgNjg2NDAsIDY4NjQ0LCA2ODY0OCwgCisgICAgNjg2NTIsIDY4NjU2LCA2ODY2MCwgNjg2NjQsIDY4NjY4LCA2ODY3MiwgNjg2NzYsIDY4NjgwLCA2ODY4NCwgNjg2ODgsIAorICAgIDY4NjkyLCA2ODY5NiwgNjg3MDAsIDY4NzA0LCA2ODcwOCwgNjg3MTIsIDY4NzE2LCA2ODcyMCwgNjg3MjQsIDY4NzI4LCAKKyAgICA2ODczMiwgNjg3MzYsIDY4NzQwLCA2ODc0NCwgNjg3NDgsIDY4NzUyLCA2ODc1NiwgNjg3NjAsIDY4NzY0LCA2ODc2OCwgMCwgCisgICAgMCwgMCwgNjg3NzIsIDY4Nzc2LCA2ODc4MCwgNjg3ODQsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIDY4ODAwLCA2ODgwNCwgCisgICAgNjg4MDgsIDY4ODEyLCA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyOCwgNjg4MzIsIDY4ODM2LCA2ODg0MCwgNjg4NDQsIAorICAgIDY4ODQ4LCA2ODg1MiwgNjg4NTYsIDY4ODYwLCA2ODg2NCwgNjg4NjgsIDY4ODcyLCA2ODg3NiwgNjg4ODAsIDY4ODg0LCAKKyAgICA2ODg4OCwgNjg4OTIsIDY4ODk2LCA2ODkwMCwgNjg5MDQsIDY4OTA4LCA2ODkxMiwgNjg5MTYsIDY4OTIwLCA2ODkyNCwgCisgICAgNjg5MjgsIDY4OTMyLCA2ODkzNiwgNjg5NDAsIDY4OTQ0LCA2ODk0OCwgNjg5NTIsIDY4OTU2LCA2ODk2MCwgNjg5NjQsIAorICAgIDY4OTY4LCA2ODk3MiwgNjg5NzYsIDY4OTgwLCA2ODk4NCwgNjg5ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY4OTkyLCA2ODk5NywgNjkwMDEsIDY5MDA2LCA2OTAxMSwgNjkwMTYsIDY5MDIxLCA2OTAyNiwgNjkwMzAsIDY5MDM1LCAKKyAgICA2OTA0MCwgNjkwNDUsIDY5MDUwLCA2OTA1NSwgNjkwNjAsIDY5MDY1LCA2OTA2OSwgNjkwNzMsIDY5MDc4LCA2OTA4MiwgCisgICAgNjkwODcsIDY5MDkyLCA2OTA5NywgNjkxMDEsIDY5MTA2LCA2OTExMSwgNjkxMTYsIDY5MTIxLCA2OTEyNiwgNjkxMzAsIAorICAgIDY5MTM1LCA2OTEzOSwgNjkxNDQsIDY5MTQ4LCA2OTE1MywgNjkxNTcsIDY5MTYxLCA2OTE2NSwgNjkxNzAsIDY5MTc1LCAKKyAgICA2OTE4MCwgNjkxODgsIDY5MTk2LCA2OTIwNCwgNjkyMTIsIDY5MjE5LCA2OTIyNywgNjkyMzMsIDY5MjQxLCA2OTI0NSwgCisgICAgNjkyNDksIDY5MjUzLCA2OTI1NywgNjkyNjEsIDY5MjY1LCA2OTI2OSwgNjkyNzMsIDY5Mjc3LCA2OTI4MSwgNjkyODUsIAorICAgIDY5Mjg5LCA2OTI5MywgNjkyOTcsIDY5MzAxLCA2OTMwNSwgNjkzMDksIDY5MzEzLCA2OTMxNywgNjkzMjEsIDY5MzI1LCAKKyAgICA2OTMyOSwgNjkzMzMsIDY5MzM3LCA2OTM0MSwgNjkzNDUsIDY5MzQ5LCA2OTM1MywgNjkzNTcsIDY5MzYxLCA2OTM2NSwgCisgICAgNjkzNjksIDY5MzczLCA2OTM3NywgNjkzODEsIDY5Mzg1LCA2OTM4OCwgNjkzOTIsIDY5Mzk2LCA2OTQwMCwgNjk0MDQsIAorICAgIDY5NDA4LCA2OTQxMiwgNjk0MTYsIDY5NDIwLCA2OTQyNCwgNjk0MjgsIDY5NDMyLCA2OTQzNiwgNjk0NDAsIDY5NDQ0LCAKKyAgICA2OTQ0OCwgNjk0NTIsIDY5NDU2LCA2OTQ2MCwgNjk0NjQsIDY5NDY4LCA2OTQ3MiwgNjk0NzYsIDY5NDgwLCA2OTQ4NCwgCisgICAgNjk0ODgsIDY5NDkyLCA2OTQ5NiwgNjk1MDAsIDY5NTA0LCA2OTUwOCwgNjk1MTIsIDY5NTE2LCA2OTUyMCwgNjk1MjQsIAorICAgIDY5NTI4LCA2OTUzMiwgNjk1MzUsIDY5NTM5LCA2OTU0MywgNjk1NDYsIDY5NTUwLCA2OTU1NCwgNjk1NTgsIDY5NTYxLCAKKyAgICA2OTU2NSwgNjk1NjksIDY5NTczLCA2OTU3NywgNjk1ODEsIDY5NTg1LCA2OTU4OSwgNjk1OTMsIDY5NTk3LCA2OTYwMSwgCisgICAgNjk2MDUsIDY5NjA5LCA2OTYxMywgNjk2MTcsIDY5NjIwLCA2OTYyNCwgNjk2MjgsIDY5NjMxLCA2OTYzNSwgNjk2MzksIAorICAgIDY5NjQzLCA2OTY0NywgNjk2NTEsIDY5NjU1LCA2OTY1OCwgNjk2NjEsIDY5NjY1LCA2OTY2OSwgNjk2NzMsIDY5Njc2LCAKKyAgICA2OTY3OSwgNjk2ODMsIDY5Njg3LCA2OTY5MSwgNjk2OTUsIDY5Njk5LCA2OTcwMywgNjk3MDcsIDY5NzExLCA2OTcxNSwgCisgICAgNjk3MTksIDY5NzIzLCA2OTcyNywgNjk3MzEsIDY5NzM1LCA2OTczOSwgNjk3NDMsIDY5NzQ3LCA2OTc1MSwgNjk3NTUsIAorICAgIDY5NzU5LCA2OTc2MywgNjk3NjcsIDY5NzcxLCA2OTc3NSwgNjk3NzksIDY5NzgzLCA2OTc4NywgNjk3OTEsIDY5Nzk1LCAKKyAgICA2OTc5OSwgNjk4MDMsIDY5ODA3LCA2OTgxMSwgNjk4MTUsIDY5ODE5LCA2OTgyMywgNjk4MjcsIDY5ODMwLCA2OTgzNCwgCisgICAgNjk4MzgsIDY5ODQyLCA2OTg0NiwgNjk4NTAsIDY5ODU0LCA2OTg1OCwgNjk4NjIsIDY5ODY2LCA2OTg3MCwgNjk4NzQsIAorICAgIDY5ODc4LCA2OTg4MiwgNjk4ODYsIDY5ODkwLCA2OTg5NCwgNjk4OTgsIDY5OTAyLCA2OTkwNiwgNjk5MTAsIDY5OTE0LCAKKyAgICA2OTkxOCwgNjk5MjIsIDY5OTI2LCA2OTkzMCwgNjk5MzQsIDY5OTM4LCA2OTk0MiwgNjk5NDYsIDY5OTUwLCA2OTk1NCwgCisgICAgNjk5NTgsIDY5OTYyLCA2OTk2NiwgNjk5NzAsIDY5OTc0LCA2OTk3NywgNjk5ODEsIDY5OTg1LCA2OTk4OSwgNjk5OTMsIAorICAgIDY5OTk3LCA3MDAwMSwgNzAwMDUsIDcwMDA5LCA3MDAxMywgNzAwMTcsIDcwMDIxLCA3MDAyNSwgNzAwMjksIDcwMDMzLCAKKyAgICA3MDAzNywgNzAwNDEsIDcwMDQ0LCA3MDA0OCwgNzAwNTIsIDcwMDU2LCA3MDA2MCwgNzAwNjQsIDcwMDY4LCA3MDA3MiwgCisgICAgNzAwNzYsIDcwMDgwLCA3MDA4NCwgNzAwODgsIDcwMDkyLCA3MDA5NiwgNzAxMDAsIDcwMTA0LCA3MDEwOCwgNzAxMTIsIAorICAgIDcwMTE2LCA3MDEyMCwgNzAxMjQsIDcwMTI4LCA3MDEzMSwgNzAxMzUsIDcwMTM5LCA3MDE0MywgNzAxNDcsIDcwMTUxLCAKKyAgICA3MDE1NSwgNzAxNTksIDcwMTYzLCA3MDE2NywgNzAxNzEsIDcwMTc1LCA3MDE3OSwgNzAxODMsIDcwMTg3LCA3MDE5MSwgCisgICAgNzAxOTUsIDcwMTk5LCA3MDIwMywgNzAyMDcsIDcwMjExLCA3MDIxNSwgNzAyMTksIDcwMjIzLCA3MDIyNywgNzAyMzEsIAorICAgIDcwMjM1LCA3MDIzOSwgNzAyNDMsIDcwMjQ3LCA3MDI1MSwgNzAyNTUsIDcwMjU5LCA3MDI2MywgNzAyNjcsIDcwMjcxLCAKKyAgICA3MDI3NSwgNzAyNzksIDcwMjgzLCA3MDI4NywgNzAyOTEsIDcwMjk1LCA3MDI5OSwgNzAzMDMsIDcwMzA2LCA3MDMxMSwgCisgICAgNzAzMTUsIDcwMzIxLCA3MDMyNiwgNzAzMzIsIDcwMzM2LCA3MDM0MCwgNzAzNDQsIDcwMzQ4LCA3MDM1MiwgNzAzNTYsIAorICAgIDcwMzYwLCA3MDM2NCwgNzAzNjgsIDcwMzcyLCA3MDM3NiwgNzAzODAsIDcwMzg0LCA3MDM4OCwgNzAzOTEsIDcwMzk0LCAKKyAgICA3MDM5NywgNzA0MDAsIDcwNDAzLCA3MDQwNiwgNzA0MDksIDcwNDEyLCA3MDQxNSwgNzA0MjAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwNDI2LCA3MDQzMSwgNzA0MzYsIDcwNDQxLCAKKyAgICA3MDQ0NiwgNzA0NTMsIDcwNDYwLCA3MDQ2NSwgNzA0NzAsIDcwNDc1LCA3MDQ4MCwgNzA0ODcsIDcwNDk0LCA3MDUwMSwgCisgICAgNzA1MDgsIDcwNTE1LCA3MDUyMiwgNzA1MzIsIDcwNTQyLCA3MDU0OSwgNzA1NTYsIDcwNTYzLCA3MDU3MCwgNzA1NzYsIAorICAgIDcwNTgyLCA3MDU5MSwgNzA2MDAsIDcwNjA3LCA3MDYxNCwgNzA2MjUsIDcwNjM2LCA3MDY0MSwgNzA2NDYsIDcwNjUzLCAKKyAgICA3MDY2MCwgNzA2NjcsIDcwNjc0LCA3MDY4MSwgNzA2ODgsIDcwNjk1LCA3MDcwMiwgNzA3MDgsIDcwNzE0LCA3MDcyMCwgCisgICAgNzA3MjYsIDcwNzMzLCA3MDc0MCwgNzA3NDUsIDcwNzQ5LCA3MDc1NiwgNzA3NjMsIDcwNzcwLCA3MDc3NCwgNzA3ODEsIAorICAgIDcwNzg1LCA3MDc5MCwgNzA3OTQsIDcwODAwLCA3MDgwNSwgNzA4MTEsIDcwODE2LCA3MDgyMCwgNzA4MjQsIDcwODI3LCAKKyAgICA3MDgzMCwgNzA4MzUsIDcwODQwLCA3MDg0NSwgNzA4NTAsIDcwODU1LCA3MDg2MCwgNzA4NjUsIDcwODcwLCA3MDg3NSwgCisgICAgNzA4ODAsIDcwODg5LCA3MDg5OCwgNzA5MDMsIDcwOTA4LCA3MDkxMywgNzA5MTgsIDcwOTIzLCA3MDkyOCwgNzA5MzMsIAorICAgIDcwOTM4LCA3MDk0MywgNzA5NDgsIDcwOTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDk1OCwgNzA5NjQsIDcwOTY3LCAKKyAgICA3MDk3MCwgNzA5NzMsIDcwOTc3LCA3MDk4MSwgNzA5ODUsIDcwOTg5LCA3MDk5MiwgNzA5OTYsIDcwOTk5LCA3MTAwMywgCisgICAgNzEwMDYsIDcxMDEwLCA3MTAxNCwgNzEwMTgsIDcxMDIyLCA3MTAyNiwgNzEwMzAsIDcxMDM0LCA3MTAzNywgNzEwNDEsIAorICAgIDcxMDQ1LCA3MTA0OSwgNzEwNTMsIDcxMDU3LCA3MTA2MSwgNzEwNjUsIDcxMDY5LCA3MTA3MywgNzEwNzcsIDcxMDgxLCAKKyAgICA3MTA4NSwgNzEwODksIDcxMDkzLCA3MTA5NiwgNzExMDAsIDcxMTA0LCA3MTEwOCwgNzExMTIsIDcxMTE2LCA3MTEyMCwgCisgICAgNzExMjQsIDcxMTI4LCA3MTEzMiwgNzExMzYsIDcxMTQwLCA3MTE0NCwgNzExNDgsIDcxMTUyLCA3MTE1NiwgNzExNjAsIAorICAgIDcxMTY0LCA3MTE2OCwgNzExNzIsIDcxMTc2LCA3MTE4MCwgNzExODQsIDcxMTg4LCA3MTE5MiwgNzExOTUsIDcxMTk5LCAKKyAgICA3MTIwMywgNzEyMDcsIDcxMjExLCA3MTIxNSwgNzEyMTksIDcxMjIzLCA3MTIyNiwgNzEyMzAsIDcxMjM0LCA3MTIzOCwgCisgICAgNzEyNDIsIDcxMjQ2LCA3MTI1MCwgNzEyNTQsIDcxMjU4LCA3MTI2MiwgNzEyNjYsIDcxMjcwLCA3MTI3NCwgNzEyNzksIAorICAgIDcxMjg0LCA3MTI4NywgNzEyOTIsIDcxMjk1LCA3MTI5OCwgNzEzMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcxMzA1LCAKKyAgICA3MTMxNCwgNzEzMjMsIDcxMzMyLCA3MTM0MSwgNzEzNTAsIDcxMzU5LCA3MTM2OCwgNzEzNzcsIDcxMzg1LCA3MTM5MiwgCisgICAgNzE0MDAsIDcxNDA3LCA3MTQxNSwgNzE0MjUsIDcxNDM0LCA3MTQ0NCwgNzE0NTMsIDcxNDYzLCA3MTQ3MSwgNzE0NzgsIAorICAgIDcxNDg2LCA3MTQ5MywgNzE1MDEsIDcxNTA2LCA3MTUxMSwgNzE1MTYsIDcxNTI1LCA3MTUzMSwgNzE1MzcsIDcxNTQ0LCAKKyAgICA3MTU1MywgNzE1NjEsIDcxNTY5LCA3MTU3NywgNzE1ODQsIDcxNTkxLCA3MTU5OCwgNzE2MDUsIDcxNjEwLCA3MTYxNSwgCisgICAgNzE2MjAsIDcxNjI1LCA3MTYzMCwgNzE2MzUsIDcxNjQwLCA3MTY0NSwgNzE2NTMsIDcxNjYxLCA3MTY2NywgNzE2NzMsIAorICAgIDcxNjc4LCA3MTY4MywgNzE2ODgsIDcxNjkzLCA3MTY5OCwgNzE3MDMsIDcxNzA4LCA3MTcxMywgNzE3MjEsIDcxNzI5LCAKKyAgICA3MTczNCwgNzE3MzksIDcxNzQ5LCA3MTc1OSwgNzE3NjYsIDcxNzczLCA3MTc4MiwgNzE3OTEsIDcxODAzLCA3MTgxNSwgCisgICAgNzE4MjEsIDcxODI3LCA3MTgzNSwgNzE4NDMsIDcxODUzLCA3MTg2MywgNzE4NzAsIDcxODc3LCA3MTg4MiwgNzE4ODcsIAorICAgIDcxODk5LCA3MTkxMSwgNzE5MTksIDcxOTI3LCA3MTkzNywgNzE5NDcsIDcxOTU5LCA3MTk3MSwgNzE5ODAsIDcxOTg5LCAKKyAgICA3MTk5NiwgNzIwMDMsIDcyMDEwLCA3MjAxNywgNzIwMjYsIDcyMDM1LCA3MjA0MCwgNzIwNDUsIDcyMDUyLCA3MjA1OSwgCisgICAgNzIwNjYsIDcyMDczLCA3MjA4NSwgNzIwOTcsIDcyMTAyLCA3MjEwNywgNzIxMTIsIDcyMTE3LCA3MjEyMiwgNzIxMjcsIAorICAgIDcyMTMyLCA3MjEzNywgNzIxNDEsIDcyMTQ2LCA3MjE1MSwgNzIxNTYsIDcyMTYxLCA3MjE2NiwgNzIxNzIsIDcyMTc3LCAKKyAgICA3MjE4MiwgNzIxODksIDcyMTk2LCA3MjIwMywgNzIyMTAsIDcyMjE3LCA3MjIyNiwgNzIyMzUsIDcyMjQxLCA3MjI0NywgCisgICAgNzIyNTMsIDcyMjU5LCA3MjI2NiwgNzIyNzMsIDcyMjgwLCA3MjI4NywgNzIyOTQsIDcyMjk4LCA3MjMwNSwgNzIzMTAsIAorICAgIDcyMzE1LCA3MjMyMiwgMCwgNzIzMzUsIDcyMzQzLCA3MjM1MSwgNzIzNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcyMzY1LCA3MjM3NCwgNzIzODMsIDcyMzkyLCA3MjQwMSwgNzI0MTAsIDcyNDE5LCA3MjQyOCwgNzI0MzcsIAorICAgIDcyNDQ2LCA3MjQ1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI0MzQsIAotICAgIDcyNDQxLCA3MjQ0NywgNzI0NTQsIDcyNDYyLCA3MjQ3MCwgNzI0NzcsIDcyNDg1LCA3MjQ5MiwgNzI0OTgsIDcyNTA0LCAKLSAgICA3MjUxMSwgNzI1MTcsIDcyNTIzLCA3MjUyOSwgNzI1MzYsIDcyNTQzLCA3MjU1MCwgNzI1NTcsIDcyNTY0LCA3MjU3MSwgCi0gICAgNzI1NzgsIDcyNTg1LCA3MjU5MiwgNzI1OTksIDcyNjA2LCA3MjYxMywgNzI2MjAsIDcyNjI3LCA3MjYzMywgNzI2NDAsIAotICAgIDcyNjQ3LCA3MjY1NCwgNzI2NjEsIDcyNjY4LCA3MjY3NSwgNzI2ODIsIDcyNjg5LCA3MjY5NiwgNzI3MDMsIDcyNzEwLCAKLSAgICA3MjcxNywgNzI3MjQsIDcyNzMxLCA3MjczOCwgNzI3NDUsIDcyNzUyLCA3Mjc1OSwgNzI3NjcsIDcyNzc1LCA3Mjc4MywgCi0gICAgNzI3OTEsIDAsIDAsIDAsIDAsIDcyNzk5LCA3MjgwOCwgNzI4MTcsIDcyODI2LCA3MjgzNSwgNzI4NDQsIDcyODUzLCAKLSAgICA3Mjg2MCwgNzI4NjcsIDcyODc0LCAwLCAwLCAwLCAwLCAwLCAwLCA3Mjg4MSwgNzI4ODUsIDcyODkwLCA3Mjg5NSwgNzI5MDAsIAotICAgIDcyOTA1LCA3MjkxMCwgNzI5MTUsIDcyOTIwLCA3MjkyNSwgNzI5MzAsIDcyOTM1LCA3MjkzOSwgNzI5NDMsIDcyOTQ4LCAKLSAgICA3Mjk1MywgNzI5NTcsIDcyOTYyLCA3Mjk2NywgNzI5NzIsIDcyOTc3LCA3Mjk4MiwgNzI5ODcsIDcyOTkyLCA3Mjk5NiwgCi0gICAgNzMwMDAsIDczMDA1LCA3MzAxMCwgNzMwMTQsIDczMDE4LCA3MzAyMiwgNzMwMjYsIDczMDMwLCA3MzAzNCwgNzMwMzgsIAotICAgIDczMDQzLCA3MzA0OCwgNzMwNTMsIDczMDU4LCA3MzA2MywgNzMwNzAsIDczMDc2LCA3MzA4MSwgNzMwODYsIDczMDkxLCAKLSAgICA3MzA5NiwgNzMxMDIsIDczMTA5LCA3MzExNSwgNzMxMjIsIDczMTI4LCA3MzEzNCwgNzMxMzksIDczMTQ2LCA3MzE1MiwgCi0gICAgNzMxNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMTYzLCA3MzE2NywgNzMxNzEsIDczMTc0LCA3MzE3OCwgNzMxODEsIAotICAgIDczMTg1LCA3MzE4OCwgNzMxOTIsIDczMTk2LCA3MzIwMSwgNzMyMDUsIDczMjEwLCA3MzIxMywgNzMyMTcsIDczMjIxLCAKLSAgICA3MzIyNCwgNzMyMjgsIDczMjMyLCA3MzIzNSwgNzMyMzksIDczMjQzLCA3MzI0NywgNzMyNTEsIDczMjU1LCA3MzI1OSwgCi0gICAgNzMyNjMsIDczMjY3LCA3MzI3MSwgNzMyNzUsIDczMjc5LCA3MzI4MywgNzMyODcsIDczMjkxLCA3MzI5NSwgNzMyOTksIAotICAgIDczMzAzLCA3MzMwNywgNzMzMTAsIDczMzEzLCA3MzMxNywgNzMzMjEsIDczMzI1LCA3MzMyOCwgNzMzMzEsIDczMzM0LCAKLSAgICA3MzMzOCwgNzMzNDIsIDczMzQ2LCA3MzM1MCwgNzMzNTMsIDczMzU2LCA3MzM2MCwgNzMzNjUsIDczMzcwLCA3MzM3NCwgCi0gICAgNzMzNzksIDczMzgzLCA3MzM4OCwgNzMzOTMsIDczMzk5LCA3MzQwNCwgNzM0MTAsIDczNDE0LCA3MzQxOSwgNzM0MjQsIAotICAgIDczNDI4LCA3MzQzMywgNzM0MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczNDQyLCA3MzQ0NSwgNzM0NDksIAotICAgIDczNDUzLCA3MzQ1NiwgNzM0NTksIDczNDYyLCA3MzQ2NSwgNzM0NjgsIDczNDcxLCA3MzQ3NCwgNzM0NzcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDczNDgwLCA3MzQ4NSwgNzM0ODksIDczNDkzLCA3MzQ5NywgNzM1MDEsIDczNTA1LCA3MzUwOSwgNzM1MTMsIAotICAgIDczNTE3LCA3MzUyMSwgNzM1MjUsIDczNTI5LCA3MzUzMywgNzM1MzcsIDczNTQxLCA3MzU0NSwgNzM1NTAsIDczNTU1LCAKLSAgICA3MzU2MSwgNzM1NjcsIDczNTc0LCA3MzU3OSwgNzM1ODQsIDczNTkwLCA3MzU5NCwgNzM1OTksIDczNjAyLCAwLCAwLCAwLCAKLSAgICAwLCA3MzYwNSwgNzM2MTIsIDczNjE4LCA3MzYyNCwgNzM2MzAsIDczNjM2LCA3MzY0MiwgNzM2NDgsIDczNjU0LCA3MzY2MCwgCi0gICAgNzM2NjYsIDczNjcyLCA3MzY3OSwgNzM2ODYsIDczNjkzLCA3MzY5OSwgNzM3MDYsIDczNzEzLCA3MzcyMCwgNzM3MjcsIAotICAgIDczNzM0LCA3Mzc0MCwgNzM3NDYsIDczNzUzLCA3Mzc1OSwgNzM3NjYsIDczNzczLCA3Mzc3OSwgNzM3ODUsIDczNzkyLCAKLSAgICA3Mzc5OSwgNzM4MDYsIDczODEyLCA3MzgxOSwgNzM4MjYsIDczODMyLCA3MzgzOSwgNzM4NDUsIDczODUyLCA3Mzg1OSwgCi0gICAgNzM4NjUsIDczODcxLCA3Mzg3OCwgNzM4ODQsIDczODkxLCA3Mzg5OCwgNzM5MDcsIDczOTE0LCA3MzkyMSwgNzM5MjUsIAotICAgIDczOTMwLCA3MzkzNSwgNzM5NDAsIDczOTQ1LCA3Mzk0OSwgNzM5NTMsIDczOTU4LCA3Mzk2MiwgNzM5NjcsIDczOTcyLCAKLSAgICA3Mzk3NywgNzM5ODEsIDczOTg1LCA3Mzk5MCwgNzM5OTQsIDczOTk5LCA3NDAwMywgNzQwMDgsIDc0MDEzLCA3NDAxOCwgCi0gICAgNzQwMjMsIDc0MDI3LCA3NDAzMiwgNzQwMzcsIDc0MDQyLCA3NDA0OCwgNzQwNTMsIDc0MDU5LCA3NDA2NSwgNzQwNzEsIAotICAgIDc0MDc3LCA3NDA4MywgNzQwODgsIDc0MDk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDA5OCwgCi0gICAgNzQxMDMsIDc0MTA3LCA3NDExMSwgNzQxMTUsIDc0MTE5LCA3NDEyMywgNzQxMjcsIDc0MTMxLCA3NDEzNSwgNzQxMzksIAotICAgIDc0MTQzLCA3NDE0NywgNzQxNTEsIDc0MTU1LCA3NDE1OSwgNzQxNjMsIDc0MTY3LCA3NDE3MSwgNzQxNzUsIDc0MTc5LCAKLSAgICA3NDE4MywgNzQxODcsIDc0MTkxLCA3NDE5NSwgNzQxOTksIDc0MjAzLCA3NDIwNywgNzQyMTEsIDc0MjE1LCAwLCAwLCAwLCAKLSAgICA3NDIxOSwgNzQyMjMsIDc0MjI3LCA3NDIzMSwgNzQyMzUsIDc0MjM4LCA3NDI0NCwgNzQyNDcsIDc0MjUxLCA3NDI1NCwgCi0gICAgNzQyNjAsIDc0MjY2LCA3NDI3NCwgNzQyNzcsIDc0MjgxLCA3NDI4NCwgNzQyODcsIDc0MjkzLCA3NDI5OSwgNzQzMDMsIAotICAgIDc0MzA5LCA3NDMxMywgNzQzMTcsIDc0MzIzLCA3NDMyNywgNzQzMzMsIDc0MzM5LCA3NDM0MywgNzQzNDcsIDc0MzUzLCAKLSAgICA3NDM1NywgNzQzNjMsIDc0MzY5LCA3NDM3MywgNzQzNzksIDc0MzgzLCA3NDM4OSwgNzQzOTIsIDc0Mzk1LCA3NDQwMSwgCi0gICAgNzQ0MDUsIDc0NDExLCA3NDQxNCwgNzQ0MTcsIDc0NDIwLCA3NDQyNiwgNzQ0MzAsIDc0NDM0LCA3NDQ0MCwgNzQ0NDYsIAotICAgIDc0NDQ5LCA3NDQ1MiwgNzQ0NTgsIDc0NDYzLCA3NDQ2OCwgNzQ0NzMsIDc0NDgwLCA3NDQ4NSwgNzQ0OTIsIDc0NDk3LCAKLSAgICA3NDUwNCwgNzQ1MDksIDc0NTE0LCA3NDUxOSwgNzQ1MjQsIDc0NTI3LCA3NDUzMSwgNzQ1MzUsIDc0NTQwLCA3NDU0NSwgCi0gICAgNzQ1NTAsIDc0NTU1LCA3NDU2MCwgNzQ1NjUsIDc0NTcwLCA3NDU3NSwgNzQ1ODIsIDc0NTg3LCAwLCA3NDU5NCwgNzQ1OTcsIAotICAgIDc0NjAxLCA3NDYwNCwgNzQ2MDcsIDc0NjEwLCA3NDYxMywgNzQ2MTYsIDc0NjE5LCA3NDYyMiwgNzQ2MjUsIDAsIDAsIDAsIAotICAgIDAsIDc0NjI4LCA3NDYzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ2NDAsIDc0NjQzLCA3NDY0NiwgNzQ2NDksIDc0NjUyLCAKLSAgICA3NDY1NiwgNzQ2NTksIDc0NjYyLCA3NDY2NiwgNzQ2NzAsIDc0Njc0LCA3NDY3OCwgNzQ2ODIsIDc0Njg2LCA3NDY5MCwgCi0gICAgNzQ2OTQsIDc0Njk4LCA3NDcwMiwgNzQ3MDYsIDc0NzEwLCA3NDcxNCwgNzQ3MTgsIDc0NzIyLCA3NDcyNiwgNzQ3MzAsIAotICAgIDc0NzMzLCA3NDczNywgNzQ3NDAsIDc0NzQ0LCA3NDc0OCwgNzQ3NTIsIDc0NzU2LCA3NDc2MCwgNzQ3NjMsIDc0NzY3LCAKLSAgICA3NDc3MCwgNzQ3NzMsIDc0Nzc3LCA3NDc4MSwgNzQ3ODUsIDc0Nzg4LCA3NDc5MSwgNzQ3OTYsIDc0ODAwLCA3NDgwNSwgCi0gICAgNzQ4MTAsIDc0ODE0LCA3NDgxOSwgNzQ4MjMsIDc0ODI4LCA3NDgzMywgNzQ4MzgsIDc0ODQyLCA3NDg0NiwgNzQ4NTEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0ODU2LCA3NDg2MSwgNzQ4NjYsIDc0ODcxLCA3NDg3NywgNzQ4ODIsIDc0ODg3LCAKLSAgICA3NDg5MiwgNzQ4OTcsIDc0OTAyLCA3NDkwNiwgNzQ5MTAsIDc0OTE1LCA3NDkyMCwgMCwgMCwgNzQ5MjYsIDc0OTMwLCAKLSAgICA3NDkzMywgNzQ5MzYsIDc0OTM5LCA3NDk0MiwgNzQ5NDUsIDc0OTQ4LCA3NDk1MSwgNzQ5NTQsIDAsIDAsIDc0OTU3LCAKLSAgICA3NDk2MiwgNzQ5NjcsIDc0OTczLCA3NDk4MCwgNzQ5ODYsIDc0OTkyLCA3NDk5OCwgNzUwMDQsIDc1MDEwLCA3NTAxNiwgCi0gICAgNzUwMjIsIDc1MDI4LCA3NTAzNCwgNzUwNDAsIDc1MDQ2LCA3NTA1MSwgNzUwNTYsIDc1MDYxLCA3NTA2NywgNzUwNzMsIAotICAgIDc1MDgwLCA3NTA4NiwgNzUwOTIsIDc1MDk3LCA3NTEwNCwgNzUxMTEsIDc1MTE4LCA3NTEyNCwgNzUxMjksIDc1MTM0LCAKLSAgICA3NTEzOSwgMCwgMCwgMCwgMCwgNzUxNDcsIDc1MTUzLCA3NTE1OSwgNzUxNjUsIDc1MTcxLCA3NTE3NywgNzUxODMsIAotICAgIDc1MTg5LCA3NTE5NSwgNzUyMDEsIDc1MjA3LCA3NTIxMywgNzUyMTksIDc1MjI1LCA3NTIzMSwgNzUyMzcsIDc1MjQzLCAKLSAgICA3NTI0OSwgNzUyNTUsIDc1MjYxLCA3NTI2NywgNzUyNzIsIDc1Mjc3LCA3NTI4MywgNzUyODksIDc1Mjk1LCA3NTMwMSwgCi0gICAgNzUzMDcsIDc1MzEzLCA3NTMxOSwgNzUzMjUsIDc1MzMxLCA3NTMzNywgNzUzNDMsIDc1MzQ5LCA3NTM1NSwgNzUzNjEsIAotICAgIDc1MzY3LCA3NTM3MywgNzUzNzksIDc1Mzg1LCA3NTM5MSwgNzUzOTcsIDc1NDAzLCA3NTQwOSwgNzU0MTUsIDc1NDIxLCAKLSAgICA3NTQyNiwgNzU0MzEsIDc1NDM3LCA3NTQ0MiwgNzU0NDYsIDc1NDUxLCA3NTQ1NSwgNzU0NTksIDc1NDYzLCA3NTQ2OSwgCi0gICAgNzU0NzQsIDc1NDc5LCA3NTQ4NCwgNzU0ODksIDc1NDk0LCA3NTQ5OSwgNzU1MDQsIDc1NTExLCA3NTUxOCwgNzU1MjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNDYyLCA3MjQ2OSwgNzI0NzUsIDcyNDgyLCA3MjQ5MCwgNzI0OTgsIAorICAgIDcyNTA1LCA3MjUxMywgNzI1MjAsIDcyNTI2LCA3MjUzMiwgNzI1MzksIDcyNTQ1LCA3MjU1MSwgNzI1NTcsIDcyNTY0LCAKKyAgICA3MjU3MSwgNzI1NzgsIDcyNTg1LCA3MjU5MiwgNzI1OTksIDcyNjA2LCA3MjYxMywgNzI2MjAsIDcyNjI3LCA3MjYzNCwgCisgICAgNzI2NDEsIDcyNjQ4LCA3MjY1NSwgNzI2NjEsIDcyNjY4LCA3MjY3NSwgNzI2ODIsIDcyNjg5LCA3MjY5NiwgNzI3MDMsIAorICAgIDcyNzEwLCA3MjcxNywgNzI3MjQsIDcyNzMxLCA3MjczOCwgNzI3NDUsIDcyNzUyLCA3Mjc1OSwgNzI3NjYsIDcyNzczLCAKKyAgICA3Mjc4MCwgNzI3ODcsIDcyNzk1LCA3MjgwMywgNzI4MTEsIDcyODE5LCAwLCAwLCAwLCAwLCA3MjgyNywgNzI4MzYsIAorICAgIDcyODQ1LCA3Mjg1NCwgNzI4NjMsIDcyODcyLCA3Mjg4MSwgNzI4ODgsIDcyODk1LCA3MjkwMiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNzI5MDksIDcyOTEzLCA3MjkxOCwgNzI5MjMsIDcyOTI4LCA3MjkzMywgNzI5MzgsIDcyOTQzLCA3Mjk0OCwgNzI5NTMsIAorICAgIDcyOTU4LCA3Mjk2MywgNzI5NjcsIDcyOTcxLCA3Mjk3NiwgNzI5ODEsIDcyOTg1LCA3Mjk5MCwgNzI5OTUsIDczMDAwLCAKKyAgICA3MzAwNSwgNzMwMTAsIDczMDE1LCA3MzAyMCwgNzMwMjQsIDczMDI4LCA3MzAzMywgNzMwMzgsIDczMDQyLCA3MzA0NiwgCisgICAgNzMwNTAsIDczMDU0LCA3MzA1OCwgNzMwNjIsIDczMDY2LCA3MzA3MSwgNzMwNzYsIDczMDgxLCA3MzA4NiwgNzMwOTEsIAorICAgIDczMDk4LCA3MzEwNCwgNzMxMDksIDczMTE0LCA3MzExOSwgNzMxMjQsIDczMTMwLCA3MzEzNywgNzMxNDMsIDczMTUwLCAKKyAgICA3MzE1NiwgNzMxNjIsIDczMTY3LCA3MzE3NCwgNzMxODAsIDczMTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzE5MSwgCisgICAgNzMxOTUsIDczMTk5LCA3MzIwMiwgNzMyMDYsIDczMjA5LCA3MzIxMywgNzMyMTYsIDczMjIwLCA3MzIyNCwgNzMyMjksIAorICAgIDczMjMzLCA3MzIzOCwgNzMyNDEsIDczMjQ1LCA3MzI0OSwgNzMyNTIsIDczMjU2LCA3MzI2MCwgNzMyNjMsIDczMjY3LCAKKyAgICA3MzI3MSwgNzMyNzUsIDczMjc5LCA3MzI4MywgNzMyODcsIDczMjkxLCA3MzI5NSwgNzMyOTksIDczMzAzLCA3MzMwNywgCisgICAgNzMzMTEsIDczMzE1LCA3MzMxOSwgNzMzMjMsIDczMzI3LCA3MzMzMSwgNzMzMzUsIDczMzM4LCA3MzM0MSwgNzMzNDUsIAorICAgIDczMzQ5LCA3MzM1MywgNzMzNTYsIDczMzU5LCA3MzM2MiwgNzMzNjYsIDczMzcwLCA3MzM3NCwgNzMzNzgsIDczMzgxLCAKKyAgICA3MzM4NCwgNzMzODgsIDczMzkzLCA3MzM5OCwgNzM0MDIsIDczNDA3LCA3MzQxMSwgNzM0MTYsIDczNDIxLCA3MzQyNywgCisgICAgNzM0MzIsIDczNDM4LCA3MzQ0MiwgNzM0NDcsIDczNDUyLCA3MzQ1NiwgNzM0NjEsIDczNDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3MzQ3MCwgNzM0NzMsIDczNDc3LCA3MzQ4MSwgNzM0ODQsIDczNDg3LCA3MzQ5MCwgNzM0OTMsIDczNDk2LCAKKyAgICA3MzQ5OSwgNzM1MDIsIDczNTA1LCAwLCAwLCAwLCAwLCAwLCAwLCA3MzUwOCwgNzM1MTMsIDczNTE3LCA3MzUyMSwgNzM1MjUsIAorICAgIDczNTI5LCA3MzUzMywgNzM1MzcsIDczNTQxLCA3MzU0NSwgNzM1NDksIDczNTUzLCA3MzU1NywgNzM1NjEsIDczNTY1LCAKKyAgICA3MzU2OSwgNzM1NzMsIDczNTc4LCA3MzU4MywgNzM1ODksIDczNTk1LCA3MzYwMiwgNzM2MDcsIDczNjEyLCA3MzYxOCwgCisgICAgNzM2MjIsIDczNjI3LCA3MzYzMCwgMCwgMCwgMCwgMCwgNzM2MzMsIDczNjQwLCA3MzY0NiwgNzM2NTIsIDczNjU4LCAKKyAgICA3MzY2NCwgNzM2NzAsIDczNjc2LCA3MzY4MiwgNzM2ODgsIDczNjk0LCA3MzcwMCwgNzM3MDcsIDczNzE0LCA3MzcyMSwgCisgICAgNzM3MjcsIDczNzM0LCA3Mzc0MSwgNzM3NDgsIDczNzU1LCA3Mzc2MiwgNzM3NjgsIDczNzc0LCA3Mzc4MSwgNzM3ODcsIAorICAgIDczNzk0LCA3MzgwMSwgNzM4MDcsIDczODEzLCA3MzgyMCwgNzM4MjcsIDczODM0LCA3Mzg0MCwgNzM4NDcsIDczODU0LCAKKyAgICA3Mzg2MCwgNzM4NjcsIDczODczLCA3Mzg4MCwgNzM4ODcsIDczODkzLCA3Mzg5OSwgNzM5MDYsIDczOTEyLCA3MzkxOSwgCisgICAgNzM5MjYsIDczOTM1LCA3Mzk0MiwgNzM5NDksIDczOTUzLCA3Mzk1OCwgNzM5NjMsIDczOTY4LCA3Mzk3MywgNzM5NzcsIAorICAgIDczOTgxLCA3Mzk4NiwgNzM5OTAsIDczOTk1LCA3NDAwMCwgNzQwMDUsIDc0MDA5LCA3NDAxMywgNzQwMTgsIDc0MDIyLCAKKyAgICA3NDAyNywgNzQwMzEsIDc0MDM2LCA3NDA0MSwgNzQwNDYsIDc0MDUxLCA3NDA1NSwgNzQwNjAsIDc0MDY1LCA3NDA3MCwgCisgICAgNzQwNzYsIDc0MDgxLCA3NDA4NywgNzQwOTMsIDc0MDk5LCA3NDEwNSwgNzQxMTEsIDc0MTE2LCA3NDEyMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQxMjYsIDc0MTMxLCA3NDEzNSwgNzQxMzksIDc0MTQzLCA3NDE0NywgNzQxNTEsIAorICAgIDc0MTU1LCA3NDE1OSwgNzQxNjMsIDc0MTY3LCA3NDE3MSwgNzQxNzUsIDc0MTc5LCA3NDE4MywgNzQxODcsIDc0MTkxLCAKKyAgICA3NDE5NSwgNzQxOTksIDc0MjAzLCA3NDIwNywgNzQyMTEsIDc0MjE1LCA3NDIxOSwgNzQyMjMsIDc0MjI3LCA3NDIzMSwgCisgICAgNzQyMzUsIDc0MjM5LCA3NDI0MywgMCwgMCwgMCwgNzQyNDcsIDc0MjUxLCA3NDI1NSwgNzQyNTksIDc0MjYzLCA3NDI2NiwgCisgICAgNzQyNzIsIDc0Mjc1LCA3NDI3OSwgNzQyODIsIDc0Mjg4LCA3NDI5NCwgNzQzMDIsIDc0MzA1LCA3NDMwOSwgNzQzMTIsIAorICAgIDc0MzE1LCA3NDMyMSwgNzQzMjcsIDc0MzMxLCA3NDMzNywgNzQzNDEsIDc0MzQ1LCA3NDM1MSwgNzQzNTUsIDc0MzYxLCAKKyAgICA3NDM2NywgNzQzNzEsIDc0Mzc1LCA3NDM4MSwgNzQzODUsIDc0MzkxLCA3NDM5NywgNzQ0MDEsIDc0NDA3LCA3NDQxMSwgCisgICAgNzQ0MTcsIDc0NDIwLCA3NDQyMywgNzQ0MjksIDc0NDMzLCA3NDQzOSwgNzQ0NDIsIDc0NDQ1LCA3NDQ0OCwgNzQ0NTQsIAorICAgIDc0NDU4LCA3NDQ2MiwgNzQ0NjgsIDc0NDc0LCA3NDQ3NywgNzQ0ODAsIDc0NDg2LCA3NDQ5MSwgNzQ0OTYsIDc0NTAxLCAKKyAgICA3NDUwOCwgNzQ1MTMsIDc0NTIwLCA3NDUyNSwgNzQ1MzIsIDc0NTM3LCA3NDU0MiwgNzQ1NDcsIDc0NTUyLCA3NDU1NSwgCisgICAgNzQ1NTksIDc0NTYzLCA3NDU2OCwgNzQ1NzMsIDc0NTc4LCA3NDU4MywgNzQ1ODgsIDc0NTkzLCA3NDU5OCwgNzQ2MDMsIAorICAgIDc0NjEwLCA3NDYxNSwgMCwgNzQ2MjIsIDc0NjI1LCA3NDYyOSwgNzQ2MzIsIDc0NjM1LCA3NDYzOCwgNzQ2NDEsIDc0NjQ0LCAKKyAgICA3NDY0NywgNzQ2NTAsIDc0NjUzLCAwLCAwLCAwLCAwLCA3NDY1NiwgNzQ2NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc1NTMyLCA3NTUzNywgNzU1NDIsIDc1NTQ3LCA3NTU1NCwgNzU1NjEsIDc1NTY1LCA3NTU2OSwgNzU1NzQsIDc1NTc5LCAKLSAgICA3NTU4NCwgNzU1ODksIDc1NTk0LCA3NTU5OSwgNzU2MDQsIDc1NjA5LCA3NTYxNCwgNzU2MjAsIDc1NjI2LCA3NTYzMiwgCi0gICAgNzU2MzgsIDc1NjQ0LCA3NTY0OCwgNzU2NTQsIDc1NjU4LCA3NTY2NCwgNzU2NzEsIDc1Njc3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NTY4MSwgNzU2ODUsIDc1Njg5LCA3NTY5MywgNzU2OTcsIDc1NzAxLCAwLCAwLCA3NTcwNSwgNzU3MDksIAotICAgIDc1NzEzLCA3NTcxNywgNzU3MjEsIDc1NzI1LCAwLCAwLCA3NTcyOSwgNzU3MzMsIDc1NzM3LCA3NTc0MSwgNzU3NDUsIAotICAgIDc1NzQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTc1MywgNzU3NTcsIDc1NzYxLCA3NTc2NSwgNzU3NjksIAotICAgIDc1NzczLCA3NTc3NywgMCwgNzU3ODEsIDc1Nzg1LCA3NTc4OSwgNzU3OTMsIDc1Nzk3LCA3NTgwMSwgNzU4MDUsIDAsIDAsIAorICAgIDc0NjY4LCA3NDY3MSwgNzQ2NzQsIDc0Njc3LCA3NDY4MCwgNzQ2ODQsIDc0Njg3LCA3NDY5MCwgNzQ2OTQsIDc0Njk4LCAKKyAgICA3NDcwMiwgNzQ3MDYsIDc0NzEwLCA3NDcxNCwgNzQ3MTgsIDc0NzIyLCA3NDcyNiwgNzQ3MzAsIDc0NzM0LCA3NDczOCwgCisgICAgNzQ3NDIsIDc0NzQ2LCA3NDc1MCwgNzQ3NTQsIDc0NzU4LCA3NDc2MSwgNzQ3NjUsIDc0NzY4LCA3NDc3MiwgNzQ3NzYsIAorICAgIDc0NzgwLCA3NDc4NCwgNzQ3ODgsIDc0NzkxLCA3NDc5NSwgNzQ3OTgsIDc0ODAxLCA3NDgwNSwgNzQ4MDksIDc0ODEzLCAKKyAgICA3NDgxNiwgNzQ4MTksIDc0ODI0LCA3NDgyOCwgNzQ4MzMsIDc0ODM4LCA3NDg0MiwgNzQ4NDcsIDc0ODUxLCA3NDg1NiwgCisgICAgNzQ4NjEsIDc0ODY2LCA3NDg3MCwgNzQ4NzQsIDc0ODc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDg4NCwgCisgICAgNzQ4ODksIDc0ODk0LCA3NDg5OSwgNzQ5MDUsIDc0OTEwLCA3NDkxNSwgNzQ5MjAsIDc0OTI1LCA3NDkzMCwgNzQ5MzQsIAorICAgIDc0OTM4LCA3NDk0MywgNzQ5NDgsIDAsIDAsIDc0OTU0LCA3NDk1OCwgNzQ5NjEsIDc0OTY0LCA3NDk2NywgNzQ5NzAsIAorICAgIDc0OTczLCA3NDk3NiwgNzQ5NzksIDc0OTgyLCAwLCAwLCA3NDk4NSwgNzQ5OTAsIDc0OTk1LCA3NTAwMSwgNzUwMDgsIAorICAgIDc1MDE0LCA3NTAyMCwgNzUwMjYsIDc1MDMyLCA3NTAzOCwgNzUwNDQsIDc1MDUwLCA3NTA1NiwgNzUwNjIsIDc1MDY4LCAKKyAgICA3NTA3NCwgNzUwNzksIDc1MDg0LCA3NTA4OSwgNzUwOTUsIDc1MTAxLCA3NTEwOCwgNzUxMTQsIDc1MTIwLCA3NTEyNSwgCisgICAgNzUxMzIsIDc1MTM5LCA3NTE0NiwgNzUxNTIsIDc1MTU3LCA3NTE2MiwgNzUxNjcsIDAsIDAsIDAsIDAsIDc1MTc1LCAKKyAgICA3NTE4MSwgNzUxODcsIDc1MTkzLCA3NTE5OSwgNzUyMDUsIDc1MjExLCA3NTIxNywgNzUyMjMsIDc1MjI5LCA3NTIzNSwgCisgICAgNzUyNDEsIDc1MjQ3LCA3NTI1MywgNzUyNTksIDc1MjY1LCA3NTI3MSwgNzUyNzcsIDc1MjgzLCA3NTI4OSwgNzUyOTUsIAorICAgIDc1MzAwLCA3NTMwNSwgNzUzMTEsIDc1MzE3LCA3NTMyMywgNzUzMjksIDc1MzM1LCA3NTM0MSwgNzUzNDcsIDc1MzUzLCAKKyAgICA3NTM1OSwgNzUzNjUsIDc1MzcxLCA3NTM3NywgNzUzODMsIDc1Mzg5LCA3NTM5NSwgNzU0MDEsIDc1NDA3LCA3NTQxMywgCisgICAgNzU0MTksIDc1NDI1LCA3NTQzMSwgNzU0MzcsIDc1NDQzLCA3NTQ0OSwgNzU0NTQsIDc1NDU5LCA3NTQ2NSwgNzU0NzAsIAorICAgIDc1NDc0LCA3NTQ3OSwgNzU0ODMsIDc1NDg3LCA3NTQ5MSwgNzU0OTcsIDc1NTAyLCA3NTUwNywgNzU1MTIsIDc1NTE3LCAKKyAgICA3NTUyMiwgNzU1MjcsIDc1NTMyLCA3NTUzOSwgNzU1NDYsIDc1NTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTU2MCwgNzU1NjUsIDc1NTcwLCA3NTU3NSwgCisgICAgNzU1ODIsIDc1NTg5LCA3NTU5MywgNzU1OTcsIDc1NjAyLCA3NTYwNywgNzU2MTIsIDc1NjE3LCA3NTYyMiwgNzU2MjcsIAorICAgIDc1NjMyLCA3NTYzNywgNzU2NDIsIDc1NjQ4LCA3NTY1NCwgNzU2NjAsIDc1NjY2LCA3NTY3MiwgNzU2NzYsIDc1NjgyLCAKKyAgICA3NTY4NiwgNzU2OTIsIDc1Njk5LCA3NTcwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU3MDksIDc1NzEzLCAKKyAgICA3NTcxNywgNzU3MjEsIDc1NzI1LCA3NTcyOSwgMCwgMCwgNzU3MzMsIDc1NzM3LCA3NTc0MSwgNzU3NDUsIDc1NzQ5LCAKKyAgICA3NTc1MywgMCwgMCwgNzU3NTcsIDc1NzYxLCA3NTc2NSwgNzU3NjksIDc1NzczLCA3NTc3NywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzU3ODEsIDc1Nzg1LCA3NTc4OSwgNzU3OTMsIDc1Nzk3LCA3NTgwMSwgNzU4MDUsIDAsIDc1ODA5LCAKKyAgICA3NTgxMywgNzU4MTcsIDc1ODIxLCA3NTgyNSwgNzU4MjksIDc1ODMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3NTgwOSwgNzU4MTQsIDc1ODE5LCA3NTgyNCwgNzU4MjksIDc1ODMzLCA3NTgzNywgNzU4NDIsIDc1ODQ3LCA3NTg1MiwgCi0gICAgNzU4NTcsIDc1ODYyLCA3NTg2NywgNzU4NzIsIDc1ODc3LCA3NTg4MiwgNzU4ODYsIDc1ODkxLCA3NTg5NiwgNzU5MDEsIAotICAgIDc1OTA2LCA3NTkxMSwgNzU5MTYsIDc1OTIxLCA3NTkyNiwgNzU5MzEsIDc1OTM2LCA3NTk0MSwgNzU5NDgsIDc1OTU1LCAKLSAgICA3NTk2MiwgNzU5NjksIDc1OTc2LCA3NTk4MywgNzU5OTAsIDc1OTk3LCA3NjAwMywgNzYwMDksIDc2MDE1LCA3NjAyMSwgCi0gICAgNzYwMjcsIDc2MDMzLCA3NjAzOSwgNzYwNDUsIDc2MDQ5LCA3NjA1NSwgMCwgMCwgNzYwNjEsIDc2MDY2LCA3NjA3MCwgCi0gICAgNzYwNzQsIDc2MDc4LCA3NjA4MiwgNzYwODYsIDc2MDkwLCA3NjA5NCwgNzYwOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1ODM3LCA3NTg0MiwgNzU4NDcsIDc1ODUyLCAKKyAgICA3NTg1NywgNzU4NjEsIDc1ODY1LCA3NTg3MCwgNzU4NzUsIDc1ODgwLCA3NTg4NSwgNzU4OTAsIDc1ODk1LCA3NTkwMCwgCisgICAgNzU5MDUsIDc1OTEwLCA3NTkxNCwgNzU5MTksIDc1OTI0LCA3NTkyOSwgNzU5MzQsIDc1OTM5LCA3NTk0NCwgNzU5NDksIAorICAgIDc1OTU0LCA3NTk1OSwgNzU5NjQsIDc1OTY5LCA3NTk3NiwgNzU5ODMsIDc1OTkwLCA3NTk5NywgNzYwMDQsIDc2MDExLCAKKyAgICA3NjAxOCwgNzYwMjUsIDc2MDMxLCA3NjAzNywgNzYwNDMsIDc2MDQ5LCA3NjA1NSwgNzYwNjEsIDc2MDY3LCA3NjA3MywgCisgICAgNzYwNzcsIDc2MDgzLCAwLCAwLCA3NjA4OSwgNzYwOTQsIDc2MDk4LCA3NjEwMiwgNzYxMDYsIDc2MTEwLCA3NjExNCwgCisgICAgNzYxMTgsIDc2MTIyLCA3NjEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYxMDIsIAotICAgIDc2MTA2LCA3NjExMCwgNzYxMTQsIDc2MTE4LCA3NjEyMiwgNzYxMjYsIDc2MTMwLCA3NjEzNCwgNzYxMzgsIDc2MTQyLCAKLSAgICA3NjE0NiwgNzYxNTAsIDc2MTU0LCA3NjE1OCwgNzYxNjIsIDc2MTY2LCA3NjE3MCwgNzYxNzQsIDc2MTc4LCA3NjE4MiwgCi0gICAgNzYxODYsIDc2MTkwLCAwLCAwLCAwLCAwLCA3NjE5NCwgNzYxOTgsIDc2MjAyLCA3NjIwNiwgNzYyMTAsIDc2MjE0LCAKLSAgICA3NjIxOCwgNzYyMjIsIDc2MjI2LCA3NjIzMCwgNzYyMzQsIDc2MjM4LCA3NjI0MiwgNzYyNDYsIDc2MjUwLCA3NjI1NCwgCi0gICAgNzYyNTgsIDc2MjYyLCA3NjI2NiwgNzYyNzAsIDc2Mjc0LCA3NjI3OCwgNzYyODIsIDc2Mjg2LCA3NjI5MCwgNzYyOTQsIAotICAgIDc2Mjk4LCA3NjMwMiwgNzYzMDYsIDc2MzEwLCA3NjMxNCwgNzYzMTgsIDc2MzIyLCA3NjMyNiwgNzYzMzAsIDc2MzM0LCAKLSAgICA3NjMzOCwgNzYzNDIsIDc2MzQ2LCA3NjM1MCwgNzYzNTQsIDc2MzU4LCA3NjM2MiwgNzYzNjYsIDc2MzcwLCA3NjM3NCwgCi0gICAgNzYzNzgsIDc2MzgyLCA3NjM4NiwgMCwgMCwgMCwgMCwgNzYzOTAsIDc2Mzk0LCA3NjM5OCwgNzY0MDIsIDc2NDA2LCAKLSAgICA3NjQxMCwgNzY0MTQsIDc2NDE4LCA3NjQyMiwgNzY0MjYsIDc2NDMwLCA3NjQzNCwgNzY0MzgsIDc2NDQyLCA3NjQ0NiwgCi0gICAgNzY0NTAsIDc2NDU0LCA3NjQ1OCwgNzY0NjIsIDc2NDY2LCA3NjQ3MCwgNzY0NzQsIDc2NDc4LCA3NjQ4MiwgNzY0ODYsIAotICAgIDc2NDkwLCA3NjQ5NCwgNzY0OTgsIDc2NTAyLCA3NjUwNiwgNzY1MTAsIDc2NTE0LCA3NjUxOCwgNzY1MjIsIDc2NTI2LCAKLSAgICA3NjUzMCwgNzY1MzQsIDc2NTM4LCA3NjU0MiwgNzY1NDYsIDc2NTUwLCA3NjU1NCwgNzY1NTgsIDc2NTYyLCA3NjU2NiwgCi0gICAgNzY1NzAsIDc2NTc0LCA3NjU3OCwgNzY1ODIsIDc2NTg2LCA3NjU5MCwgNzY1OTQsIDc2NTk4LCA3NjYwMiwgNzY2MDYsIAotICAgIDc2NjEwLCA3NjYxNCwgNzY2MTgsIDc2NjIyLCA3NjYyNiwgNzY2MzAsIDc2NjM0LCA3NjYzOCwgNzY2NDIsIDc2NjQ2LCAKLSAgICA3NjY1MCwgNzY2NTQsIDc2NjU4LCA3NjY2MiwgNzY2NjYsIDc2NjcwLCA3NjY3NCwgNzY2NzgsIDc2NjgyLCA3NjY4NiwgCi0gICAgNzY2OTAsIDc2Njk0LCA3NjY5OCwgNzY3MDIsIDc2NzA2LCA3NjcxMCwgNzY3MTQsIDc2NzE4LCA3NjcyMiwgNzY3MjYsIAotICAgIDc2NzMwLCA3NjczNCwgNzY3MzgsIDc2NzQyLCA3Njc0NiwgNzY3NTAsIDc2NzU0LCA3Njc1OCwgNzY3NjIsIDc2NzY2LCAKLSAgICA3Njc3MCwgNzY3NzQsIDc2Nzc4LCA3Njc4MiwgNzY3ODYsIDc2NzkwLCA3Njc5NCwgNzY3OTgsIDc2ODAyLCA3NjgwNiwgCi0gICAgNzY4MTAsIDc2ODE0LCA3NjgxOCwgNzY4MjIsIDc2ODI2LCA3NjgzMCwgNzY4MzQsIDc2ODM4LCA3Njg0MiwgNzY4NDYsIAotICAgIDc2ODUwLCA3Njg1NCwgNzY4NTgsIDc2ODYyLCA3Njg2NiwgNzY4NzAsIDc2ODc0LCA3Njg3OCwgNzY4ODIsIDc2ODg2LCAKLSAgICA3Njg5MCwgNzY4OTQsIDc2ODk4LCA3NjkwMiwgNzY5MDYsIDc2OTEwLCA3NjkxNCwgNzY5MTgsIDc2OTIyLCA3NjkyNiwgCi0gICAgNzY5MzAsIDc2OTM0LCA3NjkzOCwgNzY5NDIsIDc2OTQ2LCA3Njk1MCwgNzY5NTQsIDc2OTU4LCA3Njk2MiwgNzY5NjYsIAotICAgIDc2OTcwLCA3Njk3NCwgNzY5NzgsIDc2OTgyLCA3Njk4NiwgNzY5OTAsIDc2OTk0LCA3Njk5OCwgNzcwMDIsIDc3MDA2LCAKLSAgICA3NzAxMCwgNzcwMTQsIDc3MDE4LCA3NzAyMiwgNzcwMjYsIDc3MDMwLCA3NzAzNCwgNzcwMzgsIDc3MDQyLCA3NzA0NiwgCi0gICAgNzcwNTAsIDc3MDU0LCA3NzA1OCwgNzcwNjIsIDc3MDY2LCA3NzA3MCwgNzcwNzQsIDc3MDc4LCA3NzA4MiwgNzcwODYsIAotICAgIDc3MDkwLCA3NzA5NCwgNzcwOTgsIDc3MTAyLCA3NzEwNiwgNzcxMTAsIDc3MTE0LCA3NzExOCwgNzcxMjIsIDc3MTI2LCAKLSAgICA3NzEzMCwgNzcxMzQsIDc3MTM4LCA3NzE0MiwgNzcxNDYsIDc3MTUwLCA3NzE1NCwgNzcxNTgsIDc3MTYyLCA3NzE2NiwgCi0gICAgNzcxNzAsIDc3MTc0LCA3NzE3OCwgNzcxODIsIDc3MTg2LCA3NzE5MCwgNzcxOTQsIDc3MTk4LCA3NzIwMiwgNzcyMDYsIAotICAgIDc3MjEwLCA3NzIxNCwgNzcyMTgsIDc3MjIyLCA3NzIyNiwgNzcyMzAsIDc3MjM0LCA3NzIzOCwgNzcyNDIsIDc3MjQ2LCAKLSAgICA3NzI1MCwgNzcyNTQsIDc3MjU4LCA3NzI2MiwgNzcyNjYsIDc3MjcwLCA3NzI3NCwgNzcyNzgsIDc3MjgyLCA3NzI4NiwgCi0gICAgNzcyOTAsIDc3Mjk0LCA3NzI5OCwgNzczMDIsIDc3MzA2LCA3NzMxMCwgNzczMTQsIDc3MzE4LCA3NzMyMiwgNzczMjYsIAotICAgIDc3MzMwLCA3NzMzNCwgNzczMzgsIDc3MzQyLCA3NzM0NiwgNzczNTAsIDc3MzU0LCA3NzM1OCwgNzczNjIsIDc3MzY2LCAKLSAgICA3NzM3MCwgNzczNzQsIDc3Mzc4LCA3NzM4MiwgNzczODYsIDc3MzkwLCA3NzM5NCwgNzczOTgsIDc3NDAyLCA3NzQwNiwgCi0gICAgNzc0MTAsIDc3NDE0LCA3NzQxOCwgNzc0MjIsIDc3NDI2LCA3NzQzMCwgNzc0MzQsIDc3NDM4LCA3NzQ0MiwgNzc0NDYsIAotICAgIDc3NDUwLCA3NzQ1NCwgNzc0NTgsIDc3NDYyLCA3NzQ2NiwgNzc0NzAsIDc3NDc0LCA3NzQ3OCwgNzc0ODIsIDc3NDg2LCAKLSAgICA3NzQ5MCwgNzc0OTQsIDc3NDk4LCA3NzUwMiwgNzc1MDYsIDc3NTEwLCA3NzUxNCwgNzc1MTgsIDc3NTIyLCA3NzUyNiwgCi0gICAgNzc1MzAsIDc3NTM0LCA3NzUzOCwgNzc1NDIsIDc3NTQ2LCA3NzU1MCwgNzc1NTQsIDc3NTU4LCA3NzU2MiwgNzc1NjYsIAotICAgIDc3NTcwLCA3NzU3NCwgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk0LCA3NzU5OCwgNzc2MDIsIDc3NjA2LCAKLSAgICA3NzYxMCwgNzc2MTQsIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMwLCA3NzYzNCwgNzc2MzgsIDc3NjQyLCA3NzY0NiwgCi0gICAgNzc2NTAsIDc3NjU0LCA3NzY1OCwgNzc2NjIsIDc3NjY2LCA3NzY3MCwgNzc2NzQsIDc3Njc4LCA3NzY4MiwgNzc2ODYsIAotICAgIDc3NjkwLCA3NzY5NCwgNzc2OTgsIDc3NzAyLCA3NzcwNiwgNzc3MTAsIDc3NzE0LCA3NzcxOCwgNzc3MjIsIDc3NzI2LCAKLSAgICA3NzczMCwgNzc3MzQsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NiwgCi0gICAgNzc3NzAsIDc3Nzc0LCA3Nzc3OCwgNzc3ODIsIDc3Nzg2LCA3Nzc5MCwgNzc3OTQsIDc3Nzk4LCA3NzgwMiwgNzc4MDYsIAotICAgIDc3ODEwLCA3NzgxNCwgNzc4MTgsIDc3ODIyLCA3NzgyNiwgNzc4MzAsIDc3ODM0LCA3NzgzOCwgNzc4NDIsIDc3ODQ2LCAKLSAgICA3Nzg1MCwgMCwgMCwgNzc4NTQsIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDc3ODgyLCAKLSAgICA3Nzg4NiwgNzc4OTAsIDc3ODk0LCA3Nzg5OCwgNzc5MDIsIDc3OTA2LCA3NzkxMCwgNzc5MTQsIDc3OTE4LCA3NzkyMiwgCi0gICAgNzc5MjYsIDc3OTMwLCA3NzkzNCwgNzc5MzgsIDc3OTQyLCA3Nzk0NiwgNzc5NTAsIDc3OTU0LCA3Nzk1OCwgNzc5NjIsIAotICAgIDc3OTY2LCA3Nzk3MCwgNzc5NzQsIDc3OTc4LCA3Nzk4MiwgNzc5ODYsIDc3OTkwLCA3Nzk5NCwgNzc5OTgsIDc4MDAyLCAKLSAgICA3ODAwNiwgNzgwMTAsIDc4MDE0LCA3ODAxOCwgNzgwMjIsIDc4MDI2LCA3ODAzMCwgNzgwMzQsIDc4MDM4LCA3ODA0MiwgCi0gICAgNzgwNDYsIDc4MDUwLCA3ODA1NCwgNzgwNTgsIDc4MDYyLCA3ODA2NiwgNzgwNzAsIDc4MDc0LCA3ODA3OCwgNzgwODIsIAotICAgIDc4MDg2LCA3ODA5MCwgNzgwOTQsIDc4MDk4LCA3ODEwMiwgNzgxMDYsIDc4MTEwLCA3ODExNCwgNzgxMTgsIDc4MTIyLCAKLSAgICA3ODEyNiwgNzgxMzAsIDc4MTM0LCA3ODEzOCwgNzgxNDIsIDc4MTQ2LCA3ODE1MCwgNzgxNTQsIDc4MTU4LCA3ODE2MiwgCi0gICAgNzgxNjYsIDc4MTcwLCA3ODE3NCwgNzgxNzgsIDc4MTgyLCA3ODE4NiwgNzgxOTAsIDc4MTk0LCA3ODE5OCwgNzgyMDIsIAotICAgIDc4MjA2LCA3ODIxMCwgNzgyMTQsIDc4MjE4LCA3ODIyMiwgNzgyMjYsIDc4MjMwLCA3ODIzNCwgNzgyMzgsIDc4MjQyLCAKLSAgICA3ODI0NiwgNzgyNTAsIDc4MjU0LCA3ODI1OCwgNzgyNjIsIDc4MjY2LCA3ODI3MCwgNzgyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2MTMwLCA3NjEzNCwgNzYxMzgsIDc2MTQyLCA3NjE0NiwgCisgICAgNzYxNTAsIDc2MTU0LCA3NjE1OCwgNzYxNjIsIDc2MTY2LCA3NjE3MCwgNzYxNzQsIDc2MTc4LCA3NjE4MiwgNzYxODYsIAorICAgIDc2MTkwLCA3NjE5NCwgNzYxOTgsIDc2MjAyLCA3NjIwNiwgNzYyMTAsIDc2MjE0LCA3NjIxOCwgMCwgMCwgMCwgMCwgCisgICAgNzYyMjIsIDc2MjI2LCA3NjIzMCwgNzYyMzQsIDc2MjM4LCA3NjI0MiwgNzYyNDYsIDc2MjUwLCA3NjI1NCwgNzYyNTgsIAorICAgIDc2MjYyLCA3NjI2NiwgNzYyNzAsIDc2Mjc0LCA3NjI3OCwgNzYyODIsIDc2Mjg2LCA3NjI5MCwgNzYyOTQsIDc2Mjk4LCAKKyAgICA3NjMwMiwgNzYzMDYsIDc2MzEwLCA3NjMxNCwgNzYzMTgsIDc2MzIyLCA3NjMyNiwgNzYzMzAsIDc2MzM0LCA3NjMzOCwgCisgICAgNzYzNDIsIDc2MzQ2LCA3NjM1MCwgNzYzNTQsIDc2MzU4LCA3NjM2MiwgNzYzNjYsIDc2MzcwLCA3NjM3NCwgNzYzNzgsIAorICAgIDc2MzgyLCA3NjM4NiwgNzYzOTAsIDc2Mzk0LCA3NjM5OCwgNzY0MDIsIDc2NDA2LCA3NjQxMCwgNzY0MTQsIDAsIDAsIDAsIAorICAgIDAsIDc2NDE4LCA3NjQyMiwgNzY0MjYsIDc2NDMwLCA3NjQzNCwgNzY0MzgsIDc2NDQyLCA3NjQ0NiwgNzY0NTAsIDc2NDU0LCAKKyAgICA3NjQ1OCwgNzY0NjIsIDc2NDY2LCA3NjQ3MCwgNzY0NzQsIDc2NDc4LCA3NjQ4MiwgNzY0ODYsIDc2NDkwLCA3NjQ5NCwgCisgICAgNzY0OTgsIDc2NTAyLCA3NjUwNiwgNzY1MTAsIDc2NTE0LCA3NjUxOCwgNzY1MjIsIDc2NTI2LCA3NjUzMCwgNzY1MzQsIAorICAgIDc2NTM4LCA3NjU0MiwgNzY1NDYsIDc2NTUwLCA3NjU1NCwgNzY1NTgsIDc2NTYyLCA3NjU2NiwgNzY1NzAsIDc2NTc0LCAKKyAgICA3NjU3OCwgNzY1ODIsIDc2NTg2LCA3NjU5MCwgNzY1OTQsIDc2NTk4LCA3NjYwMiwgNzY2MDYsIDc2NjEwLCA3NjYxNCwgCisgICAgNzY2MTgsIDc2NjIyLCA3NjYyNiwgNzY2MzAsIDc2NjM0LCA3NjYzOCwgNzY2NDIsIDc2NjQ2LCA3NjY1MCwgNzY2NTQsIAorICAgIDc2NjU4LCA3NjY2MiwgNzY2NjYsIDc2NjcwLCA3NjY3NCwgNzY2NzgsIDc2NjgyLCA3NjY4NiwgNzY2OTAsIDc2Njk0LCAKKyAgICA3NjY5OCwgNzY3MDIsIDc2NzA2LCA3NjcxMCwgNzY3MTQsIDc2NzE4LCA3NjcyMiwgNzY3MjYsIDc2NzMwLCA3NjczNCwgCisgICAgNzY3MzgsIDc2NzQyLCA3Njc0NiwgNzY3NTAsIDc2NzU0LCA3Njc1OCwgNzY3NjIsIDc2NzY2LCA3Njc3MCwgNzY3NzQsIAorICAgIDc2Nzc4LCA3Njc4MiwgNzY3ODYsIDc2NzkwLCA3Njc5NCwgNzY3OTgsIDc2ODAyLCA3NjgwNiwgNzY4MTAsIDc2ODE0LCAKKyAgICA3NjgxOCwgNzY4MjIsIDc2ODI2LCA3NjgzMCwgNzY4MzQsIDc2ODM4LCA3Njg0MiwgNzY4NDYsIDc2ODUwLCA3Njg1NCwgCisgICAgNzY4NTgsIDc2ODYyLCA3Njg2NiwgNzY4NzAsIDc2ODc0LCA3Njg3OCwgNzY4ODIsIDc2ODg2LCA3Njg5MCwgNzY4OTQsIAorICAgIDc2ODk4LCA3NjkwMiwgNzY5MDYsIDc2OTEwLCA3NjkxNCwgNzY5MTgsIDc2OTIyLCA3NjkyNiwgNzY5MzAsIDc2OTM0LCAKKyAgICA3NjkzOCwgNzY5NDIsIDc2OTQ2LCA3Njk1MCwgNzY5NTQsIDc2OTU4LCA3Njk2MiwgNzY5NjYsIDc2OTcwLCA3Njk3NCwgCisgICAgNzY5NzgsIDc2OTgyLCA3Njk4NiwgNzY5OTAsIDc2OTk0LCA3Njk5OCwgNzcwMDIsIDc3MDA2LCA3NzAxMCwgNzcwMTQsIAorICAgIDc3MDE4LCA3NzAyMiwgNzcwMjYsIDc3MDMwLCA3NzAzNCwgNzcwMzgsIDc3MDQyLCA3NzA0NiwgNzcwNTAsIDc3MDU0LCAKKyAgICA3NzA1OCwgNzcwNjIsIDc3MDY2LCA3NzA3MCwgNzcwNzQsIDc3MDc4LCA3NzA4MiwgNzcwODYsIDc3MDkwLCA3NzA5NCwgCisgICAgNzcwOTgsIDc3MTAyLCA3NzEwNiwgNzcxMTAsIDc3MTE0LCA3NzExOCwgNzcxMjIsIDc3MTI2LCA3NzEzMCwgNzcxMzQsIAorICAgIDc3MTM4LCA3NzE0MiwgNzcxNDYsIDc3MTUwLCA3NzE1NCwgNzcxNTgsIDc3MTYyLCA3NzE2NiwgNzcxNzAsIDc3MTc0LCAKKyAgICA3NzE3OCwgNzcxODIsIDc3MTg2LCA3NzE5MCwgNzcxOTQsIDc3MTk4LCA3NzIwMiwgNzcyMDYsIDc3MjEwLCA3NzIxNCwgCisgICAgNzcyMTgsIDc3MjIyLCA3NzIyNiwgNzcyMzAsIDc3MjM0LCA3NzIzOCwgNzcyNDIsIDc3MjQ2LCA3NzI1MCwgNzcyNTQsIAorICAgIDc3MjU4LCA3NzI2MiwgNzcyNjYsIDc3MjcwLCA3NzI3NCwgNzcyNzgsIDc3MjgyLCA3NzI4NiwgNzcyOTAsIDc3Mjk0LCAKKyAgICA3NzI5OCwgNzczMDIsIDc3MzA2LCA3NzMxMCwgNzczMTQsIDc3MzE4LCA3NzMyMiwgNzczMjYsIDc3MzMwLCA3NzMzNCwgCisgICAgNzczMzgsIDc3MzQyLCA3NzM0NiwgNzczNTAsIDc3MzU0LCA3NzM1OCwgNzczNjIsIDc3MzY2LCA3NzM3MCwgNzczNzQsIAorICAgIDc3Mzc4LCA3NzM4MiwgNzczODYsIDc3MzkwLCA3NzM5NCwgNzczOTgsIDc3NDAyLCA3NzQwNiwgNzc0MTAsIDc3NDE0LCAKKyAgICA3NzQxOCwgNzc0MjIsIDc3NDI2LCA3NzQzMCwgNzc0MzQsIDc3NDM4LCA3NzQ0MiwgNzc0NDYsIDc3NDUwLCA3NzQ1NCwgCisgICAgNzc0NTgsIDc3NDYyLCA3NzQ2NiwgNzc0NzAsIDc3NDc0LCA3NzQ3OCwgNzc0ODIsIDc3NDg2LCA3NzQ5MCwgNzc0OTQsIAorICAgIDc3NDk4LCA3NzUwMiwgNzc1MDYsIDc3NTEwLCA3NzUxNCwgNzc1MTgsIDc3NTIyLCA3NzUyNiwgNzc1MzAsIDc3NTM0LCAKKyAgICA3NzUzOCwgNzc1NDIsIDc3NTQ2LCA3NzU1MCwgNzc1NTQsIDc3NTU4LCA3NzU2MiwgNzc1NjYsIDc3NTcwLCA3NzU3NCwgCisgICAgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk0LCA3NzU5OCwgNzc2MDIsIDc3NjA2LCA3NzYxMCwgNzc2MTQsIAorICAgIDc3NjE4LCA3NzYyMiwgNzc2MjYsIDc3NjMwLCA3NzYzNCwgNzc2MzgsIDc3NjQyLCA3NzY0NiwgNzc2NTAsIDc3NjU0LCAKKyAgICA3NzY1OCwgNzc2NjIsIDc3NjY2LCA3NzY3MCwgNzc2NzQsIDc3Njc4LCA3NzY4MiwgNzc2ODYsIDc3NjkwLCA3NzY5NCwgCisgICAgNzc2OTgsIDc3NzAyLCA3NzcwNiwgNzc3MTAsIDc3NzE0LCA3NzcxOCwgNzc3MjIsIDc3NzI2LCA3NzczMCwgNzc3MzQsIAorICAgIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NCwgNzc3NTgsIDc3NzYyLCA3Nzc2NiwgNzc3NzAsIDc3Nzc0LCAKKyAgICA3Nzc3OCwgNzc3ODIsIDc3Nzg2LCA3Nzc5MCwgNzc3OTQsIDc3Nzk4LCA3NzgwMiwgNzc4MDYsIDc3ODEwLCA3NzgxNCwgCisgICAgNzc4MTgsIDc3ODIyLCA3NzgyNiwgNzc4MzAsIDc3ODM0LCA3NzgzOCwgNzc4NDIsIDc3ODQ2LCA3Nzg1MCwgNzc4NTQsIAorICAgIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDAsIDAsIDc3ODgyLCA3Nzg4NiwgNzc4OTAsIAorICAgIDc3ODk0LCA3Nzg5OCwgNzc5MDIsIDc3OTA2LCA3NzkxMCwgNzc5MTQsIDc3OTE4LCA3NzkyMiwgNzc5MjYsIDc3OTMwLCAKKyAgICA3NzkzNCwgNzc5MzgsIDc3OTQyLCA3Nzk0NiwgNzc5NTAsIDc3OTU0LCA3Nzk1OCwgNzc5NjIsIDc3OTY2LCA3Nzk3MCwgCisgICAgNzc5NzQsIDc3OTc4LCA3Nzk4MiwgNzc5ODYsIDc3OTkwLCA3Nzk5NCwgNzc5OTgsIDc4MDAyLCA3ODAwNiwgNzgwMTAsIAorICAgIDc4MDE0LCA3ODAxOCwgNzgwMjIsIDc4MDI2LCA3ODAzMCwgNzgwMzQsIDc4MDM4LCA3ODA0MiwgNzgwNDYsIDc4MDUwLCAKKyAgICA3ODA1NCwgNzgwNTgsIDc4MDYyLCA3ODA2NiwgNzgwNzAsIDc4MDc0LCA3ODA3OCwgNzgwODIsIDc4MDg2LCA3ODA5MCwgCisgICAgNzgwOTQsIDc4MDk4LCA3ODEwMiwgNzgxMDYsIDc4MTEwLCA3ODExNCwgNzgxMTgsIDc4MTIyLCA3ODEyNiwgNzgxMzAsIAorICAgIDc4MTM0LCA3ODEzOCwgNzgxNDIsIDc4MTQ2LCA3ODE1MCwgNzgxNTQsIDc4MTU4LCA3ODE2MiwgNzgxNjYsIDc4MTcwLCAKKyAgICA3ODE3NCwgNzgxNzgsIDc4MTgyLCA3ODE4NiwgNzgxOTAsIDc4MTk0LCA3ODE5OCwgNzgyMDIsIDc4MjA2LCA3ODIxMCwgCisgICAgNzgyMTQsIDc4MjE4LCA3ODIyMiwgNzgyMjYsIDc4MjMwLCA3ODIzNCwgNzgyMzgsIDc4MjQyLCA3ODI0NiwgNzgyNTAsIAorICAgIDc4MjU0LCA3ODI1OCwgNzgyNjIsIDc4MjY2LCA3ODI3MCwgNzgyNzQsIDc4Mjc4LCA3ODI4MiwgNzgyODYsIDc4MjkwLCAKKyAgICA3ODI5NCwgNzgyOTgsIDc4MzAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODMwNiwgCisgICAgNzgzMTEsIDc4MzE2LCA3ODMyMSwgNzgzMjYsIDc4MzMxLCA3ODMzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNzgzNDQsIDc4MzUxLCA3ODM1OCwgNzgzNjUsIDc4MzcyLCAwLCAwLCAwLCAwLCAwLCA3ODM3OSwgNzgzODYsIAorICAgIDc4MzkzLCA3ODQwMywgNzg0MDksIDc4NDE1LCA3ODQyMSwgNzg0MjcsIDc4NDMzLCA3ODQzOSwgNzg0NDYsIDc4NDUyLCAKKyAgICA3ODQ1OCwgNzg0NjQsIDc4NDczLCA3ODQ4MiwgNzg0OTQsIDc4NTA2LCA3ODUxMiwgNzg1MTgsIDc4NTI0LCA3ODUzMSwgCisgICAgNzg1MzgsIDc4NTQ1LCA3ODU1MiwgNzg1NTksIDAsIDc4NTY2LCA3ODU3MywgNzg1ODAsIDc4NTg4LCA3ODU5NSwgMCwgCisgICAgNzg2MDIsIDAsIDc4NjA5LCA3ODYxNiwgMCwgNzg2MjMsIDc4NjMxLCAwLCA3ODYzOCwgNzg2NDUsIDc4NjUyLCA3ODY1OSwgCisgICAgNzg2NjYsIDc4NjczLCA3ODY4MCwgNzg2ODcsIDc4Njk0LCA3ODcwMSwgNzg3MDYsIDc4NzEzLCA3ODcyMCwgNzg3MjYsIAorICAgIDc4NzMyLCA3ODczOCwgNzg3NDQsIDc4NzUwLCA3ODc1NiwgNzg3NjIsIDc4NzY4LCA3ODc3NCwgNzg3ODAsIDc4Nzg2LCAKKyAgICA3ODc5MiwgNzg3OTgsIDc4ODA0LCA3ODgxMCwgNzg4MTYsIDc4ODIyLCA3ODgyOCwgNzg4MzQsIDc4ODQwLCA3ODg0NiwgCisgICAgNzg4NTIsIDc4ODU4LCA3ODg2NCwgNzg4NzAsIDc4ODc2LCA3ODg4MiwgNzg4ODgsIDc4ODk0LCA3ODkwMCwgNzg5MDYsIAorICAgIDc4OTEyLCA3ODkxOCwgNzg5MjQsIDc4OTMwLCA3ODkzNiwgNzg5NDIsIDc4OTQ4LCA3ODk1NCwgNzg5NjAsIDc4OTY2LCAKKyAgICA3ODk3MiwgNzg5NzgsIDc4OTg0LCA3ODk5MCwgNzg5OTYsIDc5MDAyLCA3OTAwOCwgNzkwMTQsIDc5MDIwLCA3OTAyNiwgCisgICAgNzkwMzIsIDc5MDM4LCA3OTA0NCwgNzkwNTAsIDc5MDU2LCA3OTA2MiwgNzkwNjgsIDc5MDc0LCA3OTA4MCwgNzkwODYsIAorICAgIDc5MDkyLCA3OTA5OCwgNzkxMDQsIDc5MTEwLCA3OTExNiwgNzkxMjIsIDc5MTI4LCA3OTEzNCwgNzkxNDAsIDc5MTQ2LCAKKyAgICA3OTE1MiwgNzkxNTgsIDc5MTY0LCA3OTE3MCwgNzkxNzYsIDc5MTg0LCA3OTE5MiwgNzkxOTgsIDc5MjA0LCA3OTIxMCwgCisgICAgNzkyMTYsIDc5MjI1LCA3OTIzNCwgNzkyNDIsIDc5MjUwLCA3OTI1OCwgNzkyNjYsIDc5Mjc0LCA3OTI4MiwgNzkyOTAsIAorICAgIDc5Mjk4LCA3OTMwNSwgNzkzMTIsIDc5MzIyLCA3OTMzMiwgNzkzMzYsIDc5MzQwLCA3OTM0NSwgNzkzNTAsIDc5MzU1LCAKKyAgICA3OTM2MCwgNzkzNjksIDc5Mzc4LCA3OTM4NCwgNzkzOTAsIDc5Mzk3LCA3OTQwNCwgNzk0MTEsIDc5NDE1LCA3OTQyMSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk0MjcsIDc5NDMzLCA3OTQzOSwgCisgICAgNzk0NDUsIDc5NDUxLCA3OTQ1NiwgNzk0NjEsIDc5NDY3LCA3OTQ3MywgNzk0NzksIDc5NDg1LCA3OTQ5MywgNzk0OTksIAorICAgIDc5NTA1LCA3OTUxMywgNzk1MjEsIDc5NTI5LCA3OTUzNywgNzk1NDIsIDc5NTQ3LCA3OTU1MiwgNzk1NTcsIDc5NTcwLCAKKyAgICA3OTU4MywgNzk1OTMsIDc5NjAzLCA3OTYxNCwgNzk2MjUsIDc5NjM2LCA3OTY0NywgNzk2NTcsIDc5NjY3LCA3OTY3OCwgCisgICAgNzk2ODksIDc5NzAwLCA3OTcxMSwgNzk3MjEsIDc5NzMxLCA3OTc0MSwgNzk3NTcsIDc5NzczLCA3OTc4OSwgNzk3OTYsIAorICAgIDc5ODAzLCA3OTgxMCwgNzk4MTcsIDc5ODI3LCA3OTgzNywgNzk4NDcsIDc5ODU5LCA3OTg2OSwgNzk4NzcsIDc5ODg1LCAKKyAgICA3OTg5NCwgNzk5MDIsIDc5OTEyLCA3OTkyMCwgNzk5MjgsIDc5OTM2LCA3OTk0NSwgNzk5NTMsIDc5OTYzLCA3OTk3MSwgCisgICAgNzk5NzksIDc5OTg3LCA3OTk5NywgODAwMDUsIDgwMDEyLCA4MDAxOSwgODAwMjYsIDgwMDMzLCA4MDA0MSwgODAwNDksIAorICAgIDgwMDU3LCA4MDA2NSwgODAwNzMsIDgwMDgyLCA4MDA5MCwgODAwOTgsIDgwMTA2LCA4MDExNCwgODAxMjIsIDgwMTMxLCAKKyAgICA4MDEzOSwgODAxNDcsIDgwMTU1LCA4MDE2MywgODAxNzEsIDgwMTc5LCA4MDE4NywgODAxOTUsIDgwMjAzLCA4MDIxMSwgCisgICAgODAyMjAsIDgwMjI4LCA4MDIzOCwgODAyNDYsIDgwMjU0LCA4MDI2MiwgODAyNzIsIDgwMjgwLCA4MDI4OCwgODAyOTYsIAorICAgIDgwMzA0LCA4MDMxMywgODAzMjIsIDgwMzMwLCA4MDM0MCwgODAzNDgsIDgwMzU2LCA4MDM2NCwgODAzNzMsIDgwMzgxLCAKKyAgICA4MDM5MSwgODAzOTksIDgwNDA2LCA4MDQxMywgODA0MjEsIDgwNDI4LCA4MDQzNywgODA0NDQsIDgwNDUyLCA4MDQ2MCwgCisgICAgODA0NjksIDgwNDc3LCA4MDQ4NywgODA0OTUsIDgwNTAzLCA4MDUxMSwgODA1MjEsIDgwNTI5LCA4MDUzNiwgODA1NDMsIAorICAgIDgwNTUxLCA4MDU1OCwgODA1NjcsIDgwNTc0LCA4MDU4NCwgODA1OTQsIDgwNjA1LCA4MDYxNCwgODA2MjMsIDgwNjMyLCAKKyAgICA4MDY0MSwgODA2NTAsIDgwNjYwLCA4MDY3MSwgODA2ODIsIDgwNjkyLCA4MDcwMywgODA3MTUsIDgwNzI1LCA4MDczNCwgCisgICAgODA3NDMsIDgwNzUxLCA4MDc2MCwgODA3NzAsIDgwNzc4LCA4MDc4NywgODA3OTYsIDgwODA0LCA4MDgxMywgODA4MjMsIAorICAgIDgwODMxLCA4MDg0MCwgODA4NDksIDgwODU3LCA4MDg2NiwgODA4NzYsIDgwODg0LCA4MDg5NCwgODA5MDIsIDgwOTEyLCAKKyAgICA4MDkyMCwgODA5MjgsIDgwOTM3LCA4MDk0NSwgODA5NTUsIDgwOTYzLCA4MDk3MSwgODA5ODEsIDgwOTg5LCA4MDk5NiwgCisgICAgODEwMDMsIDgxMDEyLCA4MTAyMSwgODEwMjksIDgxMDM4LCA4MTA0OCwgODEwNTYsIDgxMDY3LCA4MTA3NSwgODEwODMsIAorICAgIDgxMDkwLCA4MTA5OCwgODExMDcsIDgxMTE0LCA4MTEyNCwgODExMzQsIDgxMTQ1LCA4MTE1NSwgODExNjYsIDgxMTc0LCAKKyAgICA4MTE4MiwgODExOTEsIDgxMTk5LCA4MTIwOCwgODEyMTYsIDgxMjI0LCA4MTIzMywgODEyNDEsIDgxMjUwLCA4MTI1OCwgCisgICAgODEyNjUsIDgxMjcyLCA4MTI3OSwgODEyODYsIDgxMjk0LCA4MTMwMiwgODEzMTAsIDgxMzE4LCA4MTMyNywgODEzMzUsIAorICAgIDgxMzQzLCA4MTM1MiwgODEzNjAsIDgxMzY4LCA4MTM3NiwgODEzODUsIDgxMzkzLCA4MTQwMSwgODE0MDksIDgxNDE3LCAKKyAgICA4MTQyNSwgODE0MzMsIDgxNDQxLCA4MTQ0OSwgODE0NTcsIDgxNDY2LCA4MTQ3NCwgODE0ODIsIDgxNDkwLCA4MTQ5OCwgCisgICAgODE1MDYsIDgxNTE1LCA4MTUyNCwgODE1MzIsIDgxNTQwLCA4MTU0OCwgODE1NTcsIDgxNTY1LCA4MTU3NCwgODE1ODEsIAorICAgIDgxNTg4LCA4MTU5NiwgODE2MDMsIDgxNjExLCA4MTYxOSwgODE2MjgsIDgxNjM2LCA4MTY0NSwgODE2NTMsIDgxNjYxLCAKKyAgICA4MTY3MSwgODE2NzgsIDgxNjg1LCA4MTY5MywgODE3MDAsIDgxNzA4LCA4MTcxOCwgODE3MjksIDgxNzM3LCA4MTc0NiwgCisgICAgODE3NTQsIDgxNzYzLCA4MTc3MSwgODE3ODAsIDgxNzg4LCA4MTc5NywgODE4MDUsIDgxODE0LCA4MTgyMywgODE4MzEsIAorICAgIDgxODM5LCA4MTg0NywgODE4NTYsIDgxODYzLCA4MTg3MSwgODE4ODAsIDgxODg5LCA4MTg5OCwgODE5MDgsIDgxOTE2LCAKKyAgICA4MTkyNiwgODE5MzQsIDgxOTQ0LCA4MTk1MiwgODE5NjIsIDgxOTcwLCA4MTk4MCwgODE5ODgsIDgxOTk3LCA4MjAwNCwgCisgICAgODIwMTMsIDgyMDIwLCA4MjAzMCwgODIwMzgsIDgyMDQ4LCA4MjA1NiwgODIwNjYsIDgyMDc0LCA4MjA4MiwgODIwOTAsIAorICAgIDgyMDk5LCA4MjEwNywgODIxMTYsIDgyMTI1LCA4MjEzNCwgODIxNDMsIDgyMTUzLCA4MjE2MSwgODIxNzEsIDgyMTc5LCAKKyAgICA4MjE4OSwgODIxOTcsIDgyMjA3LCA4MjIxNSwgODIyMjUsIDgyMjMzLCA4MjI0MiwgODIyNDksIDgyMjU4LCA4MjI2NSwgCisgICAgODIyNzUsIDgyMjgzLCA4MjI5MywgODIzMDEsIDgyMzExLCA4MjMxOSwgODIzMjcsIDgyMzM1LCA4MjM0NCwgODIzNTIsIAorICAgIDgyMzYxLCA4MjM3MCwgODIzNzksIDgyMzg4LCA4MjM5NiwgODI0MDQsIDgyNDEzLCA4MjQyMSwgODI0MzAsIDgyNDM5LCAKKyAgICA4MjQ0NywgODI0NTUsIDgyNDYzLCA4MjQ3MiwgODI0ODAsIDgyNDg4LCA4MjQ5NywgODI1MDUsIDgyNTEzLCA4MjUyMSwgCisgICAgODI1MjksIDgyNTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MjUzOSwgCisgICAgODI1NDksIDgyNTU5LCA4MjU2OSwgODI1NzksIDgyNTkwLCA4MjYwMCwgODI2MTAsIDgyNjIxLCA4MjYzMCwgODI2MzksIAorICAgIDgyNjQ4LCA4MjY1OSwgODI2NjksIDgyNjc5LCA4MjY5MSwgODI3MDEsIDgyNzExLCA4MjcyMSwgODI3MzEsIDgyNzQxLCAKKyAgICA4Mjc1MSwgODI3NjEsIDgyNzcxLCA4Mjc4MSwgODI3OTEsIDgyODAxLCA4MjgxMiwgODI4MjMsIDgyODMzLCA4Mjg0MywgCisgICAgODI4NTUsIDgyODY2LCA4Mjg3NywgODI4ODcsIDgyODk3LCA4MjkwNywgODI5MTcsIDgyOTI3LCA4MjkzNywgODI5NDcsIAorICAgIDgyOTU5LCA4Mjk2OSwgODI5NzksIDgyOTkxLCA4MzAwMiwgODMwMTMsIDgzMDIzLCA4MzAzMywgODMwNDMsIDgzMDUzLCAKKyAgICA4MzA2NSwgODMwNzUsIDgzMDg1LCA4MzA5NiwgODMxMDcsIDgzMTE3LCA4MzEyNywgODMxMzYsIDgzMTQ1LCA4MzE1NCwgCisgICAgODMxNjMsIDgzMTcyLCA4MzE4MiwgMCwgMCwgODMxOTIsIDgzMjAyLCA4MzIxMiwgODMyMjIsIDgzMjMyLCA4MzI0NCwgCisgICAgODMyNTQsIDgzMjY0LCA4MzI3NiwgODMyODYsIDgzMjk4LCA4MzMwNywgODMzMTYsIDgzMzI3LCA4MzMzNywgODMzNDksIAorICAgIDgzMzYwLCA4MzM3MywgODMzODMsIDgzMzk1LCA4MzQwNCwgODM0MTUsIDgzNDI2LCA4MzQzOSwgODM0NDksIDgzNDU5LCAKKyAgICA4MzQ2OSwgODM0NzksIDgzNDg5LCA4MzQ5OCwgODM1MDcsIDgzNTE2LCA4MzUyNSwgODM1MzUsIDgzNTQ1LCA4MzU1NSwgCisgICAgODM1NjUsIDgzNTc1LCA4MzU4NSwgODM1OTUsIDgzNjA1LCA4MzYxNSwgODM2MjUsIDgzNjM1LCA4MzY0NSwgODM2NTQsIAorICAgIDgzNjYzLCA4MzY3MiwgODM2ODIsIDgzNjkyLCA4MzcwMiwgODM3MTIsIDgzNzIyLCA4MzczMywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgyNzgsIDc4MjgzLCA3ODI4OCwgNzgyOTMsIDc4Mjk4LCA3ODMwMywgNzgzMTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MzE2LCA3ODMyMywgNzgzMzAsIDc4MzM3LCA3ODM0NCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzgzNTEsIDc4MzU4LCA3ODM2NSwgNzgzNzUsIDc4MzgxLCA3ODM4NywgNzgzOTMsIDc4Mzk5LCAKLSAgICA3ODQwNSwgNzg0MTEsIDc4NDE4LCA3ODQyNCwgNzg0MzAsIDc4NDM2LCA3ODQ0NSwgNzg0NTQsIDc4NDY2LCA3ODQ3OCwgCi0gICAgNzg0ODQsIDc4NDkwLCA3ODQ5NiwgNzg1MDMsIDc4NTEwLCA3ODUxNywgNzg1MjQsIDc4NTMxLCAwLCA3ODUzOCwgNzg1NDUsIAotICAgIDc4NTUyLCA3ODU2MCwgNzg1NjcsIDAsIDc4NTc0LCAwLCA3ODU4MSwgNzg1ODgsIDAsIDc4NTk1LCA3ODYwMywgMCwgCi0gICAgNzg2MTAsIDc4NjE3LCA3ODYyNCwgNzg2MzEsIDc4NjM4LCA3ODY0NSwgNzg2NTIsIDc4NjU5LCA3ODY2NiwgNzg2NzMsIAotICAgIDc4Njc4LCA3ODY4NSwgNzg2OTIsIDc4Njk4LCA3ODcwNCwgNzg3MTAsIDc4NzE2LCA3ODcyMiwgNzg3MjgsIDc4NzM0LCAKLSAgICA3ODc0MCwgNzg3NDYsIDc4NzUyLCA3ODc1OCwgNzg3NjQsIDc4NzcwLCA3ODc3NiwgNzg3ODIsIDc4Nzg4LCA3ODc5NCwgCi0gICAgNzg4MDAsIDc4ODA2LCA3ODgxMiwgNzg4MTgsIDc4ODI0LCA3ODgzMCwgNzg4MzYsIDc4ODQyLCA3ODg0OCwgNzg4NTQsIAotICAgIDc4ODYwLCA3ODg2NiwgNzg4NzIsIDc4ODc4LCA3ODg4NCwgNzg4OTAsIDc4ODk2LCA3ODkwMiwgNzg5MDgsIDc4OTE0LCAKLSAgICA3ODkyMCwgNzg5MjYsIDc4OTMyLCA3ODkzOCwgNzg5NDQsIDc4OTUwLCA3ODk1NiwgNzg5NjIsIDc4OTY4LCA3ODk3NCwgCi0gICAgNzg5ODAsIDc4OTg2LCA3ODk5MiwgNzg5OTgsIDc5MDA0LCA3OTAxMCwgNzkwMTYsIDc5MDIyLCA3OTAyOCwgNzkwMzQsIAotICAgIDc5MDQwLCA3OTA0NiwgNzkwNTIsIDc5MDU4LCA3OTA2NCwgNzkwNzAsIDc5MDc2LCA3OTA4MiwgNzkwODgsIDc5MDk0LCAKLSAgICA3OTEwMCwgNzkxMDYsIDc5MTEyLCA3OTExOCwgNzkxMjQsIDc5MTMwLCA3OTEzNiwgNzkxNDIsIDc5MTQ4LCA3OTE1NiwgCi0gICAgNzkxNjQsIDc5MTcwLCA3OTE3NiwgNzkxODIsIDc5MTg4LCA3OTE5NywgNzkyMDYsIDc5MjE0LCA3OTIyMiwgNzkyMzAsIAotICAgIDc5MjM4LCA3OTI0NiwgNzkyNTQsIDc5MjYyLCA3OTI3MCwgNzkyNzcsIDc5Mjg0LCA3OTI5NCwgNzkzMDQsIDc5MzA4LCAKLSAgICA3OTMxMiwgNzkzMTcsIDc5MzIyLCA3OTMyNywgNzkzMzIsIDc5MzQxLCA3OTM1MCwgNzkzNTYsIDc5MzYyLCA3OTM2OSwgCi0gICAgNzkzNzYsIDc5MzgzLCA3OTM4NywgNzkzOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc5Mzk5LCA3OTQwNSwgNzk0MTEsIDc5NDE3LCA3OTQyMywgNzk0MjgsIDc5NDMzLCA3OTQzOSwgNzk0NDUsIAotICAgIDc5NDUxLCA3OTQ1NywgNzk0NjUsIDc5NDcxLCA3OTQ3NywgNzk0ODUsIDc5NDkzLCA3OTUwMSwgNzk1MDksIDc5NTE0LCAKLSAgICA3OTUxOSwgNzk1MjQsIDc5NTI5LCA3OTU0MiwgNzk1NTUsIDc5NTY1LCA3OTU3NSwgNzk1ODYsIDc5NTk3LCA3OTYwOCwgCi0gICAgNzk2MTksIDc5NjI5LCA3OTYzOSwgNzk2NTAsIDc5NjYxLCA3OTY3MiwgNzk2ODMsIDc5NjkzLCA3OTcwMywgNzk3MTMsIAotICAgIDc5NzI5LCA3OTc0NSwgNzk3NjEsIDc5NzY4LCA3OTc3NSwgNzk3ODIsIDc5Nzg5LCA3OTc5OSwgNzk4MDksIDc5ODE5LCAKLSAgICA3OTgzMSwgNzk4NDEsIDc5ODQ5LCA3OTg1NywgNzk4NjYsIDc5ODc0LCA3OTg4NCwgNzk4OTIsIDc5OTAwLCA3OTkwOCwgCi0gICAgNzk5MTcsIDc5OTI1LCA3OTkzNSwgNzk5NDMsIDc5OTUxLCA3OTk1OSwgNzk5NjksIDc5OTc3LCA3OTk4NCwgNzk5OTEsIAotICAgIDc5OTk4LCA4MDAwNSwgODAwMTMsIDgwMDIxLCA4MDAyOSwgODAwMzcsIDgwMDQ1LCA4MDA1NCwgODAwNjIsIDgwMDcwLCAKLSAgICA4MDA3OCwgODAwODYsIDgwMDk0LCA4MDEwMywgODAxMTEsIDgwMTE5LCA4MDEyNywgODAxMzUsIDgwMTQzLCA4MDE1MSwgCi0gICAgODAxNTksIDgwMTY3LCA4MDE3NSwgODAxODMsIDgwMTkyLCA4MDIwMCwgODAyMTAsIDgwMjE4LCA4MDIyNiwgODAyMzQsIAotICAgIDgwMjQ0LCA4MDI1MiwgODAyNjAsIDgwMjY4LCA4MDI3NiwgODAyODUsIDgwMjk0LCA4MDMwMiwgODAzMTIsIDgwMzIwLCAKLSAgICA4MDMyOCwgODAzMzYsIDgwMzQ1LCA4MDM1MywgODAzNjMsIDgwMzcxLCA4MDM3OCwgODAzODUsIDgwMzkzLCA4MDQwMCwgCi0gICAgODA0MDksIDgwNDE2LCA4MDQyNCwgODA0MzIsIDgwNDQxLCA4MDQ0OSwgODA0NTksIDgwNDY3LCA4MDQ3NSwgODA0ODMsIAotICAgIDgwNDkzLCA4MDUwMSwgODA1MDgsIDgwNTE1LCA4MDUyMywgODA1MzAsIDgwNTM5LCA4MDU0NiwgODA1NTYsIDgwNTY2LCAKLSAgICA4MDU3NywgODA1ODYsIDgwNTk1LCA4MDYwNCwgODA2MTMsIDgwNjIyLCA4MDYzMiwgODA2NDMsIDgwNjU0LCA4MDY2NCwgCi0gICAgODA2NzUsIDgwNjg3LCA4MDY5NywgODA3MDYsIDgwNzE1LCA4MDcyMywgODA3MzIsIDgwNzQyLCA4MDc1MCwgODA3NTksIAotICAgIDgwNzY4LCA4MDc3NiwgODA3ODUsIDgwNzk1LCA4MDgwMywgODA4MTIsIDgwODIxLCA4MDgyOSwgODA4MzgsIDgwODQ4LCAKLSAgICA4MDg1NiwgODA4NjYsIDgwODc0LCA4MDg4NCwgODA4OTIsIDgwOTAwLCA4MDkwOSwgODA5MTcsIDgwOTI3LCA4MDkzNSwgCi0gICAgODA5NDMsIDgwOTUzLCA4MDk2MSwgODA5NjgsIDgwOTc1LCA4MDk4NCwgODA5OTMsIDgxMDAxLCA4MTAxMCwgODEwMjAsIAotICAgIDgxMDI4LCA4MTAzOSwgODEwNDcsIDgxMDU1LCA4MTA2MiwgODEwNzAsIDgxMDc5LCA4MTA4NiwgODEwOTYsIDgxMTA2LCAKLSAgICA4MTExNywgODExMjcsIDgxMTM4LCA4MTE0NiwgODExNTQsIDgxMTYzLCA4MTE3MSwgODExODAsIDgxMTg4LCA4MTE5NiwgCi0gICAgODEyMDUsIDgxMjEzLCA4MTIyMiwgODEyMzAsIDgxMjM3LCA4MTI0NCwgODEyNTEsIDgxMjU4LCA4MTI2NiwgODEyNzQsIAotICAgIDgxMjgyLCA4MTI5MCwgODEyOTksIDgxMzA3LCA4MTMxNSwgODEzMjQsIDgxMzMyLCA4MTM0MCwgODEzNDgsIDgxMzU3LCAKLSAgICA4MTM2NSwgODEzNzMsIDgxMzgxLCA4MTM4OSwgODEzOTcsIDgxNDA1LCA4MTQxMywgODE0MjEsIDgxNDI5LCA4MTQzOCwgCi0gICAgODE0NDYsIDgxNDU0LCA4MTQ2MiwgODE0NzAsIDgxNDc4LCA4MTQ4NywgODE0OTYsIDgxNTA0LCA4MTUxMiwgODE1MjAsIAotICAgIDgxNTI5LCA4MTUzNywgODE1NDYsIDgxNTUzLCA4MTU2MCwgODE1NjgsIDgxNTc1LCA4MTU4MywgODE1OTEsIDgxNjAwLCAKLSAgICA4MTYwOCwgODE2MTcsIDgxNjI1LCA4MTYzMywgODE2NDMsIDgxNjUwLCA4MTY1NywgODE2NjUsIDgxNjcyLCA4MTY4MCwgCi0gICAgODE2OTAsIDgxNzAxLCA4MTcwOSwgODE3MTgsIDgxNzI2LCA4MTczNSwgODE3NDMsIDgxNzUyLCA4MTc2MCwgODE3NjksIAotICAgIDgxNzc3LCA4MTc4NiwgODE3OTUsIDgxODAzLCA4MTgxMSwgODE4MTksIDgxODI4LCA4MTgzNSwgODE4NDMsIDgxODUyLCAKLSAgICA4MTg2MSwgODE4NzAsIDgxODgwLCA4MTg4OCwgODE4OTgsIDgxOTA2LCA4MTkxNiwgODE5MjQsIDgxOTM0LCA4MTk0MiwgCi0gICAgODE5NTIsIDgxOTYwLCA4MTk2OSwgODE5NzYsIDgxOTg1LCA4MTk5MiwgODIwMDIsIDgyMDEwLCA4MjAyMCwgODIwMjgsIAotICAgIDgyMDM4LCA4MjA0NiwgODIwNTQsIDgyMDYyLCA4MjA3MSwgODIwNzksIDgyMDg4LCA4MjA5NywgODIxMDYsIDgyMTE1LCAKLSAgICA4MjEyNSwgODIxMzMsIDgyMTQzLCA4MjE1MSwgODIxNjEsIDgyMTY5LCA4MjE3OSwgODIxODcsIDgyMTk3LCA4MjIwNSwgCi0gICAgODIyMTQsIDgyMjIxLCA4MjIzMCwgODIyMzcsIDgyMjQ3LCA4MjI1NSwgODIyNjUsIDgyMjczLCA4MjI4MywgODIyOTEsIAotICAgIDgyMjk5LCA4MjMwNywgODIzMTYsIDgyMzI0LCA4MjMzMywgODIzNDIsIDgyMzUxLCA4MjM2MCwgODIzNjgsIDgyMzc2LCAKLSAgICA4MjM4NSwgODIzOTMsIDgyNDAyLCA4MjQxMSwgODI0MTksIDgyNDI3LCA4MjQzNSwgODI0NDQsIDgyNDUyLCA4MjQ2MCwgCi0gICAgODI0NjksIDgyNDc3LCA4MjQ4NSwgODI0OTMsIDgyNTAxLCA4MjUwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgODI1MTEsIDgyNTIxLCA4MjUzMSwgODI1NDEsIDgyNTUxLCA4MjU2MiwgODI1NzIsIDgyNTgyLCAKLSAgICA4MjU5MywgODI2MDIsIDgyNjExLCA4MjYyMCwgODI2MzEsIDgyNjQxLCA4MjY1MSwgODI2NjMsIDgyNjczLCA4MjY4MywgCi0gICAgODI2OTMsIDgyNzAzLCA4MjcxMywgODI3MjMsIDgyNzMzLCA4Mjc0MywgODI3NTMsIDgyNzYzLCA4Mjc3MywgODI3ODQsIAotICAgIDgyNzk1LCA4MjgwNSwgODI4MTUsIDgyODI3LCA4MjgzOCwgODI4NDksIDgyODU5LCA4Mjg2OSwgODI4NzksIDgyODg5LCAKLSAgICA4Mjg5OSwgODI5MDksIDgyOTE5LCA4MjkzMSwgODI5NDEsIDgyOTUxLCA4Mjk2MywgODI5NzQsIDgyOTg1LCA4Mjk5NSwgCi0gICAgODMwMDUsIDgzMDE1LCA4MzAyNSwgODMwMzcsIDgzMDQ3LCA4MzA1NywgODMwNjgsIDgzMDc5LCA4MzA4OSwgODMwOTksIAotICAgIDgzMTA4LCA4MzExNywgODMxMjYsIDgzMTM1LCA4MzE0NCwgODMxNTQsIDAsIDAsIDgzMTY0LCA4MzE3NCwgODMxODQsIAotICAgIDgzMTk0LCA4MzIwNCwgODMyMTYsIDgzMjI2LCA4MzIzNiwgODMyNDgsIDgzMjU4LCA4MzI3MCwgODMyNzksIDgzMjg4LCAKLSAgICA4MzI5OSwgODMzMDksIDgzMzIxLCA4MzMzMiwgODMzNDUsIDgzMzU1LCA4MzM2NywgODMzNzYsIDgzMzg3LCA4MzM5OCwgCi0gICAgODM0MTEsIDgzNDIxLCA4MzQzMSwgODM0NDEsIDgzNDUxLCA4MzQ2MSwgODM0NzAsIDgzNDc5LCA4MzQ4OCwgODM0OTcsIAotICAgIDgzNTA3LCA4MzUxNywgODM1MjcsIDgzNTM3LCA4MzU0NywgODM1NTcsIDgzNTY3LCA4MzU3NywgODM1ODcsIDgzNTk3LCAKLSAgICA4MzYwNywgODM2MTcsIDgzNjI2LCA4MzYzNSwgODM2NDQsIDgzNjU0LCA4MzY2NCwgODM2NzQsIDgzNjg0LCA4MzY5NCwgCi0gICAgODM3MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzNzE1LCA4MzczMCwgCi0gICAgODM3NDUsIDgzNzUxLCA4Mzc1NywgODM3NjMsIDgzNzY5LCA4Mzc3NSwgODM3ODEsIDgzNzg3LCA4Mzc5MywgODM4MDEsIAotICAgIDgzODA1LCA4MzgwOCwgMCwgMCwgODM4MTYsIDgzODE5LCA4MzgyMiwgODM4MjUsIDgzODI4LCA4MzgzMSwgODM4MzQsIAotICAgIDgzODM3LCA4Mzg0MCwgODM4NDMsIDgzODQ2LCA4Mzg0OSwgODM4NTIsIDgzODU1LCA4Mzg1OCwgODM4NjEsIDgzODY0LCAKLSAgICA4Mzg3MiwgODM4ODEsIDgzODkyLCA4MzkwMCwgODM5MDgsIDgzOTE3LCA4MzkyNiwgODM5MzcsIDgzOTQ5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA4Mzk1OCwgODM5NjMsIDgzOTY4LCA4Mzk3NSwgODM5ODIsIDgzOTg4LCA4Mzk5NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgODM5OTksIDg0MDA5LCA4NDAxOSwgODQwMjksIDg0MDM4LCA4NDA0OSwgODQwNTgsIDg0MDY3LCAKLSAgICA4NDA3NywgODQwODcsIDg0MDk5LCA4NDExMSwgODQxMjIsIDg0MTMzLCA4NDE0NCwgODQxNTUsIDg0MTY1LCA4NDE3NSwgCi0gICAgODQxODUsIDg0MTk1LCA4NDIwNiwgODQyMTcsIDg0MjIxLCA4NDIyNiwgODQyMzUsIDg0MjQ0LCA4NDI0OCwgODQyNTIsIAotICAgIDg0MjU2LCA4NDI2MSwgODQyNjYsIDg0MjcxLCA4NDI3NiwgODQyNzksIDg0MjgzLCAwLCA4NDI4OCwgODQyOTEsIDg0Mjk0LCAKLSAgICA4NDI5OCwgODQzMDIsIDg0MzA3LCA4NDMxMSwgODQzMTUsIDg0MzIwLCA4NDMyNSwgODQzMzIsIDg0MzM5LCA4NDM0MiwgCi0gICAgODQzNDUsIDg0MzQ4LCA4NDM1MSwgODQzNTQsIDg0MzU4LCA4NDM2MiwgMCwgODQzNjYsIDg0MzcxLCA4NDM3NSwgODQzNzksIAotICAgIDAsIDAsIDAsIDAsIDg0Mzg0LCA4NDM4OSwgODQzOTYsIDg0NDAxLCA4NDQwNiwgMCwgODQ0MTEsIDg0NDE2LCA4NDQyMSwgCi0gICAgODQ0MjYsIDg0NDMxLCA4NDQzNiwgODQ0NDEsIDg0NDQ2LCA4NDQ1MSwgODQ0NTYsIDg0NDYxLCA4NDQ2NiwgODQ0NzUsIAotICAgIDg0NDg0LCA4NDQ5MiwgODQ1MDAsIDg0NTA5LCA4NDUxOCwgODQ1MjcsIDg0NTM2LCA4NDU0NCwgODQ1NTIsIDg0NTYwLCAKLSAgICA4NDU2OCwgODQ1NzMsIDg0NTc4LCA4NDU4NCwgODQ1OTAsIDg0NTk2LCA4NDYwMiwgODQ2MTAsIDg0NjE4LCA4NDYyNCwgCi0gICAgODQ2MzAsIDg0NjM2LCA4NDY0MiwgODQ2NDgsIDg0NjU0LCA4NDY2MCwgODQ2NjYsIDg0NjcxLCA4NDY3NiwgODQ2ODEsIAotICAgIDg0Njg2LCA4NDY5MSwgODQ2OTYsIDg0NzAxLCA4NDcwNiwgODQ3MTIsIDg0NzE4LCA4NDcyNCwgODQ3MzAsIDg0NzM2LCAKLSAgICA4NDc0MiwgODQ3NDgsIDg0NzU0LCA4NDc2MCwgODQ3NjYsIDg0NzcyLCA4NDc3OCwgODQ3ODQsIDg0NzkwLCA4NDc5NiwgCi0gICAgODQ4MDIsIDg0ODA4LCA4NDgxNCwgODQ4MjAsIDg0ODI2LCA4NDgzMiwgODQ4MzgsIDg0ODQ0LCA4NDg1MCwgODQ4NTYsIAotICAgIDg0ODYyLCA4NDg2OCwgODQ4NzQsIDg0ODgwLCA4NDg4NiwgODQ4OTIsIDg0ODk4LCA4NDkwNCwgODQ5MTAsIDg0OTE2LCAKLSAgICA4NDkyMiwgODQ5MjgsIDg0OTM0LCA4NDk0MCwgODQ5NDYsIDg0OTUyLCA4NDk1OCwgODQ5NjQsIDg0OTcwLCA4NDk3NiwgCi0gICAgODQ5ODIsIDg0OTg4LCA4NDk5NCwgODUwMDAsIDg1MDA2LCA4NTAxMiwgODUwMTgsIDg1MDI0LCA4NTAzMCwgODUwMzYsIAotICAgIDg1MDQyLCA4NTA0OCwgODUwNTQsIDg1MDYwLCA4NTA2NiwgODUwNzEsIDg1MDc2LCA4NTA4MSwgODUwODYsIDg1MDkyLCAKLSAgICA4NTA5OCwgODUxMDQsIDg1MTEwLCA4NTExNiwgODUxMjIsIDg1MTI4LCA4NTEzNCwgODUxNDAsIDg1MTQ2LCA4NTE1MywgCi0gICAgODUxNjAsIDg1MTY1LCA4NTE3MCwgODUxNzUsIDg1MTgwLCA4NTE5MiwgODUyMDQsIDg1MjE1LCA4NTIyNiwgODUyMzgsIAotICAgIDg1MjUwLCA4NTI1OCwgMCwgMCwgODUyNjYsIDAsIDg1Mjc0LCA4NTI3OCwgODUyODIsIDg1Mjg1LCA4NTI4OSwgODUyOTMsIAotICAgIDg1Mjk2LCA4NTI5OSwgODUzMDMsIDg1MzA3LCA4NTMxMCwgODUzMTMsIDg1MzE2LCA4NTMxOSwgODUzMjQsIDg1MzI3LCAKLSAgICA4NTMzMSwgODUzMzQsIDg1MzM3LCA4NTM0MCwgODUzNDMsIDg1MzQ2LCA4NTM0OSwgODUzNTIsIDg1MzU1LCA4NTM1OCwgCi0gICAgODUzNjEsIDg1MzY0LCA4NTM2OCwgODUzNzIsIDg1Mzc2LCA4NTM4MCwgODUzODUsIDg1MzkwLCA4NTM5NiwgODU0MDIsIAotICAgIDg1NDA4LCA4NTQxMywgODU0MTksIDg1NDI1LCA4NTQzMSwgODU0MzYsIDg1NDQyLCA4NTQ0OCwgODU0NTMsIDg1NDU4LCAKLSAgICA4NTQ2NCwgODU0NjksIDg1NDc1LCA4NTQ4MSwgODU0ODYsIDg1NDkyLCA4NTQ5OCwgODU1MDMsIDg1NTA5LCA4NTUxNSwgCi0gICAgODU1MjEsIDg1NTI3LCA4NTUzMywgODU1MzcsIDg1NTQyLCA4NTU0NiwgODU1NTEsIDg1NTU1LCA4NTU2MCwgODU1NjUsIAotICAgIDg1NTcxLCA4NTU3NywgODU1ODMsIDg1NTg4LCA4NTU5NCwgODU2MDAsIDg1NjA2LCA4NTYxMSwgODU2MTcsIDg1NjIzLCAKLSAgICA4NTYyOCwgODU2MzMsIDg1NjM5LCA4NTY0NCwgODU2NTAsIDg1NjU2LCA4NTY2MSwgODU2NjcsIDg1NjczLCA4NTY3OCwgCi0gICAgODU2ODQsIDg1NjkwLCA4NTY5NiwgODU3MDIsIDg1NzA4LCA4NTcxMywgODU3MTcsIDg1NzIyLCA4NTcyNCwgODU3MjksIAotICAgIDg1NzM0LCA4NTc0MCwgODU3NDUsIDg1NzUwLCA4NTc1NCwgODU3NjAsIDg1NzY1LCA4NTc3MCwgODU3NzUsIDg1NzgwLCAKLSAgICA4NTc4NSwgODU3OTAsIDg1Nzk1LCA4NTgwMSwgODU4MDcsIDg1ODEzLCA4NTgyMSwgODU4MjUsIDg1ODI5LCA4NTgzMywgCi0gICAgODU4MzcsIDg1ODQxLCA4NTg0NSwgODU4NTAsIDg1ODU1LCA4NTg2MCwgODU4NjUsIDg1ODY5LCA4NTg3NCwgODU4NzksIAotICAgIDg1ODg0LCA4NTg4OSwgODU4OTQsIDg1ODk5LCA4NTkwNCwgODU5MDksIDg1OTEzLCA4NTkxNywgODU5MjIsIDg1OTI3LCAKLSAgICA4NTkzMiwgODU5MzcsIDg1OTQxLCA4NTk0NiwgODU5NTEsIDg1OTU2LCA4NTk2MSwgODU5NjUsIDg1OTcwLCA4NTk3NSwgCi0gICAgODU5ODAsIDg1OTg1LCA4NTk4OSwgODU5OTQsIDg1OTk5LCA4NjAwMywgODYwMDgsIDg2MDEzLCA4NjAxOCwgODYwMjMsIAotICAgIDg2MDI4LCA4NjAzMywgODYwNDAsIDg2MDQ3LCA4NjA1MSwgODYwNTYsIDg2MDYxLCA4NjA2NiwgODYwNzEsIDg2MDc2LCAKLSAgICA4NjA4MSwgODYwODYsIDg2MDkxLCA4NjA5NiwgODYxMDEsIDg2MTA2LCA4NjExMSwgODYxMTYsIDg2MTIxLCA4NjEyNiwgCi0gICAgODYxMzEsIDg2MTM2LCA4NjE0MSwgODYxNDYsIDg2MTUxLCA4NjE1NiwgODYxNjEsIDg2MTY2LCA4NjE3MSwgODYxNzYsIAotICAgIDg2MTgxLCA4NjE4NiwgODYxOTEsIDg2MTk2LCAwLCAwLCAwLCA4NjIwMSwgODYyMDUsIDg2MjEwLCA4NjIxNCwgODYyMTksIAotICAgIDg2MjI0LCAwLCAwLCA4NjIyOCwgODYyMzMsIDg2MjM4LCA4NjI0MiwgODYyNDcsIDg2MjUyLCAwLCAwLCA4NjI1NywgCi0gICAgODYyNjIsIDg2MjY2LCA4NjI3MSwgODYyNzYsIDg2MjgxLCAwLCAwLCA4NjI4NiwgODYyOTEsIDg2Mjk2LCAwLCAwLCAwLCAKLSAgICA4NjMwMCwgODYzMDQsIDg2MzA4LCA4NjMxMiwgODYzMTUsIDg2MzE5LCA4NjMyMywgMCwgODYzMjcsIDg2MzMzLCA4NjMzNiwgCi0gICAgODYzNDAsIDg2MzQzLCA4NjM0NywgODYzNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MzU1LCA4NjM2MSwgCi0gICAgODYzNjcsIDg2MzczLCA4NjM3OSwgMCwgMCwgODYzODMsIDg2Mzg5LCA4NjM5NSwgODY0MDEsIDg2NDA3LCA4NjQxMywgCi0gICAgODY0MjAsIDg2NDI3LCA4NjQzNCwgODY0NDEsIDg2NDQ4LCA4NjQ1NSwgMCwgODY0NjIsIDg2NDY5LCA4NjQ3NiwgODY0ODIsIAotICAgIDg2NDg5LCA4NjQ5NiwgODY1MDMsIDg2NTEwLCA4NjUxNiwgODY1MjMsIDg2NTMwLCA4NjUzNywgODY1NDQsIDg2NTUwLCAKLSAgICA4NjU1NywgODY1NjQsIDg2NTcxLCA4NjU3OCwgODY1ODQsIDg2NTkxLCA4NjU5OCwgODY2MDUsIDg2NjEyLCA4NjYxOSwgCi0gICAgODY2MjYsIDg2NjMzLCAwLCA4NjY0MCwgODY2NDYsIDg2NjUzLCA4NjY2MCwgODY2NjcsIDg2Njc0LCA4NjY4MCwgODY2ODcsIAotICAgIDg2Njk0LCA4NjcwMSwgODY3MDgsIDg2NzE1LCA4NjcyMiwgODY3MjksIDg2NzM1LCA4Njc0MiwgODY3NDksIDg2NzU2LCAKLSAgICA4Njc2MywgMCwgODY3NzAsIDg2Nzc3LCAwLCA4Njc4NCwgODY3OTEsIDg2Nzk4LCA4NjgwNSwgODY4MTIsIDg2ODE5LCAKLSAgICA4NjgyNiwgODY4MzMsIDg2ODQwLCA4Njg0NywgODY4NTQsIDg2ODYxLCA4Njg2OCwgODY4NzUsIDg2ODgyLCAwLCAwLCAKLSAgICA4Njg4OCwgODY4OTMsIDg2ODk4LCA4NjkwMywgODY5MDgsIDg2OTEzLCA4NjkxOCwgODY5MjMsIDg2OTI4LCA4NjkzMywgCi0gICAgODY5MzgsIDg2OTQzLCA4Njk0OCwgODY5NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2OTU4LCA4Njk2NSwgCi0gICAgODY5NzIsIDg2OTc5LCA4Njk4NiwgODY5OTMsIDg3MDAwLCA4NzAwNywgODcwMTQsIDg3MDIxLCA4NzAyOCwgODcwMzUsIAotICAgIDg3MDQyLCA4NzA0OSwgODcwNTYsIDg3MDYzLCA4NzA3MCwgODcwNzcsIDg3MDg0LCA4NzA5MSwgODcwOTksIDg3MTA3LCAKLSAgICA4NzExNCwgODcxMjEsIDg3MTI2LCA4NzEzNCwgODcxNDIsIDg3MTQ5LCA4NzE1NiwgODcxNjEsIDg3MTY4LCA4NzE3MywgCi0gICAgODcxNzgsIDg3MTg1LCA4NzE5MCwgODcxOTUsIDg3MjAwLCA4NzIwOCwgODcyMTMsIDg3MjE4LCA4NzIyNSwgODcyMzAsIAotICAgIDg3MjM1LCA4NzI0MiwgODcyNDksIDg3MjU0LCA4NzI1OSwgODcyNjQsIDg3MjY5LCA4NzI3NCwgODcyNzksIDg3Mjg0LCAKLSAgICA4NzI4OSwgODcyOTQsIDg3MzAxLCA4NzMwNiwgODczMTMsIDg3MzE4LCA4NzMyMywgODczMjgsIDg3MzMzLCA4NzMzOCwgCi0gICAgODczNDMsIDg3MzQ4LCA4NzM1MywgODczNTgsIDg3MzYzLCA4NzM2OCwgODczNzUsIDg3MzgyLCA4NzM4OSwgODczOTYsIAotICAgIDg3NDAyLCA4NzQwNywgODc0MTQsIDg3NDE5LCA4NzQyNCwgODc0MzMsIDg3NDQwLCA4NzQ0OSwgODc0NTYsIDg3NDYxLCAKLSAgICA4NzQ2NiwgODc0NzQsIDg3NDc5LCA4NzQ4NCwgODc0ODksIDg3NDk0LCA4NzQ5OSwgODc1MDYsIDg3NTExLCA4NzUxNiwgCi0gICAgODc1MjEsIDg3NTI2LCA4NzUzMSwgODc1MzgsIDg3NTQ1LCA4NzU1MiwgODc1NTksIDg3NTY2LCA4NzU3MywgODc1ODAsIAotICAgIDg3NTg3LCA4NzU5NCwgODc2MDEsIDg3NjA4LCA4NzYxNSwgODc2MjIsIDg3NjI5LCA4NzYzNiwgODc2NDMsIDg3NjUwLCAKLSAgICA4NzY1NywgODc2NjQsIDg3NjcxLCA4NzY3OCwgODc2ODUsIDg3NjkyLCA4NzY5OSwgODc3MDYsIDg3NzEzLCA4NzcyMCwgCi0gICAgODc3MjcsIDAsIDAsIDAsIDAsIDAsIDg3NzM0LCA4Nzc0MiwgODc3NTAsIDAsIDAsIDAsIDAsIDg3NzU1LCA4Nzc1OSwgCi0gICAgODc3NjMsIDg3NzY3LCA4Nzc3MSwgODc3NzUsIDg3Nzc5LCA4Nzc4MywgODc3ODcsIDg3NzkxLCA4Nzc5NiwgODc4MDEsIAotICAgIDg3ODA2LCA4NzgxMSwgODc4MTYsIDg3ODIxLCA4NzgyNiwgODc4MzEsIDg3ODM2LCA4Nzg0MiwgODc4NDgsIDg3ODU0LCAKLSAgICA4Nzg2MSwgODc4NjgsIDg3ODc1LCA4Nzg4MiwgODc4ODksIDg3ODk2LCA4NzkwMiwgODc5MDgsIDg3OTE0LCA4NzkyMSwgCi0gICAgODc5MjgsIDg3OTM1LCA4Nzk0MiwgODc5NDksIDg3OTU2LCA4Nzk2MywgODc5NzAsIDg3OTc3LCA4Nzk4NCwgODc5OTEsIAotICAgIDg3OTk4LCA4ODAwNSwgODgwMTIsIDAsIDAsIDAsIDg4MDE5LCA4ODAyNywgODgwMzUsIDg4MDQzLCA4ODA1MSwgODgwNTksIAotICAgIDg4MDY5LCA4ODA3OSwgODgwODcsIDg4MDk1LCA4ODEwMywgODgxMTEsIDg4MTE5LCA4ODEyNSwgODgxMzIsIDg4MTQxLCAKLSAgICA4ODE1MCwgODgxNTksIDg4MTY4LCA4ODE3NywgODgxODYsIDg4MTk2LCA4ODIwNywgODgyMTcsIDg4MjI4LCA4ODIzNywgCi0gICAgODgyNDYsIDg4MjU1LCA4ODI2NSwgODgyNzYsIDg4Mjg2LCA4ODI5NywgODgzMDgsIDg4MzE3LCA4ODMyNSwgODgzMzEsIAotICAgIDg4MzM3LCA4ODM0MywgODgzNDksIDg4MzU3LCA4ODM2NSwgODgzNzEsIDg4Mzc4LCA4ODM4OCwgODgzOTUsIDg4NDAyLCAKLSAgICA4ODQwOSwgODg0MTYsIDg4NDIzLCA4ODQzMywgODg0NDAsIDg4NDQ3LCA4ODQ1NSwgODg0NjMsIDg4NDcyLCA4ODQ4MSwgCi0gICAgODg0OTAsIDg4NDk5LCA4ODUwOCwgODg1MTYsIDg4NTI1LCA4ODUzNCwgODg1NDMsIDg4NTQ3LCA4ODU1NCwgODg1NTksIAotICAgIDg4NTY0LCA4ODU2OCwgODg1NzIsIDg4NTc2LCA4ODU4MCwgODg1ODUsIDg4NTkwLCA4ODU5NiwgODg2MDIsIDg4NjA2LCAKLSAgICA4ODYxMiwgODg2MTYsIDg4NjIwLCA4ODYyNCwgODg2MjgsIDg4NjMyLCA4ODYzNiwgODg2NDIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg4NjQ2LCA4ODY1MSwgODg2NTYsIDg4NjYxLCA4ODY2NiwgODg2NzMsIDg4Njc4LCA4ODY4MywgODg2ODgsIDg4NjkzLCAKLSAgICA4ODY5OCwgODg3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzNzQzLCA4Mzc1OCwgODM3NzMsIDgzNzc5LCA4Mzc4NSwgODM3OTEsIAorICAgIDgzNzk3LCA4MzgwMywgODM4MDksIDgzODE1LCA4MzgyMSwgODM4MjksIDgzODMzLCA4MzgzNiwgMCwgMCwgODM4NDQsIAorICAgIDgzODQ3LCA4Mzg1MCwgODM4NTMsIDgzODU2LCA4Mzg1OSwgODM4NjIsIDgzODY1LCA4Mzg2OCwgODM4NzEsIDgzODc0LCAKKyAgICA4Mzg3NywgODM4ODAsIDgzODgzLCA4Mzg4NiwgODM4ODksIDgzODkyLCA4MzkwMCwgODM5MDksIDgzOTIwLCA4MzkyOCwgCisgICAgODM5MzYsIDgzOTQ1LCA4Mzk1NCwgODM5NjUsIDgzOTc3LCAwLCAwLCAwLCAwLCAwLCAwLCA4Mzk4NiwgODM5OTEsIDgzOTk2LCAKKyAgICA4NDAwMywgODQwMTAsIDg0MDE2LCA4NDAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQwMjcsIDg0MDM3LCAKKyAgICA4NDA0NywgODQwNTcsIDg0MDY2LCA4NDA3NywgODQwODYsIDg0MDk1LCA4NDEwNSwgODQxMTUsIDg0MTI3LCA4NDEzOSwgCisgICAgODQxNTAsIDg0MTYxLCA4NDE3MiwgODQxODMsIDg0MTkzLCA4NDIwMywgODQyMTMsIDg0MjIzLCA4NDIzNCwgODQyNDUsIAorICAgIDg0MjQ5LCA4NDI1NCwgODQyNjMsIDg0MjcyLCA4NDI3NiwgODQyODAsIDg0Mjg0LCA4NDI4OSwgODQyOTQsIDg0Mjk5LCAKKyAgICA4NDMwNCwgODQzMDcsIDg0MzExLCAwLCA4NDMxNiwgODQzMTksIDg0MzIyLCA4NDMyNiwgODQzMzAsIDg0MzM1LCA4NDMzOSwgCisgICAgODQzNDMsIDg0MzQ4LCA4NDM1MywgODQzNjAsIDg0MzY3LCA4NDM3MCwgODQzNzMsIDg0Mzc2LCA4NDM3OSwgODQzODIsIAorICAgIDg0Mzg2LCA4NDM5MCwgMCwgODQzOTQsIDg0Mzk5LCA4NDQwMywgODQ0MDcsIDAsIDAsIDAsIDAsIDg0NDEyLCA4NDQxNywgCisgICAgODQ0MjQsIDg0NDI5LCA4NDQzNCwgMCwgODQ0MzksIDg0NDQ0LCA4NDQ0OSwgODQ0NTQsIDg0NDU5LCA4NDQ2NCwgODQ0NjksIAorICAgIDg0NDc0LCA4NDQ3OSwgODQ0ODQsIDg0NDg5LCA4NDQ5NCwgODQ1MDMsIDg0NTEyLCA4NDUyMCwgODQ1MjgsIDg0NTM3LCAKKyAgICA4NDU0NiwgODQ1NTUsIDg0NTY0LCA4NDU3MiwgODQ1ODAsIDg0NTg4LCA4NDU5NiwgODQ2MDEsIDg0NjA2LCA4NDYxMiwgCisgICAgODQ2MTgsIDg0NjI0LCA4NDYzMCwgODQ2MzgsIDg0NjQ2LCA4NDY1MiwgODQ2NTgsIDg0NjY0LCA4NDY3MCwgODQ2NzYsIAorICAgIDg0NjgyLCA4NDY4OCwgODQ2OTQsIDg0Njk5LCA4NDcwNCwgODQ3MDksIDg0NzE0LCA4NDcxOSwgODQ3MjQsIDg0NzI5LCAKKyAgICA4NDczNCwgODQ3NDAsIDg0NzQ2LCA4NDc1MiwgODQ3NTgsIDg0NzY0LCA4NDc3MCwgODQ3NzYsIDg0NzgyLCA4NDc4OCwgCisgICAgODQ3OTQsIDg0ODAwLCA4NDgwNiwgODQ4MTIsIDg0ODE4LCA4NDgyNCwgODQ4MzAsIDg0ODM2LCA4NDg0MiwgODQ4NDgsIAorICAgIDg0ODU0LCA4NDg2MCwgODQ4NjYsIDg0ODcyLCA4NDg3OCwgODQ4ODQsIDg0ODkwLCA4NDg5NiwgODQ5MDIsIDg0OTA4LCAKKyAgICA4NDkxNCwgODQ5MjAsIDg0OTI2LCA4NDkzMiwgODQ5MzgsIDg0OTQ0LCA4NDk1MCwgODQ5NTYsIDg0OTYyLCA4NDk2OCwgCisgICAgODQ5NzQsIDg0OTgwLCA4NDk4NiwgODQ5OTIsIDg0OTk4LCA4NTAwNCwgODUwMTAsIDg1MDE2LCA4NTAyMiwgODUwMjgsIAorICAgIDg1MDM0LCA4NTA0MCwgODUwNDYsIDg1MDUyLCA4NTA1OCwgODUwNjQsIDg1MDcwLCA4NTA3NiwgODUwODIsIDg1MDg4LCAKKyAgICA4NTA5NCwgODUwOTksIDg1MTA0LCA4NTEwOSwgODUxMTQsIDg1MTIwLCA4NTEyNiwgODUxMzIsIDg1MTM4LCA4NTE0NCwgCisgICAgODUxNTAsIDg1MTU2LCA4NTE2MiwgODUxNjgsIDg1MTc0LCA4NTE4MSwgODUxODgsIDg1MTkzLCA4NTE5OCwgODUyMDMsIAorICAgIDg1MjA4LCA4NTIyMCwgODUyMzIsIDg1MjQzLCA4NTI1NCwgODUyNjYsIDg1Mjc4LCA4NTI4NiwgMCwgMCwgODUyOTQsIDAsIAorICAgIDg1MzAyLCA4NTMwNiwgODUzMTAsIDg1MzEzLCA4NTMxNywgODUzMjEsIDg1MzI0LCA4NTMyNywgODUzMzEsIDg1MzM1LCAKKyAgICA4NTMzOCwgODUzNDEsIDg1MzQ0LCA4NTM0NywgODUzNTIsIDg1MzU1LCA4NTM1OSwgODUzNjIsIDg1MzY1LCA4NTM2OCwgCisgICAgODUzNzEsIDg1Mzc0LCA4NTM3NywgODUzODAsIDg1MzgzLCA4NTM4NiwgODUzODksIDg1MzkyLCA4NTM5NiwgODU0MDAsIAorICAgIDg1NDA0LCA4NTQwOCwgODU0MTMsIDg1NDE4LCA4NTQyNCwgODU0MzAsIDg1NDM2LCA4NTQ0MSwgODU0NDcsIDg1NDUzLCAKKyAgICA4NTQ1OSwgODU0NjQsIDg1NDcwLCA4NTQ3NiwgODU0ODEsIDg1NDg2LCA4NTQ5MiwgODU0OTcsIDg1NTAzLCA4NTUwOSwgCisgICAgODU1MTQsIDg1NTIwLCA4NTUyNiwgODU1MzEsIDg1NTM3LCA4NTU0MywgODU1NDksIDg1NTU1LCA4NTU2MSwgODU1NjUsIAorICAgIDg1NTcwLCA4NTU3NCwgODU1NzksIDg1NTgzLCA4NTU4OCwgODU1OTMsIDg1NTk5LCA4NTYwNSwgODU2MTEsIDg1NjE2LCAKKyAgICA4NTYyMiwgODU2MjgsIDg1NjM0LCA4NTYzOSwgODU2NDUsIDg1NjUxLCA4NTY1NiwgODU2NjEsIDg1NjY3LCA4NTY3MiwgCisgICAgODU2NzgsIDg1Njg0LCA4NTY4OSwgODU2OTUsIDg1NzAxLCA4NTcwNiwgODU3MTIsIDg1NzE4LCA4NTcyNCwgODU3MzAsIAorICAgIDg1NzM2LCA4NTc0MSwgODU3NDUsIDg1NzUwLCA4NTc1MiwgODU3NTcsIDg1NzYyLCA4NTc2OCwgODU3NzMsIDg1Nzc4LCAKKyAgICA4NTc4MiwgODU3ODgsIDg1NzkzLCA4NTc5OCwgODU4MDMsIDg1ODA4LCA4NTgxMywgODU4MTgsIDg1ODIzLCA4NTgyOSwgCisgICAgODU4MzUsIDg1ODQxLCA4NTg0OSwgODU4NTMsIDg1ODU3LCA4NTg2MSwgODU4NjUsIDg1ODY5LCA4NTg3MywgODU4NzgsIAorICAgIDg1ODgzLCA4NTg4OCwgODU4OTMsIDg1ODk3LCA4NTkwMiwgODU5MDcsIDg1OTEyLCA4NTkxNywgODU5MjIsIDg1OTI3LCAKKyAgICA4NTkzMiwgODU5MzcsIDg1OTQxLCA4NTk0NSwgODU5NTAsIDg1OTU1LCA4NTk2MCwgODU5NjUsIDg1OTY5LCA4NTk3NCwgCisgICAgODU5NzksIDg1OTg0LCA4NTk4OSwgODU5OTMsIDg1OTk4LCA4NjAwMywgODYwMDgsIDg2MDEzLCA4NjAxNywgODYwMjIsIAorICAgIDg2MDI3LCA4NjAzMSwgODYwMzYsIDg2MDQxLCA4NjA0NiwgODYwNTEsIDg2MDU2LCA4NjA2MSwgODYwNjgsIDg2MDc1LCAKKyAgICA4NjA3OSwgODYwODQsIDg2MDg5LCA4NjA5NCwgODYwOTksIDg2MTA0LCA4NjEwOSwgODYxMTQsIDg2MTE5LCA4NjEyNCwgCisgICAgODYxMjksIDg2MTM0LCA4NjEzOSwgODYxNDQsIDg2MTQ5LCA4NjE1NCwgODYxNTksIDg2MTY0LCA4NjE2OSwgODYxNzQsIAorICAgIDg2MTc5LCA4NjE4NCwgODYxODksIDg2MTk0LCA4NjE5OSwgODYyMDQsIDg2MjA5LCA4NjIxNCwgODYyMTksIDg2MjI0LCAwLCAKKyAgICAwLCAwLCA4NjIyOSwgODYyMzMsIDg2MjM4LCA4NjI0MiwgODYyNDcsIDg2MjUyLCAwLCAwLCA4NjI1NiwgODYyNjEsIAorICAgIDg2MjY2LCA4NjI3MCwgODYyNzUsIDg2MjgwLCAwLCAwLCA4NjI4NSwgODYyOTAsIDg2Mjk0LCA4NjI5OSwgODYzMDQsIAorICAgIDg2MzA5LCAwLCAwLCA4NjMxNCwgODYzMTksIDg2MzI0LCAwLCAwLCAwLCA4NjMyOCwgODYzMzIsIDg2MzM2LCA4NjM0MCwgCisgICAgODYzNDMsIDg2MzQ3LCA4NjM1MSwgMCwgODYzNTUsIDg2MzYxLCA4NjM2NCwgODYzNjgsIDg2MzcxLCA4NjM3NSwgODYzNzksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MzgzLCA4NjM4OSwgODYzOTUsIDg2NDAxLCA4NjQwNywgMCwgMCwgCisgICAgODY0MTEsIDg2NDE3LCA4NjQyMywgODY0MjksIDg2NDM1LCA4NjQ0MSwgODY0NDgsIDg2NDU1LCA4NjQ2MiwgODY0NjksIAorICAgIDg2NDc2LCA4NjQ4MywgMCwgODY0OTAsIDg2NDk3LCA4NjUwNCwgODY1MTAsIDg2NTE3LCA4NjUyNCwgODY1MzEsIDg2NTM4LCAKKyAgICA4NjU0NCwgODY1NTEsIDg2NTU4LCA4NjU2NSwgODY1NzIsIDg2NTc4LCA4NjU4NSwgODY1OTIsIDg2NTk5LCA4NjYwNiwgCisgICAgODY2MTIsIDg2NjE5LCA4NjYyNiwgODY2MzMsIDg2NjQwLCA4NjY0NywgODY2NTQsIDg2NjYxLCAwLCA4NjY2OCwgODY2NzQsIAorICAgIDg2NjgxLCA4NjY4OCwgODY2OTUsIDg2NzAyLCA4NjcwOCwgODY3MTUsIDg2NzIyLCA4NjcyOSwgODY3MzYsIDg2NzQzLCAKKyAgICA4Njc1MCwgODY3NTcsIDg2NzYzLCA4Njc3MCwgODY3NzcsIDg2Nzg0LCA4Njc5MSwgMCwgODY3OTgsIDg2ODA1LCAwLCAKKyAgICA4NjgxMiwgODY4MTksIDg2ODI2LCA4NjgzMywgODY4NDAsIDg2ODQ3LCA4Njg1NCwgODY4NjEsIDg2ODY4LCA4Njg3NSwgCisgICAgODY4ODIsIDg2ODg5LCA4Njg5NiwgODY5MDMsIDg2OTEwLCAwLCAwLCA4NjkxNiwgODY5MjEsIDg2OTI2LCA4NjkzMSwgCisgICAgODY5MzYsIDg2OTQxLCA4Njk0NiwgODY5NTEsIDg2OTU2LCA4Njk2MSwgODY5NjYsIDg2OTcxLCA4Njk3NiwgODY5ODEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzA4LCA4ODcxNSwgODg3MjQsIDg4NzMzLCA4ODc0MCwgODg3NDcsIDg4NzU0LCAKLSAgICA4ODc2MSwgODg3NjgsIDg4Nzc1LCA4ODc4MSwgODg3ODgsIDg4Nzk1LCA4ODgwMiwgODg4MDksIDg4ODE2LCA4ODgyMywgCi0gICAgODg4MzAsIDg4ODM3LCA4ODg0NiwgODg4NTMsIDg4ODYwLCA4ODg2NywgODg4NzQsIDg4ODgxLCA4ODg4OCwgODg4OTUsIAotICAgIDg4OTAyLCA4ODkxMSwgODg5MTgsIDg4OTI1LCA4ODkzMiwgODg5MzksIDg4OTQ2LCA4ODk1MywgODg5NjIsIDg4OTY5LCAKLSAgICA4ODk3NiwgODg5ODMsIDg4OTkwLCA4ODk5OSwgODkwMDYsIDg5MDEzLCA4OTAyMCwgODkwMjgsIDg5MDM3LCAwLCAwLCAKLSAgICA4OTA0NiwgODkwNTAsIDg5MDU0LCA4OTA1OSwgODkwNjQsIDg5MDY5LCA4OTA3NCwgODkwNzgsIDg5MDgzLCA4OTA4OCwgCi0gICAgODkwOTMsIDg5MDk4LCA4OTEwMywgODkxMDgsIDg5MTEyLCA4OTExNiwgODkxMjEsIDg5MTI2LCA4OTEzMSwgODkxMzUsIAotICAgIDg5MTQwLCA4OTE0NSwgODkxNDksIDg5MTU0LCA4OTE1OSwgODkxNjQsIDg5MTY5LCA4OTE3NCwgODkxNzksIDAsIDAsIDAsIAotICAgIDg5MTg0LCA4OTE4OCwgODkxOTMsIDg5MTk4LCA4OTIwMiwgODkyMDcsIDg5MjExLCA4OTIxNiwgODkyMjEsIDg5MjI2LCAKLSAgICA4OTIzMSwgODkyMzUsIDg5MjM5LCA4OTI0NCwgODkyNDksIDg5MjU0LCA4OTI1OSwgODkyNjQsIDg5MjY5LCA4OTI3MywgCi0gICAgODkyNzgsIDg5MjgzLCA4OTI4OCwgODkyOTMsIDg5Mjk4LCA4OTMwMywgODkzMDcsIDg5MzExLCA4OTMxNiwgODkzMjEsIAotICAgIDg5MzI2LCA4OTMzMSwgODkzMzYsIDg5MzQxLCA4OTM0NiwgODkzNTEsIDg5MzU2LCA4OTM2MSwgODkzNjYsIDg5MzcxLCAKLSAgICA4OTM3NiwgODkzODEsIDg5Mzg2LCA4OTM5MSwgODkzOTYsIDg5NDAxLCA4OTQwNiwgODk0MTEsIDg5NDE2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Njk4NiwgODY5OTMsIDg3MDAwLCA4NzAwNywgODcwMTQsIDg3MDIxLCAKKyAgICA4NzAyOCwgODcwMzUsIDg3MDQyLCA4NzA0OSwgODcwNTYsIDg3MDYzLCA4NzA3MCwgODcwNzcsIDg3MDg0LCA4NzA5MSwgCisgICAgODcwOTgsIDg3MTA1LCA4NzExMiwgODcxMTksIDg3MTI3LCA4NzEzNSwgODcxNDIsIDg3MTQ5LCA4NzE1NCwgODcxNjIsIAorICAgIDg3MTcwLCA4NzE3NywgODcxODQsIDg3MTg5LCA4NzE5NiwgODcyMDEsIDg3MjA2LCA4NzIxMywgODcyMTgsIDg3MjIzLCAKKyAgICA4NzIyOCwgODcyMzYsIDg3MjQxLCA4NzI0NiwgODcyNTMsIDg3MjU4LCA4NzI2MywgODcyNzAsIDg3Mjc3LCA4NzI4MiwgCisgICAgODcyODcsIDg3MjkyLCA4NzI5NywgODczMDIsIDg3MzA3LCA4NzMxMiwgODczMTcsIDg3MzIyLCA4NzMyOSwgODczMzQsIAorICAgIDg3MzQxLCA4NzM0NiwgODczNTEsIDg3MzU2LCA4NzM2MSwgODczNjYsIDg3MzcxLCA4NzM3NiwgODczODEsIDg3Mzg2LCAKKyAgICA4NzM5MSwgODczOTYsIDg3NDAzLCA4NzQxMCwgODc0MTcsIDg3NDI0LCA4NzQzMCwgODc0MzUsIDg3NDQyLCA4NzQ0NywgCisgICAgODc0NTIsIDg3NDYxLCA4NzQ2OCwgODc0NzcsIDg3NDg0LCA4NzQ4OSwgODc0OTQsIDg3NTAyLCA4NzUwNywgODc1MTIsIAorICAgIDg3NTE3LCA4NzUyMiwgODc1MjcsIDg3NTM0LCA4NzUzOSwgODc1NDQsIDg3NTQ5LCA4NzU1NCwgODc1NTksIDg3NTY2LCAKKyAgICA4NzU3MywgODc1ODAsIDg3NTg3LCA4NzU5NCwgODc2MDEsIDg3NjA4LCA4NzYxNSwgODc2MjIsIDg3NjI5LCA4NzYzNiwgCisgICAgODc2NDMsIDg3NjUwLCA4NzY1NywgODc2NjQsIDg3NjcxLCA4NzY3OCwgODc2ODUsIDg3NjkyLCA4NzY5OSwgODc3MDYsIAorICAgIDg3NzEzLCA4NzcyMCwgODc3MjcsIDg3NzM0LCA4Nzc0MSwgODc3NDgsIDg3NzU1LCAwLCAwLCAwLCAwLCAwLCA4Nzc2MiwgCisgICAgODc3NzAsIDg3Nzc4LCAwLCAwLCAwLCAwLCA4Nzc4MywgODc3ODcsIDg3NzkxLCA4Nzc5NSwgODc3OTksIDg3ODAzLCAKKyAgICA4NzgwNywgODc4MTEsIDg3ODE1LCA4NzgxOSwgODc4MjQsIDg3ODI5LCA4NzgzNCwgODc4MzksIDg3ODQ0LCA4Nzg0OSwgCisgICAgODc4NTQsIDg3ODU5LCA4Nzg2NCwgODc4NzAsIDg3ODc2LCA4Nzg4MiwgODc4ODksIDg3ODk2LCA4NzkwMywgODc5MTAsIAorICAgIDg3OTE3LCA4NzkyNCwgODc5MzAsIDg3OTM2LCA4Nzk0MiwgODc5NDksIDg3OTU2LCA4Nzk2MywgODc5NzAsIDg3OTc3LCAKKyAgICA4Nzk4NCwgODc5OTEsIDg3OTk4LCA4ODAwNSwgODgwMTIsIDg4MDE5LCA4ODAyNiwgODgwMzMsIDg4MDQwLCAwLCAwLCAwLCAKKyAgICA4ODA0NywgODgwNTUsIDg4MDYzLCA4ODA3MSwgODgwNzksIDg4MDg3LCA4ODA5NywgODgxMDcsIDg4MTE1LCA4ODEyMywgCisgICAgODgxMzEsIDg4MTM5LCA4ODE0NywgODgxNTMsIDg4MTYwLCA4ODE2OSwgODgxNzgsIDg4MTg3LCA4ODE5NiwgODgyMDUsIAorICAgIDg4MjE0LCA4ODIyNCwgODgyMzUsIDg4MjQ1LCA4ODI1NiwgODgyNjUsIDg4Mjc0LCA4ODI4MywgODgyOTMsIDg4MzA0LCAKKyAgICA4ODMxNCwgODgzMjUsIDg4MzM2LCA4ODM0NSwgODgzNTMsIDg4MzU5LCA4ODM2NSwgODgzNzEsIDg4Mzc3LCA4ODM4NSwgCisgICAgODgzOTMsIDg4Mzk5LCA4ODQwNiwgODg0MTYsIDg4NDIzLCA4ODQzMCwgODg0MzcsIDg4NDQ0LCA4ODQ1MSwgODg0NjEsIAorICAgIDg4NDY4LCA4ODQ3NSwgODg0ODMsIDg4NDkxLCA4ODUwMCwgODg1MDksIDg4NTE4LCA4ODUyNywgODg1MzYsIDg4NTQ0LCAKKyAgICA4ODU1MywgODg1NjIsIDg4NTcxLCA4ODU3NSwgODg1ODIsIDg4NTg3LCA4ODU5MiwgODg1OTYsIDg4NjAwLCA4ODYwNCwgCisgICAgODg2MDgsIDg4NjEzLCA4ODYxOCwgODg2MjQsIDg4NjMwLCA4ODYzNCwgODg2NDAsIDg4NjQ0LCA4ODY0OCwgODg2NTIsIAorICAgIDg4NjU2LCA4ODY2MCwgODg2NjQsIDg4NjcwLCAwLCAwLCAwLCAwLCAwLCA4ODY3NCwgODg2NzksIDg4Njg0LCA4ODY4OSwgCisgICAgODg2OTQsIDg4NzAxLCA4ODcwNiwgODg3MTEsIDg4NzE2LCA4ODcyMSwgODg3MjYsIDg4NzMxLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTQyMSwgODk0MjUsIAotICAgIDg5NDMwLCA4OTQzNSwgODk0NDAsIDg5NDQ0LCA4OTQ0OSwgODk0NTQsIDg5NDU5LCA4OTQ2NCwgODk0NjgsIDg5NDcyLCAKLSAgICA4OTQ3NywgODk0ODIsIDg5NDg3LCA4OTQ5MiwgODk0OTYsIDg5NTAxLCA4OTUwNiwgODk1MTEsIDg5NTE2LCA4OTUyMSwgCi0gICAgODk1MjYsIDg5NTMwLCA4OTUzNSwgODk1NDAsIDg5NTQ1LCA4OTU1MCwgODk1NTUsIDg5NTYwLCA4OTU2NSwgMCwgODk1NzAsIAotICAgIDg5NTc1LCA4OTU4MCwgODk1ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NTkyLCA4OTU5NywgCi0gICAgODk2MDIsIDg5NjA3LCA4OTYxMiwgODk2MTcsIDg5NjIyLCA4OTYyNywgODk2MzIsIDg5NjM3LCA4OTY0MiwgODk2NDcsIAotICAgIDg5NjUyLCA4OTY1NywgODk2NjIsIDg5NjY3LCA4OTY3MiwgODk2NzcsIDg5NjgyLCA4OTY4NywgODk2OTIsIDg5Njk3LCAKLSAgICA4OTcwMiwgODk3MDcsIDg5NzEyLCA4OTcxNywgODk3MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzM2LCAKKyAgICA4ODc0MywgODg3NTIsIDg4NzYxLCA4ODc2OCwgODg3NzUsIDg4NzgyLCA4ODc4OSwgODg3OTYsIDg4ODAzLCA4ODgwOSwgCisgICAgODg4MTYsIDg4ODIzLCA4ODgzMCwgODg4MzcsIDg4ODQ0LCA4ODg1MSwgODg4NTgsIDg4ODY1LCA4ODg3NCwgODg4ODEsIAorICAgIDg4ODg4LCA4ODg5NSwgODg5MDIsIDg4OTA5LCA4ODkxNiwgODg5MjMsIDg4OTMwLCA4ODkzOSwgODg5NDYsIDg4OTUzLCAKKyAgICA4ODk2MCwgODg5NjcsIDg4OTc0LCA4ODk4MSwgODg5OTAsIDg4OTk3LCA4OTAwNCwgODkwMTEsIDg5MDE4LCA4OTAyNywgCisgICAgODkwMzQsIDg5MDQxLCA4OTA0OCwgODkwNTYsIDg5MDY1LCAwLCAwLCA4OTA3NCwgODkwNzgsIDg5MDgyLCA4OTA4NywgCisgICAgODkwOTIsIDg5MDk3LCA4OTEwMiwgODkxMDYsIDg5MTExLCA4OTExNiwgODkxMjEsIDg5MTI2LCA4OTEzMSwgODkxMzYsIAorICAgIDg5MTQwLCA4OTE0NCwgODkxNDksIDg5MTU0LCA4OTE1OSwgODkxNjMsIDg5MTY4LCA4OTE3MywgODkxNzcsIDg5MTgyLCAKKyAgICA4OTE4NywgODkxOTIsIDg5MTk3LCA4OTIwMiwgODkyMDcsIDAsIDAsIDAsIDg5MjEyLCA4OTIxNiwgODkyMjEsIDg5MjI2LCAKKyAgICA4OTIzMCwgODkyMzUsIDg5MjM5LCA4OTI0NCwgODkyNDksIDg5MjU0LCA4OTI1OSwgODkyNjMsIDg5MjY3LCA4OTI3MiwgCisgICAgODkyNzcsIDg5MjgyLCA4OTI4NywgODkyOTIsIDg5Mjk3LCA4OTMwMSwgODkzMDYsIDg5MzExLCA4OTMxNiwgODkzMjEsIAorICAgIDg5MzI2LCA4OTMzMSwgODkzMzUsIDg5MzM5LCA4OTM0NCwgODkzNDksIDg5MzU0LCA4OTM1OSwgODkzNjQsIDg5MzY5LCAKKyAgICA4OTM3NCwgODkzNzksIDg5Mzg0LCA4OTM4OSwgODkzOTQsIDg5Mzk5LCA4OTQwNCwgODk0MDksIDg5NDE0LCA4OTQxOSwgCisgICAgODk0MjQsIDg5NDI5LCA4OTQzNCwgODk0MzksIDg5NDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTcyOSwgODk3MzQsIDg5NzM5LCAKLSAgICA4OTc0NCwgODk3NDksIDg5NzU0LCA4OTc1OSwgODk3NjQsIDg5NzY5LCA4OTc3NCwgODk3NzksIDg5Nzg0LCA4OTc4OSwgCi0gICAgODk3OTQsIDg5Nzk5LCA4OTgwNCwgODk4MDksIDg5ODE0LCA4OTgxOSwgODk4MjQsIDg5ODI5LCA4OTgzNCwgODk4MzksIAotICAgIDg5ODQ0LCA4OTg0OSwgODk4NTQsIDg5ODU5LCA4OTg2MywgODk4NjcsIDg5ODcxLCAwLCA4OTg3NiwgODk4ODIsIDg5ODg3LCAKLSAgICA4OTg5MiwgODk4OTcsIDg5OTAyLCA4OTkwOCwgODk5MTQsIDg5OTIwLCA4OTkyNiwgODk5MzIsIDg5OTM4LCA4OTk0NCwgCi0gICAgODk5NTAsIDg5OTU2LCA4OTk2MiwgODk5NjgsIDg5OTc0LCA4OTk4MCwgODk5ODUsIDg5OTkxLCA4OTk5NywgOTAwMDIsIAotICAgIDkwMDA4LCA5MDAxMywgOTAwMTksIDkwMDI1LCA5MDAzMCwgOTAwMzYsIDkwMDQyLCA5MDA0NywgOTAwNTMsIDkwMDU5LCAKLSAgICA5MDA2NCwgOTAwNzAsIDkwMDc2LCA5MDA4MiwgMCwgMCwgMCwgMCwgOTAwODcsIDkwMDkzLCA5MDA5OSwgOTAxMDUsIAotICAgIDkwMTExLCA5MDExNywgOTAxMjMsIDkwMTI5LCA5MDEzNSwgOTAxNDIsIDkwMTQ3LCA5MDE1MiwgOTAxNTgsIDkwMTY0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTQ0OSwgODk0NTMsIDg5NDU4LCA4OTQ2MywgODk0NjgsIDg5NDcyLCAKKyAgICA4OTQ3NywgODk0ODIsIDg5NDg3LCA4OTQ5MiwgODk0OTYsIDg5NTAwLCA4OTUwNSwgODk1MTAsIDg5NTE1LCA4OTUyMCwgCisgICAgODk1MjQsIDg5NTI5LCA4OTUzNCwgODk1MzksIDg5NTQ0LCA4OTU0OSwgODk1NTQsIDg5NTU4LCA4OTU2MywgODk1NjgsIAorICAgIDg5NTczLCA4OTU3OCwgODk1ODMsIDg5NTg4LCA4OTU5MywgMCwgODk1OTgsIDg5NjAzLCA4OTYwOCwgODk2MTQsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NjIwLCA4OTYyNSwgODk2MzAsIDg5NjM1LCA4OTY0MCwgODk2NDUsIAorICAgIDg5NjUwLCA4OTY1NSwgODk2NjAsIDg5NjY1LCA4OTY3MCwgODk2NzUsIDg5NjgwLCA4OTY4NSwgODk2OTAsIDg5Njk1LCAKKyAgICA4OTcwMCwgODk3MDUsIDg5NzEwLCA4OTcxNSwgODk3MjAsIDg5NzI1LCA4OTczMCwgODk3MzUsIDg5NzQwLCA4OTc0NSwgCisgICAgODk3NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkwMTcwLCA5MDE3NSwgOTAxODAsIAotICAgIDkwMTg1LCA5MDE5MSwgOTAxOTYsIDkwMjAyLCA5MDIwOCwgOTAyMTQsIDkwMjIwLCA5MDIyNywgOTAyMzMsIDkwMjQwLCAKLSAgICA5MDI0NSwgOTAyNTAsIDkwMjU1LCA5MDI2MCwgOTAyNjUsIDkwMjcwLCA5MDI3NSwgOTAyODAsIDkwMjg1LCA5MDI5MCwgCi0gICAgOTAyOTUsIDkwMzAwLCA5MDMwNSwgOTAzMTAsIDkwMzE1LCA5MDMyMCwgOTAzMjUsIDkwMzMwLCA5MDMzNSwgOTAzNDAsIAotICAgIDkwMzQ1LCA5MDM1MCwgOTAzNTUsIDkwMzYwLCA5MDM2NSwgOTAzNzAsIDkwMzc1LCA5MDM4MCwgOTAzODUsIDkwMzkwLCAKLSAgICA5MDM5NSwgOTA0MDEsIDkwNDA2LCA5MDQxMiwgOTA0MTgsIDkwNDI0LCA5MDQzMCwgOTA0MzcsIDkwNDQzLCA5MDQ1MCwgCi0gICAgOTA0NTUsIDkwNDYwLCA5MDQ2NSwgOTA0NzAsIDkwNDc1LCA5MDQ4MCwgOTA0ODUsIDkwNDkwLCA5MDQ5NSwgOTA1MDAsIAotICAgIDkwNTA1LCA5MDUxMCwgOTA1MTUsIDkwNTIwLCA5MDUyNSwgOTA1MzAsIDkwNTM1LCA5MDU0MCwgOTA1NDUsIDkwNTUwLCAKLSAgICA5MDU1NSwgOTA1NjAsIDkwNTY1LCA5MDU3MCwgOTA1NzUsIDkwNTgwLCA5MDU4NSwgOTA1OTAsIDkwNTk1LCA5MDYwMCwgCi0gICAgOTA2MDUsIDkwNjEwLCA5MDYxNSwgOTA2MjAsIDkwNjI1LCA5MDYzMCwgOTA2MzUsIDkwNjQwLCA5MDY0NSwgOTA2NTAsIAotICAgIDkwNjU1LCA5MDY2MCwgOTA2NjUsIDkwNjcwLCA5MDY3NSwgOTA2ODAsIDkwNjg1LCA5MDY5MCwgOTA2OTUsIDkwNzAwLCAKLSAgICA5MDcwNSwgOTA3MTAsIDkwNzE1LCA5MDcyMCwgOTA3MjUsIDkwNzMwLCA5MDczNSwgOTA3NDAsIDkwNzQ1LCA5MDc1MCwgCi0gICAgOTA3NTUsIDkwNzYwLCA5MDc2NSwgOTA3NzAsIDkwNzc1LCA5MDc4MCwgOTA3ODUsIDkwNzkwLCA5MDc5NSwgOTA4MDAsIAotICAgIDkwODA1LCA5MDgxMCwgOTA4MTUsIDkwODIwLCA5MDgyNSwgOTA4MzAsIDkwODM1LCA5MDg0MCwgOTA4NDUsIDkwODUwLCAKLSAgICA5MDg1NSwgOTA4NjAsIDkwODY1LCA5MDg2OSwgOTA4NzMsIDkwODc4LCA5MDg4MywgOTA4ODgsIDkwODkzLCA5MDg5OCwgCi0gICAgOTA5MDMsIDkwOTA4LCA5MDkxMywgOTA5MTgsIDkwOTIzLCA5MDkyOCwgOTA5MzIsIDkwOTM2LCA5MDk0MCwgOTA5NDQsIAotICAgIDkwOTQ4LCA5MDk1MiwgOTA5NTYsIDkwOTYxLCA5MDk2NiwgMCwgMCwgOTA5NzEsIDkwOTc2LCA5MDk4MCwgOTA5ODQsIAotICAgIDkwOTg4LCA5MDk5MiwgOTA5OTYsIDkxMDAwLCA5MTAwNCwgOTEwMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NzU3LCA4OTc2MiwgODk3NjcsIDg5NzcyLCA4OTc3NywgODk3ODIsIDg5Nzg3LCAKKyAgICA4OTc5MiwgODk3OTcsIDg5ODAyLCA4OTgwNywgODk4MTIsIDg5ODE3LCA4OTgyMiwgODk4MjcsIDg5ODMyLCA4OTgzNywgCisgICAgODk4NDIsIDg5ODQ3LCA4OTg1MiwgODk4NTcsIDg5ODYyLCA4OTg2NywgODk4NzIsIDg5ODc3LCA4OTg4MiwgODk4ODcsIAorICAgIDg5ODkxLCA4OTg5NSwgODk4OTksIDAsIDg5OTA0LCA4OTkxMCwgODk5MTUsIDg5OTIwLCA4OTkyNSwgODk5MzAsIDg5OTM2LCAKKyAgICA4OTk0MiwgODk5NDgsIDg5OTU0LCA4OTk2MCwgODk5NjYsIDg5OTcyLCA4OTk3OCwgODk5ODQsIDg5OTkwLCA4OTk5NiwgCisgICAgOTAwMDIsIDkwMDA4LCA5MDAxMywgOTAwMTksIDkwMDI1LCA5MDAzMCwgOTAwMzYsIDkwMDQxLCA5MDA0NywgOTAwNTMsIAorICAgIDkwMDU4LCA5MDA2NCwgOTAwNzAsIDkwMDc1LCA5MDA4MSwgOTAwODcsIDkwMDkyLCA5MDA5OCwgOTAxMDQsIDkwMTEwLCAwLCAKKyAgICAwLCAwLCAwLCA5MDExNSwgOTAxMjEsIDkwMTI3LCA5MDEzMywgOTAxMzksIDkwMTQ1LCA5MDE1MSwgOTAxNTcsIDkwMTYzLCAKKyAgICA5MDE3MCwgOTAxNzUsIDkwMTgwLCA5MDE4NiwgOTAxOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDkwMTk4LCA5MDIwMywgOTAyMDgsIDkwMjEzLCA5MDIxOSwgOTAyMjQsIDkwMjMwLCA5MDIzNiwgCisgICAgOTAyNDIsIDkwMjQ4LCA5MDI1NSwgOTAyNjEsIDkwMjY4LCA5MDI3MywgOTAyNzgsIDkwMjgzLCA5MDI4OCwgOTAyOTMsIAorICAgIDkwMjk4LCA5MDMwMywgOTAzMDgsIDkwMzEzLCA5MDMxOCwgOTAzMjMsIDkwMzI4LCA5MDMzMywgOTAzMzgsIDkwMzQzLCAKKyAgICA5MDM0OCwgOTAzNTMsIDkwMzU4LCA5MDM2MywgOTAzNjgsIDkwMzczLCA5MDM3OCwgOTAzODMsIDkwMzg4LCA5MDM5MywgCisgICAgOTAzOTgsIDkwNDAzLCA5MDQwOCwgOTA0MTMsIDkwNDE4LCA5MDQyMywgOTA0MjksIDkwNDM0LCA5MDQ0MCwgOTA0NDYsIAorICAgIDkwNDUyLCA5MDQ1OCwgOTA0NjUsIDkwNDcxLCA5MDQ3OCwgOTA0ODMsIDkwNDg4LCA5MDQ5MywgOTA0OTgsIDkwNTAzLCAKKyAgICA5MDUwOCwgOTA1MTMsIDkwNTE4LCA5MDUyMywgOTA1MjgsIDkwNTMzLCA5MDUzOCwgOTA1NDMsIDkwNTQ4LCA5MDU1MywgCisgICAgOTA1NTgsIDkwNTYzLCA5MDU2OCwgOTA1NzMsIDkwNTc4LCA5MDU4MywgOTA1ODgsIDkwNTkzLCA5MDU5OCwgOTA2MDMsIAorICAgIDkwNjA4LCA5MDYxMywgOTA2MTgsIDkwNjIzLCA5MDYyOCwgOTA2MzMsIDkwNjM4LCA5MDY0MywgOTA2NDgsIDkwNjUzLCAKKyAgICA5MDY1OCwgOTA2NjMsIDkwNjY4LCA5MDY3MywgOTA2NzgsIDkwNjgzLCA5MDY4OCwgOTA2OTMsIDkwNjk4LCA5MDcwMywgCisgICAgOTA3MDgsIDkwNzEzLCA5MDcxOCwgOTA3MjMsIDkwNzI4LCA5MDczMywgOTA3MzgsIDkwNzQzLCA5MDc0OCwgOTA3NTMsIAorICAgIDkwNzU4LCA5MDc2MywgOTA3NjgsIDkwNzczLCA5MDc3OCwgOTA3ODMsIDkwNzg4LCA5MDc5MywgOTA3OTgsIDkwODAzLCAKKyAgICA5MDgwOCwgOTA4MTMsIDkwODE4LCA5MDgyMywgOTA4MjgsIDkwODMzLCA5MDgzOCwgOTA4NDMsIDkwODQ4LCA5MDg1MywgCisgICAgOTA4NTgsIDkwODYzLCA5MDg2OCwgOTA4NzMsIDkwODc4LCA5MDg4MywgOTA4ODgsIDkwODkzLCA5MDg5NywgOTA5MDEsIAorICAgIDkwOTA2LCA5MDkxMSwgOTA5MTYsIDkwOTIxLCA5MDkyNiwgOTA5MzEsIDkwOTM2LCA5MDk0MSwgOTA5NDYsIDkwOTUxLCAKKyAgICA5MDk1NiwgOTA5NjAsIDkwOTY0LCA5MDk2OCwgOTA5NzIsIDkwOTc2LCA5MDk4MCwgOTA5ODQsIDkwOTg5LCA5MDk5NCwgMCwgCisgICAgMCwgOTA5OTksIDkxMDA0LCA5MTAwOCwgOTEwMTIsIDkxMDE2LCA5MTAyMCwgOTEwMjQsIDkxMDI4LCA5MTAzMiwgOTEwMzYsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDkxMDEyLCA5MTAxNiwgOTEwMjAsIDkxMDI0LCA5MTAyOCwgOTEwMzIsIDAsIDAsIDkxMDM3LCAwLCAKLSAgICA5MTA0MiwgOTEwNDYsIDkxMDUxLCA5MTA1NiwgOTEwNjEsIDkxMDY2LCA5MTA3MSwgOTEwNzYsIDkxMDgxLCA5MTA4NiwgCi0gICAgOTEwOTEsIDkxMDk1LCA5MTEwMCwgOTExMDUsIDkxMTEwLCA5MTExNSwgOTExMTksIDkxMTI0LCA5MTEyOSwgOTExMzQsIAotICAgIDkxMTM5LCA5MTE0MywgOTExNDgsIDkxMTUzLCA5MTE1OCwgOTExNjMsIDkxMTY3LCA5MTE3MiwgOTExNzcsIDkxMTgyLCAKLSAgICA5MTE4NywgOTExOTEsIDkxMTk2LCA5MTIwMSwgOTEyMDYsIDkxMjExLCA5MTIxNiwgOTEyMjEsIDkxMjI2LCA5MTIzMCwgCi0gICAgOTEyMzUsIDkxMjQwLCA5MTI0NSwgOTEyNTAsIDAsIDkxMjU1LCA5MTI2MCwgMCwgMCwgMCwgOTEyNjUsIDAsIDAsIDkxMjcwLCAKLSAgICA5MTI3NSwgOTEyODIsIDkxMjg5LCA5MTI5NiwgOTEzMDMsIDkxMzEwLCA5MTMxNywgOTEzMjQsIDkxMzMxLCA5MTMzOCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTEwNDAsIDkxMDQ0LCA5MTA0OCwgOTEwNTIsIAorICAgIDkxMDU2LCA5MTA2MCwgMCwgMCwgOTEwNjUsIDAsIDkxMDcwLCA5MTA3NCwgOTEwNzksIDkxMDg0LCA5MTA4OSwgOTEwOTQsIAorICAgIDkxMDk5LCA5MTEwNCwgOTExMDksIDkxMTE0LCA5MTExOSwgOTExMjMsIDkxMTI4LCA5MTEzMywgOTExMzgsIDkxMTQzLCAKKyAgICA5MTE0NywgOTExNTIsIDkxMTU3LCA5MTE2MiwgOTExNjcsIDkxMTcxLCA5MTE3NiwgOTExODEsIDkxMTg2LCA5MTE5MSwgCisgICAgOTExOTUsIDkxMjAwLCA5MTIwNSwgOTEyMTAsIDkxMjE1LCA5MTIxOSwgOTEyMjQsIDkxMjI5LCA5MTIzNCwgOTEyMzksIAorICAgIDkxMjQ0LCA5MTI0OSwgOTEyNTQsIDkxMjU4LCA5MTI2MywgOTEyNjgsIDkxMjczLCA5MTI3OCwgMCwgOTEyODMsIDkxMjg4LCAKKyAgICAwLCAwLCAwLCA5MTI5MywgMCwgMCwgOTEyOTgsIDkxMzAzLCA5MTMxMCwgOTEzMTcsIDkxMzI0LCA5MTMzMSwgOTEzMzgsIAogICAgIDkxMzQ1LCA5MTM1MiwgOTEzNTksIDkxMzY2LCA5MTM3MywgOTEzODAsIDkxMzg3LCA5MTM5NCwgOTE0MDEsIDkxNDA4LCAKLSAgICA5MTQxNSwgOTE0MjIsIDAsIDkxNDI5LCA5MTQzNiwgOTE0NDIsIDkxNDQ4LCA5MTQ1NCwgOTE0NjEsIDkxNDY4LCA5MTQ3NiwgCi0gICAgOTE0ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNDkzLCA5MTQ5OCwgOTE1MDMsIDkxNTA4LCA5MTUxMywgOTE1MTgsIAotICAgIDkxNTIzLCA5MTUyOCwgOTE1MzMsIDkxNTM4LCA5MTU0MywgOTE1NDgsIDkxNTUzLCA5MTU1OCwgOTE1NjMsIDkxNTY4LCAKLSAgICA5MTU3MywgOTE1NzgsIDkxNTgzLCA5MTU4OCwgOTE1OTMsIDkxNTk4LCA5MTYwMywgOTE2MDcsIDkxNjEyLCA5MTYxNywgCi0gICAgOTE2MjMsIDkxNjI3LCAwLCAwLCAwLCA5MTYzMSwgOTE2MzcsIDkxNjQxLCA5MTY0NiwgOTE2NTEsIDkxNjU2LCA5MTY2MCwgCi0gICAgOTE2NjUsIDkxNjY5LCA5MTY3NCwgOTE2NzksIDkxNjgzLCA5MTY4NywgOTE2OTIsIDkxNjk2LCA5MTcwMCwgOTE3MDUsIAotICAgIDkxNzEwLCA5MTcxNCwgOTE3MTksIDkxNzI0LCA5MTcyOSwgOTE3MzQsIDkxNzM5LCA5MTc0NCwgOTE3NDksIDkxNzU0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5MTc1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3NjQsIAotICAgIDkxNzcwLCA5MTc3NiwgOTE3ODIsIDkxNzg4LCA5MTc5NCwgOTE4MDEsIDkxODA4LCA5MTgxNSwgOTE4MjEsIDkxODI3LCAKLSAgICA5MTgzMywgOTE4NDAsIDkxODQ3LCA5MTg1NCwgOTE4NjAsIDkxODY3LCA5MTg3NCwgOTE4ODEsIDkxODg4LCA5MTg5NCwgCi0gICAgOTE5MDEsIDkxOTA4LCA5MTkxNCwgOTE5MjEsIDkxOTI4LCA5MTkzNSwgOTE5NDIsIDkxOTQ5LCA5MTk1NSwgOTE5NjIsIAotICAgIDkxOTY5LCA5MTk3NiwgOTE5ODIsIDkxOTg4LCA5MTk5NCwgOTIwMDAsIDkyMDA2LCA5MjAxMywgOTIwMjAsIDkyMDI2LCAKLSAgICA5MjAzMiwgOTIwMzgsIDkyMDQ1LCA5MjA1MSwgOTIwNTgsIDkyMDY1LCA5MjA3MiwgOTIwNzgsIDkyMDg2LCA5MjA5MywgCi0gICAgOTIwOTksIDkyMTA2LCA5MjExMywgOTIxMjAsIDkyMTI2LCAwLCAwLCAwLCAwLCAwLCAwLCA5MjEzMywgOTIxNDEsIDAsIDAsIAorICAgIDkxNDE1LCA5MTQyMiwgOTE0MjksIDkxNDM2LCA5MTQ0MywgOTE0NTAsIDAsIDkxNDU3LCA5MTQ2NCwgOTE0NzAsIDkxNDc2LCAKKyAgICA5MTQ4MiwgOTE0ODksIDkxNDk2LCA5MTUwNCwgOTE1MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNTIxLCA5MTUyNiwgCisgICAgOTE1MzEsIDkxNTM2LCA5MTU0MSwgOTE1NDYsIDkxNTUxLCA5MTU1NiwgOTE1NjEsIDkxNTY2LCA5MTU3MSwgOTE1NzYsIAorICAgIDkxNTgxLCA5MTU4NiwgOTE1OTEsIDkxNTk2LCA5MTYwMSwgOTE2MDYsIDkxNjExLCA5MTYxNiwgOTE2MjEsIDkxNjI2LCAKKyAgICA5MTYzMSwgOTE2MzUsIDkxNjQwLCA5MTY0NSwgOTE2NTEsIDkxNjU1LCAwLCAwLCAwLCA5MTY1OSwgOTE2NjUsIDkxNjY5LCAKKyAgICA5MTY3NCwgOTE2NzksIDkxNjg0LCA5MTY4OCwgOTE2OTMsIDkxNjk3LCA5MTcwMiwgOTE3MDcsIDkxNzExLCA5MTcxNSwgCisgICAgOTE3MjAsIDkxNzI0LCA5MTcyOCwgOTE3MzMsIDkxNzM4LCA5MTc0MiwgOTE3NDcsIDkxNzUyLCA5MTc1NywgOTE3NjIsIAorICAgIDkxNzY3LCA5MTc3MiwgOTE3NzcsIDkxNzgyLCAwLCAwLCAwLCAwLCAwLCA5MTc4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTIxNDksIDkyMTUzLCA5MjE1OCwgOTIxNjMsIDAsIAotICAgIDkyMTY5LCA5MjE3NCwgMCwgMCwgMCwgMCwgMCwgOTIxNzksIDkyMTg1LCA5MjE5MiwgOTIxOTcsIDkyMjAyLCA5MjIwNiwgCi0gICAgOTIyMTEsIDkyMjE2LCAwLCA5MjIyMSwgOTIyMjYsIDkyMjMxLCAwLCA5MjIzNiwgOTIyNDEsIDkyMjQ2LCA5MjI1MSwgCi0gICAgOTIyNTYsIDkyMjYxLCA5MjI2NiwgOTIyNzEsIDkyMjc2LCA5MjI4MSwgOTIyODYsIDkyMjkwLCA5MjI5NCwgOTIyOTksIAotICAgIDkyMzA0LCA5MjMwOSwgOTIzMTMsIDkyMzE3LCA5MjMyMSwgOTIzMjYsIDkyMzMxLCA5MjMzNiwgOTIzNDEsIDkyMzQ1LCAKLSAgICA5MjM1MCwgOTIzNTQsIDkyMzU5LCAwLCAwLCAwLCAwLCA5MjM2NCwgOTIzNzAsIDkyMzc1LCAwLCAwLCAwLCAwLCA5MjM4MCwgCi0gICAgOTIzODQsIDkyMzg4LCA5MjM5MiwgOTIzOTYsIDkyNDAwLCA5MjQwNSwgOTI0MTAsIDkyNDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5MjQyMiwgOTI0MjgsIDkyNDM1LCA5MjQ0MSwgOTI0NDgsIDkyNDU0LCA5MjQ2MCwgOTI0NjYsIDkyNDczLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5MjQ3OSwgOTI0ODcsIDkyNDk1LCA5MjUwMywgOTI1MTEsIDkyNTE5LCA5MjUyNywgOTI1MzUsIAotICAgIDkyNTQzLCA5MjU1MSwgOTI1NTksIDkyNTY3LCA5MjU3NSwgOTI1ODMsIDkyNTkxLCA5MjU5OSwgOTI2MDcsIDkyNjE1LCAKLSAgICA5MjYyMywgOTI2MzEsIDkyNjM5LCA5MjY0NywgOTI2NTUsIDkyNjYzLCA5MjY3MSwgOTI2NzksIDkyNjg3LCA5MjY5NSwgCi0gICAgOTI3MDMsIDkyNzExLCA5MjcxOCwgOTI3MjYsIDkyNzM0LCA5MjczOCwgOTI3NDMsIDkyNzQ4LCA5Mjc1MywgOTI3NTgsIAotICAgIDkyNzYzLCA5Mjc2OCwgOTI3NzMsIDkyNzc3LCA5Mjc4MiwgOTI3ODYsIDkyNzkxLCA5Mjc5NSwgOTI4MDAsIDkyODA0LCAKLSAgICA5MjgwOSwgOTI4MTQsIDkyODE5LCA5MjgyNCwgOTI4MjksIDkyODM0LCA5MjgzOSwgOTI4NDQsIDkyODQ5LCA5Mjg1NCwgCi0gICAgOTI4NTksIDkyODY0LCA5Mjg2OSwgOTI4NzQsIDkyODc5LCA5Mjg4NCwgOTI4ODksIDkyODk0LCA5Mjg5OSwgOTI5MDQsIAotICAgIDkyOTA5LCA5MjkxNCwgOTI5MTksIDkyOTI0LCA5MjkyOSwgOTI5MzQsIDkyOTM5LCA5Mjk0NCwgOTI5NDksIDkyOTU0LCAKLSAgICA5Mjk1OSwgOTI5NjQsIDkyOTY5LCA5Mjk3NCwgOTI5NzksIDkyOTg0LCA5Mjk4OSwgOTI5OTQsIDAsIDAsIDAsIDkyOTk5LCAKLSAgICA5MzAwNCwgOTMwMTMsIDkzMDIxLCA5MzAzMCwgOTMwMzksIDkzMDUwLCA5MzA2MSwgOTMwNjgsIDkzMDc1LCA5MzA4MiwgCi0gICAgOTMwODksIDkzMDk2LCA5MzEwMywgOTMxMTAsIDkzMTE3LCA5MzEyNCwgOTMxMzEsIDkzMTM4LCA5MzE0NSwgOTMxNTIsIAotICAgIDkzMTU5LCA5MzE2NiwgOTMxNzMsIDkzMTgwLCA5MzE4NywgOTMxOTQsIDkzMjAxLCA5MzIwOCwgMCwgMCwgOTMyMTUsIAotICAgIDkzMjIxLCA5MzIyNywgOTMyMzMsIDkzMjM5LCA5MzI0NiwgOTMyNTMsIDkzMjYxLCA5MzI2OSwgOTMyNzYsIDkzMjgzLCAKLSAgICA5MzI5MCwgOTMyOTcsIDkzMzA0LCA5MzMxMSwgOTMzMTgsIDkzMzI1LCA5MzMzMiwgOTMzMzksIDkzMzQ2LCA5MzM1MywgCi0gICAgOTMzNjAsIDkzMzY3LCA5MzM3NCwgOTMzODEsIDkzMzg4LCA5MzM5NSwgMCwgMCwgMCwgMCwgMCwgOTM0MDIsIDkzNDA4LCAKLSAgICA5MzQxNCwgOTM0MjAsIDkzNDI2LCA5MzQzMywgOTM0NDAsIDkzNDQ4LCA5MzQ1NiwgOTM0NjIsIDkzNDY4LCA5MzQ3NSwgCi0gICAgOTM0ODEsIDkzNDg3LCA5MzQ5MywgOTM0OTksIDkzNTA2LCA5MzUxMywgOTM1MjAsIDkzNTI3LCA5MzUzNCwgOTM1NDEsIAotICAgIDkzNTQ4LCA5MzU1NSwgOTM1NjIsIDkzNTY5LCA5MzU3NiwgOTM1ODMsIDkzNTkwLCA5MzU5NywgOTM2MDQsIDkzNjExLCAKLSAgICA5MzYxOCwgOTM2MjUsIDkzNjMyLCA5MzYzOSwgOTM2NDYsIDkzNjUzLCA5MzY2MCwgOTM2NjcsIDkzNjc0LCA5MzY4MSwgCi0gICAgOTM2ODgsIDkzNjk1LCA5MzcwMiwgOTM3MDksIDkzNzE2LCA5MzcyMywgOTM3MzAsIDkzNzM3LCA5Mzc0NCwgOTM3NTEsIAotICAgIDkzNzU4LCA5Mzc2NSwgOTM3NzIsIDkzNzc5LCA5Mzc4NiwgOTM3OTMsIDkzODAwLCA5MzgwNywgOTM4MTQsIDkzODIxLCAKLSAgICA5MzgyOCwgOTM4MzUsIDkzODQyLCA5Mzg0OSwgOTM4NTYsIDkzODYzLCA5Mzg3MCwgOTM4NzcsIDkzODg0LCA5Mzg5MSwgCi0gICAgOTM4OTgsIDkzOTA1LCA5MzkxMiwgOTM5MTksIDkzOTI2LCA5MzkzMywgOTM5NDAsIDkzOTQ3LCA5Mzk1NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTM5NjEsIDkzOTY1LCA5Mzk2OSwgOTM5NzMsIDkzOTc3LCA5Mzk4MSwgOTM5ODUsIDkzOTg5LCAKLSAgICA5Mzk5MywgOTM5OTcsIDk0MDAyLCA5NDAwNywgOTQwMTIsIDk0MDE3LCA5NDAyMiwgOTQwMjcsIDk0MDMyLCA5NDAzNywgCi0gICAgOTQwNDIsIDk0MDQ4LCA5NDA1NCwgOTQwNjAsIDk0MDY3LCA5NDA3NCwgOTQwODEsIDk0MDg4LCA5NDA5NSwgOTQxMDIsIAotICAgIDk0MTA5LCA5NDExNiwgOTQxMjMsIDAsIDk0MTMwLCA5NDEzNCwgOTQxMzgsIDk0MTQyLCA5NDE0NiwgOTQxNTAsIDk0MTUzLCAKLSAgICA5NDE1NywgOTQxNjAsIDk0MTY0LCA5NDE2NywgOTQxNzEsIDk0MTc1LCA5NDE4MCwgOTQxODQsIDk0MTg5LCA5NDE5MiwgCi0gICAgOTQxOTYsIDk0MTk5LCA5NDIwMywgOTQyMDYsIDk0MjEwLCA5NDIxNCwgOTQyMTgsIDk0MjIyLCA5NDIyNiwgOTQyMzAsIAotICAgIDk0MjM0LCA5NDIzOCwgOTQyNDIsIDk0MjQ2LCA5NDI1MCwgOTQyNTQsIDk0MjU4LCA5NDI2MiwgOTQyNjYsIDk0MjcwLCAKLSAgICA5NDI3NCwgOTQyNzgsIDk0MjgxLCA5NDI4NCwgOTQyODgsIDk0MjkyLCA5NDI5NiwgOTQyOTksIDk0MzAyLCA5NDMwNSwgCi0gICAgOTQzMDksIDk0MzEzLCA5NDMxNywgOTQzMjEsIDk0MzI0LCA5NDMyNywgOTQzMzEsIDk0MzM3LCA5NDM0MywgOTQzNDksIAotICAgIDk0MzU0LCA5NDM2MSwgOTQzNjUsIDk0MzcwLCA5NDM3NCwgOTQzNzksIDk0Mzg0LCA5NDM5MCwgOTQzOTUsIDk0NDAxLCAKLSAgICA5NDQwNSwgOTQ0MTAsIDk0NDE0LCA5NDQxOSwgOTQ0MjIsIDk0NDI1LCA5NDQyOSwgOTQ0MzQsIDk0NDQwLCA5NDQ0NSwgCi0gICAgOTQ0NTEsIDAsIDAsIDAsIDAsIDk0NDU2LCA5NDQ1OSwgOTQ0NjIsIDk0NDY1LCA5NDQ2OCwgOTQ0NzEsIDk0NDc0LCAKLSAgICA5NDQ3NywgOTQ0ODAsIDk0NDgzLCA5NDQ4NywgOTQ0OTEsIDk0NDk1LCA5NDQ5OSwgOTQ1MDMsIDk0NTA3LCA5NDUxMSwgCi0gICAgOTQ1MTUsIDk0NTE5LCA5NDUyNCwgOTQ1MjksIDk0NTMzLCA5NDUzNiwgOTQ1MzksIDk0NTQyLCA5NDU0NSwgOTQ1NDgsIAotICAgIDk0NTUxLCA5NDU1NCwgOTQ1NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk0NTYwLCA5NDU2NSwgOTQ1NzAsIDk0NTc1LCA5NDU3OSwgOTQ1ODQsIDk0NTg4LCA5NDU5MywgOTQ1OTcsIDk0NjAyLCAKLSAgICA5NDYwNiwgOTQ2MTEsIDk0NjE1LCA5NDYyMCwgOTQ2MjQsIDk0NjI5LCA5NDYzNCwgOTQ2MzksIDk0NjQ0LCA5NDY0OSwgCi0gICAgOTQ2NTQsIDk0NjU5LCA5NDY2NCwgOTQ2NjksIDk0Njc0LCA5NDY3OSwgOTQ2ODQsIDk0Njg5LCA5NDY5NCwgOTQ2OTksIAotICAgIDk0NzA0LCA5NDcwOSwgOTQ3MTQsIDk0NzE5LCA5NDcyNCwgOTQ3MjgsIDk0NzMyLCA5NDczNywgOTQ3NDIsIDk0NzQ3LCAKLSAgICA5NDc1MSwgOTQ3NTUsIDk0NzU5LCA5NDc2NCwgOTQ3NjksIDk0Nzc0LCA5NDc3OSwgOTQ3ODMsIDk0Nzg3LCA5NDc5MywgCi0gICAgOTQ3OTgsIDk0ODA0LCA5NDgwOSwgOTQ4MTUsIDk0ODIwLCA5NDgyNiwgOTQ4MzEsIDk0ODM3LCA5NDg0MiwgOTQ4NDcsIAotICAgIDk0ODUyLCA5NDg1NywgOTQ4NjEsIDk0ODY2LCA5NDg3MiwgOTQ4NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDk0ODgxLCA5NDg4OCwgOTQ4OTUsIDk0OTAyLCA5NDkwOSwgOTQ5MTYsIDk0OTIzLCA5NDkzMCwgCi0gICAgOTQ5MzcsIDk0OTQ0LCA5NDk1MSwgOTQ5NTgsIDk0OTY1LCA5NDk3MiwgOTQ5NzksIDk0OTg2LCA5NDk5MywgOTUwMDAsIAotICAgIDk1MDA3LCA5NTAxNCwgOTUwMjEsIDk1MDI4LCA5NTAzNSwgOTUwNDIsIDk1MDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NTA1NiwgOTUwNjMsIDk1MDY5LCA5NTA3NSwgOTUwODEsIDk1MDg3LCA5NTA5MywgOTUwOTksIDk1MTA1LCA5NTExMSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOTUxMTcsIDk1MTIyLCA5NTEyNywgOTUxMzIsIDk1MTM3LCA5NTE0MSwgOTUxNDUsIDk1MTQ5LCAKLSAgICA5NTE1NCwgOTUxNTksIDk1MTY0LCA5NTE2OSwgOTUxNzQsIDk1MTc5LCA5NTE4NCwgOTUxODksIDk1MTk0LCA5NTE5OSwgCi0gICAgOTUyMDQsIDk1MjA5LCA5NTIxNCwgOTUyMTksIDk1MjI0LCA5NTIyOSwgOTUyMzQsIDk1MjM5LCA5NTI0NCwgOTUyNDksIAotICAgIDk1MjU0LCA5NTI1OSwgOTUyNjQsIDk1MjY5LCA5NTI3NCwgOTUyNzksIDk1Mjg0LCA5NTI4OSwgOTUyOTQsIDk1Mjk5LCAKLSAgICA5NTMwNCwgOTUzMDksIDk1MzE0LCA5NTMxOSwgOTUzMjUsIDk1MzMwLCA5NTMzNiwgOTUzNDEsIDk1MzQ3LCA5NTM1MiwgCi0gICAgOTUzNTgsIDk1MzY0LCA5NTM2OCwgOTUzNzMsIDk1Mzc3LCAwLCA5NTM4MSwgOTUzODYsIDk1MzkwLCA5NTM5NCwgOTUzOTgsIAotICAgIDk1NDAyLCA5NTQwNiwgOTU0MTAsIDk1NDE0LCA5NTQxOCwgOTU0MjIsIDk1NDI3LCA5NTQzMSwgOTU0MzYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NDQxLCA5NTQ0NSwgOTU0NDksIDk1NDUzLCA5NTQ1NiwgOTU0NjAsIAotICAgIDk1NDYzLCA5NTQ2NywgOTU0NzAsIDk1NDc0LCA5NTQ3OCwgOTU0ODMsIDk1NDg3LCA5NTQ5MiwgOTU0OTUsIDk1NDk5LCAKLSAgICA5NTUwMiwgOTU1MDYsIDk1NTA5LCA5NTUxMywgOTU1MTcsIDk1NTIxLCA5NTUyNSwgOTU1MjksIDk1NTMzLCA5NTUzNywgCi0gICAgOTU1NDEsIDk1NTQ1LCA5NTU0OSwgOTU1NTMsIDk1NTU3LCA5NTU2MSwgOTU1NjUsIDk1NTY5LCA5NTU3MywgOTU1NzcsIAotICAgIDk1NTgxLCA5NTU4NCwgOTU1ODcsIDk1NTkxLCA5NTU5NSwgOTU1OTksIDk1NjAyLCA5NTYwNSwgOTU2MDgsIDk1NjEyLCAKLSAgICA5NTYxNiwgOTU2MjAsIDk1NjI0LCA5NTYyOCwgOTU2MzEsIDk1NjM0LCA5NTYzOSwgOTU2NDMsIDk1NjQ4LCA5NTY1MiwgCi0gICAgOTU2NTcsIDk1NjYyLCA5NTY2OCwgOTU2NzMsIDk1Njc5LCA5NTY4MywgOTU2ODgsIDk1NjkyLCA5NTY5NywgOTU3MDEsIAotICAgIDk1NzA1LCA5NTcwOSwgOTU3MTMsIDk1NzE2LCA5NTcxOSwgOTU3MjMsIDk1NzI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NTczMCwgOTU3MzQsIDk1NzM3LCA5NTc0MCwgOTU3NDMsIDk1NzQ2LCA5NTc0OSwgOTU3NTIsIDk1NzU1LCA5NTc1OCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NjEsIDk1NzY1LCA5NTc3MCwgOTU3NzQsIDk1Nzc5LCAKLSAgICA5NTc4MywgOTU3ODgsIDk1NzkyLCA5NTc5NywgOTU4MDEsIDk1ODA2LCA5NTgxMCwgOTU4MTUsIDk1ODIwLCA5NTgyNSwgCi0gICAgOTU4MzAsIDk1ODM1LCA5NTg0MCwgOTU4NDUsIDk1ODUwLCA5NTg1NSwgOTU4NjAsIDk1ODY1LCA5NTg3MCwgOTU4NzUsIAotICAgIDk1ODgwLCA5NTg4NSwgOTU4OTAsIDk1ODk1LCA5NTkwMCwgOTU5MDQsIDk1OTA4LCA5NTkxMywgOTU5MTgsIDk1OTIzLCAKLSAgICA5NTkyNywgOTU5MzEsIDk1OTM1LCA5NTk0MCwgOTU5NDUsIDk1OTUwLCA5NTk1NCwgOTU5NTgsIDk1OTYzLCA5NTk2OCwgCi0gICAgOTU5NzMsIDk1OTc5LCA5NTk4NCwgOTU5OTAsIDk1OTk1LCA5NjAwMSwgOTYwMDYsIDk2MDEyLCA5NjAxNywgOTYwMjMsIAotICAgIDk2MDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NjAzMywgOTYwMzgsIDk2MDQyLCA5NjA0NiwgOTYwNTAsIDk2MDU0LCAKLSAgICA5NjA1OCwgOTYwNjIsIDk2MDY2LCA5NjA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwNzQsIDk2MDc3LCA5NjA4MiwgOTYwODgsIAotICAgIDk2MDk2LCA5NjEwMSwgOTYxMDcsIDk2MTE1LCA5NjEyMSwgOTYxMjcsIDk2MTMxLCA5NjEzNSwgOTYxNDIsIDk2MTUxLCAKLSAgICA5NjE1OCwgOTYxNjcsIDk2MTczLCA5NjE4MiwgOTYxODksIDk2MTk2LCA5NjIwMywgOTYyMTMsIDk2MjE5LCA5NjIyMywgCi0gICAgOTYyMzAsIDk2MjM5LCA5NjI0OSwgOTYyNTYsIDk2MjYzLCA5NjI2NywgOTYyNzEsIDk2Mjc4LCA5NjI4OCwgOTYyOTIsIAotICAgIDk2Mjk5LCA5NjMwNiwgOTYzMTMsIDk2MzE5LCA5NjMyNiwgOTYzMzMsIDk2MzQwLCA5NjM0NywgOTYzNTEsIDk2MzU1LCAKLSAgICA5NjM1OSwgOTYzNjYsIDk2MzcwLCA5NjM3NywgOTYzODQsIDk2Mzk4LCA5NjQwNywgOTY0MTEsIDk2NDE1LCA5NjQxOSwgCi0gICAgOTY0MjYsIDk2NDMwLCA5NjQzNCwgOTY0MzgsIDk2NDQ2LCA5NjQ1NCwgOTY0NzMsIDk2NDgzLCA5NjUwMywgOTY1MDcsIAotICAgIDk2NTExLCA5NjUxNSwgOTY1MTksIDk2NTIzLCA5NjUyNywgOTY1MzEsIDk2NTM4LCA5NjU0MiwgOTY1NDUsIDk2NTQ5LCAKLSAgICA5NjU1MywgOTY1NTksIDk2NTY2LCA5NjU3NSwgOTY1NzksIDk2NTg4LCA5NjU5NywgOTY2MDUsIDk2NjA5LCA5NjYxNiwgCi0gICAgOTY2MjAsIDk2NjI0LCA5NjYyOCwgOTY2MzIsIDk2NjQzLCA5NjY1MiwgOTY2NjEsIDk2NjcwLCA5NjY3OSwgOTY2OTEsIAotICAgIDk2NzAwLCA5NjcwOSwgOTY3MTgsIDk2NzI2LCA5NjczNSwgOTY3NDcsIDk2NzU2LCA5Njc2NSwgOTY3NzQsIDk2Nzg2LCAKLSAgICA5Njc5NSwgOTY4MDQsIDk2ODE2LCA5NjgyNSwgOTY4MzQsIDk2ODQ2LCA5Njg1NSwgOTY4NTksIDk2ODYzLCA5Njg2NywgCi0gICAgOTY4NzEsIDk2ODc1LCA5Njg3OSwgOTY4ODMsIDk2ODkwLCA5Njg5NCwgOTY4OTgsIDk2OTA5LCA5NjkxMywgOTY5MTcsIAotICAgIDk2OTI0LCA5NjkzMCwgOTY5MzYsIDk2OTQwLCA5Njk0NywgOTY5NTEsIDk2OTU1LCA5Njk1OSwgOTY5NjMsIDk2OTY3LCAKLSAgICA5Njk3MSwgOTY5NzcsIDk2OTg1LCA5Njk4OSwgOTY5OTMsIDk2OTk2LCA5NzAwMiwgOTcwMTIsIDk3MDE2LCA5NzAyOCwgCi0gICAgOTcwMzUsIDk3MDQyLCA5NzA0OSwgOTcwNTYsIDk3MDYyLCA5NzA2NiwgOTcwNzAsIDk3MDc0LCA5NzA3OCwgOTcwODUsIAotICAgIDk3MDk0LCA5NzEwMSwgOTcxMDksIDk3MTE3LCA5NzEyMywgOTcxMjcsIDk3MTMxLCA5NzEzNSwgOTcxMzksIDk3MTQ1LCAKLSAgICA5NzE1NCwgOTcxNjYsIDk3MTczLCA5NzE4MCwgOTcxODksIDk3MjAwLCA5NzIwNiwgOTcyMTUsIDk3MjI0LCA5NzIzMSwgCi0gICAgOTcyNDAsIDk3MjQ3LCA5NzI1NCwgOTcyNjQsIDk3MjcxLCA5NzI3OCwgOTcyODUsIDk3MjkyLCA5NzI5NiwgOTczMDIsIAotICAgIDk3MzA2LCA5NzMxNywgOTczMjUsIDk3MzM0LCA5NzM0NiwgOTczNTMsIDk3MzYwLCA5NzM3MCwgOTczNzcsIDk3Mzg2LCAKLSAgICA5NzM5MywgOTc0MDIsIDk3NDA5LCA5NzQxNiwgOTc0MjYsIDk3NDMzLCA5NzQ0MCwgOTc0NTAsIDk3NDU3LCA5NzQ2OSwgCi0gICAgOTc0NzgsIDk3NDg1LCA5NzQ5MiwgOTc0OTksIDk3NTA4LCA5NzUxOCwgOTc1MzEsIDk3NTM4LCA5NzU0OCwgOTc1NTgsIAotICAgIDk3NTY1LCA5NzU3NCwgOTc1ODcsIDk3NTk0LCA5NzYwMSwgOTc2MDgsIDk3NjE4LCA5NzYyOCwgOTc2MzUsIDk3NjQ1LCAKLSAgICA5NzY1MiwgOTc2NTksIDk3NjY5LCA5NzY3NSwgOTc2ODIsIDk3Njg5LCA5NzY5NiwgOTc3MDYsIDk3NzEzLCA5NzcyMCwgCi0gICAgOTc3MjcsIDk3NzMzLCA5Nzc0MCwgOTc3NTAsIDk3NzU3LCA5Nzc2MSwgOTc3NjksIDk3NzczLCA5Nzc4NSwgOTc3ODksIAotICAgIDk3ODAzLCA5NzgwNywgOTc4MTEsIDk3ODE1LCA5NzgxOSwgOTc4MjUsIDk3ODMyLCA5Nzg0MCwgOTc4NDQsIDk3ODQ4LCAKLSAgICA5Nzg1MiwgOTc4NTYsIDk3ODYzLCA5Nzg2NywgOTc4NzMsIDk3ODc5LCA5Nzg4NywgOTc4OTEsIDk3ODk4LCA5NzkwNiwgCi0gICAgOTc5MTAsIDk3OTE0LCA5NzkyMCwgOTc5MjQsIDk3OTMzLCA5Nzk0MiwgOTc5NDksIDk3OTU5LCA5Nzk2NSwgOTc5NjksIAotICAgIDk3OTczLCA5Nzk4MSwgOTc5ODgsIDk3OTk1LCA5ODAwMSwgOTgwMDUsIDk4MDEzLCA5ODAxNywgOTgwMjQsIDk4MDM2LCAKLSAgICA5ODA0MywgOTgwNTMsIDk4MDU5LCA5ODA2MywgOTgwNzIsIDk4MDc5LCA5ODA4OCwgOTgwOTIsIDk4MDk2LCA5ODEwMywgCi0gICAgOTgxMDcsIDk4MTExLCA5ODExNSwgOTgxMTksIDk4MTIyLCA5ODEyOCwgOTgxMzQsIDk4MTM4LCA5ODE0MiwgOTgxNDksIAotICAgIDk4MTU2LCA5ODE2MywgOTgxNzAsIDk4MTc3LCA5ODE4NCwgOTgxOTEsIDk4MTk4LCA5ODIwNCwgOTgyMDgsIDk4MjEyLCAKLSAgICA5ODIxOSwgOTgyMjYsIDk4MjMzLCA5ODI0MCwgOTgyNDcsIDk4MjUxLCA5ODI1NCwgOTgyNTksIDk4MjYzLCA5ODI2NywgCi0gICAgOTgyNzYsIDk4Mjg1LCA5ODI4OSwgOTgyOTMsIDk4Mjk5LCA5ODMwNSwgOTgzMjIsIDk4MzI4LCA5ODMzMiwgOTgzNDEsIAotICAgIDk4MzQ1LCA5ODM0OSwgOTgzNTYsIDk4MzY0LCA5ODM3MiwgOTgzNzgsIDk4MzgyLCA5ODM4NiwgOTgzOTAsIDk4Mzk0LCAKLSAgICA5ODM5NywgOTg0MDMsIDk4NDEwLCA5ODQyMCwgOTg0MjcsIDk4NDM0LCA5ODQ0MSwgOTg0NDcsIDk4NDU0LCA5ODQ2MSwgCi0gICAgOTg0NjgsIDk4NDc1LCA5ODQ4MiwgOTg0OTEsIDk4NDk4LCA5ODUxMCwgOTg1MTcsIDk4NTI0LCA5ODUzNCwgOTg1NDUsIAotICAgIDk4NTUyLCA5ODU1OSwgOTg1NjYsIDk4NTczLCA5ODU4MCwgOTg1ODcsIDk4NTk0LCA5ODYwMSwgOTg2MDgsIDk4NjE1LCAKLSAgICA5ODYyNSwgOTg2MzUsIDk4NjQ1LCA5ODY1MiwgOTg2NjIsIDk4NjY5LCA5ODY3NiwgOTg2ODMsIDk4NjkwLCA5ODY5NiwgCi0gICAgOTg3MDMsIDk4NzEwLCA5ODcxNywgOTg3MjQsIDk4NzMxLCA5ODczOCwgOTg3NDUsIDk4NzUyLCA5ODc1OCwgOTg3NjUsIAotICAgIDk4NzcyLCA5ODc4MSwgOTg3ODgsIDk4Nzk1LCA5ODc5OSwgOTg4MDcsIDk4ODExLCA5ODgxNSwgOTg4MTksIDk4ODIzLCAKLSAgICA5ODgyNywgOTg4MzQsIDk4ODM4LCA5ODg0NywgOTg4NTEsIDk4ODU4LCA5ODg2NiwgOTg4NzAsIDk4ODc0LCA5ODg3OCwgCi0gICAgOTg4OTEsIDk4OTA3LCA5ODkxMSwgOTg5MTUsIDk4OTIyLCA5ODkyOCwgOTg5MzUsIDk4OTM5LCA5ODk0MywgOTg5NDcsIAotICAgIDk4OTUxLCA5ODk1NSwgOTg5NjIsIDk4OTY2LCA5ODk4NCwgOTg5ODgsIDk4OTkyLCA5ODk5OSwgOTkwMDMsIDk5MDA3LCAKLSAgICA5OTAxMywgOTkwMTcsIDk5MDIxLCA5OTAyOSwgOTkwMzMsIDk5MDM3LCA5OTA0MSwgOTkwNDUsIDk5MDUxLCA5OTA2MiwgCi0gICAgOTkwNzEsIDk5MDgwLCA5OTA4NywgOTkwOTQsIDk5MTA1LCA5OTExMiwgOTkxMTksIDk5MTI2LCA5OTEzMywgOTkxNDAsIAotICAgIDk5MTQ3LCA5OTE1NCwgOTkxNjQsIDk5MTcwLCA5OTE3NywgOTkxODcsIDk5MTk2LCA5OTIwMywgOTkyMTIsIDk5MjIyLCAKLSAgICA5OTIyOSwgOTkyMzYsIDk5MjQzLCA5OTI1MCwgOTkyNjIsIDk5MjY5LCA5OTI3NiwgOTkyODMsIDk5MjkwLCA5OTI5NywgCi0gICAgOTkzMDcsIDk5MzE0LCA5OTMyMSwgOTkzMzEsIDk5MzQ0LCA5OTM1NiwgOTkzNjMsIDk5MzczLCA5OTM4MCwgOTkzODcsIAotICAgIDk5Mzk0LCA5OTQwOCwgOTk0MTQsIDk5NDIyLCA5OTQzMiwgOTk0NDIsIDk5NDQ5LCA5OTQ1NiwgOTk0NjIsIDk5NDY2LCAKLSAgICA5OTQ3MywgOTk0ODMsIDk5NDg5LCA5OTUwMiwgOTk1MDYsIDk5NTEwLCA5OTUxNywgOTk1MjEsIDk5NTI4LCA5OTUzOCwgCi0gICAgOTk1NDIsIDk5NTQ2LCA5OTU1MCwgOTk1NTQsIDk5NTU4LCA5OTU2NSwgOTk1NjksIDk5NTc2LCA5OTU4MywgOTk1OTAsIAotICAgIDk5NTk5LCA5OTYwOCwgOTk2MTgsIDk5NjI1LCA5OTYzMiwgOTk2MzksIDk5NjQ5LCA5OTY1NiwgOTk2NjYsIDk5NjczLCAKLSAgICA5OTY4MywgOTk2OTAsIDk5Njk3LCA5OTcwNywgOTk3MTcsIDk5NzI0LCA5OTczMCwgOTk3MzgsIDk5NzQ2LCA5OTc1MiwgCi0gICAgOTk3NTgsIDk5NzYyLCA5OTc2NiwgOTk3NzMsIDk5NzgxLCA5OTc4NywgOTk3OTEsIDk5Nzk1LCA5OTc5OSwgOTk4MDYsIAotICAgIDk5ODE4LCA5OTgyMSwgOTk4MjgsIDk5ODM0LCA5OTgzOCwgOTk4NDIsIDk5ODQ2LCA5OTg1MCwgOTk4NTQsIDk5ODU4LCAKLSAgICA5OTg2MiwgOTk4NjYsIDk5ODcwLCA5OTg3NCwgOTk4ODEsIDk5ODg1LCA5OTg5MSwgOTk4OTUsIDk5ODk5LCA5OTkwMywgCi0gICAgOTk5MDksIDk5OTE2LCA5OTkyMywgOTk5MzAsIDk5OTQxLCA5OTk0OSwgOTk5NTMsIDk5OTU5LCA5OTk2OCwgOTk5NzUsIAotICAgIDk5OTgxLCA5OTk4NCwgOTk5ODgsIDk5OTkyLCA5OTk5OCwgMTAwMDA3LCAxMDAwMTUsIDEwMDAxOSwgMTAwMDI1LCAKLSAgICAxMDAwMjksIDEwMDAzMywgMTAwMDM3LCAxMDAwNDMsIDEwMDA1MCwgMTAwMDU2LCAxMDAwNjAsIDEwMDA2NiwgMTAwMDcwLCAKLSAgICAxMDAwNzQsIDEwMDA4MywgMTAwMDk1LCAxMDAwOTksIDEwMDEwNiwgMTAwMTEzLCAxMDAxMjMsIDEwMDEzMCwgMTAwMTQyLCAKLSAgICAxMDAxNDksIDEwMDE1NiwgMTAwMTYzLCAxMDAxNzQsIDEwMDE4NCwgMTAwMTk3LCAxMDAyMDcsIDEwMDIxNCwgMTAwMjE4LCAKLSAgICAxMDAyMjIsIDEwMDIyNiwgMTAwMjMwLCAxMDAyMzksIDEwMDI0OCwgMTAwMjU3LCAxMDAyNzQsIDEwMDI4MywgMTAwMjg5LCAKLSAgICAxMDAyOTYsIDEwMDMwNCwgMTAwMzE3LCAxMDAzMjEsIDEwMDMzMCwgMTAwMzM5LCAxMDAzNDgsIDEwMDM1NywgMTAwMzY4LCAKLSAgICAxMDAzNzcsIDEwMDM4NiwgMTAwMzk1LCAxMDA0MDQsIDEwMDQxMywgMTAwNDIyLCAxMDA0MzIsIDEwMDQzNSwgMTAwNDM5LCAKLSAgICAxMDA0NDMsIDEwMDQ0NywgMTAwNDUxLCAxMDA0NTUsIDEwMDQ2MSwgMTAwNDY4LCAxMDA0NzUsIDEwMDQ4MiwgMTAwNDg4LCAKLSAgICAxMDA0OTQsIDEwMDUwMSwgMTAwNTA3LCAxMDA1MTQsIDEwMDUyMiwgMTAwNTI2LCAxMDA1MzMsIDEwMDU0MCwgMTAwNTQ3LCAKLSAgICAxMDA1NTUsIDEwMDU1OCwgMTAwNTYyLCAxMDA1NjYsIDEwMDU3MCwgMTAwNTczLCAxMDA1NzksIDEwMDU4MywgMTAwNTg5LCAKLSAgICAxMDA1OTYsIDEwMDYwMywgMTAwNjA5LCAxMDA2MTYsIDEwMDYyMywgMTAwNjMwLCAxMDA2MzcsIDEwMDY0NCwgMTAwNjUxLCAKLSAgICAxMDA2NTgsIDEwMDY2NSwgMTAwNjcyLCAxMDA2NzksIDEwMDY4NiwgMTAwNjkzLCAxMDA3MDAsIDEwMDcwNywgMTAwNzEzLCAKLSAgICAxMDA3MTcsIDEwMDcyNiwgMTAwNzMwLCAxMDA3MzQsIDEwMDczOCwgMTAwNzQyLCAxMDA3NDgsIDEwMDc1NSwgMTAwNzYyLCAKLSAgICAxMDA3NjksIDEwMDc3NiwgMTAwNzgzLCAxMDA3ODksIDEwMDc5NywgMTAwODAxLCAxMDA4MDUsIDEwMDgwOSwgMTAwODEzLCAKLSAgICAxMDA4MTksIDEwMDgzNiwgMTAwODUzLCAxMDA4NTcsIDEwMDg2MSwgMTAwODY1LCAxMDA4NjksIDEwMDg3MywgMTAwODc3LCAKLSAgICAxMDA4ODMsIDEwMDg5MCwgMTAwODk0LCAxMDA5MDAsIDEwMDkwNywgMTAwOTE0LCAxMDA5MjEsIDEwMDkyOCwgMTAwOTM1LCAKLSAgICAxMDA5NDQsIDEwMDk1MSwgMTAwOTU4LCAxMDA5NjUsIDEwMDk3MiwgMTAwOTc2LCAxMDA5ODAsIDEwMDk4NiwgMTAwOTk4LCAKLSAgICAxMDEwMDIsIDEwMTAwNiwgMTAxMDE1LCAxMDEwMTksIDEwMTAyMywgMTAxMDI3LCAxMDEwMzMsIDEwMTAzNywgMTAxMDQxLCAKLSAgICAxMDEwNTAsIDEwMTA1NCwgMTAxMDU4LCAxMDEwNjIsIDEwMTA2OSwgMTAxMDczLCAxMDEwNzcsIDEwMTA4MSwgMTAxMDg1LCAKLSAgICAxMDEwODksIDEwMTA5MywgMTAxMDk3LCAxMDExMDEsIDEwMTEwNywgMTAxMTE0LCAxMDExMjEsIDEwMTEyNywgMTAxMTMxLCAKLSAgICAxMDExNDgsIDEwMTE1NCwgMTAxMTU4LCAxMDExNjQsIDEwMTE3MCwgMTAxMTc2LCAxMDExODIsIDEwMTE4OCwgMTAxMTk0LCAKLSAgICAxMDExOTgsIDEwMTIwMiwgMTAxMjA2LCAxMDEyMTIsIDEwMTIxNiwgMTAxMjIyLCAxMDEyMjYsIDEwMTIzMCwgMTAxMjM3LCAKLSAgICAxMDEyNDQsIDEwMTI2MSwgMTAxMjY1LCAxMDEyNjksIDEwMTI3MywgMTAxMjc3LCAxMDEyODEsIDEwMTI5MywgMTAxMjk2LCAKLSAgICAxMDEzMDEsIDEwMTMwNiwgMTAxMzIxLCAxMDEzMzEsIDEwMTM0MywgMTAxMzQ3LCAxMDEzNTEsIDEwMTM1NSwgMTAxMzYxLCAKLSAgICAxMDEzNjgsIDEwMTM3NSwgMTAxMzg1LCAxMDEzOTcsIDEwMTQwMywgMTAxNDA5LCAxMDE0MTgsIDEwMTQyMiwgMTAxNDI2LCAKLSAgICAxMDE0MzMsIDEwMTQ0MywgMTAxNDUwLCAxMDE0NTYsIDEwMTQ2MCwgMTAxNDY0LCAxMDE0NzEsIDEwMTQ3NywgMTAxNDgxLCAKLSAgICAxMDE0ODcsIDEwMTQ5MSwgMTAxNDk5LCAxMDE1MDUsIDEwMTUwOSwgMTAxNTE3LCAxMDE1MjUsIDEwMTUzMiwgMTAxNTM4LCAKLSAgICAxMDE1NDUsIDEwMTU1MiwgMTAxNTYyLCAxMDE1NzIsIDEwMTU3NiwgMTAxNTgwLCAxMDE1ODQsIDEwMTU4OCwgMTAxNTk0LCAKLSAgICAxMDE2MDEsIDEwMTYwNywgMTAxNjE0LCAxMDE2MjEsIDEwMTYyOCwgMTAxNjM3LCAxMDE2NDQsIDEwMTY1MSwgMTAxNjU3LCAKLSAgICAxMDE2NjQsIDEwMTY3MSwgMTAxNjc4LCAxMDE2ODUsIDEwMTY5MiwgMTAxNjk5LCAxMDE3MDUsIDEwMTcxMiwgMTAxNzE5LCAKLSAgICAxMDE3MjYsIDEwMTczNSwgMTAxNzQyLCAxMDE3NDksIDEwMTc1MywgMTAxNzU5LCAxMDE3NjMsIDEwMTc2OSwgMTAxNzc2LCAKLSAgICAxMDE3ODMsIDEwMTc5MCwgMTAxNzk0LCAxMDE3OTgsIDEwMTgwMiwgMTAxODA2LCAxMDE4MTAsIDEwMTgxNywgMTAxODIxLCAKLSAgICAxMDE4MjUsIDEwMTgzMSwgMTAxODM5LCAxMDE4NDMsIDEwMTg0NywgMTAxODUxLCAxMDE4NTUsIDEwMTg2MiwgMTAxODY2LCAKLSAgICAxMDE4NzAsIDEwMTg3OCwgMTAxODgyLCAxMDE4ODYsIDEwMTg5MCwgMTAxODk0LCAxMDE5MDAsIDEwMTkwNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAxOTA4LCAxMDE5MTQsIDEwMTkyMCwgMTAxOTI3LCAKLSAgICAxMDE5MzQsIDEwMTk0MSwgMTAxOTQ4LCAxMDE5NTUsIDEwMTk2MiwgMTAxOTY4LCAxMDE5NzUsIDEwMTk4MiwgMTAxOTg5LCAKLSAgICAxMDE5OTYsIDEwMjAwMywgMTAyMDEwLCAxMDIwMTYsIDEwMjAyMiwgMTAyMDI4LCAxMDIwMzQsIDEwMjA0MCwgMTAyMDQ2LCAKLSAgICAxMDIwNTIsIDEwMjA1OCwgMTAyMDY0LCAxMDIwNzEsIDEwMjA3OCwgMTAyMDg1LCAxMDIwOTIsIDEwMjA5OSwgMTAyMTA2LCAKLSAgICAxMDIxMTIsIDEwMjExOCwgMTAyMTI0LCAxMDIxMzEsIDEwMjEzOCwgMTAyMTQ0LCAxMDIxNTAsIDEwMjE1OSwgMTAyMTY2LCAKLSAgICAxMDIxNzMsIDEwMjE4MCwgMTAyMTg3LCAxMDIxOTQsIDEwMjIwMSwgMTAyMjA3LCAxMDIyMTMsIDEwMjIxOSwgMTAyMjI4LCAKLSAgICAxMDIyMzUsIDEwMjI0MiwgMTAyMjUzLCAxMDIyNjQsIDEwMjI3MCwgMTAyMjc2LCAxMDIyODIsIDEwMjI5MSwgMTAyMjk4LCAKLSAgICAxMDIzMDUsIDEwMjMxNSwgMTAyMzI1LCAxMDIzMzYsIDEwMjM0NywgMTAyMzU5LCAxMDIzNzIsIDEwMjM4MywgMTAyMzk0LCAKLSAgICAxMDI0MDYsIDEwMjQxOSwgMTAyNDMwLCAxMDI0NDEsIDEwMjQ1MiwgMTAyNDYzLCAxMDI0NzQsIDEwMjQ4NiwgMTAyNDk0LCAKLSAgICAxMDI1MDIsIDEwMjUxMSwgMTAyNTIwLCAxMDI1MjksIDEwMjUzNSwgMTAyNTQxLCAxMDI1NDcsIDEwMjU1NCwgMTAyNTY0LCAKLSAgICAxMDI1NzEsIDEwMjU4MSwgMTAyNTg2LCAxMDI1OTEsIDEwMjU5NywgMTAyNjAzLCAxMDI2MTEsIDEwMjYxOSwgMTAyNjI4LCAKLSAgICAxMDI2MzksIDEwMjY1MCwgMTAyNjU4LCAxMDI2NjYsIDEwMjY3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTAyNjg0LCAxMDI2OTUsIDEwMjcwMiwgMTAyNzEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDI3MTgsIDEwMjcyMiwgMTAyNzI2LCAxMDI3MzAsIDEwMjczNCwgMTAyNzM4LCAxMDI3NDIsIDEwMjc0NiwgMTAyNzUwLCAKLSAgICAxMDI3NTQsIDEwMjc1OCwgMTAyNzYyLCAxMDI3NjYsIDEwMjc3MCwgMTAyNzc0LCAxMDI3NzgsIDEwMjc4MiwgMTAyNzg2LCAKLSAgICAxMDI3OTAsIDEwMjc5NCwgMTAyNzk4LCAxMDI4MDIsIDEwMjgwNiwgMTAyODEwLCAxMDI4MTQsIDEwMjgxOCwgMTAyODIyLCAKLSAgICAxMDI4MjYsIDEwMjgzMCwgMTAyODM0LCAxMDI4MzgsIDEwMjg0MiwgMTAyODQ2LCAxMDI4NTAsIDEwMjg1NCwgMTAyODU4LCAKLSAgICAxMDI4NjIsIDEwMjg2NiwgMTAyODcwLCAxMDI4NzQsIDEwMjg3OCwgMTAyODgyLCAxMDI4ODYsIDEwMjg5MCwgMTAyODk0LCAKLSAgICAxMDI4OTgsIDEwMjkwMiwgMTAyOTA2LCAxMDI5MTAsIDEwMjkxNCwgMTAyOTE4LCAxMDI5MjIsIDEwMjkyNiwgMTAyOTMwLCAKLSAgICAxMDI5MzQsIDEwMjkzOCwgMTAyOTQyLCAxMDI5NDYsIDEwMjk1MCwgMTAyOTU0LCAxMDI5NTgsIDEwMjk2MiwgMTAyOTY2LCAKLSAgICAxMDI5NzAsIDEwMjk3NCwgMTAyOTc4LCAxMDI5ODIsIDEwMjk4NiwgMTAyOTkwLCAxMDI5OTQsIDEwMjk5OCwgMTAzMDAyLCAKLSAgICAxMDMwMDYsIDEwMzAxMCwgMTAzMDE0LCAxMDMwMTgsIDEwMzAyMiwgMTAzMDI2LCAxMDMwMzAsIDEwMzAzNCwgMTAzMDM4LCAKLSAgICAxMDMwNDIsIDEwMzA0NiwgMTAzMDUwLCAxMDMwNTQsIDEwMzA1OCwgMTAzMDYyLCAxMDMwNjYsIDEwMzA3MCwgMTAzMDc0LCAKLSAgICAxMDMwNzgsIDEwMzA4MiwgMTAzMDg2LCAxMDMwOTAsIDEwMzA5NCwgMTAzMDk4LCAxMDMxMDIsIDEwMzEwNiwgMTAzMTEwLCAKLSAgICAxMDMxMTQsIDEwMzExOCwgMTAzMTIyLCAxMDMxMjYsIDEwMzEzMCwgMTAzMTM0LCAxMDMxMzgsIDEwMzE0MiwgMTAzMTQ2LCAKLSAgICAxMDMxNTAsIDEwMzE1NCwgMTAzMTU4LCAxMDMxNjIsIDEwMzE2NiwgMTAzMTcwLCAxMDMxNzQsIDEwMzE3OCwgMTAzMTgyLCAKLSAgICAxMDMxODYsIDEwMzE5MCwgMTAzMTk0LCAxMDMxOTgsIDEwMzIwMiwgMTAzMjA2LCAxMDMyMTAsIDEwMzIxNCwgMTAzMjE4LCAKLSAgICAxMDMyMjIsIDEwMzIyNiwgMTAzMjMwLCAxMDMyMzQsIDEwMzIzOCwgMTAzMjQyLCAxMDMyNDYsIDEwMzI1MCwgMTAzMjU0LCAKLSAgICAxMDMyNTgsIDEwMzI2MiwgMTAzMjY2LCAxMDMyNzAsIDEwMzI3NCwgMTAzMjc4LCAxMDMyODIsIDEwMzI4NiwgMTAzMjkwLCAKLSAgICAxMDMyOTQsIDEwMzI5OCwgMTAzMzAyLCAxMDMzMDYsIDEwMzMxMCwgMTAzMzE0LCAxMDMzMTgsIDEwMzMyMiwgMTAzMzI2LCAKLSAgICAxMDMzMzAsIDEwMzMzNCwgMTAzMzM4LCAxMDMzNDIsIDEwMzM0NiwgMTAzMzUwLCAxMDMzNTQsIDEwMzM1OCwgMTAzMzYyLCAKLSAgICAxMDMzNjYsIDEwMzM3MCwgMTAzMzc0LCAxMDMzNzgsIDEwMzM4MiwgMTAzMzg2LCAxMDMzOTAsIDEwMzM5NCwgMTAzMzk4LCAKLSAgICAxMDM0MDIsIDEwMzQwNiwgMTAzNDEwLCAxMDM0MTQsIDEwMzQxOCwgMTAzNDIyLCAxMDM0MjYsIDEwMzQzMCwgMTAzNDM0LCAKLSAgICAxMDM0MzgsIDEwMzQ0MiwgMTAzNDQ2LCAxMDM0NTAsIDEwMzQ1NCwgMTAzNDU4LCAxMDM0NjIsIDEwMzQ2NiwgMTAzNDcwLCAKLSAgICAxMDM0NzQsIDEwMzQ3OCwgMTAzNDgyLCAxMDM0ODYsIDEwMzQ5MCwgMTAzNDk0LCAxMDM0OTgsIDEwMzUwMiwgMTAzNTA2LCAKLSAgICAxMDM1MTAsIDEwMzUxNCwgMTAzNTE4LCAxMDM1MjIsIDEwMzUyNiwgMTAzNTMwLCAxMDM1MzQsIDEwMzUzOCwgMTAzNTQyLCAKLSAgICAxMDM1NDYsIDEwMzU1MCwgMTAzNTU0LCAxMDM1NTgsIDEwMzU2MiwgMTAzNTY2LCAxMDM1NzAsIDEwMzU3NCwgMTAzNTc4LCAKLSAgICAxMDM1ODIsIDEwMzU4NiwgMTAzNTkwLCAxMDM1OTQsIDEwMzU5OCwgMTAzNjAyLCAxMDM2MDYsIDEwMzYxMCwgMTAzNjE0LCAKLSAgICAxMDM2MTgsIDEwMzYyMiwgMTAzNjI2LCAxMDM2MzAsIDEwMzYzNCwgMTAzNjM4LCAxMDM2NDIsIDEwMzY0NiwgMTAzNjUwLCAKLSAgICAxMDM2NTQsIDEwMzY1OCwgMTAzNjYyLCAxMDM2NjYsIDEwMzY3MCwgMTAzNjc0LCAxMDM2NzgsIDEwMzY4MiwgMTAzNjg2LCAKLSAgICAxMDM2OTAsIDEwMzY5NCwgMTAzNjk4LCAxMDM3MDIsIDEwMzcwNiwgMTAzNzEwLCAxMDM3MTQsIDEwMzcxOCwgMTAzNzIyLCAKLSAgICAxMDM3MjYsIDEwMzczMCwgMTAzNzM0LCAxMDM3MzgsIDEwMzc0MiwgMTAzNzQ2LCAxMDM3NTAsIDEwMzc1NCwgMTAzNzU4LCAKLSAgICAxMDM3NjIsIDEwMzc2NiwgMTAzNzcwLCAxMDM3NzQsIDEwMzc3OCwgMTAzNzgyLCAxMDM3ODYsIDEwMzc5MCwgMTAzNzk0LCAKLSAgICAxMDM3OTgsIDEwMzgwMiwgMTAzODA2LCAxMDM4MTAsIDEwMzgxNCwgMTAzODE4LCAxMDM4MjIsIDEwMzgyNiwgMTAzODMwLCAKLSAgICAxMDM4MzQsIDEwMzgzOCwgMTAzODQyLCAxMDM4NDYsIDEwMzg1MCwgMTAzODU0LCAxMDM4NTgsIDEwMzg2MiwgMTAzODY2LCAKLSAgICAxMDM4NzAsIDEwMzg3NCwgMTAzODc4LCAxMDM4ODIsIDEwMzg4NiwgMTAzODkwLCAxMDM4OTQsIDEwMzg5OCwgMTAzOTAyLCAKLSAgICAxMDM5MDYsIDEwMzkxMCwgMTAzOTE0LCAxMDM5MTgsIDEwMzkyMiwgMTAzOTI2LCAxMDM5MzAsIDEwMzkzNCwgMTAzOTM4LCAKLSAgICAxMDM5NDIsIDEwMzk0NiwgMTAzOTUwLCAxMDM5NTQsIDEwMzk1OCwgMTAzOTYyLCAxMDM5NjYsIDEwMzk3MCwgMTAzOTc0LCAKLSAgICAxMDM5NzgsIDEwMzk4MiwgMTAzOTg2LCAxMDM5OTAsIDEwMzk5NCwgMTAzOTk4LCAxMDQwMDIsIDEwNDAwNiwgMTA0MDEwLCAKLSAgICAxMDQwMTQsIDEwNDAxOCwgMTA0MDIyLCAxMDQwMjYsIDEwNDAzMCwgMTA0MDM0LCAxMDQwMzgsIDEwNDA0MiwgMTA0MDQ2LCAKLSAgICAxMDQwNTAsIDEwNDA1NCwgMTA0MDU4LCAxMDQwNjIsIDEwNDA2NiwgMTA0MDcwLCAxMDQwNzQsIDEwNDA3OCwgMTA0MDgyLCAKLSAgICAxMDQwODYsIDEwNDA5MCwgMTA0MDk0LCAxMDQwOTgsIDEwNDEwMiwgMTA0MTA2LCAxMDQxMTAsIDEwNDExNCwgMTA0MTE4LCAKLSAgICAxMDQxMjIsIDEwNDEyNiwgMTA0MTMwLCAxMDQxMzQsIDEwNDEzOCwgMTA0MTQyLCAxMDQxNDYsIDEwNDE1MCwgMTA0MTU0LCAKLSAgICAxMDQxNTgsIDEwNDE2MiwgMTA0MTY2LCAxMDQxNzAsIDEwNDE3NCwgMTA0MTc4LCAxMDQxODIsIDEwNDE4NiwgMTA0MTkwLCAKLSAgICAxMDQxOTQsIDEwNDE5OCwgMTA0MjAyLCAxMDQyMDYsIDEwNDIxMCwgMTA0MjE0LCAxMDQyMTgsIDEwNDIyMiwgMTA0MjI2LCAKLSAgICAxMDQyMzAsIDEwNDIzNCwgMTA0MjM4LCAxMDQyNDIsIDEwNDI0NiwgMTA0MjUwLCAxMDQyNTQsIDEwNDI1OCwgMTA0MjYyLCAKLSAgICAxMDQyNjYsIDEwNDI3MCwgMTA0Mjc0LCAxMDQyNzgsIDEwNDI4MiwgMTA0Mjg2LCAxMDQyOTAsIDEwNDI5NCwgMTA0Mjk4LCAKLSAgICAxMDQzMDIsIDEwNDMwNiwgMTA0MzEwLCAxMDQzMTQsIDEwNDMxOCwgMTA0MzIyLCAxMDQzMjYsIDEwNDMzMCwgMTA0MzM0LCAKLSAgICAxMDQzMzgsIDEwNDM0MiwgMTA0MzQ2LCAxMDQzNTAsIDEwNDM1NCwgMTA0MzU4LCAxMDQzNjIsIDEwNDM2NiwgMTA0MzcwLCAKLSAgICAxMDQzNzQsIDEwNDM3OCwgMTA0MzgyLCAxMDQzODYsIDEwNDM5MCwgMTA0Mzk0LCAxMDQzOTgsIDEwNDQwMiwgMTA0NDA2LCAKLSAgICAxMDQ0MTAsIDEwNDQxNCwgMTA0NDE4LCAxMDQ0MjIsIDEwNDQyNiwgMTA0NDMwLCAxMDQ0MzQsIDEwNDQzOCwgMTA0NDQyLCAKLSAgICAxMDQ0NDYsIDEwNDQ1MCwgMTA0NDU0LCAxMDQ0NTgsIDEwNDQ2MiwgMTA0NDY2LCAxMDQ0NzAsIDEwNDQ3NCwgMTA0NDc4LCAKLSAgICAxMDQ0ODIsIDEwNDQ4NiwgMTA0NDkwLCAxMDQ0OTQsIDEwNDQ5OCwgMTA0NTAyLCAxMDQ1MDYsIDEwNDUxMCwgMTA0NTE0LCAKLSAgICAxMDQ1MTgsIDEwNDUyMiwgMTA0NTI2LCAxMDQ1MzAsIDEwNDUzNCwgMTA0NTM4LCAxMDQ1NDIsIDEwNDU0NiwgMTA0NTUwLCAKLSAgICAxMDQ1NTQsIDEwNDU1OCwgMTA0NTYyLCAxMDQ1NjYsIDEwNDU3MCwgMTA0NTc0LCAxMDQ1NzgsIDEwNDU4MiwgMTA0NTg2LCAKLSAgICAxMDQ1OTAsIDEwNDU5NCwgMTA0NTk4LCAxMDQ2MDIsIDEwNDYwNiwgMTA0NjEwLCAxMDQ2MTQsIDEwNDYxOCwgMTA0NjIyLCAKLSAgICAxMDQ2MjYsIDEwNDYzMCwgMTA0NjM0LCAxMDQ2MzgsIDEwNDY0MiwgMTA0NjQ2LCAxMDQ2NTAsIDEwNDY1NCwgMTA0NjU4LCAKLSAgICAxMDQ2NjIsIDEwNDY2NiwgMTA0NjcwLCAxMDQ2NzQsIDEwNDY3OCwgMTA0NjgyLCAxMDQ2ODYsIDEwNDY5MCwgMTA0Njk0LCAKLSAgICAxMDQ2OTgsIDEwNDcwMiwgMTA0NzA2LCAxMDQ3MTAsIDEwNDcxNCwgMTA0NzE4LCAxMDQ3MjIsIDEwNDcyNiwgMTA0NzMwLCAKLSAgICAxMDQ3MzQsIDEwNDczOCwgMTA0NzQyLCAxMDQ3NDYsIDEwNDc1MCwgMTA0NzU0LCAxMDQ3NTgsIDEwNDc2MiwgMTA0NzY2LCAKLSAgICAxMDQ3NzAsIDEwNDc3NCwgMTA0Nzc4LCAxMDQ3ODIsIDEwNDc4NiwgMTA0NzkwLCAxMDQ3OTQsIDEwNDc5OCwgMTA0ODAyLCAKLSAgICAxMDQ4MDYsIDEwNDgxMCwgMTA0ODE0LCAxMDQ4MTgsIDEwNDgyMiwgMTA0ODI2LCAxMDQ4MzAsIDEwNDgzNCwgMTA0ODM4LCAKLSAgICAxMDQ4NDIsIDEwNDg0NiwgMTA0ODUwLCAxMDQ4NTQsIDEwNDg1OCwgMTA0ODYyLCAxMDQ4NjYsIDEwNDg3MCwgMTA0ODc0LCAKLSAgICAxMDQ4NzgsIDEwNDg4MiwgMTA0ODg2LCAxMDQ4OTAsIDEwNDg5NCwgMTA0ODk4LCAxMDQ5MDIsIDEwNDkwNiwgMTA0OTEwLCAKLSAgICAxMDQ5MTQsIDEwNDkxOCwgMTA0OTIyLCAxMDQ5MjYsIDEwNDkzMCwgMTA0OTM0LCAxMDQ5MzgsIDEwNDk0MiwgMTA0OTQ2LCAKLSAgICAxMDQ5NTAsIDEwNDk1NCwgMTA0OTU4LCAxMDQ5NjIsIDEwNDk2NiwgMTA0OTcwLCAxMDQ5NzQsIDEwNDk3OCwgMTA0OTgyLCAKLSAgICAxMDQ5ODYsIDEwNDk5MCwgMTA0OTk0LCAxMDQ5OTgsIDEwNTAwMiwgMTA1MDA2LCAxMDUwMTAsIDEwNTAxNCwgMTA1MDE4LCAKLSAgICAxMDUwMjIsIDEwNTAyNiwgMTA1MDMwLCAxMDUwMzQsIDEwNTAzOCwgMTA1MDQyLCAxMDUwNDYsIDEwNTA1MCwgMTA1MDU0LCAKLSAgICAxMDUwNTgsIDEwNTA2MiwgMTA1MDY2LCAxMDUwNzAsIDEwNTA3NCwgMTA1MDc4LCAxMDUwODIsIDEwNTA4NiwgMTA1MDkwLCAKLSAgICAxMDUwOTQsIDEwNTA5OCwgMTA1MTAyLCAxMDUxMDYsIDEwNTExMCwgMTA1MTE0LCAxMDUxMTgsIDEwNTEyMiwgMTA1MTI2LCAKLSAgICAxMDUxMzAsIDEwNTEzNCwgMTA1MTM4LCAxMDUxNDIsIDEwNTE0NiwgMTA1MTUwLCAxMDUxNTQsIDEwNTE1OCwgMTA1MTYyLCAKLSAgICAxMDUxNjYsIDEwNTE3MCwgMTA1MTc0LCAxMDUxNzgsIDEwNTE4MiwgMTA1MTg2LCAxMDUxOTAsIDEwNTE5NCwgMTA1MTk4LCAKLSAgICAxMDUyMDIsIDEwNTIwNiwgMTA1MjEwLCAxMDUyMTQsIDEwNTIxOCwgMTA1MjIyLCAxMDUyMjYsIDEwNTIzMCwgMTA1MjM0LCAKLSAgICAxMDUyMzgsIDEwNTI0MiwgMTA1MjQ2LCAxMDUyNTAsIDEwNTI1NCwgMTA1MjU4LCAxMDUyNjIsIDEwNTI2NiwgMTA1MjcwLCAKLSAgICAxMDUyNzQsIDEwNTI3OCwgMTA1MjgyLCAxMDUyODYsIDEwNTI5MCwgMTA1Mjk0LCAxMDUyOTgsIDEwNTMwMiwgMTA1MzA2LCAKLSAgICAxMDUzMTAsIDEwNTMxNCwgMTA1MzE4LCAxMDUzMjIsIDEwNTMyNiwgMTA1MzMwLCAxMDUzMzQsIDEwNTMzOCwgMTA1MzQyLCAKLSAgICAxMDUzNDYsIDEwNTM1MCwgMTA1MzU0LCAxMDUzNTgsIDEwNTM2MiwgMTA1MzY2LCAxMDUzNzAsIDEwNTM3NCwgMTA1Mzc4LCAKLSAgICAxMDUzODIsIDEwNTM4NiwgMTA1MzkwLCAxMDUzOTQsIDEwNTM5OCwgMTA1NDAyLCAxMDU0MDYsIDEwNTQxMCwgMTA1NDE0LCAKLSAgICAxMDU0MTgsIDEwNTQyMiwgMTA1NDI2LCAxMDU0MzAsIDEwNTQzNCwgMTA1NDM4LCAxMDU0NDIsIDEwNTQ0NiwgMTA1NDUwLCAKLSAgICAxMDU0NTQsIDEwNTQ1OCwgMTA1NDYyLCAxMDU0NjYsIDEwNTQ3MCwgMTA1NDc0LCAxMDU0NzgsIDEwNTQ4MiwgMTA1NDg2LCAKLSAgICAxMDU0OTAsIDEwNTQ5NCwgMTA1NDk4LCAxMDU1MDIsIDEwNTUwNiwgMTA1NTEwLCAxMDU1MTQsIDEwNTUxOCwgMTA1NTIyLCAKLSAgICAxMDU1MjYsIDEwNTUzMCwgMTA1NTM0LCAxMDU1MzgsIDEwNTU0MiwgMTA1NTQ2LCAxMDU1NTAsIDEwNTU1NCwgMTA1NTU4LCAKLSAgICAxMDU1NjIsIDEwNTU2NiwgMTA1NTcwLCAxMDU1NzQsIDEwNTU3OCwgMTA1NTgyLCAxMDU1ODYsIDEwNTU5MCwgMTA1NTk0LCAKLSAgICAxMDU1OTgsIDEwNTYwMiwgMTA1NjA2LCAxMDU2MTAsIDEwNTYxNCwgMTA1NjE4LCAxMDU2MjIsIDEwNTYyNiwgMTA1NjMwLCAKLSAgICAxMDU2MzQsIDEwNTYzOCwgMTA1NjQyLCAxMDU2NDYsIDEwNTY1MCwgMTA1NjU0LCAxMDU2NTgsIDEwNTY2MiwgMTA1NjY2LCAKLSAgICAxMDU2NzAsIDEwNTY3NCwgMTA1Njc4LCAxMDU2ODIsIDEwNTY4NiwgMTA1NjkwLCAxMDU2OTQsIDEwNTY5OCwgMTA1NzAyLCAKLSAgICAxMDU3MDYsIDEwNTcxMCwgMTA1NzE0LCAxMDU3MTgsIDEwNTcyMiwgMTA1NzI2LCAxMDU3MzAsIDEwNTczNCwgMTA1NzM4LCAKLSAgICAxMDU3NDIsIDEwNTc0NiwgMTA1NzUwLCAxMDU3NTQsIDEwNTc1OCwgMTA1NzYyLCAxMDU3NjYsIDEwNTc3MCwgMTA1Nzc0LCAKLSAgICAxMDU3NzgsIDEwNTc4MiwgMTA1Nzg2LCAxMDU3OTAsIDEwNTc5NCwgMTA1Nzk4LCAxMDU4MDIsIDEwNTgwNiwgMTA1ODEwLCAKLSAgICAxMDU4MTQsIDEwNTgxOCwgMTA1ODIyLCAxMDU4MjYsIDEwNTgzMCwgMTA1ODM0LCAxMDU4MzgsIDEwNTg0MiwgMTA1ODQ2LCAKLSAgICAxMDU4NTAsIDEwNTg1NCwgMTA1ODU4LCAxMDU4NjIsIDEwNTg2NiwgMTA1ODcwLCAxMDU4NzQsIDEwNTg3OCwgMTA1ODgyLCAKLSAgICAxMDU4ODYsIDEwNTg5MCwgMTA1ODk0LCAxMDU4OTgsIDEwNTkwMiwgMTA1OTA2LCAxMDU5MTAsIDEwNTkxNCwgMTA1OTE4LCAKLSAgICAxMDU5MjIsIDEwNTkyNiwgMTA1OTMwLCAxMDU5MzQsIDEwNTkzOCwgMTA1OTQyLCAxMDU5NDYsIDEwNTk1MCwgMTA1OTU0LCAKLSAgICAxMDU5NTgsIDEwNTk2MiwgMTA1OTY2LCAxMDU5NzAsIDEwNTk3NCwgMTA1OTc4LCAxMDU5ODIsIDEwNTk4NiwgMTA1OTkwLCAKLSAgICAxMDU5OTQsIDEwNTk5OCwgMTA2MDAyLCAxMDYwMDYsIDEwNjAxMCwgMTA2MDE0LCAxMDYwMTgsIDEwNjAyMiwgMTA2MDI2LCAKLSAgICAxMDYwMzAsIDEwNjAzNCwgMTA2MDM4LCAxMDYwNDIsIDEwNjA0NiwgMTA2MDUwLCAxMDYwNTQsIDEwNjA1OCwgMTA2MDYyLCAKLSAgICAxMDYwNjYsIDEwNjA3MCwgMTA2MDc0LCAxMDYwNzgsIDEwNjA4MiwgMTA2MDg2LCAxMDYwOTAsIDEwNjA5NCwgMTA2MDk4LCAKLSAgICAxMDYxMDIsIDEwNjEwNiwgMTA2MTEwLCAxMDYxMTQsIDEwNjExOCwgMTA2MTIyLCAxMDYxMjYsIDEwNjEzMCwgMTA2MTM0LCAKLSAgICAxMDYxMzgsIDEwNjE0MiwgMTA2MTQ2LCAxMDYxNTAsIDEwNjE1NCwgMTA2MTU4LCAxMDYxNjIsIDEwNjE2NiwgMTA2MTcwLCAKLSAgICAxMDYxNzQsIDEwNjE3OCwgMTA2MTgyLCAxMDYxODYsIDEwNjE5MCwgMTA2MTk0LCAxMDYxOTgsIDEwNjIwMiwgMTA2MjA2LCAKLSAgICAxMDYyMTAsIDEwNjIxNCwgMTA2MjE4LCAxMDYyMjIsIDEwNjIyNiwgMTA2MjMwLCAxMDYyMzQsIDEwNjIzOCwgMTA2MjQyLCAKLSAgICAxMDYyNDYsIDEwNjI1MCwgMTA2MjU0LCAxMDYyNTgsIDEwNjI2MiwgMTA2MjY2LCAxMDYyNzAsIDEwNjI3NCwgMTA2Mjc4LCAKLSAgICAxMDYyODIsIDEwNjI4NiwgMTA2MjkwLCAxMDYyOTQsIDEwNjI5OCwgMTA2MzAyLCAxMDYzMDYsIDEwNjMxMCwgMTA2MzE0LCAKLSAgICAxMDYzMTgsIDEwNjMyMiwgMTA2MzI2LCAxMDYzMzAsIDEwNjMzNCwgMTA2MzM4LCAxMDYzNDIsIDEwNjM0NiwgMTA2MzUwLCAKLSAgICAxMDYzNTQsIDEwNjM1OCwgMTA2MzYyLCAxMDYzNjYsIDEwNjM3MCwgMTA2Mzc0LCAxMDYzNzgsIDEwNjM4MiwgMTA2Mzg2LCAKLSAgICAxMDYzOTAsIDEwNjM5NCwgMTA2Mzk4LCAxMDY0MDIsIDEwNjQwNiwgMTA2NDEwLCAxMDY0MTQsIDEwNjQxOCwgMTA2NDIyLCAKLSAgICAxMDY0MjYsIDEwNjQzMCwgMTA2NDM0LCAxMDY0MzgsIDEwNjQ0MiwgMTA2NDQ2LCAxMDY0NTAsIDEwNjQ1NCwgMTA2NDU4LCAKLSAgICAxMDY0NjIsIDEwNjQ2NiwgMTA2NDcwLCAxMDY0NzQsIDEwNjQ3OCwgMTA2NDgyLCAxMDY0ODYsIDEwNjQ5MCwgMTA2NDk0LCAKLSAgICAxMDY0OTgsIDEwNjUwMiwgMTA2NTA2LCAxMDY1MTAsIDEwNjUxNCwgMTA2NTE4LCAxMDY1MjIsIDEwNjUyNiwgMTA2NTMwLCAKLSAgICAxMDY1MzQsIDEwNjUzOCwgMTA2NTQyLCAxMDY1NDYsIDEwNjU1MCwgMTA2NTU0LCAxMDY1NTgsIDEwNjU2MiwgMTA2NTY2LCAKLSAgICAxMDY1NzAsIDEwNjU3NCwgMTA2NTc4LCAxMDY1ODIsIDEwNjU4NiwgMTA2NTkwLCAxMDY1OTQsIDEwNjU5OCwgMTA2NjAyLCAKLSAgICAxMDY2MDYsIDEwNjYxMCwgMTA2NjE0LCAxMDY2MTgsIDEwNjYyMiwgMTA2NjI2LCAxMDY2MzAsIDEwNjYzNCwgMTA2NjM4LCAKLSAgICAxMDY2NDIsIDEwNjY0NiwgMTA2NjUwLCAxMDY2NTQsIDEwNjY1OCwgMTA2NjYyLCAxMDY2NjYsIDEwNjY3MCwgMTA2Njc0LCAKLSAgICAxMDY2NzgsIDEwNjY4MiwgMTA2Njg2LCAxMDY2OTAsIDEwNjY5NCwgMTA2Njk4LCAxMDY3MDIsIDEwNjcwNiwgMTA2NzEwLCAKLSAgICAxMDY3MTQsIDEwNjcxOCwgMTA2NzIyLCAxMDY3MjYsIDEwNjczMCwgMTA2NzM0LCAxMDY3MzgsIDEwNjc0MiwgMTA2NzQ2LCAKLSAgICAxMDY3NTAsIDEwNjc1NCwgMTA2NzU4LCAxMDY3NjIsIDEwNjc2NiwgMTA2NzcwLCAxMDY3NzQsIDEwNjc3OCwgMTA2NzgyLCAKLSAgICAxMDY3ODYsIDEwNjc5MCwgMTA2Nzk0LCAxMDY3OTgsIDEwNjgwMiwgMTA2ODA2LCAxMDY4MTAsIDEwNjgxNCwgMTA2ODE4LCAKLSAgICAxMDY4MjIsIDEwNjgyNiwgMTA2ODMwLCAxMDY4MzQsIDEwNjgzOCwgMTA2ODQyLCAxMDY4NDYsIDEwNjg1MCwgMTA2ODU0LCAKLSAgICAxMDY4NTgsIDEwNjg2MiwgMTA2ODY2LCAxMDY4NzAsIDEwNjg3NCwgMTA2ODc4LCAxMDY4ODIsIDEwNjg4NiwgMTA2ODkwLCAKLSAgICAxMDY4OTQsIDEwNjg5OCwgMTA2OTAyLCAxMDY5MDYsIDEwNjkxMCwgMTA2OTE0LCAxMDY5MTgsIDEwNjkyMiwgMTA2OTI2LCAKLSAgICAxMDY5MzAsIDEwNjkzNCwgMTA2OTM4LCAxMDY5NDIsIDEwNjk0NiwgMTA2OTUwLCAxMDY5NTQsIDEwNjk1OCwgMTA2OTYyLCAKLSAgICAxMDY5NjYsIDEwNjk3MCwgMTA2OTc0LCAxMDY5NzgsIDEwNjk4MiwgMTA2OTg2LCAxMDY5OTAsIDEwNjk5NCwgMTA2OTk4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcwMDIsIDEwNzAwOSwgMTA3MDE2LCAxMDcwMjUsIDEwNzAzNCwgCi0gICAgMTA3MDQxLCAxMDcwNDYsIDEwNzA1MywgMTA3MDYwLCAxMDcwNjksIDEwNzA4MCwgMTA3MDkxLCAxMDcwOTYsIDEwNzEwMywgCi0gICAgMTA3MTA4LCAxMDcxMTMsIDEwNzExOCwgMTA3MTIzLCAxMDcxMjgsIDEwNzEzMywgMTA3MTM4LCAxMDcxNDMsIDEwNzE0OCwgCi0gICAgMTA3MTUzLCAxMDcxNTgsIDEwNzE2NSwgMTA3MTcyLCAxMDcxNzcsIDEwNzE4MiwgMTA3MTg3LCAxMDcxOTIsIDEwNzE5OSwgCi0gICAgMTA3MjA2LCAxMDcyMTQsIDEwNzIxOSwgMTA3MjI2LCAxMDcyMzEsIDEwNzIzNiwgMTA3MjQxLCAxMDcyNDYsIDEwNzI1MSwgCi0gICAgMTA3MjU4LCAxMDcyNjUsIDEwNzI3MCwgMTA3Mjc1LCAxMDcyODAsIDEwNzI4NSwgMTA3MjkwLCAxMDcyOTUsIDEwNzMwMCwgCi0gICAgMTA3MzA1LCAxMDczMTAsIDEwNzMxNSwgMTA3MzIwLCAxMDczMjUsIDEwNzMzMCwgMTA3MzM1LCAxMDczNDAsIDEwNzM0NSwgCi0gICAgMTA3MzUwLCAxMDczNTUsIDEwNzM2MCwgMTA3MzY3LCAxMDczNzIsIDEwNzM3NywgMTA3Mzg2LCAxMDczOTMsIDEwNzM5OCwgCi0gICAgMTA3NDAzLCAxMDc0MDgsIDEwNzQxMywgMTA3NDE4LCAxMDc0MjMsIDEwNzQyOCwgMTA3NDMzLCAxMDc0MzgsIDEwNzQ0MywgCi0gICAgMTA3NDQ4LCAxMDc0NTMsIDEwNzQ1OCwgMTA3NDYzLCAxMDc0NjgsIDEwNzQ3MywgMTA3NDc4LCAxMDc0ODMsIDEwNzQ4OCwgCi0gICAgMTA3NDkzLCAxMDc0OTgsIDEwNzUwNCwgMTA3NTEyLCAxMDc1MTgsIDEwNzUyNiwgMTA3NTM0LCAxMDc1NDIsIDEwNzU0OCwgCi0gICAgMTA3NTU0LCAxMDc1NjAsIDEwNzU2NiwgMTA3NTcyLCAxMDc1ODAsIDEwNzU5MCwgMTA3NTk4LCAxMDc2MDYsIDEwNzYxMiwgCi0gICAgMTA3NjE4LCAxMDc2MjYsIDEwNzYzNCwgMTA3NjQwLCAxMDc2NDgsIDEwNzY1NiwgMTA3NjY0LCAxMDc2NzAsIDEwNzY3NiwgCi0gICAgMTA3NjgyLCAxMDc2ODgsIDEwNzY5NCwgMTA3NzAwLCAxMDc3MDgsIDEwNzcxNiwgMTA3NzIyLCAxMDc3MjgsIDEwNzczNCwgCi0gICAgMTA3NzQwLCAxMDc3NDYsIDEwNzc1NCwgMTA3NzYwLCAxMDc3NjYsIDEwNzc3MiwgMTA3Nzc4LCAxMDc3ODQsIDEwNzc5MCwgCi0gICAgMTA3Nzk4LCAxMDc4MDQsIDEwNzgxMCwgMTA3ODE2LCAxMDc4MjIsIDEwNzgzMCwgMTA3ODM4LCAxMDc4NDQsIDEwNzg1MCwgCi0gICAgMTA3ODU2LCAxMDc4NjEsIDEwNzg2NywgMTA3ODczLCAxMDc4ODAsIDEwNzg4NSwgMTA3ODkwLCAxMDc4OTUsIDEwNzkwMCwgCi0gICAgMTA3OTA1LCAxMDc5MTAsIDEwNzkxNSwgMTA3OTIwLCAxMDc5MjUsIDEwNzkzNCwgMTA3OTQxLCAxMDc5NDYsIDEwNzk1MSwgCi0gICAgMTA3OTU2LCAxMDc5NjMsIDEwNzk2OCwgMTA3OTczLCAxMDc5NzgsIDEwNzk4NSwgMTA3OTkwLCAxMDc5OTUsIDEwODAwMCwgCi0gICAgMTA4MDA1LCAxMDgwMTAsIDEwODAxNSwgMTA4MDIwLCAxMDgwMjUsIDEwODAzMCwgMTA4MDM1LCAxMDgwNDAsIDEwODA0NywgCi0gICAgMTA4MDUyLCAxMDgwNTksIDEwODA2NCwgMTA4MDY5LCAxMDgwNzYsIDEwODA4MSwgMTA4MDg2LCAxMDgwOTEsIDEwODA5NiwgCi0gICAgMTA4MTAxLCAxMDgxMDYsIDEwODExMSwgMTA4MTE2LCAxMDgxMjEsIDEwODEyNiwgMTA4MTMxLCAxMDgxMzYsIDEwODE0MSwgCi0gICAgMTA4MTQ2LCAxMDgxNTEsIDEwODE1NiwgMTA4MTYxLCAxMDgxNjYsIDEwODE3MSwgMTA4MTc4LCAxMDgxODMsIDEwODE4OCwgCi0gICAgMTA4MTkzLCAxMDgxOTgsIDEwODIwMywgMTA4MjA4LCAxMDgyMTMsIDEwODIxOCwgMTA4MjIzLCAxMDgyMjgsIDEwODIzMywgCi0gICAgMTA4MjM4LCAxMDgyNDMsIDEwODI1MCwgMTA4MjU1LCAxMDgyNjAsIDEwODI2NywgMTA4MjcyLCAxMDgyNzcsIDEwODI4MiwgCi0gICAgMTA4Mjg3LCAxMDgyOTIsIDEwODI5NywgMTA4MzAyLCAxMDgzMDcsIDEwODMxMiwgMTA4MzE3LCAxMDgzMjQsIDEwODMyOSwgCi0gICAgMTA4MzM0LCAxMDgzMzksIDEwODM0NCwgMTA4MzQ5LCAxMDgzNTYsIDEwODM2MywgMTA4MzY4LCAxMDgzNzMsIDEwODM3OCwgCi0gICAgMTA4MzgzLCAxMDgzODgsIDEwODM5MywgMTA4Mzk4LCAxMDg0MDMsIDEwODQwOCwgMTA4NDEzLCAxMDg0MTgsIDEwODQyMywgCi0gICAgMTA4NDI4LCAxMDg0MzMsIDEwODQzOCwgMTA4NDQzLCAxMDg0NDgsIDEwODQ1MywgMTA4NDU4LCAxMDg0NjMsIDEwODQ2OCwgCi0gICAgMTA4NDczLCAxMDg0NzgsIDEwODQ4MywgMTA4NDg4LCAxMDg0OTMsIDEwODQ5OCwgMTA4NTAzLCAxMDg1MDgsIDEwODUxMywgCi0gICAgMTA4NTE4LCAxMDg1MjMsIDEwODUyOCwgMTA4NTMzLCAxMDg1MzgsIDEwODU0MywgMTA4NTUwLCAxMDg1NTUsIDEwODU2MCwgCi0gICAgMTA4NTY1LCAxMDg1NzAsIDEwODU3NSwgMTA4NTgwLCAxMDg1ODUsIDEwODU5MCwgMTA4NTk1LCAxMDg2MDAsIDEwODYwNSwgCi0gICAgMTA4NjEwLCAxMDg2MTUsIDEwODYyMCwgMTA4NjI1LCAxMDg2MzAsIDEwODYzNSwgMTA4NjQwLCAxMDg2NDUsIDEwODY1MCwgCi0gICAgMTA4NjU1LCAxMDg2NjAsIDEwODY2NSwgMTA4NjcwLCAxMDg2NzUsIDEwODY4MCwgMTA4Njg1LCAxMDg2OTAsIDEwODY5NSwgCi0gICAgMTA4NzAwLCAxMDg3MDUsIDEwODcxMCwgMTA4NzE1LCAxMDg3MjAsIDEwODcyNSwgMTA4NzMwLCAxMDg3MzUsIDEwODc0MCwgCi0gICAgMTA4NzQ1LCAxMDg3NTAsIDEwODc1NSwgMTA4NzYwLCAxMDg3NjUsIDEwODc3MCwgMTA4Nzc1LCAxMDg3ODAsIDEwODc4NSwgCi0gICAgMTA4NzkwLCAxMDg3OTUsIDEwODgwMCwgMTA4ODA1LCAxMDg4MTAsIDEwODgxNSwgMTA4ODIwLCAxMDg4MjUsIDEwODgzMCwgCi0gICAgMTA4ODM1LCAxMDg4NDAsIDEwODg0NywgMTA4ODUyLCAxMDg4NTcsIDEwODg2MiwgMTA4ODY3LCAxMDg4NzIsIDEwODg3NywgCi0gICAgMTA4ODgxLCAxMDg4ODYsIDEwODg5MSwgMTA4ODk2LCAxMDg5MDEsIDEwODkwNiwgMTA4OTExLCAxMDg5MTYsIDEwODkyMSwgCi0gICAgMTA4OTI2LCAxMDg5MzEsIDEwODkzNiwgMTA4OTQxLCAxMDg5NDYsIDEwODk1MSwgMTA4OTU4LCAxMDg5NjMsIDEwODk2OCwgCi0gICAgMTA4OTc0LCAxMDg5NzksIDEwODk4NCwgMTA4OTg5LCAxMDg5OTQsIDEwODk5OSwgMTA5MDA0LCAxMDkwMDksIDEwOTAxNCwgCi0gICAgMTA5MDE5LCAxMDkwMjQsIDEwOTAyOSwgMTA5MDM0LCAxMDkwMzksIDEwOTA0NCwgMTA5MDQ5LCAxMDkwNTQsIDEwOTA1OSwgCi0gICAgMTA5MDY0LCAxMDkwNjksIDEwOTA3NCwgMTA5MDc5LCAxMDkwODQsIDEwOTA4OSwgMTA5MDk0LCAxMDkwOTksIDEwOTEwNCwgCi0gICAgMTA5MTA5LCAxMDkxMTQsIDEwOTExOSwgMTA5MTI0LCAxMDkxMjksIDEwOTEzNCwgMTA5MTM5LCAxMDkxNDQsIDEwOTE0OSwgCi0gICAgMTA5MTU0LCAxMDkxNTksIDEwOTE2NCwgMTA5MTY5LCAxMDkxNzQsIDEwOTE3OSwgMTA5MTg0LCAxMDkxODksIDEwOTE5NiwgCi0gICAgMTA5MjAxLCAxMDkyMDYsIDEwOTIxMywgMTA5MjIwLCAxMDkyMjUsIDEwOTIzMCwgMTA5MjM1LCAxMDkyNDAsIDEwOTI0NSwgCi0gICAgMTA5MjUwLCAxMDkyNTUsIDEwOTI2MCwgMTA5MjY1LCAxMDkyNzAsIDEwOTI3NSwgMTA5MjgwLCAxMDkyODUsIDEwOTI5MCwgCi0gICAgMTA5Mjk1LCAxMDkzMDAsIDEwOTMwNSwgMTA5MzEwLCAxMDkzMTUsIDEwOTMyMCwgMTA5MzI1LCAxMDkzMzAsIDEwOTMzNSwgCi0gICAgMTA5MzQwLCAxMDkzNDUsIDEwOTM1MiwgMTA5MzU3LCAxMDkzNjIsIDEwOTM2NywgMTA5MzcyLCAxMDkzNzcsIDEwOTM4MiwgCi0gICAgMTA5Mzg3LCAxMDkzOTIsIDEwOTM5NywgMTA5NDAyLCAxMDk0MDcsIDEwOTQxMiwgMTA5NDE3LCAxMDk0MjIsIDEwOTQyNywgCi0gICAgMTA5NDMyLCAxMDk0MzcsIDEwOTQ0MiwgMTA5NDQ5LCAxMDk0NTQsIDEwOTQ1OSwgMTA5NDY0LCAxMDk0NjksIDEwOTQ3NCwgCi0gICAgMTA5NDc5LCAxMDk0ODQsIDEwOTQ5MCwgMTA5NDk1LCAxMDk1MDAsIDEwOTUwNSwgMTA5NTEwLCAxMDk1MTUsIDEwOTUyMCwgCi0gICAgMTA5NTI1LCAxMDk1MzAsIDEwOTUzNywgMTA5NTQ0LCAxMDk1NDksIDEwOTU1NCwgMTA5NTU4LCAxMDk1NjMsIDEwOTU2NywgCi0gICAgMTA5NTcxLCAxMDk1NzYsIDEwOTU4MywgMTA5NTg4LCAxMDk1OTMsIDEwOTYwMiwgMTA5NjA3LCAxMDk2MTIsIDEwOTYxNywgCi0gICAgMTA5NjIyLCAxMDk2MjksIDEwOTYzNiwgMTA5NjQxLCAxMDk2NDYsIDEwOTY1MSwgMTA5NjU2LCAxMDk2NjMsIDEwOTY2OCwgCi0gICAgMTA5NjczLCAxMDk2NzgsIDEwOTY4MywgMTA5Njg4LCAxMDk2OTMsIDEwOTY5OCwgMTA5NzAzLCAxMDk3MDgsIDEwOTcxMywgCi0gICAgMTA5NzE4LCAxMDk3MjMsIDEwOTczMCwgMTA5NzM0LCAxMDk3MzksIDEwOTc0NCwgMTA5NzQ5LCAxMDk3NTQsIDEwOTc1OCwgCi0gICAgMTA5NzYzLCAxMDk3NjgsIDEwOTc3MywgMTA5Nzc4LCAxMDk3ODMsIDEwOTc4OCwgMTA5NzkzLCAxMDk3OTgsIDEwOTgwMywgCi0gICAgMTA5ODA5LCAxMDk4MTUsIDEwOTgyMSwgMTA5ODI3LCAxMDk4MzMsIDEwOTgzOSwgMTA5ODQ1LCAxMDk4NTEsIDEwOTg1NywgCi0gICAgMTA5ODYzLCAxMDk4NjksIDEwOTg3NSwgMTA5ODgwLCAxMDk4ODYsIDEwOTg5MiwgMTA5ODk4LCAxMDk5MDQsIDEwOTkxMCwgCi0gICAgMTA5OTE2LCAxMDk5MjIsIDEwOTkyOCwgMTA5OTM0LCAxMDk5NDAsIDEwOTk0NiwgMTA5OTUxLCAxMDk5NTcsIDEwOTk2MywgCi0gICAgMTA5OTY5LCAxMDk5NzUsIDEwOTk4MSwgMTA5OTg3LCAxMDk5OTMsIDEwOTk5OSwgMTEwMDA1LCAxMTAwMTEsIDExMDAxNywgCi0gICAgMTEwMDIzLCAxMTAwMjksIDExMDAzNSwgMTEwMDQxLCAxMTAwNDcsIDExMDA1MywgMTEwMDU5LCAxMTAwNjUsIDExMDA3MSwgCi0gICAgMTEwMDc2LCAxMTAwODIsIDExMDA4OCwgMTEwMDk0LCAxMTAxMDAsIDExMDEwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMTEyLCAxMTAxMTUsIDExMDExOSwgCi0gICAgMTEwMTIzLCAxMTAxMjcsIDExMDEzMCwgMTEwMTM0LCAxMTAxMzksIDExMDE0MywgMTEwMTQ3LCAxMTAxNTEsIDExMDE1NSwgCi0gICAgMTEwMTU5LCAxMTAxNjQsIDExMDE2OSwgMTEwMTczLCAxMTAxNzcsIDExMDE4MCwgMTEwMTg0LCAxMTAxODksIDExMDE5NCwgCi0gICAgMTEwMTk4LCAxMTAyMDIsIDExMDIwNiwgMTEwMjEwLCAxMTAyMTQsIDExMDIxOCwgMTEwMjIyLCAxMTAyMjYsIDExMDIzMCwgCi0gICAgMTEwMjM0LCAxMTAyMzcsIDExMDI0MSwgMTEwMjQ1LCAxMTAyNDksIDExMDI1MywgMTEwMjU3LCAxMTAyNjEsIDExMDI2NywgCi0gICAgMTEwMjcwLCAxMTAyNzQsIDExMDI3OCwgMTEwMjgyLCAxMTAyODYsIDExMDI5MCwgMTEwMjk0LCAxMTAyOTgsIDExMDMwMiwgCi0gICAgMTEwMzA2LCAxMTAzMTEsIDExMDMxNiwgMTEwMzIyLCAxMTAzMjYsIDExMDMzMCwgMTEwMzM0LCAxMTAzMzgsIDExMDM0MiwgCi0gICAgMTEwMzQ2LCAxMTAzNTEsIDExMDM1NCwgMTEwMzU4LCAxMTAzNjIsIDExMDM2NiwgMTEwMzcwLCAxMTAzNzYsIDExMDM4MCwgCi0gICAgMTEwMzg0LCAxMTAzODgsIDExMDM5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMzk2LCAxMTA0MDAsIAotICAgIDExMDQwNCwgMTEwNDEwLCAxMTA0MTYsIDExMDQyMCwgMTEwNDI1LCAxMTA0MzAsIDExMDQzNSwgMTEwNDQwLCAxMTA0NDQsIAotICAgIDExMDQ0OSwgMTEwNDU0LCAxMTA0NTksIDExMDQ2MywgMTEwNDY4LCAxMTA0NzMsIDExMDQ3OCwgMTEwNDgyLCAxMTA0ODcsIAotICAgIDExMDQ5MiwgMTEwNDk3LCAxMTA1MDIsIDExMDUwNywgMTEwNTEyLCAxMTA1MTcsIDExMDUyMiwgMTEwNTI2LCAxMTA1MzEsIAotICAgIDExMDUzNiwgMTEwNTQxLCAxMTA1NDYsIDExMDU1MSwgMTEwNTU2LCAxMTA1NjEsIDExMDU2NiwgMTEwNTcxLCAxMTA1NzYsIAotICAgIDExMDU4MSwgMTEwNTg4LCAxMTA1OTMsIDExMDYwMCwgMTEwNjA1LCAxMTA2MTAsIDExMDYxNSwgMTEwNjIwLCAxMTA2MjUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDYzMCwgMTEwNjM0LCAxMTA2NDAsIAotICAgIDExMDY0MywgMTEwNjQ2LCAxMTA2NTAsIDExMDY1NCwgMTEwNjU4LCAxMTA2NjIsIDExMDY2NiwgMTEwNjcwLCAxMTA2NzQsIAotICAgIDExMDY4MCwgMTEwNjg2LCAxMTA2OTIsIDExMDY5OCwgMTEwNzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA3MTAsIDExMDcxNSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTEwNzIxLCAxMTA3MjYsIDExMDczMSwgMTEwNzM2LCAxMTA3NDMsIDExMDc1MCwgMTEwNzU3LCAxMTA3NjQsIDExMDc2OSwgCi0gICAgMTEwNzc0LCAxMTA3NzksIDExMDc4NCwgMTEwNzkxLCAxMTA3OTYsIDExMDgwMywgMTEwODEwLCAxMTA4MTUsIDExMDgyMCwgCi0gICAgMTEwODI1LCAxMTA4MzIsIDExMDgzNywgMTEwODQyLCAxMTA4NDksIDExMDg1NiwgMTEwODYxLCAxMTA4NjYsIDExMDg3MSwgCi0gICAgMTEwODc4LCAxMTA4ODUsIDExMDg5MiwgMTEwODk3LCAxMTA5MDIsIDExMDkwOSwgMTEwOTE2LCAxMTA5MjMsIDExMDkzMCwgCi0gICAgMTEwOTM1LCAxMTA5NDAsIDExMDk0NSwgMTEwOTUyLCAxMTA5NTcsIDExMDk2MiwgMTEwOTY3LCAxMTA5NzQsIDExMDk4MywgCi0gICAgMTEwOTkwLCAxMTA5OTUsIDExMTAwMCwgMTExMDA1LCAxMTEwMTAsIDExMTAxNSwgMTExMDIwLCAxMTEwMjksIDExMTAzNiwgCi0gICAgMTExMDQxLCAxMTEwNDgsIDExMTA1NSwgMTExMDYwLCAxMTEwNjUsIDExMTA3MCwgMTExMDc3LCAxMTEwODIsIDExMTA4OSwgCi0gICAgMTExMDk2LCAxMTExMDEsIDExMTEwNiwgMTExMTExLCAxMTExMTgsIDExMTEyNSwgMTExMTMwLCAxMTExMzUsIDExMTE0MiwgCi0gICAgMTExMTQ5LCAxMTExNTYsIDExMTE2MSwgMTExMTY2LCAxMTExNzEsIDExMTE3NiwgMTExMTgzLCAxMTExOTIsIDExMTIwMSwgCi0gICAgMTExMjA2LCAxMTEyMTMsIDExMTIyMiwgMTExMjI3LCAxMTEyMzIsIDExMTIzNywgMTExMjQyLCAxMTEyNDksIDExMTI1NiwgCi0gICAgMTExMjYzLCAxMTEyNzAsIDExMTI3NSwgMTExMjgwLCAxMTEyODUsIDExMTI5MiwgMTExMjk5LCAxMTEzMDYsIDExMTMxMSwgCi0gICAgMTExMzE2LCAxMTEzMjMsIDExMTMyOCwgMTExMzM1LCAxMTEzNDAsIDExMTM0NywgMTExMzUyLCAxMTEzNTksIDExMTM2NiwgCi0gICAgMTExMzcxLCAxMTEzNzYsIDExMTM4MSwgMTExMzg2LCAxMTEzOTEsIDExMTM5NiwgMTExNDAxLCAxMTE0MDYsIDExMTQxMSwgCi0gICAgMTExNDE4LCAxMTE0MjUsIDExMTQzMiwgMTExNDM5LCAxMTE0NDYsIDExMTQ1NSwgMTExNDYwLCAxMTE0NjUsIDExMTQ3MiwgCi0gICAgMTExNDc5LCAxMTE0ODQsIDExMTQ5MSwgMTExNDk4LCAxMTE1MDUsIDExMTUxMiwgMTExNTE5LCAxMTE1MjYsIDExMTUzMSwgCi0gICAgMTExNTM2LCAxMTE1NDEsIDExMTU0NiwgMTExNTUxLCAxMTE1NjAsIDExMTU2OSwgMTExNTc4LCAxMTE1ODcsIDExMTU5NiwgCi0gICAgMTExNjA1LCAxMTE2MTQsIDExMTYyMywgMTExNjI4LCAxMTE2MzksIDExMTY1MCwgMTExNjU5LCAxMTE2NjQsIDExMTY2OSwgCi0gICAgMTExNjc0LCAxMTE2NzksIDExMTY4OCwgMTExNjk1LCAxMTE3MDIsIDExMTcwOSwgMTExNzE2LCAxMTE3MjMsIDExMTczMCwgCi0gICAgMTExNzM5LCAxMTE3NDgsIDExMTc1OSwgMTExNzY4LCAxMTE3NzksIDExMTc4OCwgMTExNzk1LCAxMTE4MDQsIDExMTgxNSwgCi0gICAgMTExODI0LCAxMTE4MzMsIDExMTg0MiwgMTExODUxLCAxMTE4NTgsIDExMTg2NSwgMTExODcyLCAxMTE4ODEsIDExMTg5MCwgCi0gICAgMTExOTAxLCAxMTE5MTAsIDExMTkxOSwgMTExOTMwLCAxMTE5MzUsIDExMTk0MCwgMTExOTUxLCAxMTE5NTksIDExMTk2OCwgCi0gICAgMTExOTc3LCAxMTE5ODYsIDExMTk5NywgMTEyMDA2LCAxMTIwMTUsIDExMjAyNiwgMTEyMDM3LCAxMTIwNDgsIDExMjA1OSwgCi0gICAgMTEyMDcwLCAxMTIwODEsIDExMjA4OCwgMTEyMDk1LCAxMTIxMDIsIDExMjEwOSwgMTEyMTIwLCAxMTIxMjksIDExMjEzNiwgCi0gICAgMTEyMTQzLCAxMTIxNTAsIDExMjE2MSwgMTEyMTcyLCAxMTIxODMsIDExMjE5NCwgMTEyMjA1LCAxMTIyMTYsIDExMjIyNywgCi0gICAgMTEyMjM4LCAxMTIyNDUsIDExMjI1MiwgMTEyMjYxLCAxMTIyNzAsIDExMjI3NywgMTEyMjg0LCAxMTIyOTEsIDExMjMwMCwgCi0gICAgMTEyMzA5LCAxMTIzMTgsIDExMjMyNSwgMTEyMzM0LCAxMTIzNDMsIDExMjM1MiwgMTEyMzU5LCAxMTIzNjYsIDExMjM3MSwgCi0gICAgMTEyMzc3LCAxMTIzODQsIDExMjM5MSwgMTEyMzk4LCAxMTI0MDUsIDExMjQxMiwgMTEyNDE5LCAxMTI0MjgsIDExMjQzNywgCi0gICAgMTEyNDQ2LCAxMTI0NTUsIDExMjQ2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyNDcxLCAxMTI0NzcsIAotICAgIDExMjQ4MiwgMTEyNDg3LCAxMTI0OTQsIDExMjUwMCwgMTEyNTA2LCAxMTI1MTIsIDExMjUxOCwgMTEyNTI0LCAxMTI1MzAsIAotICAgIDExMjUzNiwgMTEyNTQwLCAxMTI1NDQsIDExMjU1MCwgMTEyNTU2LCAxMTI1NjIsIDExMjU2NiwgMTEyNTcxLCAxMTI1NzYsIAotICAgIDExMjU4MCwgMTEyNTg0LCAxMTI1ODcsIDExMjU5MywgMTEyNTk5LCAxMTI2MDUsIDExMjYxMSwgMTEyNjE3LCAxMTI2MjMsIAotICAgIDExMjYyOSwgMTEyNjM1LCAxMTI2NDEsIDExMjY1MSwgMTEyNjYxLCAxMTI2NjcsIDExMjY3MywgMTEyNjgzLCAxMTI2OTMsIAotICAgIDExMjY5OSwgMCwgMCwgMTEyNzA1LCAxMTI3MTMsIDExMjcxOCwgMTEyNzIzLCAxMTI3MjksIDExMjczNSwgMTEyNzQxLCAKLSAgICAxMTI3NDcsIDExMjc1MywgMTEyNzU5LCAxMTI3NjYsIDExMjc3MywgMTEyNzc5LCAxMTI3ODUsIDExMjc5MSwgMTEyNzk3LCAKLSAgICAxMTI4MDMsIDExMjgwOSwgMTEyODE1LCAxMTI4MjEsIDExMjgyNiwgMTEyODMyLCAxMTI4MzgsIDExMjg0NCwgMTEyODUwLCAKLSAgICAxMTI4NTYsIDExMjg2NSwgMTEyODcxLCAxMTI4NzYsIDExMjg4NCwgMTEyODkxLCAxMTI4OTgsIDExMjkwNywgMTEyOTE2LCAKLSAgICAxMTI5MjUsIDExMjkzNCwgMTEyOTQzLCAxMTI5NTIsIDExMjk2MSwgMTEyOTcwLCAxMTI5ODAsIDExMjk5MCwgMTEyOTk4LCAKLSAgICAxMTMwMDYsIDExMzAxNSwgMTEzMDI0LCAxMTMwMzAsIDExMzAzNiwgMTEzMDQyLCAxMTMwNDgsIDExMzA1NiwgMTEzMDY0LCAKLSAgICAxMTMwNjgsIDExMzA3NCwgMTEzMDc5LCAxMTMwODUsIDExMzA5MSwgMTEzMDk3LCAxMTMxMDMsIDExMzEwOSwgMTEzMTE4LCAKLSAgICAxMTMxMjMsIDExMzEzMCwgMTEzMTM1LCAxMTMxNDAsIDExMzE0NSwgMTEzMTUxLCAxMTMxNTcsIDExMzE2MywgMTEzMTcwLCAKLSAgICAxMTMxNzUsIDExMzE4MCwgMTEzMTg1LCAxMTMxOTAsIDExMzE5NSwgMTEzMjAxLCAxMTMyMDcsIDExMzIxMywgMTEzMjE5LCAKLSAgICAxMTMyMjUsIDExMzIzMSwgMTEzMjM3LCAxMTMyNDMsIDExMzI0OCwgMTEzMjUzLCAxMTMyNTgsIDExMzI2MywgMTEzMjY4LCAKLSAgICAxMTMyNzMsIDExMzI3OCwgMTEzMjgzLCAxMTMyODksIDExMzI5NSwgMTEzMzAwLCAxMTMzMDUsIDExMzMxMCwgMTEzMzE1LCAKLSAgICAxMTMzMjAsIDExMzMyNiwgMTEzMzMzLCAxMTMzMzcsIDExMzM0MSwgMTEzMzQ1LCAxMTMzNDksIDExMzM1MywgMTEzMzU3LCAKLSAgICAxMTMzNjEsIDExMzM2NSwgMTEzMzczLCAxMTMzODMsIDExMzM4NywgMTEzMzkxLCAxMTMzOTcsIDExMzQwMywgMTEzNDA5LCAKLSAgICAxMTM0MTUsIDExMzQyMSwgMTEzNDI3LCAxMTM0MzMsIDExMzQzOSwgMTEzNDQ1LCAxMTM0NTEsIDExMzQ1NywgMTEzNDYzLCAKLSAgICAxMTM0NjksIDExMzQ3NSwgMTEzNDc5LCAxMTM0ODMsIDExMzQ5MCwgMTEzNDk2LCAxMTM1MDIsIDExMzUwOCwgMTEzNTEzLCAKLSAgICAxMTM1MjAsIDExMzUyNSwgMTEzNTMxLCAxMTM1MzcsIDExMzU0MywgMTEzNTQ5LCAxMTM1NTQsIDExMzU1OCwgMTEzNTY0LCAKLSAgICAxMTM1NjgsIDExMzU3MiwgMTEzNTc2LCAxMTM1ODIsIDExMzU4OCwgMTEzNTkyLCAxMTM1OTgsIDExMzYwNCwgMTEzNjEwLCAKLSAgICAxMTM2MTYsIDExMzYyMiwgMTEzNjMwLCAxMTM2MzgsIDExMzY0NCwgMTEzNjUwLCAxMTM2NTYsIDExMzY2MiwgMTEzNjc0LCAKLSAgICAxMTM2ODYsIDExMzcwMCwgMTEzNzEyLCAxMTM3MjQsIDExMzczOCwgMTEzNzUyLCAxMTM3NjYsIDExMzc3MCwgMTEzNzc4LCAKLSAgICAxMTM3ODYsIDExMzc5MSwgMTEzNzk1LCAxMTM3OTksIDExMzgwMywgMTEzODA3LCAxMTM4MTEsIDExMzgxNSwgMTEzODE5LCAKLSAgICAxMTM4MjUsIDExMzgzMSwgMTEzODM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM4NDMsIDExMzg0OSwgCi0gICAgMTEzODU1LCAxMTM4NjEsIDExMzg2NywgMTEzODczLCAxMTM4NzksIDExMzg4NSwgMTEzODkxLCAxMTM4OTcsIDExMzkwMywgCi0gICAgMTEzOTA5LCAxMTM5MTUsIDExMzkyMSwgMTEzOTI3LCAxMTM5MzMsIDExMzkzOSwgMTEzOTQ1LCAxMTM5NTEsIDExMzk1NywgCi0gICAgMTEzOTYzLCAxMTM5NjksIDExMzk3NSwgMTEzOTgxLCAxMTM5ODcsIDExMzk5MywgMTEzOTk5LCAxMTQwMDUsIDExNDAxMSwgCi0gICAgMTE0MDE3LCAxMTQwMjMsIDExNDAyOSwgMTE0MDM1LCAxMTQwNDEsIDExNDA0NywgMTE0MDUzLCAxMTQwNTksIDExNDA2NSwgCi0gICAgMTE0MDcxLCAxMTQwNzcsIDExNDA4MywgMTE0MDg5LCAxMTQwOTUsIDExNDEwMSwgMTE0MTA3LCAxMTQxMTMsIDExNDExOSwgCi0gICAgMTE0MTI1LCAxMTQxMzEsIDExNDEzNywgMTE0MTQzLCAxMTQxNDksIDExNDE1NSwgMTE0MTYxLCAxMTQxNjcsIDExNDE3MywgCi0gICAgMTE0MTc5LCAxMTQxODUsIDExNDE5MSwgMTE0MTk3LCAxMTQyMDMsIDExNDIwOSwgMTE0MjE1LCAxMTQyMjEsIDExNDIyNywgCi0gICAgMTE0MjMzLCAxMTQyMzksIDExNDI0NCwgMTE0MjQ5LCAxMTQyNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNzkyLCA5MTc5OCwgOTE4MDQsIDkxODEwLCA5MTgxNiwgOTE4MjIsIDkxODI5LCAKKyAgICA5MTgzNiwgOTE4NDMsIDkxODQ5LCA5MTg1NSwgOTE4NjEsIDkxODY4LCA5MTg3NSwgOTE4ODIsIDkxODg4LCA5MTg5NSwgCisgICAgOTE5MDIsIDkxOTA5LCA5MTkxNiwgOTE5MjIsIDkxOTI5LCA5MTkzNiwgOTE5NDIsIDkxOTQ5LCA5MTk1NiwgOTE5NjMsIAorICAgIDkxOTcwLCA5MTk3NywgOTE5ODMsIDkxOTkwLCA5MTk5NywgOTIwMDQsIDkyMDEwLCA5MjAxNiwgOTIwMjIsIDkyMDI4LCAKKyAgICA5MjAzNCwgOTIwNDEsIDkyMDQ4LCA5MjA1NCwgOTIwNjAsIDkyMDY2LCA5MjA3MywgOTIwNzksIDkyMDg2LCA5MjA5MywgCisgICAgOTIxMDAsIDkyMTA2LCA5MjExNCwgOTIxMjEsIDkyMTI3LCA5MjEzNCwgOTIxNDEsIDkyMTQ4LCA5MjE1NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOTIxNjEsIDkyMTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTQyNTgsIDExNDI2MywgMTE0MjcwLCAxMTQyNzcsIDExNDI4NCwgMTE0MjkxLCAxMTQyOTYsIDExNDMwMCwgMTE0MzA2LCAKLSAgICAxMTQzMTAsIDExNDMxNCwgMTE0MzIwLCAxMTQzMjQsIDExNDMyOCwgMTE0MzMyLCAxMTQzMzgsIDExNDM0NSwgMTE0MzQ5LCAKLSAgICAxMTQzNTMsIDExNDM1NywgMTE0MzYxLCAxMTQzNjUsIDExNDM2OSwgMTE0Mzc1LCAxMTQzNzksIDExNDM4MywgMTE0Mzg3LCAKLSAgICAxMTQzOTEsIDExNDM5NSwgMTE0Mzk5LCAxMTQ0MDMsIDExNDQwNywgMTE0NDExLCAxMTQ0MTUsIDExNDQxOSwgMTE0NDIzLCAKLSAgICAxMTQ0MjgsIDExNDQzMiwgMTE0NDM2LCAxMTQ0NDAsIDExNDQ0NCwgMTE0NDQ4LCAxMTQ0NTIsIDExNDQ1NiwgMTE0NDYwLCAKLSAgICAxMTQ0NjQsIDExNDQ3MSwgMTE0NDc1LCAxMTQ0ODMsIDExNDQ4NywgMTE0NDkxLCAxMTQ0OTUsIDExNDQ5OSwgMTE0NTAzLCAKLSAgICAxMTQ1MDcsIDExNDUxMSwgMTE0NTE4LCAxMTQ1MjIsIDExNDUyNiwgMTE0NTMwLCAxMTQ1MzQsIDExNDUzOCwgMTE0NTQ0LCAKLSAgICAxMTQ1NDgsIDExNDU1NCwgMTE0NTU4LCAxMTQ1NjIsIDExNDU2NiwgMTE0NTcwLCAxMTQ1NzQsIDExNDU3OCwgMTE0NTgyLCAKLSAgICAxMTQ1ODYsIDExNDU5MCwgMTE0NTk0LCAxMTQ1OTgsIDExNDYwMiwgMTE0NjA2LCAxMTQ2MTAsIDExNDYxNCwgMTE0NjE4LCAKLSAgICAxMTQ2MjIsIDExNDYyNiwgMTE0NjMwLCAxMTQ2MzgsIDExNDY0MiwgMTE0NjQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMTQ2NTAsIDExNDY1OCwgMTE0NjY2LCAxMTQ2NzQsIDExNDY4MiwgMTE0NjkwLCAxMTQ2OTgsIDExNDcwNiwgCi0gICAgMTE0NzE0LCAxMTQ3MjIsIDExNDczMCwgMTE0NzM4LCAxMTQ3NDYsIDExNDc1NCwgMTE0NzYyLCAxMTQ3NzAsIDExNDc3OCwgCi0gICAgMTE0Nzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ3OTQsIDExNDc5OCwgMTE0ODAzLCAKLSAgICAxMTQ4MDgsIDExNDgxMywgMTE0ODE3LCAxMTQ4MjIsIDExNDgyNywgMTE0ODMyLCAxMTQ4MzYsIDExNDg0MSwgMTE0ODQ2LCAKLSAgICAxMTQ4NTAsIDExNDg1NCwgMTE0ODU5LCAxMTQ4NjMsIDExNDg2OCwgMTE0ODczLCAxMTQ4NzcsIDExNDg4MiwgMTE0ODg3LCAKLSAgICAxMTQ4OTEsIDExNDg5NiwgMTE0OTAxLCAxMTQ5MDYsIDExNDkxMSwgMTE0OTE2LCAxMTQ5MjAsIDExNDkyNSwgMTE0OTMwLCAKLSAgICAxMTQ5MzUsIDExNDkzOSwgMTE0OTQ0LCAxMTQ5NDksIDExNDk1NCwgMTE0OTU4LCAxMTQ5NjMsIDExNDk2OCwgMTE0OTcyLCAKLSAgICAxMTQ5NzYsIDExNDk4MSwgMTE0OTg1LCAxMTQ5OTAsIDExNDk5NSwgMTE0OTk5LCAxMTUwMDQsIDExNTAwOSwgMTE1MDEzLCAKLSAgICAxMTUwMTgsIDExNTAyMywgMTE1MDI4LCAxMTUwMzMsIDExNTAzOCwgMTE1MDQyLCAxMTUwNDcsIDExNTA1MiwgMTE1MDU3LCAKLSAgICAxMTUwNjEsIDExNTA2NiwgMTE1MDcxLCAxMTUwNzYsIDExNTA4MCwgMTE1MDg1LCAxMTUwOTAsIDExNTA5NCwgMTE1MDk4LCAKLSAgICAxMTUxMDMsIDExNTEwNywgMTE1MTEyLCAxMTUxMTcsIDExNTEyMSwgMTE1MTI2LCAxMTUxMzEsIDExNTEzNSwgMTE1MTQwLCAKLSAgICAxMTUxNDUsIDExNTE1MCwgMTE1MTU1LCAxMTUxNjAsIDExNTE2NCwgMTE1MTY5LCAxMTUxNzQsIDExNTE3OSwgMTE1MTgzLCAKLSAgICAxMTUxODgsIDAsIDExNTE5MywgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjExLCAxMTUyMTUsIDExNTIyMCwgCi0gICAgMTE1MjI0LCAxMTUyMjksIDExNTIzNCwgMTE1MjM4LCAxMTUyNDMsIDExNTI0OCwgMTE1MjUyLCAxMTUyNTcsIDExNTI2MiwgCi0gICAgMTE1MjY3LCAxMTUyNzIsIDExNTI3NywgMTE1MjgyLCAxMTUyODgsIDExNTI5NCwgMTE1MzAwLCAxMTUzMDUsIDExNTMxMSwgCi0gICAgMTE1MzE3LCAxMTUzMjMsIDExNTMyOCwgMTE1MzM0LCAxMTUzNDAsIDExNTM0NSwgMTE1MzUwLCAxMTUzNTYsIDExNTM2MSwgCi0gICAgMTE1MzY3LCAxMTUzNzMsIDExNTM3OCwgMTE1Mzg0LCAxMTUzOTAsIDExNTM5NSwgMTE1NDAxLCAxMTU0MDcsIDExNTQxMywgCi0gICAgMTE1NDE5LCAxMTU0MjUsIDExNTQzMCwgMTE1NDM2LCAxMTU0NDIsIDExNTQ0OCwgMTE1NDUzLCAxMTU0NTksIDExNTQ2NSwgCi0gICAgMTE1NDcxLCAxMTU0NzYsIDExNTQ4MiwgMTE1NDg4LCAxMTU0OTMsIDExNTQ5OCwgMTE1NTA0LCAxMTU1MDksIDExNTUxNSwgCi0gICAgMTE1NTIxLCAxMTU1MjYsIDExNTUzMiwgMTE1NTM4LCAxMTU1NDMsIDExNTU0OSwgMTE1NTU1LCAxMTU1NjEsIDExNTU2NywgCi0gICAgMTE1NTczLCAwLCAxMTU1NzcsIDExNTU4MiwgMCwgMCwgMTE1NTg3LCAwLCAwLCAxMTU1OTIsIDExNTU5NywgMCwgMCwgCi0gICAgMTE1NjAyLCAxMTU2MDcsIDExNTYxMSwgMTE1NjE2LCAwLCAxMTU2MjEsIDExNTYyNiwgMTE1NjMxLCAxMTU2MzUsIAotICAgIDExNTY0MCwgMTE1NjQ1LCAxMTU2NTAsIDExNTY1NSwgMTE1NjYwLCAxMTU2NjQsIDExNTY2OSwgMTE1Njc0LCAwLCAKLSAgICAxMTU2NzksIDAsIDExNTY4NCwgMTE1Njg5LCAxMTU2OTMsIDExNTY5OCwgMTE1NzAzLCAxMTU3MDcsIDExNTcxMSwgMCwgCi0gICAgMTE1NzE2LCAxMTU3MjEsIDExNTcyNiwgMTE1NzMwLCAxMTU3MzUsIDExNTc0MCwgMTE1NzQ0LCAxMTU3NDksIDExNTc1NCwgCi0gICAgMTE1NzU5LCAxMTU3NjQsIDExNTc2OSwgMTE1Nzc0LCAxMTU3ODAsIDExNTc4NiwgMTE1NzkyLCAxMTU3OTcsIDExNTgwMywgCi0gICAgMTE1ODA5LCAxMTU4MTUsIDExNTgyMCwgMTE1ODI2LCAxMTU4MzIsIDExNTgzNywgMTE1ODQyLCAxMTU4NDgsIDExNTg1MywgCi0gICAgMTE1ODU5LCAxMTU4NjUsIDExNTg3MCwgMTE1ODc2LCAxMTU4ODIsIDExNTg4NywgMTE1ODkzLCAxMTU4OTksIDExNTkwNSwgCi0gICAgMTE1OTExLCAxMTU5MTcsIDExNTkyMiwgMTE1OTI4LCAxMTU5MzQsIDExNTk0MCwgMTE1OTQ1LCAxMTU5NTEsIDExNTk1NywgCi0gICAgMTE1OTYzLCAxMTU5NjgsIDExNTk3NCwgMTE1OTgwLCAxMTU5ODUsIDExNTk5MCwgMTE1OTk2LCAxMTYwMDEsIDExNjAwNywgCi0gICAgMTE2MDEzLCAxMTYwMTgsIDExNjAyNCwgMTE2MDMwLCAxMTYwMzUsIDExNjA0MSwgMTE2MDQ3LCAxMTYwNTMsIDExNjA1OSwgCi0gICAgMTE2MDY1LCAxMTYwNjksIDAsIDExNjA3NCwgMTE2MDc5LCAxMTYwODMsIDExNjA4OCwgMCwgMCwgMTE2MDkzLCAxMTYwOTgsIAotICAgIDExNjEwMywgMTE2MTA3LCAxMTYxMTEsIDExNjExNiwgMTE2MTIwLCAxMTYxMjUsIDAsIDExNjEzMCwgMTE2MTM1LCAKLSAgICAxMTYxNDAsIDExNjE0NCwgMTE2MTQ5LCAxMTYxNTQsIDExNjE1OSwgMCwgMTE2MTY0LCAxMTYxNjgsIDExNjE3MywgCi0gICAgMTE2MTc4LCAxMTYxODMsIDExNjE4NywgMTE2MTkyLCAxMTYxOTcsIDExNjIwMiwgMTE2MjA2LCAxMTYyMTEsIDExNjIxNiwgCi0gICAgMTE2MjIwLCAxMTYyMjQsIDExNjIyOSwgMTE2MjMzLCAxMTYyMzgsIDExNjI0MywgMTE2MjQ3LCAxMTYyNTIsIDExNjI1NywgCi0gICAgMTE2MjYxLCAxMTYyNjYsIDExNjI3MSwgMTE2Mjc2LCAxMTYyODEsIDExNjI4NiwgMTE2MjkwLCAwLCAxMTYyOTUsIAotICAgIDExNjMwMCwgMTE2MzA0LCAxMTYzMDksIDAsIDExNjMxNCwgMTE2MzE4LCAxMTYzMjMsIDExNjMyOCwgMTE2MzMyLCAwLCAKLSAgICAxMTYzMzYsIDAsIDAsIDAsIDExNjM0MCwgMTE2MzQ1LCAxMTYzNTAsIDExNjM1NCwgMTE2MzU5LCAxMTYzNjQsIDExNjM2OSwgCi0gICAgMCwgMTE2Mzc0LCAxMTYzNzgsIDExNjM4MywgMTE2Mzg4LCAxMTYzOTMsIDExNjM5NywgMTE2NDAyLCAxMTY0MDcsIAotICAgIDExNjQxMiwgMTE2NDE2LCAxMTY0MjEsIDExNjQyNiwgMTE2NDMwLCAxMTY0MzQsIDExNjQzOSwgMTE2NDQzLCAxMTY0NDgsIAotICAgIDExNjQ1MywgMTE2NDU3LCAxMTY0NjIsIDExNjQ2NywgMTE2NDcxLCAxMTY0NzYsIDExNjQ4MSwgMTE2NDg2LCAxMTY0OTEsIAotICAgIDExNjQ5NiwgMTE2NTAxLCAxMTY1MDcsIDExNjUxMywgMTE2NTE5LCAxMTY1MjQsIDExNjUzMCwgMTE2NTM2LCAxMTY1NDIsIAotICAgIDExNjU0NywgMTE2NTUzLCAxMTY1NTksIDExNjU2NCwgMTE2NTY5LCAxMTY1NzUsIDExNjU4MCwgMTE2NTg2LCAxMTY1OTIsIAotICAgIDExNjU5NywgMTE2NjAzLCAxMTY2MDksIDExNjYxNCwgMTE2NjIwLCAxMTY2MjYsIDExNjYzMiwgMTE2NjM4LCAxMTY2NDQsIAotICAgIDExNjY0OSwgMTE2NjU1LCAxMTY2NjEsIDExNjY2NywgMTE2NjcyLCAxMTY2NzgsIDExNjY4NCwgMTE2NjkwLCAxMTY2OTUsIAotICAgIDExNjcwMSwgMTE2NzA3LCAxMTY3MTIsIDExNjcxNywgMTE2NzIzLCAxMTY3MjgsIDExNjczNCwgMTE2NzQwLCAxMTY3NDUsIAotICAgIDExNjc1MSwgMTE2NzU3LCAxMTY3NjIsIDExNjc2OCwgMTE2Nzc0LCAxMTY3ODAsIDExNjc4NiwgMTE2NzkyLCAxMTY3OTYsIAotICAgIDExNjgwMSwgMTE2ODA2LCAxMTY4MTEsIDExNjgxNSwgMTE2ODIwLCAxMTY4MjUsIDExNjgzMCwgMTE2ODM0LCAxMTY4MzksIAotICAgIDExNjg0NCwgMTE2ODQ4LCAxMTY4NTIsIDExNjg1NywgMTE2ODYxLCAxMTY4NjYsIDExNjg3MSwgMTE2ODc1LCAxMTY4ODAsIAotICAgIDExNjg4NSwgMTE2ODg5LCAxMTY4OTQsIDExNjg5OSwgMTE2OTA0LCAxMTY5MDksIDExNjkxNCwgMTE2OTE4LCAxMTY5MjMsIAotICAgIDExNjkyOCwgMTE2OTMzLCAxMTY5MzcsIDExNjk0MiwgMTE2OTQ3LCAxMTY5NTIsIDExNjk1NiwgMTE2OTYxLCAxMTY5NjYsIAotICAgIDExNjk3MCwgMTE2OTc0LCAxMTY5NzksIDExNjk4MywgMTE2OTg4LCAxMTY5OTMsIDExNjk5NywgMTE3MDAyLCAxMTcwMDcsIAotICAgIDExNzAxMSwgMTE3MDE2LCAxMTcwMjEsIDExNzAyNiwgMTE3MDMxLCAxMTcwMzYsIDExNzA0MSwgMTE3MDQ3LCAxMTcwNTMsIAotICAgIDExNzA1OSwgMTE3MDY0LCAxMTcwNzAsIDExNzA3NiwgMTE3MDgyLCAxMTcwODcsIDExNzA5MywgMTE3MDk5LCAxMTcxMDQsIAotICAgIDExNzEwOSwgMTE3MTE1LCAxMTcxMjAsIDExNzEyNiwgMTE3MTMyLCAxMTcxMzcsIDExNzE0MywgMTE3MTQ5LCAxMTcxNTQsIAotICAgIDExNzE2MCwgMTE3MTY2LCAxMTcxNzIsIDExNzE3OCwgMTE3MTg0LCAxMTcxODksIDExNzE5NSwgMTE3MjAxLCAxMTcyMDcsIAotICAgIDExNzIxMiwgMTE3MjE4LCAxMTcyMjQsIDExNzIzMCwgMTE3MjM1LCAxMTcyNDEsIDExNzI0NywgMTE3MjUyLCAxMTcyNTcsIAotICAgIDExNzI2MywgMTE3MjY4LCAxMTcyNzQsIDExNzI4MCwgMTE3Mjg1LCAxMTcyOTEsIDExNzI5NywgMTE3MzAyLCAxMTczMDgsIAotICAgIDExNzMxNCwgMTE3MzIwLCAxMTczMjYsIDExNzMzMiwgMTE3MzM3LCAxMTczNDMsIDExNzM0OSwgMTE3MzU1LCAxMTczNjAsIAotICAgIDExNzM2NiwgMTE3MzcyLCAxMTczNzgsIDExNzM4MywgMTE3Mzg5LCAxMTczOTUsIDExNzQwMCwgMTE3NDA1LCAxMTc0MTEsIAotICAgIDExNzQxNiwgMTE3NDIyLCAxMTc0MjgsIDExNzQzMywgMTE3NDM5LCAxMTc0NDUsIDExNzQ1MCwgMTE3NDU2LCAxMTc0NjIsIAotICAgIDExNzQ2OCwgMTE3NDc0LCAxMTc0ODAsIDExNzQ4NSwgMTE3NDkxLCAxMTc0OTcsIDExNzUwMywgMTE3NTA4LCAxMTc1MTQsIAotICAgIDExNzUyMCwgMTE3NTI2LCAxMTc1MzEsIDExNzUzNywgMTE3NTQzLCAxMTc1NDgsIDExNzU1MywgMTE3NTU5LCAxMTc1NjQsIAotICAgIDExNzU3MCwgMTE3NTc2LCAxMTc1ODEsIDExNzU4NywgMTE3NTkzLCAxMTc1OTgsIDExNzYwNCwgMTE3NjEwLCAxMTc2MTYsIAotICAgIDExNzYyMiwgMTE3NjI4LCAxMTc2MzQsIDExNzY0MSwgMTE3NjQ4LCAxMTc2NTUsIDExNzY2MSwgMTE3NjY4LCAxMTc2NzUsIAotICAgIDExNzY4MiwgMTE3Njg4LCAxMTc2OTUsIDExNzcwMiwgMTE3NzA4LCAxMTc3MTQsIDExNzcyMSwgMTE3NzI3LCAxMTc3MzQsIAotICAgIDExNzc0MSwgMTE3NzQ3LCAxMTc3NTQsIDExNzc2MSwgMTE3NzY3LCAxMTc3NzQsIDExNzc4MSwgMTE3Nzg4LCAxMTc3OTUsIAotICAgIDExNzgwMiwgMTE3ODA4LCAxMTc4MTUsIDExNzgyMiwgMTE3ODI5LCAxMTc4MzUsIDExNzg0MiwgMTE3ODQ5LCAxMTc4NTYsIAotICAgIDExNzg2MiwgMTE3ODY5LCAxMTc4NzYsIDExNzg4MiwgMTE3ODg4LCAxMTc4OTUsIDExNzkwMSwgMTE3OTA4LCAxMTc5MTUsIAotICAgIDExNzkyMSwgMTE3OTI4LCAxMTc5MzUsIDExNzk0MSwgMTE3OTQ4LCAxMTc5NTUsIDExNzk2MiwgMTE3OTY5LCAxMTc5NzYsIAotICAgIDExNzk4MSwgMTE3OTg3LCAxMTc5OTMsIDExNzk5OSwgMTE4MDA0LCAxMTgwMTAsIDExODAxNiwgMTE4MDIyLCAxMTgwMjcsIAotICAgIDExODAzMywgMTE4MDM5LCAxMTgwNDQsIDExODA0OSwgMTE4MDU1LCAxMTgwNjAsIDExODA2NiwgMTE4MDcyLCAxMTgwNzcsIAotICAgIDExODA4MywgMTE4MDg5LCAxMTgwOTQsIDExODEwMCwgMTE4MTA2LCAxMTgxMTIsIDExODExOCwgMTE4MTI0LCAxMTgxMjksIAotICAgIDExODEzNSwgMTE4MTQxLCAxMTgxNDcsIDExODE1MiwgMTE4MTU4LCAxMTgxNjQsIDExODE3MCwgMTE4MTc1LCAxMTgxODEsIAotICAgIDExODE4NywgMTE4MTkyLCAxMTgxOTcsIDExODIwMywgMTE4MjA4LCAxMTgyMTQsIDExODIyMCwgMTE4MjI1LCAxMTgyMzEsIAotICAgIDExODIzNywgMTE4MjQyLCAxMTgyNDgsIDExODI1NCwgMTE4MjYwLCAxMTgyNjYsIDExODI3MiwgMTE4Mjc4LCAwLCAwLCAKLSAgICAxMTgyODUsIDExODI5MCwgMTE4Mjk1LCAxMTgzMDAsIDExODMwNSwgMTE4MzEwLCAxMTgzMTUsIDExODMyMCwgMTE4MzI1LCAKLSAgICAxMTgzMzAsIDExODMzNSwgMTE4MzQwLCAxMTgzNDUsIDExODM1MCwgMTE4MzU1LCAxMTgzNjAsIDExODM2NSwgMTE4MzcwLCAKLSAgICAxMTgzNzYsIDExODM4MSwgMTE4Mzg2LCAxMTgzOTEsIDExODM5NiwgMTE4NDAxLCAxMTg0MDYsIDExODQxMSwgMTE4NDE1LCAKLSAgICAxMTg0MjAsIDExODQyNSwgMTE4NDMwLCAxMTg0MzUsIDExODQ0MCwgMTE4NDQ1LCAxMTg0NTAsIDExODQ1NSwgMTE4NDYwLCAKLSAgICAxMTg0NjUsIDExODQ3MCwgMTE4NDc1LCAxMTg0ODAsIDExODQ4NSwgMTE4NDkwLCAxMTg0OTUsIDExODUwMCwgMTE4NTA2LCAKLSAgICAxMTg1MTEsIDExODUxNiwgMTE4NTIxLCAxMTg1MjYsIDExODUzMSwgMTE4NTM2LCAxMTg1NDEsIDExODU0NywgMTE4NTUyLCAKLSAgICAxMTg1NTcsIDExODU2MiwgMTE4NTY3LCAxMTg1NzIsIDExODU3NywgMTE4NTgyLCAxMTg1ODcsIDExODU5MiwgMTE4NTk3LCAKLSAgICAxMTg2MDIsIDExODYwNywgMTE4NjEyLCAxMTg2MTcsIDExODYyMiwgMTE4NjI3LCAxMTg2MzIsIDExODYzNywgMTE4NjQyLCAKLSAgICAxMTg2NDcsIDExODY1MiwgMTE4NjU3LCAxMTg2NjIsIDExODY2OCwgMTE4NjczLCAxMTg2NzgsIDExODY4MywgMTE4Njg4LCAKLSAgICAxMTg2OTMsIDExODY5OCwgMTE4NzAzLCAxMTg3MDcsIDExODcxMiwgMTE4NzE3LCAxMTg3MjIsIDExODcyNywgMTE4NzMyLCAKLSAgICAxMTg3MzcsIDExODc0MiwgMTE4NzQ3LCAxMTg3NTIsIDExODc1NywgMTE4NzYyLCAxMTg3NjcsIDExODc3MiwgMTE4Nzc3LCAKLSAgICAxMTg3ODIsIDExODc4NywgMTE4NzkyLCAxMTg3OTgsIDExODgwMywgMTE4ODA4LCAxMTg4MTMsIDExODgxOCwgMTE4ODIzLCAKLSAgICAxMTg4MjgsIDExODgzMywgMTE4ODM5LCAxMTg4NDQsIDExODg0OSwgMTE4ODU0LCAxMTg4NTksIDExODg2NCwgMTE4ODY5LCAKLSAgICAxMTg4NzUsIDExODg4MSwgMTE4ODg3LCAxMTg4OTMsIDExODg5OSwgMTE4OTA1LCAxMTg5MTEsIDExODkxNywgMTE4OTIzLCAKLSAgICAxMTg5MjksIDExODkzNSwgMTE4OTQxLCAxMTg5NDcsIDExODk1MywgMTE4OTU5LCAxMTg5NjUsIDExODk3MSwgMTE4OTc4LCAKLSAgICAxMTg5ODQsIDExODk5MCwgMTE4OTk2LCAxMTkwMDIsIDExOTAwOCwgMTE5MDE0LCAxMTkwMjAsIDExOTAyNSwgMTE5MDMxLCAKLSAgICAxMTkwMzcsIDExOTA0MywgMTE5MDQ5LCAxMTkwNTUsIDExOTA2MSwgMTE5MDY3LCAxMTkwNzMsIDExOTA3OSwgMTE5MDg1LCAKLSAgICAxMTkwOTEsIDExOTA5NywgMTE5MTAzLCAxMTkxMDksIDExOTExNSwgMTE5MTIxLCAxMTkxMjcsIDExOTEzNCwgMTE5MTQwLCAKLSAgICAxMTkxNDYsIDExOTE1MiwgMTE5MTU4LCAxMTkxNjQsIDExOTE3MCwgMTE5MTc2LCAxMTkxODMsIDExOTE4OSwgMTE5MTk1LCAKLSAgICAxMTkyMDEsIDExOTIwNywgMTE5MjEzLCAxMTkyMTksIDExOTIyNSwgMTE5MjMxLCAxMTkyMzcsIDExOTI0MywgMTE5MjQ5LCAKLSAgICAxMTkyNTUsIDExOTI2MSwgMTE5MjY3LCAxMTkyNzMsIDExOTI3OSwgMTE5Mjg1LCAxMTkyOTEsIDExOTI5NywgMTE5MzAzLCAKLSAgICAxMTkzMDksIDExOTMxNSwgMTE5MzIxLCAxMTkzMjgsIDExOTMzNCwgMTE5MzQwLCAxMTkzNDYsIDExOTM1MiwgMTE5MzU4LCAKLSAgICAxMTkzNjQsIDExOTM3MCwgMTE5Mzc1LCAxMTkzODEsIDExOTM4NywgMTE5MzkzLCAxMTkzOTksIDExOTQwNSwgMTE5NDExLCAKLSAgICAxMTk0MTcsIDExOTQyMywgMTE5NDI5LCAxMTk0MzUsIDExOTQ0MSwgMTE5NDQ3LCAxMTk0NTMsIDExOTQ1OSwgMTE5NDY1LCAKLSAgICAxMTk0NzEsIDExOTQ3NywgMTE5NDg0LCAxMTk0OTAsIDExOTQ5NiwgMTE5NTAyLCAxMTk1MDgsIDExOTUxNCwgMTE5NTIwLCAKLSAgICAxMTk1MjYsIDExOTUzMywgMTE5NTM5LCAxMTk1NDUsIDExOTU1MSwgMTE5NTU3LCAxMTk1NjMsIDExOTU2OSwgMTE5NTc2LCAKLSAgICAxMTk1ODMsIDExOTU5MCwgMTE5NTk3LCAxMTk2MDQsIDExOTYxMSwgMTE5NjE4LCAxMTk2MjUsIDExOTYzMiwgMTE5NjM5LCAKLSAgICAxMTk2NDYsIDExOTY1MywgMTE5NjYwLCAxMTk2NjcsIDExOTY3NCwgMTE5NjgxLCAxMTk2ODgsIDExOTY5NiwgMTE5NzAzLCAKLSAgICAxMTk3MTAsIDExOTcxNywgMTE5NzI0LCAxMTk3MzEsIDExOTczOCwgMTE5NzQ1LCAxMTk3NTEsIDExOTc1OCwgMTE5NzY1LCAKLSAgICAxMTk3NzIsIDExOTc3OSwgMTE5Nzg2LCAxMTk3OTMsIDExOTgwMCwgMTE5ODA3LCAxMTk4MTQsIDExOTgyMSwgMTE5ODI4LCAKLSAgICAxMTk4MzUsIDExOTg0MiwgMTE5ODQ5LCAxMTk4NTYsIDExOTg2MywgMTE5ODcwLCAxMTk4NzgsIDExOTg4NSwgMTE5ODkyLCAKLSAgICAxMTk4OTksIDExOTkwNiwgMTE5OTEzLCAxMTk5MjAsIDExOTkyNywgMTE5OTM1LCAxMTk5NDIsIDExOTk0OSwgMTE5OTU2LCAKLSAgICAxMTk5NjMsIDExOTk3MCwgMTE5OTc3LCAxMTk5ODIsIDAsIDAsIDExOTk4NywgMTE5OTkyLCAxMTk5OTYsIDEyMDAwMCwgCi0gICAgMTIwMDA0LCAxMjAwMDgsIDEyMDAxMiwgMTIwMDE2LCAxMjAwMjAsIDEyMDAyNCwgMTIwMDI4LCAxMjAwMzMsIDEyMDAzNywgCi0gICAgMTIwMDQxLCAxMjAwNDUsIDEyMDA0OSwgMTIwMDUzLCAxMjAwNTcsIDEyMDA2MSwgMTIwMDY1LCAxMjAwNjksIDEyMDA3NCwgCi0gICAgMTIwMDc4LCAxMjAwODIsIDEyMDA4NiwgMTIwMDkwLCAxMjAwOTQsIDEyMDA5OCwgMTIwMTAyLCAxMjAxMDYsIDEyMDExMCwgCi0gICAgMTIwMTE2LCAxMjAxMjEsIDEyMDEyNiwgMTIwMTMxLCAxMjAxMzYsIDEyMDE0MSwgMTIwMTQ2LCAxMjAxNTEsIDEyMDE1NiwgCi0gICAgMTIwMTYxLCAxMjAxNjcsIDEyMDE3MiwgMTIwMTc3LCAxMjAxODIsIDEyMDE4NywgMTIwMTkyLCAxMjAxOTcsIDEyMDIwMiwgCi0gICAgMTIwMjA3LCAxMjAyMTIsIDEyMDIxNiwgMTIwMjIwLCAxMjAyMjQsIDAsIDEyMDIyOCwgMTIwMjMyLCAxMjAyMzYsIAotICAgIDEyMDI0MCwgMTIwMjQ0LCAxMjAyNDgsIDEyMDI1MiwgMTIwMjU2LCAxMjAyNjAsIDEyMDI2NCwgMTIwMjY4LCAxMjAyNzIsIAorICAgIDkyMTc3LCA5MjE4MSwgOTIxODYsIDkyMTkxLCAwLCA5MjE5NywgOTIyMDIsIDAsIDAsIDAsIDAsIDAsIDkyMjA3LCA5MjIxMywgCisgICAgOTIyMjAsIDkyMjI1LCA5MjIzMCwgOTIyMzQsIDkyMjM5LCA5MjI0NCwgMCwgOTIyNDksIDkyMjU0LCA5MjI1OSwgMCwgCisgICAgOTIyNjQsIDkyMjY5LCA5MjI3NCwgOTIyNzksIDkyMjg0LCA5MjI4OSwgOTIyOTQsIDkyMjk5LCA5MjMwNCwgOTIzMDksIAorICAgIDkyMzE0LCA5MjMxOCwgOTIzMjIsIDkyMzI3LCA5MjMzMiwgOTIzMzcsIDkyMzQxLCA5MjM0NSwgOTIzNDksIDkyMzU0LCAKKyAgICA5MjM1OSwgOTIzNjQsIDkyMzY5LCA5MjM3MywgOTIzNzgsIDkyMzgyLCA5MjM4NywgMCwgMCwgMCwgMCwgOTIzOTIsIAorICAgIDkyMzk4LCA5MjQwMywgMCwgMCwgMCwgMCwgOTI0MDgsIDkyNDEyLCA5MjQxNiwgOTI0MjAsIDkyNDI0LCA5MjQyOCwgCisgICAgOTI0MzMsIDkyNDM4LCA5MjQ0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI0NTAsIDkyNDU2LCA5MjQ2MywgOTI0NjksIAorICAgIDkyNDc2LCA5MjQ4MiwgOTI0ODgsIDkyNDk0LCA5MjUwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI1MDcsIDkyNTE1LCAKKyAgICA5MjUyMywgOTI1MzEsIDkyNTM5LCA5MjU0NywgOTI1NTUsIDkyNTYzLCA5MjU3MSwgOTI1NzksIDkyNTg3LCA5MjU5NSwgCisgICAgOTI2MDMsIDkyNjExLCA5MjYxOSwgOTI2MjcsIDkyNjM1LCA5MjY0MywgOTI2NTEsIDkyNjU5LCA5MjY2NywgOTI2NzUsIAorICAgIDkyNjgzLCA5MjY5MSwgOTI2OTksIDkyNzA3LCA5MjcxNSwgOTI3MjMsIDkyNzMxLCA5MjczOSwgOTI3NDYsIDkyNzU0LCAKKyAgICA5Mjc2MiwgOTI3NjYsIDkyNzcxLCA5Mjc3NiwgOTI3ODEsIDkyNzg2LCA5Mjc5MSwgOTI3OTYsIDkyODAxLCA5MjgwNSwgCisgICAgOTI4MTAsIDkyODE0LCA5MjgxOSwgOTI4MjMsIDkyODI4LCA5MjgzMiwgOTI4MzcsIDkyODQyLCA5Mjg0NywgOTI4NTIsIAorICAgIDkyODU3LCA5Mjg2MiwgOTI4NjcsIDkyODcyLCA5Mjg3NywgOTI4ODIsIDkyODg3LCA5Mjg5MiwgOTI4OTcsIDkyOTAyLCAKKyAgICA5MjkwNywgOTI5MTIsIDkyOTE3LCA5MjkyMiwgOTI5MjcsIDkyOTMyLCA5MjkzNywgOTI5NDIsIDkyOTQ3LCA5Mjk1MiwgCisgICAgOTI5NTcsIDkyOTYyLCA5Mjk2NywgOTI5NzIsIDkyOTc3LCA5Mjk4MiwgOTI5ODcsIDkyOTkyLCA5Mjk5NywgOTMwMDIsIAorICAgIDkzMDA3LCA5MzAxMiwgOTMwMTcsIDkzMDIyLCAwLCAwLCAwLCA5MzAyNywgOTMwMzIsIDkzMDQxLCA5MzA0OSwgOTMwNTgsIAorICAgIDkzMDY3LCA5MzA3OCwgOTMwODksIDkzMDk2LCA5MzEwMywgOTMxMTAsIDkzMTE3LCA5MzEyNCwgOTMxMzEsIDkzMTM4LCAKKyAgICA5MzE0NSwgOTMxNTIsIDkzMTU5LCA5MzE2NiwgOTMxNzMsIDkzMTgwLCA5MzE4NywgOTMxOTQsIDkzMjAxLCA5MzIwOCwgCisgICAgOTMyMTUsIDkzMjIyLCA5MzIyOSwgOTMyMzYsIDAsIDAsIDkzMjQzLCA5MzI0OSwgOTMyNTUsIDkzMjYxLCA5MzI2NywgCisgICAgOTMyNzQsIDkzMjgxLCA5MzI4OSwgOTMyOTcsIDkzMzA0LCA5MzMxMSwgOTMzMTgsIDkzMzI1LCA5MzMzMiwgOTMzMzksIAorICAgIDkzMzQ2LCA5MzM1MywgOTMzNjAsIDkzMzY3LCA5MzM3NCwgOTMzODEsIDkzMzg4LCA5MzM5NSwgOTM0MDIsIDkzNDA5LCAKKyAgICA5MzQxNiwgOTM0MjMsIDAsIDAsIDAsIDAsIDAsIDkzNDMwLCA5MzQzNiwgOTM0NDIsIDkzNDQ4LCA5MzQ1NCwgOTM0NjEsIAorICAgIDkzNDY4LCA5MzQ3NiwgOTM0ODQsIDkzNDkwLCA5MzQ5NiwgOTM1MDMsIDkzNTA5LCA5MzUxNSwgOTM1MjEsIDkzNTI3LCAKKyAgICA5MzUzNCwgOTM1NDEsIDkzNTQ4LCA5MzU1NSwgOTM1NjIsIDkzNTY5LCA5MzU3NiwgOTM1ODMsIDkzNTkwLCA5MzU5NywgCisgICAgOTM2MDQsIDkzNjExLCA5MzYxOCwgOTM2MjUsIDkzNjMyLCA5MzYzOSwgOTM2NDYsIDkzNjUzLCA5MzY2MCwgOTM2NjcsIAorICAgIDkzNjc0LCA5MzY4MSwgOTM2ODgsIDkzNjk1LCA5MzcwMiwgOTM3MDksIDkzNzE2LCA5MzcyMywgOTM3MzAsIDkzNzM3LCAKKyAgICA5Mzc0NCwgOTM3NTEsIDkzNzU4LCA5Mzc2NSwgOTM3NzIsIDkzNzc5LCA5Mzc4NiwgOTM3OTMsIDkzODAwLCA5MzgwNywgCisgICAgOTM4MTQsIDkzODIxLCA5MzgyOCwgOTM4MzUsIDkzODQyLCA5Mzg0OSwgOTM4NTYsIDkzODYzLCA5Mzg3MCwgOTM4NzcsIAorICAgIDkzODg0LCA5Mzg5MSwgOTM4OTgsIDkzOTA1LCA5MzkxMiwgOTM5MTksIDkzOTI2LCA5MzkzMywgOTM5NDAsIDkzOTQ3LCAKKyAgICA5Mzk1NCwgOTM5NjEsIDkzOTY4LCA5Mzk3NSwgOTM5ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzOTg5LCA5Mzk5MywgCisgICAgOTM5OTcsIDk0MDAxLCA5NDAwNSwgOTQwMDksIDk0MDEzLCA5NDAxNywgOTQwMjEsIDk0MDI1LCA5NDAzMCwgOTQwMzUsIAorICAgIDk0MDQwLCA5NDA0NSwgOTQwNTAsIDk0MDU1LCA5NDA2MCwgOTQwNjUsIDk0MDcwLCA5NDA3NiwgOTQwODIsIDk0MDg4LCAKKyAgICA5NDA5NSwgOTQxMDIsIDk0MTA5LCA5NDExNiwgOTQxMjMsIDk0MTMwLCA5NDEzNywgOTQxNDQsIDk0MTUxLCAwLCA5NDE1OCwgCisgICAgOTQxNjIsIDk0MTY2LCA5NDE3MCwgOTQxNzQsIDk0MTc4LCA5NDE4MSwgOTQxODUsIDk0MTg4LCA5NDE5MiwgOTQxOTUsIAorICAgIDk0MTk5LCA5NDIwMywgOTQyMDgsIDk0MjEyLCA5NDIxNywgOTQyMjAsIDk0MjI0LCA5NDIyNywgOTQyMzEsIDk0MjM0LCAKKyAgICA5NDIzOCwgOTQyNDIsIDk0MjQ2LCA5NDI1MCwgOTQyNTQsIDk0MjU4LCA5NDI2MiwgOTQyNjYsIDk0MjcwLCA5NDI3NCwgCisgICAgOTQyNzgsIDk0MjgyLCA5NDI4NiwgOTQyOTAsIDk0Mjk0LCA5NDI5OCwgOTQzMDIsIDk0MzA2LCA5NDMwOSwgOTQzMTIsIAorICAgIDk0MzE2LCA5NDMyMCwgOTQzMjQsIDk0MzI3LCA5NDMzMCwgOTQzMzMsIDk0MzM3LCA5NDM0MSwgOTQzNDUsIDk0MzQ5LCAKKyAgICA5NDM1MiwgOTQzNTUsIDk0MzU5LCA5NDM2NSwgOTQzNzEsIDk0Mzc3LCA5NDM4MiwgOTQzODksIDk0MzkzLCA5NDM5OCwgCisgICAgOTQ0MDIsIDk0NDA3LCA5NDQxMiwgOTQ0MTgsIDk0NDIzLCA5NDQyOSwgOTQ0MzMsIDk0NDM4LCA5NDQ0MiwgOTQ0NDcsIAorICAgIDk0NDUwLCA5NDQ1MywgOTQ0NTcsIDk0NDYyLCA5NDQ2OCwgOTQ0NzMsIDk0NDc5LCAwLCAwLCAwLCAwLCA5NDQ4NCwgCisgICAgOTQ0ODcsIDk0NDkwLCA5NDQ5MywgOTQ0OTYsIDk0NDk5LCA5NDUwMiwgOTQ1MDUsIDk0NTA4LCA5NDUxMSwgOTQ1MTUsIAorICAgIDk0NTE5LCA5NDUyMywgOTQ1MjcsIDk0NTMxLCA5NDUzNSwgOTQ1MzksIDk0NTQzLCA5NDU0NywgOTQ1NTIsIDk0NTU3LCAKKyAgICA5NDU2MSwgOTQ1NjQsIDk0NTY3LCA5NDU3MCwgOTQ1NzMsIDk0NTc2LCA5NDU3OSwgOTQ1ODIsIDk0NTg1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDU4OCwgOTQ1OTMsIDk0NTk4LCA5NDYwMywgOTQ2MDcsIAorICAgIDk0NjEyLCA5NDYxNiwgOTQ2MjEsIDk0NjI1LCA5NDYzMCwgOTQ2MzQsIDk0NjM5LCA5NDY0MywgOTQ2NDgsIDk0NjUyLCAKKyAgICA5NDY1NywgOTQ2NjIsIDk0NjY3LCA5NDY3MiwgOTQ2NzcsIDk0NjgyLCA5NDY4NywgOTQ2OTIsIDk0Njk3LCA5NDcwMiwgCisgICAgOTQ3MDcsIDk0NzEyLCA5NDcxNywgOTQ3MjIsIDk0NzI3LCA5NDczMiwgOTQ3MzcsIDk0NzQyLCA5NDc0NywgOTQ3NTIsIAorICAgIDk0NzU2LCA5NDc2MCwgOTQ3NjUsIDk0NzcwLCA5NDc3NSwgOTQ3NzksIDk0NzgzLCA5NDc4NywgOTQ3OTIsIDk0Nzk3LCAKKyAgICA5NDgwMiwgOTQ4MDcsIDk0ODExLCA5NDgxNSwgOTQ4MjEsIDk0ODI2LCA5NDgzMiwgOTQ4MzcsIDk0ODQzLCA5NDg0OCwgCisgICAgOTQ4NTQsIDk0ODU5LCA5NDg2NSwgOTQ4NzAsIDk0ODc1LCA5NDg4MCwgOTQ4ODUsIDk0ODg5LCA5NDg5NCwgOTQ5MDAsIAorICAgIDk0OTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDkwOSwgOTQ5MTYsIDk0OTIzLCAKKyAgICA5NDkzMCwgOTQ5MzcsIDk0OTQ0LCA5NDk1MSwgOTQ5NTgsIDk0OTY1LCA5NDk3MiwgOTQ5NzksIDk0OTg2LCA5NDk5MywgCisgICAgOTUwMDAsIDk1MDA3LCA5NTAxNCwgOTUwMjEsIDk1MDI4LCA5NTAzNSwgOTUwNDIsIDk1MDQ5LCA5NTA1NiwgOTUwNjMsIAorICAgIDk1MDcwLCA5NTA3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTUwODQsIDk1MDkxLCA5NTA5NywgOTUxMDMsIDk1MTA5LCAKKyAgICA5NTExNSwgOTUxMjEsIDk1MTI3LCA5NTEzMywgOTUxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDk1MTQ1LCA5NTE1MCwgOTUxNTUsIAorICAgIDk1MTYwLCA5NTE2NSwgOTUxNjksIDk1MTczLCA5NTE3NywgOTUxODIsIDk1MTg3LCA5NTE5MiwgOTUxOTcsIDk1MjAyLCAKKyAgICA5NTIwNywgOTUyMTIsIDk1MjE3LCA5NTIyMiwgOTUyMjcsIDk1MjMyLCA5NTIzNywgOTUyNDIsIDk1MjQ3LCA5NTI1MiwgCisgICAgOTUyNTcsIDk1MjYyLCA5NTI2NywgOTUyNzIsIDk1Mjc3LCA5NTI4MiwgOTUyODcsIDk1MjkyLCA5NTI5NywgOTUzMDIsIAorICAgIDk1MzA3LCA5NTMxMiwgOTUzMTcsIDk1MzIyLCA5NTMyNywgOTUzMzIsIDk1MzM3LCA5NTM0MiwgOTUzNDcsIDk1MzUzLCAKKyAgICA5NTM1OCwgOTUzNjQsIDk1MzY5LCA5NTM3NSwgOTUzODAsIDk1Mzg2LCA5NTM5MiwgOTUzOTYsIDk1NDAxLCA5NTQwNSwgMCwgCisgICAgOTU0MDksIDk1NDE0LCA5NTQxOCwgOTU0MjIsIDk1NDI2LCA5NTQzMCwgOTU0MzQsIDk1NDM4LCA5NTQ0MiwgOTU0NDYsIAorICAgIDk1NDUwLCA5NTQ1NSwgOTU0NTksIDk1NDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTQ2OSwgCisgICAgOTU0NzMsIDk1NDc3LCA5NTQ4MSwgOTU0ODQsIDk1NDg4LCA5NTQ5MSwgOTU0OTUsIDk1NDk4LCA5NTUwMiwgOTU1MDYsIAorICAgIDk1NTExLCA5NTUxNSwgOTU1MjAsIDk1NTIzLCA5NTUyNywgOTU1MzAsIDk1NTM0LCA5NTUzNywgOTU1NDEsIDk1NTQ1LCAKKyAgICA5NTU0OSwgOTU1NTMsIDk1NTU3LCA5NTU2MSwgOTU1NjUsIDk1NTY5LCA5NTU3MywgOTU1NzcsIDk1NTgxLCA5NTU4NSwgCisgICAgOTU1ODksIDk1NTkzLCA5NTU5NywgOTU2MDEsIDk1NjA1LCA5NTYwOSwgOTU2MTIsIDk1NjE1LCA5NTYxOSwgOTU2MjMsIAorICAgIDk1NjI3LCA5NTYzMCwgOTU2MzMsIDk1NjM2LCA5NTY0MCwgOTU2NDQsIDk1NjQ4LCA5NTY1MiwgOTU2NTYsIDk1NjU5LCAKKyAgICA5NTY2MiwgOTU2NjcsIDk1NjcxLCA5NTY3NiwgOTU2ODAsIDk1Njg1LCA5NTY5MCwgOTU2OTYsIDk1NzAxLCA5NTcwNywgCisgICAgOTU3MTEsIDk1NzE2LCA5NTcyMCwgOTU3MjUsIDk1NzI5LCA5NTczMywgOTU3MzcsIDk1NzQxLCA5NTc0NCwgOTU3NDcsIAorICAgIDk1NzUxLCA5NTc1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NTgsIDk1NzYyLCA5NTc2NSwgOTU3NjgsIDk1NzcxLCAKKyAgICA5NTc3NCwgOTU3NzcsIDk1NzgwLCA5NTc4MywgOTU3ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDk1Nzg5LCA5NTc5MywgOTU3OTgsIDk1ODAyLCA5NTgwNywgOTU4MTEsIDk1ODE2LCA5NTgyMCwgOTU4MjUsIDk1ODI5LCAKKyAgICA5NTgzNCwgOTU4MzgsIDk1ODQzLCA5NTg0OCwgOTU4NTMsIDk1ODU4LCA5NTg2MywgOTU4NjgsIDk1ODczLCA5NTg3OCwgCisgICAgOTU4ODMsIDk1ODg4LCA5NTg5MywgOTU4OTgsIDk1OTAzLCA5NTkwOCwgOTU5MTMsIDk1OTE4LCA5NTkyMywgOTU5MjgsIAorICAgIDk1OTMyLCA5NTkzNiwgOTU5NDEsIDk1OTQ2LCA5NTk1MSwgOTU5NTUsIDk1OTU5LCA5NTk2MywgOTU5NjgsIDk1OTczLCAKKyAgICA5NTk3OCwgOTU5ODIsIDk1OTg2LCA5NTk5MSwgOTU5OTYsIDk2MDAxLCA5NjAwNywgOTYwMTIsIDk2MDE4LCA5NjAyMywgCisgICAgOTYwMjksIDk2MDM0LCA5NjA0MCwgOTYwNDUsIDk2MDUxLCA5NjA1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwNjEsIAorICAgIDk2MDY2LCA5NjA3MCwgOTYwNzQsIDk2MDc4LCA5NjA4MiwgOTYwODYsIDk2MDkwLCA5NjA5NCwgOTYwOTgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDk2MTAyLCA5NjEwNSwgOTYxMTAsIDk2MTE2LCA5NjEyNCwgOTYxMjksIDk2MTM1LCA5NjE0MywgOTYxNDksIAorICAgIDk2MTU1LCA5NjE1OSwgOTYxNjMsIDk2MTcwLCA5NjE3OSwgOTYxODYsIDk2MTk1LCA5NjIwMSwgOTYyMTAsIDk2MjE3LCAKKyAgICA5NjIyNCwgOTYyMzEsIDk2MjQxLCA5NjI0NywgOTYyNTEsIDk2MjU4LCA5NjI2NywgOTYyNzcsIDk2Mjg0LCA5NjI5MSwgCisgICAgOTYyOTUsIDk2Mjk5LCA5NjMwNiwgOTYzMTYsIDk2MzIwLCA5NjMyNywgOTYzMzQsIDk2MzQxLCA5NjM0NywgOTYzNTQsIAorICAgIDk2MzYxLCA5NjM2OCwgOTYzNzUsIDk2Mzc5LCA5NjM4MywgOTYzODcsIDk2Mzk0LCA5NjM5OCwgOTY0MDUsIDk2NDEyLCAKKyAgICA5NjQyNiwgOTY0MzUsIDk2NDM5LCA5NjQ0MywgOTY0NDcsIDk2NDU0LCA5NjQ1OCwgOTY0NjIsIDk2NDY2LCA5NjQ3NCwgCisgICAgOTY0ODIsIDk2NTAxLCA5NjUxMSwgOTY1MzEsIDk2NTM1LCA5NjUzOSwgOTY1NDMsIDk2NTQ3LCA5NjU1MSwgOTY1NTUsIAorICAgIDk2NTU5LCA5NjU2NiwgOTY1NzAsIDk2NTczLCA5NjU3NywgOTY1ODEsIDk2NTg3LCA5NjU5NCwgOTY2MDMsIDk2NjA3LCAKKyAgICA5NjYxNiwgOTY2MjUsIDk2NjMzLCA5NjYzNywgOTY2NDQsIDk2NjQ4LCA5NjY1MiwgOTY2NTYsIDk2NjYwLCA5NjY3MSwgCisgICAgOTY2ODAsIDk2Njg5LCA5NjY5OCwgOTY3MDcsIDk2NzE5LCA5NjcyOCwgOTY3MzcsIDk2NzQ2LCA5Njc1NCwgOTY3NjMsIAorICAgIDk2Nzc1LCA5Njc4NCwgOTY3OTMsIDk2ODAyLCA5NjgxNCwgOTY4MjMsIDk2ODMyLCA5Njg0NCwgOTY4NTMsIDk2ODYyLCAKKyAgICA5Njg3NCwgOTY4ODMsIDk2ODg3LCA5Njg5MSwgOTY4OTUsIDk2ODk5LCA5NjkwMywgOTY5MDcsIDk2OTExLCA5NjkxOCwgCisgICAgOTY5MjIsIDk2OTI2LCA5NjkzNywgOTY5NDEsIDk2OTQ1LCA5Njk1MiwgOTY5NTgsIDk2OTY0LCA5Njk2OCwgOTY5NzUsIAorICAgIDk2OTc5LCA5Njk4MywgOTY5ODcsIDk2OTkxLCA5Njk5NSwgOTY5OTksIDk3MDA1LCA5NzAxMywgOTcwMTcsIDk3MDIxLCAKKyAgICA5NzAyNCwgOTcwMzAsIDk3MDQwLCA5NzA0NCwgOTcwNTYsIDk3MDYzLCA5NzA3MCwgOTcwNzcsIDk3MDg0LCA5NzA5MCwgCisgICAgOTcwOTQsIDk3MDk4LCA5NzEwMiwgOTcxMDYsIDk3MTEzLCA5NzEyMiwgOTcxMjksIDk3MTM3LCA5NzE0NSwgOTcxNTEsIAorICAgIDk3MTU1LCA5NzE1OSwgOTcxNjMsIDk3MTY3LCA5NzE3MywgOTcxODIsIDk3MTk0LCA5NzIwMSwgOTcyMDgsIDk3MjE3LCAKKyAgICA5NzIyOCwgOTcyMzQsIDk3MjQzLCA5NzI1MiwgOTcyNTksIDk3MjY4LCA5NzI3NSwgOTcyODIsIDk3MjkyLCA5NzI5OSwgCisgICAgOTczMDYsIDk3MzEzLCA5NzMyMCwgOTczMjQsIDk3MzMwLCA5NzMzNCwgOTczNDUsIDk3MzUzLCA5NzM2MiwgOTczNzQsIAorICAgIDk3MzgxLCA5NzM4OCwgOTczOTgsIDk3NDA1LCA5NzQxNCwgOTc0MjEsIDk3NDMwLCA5NzQzNywgOTc0NDQsIDk3NDU0LCAKKyAgICA5NzQ2MSwgOTc0NjgsIDk3NDc4LCA5NzQ4NSwgOTc0OTcsIDk3NTA2LCA5NzUxMywgOTc1MjAsIDk3NTI3LCA5NzUzNiwgCisgICAgOTc1NDYsIDk3NTU5LCA5NzU2NiwgOTc1NzYsIDk3NTg2LCA5NzU5MywgOTc2MDIsIDk3NjE1LCA5NzYyMiwgOTc2MjksIAorICAgIDk3NjM2LCA5NzY0NiwgOTc2NTYsIDk3NjYzLCA5NzY3MywgOTc2ODAsIDk3Njg3LCA5NzY5NywgOTc3MDMsIDk3NzEwLCAKKyAgICA5NzcxNywgOTc3MjQsIDk3NzM0LCA5Nzc0MSwgOTc3NDgsIDk3NzU1LCA5Nzc2MSwgOTc3NjgsIDk3Nzc4LCA5Nzc4NSwgCisgICAgOTc3ODksIDk3Nzk3LCA5NzgwMSwgOTc4MTMsIDk3ODE3LCA5NzgzMSwgOTc4MzUsIDk3ODM5LCA5Nzg0MywgOTc4NDcsIAorICAgIDk3ODUzLCA5Nzg2MCwgOTc4NjgsIDk3ODcyLCA5Nzg3NiwgOTc4ODAsIDk3ODg0LCA5Nzg5MSwgOTc4OTUsIDk3OTAxLCAKKyAgICA5NzkwNywgOTc5MTUsIDk3OTE5LCA5NzkyNiwgOTc5MzQsIDk3OTM4LCA5Nzk0MiwgOTc5NDgsIDk3OTUyLCA5Nzk2MSwgCisgICAgOTc5NzAsIDk3OTc3LCA5Nzk4NywgOTc5OTMsIDk3OTk3LCA5ODAwMSwgOTgwMDksIDk4MDE2LCA5ODAyMywgOTgwMjksIAorICAgIDk4MDMzLCA5ODA0MSwgOTgwNDUsIDk4MDUyLCA5ODA2NCwgOTgwNzEsIDk4MDgxLCA5ODA4NywgOTgwOTEsIDk4MTAwLCAKKyAgICA5ODEwNywgOTgxMTYsIDk4MTIwLCA5ODEyNCwgOTgxMzEsIDk4MTM1LCA5ODEzOSwgOTgxNDMsIDk4MTQ3LCA5ODE1MCwgCisgICAgOTgxNTYsIDk4MTYyLCA5ODE2NiwgOTgxNzAsIDk4MTc3LCA5ODE4NCwgOTgxOTEsIDk4MTk4LCA5ODIwNSwgOTgyMTIsIAorICAgIDk4MjE5LCA5ODIyNiwgOTgyMzIsIDk4MjM2LCA5ODI0MCwgOTgyNDcsIDk4MjU0LCA5ODI2MSwgOTgyNjgsIDk4Mjc1LCAKKyAgICA5ODI3OSwgOTgyODIsIDk4Mjg3LCA5ODI5MSwgOTgyOTUsIDk4MzA0LCA5ODMxMywgOTgzMTcsIDk4MzIxLCA5ODMyNywgCisgICAgOTgzMzMsIDk4MzUwLCA5ODM1NiwgOTgzNjAsIDk4MzY5LCA5ODM3MywgOTgzNzcsIDk4Mzg0LCA5ODM5MiwgOTg0MDAsIAorICAgIDk4NDA2LCA5ODQxMCwgOTg0MTQsIDk4NDE4LCA5ODQyMiwgOTg0MjUsIDk4NDMxLCA5ODQzOCwgOTg0NDgsIDk4NDU1LCAKKyAgICA5ODQ2MiwgOTg0NjksIDk4NDc1LCA5ODQ4MiwgOTg0ODksIDk4NDk2LCA5ODUwMywgOTg1MTAsIDk4NTE5LCA5ODUyNiwgCisgICAgOTg1MzgsIDk4NTQ1LCA5ODU1MiwgOTg1NjIsIDk4NTczLCA5ODU4MCwgOTg1ODcsIDk4NTk0LCA5ODYwMSwgOTg2MDgsIAorICAgIDk4NjE1LCA5ODYyMiwgOTg2MjksIDk4NjM2LCA5ODY0MywgOTg2NTMsIDk4NjYzLCA5ODY3MywgOTg2ODAsIDk4NjkwLCAKKyAgICA5ODY5NywgOTg3MDQsIDk4NzExLCA5ODcxOCwgOTg3MjQsIDk4NzMxLCA5ODczOCwgOTg3NDUsIDk4NzUyLCA5ODc1OSwgCisgICAgOTg3NjYsIDk4NzczLCA5ODc4MCwgOTg3ODYsIDk4NzkzLCA5ODgwMCwgOTg4MDksIDk4ODE2LCA5ODgyMywgOTg4MjcsIAorICAgIDk4ODM1LCA5ODgzOSwgOTg4NDMsIDk4ODQ3LCA5ODg1MSwgOTg4NTUsIDk4ODYyLCA5ODg2NiwgOTg4NzUsIDk4ODc5LCAKKyAgICA5ODg4NiwgOTg4OTQsIDk4ODk4LCA5ODkwMiwgOTg5MDYsIDk4OTE5LCA5ODkzNSwgOTg5MzksIDk4OTQzLCA5ODk1MCwgCisgICAgOTg5NTYsIDk4OTYzLCA5ODk2NywgOTg5NzEsIDk4OTc1LCA5ODk3OSwgOTg5ODMsIDk4OTkwLCA5ODk5NCwgOTkwMTIsIAorICAgIDk5MDE2LCA5OTAyMCwgOTkwMjcsIDk5MDMxLCA5OTAzNSwgOTkwNDEsIDk5MDQ1LCA5OTA0OSwgOTkwNTcsIDk5MDYxLCAKKyAgICA5OTA2NSwgOTkwNjksIDk5MDczLCA5OTA3OSwgOTkwOTAsIDk5MDk5LCA5OTEwOCwgOTkxMTUsIDk5MTIyLCA5OTEzMywgCisgICAgOTkxNDAsIDk5MTQ3LCA5OTE1NCwgOTkxNjEsIDk5MTY4LCA5OTE3NSwgOTkxODIsIDk5MTkyLCA5OTE5OCwgOTkyMDUsIAorICAgIDk5MjE1LCA5OTIyNCwgOTkyMzEsIDk5MjQwLCA5OTI1MCwgOTkyNTcsIDk5MjY0LCA5OTI3MSwgOTkyNzgsIDk5MjkwLCAKKyAgICA5OTI5NywgOTkzMDQsIDk5MzExLCA5OTMxOCwgOTkzMjUsIDk5MzM1LCA5OTM0MiwgOTkzNDksIDk5MzU5LCA5OTM3MiwgCisgICAgOTkzODQsIDk5MzkxLCA5OTQwMSwgOTk0MDgsIDk5NDE1LCA5OTQyMiwgOTk0MzYsIDk5NDQyLCA5OTQ1MCwgOTk0NjAsIAorICAgIDk5NDcwLCA5OTQ3NywgOTk0ODQsIDk5NDkwLCA5OTQ5NCwgOTk1MDEsIDk5NTExLCA5OTUxNywgOTk1MzAsIDk5NTM0LCAKKyAgICA5OTUzOCwgOTk1NDUsIDk5NTQ5LCA5OTU1NiwgOTk1NjYsIDk5NTcwLCA5OTU3NCwgOTk1NzgsIDk5NTgyLCA5OTU4NiwgCisgICAgOTk1OTMsIDk5NTk3LCA5OTYwNCwgOTk2MTEsIDk5NjE4LCA5OTYyNywgOTk2MzYsIDk5NjQ2LCA5OTY1MywgOTk2NjAsIAorICAgIDk5NjY3LCA5OTY3NywgOTk2ODQsIDk5Njk0LCA5OTcwMSwgOTk3MTEsIDk5NzE4LCA5OTcyNSwgOTk3MzUsIDk5NzQ1LCAKKyAgICA5OTc1MiwgOTk3NTgsIDk5NzY2LCA5OTc3NCwgOTk3ODAsIDk5Nzg2LCA5OTc5MCwgOTk3OTQsIDk5ODAxLCA5OTgwOSwgCisgICAgOTk4MTUsIDk5ODE5LCA5OTgyMywgOTk4MjcsIDk5ODM0LCA5OTg0NiwgOTk4NDksIDk5ODU2LCA5OTg2MiwgOTk4NjYsIAorICAgIDk5ODcwLCA5OTg3NCwgOTk4NzgsIDk5ODgyLCA5OTg4NiwgOTk4OTAsIDk5ODk0LCA5OTg5OCwgOTk5MDIsIDk5OTA5LCAKKyAgICA5OTkxMywgOTk5MTksIDk5OTIzLCA5OTkyNywgOTk5MzEsIDk5OTM3LCA5OTk0NCwgOTk5NTEsIDk5OTU4LCA5OTk2OSwgCisgICAgOTk5NzcsIDk5OTgxLCA5OTk4NywgOTk5OTYsIDEwMDAwMywgMTAwMDA5LCAxMDAwMTIsIDEwMDAxNiwgMTAwMDIwLCAKKyAgICAxMDAwMjYsIDEwMDAzNSwgMTAwMDQzLCAxMDAwNDcsIDEwMDA1MywgMTAwMDU3LCAxMDAwNjEsIDEwMDA2NSwgMTAwMDcxLCAKKyAgICAxMDAwNzgsIDEwMDA4NCwgMTAwMDg4LCAxMDAwOTQsIDEwMDA5OCwgMTAwMTAyLCAxMDAxMTEsIDEwMDEyMywgMTAwMTI3LCAKKyAgICAxMDAxMzQsIDEwMDE0MSwgMTAwMTUxLCAxMDAxNTgsIDEwMDE3MCwgMTAwMTc3LCAxMDAxODQsIDEwMDE5MSwgMTAwMjAyLCAKKyAgICAxMDAyMTIsIDEwMDIyNSwgMTAwMjM1LCAxMDAyNDIsIDEwMDI0NiwgMTAwMjUwLCAxMDAyNTQsIDEwMDI1OCwgMTAwMjY3LCAKKyAgICAxMDAyNzYsIDEwMDI4NSwgMTAwMzAyLCAxMDAzMTEsIDEwMDMxNywgMTAwMzI0LCAxMDAzMzIsIDEwMDM0NSwgMTAwMzQ5LCAKKyAgICAxMDAzNTgsIDEwMDM2NywgMTAwMzc2LCAxMDAzODUsIDEwMDM5NiwgMTAwNDA1LCAxMDA0MTQsIDEwMDQyMywgMTAwNDMyLCAKKyAgICAxMDA0NDEsIDEwMDQ1MCwgMTAwNDYwLCAxMDA0NjMsIDEwMDQ2NywgMTAwNDcxLCAxMDA0NzUsIDEwMDQ3OSwgMTAwNDgzLCAKKyAgICAxMDA0ODksIDEwMDQ5NiwgMTAwNTAzLCAxMDA1MTAsIDEwMDUxNiwgMTAwNTIyLCAxMDA1MjksIDEwMDUzNSwgMTAwNTQyLCAKKyAgICAxMDA1NTAsIDEwMDU1NCwgMTAwNTYxLCAxMDA1NjgsIDEwMDU3NSwgMTAwNTgzLCAxMDA1ODYsIDEwMDU5MCwgMTAwNTk0LCAKKyAgICAxMDA1OTgsIDEwMDYwMSwgMTAwNjA3LCAxMDA2MTEsIDEwMDYxNywgMTAwNjI0LCAxMDA2MzEsIDEwMDYzNywgMTAwNjQ0LCAKKyAgICAxMDA2NTEsIDEwMDY1OCwgMTAwNjY1LCAxMDA2NzIsIDEwMDY3OSwgMTAwNjg2LCAxMDA2OTMsIDEwMDcwMCwgMTAwNzA3LCAKKyAgICAxMDA3MTQsIDEwMDcyMSwgMTAwNzI4LCAxMDA3MzUsIDEwMDc0MSwgMTAwNzQ1LCAxMDA3NTQsIDEwMDc1OCwgMTAwNzYyLCAKKyAgICAxMDA3NjYsIDEwMDc3MCwgMTAwNzc2LCAxMDA3ODMsIDEwMDc5MCwgMTAwNzk3LCAxMDA4MDQsIDEwMDgxMSwgMTAwODE3LCAKKyAgICAxMDA4MjUsIDEwMDgyOSwgMTAwODMzLCAxMDA4MzcsIDEwMDg0MSwgMTAwODQ3LCAxMDA4NjQsIDEwMDg4MSwgMTAwODg1LCAKKyAgICAxMDA4ODksIDEwMDg5MywgMTAwODk3LCAxMDA5MDEsIDEwMDkwNSwgMTAwOTExLCAxMDA5MTgsIDEwMDkyMiwgMTAwOTI4LCAKKyAgICAxMDA5MzUsIDEwMDk0MiwgMTAwOTQ5LCAxMDA5NTYsIDEwMDk2MywgMTAwOTcyLCAxMDA5NzksIDEwMDk4NiwgMTAwOTkzLCAKKyAgICAxMDEwMDAsIDEwMTAwNCwgMTAxMDA4LCAxMDEwMTQsIDEwMTAyNiwgMTAxMDMwLCAxMDEwMzQsIDEwMTA0MywgMTAxMDQ3LCAKKyAgICAxMDEwNTEsIDEwMTA1NSwgMTAxMDYxLCAxMDEwNjUsIDEwMTA2OSwgMTAxMDc4LCAxMDEwODIsIDEwMTA4NiwgMTAxMDkwLCAKKyAgICAxMDEwOTcsIDEwMTEwMSwgMTAxMTA1LCAxMDExMDksIDEwMTExMywgMTAxMTE3LCAxMDExMjEsIDEwMTEyNSwgMTAxMTI5LCAKKyAgICAxMDExMzUsIDEwMTE0MiwgMTAxMTQ5LCAxMDExNTUsIDEwMTE1OSwgMTAxMTc2LCAxMDExODIsIDEwMTE4NiwgMTAxMTkyLCAKKyAgICAxMDExOTgsIDEwMTIwNCwgMTAxMjEwLCAxMDEyMTYsIDEwMTIyMiwgMTAxMjI2LCAxMDEyMzAsIDEwMTIzNCwgMTAxMjQwLCAKKyAgICAxMDEyNDQsIDEwMTI1MCwgMTAxMjU0LCAxMDEyNTgsIDEwMTI2NSwgMTAxMjcyLCAxMDEyODksIDEwMTI5MywgMTAxMjk3LCAKKyAgICAxMDEzMDEsIDEwMTMwNSwgMTAxMzA5LCAxMDEzMjEsIDEwMTMyNCwgMTAxMzI5LCAxMDEzMzQsIDEwMTM0OSwgMTAxMzU5LCAKKyAgICAxMDEzNzEsIDEwMTM3NSwgMTAxMzc5LCAxMDEzODMsIDEwMTM4OSwgMTAxMzk2LCAxMDE0MDMsIDEwMTQxMywgMTAxNDI1LCAKKyAgICAxMDE0MzEsIDEwMTQzNywgMTAxNDQ2LCAxMDE0NTAsIDEwMTQ1NCwgMTAxNDYxLCAxMDE0NzEsIDEwMTQ3OCwgMTAxNDg0LCAKKyAgICAxMDE0ODgsIDEwMTQ5MiwgMTAxNDk5LCAxMDE1MDUsIDEwMTUwOSwgMTAxNTE1LCAxMDE1MTksIDEwMTUyNywgMTAxNTMzLCAKKyAgICAxMDE1MzcsIDEwMTU0NSwgMTAxNTUzLCAxMDE1NjAsIDEwMTU2NiwgMTAxNTczLCAxMDE1ODAsIDEwMTU5MCwgMTAxNjAwLCAKKyAgICAxMDE2MDQsIDEwMTYwOCwgMTAxNjEyLCAxMDE2MTYsIDEwMTYyMiwgMTAxNjI5LCAxMDE2MzUsIDEwMTY0MiwgMTAxNjQ5LCAKKyAgICAxMDE2NTYsIDEwMTY2NSwgMTAxNjcyLCAxMDE2NzksIDEwMTY4NSwgMTAxNjkyLCAxMDE2OTksIDEwMTcwNiwgMTAxNzEzLCAKKyAgICAxMDE3MjAsIDEwMTcyNywgMTAxNzMzLCAxMDE3NDAsIDEwMTc0NywgMTAxNzU0LCAxMDE3NjMsIDEwMTc3MCwgMTAxNzc3LCAKKyAgICAxMDE3ODEsIDEwMTc4NywgMTAxNzkxLCAxMDE3OTcsIDEwMTgwNCwgMTAxODExLCAxMDE4MTgsIDEwMTgyMiwgMTAxODI2LCAKKyAgICAxMDE4MzAsIDEwMTgzNCwgMTAxODM4LCAxMDE4NDUsIDEwMTg0OSwgMTAxODUzLCAxMDE4NTksIDEwMTg2NywgMTAxODcxLCAKKyAgICAxMDE4NzUsIDEwMTg3OSwgMTAxODgzLCAxMDE4OTAsIDEwMTg5NCwgMTAxODk4LCAxMDE5MDYsIDEwMTkxMCwgMTAxOTE0LCAKKyAgICAxMDE5MTgsIDEwMTkyMiwgMTAxOTI4LCAxMDE5MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEwMTkzNiwgMTAxOTQyLCAxMDE5NDgsIDEwMTk1NSwgMTAxOTYyLCAxMDE5NjksIDEwMTk3NiwgMTAxOTgzLCAKKyAgICAxMDE5OTAsIDEwMTk5NiwgMTAyMDAzLCAxMDIwMTAsIDEwMjAxNywgMTAyMDI0LCAxMDIwMzEsIDEwMjAzOCwgMTAyMDQ0LCAKKyAgICAxMDIwNTAsIDEwMjA1NiwgMTAyMDYyLCAxMDIwNjgsIDEwMjA3NCwgMTAyMDgwLCAxMDIwODYsIDEwMjA5MiwgMTAyMDk5LCAKKyAgICAxMDIxMDYsIDEwMjExMywgMTAyMTIwLCAxMDIxMjcsIDEwMjEzNCwgMTAyMTQwLCAxMDIxNDYsIDEwMjE1MiwgMTAyMTU5LCAKKyAgICAxMDIxNjYsIDEwMjE3MiwgMTAyMTc4LCAxMDIxODcsIDEwMjE5NCwgMTAyMjAxLCAxMDIyMDgsIDEwMjIxNSwgMTAyMjIyLCAKKyAgICAxMDIyMjksIDEwMjIzNSwgMTAyMjQxLCAxMDIyNDcsIDEwMjI1NiwgMTAyMjYzLCAxMDIyNzAsIDEwMjI4MSwgMTAyMjkyLCAKKyAgICAxMDIyOTgsIDEwMjMwNCwgMTAyMzEwLCAxMDIzMTksIDEwMjMyNiwgMTAyMzMzLCAxMDIzNDMsIDEwMjM1MywgMTAyMzY0LCAKKyAgICAxMDIzNzUsIDEwMjM4NywgMTAyNDAwLCAxMDI0MTEsIDEwMjQyMiwgMTAyNDM0LCAxMDI0NDcsIDEwMjQ1OCwgMTAyNDY5LCAKKyAgICAxMDI0ODAsIDEwMjQ5MSwgMTAyNTAyLCAxMDI1MTQsIDEwMjUyMiwgMTAyNTMwLCAxMDI1MzksIDEwMjU0OCwgMTAyNTU3LCAKKyAgICAxMDI1NjMsIDEwMjU2OSwgMTAyNTc1LCAxMDI1ODIsIDEwMjU5MiwgMTAyNTk5LCAxMDI2MDksIDEwMjYxNCwgMTAyNjE5LCAKKyAgICAxMDI2MjUsIDEwMjYzMSwgMTAyNjM5LCAxMDI2NDcsIDEwMjY1NiwgMTAyNjY3LCAxMDI2NzgsIDEwMjY4NiwgMTAyNjk0LCAKKyAgICAxMDI3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjcxMiwgMTAyNzIzLCAxMDI3MzAsIAorICAgIDEwMjczOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyNzQ2LCAxMDI3NTAsIDEwMjc1NCwgCisgICAgMTAyNzU4LCAxMDI3NjIsIDEwMjc2NiwgMTAyNzcwLCAxMDI3NzQsIDEwMjc3OCwgMTAyNzgyLCAxMDI3ODYsIDEwMjc5MCwgCisgICAgMTAyNzk0LCAxMDI3OTgsIDEwMjgwMiwgMTAyODA2LCAxMDI4MTAsIDEwMjgxNCwgMTAyODE4LCAxMDI4MjIsIDEwMjgyNiwgCisgICAgMTAyODMwLCAxMDI4MzQsIDEwMjgzOCwgMTAyODQyLCAxMDI4NDYsIDEwMjg1MCwgMTAyODU0LCAxMDI4NTgsIDEwMjg2MiwgCisgICAgMTAyODY2LCAxMDI4NzAsIDEwMjg3NCwgMTAyODc4LCAxMDI4ODIsIDEwMjg4NiwgMTAyODkwLCAxMDI4OTQsIDEwMjg5OCwgCisgICAgMTAyOTAyLCAxMDI5MDYsIDEwMjkxMCwgMTAyOTE0LCAxMDI5MTgsIDEwMjkyMiwgMTAyOTI2LCAxMDI5MzAsIDEwMjkzNCwgCisgICAgMTAyOTM4LCAxMDI5NDIsIDEwMjk0NiwgMTAyOTUwLCAxMDI5NTQsIDEwMjk1OCwgMTAyOTYyLCAxMDI5NjYsIDEwMjk3MCwgCisgICAgMTAyOTc0LCAxMDI5NzgsIDEwMjk4MiwgMTAyOTg2LCAxMDI5OTAsIDEwMjk5NCwgMTAyOTk4LCAxMDMwMDIsIDEwMzAwNiwgCisgICAgMTAzMDEwLCAxMDMwMTQsIDEwMzAxOCwgMTAzMDIyLCAxMDMwMjYsIDEwMzAzMCwgMTAzMDM0LCAxMDMwMzgsIDEwMzA0MiwgCisgICAgMTAzMDQ2LCAxMDMwNTAsIDEwMzA1NCwgMTAzMDU4LCAxMDMwNjIsIDEwMzA2NiwgMTAzMDcwLCAxMDMwNzQsIDEwMzA3OCwgCisgICAgMTAzMDgyLCAxMDMwODYsIDEwMzA5MCwgMTAzMDk0LCAxMDMwOTgsIDEwMzEwMiwgMTAzMTA2LCAxMDMxMTAsIDEwMzExNCwgCisgICAgMTAzMTE4LCAxMDMxMjIsIDEwMzEyNiwgMTAzMTMwLCAxMDMxMzQsIDEwMzEzOCwgMTAzMTQyLCAxMDMxNDYsIDEwMzE1MCwgCisgICAgMTAzMTU0LCAxMDMxNTgsIDEwMzE2MiwgMTAzMTY2LCAxMDMxNzAsIDEwMzE3NCwgMTAzMTc4LCAxMDMxODIsIDEwMzE4NiwgCisgICAgMTAzMTkwLCAxMDMxOTQsIDEwMzE5OCwgMTAzMjAyLCAxMDMyMDYsIDEwMzIxMCwgMTAzMjE0LCAxMDMyMTgsIDEwMzIyMiwgCisgICAgMTAzMjI2LCAxMDMyMzAsIDEwMzIzNCwgMTAzMjM4LCAxMDMyNDIsIDEwMzI0NiwgMTAzMjUwLCAxMDMyNTQsIDEwMzI1OCwgCisgICAgMTAzMjYyLCAxMDMyNjYsIDEwMzI3MCwgMTAzMjc0LCAxMDMyNzgsIDEwMzI4MiwgMTAzMjg2LCAxMDMyOTAsIDEwMzI5NCwgCisgICAgMTAzMjk4LCAxMDMzMDIsIDEwMzMwNiwgMTAzMzEwLCAxMDMzMTQsIDEwMzMxOCwgMTAzMzIyLCAxMDMzMjYsIDEwMzMzMCwgCisgICAgMTAzMzM0LCAxMDMzMzgsIDEwMzM0MiwgMTAzMzQ2LCAxMDMzNTAsIDEwMzM1NCwgMTAzMzU4LCAxMDMzNjIsIDEwMzM2NiwgCisgICAgMTAzMzcwLCAxMDMzNzQsIDEwMzM3OCwgMTAzMzgyLCAxMDMzODYsIDEwMzM5MCwgMTAzMzk0LCAxMDMzOTgsIDEwMzQwMiwgCisgICAgMTAzNDA2LCAxMDM0MTAsIDEwMzQxNCwgMTAzNDE4LCAxMDM0MjIsIDEwMzQyNiwgMTAzNDMwLCAxMDM0MzQsIDEwMzQzOCwgCisgICAgMTAzNDQyLCAxMDM0NDYsIDEwMzQ1MCwgMTAzNDU0LCAxMDM0NTgsIDEwMzQ2MiwgMTAzNDY2LCAxMDM0NzAsIDEwMzQ3NCwgCisgICAgMTAzNDc4LCAxMDM0ODIsIDEwMzQ4NiwgMTAzNDkwLCAxMDM0OTQsIDEwMzQ5OCwgMTAzNTAyLCAxMDM1MDYsIDEwMzUxMCwgCisgICAgMTAzNTE0LCAxMDM1MTgsIDEwMzUyMiwgMTAzNTI2LCAxMDM1MzAsIDEwMzUzNCwgMTAzNTM4LCAxMDM1NDIsIDEwMzU0NiwgCisgICAgMTAzNTUwLCAxMDM1NTQsIDEwMzU1OCwgMTAzNTYyLCAxMDM1NjYsIDEwMzU3MCwgMTAzNTc0LCAxMDM1NzgsIDEwMzU4MiwgCisgICAgMTAzNTg2LCAxMDM1OTAsIDEwMzU5NCwgMTAzNTk4LCAxMDM2MDIsIDEwMzYwNiwgMTAzNjEwLCAxMDM2MTQsIDEwMzYxOCwgCisgICAgMTAzNjIyLCAxMDM2MjYsIDEwMzYzMCwgMTAzNjM0LCAxMDM2MzgsIDEwMzY0MiwgMTAzNjQ2LCAxMDM2NTAsIDEwMzY1NCwgCisgICAgMTAzNjU4LCAxMDM2NjIsIDEwMzY2NiwgMTAzNjcwLCAxMDM2NzQsIDEwMzY3OCwgMTAzNjgyLCAxMDM2ODYsIDEwMzY5MCwgCisgICAgMTAzNjk0LCAxMDM2OTgsIDEwMzcwMiwgMTAzNzA2LCAxMDM3MTAsIDEwMzcxNCwgMTAzNzE4LCAxMDM3MjIsIDEwMzcyNiwgCisgICAgMTAzNzMwLCAxMDM3MzQsIDEwMzczOCwgMTAzNzQyLCAxMDM3NDYsIDEwMzc1MCwgMTAzNzU0LCAxMDM3NTgsIDEwMzc2MiwgCisgICAgMTAzNzY2LCAxMDM3NzAsIDEwMzc3NCwgMTAzNzc4LCAxMDM3ODIsIDEwMzc4NiwgMTAzNzkwLCAxMDM3OTQsIDEwMzc5OCwgCisgICAgMTAzODAyLCAxMDM4MDYsIDEwMzgxMCwgMTAzODE0LCAxMDM4MTgsIDEwMzgyMiwgMTAzODI2LCAxMDM4MzAsIDEwMzgzNCwgCisgICAgMTAzODM4LCAxMDM4NDIsIDEwMzg0NiwgMTAzODUwLCAxMDM4NTQsIDEwMzg1OCwgMTAzODYyLCAxMDM4NjYsIDEwMzg3MCwgCisgICAgMTAzODc0LCAxMDM4NzgsIDEwMzg4MiwgMTAzODg2LCAxMDM4OTAsIDEwMzg5NCwgMTAzODk4LCAxMDM5MDIsIDEwMzkwNiwgCisgICAgMTAzOTEwLCAxMDM5MTQsIDEwMzkxOCwgMTAzOTIyLCAxMDM5MjYsIDEwMzkzMCwgMTAzOTM0LCAxMDM5MzgsIDEwMzk0MiwgCisgICAgMTAzOTQ2LCAxMDM5NTAsIDEwMzk1NCwgMTAzOTU4LCAxMDM5NjIsIDEwMzk2NiwgMTAzOTcwLCAxMDM5NzQsIDEwMzk3OCwgCisgICAgMTAzOTgyLCAxMDM5ODYsIDEwMzk5MCwgMTAzOTk0LCAxMDM5OTgsIDEwNDAwMiwgMTA0MDA2LCAxMDQwMTAsIDEwNDAxNCwgCisgICAgMTA0MDE4LCAxMDQwMjIsIDEwNDAyNiwgMTA0MDMwLCAxMDQwMzQsIDEwNDAzOCwgMTA0MDQyLCAxMDQwNDYsIDEwNDA1MCwgCisgICAgMTA0MDU0LCAxMDQwNTgsIDEwNDA2MiwgMTA0MDY2LCAxMDQwNzAsIDEwNDA3NCwgMTA0MDc4LCAxMDQwODIsIDEwNDA4NiwgCisgICAgMTA0MDkwLCAxMDQwOTQsIDEwNDA5OCwgMTA0MTAyLCAxMDQxMDYsIDEwNDExMCwgMTA0MTE0LCAxMDQxMTgsIDEwNDEyMiwgCisgICAgMTA0MTI2LCAxMDQxMzAsIDEwNDEzNCwgMTA0MTM4LCAxMDQxNDIsIDEwNDE0NiwgMTA0MTUwLCAxMDQxNTQsIDEwNDE1OCwgCisgICAgMTA0MTYyLCAxMDQxNjYsIDEwNDE3MCwgMTA0MTc0LCAxMDQxNzgsIDEwNDE4MiwgMTA0MTg2LCAxMDQxOTAsIDEwNDE5NCwgCisgICAgMTA0MTk4LCAxMDQyMDIsIDEwNDIwNiwgMTA0MjEwLCAxMDQyMTQsIDEwNDIxOCwgMTA0MjIyLCAxMDQyMjYsIDEwNDIzMCwgCisgICAgMTA0MjM0LCAxMDQyMzgsIDEwNDI0MiwgMTA0MjQ2LCAxMDQyNTAsIDEwNDI1NCwgMTA0MjU4LCAxMDQyNjIsIDEwNDI2NiwgCisgICAgMTA0MjcwLCAxMDQyNzQsIDEwNDI3OCwgMTA0MjgyLCAxMDQyODYsIDEwNDI5MCwgMTA0Mjk0LCAxMDQyOTgsIDEwNDMwMiwgCisgICAgMTA0MzA2LCAxMDQzMTAsIDEwNDMxNCwgMTA0MzE4LCAxMDQzMjIsIDEwNDMyNiwgMTA0MzMwLCAxMDQzMzQsIDEwNDMzOCwgCisgICAgMTA0MzQyLCAxMDQzNDYsIDEwNDM1MCwgMTA0MzU0LCAxMDQzNTgsIDEwNDM2MiwgMTA0MzY2LCAxMDQzNzAsIDEwNDM3NCwgCisgICAgMTA0Mzc4LCAxMDQzODIsIDEwNDM4NiwgMTA0MzkwLCAxMDQzOTQsIDEwNDM5OCwgMTA0NDAyLCAxMDQ0MDYsIDEwNDQxMCwgCisgICAgMTA0NDE0LCAxMDQ0MTgsIDEwNDQyMiwgMTA0NDI2LCAxMDQ0MzAsIDEwNDQzNCwgMTA0NDM4LCAxMDQ0NDIsIDEwNDQ0NiwgCisgICAgMTA0NDUwLCAxMDQ0NTQsIDEwNDQ1OCwgMTA0NDYyLCAxMDQ0NjYsIDEwNDQ3MCwgMTA0NDc0LCAxMDQ0NzgsIDEwNDQ4MiwgCisgICAgMTA0NDg2LCAxMDQ0OTAsIDEwNDQ5NCwgMTA0NDk4LCAxMDQ1MDIsIDEwNDUwNiwgMTA0NTEwLCAxMDQ1MTQsIDEwNDUxOCwgCisgICAgMTA0NTIyLCAxMDQ1MjYsIDEwNDUzMCwgMTA0NTM0LCAxMDQ1MzgsIDEwNDU0MiwgMTA0NTQ2LCAxMDQ1NTAsIDEwNDU1NCwgCisgICAgMTA0NTU4LCAxMDQ1NjIsIDEwNDU2NiwgMTA0NTcwLCAxMDQ1NzQsIDEwNDU3OCwgMTA0NTgyLCAxMDQ1ODYsIDEwNDU5MCwgCisgICAgMTA0NTk0LCAxMDQ1OTgsIDEwNDYwMiwgMTA0NjA2LCAxMDQ2MTAsIDEwNDYxNCwgMTA0NjE4LCAxMDQ2MjIsIDEwNDYyNiwgCisgICAgMTA0NjMwLCAxMDQ2MzQsIDEwNDYzOCwgMTA0NjQyLCAxMDQ2NDYsIDEwNDY1MCwgMTA0NjU0LCAxMDQ2NTgsIDEwNDY2MiwgCisgICAgMTA0NjY2LCAxMDQ2NzAsIDEwNDY3NCwgMTA0Njc4LCAxMDQ2ODIsIDEwNDY4NiwgMTA0NjkwLCAxMDQ2OTQsIDEwNDY5OCwgCisgICAgMTA0NzAyLCAxMDQ3MDYsIDEwNDcxMCwgMTA0NzE0LCAxMDQ3MTgsIDEwNDcyMiwgMTA0NzI2LCAxMDQ3MzAsIDEwNDczNCwgCisgICAgMTA0NzM4LCAxMDQ3NDIsIDEwNDc0NiwgMTA0NzUwLCAxMDQ3NTQsIDEwNDc1OCwgMTA0NzYyLCAxMDQ3NjYsIDEwNDc3MCwgCisgICAgMTA0Nzc0LCAxMDQ3NzgsIDEwNDc4MiwgMTA0Nzg2LCAxMDQ3OTAsIDEwNDc5NCwgMTA0Nzk4LCAxMDQ4MDIsIDEwNDgwNiwgCisgICAgMTA0ODEwLCAxMDQ4MTQsIDEwNDgxOCwgMTA0ODIyLCAxMDQ4MjYsIDEwNDgzMCwgMTA0ODM0LCAxMDQ4MzgsIDEwNDg0MiwgCisgICAgMTA0ODQ2LCAxMDQ4NTAsIDEwNDg1NCwgMTA0ODU4LCAxMDQ4NjIsIDEwNDg2NiwgMTA0ODcwLCAxMDQ4NzQsIDEwNDg3OCwgCisgICAgMTA0ODgyLCAxMDQ4ODYsIDEwNDg5MCwgMTA0ODk0LCAxMDQ4OTgsIDEwNDkwMiwgMTA0OTA2LCAxMDQ5MTAsIDEwNDkxNCwgCisgICAgMTA0OTE4LCAxMDQ5MjIsIDEwNDkyNiwgMTA0OTMwLCAxMDQ5MzQsIDEwNDkzOCwgMTA0OTQyLCAxMDQ5NDYsIDEwNDk1MCwgCisgICAgMTA0OTU0LCAxMDQ5NTgsIDEwNDk2MiwgMTA0OTY2LCAxMDQ5NzAsIDEwNDk3NCwgMTA0OTc4LCAxMDQ5ODIsIDEwNDk4NiwgCisgICAgMTA0OTkwLCAxMDQ5OTQsIDEwNDk5OCwgMTA1MDAyLCAxMDUwMDYsIDEwNTAxMCwgMTA1MDE0LCAxMDUwMTgsIDEwNTAyMiwgCisgICAgMTA1MDI2LCAxMDUwMzAsIDEwNTAzNCwgMTA1MDM4LCAxMDUwNDIsIDEwNTA0NiwgMTA1MDUwLCAxMDUwNTQsIDEwNTA1OCwgCisgICAgMTA1MDYyLCAxMDUwNjYsIDEwNTA3MCwgMTA1MDc0LCAxMDUwNzgsIDEwNTA4MiwgMTA1MDg2LCAxMDUwOTAsIDEwNTA5NCwgCisgICAgMTA1MDk4LCAxMDUxMDIsIDEwNTEwNiwgMTA1MTEwLCAxMDUxMTQsIDEwNTExOCwgMTA1MTIyLCAxMDUxMjYsIDEwNTEzMCwgCisgICAgMTA1MTM0LCAxMDUxMzgsIDEwNTE0MiwgMTA1MTQ2LCAxMDUxNTAsIDEwNTE1NCwgMTA1MTU4LCAxMDUxNjIsIDEwNTE2NiwgCisgICAgMTA1MTcwLCAxMDUxNzQsIDEwNTE3OCwgMTA1MTgyLCAxMDUxODYsIDEwNTE5MCwgMTA1MTk0LCAxMDUxOTgsIDEwNTIwMiwgCisgICAgMTA1MjA2LCAxMDUyMTAsIDEwNTIxNCwgMTA1MjE4LCAxMDUyMjIsIDEwNTIyNiwgMTA1MjMwLCAxMDUyMzQsIDEwNTIzOCwgCisgICAgMTA1MjQyLCAxMDUyNDYsIDEwNTI1MCwgMTA1MjU0LCAxMDUyNTgsIDEwNTI2MiwgMTA1MjY2LCAxMDUyNzAsIDEwNTI3NCwgCisgICAgMTA1Mjc4LCAxMDUyODIsIDEwNTI4NiwgMTA1MjkwLCAxMDUyOTQsIDEwNTI5OCwgMTA1MzAyLCAxMDUzMDYsIDEwNTMxMCwgCisgICAgMTA1MzE0LCAxMDUzMTgsIDEwNTMyMiwgMTA1MzI2LCAxMDUzMzAsIDEwNTMzNCwgMTA1MzM4LCAxMDUzNDIsIDEwNTM0NiwgCisgICAgMTA1MzUwLCAxMDUzNTQsIDEwNTM1OCwgMTA1MzYyLCAxMDUzNjYsIDEwNTM3MCwgMTA1Mzc0LCAxMDUzNzgsIDEwNTM4MiwgCisgICAgMTA1Mzg2LCAxMDUzOTAsIDEwNTM5NCwgMTA1Mzk4LCAxMDU0MDIsIDEwNTQwNiwgMTA1NDEwLCAxMDU0MTQsIDEwNTQxOCwgCisgICAgMTA1NDIyLCAxMDU0MjYsIDEwNTQzMCwgMTA1NDM0LCAxMDU0MzgsIDEwNTQ0MiwgMTA1NDQ2LCAxMDU0NTAsIDEwNTQ1NCwgCisgICAgMTA1NDU4LCAxMDU0NjIsIDEwNTQ2NiwgMTA1NDcwLCAxMDU0NzQsIDEwNTQ3OCwgMTA1NDgyLCAxMDU0ODYsIDEwNTQ5MCwgCisgICAgMTA1NDk0LCAxMDU0OTgsIDEwNTUwMiwgMTA1NTA2LCAxMDU1MTAsIDEwNTUxNCwgMTA1NTE4LCAxMDU1MjIsIDEwNTUyNiwgCisgICAgMTA1NTMwLCAxMDU1MzQsIDEwNTUzOCwgMTA1NTQyLCAxMDU1NDYsIDEwNTU1MCwgMTA1NTU0LCAxMDU1NTgsIDEwNTU2MiwgCisgICAgMTA1NTY2LCAxMDU1NzAsIDEwNTU3NCwgMTA1NTc4LCAxMDU1ODIsIDEwNTU4NiwgMTA1NTkwLCAxMDU1OTQsIDEwNTU5OCwgCisgICAgMTA1NjAyLCAxMDU2MDYsIDEwNTYxMCwgMTA1NjE0LCAxMDU2MTgsIDEwNTYyMiwgMTA1NjI2LCAxMDU2MzAsIDEwNTYzNCwgCisgICAgMTA1NjM4LCAxMDU2NDIsIDEwNTY0NiwgMTA1NjUwLCAxMDU2NTQsIDEwNTY1OCwgMTA1NjYyLCAxMDU2NjYsIDEwNTY3MCwgCisgICAgMTA1Njc0LCAxMDU2NzgsIDEwNTY4MiwgMTA1Njg2LCAxMDU2OTAsIDEwNTY5NCwgMTA1Njk4LCAxMDU3MDIsIDEwNTcwNiwgCisgICAgMTA1NzEwLCAxMDU3MTQsIDEwNTcxOCwgMTA1NzIyLCAxMDU3MjYsIDEwNTczMCwgMTA1NzM0LCAxMDU3MzgsIDEwNTc0MiwgCisgICAgMTA1NzQ2LCAxMDU3NTAsIDEwNTc1NCwgMTA1NzU4LCAxMDU3NjIsIDEwNTc2NiwgMTA1NzcwLCAxMDU3NzQsIDEwNTc3OCwgCisgICAgMTA1NzgyLCAxMDU3ODYsIDEwNTc5MCwgMTA1Nzk0LCAxMDU3OTgsIDEwNTgwMiwgMTA1ODA2LCAxMDU4MTAsIDEwNTgxNCwgCisgICAgMTA1ODE4LCAxMDU4MjIsIDEwNTgyNiwgMTA1ODMwLCAxMDU4MzQsIDEwNTgzOCwgMTA1ODQyLCAxMDU4NDYsIDEwNTg1MCwgCisgICAgMTA1ODU0LCAxMDU4NTgsIDEwNTg2MiwgMTA1ODY2LCAxMDU4NzAsIDEwNTg3NCwgMTA1ODc4LCAxMDU4ODIsIDEwNTg4NiwgCisgICAgMTA1ODkwLCAxMDU4OTQsIDEwNTg5OCwgMTA1OTAyLCAxMDU5MDYsIDEwNTkxMCwgMTA1OTE0LCAxMDU5MTgsIDEwNTkyMiwgCisgICAgMTA1OTI2LCAxMDU5MzAsIDEwNTkzNCwgMTA1OTM4LCAxMDU5NDIsIDEwNTk0NiwgMTA1OTUwLCAxMDU5NTQsIDEwNTk1OCwgCisgICAgMTA1OTYyLCAxMDU5NjYsIDEwNTk3MCwgMTA1OTc0LCAxMDU5NzgsIDEwNTk4MiwgMTA1OTg2LCAxMDU5OTAsIDEwNTk5NCwgCisgICAgMTA1OTk4LCAxMDYwMDIsIDEwNjAwNiwgMTA2MDEwLCAxMDYwMTQsIDEwNjAxOCwgMTA2MDIyLCAxMDYwMjYsIDEwNjAzMCwgCisgICAgMTA2MDM0LCAxMDYwMzgsIDEwNjA0MiwgMTA2MDQ2LCAxMDYwNTAsIDEwNjA1NCwgMTA2MDU4LCAxMDYwNjIsIDEwNjA2NiwgCisgICAgMTA2MDcwLCAxMDYwNzQsIDEwNjA3OCwgMTA2MDgyLCAxMDYwODYsIDEwNjA5MCwgMTA2MDk0LCAxMDYwOTgsIDEwNjEwMiwgCisgICAgMTA2MTA2LCAxMDYxMTAsIDEwNjExNCwgMTA2MTE4LCAxMDYxMjIsIDEwNjEyNiwgMTA2MTMwLCAxMDYxMzQsIDEwNjEzOCwgCisgICAgMTA2MTQyLCAxMDYxNDYsIDEwNjE1MCwgMTA2MTU0LCAxMDYxNTgsIDEwNjE2MiwgMTA2MTY2LCAxMDYxNzAsIDEwNjE3NCwgCisgICAgMTA2MTc4LCAxMDYxODIsIDEwNjE4NiwgMTA2MTkwLCAxMDYxOTQsIDEwNjE5OCwgMTA2MjAyLCAxMDYyMDYsIDEwNjIxMCwgCisgICAgMTA2MjE0LCAxMDYyMTgsIDEwNjIyMiwgMTA2MjI2LCAxMDYyMzAsIDEwNjIzNCwgMTA2MjM4LCAxMDYyNDIsIDEwNjI0NiwgCisgICAgMTA2MjUwLCAxMDYyNTQsIDEwNjI1OCwgMTA2MjYyLCAxMDYyNjYsIDEwNjI3MCwgMTA2Mjc0LCAxMDYyNzgsIDEwNjI4MiwgCisgICAgMTA2Mjg2LCAxMDYyOTAsIDEwNjI5NCwgMTA2Mjk4LCAxMDYzMDIsIDEwNjMwNiwgMTA2MzEwLCAxMDYzMTQsIDEwNjMxOCwgCisgICAgMTA2MzIyLCAxMDYzMjYsIDEwNjMzMCwgMTA2MzM0LCAxMDYzMzgsIDEwNjM0MiwgMTA2MzQ2LCAxMDYzNTAsIDEwNjM1NCwgCisgICAgMTA2MzU4LCAxMDYzNjIsIDEwNjM2NiwgMTA2MzcwLCAxMDYzNzQsIDEwNjM3OCwgMTA2MzgyLCAxMDYzODYsIDEwNjM5MCwgCisgICAgMTA2Mzk0LCAxMDYzOTgsIDEwNjQwMiwgMTA2NDA2LCAxMDY0MTAsIDEwNjQxNCwgMTA2NDE4LCAxMDY0MjIsIDEwNjQyNiwgCisgICAgMTA2NDMwLCAxMDY0MzQsIDEwNjQzOCwgMTA2NDQyLCAxMDY0NDYsIDEwNjQ1MCwgMTA2NDU0LCAxMDY0NTgsIDEwNjQ2MiwgCisgICAgMTA2NDY2LCAxMDY0NzAsIDEwNjQ3NCwgMTA2NDc4LCAxMDY0ODIsIDEwNjQ4NiwgMTA2NDkwLCAxMDY0OTQsIDEwNjQ5OCwgCisgICAgMTA2NTAyLCAxMDY1MDYsIDEwNjUxMCwgMTA2NTE0LCAxMDY1MTgsIDEwNjUyMiwgMTA2NTI2LCAxMDY1MzAsIDEwNjUzNCwgCisgICAgMTA2NTM4LCAxMDY1NDIsIDEwNjU0NiwgMTA2NTUwLCAxMDY1NTQsIDEwNjU1OCwgMTA2NTYyLCAxMDY1NjYsIDEwNjU3MCwgCisgICAgMTA2NTc0LCAxMDY1NzgsIDEwNjU4MiwgMTA2NTg2LCAxMDY1OTAsIDEwNjU5NCwgMTA2NTk4LCAxMDY2MDIsIDEwNjYwNiwgCisgICAgMTA2NjEwLCAxMDY2MTQsIDEwNjYxOCwgMTA2NjIyLCAxMDY2MjYsIDEwNjYzMCwgMTA2NjM0LCAxMDY2MzgsIDEwNjY0MiwgCisgICAgMTA2NjQ2LCAxMDY2NTAsIDEwNjY1NCwgMTA2NjU4LCAxMDY2NjIsIDEwNjY2NiwgMTA2NjcwLCAxMDY2NzQsIDEwNjY3OCwgCisgICAgMTA2NjgyLCAxMDY2ODYsIDEwNjY5MCwgMTA2Njk0LCAxMDY2OTgsIDEwNjcwMiwgMTA2NzA2LCAxMDY3MTAsIDEwNjcxNCwgCisgICAgMTA2NzE4LCAxMDY3MjIsIDEwNjcyNiwgMTA2NzMwLCAxMDY3MzQsIDEwNjczOCwgMTA2NzQyLCAxMDY3NDYsIDEwNjc1MCwgCisgICAgMTA2NzU0LCAxMDY3NTgsIDEwNjc2MiwgMTA2NzY2LCAxMDY3NzAsIDEwNjc3NCwgMTA2Nzc4LCAxMDY3ODIsIDEwNjc4NiwgCisgICAgMTA2NzkwLCAxMDY3OTQsIDEwNjc5OCwgMTA2ODAyLCAxMDY4MDYsIDEwNjgxMCwgMTA2ODE0LCAxMDY4MTgsIDEwNjgyMiwgCisgICAgMTA2ODI2LCAxMDY4MzAsIDEwNjgzNCwgMTA2ODM4LCAxMDY4NDIsIDEwNjg0NiwgMTA2ODUwLCAxMDY4NTQsIDEwNjg1OCwgCisgICAgMTA2ODYyLCAxMDY4NjYsIDEwNjg3MCwgMTA2ODc0LCAxMDY4NzgsIDEwNjg4MiwgMTA2ODg2LCAxMDY4OTAsIDEwNjg5NCwgCisgICAgMTA2ODk4LCAxMDY5MDIsIDEwNjkwNiwgMTA2OTEwLCAxMDY5MTQsIDEwNjkxOCwgMTA2OTIyLCAxMDY5MjYsIDEwNjkzMCwgCisgICAgMTA2OTM0LCAxMDY5MzgsIDEwNjk0MiwgMTA2OTQ2LCAxMDY5NTAsIDEwNjk1NCwgMTA2OTU4LCAxMDY5NjIsIDEwNjk2NiwgCisgICAgMTA2OTcwLCAxMDY5NzQsIDEwNjk3OCwgMTA2OTgyLCAxMDY5ODYsIDEwNjk5MCwgMTA2OTk0LCAxMDY5OTgsIDEwNzAwMiwgCisgICAgMTA3MDA2LCAxMDcwMTAsIDEwNzAxNCwgMTA3MDE4LCAxMDcwMjIsIDEwNzAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTA3MDMwLCAxMDcwMzcsIDEwNzA0NCwgMTA3MDUzLCAxMDcwNjIsIDEwNzA2OSwgMTA3MDc0LCAxMDcwODEsIAorICAgIDEwNzA4OCwgMTA3MDk3LCAxMDcxMDgsIDEwNzExOSwgMTA3MTI0LCAxMDcxMzEsIDEwNzEzNiwgMTA3MTQxLCAxMDcxNDYsIAorICAgIDEwNzE1MSwgMTA3MTU2LCAxMDcxNjEsIDEwNzE2NiwgMTA3MTcxLCAxMDcxNzYsIDEwNzE4MSwgMTA3MTg2LCAxMDcxOTMsIAorICAgIDEwNzIwMCwgMTA3MjA1LCAxMDcyMTAsIDEwNzIxNSwgMTA3MjIwLCAxMDcyMjcsIDEwNzIzNCwgMTA3MjQyLCAxMDcyNDcsIAorICAgIDEwNzI1NCwgMTA3MjU5LCAxMDcyNjQsIDEwNzI2OSwgMTA3Mjc0LCAxMDcyNzksIDEwNzI4NiwgMTA3MjkzLCAxMDcyOTgsIAorICAgIDEwNzMwMywgMTA3MzA4LCAxMDczMTMsIDEwNzMxOCwgMTA3MzIzLCAxMDczMjgsIDEwNzMzMywgMTA3MzM4LCAxMDczNDMsIAorICAgIDEwNzM0OCwgMTA3MzUzLCAxMDczNTgsIDEwNzM2MywgMTA3MzY4LCAxMDczNzMsIDEwNzM3OCwgMTA3MzgzLCAxMDczODgsIAorICAgIDEwNzM5NSwgMTA3NDAwLCAxMDc0MDUsIDEwNzQxNCwgMTA3NDIxLCAxMDc0MjYsIDEwNzQzMSwgMTA3NDM2LCAxMDc0NDEsIAorICAgIDEwNzQ0NiwgMTA3NDUxLCAxMDc0NTYsIDEwNzQ2MSwgMTA3NDY2LCAxMDc0NzEsIDEwNzQ3NiwgMTA3NDgxLCAxMDc0ODYsIAorICAgIDEwNzQ5MSwgMTA3NDk2LCAxMDc1MDEsIDEwNzUwNiwgMTA3NTExLCAxMDc1MTYsIDEwNzUyMSwgMTA3NTI2LCAxMDc1MzIsIAorICAgIDEwNzU0MCwgMTA3NTQ2LCAxMDc1NTQsIDEwNzU2MiwgMTA3NTcwLCAxMDc1NzYsIDEwNzU4MiwgMTA3NTg4LCAxMDc1OTQsIAorICAgIDEwNzYwMCwgMTA3NjA4LCAxMDc2MTgsIDEwNzYyNiwgMTA3NjM0LCAxMDc2NDAsIDEwNzY0NiwgMTA3NjU0LCAxMDc2NjIsIAorICAgIDEwNzY2OCwgMTA3Njc2LCAxMDc2ODQsIDEwNzY5MiwgMTA3Njk4LCAxMDc3MDQsIDEwNzcxMCwgMTA3NzE2LCAxMDc3MjIsIAorICAgIDEwNzcyOCwgMTA3NzM2LCAxMDc3NDQsIDEwNzc1MCwgMTA3NzU2LCAxMDc3NjIsIDEwNzc2OCwgMTA3Nzc0LCAxMDc3ODIsIAorICAgIDEwNzc4OCwgMTA3Nzk0LCAxMDc4MDAsIDEwNzgwNiwgMTA3ODEyLCAxMDc4MTgsIDEwNzgyNiwgMTA3ODMyLCAxMDc4MzgsIAorICAgIDEwNzg0NCwgMTA3ODUwLCAxMDc4NTgsIDEwNzg2NiwgMTA3ODcyLCAxMDc4NzgsIDEwNzg4NCwgMTA3ODg5LCAxMDc4OTUsIAorICAgIDEwNzkwMSwgMTA3OTA4LCAxMDc5MTMsIDEwNzkxOCwgMTA3OTIzLCAxMDc5MjgsIDEwNzkzMywgMTA3OTM4LCAxMDc5NDMsIAorICAgIDEwNzk0OCwgMTA3OTUzLCAxMDc5NjIsIDEwNzk2OSwgMTA3OTc0LCAxMDc5NzksIDEwNzk4NCwgMTA3OTkxLCAxMDc5OTYsIAorICAgIDEwODAwMSwgMTA4MDA2LCAxMDgwMTMsIDEwODAxOCwgMTA4MDIzLCAxMDgwMjgsIDEwODAzMywgMTA4MDM4LCAxMDgwNDMsIAorICAgIDEwODA0OCwgMTA4MDUzLCAxMDgwNTgsIDEwODA2MywgMTA4MDY4LCAxMDgwNzUsIDEwODA4MCwgMTA4MDg3LCAxMDgwOTIsIAorICAgIDEwODA5NywgMTA4MTA0LCAxMDgxMDksIDEwODExNCwgMTA4MTE5LCAxMDgxMjQsIDEwODEyOSwgMTA4MTM0LCAxMDgxMzksIAorICAgIDEwODE0NCwgMTA4MTQ5LCAxMDgxNTQsIDEwODE1OSwgMTA4MTY0LCAxMDgxNjksIDEwODE3NCwgMTA4MTc5LCAxMDgxODQsIAorICAgIDEwODE4OSwgMTA4MTk0LCAxMDgxOTksIDEwODIwNiwgMTA4MjExLCAxMDgyMTYsIDEwODIyMSwgMTA4MjI2LCAxMDgyMzEsIAorICAgIDEwODIzNiwgMTA4MjQxLCAxMDgyNDYsIDEwODI1MSwgMTA4MjU2LCAxMDgyNjEsIDEwODI2NiwgMTA4MjcxLCAxMDgyNzgsIAorICAgIDEwODI4MywgMTA4Mjg4LCAxMDgyOTUsIDEwODMwMCwgMTA4MzA1LCAxMDgzMTAsIDEwODMxNSwgMTA4MzIwLCAxMDgzMjUsIAorICAgIDEwODMzMCwgMTA4MzM1LCAxMDgzNDAsIDEwODM0NSwgMTA4MzUyLCAxMDgzNTcsIDEwODM2MiwgMTA4MzY3LCAxMDgzNzIsIAorICAgIDEwODM3NywgMTA4Mzg0LCAxMDgzOTEsIDEwODM5NiwgMTA4NDAxLCAxMDg0MDYsIDEwODQxMSwgMTA4NDE2LCAxMDg0MjEsIAorICAgIDEwODQyNiwgMTA4NDMxLCAxMDg0MzYsIDEwODQ0MSwgMTA4NDQ2LCAxMDg0NTEsIDEwODQ1NiwgMTA4NDYxLCAxMDg0NjYsIAorICAgIDEwODQ3MSwgMTA4NDc2LCAxMDg0ODEsIDEwODQ4NiwgMTA4NDkxLCAxMDg0OTYsIDEwODUwMSwgMTA4NTA2LCAxMDg1MTEsIAorICAgIDEwODUxNiwgMTA4NTIxLCAxMDg1MjYsIDEwODUzMSwgMTA4NTM2LCAxMDg1NDEsIDEwODU0NiwgMTA4NTUxLCAxMDg1NTYsIAorICAgIDEwODU2MSwgMTA4NTY2LCAxMDg1NzEsIDEwODU3OCwgMTA4NTgzLCAxMDg1ODgsIDEwODU5MywgMTA4NTk4LCAxMDg2MDMsIAorICAgIDEwODYwOCwgMTA4NjEzLCAxMDg2MTgsIDEwODYyMywgMTA4NjI4LCAxMDg2MzMsIDEwODYzOCwgMTA4NjQzLCAxMDg2NDgsIAorICAgIDEwODY1MywgMTA4NjU4LCAxMDg2NjMsIDEwODY2OCwgMTA4NjczLCAxMDg2NzgsIDEwODY4MywgMTA4Njg4LCAxMDg2OTMsIAorICAgIDEwODY5OCwgMTA4NzAzLCAxMDg3MDgsIDEwODcxMywgMTA4NzE4LCAxMDg3MjMsIDEwODcyOCwgMTA4NzMzLCAxMDg3MzgsIAorICAgIDEwODc0MywgMTA4NzQ4LCAxMDg3NTMsIDEwODc1OCwgMTA4NzYzLCAxMDg3NjgsIDEwODc3MywgMTA4Nzc4LCAxMDg3ODMsIAorICAgIDEwODc4OCwgMTA4NzkzLCAxMDg3OTgsIDEwODgwMywgMTA4ODA4LCAxMDg4MTMsIDEwODgxOCwgMTA4ODIzLCAxMDg4MjgsIAorICAgIDEwODgzMywgMTA4ODM4LCAxMDg4NDMsIDEwODg0OCwgMTA4ODUzLCAxMDg4NTgsIDEwODg2MywgMTA4ODY4LCAxMDg4NzUsIAorICAgIDEwODg4MCwgMTA4ODg1LCAxMDg4OTAsIDEwODg5NSwgMTA4OTAwLCAxMDg5MDUsIDEwODkwOSwgMTA4OTE0LCAxMDg5MTksIAorICAgIDEwODkyNCwgMTA4OTI5LCAxMDg5MzQsIDEwODkzOSwgMTA4OTQ0LCAxMDg5NDksIDEwODk1NCwgMTA4OTU5LCAxMDg5NjQsIAorICAgIDEwODk2OSwgMTA4OTc0LCAxMDg5NzksIDEwODk4NiwgMTA4OTkxLCAxMDg5OTYsIDEwOTAwMiwgMTA5MDA3LCAxMDkwMTIsIAorICAgIDEwOTAxNywgMTA5MDIyLCAxMDkwMjcsIDEwOTAzMiwgMTA5MDM3LCAxMDkwNDIsIDEwOTA0NywgMTA5MDUyLCAxMDkwNTcsIAorICAgIDEwOTA2MiwgMTA5MDY3LCAxMDkwNzIsIDEwOTA3NywgMTA5MDgyLCAxMDkwODcsIDEwOTA5MiwgMTA5MDk3LCAxMDkxMDIsIAorICAgIDEwOTEwNywgMTA5MTEyLCAxMDkxMTcsIDEwOTEyMiwgMTA5MTI3LCAxMDkxMzIsIDEwOTEzNywgMTA5MTQyLCAxMDkxNDcsIAorICAgIDEwOTE1MiwgMTA5MTU3LCAxMDkxNjIsIDEwOTE2NywgMTA5MTcyLCAxMDkxNzcsIDEwOTE4MiwgMTA5MTg3LCAxMDkxOTIsIAorICAgIDEwOTE5NywgMTA5MjAyLCAxMDkyMDcsIDEwOTIxMiwgMTA5MjE3LCAxMDkyMjQsIDEwOTIyOSwgMTA5MjM0LCAxMDkyNDEsIAorICAgIDEwOTI0OCwgMTA5MjUzLCAxMDkyNTgsIDEwOTI2MywgMTA5MjY4LCAxMDkyNzMsIDEwOTI3OCwgMTA5MjgzLCAxMDkyODgsIAorICAgIDEwOTI5MywgMTA5Mjk4LCAxMDkzMDMsIDEwOTMwOCwgMTA5MzEzLCAxMDkzMTgsIDEwOTMyMywgMTA5MzI4LCAxMDkzMzMsIAorICAgIDEwOTMzOCwgMTA5MzQzLCAxMDkzNDgsIDEwOTM1MywgMTA5MzU4LCAxMDkzNjMsIDEwOTM2OCwgMTA5MzczLCAxMDkzODAsIAorICAgIDEwOTM4NSwgMTA5MzkwLCAxMDkzOTUsIDEwOTQwMCwgMTA5NDA1LCAxMDk0MTAsIDEwOTQxNSwgMTA5NDIwLCAxMDk0MjUsIAorICAgIDEwOTQzMCwgMTA5NDM1LCAxMDk0NDAsIDEwOTQ0NSwgMTA5NDUwLCAxMDk0NTUsIDEwOTQ2MCwgMTA5NDY1LCAxMDk0NzAsIAorICAgIDEwOTQ3NywgMTA5NDgyLCAxMDk0ODcsIDEwOTQ5MiwgMTA5NDk3LCAxMDk1MDIsIDEwOTUwNywgMTA5NTEyLCAxMDk1MTgsIAorICAgIDEwOTUyMywgMTA5NTI4LCAxMDk1MzMsIDEwOTUzOCwgMTA5NTQzLCAxMDk1NDgsIDEwOTU1MywgMTA5NTU4LCAxMDk1NjUsIAorICAgIDEwOTU3MiwgMTA5NTc3LCAxMDk1ODIsIDEwOTU4NiwgMTA5NTkxLCAxMDk1OTUsIDEwOTU5OSwgMTA5NjA0LCAxMDk2MTEsIAorICAgIDEwOTYxNiwgMTA5NjIxLCAxMDk2MzAsIDEwOTYzNSwgMTA5NjQwLCAxMDk2NDUsIDEwOTY1MCwgMTA5NjU3LCAxMDk2NjQsIAorICAgIDEwOTY2OSwgMTA5Njc0LCAxMDk2NzksIDEwOTY4NCwgMTA5NjkxLCAxMDk2OTYsIDEwOTcwMSwgMTA5NzA2LCAxMDk3MTEsIAorICAgIDEwOTcxNiwgMTA5NzIxLCAxMDk3MjYsIDEwOTczMSwgMTA5NzM2LCAxMDk3NDEsIDEwOTc0NiwgMTA5NzUxLCAxMDk3NTgsIAorICAgIDEwOTc2MiwgMTA5NzY3LCAxMDk3NzIsIDEwOTc3NywgMTA5NzgyLCAxMDk3ODYsIDEwOTc5MSwgMTA5Nzk2LCAxMDk4MDEsIAorICAgIDEwOTgwNiwgMTA5ODExLCAxMDk4MTYsIDEwOTgyMSwgMTA5ODI2LCAxMDk4MzEsIDEwOTgzNywgMTA5ODQzLCAxMDk4NDksIAorICAgIDEwOTg1NSwgMTA5ODYxLCAxMDk4NjcsIDEwOTg3MywgMTA5ODc5LCAxMDk4ODUsIDEwOTg5MSwgMTA5ODk3LCAxMDk5MDMsIAorICAgIDEwOTkwOCwgMTA5OTE0LCAxMDk5MjAsIDEwOTkyNiwgMTA5OTMyLCAxMDk5MzgsIDEwOTk0NCwgMTA5OTUwLCAxMDk5NTYsIAorICAgIDEwOTk2MiwgMTA5OTY4LCAxMDk5NzQsIDEwOTk3OSwgMTA5OTg1LCAxMDk5OTEsIDEwOTk5NywgMTEwMDAzLCAxMTAwMDksIAorICAgIDExMDAxNSwgMTEwMDIxLCAxMTAwMjcsIDExMDAzMywgMTEwMDM5LCAxMTAwNDUsIDExMDA1MSwgMTEwMDU3LCAxMTAwNjMsIAorICAgIDExMDA2OSwgMTEwMDc1LCAxMTAwODEsIDExMDA4NywgMTEwMDkzLCAxMTAwOTksIDExMDEwNCwgMTEwMTEwLCAxMTAxMTYsIAorICAgIDExMDEyMiwgMTEwMTI4LCAxMTAxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDE0MCwgMTEwMTQzLCAxMTAxNDcsIDExMDE1MSwgMTEwMTU1LCAxMTAxNTgsIAorICAgIDExMDE2MiwgMTEwMTY3LCAxMTAxNzEsIDExMDE3NSwgMTEwMTc5LCAxMTAxODMsIDExMDE4NywgMTEwMTkyLCAxMTAxOTcsIAorICAgIDExMDIwMSwgMTEwMjA1LCAxMTAyMDgsIDExMDIxMiwgMTEwMjE3LCAxMTAyMjIsIDExMDIyNiwgMTEwMjMwLCAxMTAyMzQsIAorICAgIDExMDIzOCwgMTEwMjQyLCAxMTAyNDYsIDExMDI1MCwgMTEwMjU0LCAxMTAyNTgsIDExMDI2MiwgMTEwMjY1LCAxMTAyNjksIAorICAgIDExMDI3MywgMTEwMjc3LCAxMTAyODEsIDExMDI4NSwgMTEwMjg5LCAxMTAyOTUsIDExMDI5OCwgMTEwMzAyLCAxMTAzMDYsIAorICAgIDExMDMxMCwgMTEwMzE0LCAxMTAzMTgsIDExMDMyMiwgMTEwMzI2LCAxMTAzMzAsIDExMDMzNCwgMTEwMzM5LCAxMTAzNDQsIAorICAgIDExMDM1MCwgMTEwMzU0LCAxMTAzNTgsIDExMDM2MiwgMTEwMzY2LCAxMTAzNzAsIDExMDM3NCwgMTEwMzc5LCAxMTAzODIsIAorICAgIDExMDM4NiwgMTEwMzkwLCAxMTAzOTQsIDExMDM5OCwgMTEwNDA0LCAxMTA0MDgsIDExMDQxMiwgMTEwNDE2LCAxMTA0MjAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDQyNCwgMTEwNDI4LCAxMTA0MzIsIDExMDQzOCwgMTEwNDQ0LCAKKyAgICAxMTA0NDgsIDExMDQ1MywgMTEwNDU4LCAxMTA0NjMsIDExMDQ2OCwgMTEwNDcyLCAxMTA0NzcsIDExMDQ4MiwgMTEwNDg3LCAKKyAgICAxMTA0OTEsIDExMDQ5NiwgMTEwNTAxLCAxMTA1MDYsIDExMDUxMCwgMTEwNTE1LCAxMTA1MjAsIDExMDUyNSwgMTEwNTMwLCAKKyAgICAxMTA1MzUsIDExMDU0MCwgMTEwNTQ1LCAxMTA1NTAsIDExMDU1NCwgMTEwNTU5LCAxMTA1NjQsIDExMDU2OSwgMTEwNTc0LCAKKyAgICAxMTA1NzksIDExMDU4NCwgMTEwNTg5LCAxMTA1OTQsIDExMDU5OSwgMTEwNjA0LCAxMTA2MDksIDExMDYxNiwgMTEwNjIxLCAKKyAgICAxMTA2MjgsIDExMDYzMywgMTEwNjM4LCAxMTA2NDMsIDExMDY0OCwgMTEwNjUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA2NTgsIDExMDY2MiwgMTEwNjY4LCAxMTA2NzEsIDExMDY3NCwgMTEwNjc4LCAKKyAgICAxMTA2ODIsIDExMDY4NiwgMTEwNjkwLCAxMTA2OTQsIDExMDY5OCwgMTEwNzAyLCAxMTA3MDgsIDExMDcxNCwgMTEwNzIwLCAKKyAgICAxMTA3MjYsIDExMDczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTEwNzM4LCAxMTA3NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDc0OSwgMTEwNzU0LCAxMTA3NTksIAorICAgIDExMDc2NCwgMTEwNzcxLCAxMTA3NzgsIDExMDc4NSwgMTEwNzkyLCAxMTA3OTcsIDExMDgwMiwgMTEwODA3LCAxMTA4MTIsIAorICAgIDExMDgxOSwgMTEwODI0LCAxMTA4MzEsIDExMDgzOCwgMTEwODQzLCAxMTA4NDgsIDExMDg1MywgMTEwODYwLCAxMTA4NjUsIAorICAgIDExMDg3MCwgMTEwODc3LCAxMTA4ODQsIDExMDg4OSwgMTEwODk0LCAxMTA4OTksIDExMDkwNiwgMTEwOTEzLCAxMTA5MjAsIAorICAgIDExMDkyNSwgMTEwOTMwLCAxMTA5MzcsIDExMDk0NCwgMTEwOTUxLCAxMTA5NTgsIDExMDk2MywgMTEwOTY4LCAxMTA5NzMsIAorICAgIDExMDk4MCwgMTEwOTg1LCAxMTA5OTAsIDExMDk5NSwgMTExMDAyLCAxMTEwMTEsIDExMTAxOCwgMTExMDIzLCAxMTEwMjgsIAorICAgIDExMTAzMywgMTExMDM4LCAxMTEwNDMsIDExMTA0OCwgMTExMDU3LCAxMTEwNjQsIDExMTA2OSwgMTExMDc2LCAxMTEwODMsIAorICAgIDExMTA4OCwgMTExMDkzLCAxMTEwOTgsIDExMTEwNSwgMTExMTEwLCAxMTExMTcsIDExMTEyNCwgMTExMTI5LCAxMTExMzQsIAorICAgIDExMTEzOSwgMTExMTQ2LCAxMTExNTMsIDExMTE1OCwgMTExMTYzLCAxMTExNzAsIDExMTE3NywgMTExMTg0LCAxMTExODksIAorICAgIDExMTE5NCwgMTExMTk5LCAxMTEyMDQsIDExMTIxMSwgMTExMjIwLCAxMTEyMjksIDExMTIzNCwgMTExMjQxLCAxMTEyNTAsIAorICAgIDExMTI1NSwgMTExMjYwLCAxMTEyNjUsIDExMTI3MCwgMTExMjc3LCAxMTEyODQsIDExMTI5MSwgMTExMjk4LCAxMTEzMDMsIAorICAgIDExMTMwOCwgMTExMzEzLCAxMTEzMjAsIDExMTMyNywgMTExMzM0LCAxMTEzMzksIDExMTM0NCwgMTExMzUxLCAxMTEzNTYsIAorICAgIDExMTM2MywgMTExMzY4LCAxMTEzNzUsIDExMTM4MCwgMTExMzg3LCAxMTEzOTQsIDExMTM5OSwgMTExNDA0LCAxMTE0MDksIAorICAgIDExMTQxNCwgMTExNDE5LCAxMTE0MjQsIDExMTQyOSwgMTExNDM0LCAxMTE0MzksIDExMTQ0NiwgMTExNDUzLCAxMTE0NjAsIAorICAgIDExMTQ2NywgMTExNDc0LCAxMTE0ODMsIDExMTQ4OCwgMTExNDkzLCAxMTE1MDAsIDExMTUwNywgMTExNTEyLCAxMTE1MTksIAorICAgIDExMTUyNiwgMTExNTMzLCAxMTE1NDAsIDExMTU0NywgMTExNTU0LCAxMTE1NTksIDExMTU2NCwgMTExNTY5LCAxMTE1NzQsIAorICAgIDExMTU3OSwgMTExNTg4LCAxMTE1OTcsIDExMTYwNiwgMTExNjE1LCAxMTE2MjQsIDExMTYzMywgMTExNjQyLCAxMTE2NTEsIAorICAgIDExMTY1NiwgMTExNjY3LCAxMTE2NzgsIDExMTY4NywgMTExNjkyLCAxMTE2OTcsIDExMTcwMiwgMTExNzA3LCAxMTE3MTYsIAorICAgIDExMTcyMywgMTExNzMwLCAxMTE3MzcsIDExMTc0NCwgMTExNzUxLCAxMTE3NTgsIDExMTc2NywgMTExNzc2LCAxMTE3ODcsIAorICAgIDExMTc5NiwgMTExODA3LCAxMTE4MTYsIDExMTgyMywgMTExODMyLCAxMTE4NDMsIDExMTg1MiwgMTExODYxLCAxMTE4NzAsIAorICAgIDExMTg3OSwgMTExODg2LCAxMTE4OTMsIDExMTkwMCwgMTExOTA5LCAxMTE5MTgsIDExMTkyOSwgMTExOTM4LCAxMTE5NDcsIAorICAgIDExMTk1OCwgMTExOTYzLCAxMTE5NjgsIDExMTk3OSwgMTExOTg3LCAxMTE5OTYsIDExMjAwNSwgMTEyMDE0LCAxMTIwMjUsIAorICAgIDExMjAzNCwgMTEyMDQzLCAxMTIwNTQsIDExMjA2NSwgMTEyMDc2LCAxMTIwODcsIDExMjA5OCwgMTEyMTA5LCAxMTIxMTYsIAorICAgIDExMjEyMywgMTEyMTMwLCAxMTIxMzcsIDExMjE0OCwgMTEyMTU3LCAxMTIxNjQsIDExMjE3MSwgMTEyMTc4LCAxMTIxODksIAorICAgIDExMjIwMCwgMTEyMjExLCAxMTIyMjIsIDExMjIzMywgMTEyMjQ0LCAxMTIyNTUsIDExMjI2NiwgMTEyMjczLCAxMTIyODAsIAorICAgIDExMjI4OSwgMTEyMjk4LCAxMTIzMDUsIDExMjMxMiwgMTEyMzE5LCAxMTIzMjgsIDExMjMzNywgMTEyMzQ2LCAxMTIzNTMsIAorICAgIDExMjM2MiwgMTEyMzcxLCAxMTIzODAsIDExMjM4NywgMTEyMzk0LCAxMTIzOTksIDExMjQwNSwgMTEyNDEyLCAxMTI0MTksIAorICAgIDExMjQyNiwgMTEyNDMzLCAxMTI0NDAsIDExMjQ0NywgMTEyNDU2LCAxMTI0NjUsIDExMjQ3NCwgMTEyNDgzLCAxMTI0OTAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjQ5OSwgMTEyNTA1LCAxMTI1MTAsIDExMjUxNSwgMTEyNTIyLCAKKyAgICAxMTI1MjgsIDExMjUzNCwgMTEyNTQwLCAxMTI1NDYsIDExMjU1MiwgMTEyNTU4LCAxMTI1NjQsIDExMjU2OCwgMTEyNTcyLCAKKyAgICAxMTI1NzgsIDExMjU4NCwgMTEyNTkwLCAxMTI1OTQsIDExMjU5OSwgMTEyNjA0LCAxMTI2MDgsIDExMjYxMiwgMTEyNjE1LCAKKyAgICAxMTI2MjEsIDExMjYyNywgMTEyNjMzLCAxMTI2MzksIDExMjY0NSwgMTEyNjUxLCAxMTI2NTcsIDExMjY2MywgMTEyNjY5LCAKKyAgICAxMTI2NzksIDExMjY4OSwgMTEyNjk1LCAxMTI3MDEsIDExMjcxMSwgMTEyNzIxLCAxMTI3MjcsIDAsIDAsIDExMjczMywgCisgICAgMTEyNzQxLCAxMTI3NDYsIDExMjc1MSwgMTEyNzU3LCAxMTI3NjMsIDExMjc2OSwgMTEyNzc1LCAxMTI3ODEsIDExMjc4NywgCisgICAgMTEyNzk0LCAxMTI4MDEsIDExMjgwNywgMTEyODEzLCAxMTI4MTksIDExMjgyNSwgMTEyODMxLCAxMTI4MzcsIDExMjg0MywgCisgICAgMTEyODQ5LCAxMTI4NTQsIDExMjg2MCwgMTEyODY2LCAxMTI4NzIsIDExMjg3OCwgMTEyODg0LCAxMTI4OTMsIDExMjg5OSwgCisgICAgMTEyOTA0LCAxMTI5MTIsIDExMjkxOSwgMTEyOTI2LCAxMTI5MzUsIDExMjk0NCwgMTEyOTUzLCAxMTI5NjIsIDExMjk3MSwgCisgICAgMTEyOTgwLCAxMTI5ODksIDExMjk5OCwgMTEzMDA4LCAxMTMwMTgsIDExMzAyNiwgMTEzMDM0LCAxMTMwNDMsIDExMzA1MiwgCisgICAgMTEzMDU4LCAxMTMwNjQsIDExMzA3MCwgMTEzMDc2LCAxMTMwODQsIDExMzA5MiwgMTEzMDk2LCAxMTMxMDIsIDExMzEwNywgCisgICAgMTEzMTEzLCAxMTMxMTksIDExMzEyNSwgMTEzMTMxLCAxMTMxMzcsIDExMzE0NiwgMTEzMTUxLCAxMTMxNTgsIDExMzE2MywgCisgICAgMTEzMTY4LCAxMTMxNzMsIDExMzE3OSwgMTEzMTg1LCAxMTMxOTEsIDExMzE5OCwgMTEzMjAzLCAxMTMyMDgsIDExMzIxMywgCisgICAgMTEzMjE4LCAxMTMyMjMsIDExMzIyOSwgMTEzMjM1LCAxMTMyNDEsIDExMzI0NywgMTEzMjUzLCAxMTMyNTksIDExMzI2NSwgCisgICAgMTEzMjcxLCAxMTMyNzYsIDExMzI4MSwgMTEzMjg2LCAxMTMyOTEsIDExMzI5NiwgMTEzMzAxLCAxMTMzMDYsIDExMzMxMSwgCisgICAgMTEzMzE3LCAxMTMzMjMsIDExMzMyOCwgMTEzMzMzLCAxMTMzMzgsIDExMzM0MywgMTEzMzQ4LCAxMTMzNTQsIDExMzM2MSwgCisgICAgMTEzMzY1LCAxMTMzNjksIDExMzM3MywgMTEzMzc3LCAxMTMzODEsIDExMzM4NSwgMTEzMzg5LCAxMTMzOTMsIDExMzQwMSwgCisgICAgMTEzNDExLCAxMTM0MTUsIDExMzQxOSwgMTEzNDI1LCAxMTM0MzEsIDExMzQzNywgMTEzNDQzLCAxMTM0NDksIDExMzQ1NSwgCisgICAgMTEzNDYxLCAxMTM0NjcsIDExMzQ3MywgMTEzNDc5LCAxMTM0ODUsIDExMzQ5MSwgMTEzNDk3LCAxMTM1MDMsIDExMzUwNywgCisgICAgMTEzNTExLCAxMTM1MTgsIDExMzUyNCwgMTEzNTMwLCAxMTM1MzYsIDExMzU0MSwgMTEzNTQ4LCAxMTM1NTMsIDExMzU1OSwgCisgICAgMTEzNTY1LCAxMTM1NzEsIDExMzU3NywgMTEzNTgyLCAxMTM1ODYsIDExMzU5MiwgMTEzNTk2LCAxMTM2MDAsIDExMzYwNCwgCisgICAgMTEzNjEwLCAxMTM2MTYsIDExMzYyMCwgMTEzNjI2LCAxMTM2MzIsIDExMzYzOCwgMTEzNjQ0LCAxMTM2NTAsIDExMzY1OCwgCisgICAgMTEzNjY2LCAxMTM2NzIsIDExMzY3OCwgMTEzNjg0LCAxMTM2OTAsIDExMzcwMiwgMTEzNzE0LCAxMTM3MjgsIDExMzc0MCwgCisgICAgMTEzNzUyLCAxMTM3NjYsIDExMzc4MCwgMTEzNzk0LCAxMTM3OTgsIDExMzgwNiwgMTEzODE0LCAxMTM4MTksIDExMzgyMywgCisgICAgMTEzODI3LCAxMTM4MzEsIDExMzgzNSwgMTEzODM5LCAxMTM4NDMsIDExMzg0NywgMTEzODUzLCAxMTM4NTksIDExMzg2NSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzODcxLCAxMTM4NzcsIDExMzg4MywgMTEzODg5LCAxMTM4OTUsIAorICAgIDExMzkwMSwgMTEzOTA3LCAxMTM5MTMsIDExMzkxOSwgMTEzOTI1LCAxMTM5MzEsIDExMzkzNywgMTEzOTQzLCAxMTM5NDksIAorICAgIDExMzk1NSwgMTEzOTYxLCAxMTM5NjcsIDExMzk3MywgMTEzOTc5LCAxMTM5ODUsIDExMzk5MSwgMTEzOTk3LCAxMTQwMDMsIAorICAgIDExNDAwOSwgMTE0MDE1LCAxMTQwMjEsIDExNDAyNywgMTE0MDMzLCAxMTQwMzksIDExNDA0NSwgMTE0MDUxLCAxMTQwNTcsIAorICAgIDExNDA2MywgMTE0MDY5LCAxMTQwNzUsIDExNDA4MSwgMTE0MDg3LCAxMTQwOTMsIDExNDA5OSwgMTE0MTA1LCAxMTQxMTEsIAorICAgIDExNDExNywgMTE0MTIzLCAxMTQxMjksIDExNDEzNSwgMTE0MTQxLCAxMTQxNDcsIDExNDE1MywgMTE0MTU5LCAxMTQxNjUsIAorICAgIDExNDE3MSwgMTE0MTc3LCAxMTQxODMsIDExNDE4OSwgMTE0MTk1LCAxMTQyMDEsIDExNDIwNywgMTE0MjEzLCAxMTQyMTksIAorICAgIDExNDIyNSwgMTE0MjMxLCAxMTQyMzcsIDExNDI0MywgMTE0MjQ5LCAxMTQyNTUsIDExNDI2MSwgMTE0MjY3LCAxMTQyNzIsIAorICAgIDExNDI3NywgMTE0MjgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQyODYsIDExNDI5MSwgMTE0Mjk4LCAKKyAgICAxMTQzMDUsIDExNDMxMiwgMTE0MzE5LCAxMTQzMjQsIDExNDMyOCwgMTE0MzM0LCAxMTQzMzgsIDExNDM0MiwgMTE0MzQ4LCAKKyAgICAxMTQzNTIsIDExNDM1NiwgMTE0MzYwLCAxMTQzNjYsIDExNDM3MywgMTE0Mzc3LCAxMTQzODEsIDExNDM4NSwgMTE0Mzg5LCAKKyAgICAxMTQzOTMsIDExNDM5NywgMTE0NDAzLCAxMTQ0MDcsIDExNDQxMSwgMTE0NDE1LCAxMTQ0MTksIDExNDQyMywgMTE0NDI3LCAKKyAgICAxMTQ0MzEsIDExNDQzNSwgMTE0NDM5LCAxMTQ0NDMsIDExNDQ0NywgMTE0NDUxLCAxMTQ0NTYsIDExNDQ2MCwgMTE0NDY0LCAKKyAgICAxMTQ0NjgsIDExNDQ3MiwgMTE0NDc2LCAxMTQ0ODAsIDExNDQ4NCwgMTE0NDg4LCAxMTQ0OTIsIDExNDQ5OSwgMTE0NTAzLCAKKyAgICAxMTQ1MTEsIDExNDUxNSwgMTE0NTE5LCAxMTQ1MjMsIDExNDUyNywgMTE0NTMxLCAxMTQ1MzUsIDExNDUzOSwgMTE0NTQ2LCAKKyAgICAxMTQ1NTAsIDExNDU1NCwgMTE0NTU4LCAxMTQ1NjIsIDExNDU2NiwgMTE0NTcyLCAxMTQ1NzYsIDExNDU4MiwgMTE0NTg2LCAKKyAgICAxMTQ1OTAsIDExNDU5NCwgMTE0NTk4LCAxMTQ2MDIsIDExNDYwNiwgMTE0NjEwLCAxMTQ2MTQsIDExNDYxOCwgMTE0NjIyLCAKKyAgICAxMTQ2MjYsIDExNDYzMCwgMTE0NjM0LCAxMTQ2MzgsIDExNDY0MiwgMTE0NjQ2LCAxMTQ2NTAsIDExNDY1NCwgMTE0NjU4LCAKKyAgICAxMTQ2NjYsIDExNDY3MCwgMTE0Njc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ2NzgsIDExNDY4NiwgCisgICAgMTE0Njk0LCAxMTQ3MDIsIDExNDcxMCwgMTE0NzE4LCAxMTQ3MjYsIDExNDczNCwgMTE0NzQyLCAxMTQ3NTAsIDExNDc1OCwgCisgICAgMTE0NzY2LCAxMTQ3NzQsIDExNDc4MiwgMTE0NzkwLCAxMTQ3OTgsIDExNDgwNiwgMTE0ODE0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ4MjIsIDExNDgyNiwgMTE0ODMxLCAxMTQ4MzYsIDExNDg0MSwgMTE0ODQ1LCAKKyAgICAxMTQ4NTAsIDExNDg1NSwgMTE0ODYwLCAxMTQ4NjQsIDExNDg2OSwgMTE0ODc0LCAxMTQ4NzgsIDExNDg4MiwgMTE0ODg3LCAKKyAgICAxMTQ4OTEsIDExNDg5NiwgMTE0OTAxLCAxMTQ5MDUsIDExNDkxMCwgMTE0OTE1LCAxMTQ5MTksIDExNDkyNCwgMTE0OTI5LCAKKyAgICAxMTQ5MzQsIDExNDkzOSwgMTE0OTQ0LCAxMTQ5NDgsIDExNDk1MywgMTE0OTU4LCAxMTQ5NjMsIDExNDk2NywgMTE0OTcyLCAKKyAgICAxMTQ5NzcsIDExNDk4MiwgMTE0OTg2LCAxMTQ5OTEsIDExNDk5NiwgMTE1MDAwLCAxMTUwMDQsIDExNTAwOSwgMTE1MDEzLCAKKyAgICAxMTUwMTgsIDExNTAyMywgMTE1MDI3LCAxMTUwMzIsIDExNTAzNywgMTE1MDQxLCAxMTUwNDYsIDExNTA1MSwgMTE1MDU2LCAKKyAgICAxMTUwNjEsIDExNTA2NiwgMTE1MDcwLCAxMTUwNzUsIDExNTA4MCwgMTE1MDg1LCAxMTUwODksIDExNTA5NCwgMTE1MDk5LCAKKyAgICAxMTUxMDQsIDExNTEwOCwgMTE1MTEzLCAxMTUxMTgsIDExNTEyMiwgMTE1MTI2LCAxMTUxMzEsIDExNTEzNSwgMTE1MTQwLCAKKyAgICAxMTUxNDUsIDExNTE0OSwgMTE1MTU0LCAxMTUxNTksIDExNTE2MywgMTE1MTY4LCAxMTUxNzMsIDExNTE3OCwgMTE1MTgzLCAKKyAgICAxMTUxODgsIDExNTE5MiwgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjExLCAxMTUyMTYsIDAsIDExNTIyMSwgCisgICAgMTE1MjI1LCAxMTUyMzAsIDExNTIzNSwgMTE1MjM5LCAxMTUyNDMsIDExNTI0OCwgMTE1MjUyLCAxMTUyNTcsIDExNTI2MiwgCisgICAgMTE1MjY2LCAxMTUyNzEsIDExNTI3NiwgMTE1MjgwLCAxMTUyODUsIDExNTI5MCwgMTE1Mjk1LCAxMTUzMDAsIDExNTMwNSwgCisgICAgMTE1MzEwLCAxMTUzMTYsIDExNTMyMiwgMTE1MzI4LCAxMTUzMzMsIDExNTMzOSwgMTE1MzQ1LCAxMTUzNTEsIDExNTM1NiwgCisgICAgMTE1MzYyLCAxMTUzNjgsIDExNTM3MywgMTE1Mzc4LCAxMTUzODQsIDExNTM4OSwgMTE1Mzk1LCAxMTU0MDEsIDExNTQwNiwgCisgICAgMTE1NDEyLCAxMTU0MTgsIDExNTQyMywgMTE1NDI5LCAxMTU0MzUsIDExNTQ0MSwgMTE1NDQ3LCAxMTU0NTMsIDExNTQ1OCwgCisgICAgMTE1NDY0LCAxMTU0NzAsIDExNTQ3NiwgMTE1NDgxLCAxMTU0ODcsIDExNTQ5MywgMTE1NDk5LCAxMTU1MDQsIDExNTUxMCwgCisgICAgMTE1NTE2LCAxMTU1MjEsIDExNTUyNiwgMTE1NTMyLCAxMTU1MzcsIDExNTU0MywgMTE1NTQ5LCAxMTU1NTQsIDExNTU2MCwgCisgICAgMTE1NTY2LCAxMTU1NzEsIDExNTU3NywgMTE1NTgzLCAxMTU1ODksIDExNTU5NSwgMTE1NjAxLCAwLCAxMTU2MDUsIAorICAgIDExNTYxMCwgMCwgMCwgMTE1NjE1LCAwLCAwLCAxMTU2MjAsIDExNTYyNSwgMCwgMCwgMTE1NjMwLCAxMTU2MzUsIDExNTYzOSwgCisgICAgMTE1NjQ0LCAwLCAxMTU2NDksIDExNTY1NCwgMTE1NjU5LCAxMTU2NjMsIDExNTY2OCwgMTE1NjczLCAxMTU2NzgsIAorICAgIDExNTY4MywgMTE1Njg4LCAxMTU2OTIsIDExNTY5NywgMTE1NzAyLCAwLCAxMTU3MDcsIDAsIDExNTcxMiwgMTE1NzE3LCAKKyAgICAxMTU3MjEsIDExNTcyNiwgMTE1NzMxLCAxMTU3MzUsIDExNTczOSwgMCwgMTE1NzQ0LCAxMTU3NDksIDExNTc1NCwgCisgICAgMTE1NzU4LCAxMTU3NjMsIDExNTc2OCwgMTE1NzcyLCAxMTU3NzcsIDExNTc4MiwgMTE1Nzg3LCAxMTU3OTIsIDExNTc5NywgCisgICAgMTE1ODAyLCAxMTU4MDgsIDExNTgxNCwgMTE1ODIwLCAxMTU4MjUsIDExNTgzMSwgMTE1ODM3LCAxMTU4NDMsIDExNTg0OCwgCisgICAgMTE1ODU0LCAxMTU4NjAsIDExNTg2NSwgMTE1ODcwLCAxMTU4NzYsIDExNTg4MSwgMTE1ODg3LCAxMTU4OTMsIDExNTg5OCwgCisgICAgMTE1OTA0LCAxMTU5MTAsIDExNTkxNSwgMTE1OTIxLCAxMTU5MjcsIDExNTkzMywgMTE1OTM5LCAxMTU5NDUsIDExNTk1MCwgCisgICAgMTE1OTU2LCAxMTU5NjIsIDExNTk2OCwgMTE1OTczLCAxMTU5NzksIDExNTk4NSwgMTE1OTkxLCAxMTU5OTYsIDExNjAwMiwgCisgICAgMTE2MDA4LCAxMTYwMTMsIDExNjAxOCwgMTE2MDI0LCAxMTYwMjksIDExNjAzNSwgMTE2MDQxLCAxMTYwNDYsIDExNjA1MiwgCisgICAgMTE2MDU4LCAxMTYwNjMsIDExNjA2OSwgMTE2MDc1LCAxMTYwODEsIDExNjA4NywgMTE2MDkzLCAxMTYwOTcsIDAsIAorICAgIDExNjEwMiwgMTE2MTA3LCAxMTYxMTEsIDExNjExNiwgMCwgMCwgMTE2MTIxLCAxMTYxMjYsIDExNjEzMSwgMTE2MTM1LCAKKyAgICAxMTYxMzksIDExNjE0NCwgMTE2MTQ4LCAxMTYxNTMsIDAsIDExNjE1OCwgMTE2MTYzLCAxMTYxNjgsIDExNjE3MiwgCisgICAgMTE2MTc3LCAxMTYxODIsIDExNjE4NywgMCwgMTE2MTkyLCAxMTYxOTYsIDExNjIwMSwgMTE2MjA2LCAxMTYyMTEsIAorICAgIDExNjIxNSwgMTE2MjIwLCAxMTYyMjUsIDExNjIzMCwgMTE2MjM0LCAxMTYyMzksIDExNjI0NCwgMTE2MjQ4LCAxMTYyNTIsIAorICAgIDExNjI1NywgMTE2MjYxLCAxMTYyNjYsIDExNjI3MSwgMTE2Mjc1LCAxMTYyODAsIDExNjI4NSwgMTE2Mjg5LCAxMTYyOTQsIAorICAgIDExNjI5OSwgMTE2MzA0LCAxMTYzMDksIDExNjMxNCwgMTE2MzE4LCAwLCAxMTYzMjMsIDExNjMyOCwgMTE2MzMyLCAKKyAgICAxMTYzMzcsIDAsIDExNjM0MiwgMTE2MzQ2LCAxMTYzNTEsIDExNjM1NiwgMTE2MzYwLCAwLCAxMTYzNjQsIDAsIDAsIDAsIAorICAgIDExNjM2OCwgMTE2MzczLCAxMTYzNzgsIDExNjM4MiwgMTE2Mzg3LCAxMTYzOTIsIDExNjM5NywgMCwgMTE2NDAyLCAKKyAgICAxMTY0MDYsIDExNjQxMSwgMTE2NDE2LCAxMTY0MjEsIDExNjQyNSwgMTE2NDMwLCAxMTY0MzUsIDExNjQ0MCwgMTE2NDQ0LCAKKyAgICAxMTY0NDksIDExNjQ1NCwgMTE2NDU4LCAxMTY0NjIsIDExNjQ2NywgMTE2NDcxLCAxMTY0NzYsIDExNjQ4MSwgMTE2NDg1LCAKKyAgICAxMTY0OTAsIDExNjQ5NSwgMTE2NDk5LCAxMTY1MDQsIDExNjUwOSwgMTE2NTE0LCAxMTY1MTksIDExNjUyNCwgMTE2NTI5LCAKKyAgICAxMTY1MzUsIDExNjU0MSwgMTE2NTQ3LCAxMTY1NTIsIDExNjU1OCwgMTE2NTY0LCAxMTY1NzAsIDExNjU3NSwgMTE2NTgxLCAKKyAgICAxMTY1ODcsIDExNjU5MiwgMTE2NTk3LCAxMTY2MDMsIDExNjYwOCwgMTE2NjE0LCAxMTY2MjAsIDExNjYyNSwgMTE2NjMxLCAKKyAgICAxMTY2MzcsIDExNjY0MiwgMTE2NjQ4LCAxMTY2NTQsIDExNjY2MCwgMTE2NjY2LCAxMTY2NzIsIDExNjY3NywgMTE2NjgzLCAKKyAgICAxMTY2ODksIDExNjY5NSwgMTE2NzAwLCAxMTY3MDYsIDExNjcxMiwgMTE2NzE4LCAxMTY3MjMsIDExNjcyOSwgMTE2NzM1LCAKKyAgICAxMTY3NDAsIDExNjc0NSwgMTE2NzUxLCAxMTY3NTYsIDExNjc2MiwgMTE2NzY4LCAxMTY3NzMsIDExNjc3OSwgMTE2Nzg1LCAKKyAgICAxMTY3OTAsIDExNjc5NiwgMTE2ODAyLCAxMTY4MDgsIDExNjgxNCwgMTE2ODIwLCAxMTY4MjQsIDExNjgyOSwgMTE2ODM0LCAKKyAgICAxMTY4MzksIDExNjg0MywgMTE2ODQ4LCAxMTY4NTMsIDExNjg1OCwgMTE2ODYyLCAxMTY4NjcsIDExNjg3MiwgMTE2ODc2LCAKKyAgICAxMTY4ODAsIDExNjg4NSwgMTE2ODg5LCAxMTY4OTQsIDExNjg5OSwgMTE2OTAzLCAxMTY5MDgsIDExNjkxMywgMTE2OTE3LCAKKyAgICAxMTY5MjIsIDExNjkyNywgMTE2OTMyLCAxMTY5MzcsIDExNjk0MiwgMTE2OTQ2LCAxMTY5NTEsIDExNjk1NiwgMTE2OTYxLCAKKyAgICAxMTY5NjUsIDExNjk3MCwgMTE2OTc1LCAxMTY5ODAsIDExNjk4NCwgMTE2OTg5LCAxMTY5OTQsIDExNjk5OCwgMTE3MDAyLCAKKyAgICAxMTcwMDcsIDExNzAxMSwgMTE3MDE2LCAxMTcwMjEsIDExNzAyNSwgMTE3MDMwLCAxMTcwMzUsIDExNzAzOSwgMTE3MDQ0LCAKKyAgICAxMTcwNDksIDExNzA1NCwgMTE3MDU5LCAxMTcwNjQsIDExNzA2OSwgMTE3MDc1LCAxMTcwODEsIDExNzA4NywgMTE3MDkyLCAKKyAgICAxMTcwOTgsIDExNzEwNCwgMTE3MTEwLCAxMTcxMTUsIDExNzEyMSwgMTE3MTI3LCAxMTcxMzIsIDExNzEzNywgMTE3MTQzLCAKKyAgICAxMTcxNDgsIDExNzE1NCwgMTE3MTYwLCAxMTcxNjUsIDExNzE3MSwgMTE3MTc3LCAxMTcxODIsIDExNzE4OCwgMTE3MTk0LCAKKyAgICAxMTcyMDAsIDExNzIwNiwgMTE3MjEyLCAxMTcyMTcsIDExNzIyMywgMTE3MjI5LCAxMTcyMzUsIDExNzI0MCwgMTE3MjQ2LCAKKyAgICAxMTcyNTIsIDExNzI1OCwgMTE3MjYzLCAxMTcyNjksIDExNzI3NSwgMTE3MjgwLCAxMTcyODUsIDExNzI5MSwgMTE3Mjk2LCAKKyAgICAxMTczMDIsIDExNzMwOCwgMTE3MzEzLCAxMTczMTksIDExNzMyNSwgMTE3MzMwLCAxMTczMzYsIDExNzM0MiwgMTE3MzQ4LCAKKyAgICAxMTczNTQsIDExNzM2MCwgMTE3MzY1LCAxMTczNzEsIDExNzM3NywgMTE3MzgzLCAxMTczODgsIDExNzM5NCwgMTE3NDAwLCAKKyAgICAxMTc0MDYsIDExNzQxMSwgMTE3NDE3LCAxMTc0MjMsIDExNzQyOCwgMTE3NDMzLCAxMTc0MzksIDExNzQ0NCwgMTE3NDUwLCAKKyAgICAxMTc0NTYsIDExNzQ2MSwgMTE3NDY3LCAxMTc0NzMsIDExNzQ3OCwgMTE3NDg0LCAxMTc0OTAsIDExNzQ5NiwgMTE3NTAyLCAKKyAgICAxMTc1MDgsIDExNzUxMywgMTE3NTE5LCAxMTc1MjUsIDExNzUzMSwgMTE3NTM2LCAxMTc1NDIsIDExNzU0OCwgMTE3NTU0LCAKKyAgICAxMTc1NTksIDExNzU2NSwgMTE3NTcxLCAxMTc1NzYsIDExNzU4MSwgMTE3NTg3LCAxMTc1OTIsIDExNzU5OCwgMTE3NjA0LCAKKyAgICAxMTc2MDksIDExNzYxNSwgMTE3NjIxLCAxMTc2MjYsIDExNzYzMiwgMTE3NjM4LCAxMTc2NDQsIDExNzY1MCwgMTE3NjU2LCAKKyAgICAxMTc2NjIsIDExNzY2OSwgMTE3Njc2LCAxMTc2ODMsIDExNzY4OSwgMTE3Njk2LCAxMTc3MDMsIDExNzcxMCwgMTE3NzE2LCAKKyAgICAxMTc3MjMsIDExNzczMCwgMTE3NzM2LCAxMTc3NDIsIDExNzc0OSwgMTE3NzU1LCAxMTc3NjIsIDExNzc2OSwgMTE3Nzc1LCAKKyAgICAxMTc3ODIsIDExNzc4OSwgMTE3Nzk1LCAxMTc4MDIsIDExNzgwOSwgMTE3ODE2LCAxMTc4MjMsIDExNzgzMCwgMTE3ODM2LCAKKyAgICAxMTc4NDMsIDExNzg1MCwgMTE3ODU3LCAxMTc4NjMsIDExNzg3MCwgMTE3ODc3LCAxMTc4ODQsIDExNzg5MCwgMTE3ODk3LCAKKyAgICAxMTc5MDQsIDExNzkxMCwgMTE3OTE2LCAxMTc5MjMsIDExNzkyOSwgMTE3OTM2LCAxMTc5NDMsIDExNzk0OSwgMTE3OTU2LCAKKyAgICAxMTc5NjMsIDExNzk2OSwgMTE3OTc2LCAxMTc5ODMsIDExNzk5MCwgMTE3OTk3LCAxMTgwMDQsIDExODAwOSwgMTE4MDE1LCAKKyAgICAxMTgwMjEsIDExODAyNywgMTE4MDMyLCAxMTgwMzgsIDExODA0NCwgMTE4MDUwLCAxMTgwNTUsIDExODA2MSwgMTE4MDY3LCAKKyAgICAxMTgwNzIsIDExODA3NywgMTE4MDgzLCAxMTgwODgsIDExODA5NCwgMTE4MTAwLCAxMTgxMDUsIDExODExMSwgMTE4MTE3LCAKKyAgICAxMTgxMjIsIDExODEyOCwgMTE4MTM0LCAxMTgxNDAsIDExODE0NiwgMTE4MTUyLCAxMTgxNTcsIDExODE2MywgMTE4MTY5LCAKKyAgICAxMTgxNzUsIDExODE4MCwgMTE4MTg2LCAxMTgxOTIsIDExODE5OCwgMTE4MjAzLCAxMTgyMDksIDExODIxNSwgMTE4MjIwLCAKKyAgICAxMTgyMjUsIDExODIzMSwgMTE4MjM2LCAxMTgyNDIsIDExODI0OCwgMTE4MjUzLCAxMTgyNTksIDExODI2NSwgMTE4MjcwLCAKKyAgICAxMTgyNzYsIDExODI4MiwgMTE4Mjg4LCAxMTgyOTQsIDExODMwMCwgMTE4MzA2LCAwLCAwLCAxMTgzMTMsIDExODMxOCwgCisgICAgMTE4MzIzLCAxMTgzMjgsIDExODMzMywgMTE4MzM4LCAxMTgzNDMsIDExODM0OCwgMTE4MzUzLCAxMTgzNTgsIDExODM2MywgCisgICAgMTE4MzY4LCAxMTgzNzMsIDExODM3OCwgMTE4MzgzLCAxMTgzODgsIDExODM5MywgMTE4Mzk4LCAxMTg0MDQsIDExODQwOSwgCisgICAgMTE4NDE0LCAxMTg0MTksIDExODQyNCwgMTE4NDI5LCAxMTg0MzQsIDExODQzOSwgMTE4NDQzLCAxMTg0NDgsIDExODQ1MywgCisgICAgMTE4NDU4LCAxMTg0NjMsIDExODQ2OCwgMTE4NDczLCAxMTg0NzgsIDExODQ4MywgMTE4NDg4LCAxMTg0OTMsIDExODQ5OCwgCisgICAgMTE4NTAzLCAxMTg1MDgsIDExODUxMywgMTE4NTE4LCAxMTg1MjMsIDExODUyOCwgMTE4NTM0LCAxMTg1MzksIDExODU0NCwgCisgICAgMTE4NTQ5LCAxMTg1NTQsIDExODU1OSwgMTE4NTY0LCAxMTg1NjksIDExODU3NSwgMTE4NTgwLCAxMTg1ODUsIDExODU5MCwgCisgICAgMTE4NTk1LCAxMTg2MDAsIDExODYwNSwgMTE4NjEwLCAxMTg2MTUsIDExODYyMCwgMTE4NjI1LCAxMTg2MzAsIDExODYzNSwgCisgICAgMTE4NjQwLCAxMTg2NDUsIDExODY1MCwgMTE4NjU1LCAxMTg2NjAsIDExODY2NSwgMTE4NjcwLCAxMTg2NzUsIDExODY4MCwgCisgICAgMTE4Njg1LCAxMTg2OTAsIDExODY5NiwgMTE4NzAxLCAxMTg3MDYsIDExODcxMSwgMTE4NzE2LCAxMTg3MjEsIDExODcyNiwgCisgICAgMTE4NzMxLCAxMTg3MzUsIDExODc0MCwgMTE4NzQ1LCAxMTg3NTAsIDExODc1NSwgMTE4NzYwLCAxMTg3NjUsIDExODc3MCwgCisgICAgMTE4Nzc1LCAxMTg3ODAsIDExODc4NSwgMTE4NzkwLCAxMTg3OTUsIDExODgwMCwgMTE4ODA1LCAxMTg4MTAsIDExODgxNSwgCisgICAgMTE4ODIwLCAxMTg4MjYsIDExODgzMSwgMTE4ODM2LCAxMTg4NDEsIDExODg0NiwgMTE4ODUxLCAxMTg4NTYsIDExODg2MSwgCisgICAgMTE4ODY3LCAxMTg4NzIsIDExODg3NywgMTE4ODgyLCAxMTg4ODcsIDExODg5MiwgMTE4ODk3LCAxMTg5MDMsIDExODkwOSwgCisgICAgMTE4OTE1LCAxMTg5MjEsIDExODkyNywgMTE4OTMzLCAxMTg5MzksIDExODk0NSwgMTE4OTUxLCAxMTg5NTcsIDExODk2MywgCisgICAgMTE4OTY5LCAxMTg5NzUsIDExODk4MSwgMTE4OTg3LCAxMTg5OTMsIDExODk5OSwgMTE5MDA2LCAxMTkwMTIsIDExOTAxOCwgCisgICAgMTE5MDI0LCAxMTkwMzAsIDExOTAzNiwgMTE5MDQyLCAxMTkwNDgsIDExOTA1MywgMTE5MDU5LCAxMTkwNjUsIDExOTA3MSwgCisgICAgMTE5MDc3LCAxMTkwODMsIDExOTA4OSwgMTE5MDk1LCAxMTkxMDEsIDExOTEwNywgMTE5MTEzLCAxMTkxMTksIDExOTEyNSwgCisgICAgMTE5MTMxLCAxMTkxMzcsIDExOTE0MywgMTE5MTQ5LCAxMTkxNTUsIDExOTE2MiwgMTE5MTY4LCAxMTkxNzQsIDExOTE4MCwgCisgICAgMTE5MTg2LCAxMTkxOTIsIDExOTE5OCwgMTE5MjA0LCAxMTkyMTEsIDExOTIxNywgMTE5MjIzLCAxMTkyMjksIDExOTIzNSwgCisgICAgMTE5MjQxLCAxMTkyNDcsIDExOTI1MywgMTE5MjU5LCAxMTkyNjUsIDExOTI3MSwgMTE5Mjc3LCAxMTkyODMsIDExOTI4OSwgCisgICAgMTE5Mjk1LCAxMTkzMDEsIDExOTMwNywgMTE5MzEzLCAxMTkzMTksIDExOTMyNSwgMTE5MzMxLCAxMTkzMzcsIDExOTM0MywgCisgICAgMTE5MzQ5LCAxMTkzNTYsIDExOTM2MiwgMTE5MzY4LCAxMTkzNzQsIDExOTM4MCwgMTE5Mzg2LCAxMTkzOTIsIDExOTM5OCwgCisgICAgMTE5NDAzLCAxMTk0MDksIDExOTQxNSwgMTE5NDIxLCAxMTk0MjcsIDExOTQzMywgMTE5NDM5LCAxMTk0NDUsIDExOTQ1MSwgCisgICAgMTE5NDU3LCAxMTk0NjMsIDExOTQ2OSwgMTE5NDc1LCAxMTk0ODEsIDExOTQ4NywgMTE5NDkzLCAxMTk0OTksIDExOTUwNSwgCisgICAgMTE5NTEyLCAxMTk1MTgsIDExOTUyNCwgMTE5NTMwLCAxMTk1MzYsIDExOTU0MiwgMTE5NTQ4LCAxMTk1NTQsIDExOTU2MSwgCisgICAgMTE5NTY3LCAxMTk1NzMsIDExOTU3OSwgMTE5NTg1LCAxMTk1OTEsIDExOTU5NywgMTE5NjA0LCAxMTk2MTEsIDExOTYxOCwgCisgICAgMTE5NjI1LCAxMTk2MzIsIDExOTYzOSwgMTE5NjQ2LCAxMTk2NTMsIDExOTY2MCwgMTE5NjY3LCAxMTk2NzQsIDExOTY4MSwgCisgICAgMTE5Njg4LCAxMTk2OTUsIDExOTcwMiwgMTE5NzA5LCAxMTk3MTYsIDExOTcyNCwgMTE5NzMxLCAxMTk3MzgsIDExOTc0NSwgCisgICAgMTE5NzUyLCAxMTk3NTksIDExOTc2NiwgMTE5NzczLCAxMTk3NzksIDExOTc4NiwgMTE5NzkzLCAxMTk4MDAsIDExOTgwNywgCisgICAgMTE5ODE0LCAxMTk4MjEsIDExOTgyOCwgMTE5ODM1LCAxMTk4NDIsIDExOTg0OSwgMTE5ODU2LCAxMTk4NjMsIDExOTg3MCwgCisgICAgMTE5ODc3LCAxMTk4ODQsIDExOTg5MSwgMTE5ODk4LCAxMTk5MDYsIDExOTkxMywgMTE5OTIwLCAxMTk5MjcsIDExOTkzNCwgCisgICAgMTE5OTQxLCAxMTk5NDgsIDExOTk1NSwgMTE5OTYzLCAxMTk5NzAsIDExOTk3NywgMTE5OTg0LCAxMTk5OTEsIDExOTk5OCwgCisgICAgMTIwMDA1LCAxMjAwMTAsIDAsIDAsIDEyMDAxNSwgMTIwMDIwLCAxMjAwMjQsIDEyMDAyOCwgMTIwMDMyLCAxMjAwMzYsIAorICAgIDEyMDA0MCwgMTIwMDQ0LCAxMjAwNDgsIDEyMDA1MiwgMTIwMDU2LCAxMjAwNjEsIDEyMDA2NSwgMTIwMDY5LCAxMjAwNzMsIAorICAgIDEyMDA3NywgMTIwMDgxLCAxMjAwODUsIDEyMDA4OSwgMTIwMDkzLCAxMjAwOTcsIDEyMDEwMiwgMTIwMTA2LCAxMjAxMTAsIAorICAgIDEyMDExNCwgMTIwMTE4LCAxMjAxMjIsIDEyMDEyNiwgMTIwMTMwLCAxMjAxMzQsIDEyMDEzOCwgMTIwMTQ0LCAxMjAxNDksIAorICAgIDEyMDE1NCwgMTIwMTU5LCAxMjAxNjQsIDEyMDE2OSwgMTIwMTc0LCAxMjAxNzksIDEyMDE4NCwgMTIwMTg5LCAxMjAxOTUsIAorICAgIDEyMDIwMCwgMTIwMjA1LCAxMjAyMTAsIDEyMDIxNSwgMTIwMjIwLCAxMjAyMjUsIDEyMDIzMCwgMTIwMjM1LCAxMjAyNDAsIAorICAgIDEyMDI0NCwgMTIwMjQ4LCAxMjAyNTIsIDAsIDEyMDI1NiwgMTIwMjYwLCAxMjAyNjQsIDEyMDI2OCwgMTIwMjcyLCAKICAgICAxMjAyNzYsIDEyMDI4MCwgMTIwMjg0LCAxMjAyODgsIDEyMDI5MiwgMTIwMjk2LCAxMjAzMDAsIDEyMDMwNCwgMTIwMzA4LCAKLSAgICAxMjAzMTIsIDEyMDMxNiwgMTIwMzIwLCAxMjAzMjYsIDEyMDMzMiwgMTIwMzM4LCAwLCAxMjAzNDQsIDEyMDM0OSwgMCwgCi0gICAgMTIwMzU0LCAwLCAwLCAxMjAzNTksIDAsIDEyMDM2NCwgMTIwMzY5LCAxMjAzNzQsIDEyMDM3OSwgMTIwMzg0LCAxMjAzODksIAotICAgIDEyMDM5NCwgMTIwMzk5LCAxMjA0MDQsIDEyMDQwOSwgMCwgMTIwNDE0LCAxMjA0MTksIDEyMDQyNCwgMTIwNDI5LCAwLCAKLSAgICAxMjA0MzQsIDAsIDEyMDQzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNDQ0LCAwLCAwLCAwLCAwLCAxMjA0NTAsIDAsIAotICAgIDEyMDQ1NiwgMCwgMTIwNDYyLCAwLCAxMjA0NjgsIDEyMDQ3NCwgMTIwNDgwLCAwLCAxMjA0ODYsIDEyMDQ5MiwgMCwgCi0gICAgMTIwNDk4LCAwLCAwLCAxMjA1MDQsIDAsIDEyMDUxMCwgMCwgMTIwNTE2LCAwLCAxMjA1MjIsIDAsIDEyMDUzMCwgMCwgCi0gICAgMTIwNTM4LCAxMjA1NDQsIDAsIDEyMDU1MCwgMCwgMCwgMTIwNTU2LCAxMjA1NjIsIDEyMDU2OCwgMTIwNTc0LCAwLCAKLSAgICAxMjA1ODAsIDEyMDU4NiwgMTIwNTkyLCAxMjA1OTgsIDEyMDYwNCwgMTIwNjEwLCAxMjA2MTYsIDAsIDEyMDYyMiwgCi0gICAgMTIwNjI4LCAxMjA2MzQsIDEyMDY0MCwgMCwgMTIwNjQ2LCAxMjA2NTIsIDEyMDY1OCwgMTIwNjY0LCAwLCAxMjA2NzIsIDAsIAotICAgIDEyMDY4MCwgMTIwNjg2LCAxMjA2OTIsIDEyMDY5OCwgMTIwNzA0LCAxMjA3MTAsIDEyMDcxNiwgMTIwNzIyLCAxMjA3MjgsIAotICAgIDEyMDczNCwgMCwgMTIwNzQwLCAxMjA3NDYsIDEyMDc1MiwgMTIwNzU4LCAxMjA3NjQsIDEyMDc3MCwgMTIwNzc2LCAKLSAgICAxMjA3ODIsIDEyMDc4OCwgMTIwNzk0LCAxMjA4MDAsIDEyMDgwNiwgMTIwODEyLCAxMjA4MTgsIDEyMDgyNCwgMTIwODMwLCAKLSAgICAxMjA4MzYsIDAsIDAsIDAsIDAsIDAsIDEyMDg0MiwgMTIwODQ3LCAxMjA4NTIsIDAsIDEyMDg1NywgMTIwODYyLCAxMjA4NjcsIAotICAgIDEyMDg3MiwgMTIwODc3LCAwLCAxMjA4ODIsIDEyMDg4NywgMTIwODkyLCAxMjA4OTcsIDEyMDkwMiwgMTIwOTA3LCAKLSAgICAxMjA5MTIsIDEyMDkxNywgMTIwOTIyLCAxMjA5MjcsIDEyMDkzMiwgMTIwOTM3LCAxMjA5NDIsIDEyMDk0NywgMTIwOTUyLCAKLSAgICAxMjA5NTcsIDEyMDk2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwOTY3LCAxMjA5NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyMDk4NSwgMTIwOTkyLCAxMjA5OTksIDEyMTAwNiwgMTIxMDEzLCAxMjEwMjAsIDEyMTAyNywgCi0gICAgMTIxMDMzLCAxMjEwNDAsIDEyMTA0NywgMTIxMDU0LCAxMjEwNjIsIDEyMTA3MCwgMTIxMDc4LCAxMjEwODYsIDEyMTA5NCwgCi0gICAgMTIxMTAyLCAxMjExMDksIDEyMTExNiwgMTIxMTIzLCAxMjExMzEsIDEyMTEzOSwgMTIxMTQ3LCAxMjExNTUsIDEyMTE2MywgCi0gICAgMTIxMTcxLCAxMjExNzgsIDEyMTE4NSwgMTIxMTkyLCAxMjEyMDAsIDEyMTIwOCwgMTIxMjE2LCAxMjEyMjQsIDEyMTIzMiwgCi0gICAgMTIxMjQwLCAxMjEyNDUsIDEyMTI1MCwgMTIxMjU1LCAxMjEyNjAsIDEyMTI2NSwgMTIxMjcwLCAxMjEyNzUsIDEyMTI4MCwgCi0gICAgMTIxMjg1LCAwLCAwLCAwLCAwLCAxMjEyOTAsIDEyMTI5NSwgMTIxMjk5LCAxMjEzMDMsIDEyMTMwNywgMTIxMzExLCAKLSAgICAxMjEzMTUsIDEyMTMxOSwgMTIxMzIzLCAxMjEzMjcsIDEyMTMzMSwgMTIxMzM1LCAxMjEzMzksIDEyMTM0MywgMTIxMzQ3LCAKLSAgICAxMjEzNTEsIDEyMTM1NSwgMTIxMzU5LCAxMjEzNjMsIDEyMTM2NywgMTIxMzcxLCAxMjEzNzUsIDEyMTM3OSwgMTIxMzgzLCAKLSAgICAxMjEzODcsIDEyMTM5MSwgMTIxMzk1LCAxMjEzOTksIDEyMTQwMywgMTIxNDA3LCAxMjE0MTEsIDEyMTQxNSwgMTIxNDE5LCAKLSAgICAxMjE0MjMsIDEyMTQyNywgMTIxNDMxLCAxMjE0MzUsIDEyMTQzOSwgMTIxNDQzLCAxMjE0NDcsIDEyMTQ1MSwgMTIxNDU1LCAKLSAgICAxMjE0NTksIDEyMTQ2MywgMTIxNDY3LCAxMjE0NzEsIDEyMTQ3NSwgMTIxNDc5LCAxMjE0ODMsIDEyMTQ4NywgMTIxNDkxLCAKLSAgICAxMjE0OTYsIDEyMTUwMCwgMTIxNTA0LCAxMjE1MDgsIDEyMTUxMiwgMTIxNTE2LCAxMjE1MjAsIDEyMTUyNCwgMTIxNTI4LCAKLSAgICAxMjE1MzIsIDEyMTUzNiwgMTIxNTQwLCAxMjE1NDQsIDEyMTU0OCwgMTIxNTUyLCAxMjE1NTYsIDEyMTU2MCwgMTIxNTY0LCAKLSAgICAxMjE1NjgsIDEyMTU3MiwgMTIxNTc2LCAxMjE1ODAsIDEyMTU4NCwgMTIxNTg4LCAxMjE1OTIsIDEyMTU5NiwgMTIxNjAwLCAKLSAgICAxMjE2MDQsIDEyMTYwOCwgMTIxNjEyLCAxMjE2MTYsIDEyMTYyMCwgMTIxNjI0LCAxMjE2MjgsIDEyMTYzMiwgMTIxNjM2LCAKLSAgICAxMjE2NDAsIDEyMTY0NCwgMTIxNjQ4LCAxMjE2NTIsIDEyMTY1NiwgMTIxNjYwLCAxMjE2NjQsIDEyMTY2OCwgMTIxNjcyLCAKLSAgICAxMjE2NzYsIDEyMTY4MCwgMTIxNjg0LCAxMjE2ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMTY5MiwgMTIxNjk4LCAxMjE3MDcsIDEyMTcxNSwgMTIxNzIzLCAxMjE3MzIsIDEyMTc0MSwgMTIxNzUwLCAxMjE3NTksIAotICAgIDEyMTc2OCwgMTIxNzc3LCAxMjE3ODYsIDEyMTc5NSwgMTIxODA0LCAxMjE4MTMsIDAsIDAsIDEyMTgyMiwgMTIxODMxLCAKLSAgICAxMjE4MzksIDEyMTg0NywgMTIxODU2LCAxMjE4NjUsIDEyMTg3NCwgMTIxODgzLCAxMjE4OTIsIDEyMTkwMSwgMTIxOTEwLCAKLSAgICAxMjE5MTksIDEyMTkyOCwgMTIxOTM3LCAwLCAwLCAxMjE5NDYsIDEyMTk1NSwgMTIxOTYzLCAxMjE5NzEsIDEyMTk4MCwgCi0gICAgMTIxOTg5LCAxMjE5OTgsIDEyMjAwNywgMTIyMDE2LCAxMjIwMjUsIDEyMjAzNCwgMTIyMDQzLCAxMjIwNTIsIDEyMjA2MSwgCi0gICAgMTIyMDcwLCAwLCAxMjIwNzcsIDEyMjA4NiwgMTIyMDk0LCAxMjIxMDIsIDEyMjExMSwgMTIyMTIwLCAxMjIxMjksIAotICAgIDEyMjEzOCwgMTIyMTQ3LCAxMjIxNTYsIDEyMjE2NSwgMTIyMTc0LCAxMjIxODMsIDEyMjE5MiwgMTIyMjAxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjIyMDgsIDEyMjIxNSwgMTIyMjIwLCAxMjIyMjQsIDEyMjIyOCwgMTIyMjMyLCAxMjIyMzcsIAotICAgIDEyMjI0MiwgMTIyMjQ3LCAxMjIyNTIsIDEyMjI1NywgMCwgMCwgMCwgMCwgMCwgMTIyMjYyLCAxMjIyNjcsIDEyMjI3MywgCi0gICAgMTIyMjc5LCAxMjIyODUsIDEyMjI5MCwgMTIyMjk2LCAxMjIzMDIsIDEyMjMwOCwgMTIyMzEzLCAxMjIzMTksIDEyMjMyNSwgCi0gICAgMTIyMzMwLCAxMjIzMzUsIDEyMjM0MSwgMTIyMzQ2LCAxMjIzNTIsIDEyMjM1OCwgMTIyMzYzLCAxMjIzNjksIDEyMjM3NSwgCi0gICAgMTIyMzgwLCAxMjIzODYsIDEyMjM5MiwgMTIyMzk4LCAxMjI0MDQsIDEyMjQxMCwgMTIyNDIxLCAxMjI0MjgsIDEyMjQzNCwgCi0gICAgMTIyNDM3LCAwLCAxMjI0NDAsIDEyMjQ0NSwgMTIyNDUxLCAxMjI0NTcsIDEyMjQ2MywgMTIyNDY4LCAxMjI0NzQsIAotICAgIDEyMjQ4MCwgMTIyNDg2LCAxMjI0OTEsIDEyMjQ5NywgMTIyNTAzLCAxMjI1MDgsIDEyMjUxMywgMTIyNTE5LCAxMjI1MjQsIAotICAgIDEyMjUzMCwgMTIyNTM2LCAxMjI1NDEsIDEyMjU0NywgMTIyNTUzLCAxMjI1NTgsIDEyMjU2NCwgMTIyNTcwLCAxMjI1NzYsIAotICAgIDEyMjU4MiwgMTIyNTg4LCAxMjI1OTEsIDEyMjU5NCwgMTIyNTk3LCAxMjI2MDAsIDEyMjYwMywgMTIyNjA2LCAxMjI2MTIsIAotICAgIDEyMjYxOSwgMTIyNjI2LCAxMjI2MzMsIDEyMjYzOSwgMTIyNjQ2LCAxMjI2NTMsIDEyMjY2MCwgMTIyNjY2LCAxMjI2NzMsIAotICAgIDEyMjY4MCwgMTIyNjg2LCAxMjI2OTIsIDEyMjY5OSwgMTIyNzA1LCAxMjI3MTIsIDEyMjcxOSwgMTIyNzI1LCAxMjI3MzIsIAotICAgIDEyMjczOSwgMTIyNzQ1LCAxMjI3NTIsIDEyMjc1OSwgMTIyNzY2LCAxMjI3NzMsIDEyMjc4MCwgMTIyNzg1LCAwLCAwLCAwLCAKLSAgICAwLCAxMjI3OTAsIDEyMjc5NiwgMTIyODAzLCAxMjI4MTAsIDEyMjgxNywgMTIyODIzLCAxMjI4MzAsIDEyMjgzNywgCi0gICAgMTIyODQ0LCAxMjI4NTAsIDEyMjg1NywgMTIyODY0LCAxMjI4NzAsIDEyMjg3NiwgMTIyODgzLCAxMjI4ODksIDEyMjg5NiwgCi0gICAgMTIyOTAzLCAxMjI5MDksIDEyMjkxNiwgMTIyOTIzLCAxMjI5MjksIDEyMjkzNiwgMTIyOTQzLCAxMjI5NTAsIDEyMjk1NywgCi0gICAgMTIyOTY0LCAxMjI5NzMsIDEyMjk3NywgMTIyOTgwLCAxMjI5ODMsIDEyMjk4NywgMTIyOTkxLCAxMjI5OTQsIDEyMjk5NywgCi0gICAgMTIzMDAwLCAxMjMwMDMsIDEyMzAwNiwgMTIzMDA5LCAxMjMwMTIsIDEyMzAxNSwgMTIzMDE4LCAxMjMwMjQsIDAsIDAsIDAsIAorICAgIDEyMDMxMiwgMTIwMzE2LCAxMjAzMjAsIDEyMDMyNCwgMTIwMzI4LCAxMjAzMzIsIDEyMDMzNiwgMTIwMzQwLCAxMjAzNDQsIAorICAgIDEyMDM0OCwgMTIwMzU0LCAxMjAzNjAsIDEyMDM2NiwgMCwgMTIwMzcyLCAxMjAzNzcsIDAsIDEyMDM4MiwgMCwgMCwgCisgICAgMTIwMzg3LCAwLCAxMjAzOTIsIDEyMDM5NywgMTIwNDAyLCAxMjA0MDcsIDEyMDQxMiwgMTIwNDE3LCAxMjA0MjIsIAorICAgIDEyMDQyNywgMTIwNDMyLCAxMjA0MzcsIDAsIDEyMDQ0MiwgMTIwNDQ3LCAxMjA0NTIsIDEyMDQ1NywgMCwgMTIwNDYyLCAwLCAKKyAgICAxMjA0NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQ3MiwgMCwgMCwgMCwgMCwgMTIwNDc4LCAwLCAxMjA0ODQsIDAsIAorICAgIDEyMDQ5MCwgMCwgMTIwNDk2LCAxMjA1MDIsIDEyMDUwOCwgMCwgMTIwNTE0LCAxMjA1MjAsIDAsIDEyMDUyNiwgMCwgMCwgCisgICAgMTIwNTMyLCAwLCAxMjA1MzgsIDAsIDEyMDU0NCwgMCwgMTIwNTUwLCAwLCAxMjA1NTgsIDAsIDEyMDU2NiwgMTIwNTcyLCAwLCAKKyAgICAxMjA1NzgsIDAsIDAsIDEyMDU4NCwgMTIwNTkwLCAxMjA1OTYsIDEyMDYwMiwgMCwgMTIwNjA4LCAxMjA2MTQsIDEyMDYyMCwgCisgICAgMTIwNjI2LCAxMjA2MzIsIDEyMDYzOCwgMTIwNjQ0LCAwLCAxMjA2NTAsIDEyMDY1NiwgMTIwNjYyLCAxMjA2NjgsIDAsIAorICAgIDEyMDY3NCwgMTIwNjgwLCAxMjA2ODYsIDEyMDY5MiwgMCwgMTIwNzAwLCAwLCAxMjA3MDgsIDEyMDcxNCwgMTIwNzIwLCAKKyAgICAxMjA3MjYsIDEyMDczMiwgMTIwNzM4LCAxMjA3NDQsIDEyMDc1MCwgMTIwNzU2LCAxMjA3NjIsIDAsIDEyMDc2OCwgCisgICAgMTIwNzc0LCAxMjA3ODAsIDEyMDc4NiwgMTIwNzkyLCAxMjA3OTgsIDEyMDgwNCwgMTIwODEwLCAxMjA4MTYsIDEyMDgyMiwgCisgICAgMTIwODI4LCAxMjA4MzQsIDEyMDg0MCwgMTIwODQ2LCAxMjA4NTIsIDEyMDg1OCwgMTIwODY0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjA4NzAsIDEyMDg3NSwgMTIwODgwLCAwLCAxMjA4ODUsIDEyMDg5MCwgMTIwODk1LCAxMjA5MDAsIDEyMDkwNSwgMCwgCisgICAgMTIwOTEwLCAxMjA5MTUsIDEyMDkyMCwgMTIwOTI1LCAxMjA5MzAsIDEyMDkzNSwgMTIwOTQwLCAxMjA5NDUsIDEyMDk1MCwgCisgICAgMTIwOTU1LCAxMjA5NjAsIDEyMDk2NSwgMTIwOTcwLCAxMjA5NzUsIDEyMDk4MCwgMTIwOTg1LCAxMjA5OTAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEyMDk5NSwgMTIxMDA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjEwMTMsIAorICAgIDEyMTAyMCwgMTIxMDI3LCAxMjEwMzQsIDEyMTA0MSwgMTIxMDQ4LCAxMjEwNTUsIDEyMTA2MSwgMTIxMDY4LCAxMjEwNzUsIAorICAgIDEyMTA4MiwgMTIxMDkwLCAxMjEwOTgsIDEyMTEwNiwgMTIxMTE0LCAxMjExMjIsIDEyMTEzMCwgMTIxMTM3LCAxMjExNDQsIAorICAgIDEyMTE1MSwgMTIxMTU5LCAxMjExNjcsIDEyMTE3NSwgMTIxMTgzLCAxMjExOTEsIDEyMTE5OSwgMTIxMjA2LCAxMjEyMTMsIAorICAgIDEyMTIyMCwgMTIxMjI4LCAxMjEyMzYsIDEyMTI0NCwgMTIxMjUyLCAxMjEyNjAsIDEyMTI2OCwgMTIxMjczLCAxMjEyNzgsIAorICAgIDEyMTI4MywgMTIxMjg4LCAxMjEyOTMsIDEyMTI5OCwgMTIxMzAzLCAxMjEzMDgsIDEyMTMxMywgMCwgMCwgMCwgMCwgCisgICAgMTIxMzE4LCAxMjEzMjMsIDEyMTMyNywgMTIxMzMxLCAxMjEzMzUsIDEyMTMzOSwgMTIxMzQzLCAxMjEzNDcsIDEyMTM1MSwgCisgICAgMTIxMzU1LCAxMjEzNTksIDEyMTM2MywgMTIxMzY3LCAxMjEzNzEsIDEyMTM3NSwgMTIxMzc5LCAxMjEzODMsIDEyMTM4NywgCisgICAgMTIxMzkxLCAxMjEzOTUsIDEyMTM5OSwgMTIxNDAzLCAxMjE0MDcsIDEyMTQxMSwgMTIxNDE1LCAxMjE0MTksIDEyMTQyMywgCisgICAgMTIxNDI3LCAxMjE0MzEsIDEyMTQzNSwgMTIxNDM5LCAxMjE0NDMsIDEyMTQ0NywgMTIxNDUxLCAxMjE0NTUsIDEyMTQ1OSwgCisgICAgMTIxNDYzLCAxMjE0NjcsIDEyMTQ3MSwgMTIxNDc1LCAxMjE0NzksIDEyMTQ4MywgMTIxNDg3LCAxMjE0OTEsIDEyMTQ5NSwgCisgICAgMTIxNDk5LCAxMjE1MDMsIDEyMTUwNywgMTIxNTExLCAxMjE1MTUsIDEyMTUxOSwgMTIxNTI0LCAxMjE1MjgsIDEyMTUzMiwgCisgICAgMTIxNTM2LCAxMjE1NDAsIDEyMTU0NCwgMTIxNTQ4LCAxMjE1NTIsIDEyMTU1NiwgMTIxNTYwLCAxMjE1NjQsIDEyMTU2OCwgCisgICAgMTIxNTcyLCAxMjE1NzYsIDEyMTU4MCwgMTIxNTg0LCAxMjE1ODgsIDEyMTU5MiwgMTIxNTk2LCAxMjE2MDAsIDEyMTYwNCwgCisgICAgMTIxNjA4LCAxMjE2MTIsIDEyMTYxNiwgMTIxNjIwLCAxMjE2MjQsIDEyMTYyOCwgMTIxNjMyLCAxMjE2MzYsIDEyMTY0MCwgCisgICAgMTIxNjQ0LCAxMjE2NDgsIDEyMTY1MiwgMTIxNjU2LCAxMjE2NjAsIDEyMTY2NCwgMTIxNjY4LCAxMjE2NzIsIDEyMTY3NiwgCisgICAgMTIxNjgwLCAxMjE2ODQsIDEyMTY4OCwgMTIxNjkyLCAxMjE2OTYsIDEyMTcwMCwgMTIxNzA0LCAxMjE3MDgsIDEyMTcxMiwgCisgICAgMTIxNzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE3MjAsIDEyMTcyNiwgMTIxNzM1LCAKKyAgICAxMjE3NDMsIDEyMTc1MSwgMTIxNzYwLCAxMjE3NjksIDEyMTc3OCwgMTIxNzg3LCAxMjE3OTYsIDEyMTgwNSwgMTIxODE0LCAKKyAgICAxMjE4MjMsIDEyMTgzMiwgMTIxODQxLCAwLCAwLCAxMjE4NTAsIDEyMTg1OSwgMTIxODY3LCAxMjE4NzUsIDEyMTg4NCwgCisgICAgMTIxODkzLCAxMjE5MDIsIDEyMTkxMSwgMTIxOTIwLCAxMjE5MjksIDEyMTkzOCwgMTIxOTQ3LCAxMjE5NTYsIDEyMTk2NSwgCisgICAgMCwgMCwgMTIxOTc0LCAxMjE5ODMsIDEyMTk5MSwgMTIxOTk5LCAxMjIwMDgsIDEyMjAxNywgMTIyMDI2LCAxMjIwMzUsIAorICAgIDEyMjA0NCwgMTIyMDUzLCAxMjIwNjIsIDEyMjA3MSwgMTIyMDgwLCAxMjIwODksIDEyMjA5OCwgMCwgMTIyMTA1LCAKKyAgICAxMjIxMTQsIDEyMjEyMiwgMTIyMTMwLCAxMjIxMzksIDEyMjE0OCwgMTIyMTU3LCAxMjIxNjYsIDEyMjE3NSwgMTIyMTg0LCAKKyAgICAxMjIxOTMsIDEyMjIwMiwgMTIyMjExLCAxMjIyMjAsIDEyMjIyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyMjM2LCAKKyAgICAxMjIyNDMsIDEyMjI0OCwgMTIyMjUyLCAxMjIyNTYsIDEyMjI2MCwgMTIyMjY1LCAxMjIyNzAsIDEyMjI3NSwgMTIyMjgwLCAKKyAgICAxMjIyODUsIDAsIDAsIDAsIDAsIDAsIDEyMjI5MCwgMTIyMjk1LCAxMjIzMDEsIDEyMjMwNywgMTIyMzEzLCAxMjIzMTgsIAorICAgIDEyMjMyNCwgMTIyMzMwLCAxMjIzMzYsIDEyMjM0MSwgMTIyMzQ3LCAxMjIzNTMsIDEyMjM1OCwgMTIyMzYzLCAxMjIzNjksIAorICAgIDEyMjM3NCwgMTIyMzgwLCAxMjIzODYsIDEyMjM5MSwgMTIyMzk3LCAxMjI0MDMsIDEyMjQwOCwgMTIyNDE0LCAxMjI0MjAsIAorICAgIDEyMjQyNiwgMTIyNDMyLCAxMjI0MzgsIDEyMjQ0OSwgMTIyNDU2LCAxMjI0NjIsIDEyMjQ2NSwgMCwgMTIyNDY4LCAKKyAgICAxMjI0NzMsIDEyMjQ3OSwgMTIyNDg1LCAxMjI0OTEsIDEyMjQ5NiwgMTIyNTAyLCAxMjI1MDgsIDEyMjUxNCwgMTIyNTE5LCAKKyAgICAxMjI1MjUsIDEyMjUzMSwgMTIyNTM2LCAxMjI1NDEsIDEyMjU0NywgMTIyNTUyLCAxMjI1NTgsIDEyMjU2NCwgMTIyNTY5LCAKKyAgICAxMjI1NzUsIDEyMjU4MSwgMTIyNTg2LCAxMjI1OTIsIDEyMjU5OCwgMTIyNjA0LCAxMjI2MTAsIDEyMjYxNiwgMTIyNjE5LCAKKyAgICAxMjI2MjIsIDEyMjYyNSwgMTIyNjI4LCAxMjI2MzEsIDEyMjYzNCwgMTIyNjQwLCAxMjI2NDcsIDEyMjY1NCwgMTIyNjYxLCAKKyAgICAxMjI2NjcsIDEyMjY3NCwgMTIyNjgxLCAxMjI2ODgsIDEyMjY5NCwgMTIyNzAxLCAxMjI3MDgsIDEyMjcxNCwgMTIyNzIwLCAKKyAgICAxMjI3MjcsIDEyMjczMywgMTIyNzQwLCAxMjI3NDcsIDEyMjc1MywgMTIyNzYwLCAxMjI3NjcsIDEyMjc3MywgMTIyNzgwLCAKKyAgICAxMjI3ODcsIDEyMjc5NCwgMTIyODAxLCAxMjI4MDgsIDEyMjgxMywgMCwgMCwgMCwgMCwgMTIyODE4LCAxMjI4MjQsIAorICAgIDEyMjgzMSwgMTIyODM4LCAxMjI4NDUsIDEyMjg1MSwgMTIyODU4LCAxMjI4NjUsIDEyMjg3MiwgMTIyODc4LCAxMjI4ODUsIAorICAgIDEyMjg5MiwgMTIyODk4LCAxMjI5MDQsIDEyMjkxMSwgMTIyOTE3LCAxMjI5MjQsIDEyMjkzMSwgMTIyOTM3LCAxMjI5NDQsIAorICAgIDEyMjk1MSwgMTIyOTU3LCAxMjI5NjQsIDEyMjk3MSwgMTIyOTc4LCAxMjI5ODUsIDEyMjk5MiwgMTIzMDAxLCAxMjMwMDUsIAorICAgIDEyMzAwOCwgMTIzMDExLCAxMjMwMTUsIDEyMzAxOSwgMTIzMDIyLCAxMjMwMjUsIDEyMzAyOCwgMTIzMDMxLCAxMjMwMzQsIAorICAgIDEyMzAzNywgMTIzMDQwLCAxMjMwNDMsIDEyMzA0NiwgMTIzMDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjMwMjcsIDEyMzAzNCwgMTIzMDQyLCAxMjMwNTAsIDEyMzA1OCwgMTIzMDY1LCAxMjMwNzMsIDEyMzA4MSwgMTIzMDg5LCAKLSAgICAxMjMwOTYsIDEyMzEwNCwgMTIzMTEyLCAxMjMxMTksIDEyMzEyNiwgMTIzMTM0LCAxMjMxNDEsIDEyMzE0OSwgMTIzMTU3LCAKLSAgICAxMjMxNjQsIDEyMzE3MiwgMTIzMTgwLCAxMjMxODcsIDEyMzE5NSwgMTIzMjAzLCAxMjMyMTEsIDEyMzIxOSwgMTIzMjI3LCAKLSAgICAxMjMyMzEsIDEyMzIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMjM4LCAxMjMyNDQsIAotICAgIDEyMzI1MCwgMTIzMjU2LCAxMjMyNjAsIDEyMzI2NiwgMTIzMjcyLCAxMjMyNzgsIDEyMzI4NCwgMTIzMjkwLCAxMjMyOTYsIAotICAgIDEyMzMwMiwgMTIzMzA4LCAxMjMzMTQsIDEyMzMyMCwgMTIzMzI2LCAxMjMzMzIsIDEyMzMzOCwgMTIzMzQ0LCAxMjMzNTAsIAotICAgIDEyMzM1NiwgMTIzMzYyLCAxMjMzNjgsIDEyMzM3NCwgMTIzMzgwLCAxMjMzODYsIDEyMzM5MiwgMTIzMzk4LCAxMjM0MDQsIAotICAgIDEyMzQxMCwgMTIzNDE2LCAxMjM0MjIsIDEyMzQyOCwgMTIzNDM0LCAxMjM0NDAsIDEyMzQ0NiwgMTIzNDUyLCAxMjM0NTgsIAotICAgIDEyMzQ2NCwgMTIzNDcwLCAxMjM0NzYsIDEyMzQ4MiwgMTIzNDg4LCAwLCAwLCAwLCAwLCAwLCAxMjM0OTQsIDEyMzUwNSwgCi0gICAgMTIzNTE2LCAxMjM1MjcsIDEyMzUzOCwgMTIzNTQ5LCAxMjM1NjAsIDEyMzU3MSwgMTIzNTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjM1OTMsIDEyMzU5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTIzNjAxLCAxMjM2MDMsIDEyMzYwNSwgMTIzNjA5LCAxMjM2MTQsIDEyMzYxOSwgMTIzNjIxLCAKLSAgICAxMjM2MjcsIDEyMzYzMiwgMTIzNjM0LCAxMjM2NDAsIDEyMzY0NCwgMTIzNjQ2LCAxMjM2NTAsIDEyMzY1NiwgMTIzNjYyLCAKLSAgICAxMjM2NjgsIDEyMzY3MywgMTIzNjc3LCAxMjM2ODQsIDEyMzY5MSwgMTIzNjk4LCAxMjM3MDMsIDEyMzcxMCwgMTIzNzE3LCAKLSAgICAxMjM3MjQsIDEyMzcyOCwgMTIzNzM0LCAxMjM3NDMsIDEyMzc1MiwgMTIzNzU5LCAxMjM3NjQsIDEyMzc2OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNzcyLCAxMjM3NzQsIDEyMzc3NiwgMTIzNzgwLCAKLSAgICAxMjM3ODQsIDEyMzc4OCwgMCwgMTIzNzkwLCAxMjM3OTIsIDEyMzc5NiwgMTIzNzk4LCAxMjM4MDAsIDEyMzgwMiwgCi0gICAgMTIzODA0LCAxMjM4MDksIDEyMzgxNCwgMTIzODE2LCAxMjM4MjIsIDEyMzgyNiwgMTIzODMwLCAxMjM4MzgsIDEyMzg0MCwgCi0gICAgMTIzODQyLCAxMjM4NDQsIDEyMzg0NiwgMTIzODQ4LCAxMjM4NTAsIDEyMzg1MiwgMTIzODU0LCAxMjM4NTYsIDEyMzg1OCwgCi0gICAgMTIzODYyLCAxMjM4NjYsIDEyMzg2OCwgMTIzODcwLCAxMjM4NzIsIDEyMzg3NCwgMTIzODc2LCAxMjM4ODEsIDEyMzg4NywgCi0gICAgMTIzODkxLCAxMjM4OTUsIDEyMzg5OSwgMTIzOTAzLCAxMjM5MDgsIDEyMzkxMiwgMTIzOTE0LCAxMjM5MTYsIDEyMzkyMCwgCi0gICAgMTIzOTI2LCAxMjM5MjgsIDEyMzkzMCwgMTIzOTMyLCAxMjM5MzYsIDEyMzk0NSwgMTIzOTUxLCAxMjM5NTUsIDEyMzk1OSwgCi0gICAgMTIzOTYxLCAxMjM5NjMsIDEyMzk2NiwgMTIzOTY4LCAxMjM5NzAsIDEyMzk3MiwgMTIzOTc2LCAxMjM5NzgsIDEyMzk4MiwgCi0gICAgMTIzOTg3LCAxMjM5ODksIDEyMzk5NCwgMTI0MDAwLCAxMjQwMDcsIDEyNDAxMSwgMTI0MDE1LCAxMjQwMTksIDEyNDAyMywgCi0gICAgMTI0MDI5LCAwLCAwLCAwLCAxMjQwMzMsIDEyNDAzNSwgMTI0MDM5LCAxMjQwNDMsIDEyNDA0NSwgMTI0MDQ5LCAxMjQwNTMsIAotICAgIDEyNDA1NSwgMTI0MDU5LCAxMjQwNjEsIDEyNDA2NSwgMTI0MDY5LCAxMjQwNzMsIDEyNDA3NywgMTI0MDgxLCAxMjQwODUsIAotICAgIDEyNDA4OSwgMTI0MDkzLCAxMjQwOTksIDEyNDEwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI0MTA3LCAxMjQxMTEsIDEyNDExNSwgMTI0MTE5LCAxMjQxMjYsIDEyNDEyOCwgMTI0MTMyLCAxMjQxMzQsIDEyNDEzNiwgCi0gICAgMTI0MTQwLCAxMjQxNDQsIDEyNDE0OCwgMTI0MTUwLCAxMjQxNTQsIDEyNDE1OCwgMTI0MTYyLCAxMjQxNjYsIDEyNDE3MCwgCi0gICAgMTI0MTcyLCAxMjQxNzYsIDEyNDE3OCwgMTI0MTg0LCAxMjQxODcsIDEyNDE5MiwgMTI0MTk0LCAxMjQxOTYsIDEyNDE5OSwgCi0gICAgMTI0MjAxLCAxMjQyMDMsIDEyNDIwNiwgMTI0MjEzLCAxMjQyMjAsIDEyNDIyNywgMTI0MjMyLCAxMjQyMzYsIDEyNDIzOCwgCi0gICAgMTI0MjQwLCAwLCAxMjQyNDIsIDEyNDI0NCwgMTI0MjQ4LCAxMjQyNTIsIDEyNDI1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MjU4LCAxMjQyNjIsIDEyNDI2NywgMTI0MjcxLCAKLSAgICAxMjQyNzcsIDEyNDI4MywgMTI0Mjg1LCAxMjQyODcsIDEyNDI5MywgMTI0Mjk1LCAxMjQyOTksIDEyNDMwMywgMTI0MzA1LCAKLSAgICAxMjQzMDksIDEyNDMxMSwgMTI0MzE1LCAxMjQzMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyNDMyMywgMTI0MzI1LCAxMjQzMjcsIDEyNDMyOSwgMTI0MzMzLCAxMjQzMzUsIDEyNDMzNywgMTI0MzM5LCAKLSAgICAxMjQzNDEsIDEyNDM0MywgMTI0MzQ1LCAxMjQzNDcsIDEyNDM0OSwgMTI0MzUxLCAxMjQzNTMsIDEyNDM1NSwgMTI0MzU3LCAKLSAgICAxMjQzNTksIDEyNDM2MSwgMTI0MzYzLCAxMjQzNjUsIDEyNDM2NywgMTI0MzY5LCAxMjQzNzEsIDEyNDM3MywgMTI0Mzc1LCAKLSAgICAxMjQzNzcsIDEyNDM4MSwgMTI0MzgzLCAxMjQzODUsIDEyNDM4NywgMTI0MzkxLCAxMjQzOTMsIDEyNDM5NywgMTI0Mzk5LCAKLSAgICAxMjQ0MDEsIDEyNDQwNSwgMTI0NDA5LCAxMjQ0MTUsIDEyNDQxNywgMTI0NDE5LCAxMjQ0MjEsIDEyNDQyMywgMTI0NDI3LCAKLSAgICAxMjQ0MzEsIDEyNDQzMywgMTI0NDM3LCAxMjQ0NDEsIDEyNDQ0NSwgMTI0NDQ5LCAxMjQ0NTMsIDEyNDQ1NywgMTI0NDYxLCAKLSAgICAxMjQ0NjUsIDEyNDQ2OSwgMTI0NDczLCAxMjQ0NzcsIDEyNDQ4MSwgMTI0NDg1LCAxMjQ0ODksIDEyNDQ5MywgMTI0NDk3LCAKLSAgICAxMjQ1MDEsIDAsIDEyNDUwNSwgMCwgMTI0NTA3LCAxMjQ1MDksIDEyNDUxMSwgMTI0NTEzLCAxMjQ1MTUsIDEyNDUyMywgCi0gICAgMTI0NTMxLCAxMjQ1MzksIDEyNDU0NywgMTI0NTUyLCAxMjQ1NTcsIDEyNDU2MiwgMTI0NTY2LCAxMjQ1NzAsIDEyNDU3NSwgCi0gICAgMTI0NTc5LCAxMjQ1ODEsIDEyNDU4NSwgMTI0NTg3LCAxMjQ1ODksIDEyNDU5MSwgMTI0NTkzLCAxMjQ1OTUsIDEyNDU5NywgCi0gICAgMTI0NTk5LCAxMjQ2MDMsIDEyNDYwNSwgMTI0NjA3LCAxMjQ2MDksIDEyNDYxMywgMTI0NjE3LCAxMjQ2MjEsIDEyNDYyNSwgCi0gICAgMTI0NjI5LCAxMjQ2MzEsIDEyNDYzNywgMTI0NjQzLCAxMjQ2NDUsIDEyNDY0NywgMTI0NjQ5LCAxMjQ2NTEsIDEyNDY1MywgCi0gICAgMTI0NjYyLCAxMjQ2NjksIDEyNDY3NiwgMTI0NjgwLCAxMjQ2ODcsIDEyNDY5MiwgMTI0Njk5LCAxMjQ3MDgsIDEyNDcxMywgCi0gICAgMTI0NzE3LCAxMjQ3MjEsIDEyNDcyMywgMTI0NzI3LCAxMjQ3MjksIDEyNDczMywgMTI0NzM3LCAxMjQ3MzksIDEyNDc0MywgCi0gICAgMTI0NzQ3LCAxMjQ3NTEsIDEyNDc1MywgMTI0NzU1LCAxMjQ3NjEsIDEyNDc2MywgMTI0NzY1LCAxMjQ3NjcsIDEyNDc3MSwgCi0gICAgMTI0Nzc1LCAxMjQ3NzcsIDEyNDc4MSwgMTI0NzgzLCAxMjQ3ODUsIDEyNDc4OCwgMTI0NzkyLCAxMjQ3OTQsIDEyNDc5OCwgCi0gICAgMTI0ODAwLCAxMjQ4MDIsIDEyNDgwNywgMTI0ODA5LCAxMjQ4MTMsIDEyNDgxNywgMTI0ODIwLCAxMjQ4MjQsIDEyNDgyOCwgCi0gICAgMTI0ODMyLCAxMjQ4MzYsIDEyNDg0MCwgMTI0ODQ0LCAxMjQ4NDgsIDEyNDg1MywgMTI0ODU3LCAxMjQ4NjEsIDEyNDg3MCwgCi0gICAgMTI0ODc1LCAxMjQ4NzgsIDEyNDg4MCwgMTI0ODgzLCAxMjQ4ODYsIDEyNDg5MSwgMTI0ODkzLCAxMjQ4OTYsIDEyNDkwMSwgCi0gICAgMTI0OTA1LCAxMjQ5MDgsIDEyNDkxMiwgMTI0OTE2LCAxMjQ5MTksIDEyNDkyNCwgMTI0OTI4LCAxMjQ5MzIsIDEyNDkzNiwgCi0gICAgMTI0OTQwLCAxMjQ5NDYsIDEyNDk1MiwgMTI0OTU4LCAxMjQ5NjQsIDEyNDk2OSwgMTI0OTgwLCAxMjQ5ODIsIDEyNDk4NiwgCi0gICAgMTI0OTg4LCAxMjQ5OTAsIDEyNDk5NCwgMTI0OTk4LCAxMjUwMDAsIDEyNTAwNCwgMTI1MDA5LCAxMjUwMTQsIDEyNTAyMCwgCi0gICAgMTI1MDIyLCAxMjUwMjYsIDEyNTAzMCwgMTI1MDM3LCAxMjUwNDQsIDEyNTA0OCwgMTI1MDUwLCAxMjUwNTIsIDEyNTA1NiwgCi0gICAgMTI1MDU4LCAxMjUwNjIsIDEyNTA2NiwgMTI1MDcwLCAxMjUwNzIsIDEyNTA3NCwgMTI1MDgxLCAxMjUwODUsIDEyNTA4OCwgCi0gICAgMTI1MDkyLCAxMjUwOTYsIDEyNTEwMCwgMTI1MTAyLCAxMjUxMDYsIDEyNTEwOCwgMTI1MTEwLCAxMjUxMTQsIDEyNTExNiwgCi0gICAgMTI1MTIwLCAxMjUxMjQsIDEyNTEzMCwgMTI1MTM0LCAxMjUxMzgsIDEyNTE0MiwgMTI1MTQ0LCAxMjUxNDcsIDEyNTE1MSwgCi0gICAgMTI1MTU4LCAxMjUxNjcsIDEyNTE3NiwgMTI1MTg0LCAxMjUxOTIsIDEyNTE5NCwgMTI1MTk4LCAxMjUyMDAsIDEyNTIwNCwgCi0gICAgMTI1MjE1LCAxMjUyMTksIDEyNTIyNSwgMTI1MjMxLCAxMjUyMzYsIDAsIDEyNTIzOCwgMTI1MjQyLCAxMjUyNDQsIAotICAgIDEyNTI0NiwgMCwgMCwgMCwgMTI1MjQ4LCAxMjUyNTMsIDEyNTI2MywgMTI1Mjc4LCAxMjUyOTAsIDEyNTMwMiwgMTI1MzA2LCAKLSAgICAxMjUzMTAsIDEyNTMxNiwgMTI1MzE4LCAxMjUzMjYsIDEyNTMzNCwgMTI1MzM2LCAxMjUzNDAsIDEyNTM0NiwgMTI1MzUyLCAKLSAgICAxMjUzNTksIDEyNTM2NiwgMTI1MzY4LCAxMjUzNzAsIDEyNTM3MywgMTI1Mzc1LCAxMjUzODEsIDEyNTM4MywgMTI1Mzg2LCAKLSAgICAxMjUzOTAsIDEyNTM5NiwgMTI1NDAyLCAxMjU0MTMsIDEyNTQxOSwgMTI1NDI2LCAxMjU0MzQsIDEyNTQzOCwgMTI1NDQ2LCAKLSAgICAxMjU0NTQsIDEyNTQ2MCwgMTI1NDY2LCAxMjU0NzMsIDEyNTQ3NSwgMTI1NDc5LCAxMjU0ODEsIDEyNTQ4MywgMTI1NDg4LCAKLSAgICAxMjU0OTAsIDEyNTQ5MiwgMTI1NDk0LCAxMjU0OTYsIDEyNTUwMCwgMTI1NTExLCAxMjU1MTcsIDEyNTUyMSwgMTI1NTI1LCAKLSAgICAxMjU1MjksIDEyNTUzNSwgMTI1NTQxLCAxMjU1NDcsIDEyNTU1MywgMTI1NTU4LCAxMjU1NjMsIDEyNTU2OSwgMTI1NTc1LCAKLSAgICAxMjU1ODIsIDAsIDAsIDEyNTU4OSwgMTI1NTk0LCAxMjU2MDIsIDEyNTYwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI1NjE1LCAxMjU2MjIsIDEyNTYyOSwgMTI1NjM2LCAxMjU2NDQsIDEyNTY1MiwgMTI1NjYwLCAxMjU2NjgsIAotICAgIDEyNTY3NiwgMTI1Njg0LCAxMjU2OTIsIDEyNTcwMCwgMTI1NzA4LCAxMjU3MTQsIDEyNTcyMCwgMTI1NzI2LCAxMjU3MzIsIAotICAgIDEyNTczOCwgMTI1NzQ0LCAxMjU3NTAsIDEyNTc1NiwgMTI1NzYyLCAxMjU3NjgsIDEyNTc3NCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMDU1LCAxMjMwNjIsIDEyMzA3MCwgCisgICAgMTIzMDc4LCAxMjMwODYsIDEyMzA5MywgMTIzMTAxLCAxMjMxMDksIDEyMzExNywgMTIzMTI0LCAxMjMxMzIsIDEyMzE0MCwgCisgICAgMTIzMTQ3LCAxMjMxNTQsIDEyMzE2MiwgMTIzMTY5LCAxMjMxNzcsIDEyMzE4NSwgMTIzMTkyLCAxMjMyMDAsIDEyMzIwOCwgCisgICAgMTIzMjE1LCAxMjMyMjMsIDEyMzIzMSwgMTIzMjM5LCAxMjMyNDcsIDEyMzI1NSwgMTIzMjU5LCAxMjMyNjMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzI2NiwgMTIzMjcyLCAxMjMyNzgsIDEyMzI4NCwgMTIzMjg4LCAKKyAgICAxMjMyOTQsIDEyMzMwMCwgMTIzMzA2LCAxMjMzMTIsIDEyMzMxOCwgMTIzMzI0LCAxMjMzMzAsIDEyMzMzNiwgMTIzMzQyLCAKKyAgICAxMjMzNDgsIDEyMzM1NCwgMTIzMzYwLCAxMjMzNjYsIDEyMzM3MiwgMTIzMzc4LCAxMjMzODQsIDEyMzM5MCwgMTIzMzk2LCAKKyAgICAxMjM0MDIsIDEyMzQwOCwgMTIzNDE0LCAxMjM0MjAsIDEyMzQyNiwgMTIzNDMyLCAxMjM0MzgsIDEyMzQ0NCwgMTIzNDUwLCAKKyAgICAxMjM0NTYsIDEyMzQ2MiwgMTIzNDY4LCAxMjM0NzQsIDEyMzQ4MCwgMTIzNDg2LCAxMjM0OTIsIDEyMzQ5OCwgMTIzNTA0LCAKKyAgICAxMjM1MTAsIDEyMzUxNiwgMCwgMCwgMCwgMCwgMCwgMTIzNTIyLCAxMjM1MzMsIDEyMzU0NCwgMTIzNTU1LCAxMjM1NjYsIAorICAgIDEyMzU3NywgMTIzNTg4LCAxMjM1OTksIDEyMzYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNjIxLCAxMjM2MjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzYyOSwgCisgICAgMTIzNjMxLCAxMjM2MzMsIDEyMzYzNywgMTIzNjQyLCAxMjM2NDcsIDEyMzY0OSwgMTIzNjU1LCAxMjM2NjAsIDEyMzY2MiwgCisgICAgMTIzNjY4LCAxMjM2NzIsIDEyMzY3NCwgMTIzNjc4LCAxMjM2ODQsIDEyMzY5MCwgMTIzNjk2LCAxMjM3MDEsIDEyMzcwNSwgCisgICAgMTIzNzEyLCAxMjM3MTksIDEyMzcyNiwgMTIzNzMxLCAxMjM3MzgsIDEyMzc0NSwgMTIzNzUyLCAxMjM3NTYsIDEyMzc2MiwgCisgICAgMTIzNzcxLCAxMjM3ODAsIDEyMzc4NywgMTIzNzkyLCAxMjM3OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEyMzgwMCwgMTIzODAyLCAxMjM4MDQsIDEyMzgwOCwgMTIzODEyLCAxMjM4MTYsIDAsIDEyMzgxOCwgCisgICAgMTIzODIwLCAxMjM4MjQsIDEyMzgyNiwgMTIzODI4LCAxMjM4MzAsIDEyMzgzMiwgMTIzODM3LCAxMjM4NDIsIDEyMzg0NCwgCisgICAgMTIzODUwLCAxMjM4NTQsIDEyMzg1OCwgMTIzODY2LCAxMjM4NjgsIDEyMzg3MCwgMTIzODcyLCAxMjM4NzQsIDEyMzg3NiwgCisgICAgMTIzODc4LCAxMjM4ODAsIDEyMzg4MiwgMTIzODg0LCAxMjM4ODYsIDEyMzg5MCwgMTIzODk0LCAxMjM4OTYsIDEyMzg5OCwgCisgICAgMTIzOTAwLCAxMjM5MDIsIDEyMzkwNCwgMTIzOTA5LCAxMjM5MTUsIDEyMzkxOSwgMTIzOTIzLCAxMjM5MjcsIDEyMzkzMSwgCisgICAgMTIzOTM2LCAxMjM5NDAsIDEyMzk0MiwgMTIzOTQ0LCAxMjM5NDgsIDEyMzk1NCwgMTIzOTU2LCAxMjM5NTgsIDEyMzk2MCwgCisgICAgMTIzOTY0LCAxMjM5NzMsIDEyMzk3OSwgMTIzOTgzLCAxMjM5ODcsIDEyMzk4OSwgMTIzOTkxLCAxMjM5OTQsIDEyMzk5NiwgCisgICAgMTIzOTk4LCAxMjQwMDAsIDEyNDAwNCwgMTI0MDA2LCAxMjQwMTAsIDEyNDAxNSwgMTI0MDE3LCAxMjQwMjIsIDEyNDAyOCwgCisgICAgMTI0MDM1LCAxMjQwMzksIDEyNDA0MywgMTI0MDQ3LCAxMjQwNTEsIDEyNDA1NywgMCwgMCwgMCwgMTI0MDYxLCAxMjQwNjMsIAorICAgIDEyNDA2NywgMTI0MDcxLCAxMjQwNzMsIDEyNDA3NywgMTI0MDgxLCAxMjQwODMsIDEyNDA4NywgMTI0MDg5LCAxMjQwOTMsIAorICAgIDEyNDA5NywgMTI0MTAxLCAxMjQxMDUsIDEyNDEwOSwgMTI0MTEzLCAxMjQxMTcsIDEyNDEyMSwgMTI0MTI3LCAxMjQxMzEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDEzNSwgMTI0MTM5LCAxMjQxNDMsIDEyNDE0NywgCisgICAgMTI0MTU0LCAxMjQxNTYsIDEyNDE2MCwgMTI0MTYyLCAxMjQxNjQsIDEyNDE2OCwgMTI0MTcyLCAxMjQxNzYsIDEyNDE3OCwgCisgICAgMTI0MTgyLCAxMjQxODYsIDEyNDE5MCwgMTI0MTk0LCAxMjQxOTgsIDEyNDIwMCwgMTI0MjA0LCAxMjQyMDYsIDEyNDIxMiwgCisgICAgMTI0MjE1LCAxMjQyMjAsIDEyNDIyMiwgMTI0MjI0LCAxMjQyMjcsIDEyNDIyOSwgMTI0MjMxLCAxMjQyMzQsIDEyNDI0MSwgCisgICAgMTI0MjQ4LCAxMjQyNTUsIDEyNDI2MCwgMTI0MjY0LCAxMjQyNjYsIDEyNDI2OCwgMCwgMTI0MjcwLCAxMjQyNzIsIAorICAgIDEyNDI3NiwgMTI0MjgwLCAxMjQyODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyNDI4NiwgMTI0MjkwLCAxMjQyOTUsIDEyNDI5OSwgMTI0MzA1LCAxMjQzMTEsIDEyNDMxMywgCisgICAgMTI0MzE1LCAxMjQzMjEsIDEyNDMyMywgMTI0MzI3LCAxMjQzMzEsIDEyNDMzMywgMTI0MzM3LCAxMjQzMzksIDEyNDM0MywgCisgICAgMTI0MzQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQzNTEsIDEyNDM1MywgCisgICAgMTI0MzU1LCAxMjQzNTcsIDEyNDM2MSwgMTI0MzYzLCAxMjQzNjUsIDEyNDM2NywgMTI0MzY5LCAxMjQzNzEsIDEyNDM3MywgCisgICAgMTI0Mzc1LCAxMjQzNzcsIDEyNDM3OSwgMTI0MzgxLCAxMjQzODMsIDEyNDM4NSwgMTI0Mzg3LCAxMjQzODksIDEyNDM5MSwgCisgICAgMTI0MzkzLCAxMjQzOTUsIDEyNDM5NywgMTI0Mzk5LCAxMjQ0MDEsIDEyNDQwMywgMTI0NDA1LCAxMjQ0MDksIDEyNDQxMSwgCisgICAgMTI0NDEzLCAxMjQ0MTUsIDEyNDQxOSwgMTI0NDIxLCAxMjQ0MjUsIDEyNDQyNywgMTI0NDI5LCAxMjQ0MzMsIDEyNDQzNywgCisgICAgMTI0NDQzLCAxMjQ0NDUsIDEyNDQ0NywgMTI0NDQ5LCAxMjQ0NTEsIDEyNDQ1NSwgMTI0NDU5LCAxMjQ0NjEsIDEyNDQ2NSwgCisgICAgMTI0NDY5LCAxMjQ0NzMsIDEyNDQ3NywgMTI0NDgxLCAxMjQ0ODUsIDEyNDQ4OSwgMTI0NDkzLCAxMjQ0OTcsIDEyNDUwMSwgCisgICAgMTI0NTA1LCAxMjQ1MDksIDEyNDUxMywgMTI0NTE3LCAxMjQ1MjEsIDEyNDUyNSwgMTI0NTI5LCAwLCAxMjQ1MzMsIDAsIAorICAgIDEyNDUzNSwgMTI0NTM3LCAxMjQ1MzksIDEyNDU0MSwgMTI0NTQzLCAxMjQ1NTEsIDEyNDU1OSwgMTI0NTY3LCAxMjQ1NzUsIAorICAgIDEyNDU4MCwgMTI0NTg1LCAxMjQ1OTAsIDEyNDU5NCwgMTI0NTk4LCAxMjQ2MDMsIDEyNDYwNywgMTI0NjA5LCAxMjQ2MTMsIAorICAgIDEyNDYxNSwgMTI0NjE3LCAxMjQ2MTksIDEyNDYyMSwgMTI0NjIzLCAxMjQ2MjUsIDEyNDYyNywgMTI0NjMxLCAxMjQ2MzMsIAorICAgIDEyNDYzNSwgMTI0NjM3LCAxMjQ2NDEsIDEyNDY0NSwgMTI0NjQ5LCAxMjQ2NTMsIDEyNDY1NywgMTI0NjU5LCAxMjQ2NjUsIAorICAgIDEyNDY3MSwgMTI0NjczLCAxMjQ2NzUsIDEyNDY3NywgMTI0Njc5LCAxMjQ2ODEsIDEyNDY5MCwgMTI0Njk3LCAxMjQ3MDQsIAorICAgIDEyNDcwOCwgMTI0NzE1LCAxMjQ3MjAsIDEyNDcyNywgMTI0NzM2LCAxMjQ3NDEsIDEyNDc0NSwgMTI0NzQ5LCAxMjQ3NTEsIAorICAgIDEyNDc1NSwgMTI0NzU3LCAxMjQ3NjEsIDEyNDc2NSwgMTI0NzY3LCAxMjQ3NzEsIDEyNDc3NSwgMTI0Nzc5LCAxMjQ3ODEsIAorICAgIDEyNDc4MywgMTI0Nzg5LCAxMjQ3OTEsIDEyNDc5MywgMTI0Nzk1LCAxMjQ3OTksIDEyNDgwMywgMTI0ODA1LCAxMjQ4MDksIAorICAgIDEyNDgxMSwgMTI0ODEzLCAxMjQ4MTYsIDEyNDgyMCwgMTI0ODIyLCAxMjQ4MjYsIDEyNDgyOCwgMTI0ODMwLCAxMjQ4MzUsIAorICAgIDEyNDgzNywgMTI0ODQxLCAxMjQ4NDUsIDEyNDg0OCwgMTI0ODUyLCAxMjQ4NTYsIDEyNDg2MCwgMTI0ODY0LCAxMjQ4NjgsIAorICAgIDEyNDg3MiwgMTI0ODc2LCAxMjQ4ODEsIDEyNDg4NSwgMTI0ODg5LCAxMjQ4OTgsIDEyNDkwMywgMTI0OTA2LCAxMjQ5MDgsIAorICAgIDEyNDkxMSwgMTI0OTE0LCAxMjQ5MTksIDEyNDkyMSwgMTI0OTI0LCAxMjQ5MjksIDEyNDkzMywgMTI0OTM2LCAxMjQ5NDAsIAorICAgIDEyNDk0NCwgMTI0OTQ3LCAxMjQ5NTIsIDEyNDk1NiwgMTI0OTYwLCAxMjQ5NjQsIDEyNDk2OCwgMTI0OTc0LCAxMjQ5ODAsIAorICAgIDEyNDk4NiwgMTI0OTkyLCAxMjQ5OTcsIDEyNTAwOCwgMTI1MDEwLCAxMjUwMTQsIDEyNTAxNiwgMTI1MDE4LCAxMjUwMjIsIAorICAgIDEyNTAyNiwgMTI1MDI4LCAxMjUwMzIsIDEyNTAzNywgMTI1MDQyLCAxMjUwNDgsIDEyNTA1MCwgMTI1MDU0LCAxMjUwNTgsIAorICAgIDEyNTA2NSwgMTI1MDcyLCAxMjUwNzYsIDEyNTA3OCwgMTI1MDgwLCAxMjUwODQsIDEyNTA4NiwgMTI1MDkwLCAxMjUwOTQsIAorICAgIDEyNTA5OCwgMTI1MTAwLCAxMjUxMDIsIDEyNTEwOSwgMTI1MTEzLCAxMjUxMTYsIDEyNTEyMCwgMTI1MTI0LCAxMjUxMjgsIAorICAgIDEyNTEzMCwgMTI1MTM0LCAxMjUxMzYsIDEyNTEzOCwgMTI1MTQyLCAxMjUxNDQsIDEyNTE0OCwgMTI1MTUyLCAxMjUxNTgsIAorICAgIDEyNTE2MiwgMTI1MTY2LCAxMjUxNzAsIDEyNTE3MiwgMTI1MTc1LCAxMjUxNzksIDEyNTE4NiwgMTI1MTk1LCAxMjUyMDQsIAorICAgIDEyNTIxMiwgMTI1MjIwLCAxMjUyMjIsIDEyNTIyNiwgMTI1MjI4LCAxMjUyMzIsIDEyNTI0MywgMTI1MjQ3LCAxMjUyNTMsIAorICAgIDEyNTI1OSwgMTI1MjY0LCAwLCAxMjUyNjYsIDEyNTI3MCwgMTI1MjcyLCAxMjUyNzQsIDAsIDAsIDAsIDEyNTI3NiwgCisgICAgMTI1MjgxLCAxMjUyOTEsIDEyNTMwNiwgMTI1MzE4LCAxMjUzMzAsIDEyNTMzNCwgMTI1MzM4LCAxMjUzNDQsIDEyNTM0NiwgCisgICAgMTI1MzU0LCAxMjUzNjIsIDEyNTM2NCwgMTI1MzY4LCAxMjUzNzQsIDEyNTM4MCwgMTI1Mzg3LCAxMjUzOTQsIDEyNTM5NiwgCisgICAgMTI1Mzk4LCAxMjU0MDEsIDEyNTQwMywgMTI1NDA5LCAxMjU0MTEsIDEyNTQxNCwgMTI1NDE4LCAxMjU0MjQsIDEyNTQzMCwgCisgICAgMTI1NDQxLCAxMjU0NDcsIDEyNTQ1NCwgMTI1NDYyLCAxMjU0NjYsIDEyNTQ3NCwgMTI1NDgyLCAxMjU0ODgsIDEyNTQ5NCwgCisgICAgMTI1NTAxLCAxMjU1MDMsIDEyNTUwNywgMTI1NTA5LCAxMjU1MTEsIDEyNTUxNiwgMTI1NTE4LCAxMjU1MjAsIDEyNTUyMiwgCisgICAgMTI1NTI0LCAxMjU1MjgsIDEyNTUzOSwgMTI1NTQ1LCAxMjU1NDksIDEyNTU1MywgMTI1NTU3LCAxMjU1NjMsIDEyNTU2OSwgCisgICAgMTI1NTc1LCAxMjU1ODEsIDEyNTU4NiwgMTI1NTkxLCAxMjU1OTcsIDEyNTYwMywgMTI1NjEwLCAwLCAwLCAxMjU2MTcsIAorICAgIDEyNTYyMiwgMTI1NjMwLCAxMjU2MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTY0MywgCisgICAgMTI1NjUwLCAxMjU2NTcsIDEyNTY2NCwgMTI1NjcyLCAxMjU2ODAsIDEyNTY4OCwgMTI1Njk2LCAxMjU3MDQsIDEyNTcxMiwgCisgICAgMTI1NzIwLCAxMjU3MjgsIDEyNTczNiwgMTI1NzQyLCAxMjU3NDgsIDEyNTc1NCwgMTI1NzYwLCAxMjU3NjYsIDEyNTc3MiwgCisgICAgMTI1Nzc4LCAxMjU3ODQsIDEyNTc5MCwgMTI1Nzk2LCAxMjU4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTc4MCwgCi0gICAgMTI1Nzg0LCAxMjU3ODgsIDEyNTc5MywgMTI1Nzk4LCAxMjU4MDAsIDEyNTgwNCwgMTI1ODEzLCAxMjU4MjEsIDEyNTgyOSwgCi0gICAgMTI1ODQyLCAxMjU4NTUsIDEyNTg2OCwgMTI1ODc1LCAxMjU4ODIsIDEyNTg4NiwgMTI1ODk1LCAxMjU5MDMsIDEyNTkwNywgCi0gICAgMTI1OTE2LCAxMjU5MjMsIDEyNTkyNywgMTI1OTMxLCAxMjU5MzUsIDEyNTkzOSwgMTI1OTQ2LCAxMjU5NTAsIDEyNTk1NCwgCi0gICAgMTI1OTU4LCAxMjU5NjIsIDEyNTk2OSwgMTI1OTc4LCAxMjU5ODcsIDEyNTk5NCwgMTI2MDA2LCAxMjYwMTgsIDEyNjAyMiwgCi0gICAgMTI2MDI2LCAxMjYwMzAsIDEyNjAzNCwgMTI2MDM4LCAxMjYwNDIsIDEyNjA1MCwgMTI2MDU4LCAxMjYwNjYsIDEyNjA3MCwgCi0gICAgMTI2MDc0LCAxMjYwNzgsIDEyNjA4MiwgMTI2MDg2LCAxMjYwOTAsIDEyNjA5NiwgMTI2MTAyLCAxMjYxMDYsIDEyNjExNywgCi0gICAgMTI2MTI1LCAxMjYxMjksIDEyNjEzMywgMTI2MTM3LCAxMjYxNDEsIDEyNjE0NywgMTI2MTU0LCAxMjYxNjUsIDEyNjE3NSwgCi0gICAgMTI2MTg1LCAxMjYxOTYsIDEyNjIwNSwgMTI2MjE2LCAxMjYyMjIsIDEyNjIyOCwgMCwgMCwgMCwgMCwgMTI2MjM0LCAKLSAgICAxMjYyNDMsIDEyNjI1MCwgMTI2MjU2LCAxMjYyNjAsIDEyNjI2NCwgMTI2MjY4LCAxMjYyNzcsIDEyNjI4OSwgMTI2MjkzLCAKLSAgICAxMjYzMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTgwOCwgMTI1ODEyLCAxMjU4MTYsIAorICAgIDEyNTgyMSwgMTI1ODI2LCAxMjU4MjgsIDEyNTgzMiwgMTI1ODQxLCAxMjU4NDksIDEyNTg1NywgMTI1ODcwLCAxMjU4ODMsIAorICAgIDEyNTg5NiwgMTI1OTAzLCAxMjU5MTAsIDEyNTkxNCwgMTI1OTIzLCAxMjU5MzEsIDEyNTkzNSwgMTI1OTQ0LCAxMjU5NTEsIAorICAgIDEyNTk1NSwgMTI1OTU5LCAxMjU5NjMsIDEyNTk2NywgMTI1OTc0LCAxMjU5NzgsIDEyNTk4MiwgMTI1OTg2LCAxMjU5OTAsIAorICAgIDEyNTk5NywgMTI2MDA2LCAxMjYwMTUsIDEyNjAyMiwgMTI2MDM0LCAxMjYwNDYsIDEyNjA1MCwgMTI2MDU0LCAxMjYwNTgsIAorICAgIDEyNjA2MiwgMTI2MDY2LCAxMjYwNzAsIDEyNjA3OCwgMTI2MDg2LCAxMjYwOTQsIDEyNjA5OCwgMTI2MTAyLCAxMjYxMDYsIAorICAgIDEyNjExMCwgMTI2MTE0LCAxMjYxMTgsIDEyNjEyNCwgMTI2MTMwLCAxMjYxMzQsIDEyNjE0NSwgMTI2MTUzLCAxMjYxNTcsIAorICAgIDEyNjE2MSwgMTI2MTY1LCAxMjYxNjksIDEyNjE3NSwgMTI2MTgyLCAxMjYxOTMsIDEyNjIwMywgMTI2MjEzLCAxMjYyMjQsIAorICAgIDEyNjIzMywgMTI2MjQ0LCAxMjYyNTAsIDEyNjI1NiwgMCwgMCwgMCwgMCwgMTI2MjYyLCAxMjYyNzEsIDEyNjI3OCwgCisgICAgMTI2Mjg0LCAxMjYyODgsIDEyNjI5MiwgMTI2Mjk2LCAxMjYzMDUsIDEyNjMxNywgMTI2MzIxLCAxMjYzMjgsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEyNjMwNywgMTI2MzA5LCAxMjYzMTEsIDEyNjMxNSwgMTI2MzE5LCAxMjYzMjMsIDEyNjMzMiwgMTI2MzM0LCAKLSAgICAxMjYzMzYsIDEyNjMzOSwgMTI2MzQxLCAxMjYzNDMsIDEyNjM0NywgMTI2MzQ5LCAxMjYzNTMsIDEyNjM1NSwgMTI2MzU5LCAKLSAgICAxMjYzNjEsIDEyNjM2MywgMTI2MzY3LCAxMjYzNzEsIDEyNjM3NywgMTI2Mzc5LCAxMjYzODMsIDEyNjM4NSwgMTI2Mzg5LCAKLSAgICAxMjYzOTMsIDEyNjM5NywgMTI2NDAxLCAxMjY0MDMsIDEyNjQwNSwgMTI2NDA5LCAxMjY0MTMsIDEyNjQxNywgMTI2NDIxLCAKLSAgICAxMjY0MjMsIDEyNjQyNSwgMTI2NDI3LCAxMjY0MzIsIDEyNjQzNywgMTI2NDQwLCAxMjY0NDgsIDEyNjQ1NiwgMTI2NDU4LCAKLSAgICAxMjY0NjMsIDEyNjQ2NiwgMTI2NDcxLCAxMjY0ODIsIDEyNjQ4OSwgMTI2NDk0LCAxMjY0OTksIDEyNjUwMSwgMTI2NTA1LCAKLSAgICAxMjY1MDcsIDEyNjUxMSwgMTI2NTEzLCAxMjY1MTcsIDEyNjUyMSwgMTI2NTI0LCAxMjY1MjcsIDEyNjUyOSwgMTI2NTMyLCAKLSAgICAxMjY1MzQsIDEyNjUzOCwgMTI2NTQwLCAxMjY1NDIsIDEyNjU0NCwgMTI2NTQ4LCAxMjY1NTAsIDEyNjU1NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MzM1LCAKKyAgICAxMjYzMzcsIDEyNjMzOSwgMTI2MzQzLCAxMjYzNDcsIDEyNjM1MSwgMTI2MzYwLCAxMjYzNjIsIDEyNjM2NCwgMTI2MzY3LCAKKyAgICAxMjYzNjksIDEyNjM3MSwgMTI2Mzc1LCAxMjYzNzcsIDEyNjM4MSwgMTI2MzgzLCAxMjYzODcsIDEyNjM4OSwgMTI2MzkxLCAKKyAgICAxMjYzOTUsIDEyNjM5OSwgMTI2NDA1LCAxMjY0MDcsIDEyNjQxMSwgMTI2NDEzLCAxMjY0MTcsIDEyNjQyMSwgMTI2NDI1LCAKKyAgICAxMjY0MjksIDEyNjQzMSwgMTI2NDMzLCAxMjY0MzcsIDEyNjQ0MSwgMTI2NDQ1LCAxMjY0NDksIDEyNjQ1MSwgMTI2NDUzLCAKKyAgICAxMjY0NTUsIDEyNjQ2MCwgMTI2NDY1LCAxMjY0NjgsIDEyNjQ3NiwgMTI2NDg0LCAxMjY0ODYsIDEyNjQ5MSwgMTI2NDk0LCAKKyAgICAxMjY0OTksIDEyNjUxMCwgMTI2NTE3LCAxMjY1MjIsIDEyNjUyNywgMTI2NTI5LCAxMjY1MzMsIDEyNjUzNSwgMTI2NTM5LCAKKyAgICAxMjY1NDEsIDEyNjU0NSwgMTI2NTQ5LCAxMjY1NTIsIDEyNjU1NSwgMTI2NTU3LCAxMjY1NjAsIDEyNjU2MiwgMTI2NTY2LCAKKyAgICAxMjY1NjgsIDEyNjU3MCwgMTI2NTcyLCAxMjY1NzYsIDEyNjU3OCwgMTI2NTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjY1NTcsIDEyNjU2MiwgMTI2NTY3LCAxMjY1NzIsIDEyNjU3NywgMTI2NTgyLCAKLSAgICAxMjY1ODcsIDEyNjU5NCwgMTI2NjAxLCAxMjY2MDgsIDEyNjYxNSwgMTI2NjIwLCAxMjY2MjUsIDEyNjYzMCwgMTI2NjM1LCAKLSAgICAxMjY2NDIsIDEyNjY0OCwgMTI2NjU1LCAxMjY2NjIsIDEyNjY2OSwgMTI2Njc0LCAxMjY2NzksIDEyNjY4NCwgMTI2Njg5LCAKLSAgICAxMjY2OTQsIDEyNjcwMSwgMTI2NzA4LCAxMjY3MTMsIDEyNjcxOCwgMTI2NzI1LCAxMjY3MzIsIDEyNjc0MCwgMTI2NzQ4LCAKLSAgICAxMjY3NTUsIDEyNjc2MiwgMTI2NzcwLCAxMjY3NzgsIDEyNjc4NiwgMTI2NzkzLCAxMjY4MDMsIDEyNjgxNCwgMTI2ODE5LCAKLSAgICAxMjY4MjYsIDEyNjgzMywgMTI2ODQwLCAxMjY4NDgsIDEyNjg1NiwgMTI2ODY3LCAxMjY4NzUsIDEyNjg4MywgMTI2ODkxLCAKLSAgICAxMjY4OTYsIDEyNjkwMSwgMTI2OTA2LCAxMjY5MTEsIDEyNjkxNiwgMTI2OTIxLCAxMjY5MjYsIDEyNjkzMSwgMTI2OTM2LCAKLSAgICAxMjY5NDEsIDEyNjk0NiwgMTI2OTUxLCAxMjY5NTgsIDEyNjk2MywgMTI2OTY4LCAxMjY5NzUsIDEyNjk4MCwgMTI2OTg1LCAKLSAgICAxMjY5OTAsIDEyNjk5NSwgMTI3MDAwLCAxMjcwMDUsIDEyNzAxMCwgMTI3MDE1LCAxMjcwMjAsIDEyNzAyNSwgMTI3MDMwLCAKLSAgICAxMjcwMzUsIDEyNzA0MiwgMTI3MDUwLCAxMjcwNTUsIDEyNzA2MCwgMTI3MDY3LCAxMjcwNzIsIDEyNzA3NywgMTI3MDgyLCAKLSAgICAxMjcwODksIDEyNzA5NCwgMTI3MTAxLCAxMjcxMDYsIDEyNzExMywgMTI3MTE4LCAxMjcxMjcsIDEyNzEzNiwgMTI3MTQxLCAKLSAgICAxMjcxNDYsIDEyNzE1MSwgMTI3MTU2LCAxMjcxNjEsIDEyNzE2NiwgMTI3MTcxLCAxMjcxNzYsIDEyNzE4MSwgMTI3MTg2LCAKLSAgICAxMjcxOTEsIDEyNzE5NiwgMTI3MjAxLCAxMjcyMDksIDEyNzIxNywgMTI3MjIyLCAxMjcyMjcsIDEyNzIzMiwgMTI3MjM3LCAKLSAgICAxMjcyNDIsIDEyNzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjU0LCAxMjcyNTgsIAotICAgIDEyNzI2MiwgMTI3MjY2LCAxMjcyNzAsIDEyNzI3NCwgMTI3Mjc4LCAxMjcyODIsIDEyNzI4NiwgMTI3MjkwLCAxMjcyOTQsIAorICAgIDAsIDAsIDEyNjU4NSwgMTI2NTkwLCAxMjY1OTUsIDEyNjYwMCwgMTI2NjA1LCAxMjY2MTAsIDEyNjYxNSwgMTI2NjIyLCAKKyAgICAxMjY2MjksIDEyNjYzNiwgMTI2NjQzLCAxMjY2NDgsIDEyNjY1MywgMTI2NjU4LCAxMjY2NjMsIDEyNjY3MCwgMTI2Njc2LCAKKyAgICAxMjY2ODMsIDEyNjY5MCwgMTI2Njk3LCAxMjY3MDIsIDEyNjcwNywgMTI2NzEyLCAxMjY3MTcsIDEyNjcyMiwgMTI2NzI5LCAKKyAgICAxMjY3MzYsIDEyNjc0MSwgMTI2NzQ2LCAxMjY3NTMsIDEyNjc2MCwgMTI2NzY4LCAxMjY3NzYsIDEyNjc4MywgMTI2NzkwLCAKKyAgICAxMjY3OTgsIDEyNjgwNiwgMTI2ODE0LCAxMjY4MjEsIDEyNjgzMSwgMTI2ODQyLCAxMjY4NDcsIDEyNjg1NCwgMTI2ODYxLCAKKyAgICAxMjY4NjgsIDEyNjg3NiwgMTI2ODg0LCAxMjY4OTUsIDEyNjkwMywgMTI2OTExLCAxMjY5MTksIDEyNjkyNCwgMTI2OTI5LCAKKyAgICAxMjY5MzQsIDEyNjkzOSwgMTI2OTQ0LCAxMjY5NDksIDEyNjk1NCwgMTI2OTU5LCAxMjY5NjQsIDEyNjk2OSwgMTI2OTc0LCAKKyAgICAxMjY5NzksIDEyNjk4NiwgMTI2OTkxLCAxMjY5OTYsIDEyNzAwMywgMTI3MDA4LCAxMjcwMTMsIDEyNzAxOCwgMTI3MDIzLCAKKyAgICAxMjcwMjgsIDEyNzAzMywgMTI3MDM4LCAxMjcwNDMsIDEyNzA0OCwgMTI3MDUzLCAxMjcwNTgsIDEyNzA2MywgMTI3MDcwLCAKKyAgICAxMjcwNzgsIDEyNzA4MywgMTI3MDg4LCAxMjcwOTUsIDEyNzEwMCwgMTI3MTA1LCAxMjcxMTAsIDEyNzExNywgMTI3MTIyLCAKKyAgICAxMjcxMjksIDEyNzEzNCwgMTI3MTQxLCAxMjcxNDYsIDEyNzE1NSwgMTI3MTY0LCAxMjcxNjksIDEyNzE3NCwgMTI3MTc5LCAKKyAgICAxMjcxODQsIDEyNzE4OSwgMTI3MTk0LCAxMjcxOTksIDEyNzIwNCwgMTI3MjA5LCAxMjcyMTQsIDEyNzIxOSwgMTI3MjI0LCAKKyAgICAxMjcyMjksIDEyNzIzNywgMTI3MjQ1LCAxMjcyNTAsIDEyNzI1NSwgMTI3MjYwLCAxMjcyNjUsIDEyNzI3MCwgMTI3Mjc2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcyODIsIDEyNzI4NiwgMTI3MjkwLCAxMjcyOTQsIAogICAgIDEyNzI5OCwgMTI3MzAyLCAxMjczMDYsIDEyNzMxMCwgMTI3MzE0LCAxMjczMTgsIDEyNzMyMiwgMTI3MzI2LCAxMjczMzAsIAogICAgIDEyNzMzNCwgMTI3MzM4LCAxMjczNDIsIDEyNzM0NiwgMTI3MzUwLCAxMjczNTQsIDEyNzM1OCwgMTI3MzYyLCAxMjczNjYsIAogICAgIDEyNzM3MCwgMTI3Mzc0LCAxMjczNzgsIDEyNzM4MiwgMTI3Mzg2LCAxMjczOTAsIDEyNzM5NCwgMTI3Mzk4LCAxMjc0MDIsIApAQCAtMTY5MzUsMTc3ICsxNjk1MiwxNzkgQEAKICAgICAxMjkzMTQsIDEyOTMxOCwgMTI5MzIyLCAxMjkzMjYsIDEyOTMzMCwgMTI5MzM0LCAxMjkzMzgsIDEyOTM0MiwgMTI5MzQ2LCAKICAgICAxMjkzNTAsIDEyOTM1NCwgMTI5MzU4LCAxMjkzNjIsIDEyOTM2NiwgMTI5MzcwLCAxMjkzNzQsIDEyOTM3OCwgMTI5MzgyLCAKICAgICAxMjkzODYsIDEyOTM5MCwgMTI5Mzk0LCAxMjkzOTgsIDEyOTQwMiwgMTI5NDA2LCAxMjk0MTAsIDEyOTQxNCwgMTI5NDE4LCAKKyAgICAxMjk0MjIsIDEyOTQyNiwgMTI5NDMwLCAxMjk0MzQsIDEyOTQzOCwgMTI5NDQyLCAxMjk0NDYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTQ1MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI5NDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjk0MjYsIDEyOTQyOSwgMTI5NDMzLCAxMjk0MzcsIDEyOTQ0MCwgCi0gICAgMTI5NDQ0LCAxMjk0NDgsIDEyOTQ1MSwgMTI5NDU0LCAxMjk0NTgsIDEyOTQ2MiwgMTI5NDY1LCAxMjk0NjgsIDEyOTQ3MSwgCi0gICAgMTI5NDc0LCAxMjk0NzksIDEyOTQ4MiwgMTI5NDg2LCAxMjk0ODksIDEyOTQ5MiwgMTI5NDk1LCAxMjk0OTgsIDEyOTUwMSwgCi0gICAgMTI5NTA0LCAxMjk1MDcsIDEyOTUxMCwgMTI5NTEzLCAxMjk1MTYsIDEyOTUxOSwgMTI5NTIzLCAxMjk1MjcsIDEyOTUzMSwgCi0gICAgMTI5NTM1LCAxMjk1NDAsIDEyOTU0NSwgMTI5NTUxLCAxMjk1NTcsIDEyOTU2MywgMTI5NTY4LCAxMjk1NzQsIDEyOTU4MCwgCi0gICAgMTI5NTg2LCAxMjk1OTEsIDEyOTU5NywgMTI5NjAzLCAxMjk2MDgsIDEyOTYxMywgMTI5NjE5LCAxMjk2MjQsIDEyOTYzMCwgCi0gICAgMTI5NjM2LCAxMjk2NDEsIDEyOTY0NywgMTI5NjUzLCAxMjk2NTgsIDEyOTY2NCwgMTI5NjcwLCAxMjk2NzYsIDEyOTY4MiwgCi0gICAgMTI5Njg4LCAxMjk2OTIsIDEyOTY5NywgMTI5NzAxLCAxMjk3MDYsIDEyOTcxMCwgMTI5NzE1LCAxMjk3MjAsIDEyOTcyNiwgCi0gICAgMTI5NzMyLCAxMjk3MzgsIDEyOTc0MywgMTI5NzQ5LCAxMjk3NTUsIDEyOTc2MSwgMTI5NzY2LCAxMjk3NzIsIDEyOTc3OCwgCi0gICAgMTI5NzgzLCAxMjk3ODgsIDEyOTc5NCwgMTI5Nzk5LCAxMjk4MDUsIDEyOTgxMSwgMTI5ODE2LCAxMjk4MjIsIDEyOTgyOCwgCi0gICAgMTI5ODMzLCAxMjk4MzksIDEyOTg0NSwgMTI5ODUxLCAxMjk4NTcsIDEyOTg2MywgMTI5ODY4LCAxMjk4NzIsIDEyOTg3NywgCi0gICAgMTI5ODc5LCAxMjk4ODMsIDEyOTg4NiwgMTI5ODg5LCAxMjk4OTIsIDEyOTg5NSwgMTI5ODk4LCAxMjk5MDEsIDEyOTkwNCwgCi0gICAgMTI5OTA3LCAxMjk5MTAsIDEyOTkxMywgMTI5OTE2LCAxMjk5MTksIDEyOTkyMiwgMTI5OTI1LCAxMjk5MjgsIDEyOTkzMSwgCi0gICAgMTI5OTM0LCAxMjk5MzcsIDEyOTk0MCwgMTI5OTQzLCAxMjk5NDYsIDEyOTk0OSwgMTI5OTUyLCAxMjk5NTUsIDEyOTk1OCwgCi0gICAgMTI5OTYxLCAxMjk5NjQsIDEyOTk2NywgMTI5OTcwLCAxMjk5NzMsIDEyOTk3NiwgMTI5OTc5LCAxMjk5ODIsIDEyOTk4NSwgCi0gICAgMTI5OTg4LCAxMjk5OTEsIDEyOTk5NCwgMTI5OTk3LCAxMzAwMDAsIDEzMDAwMywgMTMwMDA2LCAxMzAwMDksIDEzMDAxMiwgCi0gICAgMTMwMDE1LCAxMzAwMTgsIDEzMDAyMSwgMTMwMDI0LCAxMzAwMjcsIDEzMDAzMCwgMTMwMDMzLCAxMzAwMzYsIDEzMDAzOSwgCi0gICAgMTMwMDQyLCAxMzAwNDUsIDEzMDA0OCwgMTMwMDUxLCAxMzAwNTQsIDEzMDA1NywgMTMwMDYwLCAxMzAwNjMsIDEzMDA2NiwgCi0gICAgMTMwMDY5LCAxMzAwNzIsIDEzMDA3NSwgMTMwMDc4LCAxMzAwODEsIDEzMDA4NCwgMTMwMDg3LCAxMzAwOTAsIDEzMDA5MywgCi0gICAgMTMwMDk2LCAxMzAwOTksIDEzMDEwMiwgMTMwMTA1LCAxMzAxMDgsIDEzMDExMSwgMTMwMTE0LCAxMzAxMTcsIDEzMDEyMCwgCi0gICAgMTMwMTIzLCAxMzAxMjYsIDEzMDEyOSwgMTMwMTMyLCAxMzAxMzUsIDEzMDEzOCwgMTMwMTQxLCAxMzAxNDQsIDEzMDE0NywgCi0gICAgMTMwMTUwLCAxMzAxNTMsIDEzMDE1NiwgMTMwMTU5LCAxMzAxNjIsIDEzMDE2NSwgMTMwMTY4LCAxMzAxNzEsIDEzMDE3NCwgCi0gICAgMTMwMTc3LCAxMzAxODAsIDEzMDE4MywgMTMwMTg2LCAxMzAxODksIDEzMDE5MiwgMTMwMTk1LCAxMzAxOTgsIDEzMDIwMSwgCi0gICAgMTMwMjA0LCAxMzAyMDcsIDEzMDIxMCwgMTMwMjEzLCAxMzAyMTYsIDEzMDIxOSwgMTMwMjIyLCAxMzAyMjUsIDEzMDIyOCwgCi0gICAgMTMwMjMxLCAxMzAyMzQsIDEzMDIzNywgMTMwMjQwLCAxMzAyNDMsIDEzMDI0NiwgMTMwMjQ5LCAxMzAyNTIsIDEzMDI1NSwgCi0gICAgMTMwMjU4LCAxMzAyNjEsIDEzMDI2NCwgMTMwMjY3LCAxMzAyNzAsIDEzMDI3MywgMTMwMjc2LCAxMzAyNzksIDEzMDI4MiwgCi0gICAgMTMwMjg1LCAxMzAyODgsIDEzMDI5MSwgMTMwMjk0LCAxMzAyOTcsIDEzMDMwMCwgMTMwMzAzLCAxMzAzMDYsIDEzMDMwOSwgCi0gICAgMTMwMzEyLCAxMzAzMTUsIDEzMDMxOCwgMTMwMzIxLCAxMzAzMjQsIDEzMDMyNywgMTMwMzMwLCAxMzAzMzMsIDEzMDMzNiwgCi0gICAgMTMwMzM5LCAxMzAzNDIsIDEzMDM0NSwgMTMwMzQ4LCAxMzAzNTEsIDEzMDM1NCwgMTMwMzU3LCAxMzAzNjAsIDEzMDM2MywgCi0gICAgMTMwMzY2LCAxMzAzNjksIDEzMDM3MiwgMTMwMzc1LCAxMzAzNzgsIDEzMDM4MSwgMTMwMzg0LCAxMzAzODcsIDEzMDM5MCwgCi0gICAgMTMwMzkzLCAxMzAzOTYsIDEzMDM5OSwgMTMwNDAyLCAxMzA0MDUsIDEzMDQwOCwgMTMwNDExLCAxMzA0MTQsIDEzMDQxNywgCi0gICAgMTMwNDIwLCAxMzA0MjMsIDEzMDQyNiwgMTMwNDI5LCAxMzA0MzIsIDEzMDQzNSwgMTMwNDM4LCAxMzA0NDEsIDEzMDQ0NCwgCi0gICAgMTMwNDQ3LCAxMzA0NTAsIDEzMDQ1MywgMTMwNDU2LCAxMzA0NTksIDEzMDQ2MiwgMTMwNDY1LCAxMzA0NjgsIDEzMDQ3MSwgCi0gICAgMTMwNDc0LCAxMzA0NzcsIDEzMDQ4MCwgMTMwNDgzLCAxMzA0ODYsIDEzMDQ4OSwgMTMwNDkyLCAxMzA0OTUsIDEzMDQ5OCwgCi0gICAgMTMwNTAxLCAxMzA1MDQsIDEzMDUwNywgMTMwNTEwLCAxMzA1MTMsIDEzMDUxNiwgMTMwNTE5LCAxMzA1MjIsIDEzMDUyNSwgCi0gICAgMTMwNTI4LCAxMzA1MzEsIDEzMDUzNCwgMTMwNTM3LCAxMzA1NDAsIDEzMDU0MywgMTMwNTQ2LCAxMzA1NDksIDEzMDU1MiwgCi0gICAgMTMwNTU1LCAxMzA1NTgsIDEzMDU2MSwgMTMwNTY0LCAxMzA1NjcsIDEzMDU3MCwgMTMwNTczLCAxMzA1NzYsIDEzMDU3OSwgCi0gICAgMTMwNTgyLCAxMzA1ODUsIDEzMDU4OCwgMTMwNTkxLCAxMzA1OTQsIDEzMDU5NywgMTMwNjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzA2MDMsIDEzMDYwNSwgMTMwNjA3LCAxMzA2MTIsIDEzMDYxNCwgCi0gICAgMTMwNjE5LCAxMzA2MjEsIDEzMDYyNiwgMTMwNjI4LCAxMzA2MzMsIDEzMDYzNSwgMTMwNjM3LCAxMzA2MzksIDEzMDY0MSwgCi0gICAgMTMwNjQzLCAxMzA2NDUsIDEzMDY0NywgMTMwNjQ5LCAxMzA2NTEsIDEzMDY1NCwgMTMwNjU3LCAxMzA2NTksIDEzMDY2MSwgCi0gICAgMTMwNjY1LCAxMzA2NjgsIDEzMDY3MywgMTMwNjc1LCAxMzA2NzcsIDEzMDY3OSwgMTMwNjgzLCAxMzA2ODYsIDEzMDY4OCwgCi0gICAgMTMwNjkyLCAxMzA2OTQsIDEzMDY5OCwgMTMwNzAwLCAxMzA3MDQsIDEzMDcwNywgMTMwNzA5LCAxMzA3MTMsIDEzMDcxNywgCi0gICAgMTMwNzE5LCAxMzA3MjUsIDEzMDcyNywgMTMwNzMyLCAxMzA3MzQsIDEzMDczOSwgMTMwNzQxLCAxMzA3NDYsIDEzMDc0OCwgCi0gICAgMTMwNzUzLCAxMzA3NTUsIDEzMDc1OCwgMTMwNzYwLCAxMzA3NjQsIDEzMDc2NiwgMTMwNzczLCAxMzA3NzUsIDEzMDc3NywgCi0gICAgMTMwNzc5LCAxMzA3ODQsIDEzMDc4NiwgMTMwNzg4LCAxMzA3OTAsIDEzMDc5MiwgMTMwNzk0LCAxMzA3OTksIDEzMDgwMywgCi0gICAgMTMwODA1LCAxMzA4MTAsIDEzMDgxNCwgMTMwODE2LCAxMzA4MjEsIDEzMDgyNSwgMTMwODI3LCAxMzA4MzIsIDEzMDgzNiwgCi0gICAgMTMwODM4LCAxMzA4NDAsIDEzMDg0MiwgMTMwODQ0LCAxMzA4NDgsIDEzMDg1MCwgMTMwODU1LCAxMzA4NTcsIDEzMDg2MywgCi0gICAgMTMwODY1LCAxMzA4NzEsIDEzMDg3MywgMTMwODc1LCAxMzA4NzcsIDEzMDg4MSwgMTMwODgzLCAxMzA4OTAsIDEzMDg5MiwgCi0gICAgMTMwODk5LCAxMzA5MDEsIDEzMDkwNiwgMTMwOTExLCAxMzA5MTMsIDEzMDkxOSwgMTMwOTI1LCAxMzA5MjcsIDEzMDkzMywgCi0gICAgMTMwOTM4LCAxMzA5NDAsIDEzMDk0NiwgMTMwOTUyLCAxMzA5NTQsIDEzMDk2MCwgMTMwOTY2LCAxMzA5NjgsIDEzMDk3NCwgCi0gICAgMTMwOTc4LCAxMzA5ODAsIDEzMDk4NSwgMTMwOTg3LCAxMzA5ODksIDEzMDk5NCwgMTMwOTk2LCAxMzA5OTgsIDEzMTAwNCwgCi0gICAgMTMxMDA2LCAxMzEwMTEsIDEzMTAxNSwgMTMxMDE3LCAxMzEwMjIsIDEzMTAyNiwgMTMxMDI4LCAxMzEwMzQsIDEzMTAzNiwgCi0gICAgMTMxMDQwLCAxMzEwNDIsIDEzMTA0NiwgMTMxMDQ4LCAxMzEwNTUsIDEzMTA2MiwgMTMxMDY0LCAxMzEwNzEsIDEzMTA3OCwgCi0gICAgMTMxMDgwLCAxMzEwODUsIDEzMTA4NywgMTMxMDk0LCAxMzEwOTYsIDEzMTEwMSwgMTMxMTAzLCAxMzExMDksIDEzMTExMSwgCi0gICAgMTMxMTE1LCAxMzExMTcsIDEzMTEyMywgMTMxMTI1LCAxMzExMjksIDEzMTEzMSwgMTMxMTM3LCAxMzExMzksIDEzMTE0MSwgCi0gICAgMTMxMTQzLCAxMzExNDgsIDEzMTE1MywgMTMxMTU1LCAxMzExNTksIDEzMTE2NiwgMTMxMTczLCAxMzExNzgsIDEzMTE4MywgCi0gICAgMTMxMTk1LCAxMzExOTcsIDEzMTE5OSwgMTMxMjAxLCAxMzEyMDMsIDEzMTIwNSwgMTMxMjA3LCAxMzEyMDksIDEzMTIxMSwgCi0gICAgMTMxMjEzLCAxMzEyMTUsIDEzMTIxNywgMTMxMjE5LCAxMzEyMjEsIDEzMTIyMywgMTMxMjI1LCAxMzEyMjcsIDEzMTIyOSwgCi0gICAgMTMxMjM1LCAxMzEyNDIsIDEzMTI0NywgMTMxMjUyLCAxMzEyNjMsIDEzMTI2NSwgMTMxMjY3LCAxMzEyNjksIDEzMTI3MSwgCi0gICAgMTMxMjczLCAxMzEyNzUsIDEzMTI3NywgMTMxMjc5LCAxMzEyODEsIDEzMTI4MywgMTMxMjg1LCAxMzEyODcsIDEzMTI4OSwgCi0gICAgMTMxMjkxLCAxMzEyOTMsIDEzMTI5NSwgMTMxMzAwLCAxMzEzMDIsIDEzMTMwNCwgMTMxMzE1LCAxMzEzMTcsIDEzMTMxOSwgCi0gICAgMTMxMzIxLCAxMzEzMjMsIDEzMTMyNSwgMTMxMzI3LCAxMzEzMjksIDEzMTMzMSwgMTMxMzMzLCAxMzEzMzUsIDEzMTMzNywgCi0gICAgMTMxMzM5LCAxMzEzNDEsIDEzMTM0MywgMTMxMzQ1LCAxMzEzNDcsIDEzMTM0OSwgMTMxMzUxLCAxMzEzNTMsIDEzMTM1NSwgCi0gICAgMTMxMzU3LCAxMzEzNTksIDEzMTM2MSwgMTMxMzYzLCAxMzEzNjUsIDEzMTM2NywgMTMxMzY5LCAxMzEzNzEsIDEzMTM3MywgCi0gICAgMTMxMzc1LCAxMzEzNzcsIDEzMTM3OSwgMTMxMzgxLCAxMzEzODMsIDEzMTM4NSwgMTMxMzg3LCAxMzEzODksIDEzMTM5MSwgCi0gICAgMTMxMzkzLCAxMzEzOTUsIDEzMTM5NywgMTMxMzk5LCAxMzE0MDEsIDEzMTQwMywgMTMxNDA1LCAxMzE0MDcsIDEzMTQwOSwgCi0gICAgMTMxNDExLCAxMzE0MTMsIDEzMTQxNSwgMTMxNDE3LCAxMzE0MTksIDEzMTQyMSwgMTMxNDIzLCAxMzE0MjUsIDEzMTQyNywgCi0gICAgMTMxNDI5LCAxMzE0MzEsIDEzMTQzMywgMTMxNDM1LCAxMzE0MzcsIDEzMTQzOSwgMTMxNDQxLCAxMzE0NDMsIDEzMTQ0NSwgCi0gICAgMTMxNDQ3LCAxMzE0NDksIDEzMTQ1MSwgMTMxNDUzLCAxMzE0NTUsIDEzMTQ1NywgMTMxNDU5LCAxMzE0NjEsIDEzMTQ2MywgCi0gICAgMTMxNDY1LCAxMzE0NjcsIDEzMTQ2OSwgMTMxNDcxLCAxMzE0NzMsIDEzMTQ3NSwgMTMxNDc3LCAxMzE0NzksIDEzMTQ4MSwgCi0gICAgMTMxNDgzLCAxMzE0ODUsIDEzMTQ4NywgMTMxNDg5LCAxMzE0OTEsIDEzMTQ5MywgMTMxNDk1LCAxMzE0OTcsIDEzMTQ5OSwgCi0gICAgMTMxNTAxLCAxMzE1MDMsIDEzMTUwNSwgMTMxNTA3LCAxMzE1MDksIDEzMTUxMSwgMTMxNTEzLCAxMzE1MTUsIDEzMTUxNywgCi0gICAgMTMxNTE5LCAxMzE1MjEsIDEzMTUyMywgMTMxNTI1LCAxMzE1MjcsIDEzMTUyOSwgMTMxNTMxLCAxMzE1MzMsIDEzMTUzNSwgCi0gICAgMTMxNTM3LCAxMzE1MzksIDEzMTU0MSwgMTMxNTQzLCAxMzE1NDUsIDEzMTU0NywgMTMxNTQ5LCAxMzE1NTEsIDEzMTU1MywgCi0gICAgMTMxNTU1LCAxMzE1NTcsIDEzMTU1OSwgMTMxNTYxLCAxMzE1NjMsIDEzMTU2NSwgMTMxNTY3LCAxMzE1NjksIDEzMTU3MSwgCi0gICAgMTMxNTczLCAxMzE1NzUsIDEzMTU3NywgMTMxNTc5LCAxMzE1ODEsIDEzMTU4MywgMTMxNTg1LCAxMzE1ODcsIDEzMTU4OSwgCi0gICAgMTMxNTkxLCAxMzE1OTMsIDEzMTU5NSwgMTMxNTk3LCAxMzE1OTksIDEzMTYwMSwgMTMxNjAzLCAxMzE2MDUsIDEzMTYwNywgCi0gICAgMTMxNjA5LCAxMzE2MTEsIDEzMTYxMywgMTMxNjE1LCAxMzE2MTcsIDEzMTYxOSwgMTMxNjIxLCAxMzE2MjMsIDEzMTYyNSwgCi0gICAgMTMxNjI3LCAxMzE2MjksIDEzMTYzMSwgMTMxNjMzLCAxMzE2MzUsIDEzMTYzNywgMTMxNjM5LCAxMzE2NDEsIDEzMTY0MywgCi0gICAgMTMxNjQ1LCAxMzE2NDcsIDEzMTY0OSwgMTMxNjUxLCAxMzE2NTMsIDEzMTY1NSwgMTMxNjU3LCAxMzE2NTksIDEzMTY2MSwgCi0gICAgMTMxNjYzLCAxMzE2NjUsIDEzMTY2NywgMTMxNjY5LCAxMzE2NzEsIDEzMTY3MywgMTMxNjc1LCAxMzE2NzcsIDEzMTY3OSwgCi0gICAgMTMxNjgxLCAxMzE2ODMsIDEzMTY4NSwgMTMxNjg3LCAxMzE2ODksIDEzMTY5MSwgMTMxNjkzLCAxMzE2OTUsIDEzMTY5NywgCi0gICAgMTMxNjk5LCAxMzE3MDEsIDEzMTcwMywgMTMxNzA1LCAxMzE3MDcsIDEzMTcwOSwgMTMxNzExLCAxMzE3MTMsIDEzMTcxNSwgCi0gICAgMTMxNzE3LCAxMzE3MTksIDEzMTcyMSwgMTMxNzIzLCAxMzE3MjUsIDEzMTcyNywgMTMxNzI5LCAxMzE3MzEsIDEzMTczMywgCi0gICAgMTMxNzM1LCAxMzE3MzcsIDEzMTczOSwgMTMxNzQxLCAxMzE3NDMsIDEzMTc0NSwgMTMxNzQ3LCAxMzE3NDksIDEzMTc1MSwgCi0gICAgMTMxNzUzLCAxMzE3NTUsIDEzMTc1NywgMTMxNzU5LCAxMzE3NjEsIDEzMTc2MywgMTMxNzY1LCAxMzE3NjcsIDEzMTc2OSwgCi0gICAgMTMxNzcxLCAxMzE3NzMsIDEzMTc3NSwgMTMxNzc3LCAxMzE3NzksIDEzMTc4MSwgMTMxNzgzLCAxMzE3ODUsIDEzMTc4NywgCi0gICAgMTMxNzg5LCAxMzE3OTEsIDEzMTc5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTMxNzk1LCAxMzE4MDUsIDEzMTgxNSwgMTMxODI0LCAxMzE4MzMsIDEzMTg0NiwgMTMxODU5LCAxMzE4NzEsIDEzMTg4MywgCi0gICAgMTMxODkzLCAxMzE5MDMsIDEzMTkxMywgMTMxOTIzLCAxMzE5MzQsIDEzMTk0NSwgMTMxOTU1LCAxMzE5NjQsIDEzMTk3MywgCi0gICAgMTMxOTgyLCAxMzE5OTUsIDEzMjAwOCwgMTMyMDIwLCAxMzIwMzIsIDEzMjA0MiwgMTMyMDUyLCAxMzIwNjIsIDEzMjA3MiwgCi0gICAgMTMyMDgxLCAxMzIwOTAsIDEzMjA5OSwgMTMyMTA4LCAxMzIxMTcsIDEzMjEyNiwgMTMyMTM1LCAxMzIxNDQsIDEzMjE1MywgCi0gICAgMTMyMTYyLCAxMzIxNzEsIDEzMjE4MCwgMTMyMTkxLCAxMzIyMDEsIDEzMjIxMSwgMTMyMjI0LCAxMzIyMzQsIDEzMjI0NywgCi0gICAgMTMyMjU0LCAxMzIyNjQsIDEzMjI3MSwgMTMyMjc4LCAxMzIyODUsIDEzMjI5MiwgMTMyMjk5LCAxMzIzMDYsIDEzMjMxNSwgCi0gICAgMTMyMzI0LCAxMzIzMzMsIDEzMjM0MiwgMTMyMzUxLCAxMzIzNjAsIDEzMjM2OSwgMTMyMzc4LCAxMzIzODYsIDEzMjM5NCwgCi0gICAgMTMyNDAxLCAxMzI0MTEsIDEzMjQyMCwgMTMyNDI4LCAxMzI0MzUsIDEzMjQ0NSwgMTMyNDU0LCAxMzI0NTgsIDEzMjQ2MiwgCi0gICAgMTMyNDY2LCAxMzI0NzAsIDEzMjQ3NCwgMTMyNDc4LCAxMzI0ODIsIDEzMjQ4NiwgMTMyNDkwLCAxMzI0OTQsIDEzMjQ5NywgCi0gICAgMTMyNTAxLCAxMzI1MDQsIDEzMjUwNywgMTMyNTExLCAxMzI1MTUsIDEzMjUxOSwgMTMyNTIzLCAxMzI1MjcsIDEzMjUzMSwgCi0gICAgMTMyNTM1LCAxMzI1MzksIDEzMjU0MywgMTMyNTQ3LCAxMzI1NTEsIDEzMjU1NSwgMTMyNTU5LCAxMzI1NjMsIDEzMjU2NywgCi0gICAgMTMyNTcxLCAxMzI1NzUsIDEzMjU3OSwgMTMyNTgzLCAxMzI1ODcsIDEzMjU5MSwgMTMyNTk1LCAxMzI1OTksIDEzMjYwMywgCi0gICAgMTMyNjA3LCAxMzI2MTEsIDEzMjYxNSwgMTMyNjE5LCAxMzI2MjMsIDEzMjYyNywgMTMyNjMxLCAxMzI2MzUsIDEzMjYzOSwgCi0gICAgMTMyNjQzLCAxMzI2NDcsIDEzMjY1MSwgMTMyNjU1LCAxMzI2NTksIDEzMjY2MywgMTMyNjY3LCAxMzI2NzEsIDEzMjY3NSwgCi0gICAgMTMyNjc5LCAxMzI2ODMsIDEzMjY4NywgMTMyNjkxLCAxMzI2OTUsIDEzMjY5OSwgMTMyNzAzLCAxMzI3MDcsIDEzMjcxMSwgCi0gICAgMTMyNzE1LCAxMzI3MTksIDEzMjcyMywgMTMyNzI3LCAxMzI3MzEsIDEzMjczNSwgMTMyNzM5LCAxMzI3NDMsIDEzMjc0NywgCi0gICAgMTMyNzUxLCAxMzI3NTUsIDEzMjc1OSwgMTMyNzYzLCAxMzI3NjcsIDEzMjc3MSwgMTMyNzc1LCAxMzI3NzksIDEzMjc4MywgCi0gICAgMTMyNzg3LCAxMzI3OTEsIDEzMjc5NSwgMTMyNzk5LCAxMzI4MDMsIDEzMjgwNywgMTMyODExLCAxMzI4MTUsIDEzMjgxOSwgCi0gICAgMTMyODIzLCAxMzI4MjcsIDEzMjgzMSwgMTMyODM1LCAxMzI4MzksIDEzMjg0MywgMTMyODQ3LCAxMzI4NTAsIDEzMjg1NCwgCi0gICAgMTMyODU4LCAxMzI4NjIsIDEzMjg2NiwgMTMyODcwLCAxMzI4NzQsIDEzMjg3OCwgMTMyODgyLCAxMzI4ODYsIDEzMjg5MCwgCi0gICAgMTMyODk0LCAxMzI4OTgsIDEzMjkwMiwgMTMyOTA2LCAxMzI5MTAsIDEzMjkxNCwgMTMyOTE4LCAxMzI5MjIsIDEzMjkyNiwgCi0gICAgMTMyOTMwLCAxMzI5MzQsIDEzMjkzOCwgMTMyOTQyLCAxMzI5NDYsIDEzMjk1MCwgMTMyOTU0LCAxMzI5NTgsIDEzMjk2MiwgCi0gICAgMTMyOTY2LCAxMzI5NzAsIDEzMjk3NCwgMTMyOTc4LCAxMzI5ODIsIDEzMjk4NiwgMTMyOTkwLCAxMzI5OTQsIDEzMjk5OCwgCi0gICAgMTMzMDAyLCAxMzMwMDYsIDEzMzAxMCwgMTMzMDE0LCAxMzMwMTgsIDEzMzAyMiwgMTMzMDI2LCAxMzMwMzAsIDEzMzAzNCwgCi0gICAgMTMzMDM4LCAxMzMwNDIsIDEzMzA0NiwgMTMzMDUwLCAxMzMwNTQsIDEzMzA1OCwgMTMzMDYyLCAxMzMwNjYsIDEzMzA3MCwgCi0gICAgMTMzMDc0LCAxMzMwNzgsIDEzMzA4MiwgMTMzMDg2LCAxMzMwOTAsIDEzMzA5NCwgMTMzMDk4LCAxMzMxMDIsIDEzMzEwNiwgCi0gICAgMTMzMTEwLCAxMzMxMTQsIDEzMzExOCwgMTMzMTIyLCAxMzMxMjYsIDEzMzEzMCwgMTMzMTM0LCAxMzMxMzgsIDEzMzE0MiwgCi0gICAgMTMzMTQ2LCAxMzMxNTAsIDEzMzE1NCwgMTMzMTU4LCAxMzMxNjIsIDEzMzE2NiwgMTMzMTcwLCAxMzMxNzQsIDEzMzE3OCwgCi0gICAgMTMzMTgyLCAxMzMxODYsIDEzMzE5MCwgMTMzMTk0LCAxMzMxOTgsIDEzMzIwMiwgMTMzMjA2LCAxMzMyMTAsIDEzMzIxNCwgCi0gICAgMTMzMjE4LCAxMzMyMjIsIDEzMzIyNiwgMTMzMjMwLCAxMzMyMzQsIDEzMzIzOCwgMTMzMjQyLCAxMzMyNDYsIDEzMzI1MCwgCi0gICAgMTMzMjU0LCAxMzMyNTgsIDEzMzI2MiwgMTMzMjY2LCAxMzMyNzAsIDEzMzI3NCwgMTMzMjc4LCAxMzMyODIsIDEzMzI4NiwgCi0gICAgMTMzMjkwLCAxMzMyOTQsIDEzMzI5OCwgMTMzMzAyLCAxMzMzMDYsIDEzMzMxMCwgMTMzMzE0LCAxMzMzMTgsIDEzMzMyMiwgCi0gICAgMTMzMzI2LCAxMzMzMzAsIDEzMzMzNCwgMTMzMzM4LCAxMzMzNDIsIDEzMzM0NiwgMTMzMzUwLCAxMzMzNTQsIDEzMzM1OCwgCi0gICAgMTMzMzYyLCAxMzMzNjYsIDEzMzM3MCwgMTMzMzc0LCAxMzMzNzgsIDEzMzM4MiwgMTMzMzg2LCAxMzMzOTAsIDEzMzM5NCwgCi0gICAgMTMzMzk4LCAxMzM0MDIsIDEzMzQwNiwgMTMzNDEwLCAxMzM0MTQsIDEzMzQxOCwgMTMzNDIyLCAxMzM0MjYsIDEzMzQzMCwgCi0gICAgMTMzNDM0LCAxMzM0MzgsIDEzMzQ0MiwgMTMzNDQ2LCAxMzM0NTAsIDEzMzQ1NCwgMTMzNDU4LCAxMzM0NjIsIDEzMzQ2NiwgCi0gICAgMTMzNDcwLCAxMzM0NzQsIDEzMzQ3OCwgMTMzNDgyLCAxMzM0ODYsIDEzMzQ5MCwgMTMzNDk0LCAxMzM0OTgsIDEzMzUwMiwgCi0gICAgMTMzNTA2LCAxMzM1MTAsIDEzMzUxNCwgMTMzNTE4LCAxMzM1MjIsIDEzMzUyNiwgMTMzNTMwLCAxMzM1MzQsIDEzMzUzOCwgCi0gICAgMTMzNTQyLCAxMzM1NDYsIDEzMzU1MCwgMTMzNTU0LCAxMzM1NTgsIDEzMzU2MiwgMTMzNTY2LCAxMzM1NzAsIDEzMzU3NCwgCi0gICAgMTMzNTc4LCAxMzM1ODIsIDEzMzU4NiwgMTMzNTkwLCAxMzM1OTQsIDEzMzU5OCwgMTMzNjAyLCAxMzM2MDYsIDEzMzYxMCwgCi0gICAgMTMzNjE0LCAxMzM2MTksIDEzMzYyNCwgMTMzNjI5LCAxMzM2MzMsIDEzMzYzOSwgMTMzNjQ2LCAxMzM2NTMsIDEzMzY2MCwgCi0gICAgMTMzNjY3LCAxMzM2NzQsIDEzMzY4MSwgMTMzNjg4LCAxMzM2OTUsIDEzMzcwMiwgMTMzNzA5LCAxMzM3MTYsIDEzMzcyMywgCi0gICAgMTMzNzMwLCAxMzM3MzYsIDEzMzc0MywgMTMzNzUwLCAxMzM3NTYsIDEzMzc2MywgMTMzNzcwLCAxMzM3NzcsIDEzMzc4NCwgCi0gICAgMTMzNzkxLCAxMzM3OTgsIDEzMzgwNSwgMTMzODEyLCAxMzM4MTksIDEzMzgyNiwgMTMzODMzLCAxMzM4NDAsIDEzMzg0NywgCi0gICAgMTMzODUzLCAxMzM4NTksIDEzMzg2NiwgMTMzODczLCAxMzM4ODIsIDEzMzg5MSwgMTMzOTAwLCAxMzM5MDksIDEzMzkxNCwgCi0gICAgMTMzOTE5LCAxMzM5MjUsIDEzMzkzMSwgMTMzOTM3LCAxMzM5NDMsIDEzMzk0OSwgMTMzOTU1LCAxMzM5NjEsIDEzMzk2NywgCi0gICAgMTMzOTczLCAxMzM5NzksIDEzMzk4NSwgMTMzOTkxLCAxMzM5OTYsIDEzNDAwMiwgMTM0MDEyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMjk0NTQsIDEyOTQ1NywgMTI5NDYxLCAxMjk0NjUsIDEyOTQ2OCwgMTI5NDcyLCAxMjk0NzYsIAorICAgIDEyOTQ3OSwgMTI5NDgyLCAxMjk0ODYsIDEyOTQ5MCwgMTI5NDkzLCAxMjk0OTYsIDEyOTQ5OSwgMTI5NTAyLCAxMjk1MDcsIAorICAgIDEyOTUxMCwgMTI5NTE0LCAxMjk1MTcsIDEyOTUyMCwgMTI5NTIzLCAxMjk1MjYsIDEyOTUyOSwgMTI5NTMyLCAxMjk1MzUsIAorICAgIDEyOTUzOCwgMTI5NTQxLCAxMjk1NDQsIDEyOTU0NywgMTI5NTUxLCAxMjk1NTUsIDEyOTU1OSwgMTI5NTYzLCAxMjk1NjgsIAorICAgIDEyOTU3MywgMTI5NTc5LCAxMjk1ODUsIDEyOTU5MSwgMTI5NTk2LCAxMjk2MDIsIDEyOTYwOCwgMTI5NjE0LCAxMjk2MTksIAorICAgIDEyOTYyNSwgMTI5NjMxLCAxMjk2MzYsIDEyOTY0MSwgMTI5NjQ3LCAxMjk2NTIsIDEyOTY1OCwgMTI5NjY0LCAxMjk2NjksIAorICAgIDEyOTY3NSwgMTI5NjgxLCAxMjk2ODYsIDEyOTY5MiwgMTI5Njk4LCAxMjk3MDQsIDEyOTcxMCwgMTI5NzE2LCAxMjk3MjAsIAorICAgIDEyOTcyNSwgMTI5NzI5LCAxMjk3MzQsIDEyOTczOCwgMTI5NzQzLCAxMjk3NDgsIDEyOTc1NCwgMTI5NzYwLCAxMjk3NjYsIAorICAgIDEyOTc3MSwgMTI5Nzc3LCAxMjk3ODMsIDEyOTc4OSwgMTI5Nzk0LCAxMjk4MDAsIDEyOTgwNiwgMTI5ODExLCAxMjk4MTYsIAorICAgIDEyOTgyMiwgMTI5ODI3LCAxMjk4MzMsIDEyOTgzOSwgMTI5ODQ0LCAxMjk4NTAsIDEyOTg1NiwgMTI5ODYxLCAxMjk4NjcsIAorICAgIDEyOTg3MywgMTI5ODc5LCAxMjk4ODUsIDEyOTg5MSwgMTI5ODk2LCAxMjk5MDAsIDEyOTkwNSwgMTI5OTA3LCAxMjk5MTEsIAorICAgIDEyOTkxNCwgMTI5OTE3LCAxMjk5MjAsIDEyOTkyMywgMTI5OTI2LCAxMjk5MjksIDEyOTkzMiwgMTI5OTM1LCAxMjk5MzgsIAorICAgIDEyOTk0MSwgMTI5OTQ0LCAxMjk5NDcsIDEyOTk1MCwgMTI5OTUzLCAxMjk5NTYsIDEyOTk1OSwgMTI5OTYyLCAxMjk5NjUsIAorICAgIDEyOTk2OCwgMTI5OTcxLCAxMjk5NzQsIDEyOTk3NywgMTI5OTgwLCAxMjk5ODMsIDEyOTk4NiwgMTI5OTg5LCAxMjk5OTIsIAorICAgIDEyOTk5NSwgMTI5OTk4LCAxMzAwMDEsIDEzMDAwNCwgMTMwMDA3LCAxMzAwMTAsIDEzMDAxMywgMTMwMDE2LCAxMzAwMTksIAorICAgIDEzMDAyMiwgMTMwMDI1LCAxMzAwMjgsIDEzMDAzMSwgMTMwMDM0LCAxMzAwMzcsIDEzMDA0MCwgMTMwMDQzLCAxMzAwNDYsIAorICAgIDEzMDA0OSwgMTMwMDUyLCAxMzAwNTUsIDEzMDA1OCwgMTMwMDYxLCAxMzAwNjQsIDEzMDA2NywgMTMwMDcwLCAxMzAwNzMsIAorICAgIDEzMDA3NiwgMTMwMDc5LCAxMzAwODIsIDEzMDA4NSwgMTMwMDg4LCAxMzAwOTEsIDEzMDA5NCwgMTMwMDk3LCAxMzAxMDAsIAorICAgIDEzMDEwMywgMTMwMTA2LCAxMzAxMDksIDEzMDExMiwgMTMwMTE1LCAxMzAxMTgsIDEzMDEyMSwgMTMwMTI0LCAxMzAxMjcsIAorICAgIDEzMDEzMCwgMTMwMTMzLCAxMzAxMzYsIDEzMDEzOSwgMTMwMTQyLCAxMzAxNDUsIDEzMDE0OCwgMTMwMTUxLCAxMzAxNTQsIAorICAgIDEzMDE1NywgMTMwMTYwLCAxMzAxNjMsIDEzMDE2NiwgMTMwMTY5LCAxMzAxNzIsIDEzMDE3NSwgMTMwMTc4LCAxMzAxODEsIAorICAgIDEzMDE4NCwgMTMwMTg3LCAxMzAxOTAsIDEzMDE5MywgMTMwMTk2LCAxMzAxOTksIDEzMDIwMiwgMTMwMjA1LCAxMzAyMDgsIAorICAgIDEzMDIxMSwgMTMwMjE0LCAxMzAyMTcsIDEzMDIyMCwgMTMwMjIzLCAxMzAyMjYsIDEzMDIyOSwgMTMwMjMyLCAxMzAyMzUsIAorICAgIDEzMDIzOCwgMTMwMjQxLCAxMzAyNDQsIDEzMDI0NywgMTMwMjUwLCAxMzAyNTMsIDEzMDI1NiwgMTMwMjU5LCAxMzAyNjIsIAorICAgIDEzMDI2NSwgMTMwMjY4LCAxMzAyNzEsIDEzMDI3NCwgMTMwMjc3LCAxMzAyODAsIDEzMDI4MywgMTMwMjg2LCAxMzAyODksIAorICAgIDEzMDI5MiwgMTMwMjk1LCAxMzAyOTgsIDEzMDMwMSwgMTMwMzA0LCAxMzAzMDcsIDEzMDMxMCwgMTMwMzEzLCAxMzAzMTYsIAorICAgIDEzMDMxOSwgMTMwMzIyLCAxMzAzMjUsIDEzMDMyOCwgMTMwMzMxLCAxMzAzMzQsIDEzMDMzNywgMTMwMzQwLCAxMzAzNDMsIAorICAgIDEzMDM0NiwgMTMwMzQ5LCAxMzAzNTIsIDEzMDM1NSwgMTMwMzU4LCAxMzAzNjEsIDEzMDM2NCwgMTMwMzY3LCAxMzAzNzAsIAorICAgIDEzMDM3MywgMTMwMzc2LCAxMzAzNzksIDEzMDM4MiwgMTMwMzg1LCAxMzAzODgsIDEzMDM5MSwgMTMwMzk0LCAxMzAzOTcsIAorICAgIDEzMDQwMCwgMTMwNDAzLCAxMzA0MDYsIDEzMDQwOSwgMTMwNDEyLCAxMzA0MTUsIDEzMDQxOCwgMTMwNDIxLCAxMzA0MjQsIAorICAgIDEzMDQyNywgMTMwNDMwLCAxMzA0MzMsIDEzMDQzNiwgMTMwNDM5LCAxMzA0NDIsIDEzMDQ0NSwgMTMwNDQ4LCAxMzA0NTEsIAorICAgIDEzMDQ1NCwgMTMwNDU3LCAxMzA0NjAsIDEzMDQ2MywgMTMwNDY2LCAxMzA0NjksIDEzMDQ3MiwgMTMwNDc1LCAxMzA0NzgsIAorICAgIDEzMDQ4MSwgMTMwNDg0LCAxMzA0ODcsIDEzMDQ5MCwgMTMwNDkzLCAxMzA0OTYsIDEzMDQ5OSwgMTMwNTAyLCAxMzA1MDUsIAorICAgIDEzMDUwOCwgMTMwNTExLCAxMzA1MTQsIDEzMDUxNywgMTMwNTIwLCAxMzA1MjMsIDEzMDUyNiwgMTMwNTI5LCAxMzA1MzIsIAorICAgIDEzMDUzNSwgMTMwNTM4LCAxMzA1NDEsIDEzMDU0NCwgMTMwNTQ3LCAxMzA1NTAsIDEzMDU1MywgMTMwNTU2LCAxMzA1NTksIAorICAgIDEzMDU2MiwgMTMwNTY1LCAxMzA1NjgsIDEzMDU3MSwgMTMwNTc0LCAxMzA1NzcsIDEzMDU4MCwgMTMwNTgzLCAxMzA1ODYsIAorICAgIDEzMDU4OSwgMTMwNTkyLCAxMzA1OTUsIDEzMDU5OCwgMTMwNjAxLCAxMzA2MDQsIDEzMDYwNywgMTMwNjEwLCAxMzA2MTMsIAorICAgIDEzMDYxNiwgMTMwNjE5LCAxMzA2MjIsIDEzMDYyNSwgMTMwNjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMzA2MzEsIDEzMDYzMywgMTMwNjM1LCAxMzA2NDAsIDEzMDY0MiwgMTMwNjQ3LCAxMzA2NDksIAorICAgIDEzMDY1NCwgMTMwNjU2LCAxMzA2NjEsIDEzMDY2MywgMTMwNjY1LCAxMzA2NjcsIDEzMDY2OSwgMTMwNjcxLCAxMzA2NzMsIAorICAgIDEzMDY3NSwgMTMwNjc3LCAxMzA2NzksIDEzMDY4MiwgMTMwNjg1LCAxMzA2ODcsIDEzMDY4OSwgMTMwNjkzLCAxMzA2OTYsIAorICAgIDEzMDcwMSwgMTMwNzAzLCAxMzA3MDUsIDEzMDcwNywgMTMwNzExLCAxMzA3MTQsIDEzMDcxNiwgMTMwNzIwLCAxMzA3MjIsIAorICAgIDEzMDcyNiwgMTMwNzI4LCAxMzA3MzIsIDEzMDczNSwgMTMwNzM3LCAxMzA3NDEsIDEzMDc0NSwgMTMwNzQ3LCAxMzA3NTMsIAorICAgIDEzMDc1NSwgMTMwNzYwLCAxMzA3NjIsIDEzMDc2NywgMTMwNzY5LCAxMzA3NzQsIDEzMDc3NiwgMTMwNzgxLCAxMzA3ODMsIAorICAgIDEzMDc4NiwgMTMwNzg4LCAxMzA3OTIsIDEzMDc5NCwgMTMwODAxLCAxMzA4MDMsIDEzMDgwNSwgMTMwODA3LCAxMzA4MTIsIAorICAgIDEzMDgxNCwgMTMwODE2LCAxMzA4MTgsIDEzMDgyMCwgMTMwODIyLCAxMzA4MjcsIDEzMDgzMSwgMTMwODMzLCAxMzA4MzgsIAorICAgIDEzMDg0MiwgMTMwODQ0LCAxMzA4NDksIDEzMDg1MywgMTMwODU1LCAxMzA4NjAsIDEzMDg2NCwgMTMwODY2LCAxMzA4NjgsIAorICAgIDEzMDg3MCwgMTMwODcyLCAxMzA4NzYsIDEzMDg3OCwgMTMwODgzLCAxMzA4ODUsIDEzMDg5MSwgMTMwODkzLCAxMzA4OTksIAorICAgIDEzMDkwMSwgMTMwOTAzLCAxMzA5MDUsIDEzMDkwOSwgMTMwOTExLCAxMzA5MTgsIDEzMDkyMCwgMTMwOTI3LCAxMzA5MjksIAorICAgIDEzMDkzNCwgMTMwOTM5LCAxMzA5NDEsIDEzMDk0NywgMTMwOTUzLCAxMzA5NTUsIDEzMDk2MSwgMTMwOTY2LCAxMzA5NjgsIAorICAgIDEzMDk3NCwgMTMwOTgwLCAxMzA5ODIsIDEzMDk4OCwgMTMwOTk0LCAxMzA5OTYsIDEzMTAwMiwgMTMxMDA2LCAxMzEwMDgsIAorICAgIDEzMTAxMywgMTMxMDE1LCAxMzEwMTcsIDEzMTAyMiwgMTMxMDI0LCAxMzEwMjYsIDEzMTAzMiwgMTMxMDM0LCAxMzEwMzksIAorICAgIDEzMTA0MywgMTMxMDQ1LCAxMzEwNTAsIDEzMTA1NCwgMTMxMDU2LCAxMzEwNjIsIDEzMTA2NCwgMTMxMDY4LCAxMzEwNzAsIAorICAgIDEzMTA3NCwgMTMxMDc2LCAxMzEwODMsIDEzMTA5MCwgMTMxMDkyLCAxMzEwOTksIDEzMTEwNiwgMTMxMTA4LCAxMzExMTMsIAorICAgIDEzMTExNSwgMTMxMTIyLCAxMzExMjQsIDEzMTEyOSwgMTMxMTMxLCAxMzExMzcsIDEzMTEzOSwgMTMxMTQzLCAxMzExNDUsIAorICAgIDEzMTE1MSwgMTMxMTUzLCAxMzExNTcsIDEzMTE1OSwgMTMxMTY1LCAxMzExNjcsIDEzMTE2OSwgMTMxMTcxLCAxMzExNzYsIAorICAgIDEzMTE4MSwgMTMxMTgzLCAxMzExODUsIDEzMTE5NCwgMTMxMTk4LCAxMzEyMDUsIDEzMTIxMiwgMTMxMjE3LCAxMzEyMjIsIAorICAgIDEzMTIzNCwgMTMxMjM2LCAxMzEyMzgsIDEzMTI0MCwgMTMxMjQyLCAxMzEyNDQsIDEzMTI0NiwgMTMxMjQ4LCAxMzEyNTAsIAorICAgIDEzMTI1MiwgMTMxMjU0LCAxMzEyNTYsIDEzMTI1OCwgMTMxMjYwLCAxMzEyNjIsIDEzMTI2NCwgMTMxMjY2LCAxMzEyNjgsIAorICAgIDEzMTI3MCwgMTMxMjcyLCAxMzEyNzQsIDEzMTI3NiwgMTMxMjgyLCAxMzEyODksIDEzMTI5NCwgMTMxMjk5LCAxMzEzMTAsIAorICAgIDEzMTMxMiwgMTMxMzE0LCAxMzEzMTYsIDEzMTMxOCwgMTMxMzIwLCAxMzEzMjIsIDEzMTMyNCwgMTMxMzI2LCAxMzEzMjgsIAorICAgIDEzMTMzMCwgMTMxMzMyLCAxMzEzMzQsIDEzMTMzNiwgMTMxMzM4LCAxMzEzNDAsIDEzMTM0MiwgMTMxMzQ3LCAxMzEzNDksIAorICAgIDEzMTM1MSwgMTMxMzU3LCAxMzEzNjksIDEzMTM4MCwgMTMxMzgyLCAxMzEzODQsIDEzMTM4NiwgMTMxMzg4LCAxMzEzOTAsIAorICAgIDEzMTM5MiwgMTMxMzk0LCAxMzEzOTYsIDEzMTM5OCwgMTMxNDAwLCAxMzE0MDIsIDEzMTQwNCwgMTMxNDA2LCAxMzE0MDgsIAorICAgIDEzMTQxMCwgMTMxNDEyLCAxMzE0MTQsIDEzMTQxNiwgMTMxNDE4LCAxMzE0MjAsIDEzMTQyMiwgMTMxNDI0LCAxMzE0MjYsIAorICAgIDEzMTQyOCwgMTMxNDMwLCAxMzE0MzIsIDEzMTQzNCwgMTMxNDM2LCAxMzE0MzgsIDEzMTQ0MCwgMTMxNDQyLCAxMzE0NDQsIAorICAgIDEzMTQ0NiwgMTMxNDQ4LCAxMzE0NTAsIDEzMTQ1MiwgMTMxNDU0LCAxMzE0NTYsIDEzMTQ1OCwgMTMxNDYwLCAxMzE0NjIsIAorICAgIDEzMTQ2NCwgMTMxNDY2LCAxMzE0NjgsIDEzMTQ3MCwgMTMxNDcyLCAxMzE0NzQsIDEzMTQ3NiwgMTMxNDc4LCAxMzE0ODAsIAorICAgIDEzMTQ4MiwgMTMxNDg0LCAxMzE0ODYsIDEzMTQ4OCwgMTMxNDkwLCAxMzE0OTIsIDEzMTQ5NCwgMTMxNDk2LCAxMzE0OTgsIAorICAgIDEzMTUwMCwgMTMxNTAyLCAxMzE1MDQsIDEzMTUwNiwgMTMxNTA4LCAxMzE1MTAsIDEzMTUxMiwgMTMxNTE0LCAxMzE1MTYsIAorICAgIDEzMTUxOCwgMTMxNTIwLCAxMzE1MjIsIDEzMTUyNCwgMTMxNTI2LCAxMzE1MjgsIDEzMTUzMCwgMTMxNTMyLCAxMzE1MzQsIAorICAgIDEzMTUzNiwgMTMxNTM4LCAxMzE1NDAsIDEzMTU0MiwgMTMxNTQ0LCAxMzE1NDYsIDEzMTU0OCwgMTMxNTUwLCAxMzE1NTIsIAorICAgIDEzMTU1NCwgMTMxNTU2LCAxMzE1NTgsIDEzMTU2MCwgMTMxNTYyLCAxMzE1NjQsIDEzMTU2NiwgMTMxNTY4LCAxMzE1NzAsIAorICAgIDEzMTU3MiwgMTMxNTc0LCAxMzE1NzYsIDEzMTU3OCwgMTMxNTgwLCAxMzE1ODIsIDEzMTU4NCwgMTMxNTg2LCAxMzE1ODgsIAorICAgIDEzMTU5MCwgMTMxNTkyLCAxMzE1OTQsIDEzMTU5NiwgMTMxNTk4LCAxMzE2MDAsIDEzMTYwMiwgMTMxNjA0LCAxMzE2MDYsIAorICAgIDEzMTYwOCwgMTMxNjEwLCAxMzE2MTIsIDEzMTYxNCwgMTMxNjE2LCAxMzE2MTgsIDEzMTYyMCwgMTMxNjIyLCAxMzE2MjQsIAorICAgIDEzMTYyNiwgMTMxNjI4LCAxMzE2MzAsIDEzMTYzMiwgMTMxNjM0LCAxMzE2MzYsIDEzMTYzOCwgMTMxNjQwLCAxMzE2NDIsIAorICAgIDEzMTY0NCwgMTMxNjQ2LCAxMzE2NDgsIDEzMTY1MCwgMTMxNjUyLCAxMzE2NTQsIDEzMTY1NiwgMTMxNjU4LCAxMzE2NjAsIAorICAgIDEzMTY2MiwgMTMxNjY0LCAxMzE2NjYsIDEzMTY2OCwgMTMxNjcwLCAxMzE2NzIsIDEzMTY3NCwgMTMxNjc2LCAxMzE2NzgsIAorICAgIDEzMTY4MCwgMTMxNjgyLCAxMzE2ODQsIDEzMTY4NiwgMTMxNjg4LCAxMzE2OTAsIDEzMTY5MiwgMTMxNjk0LCAxMzE2OTYsIAorICAgIDEzMTY5OCwgMTMxNzAwLCAxMzE3MDIsIDEzMTcwNCwgMTMxNzA2LCAxMzE3MDgsIDEzMTcxMCwgMTMxNzEyLCAxMzE3MTQsIAorICAgIDEzMTcxNiwgMTMxNzE4LCAxMzE3MjAsIDEzMTcyMiwgMTMxNzI0LCAxMzE3MjYsIDEzMTcyOCwgMTMxNzMwLCAxMzE3MzIsIAorICAgIDEzMTczNCwgMTMxNzM2LCAxMzE3MzgsIDEzMTc0MCwgMTMxNzQyLCAxMzE3NDQsIDEzMTc0NiwgMTMxNzQ4LCAxMzE3NTAsIAorICAgIDEzMTc1MiwgMTMxNzU0LCAxMzE3NTYsIDEzMTc1OCwgMTMxNzYwLCAxMzE3NjIsIDEzMTc2NCwgMTMxNzY2LCAxMzE3NjgsIAorICAgIDEzMTc3MCwgMTMxNzcyLCAxMzE3NzQsIDEzMTc3NiwgMTMxNzc4LCAxMzE3ODAsIDEzMTc4MiwgMTMxNzg0LCAxMzE3ODYsIAorICAgIDEzMTc4OCwgMTMxNzkwLCAxMzE3OTIsIDEzMTc5NCwgMTMxNzk2LCAxMzE3OTgsIDEzMTgwMCwgMTMxODAyLCAxMzE4MDQsIAorICAgIDEzMTgwNiwgMTMxODA4LCAxMzE4MTAsIDEzMTgxMiwgMTMxODE0LCAxMzE4MTYsIDEzMTgxOCwgMTMxODIwLCAxMzE4MjIsIAorICAgIDEzMTgyNCwgMTMxODI2LCAxMzE4MjgsIDEzMTgzMCwgMTMxODMyLCAxMzE4MzQsIDEzMTgzNiwgMTMxODM4LCAxMzE4NDAsIAorICAgIDEzMTg0MiwgMTMxODQ0LCAxMzE4NDYsIDEzMTg0OCwgMTMxODUwLCAxMzE4NTIsIDEzMTg1NCwgMTMxODU2LCAxMzE4NTgsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTg2MCwgMTMxODcwLCAxMzE4ODAsIDEzMTg4OSwgMTMxODk4LCAxMzE5MTEsIAorICAgIDEzMTkyNCwgMTMxOTM2LCAxMzE5NDgsIDEzMTk1OCwgMTMxOTY4LCAxMzE5NzgsIDEzMTk4OCwgMTMxOTk5LCAxMzIwMTAsIAorICAgIDEzMjAyMCwgMTMyMDI5LCAxMzIwMzgsIDEzMjA0NywgMTMyMDYwLCAxMzIwNzMsIDEzMjA4NSwgMTMyMDk3LCAxMzIxMDcsIAorICAgIDEzMjExNywgMTMyMTI3LCAxMzIxMzcsIDEzMjE0NiwgMTMyMTU1LCAxMzIxNjQsIDEzMjE3MywgMTMyMTgyLCAxMzIxOTEsIAorICAgIDEzMjIwMCwgMTMyMjA5LCAxMzIyMTgsIDEzMjIyNywgMTMyMjM2LCAxMzIyNDUsIDEzMjI1NiwgMTMyMjY2LCAxMzIyNzYsIAorICAgIDEzMjI4OSwgMTMyMjk5LCAxMzIzMTIsIDEzMjMxOSwgMTMyMzI5LCAxMzIzMzYsIDEzMjM0MywgMTMyMzUwLCAxMzIzNTcsIAorICAgIDEzMjM2NCwgMTMyMzcxLCAxMzIzODAsIDEzMjM4OSwgMTMyMzk4LCAxMzI0MDcsIDEzMjQxNiwgMTMyNDI1LCAxMzI0MzQsIAorICAgIDEzMjQ0MywgMTMyNDUxLCAxMzI0NTksIDEzMjQ2NiwgMTMyNDc2LCAxMzI0ODUsIDEzMjQ5MywgMTMyNTAwLCAxMzI1MTAsIAorICAgIDEzMjUxOSwgMTMyNTI5LCAxMzI1MzksIDEzMjU1MCwgMTMyNTYwLCAxMzI1NjksIDEzMjU3OSwgMTMyNTg4LCAxMzI1OTgsIAorICAgIDEzMjYwNiwgMTMyNjEwLCAxMzI2MTQsIDEzMjYxOCwgMTMyNjIyLCAxMzI2MjYsIDEzMjYzMCwgMTMyNjM0LCAxMzI2MzgsIAorICAgIDEzMjY0MiwgMTMyNjQ2LCAxMzI2NDksIDEzMjY1MywgMTMyNjU2LCAxMzI2NTksIDEzMjY2MywgMTMyNjY3LCAxMzI2NzEsIAorICAgIDEzMjY3NSwgMTMyNjc5LCAxMzI2ODMsIDEzMjY4NywgMTMyNjkxLCAxMzI2OTUsIDEzMjY5OSwgMTMyNzAzLCAxMzI3MDcsIAorICAgIDEzMjcxMSwgMTMyNzE1LCAxMzI3MTksIDEzMjcyMywgMTMyNzI3LCAxMzI3MzEsIDEzMjczNSwgMTMyNzM5LCAxMzI3NDMsIAorICAgIDEzMjc0NywgMTMyNzUxLCAxMzI3NTUsIDEzMjc1OSwgMTMyNzYzLCAxMzI3NjcsIDEzMjc3MSwgMTMyNzc1LCAxMzI3NzksIAorICAgIDEzMjc4MywgMTMyNzg3LCAxMzI3OTEsIDEzMjc5NSwgMTMyNzk5LCAxMzI4MDMsIDEzMjgwNywgMTMyODExLCAxMzI4MTUsIAorICAgIDEzMjgxOSwgMTMyODIzLCAxMzI4MjcsIDEzMjgzMSwgMTMyODM1LCAxMzI4MzksIDEzMjg0MywgMTMyODQ3LCAxMzI4NTEsIAorICAgIDEzMjg1NSwgMTMyODU5LCAxMzI4NjMsIDEzMjg2NywgMTMyODcxLCAxMzI4NzUsIDEzMjg3OSwgMTMyODgzLCAxMzI4ODcsIAorICAgIDEzMjg5MSwgMTMyODk1LCAxMzI4OTksIDEzMjkwMywgMTMyOTA3LCAxMzI5MTEsIDEzMjkxNSwgMTMyOTE5LCAxMzI5MjMsIAorICAgIDEzMjkyNywgMTMyOTMxLCAxMzI5MzUsIDEzMjkzOSwgMTMyOTQzLCAxMzI5NDcsIDEzMjk1MSwgMTMyOTU1LCAxMzI5NTksIAorICAgIDEzMjk2MywgMTMyOTY3LCAxMzI5NzEsIDEzMjk3NSwgMTMyOTc5LCAxMzI5ODMsIDEzMjk4NywgMTMyOTkxLCAxMzI5OTUsIAorICAgIDEzMjk5OSwgMTMzMDAyLCAxMzMwMDYsIDEzMzAxMCwgMTMzMDE0LCAxMzMwMTgsIDEzMzAyMiwgMTMzMDI2LCAxMzMwMzAsIAorICAgIDEzMzAzNCwgMTMzMDM4LCAxMzMwNDIsIDEzMzA0NiwgMTMzMDUwLCAxMzMwNTQsIDEzMzA1OCwgMTMzMDYyLCAxMzMwNjYsIAorICAgIDEzMzA3MCwgMTMzMDc0LCAxMzMwNzgsIDEzMzA4MiwgMTMzMDg2LCAxMzMwOTAsIDEzMzA5NCwgMTMzMDk4LCAxMzMxMDIsIAorICAgIDEzMzEwNiwgMTMzMTEwLCAxMzMxMTQsIDEzMzExOCwgMTMzMTIyLCAxMzMxMjYsIDEzMzEzMCwgMTMzMTM0LCAxMzMxMzgsIAorICAgIDEzMzE0MiwgMTMzMTQ2LCAxMzMxNTAsIDEzMzE1NCwgMTMzMTU4LCAxMzMxNjIsIDEzMzE2NiwgMTMzMTcwLCAxMzMxNzQsIAorICAgIDEzMzE3OCwgMTMzMTgyLCAxMzMxODYsIDEzMzE5MCwgMTMzMTk0LCAxMzMxOTgsIDEzMzIwMiwgMTMzMjA2LCAxMzMyMTAsIAorICAgIDEzMzIxNCwgMTMzMjE4LCAxMzMyMjIsIDEzMzIyNiwgMTMzMjMwLCAxMzMyMzQsIDEzMzIzOCwgMTMzMjQyLCAxMzMyNDYsIAorICAgIDEzMzI1MCwgMTMzMjU0LCAxMzMyNTgsIDEzMzI2MiwgMTMzMjY2LCAxMzMyNzAsIDEzMzI3NCwgMTMzMjc4LCAxMzMyODIsIAorICAgIDEzMzI4NiwgMTMzMjkwLCAxMzMyOTQsIDEzMzI5OCwgMTMzMzAyLCAxMzMzMDYsIDEzMzMxMCwgMTMzMzE0LCAxMzMzMTgsIAorICAgIDEzMzMyMiwgMTMzMzI2LCAxMzMzMzAsIDEzMzMzNCwgMTMzMzM4LCAxMzMzNDIsIDEzMzM0NiwgMTMzMzUwLCAxMzMzNTQsIAorICAgIDEzMzM1OCwgMTMzMzYyLCAxMzMzNjYsIDEzMzM3MCwgMTMzMzc0LCAxMzMzNzgsIDEzMzM4MiwgMTMzMzg2LCAxMzMzOTAsIAorICAgIDEzMzM5NCwgMTMzMzk4LCAxMzM0MDIsIDEzMzQwNiwgMTMzNDEwLCAxMzM0MTQsIDEzMzQxOCwgMTMzNDIyLCAxMzM0MjYsIAorICAgIDEzMzQzMCwgMTMzNDM0LCAxMzM0MzgsIDEzMzQ0MiwgMTMzNDQ2LCAxMzM0NTAsIDEzMzQ1NCwgMTMzNDU4LCAxMzM0NjIsIAorICAgIDEzMzQ2NiwgMTMzNDcwLCAxMzM0NzQsIDEzMzQ3OCwgMTMzNDgyLCAxMzM0ODYsIDEzMzQ5MCwgMTMzNDk0LCAxMzM0OTgsIAorICAgIDEzMzUwMiwgMTMzNTA2LCAxMzM1MTAsIDEzMzUxNCwgMTMzNTE4LCAxMzM1MjIsIDEzMzUyNiwgMTMzNTMwLCAxMzM1MzQsIAorICAgIDEzMzUzOCwgMTMzNTQyLCAxMzM1NDYsIDEzMzU1MCwgMTMzNTU0LCAxMzM1NTgsIDEzMzU2MiwgMTMzNTY2LCAxMzM1NzAsIAorICAgIDEzMzU3NCwgMTMzNTc4LCAxMzM1ODIsIDEzMzU4NiwgMTMzNTkwLCAxMzM1OTQsIDEzMzU5OCwgMTMzNjAyLCAxMzM2MDYsIAorICAgIDEzMzYxMCwgMTMzNjE0LCAxMzM2MTgsIDEzMzYyMiwgMTMzNjI2LCAxMzM2MzAsIDEzMzYzNCwgMTMzNjM4LCAxMzM2NDIsIAorICAgIDEzMzY0NiwgMTMzNjUwLCAxMzM2NTQsIDEzMzY1OCwgMTMzNjYyLCAxMzM2NjYsIDEzMzY3MCwgMTMzNjc0LCAxMzM2NzgsIAorICAgIDEzMzY4MiwgMTMzNjg2LCAxMzM2OTAsIDEzMzY5NCwgMTMzNjk4LCAxMzM3MDIsIDEzMzcwNiwgMTMzNzEwLCAxMzM3MTQsIAorICAgIDEzMzcxOCwgMTMzNzIyLCAxMzM3MjYsIDEzMzczMCwgMTMzNzM0LCAxMzM3MzgsIDEzMzc0MiwgMTMzNzQ2LCAxMzM3NTAsIAorICAgIDEzMzc1NCwgMTMzNzU4LCAxMzM3NjIsIDEzMzc2NiwgMTMzNzcxLCAxMzM3NzYsIDEzMzc4MSwgMTMzNzg1LCAxMzM3OTEsIAorICAgIDEzMzc5OCwgMTMzODA1LCAxMzM4MTIsIDEzMzgxOSwgMTMzODI2LCAxMzM4MzMsIDEzMzg0MCwgMTMzODQ3LCAxMzM4NTQsIAorICAgIDEzMzg2MSwgMTMzODY4LCAxMzM4NzUsIDEzMzg4MiwgMTMzODg4LCAxMzM4OTUsIDEzMzkwMiwgMTMzOTA4LCAxMzM5MTUsIAorICAgIDEzMzkyMiwgMTMzOTI5LCAxMzM5MzYsIDEzMzk0MywgMTMzOTUwLCAxMzM5NTcsIDEzMzk2NCwgMTMzOTcxLCAxMzM5NzgsIAorICAgIDEzMzk4NSwgMTMzOTkyLCAxMzM5OTksIDEzNDAwNSwgMTM0MDExLCAxMzQwMTgsIDEzNDAyNSwgMTM0MDM0LCAxMzQwNDMsIAorICAgIDEzNDA1MiwgMTM0MDYxLCAxMzQwNjYsIDEzNDA3MSwgMTM0MDc3LCAxMzQwODMsIDEzNDA4OSwgMTM0MDk1LCAxMzQxMDEsIAorICAgIDEzNDEwNywgMTM0MTEzLCAxMzQxMTksIDEzNDEyNSwgMTM0MTMxLCAxMzQxMzcsIDEzNDE0MywgMTM0MTQ4LCAxMzQxNTQsIAorICAgIDEzNDE2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiAvKiBuYW1lLT5jb2RlIGRpY3Rpb25hcnkgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29kZV9oYXNoW10gPSB7CiAgICAgNzQyMjQsIDQ4NTEsIDAsIDc4MTU2LCA3ODQ5OSwgMTI4Njg1LCA3OTI5LCAwLCAxOTQ2ODIsIDEyNzc2NiwgNzg1MDAsIAotICAgIDY2NDgwLCAwLCA0MjgzMywgNzQ1MjksIDEyMDY0LCAwLCA1OTYsIDk4MzgxMiwgNjk4NTAsIDEzMTkyLCA4NjUxLCAwLCAwLCAKKyAgICA2NjQ4MCwgMCwgNDI4MzMsIDc0NTI5LCAxMjA2NCwgMCwgNTk2LCA5ODM4MjEsIDY5ODUwLCAxMzE5MiwgODY1MSwgMCwgMCwgCiAgICAgMTIwMjE4LCAxMjk5NSwgNjQ4NjUsIDEzNzMsIDAsIDAsIDU4MTYsIDExOTA2NywgNjQ4MTAsIDQyMzEsIDY4MjUsIDQyODk3LCAKICAgICA0MjMzLCA0MjM0LCA0MjMyLCA5MTc4MzYsIDc0NDE1LCAxMjAyMTAsIDYzODQsIDkxNzg0MCwgNzgxMDgsIDg4NTEsIDAsIAotICAgIDEyODU1MywgMCwgNDE2MDEsIDg4NzQsIDk4Mzc3NCwgNzc0OCwgMCwgMCwgMCwgMTI3OTM5LCA0MTYwMywgOTc4NCwgMCwgCisgICAgMTI4NTUzLCAwLCA0MTYwMSwgODg3NCwgOTgzNzgzLCA3NzQ4LCAwLCAwLCAwLCAxMjc5MzksIDQxNjAzLCA5Nzg0LCAwLCAKICAgICA5MTg4LCA0MTYwMCwgMCwgMTIwNjE4LCAxMjgzNDMsIDE0NTcsIDM1MzUsIDAsIDAsIDAsIDAsIDY1MjQwLCAxMTk1MSwgMCwgCiAgICAgMzQwNCwgMCwgMCwgMCwgMTc1OSwgMCwgNDEwNzYsIDY4MzgzLCAxMjA1NzIsIDExOTIwNSwgNjY1NzcsIDk0MDE0LCAKLSAgICAxMjc3NjQsIDY1ODU5LCAwLCA3NDA0LCAwLCAwLCAwLCAwLCA2NTkwOCwgOTgzNCwgMzA1NSwgOTg1MiwgOTgzODUxLCAKKyAgICAxMjc3NjQsIDY1ODU5LCAwLCA3NDA0LCAwLCAwLCAwLCAwLCA2NTkwOCwgOTgzNCwgMzA1NSwgOTg1MiwgOTgzODYwLCAKICAgICA2NTI4OCwgMCwgMTEzOTgsIDAsIDkyNDE3LCAxMTkyNTUsIDAsIDAsIDYwMywgNzQzOTgsIDQzNTQ4LCAwLCAwLCA5MTc4MjQsIAogICAgIDMzNTAsIDEyMDgxNywgNjQzMTgsIDkxNzgyOCwgMTI3MDg5LCAzMzkwLCA3NDQ4MywgNDMyNjUsIDEyMDU5OSwgOTE3ODMwLCAKICAgICA3ODU3MywgMCwgMTkxOSwgMzQwMCwgMTIwNjUxLCAxMjc5NDQsIDExNjQ3LCA5MTc1NDAsIDY2NDQ2LCA2NDE0MSwgODU2MiwgCi0gICAgMjEyMSwgNjQxMzgsIDQwNDMsIDg3MTIsIDY0MTM0LCA2NDEzMywgMTEyOTcsIDk4MzY3OSwgOTgzMTUyLCAxMTk2NiwgCi0gICAgNjQxMjgsIDEyODU4NywgMCwgMCwgNjQxMzIsIDEwODY3LCA2NDEzMCwgNjQxMjksIDk4MzgzNSwgNDMzNzQsIDk3NzksIAorICAgIDIxMjEsIDY0MTM4LCA0MDQzLCA4NzEyLCA2NDEzNCwgNjQxMzMsIDExMjk3LCA5ODM2ODgsIDk4MzE1MiwgMTE5NjYsIAorICAgIDY0MTI4LCAxMjg1ODcsIDAsIDAsIDY0MTMyLCAxMDg2NywgNjQxMzAsIDY0MTI5LCA5ODM4NDQsIDQzMzc0LCA5Nzc5LCAKICAgICAyNzY0LCA2NjAwMiwgMTAxNjcsIDk0NzEsIDAsIDY2MDIxLCAwLCAwLCA1NDU3LCA1NDQwLCA4ODU3LCA5Mzk4MSwgNjUyODIsIAotICAgIDI4NDMsIDUzNTUsIDEyNzkyOCwgOTgzOTU2LCAwLCA1MTk0LCAxMTY1NywgNDM5ODQsIDEyODI5MiwgMCwgOTgzNjIwLCAwLCAKKyAgICAyODQzLCA1MzU1LCAxMjc5MjgsIDk4Mzk2NSwgMCwgNTE5NCwgMTE2NTcsIDQzOTg0LCAxMjgyOTIsIDAsIDk4MzYyMCwgMCwgCiAgICAgMCwgMTI3MDI3LCAxMDcxNywgNjQ1NzAsIDU2MzAsIDUzOTYsIDY0MTQzLCAxMDY4MiwgMCwgMTA2MDIsIDgwMCwgNDI0OTksIAogICAgIDY2MTg2LCAwLCAwLCA2NDkzMCwgMTE2MzEsIDY0MTQ2LCA2NDE0NSwgNjQxNDQsIDc2MiwgMTMxNzIsIDExODg1OSwgCiAgICAgMTk0NjYxLCA2NDQ2OCwgMTA5MDYsIDEzNTMsIDY5NjAsIDAsIDAsIDU4MjgsIDg3MjQsIDkxNzgwNiwgODkzMywgMTYwMSwgCiAgICAgNDIyNDQsIDg1OCwgNzA4MCwgNjQxMDksIDY0MTA4LCA4MDkwLCAwLCA3NDQwMSwgOTE3ODExLCA1ODcsIDAsIDEyODEzMSwgCi0gICAgMCwgMCwgMCwgNzgyMTQsIDI3NTAsIDc0MjE4LCA1NTYsIDY0MTU4LCA2NDE1NywgOTgzOTQwLCAxMjIxMywgMTk0Njc4LCAKKyAgICAwLCAwLCAwLCA3ODIxNCwgMjc1MCwgNzQyMTgsIDU1NiwgNjQxNTgsIDY0MTU3LCA5ODM5NDksIDEyMjEzLCAxOTQ2NzgsIAogICAgIDI3NjAsIDAsIDAsIDAsIDE5NDc5NCwgNjQxNTYsIDY0MTU1LCA0MjQ5NiwgMCwgNjQxNTEsIDY0MTUwLCAxMjY3OSwgCiAgICAgMTAwNTMsIDEwNDIxLCAxMTA5MywgNjQxNTMsIDY0MTUyLCAwLCAwLCA0ODM5LCAwLCAwLCAxODc0LCAxMTkwMTYsIDAsIAogICAgIDY1NzcsIDY0MTI1LCA2NDEyNCwgNjQxMjMsIDAsIDEyNzUzMSwgOTI1MzQsIDcwMDcsIDc1OTAsIDY1NDQzLCA5MDM2LCAKQEAgLTE3MTE0LDEyICsxNzEzMywxMiBAQAogICAgIDY0MTAyLCA3ODU5LCAxOTQ1LCA2NDA5OSwgMCwgMTA0NTMsIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCA3Mzg5LCA5ODMxNjEsIAogICAgIDg3MDUsIDY0MDk3LCA2NDA5NiwgOTU3MSwgNTI4LCAxMjg2NzEsIDQ0MDE3LCAxMTQyOSwgNzEzNDcsIDAsIDk4MzA3NywgCiAgICAgOTE3OTkwLCA3Mzg0MSwgMCwgMCwgOTA1NiwgNjQzMTMsIDYxODgsIDEyMDAxOSwgNjE1NSwgNjQwNjgsIDE4MjMsIDY0MDY2LCAKLSAgICA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgOTIyMTIsIDAsIDQxOTA0LCA2NjM5LCA2NDA2NCwgOTgzNzY2LCAKLSAgICAxMjgzNDQsIDAsIDExNzYsIDExODk1OSwgMTI3OTMwLCA4MTYyLCAxMjg2NjcsIDk4MzgyMiwgMCwgMTIwNTE5LCA2NjM3NiwgCisgICAgNjQwNjUsIDY0MDcyLCA2NDA3MSwgNjMsIDcyMzMsIDkyMjEyLCAwLCA0MTkwNCwgNjYzOSwgNjQwNjQsIDk4Mzc3NSwgCisgICAgMTI4MzQ0LCAwLCAxMTc2LCAxMTg5NTksIDEyNzkzMCwgODE2MiwgMTI4NjY3LCA5ODM4MzEsIDAsIDEyMDUxOSwgNjYzNzYsIAogICAgIDY2MjQyLCAxMTQxNSwgNDMzMywgOTg1NSwgNjQxMTIsIDY0NjQyLCAwLCA1Mzg4LCAwLCAwLCAwLCA3NzE0LCA2NjIyMiwgCi0gICAgNjk5MDIsIDc3NjgsIDAsIDQxOTksIDY0NzA4LCA5ODM0MTMsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgCisgICAgNjk5MDIsIDc3NjgsIDAsIDQxOTksIDY0NzA4LCA5ODM0MjEsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgCiAgICAgODk5NiwgNDk5MiwgNDQ3MSwgNDI2MjIsIDY0MDc5LCA2NDA3OCwgOTIxNzksIDAsIDEyNjU3MCwgMCwgNjQ2MTUsIDQxOTE1LCAKLSAgICAwLCAxMjA3NSwgNzAwNjIsIDAsIDUxNzQsIDk4MzIxNSwgMCwgMTI3NTU3LCAzMTIzLCAwLCAxMjY4NSwgMTI3OTA0LCAKKyAgICAwLCAxMjA3NSwgNzAwNjIsIDAsIDUxNzQsIDk4MzIxNywgMCwgMTI3NTU3LCAzMTIzLCAwLCAxMjY4NSwgMTI3OTA0LCAKICAgICA4NDA4LCA2NDcwNCwgMCwgMCwgOTIyMywgMCwgNDE2MTYsIDY3OTk5LCA3Mzc5NywgMCwgMTExNiwgMTI4MjA0LCA0MzA0OSwgCiAgICAgNzEzNiwgNDMwNTAsIDg1NDgsIDEyMDQ4NSwgMCwgMTE5MDYxLCA5MTc5OTksIDAsIDEzMTE1LCA0MzY3NSwgNjQwOTEsIAogICAgIDkzMjIsIDAsIDEyMDU5NSwgNjQwOTUsIDY0MDk0LCA4MTExLCA2NjI0NywgNDIzMzIsIDY0MDg5LCA2NDA4OCwgNjE5OSwgMCwgCkBAIC0xNzEyNywxMCArMTcxNDYsMTAgQEAKICAgICA5OTI3LCA0MTMzNSwgNDExOCwgMTc5NywgMCwgNDEzMzQsIDAsIDQ2LCA0MzQ0OCwgMTI3ODgxLCAyOTgsIDAsIDEyODExNCwgCiAgICAgMCwgNDI2MjcsIDAsIDMyLCA2MTg3LCAxMTkwNTIsIDExNDk1LCAxMTQ1OSwgMzY2NSwgOTgzNjAwLCA0Mjg3MSwgMCwgCiAgICAgMTk5MjMsIDc0MzM1LCAwLCAxMjcxOTIsIDY2MjM5LCA0MjI2NCwgNjQ0MDMsIDQ0MTIsIDcyNDAsIDkyNDk1LCAwLCAKLSAgICA5ODM0NTgsIDY1NzU4LCAxMjc1MCwgNDE4MSwgODU0NCwgMCwgMTIwMTk5LCA5MTc4OTcsIDEyMDE5OCwgNjk4MDksIDYxODEsIAorICAgIDk4MzQ2NiwgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCAwLCAxMjAxOTksIDkxNzg5NywgMTIwMTk4LCA2OTgwOSwgNjE4MSwgCiAgICAgNjUwMTQsIDAsIDAsIDk4MzE5NiwgMzYzOSwgMTE5NTg4LCAwLCAwLCAxMTg5MDQsIDEwMDczLCAxMjAyMDYsIDEyODg2MiwgCiAgICAgMTI3MTg2LCA2ODQwOSwgNDI4NDQsIDc0OTgsIDEwOTgsIDkyNTY1LCAxMjAyMDUsIDAsIDk4MzExOCwgMTAyMDcsIDg3ODksIAotICAgIDk4MzIyMywgMCwgMCwgOTgzNDY0LCA5MjM0LCAwLCA2MTgyLCA5ODM0NjYsIDY1MDU4LCAwLCA5ODM0NzAsIDk4MzQ2NywgMCwgCisgICAgOTgzMjI1LCAwLCAwLCA5ODM0NzIsIDkyMzQsIDAsIDYxODIsIDk4MzQ3NCwgNjUwNTgsIDAsIDk4MzQ3OCwgOTgzNDc1LCAwLCAKICAgICA1NDcxLCA5NDYxLCA1NTczLCAxMTg5MzYsIDU0NzMsIDQ0LCAwLCA2NjI0NCwgOTQwNzIsIDAsIDY2MjM4LCAxMjg0NCwgMCwgCiAgICAgMTYyMiwgNzc2NywgMTkwMCwgNDEzMzksIDExNDU4LCAwLCAwLCA2NTgxLCA1NTc2LCAwLCA2NDQwNSwgNDEzMzcsIDAsIAogICAgIDQxNjMxLCA4OTQ3LCA2ODM5MCwgMTI3ODQ0LCA0MTY5NCwgMCwgMCwgNzkwOCwgMCwgMTA0MDgsIDY1NzksIDAsIDY0NjE4LCAKQEAgLTE3MTM4LDEwICsxNzE1NywxMCBAQAogICAgIDk5OTIsIDEyODI5OSwgNTA1NywgMCwgMCwgNzQ1MzgsIDUwNTQsIDExODk1MSwgMTk0OTcxLCA3ODYwNiwgMCwgMTQzNywgCiAgICAgNDE2MTcsIDY1OCwgMzQ5NywgMTI4NTA5LCA3NDg2LCA1MDYxLCA1MDYwLCA0MjM1LCAxMjc4NzgsIDAsIDEyODUyOSwgCiAgICAgMTIxMTMsIDQyMzYsIDQ3MjcsIDAsIDAsIDc2OTMsIDEwNzQ5LCAwLCA3NDg4LCA1NzczLCA5NzgsIDEyODEzNCwgMCwgCi0gICAgNDE2MTksIDEwMjM5LCA2ODYxMSwgMCwgNjYyMDksIDAsIDEyODcwMCwgOTc0OCwgOTgzOTQ3LCAxMjc1MjQsIDAsIDAsIDAsIAotICAgIDAsIDE5NTA4MywgMCwgOTgzODM0LCAwLCAwLCAwLCAwLCAwLCA5MzQxLCAxMTk1OTYsIDIzNzksIDExMzI1LCAwLCA2NDY2OCwgCi0gICAgNjc4NTQsIDgxMjUsIDEyMDU0NSwgNjc0MywgMTE5MTc1LCA5MTc5NDAsIDIzNjksIDAsIDk4Mzk2MywgOTgzOTY0LCAKLSAgICAxMTkyMzUsIDc0MDkyLCA3MzkzNiwgNzAwOCwgNDM2NjAsIDAsIDAsIDAsIDIzNjcsIDEyNzgyNywgOTgzODQ4LCAyNjQsIAorICAgIDQxNjE5LCAxMDIzOSwgNjg2MTEsIDAsIDY2MjA5LCAwLCAxMjg3MDAsIDk3NDgsIDk4Mzk1NiwgMTI3NTI0LCAwLCAwLCAwLCAKKyAgICAwLCAxOTUwODMsIDAsIDk4Mzg0MywgMCwgMCwgMCwgMCwgMCwgOTM0MSwgMTE5NTk2LCAyMzc5LCAxMTMyNSwgMCwgNjQ2NjgsIAorICAgIDY3ODU0LCA4MTI1LCAxMjA1NDUsIDY3NDMsIDExOTE3NSwgOTE3OTQwLCAyMzY5LCAwLCA5ODM5NzIsIDk4Mzk3MywgCisgICAgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDQzNjYwLCAwLCAwLCAwLCAyMzY3LCAxMjc4MjcsIDk4Mzg1NywgMjY0LCAKICAgICAyMzc1LCA4MDYwLCA2MTk0LCAxMTk4NTgsIDE4NDQsIDExOTA4NCwgMCwgNjAxOSwgMCwgMCwgNjk2MSwgMCwgMTE4ODM5LCAKICAgICAwLCA4ODAwLCAwLCA0Mjg2MiwgNDQ2MywgNjU1ODEsIDYxOTIsIDE5NDY3NiwgNDI3NzEsIDAsIDkyMzMzLCA3MjUsIAogICAgIDY1MDQyLCAxMTg3OTcsIDEyMDgwMCwgOTgzMDQwLCAxMjg5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjYxLCAxMjA3MDcsIApAQCAtMTcxNTksNjM0ICsxNzE3OCw2MzQgQEAKICAgICAxMjY1MDMsIDQxNjA3LCAxMjAxMTUsIDE2NzksIDEyMDExNiwgMTIwMTgwLCAxMjAxMTMsIDEyNzQ2MiwgNzAwNSwgNDE2MDksIAogICAgIDk1ODAsIDAsIDQwMSwgNjk5NDksIDQzNzc5LCA2OTY4LCA1NzYxLCAzNDIsIDg1NTMsIDAsIDgxNDMsIDEyNzExNSwgCiAgICAgMTE5ODMsIDkyMjQ5LCA2MjQsIDc0NTA4LCA0MDU3LCA0Mzc4OCwgNTA3OCwgNzQyNTgsIDEyNDc4LCAwLCA1MDc2LCAwLCAKLSAgICAxOTQ2MDksIDAsIDEyMDA5NywgNjg1LCA5MDI1LCAxNTI0LCAxMjYxOCwgMCwgNTUzOSwgMCwgOTI1MjMsIDEyMDEwMiwgCi0gICAgNzEzOCwgMTIwNTUyLCAwLCAxOTQ2MTEsIDc4NzUyLCAwLCAxMjUyMCwgODA1OCwgOTczMiwgMCwgNTA4MCwgNjQ3NzUsIAotICAgIDUwMzYsIDUwMzUsIDEyMDU5MCwgNDI2MDQsIDk4MzY0NywgMCwgODA3NCwgMjc1LCAxMzI5MSwgMTkwNywgNzg4MzgsIAotICAgIDQ0MzIsIDEyNzI3MSwgNTAzMywgMTI3MjczLCAxMjcyNzIsIDQ4MzYsIDM4ODgsIDczNzkyLCAxMDcyOSwgNjQ1NDYsIAotICAgIDEyNzI2MiwgNDM3MDQsIDEyNzI2NCwgMTI3MjUxLCA2NzU4OCwgMTE5MDAwLCAxMjcyNTIsIDEyNzI1NSwgODg1OCwgNjQwOSwgCi0gICAgMTI3MjU2LCAxMjAyNTIsIDEyODEwMCwgMCwgMCwgNjYzMjEsIDAsIDEyODE0LCAxMjcyNDgsIDM0MzIsIDEwMjE4LCAwLCAKLSAgICA2MDk0LCA3NjQxLCA0MjQ0NSwgMCwgOTI0ODcsIDQyNDA2LCAxNjc2LCA3NDMyMCwgMTk0NjA3LCA5ODMxNzcsIDUwMzAsIDAsIAotICAgIDAsIDAsIDczODY5LCA5NjIyLCAwLCA2OTk0NCwgNjc4NywgMCwgMCwgMCwgOTgzNTgzLCAxMDU0NCwgMTI5MTksIDAsIAotICAgIDkyMjE4LCAwLCAwLCA2OTkwNiwgMTIwNzg5LCAwLCA5NDcsIDExOTgzNSwgMTk0NTg2LCAxOTQ1ODUsIDEwOTY5LCAKLSAgICAxMTk5MzUsIDc2MTMsIDkyNTYyLCAxMTk5MzYsIDQ3OTUsIDExOTkzMCwgNzAxOCwgNzM3NiwgMTIwMTgxLCAxMjAxOTIsIAotICAgIDEyMDI2OCwgMCwgNDM1NjcsIDc0MDU2LCA5MTc5MTAsIDExODMzLCAxMTk5MTksIDcyMTYsIDY1MjMyLCA3MjE3LCAyNTEsIAotICAgIDcyMTgsIDc4OTUsIDQzOTUsIDQzNTM4LCAxMTk5MjYsIDExOTkyOSwgMTE5OTI4LCA3MjEzLCAxMTk5MjIsIDcyMTQsIAotICAgIDcyMTUsIDk4MzgyNywgNzQxNDEsIDg4ODAsIDc2ODUsIDY2NDU5LCAxMjAxNzMsIDY1NTQwLCAxMTk2MTgsIDYyNSwgODE4NywgCi0gICAgNDI4NjEsIDExMTMsIDcyMzYsIDc5MTUsIDM2MzAsIDEyMDE3NiwgODE3OSwgNzQyNjQsIDY3ODg2LCA5MzE2LCAxMDk4MCwgCi0gICAgMjQ4OSwgNjU2MjQsIDgxNTAsIDEzNTksIDY3NjUyLCAxMjczMjksIDEyNzMzMCwgNzM3NTYsIDUwNDIsIDUwNDEsIDQyNzY5LCAKLSAgICAxMjA4NCwgMTI3MzI0LCAxMjczMjEsIDkyMjc5LCAxMjczMTksIDEyNzMyMCwgMTI3MzE3LCAxMjczMTgsIDEyNzMxNSwgCi0gICAgMTIyODMsIDE2MTYsIDM3OTUsIDAsIDg3OTUsIDY2MjQ1LCAwLCAwLCAwLCAxMTM4LCA3MzkwNSwgMTI2NzcsIDAsIDAsIAotICAgIDMyMzksIDEyNzMxMSwgMCwgMCwgODQzMSwgMCwgNDIxNjQsIDAsIDExNzc4LCAxMjYyMCwgNjgyNiwgNzM3NzMsIDExOTA3MywgCi0gICAgNTA0MCwgMCwgMCwgOTgzNDM1LCA3ODQyMCwgMCwgNTAzOSwgMCwgNzg0MTgsIDAsIDUwMzgsIDAsIDAsIDEzMTg0LCAKLSAgICA3NDI5MywgMCwgNjQ2NDgsIDAsIDkzNTksIDc4NDE2LCAwLCAxMjg3NzAsIDY1MTU3LCA2NjYyLCAwLCAwLCAzODYzLCAKLSAgICA3MzkwOSwgNDgzNSwgNTUyNjYsIDQzNDMyLCAxMjc4MjIsIDQzMDksIDcxMjcsIDE5NDU2OSwgMCwgMTk0NTY4LCAxMzAxLCAKLSAgICAwLCA0MjU4OSwgNTY5LCAwLCA3MzgxMywgNzExLCA0Mzg5LCA3MTMzLCAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAKLSAgICAxOTQ1NzAsIDQxMzMxLCAxMDA2LCA3NDI0MCwgMCwgMTU1MCwgODIwMSwgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIAotICAgIDc3OTA4LCA0MjczOCwgNjU3ODQsIDc3OTA3LCA2NTI2NywgMzc1OCwgMCwgNjU3ODEsIDY0NzM0LCA3MDA3MywgMjQ0MCwgCi0gICAgNjU3ODAsIDc3OTEzLCA4NDQ5LCAwLCA1MDA4LCA5ODM1NzIsIDIxMTgsIDAsIDEyMTIxLCA4MjU1LCA1NTEyLCA3Mzg3NSwgCi0gICAgMjEyOCwgMjEzMCwgMjEzMSwgMjEyNiwgMjEzMywgMTExOSwgMTI3MDY4LCAyMTE0LCAyMTE2LCAyNDU1LCAwLCAyMTIyLCAKLSAgICAyMTIzLCAyMTI0LCAyMTI1LCAxMjc0ODYsIDg3MTQsIDk4MzgxMSwgMjExMywgMCwgMjExNSwgMTI4MTc3LCAxMjc5MDcsIAotICAgIDQzNzEzLCA1MDUyLCA2NjIyMCwgNTgyMSwgNjE4NiwgNjU3NzgsIDY1Nzc1LCA1MDUxLCA2NTc3MywgMTQyOSwgNDI2NDcsIAotICAgIDUwNTAsIDMwMiwgMzg4LCA0MTExNSwgNzM1LCA2NjM3LCA1OTA3LCA2NTA4OCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCAKLSAgICA5ODMxODEsIDEyMDAzLCA1NTEzLCA2NjY2LCA1MDUzLCA3NDIzMCwgNTUxMCwgNzg0NTEsIDAsIDc4NDQ3LCAyNDcwLCAKLSAgICA3ODQzNywgMCwgMTkyNSwgMCwgOTIyMzcsIDc0ODA3LCAwLCA1MDQ4LCA1MDQ3LCAwLCAwLCAwLCA5MjMxMywgMCwgNzQ0OTcsIAotICAgIDkyMzk1LCA4MDg5LCA2OTI5LCA2MzksIDk4MzU2MywgNjgxNzksIDY0NDQyLCAwLCA5MjM0OCwgNDU5OSwgNDE0MDIsIAotICAgIDY2NzQsIDQzMzk3LCA0MzI5NCwgMTQ3NiwgNjQ4LCAwLCA2NTgxOSwgMzIzMywgMCwgNDE3ODIsIDY5NTEsIDk0MDE3LCAKLSAgICA5ODM5NjcsIDM1MzAsIDk3NTAsIDEyODMxNywgMCwgNjY1NiwgNDI2MTgsIDAsIDUwNDYsIDg1MTIsIDY1ODU2LCA3NDI2MSwgCi0gICAgODk2NywgMCwgNTA0NSwgNDIwMjYsIDE5MTYsIDc5ODYsIDUwNDQsIDEyMDU1NiwgOTAwNiwgMTMxMjgsIDUwNDMsIDAsIAotICAgIDc4NTMsIDc0MDY4LCA3NDAwNCwgOTY2OSwgMTIzNDEsIDEyNzAzLCA4NDAyLCAwLCAxMTkwNzAsIDkxNzYwMCwgNDE3NTAsIAotICAgIDM1ODYsIDY0NTA4LCA0MzE0OCwgMCwgMCwgMTE5NjA2LCA2Nzk4MywgMTMyOTYsIDUxNywgMCwgMTI4NTM0LCAxOTQ5NDYsIAotICAgIDQxNTI4LCAxMjMsIDY1NDU0LCAwLCAwLCA3NDQ3OCwgMTA1MzEsIDc3ODQsIDQxNTI2LCAxMDgyOSwgNzM5OTEsIDgwNTcsIAotICAgIDExMjYsIDczODk1LCAwLCAxOTQ1OTEsIDAsIDM5MjUsIDQyNTEsIDgwNjksIDEwNTE3LCAxMjA0MzksIDQ4OSwgMCwgNDI1MCwgCi0gICAgMTIwNDQxLCAxMjA0NTIsIDQzMTUxLCA5ODMxNzgsIDE5NDg1MSwgNjYyMDAsIDAsIDAsIDAsIDc4NDIzLCAwLCAwLCA4NzExLCAKLSAgICA2MTgzLCAwLCAwLCAwLCAxMjA0NDgsIDc2MjMsIDExODkyNSwgMTE4ODg5LCA5MjM1LCAxMjc2MCwgNzQxNzYsIDY5NjYyLCAKLSAgICA2NjQ0NSwgNDM1NDAsIDEwMDYyLCAzNzQzLCAxMTUxNCwgMTEwNzgsIDAsIDEyMTM2LCAwLCAxMjY1OTcsIDEyMDQzNSwgMCwgCi0gICAgNzcyNiwgMCwgMTk5MjIsIDI2NywgMzM5MywgNDIxOTgsIDEzNzEsIDE5NDg0OSwgNjkyMzMsIDI0NTgsIDAsIDYyMDEsIDAsIAotICAgIDQxMDc0LCA0MjY2LCAxMDY1MiwgNDE2MTIsIDQxMDc3LCAzNDAyLCA5MDUwLCAzMzk4LCAwLCA5ODMzNDAsIDAsIDMzOTEsIAotICAgIDQxMDc1LCAyNDc2LCAwLCAxMjgwMTcsIDAsIDEwNjI1LCAwLCAxMjc2NywgMTMwMTcsIDc4NzQzLCA2NDI2MSwgNjQ5MzQsIAotICAgIDEyNzUzNywgMTMwMTQsIDEzMDEzLCAwLCA2NjczLCAwLCAwLCAwLCAxMjQzOCwgMCwgOTgzMzM0LCAwLCA5ODM4NzEsIAotICAgIDEyNjYzOCwgOTA1MywgMTMwMTUsIDc0NTIzLCAwLCA3MDQsIDY2MjE1LCA2MTk1LCA5ODM4MTksIDY2NjAsIDc4NzU4LCAKLSAgICA5MTc3NjAsIDkxNzc5MywgNDIyMTIsIDEyNjI5LCAxMTQzNSwgMCwgNTUyNTYsIDY1NTM4LCAwLCAxMjc5NDAsIDk4MzMzMywgCi0gICAgNzQ1NDcsIDEyNjU4NSwgNjU0NDgsIDc4MTAwLCAxMjk0OCwgMTE5MDAxLCAxOTUwMDIsIDExOTIzOCwgMTk1MDA0LCAKLSAgICA3ODA5OSwgMTI3MDg1LCAwLCAxMjgzMjAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDc4NDU4LCA2NjcyOCwgMTgxNiwgCi0gICAgMCwgNDI1MzMsIDE2OCwgNDI4NDUsIDQ4OTgsIDY0Mjk4LCA5ODMxNDEsIDAsIDQ5MDEsIDE4MjEsIDAsIDU3OCwgMzY1MywgCi0gICAgMCwgNzkxLCA5MTYyLCA2OTc3LCAwLCA3ODg4OSwgNzQ1NjEsIDAsIDczNzMxLCA4MzU0LCA0MzU5MCwgMTE5MzAzLCAKLSAgICA5ODM0NDEsIDc1NTcsIDExOTMzOSwgMTE5MzAxLCA4MjM0LCA3MjQxLCAwLCAxMjA2NzEsIDExOTE2NywgMTk0OTk2LCAKLSAgICAxMjgxMSwgNjU5MjUsIDM5NDYsIDc4MDc4LCAxMDk5OCwgNzgwODAsIDY3MywgMTk0ODY3LCA2NDM5NywgMTI4Mjc2LCAKLSAgICA3NDU5OSwgNzg0NDksIDg4OTAsIDE5NDk3NywgMTk0OTc2LCAyNDQ4LCA3ODA4NSwgMTAyNjcsIDg0MjQsIDI0NTIsIAotICAgIDc4MDgzLCAxMjg4MjQsIDg3MjksIDc4NDU2LCAwLCA3ODQ1LCA5MTc5MTcsIDcxMzAyLCA0NDA4LCA0MTIyLCA2NzcyLCAKLSAgICAxMTAzOSwgODcyMywgMTk0OTkwLCA3MTMxMCwgMTE5MzAyLCA3MzEsIDExOTMwNCwgOTIyODYsIDI0MzgsIDY0ODU1LCAKLSAgICAxMTkzMDAsIDExOTI5OSwgMTE3NSwgMCwgNDIxMzUsIDM3MywgMTE5MTcyLCAyMTE5LCAxMTQ1NywgMTE1MjEsIDc3MjMsIDAsIAotICAgIDAsIDAsIDQxOTUyLCAwLCA1MjczLCAyMTI3LCA1MjY5LCA2MzM3LCA1MjAyLCAyNDA0LCA1MjY3LCA0MjgyMywgMTEyOTEsIAotICAgIDE5OTE1LCA1Mjc3LCAxMjk2MywgMTI3ODY0LCA2MTg5LCA0MTI1LCAxMzE0LCAxMjEzMywgMTIwMzQwLCAxMTg4NzMsIAotICAgIDEyNzEsIDk4MzYzMSwgMCwgNjYwMjQsIDQxNDgyLCAzODY0LCA3NDUzOSwgMCwgMzg3OSwgMCwgMTI5NzgsIDQxNjYsIAotICAgIDQ1NzQsIDAsIDc1NjcsIDc0NTksIDk4MzE2MCwgNDEzOTAsIDUzODQsIDQxODgyLCA2NzY0NywgOTI1NDgsIDU3NTksIAotICAgIDk4MzkwMywgMCwgNDEzODgsIDY0NDQ2LCA0MTM5MiwgNjQyODgsIDQxMzg3LCAwLCA4NzA2LCA1NTUyLCA5ODMxODcsIDcwMCwgCi0gICAgMCwgNTU1MywgMCwgNzA4OCwgNTM1NiwgNzQ5OSwgNjgwMDcsIDY2NTk2LCA3NDA2NiwgMCwgMTAyNjMsIDU1NTQsIDAsIAotICAgIDEyMzQ0LCAxMDMxMSwgNzgxMTMsIDY2NjUsIDkyNjI2LCAwLCA3NjE4LCA4NTE3LCAxMTQ1NSwgNzg0NDAsIDY0NjMyLCAKLSAgICA2NDQ0NywgNTU1NSwgNzgwODgsIDc4MDkzLCA3ODA5MSwgMCwgNDI4MDMsIDY1MDMzLCA5MTQzLCA2NjY4LCAxOTUwNjcsIAotICAgIDY3OTk1LCAxOTUwNjksIDY1NiwgMTk1MDcxLCA2NTAzNywgNDU3NywgNjQ2MjQsIDAsIDAsIDAsIDk4MzY0MCwgNDI2OSwgCi0gICAgNzM4ODUsIDkxNzc3NSwgNDI4NDYsIDY5NjQ0LCA5NTAsIDAsIDkyMjczLCA2NjU4MCwgMTE4ODk1LCA2NjY4MywgMTA1NTQsIAotICAgIDkxNzc3OCwgMTE5MTIxLCAwLCA1MDk4LCA5MTc3NzAsIDAsIDExOTA5OSwgNTA5NywgNDkzNSwgOTg0OCwgMTAzODEsIDAsIAotICAgIDEyODg3MCwgOTgzNjkyLCAzNjUxLCAwLCAxMjA3MzAsIDEyNzU1NiwgNTEwMiwgNTEwMSwgMTAyNjksIDEyOTgzLCA4MTM4LCAKLSAgICA0NTE3LCAxOTMyLCA1MTAwLCAxNDM5LCAxMjA5MywgMTI0NywgMTAwMzQsIDE5NTA2NCwgNTA5OSwgNzgzNzMsIDE0NDEsIAotICAgIDQyMDg3LCAzMDYzLCA2NTAsIDAsIDc4MzgsIDAsIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIDEyMDc5MCwgCi0gICAgMTI4NTgyLCA5MDc4LCA4NTQ1LCA2NjM1NiwgMTI4Nzk5LCAwLCA5MTU0LCA5MTE4LCAxMjY1NDMsIDAsIDI2NzYsIDIyNzcsIAotICAgIDAsIDczODEyLCA2MTkwLCA4NTk5LCAxOTUwNTMsIDY5OTE4LCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1NiwgMTk1MDMzLCAKLSAgICA5MjYyMCwgMTIxMjksIDAsIDg0ODEsIDAsIDYyMDIsIDE5NTAzNSwgMTA5MjAsIDEyODIzNywgNTIwMywgMTk1MDM5LCAKLSAgICAxOTUwMzgsIDUxMDgsIDUxMDcsIDY1ODE4LCA2NjAxOSwgOTc2MiwgMCwgNTU0MSwgNzQ3NzIsIDAsIDEyNjEzLCA1Mjg0LCAKLSAgICA2NjU3LCAyMDcsIDEyODgwNiwgNDI3NSwgNzQ4MTksIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCA3ODc4NiwgNTEwMywgCi0gICAgMTI3ODYxLCA2NDM0OCwgNDEzNjgsIDQzOTc0LCA0ODgsIDY5ODExLCAwLCA3MTMzOSwgMTAxNTcsIDAsIDQzMDM0LCAKLSAgICAxMTQzOCwgNjQ2NzQsIDAsIDkyNjk0LCA2ODQzMSwgNDE3NzEsIDUxMDYsIDY2NjksIDg1MDQsIDY1MTU0LCA2OTgxMywgCi0gICAgNDEzNjcsIDUxMDUsIDEyNzUwOSwgNjk3MjAsIDY0NzYsIDUxMDQsIDk4Mzc0MCwgMzA0LCAzMTc2LCAxMTkwMTAsIDAsIAotICAgIDkzMiwgMTIwNjMzLCA2NTY3LCAyMzgsIDY5NjU2LCAxOTUwMTEsIDE5NDU5NSwgMTk5MDUsIDEyMDU3NywgMTk1MDE1LCAKLSAgICA3ODg3MCwgNDEwNDQsIDY3NjQwLCAxOTQ5MDIsIDQyMDU1LCA5OTEyLCA2NTkzOSwgMTA2NzAsIDc0MDkzLCAxMzI3MywgMCwgCi0gICAgMTI1NTIsIDE5NTAxOSwgODgwMywgMzA5LCA2NjIyLCA4MTUxLCAxMDg1OCwgNzg3MDYsIDY3NjM2LCAwLCAxMjU2OCwgMCwgCi0gICAgMTI1NTMsIDEwODE0LCA0MzI3NSwgNjk1MCwgOTcxMiwgNjg2ODAsIDQzOTcwLCA5ODMxOTgsIDY1MTY1LCA5MjcyNSwgMCwgCi0gICAgNjY0NjYsIDAsIDAsIDAsIDY2NzI1LCA2MTkxLCAxMTM1MSwgMTA0MzcsIDExMzE2LCA2NzYzNCwgNDM3NjMsIDAsIDQxNzU0LCAKLSAgICA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCA2ODQ2MiwgODIzMiwgMTE4ODE3LCAwLCAzMjIyLCAwLCAwLCAwLCA2NjY2MywgCi0gICAgMCwgMCwgMTA4MzQsIDAsIDAsIDY1NzMyLCA5NDA5NSwgOTE3NTQ3LCA5MjY4MiwgNjc2NzksIDE5NTAyMCwgMCwgNzc4MSwgCi0gICAgNDEzODMsIDY0NTY4LCAwLCAxMjA3MzgsIDEyMDc3LCAwLCA2NDU4NiwgOTE3NjIwLCA0MjM5NiwgNTUyNTUsIDM0NzUsIAotICAgIDEyODAzNSwgMjQ3OSwgMCwgMzYzMiwgMTIwNzI4LCAxMDY5OCwgODM3NiwgMzY0OCwgMTk0OTYwLCA3NDg0NCwgNjc2MzksIAotICAgIDM2MzYsIDY3ODk0LCAzNjUwLCA4ODM3LCA2NTIyOSwgMTg0MywgNDIyODMsIDQzMjUwLCA0MTU2MiwgOTEwMCwgNzQ1NDgsIAotICAgIDkxNzYzMCwgMzY0MCwgMTI3MTkwLCA0MjMyMSwgNzI4NCwgMTk0OTc0LCAxOTQ5NzMsIDE5NDk1MCwgMTk0OTQ5LCAKLSAgICAxOTQ5NTIsIDE5NDk1MSwgMTI2NjQ5LCAxOTQ5NTMsIDQyMDgwLCAyNTI5LCAwLCAwLCAwLCA0MjA4MywgMTIwNjc4LCAKLSAgICA2ODM5OCwgMTk0OTU3LCA2NzYxOSwgNjYzNjcsIDE5NDk1OCwgOTYzNCwgOTIzODAsIDk5ODgsIDAsIDQxMDY4LCAwLCAKLSAgICA0Mjk1LCA2NTI2NCwgNjgwMDYsIDAsIDkyNTQ1LCAwLCA3ODUsIDgyMzYsIDEyODY0NywgOTAyNywgNjgxNjAsIDY3NjIzLCAKLSAgICA2NDM4MywgMTIwMjY1LCA5MjUsIDEyNzE1NiwgMCwgNDE5ODUsIDQxMDcxLCA5NTg2LCAwLCA0MTk4NCwgOTIxNywgMCwgMCwgCi0gICAgMCwgOTE4NiwgMjA2NywgNDAxNiwgOTgzNzk0LCAwLCAzODEsIDEyOTM2LCAwLCA0MjA3NywgMCwgNjk4ODAsIDUxODQsIAotICAgIDQyMDc4LCAxOTQ5NDcsIDEwODEwLCAxMjg1MzEsIDQ1ODUsIDE5OTQzLCA1ODYwLCA2NzYzMywgMCwgMCwgODEyLCAzNjE1LCAKLSAgICAwLCA1MTc4LCA0NDAwMCwgMTIwNTQ4LCA3ODgwNywgNTE4OCwgNzQyODcsIDY3NjI5LCAzNjA1LCAxMDY5MiwgMTE2NiwgCi0gICAgNjQ0MjksIDQyNjM5LCA5MjQsIDAsIDY3NjMxLCA0MjYxNiwgMTIwNjcwLCAyNDQyLCAxMDcwMywgNzg3ODksIDY3NjMyLCAKLSAgICA5MTc5MjQsIDEyNzcxLCAxMjczNiwgMTI3NTMsIDY2NzA4LCA3MzkzMywgNjc2MjYsIDQyNDAxLCAwLCA2OTg3MiwgCi0gICAgMTI3MzczLCA0MjI4OCwgMTI3NTEsIDAsIDg1NDIsIDEzMTQ1LCAxOTQ5NjMsIDI0NjgsIDY2NzA2LCA0MTI5NCwgMzYyNiwgCi0gICAgMzg4MywgNjQzODgsIDQyNDc5LCAwLCA0MTExNywgMCwgOTI1ODAsIDAsIDAsIDY3NjI0LCAwLCAxMjkwLCAwLCA2NTU4NSwgCi0gICAgMjcxNSwgODA2LCA2NTIwOCwgNDE4ODQsIDkxNzg4MywgMTMxOCwgNjQ3MzEsIDEyNjU3OCwgMCwgMCwgNjYzMjUsIDM0NjUsIAotICAgIDI0MDUsIDkyNDAsIDAsIDEyNzU2LCA2NTI1OSwgMCwgOTgzNzcyLCAxMjc1MiwgNTgzMywgMTQzMiwgMCwgNDE4ODMsIAotICAgIDczOTEyLCA5Nzk5LCAwLCA0MTg4NiwgMjQ4MCwgMCwgMjA2MiwgMTI3MjkzLCA2NDk0LCA1NTM3LCA3ODY1NiwgMCwgCi0gICAgMTk0NTg3LCAwLCAxMjExLCAwLCAwLCAwLCAxMTg4MzIsIDEyMzE4LCAwLCAwLCA2ODAwNSwgMTA2MjIsIDk4Mzc3MCwgMCwgCi0gICAgNzg2NTQsIDY1NjYsIDc4NjU5LCAwLCA3Mzc4MCwgMTE5MTk2LCA2NDg2NCwgMCwgNzg2NjAsIDAsIDgyODQsIDEzMDgxLCAwLCAKLSAgICAzNTg5LCA0MjA1MSwgNDAzNSwgNjQ5MiwgOTIyMzYsIDQyNjUsIDY2NDIsIDM5NzcsIDc0MTg2LCA0MTc3OCwgODM2LCAKLSAgICAxMTkyMTYsIDI0ODgsIDAsIDQ1ODIsIDAsIDAsIDQxNzc3LCAxMjkyNiwgOTgzMzY5LCA3NTI4LCAxMDU1MCwgMCwgOTI3MDYsIAotICAgIDAsIDEwOTYxLCAwLCAxMzc0LCA2NDg3OCwgMTE5MDE0LCAwLCA0MjM4OSwgNDEzNzQsIDIyODYsIDAsIDc4NDkyLCA0MTM3NywgCi0gICAgMTI3OTA5LCAwLCA0MDAsIDEyNTk3LCAxMjA1ODYsIDAsIDAsIDY2NjEsIDk4MzE0NSwgNjQ4MjcsIDAsIDczODE3LCAzOTAsIAotICAgIDAsIDcxMzAxLCA5ODM4NTMsIDM0NzMsIDc3MTgsIDAsIDAsIDAsIDU1Mjg1LCAwLCAwLCAwLCAxMTk2OSwgOTgzMzgyLCAKLSAgICAxMjc4NDEsIDYzNjUsIDE4ODcsIDY3NjMsIDk4MzM2MiwgODA4MCwgNzAwNiwgMCwgOTgzMzYzLCA2NzU3LCA2NDM1MSwgCi0gICAgMTU0NCwgMCwgNjc2NiwgNjQ2NzcsIDEyMDcxNiwgOTgzMzY0LCA2MTQ2LCAwLCA3NzEsIDk4MzM2NSwgMCwgMTI4MTIsIAotICAgIDEzMTY4LCA0MjI3MiwgMTIyMDAsIDkxNzkyNywgNzkwNCwgMCwgOTUzLCAxMjkxNywgMTE5NTYwLCAxMjMwMCwgMCwgCi0gICAgMTE0OTEsIDk3MjQsIDEwMzQxLCA5ODM3NjQsIDk1MjQsIDc0OTAsIDExMzg5LCA3NDg5LCAzMzc5LCAwLCA3NDg3LCAwLCAKLSAgICA0NzEsIDc0ODQsIDc0ODIsIDY3NTMsIDc0ODAsIDU3NjQsIDc0NzgsIDc0NzcsIDY1MDEsIDc0NzUsIDY5MTgsIDc0NzMsIAotICAgIDc0NzIsIDI0NzQsIDc0NzAsIDc0NjgsIDEwMjMyLCAxMDYxNSwgMTAyMTMsIDEyNzI4OCwgOTIzNTcsIDEwMDQ5LCAxMTgzNCwgCi0gICAgMzU0NCwgMCwgNjAxNywgNjUzMTEsIDEyNzQ4MSwgMTIwMjE2LCAxMzMwNiwgMTA1MzMsIDc4NzAsIDczOTQ5LCA3NjI1LCAwLCAKLSAgICAxMjA1NDQsIDAsIDAsIDkyNjYwLCAwLCAwLCAwLCAxOTk2MSwgMjQ3MiwgNDI2NjUsIDkyMzQxLCAwLCAyMTM5LCA0MjU2LCAKLSAgICAxMjA3NzYsIDc0MzgwLCAwLCA0MjY3NSwgNDI2NTgsIDEyODQ1LCAwLCAwLCA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgCi0gICAgNjU2NzEsIDcwODMsIDEyMDAwOCwgODA2NiwgNzY3OCwgNzQ4NjUsIDAsIDAsIDAsIDAsIDcxODYsIDAsIDEyMDU1NSwgMCwgCi0gICAgNDQ1LCAxMjA1NjYsIDEyODMwOCwgMCwgMCwgODMzMCwgMCwgMCwgNDI3OTcsIDk4MzE1MCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAKLSAgICAxNzcwLCAwLCAxMjg4NjYsIDE1NjAsIDEyMDIwOSwgMTk0OTcyLCA0NTg0LCA3Mzg0MywgMCwgMTE3MTIsIDEwODY2LCAKLSAgICAxMTg5MjgsIDExMTgsIDcxMzM0LCAwLCAwLCAxMDgxLCA3NDM2LCA2ODQyMCwgNzI1MiwgMCwgNTk5NiwgNjk5MjEsIDQ5MDMsIAotICAgIDAsIDQxMzg2LCA1MTYyLCAxMTkxODksIDEzMzAsIDAsIDcxMzksIDAsIDEyMDQ3LCA0MTM4NCwgMCwgMCwgMTg0OCwgNDMzNCwgCi0gICAgNjMyNCwgNDE5NzUsIDY0Nzc3LCAxMDY3NCwgMTIzMDgsIDEyMTg2LCAwLCAwLCA5ODM3MzIsIDEyNzE1LCA2ODAwMiwgCi0gICAgOTgzNDcxLCAxMjY2MzAsIDIwMTgsIDY2NjcyLCA0MTk3OSwgNjY2ODUsIDExOTE1NywgNjgwMDAsIDkyNDY0LCAwLCAKLSAgICAxMjY5ODQsIDY4MDAxLCA5MzM0LCA5MjcwNSwgOTIzMTUsIDcwMTAxLCA3OTc1LCAwLCA3Nzk1NywgMCwgNjY2MjEsIDQ4ODQsIAotICAgIDY2NTk3LCA2OTczMiwgMCwgMCwgNjMxMywgNjU1MTMsIDY5ODU3LCAwLCAwLCAwLCAyMzQ1LCA0MzY5NywgNDYzLCAwLCAwLCAKLSAgICAxMTk2MDcsIDMxMTcsIDU0NjAsIDAsIDAsIDk4MzM3OSwgMCwgNDIyNzksIDE5NDU3NywgMCwgNzg0MTUsIDAsIDE5NTAwOCwgCi0gICAgOTgzMzc2LCAxMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2MywgMCwgMCwgMCwgMCwgMjQ4MiwgMTQ3MSwgMCwgMCwgCi0gICAgNDIyNDcsIDEyMzc4LCA3MzkyNSwgNjk2NjQsIDAsIDEyMzc0LCAwLCAwLCAwLCA5ODM2ODUsIDI0NjAsIDAsIDExOTQ0LCAKLSAgICAxMjM3NiwgMTI3ODY4LCA2NDY3OSwgMCwgMTIzODAsIDEwNTU3LCA2NDQ3MywgNTg3MCwgMCwgMjAyNCwgMTI3MTgwLCAwLCAKLSAgICAwLCA1MzksIDAsIDEyNzc2NSwgOTQwNTIsIDM4NTMsIDY1MTgwLCAxMjc5MjMsIDEyMDc5NiwgMTIwMjQ1LCA5MjMyNCwgMCwgCi0gICAgODY1OSwgMCwgMTI0NzQsIDkyNTc5LCA5NTAzLCAxOTQ5NjksIDI0NzgsIDAsIDQxNjIsIDAsIDQyNjAsIDEyOTUzLCAKLSAgICA2OTYzMywgMTIwMDg5LCAxMjQ3MCwgMCwgNzQxODksIDI3NDIsIDEyNDc2LCAxMTc5OCwgMTA5NDYsIDEyNzMxMCwgNTAwMCwgCi0gICAgMCwgOTgzNTc5LCAwLCA2OTY3MiwgODIxMywgNzQwMTcsIDc3NzEsIDYxNjEsIDY4MDE4LCA2NzA5LCAwLCA3ODg4NSwgCi0gICAgOTgzNjk5LCAxMjc5NzEsIDEyMDU4MiwgNzg1NDcsIDAsIDEwMzAxLCAxMDMzMywgMTAzOTcsIDAsIDAsIDczNzkxLCAwLCAwLCAKLSAgICAwLCAwLCAxMTkxMjMsIDQwMTQsIDEyODQyLCA3Mzk1MiwgMTIwMTUsIDEyNzI5MCwgODI3NSwgMzg5MywgOTgzMjU2LCAwLCAKLSAgICAxMjIxMCwgNzIyMSwgNDIxNDcsIDAsIDc0NTUwLCA3NDQ2NSwgNjQ3NDcsIDExODg0MSwgMCwgMTI1MTYsIDQ0NDQsIDAsIAotICAgIDkyMjcxLCA3NDUzNywgMTA4OTIsIDgyMzEsIDAsIDY0NzMsIDQxOTY4LCA3ODM4OCwgNDE5NzMsIDM1OTEsIDQxOTY5LCAwLCAKLSAgICAyNDUzLCAxMjg1NDksIDkyNjY2LCA2NDcwNSwgMCwgMCwgMTAzNDksIDEwNDEzLCA0MzU5MSwgNDE5NjIsIDMyMDIsIAotICAgIDc0MzUzLCAwLCA4MzE2LCAwLCAwLCA5NDA2MCwgNjg3LCAwLCAwLCAwLCAxODQwLCAwLCA2ODY3MSwgMTE5ODA5LCA0ODgzLCAKLSAgICAyODUsIDQ3MjMsIDcwMDk5LCA5MjY5MiwgNDQ1OSwgNzQ1NzcsIDQyOTIxLCA0MTcyMCwgMTEwODksIDI0MCwgMTk5MDYsIDAsIAotICAgIDQyMzIzLCAwLCA5NzQzLCAxMjAyMzIsIDEzMTM0LCAxMjY1MzUsIDAsIDAsIDAsIDAsIDQyNjM0LCA5ODMzMzUsIDQzNDM3LCAKLSAgICAzMDgxLCAxMTQ2MywgMTIwMTU0LCAwLCAwLCAxMDQ0NSwgMCwgMCwgNjY3MTcsIDI2MTQsIDkxMjUsIDExOTAyMywgMTcyOSwgCi0gICAgMCwgMTIwMjM2LCA2NTIyMSwgNjM4ODMsIDQzMzM0LCA2NDg1MiwgMCwgNjUxOTQsIDY2MjAxLCAwLCA2NjU3OCwgNTAwMSwgCi0gICAgNDE4NzksIDc0NDI3LCA0MTIxLCA1MDAzLCA4ODQsIDY2NzAwLCA2Mzg3OSwgNDk0MywgNTE1MCwgNzM4ODksIDc0MTgyLCAKLSAgICAxMjc5MTUsIDY0MywgMzA4NiwgMCwgNDI0NDgsIDQyMjk5LCA1OCwgMCwgOTE3OTUyLCAxMjAwODMsIDYzODczLCA4NDkxLCAKLSAgICAwLCAwLCAwLCA0NTMwLCA0MjQwOSwgNzEyNiwgMTk0NTc1LCAyNzIxLCAxMjAwNzQsIDExOTA5NiwgMTk5MjksIDAsIAotICAgIDE5NDU3NCwgMCwgNDI0MiwgNDI2NCwgMTIwMDc3LCAxMjA1MzAsIDY2MTc5LCA0MjQxMiwgNjU5NDEsIDEzMTE0LCA2NDUyMiwgCi0gICAgMTA3NDAsIDMwOTQsIDAsIDk3NTQsIDExOTEwMiwgNDQzNywgNzM5NDgsIDEyNzA3NCwgOTgzMjMyLCA1NTI4MCwgNDIxNzQsIAotICAgIDE5NDkyNSwgNDI0MzAsIDAsIDAsIDQyMzU1LCA2NjAyNiwgNDMwNiwgNDEzODAsIDY4NDMyLCA5MjU4NiwgMCwgNjY2NjcsIAotICAgIDEyNzMwOSwgMCwgMTI2NTIxLCA0MjIwMCwgNDI1NjYsIDAsIDAsIDUwODgsIDY5NDgsIDAsIDg1MjQsIDAsIDAsIDEyMzg1LCAKLSAgICAwLCAwLCA2OTY0NiwgMTM4NiwgNjQ1ODAsIDExNDgwLCA2MTE2LCA2NTAzOSwgNjUwMzgsIDEyMzkyLCA2NTAzNiwgODA2NCwgCi0gICAgMCwgMTIxMDEsIDU4MjIsIDExOTAwNCwgMjA4MCwgNzEwLCA3Nzk5OSwgMTE2NjMsIDE2NjYsIDQyMDkxLCAxMTk2NTcsIAotICAgIDEyMzgzLCA0MzY3MSwgNDIwOTIsIDY4NDE4LCA0Mjg5LCAwLCA2Mzg5NiwgMTIwNjEsIDQyMDk2LCA0MzYyMSwgMzM2MiwgCi0gICAgMTIzNzcsIDk4MzgyMywgOTgzODI1LCA2ODQ0OSwgNzQ2MSwgNzM5MDEsIDEyNDQsIDMzMSwgNzM3ODYsIDEyNjgzLCAKLSAgICAxMDY2MiwgMCwgODExMiwgMCwgNjU4NTIsIDAsIDEyMzc5LCAxOTQ4NzcsIDEyMDgxOCwgNDE5NjQsIDQyMjA4LCA2Mzg0MywgCi0gICAgMjA4NCwgNDE5NjUsIDAsIDY1ODY2LCA0MzI3LCAwLCA2Mzg0MCwgNzg1NDksIDQxMjIwLCAxMzAzMiwgMCwgNTg0LCAKLSAgICAxMjkzMywgNDMxNzcsIDEyMzczLCA2OTg1NSwgMTMwMDAsIDEzNTEsIDI5MzUsIDg2OTgsIDEyNjY1LCAwLCAxOTMwLCAwLCAKLSAgICA3ODIyOSwgMTI0MjcsIDY2NTE0LCA2OTg1OSwgMTMwMzEsIDAsIDYzOTAxLCAwLCAzNjU3LCAxMjg1NzIsIDY1MjAyLCAKLSAgICA2MDAwLCAxMTkyMDYsIDEyNDI2LCAxMjcxODEsIDAsIDQxNzQwLCAxMjQyOCwgNDEyODMsIDQxOTE2LCAxMTkyMTAsIDAsIDAsIAotICAgIDEyNDI5LCA2NzI3LCAwLCA3NTYyLCAwLCA1MTcwLCAwLCA0MTc1NSwgNjc2LCAwLCA2NjcwNCwgNjY2NjQsIDk5NzgsIAotICAgIDY2NDkxLCAzNTM2LCAwLCA5NzUyLCA5MjM5NywgNjE2MiwgMCwgNjkyMjgsIDEwMTEzLCA0MTgyOSwgNjU4ODYsIDUxNTksIAotICAgIDEyNDIyLCA0MTgzMiwgNDM5LCA0MzA3NywgMCwgNDIyMDcsIDc0NTQ5LCAxMTc5NiwgNDA5NzAsIDQxODMwLCAwLCAKLSAgICA5MTc3OTksIDgzMDgsIDkxNzc5NywgOTE3Nzk2LCAwLCA2Nzg2NCwgOTE3ODAxLCA5MTc4MDAsIDEyMzM2LCA0MTM1LCAKLSAgICA2OTgwNSwgMzQxLCAyNzI3LCA0MTI5LCAzNTM5LCAwLCA2Mzg2MSwgMCwgNzkxMywgMCwgNjM4NTksIDQxMzEsIDYzODY4LCAKLSAgICAwLCA2Mzg2NywgNDEzMywgMTEzNzEsIDIxMCwgNDYwMCwgMCwgNzQ1NjAsIDQxMzcsIDgwODIsIDc4NTA2LCAxMTkwNjIsIAotICAgIDc4NTA0LCA2NzA0LCA0NTkxLCAxMjgwMjksIDAsIDAsIDk2ODAsIDAsIDEyMDYyMywgNTYxLCAxMjE1OSwgMTk1LCA3ODUwOCwgCi0gICAgNDE1MDEsIDAsIDQyMDMxLCA1NzE5LCA3MTcyLCA0MjY4NywgODM2OCwgMCwgNDE0OTksIDAsIDAsIDQyMjQyLCA0MTQ5OCwgCi0gICAgOTE3Nzk0LCA0MjAyNSwgNzg1NjUsIDY1ODA1LCA0MjQ2MywgMCwgMjkyNCwgMCwgMTIwNTEwLCAwLCAwLCAxMTkyMTMsIAotICAgIDczOTQxLCAwLCA0MjMzMCwgOTE3Nzg0LCAzOTY5LCAwLCAwLCA3MTY5LCAxOTkyLCA5NjUyLCA3Mzk3NywgNzI0NiwgCi0gICAgNDIwODYsIDEyNjYxNSwgMjIxOSwgMCwgMCwgMTI4ODAxLCAxOTQ4MzcsIDAsIDMyNywgMCwgOTA0MiwgOTE3Nzc3LCAKLSAgICA5MTc3NzYsIDY1MTQ4LCAxMjQzMywgOTE3NzgxLCAxMjcyNzYsIDkxNzc3OSwgMTI0MzEsIDg2NjgsIDEyNDM0LCA5ODM4MjYsIAotICAgIDkxNzc4MiwgNTk5OSwgMCwgNzcxMiwgMTI0MzIsIDEyODI0MywgNDM2NTMsIDE3MjYsIDEwMTUsIDAsIDgyMTIsIDAsIAotICAgIDEyODAxNCwgNDI0MjMsIDExOTA2NiwgMCwgMTI4MTA4LCA2NjcwOSwgMCwgODgxMSwgOTI3LCAwLCAwLCAxMjQzNiwgCi0gICAgOTgzMjM5LCA0MjAyMSwgMCwgMCwgMTI5OSwgMTIyNDAsIDQyMzUwLCA2NTE0MywgMCwgMTk1MDE2LCAwLCA3ODE5NywgCi0gICAgMTEzNDgsIDAsIDc4MDM3LCA5MTk0LCA5ODMxODQsIDAsIDE5OTE0LCAxMjE3OSwgOTgzODAzLCAyMjk2LCAxOTQ5MjMsIAotICAgIDYzODM2LCA2MzgzMiwgOTE3NzczLCAxMDk2NywgNjM4MTYsIDI1OTQsIDM0NDQsIDYzODE3LCA2NDY1MSwgMCwgNDE1MDMsIAotICAgIDEyNzQ3OCwgMTEyNjUsIDAsIDEyMDc1NiwgMTk0OTIyLCAwLCA1NjY0LCAzOTcyLCAwLCAwLCAwLCAxMjg1MDgsIDEyNDE2LCAKLSAgICA5MTc3NjQsIDExOTYwOCwgMTA4MTYsIDkxNzc2OSwgOTE3NzY4LCAxMjQxOCwgNzQxMTEsIDM4ODIsIDg1MzIsIDkxNzc3MSwgCi0gICAgMTU3MywgMTI4NjQ4LCAxMTk4NDcsIDQ1OTYsIDY2MzM5LCAxMjQxNywgNjYwMDEsIDY1MzQzLCAxMjY0OTEsIDEyNDE0LCAKLSAgICA4Mjg3LCA2ODIxOSwgMTk1MDE3LCA2ODEwOCwgMTE0MywgMTE5MTY5LCAxMTk4NDYsIDEyNDE1LCA2NjI2LCA0Mjc2MywgMCwgCi0gICAgMTE4ODg0LCA5MDIxLCAxMjA3ODMsIDAsIDExNzI0LCAwLCAwLCAxMjcxMDQsIDEyNjYxOSwgMCwgMCwgODAyNywgMTA5OTcsIAotICAgIDkxNzEsIDEyNzQxLCAxMTQwMCwgNzEzMDUsIDE5NDc5OSwgMCwgMTI4MjM5LCAwLCAxMjg4ODEsIDExOTYwNCwgMTI3NTIzLCAKLSAgICAxMjAxOTAsIDE5NDc3MywgNjc2MDgsIDEyODIxNCwgNDIzNjgsIDAsIDc3MTUsIDM4ODEsIDQxNDg3LCAxMjExOCwgNDI1MTQsIAotICAgIDY4NjUxLCAwLCA5ODM4ODYsIDMwMDksIDQxNDc2LCA0MTQ4OSwgNjk4MjUsIDMwMDcsIDE0NDgsIDMwMTgsIDE5NDgwOSwgCi0gICAgMzg4OSwgODUyMSwgNTA4MywgNTA4MiwgMTE5ODU5LCAxMjAxODQsIDg1MTksIDk4MzIzNSwgMzAxNCwgNTA4MSwgNjU4NTMsIAotICAgIDEyMDcxNSwgMCwgNjgwMTQsIDY5OTUxLCA1MDc5LCA2NDgwMiwgNDIyMTAsIDQ1OTcsIDY1NTMyLCAxMTgyOCwgMTIwMTg1LCAKLSAgICAxMjM3MSwgMCwgODQwNywgMCwgMTA4MDUsIDg1MTgsIDEwNzc5LCAxMjAxODgsIDcxMzAzLCA5ODM5MjQsIDEyMzY3LCAKLSAgICA0MjE3MCwgMCwgOTI1NTcsIDYyOSwgMTkyNCwgMCwgMTIwMzcsIDc0MzY2LCA1OTg3LCA4NDYyLCA4MDA1LCAxMjM2NSwgCi0gICAgNjM5MzMsIDY5NzM1LCAxMjA4MTUsIDEyMzY5LCAxMDY0OSwgNjc5ODEsIDUwNzcsIDEyMDE3NCwgMTA4ODAsIDYzOTI3LCAKLSAgICA1MDc1LCA5MTc4ODEsIDAsIDY1MDc1LCAwLCAxMTAwNywgOTgzNjk2LCA2NjY1OSwgOTI2MDcsIDAsIDY2Njg0LCAwLCAKLSAgICAzNDM0LCA0OTU0LCAxOTA0LCAwLCA1MjY2LCAxMjY5ODAsIDUyNzIsIDEwNDk5LCA0NTA3LCA5NTc4LCA2MzkyMywgCi0gICAgMTIwMTc3LCA3OTc5LCAwLCA5ODMxLCAwLCAxOTQ5MjYsIDQ2MSwgOTgwMywgMCwgNDUwNCwgMTUwNSwgMCwgNjMyNSwgCi0gICAgNTI3NiwgNDMwMjEsIDEyMDQ4OCwgMCwgNTUyMzYsIDAsIDY2NDYxLCA1MTc3LCA0MTMyNCwgMTIwNTUsIDg3MjIsIDAsIAotICAgIDQxMzI3LCAwLCA2NjY5NSwgNDExNCwgNDA5LCA0MzgzLCA4OTAwLCA4OTQ4LCA0MTMyNSwgMCwgNzIxLCAxMDE4MiwgOTEwOCwgCi0gICAgNzEzMTEsIDAsIDExOTE4NSwgNDIyMjksIDE5NDkxMiwgMCwgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAxMjU4NywgCi0gICAgOTQxMDQsIDc4NTcxLCAwLCA3MTMyOCwgMTk0NTYyLCA0MTU3NiwgNDIyMTUsIDc4NTcwLCAxMTkyMDcsIDAsIDg1NzgsIAotICAgIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCA2Mzk0OSwgNjQ3NjcsIDI2NzAsIDQxNjcsIDE5NDc5NiwgCi0gICAgMTE3MjMsIDAsIDc0MTIwLCAwLCA2NTA3NiwgOTM4LCA0MzQxNCwgNzM4NTQsIDExNzM3LCA5NzIxLCAwLCAwLCAwLCAKLSAgICAxMTc0MiwgMjQxOSwgMCwgMTE0OTMsIDEyMzM0LCAxOTQ5MTMsIDQxNTMsIDEyMzAyLCAxMDc5MywgNTI1MCwgMTI0MDcsIAotICAgIDExOTc4LCA0NDA0LCA5MTg5LCAxMjQwMSwgNDIwMDcsIDU3NzUsIDY3NTksIDY1ODA2LCA0Mzk5NywgMCwgNDIwMDIsIAotICAgIDEyNDA0LCA5ODM1NTMsIDAsIDQ5NDAsIDEyNDEwLCA3NjgzLCAxMTY3LCA3MzcyOSwgNDk4MywgMTIwNTA3LCA4NjEsIDAsIAotICAgIDAsIDAsIDAsIDQzNzU3LCA0MzM3MCwgMCwgMCwgMTE5NTYsIDAsIDAsIDAsIDk2MTYsIDY2MzEsIDAsIDEyODE2LCA0Mzc1OSwgCi0gICAgNDIyMTgsIDEyNzEwLCA2ODY3NCwgMTI3MjEsIDQxMDEsIDY2MTg1LCAwLCA1OTkyLCA3NjE2LCAxOTUwNDQsIDAsIDEyNTc3LCAKLSAgICAwLCA5ODM4NzUsIDg1MywgNDI2OTMsIDE5NTAxNCwgMCwgOTgzNjM4LCA1MDE2LCA0MzUzNSwgNjM4OTMsIDQyODM1LCAKLSAgICA5NDkxLCA5MTc5MTMsIDAsIDkxNzkxNCwgMCwgMTI3MTIsIDcxMDUsIDEyNzgwNywgNjUwNjAsIDEyMDc5NywgOTkwMCwgCi0gICAgNzc1MCwgMCwgMTk0OTE5LCAwLCAxMjc4MzAsIDAsIDY0Nzc4LCAxMjU4NSwgMTA1NjUsIDEyODE1MSwgMTIxNzcsIDAsIDAsIAotICAgIDAsIDc3ODI0LCAwLCA0OTAwLCAxMjc4NzQsIDEyODc4LCA5MjYzMCwgODk4NCwgNDExOSwgNzQ3NjgsIDg5NzEsIDc4NTkzLCAKLSAgICA0MzExMywgOTcwMiwgNzg1OTQsIDExMDI1LCA5MjQ1LCAxMzA0OCwgNDkyNywgNDEzOCwgNzQxODUsIDkyNDgxLCA5MjcxMCwgCi0gICAgMTIzOTcsIDc3ODI3LCAwLCAxMzA1NCwgMTIzOTQsIDAsIDAsIDAsIDEzMDUzLCAwLCAzOTQ4LCAxMDc4MSwgMTU0NiwgMCwgCi0gICAgNTAxMCwgMTY4MCwgMTA1MDcsIDc4NTkwLCA3ODU4MywgMCwgMCwgMCwgMTk0OTE1LCA3MjY3LCAwLCA3NDgzMywgMTI4MTgxLCAKLSAgICA1OTkzLCAyODE5LCAwLCAxMjcwNiwgNzc4NDAsIDE4OTMsIDcyNjYsIDYzOTE1LCA3MjY0LCA3MjY1LCAwLCAxMzYzLCAwLCAKLSAgICA2Mzk5NywgNjM5MTAsIDYzOTk2LCAzMDc3LCAwLCAwLCAxNTEyLCA2OTkyOSwgMTI1ODksIDQxNDc5LCAxMjgzMTMsIDAsIAotICAgIDQzMzM5LCAwLCA5ODM2LCAxMjA3MjcsIDAsIDQxNDgxLCA0MzMzNSwgNzgzMiwgNDIzNDMsIDMwOTAsIDQzMzM3LCA4MTcsIAotICAgIDE2NjQsIDE4NTAsIDEyODg0MSwgMzA3OSwgMTEzNDAsIDQyNDA4LCA0MjQ0NywgMTI3MTQwLCAxMjAwMjAsIDQyMzA3LCAKLSAgICAxMjM4NiwgNDIzMDQsIDkxNzU1NSwgMCwgMTIzODksIDAsIDkyMzY2LCA0MTk5NiwgMTE1MjYsIDYzOTg1LCA1ODY0LCAKLSAgICAxMTQ3LCA2Mzk5MiwgNDI4ODcsIDE5ODcsIDkyNzE4LCA1NDgwLCA3ODU4LCAxMTY1MywgNDExNiwgMTIzOTEsIDY2MTkzLCAKLSAgICAwLCA0OTM5LCAxMjM4NCwgMCwgMCwgNDE2ODYsIDYzOTA1LCAxMTk2MDEsIDE5NDY4OCwgOTgzMTkwLCAwLCAxMjY0OSwgMCwgCi0gICAgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCA0MzY0MywgMTk0Njg5LCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAKLSAgICAxMTk4MTMsIDc3NCwgMTE5ODI5LCAwLCAxMTk4MTUsIDU5OTQsIDEyNTM5LCAwLCA3ODM3NSwgMTIwNTk3LCAxMTk4MzMsIAotICAgIDk4MzEwNSwgMTE5NjAwLCAwLCAwLCA3NzE5LCA2MDI2LCAyNDg2LCAxMjgzMTIsIDExOTgwOCwgMTYyLCAwLCA2NTIxOSwgCi0gICAgNDEwNzMsIDk2ODcsIDQxNjgxLCA2MzA0LCAxMTk4MTIsIDY2MTk2LCAxOTQ4ODEsIDUyNjIsIDAsIDU1MjMzLCAxMjY4MSwgCi0gICAgNDIzNzksIDAsIDc1MzQsIDEyMjE5LCAwLCAxMjc1MjgsIDQyODEwLCAxMDQ5MiwgMCwgOTgzNjUyLCAwLCA0MzExOSwgMCwgCi0gICAgMTIwNzUzLCAxMjQwMywgMjUwMCwgMTk1MDEzLCAwLCA0ODk5LCAxMjcyOSwgMCwgMCwgNzQxMTMsIDIzNDMsIDQxMDMsIAotICAgIDE5OTQ2LCA3NDExMiwgNzc4NTEsIDEzMTEyLCAwLCAxOTUwMTIsIDEyODU5LCA3MDA4NywgMTIwMTQ4LCA2NjM2OSwgNTg2MSwgCi0gICAgMTI3NzU4LCAxMTk5OSwgMTI0MDAsIDAsIDk4MzgzMCwgMTI2NDUsIDUxNDYsIDExMzIwLCA2ODQxMCwgNjc0OCwgNjUwNDAsIAotICAgIDAsIDY0MTg0LCAxMjk3NCwgNjQxODMsIDY3NjEzLCAxMjA2NDUsIDUxNDcsIDAsIDAsIDc0NTI0LCAwLCAxOTI4LCAwLCAKLSAgICA2NzY0OSwgNTk5MSwgMzQ0NSwgNjc2MDksIDQ5NzYsIDY0MTc2LCAwLCA2NzYxMCwgODI0MSwgMCwgNzc4NjgsIDQyMDYsIDAsIAotICAgIDAsIDAsIDEyODI5OCwgMCwgMTAxMzgsIDAsIDAsIDg4OTcsIDEyMDIzNCwgMCwgODM1NywgNDEyNCwgNzc4NjIsIDY1ODM2LCAKLSAgICAxMjA2NDEsIDEyNzkyNiwgNzc4NTksIDAsIDAsIDExMjMsIDk2MywgNDE1NTMsIDEwMTIwLCAxMjQwNSwgMTIwMTUwLCAKLSAgICA5MjY2NCwgMzk4LCAxMzI3OCwgOTcyMywgNjM2NiwgMTIwMzExLCA3OTQ1LCAwLCA0NDAyLCA5OTcwLCAxMjQwMiwgCi0gICAgOTgzMTM2LCA0MjM5MiwgMTMwNSwgMTI0MDgsIDAsIDQ0MDA3LCAwLCAwLCA0MTQ2NCwgMTI0MTEsIDEyOTY5LCAxMjA4MjQsIAotICAgIDQxNDY1LCA5ODM1NjUsIDg1MjgsIDE1NzUsIDAsIDYzOTU1LCAxNjUsIDMwMjQsIDQxNDY3LCAxMTkxNjMsIDAsIDkwOTMsIAotICAgIDAsIDkxNDcsIDEyODc4NywgNjM5NTgsIDAsIDkxNDgsIDk2OTIsIDQwOTYsIDUzLCA3Mzc3NiwgNjc1MCwgMTk1MDE4LCAwLCAKLSAgICA5NTk0LCAwLCAwLCA0MzUyNywgMCwgNzI3LCAxOTQ3MDMsIDE5NTAyMywgNTgwNSwgMCwgNjcyNiwgMCwgNDIxNzYsIAotICAgIDEyMzcwLCAxMTY1NSwgMTE5MDk1LCAxMDU5MSwgMjI4MCwgMCwgMTIzNzIsIDEyMDY0MiwgMTIwMzA3LCAwLCA5MjM0MywgMCwgCi0gICAgMTIzNjYsIDEwOTYzLCA2MDY2LCAxMzI5LCAwLCAzMDUyLCA5MjIwLCAwLCA2NDQ3OCwgMTk0NzAxLCAxMDgwMywgNDEzMiwgCi0gICAgMTIwMzA2LCA2ODQ3NCwgOTI0NzMsIDAsIDk4MzMwNSwgNzQ4MzcsIDEyMDE1NSwgMTQ5OSwgMCwgODA1NSwgNDI3NDAsIAotICAgIDYzOTY1LCAwLCA2Mzk2MiwgNzQwNDIsIDg5MjQsIDQzMTIzLCA1OTg4LCAzNjYwLCA2Mzk2OSwgMTE3ODEsIDQyNzE4LCAKLSAgICA4Nzg4LCAxMzU3LCA2NDg1MSwgNjU3NDMsIDAsIDg3NzQsIDAsIDEyNzA4NiwgOTk0MSwgMTIwMTcyLCAwLCAxOTMzLCAKLSAgICA2OTY1NSwgOTU2NCwgMCwgOTI0MzUsIDczODY2LCAwLCAwLCAyNDg3LCA2NzYxNCwgMzEyMSwgMTgwNCwgMzMxMSwgNjc2MTUsIAotICAgIDcwMDgxLCA3ODMwMiwgMTIyMjAsIDY3NjE2LCAxMjA1OTgsIDEyNzQ3NSwgMCwgNjgyMDAsIDY2NzUsIDEyODE0NCwgMCwgCi0gICAgNjc1OTIsIDEyMDY4NSwgMCwgNjQ3NzEsIDExOTgsIDkxMzIsIDAsIDY0NjE5LCA1MTAsIDY0NjYzLCAwLCAwLCA0NTYxLCAKLSAgICAyMTAxLCAxMzk4LCAwLCA5MjU1NCwgNzQwMzQsIDQxNTY5LCA5MjY4NCwgMTE0MDYsIDgxNjcsIDEyMTI3LCAwLCA4NDAsIDAsIAotICAgIDEyNjUxOCwgNzEwMSwgNjk2NywgMCwgMTk0ODk4LCA5Nzk2LCAwLCAzMzMsIDY5ODkxLCAwLCA4MTQ0LCAyMTE3LCAwLCAKLSAgICA5ODM1OTUsIDEyNDA2LCAwLCAxOTkzMSwgMTE5MDg5LCA2Njc4LCA3NzY5LCAwLCAxMjYyMSwgMCwgMTI3MzY2LCAxMDIyNywgCi0gICAgNDc2NCwgNDMxMDEsIDk5ODEsIDAsIDQwOTg2LCA0MTI3LCA2NjQ4NywgMCwgNDIyMDIsIDEyNzU0LCAxOTUwMjIsIDAsIDAsIAotICAgIDk0MDk3LCA2NzU5NCwgMjA0OCwgMTI5NDQsIDQwNTAsIDY3NTk1LCA5MTc5NjcsIDQzMTAyLCAxMDU4MSwgMTI5ODUsIAotICAgIDQ1MzMsIDE5NTAyMSwgNzQwMDMsIDY0OTAsIDAsIDEyMDM4LCAwLCAwLCAxMjA3MDQsIDY1NDYxLCA5Nzk4LCA2OTcwNCwgMCwgCi0gICAgMTk0OCwgNjk4NDEsIDAsIDk1MiwgMTI4MjM1LCAwLCAwLCAxMjA4MDIsIDY0NDksIDk0OTQsIDEyMDMxMywgMCwgNDMwOTgsIAotICAgIDQ4NDMsIDgxNDIsIDY0MTYwLCA0MDk4LCA2NDE3MCwgMCwgMCwgMzQzNiwgMTE5OTczLCAwLCAxMjgxNywgNjc1OTcsIAotICAgIDY2NzYsIDM5MzAsIDQyNjE1LCAwLCAwLCA2NzU5OCwgMCwgMCwgMCwgNjU1OTEsIDQxNTgxLCA2NTkxNiwgMTQ1MywgMCwgMCwgCi0gICAgMCwgODUwMCwgNDIyMjIsIDEyMDE0MiwgNzM3NDMsIDEyMDQwMCwgNDMxNywgMTE1NDMsIDY3Njc2LCA2NDY3NiwgMCwgMCwgCi0gICAgNjc2MDYsIDExOTA4MywgMCwgNDIyMTcsIDEzMTAyLCAwLCA2NjAwMywgNjY3MiwgMCwgMCwgMCwgOTgzNzM4LCA2Mzg0MSwgCi0gICAgOTYxMywgOTAwMSwgNDUyNiwgMTEyNzQsIDY3NjAxLCA2NDUyMCwgNjQyMTAsIDY2NjQsIDc4NzA0LCA0MjA1NiwgMTAyMjgsIAotICAgIDY0OTU3LCAxMTI4MSwgMCwgMzgwNywgMTQ2OSwgNjY2NDAsIDY1MzgxLCA0MjE5NywgNDk4OCwgNDIzNzIsIDAsIDk1OTgsIAotICAgIDkwNCwgMzUyLCA0MjIyNSwgMTQ1MSwgODA2MSwgODQ1MywgNDEzNCwgMCwgNzQ4NDcsIDY2NTc2LCAxMjc5MTYsIDAsIAotICAgIDEwNTIwLCA4NTc1LCA5OTYwLCAxMjAxLCAxMjcyODksIDEyODQ2LCAxMjcyOTEsIDEyNzI5MiwgMTE5MTksIDY0OTYyLCAKLSAgICAxMjcyODcsIDQzNzM5LCAxMjcyODEsIDg1MTEsIDk0NjAsIDgyMywgMTE1ODcsIDEyMzA1LCAwLCA2NDY5NSwgMTI3MzA1LCAKLSAgICAxMjM4NywgMTI1MywgMTMxODMsIDY1NzY2LCA1MDAsIDQyNzgzLCA2NTc2NSwgNjQyMDgsIDY0MzY5LCA2NTc2MCwgNjU3NjEsIAotICAgIDExOTU4NSwgMTE2MDYsIDY0Nzg0LCAxMTcwMiwgNjY0OTgsIDk4MjEsIDY0MzA0LCAwLCA1MTUyLCAxMTA0OCwgNzUzMywgCi0gICAgNjgzNjYsIDY0NDEwLCA5MjMwNSwgMCwgNDMyMywgMTIwMDYyLCA5MjY2OSwgNzEzMzIsIDEyNzA1MiwgNDI1ODcsIDQyMjE0LCAKLSAgICA0MTM5NCwgMCwgNDc2MywgNDExMiwgMTE4OTM1LCAwLCA1MjYwLCA0MzE0MywgOTQwMzgsIDMyNiwgMTIwMTMxLCA2ODQyMywgCi0gICAgMCwgMTA3NzEsIDI4NzYsIDc0MDc0LCA5MjUzMCwgMTk0OTI0LCA0MTM5OCwgNzM4MiwgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIAotICAgIDQ1MywgNDEzOTYsIDEyMDUyNCwgNDI3MjAsIDEyMTQwLCA5NTcyLCAwLCA3MDAzLCAxOTQ4ODMsIDQyMzM0LCA3NzA0LCAKLSAgICAxMjY0OTAsIDE5NDg4NSwgNDMxNDQsIDQxMjMsIDg0OTQsIDQzMTQ2LCA5OTc3LCAwLCAwLCA2NTc1OSwgMTA3NjUsIAotICAgIDY0MDYxLCA0NDY1LCA5ODA4LCA2NDA1NiwgNjU1ODIsIDQxMjYsIDAsIDk1MjEsIDk1ODksIDY0NzU1LCAwLCA2NDAyMCwgCi0gICAgMTI2NjA0LCAxMDQ2NCwgMCwgMCwgMTk0ODY5LCA2NDUxNCwgMTE1MjgsIDY0MDI0LCAxMjgwNzIsIDY3OSwgNjQwMTMsIDAsIAotICAgIDU4NTAsIDc1OCwgNzUzNiwgMCwgOTIyMzQsIDQxNDQxLCAxMDY5MywgNjQwMDYsIDk4MzU2NywgNjQwMDUsIDQwNTgsIAotICAgIDExOTAxOSwgMTI2NDg3LCA2NDY2MCwgMCwgMTE5MDUwLCAwLCA5ODMwNjksIDExMzksIDQzMjk4LCA2NDAyNywgNjQwMjksIAotICAgIDg5NzAsIDAsIDk5MzQsIDk4MzA5NCwgMTA3NzQsIDEyODAyMCwgNDIyMDEsIDEyNDIxLCAxMjgyMTYsIDAsIDE4NTIsIAotICAgIDMwNTcsIDY0MDQ2LCA3Mzc0NCwgNjQwMzQsIDY0MDM5LCAwLCAwLCAwLCAxOTQ4OTksIDkyMzIyLCA3NjQ1LCAxMjg1NCwgCi0gICAgNzQzMzgsIDM0OTYsIDAsIDAsIDAsIDkxMDIsIDYyNywgMTI3Nzk1LCA2MTU4LCA4MzI3LCA3NDU1MywgNjY2MzIsIDEyNDE5LCAKLSAgICAxMzMwOSwgMTE1NzAsIDEyNzgxMSwgMTk5NjAsIDExNjk2LCAwLCAxMDE4LCAxMTg5NzAsIDE5NDkwOSwgMTk0ODk3LCAKLSAgICAxNjgyLCAxOTQ4OTYsIDE5NDkxMSwgNDI3NTYsIDY3NjUsIDE5NDkwNiwgMCwgMCwgNzM4MTQsIDExNDEyLCA2NzY4LCAKLSAgICAxMDcyOCwgMTk0ODMwLCA3MTMxNiwgMTE4ODYzLCA0MzMxMSwgNjQ5NjYsIDExNTc3LCAwLCA0MzA0MCwgMTgzMywgMTE1NzYsIAotICAgIDAsIDc0Nzc5LCAwLCAxODUsIDY1MDg1LCA3NDUzMywgNjQ3NTQsIDE5NDg0OCwgNzUzNSwgODA4NSwgNDI1MjUsIDEyMDM4NywgCi0gICAgOTc0OSwgNDE3MDEsIDYxMzEsIDE5NDksIDQxMTcsIDc4NDcsIDEyMDQ4OSwgMTk0NzExLCA2NDQ4MywgNjU2OTMsIDAsIDAsIAotICAgIDAsIDY5Njk1LCA0MjI0MCwgMCwgMTI2NjUxLCA0Mjg2NCwgMTI2NDk4LCA2NDY2NywgNDE4NjgsIDExODQsIDAsIDgxNSwgCi0gICAgMTE0ODQsIDEyNzUzNSwgNjc4NDAsIDk4MzY0MiwgMCwgNjYxOTcsIDAsIDEwOTg2LCA2NDY4MywgOTgzNzc2LCAwLCAzNDU1LCAKLSAgICAwLCAwLCA5ODc5LCAwLCAwLCA0MTU4LCAxMjgwNTAsIDY4MTY2LCAwLCAwLCAwLCAwLCA2OTY0NSwgMzMyLCAxMTg4MDgsIDAsIAotICAgIDUxNDIsIDI0MDcsIDY5NjQzLCA0MjE5OSwgMCwgOTI0MDQsIDc0MzczLCAwLCA1NTIxNywgMCwgNjM4NzAsIDQzMTYzLCAwLCAKLSAgICAwLCA5MjM5MCwgNDI4NjcsIDE4MzQsIDAsIDkyNDYxLCA2OTgxNywgMTA5NDAsIDY1MjQ5LCAxMTkwNDAsIDg2NjIsIDAsIDAsIAotICAgIDI2NTIsIDEyMDUyNywgNzE2NCwgMTA3ODQsIDE5NTA5MywgNjc2NzQsIDAsIDkyMjMzLCA5MjQ4MiwgMTk0NzQ5LCA3NDU2MiwgCi0gICAgOTE3NTA1LCAxODI4LCA3NDQ3NCwgMTIwMzI3LCA3ODYyMCwgODUzMSwgMTI0OTksIDYyODAsIDEyMzI0LCAxMTg4NTQsIAotICAgIDY1MjM4LCA2ODM3NCwgNDgzMiwgNjU1NzMsIDAsIDYyNzksIDEyNTA4LCAxMjkwNCwgMTI1MDIsIDkxNjEsIDAsIDE2MjAsIAotICAgIDY0NDM2LCAzNjAxLCAxOTUwOTQsIDEyODA3MywgOTgzNTYyLCA2MDksIDExNTU1LCA5ODMwOTksIDEyNDk2LCAxMjc4MzksIAotICAgIDc0MTgxLCA0MzQzLCAxMjUwNSwgMCwgMTI3ODYzLCAwLCAxMTM3NywgMjM5LCAwLCA2MzcsIDAsIDAsIDQyNjcxLCAwLCAwLCAKLSAgICAwLCA0MzU2NSwgNzEzMDYsIDEyNjQ5MywgMTI2OTYsIDEyODI1NiwgMCwgOTQwNjIsIDEyOTI5LCAwLCA3MTIsIDAsIDQxOTcsIAotICAgIDk4MzIwNCwgNDI4MTgsIDEyNjYzMiwgMCwgMTIwNDkwLCAwLCAxMTkxMzcsIDE1MDYsIDQzNTYyLCAwLCA5MjQ5MSwgMCwgCi0gICAgMTI2NTEsIDAsIDY0NjI4LCA3NDUxNywgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIDQ5MjQsIDY1NTkyLCAKLSAgICAxMTg4NDQsIDAsIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgMTIwMzMsIDQyMTc4LCAKLSAgICAwLCA2OTc2MCwgNDI1NzEsIDkyNjM1LCAwLCAwLCAwLCAwLCAwLCAxMjcxNzYsIDMxNzgsIDAsIDAsIDkyNzA0LCAwLCAKLSAgICA5MDgwLCAxMjcwMDAsIDEyMDM1MiwgMCwgNjgyMDksIDAsIDExMDgyLCAwLCA1Njk5LCAxOTUxMDAsIDY2MDAwLCA5NDg4LCAKLSAgICA2NTE2NiwgMTE5MTEyLCAwLCAwLCAwLCAwLCA3MTMxMywgMCwgNTI2NSwgNjkyMzUsIDAsIDExNDg3LCA2Nzg1OCwgMTI0NjQsIAotICAgIDAsIDQzMDQ1LCAwLCAwLCA0MzM0NSwgMCwgMTA3NzAsIDExODk5NCwgNjgwNywgNDY1LCA5ODI5LCAwLCA3NDM0OCwgMCwgCi0gICAgNDMzNDYsIDgxMTYsIDc5NSwgMCwgMCwgMTI0NjIsIDEwOTMwLCAxMDgzMSwgMCwgMTE4OTUyLCA2NDM2MiwgNzQzMzQsIAotICAgIDk4MzYwMiwgMTIwODExLCAwLCAxMjQ2OCwgODYwNywgMTAwOCwgMCwgMTAwOTIsIDE5NTA3OCwgOTE3ODQyLCA2Nzg1NSwgCi0gICAgNTUyNTcsIDczNzcxLCAxNzY2LCAxMTI4MiwgMTE5OTYsIDE4MjAsIDQ1NDcsIDAsIDAsIDAsIDAsIDEzMjIzLCAxMjg2NjUsIAotICAgIDY0NTk1LCAxMjcyOTQsIDAsIDkyMzExLCA0MzQ1LCAxMjYxNiwgMCwgMCwgMCwgNzQ0NjcsIDAsIDAsIDAsIDUzODIsIDAsIAotICAgIDAsIDAsIDExOTA2MCwgNjQ5NTMsIDU0MDYsIDE5OTIwLCA2OTg5NywgNjY1MTAsIDM1OTAsIDE5NDg2NCwgMTEzMCwgMCwgMCwgCi0gICAgNDIwMTYsIDExODIzLCA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgNzEzMjMsIDkzMjYsIDczODI2LCA1MzEwLCAKLSAgICA3NDgxMiwgNzg1ODQsIDkyMjI5LCA4OTU5LCA0MzU4OSwgNjc0NywgNjY3MjMsIDAsIDg1NjgsIDAsIDEyMDQ5NiwgNzM4MTYsIAotICAgIDEyMDgwMywgOTgzODM5LCA0MjY3MCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAxMjA2MzEsIDAsIDQzMDYzLCA3NDUxOSwgCi0gICAgMTI3MTgyLCAwLCA3MzkxNywgNzg0MywgNjk3ODMsIDExNjg5LCA1NDEwLCA1NzgzLCAxMDQ2OCwgODQwMywgNTQwMCwgCi0gICAgMTE1OTQsIDEyODI0NywgMCwgMTE4OTkwLCAxMDQ5MSwgNjk4NDIsIDY0NDEyLCAwLCAwLCA1NTg3LCA0Mjg2NSwgNjQ0MDQsIAotICAgIDgyNjgsIDQ5MjMsIDY1MDg2LCA4OTgxLCAxMjM4MiwgNDIxMzMsIDEyMDc1NSwgOTcwNiwgNjk3MzgsIDAsIDY2NjEwLCAKLSAgICAxMDQ2MSwgMTIxMDMsIDAsIDg2NDIsIDAsIDQyNzY2LCA5ODM4NTcsIDIyMTAsIDk5ODMsIDAsIDk0MDA5LCAwLCAwLCAwLCAKLSAgICA3Mzk4LCA0MTUxNSwgMCwgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgMTE5MTMzLCAwLCA2NzQ5LCAzNjU4LCA5Mzk2NCwgCi0gICAgMTIwNTI1LCAwLCA3NjE3LCAxOTQ4NDEsIDEyODg4LCAxMjc5ODMsIDY3NjY4LCAxMzE0MywgMCwgOTE5MywgMTEwOTcsIAotICAgIDU3MDMsIDAsIDQxNTE3LCA0MTUwNCwgNDE1MTksIDEwMDE2LCA2NDMwNSwgMCwgNjU4NjQsIDYyMywgNzgxLCA2NzAsIAotICAgIDEwNjYwLCA1NzY5LCA2MTMsIDc1NDMsIDEyMDI3OSwgNDc3LCA0MTA4MywgOTI1MjEsIDAsIDU5MiwgMTU3OCwgMTI0NTksIAotICAgIDQzNDQ5LCAwLCAwLCA4MjI1LCAwLCA2NTQsIDExMzQ1LCA2NTMsIDY1MiwgMCwgNjQ3LCAwLCA2MzMsIDEyMDc0NCwgMCwgCi0gICAgMTI2NDcyLCAxMjQ4MCwgNDMyNDMsIDAsIDM5LCAxMjQ4NywgMCwgMTIwNTI5LCA3NDE5OSwgMTI0ODIsIDAsIDEyNDg5LCAwLCAKLSAgICAzMTk1LCA1NTUwLCA5ODM1NTQsIDc4OTcsIDAsIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCAwLCAKLSAgICAyODc3LCAwLCAwLCAxNjc1LCA2OTg0MCwgMCwgMCwgMCwgMTAwNzAsIDEwNTk1LCAwLCAxMTkwNzcsIDE5NDc3NywgCi0gICAgOTgzNjExLCAwLCAwLCAwLCA0MzI0NCwgMCwgMCwgOTgzOTA3LCAxMTk1NjEsIDk4MzA3OCwgMCwgMTk0OTIxLCAxMjgxNjAsIAotICAgIDk5MzksIDAsIDk4MzE1MSwgNzc4NjAsIDAsIDAsIDI3MCwgMCwgMTA3MTQsIDAsIDAsIDAsIDAsIDAsIDY1MzcyLCAwLCAKLSAgICA3NDAzOCwgMTE5NTU4LCA2MjczLCA2NjY3OSwgMzY0LCA5NTk1LCAxOTQ5MDgsIDAsIDAsIDcwNywgMCwgMCwgOTI4MiwgCi0gICAgNjY0ODksIDIyNCwgMCwgNjg2NzAsIDkzMzIsIDQ5NjYsIDY4Njc3LCAwLCA2ODY0NCwgMCwgMzg0MSwgNjg2MzQsIDAsIAotICAgIDEwNzMyLCA2ODY0MCwgODUwLCA0OTcyLCAwLCAxMjg5MCwgMjkwOSwgNjg2MTksIDQ0MDA4LCA2ODYyNywgOTgzNzA5LCAKLSAgICAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDAsIDExOTYyLCAxOTQ2OTQsIDEyNTA3LCAxMTk2LCAxMjg2ODcsIDEyODMxMSwgCi0gICAgNzc3LCAxMjAxODcsIDQzNzUsIDY1MjcxLCA2NzY3OCwgMCwgMTIxOTgsIDAsIDY0ODI0LCAxMTkzNDMsIDk4MzIzMCwgCi0gICAgOTQ1NCwgNjM3NzgsIDg2NTgsIDQyNTI4LCA3ODAwMCwgMjcwNSwgOTE3OTc1LCA0MTUyMCwgMCwgMCwgMTE5ODYsIDc3NjUsIAotICAgIDQyNTAyLCA4MjgwLCA3NDUyMCwgMjcwMSwgMCwgMTI3MDAyLCA1NzY3LCAwLCAwLCA5ODA5LCA4MzUzLCA2Mzc0NywgCi0gICAgNjY3MDEsIDYzNzcyLCA5ODM4MDUsIDYzNzQ1LCAxNzQ4LCA2Mzc3MCwgMCwgMCwgMCwgNjU1NDIsIDYzNzY2LCA1NTI0NCwgCi0gICAgMzA2MSwgMCwgNjM3NjQsIDYzNzg3LCA5MDY3LCA2MDk2LCAwLCA3Njk0LCAwLCA3MjU3LCA2Mzc2OCwgMzQ4NSwgMTI5ODcsIAotICAgIDAsIDEyNzUyMiwgMTIwNjI4LCA2MzgwNywgMTU5MSwgMCwgNjM4NiwgNjM3ODMsIDAsIDAsIDkyNTM1LCAwLCAwLCAwLCAKLSAgICA3NDU3NSwgMCwgNjU3MTksIDEzMDgzLCA2NDU3NCwgNjUwMTIsIDAsIDE2NDAsIDEyNDk1LCA2NjY5MSwgNzYyNCwgMzEzOCwgCi0gICAgMTA5OTYsIDkyMjQ3LCAxOTIyLCAwLCAxMjQ5OCwgMTA5ODcsIDY5OTM2LCA2OTkzOSwgMzg5NCwgNjU1NDMsIDAsIAotICAgIDE5NDg0MiwgOTgzNTg4LCA0OTMsIDAsIDQzMTk3LCAxNzE3LCA0MjI4LCA0NzksIDEwMzAzLCA3NDAyMCwgMCwgOTE3OTM1LCAKLSAgICAxMDMzNSwgMzUyMCwgOTE3OTMyLCAxMjQ5MCwgNjQzMTUsIDAsIDEyNzAzOSwgMTI0OTMsIDYyMzMsIDQyNjgxLCAxMDAyLCAKLSAgICAxMjQ5MSwgMCwgNjQ5MTEsIDkyNjE1LCAyMDk2LCA2NTEyMCwgMCwgNzgyMTksIDk4MzA4MSwgMTE2MTEsIDExNjMyLCAKLSAgICAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgNjYyMjEsIDY2MjI2LCA2NjIyOSwgMTMyMTgsIDY2MjMxLCA2NjIxNiwgODUwNywgCi0gICAgNjYyMzYsIDY2MjExLCA2NjIxOCwgOTI2NzIsIDY2MjQwLCA3ODA0MSwgNjYyMzMsIDg5MjgsIDk4MzU1MiwgNzkwOSwgCi0gICAgNjYyMzQsIDExNjA1LCA2Mzc1OSwgOTgzNjQ1LCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgCi0gICAgMTI4OTgsIDEyNDk0LCA3Mzc2MSwgMTI0OTIsIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMTI4Mjc4LCAxMjA2ODAsIDQ4ODIsIAotICAgIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIAotICAgIDYzNzk3LCA5MjM5NCwgNDIzNTgsIDAsIDcyOTIsIDAsIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCAKLSAgICA0NzAsIDc4MDM4LCA3ODAzNSwgNzgwMzYsIDcwMDI4LCA3ODAzNCwgNDU3OSwgMTI4MDkwLCAwLCAxMjUxMSwgNzQ0NTMsIAotICAgIDEyNTE0LCAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgODYyMywgOTQwMTEsIDEyODA1MiwgMTI4MDQ4LCA3Mzc4LCAxMjUxMiwgCi0gICAgMTE2MTUsIDYxMDQsIDAsIDAsIDY1OSwgNjA5OCwgMCwgMTIyMzQsIDEyNzMwNywgMTI3MDY3LCA4MzExLCAxMjUxMCwgCi0gICAgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDk4MzkxMSwgMCwgMCwgMjMyMywgCi0gICAgMCwgMjMxOSwgNzc5MTcsIDEyNDc3LCA3NzkxNiwgMjMxMSwgMCwgNDQxNSwgMjM3LCA2MjgxLCAxMjcyODAsIDAsIDAsIAotICAgIDIzMDksIDEzMTIsIDgxNzMsIDEyODg3MSwgMTI0NjksIDAsIDc4NTA1LCA2NDMzNSwgMTA2MDksIDAsIDEyODExMSwgOTM5NywgCi0gICAgMTE1MjQsIDkzOTUsIDkzOTYsIDkzOTMsIDkzOTQsIDkzOTEsIDkzOTIsIDkzODksIDYyMDksIDkzODcsIDkzODgsIDQ5MzIsIAotICAgIDkzODYsIDkzODMsIDkzODQsIDY3NDAsIDAsIDY1NDUxLCA4MTg1LCAwLCA5MTc4MzIsIDQzMDI0LCA0MzMzNiwgNjc2NTksIAotICAgIDIzMTMsIDEyODE2NywgNzk0OCwgOTIzNiwgOTI1NzEsIDAsIDAsIDEwNTcwLCA0MzQ3MywgNjI4OSwgMTA0ODQsIDAsIDAsIAotICAgIDExOTk4LCAxMjA4MiwgMTA5MjQsIDMxNDcsIDAsIDEyMDY4NCwgMTI1MjQsIDExOTA4MSwgMjMxMCwgMTE4MTgsIDkzODEsIAotICAgIDkzODIsIDkzNzksIDkzODAsIDkzNzcsIDkzNzgsIDkzNzUsIDkzNzYsIDE2ODMsIDkzNzQsIDk4Mzc2OSwgOTM3MiwgCi0gICAgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCA5ODM5NDksIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgCi0gICAgODc0NCwgNzI2LCAwLCA5ODM4MjgsIDQxNTUsIDAsIDAsIDQyMDMwLCA1MDA3LCAxMjUyMiwgNDMwODgsIDAsIDQ5NTEsIAotICAgIDEyNzgwNSwgMTI3MjQwLCAwLCA5OTIyLCA0MzMwOSwgOTgzODMyLCAxMjUyNSwgOTgzNDYzLCAxMjAxNiwgNjU3NzAsIAotICAgIDk1NDgsIDY3NjY1LCA0MDMsIDc4MjMwLCAxMjUwMywgMCwgMCwgMTEwMzAsIDAsIDkyNTY3LCA2NTY5MSwgNjM5OTgsIAotICAgIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDE5NDY2OCwgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgCi0gICAgNDQwMjMsIDEyNTA5LCA2NDM5MywgNzg4MzAsIDMzODksIDEwNTg5LCA2NjA4LCA0MTA0NywgMTIwMzIxLCA3ODM5NSwgCi0gICAgNzgzOTQsIDc0MDY5LCA3Nzk5NSwgNzgzOTEsIDM2MDgsIDgyODEsIDEyMDMyMCwgMTEwNywgMCwgOTA3NiwgODg2MiwgCi0gICAgNjk3NDMsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAxMzIyMiwgNzQxNjUsIDc0NzgyLCAxMjY1MTQsIAotICAgIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIDk4MzkzOCwgNDk4LCA2NDQ3MSwgMTIwMzI0LCAKLSAgICAxMjg1NjcsIDEyNTI5LCA4MDQyLCAwLCAyMzQ0LCAxMjUyOCwgODAzMSwgMjQxNCwgMCwgNjk3MTksIDMyMzEsIDAsIDY0MjIsIAotICAgIDY2NTEyLCA2OTY1MywgMTI1MzAsIDI1MzcsIDc4NDA1LCA0MTQyOSwgMTI2NTgsIDEzMDM2LCA2NTc3MiwgMCwgNzg3MzgsIAotICAgIDQxNDMzLCA0NzE5LCA0NjksIDAsIDQzNjMsIDMzMTMsIDQxNDI4LCA3ODQwNywgMjAyMywgMTc3MiwgNzgyMjQsIDc4MjI1LCAKLSAgICA2NTcwNiwgMTAwNTEsIDY0ODEyLCA3ODIyMCwgMCwgOTkyMCwgMTIyMTUsIDAsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIAotICAgIDk2MDcsIDAsIDk2NjMsIDAsIDExOTYzNCwgNjUwMywgNDExMTAsIDAsIDE0OTEsIDAsIDAsIDEyNzMwNCwgNDEwNjEsIDAsIAotICAgIDE5NDgzOCwgMTI3MTg3LCA2NTAyNiwgNDE5OTMsIDQxNTA5LCAxMTA0NSwgNjUwMjgsIDc4NjAyLCA2NjQ3NiwgNDExMDgsIAotICAgIDk3MzgsIDQxOTk1LCAxMDc1LCAxOTU4LCAxMjUzNSwgNDE5OTIsIDQxNTA2LCAwLCA0MTY4NywgMCwgMTIwNzE3LCAKLSAgICAxMjc3NzYsIDk5NDAsIDEyNzI5OSwgNzY5MiwgOTgzODI0LCA4MDA4LCA0MTEzMSwgMzMwLCA4NTY2LCA2NTA4MywgNDExMzMsIAotICAgIDk4MTYsIDEyNjUxNywgMTI1MzIsIDc4NTUwLCA3ODU0NiwgMzUwOCwgMTI3MDU4LCA0MzIzNSwgMCwgMTI3Mjk4LCA2NDEzOSwgCi0gICAgNzgyMzEsIDY0MTEsIDEyOTEwLCA3ODU1NCwgNjY2NDQsIDEzMDI4LCA2NzM3LCAxMjUzNywgMCwgMCwgNjQxMzYsIDEyNTM2LCAKLSAgICAyMzUwLCAxMzAyOSwgNzgyMzMsIDAsIDk4MzEwMywgMTMwMzAsIDY3MDIsIDQ1MjcsIDAsIDEyNTM4LCAxMjg4MTAsIAotICAgIDk4MzYzNiwgNjU1OTksIDY1NzE3LCA5OTY2LCAwLCA0OTQ4LCAxMjQ4NCwgNDAzMiwgMTI4MTQ5LCAxMjYyMywgMCwgNjIwNywgCi0gICAgMCwgNjExNywgNjU5MzAsIDg0MTIsIDAsIDc0MzgsIDEyOTYsIDIzMjUsIDQxNTExLCAxMjY2MjUsIDEwMTQ5LCA3NDExOCwgCi0gICAgMCwgMTI3Mjg2LCAxMjQ4MSwgMCwgMTI0ODgsIDY2NzEzLCAwLCA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgNDI2MTksIAotICAgIDczNzY2LCAwLCA2Mjk1LCA5MDEsIDQxNTEwLCA3OTUzLCAwLCA2NTAzMiwgNDE1MTMsIDk4MzE2NiwgMTE5MjcsIDY2NTg0LCAKLSAgICA3ODU1OSwgNzg1NjAsIDc4NTU3LCA3ODU1OCwgMCwgNzg1NTYsIDg0OCwgOTg2OCwgMCwgNjQyNCwgNzg1NjgsIDExOTMzOCwgCi0gICAgNjk5MjIsIDc0MDMxLCA3ODU2MywgNzg1NjQsIDIzNTIsIDc4NTcyLCA4OTMsIDY0NTc2LCAxMTI4OSwgMTQwNywgNjc5NzMsIAotICAgIDAsIDEzMDI2LCA2NzYyLCA3ODU3OSwgNzg1ODAsIDEzMDIzLCA4OTAzLCA5Nzc3LCA2NjcxNSwgMTg3MSwgODA5OSwgMCwgMCwgCi0gICAgMTM0MywgOTgzODE0LCAwLCA5MzI1LCA2ODE4LCA2MjgzLCAxMTczOCwgMCwgOTgzOTI1LCAwLCAxMTc0MSwgMCwgMCwgCi0gICAgOTIxNiwgODI2MywgMTEyNzksIDE5NDc1MiwgOTgzODE2LCAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAKLSAgICAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDQyNzM3LCA5OTU2LCAwLCAwLCA3NDU1MiwgMTAwMTQsIDAsIDQxMjYwLCAxMTkzNDAsIAotICAgIDEzMDIwLCAxMDAyNCwgMTk0NzY0LCA3NDU4MywgNzQzNDAsIDY5NjgxLCAwLCA0MzAwMSwgODAyOSwgMCwgMCwgOTgzNzcxLCAKLSAgICAzMzM1LCAwLCAwLCA5Nzc2LCAxMjA1MjYsIDE5NDc0OCwgNTIxNSwgNDI2NDQsIDMzMzMsIDE2MzIsIDE5NDc1MSwgNjQ4NDksIAotICAgIDMzNDIsIDc4NTgyLCA1MzYzLCAxMjk1NywgNzg1ODEsIDQxNTYsIDAsIDAsIDY0MjEsIDc4NTkxLCAxNjExLCA3ODU4OSwgCi0gICAgMTMwMTgsIDc0MjU3LCA3ODU4OCwgNzQ1NDIsIDMzMzcsIDQ1MzcsIDY3ODk1LCAxMTczNiwgMCwgNjg2MDgsIDY0ODIsIAotICAgIDQyMTQsIDczNzkwLCAxMTk0NSwgMCwgMTMwNDYsIDg4MzgsIDQyNSwgNDAyNSwgMTA3MDksIDc4NTk1LCAyMTA4LCAyMzkyLCAKLSAgICAxMzA0NywgMCwgMCwgNjgxOSwgMTMwNDksIDY0OTksIDkyMjQzLCAxMjQyNCwgNjg2MTQsIDczOTQ0LCAxMzA1MCwgOTkyNCwgCi0gICAgMTk0NzQ1LCA2NTA3LCAxMjc5MTksIDk0MDczLCAxMjgwNjksIDMyNzcsIDg5MjksIDQ5NDcsIDQxMDU1LCAwLCAxOTQ3MjIsIAotICAgIDE5NDcyMSwgMTk0NzI0LCAxMzA0NSwgNjQ2MjYsIDY2MDM0LCA3NzUxLCAxOTQ3MjcsIDgzNzEsIDE5NDcyOSwgMzk5NywgCi0gICAgMTI4MDYsIDg3NjgsIDEzMDQ0LCAwLCAxMjQyMCwgNDAyNCwgMTk0NzMwLCA0MTA1NCwgMTA3OCwgOTc1NywgNjk3MzYsIAotICAgIDQxMDU3LCAwLCAwLCAwLCAwLCA5ODM3ODIsIDkyMjEwLCA5MjQxMSwgMCwgNDE0OTYsIDAsIDkxNjUsIDE1NzIsIDExOTExLCAKLSAgICAwLCAxMTg4NDIsIDIzNDYsIDEzMjcwLCA4OTU4LCAwLCA5NjQ2LCAzNzczLCA0MzE4MywgNjQwMSwgNTgzMSwgMCwgMCwgCi0gICAgMTMwNDMsIDgwNTYsIDkyNDk0LCA2NTY4MSwgMjA4LCAxMjczODIsIDQxNTE0LCAwLCAwLCAwLCAxMDY5OSwgNjQwOCwgCi0gICAgOTIyMjcsIDc4MjUsIDU2NjEsIDAsIDEyMDYzMCwgMzYwMywgNDExMDksIDIzOTgsIDM1NDgsIDEyNjU5NiwgMCwgMTE5OTMzLCAKLSAgICAwLCAzMTE1LCA5OTE4LCAwLCAxMTMyMSwgNDI5MTIsIDAsIDAsIDE5NDcyNiwgNDg3NiwgNjU4MDQsIDAsIDAsIDQzNDY4LCAKLSAgICA5ODMyNjYsIDQxNTU4LCA0MTQ3MSwgNzM5NTAsIDgxNTgsIDk5NDQsIDQxNDcyLCAxMjAyOTgsIDEzMDUxLCA3ODY4OSwgCi0gICAgMzE0MywgMTk0Njc0LCA2NzAxLCA0MTU1OSwgMTg5NiwgNjYyNTYsIDEzMDUyLCAxOTQ2ODAsIDU2NjUsIDAsIDExOTA3MSwgCi0gICAgNzAyNSwgNjM5NzQsIDAsIDc0MzUyLCA3NDE2MSwgNDE1NCwgOTg2MywgNDM1NTAsIDEyMzEwLCA1NjYyLCA0MjM4MiwgCi0gICAgMTk0Njg2LCA3MzkyNCwgMTEyMSwgNzgzMTksIDYzOTU5LCAwLCA5OTQyLCAxMzIzMSwgMCwgNjQ3NTIsIDQ3MzIsIAotICAgIDE5NDY2NiwgMTE1OTYsIDExOTkzMSwgNjUxODcsIDE2MjYsIDYzOTgzLCAxMDExMCwgNjQ3NzIsIDQyMDI0LCA2NDIwLCAKLSAgICA0MjAyOCwgMCwgMTA1MDksIDI3OTUsIDQ5MTAsIDE5NDcyOCwgNjkyMzEsIDY0NzUzLCA2Mjc1LCA5Mzk1NywgMTE4ODMwLCAKLSAgICA2Mzk3OCwgMTEwNDQsIDMyMjksIDY0MjMsIDQyNzc0LCAwLCAwLCAwLCAxMjgyMywgMjMzMSwgOTE3ODEwLCA3MDg1LCAKLSAgICA2MTM3LCAwLCA3NTI0LCAwLCA5MTc4MDksIDgzNDYsIDAsIDgzMzgsIDEyODMxNSwgNjUwNDMsIDAsIDgyMiwgMTI3OTg0LCAKLSAgICA5OTAzLCA2NDcyMSwgNDI3MjIsIDY5ODc3LCAxOTQ2NTksIDc4NjU1LCA3ODY2MSwgMTk0NjYwLCA3ODY2MiwgNDEyNjUsIAotICAgIDUzMTEsIDE3OTUsIDk2NSwgMTE4NzkxLCAxMDU4NywgNzgwNTUsIDExMjc4LCA3ODYzMiwgMTk0NjQwLCAwLCAxMjk0NiwgCi0gICAgMTk0NjQxLCAxMTkzNDEsIDEyMDM0OSwgNjI5NCwgMzE0NCwgMTk0NjQ4LCAxOTQ2NDcsIDY1MDE5LCAxOTQ2NDksIDczOTkwLCAKLSAgICAwLCA5ODM5NTEsIDc0OCwgNDEwNjcsIDIzMzAsIDUzNSwgMzE0OCwgMTIzNzUsIDc4Nzk5LCAxOTQ2MjksIDEwNTU2LCAKLSAgICAyNDc1LCAxMjM4OCwgNDg4OSwgODk2OCwgNjc4NjMsIDM1OTMsIDAsIDAsIDIzNDIsIDAsIDE5NDYzNCwgNjUyMDYsIDQ4OTQsIAotICAgIDE5NDYzNSwgNDg5MCwgMTk0NjM3LCA5MTc4MDQsIDU4MSwgNDg5MywgOTgzNjE2LCA2NTcxLCA2NTU0NSwgNDg4OCwgNDE1NywgCi0gICAgNzgwNDgsIDc4MDQ5LCA3ODA0NiwgNzgwNDcsIDAsIDEwMTE5LCA2NDE1LCA0Mjg5MywgMCwgNjk3MDIsIDAsIDAsIDExMzc1LCAKLSAgICA2NDc0NiwgMjMzMiwgNzgwNjMsIDQxMiwgNzgwNjEsIDY0OTMyLCA0Mjg4MCwgNDM1ODcsIDAsIDAsIDAsIDAsIDY1MTk3LCAKLSAgICA3ODA2NiwgMTIyMDMsIDc4MDY0LCA3ODA2NSwgODkxMywgNjU4NTQsIDQ4NzUsIDY1ODExLCAxMjAzODEsIDEyMDM4OSwgCi0gICAgMTE4ODg4LCA5MzQ0LCA4ODI2LCAxMjAzODYsIDEyMDM5NSwgMTMxMDQsIDc0NzgxLCAxMTk5NywgMTIwMzkzLCA3ODA3NSwgCi0gICAgMCwgMzEzNCwgMCwgNjU2OTYsIDkyMzMxLCAwLCA2NjIxNywgMCwgODMzNCwgMTE5MzQ0LCAwLCAzNDQ5LCAwLCAwLCAKLSAgICA3ODQxNCwgNzg0MTMsIDExODk1MCwgNzQwMTEsIDAsIDAsIDAsIDAsIDE5MDgsIDEyMDE2NywgNDMyOCwgMTA3MzQsIAotICAgIDEyNzAxNCwgMCwgMTI3OTE0LCA3ODA0LCA3ODI3MiwgMTA4MTEsIDYyNTAsIDExMzM5LCA0OTE0LCAxMTM2NywgMCwgCi0gICAgNzgwNTQsIDQ5MTcsIDc0NTE2LCA3NDIwOCwgNjQyODUsIDQ5MTIsIDU0NjQsIDEyNzgzNiwgMTE4ODkzLCAyMzYxLCA3OTcxLCAKLSAgICA3ODA3MiwgNzgwNzMsIDU1MjQzLCA3ODA3MSwgMCwgODA4NiwgNzQzMTcsIDY3MDcsIDgzMTksIDIzMTIsIDQwOTc3LCAKLSAgICAxMDk2MCwgNDA5NjIsIDgzMDUsIDEyNTczLCA5ODM2MDgsIDQwOTgwLCA5ODM5NTUsIDEzMjAyLCAwLCAxMjU4MiwgNzgyODIsIAotICAgIDk4MzA0OCwgNjk4NTYsIDQyNDM4LCA1NTIyMSwgNjI4OCwgNzgyODAsIDEyNzk0NiwgNTY1MywgNDI0MDAsIDEwODkxLCAKLSAgICA3Njk4LCA1NjU4LCA3NDA0NSwgNzAwMzksIDAsIDAsIDQ5MTMsIDAsIDk4Mzk1MCwgNzEzMzMsIDQyMzI2LCAxMjgxOTQsIAotICAgIDEyNzI4LCA5MjY4NSwgNDI0NzgsIDIzMjcsIDAsIDEyNTYzLCA0MjI4NywgMTI3MDUsIDAsIDAsIDEyNTg4LCA4ODIxLCAKLSAgICA2MTUzLCAyODY3LCAxOTQ3MDgsIDY2MzEyLCA2OTgsIDEyODAwNywgMTk0NjA2LCAxMDM1NiwgNzAwMTcsIDE5NDcxMywgCi0gICAgNjUxLCAxMjY0MSwgMCwgMCwgMCwgMCwgNDE1NTIsIDY1MTE1LCA3ODQ2NSwgNzg0NjcsIDc4NDYzLCA3ODQ2NCwgMTI4ODUxLCAKLSAgICA3ODQ2MSwgMTk0Njk3LCA3NDM1NiwgNjQ5NDUsIDQ3MTYsIDQzMjc3LCAwLCA3ODQ3NCwgMTIzNDAsIDEyMDU2OCwgMCwgCi0gICAgMTk0NzAwLCA1NTI2NCwgNDEyMTEsIDEyMDY3NiwgODcwMywgNTQ2MiwgOTE3NjI5LCA5ODM0ODcsIDEwMTAxLCAwLCAKLSAgICA3MDA0OSwgODQ3OSwgNDE1MSwgNDE5MzMsIDAsIDAsIDY2MjU0LCAxMjA4MjEsIDAsIDAsIDEyODY1NCwgMCwgMTE5MTk0LCAKLSAgICA3NDA1MCwgOTI3MDEsIDAsIDAsIDAsIDAsIDAsIDEyMjc4LCAwLCAwLCAwLCAyNzAwLCAxMjU3NiwgNzg0MiwgMTI4OTksIDAsIAotICAgIDAsIDI2OTksIDAsIDczODQ1LCAyOTg1LCA5MjU2OCwgMTI2NDc1LCA5MTc4NDUsIDEyMTkyLCAxMTkzMTQsIDAsIDExOTMxMiwgCi0gICAgOTgyNywgMTE5MzEwLCAxMTkzMTEsIDExOTMwOCwgMTE5MzA5LCAxMTkzMDYsIDExNDgxLCA0MTIxMCwgMTE5MzA1LCAwLCAKLSAgICAzNSwgNzg0ODEsIDc4NDgyLCA2NjY5NCwgNjg0NzksIDc4NDc3LCA3ODQ3OCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAKLSAgICAxMDUzNCwgMCwgNzg0ODUsIDczODQ4LCA2Nzk3NSwgNDI3MiwgMCwgNDA5NjcsIDQwOTY0LCA5MTc4MjUsIDEyNzA0LCAKLSAgICA3ODQ4NywgNDMzMDYsIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgMjI5MiwgNjgyMTYsIDAsIDkxNzgyNiwgNTI0NCwgCi0gICAgNDE4OSwgOTQxMDgsIDY3NTk2LCAxMjc1MDQsIDQxODgsIDE4NzksIDAsIDk2OCwgMCwgNDM3NDMsIDAsIDg4NzMsIDIyNzksIAotICAgIDAsIDkxNzgyNywgNjU1NTUsIDEyNTc0LCAwLCAwLCAwLCA3NDQ5MCwgMTI3MDk5LCA0MzY1NywgMCwgMCwgMCwgNDI2ODIsIAotICAgIDEyNTc4LCAxMjcyMCwgMCwgNDEyMjcsIDAsIDEyMzQ2LCAxMjcxMDEsIDY0ODQ4LCAwLCAwLCA3MjUxLCAwLCAwLCAKLSAgICAxMTg4NTAsIDExOTE0MSwgMTI4NTQ2LCA2NjAxNSwgMCwgOTU5LCA4ODg1LCAxMjU2NCwgNjY0NTcsIDc4ODA4LCA5NDY5LCAKLSAgICA5NjMyLCA5MjMyMywgNzQ3NjEsIDY0MzIzLCAxMjczMzUsIDAsIDAsIDAsIDMxMCwgMCwgNDEyODEsIDEwOTc2LCAwLCAKLSAgICA3MTMyNSwgMCwgNzQyNjYsIDEwMDU0LCA2NDk3LCA4NTc0LCAwLCA5MDEyLCAxOTk1OCwgNzQ0MjAsIDY1MDg5LCAxMzIxNSwgCi0gICAgMTI3MzAsIDY1MTYzLCA3NDA0NCwgMzc0LCA0MzE5NSwgODE2LCAxMjAxNjEsIDAsIDAsIDQxOTM0LCA3NDY1LCAwLCAKLSAgICAxMjgxNjgsIDk4MzI2MCwgNDcxNSwgNjEwMSwgOTQxMDYsIDQxOTM2LCAwLCA0ODc5LCAwLCA2NTQ0NiwgMCwgMzA3LCAKLSAgICAxMjcxNDcsIDk1ODUsIDUzNzQsIDk4MzI1OSwgMTI4MDU5LCAwLCAwLCAxMjY2MTgsIDEyMDM5MCwgMCwgNjU1NjcsIAotICAgIDEyMDYxNCwgMTkyOSwgMCwgMTIxNDIsIDAsIDEyMjM2LCA0MTQxOSwgMTk0NjE4LCAxMjA2MTAsIDEyOTgyLCAxOTQ2MjMsIAotICAgIDUzNzgsIDc4NzkxLCAxMjg2NzksIDQxNDIxLCAwLCA0NDYyLCAwLCAxMjY1OTksIDEyODA5MiwgODIxLCAwLCAyNDk4LCAKLSAgICA1ODAwLCAxMjAxNTcsIDk4MzExNSwgMTc2MCwgMjQyMSwgNDQ2OSwgMjMyNCwgODI4LCAzNjExLCA3ODQwMCwgNzU3LCAKLSAgICAxMTg1LCAwLCA3ODc3MCwgNDM1OTcsIDEwNjI4LCA3NDgwOCwgMTk0NTcyLCA3OTk5LCA0Mzk3MSwgMCwgMCwgMTA2MzQsIAotICAgIDEwOTQyLCA3NzEzLCAyMzQ4LCAwLCA2NDM3NCwgNDM4MCwgMTk0NjA4LCAxMTkwNDQsIDk5ODIsIDY0MzI0LCA0MTI0MCwgCi0gICAgODYyLCA2NTYyNiwgNzg0NjIsIDE4MTAsIDM2NzMsIDUxMzcsIDE5NDYxNywgMCwgNzI3NywgNjU2MjIsIDAsIDc1NjYsIAotICAgIDY0Njg4LCAxOTQ1OTMsIDE5NDU5MiwgNzgwOTIsIDc0MzU3LCAxOTQ1OTcsIDQ3NDgsIDkyMjI4LCAxOTQ1OTgsIDE5NDYwMSwgCi0gICAgNDIyNjAsIDU4NzEsIDExOTA3NSwgMCwgNzQ1NzYsIDQ0MDE5LCAwLCAxMjgxODksIDM5NjcsIDE5NDYwNCwgMTMxMzcsIAotICAgIDg3NzUsIDEyNzk0NSwgMCwgMjk2MywgMCwgODQxMCwgNDQ1NCwgNzIzLCAxMjc4ODIsIDk2NiwgNDQ0OSwgOTIzMzAsIAotICAgIDkyMjM4LCAwLCA3ODE5LCAyMzIwLCAxOTQ1ODksIDMzOSwgNDk2OCwgMTk0NTkwLCAxMjAzOTksIDgwNzUsIDU1Mjc2LCAwLCAKLSAgICA4MDQ3LCAwLCA3ODgyNywgMTI2MzQsIDQxNTQyLCA3ODc4MCwgNzQ2NiwgNjcwNSwgMTIxNzQsIDQyNjEwLCAwLCA3NDQ1MiwgCi0gICAgOTgzNzU0LCAxNTg0LCA2NjY0NSwgNjA0NSwgNjcyOSwgMTIwNjQwLCA2NTIxOCwgMTE1NTksIDAsIDc4MDYyLCA3NTM3LCAwLCAKLSAgICAxMTM3MCwgMCwgMTAzMzAsIDAsIDEwMzk0LCAwLCA3NDE5NCwgMCwgMTI3OTI5LCA5NzgwLCAwLCAxMzA5MiwgMTk0NTc2LCAKLSAgICA3Nzk1MCwgMTk0NTc4LCA3MDc0LCA5MjY0OCwgMTk0NTc5LCAxOTQ1ODIsIDExNDE0LCAxMjg4NjgsIDI1MzEsIDEzMDM0LCAKLSAgICAwLCAwLCA0MjExLCAxMjU5LCA3NTE3LCAwLCAwLCAxOTQ1NjEsIDQwOTk2LCAxMzAzNywgNzA5MiwgNjQxLCA1MjE5LCAKLSAgICA5NDAzNCwgMTk0NTY2LCAxMTA2NCwgNDExMjksIDAsIDQyODUwLCAxMzAzNSwgOTA3NSwgOTIzODcsIDU0NjYsIDEyODE1MywgCi0gICAgMCwgNjQwOTgsIDY1NzkzLCA0NTM1LCAxOTQ1NzMsIDQyNzEsIDc4NDE3LCAxMjgzNTcsIDY3NjksIDQxNDEwLCA5ODM0NDQsIAotICAgIDY0MjYyLCA2NzY3LCA0MTQwNywgMCwgMCwgNjc1NSwgMTE4ODY0LCA5MDQ2LCAxMjc5MzQsIDEyNjYwOCwgMCwgMCwgMCwgMCwgCi0gICAgNjc2NzUsIDAsIDAsIDAsIDY0MzM4LCAyNTYzLCAxMzAzMywgMjQ3LCAxMTg5MTUsIDAsIDEyMzM4LCA0NjUxLCA2OTg5NSwgCi0gICAgMTEyNzAsIDAsIDAsIDExOTMzLCAwLCAwLCA0MTkwMywgNDM0NDcsIDExMDAxLCAwLCA0MjI1NSwgMCwgOTI2NjEsIDY5ODIxLCAKLSAgICA0MTkwNSwgMCwgMCwgMTA3NzUsIDk3OTMsIDUwMDksIDAsIDQyMjY5LCA2NDU4NywgOTgzMDYzLCA0MjUzNSwgNjk4MTIsIAotICAgIDY0NTI5LCA0MTQwOCwgNDI4NTMsIDM4NzcsIDEyMDc5NSwgNDI2NzQsIDgxNDcsIDQzNTY2LCAxMTkwMjEsIDk4Mzc2NywgCi0gICAgMTAyMzYsIDY1OTE4LCA0Mzc4MiwgMCwgMCwgNjQ1MDYsIDY5NjUyLCAxMTg5MjEsIDQ3NDcsIDEyODA1OCwgNjk4NDQsIAotICAgIDQzMjAwLCA1ODMyLCAwLCAwLCA1MTQxLCA0MjYwMCwgMCwgNDMyMDMsIDAsIDk4Mzc5MCwgNDMyODYsIDAsIDEyODIxMSwgCi0gICAgNDM3NzgsIDAsIDQxMzA1LCA3ODc3NiwgNDM3ODEsIDExMzAzLCA2NTU0NywgMCwgNzAzMSwgODU5LCAwLCAwLCAwLCA2MDU5LCAKLSAgICAxMjY5ODUsIDU1MjM1LCAwLCA4NTM1LCAwLCA2NTE5NiwgMTk0Nzg3LCA2NjAzMiwgMTE0ODgsIDEyMDQ4MSwgMTIwNzg2LCAKLSAgICA0MjIzMywgNjQxNDAsIDk5NDYsIDYzODg1LCAxOTQ3OTIsIDExODIyLCAwLCA0MzE4OSwgOTgzODg5LCAwLCAxNzg4LCAKLSAgICAxNTc5LCAxMjA0ODIsIDcxMjk4LCAwLCAwLCAwLCA5MDI4LCAxMTk1NzEsIDY5MjM0LCA5NDA1NSwgMCwgMTI4NSwgNjQ4ODIsIAotICAgIDQxMjQyLCA3MDA4NiwgMCwgMTI2NDAsIDAsIDc0MDEsIDAsIDEyNjI1LCA2ODE5OCwgMCwgNzAwODIsIDM5NDAsIDQxNTk3LCAKLSAgICA0Mzc1NCwgMzM5NiwgMTI2NDIsIDg2NjUsIDAsIDAsIDEyNjMwLCAxNjUzLCA5MTc4MTUsIDEwMTUzLCAwLCA2MTY2LCAKLSAgICAxMjA1MTYsIDExODk4OSwgMCwgODgxNSwgNjY2NzMsIDY1MDQ2LCA5Mjg1LCA5MTMsIDQyMjU5LCAxMTkzMTcsIDExOTMxOCwgCi0gICAgMjE0MiwgNjg0NTQsIDQyNDg1LCA5NDAxMiwgNzg3OCwgODIxMSwgNDIyOTMsIDY0Mzc3LCAwLCA5MjY0MywgMCwgMTk0NjczLCAKLSAgICAxMjAzMiwgMCwgOTcyNSwgMCwgNzg0MzEsIDUyNjMsIDEyODE4LCA3ODQzMCwgNDE5MzksIDEwMDIyLCA2NTM4NywgNzg0MTksIAotICAgIDQyNzc3LCAxMDEzOSwgOTgwLCA0MzY5OCwgNjUzODYsIDIyMDgsIDAsIDQzNzAxLCA0MzE5OCwgNzE4NCwgMTIwNjczLCAKLSAgICAxOTQ3OTcsIDkxNzgxOSwgMTAwODUsIDExOTk5MiwgMCwgMTE5OTkzLCA2NjM0LCA5MjM3MywgMCwgMTE5MzIzLCA4MDcyLCAKLSAgICAxMTkzMjEsIDQzNzAwLCAwLCA4ODcyLCA3NzgzLCA5MTc5OTIsIDEyMzk4LCA4MjM3LCAwLCAwLCAxMjM5NSwgMCwgCi0gICAgMTI2OTc3LCAxMjA1NjUsIDk5MTQsIDIyMTcsIDkxNzg1NCwgNzM5NzUsIDYzNjcsIDYzNTEsIDY2Njg4LCAwLCA3ODEwNywgCi0gICAgMCwgNjQ3MzUsIDQxMjQzLCA5MjE5OSwgNzgwOCwgMTgyOSwgMCwgNDE5MzcsIDQzNTgsIDQzMjcyLCA2MzUzLCAwLCAwLCAKLSAgICAxMjA0MjIsIDAsIDE3MTAsIDAsIDAsIDY1NjA3LCAwLCA0OSwgNjYyNywgMCwgNjI1OCwgMTA2ODMsIDc4NjcyLCA5NzQxLCAKLSAgICA3ODMyOSwgNTY0OSwgNzg0NDEsIDQzNDQzLCA2NDQxOCwgMTY0MywgNjUyMTMsIDg0MDUsIDM0NzAsIDEyODIyNSwgMTMyMTMsIAotICAgIDQyNDUyLCA3ODMzMSwgMTIwNjY0LCA3ODQ0NSwgMCwgMTA3MiwgNzg0NTcsIDc4NDUyLCA3ODQ1NCwgNjU3NiwgNDE5ODgsIAotICAgIDQxMTMyLCA2NTY3NSwgMTA4MCwgMTIwMDAyLCA5ODg2LCA1NTIyNSwgMTEwMSwgNjg0MDQsIDEyMzA5LCA1NTIyNywgMCwgCi0gICAgMTI2MzIsIDEwODYsIDE4NjksIDc4Njg1LCA3NjgwLCAwLCA2NTQ1OCwgMTIwNzE0LCAxMjYzOSwgMzM4MCwgODEyMywgCi0gICAgMTA5MSwgMTI2MzgsIDc5NzcsIDQ1MDEsIDQxMDk5LCAwLCA2NjMwOSwgMCwgMCwgMTQ5NCwgOTgzMTQ2LCAxMjY2MTMsIDAsIAotICAgIDExNjkzLCAxMjY1MTMsIDEwNDk0LCA5MjY1NSwgNjU4NzIsIDEyMzYzLCAxMTM4NiwgMCwgMCwgMCwgMCwgNjQ1ODIsIDAsIAotICAgIDczNzk0LCAwLCA4MDIyLCAwLCAxMjA0NjIsIDc0MTA2LCAxMjQxMywgOTQwNjksIDkxNzk5NCwgOTE3OTkzLCA5MTc5OTUsIAotICAgIDU1NzAsIDE4ODEsIDcyMTAsIDAsIDEwMTIsIDQzNzUyLCAwLCAxMjA3MDksIDcyMDgsIDY2NDQyLCA1NTY5LCA5ODMyMzYsIAotICAgIDQyMzM5LCAwLCA2MDYzLCAwLCA3ODM4MywgMTE5NTk0LCA2MDUzLCA2NTYwMiwgMCwgOTIyMDEsIDY0NzI3LCA5MTYwLCAKLSAgICAxOTQ4MjcsIDAsIDAsIDkyMTgwLCAxMDUwMywgMTE4ODEwLCA2MDU1LCAzODcwLCA0Mjc5LCA4NDkwLCAxMjAxMTQsIDQzMTksIAotICAgIDY0Nzg2LCA4NjAyLCAxMjAxMTAsIDExMzI2LCA5MjIwNCwgOTgzMTE2LCAwLCAxMjAxMTksIDc4MzMzLCAxMjAxMTcsIAotICAgIDEyMDExOCwgMTIwMDk5LCAxMjAxMDAsIDY1MDg3LCA1NTcxLCAzNjc0LCA5NzQwLCA5MTIxLCA1NTY4LCAxMjAxMDcsIAotICAgIDEyMDEwOCwgNDIwODUsIDEwMTA3LCA0MjE1OSwgNDI4NzAsIDEyMDEwMSwgNTg5LCA3MDUwLCA5ODM3OTEsIDQzMjgxLCAKLSAgICAxMDIzMywgNDEyNjMsIDY2MjUxLCA2NTcyOSwgNjYyNTMsIDEyNjQ5NywgNzQwOTksIDQyNjQ1LCAwLCAxOTQ4MTUsIDg1ODMsIAotICAgIDAsIDU4NDcsIDY5MjgsIDEyODA3NCwgMCwgMCwgMCwgMCwgNjY1OTIsIDEyMjA0LCA5MTc5NjIsIDE5OTY2LCA3Nzg1NiwgCi0gICAgNDI1NjEsIDEyMDYyNiwgOTgzMjQ1LCAwLCA4MTIwLCAxMjA3MDEsIDAsIDAsIDEyODAxMiwgNDEwNjMsIDAsIDEwNjY0LCAwLCAKLSAgICA4MzY5LCAwLCA0NTUxLCAxOTQ5NjQsIDMzNjksIDAsIDAsIDk2NzMsIDY2MzM0LCA2NTU4MCwgMTA0NzgsIDExODk2MCwgCi0gICAgMTI1MTcsIDU1NywgOTQ1NywgMTIwMzQsIDk4MzY2MiwgNjM1NSwgMTI1MTksIDQxMDA0LCAwLCAxOTUwMjUsIDc0MDk0LCAwLCAKLSAgICAwLCA3Nzk3MCwgOTgzNTYwLCAwLCAxMjgxNzUsIDEyMTExLCAzOTI3LCAwLCAxMjUxNSwgMTQ3NCwgNjc4OTMsIDU0OTIsIAotICAgIDY5MjMsIDkyMjgxLCAxMDQ0MSwgNzM4MzYsIDAsIDQzOTkwLCA1NDkzLCAwLCA3NDMxOSwgMCwgNjY2MzUsIDEyMDE5LCAwLCAKLSAgICAxNjE4LCAwLCAxMjA0NzQsIDk2NDUsIDEwNDMwLCA5MTc5NTksIDU4NTMsIDEzMDYzLCAxMDM2MywgMCwgMTI5NTYsIAotICAgIDEyODE2OSwgMTIwNzI5LCAxMTMxNCwgOTE3NTgyLCAxMjA2MCwgMCwgNzgzOTIsIDEyODI2LCA2MzI5LCAwLCAxMDUxNCwgCi0gICAgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAxMjcwNTQsIDc4Mzk4LCA0MzU3MCwgMjY5NywgNDM0MjAsIDc4Mzk2LCAKLSAgICAxMjcwNTcsIDI2OTUsIDQyMTcxLCAwLCAwLCAwLCA2NzYxNywgMTE4OTcxLCAwLCAyNjkzLCAxMjEyNSwgMTI3NjYsIDAsIAotICAgIDExNjQsIDEyODgxNywgMCwgNDE5MTgsIDk4MzE2OCwgMTI3NTQyLCA4Njg3LCA2NjAwOSwgMTIxNzgsIDcwNTMsIDEyODAwMSwgCi0gICAgNzQ2OSwgMCwgNTI0OCwgMTIyMTgsIDEyMDUzOCwgNjQyNywgNDI4ODQsIDQxMTIzLCAwLCAwLCA0Mjg3MywgNDExMjYsIAotICAgIDk5OTEsIDQxMTI4LCA3NDM3MSwgMTI3MDMxLCAwLCA5ODczLCAwLCA0Mjg3NywgNzk5NCwgNjQ3NjIsIDIwNTMsIDQyODQzLCAKLSAgICA2NTkxLCA5MzQwLCAwLCAxNTg5LCAwLCAyOTYsIDc0NDM4LCA3ODg1MiwgMCwgNjc4NDEsIDc0MzcwLCAwLCA4OTIyLCAKLSAgICAxMjgwNjgsIDc0NjAwLCAxMjcwMCwgNzQ4MzYsIDAsIDEyNTc5LCAwLCAxMjU3NSwgNjQxNiwgNTY1NiwgMjg5MSwgMTMyNjIsIAotICAgIDY1NTkwLCA1Mjk5LCAwLCAxMTQ3MywgNTQ0OSwgMTI1MiwgMCwgNzg0MDQsIDQxNDMxLCA3NDM2OSwgNjUzNzMsIDUyOTUsIAotICAgIDkxNzU2OSwgNzQxMTQsIDEyMjMsIDE2NDIsIDE3NCwgNzgzOTksIDg4MywgNDE2MSwgMTI2OTEsIDQyNjAzLCA0MTQxMywgCi0gICAgMzIxMiwgNDE0NTksIDMyMTEsIDc0ODEwLCA0MTQyNSwgMTI3MDI5LCA3ODQxMiwgNzQ0NTAsIDk3MjgsIDM4NDYsIDgwNzAsIAotICAgIDYxNTAsIDY2MzYsIDQzNzAsIDAsIDAsIDc0MTc4LCA3NDU4NywgNzQxMTcsIDAsIDAsIDAsIDQ5ODYsIDEyMTg5LCAwLCAKLSAgICA2NzY0OCwgMTIwNDk5LCA5NDAwMSwgNDI1NywgMTIxMDQsIDc3OTQyLCA2MjIwLCA5MDA0LCA2NTU2MSwgMCwgNzc5NDksIDAsIAotICAgIDY4MTM1LCA5MTc1NzYsIDc3OTQ2LCAwLCA2OTY3OSwgNjk2ODQsIDk4OTAsIDc4NTYxLCAxMjk3MSwgNzg0NTMsIDkyNTU2LCAKLSAgICA3Mzg5OCwgMTE5NzksIDcwMDUxLCAxMTg5MDAsIDkxNzg5NCwgMCwgOTYzNSwgMTI2MDAsIDg4NzEsIDAsIDAsIDAsIDY0NjksIAotICAgIDc0MjI3LCAwLCA2NTMwNCwgNDY3OSwgMTAyMzAsIDY0MzAwLCA2NDg2NywgMzQyNywgNDI0MCwgMCwgMCwgMCwgMCwgCi0gICAgNDI5MTYsIDAsIDAsIDAsIDcyODIsIDc4NzI4LCA2NTczMywgNDQ0NSwgMTI3MTM4LCAxMjgwODIsIDM0OTQsIDc0NjA2LCAKLSAgICA2NTU1LCAwLCA3Nzk3NiwgMCwgMCwgNzg1NjYsIDAsIDk4MzE4OSwgNjU4OTgsIDk4MzIzOCwgNjUzMTIsIDU0NDcsIDAsIAotICAgIDEyODk1LCA2NTU5MywgNDAxMCwgMCwgNDExMDYsIDAsIDY0NDQ4LCAwLCA0MTEwNSwgMCwgNjU4MjAsIDYyMzIsIDAsIAotICAgIDEyODI4MCwgMCwgNDM2MDgsIDExOTA5MSwgMCwgNjUzOCwgNDMzNSwgNzgzNjQsIDM5NDEsIDQxMTIyLCAxMTA2MSwgCi0gICAgNzgzNjMsIDY0ODkyLCA5MTEzLCAxOTU0LCAxMjE1NSwgOTgzNjY1LCA0Mjg3OCwgMTE1MDAsIDAsIDAsIDc0NTc4LCAwLCAKLSAgICA2NTgzMiwgMCwgMCwgMCwgNzc5NzUsIDExOTIzMCwgNDU4NiwgMCwgMzUwLCAxMDk1MSwgMCwgNTA5LCAwLCAwLCA5MjMwNywgCi0gICAgMCwgMCwgNTEzMywgMCwgMCwgOTUwMCwgMCwgNDk1NywgNjQ3NDEsIDI0MjIsIDIyMTIsIDk4MzA4MCwgMCwgMCwgMjQ5NiwgCi0gICAgMTE1MTYsIDk0NCwgMTE4ODUxLCAzODkwLCAxMjE2OCwgMTQzOCwgMCwgOTgzMTE3LCAwLCA0MTk0NywgMTIyMCwgMTIwODI4LCAKLSAgICAxMjg1NTUsIDAsIDAsIDE1NzEsIDQyNjMwLCA0MTk0OSwgNDI4MDUsIDgyNzAsIDk0MywgNTY0LCAwLCAzMTIsIDQxOTgwLCAKLSAgICA5ODM5MzUsIDAsIDc4MTIwLCA4ODc3LCAyNjksIDQ0MjksIDYyNzIsIDk2MTcsIDE0NjAsIDY5NTQsIDc4NjU3LCA0MTEyMCwgCi0gICAgNjUxMjEsIDEwODYyLCA2MDYwLCA0MTExOSwgNDE0MTYsIDc0MzU1LCA0MTczLCAwLCAwLCAwLCAxOTA2LCA5MTc5ODYsIAotICAgIDExNTMyLCA3NDA3MywgMTI3MzM4LCAwLCAxOTg1LCA2Mjk2LCA5NTgyLCA5MTc4OTUsIDY0Mjg3LCAwLCA3ODExNSwgCi0gICAgMTE0MjgsIDE3MzAsIDI0NTcsIDkxNzgwOCwgMTk5MTgsIDEwNDY5LCAwLCAwLCA3NzAzLCA4ODQwLCA4MDM1LCAwLCAwLCAKLSAgICA5MjIzMCwgMCwgNjEyOSwgMCwgMTI4NTI4LCAxMjgyNjgsIDAsIDc4NzQsIDg2ODEsIDExOTA5MiwgMCwgMTMxMzYsIDAsIDAsIAotICAgIDcwMTAyLCA2Mzg4NiwgMTE4ODgxLCA5NjA1LCA3MTMwOCwgMTMyMjAsIDEyODc3NiwgMTIwMjc0LCA1NTE0LCAwLCA5MjI4LCAKLSAgICAwLCAwLCAwLCA1MjQwLCA5ODExLCAxMDAxMiwgMzA5NiwgMCwgMCwgOTgzMzQzLCA2NjY3NiwgNjU4NzMsIDAsIDAsIDAsIAotICAgIDk1MDEsIDAsIDEyNzIsIDY0NTM2LCA2NTQ2NSwgNjQ2NTQsIDc0NjcsIDAsIDE0NjcsIDEwMTU4LCAxMDA0MCwgMCwgOTUxOSwgCi0gICAgMCwgOTE3ODEyLCAwLCAxMTg4OTksIDEyMTkzLCAwLCAwLCAwLCAwLCA5ODMzNDUsIDE5OTM1LCAwLCA5MjE2MiwgNjk2NzYsIAotICAgIDAsIDAsIDAsIDUyNzUsIDAsIDAsIDg2MzcsIDAsIDAsIDM3ODksIDYzODgwLCAxMTQ3MSwgNDM1NTQsIDY1ODYyLCAxMTQ3NCwgCi0gICAgNjYzMzIsIDY2NjAzLCAxMjgxMzgsIDI0MjYsIDEyMDQyLCA5MjE5NCwgOTgzOTAyLCA5NTM3LCAzOTYxLCAxMjExNSwgCi0gICAgNzc5NTMsIDI2MDUsIDQ1MDAsIDY0NTYxLCA1NTIyNCwgNDk4MSwgMCwgMCwgNjM4NzYsIDExNjY3LCA0MjY4NiwgNzc5NzMsIAotICAgIDQyMzYyLCA2NDY4NiwgNDQ5OSwgNDE2NDksIDc1ODksIDAsIDAsIDMyMzcsIDAsIDY4MjE1LCA5MTc5MDQsIDg1NDEsIAotICAgIDc4Mjk4LCA3MDAzNCwgNDE4NjYsIDAsIDAsIDAsIDAsIDY5OTI0LCA0MzU1NSwgMjgyMywgOTU1OSwgMTAwNjAsIDQxOTQwLCAKLSAgICA4Mjk5LCA0MTk0NSwgNzEzMiwgNDE5NDEsIDMzMDgsIDcxOTAsIDY0ODgwLCA4NjE0LCA2NTIyMCwgNDE0OTMsIDAsIAotICAgIDQxNjk5LCAxMDc2MiwgNDM3ODAsIDEyOTk5LCAwLCAwLCA4MTA2LCA0MTI4LCAwLCA2Mjc0LCA0NDk0LCAwLCA0MDEyLCAKLSAgICAxMDM5NSwgOTgzNTkxLCA0MzYzMywgNjU0NDcsIDEyNjUxMSwgMCwgMTEwMDQsIDY5NSwgNzM5LCA2OTYsIDc2MTEsIDAsIAotICAgIDQyNzU1LCA3NDgwMiwgOTIyNywgNzUwNiwgNzUxMCwgNjk5MzcsIDY5MSwgNzM4LCA3NTExLCA3NTEyLCA3NTE1LCAzODY4LCAKLSAgICA2ODgsIDQxODQ3LCA2OTAsIDI1NDgsIDczNywgOTc0LCA4MDAzLCA3NDA2LCA5MTc5MTEsIDAsIDEyODY4OCwgMzk4NSwgCi0gICAgOTE3OTEyLCA2NTg2MCwgNjM5MjEsIDcwNTEsIDY5Nzc3LCA0NjgyLCA5MTc4MDUsIDEyODA5LCA2NDA2LCA0Njg1LCAKLSAgICA5MjUwNSwgMTA4NzksIDEwMzQ3LCA0NjgwLCA2MzQxLCAwLCAzODUxLCA4MTMyLCA3NDMyNSwgMCwgOTE3OTA3LCAwLCAKLSAgICA0MTk1OCwgMTE5MTc2LCA5MTc5MDgsIDAsIDAsIDQyNjU3LCA5MjQ2OCwgNzY0MywgNDIzNzMsIDExNzE0LCA2NzU4NywgCi0gICAgNDM1NjgsIDk4MzE3NSwgMTE3MTcsIDc2NTAsIDEwNTk0LCA2NDk1MSwgNzY0NywgNzY0OSwgMTI4MTU1LCA3NjQ2LCAwLCAKLSAgICA3ODA4MiwgOTY1MSwgMCwgMzg5MSwgMCwgMCwgMjMzNywgMTczNSwgNzQzMjQsIDY3ODYwLCAyMzYzLCA5ODMxMzUsIDAsIAotICAgIDQzNTYxLCAwLCAwLCA3NDE0NiwgMTg2MCwgNzQ5NSwgNzU4MCwgNTgxMiwgNzQ5NywgNzU4NCwgMTE5MTQwLCAxMjc4NTMsIAotICAgIDAsIDEyMDM0NywgNzcyNywgMCwgODQ5OCwgNjk4MTgsIDg5NDksIDMwNjUsIDQyNzE5LCA3MTM1LCAxNTY5LCA5MjM3NSwgCi0gICAgMTI1MzQsIDEyMTI0LCA3NjkwLCAwLCAxMjUzMywgOTgzODcwLCA2NDE4LCA0NTQzLCA3ODA4NiwgNjk2OSwgMCwgNzQ4MDAsIAotICAgIDAsIDY3OTc0LCAxMTk4MCwgMTI4NjUwLCA5ODM3OTIsIDYzODk0LCAxMjA3NjAsIDEyMjgyLCA2NjE5MiwgMCwgNzQ1OTIsIAotICAgIDg4NTAsIDc0Mjc1LCA5MjM4LCAxMDYxNywgOTE3NTQ1LCAwLCA5MjYyNSwgMCwgMTI3OTEsIDAsIDAsIDEyNzg0MywgNDQ0NywgCi0gICAgNzM3MzIsIDEyNzkzLCAxMjkwMCwgOTIzNzcsIDEwOTUwLCAwLCA3ODA4NywgMTI3OTAsIDQxNDAwLCAxMTkxMjgsIDY2NjA3LCAKLSAgICAxMjc5MiwgNDIyMzIsIDE5NDkzOCwgMTc0NCwgMTI3ODksIDEwMzY2LCAxMjMxNywgNDEzMTAsIDk4Mzg2MCwgNDEzOTksIDAsIAotICAgIDAsIDU1MjU4LCAwLCAxMjY5MCwgMCwgMCwgNDM2NzIsIDEyNzg0MCwgNDE2NTIsIDI5NzQsIDkwMTAsIDExMzE1LCAwLCAKLSAgICAyNzgsIDAsIDQxNDA1LCAxMTkyNTQsIDAsIDEwMDc3LCA2Mzg1MywgNzQ1NTcsIDQyNTg2LCAwLCAwLCA2MDAyLCAwLCAKLSAgICA0MzU1MywgMCwgNjc5MDMsIDAsIDEyNzg3LCA0MTMwOCwgNzkzNCwgNjUzMDYsIDAsIDAsIDAsIDg2NDYsIDk4MzE4NiwgCi0gICAgNzc4MjksIDcxMzYwLCAwLCA2NDEzLCA2NTUwLCAwLCAxOTQwLCAwLCA0MzYzNywgMjIwLCA2NTE5MywgNDM1NTEsIDEwNjc4LCAKLSAgICAxMDA0NCwgMTI4MzIyLCAwLCAwLCA2ODY1OSwgNjQwMywgNTcwNywgMTAzOTMsIDEyNzUzMiwgMCwgNjY2MTQsIDAsIDAsIDAsIAotICAgIDEwMjk3LCAwLCAzNzQyLCAwLCAzOTU5LCAwLCAwLCAwLCAyNDY3LCAwLCA2MDAzLCA2Mzg0NCwgNjY2MywgODA0MCwgMCwgCi0gICAgNDM3NTgsIDQxODIsIDc4MTcxLCA0Njc2LCAxMjA1MDEsIDAsIDAsIDI1MTAsIDAsIDEwMjA4LCA3ODE2OCwgOTIzNjEsIAotICAgIDExNTQwLCA0MzU0NiwgNjY5MiwgMCwgNDEwNjAsIDAsIDQ2NjgsIDkwODMsIDAsIDAsIDc4MTQ0LCAxNTU5LCA2MzgzMSwgCi0gICAgOTY3NywgMTIwMjYwLCAwLCA2NTI1NiwgMCwgNzQwNzAsIDAsIDAsIDM2NSwgMTIwNTYsIDQzMDI3LCAxMjA0MjMsIDQxNzE2LCAKLSAgICAxMjgyMzYsIDAsIDEyMDQ3MiwgNTUxNiwgMjg0NSwgNzcxNywgODAzNiwgNDE3MTcsIDczODI3LCA1NDQsIDEyMDQ1LCAKLSAgICA2Mjc4LCAwLCA1NTE1LCAwLCAwLCA5ODMwNTEsIDY1MzM5LCA0MzIyMSwgMjIxMSwgMCwgNTUxNywgMCwgMCwgNzQ4NDEsIAotICAgIDY3ODg0LCAwLCA2Nzg5MCwgNjc4ODUsIDY3ODgwLCA2Nzg4MSwgNjc4ODIsIDY3ODgzLCAwLCAwLCA2Nzg3OSwgMTI3MTg4LCAKLSAgICAxOTAyLCA2Nzg4NywgOTYzOCwgMTI5NzYsIDEyNjU0NiwgMTI0ODMsIDEyMzY4LCA0MTc2OSwgNDI3MjYsIDQxNzY1LCAKLSAgICA3MzYxLCA2NjY3LCA2Nzg3NCwgNzU1NiwgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCA0MjY3NywgNjc4ODksIDAsIDEzMTEsIAotICAgIDkxNzk2NiwgNDMyNiwgMTEwMDAsIDYzODI0LCAxMzA2OCwgMTA5MzIsIDEyODg4MCwgNjkxNywgNzgxNTUsIDAsIDk0OSwgCi0gICAgNzgxNjIsIDAsIDYxNDgsIDg2MDUsIDQyMjUzLCA3ODE3NywgMCwgMCwgNDI3MTUsIDAsIDAsIDAsIDYzODcxLCAwLCAKLSAgICA0MTc5NiwgMTI2OSwgNjUzMCwgMCwgNjUwNTcsIDAsIDUxNDQsIDEyMjIxLCA0MjcxNiwgMCwgNDQzMSwgNDMzMSwgCi0gICAgOTgzNzIwLCAxMjg2NzUsIDQxODM0LCA1Mjc5LCAwLCAxMDMzNiwgODMxMiwgMCwgNDI3MDEsIDEyODgyNSwgMCwgNzgxNjUsIAotICAgIDY2MDM2LCAwLCAwLCA2NDI4LCA0MjI3MCwgMCwgOTgzNTk2LCA0MzA1OSwgNDI2NjYsIDUyNTYsIDEwNjcsIDI1NSwgCi0gICAgMTIxMzEsIDk4MzcxMywgOTQ5MywgOTgzOTU5LCA0MTAxNCwgMTE3OTMsIDE5NDkyMCwgMCwgNzQzOTQsIDQzNDYwLCAKLSAgICAxMDY1MywgNDI3MjMsIDk4Mzg0NSwgMTE5NjMyLCAwLCA2NTYwLCA3MDE2LCA3NDI3NCwgOTgzNjE1LCA0MzU1NiwgMzkyOSwgCi0gICAgNjc5NzcsIDY2MTQsIDI3NjgsIDkyNTA0LCA5NzQ2LCA1MTM1LCAxMTgxMSwgMTI3OTYsIDExOTUzLCAwLCA2OTc2MSwgCi0gICAgNTEzOSwgMzQ2LCA3NDMwMywgNjMwNSwgMTI3OTUsIDQ2NzUsIDUxNjgsIDc4NTUyLCAxMjc3NTMsIDc0MzE1LCA3NDM2MSwgCi0gICAgODI1MywgODgxNywgMTEzNiwgMCwgNDM1NjMsIDkyMjMyLCAwLCAxOTQ3NTAsIDczOTIsIDgyMzAsIDkzNjUsIDAsIDAsIAotICAgIDk4MzYwNywgMCwgMCwgNDA0MSwgMCwgMjM1NywgNDMyNDAsIDEyNzg2LCAyMjksIDExOTg4NSwgMTE5ODg0LCA0NDAwNCwgCi0gICAgNzE0MiwgMTE5ODgxLCAxMjM1MCwgNjU1NTQsIDExOTg4MiwgMTE5ODc3LCAxMTk4NzYsIDEyNzg1LCA2Mzg2MywgNDM3OTUsIAotICAgIDc3NzAsIDEwNzEyLCA2NDg1MywgMTI2ODYsIDExODkxNiwgNDIzNzUsIDAsIDEyNzIzOCwgNjYzNTIsIDEwNDcwLCAwLCAKLSAgICAxMTA1OSwgMTA3OTEsIDkxNzk0NCwgNDUwLCAxMTkzMjgsIDAsIDEwNDMyLCAxMjA5NywgNTQ1MCwgNjQ2OTEsIDEyMzMsIDAsIAotICAgIDQ0MDA5LCA3ODI4NCwgNjYzMzgsIDAsIDAsIDE4MzksIDExODc5OSwgOTgzMjE3LCAxMDkyNywgMTcwMSwgOTgzNjU1LCAKLSAgICAyMzg4LCA0MTc0OSwgNDE3NjEsIDU0NTMsIDgzNjEsIDExOTg2NSwgNDE3NTgsIDU0NDQsIDQxNzYzLCA2NDg4OSwgNzE0MywgCi0gICAgOTI0OTMsIDc4Njc3LCAwLCA5MjQyOSwgNzgxNzQsIDY2NDMyLCA4ODAxLCAzMDUzLCA0MzQwLCA5ODMwNDQsIDAsIDY1ODEyLCAKLSAgICA5MTc4MzEsIDAsIDQxODI0LCA2Nzk4NSwgMTIwMjAzLCAxOTQ4MDAsIDE5NDgwMywgNDI3MDAsIDE5NDgwNSwgMTI3OTgwLCAKLSAgICAxOTQ4MDcsIDc4Njc2LCA5MjM1NiwgMTk0ODA4LCAwLCAwLCA0NDkzLCA0MzM2LCAwLCAyMzE0LCA0MzYwMiwgNzg4MjYsIAotICAgIDExOTMyNSwgMTk0ODExLCA0MjQzOSwgNjQ2MzgsIDQyMzI3LCA0MzUyOCwgNDQ4OSwgNzEzMzEsIDAsIDE5NDc5MywgMTkxMiwgCi0gICAgNDIzODUsIDEwMzA2LCAxMDM3MCwgMCwgMCwgODg2NywgMTAyNTAsIDEwMjU4LCAyNzEyLCAxNjM1LCA3ODgyMSwgMTQxMCwgCi0gICAgOTI2NzEsIDk4MzI0NCwgMTE4ODc4LCAwLCAwLCA5OTE5LCAxMjA1MjgsIDU1OSwgMTI4MTU3LCA0MTgyNSwgMTI3OTc1LCAKLSAgICA3ODE4OCwgNDg5MiwgNzQwMTYsIDE5NDc4MSwgNjU0MiwgNDE5NTcsIDEyODg2NSwgNTc3NywgMCwgNzU5LCA2NTc0OSwgCi0gICAgMjA3OSwgNjUyNDgsIDEyNzg4LCA2NDQ4NywgNjQ1NTIsIDAsIDEwMjIzLCA0MjA2MiwgMCwgMCwgMTI2NTczLCAzNjY4LCAKLSAgICA2NTc1NCwgNDM1NjAsIDEyMjI2LCA2Nzk5MSwgNjUxNDksIDIzNDAsIDQxOTU5LCAxOTQ3ODYsIDE5NDc4NSwgMTk0Nzg4LCAKLSAgICA0MzYxOCwgNjU3NDcsIDEwOTM3LCAyOTYyLCAwLCAyMzIxLCAzNTg3LCA2NTc0NSwgOTI0MzYsIDg5MjEsIDk5NTIsIDAsIDAsIAotICAgIDQyNzE0LCA5OTUxLCA0MzQwOSwgMTk0NzcwLCAyOTQ5LCA2NjAxMiwgMTk0Nzc1LCAxOTQ3NzQsIDI5NTgsIDY4MzU5LCAKLSAgICA0MTgyMCwgMjMwMCwgMjM5NSwgMTI4NTYzLCA5OTc2LCAxMjAwNDMsIDEyMDA1MCwgMTIwMDU4LCA2ODIyMCwgMTI4MTQzLCAKLSAgICA0MjgwOSwgNDI4MDcsIDAsIDEyMDA0NiwgMTAxOTgsIDQxNTAsIDY0MzcxLCA4MzE4LCA0MTc5MCwgNjc5NzYsIDQxODk4LCAKLSAgICAyMzYwLCA0MTc5NCwgOTE3OTQyLCA3MTMxNCwgMTI3ODE4LCAwLCAwLCAyNDE4LCA5ODMwOTgsIDI0MTEsIDExMzM2LCA3OTksIAotICAgIDYzODIzLCAxMDI3NiwgMTAzMDgsIDEwMzcyLCA5MTc1NDEsIDQxNzcyLCA0MjgxMywgMjMxNywgMTAyNjAsIDExODk4MCwgCi0gICAgNTUyODQsIDkyMjAzLCAwLCAxMDM4NCwgOTgzMjE4LCAwLCAwLCA3NzUzLCAyMzUxLCA2NjU1LCA2NDQ4OSwgNjk5MzEsIDAsIAotICAgIDc3ODcyLCA0NDQzLCA0Mjc3OSwgMjMwLCAwLCAwLCA0MzU0OSwgNDg1NSwgNDIxNTAsIDY1NzM5LCA1NDQxLCA0MTg5NiwgCi0gICAgMTAyODgsIDEwMzIwLCAwLCA4NTUsIDcwNDYsIDYxMDksIDY1MDQ1LCA2MzgzOSwgNzgxOTgsIDIwNDksIDEwMDk4LCAwLCAKLSAgICA3NDE0NSwgMTI3OTQzLCAxMDI2NCwgMTAyODAsIDkxODQsIDEwMzc2LCA3MDEzLCA0NDY3LCAwLCAwLCAwLCA0MTg4NywgMCwgCi0gICAgNDg2MiwgOTczNSwgNjUzNywgMTIwNTkxLCA3NDI4NiwgMzkxNCwgOTIxNzgsIDkzOTc2LCA5MDY1LCAxMjk2MSwgMCwgMCwgCi0gICAgOTIyNTMsIDAsIDI4OSwgMCwgNDY5NCwgMTE0MjAsIDQ2OTAsIDAsIDEyMDUxNCwgOTE3OTc4LCA0NjkzLCA3Mzg5MywgCi0gICAgNDI3MjQsIDAsIDQ2ODgsIDEyMDQ1NCwgMCwgMCwgNjc5OTQsIDgyMzgsIDMxMTAsIDEyMDE2MiwgOTgzODk5LCAxMjAxNjMsIAotICAgIDY1MjgsIDEyNzU1MywgNDMwMzUsIDY5ODk4LCAyMTgsIDAsIDE1MjAsIDAsIDQ3ODYsIDAsIDQzMjI1LCA0NjAyLCAwLCAKLSAgICA3ODE2NywgMTAwODgsIDY1NDgsIDAsIDEyMDE1NiwgNDM5NzgsIDg5ODgsIDg4ODgsIDAsIDAsIDAsIDAsIDEwNjY2LCAwLCAKLSAgICA3MzkwMiwgNjk3NDAsIDAsIDAsIDk5NzUsIDEyODAzOSwgMTE5OTAyLCA0Njg5LCA4OTMyLCAwLCA2NTU2MCwgMTE5MjA5LCAKLSAgICA3NDQ0MSwgNzg4MTAsIDAsIDAsIDY3OTg3LCAwLCAwLCAwLCA2Nzk4OSwgMCwgMTAwNjUsIDgyMDcsIDAsIDkyNjEzLCAKLSAgICAxMjgwMTEsIDAsIDY2MiwgMCwgOTI0NCwgMTk0ODYzLCAwLCAxMTkyNjEsIDk4MzQyMCwgMCwgMCwgMCwgNDE5MjksIDAsIDAsIAotICAgIDY2Njc0LCA0MTkyNiwgMTIwNDA4LCAxMjA0NDMsIDEwNTEzLCA2NDYzNywgMTk0ODYyLCA2ODAxMywgNTIsIDEzMTE4LCAKLSAgICA2NDc1LCAwLCAxMjAzNDEsIDEyMDk1LCAxMDIyNSwgNDgxMiwgOTI1NzgsIDAsIDY3OTkyLCA3NDA4NSwgMCwgMzk3OCwgMCwgCi0gICAgOTE3OTQ1LCAxMjc4MjMsIDExNTgyLCAxMjA3NjEsIDEyMjgxLCAwLCA2NTQ0LCAxMzI0MSwgOTM5NjEsIDY5NzgyLCAKLSAgICAxMjg1NTcsIDE5NDg2MCwgMTE3NjUsIDY1MjU4LCAxMDM2OSwgMCwgMTU4NSwgNzE5MiwgMTAyNDksIDQyMiwgMTUwMCwgCi0gICAgMjAzNiwgOTg2LCAxOTQ4NTksIDY0Mzk0LCA1NzgxLCA1NTk5LCA2NDI5NCwgMjQ5NCwgMTIwNDUwLCA0ODYxLCA3NDAyMSwgCi0gICAgNjQzMzQsIDc4MjAzLCAxMjc4MDgsIDAsIDkyMjY2LCA2NTEwMiwgODk2MSwgNjU4NDIsIDEwMjQzLCAxMDI0NSwgNzQxOTEsIAotICAgIDEyMDQxMCwgMCwgMTIwNDUzLCA2NDgyMSwgOTQ3OCwgMjUwOCwgOTI2ODMsIDAsIDIwMiwgMTI4MjQ2LCA3NDEzMSwgMTI0MiwgCi0gICAgNjU1MTQsIDAsIDYzOTQwLCAxMjg3MDYsIDY0NTMzLCAxMjAxMjksIDAsIDY3ODQyLCAxMTk5MCwgOTI0MzAsIDYzOTM5LCAKLSAgICA0MzM3NSwgNjU0NDAsIDI1MDQsIDAsIDc4NjcxLCA2NDgyOSwgOTgzOTAxLCA2OTQzLCA5MTc5MzQsIDU4NTksIDAsIDI4NTgsIAotICAgIDk4MzM1MywgNzQyOTQsIDk4MzkwNSwgNjkyMzksIDAsIDExOTAyNywgMTI5OTIsIDI3NTMsIDE5MzYsIDcwMDc4LCA5MjU3NCwgCisgICAgMTk0NjA5LCAwLCA4Mjk1LCA2ODUsIDkwMjUsIDE1MjQsIDEyNjE4LCAwLCA1NTM5LCAwLCA5MjUyMywgMTIwMTAyLCA3MTM4LCAKKyAgICAxMjA1NTIsIDAsIDE5NDYxMSwgNzg3NTIsIDAsIDEyNTIwLCA4MDU4LCA5NzMyLCAwLCA1MDgwLCA2NDc3NSwgNTAzNiwgCisgICAgNTAzNSwgMTIwNTkwLCA0MjYwNCwgOTgzNjU2LCAwLCA4MDc0LCAyNzUsIDEzMjkxLCAxOTA3LCA3ODgzOCwgNDQzMiwgCisgICAgMTI3MjcxLCA1MDMzLCAxMjcyNzMsIDEyNzI3MiwgNDgzNiwgMzg4OCwgNzM3OTIsIDEwNzI5LCA2NDU0NiwgMTI3MjYyLCAKKyAgICA0MzcwNCwgMTI3MjY0LCAxMjcyNTEsIDY3NTg4LCAxMTkwMDAsIDEyNzI1MiwgMTI3MjU1LCA4ODU4LCA2NDA5LCAxMjcyNTYsIAorICAgIDEyMDI1MiwgMTI4MTAwLCAwLCAwLCA2NjMyMSwgMCwgMTI4MTQsIDEyNzI0OCwgMzQzMiwgMTAyMTgsIDAsIDYwOTQsIAorICAgIDc2NDEsIDQyNDQ1LCAwLCA5MjQ4NywgNDI0MDYsIDE2NzYsIDc0MzIwLCAxOTQ2MDcsIDk4MzE3NywgNTAzMCwgMCwgMCwgMCwgCisgICAgNzM4NjksIDk2MjIsIDAsIDY5OTQ0LCA2Nzg3LCAwLCAwLCAwLCA5ODM1ODMsIDEwNTQ0LCAxMjkxOSwgMCwgOTIyMTgsIDAsIAorICAgIDAsIDY5OTA2LCAxMjA3ODksIDAsIDk0NywgMTE5ODM1LCAxOTQ1ODYsIDE5NDU4NSwgMTA5NjksIDExOTkzNSwgNzYxMywgCisgICAgOTI1NjIsIDExOTkzNiwgNDc5NSwgMTE5OTMwLCA3MDE4LCA3Mzc2LCAxMjAxODEsIDEyMDE5MiwgMTIwMjY4LCAwLCAKKyAgICA0MzU2NywgNzQwNTYsIDkxNzkxMCwgMTE4MzMsIDExOTkxOSwgNzIxNiwgNjUyMzIsIDcyMTcsIDI1MSwgNzIxOCwgNzg5NSwgCisgICAgNDM5NSwgNDM1MzgsIDExOTkyNiwgMTE5OTI5LCAxMTk5MjgsIDcyMTMsIDExOTkyMiwgNzIxNCwgNzIxNSwgOTgzODM2LCAKKyAgICA3NDE0MSwgODg4MCwgNzY4NSwgNjY0NTksIDEyMDE3MywgNjU1NDAsIDExOTYxOCwgNjI1LCA4MTg3LCA0Mjg2MSwgMTExMywgCisgICAgNzIzNiwgNzkxNSwgMzYzMCwgMTIwMTc2LCA4MTc5LCA3NDI2NCwgNjc4ODYsIDkzMTYsIDEwOTgwLCAyNDg5LCA2NTYyNCwgCisgICAgODE1MCwgMTM1OSwgNjc2NTIsIDEyNzMyOSwgMTI3MzMwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIDEyMDg0LCAKKyAgICAxMjczMjQsIDEyNzMyMSwgOTIyNzksIDEyNzMxOSwgMTI3MzIwLCAxMjczMTcsIDEyNzMxOCwgMTI3MzE1LCAxMjI4MywgCisgICAgMTYxNiwgMzc5NSwgMCwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIDczOTA1LCAxMjY3NywgMCwgMCwgMzIzOSwgCisgICAgMTI3MzExLCAwLCAwLCA4NDMxLCAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCA2ODI2LCA3Mzc3MywgMTE5MDczLCA1MDQwLCAKKyAgICAwLCAwLCA5ODM0NDMsIDc4NDIwLCAwLCA1MDM5LCAwLCA3ODQxOCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIDc0MjkzLCAwLCAKKyAgICA2NDY0OCwgMCwgOTM1OSwgNzg0MTYsIDAsIDEyODc3MCwgNjUxNTcsIDY2NjIsIDAsIDAsIDM4NjMsIDczOTA5LCA0ODM1LCAKKyAgICA1NTI2NiwgNDM0MzIsIDEyNzgyMiwgNDMwOSwgNzEyNywgMTk0NTY5LCAwLCAxOTQ1NjgsIDEzMDEsIDAsIDQyNTg5LCA1NjksIAorICAgIDAsIDczODEzLCA3MTEsIDQzODksIDcxMzMsIDAsIDczODgwLCAxMTYxMCwgMTEzNjgsIDAsIDE5NDU3MCwgNDEzMzEsIAorICAgIDEwMDYsIDc0MjQwLCAwLCAxNTUwLCA4MjAxLCA3MzczNywgNzYyNywgNTQ5OSwgNTAzMSwgNzc5MDgsIDQyNzM4LCA2NTc4NCwgCisgICAgNzc5MDcsIDY1MjY3LCAzNzU4LCAwLCA2NTc4MSwgNjQ3MzQsIDcwMDczLCAyNDQwLCA2NTc4MCwgNzc5MTMsIDg0NDksIDAsIAorICAgIDUwMDgsIDk4MzU3MiwgMjExOCwgMCwgMTIxMjEsIDgyNTUsIDU1MTIsIDczODc1LCAyMTI4LCAyMTMwLCAyMTMxLCAyMTI2LCAKKyAgICAyMTMzLCAxMTE5LCAxMjcwNjgsIDIxMTQsIDIxMTYsIDI0NTUsIDAsIDIxMjIsIDIxMjMsIDIxMjQsIDIxMjUsIDEyNzQ4NiwgCisgICAgODcxNCwgOTgzODIwLCAyMTEzLCAwLCAyMTE1LCAxMjgxNzcsIDEyNzkwNywgNDM3MTMsIDUwNTIsIDY2MjIwLCA1ODIxLCAKKyAgICA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIAorICAgIDY2MzcsIDU5MDcsIDY1MDg4LCAwLCAxMjcyNiwgNzQ1OTQsIDkxMTcsIDk4MzE4MSwgMTIwMDMsIDU1MTMsIDY2NjYsIAorICAgIDUwNTMsIDc0MjMwLCA1NTEwLCA3ODQ1MSwgMCwgNzg0NDcsIDI0NzAsIDc4NDM3LCAwLCAxOTI1LCAwLCA5MjIzNywgCisgICAgNzQ4MDcsIDAsIDUwNDgsIDUwNDcsIDAsIDAsIDAsIDkyMzEzLCAwLCA3NDQ5NywgOTIzOTUsIDgwODksIDY5MjksIDYzOSwgCisgICAgOTgzNTYzLCA2ODE3OSwgNjQ0NDIsIDAsIDkyMzQ4LCA0NTk5LCA0MTQwMiwgNjY3NCwgNDMzOTcsIDQzMjk0LCAxNDc2LCAKKyAgICA2NDgsIDAsIDY1ODE5LCAzMjMzLCAwLCA0MTc4MiwgNjk1MSwgOTQwMTcsIDk4Mzk3NiwgMzUzMCwgOTc1MCwgMTI4MzE3LCAKKyAgICAwLCA2NjU2LCA0MjYxOCwgMCwgNTA0NiwgODUxMiwgNjU4NTYsIDc0MjYxLCA4OTY3LCAwLCA1MDQ1LCA0MjAyNiwgMTkxNiwgCisgICAgNzk4NiwgNTA0NCwgMTIwNTU2LCA5MDA2LCAxMzEyOCwgNTA0MywgMCwgNzg1MywgNzQwNjgsIDc0MDA0LCA5NjY5LCAKKyAgICAxMjM0MSwgMTI3MDMsIDg0MDIsIDAsIDExOTA3MCwgOTE3NjAwLCA0MTc1MCwgMzU4NiwgNjQ1MDgsIDQzMTQ4LCAwLCAwLCAKKyAgICAxMTk2MDYsIDY3OTgzLCAxMzI5NiwgNTE3LCAwLCAxMjg1MzQsIDE5NDk0NiwgNDE1MjgsIDEyMywgNjU0NTQsIDAsIDAsIAorICAgIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgMTEyNiwgNzM4OTUsIDAsIDE5NDU5MSwgMCwgCisgICAgMzkyNSwgNDI1MSwgODA2OSwgMTA1MTcsIDEyMDQzOSwgNDg5LCAwLCA0MjUwLCAxMjA0NDEsIDEyMDQ1MiwgNDMxNTEsIAorICAgIDk4MzE3OCwgMTk0ODUxLCA2NjIwMCwgMCwgMCwgMCwgNzg0MjMsIDAsIDAsIDg3MTEsIDYxODMsIDAsIDAsIDAsIDEyMDQ0OCwgCisgICAgNzYyMywgMTE4OTI1LCAxMTg4ODksIDkyMzUsIDEyNzYwLCA3NDE3NiwgNjk2NjIsIDY2NDQ1LCA0MzU0MCwgMTAwNjIsIAorICAgIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIDEyNjU5NywgMTIwNDM1LCAwLCA3NzI2LCAwLCAxOTkyMiwgMjY3LCAKKyAgICAzMzkzLCA0MjE5OCwgMTM3MSwgMTk0ODQ5LCA2OTIzMywgMjQ1OCwgMCwgNjIwMSwgMCwgNDEwNzQsIDQyNjYsIDEwNjUyLCAKKyAgICA0MTYxMiwgNDEwNzcsIDM0MDIsIDkwNTAsIDMzOTgsIDAsIDk4MzM0OCwgMCwgMzM5MSwgNDEwNzUsIDI0NzYsIDAsIAorICAgIDEyODAxNywgMCwgMTA2MjUsIDAsIDEyNzY3LCAxMzAxNywgNzg3NDMsIDY0MjYxLCA2NDkzNCwgMTI3NTM3LCAxMzAxNCwgCisgICAgMTMwMTMsIDAsIDY2NzMsIDAsIDAsIDAsIDEyNDM4LCAwLCA5ODMzNDIsIDAsIDk4Mzg4MCwgMTI2NjM4LCA5MDUzLCAKKyAgICAxMzAxNSwgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDk4MzgyOCwgNjY2MCwgNzg3NTgsIDkxNzc2MCwgOTE3NzkzLCAKKyAgICA0MjIxMiwgMTI2MjksIDExNDM1LCAwLCA1NTI1NiwgNjU1MzgsIDAsIDEyNzk0MCwgOTgzMzQxLCA3NDU0NywgMTI2NTg1LCAKKyAgICA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDE5NTAwMiwgMTE5MjM4LCAxOTUwMDQsIDc4MDk5LCAxMjcwODUsIDAsIAorICAgIDEyODMyMCwgNDI4NywgODI3NiwgNDkwMiwgMTEzMSwgMCwgNzg0NTgsIDY2NzI4LCAxODE2LCAwLCA0MjUzMywgMTY4LCAKKyAgICA0Mjg0NSwgNDg5OCwgNjQyOTgsIDk4MzE0MSwgMCwgNDkwMSwgMTgyMSwgMCwgNTc4LCAzNjUzLCAwLCA3OTEsIDkxNjIsIAorICAgIDY5NzcsIDAsIDc4ODg5LCA3NDU2MSwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAxMTkzMDMsIDk4MzQ0OSwgNzU1NywgCisgICAgMTE5MzM5LCAxMTkzMDEsIDgyMzQsIDcyNDEsIDAsIDEyMDY3MSwgMTE5MTY3LCAxOTQ5OTYsIDEyODExLCA2NTkyNSwgCisgICAgMzk0NiwgNzgwNzgsIDEwOTk4LCA3ODA4MCwgNjczLCAxOTQ4NjcsIDY0Mzk3LCAxMjgyNzYsIDc0NTk5LCA3ODQ0OSwgCisgICAgODg5MCwgMTk0OTc3LCAxOTQ5NzYsIDI0NDgsIDc4MDg1LCAxMDI2NywgODQyNCwgMjQ1MiwgNzgwODMsIDEyODgyNCwgCisgICAgODcyOSwgNzg0NTYsIDAsIDc4NDUsIDkxNzkxNywgNzEzMDIsIDQ0MDgsIDQxMjIsIDY3NzIsIDExMDM5LCA4NzIzLCAKKyAgICAxOTQ5OTAsIDcxMzEwLCAxMTkzMDIsIDczMSwgMTE5MzA0LCA5MjI4NiwgMjQzOCwgNjQ4NTUsIDExOTMwMCwgMTE5Mjk5LCAKKyAgICAxMTc1LCAwLCA0MjEzNSwgMzczLCAxMTkxNzIsIDIxMTksIDExNDU3LCAxMTUyMSwgNzcyMywgMCwgMCwgMCwgNDE5NTIsIDAsIAorICAgIDUyNzMsIDIxMjcsIDUyNjksIDYzMzcsIDUyMDIsIDI0MDQsIDUyNjcsIDQyODIzLCAxMTI5MSwgMTk5MTUsIDUyNzcsIAorICAgIDEyOTYzLCAxMjc4NjQsIDYxODksIDQxMjUsIDEzMTQsIDEyMTMzLCAxMjAzNDAsIDExODg3MywgMTI3MSwgOTgzNjQwLCAwLCAKKyAgICA2NjAyNCwgNDE0ODIsIDM4NjQsIDc0NTM5LCAwLCAzODc5LCAwLCAxMjk3OCwgNDE2NiwgNDU3NCwgMCwgNzU2NywgNzQ1OSwgCisgICAgOTgzMTYwLCA0MTM5MCwgNTM4NCwgNDE4ODIsIDY3NjQ3LCA5MjU0OCwgNTc1OSwgOTgzOTEyLCAwLCA0MTM4OCwgNjQ0NDYsIAorICAgIDQxMzkyLCA2NDI4OCwgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDk4MzE4NywgNzAwLCAwLCA1NTUzLCAwLCA3MDg4LCA1MzU2LCAKKyAgICA3NDk5LCA2ODAwNywgNjY1OTYsIDc0MDY2LCAwLCAxMDI2MywgNTU1NCwgMCwgMTIzNDQsIDEwMzExLCA3ODExMywgNjY2NSwgCisgICAgOTI2MjYsIDAsIDc2MTgsIDg1MTcsIDExNDU1LCA3ODQ0MCwgNjQ2MzIsIDY0NDQ3LCA1NTU1LCA3ODA4OCwgNzgwOTMsIAorICAgIDc4MDkxLCAwLCA0MjgwMywgNjUwMzMsIDkxNDMsIDY2NjgsIDE5NTA2NywgNjc5OTUsIDE5NTA2OSwgNjU2LCAxOTUwNzEsIAorICAgIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgMCwgMCwgOTgzNjQ5LCA0MjY5LCA3Mzg4NSwgOTE3Nzc1LCA0Mjg0NiwgNjk2NDQsIAorICAgIDk1MCwgMCwgOTIyNzMsIDY2NTgwLCAxMTg4OTUsIDY2NjgzLCAxMDU1NCwgOTE3Nzc4LCAxMTkxMjEsIDAsIDUwOTgsIAorICAgIDkxNzc3MCwgMCwgMTE5MDk5LCA1MDk3LCA0OTM1LCA5ODQ4LCAxMDM4MSwgMCwgMTI4ODcwLCA5ODM3MDEsIDM2NTEsIDAsIAorICAgIDEyMDczMCwgMTI3NTU2LCA1MTAyLCA1MTAxLCAxMDI2OSwgMTI5ODMsIDgxMzgsIDQ1MTcsIDE5MzIsIDUxMDAsIDE0MzksIAorICAgIDEyMDkzLCAxMjQ3LCAxMDAzNCwgMTk1MDY0LCA1MDk5LCA3ODM3MywgMTQ0MSwgNDIwODcsIDMwNjMsIDY1MCwgMCwgNzgzOCwgCisgICAgMCwgMTk1MDQxLCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgMTIwNzkwLCAxMjg1ODIsIDkwNzgsIDg1NDUsIDY2MzU2LCAKKyAgICAxMjg3OTksIDAsIDkxNTQsIDkxMTgsIDEyNjU0MywgMCwgMjY3NiwgMjI3NywgMCwgNzM4MTIsIDYxOTAsIDg1OTksIAorICAgIDE5NTA1MywgNjk5MTgsIDEwNzk1LCA5ODU3LCA3MDE0LCA5ODU2LCAxOTUwMzMsIDkyNjIwLCAxMjEyOSwgMCwgODQ4MSwgMCwgCisgICAgNjIwMiwgMTk1MDM1LCAxMDkyMCwgMTI4MjM3LCA1MjAzLCAxOTUwMzksIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIAorICAgIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIDY2NTcsIDIwNywgMTI4ODA2LCA0Mjc1LCAKKyAgICA3NDgxOSwgODU0LCA2ODE0NywgNzQzODEsIDAsIDc4Nzg2LCA1MTAzLCAxMjc4NjEsIDY0MzQ4LCA0MTM2OCwgNDM5NzQsIAorICAgIDQ4OCwgNjk4MTEsIDAsIDcxMzM5LCAxMDE1NywgMCwgNDMwMzQsIDExNDM4LCA2NDY3NCwgMCwgOTI2OTQsIDY4NDMxLCAKKyAgICA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDY5ODEzLCA0MTM2NywgNTEwNSwgMTI3NTA5LCA2OTcyMCwgNjQ3NiwgCisgICAgNTEwNCwgOTgzNzQ5LCAzMDQsIDMxNzYsIDExOTAxMCwgMCwgOTMyLCAxMjA2MzMsIDY1NjcsIDIzOCwgNjk2NTYsIAorICAgIDE5NTAxMSwgMTk0NTk1LCAxOTkwNSwgMTIwNTc3LCAxOTUwMTUsIDc4ODcwLCA0MTA0NCwgNjc2NDAsIDE5NDkwMiwgCisgICAgNDIwNTUsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAxMjU1MiwgMTk1MDE5LCA4ODAzLCAzMDksIAorICAgIDY2MjIsIDgxNTEsIDEwODU4LCA3ODcwNiwgNjc2MzYsIDAsIDEyNTY4LCAwLCAxMjU1MywgMTA4MTQsIDQzMjc1LCA2OTUwLCAKKyAgICA5NzEyLCA2ODY4MCwgNDM5NzAsIDk4MzE5OCwgNjUxNjUsIDkyNzI1LCAwLCA2NjQ2NiwgMCwgMCwgMCwgNjY3MjUsIDYxOTEsIAorICAgIDExMzUxLCAxMDQzNywgMTEzMTYsIDY3NjM0LCA0Mzc2MywgMCwgNDE3NTQsIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ5NzUsIAorICAgIDY4NDYyLCA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIAorICAgIDk0MDk1LCA5MTc1NDcsIDkyNjgyLCA2NzY3OSwgMTk1MDIwLCAwLCA3NzgxLCA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgCisgICAgMTIwNzcsIDAsIDY0NTg2LCA5MTc2MjAsIDQyMzk2LCA1NTI1NSwgMzQ3NSwgMTI4MDM1LCAyNDc5LCAwLCAzNjMyLCAKKyAgICAxMjA3MjgsIDEwNjk4LCA4Mzc2LCAzNjQ4LCAxOTQ5NjAsIDc0ODQ0LCA2NzYzOSwgMzYzNiwgNjc4OTQsIDM2NTAsIDg4MzcsIAorICAgIDY1MjI5LCAxODQzLCA0MjI4MywgNDMyNTAsIDQxNTYyLCA5MTAwLCA3NDU0OCwgOTE3NjMwLCAzNjQwLCAxMjcxOTAsIAorICAgIDQyMzIxLCA3Mjg0LCAxOTQ5NzQsIDE5NDk3MywgMTk0OTUwLCAxOTQ5NDksIDE5NDk1MiwgMTk0OTUxLCAxMjY2NDksIAorICAgIDE5NDk1MywgNDIwODAsIDI1MjksIDAsIDAsIDAsIDQyMDgzLCAxMjA2NzgsIDY4Mzk4LCAxOTQ5NTcsIDY3NjE5LCA2NjM2NywgCisgICAgMTk0OTU4LCA5NjM0LCA5MjM4MCwgOTk4OCwgMCwgNDEwNjgsIDAsIDQyOTUsIDY1MjY0LCA2ODAwNiwgMCwgOTI1NDUsIDAsIAorICAgIDc4NSwgODIzNiwgMTI4NjQ3LCA5MDI3LCA2ODE2MCwgNjc2MjMsIDY0MzgzLCAxMjAyNjUsIDkyNSwgMTI3MTU2LCAwLCAKKyAgICA0MTk4NSwgNDEwNzEsIDk1ODYsIDAsIDQxOTg0LCA5MjE3LCAwLCAwLCAwLCA5MTg2LCAyMDY3LCA0MDE2LCA5ODM4MDMsIDAsIAorICAgIDM4MSwgMTI5MzYsIDAsIDQyMDc3LCAwLCA2OTg4MCwgNTE4NCwgNDIwNzgsIDE5NDk0NywgMTA4MTAsIDEyODUzMSwgNDU4NSwgCisgICAgMTk5NDMsIDU4NjAsIDY3NjMzLCAwLCAwLCA4MTIsIDM2MTUsIDAsIDUxNzgsIDQ0MDAwLCAxMjA1NDgsIDc4ODA3LCA1MTg4LCAKKyAgICA3NDI4NywgNjc2MjksIDM2MDUsIDEwNjkyLCAxMTY2LCA2NDQyOSwgNDI2MzksIDkyNCwgMCwgNjc2MzEsIDQyNjE2LCAKKyAgICAxMjA2NzAsIDI0NDIsIDEwNzAzLCA3ODc4OSwgNjc2MzIsIDkxNzkyNCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgNjY3MDgsIAorICAgIDczOTMzLCA2NzYyNiwgNDI0MDEsIDAsIDY5ODcyLCAxMjczNzMsIDQyMjg4LCAxMjc1MSwgMCwgODU0MiwgMTMxNDUsIAorICAgIDE5NDk2MywgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAzODgzLCA2NDM4OCwgNDI0NzksIDAsIDQxMTE3LCAwLCA5MjU4MCwgCisgICAgMCwgMCwgNjc2MjQsIDAsIDEyOTAsIDAsIDY1NTg1LCAyNzE1LCA4MDYsIDY1MjA4LCA0MTg4NCwgOTE3ODgzLCAxMzE4LCAKKyAgICA2NDczMSwgMTI2NTc4LCAwLCAwLCA2NjMyNSwgMzQ2NSwgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCA5ODM3ODEsIAorICAgIDEyNzUyLCA1ODMzLCAxNDMyLCAwLCA0MTg4MywgNzM5MTIsIDk3OTksIDAsIDQxODg2LCAyNDgwLCAwLCAyMDYyLCAKKyAgICAxMjcyOTMsIDY0OTQsIDU1MzcsIDc4NjU2LCAwLCAxOTQ1ODcsIDAsIDEyMTEsIDAsIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIAorICAgIDAsIDY4MDA1LCAxMDYyMiwgOTgzNzc5LCAwLCA3ODY1NCwgNjU2NiwgNzg2NTksIDAsIDczNzgwLCAxMTkxOTYsIDY0ODY0LCAKKyAgICAwLCA3ODY2MCwgMCwgODI4NCwgMTMwODEsIDAsIDM1ODksIDQyMDUxLCA0MDM1LCA2NDkyLCA5MjIzNiwgNDI2NSwgNjY0MiwgCisgICAgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIDExOTIxNiwgMjQ4OCwgMCwgNDU4MiwgMCwgMCwgNDE3NzcsIDEyOTI2LCAKKyAgICA5ODMzNzcsIDc1MjgsIDEwNTUwLCAwLCA5MjcwNiwgMCwgMTA5NjEsIDAsIDEzNzQsIDY0ODc4LCAxMTkwMTQsIDAsIAorICAgIDQyMzg5LCA0MTM3NCwgMjI4NiwgMCwgNzg0OTIsIDQxMzc3LCAxMjc5MDksIDAsIDQwMCwgMTI1OTcsIDEyMDU4NiwgMCwgMCwgCisgICAgNjY2MSwgOTgzMTQ1LCA2NDgyNywgMCwgNzM4MTcsIDM5MCwgMCwgNzEzMDEsIDk4Mzg2MiwgMzQ3MywgNzcxOCwgMCwgMCwgCisgICAgMCwgNTUyODUsIDAsIDAsIDAsIDExOTY5LCA5ODMzOTAsIDEyNzg0MSwgNjM2NSwgMTg4NywgNjc2MywgOTgzMzcwLCA4MDgwLCAKKyAgICA3MDA2LCAwLCA5ODMzNzEsIDY3NTcsIDY0MzUxLCAxNTQ0LCAwLCA2NzY2LCA2NDY3NywgMTIwNzE2LCA5ODMzNzIsIDYxNDYsIAorICAgIDAsIDc3MSwgOTgzMzczLCAwLCAxMjgxMiwgMTMxNjgsIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAwLCA5NTMsIAorICAgIDEyOTE3LCAxMTk1NjAsIDEyMzAwLCAwLCAxMTQ5MSwgOTcyNCwgMTAzNDEsIDk4Mzc3MywgOTUyNCwgNzQ5MCwgMTEzODksIAorICAgIDc0ODksIDMzNzksIDAsIDc0ODcsIDAsIDQ3MSwgNzQ4NCwgNzQ4MiwgNjc1MywgNzQ4MCwgNTc2NCwgNzQ3OCwgNzQ3NywgCisgICAgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgNzQ3MiwgMjQ3NCwgNzQ3MCwgNzQ2OCwgMTAyMzIsIDEwNjE1LCAxMDIxMywgCisgICAgMTI3Mjg4LCA5MjM1NywgMTAwNDksIDExODM0LCAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgMTI3NDgxLCAxMjAyMTYsIDEzMzA2LCAKKyAgICAxMDUzMywgNzg3MCwgNzM5NDksIDc2MjUsIDAsIDEyMDU0NCwgMCwgMCwgOTI2NjAsIDAsIDAsIDAsIDE5OTYxLCAyNDcyLCAKKyAgICA0MjY2NSwgOTIzNDEsIDAsIDIxMzksIDQyNTYsIDEyMDc3NiwgNzQzODAsIDAsIDQyNjc1LCA0MjY1OCwgMTI4NDUsIDAsIDAsIAorICAgIDY1MTM4LCAxMTkzNTUsIDY3ODYyLCAwLCA2NTY3MSwgNzA4MywgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgCisgICAgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCA0NDUsIDEyMDU2NiwgMTI4MzA4LCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgCisgICAgOTgzMTUwLCAxMjAyMTUsIDAsIDM5MDIsIDAsIDE3NzAsIDAsIDEyODg2NiwgMTU2MCwgMTIwMjA5LCAxOTQ5NzIsIDQ1ODQsIAorICAgIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIDExODkyOCwgMTExOCwgNzEzMzQsIDAsIDAsIDEwODEsIDc0MzYsIDY4NDIwLCAKKyAgICA3MjUyLCAwLCA1OTk2LCA2OTkyMSwgNDkwMywgMCwgNDEzODYsIDUxNjIsIDExOTE4OSwgMTMzMCwgMCwgNzEzOSwgMCwgCisgICAgMTIwNDcsIDQxMzg0LCAwLCAwLCAxODQ4LCA0MzM0LCA2MzI0LCA0MTk3NSwgNjQ3NzcsIDEwNjc0LCAxMjMwOCwgMTIxODYsIAorICAgIDAsIDAsIDk4Mzc0MSwgMTI3MTUsIDY4MDAyLCA5ODM0NzksIDEyNjYzMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgCisgICAgMTE5MTU3LCA2ODAwMCwgOTI0NjQsIDAsIDEyNjk4NCwgNjgwMDEsIDkzMzQsIDkyNzA1LCA5MjMxNSwgNzAxMDEsIDc5NzUsIAorICAgIDAsIDc3OTU3LCAwLCA2NjYyMSwgNDg4NCwgNjY1OTcsIDY5NzMyLCAwLCAwLCA2MzEzLCA2NTUxMywgNjk4NTcsIDAsIDAsIAorICAgIDAsIDIzNDUsIDQzNjk3LCA0NjMsIDAsIDAsIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgOTgzMzg3LCAwLCA0MjI3OSwgCisgICAgMTk0NTc3LCAwLCA3ODQxNSwgMCwgMTk1MDA4LCA5ODMzODQsIDEzMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA1NjYzLCAwLCAwLCAKKyAgICAwLCAwLCAyNDgyLCAxNDcxLCAwLCAwLCA0MjI0NywgMTIzNzgsIDczOTI1LCA2OTY2NCwgMCwgMTIzNzQsIDAsIDAsIDAsIAorICAgIDk4MzY5NCwgMjQ2MCwgMCwgMTE5NDQsIDEyMzc2LCAxMjc4NjgsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCAKKyAgICA1ODcwLCAwLCAyMDI0LCAxMjcxODAsIDAsIDAsIDUzOSwgMCwgMTI3NzY1LCA5NDA1MiwgMzg1MywgNjUxODAsIDEyNzkyMywgCisgICAgMTIwNzk2LCAxMjAyNDUsIDkyMzI0LCAwLCA4NjU5LCAwLCAxMjQ3NCwgOTI1NzksIDk1MDMsIDE5NDk2OSwgMjQ3OCwgMCwgCisgICAgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIDY5NjMzLCAxMjAwODksIDEyNDcwLCAwLCA3NDE4OSwgMjc0MiwgMTI0NzYsIDExNzk4LCAKKyAgICAxMDk0NiwgMTI3MzEwLCA1MDAwLCAwLCA5ODM1NzksIDAsIDY5NjcyLCA4MjEzLCA3NDAxNywgNzc3MSwgNjE2MSwgNjgwMTgsIAorICAgIDY3MDksIDAsIDc4ODg1LCA5ODM3MDgsIDEyNzk3MSwgMTIwNTgyLCA3ODU0NywgMCwgMTAzMDEsIDEwMzMzLCAxMDM5NywgMCwgCisgICAgMCwgNzM3OTEsIDAsIDAsIDAsIDAsIDExOTEyMywgNDAxNCwgMTI4NDIsIDczOTUyLCAxMjAxNSwgMTI3MjkwLCA4Mjc1LCAKKyAgICAzODkzLCA5ODMyNjQsIDAsIDEyMjEwLCA3MjIxLCA0MjE0NywgMCwgNzQ1NTAsIDc0NDY1LCA2NDc0NywgMTE4ODQxLCAwLCAKKyAgICAxMjUxNiwgNDQ0NCwgMCwgOTIyNzEsIDc0NTM3LCAxMDg5MiwgODIzMSwgMCwgNjQ3MywgNDE5NjgsIDc4Mzg4LCA0MTk3MywgCisgICAgMzU5MSwgNDE5NjksIDAsIDI0NTMsIDEyODU0OSwgOTI2NjYsIDY0NzA1LCAwLCAwLCAxMDM0OSwgMTA0MTMsIDQzNTkxLCAKKyAgICA0MTk2MiwgMzIwMiwgNzQzNTMsIDAsIDgzMTYsIDAsIDAsIDk0MDYwLCA2ODcsIDAsIDAsIDAsIDE4NDAsIDAsIDY4NjcxLCAKKyAgICAxMTk4MDksIDQ4ODMsIDI4NSwgNDcyMywgNzAwOTksIDkyNjkyLCA0NDU5LCA3NDU3NywgNDI5MjEsIDQxNzIwLCAxMTA4OSwgCisgICAgMjQwLCAxOTkwNiwgMCwgNDIzMjMsIDAsIDk3NDMsIDEyMDIzMiwgMTMxMzQsIDEyNjUzNSwgMCwgMCwgMCwgMCwgNDI2MzQsIAorICAgIDk4MzM0MywgNDM0MzcsIDMwODEsIDExNDYzLCAxMjAxNTQsIDAsIDAsIDEwNDQ1LCAwLCAwLCA2NjcxNywgMjYxNCwgOTEyNSwgCisgICAgMTE5MDIzLCAxNzI5LCAwLCAxMjAyMzYsIDY1MjIxLCA2Mzg4MywgNDMzMzQsIDY0ODUyLCAwLCA2NTE5NCwgNjYyMDEsIDAsIAorICAgIDY2NTc4LCA1MDAxLCA0MTg3OSwgNzQ0MjcsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIDYzODc5LCA0OTQzLCA1MTUwLCAKKyAgICA3Mzg4OSwgNzQxODIsIDEyNzkxNSwgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCA5MTc5NTIsIDEyMDA4MywgCisgICAgNjM4NzMsIDg0OTEsIDAsIDAsIDk4MzYyMywgNDUzMCwgNDI0MDksIDcxMjYsIDE5NDU3NSwgMjcyMSwgMTIwMDc0LCAKKyAgICAxMTkwOTYsIDE5OTI5LCAwLCAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIDEyMDA3NywgMTIwNTMwLCA2NjE3OSwgNDI0MTIsIAorICAgIDY1OTQxLCAxMzExNCwgNjQ1MjIsIDEwNzQwLCAzMDk0LCAwLCA5NzU0LCAxMTkxMDIsIDQ0MzcsIDczOTQ4LCAxMjcwNzQsIAorICAgIDk4MzIzOCwgNTUyODAsIDQyMTc0LCAxOTQ5MjUsIDQyNDMwLCAwLCAwLCA0MjM1NSwgNjYwMjYsIDQzMDYsIDQxMzgwLCAKKyAgICA2ODQzMiwgOTI1ODYsIDAsIDY2NjY3LCAxMjczMDksIDAsIDEyNjUyMSwgNDIyMDAsIDQyNTY2LCAwLCAwLCA1MDg4LCAKKyAgICA2OTQ4LCAwLCA4NTI0LCAwLCAwLCAxMjM4NSwgMCwgMCwgNjk2NDYsIDEzODYsIDY0NTgwLCAxMTQ4MCwgNjExNiwgNjUwMzksIAorICAgIDY1MDM4LCAxMjM5MiwgNjUwMzYsIDgwNjQsIDAsIDEyMTAxLCA1ODIyLCAxMTkwMDQsIDIwODAsIDcxMCwgNzc5OTksIAorICAgIDExNjYzLCAxNjY2LCA0MjA5MSwgMTE5NjU3LCAxMjM4MywgNDM2NzEsIDQyMDkyLCA2ODQxOCwgNDI4OSwgMCwgNjM4OTYsIAorICAgIDEyMDYxLCA0MjA5NiwgNDM2MjEsIDMzNjIsIDEyMzc3LCA5ODM4MzIsIDk4MzgzNCwgNjg0NDksIDc0NjEsIDczOTAxLCAKKyAgICAxMjQ0LCAzMzEsIDczNzg2LCAxMjY4MywgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCAwLCAxMjM3OSwgMTk0ODc3LCAKKyAgICAxMjA4MTgsIDQxOTY0LCA0MjIwOCwgNjM4NDMsIDIwODQsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgNjM4NDAsIAorICAgIDc4NTQ5LCA0MTIyMCwgMTMwMzIsIDAsIDU4NCwgMTI5MzMsIDQzMTc3LCAxMjM3MywgNjk4NTUsIDEzMDAwLCAxMzUxLCAKKyAgICAyOTM1LCA4Njk4LCAxMjY2NSwgMCwgMTkzMCwgMCwgNzgyMjksIDEyNDI3LCA2NjUxNCwgNjk4NTksIDEzMDMxLCAwLCAKKyAgICA2MzkwMSwgMCwgMzY1NywgMTI4NTcyLCA2NTIwMiwgNjAwMCwgMTE5MjA2LCAxMjQyNiwgMTI3MTgxLCAwLCA0MTc0MCwgCisgICAgMTI0MjgsIDQxMjgzLCA0MTkxNiwgMTE5MjEwLCAwLCAwLCAxMjQyOSwgNjcyNywgMCwgNzU2MiwgMCwgNTE3MCwgMCwgCisgICAgNDE3NTUsIDY3NiwgMCwgNjY3MDQsIDY2NjY0LCA5OTc4LCA2NjQ5MSwgMzUzNiwgMCwgOTc1MiwgOTIzOTcsIDYxNjIsIDAsIAorICAgIDY5MjI4LCAxMDExMywgNDE4MjksIDY1ODg2LCA1MTU5LCAxMjQyMiwgNDE4MzIsIDQzOSwgNDMwNzcsIDAsIDQyMjA3LCAKKyAgICA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgMCwgNjc4NjQsIAorICAgIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgNjk4MDUsIDM0MSwgMjcyNywgNDEyOSwgMzUzOSwgMCwgNjM4NjEsIDAsIAorICAgIDc5MTMsIDAsIDYzODU5LCA0MTMxLCA2Mzg2OCwgMCwgNjM4NjcsIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIDAsIDc0NTYwLCAKKyAgICA0MTM3LCA4MDgyLCA3ODUwNiwgMTE5MDYyLCA3ODUwNCwgNjcwNCwgNDU5MSwgMTI4MDI5LCAwLCAwLCA5NjgwLCAwLCAKKyAgICAxMjA2MjMsIDU2MSwgMTIxNTksIDE5NSwgNzg1MDgsIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgNDI2ODcsIDgzNjgsIAorICAgIDAsIDQxNDk5LCAwLCAwLCA0MjI0MiwgNDE0OTgsIDkxNzc5NCwgNDIwMjUsIDc4NTY1LCA2NTgwNSwgNDI0NjMsIDAsIAorICAgIDI5MjQsIDAsIDEyMDUxMCwgMCwgMCwgMTE5MjEzLCA3Mzk0MSwgMCwgNDIzMzAsIDkxNzc4NCwgMzk2OSwgMCwgMCwgNzE2OSwgCisgICAgMTk5MiwgOTY1MiwgNzM5NzcsIDcyNDYsIDQyMDg2LCAxMjY2MTUsIDIyMTksIDAsIDAsIDEyODgwMSwgMTk0ODM3LCAwLCAKKyAgICAzMjcsIDAsIDkwNDIsIDkxNzc3NywgOTE3Nzc2LCA2NTE0OCwgMTI0MzMsIDkxNzc4MSwgMTI3Mjc2LCA5MTc3NzksIAorICAgIDEyNDMxLCA4NjY4LCAxMjQzNCwgOTgzODM1LCA5MTc3ODIsIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAxMjgyNDMsIDQzNjUzLCAKKyAgICAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAxMjgwMTQsIDQyNDIzLCAxMTkwNjYsIDAsIDEyODEwOCwgNjY3MDksIDAsIDg4MTEsIAorICAgIDkyNywgMCwgMCwgMTI0MzYsIDk4MzI0NSwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgNjUxNDMsIDAsIAorICAgIDE5NTAxNiwgMCwgNzgxOTcsIDExMzQ4LCAwLCA3ODAzNywgOTE5NCwgOTgzMTg0LCAwLCAxOTkxNCwgMTIxNzksIDk4MzgxMiwgCisgICAgMjI5NiwgMTk0OTIzLCA2MzgzNiwgNjM4MzIsIDkxNzc3MywgMTA5NjcsIDYzODE2LCAyNTk0LCAzNDQ0LCA2MzgxNywgCisgICAgNjQ2NTEsIDAsIDQxNTAzLCAxMjc0NzgsIDExMjY1LCAwLCAxMjA3NTYsIDE5NDkyMiwgMCwgNTY2NCwgMzk3MiwgMCwgMCwgCisgICAgMCwgMTI4NTA4LCAxMjQxNiwgOTE3NzY0LCAxMTk2MDgsIDEwODE2LCA5MTc3NjksIDkxNzc2OCwgMTI0MTgsIDc0MTExLCAKKyAgICAzODgyLCA4NTMyLCA5MTc3NzEsIDE1NzMsIDEyODY0OCwgMTE5ODQ3LCA0NTk2LCA2NjMzOSwgMTI0MTcsIDY2MDAxLCAKKyAgICA2NTM0MywgMTI2NDkxLCAxMjQxNCwgODI4NywgNjgyMTksIDE5NTAxNywgNjgxMDgsIDExNDMsIDExOTE2OSwgMTE5ODQ2LCAKKyAgICAxMjQxNSwgNjYyNiwgNDI3NjMsIDAsIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgMTI3MTA0LCAKKyAgICAxMjY2MTksIDAsIDAsIDgwMjcsIDEwOTk3LCA5MTcxLCAxMjc0MSwgMTE0MDAsIDcxMzA1LCAxOTQ3OTksIDAsIDEyODIzOSwgCisgICAgMCwgMTI4ODgxLCAxMTk2MDQsIDEyNzUyMywgMTIwMTkwLCAxOTQ3NzMsIDY3NjA4LCAxMjgyMTQsIDQyMzY4LCAwLCA3NzE1LCAKKyAgICAzODgxLCA0MTQ4NywgMTIxMTgsIDQyNTE0LCA2ODY1MSwgMCwgOTgzODk1LCAzMDA5LCA0MTQ3NiwgNDE0ODksIDY5ODI1LCAKKyAgICAzMDA3LCAxNDQ4LCAzMDE4LCAxOTQ4MDksIDM4ODksIDg1MjEsIDUwODMsIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCAKKyAgICA5ODMyNDEsIDMwMTQsIDUwODEsIDY1ODUzLCAxMjA3MTUsIDAsIDY4MDE0LCA2OTk1MSwgNTA3OSwgNjQ4MDIsIDQyMjEwLCAKKyAgICA0NTk3LCA2NTUzMiwgMTE4MjgsIDEyMDE4NSwgMTIzNzEsIDAsIDg0MDcsIDAsIDEwODA1LCA4NTE4LCAxMDc3OSwgCisgICAgMTIwMTg4LCA3MTMwMywgOTgzOTMzLCAxMjM2NywgNDIxNzAsIDAsIDkyNTU3LCA2MjksIDE5MjQsIDAsIDEyMDM3LCAKKyAgICA3NDM2NiwgNTk4NywgODQ2MiwgODAwNSwgMTIzNjUsIDYzOTMzLCA2OTczNSwgMTIwODE1LCAxMjM2OSwgMTA2NDksIAorICAgIDY3OTgxLCA1MDc3LCAxMjAxNzQsIDEwODgwLCA2MzkyNywgNTA3NSwgOTE3ODgxLCAwLCA2NTA3NSwgMCwgMTEwMDcsIAorICAgIDk4MzcwNSwgNjY2NTksIDkyNjA3LCAwLCA2NjY4NCwgMCwgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCAKKyAgICA1MjcyLCAxMDQ5OSwgNDUwNywgOTU3OCwgNjM5MjMsIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIAorICAgIDk4MDMsIDAsIDQ1MDQsIDE1MDUsIDAsIDYzMjUsIDUyNzYsIDQzMDIxLCAxMjA0ODgsIDAsIDU1MjM2LCAwLCA2NjQ2MSwgCisgICAgNTE3NywgNDEzMjQsIDEyMDU1LCA4NzIyLCAwLCA0MTMyNywgMCwgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgCisgICAgODk0OCwgNDEzMjUsIDAsIDcyMSwgMTAxODIsIDkxMDgsIDcxMzExLCAwLCAxMTkxODUsIDQyMjI5LCAxOTQ5MTIsIDAsIAorICAgIDU5OTgsIDAsIDQyMzUzLCA3NDgyNSwgMCwgMTI1ODcsIDk0MTA0LCA3ODU3MSwgMCwgNzEzMjgsIDE5NDU2MiwgNDE1NzYsIAorICAgIDQyMjE1LCA3ODU3MCwgMTE5MjA3LCAwLCA4NTc4LCA1OTk1LCA3NTczLCA0MTU3NSwgNzQ3ODksIDc0NzUyLCA2Mzk0NCwgCisgICAgNjM5NDksIDY0NzY3LCAyNjcwLCA0MTY3LCAxOTQ3OTYsIDExNzIzLCAwLCA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNDM0MTQsIAorICAgIDczODU0LCAxMTczNywgOTcyMSwgMCwgMCwgMCwgMTE3NDIsIDI0MTksIDAsIDExNDkzLCAxMjMzNCwgMTk0OTEzLCA0MTUzLCAKKyAgICAxMjMwMiwgMTA3OTMsIDUyNTAsIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCAKKyAgICA2NTgwNiwgNDM5OTcsIDAsIDQyMDAyLCAxMjQwNCwgOTgzNTUzLCAwLCA0OTQwLCAxMjQxMCwgNzY4MywgMTE2NywgNzM3MjksIAorICAgIDQ5ODMsIDEyMDUwNywgODYxLCAwLCAwLCAwLCAwLCA0Mzc1NywgNDMzNzAsIDAsIDAsIDExOTU2LCAwLCAwLCAwLCA5NjE2LCAKKyAgICA2NjMxLCAwLCAxMjgxNiwgNDM3NTksIDQyMjE4LCAxMjcxMCwgNjg2NzQsIDEyNzIxLCA0MTAxLCA2NjE4NSwgMCwgNTk5MiwgCisgICAgNzYxNiwgMTk1MDQ0LCAwLCAxMjU3NywgMCwgOTgzODg0LCA4NTMsIDQyNjkzLCAxOTUwMTQsIDAsIDk4MzY0NywgNTAxNiwgCisgICAgNDM1MzUsIDYzODkzLCA0MjgzNSwgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA3MTA1LCAxMjc4MDcsIAorICAgIDY1MDYwLCAxMjA3OTcsIDk5MDAsIDc3NTAsIDAsIDE5NDkxOSwgMCwgMTI3ODMwLCAwLCA2NDc3OCwgMTI1ODUsIDEwNTY1LCAKKyAgICAxMjgxNTEsIDEyMTc3LCAwLCAwLCAwLCA3NzgyNCwgMCwgNDkwMCwgMTI3ODc0LCAxMjg3OCwgOTI2MzAsIDg5ODQsIDQxMTksIAorICAgIDc0NzY4LCA4OTcxLCA3ODU5MywgNDMxMTMsIDk3MDIsIDc4NTk0LCAxMTAyNSwgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIAorICAgIDc0MTg1LCA5MjQ4MSwgOTI3MTAsIDEyMzk3LCA3NzgyNywgMCwgMTMwNTQsIDEyMzk0LCAwLCAwLCAwLCAxMzA1MywgMCwgCisgICAgMzk0OCwgMTA3ODEsIDE1NDYsIDAsIDUwMTAsIDE2ODAsIDEwNTA3LCA3ODU5MCwgNzg1ODMsIDAsIDAsIDAsIDE5NDkxNSwgCisgICAgNzI2NywgMCwgNzQ4MzMsIDEyODE4MSwgNTk5MywgMjgxOSwgMCwgMTI3MDYsIDc3ODQwLCAxODkzLCA3MjY2LCA2MzkxNSwgCisgICAgNzI2NCwgNzI2NSwgMCwgMTM2MywgMCwgNjM5OTcsIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgNjk5MjksIAorICAgIDEyNTg5LCA0MTQ3OSwgMTI4MzEzLCAwLCA0MzMzOSwgNzM3NzYsIDk4MzYsIDEyMDcyNywgMCwgNDE0ODEsIDQzMzM1LCAKKyAgICA3ODMyLCA0MjM0MywgMzA5MCwgNDMzMzcsIDgxNywgMTY2NCwgMTg1MCwgMTI4ODQxLCAzMDc5LCAxMTM0MCwgNDI0MDgsIAorICAgIDQyNDQ3LCAxMjcxNDAsIDEyMDAyMCwgNDIzMDcsIDEyMzg2LCA0MjMwNCwgOTE3NTU1LCAwLCAxMjM4OSwgMCwgOTIzNjYsIAorICAgIDQxOTk2LCAxMTUyNiwgNjM5ODUsIDU4NjQsIDExNDcsIDYzOTkyLCA0Mjg4NywgMTk4NywgOTI3MTgsIDU0ODAsIDc4NTgsIAorICAgIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCA0MTY4NiwgNjM5MDUsIDExOTYwMSwgCisgICAgMTk0Njg4LCA5ODMxOTAsIDAsIDEyNjQ5LCAwLCAwLCA4MjQ3LCA1MDcsIDkxLCAyMDQyLCAxMjA3NzUsIDQzNjQzLCAKKyAgICAxOTQ2ODksIDY2MDI4LCAxMDAzNiwgNDE4NDQsIDExOTgxMywgNzc0LCAxMTk4MjksIDAsIDExOTgxNSwgNTk5NCwgMTI1MzksIAorICAgIDAsIDc4Mzc1LCAxMjA1OTcsIDExOTgzMywgOTgzMTA1LCAxMTk2MDAsIDAsIDAsIDc3MTksIDYwMjYsIDI0ODYsIDEyODMxMiwgCisgICAgMTE5ODA4LCAxNjIsIDAsIDY1MjE5LCA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDE5NDg4MSwgCisgICAgNTI2MiwgMCwgNTUyMzMsIDEyNjgxLCA0MjM3OSwgMCwgNzUzNCwgMTIyMTksIDAsIDEyNzUyOCwgNDI4MTAsIDEwNDkyLCAwLCAKKyAgICA5ODM2NjEsIDAsIDQzMTE5LCAwLCAxMjA3NTMsIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDEyNzI5LCAwLCAwLCAKKyAgICA3NDExMywgMjM0MywgNDEwMywgMTk5NDYsIDc0MTEyLCA3Nzg1MSwgMTMxMTIsIDAsIDE5NTAxMiwgMTI4NTksIDcwMDg3LCAKKyAgICAxMjAxNDgsIDY2MzY5LCA1ODYxLCAxMjc3NTgsIDExOTk5LCAxMjQwMCwgMCwgOTgzODM5LCAxMjY0NSwgNTE0NiwgMTEzMjAsIAorICAgIDY4NDEwLCA2NzQ4LCA2NTA0MCwgMCwgNjQxODQsIDEyOTc0LCA2NDE4MywgNjc2MTMsIDEyMDY0NSwgNTE0NywgMCwgMCwgCisgICAgNzQ1MjQsIDAsIDE5MjgsIDAsIDY3NjQ5LCA1OTkxLCAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIDY3NjEwLCA4MjQxLCAKKyAgICAwLCA3Nzg2OCwgNDIwNiwgMCwgMCwgMCwgMTI4Mjk4LCAwLCAxMDEzOCwgMCwgMCwgODg5NywgMTIwMjM0LCAwLCA4MzU3LCAKKyAgICA0MTI0LCA3Nzg2MiwgNjU4MzYsIDEyMDY0MSwgMTI3OTI2LCA3Nzg1OSwgMCwgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIAorICAgIDEyNDA1LCAxMjAxNTAsIDkyNjY0LCAzOTgsIDEzMjc4LCA5NzIzLCA2MzY2LCAxMjAzMTEsIDc5NDUsIDAsIDQ0MDIsIAorICAgIDk5NzAsIDEyNDAyLCA5ODMxMzYsIDQyMzkyLCAxMzA1LCAxMjQwOCwgMCwgNDQwMDcsIDAsIDAsIDQxNDY0LCAxMjQxMSwgCisgICAgMTI5NjksIDEyMDgyNCwgNDE0NjUsIDk4MzU2NSwgODUyOCwgMTU3NSwgMCwgNjM5NTUsIDE2NSwgMzAyNCwgNDE0NjcsIAorICAgIDExOTE2MywgMCwgOTA5MywgMCwgOTE0NywgMTI4Nzg3LCA2Mzk1OCwgMCwgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIDgyOTYsIAorICAgIDY3NTAsIDE5NTAxOCwgMCwgOTU5NCwgMCwgMCwgNDM1MjcsIDAsIDcyNywgMTk0NzAzLCAxOTUwMjMsIDU4MDUsIDAsIAorICAgIDY3MjYsIDAsIDQyMTc2LCAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDIyODAsIDAsIDEyMzcyLCAxMjA2NDIsIAorICAgIDEyMDMwNywgMCwgOTIzNDMsIDAsIDEyMzY2LCAxMDk2MywgNjA2NiwgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMCwgNjQ0NzgsIAorICAgIDE5NDcwMSwgMTA4MDMsIDQxMzIsIDEyMDMwNiwgNjg0NzQsIDkyNDczLCAwLCA5ODMzMTMsIDc0ODM3LCAxMjAxNTUsIAorICAgIDE0OTksIDAsIDgwNTUsIDQyNzQwLCA2Mzk2NSwgMCwgNjM5NjIsIDc0MDQyLCA4OTI0LCA0MzEyMywgNTk4OCwgMzY2MCwgCisgICAgNjM5NjksIDExNzgxLCA0MjcxOCwgODc4OCwgMTM1NywgNjQ4NTEsIDY1NzQzLCAwLCA4Nzc0LCAwLCAxMjcwODYsIDk5NDEsIAorICAgIDEyMDE3MiwgMCwgMTkzMywgNjk2NTUsIDk1NjQsIDAsIDkyNDM1LCA3Mzg2NiwgMCwgMCwgMjQ4NywgNjc2MTQsIDMxMjEsIAorICAgIDE4MDQsIDMzMTEsIDY3NjE1LCA3MDA4MSwgNzgzMDIsIDEyMjIwLCA2NzYxNiwgMTIwNTk4LCAxMjc0NzUsIDAsIDY4MjAwLCAKKyAgICA2Njc1LCAxMjgxNDQsIDAsIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCAKKyAgICA2NDY2MywgMCwgMCwgNDU2MSwgMjEwMSwgMTM5OCwgMCwgOTI1NTQsIDc0MDM0LCA0MTU2OSwgOTI2ODQsIDExNDA2LCAKKyAgICA4MTY3LCAxMjEyNywgMCwgODQwLCAwLCAxMjY1MTgsIDcxMDEsIDY5NjcsIDAsIDE5NDg5OCwgOTc5NiwgMCwgMzMzLCAKKyAgICA2OTg5MSwgMCwgODE0NCwgMjExNywgMCwgOTgzNTk1LCAxMjQwNiwgMCwgMTk5MzEsIDExOTA4OSwgNjY3OCwgNzc2OSwgMCwgCisgICAgMTI2MjEsIDAsIDEyNzM2NiwgMTAyMjcsIDQ3NjQsIDQzMTAxLCA5OTgxLCAwLCA0MDk4NiwgNDEyNywgNjY0ODcsIDAsIAorICAgIDQyMjAyLCAxMjc1NCwgMTk1MDIyLCAwLCAwLCA5NDA5NywgNjc1OTQsIDIwNDgsIDEyOTQ0LCA0MDUwLCA2NzU5NSwgCisgICAgOTE3OTY3LCA0MzEwMiwgMTA1ODEsIDEyOTg1LCA0NTMzLCAxOTUwMjEsIDc0MDAzLCA2NDkwLCAwLCAxMjAzOCwgMCwgMCwgCisgICAgMTIwNzA0LCA2NTQ2MSwgOTc5OCwgNjk3MDQsIDAsIDE5NDgsIDY5ODQxLCAwLCA5NTIsIDEyODIzNSwgMCwgMCwgMTIwODAyLCAKKyAgICA2NDQ5LCA5NDk0LCAxMjAzMTMsIDAsIDQzMDk4LCA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIAorICAgIDExOTk3MywgMCwgMTI4MTcsIDY3NTk3LCA2Njc2LCAzOTMwLCA0MjYxNSwgMCwgMCwgNjc1OTgsIDAsIDAsIDAsIDY1NTkxLCAKKyAgICA0MTU4MSwgNjU5MTYsIDE0NTMsIDAsIDAsIDAsIDg1MDAsIDQyMjIyLCAxMjAxNDIsIDczNzQzLCAxMjA0MDAsIDQzMTcsIAorICAgIDExNTQzLCA2NzY3NiwgNjQ2NzYsIDAsIDAsIDY3NjA2LCAxMTkwODMsIDAsIDQyMjE3LCAxMzEwMiwgMCwgNjYwMDMsIAorICAgIDY2NzIsIDAsIDAsIDAsIDk4Mzc0NywgNjM4NDEsIDk2MTMsIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgNjQ1MjAsIAorICAgIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCA2NDk1NywgMTEyODEsIDAsIDM4MDcsIDE0NjksIDY2NjQwLCAKKyAgICA2NTM4MSwgNDIxOTcsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCA5MDQsIDM1MiwgNDIyMjUsIDE0NTEsIDgwNjEsIDg0NTMsIAorICAgIDQxMzQsIDAsIDc0ODQ3LCA2NjU3NiwgMTI3OTE2LCAwLCAxMDUyMCwgODU3NSwgOTk2MCwgMTIwMSwgMTI3Mjg5LCAxMjg0NiwgCisgICAgMTI3MjkxLCAxMjcyOTIsIDExOTE5LCA2NDk2MiwgMTI3Mjg3LCA0MzczOSwgMTI3MjgxLCA4NTExLCA5NDYwLCA4MjMsIAorICAgIDExNTg3LCAxMjMwNSwgMCwgNjQ2OTUsIDEyNzMwNSwgMTIzODcsIDEyNTMsIDEzMTgzLCA2NTc2NiwgNTAwLCA0Mjc4MywgCisgICAgNjU3NjUsIDY0MjA4LCA2NDM2OSwgNjU3NjAsIDY1NzYxLCAxMTk1ODUsIDExNjA2LCA2NDc4NCwgMTE3MDIsIDY2NDk4LCAKKyAgICA5ODIxLCA2NDMwNCwgMCwgNTE1MiwgMTEwNDgsIDc1MzMsIDY4MzY2LCA2NDQxMCwgOTIzMDUsIDAsIDQzMjMsIDEyMDA2MiwgCisgICAgOTI2NjksIDcxMzMyLCAxMjcwNTIsIDQyNTg3LCA0MjIxNCwgNDEzOTQsIDAsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgCisgICAgNTI2MCwgNDMxNDMsIDk0MDM4LCAzMjYsIDEyMDEzMSwgNjg0MjMsIDAsIDEwNzcxLCAyODc2LCA3NDA3NCwgOTI1MzAsIAorICAgIDE5NDkyNCwgNDEzOTgsIDczODIsIDk4MDIsIDEyNzA3NywgMTI3MDc2LCA0NTMsIDQxMzk2LCAxMjA1MjQsIDQyNzIwLCAKKyAgICAxMjE0MCwgOTU3MiwgMCwgNzAwMywgMTk0ODgzLCA0MjMzNCwgNzcwNCwgMTI2NDkwLCAxOTQ4ODUsIDQzMTQ0LCA0MTIzLCAKKyAgICA4NDk0LCA0MzE0NiwgOTk3NywgMCwgMCwgNjU3NTksIDEwNzY1LCA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCAKKyAgICA0MTI2LCAwLCA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIDEyNjYwNCwgMTA0NjQsIDAsIDAsIDE5NDg2OSwgNjQ1MTQsIAorICAgIDExNTI4LCA2NDAyNCwgMTI4MDcyLCA2NzksIDY0MDEzLCAwLCA1ODUwLCA3NTgsIDc1MzYsIDAsIDkyMjM0LCA0MTQ0MSwgCisgICAgMTA2OTMsIDY0MDA2LCA5ODM1NjcsIDY0MDA1LCA0MDU4LCAxMTkwMTksIDEyNjQ4NywgNjQ2NjAsIDAsIDExOTA1MCwgMCwgCisgICAgOTgzMDY5LCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCA4OTcwLCAwLCA5OTM0LCA5ODMwOTQsIDEwNzc0LCAxMjgwMjAsIAorICAgIDQyMjAxLCAxMjQyMSwgMTI4MjE2LCAwLCAxODUyLCAzMDU3LCA2NDA0NiwgNzM3NDQsIDY0MDM0LCA2NDAzOSwgMCwgMCwgMCwgCisgICAgMTk0ODk5LCA5MjMyMiwgNzY0NSwgMTI4NTQsIDc0MzM4LCAzNDk2LCAwLCAwLCAwLCA5MTAyLCA2MjcsIDEyNzc5NSwgCisgICAgNjE1OCwgODMyNywgNzQ1NTMsIDY2NjMyLCAxMjQxOSwgMTMzMDksIDExNTcwLCAxMjc4MTEsIDE5OTYwLCAxMTY5NiwgMCwgCisgICAgMTAxOCwgMTE4OTcwLCAxOTQ5MDksIDE5NDg5NywgMTY4MiwgMTk0ODk2LCAxOTQ5MTEsIDQyNzU2LCA2NzY1LCAxOTQ5MDYsIAorICAgIDAsIDAsIDczODE0LCAxMTQxMiwgNjc2OCwgMTA3MjgsIDE5NDgzMCwgNzEzMTYsIDExODg2MywgNDMzMTEsIDY0OTY2LCAKKyAgICAxMTU3NywgMCwgNDMwNDAsIDE4MzMsIDExNTc2LCAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAKKyAgICAxOTQ4NDgsIDc1MzUsIDgwODUsIDQyNTI1LCAxMjAzODcsIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAKKyAgICAxMjA0ODksIDE5NDcxMSwgNjQ0ODMsIDY1NjkzLCAwLCAwLCAwLCA2OTY5NSwgNDIyNDAsIDAsIDEyNjY1MSwgNDI4NjQsIAorICAgIDEyNjQ5OCwgNjQ2NjcsIDQxODY4LCAxMTg0LCAwLCA4MTUsIDExNDg0LCAxMjc1MzUsIDY3ODQwLCA5ODM2NTEsIDAsIAorICAgIDY2MTk3LCAwLCAxMDk4NiwgNjQ2ODMsIDk4Mzc4NSwgMCwgMzQ1NSwgMCwgMCwgOTg3OSwgMCwgMCwgNDE1OCwgMTI4MDUwLCAKKyAgICA2ODE2NiwgMCwgMCwgMCwgMCwgNjk2NDUsIDMzMiwgMTE4ODA4LCAwLCA1MTQyLCAyNDA3LCA2OTY0MywgNDIxOTksIDAsIAorICAgIDkyNDA0LCA3NDM3MywgMCwgNTUyMTcsIDAsIDYzODcwLCA0MzE2MywgMCwgMCwgOTIzOTAsIDQyODY3LCAxODM0LCAwLCAKKyAgICA5MjQ2MSwgNjk4MTcsIDEwOTQwLCA2NTI0OSwgMTE5MDQwLCA4NjYyLCAwLCAwLCAyNjUyLCAxMjA1MjcsIDcxNjQsIAorICAgIDEwNzg0LCAxOTUwOTMsIDY3Njc0LCAwLCA5MjIzMywgOTI0ODIsIDE5NDc0OSwgNzQ1NjIsIDkxNzUwNSwgMTgyOCwgCisgICAgNzQ0NzQsIDEyMDMyNywgNzg2MjAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgMTE4ODU0LCA2NTIzOCwgNjgzNzQsIAorICAgIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAxNjIwLCA2NDQzNiwgMzYwMSwgCisgICAgMTk1MDk0LCAxMjgwNzMsIDk4MzU2MiwgNjA5LCAxMTU1NSwgOTgzMDk5LCAxMjQ5NiwgMTI3ODM5LCA3NDE4MSwgNDM0MywgCisgICAgMTI1MDUsIDAsIDEyNzg2MywgMCwgMTEzNzcsIDIzOSwgMCwgNjM3LCAwLCAwLCA0MjY3MSwgMCwgMCwgMCwgNDM1NjUsIAorICAgIDcxMzA2LCAxMjY0OTMsIDEyNjk2LCAxMjgyNTYsIDAsIDk0MDYyLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCA5ODMyMDYsIAorICAgIDQyODE4LCAxMjY2MzIsIDAsIDEyMDQ5MCwgMCwgMTE5MTM3LCAxNTA2LCA0MzU2MiwgMCwgOTI0OTEsIDAsIDEyNjUxLCAwLCAKKyAgICA2NDYyOCwgNzQ1MTcsIDEyMDU4LCA3NDA4NCwgOTE3ODM4LCA3NDk0LCAwLCA0OTI0LCA2NTU5MiwgMTE4ODQ0LCAwLCAKKyAgICAxMjcwODgsIDM1NSwgOTcxOSwgMTI3MDg3LCAxMzA2NiwgNjQ3OTYsIDAsIDAsIDEyMDMzLCA0MjE3OCwgMCwgNjk3NjAsIAorICAgIDQyNTcxLCA5MjYzNSwgMCwgMCwgMCwgMCwgMCwgMTI3MTc2LCAzMTc4LCAwLCAwLCA5MjcwNCwgMCwgOTA4MCwgMTI3MDAwLCAKKyAgICAxMjAzNTIsIDAsIDY4MjA5LCAwLCAxMTA4MiwgMCwgNTY5OSwgMTk1MTAwLCA2NjAwMCwgOTQ4OCwgNjUxNjYsIDExOTExMiwgCisgICAgMCwgMCwgMCwgMCwgNzEzMTMsIDAsIDUyNjUsIDY5MjM1LCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAwLCA0MzA0NSwgMCwgCisgICAgMCwgNDMzNDUsIDAsIDEwNzcwLCAxMTg5OTQsIDY4MDcsIDQ2NSwgOTgyOSwgMCwgNzQzNDgsIDAsIDQzMzQ2LCA4MTE2LCAKKyAgICA3OTUsIDAsIDAsIDEyNDYyLCAxMDkzMCwgMTA4MzEsIDAsIDExODk1MiwgNjQzNjIsIDc0MzM0LCA5ODM2MDIsIDEyMDgxMSwgCisgICAgMCwgMTI0NjgsIDg2MDcsIDEwMDgsIDAsIDEwMDkyLCAxOTUwNzgsIDkxNzg0MiwgNjc4NTUsIDU1MjU3LCA3Mzc3MSwgCisgICAgMTc2NiwgMTEyODIsIDExOTk2LCAxODIwLCA0NTQ3LCAwLCAwLCAwLCAwLCAxMzIyMywgMTI4NjY1LCA2NDU5NSwgMTI3Mjk0LCAKKyAgICAwLCA5MjMxMSwgNDM0NSwgMTI2MTYsIDAsIDAsIDAsIDc0NDY3LCAwLCAwLCAwLCA1MzgyLCAwLCAwLCAwLCAxMTkwNjAsIAorICAgIDY0OTUzLCA1NDA2LCAxOTkyMCwgNjk4OTcsIDY2NTEwLCAzNTkwLCAxOTQ4NjQsIDExMzAsIDAsIDAsIDQyMDE2LCAxMTgyMywgCisgICAgNDMwMjMsIDAsIDExODg5NiwgNzc0MiwgMCwgMTMyODAsIDcxMzIzLCA5MzI2LCA3MzgyNiwgNTMxMCwgNzQ4MTIsIDc4NTg0LCAKKyAgICA5MjIyOSwgODk1OSwgNDM1ODksIDY3NDcsIDY2NzIzLCAwLCA4NTY4LCAwLCAxMjA0OTYsIDczODE2LCAxMjA4MDMsIAorICAgIDk4Mzg0OCwgNDI2NzAsIDAsIDExNjIxLCAxMjQ2MCwgMCwgMTIwNjMxLCAwLCA0MzA2MywgNzQ1MTksIDEyNzE4MiwgMCwgCisgICAgNzM5MTcsIDc4NDMsIDY5NzgzLCAxMTY4OSwgNTQxMCwgNTc4MywgMTA0NjgsIDg0MDMsIDU0MDAsIDExNTk0LCAxMjgyNDcsIAorICAgIDAsIDExODk5MCwgMTA0OTEsIDY5ODQyLCA2NDQxMiwgMCwgMCwgNTU4NywgNDI4NjUsIDY0NDA0LCA4MjY4LCA0OTIzLCAKKyAgICA2NTA4NiwgODk4MSwgMTIzODIsIDQyMTMzLCAxMjA3NTUsIDk3MDYsIDY5NzM4LCAwLCA2NjYxMCwgMTA0NjEsIDEyMTAzLCAKKyAgICAwLCA4NjQyLCAwLCA0Mjc2NiwgOTgzODY2LCAyMjEwLCA5OTgzLCAwLCA5NDAwOSwgMCwgMCwgMCwgNzM5OCwgNDE1MTUsIDAsIAorICAgIDExODAyLCA4MDQxLCAxNDYxLCA5MTAsIDExOTEzMywgMCwgNjc0OSwgMzY1OCwgOTM5NjQsIDEyMDUyNSwgMCwgNzYxNywgCisgICAgMTk0ODQxLCAxMjg4OCwgMTI3OTgzLCA2NzY2OCwgMTMxNDMsIDAsIDkxOTMsIDExMDk3LCA1NzAzLCAwLCA0MTUxNywgCisgICAgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIDAsIDY1ODY0LCA2MjMsIDc4MSwgNjcwLCAxMDY2MCwgNTc2OSwgNjEzLCAKKyAgICA3NTQzLCAxMjAyNzksIDQ3NywgNDEwODMsIDkyNTIxLCAwLCA1OTIsIDE1NzgsIDEyNDU5LCA0MzQ0OSwgMCwgMCwgODIyNSwgCisgICAgMCwgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIDEyNjQ3MiwgMTI0ODAsIDQzMjQzLCAKKyAgICAwLCAzOSwgMTI0ODcsIDAsIDEyMDUyOSwgNzQxOTksIDEyNDgyLCAwLCAxMjQ4OSwgMCwgMzE5NSwgNTU1MCwgOTgzNTU0LCAKKyAgICA3ODk3LCAwLCAxMjAzLCA3NDM5NiwgMTgxMywgNjQ1NDQsIDQxMzExLCAxMjA5MCwgMCwgMjg3NywgMCwgMCwgMTY3NSwgCisgICAgNjk4NDAsIDAsIDAsIDAsIDEwMDcwLCAxMDU5NSwgMCwgMTE5MDc3LCAxOTQ3NzcsIDk4MzYxMSwgMCwgMCwgMCwgNDMyNDQsIAorICAgIDAsIDAsIDk4MzkxNiwgMTE5NTYxLCA5ODMwNzgsIDAsIDE5NDkyMSwgMTI4MTYwLCA5OTM5LCAwLCA5ODMxNTEsIDc3ODYwLCAKKyAgICAwLCAwLCAyNzAsIDAsIDEwNzE0LCAwLCAwLCAwLCAwLCAwLCA2NTM3MiwgMCwgNzQwMzgsIDExOTU1OCwgNjI3MywgNjY2NzksIAorICAgIDM2NCwgOTU5NSwgMTk0OTA4LCAwLCAwLCA3MDcsIDAsIDAsIDkyODIsIDY2NDg5LCAyMjQsIDAsIDY4NjcwLCA5MzMyLCAKKyAgICA0OTY2LCA2ODY3NywgMCwgNjg2NDQsIDAsIDM4NDEsIDY4NjM0LCAwLCAxMDczMiwgNjg2NDAsIDg1MCwgNDk3MiwgMCwgCisgICAgMTI4OTAsIDI5MDksIDY4NjE5LCA0NDAwOCwgNjg2MjcsIDk4MzcxOCwgMTE1NDQsIDEwMjAzLCA5NjA4LCAwLCAwLCAKKyAgICAxMTk2MiwgMTk0Njk0LCAxMjUwNywgMTE5NiwgMTI4Njg3LCAxMjgzMTEsIDc3NywgMTIwMTg3LCA0Mzc1LCA2NTI3MSwgCisgICAgNjc2NzgsIDAsIDEyMTk4LCAwLCA2NDgyNCwgMTE5MzQzLCA5ODMyMzYsIDk0NTQsIDYzNzc4LCA4NjU4LCA0MjUyOCwgCisgICAgNzgwMDAsIDI3MDUsIDkxNzk3NSwgNDE1MjAsIDAsIDAsIDExOTg2LCA3NzY1LCA0MjUwMiwgODI4MCwgNzQ1MjAsIDI3MDEsIAorICAgIDAsIDEyNzAwMiwgNTc2NywgMCwgMCwgOTgwOSwgODM1MywgNjM3NDcsIDY2NzAxLCA2Mzc3MiwgOTgzODE0LCA2Mzc0NSwgCisgICAgMTc0OCwgNjM3NzAsIDAsIDAsIDAsIDY1NTQyLCA2Mzc2NiwgNTUyNDQsIDMwNjEsIDAsIDYzNzY0LCA2Mzc4NywgOTA2NywgCisgICAgNjA5NiwgMCwgNzY5NCwgMCwgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAwLCAxMjc1MjIsIDEyMDYyOCwgNjM4MDcsIAorICAgIDE1OTEsIDAsIDYzODYsIDYzNzgzLCAwLCAwLCA5MjUzNSwgMCwgMCwgMCwgNzQ1NzUsIDAsIDY1NzE5LCAxMzA4MywgCisgICAgNjQ1NzQsIDY1MDEyLCAwLCAxNjQwLCAxMjQ5NSwgNjY2OTEsIDc2MjQsIDMxMzgsIDEwOTk2LCA5MjI0NywgMTkyMiwgMCwgCisgICAgMTI0OTgsIDEwOTg3LCA2OTkzNiwgNjk5MzksIDM4OTQsIDY1NTQzLCAwLCAxOTQ4NDIsIDk4MzU4OCwgNDkzLCAwLCAKKyAgICA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgNzQwMjAsIDAsIDkxNzkzNSwgMTAzMzUsIDM1MjAsIDkxNzkzMiwgCisgICAgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA0MjY4MSwgMTAwMiwgMTI0OTEsIDAsIDY0OTExLCAKKyAgICA5MjYxNSwgMjA5NiwgNjUxMjAsIDAsIDc4MjE5LCA5ODMwODEsIDgzNzgsIDExNjMyLCAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgCisgICAgNjYyMjEsIDY2MjI2LCA2NjIyOSwgMTMyMTgsIDY2MjMxLCA2NjIxNiwgODUwNywgNjYyMzYsIDY2MjExLCA2NjIxOCwgCisgICAgOTI2NzIsIDY2MjQwLCA3ODA0MSwgNjYyMzMsIDg5MjgsIDk4MzU1MiwgNzkwOSwgNjYyMzQsIDExNjA1LCA2Mzc1OSwgCisgICAgOTgzNjU0LCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgMTI4OTgsIDEyNDk0LCA3Mzc2MSwgCisgICAgMTI0OTIsIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMTI4Mjc4LCAxMjA2ODAsIDQ4ODIsIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCAKKyAgICA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIDYzNzk3LCA5MjM5NCwgNDIzNTgsIDAsIAorICAgIDcyOTIsIDAsIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCA0NzAsIDc4MDM4LCA3ODAzNSwgNzgwMzYsIAorICAgIDcwMDI4LCA3ODAzNCwgNDU3OSwgMTI4MDkwLCAwLCAxMjUxMSwgNzQ0NTMsIDEyNTE0LCAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgCisgICAgODYyMywgOTQwMTEsIDEyODA1MiwgMTI4MDQ4LCA3Mzc4LCAxMjUxMiwgMTE2MTUsIDYxMDQsIDAsIDAsIDY1OSwgNjA5OCwgCisgICAgMCwgMTIyMzQsIDEyNzMwNywgMTI3MDY3LCA4MzExLCAxMjUxMCwgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAKKyAgICAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDk4MzkyMCwgMCwgMCwgMjMyMywgMCwgMjMxOSwgNzc5MTcsIDEyNDc3LCA3NzkxNiwgCisgICAgMjMxMSwgMCwgNDQxNSwgMjM3LCA2MjgxLCAxMjcyODAsIDAsIDAsIDIzMDksIDEzMTIsIDgxNzMsIDEyODg3MSwgMTI0NjksIAorICAgIDAsIDc4NTA1LCA2NDMzNSwgMTA2MDksIDAsIDEyODExMSwgOTM5NywgMTE1MjQsIDkzOTUsIDkzOTYsIDkzOTMsIDkzOTQsIAorICAgIDkzOTEsIDkzOTIsIDkzODksIDYyMDksIDkzODcsIDkzODgsIDQ5MzIsIDkzODYsIDkzODMsIDkzODQsIDY3NDAsIDAsIAorICAgIDY1NDUxLCA4MTg1LCAwLCA5MTc4MzIsIDQzMDI0LCA0MzMzNiwgNjc2NTksIDIzMTMsIDEyODE2NywgNzk0OCwgOTIzNiwgCisgICAgOTI1NzEsIDAsIDAsIDEwNTcwLCA0MzQ3MywgNjI4OSwgMTA0ODQsIDAsIDAsIDExOTk4LCAxMjA4MiwgMTA5MjQsIDMxNDcsIAorICAgIDAsIDEyMDY4NCwgMTI1MjQsIDExOTA4MSwgMjMxMCwgMTE4MTgsIDkzODEsIDkzODIsIDkzNzksIDkzODAsIDkzNzcsIAorICAgIDkzNzgsIDkzNzUsIDkzNzYsIDE2ODMsIDkzNzQsIDk4Mzc3OCwgOTM3MiwgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCAKKyAgICA5ODM5NTgsIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgODc0NCwgNzI2LCAwLCA5ODM4MzcsIDQxNTUsIDAsIAorICAgIDAsIDQyMDMwLCA1MDA3LCAxMjUyMiwgNDMwODgsIDAsIDQ5NTEsIDEyNzgwNSwgMTI3MjQwLCAwLCA5OTIyLCA0MzMwOSwgCisgICAgOTgzODQxLCAxMjUyNSwgOTgzNDcxLCAxMjAxNiwgNjU3NzAsIDk1NDgsIDY3NjY1LCA0MDMsIDc4MjMwLCAxMjUwMywgMCwgCisgICAgMCwgMTEwMzAsIDAsIDkyNTY3LCA2NTY5MSwgNjM5OTgsIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDE5NDY2OCwgCisgICAgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgNDQwMjMsIDEyNTA5LCA2NDM5MywgNzg4MzAsIDMzODksIDEwNTg5LCAKKyAgICA2NjA4LCA0MTA0NywgMTIwMzIxLCA3ODM5NSwgNzgzOTQsIDc0MDY5LCA3Nzk5NSwgNzgzOTEsIDM2MDgsIDgyODEsIAorICAgIDEyMDMyMCwgMTEwNywgMCwgOTA3NiwgODg2MiwgNjk3NDMsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAKKyAgICAxMzIyMiwgNzQxNjUsIDc0NzgyLCAxMjY1MTQsIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIAorICAgIDk4Mzk0NywgNDk4LCA2NDQ3MSwgMTIwMzI0LCAxMjg1NjcsIDEyNTI5LCA4MDQyLCAwLCAyMzQ0LCAxMjUyOCwgODAzMSwgCisgICAgMjQxNCwgMCwgNjk3MTksIDMyMzEsIDAsIDY0MjIsIDY2NTEyLCA2OTY1MywgMTI1MzAsIDI1MzcsIDc4NDA1LCA0MTQyOSwgCisgICAgMTI2NTgsIDEzMDM2LCA2NTc3MiwgMCwgNzg3MzgsIDQxNDMzLCA0NzE5LCA0NjksIDAsIDQzNjMsIDMzMTMsIDQxNDI4LCAKKyAgICA3ODQwNywgMjAyMywgMTc3MiwgNzgyMjQsIDc4MjI1LCA2NTcwNiwgMTAwNTEsIDY0ODEyLCA3ODIyMCwgMCwgOTkyMCwgCisgICAgMTIyMTUsIDAsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIDk2MDcsIDAsIDk2NjMsIDk4MzIyOCwgMTE5NjM0LCA2NTAzLCAKKyAgICA0MTExMCwgMCwgMTQ5MSwgMCwgMCwgMTI3MzA0LCA0MTA2MSwgMCwgMTk0ODM4LCAxMjcxODcsIDY1MDI2LCA0MTk5MywgCisgICAgNDE1MDksIDExMDQ1LCA2NTAyOCwgNzg2MDIsIDY2NDc2LCA0MTEwOCwgOTczOCwgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCAKKyAgICA0MTk5MiwgNDE1MDYsIDAsIDQxNjg3LCAwLCAxMjA3MTcsIDEyNzc3NiwgOTk0MCwgMTI3Mjk5LCA3NjkyLCA5ODM4MzMsIAorICAgIDgwMDgsIDQxMTMxLCAzMzAsIDg1NjYsIDY1MDgzLCA0MTEzMywgOTgxNiwgMTI2NTE3LCAxMjUzMiwgNzg1NTAsIDc4NTQ2LCAKKyAgICAzNTA4LCAxMjcwNTgsIDQzMjM1LCAwLCAxMjcyOTgsIDY0MTM5LCA3ODIzMSwgNjQxMSwgMTI5MTAsIDc4NTU0LCA2NjY0NCwgCisgICAgMTMwMjgsIDY3MzcsIDEyNTM3LCAwLCAwLCA2NDEzNiwgMTI1MzYsIDIzNTAsIDEzMDI5LCA3ODIzMywgMCwgOTgzMTAzLCAKKyAgICAxMzAzMCwgNjcwMiwgNDUyNywgMCwgMTI1MzgsIDEyODgxMCwgOTgzNjQ1LCA2NTU5OSwgNjU3MTcsIDk5NjYsIDAsIDQ5NDgsIAorICAgIDEyNDg0LCA0MDMyLCAxMjgxNDksIDEyNjIzLCAwLCA2MjA3LCAwLCA2MTE3LCA2NTkzMCwgODQxMiwgMCwgNzQzOCwgMTI5NiwgCisgICAgMjMyNSwgNDE1MTEsIDEyNjYyNSwgMTAxNDksIDc0MTE4LCAwLCAxMjcyODYsIDEyNDgxLCAwLCAxMjQ4OCwgNjY3MTMsIDAsIAorICAgIDQxNTU2LCA2NDQxNCwgMTE4ODAyLCAyMzU0LCA0MjYxOSwgNzM3NjYsIDAsIDYyOTUsIDkwMSwgNDE1MTAsIDc5NTMsIDAsIAorICAgIDY1MDMyLCA0MTUxMywgOTgzMTY2LCAxMTkyNywgNjY1ODQsIDc4NTU5LCA3ODU2MCwgNzg1NTcsIDc4NTU4LCAwLCA3ODU1NiwgCisgICAgODQ4LCA5ODY4LCAwLCA2NDI0LCA3ODU2OCwgMTE5MzM4LCA2OTkyMiwgNzQwMzEsIDc4NTYzLCA3ODU2NCwgMjM1MiwgCisgICAgNzg1NzIsIDg5MywgNjQ1NzYsIDExMjg5LCAxNDA3LCA2Nzk3MywgMCwgMTMwMjYsIDY3NjIsIDc4NTc5LCA3ODU4MCwgCisgICAgMTMwMjMsIDg5MDMsIDk3NzcsIDY2NzE1LCAxODcxLCA4MDk5LCAwLCAwLCAxMzQzLCA5ODM4MjMsIDAsIDkzMjUsIDY4MTgsIAorICAgIDYyODMsIDExNzM4LCAwLCA5ODM5MzQsIDAsIDExNzQxLCAwLCAwLCA5MjE2LCA4MjYzLCAxMTI3OSwgMTk0NzUyLCAKKyAgICA5ODM4MjUsIDE5NDc1NCwgMTMwMjEsIDY0NDk0LCAzMTM2LCAxOTQ3NTgsIDE5NDc1NywgMTk0NzYwLCAxMzAyMiwgNDI3MzcsIAorICAgIDk5NTYsIDAsIDAsIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgMTMwMjAsIDEwMDI0LCAxOTQ3NjQsIDc0NTgzLCAKKyAgICA3NDM0MCwgNjk2ODEsIDAsIDQzMDAxLCA4MDI5LCAwLCAwLCA5ODM3ODAsIDMzMzUsIDAsIDAsIDk3NzYsIDEyMDUyNiwgCisgICAgMTk0NzQ4LCA1MjE1LCA0MjY0NCwgMzMzMywgMTYzMiwgMTk0NzUxLCA2NDg0OSwgMzM0MiwgNzg1ODIsIDUzNjMsIDEyOTU3LCAKKyAgICA3ODU4MSwgNDE1NiwgMCwgMCwgNjQyMSwgNzg1OTEsIDE2MTEsIDc4NTg5LCAxMzAxOCwgNzQyNTcsIDc4NTg4LCA3NDU0MiwgCisgICAgMzMzNywgNDUzNywgNjc4OTUsIDExNzM2LCAwLCA2ODYwOCwgNjQ4MiwgNDIxNCwgNzM3OTAsIDExOTQ1LCAwLCAxMzA0NiwgCisgICAgODgzOCwgNDI1LCA0MDI1LCAxMDcwOSwgNzg1OTUsIDIxMDgsIDIzOTIsIDEzMDQ3LCAwLCAwLCA2ODE5LCAxMzA0OSwgCisgICAgNjQ5OSwgOTIyNDMsIDEyNDI0LCA2ODYxNCwgNzM5NDQsIDEzMDUwLCA5OTI0LCAxOTQ3NDUsIDY1MDcsIDEyNzkxOSwgCisgICAgOTQwNzMsIDEyODA2OSwgMzI3NywgODkyOSwgNDk0NywgNDEwNTUsIDAsIDE5NDcyMiwgMTk0NzIxLCAxOTQ3MjQsIDEzMDQ1LCAKKyAgICA2NDYyNiwgNjYwMzQsIDc3NTEsIDE5NDcyNywgODM3MSwgMTk0NzI5LCAzOTk3LCAxMjgwNiwgODc2OCwgMTMwNDQsIDAsIAorICAgIDEyNDIwLCA0MDI0LCAxOTQ3MzAsIDQxMDU0LCAxMDc4LCA5NzU3LCA2OTczNiwgNDEwNTcsIDAsIDAsIDAsIDAsIDk4Mzc5MSwgCisgICAgOTIyMTAsIDkyNDExLCAwLCA0MTQ5NiwgMCwgOTE2NSwgMTU3MiwgMTE5MTEsIDAsIDExODg0MiwgMjM0NiwgMTMyNzAsIAorICAgIDg5NTgsIDAsIDk2NDYsIDM3NzMsIDQzMTgzLCA2NDAxLCA1ODMxLCAwLCAwLCAxMzA0MywgODA1NiwgOTI0OTQsIDY1NjgxLCAKKyAgICAyMDgsIDEyNzM4MiwgNDE1MTQsIDAsIDAsIDAsIDEwNjk5LCA2NDA4LCA5MjIyNywgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAKKyAgICAzNjAzLCA0MTEwOSwgMjM5OCwgMzU0OCwgMTI2NTk2LCAwLCAxMTk5MzMsIDAsIDMxMTUsIDk5MTgsIDAsIDgyOTQsIAorICAgIDQyOTEyLCAwLCAwLCAxOTQ3MjYsIDQ4NzYsIDY1ODA0LCAwLCAwLCA0MzQ2OCwgOTgzMjc0LCA0MTU1OCwgNDE0NzEsIAorICAgIDczOTUwLCA4MTU4LCA5OTQ0LCA0MTQ3MiwgMTIwMjk4LCAxMzA1MSwgNzg2ODksIDMxNDMsIDE5NDY3NCwgNjcwMSwgCisgICAgNDE1NTksIDE4OTYsIDY2MjU2LCAxMzA1MiwgMTk0NjgwLCA1NjY1LCAwLCAxMTkwNzEsIDcwMjUsIDYzOTc0LCAwLCAKKyAgICA3NDM1MiwgNzQxNjEsIDQxNTQsIDk4NjMsIDQzNTUwLCAxMjMxMCwgNTY2MiwgNDIzODIsIDE1NjQsIDczOTI0LCAxMTIxLCAKKyAgICA3ODMxOSwgNjM5NTksIDAsIDk5NDIsIDEzMjMxLCAwLCA2NDc1MiwgNDczMiwgMTk0NjY2LCAxMTU5NiwgMTE5OTMxLCAKKyAgICA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCA2NDc3MiwgNDIwMjQsIDY0MjAsIDQyMDI4LCAwLCAxMDUwOSwgMjc5NSwgCisgICAgNDkxMCwgMTk0NzI4LCA2OTIzMSwgNjQ3NTMsIDYyNzUsIDkzOTU3LCAxMTg4MzAsIDYzOTc4LCAxMTA0NCwgMzIyOSwgCisgICAgNjQyMywgNDI3NzQsIDAsIDAsIDAsIDEyODIzLCAyMzMxLCA5MTc4MTAsIDcwODUsIDYxMzcsIDAsIDc1MjQsIDAsIAorICAgIDkxNzgwOSwgODM0NiwgMCwgODMzOCwgMTI4MzE1LCA2NTA0MywgMCwgODIyLCAxMjc5ODQsIDk5MDMsIDY0NzIxLCA0MjcyMiwgCisgICAgNjk4NzcsIDE5NDY1OSwgNzg2NTUsIDc4NjYxLCAxOTQ2NjAsIDc4NjYyLCA0MTI2NSwgNTMxMSwgMTc5NSwgOTY1LCAKKyAgICAxMTg3OTEsIDEwNTg3LCA3ODA1NSwgMTEyNzgsIDc4NjMyLCAxOTQ2NDAsIDAsIDEyOTQ2LCAxOTQ2NDEsIDExOTM0MSwgCisgICAgMTIwMzQ5LCA2Mjk0LCAzMTQ0LCAxOTQ2NDgsIDE5NDY0NywgNjUwMTksIDE5NDY0OSwgNzM5OTAsIDAsIDk4Mzk2MCwgNzQ4LCAKKyAgICA0MTA2NywgMjMzMCwgNTM1LCAzMTQ4LCAxMjM3NSwgNzg3OTksIDE5NDYyOSwgMTA1NTYsIDI0NzUsIDEyMzg4LCA0ODg5LCAKKyAgICA4OTY4LCA2Nzg2MywgMzU5MywgMCwgMCwgMjM0MiwgMCwgMTk0NjM0LCA2NTIwNiwgNDg5NCwgMTk0NjM1LCA0ODkwLCAKKyAgICAxOTQ2MzcsIDkxNzgwNCwgNTgxLCA0ODkzLCA5ODM2MTYsIDY1NzEsIDY1NTQ1LCA0ODg4LCA0MTU3LCA3ODA0OCwgNzgwNDksIAorICAgIDc4MDQ2LCA3ODA0NywgMCwgMTAxMTksIDY0MTUsIDQyODkzLCAwLCA2OTcwMiwgMCwgMCwgMTEzNzUsIDY0NzQ2LCAyMzMyLCAKKyAgICA3ODA2MywgNDEyLCA3ODA2MSwgNjQ5MzIsIDQyODgwLCA0MzU4NywgMCwgMCwgMCwgMCwgNjUxOTcsIDc4MDY2LCAxMjIwMywgCisgICAgNzgwNjQsIDc4MDY1LCA4OTEzLCA2NTg1NCwgNDg3NSwgNjU4MTEsIDEyMDM4MSwgMTIwMzg5LCAxMTg4ODgsIDkzNDQsIAorICAgIDg4MjYsIDEyMDM4NiwgMTIwMzk1LCAxMzEwNCwgNzQ3ODEsIDExOTk3LCAxMjAzOTMsIDc4MDc1LCAwLCAzMTM0LCAwLCAKKyAgICA2NTY5NiwgOTIzMzEsIDAsIDY2MjE3LCAwLCA4MzM0LCAxMTkzNDQsIDAsIDM0NDksIDAsIDAsIDc4NDE0LCA3ODQxMywgCisgICAgMTE4OTUwLCA3NDAxMSwgMCwgMCwgMCwgMCwgMTkwOCwgMTIwMTY3LCA0MzI4LCAxMDczNCwgMTI3MDE0LCAwLCAxMjc5MTQsIAorICAgIDc4MDQsIDc4MjcyLCAxMDgxMSwgNjI1MCwgMTEzMzksIDQ5MTQsIDExMzY3LCAwLCA3ODA1NCwgNDkxNywgNzQ1MTYsIAorICAgIDc0MjA4LCA2NDI4NSwgNDkxMiwgNTQ2NCwgMTI3ODM2LCAxMTg4OTMsIDIzNjEsIDc5NzEsIDc4MDcyLCA3ODA3MywgCisgICAgNTUyNDMsIDc4MDcxLCAwLCA4MDg2LCA3NDMxNywgNjcwNywgODMxOSwgMjMxMiwgNDA5NzcsIDEwOTYwLCA0MDk2MiwgCisgICAgODMwNSwgMTI1NzMsIDk4MzYwOCwgNDA5ODAsIDk4Mzk2NCwgMTMyMDIsIDAsIDEyNTgyLCA3ODI4MiwgOTgzMDQ4LCAKKyAgICA2OTg1NiwgNDI0MzgsIDU1MjIxLCA2Mjg4LCA3ODI4MCwgMTI3OTQ2LCA1NjUzLCA0MjQwMCwgMTA4OTEsIDc2OTgsIDU2NTgsIAorICAgIDc0MDQ1LCA3MDAzOSwgMCwgMCwgNDkxMywgMCwgOTgzOTU5LCA3MTMzMywgNDIzMjYsIDEyODE5NCwgMTI3MjgsIDkyNjg1LCAKKyAgICA0MjQ3OCwgMjMyNywgMCwgMTI1NjMsIDQyMjg3LCAxMjcwNSwgMCwgMCwgMTI1ODgsIDg4MjEsIDYxNTMsIDI4NjcsIAorICAgIDE5NDcwOCwgNjYzMTIsIDY5OCwgMTI4MDA3LCAxOTQ2MDYsIDEwMzU2LCA3MDAxNywgMTk0NzEzLCA2NTEsIDEyNjQxLCAwLCAKKyAgICAwLCAwLCAwLCA0MTU1MiwgNjUxMTUsIDc4NDY1LCA3ODQ2NywgNzg0NjMsIDc4NDY0LCAxMjg4NTEsIDc4NDYxLCAxOTQ2OTcsIAorICAgIDc0MzU2LCA2NDk0NSwgNDcxNiwgNDMyNzcsIDAsIDc4NDc0LCAxMjM0MCwgMTIwNTY4LCAwLCAxOTQ3MDAsIDU1MjY0LCAKKyAgICA0MTIxMSwgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDk4MzQ5NSwgMTAxMDEsIDAsIDcwMDQ5LCA4NDc5LCA0MTUxLCAKKyAgICA0MTkzMywgMCwgMCwgNjYyNTQsIDEyMDgyMSwgMCwgMCwgMTI4NjU0LCAwLCAxMTkxOTQsIDc0MDUwLCA5MjcwMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTIyNzgsIDAsIDAsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAxMjg5OSwgMCwgMCwgMjY5OSwgMCwgNzM4NDUsIAorICAgIDI5ODUsIDkyNTY4LCAxMjY0NzUsIDkxNzg0NSwgMTIxOTIsIDExOTMxNCwgMCwgMTE5MzEyLCA5ODI3LCAxMTkzMTAsIAorICAgIDExOTMxMSwgMTE5MzA4LCAxMTkzMDksIDExOTMwNiwgMTE0ODEsIDQxMjEwLCAxMTkzMDUsIDAsIDM1LCA3ODQ4MSwgCisgICAgNzg0ODIsIDY2Njk0LCA2ODQ3OSwgNzg0NzcsIDc4NDc4LCA0MzU5NiwgNjA5MCwgNjQyNTcsIDc4MTIsIDEwNTM0LCAwLCAKKyAgICA3ODQ4NSwgNzM4NDgsIDY3OTc1LCA0MjcyLCAwLCA0MDk2NywgNDA5NjQsIDkxNzgyNSwgMTI3MDQsIDc4NDg3LCA0MzMwNiwgCisgICAgMCwgNjQ0OTcsIDEyMTM4LCA3OTMwLCAwLCAyMjkyLCA2ODIxNiwgMCwgOTE3ODI2LCA1MjQ0LCA0MTg5LCA5NDEwOCwgCisgICAgNjc1OTYsIDEyNzUwNCwgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCA0Mzc0MywgMCwgODg3MywgMjI3OSwgMCwgOTE3ODI3LCAKKyAgICA2NTU1NSwgMTI1NzQsIDAsIDAsIDAsIDc0NDkwLCAxMjcwOTksIDQzNjU3LCAwLCAwLCAwLCA0MjY4MiwgMTI1NzgsIAorICAgIDEyNzIwLCAwLCA0MTIyNywgMCwgMTIzNDYsIDEyNzEwMSwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIDExODg1MCwgCisgICAgMTE5MTQxLCAxMjg1NDYsIDY2MDE1LCAwLCA5NTksIDg4ODUsIDEyNTY0LCA2NjQ1NywgNzg4MDgsIDk0NjksIDk2MzIsIAorICAgIDkyMzIzLCA3NDc2MSwgNjQzMjMsIDEyNzMzNSwgMCwgMCwgMCwgMzEwLCAwLCA0MTI4MSwgMTA5NzYsIDAsIDcxMzI1LCAwLCAKKyAgICA3NDI2NiwgMTAwNTQsIDY0OTcsIDg1NzQsIDAsIDkwMTIsIDE5OTU4LCA3NDQyMCwgNjUwODksIDEzMjE1LCAxMjczMCwgCisgICAgNjUxNjMsIDc0MDQ0LCAzNzQsIDQzMTk1LCA4MTYsIDEyMDE2MSwgMCwgMCwgNDE5MzQsIDc0NjUsIDAsIDEyODE2OCwgCisgICAgOTgzMjY4LCA0NzE1LCA2MTAxLCA5NDEwNiwgNDE5MzYsIDAsIDQ4NzksIDAsIDY1NDQ2LCAwLCAzMDcsIDEyNzE0NywgCisgICAgOTU4NSwgNTM3NCwgOTgzMjY3LCAxMjgwNTksIDAsIDAsIDEyNjYxOCwgMTIwMzkwLCAwLCA2NTU2NywgMTIwNjE0LCAxOTI5LCAKKyAgICAwLCAxMjE0MiwgMCwgMTIyMzYsIDQxNDE5LCAxOTQ2MTgsIDEyMDYxMCwgMTI5ODIsIDE5NDYyMywgNTM3OCwgNzg3OTEsIAorICAgIDEyODY3OSwgNDE0MjEsIDAsIDQ0NjIsIDAsIDEyNjU5OSwgMTI4MDkyLCA4MjEsIDAsIDI0OTgsIDU4MDAsIDEyMDE1NywgCisgICAgOTgzMTE1LCAxNzYwLCAyNDIxLCA0NDY5LCAyMzI0LCA4MjgsIDM2MTEsIDc4NDAwLCA3NTcsIDExODUsIDAsIDc4NzcwLCAKKyAgICA0MzU5NywgMTA2MjgsIDc0ODA4LCAxOTQ1NzIsIDc5OTksIDQzOTcxLCAwLCAwLCAxMDYzNCwgMTA5NDIsIDc3MTMsIDIzNDgsIAorICAgIDAsIDY0Mzc0LCA0MzgwLCAxOTQ2MDgsIDExOTA0NCwgOTk4MiwgNjQzMjQsIDQxMjQwLCA4NjIsIDY1NjI2LCA3ODQ2MiwgCisgICAgMTgxMCwgMzY3MywgNTEzNywgMTk0NjE3LCAwLCA3Mjc3LCA2NTYyMiwgMCwgNzU2NiwgNjQ2ODgsIDE5NDU5MywgMTk0NTkyLCAKKyAgICA3ODA5MiwgNzQzNTcsIDE5NDU5NywgNDc0OCwgOTIyMjgsIDE5NDU5OCwgMTk0NjAxLCA0MjI2MCwgNTg3MSwgMTE5MDc1LCAKKyAgICAwLCA3NDU3NiwgNDQwMTksIDAsIDEyODE4OSwgMzk2NywgMTk0NjA0LCAxMzEzNywgODc3NSwgMTI3OTQ1LCAwLCAyOTYzLCAKKyAgICAwLCA4NDEwLCA0NDU0LCA3MjMsIDEyNzg4MiwgOTY2LCA0NDQ5LCA5MjMzMCwgOTIyMzgsIDAsIDc4MTksIDIzMjAsIAorICAgIDE5NDU4OSwgMzM5LCA0OTY4LCAxOTQ1OTAsIDEyMDM5OSwgODA3NSwgNTUyNzYsIDAsIDgwNDcsIDAsIDc4ODI3LCAxMjYzNCwgCisgICAgNDE1NDIsIDc4NzgwLCA3NDY2LCA2NzA1LCAxMjE3NCwgNDI2MTAsIDAsIDc0NDUyLCA5ODM3NjMsIDE1ODQsIDY2NjQ1LCAKKyAgICA2MDQ1LCA2NzI5LCAxMjA2NDAsIDY1MjE4LCAxMTU1OSwgMCwgNzgwNjIsIDc1MzcsIDAsIDExMzcwLCAwLCAxMDMzMCwgMCwgCisgICAgMTAzOTQsIDAsIDc0MTk0LCAwLCAxMjc5MjksIDk3ODAsIDAsIDEzMDkyLCAxOTQ1NzYsIDc3OTUwLCAxOTQ1NzgsIDcwNzQsIAorICAgIDkyNjQ4LCAxOTQ1NzksIDE5NDU4MiwgMTE0MTQsIDEyODg2OCwgMjUzMSwgMTMwMzQsIDAsIDAsIDQyMTEsIDEyNTksIAorICAgIDc1MTcsIDAsIDAsIDE5NDU2MSwgNDA5OTYsIDEzMDM3LCA3MDkyLCA2NDEsIDUyMTksIDk0MDM0LCAxOTQ1NjYsIDExMDY0LCAKKyAgICA0MTEyOSwgMCwgNDI4NTAsIDEzMDM1LCA5MDc1LCA5MjM4NywgNTQ2NiwgMTI4MTUzLCAwLCA2NDA5OCwgNjU3OTMsIDQ1MzUsIAorICAgIDE5NDU3MywgNDI3MSwgNzg0MTcsIDEyODM1NywgNjc2OSwgNDE0MTAsIDk4MzQ1MiwgNjQyNjIsIDY3NjcsIDQxNDA3LCAwLCAKKyAgICAwLCA2NzU1LCAxMTg4NjQsIDkwNDYsIDEyNzkzNCwgMTI2NjA4LCAwLCAwLCAwLCAwLCA2NzY3NSwgMCwgMCwgMCwgNjQzMzgsIAorICAgIDI1NjMsIDEzMDMzLCAyNDcsIDExODkxNSwgMCwgMTIzMzgsIDQ2NTEsIDY5ODk1LCAxMTI3MCwgMCwgMCwgMTE5MzMsIDAsIAorICAgIDAsIDQxOTAzLCA0MzQ0NywgMTEwMDEsIDAsIDQyMjU1LCAwLCA5MjY2MSwgNjk4MjEsIDQxOTA1LCAwLCAwLCAxMDc3NSwgCisgICAgOTc5MywgNTAwOSwgMCwgNDIyNjksIDY0NTg3LCA5ODMwNjMsIDQyNTM1LCA2OTgxMiwgNjQ1MjksIDQxNDA4LCA0Mjg1MywgCisgICAgMzg3NywgMTIwNzk1LCA0MjY3NCwgODE0NywgNDM1NjYsIDExOTAyMSwgOTgzNzc2LCAxMDIzNiwgNjU5MTgsIDQzNzgyLCAwLCAKKyAgICAwLCA2NDUwNiwgNjk2NTIsIDExODkyMSwgNDc0NywgMTI4MDU4LCA2OTg0NCwgNDMyMDAsIDU4MzIsIDAsIDAsIDUxNDEsIAorICAgIDQyNjAwLCAwLCA0MzIwMywgMCwgOTgzNzk5LCA0MzI4NiwgMCwgMTI4MjExLCA0Mzc3OCwgMCwgNDEzMDUsIDc4Nzc2LCAKKyAgICA0Mzc4MSwgMTEzMDMsIDY1NTQ3LCAwLCA3MDMxLCA4NTksIDAsIDAsIDAsIDYwNTksIDEyNjk4NSwgNTUyMzUsIDAsIDg1MzUsIAorICAgIDAsIDY1MTk2LCAxOTQ3ODcsIDY2MDMyLCAxMTQ4OCwgMTIwNDgxLCAxMjA3ODYsIDQyMjMzLCA2NDE0MCwgOTk0NiwgCisgICAgNjM4ODUsIDE5NDc5MiwgMTE4MjIsIDAsIDQzMTg5LCA5ODM4OTgsIDAsIDE3ODgsIDE1NzksIDEyMDQ4MiwgNzEyOTgsIDAsIAorICAgIDAsIDAsIDkwMjgsIDExOTU3MSwgNjkyMzQsIDk0MDU1LCAwLCAxMjg1LCA2NDg4MiwgNDEyNDIsIDcwMDg2LCAwLCAxMjY0MCwgCisgICAgMCwgNzQwMSwgMCwgMTI2MjUsIDY4MTk4LCAwLCA3MDA4MiwgMzk0MCwgNDE1OTcsIDQzNzU0LCAzMzk2LCAxMjY0MiwgCisgICAgODY2NSwgMCwgMCwgMTI2MzAsIDE2NTMsIDkxNzgxNSwgMTAxNTMsIDAsIDYxNjYsIDEyMDUxNiwgMTE4OTg5LCAwLCA4ODE1LCAKKyAgICA2NjY3MywgNjUwNDYsIDkyODUsIDkxMywgNDIyNTksIDExOTMxNywgMTE5MzE4LCAyMTQyLCA2ODQ1NCwgNDI0ODUsIAorICAgIDk0MDEyLCA3ODc4LCA4MjExLCA0MjI5MywgNjQzNzcsIDAsIDkyNjQzLCAwLCAxOTQ2NzMsIDEyMDMyLCAwLCA5NzI1LCAwLCAKKyAgICA3ODQzMSwgNTI2MywgMTI4MTgsIDc4NDMwLCA0MTkzOSwgMTAwMjIsIDY1Mzg3LCA3ODQxOSwgNDI3NzcsIDEwMTM5LCA5ODAsIAorICAgIDQzNjk4LCA2NTM4NiwgMjIwOCwgMCwgNDM3MDEsIDQzMTk4LCA3MTg0LCAxMjA2NzMsIDE5NDc5NywgOTE3ODE5LCAxMDA4NSwgCisgICAgMTE5OTkyLCAwLCAxMTk5OTMsIDY2MzQsIDkyMzczLCAwLCAxMTkzMjMsIDgwNzIsIDExOTMyMSwgNDM3MDAsIDAsIDg4NzIsIAorICAgIDc3ODMsIDkxNzk5MiwgMTIzOTgsIDgyMzcsIDAsIDAsIDEyMzk1LCAwLCAxMjY5NzcsIDEyMDU2NSwgOTkxNCwgMjIxNywgCisgICAgOTE3ODU0LCA3Mzk3NSwgNjM2NywgNjM1MSwgNjY2ODgsIDAsIDc4MTA3LCAwLCA2NDczNSwgNDEyNDMsIDkyMTk5LCA3ODA4LCAKKyAgICAxODI5LCAwLCA0MTkzNywgNDM1OCwgNDMyNzIsIDYzNTMsIDAsIDAsIDEyMDQyMiwgMCwgMTcxMCwgMCwgMCwgNjU2MDcsIDAsIAorICAgIDQ5LCA2NjI3LCAwLCA2MjU4LCAxMDY4MywgNzg2NzIsIDk3NDEsIDc4MzI5LCA1NjQ5LCA3ODQ0MSwgNDM0NDMsIDY0NDE4LCAKKyAgICAxNjQzLCA2NTIxMywgODQwNSwgMzQ3MCwgMTI4MjI1LCAxMzIxMywgNDI0NTIsIDc4MzMxLCAxMjA2NjQsIDc4NDQ1LCAwLCAKKyAgICAxMDcyLCA3ODQ1NywgNzg0NTIsIDc4NDU0LCA2NTc2LCA0MTk4OCwgNDExMzIsIDY1Njc1LCAxMDgwLCAxMjAwMDIsIDk4ODYsIAorICAgIDU1MjI1LCAxMTAxLCA2ODQwNCwgMTIzMDksIDU1MjI3LCAwLCAxMjYzMiwgMTA4NiwgMTg2OSwgNzg2ODUsIDc2ODAsIDAsIAorICAgIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAzMzgwLCA4MTIzLCAxMDkxLCAxMjYzOCwgNzk3NywgNDUwMSwgNDEwOTksIDAsIAorICAgIDY2MzA5LCAwLCAwLCAxNDk0LCA5ODMxNDYsIDEyNjYxMywgMCwgMTE2OTMsIDEyNjUxMywgMTA0OTQsIDkyNjU1LCA2NTg3MiwgCisgICAgMTIzNjMsIDExMzg2LCAwLCAwLCAwLCAwLCA2NDU4MiwgMCwgNzM3OTQsIDAsIDgwMjIsIDAsIDEyMDQ2MiwgNzQxMDYsIAorICAgIDEyNDEzLCA5NDA2OSwgOTE3OTk0LCA5MTc5OTMsIDkxNzk5NSwgNTU3MCwgMTg4MSwgNzIxMCwgMCwgMTAxMiwgNDM3NTIsIAorICAgIDAsIDEyMDcwOSwgNzIwOCwgNjY0NDIsIDU1NjksIDk4MzI0MiwgNDIzMzksIDAsIDYwNjMsIDAsIDc4MzgzLCAxMTk1OTQsIAorICAgIDYwNTMsIDY1NjAyLCAwLCA5MjIwMSwgNjQ3MjcsIDkxNjAsIDE5NDgyNywgMCwgMCwgOTIxODAsIDEwNTAzLCAxMTg4MTAsIAorICAgIDYwNTUsIDM4NzAsIDQyNzksIDg0OTAsIDEyMDExNCwgNDMxOSwgNjQ3ODYsIDg2MDIsIDEyMDExMCwgMTEzMjYsIDkyMjA0LCAKKyAgICA5ODMxMTYsIDAsIDEyMDExOSwgNzgzMzMsIDEyMDExNywgMTIwMTE4LCAxMjAwOTksIDEyMDEwMCwgNjUwODcsIDU1NzEsIAorICAgIDM2NzQsIDk3NDAsIDkxMjEsIDU1NjgsIDEyMDEwNywgMTIwMTA4LCA0MjA4NSwgMTAxMDcsIDQyMTU5LCA0Mjg3MCwgCisgICAgMTIwMTAxLCA1ODksIDcwNTAsIDk4MzgwMCwgNDMyODEsIDEwMjMzLCA0MTI2MywgNjYyNTEsIDY1NzI5LCA2NjI1MywgCisgICAgMTI2NDk3LCA3NDA5OSwgNDI2NDUsIDAsIDE5NDgxNSwgODU4MywgMCwgNTg0NywgNjkyOCwgMTI4MDc0LCAwLCAwLCAwLCAwLCAKKyAgICA2NjU5MiwgMTIyMDQsIDkxNzk2MiwgMTk5NjYsIDc3ODU2LCA0MjU2MSwgMTIwNjI2LCA5ODMyNTEsIDAsIDgxMjAsIAorICAgIDEyMDcwMSwgMCwgMCwgMTI4MDEyLCA0MTA2MywgMCwgMTA2NjQsIDAsIDgzNjksIDAsIDQ1NTEsIDE5NDk2NCwgMzM2OSwgMCwgCisgICAgMCwgOTY3MywgNjYzMzQsIDY1NTgwLCAxMDQ3OCwgMTE4OTYwLCAxMjUxNywgNTU3LCA5NDU3LCAxMjAzNCwgOTgzNjcxLCAKKyAgICA2MzU1LCAxMjUxOSwgNDEwMDQsIDAsIDE5NTAyNSwgNzQwOTQsIDAsIDAsIDc3OTcwLCA5ODM1NjAsIDAsIDEyODE3NSwgCisgICAgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCA2Nzg5MywgNTQ5MiwgNjkyMywgOTIyODEsIDEwNDQxLCA3MzgzNiwgMCwgCisgICAgNDM5OTAsIDU0OTMsIDAsIDc0MzE5LCAwLCA2NjYzNSwgMTIwMTksIDAsIDE2MTgsIDAsIDEyMDQ3NCwgOTY0NSwgMTA0MzAsIAorICAgIDkxNzk1OSwgNTg1MywgMTMwNjMsIDEwMzYzLCAwLCAxMjk1NiwgMTI4MTY5LCAxMjA3MjksIDExMzE0LCA5MTc1ODIsIAorICAgIDEyMDYwLCAwLCA3ODM5MiwgMTI4MjYsIDYzMjksIDAsIDEwNTE0LCA2NTUxNywgNzQzOTUsIDI3MDcsIDgzMDksIDAsIAorICAgIDEyNzA1NCwgNzgzOTgsIDQzNTcwLCAyNjk3LCA0MzQyMCwgNzgzOTYsIDEyNzA1NywgMjY5NSwgNDIxNzEsIDAsIDAsIDAsIAorICAgIDY3NjE3LCAxMTg5NzEsIDAsIDI2OTMsIDEyMTI1LCAxMjc2NiwgMCwgMTE2NCwgMTI4ODE3LCAwLCA0MTkxOCwgOTgzMTY4LCAKKyAgICAxMjc1NDIsIDg2ODcsIDY2MDA5LCAxMjE3OCwgNzA1MywgMTI4MDAxLCA3NDY5LCAwLCA1MjQ4LCAxMjIxOCwgMTIwNTM4LCAKKyAgICA2NDI3LCA0Mjg4NCwgNDExMjMsIDAsIDAsIDQyODczLCA0MTEyNiwgOTk5MSwgNDExMjgsIDc0MzcxLCAxMjcwMzEsIDAsIAorICAgIDk4NzMsIDAsIDQyODc3LCA3OTk0LCA2NDc2MiwgMjA1MywgNDI4NDMsIDY1OTEsIDkzNDAsIDAsIDE1ODksIDAsIDI5NiwgCisgICAgNzQ0MzgsIDc4ODUyLCAwLCA2Nzg0MSwgNzQzNzAsIDAsIDg5MjIsIDEyODA2OCwgNzQ2MDAsIDEyNzAwLCA3NDgzNiwgMCwgCisgICAgMTI1NzksIDAsIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAxMzI2MiwgNjU1OTAsIDUyOTksIDAsIDExNDczLCA1NDQ5LCAKKyAgICAxMjUyLCAwLCA3ODQwNCwgNDE0MzEsIDc0MzY5LCA2NTM3MywgNTI5NSwgOTE3NTY5LCA3NDExNCwgMTIyMywgMTY0MiwgCisgICAgMTc0LCA3ODM5OSwgODgzLCA0MTYxLCAxMjY5MSwgNDI2MDMsIDQxNDEzLCAzMjEyLCA0MTQ1OSwgMzIxMSwgNzQ4MTAsIAorICAgIDQxNDI1LCAxMjcwMjksIDc4NDEyLCA3NDQ1MCwgOTcyOCwgMzg0NiwgODA3MCwgNjE1MCwgNjYzNiwgNDM3MCwgMCwgMCwgCisgICAgNzQxNzgsIDc0NTg3LCA3NDExNywgMCwgMCwgMCwgNDk4NiwgMTIxODksIDAsIDY3NjQ4LCAxMjA0OTksIDk0MDAxLCA0MjU3LCAKKyAgICAxMjEwNCwgNzc5NDIsIDYyMjAsIDkwMDQsIDY1NTYxLCAwLCA3Nzk0OSwgMCwgNjgxMzUsIDkxNzU3NiwgNzc5NDYsIDAsIAorICAgIDY5Njc5LCA2OTY4NCwgOTg5MCwgNzg1NjEsIDEyOTcxLCA3ODQ1MywgOTI1NTYsIDczODk4LCAxMTk3OSwgNzAwNTEsIAorICAgIDExODkwMCwgOTE3ODk0LCAwLCA5NjM1LCAxMjYwMCwgODg3MSwgMCwgMCwgMCwgNjQ2OSwgNzQyMjcsIDAsIDY1MzA0LCAKKyAgICA0Njc5LCAxMDIzMCwgNjQzMDAsIDY0ODY3LCAzNDI3LCA0MjQwLCAwLCAwLCAwLCAwLCA0MjkxNiwgMCwgMCwgMCwgNzI4MiwgCisgICAgNzg3MjgsIDY1NzMzLCA0NDQ1LCAxMjcxMzgsIDEyODA4MiwgMzQ5NCwgNzQ2MDYsIDY1NTUsIDAsIDc3OTc2LCAwLCAwLCAKKyAgICA3ODU2NiwgMCwgOTgzMTg5LCA2NTg5OCwgOTgzMjQ0LCA2NTMxMiwgNTQ0NywgMCwgMTI4OTUsIDY1NTkzLCA0MDEwLCAwLCAKKyAgICA0MTEwNiwgMCwgNjQ0NDgsIDAsIDQxMTA1LCAwLCA2NTgyMCwgNjIzMiwgMCwgMTI4MjgwLCAwLCA0MzYwOCwgMTE5MDkxLCAKKyAgICAwLCA2NTM4LCA0MzM1LCA3ODM2NCwgMzk0MSwgNDExMjIsIDExMDYxLCA3ODM2MywgNjQ4OTIsIDkxMTMsIDE5NTQsIAorICAgIDEyMTU1LCA5ODM2NzQsIDQyODc4LCAxMTUwMCwgMCwgMCwgNzQ1NzgsIDAsIDY1ODMyLCAwLCAwLCAwLCA3Nzk3NSwgCisgICAgMTE5MjMwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCA1MDksIDAsIDAsIDkyMzA3LCAwLCAwLCA1MTMzLCAwLCAwLCA5NTAwLCAKKyAgICAwLCA0OTU3LCA2NDc0MSwgMjQyMiwgMjIxMiwgOTgzMDgwLCAwLCAwLCAyNDk2LCAxMTUxNiwgOTQ0LCAxMTg4NTEsIDM4OTAsIAorICAgIDEyMTY4LCAxNDM4LCAwLCA5ODMxMTcsIDAsIDQxOTQ3LCAxMjIwLCAxMjA4MjgsIDEyODU1NSwgMCwgMCwgMTU3MSwgCisgICAgNDI2MzAsIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIDAsIDMxMiwgNDE5ODAsIDk4Mzk0NCwgMCwgNzgxMjAsIAorICAgIDg4NzcsIDI2OSwgNDQyOSwgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgNzg2NTcsIDQxMTIwLCA2NTEyMSwgMTA4NjIsIAorICAgIDYwNjAsIDQxMTE5LCA0MTQxNiwgNzQzNTUsIDQxNzMsIDAsIDAsIDAsIDE5MDYsIDkxNzk4NiwgMTE1MzIsIDc0MDczLCAKKyAgICAxMjczMzgsIDAsIDE5ODUsIDYyOTYsIDk1ODIsIDkxNzg5NSwgNjQyODcsIDAsIDc4MTE1LCAxMTQyOCwgMTczMCwgMjQ1NywgCisgICAgOTE3ODA4LCAxOTkxOCwgMTA0NjksIDAsIDAsIDc3MDMsIDg4NDAsIDgwMzUsIDAsIDAsIDkyMjMwLCAwLCA2MTI5LCAwLCAKKyAgICAxMjg1MjgsIDEyODI2OCwgMCwgNzg3NCwgODY4MSwgMTE5MDkyLCAwLCAxMzEzNiwgMCwgMCwgNzAxMDIsIDYzODg2LCAKKyAgICAxMTg4ODEsIDk2MDUsIDcxMzA4LCAxMzIyMCwgMTI4Nzc2LCAxMjAyNzQsIDU1MTQsIDAsIDkyMjgsIDAsIDAsIDAsIDUyNDAsIAorICAgIDk4MTEsIDEwMDEyLCAzMDk2LCAwLCAwLCA5ODMzNTEsIDY2Njc2LCA2NTg3MywgMCwgMCwgMCwgOTUwMSwgMCwgMTI3MiwgCisgICAgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCAwLCA5MTc4MTIsIDAsIAorICAgIDExODg5OSwgMTIxOTMsIDAsIDAsIDAsIDAsIDk4MzM1MywgMTk5MzUsIDAsIDkyMTYyLCA2OTY3NiwgMCwgMCwgMCwgNTI3NSwgCisgICAgMCwgMCwgODYzNywgMCwgMCwgMzc4OSwgNjM4ODAsIDExNDcxLCA0MzU1NCwgNjU4NjIsIDExNDc0LCA2NjMzMiwgNjY2MDMsIAorICAgIDEyODEzOCwgMjQyNiwgMTIwNDIsIDkyMTk0LCA5ODM5MTEsIDk1MzcsIDM5NjEsIDEyMTE1LCA3Nzk1MywgMjYwNSwgNDUwMCwgCisgICAgNjQ1NjEsIDU1MjI0LCA0OTgxLCAwLCAwLCA2Mzg3NiwgMTE2NjcsIDQyNjg2LCA3Nzk3MywgNDIzNjIsIDY0Njg2LCA0NDk5LCAKKyAgICA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgNjgyMTUsIDkxNzkwNCwgODU0MSwgNzgyOTgsIDcwMDM0LCA0MTg2NiwgMCwgCisgICAgMCwgMCwgMCwgNjk5MjQsIDQzNTU1LCAyODIzLCA5NTU5LCAxMDA2MCwgNDE5NDAsIDgyOTksIDQxOTQ1LCA3MTMyLCAKKyAgICA0MTk0MSwgMzMwOCwgNzE5MCwgNjQ4ODAsIDg2MTQsIDY1MjIwLCA0MTQ5MywgMCwgNDE2OTksIDEwNzYyLCA0Mzc4MCwgCisgICAgMTI5OTksIDAsIDAsIDgxMDYsIDQxMjgsIDAsIDYyNzQsIDQ0OTQsIDAsIDQwMTIsIDEwMzk1LCA5ODM1OTEsIDQzNjMzLCAKKyAgICA2NTQ0NywgMTI2NTExLCAwLCAxMTAwNCwgNjk1LCA3MzksIDY5NiwgNzYxMSwgMCwgNDI3NTUsIDc0ODAyLCA5MjI3LCAKKyAgICA3NTA2LCA3NTEwLCA2OTkzNywgNjkxLCA3MzgsIDc1MTEsIDc1MTIsIDc1MTUsIDM4NjgsIDY4OCwgNDE4NDcsIDY5MCwgCisgICAgMjU0OCwgNzM3LCA5NzQsIDgwMDMsIDc0MDYsIDkxNzkxMSwgMCwgMTI4Njg4LCAzOTg1LCA5MTc5MTIsIDY1ODYwLCAKKyAgICA2MzkyMSwgNzA1MSwgNjk3NzcsIDQ2ODIsIDkxNzgwNSwgMTI4MDksIDY0MDYsIDQ2ODUsIDkyNTA1LCAxMDg3OSwgMTAzNDcsIAorICAgIDQ2ODAsIDYzNDEsIDAsIDM4NTEsIDgxMzIsIDc0MzI1LCAwLCA5MTc5MDcsIDAsIDQxOTU4LCAxMTkxNzYsIDkxNzkwOCwgMCwgCisgICAgMCwgNDI2NTcsIDkyNDY4LCA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCA0MzU2OCwgOTgzMTc1LCAxMTcxNywgNzY1MCwgCisgICAgMTA1OTQsIDY0OTUxLCA3NjQ3LCA3NjQ5LCAxMjgxNTUsIDc2NDYsIDAsIDc4MDgyLCA5NjUxLCAwLCAzODkxLCAwLCAwLCAKKyAgICAyMzM3LCAxNzM1LCA3NDMyNCwgNjc4NjAsIDIzNjMsIDk4MzEzNSwgMCwgNDM1NjEsIDAsIDAsIDc0MTQ2LCAxODYwLCAKKyAgICA3NDk1LCA3NTgwLCA1ODEyLCA3NDk3LCA3NTg0LCAxMTkxNDAsIDEyNzg1MywgMCwgMTIwMzQ3LCA3NzI3LCAwLCA4NDk4LCAKKyAgICA2OTgxOCwgODk0OSwgMzA2NSwgNDI3MTksIDcxMzUsIDE1NjksIDkyMzc1LCAxMjUzNCwgMTIxMjQsIDc2OTAsIDAsIAorICAgIDEyNTMzLCA5ODM4NzksIDY0MTgsIDQ1NDMsIDc4MDg2LCA2OTY5LCAwLCA3NDgwMCwgMCwgNjc5NzQsIDExOTgwLCAKKyAgICAxMjg2NTAsIDk4MzgwMSwgNjM4OTQsIDEyMDc2MCwgMTIyODIsIDY2MTkyLCAwLCA3NDU5MiwgODg1MCwgNzQyNzUsIDkyMzgsIAorICAgIDEwNjE3LCA5MTc1NDUsIDAsIDkyNjI1LCAwLCAxMjc5MSwgMCwgMCwgMTI3ODQzLCA0NDQ3LCA3MzczMiwgMTI3OTMsIAorICAgIDEyOTAwLCA5MjM3NywgMTA5NTAsIDAsIDc4MDg3LCAxMjc5MCwgNDE0MDAsIDExOTEyOCwgNjY2MDcsIDEyNzkyLCA0MjIzMiwgCisgICAgMTk0OTM4LCAxNzQ0LCAxMjc4OSwgMTAzNjYsIDEyMzE3LCA0MTMxMCwgOTgzODY5LCA0MTM5OSwgMCwgMCwgNTUyNTgsIDAsIAorICAgIDEyNjkwLCAwLCAwLCA0MzY3MiwgMTI3ODQwLCA0MTY1MiwgMjk3NCwgOTAxMCwgMTEzMTUsIDAsIDI3OCwgMCwgNDE0MDUsIAorICAgIDExOTI1NCwgMCwgMTAwNzcsIDYzODUzLCA3NDU1NywgNDI1ODYsIDAsIDAsIDYwMDIsIDAsIDQzNTUzLCAwLCA2NzkwMywgMCwgCisgICAgMTI3ODcsIDQxMzA4LCA3OTM0LCA2NTMwNiwgMCwgMCwgMCwgODY0NiwgOTgzMTg2LCA3NzgyOSwgNzEzNjAsIDAsIDY0MTMsIAorICAgIDY1NTAsIDAsIDE5NDAsIDAsIDQzNjM3LCAyMjAsIDY1MTkzLCA0MzU1MSwgMTA2NzgsIDEwMDQ0LCAxMjgzMjIsIDAsIDAsIAorICAgIDY4NjU5LCA2NDAzLCA1NzA3LCAxMDM5MywgMTI3NTMyLCAwLCA2NjYxNCwgMCwgMCwgMCwgMTAyOTcsIDAsIDM3NDIsIDAsIAorICAgIDM5NTksIDAsIDAsIDAsIDI0NjcsIDAsIDYwMDMsIDYzODQ0LCA2NjYzLCA4MDQwLCAwLCA0Mzc1OCwgNDE4MiwgNzgxNzEsIAorICAgIDQ2NzYsIDEyMDUwMSwgMCwgMCwgMjUxMCwgMCwgMTAyMDgsIDc4MTY4LCA5MjM2MSwgMTE1NDAsIDQzNTQ2LCA2NjkyLCAwLCAKKyAgICA0MTA2MCwgMCwgNDY2OCwgOTA4MywgMCwgMCwgNzgxNDQsIDE1NTksIDYzODMxLCA5Njc3LCAxMjAyNjAsIDAsIDY1MjU2LCAKKyAgICAwLCA3NDA3MCwgMCwgMCwgMzY1LCAxMjA1NiwgNDMwMjcsIDEyMDQyMywgNDE3MTYsIDEyODIzNiwgMCwgMTIwNDcyLCAKKyAgICA1NTE2LCAyODQ1LCA3NzE3LCA4MDM2LCA0MTcxNywgNzM4MjcsIDU0NCwgMTIwNDUsIDYyNzgsIDAsIDU1MTUsIDAsIDAsIAorICAgIDk4MzA1MSwgNjUzMzksIDQzMjIxLCAyMjExLCAwLCA1NTE3LCAwLCAwLCA3NDg0MSwgNjc4ODQsIDAsIDY3ODkwLCA2Nzg4NSwgCisgICAgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgNjc4ODMsIDAsIDAsIDY3ODc5LCAxMjcxODgsIDE5MDIsIDY3ODg3LCA5NjM4LCAKKyAgICAxMjk3NiwgMTI2NTQ2LCAxMjQ4MywgMTIzNjgsIDQxNzY5LCA0MjcyNiwgNDE3NjUsIDczNjEsIDY2NjcsIDY3ODc0LCAKKyAgICA3NTU2LCA2Nzg3OCwgNzQzNTEsIDExMjY0LCA5ODksIDQyNjc3LCA2Nzg4OSwgMCwgMTMxMSwgOTE3OTY2LCA0MzI2LCAKKyAgICAxMTAwMCwgNjM4MjQsIDEzMDY4LCAxMDkzMiwgMTI4ODgwLCA2OTE3LCA3ODE1NSwgMCwgOTQ5LCA3ODE2MiwgMCwgNjE0OCwgCisgICAgODYwNSwgNDIyNTMsIDc4MTc3LCAwLCAwLCA0MjcxNSwgMCwgMCwgMCwgNjM4NzEsIDAsIDQxNzk2LCAxMjY5LCA2NTMwLCAwLCAKKyAgICA2NTA1NywgMCwgNTE0NCwgMTIyMjEsIDQyNzE2LCAwLCA0NDMxLCA0MzMxLCA5ODM3MjksIDEyODY3NSwgNDE4MzQsIDUyNzksIAorICAgIDAsIDEwMzM2LCA4MzEyLCAwLCA0MjcwMSwgMTI4ODI1LCAwLCA3ODE2NSwgNjYwMzYsIDAsIDAsIDY0MjgsIDQyMjcwLCAwLCAKKyAgICA5ODM1OTYsIDQzMDU5LCA0MjY2NiwgNTI1NiwgMTA2NywgMjU1LCAxMjEzMSwgOTgzNzIyLCA5NDkzLCA5ODM5NjgsIAorICAgIDQxMDE0LCAxMTc5MywgMTk0OTIwLCAwLCA3NDM5NCwgNDM0NjAsIDEwNjUzLCA0MjcyMywgOTgzODU0LCAxMTk2MzIsIDAsIAorICAgIDY1NjAsIDcwMTYsIDc0Mjc0LCA5ODM2MTUsIDQzNTU2LCAzOTI5LCA2Nzk3NywgNjYxNCwgMjc2OCwgOTI1MDQsIDk3NDYsIAorICAgIDUxMzUsIDExODExLCAxMjc5NiwgMTE5NTMsIDAsIDY5NzYxLCA1MTM5LCAzNDYsIDc0MzAzLCA2MzA1LCAxMjc5NSwgNDY3NSwgCisgICAgNTE2OCwgNzg1NTIsIDEyNzc1MywgNzQzMTUsIDc0MzYxLCA4MjUzLCA4ODE3LCAxMTM2LCAwLCA0MzU2MywgOTIyMzIsIDAsIAorICAgIDE5NDc1MCwgNzM5MiwgODIzMCwgOTM2NSwgMCwgMCwgOTgzNjA3LCAwLCAwLCA0MDQxLCAwLCAyMzU3LCA0MzI0MCwgCisgICAgMTI3ODYsIDIyOSwgMTE5ODg1LCAxMTk4ODQsIDQ0MDA0LCA3MTQyLCAxMTk4ODEsIDEyMzUwLCA2NTU1NCwgMTE5ODgyLCAKKyAgICAxMTk4NzcsIDExOTg3NiwgMTI3ODUsIDYzODYzLCA0Mzc5NSwgNzc3MCwgMTA3MTIsIDY0ODUzLCAxMjY4NiwgMTE4OTE2LCAKKyAgICA0MjM3NSwgMCwgMTI3MjM4LCA2NjM1MiwgMTA0NzAsIDAsIDExMDU5LCAxMDc5MSwgOTE3OTQ0LCA0NTAsIDExOTMyOCwgMCwgCisgICAgMTA0MzIsIDEyMDk3LCA1NDUwLCA2NDY5MSwgMTIzMywgMCwgNDQwMDksIDc4Mjg0LCA2NjMzOCwgMCwgMCwgMTgzOSwgCisgICAgMTE4Nzk5LCA5ODMyMTksIDEwOTI3LCAxNzAxLCA5ODM2NjQsIDIzODgsIDQxNzQ5LCA0MTc2MSwgNTQ1MywgODM2MSwgCisgICAgMTE5ODY1LCA0MTc1OCwgNTQ0NCwgNDE3NjMsIDY0ODg5LCA3MTQzLCA5MjQ5MywgNzg2NzcsIDAsIDkyNDI5LCA3ODE3NCwgCisgICAgNjY0MzIsIDg4MDEsIDMwNTMsIDQzNDAsIDk4MzA0NCwgMCwgNjU4MTIsIDkxNzgzMSwgMCwgNDE4MjQsIDY3OTg1LCAKKyAgICAxMjAyMDMsIDE5NDgwMCwgMTk0ODAzLCA0MjcwMCwgMTk0ODA1LCAxMjc5ODAsIDE5NDgwNywgNzg2NzYsIDkyMzU2LCAKKyAgICAxOTQ4MDgsIDAsIDAsIDQ0OTMsIDQzMzYsIDAsIDIzMTQsIDQzNjAyLCA3ODgyNiwgMTE5MzI1LCAxOTQ4MTEsIDQyNDM5LCAKKyAgICA2NDYzOCwgNDIzMjcsIDQzNTI4LCA0NDg5LCA3MTMzMSwgMCwgMTk0NzkzLCAxOTEyLCA0MjM4NSwgMTAzMDYsIDEwMzcwLCAKKyAgICAwLCAwLCA4ODY3LCAxMDI1MCwgMTAyNTgsIDI3MTIsIDE2MzUsIDc4ODIxLCAxNDEwLCA5MjY3MSwgOTgzMjUwLCAxMTg4NzgsIAorICAgIDAsIDAsIDk5MTksIDEyMDUyOCwgNTU5LCAxMjgxNTcsIDQxODI1LCAxMjc5NzUsIDc4MTg4LCA0ODkyLCA3NDAxNiwgCisgICAgMTk0NzgxLCA2NTQyLCA0MTk1NywgMTI4ODY1LCA1Nzc3LCAwLCA3NTksIDY1NzQ5LCAyMDc5LCA2NTI0OCwgMTI3ODgsIAorICAgIDY0NDg3LCA2NDU1MiwgMCwgMTAyMjMsIDQyMDYyLCAwLCAwLCAxMjY1NzMsIDM2NjgsIDY1NzU0LCA0MzU2MCwgMTIyMjYsIAorICAgIDY3OTkxLCA2NTE0OSwgMjM0MCwgNDE5NTksIDE5NDc4NiwgMTk0Nzg1LCAxOTQ3ODgsIDQzNjE4LCA2NTc0NywgMTA5MzcsIAorICAgIDI5NjIsIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCA5MjQzNiwgODkyMSwgOTk1MiwgMCwgMCwgNDI3MTQsIDk5NTEsIDQzNDA5LCAKKyAgICAxOTQ3NzAsIDI5NDksIDY2MDEyLCAxOTQ3NzUsIDE5NDc3NCwgMjk1OCwgNjgzNTksIDQxODIwLCAyMzAwLCAyMzk1LCAKKyAgICAxMjg1NjMsIDk5NzYsIDEyMDA0MywgMTIwMDUwLCAxMjAwNTgsIDY4MjIwLCAxMjgxNDMsIDQyODA5LCA0MjgwNywgMCwgCisgICAgMTIwMDQ2LCAxMDE5OCwgNDE1MCwgNjQzNzEsIDgzMTgsIDQxNzkwLCA2Nzk3NiwgNDE4OTgsIDIzNjAsIDQxNzk0LCAKKyAgICA5MTc5NDIsIDcxMzE0LCAxMjc4MTgsIDAsIDAsIDI0MTgsIDk4MzA5OCwgMjQxMSwgMTEzMzYsIDc5OSwgNjM4MjMsIAorICAgIDEwMjc2LCAxMDMwOCwgMTAzNzIsIDkxNzU0MSwgNDE3NzIsIDQyODEzLCAyMzE3LCAxMDI2MCwgMTE4OTgwLCA1NTI4NCwgCisgICAgOTIyMDMsIDAsIDEwMzg0LCA5ODMyMjAsIDAsIDAsIDc3NTMsIDIzNTEsIDY2NTUsIDY0NDg5LCA2OTkzMSwgMCwgNzc4NzIsIAorICAgIDQ0NDMsIDQyNzc5LCAyMzAsIDAsIDAsIDQzNTQ5LCA0ODU1LCA0MjE1MCwgNjU3MzksIDU0NDEsIDQxODk2LCAxMDI4OCwgCisgICAgMTAzMjAsIDAsIDg1NSwgNzA0NiwgNjEwOSwgNjUwNDUsIDYzODM5LCA3ODE5OCwgMjA0OSwgMTAwOTgsIDAsIDc0MTQ1LCAKKyAgICAxMjc5NDMsIDEwMjY0LCAxMDI4MCwgOTE4NCwgMTAzNzYsIDcwMTMsIDQ0NjcsIDAsIDAsIDAsIDQxODg3LCAwLCA0ODYyLCAKKyAgICA5NzM1LCA2NTM3LCAxMjA1OTEsIDc0Mjg2LCAzOTE0LCA5MjE3OCwgOTM5NzYsIDkwNjUsIDEyOTYxLCAwLCAwLCA5MjI1MywgCisgICAgMCwgMjg5LCAwLCA0Njk0LCAxMTQyMCwgNDY5MCwgMCwgMTIwNTE0LCA5MTc5NzgsIDQ2OTMsIDczODkzLCA0MjcyNCwgMCwgCisgICAgNDY4OCwgMTIwNDU0LCAwLCAwLCA2Nzk5NCwgODIzOCwgMzExMCwgMTIwMTYyLCA5ODM5MDgsIDEyMDE2MywgNjUyOCwgCisgICAgMTI3NTUzLCA0MzAzNSwgNjk4OTgsIDIxOCwgMCwgMTUyMCwgMCwgNDc4NiwgMCwgNDMyMjUsIDQ2MDIsIDAsIDc4MTY3LCAKKyAgICAxMDA4OCwgNjU0OCwgMCwgMTIwMTU2LCA0Mzk3OCwgODk4OCwgODg4OCwgMCwgMCwgMCwgMCwgMTA2NjYsIDAsIDczOTAyLCAKKyAgICA2OTc0MCwgMCwgMCwgOTk3NSwgMTI4MDM5LCAxMTk5MDIsIDQ2ODksIDg5MzIsIDAsIDY1NTYwLCAxMTkyMDksIDc0NDQxLCAKKyAgICA3ODgxMCwgMCwgMCwgNjc5ODcsIDAsIDAsIDAsIDY3OTg5LCAwLCAxMDA2NSwgODIwNywgMCwgOTI2MTMsIDEyODAxMSwgMCwgCisgICAgNjYyLCAwLCA5MjQ0LCAxOTQ4NjMsIDAsIDExOTI2MSwgOTgzNDI4LCAwLCAwLCAwLCA0MTkyOSwgMCwgMCwgNjY2NzQsIAorICAgIDQxOTI2LCAxMjA0MDgsIDEyMDQ0MywgMTA1MTMsIDY0NjM3LCAxOTQ4NjIsIDY4MDEzLCA1MiwgMTMxMTgsIDY0NzUsIDAsIAorICAgIDEyMDM0MSwgMTIwOTUsIDEwMjI1LCA0ODEyLCA5MjU3OCwgMCwgNjc5OTIsIDc0MDg1LCAwLCAzOTc4LCAwLCA5MTc5NDUsIAorICAgIDEyNzgyMywgMTE1ODIsIDEyMDc2MSwgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCA5Mzk2MSwgNjk3ODIsIDEyODU1NywgCisgICAgMTk0ODYwLCAxMTc2NSwgNjUyNTgsIDEwMzY5LCAwLCAxNTg1LCA3MTkyLCAxMDI0OSwgNDIyLCAxNTAwLCAyMDM2LCA5ODYsIAorICAgIDE5NDg1OSwgNjQzOTQsIDU3ODEsIDU1OTksIDY0Mjk0LCAyNDk0LCAxMjA0NTAsIDQ4NjEsIDc0MDIxLCA2NDMzNCwgCisgICAgNzgyMDMsIDEyNzgwOCwgMCwgOTIyNjYsIDY1MTAyLCA4OTYxLCA2NTg0MiwgMTAyNDMsIDEwMjQ1LCA3NDE5MSwgMTIwNDEwLCAKKyAgICAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCA5MjY4MywgMCwgMjAyLCAxMjgyNDYsIDc0MTMxLCAxMjQyLCA2NTUxNCwgCisgICAgMCwgNjM5NDAsIDEyODcwNiwgNjQ1MzMsIDEyMDEyOSwgMCwgNjc4NDIsIDExOTkwLCA5MjQzMCwgNjM5MzksIDQzMzc1LCAKKyAgICA2NTQ0MCwgMjUwNCwgMCwgNzg2NzEsIDY0ODI5LCA5ODM5MTAsIDY5NDMsIDkxNzkzNCwgNTg1OSwgMCwgMjg1OCwgCisgICAgOTgzMzYxLCA3NDI5NCwgOTgzOTE0LCA2OTIzOSwgMCwgMTE5MDI3LCAxMjk5MiwgMjc1MywgMTkzNiwgNzAwNzgsIDkyNTc0LCAKICAgICAyNzUxLCAxMjY2MiwgMjc2MywgODk1MywgNjQ3MDEsIDEwNzMxLCAxMjkyMiwgNzA1MiwgOTE3ODM5LCAwLCAwLCAwLCAKICAgICA2MzkyMCwgNzQxMjgsIDI4NTYsIDExOTkxMCwgNDcsIDY5OTA4LCAxMjY5ODYsIDY1ODU4LCAwLCAwLCAwLCA3ODk5LCAwLCAKICAgICA4NDE3LCA0Mzc5OCwgNzA3MiwgMCwgMCwgNDAzMywgMTI4MTY0LCA0Mzk5MiwgMCwgMCwgMjEyLCA2NDYwMCwgMTkwMywgCkBAIC0xNzc5NywyMyArMTc4MTYsMjMgQEAKICAgICAxMjYyNCwgMCwgMTY3MywgNDgxMSwgOTIzODMsIDU5ODYsIDkzMzgsIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIAogICAgIDExOTU5OCwgOTgyMCwgMCwgMTIxODcsIDAsIDAsIDU5ODQsIDAsIDQzMzA4LCA0MzkzLCA2NzY1MCwgMCwgMCwgMCwgMCwgCiAgICAgNzQ4MjYsIDY0NzMzLCAwLCAwLCAzNDkxLCAwLCAwLCAxMjgyMTksIDM1MTQsIDY1NDg1LCAwLCA3NDkyLCAwLCA3NDYwNSwgCi0gICAgOTI0ODMsIDc1MTQsIDk4MzM1OSwgMCwgMTk0NzMxLCA3NTAyLCA3NTg3LCA2ODM1MywgMCwgMCwgNjM5MjUsIDAsIDc2MTAsIAorICAgIDkyNDgzLCA3NTE0LCA5ODMzNjcsIDAsIDE5NDczMSwgNzUwMiwgNzU4NywgNjgzNTMsIDAsIDAsIDYzOTI1LCAwLCA3NjEwLCAKICAgICAyMTksIDAsIDAsIDY5MiwgNDM1ODgsIDc0NDMzLCA0MTYzNSwgNDMyNDEsIDk2ODgsIDcxNDcsIDk1MzUsIDAsIDkzOTkxLCAKICAgICAwLCA2NDUzMCwgMCwgNjQ2MTAsIDExODA0LCAwLCA3MTQ5LCA3NDUzLCAwLCA4MDEzLCAwLCA5MjMwMSwgMCwgODg5NSwgCiAgICAgNTI1MywgNzAwMjUsIDU0NTgsIDAsIDI4NjYsIDAsIDEyNzg2MCwgNjUxMTEsIDY4NDMzLCA2NzAwLCAxMjA0ODQsIDAsIAotICAgIDEyMDU4MywgMCwgODk2MiwgNzc5NjAsIDk2NDEsIDQzNjk0LCA3MDU5LCA5ODM2NjgsIDAsIDk2MDQsIDc4NzAwLCA3NDQxLCAKLSAgICA2MzgyNiwgNjc5NzAsIDExODk0MSwgNjQzOTIsIDE5NDczNSwgOTgzNjc4LCAyODQ0LCA5ODM5MzIsIDQxOTc0LCAwLCAKLSAgICAxMjEzOSwgNjc5NzEsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAzMTA0LCAxOTQ3MzQsIDAsIDE5NDc2NSwgOTgzMjI3LCAKKyAgICAxMjA1ODMsIDAsIDg5NjIsIDc3OTYwLCA5NjQxLCA0MzY5NCwgNzA1OSwgOTgzNjc3LCAwLCA5NjA0LCA3ODcwMCwgNzQ0MSwgCisgICAgNjM4MjYsIDY3OTcwLCAxMTg5NDEsIDY0MzkyLCAxOTQ3MzUsIDk4MzY4NywgMjg0NCwgOTgzOTQxLCA0MTk3NCwgMCwgCisgICAgMTIxMzksIDY3OTcxLCAwLCAwLCAzMzU4LCA2NTI5NSwgMCwgMzEwNCwgMTk0NzM0LCAwLCAxOTQ3NjUsIDk4MzIzMywgCiAgICAgNTMwOCwgMCwgMjkwLCAwLCAwLCAyODYyLCAyNzkyLCAxOTUwODgsIDk4MzA3MCwgMCwgMzI2OCwgNjY1OTEsIDAsIDY1NTIsIAogICAgIDQyMzY3LCA3MDM1LCAxMjA1NTgsIDAsIDAsIDE4MTQsIDAsIDEwMjQwLCA5MjMzOCwgNzQzMDUsIDAsIDc0NTI4LCA2NTkwMywgCiAgICAgMCwgNDI2NDYsIDc2MDYsIDI1OTEsIDI4MzcsIDQzNDEsIDc3OTU2LCA2NDQ4MiwgMTI3MzM3LCA4MTYzLCA2NTI3MCwgMCwgCiAgICAgNzc5MzIsIDAsIDkxMTIsIDc0NDMxLCA4NjMsIDk0OTAsIDExOTg5OCwgMTI4MzQ5LCA0MzMyMywgMTIwNTEzLCAxMTk4OTcsIAogICAgIDkwNzEsIDEyNzMzMywgMCwgMzY1NCwgNzc4OSwgOTYzNywgMCwgMjUzNSwgNjU1MDQsIDc2NTMsIDQwOTkzLCAxMTk4OTksIAotICAgIDY2NTg3LCAxOTUwOTgsIDAsIDkyNDAxLCA5ODM4ODUsIDExMDA2LCAxMjkyNywgNzgwNywgODA3MywgMCwgMTA2MjksIDAsIAorICAgIDY2NTg3LCAxOTUwOTgsIDAsIDkyNDAxLCA5ODM4OTQsIDExMDA2LCAxMjkyNywgNzgwNywgODA3MywgMCwgMTA2MjksIDAsIAogICAgIDc0MDg4LCAzMDU2LCAxMDgyMywgMTI4Nzk3LCAxMjczMjcsIDg3NjIsIDEwNTA4LCA2OTY4OSwgNzM3NzAsIDQzOTY5LCAKICAgICA0MzE5MywgMTA3MzcsIDM0NjMsIDk4MzA2NSwgMCwgNjY2MzMsIDg2OTUsIDQ4MTUsIDExMzIyLCA1ODExLCAxMjM0NSwgCiAgICAgNzA0OSwgMTE5OTExLCA1MTk1LCAxOTUwODEsIDAsIDY2NjM5LCAwLCAwLCAwLCAxMjgwNDEsIDAsIDkyMzg1LCAxMjYyLCAwLCAKLSAgICA2NTYxLCAxOTkzOSwgMCwgMCwgMTI4NTM1LCAxMTk5MDYsIDAsIDAsIDk4MzA5NywgMCwgOTgzNjU4LCAxMTk5MDcsIAorICAgIDY1NjEsIDE5OTM5LCAwLCAwLCAxMjg1MzUsIDExOTkwNiwgMCwgMCwgOTgzMDk3LCAwLCA5ODM2NjcsIDExOTkwNywgCiAgICAgNjQ2MTIsIDExOTkxLCAwLCAwLCAwLCAxNTAyLCA5MTc1NjgsIDAsIDkxMDcsIDEyNzMxNiwgNTcwMiwgMzY1NSwgNjc2NjEsIAogICAgIDg0MzAsIDAsIDc0MTMyLCAxMjA3NTgsIDAsIDc0MDU3LCA5NjAzLCAwLCA1MjU0LCAxMjA3NDIsIDc3MjQsIDc0Mzg4LCAKICAgICA2ODM3NSwgMTA3OTYsIDUxMjksIDAsIDAsIDU5MCwgNzU3OSwgNTYxNCwgNTg5MywgOTIyODAsIDExNzIwLCA5MjQ5NiwgCkBAIC0xNzgyNywxNyArMTc4NDYsMTcgQEAKICAgICAwLCA2NTU1OCwgNjU5NDYsIDgxMTMsIDcwODcsIDUyNTUsIDE3ODYsIDY2MSwgMCwgMCwgMCwgNzQ0MjMsIDcxMzQ1LCA1ODYsIAogICAgIDc0NDE0LCA2NDM1OSwgMTI2NywgMTI4MjY5LCA2NTQ2OCwgMCwgNjU3MzEsIDAsIDEyNzE3OSwgMzYyMSwgMTIwNDczLCAKICAgICA2NjY2NiwgNjQyMTEsIDAsIDY1NjIsIDEyOTI4LCAwLCAxMjI4LCA2NTQ5MCwgMTEzODMsIDAsIDAsIDAsIDE3MTQsIAotICAgIDc0NDA2LCAxMjc4MzEsIDAsIDk4MzkxMiwgMCwgNjYyMjUsIDAsIDAsIDQyNjYwLCAxMTQzNiwgMjA3MCwgNjQsIDEyMDY5NCwgCisgICAgNzQ0MDYsIDEyNzgzMSwgMCwgOTgzOTIxLCAwLCA2NjIyNSwgMCwgMCwgNDI2NjAsIDExNDM2LCAyMDcwLCA2NCwgMTIwNjk0LCAKICAgICAwLCAxMDI5MSwgMTAzMjMsIDI4MjYsIDAsIDAsIDAsIDQyMDA4LCA5NzA4LCA0MjcxMCwgMCwgNDIwMTEsIDQxOTk5LCAKLSAgICA5MjE2NCwgMTIyMDYsIDU4MzksIDE3MDIsIDEyNDAsIDc0MDY1LCA2Mjg2LCAwLCA5ODM5NjAsIDY1ODMzLCA3Nzg0OCwgMCwgCisgICAgOTIxNjQsIDEyMjA2LCA1ODM5LCAxNzAyLCAxMjQwLCA3NDA2NSwgNjI4NiwgMCwgOTgzOTY5LCA2NTgzMywgNzc4NDgsIDAsIAogICAgIDE3NjUsIDAsIDAsIDY1NTg4LCAwLCAwLCAwLCA4NDAxLCAwLCA0MjAxNCwgMCwgNzAzMCwgMTk0NzA0LCAxMDQ3OSwgCiAgICAgNjQ5NTksIDI4NTIsIDAsIDAsIDAsIDAsIDEyODU4NiwgOTE3OTUxLCA2OTYzLCAwLCAxMjY2NywgNjQ1NDAsIDc0Nzg2LCAKICAgICAxMDE0NywgMTI5MzUsIDEyNzU2OCwgMTI2NDgzLCAwLCAwLCAwLCA3ODc1NywgMCwgMCwgMCwgMCwgOTk5NCwgMTI0NjcsIAogICAgIDI4NjQsIDY0NzE5LCAxMTQ4LCAxMDQzNSwgMTE0NjIsIDQxNjc1LCA3MDg0LCAyNzY1LCAwLCA0MzM4MiwgMCwgMTIwNzE5LCAKICAgICAxMjgxODgsIDkyNTE2LCA2NjY2MiwgMCwgNzgxMzMsIDkzNjQsIDE5NDY4NSwgNzQ0MTYsIDAsIDAsIDc3OTg4LCAyNjMsIAotICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDc4Mzg3LCA5ODM3MzMsIDc3OTg2LCAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIAorICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDc4Mzg3LCA5ODM3NDIsIDc3OTg2LCAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIAogICAgIDcxNzcsIDcwMTA1LCAwLCAwLCAwLCA0MjYyLCAxMDI4NSwgMTA3MjIsIDQyMDIwLCAxMjY1NzUsIDY4MDYsIDY5OTIsIAotICAgIDQyMDE5LCAwLCA0MTI5MCwgOTgzNzA3LCA3NTAsIDAsIDcxMzA0LCAxMDE2MywgNjM5MTMsIDcxMzAwLCA3MDMyLCA1OTU0LCAKKyAgICA0MjAxOSwgMCwgNDEyOTAsIDk4MzcxNiwgNzUwLCAwLCA3MTMwNCwgMTAxNjMsIDYzOTEzLCA3MTMwMCwgNzAzMiwgNTk1NCwgCiAgICAgNjQ5MzEsIDQzMTQsIDAsIDE5OCwgNjg0NTMsIDczMCwgMTIwMDk0LCA2MzkwNywgNzc5OTMsIDc4ODkxLCAxMzE2NSwgCiAgICAgNzEwNywgNzQxNzEsIDQyODA0LCA2NzgsIDgyNDAsIDc4MDE1LCAxMjg3ODQsIDQxMzc4LCAxMTAwOCwgNjkzOCwgNzAwMjYsIAogICAgIDkyNjM3LCAyMDk3LCA2NjI0NiwgMTIwNTYwLCAwLCAwLCAwLCAzODkyLCA2ODYzMiwgNjk2NDIsIDY3MTIsIDY2MDQ1LCAKQEAgLTE3ODQ1LDMxICsxNzg2NCwzMSBAQAogICAgIDY5NjY5LCA0MzI1NCwgNzM4MzEsIDAsIDEwMjkzLCA1OTUyLCAxMjgxLCA0Mzc0NywgMCwgMCwgMTA2NzcsIDYwNCwgCiAgICAgNDEwOTcsIDkxODIsIDE4NTksIDAsIDkyNjAzLCAzNDI1LCAxMjc0ODgsIDAsIDI4MzYsIDAsIDAsIDk3MDcsIDAsIDQzMjAyLCAKICAgICAwLCAwLCA2NTE5OSwgMTczOCwgOTE3ODE4LCAxMjgxNTgsIDI4MzIsIDkyNzAyLCA5NjcwLCAxMjkzNywgMCwgNjYzNzQsIAotICAgIDkxNzk1NiwgMCwgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODM3MTQsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIAorICAgIDkxNzk1NiwgMCwgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODM3MjMsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIAogICAgIDEzMzEsIDAsIDAsIDAsIDEyNzA4LCAwLCA1MDkwLCA1MDg5LCAxMjc5NzcsIDAsIDExOTEwOSwgMCwgMTI4NjgxLCAzMTksIAogICAgIDExODg0NywgNDM0NzksIDk0NzcsIDAsIDAsIDUwODcsIDkyMzI1LCA3NjQwLCA5NiwgNTA4NiwgMCwgOTIzNzksIDAsIAogICAgIDUwODUsIDY0Mjg2LCA5MjY2NSwgMCwgNDE0MjIsIDAsIDExOTkwMSwgNDIzNTYsIDM3NzIsIDAsIDAsIDUwMTEsIDAsIDAsIAogICAgIDEyNjU4NywgMCwgMTI3MTY1LCAxMjcyNDEsIDY2NzcsIDc2MDEsIDAsIDU5MSwgNjQ0MTksIDExODk1MywgOTIyNjIsIDAsIAogICAgIDExODkyMywgNzAwODQsIDAsIDEwOTM5LCA2MTA2LCA2OTMzLCA0MTI3MSwgNjc2MCwgNzEzNDMsIDQ1MzQsIDQxMjcwLCAKICAgICAxMjg4NzYsIDAsIDY1NTc0LCAwLCA5MjI0LCA2OTg1MywgMzY3MSwgODk3NiwgMTI2NDc0LCAwLCA0MTI3NSwgNjM3MiwgCi0gICAgMTI4MDg0LCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCAwLCA0MTI3MywgOTgzNzIxLCAwLCA2NzI4LCAwLCA5NzE1LCAwLCAKKyAgICAxMjgwODQsIDU1MjYxLCA3OTYzLCA2MzcxLCAwLCA1NjgsIDAsIDQxMjczLCA5ODM3MzAsIDAsIDY3MjgsIDAsIDk3MTUsIDAsIAogICAgIDgyNTgsIDExNzUzLCA3NDgyMCwgMCwgOTYwMiwgMTE4OTE5LCA0MiwgMCwgNDM2ODgsIDAsIDAsIDc0NTgsIDAsIDAsIAogICAgIDY1Mzg1LCAxMTk5MDAsIDAsIDExOTU4LCAwLCA5MTc4MjIsIDAsIDYyNTQsIDQyNzIxLCA2NjMzNiwgODA0NSwgMTE1NTAsIAogICAgIDAsIDAsIDk4MzU5NywgNDI4NTgsIDExNzg5LCA2NTg2OCwgNTU1NywgMTAxMzMsIDk3MzcsIDEzMTA5LCAwLCA5NDY3LCAKICAgICA1NTU4LCA4ODc4LCAxMjgxMzYsIDE5NTAzNiwgNzQ1MSwgNjcwNiwgMTAxNDYsIDAsIDkwODYsIDY0NTY2LCAwLCA2NDU4NCwgCiAgICAgNzQzNywgNzQ1NCwgMTI1OTQsIDEyODY5MCwgNjgzNjIsIDQ1NDYsIDc3MzEsIDAsIDcwMDQ4LCA3NDI0MywgMCwgMzgwNSwgCi0gICAgMCwgMTk0NTY1LCA0NDAwMSwgNDEwMDgsIDAsIDYzMDcsIDE5OTQ5LCA5ODM3ODEsIDc1NDQsIDk4MzA0NSwgNDM0NjksIDAsIAorICAgIDAsIDE5NDU2NSwgNDQwMDEsIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgOTgzNzkwLCA3NTQ0LCA5ODMwNDUsIDQzNDY5LCAwLCAKICAgICAwLCAxMDE1MiwgNjQ0MjIsIDY1MDkxLCAxMTkxMTMsIDc2MDIsIDY0NzI5LCAwLCA0MzUyMSwgMCwgNDIzMDIsIDQzNzExLCAKICAgICA0MzUyMywgNDE0NDcsIDU1NTksIDAsIDg3MDQsIDIzOTcsIDU1NTYsIDAsIDAsIDAsIDkwMTEsIDk2MzAsIDkyNjMzLCAwLCAKICAgICA5Mzk5OCwgNTUwNiwgMCwgMTkxMSwgNjY2NTIsIDAsIDk5NjEsIDg4NDUsIDY2Njk4LCAwLCAxMDc5MiwgODg4OSwgMCwgCi0gICAgMjA5OCwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgOTgzNzk2LCA3NDM2NSwgNzU1MiwgMCwgMCwgCisgICAgMjA5OCwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgOTgzODA1LCA3NDM2NSwgNzU1MiwgMCwgMCwgCiAgICAgNjUzODQsIDcyMjMsIDQ1NTksIDAsIDE5NTYsIDQzMTM4LCA3MDI0LCA2NTcyOCwgNjQ1MDEsIDEyMTAsIDE5NTA3NywgCi0gICAgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCA5ODMyODUsIAotICAgIDk4Mzc4MywgMCwgNDM1NywgMCwgMTE5ODM3LCA5MTc4NjMsIDc0MjMzLCA5OTY3LCA3ODg4NCwgNDI4NjAsIDExOTgzOCwgCisgICAgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCA5ODMyOTMsIAorICAgIDk4Mzc5MiwgMCwgNDM1NywgMCwgMTE5ODM3LCA5MTc4NjMsIDc0MjMzLCA5OTY3LCA3ODg4NCwgNDI4NjAsIDExOTgzOCwgCiAgICAgMTA5NDEsIDY1NzIxLCA2OTYyLCAwLCAwLCAxMTkzMjQsIDAsIDExMDE0LCAxMjc5NzIsIDg5NDIsIDEyMDAwLCA2OTIyNCwgCiAgICAgOTIyNjcsIDEyODUzNiwgMTE5NzQsIDkyMjEzLCA0Mjc3MiwgMTI3NTE4LCAxMTY1MCwgNTAxMywgOTI2NjMsIDEyNjU4MywgCi0gICAgNjYyMTAsIDExODkxNCwgNjYxMywgOTI0NzYsIDAsIDQzODE5LCA5ODM3NjEsIDAsIDY0NzE0LCAwLCAwLCAxMjE2MiwgCi0gICAgMTIxMjAsIDQzNDc2LCA5ODM3NTcsIDExMDI0LCA3NDgxMSwgNjYyMjgsIDEwNTYzLCAwLCAxMjcxOTYsIDQzNTIyLCAyNDYyLCAKKyAgICA2NjIxMCwgMTE4OTE0LCA2NjEzLCA5MjQ3NiwgMCwgNDM4MTksIDk4Mzc3MCwgMCwgNjQ3MTQsIDAsIDAsIDEyMTYyLCAKKyAgICAxMjEyMCwgNDM0NzYsIDk4Mzc2NiwgMTEwMjQsIDc0ODExLCA2NjIyOCwgMTA1NjMsIDAsIDEyNzE5NiwgNDM1MjIsIDI0NjIsIAogICAgIDAsIDE4MzcsIDAsIDYzOTcyLCA2OTU3LCAwLCAxMjA1NTksIDQ5NTIsIDY1NzE4LCA2NTgyNywgNTUwNCwgNjU3MjAsIAogICAgIDY1NzE0LCA2NTcxNSwgNjU3MTYsIDAsIDEyNzAwNSwgMTI3MTE5LCAzMTA5LCA2Mzk3NSwgNzQwMjgsIDAsIDgxMDcsIAogICAgIDExOTIzNCwgMTEyNywgNDU1LCAwLCA2Mzk2OCwgMTI3OTI0LCAzNDgzLCAxMTk1OTMsIDE5ODksIDAsIDY5Njc4LCA5MTA0LCAKQEAgLTE3ODgyLDcgKzE3OTAxLDcgQEAKICAgICA0MTg2OSwgMTI2MTksIDAsIDEwMTU0LCA5ODMwNDMsIDc0NDM5LCAyMDM5LCAwLCA3NDQ2LCAxNjg0LCA2Mzk3OSwgMTA5NzQsIAogICAgIDQ1OCwgMTIwNjIwLCAwLCA2OTc5MSwgMTI3MTYxLCAxMTkxNiwgNjUwMTYsIDAsIDY5NjcxLCA0MjExNSwgOTgzMTMzLCAKICAgICAxMjI4OCwgNzgwNTcsIDAsIDE0OTMsIDQyMTExLCA3NTUzLCA0MDk3LCAxMjgxOTksIDEzMDgwLCAwLCA2NTgwOCwgNjYxMCwgCi0gICAgNjAzMCwgODA1OSwgNzUwOCwgMTMxMzEsIDAsIDk4MzQyMywgMCwgODc5NCwgNDEyNzgsIDQxNjI5LCAxMjE1NCwgMTI4MTkyLCAKKyAgICA2MDMwLCA4MDU5LCA3NTA4LCAxMzEzMSwgMCwgOTgzNDMxLCAwLCA4Nzk0LCA0MTI3OCwgNDE2MjksIDEyMTU0LCAxMjgxOTIsIAogICAgIDQxMjc3LCA2NDY1OCwgMCwgNjQzODAsIDY2MjUsIDc0MzU0LCAxOTkwNCwgMCwgMCwgMCwgNjUzNzEsIDcwNzgsIDAsIDgzMywgCiAgICAgMCwgNjM2OSwgMCwgMTA5NzksIDQxOTUzLCAwLCA0MTQzNCwgNjA2MiwgMCwgMCwgMTk5MTYsIDY5MTMsIDkzMywgMTM0MSwgCiAgICAgOTg0MiwgNjcyMCwgNjU3NDQsIDAsIDk4MzU5MiwgMTI4Mjk1LCAwLCA3NDA1LCAxMDEwNSwgNjU4MTAsIDAsIDQxNjMyLCAKQEAgLTE3ODk3LDIzICsxNzkxNiwyMyBAQAogICAgIDY3NDEsIDQzMDQ3LCAwLCAxMzE4MCwgMTI4NTE3LCA0MTgsIDkxNzk3MiwgNjQ0OTUsIDEwMjk1LCAxMDMyNywgMTAzOTEsIAogICAgIDQxNzUyLCA3NDMzOSwgODY0MSwgNDE0NDksIDAsIDc0MTAwLCAwLCAxMDkxMSwgNjk0MiwgMCwgMTAyNCwgNDI4NDksIAogICAgIDQxNzUxLCA2OTc3NiwgODk0MSwgOTgzNTU2LCA0NTU0LCAwLCA5MDIzLCAxMTY4NSwgMCwgOTkyOCwgNzg2MTcsIDAsIAotICAgIDExNDM3LCA0Mzc0MSwgOTIxNjMsIDEyMDcwMCwgNjM5NjcsIDk4MzQ3NSwgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIAorICAgIDExNDM3LCA0Mzc0MSwgOTIxNjMsIDEyMDcwMCwgNjM5NjcsIDk4MzQ4MywgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIAogICAgIDQzMTY2LCAwLCAxMTY4MCwgOTI2MTksIDExNjg2LCA3ODU0NCwgNjUyMjQsIDQ1NjUsIDQ2NTUsIDExOTU1MywgMCwgCiAgICAgOTIxODMsIDY0NTIzLCAxMDM0MywgMTA0MDcsIDAsIDY2NjcxLCAxMTQ2NiwgMCwgMTI4MDAzLCA0Mjg5MCwgNzQwMTMsIAogICAgIDEyMDUwLCA2ODIwMSwgMjg2MCwgMCwgMCwgMCwgNDI3OTIsIDU3NDMsIDEwNDI0LCAxMjA2NSwgNDI4NzIsIDAsIDkyMzQyLCAKICAgICAwLCA4ODc1LCAwLCAwLCA5MTc5OTEsIDc1MzEsIDEyODQ3LCAyNDEzLCAwLCA3ODYzNSwgOTYyLCAwLCAxMjg1NSwgNDExOTYsIAotICAgIDQyNTY0LCAwLCAxNTgyLCA5ODM3MDYsIDU1MDgsIDAsIDAsIDAsIDEwODAxLCA2OTg3NiwgOTIzNTQsIDAsIDcxNzMsIDQ5NiwgCisgICAgNDI1NjQsIDAsIDE1ODIsIDk4MzcxNSwgNTUwOCwgMCwgMCwgMCwgMTA4MDEsIDY5ODc2LCA5MjM1NCwgMCwgNzE3MywgNDk2LCAKICAgICAxMDQzOSwgNDMxMywgNjQ2MDcsIDY5NjM4LCA3ODYwLCAwLCA5MDYsIDQyNzkzLCAyODQyLCA2NDA1LCA2NDcyMiwgMTMxMzIsIAogICAgIDc5OCwgNjQ2OTQsIDEyODAxLCA4NDA2LCAxMTUzLCA5MjE3MywgNjQ3ODgsIDAsIDgwNTQsIDkxNzQsIDEyODY1MiwgCiAgICAgOTE3OTc2LCA5OTY0LCA3NDQwOSwgNDE2MTEsIDQ2NDIsIDY2NTc0LCAxMTU1NiwgOTE3OTgyLCAwLCA3ODg1NywgNDIwODksIAogICAgIDc4ODU1LCA5MDA4LCAwLCAxMjY1OTIsIDE5NTA5NiwgNDIwNzksIDkxNzk4MSwgNzc5MjQsIDQyNTEzLCA3NzkyNywgCi0gICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDk4MzY5MywgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCAKLSAgICA0MjA5MywgMzkyMCwgMCwgMCwgMCwgMCwgNDU4MCwgNDE5NjcsIDk4MzcyMywgNjQzODQsIDkyMTY3LCA5Mzk4NCwgMzAyMSwgCisgICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDk4MzcwMiwgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCAKKyAgICA0MjA5MywgMzkyMCwgMCwgMCwgMCwgMCwgNDU4MCwgNDE5NjcsIDk4MzczMiwgNjQzODQsIDkyMTY3LCA5Mzk4NCwgMzAyMSwgCiAgICAgNDIwMDQsIDAsIDAsIDQyMzE3LCA0MTk5OCwgMCwgNjk0NiwgMCwgMCwgMCwgMTI4MTkzLCA2NTIwNCwgMCwgNjgxMTMsIAogICAgIDQyNjkwLCA5ODgwLCA0MjAxMCwgNzQ4MjQsIDY0NTg5LCAxMDExMSwgNjQ4NzUsIDEyNzg4MCwgNjgzOTksIDQzOTk4LCAKICAgICAxMTM2MCwgMCwgMCwgMCwgMTE4ODI2LCA0MjE0OSwgMCwgMCwgMCwgNjQ5NDEsIDc3OTE5LCAxMjA0MjEsIDEyODA3NywgMCwgCiAgICAgNTUyNDcsIDQxMTAsIDY2MDA1LCA2OTU5LCAxMDkyOSwgMTE5MTEwLCAwLCA2NjcwMywgNzc5MjEsIDg2MTcsIDQxOTgyLCAKLSAgICA2MDI1LCA2OTI0MiwgOTgzMTc2LCAwLCAwLCAwLCA5NTk3LCA0MjA5OSwgNDMxNzIsIDk4MzM2OCwgMTAxMTcsIDk4MzE2OSwgCisgICAgNjAyNSwgNjkyNDIsIDk4MzE3NiwgMCwgMCwgMCwgOTU5NywgNDIwOTksIDQzMTcyLCA5ODMzNzYsIDEwMTE3LCA5ODMxNjksIAogICAgIDkyMjk3LCA0MTYzNiwgMCwgMCwgMTIwNjgxLCA4MzAxLCAwLCAwLCAxODcsIDAsIDY1NjY5LCAxMjgzMzksIDQ5NjMsIDAsIAogICAgIDEyNzUxNywgMCwgODk2NCwgNjU2NzYsIDc3NzUsIDAsIDQxOTQ4LCAwLCAwLCAwLCA0MTk0MiwgNjU0NDksIDMxNjAsIAogICAgIDEwMDgxLCAxMzIyNiwgNDIxMjEsIDQyNDc1LCA0MjY2MywgMTI4MjEwLCA0MTc2NiwgMTE5MTE0LCA2NTg4MiwgNzg4NDksIApAQCAtMTc5MjMsMjAgKzE3OTQyLDIwIEBACiAgICAgMzEwMywgMCwgNDE3NTMsIDEyODU0MCwgMCwgMCwgNzg4NDQsIDc4ODQ1LCA0MTczOSwgNzg4NDMsIDQyNTE1LCAxMDkzMSwgCiAgICAgNDE3NTYsIDQzMzQ3LCA0MjU2MCwgNTM5MSwgNDE3NDYsIDExOTE0NywgOTI1OTEsIDQxMjU5LCA1NTYxLCA2OTkzMCwgCiAgICAgMjY5MSwgMCwgNjU1NTMsIDc5MzMsIDU1NjIsIDY5ODAwLCAxMjgyNjUsIDQxMjYyLCAxMjgxNDYsIDY0NDIxLCA3NDg0NiwgCi0gICAgNDEyNTEsIDAsIDAsIDM5NzksIDAsIDAsIDc0ODEzLCA5ODM3MzAsIDAsIDAsIDAsIDkyNTI0LCA0MTI2NiwgMCwgNjY1NjYsIAorICAgIDQxMjUxLCAwLCAwLCAzOTc5LCAwLCAwLCA3NDgxMywgOTgzNzM5LCAwLCAwLCAwLCA5MjUyNCwgNDEyNjYsIDAsIDY2NTY2LCAKICAgICAxMjg4MzYsIDEwNTg1LCA2NTc0MSwgNDE3MzcsIDk1NzQsIDI2NjYsIDAsIDQxNzM4LCA4MzEsIDQxOSwgMTMxMjYsIAogICAgIDEwNzE2LCAwLCA0MjgyMiwgMCwgNjQzNCwgMCwgNjkzOSwgNzc2NiwgNjQzMiwgMTI4MTA2LCA2OTkzMiwgOTE2LCA3NjksIAogICAgIDQxNzQyLCAxMTk2OCwgNzQ4MDUsIDY0MzMsIDU1NjMsIDU0NywgMTk0MywgNjQzOSwgNTU2MCwgNDk5NCwgNDg3LCAKICAgICAxMjY1MzcsIDQ0OTcsIDM3NTQsIDEyNzA1NiwgMTIwNDI0LCA5MDM5LCAwLCA0MTc3NiwgMCwgODcxNiwgMTU5NSwgNDE2MTUsIAotICAgIDAsIDAsIDc0MjYwLCAwLCA0Mjg1NCwgNDMyMTksIDEyODcwOSwgOTgzNDUyLCAxMjE4NSwgMTI4ODc5LCA3MDA3MiwgCi0gICAgNjgzNTUsIDY4MzU3LCAwLCA0Mjg1NiwgODYzNCwgMCwgOTgzMzg5LCA0MjA5LCAxMjA3MDIsIDAsIDY1ODc5LCA0MTUzOCwgCi0gICAgNjU2MTIsIDEyNzU0MywgNjY5LCA1Njc5LCAwLCA2OTc4NiwgOTI1NDAsIDAsIDk4MzQ1NiwgNTY3OCwgMTE4MjEsIDAsIAotICAgIDY3MTEsIDQ2MCwgMCwgMCwgOTgzNDUzLCAwLCAxMjA3NDcsIDAsIDAsIDc4MDUwLCAxMTkwMjIsIDAsIDk4MzQ1NCwgMCwgCisgICAgMCwgMCwgNzQyNjAsIDAsIDQyODU0LCA0MzIxOSwgMTI4NzA5LCA5ODM0NjAsIDEyMTg1LCAxMjg4NzksIDcwMDcyLCAKKyAgICA2ODM1NSwgNjgzNTcsIDAsIDQyODU2LCA4NjM0LCAwLCA5ODMzOTcsIDQyMDksIDEyMDcwMiwgMCwgNjU4NzksIDQxNTM4LCAKKyAgICA2NTYxMiwgMTI3NTQzLCA2NjksIDU2NzksIDAsIDY5Nzg2LCA5MjU0MCwgMCwgOTgzNDY0LCA1Njc4LCAxMTgyMSwgMCwgCisgICAgNjcxMSwgNDYwLCAwLCAwLCA5ODM0NjEsIDAsIDEyMDc0NywgMCwgMCwgNzgwNTAsIDExOTAyMiwgMCwgOTgzNDYyLCAwLCAKICAgICA3NzgyLCA5MDQ0LCA0OTc0LCAxMTc2MCwgNzg0OTQsIDc1NzcsIDY1NzExLCA0MTkxMiwgMTIxNiwgMCwgMTI4MDc5LCAKLSAgICA1NzkyLCAwLCAwLCA3ODUwMSwgMCwgMjkzMywgMTIyNDQsIDAsIDU2ODMsIDk4MzM4NCwgMCwgNzgxMTksIDE1NDksIDAsIDAsIAorICAgIDU3OTIsIDAsIDAsIDc4NTAxLCAwLCAyOTMzLCAxMjI0NCwgMCwgNTY4MywgOTgzMzkyLCAwLCA3ODExOSwgMTU0OSwgMCwgMCwgCiAgICAgMTIwMzk4LCA1NjgyLCA2MjA2LCA4NjcwLCAxMDI1NiwgNTY4MCwgNjk5MzUsIDEwMDAxLCAxMjg1MTIsIDY5NzY4LCAxNDQ5LCAKICAgICAxMDI0MSwgNzgyOTAsIDEyODIyOCwgMCwgMTA1NTIsIDY0MzQyLCA0MTkyMiwgMTI4NTQ4LCA4NTg0LCA2ODAzMCwgNTU2NywgCi0gICAgMjcxNywgMCwgMCwgNTU2NCwgNDI4ODYsIDQxOTA4LCA0Mjg4MiwgNTU2NSwgOTgzMjQ4LCAxMjgwMjYsIDAsIDY1NzA4LCAKKyAgICAyNzE3LCAwLCAwLCA1NTY0LCA0Mjg4NiwgNDE5MDgsIDQyODgyLCA1NTY1LCA5ODMyNTYsIDEyODAyNiwgMCwgNjU3MDgsIAogICAgIDY1NzA5LCA1NTY2LCA2OTgwMywgNjU3MDQsIDY1NzA1LCAxMTkwNCwgNDI4NzUsIDQzMzczLCA0MjUzOSwgNTk0MiwgODQ2OCwgCiAgICAgMTIwNTYxLCAxMDM2MSwgMTA0MjUsIDY1Njk3LCA2NTY5OCwgNjU2OTksIDAsIDY2NTk4LCAwLCA2NDY2NCwgMTA2NDcsIAogICAgIDc4NzAyLCA3ODcwMywgNzg2OTAsIDQ1NywgNzg1MDIsIDY1NzAxLCAxOTM0LCA0MzAwNiwgMTE5OTAzLCA4ODAyLCA3ODcxMCwgCkBAIC0xNzk1MCwxNCArMTc5NjksMTQgQEAKICAgICAxMTk1NzAsIDQyMjM5LCA4NTM2LCA3ODc0MCwgNzgzMjQsIDc4NzI2LCA3NDQzMiwgNzI0LCAwLCAxNDU1LCA3ODc0OSwgCiAgICAgNzE4MywgNjQ1ODMsIDc4NzQ3LCA2ODQ0MywgNDE3NSwgNzg3NDEsIDQzNjE0LCA2OTgwMSwgOTM5LCAwLCA0MzUyMCwgCiAgICAgNjg2MTMsIDc0NTY5LCA5MTc5NTgsIDAsIDc4NzYzLCA3ODc2NCwgNzg3NjAsIDEwNzg4LCA2MDg4LCA3ODc1OSwgNzg3NTUsIAotICAgIDE5MCwgMCwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCA5ODMyMTEsIDkyMjYxLCA2MzcwLCAwLCA3ODI3LCAKKyAgICAxOTAsIDAsIDEyNTkzLCAwLCA4MTg4LCA2NDQwOCwgMCwgNDQxNywgOTgzMjEzLCA5MjI2MSwgNjM3MCwgMCwgNzgyNywgCiAgICAgNjg0NDEsIDY5NjUsIDAsIDAsIDEzMjAxLCAxMjgyMDUsIDY5ODk2LCAwLCA3NDM4MiwgNzM3ODEsIDc5MTgsIDczOTg4LCAwLCAKLSAgICAwLCA5MTc4ODQsIDE3MjgsIDAsIDQzNzY0LCAxNzgsIDEyOTcyLCA5MjY3OSwgMCwgOTE3ODg3LCA5MjU2MywgOTgzMzczLCAKKyAgICAwLCA5MTc4ODQsIDE3MjgsIDAsIDQzNzY0LCAxNzgsIDEyOTcyLCA5MjY3OSwgMCwgOTE3ODg3LCA5MjU2MywgOTgzMzgxLCAKICAgICAwLCA3ODMyNywgMTIwNDA1LCA2NTY5MCwgMCwgMCwgMTE5MDU0LCAwLCA5MjUyLCA5MTc4ODksIDQ2NTIsIDY4MzcxLCAwLCAKICAgICAwLCAwLCAxMzA2NSwgOTkyMywgMTA4MDYsIDAsIDExNzYzLCA3MDAxNiwgMTIwNjg4LCA2NzIzLCA3ODE4NywgMCwgNjk5MywgCi0gICAgMCwgMCwgODMzMywgMCwgMCwgMTEzOTAsIDAsIDc0NDY0LCAwLCA5MjMyMCwgNzQwODAsIDk4MzMwNywgNjk5MTEsIDExOTEwLCAKKyAgICAwLCAwLCA4MzMzLCAwLCAwLCAxMTM5MCwgMCwgNzQ0NjQsIDAsIDkyMzIwLCA3NDA4MCwgOTgzMzE1LCA2OTkxMSwgMTE5MTAsIAogICAgIDkyNTU5LCA4Mjc4LCA4OTYzLCA0MDM0LCAxMjg1NjAsIDAsIDY1MzQ0LCAxMjA1MTcsIDQxNzQ3LCAwLCAwLCA4Njc3LCAwLCAKLSAgICAxMjcwNywgOTM1MCwgNjYwMzcsIDEyODE4MCwgODgzNiwgMTIzMTUsIDEyNzQ3LCA4MzAwLCA5ODM3NDEsIDAsIDc0OTEsIAorICAgIDEyNzA3LCA5MzUwLCA2NjAzNywgMTI4MTgwLCA4ODM2LCAxMjMxNSwgMTI3NDcsIDgzMDAsIDk4Mzc1MCwgMCwgNzQ5MSwgCiAgICAgODg1NiwgNzEzNjEsIDAsIDQzMTUwLCAxMjc3NjgsIDEyMDQwNCwgNjUzODksIDEyMDQwMiwgMTIwNDAzLCAxMDgxMywgCiAgICAgMjU5MiwgMTI4NTMsIDQzMjY5LCA3MjYzLCAxMjAyNDQsIDY1MzYsIDEyMDIzOCwgMTIwMjM5LCA2NTUxNiwgMTIzMjEsIAogICAgIDEyMDM5MSwgMTIwMzg4LCA1NTI4NywgMTAwMDcsIDEyMDI0NiwgOTU4OCwgMTIwMjQ4LCAxNTk2LCAxMjAzODMsIDQxOTk0LCAKQEAgLTE3OTgyLDI3ICsxODAwMSwyNyBAQAogICAgIDExNiwgMTI5OTgsIDEyMiwgMTIxLCAxMjAsIDExMSwgMTEwLCAxMDksIDEwOCwgMTE1LCAxMTQsIDExMywgMTEyLCAxMDMsIAogICAgIDEwMiwgMTAxLCAxMDAsIDEwNywgMTA2LCAxMDUsIDEwNCwgNjQzNiwgNzM5NzQsIDUzNCwgNDEyMTIsIDc3OTMxLCAxNTM2LCAKICAgICA2NDA5MywgNzM5NzAsIDc3OTMwLCAxMjcxNTcsIDAsIDYwMjAsIDEyNzE2LCAxMjcxMTIsIDEyNzQ0LCA0NzUsIDEyMDM5NCwgCi0gICAgMTMyNjYsIDEyNzgxMywgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDk4MzI5OSwgODEzNCwgCi0gICAgMTI4MDI4LCAyOTEzLCA3Mzg3MCwgMTI3MTEzLCAxODY2LCAwLCAxOTUwOTUsIDAsIDg5MjMsIDE2NDUsIDEyMDU5LCAKKyAgICAxMzI2NiwgMTI3ODEzLCAxMjcxMTEsIDAsIDczOTI2LCAwLCAxMDY0NSwgMTIxMiwgNjU0MywgOTgzMzA3LCA4MTM0LCAKKyAgICAxMjgwMjgsIDI5MTMsIDczODcwLCAxMjcxMTMsIDE4NjYsIDk4MzIyOSwgMTk1MDk1LCAwLCA4OTIzLCAxNjQ1LCAxMjA1OSwgCiAgICAgNjY1ODUsIDcxMjk3LCAzMTk2LCAwLCAwLCA1OTM1LCAxMjUwLCAxMjcwNjYsIDgxNzQsIDk3ODcsIDY3MzMsIDk4NTksIAogICAgIDc5MTYsIDk4NjEsIDk4NjAsIDUyNTgsIDE4ODIsIDE4OTIsIDY3MzEsIDEwODgyLCA0MDUsIDExNDU0LCA3MzkxMSwgMCwgCiAgICAgMTI4NzgxLCA0MTE2OSwgODkzOSwgNDEyNDUsIDAsIDQxMTcwLCAxNDU0LCAxMTM2OSwgNjQ3NywgMTIxNTcsIDAsIDAsIDAsIAotICAgIDQxMTcyLCA3ODU1LCAwLCAwLCAxMDQ4MCwgMCwgMCwgNzc5MzYsIDgyNjQsIDEyNjEwLCA5ODMzMDAsIDY0NSwgMTI2NjE2LCAKKyAgICA0MTE3MiwgNzg1NSwgMCwgMCwgMTA0ODAsIDAsIDAsIDc3OTM2LCA4MjY0LCAxMjYxMCwgOTgzMzA4LCA2NDUsIDEyNjYxNiwgCiAgICAgNzYwOSwgNDA5NzMsIDY5OTQzLCA3MzgzMywgNjk5NDgsIDU4MjQsIDk4NCwgNzc5MTgsIDEwNjg4LCA1ODUxLCAwLCA3NzI5LCAKICAgICA3Mzk4MiwgMTIwNTE4LCAwLCAxOTUwODYsIDQzMzY5LCAwLCAxMjgxNDAsIDY4NDE1LCA5ODMwOTMsIDQ1MzgsIDEyMDQwNiwgCi0gICAgNDMxNDEsIDAsIDk4MzIwOCwgNzQyMTQsIDczODg2LCAwLCAwLCAxMTg5MDIsIDQzMDA1LCA3ODQ0OCwgOTU1MiwgMCwgMCwgCisgICAgNDMxNDEsIDAsIDk4MzIxMCwgNzQyMTQsIDczODg2LCAwLCAwLCAxMTg5MDIsIDQzMDA1LCA3ODQ0OCwgOTU1MiwgMCwgMCwgCiAgICAgOTgzMTU5LCAxMjk5NywgMCwgMCwgMCwgMCwgMjM4MSwgMTI4ODMsIDEwOTk0LCAxMDUyOSwgNDE5MDYsIDAsIDAsIDAsIAogICAgIDEyNDI1LCAxMDY2MSwgMTA4NTYsIDk2MTQsIDI0MjgsIDQxNDc4LCA4NTgyLCAxMDA2NCwgNzM5MzAsIDAsIDAsIDAsIAotICAgIDY0ODk2LCAxMTkxNjIsIDE5NTIsIDkyMTgxLCA4NDU1LCAxMDA4MiwgMTE1NzUsIDk4MzQ4MiwgMTE5NTY2LCAwLCAxMjgwOCwgCisgICAgNjQ4OTYsIDExOTE2MiwgMTk1MiwgOTIxODEsIDg0NTUsIDEwMDgyLCAxMTU3NSwgOTgzNDkwLCAxMTk1NjYsIDAsIDEyODA4LCAKICAgICAxMjE4MywgNjE0NSwgMTE4OTU1LCA2NDkyOSwgOTI0MzMsIDAsIDk4MzE5MywgNDMxODYsIDQyNTA5LCAwLCAzOTIyLCAKICAgICA5MTg3LCA5ODM2MTQsIDAsIDEwMTkxLCAxMTkwNTcsIDExNzUyLCAzMzUzLCA5MzU4LCAwLCA3MTM2NiwgNjY2ODAsIAotICAgIDEyMDA5MCwgODI0OCwgNzkzMSwgODU1OCwgOTc5NSwgNjgzODAsIDk4MzI4OSwgMCwgMTIwMDgyLCAxMjAwODEsIDEyMDA4NCwgCisgICAgMTIwMDkwLCA4MjQ4LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgOTgzMjk3LCAwLCAxMjAwODIsIDEyMDA4MSwgMTIwMDg0LCAKICAgICA0MTAyNywgMTIwMDg2LCAwLCAxMjAwODgsIDczNjYsIDcwMTksIDEyMDA3MywgMCwgMTE3NTEsIDEyMDA3OCwgNzgyOTQsIAogICAgIDY0NjU3LCA4NjU3LCAxMjAwNDgsIDg1OTQsIDEyMDA2OCwgMCwgMCwgMTIwMDY5LCAxMjAwNzIsIDEyMDA3MSwgMCwgMCwgCiAgICAgNDMxNTQsIDQxMDI5LCAwLCAxMTMzMiwgNjUzODAsIDc3MjgsIDk0MDc3LCAxMTI5NCwgMCwgNjY2NjUsIDc4NTEsIDAsIAotICAgIDgzNzUsIDg2OTksIDAsIDQyNTI0LCAwLCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgMTI4MDk1LCA5ODM4NTUsIAorICAgIDgzNzUsIDg2OTksIDAsIDQyNTI0LCAwLCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgMTI4MDk1LCA5ODM4NjQsIAogICAgIDAsIDgwODgsIDAsIDc0MDEyLCA5MjUwMCwgMCwgNDQzOSwgNjkyNiwgOTgzMDQ3LCAxMjkyNCwgMTI4MjI3LCA0MjM2OSwgCi0gICAgNDM1MCwgNjU0OTEsIDY1MTQ1LCA5MDQxLCA0MzU1OSwgNjQ1NzcsIDEwODI2LCAwLCAxMTI5NiwgOTgzMjc1LCAwLCAwLCAKKyAgICA0MzUwLCA2NTQ5MSwgNjUxNDUsIDkwNDEsIDQzNTU5LCA2NDU3NywgMTA4MjYsIDAsIDExMjk2LCA5ODMyODMsIDAsIDAsIAogICAgIDY1ODI1LCA5NTc3LCA2ODE5OSwgMCwgNjQ2NzAsIDk4MzEyMSwgNzgwNTYsIDY3OTMsIDExMjk1LCAwLCA3ODA1MywgCiAgICAgNzM4NzIsIDAsIDAsIDEwOTAyLCAwLCAwLCA3ODA3MCwgNzgwNjgsIDEwNDcyLCAyOTk1LCAwLCAwLCA2NDY4MiwgMjM3MSwgCiAgICAgNzgwNjksIDEyMDgwOCwgMjU5LCAxMDA5LCA5MjE3MSwgMjQwMiwgMjMzMywgNjQ0MCwgMTk0NzQxLCAwLCA2NTEyNSwgCkBAIC0xODAxMCwxOSArMTgwMjksMTkgQEAKICAgICAxMjcwNzAsIDQxMjYxLCAxMTkzNjIsIDQzNjQwLCA4NjEzLCAwLCA5NDA0OSwgNjczNiwgMTk1MDkyLCA0MTQ5MiwgMTIwMDUsIAogICAgIDY5OTI3LCAwLCAxODkwLCAxMjAwNTYsIDAsIDAsIDAsIDcyOTMsIDc5OTEsIDAsIDEwNTc4LCAwLCA3ODA3NiwgMTk0NzM4LCAKICAgICA3ODA3NywgNjk5MjgsIDAsIDc4ODAwLCA5MjY1MywgNjQ0NDUsIDQyNjY4LCA2NjM1LCAwLCA2MTY0LCA2NTE3MCwgMCwgMCwgCi0gICAgNzY3NiwgMTE2NjQsIDAsIDk4MzY0OSwgNjk3MDcsIDAsIDExODgxMiwgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgCisgICAgNzY3NiwgMTE2NjQsIDAsIDk4MzY1OCwgNjk3MDcsIDAsIDExODgxMiwgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgCiAgICAgNzgwNDUsIDkwODgsIDAsIDY0NTQ1LCAxMzk2LCAwLCA3NTQ2LCAzODQ3LCAxMjcxNzcsIDEyNzgzNSwgNDk4NSwgMTMyODgsIAogICAgIDY3MiwgODA5OCwgNDMxOTYsIDE5NDc0NiwgOTgzMDk2LCAxMjgxMjYsIDQyNjU1LCA3NDA0MywgNjUwNzIsIDE1NzcsIAogICAgIDExNzcyLCAxMzA0MSwgNTkyOCwgNDUyNSwgMTA2NTgsIDY1OTExLCAxMjY2LCAxMDE4MCwgMCwgMTI4NTg0LCAxMjYyMiwgMCwgCiAgICAgMCwgMCwgMTk0NzE0LCAxMjcxMzksIDEzMzEwLCA3NzMsIDE5OTMzLCAxNTM5LCAwLCAxMjY5ODMsIDQyNzMxLCA2Nzk3MiwgCiAgICAgMCwgMCwgMCwgMzA1MSwgNTg2MiwgNzgyMywgOTI0NzgsIDAsIDEyMDQxMSwgMzI1MCwgNDM5OTEsIDY5Njg3LCA2NjY0OSwgCi0gICAgOTUxMCwgNjYyMzcsIDk4MzI5NCwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgMzUwNSwgODcwNywgCisgICAgOTUxMCwgNjYyMzcsIDk4MzMwMiwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgMzUwNSwgODcwNywgCiAgICAgOTE3OTY4LCA2NzI1LCAxMjgwMTMsIDkxNzk3MSwgOTIzMTQsIDM0NzEsIDkxNzk3MCwgNTQ3OSwgODgyLCA2Njg2LCAKLSAgICAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCA5ODMyOTgsIDkyNjk2LCAwLCAwLCAwLCAxMjg1MjMsIDMyMjUsIAorICAgIDExOTU4NCwgMTE2MTMsIDEyMDc3MiwgNDI3NTQsIDAsIDk4MzMwNiwgOTI2OTYsIDAsIDAsIDAsIDEyODUyMywgMzIyNSwgCiAgICAgOTE3OTk2LCA0NDMzLCA0MTE1NiwgNDM5NzMsIDQzMTczLCAxNDQzLCA0MzgxLCAwLCAwLCAxMDkyNiwgMTE3NTYsIDExNzU3LCAKICAgICA2NDg3OSwgOTE3OTQ5LCA5MTc5NTAsIDEyNzg0OCwgMTMyMjcsIDAsIDEwMDIxLCA1MTYwLCAxMzg3LCAwLCA5MTc5NTMsIAogICAgIDQxNDE4LCAwLCA2NTkxNCwgNjcyMSwgMjE3LCA5MTc5NTUsIDkxNzk2MCwgOTE3OTYxLCAxMDQ0MywgMTA3ODksIDQxMTU4LCAKLSAgICAxMTkyNTcsIDQyNzQsIDk4MzI5MiwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDY5MjMyLCAKKyAgICAxMTkyNTcsIDQyNzQsIDk4MzMwMCwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDY5MjMyLCAKICAgICAwLCA0MTI1MiwgNjY2ODIsIDAsIDExOTYzNywgNDEyNDksIDEzNjYsIDY0NjM1LCA2NTA0NywgMTI0NjYsIDAsIDAsIDQzOTcsIAogICAgIDEyODAzNywgMTI4MzM2LCA0MTI5NiwgOTU0NSwgNDEyOTEsIDEyODA0OSwgMCwgNDE0ODUsIDM1MTEsIDQxMjgyLCA1OTIzLCAKICAgICAxMDQwMCwgMCwgMTI4ODE4LCA3NjAsIDAsIDEyMDg4LCA1Nzg2LCAwLCA0MjI1NiwgMTE5ODY5LCAxMTk4NjAsIDQxNywgCkBAIC0xODAzMiwxNSArMTgwNTEsMTUgQEAKICAgICAxMTk1NzYsIDAsIDAsIDEzNzUsIDY2NzA1LCA0MzU3MywgNjUyNjAsIDQyMDYzLCAwLCA0MjgxMSwgMTAzMTIsIDY5ODQ1LCAKICAgICAxMjA3OTQsIDc4NDAsIDAsIDQzNjMwLCAxMDI1MiwgMCwgMTI4MTA0LCA0MzE4NSwgMCwgNDM5NiwgMCwgMTE5ODgwLCAKICAgICAxMDc2OSwgOTY3NiwgMTE5MDQxLCAwLCA5NzUzLCAwLCA4OTQ0LCAwLCAwLCAxMDQ3MywgMCwgMCwgNjA3MiwgNDMwMjUsIAotICAgIDEwMjk5LCAwLCAwLCAxMjA2MDgsIDY2MzI2LCA5ODM0MzksIDEyNzc5NCwgMCwgNDM4MTEsIDkzMzAsIDEyMDU5NiwgNzIyMiwgCi0gICAgMTAyODMsIDEwMzE1LCAxMDM3OSwgNDk5NiwgOTgzNzczLCAxMzI4MSwgNjY1MTcsIDc4NjUsIDEwMDg3LCA3ODM0MywgMCwgCisgICAgMTAyOTksIDAsIDAsIDEyMDYwOCwgNjYzMjYsIDk4MzQ0NywgMTI3Nzk0LCAwLCA0MzgxMSwgOTMzMCwgMTIwNTk2LCA3MjIyLCAKKyAgICAxMDI4MywgMTAzMTUsIDEwMzc5LCA0OTk2LCA5ODM3ODIsIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDc4MzQzLCAwLCAKICAgICA3ODM0NywgMCwgMCwgNzU2NSwgNjYzNjMsIDEyOTUyLCA2NDgwNiwgNDMxODAsIDc3OTI4LCA3NDE0LCA3NzkyOSwgNDM5ODIsIAogICAgIDc0Mjg4LCA2MjIsIDc0MDIzLCA4ODUsIDQzNDA1LCAxNjAyLCAwLCAwLCA4NTIsIDAsIDEyMTYwLCAwLCAxMDIxMiwgCiAgICAgNjU0MzUsIDAsIDEyMDcxLCA5NjA5LCAxMjE1NiwgOTE3OTgzLCA5MTc5ODQsIDQzNTg2LCAxMTAzNSwgMTA0MTEsIAogICAgIDkxNzk4OCwgMTAyNTUsIDY3MTAsIDEwMjc5LCA0MTk0LCAxMDM3NSwgNzM5MDAsIDAsIDQzMTUsIDEyNjQ0LCAxMjc1MTYsIAogICAgIDc3OTM3LCA0MzYzOSwgNDMzNDMsIDc4Nzc3LCA5MTc5OTgsIDExNTAxLCA0MTE3NywgMTI4Njg5LCAwLCA5MTc3OTIsIDAsIAogICAgIDkyNDEzLCA4NzE1LCAwLCA0MTE3OSwgMCwgNDMzMTMsIDAsIDQxMTc2LCAwLCA5OTQsIDAsIDg0NTIsIDEyNzEwMywgCi0gICAgNzM5NjYsIDAsIDAsIDU5MjEsIDAsIDI1OTcsIDAsIDU5MjIsIDExODkwMywgNzc5NDMsIDQxODYsIDkyNTMxLCAxMjcxMDYsIAorICAgIDczOTY2LCAwLCAwLCA1OTIxLCAwLCAyNTk3LCAwLCA1OTIyLCAxMTg5MDMsIDc3OTQzLCA0MTg2LCA5MjUzMSwgMTE5OTY3LCAKICAgICAxMjcxMDUsIDY3MTgsIDAsIDQ0MDYsIDc0NjAxLCA4NDgwLCA5MTkyLCA5NzQ3LCAxMjY1MzAsIDQ0MTMsIDkyMTk2LCAKICAgICA0MjI2OCwgMzE5OCwgNTkyNCwgNTkyMCwgOTI0NjksIDY5MjEsIDc4MDgxLCA3NDAwNywgNDI4NjksIDg0MTgsIDExNjgxLCAKICAgICA0MzE2OSwgMTAxNzYsIDAsIDc0MiwgMCwgMjg5MywgMTA3NzIsIDY1Mjc2LCA1OTM3LCAxOTE0LCAyNTUzLCAxMTY4MiwgCkBAIC0xODA2Myw3ICsxODA4Miw3IEBACiAgICAgNzgzMCwgMTE2NTEsIDEzMDkzLCA2NDAwMiwgMCwgNjU3NDIsIDEyODc0LCAxMTk1OTcsIDExNTkwLCAwLCA3NDA0OCwgCiAgICAgMTI4MzUwLCA4NTk1LCAwLCA5MTc5NDcsIDQzNzAzLCAxMzA5NywgMCwgNjQ2NDMsIDEzMjgzLCAxMjY5NywgMCwgMTIzODEsIAogICAgIDM0ODgsIDU5MzMsIDEwMDMzLCA3MzczOCwgNjYyNDEsIDY1NTcwLCAwLCAxMjI5NywgMTE5MTUzLCAxOTU1LCAwLCA1MzQ5LCAKLSAgICA0MjUzOCwgMCwgMCwgNzQxMSwgOTQ2MiwgOTE3NTU0LCAwLCAwLCAwLCA0MjczNiwgMCwgNTc1NiwgOTgzMjE5LCA3NjM4LCAKKyAgICA0MjUzOCwgMCwgMCwgNzQxMSwgOTQ2MiwgOTE3NTU0LCAwLCAwLCAwLCA0MjczNiwgMCwgNTc1NiwgOTgzMjIxLCA3NjM4LCAKICAgICA0MTY0MiwgNDI3NjQsIDAsIDQzMTA5LCA3NjM3LCA1NzUyLCA3NDAzNywgMCwgNzM4MzIsIDEyODgyNywgMTIwNjM1LCAKICAgICAxMjgyMzEsIDc4MzM0LCAwLCA3NjM2LCA2NTE3MSwgOTEyNCwgMCwgNzg4OTIsIDEyMDc5OCwgMjkxLCAwLCAwLCAyMDI3LCAKICAgICA2NjIzMCwgMTAwODAsIDc4MTM2LCAxMDQwMywgMCwgNDY0MCwgNjQ3MTMsIDEwMjI0LCAxMjA0MjksIDQyNTEyLCAxMjA0MzEsIApAQCAtMTgwNzUsMTcgKzE4MDk0LDE3IEBACiAgICAgNzgyNzAsIDEyNzk4MiwgOTgzMTcyLCA2NDcyOCwgMCwgNzg2NzMsIDc4Njc0LCAxNjU5LCA5MTksIDQyNzg0LCAxNjcxLCAKICAgICAxOTUwODksIDYwNjksIDkyMTksIDEyODU1OCwgMTY2MSwgMTMxMjAsIDYzNzg0LCA2OTgxOSwgMTAxNDAsIDk3MTMsIAogICAgIDExOTE0MywgMCwgMCwgOTQwNTAsIDIzMDYsIDEwNDg1LCAxMTg5NDMsIDYwNjgsIDEwNjEyLCAxOTUwOTksIDExOTU2NywgCi0gICAgMTk1MTAxLCA5MjU2MSwgNDE0NjIsIDEyMDQ3MCwgMTk1MDc5LCA1NDIyLCAxMjgyMzQsIDAsIDAsIDAsIDEwMjI5LCAKKyAgICAxOTUxMDEsIDkyNTYxLCA0MTQ2MiwgMTIwNDcwLCAxOTUwNzksIDU0MjIsIDEyODIzNCwgOTgzNjI5LCAwLCAwLCAxMDIyOSwgCiAgICAgMTA2MzUsIDgyNiwgMTI4MDgxLCAxOTUwODIsIDE5NTA4NSwgMTk1MDg0LCAxOTUwODcsIDY0ODMsIDkyMjExLCAxODA4LCAKICAgICA3ODQ4LCAwLCA4MTAwLCA3ODIyNywgNzg2NjksIDc4NjcwLCAxMzMwMSwgNzg2NjcsIDk2NjcsIDc4NjY1LCA3ODg3MiwgMCwgCiAgICAgMTEwMDMsIDk5MDQsIDAsIDAsIDEyMDY5MCwgOTE0NCwgMTA5MjEsIDAsIDc4NjgwLCA5ODQwLCA2NTEzMSwgNzg2NzgsIAogICAgIDc3ODQxLCAxMDMxMywgMCwgMCwgNjQzMjAsIDEwMjY1LCA3ODY4NiwgMTA5NjIsIDc4Njg0LCA0MzAwOCwgODk0NSwgCiAgICAgNzg2ODMsIDAsIDQxLCAxOTUwNzIsIDE3OTIsIDEyMDUxNSwgMTk1MDczLCA4NjU1LCAxOTUwNzUsIDkyNTQ0LCA3Nzk1MSwgCi0gICAgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMTI3ODA0LCAxMTkwNjgsIDMxMjYsIDAsIDc0MTM2LCAxMDk1NywgOTgzNjk0LCAKKyAgICAxMjA2NiwgMCwgMzg1LCA0MTUyLCAyNTg1LCAxMjc4MDQsIDExOTA2OCwgMzEyNiwgMCwgNzQxMzYsIDEwOTU3LCA5ODM3MDMsIAogICAgIDQzMjU4LCAxMTkxMTYsIDEyNzg3MywgMTMxNTcsIDAsIDkxNzU0NCwgMzU3MCwgMCwgNzQ0MywgMCwgNDQwMDYsIDY5OTcsIAogICAgIDY4MDA0LCAxMjY2MzEsIDc4NzksIDg3MzksIDExMDc1LCAwLCA2NTIxNiwgMCwgNjk3OTUsIDI1OTMsIDg0NjMsIDc4MTAsIAogICAgIDkxNzg2MiwgNzgzOSwgMTE5OTEzLCA3ODgwNiwgMTE5OTEyLCA5NjkxLCA0NDExLCA3ODgwMiwgMCwgMCwgNDM0NDIsIAotICAgIDY5ODUxLCA2NTI1NCwgMTAwNjYsIDk4Mzg4MCwgMCwgMCwgMCwgMTMwNjEsIDgwMTYsIDc4Njg3LCAxOTkzMiwgNjQ4MzEsIAorICAgIDY5ODUxLCA2NTI1NCwgMTAwNjYsIDk4Mzg4OSwgMCwgMCwgMCwgMTMwNjEsIDgwMTYsIDc4Njg3LCAxOTkzMiwgNjQ4MzEsIAogICAgIDAsIDExOTkyMywgMTIzOTAsIDExOTE3MSwgMTYzNCwgNjgxMTUsIDAsIDExMDU2LCA5ODM1NzQsIDExOTkyNSwgMCwgCiAgICAgNDExNjUsIDExMzI4LCAxMjQ1MCwgMCwgNDExNjYsIDAsIDEyNDU2LCAxMTk5MTQsIDE3MSwgNTk0MSwgMTI0NTIsIAogICAgIDE5NDcwOSwgMTI0NTgsIDEyNTMxLCA3ODc3OSwgNDMwMTMsIDYzODAwLCA3NDE2MiwgMTI3NTY5LCAxMjA0ODMsIDk5NjksIApAQCAtMTgxMDAsNyArMTgxMTksNyBAQAogICAgIDEzMjQ0LCAxMjA0NjYsIDQyMTY3LCA3NDM1LCA3ODE5MywgNTM4MCwgMTE5MDg2LCA2OTIyNSwgMTE1NSwgMTEzNjUsIAogICAgIDQzMTI2LCA3Nzk3MiwgMCwgNjU2ODQsIDAsIDU2MDEsIDY1MTkyLCA0Mjc2NSwgNjM3NTIsIDAsIDc5ODcsIDEyODU0MywgCiAgICAgMTE3MiwgNjk3OTksIDY3ODYsIDQzNjAxLCAxMjA0NzYsIDc0MTI2LCA1NjAzLCAwLCA0NDczLCAwLCAxOTQ4MjMsIDAsIAotICAgIDY1MzQ3LCA2NTM0NiwgNjUzNDUsIDAsIDEyNzM4NCwgNTM0NywgNjk4MDIsIDk4MzYyMywgNzM4NjgsIDExODk0NCwgCisgICAgNjUzNDcsIDY1MzQ2LCA2NTM0NSwgMCwgMTI3Mzg0LCA1MzQ3LCA2OTgwMiwgOTgzNjMyLCA3Mzg2OCwgMTE4OTQ0LCAKICAgICAxMDU4OCwgMCwgMCwgNjM3NTUsIDAsIDUzNDMsIDc4NDIyLCAxMjA2NjEsIDQ1NTUsIDUzNDEsIDAsIDcwMDcxLCAxMjg2NzAsIAogICAgIDUzNTEsIDc4Njc1LCA0MzEwNCwgNjUyNDQsIDkxNzg5MiwgNjQ1NDEsIDQyNTE5LCA3NDQ3MiwgMCwgMCwgNzQ3NjUsIAogICAgIDkxNzg4OCwgMTI3NTEwLCA2NjM4LCAwLCA2NTExMywgMjcxLCA3NDE4MCwgNjUzNzAsIDg4MzUsIDY1MzY4LCAxMjY1MywgCkBAIC0xODExMCwxNCArMTgxMjksMTQgQEAKICAgICAwLCA0OTE2LCAwLCAzODAsIDEwOTU4LCA2NjU2MywgNzc5NTUsIDY5NzczLCA5NzczLCAxMzE2NywgMTI5MTgsIDQxMDk2LCAKICAgICA3Mzk4MCwgNjkyNDUsIDc4MjU0LCA5MTc4OTMsIDEwNjg0LCAwLCA5MTc4OTYsIDAsIDc5NDYsIDEyNTQxLCA4MTgyLCAKICAgICA2NzU4NiwgNjk3ODAsIDAsIDAsIDAsIDAsIDkwMDUsIDEyMjUsIDY2MzAsIDAsIDAsIDAsIDY4MDExLCA4ODQ3LCAwLCAKLSAgICA2NTg3NiwgNTUzNSwgODMyOSwgNzQ1OTAsIDk4MzIwNiwgOTI2MDksIDAsIDAsIDMxMjcsIDI1OTUsIDY1NzEzLCA0MjAxMywgCi0gICAgOTgzODQ5LCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCA0Mzc1MSwgNzQyMDAsIDQ5NzAsIDg3NjQsIAorICAgIDY1ODc2LCA1NTM1LCA4MzI5LCA3NDU5MCwgOTgzMjA4LCA5MjYwOSwgMCwgMCwgMzEyNywgMjU5NSwgNjU3MTMsIDQyMDEzLCAKKyAgICA5ODM4NTgsIDU2MDcsIDQxMDg5LCAwLCAwLCA3NDI1NiwgMjY2NSwgMTEzMDQsIDQzNzUxLCA3NDIwMCwgNDk3MCwgODc2NCwgCiAgICAgMTIwNDU5LCA4OTM0LCA5MjcyNiwgNDE1NjYsIDQ0OTIsIDAsIDY1MDExLCA0MTA5MCwgMCwgMCwgMTE4OCwgNzI1NCwgCiAgICAgMTEwMCwgMCwgMTI4MzAxLCA0MTA4MSwgMjkxMiwgMTE3NDksIDY5NzkyLCAwLCA2ODAxOSwgMzU3MiwgMTAwMjMsIDQ5NTksIAotICAgIDEzMDc5LCAwLCA5ODMyNjgsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIAotICAgIDEzMzA0LCAxMjgyOTAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDk4MzMwMSwgOTcyLCAKLSAgICA0MTQ1MywgOTgzNDM0LCAwLCA3Mzg4MywgNjgwMjIsIDczOTQ1LCA5ODM3MjYsIDIyODgsIDE5OTU1LCA5NTM4LCAwLCAKLSAgICA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIDk4MzQzMiwgMTEwMTksIDAsIDAsIDAsIDY4MDIwLCA0MTA3OCwgNzEzNjUsIAorICAgIDEzMDc5LCAwLCA5ODMyNzYsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIAorICAgIDEzMzA0LCAxMjgyOTAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDk4MzMwOSwgOTcyLCAKKyAgICA0MTQ1MywgOTgzNDQyLCAwLCA3Mzg4MywgNjgwMjIsIDczOTQ1LCA5ODM3MzUsIDIyODgsIDE5OTU1LCA5NTM4LCAwLCAKKyAgICA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIDk4MzQ0MCwgMTEwMTksIDAsIDAsIDAsIDY4MDIwLCA0MTA3OCwgNzEzNjUsIAogICAgIDI2MSwgNTkyNywgNzc5MSwgMCwgNzM2MiwgMCwgMTA2OTYsIDAsIDYwNzMsIDk4MzgsIDExODkyMCwgMCwgNjA3NSwgCiAgICAgOTM5OTUsIDI4MiwgMTI2NTEwLCA2NDM3LCA3NDA3OCwgMTI4MDAwLCA5ODAxLCAwLCA3NDE3NywgMCwgMCwgMzQ3NCwgCiAgICAgMTE4Nzg3LCAwLCAxMjA2NTUsIDYwODEsIDAsIDc4ODc0LCA3NDA3NiwgNzg4NzksIDAsIDAsIDAsIDAsIDAsIDg3NTEsIApAQCAtMTgxMzgsNyArMTgxNTcsNyBAQAogICAgIDQ1NjQsIDAsIDAsIDc0MjcxLCA3Mzc1MywgODM3NCwgOTgzMTU2LCAwLCA2ODI5LCA1MjI1LCAxMjg4MDcsIDEyNzM4NSwgMCwgCiAgICAgMCwgMTE5NjE1LCAwLCA3NDc5MywgNTYyNiwgNzM4MDcsIDExNzcxLCA3NDA3NSwgMTI3MjM2LCAxMjgwMTksIDQyNjE0LCAKICAgICA1MzUzLCA1NjI1LCA3NDE3OSwgMCwgMCwgMTAxMCwgNjQ1NzIsIDQxNzgwLCA0MjYyMywgNjQyNzcsIDY5OTQyLCA2OTUyLCAKLSAgICA5ODMyNjQsIDEyMDc1MiwgNzg3NjIsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgMTA0NzEsIAorICAgIDk4MzI3MiwgMTIwNzUyLCA3ODc2MiwgMjU5MCwgNTYyOSwgNjU1NTIsIDc1NTEsIDEwMzI1LCA1NjMyLCAxMDQ3MSwgCiAgICAgMTIwMDM4LCAxMjAwMjcsIDEyMDAyOCwgMTIwMDI1LCA1NjI4LCAxMjAwMzEsIDk3MCwgMTIwMDI5LCA0NzcyLCAyNDAwLCAKICAgICA1NjI3LCAxMjAwMTcsIDEyMDAxOCwgMTIwMDIzLCA2NDI3NSwgMTIwMDIxLCA4Nzg2LCAwLCAyMDMsIDAsIDAsIDAsIDAsIAogICAgIDc4MzUwLCAwLCA2NDM3OCwgNDIwNTQsIDAsIDAsIDU1NCwgMTE5NjQ5LCAxMTM1OCwgMCwgMTIxODIsIDQyMDQ4LCAxMTA2NSwgCkBAIC0xODE1MCw5ICsxODE2OSw5IEBACiAgICAgMTE2OCwgOTI1MSwgOTA4MiwgMTE5OTY0LCA2NDA1NSwgNDI3ODEsIDM4NjYsIDEyMzIzLCA0MTUxMiwgNzM4MDUsIDY4MTIxLCAKICAgICAwLCA0MTQ5NCwgOTIzMTYsIDQ2NjAsIDAsIDEwNDA1LCAwLCA3ODgwMywgMCwgMCwgNDIwNDAsIDczOTE4LCAxMTk2MjcsIAogICAgIDc5NDQsIDQxNDU0LCAxMjYwNSwgMCwgNDIyMDUsIDQxNDU1LCAyMzYsIDY0MDUxLCA3ODg2NywgODIxNCwgMCwgMCwgMCwgCi0gICAgNDE0NTcsIDk4Mzk2MSwgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCA5MTc4NjQsIDc0MTMsIDY4MDEyLCA3ODAyOSwgCisgICAgNDE0NTcsIDk4Mzk3MCwgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCA5MTc4NjQsIDc0MTMsIDY4MDEyLCA3ODAyOSwgCiAgICAgODc2NiwgMCwgNzgwNzksIDU4NTQsIDEyNzk3NCwgMTA1ODMsIDAsIDExOTk4OSwgMCwgMTA0MTYsIDkxNzg2OSwgMzg3MiwgCi0gICAgOTE3ODY4LCAwLCA4NDI5LCAwLCAxMTg4MDYsIDI4MzgsIDEyODgwMiwgMCwgOTE3ODY2LCAwLCAwLCAwLCA5ODM5NTgsIAorICAgIDkxNzg2OCwgMCwgODQyOSwgMCwgMTE4ODA2LCAyODM4LCAxMjg4MDIsIDAsIDkxNzg2NiwgMCwgMCwgMCwgOTgzOTY3LCAKICAgICA5NDAwNSwgMTEwOTYsIDEyMDgxMywgMTA1NTMsIDE2NjIsIDg0ODMsIDEyMDM5NiwgNDM2MDUsIDU4OTIsIDQzNDE4LCAwLCAKICAgICA3Mzc0MiwgNjYsIDY1LCA2OCwgNjcsIDcwLCA2OSwgNzIsIDcxLCA3NCwgNzMsIDc2LCA3NSwgNzgsIDc3LCA4MCwgNzksIAogICAgIDgyLCA4MSwgODQsIDgzLCA4NiwgODUsIDg4LCA4NywgOTAsIDg5LCAxMTk4NjIsIDEwMzU3LCA3Mzg1LCA4MTcwLCAxNzA0LCAKQEAgLTE4MTY3LDcgKzE4MTg2LDcgQEAKICAgICAxMjQ3MiwgMCwgNjk4NjQsIDc2OTksIDEyMzkzLCAwLCAwLCAwLCA3NDUxOCwgODIyMywgMCwgNDI2MSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTI4MzAyLCAwLCAxMjgwNDYsIDQzNDE5LCAwLCA2NDU1NCwgMTA1NzQsIDM4NzgsIDAsIDQyMzUyLCAxNzUyLCAKICAgICA3Mzc4NSwgMCwgNDI1MDYsIDEyODU0MSwgMTAxOTksIDAsIDAsIDY4MDIxLCA2NTkxOSwgMCwgNjY5NSwgNzIwLCAzMjQsIDAsIAotICAgIDAsIDQzNDA2LCA5ODM3MjcsIDE0NjQsIDQwOTg1LCAwLCA3OTc0LCAwLCA0MzQ3NCwgMCwgNjQ0ODgsIDAsIDAsIDY0MDQxLCAKKyAgICAwLCA0MzQwNiwgOTgzNzM2LCAxNDY0LCA0MDk4NSwgMCwgNzk3NCwgMCwgNDM0NzQsIDAsIDY0NDg4LCAwLCAwLCA2NDA0MSwgCiAgICAgNzQ3ODcsIDAsIDc4ODY1LCA5MjI1OCwgNjU1OTcsIDAsIDc4ODYzLCAwLCAxMzAyLCAwLCA3ODg2MSwgMTE5MTM0LCAwLCAwLCAKICAgICA1MjA0LCA3NDc3NCwgNDM0MDQsIDExODM1LCAwLCAzOTk1LCA2ODM2MCwgNjU2MDgsIDM3MTQsIDkyMTkwLCAwLCAwLCAKICAgICAxMDk5OSwgMTE3NTAsIDAsIDQzMjUxLCA2ODY2MCwgNDMzMDEsIDAsIDEyMDU1NywgODEzMCwgODY3MiwgMTA4NDUsIApAQCAtMTgxNzUsMjIgKzE4MTk0LDIyIEBACiAgICAgNjEyLCAwLCA2NDQwMSwgNjY0NDgsIDY4Mzc2LCAwLCAxNjc0LCAwLCA1ODIzLCA5ODMxNjMsIDEyMjgwLCAwLCA1NDAsIAogICAgIDc0NTY0LCAxMTkwMTcsIDAsIDg0MzIsIDAsIDExMDczLCAwLCA2NDMxNiwgMCwgMCwgODIwLCA0MTc0MSwgMCwgMTIwNjY3LCAKICAgICAwLCA2NDY4NCwgMTI2OTkyLCAzMzU5LCA3ODAwLCA2OTkzNCwgNjUxNzcsIDYyMjYsIDM1MywgMTIzOTYsIDAsIDExOTYxMiwgCi0gICAgNjQ3NDIsIDEyODY4MiwgMTIwMjgyLCAwLCA5ODM0NDIsIDEyNDEyLCAxOTk0MSwgMCwgMTIwMjc3LCA3ODg0NywgMTg4NCwgCisgICAgNjQ3NDIsIDEyODY4MiwgMTIwMjgyLCAwLCA5ODM0NTAsIDEyNDEyLCAxOTk0MSwgMCwgMTIwMjc3LCA3ODg0NywgMTg4NCwgCiAgICAgOTQ4MSwgNDI0MTgsIDcwMDU5LCA0MTE1NywgMCwgMTE5NSwgNjQ4OTgsIDc5MjQsIDAsIDQxMTUxLCAyMDEwLCAwLCAKICAgICA0MTMyOCwgNDIzNDQsIDAsIDEyNDA5LCAwLCA0MzYwLCAxMjcwMDksIDk3MzksIDEyODU1MCwgNjk5MzMsIDczOTIxLCAwLCAKLSAgICA0MjUyMSwgODUzOSwgOTgzNzE2LCAwLCAxMTg5ODYsIDAsIDQ3ODgsIDAsIDY4MDIzLCA2NTczNCwgOTgzNDQ3LCA0Mzc5MCwgCisgICAgNDI1MjEsIDg1MzksIDk4MzcyNSwgMCwgMTE4OTg2LCAwLCA0Nzg4LCAwLCA2ODAyMywgNjU3MzQsIDk4MzQ1NSwgNDM3OTAsIAogICAgIDAsIDEzMDc1LCA3NDQyOSwgOTQwNjMsIDY0NTY5LCA0MzUzMiwgMTA4MzcsIDI0OTIsIDEyNzE5NywgMTE4OTAxLCA2ODYzNywgCiAgICAgNDExMzYsIDQzNzg1LCAxMTgxMywgOTY0OSwgNDExNTQsIDExOTYxNywgNTEyOCwgNDAzOCwgNDExNDMsIDY1NjA0LCAKICAgICA2NDg1OSwgNDE1OTIsIDY3NzEsIDE2NDgsIDU0MzUsIDkxNzgzNywgNjczNCwgNDEzNDMsIDExOTg0OCwgNjU0MzksIAogICAgIDEyNzA5LCA2OTg2LCA5MjM2NCwgNjgwMTUsIDAsIDQxMzQ5LCA3MDAyMSwgMTI1ODEsIDEwMzc0LCA1MTc1LCAwLCA3MzgwNiwgCiAgICAgMTAyNTQsIDAsIDEwMjc4LCAxMDI2MiwgNjk4NTgsIDQxMzQ2LCAwLCA2MDcsIDAsIDExOTg1MiwgMTI4ODQ2LCAxMjkyMywgCiAgICAgMTAzMTQsIDEwMjgyLCA2NTQ3NywgMTAzNzgsIDEyMDI5NywgNDA5NzYsIDgyNjUsIDAsIDExOTgzNCwgNDA5NzUsIDU4NDAsIAotICAgIDQyODM4LCAwLCA0MDk3OCwgOTgzODg4LCAxMTk4NDAsIDAsIDk4MzA3MSwgMCwgNjY0NDQsIDEwNTM4LCAwLCAyNTUwLCAKKyAgICA0MjgzOCwgMCwgNDA5NzgsIDk4Mzg5NywgMTE5ODQwLCAwLCA5ODMwNzEsIDAsIDY2NDQ0LCAxMDUzOCwgMCwgMjU1MCwgCiAgICAgMTE5ODM2LCA2Nzc5LCAwLCAwLCAzNTI1LCA2ODI0LCAxMTg4ODYsIDAsIDAsIDU2MTksIDY1ODIyLCAxMjY1NjcsIAogICAgIDE5NDg4MiwgNzQ1NSwgMCwgNTYxNiwgMTE0ODYsIDk2NTYsIDAsIDAsIDEwNzI3LCA1NjE1LCAwLCAxMjA1NTEsIDQyMzgwLCAKICAgICA2NDg5NSwgNDM2OTMsIDY2NDUxLCA4MDgsIDU0NTUsIDExMzQ3LCAwLCAxMDI2LCA1NjIwLCAxOTQ4ODcsIDAsIDExMzUwLCAKICAgICA1NjE3LCAwLCA5MjI1LCA2NDYzOSwgMTI3MDczLCA5MTQ1LCAxMjgwNjAsIDEzMzgsIDEyMDU4MSwgOTgzMTU4LCAxMjczOSwgCi0gICAgNDYwMywgMzA4NCwgOTgzMTU1LCA5MjQ4NCwgOTg1OCwgNjAzNywgMCwgMzk3NCwgNzgyMTMsIDEwMjkwLCA5ODM2OTUsIAorICAgIDQ2MDMsIDMwODQsIDk4MzE1NSwgOTI0ODQsIDk4NTgsIDYwMzcsIDAsIDM5NzQsIDc4MjEzLCAxMDI5MCwgOTgzNzA0LCAKICAgICAzMDgzLCAxMDMyMiwgMCwgMCwgMCwgNDEwMzYsIDAsIDAsIDQzMzIxLCA2NTYwNiwgMCwgNDEwMzIsIDQyMzg4LCAwLCAKICAgICA2NDcwMCwgMTAwMTEsIDE0NDUsIDQwOTYxLCAwLCAxMTkxMDUsIDAsIDQwOTYwLCAwLCAxOTQ4OTEsIDAsIDQwOTYzLCAKICAgICA2NDk1MiwgMTA0MDIsIDAsIDAsIDkyMzA0LCAxMDYwMywgMCwgMCwgOTgzMTEzLCAwLCA2NzE0LCAxMDA4MywgMTI3MDY5LCAKQEAgLTE4MjAyLDkgKzE4MjIxLDkgQEAKICAgICA0MTk3NiwgOTcyMCwgOTE3NjA2LCAxMTc2NywgNDE5NzAsIDE5NDU5NiwgNTgzNiwgMTIzNTgsIDAsIDQzNTUsIDkwNDgsIAogICAgIDEyMTgwLCA2NTAyNywgNjQ2ODAsIDEzMDM4LCA0MzY5OSwgMCwgNDE0ODgsIDEyODA4NywgODUyNywgMTk0OTE3LCAxMjM2MiwgCiAgICAgMTI0MzUsIDEyMzYwLCA0MTA1MywgMzI2NiwgMCwgMTIzNTYsIDg2MTYsIDQxNDY2LCAwLCA5MjU4OCwgMTE0NTAsIDAsIAotICAgIDM2MzgsIDEyMzU0LCAwLCAzMjE2LCAwLCAyMzU4LCA5MjYwNiwgODYzMywgMCwgOTgzNzM2LCAxMTkxODIsIDY5MjQ0LCAwLCAKKyAgICAzNjM4LCAxMjM1NCwgMCwgMzIxNiwgMCwgMjM1OCwgOTI2MDYsIDg2MzMsIDAsIDk4Mzc0NSwgMTE5MTgyLCA2OTI0NCwgMCwgCiAgICAgMCwgMTE3NTksIDE5NDkwMywgNjM2OCwgNzQ4MjMsIDAsIDQxNDIzLCA4MDc4LCAxMDUwNCwgMTI3NTU4LCA0MTY5OCwgCi0gICAgNDIyMzcsIDAsIDcwMDIsIDk4MzY2OSwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIDAsIDQxMDUwLCA0MTQ3MywgCisgICAgNDIyMzcsIDAsIDcwMDIsIDk4MzY3OCwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIDAsIDQxMDUwLCA0MTQ3MywgCiAgICAgMTA0NjYsIDEzMDk5LCAwLCAwLCAwLCA2NDM1LCAwLCAxMTM2MiwgMCwgMCwgNjUzODIsIDAsIDQxNDIwLCAwLCAzNjI1LCAKICAgICA3ODE1NywgNDE0MDksIDAsIDY5NjM5LCAyMDQxLCA5MTc4LCA5NjcyLCA0MTQyNywgNDM1NDEsIDQzMzE3LCAwLCAwLCAwLCAKICAgICA0MTQyNCwgOTE3NTk4LCAxMjA1NDYsIDAsIDEyODIxMiwgMCwgNDE0MTcsIDEyNjEsIDAsIDAsIDEyMTAyLCAxMTk2NjIsIApAQCAtMTgyMTQsOSArMTgyMzMsOSBAQAogICAgIDQxNDYxLCAxMjg4MjMsIDAsIDEyNzkxMiwgMCwgODgxOSwgMTI2NjMsIDAsIDQxMTg0LCA3NDAxNCwgMjMyLCA3NDgzNSwgCiAgICAgMTIwNjQ2LCA5MTY4LCA2NTc4NiwgMCwgMCwgMCwgOTA5NCwgMCwgMTE3NTgsIDY4NDI1LCAwLCAxMDY0LCA0MjQ2NywgCiAgICAgMTI4MDQ0LCAxMDExNSwgMTk5MjQsIDkyNzExLCAwLCA3ODYyLCA2NDU1MSwgMTMyMjQsIDg1MTYsIDQxODYyLCA2NjY1MCwgCi0gICAgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCA5ODMyNjEsIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgCisgICAgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCA5ODMyNjksIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgCiAgICAgMzc4NywgNDExNzQsIDAsIDQxNDU4LCAwLCA0MTQ2MywgNDI0MTMsIDExMjkyLCAyNDA2LCA3NzUsIDAsIDY1NTg0LCAKLSAgICA2OTkyMywgNjA3NCwgOTYxOCwgMTI4NjY4LCA5ODM5NDMsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAKKyAgICA2OTkyMywgNjA3NCwgOTYxOCwgMTI4NjY4LCA5ODM5NTIsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAKICAgICAxMjA2MDAsIDQxNDU2LCAwLCAxNTk5LCAxMTMzMywgMCwgNjcwMywgODUxMywgMCwgMTYxMywgMCwgNjg0NTYsIDEyNTk4LCAKICAgICA5ODMxOTEsIDEyMDczNCwgNzg3NDUsIDc0NTAwLCA0MTQ2MCwgMTAxNDUsIDEwNTQyLCA5OTM3LCA3ODc0NiwgNzAwMjksIAogICAgIDk5MDUsIDAsIDY1NzMwLCAwLCAxMjAzNzQsIDg0MjcsIDEyMDM3NSwgNTUyNDYsIDEyMDM3NiwgMCwgMTE0OTcsIDY0Njg3LCAKQEAgLTE4MjM2LDIxICsxODI1NSwyMSBAQAogICAgIDQxMjg3LCA5MjYxMCwgMCwgMCwgNDIyMTksIDEyODI1NywgMCwgNDE5ODcsIDQxNjc2LCA5ODMwNTksIDEyMDgyMywgCiAgICAgOTgzMTQ0LCA0MTY3MCwgMCwgOTI1OTAsIDI3OTYsIDU1MjkxLCAxMTY4MywgOTkwMiwgNzQ1MjEsIDY3OTg4LCAxMTQ1MSwgCiAgICAgOTgzMTExLCAxMjg4MjIsIDQyNjMxLCAyMzU5LCAwLCA2Nzg0NCwgNzQxNjQsIDQxMjM4LCA1NDgsIDExNDA1LCAxMzEzMywgCi0gICAgNjQzNjgsIDk4MzIzMywgMTI4Nzk1LCAwLCAzOTcsIDQzNjIyLCA0MjEzOSwgOTU0NywgOTU5MCwgMTI4MjM4LCAxNjE0LCAKKyAgICA2NDM2OCwgOTgzMjM5LCAxMjg3OTUsIDAsIDM5NywgNDM2MjIsIDQyMTM5LCA5NTQ3LCA5NTkwLCAxMjgyMzgsIDE2MTQsIAogICAgIDQzNjYxLCA2NDM1NiwgNjYzMDcsIDY2NTEsIDEzNTgsIDAsIDQyOCwgOTYyMCwgMTQ2NiwgNzgxMTIsIDEwOTgyLCAKICAgICAxMTg4MzEsIDEzMzMsIDcxMDQsIDQwNywgNjQyNSwgMTI4ODM0LCA3NDI1MywgMCwgMCwgMCwgNTgwNCwgMTE5NzYsIDg1NTQsIAogICAgIDkyNzIxLCAwLCAwLCA5MDU3LCA0MjI5NCwgNDEyMTgsIDAsIDAsIDc4MTM3LCAxODgzLCAxMDk1MiwgODA0OCwgNzgxNDIsIAotICAgIDQxMjI1LCA5MjYyMSwgNDI5MTUsIDk4MzY2NywgMTI4Njg0LCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAxOTQ4MjEsIAorICAgIDQxMjI1LCA5MjYyMSwgNDI5MTUsIDk4MzY3NiwgMTI4Njg0LCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAxOTQ4MjEsIAogICAgIDg0NDgsIDcxNDEsIDc0MTgzLCAwLCAxMjY3NSwgMTI2NTksIDAsIDQyMzYzLCAxMjA2MjQsIDE5NDgyNCwgNTUyNzMsIAogICAgIDEwNzY2LCAxMjAxMiwgMjM4NiwgNjQ3MzIsIDkxNzAsIDkxNzgyMSwgOTEyMywgNjQ1ODUsIDEyMDUwMCwgMTE5MTU4LCAKICAgICA3MTQwLCAxMDk3NywgMTI3Mzc4LCA0MTY0LCA5MDgxLCAwLCAxMjA1NjksIDQyMDQ5LCA0MjA0MiwgODcwOSwgMTI4MjgzLCAKICAgICAxMjY0NzcsIDEyMDYzNywgNDI0MTksIDY0Nzk5LCA0MjA0NywgMCwgMCwgODQ3MCwgMTE4MDcsIDY1ODk3LCA1NzcsIDAsIAotICAgIDk4Mzc1MSwgNzQzMDAsIDAsIDEyNzMwOCwgNzQ4NDAsIDAsIDAsIDEyODc5MSwgOTIyMjQsIDg3MzYsIDE0MTQsIDQyNjQzLCAKKyAgICA5ODM3NjAsIDc0MzAwLCAwLCAxMjczMDgsIDc0ODQwLCAwLCAwLCAxMjg3OTEsIDkyMjI0LCA4NzM2LCAxNDE0LCA0MjY0MywgCiAgICAgOTY4MywgNDM0ODYsIDc0MzQ0LCAwLCAyNTM2LCAwLCA2NjMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYzMTcsIDY5OTQ1LCAKICAgICA2NjMxNSwgMjEwNiwgMTIwMjIyLCAxMTI3MywgMCwgNDMwMDQsIDc1NDEsIDAsIDAsIDk2MSwgNjQzMDcsIDY2MzI0LCAKICAgICA2NDkwNiwgMTI4NTkxLCAzMTA2LCA2NTkxNywgNDEyODQsIDE2OTYsIDAsIDg5MSwgMTIxMDUsIDAsIDQyNjI0LCAxMjgwMiwgCiAgICAgMzI2NCwgODgyNCwgMTMyNjgsIDQzMDAzLCAxMDkzNiwgMCwgMCwgMCwgMTk0ODI2LCA5MjY4OCwgMCwgMjMyMiwgMTIwMzcxLCAKLSAgICA5ODM1ODQsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMTI4NzkzLCA5ODMzOTAsIDQzMjE2LCAKKyAgICA5ODM1ODQsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMTI4NzkzLCA5ODMzOTgsIDQzMjE2LCAKICAgICA2MDg5LCA3ODY4MiwgMCwgMTIwNTc4LCA0MTcwLCAxMDI5LCAxMjc3NjEsIDEyNzAzNiwgMTE5MjI0LCA0MjM3NCwgMCwgCiAgICAgNzQ0LCAwLCAwLCAwLCA2NTgyMywgMTI3ODI2LCAwLCAzNTUxLCAwLCAwLCA0NjIzLCA1NTI2OCwgMCwgNDU5OCwgOTgzMTYyLCAKICAgICA2NTEzNiwgMTI3MTM2LCAwLCAwLCAxMDg1MSwgMCwgNjE3OSwgOTI2MDIsIDYxODAsIDAsIDExOTUyLCAxMjA3NzgsIApAQCAtMTgyNjAsMTAgKzE4Mjc5LDEwIEBACiAgICAgMjMwOCwgMCwgNzQxNDksIDAsIDIzMTgsIDk4MzE4MywgNjYzNjEsIDgxOTgsIDAsIDY0MzYwLCAxMjYwMSwgNDI1MzYsIAogICAgIDY1MjY2LCAxMjA4MjcsIDc0MzA3LCA5MjQ2MiwgNjk3MCwgNTQwNCwgNDMzMzIsIDM2NjcsIDc5MzYsIDEyOTI1LCAKICAgICAxMjY5ODksIDYzODUsIDAsIDAsIDExODk0OSwgMTA4NzQsIDY1NTA1LCAxMjgwODMsIDAsIDQyMDUzLCAyMDc1LCA0MjA1NywgCi0gICAgMTEwODMsIDQyMDUyLCAwLCAwLCA2NzY1MSwgMCwgOTY2NSwgOTIzMDAsIDk4MzY1NywgMTMxODEsIDAsIDAsIDAsIDcwMDg4LCAKLSAgICA3NDE0OCwgMCwgMCwgMTIwMjI1LCAxMjAyMjksIDEyMDIyNCwgNzQxNzIsIDQxMTQ1LCAwLCA5NDA5NiwgOTgzOTM3LCAKKyAgICAxMTA4MywgNDIwNTIsIDAsIDAsIDY3NjUxLCAwLCA5NjY1LCA5MjMwMCwgOTgzNjY2LCAxMzE4MSwgMCwgMCwgMCwgNzAwODgsIAorICAgIDc0MTQ4LCAwLCAwLCAxMjAyMjUsIDEyMDIyOSwgMTIwMjI0LCA3NDE3MiwgNDExNDUsIDAsIDk0MDk2LCA5ODM5NDYsIAogICAgIDQxMTQ4LCA4NjgzLCA3NTk0LCAxMjc1MTksIDAsIDExOTA5MCwgMTA4NjksIDQzNDU4LCA0MTE0NiwgOTI0MDcsIDExNDQxLCAKLSAgICAwLCAzNTEyLCAxMTk2MzMsIDk4MzcwMCwgODEwMywgMCwgMCwgNjUxODQsIDExNzgwLCA0MTU2MywgNDI3OTYsIDAsIAorICAgIDAsIDM1MTIsIDExOTYzMywgOTgzNzA5LCA4MTAzLCAwLCAwLCA2NTE4NCwgMTE3ODAsIDQxNTYzLCA0Mjc5NiwgMCwgCiAgICAgNjk3NDIsIDQxNTQ0LCA2NTE0NiwgMCwgMCwgMCwgMCwgMTk5NDIsIDAsIDExODkwOCwgNzk4OCwgMTA0MzYsIDc0MjczLCAKICAgICAzMjcxLCA3MzgwNCwgNjQ3MTEsIDAsIDk0MDY0LCAwLCAwLCAzODA0LCAxMzA3MCwgMTE1NTcsIDQyMDQ0LCAwLCAxMDk1LCAKICAgICAwLCAzNTk5LCAxMjc3NzQsIDAsIDEyODg2MSwgODUxNCwgMCwgMCwgMCwgNzQzNDYsIDY2Njk3LCAwLCAxMTY4NCwgMCwgCkBAIC0xODI3MiwyMyArMTgyOTEsMjMgQEAKICAgICAwLCAxMjc3NzIsIDAsIDkxNzU0MiwgMCwgMCwgNjUzOSwgMCwgMCwgMCwgMTk0ODU2LCAwLCAxMjA0OTIsIDQxMTkwLCAKICAgICAzOTczLCAxMTkzNjUsIDQ1NzUsIDQxMTkzLCA3OTgyLCA0MjksIDAsIDEyNzE5NCwgMCwgMTk0ODU0LCA2NTc5MiwgMCwgCiAgICAgMTE4OTY4LCA2NDE3LCAxMTg5MTgsIDc4MTc4LCAwLCAxOTQ4NTAsIDAsIDAsIDQ5MTksIDEwNTkwLCAxMjg1NTYsIDc3NTUsIAotICAgIDAsIDAsIDY0NTQ4LCAxMjA1MDYsIDE2MjEsIDEwMjE0LCA2NTEyNiwgMCwgMTI3MDA0LCAwLCAxMjE4OCwgOTgzNjU5LCAKKyAgICAwLCAwLCA2NDU0OCwgMTIwNTA2LCAxNjIxLCAxMDIxNCwgNjUxMjYsIDAsIDEyNzAwNCwgMCwgMTIxODgsIDk4MzY2OCwgCiAgICAgMTYxNywgODA1MCwgMCwgNTAxNSwgMCwgMTE5MTc0LCA0MjU5MCwgMTk0ODcxLCAxNzU2LCA3ODE4MSwgMCwgNjU3NjgsIAogICAgIDYzNTIsIDQxODkyLCAwLCA3NTU1LCAxMzEwMywgNTQwOCwgMjgxNywgMTIxNCwgNjk5MTksIDkyMzM1LCA5ODMxMjUsIDAsIAogICAgIDAsIDAsIDEyNzE5NSwgNzk1NywgODY4OSwgNjQ3MjMsIDEwNTYsIDQyODk2LCA3NDE0NywgMTk0ODEzLCAwLCA1NTI4NiwgCi0gICAgNzA3MywgNjU4NTAsIDEyMzI3LCA5ODM5MzksIDExOTAyOCwgMCwgMCwgMCwgMjM0MSwgODQ1MCwgODQ4NCwgODQ3NCwgCi0gICAgOTgzMjUyLCAwLCA3MDA3OSwgODQ2MSwgMTI4MTAyLCAxMjE1MywgMTI3OTksIDAsIDQzNzA5LCA0MzcwOCwgOTQ1MSwgCi0gICAgNzU3MSwgMTMwNzMsIDAsIDAsIDY4MSwgOTgzMjQ2LCA3MDMsIDAsIDMyNzIsIDg3ODEsIDEyODk0LCA3MDA3NywgMTE3MDksIAorICAgIDcwNzMsIDY1ODUwLCAxMjMyNywgOTgzOTQ4LCAxMTkwMjgsIDAsIDAsIDAsIDIzNDEsIDg0NTAsIDg0ODQsIDg0NzQsIAorICAgIDk4MzI2MCwgMCwgNzAwNzksIDg0NjEsIDEyODEwMiwgMTIxNTMsIDEyNzk5LCAwLCA0MzcwOSwgNDM3MDgsIDk0NTEsIAorICAgIDc1NzEsIDEzMDczLCAwLCAwLCA2ODEsIDk4MzI1MiwgNzAzLCAwLCAzMjcyLCA4NzgxLCAxMjg5NCwgNzAwNzcsIDExNzA5LCAKICAgICA5MjI4OCwgNzQ0NDYsIDAsIDkyNTMyLCAwLCAxMTMzOCwgMTIwNzY4LCAzMjc2LCAwLCAwLCA2NTkyOCwgMCwgMCwgNjUwMjEsIAogICAgIDY0Nzk1LCA3NDU3NCwgMCwgMTAwNDcsIDc4ODE0LCAzMjYyLCA3ODgxMSwgNDI3MTEsIDAsIDAsIDY4NDc4LCAxNjMsIDU3NiwgCiAgICAgOTg5NSwgMTY1NSwgNzg4MTcsIDc0NTkxLCA3ODgxNSwgNzg4MTYsIDk4MzEyMiwgMCwgMCwgMCwgMTAwMzksIDAsIAotICAgIDk4MzkzNiwgNTYyMywgNTcxNywgNTc3NiwgMCwgMCwgMCwgNDE1OTEsIDExMDM2LCA2NTI1MiwgOTIzODIsIDAsIDAsIDAsIAorICAgIDk4Mzk0NSwgNTYyMywgNTcxNywgNTc3NiwgMCwgMCwgMCwgNDE1OTEsIDExMDM2LCA2NTI1MiwgOTIzODIsIDAsIDAsIDAsIAogICAgIDY3ODQ4LCAwLCAwLCAwLCA4ODg3LCAxMjc1MjEsIDcyOTUsIDExMDMxLCAwLCA0MzE1NywgMCwgODk0NiwgMTAzNDgsIAotICAgIDEwNDEyLCA4NzU1LCAwLCAwLCA1NzE4LCAxMzIyMSwgMCwgMCwgNzgxMzUsIDAsIDk4MzcwMiwgODgxMCwgNzQ0OTksIDY4NiwgCisgICAgMTA0MTIsIDg3NTUsIDAsIDAsIDU3MTgsIDEzMjIxLCAwLCAwLCA3ODEzNSwgMCwgOTgzNzExLCA4ODEwLCA3NDQ5OSwgNjg2LCAKICAgICAwLCA3MTM2MiwgNDYxOSwgMTE4OTU0LCA2NjU0LCA3Mzc2OSwgNzQ0MjYsIDAsIDEyMDQwLCA2NTY4OSwgMTAxMjgsIAotICAgIDY1MTE4LCAwLCAxMTkxNTEsIDc0MjA1LCA5MjY1MSwgMCwgMjQwMSwgNjgxNDQsIDg3OTIsIDk4MzYzOSwgMCwgNjU0NTUsIAorICAgIDY1MTE4LCAwLCAxMTkxNTEsIDc0MjA1LCA5MjY1MSwgMCwgMjQwMSwgNjgxNDQsIDg3OTIsIDk4MzY0OCwgMCwgNjU0NTUsIAogICAgIDAsIDkyMjQ2LCAwLCAxMTkxMjksIDAsIDEyODg2LCAxMjc5MjAsIDY2NjI0LCAwLCA0MzU1NywgMTAzMDAsIDEwMTYxLCAKLSAgICAxMDM5NiwgNzQxMzUsIDk4MzQ0NSwgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCAKKyAgICAxMDM5NiwgNzQxMzUsIDk4MzQ1MywgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCAKICAgICA0MTQ3NSwgMTI4NjcyLCA5Mzk3NSwgMCwgMTE0NzksIDAsIDEyMDM1NiwgNjM1MCwgMTI4NjQsIDY5Njc0LCA3ODExNCwgCiAgICAgMTA2MSwgNjQ3ODAsIDIwMDEsIDQzMTExLCA1NTIzMCwgMTI4Njg2LCA0MDUyLCAwLCA3NjI2LCAwLCAwLCAxMDQ1LCAwLCAKICAgICA1NjMxLCA0MTExMywgMCwgMCwgNDM3MDcsIDc0MTI3LCAwLCAwLCA4NDg2LCAwLCA3Mzc1OCwgMjMzNSwgNDM2MiwgCkBAIC0xODMwNCw4ICsxODMyMyw4IEBACiAgICAgOTIyNDUsIDQ0MCwgMCwgMTMwODUsIDkyMzMsIDc0MjE2LCAwLCAwLCA5OTU3LCAxMjgyODUsIDY2NDQ3LCA4MDQ2LCAKICAgICA2NDk2MywgNjU3NzcsIDEwMTI1LCA3NDIxMiwgNDI4MTksIDEwOTEwLCAwLCAxNTIxLCA5ODk2LCA5Mzk2NSwgMTA0ODcsIAogICAgIDY5ODc4LCAxMjUyNywgMCwgNzk3MCwgMCwgMTI4NjYwLCAwLCA2NTc2OSwgNTI0MywgOTg0OSwgNTIzOSwgNjU3NzEsIAotICAgIDk4MzIyOSwgMCwgNTIzNywgNjk3MTQsIDAsIDEwMTAzLCA1MjQ3LCA0NzY5LCAwLCAxMTg5NzcsIDEyODczLCAyMjgzLCAKLSAgICA5ODMyMzEsIDAsIDMwMDgsIDQ4OTYsIDAsIDEyMDg3LCAwLCA1NTIzMSwgNDExMDMsIDAsIDY0NTY1LCA0NzczLCAwLCAKKyAgICA5ODMyMzUsIDAsIDUyMzcsIDY5NzE0LCAwLCAxMDEwMywgNTI0NywgNDc2OSwgMCwgMTE4OTc3LCAxMjg3MywgMjI4MywgCisgICAgOTgzMjM3LCAwLCAzMDA4LCA0ODk2LCAwLCAxMjA4NywgMCwgNTUyMzEsIDQxMTAzLCAwLCA2NDU2NSwgNDc3MywgMCwgCiAgICAgOTI3MTcsIDcwMDc0LCA0NzcwLCAwLCA5MTc1NjcsIDg3MzEsIDY1Mzc4LCAxMjczNjIsIDEyMDYxOSwgOTEyMiwgMTI4MDMzLCAKICAgICAxMjY2MDAsIDQ3NzQsIDMwMTksIDk5OTcsIDEyODM0LCAwLCA5NDU2LCAxMDIxNSwgMTIwNTQ3LCAwLCAwLCAwLCAwLCAKICAgICA3NDc3NiwgNDI4MSwgNDc2OCwgMCwgNDE1MzUsIDQwOTksIDkwMTcsIDAsIDAsIDc4MDk1LCAwLCA3ODA5NiwgMCwgMCwgMCwgCkBAIC0xODMxOSwxMCArMTgzMzgsMTAgQEAKICAgICA3NjM0LCA2NTE2NywgOTg0NSwgMCwgMCwgNTcwMSwgOTcyMiwgNDE0OTAsIDk4MzE1MywgMTQyNiwgNjgyMTcsIDAsIAogICAgIDY4NDQ3LCA0MjIwNCwgNTUyNzAsIDg1NzEsIDE5NDk5MSwgNzgwNjcsIDAsIDc4ODE4LCA5MjcxOSwgNDMxODIsIDEyMTg0LCAKICAgICAwLCA0MjAyMiwgMCwgMTAyODEsIDAsIDU2NTAsIDQzMTk0LCA2NDcxMiwgMTA3NDQsIDAsIDk5MCwgNTY0NywgMCwgNzM4NywgCi0gICAgNzg3MzQsIDQxMTE0LCAxMTQ3NywgNTY0NiwgMTI4NzksIDExMDE4LCA5ODM5MjEsIDM5NDUsIDkyNTg5LCAwLCAwLCAwLCAwLCAKKyAgICA3ODczNCwgNDExMTQsIDExNDc3LCA1NjQ2LCAxMjg3OSwgMTEwMTgsIDk4MzkzMCwgMzk0NSwgOTI1ODksIDAsIDAsIDAsIDAsIAogICAgIDc4MjEyLCAxMjc3NDYsIDEwMjAsIDczNzYzLCAwLCA3ODczMSwgNTY0OCwgNjQ3NDgsIDE5NDkxMCwgNzg3MzMsIDEwMjA1LCAKLSAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDAsIDc0MDUxLCA5ODM2NDYsIDQzMjQyLCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIAotICAgIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY1MywgMTE4ODM2LCA5ODM3MzksIDc4NDI3LCAxMTQwLCAKKyAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDAsIDc0MDUxLCA5ODM2NTUsIDQzMjQyLCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIAorICAgIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY2MiwgMTE4ODM2LCA5ODM3NDgsIDc4NDI3LCAxMTQwLCAKICAgICA3ODQyNiwgMCwgMTAxNTksIDAsIDAsIDgxMjgsIDAsIDAsIDkxNzk2NSwgMTgxNSwgMTk5MTAsIDg5MCwgMCwgMzI2NywgCiAgICAgOTIyOTEsIDAsIDEwMTIzLCAwLCA0NDEwLCAxMDQxLCAxMDU3NiwgNjM1NCwgOTI1ODEsIDU4MCwgNzQyMzIsIDAsIAogICAgIDEyODM0NywgMCwgMCwgMCwgMTk5MzgsIDY1OTA2LCAxMjc4MTksIDAsIDAsIDMyOTgsIDUzNzUsIDEwMTQyLCAwLCA4MjE1LCAKQEAgLTE4MzMzLDE2ICsxODM1MiwxNiBAQAogICAgIDQxNTIxLCAxMTg5MzQsIDQ5NCwgMTMyNTAsIDAsIDY1MDk4LCA2MzY0LCA5NTYsIDAsIDEyODMwLCAxMDQ2MiwgNzM3NDAsIAogICAgIDczNzM0LCAwLCAwLCAwLCA2NjQ0OSwgMTMyNjMsIDc0MjgxLCA2OTIxNywgMTMxNzEsIDEyNzc5NiwgMCwgMCwgOTIyOTQsIAogICAgIDAsIDEwNDQsIDQxMjc2LCAwLCAwLCAwLCA0MjA2OCwgMTE3OTUsIDAsIDAsIDAsIDAsIDQyNDUwLCAzOTA3LCAwLCA2NDUyNiwgCi0gICAgMTE4MjksIDY4MTk3LCAxMjI5NSwgMCwgMTE0NzUsIDAsIDMwMjAsIDExNTM3LCAwLCA2NjQ0MSwgOTgzNDQ2LCA3MDk4LCAwLCAKKyAgICAxMTgyOSwgNjgxOTcsIDEyMjk1LCAwLCAxMTQ3NSwgMCwgMzAyMCwgMTE1MzcsIDAsIDY2NDQxLCA5ODM0NTQsIDcwOTgsIDAsIAogICAgIDAsIDEwNTcsIDU2NiwgNDI2OTYsIDAsIDMwMTYsIDQyMjc0LCA0MzQ2NCwgNjY0OTAsIDEyOTIxLCA2NjU3MSwgNzg0NzIsIAogICAgIDkyNTEwLCAzMDA2LCA0NjIwLCAxMjcyMzcsIDk4MzU3OCwgMCwgMCwgNjQ2NTksIDAsIDEyNzc0OSwgNTUyNTMsIDYzNTcsIAogICAgIDYzNjIsIDg2MjYsIDcxMzM3LCAyMjE2LCA5MDkwLCA2NTM3NywgNDE1OTYsIDAsIDQyOTIwLCAxNjk4LCAwLCA2NDQ3NywgMCwgCiAgICAgNDM4MTMsIDEwNTMsIDAsIDc4MjY5LCAwLCAxMjY1ODYsIDEwNTIsIDEwNTEsIDQ1OSwgMTA2MCwgNzQzNDksIDY2NDc5LCAwLCAKICAgICAwLCAwLCAwLCA0MjQ5MCwgNjg5LCA2NTA4LCA0MTYzLCA0MjI5OCwgODYzOSwgNjY2NDEsIDQyNDYsIDAsIDAsIDEyMTMwLCAKLSAgICAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMTI3ODUwLCAwLCAwLCA2MzU5LCAwLCA0MzQ3MSwgOTgzNzU5LCAwLCAKKyAgICAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMTI3ODUwLCAwLCAwLCA2MzU5LCAwLCA0MzQ3MSwgOTgzNzY4LCAwLCAKICAgICAwLCAxMjcyNzQsIDAsIDYzNTgsIDYzNjEsIDE5MjYsIDYzNTYsIDkyNjI3LCA3ODk4LCA4MTEwLCAxMDkzNSwgMCwgMTAwNjksIAotICAgIDU4MzAsIDAsIDQzNjg1LCAwLCAwLCAwLCAwLCA4NjkzLCA3ODYxMSwgMTE5NTY1LCA5ODM3OTksIDEyMDQxMywgMCwgCi0gICAgMTI3MjU3LCA2NTg5NCwgMCwgMCwgMCwgOTgzOTE0LCAwLCAwLCAxMTkxODcsIDIxMzUsIDc4ODY4LCAwLCAwLCA3ODg2OSwgCisgICAgNTgzMCwgMCwgNDM2ODUsIDAsIDAsIDAsIDAsIDg2OTMsIDc4NjExLCAxMTk1NjUsIDk4MzgwOCwgMTIwNDEzLCAwLCAKKyAgICAxMjcyNTcsIDY1ODk0LCAwLCAwLCAwLCA5ODM5MjMsIDAsIDAsIDExOTE4NywgMjEzNSwgNzg4NjgsIDAsIDAsIDc4ODY5LCAKICAgICA0MjMxMywgNTU3OSwgOTI0MTIsIDAsIDk4MzA4MiwgOTQwMDIsIDAsIDU1NzgsIDQxNzc0LCAxMjgxMTUsIDQyMDIzLCAKICAgICA2MjM0LCA1NjY5LCA5MjI3NSwgMCwgMCwgMCwgMTI3NTA2LCA2ODIwMiwgNTU4MywgMCwgMCwgNDI0MjYsIDU1ODAsIAogICAgIDQyMjc2LCAyOTIzLCA4OTIsIDIyMjAsIDQyNDY1LCA0MTMzMCwgMTk0OTg3LCA1Nzk1LCA2NTUxMiwgMTE5MDA2LCA2NTcwMiwgCkBAIC0xODM1Miw3ICsxODM3MSw3IEBACiAgICAgNjQ5MDAsIDcxNTMsIDYwOTUsIDQxODY1LCAwLCAzMDE1LCAxMjgwMjMsIDEyNjQ2NSwgNTIxMSwgOTgzMDgzLCA2NDAwLCAwLCAKICAgICAxOTQ5ODMsIDcwMDU0LCA4MTg5LCAxMTI3NiwgMCwgMCwgMzcyLCAxMjg4MjksIDAsIDExODg3NCwgNDIxMDIsIDQxNTg1LCAKICAgICAxMjgyMDIsIDAsIDQyMTAxLCAyNzYsIDc4NDAyLCAwLCAzMywgNzQyMjYsIDEyNzMwMywgOTAwNywgMTE4Nzk2LCA0MTU4OCwgCi0gICAgNjYwMzMsIDQyNywgMTA3NjMsIDExODgxOSwgMCwgMTI3ODg0LCAwLCAxMDMxLCA2MjU3LCAwLCA0MjEwNCwgMCwgOTgzOTcxLCAKKyAgICA2NjAzMywgNDI3LCAxMDc2MywgMTE4ODE5LCAwLCAxMjc4ODQsIDAsIDEwMzEsIDYyNTcsIDAsIDQyMTA0LCAwLCA5ODM5ODAsIAogICAgIDIzMjgsIDkyNDA5LCAxMDcxLCA0Mjg5OSwgMCwgNzQ4NDgsIDAsIDk4MzU4MCwgMCwgMTA0NywgMCwgMCwgNjQ3OTAsIDAsIAogICAgIDY5NzIzLCAxMDY1MSwgMCwgMCwgMCwgMCwgOTIyMDYsIDExOTE4MSwgNTcxMSwgNDE2MzMsIDEyMDk4LCA2NTU3MSwgOTE2NiwgCiAgICAgMCwgNTcxMCwgMCwgNjc5MCwgNjUxNjgsIDEzMjE2LCAwLCA2OTcxNiwgNjk3MjYsIDAsIDY0NjExLCA0MTYyMywgMTk1MDAxLCAKQEAgLTE4MzYxLDEyMCArMTgzODAsMTIwIEBACiAgICAgOTE5NiwgNjk2NzAsIDAsIDAsIDAsIDAsIDExODkxMSwgMCwgMCwgMCwgMCwgMCwgMTIwMDEwLCAwLCA4NzAxLCA2ODEzMCwgCiAgICAgMTE5NjE2LCAxMjA1MjIsIDAsIDQyNDc3LCAxOTQ5OTQsIDEyMTIzLCA0NDk1LCA0MzU2OSwgMCwgMCwgMCwgNjQ5NDYsIAogICAgIDEwOTkyLCAwLCAxMjAwMDksIDAsIDAsIDkzMTgsIDkzOTg2LCAxMzI0OSwgNjU2NzksIDczODA4LCAwLCA2NTQ1NywgCi0gICAgNDIyNDksIDc2MzksIDQzOTk1LCA2Nzg0NSwgNDI2NDEsIDU0NTQsIDAsIDAsIDE5NDk5NywgMTIwMDA1LCAwLCA5ODM5NTcsIAorICAgIDQyMjQ5LCA3NjM5LCA0Mzk5NSwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAxOTQ5OTcsIDEyMDAwNSwgMCwgOTgzOTY2LCAKICAgICA1MDg0LCAwLCAwLCAxMTg4NjEsIDAsIDczMywgOTE3ODc2LCA3ODAxNCwgNzg0MzYsIDc4NDM1LCA0MTY3NywgMCwgOTIxOCwgCi0gICAgMTczMSwgMCwgOTgzNzM3LCAwLCA2Nzk5MCwgMCwgMCwgMCwgMTIwMDAxLCAxMjcwMTgsIDkyNDkyLCA1MTU1LCAxMjAwMDAsIAotICAgIDUzNTgsIDk4MzczNSwgMCwgOTE3NzY3LCA2NDQyNCwgOTgzMjI1LCAzODQwLCA2NDMxNCwgNDE0MzIsIDAsIDc4MzE1LCAKKyAgICAxNzMxLCAwLCA5ODM3NDYsIDAsIDY3OTkwLCAwLCAwLCAwLCAxMjAwMDEsIDEyNzAxOCwgOTI0OTIsIDUxNTUsIDEyMDAwMCwgCisgICAgNTM1OCwgOTgzNzQ0LCAwLCA5MTc3NjcsIDY0NDI0LCA5ODMyMzEsIDM4NDAsIDY0MzE0LCA0MTQzMiwgMCwgNzgzMTUsIAogICAgIDY4NDMwLCA2Nzk4MCwgNDMyNTMsIDY1OTQzLCAwLCAzMzcxLCAxMDk4OCwgMCwgODc3MSwgMTQ3OSwgMCwgMCwgMTEwOSwgCi0gICAgMTE1ODAsIDAsIDY0NjAxLCAxMjIwNSwgMCwgMCwgNjQ1MDcsIDg4NjgsIDM5OSwgNjc5NzgsIDc0ODQyLCA5ODMyNzYsIAotICAgIDk4MzcxMiwgMTIxNDksIDEzMDg4LCA1NTEsIDAsIDEwMTU2LCAxMjExOSwgOTI1NzIsIDAsIDI1NDQsIDY1MDc0LCAKKyAgICAxMTU4MCwgMCwgNjQ2MDEsIDEyMjA1LCAwLCAwLCA2NDUwNywgODg2OCwgMzk5LCA2Nzk3OCwgNzQ4NDIsIDk4MzI4NCwgCisgICAgOTgzNzIxLCAxMjE0OSwgMTMwODgsIDU1MSwgMCwgMTAxNTYsIDEyMTE5LCA5MjU3MiwgMCwgMjU0NCwgNjUwNzQsIAogICAgIDExOTIxMSwgMCwgMCwgNzgwMTEsIDM1MSwgMTE5MTQ5LCAwLCAwLCA1NTIyOSwgMCwgNzQyNjgsIDAsIDAsIDAsIDQyMzc3LCAKLSAgICAwLCAwLCAwLCA5ODM5MTUsIDAsIDkwMTMsIDQwNTQsIDAsIDk4MzU3MCwgMCwgMCwgNzM5NjAsIDU1ODUsIDY1ODgxLCAKKyAgICAwLCAwLCAwLCA5ODM5MjQsIDAsIDkwMTMsIDQwNTQsIDAsIDk4MzU3MCwgOTgzNjI4LCAwLCA3Mzk2MCwgNTU4NSwgNjU4ODEsIAogICAgIDI1NDksIDc0NDY5LCAwLCAwLCA1NTg0LCA4MzU4LCAwLCA2NDIxNSwgOTIyMTksIDEwOTE5LCAwLCA3OTgwLCAxMjY2MDEsIAotICAgIDk4Mzc3NSwgMjIxOCwgNDE4MDAsIDU1ODksIDAsIDI2NjQsIDQxNjEzLCA1NTg2LCAxMTg4OTAsIDAsIDExMzU2LCAwLCAwLCAKKyAgICA5ODM3ODQsIDIyMTgsIDQxODAwLCA1NTg5LCAwLCAyNjY0LCA0MTYxMywgNTU4NiwgMTE4ODkwLCAwLCAxMTM1NiwgMCwgMCwgCiAgICAgNDM0NTIsIDc4NjA5LCAwLCA0MjU3MywgNjc4NTYsIDAsIDc4MTI5LCAwLCAwLCA3NDM5MiwgODEzNSwgNjQ1MCwgMTAwNTUsIAogICAgIDc3OTk2LCAwLCAwLCAxMTkyMjUsIDU2NTcsIDAsIDk2MjYsIDAsIDc3OTk0LCAxMDE3OSwgNTY1NCwgMTI5MzksIDkyNTczLCAKICAgICAxMjA3OTksIDAsIDAsIDU2NTIsIDEwOTQ1LCAwLCA2NjQ4NiwgMCwgMzY2MSwgNzg2MywgMCwgMCwgMCwgNzQ1MDksIAotICAgIDk4Mzg0MywgNTY1OSwgMCwgNzg2OTIsIDY2NzI5LCA1NjU1LCAwLCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAxMjc3OTIsIAotICAgIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIDEwMzA0LCAKLSAgICAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCA5ODM4NzgsIDY0ODcwLCAwLCAzNDY3LCA5ODM4ODIsIDAsIAotICAgIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCA2OTIyMiwgNjU5MjcsIDAsIDcwMDM2LCAKLSAgICA2OTY5NiwgNjk3NjksIDY0NjU2LCA5ODM3MTcsIDAsIDk0MDIwLCA3MDA1NiwgNTY2NiwgNjUyMjcsIDUzMTgsIDYzOTk0LCAKLSAgICAwLCA5MDkxLCAxMDc5OCwgMCwgMTI4MTY2LCAxMDE4NiwgMCwgNzczMiwgOTgzNzE1LCA2NDU1NiwgMCwgMCwgNTY2OCwgCi0gICAgNzQ0NDUsIDAsIDEyODY2MywgNTY3MCwgMTI2NjEwLCAxMjcyOTcsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAxOTk1MiwgCi0gICAgMTIwODA3LCAwLCAxMjc0OSwgNzQ1NTEsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIDE0OTcsIAotICAgIDEyODI4NiwgOTQwMDQsIDAsIDAsIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCA2Nzg5NiwgCi0gICAgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgMCwgMTI4NTU0LCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgNjU5MTIsIDAsIAotICAgIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgOTQxMDEsIDk0MTAyLCA5NDA5OSwgNjQ5MDUsIDk0MTA1LCAKLSAgICA5NTEyLCA5NDEwMywgMTI3NDIsIDY0NDMsIDk4Mzc5NywgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAxMjg4MzIsIAotICAgIDk4Mzg0MiwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIDEyNzI3MCwgCi0gICAgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMTI4NzY5LCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgOTgzODAwLCAKLSAgICA2OTgxNSwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgNDMyMjMsIDQzNzYwLCA1NjM1LCAKLSAgICAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgMCwgMCwgCi0gICAgMTY1NywgNDE1NjEsIDc4Mjk5LCA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDk4MzY3NiwgNzgzMDAsIAotICAgIDQyMjI3LCAwLCAwLCA0MTYzNywgNjc4NzIsIDAsIDc4MzEwLCA0MTYyNSwgNDMzNjIsIDc4MzA5LCAxMjA3MTMsIDExNzA1LCAKLSAgICA1NjQyLCAwLCA1NDg2LCAwLCA0MzU2LCAxMTcxMCwgMCwgMTIwNTEsIDY5OTM4LCAwLCA1NjQxLCA4MjU5LCAwLCAxMDU4LCAKLSAgICAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCAyODAwLCAwLCAKLSAgICA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDQzNjM0LCAwLCA1NjA4LCA2NTg5MCwgNDM4MDgsIDAsIDY3NjIxLCAKLSAgICAxMTk5MzQsIDkwMDAsIDAsIDAsIDkyNjczLCAxODY1LCAwLCA1NjEzLCA2OTk1MCwgMCwgMCwgNTYxMCwgMCwgMCwgNjU4MjYsIAotICAgIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIDY1Mzc2LCAKLSAgICAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgOTI1NDcsIDEzMTMwLCA2NTg3NCwgMCwgNTgwNywgMCwgMTAwMzAsIDUzMDYsIAotICAgIDEyMzY0LCAxMjgwNjQsIDAsIDExNzA0LCAwLCA5MjU4MywgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCA5NzEwLCAwLCAwLCAKLSAgICAwLCA0MTMsIDY1NjIzLCA3MTE4LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIDEyMTcxLCAxMTkyNDAsIAotICAgIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDk4Mzg5MCwgMTMwOCwgMCwgMjUzNCwgCi0gICAgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCA3NDQ3MCwgNjY2MTgsIAotICAgIDY1NjgwLCAxMjA3NzksIDEwMDI3LCAwLCAxMjgxNTQsIDEyMzM3LCAxMjA3MjIsIDEyNzM2OCwgOTgzMTY3LCAyOTgwLCAKLSAgICA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIDkyMjc2LCA0NDAxMSwgCi0gICAgODczMCwgOTgzMDY3LCAxMjc4NTQsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCA5MzUsIDAsIDY1ODQwLCAKLSAgICAzNzcsIDQyMzI1LCAxMTY0OSwgMTI3MzYzLCA2NTI1MywgNjQzMDEsIDEyODgzNSwgNzgzMDgsIDQyMzQxLCA2NTI4NCwgCi0gICAgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgMTE5MjE3LCA3MjQ4LCAwLCAKLSAgICAxMjgzNDYsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDEyNzg3NiwgNzgyMjYsIDEyODc3NSwgCi0gICAgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMTI3OTExLCAxMzE0MiwgNzg4MTIsIDQyNDE1LCA2NjU3NSwgNDU0MiwgCi0gICAgNjk5MDksIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgMTE1NjUsIDc5NDksIDAsIDk4MzkwOSwgCi0gICAgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDkyNzI0LCA2NDc4LCA5ODk4LCAKLSAgICA0MzY3MywgNjUyMzcsIDYyNDEsIDcxMDYsIDQ4NzcsIDk4Mzc4NiwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgNDQwOSwgMCwgCi0gICAgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDk0MDQ3LCA2MjM3LCA0ODc0LCAwLCA5MTc2LCAwLCAxMjY1NTMsIDY1MjMxLCAKLSAgICA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIDAsIDU2ODUsIAotICAgIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMTI3ODIwLCA0MzYzNSwgCi0gICAgNzM5MjgsIDEyNzUyOSwgMCwgMCwgMCwgMTI4NTEwLCA2NTQ4MiwgMCwgOTE0MiwgMCwgMTI2NDcwLCAwLCAxMDkzOCwgMCwgCi0gICAgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIDEwNzkwLCAKLSAgICAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDk4MzkyOSwgMTEzNzYsIAotICAgIDc0Mzc5LCAxMDcyMSwgNjc2NjQsIDM0MzgsIDQyMDk3LCAxMjcyNjcsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCA3ODMwNSwgCi0gICAgMTIwMTgzLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODQ0LCA0MTg3MSwgCi0gICAgNDEzMzgsIDM3MzQsIDc3MzQsIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgMTI3OTM3LCAwLCAKLSAgICA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIDcyODcsIDQyMTYyLCAxMjc1NTIsIDAsIDEyNjYwNSwgMTE5NDgsIAotICAgIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIDcyODYsIDAsIDY4NjM1LCAxMDAzMSwgCi0gICAgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCA0MjY3OCwgMCwgCi0gICAgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgOTI2MjMsIDAsIDAsIDk4MzkyNywgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCAKKyAgICA5ODM4NTIsIDU2NTksIDAsIDc4NjkyLCA2NjcyOSwgNTY1NSwgOTgzNjI2LCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAKKyAgICAxMjc3OTIsIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIAorICAgIDEwMzA0LCAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCA5ODM4ODcsIDY0ODcwLCAwLCAzNDY3LCAKKyAgICA5ODM4OTEsIDAsIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCA2OTIyMiwgNjU5MjcsIDAsIAorICAgIDcwMDM2LCA2OTY5NiwgNjk3NjksIDY0NjU2LCA5ODM3MjYsIDAsIDk0MDIwLCA3MDA1NiwgNTY2NiwgNjUyMjcsIDUzMTgsIAorICAgIDYzOTk0LCAwLCA5MDkxLCAxMDc5OCwgMCwgMTI4MTY2LCAxMDE4NiwgMCwgNzczMiwgOTgzNzI0LCA2NDU1NiwgMCwgMCwgCisgICAgNTY2OCwgNzQ0NDUsIDAsIDEyODY2MywgNTY3MCwgMTI2NjEwLCAxMjcyOTcsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAKKyAgICAxOTk1MiwgMTIwODA3LCAwLCAxMjc0OSwgNzQ1NTEsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIAorICAgIDE0OTcsIDEyODI4NiwgOTQwMDQsIDAsIDAsIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCAKKyAgICA2Nzg5NiwgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgMCwgMTI4NTU0LCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgCisgICAgNjU5MTIsIDAsIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgOTQxMDEsIDk0MTAyLCA5NDA5OSwgNjQ5MDUsIAorICAgIDk0MTA1LCA5NTEyLCA5NDEwMywgMTI3NDIsIDY0NDMsIDk4MzgwNiwgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAKKyAgICAxMjg4MzIsIDk4Mzg1MSwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIAorICAgIDEyNzI3MCwgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMTI4NzY5LCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgCisgICAgOTgzODA5LCA2OTgxNSwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgNDMyMjMsIDQzNzYwLCAKKyAgICA1NjM1LCAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgCisgICAgMCwgMCwgMTY1NywgNDE1NjEsIDc4Mjk5LCA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDk4MzY4NSwgCisgICAgNzgzMDAsIDQyMjI3LCAwLCAwLCA0MTYzNywgNjc4NzIsIDAsIDc4MzEwLCA0MTYyNSwgNDMzNjIsIDc4MzA5LCAxMjA3MTMsIAorICAgIDExNzA1LCA1NjQyLCAwLCA1NDg2LCAwLCA0MzU2LCAxMTcxMCwgMCwgMTIwNTEsIDY5OTM4LCAwLCA1NjQxLCA4MjU5LCAwLCAKKyAgICAxMDU4LCAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCAyODAwLCAKKyAgICAwLCA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDQzNjM0LCAwLCA1NjA4LCA2NTg5MCwgNDM4MDgsIDAsIAorICAgIDY3NjIxLCAxMTk5MzQsIDkwMDAsIDAsIDAsIDkyNjczLCAxODY1LCAwLCA1NjEzLCA2OTk1MCwgMCwgMCwgNTYxMCwgMCwgMCwgCisgICAgNjU4MjYsIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIAorICAgIDY1Mzc2LCAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgOTI1NDcsIDEzMTMwLCA2NTg3NCwgMCwgNTgwNywgMCwgCisgICAgMTAwMzAsIDUzMDYsIDEyMzY0LCAxMjgwNjQsIDAsIDExNzA0LCAwLCA5MjU4MywgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCAKKyAgICA5NzEwLCAwLCAwLCAwLCA0MTMsIDY1NjIzLCA3MTE4LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIAorICAgIDEyMTcxLCAxMTkyNDAsIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDk4Mzg5OSwgCisgICAgMTMwOCwgMCwgMjUzNCwgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCAKKyAgICA3NDQ3MCwgNjY2MTgsIDY1NjgwLCAxMjA3NzksIDEwMDI3LCAwLCAxMjgxNTQsIDEyMzM3LCAxMjA3MjIsIDEyNzM2OCwgCisgICAgOTgzMTY3LCAyOTgwLCA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIAorICAgIDkyMjc2LCA0NDAxMSwgODczMCwgOTgzMDY3LCAxMjc4NTQsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCAKKyAgICA5MzUsIDAsIDY1ODQwLCAzNzcsIDQyMzI1LCAxMTY0OSwgMTI3MzYzLCA2NTI1MywgNjQzMDEsIDEyODgzNSwgNzgzMDgsIAorICAgIDQyMzQxLCA2NTI4NCwgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgCisgICAgMTE5MjE3LCA3MjQ4LCAwLCAxMjgzNDYsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDEyNzg3NiwgCisgICAgNzgyMjYsIDEyODc3NSwgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMTI3OTExLCAxMzE0MiwgNzg4MTIsIDQyNDE1LCAKKyAgICA2NjU3NSwgNDU0MiwgNjk5MDksIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgMTE1NjUsIDc5NDksIDAsIAorICAgIDk4MzkxOCwgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDkyNzI0LCA2NDc4LCAKKyAgICA5ODk4LCA0MzY3MywgNjUyMzcsIDYyNDEsIDcxMDYsIDQ4NzcsIDk4Mzc5NSwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgCisgICAgNDQwOSwgMCwgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDk0MDQ3LCA2MjM3LCA0ODc0LCAwLCA5MTc2LCAwLCAxMjY1NTMsIAorICAgIDY1MjMxLCA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIAorICAgIDAsIDU2ODUsIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMTI3ODIwLCAKKyAgICA0MzYzNSwgNzM5MjgsIDEyNzUyOSwgMCwgMCwgMCwgMTI4NTEwLCA2NTQ4MiwgMCwgOTE0MiwgMCwgMTI2NDcwLCAwLCAKKyAgICAxMDkzOCwgMCwgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIAorICAgIDEwNzkwLCAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDk4MzkzOCwgCisgICAgMTEzNzYsIDc0Mzc5LCAxMDcyMSwgNjc2NjQsIDM0MzgsIDQyMDk3LCAxMjcyNjcsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCAKKyAgICA3ODMwNSwgMTIwMTgzLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODQ0LCAKKyAgICA0MTg3MSwgNDEzMzgsIDM3MzQsIDc3MzQsIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgCisgICAgMTI3OTM3LCAwLCA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIDcyODcsIDQyMTYyLCAxMjc1NTIsIDAsIDEyNjYwNSwgCisgICAgMTE5NDgsIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIDcyODYsIDAsIDY4NjM1LCAKKyAgICAxMDAzMSwgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCA0MjY3OCwgCisgICAgMCwgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgOTI2MjMsIDAsIDAsIDk4MzkzNiwgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCAKICAgICA2ODYyNCwgMCwgODMyLCAxMjA2OTMsIDEyMDc3MCwgNzg0NzMsIDY2MDA3LCA3ODQ3MSwgNjU3MDMsIDAsIDAsIDQyNzMyLCAKICAgICA1MTgwLCA5MjY5OSwgNDEzOTUsIDQxNTMwLCAxMTY5MSwgNjQ3NzMsIDkyMjE0LCA3NDAwMiwgMCwgMCwgMTI4NjQ1LCAKLSAgICA2MzQ4LCAyNDMsIDEzMjAwLCA5ODM4MDQsIDYwMjQsIDkyMzA5LCA5OTc5LCAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAKKyAgICA2MzQ4LCAyNDMsIDEzMjAwLCA5ODM4MTMsIDYwMjQsIDkyMzA5LCA5OTc5LCAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAKICAgICA0MzY4NywgMCwgMCwgNDI4NSwgNjYxOTUsIDAsIDQyMzAsIDAsIDczNjcsIDQzMjU2LCA5MjM1MywgNzU2MywgNDIzNzYsIDAsIAogICAgIDY4NDQyLCAxMjA1MTIsIDAsIDAsIDIxNCwgMCwgMCwgNzg0NjYsIDY1ODkzLCAxMjIwOCwgOTk3MywgMCwgNjYzMTEsIAogICAgIDY1NTg5LCAxMjgyNzcsIDI2MDMsIDAsIDAsIDAsIDcwMDQ3LCAwLCA2MDIyLCAwLCAyODg0LCAwLCAxMTYyMCwgMCwgNDMsIAogICAgIDAsIDY2NDUzLCAxMDE2LCA0MTEwNywgMCwgNDExMjEsIDM4ODUsIDkyLCA2NTQ1NiwgNjQ2MDgsIDAsIDc0ODAxLCAwLCAKLSAgICAyMDc0LCAwLCA3ODI4MywgMCwgMTI0NTMsIDEyODEyOCwgOTgzODE3LCA3NDI0MSwgMTI2NTY4LCA2NzkxLCAxMjQ1NywgCisgICAgMjA3NCwgMCwgNzgyODMsIDAsIDEyNDUzLCAxMjgxMjgsIDk4MzgyNiwgNzQyNDEsIDEyNjU2OCwgNjc5MSwgMTI0NTcsIAogICAgIDc4MjY4LCAwLCAwLCAwLCA3ODI3OSwgMCwgMCwgOTIzNTgsIDY2NjM3LCA3OTk1LCA4NzU5LCA0MzQyMSwgNzgyNzcsIAogICAgIDEyNDQ5LCAxMjg1NTIsIDAsIDAsIDg3NTIsIDMxOTcsIDQ3MjAsIDEwMTY1LCAwLCAxMTkyNDksIDAsIDExNTk1LCA2NDg5MywgCiAgICAgMCwgNDM0MzUsIDAsIDAsIDQ5OTMsIDAsIDYxNjgsIDEwOTM0LCAxOTQ2LCA3NDEsIDAsIDU0OTQsIDQ2MzksIDk4MzE0NywgCiAgICAgMTk5MCwgNjY1ODksIDQ0OTgsIDc4NjY0LCAxMTkxODMsIDAsIDAsIDY5NzM0LCAyOTYwLCA3Mzc3OSwgMCwgODk2OSwgCiAgICAgMTI4MTE3LCA0MzQyNCwgMTI3MDU5LCAwLCAyOTUwLCAxMTk1NzksIDYyMTAsIDY1NzUzLCAzNzAsIDAsIDAsIDAsIDQ5NTMsIAotICAgIDk4MzY3MywgMCwgMCwgMCwgNjkyMzAsIDAsIDAsIDY1Njg4LCA5ODMyNDAsIDUwNjMsIDM1MTcsIDI5NjQsIDQzNjYzLCAKKyAgICA5ODM2ODIsIDAsIDAsIDAsIDY5MjMwLCAwLCAwLCA2NTY4OCwgOTgzMjQ2LCA1MDYzLCAzNTE3LCAyOTY0LCA0MzY2MywgCiAgICAgOTE3NzYyLCA2MzQ0LCA3NDc5MSwgMTA1NjYsIDEwMTQ0LCA2NjMzMywgODI1MiwgNzI5LCA2NjAxNiwgNzgyNTMsIDAsIAogICAgIDcxMzE3LCA2NDkyMywgMTI4MDQwLCA0MzY2OSwgOTAzMiwgNzgyNjMsIDc4MjY0LCAwLCA0MTIxNSwgMCwgNjU4ODMsIDAsIAogICAgIDkxNzc3NCwgMTIwNjAyLCAzNzYxLCAwLCAwLCA3MDA2OCwgMCwgMTI5MTIsIDExOTAxMiwgMzg1MCwgMTI4MTkxLCAwLCAwLCAKICAgICAwLCAwLCA5MDgsIDAsIDg2MTEsIDAsIDAsIDEyNzU1NSwgNDM2OTEsIDQxMTk3LCAwLCA4OTc4LCAxMjA1NDAsIDExOTEzNSwgCiAgICAgNDE1ODYsIDEwNTI3LCAwLCA5MTc4NDgsIDM4NDgsIDc4NzM5LCAxOTQ5MzcsIDEyNzUzNiwgNjUyNDEsIDUzMzYsIAotICAgIDk4MzI1MSwgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgOTgzMjQ5LCAxMjcxNjMsIDY4MTkzLCAzNDcsIAorICAgIDk4MzI1OSwgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgOTgzMjU3LCAxMjcxNjMsIDY4MTkzLCAzNDcsIAogICAgIDAsIDAsIDc4Nzc1LCA2NDY3NSwgNDE1ODIsIDc4Nzc0LCA3ODc0NCwgNjU1NzksIDEyOTgwLCA3ODc2OSwgMTIxNDMsIAogICAgIDY5NjU3LCA3ODUxMiwgMCwgNDM0NDEsIDQxODA0LCA3ODUyMywgMCwgNzg1MjUsIDAsIDEyODg1OSwgNDE1ODQsIDEwNjgxLCAKLSAgICAwLCA5ODM2ODYsIDczOTM4LCAwLCAxMjgwMjIsIDQ4MDAsIDY2NjYxLCAwLCA2NjMwNiwgNjQ3MTUsIDc4NTM0LCA5NTE4LCAKLSAgICA2NjA5LCAxMDQzNCwgMCwgMTEzMTksIDEwOTcsIDAsIDkxNzg1MCwgNDE3MzAsIDk4MzIxMiwgMCwgNzM4NDcsIDc4NzYxLCAKLSAgICA2NTE3MiwgNDE3MjgsIDQxNzIxLCAwLCAwLCAwLCA0MTIwMywgOTE3NjEyLCAxMzExMCwgNDE3MjYsIDk4Mzg0NiwgMCwgCisgICAgMCwgOTgzNjk1LCA3MzkzOCwgMCwgMTI4MDIyLCA0ODAwLCA2NjY2MSwgMCwgNjYzMDYsIDY0NzE1LCA3ODUzNCwgOTUxOCwgCisgICAgNjYwOSwgMTA0MzQsIDAsIDExMzE5LCAxMDk3LCAwLCA5MTc4NTAsIDQxNzMwLCA5ODMyMTQsIDAsIDczODQ3LCA3ODc2MSwgCisgICAgNjUxNzIsIDQxNzI4LCA0MTcyMSwgMCwgMCwgMCwgNDEyMDMsIDkxNzYxMiwgMTMxMTAsIDQxNzI2LCA5ODM4NTUsIDAsIAogICAgIDEwMDAsIDY5NjUxLCAwLCA0MTE0MCwgMTIwOSwgNzM5NzgsIDAsIDczNzUwLCAxMDczLCA2MzIxLCA3Nzg3OCwgNDExMzgsIAogICAgIDAsIDY4MjEzLCAwLCAxMjE2NywgMTExNSwgNDE2MDUsIDk3OTQsIDEyNzA2MiwgNjc2NzEsIDU1MjQ4LCAxMjIzNywgCiAgICAgNzg3ODcsIDY2MzE0LCA2NTg3LCA5MjkwLCA3ODc4MiwgNzg3ODMsIDkyMzEsIDc4NzgxLCAyOTU5LCA3OTI2LCAwLCAwLCAwLCAKLSAgICA2NDM5OCwgMCwgMTE5OTcwLCAxMjMxMSwgOTgzNzE4LCA3ODc5NiwgNzg3OTgsIDc4Nzk0LCA3ODc5NSwgNjg0MzQsIAorICAgIDY0Mzk4LCAwLCAxMTk5NzAsIDEyMzExLCA5ODM3MjcsIDc4Nzk2LCA3ODc5OCwgNzg3OTQsIDc4Nzk1LCA2ODQzNCwgCiAgICAgNzg3OTMsIDY2NjcwLCAwLCAwLCAxMjI5MCwgMTIwMTY5LCAwLCAxMTk4NzMsIDQyMTQyLCA5OTY4LCA4MjA1LCAwLCA1MTMxLCAKLSAgICAwLCA5NjI3LCA3ODUzNiwgNzg1NDIsIDc4NTM1LCA5ODMyMTAsIDE5NDQsIDEyNDgsIDEwMTQ4LCAxMjc3NTUsIDExOTk5MCwgCisgICAgMCwgOTYyNywgNzg1MzYsIDc4NTQyLCA3ODUzNSwgOTgzMjEyLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMTI3NzU1LCAxMTk5OTAsIAogICAgIDExOTk5MSwgMTI3MDEsIDc4Mzc2LCAxMTMwOCwgMTE5OTk1LCAwLCAxMTk5OTcsIDExOTk5OCwgNjUzMDUsIDY1MTAwLCAKICAgICA0MDMxLCA0Mjc5NCwgMTIwMDAzLCA3MDc1LCA4MTU0LCAxMTk5ODUsIDEyMDAwNywgNDE4MTcsIDczOTM0LCA0MjI3NSwgCiAgICAgMTIwMDExLCAxMjAwMTIsIDc4NTI2LCAxMjAwMTQsIDEyMDAxNSwgNjA0MSwgMCwgNDE4OTksIDAsIDgwMDIsIDAsIDQzNjQsIAogICAgIDAsIDAsIDY0MzMyLCAwLCA3ODEzLCA5MDY0LCAxMTk5ODYsIDEwMTI0LCA3NTI2LCA4NjAxLCA3MjgxLCA3ODQ1NSwgNzI3OSwgCi0gICAgMTIwNDEsIDE0MTgsIDEwODg1LCAxMjY3MywgMCwgMCwgOTY2MCwgOTgzMjcyLCAxMzAxMiwgNDU3MSwgMCwgMCwgMTIwMTY0LCAKKyAgICAxMjA0MSwgMTQxOCwgMTA4ODUsIDEyNjczLCAwLCAwLCA5NjYwLCA5ODMyODAsIDEzMDEyLCA0NTcxLCAwLCAwLCAxMjAxNjQsIAogICAgIDEyMDc4LCAyOTcwLCAwLCAxMDkzMywgMCwgNzc4NzAsIDAsIDEyNzAxNSwgMCwgNDE1OTksIDAsIDEyODgzMSwgMCwgCiAgICAgMTI5NTAsIDkyMTYwLCAzNDg2LCAwLCA3ODMxMSwgNDIzOSwgMCwgMTI3Nzk5LCA2NjUxMSwgMCwgMjYzNywgNjQ2MjksIAotICAgIDg0NjAsIDEyNzA1MywgODQ3NiwgOTgzOTY2LCAwLCAwLCAwLCA2NTY3MywgMTAxOSwgNzg0OTUsIDQxNDgsIDAsIDEyMjg5LCAKLSAgICAwLCA0MzE2LCAwLCAxMzExOSwgODQ4OCwgNTQxMiwgNjYyNDMsIDk5MzUsIDAsIDczODY0LCA5ODMyMDEsIDQxNzM0LCAKKyAgICA4NDYwLCAxMjcwNTMsIDg0NzYsIDk4Mzk3NSwgMCwgMCwgMCwgNjU2NzMsIDEwMTksIDc4NDk1LCA0MTQ4LCAwLCAxMjI4OSwgCisgICAgMCwgNDMxNiwgMCwgMTMxMTksIDg0ODgsIDU0MTIsIDY2MjQzLCA5OTM1LCAwLCA3Mzg2NCwgOTgzMjAzLCA0MTczNCwgCiAgICAgODIwNiwgNzQwODEsIDkxNjMsIDMyODYsIDkwNzIsIDU4NjcsIDEzMzAyLCA3NjIyLCA3MTIwLCA0MTczNiwgOTI1NDYsIAogICAgIDQxNzMxLCAwLCA3NDAwLCA1NDE2LCA2ODY2MywgMTE4OTI0LCAxMDgxNywgMCwgNDE1MzksIDEyNzI4NCwgMCwgNzM5NjMsIAogICAgIDQxODU1LCA0MTg2NywgNjU1NjQsIDExMjc3LCA2NTg5MiwgMTE1MzYsIDEwNjIwLCA5MjI3MiwgNzExNSwgNjYwMzAsIAogICAgIDczOTMyLCA1NDk4LCA3Mzk0MiwgNDE1MzYsIDAsIDY4MjA0LCA5MjU4NywgMzQ1OSwgODk5NywgMCwgMCwgMCwgMCwgCi0gICAgOTI1MTIsIDAsIDY2Mzc3LCA2OTc4MSwgMCwgOTgzNjkwLCA3ODUxMSwgMzE2MSwgMjk1LCAxMjAyMDcsIDAsIDkyMjIzLCAKKyAgICA5MjUxMiwgMCwgNjYzNzcsIDY5NzgxLCAwLCA5ODM2OTksIDc4NTExLCAzMTYxLCAyOTUsIDEyMDIwNywgMCwgOTIyMjMsIAogICAgIDEyNzg1NiwgNzg3NDIsIDkwMTYsIDQzNDU0LCA2MzkwMywgNjM5MDIsIDQzNjQxLCAwLCAzOTcxLCAwLCA3MDA2MywgMjk1MiwgCiAgICAgNzg3NjUsIDExMDM4LCAxMDkwMSwgNjM5MDAsIDYzODk5LCA2Mzg5OCwgOTQwNDMsIDY2NywgMTIzMzIsIDYzODg3LCA2MDg2LCAKLSAgICA0MTcyMiwgMCwgNTE3MiwgMCwgMCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIDg1NTUsIAotICAgIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCisgICAgNDE3MjIsIDAsIDUxNzIsIDAsIDk4MzI3OCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIAorICAgIDg1NTUsIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCiAgICAgNjM4NzUsIDYzODc0LCAxMTQ2MCwgNzQzMiwgMTkxMywgNDE5MTMsIDYzODUyLCAxMjY2MzYsIDAsIDQyMzQ4LCA3Mzg5MiwgCiAgICAgNjc1MiwgNDQ2LCA0MTkxMSwgMTI3OTA2LCA2Mzg1MSwgNjM4NTAsIDQxOTEwLCAwLCA2Mzg0NiwgMjk3MiwgMTI5MzIsIAogICAgIDcyNjIsIDAsIDYzODQ5LCA2Mzg0OCwgNjM4NDcsIDEyODA3MCwgNjU3MCwgODMwMiwgNzI1OSwgNjM4NDIsIDQxNzgsIApAQCAtMTg0ODgsOCArMTg1MDcsOCBAQAogICAgIDc1ODMsIDc2NzksIDI5MDMsIDAsIDMwMDEsIDExNTgsIDg3NDUsIDQzNzQ2LCA3Mzc0OCwgNjM4NjYsIDc4NjI2LCAxOTE1LCAKICAgICA0ODQ2LCAwLCA2NjM3MSwgMTE4OTg0LCA0MjEwNSwgMjk5MCwgMTIwMTI4LCA4MDUsIDY5MjM4LCA2NDQzOCwgMTIwNzAsIAogICAgIDg3NjAsIDExMTcsIDExODk4NywgMTIyMTIsIDEyMDEyMywgNjUxNzQsIDQyMzU3LCA2MzgzNSwgNjM4MzQsIDAsIDc4MjQwLCAKLSAgICAxMjIyNSwgNjM4MzgsIDYzODM3LCA5ODM4NDQsIDk4Mzc5NSwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCAKLSAgICA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgOTgzODk1LCA1MjI3LCA5MDQ3LCA2MzgyMiwgMTI3MTYyLCA2MDkxLCAwLCAKKyAgICAxMjIyNSwgNjM4MzgsIDYzODM3LCA5ODM4NTMsIDk4MzgwNCwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCAKKyAgICA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgOTgzOTA0LCA1MjI3LCA5MDQ3LCA2MzgyMiwgMTI3MTYyLCA2MDkxLCAwLCAKICAgICAxMDY5MSwgNTYwLCA1NjQzLCA4MjI2LCAxMTk1NzgsIDYzODEyLCA2MzgxMSwgNjM4MTAsIDYzODA5LCAyMjg5LCA2MzgxNSwgCiAgICAgNjM4MTQsIDYzODEzLCA2MDQ3LCAxNTk3LCAxMjAxNDMsIDc4MCwgMjA2LCA3NzkyNSwgNDkzNiwgNjUxNDcsIDgxNjgsIAogICAgIDYzOTMwLCAyMDc2LCAxMDkzLCA5ODgyLCA2MzkzNCwgMjA4MiwgNjM5MzIsIDEyODE1MCwgNjM5MjksIDM1NDYsIDE2MDUsIApAQCAtMTg1MDcsMjYyICsxODUyNiwyNjIgQEAKICAgICA0MzY1OSwgMTI5NTEsIDEyMDYzOCwgOTkwNiwgMjA1NCwgMjMzNCwgNzg1MTUsIDYzOTE2LCA1NDgzLCA2MzkxNCwgNjk3MzcsIAogICAgIDYzOTExLCA1NDg0LCA2MzkwOSwgNjM5MDgsIDI1MzksIDAsIDQzOTgwLCA1NDg1LCAwLCA0MjY5NywgOTA2MSwgNTUzNCwgCiAgICAgMTA2NzIsIDQ1MDIsIDAsIDI1MywgMCwgNjgyMDgsIDAsIDkyMDMsIDc0MjMxLCAwLCAxMTUzMCwgOTI1NDIsIDY4NjY4LCAwLCAKLSAgICAxMTg5MDcsIDAsIDEwNDc0LCA0MzQyNiwgMTMyNTcsIDQyMzU0LCAxMjgwOTksIDk4MzY4OSwgNzAwNDQsIDE5NTA2NSwgMCwgCi0gICAgODQxMywgOTgzODA3LCAwLCA1NjkzLCA3MjcyLCAwLCAxMzIwOSwgNjQ0NzAsIDY1ODMxLCA3NDM1MCwgMTk1MDYzLCAwLCAwLCAKLSAgICAwLCAxMjY2MzksIDAsIDAsIDk0MDc4LCAxMjgxMzMsIDEyNzc2NywgNjY2MDgsIDMxMTEsIDQxODYzLCA4ODA0LCA0MjkxMywgCi0gICAgOTIxODcsIDcyNzAsIDAsIDY2NjA2LCA2NjI4LCAxMDc2LCA3NDMzLCAxNDM2LCA3Mzg0NCwgNTUyMjYsIDEyODM1MywgCi0gICAgNjM5ODIsIDczOTMsIDEyODA3LCA0MzQxMywgNjM5MDYsIDE1OTgsIDYzOTA0LCAwLCAwLCA0MTcyOSwgNDQyMywgMTMwNywgCi0gICAgMCwgMTA1MTUsIDQxNTg5LCAxMjg2OTgsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIDAsIDEyMDYwNiwgNzg3NTQsIDU0MTMsIAotICAgIDc2MTksIDMyNTUsIDM0OTMsIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDQxNzQzLCA3MzkzNywgNjgwMSwgOTgzNjI0LCA0NTE4LCAKLSAgICAxMDk5MCwgNjUwNzMsIDUxNjcsIDQ0ODEsIDM3NzEsIDEyMDE1OCwgMjcxMCwgMCwgNjkyNDMsIDQxNzI0LCAwLCA0MzA3MywgCi0gICAgNDE2OTAsIDEyNDc5LCA5ODM2MjYsIDAsIDAsIDk4MzgwOSwgNzAwNDYsIDE2MjgsIDEyNzE0OSwgOTgzNDc5LCA5ODM3MjIsIAotICAgIDY1MjYyLCA2MzMzLCAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCA5NDA1NiwgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIDEzMDA0LCAKLSAgICAwLCA0NDU3LCAwLCAwLCAwLCAwLCA1Njg0LCA4Njc4LCAxMDkxNCwgMCwgNTY4OSwgNjU4MDcsIDAsIDY4NDY0LCAxMjYzMywgCi0gICAgMTI4NzAsIDY5NzA1LCA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIDU2ODYsIDAsIDc0MjUxLCAwLCAxMjA2NDcsIAotICAgIDAsIDUwLCAxMDU1OCwgOTg3MSwgNDI2MTIsIDQzNjU1LCAwLCAwLCAwLCA2NjQ2OCwgMCwgMTMyNTksIDQ0NDgsIDAsIAotICAgIDk4MzgzNiwgMCwgNzAwNDMsIDY3ODUzLCAwLCAxMDY0MCwgMTE1MzksIDExNTEsIDAsIDkxNzYwNywgMTI3NTQ0LCAKLSAgICAxMjcwNzksIDE5NTA1MCwgMTI3ODUyLCAwLCAwLCAwLCAxMjUwMSwgNjQ2MDQsIDAsIDExNTI3LCAxMTg4NzAsIDg4MTIsIDAsIAotICAgIDExNTM4LCA4NjczLCAxMjY1MCwgMTEwMjAsIDAsIDY2NDY3LCAyMTA1LCA4MDg3LCA3ODE2MywgNjk2MzIsIDk4OTQsIDAsIAotICAgIDAsIDAsIDQ2MzYsIDU1MjYyLCA3ODUxMywgNDUxNSwgMjM4MiwgMCwgMTI3MDU1LCAwLCAxMjA0OTUsIDAsIDEyODI4NCwgCi0gICAgMTIyNzcsIDE5NDYyNywgMTE5OTUsIDkyNTUzLCAwLCAxMjE1OCwgMCwgODc0MSwgMTAxOTcsIDAsIDkyNDI2LCAwLCA2NTMxLCAKLSAgICAwLCAxMjc4NDYsIDQ3MywgNDM0MTUsIDAsIDk4MzY0MSwgMTg3MywgMTA4NywgMCwgMCwgMCwgNzg1MjcsIDY2NDM5LCAKLSAgICA0MzIxOCwgOTgzMTIzLCAxOTQ3MTYsIDcyMzcsIDEyNTA0LCA3NDI4MiwgMCwgOTgzNTcxLCAwLCA5NDg5LCAwLCAwLCAKLSAgICA0Mzg0LCA3NDIyMCwgNjM4NDUsIDIwNTgsIDEyODg2MywgMTMyOTUsIDQzMTkxLCAxMjgwMzAsIDAsIDExNTQsIDM4NTcsIAotICAgIDEyMDUsIDAsIDAsIDEzMTAwLCAxMjk1OCwgMTIwNzA2LCA3NDE2OCwgMCwgMCwgNDQyMSwgMTA1OTIsIDAsIDQ5NSwgCi0gICAgMTE5MDA3LCA0MTcxMiwgNzk4MywgMCwgOTM5OTcsIDAsIDYzNDcsIDEyMDE2NSwgNzY1NCwgNDE3MTAsIDQxOTYsIDAsIAotICAgIDQzNywgNDE3MDksIDczNzcyLCAwLCAwLCA5NDY1LCAxMzI5MCwgMTE5MTgwLCA0OTk3LCA2NDMwNiwgMCwgMCwgNDk5OSwgCi0gICAgMTk0NjQyLCAwLCAxMjY1ODIsIDQ3MTEsIDEyMDc2OSwgMCwgMjczOSwgMCwgODA0NCwgNzQ4MzQsIDE5NDY0MywgNDE3ODksIAotICAgIDEyODE0MiwgMTA4MDksIDAsIDAsIDAsIDE3NzksIDY2MDAsIDY2MDEsIDQxNTQzLCA1MzI1LCA2NDIsIDY0MTg3LCAxMzA1OCwgCi0gICAgMTIwNDQ5LCAxMjg3NSwgMCwgOTIxODYsIDEzMjI5LCAwLCAxMDU3NSwgNDMzOTksIDAsIDAsIDQxNzkxLCAxMTA0LCAwLCAwLCAKLSAgICAxMDY1NSwgMCwgMCwgMCwgMCwgMTA4MiwgMTk1MDQ5LCA4NDI4LCA2NTY5LCAwLCAwLCAwLCA2OTg0OSwgNjc4MywgMCwgCi0gICAgMTI5OTMsIDgwNDksIDQxNTQ4LCA0NDAyMSwgNjQ1OCwgOTgzNzk4LCAxMjg4ODIsIDQ3NjEsIDYzODI4LCA0NzY2LCAKLSAgICA2NDYyMywgMTI3MywgNDM0MDcsIDAsIDExODg3NiwgMTk1MDQ1LCA2OTEyLCAxMzEzLCA2MzIyLCAxMDQ4MywgOTgzNjAzLCAKLSAgICA0MTU0NSwgMCwgOTI0NDksIDAsIDAsIDAsIDAsIDc4NjI0LCAzNDg0LCA3NDMzNywgMCwgMCwgODUwMywgNTEyMiwgNDE1MjcsIAotICAgIDAsIDY2MzIwLCA5ODM4MDIsIDAsIDAsIDAsIDQxNTM3LCA2OTY4MywgODMwMywgODI4MiwgMTE4MTcsIDczODU3LCAxMDAwMywgCi0gICAgNzM4NTksIDY1OTA0LCA3MzYzLCAxNjg2LCAwLCA3ODQwNiwgMTE0NjcsIDM2NjQsIDY1OTIxLCA2NDI5OSwgMTk0NjY0LCAwLCAKLSAgICAwLCA0MzI0LCAxMjYsIDQyMjQ2LCAxMTkxNTIsIDAsIDc0Mzc4LCA2NTkyNiwgNzc0NCwgMTk0NjM2LCA3NDI3NywgNzQzMDIsIAotICAgIDc4MDUyLCA0MzgxNywgNjk2NiwgNDM4MjIsIDgxMzYsIDAsIDY1NjAwLCAxNjMzLCAwLCAwLCA0NzYyLCAxMTAzLCAwLCAwLCAKLSAgICA0NzY1LCA5ODM0ODQsIDEzMDc4LCAwLCA0NzYwLCA2MzgyNywgMjA1MCwgMTA4NzEsIDQzMTk5LCAxMTAyLCAwLCA0MjIzNiwgCi0gICAgMTI4ODY3LCAxOTQ2NjcsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCA0MjU5MSwgODYyNywgMTIyNzksIDExMTEsIDAsIDkyMTYxLCAKLSAgICA0NzA3LCA2ODIwNiwgMTAxNDMsIDc4ODMsIDEyNzA4MSwgNzg4MCwgNDUyMiwgODY0NSwgNTcwNCwgMTMwMTAsIDAsIDgzMDQsIAotICAgIDkxNzU2MSwgMCwgMTE5NTc1LCAyMjkzLCAwLCA2NjY1NCwgMCwgOTI2NzYsIDAsIDEzMDA4LCAwLCA0Mzg1LCAwLCAxMzAxMSwgCi0gICAgMCwgOTI1NjksIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgNDE3OTMsIDY1NzYzLCA3NDIyMSwgMTIwMTQxLCAKLSAgICA0MTc5MiwgNDI3NzAsIDk0MDU0LCA2NTc2MiwgMTE4ODI5LCA0MzgyMSwgNTcwOSwgMCwgOTQwNTMsIDQzODE2LCAwLCAwLCAKLSAgICAxMDc5LCAzODY3LCA1NzA4LCAwLCAwLCA0Mzc5NywgNTcwNiwgNjQ3NjgsIDU3MDUsIDg3OTEsIDQwMDUsIDAsIDEwMjM3LCAKLSAgICAxMDk5MSwgMTI4ODE2LCA0MzQ1OSwgOTE3MywgOTE3NTgxLCA5MTc1ODAsIDEzMTcwLCAxMjU0MCwgOTE3NTc3LCA0MjYwNSwgCi0gICAgMTIwNzY1LCAxMjY2MTcsIDY4NjQ3LCA5MTc1NzIsIDEwMDU4LCAwLCA3NDg2NywgMTk0NjU0LCAxMjcwNzgsIDMzMzksIAotICAgIDExNDQ4LCAxMTA2LCA5MTc1OTEsIDkxNzU5MCwgOTE3NTkzLCAzMzQwLCA5MTc1ODcsIDkxNzU4NiwgOTE3NTg5LCAKLSAgICA5MTc1ODgsIDEyMDU0MSwgMTA2MDUsIDEzMDksIDYzOTY2LCAxMjA3NDMsIDE3NTQsIDkyMjI2LCAxMzI0NiwgODY0LCAwLCAKLSAgICAxMTg5MjYsIDg5NzIsIDAsIDc4NDksIDEyMDA5MiwgOTI1MzMsIDEzMjQwLCAxOTUwNjgsIDUxOTIsIDQzMzgsIDY3OTgyLCAKLSAgICAxMDk0OCwgOTE3NjAxLCAxMzE5OSwgOTI1NzUsIDEyMzYsIDEzMjA4LCAxMzI2MSwgMTMxODksIDEzMTg4LCA5Mzk5MywgMCwgCi0gICAgNzQ0MCwgMCwgMTIwMTUzLCA5NTUzLCAxNTkwLCA2Mzc3NywgNjM3NzYsIDEzMTc4LCA2Mzc4MiwgNjM3ODEsIDYzNzgwLCAKLSAgICA2Mzc3OSwgMTU4MywgMCwgMTMyNjAsIDQ1NTAsIDAsIDY0MjA1LCAwLCAwLCA0MTUyMiwgOTgzOTA2LCA5MjE2OCwgCi0gICAgOTgzNzYzLCA5MTc4NTgsIDExMzU0LCA5NDA3MSwgMCwgNDI3OTUsIDAsIDExOTE5NSwgMTEzOTQsIDE5NDY0NiwgMTMyMzYsIAotICAgIDEzMjcyLCAxMzE5NCwgMTMzNCwgNjk5MjYsIDQ0NzksIDExNzgsIDY1NTg2LCAxMjA2NjMsIDY2NjgxLCAxMTkxOTMsIAotICAgIDQ2MDEsIDAsIDAsIDk4Mzc1NiwgMCwgMCwgMTk0NjU4LCAwLCA2ODA5LCA2Mzc4NiwgNjAzMSwgMCwgNjM3OTEsIDYzNzkwLCAKLSAgICAxMTQ1LCA2Mzc4OCwgNzkxMCwgNjM3ODUsIDQzMTUzLCA3NTQsIDEwMTkyLCAxMzEwNSwgODE4MywgMTIwNzQxLCAyMDM3LCAKLSAgICAwLCAwLCAxMDc0NywgMTI1LCAwLCA2NDg5MCwgMCwgOTgzMTMxLCAwLCA0MTcxOSwgNjM3NTgsIDM1MjMsIDEwNzQsIAotICAgIDEzMjU4LCA5NTM2LCA3NDA3NywgMCwgNDQyNywgNzQyNDIsIDYzNzU3LCA0MzE0NSwgMTIyMTcsIDYzNzU0LCA0MTUzMiwgCi0gICAgMTM0OSwgNjM3NTAsIDYzNzQ5LCAwLCAwLCAwLCA2Mzc1MywgNjM4MDIsIDQxMDg0LCAxMjA2MjIsIDY4MTMzLCA0MTkzMCwgCi0gICAgNjM4MDUsIDYzODA0LCA0MzYzMiwgNjM4MDEsIDQxMDgyLCA4MTQwLCA2Mzc5OCwgNjI2MCwgMCwgMCwgOTQwNzQsIDYzNzkzLCAKLSAgICAxMTk4OCwgMzg5OCwgMTI4MjQxLCAxMDIwMSwgMTIyMzgsIDYzNzk1LCA0MjE5NCwgMTAzNjcsIDEyNTIxLCAxMDQzMSwgCi0gICAgNDIxMTQsIDQxOTMyLCAxMDY4LCAwLCAxMjUyMywgMTI5NDUsIDk4MzMyMSwgNDIyMDMsIDc5NTAsIDEwODA0LCA2Mzc3MSwgCi0gICAgNDI3ODcsIDQzODYsIDEyMjI0LCA2OTczLCAyNzkzLCAxMjQ3NSwgMCwgMCwgNjM3NjksIDk1MzAsIDk4MzExOSwgMTIyMzIsIAotICAgIDEzMTM1LCA4NTk2LCA1NjgxLCA2Mzc2MiwgNDU5NSwgNjM3NjAsIDc5MiwgMCwgNjQ4MDMsIDAsIDg3NDIsIDAsIDExMDUzLCAKLSAgICAxMjg3OTYsIDYzNzQ0LCAxMjgxMDcsIDAsIDc1ODgsIDYzNzQ4LCAxNjkzLCA2Mzc0NiwgNDMyMDQsIDUwNTUsIDY4NDI2LCAKLSAgICA5MTc4NTMsIDEwOTAsIDEyMDY3OSwgMTI4MzU2LCAxMTY2NSwgNzQxMzMsIDQ1NTgsIDY1Njg1LCA5NTIzLCAwLCAwLCAKLSAgICA3ODY4MSwgMTE1MTMsIDAsIDYxNTcsIDYzNzc1LCA2Mzc3NCwgNjM3NzMsIDEzMTkxLCAxMjE3MCwgMzUwMCwgMzEzOSwgMCwgCi0gICAgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCA3ODI3MSwgMTMwMDYsIDY0NDMzLCAwLCAwLCA5NDEsIDAsIDAsIDAsIDY1NTQxLCAKLSAgICAxMTA2MywgMCwgODIyOCwgMCwgNDIwNjUsIDAsIDAsIDk0MDM5LCAwLCA5MjQ1NSwgNzM4NiwgMCwgNjQ0NDQsIDAsIAotICAgIDExOTg2MywgNDM2MDMsIDk0MDc1LCA2NTM5NywgMjg4LCAwLCAwLCAwLCAxMDAyNSwgNjk5MTUsIDI5MTgsIDAsIDY1MzAwLCAKLSAgICAxMTk4NzEsIDk4ODMsIDY0NzI2LCAyNzkwLCA2NTM5NSwgMzc5MywgMCwgMTI3ODI5LCA2NTM5MywgMCwgNzQxMzgsIDAsIDAsIAotICAgIDAsIDc0MTM5LCA5MjcxMiwgNjUzOTQsIDExNTQ4LCA1MjcwLCAwLCA2NTM5NiwgMCwgNjU4MTMsIDEzMjU2LCAxMjgyLCAKLSAgICAxMjA3NzEsIDAsIDAsIDEwODg4LCA5ODM2MDQsIDY1MjQyLCAwLCAzMzMwLCAwLCAwLCA5ODM5NjUsIDAsIDAsIDc0MjU5LCAKLSAgICAzMzA0LCA0Mjc1MywgMCwgMCwgMCwgMTYyNywgMCwgMCwgMCwgNTM3MSwgMTMxMTYsIDAsIDE4MjYsIDExODc5NCwgMCwgCi0gICAgNDMwOTQsIDcwMDIzLCA0MzY1MCwgOTQwMzcsIDAsIDkwMzUsIDAsIDAsIDEyODAwNSwgMCwgOTIyMDcsIDY4MTI1LCAwLCAKLSAgICAxNjQsIDAsIDk0MDY3LCA5NDAwMCwgNjk1OCwgMCwgNDMxMTYsIDAsIDcwMDE5LCAxMzI0NSwgMCwgMCwgMTI3Mzc2LCAwLCAKLSAgICA3MDAzMSwgMTI3NzU2LCAxMjY2NiwgMTMxNzUsIDEzMjA3LCAxMjA0MTQsIDY2MDE0LCAxMjA0MjgsIDc0NDcsIDU5MjksIDAsIAotICAgIDY1NTA5LCAwLCA3NDQ5LCAxMTMwNiwgMCwgNzM5MjAsIDMxODAsIDAsIDYzODA4LCA5MDU0LCA5NzEsIDEzMDYyLCAwLCAwLCAKLSAgICA2NTE5NSwgMTAxNjQsIDkyMjUyLCA3NDQyOCwgMCwgNzgxNDYsIDkyNjExLCAwLCAwLCAwLCAxMDA0NSwgMTI4ODIsIAotICAgIDEzMjc1LCAxMjgxNjEsIDExMDU3LCAwLCAxMzI3NiwgMCwgNDE1MjUsIDc4MTUwLCA3MjcxLCAxMTQ0NCwgMCwgMCwgMCwgCi0gICAgMTIyMjksIDQxNTIzLCAwLCA0MzQxMSwgNzM3NTEsIDAsIDY0ODEzLCAwLCAwLCAxMDQ3NiwgMzg1OCwgMCwgMzkzMiwgCi0gICAgNjQ5NTgsIDAsIDAsIDczOTg5LCA2ODE5MiwgMCwgNjk4NDcsIDM2OSwgMCwgNDE3ODQsIDAsIDY0MTYzLCAwLCAwLCAwLCAKLSAgICA2NTQ3NCwgNDc5NiwgMTIyOTIsIDEyNjU5NSwgNjU0NzksIDAsIDQxNzgxLCAxMDQ4NiwgNDE0ODAsIDQzMDAyLCA5ODk5LCAKLSAgICAwLCAwLCA0MDQsIDEyODIxLCAzNzQxLCAwLCA1Nzg4LCA4MDkyLCA2ODIxMiwgNDEyMjIsIDE4MzEsIDY2MDIwLCAzOTgyLCAKLSAgICAwLCA0Mzg4LCAwLCA3NDYsIDEyMDc4NCwgMCwgMCwgMTIwMTgsIDY1Mjk0LCAwLCAwLCAwLCAwLCA0NDIyLCA0NzA4LCAKLSAgICAzNzk5LCA3NDI5MiwgMTE5MzU3LCAwLCA3NDQzMCwgMCwgMTE3MDAsIDQzNzQsIDAsIDEyODE3OSwgMTM2NCwgMCwgODAzOCwgCi0gICAgMCwgOTE3NTk3LCAxMjg2OCwgNjk4MTQsIDAsIDY3MzUsIDczOTc5LCAxMzE3NCwgNzM5NjgsIDEzMjI1LCAwLCA2OTgwOCwgCi0gICAgNjU4MzUsIDAsIDIzNjUsIDc4NDEsIDAsIDQyODU1LCAxMTg4NTYsIDQyODY2LCAwLCAwLCAwLCA2NjQzOCwgNDE3ODUsIAotICAgIDEyNjE3LCA2NDE3MiwgMTMxNzMsIDQzNzIsIDExOTM1NCwgMCwgOTgzNTY4LCAwLCAwLCA5MjQwMiwgMTI4MDYyLCAxMjk2NSwgCi0gICAgMzg0LCA2NDUxMiwgMTA0MDQsIDEwMzQwLCAxMTkzNTIsIDE1NTYsIDUyNzQsIDEzMjEwLCAxMjAxMjUsIDEwMDE3LCA5NzMzLCAKLSAgICA0MTc4NywgOTgzMjM3LCAxMjY5OTQsIDQxMzczLCA3ODAzOSwgMTIzMDMsIDAsIDEzMjMyLCAxMzIzMywgMzQ5LCA0ODYzLCAKLSAgICA0MTM3MSwgMTE2NTYsIDAsIDEyMDcwMywgMTE5ODgzLCAxMjg2MSwgNDM5OCwgODU0MywgNjU2MTgsIDEyODAxOCwgMTA5NiwgCi0gICAgMCwgMCwgNDI2ODgsIDEyNDQxLCAxMjM1NSwgMTE5MzQ4LCAxMTkzNDcsIDQzMTgsIDEwNDUyLCAwLCA4MDMyLCAxMzI0MywgCi0gICAgMTMyMzcsIDEyNzE5LCAxMjY2NDYsIDExOTEwMSwgMCwgNjQ4ODQsIDExOTg3MiwgMTE5MzQ1LCA4NTk3LCAwLCAwLCA5ODY0LCAKLSAgICAwLCAxMjA3ODUsIDExOTg3NCwgOTQxMDcsIDEzMTk1LCA0MTQ1MiwgNjQ5NjEsIDc3MjIsIDAsIDEwNDU5LCAxMTk4NzgsIDAsIAotICAgIDExOTg3OSwgNjY1OTAsIDEyODEyMywgNDE1MzMsIDY2MzM3LCAwLCA5MjE4NCwgMCwgNDk2NSwgNDM0NDUsIDkxNzUzNiwgCi0gICAgNzM4NDksIDAsIDQzNjM4LCA3ODUzNywgMTI4Mjg3LCA2MjYxLCAxMTkzNDIsIDQzMTQ3LCA2NjU3MCwgMTk1NywgMTA0MjAsIAotICAgIDk4MiwgMjc1NiwgMTMyOTIsIDEzMjA2LCAxMjg4MjgsIDAsIDI5MjUsIDczODA5LCAxMzA1NiwgMTI3NTU5LCAxMzIxMiwgCi0gICAgNDMyMzgsIDAsIDEzMTkwLCAxMzE4NywgOTI1NDEsIDEzMTk4LCAxMTg3OTMsIDAsIDUyNDIsIDExOTE3OSwgNjQ0NzYsIAotICAgIDE2OTQsIDgyMTYsIDcxMzY5LCA2NzcwLCA0MzMzMSwgMCwgNjU2MjAsIDk4MzcxOSwgNDM1NDQsIDEyNjQ2NiwgMCwgCi0gICAgNDE0NDQsIDY1NjIxLCA2OTk1NSwgOTE5NywgNTI0NiwgMTE5MTA2LCAxMzE4NSwgOTcwOSwgMTIwMzIzLCAxMjAzMjIsIAotICAgIDEyMzE0LCA2NTYxNiwgNTIzOCwgMTE5MzMzLCAwLCAxMTkzMzcsIDUyMzYsIDQwOTc5LCAwLCA3NDIwMSwgODI4NiwgCi0gICAgMTI4NTM3LCAzOTM2LCAxMTkzMzEsIDExNjk5LCA0MTM0NywgMTI3MjQ5LCAxMzIzNSwgODg0MiwgNDEyNDgsIDAsIDQzNzksIAotICAgIDEzMjM5LCAxMjY5MiwgNzk2OSwgMTI3MjY2LCA3MjE5LCAxMjcyNTAsIDEyODI1MSwgMTIwNTA5LCAwLCA2NjIyNCwgNzM0LCAKLSAgICAyOTc5LCAxMjAzMDMsIDY1NjE5LCA5ODcyLCA5NTcsIDY0OTIxLCAxODQ2LCA2NjYzMSwgNDE0NzcsIDExOTI1NiwgCi0gICAgMTIwMzEwLCA3NDUxMSwgNDE3NzAsIDE2NzAsIDY0NDIsIDEyMDMxNywgNDI0NDYsIDUzNzksIDEyMDMxOCwgNDExNjMsIAotICAgIDc0ODMyLCAxMjAzMTUsIDEyMDMxNCwgMTE1MDYsIDAsIDQyODQxLCAxMzI2NywgMCwgMCwgNDE3NzUsIDAsIDcxMzAsIAotICAgIDQxNzczLCAwLCAxMDY2MywgMCwgMCwgMCwgNjE1MSwgMTIxMTAsIDQyNjczLCA2NTU3MiwgNjUyOTMsIDY1MjUwLCAxMzI2NSwgCi0gICAgMTMyNjQsIDY0NTE4LCAwLCA2MTAwLCAwLCA5MjY0NywgNTgwOCwgNjU5MjIsIDAsIDEyOTY3LCA2NjA0MSwgNTYxMiwgCi0gICAgNDU4MywgMCwgMCwgNjgwOTcsIDY0NTc1LCAxMjY2MzcsIDExOTY1LCAwLCA2ODM1OCwgMCwgNjk3ODksIDAsIDkyMjYwLCAKLSAgICA2ODEwMiwgOTY5OCwgNzgxNCwgNzQ0NzYsIDExOTY1MSwgMTI4NTE0LCAwLCA0MTkyMSwgMTE4ODU4LCA5NzU2LCA2OTg1LCAKLSAgICAxMTkyNTgsIDc4NDkwLCA3NDIxOSwgMCwgMCwgMTE4OTk3LCA4MDEyLCA1Njc0LCAxMjM1MywgMCwgMTIzNjEsIDU2NzcsIAotICAgIDU1ODgsIDAsIDQxOTI1LCAxMjgxMjQsIDQxOTIwLCA1NjczLCAxMjA1MzQsIDU2NzYsIDQxOTIzLCAxMjY5NCwgMTE4OTc4LCAKLSAgICA1NjcyLCAxMjk0LCAwLCA3ODA1OSwgMCwgNDI1MTEsIDE3MjcsIDEyMDcyNSwgNDI0MzYsIDAsIDAsIDAsIDc0MjIyLCAKLSAgICA4NzE4LCAzNTUwLCA3MzYsIDEwMjY4LCA0NTA1LCAxMDMxNiwgNzQwOTAsIDU4MjYsIDU1MjMyLCA1ODEzLCAwLCAxMjA3MTIsIAotICAgIDU4NDEsIDU4MzcsIDU1MjM0LCAwLCAzMTA1LCAxMjgyOSwgNTgzOCwgNTc5NiwgMCwgMTE5NTkyLCA1NzkzLCAwLCA1ODY2LCAKLSAgICA1Nzk3LCA0MTAxMSwgNTg2NSwgMTIwMDkxLCA3OTU2LCA1OTgsIDAsIDY0NjQ5LCA1ODA2LCA0MjM5OCwgMCwgOTAzNywgCi0gICAgNTY3MSwgMTIwMDQxLCAwLCAwLCAwLCAxMjg4NTUsIDAsIDg0NywgMTI4MjQyLCA5NTI5LCAwLCA2NjY1NywgNjk4MCwgCi0gICAgNzg0ODMsIDEyMDAzNSwgNzg0ODQsIDk4MzQ4MywgMCwgMTIwMDMzLCA3ODQ4NiwgMCwgMCwgMTIwMDM5LCA0MjY4MywgMCwgCi0gICAgOTgzMDU1LCA3MTE0LCAwLCAwLCA0MzE5MCwgNjU0NjMsIDE1NTQsIDAsIDQyNjExLCA0MjU2MywgMCwgNTY1MSwgMjkyOSwgCi0gICAgNjc5MiwgNDMyMDEsIDAsIDE5OTYzLCA1Njk4LCAwLCAwLCAwLCAwLCA1NjQ0LCAxMDI5MiwgNjU1NDYsIDY5NzI3LCAKLSAgICA2ODE0MSwgODM3MiwgMCwgNjUxMTYsIDAsIDEyMDAyMiwgMTAxNzUsIDEwMzg4LCA0Mjc5OSwgOTQxMDAsIDQxMDEzLCAKLSAgICAxMDU2OCwgMCwgOTgzNjE4LCAyODY5LCAwLCA0MTAxNSwgMTk0NjkyLCAyNzg1LCA0MzY2LCAwLCAxMDk1NCwgNDE4MDIsIDAsIAotICAgIDQyNjA4LCA3ODQ2OSwgOTg4NCwgNDc1OSwgMCwgMCwgMTAyNjYsIDQxMzU5LCAxMTcwLCA0MzM2NSwgNjk4MTAsIDczOTA4LCAKLSAgICAxNjA5LCA5MDIsIDAsIDYzOTM2LCAxMjg4NzUsIDExNjYxLCA4MTIyLCA1ODE4LCAwLCAwLCAzODYxLCA5NTQwLCAxMTAyOCwgCi0gICAgMjU1NCwgNTE1OCwgNTcxNCwgMjIxMywgMCwgMCwgODA3LCA0MzA3OSwgMCwgNzg0NzUsIDk3NiwgNTUxMSwgNjQ1NTMsIDAsIAotICAgIDQyMTU1LCAwLCA0MTM1NiwgNzQxMTAsIDExODgwMSwgMTI2NjE0LCAwLCA4Njc2LCA5ODMyODMsIDAsIDU1ODIsIDQ1MSwgCi0gICAgNjM5NDEsIDU3OTgsIDkzNDksIDQyMDE4LCAxMjc4NTgsIDAsIDAsIDQzNjA5LCA1OTA2LCAxMjA1NTMsIDE0NDAsIDAsIAotICAgIDEyODg1MywgMTIwMDE2LCA3NDI4MywgMTEwMDUsIDAsIDY2NjU2LCA2NjA0NCwgMCwgMTk0Njk4LCAwLCAwLCA0MzM5MywgCi0gICAgMTAwOTQsIDAsIDExNTI5LCAxMDg1NywgMTIwNjQzLCA2NjQzNiwgNjU0NiwgOTMsIDgxMDIsIDAsIDY4NDA1LCAwLCAwLCAKLSAgICA4MTcxLCAwLCAxMTkwOTcsIDEyNzA2NCwgOTE3NTQzLCAzODMsIDcxNTQsIDQxNjU2LCA5MjYzNCwgOTQwNDAsIDAsIDUxODcsIAotICAgIDcxMjk2LCAxMjcyNzcsIDExMjg2LCA2ODYyMCwgNjQyMTcsIDAsIDUyMzIsIDAsIDQxMDA5LCAwLCA0MTAwNSwgMCwgMCwgCi0gICAgOTgzODE4LCA4MjkyLCAxOTUwNzQsIDQ5ODAsIDg4NjAsIDczOTQ3LCAxMDAyOCwgNjUyOTEsIDcwNzYsIDEzMTgyLCAKLSAgICAxOTQ3MDUsIDAsIDAsIDEwNjMxLCA2NjAzMSwgNzk3MiwgMCwgNzg3ODUsIDAsIDc5MDAsIDAsIDExMzA5LCAzODA2LCAKLSAgICA0MTk4LCA0MjcyNSwgMCwgNjc2NTYsIDk5OTUsIDAsIDkyNTUyLCAwLCAxMjkzMSwgMCwgNDI2ODQsIDc0Mjg1LCAyMDg4LCAKLSAgICA2NDIxMywgNjQzNjYsIDY1MTU2LCA4ODE0LCA0MjIzOCwgNzQ3NzEsIDAsIDAsIDEyODM2LCAwLCAwLCA3NDM0MiwgODU5MywgCi0gICAgMCwgMCwgNjg0NDUsIDEzMjU1LCAwLCAwLCA3NDY0LCAwLCA2NTg2NSwgMCwgMTk0NjUwLCAxMjcxNDQsIDAsIDkzNDIsIAotICAgIDEyMDQ2NCwgMCwgNjQ1MTYsIDAsIDc4NzkyLCAxMDEyOSwgNDEwMDcsIDc0Mzc1LCAwLCA0MDk5NSwgMTIyMDksIDQxMDEyLCAKLSAgICAxMTkxMzYsIDAsIDAsIDY5NzI0LCA0MDk5MiwgOTIyNjQsIDEyNzE1MywgNjg2NTMsIDQzNTU4LCA1NTIyLCAwLCA2MSwgMCwgCi0gICAgNzQxMDUsIDM2MzMsIDk4Mzg5MSwgNjUxNjIsIDQxMjM0LCAxMjA4OSwgNzgyODEsIDk3NzEsIDk4Mzg5NiwgMTMyNTEsIAotICAgIDEyODcwMSwgMCwgNjI2MiwgMjc4NCwgNDI3NDMsIDAsIDgxMjYsIDY2NDgzLCAwLCAwLCA0NDEsIDQyNjIxLCAwLCAwLCAKLSAgICA0MTAwMiwgNDA5OTksIDExOTYyMywgNDMyNjYsIDcxMDgsIDE5NDc3OSwgMTA4OTAsIDc0NDgxLCA2NTgzNCwgODMyNCwgCi0gICAgMTE5MTAzLCA2NDQxNywgNzQ4MTcsIDEyNzQ2NSwgNjQ3MzcsIDAsIDk4MzY1MCwgODkzMCwgNjY2NzgsIDc0MjQ5LCAxMTkzLCAKLSAgICAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAwLCAwLCA3NzQzLCAwLCAwLCA3NzkwNCwgOTI2NDAsIDc3OTA1LCAKLSAgICA5MDM0LCA2MDM5LCAwLCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgNjY0NjksIDAsIDAsIDAsIDQyODE1LCAwLCAKLSAgICA0MTk2NiwgMCwgMTI3NDcxLCAwLCAxMTc5MiwgNDMwNjQsIDQxMDI1LCA5MTEsIDc1MzksIDAsIDAsIDEyMDMzOSwgNjUxNTksIAotICAgIDY0MzkwLCAwLCAwLCA1NTIwLCAxMTY2MiwgMCwgNjUzMzAsIDQyODEyLCAwLCAwLCAxMjMyNiwgOTgzODQ3LCAwLCA0MjgwOCwgCi0gICAgMTI4MzM3LCA5MzQ4LCA2NDkwMSwgOTgzODUyLCAwLCAwLCAwLCAwLCAwLCA5MTc1ODQsIDQzNzAyLCA5ODM1NzYsIDU4NTcsIAotICAgIDY1MzQyLCA5MjcyNywgMTE5MTIwLCAxMjAwNzksIDg2NDQsIDAsIDAsIDAsIDc0Mjk2LCA0MTkwOSwgMCwgMTIwMzMyLCAKLSAgICAyNzkxLCA2OTY2MywgMTg5MSwgNjk4MjQsIDAsIDQxOTA3LCA2NjY0NywgMTE4OTM5LCA4NzYxLCAxMjk0MiwgNTc0OCwgMCwgCi0gICAgMTA3NzMsIDAsIDAsIDg3OTYsIDc4MTQ5LCA2NDEyLCAyMDYxLCA4NTIwLCAxMzE0NiwgMTI3MTg1LCA2MzkzMSwgMCwgCi0gICAgNjU5MDIsIDI4ODIsIDAsIDAsIDEyODQzLCA0NTIwLCAxMjAzNDUsIDkyNDU5LCAwLCA5ODM2NTEsIDAsIDczODYwLCAwLCAwLCAKLSAgICA2NDM0NSwgMCwgOTIwMSwgMTI4MzE0LCAxOTQ5NDAsIDAsIDAsIDQzNjc5LCA5MTc1ODUsIDY1MTE3LCA5MjI3MCwgMCwgCi0gICAgMTA0MjcsIDAsIDM4NDQsIDEyMDY3NSwgOTc1NSwgMTExMCwgNjYxMiwgMTIyMjIsIDAsIDEyODc4OSwgMCwgMCwgNzgzLCAKLSAgICAxOTQ5MzUsIDAsIDAsIDk4MzA2NCwgMTk0NzIwLCA2NTA1NiwgMzYyMCwgNDExODAsIDY4Mzc4LCA0NTU2LCAwLCAwLCAKLSAgICAxOTQ5MzMsIDc0MjUwLCAwLCA2NzY1NywgMTA1MTAsIDQzODIsIDY2NDgyLCAwLCAwLCAxMjc1MjcsIDkxNzcsIDg5MDIsIAotICAgIDkzOTU4LCA5ODM5LCAwLCAxMjg5MSwgOTgzNzQ2LCA5ODM2MjcsIDYzOTk5LCAyMDE2LCA0MTkxNywgOTc4OCwgNjM5MjgsIAotICAgIDAsIDE4NjIsIDY1ODAwLCA5MTU1LCA2NjYyMywgOTc4NiwgNjUwODIsIDQxOTE5LCA4NTc5LCA0MTkxNCwgNzk4MSwgMCwgCi0gICAgNjYwMTcsIDQ1MDgsIDY0ODgzLCA5MjQ1NiwgOTI1MjIsIDEyNzgxNCwgMCwgNjQ1OTIsIDc0Mjc2LCAxMjAwODAsIDY3ODQsIAotICAgIDc4Nzg4LCA2ODE4MSwgMCwgMCwgMCwgMTI3NTM0LCAxMjE0NywgOTAyNCwgNjYzNzgsIDY2NDcyLCA5ODM5MjAsIDY0Mjg5LCAKLSAgICA2NTI4OSwgNzgxNTEsIDY2NjU4LCAxOTQ5MjksIDY0NTA5LCA3ODE1MiwgMCwgMTI2NTA1LCAxMTA1MSwgOTgzMjg4LCAwLCAKLSAgICAxMTM1NSwgNjU4ODUsIDAsIDEyODMxMCwgNDEyMTQsIDAsIDEyMjk5LCAwLCA3NTAwLCA0NTA2LCA3NzczLCAwLCAwLCAKLSAgICA5OTYzLCA2ODY0OSwgMTI2NjA5LCA0MDQwLCAxMjA1NzAsIDYxNjcsIDAsIDYzOTIyLCA2NTk0LCA5ODM3MzEsIDAsIDAsIAotICAgIDM2MjQsIDQzMDM2LCAwLCA2Mzg3LCA2Mzk5MCwgMTk5NDcsIDYzOTg4LCA0MTk1NSwgMCwgNjM5OTMsIDEwNDQwLCA5NjExLCAKLSAgICA2NTYwNSwgNjgwMywgMCwgNzczOCwgNjM5ODYsIDExNDQ2LCA2Mzk4NCwgOTI2NDEsIDM0MzUsIDc4MTY0LCA0MzgxNCwgCi0gICAgNDM4MTAsIDcwMjksIDY0MjU4LCA0MTI5MiwgMTE4ODk4LCAxMjc0OCwgNDI3NDIsIDk1MTcsIDExNTE4LCAwLCA3ODc5MCwgCi0gICAgMCwgNjc5OTMsIDYzOTU2LCA0MjQ1OCwgNjM5NTQsIDYzOTUzLCA2Mzk2MCwgOTU5MSwgNDUxNiwgMTAyMTcsIDY4MzcwLCAKLSAgICAxMTQ2OSwgNjk2OTcsIDQyMzA2LCAyNzIzLCAxMTg5NDcsIDAsIDAsIDAsIDAsIDAsIDExMzk3LCAyODgwLCAwLCAwLCAKLSAgICAyODcyLCAwLCAwLCAzNDk4LCA0Mzc4LCA5MTc1MzksIDQyNzAsIDAsIDY1NTUxLCA2ODIwNSwgNjYzMywgNDMzODcsIDAsIAotICAgIDUyMzAsIDAsIDAsIDAsIDAsIDAsIDgxNjEsIDM5MywgMTIwMTMsIDAsIDAsIDEyNjQ3OSwgNDE1LCA2Mzk2NCwgNjM5NjMsIAotICAgIDQyMzQ1LCA5MjMxMCwgNTE4MywgMTg3NywgNDI0OTgsIDAsIDI5MjcsIDAsIDYzOTYxLCA0NDcyLCAwLCAwLCA3ODE1OSwgCi0gICAgNjk2OTksIDkxNzkzNiwgNDIzNDAsIDQ3NTYsIDEyODA3OCwgNzA4MSwgMTA3MzAsIDc2OTEsIDEwMzMxLCA2MzgzMCwgCi0gICAgMTE5NjI1LCA0MjkyMiwgNDIxMDMsIDg2MjgsIDk4MTMsIDAsIDQyNDUzLCAxNjA0LCA5NTY1LCAxMDUzOSwgNjk3MDEsIAotICAgIDY1NzY0LCA0MTQxNSwgNjU3NjcsIDAsIDg0NTcsIDQyMzAxLCAxMTM3MiwgNjQ4NzMsIDExOTkyLCAwLCAwLCA2Mzk4MCwgCi0gICAgMTE4MDEsIDM2MjIsIDk4MzEyNCwgNjQzMzYsIDEyMDE3LCAxMDQ2MywgNjM5ODEsIDQ5NjcsIDY0MTg5LCAxOTY2LCAKLSAgICA0MzYyOCwgMCwgOTgzMjg0LCAwLCAwLCA2Mzk3MSwgNDM0NywgNDQxNiwgNDIwOTgsIDExMDA5LCAxMDY5NCwgNjM5NzMsIAotICAgIDQwMiwgMCwgMTMxNDcsIDEyODY5MiwgNDIxMDAsIDY0NjQ2LCAxMzIyOCwgMCwgNDE4NzUsIDM1MTUsIDc0MjUyLCAxMTgwNSwgCi0gICAgMCwgMTEzMDIsIDYyNTksIDQzMzk1LCAwLCAwLCAxOTQ2NzAsIDAsIDkyMzUxLCAwLCA3NDQyNSwgMTEyOTksIDE1NjEsIDAsIAotICAgIDkyMzU5LCA2NDk0MiwgOTgzNTU5LCAxOTQ3MzMsIDk4MzY3NywgMTk0NzMyLCAwLCA3NDMwMSwgMCwgMTEyODAsIDAsIAotICAgIDY5Nzg0LCA3NDA2MCwgMCwgMCwgMTE5NjY0LCA1MTQ1LCAxMjQ4NiwgNjUwMTgsIDY2NTE2LCA1NDA5LCAxMjczNzksIAotICAgIDE5NDY2OSwgNzQwMiwgNTM5OSwgOTY4NSwgNzQwODksIDc5NTIsIDU0MDEsIDAsIDY2NjE2LCA2ODQyMSwgOTgzOTEwLCAwLCAKLSAgICA1NDA1LCAxMjc4NzUsIDY0ODY2LCAwLCAxMTk1ODMsIDEyODM0NSwgNzg3ODQsIDc0MjQ4LCAxMTMzMCwgMTk0NzIzLCAKLSAgICA2NDY5MCwgMzI1NCwgMCwgMCwgMTI4MjA3LCA0MjM5MCwgNDM2NzgsIDE5NDcyNSwgOTgzOTAwLCA2NTA3NywgMCwgNjM4OCwgCi0gICAgMzM1NSwgOTUwOCwgOTg2NywgNTcyMywgMTE1MjAsIDU2MTEsIDAsIDMzNzcsIDAsIDAsIDAsIDAsIDc4MjI4LCAwLCAKLSAgICA5ODM3NTMsIDQyNjkxLCA5MTc4ODYsIDEyNzE5OCwgNzQ3NjcsIDAsIDEyNzA3NSwgMTM3OSwgMjQ2LCAwLCA5ODM3NTIsIAotICAgIDM3ODgsIDk4MzEwNiwgMTEwNDEsIDkyNTQ5LCA2NjMwNCwgMCwgMCwgODkxNywgNDI0MDMsIDMwMSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTgzNjg4LCAxMDY1NiwgMCwgNjUyMTQsIDExOTI0MiwgNDI1NjcsIDkyMjE3LCAxMzE2MywgOTgzMjAyLCAxMjA4MzEsIAotICAgIDc0NTk3LCAzMTgyLCAwLCAwLCAwLCA2NTAzNCwgNjU4ODksIDQyMTY5LCA0NzU1LCA3NDI0NCwgMTk0NjIxLCAxMTQ0MywgMCwgCi0gICAgNjYzMTksIDc0NTk4LCA2MDgsIDYwMCwgMCwgMTIxOSwgMzkzNCwgNjQyMDYsIDExNDgzLCA3NDUxMCwgMCwgNzQ0ODUsIAotICAgIDQyNDQyLCA2NTQ3MCwgOTgzODk4LCA2NDIwMiwgMTMxNjAsIDc3NTksIDQyNDgyLCA0ODUsIDEyODAwNiwgMCwgOTgyOCwgMCwgCi0gICAgMCwgNDIyODAsIDAsIDkzNTEsIDc3NzgsIDY0Mzc5LCA3NDk2LCA0MjQzMSwgNjkxNiwgMTIwOCwgMCwgMTE5NjMxLCAKLSAgICAxMTAwMiwgNDI0NzAsIDAsIDExODk0NiwgMCwgMCwgNzQwNDEsIDAsIDcwMDQ1LCA0MzUzOSwgNTQxMSwgNDIxOTYsIDAsIDAsIAotICAgIDAsIDkxNTAsIDAsIDQyMzkzLCAxMzA4NiwgMTMxMCwgMTk0Njg3LCA5MzM3LCAxMjA1MiwgMTA2NDMsIDU1MjcxLCAKLSAgICA5ODMxNzksIDEyMTY2LCAyNTQ2LCAxOTQ2ODMsIDIxMywgMTE4ODUyLCA2NTYxMSwgMCwgMCwgMTk0NzU2LCA3NDMxMCwgCi0gICAgNjU1NCwgMCwgMTE5MTQsIDU0NTIsIDAsIDAsIDAsIDAsIDAsIDE5NDY4MSwgOTI1NjAsIDI3MTMsIDAsIDk2NTAsIDQzMzMwLCAKLSAgICAwLCAxOTQ2NzUsIDE0MDYsIDAsIDAsIDkyNjU5LCAwLCA2ODIyMywgNDE0MywgMTk0Njc3LCAwLCA2NTc0OCwgNDE0MSwgCi0gICAgOTY4MiwgNjUyODcsIDE1MDgsIDEyNzAxMywgODc3OSwgMTA1NjksIDg3MjUsIDEzMjk5LCA2NjYzOCwgNjU3NTAsIDQyMjYzLCAKLSAgICA0MTQ1LCA2MzgwLCA2NTc1MSwgNjY2MTMsIDQzOTk0LCA2NTczOCwgNTUyNTAsIDkxODUsIDk1NTAsIDAsIDQzNDAzLCAwLCAKLSAgICAwLCAwLCA2NTczNiwgNDE5NTEsIDY0ODE2LCA2NTc1NiwgOTgzMjAzLCAxMjk1NSwgMTA1OTYsIDI4ODgsIDE5NDY0NSwgMCwgCi0gICAgMCwgOTY1NywgOTAxOSwgMTk0NzY2LCAwLCAyODc4LCA1MzkwLCAwLCAxOTQ5NjEsIDAsIDY4Njc5LCA0MzU1MiwgNzUwMSwgCi0gICAgNjMyOCwgMCwgMTA0MjksIDEwMzY1LCAwLCAwLCA0MTk0NiwgNzUwMywgNTIzNSwgODAzLCA2ODM4MSwgMCwgMCwgODk4NiwgCi0gICAgMTI2NTQyLCAxMDYzMiwgMTE5MzQsIDExNDUyLCAxMzMyLCAwLCAwLCAxMjY2NDcsIDAsIDExODg4NywgMTc5MSwgNTE5MSwgCi0gICAgOTI4OCwgNjQ4MjIsIDI4OTIsIDAsIDQzMzk0LCA1NTUsIDAsIDAsIDY2NjQ2LCAwLCAxMTkwMDIsIDEzMTUxLCA3NDUxMiwgCi0gICAgNzI4OSwgNzQwNTUsIDY0MTYxLCA4ODU0LCA2NDE2MiwgNTg1OCwgNDE5MjcsIDEwNTgyLCAwLCAxNzg0LCAxMzYxLCAKLSAgICAxOTUwNDcsIDAsIDc5MDUsIDAsIDY0ODY4LCAxMjg4MTMsIDEzMTU4LCA5MjE2NiwgNzIxMSwgMCwgOTM3MSwgNzM5NzMsIAotICAgIDkxNzU1MywgNjgyOCwgMTYyNSwgOTIzMDIsIDAsIDEzNDIsIDY4NDQwLCA2NDE3MSwgMTI2NzA0LCAxMDkwMywgOTgzNDg2LCAKLSAgICAwLCAwLCAwLCAwLCA0NDgyLCA0MTYwNiwgMCwgMTI4NTY5LCA5ODMxMTIsIDAsIDY0MzgxLCAwLCAwLCAxOTUwOTAsIAotICAgIDQyMjQ1LCAxMjY0NjcsIDQxOTcyLCAwLCA0NDQsIDAsIDkxMjcsIDY2Njg3LCA2NjYxOSwgMTI2NDg5LCA3ODAyNSwgMCwgCi0gICAgMTEzNDksIDQwOTkxLCA5MTc1NzAsIDAsIDExOTU5OSwgMTIwODMwLCAwLCAxMTk3LCAxMjgyODIsIDExNDksIDE5NDk3MCwgCi0gICAgMCwgMCwgNDA5OTAsIDQzNzY1LCAwLCAzNDkyLCAwLCAxMjc5NDIsIDAsIDAsIDAsIDEyODM4LCA5ODM5NjksIDE5OTQ4LCAwLCAKLSAgICAzMDk5LCAwLCAwLCA0MTA4NywgMCwgMCwgMCwgMTE5MDU5LCAxMjAzNiwgNDEzMDksIDAsIDAsIDgxNTIsIDAsIDQxNTUwLCAKLSAgICAxMjIyNywgOTgzNjEzLCAwLCAxMjgyOCwgMTI3NTExLCAwLCAwLCAxMjA3MDgsIDAsIDAsIDEwMzg2LCAxMTk1NzQsIDAsIDAsIAotICAgIDkyNjgwLCA5ODM3ODAsIDY4MTU0LCAwLCAxNzQzLCAwLCAwLCA5MjIzOSwgNjUxODYsIDkxNzU3MSwgMCwgOTYwNiwgMCwgMCwgCi0gICAgNjQ0MzksIDAsIDAsIDkyNjg2LCAwLCAwLCAxOTQ5NjcsIDAsIDAsIDMzOTUsIDkzNjIsIDEwODc4LCAwLCAwLCA3ODM2MiwgCi0gICAgNjQ4MzAsIDAsIDEyNjU1NywgNDEwOTEsIDM0MjYsIDEzNDQsIDg4NzAsIDAsIDAsIDQ3MzUsIDEyNzAxNywgNjExOSwgCi0gICAgMTI4MjIsIDQyNjk5LCAwLCA5ODM4MTUsIDc0ODE4LCAxNDIzLCAwLCA0MjYzNywgNDEwODAsIDAsIDEyMDM5LCAxMDU1OSwgCi0gICAgMCwgMTE4ODkyLCAwLCA5NDcyLCAwLCAxMTkyOSwgMCwgNzE3MCwgOTU5NiwgNjEzMCwgMTI4ODI2LCA0MzYyOSwgMTE1NzksIAotICAgIDc4NzEzLCAwLCAxOTQ3NDAsIDEyODY5MSwgOTIxODUsIDY2Njk5LCA2NDQ0MCwgMTAwNCwgOTI1ODQsIDE5NDczNywgCi0gICAgNDMyMzQsIDY2MDA4LCAxMjYyNywgMCwgNjg0MTQsIDAsIDQzNjE5LCA0MzMwMywgMTEzMDAsIDQzMzA0LCA5Njg2LCA1ODkwLCAKLSAgICAxMTc3NiwgNzU1OCwgMTI3MTU4LCA2NTYyNywgMCwgMTA3MTgsIDEzMTU0LCAzNDYxLCA5MTM5LCAwLCAwLCAwLCAwLCAKLSAgICA2NTM2NSwgNzM4NzcsIDY1NjI4LCA3ODAxOSwgMTIwMzE5LCAwLCA0MTcwOCwgMTI4NjAsIDI2NDEsIDEyMDY5LCAxMDgzOCwgCi0gICAgNTQwMywgMTAzNTIsIDcwMDg1LCAxMDA2MSwgNDMyMzcsIDAsIDUxNDAsIDIwOSwgMTI4ODQ3LCA0MTcwNCwgNDEwNTYsIAotICAgIDQzMDc4LCAxMjgxMjUsIDExODgwOSwgMCwgMTA4OTksIDY1NDY5LCA5MjM2MiwgMCwgMCwgMjQxMCwgOTkzLCAwLCAKLSAgICAxMjA1ODksIDEyMDY4OSwgNzg2OTMsIDAsIDAsIDcyMzIsIDAsIDExOTI1MywgMCwgNzExMCwgNzQ0NjIsIDIwNjYsIAotICAgIDEwNDg5LCA0MjE2NiwgNDM0NjMsIDEwNjU5LCAzNjAwLCAwLCA0MjI0LCAxMzM2LCA0MTUxOCwgMCwgMCwgMCwgMCwgCi0gICAgNDExMzksIDY0ODIwLCA5MjUzOCwgMTI5NjYsIDQxMTM0LCAwLCAwLCAwLCAwLCAyNzIsIDQyNjMsIDg3OTMsIDAsIDAsIAotICAgIDQxNTAyLCAwLCA5ODMsIDEyNTQ5LCAwLCAwLCAxMTkwLCA0MTA5LCAxMzM1LCA4NDEsIDU4ODgsIDQxMzU4LCA2NDg2MywgCi0gICAgOTU0NCwgNDM0ODEsIDAsIDE5NDgwNiwgNzAwMjcsIDIwOTksIDUxMjAsIDI0MDksIDc3OTksIDAsIDc0NDI0LCAwLCAwLCAKLSAgICA0NzMxLCAwLCA2NjYyOSwgMCwgMCwgMTI1NSwgNDE0OSwgOTI0NywgMCwgOTkxMywgMCwgMCwgNjQ5MTQsIDkxNzc4NywgCi0gICAgNjUxMDEsIDAsIDExNjk0LCA5MjQ3NSwgMTE2OTAsIDU4MzUsIDEyNzE2NCwgNjY2MjUsIDEwODQyLCA0MTM1NCwgNDIxMjMsIAotICAgIDQzMDk3LCAxMTY4OCwgNjY2MzQsIDEwOTQsIDE5NCwgNjQ2OTIsIDAsIDgxODAsIDAsIDAsIDk5NzIsIDczODY1LCA0NTE5LCAKLSAgICA2MTE0LCAxMDg5OCwgNDMwNzIsIDAsIDAsIDkzOTYwLCA5ODMzMTQsIDEyNjU4MSwgMTA2OTUsIDAsIDc1NDAsIDAsIDg4MSwgCi0gICAgNzg1NywgNjA2NywgNjUxNjQsIDAsIDAsIDAsIDEzMzExLCA2ODQwMywgNDE4NTcsIDY0MzIxLCA4MzU5LCAwLCAxMjY4OSwgCi0gICAgMCwgMTk0NTk0LCAwLCA5ODMzMDQsIDk4Mzg3MiwgNjgxODMsIDAsIDk4MzMwNiwgMTI4NywgNTQzNiwgMCwgOTgzMzA5LCAKLSAgICA3NDE0MiwgOTIzMjgsIDc0MTUyLCAxMTkwNzgsIDYwNTEsIDEwNDk3LCA2OTY2OCwgODk4NSwgMTIxMDksIDk4MzMxNSwgMCwgCi0gICAgMTI3MjQyLCAwLCAwLCAzNjUyLCAxMDUzNywgMCwgMTI3NiwgMTIwNDQwLCA2NTQ5LCAyNzksIDczNzQ1LCAwLCAwLCAwLCAKLSAgICAxNDg5LCAwLCAwLCAwLCAzODk5LCAxMDA3LCA0MjEyNCwgOTgzNTU3LCA0MjEyMiwgOTIzMzcsIDkyMzY3LCAwLCAxMTk4NSwgCi0gICAgMTM0NSwgNzg2MDAsIDAsIDAsIDg5NTYsIDQzMDgzLCA5NDA1NywgNDIxMzgsIDc4NjEwLCAwLCAxMjE1MSwgNzg2MDgsIAotICAgIDc4NjA0LCA3ODYwNSwgNjI4NSwgNzg2MDMsIDc4NjEyLCA3ODYxMywgNjU5NDIsIDQ5MiwgODY4NSwgMCwgOTgzNzUwLCAwLCAKLSAgICA3ODYyMiwgNDM3MTIsIDI1ODIsIDExNDcwLCA2NDUzOCwgNzQ0NCwgNzg2MTUsIDc4NjE2LCAyMjk3LCAwLCA3MzgzNywgCi0gICAgMTE5ODIzLCAyNTI3LCAxMTk4MjQsIDE5NywgMjc5OSwgOTI1OTQsIDQxOTQ0LCAxMjAyNzYsIDk5MzMsIDAsIDY2NTE1LCAKLSAgICA3NjcsIDU1MjQsIDcwMjgsIDAsIDAsIDExOTgyNywgMTE5ODE3LCAxMTk4MjgsIDc4NjMzLCAxMDg5NiwgMCwgMTc5OSwgCi0gICAgMTIwNDk3LCA2OTcxLCA3NDMzNiwgMTI4MzQyLCAwLCA2NTM0MCwgMTE4OTc5LCA0MTU1MSwgMjQzNCwgOTQwMTgsIDAsIAotICAgIDEyMDU3OSwgMCwgNDYzMSwgMCwgMCwgNjQwNywgMCwgNjMzOCwgNDMyMTQsIDAsIDc1NzAsIDAsIDMxOTIsIDAsIDg0MTQsIAotICAgIDAsIDkzOTgzLCAwLCAwLCAwLCA5MTY0LCA2NjYxMiwgOTM5NTksIDMxNzEsIDY2MjMsIDQ5NjEsIDY4Mzk2LCA4ODYsIAotICAgIDU1MjE2LCA4NjU0LCA3ODgzMiwgOTk5MywgNzQzOTAsIDY0NjAzLCA3MDA2NiwgNjkyNDEsIDk1OTksIDc4NjI5LCA0MzA4NCwgCi0gICAgNzg2MjcsIDc4NjI4LCA3ODYyNSwgMjM5OSwgNjk2OTMsIDg5OTQsIDEwOTQ0LCA0MTIwOCwgOTgzNzA0LCA0MTE2OCwgCi0gICAgODE3OCwgMCwgMzM2NywgOTIzMzQsIDQyNTEwLCA3ODY0MSwgNzg2MzYsIDY4MDQsIDc4NjM0LCAxOTQ3LCAwLCAwLCAKLSAgICA5MjY4MSwgNDI3NTksIDExMDY4LCAxNzA1LCA5MzMxLCAwLCA3NDc5OCwgOTE4MSwgNjUzNTksIDAsIDgwMTcsIDExOTgzMSwgCi0gICAgNjUwOTYsIDY2NzIwLCAwLCA0MzQ3NSwgMCwgNDkwOSwgMTIxMjYsIDEyODY3MywgMTIwNjk2LCA0OTA0LCA5ODMzMjUsIAotICAgIDY5NjUwLCAxMzY1LCA5MjUzLCA0Mjc1NywgNDM0MzYsIDc0NjIsIDAsIDAsIDAsIDAsIDExOTU4NywgNjQ0MTUsIDAsIDAsIAotICAgIDUzOTgsIDAsIDEyNzM4NiwgOTM5NTMsIDAsIDAsIDExOTAxNSwgMCwgMCwgOTQ3NiwgMCwgOTgzNzY4LCAxMjc2MywgCi0gICAgMTI2NjAzLCAzNjI5LCAwLCAxMzAwNSwgMCwgMzYyOCwgMCwgMCwgOTI1MDIsIDM0NjksIDQyMTA3LCA0MjExNiwgOTE3NTc4LCAKLSAgICA2NDgwOSwgMjkyOCwgNDkwNSwgOTg1MywgODUxLCA5MDQwLCAwLCA2NDY2NSwgNDMwODYsIDkxMTQsIDAsIDQyNTgzLCAKLSAgICA5MzE1LCA0ODIyLCA0OTA2LCAzODUyLCAyODQ3LCAxMTk4MjEsIDMyMzYsIDExMzE3LCAxMjUxLCA3Nzc3LCA0MTg1MiwgCi0gICAgMTE0MTAsIDEwOTY0LCAwLCA0MzIyMiwgMTI2NDYsIDEyMDI2OSwgMTAyNTksIDk4NjUsIDY1ODIxLCAwLCA2MDE4LCAKLSAgICA5MjI5MCwgMCwgMTIyNzYsIDAsIDY4MzcyLCAwLCA5MjI1OSwgMTE5MjQ0LCAwLCA5ODMyMjQsIDEwNDY3LCAwLCAyNDQzLCAKLSAgICAxMDkxOCwgNzgyMTcsIDExOTgyNSwgMTAwMSwgOTI0MSwgMTkyNywgMCwgMCwgNzM5ODcsIDEyNzg4NSwgMCwgMCwgCisgICAgMTE4OTA3LCAwLCAxMDQ3NCwgNDM0MjYsIDEzMjU3LCA0MjM1NCwgMTI4MDk5LCA5ODM2OTgsIDcwMDQ0LCAxOTUwNjUsIDAsIAorICAgIDg0MTMsIDk4MzgxNiwgMCwgNTY5MywgNzI3MiwgMCwgMTMyMDksIDY0NDcwLCA2NTgzMSwgNzQzNTAsIDE5NTA2MywgMCwgMCwgCisgICAgMCwgMTI2NjM5LCAxMjAwOTcsIDAsIDk0MDc4LCAxMjgxMzMsIDEyNzc2NywgNjY2MDgsIDMxMTEsIDQxODYzLCA4ODA0LCAKKyAgICA0MjkxMywgOTIxODcsIDcyNzAsIDAsIDY2NjA2LCA2NjI4LCAxMDc2LCA3NDMzLCAxNDM2LCA3Mzg0NCwgNTUyMjYsIAorICAgIDEyODM1MywgNjM5ODIsIDczOTMsIDEyODA3LCA0MzQxMywgNjM5MDYsIDE1OTgsIDYzOTA0LCAwLCAwLCA0MTcyOSwgNDQyMywgCisgICAgMTMwNywgMCwgMTA1MTUsIDQxNTg5LCAxMjg2OTgsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIDAsIDEyMDYwNiwgNzg3NTQsIAorICAgIDU0MTMsIDc2MTksIDMyNTUsIDM0OTMsIDc0MDMyLCAxMTU0OSwgMTA3MzUsIDQxNzQzLCA3MzkzNywgNjgwMSwgOTgzNjMzLCAKKyAgICA0NTE4LCAxMDk5MCwgNjUwNzMsIDUxNjcsIDQ0ODEsIDM3NzEsIDEyMDE1OCwgMjcxMCwgMCwgNjkyNDMsIDQxNzI0LCAwLCAKKyAgICA0MzA3MywgNDE2OTAsIDEyNDc5LCA5ODM2MzUsIDAsIDAsIDk4MzgxOCwgNzAwNDYsIDE2MjgsIDEyNzE0OSwgOTgzNDg3LCAKKyAgICA5ODM3MzEsIDY1MjYyLCA2MzMzLCAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCA5NDA1NiwgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIAorICAgIDEzMDA0LCAwLCA0NDU3LCAwLCAwLCAxOTQ4MTgsIDAsIDU2ODQsIDg2NzgsIDEwOTE0LCAwLCA1Njg5LCA2NTgwNywgMCwgCisgICAgNjg0NjQsIDEyNjMzLCAxMjg3MCwgNjk3MDUsIDY1MTgzLCA1Njg4LCAxMTkyNiwgNjAzMywgNjMxMCwgNTY4NiwgMCwgCisgICAgNzQyNTEsIDAsIDEyMDY0NywgMCwgNTAsIDEwNTU4LCA5ODcxLCA0MjYxMiwgNDM2NTUsIDAsIDAsIDAsIDY2NDY4LCAwLCAKKyAgICAxMzI1OSwgNDQ0OCwgMCwgOTgzODQ1LCAwLCA3MDA0MywgNjc4NTMsIDAsIDEwNjQwLCAxMTUzOSwgMTE1MSwgMCwgCisgICAgOTE3NjA3LCAxMjc1NDQsIDEyNzA3OSwgMTk1MDUwLCAxMjc4NTIsIDAsIDAsIDAsIDEyNTAxLCA2NDYwNCwgMCwgMTE1MjcsIAorICAgIDExODg3MCwgODgxMiwgMCwgMTE1MzgsIDg2NzMsIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIDIxMDUsIDgwODcsIDc4MTYzLCAKKyAgICA2OTYzMiwgOTg5NCwgMCwgMCwgMCwgNDYzNiwgNTUyNjIsIDc4NTEzLCA0NTE1LCAyMzgyLCAwLCAxMjcwNTUsIDAsIAorICAgIDEyMDQ5NSwgMCwgMTI4Mjg0LCAxMjI3NywgMTk0NjI3LCAxMTk5NSwgOTI1NTMsIDAsIDEyMTU4LCAwLCA4NzQxLCAxMDE5NywgCisgICAgMCwgOTI0MjYsIDAsIDY1MzEsIDAsIDEyNzg0NiwgNDczLCA0MzQxNSwgMCwgOTgzNjUwLCAxODczLCAxMDg3LCAwLCAwLCAwLCAKKyAgICA3ODUyNywgNjY0MzksIDQzMjE4LCA5ODMxMjMsIDE5NDcxNiwgNzIzNywgMTI1MDQsIDc0MjgyLCAwLCA5ODM1NzEsIDAsIAorICAgIDk0ODksIDAsIDAsIDQzODQsIDc0MjIwLCA2Mzg0NSwgMjA1OCwgMTI4ODYzLCAxMzI5NSwgNDMxOTEsIDEyODAzMCwgMCwgCisgICAgMTE1NCwgMzg1NywgMTIwNSwgMCwgMCwgMTMxMDAsIDEyOTU4LCAxMjA3MDYsIDc0MTY4LCAwLCAwLCA0NDIxLCAxMDU5MiwgCisgICAgMCwgNDk1LCAxMTkwMDcsIDQxNzEyLCA3OTgzLCAwLCA5Mzk5NywgMCwgNjM0NywgMTIwMTY1LCA3NjU0LCA0MTcxMCwgCisgICAgNDE5NiwgMCwgNDM3LCA0MTcwOSwgNzM3NzIsIDAsIDAsIDk0NjUsIDEzMjkwLCAxMTkxODAsIDQ5OTcsIDY0MzA2LCAwLCAwLCAKKyAgICA0OTk5LCAxOTQ2NDIsIDAsIDEyNjU4MiwgNDcxMSwgMTIwNzY5LCAwLCAyNzM5LCAwLCA4MDQ0LCA3NDgzNCwgMTk0NjQzLCAKKyAgICA0MTc4OSwgMTI4MTQyLCAxMDgwOSwgMCwgMCwgMCwgMTc3OSwgNjYwMCwgNjYwMSwgNDE1NDMsIDUzMjUsIDY0MiwgNjQxODcsIAorICAgIDEzMDU4LCAxMjA0NDksIDEyODc1LCAwLCA5MjE4NiwgMTMyMjksIDAsIDEwNTc1LCA0MzM5OSwgMCwgMCwgNDE3OTEsIAorICAgIDExMDQsIDAsIDAsIDEwNjU1LCAwLCAwLCAwLCAwLCAxMDgyLCAxOTUwNDksIDg0MjgsIDY1NjksIDAsIDAsIDAsIDY5ODQ5LCAKKyAgICA2NzgzLCAwLCAxMjk5MywgODA0OSwgNDE1NDgsIDQ0MDIxLCA2NDU4LCA5ODM4MDcsIDEyODg4MiwgNDc2MSwgNjM4MjgsIAorICAgIDQ3NjYsIDY0NjIzLCAxMjczLCA0MzQwNywgMCwgMTE4ODc2LCAxOTUwNDUsIDY5MTIsIDEzMTMsIDYzMjIsIDEwNDgzLCAKKyAgICA5ODM2MDMsIDQxNTQ1LCAwLCA5MjQ0OSwgMCwgMCwgMCwgMCwgNzg2MjQsIDM0ODQsIDc0MzM3LCAwLCAwLCA4NTAzLCAKKyAgICA1MTIyLCA0MTUyNywgMCwgNjYzMjAsIDk4MzgxMSwgMCwgMCwgMCwgNDE1MzcsIDY5NjgzLCA4MzAzLCA4MjgyLCAxMTgxNywgCisgICAgNzM4NTcsIDEwMDAzLCA3Mzg1OSwgNjU5MDQsIDczNjMsIDE2ODYsIDAsIDc4NDA2LCAxMTQ2NywgMzY2NCwgNjU5MjEsIAorICAgIDY0Mjk5LCAxOTQ2NjQsIDAsIDAsIDQzMjQsIDEyNiwgNDIyNDYsIDExOTE1MiwgMCwgNzQzNzgsIDY1OTI2LCA3NzQ0LCAKKyAgICAxOTQ2MzYsIDc0Mjc3LCA3NDMwMiwgNzgwNTIsIDQzODE3LCA2OTY2LCA0MzgyMiwgODEzNiwgMCwgNjU2MDAsIDE2MzMsIDAsIAorICAgIDAsIDQ3NjIsIDExMDMsIDAsIDAsIDQ3NjUsIDk4MzQ5MiwgMTMwNzgsIDAsIDQ3NjAsIDYzODI3LCAyMDUwLCAxMDg3MSwgCisgICAgNDMxOTksIDExMDIsIDAsIDQyMjM2LCAxMjg4NjcsIDE5NDY2NywgMTE1NDYsIDc0Nzk0LCAzMzcsIDAsIDQyNTkxLCA4NjI3LCAKKyAgICAxMjI3OSwgMTExMSwgMCwgOTIxNjEsIDQ3MDcsIDY4MjA2LCAxMDE0MywgNzg4MywgMTI3MDgxLCA3ODgwLCA0NTIyLCAKKyAgICA4NjQ1LCA1NzA0LCAxMzAxMCwgMCwgODMwNCwgOTE3NTYxLCAwLCAxMTk1NzUsIDIyOTMsIDAsIDY2NjU0LCAwLCA5MjY3NiwgCisgICAgMCwgMTMwMDgsIDAsIDQzODUsIDAsIDEzMDExLCAwLCA5MjU2OSwgMTE5MTYxLCAxMzAwOSwgMTYwLCAyNjc3LCAwLCAwLCAKKyAgICA0MTc5MywgNjU3NjMsIDc0MjIxLCAxMjAxNDEsIDQxNzkyLCA0Mjc3MCwgOTQwNTQsIDY1NzYyLCAxMTg4MjksIDQzODIxLCAKKyAgICA1NzA5LCAwLCA5NDA1MywgNDM4MTYsIDAsIDAsIDEwNzksIDM4NjcsIDU3MDgsIDAsIDAsIDQzNzk3LCA1NzA2LCA2NDc2OCwgCisgICAgNTcwNSwgODc5MSwgNDAwNSwgMCwgMTAyMzcsIDEwOTkxLCAxMjg4MTYsIDQzNDU5LCA5MTczLCA5MTc1ODEsIDkxNzU4MCwgCisgICAgMTMxNzAsIDEyNTQwLCA5MTc1NzcsIDQyNjA1LCAxMjA3NjUsIDEyNjYxNywgNjg2NDcsIDkxNzU3MiwgMTAwNTgsIDAsIAorICAgIDc0ODY3LCAxOTQ2NTQsIDEyNzA3OCwgMzMzOSwgMTE0NDgsIDExMDYsIDkxNzU5MSwgOTE3NTkwLCA5MTc1OTMsIDMzNDAsIAorICAgIDkxNzU4NywgOTE3NTg2LCA5MTc1ODksIDkxNzU4OCwgMTIwNTQxLCAxMDYwNSwgMTMwOSwgNjM5NjYsIDEyMDc0MywgMTc1NCwgCisgICAgOTIyMjYsIDEzMjQ2LCA4NjQsIDAsIDExODkyNiwgODk3MiwgMCwgNzg0OSwgMTIwMDkyLCA5MjUzMywgMTMyNDAsIAorICAgIDE5NTA2OCwgNTE5MiwgNDMzOCwgNjc5ODIsIDEwOTQ4LCA5MTc2MDEsIDEzMTk5LCA5MjU3NSwgMTIzNiwgMTMyMDgsIAorICAgIDEzMjYxLCAxMzE4OSwgMTMxODgsIDkzOTkzLCAwLCA3NDQwLCAwLCAxMjAxNTMsIDk1NTMsIDE1OTAsIDYzNzc3LCA2Mzc3NiwgCisgICAgMTMxNzgsIDYzNzgyLCA2Mzc4MSwgNjM3ODAsIDYzNzc5LCAxNTgzLCAwLCAxMzI2MCwgNDU1MCwgMCwgNjQyMDUsIDAsIDAsIAorICAgIDQxNTIyLCA5ODM5MTUsIDkyMTY4LCA5ODM3NzIsIDkxNzg1OCwgMTEzNTQsIDk0MDcxLCAwLCA0Mjc5NSwgMCwgMTE5MTk1LCAKKyAgICAxMTM5NCwgMTk0NjQ2LCAxMzIzNiwgMTMyNzIsIDEzMTk0LCAxMzM0LCA2OTkyNiwgNDQ3OSwgMTE3OCwgNjU1ODYsIAorICAgIDEyMDY2MywgNjY2ODEsIDExOTE5MywgNDYwMSwgMCwgMCwgOTgzNzY1LCAwLCAwLCAxOTQ2NTgsIDAsIDY4MDksIDYzNzg2LCAKKyAgICA2MDMxLCAwLCA2Mzc5MSwgNjM3OTAsIDExNDUsIDYzNzg4LCA3OTEwLCA2Mzc4NSwgNDMxNTMsIDc1NCwgMTAxOTIsIAorICAgIDEzMTA1LCA4MTgzLCAxMjA3NDEsIDIwMzcsIDAsIDAsIDEwNzQ3LCAxMjUsIDAsIDY0ODkwLCAwLCA5ODMxMzEsIDAsIAorICAgIDQxNzE5LCA2Mzc1OCwgMzUyMywgMTA3NCwgMTMyNTgsIDk1MzYsIDc0MDc3LCAwLCA0NDI3LCA3NDI0MiwgNjM3NTcsIAorICAgIDQzMTQ1LCAxMjIxNywgNjM3NTQsIDQxNTMyLCAxMzQ5LCA2Mzc1MCwgNjM3NDksIDAsIDAsIDAsIDYzNzUzLCA2MzgwMiwgCisgICAgNDEwODQsIDEyMDYyMiwgNjgxMzMsIDQxOTMwLCA2MzgwNSwgNjM4MDQsIDQzNjMyLCA2MzgwMSwgNDEwODIsIDgxNDAsIAorICAgIDYzNzk4LCA2MjYwLCAwLCAwLCA5NDA3NCwgNjM3OTMsIDExOTg4LCAzODk4LCAxMjgyNDEsIDEwMjAxLCAxMjIzOCwgCisgICAgNjM3OTUsIDQyMTk0LCAxMDM2NywgMTI1MjEsIDEwNDMxLCA0MjExNCwgNDE5MzIsIDEwNjgsIDAsIDEyNTIzLCAxMjk0NSwgCisgICAgOTgzMzI5LCA0MjIwMywgNzk1MCwgMTA4MDQsIDYzNzcxLCA0Mjc4NywgNDM4NiwgMTIyMjQsIDY5NzMsIDI3OTMsIDEyNDc1LCAKKyAgICAwLCAwLCA2Mzc2OSwgOTUzMCwgOTgzMTE5LCAxMjIzMiwgMTMxMzUsIDg1OTYsIDU2ODEsIDYzNzYyLCA0NTk1LCA2Mzc2MCwgCisgICAgNzkyLCAwLCA2NDgwMywgMCwgODc0MiwgMCwgMTEwNTMsIDEyODc5NiwgNjM3NDQsIDEyODEwNywgMCwgNzU4OCwgNjM3NDgsIAorICAgIDE2OTMsIDYzNzQ2LCA0MzIwNCwgNTA1NSwgNjg0MjYsIDkxNzg1MywgMTA5MCwgMTIwNjc5LCAxMjgzNTYsIDExNjY1LCAKKyAgICA3NDEzMywgNDU1OCwgNjU2ODUsIDk1MjMsIDAsIDAsIDc4NjgxLCAxMTUxMywgMCwgNjE1NywgNjM3NzUsIDYzNzc0LCAKKyAgICA2Mzc3MywgMTMxOTEsIDEyMTcwLCAzNTAwLCAzMTM5LCAwLCAzMTcwLCAxMjQ4NSwgMCwgMTA4NzIsIDc4MjcxLCAxMzAwNiwgCisgICAgNjQ0MzMsIDAsIDAsIDk0MSwgMCwgMCwgMCwgNjU1NDEsIDExMDYzLCAwLCA4MjI4LCAwLCA0MjA2NSwgMCwgMCwgOTQwMzksIAorICAgIDAsIDkyNDU1LCA3Mzg2LCAwLCA2NDQ0NCwgMCwgMTE5ODYzLCA0MzYwMywgOTQwNzUsIDY1Mzk3LCAyODgsIDAsIDAsIDAsIAorICAgIDEwMDI1LCA2OTkxNSwgMjkxOCwgMCwgNjUzMDAsIDExOTg3MSwgOTg4MywgNjQ3MjYsIDI3OTAsIDY1Mzk1LCAzNzkzLCAwLCAKKyAgICAxMjc4MjksIDY1MzkzLCAwLCA3NDEzOCwgMCwgMCwgMCwgNzQxMzksIDkyNzEyLCA2NTM5NCwgMTE1NDgsIDUyNzAsIDAsIAorICAgIDY1Mzk2LCAwLCA2NTgxMywgMTMyNTYsIDEyODIsIDEyMDc3MSwgMCwgMCwgMTA4ODgsIDk4MzYwNCwgNjUyNDIsIDAsIAorICAgIDMzMzAsIDAsIDAsIDk4Mzk3NCwgMCwgMCwgNzQyNTksIDMzMDQsIDQyNzUzLCAwLCAwLCAwLCAxNjI3LCAwLCAwLCAwLCAKKyAgICA1MzcxLCAxMzExNiwgMCwgMTgyNiwgMTE4Nzk0LCAwLCA0MzA5NCwgNzAwMjMsIDQzNjUwLCA5NDAzNywgMCwgOTAzNSwgMCwgCisgICAgMCwgMTI4MDA1LCAwLCA5MjIwNywgNjgxMjUsIDAsIDE2NCwgMCwgOTQwNjcsIDk0MDAwLCA2OTU4LCAwLCA0MzExNiwgMCwgCisgICAgNzAwMTksIDEzMjQ1LCAwLCAwLCAxMjczNzYsIDAsIDcwMDMxLCAxMjc3NTYsIDEyNjY2LCAxMzE3NSwgMTMyMDcsIAorICAgIDEyMDQxNCwgNjYwMTQsIDEyMDQyOCwgNzQ0NywgNTkyOSwgMCwgNjU1MDksIDAsIDc0NDksIDExMzA2LCAwLCA3MzkyMCwgCisgICAgMzE4MCwgMCwgNjM4MDgsIDkwNTQsIDk3MSwgMTMwNjIsIDAsIDAsIDY1MTk1LCAxMDE2NCwgOTIyNTIsIDc0NDI4LCAwLCAKKyAgICA3ODE0NiwgOTI2MTEsIDAsIDAsIDAsIDEwMDQ1LCAxMjg4MiwgMTMyNzUsIDEyODE2MSwgMTEwNTcsIDAsIDEzMjc2LCAwLCAKKyAgICA0MTUyNSwgNzgxNTAsIDcyNzEsIDExNDQ0LCAwLCAwLCAwLCAxMjIyOSwgNDE1MjMsIDAsIDQzNDExLCA3Mzc1MSwgMCwgCisgICAgNjQ4MTMsIDAsIDAsIDEwNDc2LCAzODU4LCAwLCAzOTMyLCA2NDk1OCwgMCwgMCwgNzM5ODksIDY4MTkyLCAwLCA2OTg0NywgCisgICAgMzY5LCAwLCA0MTc4NCwgMCwgNjQxNjMsIDAsIDAsIDAsIDY1NDc0LCA0Nzk2LCAxMjI5MiwgMTI2NTk1LCA2NTQ3OSwgMCwgCisgICAgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgNDMwMDIsIDk4OTksIDAsIDAsIDQwNCwgMTI4MjEsIDM3NDEsIDAsIDU3ODgsIDgwOTIsIAorICAgIDY4MjEyLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDM5ODIsIDAsIDQzODgsIDAsIDc0NiwgMTIwNzg0LCAwLCAwLCAxMjAxOCwgCisgICAgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIDM3OTksIDc0MjkyLCAxMTkzNTcsIDAsIDc0NDMwLCAwLCAxMTcwMCwgCisgICAgNDM3NCwgMCwgMTI4MTc5LCAxMzY0LCAwLCA4MDM4LCAwLCA5MTc1OTcsIDEyODY4LCA2OTgxNCwgMCwgNjczNSwgNzM5NzksIAorICAgIDEzMTc0LCA3Mzk2OCwgMTMyMjUsIDAsIDY5ODA4LCA2NTgzNSwgMCwgMjM2NSwgNzg0MSwgMCwgNDI4NTUsIDExODg1NiwgCisgICAgNDI4NjYsIDAsIDAsIDAsIDY2NDM4LCA0MTc4NSwgMTI2MTcsIDY0MTcyLCAxMzE3MywgNDM3MiwgMTE5MzU0LCAwLCAKKyAgICA5ODM1NjgsIDAsIDAsIDkyNDAyLCAxMjgwNjIsIDEyOTY1LCAzODQsIDY0NTEyLCAxMDQwNCwgMTAzNDAsIDExOTM1MiwgCisgICAgMTU1NiwgNTI3NCwgMTMyMTAsIDEyMDEyNSwgMTAwMTcsIDk3MzMsIDQxNzg3LCA5ODMyNDMsIDEyNjk5NCwgNDEzNzMsIAorICAgIDc4MDM5LCAxMjMwMywgMCwgMTMyMzIsIDEzMjMzLCAzNDksIDQ4NjMsIDQxMzcxLCAxMTY1NiwgMCwgMTIwNzAzLCAKKyAgICAxMTk4ODMsIDEyODYxLCA0Mzk4LCA4NTQzLCA2NTYxOCwgMTI4MDE4LCAxMDk2LCAwLCAwLCA0MjY4OCwgMTI0NDEsIAorICAgIDEyMzU1LCAxMTkzNDgsIDExOTM0NywgNDMxOCwgMTA0NTIsIDAsIDgwMzIsIDEzMjQzLCAxMzIzNywgMTI3MTksIDEyNjY0NiwgCisgICAgMTE5MTAxLCAwLCA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIDAsIDEyMDc4NSwgMTE5ODc0LCAKKyAgICA5NDEwNywgMTMxOTUsIDQxNDUyLCA2NDk2MSwgNzcyMiwgMCwgMTA0NTksIDExOTg3OCwgMCwgMTE5ODc5LCA2NjU5MCwgCisgICAgMTI4MTIzLCA0MTUzMywgNjYzMzcsIDAsIDkyMTg0LCAwLCA0OTY1LCA0MzQ0NSwgOTE3NTM2LCA3Mzg0OSwgMCwgNDM2MzgsIAorICAgIDc4NTM3LCAxMjgyODcsIDYyNjEsIDExOTM0MiwgNDMxNDcsIDY2NTcwLCAxOTU3LCAxMDQyMCwgOTgyLCAyNzU2LCAxMzI5MiwgCisgICAgMTMyMDYsIDEyODgyOCwgMCwgMjkyNSwgNzM4MDksIDEzMDU2LCAxMjc1NTksIDEzMjEyLCA0MzIzOCwgMCwgMTMxOTAsIAorICAgIDEzMTg3LCA5MjU0MSwgMTMxOTgsIDExODc5MywgMCwgNTI0MiwgMTE5MTc5LCA2NDQ3NiwgMTY5NCwgODIxNiwgNzEzNjksIAorICAgIDY3NzAsIDQzMzMxLCAwLCA2NTYyMCwgOTgzNzI4LCA0MzU0NCwgMTI2NDY2LCAwLCA0MTQ0NCwgNjU2MjEsIDY5OTU1LCAKKyAgICA5MTk3LCA1MjQ2LCAxMTkxMDYsIDEzMTg1LCA5NzA5LCAxMjAzMjMsIDEyMDMyMiwgMTIzMTQsIDY1NjE2LCA1MjM4LCAKKyAgICAxMTkzMzMsIDAsIDExOTMzNywgNTIzNiwgNDA5NzksIDAsIDc0MjAxLCA4Mjg2LCAxMjg1MzcsIDM5MzYsIDExOTMzMSwgCisgICAgMTE2OTksIDQxMzQ3LCAxMjcyNDksIDEzMjM1LCA4ODQyLCA0MTI0OCwgMCwgNDM3OSwgMTMyMzksIDEyNjkyLCA3OTY5LCAKKyAgICAxMjcyNjYsIDcyMTksIDEyNzI1MCwgMTI4MjUxLCAxMjA1MDksIDAsIDY2MjI0LCA3MzQsIDI5NzksIDEyMDMwMywgNjU2MTksIAorICAgIDk4NzIsIDk1NywgNjQ5MjEsIDE4NDYsIDY2NjMxLCA0MTQ3NywgMTE5MjU2LCAxMjAzMTAsIDc0NTExLCA0MTc3MCwgMTY3MCwgCisgICAgNjQ0MiwgMTIwMzE3LCA0MjQ0NiwgNTM3OSwgMTIwMzE4LCA0MTE2MywgNzQ4MzIsIDEyMDMxNSwgMTIwMzE0LCAxMTUwNiwgCisgICAgMCwgNDI4NDEsIDEzMjY3LCAwLCAwLCA0MTc3NSwgMCwgNzEzMCwgNDE3NzMsIDAsIDEwNjYzLCAwLCAwLCAwLCA2MTUxLCAKKyAgICAxMjExMCwgNDI2NzMsIDY1NTcyLCA2NTI5MywgNjUyNTAsIDEzMjY1LCAxMzI2NCwgNjQ1MTgsIDAsIDYxMDAsIDAsIAorICAgIDkyNjQ3LCA1ODA4LCA2NTkyMiwgMCwgMTI5NjcsIDY2MDQxLCA1NjEyLCA0NTgzLCAwLCAwLCA2ODA5NywgNjQ1NzUsIAorICAgIDEyNjYzNywgMTE5NjUsIDAsIDY4MzU4LCAwLCA2OTc4OSwgMCwgOTIyNjAsIDY4MTAyLCA5Njk4LCA3ODE0LCA3NDQ3NiwgCisgICAgMTE5NjUxLCAxMjg1MTQsIDAsIDQxOTIxLCAxMTg4NTgsIDk3NTYsIDY5ODUsIDExOTI1OCwgNzg0OTAsIDc0MjE5LCAwLCAwLCAKKyAgICAxMTg5OTcsIDgwMTIsIDU2NzQsIDEyMzUzLCAwLCAxMjM2MSwgNTY3NywgNTU4OCwgMCwgNDE5MjUsIDEyODEyNCwgNDE5MjAsIAorICAgIDU2NzMsIDEyMDUzNCwgNTY3NiwgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIDU2NzIsIDEyOTQsIDAsIDc4MDU5LCAwLCA0MjUxMSwgCisgICAgMTcyNywgMTIwNzI1LCA0MjQzNiwgMCwgMCwgMCwgNzQyMjIsIDg3MTgsIDM1NTAsIDczNiwgMTAyNjgsIDQ1MDUsIDEwMzE2LCAKKyAgICA3NDA5MCwgNTgyNiwgNTUyMzIsIDU4MTMsIDAsIDEyMDcxMiwgNTg0MSwgNTgzNywgNTUyMzQsIDAsIDMxMDUsIDEyODI5LCAKKyAgICA1ODM4LCA1Nzk2LCAwLCAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIAorICAgIDU5OCwgMCwgNjQ2NDksIDU4MDYsIDQyMzk4LCAwLCA5MDM3LCA1NjcxLCAxMjAwNDEsIDk4MzI1NSwgMCwgMCwgMTI4ODU1LCAKKyAgICAwLCA4NDcsIDEyODI0MiwgOTUyOSwgMCwgNjY2NTcsIDY5ODAsIDc4NDgzLCAxMjAwMzUsIDc4NDg0LCA5ODM0OTEsIDAsIAorICAgIDEyMDAzMywgNzg0ODYsIDAsIDAsIDEyMDAzOSwgNDI2ODMsIDAsIDk4MzA1NSwgNzExNCwgMCwgMCwgNDMxOTAsIDY1NDYzLCAKKyAgICAxNTU0LCAwLCA0MjYxMSwgNDI1NjMsIDAsIDU2NTEsIDI5MjksIDY3OTIsIDQzMjAxLCAwLCAxOTk2MywgNTY5OCwgMCwgMCwgCisgICAgMCwgMCwgNTY0NCwgMTAyOTIsIDY1NTQ2LCA2OTcyNywgNjgxNDEsIDgzNzIsIDAsIDY1MTE2LCAwLCAxMjAwMjIsIDEwMTc1LCAKKyAgICAxMDM4OCwgNDI3OTksIDk0MTAwLCA0MTAxMywgMTA1NjgsIDAsIDk4MzYxOCwgMjg2OSwgMCwgNDEwMTUsIDE5NDY5MiwgCisgICAgMjc4NSwgNDM2NiwgMCwgMTA5NTQsIDQxODAyLCAwLCA0MjYwOCwgNzg0NjksIDk4ODQsIDQ3NTksIDAsIDAsIDEwMjY2LCAKKyAgICA0MTM1OSwgMTE3MCwgNDMzNjUsIDY5ODEwLCA3MzkwOCwgMTYwOSwgOTAyLCAwLCA2MzkzNiwgMTI4ODc1LCAxMTY2MSwgCisgICAgODEyMiwgNTgxOCwgMCwgMCwgMzg2MSwgOTU0MCwgMTEwMjgsIDI1NTQsIDUxNTgsIDU3MTQsIDIyMTMsIDAsIDAsIDgwNywgCisgICAgNDMwNzksIDAsIDc4NDc1LCA5NzYsIDU1MTEsIDY0NTUzLCAwLCA0MjE1NSwgMCwgNDEzNTYsIDc0MTEwLCAxMTg4MDEsIAorICAgIDEyNjYxNCwgMCwgODY3NiwgOTgzMjkxLCAwLCA1NTgyLCA0NTEsIDYzOTQxLCA1Nzk4LCA5MzQ5LCA0MjAxOCwgMTI3ODU4LCAKKyAgICAwLCAwLCA0MzYwOSwgNTkwNiwgMTIwNTUzLCAxNDQwLCAwLCAxMjg4NTMsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCAKKyAgICA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgMCwgNDMzOTMsIDEwMDk0LCAwLCAxMTUyOSwgMTA4NTcsIDEyMDY0MywgCisgICAgNjY0MzYsIDY1NDYsIDkzLCA4MTAyLCAwLCA2ODQwNSwgMCwgMCwgODE3MSwgMCwgMTE5MDk3LCAxMjcwNjQsIDkxNzU0MywgCisgICAgMzgzLCA3MTU0LCA0MTY1NiwgOTI2MzQsIDk0MDQwLCAwLCA1MTg3LCA3MTI5NiwgMTI3Mjc3LCAxMTI4NiwgNjg2MjAsIAorICAgIDY0MjE3LCAwLCA1MjMyLCAwLCA0MTAwOSwgMCwgNDEwMDUsIDAsIDAsIDk4MzgyNywgODI5MiwgMTk1MDc0LCA0OTgwLCAKKyAgICA4ODYwLCA3Mzk0NywgMTAwMjgsIDY1MjkxLCA3MDc2LCAxMzE4MiwgMTk0NzA1LCAwLCAwLCAxMDYzMSwgNjYwMzEsIDc5NzIsIAorICAgIDAsIDc4Nzg1LCAwLCA3OTAwLCAwLCAxMTMwOSwgMzgwNiwgNDE5OCwgNDI3MjUsIDAsIDY3NjU2LCA5OTk1LCAwLCA5MjU1MiwgCisgICAgMCwgMTI5MzEsIDAsIDQyNjg0LCA3NDI4NSwgMjA4OCwgNjQyMTMsIDY0MzY2LCA2NTE1NiwgODgxNCwgNDIyMzgsIDc0NzcxLCAKKyAgICAwLCAwLCAxMjgzNiwgMCwgMCwgNzQzNDIsIDg1OTMsIDAsIDAsIDY4NDQ1LCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIAorICAgIDAsIDE5NDY1MCwgMTI3MTQ0LCAwLCA5MzQyLCAxMjA0NjQsIDAsIDY0NTE2LCAwLCA3ODc5MiwgMTAxMjksIDQxMDA3LCAKKyAgICA3NDM3NSwgMCwgNDA5OTUsIDEyMjA5LCA0MTAxMiwgMTE5MTM2LCAwLCAwLCA2OTcyNCwgNDA5OTIsIDkyMjY0LCAxMjcxNTMsIAorICAgIDY4NjUzLCA0MzU1OCwgNTUyMiwgMCwgNjEsIDAsIDc0MTA1LCAzNjMzLCA5ODM5MDAsIDY1MTYyLCA0MTIzNCwgMTIwODksIAorICAgIDc4MjgxLCA5NzcxLCA5ODM5MDUsIDEzMjUxLCAxMjg3MDEsIDAsIDYyNjIsIDI3ODQsIDQyNzQzLCAwLCA4MTI2LCA2NjQ4MywgCisgICAgMCwgMCwgNDQxLCA0MjYyMSwgMCwgMCwgNDEwMDIsIDQwOTk5LCAxMTk2MjMsIDQzMjY2LCA3MTA4LCAxOTQ3NzksIDEwODkwLCAKKyAgICA3NDQ4MSwgNjU4MzQsIDgzMjQsIDExOTEwMywgNjQ0MTcsIDc0ODE3LCAxMjc0NjUsIDY0NzM3LCAwLCA5ODM2NTksIDg5MzAsIAorICAgIDY2Njc4LCA3NDI0OSwgMTE5MywgMTAwNTYsIDE4MDAsIDEzMjUzLCAxMzI1MiwgNzgyOSwgMCwgMCwgNzc0MywgMCwgMCwgCisgICAgNzc5MDQsIDkyNjQwLCA3NzkwNSwgOTAzNCwgNjAzOSwgMCwgMTAwNzUsIDAsIDQxMDE4LCA2NTY4MywgMTAzMzgsIDY2NDY5LCAKKyAgICAwLCAwLCAwLCA0MjgxNSwgMCwgNDE5NjYsIDAsIDEyNzQ3MSwgMCwgMTE3OTIsIDQzMDY0LCA0MTAyNSwgOTExLCA3NTM5LCAKKyAgICAwLCAwLCAxMjAzMzksIDY1MTU5LCA2NDM5MCwgMCwgMCwgNTUyMCwgMTE2NjIsIDAsIDY1MzMwLCA0MjgxMiwgMCwgMCwgCisgICAgMTIzMjYsIDk4Mzg1NiwgMCwgNDI4MDgsIDEyODMzNywgOTM0OCwgNjQ5MDEsIDk4Mzg2MSwgMCwgMCwgMCwgMCwgMCwgCisgICAgOTE3NTg0LCA0MzcwMiwgOTgzNTc2LCA1ODU3LCA2NTM0MiwgOTI3MjcsIDExOTEyMCwgMTIwMDc5LCA4NjQ0LCAwLCAwLCAwLCAKKyAgICA3NDI5NiwgNDE5MDksIDAsIDEyMDMzMiwgMjc5MSwgNjk2NjMsIDE4OTEsIDY5ODI0LCAwLCA0MTkwNywgNjY2NDcsIAorICAgIDExODkzOSwgODc2MSwgMTI5NDIsIDU3NDgsIDAsIDEwNzczLCAwLCAwLCA4Nzk2LCA3ODE0OSwgNjQxMiwgMjA2MSwgODUyMCwgCisgICAgMTMxNDYsIDEyNzE4NSwgNjM5MzEsIDAsIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMTIwMzQ1LCA5MjQ1OSwgCisgICAgMCwgOTgzNjYwLCAwLCA3Mzg2MCwgMCwgMCwgNjQzNDUsIDAsIDkyMDEsIDEyODMxNCwgMTk0OTQwLCAwLCAwLCA0MzY3OSwgCisgICAgOTE3NTg1LCA2NTExNywgOTIyNzAsIDAsIDEwNDI3LCAwLCAzODQ0LCAxMjA2NzUsIDk3NTUsIDExMTAsIDY2MTIsIDEyMjIyLCAKKyAgICAwLCAxMjg3ODksIDAsIDAsIDc4MywgMTk0OTM1LCAwLCAwLCA5ODMwNjQsIDE5NDcyMCwgNjUwNTYsIDM2MjAsIDQxMTgwLCAKKyAgICA2ODM3OCwgNDU1NiwgMCwgMCwgMTk0OTMzLCA3NDI1MCwgMCwgNjc2NTcsIDEwNTEwLCA0MzgyLCA2NjQ4MiwgMCwgMCwgCisgICAgMTI3NTI3LCA5MTc3LCA4OTAyLCA5Mzk1OCwgOTgzOSwgMCwgMTI4OTEsIDk4Mzc1NSwgOTgzNjM2LCA2Mzk5OSwgMjAxNiwgCisgICAgNDE5MTcsIDk3ODgsIDYzOTI4LCAwLCAxODYyLCA2NTgwMCwgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgCisgICAgODU3OSwgNDE5MTQsIDc5ODEsIDAsIDY2MDE3LCA0NTA4LCA2NDg4MywgOTI0NTYsIDkyNTIyLCAxMjc4MTQsIDAsIDY0NTkyLCAKKyAgICA3NDI3NiwgMTIwMDgwLCA2Nzg0LCA3ODc4OCwgNjgxODEsIDAsIDAsIDAsIDEyNzUzNCwgMTIxNDcsIDkwMjQsIDY2Mzc4LCAKKyAgICA2NjQ3MiwgOTgzOTI5LCA2NDI4OSwgNjUyODksIDc4MTUxLCA2NjY1OCwgMTk0OTI5LCA2NDUwOSwgNzgxNTIsIDAsIAorICAgIDEyNjUwNSwgMTEwNTEsIDk4MzI5NiwgMCwgMTEzNTUsIDY1ODg1LCAwLCAxMjgzMTAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgCisgICAgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgOTk2MywgNjg2NDksIDEyNjYwOSwgNDA0MCwgMTIwNTcwLCA2MTY3LCAwLCAKKyAgICA2MzkyMiwgNjU5NCwgOTgzNzQwLCAwLCAwLCAzNjI0LCA0MzAzNiwgMCwgNjM4NywgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgCisgICAgNDE5NTUsIDAsIDYzOTkzLCAxMDQ0MCwgOTYxMSwgNjU2MDUsIDY4MDMsIDAsIDc3MzgsIDYzOTg2LCAxMTQ0NiwgNjM5ODQsIAorICAgIDkyNjQxLCAzNDM1LCA3ODE2NCwgNDM4MTQsIDQzODEwLCA3MDI5LCA2NDI1OCwgNDEyOTIsIDExODg5OCwgMTI3NDgsIAorICAgIDQyNzQyLCA5NTE3LCAxMTUxOCwgMCwgNzg3OTAsIDAsIDY3OTkzLCA2Mzk1NiwgNDI0NTgsIDYzOTU0LCA2Mzk1MywgCisgICAgNjM5NjAsIDk1OTEsIDQ1MTYsIDEwMjE3LCA2ODM3MCwgMTE0NjksIDY5Njk3LCA0MjMwNiwgMjcyMywgMTE4OTQ3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMTM5NywgMjg4MCwgMCwgMCwgMjg3MiwgMCwgMCwgMzQ5OCwgNDM3OCwgOTE3NTM5LCA0MjcwLCAwLCAKKyAgICA2NTU1MSwgNjgyMDUsIDY2MzMsIDQzMzg3LCAwLCA1MjMwLCAwLCAwLCAwLCAwLCAwLCA4MTYxLCAzOTMsIDEyMDEzLCAwLCAKKyAgICAwLCAxMjY0NzksIDQxNSwgNjM5NjQsIDYzOTYzLCA0MjM0NSwgOTIzMTAsIDUxODMsIDE4NzcsIDQyNDk4LCAwLCAyOTI3LCAKKyAgICAwLCA2Mzk2MSwgNDQ3MiwgMCwgMCwgNzgxNTksIDY5Njk5LCA5MTc5MzYsIDQyMzQwLCA0NzU2LCAxMjgwNzgsIDcwODEsIAorICAgIDEwNzMwLCA3NjkxLCAxMDMzMSwgNjM4MzAsIDExOTYyNSwgNDI5MjIsIDQyMTAzLCA4NjI4LCA5ODEzLCAwLCA0MjQ1MywgCisgICAgMTYwNCwgOTU2NSwgMTA1MzksIDY5NzAxLCA2NTc2NCwgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIAorICAgIDY0ODczLCAxMTk5MiwgMCwgMCwgNjM5ODAsIDExODAxLCAzNjIyLCA5ODMxMjQsIDY0MzM2LCAxMjAxNywgMTA0NjMsIAorICAgIDYzOTgxLCA0OTY3LCA2NDE4OSwgMTk2NiwgNDM2MjgsIDAsIDk4MzI5MiwgMCwgMCwgNjM5NzEsIDQzNDcsIDQ0MTYsIAorICAgIDQyMDk4LCAxMTAwOSwgMTA2OTQsIDYzOTczLCA0MDIsIDAsIDEzMTQ3LCAxMjg2OTIsIDQyMTAwLCA2NDY0NiwgMTMyMjgsIAorICAgIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIDAsIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgMCwgMTk0NjcwLCAwLCAKKyAgICA5MjM1MSwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCA5MjM1OSwgNjQ5NDIsIDk4MzU1OSwgMTk0NzMzLCA5ODM2ODYsIAorICAgIDE5NDczMiwgMCwgNzQzMDEsIDAsIDExMjgwLCAwLCA2OTc4NCwgNzQwNjAsIDAsIDAsIDExOTY2NCwgNTE0NSwgMTI0ODYsIAorICAgIDY1MDE4LCA2NjUxNiwgNTQwOSwgMTI3Mzc5LCAxOTQ2NjksIDc0MDIsIDUzOTksIDk2ODUsIDc0MDg5LCA3OTUyLCA1NDAxLCAKKyAgICAwLCA2NjYxNiwgNjg0MjEsIDk4MzkxOSwgMCwgNTQwNSwgMTI3ODc1LCA2NDg2NiwgMCwgMTE5NTgzLCAxMjgzNDUsIAorICAgIDc4Nzg0LCA3NDI0OCwgMTEzMzAsIDE5NDcyMywgNjQ2OTAsIDMyNTQsIDAsIDAsIDEyODIwNywgNDIzOTAsIDQzNjc4LCAKKyAgICAxOTQ3MjUsIDk4MzkwOSwgNjUwNzcsIDAsIDYzODgsIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCAwLCAKKyAgICAzMzc3LCAwLCAwLCAwLCAwLCA3ODIyOCwgMCwgOTgzNzYyLCA0MjY5MSwgOTE3ODg2LCAxMjcxOTgsIDc0NzY3LCAwLCAKKyAgICAxMjcwNzUsIDEzNzksIDI0NiwgMCwgOTgzNzYxLCAzNzg4LCA5ODMxMDYsIDExMDQxLCA5MjU0OSwgNjYzMDQsIDAsIDAsIAorICAgIDg5MTcsIDQyNDAzLCAzMDEsIDAsIDAsIDAsIDAsIDAsIDk4MzY5NywgMTA2NTYsIDAsIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCAKKyAgICA5MjIxNywgMTMxNjMsIDk4MzIwNCwgMTIwODMxLCA3NDU5NywgMzE4MiwgMCwgMCwgMCwgNjUwMzQsIDY1ODg5LCA0MjE2OSwgCisgICAgNDc1NSwgNzQyNDQsIDE5NDYyMSwgMTE0NDMsIDAsIDY2MzE5LCA3NDU5OCwgNjA4LCA2MDAsIDAsIDEyMTksIDM5MzQsIAorICAgIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDAsIDc0NDg1LCA0MjQ0MiwgNjU0NzAsIDk4MzkwNywgNjQyMDIsIDEzMTYwLCA3NzU5LCAKKyAgICA0MjQ4MiwgNDg1LCAxMjgwMDYsIDAsIDk4MjgsIDAsIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgCisgICAgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIDExOTYzMSwgMTEwMDIsIDQyNDcwLCAwLCAxMTg5NDYsIDAsIDAsIDc0MDQxLCAwLCAKKyAgICA3MDA0NSwgNDM1MzksIDU0MTEsIDQyMTk2LCAwLCAwLCAwLCA5MTUwLCAwLCA0MjM5MywgMTMwODYsIDEzMTAsIDE5NDY4NywgCisgICAgOTMzNywgMTIwNTIsIDEwNjQzLCA1NTI3MSwgOTgzMTc5LCAxMjE2NiwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgCisgICAgNjU2MTEsIDAsIDAsIDE5NDc1NiwgNzQzMTAsIDY1NTQsIDAsIDExOTE0LCA1NDUyLCAwLCAwLCAwLCAwLCAwLCAxOTQ2ODEsIAorICAgIDkyNTYwLCAyNzEzLCAwLCA5NjUwLCA0MzMzMCwgMCwgMTk0Njc1LCAxNDA2LCAwLCAwLCA5MjY1OSwgMCwgNjgyMjMsIAorICAgIDQxNDMsIDE5NDY3NywgMCwgNjU3NDgsIDQxNDEsIDk2ODIsIDY1Mjg3LCAxNTA4LCAxMjcwMTMsIDg3NzksIDEwNTY5LCAKKyAgICA4NzI1LCAxMzI5OSwgNjY2MzgsIDY1NzUwLCA0MjI2MywgNDE0NSwgNjM4MCwgNjU3NTEsIDY2NjEzLCA0Mzk5NCwgNjU3MzgsIAorICAgIDU1MjUwLCA5MTg1LCA5NTUwLCAwLCA0MzQwMywgMCwgMCwgMCwgNjU3MzYsIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDk4MzIwNSwgCisgICAgMTI5NTUsIDEwNTk2LCAyODg4LCAxOTQ2NDUsIDAsIDAsIDk2NTcsIDkwMTksIDE5NDc2NiwgMCwgMjg3OCwgNTM5MCwgMCwgCisgICAgMTk0OTYxLCAwLCA2ODY3OSwgNDM1NTIsIDc1MDEsIDYzMjgsIDAsIDEwNDI5LCAxMDM2NSwgMCwgMCwgNDE5NDYsIDc1MDMsIAorICAgIDUyMzUsIDgwMywgNjgzODEsIDAsIDAsIDg5ODYsIDEyNjU0MiwgMTA2MzIsIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgMCwgCisgICAgMTI2NjQ3LCAwLCAxMTg4ODcsIDE3OTEsIDUxOTEsIDkyODgsIDY0ODIyLCAyODkyLCAwLCA0MzM5NCwgNTU1LCAwLCAwLCAKKyAgICA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIDcyODksIDc0MDU1LCA2NDE2MSwgODg1NCwgNjQxNjIsIDU4NTgsIAorICAgIDQxOTI3LCAxMDU4MiwgMCwgMTc4NCwgMTM2MSwgMTk1MDQ3LCAwLCA3OTA1LCAwLCA2NDg2OCwgMTI4ODEzLCAxMzE1OCwgCisgICAgOTIxNjYsIDcyMTEsIDAsIDkzNzEsIDczOTczLCA5MTc1NTMsIDY4MjgsIDE2MjUsIDkyMzAyLCAwLCAxMzQyLCA2ODQ0MCwgCisgICAgNjQxNzEsIDEyNjcwNCwgMTA5MDMsIDk4MzQ5NCwgMCwgMCwgMCwgMCwgNDQ4MiwgNDE2MDYsIDAsIDEyODU2OSwgOTgzMTEyLCAKKyAgICAwLCA2NDM4MSwgMCwgMCwgMTk1MDkwLCA0MjI0NSwgMTI2NDY3LCA0MTk3MiwgMCwgNDQ0LCAwLCA5MTI3LCA2NjY4NywgCisgICAgNjY2MTksIDEyNjQ4OSwgNzgwMjUsIDAsIDExMzQ5LCA0MDk5MSwgOTE3NTcwLCAwLCAxMTk1OTksIDEyMDgzMCwgMCwgCisgICAgMTE5NywgMTI4MjgyLCAxMTQ5LCAxOTQ5NzAsIDAsIDAsIDQwOTkwLCA0Mzc2NSwgMCwgMzQ5MiwgMCwgMTI3OTQyLCAwLCAwLCAKKyAgICAwLCAxMjgzOCwgOTgzOTc4LCAxOTk0OCwgMCwgMzA5OSwgMCwgMCwgNDEwODcsIDAsIDAsIDAsIDExOTA1OSwgMTIwMzYsIAorICAgIDQxMzA5LCAwLCAwLCA4MTUyLCAwLCA0MTU1MCwgMTIyMjcsIDk4MzYxMywgMCwgMTI4MjgsIDEyNzUxMSwgMCwgMCwgCisgICAgMTIwNzA4LCAwLCAwLCAxMDM4NiwgMTE5NTc0LCAwLCAwLCA5MjY4MCwgOTgzNzg5LCA2ODE1NCwgMCwgMTc0MywgMCwgMCwgCisgICAgOTIyMzksIDY1MTg2LCA5MTc1NzEsIDAsIDk2MDYsIDAsIDAsIDY0NDM5LCAwLCAwLCA5MjY4NiwgMCwgMCwgMTk0OTY3LCAwLCAKKyAgICAwLCAzMzk1LCA5MzYyLCAxMDg3OCwgMCwgMCwgNzgzNjIsIDY0ODMwLCAwLCAxMjY1NTcsIDQxMDkxLCAzNDI2LCAxMzQ0LCAKKyAgICA4ODcwLCAwLCAwLCA0NzM1LCAxMjcwMTcsIDYxMTksIDEyODIyLCA0MjY5OSwgMCwgOTgzODI0LCA3NDgxOCwgMTQyMywgMCwgCisgICAgNDI2MzcsIDQxMDgwLCAwLCAxMjAzOSwgMTA1NTksIDAsIDExODg5MiwgMCwgOTQ3MiwgMCwgMTE5MjksIDAsIDcxNzAsIAorICAgIDk1OTYsIDYxMzAsIDEyODgyNiwgNDM2MjksIDExNTc5LCA3ODcxMywgMCwgMTk0NzQwLCAxMjg2OTEsIDkyMTg1LCA2NjY5OSwgCisgICAgNjQ0NDAsIDEwMDQsIDkyNTg0LCAxOTQ3MzcsIDQzMjM0LCA2NjAwOCwgMTI2MjcsIDAsIDY4NDE0LCAwLCA0MzYxOSwgCisgICAgNDMzMDMsIDExMzAwLCA0MzMwNCwgOTY4NiwgNTg5MCwgMTE3NzYsIDc1NTgsIDEyNzE1OCwgNjU2MjcsIDAsIDEwNzE4LCAKKyAgICAxMzE1NCwgMzQ2MSwgOTEzOSwgMCwgMCwgMCwgMCwgNjUzNjUsIDczODc3LCA2NTYyOCwgNzgwMTksIDEyMDMxOSwgMCwgCisgICAgNDE3MDgsIDEyODYwLCAyNjQxLCAxMjA2OSwgMTA4MzgsIDU0MDMsIDEwMzUyLCA3MDA4NSwgMTAwNjEsIDQzMjM3LCAwLCAKKyAgICA1MTQwLCAyMDksIDEyODg0NywgNDE3MDQsIDQxMDU2LCA0MzA3OCwgMTI4MTI1LCAxMTg4MDksIDAsIDEwODk5LCA2NTQ2OSwgCisgICAgOTIzNjIsIDAsIDAsIDI0MTAsIDk5MywgMCwgMTIwNTg5LCAxMjA2ODksIDc4NjkzLCAwLCAwLCA3MjMyLCAwLCAxMTkyNTMsIAorICAgIDAsIDcxMTAsIDc0NDYyLCAyMDY2LCAxMDQ4OSwgNDIxNjYsIDQzNDYzLCAxMDY1OSwgMzYwMCwgMCwgNDIyNCwgMTMzNiwgCisgICAgNDE1MTgsIDAsIDAsIDAsIDAsIDQxMTM5LCA2NDgyMCwgOTI1MzgsIDEyOTY2LCA0MTEzNCwgMCwgMCwgMCwgMCwgMjcyLCAKKyAgICA0MjYzLCA4NzkzLCAwLCAwLCA0MTUwMiwgMCwgOTgzLCAxMjU0OSwgMCwgMCwgMTE5MCwgNDEwOSwgMTMzNSwgODQxLCAKKyAgICA1ODg4LCA0MTM1OCwgNjQ4NjMsIDk1NDQsIDQzNDgxLCAwLCAxOTQ4MDYsIDcwMDI3LCAyMDk5LCA1MTIwLCAyNDA5LCAKKyAgICA3Nzk5LCAwLCA3NDQyNCwgMCwgMCwgNDczMSwgMCwgNjY2MjksIDAsIDAsIDEyNTUsIDQxNDksIDkyNDcsIDAsIDk5MTMsIDAsIAorICAgIDAsIDY0OTE0LCA5MTc3ODcsIDY1MTAxLCAwLCAxMTY5NCwgOTI0NzUsIDExNjkwLCA1ODM1LCAxMjcxNjQsIDY2NjI1LCAKKyAgICAxMDg0MiwgNDEzNTQsIDQyMTIzLCA0MzA5NywgMTE2ODgsIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCAwLCA4MTgwLCAwLCAKKyAgICAwLCA5OTcyLCA3Mzg2NSwgNDUxOSwgNjExNCwgMTA4OTgsIDQzMDcyLCAwLCAwLCA5Mzk2MCwgOTgzMzIyLCAxMjY1ODEsIAorICAgIDEwNjk1LCAwLCA3NTQwLCAwLCA4ODEsIDc4NTcsIDYwNjcsIDY1MTY0LCAwLCAwLCAwLCAxMzMxMSwgNjg0MDMsIDQxODU3LCAKKyAgICA2NDMyMSwgODM1OSwgMCwgMTI2ODksIDAsIDE5NDU5NCwgMCwgOTgzMzEyLCA5ODM4ODEsIDY4MTgzLCAwLCA5ODMzMTQsIAorICAgIDEyODcsIDU0MzYsIDAsIDk4MzMxNywgNzQxNDIsIDkyMzI4LCA3NDE1MiwgMTE5MDc4LCA2MDUxLCAxMDQ5NywgNjk2NjgsIAorICAgIDg5ODUsIDEyMTA5LCA5ODMzMjMsIDAsIDEyNzI0MiwgMCwgMCwgMzY1MiwgMTA1MzcsIDAsIDEyNzYsIDEyMDQ0MCwgNjU0OSwgCisgICAgMjc5LCA3Mzc0NSwgMCwgMCwgMCwgMTQ4OSwgMCwgMCwgMCwgMzg5OSwgMTAwNywgNDIxMjQsIDk4MzU1NywgNDIxMjIsIAorICAgIDkyMzM3LCA5MjM2NywgMCwgMTE5ODUsIDEzNDUsIDc4NjAwLCAwLCAwLCA4OTU2LCA0MzA4MywgOTQwNTcsIDQyMTM4LCAKKyAgICA3ODYxMCwgMCwgMTIxNTEsIDc4NjA4LCA3ODYwNCwgNzg2MDUsIDYyODUsIDc4NjAzLCA3ODYxMiwgNzg2MTMsIDY1OTQyLCAKKyAgICA0OTIsIDg2ODUsIDAsIDk4Mzc1OSwgMCwgNzg2MjIsIDQzNzEyLCAyNTgyLCAxMTQ3MCwgNjQ1MzgsIDc0NDQsIDc4NjE1LCAKKyAgICA3ODYxNiwgMjI5NywgMCwgNzM4MzcsIDExOTgyMywgMjUyNywgMTE5ODI0LCAxOTcsIDI3OTksIDkyNTk0LCA0MTk0NCwgCisgICAgMTIwMjc2LCA5OTMzLCAwLCA2NjUxNSwgNzY3LCA1NTI0LCA3MDI4LCAwLCAwLCAxMTk4MjcsIDExOTgxNywgMTE5ODI4LCAKKyAgICA3ODYzMywgMTA4OTYsIDAsIDE3OTksIDEyMDQ5NywgNjk3MSwgNzQzMzYsIDEyODM0MiwgMCwgNjUzNDAsIDExODk3OSwgCisgICAgNDE1NTEsIDI0MzQsIDk0MDE4LCAwLCAxMjA1NzksIDAsIDQ2MzEsIDAsIDAsIDY0MDcsIDAsIDYzMzgsIDQzMjE0LCAwLCAKKyAgICA3NTcwLCAwLCAzMTkyLCAwLCA4NDE0LCAwLCA5Mzk4MywgMCwgMCwgMCwgOTE2NCwgNjY2MTIsIDkzOTU5LCAzMTcxLCAKKyAgICA2NjIzLCA0OTYxLCA2ODM5NiwgODg2LCA1NTIxNiwgODY1NCwgNzg4MzIsIDk5OTMsIDc0MzkwLCA2NDYwMywgNzAwNjYsIAorICAgIDY5MjQxLCA5NTk5LCA3ODYyOSwgNDMwODQsIDc4NjI3LCA3ODYyOCwgNzg2MjUsIDIzOTksIDY5NjkzLCA4OTk0LCAxMDk0NCwgCisgICAgNDEyMDgsIDk4MzcxMywgNDExNjgsIDgxNzgsIDAsIDMzNjcsIDkyMzM0LCA0MjUxMCwgNzg2NDEsIDc4NjM2LCA2ODA0LCAKKyAgICA3ODYzNCwgMTk0NywgMCwgMCwgOTI2ODEsIDQyNzU5LCAxMTA2OCwgMTcwNSwgOTMzMSwgMCwgNzQ3OTgsIDkxODEsIAorICAgIDY1MzU5LCAwLCA4MDE3LCAxMTk4MzEsIDY1MDk2LCA2NjcyMCwgMCwgNDM0NzUsIDAsIDQ5MDksIDEyMTI2LCAxMjg2NzMsIAorICAgIDEyMDY5NiwgNDkwNCwgOTgzMzMzLCA2OTY1MCwgMTM2NSwgOTI1MywgNDI3NTcsIDQzNDM2LCA3NDYyLCAwLCAwLCAwLCAwLCAKKyAgICAxMTk1ODcsIDY0NDE1LCAwLCAwLCA1Mzk4LCAwLCAxMjczODYsIDkzOTUzLCAwLCAwLCAxMTkwMTUsIDAsIDAsIDk0NzYsIDAsIAorICAgIDk4Mzc3NywgMTI3NjMsIDEyNjYwMywgMzYyOSwgMCwgMTMwMDUsIDAsIDM2MjgsIDAsIDAsIDkyNTAyLCAzNDY5LCA0MjEwNywgCisgICAgNDIxMTYsIDkxNzU3OCwgNjQ4MDksIDI5MjgsIDQ5MDUsIDk4NTMsIDg1MSwgOTA0MCwgMCwgNjQ2NjUsIDQzMDg2LCA5MTE0LCAKKyAgICAwLCA0MjU4MywgOTMxNSwgNDgyMiwgNDkwNiwgMzg1MiwgMjg0NywgMTE5ODIxLCAzMjM2LCAxMTMxNywgMTI1MSwgNzc3NywgCisgICAgNDE4NTIsIDExNDEwLCAxMDk2NCwgMCwgNDMyMjIsIDEyNjQ2LCAxMjAyNjksIDEwMjU5LCA5ODY1LCA2NTgyMSwgMCwgCisgICAgNjAxOCwgOTIyOTAsIDAsIDEyMjc2LCAwLCA2ODM3MiwgMCwgOTIyNTksIDExOTI0NCwgMCwgOTgzMjMwLCAxMDQ2NywgMCwgCisgICAgMjQ0MywgMTA5MTgsIDc4MjE3LCAxMTk4MjUsIDEwMDEsIDkyNDEsIDE5MjcsIDAsIDAsIDczOTg3LCAxMjc4ODUsIDAsIDAsIAogICAgIDExODgyOCwgMTIwMjcxLCA2NTY3OCwgMTI4NjcsIDAsIDgyNjAsIDc3OTQ1LCA3NTE5LCAxMTUwNSwgMTIyNzQsIDg5MDQsIAogICAgIDUxOCwgNjU4NTcsIDAsIDEyODY3NCwgMTMyMDQsIDQzODcsIDg1NywgMCwgNjUzNjksIDAsIDkyMzM2LCA0MzEyNSwgCiAgICAgMTIwNTkyLCAwLCAwLCAwLCAwLCA1MTM2LCAxOTY4LCA5ODMwNDEsIDEyNjYyNywgMTMzNywgNjQ5NjcsIDE2MjksIDAsIApAQCAtMTg3NzcsNDQgKzE4Nzk2LDQ0IEBACiAgICAgNzg2OTgsIDc4Njk3LCA3ODY5NiwgNzg2OTUsIDg3MTAsIDQyNDk1LCAxMTg5NTYsIDAsIDQwNTEsIDEwNDYwLCA0MzM2NCwgCiAgICAgMTE4OTE3LCAxMzU2LCAxMjE2MSwgNDI3MTMsIDEyODg1NywgMTI3MjY4LCAxNjE5LCA5NzAzLCA0MzE1MiwgNDI0ODksIAogICAgIDQyMTEyLCAxMjc5NzgsIDE4NzUsIDEwODA4LCA0MjEwOSwgMTIwMjg0LCA0MTg2MCwgNjQ4NjIsIDEzMzA1LCA2NDkwNywgCi0gICAgNTI4OSwgMTMxNDQsIDEyODY1OCwgMCwgNTU3NSwgOTY3NSwgMCwgNTk0MCwgMjI2LCAyNjQ5LCA2MzM2LCA5ODMyNjksIAorICAgIDUyODksIDEzMTQ0LCAxMjg2NTgsIDAsIDU1NzUsIDk2NzUsIDAsIDU5NDAsIDIyNiwgMjY0OSwgNjMzNiwgOTgzMjc3LCAKICAgICAxMTk4MzAsIDQzMjM2LCAzMzgyLCA0MjQ0OSwgNjQ5OCwgMTY1OCwgMTE5MzYsIDc4MjMyLCAwLCAxMTI2OSwgMTAxNTEsIAogICAgIDczNzU5LCA0MzEwMCwgNjk4ODgsIDY1NTA4LCAwLCAwLCAwLCA4OTM1LCA5MTc5ODUsIDAsIDAsIDAsIDYxNiwgNzQ3NTMsIAogICAgIDY1MTc4LCA0Njg0LCA3ODcwMSwgMTE5NjUzLCAwLCAxMjY1NTEsIDAsIDYwNDgsIDc0NDYwLCA0MjExMCwgNzM5NjUsIAogICAgIDEwODcwLCA4NTU3LCAxMTA1NCwgNjg2NjQsIDExOTA0OSwgOTY4MSwgNDQ3NSwgMCwgNDExNDIsIDIxMDAsIDAsIDEyMDczMSwgCi0gICAgNjAzNSwgMCwgNzY1MSwgMTAyOTYsIDY0NDQzLCAwLCA5ODMyODcsIDkxNzk4NywgMCwgMTE4OTY2LCA3NDE0NCwgNDA5OTcsIAorICAgIDYwMzUsIDAsIDc2NTEsIDEwMjk2LCA2NDQ0MywgMCwgOTgzMjk1LCA5MTc5ODcsIDAsIDExODk2NiwgNzQxNDQsIDQwOTk3LCAKICAgICAwLCAxMDM5MiwgMTAzMjgsIDQwOTk4LCA0MzQ2MiwgNzQ0ODgsIDAsIDk4MDAsIDg5NzksIDAsIDEzMzA3LCA0MTAwMCwgMCwgCiAgICAgMTE5MjM5LCA2NDg3LCAzMzg2LCAwLCAxMDM0NCwgMCwgNjUyOTksIDUzOTQsIDQzMjQ2LCA3ODI0MywgMTAyMjAsIDY2NTA1LCAKICAgICA0MTIwMCwgMTI4NTgzLCA0NDI1LCAwLCAwLCAwLCA0MzA3NCwgNzM3OTksIDk4MzIwMCwgNzgxNDcsIDAsIDEyMTczLCAKICAgICA3ODU0NSwgMCwgMTI3MDExLCA2NTMzOCwgMCwgMCwgMTE5NTgyLCA0NDc0LCAwLCA0MzA5MywgMTI4NjQ0LCAxNTg3LCAwLCAKLSAgICAxMjczNzIsIDY0NDc1LCAxMjgwOTgsIDEzNjksIDk4MzY2MywgOTk1OSwgNzkyNywgMCwgNDU2MCwgMCwgMCwgOTIyNzcsIDAsIAotICAgIDY0OTQ4LCA0NDMwLCA3NDM0NywgNDI2MDEsIDQ1MTQsIDY2NDM0LCA5Mzk1NSwgODE5NCwgNjU0NjIsIDEwNjI2LCAxMDk2NSwgCi0gICAgMCwgODg5MywgOTgzMjkzLCAxMjU0MiwgMCwgNjUzNDEsIDAsIDY1ODI5LCA3OTI1LCAxMTk4MjIsIDEwNDc1LCAwLCAwLCAKLSAgICAxMzUyLCAxMTA2OSwgNzcwNywgMTI3NTYwLCAxMjY0ODYsIDY1Mjc5LCAxMjcxMDIsIDY4MjA3LCAxMjcxMDAsIDcwOTksIAotICAgIDYwNDAsIDEyNzA5NywgMTAwNzEsIDAsIDkzMzYsIDQzNzUwLCAwLCA4ODk5LCA3Nzk4LCA2NDQ3NCwgNjQyNTksIDY5ODczLCAKLSAgICA2NTE4OCwgNzgyMCwgNDMwMTgsIDEyNzA4MiwgMCwgNzc0NiwgMTQ5MiwgNzg1NTEsIDEwODg0LCA3Nzk4MiwgMCwgNTEyNywgCi0gICAgMTEyODUsIDQyNTAxLCA1NDk1LCA0MjczLCA0MzA5NSwgNDE0MjYsIDEwODQ5LCA1NzMwLCAyOTk5LCA2MzQyLCA2ODYzNiwgCi0gICAgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgNTQ5NywgMTE3MDgsIDAsIDAsIDYzMjMsIDE5NDY4NCwgODIyNCwgMCwgCi0gICAgODkzOCwgNjA0MywgMTI3MzgsIDAsIDk4MzA3NiwgNTMyMSwgMCwgMTk0Nzk4LCAwLCAyNTg5LCA3NDMzMiwgMTY4OSwgCi0gICAgNzgwMiwgNDY4MywgNzQzMTgsIDQyNzA0LCAxMjAyOTYsIDExOTA1LCAwLCAwLCAxMjg1MTYsIDEyODE2MywgNzQ1MTMsIAotICAgIDYwNDksIDAsIDQwMjcsIDgzNCwgMTE4OTYyLCAxODAzLCAwLCAxNTAzLCAwLCAwLCA3MTMxMiwgNTczMSwgMTM4MSwgMjM4NywgCi0gICAgMCwgMCwgODI4OSwgNjQ1MjUsIDY1ODE3LCAyODgxLCA0MzE0MiwgMCwgOTYwMSwgMjg3OSwgOTY2OCwgOTc2NiwgMCwgCi0gICAgNTcyOSwgOTE3ODMzLCA3NDQxMCwgNjAzNiwgNjQ4ODEsIDQwMjYsIDkzNjEsIDEyNzA5MSwgMjg4NywgMCwgMzUyNiwgCi0gICAgNjI5OCwgMCwgNzc4OTcsIDEyMDA5NSwgNzg1MTksIDAsIDg1NzIsIDYwMjEsIDc3ODk2LCAxMjgyODgsIDc3ODk1LCAKLSAgICA0MzE1NSwgMCwgMTE5ODQ5LCAzMTQ2LCAxMDk1OSwgOTQ4MywgMCwgNzc4OTMsIDEwOTgxLCAxNjYsIDkxNzg0MSwgODYzNSwgCi0gICAgOTgzNjA2LCAxMDYyMywgNDA4LCAxMTkwNTgsIDEyNzUwNywgMTMyOTgsIDAsIDc0MjYsIDQxNjQxLCAxMjcxNywgMCwgCi0gICAgNzYwNywgMTA2MzksIDQzMzk2LCAwLCAwLCA0MTY0MywgNzQxMzQsIDk4MzA1NCwgODcxMywgNDE2NDAsIDEwMjIxLCAKLSAgICA0MTY0NSwgNjY3MTIsIDY2NDUsIDY0NiwgNjY3MjYsIDY2NzExLCA0MjEyOSwgOTM5OTQsIDc3OTAxLCAzNDcyLCA4Njk3LCAKLSAgICAwLCAwLCA5ODM4MDYsIDAsIDAsIDAsIDU4MDksIDE5NTAsIDExOTM1NiwgOTI0MzIsIDc0NTcyLCAwLCA0MjEzNiwgMCwgMCwgCi0gICAgMCwgMCwgMzI0NywgMTE5ODU0LCA2NTAxNywgOTgzOTQ0LCA2ODQyOCwgNjY2NjgsIDAsIDAsIDEwOTgzLCAwLCAwLCAwLCAKLSAgICA0MTU2NywgMCwgMCwgMCwgMTk0NjI0LCAxMTk4NTMsIDAsIDAsIDgyODUsIDAsIDQ1MDksIDAsIDY2NDcxLCAxMjIxNiwgMCwgCi0gICAgNDA5ODgsIDkyNTkyLCA3NDgwOSwgNDE3MjcsIDAsIDQyODQ4LCAyMzk2LCA5MTc3NjYsIDAsIDc0MDE4LCA5MTc1MzgsIAorICAgIDEyNzM3MiwgNjQ0NzUsIDEyODA5OCwgMTM2OSwgOTgzNjcyLCA5OTU5LCA3OTI3LCAwLCA0NTYwLCAwLCAwLCA5MjI3NywgCisgICAgOTgzNjIxLCA2NDk0OCwgNDQzMCwgNzQzNDcsIDQyNjAxLCA0NTE0LCA2NjQzNCwgOTM5NTUsIDgxOTQsIDY1NDYyLCAKKyAgICAxMDYyNiwgMTA5NjUsIDAsIDg4OTMsIDk4MzMwMSwgMTI1NDIsIDAsIDY1MzQxLCAwLCA2NTgyOSwgNzkyNSwgMTE5ODIyLCAKKyAgICAxMDQ3NSwgMCwgMCwgMTM1MiwgMTEwNjksIDc3MDcsIDEyNzU2MCwgMTI2NDg2LCA2NTI3OSwgMTI3MTAyLCA2ODIwNywgCisgICAgMTI3MTAwLCA3MDk5LCA2MDQwLCAxMjcwOTcsIDEwMDcxLCAwLCA5MzM2LCA0Mzc1MCwgMCwgODg5OSwgNzc5OCwgNjQ0NzQsIAorICAgIDY0MjU5LCA2OTg3MywgNjUxODgsIDc4MjAsIDQzMDE4LCAxMjcwODIsIDAsIDc3NDYsIDE0OTIsIDc4NTUxLCAxMDg4NCwgCisgICAgNzc5ODIsIDAsIDUxMjcsIDExMjg1LCA0MjUwMSwgNTQ5NSwgNDI3MywgNDMwOTUsIDQxNDI2LCAxMDg0OSwgNTczMCwgCisgICAgMjk5OSwgNjM0MiwgNjg2MzYsIDc0MzA0LCAzNzEsIDY0MzczLCA2MDIzLCAxNjksIDU0OTcsIDExNzA4LCAwLCAwLCA2MzIzLCAKKyAgICAxOTQ2ODQsIDgyMjQsIDAsIDg5MzgsIDYwNDMsIDEyNzM4LCAwLCA5ODMwNzYsIDUzMjEsIDAsIDE5NDc5OCwgMCwgMjU4OSwgCisgICAgNzQzMzIsIDE2ODksIDc4MDIsIDQ2ODMsIDc0MzE4LCA0MjcwNCwgMTIwMjk2LCAxMTkwNSwgMCwgMCwgMTI4NTE2LCAKKyAgICAxMjgxNjMsIDc0NTEzLCA2MDQ5LCAwLCA0MDI3LCA4MzQsIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgNzEzMTIsIAorICAgIDU3MzEsIDEzODEsIDIzODcsIDAsIDAsIDgyODksIDY0NTI1LCA2NTgxNywgMjg4MSwgNDMxNDIsIDAsIDk2MDEsIDI4NzksIAorICAgIDk2NjgsIDk3NjYsIDAsIDU3MjksIDkxNzgzMywgNzQ0MTAsIDYwMzYsIDY0ODgxLCA0MDI2LCA5MzYxLCAxMjcwOTEsIAorICAgIDI4ODcsIDAsIDM1MjYsIDYyOTgsIDAsIDc3ODk3LCAxMjAwOTUsIDc4NTE5LCAwLCA4NTcyLCA2MDIxLCA3Nzg5NiwgCisgICAgMTI4Mjg4LCA3Nzg5NSwgNDMxNTUsIDAsIDExOTg0OSwgMzE0NiwgMTA5NTksIDk0ODMsIDAsIDc3ODkzLCAxMDk4MSwgMTY2LCAKKyAgICA5MTc4NDEsIDg2MzUsIDk4MzYwNiwgMTA2MjMsIDQwOCwgMTE5MDU4LCAxMjc1MDcsIDEzMjk4LCAwLCA3NDI2LCA0MTY0MSwgCisgICAgMTI3MTcsIDAsIDc2MDcsIDEwNjM5LCA0MzM5NiwgMCwgMCwgNDE2NDMsIDc0MTM0LCA5ODMwNTQsIDg3MTMsIDQxNjQwLCAKKyAgICAxMDIyMSwgNDE2NDUsIDY2NzEyLCA2NjQ1LCA2NDYsIDY2NzI2LCA2NjcxMSwgNDIxMjksIDkzOTk0LCA3NzkwMSwgMzQ3MiwgCisgICAgODY5NywgMCwgMCwgOTgzODE1LCAwLCAwLCAwLCA1ODA5LCAxOTUwLCAxMTkzNTYsIDkyNDMyLCA3NDU3MiwgMCwgNDIxMzYsIAorICAgIDAsIDAsIDAsIDAsIDMyNDcsIDExOTg1NCwgNjUwMTcsIDk4Mzk1MywgNjg0MjgsIDY2NjY4LCAwLCAwLCAxMDk4MywgMCwgMCwgCisgICAgMCwgNDE1NjcsIDAsIDAsIDAsIDE5NDYyNCwgMTE5ODUzLCAwLCAwLCA4Mjg1LCAwLCA0NTA5LCAwLCA2NjQ3MSwgMTIyMTYsIAorICAgIDAsIDQwOTg4LCA5MjU5MiwgNzQ4MDksIDQxNzI3LCAwLCA0Mjg0OCwgMjM5NiwgOTE3NzY2LCAwLCA3NDAxOCwgOTE3NTM4LCAKICAgICA2NDk0MCwgNzAyNywgMzg4NiwgMCwgNDI0NTcsIDExOTAwOCwgMCwgOTk2LCA2ODEyMywgOTQwNTgsIDQyNDksIDAsIAogICAgIDkxNzU5NCwgMTE3MDcsIDgyMjIsIDAsIDc5MzksIDkyNDU0LCA5MjQ2MCwgMTI3ODAxLCA5MTc1OTIsIDEyODM1OSwgODUzNCwgCi0gICAgMTI3MTU0LCA0MDk4MywgMCwgOTgzMjM0LCAwLCA3MjAxLCAxMjU2MSwgMCwgNDIzNzEsIDEyNTU4LCAxNTQwLCA5MTc1NDksIAorICAgIDEyNzE1NCwgNDA5ODMsIDAsIDk4MzI0MCwgMCwgNzIwMSwgMTI1NjEsIDAsIDQyMzcxLCAxMjU1OCwgMTU0MCwgOTE3NTQ5LCAKICAgICAxMDA1MiwgNDA5ODIsIDAsIDAsIDE0ODgsIDAsIDAsIDAsIDkxNzU1OSwgMCwgMCwgMTU2MywgMTI4MDM0LCA5NjE5LCAKLSAgICA5ODM5MzEsIDAsIDAsIDEyNzg3MiwgNzEzNjMsIDU4MDMsIDc3OTcsIDYwNzAsIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCAKLSAgICA2NTAwOSwgOTgzOTMzLCAxMjU2NywgMTI4NzAzLCAwLCA0MTQxMiwgMCwgMCwgMzYwNywgOTIwMCwgMTAwNDYsIDk2MTIsIAorICAgIDk4Mzk0MCwgMCwgMCwgMTI3ODcyLCA3MTM2MywgNTgwMywgNzc5NywgNjA3MCwgMTAwMDYsIDAsIDI5MjIsIDYwODIsIDAsIAorICAgIDY1MDA5LCA5ODM5NDIsIDEyNTY3LCAxMjg3MDMsIDAsIDQxNDEyLCAwLCAwLCAzNjA3LCA5MjAwLCAxMDA0NiwgOTYxMiwgCiAgICAgNDIxNTMsIDgyMTgsIDk0ODUsIDAsIDIwMzIsIDc4MzU0LCAwLCAwLCAwLCAwLCAwLCA0MzA4NSwgNjA1NywgNTA4LCAKICAgICA5Mzk2OCwgMTI4MDE1LCA2Nzk2OCwgMCwgOTI0MDUsIDAsIDAsIDYzOCwgNjA4MywgMTE5MDcyLCAwLCAwLCAyMzA1LCAKICAgICA3ODM0OCwgNjgwOTYsIDAsIDYwNTYsIDY2NTksIDY3OTY5LCAwLCA2MDg1LCAwLCAwLCAzOTE1LCA0MTYzNCwgMCwgNDE2MzksIApAQCAtMTg4MjIsMTUgKzE4ODQxLDE1IEBACiAgICAgMTIzMjgsIDUwMSwgOTM5ODUsIDEwNjAxLCAwLCA1ODMsIDAsIDQxOTc3LCAwLCA2NjAwNCwgMTE5MzUwLCA2NTA1LCAKICAgICA3NDAxMCwgMCwgMTMwNjQsIDU1MjY3LCAxMjA4MTAsIDY1MDAsIDU1MjYsIDY1MDQ5LCAwLCA3Mzc2NCwgMCwgOTIzNzYsIAogICAgIDEyNzQ1LCA5Njc4LCAwLCAxMjA1ODcsIDk4NjksIDEyODgxNSwgMTc3MSwgMCwgODkzNiwgMCwgMCwgNDIwOCwgNzgzNDEsIAotICAgIDc4NTY3LCA3ODM0MiwgMCwgOTgzNDQ4LCA3NDEwMSwgMCwgMTE3NjIsIDAsIDkyNDIyLCA3Nzk5NywgNjgwMTAsIDY2NDc1LCAKKyAgICA3ODU2NywgNzgzNDIsIDAsIDk4MzQ1NiwgNzQxMDEsIDAsIDExNzYyLCAwLCA5MjQyMiwgNzc5OTcsIDY4MDEwLCA2NjQ3NSwgCiAgICAgMCwgNTAyNywgNzgxNzIsIDEyODg3OCwgMCwgNTA2OSwgNzM4NjIsIDUwMjgsIDk4OTcsIDAsIDczNzM5LCA1MDI2LCAKLSAgICA5ODMyNDcsIDY4NjM5LCA2MzMxLCAxMDA3OSwgODkzMSwgMCwgMTQxNSwgODg2NiwgNDE5MDEsIDc0NzkwLCA3ODEzOCwgCisgICAgOTgzMjUzLCA2ODYzOSwgNjMzMSwgMTAwNzksIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgNzgxMzgsIAogICAgIDExOTM2MSwgOTgzNTY0LCA0MzEwNiwgNTAyOSwgNjUzMDksIDE1ODAsIDM1OTgsIDY4NDI0LCA0MTA3MCwgNzc5MDMsIDAsIAotICAgIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCA5ODM2NzAsIDEwNjAwLCA5MTc4NjcsIAorICAgIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCA5ODM2NzksIDEwNjAwLCA5MTc4NjcsIAogICAgIDYyMCwgNDEwMDEsIDYwMjgsIDAsIDQyODkyLCAwLCA3NDgyMiwgNTAyNCwgMTIwODI5LCA0MTAwMywgMCwgNTAyNSwgCi0gICAgNjk4OTIsIDk4MzIwNywgMCwgMTE4ODg1LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDk4MzU4NywgMTE1OTksIDEyODIwOSwgCisgICAgNjk4OTIsIDk4MzIwOSwgMCwgMTE4ODg1LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDk4MzU4NywgMTE1OTksIDEyODIwOSwgCiAgICAgMTE2MDIsIDYyNDMsIDExNTc0LCAxMTU4MSwgMTE1OTcsIDExNTk4LCA2MjUzLCA2MTA1LCAxMTU4NCwgNzQxOTUsIDExNTY5LCAKLSAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCAwLCAxMDgxNSwgMTE2MTksIDIzMDEsIDQxNTQwLCA3ODE1LCAKKyAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCA5ODMyMjcsIDEwODE1LCAxMTYxOSwgMjMwMSwgNDE1NDAsIDc4MTUsIAogICAgIDExNjE2LCA2OTc5LCAxMjA4MCwgNzcyMSwgMTE2MDQsIDc4NjksIDE1OTIsIDAsIDQyMTUyLCA3ODQ5OCwgNDEwNDgsIAogICAgIDkxNzc2MywgODI5LCAwLCA5MjQwNiwgMTk5NTAsIDAsIDEyNjQ4MiwgNjYxNiwgMCwgMTE4ODc1LCAxMDk1MywgMzkxLCAwLCAKICAgICA2OTc4NSwgNDgyLCA0MjI5NiwgMTE1ODgsIDAsIDQzNjA2LCAwLCA2ODM5NywgNjYzNzAsIDc0NTA2LCA0MjMzNSwgCkBAIC0xODgzOSw5ICsxODg1OCw5IEBACiAgICAgMTEzMzcsIDc4MjA5LCA5MTc4MjAsIDYzOTg5LCAzOTU4LCAxMjEzMiwgMTg0OSwgMCwgOTkyMSwgNDI0NTEsIDQyNTMsIAogICAgIDQxMTQ3LCA0MjA2NCwgMTE5NTksIDQyNDA0LCA0MTE2MCwgMCwgMzYxOCwgNzgzMzgsIDAsIDQzMzAwLCA1MTU2LCA5MjYyOSwgCiAgICAgMCwgOTI5LCA2ODI3LCA0MjAzNSwgNDI0MzcsIDE1NTUsIDAsIDg2OTEsIDY2NDM1LCAyMjE1LCA0MTY2MiwgOTQwMTAsIDAsIAotICAgIDAsIDAsIDkzOTUyLCA0NTc4LCA2NDUxMywgNDE2NjQsIDk4MzcyNSwgNDI1NzgsIDEyODc5NCwgNDE2NjEsIDc4NzE1LCAKKyAgICAwLCAwLCA5Mzk1MiwgNDU3OCwgNjQ1MTMsIDQxNjY0LCA5ODM3MzQsIDQyNTc4LCAxMjg3OTQsIDQxNjYxLCA3ODcxNSwgCiAgICAgNDMyNjcsIDkzNTYsIDAsIDAsIDAsIDEyODYsIDEwMTY2LCAwLCAwLCA2NDcwNywgOTgzMTI3LCA0MjQ3NiwgNzczMCwgCi0gICAgOTgzODUwLCAxMjg1MjIsIDQyNDgzLCAwLCAwLCA0MjMyNCwgNDIyOTEsIDEwMDIwLCA0MzM1OSwgMCwgNjY0MSwgNTI1LCAKKyAgICA5ODM4NTksIDEyODUyMiwgNDI0ODMsIDAsIDAsIDQyMzI0LCA0MjI5MSwgMTAwMjAsIDQzMzU5LCAwLCA2NjQxLCA1MjUsIAogICAgIDQxNjI3LCA5MTc5MjMsIDg3NjMsIDEyODMwNCwgNDE2MjgsIDUzMywgMTE5MzEsIDY1MjI1LCA4MzIxLCA0MjUwNCwgCiAgICAgNDI1ODEsIDAsIDY5MTUsIDQyMzEwLCA0Mzc3LCA4NTU5LCAwLCA3NDM2MCwgMCwgMTMxOTMsIDY0MzUwLCAxMTY2NiwgCiAgICAgODY3OSwgNDE5MjQsIDE1NzYsIDc3MzUsIDkyMzk4LCAwLCA3Mzg0MCwgOTgzMDkyLCAxMTM3NCwgNzgwNDMsIDEwODg5LCAKQEAgLTE4ODU5LDI0ICsxODg3OCwyNCBAQAogICAgIDgyNDQsIDM2MiwgOTI0MzksIDAsIDgwMzcsIDQzNzc3LCAxMTUzNSwgMCwgNzQ4NDUsIDUxODUsIDcxNjUsIDU1MjEsIAogICAgIDEwMzM0LCAyMDkzLCA3MTMyOSwgMTAzMDIsIDEyODExMiwgMTAxMDQsIDEwMjcsIDUxODEsIDAsIDAsIDEwNTIzLCAxNDQ2LCAKICAgICA0MjMyMCwgNDE2NDYsIDk5MSwgNTE4OSwgNDI0NzIsIDQxNjQ3LCAxMjAxMDUsIDE3MjIsIDU1ODEsIDQyODk4LCAzNDA1LCAKLSAgICAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCA5MjQ0NywgOTgzODEwLCA5NTQ5LCAwLCAxMDU0OSwgNTUyODIsIDk2NjEsIAotICAgIDQzNjgyLCAwLCA3NzkxMCwgMTIwMDI2LCA3ODcwOCwgMCwgNzc5MTEsIDAsIDQxOTkxLCA5ODM4ODQsIDAsIDc2MzAsIAorICAgIDAsIDE5NDY0NCwgNTUyMywgMCwgNDI2MjAsIDkyNDQ3LCA5ODM4MTksIDk1NDksIDAsIDEwNTQ5LCA1NTI4MiwgOTY2MSwgCisgICAgNDM2ODIsIDAsIDc3OTEwLCAxMjAwMjYsIDc4NzA4LCAwLCA3NzkxMSwgMCwgNDE5OTEsIDk4Mzg5MywgMCwgNzYzMCwgCiAgICAgOTg0NiwgNzY4NCwgMTAzNTAsIDAsIDExNzQsIDc3OTgxLCA0MjczMywgNzc5NzgsIDc3OTgwLCA2NjQ4NSwgNzc5NzcsIAogICAgIDQyMjc3LCA3Nzk3NCwgNDI0NTYsIDY1NjY3LCAxMjcwMzcsIDEyMzMwLCAxMjgyNzIsIDAsIDQyNDE3LCA0MjM4MywgCiAgICAgNjY2MzAsIDQxMzQ0LCA2MjkzLCAwLCA2NjI1MiwgNzc5ODQsIDc0NDQzLCAwLCAxMDIwOSwgODMxMywgNDE5NSwgNzQ0MzUsIAotICAgIDEzMTYsIDY2NjkwLCAxMjAwMzIsIDYzMzIsIDY0ODk0LCAwLCA2NTg3MSwgNzgwNjAsIDE3MzYsIDk4MzY3NSwgMzkwMSwgCisgICAgMTMxNiwgNjY2OTAsIDEyMDAzMiwgNjMzMiwgNjQ4OTQsIDAsIDY1ODcxLCA3ODA2MCwgMTczNiwgOTgzNjg0LCAzOTAxLCAKICAgICAxMjIyOCwgMTIwMTUxLCA2NTIwMCwgMzM4MywgMTA0NDYsIDc4ODQxLCA2OTMsIDkxMzAsIDMxNCwgNjQxNDksIDQyNDIwLCAKLSAgICAxMTk0OSwgOTgzNjYwLCAxMjAxNTIsIDExMDI2LCAxMjg3ODgsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAKKyAgICAxMTk0OSwgOTgzNjY5LCAxMjAxNTIsIDExMDI2LCAxMjg3ODgsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAKICAgICA0MjcwNiwgMTc1MSwgMjczLCA4MTY1LCAxMzE2NiwgMTIwNzYzLCA3ODg0MCwgNzEzNjgsIDEyODI0LCAwLCA0NTI4LCAKICAgICA1MzIwLCA2MzAxLCA0MzY2MiwgNjEzMywgOTMzOSwgOTQ2MywgNDIzNDYsIDEwOTIyLCA2NDU2MCwgMzc1NywgMCwgMCwgMCwgCi0gICAgNjU4NjksIDczNzYwLCAyNTY5LCAwLCAyMzI2LCA2NTc0MCwgMjU2NSwgNDI0NTksIDc1OTYsIDc5MjEsIDk4Mzg1OSwgCi0gICAgNzQwOTUsIDEyNzk4MSwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCA5MjY0NiwgMCwgMTIyMzMsIDk4Mzg2MiwgCisgICAgNjU4NjksIDczNzYwLCAyNTY5LCAwLCAyMzI2LCA2NTc0MCwgMjU2NSwgNDI0NTksIDc1OTYsIDc5MjEsIDk4Mzg2OCwgCisgICAgNzQwOTUsIDEyNzk4MSwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCA5MjY0NiwgMCwgMTIyMzMsIDk4Mzg3MSwgCiAgICAgMTAyMywgNDc0LCAwLCAxMTk4MTgsIDAsIDAsIDQyNDg3LCA2NTU1NiwgMCwgMTI3ODY2LCA0MjI5NSwgMCwgMCwgNzEzMjIsIAogICAgIDkyNTE4LCA5ODM1LCA2NjQ5OSwgMCwgNTQxNywgMTIyNzUsIDEwODk1LCAwLCAyNzQsIDAsIDE4NTgsIDAsIDAsIDU1MjUxLCAKICAgICAxMDExOCwgMzEzMywgMTI4MDA4LCA3Mzc5NSwgMCwgOTYxMCwgODA2OCwgODE5NywgMCwgNjk5LCAwLCA0MTY2NSwgNTg2OCwgCiAgICAgMCwgOTI2OTUsIDQyMTgyLCA3NTgxLCAxOTk0MCwgNDM2NjgsIDQxNjY3LCAxMjgwNTcsIDAsIDE5MjMsIDY1NTgzLCAKICAgICA2NTgwMiwgOTM5NzAsIDY0NTk3LCA0MzQ0NCwgMTE5MTg0LCA5MjE5NywgMCwgNjQ2NCwgNzAzNiwgMjk5NiwgMTkzNywgCi0gICAgOTgzNzQyLCAwLCA0MTgzNSwgNDA0NywgNDE4NDIsIDAsIDY0MTA3LCAwLCAwLCAxMTAxNywgMTIwNjAxLCAwLCAyOTMsIAorICAgIDk4Mzc1MSwgMCwgNDE4MzUsIDQwNDcsIDQxODQyLCAwLCA2NDEwNywgMCwgMCwgMTEwMTcsIDEyMDYwMSwgMCwgMjkzLCAKICAgICA3Nzk2NiwgOTIxNjksIDY0NzkxLCA0MTgyNywgNDI0NjYsIDQzNDIyLCAxMDU3OSwgODU2MCwgNzEzNTAsIDY1NDEzLCAKICAgICA3Nzk2MywgNDgwMywgMTI5NjQsIDE3MzksIDE5NDEsIDM5MDAsIDAsIDE3MTMsIDc3OTY5LCAwLCA3Mzk1NywgMTE0MDcsIAogICAgIDQyNDQxLCA0MTk3MSwgNjI5NywgMTIwMDk4LCA2NDEwNSwgMTI4MDgwLCA0MjQ4MSwgMTE3MTYsIDY2NDczLCA3MTc5LCAKQEAgLTE4ODk0LDMzNyArMTg5MTMsMzM4IEBACiAgICAgMzY1OSwgOTUzMywgMTg0LCAxNTUzLCAxMzEwNywgNjU0ODQsIDY5NjQ4LCAxMDUwMiwgNzQ0NTcsIDAsIDAsIDQxNTU0LCAwLCAKICAgICA4MjIwLCA5MTc5NDMsIDQxNTU3LCAwLCAwLCAxMTA3MCwgMTE5MjIxLCA1MTU3LCA0MDIwLCA3Mzg1OCwgNDE1NTUsIDk1MTQsIAogICAgIDY0ODE4LCA2NTEwMywgNjQ2NDEsIDY0MzAzLCA3ODEzMSwgNzUyMCwgMCwgNzQzNzcsIDExMDI5LCA2NjY1MSwgOTgzMDY4LCAKLSAgICAwLCAxMTg5MzAsIDY0NTI3LCAwLCA3ODc3LCA3MzgwMywgOTgzNzg5LCAxMjczNDgsIDEyMDA5NiwgNzQ2MDIsIDk5NTUsIAorICAgIDAsIDExODkzMCwgNjQ1MjcsIDAsIDc4NzcsIDczODAzLCA5ODM3OTgsIDEyNzM0OCwgMTIwMDk2LCA3NDYwMiwgOTk1NSwgCiAgICAgMTE5NTU3LCA0MDU1LCA0MjgxNywgMCwgNjUyMTIsIDExNzE1LCAxMjE5MCwgMTIzMTksIDc4NjMwLCAwLCA3ODYzMSwgCiAgICAgOTUwMiwgNjU0MjcsIDAsIDY1NDI0LCAxMjYwNywgMCwgOTczNCwgNjU0MjUsIDAsIDAsIDEyNzM1NywgNzg4MzUsIDkyNDEwLCAKICAgICAxMDExMiwgMTA4MjcsIDAsIDk4NjYsIDc0NTI3LCA2NjY3NSwgMCwgODYyNSwgNjQzNDYsIDExMjkwLCAxMDQ3NywgMCwgCi0gICAgODYzNiwgOTgzOTE4LCA4MzE1LCA2NTQ0NCwgOTgzNzg0LCAwLCA3NDU5NSwgNjE1MiwgMCwgMCwgNjYyOSwgMTI3MTA4LCAKKyAgICA4NjM2LCA5ODM5MjcsIDgzMTUsIDY1NDQ0LCA5ODM3OTMsIDAsIDc0NTk1LCA2MTUyLCAwLCAwLCA2NjI5LCAxMjcxMDgsIAogICAgIDEyMDE3MSwgMCwgNzQ1ODksIDQzOTkzLCAwLCA2OTc5MCwgNjQ0MzUsIDAsIDQzNjkwLCAxMTA0NiwgMTE0OTAsIDQyNzMwLCAKICAgICA0NDg1LCAxMjcxMDcsIDAsIDY0OTI2LCAwLCAwLCAwLCA1ODY5LCAxMjQzNywgNDI3MjgsIDAsIDcwNDAsIDM1ODgsIDAsIAotICAgIDEyODI1LCAwLCAwLCAxMjcyNSwgMCwgMCwgNzg2NDIsIDIyMywgMCwgNjk2NzUsIDEyMDE2NiwgNDI0NDQsIDAsIDY0NDk5LCAKLSAgICA2NTI0NSwgMCwgMTE3MSwgMCwgNjk3MTcsIDAsIDE4MDUsIDg3NzIsIDQzODIwLCAwLCA5OTMwLCA2NTI0NywgNzg2MTksIAotICAgIDEyMDExMSwgMjMzOCwgMCwgMTE4ODUzLCAwLCA0MjY3NiwgMCwgNjQ4MDAsIDY1MjM2LCA2NzY0NCwgNjgxMjYsIDEyMTMsIAotICAgIDAsIDY0MDc1LCA3OTcsIDY0MDc0LCA4NzM0LCA0MjEyLCAxMjczNjksIDY0Mzg3LCA0MTE1LCAwLCA1MDA1LCA2NDA3MCwgCi0gICAgNjQwNzMsIDEwNjc5LCAwLCA3Nzk1NCwgOTQwMiwgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIDY1NDM2LCAwLCAKLSAgICAyMTIwLCA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIDc0MTkyLCAxMDcwMSwgMTc2NCwgMzEwMSwgMTI3ODE1LCAxMjg1OCwgCi0gICAgMTIwMTU5LCAwLCAxMTM3MywgNjM3OCwgMTI3ODU5LCAxMjAxMDMsIDg2NjMsIDkzMTIsIDQxNjQ0LCA0NTM5LCAyMTI5LCAwLCAKLSAgICA5MjIyLCA5ODM3MjksIDAsIDQyNTksIDkwOTIsIDc0NTY3LCA0MTk2MSwgMCwgMTI3MjQsIDY2MzU3LCA0MjMzMSwgNjQ5MzUsIAotICAgIDAsIDAsIDEyOTMsIDc5NDcsIDIxMzIsIDk4Mzc1OCwgNzQ1OTMsIDEyMDMwOCwgMjQ1NCwgNDI3MTcsIDM2MTMsIDEyODgzNywgCi0gICAgMCwgMCwgNjU4ODgsIDg4MTYsIDEwOTc4LCAxMDg0MCwgMCwgMTA2NjgsIDAsIDQzMDg3LCAxMjU5NSwgMTIwMzA0LCAKLSAgICA5ODMxMTQsIDg4MjIsIDAsIDExNTcsIDY0OTAzLCA4NjM4LCAwLCAwLCAwLCAwLCA2OTg0OCwgODIzNSwgMTIwMzE2LCAKLSAgICA0NDA1LCAxMDA4NiwgMTIwMjQ3LCAwLCA2OTIxNiwgMCwgNjU0MzAsIDcxMzIxLCA2MDc5LCA2ODE3LCAxMDc2NCwgCi0gICAgMTI3OTEwLCA2NDI5MSwgMTI4MDUxLCA5OTgsIDEyMDMxMiwgMTEwNjIsIDEzMTcsIDY0MzI3LCAxNTU4LCAwLCAxOTkxLCAKLSAgICA3ODgyLCA0MjI1NCwgMCwgNDE3MDAsIDUzMCwgMCwgMTA0MjgsIDExOTMzNSwgMTIwMDIsIDExOTMzNiwgNTc0MiwgNDMwNzYsIAotICAgIDQ2OTIsIDY0NjMwLCA0MTgyMywgNDAwNywgNTAwNCwgMTE5MzM0LCA3ODk2LCA3NTEsIDY1OTUsIDY1OTYsIDEyMDMyNSwgCi0gICAgNjYzNzMsIDAsIDAsIDY0OTA4LCA5MjY5MSwgNjMxMSwgMCwgMTIwMDQsIDExOTE5MiwgMTIwNDksIDQzMTA4LCAxMjAzMjYsIAotICAgIDAsIDQxNzA1LCA5MjE4OCwgNjU5OCwgMCwgNjU5OSwgMTIwMzM0LCAwLCA0MjE0OCwgMTE4ODI1LCA2NjAyNywgMCwgNjU5NywgCi0gICAgOTQxMiwgODM0MCwgMTE4MjQsIDY0NzQ1LCAyMjgxLCA2OTkwNCwgMCwgMTk4OCwgNTQwNywgNjc4NjUsIDI0MzAsIDQxNjc4LCAKLSAgICAwLCAxMjAyNDMsIDIzMzYsIDk4Mzg5NCwgMCwgNzg4NzEsIDEyMDQ0MiwgOTgzNzYwLCAxOTIxLCAxMDk0NywgMTk5MjcsIDAsIAotICAgIDY1NDA2LCAwLCAxOTkxMywgNDI4NCwgMTMyMTcsIDAsIDQzNzg5LCAxMjg0MSwgOTIyOSwgMTA5NTYsIDQyMjg1LCA0MTY3NCwgCi0gICAgMTk5NjQsIDQxNjc5LCA2NTA4NCwgMzUyMSwgMCwgNTc3NCwgODMyNSwgMCwgNjU0MDMsIDk4MzA4OSwgMTg1NCwgMTA3OTQsIAotICAgIDAsIDY3NjYwLCA2OTg0NiwgMCwgNzgzNTksIDUyODAsIDAsIDQzNDQsIDEyOTA1LCA2NTQzMywgNjA3NiwgNjQ3OTMsIAotICAgIDQxNjEwLCA3NjgsIDEyMDc0LCA0NDIsIDAsIDY4MTYyLCA2NDA4MSwgMTI5MzQsIDQxNjgyLCA2NTQzMiwgNDE2OTMsIDAsIAotICAgIDYwNzEsIDY1NDM0LCAxMjc0NjcsIDQ4MDQsIDQwNTMsIDAsIDEyNzQ2OSwgMTk0NjUzLCA0MTY5NiwgNDY3LCA2OTgyMywgCi0gICAgMTI3NDYzLCA2OTc5NywgMTk0NjUyLCAxMjc0NzMsIDg0MjEsIDEyNzQ3MiwgNjk2ODIsIDQzNzA1LCA1MDIsIDAsIDY1NDMxLCAKLSAgICAxMTkwNTYsIDY5OTU0LCAxMjA0MywgMTMwMywgMzE2LCA3MzY0LCAyMDI5LCAyMTM2LCAxMTkyNDYsIDExNTMzLCA2NDM2NSwgCi0gICAgNDM0ODAsIDkyNjM5LCA0ODYwLCAxMjY2NDgsIDEyNzg3NywgNDI0ODgsIDAsIDk1ODMsIDEyODg0OSwgNTU0NiwgODAxOSwgCi0gICAgNzM4NTYsIDAsIDAsIDAsIDU1NDQsIDIzNTUsIDEyMTUwLCA2NTcyNSwgNTU0MywgNzc5ODksIDYzNzUxLCAxMjEzNywgCi0gICAgNTU0OCwgNzc5ODUsIDAsIDY1NzI3LCA2ODM4OCwgNjU3MjYsIDYwNzcsIDEyODM1MiwgNjU0NTIsIDAsIDExMzAxLCAKLSAgICA3ODAxMywgNzgwMDgsIDc4MDEwLCA5ODc0LCA3ODAwNywgMCwgMTMxOSwgMzA1MCwgNjU0MTAsIDAsIDAsIDc4MDE2LCAKLSAgICA3ODAxNywgNDI4MzAsIDQzOTk2LCA2NjcxNiwgMTI4MTM3LCA0NjkxLCA5MjI0MiwgOTM0NSwgNjIxLCA5MjcwOSwgCi0gICAgMTI4MjIyLCAwLCA2NTQxMSwgMCwgNDExODIsIDczODgxLCA2NTQwOCwgNzM4OTksIDc4MDI0LCA5NDc0LCAxMDU0NSwgCi0gICAgMTE5MTE4LCAxMDg4NywgMzc4NiwgNjU0MDksIDg4OTQsIDQzMTc5LCAxMTk2MTEsIDc5MjMsIDM3MTYsIDkyMzYzLCA5OTk2LCAKLSAgICA4NTA4LCAwLCA3MDEyLCA4MTk1LCAxMjc4MzQsIDk1NjYsIDAsIDM3MjIsIDAsIDQxNzA3LCA4NDkzLCA1NDUsIDk1NzUsIAotICAgIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDY5ODU0LCA4ODU5LCA2ODIwLCA3NDM0NSwgNjUxMTAsIDEyMDc0MCwgMCwgMCwgOTExOSwgCi0gICAgMjc4NywgNzkyMCwgMTE4ODIzLCA0MDIxLCAyMDEyLCA3OTg1LCAwLCAxMTk2NjMsIDAsIDAsIDc4MDIxLCA3ODAyMiwgNDEwLCAKLSAgICA3ODAyMCwgMTgwMiwgNzgwMTgsIDc0MTA3LCAwLCA0MTY1OSwgNDE2NzEsIDE4MjcsIDAsIDY0Mzk2LCAxMDEyNiwgMTIxMTYsIAotICAgIDQxNjczLCAxMjAzNzAsIDExNDIyLCA3ODE0MSwgMTIwMzczLCAzODYwLCAxMjAzNjcsIDY4NDEyLCA0MTM0NSwgMTIwMzYyLCAKLSAgICAxMjAzNjMsIDExNzQ4LCA0MjE1OCwgNzk0MSwgMTEwNzYsIDg3NDksIDEyMDM2MSwgMjEwNCwgNjQ4NTgsIDM2MSwgCi0gICAgMTIwMzU3LCA4NDUsIDAsIDQxNTYwLCAxMTk3MCwgNDU2MiwgOTE3OTIwLCAyOTI2LCA5MTc5MTksIDQ1NjksIDc0MTMwLCAwLCAKLSAgICA0MzQ4NywgMTk0NjMwLCA2MTEsIDc0MTI5LCA2NDg3MSwgMTE4ODkxLCA2NTYyOSwgMCwgMTk0ODU4LCAwLCAwLCAxMjc1NDUsIAotICAgIDEyMDU0MywgMCwgMCwgNjI5MSwgMCwgNzg2MzksIDQxNjY5LCA3MDk0LCA5MTc5MjEsIDAsIDk4MzU4MSwgNzQwNTQsIAotICAgIDEyNzc1NCwgMTk1MDI5LCAwLCA4MzksIDk4MzMxMSwgNzY5NSwgODc2OSwgNjUyNDYsIDQ4MjksIDE5NDY2MywgNDg1OSwgCi0gICAgNjQ0NjcsIDAsIDk4Mzk1NCwgMTE4OTk4LCA3MjA2LCAwLCA2NjQ3LCA0Mzk4NiwgMCwgNjk3NjYsIDAsIDY0NzY0LCA0MjEwLCAKLSAgICA5ODM4NTQsIDEyNzkzNiwgODA0LCAwLCAwLCAxMjI5OCwgMCwgNjY2NTMsIDAsIDY0OTI0LCAxMDA5MSwgNzM5MzEsIDk0NjgsIAotICAgIDc0MjQ1LCAwLCAwLCA3NDI0NiwgOTI1MDMsIDEyODM5LCA2NDY2OSwgOTIyMDIsIDAsIDEyNzksIDE0MjUsIDYyMjQsIAotICAgIDExOTIyOSwgMTEwNDksIDAsIDkyNjk3LCA0MzIzOSwgODQ4MiwgOTI0NDAsIDAsIDUwMzIsIDY5Njc3LCAxMTk0MCwgCi0gICAgNjc4ODgsIDY2NCwgMTIwNDM3LCA1MDM0LCAwLCAwLCAxMjc1MjUsIDQyNzAyLCA3Mzg4OCwgOTgzMTQ5LCAxMzI5NCwgCi0gICAgNjc4NzMsIDY0ODY5LCA2MDMyLCAwLCA5MTE1LCA3NDMwLCAxMjAzNzcsIDAsIDEyMDgxOSwgNjgzODcsIDEyMDE2OCwgCi0gICAgNzM5MTMsIDEyMDE3MCwgNDExNjEsIDU1MTgsIDQxNzQsIDEwOTkzLCA0MTE2MiwgMTIwMTYwLCA2NDUyOCwgMTE2OSwgNDM0LCAKLSAgICA0MTQzNywgMTkwNSwgNjAzNCwgNDExNjQsIDY0NzQ0LCA5NTI4LCAxMTg4NjcsIDEyODgwMCwgNTI0LCAwLCA3NDAyOSwgCi0gICAgNzg4LCA3NDAyNywgMCwgMTk0NjM4LCAwLCAxNjYzLCAxMDQxOSwgNzQwMjUsIDQyNjM2LCAwLCA2OTcyNSwgMCwgMTIwNjU2LCAKLSAgICAwLCA2Nzg3NiwgMCwgMCwgMCwgNjc4OTcsIDc0MDM5LCAwLCAwLCAxMTM5NSwgMCwgMTE5MTA3LCA0MzYxMiwgNjQzNDQsIDAsIAotICAgIDAsIDEwODU1LCA1NDQ1LCA5MzU1LCAwLCA2NTE5OCwgNzM5MSwgODk4OSwgMjIxLCA2NTY4NiwgMCwgMCwgODAxMCwgNzE5MSwgCi0gICAgNDk2MiwgNjk3NzIsIDg4NTUsIDAsIDAsIDY0NDY5LCAxMjA0MjYsIDEwNTU1LCAwLCA0MzMzMywgOTIyOTksIDAsIAotICAgIDEyMDQyNywgMTA0NTEsIDAsIDY3NjUzLCA3MjQ1LCAxMjQ0MywgNzQ0MDUsIDk5NDcsIDEyMDE0OSwgNzgzMTcsIDM4NzMsIAotICAgIDgzNjcsIDAsIDEyMDE0NiwgNDM0MzMsIDQzNjQ5LCAxMTk4NywgMCwgMCwgMTEwMTAsIDEyNzIzLCA3NDA1OSwgNzQwNjIsIAotICAgIDYyMTcsIDU4OTYsIDAsIDc2ODIsIDc0MDQ5LCAxNDYyLCAxMDIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDI1OTUsIDAsIAotICAgIDc0NDAyLCAxMTg4NjAsIDAsIDEyMDQxOSwgOTI0OTcsIDc0MDUyLCAwLCA5MjM3OCwgMTIwNTQ5LCAxMTkwODIsIDY0Mjk1LCAKLSAgICAxMjA0MTgsIDAsIDY0NzY1LCA3MzkyMywgMTIwNDE3LCAxMjA2NjIsIDY5OTIwLCAxOTQ3MDIsIDYyMTYsIDAsIDEwNzU1LCAKLSAgICA5NDU1LCAwLCA4MTI0LCAxMjcwNDIsIDk0NzAsIDY5NDQsIDEyNzU0MCwgMCwgNjk2ODAsIDI4MjgsIDAsIDUzMSwgNDI2MzgsIAotICAgIDAsIDAsIDAsIDQzNDI4LCA4MjA0LCAzNjE0LCAyODI3LCA5Njk2LCAwLCAwLCA4NzI4LCA0MzU0LCAxMDkwNCwgNzg1NjIsIAotICAgIDE5OTM2LCA3ODMzLCAxMjA2OTEsIDAsIDQyNTk5LCA0MjU5NywgNDI3MDksIDEyMDQwOSwgMTI3MDQ0LCAwLCA4NTM3LCAwLCAKLSAgICAwLCA5MzU0LCA5ODMxNjQsIDEyODgzMywgNDExOTksIDEwMTIxLCAyMDI4LCAwLCA5ODMxOTQsIDY5NzE1LCAwLCAzMDYyLCAKLSAgICAwLCA3NDQ0NywgMTI2MDgsIDAsIDY2NDQwLCA3NTQ1LCA5NzAwLCAxMjU4MCwgOTIyMDUsIDEyMDc3NywgMTIwNTAyLCAKLSAgICA0MTE1NSwgMCwgNzQwNzEsIDAsIDk4MzQ0OSwgMTI3MTMsIDAsIDAsIDAsIDc4NzcyLCAwLCAxNzM0LCAwLCAwLCAxMjcwNDAsIAotICAgIDY0NTk0LCAyNDU2LCAyMzEsIDAsIDc0MTY3LCA1NDIsIDAsIDExODc4NiwgMCwgOTgzOTcwLCAxMjMwLCAwLCAwLCAzNTk3LCAKLSAgICA0NDQ2LCAxMDU4NCwgNzQyMzUsIDkyMjE1LCA0MDM3LCAxMjc5MzgsIDgzNTIsIDAsIDU2ODcsIDAsIDY0NTE1LCAwLCAKLSAgICAxOTQ4MDEsIDU1MjY1LCA2Nzg0NiwgNzg0MzQsIDk3MDQsIDAsIDAsIDcwMDgwLCA3MTMzOCwgMCwgODY2MCwgMTI2NDk1LCAKLSAgICAwLCAwLCA3ODc3MywgNzQ0ODIsIDQ0ODMsIDE3MDksIDY5NzIxLCA5OTA5LCA2MDgwLCAwLCAxMjAzNTgsIDE3NDYsIDEzMTUsIAotICAgIDg2NjcsIDAsIDAsIDEzMTQwLCA2NTg5OSwgMTA2MDQsIDAsIDQ0ODAsIDExMjY2LCAxMjgxNTIsIDEyMjYsIDY5MzAsIAotICAgIDY3OTc5LCA5ODM2ODEsIDYzNjAsIDEwODk3LCA0MTIzMCwgNjA1LCAwLCA3NDc4NSwgNjk4NzUsIDAsIDAsIDQxNTAwLCAwLCAKLSAgICAzMTEsIDExNDUzLCA2MjIxLCAxMDYwOCwgNjQ5NDMsIDc0MjgwLCAxMDg3NywgMTE4ODY4LCA2NDg4NSwgNzQyNzIsIDAsIDAsIAotICAgIDEyODU1OSwgMTIwNzM2LCA3NDMxMiwgMzQ1LCAwLCA3NDQ1NiwgNjQ2MDYsIDk5MTcsIDAsIDkyMjMxLCA1MDM3LCAwLCAKLSAgICAxNzc2LCA4NDIyLCAwLCAxMTg4MTQsIDQxNTA4LCA0MTIwMSwgMzIzLCA0MzMyOCwgMCwgNDI2OTgsIDEyOTUsIDE5NDg1MywgCi0gICAgNDYyNSwgMCwgNDYzMCwgMTMxMTcsIDAsIDEyODc3MiwgNjUxMjMsIDExMjkzLCAyNjY4LCAxMTI4OCwgMCwgNDI2NDAsIAotICAgIDY1NjY2LCAyNTE5LCA5MjM2OSwgNjU0MjAsIDkyNDc5LCAwLCA0MjUyLCA1MDQ5LCA0MjY1OSwgMTE5MDExLCA3MDYsIAotICAgIDc3NTQsIDEwODU0LCA4NzM4LCAwLCA2NTQxOSwgMCwgMCwgNjQ5LCA2NTQyMSwgMCwgNjY3MDIsIDAsIDEyNjcwLCAxMDEzLCAKLSAgICAwLCA2NDkxOSwgNzA1LCAwLCA2NTQyMiwgMTI3ODAzLCAxMTgzLCAxMjY1MTksIDcwMTcsIDQyODUyLCAwLCA4MTU3LCAKLSAgICA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDk4Mzg2OSwgNzQwMzUsIDAsIDExOTEzLCA3Mzg3NCwgNjY5NiwgMCwgODkyMCwgCi0gICAgMTE5Mjk4LCAwLCA3OTYyLCAxMjIxMSwgOTgzNywgMjA1MSwgNjYyMjcsIDAsIDQxODQsIDAsIDAsIDEwMTc3LCA3Mzc3NywgCi0gICAgMTg1NywgMTk0NjU3LCA0NjI2LCA4NDY0LCA4NDcyLCAwLCA0NjI5LCA4NDk5LCA3ODMyMSwgNzgzMjIsIDQ2MjQsIDc4MTgsIAotICAgIDExOTE3MywgMCwgMCwgNzgwNSwgMCwgOTQwMDcsIDY5MzUsIDkyMjkyLCA3ODMyNSwgNzgzMjYsIDc4MzIzLCA0MzMyNywgCi0gICAgNDM5ODksIDExOTA0NiwgODQ5MiwgODI1MCwgODQ1OSwgMCwgODQ5NywgODQ5NiwgMCwgMCwgNzgzMzYsIDc4MzM5LCA5NTQzLCAKLSAgICA3ODMzNSwgNzgzMzIsIDc3ODMyLCA2NTg0OSwgNzc4MzEsIDk4Mzk1MiwgMCwgMTI0NTEsIDAsIDg2ODQsIDAsIDYxMDIsIDAsIAotICAgIDUyOTgsIDAsIDUyOTQsIDAsIDAsIDk4MzQ1MSwgMTk1MDYyLCA5OTQ5LCAxMTk4MjYsIDQzNjE3LCAxMTkyMTUsIDAsIAotICAgIDEyMDczLCAwLCAwLCA3Nzg2MywgMTMxMDgsIDEyMDYxNywgMTE0MzksIDQxNDY4LCA5ODM3NDgsIDAsIDUyOTIsIDU1MjcyLCAKLSAgICA5ODM4NzQsIDE5MzksIDUzMDIsIDM5NzAsIDkxNzg3OSwgMTI0NTUsIDE3OTMsIDAsIDAsIDAsIDY2NDMsIDkyNDc3LCAKLSAgICA2NTI2MywgMCwgNzgzMzAsIDQxMjkzLCA3ODMyOCwgNjU5MjMsIDAsIDEzMjE5LCA5NTY5LCAwLCA3NDM4MywgMCwgNzQxOTcsIAotICAgIDAsIDU1MDAsIDg4MTMsIDAsIDAsIDc0NTY2LCA1MzIyLCAwLCA3ODM0MCwgNDM2MzEsIDUzMjQsIDY2NDQzLCAzNzg0LCAKLSAgICA0MTYxNCwgNjUyNjksIDYyMzAsIDc4MzQ5LCA3ODM0NSwgNDMzMjQsIDMzNjAsIDc4MzQ0LCAxMTUyMywgMCwgOTI0ODgsIAotICAgIDk5MjYsIDcxOTcsIDAsIDY4NDI5LCA0Mjg5NCwgNDE4MjEsIDEyNDksIDc4MzYwLCA3ODM2MSwgNzgzNTYsIDc4MzU4LCAKLSAgICA3ODM1MywgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIDQzMTYyLCA0MTgxNSwgNDExNTAsIDAsIDEwNTcxLCAxMDA5NiwgCi0gICAgMCwgMCwgNzgwNzQsIDY5NDcsIDQxMTUyLCA4ODcsIDkyNDksIDY1NjUsIDc4NTEwLCA0MTk5MCwgNzg1MDksIDQxODExLCAKLSAgICA3NDQ2NiwgOTM5NjYsIDY2NzAsIDc3ODgyLCAwLCAwLCA0MzA5MiwgNDMzMjUsIDAsIDEwMTY4LCAwLCA5NzgxLCAxMjg2NTUsIAotICAgIDkxOTAsIDAsIDk2NjYsIDgyNjksIDY1OTQ0LCA3NDAwNSwgMTMwMTksIDExNjcwLCA2OTg2MCwgMzE1LCAxMjgxMywgCi0gICAgOTgzNDUwLCA3ODQzMiwgNzgyNTYsIDc4MzUxLCA3ODM1MiwgMCwgOTgzNjQ4LCAwLCAwLCAxMzc4LCA5NTA5LCAwLCAwLCAKLSAgICA3NDQ3NSwgMzA2NiwgOTIyMjAsIDY3ODQ3LCAwLCA5MjM1NSwgMCwgNzgzNjUsIDg3ODcsIDEyMDM3OSwgMTk0NjE2LCAKLSAgICA0MTYxOCwgMTk0NjE1LCA3ODI2MSwgMTk0NjE0LCAwLCA2NDY1MiwgMCwgMTk0NjEyLCAwLCA3ODM2NiwgNDIwODgsIDAsIAotICAgIDE5NTA2MSwgNzE3NiwgNDM3NTYsIDEwMTM3LCA2MTIxLCAxMDk5NSwgNzgyNTksIDc0NTM0LCA4MTE5LCA2NDg3NCwgCi0gICAgOTE3ODE2LCAxMjcxOTksIDE5NDkzOSwgMCwgNzQ1MjUsIDAsIDAsIDEyOTMwLCAxMzk0LCA3NDUxNCwgMCwgNzQ1MTUsIDAsIAotICAgIDExODgwNCwgMjk5OCwgOTUyNywgMTIwNjU5LCA2NTE5MCwgMTI5NzcsIDQyMDkwLCAxMTkxNjUsIDAsIDExOTEwMCwgCi0gICAgNDEyMzYsIDkyMjM1LCA0MjAwNSwgNDIwMDMsIDQxMjM3LCA1ODQ4LCAwLCAwLCAzNjcwLCAxMjg2NTcsIDE5NDYwMCwgMCwgCi0gICAgMCwgNzg5MCwgMCwgMTEyOTgsIDQzMzE1LCAwLCA2MjI5LCAxNTkzLCAwLCAwLCA2MTksIDQ2MzUsIDY1MDgwLCAwLCAKLSAgICAxMjgwMDIsIDQxMjAsIDY1MzM3LCA2NTMzNiwgMCwgMTE4MDgsIDExOTIxNCwgNzQxMTUsIDkzNjYsIDQyNzkwLCA0MjAwNiwgCi0gICAgMTE5MTE1LCA2NTMyNywgNjUzMjYsIDY1MzI1LCAxMDc1NywgMTUwNywgNDIyMTYsIDY1MzIxLCA2NTMyMCwgNjUzMzUsIAotICAgIDY1MzM0LCA2NTMzMywgNjUzMzIsIDY1MzMxLCA0MjA1OSwgNjUzMjksIDQyNjg5LCA5MjQyNywgOTEyOCwgOTQwNDUsIAotICAgIDQyMDczLCA2Nzg1LCA2NDU5MCwgOTgzODIxLCA0MzcxLCA3MTk2LCA2NTMxOCwgMjAzNSwgNjUzMTYsIDQxMDYsIDY1MzE0LCAKLSAgICA2NTMxMywgNDIwNzQsIDEyNzg0NywgNDEyMjgsIDAsIDY1NjA5LCA0MTI0MSwgNzkwMywgNDEyMzksIDQzNTMzLCA3ODQ1OSwgCi0gICAgNzE4OSwgMCwgMCwgMCwgMTIzNTcsIDQyODAyLCA3ODQ1MCwgODQ4NywgOTEzMSwgMCwgNDYxNSwgMTI2OTUsIDEyNzc1MiwgCi0gICAgMCwgMTIxNzUsIDAsIDY0NTM1LCAwLCA3ODA5LCAwLCAwLCA1NjIsIDEyMTY5LCA2NTkwLCA2OTc2MiwgNjY0NTUsIDY0NzM4LCAKLSAgICAzMjE5LCA2ODY1NCwgOTgzNzc4LCAwLCAxMDM3LCAwLCAyMDI1LCAxMjgyNjMsIDEzMDk4LCA3ODQ0MiwgMTA2MzcsIDQ1NjgsIAotICAgIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDQzNjIzLCAxMTA3MiwgMTI3MTkxLCAwLCAwLCAxMjYwNiwgNzg0MzMsIAotICAgIDI4MjUsIDAsIDEwODI1LCA4MDc5LCAyODIxLCA0MTA0NiwgOTIzMjcsIDczNjUsIDk4Mzc0NCwgMTIwNTkzLCAxMzA3MSwgMCwgCi0gICAgNDUyLCA0MTA0OSwgNDI4NDAsIDYzNDYsIDI4MzEsIDU0NjEsIDc0NTk2LCAxMTQ2NSwgNTIxMiwgMCwgNjQ3MDMsIAotICAgIDExOTE5MSwgNDIzMDgsIDcxODEsIDAsIDQxMzMyLCAwLCAxMjMzMywgMCwgMTY2OCwgMCwgMCwgMCwgMTE4NywgOTgzMzc3LCAKLSAgICA0MjYyOCwgNzg1NzUsIDAsIDEyODc3NywgMCwgMzI0MCwgMTI4NTE4LCAxMjE5NCwgMCwgMTE1OTEsIDQxMDY1LCA1MzIzLCAKLSAgICA4MTY2LCAwLCAwLCAwLCA3NDUzNSwgMTYyMywgNjUyOTcsIDEyODg1NiwgNTcxLCAwLCA0OTE4LCAwLCA1Mjg4LCAxMjcyOTUsIAotICAgIDg5MTYsIDY1MDQ4LCAxOTA5LCA4ODY0LCAwLCAwLCAxMDczNiwgOTI1MDgsIDExNTcxLCA3NjE1LCAxMjczMDAsIDkyMjk2LCAKLSAgICA0MjM3LCA5MjU3NiwgMTAzNSwgNjU4MTUsIDAsIDc4ODEsIDcwMSwgNjU5MzYsIDM0ODksIDAsIDAsIDEyMDc1MSwgMTE0MDMsIAotICAgIDAsIDAsIDEyNzE0NiwgMzc5NiwgNjgwMCwgMCwgMzk5NCwgMTE0MjEsIDAsIDE5NTA3NiwgMCwgOTgzOTEzLCAwLCAwLCAKLSAgICA2NDg1NywgMTI4MTA1LCAyODU1LCAxMjc4MjgsIDY2MzA4LCA0MTYyMSwgNjgyMTQsIDEyNzI4MywgMTI3ODE3LCAxMDY1NCwgCi0gICAgMCwgMTE5MjI2LCAxMjE2NCwgMzI0NiwgNzkwNiwgNDM5NzIsIDY1ODQ3LCA3MTgyLCAwLCAxMzAyNCwgMTk0ODIyLCAKLSAgICA3NDI3MCwgMTI4Mjg5LCAwLCAwLCAwLCAxNDk2LCA3NDcsIDAsIDk0MiwgMjM3OCwgNDMxMzYsIDEyNzkwNSwgODQ2NiwgCi0gICAgOTgzNTc1LCA5MzIwLCA4MDAxLCAxMjMyLCA4MTM5LCAxMTYxNywgMCwgMCwgMTE0MDksIDY4MzczLCA2MzgyLCAwLCAKLSAgICA2NDYzNCwgMTI4Mjc5LCAwLCAxMTYxMiwgMCwgNjc2MDAsIDIzNzQsIDk0MDY2LCA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIAotICAgIDUyODYsIDExOTI5NywgMCwgMCwgNjQ5MjUsIDEyMDI4MywgMTk0NTg0LCAxMTg5ODIsIDE5NDU4MywgNzcwNSwgMTE5NDIsIAotICAgIDExMzA1LCAxOTQ1ODEsIDMzMDksIDAsIDAsIDAsIDAsIDY4MDIsIDAsIDQxNjUzLCAxMjgwLCAxMjQxLCA3MTY4LCAxMjA5NiwgCi0gICAgMCwgNjY2MTUsIDQyNTY1LCA0MTY1MSwgMCwgMCwgMCwgNDE2NTAsIDY2NTA3LCA2NjQ3MCwgMCwgMTI5MTQsIDQxNDkxLCAKLSAgICA2NjAxMCwgMTE5NTUyLCA2MDc4LCA5OTU0LCAwLCAxNDc1LCAxMTkyNDcsIDk5MzgsIDYwODQsIDkxNzU0NiwgNDEwNjQsIAotICAgIDQxMDYyLCAwLCAwLCAzMjU2LCAxMDE4OSwgNDIwNzYsIDQzMjUyLCA3ODgyMywgOTE3OTA2LCA4NzI3LCAwLCA2NTg3NSwgMCwgCi0gICAgMCwgMTI3NzYyLCAxMDU2MiwgNzQyMTUsIDQzMDY1LCAwLCAwLCAzMjQ4LCA3NDI5NywgMzI2MSwgOTAxNSwgNzEzNTEsIDAsIAotICAgIDM2MzUsIDY0MzM3LCA5ODMyNzMsIDAsIDAsIDcxOTUsIDAsIDIwMDcsIDY0NDMxLCAwLCAwLCAwLCAwLCA2MzUsIDAsIDAsIAotICAgIDY1NjEzLCA3NzkwOSwgOTI0MjAsIDczOTk3LCAwLCAwLCAxMTkyMTgsIDc5ODQsIDg2MDAsIDc0NDM0LCAxMjc3NzAsIAotICAgIDQxNzYsIDcwMDUwLCAyMDM0LCA5MjU1MSwgMTIwODA1LCA2NTg5MSwgMTI3MDM4LCAwLCAzMTgsIDIwMzgsIDEyODg2MCwgCi0gICAgNzg1OTYsIDAsIDM2NDksIDEzMTQ5LCA0MjE0NSwgNDI3OTgsIDM2MzQsIDEyMDI5MSwgMTE4OTI3LCA2NzY3NywgMTIwMTI0LCAKLSAgICA3ODY2LCAwLCAxMTQwMiwgNDIxNDYsIDk0MDMyLCA3NDIzOCwgNDI2NjQsIDI4NDksIDEyNzAzNCwgMCwgNzkzOCwgMTI5NjAsIAotICAgIDE3NjEsIDExODEyLCA2NTM3OSwgNjgzODYsIDEyODE4NSwgMTE1OSwgMCwgNjk3MjksIDAsIDAsIDcxNzgsIDE5NDYzMiwgMCwgCi0gICAgNDE2ODAsIDAsIDEyODIwMywgMTE1MzQsIDE1MTQsIDExNjY4LCA2Nzg5MSwgOTMxMywgNzAxNSwgMCwgNjc4NzcsIAotICAgIDE5NDU2NywgMTI5ODksIDY2NDc0LCA5MzY4LCAxMjg0OCwgMTYyNCwgNDMyNzAsIDAsIDc0Mjc4LCAxMDgxOCwgMTI2NjQ0LCAKLSAgICA5OTUzLCAwLCA3ODQyMSwgMTE5NCwgMzI0MiwgOTc2MSwgOTU1NSwgODU5OCwgMTIwMjk5LCA2MTY5LCAxMjg3MSwgMTU1MSwgCi0gICAgMjc5OCwgNjUxNzYsIDQ5NTgsIDQyNzUyLCAxMTkwMjUsIDAsIDY3ODc1LCAxMjAzMDEsIDM0OTUsIDY2NjQ4LCAxOTQ3NjgsIAotICAgIDAsIDY4MzY0LCA5ODMyMjIsIDQ4OTEsIDAsIDEwNjQxLCAwLCA3Mzc0NiwgMCwgNjgzNTIsIDAsIDczNzg3LCAxOTQ4MjksIAotICAgIDE5NDYzMywgNzE5OSwgNjQ5NTUsIDAsIDAsIDAsIDAsIDAsIDQyNjg1LCA0MjY3OSwgMTkzLCAwLCAwLCAwLCA0MjY2NywgMCwgCi0gICAgNTI3MSwgOTIzMTgsIDkyNTE3LCAxMTg4ODIsIDEzNjIsIDEzMjk3LCAwLCAxMjgwOTQsIDAsIDk4MzMyMywgNzM3ODksIDAsIAotICAgIDY2NTgsIDQ0MjYsIDAsIDkyNjI4LCA5ODM4MzMsIDkyMzE5LCA3Mjc2LCA0MjE2MywgNTIyMCwgMCwgMCwgOTgzMzIyLCAKLSAgICAyNDE2LCAzMzEwLCA0MjcwMywgMCwgMzc5LCAwLCA0Mzc1NSwgMCwgMCwgMzIyMywgNjU0OTIsIDEyODQsIDE5NDc3MSwgCi0gICAgNDU0OSwgMCwgMCwgOTgzMTU0LCAxMjc3NjMsIDEwODA3LCA5NTU4LCAxOTQ2MTMsIDAsIDg1MTUsIDg2ODgsIDEyODY2LCAKLSAgICA2NTMwOCwgMzI5NCwgOTgzMzI0LCA4NTI5LCAxMjgxMDEsIDQzMzg1LCA3NTY0LCAwLCA0MzMyOSwgMCwgOTI0NTgsIAotICAgIDczNzU3LCA2NjQ1NiwgNDIzNTksIDAsIDIwMzEsIDAsIDcyMDIsIDAsIDEyNjc2LCA0MjcyOSwgOTIxOTgsIDMyMTUsIDAsIAotICAgIDc3MTAsIDE2MTAsIDczODAxLCAwLCAwLCA2NTY4MiwgMCwgMTIwNTM3LCA2NTkyNCwgOTk3NCwgMjI4LCA2NjM1NCwgMTUwMSwgCi0gICAgMCwgNjQzOTUsIDUxNzksIDcyMDAsIDYyMjUsIDAsIDY1Nzk0LCAxNzI1LCA2NTUzMywgODE5NiwgNzQ3NiwgNzQzOTksIDAsIAotICAgIDAsIDcxNTIsIDg1MDIsIDU3NjIsIDE5NjcsIDc0ODMsIDAsIDAsIDgxMDQsIDAsIDc0NzQsIDc3OTc5LCAwLCAxMjY1MDcsIAotICAgIDEwNDE0LCAxMzAwMSwgODE0MSwgMCwgNDI1MzcsIDE1NTcsIDQzNTk0LCAxMjg2NDIsIDYzMzAsIDY4MDUsIDg2MzEsIAotICAgIDI1NDUsIDcwMDUyLCAxMjcxNjYsIDAsIDc0MTkwLCAwLCAwLCA5ODM3NzcsIDQyNzYyLCAwLCA0MjkxNCwgMTY1MCwgMjYyLCAKLSAgICAxNjM3LCAwLCA3OTAxLCAzMjM4LCAxMjgxNzMsIDQxODYxLCAwLCAxMjg1ODUsIDY1MTU4LCAxMDg2MCwgOTQwNTksIAotICAgIDQzNjU4LCA3NTI3LCAwLCA0MzMxOSwgNjQxOSwgMCwgNDUsIDAsIDY0NTg4LCA5Mzk4OSwgMCwgMTE5ODEwLCA3MTk0LCAKLSAgICA1MjkxLCAwLCA0MzY2NiwgMTMxMjksIDAsIDkwODQsIDAsIDg3MzcsIDAsIDEyODgxLCAwLCAxMjkwNiwgOTYzOSwgNzkxMiwgCi0gICAgMjYyMCwgMCwgMCwgMCwgOTgzODY2LCAxNzksIDY1ODk2LCAwLCA2NDc1NiwgMjg1MywgNzg0NDMsIDExODgxMywgOTgzODgxLCAKLSAgICAxMTg5OTYsIDExOTAwOSwgMjg1MCwgODA4NCwgOTgzMDg1LCA3Mzg1MCwgMjgwMSwgOTIyODQsIDQyMDY5LCAxMTk4MzksIAotICAgIDc0NzU0LCAxMTk4NDEsIDQyMDcyLCAxMTk4NDMsIDExOTg0MiwgMTAzOTgsIDk4MzA1NiwgMCwgODM3NywgMTI3MTE2LCAKLSAgICA4MjQ1LCA2ODQwMSwgMzE1OCwgOTIzOTYsIDM5ODMsIDQzNjU2LCA5MjMsIDExOTg1NywgMTE5ODU2LCAyOTIsIDEzMDAyLCAKLSAgICAxMTk4NDUsIDExOTg0NCwgMzIyMSwgMTc2MywgOTI0NjMsIDQ2MTIsIDExOTg1MSwgMTE5ODUwLCA3MjUzLCAxMjcxMTAsIAotICAgIDY4MzkxLCAwLCAxMDc4MiwgMzYzNywgMTI5OTYsIDQzNTQyLCAwLCA2NDU3OCwgOTgzNjY2LCAzMjI4LCA2OTYzNiwgODc4MywgCi0gICAgMCwgMTE5NjE0LCAyNzMxLCAwLCAwLCA3ODU4NSwgNDEwMiwgNzY5NiwgNzM4NzgsIDAsIDAsIDc4NTg2LCA0MzMxNiwgCi0gICAgNDE3NywgMTEyODMsIDkwODksIDAsIDczOTk2LCA5ODMxNzMsIDY0NTAwLCA0MzY3NCwgMCwgNjQ5NDcsIDE4NTYsIDAsIDAsIAotICAgIDYzNzksIDAsIDAsIDAsIDMyMDgsIDEyOTc1LCA3NDc3NSwgMTI3MzgwLCA5ODM5MjIsIDkyMzg5LCA3NDA3MiwgNTUyNjksIAotICAgIDAsIDAsIDk4MzY3NCwgMjAzMywgNzg1NzcsIDc4NTc2LCAxOTUwMjYsIDU1MjU0LCA3NzQwLCAwLCAwLCAwLCA3Mzk2NCwgMCwgCi0gICAgOTM5ODgsIDY3NjEyLCA2NTY3NCwgMTI4MjQ0LCA5NDExMCwgNDE2ODksIDAsIDc0MDA2LCA2NDkwOSwgNjY0NiwgMTE3OTAsIAotICAgIDc0MDE5LCAwLCAxMjgwNjYsIDEyODAzMSwgODU2MSwgNDU3MywgMCwgNTMyNiwgMCwgMTIwNjA1LCA3MjMwLCA4MjU3LCAwLCAKLSAgICA4Nzc4LCA0MTY4OCwgMCwgNjU3NzYsIDIwNzEsIDgzMTQsIDY0NTksIDAsIDc2MjgsIDY1MDkyLCA3MzkwMywgNjY3MjEsIAotICAgIDExMzQyLCAxMjg1NjEsIDAsIDAsIDEyODIyNiwgMTI3MDAxLCAwLCAxMTgxMCwgMTMxNjQsIDEwNzIzLCA5NjcsIDk4Mzk0MiwgCi0gICAgMTI2NDY5LCAxMTk0NiwgMCwgMzI1NywgMCwgMTIzMDcsIDE4NDUsIDk4MzE1NywgNDM1MjYsIDAsIDAsIDE4ODYsIDQyMzQyLCAKLSAgICAxMDA4OSwgODcwLCA3NjQ4LCAzNDk5LCA4NjA5LCA3NjUyLCA4NzYsIDg3MSwgODc3LCAwLCA4NzgsIDQyMDE1LCA4NzksIAotICAgIDQzNjkyLCA0NTYzLCAwLCAwLCA3NTkxLCA2NTg4NywgODY3LCA5NTIwLCA4NzIsIDEyNjYwNywgODY4LCA4NzMsIDc2NDIsIAotICAgIDAsIDg2OSwgODc0LCA3NjQ0LCAxMjA2NzQsIDg3NSwgNzkwLCAxMjgzMDMsIDAsIDAsIDAsIDY2MTgyLCA5ODMyNTAsIAotICAgIDU0MjksIDE5NTA1NSwgNjYxODAsIDEyNjQ4MCwgNjYxODEsIDY4NDUyLCA5ODMyODEsIDk4MzI0MiwgNDIwNjcsIDAsIAotICAgIDU0MzMsIDEwNjU3LCA3OTExLCAxOTQ2MjIsIDE1NDcsIDY2MTc2LCA0MjAxMiwgMTIwNTc2LCA1NDI1LCA0OTc3LCA5OTk5LCAKLSAgICA1MzE3LCA1NDIzLCA0NjExLCAwLCA2NzYzNywgMCwgOTY3OSwgNzQxMjIsIDAsIDAsIDAsIDY2MTk0LCA0NDE4LCA2NjE4NCwgCi0gICAgNDYyOCwgNDI0NSwgMTE5NjQ4LCAwLCAwLCAxODUxLCAwLCAxMjcxODksIDExOTA4LCAwLCA5MzYwLCAxMTg4OTcsIAotICAgIDk4MzI3MCwgNDI3NzYsIDY2MTg3LCAxMjgzNywgODgyOSwgNzcxMSwgOTI3MTQsIDAsIDkyMzIxLCA0MzMxOCwgMCwgODgwOSwgCi0gICAgNjk4ODEsIDAsIDk4MzE0MiwgMTIwNjA0LCA5ODMwNTIsIDk4Mzg3MywgMCwgOTgzMjYyLCAwLCAwLCA3NDI3LCA5OTU4LCAKLSAgICA0NTg4LCA0MzY4MCwgMCwgNzQ0ODQsIDE5NDk2OCwgMjQzMywgMCwgMTE5NjIyLCAzMzUyLCA3NDM2MywgOTgzODc2LCAwLCAKLSAgICA3OTMsIDc0NDA0LCAwLCAzMDUsIDU2NywgNjc2NjIsIDg0MiwgMTI4NTE5LCA4MjA4LCAwLCA0MTY5NSwgMTY0NywgCi0gICAgMTE4ODc3LCAwLCA3ODM3LCA5MTc2MjUsIDgxOCwgNTMzNywgMTk0NjI4LCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIAotICAgIDEyNjU3NiwgMTIwNTk0LCA3NDA4NiwgOTE3NjE1LCA5MTc2MTQsIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCAKLSAgICAxMjcxNzIsIDkxNzYwOCwgNDk2OSwgMTI1NCwgOTE3NjA1LCA5MTc2MDQsIDkzOTY3LCA5MTc2MDIsIDY1MjI4LCA3ODIyMSwgCi0gICAgMTI2NjEyLCAwLCAyODQwLCAwLCAxMTk5ODIsIDk4MzkzMCwgMCwgMzI0NSwgOTA2OCwgNjgxOTQsIDY0NzI1LCAwLCAwLCAKLSAgICAxMjk5MSwgMCwgMjY1MSwgNjgwMTYsIDk4MzI1NywgOTE3NjExLCAxMjcwMjYsIDEyODg4MywgMCwgMCwgNDM2NDgsIAotICAgIDEyMDgxMiwgMCwgNDMzMjIsIDkyNjYyLCAwLCAwLCA2NDM3MiwgOTI2OTgsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCAKLSAgICA3NDUyLCAzMjg1LCAxMjg3NzksIDEyNzgyMSwgMTE5OTg4LCA2NTYxMCwgMjM5MSwgMCwgOTIyNDgsIDY3MSwgMjUwLCAKLSAgICA3NDM0LCA2MTgsIDY2OCwgNjEwLCA0MjgwMCwgNzQzMSwgMTE1MiwgNDI4MDEsIDY0MCwgMTIwNjY2LCA3NDQ4LCA3NDM5LCAKLSAgICA2MjgsIDM5MDUsIDczODEwLCAwLCAxMjgyNjYsIDY0NzQ5LCA2Nzg1MCwgMjEwNywgMCwgMCwgNDYwNSwgMTI4MTc0LCAKLSAgICA5ODMxOTIsIDQzMzcyLCA2NTk0NSwgMTI4ODM4LCAwLCAxMTk1OTAsIDAsIDAsIDAsIDk4NywgNjkyNywgMTE1NzIsIAotICAgIDQyMjYxLCAxMTQ2NCwgMzM2NSwgOTk3MSwgMCwgMCwgMTI4Mjk3LCAwLCAwLCAwLCAwLCAxMTMzNCwgNDMzMjYsIDEyNjA5LCAKLSAgICAxMTUxOSwgMTE1MDMsIDU1MzAsIDUyMTAsIDAsIDQ2MjcsIDk4Mzg4MywgNTIwOCwgMCwgMTI4ODQyLCAxMDMzMiwgNTIxOCwgCi0gICAgNzk3NiwgOTE1NiwgMCwgMzI0NCwgNTUyOSwgNjk2NDcsIDczODk0LCAxMjg4NTIsIDU0MzIsIDY0OTY1LCA1NTI3LCAKLSAgICA3NDAzMywgMTA1MTYsIDc3OTAsIDU1MjgsIDAsIDQyMTQwLCAxMjAyODEsIDAsIDAsIDQzNTQ1LCA5ODg3LCAwLCA0MDAwLCAKLSAgICA3NDI5LCA3NDI4LCA2NjUsIDc0MjQsIDMyMDYsIDEyMDI3OCwgNzg4NCwgMCwgMTI4NTY2LCA5MTc5ODksIDEyODY2NiwgCi0gICAgMjExLCAyNTA5LCAxMjg4NTgsIDEyMDU3MywgNjg2NzIsIDMyMjAsIDQyMjM1LCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgCi0gICAgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIDQ1OTAsIDEyNzI1OCwgNTg1MiwgMCwgMCwgMTI3MjU5LCAxNzA4LCAwLCA5ODMxNjUsIAotICAgIDI2MjMsIDExOTQzLCAwLCA2OTIyNiwgMCwgNDY5OCwgNjY1MDksIDEwNjYsIDExOTkyMSwgNDcwMSwgOTgzODY3LCAKLSAgICAxMjAyODUsIDc0MjI1LCA5NDExMSwgODI2NywgMCwgMTI3MjY1LCAwLCA3NTE2LCAwLCAyNjI1LCA5ODM5NjgsIDgwMzQsIAotICAgIDc0MzA5LCAwLCAzNjMxLCAxMDk1NSwgNzg1MCwgMTIwMjkzLCA4NDE2LCAwLCAwLCAwLCA0MzM4NCwgMTI2NjAsIDAsIDAsIAotICAgIDAsIDc0ODUwLCA0MTA2OSwgMCwgMTI4MTU2LCAxMjA5OSwgNDMxMCwgMTAwMzIsIDYyNTIsIDcxMywgNzk5MCwgMCwgMzk5MCwgCi0gICAgMCwgOTgzMjU0LCA2NjM2OCwgNTAxNywgNjQ5NTYsIDcwNzEsIDAsIDExOTE0NCwgMTAzMCwgMTE4ODAwLCA5ODMxMjAsIAotICAgIDk1MTMsIDQxMDU5LCA5MzU3LCAwLCAxNzczLCAwLCAxMjAzNTAsIDAsIDYzMzksIDc3NDUsIDk4NDQsIDAsIDY0NjUwLCA5NCwgCi0gICAgMTg4MCwgNzQ3NjYsIDk4MzgyOSwgODkwOCwgMCwgMTI4NzA3LCA2NTkxMywgNzg0NzAsIDEwNzUyLCAxMzAwMywgMCwgCi0gICAgMTI2NTcyLCA0MTMwNywgODczMiwgMTIwMzM4LCAwLCAxNzU3LCA2OTY0LCA0Njk2LCAwLCAxMjAzMzUsIDY0Nzg1LCA3Mzk0LCAKLSAgICAzNjQxLCA1NDE5LCAxMjgwNTUsIDAsIDEyNzg4MywgMCwgMTIwMzQ0LCA0Mzk4OCwgMCwgODYxMCwgNDMwNjIsIDc1OTIsIAotICAgIDg1NiwgNzQyOTksIDkzNiwgMTMyODksIDY5ODk0LCA0MzE3MSwgMTQ1OSwgMCwgNjUyNDMsIDc4NjM4LCAxOTk1MywgMCwgCi0gICAgMTUwNCwgNzAwNjQsIDAsIDEyOTEzLCA3NDIwNiwgNzUyOSwgMCwgMTI4Njk5LCA5ODM5NDgsIDEyMDc4MiwgNDExMywgMCwgCi0gICAgMjM3MiwgMzM2LCAwLCA3NTA5LCAxMjE1MiwgMCwgNjgyLCA2NjQ1OCwgNDE1MDUsIDAsIDY0NzQzLCAxMDU5MywgMTcwMywgCi0gICAgMCwgOTgzOTQ2LCA4MDMzLCA2OTk1MywgMCwgOTgxMCwgMTI3MjY5LCAwLCAxMjk3MCwgMCwgNDIzNTEsIDEwMTA5LCAKLSAgICA5MTc2MjMsIDAsIDE5NDY5MywgMCwgOTI2OTAsIDAsIDAsIDc0MjkxLCAxOTY1LCA3MDY5LCA0MzMxMiwgMCwgNzM4ODcsIDAsIAotICAgIDIwODcsIDY0MzcwLCA2MzE0LCA0MTcxNCwgODUwMSwgMCwgMCwgNzQyMzksIDQxMzE3LCA5MjYxNCwgMjA5MSwgNzQ1NDUsIAotICAgIDIwOTAsIDAsIDkzNTMsIDcxMTcsIDIwNzcsIDc3ODg2LCAwLCAxMDQ5OCwgMjA4MywgNzc4ODgsIDAsIDAsIDExOTIzNiwgCi0gICAgNjM0LCAwLCAwLCAwLCA2OTc3OSwgNDE2NSwgODc0NiwgMCwgOTY1NCwgMTI4NTYsIDY5MjQsIDAsIDcwNjYsIDk4MzcxMCwgCi0gICAgMCwgMTI4MTM1LCA0MTAzNywgNDI2OTIsIDc3ODYsIDEyOTU5LCA0MTAzOSwgMTI3NDgzLCAwLCA2ODAsIDIzMDIsIAotICAgIDEyODIwMCwgMTE4MSwgNzA1NiwgMzE3NCwgMTI2NTE2LCAwLCA5MjY2OCwgNjU2NjUsIDEyNzM3NSwgMTI2NTA2LCA2OTIwLCAKLSAgICAwLCA5MjI5NSwgMCwgMTE4OTY1LCAwLCA2NDY0NCwgMTI2OTgxLCA3NDExOSwgMCwgNDEwMjgsIDAsIDYyMzEsIDI2MTMsIAotICAgIDY1MzAyLCA0MDk4OSwgMCwgMTk0Njk2LCAwLCA0Mjc2MCwgMCwgOTgzNTY2LCAwLCA0MDk4NywgNDY2NywgMCwgOTgzOTIzLCAKLSAgICA4ODI4LCAwLCAwLCAxMjQ2LCA0NzQ2LCAwLCAwLCAxMTAyMSwgNDc0OSwgOTI2NzUsIDAsIDkyMSwgNDc0NCwgMCwgMTI3MDIsIAotICAgIDI0MiwgMCwgMTU2NiwgODIxNywgMCwgNjQ2NTMsIDc4Mzg2LCAxMjgxMjEsIDc0MDM2LCA3NDUwNSwgNDMyNzQsIDUzMTMsIAotICAgIDk1MSwgMCwgMCwgOTgzODU4LCA3NjA0LCA5ODMyODIsIDQwMDksIDEyNzgxNiwgOTgzNzAxLCAxMjA1NjIsIDAsIDk4MzcxMSwgCi0gICAgNjQ4NjAsIDExOTEzOCwgMTE5MDY5LCAwLCAxMjczNzAsIDQwNDgsIDk4MzU5OCwgMCwgNzAwMjQsIDE2NDYsIDc3ODkwLCAKLSAgICA2NDUzNCwgNzM5OTUsIDEyMDcwNSwgMCwgMTE5ODkwLCAyNTc5LCAxMTk5MDUsIDMxNzcsIDExMzU3LCA5MDk5LCA0MTA3LCAKLSAgICAzNDQxLCAxMTk4OTQsIDI5NzUsIDc0NDQyLCA5ODIyLCA5ODM5MjYsIDU1MjIwLCAxMDA4NCwgNzM5NDMsIDExODg0MCwgMCwgCi0gICAgOTE3NTYyLCAxOTQ2MTAsIDMzOTksIDk4NTEsIDk4MzcwOCwgMTE5MDksIDkwNTksIDAsIDc2ODcsIDAsIDY3ODksIDAsIDAsIAotICAgIDAsIDcxMzY3LCAwLCAwLCAxNzc3LCA5MTUxLCAxMTM3LCA2OTc2NywgNzQ5LCA0MjM2NiwgMCwgNTM4NSwgMTI4NTc0LCAKLSAgICAxMjgyMTgsIDAsIDAsIDU5ODksIDAsIDAsIDEyODA5MSwgMCwgNDE2ODUsIDY5MjIzLCAwLCA5NzY5LCA0MTY4NCwgCi0gICAgOTgzMjE0LCA1MTksIDAsIDExNzQwLCA1NzY2LCAwLCAwLCAyNjAwLCA4ODQ4LCAxMjAxMzgsIDQxMjk3LCAwLCAzNjY2LCAKLSAgICA3NDQ3MywgNDEzMDAsIDc0NDY4LCA2NTE2MCwgMCwgNjk2ODgsIDY5NzcxLCA3NDQ3OSwgMCwgNjU1OCwgMCwgMCwgNjk3NjUsIAotICAgIDEyMDc1MCwgMjUyLCAwLCA0MTMwMiwgMCwgMCwgMCwgNjk3NjMsIDAsIDExNzI5LCA4NzE5LCA5MDYwLCAwLCAxMjAxMzksIAotICAgIDEwNzYxLCAwLCAwLCAwLCAxMTg3OTIsIDExNzM0LCA5ODMyMjEsIDExNzMwLCAwLCA5NTkzLCA1NzU3LCAyNDAzLCA2NDgwOCwgCi0gICAgNTUyNzUsIDAsIDExNzI4LCA0MzU3MiwgMCwgMCwgNzc2NCwgOTgzNzA1LCAxMTA5NCwgMTIwODI1LCAwLCAwLCA0MjgyLCAKLSAgICA4Mjk4LCAwLCAwLCAwLCAwLCAwLCA2NDQ0OSwgMCwgMTI2NjUwLCA2Mzg1NCwgODQ1NiwgMCwgNzQ3ODMsIDY1NjcwLCAwLCAKLSAgICA3ODI1MCwgMCwgNzc3NCwgMTA2MDcsIDk3OTIsIDAsIDAsIDAsIDAsIDEyMDc2NCwgMCwgMTAwMTksIDc0NzYyLCAwLCAKLSAgICAzNDU4LCA0MzY1LCA3MDA1MywgOTgzNzAzLCAzNjQ3LCAwLCAyNjAyLCAxMjgzNDEsIDAsIDE5NDcwNywgNDExMzUsIDAsIDAsIAotICAgIDAsIDY0NjMxLCAxNzIsIDQ5NzEsIDQxMjE5LCA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgMTI2NDc2LCA5MjE5MywgNzU5NywgCi0gICAgMTA1MjgsIDAsIDAsIDM3MzIsIDczOTEwLCAxOTQ1ODgsIDUzNDQsIDAsIDQzMzY2LCA0MzM2MywgOTA2MiwgMTE5MjUyLCAwLCAKLSAgICAwLCAwLCA2NDQ3OSwgOTIzMiwgOTI1OTYsIDAsIDAsIDE5NDcxMiwgMTA5MDAsIDQxNTMxLCAxMjYzLCAzNzIwLCAxMjA0OCwgCi0gICAgMCwgNjQyOTIsIDQxNTI0LCA3MjI3LCAxMTk2MzUsIDYwOTksIDQxNTM0LCAwLCAxMjczNTQsIDEyNzM0NSwgMjk5LCAKLSAgICA5MTc5NTcsIDg1MjUsIDEyNzM0NywgMzUyNCwgOTE3NTY1LCA4ODMxLCAxMjczNDksIDkyNTY0LCAzMDc1LCA2Nzg2NywgCi0gICAgMTI3MzUyLCAwLCA2NjM2MiwgMCwgNjQzNTMsIDAsIDAsIDU4NDUsIDAsIDAsIDAsIDI1ODEsIDgyMDAsIDY1MTE0LCAKLSAgICA2ODQ2MCwgMCwgNDMyODMsIDU1NTEsIDAsIDEyMDczNSwgMCwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgNzIwNCwgCi0gICAgNzAwNjUsIDI1ODgsIDI5MTQsIDcwMTEsIDU1MjgxLCAwLCAyNDcxLCAxOTQ2MzEsIDI4ODMsIDI3NDksIDExOTU2MywgCi0gICAgNzM3NzQsIDEwOTEzLCAwLCAwLCA4NjY2LCA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIAotICAgIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgCi0gICAgNzQyODksIDY4NDcyLCA0Mjg1NywgODI2MiwgOTgzMzcxLCAwLCA5ODMyMjAsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgCi0gICAgNzIzNCwgNzQwNDcsIDk4MzA4OCwgMCwgNDM3NDQsIDAsIDAsIDczODQ2LCAyOTM0LCAxMjcyMiwgMTIwNzYyLCA5MjIsIAotICAgIDQzOTgzLCA3NDUwNywgOTgzMTI2LCA3NDQ2MSwgMzIxOCwgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCAKLSAgICA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAzMjE0LCAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCAKLSAgICA3ODcyOSwgMTkwMSwgNzg3MjcsIDEyNzMyNiwgMTIwNDYwLCA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCAKLSAgICA3ODczNSwgNDMzODMsIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIAotICAgIDExOTY2MSwgMCwgMCwgOTgzMzEzLCAxMjA3MzcsIDAsIDk4Mzk2MiwgOTgzMzEyLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCAKLSAgICA5ODMzMTcsIDY1Njk1LCAxMjY1NTksIDM3LCA3MDY4LCAwLCAxMjA0ODAsIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAKLSAgICAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgOTgzMzkxLCAwLCAwLCAwLCAwLCA2NTUxMCwgMCwgMCwgNTIzMywgCi0gICAgOTgzMzI3LCA2NDc5MiwgOTgzMzI2LCAwLCAxMjY2MzMsIDAsIDcwNjAsIDk4NDcsIDEyMDE0NCwgMTY4NSwgNTk1LCAwLCAKLSAgICA3Mzk3MSwgMTI5MiwgODk0MCwgNzM4MCwgMTEwODgsIDAsIDEwMDA0LCAxMjY5OTcsIDAsIDY1NDEsIDAsIDAsIDAsIDMyNDMsIAotICAgIDkwMTQsIDU2MDYsIDAsIDUzOCwgNjQ2MjAsIDU2MDIsIDg0NjcsIDc0MzkxLCA2NTQ3LCAxMjgxMzIsIDgyMDMsIDc4NDg4LCAKLSAgICA5ODMwOTAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIAotICAgIDY5OTAxLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIAotICAgIDkyNDE0LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCAKLSAgICA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAKLSAgICAwLCA0Mjg4OCwgNjU3MTIsIDk4MzI5NiwgMzg2OSwgMTE5MzcsIDU3MjUsIDEyNzUzOSwgMTc4MywgNjg2NDgsIDU3MjgsIDAsIAotICAgIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgNzg1MjEsIDAsIDAsIDc2NCwgMCwgMTI4MTE2LCA0MzUzMSwgMCwgCi0gICAgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAxMjA3NDksIDExNDIzLCAwLCAxMTk4NjEsIDcxMzQ0LCA0MzQ2NSwgMCwgCi0gICAgMTI4MjY3LCA2NTU5LCA2NDU1NywgNzEzNDgsIDkyNjQ5LCAxMjA2NDgsIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDc0NDkxLCAwLCAKLSAgICA0MzM3NywgOTIyODIsIDcxMzQ2LCAxNDc4LCA5NzgzLCAxMTgyNSwgMjYwNywgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAKLSAgICAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgNzAwNTgsIDQxMTQ0LCAwLCA5MjQzOCwgNDM1MzcsIDY3NjEsIDEwMDkzLCAKLSAgICA0MzY5LCA5MTc3OTEsIDAsIDk4MzE0OCwgODgyMCwgMzk0NywgMCwgMCwgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgCi0gICAgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgOTgzMzc0LCAKLSAgICAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCAKLSAgICA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIAotICAgIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgCi0gICAgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIDMxMzcsIDAsIDQxNDcsIDk4MzE3MCwgCi0gICAgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCA5ODMyODYsIDEzMDc2LCAzMTM1LCA5ODMyNzksIAotICAgIDc4MTQzLCAxMTkxMzksIDMxNDIsIDkyNDUxLCA5NDA2OCwgMTA4MTksIDExOTU4MCwgMTAxODMsIDAsIDI2MDgsIDE0NzAsIAotICAgIDczOTY3LCA5NDAwOCwgNjIyNywgMCwgMTI3MTczLCA2OTc0MSwgOTgzNTgyLCA2MTYzLCA5ODM1NTgsIDAsIDEyNzMxNCwgMCwgCi0gICAgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIDExOTU3MywgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAKLSAgICAwLCAxMjA4NiwgNzQwMywgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAKLSAgICAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgNjk3NCwgMCwgMCwgOTgzMjA5LCA1MDAyLCAwLCAKLSAgICA0MTI4NiwgNjk5NDYsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIDk4Mzk1MywgMTI4MjI5LCAwLCA0MTI4OSwgMCwgCi0gICAgMTk0NjAyLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMTI4Nzc4LCAxMjg2NjEsIDAsIDk4MzM2NywgNDEyNzksIDAsIDAsIAotICAgIDAsIDExMDgxLCA0MzYxNSwgMCwgMCwgMCwgOTgzNjEyLCAxMjcyNywgMCwgMCwgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAKLSAgICAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDk4MzgyMCwgMTk0NTcxLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIAotICAgIDgyOTEsIDQzMDUxLCA5MjU3MCwgMCwgMjU5NiwgNDM1ODQsIDAsIDEzMTEzLCAwLCAxMjc3NTcsIDIzOTMsIDcwNTgsIAotICAgIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgCi0gICAgMTI3NzQ4LCA2NDY5NiwgMCwgMTI4MjIwLCAwLCA2OTk0LCAwLCAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCA5ODMxODIsIAotICAgIDM3NTEsIDkxMjAsIDk4MzQ3NywgMCwgMTc5OCwgNzA5LCAwLCAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIAotICAgIDgxMzcsIDk0MDk4LCA5MjY0MiwgMCwgMCwgMjQ1LCAxMjgwOTcsIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIAotICAgIDYxMzYsIDkxNzYwOSwgNjU2NzcsIDg2ODIsIDQxMjM1LCA5MjU5NSwgNDIwNDUsIDk4MDQsIDExODk2MywgNDMyLCAzNTk1LCAKLSAgICAxOTQ5NDUsIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgCi0gICAgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgCi0gICAgMCwgOTQxMDksIDAsIDc0MTM3LCA3MDAzNSwgMTAwNjMsIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCAKLSAgICA5ODM3MjgsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCA2NjY5NiwgOTM5OTksIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgCi0gICAgNTE0LCA3NDUwMiwgNzAwMzIsIDI5MjEsIDQzMjE1LCA2NDQ5MywgNTc3MiwgMTI5NjgsIDcwMDU1LCAxOTQ5NDQsIDc0NTgwLCAKLSAgICA0MzM5OCwgMjU4MCwgOTgzODAxLCA0MTM0MSwgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCA3MDAyMCwgMCwgCi0gICAgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIDAsIAotICAgIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDk4MzcyNCwgMTE5MDQyLCAwLCAxMjc4NjUsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgCi0gICAgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgNDI1NjksIDEyNzgyNCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCAKLSAgICA0MjQzMiwgMCwgMCwgMTk0NzgyLCAwLCA2NDQ5NiwgNzQxMDksIDcwMDMwLCA5OTE1LCAwLCA5ODMyMTYsIDcwNjEsIAotICAgIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgCi0gICAgMTI3MzgzLCAxMjcxNzEsIDAsIDAsIDEyNzc5NywgOTAyOSwgNDM1NDMsIDExOTMxNSwgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIAotICAgIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIDkyMzk5LCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgMTE4OTc2LCAxMTA2NiwgCi0gICAgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAxMjEwNywgCi0gICAgNzEwMCwgMTA5MDUsIDY1MDEwLCAxOTQ5ODYsIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDkyNjQ0LCAxMzEyMSwgCi0gICAgMTIwMDM2LCAwLCAxMjAxMCwgMTI4NTczLCAxMjgyMjEsIDAsIDAsIDAsIDEyNzE5MywgNjU4MTYsIDY4MTExLCAwLCAKLSAgICAxMjc5MzMsIDY1NjY4LCA5MjI1NywgNjYxOCwgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCA3ODExMCwgNzEyMywgCi0gICAgNzAwMzgsIDU3ODUsIDkxOTgsIDk3NjQsIDQxMzE2LCA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgCi0gICAgMTI4MjU4LCAwLCAwLCAwLCAxMzEyMiwgMCwgMTkxLCA3MDA2MCwgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIAotICAgIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIAotICAgIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgCi0gICAgNDc0MywgMCwgMCwgNzQwNDAsIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDcxMzQ5LCAKLSAgICAwLCAzOTY0LCA2NTkyLCAwLCAxMjg2OTMsIDY2MDQwLCAwLCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMCwgCi0gICAgNDIwNzAsIDY1NjMsIDQzMDc1LCA5MDE4LCA5NDAwNiwgOTgzMzg4LCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDc0NTMxLCAKLSAgICAxMjc5NjksIDAsIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgMTczLCA2NjQ2MCwgNzE3NCwgOTI3MDMsIAotICAgIDExODgyMiwgMTc1MCwgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg3OSwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIAotICAgIDExOTE0NSwgMCwgOTE3NTU4LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgCi0gICAgNDUxMiwgMTE5MzYwLCA2NTIzMCwgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIAotICAgIDM5NzUsIDAsIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgOTgzNTk5LCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCAKLSAgICA0MTA5NSwgMzk2MiwgMCwgMjkzMiwgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgCi0gICAgMCwgMCwgNDE4NTEsIDEyODIzMCwgNDE4NDYsIDAsIDU1MjM4LCA3NjMzLCA0MTg0OSwgNjgzODUsIDQzMjAsIDMyMjQsIDAsIAorICAgIDEyODI1LCAwLCAwLCAxMjcyNSwgMCwgMTI3MTA2LCA3ODY0MiwgMjIzLCAwLCA2OTY3NSwgMTIwMTY2LCA0MjQ0NCwgMCwgCisgICAgNjQ0OTksIDY1MjQ1LCAwLCAxMTcxLCAwLCA2OTcxNywgMCwgMTgwNSwgODc3MiwgNDM4MjAsIDAsIDk5MzAsIDY1MjQ3LCAKKyAgICA3ODYxOSwgMTIwMTExLCAyMzM4LCAwLCAxMTg4NTMsIDAsIDQyNjc2LCAwLCA2NDgwMCwgNjUyMzYsIDY3NjQ0LCA2ODEyNiwgCisgICAgMTIxMywgMCwgNjQwNzUsIDc5NywgNjQwNzQsIDg3MzQsIDQyMTIsIDEyNzM2OSwgNjQzODcsIDQxMTUsIDAsIDUwMDUsIAorICAgIDY0MDcwLCA2NDA3MywgMTA2NzksIDAsIDc3OTU0LCA5NDAyLCA2NDI3NiwgNDI2LCAwLCAwLCA4MjUxLCAxMDEzNiwgCisgICAgNjU0MzYsIDAsIDIxMjAsIDQzMzAyLCAxMjI0LCAwLCA2NTU3NiwgNzQxOTIsIDEwNzAxLCAxNzY0LCAzMTAxLCAxMjc4MTUsIAorICAgIDEyODU4LCAxMjAxNTksIDAsIDExMzczLCA2Mzc4LCAxMjc4NTksIDEyMDEwMywgODY2MywgOTMxMiwgNDE2NDQsIDQ1MzksIAorICAgIDIxMjksIDAsIDkyMjIsIDk4MzczOCwgMCwgNDI1OSwgOTA5MiwgNzQ1NjcsIDQxOTYxLCAwLCAxMjcyNCwgNjYzNTcsIAorICAgIDQyMzMxLCA2NDkzNSwgMCwgMCwgMTI5MywgNzk0NywgMjEzMiwgOTgzNzY3LCA3NDU5MywgMTIwMzA4LCAyNDU0LCA0MjcxNywgCisgICAgMzYxMywgMTI4ODM3LCAwLCAwLCA2NTg4OCwgODgxNiwgMTA5NzgsIDEwODQwLCAwLCAxMDY2OCwgMCwgNDMwODcsIDEyNTk1LCAKKyAgICAxMjAzMDQsIDk4MzExNCwgODgyMiwgMCwgMTE1NywgNjQ5MDMsIDg2MzgsIDAsIDAsIDAsIDAsIDY5ODQ4LCA4MjM1LCAKKyAgICAxMjAzMTYsIDQ0MDUsIDEwMDg2LCAxMjAyNDcsIDAsIDY5MjE2LCAwLCA2NTQzMCwgNzEzMjEsIDYwNzksIDY4MTcsIAorICAgIDEwNzY0LCAxMjc5MTAsIDY0MjkxLCAxMjgwNTEsIDk5OCwgMTIwMzEyLCAxMTA2MiwgMTMxNywgNjQzMjcsIDE1NTgsIDAsIAorICAgIDE5OTEsIDc4ODIsIDQyMjU0LCAwLCA0MTcwMCwgNTMwLCAwLCAxMDQyOCwgMTE5MzM1LCAxMjAwMiwgMTE5MzM2LCA1NzQyLCAKKyAgICA0MzA3NiwgNDY5MiwgNjQ2MzAsIDQxODIzLCA0MDA3LCA1MDA0LCAxMTkzMzQsIDc4OTYsIDc1MSwgNjU5NSwgNjU5NiwgCisgICAgMTIwMzI1LCA2NjM3MywgMCwgMCwgNjQ5MDgsIDkyNjkxLCA2MzExLCAwLCAxMjAwNCwgMTE5MTkyLCAxMjA0OSwgNDMxMDgsIAorICAgIDEyMDMyNiwgMCwgNDE3MDUsIDkyMTg4LCA2NTk4LCAwLCA2NTk5LCAxMjAzMzQsIDAsIDQyMTQ4LCAxMTg4MjUsIDY2MDI3LCAKKyAgICAwLCA2NTk3LCA5NDEyLCA4MzQwLCAxMTgyNCwgNjQ3NDUsIDIyODEsIDY5OTA0LCAwLCAxOTg4LCA1NDA3LCA2Nzg2NSwgCisgICAgMjQzMCwgNDE2NzgsIDAsIDEyMDI0MywgMjMzNiwgOTgzOTAzLCAwLCA3ODg3MSwgMTIwNDQyLCA5ODM3NjksIDE5MjEsIAorICAgIDEwOTQ3LCAxOTkyNywgMCwgNjU0MDYsIDAsIDE5OTEzLCA0Mjg0LCAxMzIxNywgMCwgNDM3ODksIDEyODQxLCA5MjI5LCAKKyAgICAxMDk1NiwgNDIyODUsIDQxNjc0LCAxOTk2NCwgNDE2NzksIDY1MDg0LCAzNTIxLCAwLCA1Nzc0LCA4MzI1LCAwLCA2NTQwMywgCisgICAgOTgzMDg5LCAxODU0LCAxMDc5NCwgMCwgNjc2NjAsIDY5ODQ2LCAwLCA3ODM1OSwgNTI4MCwgMCwgNDM0NCwgMTI5MDUsIAorICAgIDY1NDMzLCA2MDc2LCA2NDc5MywgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAxMjkzNCwgCisgICAgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgNjA3MSwgNjU0MzQsIDEyNzQ2NywgNDgwNCwgNDA1MywgMCwgMTI3NDY5LCAKKyAgICAxOTQ2NTMsIDQxNjk2LCA0NjcsIDY5ODIzLCAxMjc0NjMsIDY5Nzk3LCAxOTQ2NTIsIDEyNzQ3MywgODQyMSwgMTI3NDcyLCAKKyAgICA2OTY4MiwgNDM3MDUsIDUwMiwgMCwgNjU0MzEsIDExOTA1NiwgNjk5NTQsIDEyMDQzLCAxMzAzLCAzMTYsIDczNjQsIDIwMjksIAorICAgIDIxMzYsIDExOTI0NiwgMTE1MzMsIDY0MzY1LCA0MzQ4MCwgOTI2MzksIDQ4NjAsIDEyNjY0OCwgMTI3ODc3LCA0MjQ4OCwgMCwgCisgICAgOTU4MywgMTI4ODQ5LCA1NTQ2LCA4MDE5LCA3Mzg1NiwgMCwgMCwgMCwgNTU0NCwgMjM1NSwgMTIxNTAsIDY1NzI1LCA1NTQzLCAKKyAgICA3Nzk4OSwgNjM3NTEsIDEyMTM3LCA1NTQ4LCA3Nzk4NSwgMCwgNjU3MjcsIDY4Mzg4LCA2NTcyNiwgNjA3NywgMTI4MzUyLCAKKyAgICA2NTQ1MiwgMCwgMTEzMDEsIDc4MDEzLCA3ODAwOCwgNzgwMTAsIDk4NzQsIDc4MDA3LCAwLCAxMzE5LCAzMDUwLCA2NTQxMCwgCisgICAgMCwgMCwgNzgwMTYsIDc4MDE3LCA0MjgzMCwgNDM5OTYsIDY2NzE2LCAxMjgxMzcsIDQ2OTEsIDkyMjQyLCA5MzQ1LCA2MjEsIAorICAgIDkyNzA5LCAxMjgyMjIsIDAsIDY1NDExLCAwLCA0MTE4MiwgNzM4ODEsIDY1NDA4LCA3Mzg5OSwgNzgwMjQsIDk0NzQsIAorICAgIDEwNTQ1LCAxMTkxMTgsIDEwODg3LCAzNzg2LCA2NTQwOSwgODg5NCwgNDMxNzksIDExOTYxMSwgNzkyMywgMzcxNiwgCisgICAgOTIzNjMsIDk5OTYsIDg1MDgsIDAsIDcwMTIsIDgxOTUsIDEyNzgzNCwgOTU2NiwgMCwgMzcyMiwgMCwgNDE3MDcsIDg0OTMsIAorICAgIDU0NSwgOTU3NSwgNDEzNzksIDEwMDUwLCAxMjcxOCwgNjk4NTQsIDg4NTksIDY4MjAsIDc0MzQ1LCA2NTExMCwgMTIwNzQwLCAKKyAgICAwLCAwLCA5MTE5LCAyNzg3LCA3OTIwLCAxMTg4MjMsIDQwMjEsIDIwMTIsIDc5ODUsIDAsIDExOTY2MywgMCwgMCwgNzgwMjEsIAorICAgIDc4MDIyLCA0MTAsIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDAsIDQxNjU5LCA0MTY3MSwgMTgyNywgMCwgNjQzOTYsIAorICAgIDEwMTI2LCAxMjExNiwgNDE2NzMsIDEyMDM3MCwgMTE0MjIsIDc4MTQxLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgNjg0MTIsIAorICAgIDQxMzQ1LCAxMjAzNjIsIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAyMTA0LCAKKyAgICA2NDg1OCwgMzYxLCAxMjAzNTcsIDg0NSwgMCwgNDE1NjAsIDExOTcwLCA0NTYyLCA5MTc5MjAsIDI5MjYsIDkxNzkxOSwgCisgICAgNDU2OSwgNzQxMzAsIDAsIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMTg4OTEsIDY1NjI5LCAwLCAKKyAgICAxOTQ4NTgsIDAsIDAsIDEyNzU0NSwgMTIwNTQzLCAwLCAwLCA2MjkxLCAwLCA3ODYzOSwgNDE2NjksIDcwOTQsIDkxNzkyMSwgCisgICAgMCwgOTgzNTgxLCA3NDA1NCwgMTI3NzU0LCAxOTUwMjksIDAsIDgzOSwgOTgzMzE5LCA3Njk1LCA4NzY5LCA2NTI0NiwgCisgICAgNDgyOSwgMTk0NjYzLCA0ODU5LCA2NDQ2NywgMCwgOTgzOTYzLCAxMTg5OTgsIDcyMDYsIDAsIDY2NDcsIDQzOTg2LCAwLCAKKyAgICA2OTc2NiwgMCwgNjQ3NjQsIDQyMTAsIDk4Mzg2MywgMTI3OTM2LCA4MDQsIDAsIDAsIDEyMjk4LCAwLCA2NjY1MywgMCwgCisgICAgNjQ5MjQsIDEwMDkxLCA3MzkzMSwgOTQ2OCwgNzQyNDUsIDAsIDAsIDc0MjQ2LCA5MjUwMywgMTI4MzksIDY0NjY5LCAKKyAgICA5MjIwMiwgMCwgMTI3OSwgMTQyNSwgNjIyNCwgMTE5MjI5LCAxMTA0OSwgMCwgOTI2OTcsIDQzMjM5LCA4NDgyLCA5MjQ0MCwgCisgICAgMCwgNTAzMiwgNjk2NzcsIDExOTQwLCA2Nzg4OCwgNjY0LCAxMjA0MzcsIDUwMzQsIDAsIDAsIDEyNzUyNSwgNDI3MDIsIAorICAgIDczODg4LCA5ODMxNDksIDEzMjk0LCA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIDEyMDM3NywgMCwgCisgICAgMTIwODE5LCA2ODM4NywgMTIwMTY4LCA3MzkxMywgMTIwMTcwLCA0MTE2MSwgNTUxOCwgNDE3NCwgMTA5OTMsIDQxMTYyLCAKKyAgICAxMjAxNjAsIDY0NTI4LCAxMTY5LCA0MzQsIDQxNDM3LCAxOTA1LCA2MDM0LCA0MTE2NCwgNjQ3NDQsIDk1MjgsIDExODg2NywgCisgICAgMTI4ODAwLCA1MjQsIDAsIDc0MDI5LCA3ODgsIDc0MDI3LCAwLCAxOTQ2MzgsIDAsIDE2NjMsIDEwNDE5LCA3NDAyNSwgCisgICAgNDI2MzYsIDAsIDY5NzI1LCAwLCAxMjA2NTYsIDAsIDY3ODc2LCAwLCAwLCAwLCA2Nzg5NywgNzQwMzksIDAsIDAsIDExMzk1LCAKKyAgICAwLCAxMTkxMDcsIDQzNjEyLCA2NDM0NCwgMCwgMCwgMTA4NTUsIDU0NDUsIDkzNTUsIDAsIDY1MTk4LCA3MzkxLCA4OTg5LCAKKyAgICAyMjEsIDY1Njg2LCAwLCAwLCA4MDEwLCA3MTkxLCA0OTYyLCA2OTc3MiwgODg1NSwgMCwgMCwgNjQ0NjksIDEyMDQyNiwgCisgICAgMTA1NTUsIDAsIDQzMzMzLCA5MjI5OSwgMCwgMTIwNDI3LCAxMDQ1MSwgMCwgNjc2NTMsIDcyNDUsIDEyNDQzLCA3NDQwNSwgCisgICAgOTk0NywgMTIwMTQ5LCA3ODMxNywgMzg3MywgODM2NywgMCwgMTIwMTQ2LCA0MzQzMywgNDM2NDksIDExOTg3LCAwLCAwLCAKKyAgICAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgNjIxNywgNTg5NiwgMCwgNzY4MiwgNzQwNDksIDE0NjIsIDEwMjM1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0MjU5NSwgMCwgNzQ0MDIsIDExODg2MCwgMCwgMTIwNDE5LCA5MjQ5NywgNzQwNTIsIDAsIAorICAgIDkyMzc4LCAxMjA1NDksIDExOTA4MiwgNjQyOTUsIDEyMDQxOCwgMCwgNjQ3NjUsIDczOTIzLCAxMjA0MTcsIDEyMDY2MiwgCisgICAgNjk5MjAsIDE5NDcwMiwgNjIxNiwgMCwgMTA3NTUsIDk0NTUsIDAsIDgxMjQsIDEyNzA0MiwgOTQ3MCwgNjk0NCwgMTI3NTQwLCAKKyAgICAwLCA2OTY4MCwgMjgyOCwgMCwgNTMxLCA0MjYzOCwgMCwgMCwgMCwgNDM0MjgsIDgyMDQsIDM2MTQsIDI4MjcsIDk2OTYsIDAsIAorICAgIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCA3ODU2MiwgMTk5MzYsIDc4MzMsIDEyMDY5MSwgMCwgNDI1OTksIDQyNTk3LCA0MjcwOSwgCisgICAgMTIwNDA5LCAxMjcwNDQsIDAsIDg1MzcsIDAsIDAsIDkzNTQsIDk4MzE2NCwgMTI4ODMzLCA0MTE5OSwgMTAxMjEsIDIwMjgsIAorICAgIDAsIDk4MzE5NCwgNjk3MTUsIDAsIDMwNjIsIDAsIDc0NDQ3LCAxMjYwOCwgMCwgNjY0NDAsIDc1NDUsIDk3MDAsIDEyNTgwLCAKKyAgICA5MjIwNSwgMTIwNzc3LCAxMjA1MDIsIDQxMTU1LCAwLCA3NDA3MSwgMCwgOTgzNDU3LCAxMjcxMywgMCwgMCwgMCwgNzg3NzIsIAorICAgIDAsIDE3MzQsIDAsIDAsIDEyNzA0MCwgNjQ1OTQsIDI0NTYsIDIzMSwgMCwgNzQxNjcsIDU0MiwgMCwgMTE4Nzg2LCAwLCAKKyAgICA5ODM5NzksIDEyMzAsIDAsIDAsIDM1OTcsIDQ0NDYsIDEwNTg0LCA3NDIzNSwgOTIyMTUsIDQwMzcsIDEyNzkzOCwgODM1MiwgCisgICAgMCwgNTY4NywgMCwgNjQ1MTUsIDAsIDE5NDgwMSwgNTUyNjUsIDY3ODQ2LCA3ODQzNCwgOTcwNCwgMCwgMCwgNzAwODAsIAorICAgIDcxMzM4LCAwLCA4NjYwLCAxMjY0OTUsIDAsIDAsIDc4NzczLCA3NDQ4MiwgNDQ4MywgMTcwOSwgNjk3MjEsIDk5MDksIAorICAgIDYwODAsIDAsIDEyMDM1OCwgMTc0NiwgMTMxNSwgODY2NywgMCwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgCisgICAgMTEyNjYsIDEyODE1MiwgMTIyNiwgNjkzMCwgNjc5NzksIDk4MzY5MCwgNjM2MCwgMTA4OTcsIDQxMjMwLCA2MDUsIDAsIAorICAgIDc0Nzg1LCA2OTg3NSwgMCwgMCwgNDE1MDAsIDAsIDMxMSwgMTE0NTMsIDYyMjEsIDEwNjA4LCA2NDk0MywgNzQyODAsIAorICAgIDEwODc3LCAxMTg4NjgsIDY0ODg1LCA3NDI3MiwgMCwgMCwgMTI4NTU5LCAxMjA3MzYsIDc0MzEyLCAzNDUsIDAsIDc0NDU2LCAKKyAgICA2NDYwNiwgOTkxNywgMCwgOTIyMzEsIDUwMzcsIDAsIDE3NzYsIDg0MjIsIDAsIDExODgxNCwgNDE1MDgsIDQxMjAxLCAzMjMsIAorICAgIDQzMzI4LCAwLCA0MjY5OCwgMTI5NSwgMTk0ODUzLCA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMTI4NzcyLCA2NTEyMywgCisgICAgMTEyOTMsIDI2NjgsIDExMjg4LCAwLCA0MjY0MCwgNjU2NjYsIDI1MTksIDkyMzY5LCA2NTQyMCwgOTI0NzksIDAsIDQyNTIsIAorICAgIDUwNDksIDQyNjU5LCAxMTkwMTEsIDcwNiwgNzc1NCwgMTA4NTQsIDg3MzgsIDAsIDY1NDE5LCAwLCAwLCA2NDksIDY1NDIxLCAKKyAgICAwLCA2NjcwMiwgMCwgMTI2NzAsIDEwMTMsIDAsIDY0OTE5LCA3MDUsIDAsIDY1NDIyLCAxMjc4MDMsIDExODMsIDEyNjUxOSwgCisgICAgNzAxNywgNDI4NTIsIDAsIDgxNTcsIDk3MzYsIDY0NTAzLCA2NTQxOCwgMCwgOTgzODc4LCA3NDAzNSwgMCwgMTE5MTMsIAorICAgIDczODc0LCA2Njk2LCAwLCA4OTIwLCAxMTkyOTgsIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAyMDUxLCA2NjIyNywgMCwgNDE4NCwgCisgICAgMCwgMCwgMTAxNzcsIDczNzc3LCAxODU3LCAxOTQ2NTcsIDQ2MjYsIDg0NjQsIDg0NzIsIDAsIDQ2MjksIDg0OTksIDc4MzIxLCAKKyAgICA3ODMyMiwgNDYyNCwgNzgxOCwgMTE5MTczLCAwLCAwLCA3ODA1LCAwLCA5NDAwNywgNjkzNSwgOTIyOTIsIDc4MzI1LCAKKyAgICA3ODMyNiwgNzgzMjMsIDQzMzI3LCA0Mzk4OSwgMTE5MDQ2LCA4NDkyLCA4MjUwLCA4NDU5LCAwLCA4NDk3LCA4NDk2LCAwLCAKKyAgICAwLCA3ODMzNiwgNzgzMzksIDk1NDMsIDc4MzM1LCA3ODMzMiwgNzc4MzIsIDY1ODQ5LCA3NzgzMSwgOTgzOTYxLCAwLCAKKyAgICAxMjQ1MSwgMCwgODY4NCwgMCwgNjEwMiwgMCwgNTI5OCwgMCwgNTI5NCwgMCwgMCwgOTgzNDU5LCAxOTUwNjIsIDk5NDksIAorICAgIDExOTgyNiwgNDM2MTcsIDExOTIxNSwgMCwgMTIwNzMsIDAsIDAsIDc3ODYzLCAxMzEwOCwgMTIwNjE3LCAxMTQzOSwgCisgICAgNDE0NjgsIDk4Mzc1NywgMCwgNTI5MiwgNTUyNzIsIDk4Mzg4MywgMTkzOSwgNTMwMiwgMzk3MCwgOTE3ODc5LCAxMjQ1NSwgCisgICAgMTc5MywgMCwgMCwgMCwgNjY0MywgOTI0NzcsIDY1MjYzLCAwLCA3ODMzMCwgNDEyOTMsIDc4MzI4LCA2NTkyMywgMCwgCisgICAgMTMyMTksIDk1NjksIDAsIDc0MzgzLCAwLCA3NDE5NywgMCwgNTUwMCwgODgxMywgMCwgMCwgNzQ1NjYsIDUzMjIsIDAsIAorICAgIDc4MzQwLCA0MzYzMSwgNTMyNCwgNjY0NDMsIDM3ODQsIDQxNjE0LCA2NTI2OSwgNjIzMCwgNzgzNDksIDc4MzQ1LCA0MzMyNCwgCisgICAgMzM2MCwgNzgzNDQsIDExNTIzLCAwLCA5MjQ4OCwgOTkyNiwgNzE5NywgMCwgNjg0MjksIDQyODk0LCA0MTgyMSwgMTI0OSwgCisgICAgNzgzNjAsIDc4MzYxLCA3ODM1NiwgNzgzNTgsIDc4MzUzLCA2NDg5OSwgNjQ3NjMsIDQxMTQ5LCA0MTgwNywgNDMxNjIsIAorICAgIDQxODE1LCA0MTE1MCwgMCwgMTA1NzEsIDEwMDk2LCAwLCAwLCA3ODA3NCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgCisgICAgNzg1MTAsIDQxOTkwLCA3ODUwOSwgNDE4MTEsIDc0NDY2LCA5Mzk2NiwgNjY3MCwgNzc4ODIsIDAsIDAsIDQzMDkyLCAKKyAgICA0MzMyNSwgMCwgMTAxNjgsIDAsIDk3ODEsIDEyODY1NSwgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAKKyAgICAxMzAxOSwgMTE2NzAsIDY5ODYwLCAzMTUsIDEyODEzLCA5ODM0NTgsIDc4NDMyLCA3ODI1NiwgNzgzNTEsIDc4MzUyLCAwLCAKKyAgICA5ODM2NTcsIDAsIDAsIDEzNzgsIDk1MDksIDAsIDAsIDc0NDc1LCAzMDY2LCA5MjIyMCwgNjc4NDcsIDAsIDkyMzU1LCAwLCAKKyAgICA3ODM2NSwgODc4NywgMTIwMzc5LCAxOTQ2MTYsIDQxNjE4LCAxOTQ2MTUsIDc4MjYxLCAxOTQ2MTQsIDAsIDY0NjUyLCAwLCAKKyAgICAxOTQ2MTIsIDAsIDc4MzY2LCA0MjA4OCwgMCwgMTk1MDYxLCA3MTc2LCA0Mzc1NiwgMTAxMzcsIDYxMjEsIDEwOTk1LCAKKyAgICA3ODI1OSwgNzQ1MzQsIDgxMTksIDY0ODc0LCA5MTc4MTYsIDEyNzE5OSwgMTk0OTM5LCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIAorICAgIDEzOTQsIDc0NTE0LCAwLCA3NDUxNSwgMCwgMTE4ODA0LCAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgCisgICAgNDIwOTAsIDExOTE2NSwgMCwgMTE5MTAwLCA0MTIzNiwgOTIyMzUsIDQyMDA1LCA0MjAwMywgNDEyMzcsIDU4NDgsIDAsIDAsIAorICAgIDM2NzAsIDEyODY1NywgMTk0NjAwLCAwLCAwLCA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIDAsIDYyMjksIDE1OTMsIDAsIDAsIAorICAgIDYxOSwgNDYzNSwgNjUwODAsIDAsIDEyODAwMiwgNDEyMCwgNjUzMzcsIDY1MzM2LCAwLCAxMTgwOCwgMTE5MjE0LCA3NDExNSwgCisgICAgOTM2NiwgNDI3OTAsIDQyMDA2LCAxMTkxMTUsIDY1MzI3LCA2NTMyNiwgNjUzMjUsIDEwNzU3LCAxNTA3LCA0MjIxNiwgCisgICAgNjUzMjEsIDY1MzIwLCA2NTMzNSwgNjUzMzQsIDY1MzMzLCA2NTMzMiwgNjUzMzEsIDQyMDU5LCA2NTMyOSwgNDI2ODksIAorICAgIDkyNDI3LCA5MTI4LCA5NDA0NSwgNDIwNzMsIDY3ODUsIDY0NTkwLCA5ODM4MzAsIDQzNzEsIDcxOTYsIDY1MzE4LCAyMDM1LCAKKyAgICA2NTMxNiwgNDEwNiwgNjUzMTQsIDY1MzEzLCA0MjA3NCwgMTI3ODQ3LCA0MTIyOCwgMCwgNjU2MDksIDQxMjQxLCA3OTAzLCAKKyAgICA0MTIzOSwgNDM1MzMsIDc4NDU5LCA3MTg5LCAwLCAwLCAwLCAxMjM1NywgNDI4MDIsIDc4NDUwLCA4NDg3LCA5MTMxLCAwLCAKKyAgICA0NjE1LCAxMjY5NSwgMTI3NzUyLCAwLCAxMjE3NSwgMCwgNjQ1MzUsIDAsIDc4MDksIDAsIDAsIDU2MiwgMTIxNjksIDY1OTAsIAorICAgIDY5NzYyLCA2NjQ1NSwgNjQ3MzgsIDMyMTksIDY4NjU0LCA5ODM3ODcsIDAsIDEwMzcsIDAsIDIwMjUsIDEyODI2MywgCisgICAgMTMwOTgsIDc4NDQyLCAxMDYzNywgNDU2OCwgNTQ5LCAxNTcwLCAwLCAyODM1LCAwLCAxMDYyNCwgNDM2MjMsIDExMDcyLCAKKyAgICAxMjcxOTEsIDAsIDAsIDEyNjA2LCA3ODQzMywgMjgyNSwgMCwgMTA4MjUsIDgwNzksIDI4MjEsIDQxMDQ2LCA5MjMyNywgCisgICAgNzM2NSwgOTgzNzUzLCAxMjA1OTMsIDEzMDcxLCAwLCA0NTIsIDQxMDQ5LCA0Mjg0MCwgNjM0NiwgMjgzMSwgNTQ2MSwgCisgICAgNzQ1OTYsIDExNDY1LCA1MjEyLCAwLCA2NDcwMywgMTE5MTkxLCA0MjMwOCwgNzE4MSwgMCwgNDEzMzIsIDAsIDEyMzMzLCAwLCAKKyAgICAxNjY4LCAwLCAwLCAwLCAxMTg3LCA5ODMzODUsIDQyNjI4LCA3ODU3NSwgMCwgMTI4Nzc3LCAwLCAzMjQwLCAxMjg1MTgsIAorICAgIDEyMTk0LCAwLCAxMTU5MSwgNDEwNjUsIDUzMjMsIDgxNjYsIDAsIDAsIDAsIDc0NTM1LCAxNjIzLCA2NTI5NywgMTI4ODU2LCAKKyAgICA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIDEyNzI5NSwgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCAKKyAgICA5MjUwOCwgMTE1NzEsIDc2MTUsIDEyNzMwMCwgOTIyOTYsIDQyMzcsIDkyNTc2LCAxMDM1LCA2NTgxNSwgMCwgNzg4MSwgCisgICAgNzAxLCA2NTkzNiwgMzQ4OSwgMCwgMCwgMTIwNzUxLCAxMTQwMywgMCwgMCwgMTI3MTQ2LCAzNzk2LCA2ODAwLCAwLCAzOTk0LCAKKyAgICAxMTQyMSwgMCwgMTk1MDc2LCAwLCA5ODM5MjIsIDAsIDAsIDY0ODU3LCAxMjgxMDUsIDI4NTUsIDEyNzgyOCwgNjYzMDgsIAorICAgIDQxNjIxLCA2ODIxNCwgMTI3MjgzLCAxMjc4MTcsIDEwNjU0LCAwLCAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCA0Mzk3MiwgCisgICAgNjU4NDcsIDcxODIsIDAsIDEzMDI0LCAxOTQ4MjIsIDc0MjcwLCAxMjgyODksIDAsIDAsIDAsIDE0OTYsIDc0NywgMCwgOTQyLCAKKyAgICAyMzc4LCA0MzEzNiwgMTI3OTA1LCA4NDY2LCA5ODM1NzUsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCAwLCAwLCAKKyAgICAxMTQwOSwgNjgzNzMsIDYzODIsIDAsIDY0NjM0LCAxMjgyNzksIDAsIDExNjEyLCAwLCA2NzYwMCwgMjM3NCwgOTQwNjYsIAorICAgIDg0NzUsIDExNjA5LCA2NjMxMywgMCwgMCwgNTI4NiwgMTE5Mjk3LCAwLCAwLCA2NDkyNSwgMTIwMjgzLCAxOTQ1ODQsIAorICAgIDExODk4MiwgMTk0NTgzLCA3NzA1LCAxMTk0MiwgMTEzMDUsIDE5NDU4MSwgMzMwOSwgMCwgMCwgMCwgMCwgNjgwMiwgMCwgCisgICAgNDE2NTMsIDEyODAsIDEyNDEsIDcxNjgsIDEyMDk2LCAwLCA2NjYxNSwgNDI1NjUsIDQxNjUxLCAwLCAwLCAwLCA0MTY1MCwgCisgICAgNjY1MDcsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDk5NTQsIDAsIDE0NzUsIAorICAgIDExOTI0NywgOTkzOCwgNjA4NCwgOTE3NTQ2LCA0MTA2NCwgNDEwNjIsIDAsIDAsIDMyNTYsIDEwMTg5LCA0MjA3NiwgCisgICAgNDMyNTIsIDc4ODIzLCA5MTc5MDYsIDg3MjcsIDAsIDY1ODc1LCAwLCAwLCAxMjc3NjIsIDEwNTYyLCA3NDIxNSwgNDMwNjUsIAorICAgIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCA5MDE1LCA3MTM1MSwgMCwgMzYzNSwgNjQzMzcsIDk4MzI4MSwgMCwgMCwgNzE5NSwgCisgICAgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgNjU2MTMsIDc3OTA5LCA5MjQyMCwgNzM5OTcsIDAsIDAsIAorICAgIDExOTIxOCwgNzk4NCwgODYwMCwgNzQ0MzQsIDEyNzc3MCwgNDE3NiwgNzAwNTAsIDIwMzQsIDkyNTUxLCAxMjA4MDUsIAorICAgIDY1ODkxLCAxMjcwMzgsIDAsIDMxOCwgMjAzOCwgMTI4ODYwLCA3ODU5NiwgMCwgMzY0OSwgMTMxNDksIDQyMTQ1LCA0Mjc5OCwgCisgICAgMzYzNCwgMTIwMjkxLCAxMTg5MjcsIDY3Njc3LCAxMjAxMjQsIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgOTQwMzIsIDc0MjM4LCAKKyAgICA0MjY2NCwgMjg0OSwgMTI3MDM0LCAwLCA3OTM4LCAxMjk2MCwgMTc2MSwgMTE4MTIsIDY1Mzc5LCA2ODM4NiwgMTI4MTg1LCAKKyAgICAxMTU5LCAwLCA2OTcyOSwgMCwgMCwgNzE3OCwgMTk0NjMyLCAwLCA0MTY4MCwgMCwgMTI4MjAzLCAxMTUzNCwgMTUxNCwgCisgICAgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgMTk0NTY3LCAxMjk4OSwgNjY0NzQsIDkzNjgsIDEyODQ4LCAKKyAgICAxNjI0LCA0MzI3MCwgMCwgNzQyNzgsIDEwODE4LCAxMjY2NDQsIDk5NTMsIDAsIDc4NDIxLCAxMTk0LCAzMjQyLCA5NzYxLCAKKyAgICA5NTU1LCA4NTk4LCAxMjAyOTksIDYxNjksIDEyODcxLCAxNTUxLCAyNzk4LCA2NTE3NiwgNDk1OCwgNDI3NTIsIDExOTAyNSwgCisgICAgMCwgNjc4NzUsIDEyMDMwMSwgMzQ5NSwgNjY2NDgsIDE5NDc2OCwgMCwgNjgzNjQsIDk4MzIyNCwgNDg5MSwgMCwgMTA2NDEsIAorICAgIDAsIDczNzQ2LCAwLCA2ODM1MiwgMCwgNzM3ODcsIDE5NDgyOSwgMTk0NjMzLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDI2ODUsIDQyNjc5LCAxOTMsIDAsIDAsIDAsIDQyNjY3LCAwLCA1MjcxLCA5MjMxOCwgOTI1MTcsIDExODg4MiwgMTM2MiwgCisgICAgMTMyOTcsIDAsIDEyODA5NCwgMCwgOTgzMzMxLCA3Mzc4OSwgMCwgNjY1OCwgNDQyNiwgMCwgOTI2MjgsIDk4Mzg0MiwgCisgICAgOTIzMTksIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCA5ODMzMzAsIDI0MTYsIDMzMTAsIDQyNzAzLCAwLCAzNzksIDAsIAorICAgIDQzNzU1LCAwLCAwLCAzMjIzLCA2NTQ5MiwgMTI4NCwgMTk0NzcxLCA0NTQ5LCAwLCAwLCA5ODMxNTQsIDEyNzc2MywgCisgICAgMTA4MDcsIDk1NTgsIDE5NDYxMywgMCwgODUxNSwgODY4OCwgMTI4NjYsIDY1MzA4LCAzMjk0LCA5ODMzMzIsIDg1MjksIAorICAgIDEyODEwMSwgNDMzODUsIDc1NjQsIDAsIDQzMzI5LCAwLCA5MjQ1OCwgNzM3NTcsIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgCisgICAgNzIwMiwgMCwgMTI2NzYsIDQyNzI5LCA5MjE5OCwgMzIxNSwgMCwgNzcxMCwgMTYxMCwgNzM4MDEsIDAsIDAsIDY1NjgyLCAwLCAKKyAgICAxMjA1MzcsIDY1OTI0LCA5OTc0LCAyMjgsIDY2MzU0LCAxNTAxLCAwLCA2NDM5NSwgNTE3OSwgNzIwMCwgNjIyNSwgMCwgCisgICAgNjU3OTQsIDE3MjUsIDY1NTMzLCA4MTk2LCA3NDc2LCA3NDM5OSwgMCwgMCwgNzE1MiwgODUwMiwgNTc2MiwgMTk2NywgCisgICAgNzQ4MywgMCwgMCwgODEwNCwgMCwgNzQ3NCwgNzc5NzksIDAsIDEyNjUwNywgMTA0MTQsIDEzMDAxLCA4MTQxLCAwLCAKKyAgICA0MjUzNywgMTU1NywgNDM1OTQsIDEyODY0MiwgNjMzMCwgNjgwNSwgODYzMSwgMjU0NSwgNzAwNTIsIDEyNzE2NiwgMCwgCisgICAgNzQxOTAsIDAsIDAsIDk4Mzc4NiwgNDI3NjIsIDAsIDQyOTE0LCAxNjUwLCAyNjIsIDE2MzcsIDAsIDc5MDEsIDMyMzgsIAorICAgIDEyODE3MywgNDE4NjEsIDAsIDEyODU4NSwgNjUxNTgsIDEwODYwLCA5NDA1OSwgNDM2NTgsIDc1MjcsIDAsIDQzMzE5LCAKKyAgICA2NDE5LCAwLCA0NSwgMCwgNjQ1ODgsIDkzOTg5LCAwLCAxMTk4MTAsIDcxOTQsIDUyOTEsIDAsIDQzNjY2LCAxMzEyOSwgMCwgCisgICAgOTA4NCwgMCwgODczNywgMCwgMTI4ODEsIDAsIDEyOTA2LCA5NjM5LCA3OTEyLCAyNjIwLCAwLCAwLCAwLCA5ODM4NzUsIAorICAgIDE3OSwgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCA3ODQ0MywgMTE4ODEzLCA5ODM4OTAsIDExODk5NiwgMTE5MDA5LCAyODUwLCAKKyAgICA4MDg0LCA5ODMwODUsIDczODUwLCAyODAxLCA5MjI4NCwgNDIwNjksIDExOTgzOSwgNzQ3NTQsIDExOTg0MSwgNDIwNzIsIAorICAgIDExOTg0MywgMTE5ODQyLCAxMDM5OCwgOTgzMDU2LCAwLCA4Mzc3LCAxMjcxMTYsIDgyNDUsIDY4NDAxLCAzMTU4LCA5MjM5NiwgCisgICAgMzk4MywgNDM2NTYsIDkyMywgMTE5ODU3LCAxMTk4NTYsIDI5MiwgMTMwMDIsIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCAKKyAgICA5MjQ2MywgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIDcyNTMsIDEyNzExMCwgNjgzOTEsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgCisgICAgNDM1NDIsIDAsIDY0NTc4LCA5ODM2NzUsIDMyMjgsIDY5NjM2LCA4NzgzLCAwLCAxMTk2MTQsIDI3MzEsIDAsIDAsIDc4NTg1LCAKKyAgICA0MTAyLCA3Njk2LCA3Mzg3OCwgMCwgMCwgNzg1ODYsIDQzMzE2LCA0MTc3LCAxMTI4MywgOTA4OSwgMCwgNzM5OTYsIAorICAgIDk4MzE3MywgNjQ1MDAsIDQzNjc0LCAwLCA2NDk0NywgMTg1NiwgMCwgMCwgNjM3OSwgMCwgMCwgMCwgMzIwOCwgMTI5NzUsIAorICAgIDc0Nzc1LCAxMjczODAsIDk4MzkzMSwgOTIzODksIDc0MDcyLCA1NTI2OSwgMCwgMCwgOTgzNjgzLCAyMDMzLCA3ODU3NywgCisgICAgNzg1NzYsIDE5NTAyNiwgNTUyNTQsIDc3NDAsIDAsIDAsIDAsIDczOTY0LCAwLCA5Mzk4OCwgNjc2MTIsIDY1Njc0LCAKKyAgICAxMjgyNDQsIDk0MTEwLCA0MTY4OSwgMCwgNzQwMDYsIDY0OTA5LCA2NjQ2LCAxMTc5MCwgNzQwMTksIDAsIDEyODA2NiwgCisgICAgMTI4MDMxLCA4NTYxLCA0NTczLCAwLCA1MzI2LCAwLCAxMjA2MDUsIDcyMzAsIDgyNTcsIDAsIDg3NzgsIDQxNjg4LCAwLCAKKyAgICA2NTc3NiwgMjA3MSwgODMxNCwgNjQ1OSwgMCwgNzYyOCwgNjUwOTIsIDczOTAzLCA2NjcyMSwgMTEzNDIsIDEyODU2MSwgMCwgCisgICAgMCwgMTI4MjI2LCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIDk2NywgOTgzOTUxLCAxMjY0NjksIDExOTQ2LCAwLCAKKyAgICAzMjU3LCAwLCAxMjMwNywgMTg0NSwgOTgzMTU3LCA0MzUyNiwgMCwgMCwgMTg4NiwgNDIzNDIsIDEwMDg5LCA4NzAsIDc2NDgsIAorICAgIDM0OTksIDg2MDksIDc2NTIsIDg3NiwgODcxLCA4NzcsIDAsIDg3OCwgNDIwMTUsIDg3OSwgNDM2OTIsIDQ1NjMsIDAsIDAsIAorICAgIDc1OTEsIDY1ODg3LCA4NjcsIDk1MjAsIDg3MiwgMTI2NjA3LCA4NjgsIDg3MywgNzY0MiwgMCwgODY5LCA4NzQsIDc2NDQsIAorICAgIDEyMDY3NCwgODc1LCA3OTAsIDEyODMwMywgMCwgMCwgMCwgNjYxODIsIDk4MzI1OCwgNTQyOSwgMTk1MDU1LCA2NjE4MCwgCisgICAgMTI2NDgwLCA2NjE4MSwgNjg0NTIsIDk4MzI4OSwgOTgzMjQ4LCA0MjA2NywgMCwgNTQzMywgMTA2NTcsIDc5MTEsIAorICAgIDE5NDYyMiwgMTU0NywgNjYxNzYsIDQyMDEyLCAxMjA1NzYsIDU0MjUsIDQ5NzcsIDk5OTksIDUzMTcsIDU0MjMsIDQ2MTEsIAorICAgIDAsIDY3NjM3LCAwLCA5Njc5LCA3NDEyMiwgMCwgMCwgMCwgNjYxOTQsIDQ0MTgsIDY2MTg0LCA0NjI4LCA0MjQ1LCAKKyAgICAxMTk2NDgsIDAsIDAsIDE4NTEsIDAsIDEyNzE4OSwgMTE5MDgsIDAsIDkzNjAsIDExODg5NywgOTgzMjAyLCA0Mjc3NiwgCisgICAgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCA5MjcxNCwgMCwgOTIzMjEsIDQzMzE4LCAwLCA4ODA5LCA2OTg4MSwgMCwgCisgICAgOTgzMTQyLCAxMjA2MDQsIDk4MzA1MiwgOTgzODgyLCAwLCA5ODMyNzAsIDAsIDAsIDc0MjcsIDk5NTgsIDQ1ODgsIDQzNjgwLCAKKyAgICAwLCA3NDQ4NCwgMTk0OTY4LCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCA5ODM4ODUsIDAsIDc5MywgNzQ0MDQsIDAsIAorICAgIDMwNSwgNTY3LCA2NzY2MiwgODQyLCAxMjg1MTksIDgyMDgsIDAsIDQxNjk1LCAxNjQ3LCAxMTg4NzcsIDAsIDc4MzcsIAorICAgIDkxNzYyNSwgODE4LCA1MzM3LCAxOTQ2MjgsIDkxNzYyMSwgNDEzNzYsIDExOTk3OCwgMTI2NTc2LCAxMjA1OTQsIDc0MDg2LCAKKyAgICA5MTc2MTUsIDkxNzYxNCwgOTE3NjEzLCAxMDk3MywgNjYzNTksIDEzNzIsIDEyNzE3MiwgOTE3NjA4LCA0OTY5LCAxMjU0LCAKKyAgICA5MTc2MDUsIDkxNzYwNCwgOTM5NjcsIDkxNzYwMiwgNjUyMjgsIDc4MjIxLCAxMjY2MTIsIDAsIDI4NDAsIDAsIDExOTk4MiwgCisgICAgOTgzOTM5LCAwLCAzMjQ1LCA5MDY4LCA2ODE5NCwgNjQ3MjUsIDAsIDAsIDEyOTkxLCAwLCAyNjUxLCA2ODAxNiwgOTgzMjY1LCAKKyAgICA5MTc2MTEsIDEyNzAyNiwgMTI4ODgzLCAwLCAwLCA0MzY0OCwgMTIwODEyLCAwLCA0MzMyMiwgOTI2NjIsIDAsIDAsIAorICAgIDY0MzcyLCA5MjY5OCwgMzIyNiwgNjU1LCA3NTIsIDc0NTcsIDc0NTYsIDc0NTIsIDMyODUsIDEyODc3OSwgMTI3ODIxLCAKKyAgICAxMTk5ODgsIDY1NjEwLCAyMzkxLCAwLCA5MjI0OCwgNjcxLCAyNTAsIDc0MzQsIDYxOCwgNjY4LCA2MTAsIDQyODAwLCAKKyAgICA3NDMxLCAxMTUyLCA0MjgwMSwgNjQwLCAxMjA2NjYsIDc0NDgsIDc0MzksIDYyOCwgMzkwNSwgNzM4MTAsIDAsIDEyODI2NiwgCisgICAgNjQ3NDksIDY3ODUwLCAyMTA3LCAwLCAwLCA0NjA1LCAxMjgxNzQsIDk4MzE5MiwgNDMzNzIsIDY1OTQ1LCAxMjg4MzgsIDAsIAorICAgIDExOTU5MCwgMCwgMCwgMCwgOTg3LCA2OTI3LCAxMTU3MiwgNDIyNjEsIDExNDY0LCAzMzY1LCA5OTcxLCAwLCAwLCAKKyAgICAxMjgyOTcsIDAsIDAsIDAsIDAsIDExMzM0LCA0MzMyNiwgMTI2MDksIDExNTE5LCAxMTUwMywgNTUzMCwgNTIxMCwgMCwgCisgICAgNDYyNywgOTgzODkyLCA1MjA4LCAwLCAxMjg4NDIsIDEwMzMyLCA1MjE4LCA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCAKKyAgICA2OTY0NywgNzM4OTQsIDEyODg1MiwgNTQzMiwgNjQ5NjUsIDU1MjcsIDc0MDMzLCAxMDUxNiwgNzc5MCwgNTUyOCwgMCwgCisgICAgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDk4ODcsIDAsIDQwMDAsIDc0MjksIDc0MjgsIDY2NSwgNzQyNCwgMzIwNiwgCisgICAgMTIwMjc4LCA3ODg0LCAwLCAxMjg1NjYsIDkxNzk4OSwgMTI4NjY2LCAyMTEsIDI1MDksIDEyODg1OCwgMTIwNTczLCAKKyAgICA2ODY3MiwgMzIyMCwgNDIyMzUsIDAsIDEwNjkwLCA4OTUxLCA1MjE0LCA0MjQ3NCwgODExOCwgMCwgNzA0OCwgNDU5MCwgCisgICAgMTI3MjU4LCA1ODUyLCAwLCAwLCAxMjcyNTksIDE3MDgsIDAsIDk4MzE2NSwgMjYyMywgMTE5NDMsIDAsIDY5MjI2LCAwLCAKKyAgICA0Njk4LCA2NjUwOSwgMTA2NiwgMTE5OTIxLCA0NzAxLCA5ODM4NzYsIDEyMDI4NSwgNzQyMjUsIDk0MTExLCA4MjY3LCAwLCAKKyAgICAxMjcyNjUsIDAsIDc1MTYsIDAsIDI2MjUsIDk4Mzk3NywgODAzNCwgNzQzMDksIDAsIDM2MzEsIDEwOTU1LCA3ODUwLCAKKyAgICAxMjAyOTMsIDg0MTYsIDAsIDAsIDAsIDQzMzg0LCAxMjY2MCwgMCwgMCwgMCwgNzQ4NTAsIDQxMDY5LCAwLCAxMjgxNTYsIAorICAgIDEyMDk5LCA0MzEwLCAxMDAzMiwgNjI1MiwgNzEzLCA3OTkwLCAwLCAzOTkwLCAwLCA5ODMyNjIsIDY2MzY4LCA1MDE3LCAKKyAgICA2NDk1NiwgNzA3MSwgMCwgMTE5MTQ0LCAxMDMwLCAxMTg4MDAsIDk4MzEyMCwgOTUxMywgNDEwNTksIDkzNTcsIDAsIDE3NzMsIAorICAgIDAsIDEyMDM1MCwgMCwgNjMzOSwgNzc0NSwgOTg0NCwgMCwgNjQ2NTAsIDk0LCAxODgwLCA3NDc2NiwgOTgzODM4LCA4OTA4LCAKKyAgICAwLCAxMjg3MDcsIDY1OTEzLCA3ODQ3MCwgMTA3NTIsIDEzMDAzLCAwLCAxMjY1NzIsIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIAorICAgIDE3NTcsIDY5NjQsIDQ2OTYsIDAsIDEyMDMzNSwgNjQ3ODUsIDczOTQsIDM2NDEsIDU0MTksIDEyODA1NSwgMCwgMTI3ODgzLCAKKyAgICAwLCAxMjAzNDQsIDQzOTg4LCAwLCA4NjEwLCA0MzA2MiwgNzU5MiwgODU2LCA3NDI5OSwgOTM2LCAxMzI4OSwgNjk4OTQsIAorICAgIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgNzg2MzgsIDE5OTUzLCAwLCAxNTA0LCA3MDA2NCwgMCwgMTI5MTMsIDc0MjA2LCAKKyAgICA3NTI5LCAwLCAxMjg2OTksIDk4Mzk1NywgMTIwNzgyLCA0MTEzLCAwLCAyMzcyLCAzMzYsIDAsIDc1MDksIDEyMTUyLCAwLCAKKyAgICA2ODIsIDY2NDU4LCA0MTUwNSwgMCwgNjQ3NDMsIDEwNTkzLCAxNzAzLCAwLCA5ODM5NTUsIDgwMzMsIDY5OTUzLCAwLCAKKyAgICA5ODEwLCAxMjcyNjksIDAsIDEyOTcwLCAwLCA0MjM1MSwgMTAxMDksIDkxNzYyMywgMCwgMTk0NjkzLCAwLCA5MjY5MCwgMCwgCisgICAgMCwgNzQyOTEsIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAKKyAgICAwLCAwLCA3NDIzOSwgNDEzMTcsIDkyNjE0LCAyMDkxLCA3NDU0NSwgMjA5MCwgMCwgOTM1MywgNzExNywgMjA3NywgNzc4ODYsIAorICAgIDAsIDEwNDk4LCAyMDgzLCA3Nzg4OCwgMCwgMCwgMTE5MjM2LCA2MzQsIDAsIDAsIDAsIDY5Nzc5LCA0MTY1LCA4NzQ2LCAwLCAKKyAgICA5NjU0LCAxMjg1NiwgNjkyNCwgMCwgNzA2NiwgOTgzNzE5LCAwLCAxMjgxMzUsIDQxMDM3LCA0MjY5MiwgNzc4NiwgMTI5NTksIAorICAgIDQxMDM5LCAxMjc0ODMsIDAsIDY4MCwgMjMwMiwgMTI4MjAwLCAxMTgxLCA3MDU2LCAzMTc0LCAxMjY1MTYsIDAsIDkyNjY4LCAKKyAgICA2NTY2NSwgMTI3Mzc1LCAxMjY1MDYsIDY5MjAsIDAsIDkyMjk1LCAwLCAxMTg5NjUsIDAsIDY0NjQ0LCAxMjY5ODEsIAorICAgIDc0MTE5LCAwLCA0MTAyOCwgMCwgNjIzMSwgMjYxMywgNjUzMDIsIDQwOTg5LCAwLCAxOTQ2OTYsIDAsIDQyNzYwLCAwLCAKKyAgICA5ODM1NjYsIDAsIDQwOTg3LCA0NjY3LCAwLCA5ODM5MzIsIDg4MjgsIDAsIDAsIDEyNDYsIDQ3NDYsIDAsIDAsIDExMDIxLCAKKyAgICA0NzQ5LCA5MjY3NSwgMCwgOTIxLCA0NzQ0LCAwLCAxMjcwMiwgMjQyLCAwLCAxNTY2LCA4MjE3LCAwLCA2NDY1MywgNzgzODYsIAorICAgIDEyODEyMSwgNzQwMzYsIDc0NTA1LCA0MzI3NCwgNTMxMywgOTUxLCAwLCAwLCA5ODM4NjcsIDc2MDQsIDk4MzI5MCwgNDAwOSwgCisgICAgMTI3ODE2LCA5ODM3MTAsIDEyMDU2MiwgMCwgOTgzNzIwLCA2NDg2MCwgMTE5MTM4LCAxMTkwNjksIDAsIDEyNzM3MCwgCisgICAgNDA0OCwgOTgzNTk4LCAwLCA3MDAyNCwgMTY0NiwgNzc4OTAsIDY0NTM0LCA3Mzk5NSwgMTIwNzA1LCAwLCAxMTk4OTAsIAorICAgIDI1NzksIDExOTkwNSwgMzE3NywgMTEzNTcsIDkwOTksIDQxMDcsIDM0NDEsIDExOTg5NCwgMjk3NSwgNzQ0NDIsIDk4MjIsIAorICAgIDk4MzkzNSwgNTUyMjAsIDEwMDg0LCA3Mzk0MywgMTE4ODQwLCAwLCA5MTc1NjIsIDE5NDYxMCwgMzM5OSwgOTg1MSwgCisgICAgOTgzNzE3LCAxMTkwOSwgOTA1OSwgMCwgNzY4NywgMCwgNjc4OSwgMCwgMCwgMCwgNzEzNjcsIDAsIDAsIDE3NzcsIDkxNTEsIAorICAgIDExMzcsIDY5NzY3LCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAxMjg1NzQsIDEyODIxOCwgMCwgMCwgNTk4OSwgMCwgMCwgCisgICAgMTI4MDkxLCAwLCA0MTY4NSwgNjkyMjMsIDAsIDk3NjksIDQxNjg0LCA5ODMyMTYsIDUxOSwgMCwgMTE3NDAsIDU3NjYsIDAsIAorICAgIDAsIDI2MDAsIDg4NDgsIDEyMDEzOCwgNDEyOTcsIDAsIDM2NjYsIDc0NDczLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCAKKyAgICA2OTY4OCwgNjk3NzEsIDc0NDc5LCAwLCA2NTU4LCAwLCAwLCA2OTc2NSwgMTIwNzUwLCAyNTIsIDAsIDQxMzAyLCAwLCAwLCAKKyAgICAwLCA2OTc2MywgMCwgMTE3MjksIDg3MTksIDkwNjAsIDAsIDEyMDEzOSwgMTA3NjEsIDAsIDAsIDAsIDExODc5MiwgMTE3MzQsIAorICAgIDk4MzIyMywgMTE3MzAsIDAsIDk1OTMsIDU3NTcsIDI0MDMsIDY0ODA4LCA1NTI3NSwgMCwgMTE3MjgsIDQzNTcyLCAwLCAwLCAKKyAgICA3NzY0LCA5ODM3MTQsIDExMDk0LCAxMjA4MjUsIDAsIDk4MzIyNiwgNDI4MiwgODI5OCwgMCwgMCwgMCwgMCwgMCwgNjQ0NDksIAorICAgIDAsIDEyNjY1MCwgNjM4NTQsIDg0NTYsIDAsIDc0NzgzLCA2NTY3MCwgMCwgNzgyNTAsIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCAKKyAgICAwLCAwLCAwLCAwLCAxMjA3NjQsIDAsIDEwMDE5LCA3NDc2MiwgMCwgMzQ1OCwgNDM2NSwgNzAwNTMsIDk4MzcxMiwgMzY0NywgCisgICAgMCwgMjYwMiwgMTI4MzQxLCAwLCAxOTQ3MDcsIDQxMTM1LCAwLCAwLCAwLCA2NDYzMSwgMTcyLCA0OTcxLCA0MTIxOSwgCisgICAgNDExMzcsIDE4ODksIDcyMzgsIDY1NDUsIDEyNjQ3NiwgOTIxOTMsIDc1OTcsIDEwNTI4LCAwLCAwLCAzNzMyLCA3MzkxMCwgCisgICAgMTk0NTg4LCA1MzQ0LCAwLCA0MzM2NiwgNDMzNjMsIDkwNjIsIDExOTI1MiwgMCwgMCwgMCwgNjQ0NzksIDkyMzIsIDkyNTk2LCAKKyAgICAwLCAwLCAxOTQ3MTIsIDEwOTAwLCA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgCisgICAgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgMTI3MzU0LCAxMjczNDUsIDI5OSwgOTE3OTU3LCA4NTI1LCAxMjczNDcsIDM1MjQsIAorICAgIDkxNzU2NSwgODgzMSwgMTI3MzQ5LCA5MjU2NCwgMzA3NSwgNjc4NjcsIDEyNzM1MiwgMCwgNjYzNjIsIDAsIDY0MzUzLCAwLCAKKyAgICAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCA2NTExNCwgNjg0NjAsIDAsIDQzMjgzLCA1NTUxLCAwLCAxMjA3MzUsIAorICAgIDk4MzIwMSwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgNzIwNCwgNzAwNjUsIDI1ODgsIDI5MTQsIDcwMTEsIAorICAgIDU1MjgxLCAwLCAyNDcxLCAxOTQ2MzEsIDI4ODMsIDI3NDksIDExOTU2MywgNzM3NzQsIDEwOTEzLCAwLCAwLCA4NjY2LCAKKyAgICA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIAorICAgIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgNzQyODksIDY4NDcyLCA0Mjg1NywgODI2MiwgCisgICAgOTgzMzc5LCAwLCA5ODMyMjIsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgNzIzNCwgNzQwNDcsIDk4MzA4OCwgMCwgNDM3NDQsIAorICAgIDAsIDAsIDczODQ2LCAyOTM0LCAxMjcyMiwgMTIwNzYyLCA5MjIsIDQzOTgzLCA3NDUwNywgOTgzMTI2LCA3NDQ2MSwgMzIxOCwgCisgICAgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAzMjE0LCAKKyAgICAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCA3ODcyOSwgMTkwMSwgNzg3MjcsIDEyNzMyNiwgMTIwNDYwLCAKKyAgICA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCA3ODczNSwgNDMzODMsIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIAorICAgIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIDExOTY2MSwgMCwgMCwgOTgzMzIxLCAxMjA3MzcsIDAsIDk4Mzk3MSwgCisgICAgOTgzMzIwLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCA5ODMzMjUsIDY1Njk1LCAxMjY1NTksIDM3LCA3MDY4LCAwLCAxMjA0ODAsIAorICAgIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgOTgzMzk5LCAwLCAwLCAwLCAwLCAKKyAgICA2NTUxMCwgMCwgMCwgNTIzMywgOTgzMzM1LCA2NDc5MiwgOTgzMzM0LCAwLCAxMjY2MzMsIDAsIDcwNjAsIDk4NDcsIAorICAgIDEyMDE0NCwgMTY4NSwgNTk1LCAwLCA3Mzk3MSwgMTI5MiwgODk0MCwgNzM4MCwgMTEwODgsIDAsIDEwMDA0LCAxMjY5OTcsIAorICAgIDAsIDY1NDEsIDAsIDAsIDAsIDMyNDMsIDkwMTQsIDU2MDYsIDAsIDUzOCwgNjQ2MjAsIDU2MDIsIDg0NjcsIDc0MzkxLCAKKyAgICA2NTQ3LCAxMjgxMzIsIDgyMDMsIDc4NDg4LCA5ODMwOTAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgCisgICAgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIDY5OTAxLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIAorICAgIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIDkyNDE0LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIAorICAgIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIAorICAgIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAwLCA0Mjg4OCwgNjU3MTIsIDk4MzMwNCwgMzg2OSwgMTE5MzcsIDU3MjUsIAorICAgIDEyNzUzOSwgMTc4MywgNjg2NDgsIDU3MjgsIDAsIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgNzg1MjEsIAorICAgIDAsIDAsIDc2NCwgMCwgMTI4MTE2LCA0MzUzMSwgMCwgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAxMjA3NDksIAorICAgIDExNDIzLCAwLCAxMTk4NjEsIDcxMzQ0LCA0MzQ2NSwgMCwgMTI4MjY3LCA2NTU5LCA2NDU1NywgNzEzNDgsIDkyNjQ5LCAKKyAgICAxMjA2NDgsIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDc0NDkxLCAwLCA0MzM3NywgOTIyODIsIDcxMzQ2LCAxNDc4LCA5NzgzLCAKKyAgICAxMTgyNSwgMjYwNywgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgNzAwNTgsIAorICAgIDQxMTQ0LCAwLCA5MjQzOCwgNDM1MzcsIDY3NjEsIDEwMDkzLCA0MzY5LCA5MTc3OTEsIDAsIDk4MzE0OCwgODgyMCwgMzk0NywgCisgICAgMCwgMCwgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCAKKyAgICA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgOTgzMzgyLCAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIAorICAgIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIAorICAgIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAKKyAgICAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIAorICAgIDMxMzcsIDAsIDQxNDcsIDk4MzE3MCwgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCA5ODMyOTQsIAorICAgIDEzMDc2LCAzMTM1LCA5ODMyODcsIDc4MTQzLCAxMTkxMzksIDMxNDIsIDkyNDUxLCA5NDA2OCwgMTA4MTksIDExOTU4MCwgCisgICAgMTAxODMsIDAsIDI2MDgsIDE0NzAsIDczOTY3LCA5NDAwOCwgNjIyNywgMCwgMTI3MTczLCA2OTc0MSwgOTgzNTgyLCA2MTYzLCAKKyAgICA5ODM1NTgsIDAsIDEyNzMxNCwgMCwgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIDExOTU3MywgCisgICAgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAwLCAxMjA4NiwgNzQwMywgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgCisgICAgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgCisgICAgNjk3NCwgMCwgMCwgOTgzMjExLCA1MDAyLCAwLCA0MTI4NiwgNjk5NDYsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIAorICAgIDk4Mzk2MiwgMTI4MjI5LCAwLCA0MTI4OSwgMCwgMTk0NjAyLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMTI4Nzc4LCAKKyAgICAxMjg2NjEsIDAsIDk4MzM3NSwgNDEyNzksIDAsIDAsIDAsIDExMDgxLCA0MzYxNSwgMCwgMCwgMCwgOTgzNjEyLCAxMjcyNywgCisgICAgMCwgMCwgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDk4MzgyOSwgCisgICAgMTk0NTcxLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIDgyOTEsIDQzMDUxLCA5MjU3MCwgMCwgMjU5NiwgNDM1ODQsIAorICAgIDAsIDEzMTEzLCAwLCAxMjc3NTcsIDIzOTMsIDcwNTgsIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCAKKyAgICA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgMTI3NzQ4LCA2NDY5NiwgMCwgMTI4MjIwLCAwLCA2OTk0LCAwLCAKKyAgICAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCA5ODMxODIsIDM3NTEsIDkxMjAsIDk4MzQ4NSwgMCwgMTc5OCwgNzA5LCAwLCAKKyAgICAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIDgxMzcsIDk0MDk4LCA5MjY0MiwgMCwgMCwgMjQ1LCAxMjgwOTcsIAorICAgIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIDYxMzYsIDkxNzYwOSwgNjU2NzcsIDg2ODIsIDQxMjM1LCA5MjU5NSwgCisgICAgNDIwNDUsIDk4MDQsIDExODk2MywgNDMyLCAzNTk1LCAxOTQ5NDUsIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIAorICAgIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCAKKyAgICA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgMCwgOTQxMDksIDAsIDc0MTM3LCA3MDAzNSwgMTAwNjMsIAorICAgIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCA5ODM3MzcsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCAKKyAgICA2NjY5NiwgOTM5OTksIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgNTE0LCA3NDUwMiwgNzAwMzIsIDI5MjEsIDQzMjE1LCAKKyAgICA2NDQ5MywgNTc3MiwgMTI5NjgsIDcwMDU1LCAxOTQ5NDQsIDc0NTgwLCA0MzM5OCwgMjU4MCwgOTgzODEwLCA0MTM0MSwgCisgICAgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCA3MDAyMCwgMCwgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCAKKyAgICA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIDAsIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDk4MzczMywgCisgICAgMTE5MDQyLCAwLCAxMjc4NjUsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgCisgICAgNDI1NjksIDEyNzgyNCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCA0MjQzMiwgMCwgMCwgMTk0NzgyLCAwLCA2NDQ5NiwgCisgICAgNzQxMDksIDcwMDMwLCA5OTE1LCAwLCA5ODMyMTgsIDcwNjEsIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCAKKyAgICA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgMTI3MzgzLCAxMjcxNzEsIDAsIDAsIDEyNzc5NywgCisgICAgOTAyOSwgNDM1NDMsIDExOTMxNSwgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIAorICAgIDkyMzk5LCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgMTE4OTc2LCAxMTA2NiwgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgCisgICAgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAxMjEwNywgNzEwMCwgMTA5MDUsIDY1MDEwLCAxOTQ5ODYsIAorICAgIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDkyNjQ0LCAxMzEyMSwgMTIwMDM2LCAwLCAxMjAxMCwgMTI4NTczLCAKKyAgICAxMjgyMjEsIDAsIDAsIDAsIDEyNzE5MywgNjU4MTYsIDY4MTExLCAwLCAxMjc5MzMsIDY1NjY4LCA5MjI1NywgNjYxOCwgCisgICAgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCA3ODExMCwgNzEyMywgNzAwMzgsIDU3ODUsIDkxOTgsIDk3NjQsIAorICAgIDQxMzE2LCA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgMTI4MjU4LCAwLCAwLCAwLCAxMzEyMiwgMCwgCisgICAgMTkxLCA3MDA2MCwgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIAorICAgIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAKKyAgICAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgNDc0MywgMCwgMCwgNzQwNDAsIAorICAgIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDcxMzQ5LCAwLCAzOTY0LCA2NTkyLCAwLCAKKyAgICAxMjg2OTMsIDY2MDQwLCAwLCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMCwgNDIwNzAsIDY1NjMsIAorICAgIDQzMDc1LCA5MDE4LCA5NDAwNiwgOTgzMzk2LCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDc0NTMxLCAxMjc5NjksIDAsIAorICAgIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgMTczLCA2NjQ2MCwgNzE3NCwgOTI3MDMsIDExODgyMiwgMTc1MCwgCisgICAgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg4OCwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIDExOTE0NSwgMCwgCisgICAgOTE3NTU4LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgNDUxMiwgMTE5MzYwLCAKKyAgICA2NTIzMCwgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIDM5NzUsIDAsIAorICAgIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgOTgzNTk5LCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCA0MTA5NSwgCisgICAgMzk2MiwgMCwgMjkzMiwgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgMCwgMCwgCisgICAgNDE4NTEsIDEyODIzMCwgNDE4NDYsIDAsIDU1MjM4LCA3NjMzLCA0MTg0OSwgNjgzODUsIDQzMjAsIDMyMjQsIDAsIAogICAgIDEyODAzMiwgMCwgNDI1MzEsIDExOTEwOCwgMTUxMCwgMCwgODI1NiwgMCwgMTEzOTMsIDAsIDg4NzksIDEyODA3NSwgCiAgICAgOTI0NzQsIDg3NzAsIDAsIDAsIDc4Mzc3LCAxOTEwLCA4NjcxLCA3ODM3NCwgNDI4MywgMCwgMTI3MTE3LCA2ODM2MSwgCiAgICAgNzgzMTgsIDI2NTQsIDc4OTMsIDE5NTAwNywgMCwgMCwgMCwgNjUxMDYsIDQyNzYxLCAxMjg1NywgNDU4MSwgODQxMSwgCkBAIC0xOTIzNiwyOCArMTkyNTYsMjggQEAKICAgICA5MTc2MTksIDAsIDAsIDEwMDQzLCAwLCAxMTg2LCA0MTU3MSwgNjk5OSwgNjE3LCA5NDY0LCAxMjY2NDIsIDM2NzUsIDUyMDcsIAogICAgIDY1MDYyLCA1MjEzLCAxOTQ3NjksIDI2MTcsIDQxMzQ4LCA0MTU2OCwgMTI4ODAzLCAzMjUzLCAxMjA1MzUsIDAsIDg2MzAsIAogICAgIDEyODU0NCwgMCwgNTU5NiwgNTU0NSwgNzI4OCwgMjU4NiwgNjQ4ODcsIDAsIDUyMTcsIDcxMzM2LCAwLCAwLCAwLCA2NDI5MywgCi0gICAgNjgwOTgsIDI2MzUsIDAsIDAsIDk4MzgzNywgMCwgOTgzNjMyLCA3ODM1LCA3MDA0MCwgMCwgMTk0OTg4LCA5MjI4NSwgCisgICAgNjgwOTgsIDI2MzUsIDAsIDAsIDk4Mzg0NiwgMCwgOTgzNjQxLCA3ODM1LCA3MDA0MCwgMCwgMTk0OTg4LCA5MjI4NSwgCiAgICAgNjQ1NTgsIDEyNzEyMiwgMCwgMTI3MTIxLCAwLCAxMjc5MTMsIDAsIDU3ODQsIDk4MzEwMiwgMCwgMCwgNzAwMzMsIDQwMTEsIAotICAgIDkxNzYxNiwgNjgxMDEsIDAsIDc4NjQsIDQyNTQsIDY1MDk1LCA5ODM0ODgsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIAorICAgIDkxNzYxNiwgNjgxMDEsIDAsIDc4NjQsIDQyNTQsIDY1MDk1LCA5ODM0OTYsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIAogICAgIDU1OTgsIDEyMDcsIDEyMDUyMSwgNjY2ODksIDM1MDEsIDQyNTgyLCA0MzYwMCwgMTk0NzgwLCAwLCAxMTI0LCA1NTk3LCAKLSAgICAxOTQ3NzgsIDE5NDc3MiwgOTMyMSwgOTgzNDc2LCA5ODM0NzMsIDk4MzQ3NCwgMCwgMTcxOSwgNjgzNTYsIDY4MzU0LCAKLSAgICA5NjcxLCAxMTI1LCA0Mzk5LCAxMjc0NzksIDkxNzYxMCwgOTgzNDgwLCA3NjMxLCA1NDg4LCA3MTI4LCAxMjA1MzIsIDAsIAorICAgIDE5NDc3OCwgMTk0NzcyLCA5MzIxLCA5ODM0ODQsIDk4MzQ4MSwgOTgzNDgyLCAwLCAxNzE5LCA2ODM1NiwgNjgzNTQsIAorICAgIDk2NzEsIDExMjUsIDQzOTksIDEyNzQ3OSwgOTE3NjEwLCA5ODM0ODgsIDc2MzEsIDU0ODgsIDcxMjgsIDEyMDUzMiwgMCwgCiAgICAgNTQ5MSwgMCwgODkzNywgNDMwNDQsIDI2MDQsIDc0MTg3LCA1NDkwLCA0MzA0NiwgNTQ4OSwgNzIxMiwgMTE3NjgsIDQzMDQzLCAKICAgICA2MzAwLCAwLCA3MTIyLCAwLCA0MzkwLCA0NTQsIDQxMzk3LCAwLCA5ODc1LCA3NTkzLCAxOTQ3OTEsIDkyMjc0LCAxMTg5MTMsIAogICAgIDcyMDcsIDAsIDY1OTAxLCAyMzk0LCAyNTc1LCAwLCAzNzQ2LCAxMTAxNiwgNjU3NTIsIDEyMDAzNywgMCwgNDM0MjMsIAogICAgIDEyODY4MywgMTE5ODksIDAsIDAsIDAsIDAsIDAsIDgyNDksIDEyODE3MiwgMCwgNzg1MzEsIDY2NDAsIDc0ODA2LCAyNTk4LCAKLSAgICA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDEyMDcxMCwgNjUwMDgsIDAsIDE5NDc4NCwgMTk0OTg5LCAxOTQ3OTUsIDk4MzQ2NSwgCi0gICAgOTI1MTUsIDY4NDc1LCA5Mzk3MywgMCwgMCwgNzg2MzcsIDEyNjQ3LCAwLCAxMjgwNDMsIDY5ODkzLCAxMDM2LCA5ODM0NjksIAotICAgIDkyNDE5LCAxNzIzLCAxMjgwNTYsIDc0MjE3LCAwLCA0MTU3OSwgMjQ0NCwgMCwgMTA3MDUsIDczODc2LCA5ODM0NjEsIAotICAgIDc0NDg2LCA5ODM0NTksIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDY4NDM3LCAKKyAgICA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDEyMDcxMCwgNjUwMDgsIDAsIDE5NDc4NCwgMTk0OTg5LCAxOTQ3OTUsIDk4MzQ3MywgCisgICAgOTI1MTUsIDY4NDc1LCA5Mzk3MywgMCwgMCwgNzg2MzcsIDEyNjQ3LCAwLCAxMjgwNDMsIDY5ODkzLCAxMDM2LCA5ODM0NzcsIAorICAgIDkyNDE5LCAxNzIzLCAxMjgwNTYsIDc0MjE3LCAwLCA0MTU3OSwgMjQ0NCwgMCwgMTA3MDUsIDczODc2LCA5ODM0NjksIAorICAgIDc0NDg2LCA5ODM0NjcsIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDY4NDM3LCAKICAgICA3ODE0MCwgNzgxMzksIDE5NDk4NSwgODEyMSwgMTA0MzgsIDc0NDg3LCA0MjU3NCwgMTMyODUsIDU1MjYzLCAxMTkwNywgCiAgICAgMTk1MDAwLCA1NjkwLCA5MjI1NSwgOTM5OTIsIDAsIDQzMTgxLCAxMzA5NSwgMCwgMTI3ODU3LCA2NDQ5OCwgMCwgOTUwNiwgCiAgICAgNjk3OCwgMTk0OTkzLCA3Nzk5MiwgMCwgMCwgMTk0OTkyLCAwLCAxMjc4NDUsIDExMjIsIDMxNywgMCwgMCwgMCwgMCwgCiAgICAgMTkyMCwgMCwgMTAxNzMsIDgyNywgMCwgMCwgNzgzNzgsIDEyMDEyNiwgNTIyMywgMTMwNCwgMCwgMTE5NTY0LCA1MjI2LCAKICAgICAxMjYwMiwgOTQwNDQsIDAsIDkzMjksIDc3NTgsIDkyMzksIDQxMTczLCA1MjI0LCA1NDg3LCAxMjIyLCA1NjkyLCA0MTcyNSwgCiAgICAgNjkyMjksIDk2NzQsIDU2OTUsIDQxNzExLCA2NDYyNywgMTk5MDksIDAsIDc0NjA0LCA1NjkxLCAyODcsIDg2NiwgMjMzLCAKLSAgICAxMjc0OTAsIDk4MzQzMywgNDI4MTYsIDk0MDM2LCA2NTE0MCwgNzQ3OTcsIDAsIDg4MzAsIDY1NjgsIDQyMzAwLCAxMDUyNCwgCi0gICAgNDExNzUsIDk4MzQ0MCwgOTgzNDM3LCA5ODM0MzgsIDUyOTYsIDk4MzQzNiwgNDI0OTIsIDQzNDAyLCA5MjQ2NiwgMzMwMiwgCisgICAgMTI3NDkwLCA5ODM0NDEsIDQyODE2LCA5NDAzNiwgNjUxNDAsIDc0Nzk3LCAwLCA4ODMwLCA2NTY4LCA0MjMwMCwgMTA1MjQsIAorICAgIDQxMTc1LCA5ODM0NDgsIDk4MzQ0NSwgOTgzNDQ2LCA1Mjk2LCA5ODM0NDQsIDQyNDkyLCA0MzQwMiwgOTI0NjYsIDMzMDIsIAogICAgIDAsIDAsIDY1MTYsIDY1MTUsIDY1MTQsIDY1MTMsIDY1MTIsIDAsIDc4NTYsIDg2OTAsIDAsIDAsIDEyMTIyLCAxMTk2MDIsIAogICAgIDQzOTc2LCAwLCAxNzg1LCA2OTkyNSwgNjg2MjIsIDY1MTUzLCAxOTQ4MTAsIDUxMzgsIDAsIDAsIDExODg2OSwgMCwgNDU0MCwgCiAgICAgNDExODEsIDAsIDYyMDAsIDAsIDUxMzQsIDAsIDMyMiwgNDY0MywgNTEzMiwgMCwgNjM4OSwgMTI4NTMzLCA1MTQzLCAwLCAKQEAgLTE5MjY1LDcgKzE5Mjg1LDcgQEAKICAgICAxMjcwMTIsIDEwMjcwLCAxMDI4NiwgMTAzMTgsIDEwMzgyLCA0MzUyOSwgNjY0NzcsIDAsIDAsIDc0MTcwLCAwLCAzMjM0LCAKICAgICAwLCAwLCA3NDM3NiwgNDMxMzksIDExODgxNSwgMTI3MDg0LCAxMjA2MjcsIDg3NjcsIDAsIDc0NDg5LCA5Njk1LCAxMjA3NDYsIAogICAgIDUyMDEsIDAsIDYyMTUsIDEyNzE0LCA2MjE0LCAxMzEwMSwgMCwgMTk0OTk5LCA2NTI2OCwgMCwgMCwgMCwgMTEwMjcsIDAsIAotICAgIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgNzg4OTAsIDEyNzA3MSwgOTgzNjYxLCAzMjAsIDAsIAorICAgIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgNzg4OTAsIDEyNzA3MSwgOTgzNjcwLCAzMjAsIDAsIAogICAgIDg2NDcsIDAsIDMwNDksIDAsIDY0NzEsIDQyMDcxLCA0MzE1NiwgOTkyNSwgMTI3MzU2LCAxMjczNTUsIDY2NDc4LCA0OTYwLCAKICAgICA1NTQ5LCAxMjczNTksIDEyNzM0NiwgODQ4NSwgNDY3MSwgNTQxOCwgMTI3MzUwLCAzMzUxLCAxMjcwMDYsIDEyNzM1MSwgCiAgICAgMTA2MTAsIDU0MTQsIDMwNjQsIDYyMTIsIDQyODYsIDU0MjEsIDEyNzM0NCwgOTU1NCwgMCwgOTQwNDgsIDEyNzEwOSwgCkBAIC0xOTI3MywxNiArMTkyOTMsMTYgQEAKICAgICAxMjYwMywgNzEzMSwgMTE0MzAsIDQ1NjYsIDc1MTgsIDkzMTcsIDM4MDEsIDEwMzQyLCAxMDQwNiwgMCwgMTE5MjU5LCAKICAgICA0MjU3NiwgMCwgNTIwMCwgMTI2NjExLCA5MTc5NDgsIDAsIDkxODMsIDEyNzM2MSwgNzQ0NTgsIDczODI1LCAzOTUsIDU0ODIsIAogICAgIDUxOTgsIDQzNDksIDEwMzkwLCA3NDIwMiwgNTE5NiwgNDMyMjQsIDYxMTMsIDQyMDA5LCA1MjA1LCAwLCA0MzMwNywgMCwgCi0gICAgMTE4OTczLCAwLCAxMjEzNCwgMCwgMCwgMTE4ODQzLCA5MTI2LCA0MzUsIDAsIDEyMDE0LCAxMDM3NywgODA5MywgOTA3OSwgCi0gICAgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgMTI4MTc4LCA1NzM4LCAKLSAgICA5ODMyMTMsIDMzMzYsIDc4MzU1LCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgNjgxMTIsIDc4NzIsIDg1ODEsIDAsIDEyNjAsIAorICAgIDExODk3MywgMCwgMTIxMzQsIDAsIDAsIDExODg0MywgOTEyNiwgNDM1LCA5ODM2MjQsIDEyMDE0LCAxMDM3NywgODA5MywgCisgICAgOTA3OSwgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgMTI4MTc4LCA1NzM4LCAKKyAgICA5ODMyMTUsIDMzMzYsIDc4MzU1LCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgNjgxMTIsIDc4NzIsIDg1ODEsIDAsIDEyNjAsIAogICAgIDMxNDksIDUzNTksIDEyMDEzNCwgMCwgNzkxNCwgNTM1NywgOTIxNzAsIDEyODY1OSwgMjYyNCwgNTM2NCwgMCwgMTE0MzEsIAogICAgIDEyMDAzMCwgOTEwMSwgMTEwNTgsIDc4Mjg4LCAwLCA3ODI5MywgNDIyNzEsIDc4Mjg5LCA0MjkxNywgMTIwNzkzLCAwLCAKICAgICA2NTU2NiwgNjcxNywgMTA2MTksIDQzMzYwLCA3ODM4NSwgNzgzODQsIDExODMyLCA3ODM4MiwgNzgzODEsIDc4MzgwLCAKICAgICA3ODM3OSwgOTMxOSwgNzA5NywgMTE5MDU1LCA3NzkwNiwgMzIzMiwgNzM4MjQsIDc0NTgxLCAxMjA2MzIsIDAsIDAsIAogICAgIDQxODg5LCA5MjQ1MywgMCwgMTE2MSwgNDE4OTUsIDc0MTAzLCA5NzAxLCA4NjIyLCAwLCAwLCA3MzgxOSwgMTIwNTg4LCAKICAgICA1MDEyLCA3NzkxMiwgNDEzNjIsIDY5ODYyLCA3ODI5NiwgMTE5MjEsIDAsIDExNzY5LCAwLCA2ODYwOSwgNDEzNjQsIDAsIAotICAgIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAwLCA5MTcsIDY4NDIyLCAxMTk5MTUsIDcxMzQsIAorICAgIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAxMTYxMSwgOTE3LCA2ODQyMiwgMTE5OTE1LCA3MTM0LCAKICAgICA4MTk5LCA3ODM4OSwgMTE5OTE3LCA2NzcsIDExOTkxNiwgMCwgMTE5OTMyLCAxMjcxNjksIDAsIDAsIDAsIDMzNDksIAogICAgIDc0MTI1LCA3MDIyLCA4OTI3LCA0NzM5LCAwLCA1ODAyLCAwLCA4NjE1LCAwLCAwLCA0OTEsIDEyODgxOSwgMTAxOTAsIAogICAgIDEyMDY5OCwgNjU4MzcsIDEyODgyMCwgODQyNiwgMTEwOTIsIDk4OTEsIDAsIDQyNDk3LCA3MTEzLCA3NTg2LCA0MjMwNSwgCkBAIC0xOTMxMCwzMCArMTkzMzAsMzAgQEAKICAgICA1NTI1MiwgNzM5NzIsIDE0NDIsIDAsIDU4OTQsIDcwMDY5LCAwLCA0MTE3MSwgOTI1MTEsIDc0MzEzLCAwLCAxMzE2MiwgMCwgCiAgICAgMzMzNCwgMTk1MDEwLCAxMTg4MDMsIDc3ODgxLCA2NjAyMiwgMCwgMCwgMTY1MSwgMTI4NzcxLCA4ODYxLCAwLCAwLCAxMTQyLCAKICAgICAwLCA4MjcxLCAwLCA5ODMwNTgsIDEyNjY0NSwgMTI5MDMsIDAsIDQwMDIsIDQzNjI2LCAxMDQ0MiwgMTA2NzYsIDMzNDQsIDAsIAotICAgIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAwLCA3ODg1MywgMCwgNzg4NTQsIAorICAgIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAxOTQ2ODYsIDc4ODUzLCAwLCA3ODg1NCwgCiAgICAgMTIwMzYwLCAwLCAxMTc4NCwgMCwgNzgwMTIsIDQ3MDAsIDY2MzY2LCA3ODg1OCwgMTIwMzU5LCAxMTAxMiwgMCwgNzg4NTYsIAogICAgIDkyNDAwLCA3Nzg3OSwgNDk3MywgODc4NCwgNzc4NzcsIDc0ODA0LCA3Nzg3NCwgNzc4NjksIDc3ODcxLCA0MjQ0MCwgMCwgCiAgICAgNDMxMTgsIDAsIDQyMzY0LCA2Nzc0LCA2NzczLCA5MTc1NjAsIDEyMDM2OSwgMTAzNDYsIDEwNDEwLCA3ODg1OSwgOTI0MywgCiAgICAgMjQ2NCwgNzQyNjMsIDYxMDgsIDMzNzIsIDAsIDYyNDcsIDQzMTE3LCA3NDUyNiwgNzEyMSwgNzQxNjYsIDAsIDEyMDM1NSwgCiAgICAgOTI1MzcsIDAsIDAsIDE5NTAzNCwgMCwgMCwgMCwgNzAwODMsIDMzNTQsIDE5NTAzNywgNDE5MiwgOTI4OSwgMTE4OTk5LCAKICAgICA0MTE5MSwgMzg3NiwgMCwgNzAwNjcsIDEyMDY2MCwgNDM2OTYsIDQzMzgwLCAwLCA5ODMwOTEsIDAsIDAsIDExNjAzLCAKLSAgICA5ODM5NDUsIDAsIDY1ODksIDEyODU4OCwgMTk0Njc5LCAwLCAwLCA5ODM2OTEsIDAsIDAsIDQyNTcyLCAxMjgyNjQsIAorICAgIDk4Mzk1NCwgMCwgNjU4OSwgMTI4NTg4LCAxOTQ2NzksIDAsIDAsIDk4MzcwMCwgMCwgMCwgNDI1NzIsIDEyODI2NCwgCiAgICAgMTA2MzAsIDc0ODI3LCAxOTYzLCAxMTYyMiwgMTI3MDk4LCAxMTY1NCwgMCwgNzU1MCwgMTA2ODYsIDU5MDMsIDAsIDc4MDA5LCAKICAgICA0MTMyOSwgOTY2MiwgOTE3OTM3LCA2NDY5OCwgMzM2NiwgMTAzOTksIDAsIDU1NDIsIDExMDEzLCAxMjc5MjcsIDEyODMwMCwgCi0gICAgMCwgNzg2MjEsIDE5NDY3MiwgNjkyNSwgMCwgMCwgOTE3OTI5LCAwLCAxMTU2OCwgOTgzNjY0LCA0MzM2NywgNjQ1NzksIAorICAgIDAsIDc4NjIxLCAxOTQ2NzIsIDY5MjUsIDAsIDAsIDkxNzkyOSwgMCwgMTE1NjgsIDk4MzY3MywgNDMzNjcsIDY0NTc5LCAKICAgICA5MTc5MzAsIDc4NTIsIDAsIDAsIDY3NTQsIDYzMTIsIDAsIDY0NjcyLCA2NTI5NiwgMCwgMTE4OTU3LCAwLCA0MTYsIAogICAgIDEyMjk2LCA2ODQ1NywgNzM4MzQsIDY4MTc3LCAxMTA1MCwgMTA5ODQsIDkyMjA4LCAwLCAwLCA5MjE4MiwgMCwgOTgzNjA1LCAKLSAgICA5NTMyLCA2NjM1NSwgMCwgOTgzMjI4LCA5MTc5MjUsIDY0MzQzLCAxOTUwMzIsIDEyODI4MSwgMTk1MDMxLCAwLCAxOTUwMzAsIAorICAgIDk1MzIsIDY2MzU1LCAwLCA5ODMyMzQsIDkxNzkyNSwgNjQzNDMsIDE5NTAzMiwgMTI4MjgxLCAxOTUwMzEsIDAsIDE5NTAzMCwgCiAgICAgMTk1MDU3LCAxMTQ0NSwgMCwgMjExMiwgMTk1MDU2LCAxMjg4MTQsIDEwMTg1LCAxMDIxLCAxMjgxMzAsIDk1MDcsIDEwMjEwLCAKICAgICA3NDU0NCwgODAyMywgMTIwMCwgMTIyNDMsIDc4MDAxLCA1MjgyLCA3ODAwMywgOTYyNCwgMTE1NDUsIDAsIDEyMDQ5MywgCiAgICAgMzM0MywgNDQyNCwgMTEwNDcsIDE4ODUsIDQzMjY4LCAzODk2LCA3ODQ0NCwgNjY0OTcsIDI5NDcsIDM5MiwgNzg5NCwgCiAgICAgNDM5MSwgNjgxMzksIDk4MzA2MiwgMTMwNTksIDc0ODE2LCA3Nzk5OCwgMzM4MSwgNzk0MiwgMCwgNjkyMTksIDAsIDY0NzU3LCAKICAgICAwLCAzOTEzLCAwLCAwLCA3ODIzNSwgNzA0NCwgMTI2NSwgMCwgNjMwOSwgNzA0NSwgNzE3NSwgNzA0NywgNzgyMzksIAotICAgIDExNzkxLCAwLCAwLCA4MjIxLCA3ODMwNywgNDE4NjQsIDAsIDAsIDAsIDAsIDE2NywgOTgzODk3LCA3ODMwMSwgOTgzNjQ0LCAKLSAgICA3NDIxMSwgNDE4OTcsIDY4NDc3LCAwLCA5MTc1ODMsIDk4MzYyNSwgOTQwNjUsIDI0OTMsIDAsIDExODgxMSwgMCwgMCwgCisgICAgMTE3OTEsIDAsIDAsIDgyMjEsIDc4MzA3LCA0MTg2NCwgMCwgMCwgMCwgMCwgMTY3LCA5ODM5MDYsIDc4MzAxLCA5ODM2NTMsIAorICAgIDc0MjExLCA0MTg5NywgNjg0NzcsIDAsIDkxNzU4MywgOTgzNjM0LCA5NDA2NSwgMjQ5MywgMCwgMTE4ODExLCAwLCAwLCAKICAgICA2NDM1NCwgMCwgODc3NywgMCwgNDA2LCA4ODg0LCAyMzg1LCAwLCA5MjQ1MCwgMCwgOTE3NTczLCA0MzAzMCwgNDIwMjcsIAogICAgIDEyMTE0LCAwLCA5MTc1NzksIDY0OTM2LCAxOTQ2OTUsIDAsIDEyMDYyOSwgMTA1NjEsIDAsIDgzNjUsIDEyMDUzOSwgCi0gICAgOTgzNzY1LCA2NTg0MSwgMTIwNzg3LCAxMTYwMSwgMCwgNzQxMjEsIDAsIDkxNzU3NSwgNzgzNCwgNzQxNTksIDAsIAorICAgIDk4Mzc3NCwgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDc0MTIxLCAwLCA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCAKICAgICA5MTc1NzQsIDEwMjk4LCA2NjI0LCA0OTA4LCA5MTc1OTYsIDE2MzksIDAsIDAsIDc0MTU3LCA2MzI3LCA2NzI0LCAwLCAKICAgICAxMjgwODYsIDkyNTY2LCA2OTkxMCwgNDgxNywgNzg0NDYsIDE5NDc1OSwgOTI1MzYsIDcwNDMsIDk2MDAsIDExMDIyLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCA3NTQ4LCA2NDc5NCwgNDIwNTAsIDEyMjkxLCA1NTI4OSwgMTk0NzYxLCAxMjM0MywgNjU3LCAKQEAgLTE5MzQzLDE0ICsxOTM2MywxNCBAQAogICAgIDQxNDA2LCA0MzI3MywgNzQxNjAsIDExOTk4MywgNzM5MzksIDkyNjM4LCAxMTk5ODQsIDExOTk3OSwgNDE0MDQsIDExNjUsIAogICAgIDExOTk4MCwgNDQ1MSwgMTMwODcsIDAsIDExMjg0LCAxMTk5ODcsIDcwMDk3LCA2NTE1NSwgNDMwMTQsIDU0MzksIDkzNjMsIAogICAgIDcwMDcwLCAzMzc1LCAxMjg4NjksIDU5MDAsIDkzOTkwLCA3ODg5LCAyNzIyLCA0MjI2MiwgMCwgMCwgMTI4Nzc0LCAwLCAKLSAgICAyMjgyLCAwLCAxMjc4MTAsIDExNDAxLCA5ODM4MTMsIDAsIDY4NDU5LCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgNzI4MCwgCi0gICAgMTI3ODg3LCAwLCAxMjczODEsIDQ4NjgsIDExOTk2NywgMTE5OTY2LCAxMTg3OTgsIDAsIDAsIDQzMTYxLCAwLCA5MjM2MCwgCi0gICAgMCwgNTE4MiwgMCwgMTIwNTQyLCAwLCAwLCA0MjI2LCAxMTkyNDMsIDEyMTM1LCA1NzMyLCA0NDY0LCAwLCA3MTMzMCwgOTc3LCAKKyAgICAyMjgyLCAwLCAxMjc4MTAsIDExNDAxLCA5ODM4MjIsIDAsIDY4NDU5LCAwLCAwLCAwLCAwLCA2NTQzOCwgMCwgNzI4MCwgCisgICAgMTI3ODg3LCAwLCAxMjczODEsIDQ4NjgsIDgyOTcsIDExOTk2NiwgMTE4Nzk4LCAwLCAwLCA0MzE2MSwgMCwgOTIzNjAsIDAsIAorICAgIDUxODIsIDAsIDEyMDU0MiwgMCwgMCwgNDIyNiwgMTE5MjQzLCAxMjEzNSwgNTczMiwgNDQ2NCwgMCwgNzEzMzAsIDk3NywgCiAgICAgNDQ1OCwgMCwgMCwgNjQ3NzAsIDc0ODM4LCAwLCAzNDQsIDAsIDE5NDc5MCwgMTM5NSwgNjQyNzksIDAsIDkyMjQwLCAwLCAKICAgICA3ODYsIDAsIDQzMTc0LCA2NDM0MCwgMCwgMTk0NzY3LCAxMjA3MjMsIDQzMDI2LCA3NjEyLCAxMDEzMiwgNjQ0MTMsIAogICAgIDY1MDI1LCAwLCAwLCAwLCA5Mzk1NiwgMCwgNjg0NDQsIDAsIDkyNDM3LCAwLCAxMTkxNjAsIDEwMjA0LCA5MjY1NiwgMCwgCi0gICAgMTI3ODA5LCA5ODM2MzUsIDEzOTksIDk4MzY0MywgNjUyMTcsIDAsIDg4NTIsIDEyODU3MSwgMjQxLCAxMjg3ODAsIDQ5MDcsIAotICAgIDAsIDk4MzYzMCwgNzkzMiwgOTcyNywgMTI4ODczLCA3NDI1NSwgODc0OCwgMCwgMCwgOTgzNjM0LCAwLCA0Mjc4MCwgMCwgMCwgCisgICAgMTI3ODA5LCA5ODM2NDQsIDEzOTksIDk4MzY1MiwgNjUyMTcsIDAsIDg4NTIsIDEyODU3MSwgMjQxLCAxMjg3ODAsIDQ5MDcsIAorICAgIDAsIDk4MzYzOSwgNzkzMiwgOTcyNywgMTI4ODczLCA3NDI1NSwgODc0OCwgMCwgMCwgOTgzNjQzLCAwLCA0Mjc4MCwgMCwgMCwgCiAgICAgMCwgNDIxNywgMCwgODY1MCwgMCwgMCwgMCwgNjk5MDAsIDExODg3MiwgNDMwOTksIDM5NjUsIDExOTExOSwgNjcxOSwgMCwgCiAgICAgMTMzMDAsIDc4NDM5LCA5Mzk3MSwgNDMwNTcsIDY2NTg4LCAxMTg5OTEsIDAsIDAsIDczODE1LCA0NDIwLCAwLCA2NDEwLCAKICAgICA3NzYwLCAwLCAwLCAwLCAwLCAwLCA3Mjk0LCAwLCAwLCAwLCA5MDY2LCAwLCAxMTk5MywgNDMxODgsIDI2MjYsIDc3NjIsIDAsIApAQCAtMTkzNTgsNDUgKzE5Mzc4LDQ1IEBACiAgICAgNjY0NTQsIDk1OTIsIDQyODUxLCAxMjY5OTMsIDE1NDIsIDkyMzAzLCAwLCAwLCAwLCAwLCA3NDMxMSwgNzg0OTcsIDAsIAogICAgIDEwMTgxLCAwLCA0MzYyNCwgMCwgNzc3OSwgMCwgMTAxOTUsIDk0NzksIDYwMjksIDAsIDkyMjY4LCA5Njg5LCAwLCA2NTU3NywgCiAgICAgODk5MywgNjYzNTgsIDAsIDQyMzc4LCAzMzY4LCA2MDYsIDEyNzAzMCwgNzY5NywgNjkyMzcsIDY5Nzg3LCAyMDMwLCAwLCAKLSAgICA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgOTgzMzMxLCA5ODMzMzAsIDk4MzMyOSwgOTgzMzI4LCAyNzM1LCAKKyAgICA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgOTgzMzM5LCA5ODMzMzgsIDk4MzMzNywgOTgzMzM2LCAyNzM1LCAKICAgICA0MjgzMSwgNzc5MzUsIDEyNzEyMCwgNzQ4NjYsIDg4ODEsIDExOTA0NywgMCwgMCwgNzM5NDYsIDAsIDAsIDAsIDY4MTQwLCAKLSAgICA5ODM5MTksIDk1NzYsIDEyODg3MiwgMzM0NywgNDE2MCwgNTE1NCwgNTUyODgsIDM3OTQsIDY2NTY0LCA4NTMwLCAxMjcwNjMsIAotICAgIDc3MDksIDQxMTEyLCA5ODMxMzIsIDY2NTYwLCA0MjA0MSwgNDU3MiwgMTI4NzYsIDY2NTYxLCA5ODM3NDksIDY3NTgsIAotICAgIDk4MzkxNywgMTYxNSwgNTg1NSwgODA5LCAwLCA5MjI4MywgMTI4MzE2LCAxMjgwMDQsIDU3OTksIDk4MzMyMCwgNzAxMDAsIAotICAgIDk4MzMxOCwgNzI2MCwgOTgzMzE2LCA0MzAzMSwgNjQ0MjUsIDY1MTI4LCA3ODgxOSwgNjQzODYsIDY1MjU3LCAwLCA2ODYxNiwgCisgICAgOTgzOTI4LCA5NTc2LCAxMjg4NzIsIDMzNDcsIDQxNjAsIDUxNTQsIDU1Mjg4LCAzNzk0LCA2NjU2NCwgODUzMCwgMTI3MDYzLCAKKyAgICA3NzA5LCA0MTExMiwgOTgzMTMyLCA2NjU2MCwgNDIwNDEsIDQ1NzIsIDEyODc2LCA2NjU2MSwgOTgzNzU4LCA2NzU4LCAKKyAgICA5ODM5MjYsIDE2MTUsIDU4NTUsIDgwOSwgMCwgOTIyODMsIDEyODMxNiwgMTI4MDA0LCA1Nzk5LCA5ODMzMjgsIDcwMTAwLCAKKyAgICA5ODMzMjYsIDcyNjAsIDk4MzMyNCwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgNzg4MTksIDY0Mzg2LCA2NTI1NywgMCwgNjg2MTYsIAogICAgIDEyMDYwNywgOTM0NywgMTI4MDY3LCA2NTMyLCAwLCAwLCAwLCAxMjcwNjAsIDY1ODI4LCAwLCAyODMsIDY4NjY1LCA3ODgxMywgCi0gICAgNTMyLCA3ODY2MywgMCwgOTgzNzg3LCAxMjA2MDksIDAsIDMzNzAsIDAsIDExMzYxLCA1NDQzLCA3ODc3OCwgODE1MywgCi0gICAgNzM3NjcsIDAsIDEwNzQxLCAwLCAyMjk4LCAwLCA5ODM5MDgsIDY1NDk1LCA2NDcwNiwgOTgzMzEwLCA0MzM0NCwgOTgzMzA4LCAKLSAgICA3MTQ0LCA5NDY2LCA3ODg2NiwgOTgyNCwgOTgzMzAzLCA5ODMzMDIsIDAsIDAsIDkxNSwgNDM0MjUsIDAsIDAsIDAsIDAsIAorICAgIDUzMiwgNzg2NjMsIDAsIDk4Mzc5NiwgMTIwNjA5LCAwLCAzMzcwLCAwLCAxMTM2MSwgNTQ0MywgNzg3NzgsIDgxNTMsIAorICAgIDczNzY3LCAwLCAxMDc0MSwgMCwgMjI5OCwgMCwgOTgzOTE3LCA2NTQ5NSwgNjQ3MDYsIDk4MzMxOCwgNDMzNDQsIDk4MzMxNiwgCisgICAgNzE0NCwgOTQ2NiwgNzg4NjYsIDk4MjQsIDk4MzMxMSwgOTgzMzEwLCAwLCAwLCA5MTUsIDQzNDI1LCAwLCAwLCAwLCAwLCAKICAgICAxMjcxNzgsIDQzMjY0LCA3MDA5NiwgMCwgMCwgNDMwMzgsIDc4ODY0LCA2NzMwLCA3ODg2MiwgNjgxNjEsIDY0NTUwLCAKICAgICA1MTg2LCA3MzYwLCAxMjc4MzcsIDAsIDEyMTA4LCAwLCA2NTEyNCwgNDMxMjcsIDY2MDQzLCAwLCA2MzI2LCA0MzEwNywgCi0gICAgNzc4MjYsIDAsIDQyNTYyLCAwLCAxMjg4MjEsIDAsIDEyODUyMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgOTgzMjk3LCAKLSAgICAxMTcxOCwgOTgzMjk1LCAxMjg4OSwgOTI2NTcsIDEyNzEzNywgMCwgMCwgMCwgNTUyNDUsIDAsIDE2MzAsIDEyODIzMiwgCisgICAgNzc4MjYsIDAsIDQyNTYyLCAwLCAxMjg4MjEsIDAsIDEyODUyMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgOTgzMzA1LCAKKyAgICAxMTcxOCwgOTgzMzAzLCAxMjg4OSwgOTI2NTcsIDEyNzEzNywgMCwgMCwgMCwgNTUyNDUsIDAsIDE2MzAsIDEyODIzMiwgCiAgICAgNjU0ODMsIDAsIDEyNTY1LCAwLCA2NTQ3NiwgMTIwMDEzLCAwLCAxMTk1NTQsIDkyODMsIDc3MDAsIDkxNzUzNywgOTY5MCwgCiAgICAgNjU0OTksIDAsIDY0NTkzLCA1MTIsIDMzNzYsIDY4MjEwLCAwLCAxMjg2NzcsIDc3ODkyLCA2MzIsIDEyOTQwLCA3Nzg5MSwgCi0gICAgNDI1MjksIDc4NTg3LCAwLCA1OTU3LCAxMTA1OTMsIDg5MjYsIDk4MzI5MSwgOTgzMjkwLCAxMjgyNzMsIDEwNzQ1LCAKKyAgICA0MjUyOSwgNzg1ODcsIDAsIDU5NTcsIDExMDU5MywgODkyNiwgOTgzMjk5LCA5ODMyOTgsIDEyODI3MywgMTA3NDUsIAogICAgIDEwMTc0LCA3Mzc5LCA2NDU4MSwgNTM4NiwgMTIwNjg2LCAxMTcxMywgMTA2MzMsIDY5NzA4LCA1MDU2LCAwLCAwLCAwLCAKICAgICAxMjA3NzMsIDAsIDk4MTIsIDAsIDQ0NjAsIDAsIDAsIDcxMzA3LCAxMjgwMzgsIDAsIDAsIDEyNzE3NCwgNjQyNzgsIAogICAgIDkyMzcwLCA0MzQ2NiwgMCwgMCwgNjQzODksIDI5NTMsIDczODc5LCAxODAxLCAxMjgzNSwgMTE5MDI5LCAwLCA3MzgyMywgMCwgCi0gICAgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCA5ODMyNzgsIDk4MzI3NywgCi0gICAgMTI4NTcwLCAxMjEwNiwgOTgzMjc0LCA3NDIwNywgMTc1NSwgMTA0ODIsIDEyODYzLCA3Nzg5OCwgMTE2MywgMjk1MSwgCisgICAgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCA5ODMyODYsIDk4MzI4NSwgCisgICAgMTI4NTcwLCAxMjEwNiwgOTgzMjgyLCA3NDIwNywgMTc1NSwgMTA0ODIsIDEyODYzLCA3Nzg5OCwgMTE2MywgMjk1MSwgCiAgICAgOTUyMiwgNzQwNzksIDc4MjY2LCA2NjYwNCwgMCwgMzM4NCwgNjkyMjcsIDEwNzAyLCA4MzAsIDc3OTAyLCA3Nzg5OSwgCiAgICAgNzc5MDAsIDg0NTEsIDAsIDAsIDAsIDY5NzM5LCAwLCAwLCAwLCAwLCAyOTA4LCAwLCA0MzM4NiwgNjQ5MDIsIDQyNDMsIDAsIAotICAgIDEyMjM5LCAwLCAwLCA0NDQxLCAwLCA5ODMyNzEsIDczOTQwLCA2NDM1MiwgMTI3NTEzLCA5ODMyNjcsIDQxMSwgOTgzMjY1LCAKLSAgICA5MTk5LCA5ODMyNjMsIDQwNTYsIDExODk5MiwgNDE4OTAsIDAsIDI3MzAsIDQxNjA0LCA5ODM5MjgsIDU0MjgsIDE5NDc0MywgCisgICAgMTIyMzksIDAsIDAsIDQ0NDEsIDAsIDk4MzI3OSwgNzM5NDAsIDY0MzUyLCAxMjc1MTMsIDk4MzI3NSwgNDExLCA5ODMyNzMsIAorICAgIDkxOTksIDk4MzI3MSwgNDA1NiwgMTE4OTkyLCA0MTg5MCwgMCwgMjczMCwgNDE2MDQsIDk4MzkzNywgNTQyOCwgMTk0NzQzLCAKICAgICAzMzY0LCA0MjI2NSwgNjQ0MzcsIDEyNzkzNSwgMTE4ODE2LCAxOTQ3NDIsIDk2ODQsIDIxNiwgMCwgMTQwMSwgMTI4MDUzLCAKICAgICA0NDAxMiwgMCwgMCwgOTI1ODUsIDkxNTgsIDc3ODQyLCA2OTkwNSwgNTc2OCwgMCwgMCwgMCwgNDg0LCAxOTQ3MzksIDAsIDAsIAotICAgIDY1ODk1LCAwLCAwLCAzMzM4LCA3MzkzNSwgNTcyLCA3MDQxLCAyNzM2LCA2NzYwNSwgOTgzMjU1LCA5Mzk2MiwgMjc5NCwgCisgICAgNjU4OTUsIDAsIDAsIDMzMzgsIDczOTM1LCA1NzIsIDcwNDEsIDI3MzYsIDY3NjA1LCA5ODMyNjMsIDkzOTYyLCAyNzk0LCAKICAgICA4ODA3LCA2NDQ5MSwgNzc4NDcsIDU0MzgsIDUyMjIsIDUzODEsIDQzMTE0LCAwLCA1MTkzLCA1MTI1LCA1NDU2LCA1NTA5LCAKICAgICA3Nzg0NiwgMTk0NzQ3LCA5NTM0LCAwLCAwLCAwLCAzNDMwLCAwLCAwLCA3ODcxNywgMCwgOTgxLCAwLCA0MzMwLCA3MzkyOSwgCiAgICAgMTIwNTM2LCAxODI0LCAxMDkwOCwgMCwgNzAzNCwgNDE2ODMsIDY0NjE3LCAwLCA3Mzc1NCwgMzk1NywgNjQzNTgsIDY0NTQ3LCAKLSAgICAxMjgyNTksIDY3NCwgNjM5OTEsIDk4MzI0MywgMjk0NiwgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgMzc1OSwgMTE0MTEsIAorICAgIDEyODI1OSwgNjc0LCA2Mzk5MSwgOTgzMjQ5LCAyOTQ2LCA1MzU0LCA1MjUxLCA1MzI4LCA1MzA3LCAzNzU5LCAxMTQxMSwgCiAgICAgODM2NCwgNTEyMywgMTE5NjI4LCA1MjgxLCA1NDY5LCA1MTIxLCAxMTkyNDUsIDExODk5MywgMCwgNTEzMCwgMCwgMCwgCiAgICAgNzc5OTAsIDAsIDEyMDcyNiwgMTIyMSwgMjczMywgMTE3NDYsIDc3OTkxLCA1MjE2LCAwLCAwLCAwLCAwLCAzNDY4LCA3MDMzLCAKICAgICA5MjMwLCA1OTM5LCAxOTUwNTIsIDAsIDAsIDEyMDY3NywgNjg0MDAsIDcyNzgsIDEwMzIxLCAxMDI4OSwgNjQ2MTMsIAotICAgIDEwMzg1LCA0MTcwNiwgMCwgMCwgOTgzNDA1LCAwLCAxMTczOSwgOTgzNDE4LCA0MTk4MSwgMCwgNTkzOCwgMCwgNDM3NjYsIAorICAgIDEwMzg1LCA0MTcwNiwgMCwgMCwgOTgzNDEzLCAwLCAxMTczOSwgOTgzNDI2LCA0MTk4MSwgMCwgNTkzOCwgMCwgNDM3NjYsIAogICAgIDEyNDQ4LCA3NTc2LCAxMDQwMSwgMTAzMzcsIDczODUyLCAwLCAxMzA1NywgMCwgMTI2OTc2LCAwLCAxMDAwOSwgMCwgCi0gICAgNDE3MDMsIDk4MzYyOSwgMTIxNjUsIDAsIDAsIDk4ODUsIDAsIDgwNzcsIDAsIDEyNzkwOCwgMCwgMCwgMCwgOTI0NTcsIDAsIAorICAgIDQxNzAzLCA5ODM2MzgsIDEyMTY1LCAwLCAwLCA5ODg1LCAwLCA4MDc3LCAwLCAxMjc5MDgsIDAsIDAsIDAsIDkyNDU3LCAwLCAKICAgICA0MjIwLCAxMDcyNSwgMTA0MzMsIDAsIDY4Mzk1LCA0OTg3LCA2NDUxOSwgMCwgMTI4MzQwLCAwLCAwLCAwLCAxMDk3MCwgCiAgICAgMTE3MzMsIDAsIDEyMDc5MiwgMCwgMTk5NDQsIDAsIDkwMDksIDg1NTEsIDkyMzQ1LCAxMTQ2OCwgNjQ2MzYsIDc1NzUsIDAsIAogICAgIDI3MjQsIDAsIDAsIDEyMzEzLCAxMTA1OTIsIDUxNSwgMTE5OTQ3LCA0Mjc5MSwgNjM5ODcsIDc4Mjg2LCAxMTk5NDMsIApAQCAtMTk0MDYsNzMgKzE5NDI2LDczIEBACiAgICAgMCwgNDQ3NywgMTE4OTY0LCA4MTQsIDQyMDY2LCA2NjE4MywgNjYyMDQsIDQzNzg2LCAxMTk5NjEsIDY2MTk4LCA0MTg4MCwgCiAgICAgNjYxODgsIDExNjIzLCA3ODE0OCwgMTE5NTUsIDY2MTkwLCA2NjE5MSwgNDExMTEsIDY2MTg5LCA3Mzc4OCwgNzc4OCwgCiAgICAgNDg0NywgMCwgMTI3NzU5LCAwLCAwLCAwLCAxNTgxLCA2NTM1LCA3ODE2MSwgMTI5NTQsIDQzMCwgNzgxNjAsIDU1MjU5LCAKLSAgICA3ODE1OCwgMTI4MDM2LCA1Mjc4LCA0OTQ1LCA0Mjg4MywgNDk1MCwgOTgzNDMwLCA2ODYyNSwgOTgzNDI4LCA3MjY5LCAwLCAKLSAgICA1OTY0LCAxMjkwOCwgOTgzNTU1LCAwLCA3NDc2NCwgNzQ0NzcsIDExOTE0NiwgMTk0OTM2LCA0OTQ5LCA5ODM0MjEsIDQ0MywgCi0gICAgOTgzNDE5LCA0OTQ0LCA1NDY3LCAxMTk2MDMsIDAsIDY1MTM3LCA2MDQ0LCA2NTM5MiwgMCwgNDIxMywgMCwgNDEzMDMsIDAsIAotICAgIDE5NDkzMSwgMTE5OTYyLCA0MTMwNiwgNzM5ODQsIDI2OTgsIDEyNzE1OSwgMCwgMTIwNzIsIDMxOTMsIDAsIDQxMzA0LCAKLSAgICA4MjQsIDEyODY3NiwgMTIwOTEsIDc4ODkzLCA3ODg5NCwgMTE5ODE2LCA0NjczLCA2NDgwNCwgNDY3OCwgMTE5ODIwLCAKLSAgICAxMTk4MTksIDY1MDU5LCAwLCA2NzM5LCAwLCA1NDgxLCAzNDkwLCAxMTk5LCAxMTk4MTEsIDgzNTYsIDY5OTQ3LCAxMTk4MzIsIAotICAgIDQ2NzcsIDEyNjg4LCAzMTAyLCAwLCA0NjcyLCA3ODE3MywgNzgxNzUsIDU1MzEsIDY4MzY3LCA0MjU3NSwgNzgxNzAsIAotICAgIDc4MTY2LCA0Njc0LCA0NTQ4LCA0NDAwNSwgMTE5OTQ5LCA2ODY1OCwgMTE5OTQ2LCA4MDI1LCA2ODYzMCwgMTI3MDI0LCAKLSAgICAxODU1LCA5ODM0MDQsIDY4NjY5LCA5ODM0MDIsIDkyNDQ1LCAxMjc1NTQsIDAsIDEyNzMzOSwgMTE5NjUyLCAyNzQ1LCAKLSAgICAxMTc5NywgOTgzNDEwLCAxMjgxNTksIDkyMDIsIDQ2NTQsIDk4MzQwNiwgOTgzNDA4LCA2ODYzOCwgNzM5OTMsIDEwNTI1LCAKLSAgICA0NjQ5LCA2NTIwOSwgOTgzNDA5LCAwLCA0NjQ4LCA0MzA4MCwgOTgzMzk4LCA5ODMzOTksIDk4MzM5NiwgNjI0NiwgNjQ5NTAsIAotICAgIDc4MjgsIDQ2NTAsIDY3NzcsIDY3NzYsIDY3NzUsIDQ2NTMsIDc4MjIsIDc4MDA1LCA5MjM4NCwgNDMxODcsIDg2NjksIAotICAgIDk4MzQwNywgNjgyMSwgNjUwOTMsIDAsIDc4ODgxLCAyNzE2LCAwLCA5ODMwNjAsIDk4MzQxMSwgMCwgNjgzNjksIDEyMDA1NCwgCi0gICAgMTEwNjAsIDg1NDcsIDI3MTEsIDQyMTY1LCA3ODAyNywgNzgwMjYsIDc5OTIsIDAsIDAsIDQ2NjIsIDc4MDMzLCA3ODAzMiwgCi0gICAgOTE0OSwgOTE0NiwgNTk5LCAyMDgxLCA3ODAzMSwgNzgwMzAsIDE5NDk2MiwgNDY1NiwgMTAxMzAsIDY4NDUwLCA3ODExLCAKLSAgICA0MDk5NCwgMTk0OTY1LCA2NDE0LCA1OTY3LCA0NjU4LCAzNzI1LCA1NzEzLCA1ODE0LCA0NjYxLCA0MjQzNCwgOTgzNDAzLCAKLSAgICAwLCAwLCA2NDkwNCwgOTAyNiwgMTA4MzMsIDc0ODY0LCA3NTQ3LCA0ODY3LCAwLCAxMDAwOCwgMTAyMjIsIDMwNTQsIAotICAgIDE5NDk1NiwgOTc0NCwgNzg4NjAsIDc2MDUsIDQ2MjIsIDExOTY1NiwgOTgzMzg3LCA5NDA3MCwgOTgzMzg1LCA5ODMzODYsIAotICAgIDk4MzM4MywgOTA0NSwgNzg4ODgsIDQyMjUsIDE5OTI2LCA3ODg4NywgMTI4ODAsIDY1MzA3LCA0NjE3LCA3ODg4MywgCi0gICAgOTgzMzc4LCA0MTczMiwgNDYxNiwgMTA1MTgsIDEwNDIzLCAxMDM1OSwgOTgzMzcyLCA1OTU4LCAwLCA5ODM0MjUsIDQyMTUsIAotICAgIDk3ODksIDkxNzk0MSwgNDMyMSwgNDYyMSwgOTgzMzgxLCA0MTMxMywgNTIyLCA1MzY4LCAwLCA2NTgwMywgMCwgNTM2NiwgCi0gICAgMTIyMDEsIDUzNzIsIDAsIDk4MzQwMSwgMCwgNzcyMCwgNzM5MCwgMjY5NiwgOTgzMzkyLCAwLCA0NjM4LCA5ODMzOTcsIAotICAgIDE3OTAsIDc4MjQyLCA1OTY1LCA2NDM2MywgNjY1NjksIDY4NjQ2LCAxMjc4MzMsIDUzNzYsIDE4MzUsIDUzMzUsIDE5NDk2NiwgCi0gICAgMTI4MDg5LCA0NjMzLCAwLCA2ODExOSwgMTE4MCwgNDYzMiwgMTI4MDkzLCA1Mzg3LCA1MzMzLCAwLCAwLCA0MjA5NCwgCi0gICAgNTMzMSwgNDYzNCwgMTE5MjgsIDk4MzU5NCwgNTMzOCwgNDYzNywgMTI4MTcwLCA1OTcxLCA0MjQxNCwgMCwgMTI2OCwgCi0gICAgNjUwOTcsIDQyMzYxLCAwLCAwLCA3Mzg1MywgMTQyNywgMCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCA0NzU4LCAKLSAgICA5ODMzNjYsIDE2MDgsIDI3MzgsIDAsIDEwNDU1LCA0NzUzLCA3NDAyNiwgMTEzNDQsIDQyMjIsIDYyNDAsIDUyMzEsIAotICAgIDc0Mzg0LCA5ODMzNzAsIDY4Mzc3LCA2MjQ4LCA5ODMzNTQsIDk4MzM1NSwgOTgzMzUyLCA0MjMxOCwgOTI1ODIsIDUyMjksIAorICAgIDc4MTU4LCAxMjgwMzYsIDUyNzgsIDQ5NDUsIDQyODgzLCA0OTUwLCA5ODM0MzgsIDY4NjI1LCA5ODM0MzYsIDcyNjksIDAsIAorICAgIDU5NjQsIDEyOTA4LCA5ODM1NTUsIDAsIDc0NzY0LCA3NDQ3NywgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDk4MzQyOSwgNDQzLCAKKyAgICA5ODM0MjcsIDQ5NDQsIDU0NjcsIDExOTYwMywgOTgzMjU0LCA2NTEzNywgNjA0NCwgNjUzOTIsIDAsIDQyMTMsIDAsIAorICAgIDQxMzAzLCAwLCAxOTQ5MzEsIDExOTk2MiwgNDEzMDYsIDczOTg0LCAyNjk4LCAxMjcxNTksIDAsIDEyMDcyLCAzMTkzLCAwLCAKKyAgICA0MTMwNCwgODI0LCAxMjg2NzYsIDEyMDkxLCA3ODg5MywgNzg4OTQsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIAorICAgIDExOTgyMCwgMTE5ODE5LCA2NTA1OSwgMCwgNjczOSwgMCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCA2OTk0NywgCisgICAgMTE5ODMyLCA0Njc3LCAxMjY4OCwgMzEwMiwgMCwgNDY3MiwgNzgxNzMsIDc4MTc1LCA1NTMxLCA2ODM2NywgNDI1NzUsIAorICAgIDc4MTcwLCA3ODE2NiwgNDY3NCwgNDU0OCwgNDQwMDUsIDExOTk0OSwgNjg2NTgsIDExOTk0NiwgODAyNSwgNjg2MzAsIAorICAgIDEyNzAyNCwgMTg1NSwgOTgzNDEyLCA2ODY2OSwgOTgzNDEwLCA5MjQ0NSwgMTI3NTU0LCAwLCAxMjczMzksIDExOTY1MiwgCisgICAgMjc0NSwgMTE3OTcsIDk4MzQxOCwgMTI4MTU5LCA5MjAyLCA0NjU0LCA5ODM0MTQsIDk4MzQxNiwgNjg2MzgsIDczOTkzLCAKKyAgICAxMDUyNSwgNDY0OSwgNjUyMDksIDk4MzQxNywgMCwgNDY0OCwgNDMwODAsIDk4MzQwNiwgOTgzNDA3LCA5ODM0MDQsIDYyNDYsIAorICAgIDY0OTUwLCA3ODI4LCA0NjUwLCA2Nzc3LCA2Nzc2LCA2Nzc1LCA0NjUzLCA3ODIyLCA3ODAwNSwgOTIzODQsIDQzMTg3LCAKKyAgICA4NjY5LCA5ODM0MTUsIDY4MjEsIDY1MDkzLCAwLCA3ODg4MSwgMjcxNiwgMCwgOTgzMDYwLCA5ODM0MTksIDAsIDY4MzY5LCAKKyAgICAxMjAwNTQsIDExMDYwLCA4NTQ3LCAyNzExLCA0MjE2NSwgNzgwMjcsIDc4MDI2LCA3OTkyLCAwLCAwLCA0NjYyLCA3ODAzMywgCisgICAgNzgwMzIsIDkxNDksIDkxNDYsIDU5OSwgMjA4MSwgNzgwMzEsIDc4MDMwLCAxOTQ5NjIsIDQ2NTYsIDEwMTMwLCA2ODQ1MCwgCisgICAgNzgxMSwgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgNTcxMywgNTgxNCwgNDY2MSwgNDI0MzQsIAorICAgIDk4MzQxMSwgMCwgMCwgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgNDg2NywgMCwgMTAwMDgsIDEwMjIyLCAKKyAgICAzMDU0LCAxOTQ5NTYsIDk3NDQsIDc4ODYwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDk4MzM5NSwgOTQwNzAsIDk4MzM5MywgCisgICAgOTgzMzk0LCA5ODMzOTEsIDkwNDUsIDc4ODg4LCA0MjI1LCAxOTkyNiwgNzg4ODcsIDEyODgwLCA2NTMwNywgNDYxNywgCisgICAgNzg4ODMsIDk4MzM4NiwgNDE3MzIsIDQ2MTYsIDEwNTE4LCAxMDQyMywgMTAzNTksIDk4MzM4MCwgNTk1OCwgMCwgOTgzNDMzLCAKKyAgICA0MjE1LCA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIDk4MzM4OSwgNDEzMTMsIDUyMiwgNTM2OCwgMCwgNjU4MDMsIDAsIAorICAgIDUzNjYsIDEyMjAxLCA1MzcyLCAwLCA5ODM0MDksIDAsIDc3MjAsIDczOTAsIDI2OTYsIDk4MzQwMCwgMCwgNDYzOCwgCisgICAgOTgzNDA1LCAxNzkwLCA3ODI0MiwgNTk2NSwgNjQzNjMsIDY2NTY5LCA2ODY0NiwgMTI3ODMzLCA1Mzc2LCAxODM1LCA1MzM1LCAKKyAgICAxOTQ5NjYsIDEyODA4OSwgNDYzMywgMCwgNjgxMTksIDExODAsIDQ2MzIsIDEyODA5MywgNTM4NywgNTMzMywgMCwgMCwgCisgICAgNDIwOTQsIDUzMzEsIDQ2MzQsIDExOTI4LCA5ODM1OTQsIDUzMzgsIDQ2MzcsIDEyODE3MCwgNTk3MSwgNDI0MTQsIDAsIAorICAgIDEyNjgsIDY1MDk3LCA0MjM2MSwgMCwgMCwgNzM4NTMsIDE0MjcsIDAsIDAsIDU5NzAsIDM0MzEsIDAsIDEwMzU4LCAxMDQyMiwgCisgICAgNDc1OCwgOTgzMzc0LCAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCAKKyAgICA3NDM4NCwgOTgzMzc4LCA2ODM3NywgNjI0OCwgOTgzMzYyLCA5ODMzNjMsIDk4MzM2MCwgNDIzMTgsIDkyNTgyLCA1MjI5LCAKICAgICA0NzU3LCAwLCAwLCAyNzI4LCA0NzUyLCA2NDU2MywgNjUyMzUsIDUyMzQsIDAsIDEyODE0NSwgMCwgMTA3MTMsIDcxNjYsIDAsIAogICAgIDI2MjIsIDc0NjAsIDEyNzMwMiwgMCwgMCwgODk1NCwgNzQ3NjAsIDY1MTg5LCAyNjMyLCA0MjYxNywgMTAxMDgsIDEwMTEsIAogICAgIDU1NzQsIDE4NTMsIDI3MDksIDY1MTM5LCA1NTc3LCAwLCAwLCAxMTg4NzEsIDY4NjQxLCA4OTY1LCA3NjM1LCA0MjE3NywgCi0gICAgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDk4MzQxMiwgCi0gICAgOTgzODYzLCAxOTQ5MDcsIDQ0MDAzLCAwLCA5ODM0NzIsIDk4MzQxNSwgMTIwNDk4LCAxMjc4NTEsIDE5NTAwOSwgOTgzODU2LCAKLSAgICA3NDAyMiwgOTgzNDE0LCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgOTgzNDgxLCA1NzIxLCA5ODMzOTMsIDU1MTksIDg2MzIsIAotICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA5ODMzNDQsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAotICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDk4MzM0NywgNTI4NywgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIAotICAgIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgOTgzMzQxLCA5ODMzMzgsIDc3ODQ5LCA0NjA4LCA2NDI2MCwgCisgICAgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDk4MzQyMCwgCisgICAgOTgzODcyLCAxOTQ5MDcsIDQ0MDAzLCAwLCA5ODM0ODAsIDk4MzQyMywgMTIwNDk4LCAxMjc4NTEsIDE5NTAwOSwgOTgzODY1LCAKKyAgICA3NDAyMiwgOTgzNDIyLCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgOTgzNDg5LCA1NzIxLCA5ODM0MDEsIDU1MTksIDg2MzIsIAorICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA5ODMzNTIsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAorICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDk4MzM1NSwgNTI4NywgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIAorICAgIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgOTgzMzQ5LCA5ODMzNDYsIDc3ODQ5LCA0NjA4LCA2NDI2MCwgCiAgICAgNDExMjQsIDUxOTAsIDY3NjI4LCAwLCA2ODE0NSwgNzA4NiwgMCwgNjc5OTgsIDY3NjIwLCAwLCAyNzM0LCAxMTA3NCwgMCwgCiAgICAgNjc2MjcsIDQzNTkzLCAwLCA2NzYyNSwgNTk2MCwgMCwgODk5MiwgNDI1OTMsIDEyODI2MCwgMTc4MiwgNjc2MjIsIDY4MTE0LCAKICAgICAxMTk5MzksIDAsIDY4MTgwLCA1NTAxLCAxMTk5NTIsIDQyNTA4LCA3NDQyLCA0MzY2NSwgMzU5LCA0MTI1MywgNjgzOTIsIAogICAgIDYyMzksIDExOTk1NiwgNDEyNTYsIDAsIDY4MTM0LCAwLCA3NDIwOSwgOTE3NTUwLCA5MzQ2LCA2OTY2MCwgNDEyNTQsIAogICAgIDEyODA0NywgNDMyOTEsIDM3NjcsIDU3MzcsIDAsIDQ4NjUsIDAsIDU3NDAsIDkxNzk5NywgNTczNiwgNDM2OCwgNjQ3MjQsIAotICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDk4MzgzMSwgNDg2OSwgMTIwNTYzLCAwLCAKLSAgICA0MjIzLCAxMjgyMDEsIDY2NTAsIDEyNjUwOSwgMCwgOTgzNDU1LCAxMjc4OTAsIDQ4NzAsIDEyMDQ0NSwgNjg2NjEsIDY3MTYsIAorICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDk4Mzg0MCwgNDg2OSwgMTIwNTYzLCAwLCAKKyAgICA0MjIzLCAxMjgyMDEsIDY2NTAsIDEyNjUwOSwgMCwgOTgzNDYzLCAxMjc4OTAsIDQ4NzAsIDEyMDQ0NSwgNjg2NjEsIDY3MTYsIAogICAgIDc4MTc2LCA2ODY2NywgNjgzODIsIDY4Njc2LCAxMjc5MjUsIDEwMTIyLCA0ODY0LCA2NjU2OCwgNDE0NCwgNzkzNywgMCwgCiAgICAgNjI0NSwgNjg2NTIsIDI3MzIsIDQyNzM0LCA3NDUsIDAsIDE5NTA5NywgOTIxOTUsIDQ3NzcsIDc4MjEsIDAsIDY4NjMxLCAKLSAgICA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCA5ODM0NzgsIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCAKKyAgICA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCA5ODM0ODYsIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCAKICAgICA2NDQwNywgMCwgMTI4MzIzLCA4NTc3LCAxMjg1NjIsIDY4MTk2LCA0MzI4NSwgMTAyMTYsIDQ3ODIsIDAsIDAsIDEyMDc1NywgCiAgICAgNjg2MTgsIDEyMzI1LCA0MzA1NiwgODcxNywgMCwgMCwgNDc3NiwgNzM4MTgsIDExNDkyLCA4NzAwLCAwLCAxMzE3NiwgCiAgICAgNjgzNjMsIDEwNDI2LCAwLCA5MTc1OTksIDEwMzYyLCAxOTQ3MDYsIDE3MTUsIDQ4NDksIDgyNDIsIDk1NjEsIDczOTIyLCAKICAgICA0MzI3OCwgNDI2MzUsIDAsIDAsIDU5NjMsIDkxNzkyNiwgMCwgMCwgNDg1MCwgMCwgMTYwNywgNDY2LCA0ODUzLCAxMTg5OTUsIAotICAgIDQ4NTQsIDEyNzkxOCwgNTE2NCwgOTgzODYxLCAxMzUwLCA1MTI0LCA2NDQyMCwgMTk5MywgNTM2MiwgODQ3MSwgMjcwOCwgCisgICAgNDg1NCwgMTI3OTE4LCA1MTY0LCA5ODM4NzAsIDEzNTAsIDUxMjQsIDY0NDIwLCAxOTkzLCA1MzYyLCA4NDcxLCAyNzA4LCAKICAgICA5MjQ3MSwgMTI0NDUsIDM3ODUsIDIzNCwgMzE5OSwgMCwgNDEyNjgsIDQ4NDgsIDI1MzAsIDkxNzkwOSwgMjA2OCwgMTk2NCwgCiAgICAgMCwgNzM3NjIsIDEwNDU4LCAwLCA4NTc2LCA3ODU0MywgMCwgMjcwNCwgNDc5NCwgMCwgNjgyMTEsIDgzMjIsIDQ3OTcsIAotICAgIDU3NTMsIDAsIDI2OTQsIDQ3OTIsIDAsIDI0MzksIDY1MTA0LCA2OTgwNCwgOTgzNDE2LCAzMDMsIDk4MzEwMSwgOTI2MjIsIAotICAgIDk4MzQxNywgMjQzNywgMCwgNDIyMSwgNDg0NCwgOTIyMTYsIDAsIDAsIDAsIDcwMDQyLCAwLCA0MzI5MiwgMCwgMjQ0MSwgCisgICAgNTc1MywgMCwgMjY5NCwgNDc5MiwgMCwgMjQzOSwgNjUxMDQsIDY5ODA0LCA5ODM0MjQsIDMwMywgOTgzMTAxLCA5MjYyMiwgCisgICAgOTgzNDI1LCAyNDM3LCAwLCA0MjIxLCA0ODQ0LCA5MjIxNiwgMCwgMCwgMCwgNzAwNDIsIDAsIDQzMjkyLCAwLCAyNDQxLCAKICAgICAxMDczOSwgNjUwOTAsIDAsIDExOTMyNywgMTI2NTQxLCAyNDUxLCAyNzE0LCAxMTkzMjYsIDAsIDQzMzc5LCA0OTM3LCAKICAgICA0MzM3NiwgNzUzLCA1ODQ5LCAxMDU5NywgNDMwODksIDExNzIyLCA5MjQ4LCA5MjU1NSwgNDI4NzksIDExNzI1LCAwLCAwLCAKICAgICAyNzI2LCAzMTA3LCA3Mzk1OCwgNDk0MSwgNjQ5MzcsIDExOTIzMywgOTE0MCwgMTQwOCwgNTI2MSwgNDYwNywgMCwgMTgxLCAKLSAgICA5ODM0MjIsIDQ5NDIsIDk1MzksIDQ5MzgsIDAsIDY1MjAxLCA1MjU5LCA5MzY5LCA2NDE4NSwgNDE0MiwgNTI1NywgCisgICAgOTgzNDMwLCA0OTQyLCA5NTM5LCA0OTM4LCAwLCA2NTIwMSwgNTI1OSwgOTM2OSwgNjQxODUsIDQxNDIsIDUyNTcsIAogICAgIDk4MzYwMSwgMCwgNDk2NCwgNTI2NCwgNjQxNzgsIDY0MTc3LCAxMjk3OSwgNDE0MTEsIDY0MTgyLCA2NDE4MSwgNjQxODAsIAogICAgIDY0MTc5LCA5NDgyLCA0ODczLCA0MTIzMSwgMTgyMiwgNDI1MjYsIDEyODU4MSwgMTI3NTgsIDM4NjUsIDAsIDAsIDEwNTAwLCAKICAgICAwLCAxMTkwMjQsIDc4MDI4LCA5MjQwOCwgOTgzMCwgNDM2NDIsIDM4OSwgMTA4OTMsIDc1MjEsIDEyNzg3OSwgNDg3MiwgCiAgICAgNTQ2MywgMCwgMzEyNSwgOTU2NywgMCwgNDg3OCwgNTQ1OSwgNDYwNCwgOTE3OTMxLCA5NTU3LCA1NDY1LCA2ODYxNywgMCwgCi0gICAgMTE0OTQsIDEyNjQ5MiwgOTU2MywgMTA4NjUsIDc0NTcwLCA0MzI3OSwgNjQxODYsIDk4MzQzMSwgNzg3MTQsIDY0MTkxLCAKKyAgICAxMTQ5NCwgMTI2NDkyLCA5NTYzLCAxMDg2NSwgNzQ1NzAsIDQzMjc5LCA2NDE4NiwgOTgzNDM5LCA3ODcxNCwgNjQxOTEsIAogICAgIDY0MTkwLCA4ODk4LCA2NDE4OCwgMCwgNDEwMzAsIDc4ODM2LCAwLCA5MTc4MzUsIDc4ODIwLCA5MTc4MzQsIDAsIDc4ODA1LCAKLSAgICA0MTAzMSwgNzg4MDEsIDExOTYwLCA2NzQ1LCAzMDgyLCA5ODM0MjksIDc4NTM5LCA3MzkxOSwgMTA1NzMsIDQxNzQ0LCAKKyAgICA0MTAzMSwgNzg4MDEsIDExOTYwLCA2NzQ1LCAzMDgyLCA5ODM0MzcsIDc4NTM5LCA3MzkxOSwgMTA1NzMsIDQxNzQ0LCAKICAgICA3MDc5LCA1ODU2LCAxMjcwNDMsIDUxNjMsIDc4ODA5LCAxMjgxNjIsIDE4MTcsIDY2NzI0LCA3ODUzOCwgMCwgMTA1NjQsIAogICAgIDc3NjMsIDEzMDc3LCA0MTgxMywgNDQwMCwgNDE3NDUsIDY0MjA3LCAxMDI3NSwgODkyNSwgMTAzNzEsIDEwMzA3LCA0MTgxNCwgCiAgICAgNDI0OCwgMCwgMCwgNDU0MSwgNjI5OSwgNjQyMDQsIDY0MjAzLCA2NDIwMSwgNjQyMDAsIDY0MTk5LCA2NDE5OCwgMTI2NDcxLCAKQEAgLTE5NDg1LDMzICsxOTUwNSwzMyBAQAogICAgIDY1MjIyLCA2OTk4LCA3ODE4MCwgMCwgMzEyOCwgNDc4OSwgNTA2NywgNTA2NiwgMTE4ODQ5LCA0Nzg0LCAwLCA4ODI3LCAKICAgICAxMTQ2LCA1MDY1LCA2OTg5MCwgNzgxOTIsIDY4MTM2LCA3ODE5MCwgNDM0MTIsIDUwNjQsIDI0MzEsIDAsIDk0NTAsIDE4MDksIAogICAgIDAsIDc4MjAwLCA3ODIwMSwgNTA2MiwgMTI2NCwgNjQ4MTcsIDEzMjU0LCAxMTY5NywgMTI2NTk4LCA5Nzg1LCA2NDcxNiwgMCwgCi0gICAgMzkzMywgNzQ1NTksIDQ3NDAsIDc5NTQsIDAsIDAsIDQyNjA5LCAwLCA3NDE3NSwgMCwgMTI3MDE2LCAwLCA5ODM4NjQsIAorICAgIDM5MzMsIDc0NTU5LCA0NzQwLCA3OTU0LCAwLCAwLCA0MjYwOSwgMCwgNzQxNzUsIDAsIDEyNzAxNiwgMCwgOTgzODczLCAKICAgICA0MjEzMCwgMCwgNTE1MSwgOTE3ODI5LCA5MTc4MjMsIDAsIDkzOTgwLCAwLCA3NjIwLCAzODAwLCA2NTEyMiwgMCwgMCwgCiAgICAgODM1NSwgNzg1NCwgMCwgOTU0LCA2NDkyNywgNDE4NSwgNDEwNDUsIDEyNzE0MSwgNDE0MzgsIDQxNDM5LCA2ODY2NiwgCi0gICAgMTA3MTEsIDQ1OTMsIDEyNzc0NSwgMTIwNTg0LCA5ODM0MDAsIDY0Nzc0LCA4MDUzLCAxMDUzMiwgNjY3MjcsIDAsIDAsIDAsIAorICAgIDEwNzExLCA0NTkzLCAxMjc3NDUsIDEyMDU4NCwgOTgzNDA4LCA2NDc3NCwgODA1MywgMTA1MzIsIDY2NzI3LCAwLCAwLCAwLCAKICAgICA2NDc1OSwgNjM4MSwgNTE2NiwgOTg4OCwgMTI3ODAwLCA1MTQ4LCA0MjgzNCwgMCwgNzgyMDUsIDc4MjA2LCA0Mzc4NywgCiAgICAgNzgyMDQsIDY0MTMxLCAzMTE5LCA5MTc4MTQsIDAsIDMwNjAsIDY0MTM1LCA5OTg2LCAwLCA3Nzg3NiwgNjM2LCAxMTY5OCwgCi0gICAgMCwgOTgzNDQzLCA5OTE2LCAxMTcwMSwgNzgzNiwgNDI3NDEsIDY0MTM3LCA4MzIwLCA3ODY0MCwgODg2MywgOTI0MzEsIAotICAgIDExOTk2MCwgMTQ3NywgNDMyODksIDAsIDc0MzU4LCA4NjE4LCA5ODMzOTQsIDk5MDgsIDk4Mzk3MiwgMCwgMCwgMzkzNywgCi0gICAgMTIzMTIsIDAsIDk4MzM5NSwgMCwgNjQ3ODEsIDkxMiwgNjM0OSwgNDUzNiwgOTM5NTQsIDc0NTMyLCAxMjY1OTQsIDYyNDQsIAotICAgIDkyMjA5LCA3MTM0MSwgMzkzNSwgMTIwNjY1LCA5ODM0NjgsIDAsIDExOTUwLCA1MzkyLCA0MjI0OCwgNjUxMjksIDY4NjU2LCAKKyAgICAwLCA5ODM0NTEsIDk5MTYsIDExNzAxLCA3ODM2LCA0Mjc0MSwgNjQxMzcsIDgzMjAsIDc4NjQwLCA4ODYzLCA5MjQzMSwgCisgICAgMTE5OTYwLCAxNDc3LCA0MzI4OSwgMCwgNzQzNTgsIDg2MTgsIDk4MzQwMiwgOTkwOCwgOTgzOTgxLCAwLCAwLCAzOTM3LCAKKyAgICAxMjMxMiwgMCwgOTgzNDAzLCAwLCA2NDc4MSwgOTEyLCA2MzQ5LCA0NTM2LCA5Mzk1NCwgNzQ1MzIsIDEyNjU5NCwgNjI0NCwgCisgICAgOTIyMDksIDcxMzQxLCAzOTM1LCAxMjA2NjUsIDk4MzQ3NiwgMCwgMTE5NTAsIDUzOTIsIDQyMjQ4LCA2NTEyOSwgNjg2NTYsIAogICAgIDUzOTcsIDAsIDEyMDQ2LCAxMjU5OSwgMCwgMTI4MjYxLCA1Mzk1LCAwLCA1MzkzLCAzNTQsIDY4NjE1LCAxMTk5NDgsIAogICAgIDc4NTAzLCAwLCAwLCA0MjAzOSwgMCwgMCwgNjQxNDIsIDYyNiwgMCwgNTg5NSwgMCwgMCwgNTc4MCwgMCwgMCwgMTI4ODc0LCAKICAgICAwLCAwLCA0MzI5NywgOTgzMDc5LCA0MzExLCA0NjQ0LCA4ODE4LCAwLCAxMjgxODYsIDAsIDcxNDUsIDM5MTgsIDY2NDUyLCAKICAgICAzNzk3LCAxNjQ0LCA5MjM0NiwgOTY1OCwgNDE0MCwgMTEzODUsIDY1OTQ3LCA2NDU1LCA5MDMwLCA4MTMsIDExOTk0NSwgCiAgICAgNjgxMzEsIDQxNDYsIDExOTk1NywgNTM2MCwgMjQ2NiwgMCwgNjc2NjksIDExOTk0MiwgNjI0OSwgNDIxMTcsIDkyMjg3LCAKLSAgICAxMjgyMjQsIDAsIDAsIDc0MDQ2LCA0Mzc0NSwgNDkxMSwgOTg4LCA5MTc4MDcsIDAsIDk4MzQ2MCwgNDMwNjEsIDcwNTQsIAorICAgIDEyODIyNCwgMCwgMCwgNzQwNDYsIDQzNzQ1LCA0OTExLCA5ODgsIDkxNzgwNywgMCwgOTgzNDY4LCA0MzA2MSwgNzA1NCwgCiAgICAgNjQxNDcsIDAsIDY0OTIwLCA2ODE5NSwgNjY5OCwgMTE4OTMzLCA5MjUwNiwgMCwgMTIwMDA2LCAxMTk4MSwgMTIyMDIsIDAsIAogICAgIDExMDMyLCA2NzY1NCwgNjA5MywgMTE2MDgsIDk3NSwgNjg2NjIsIDY1ODQzLCAxNzAsIDAsIDAsIDQxNjksIDAsIDQxODU5LCAKICAgICA2MDU4LCAxMjA0MDEsIDEzMjAzLCAxMjA2NTcsIDAsIDAsIDY4NjU3LCA5ODE4LCAxMDE3OCwgMTAzMjQsIDQyMTA2LCAKICAgICA1ODk4LCA3NDU0MCwgNDczOCwgNDE4NTYsIDcwNjIsIDkxNzg2NSwgNDczNywgMTE3NzksIDQ3NDIsIDEyMDU2NCwgOTIzOTEsIAotICAgIDczNzM2LCA5ODMzNTYsIDk4MjUsIDY0NDgsIDY3MTUsIDEyNzAwOCwgNDgzMSwgMCwgOTI1MjUsIDAsIDUzMDAsIDQ3NDEsIAotICAgIDQyMTA4LCA5ODMzNDYsIDY0MTU5LCA0NzM2LCA2NDE0OCwgMCwgODQ5LCA5MjE5MSwgNzg0OTEsIDQzMjg4LCAwLCA2NjYyMCwgCi0gICAgOTE3OTE2LCAxMjczMzEsIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMTE4ODY2LCA5ODMzNTgsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIAorICAgIDczNzM2LCA5ODMzNjQsIDk4MjUsIDY0NDgsIDY3MTUsIDEyNzAwOCwgNDgzMSwgMCwgOTI1MjUsIDAsIDUzMDAsIDQ3NDEsIAorICAgIDQyMTA4LCA5ODMzNTQsIDY0MTU5LCA0NzM2LCA2NDE0OCwgMCwgODQ5LCA5MjE5MSwgNzg0OTEsIDQzMjg4LCAwLCA2NjYyMCwgCisgICAgOTE3OTE2LCAxMjczMzEsIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMTE4ODY2LCA5ODMzNjYsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIAogICAgIDM5MjgsIDkxNzg3MCwgNDMzNzgsIDEwNzA2LCA3MTk4LCAwLCA0ODQyLCAxMjA1MywgMTI4MTI5LCAwLCA0ODQxLCAwLCAKICAgICA0MTcxLCAxMjAwOCwgNjI1MSwgMzkyMywgMTQ5MCwgMCwgMTE5NTkxLCAxMjY1MTIsIDQwOTcyLCA1MjQ1LCAwLCAxMDExNCwgCiAgICAgNDIwMDEsIDQxODg4LCA0ODQ1LCA4MzMyLCA0MDk3NCwgNjQzNDcsIDQ4NDAsIDkwNzcsIDc4MzQ2LCAxNzQ3LCA5MTc4NDksIAotICAgIDQ4MjUsIDY5MjQwLCA5MTc4NTIsIDY4NjU1LCAwLCA5ODMzODAsIDAsIDAsIDY4NjI4LCA5ODMzMzksIDk4NTAsIDExODkzNywgCisgICAgNDgyNSwgNjkyNDAsIDkxNzg1MiwgNjg2NTUsIDAsIDk4MzM4OCwgMCwgMCwgNjg2MjgsIDk4MzM0NywgOTg1MCwgMTE4OTM3LCAKICAgICAzNjcsIDE0NzIsIDkxNzg1OSwgNjY4NywgMTI3NCwgMCwgNTkwNSwgMTIzMzksIDg5MTksIDczOTUzLCAxMDkwNywgNjUyNjEsIAogICAgIDExMDIzLCAxMTk1NTksIDQ4MzAsIDkxMzQsIDc4NjY2LCA2NDEyNiwgNDMwMTEsIDAsIDEyNjYyNiwgNjQxMDEsIDAsIDAsIAogICAgIDQ4MjQsIDEwNjE0LCAxMTk2NTksIDAsIDE4ODgsIDE5NjAsIDc4NjEsIDkxNzg1NiwgNzg1MjQsIDQxODM2LCA0MzAxMiwgCkBAIC0xOTUyMCwxMiArMTk1NDAsMTIgQEAKICAgICA2NDExOCwgMTI2OTk4LCAxMjk2MiwgMCwgMTI2NTgwLCA0MDE3LCAxMjgyNywgNTI0MSwgMTIwMzkyLCAwLCA0MTExOCwgCiAgICAgMzkyNCwgMCwgMTEzNjYsIDkxNzg0MywgMCwgMCwgOTE3ODQ2LCA0MTExNiwgOTE3ODQ0LCA5MTc1NjQsIDAsIDExMzYzLCAKICAgICAxMjA1NywgMTE5MTcsIDE1NjcsIDc0MDAwLCA0NzIxLCAxMjY2NDEsIDY2MjAyLCA4OTU3LCA0MTM5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjc0MCwgMTI4NzAyLCA0NzIyLCA2ODE2LCAxMjc3OTMsIDEyNzU5LCA0NzI1LCA5ODMzNzUsIDQ3MjYsIDAsIAotICAgIDE5NDg5MiwgMCwgMTI4MzIxLCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgNDc2LCAwLCAwLCAKLSAgICAxMjgyOTQsIDY0MjEyLCA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA0NDAwMiwgNjQyMTQsIDE2NTYsIDQxODMxLCAwLCAKLSAgICAwLCA0MTg0MywgODcyMCwgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAxMjczMjgsIDg1NTIsIDY0MTEzLCA0MTg0NSwgCi0gICAgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDAsIDAsIAotICAgIDc5MzUsIDI0MjAsIDAsIDExMTQsIDkyNTk5LCA2NzU4NSwgNzAxMDQsIDEyMDA1MywgOTIzNTAsIDEyMDA1MSwgMzkzOCwgCisgICAgMCwgMTI3NDAsIDEyODcwMiwgNDcyMiwgNjgxNiwgMTI3NzkzLCAxMjc1OSwgNDcyNSwgOTgzMzgzLCA0NzI2LCAwLCAKKyAgICAxOTQ4OTIsIDk4MzYyMiwgMTI4MzIxLCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgNDc2LCAwLCAKKyAgICAwLCAxMjgyOTQsIDY0MjEyLCA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA0NDAwMiwgNjQyMTQsIDE2NTYsIDQxODMxLCAKKyAgICAwLCAwLCA0MTg0MywgODcyMCwgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAxMjczMjgsIDg1NTIsIDY0MTEzLCAKKyAgICA0MTg0NSwgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDAsIAorICAgIDAsIDc5MzUsIDI0MjAsIDAsIDExMTQsIDkyNTk5LCA2NzU4NSwgNzAxMDQsIDEyMDA1MywgOTIzNTAsIDEyMDA1MSwgMzkzOCwgCiAgICAgMTIwMDU3LCA2NTQxNywgNjQ3MTcsIDEyMDA2MCwgMTIwMDYxLCA2NTQxNSwgMTIwMDU5LCA2MjkyLCA2NTMwMywgNzk1NSwgCiAgICAgNjQ1MiwgNDcxMywgMTI4MTk2LCA2NjI0OSwgOTE3ODg1LCA5MTc4OTAsIDkxNzg5MSwgNjUxNTIsIDcxOSwgMTIwMDQ0LCAKICAgICA3ODYyMywgMTIwMDQyLCA2NzEzLCA0NTMyLCA2NTQxMiwgNjk4MjIsIDEwODY4LCA0NzE3LCAyMzQ5LCA1OTAyLCA2NjQ1MCwgCkBAIC0xOTUzNywyNiArMTk1NTcsMjYgQEAKICAgICA0ODE0LCAwLCA0ODEwLCAwLCAwLCA2NDkyOCwgMTA1NDMsIDAsIDM1MjIsIDcxMzM1LCA0MTQsIDY1NDA0LCAwLCAxOTUwMjcsIAogICAgIDY0NTYsIDczODIwLCAwLCA2NjkxLCA0MjE5MywgOTIyMjUsIDEyODE3MSwgMCwgNzQ0OTUsIDAsIDAsIDAsIDExODgyMCwgCiAgICAgOTc1MSwgNjU0MDcsIDEyODA4NSwgMTE3NzAsIDM5MTksIDAsIDAsIDY1MDYxLCAwLCAwLCAwLCAxMjIzNSwgMCwgMCwgCi0gICAgMTI3MjMzLCA2NDA5MiwgOTgzNDYyLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDY5OTEzLCAxMDE2MiwgMTAzMTAsIDAsIDg0NTQsIAorICAgIDEyNzIzMywgNjQwOTIsIDk4MzQ3MCwgNjQwODAsIDAsIDY0MDkwLCAwLCA2OTkxMywgMTAxNjIsIDEwMzEwLCAwLCA4NDU0LCAKICAgICAxMjc4ODgsIDQyMDM4LCAzODcsIDQxMzYzLCAxMjczNywgMCwgNDc4MCwgNDMzNjgsIDAsIDY0MzEwLCA2NDYyMSwgNjczMiwgCi0gICAgNzgxMTYsIDAsIDk4MzEzOSwgMCwgOTgzMDc0LCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDk4Mzg2NSwgCi0gICAgMCwgOTgzNDI2LCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIAotICAgIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgNjk2OTIsIDk4MzQyNCwgNjk2OTgsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgCisgICAgNzgxMTYsIDAsIDk4MzEzOSwgMCwgOTgzMDc0LCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDk4Mzg3NCwgCisgICAgMCwgOTgzNDM0LCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIAorICAgIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgNjk2OTIsIDk4MzQzMiwgNjk2OTgsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgCiAgICAgMjI5MSwgMTI5MDIsIDAsIDQyODkxLCA2NjMyNywgNzQyOTgsIDkxNzg1NywgMTA3OTksIDY5NjkwLCAyNTg3LCA2NjM3MiwgCiAgICAgMCwgNDE5MywgOTIyNTAsIDQyNDEsIDk4MzA1NywgNzk5OCwgMCwgMCwgMCwgMTI2NjQwLCAyMzE2LCAxMTg4MjEsIDAsIDAsIAotICAgIDAsIDY0Mjk3LCA3NDc5OSwgOTI0NDIsIDc0MTQwLCAwLCA1MzczLCAwLCA5ODM4NzcsIDM3NjIsIDEwMDE1LCAxMjA2NzIsIAorICAgIDAsIDY0Mjk3LCA3NDc5OSwgOTI0NDIsIDc0MTQwLCAwLCA1MzczLCAwLCA5ODM4ODYsIDM3NjIsIDEwMDE1LCAxMjA2NzIsIAogICAgIDExOTIzMiwgMCwgNDE1OTAsIDAsIDcwMDk4LCAzNzgwLCA3NDg1LCA1Nzc5LCAwLCA0MjAzNywgMCwgMzkwNiwgMTIzNDksIAogICAgIDAsIDgzMjYsIDAsIDY1NDk4LCAzNzYzLCA2OTgzLCA1NjE4LCAwLCAzNzc5LCAwLCA0MzYxMywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMjgwLCA3NDU1OCwgMTI3MzMyLCA2ODEzOCwgMTMwNzIsIDE4OTQsIDAsIDAsIDY1NDc4LCA0MzMxMCwgNzIzMSwgMCwgCi0gICAgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIDY0NTMsIDEwMjAwLCA2MjM1LCA5ODM3NDMsIDExOTIzNywgMCwgMTI4ODA1LCAKKyAgICAxMTc3MywgMCwgMCwgMCwgMCwgMjU1MSwgMCwgNjQ1MywgMTAyMDAsIDYyMzUsIDk4Mzc1MiwgMTE5MjM3LCAwLCAxMjg4MDUsIAogICAgIDQ0NzAsIDExODI2LCA5MTc1NTcsIDc3ODAsIDUzNjksIDExODk1OCwgNTI0OSwgMCwgNTM2NywgODc1NiwgMTI3MTQzLCAwLCAKLSAgICA1Mzc3LCAxMjA1ODUsIDY4MTQzLCAxNjg4LCA3ODI0NSwgOTgzMzQ4LCA2OTY4NSwgOTgzNzQ3LCAwLCAwLCA0NDAyMCwgCisgICAgNTM3NywgMTIwNTg1LCA2ODE0MywgMTY4OCwgNzgyNDUsIDk4MzM1NiwgNjk2ODUsIDk4Mzc1NiwgMCwgMCwgNDQwMjAsIAogICAgIDY4MDgsIDQxMzE5LCAxMzAwLCAxMDY1MCwgNDE2OTIsIDY0NTA1LCAyMjkwLCAwLCAxMTk2MjQsIDE0NjUsIDEwODUwLCAKICAgICAzOTQzLCAwLCA0MTIwNSwgNDEzMTUsIDExODk2MSwgMCwgMCwgNTM1MiwgMCwgMCwgODgzOSwgNDEzMTQsIDczODQsIDc3ODUsIAogICAgIDQxMjA0LCAxMjczMjIsIDQxMjA5LCA2OTYzNywgOTIyNDEsIDQzNjA3LCAwLCAwLCA1NDIwLCAzODk3LCAxMDEzNCwgMCwgCiAgICAgNzQ0MTcsIDQwMTgsIDcxNTAsIDY4MTI3LCAwLCAwLCAwLCAwLCAxMjc1MjYsIDI1NjEsIDY4NjIxLCAzNTQyLCA3MTQ4LCAKICAgICAxMjA3NiwgNzk1MSwgNjgxNTIsIDExODg1NywgNTMwMywgNjI3NiwgMTcwNiwgMCwgNzg3NTEsIDcxNDYsIDAsIDY1MTUwLCAKLSAgICA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgOTgzNDI3LCA2OTY0MSwgMTA3NTMsIAorICAgIDQxODE5LCAwLCA3Mzk1MSwgMTA4NDcsIDQxODIyLCA5OTg1LCA4NjAsIDAsIDEwNTA2LCA5ODM0MzUsIDY5NjQxLCAxMDc1MywgCiAgICAgMTA4MzAsIDAsIDYxNSwgNjQ0OTAsIDc1NzQsIDkyNjE3LCA3NzkyMiwgMCwgMTI5MDksIDQzMDE2LCA2NDU1OSwgMTI3MDI4LCAKICAgICAwLCAwLCA2Nzk5NiwgMjAyMCwgMCwgNDAyMiwgMTI4NzgzLCAwLCA3NzkyMywgMTI2NTkzLCA0MTY5MSwgMCwgMCwgNzQzMjksIAogICAgIDAsIDY0NjIyLCA5MDcwLCAwLCA2ODQxMSwgMzkxMSwgNDI4MjksIDQzMTIyLCAxMDMzLCA3NDQ0MCwgMCwgNzAwMCwgMzkwNCwgCkBAIC0xOTU3MSw3ICsxOTU5MSw3IEBACiAgICAgNjg2NzUsIDEyODA1NCwgMTUxMSwgOTMyNCwgNzgyMTEsIDEwNTE5LCA2NjMzMSwgMzQ1NCwgMTk5MzAsIDAsIDQxMDE5LCAwLCAKICAgICAwLCA2NTI5MiwgNjgyMiwgMTI4NjIsIDAsIDAsIDQyMTQzLCA0MTgyOCwgNzgyMDcsIDY1NTMxLCA3ODIwOCwgMTE4ODc5LCAKICAgICA1NTIyMywgMCwgMTI4MDcxLCA0MTgyNiwgODg2NSwgNjQwMiwgMCwgMTMyNzksIDc5MTcsIDc0NzU1LCAwLCA3NzMzLCAwLCAKLSAgICA0OTk4LCA5ODM4ODcsIDkyMzMyLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgNzAwNjEsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAKKyAgICA0OTk4LCA5ODM4OTYsIDkyMzMyLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgNzAwNjEsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAKICAgICAwLCA3NDc4OCwgMjAxNCwgMCwgMCwgOTc2NSwgMCwgMCwgMCwgMTk1MDU5LCA3ODM1NywgNjUyODEsIDEyNzgyNSwgMTA5NDksIAogICAgIDAsIDAsIDAsIDIwMTUsIDAsIDAsIDAsIDY2MzE4LCA0MzIzMywgMCwgNDI1MTcsIDAsIDAsIDAsIDEyNjk4LCA4MDk0LCAKICAgICAxMDEzNSwgNjU5MDksIDY0NzQsIDc5NCwgMCwgMTI2NTYsIDEyODEyMiwgMTE5MzUzLCAxMjgyNzAsIDE2NjUsIDAsIDQ4MzMsIApAQCAtMTk1OTAsOSArMTk2MTAsOSBAQAogICAgIDk0MjUsIDk0MjYsIDk0MjcsIDk0MjgsIDk0MjksIDY0NzU4LCAyMzYyLCA5NjU1LCAwLCAyMDA0LCA5MDk2LCA5NzgyLCAKICAgICAxMjg4NDgsIDkxNzIsIDEyODU0NSwgMTk5NjUsIDAsIDU5NTUsIDY3NjY2LCAxMTA4LCAwLCA3NDc3MywgMCwgMCwgNjQ3ODIsIAogICAgIDM5MjYsIDkyNDQ4LCA2NTIxMCwgODc5OCwgMCwgOTIxNjUsIDEzOTIsIDAsIDAsIDEyNzM2NCwgMTA2MDYsIDgwNjUsIAotICAgIDExODgwNSwgMTAzNTMsIDEwNDE3LCAwLCAwLCA2NDUyNCwgOTI0MTgsIDQwMTksIDAsIDk4MzI4MCwgNDMyODAsIDgyMTksIAotICAgIDY4NDAyLCAxODEyLCAxMTk5NjMsIDk4MzY4MywgMCwgMTI2NDg4LCA0MjQxMCwgNzQ0NDgsIDExOTEzMiwgNjA1NCwgCi0gICAgMTA2OTcsIDMxNjksIDQyMjk3LCA0MjMyMiwgMTA2NDIsIDM5MDksIDk5NTAsIDAsIDEyODEzOSwgOTgzMjUzLCA2ODY3OCwgCisgICAgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCA5MjQxOCwgNDAxOSwgMCwgOTgzMjg4LCA0MzI4MCwgODIxOSwgCisgICAgNjg0MDIsIDE4MTIsIDExOTk2MywgOTgzNjkyLCAwLCAxMjY0ODgsIDQyNDEwLCA3NDQ0OCwgMTE5MTMyLCA2MDU0LCAKKyAgICAxMDY5NywgMzE2OSwgNDIyOTcsIDQyMzIyLCAxMDY0MiwgMzkwOSwgOTk1MCwgMCwgMTI4MTM5LCA5ODMyNjEsIDY4Njc4LCAKICAgICAwLCAwLCAxMDQ5LCAwLCA2NTcwNywgMjMwNCwgNDE4MDYsIDkyMzI2LCA0MjMzNiwgMzkyMSwgMCwgMTE3NzUsIDY0NzYwLCAKICAgICAxMTc2NiwgMTAzOCwgNDIzMDMsIDk4MjMsIDEyNzI3OCwgNjkyMzYsIDQwMDgsIDY0MDA0LCA4NzczLCAxMDczMywgMzYsIDAsIAogICAgIDUxNTMsIDQxODA1LCAwLCA3MzczNSwgNzYzLCA0MTgwOCwgNjQ5MTAsIDk4MzEzMCwgMjAwOSwgMCwgMCwgMTI3MTQyLCAKQEAgLTE5NjA3LDcgKzE5NjI3LDcgQEAKICAgICA3ODAwMiwgMCwgNzUxMywgMTg2MywgNDcxMCwgMCwgNTk1NiwgNzYyMSwgNzgwMDYsIDkyNjI0LCA0NzA1LCA3MTYsIAogICAgIDc4MDA0LCAwLCA0NzA0LCAxMjAwNDAsIDEyMDI3MCwgNDIyNDEsIDE2MSwgNDM5NzcsIDc0NTQ2LCA2NjIxNCwgNDcwNiwgMCwgCiAgICAgNjk5MTQsIDQyNjcyLCA0NzA5LCAxMDY4MCwgMTE5MDY1LCA0MzI5MywgMTE5OTQ0LCAwLCAxMTkxNjQsIDEyMDMyOCwgCi0gICAgOTI0NjcsIDEwMTg3LCAxNzAwLCAxMTkyMjMsIDAsIDAsIDEyODExOSwgNDAwNCwgMCwgMTA5NjgsIDQzMjk2LCA5ODM2MzMsIAorICAgIDkyNDY3LCAxMDE4NywgMTcwMCwgMTE5MjIzLCAwLCAwLCAxMjgxMTksIDQwMDQsIDAsIDEwOTY4LCA0MzI5NiwgOTgzNjQyLCAKICAgICA4NTA2LCAwLCAwLCAxMjY5OTYsIDEwMDUsIDkzNywgNzgyMTYsIDQ3MzQsIDI4NzAsIDAsIDc4MjE4LCA5ODMxMDksIDc0NjMsIAogICAgIDQ3MjksIDAsIDIzNSwgMTM4NCwgNDcyOCwgMCwgMTIwNDIwLCA5MjQ5MCwgNzQ0NDksIDgxMDksIDQzMTA1LCA5ODMxNzQsIAogICAgIDQ3MzAsIDQ0NywgMTMxODYsIDE1MTMsIDQ3MzMsIDEyMDQxNSwgMCwgMCwgNDI1MjcsIDEyOTExLCA0MzQyNywgMTM4MywgCkBAIC0xOTYxOCw3ICsxOTYzOCw3IEBACiAgICAgMTI3NjksIDY1OTA1LCA0MTY5NywgMTI4MywgMTIwMzAyLCA0Nzc5LCAwLCAzNzE5LCA0MDA2LCA5ODM1NjksIDE5OTU3LCAKICAgICAxMjg3NzMsIDIwMjEsIDExOTMzMiwgMTIwNjk5LCAxMTkxNTAsIDQzMDI4LCA2NTQ5MywgNDE4MzgsIDM4NzUsIDU5NjIsIAogICAgIDY0MzQxLCA5MjYxNiwgOTgxNCwgNDM0NTcsIDU4MjcsIDMzMTQsIDc3ODcsIDc4MjM0LCA2NTQ5NCwgNjgxNTMsIDAsIDAsIAotICAgIDEyMDYzNiwgNjQ1MzEsIDEyMDY5MiwgMTk0NjI2LCAwLCAwLCA2NjMxNiwgNjU0NjcsIDU3NzEsIDQxMjk4LCA5ODM3ODUsIAorICAgIDEyMDYzNiwgNjQ1MzEsIDEyMDY5MiwgMTk0NjI2LCAwLCAwLCA2NjMxNiwgNjU0NjcsIDU3NzEsIDQxMjk4LCA5ODM3OTQsIAogICAgIDk3NDIsIDUyMSwgMCwgMTA4MDAsIDkyMjIyLCA4NDA0LCAxOTQ2MjUsIDQ4MywgNzA5NiwgNzA4OSwgNjYzMjMsIDkyOCwgMCwgCiAgICAgMCwgMTE5MDE4LCAxMDU5OSwgMTE1ODYsIDM5ODksIDEwOTcxLCA0Mzc0OCwgNjU3ODIsIDk4NDEsIDg4NDMsIDEyMTQ1LCAKICAgICA5MjQ3MCwgMTAwNzQsIDc4NTQ4LCAwLCAzNzY5LCAwLCAwLCAwLCA5ODMxMDcsIDk1NzMsIDAsIDY1MjkwLCA4ODQ5LCAwLCAKQEAgLTE5NjI2LDE3ICsxOTY0NiwxNyBAQAogICAgIDczODM4LCA3ODU1MywgNTgyNSwgMTMwMDcsIDY4MTY1LCAwLCAxMjA0NTcsIDEyNjYxLCA3NjA4LCAxMDM1NCwgMTA0MTgsIAogICAgIDQyNDExLCAyMDIyLCAwLCAxNDA5LCAxMjE5NSwgNDAwMSwgMzExMiwgMTA4MjQsIDEyMDYzOSwgMTM5MCwgMCwgMCwgNDIxLCAKICAgICA0MzUzNiwgNTg0NiwgMTIwMTIwLCA0MTMwLCAxMjc3NzUsIDc1OTUsIDQyNTg4LCA3NjAwLCAxMjAxMjEsIDY2MDM1LCAKLSAgICA5ODM5MDQsIDAsIDY1ODUxLCA0MjYwNywgMTI4MTkwLCA5MjQwMywgMzE2OCwgMCwgNDIxMzQsIDExODMxLCAyMzcwLCAKKyAgICA5ODM5MTMsIDAsIDY1ODUxLCA0MjYwNywgMTI4MTkwLCA5MjQwMywgMzE2OCwgMCwgNDIxMzQsIDExODMxLCAyMzcwLCAKICAgICAyODQ2LCA5MjYwNSwgMCwgMCwgMTIwMTMyLCAwLCAxODM2LCAwLCAwLCA5MjU1OCwgMzc0MCwgNjk4NDMsIDYyOTAsIAogICAgIDY1Mzc0LCAxMjA0NTEsIDIzOTAsIDM5NDQsIDY2NjI4LCAxMjA0MzQsIDAsIDYxMzUsIDMxMTgsIDc0MjY1LCAxMTkwOTMsIAotICAgIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDk4MzczNCwgMCwgMTA2MTgsIDI1ODQsIDAsIDAsIDAsIAorICAgIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDk4Mzc0MywgMCwgMTA2MTgsIDI1ODQsIDAsIDAsIDAsIAogICAgIDk5OTgsIDEyODU2NCwgMCwgMCwgMCwgMCwgNjIwNCwgMCwgMCwgODI3OSwgODc3NiwgNjQ5NTQsIDQ5NzUsIDcwMDc1LCAKICAgICAxMjAxMzAsIDQyNjcsIDE2MzEsIDQyMjA2LCA3Nzk4MywgMCwgMTk1MDQ2LCA2NTcwMCwgNjY1NjIsIDAsIDY0NjQ1LCAwLCAKLSAgICAwLCAxMjY1ODgsIDEyNTg2LCAwLCA5MjQyLCAxMjc5MjIsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAzMTIyLCA5ODM3ODgsIAorICAgIDAsIDEyNjU4OCwgMTI1ODYsIDAsIDkyNDIsIDEyNzkyMiwgMCwgNDUyMywgNTg0MiwgMTA0OTUsIDMxMjIsIDk4Mzc5NywgCiAgICAgNzc5MywgNzgyNzUsIDkzMjgsIDExOTEwNCwgNzgzOTMsIDEyNjA0LCAwLCA2NjE1LCAyMjg1LCA5MjM0NCwgMzk4NiwgCi0gICAgNDQwMjUsIDAsIDg5MTIsIDY0NTU1LCA3NDA5LCAwLCA5ODMzNTAsIDk1NDEsIDc4Mjc2LCAwLCAxMTI3NSwgODU0MCwgCi0gICAgMTE0OTgsIDAsIDk4MzM0OSwgNDEwNDAsIDI0NTksIDAsIDEzMDYwLCA0MTA0MSwgNzQ0MTMsIDk4MzEzOCwgMCwgMCwgCi0gICAgNjg0MjcsIDEwNDUwLCAxMjU1MSwgNDEwNDMsIDcwMjAsIDEyMDM1MywgMzc2NSwgOTgzMzQyLCAwLCAxNjA2LCAxMjAzNDgsIAorICAgIDQ0MDI1LCAwLCA4OTEyLCA2NDU1NSwgNzQwOSwgMCwgOTgzMzU4LCA5NTQxLCA3ODI3NiwgMCwgMTEyNzUsIDg1NDAsIAorICAgIDExNDk4LCAwLCA5ODMzNTcsIDQxMDQwLCAyNDU5LCAwLCAxMzA2MCwgNDEwNDEsIDc0NDEzLCA5ODMxMzgsIDAsIDAsIAorICAgIDY4NDI3LCAxMDQ1MCwgMTI1NTEsIDQxMDQzLCA3MDIwLCAxMjAzNTMsIDM3NjUsIDk4MzM1MCwgMCwgMTYwNiwgMTIwMzQ4LCAKICAgICAxMjAzNTEsIDMwOTMsIDY4NDM2LCAwLCA5ODMwNjEsIDExOTYxMywgMCwgMCwgNDMxMiwgNzQwOTEsIDEyMDMzNywgCiAgICAgMTIwMzM2LCAxMTkyMywgNDAyMywgMTIwMzMzLCA1NzYzLCA5NDAxNSwgNDgyNywgMTA4OTQsIDEyODEwLCA2NDQwNiwgCiAgICAgMTE4Nzg1LCA0NDU1LCA3NDMyMSwgNDMzLCAxMTk2MjAsIDY2NjYwLCAyNDk5LCAwLCAwLCAxMTg4MzcsIDExOTczLCAKQEAgLTE5NjQ2LDI1ICsxOTY2NiwyNSBAQAogICAgIDcwMDQsIDAsIDY1ODgwLCAxMjc4ODYsIDExOTA0OCwgMjM4MCwgMTEzODAsIDAsIDkzOTk2LCAyMzc2LCAwLCAxMTkzMjAsIAogICAgIDAsIDUxOTcsIDEyNzA0NiwgMTI3MDQ3LCAxMjcwNDgsIDIzNjYsIDEyNzA1MCwgMTI3MDUxLCAxMjA1NTQsIDEyMDA0NSwgMCwgCiAgICAgMCwgMCwgOTgzMDg0LCAwLCAwLCAwLCA3NDE4OCwgNzEzNDIsIDk4MzA4NiwgOTgzNTczLCAxMjAwNDcsIDEyODU3NSwgMCwgCi0gICAgMCwgMTIwMDQ5LCAwLCAxODQ3LCAwLCAxMDMzOSwgOTgzMzU3LCA0MjM4NCwgMCwgNDIyNywgNzQxNTgsIDAsIDkyNTAxLCAKLSAgICA0MzAzMiwgMCwgNDIzNjUsIDAsIDEyNjcxLCAxMTM4NCwgMCwgOTgzNDU3LCAwLCA2NDc5NywgOTgzMzM3LCA1ODIwLCAKLSAgICA5ODMzMzYsIDEyMDA1MiwgMTIwMDY1LCAwLCAxMjAwNjQsIDEyMDY1MCwgNDIxMzcsIDk4OTMsIDI3NTQsIDEyNjY0LCAKKyAgICAwLCAxMjAwNDksIDAsIDE4NDcsIDAsIDEwMzM5LCA5ODMzNjUsIDQyMzg0LCAwLCA0MjI3LCA3NDE1OCwgMCwgOTI1MDEsIAorICAgIDQzMDMyLCAwLCA0MjM2NSwgMCwgMTI2NzEsIDExMzg0LCAwLCA5ODM0NjUsIDAsIDY0Nzk3LCA5ODMzNDUsIDU4MjAsIAorICAgIDk4MzM0NCwgMTIwMDUyLCAxMjAwNjUsIDAsIDEyMDA2NCwgMTIwNjUwLCA0MjEzNywgOTg5MywgMjc1NCwgMTI2NjQsIAogICAgIDEyMDA2MywgMCwgNzM3NywgMTI3ODY3LCA0MTc5OSwgNjU1MzAsIDE3MTEsIDEyOTg0LCA0MzAzOSwgMzExNCwgNjI1NSwgCi0gICAgOTgzMzMyLCAxMTg5MzgsIDAsIDEwODUzLCA5MjYsIDk4MzM2MSwgNzQxODQsIDk4MzM2MCwgMTIwMDU1LCAwLCA0MzE3NSwgCisgICAgOTgzMzQwLCAxMTg5MzgsIDAsIDEwODUzLCA5MjYsIDk4MzM2OSwgNzQxODQsIDk4MzM2OCwgMTIwMDU1LCAwLCA0MzE3NSwgCiAgICAgMCwgNDMwMzcsIDQxNzk4LCA0MTAzNSwgMTE1ODMsIDEyNzc2OSwgNDE4MDEsIDExOTA4OCwgMTE5NjA1LCA1MjAsIDQyMDAsIAotICAgIDEyNjk5LCA4MzMxLCAwLCAzMDkxLCA0MTAzNCwgMTI3MzUzLCA5ODM2NzIsIDgzNjAsIDAsIDc4MDQ0LCAzMjEsIDQyMjksIAorICAgIDEyNjk5LCA4MzMxLCAwLCAzMDkxLCA0MTAzNCwgMTI3MzUzLCA5ODM2ODEsIDgzNjAsIDAsIDc4MDQ0LCAzMjEsIDQyMjksIAogICAgIDY0NTQzLCA5MTc5NDYsIDY1NTYzLCAwLCA5MTc5NzQsIDI4NjEsIDQzNzkzLCAxMDA5NSwgMCwgOTE5NSwgOTIzODYsIAogICAgIDE4NjEsIDAsIDczNzMzLCAwLCAwLCA0MzA0MSwgMCwgNDM3OTQsIDEyODUzMCwgMzg1OSwgMTIxODEsIDQxNjYwLCA4MjA5LCAKICAgICAwLCA3Mzg2NywgMTI5NzMsIDAsIDc0NzU3LCAxMjc1MTQsIDQxNjU4LCAwLCAwLCA1NzYwLCAwLCA3NDMsIDQ0MTQsIAogICAgIDEyMDc2NiwgMCwgNDI2MzIsIDkxNzk3MywgNjUxNjEsIDczODk2LCAxMjg1ODksIDAsIDE0MDUsIDExOTA2MywgNDMyMjAsIAogICAgIDQzMzQxLCAwLCAxOTkxOSwgMCwgNjQ1MzIsIDY1MzY3LCA0MzcxMCwgMCwgMCwgMzUxMywgMCwgMTE4ODgzLCA0MzM0MiwgCiAgICAgMTE5MDY0LCA2NTUyOSwgNjUzNjQsIDEyODE5NywgMCwgNjQ4NSwgMTM5NywgMCwgNDE5ODYsIDkyNjc4LCAwLCAwLCAKLSAgICA3NDA5NywgMCwgNzQ3MSwgMTIwNzksIDY3OTk3LCAxMjY4MiwgNDMyODcsIDkyMzE3LCAwLCA5ODMxNDMsIDk4MzY5OCwgMCwgCisgICAgNzQwOTcsIDAsIDc0NzEsIDEyMDc5LCA2Nzk5NywgMTI2ODIsIDQzMjg3LCA5MjMxNywgMCwgOTgzMTQzLCA5ODM3MDcsIDAsIAogICAgIDAsIDEwOTksIDEwNDkwLCAwLCAxMDUwMSwgNjUxODEsIDc0NDYzLCAwLCA0NjQsIDQxNjI0LCA2NTI4MywgNjc2NjMsIAogICAgIDc4MjIyLCAxMzQ2LCAwLCA5MTc2MzEsIDY0NTczLCA2NDg5NywgNDIzLCAxODE4LCA2NTE0NCwgMCwgODI3MiwgMTI3ODEyLCAKLSAgICAxOTkxMSwgNDIxOCwgMzA4NywgNjQ5NjAsIDEyNzIzNCwgNDM1NjQsIDAsIDAsIDk1ODQsIDEwNDY1LCA5ODM4OTMsIAorICAgIDE5OTExLCA0MjE4LCAzMDg3LCA2NDk2MCwgMTI3MjM0LCA0MzU2NCwgMCwgMCwgOTU4NCwgMTA0NjUsIDk4MzkwMiwgCiAgICAgNzQzNTksIDEyNjI2LCA5MTA2LCAwLCA0MjY0MiwgMTIwMjMwLCA2NDc1MCwgOTM5MCwgMCwgNDE3OTcsIDAsIDAsIDI2NSwgCi0gICAgNDE3OTUsIDY0NjY2LCAxMjY1MDgsIDQzNTMwLCAyNzUyLCAwLCAwLCA5ODM0ODUsIDU5LCAwLCA5ODM1OTMsIDAsIDkyMzcxLCAKKyAgICA0MTc5NSwgNjQ2NjYsIDEyNjUwOCwgNDM1MzAsIDI3NTIsIDAsIDAsIDk4MzQ5MywgNTksIDAsIDk4MzU5MywgMCwgOTIzNzEsIAogICAgIDc3ODczLCA0MTgxMCwgMCwgNzAxMCwgMCwgNDE4MDksIDQxNDk1LCAxMTkzNjQsIDAsIDQyMjUyLCA0MjIxMywgODAwOSwgCiAgICAgMzMwNSwgNDMwMzMsIDUxMSwgOTI3MDAsIDY2MjU1LCAxMzEyNywgMTIwMDY3LCAwLCA3NDM5NywgMTIwMjM1LCA5MTc5NzcsIAogICAgIDY1OTE1LCAxNDAwLCA0MTgxMiwgMTA2ODUsIDE5NDg3MCwgMjEwMywgMTAzODcsIDQ0NTMsIDQzMjc2LCA5MTc3ODMsIApAQCAtMTk2NzUsMTcgKzE5Njk1LDE3IEBACiAgICAgMCwgNDE4NDEsIDQzMzM4LCAwLCAwLCA1NzI2LCA2NDkxNSwgNDIxNzUsIDAsIDAsIDQxNDk3LCA2NTA0NCwgMTIwMTA5LCAKICAgICAyODUxLCA0MzAxNywgOTgzNTg5LCAwLCA0MzczLCA3ODA1OCwgMCwgOTU4NywgMTc4OSwgNjY3MSwgMTI4ODQwLCAzMTAwLCAKICAgICAwLCA2NTM2MCwgMCwgOTIzNjUsIDkxNzc4OSwgNjQ5MjIsIDAsIDgxOTAsIDEyMDgzLCAwLCAwLCA2NTA2LCA2NDMxMiwgCi0gICAgNzQzNzQsIDIzNjgsIDAsIDQ0MTksIDk4MzgzOCwgMTE5MTI1LCAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIAorICAgIDc0Mzc0LCAyMzY4LCAwLCA0NDE5LCA5ODM4NDcsIDExOTEyNSwgMzQzOSwgMTgyNSwgMTE5MiwgMTIwMTA2LCA4ODkxLCAKICAgICAzMDgwLCAxMjAyMjgsIDIzNDcsIDU0MzAsIDAsIDg5OTAsIDI4NDgsIDAsIDEyODIyMywgOTI1MjgsIDI0OSwgMCwgMCwgMCwgCiAgICAgMTIwNjU4LCAwLCAwLCA4ODgzLCA5MTc4MDIsIDcyOCwgNjgxNzgsIDk5NSwgMCwgMCwgNjQ4MjYsIDAsIDkxNzc5OCwgCi0gICAgMTI4MzQ4LCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMTk0ODE0LCA5ODM4NDEsIDEyMTEyLCA2OTkxMiwgMCwgCisgICAgMTI4MzQ4LCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMTk0ODE0LCA5ODM4NTAsIDEyMTEyLCA2OTkxMiwgMCwgCiAgICAgMCwgNzQ0MTksIDEyMzM1LCAxMjAxMDQsIDkxNzc5NSwgMzQ0MywgMzEyOSwgMCwgMjEwMiwgNjU0NDUsIDc4MjU4LCAKICAgICA2NDg5MSwgMCwgNzcyNSwgNjUxMDgsIDc4MjU1LCAwLCA4NjI0LCA2OTI0NiwgMTI0NDYsIDQzMjk1LCAwLCA0MTg5NCwgMCwgCiAgICAgNjI3NywgNDE2NzIsIDQxODkzLCAxMDAxMCwgMTI4Njc4LCAzNTQwLCAxMjg2NDksIDgzNSwgNzEzNDAsIDY5ODE2LCAKICAgICAxMTk4NjgsIDc0NDA4LCAwLCA3Mzk1OSwgNTQyNiwgNDI1OCwgMCwgMCwgNTQyNCwgMTI4MTI3LCA4MjgzLCAwLCA1NDM0LCAKICAgICA5ODM1OTAsIDAsIDE5OTE3LCAxMTQwOCwgMCwgMTE5NDcsIDAsIDE0MDQsIDMwOTUsIDExNDMyLCAxMjgzMDcsIDM0NjQsIAogICAgIDY0ODYsIDQ4MTksIDEyODIzMywgMCwgNTcwLCA4MDk1LCAzNjcyLCAxMTk4NjQsIDE0OTgsIDY3ODY2LCAwLCAxMjg1MzksIAotICAgIDQzMSwgMCwgMCwgMTI4MTgyLCAxMjgwOTYsIDY4MTY3LCA5ODM2NTQsIDEzMDk2LCAxMjg2NDMsIDAsIDQzNDA4LCA5NTE2LCAKKyAgICA0MzEsIDAsIDAsIDEyODE4MiwgMTI4MDk2LCA2ODE2NywgOTgzNjYzLCAxMzA5NiwgMTI4NjQzLCAwLCA0MzQwOCwgOTUxNiwgCiAgICAgMTI4NTM4LCA1MjY4LCA0MjIzMCwgNDIyMjAsIDAsIDQ0NTAsIDEyMDUxMSwgMTE1NDcsIDQzNDE3LCAxMjg1NDIsIDM1NiwgCiAgICAgMzQ3NywgMjI3LCAxMDQ4OCwgNjgyMDMsIDM4MiwgMTE0MTgsIDAsIDE5NTA2NiwgMCwgMCwgMCwgMCwgNjQ4NCwgMjU0MSwgCiAgICAgNjYwMzksIDAsIDc4NzE4LCA5MjcyMywgMzU0OSwgMCwgOTExMCwgMTE5NjY1LCAyNzQzLCAwLCA0MzI5MCwgMTk0ODEyLCAKQEAgLTE5Njk0LDcgKzE5NzE0LDcgQEAKICAgICAxMjg0OSwgMzk1MywgMTg5NywgMCwgNjUwOTQsIDExOTk0LCA0MzM5LCA3NDU1NiwgOTI2NTQsIDY3ODQzLCAwLCAwLCAwLCAKICAgICA2ODQ3MywgNzQxMDQsIDUyMjgsIDEyODgwNCwgNzg2OCwgNDMxODQsIDAsIDAsIDczOTg2LCA0MzQzOCwgMCwgNDMwMjIsIDAsIAogICAgIDExNjIsIDkxNzg0NywgMjY3MSwgMCwgMCwgOTI2MzIsIDkyNjMxLCAxMTg4NjUsIDQ1NTMsIDczODExLCAwLCAxOTUwMDUsIAotICAgIDAsIDAsIDE5OTIxLCA3NDMzMSwgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDk4Mzc3OSwgNTUyNDksIDQ4MjAsIAorICAgIDAsIDAsIDE5OTIxLCA3NDMzMSwgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDk4Mzc4OCwgNTUyNDksIDQ4MjAsIAogICAgIDY1MjM5LCAxOTQ2NjIsIDAsIDE5NDY2NSwgNDMwNDIsIDExOTIxMiwgMTM3NywgMTI4NjksIDQ4OTcsIDQyODIxLCA5MjUwLCAKICAgICAwLCA0NDM4LCA2NDM4NSwgMCwgMTc1MywgMTEzMzEsIDYxNDcsIDE5NDk0MSwgNDMyODIsIDg4MzMsIDAsIDAsIDY1MDQsIAogICAgIDc4NDA4LCAxMjY5NzksIDEwNzE5LCAwLCAxODk4LCAxNDEzLCA0MjQ0MywgMCwgODAyLCAxMjE0MSwgMCwgMTk0NjcxLCAKQEAgLTE5NzAzLDcgKzE5NzIzLDcgQEAKICAgICA3ODcxOSwgNjY1NzMsIDAsIDc4NzI0LCA3ODcxMiwgMTE3NjEsIDE5NDY1NSwgMCwgNDEwOTQsIDAsIDAsIDE5NDg5MywgMCwgCiAgICAgOTI2ODksIDYxOTYsIDY5NDUsIDkzOTY5LCAxOTQ4OTAsIDEyODE4NCwgMTIwNDkxLCAxMTgxNiwgMTk0OTQzLCA1NzMzLCAKICAgICAyOTMwLCAwLCAwLCA0MTA5OCwgMCwgNDEwOTMsIDAsIDY2NjI2LCA1ODgsIDk3NjAsIDAsIDE5NDcxNywgMTIzOCwgMjAwLCAKLSAgICA5ODMyMDUsIDE2NjAsIDczOTE2LCAwLCAxMTg5MDUsIDc0MzYyLCAwLCA5MjQ4NSwgMTk0NjUxLCAwLCA5ODM2OTcsIDMzOTQsIAorICAgIDk4MzIwNywgMTY2MCwgNzM5MTYsIDAsIDExODkwNSwgNzQzNjIsIDAsIDkyNDg1LCAxOTQ2NTEsIDAsIDk4MzcwNiwgMzM5NCwgCiAgICAgMTk0ODk0LCAxMjA2NjgsIDAsIDAsIDEyNzM1OCwgNjYyMTksIDEyNzE4MywgNDMyODQsIDE5NDY1NiwgNzgxNywgMTg0MSwgCiAgICAgMTEwNTUsIDEyMDUzMywgMTk0OTc5LCAxOTQ5ODIsIDE2NjksIDEwNzc2LCAxOTQ5ODEsIDc3MDEsIDE5NDk4MCwgMCwgCiAgICAgMTk0OTk1LCAxNzMyLCA0MDMwLCAwLCAzOTYzLCA2NjYxMSwgMTI3NTMwLCA0MTc2OCwgNjQ5MSwgMCwgNjUzMjQsIDkxNCwgCkBAIC0xOTcxMSwzMCArMTk3MzEsMzAgQEAKICAgICAxMjAwOSwgMTIzOTksIDAsIDY3ODUyLCA2NTUzNywgMCwgMTA4NDEsIDQzNDMwLCA1MzAxLCAwLCA5MjYxOCwgNTczNCwgCiAgICAgODk2MCwgMCwgOTI1MjcsIDY1MzE3LCA3Nzg4MCwgMCwgMCwgMCwgMTIzMDQsIDAsIDAsIDY1MzE1LCA5MjY3MCwgMTI4NTExLCAKICAgICAwLCAwLCAwLCAxMTk2MjEsIDkyNTI5LCA3NDUzNiwgMTI0NDcsIDY0NDg2LCAxMjczNzQsIDEyNjU2MiwgOTgzMTI5LCAwLCAKLSAgICAwLCA5ODM3OTMsIDQyNzY3LCAxMDkxNSwgMCwgMTIwMDcsIDQzNjk1LCAxMjA1MjAsIDExOTc1LCAxOTQ4NzgsIDAsIAorICAgIDAsIDk4MzgwMiwgNDI3NjcsIDEwOTE1LCAwLCAxMjAwNywgNDM2OTUsIDEyMDUyMCwgMTE5NzUsIDE5NDg3OCwgMCwgCiAgICAgOTI2MDQsIDI1NTUsIDg2MjksIDEyODY0MCwgNDMxNjgsIDQxODcyLCA0MzcwNiwgNDQ5NiwgMTk0ODc5LCAxMjgxNDgsIAogICAgIDEyMDI0MSwgMCwgMCwgMCwgMCwgNjQ3MzAsIDcwMDQxLCA2NjcxNCwgNjgyMjIsIDAsIDcwMDc2LCA2NTU5NiwgOTIzMDYsIAogICAgIDExNDE2LCA0MjgwLCA2NzY1NSwgODc2NSwgMTI3ODQsIDc3OTIsIDEzOTMsIDEyNjQ3MywgNjc4NzEsIDc0Mzg2LCAwLCAKICAgICA4MjMzLCAxMjgyMCwgMCwgNjY4MywgMTk0ODc2LCAzNDQyLCAxMjE0NCwgMjg0MSwgMTI1NDMsIDAsIDE0NzMsIDQyODIwLCAKICAgICA2NDMyOSwgMTI3ODMyLCAwLCA2ODY0MiwgNjQ4OCwgMzU3LCAxMDQ4LCA0MTEwMCwgMCwgNDExMDQsIDk0MDAzLCAzNDA2LCAKICAgICAxMDU0LCA3MTMyMCwgMTA0MCwgNjU0NTAsIDAsIDQ0MzQsIDEwNjksIDAsIDExODg2MiwgNjU3MzcsIDkxNzc2NSwgCi0gICAgMTI4NzA1LCAwLCA5ODM2ODQsIDk2OTMsIDQxOTQzLCAxMjY1NjQsIDQxOTMxLCA0MTc1OSwgMTI3NTcsIDQzNTMsIDAsIAotICAgIDEwNTksIDk3OTAsIDg5OTUsIDExOTk3NCwgOTgzNjg3LCA2NTkzNywgMCwgNDE3NjQsIDEwNjQ2LCAwLCAxMTg4MzMsIAotICAgIDkyMzcyLCAwLCA3NDgzMCwgNzg1NjksIDEyNzQzLCA5ODM2ODAsIDY0ODAsIDkxNzc2MSwgNDE3NzksIDQyNTgwLCA2NjYwMSwgCi0gICAgMTIyMDcsIDExOTYxOSwgNjMzNSwgNjY2MDIsIDExMzEyLCA2NDgwNywgMCwgMCwgNDE3NjcsIDExOTYyOSwgOTgzNzU1LCAKLSAgICA0MzAyMCwgMTI4MjcxLCAzOTU1LCA3NDI1NCwgMCwgOTgzNzQ1LCA5MTc4NjEsIDAsIDc3OTI2LCA5NzcwLCA5MjQ2LCAKKyAgICAxMjg3MDUsIDAsIDk4MzY5MywgOTY5MywgNDE5NDMsIDEyNjU2NCwgNDE5MzEsIDQxNzU5LCAxMjc1NywgNDM1MywgMCwgCisgICAgMTA1OSwgOTc5MCwgODk5NSwgMTE5OTc0LCA5ODM2OTYsIDY1OTM3LCAwLCA0MTc2NCwgMTA2NDYsIDAsIDExODgzMywgCisgICAgOTIzNzIsIDAsIDc0ODMwLCA3ODU2OSwgMTI3NDMsIDk4MzY4OSwgNjQ4MCwgOTE3NzYxLCA0MTc3OSwgNDI1ODAsIDY2NjAxLCAKKyAgICAxMjIwNywgMTE5NjE5LCA2MzM1LCA2NjYwMiwgMTEzMTIsIDY0ODA3LCAwLCAwLCA0MTc2NywgMTE5NjI5LCA5ODM3NjQsIAorICAgIDQzMDIwLCAxMjgyNzEsIDM5NTUsIDc0MjU0LCAwLCA5ODM3NTQsIDkxNzg2MSwgMCwgNzc5MjYsIDk3NzAsIDkyNDYsIAogICAgIDEyMjMwLCAwLCAwLCAwLCAxMDQ0OCwgNDE3ODMsIDQxNzg2LCAxMjcwOTMsIDEyNzk3LCAyNzU1LCA2NDU3MSwgNzg1NzgsIAogICAgIDE5NDkyNywgNDg1NywgMCwgNDQyOCwgMTI3OTQsIDczNzU1LCAxMjgwNjEsIDc4NTc0LCAwLCA3NDI4NCwgMCwgNTc0NywgCiAgICAgNzg4MjUsIDAsIDc5NzgsIDQxMDkyLCA3NDU3MSwgMCwgMTE5MjQsIDQzODEyLCA0MjE0NCwgNjUwMTUsIDAsIDU2MywgMCwgCi0gICAgOTgzNjgyLCAxMjc5OCwgMTEyNzEsIDU3LCAwLCAwLCA5MTc4NjAsIDExOTA0MywgMCwgOTQwNTEsIDQzMTM3LCA2OTQsIDAsIAorICAgIDk4MzY5MSwgMTI3OTgsIDExMjcxLCA1NywgMCwgMCwgOTE3ODYwLCAxMTkwNDMsIDAsIDk0MDUxLCA0MzEzNywgNjk0LCAwLCAKICAgICA5ODc2LCAwLCAxMTkxNjgsIDAsIDc4ODIyLCA2NDUzNywgMCwgMjc3LCA3NDM4NSwgNzIyOSwgMTI3NjEsIDAsIDAsIAogICAgIDEzMDI1LCA2NDgxMSwgODc1NywgNzg4MjQsIDEyNjQ3OCwgMTU3NCwgNzM4MSwgMCwgMjUyNSwgNDg1MiwgNTc0OSwgCiAgICAgNjg0NjUsIDEzMDI3LCA0MjgyNCwgMTIwNTc0LCAxMDM5LCA3MTUxLCAxMDE1NSwgNTc0NSwgMTg4LCA0MTg1OCwgMTE1OTIsIAogICAgIDAsIDc0MDE1LCA5MDU1LCA0MTg1MywgNDg1OCwgOTE3NzgwLCAwLCA0MzYsIDQ3NzEsIDAsIDI3ODYsIDAsIDQ4NTYsIAogICAgIDgwNTEsIDAsIDExOTYwOSwgNzEzMjcsIDk2NDQsIDAsIDAsIDAsIDE5NDkxNiwgMTIwNzMyLCA2NjcxMCwgMTE4ODM0LCAKLSAgICA5ODMzNTEsIDczOTA2LCAxMjg2ODAsIDEyNzExNCwgMCwgMTAyMzQsIDU4NDMsIDExOTM5LCAwLCA0MjE1NywgMCwgMzE1NywgCisgICAgOTgzMzU5LCA3MzkwNiwgMTI4NjgwLCAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIAogICAgIDE5NDkxOCwgNjgzOTMsIDAsIDM1MDQsIDExOTE3OCwgMCwgMTA4MjIsIDUxNDksIDY2MDI5LCAxMDIyNiwgNjUxNDIsIAotICAgIDEyODAyNSwgMzU5NCwgNDI0MjQsIDE5NDk1OSwgNDAsIDEyNjU3LCA5ODM2NTYsIDAsIDM4NiwgMCwgODgzNCwgMCwgCisgICAgMTI4MDI1LCAzNTk0LCA0MjQyNCwgMTk0OTU5LCA0MCwgMTI2NTcsIDk4MzY2NSwgMCwgMzg2LCAwLCA4ODM0LCAwLCAKICAgICAxMjgxNSwgNDM1NzQsIDAsIDczOTA3LCAwLCA3NDE5NiwgNzIyMCwgNzQ1MDQsIDAsIDc0MzE2LCAwLCA2NTMyMiwgNDMwNCwgCiAgICAgNzQ1MDMsIDgxNjAsIDc4NzA3LCAxOTQ3NTMsIDAsIDAsIDEyODUyNiwgMTM0OCwgOTIzNDksIDc4NTk3LCAxMjY1MzksIAogICAgIDEzMzAzLCAwLCA5MjM5MiwgMTk0NzU1LCA3NTk5LCAxMjc4LCA0MzYxNiwgMTMyNjksIDAsIDAsIDc0Mzg3LCA3ODE3OSwgCkBAIC0xOTc0NiwyNSArMTk3NjYsMjUgQEAKICAgICA0MjUwNywgMTk2MiwgNDMzMDUsIDc4NDc2LCA0MjUwNSwgMTE2NjAsIDAsIDIwNzIsIDkyMzEyLCA2OTk1LCA3NDE3MywgCiAgICAgNTQzNywgNzQxNzQsIDEwNjY5LCA4NzAyLCA3OTY0LCA5MjM1MiwgMCwgMTk5LCAxOTQ4NDMsIDQxMDUsIDE5NDg0NSwgCiAgICAgMTk0Njk5LCAxOTQ4NDcsIDE5NDcxMCwgMTE5ODc1LCAxMzE0OCwgNzU2MCwgNzg0NzksIDkyMjYsIDc4NDgwLCAxOTUwNzAsIAotICAgIDY0NzIsIDY1ODE0LCA3Mzk1NCwgMCwgNDcyNCwgMCwgMCwgOTE5MSwgMCwgNjQ0MzIsIDk4MzgwOCwgOTgzMjQxLCAKKyAgICA2NDcyLCA2NTgxNCwgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDY0NDMyLCA5ODM4MTcsIDk4MzI0NywgCiAgICAgMTk1MDI0LCAxMDE5NiwgNzg4NiwgMCwgNjU4NSwgMCwgNjY4MCwgMTk1MDQyLCAwLCAxOTUwNTEsIDY2NzksIDc0NDEyLCAKLSAgICA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDk4MzYyMiwgOTgzNjI4LCAxMjc4OTEsIDEyNzQ4NCwgMTk0ODMzLCAKKyAgICA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDk4MzYzMSwgOTgzNjM3LCAxMjc4OTEsIDEyNzQ4NCwgMTk0ODMzLCAKICAgICAxOTQ4MzIsIDY2ODEsIDEyNzQ4MiwgMTI2OTMsIDE5NDgzNiwgNDI3MjcsIDc4MTk2LCAxMjgyNTIsIDc4MTk1LCA2NTQ0MiwgCi0gICAgMTE5NjEwLCA2OTczMywgOTk4OSwgNDMyNDgsIDY2MjQ4LCAxOTQ4MTYsIDAsIDE5NDgxOCwgMTI4ODQ1LCAxOTQ4MjAsIAorICAgIDExOTYxMCwgNjk3MzMsIDk5ODksIDQzMjQ4LCA2NjI0OCwgMTk0ODE2LCAwLCAxMTMyMSwgMTI4ODQ1LCAxOTQ4MjAsIAogICAgIDE5NDgxOSwgNTI5NywgNzA0MiwgMTMyODQsIDYxMTIsIDc5NjgsIDE5NDgyNSwgNzM5MjcsIDkyNDQ0LCAxOTQ3MzYsIAogICAgIDY1NzQ2LCAxMjc0NzYsIDY5ODg5LCA3NDM4OSwgMTI4Njk2LCA0MzQyLCA0MjgzOSwgMTk0ODMxLCAxNjc3LCAwLCAwLCAKICAgICAxMjY1OTAsIDkxNzg1NSwgMTEwOTEsIDExMDExLCAyNzE5LCAwLCAwLCAxMTk1OTUsIDEwMTYwLCAwLCAwLCA3NTg1LCAKICAgICA2NTE2OSwgMjA1MiwgNDMwOCwgOTIxNzQsIDQzMDAwLCA3NTA1LCA1NDMsIDY0OTE2LCA2NDczNiwgMCwgMCwgNjQ2NTUsIDAsIAotICAgIDExODkyMiwgMjA2NCwgMCwgNDMxNTgsIDc5MDIsIDAsIDY1MjY1LCAxOTQ2MzksIDAsIDEyNzE3MCwgMCwgMCwgMCwgMCwgCi0gICAgMTI5OTQsIDkyNzI4LCAxMDgyOCwgOTgzOTM0LCA2MjI4LCA0MzA3LCAzNDgyLCAxMjg1MjcsIDAsIDAsIDAsIDUwNiwgCi0gICAgNzQ1NzMsIDQxMTk0LCA2NTczNSwgMjA1NSwgNDMyNTUsIDQxMTk1LCAwLCA4MTY5LCA5ODM2NzEsIDg4NDEsIDAsIDUxNiwgCisgICAgMTE4OTIyLCAyMDY0LCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgMTI3MTcwLCAwLCA5ODM2MjUsIDAsIAorICAgIDAsIDEyOTk0LCA5MjcyOCwgMTA4MjgsIDk4Mzk0MywgNjIyOCwgNDMwNywgMzQ4MiwgMTI4NTI3LCAwLCAwLCAwLCA1MDYsIAorICAgIDc0NTczLCA0MTE5NCwgNjU3MzUsIDIwNTUsIDQzMjU1LCA0MTE5NSwgMCwgODE2OSwgOTgzNjgwLCA4ODQxLCAwLCA1MTYsIAogICAgIDkzOTc0LCAyMDYzLCAxMTkwNTEsIDM0LCAxMjg4NTAsIDEyMDE4NiwgMTE1MDQsIDE2MTIsIDc0MzMzLCAxMjAxODIsIAogICAgIDExODI3LCA3NDMwOCwgMTIwMDEsIDEyMDE3OCwgMTAyNDIsIDY0NTY0LCAxMjAxNzksIDY3OTg2LCA2NTg0LCA3NzQ5LCAKICAgICAxMTAzNywgMCwgMTc1OCwgMTI3MDkyLCAxMDY2NywgMTA1NjAsIDEyMDE5NywgOTI1OTMsIDE5MzUsIDExNTE3LCAxMjAxOTMsIAogICAgIDEyMDE5NiwgMTIwMTk1LCAxOTMxLCAxMjAxODksIDc0ODM5LCAxMjAxOTEsIDEyMTcsIDY0NzAyLCAxMjY0MywgODI1LCAKICAgICAxMjc4MzgsIDE5NDkwNSwgMTIyOTQsIDkyNDI4LCA3ODgzNCwgOTEzOCwgNzg4MzEsIDc4ODMzLCAxMjYzMSwgNzg4MjksIAogICAgIDExMDgwLCA3NDU1NCwgNjQwMDAsIDU1OTEsIDEyMzksIDAsIDExMzEzLCAwLCAzNDAzLCAwLCAwLCA2NDM2NCwgOTIyNjksIAotICAgIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgOTgzODQwLCAwLCAxMjY0ODQsIDY3NTg5LCA0MTg1MCwgNjQyOTAsIAorICAgIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgOTgzODQ5LCAwLCAxMjY0ODQsIDY3NTg5LCA0MTg1MCwgNjQyOTAsIAogICAgIDM0MzMsIDkyMzkzLCAxMjYxNSwgMTU5NCwgNDIxOTIsIDY5MTQsIDY3NjAzLCAwLCAxMTk1NjksIDc0NTY1LCA0MTM1MywgCiAgICAgNjc2MDIsIDY3NjExLCA0MzM3LCAwLCAxMjcyOTYsIDkxOCwgNjUwMzUsIDQxMzUxLCA3NjgxLCAxOTQ5MDAsIDQyNTc3LCAKICAgICA0MTM5MywgMTI2NjgsIDE5NDkwNCwgMjQ3NywgMTI3Mjg1LCAwLCAxMjczMDEsIDAsIDY3NjA0LCAxOTQ4ODAsIDEyNzIzNSwgCkBAIC0xOTc3NiwxNCArMTk3OTYsMTQgQEAKICAgICA3Mzc5NiwgMCwgMTE5MjI4LCAxMjAzNSwgMCwgMjgxOCwgMCwgNzQ0MTEsIDczNzkzLCAwLCA0MTcyLCAwLCAwLCA4MzczLCAKICAgICAxMDg3MywgMTIxOTcsIDAsIDAsIDkyMjY1LCA2OTcwNiwgMCwgNzgyMTAsIDAsIDEyODExMCwgMTk0ODY1LCAxMjY5ODIsIAogICAgIDc0NTYzLCA2NDgyOCwgMTE0MTksIDE5NDg2OCwgNzY2LCAxMjU3LCAwLCAxMTg4NDUsIDExMzgxLCAzMjY1LCA2NjYxNywgCi0gICAgMzI3NCwgMTI3MzY1LCAxMjY1MjMsIDk0MDQyLCA5ODM5NDEsIDc0NTIyLCA0MTk4OSwgMCwgMCwgMTI4Nzk4LCAzMjYzLCAwLCAKKyAgICAzMjc0LCAxMjczNjUsIDEyNjUyMywgOTQwNDIsIDk4Mzk1MCwgNzQ1MjIsIDQxOTg5LCAwLCAwLCAxMjg3OTgsIDMyNjMsIDAsIAogICAgIDY1NjcyLCAwLCAzMjcwLCA2NDUzOSwgMTE0ODksIDAsIDAsIDAsIDAsIDk1MDUsIDY1NTE4LCAxOTQ3NzYsIDc1NiwgCiAgICAgMTk0NjA1LCAwLCAwLCAwLCA3MjYxLCAwLCAxODYsIDAsIDExOTE1NiwgNTc3MCwgMTMxNzksIDY1ODMwLCAxMjYxMiwgCi0gICAgMTI5NDksIDY0ODU2LCAxMjgwMCwgOTgzODkyLCA3NDIwMywgNjQ3MTgsIDExNTA3LCAwLCA5MjQzNCwgMTE4OTI5LCAwLCAKKyAgICAxMjk0OSwgNjQ4NTYsIDEyODAwLCA5ODM5MDEsIDc0MjAzLCA2NDcxOCwgMTE1MDcsIDAsIDkyNDM0LCAxMTg5MjksIDAsIAogICAgIDExNTc4LCAwLCAxMTkyOTYsIDAsIDAsIDAsIDAsIDc0NTY4LCA5MjU0LCAwLCAxNzk0LCAxMjAyMTcsIDY0NTIxLCA1NjI0LCAKICAgICAxMjAyMjAsIDEyMDIyMSwgMTE5OTU4LCAxMjAyMjMsIDM2MTcsIDY2NjM2LCA2NDg4NiwgOTQwNjEsIDEyMDIxMiwgCiAgICAgMTIwMjEzLCAxMjAyMTQsIDE4NzIsIDY2NTA4LCAxMjA0NjcsIDQxMDc5LCAxMDc0OCwgNTUwMiwgMTE5MzMwLCA0NDUyLCAwLCAKLSAgICA5ODM3NjIsIDkyNTI2LCA0NTExLCAwLCA5ODM4NjgsIDY0Njc4LCAxMTQyNSwgMCwgNDMyNDUsIDEyMzEsIDE5NDc4MywgCisgICAgOTgzNzcxLCA5MjUyNiwgNDUxMSwgMCwgOTgzODc3LCA2NDY3OCwgMTE0MjUsIDAsIDQzMjQ1LCAxMjMxLCAxOTQ3ODMsIAogICAgIDY5OTAzLCAwLCA5MDAzLCA4MTkyLCAwLCA1MzA1LCA5NjUzLCAxMDYxNiwgODY5NCwgOTU0NiwgMCwgMCwgMTIwNDc4LCAKICAgICAxMjAyMDAsIDY1MjA1LCAxMjAyMDIsIDY0MDYzLCA5ODc4LCA3NDc4MCwgMTE5NjI2LCA3ODIwMiwgNjQwNTgsIDg3OTksIAogICAgIDQyMTMxLCAwLCA2NDA2MiwgMTAyOCwgNjQwNjAsIDY0MDU5LCA4MzcsIDEwNTY3LCAwLCA0MzEwMywgMCwgMTIwNzU0LCAKQEAgLTE5NzkyLDI2ICsxOTgxMiwyNiBAQAogICAgIDY0MDMyLCA0MjczNSwgNjQwMzgsIDY0MDM3LCA2NDAzNiwgNjQwMzUsIDQyOTEsIDE5NDkyOCwgNjQwMTUsIDY0MDE0LCAKICAgICA2NDY4MSwgMTk0OTMwLCAwLCA3ODE0NSwgMCwgNDMwOTAsIDAsIDM0NzYsIDg5NzMsIDY0MDEyLCA0MjQ3MywgNjQwMTAsIAogICAgIDY0MDA4LCA2NDAwNywgMjAwMywgNzcwNiwgNjQ1MTcsIDc4MTUzLCAyNTM4LCA2NDAwOSwgMjA0LCAwLCA0ODAyLCA0MTExLCAKLSAgICA4MjM5LCA5MDk4LCA0ODA1LCA2NDAwMSwgNjQwNTcsIDc4ODUsIDcyNDcsIDY0MDU0LCA5ODMyNTgsIDAsIDQ3NjcsIDkzNDMsIAorICAgIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCA2NDA1NywgNzg4NSwgNzI0NywgNjQwNTQsIDk4MzI2NiwgMCwgNDc2NywgOTM0MywgCiAgICAgNjQwNDksIDY0MDQ4LCAxMjAwMzQsIDExMzMsIDY0MDUzLCA2NDA1MiwgNDM0NTMsIDY0MDUwLCA0MTM0MCwgMTE4OTc1LCAKICAgICAxOTQ4MzUsIDEwMDA1LCAxMjMyOSwgNDEzMzMsIDAsIDg0ODksIDE5NDIsIDAsIDE5NDgzNCwgNDI1MjAsIDEyODI0OSwgMCwgCiAgICAgMCwgMTA3NjAsIDY0MDIzLCA2NDAyMiwgNjQwMjEsIDY1ODIsIDQzNjcwLCAwLCA2NDAyNSwgOTE2NywgNDIxNTEsIDc4MjQ0LCAKLSAgICA5ODMyMjYsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIDc4MjQ4LCAKKyAgICA5ODMyMzIsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIDc4MjQ4LCAKICAgICA3NzkxNCwgNzgyNDYsIDc4MjQ3LCAwLCA3NzkxNSwgNzg3NjYsIDY3ODgsIDEzMDk0LCA3NzkyMCwgNzUzMiwgNDE0MTQsIAogICAgIDc4NTIwLCAzMTc5LCA3ODUxOCwgNjQ3NjksIDc4NTE0LCA3ODUxNywgMTE0NjEsIDc0NDU0LCAxMDc1MSwgOTA1MSwgCi0gICAgMTIwNzIwLCA2NzA4LCAxMDUzNSwgMCwgNjgyMTgsIDU1Mjc0LCAyMDA4LCA2NDAzMSwgNjQwMzAsIDI5NCwgNDE4NzQsIDAsIAotICAgIDEyNjk5MSwgNjU5MjksIDAsIDAsIDAsIDAsIDY0MDI4LCA4MTQ2LCA2NDAyNiwgNDE3ODgsIDE5NDg0NCwgMCwgNDM1MSwgCi0gICAgNjM0MywgNDMyNDcsIDExOTg4OCwgMCwgMTE5ODg2LCAxMTk4OTEsIDExOTg5MiwgMTE5ODg5LCAxMTQzMywgMTE5ODk1LCAKLSAgICAxMTk4OTYsIDAsIDc4MDEsIDY1NTc4LCAxOTQ4MzksIDEyOTE1LCA0Mzk2OCwgMzI5NywgOTY5OSwgMTk0OTU1LCAxMTM1LCAKLSAgICAwLCAwLCAxMjg1MjUsIDE5OTUsIDY3MjIsIDk4MzkxNiwgMCwgMjU1MiwgNDE1NDYsIDYwLCA2ODM5NCwgODY0OSwgNDE1NDksIAotICAgIDc4NDk2LCA5ODMzMTksIDAsIDY2ODIsIDAsIDc4Njc5LCA2NDcxMCwgNDE1NDcsIDk4MzYyMSwgMjAxMywgMTI4MjkxLCAKLSAgICA3ODUzMCwgNzg1MzIsIDc4NTI4LCA3ODUyOSwgMTI4MzIsIDc4NDkzLCA4MDgxLCA4MzYyLCAzNTM3LCAxMTk5MDgsIDkxMzcsIAotICAgIDcxNTUsIDg5OTksIDAsIDc4NTMzLCAzNDY2LCAwLCAwLCAxOTk2LCAwLCAzNDUzLCA2MjgyLCAwLCAyMDAyLCAyMDAwLCAKLSAgICAxMjAxNzUsIDUzNywgMCwgNDE3OSwgNjUxMTksIDE5OTgsIDAsIDE4NDIsIDAsIDkyNjc0LCA5NjI4LCA2ODQ0NiwgMTIwODEsIAotICAgIDk4MjYsIDY0NTAyLCAxNzY3LCAwLCAwLCAwLCAxMjAyMDEsIDk4MzYzNywgMCwgMCwgMzA1OSwgNDQwMjQsIDEyMDIwNCwgCi0gICAgMTE5OTUzLCA5MjY5MywgMCwgMCwgOTI0NTIsIDQxMDAsIDkyMCwgMTgxMSwgMTM1NSwgMCwgMCwgMzU5MiwgMTAwNzgsIDAsIAotICAgIDAsIDAsIDg1OTIsIDY1ODcwLCA2ODE2NCwgMTI4NzkyLCAxMDc0MiwgMCwgNDI5MTgsIDE5OTQsIDkyODEsIDMyOTYsIAotICAgIDEyODY1LCAxOTk3LCAxODk1LCAKKyAgICAxMjA3MjAsIDY3MDgsIDEwNTM1LCA5ODM2MjcsIDY4MjE4LCA1NTI3NCwgMjAwOCwgNjQwMzEsIDY0MDMwLCAyOTQsIAorICAgIDQxODc0LCAwLCAxMjY5OTEsIDY1OTI5LCAwLCAwLCAwLCAwLCA2NDAyOCwgODE0NiwgNjQwMjYsIDQxNzg4LCAxOTQ4NDQsIAorICAgIDAsIDQzNTEsIDYzNDMsIDQzMjQ3LCAxMTk4ODgsIDAsIDExOTg4NiwgMTE5ODkxLCAxMTk4OTIsIDExOTg4OSwgMTE0MzMsIAorICAgIDExOTg5NSwgMTE5ODk2LCAwLCA3ODAxLCA2NTU3OCwgMTk0ODM5LCAxMjkxNSwgNDM5NjgsIDMyOTcsIDk2OTksIDE5NDk1NSwgCisgICAgMTEzNSwgMCwgMCwgMTI4NTI1LCAxOTk1LCA2NzIyLCA5ODM5MjUsIDAsIDI1NTIsIDQxNTQ2LCA2MCwgNjgzOTQsIDg2NDksIAorICAgIDQxNTQ5LCA3ODQ5NiwgOTgzMzI3LCAwLCA2NjgyLCAwLCA3ODY3OSwgNjQ3MTAsIDQxNTQ3LCA5ODM2MzAsIDIwMTMsIAorICAgIDEyODI5MSwgNzg1MzAsIDc4NTMyLCA3ODUyOCwgNzg1MjksIDEyODMyLCA3ODQ5MywgODA4MSwgODM2MiwgMzUzNywgCisgICAgMTE5OTA4LCA5MTM3LCA3MTU1LCA4OTk5LCAwLCA3ODUzMywgMzQ2NiwgMCwgMCwgMTk5NiwgMCwgMzQ1MywgNjI4MiwgMCwgCisgICAgMjAwMiwgMjAwMCwgMTIwMTc1LCA1MzcsIDAsIDQxNzksIDY1MTE5LCAxOTk4LCAwLCAxODQyLCAwLCA5MjY3NCwgOTYyOCwgCisgICAgNjg0NDYsIDEyMDgxLCA5ODI2LCA2NDUwMiwgMTc2NywgMCwgMCwgMCwgMTIwMjAxLCA5ODM2NDYsIDAsIDAsIDMwNTksIAorICAgIDQ0MDI0LCAxMjAyMDQsIDExOTk1MywgOTI2OTMsIDAsIDAsIDkyNDUyLCA0MTAwLCA5MjAsIDE4MTEsIDEzNTUsIDAsIDAsIAorICAgIDM1OTIsIDEwMDc4LCAwLCAwLCAwLCA4NTkyLCA2NTg3MCwgNjgxNjQsIDEyODc5MiwgMTA3NDIsIDAsIDQyOTE4LCAxOTk0LCAKKyAgICA5MjgxLCAzMjk2LCAxMjg2NSwgMTk5NywgMTg5NSwgCiB9OwogCiAjZGVmaW5lIGNvZGVfbWFnaWMgNDcKQEAgLTE5ODE5LDcgKzE5ODM5LDcgQEAKICNkZWZpbmUgY29kZV9wb2x5IDMyNzcxCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19zdGFydCA9IDB4ZjAwMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFsaWFzZXNfZW5kID0gMHhmMDFjMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19lbmQgPSAweGYwMWM5Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lX2FsaWFzZXNbXSA9IHsKICAgICAweDAwMDAsCiAgICAgMHgwMDAwLApAQCAtMTk5ODIsNiArMjAwMDIsOCBAQAogICAgIDB4MDFBMiwKICAgICAweDAxQTMsCiAgICAgMHgwMzRGLAorICAgIDB4MDYxQywKKyAgICAweDA3MDksCiAgICAgMHgwQ0RFLAogICAgIDB4MEU5RCwKICAgICAweDBFOUYsCkBAIC0yMDAwNSw2ICsyMDAyNywxMCBAQAogICAgIDB4MjAyRiwKICAgICAweDIwNUYsCiAgICAgMHgyMDYwLAorICAgIDB4MjA2NiwKKyAgICAweDIwNjcsCisgICAgMHgyMDY4LAorICAgIDB4MjA2OSwKICAgICAweDIxMTgsCiAgICAgMHgyNDQ4LAogICAgIDB4MjQ0OSwKQEAgLTIwMDI5LDYgKzIwMDU1LDggQEAKICAgICAweEZFRkYsCiAgICAgMHhGRUZGLAogICAgIDB4RkVGRiwKKyAgICAweDEyMkQ0LAorICAgIDB4MTIyRDUsCiAgICAgMHgxRDBDNSwKICAgICAweEUwMTAwLAogICAgIDB4RTAxMDEsCkBAIC0yMDI3OCw3ICsyMDMwNiw3IEBACiB9IG5hbWVkX3NlcXVlbmNlOwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19zdGFydCA9IDB4ZjAyMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19lbmQgPSAweGYwM2E1Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lZF9zZXF1ZW5jZXNfZW5kID0gMHhmMDNhZTsKIHN0YXRpYyBjb25zdCBuYW1lZF9zZXF1ZW5jZSBuYW1lZF9zZXF1ZW5jZXNbXSA9IHsKICAgICB7MiwgezB4MDEwMCwgMHgwMzAwfX0sCiAgICAgezIsIHsweDAxMDEsIDB4MDMwMH19LApAQCAtMjAzNDksNiArMjAzNzcsMTUgQEAKICAgICB7MiwgezB4MDI1OSwgMHgwMzAxfX0sCiAgICAgezIsIHsweDAyNUEsIDB4MDMwMH19LAogICAgIHsyLCB7MHgwMjVBLCAweDAzMDF9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNjI3fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDY0OH19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2NDl9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkM2fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZDN319LAorICAgIHsyLCB7MHgwNjI2LCAweDA2Qzh9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkQwfX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZENX19LAorICAgIHsyLCB7MHgwNjQ2LCAweDA2QTl9fSwKICAgICB7MywgezB4MDk5NSwgMHgwOUNELCAweDA5Qjd9fSwKICAgICB7MiwgezB4MEI5NSwgMHgwQkNEfX0sCiAgICAgezIsIHsweDBCOTksIDB4MEJDRH19LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96aXBpbXBvcnQuYyBiL01vZHVsZXMvemlwaW1wb3J0LmMKaW5kZXggMmZlYjJhOC4uZGNlY2E1ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96aXBpbXBvcnQuYworKysgYi9Nb2R1bGVzL3ppcGltcG9ydC5jCkBAIC0xMTcsNiArMTE3LDggQEAKICAgICAgICAgaWYgKGZsZW4gPT0gLTEpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHBhdGgsIDAsIGZsZW4pOworICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhaaXBJbXBvcnRFcnJvciwgIm5vdCBhIFppcCBmaWxlIik7CkBAIC00NjksMTAgKzQ3MSwxMyBAQAogICAgIGlmIChpc3BhY2thZ2UpIHsKICAgICAgICAgLyogYWRkIF9fcGF0aF9fIHRvIHRoZSBtb2R1bGUgKmJlZm9yZSogdGhlIGNvZGUgZ2V0cwogICAgICAgICAgICBleGVjdXRlZCAqLwotICAgICAgICBQeU9iamVjdCAqcGtncGF0aCwgKmZ1bGxwYXRoOwotICAgICAgICBQeU9iamVjdCAqc3VibmFtZSA9IGdldF9zdWJuYW1lKGZ1bGxuYW1lKTsKKyAgICAgICAgUHlPYmplY3QgKnBrZ3BhdGgsICpmdWxscGF0aCwgKnN1Ym5hbWU7CiAgICAgICAgIGludCBlcnI7CiAKKyAgICAgICAgc3VibmFtZSA9IGdldF9zdWJuYW1lKGZ1bGxuYW1lKTsKKyAgICAgICAgaWYgKHN1Ym5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgZnVsbHBhdGggPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVUlYyVVJVUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5hcmNoaXZlLCBTRVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnByZWZpeCwgc3VibmFtZSk7CkBAIC04NjIsNiArODY3LDcgQEAKICAgICBsb25nIGwsIGNvdW50OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBjaGFyIG5hbWVbTUFYUEFUSExFTiArIDVdOworICAgIGNoYXIgZHVtbXlbOF07IC8qIEJ1ZmZlciB0byByZWFkIHVudXNlZCBoZWFkZXIgdmFsdWVzIGludG8gKi8KICAgICBQeU9iamVjdCAqbmFtZW9iaiA9IE5VTEw7CiAgICAgY2hhciAqcCwgZW5kb2ZfY2VudHJhbF9kaXJbMjJdOwogICAgIFB5X3NzaXplX3QgYXJjX29mZnNldDsgIC8qIEFic29sdXRlIG9mZnNldCB0byBzdGFydCBvZiB0aGUgemlwLWFyY2hpdmUuICovCkBAIC04NjksNyArODc1LDcgQEAKICAgICBjb25zdCBjaGFyICpjaGFyc2V0OwogICAgIGludCBib290c3RyYXA7CiAKLSAgICBmcCA9IF9QeV9mb3BlbihhcmNoaXZlLCAicmIiKTsKKyAgICBmcCA9IF9QeV9mb3Blbl9vYmooYXJjaGl2ZSwgInJiIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3Qgb3BlbiBaaXAgZmlsZTogJVIiLCBhcmNoaXZlKTsKQEAgLTkwNSwxNyArOTExLDI1IEBACiAKICAgICAvKiBTdGFydCBvZiBDZW50cmFsIERpcmVjdG9yeSAqLwogICAgIGNvdW50ID0gMDsKKyAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQsIDApID09IC0xKQorICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CiAgICAgZm9yICg7OykgewogICAgICAgICBQeU9iamVjdCAqdDsKICAgICAgICAgaW50IGVycjsKIAotICAgICAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQsIDApID09IC0xKSAgLyogU3RhcnQgb2YgZmlsZSBoZWFkZXIgKi8KLSAgICAgICAgICAgIGdvdG8gZnNlZWtfZXJyb3I7CisgICAgICAgIC8qIFN0YXJ0IG9mIGZpbGUgaGVhZGVyICovCiAgICAgICAgIGwgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CisgICAgICAgIGlmIChsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBpZiAobCAhPSAweDAyMDE0QjUwKQogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBCYWQ6IENlbnRyYWwgRGlyIEZpbGUgSGVhZGVyICovCi0gICAgICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCArIDgsIDApID09IC0xKQotICAgICAgICAgICAgZ290byBmc2Vla19lcnJvcjsKKworICAgICAgICAvKiBPbiBXaW5kb3dzLCBjYWxsaW5nIGZzZWVrIHRvIHNraXAgb3ZlciB0aGUgZmllbGRzIHdlIGRvbid0IHVzZSBpcworICAgICAgICBzbG93ZXIgdGhhbiByZWFkaW5nIHRoZSBkYXRhIGludG8gYSBkdW1teSBidWZmZXIgYmVjYXVzZSBmc2VlayBmbHVzaGVzCisgICAgICAgIHN0ZGlvJ3MgaW50ZXJuYWwgYnVmZmVycy4gU2VlIGlzc3VlICM4NzQ1LiAqLworICAgICAgICBpZiAoZnJlYWQoZHVtbXksIDEsIDQsIGZwKSAhPSA0KSAvKiBTa2lwIHVudXNlZCBmaWVsZHMsIGF2b2lkIGZzZWVrICovCisgICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CisKICAgICAgICAgZmxhZ3MgPSAodW5zaWduZWQgc2hvcnQpUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKICAgICAgICAgY29tcHJlc3MgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwogICAgICAgICB0aW1lID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKQEAgLTkyNCwxMiArOTM4LDE1IEBACiAgICAgICAgIGRhdGFfc2l6ZSA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKICAgICAgICAgZmlsZV9zaXplID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwogICAgICAgICBuYW1lX3NpemUgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwotICAgICAgICBoZWFkZXJfc2l6ZSA9IDQ2ICsgbmFtZV9zaXplICsKKyAgICAgICAgaGVhZGVyX3NpemUgPSBuYW1lX3NpemUgKwogICAgICAgICAgICBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApICsKICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKLSAgICAgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0ICsgNDIsIDApID09IC0xKQotICAgICAgICAgICAgZ290byBmc2Vla19lcnJvcjsKKyAgICAgICAgaWYgKGZyZWFkKGR1bW15LCAxLCA4LCBmcCkgIT0gOCkgLyogU2tpcCB1bnVzZWQgZmllbGRzLCBhdm9pZCBmc2VlayAqLworICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOwogICAgICAgICBmaWxlX29mZnNldCA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKSArIGFyY19vZmZzZXQ7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKwogICAgICAgICBpZiAobmFtZV9zaXplID4gTUFYUEFUSExFTikKICAgICAgICAgICAgIG5hbWVfc2l6ZSA9IE1BWFBBVEhMRU47CiAKQEAgLTk0MSw3ICs5NTgsOSBAQAogICAgICAgICAgICAgcCsrOwogICAgICAgICB9CiAgICAgICAgICpwID0gMDsgICAgICAgICAvKiBBZGQgdGVybWluYXRpbmcgbnVsbCBieXRlICovCi0gICAgICAgIGhlYWRlcl9vZmZzZXQgKz0gaGVhZGVyX3NpemU7CisgICAgICAgIGZvciAoOyBpIDwgaGVhZGVyX3NpemU7IGkrKykgLyogU2tpcCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyICovCisgICAgICAgICAgICBpZihnZXRjKGZwKSA9PSBFT0YpIC8qIEF2b2lkIGZzZWVrICovCisgICAgICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOwogCiAgICAgICAgIGJvb3RzdHJhcCA9IDA7CiAgICAgICAgIGlmIChmbGFncyAmIDB4MDgwMCkKQEAgLTk4OCw3ICsxMDA3LDcgQEAKICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIHppcGltcG9ydDogZm91bmQgJWxkIG5hbWVzIGluICVSXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIGFyY2hpdmUpOwogICAgIHJldHVybiBmaWxlczsKLWZzZWVrX2Vycm9yOgorZmlsZV9lcnJvcjoKICAgICBmY2xvc2UoZnApOwogICAgIFB5X1hERUNSRUYoZmlsZXMpOwogICAgIFB5X1hERUNSRUYobmFtZW9iaik7CkBAIC0xMDU1LDcgKzEwNzQsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmcCA9IF9QeV9mb3BlbihhcmNoaXZlLCAicmIiKTsKKyAgICBmcCA9IF9QeV9mb3Blbl9vYmooYXJjaGl2ZSwgInJiIik7CiAgICAgaWYgKCFmcCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSU9FcnJvciwKQEAgLTEwNzMsOSArMTA5MiwxMCBAQAogICAgIGwgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CiAgICAgaWYgKGwgIT0gMHgwNDAzNEI1MCkgewogICAgICAgICAvKiBCYWQ6IExvY2FsIEZpbGUgSGVhZGVyICovCi0gICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJiYWQgbG9jYWwgZmlsZSBoZWFkZXIgaW4gJVUiLAotICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSk7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGxvY2FsIGZpbGUgaGVhZGVyIGluICVVIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlKTsKICAgICAgICAgZmNsb3NlKGZwKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTA4Nyw2ICsxMTA3LDEwIEBACiAKICAgICBsID0gMzAgKyBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApICsKICAgICAgICAgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsgICAgICAgIC8qIGxvY2FsIGhlYWRlciBzaXplICovCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGZpbGVfb2Zmc2V0ICs9IGw7ICAgICAgICAgICAvKiBTdGFydCBvZiBmaWxlIGRhdGEgKi8KIAogICAgIGJ5dGVzX3NpemUgPSBjb21wcmVzcyA9PSAwID8gZGF0YV9zaXplIDogZGF0YV9zaXplICsgMTsKQEAgLTEyNDksNyArMTI3Myw3IEBACiB9CiAKIC8qIEdpdmVuIGEgc3RyaW5nIGJ1ZmZlciBjb250YWluaW5nIFB5dGhvbiBzb3VyY2UgY29kZSwgY29tcGlsZSBpdAotICAgcmV0dXJuIGFuZCByZXR1cm4gYSBjb2RlIG9iamVjdCBhcyBhIG5ldyByZWZlcmVuY2UuICovCisgICBhbmQgcmV0dXJuIGEgY29kZSBvYmplY3QgYXMgYSBuZXcgcmVmZXJlbmNlLiAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGNvbXBpbGVfc291cmNlKFB5T2JqZWN0ICpwYXRobmFtZSwgUHlPYmplY3QgKnNvdXJjZSkKIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cgYi9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nCmluZGV4IGYzMTBiYjAuLmYyMmFhYmEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cKKysrIGIvTW9kdWxlcy96bGliL0NoYW5nZUxvZwpAQCAtMSwxMiArMSwyNzYgQEAKIAogICAgICAgICAgICAgICAgIENoYW5nZUxvZyBmaWxlIGZvciB6bGliCiAKK0NoYW5nZXMgaW4gMS4yLjggKDI4IEFwciAyMDEzKQorLSBVcGRhdGUgY29udHJpYi9taW5pemlwL2lvd2luMzIuYyBmb3IgV2luZG93cyBSVCBbVm9sbGFudF0KKy0gRG8gbm90IGZvcmNlIFpfQ09OU1QgZm9yIEMrKworLSBDbGVhbiB1cCBjb250cmliL3ZzdHVkaW8gW1Jvp10KKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiB6bGliLmgKKy0gRml4IG1peGVkIGxpbmUgZW5kaW5ncyBpbiBjb250cmliL3ZzdHVkaW8KKworQ2hhbmdlcyBpbiAxLjIuNy4zICgxMyBBcHIgMjAxMykKKy0gRml4IHZlcnNpb24gbnVtYmVycyBhbmQgRExMIG5hbWVzIGluIGNvbnRyaWIvdnN0dWRpby8qL3psaWIucmMKKworQ2hhbmdlcyBpbiAxLjIuNy4yICgxMyBBcHIgMjAxMykKKy0gQ2hhbmdlIGNoZWNrIGZvciBhIGZvdXItYnl0ZSB0eXBlIGJhY2sgdG8gaGV4YWRlY2ltYWwKKy0gRml4IHR5cG8gaW4gd2luMzIvTWFrZWZpbGUubXNjCistIEFkZCBjYXN0cyBpbiBnendyaXRlLmMgZm9yIHBvaW50ZXIgZGlmZmVyZW5jZXMKKworQ2hhbmdlcyBpbiAxLjIuNy4xICgyNCBNYXIgMjAxMykKKy0gUmVwbGFjZSB1c2Ugb2YgdW5zYWZlIHN0cmluZyBmdW5jdGlvbnMgd2l0aCBzbnByaW50ZiBpZiBhdmFpbGFibGUKKy0gQXZvaWQgaW5jbHVkaW5nIHN0ZGRlZi5oIG9uIFdpbmRvd3MgZm9yIFpfU09MTyBjb21waWxlIFtOaWVzc2lua10KKy0gRml4IGd6Z2V0YyB1bmRlZmluZSB3aGVuIFpfUFJFRklYIHNldCBbVHVya10KKy0gRWxpbWluYXRlIHVzZSBvZiBta3RlbXAgaW4gTWFrZWZpbGUgKG5vdCBhbHdheXMgYXZhaWxhYmxlKQorLSBGaXggYnVnIGluICdGJyBtb2RlIGZvciBnem9wZW4oKQorLSBBZGQgaW5mbGF0ZUdldERpY3Rpb25hcnkoKSBmdW5jdGlvbgorLSBDb3JyZWN0IGNvbW1lbnQgaW4gZGVmbGF0ZS5oCistIFVzZSBfc25wcmludGYgZm9yIHNucHJpbnRmIGluIE1pY3Jvc29mdCBDCistIE9uIERhcndpbiwgb25seSB1c2UgL3Vzci9iaW4vbGlidG9vbCBpZiBsaWJ0b29sIGlzIG5vdCBBcHBsZQorLSBEZWxldGUgIi0tdmVyc2lvbiIgZmlsZSBpZiBjcmVhdGVkIGJ5ICJhciAtLXZlcnNpb24iIFtSaWNoYXJkIEcuXQorLSBGaXggY29uZmlndXJlIGNoZWNrIGZvciB2ZXJhY2l0eSBvZiBjb21waWxlciBlcnJvciByZXR1cm4gY29kZXMKKy0gRml4IENNYWtlIGNvbXBpbGF0aW9uIG9mIHN0YXRpYyBsaWIgZm9yIE1TVkMyMDEwIHg2NAorLSBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGluIGluZmJhY2s5LmMKKy0gRml4IGFyZ3VtZW50IGNoZWNrcyBpbiBnemxvZ19jb21wcmVzcygpIGFuZCBnemxvZ193cml0ZSgpCistIENsZWFuIHVwIHRoZSB1c2FnZSBvZiB6X2NvbnN0IGFuZCByZXNwZWN0IGNvbnN0IHVzYWdlIHdpdGhpbiB6bGliCistIENsZWFuIHVwIGV4YW1wbGVzL2d6bG9nLltjaF0gY29tcGFyaXNvbnMgb2YgZGlmZmVyZW50IHR5cGVzCistIEF2b2lkIHNoaWZ0IGVxdWFsIHRvIGJpdHMgaW4gdHlwZSAoY2F1c2VkIGVuZGxlc3MgbG9vcCkKKy0gRml4IHVuaW50aWFsaXplZCB2YWx1ZSBidWcgaW4gZ3pwdXRjKCkgaW50cm9kdWNlZCBieSBjb25zdCBwYXRjaGVzCistIEZpeCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciBpbiBleGFtcGxlcy96cmFuLmMgW05vcl0KKy0gRml4IGJ1ZyB3aGVyZSBnem9wZW4oKSwgZ3pjbG9zZSgpIHdvdWxkIHdyaXRlIGFuIGVtcHR5IGZpbGUKKy0gRml4IGJ1ZyBpbiBnemNsb3NlKCkgd2hlbiBnendyaXRlKCkgcnVucyBvdXQgb2YgbWVtb3J5CistIENoZWNrIGZvciBpbnB1dCBidWZmZXIgbWFsbG9jIGZhaWx1cmUgaW4gZXhhbXBsZXMvZ3phcHBlbmQuYworLSBBZGQgbm90ZSB0byBjb250cmliL2JsYXN0IHRvIHVzZSBiaW5hcnkgbW9kZSBpbiBzdGRpbworLSBGaXggY29tcGFyaXNvbnMgb2YgZGlmZmVyZW50bHkgc2lnbmVkIGludGVnZXJzIGluIGNvbnRyaWIvYmxhc3QKKy0gQ2hlY2sgZm9yIGludmFsaWQgY29kZSBsZW5ndGggY29kZXMgaW4gY29udHJpYi9wdWZmCistIEZpeCBzZXJpb3VzIGJ1dCB2ZXJ5IHJhcmUgZGVjb21wcmVzc2lvbiBidWcgaW4gaW5mdHJlZXMuYworLSBVcGRhdGUgaW5mbGF0ZUJhY2soKSBjb21tZW50cywgc2luY2UgaW5mbGF0ZSgpIGNhbiBiZSBmYXN0ZXIKKy0gVXNlIHVuZGVyc2NvcmVkIEkvTyBmdW5jdGlvbiBuYW1lcyBmb3IgV0lOQVBJX0ZBTUlMWQorLSBBZGQgX3RyX2ZsdXNoX2JpdHMgdG8gdGhlIGV4dGVybmFsIHN5bWJvbHMgcHJlZml4ZWQgYnkgLS16cHJlZml4CistIEFkZCBjb250cmliL3ZzdHVkaW8vdmMxMCBwcmUtYnVpbGQgc3RlcCBmb3Igc3RhdGljIG9ubHkKKy0gUXVvdGUgLS12ZXJzaW9uLXNjcmlwdCBhcmd1bWVudCBpbiBDTWFrZUxpc3RzLnR4dAorLSBEb24ndCBzcGVjaWZ5IC0tdmVyc2lvbi1zY3JpcHQgb24gQXBwbGUgcGxhdGZvcm1zIGluIENNYWtlTGlzdHMudHh0CistIEZpeCBjYXN0aW5nIGVycm9yIGluIGNvbnRyaWIvdGVzdHpsaWIvdGVzdHpsaWIuYworLSBGaXggdHlwZXMgaW4gY29udHJpYi9taW5pemlwIHRvIG1hdGNoIHJlc3VsdCBvZiBnZXRfY3JjX3RhYmxlKCkKKy0gU2ltcGxpZnkgY29udHJpYi92c3R1ZGlvL3ZjMTAgd2l0aCAnZCcgc3VmZml4CistIEFkZCBUT1Agc3VwcG9ydCB0byB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gU3Vwb3J0IGk2ODYgYW5kIGFtZDY0IGFzc2VtYmxlciBidWlsZHMgaW4gQ01ha2VMaXN0cy50eHQKKy0gRml4IHR5cG9zIGluIHRoZSB1c2Ugb2YgX0xBUkdFRklMRTY0X1NPVVJDRSBpbiB6Y29uZi5oCistIEFkZCB2YzExIGFuZCB2YzEyIGJ1aWxkIGZpbGVzIHRvIGNvbnRyaWIvdnN0dWRpbworLSBBZGQgZ3p2cHJpbnRmKCkgYXMgYW4gdW5kb2N1bWVudGVkIGZ1bmN0aW9uIGluIHpsaWIKKy0gRml4IGNvbmZpZ3VyZSBmb3IgU3VuIHNoZWxsCistIFJlbW92ZSBydW50aW1lIGNoZWNrIGluIGNvbmZpZ3VyZSBmb3IgZm91ci1ieXRlIGludGVnZXIgdHlwZQorLSBBZGQgY2FzdHMgYW5kIGNvbnN0cyB0byBlYXNlIHVzZXIgY29udmVyc2lvbiB0byBDKysKKy0gQWRkIG1hbiBwYWdlcyBmb3IgbWluaXppcCBhbmQgbWluaXVuemlwCistIEluIE1ha2VmaWxlIHVuaW5zdGFsbCwgZG9uJ3Qgcm0gaWYgcHJlY2VkaW5nIGNkIGZhaWxzCistIERvIG5vdCByZXR1cm4gWl9CVUZfRVJST1IgaWYgZGVmbGF0ZVBhcmFtKCkgaGFzIG5vdGhpbmcgdG8gd3JpdGUKKworQ2hhbmdlcyBpbiAxLjIuNyAoMiBNYXkgMjAxMikKKy0gUmVwbGFjZSB1c2Ugb2YgbWVtbW92ZSgpIHdpdGggYSBzaW1wbGUgY29weSBmb3IgcG9ydGFiaWxpdHkKKy0gVGVzdCBmb3IgZXhpc3RlbmNlIG9mIHN0cmVycm9yCistIFJlc3RvcmUgZ3pnZXRjXyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIDEuMi42CistIEZpeCBidWlsZCB3aXRoIG5vbi1HTlUgbWFrZSBvbiBTb2xhcmlzCistIFJlcXVpcmUgZ2NjIDQuMCBvciBsYXRlciBvbiBNYWMgT1MgWCB0byB1c2UgdGhlIGhpZGRlbiBhdHRyaWJ1dGUKKy0gSW5jbHVkZSB1bmlzdGQuaCBmb3IgV2F0Y29tIEMKKy0gVXNlIF9fV0FUQ09NQ19fIGluc3RlYWQgb2YgX19XQVRDT01fXworLSBEbyBub3QgdXNlIHRoZSB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBpZiBOT19WSVogZGVmaW5lZAorLSBJbXByb3ZlIHRoZSBkZXRlY3Rpb24gb2Ygbm8gaGlkZGVuIHZpc2liaWxpdHkgYXR0cmlidXRlCistIEF2b2lkIHVzaW5nIF9faW50NjQgZm9yIGdjYyBvciBzb2xvIGNvbXBpbGF0aW9uCistIENhc3QgdG8gY2hhciAqIGluIGd6cHJpbnRmIHRvIGF2b2lkIHdhcm5pbmdzIFtaaW5zZXJdCistIEZpeCBtYWtlX3Ztcy5jb20gZm9yIFZBWCBbWmluc2VyXQorLSBEb24ndCB1c2UgbGlicmFyeSBvciBidWlsdC1pbiBieXRlIHN3YXBzCistIFNpbXBsaWZ5IHRlc3QgYW5kIHVzZSBvZiBnY2MgaGlkZGVuIGF0dHJpYnV0ZQorLSBGaXggYnVnIGluIGd6Y2xvc2VfdygpIHdoZW4gZ3p3cml0ZSgpIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeQorLSBBZGQgIngiIChPX0VYQ0wpIGFuZCAiZSIgKE9fQ0xPRVhFQykgbW9kZXMgc3VwcG9ydCB0byBnem9wZW4oKQorLSBGaXggYnVnIGluIHRlc3QvbWluaWd6aXAuYyBmb3IgY29uZmlndXJlIC0tc29sbworLSBGaXggY29udHJpYi92c3R1ZGlvIHByb2plY3QgbGluayBlcnJvcnMgW01vaGFuYXRoYXNdCistIEFkZCBhYmlsaXR5IHRvIGNob29zZSB0aGUgYnVpbGRlciBpbiBtYWtlX3Ztcy5jb20gW1NjaHdlZGFdCistIEFkZCBERVNURElSIHN1cHBvcnQgdG8gbWluZ3czMiB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gRml4IGNvbW1lbnRzIGluIHdpbjMyL01ha2VmaWxlLmdjYyBmb3IgcHJvcGVyIHVzYWdlCistIEFsbG93IG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgaW5zdGFsbCBsb2NhdGlvbnMgZm9yIGNtYWtlCistIEdlbmVyYXRlIGFuZCBpbnN0YWxsIHRoZSBwa2ctY29uZmlnIGZpbGUgd2l0aCBjbWFrZQorLSBCdWlsZCBib3RoIGEgc3RhdGljIGFuZCBhIHNoYXJlZCB2ZXJzaW9uIG9mIHpsaWIgd2l0aCBjbWFrZQorLSBJbmNsdWRlIHZlcnNpb24gc3ltYm9scyBmb3IgY21ha2UgYnVpbGRzCistIElmIHVzaW5nIGNtYWtlIHdpdGggTVNWQywgYWRkIHRoZSBzb3VyY2UgZGlyZWN0b3J5IHRvIHRoZSBpbmNsdWRlcworLSBSZW1vdmUgdW5uZWVkZWQgRVhUUkFfQ0ZMQUdTIGZyb20gd2luMzIvTWFrZWZpbGUuZ2NjIFtUcnV0YV0KKy0gTW92ZSBvYnNvbGV0ZSBlbXggbWFrZWZpbGUgdG8gb2xkIFtUcnV0YV0KKy0gQWxsb3cgdGhlIHVzZSBvZiAtV3VuZGVmIHdoZW4gY29tcGlsaW5nIG9yIHVzaW5nIHpsaWIKKy0gQXZvaWQgdGhlIHVzZSBvZiB0aGUgLXUgb3B0aW9uIHdpdGggbWt0ZW1wCistIEltcHJvdmUgaW5mbGF0ZSgpIGRvY3VtZW50YXRpb24gb24gdGhlIHVzZSBvZiBaX0ZJTklTSAorLSBSZWNvZ25pemUgY2xhbmcgYXMgZ2NjCistIEFkZCBnem9wZW5fdygpIGluIFdpbmRvd3MgZm9yIHdpZGUgY2hhcmFjdGVyIHBhdGggbmFtZXMKKy0gUmVuYW1lIHpjb25mLmggaW4gQ01ha2VMaXN0cy50eHQgdG8gbW92ZSBpdCBvdXQgb2YgdGhlIHdheQorLSBBZGQgc291cmNlIGRpcmVjdG9yeSBpbiBDTWFrZUxpc3RzLnR4dCBmb3IgYnVpbGRpbmcgZXhhbXBsZXMKKy0gTG9vayBpbiBidWlsZCBkaXJlY3RvcnkgZm9yIHpsaWIucGMgaW4gQ01ha2VMaXN0cy50eHQKKy0gUmVtb3ZlIGd6ZmxhZ3MgZnJvbSB6bGlidmMuZGVmIGluIHZjOSBhbmQgdmMxMAorLSBGaXggY29udHJpYi9taW5pemlwIGNvbXBpbGF0aW9uIGluIHRoZSBNaW5HVyBlbnZpcm9ubWVudAorLSBVcGRhdGUgLi9jb25maWd1cmUgZm9yIFNvbGFyaXMsIHN1cHBvcnQgLS02NCBbTW9vbmV5XQorLSBSZW1vdmUgLVIuIGZyb20gU29sYXJpcyBzaGFyZWQgYnVpbGQgKHBvc3NpYmxlIHNlY3VyaXR5IGlzc3VlKQorLSBBdm9pZCByYWNlIGNvbmRpdGlvbiBmb3IgcGFyYWxsZWwgbWFrZSAoLWopIHJ1bm5pbmcgZXhhbXBsZQorLSBGaXggdHlwZSBtaXNtYXRjaCBiZXR3ZWVuIGdldF9jcmNfdGFibGUoKSBhbmQgY3JjX3RhYmxlCistIEZpeCBwYXJzaW5nIG9mIHZlcnNpb24gd2l0aCAiLSIgaW4gQ01ha2VMaXN0cy50eHQgW1NuaWRlciwgWmllZ2xlcl0KKy0gRml4IHRoZSBwYXRoIHRvIHpsaWIubWFwIGluIENNYWtlTGlzdHMudHh0CistIEZvcmNlIHRoZSBuYXRpdmUgbGlidG9vbCBpbiBNYWMgT1MgWCB0byBhdm9pZCBHTlUgbGlidG9vbCBbQmVlYmVdCistIEFkZCBpbnN0cnVjdGlvbnMgdG8gd2luMzIvTWFrZWZpbGUuZ2NjIGZvciBzaGFyZWQgaW5zdGFsbCBbVG9ycmldCisKK0NoYW5nZXMgaW4gMS4yLjYuMSAoMTIgRmViIDIwMTIpCistIEF2b2lkIHRoZSB1c2Ugb2YgdGhlIE9iamVjdGl2ZS1DIHJlc2VydmVkIG5hbWUgImlkIgorLSBJbmNsdWRlIGlvLmggaW4gZ3pndXRzLmggZm9yIE1pY3Jvc29mdCBjb21waWxlcnMKKy0gRml4IHByb2JsZW0gd2l0aCAuL2NvbmZpZ3VyZSAtLXByZWZpeCBhbmQgZ3pnZXRjIG1hY3JvCistIEluY2x1ZGUgZ3pfaGVhZGVyIGRlZmluaXRpb24gd2hlbiBjb21waWxpbmcgemxpYiBzb2xvCistIFB1dCBnemZsYWdzKCkgZnVuY3Rpb25hbGl0eSBiYWNrIGluIHp1dGlsLmMKKy0gQXZvaWQgbGlicmFyeSBoZWFkZXIgaW5jbHVkZSBpbiBjcmMzMi5jIGZvciBaX1NPTE8KKy0gVXNlIG5hbWUgaW4gR0NDX0NMQVNTSUMgYXMgQyBjb21waWxlciBmb3IgY292ZXJhZ2UgdGVzdGluZywgaWYgc2V0CistIE1pbm9yIGNsZWFudXAgaW4gY29udHJpYi9taW5pemlwL3ppcC5jIFtWb2xsYW50XQorLSBVcGRhdGUgbWFrZV92bXMuY29tIFtaaW5zZXJdCistIFJlbW92ZSB1bm5lY2Vzc2FyeSBnemdldGNfIGZ1bmN0aW9uCistIFVzZSBvcHRpbWl6ZWQgYnl0ZSBzd2FwIG9wZXJhdGlvbnMgZm9yIE1pY3Jvc29mdCBhbmQgR05VIFtTbnlkZXJdCistIEZpeCBtaW5vciB0eXBvIGluIHpsaWIuaCBjb21tZW50cyBbUnplc25pb3dpZWNraV0KKworQ2hhbmdlcyBpbiAxLjIuNiAoMjkgSmFuIDIwMTIpCistIFVwZGF0ZSB0aGUgUGFzY2FsIGludGVyZmFjZSBpbiBjb250cmliL3Bhc2NhbAorLSBGaXggZnVuY3Rpb24gbnVtYmVycyBmb3IgZ3pnZXRjXyBpbiB6bGlidmMuZGVmIGZpbGVzCistIEZpeCBjb25maWd1cmUuYWMgZm9yIGNvbnRyaWIvbWluaXppcCBbU2NoaWZmZXJdCistIEZpeCBsYXJnZS1lbnRyeSBkZXRlY3Rpb24gaW4gbWluaXppcCBvbiA2NC1iaXQgc3lzdGVtcyBbU2NoaWZmZXJdCistIEhhdmUgLi9jb25maWd1cmUgdXNlIHRoZSBjb21waWxlciByZXR1cm4gY29kZSBmb3IgZXJyb3IgaW5kaWNhdGlvbgorLSBGaXggQ01ha2VMaXN0cy50eHQgZm9yIGNyb3NzIGNvbXBpbGF0aW9uIFtNY0NsdXJlXQorLSBGaXggY29udHJpYi9taW5pemlwL3ppcC5jIGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcyBbRGFsc25lc10KKy0gRml4IGNvbXBpbGF0aW9uIG9mIGNvbnRyaWIvbWluaXppcCBvbiBGcmVlQlNEIFtNYXJxdWV6XQorLSBDb3JyZWN0IHN1Z2dlc3RlZCB1c2FnZXMgaW4gd2luMzIvTWFrZWZpbGUubXNjIFtTaGFjaGFyLCBIb3J2YXRoXQorLSBJbmNsdWRlIGlvLmggZm9yIFR1cmJvIEMgLyBCb3JsYW5kIEMgb24gYWxsIHBsYXRmb3JtcyBbVHJ1dGFdCistIE1ha2UgdmVyc2lvbiBleHBsaWNpdCBpbiBjb250cmliL21pbml6aXAvY29uZmlndXJlLmFjIFtCb3NtYW5zXQorLSBBdm9pZCB3YXJuaW5nIGZvciBubyBlbmNyeXB0aW9uIGluIGNvbnRyaWIvbWluaXppcC96aXAuYyBbVm9sbGFudF0KKy0gTWlub3IgY2xlYW51cCB1cCBjb250cmliL21pbml6aXAvdW56aXAuYyBbVm9sbGFudF0KKy0gRml4IGJ1ZyB3aGVuIGNvbXBpbGluZyBtaW5pemlwIHdpdGggQysrIFtWb2xsYW50XQorLSBQcm90ZWN0IGZvciBsb25nIG5hbWUgYW5kIGV4dHJhIGZpZWxkcyBpbiBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIEF2b2lkIHNvbWUgd2FybmluZ3MgaW4gY29udHJpYi9taW5pemlwIFtWb2xsYW50XQorLSBBZGQgLUkuLi8uLiAtTC4uLy4uIHRvIENGTEFHUyBmb3IgbWluaXppcCBhbmQgbWluaXVuemlwCistIEFkZCBtaXNzaW5nIGxpYnMgdG8gbWluaXppcCBsaW5rZXIgY29tbWFuZAorLSBBZGQgc3VwcG9ydCBmb3IgVlBBVEggYnVpbGRzIGluIGNvbnRyaWIvbWluaXppcAorLSBBZGQgYW4gLS1lbmFibGUtZGVtb3Mgb3B0aW9uIHRvIGNvbnRyaWIvbWluaXppcC9jb25maWd1cmUKKy0gQWRkIHRoZSBnZW5lcmF0aW9uIG9mIGNvbmZpZ3VyZS5sb2cgYnkgLi9jb25maWd1cmUKKy0gRXhpdCB3aGVuIHJlcXVpcmVkIHBhcmFtZXRlcnMgbm90IHByb3ZpZGVkIHRvIHdpbjMyL01ha2VmaWxlLmdjYworLSBIYXZlIGd6cHV0YyByZXR1cm4gdGhlIGNoYXJhY3RlciB3cml0dGVuIGluc3RlYWQgb2YgdGhlIGFyZ3VtZW50CistIFVzZSB0aGUgLW0gb3B0aW9uIG9uIGxkY29uZmlnIGZvciBCU0Qgc3lzdGVtcyBbVG9iaWFzXQorLSBDb3JyZWN0IGluIHpsaWIubWFwIHdoZW4gZGVmbGF0ZVJlc2V0S2VlcCB3YXMgYWRkZWQKKworQ2hhbmdlcyBpbiAxLjIuNS4zICgxNSBKYW4gMjAxMikKKy0gUmVzdG9yZSBnemdldGMgZnVuY3Rpb24gZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5CistIERvIG5vdCB1c2UgX2xzZWVraTY0IHVuZGVyIEJvcmxhbmQgQysrIFtUcnV0YV0KKy0gVXBkYXRlIHdpbjMyL01ha2VmaWxlLm1zYyB0byBidWlsZCB0ZXN0LyouYyBbVHJ1dGFdCistIFJlbW92ZSBvbGQvdmlzdWFsYzYgZ2l2ZW4gQ01ha2VmaWxlIGFuZCBvdGhlciBhbHRlcm5hdGl2ZXMKKy0gVXBkYXRlIEFTNDAwIGJ1aWxkIGZpbGVzIGFuZCBkb2N1bWVudGF0aW9uIFtNb25uZXJhdF0KKy0gVXBkYXRlIHdpbjMyL01ha2VmaWxlLmdjYyB0byBidWlsZCB0ZXN0LyouYyBbVHJ1dGFdCistIFBlcm1pdCBzdHJvbmdlciBmbHVzaGVzIGFmdGVyIFpfQkxPQ0sgZmx1c2hlcworLSBBdm9pZCBleHRyYW5lb3VzIGVtcHR5IGJsb2NrcyB3aGVuIGRvaW5nIGVtcHR5IGZsdXNoZXMKKy0gUGVybWl0IFpfTlVMTCBhcmd1bWVudHMgdG8gZGVmbGF0ZVBlbmRpbmcKKy0gQWxsb3cgZGVmbGF0ZVByaW1lKCkgdG8gaW5zZXJ0IGJpdHMgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cmVhbQorLSBSZW1vdmUgc2Vjb25kIGVtcHR5IHN0YXRpYyBibG9jayBmb3IgWl9QQVJUSUFMX0ZMVVNICistIFdyaXRlIG91dCBhbGwgb2YgdGhlIGF2YWlsYWJsZSBiaXRzIHdoZW4gdXNpbmcgWl9CTE9DSworLSBJbnNlcnQgdGhlIGZpcnN0IHR3byBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIGFmdGVyIGEgZmx1c2gKKworQ2hhbmdlcyBpbiAxLjIuNS4yICgxNyBEZWMgMjAxMSkKKy0gZml4IGxkIGVycm9yOiB1bmFibGUgdG8gZmluZCB2ZXJzaW9uIGRlcGVuZGVuY3kgJ1pMSUJfMS4yLjUnCistIHVzZSByZWxhdGl2ZSBzeW1saW5rcyBmb3Igc2hhcmVkIGxpYnMKKy0gQXZvaWQgc2VhcmNoaW5nIHBhc3Qgd2luZG93IGZvciBaX1JMRSBzdHJhdGVneQorLSBBc3N1cmUgdGhhdCBoaWdoLXdhdGVyIG1hcmsgaW5pdGlhbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgaW4gZGVmbGF0ZQorLSBBZGQgYXNzZXJ0aW9ucyB0byBmaWxsX3dpbmRvdygpIGluIGRlZmxhdGUuYyB0byBtYXRjaCBjb21tZW50cworLSBVcGRhdGUgcHl0aG9uIGxpbmsgaW4gUkVBRE1FCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZ3pyZWFkLmMKKy0gRml4IGJ1ZyBpbiBnemdldHMoKSBmb3IgYSBjb25jYXRlbmF0ZWQgZW1wdHkgZ3ppcCBzdHJlYW0KKy0gQ29ycmVjdCBlcnJvciBpbiBjb21tZW50IGZvciBnel9tYWtlKCkKKy0gQ2hhbmdlIGd6cmVhZCgpIGFuZCByZWxhdGVkIHRvIGlnbm9yZSBqdW5rIGFmdGVyIGd6aXAgc3RyZWFtcworLSBBbGxvdyBnenJlYWQoKSBhbmQgcmVsYXRlZCB0byBjb250aW51ZSBhZnRlciBnemNsZWFyZXJyKCkKKy0gQWxsb3cgZ3pyZXdpbmQoKSBhbmQgZ3pzZWVrKCkgYWZ0ZXIgYSBwcmVtYXR1cmUgZW5kLW9mLWZpbGUKKy0gU2ltcGxpZnkgZ3pzZWVrKCkgbm93IHRoYXQgcmF3IGFmdGVyIGd6aXAgaXMgaWdub3JlZAorLSBDaGFuZ2UgZ3pnZXRjKCkgdG8gYSBtYWNybyBmb3Igc3BlZWQgKH40MCUgc3BlZWR1cCBpbiB0ZXN0aW5nKQorLSBGaXggZ3pjbG9zZSgpIHRvIHJldHVybiB0aGUgYWN0dWFsIGVycm9yIGxhc3QgZW5jb3VudGVyZWQKKy0gQWx3YXlzIGFkZCBsYXJnZSBmaWxlIHN1cHBvcnQgZm9yIHdpbmRvd3MKKy0gSW5jbHVkZSB6Y29uZi5oIGZvciB3aW5kb3dzIGxhcmdlIGZpbGUgc3VwcG9ydAorLSBJbmNsdWRlIHpjb25mLmguY21ha2VpbiBmb3Igd2luZG93cyBsYXJnZSBmaWxlIHN1cHBvcnQKKy0gVXBkYXRlIHpjb25mLmguY21ha2VpbiBvbiBtYWtlIGRpc3RjbGVhbgorLSBNZXJnZSB2ZXN0aWdpYWwgdnNucHJpbnRmIGRldGVybWluYXRpb24gZnJvbSB6dXRpbC5oIHRvIGd6Z3V0cy5oCistIENsYXJpZnkgaG93IGd6b3BlbigpIGFwcGVuZHMgaW4gemxpYi5oIGNvbW1lbnRzCistIENvcnJlY3QgZG9jdW1lbnRhdGlvbiBvZiBnemRpcmVjdCgpIHNpbmNlIGp1bmsgYXQgZW5kIG5vdyBpZ25vcmVkCistIEFkZCBhIHRyYW5zcGFyZW50IHdyaXRlIG1vZGUgdG8gZ3pvcGVuKCkgd2hlbiAnVCcgaXMgaW4gdGhlIG1vZGUKKy0gVXBkYXRlIHB5dGhvbiBsaW5rIGluIHpsaWIgbWFuIHBhZ2UKKy0gR2V0IGluZmZpeGVkLmggYW5kIE1BS0VGSVhFRCByZXN1bHQgdG8gbWF0Y2gKKy0gQWRkIGEgLi9jb25maWcgLS1zb2xvIG9wdGlvbiB0byBtYWtlIHpsaWIgc3Vic2V0IHdpdGggbm8gbGliYXJ5IHVzZQorLSBBZGQgdW5kb2N1bWVudGVkIGluZmxhdGVSZXNldEtlZXAoKSBmdW5jdGlvbiBmb3IgQ0FCIGZpbGUgZGVjb2RpbmcKKy0gQWRkIC0tY292ZXIgb3B0aW9uIHRvIC4vY29uZmlndXJlIGZvciBnY2MgY292ZXJhZ2UgdGVzdGluZworLSBBZGQgI2RlZmluZSBaTElCX0NPTlNUIG9wdGlvbiB0byB1c2UgY29uc3QgaW4gdGhlIHpfc3RyZWFtIGludGVyZmFjZQorLSBBZGQgY29tbWVudCB0byBnemRvcGVuKCkgaW4gemxpYi5oIHRvIHVzZSBkdXAoKSB3aGVuIHVzaW5nIGZpbGVubygpCistIE5vdGUgYmVoYXZpb3Igb2YgdW5jb21wcmVzcygpIHRvIHByb3ZpZGUgYXMgbXVjaCBkYXRhIGFzIGl0IGNhbgorLSBBZGQgZmlsZXMgaW4gY29udHJpYi9taW5pemlwIHRvIGFpZCBpbiBidWlsZGluZyBsaWJtaW5pemlwCistIFNwbGl0IG9mZiBBUiBvcHRpb25zIGluIE1ha2VmaWxlLmluIGFuZCBjb25maWd1cmUKKy0gQ2hhbmdlIE9OIG1hY3JvIHRvIFpfQVJHIHRvIGF2b2lkIGFwcGxpY2F0aW9uIGNvbmZsaWN0cworLSBGYWNpbGl0YXRlIGNvbXBpbGF0aW9uIHdpdGggQm9ybGFuZCBDKysgZm9yIHByYWdtYXMgYW5kIHZzbnByaW50ZgorLSBJbmNsdWRlIGlvLmggZm9yIFR1cmJvIEMgLyBCb3JsYW5kIEMrKworLSBNb3ZlIGV4YW1wbGUuYyBhbmQgbWluaWd6aXAuYyB0byB0ZXN0LworLSBTaW1wbGlmeSBpbmNvbXBsZXRlIGNvZGUgdGFibGUgZmlsbGluZyBpbiBpbmZsYXRlX3RhYmxlKCkKKy0gUmVtb3ZlIGNvZGUgZnJvbSBpbmZsYXRlLmMgYW5kIGluZmJhY2suYyB0aGF0IGlzIGltcG9zc2libGUgdG8gZXhlY3V0ZQorLSBUZXN0IHRoZSBpbmZsYXRlIGNvZGUgd2l0aCBmdWxsIGNvdmVyYWdlCistIEFsbG93IGRlZmxhdGVTZXREaWN0aW9uYXJ5LCBpbmZsYXRlU2V0RGljdGlvbmFyeSBhdCBhbnkgdGltZSAoaW4gcmF3KQorLSBBZGQgZGVmbGF0ZVJlc2V0S2VlcCBhbmQgZml4IGluZmxhdGVSZXNldEtlZXAgdG8gcmV0YWluIGRpY3Rpb25hcnkKKy0gRml4IGd6d3JpdGUuYyB0byBhY2NvbW1vZGF0ZSByZWR1Y2VkIG1lbW9yeSB6bGliIGNvbXBpbGF0aW9uCistIEhhdmUgaW5mbGF0ZSgpIHdpdGggWl9GSU5JU0ggYXZvaWQgdGhlIGFsbG9jYXRpb24gb2YgYSB3aW5kb3cKKy0gRG8gbm90IHNldCBzdHJtLT5hZGxlciB3aGVuIGRvaW5nIHJhdyBpbmZsYXRlCistIEZpeCBnemVvZigpIHRvIGJlaGF2ZSBqdXN0IGxpa2UgZmVvZigpIHdoZW4gcmVhZCBpcyBub3QgcGFzdCBlbmQgb2YgZmlsZQorLSBGaXggYnVnIGluIGd6cmVhZC5jIHdoZW4gZW5kLW9mLWZpbGUgaXMgcmVhY2hlZAorLSBBdm9pZCB1c2Ugb2YgWl9CVUZfRVJST1IgaW4gZ3oqIGZ1bmN0aW9ucyBleGNlcHQgZm9yIHByZW1hdHVyZSBFT0YKKy0gRG9jdW1lbnQgZ3pyZWFkKCkgY2FwYWJpbGl0eSB0byByZWFkIGNvbmN1cnJlbnRseSB3cml0dGVuIGZpbGVzCistIFJlbW92ZSBoYXJkLWNvZGluZyBvZiByZXNvdXJjZSBjb21waWxlciBpbiBDTWFrZUxpc3RzLnR4dCBbQmxhbW1vXQorCitDaGFuZ2VzIGluIDEuMi41LjEgKDEwIFNlcCAyMDExKQorLSBVcGRhdGUgRkFRIGVudHJ5IG9uIHNoYXJlZCBidWlsZHMgKCMxMykKKy0gQXZvaWQgc3ltYm9saWMgYXJndW1lbnQgdG8gY2htb2QgaW4gTWFrZWZpbGUuaW4KKy0gRml4IGJ1ZyBhbmQgYWRkIGNvbnN0cyBpbiBjb250cmliL3B1ZmYgW09iZXJodW1lcl0KKy0gVXBkYXRlIGNvbnRyaWIvcHVmZi96ZXJvcy5yYXcgdGVzdCBmaWxlIHRvIGhhdmUgYWxsIGJsb2NrIHR5cGVzCistIEFkZCBmdWxsIGNvdmVyYWdlIHRlc3QgZm9yIHB1ZmYgaW4gY29udHJpYi9wdWZmL01ha2VmaWxlCistIEZpeCBzdGF0aWMtb25seS1idWlsZCBpbnN0YWxsIGluIE1ha2VmaWxlLmluCistIEZpeCBidWcgaW4gdW56R2V0Q3VycmVudEZpbGVJbmZvKCkgaW4gY29udHJpYi9taW5pemlwIFtLdW5vXQorLSBBZGQgbGliei5hIGRlcGVuZGVuY3kgdG8gc2hhcmVkIGluIE1ha2VmaWxlLmluIGZvciBwYXJhbGxlbCBidWlsZHMKKy0gU3BlbGwgb3V0ICJudW1iZXIiIChpbnN0ZWFkIG9mICJuYiIpIGluIHpsaWIuaCBmb3IgdG90YWxfaW4sIHRvdGFsX291dAorLSBSZXBsYWNlICQoLi4uKSB3aXRoIGAuLi5gIGluIGNvbmZpZ3VyZSBmb3Igbm9uLWJhc2ggc2ggW0Jvd2xlcl0KKy0gQWRkIGRhcndpbiogdG8gRGFyd2luKiBhbmQgc29sYXJpcyogdG8gU3VuT1NcIDUqIGluIGNvbmZpZ3VyZSBbR3JvZmZlbl0KKy0gQWRkIHNvbGFyaXMqIHRvIExpbnV4KiBpbiBjb25maWd1cmUgdG8gYWxsb3cgZ2NjIHVzZSBbR3JvZmZlbl0KKy0gQWRkICpic2QqIHRvIExpbnV4KiBjYXNlIGluIGNvbmZpZ3VyZSBbQmFyLUxldl0KKy0gQWRkIGluZmZhc3Qub2JqIHRvIGRlcGVuZGVuY2llcyBpbiB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiBkZWZsYXRlLmggW0tvaGxlcl0KKy0gQ2hhbmdlIGxpYnpkbGwuYSBhZ2FpbiB0byBsaWJ6LmRsbC5hICghKSBpbiB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gQWRkIHRlc3QgdG8gY29uZmlndXJlIGZvciBHTlUgQyBsb29raW5nIGZvciBnY2MgaW4gb3V0cHV0IG9mICRjYyAtdgorLSBBZGQgemxpYi5wYyBnZW5lcmF0aW9uIHRvIHdpbjMyL01ha2VmaWxlLmdjYyBbV2VpZ2VsdF0KKy0gRml4IGJ1ZyBpbiB6bGliLmggZm9yIF9GSUxFX09GRlNFVF9CSVRTIHNldCBhbmQgX0xBUkdFRklMRTY0X1NPVVJDRSBub3QKKy0gQWRkIGNvbW1lbnQgaW4gemxpYi5oIHRoYXQgYWRsZXIzMl9jb21iaW5lIHdpdGggbGVuMiA8IDAgbWFrZXMgbm8gc2Vuc2UKKy0gTWFrZSBOT19ESVZJREUgb3B0aW9uIGluIGFkbGVyMzIuYyBtdWNoIGZhc3RlciAodGhhbmtzIHRvIEpvaG4gUmVpc2VyKQorLSBNYWtlIHN0cm9uZ2VyIHRlc3QgaW4gemNvbmYuaCB0byBpbmNsdWRlIHVuaXN0ZC5oIGZvciBMRlMKKy0gQXBwbHkgRGFyd2luIHBhdGNoZXMgZm9yIDY0LWJpdCBmaWxlIG9mZnNldHMgdG8gY29udHJpYi9taW5pemlwIFtTbGFja10KKy0gRml4IHpsaWIuaCBMRlMgc3VwcG9ydCB3aGVuIFpfUFJFRklYIHVzZWQKKy0gQWRkIHVwZGF0ZWQgYXM0MDAgc3VwcG9ydCAocmVtb3ZlZCBmcm9tIG9sZCkgW01vbm5lcmF0XQorLSBBdm9pZCBkZWZsYXRlIHNlbnNpdGl2aXR5IHRvIHZvbGF0aWxlIGlucHV0IGRhdGEKKy0gQXZvaWQgZGl2aXNpb24gaW4gYWRsZXIzMl9jb21iaW5lIGZvciBOT19ESVZJREUKKy0gQ2xhcmlmeSB0aGUgdXNlIG9mIFpfRklOSVNIIHdpdGggZGVmbGF0ZUJvdW5kKCkgYW1vdW50IG9mIHNwYWNlCistIFNldCBiaW5hcnkgZm9yIG91dHB1dCBmaWxlIGluIHB1ZmYuYworLSBVc2UgdTQgdHlwZSBmb3IgY3JjX3RhYmxlIHRvIGF2b2lkIGNvbnZlcnNpb24gd2FybmluZ3MKKy0gQXBwbHkgY2FzdHMgaW4gemxpYi5oIHRvIGF2b2lkIGNvbnZlcnNpb24gd2FybmluZ3MKKy0gQWRkIE9GIHRvIHByb3RvdHlwZXMgZm9yIGFkbGVyMzJfY29tYmluZV8gYW5kIGNyYzMyX2NvbWJpbmVfIFtNaWxsZXJdCistIEltcHJvdmUgaW5mbGF0ZVN5bmMoKSBkb2N1bWVudGF0aW9uIHRvIG5vdGUgaW5kZXRlcm1pbmFuY3kKKy0gQWRkIGRlZmxhdGVQZW5kaW5nKCkgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBhbW91bnQgb2YgcGVuZGluZyBvdXRwdXQKKy0gQ29ycmVjdCB0aGUgc3BlbGxpbmcgb2YgInNwZWNpZmljYXRpb24iIGluIEZBUSBbUmFuZGVycy1QZWhyc29uXQorLSBBZGQgYSBjaGVjayBpbiBjb25maWd1cmUgZm9yIHN0ZGFyZy5oLCB1c2UgZm9yIGd6cHJpbnRmKCkKKy0gQ2hlY2sgdGhhdCBwb2ludGVycyBmaXQgaW4gaW50cyB3aGVuIGd6cHJpbnQoKSBjb21waWxlZCBvbGQgc3R5bGUKKy0gQWRkIGR1bW15IG5hbWUgYmVmb3JlICQoU0hBUkVETElCVikgaW4gTWFrZWZpbGUgW0Jhci1MZXYsIEJvd2xlcl0KKy0gRGVsZXRlIGxpbmUgaW4gY29uZmlndXJlIHRoYXQgYWRkcyAtTC4gbGliei5hIHRvIExERkxBR1MgW1dlaWdlbHRdCistIEFkZCBkZWJ1ZyByZWNvcmRzIGluIGFzc21lYmxlciBjb2RlIFtMb25kZXJdCistIFVwZGF0ZSBSRkMgcmVmZXJlbmNlcyB0byB1c2UgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvLi4uIFtMaV0KKy0gQWRkIC0tYXJjaHMgb3B0aW9uLCB1c2Ugb2YgbGlidG9vbCB0byBjb25maWd1cmUgZm9yIE1hYyBPUyBYIFtCb3JzdGVsXQorCiBDaGFuZ2VzIGluIDEuMi41ICgxOSBBcHIgMjAxMCkKIC0gRGlzYWJsZSB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBpbiB3aW4zMi9NYWtlZmlsZS5nY2MgW0Jhci1MZXZdCiAtIERlZmF1bHQgdG8gbGliZGlyIGFzIHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW05pZWRlcl0KIC0gVXBkYXRlIGNvcHlyaWdodCBkYXRlcyBvbiBtb2RpZmllZCBzb3VyY2UgZmlsZXMKIC0gVXBkYXRlIHRyZWVzLmMgdG8gYmUgYWJsZSB0byBnZW5lcmF0ZSBtb2RpZmllZCB0cmVlcy5oCiAtIEV4aXQgY29uZmlndXJlIGZvciBNaW5HVywgc3VnZ2VzdGluZyB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gQ2hlY2sgZm9yIE5VTEwgcGF0aCBpbiBnel9vcGVuIFtIb211cmx1XQogCiBDaGFuZ2VzIGluIDEuMi40LjUgKDE4IEFwciAyMDEwKQogLSBTZXQgc2hhcmVkbGliZGlyIGluIGNvbmZpZ3VyZSBbVG9yb2tdCkBAIC0yNjEsNyArNTI1LDcgQEAKIC0gQ2xlYXIgYnl0ZXMgYWZ0ZXIgZGVmbGF0ZSBsb29rYWhlYWQgdG8gYXZvaWQgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YQogLSBDaGFuZ2UgYSBsaW1pdCBpbiBpbmZ0cmVlcy5jIHRvIGJlIG1vcmUgdHJhbnNwYXJlbnQgdG8gQ292ZXJpdHkgUHJldmVudAogLSBVcGRhdGUgd2luMzIvemxpYi5kZWYgd2l0aCBleHBvcnRlZCBzeW1ib2xzIGZyb20gemxpYi5oCi0tIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gemxpYi5oIFtXaWxsZW1dCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3JzIGluIHpsaWIuaCBbV2lsbGVtLCBTb2JyYWRvXQogLSBBbGxvdyBaX0JMT0NLIGZvciBkZWZsYXRlKCkgdG8gZm9yY2UgYSBuZXcgYmxvY2sKIC0gQWxsb3cgbmVnYXRpdmUgYml0cyBpbiBpbmZsYXRlUHJpbWUoKSB0byBkZWxldGUgZXhpc3RpbmcgYml0IGJ1ZmZlcgogLSBBZGQgWl9UUkVFUyBmbHVzaCBvcHRpb24gdG8gaW5mbGF0ZSgpIHRvIHJldHVybiBhdCBlbmQgb2YgdHJlZXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9GQVEgYi9Nb2R1bGVzL3psaWIvRkFRCmluZGV4IDFhMjI3NTAuLjk5YjdjZjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9GQVEKKysrIGIvTW9kdWxlcy96bGliL0ZBUQpAQCAtNDQsOCArNDQsOCBAQAogCiAgNi4gV2hlcmUncyB0aGUgemxpYiBkb2N1bWVudGF0aW9uIChtYW4gcGFnZXMsIGV0Yy4pPwogCi0gICAgSXQncyBpbiB6bGliLmggLiAgRXhhbXBsZXMgb2YgemxpYiB1c2FnZSBhcmUgaW4gdGhlIGZpbGVzIGV4YW1wbGUuYyBhbmQKLSAgICBtaW5pZ3ppcC5jLCB3aXRoIG1vcmUgaW4gZXhhbXBsZXMvIC4KKyAgICBJdCdzIGluIHpsaWIuaCAuICBFeGFtcGxlcyBvZiB6bGliIHVzYWdlIGFyZSBpbiB0aGUgZmlsZXMgdGVzdC9leGFtcGxlLmMKKyAgICBhbmQgdGVzdC9taW5pZ3ppcC5jLCB3aXRoIG1vcmUgaW4gZXhhbXBsZXMvIC4KIAogIDcuIFdoeSBkb24ndCB5b3UgdXNlIEdOVSBhdXRvY29uZiBvciBsaWJ0b29sIG9yIC4uLj8KIApAQCAtODQsOCArODQsMTAgQEAKIAogMTMuIEhvdyBjYW4gSSBtYWtlIGEgVW5peCBzaGFyZWQgbGlicmFyeT8KIAotICAgIG1ha2UgY2xlYW4KLSAgICAuL2NvbmZpZ3VyZSAtcworICAgIEJ5IGRlZmF1bHQgYSBzaGFyZWQgKGFuZCBhIHN0YXRpYykgbGlicmFyeSBpcyBidWlsdCBmb3IgVW5peC4gIFNvOgorCisgICAgbWFrZSBkaXN0Y2xlYW4KKyAgICAuL2NvbmZpZ3VyZQogICAgIG1ha2UKIAogMTQuIEhvdyBkbyBJIGluc3RhbGwgYSBzaGFyZWQgemxpYiBsaWJyYXJ5IG9uIFVuaXg/CkBAIC0zMjUsNyArMzI3LDcgQEAKICAgICBjb3JyZWN0bHkgcG9pbnRzIHRvIHRoZSB6bGliIHNwZWNpZmljYXRpb24gaW4gUkZDIDE5NTAgZm9yIHRoZSAiZGVmbGF0ZSIKICAgICB0cmFuc2ZlciBlbmNvZGluZywgdGhlcmUgaGF2ZSBiZWVuIHJlcG9ydHMgb2Ygc2VydmVycyBhbmQgYnJvd3NlcnMgdGhhdAogICAgIGluY29ycmVjdGx5IHByb2R1Y2Ugb3IgZXhwZWN0IHJhdyBkZWZsYXRlIGRhdGEgcGVyIHRoZSBkZWZsYXRlCi0gICAgc3BlY2ZpY2lhdGlvbiBpbiBSRkMgMTk1MSwgbW9zdCBub3RhYmx5IE1pY3Jvc29mdC4gIFNvIGV2ZW4gdGhvdWdoIHRoZQorICAgIHNwZWNpZmljYXRpb24gaW4gUkZDIDE5NTEsIG1vc3Qgbm90YWJseSBNaWNyb3NvZnQuICBTbyBldmVuIHRob3VnaCB0aGUKICAgICAiZGVmbGF0ZSIgdHJhbnNmZXIgZW5jb2RpbmcgdXNpbmcgdGhlIHpsaWIgZm9ybWF0IHdvdWxkIGJlIHRoZSBtb3JlCiAgICAgZWZmaWNpZW50IGFwcHJvYWNoIChhbmQgaW4gZmFjdCBleGFjdGx5IHdoYXQgdGhlIHpsaWIgZm9ybWF0IHdhcyBkZXNpZ25lZAogICAgIGZvciksIHVzaW5nIHRoZSAiZ3ppcCIgdHJhbnNmZXIgZW5jb2RpbmcgaXMgcHJvYmFibHkgbW9yZSByZWxpYWJsZSBkdWUgdG8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9JTkRFWCBiL01vZHVsZXMvemxpYi9JTkRFWAppbmRleCBmNmM1MWNhLi4yYmEwNjQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvSU5ERVgKKysrIGIvTW9kdWxlcy96bGliL0lOREVYCkBAIC03LDYgKzcsOSBAQAogUkVBRE1FICAgICAgICAgIGd1ZXNzIHdoYXQKIGNvbmZpZ3VyZSAgICAgICBjb25maWd1cmUgc2NyaXB0IGZvciBVbml4CiBtYWtlX3Ztcy5jb20gICAgbWFrZWZpbGUgZm9yIFZNUwordGVzdC9leGFtcGxlLmMgIHpsaWIgdXNhZ2VzIGV4YW1wbGVzIGZvciBidWlsZCB0ZXN0aW5nCit0ZXN0L21pbmlnemlwLmMgbWluaW1hbCBnemlwLWxpa2UgZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGQgdGVzdGluZwordGVzdC9pbmZjb3Zlci5jIGluZiouYyBjb2RlIGNvdmVyYWdlIGZvciBidWlsZCBjb3ZlcmFnZSB0ZXN0aW5nCiB0cmVlYnVpbGQueG1sICAgWE1MIGRlc2NyaXB0aW9uIG9mIHNvdXJjZSBmaWxlIGRlcGVuZGVuY2llcwogemNvbmYuaC5jbWFrZWluIHpjb25mLmggdGVtcGxhdGUgZm9yIGNtYWtlCiB6Y29uZi5oLmluICAgICAgemNvbmYuaCB0ZW1wbGF0ZSBmb3IgY29uZmlndXJlCkBAIC0xNCw5ICsxNywxMSBAQAogemxpYi4zLnBkZiAgICAgIE1hbiBwYWdlIGluIFBERiBmb3JtYXQKIHpsaWIubWFwICAgICAgICBMaW51eCBzeW1ib2wgaW5mb3JtYXRpb24KIHpsaWIucGMuaW4gICAgICBUZW1wbGF0ZSBmb3IgcGtnLWNvbmZpZyBkZXNjcmlwdG9yCit6bGliLnBjLmNtYWtlaW4gemxpYi5wYyB0ZW1wbGF0ZSBmb3IgY21ha2UKIHpsaWIyYW5zaSAgICAgICBwZXJsIHNjcmlwdCB0byBjb252ZXJ0IHNvdXJjZSBmaWxlcyBmb3IgQysrIGNvbXBpbGF0aW9uCiAKIGFtaWdhLyAgICAgICAgICBtYWtlZmlsZXMgZm9yIEFtaWdhIFNBUyBDCithczQwMC8gICAgICAgICAgbWFrZWZpbGVzIGZvciBBUy80MDAKIGRvYy8gICAgICAgICAgICBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXRzIGFuZCBhbGdvcml0aG1zCiBtc2Rvcy8gICAgICAgICAgbWFrZWZpbGVzIGZvciBNU0RPUwogbmludGVuZG9kcy8gICAgIG1ha2VmaWxlIGZvciBOaW50ZW5kbyBEUwpAQCAtNTYsMTAgKzYxLDggQEAKIHp1dGlsLmMKIHp1dGlsLmgKIAotICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBmb3Igc2FtcGxlIHByb2dyYW1zOgotZXhhbXBsZS5jCi1taW5pZ3ppcC5jCi1TZWUgZXhhbXBsZXMvUkVBRE1FLmV4YW1wbGVzIGZvciBtb3JlCisgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGZvciBzYW1wbGUgcHJvZ3JhbXMKK1NlZSBleGFtcGxlcy9SRUFETUUuZXhhbXBsZXMKIAotICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkIGNvbnRyaWJ1dGlvbiBieSB0aGlyZCBwYXJ0aWVzCisgICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQgY29udHJpYnV0aW9ucyBieSB0aGlyZCBwYXJ0aWVzCiBTZWUgY29udHJpYi9SRUFETUUuY29udHJpYgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL01ha2VmaWxlLmluIGIvTW9kdWxlcy96bGliL01ha2VmaWxlLmluCmluZGV4IDViMTViZDAuLmM2MWFhMzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbgorKysgYi9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4KQEAgLTEsNSArMSw1IEBACiAjIE1ha2VmaWxlIGZvciB6bGliCi0jIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHksIE1hcmsgQWRsZXIKICMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogCiAjIFRvIGNvbXBpbGUgYW5kIHRlc3QsIHR5cGU6CkBAIC0zMiwxMSArMzIsMTIgQEAKIAogU1RBVElDTElCPWxpYnouYQogU0hBUkVETElCPWxpYnouc28KLVNIQVJFRExJQlY9bGliei5zby4xLjIuNQorU0hBUkVETElCVj1saWJ6LnNvLjEuMi44CiBTSEFSRURMSUJNPWxpYnouc28uMQogTElCUz0kKFNUQVRJQ0xJQikgJChTSEFSRURMSUJWKQogCi1BUj1hciByYworQVI9YXIKK0FSRkxBR1M9cmMKIFJBTkxJQj1yYW5saWIKIExEQ09ORklHPWxkY29uZmlnCiBMRFNIQVJFRExJQkM9LWxjCkBAIC01MywxMSArNTQsMTMgQEAKIG1hbjNkaXIgPSAke21hbmRpcn0vbWFuMwogcGtnY29uZmlnZGlyID0gJHtsaWJkaXJ9L3BrZ2NvbmZpZwogCi1PQkpDID0gYWRsZXIzMi5vIGNvbXByZXNzLm8gY3JjMzIubyBkZWZsYXRlLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gXAotCWd6d3JpdGUubyBpbmZiYWNrLm8gaW5mZmFzdC5vIGluZmxhdGUubyBpbmZ0cmVlcy5vIHRyZWVzLm8gdW5jb21wci5vIHp1dGlsLm8KK09CSlogPSBhZGxlcjMyLm8gY3JjMzIubyBkZWZsYXRlLm8gaW5mYmFjay5vIGluZmZhc3QubyBpbmZsYXRlLm8gaW5mdHJlZXMubyB0cmVlcy5vIHp1dGlsLm8KK09CSkcgPSBjb21wcmVzcy5vIHVuY29tcHIubyBnemNsb3NlLm8gZ3psaWIubyBnenJlYWQubyBnendyaXRlLm8KK09CSkMgPSAkKE9CSlopICQoT0JKRykKIAotUElDX09CSkMgPSBhZGxlcjMyLmxvIGNvbXByZXNzLmxvIGNyYzMyLmxvIGRlZmxhdGUubG8gZ3pjbG9zZS5sbyBnemxpYi5sbyBnenJlYWQubG8gXAotCWd6d3JpdGUubG8gaW5mYmFjay5sbyBpbmZmYXN0LmxvIGluZmxhdGUubG8gaW5mdHJlZXMubG8gdHJlZXMubG8gdW5jb21wci5sbyB6dXRpbC5sbworUElDX09CSlogPSBhZGxlcjMyLmxvIGNyYzMyLmxvIGRlZmxhdGUubG8gaW5mYmFjay5sbyBpbmZmYXN0LmxvIGluZmxhdGUubG8gaW5mdHJlZXMubG8gdHJlZXMubG8genV0aWwubG8KK1BJQ19PQkpHID0gY29tcHJlc3MubG8gdW5jb21wci5sbyBnemNsb3NlLmxvIGd6bGliLmxvIGd6cmVhZC5sbyBnendyaXRlLmxvCitQSUNfT0JKQyA9ICQoUElDX09CSlopICQoUElDX09CSkcpCiAKICMgdG8gdXNlIHRoZSBhc20gY29kZTogbWFrZSBPQkpBPW1hdGNoLm8sIFBJQ19PQkpBPW1hdGNoLmxvCiBPQkpBID0KQEAgLTgwLDM1ICs4Myw0OSBAQAogdGVzdDogYWxsIHRlc3RzdGF0aWMgdGVzdHNoYXJlZAogCiB0ZXN0c3RhdGljOiBzdGF0aWMKLQlAaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXAgfCAuL21pbmlnemlwIC1kICYmIC4vZXhhbXBsZTsgdGhlbiBcCisJQFRNUFNUPXRtcHN0XyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXAgfCAuL21pbmlnemlwIC1kICYmIC4vZXhhbXBsZSAkJFRNUFNUIDsgdGhlbiBcCiAJICBlY2hvICcJCSoqKiB6bGliIHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IEZBSUxFRCAqKionOyBmYWxzZTsgXAotCWZpCi0JLUBybSAtZiBmb28uZ3oKKwlmaTsgXAorCXJtIC1mICQkVE1QU1QKIAogdGVzdHNoYXJlZDogc2hhcmVkCiAJQExEX0xJQlJBUllfUEFUSD1gcHdkYDokKExEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWV9QQVRIOyBcCiAJTERfTElCUkFSWU4zMl9QQVRIPWBwd2RgOiQoTERfTElCUkFSWU4zMl9QQVRIKSA7IGV4cG9ydCBMRF9MSUJSQVJZTjMyX1BBVEg7IFwKIAlEWUxEX0xJQlJBUllfUEFUSD1gcHdkYDokKERZTERfTElCUkFSWV9QQVRIKSA7IGV4cG9ydCBEWUxEX0xJQlJBUllfUEFUSDsgXAogCVNITElCX1BBVEg9YHB3ZGA6JChTSExJQl9QQVRIKSA7IGV4cG9ydCBTSExJQl9QQVRIOyBcCi0JaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXBzaCB8IC4vbWluaWd6aXBzaCAtZCAmJiAuL2V4YW1wbGVzaDsgdGhlbiBcCisJVE1QU0g9dG1wc2hfJCQ7IFwKKwlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcHNoIHwgLi9taW5pZ3ppcHNoIC1kICYmIC4vZXhhbXBsZXNoICQkVE1QU0g7IHRoZW4gXAogCSAgZWNobyAnCQkqKiogemxpYiBzaGFyZWQgdGVzdCBPSyAqKionOyBcCiAJZWxzZSBcCiAJICBlY2hvICcJCSoqKiB6bGliIHNoYXJlZCB0ZXN0IEZBSUxFRCAqKionOyBmYWxzZTsgXAotCWZpCi0JLUBybSAtZiBmb28uZ3oKKwlmaTsgXAorCXJtIC1mICQkVE1QU0gKIAogdGVzdDY0OiBhbGw2NAotCUBpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcDY0IHwgLi9taW5pZ3ppcDY0IC1kICYmIC4vZXhhbXBsZTY0OyB0aGVuIFwKKwlAVE1QNjQ9dG1wNjRfJCQ7IFwKKwlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcDY0IHwgLi9taW5pZ3ppcDY0IC1kICYmIC4vZXhhbXBsZTY0ICQkVE1QNjQ7IHRoZW4gXAogCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBPSyAqKionOyBcCiAJZWxzZSBcCiAJICBlY2hvICcJCSoqKiB6bGliIDY0LWJpdCB0ZXN0IEZBSUxFRCAqKionOyBmYWxzZTsgXAotCWZpCi0JLUBybSAtZiBmb28uZ3oKKwlmaTsgXAorCXJtIC1mICQkVE1QNjQKKworaW5mY292ZXIubzogdGVzdC9pbmZjb3Zlci5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L2luZmNvdmVyLmMKKworaW5mY292ZXI6IGluZmNvdmVyLm8gbGliei5hCisJJChDQykgJChDRkxBR1MpIC1vICRAIGluZmNvdmVyLm8gbGliei5hCisKK2NvdmVyOiBpbmZjb3ZlcgorCXJtIC1mICouZ2NkYQorCS4vaW5mY292ZXIKKwlnY292IGluZiouYwogCiBsaWJ6LmE6ICQoT0JKUykKLQkkKEFSKSAkQCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCiAJLUAgKCQoUkFOTElCKSAkQCB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKIAogbWF0Y2gubzogbWF0Y2guUwpAQCAtMTIzLDExICsxNDAsMTcgQEAKIAltdiBfbWF0Y2gubyBtYXRjaC5sbwogCXJtIC1mIF9tYXRjaC5zCiAKLWV4YW1wbGU2NC5vOiBleGFtcGxlLmMgemxpYi5oIHpjb25mLmgKLQkkKENDKSAkKENGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCBleGFtcGxlLmMKK2V4YW1wbGUubzogdGVzdC9leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvZXhhbXBsZS5jCiAKLW1pbmlnemlwNjQubzogbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAotCSQoQ0MpICQoQ0ZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAIG1pbmlnemlwLmMKK21pbmlnemlwLm86IHRlc3QvbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLWMgLW8gJEAgdGVzdC9taW5pZ3ppcC5jCisKK2V4YW1wbGU2NC5vOiB0ZXN0L2V4YW1wbGUuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCB0ZXN0L2V4YW1wbGUuYworCittaW5pZ3ppcDY0Lm86IHRlc3QvbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCB0ZXN0L21pbmlnemlwLmMKIAogLlNVRkZJWEVTOiAubG8KIApAQCAtMTM2LDcgKzE1OSw3IEBACiAJJChDQykgJChTRkxBR1MpIC1EUElDIC1jIC1vIG9ianMvJCoubyAkPAogCS1AbXYgb2Jqcy8kKi5vICRACiAKLSQoU0hBUkVETElCVik6ICQoUElDX09CSlMpCitwbGFjZWJvICQoU0hBUkVETElCVik6ICQoUElDX09CSlMpIGxpYnouYQogCSQoTERTSEFSRUQpICQoU0ZMQUdTKSAtbyAkQCAkKFBJQ19PQkpTKSAkKExEU0hBUkVETElCQykgJChMREZMQUdTKQogCXJtIC1mICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pCiAJbG4gLXMgJEAgJChTSEFSRURMSUIpCkBAIC0xNjgsMTQgKzE5MSwxNiBAQAogCS1AaWYgWyAhIC1kICQoREVTVERJUikkKG1hbjNkaXIpICAgICAgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChtYW4zZGlyKTsgZmkKIAktQGlmIFsgISAtZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQocGtnY29uZmlnZGlyKTsgZmkKIAljcCAkKFNUQVRJQ0xJQikgJChERVNURElSKSQobGliZGlyKQotCWNwICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKQotCWNkICQoREVTVERJUikkKGxpYmRpcik7IGNobW9kIHU9cncsZ289ciAkKFNUQVRJQ0xJQikKLQktQChjZCAkKERFU1RESVIpJChsaWJkaXIpOyAkKFJBTkxJQikgbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQotCS1AY2QgJChERVNURElSKSQoc2hhcmVkbGliZGlyKTsgaWYgdGVzdCAiJChTSEFSRURMSUJWKSIgLWEgLWYgJChTSEFSRURMSUJWKTsgdGhlbiBcCi0JICBjaG1vZCA3NTUgJChTSEFSRURMSUJWKTsgXAotCSAgcm0gLWYgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSk7IFwKLQkgIGxuIC1zICQoU0hBUkVETElCVikgJChTSEFSRURMSUIpOyBcCi0JICBsbiAtcyAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCTSk7IFwKKwljaG1vZCA2NDQgJChERVNURElSKSQobGliZGlyKS8kKFNUQVRJQ0xJQikKKwktQCgkKFJBTkxJQikgJChERVNURElSKSQobGliZGlyKS9saWJ6LmEgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCisJLUBpZiB0ZXN0IC1uICIkKFNIQVJFRExJQlYpIjsgdGhlbiBcCisJICBjcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcik7IFwKKwkgIGVjaG8gImNwICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKSI7IFwKKwkgIGNobW9kIDc1NSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCVik7IFwKKwkgIGVjaG8gImNobW9kIDc1NSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCVikiOyBcCisJICBybSAtZiAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKKwkgIGxuIC1zICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQik7IFwKKwkgIGxuIC1zICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCiAJICAoJChMRENPTkZJRykgfHwgdHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAogCWZpCiAJY3AgemxpYi4zICQoREVTVERJUikkKG1hbjNkaXIpCkBAIC0xOTEsMjIgKzIxNiwyNSBAQAogCWNobW9kIDY0NCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS96bGliLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvemNvbmYuaAogCiB1bmluc3RhbGw6Ci0JY2QgJChERVNURElSKSQoaW5jbHVkZWRpcik7IHJtIC1mIHpsaWIuaCB6Y29uZi5oCi0JY2QgJChERVNURElSKSQobGliZGlyKTsgcm0gLWYgbGliei5hOyBcCi0JaWYgdGVzdCAiJChTSEFSRURMSUJWKSIgLWEgLWYgJChTSEFSRURMSUJWKTsgdGhlbiBcCisJY2QgJChERVNURElSKSQoaW5jbHVkZWRpcikgJiYgcm0gLWYgemxpYi5oIHpjb25mLmgKKwljZCAkKERFU1RESVIpJChsaWJkaXIpICYmIHJtIC1mIGxpYnouYTsgXAorCWlmIHRlc3QgLW4gIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAogCSAgcm0gLWYgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKTsgXAogCWZpCi0JY2QgJChERVNURElSKSQobWFuM2Rpcik7IHJtIC1mIHpsaWIuMwotCWNkICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcik7IHJtIC1mIHpsaWIucGMKKwljZCAkKERFU1RESVIpJChtYW4zZGlyKSAmJiBybSAtZiB6bGliLjMKKwljZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpICYmIHJtIC1mIHpsaWIucGMKIAogZG9jczogemxpYi4zLnBkZgogCiB6bGliLjMucGRmOiB6bGliLjMKIAlncm9mZiAtbWFuZG9jIC1mIEggLVQgcHMgemxpYi4zIHwgcHMycGRmIC0gemxpYi4zLnBkZgogCi16Y29uZi5oLmluOiB6Y29uZi5oLmNtYWtlaW4KLQlzZWQgIi9eI2NtYWtlZGVmaW5lL0QiIDwgemNvbmYuaC5jbWFrZWluID4gemNvbmYuaC5pbgotCXRvdWNoIC1yIHpjb25mLmguY21ha2VpbiB6Y29uZi5oLmluCit6Y29uZi5oLmNtYWtlaW46IHpjb25mLmguaW4KKwktQCBURU1QRklMRT16Y29uZmhfJCQ7IFwKKwllY2hvICIvI2RlZmluZSBaQ09ORl9ILyBhXFxcXFxuI2NtYWtlZGVmaW5lIFpfUFJFRklYXFxcXFxuI2NtYWtlZGVmaW5lIFpfSEFWRV9VTklTVERfSFxuIiA+PiAkJFRFTVBGSUxFICYmXAorCXNlZCAtZiAkJFRFTVBGSUxFIHpjb25mLmguaW4gPiB6Y29uZi5oLmNtYWtlaW4gJiZcCisJdG91Y2ggLXIgemNvbmYuaC5pbiB6Y29uZi5oLmNtYWtlaW4gJiZcCisJcm0gJCRURU1QRklMRQogCiB6Y29uZjogemNvbmYuaC5pbgogCWNwIC1wIHpjb25mLmguaW4gemNvbmYuaApAQCAtMjE2LDEzICsyNDQsMTYgQEAKIAlybSAtZiAqLm8gKi5sbyAqfiBcCiAJICAgZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQoRVhFKSBleGFtcGxlc2gkKEVYRSkgbWluaWd6aXBzaCQoRVhFKSBcCiAJICAgZXhhbXBsZTY0JChFWEUpIG1pbmlnemlwNjQkKEVYRSkgXAorCSAgIGluZmNvdmVyIFwKIAkgICBsaWJ6LiogZm9vLmd6IHNvX2xvY2F0aW9ucyBcCiAJICAgX21hdGNoLnMgbWFrZXRyZWUgY29udHJpYi9pbmZiYWNrOS8qLm8KIAlybSAtcmYgb2JqcworCXJtIC1mICouZ2NkYSAqLmdjbm8gKi5nY292CisJcm0gLWYgY29udHJpYi9pbmZiYWNrOS8qLmdjZGEgY29udHJpYi9pbmZiYWNrOS8qLmdjbm8gY29udHJpYi9pbmZiYWNrOS8qLmdjb3YKIAogbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCi1kaXN0Y2xlYW46IGNsZWFuIHpjb25mIGRvY3MKLQlybSAtZiBNYWtlZmlsZSB6bGliLnBjCitkaXN0Y2xlYW46IGNsZWFuIHpjb25mIHpjb25mLmguY21ha2VpbiBkb2NzCisJcm0gLWYgTWFrZWZpbGUgemxpYi5wYyBjb25maWd1cmUubG9nCiAJLUBybSAtZiAuRFNfU3RvcmUKIAktQHByaW50ZiAnYWxsOlxuXHQtQGVjaG8gIlBsZWFzZSB1c2UgLi9jb25maWd1cmUgZmlyc3QuICBUaGFuayB5b3UuIlxuJyA+IE1ha2VmaWxlCiAJLUBwcmludGYgJ1xuZGlzdGNsZWFuOlxuXHRtYWtlIC1mIE1ha2VmaWxlLmluIGRpc3RjbGVhblxuJyA+PiBNYWtlZmlsZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL1JFQURNRSBiL01vZHVsZXMvemxpYi9SRUFETUUKaW5kZXggZDQyMTliZi4uNWNhOWQxMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL1JFQURNRQorKysgYi9Nb2R1bGVzL3psaWIvUkVBRE1FCkBAIC0xLDIyICsxLDIyIEBACiBaTElCIERBVEEgQ09NUFJFU1NJT04gTElCUkFSWQogCi16bGliIDEuMi41IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4gIEFsbCB0aGUgY29kZSBpcworemxpYiAxLjIuOCBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKIHRocmVhZCBzYWZlLiAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcwogKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dCAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZSBmb3JtYXQpCi1hbmQgcmZjMTk1Mi50eHQgKGd6aXAgZm9ybWF0KS4KK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MSAoZGVmbGF0ZSBmb3JtYXQpIGFuZAorcmZjMTk1MiAoZ3ppcCBmb3JtYXQpLgogCiBBbGwgZnVuY3Rpb25zIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIHpsaWIuaAogKHZvbHVudGVlciB0byB3cml0ZSBtYW4gcGFnZXMgd2VsY29tZSwgY29udGFjdCB6bGliQGd6aXAub3JnKS4gIEEgdXNhZ2UgZXhhbXBsZQotb2YgdGhlIGxpYnJhcnkgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUgZXhhbXBsZS5jIHdoaWNoIGFsc28gdGVzdHMgdGhhdCB0aGUgbGlicmFyeQotaXMgd29ya2luZyBjb3JyZWN0bHkuICBBbm90aGVyIGV4YW1wbGUgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUgbWluaWd6aXAuYy4gIFRoZQotY29tcHJlc3Npb24gbGlicmFyeSBpdHNlbGYgaXMgY29tcG9zZWQgb2YgYWxsIHNvdXJjZSBmaWxlcyBleGNlcHQgZXhhbXBsZS5jIGFuZAotbWluaWd6aXAuYy4KK29mIHRoZSBsaWJyYXJ5IGlzIGdpdmVuIGluIHRoZSBmaWxlIHRlc3QvZXhhbXBsZS5jIHdoaWNoIGFsc28gdGVzdHMgdGhhdAordGhlIGxpYnJhcnkgaXMgd29ya2luZyBjb3JyZWN0bHkuICBBbm90aGVyIGV4YW1wbGUgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUKK3Rlc3QvbWluaWd6aXAuYy4gIFRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGl0c2VsZiBpcyBjb21wb3NlZCBvZiBhbGwgc291cmNlCitmaWxlcyBpbiB0aGUgcm9vdCBkaXJlY3RvcnkuCiAKIFRvIGNvbXBpbGUgYWxsIGZpbGVzIGFuZCBydW4gdGhlIHRlc3QgcHJvZ3JhbSwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZ2l2ZW4gYXQKIHRoZSB0b3Agb2YgTWFrZWZpbGUuaW4uICBJbiBzaG9ydCAiLi9jb25maWd1cmU7IG1ha2UgdGVzdCIsIGFuZCBpZiB0aGF0IGdvZXMKLXdlbGwsICJtYWtlIGluc3RhbGwiIHNob3VsZCB3b3JrIGZvciBtb3N0IGZsYXZvcnMgb2YgVW5peC4gIEZvciBXaW5kb3dzLCB1c2Ugb25lCi1vZiB0aGUgc3BlY2lhbCBtYWtlZmlsZXMgaW4gd2luMzIvIG9yIGNvbnRyaWIvdnN0dWRpby8gLiAgRm9yIFZNUywgdXNlCit3ZWxsLCAibWFrZSBpbnN0YWxsIiBzaG91bGQgd29yayBmb3IgbW9zdCBmbGF2b3JzIG9mIFVuaXguICBGb3IgV2luZG93cywgdXNlCitvbmUgb2YgdGhlIHNwZWNpYWwgbWFrZWZpbGVzIGluIHdpbjMyLyBvciBjb250cmliL3ZzdHVkaW8vIC4gIEZvciBWTVMsIHVzZQogbWFrZV92bXMuY29tLgogCiBRdWVzdGlvbnMgYWJvdXQgemxpYiBzaG91bGQgYmUgc2VudCB0byA8emxpYkBnemlwLm9yZz4sIG9yIHRvIEdpbGxlcyBWb2xsYW50CkBAIC0zMSw3ICszMSw3IEBACiBpc3N1ZSBvZiBEci4gIERvYmIncyBKb3VybmFsOyBhIGNvcHkgb2YgdGhlIGFydGljbGUgaXMgYXZhaWxhYmxlIGF0CiBodHRwOi8vbWFya25lbHNvbi51cy8xOTk3LzAxLzAxL3psaWItZW5naW5lLyAuCiAKLVRoZSBjaGFuZ2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuNSBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSBDaGFuZ2VMb2cuCitUaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4yLjggYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgogCiBVbnN1cHBvcnRlZCB0aGlyZCBwYXJ0eSBjb250cmlidXRpb25zIGFyZSBwcm92aWRlZCBpbiBkaXJlY3RvcnkgY29udHJpYi8gLgogCkBAIC00NCw3ICs0NCw3IEBACiAKIEEgUHl0aG9uIGludGVyZmFjZSB0byB6bGliIHdyaXR0ZW4gYnkgQS5NLiBLdWNobGluZyA8YW1rQGFtay5jYT4gaXMKIGF2YWlsYWJsZSBpbiBQeXRob24gMS41IGFuZCBsYXRlciB2ZXJzaW9ucywgc2VlCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2xpYi9tb2R1bGUtemxpYi5odG1sIC4KK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS96bGliLmh0bWwgLgogCiB6bGliIGlzIGJ1aWx0IGludG8gdGNsOiBodHRwOi8vd2lraS50Y2wudGsvNDYxMCAuCiAKQEAgLTg0LDcgKzg0LDcgQEAKIAogQ29weXJpZ2h0IG5vdGljZToKIAotIChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9hZGxlcjMyLmMgYi9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jCmluZGV4IDY1YWQ2YTUuLmE4NjhmMDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9hZGxlcjMyLmMKKysrIGIvTW9kdWxlcy96bGliL2FkbGVyMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGFkbGVyMzIuYyAtLSBjb21wdXRlIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhIGRhdGEgc3RyZWFtCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNyBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMSBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOSw5ICs5LDkgQEAKIAogI2RlZmluZSBsb2NhbCBzdGF0aWMKIAotbG9jYWwgdUxvbmcgYWRsZXIzMl9jb21iaW5lXyh1TG9uZyBhZGxlcjEsIHVMb25nIGFkbGVyMiwgel9vZmY2NF90IGxlbjIpOworbG9jYWwgdUxvbmcgYWRsZXIzMl9jb21iaW5lXyBPRigodUxvbmcgYWRsZXIxLCB1TG9uZyBhZGxlcjIsIHpfb2ZmNjRfdCBsZW4yKSk7CiAKLSNkZWZpbmUgQkFTRSA2NTUyMVVMICAgIC8qIGxhcmdlc3QgcHJpbWUgc21hbGxlciB0aGFuIDY1NTM2ICovCisjZGVmaW5lIEJBU0UgNjU1MjEgICAgICAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLwogI2RlZmluZSBOTUFYIDU1NTIKIC8qIE5NQVggaXMgdGhlIGxhcmdlc3QgbiBzdWNoIHRoYXQgMjU1bihuKzEpLzIgKyAobisxKShCQVNFLTEpIDw9IDJeMzItMSAqLwogCkBAIC0yMSwzOSArMjEsNDQgQEAKICNkZWZpbmUgRE84KGJ1ZixpKSAgRE80KGJ1ZixpKTsgRE80KGJ1ZixpKzQpOwogI2RlZmluZSBETzE2KGJ1ZikgICBETzgoYnVmLDApOyBETzgoYnVmLDgpOwogCi0vKiB1c2UgTk9fRElWSURFIGlmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IGRvIGRpdmlzaW9uIGluIGhhcmR3YXJlICovCisvKiB1c2UgTk9fRElWSURFIGlmIHlvdXIgcHJvY2Vzc29yIGRvZXMgbm90IGRvIGRpdmlzaW9uIGluIGhhcmR3YXJlIC0tCisgICB0cnkgaXQgYm90aCB3YXlzIHRvIHNlZSB3aGljaCBpcyBmYXN0ZXIgKi8KICNpZmRlZiBOT19ESVZJREUKLSMgIGRlZmluZSBNT0QoYSkgXAorLyogbm90ZSB0aGF0IHRoaXMgYXNzdW1lcyBCQVNFIGlzIDY1NTIxLCB3aGVyZSA2NTUzNiAlIDY1NTIxID09IDE1CisgICAodGhhbmsgeW91IHRvIEpvaG4gUmVpc2VyIGZvciBwb2ludGluZyB0aGlzIG91dCkgKi8KKyMgIGRlZmluZSBDSE9QKGEpIFwKICAgICBkbyB7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTYpKSBhIC09IChCQVNFIDw8IDE2KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxNSkpIGEgLT0gKEJBU0UgPDwgMTUpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE0KSkgYSAtPSAoQkFTRSA8PCAxNCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTMpKSBhIC09IChCQVNFIDw8IDEzKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMikpIGEgLT0gKEJBU0UgPDwgMTIpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDExKSkgYSAtPSAoQkFTRSA8PCAxMSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTApKSBhIC09IChCQVNFIDw8IDEwKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA5KSkgYSAtPSAoQkFTRSA8PCA5KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA4KSkgYSAtPSAoQkFTRSA8PCA4KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA3KSkgYSAtPSAoQkFTRSA8PCA3KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA2KSkgYSAtPSAoQkFTRSA8PCA2KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA1KSkgYSAtPSAoQkFTRSA8PCA1KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA0KSkgYSAtPSAoQkFTRSA8PCA0KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAzKSkgYSAtPSAoQkFTRSA8PCAzKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAyKSkgYSAtPSAoQkFTRSA8PCAyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxKSkgYSAtPSAoQkFTRSA8PCAxKTsgXAorICAgICAgICB1bnNpZ25lZCBsb25nIHRtcCA9IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZVTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwgNCkgLSB0bXA7IFwKKyAgICB9IHdoaWxlICgwKQorIyAgZGVmaW5lIE1PRDI4KGEpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgQ0hPUChhKTsgXAogICAgICAgICBpZiAoYSA+PSBCQVNFKSBhIC09IEJBU0U7IFwKICAgICB9IHdoaWxlICgwKQotIyAgZGVmaW5lIE1PRDQoYSkgXAorIyAgZGVmaW5lIE1PRChhKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDQpKSBhIC09IChCQVNFIDw8IDQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDMpKSBhIC09IChCQVNFIDw8IDMpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDIpKSBhIC09IChCQVNFIDw8IDIpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEpKSBhIC09IChCQVNFIDw8IDEpOyBcCisgICAgICAgIENIT1AoYSk7IFwKKyAgICAgICAgTU9EMjgoYSk7IFwKKyAgICB9IHdoaWxlICgwKQorIyAgZGVmaW5lIE1PRDYzKGEpIFwKKyAgICBkbyB7IC8qIHRoaXMgYXNzdW1lcyBhIGlzIG5vdCBuZWdhdGl2ZSAqLyBcCisgICAgICAgIHpfb2ZmNjRfdCB0bXAgPSBhID4+IDMyOyBcCisgICAgICAgIGEgJj0gMHhmZmZmZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDgpIC0gKHRtcCA8PCA1KSArIHRtcDsgXAorICAgICAgICB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwgNCkgLSB0bXA7IFwKKyAgICAgICAgdG1wID0gYSA+PiAxNjsgXAorICAgICAgICBhICY9IDB4ZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCiAgICAgICAgIGlmIChhID49IEJBU0UpIGEgLT0gQkFTRTsgXAogICAgIH0gd2hpbGUgKDApCiAjZWxzZQogIyAgZGVmaW5lIE1PRChhKSBhICU9IEJBU0UKLSMgIGRlZmluZSBNT0Q0KGEpIGEgJT0gQkFTRQorIyAgZGVmaW5lIE1PRDI4KGEpIGEgJT0gQkFTRQorIyAgZGVmaW5lIE1PRDYzKGEpIGEgJT0gQkFTRQogI2VuZGlmCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTkyLDcgKzk3LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoYWRsZXIgPj0gQkFTRSkKICAgICAgICAgICAgIGFkbGVyIC09IEJBU0U7Ci0gICAgICAgIE1PRDQoc3VtMik7ICAgICAgICAgICAgIC8qIG9ubHkgYWRkZWQgc28gbWFueSBCQVNFJ3MgKi8KKyAgICAgICAgTU9EMjgoc3VtMik7ICAgICAgICAgICAgLyogb25seSBhZGRlZCBzbyBtYW55IEJBU0UncyAqLwogICAgICAgICByZXR1cm4gYWRsZXIgfCAoc3VtMiA8PCAxNik7CiAgICAgfQogCkBAIC0xMzcsOCArMTQyLDEzIEBACiAgICAgdW5zaWduZWQgbG9uZyBzdW0yOwogICAgIHVuc2lnbmVkIHJlbTsKIAorICAgIC8qIGZvciBuZWdhdGl2ZSBsZW4sIHJldHVybiBpbnZhbGlkIGFkbGVyMzIgYXMgYSBjbHVlIGZvciBkZWJ1Z2dpbmcgKi8KKyAgICBpZiAobGVuMiA8IDApCisgICAgICAgIHJldHVybiAweGZmZmZmZmZmVUw7CisKICAgICAvKiB0aGUgZGVyaXZhdGlvbiBvZiB0aGlzIGZvcm11bGEgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlciAqLwotICAgIHJlbSA9ICh1bnNpZ25lZCkobGVuMiAlIEJBU0UpOworICAgIE1PRDYzKGxlbjIpOyAgICAgICAgICAgICAgICAvKiBhc3N1bWVzIGxlbjIgPj0gMCAqLworICAgIHJlbSA9ICh1bnNpZ25lZClsZW4yOwogICAgIHN1bTEgPSBhZGxlcjEgJiAweGZmZmY7CiAgICAgc3VtMiA9IHJlbSAqIHN1bTE7CiAgICAgTU9EKHN1bTIpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQgYi9Nb2R1bGVzL3psaWIvYWxnb3JpdGhtLnR4dAppbmRleCBiMDIyZGRlLi5jOTdmNDk1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvYWxnb3JpdGhtLnR4dAorKysgYi9Nb2R1bGVzL3psaWIvYWxnb3JpdGhtLnR4dApAQCAtMTIxLDcgKzEyMSw3IEBACiBrYnl0ZXMuICBZb3UgY2FuIGltYWdpbmUgdGhhdCBmaWxsaW5nIGluIGEgMl4xNSBlbnRyeSB0YWJsZSBmb3IgYSAxNS1iaXQgY29kZQogd291bGQgdGFrZSB0b28gbG9uZyBpZiB5b3UncmUgb25seSBkZWNvZGluZyBzZXZlcmFsIHRob3VzYW5kIHN5bWJvbHMuICBBdCB0aGUKIG90aGVyIGV4dHJlbWUsIHlvdSBjb3VsZCBtYWtlIGEgbmV3IHRhYmxlIGZvciBldmVyeSBiaXQgaW4gdGhlIGNvZGUuICBJbiBmYWN0LAotdGhhdCdzIGVzc2VudGlhbGx5IGEgSHVmZm1hbiB0cmVlLiAgQnV0IHRoZW4geW91IHNwZW5kIHR3byBtdWNoIHRpbWUKK3RoYXQncyBlc3NlbnRpYWxseSBhIEh1ZmZtYW4gdHJlZS4gIEJ1dCB0aGVuIHlvdSBzcGVuZCB0b28gbXVjaCB0aW1lCiB0cmF2ZXJzaW5nIHRoZSB0cmVlIHdoaWxlIGRlY29kaW5nLCBldmVuIGZvciBzaG9ydCBzeW1ib2xzLgogCiBTbyB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIHRoZSBmaXJzdCBsb29rdXAgdGFibGUgaXMgYSB0cmFkZSBvZiB0aGUgdGltZSB0bwpAQCAtMjA2LDQgKzIwNiw0IEBACiBwcC4gMzM3LTM0My4KIAogYGBERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbicnIGF2YWlsYWJsZSBpbgotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MS50eHQKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jb21wcmVzcy5jIGIvTW9kdWxlcy96bGliL2NvbXByZXNzLmMKaW5kZXggZWE0ZGZiZS4uNmU5NzYyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2NvbXByZXNzLmMKKysrIGIvTW9kdWxlcy96bGliL2NvbXByZXNzLmMKQEAgLTI5LDcgKzI5LDcgQEAKICAgICB6X3N0cmVhbSBzdHJlYW07CiAgICAgaW50IGVycjsKIAotICAgIHN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilzb3VyY2U7CisgICAgc3RyZWFtLm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKXNvdXJjZTsKICAgICBzdHJlYW0uYXZhaWxfaW4gPSAodUludClzb3VyY2VMZW47CiAjaWZkZWYgTUFYU0VHXzY0SwogICAgIC8qIENoZWNrIGZvciBzb3VyY2UgPiA2NEsgb24gMTYtYml0IG1hY2hpbmU6ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY29uZmlndXJlIGIvTW9kdWxlcy96bGliL2NvbmZpZ3VyZQppbmRleCBiZDllZGQyLi5iNzdhOGE4IDEwMDc1NQotLS0gYS9Nb2R1bGVzL3psaWIvY29uZmlndXJlCisrKyBiL01vZHVsZXMvemxpYi9jb25maWd1cmUKQEAgLTEzLDM5ICsxMyw1MiBAQAogIyBJZiB5b3UgaGF2ZSBwcm9ibGVtcywgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUyBiZWZvcmUgcmVwb3J0aW5nCiAjIGFuIGVycm9yLgogCisjIHN0YXJ0IG9mZiBjb25maWd1cmUubG9nCitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gJDAgJCogPj4gY29uZmlndXJlLmxvZworZGF0ZSA+PiBjb25maWd1cmUubG9nCisKKyMgc2V0IGNvbW1hbmQgcHJlZml4IGZvciBjcm9zcy1jb21waWxhdGlvbgogaWYgWyAtbiAiJHtDSE9TVH0iIF07IHRoZW4KLSAgICB1bmFtZT0iJChlY2hvICIke0NIT1NUfSIgfCBzZWQgLWUgJ3MvXlteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCktLiokL1wxLycpIgorICAgIHVuYW1lPSJgZWNobyAiJHtDSE9TVH0iIHwgc2VkIC1lICdzL15bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpLS4qJC9cMS8nYCIKICAgICBDUk9TU19QUkVGSVg9IiR7Q0hPU1R9LSIKIGZpCiAKKyMgZGVzdGluYXRpb24gbmFtZSBmb3Igc3RhdGljIGxpYnJhcnkKIFNUQVRJQ0xJQj1saWJ6LmEKLUxERkxBR1M9IiR7TERGTEFHU30gLUwuICR7U1RBVElDTElCfSIKKworIyBleHRyYWN0IHpsaWIgdmVyc2lvbiBudW1iZXJzIGZyb20gemxpYi5oCiBWRVI9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoLipcKSIuKi9cMS9wJyA8IHpsaWIuaGAKIFZFUjM9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXFwuWzAtOV0qXFwuWzAtOV0qXCkuKi9cMS9wJyA8IHpsaWIuaGAKIFZFUjI9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXFwuWzAtOV0qXClcXC4uKi9cMS9wJyA8IHpsaWIuaGAKIFZFUjE9YHNlZCAtbiAtZSAnL1ZFUlNJT04gIi9zLy4qIlwoWzAtOV0qXClcXC4uKi9cMS9wJyA8IHpsaWIuaGAKKworIyBlc3RhYmxpc2ggY29tbWFuZHMgZm9yIGxpYnJhcnkgYnVpbGRpbmcKIGlmICIke0NST1NTX1BSRUZJWH1hciIgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyAtbHQgMTI2OyB0aGVuCiAgICAgQVI9JHtBUi0iJHtDUk9TU19QUkVGSVh9YXIifQotICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke0FSfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke0FSfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgICAgQVI9JHtBUi0iYXIifQotICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke0FSfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke0FSfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBmaQotQVJfUkM9IiR7QVJ9IHJjIgorQVJGTEFHUz0ke0FSRkxBR1MtInJjIn0KIGlmICIke0NST1NTX1BSRUZJWH1yYW5saWIiIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIFJBTkxJQj0ke1JBTkxJQi0iJHtDUk9TU19QUkVGSVh9cmFubGliIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtSQU5MSUJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7UkFOTElCfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgICAgUkFOTElCPSR7UkFOTElCLSJyYW5saWIifQogZmkKIGlmICIke0NST1NTX1BSRUZJWH1ubSIgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyAtbHQgMTI2OyB0aGVuCiAgICAgTk09JHtOTS0iJHtDUk9TU19QUkVGSVh9bm0ifQotICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke05NfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke05NfSB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgICAgTk09JHtOTS0ibm0ifQogZmkKKworIyBzZXQgZGVmYXVsdHMgYmVmb3JlIHByb2Nlc3NpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMKIExEQ09ORklHPSR7TERDT05GSUctImxkY29uZmlnIn0KIExEU0hBUkVETElCQz0iJHtMRFNIQVJFRExJQkMtLWxjfSIKK0FSQ0hTPQogcHJlZml4PSR7cHJlZml4LS91c3IvbG9jYWx9CiBleGVjX3ByZWZpeD0ke2V4ZWNfcHJlZml4LScke3ByZWZpeH0nfQogbGliZGlyPSR7bGliZGlyLScke2V4ZWNfcHJlZml4fS9saWInfQpAQCAtNTQsMjAgKzY3LDM5IEBACiBtYW5kaXI9JHttYW5kaXItJyR7cHJlZml4fS9zaGFyZS9tYW4nfQogc2hhcmVkX2V4dD0nLnNvJwogc2hhcmVkPTEKK3NvbG89MAorY292ZXI9MAogenByZWZpeD0wCit6Y29uc3Q9MAogYnVpbGQ2ND0wCiBnY2M9MAogb2xkX2NjPSIkQ0MiCiBvbGRfY2ZsYWdzPSIkQ0ZMQUdTIgorT0JKQz0nJChPQkpaKSAkKE9CSkcpJworUElDX09CSkM9JyQoUElDX09CSlopICQoUElDX09CSkcpJwogCisjIGxlYXZlIHRoaXMgc2NyaXB0LCBvcHRpb25hbGx5IGluIGEgYmFkIHdheQorbGVhdmUoKQoreworICBpZiB0ZXN0ICIkKiIgIT0gIjAiOyB0aGVuCisgICAgZWNobyAiKiogJDAgYWJvcnRpbmcuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGZpCisgIHJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5nY25vIC4vLS12ZXJzaW9uCisgIGVjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gPj4gY29uZmlndXJlLmxvZworICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGV4aXQgJDEKK30KKworIyBwcm9jZXNzIGNvbW1hbmQgbGluZSBvcHRpb25zCiB3aGlsZSB0ZXN0ICQjIC1nZSAxCiBkbwogY2FzZSAiJDEiIGluCiAgICAgLWgqIHwgLS1oZWxwKQotICAgICAgZWNobyAndXNhZ2U6JwotICAgICAgZWNobyAnICBjb25maWd1cmUgWy0tenByZWZpeF0gWy0tcHJlZml4PVBSRUZJWF0gIFstLWVwcmVmaXg9RVhQUkVGSVhdJwotICAgICAgZWNobyAnICAgIFstLXN0YXRpY10gWy0tNjRdIFstLWxpYmRpcj1MSUJESVJdIFstLXNoYXJlZGxpYmRpcj1MSUJESVJdJwotICAgICAgZWNobyAnICAgIFstLWluY2x1ZGVkaXI9SU5DTFVERURJUl0nCisgICAgICBlY2hvICd1c2FnZTonIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLWNvbnN0XSBbLS16cHJlZml4XSBbLS1wcmVmaXg9UFJFRklYXSAgWy0tZXByZWZpeD1FWFBSRUZJWF0nIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgICBbLS1zdGF0aWNdIFstLTY0XSBbLS1saWJkaXI9TElCRElSXSBbLS1zaGFyZWRsaWJkaXI9TElCRElSXScgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAnICAgIFstLWluY2x1ZGVkaXI9SU5DTFVERURJUl0gWy0tYXJjaHM9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0Il0nIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICAgICAgZXhpdCAwIDs7CiAgICAgLXAqPSogfCAtLXByZWZpeD0qKSBwcmVmaXg9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKICAgICAtZSo9KiB8IC0tZXByZWZpeD0qKSBleGVjX3ByZWZpeD1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OwpAQCAtODEsNTEgKzExMyw4OCBAQAogICAgIC1pKiB8IC0taW5jbHVkZWRpcikgaW5jbHVkZWRpcj0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKICAgICAtcyogfCAtLXNoYXJlZCB8IC0tZW5hYmxlLXNoYXJlZCkgc2hhcmVkPTE7IHNoaWZ0IDs7CiAgICAgLXQgfCAtLXN0YXRpYykgc2hhcmVkPTA7IHNoaWZ0IDs7CisgICAgLS1zb2xvKSBzb2xvPTE7IHNoaWZ0IDs7CisgICAgLS1jb3ZlcikgY292ZXI9MTsgc2hpZnQgOzsKICAgICAteiogfCAtLXpwcmVmaXgpIHpwcmVmaXg9MTsgc2hpZnQgOzsKICAgICAtNiogfCAtLTY0KSBidWlsZDY0PTE7IHNoaWZ0IDs7Ci0gICAgLS1zeXNjb25mZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLXN5c2NvbmZkaXIiOyBzaGlmdCA7OwotICAgIC0tbG9jYWxzdGF0ZWRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1sb2NhbHN0YXRlZGlyIjsgc2hpZnQgOzsKLSAgICAqKSBlY2hvICJ1bmtub3duIG9wdGlvbjogJDEiOyBlY2hvICIkMCAtLWhlbHAgZm9yIGhlbHAiOyBleGl0IDEgOzsKKyAgICAtYSo9KiB8IC0tYXJjaHM9KikgQVJDSFM9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKKyAgICAtLXN5c2NvbmZkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tc3lzY29uZmRpciIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZzsgc2hpZnQgOzsKKyAgICAtLWxvY2Fsc3RhdGVkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tbG9jYWxzdGF0ZWRpciIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZzsgc2hpZnQgOzsKKyAgICAtYyogfCAtLWNvbnN0KSB6Y29uc3Q9MTsgc2hpZnQgOzsKKyAgICAqKQorICAgICAgZWNobyAidW5rbm93biBvcHRpb246ICQxIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIkMCAtLWhlbHAgZm9yIGhlbHAiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGxlYXZlIDE7OwogICAgIGVzYWMKIGRvbmUKIAorIyB0ZW1wb3JhcnkgZmlsZSBuYW1lCiB0ZXN0PXp0ZXN0JCQKKworIyBwdXQgYXJndW1lbnRzIGluIGxvZywgYWxzbyBwdXQgdGVzdCBmaWxlIGluIGxvZyBpZiB1c2VkIGluIGFyZ3VtZW50cworc2hvdygpCit7CisgIGNhc2UgIiQqIiBpbgorICAgICokdGVzdC5jKikKKyAgICAgIGVjaG8gPT09ICR0ZXN0LmMgPT09ID4+IGNvbmZpZ3VyZS5sb2cKKyAgICAgIGNhdCAkdGVzdC5jID4+IGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gPT09ID4+IGNvbmZpZ3VyZS5sb2c7OworICBlc2FjCisgIGVjaG8gJCogPj4gY29uZmlndXJlLmxvZworfQorCisjIGNoZWNrIGZvciBnY2MgdnMuIGNjIGFuZCBzZXQgY29tcGlsZSBhbmQgbGluayBmbGFncyBiYXNlZCBvbiB0aGUgc3lzdGVtIGlkZW50aWZpZWQgYnkgdW5hbWUKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKIGV4dGVybiBpbnQgZ2V0Y2hhcigpOwogaW50IGhlbGxvKCkge3JldHVybiBnZXRjaGFyKCk7fQogRU9GCiAKLXRlc3QgLXogIiRDQyIgJiYgZWNobyBDaGVja2luZyBmb3IgJHtDUk9TU19QUkVGSVh9Z2NjLi4uCit0ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yICR7Q1JPU1NfUFJFRklYfWdjYy4uLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBjYz0ke0NDLSR7Q1JPU1NfUFJFRklYfWdjY30KIGNmbGFncz0ke0NGTEFHUy0iLU8zIn0KICMgdG8gZm9yY2UgdGhlIGFzbSB2ZXJzaW9uIHVzZTogQ0ZMQUdTPSItTzMgLURBU01WIiAuL2NvbmZpZ3VyZQogY2FzZSAiJGNjIiBpbgogICAqZ2NjKikgZ2NjPTEgOzsKKyAgKmNsYW5nKikgZ2NjPTEgOzsKK2VzYWMKK2Nhc2UgYCRjYyAtdiAyPiYxYCBpbgorICAqZ2NjKikgZ2NjPTEgOzsKIGVzYWMKIAotaWYgdGVzdCAiJGdjYyIgLWVxIDEgJiYgKCRjYyAtYyAkY2ZsYWdzICR0ZXN0LmMpIDI+L2Rldi9udWxsOyB0aGVuCitzaG93ICRjYyAtYyAkdGVzdC5jCitpZiB0ZXN0ICIkZ2NjIiAtZXEgMSAmJiAoJGNjIC1jICR0ZXN0LmMpID4+IGNvbmZpZ3VyZS5sb2cgMj4mMTsgdGhlbgorICBlY2hvIC4uLiB1c2luZyBnY2MgPj4gY29uZmlndXJlLmxvZwogICBDQz0iJGNjIgorICBDRkxBR1M9IiR7Q0ZMQUdTLS1PM30gJHtBUkNIU30iCiAgIFNGTEFHUz0iJHtDRkxBR1MtLU8zfSAtZlBJQyIKLSAgQ0ZMQUdTPSIke0NGTEFHUy0tTzN9IgorICBMREZMQUdTPSIke0xERkxBR1N9ICR7QVJDSFN9IgogICBpZiB0ZXN0ICRidWlsZDY0IC1lcSAxOyB0aGVuCiAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLW02NCIKICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtbTY0IgogICBmaQogICBpZiB0ZXN0ICIke1pMSUJHQ0NXQVJOfSIgPSAiWUVTIjsgdGhlbgotICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLXBlZGFudGljIgorICAgIGlmIHRlc3QgIiR6Y29uc3QiIC1lcSAxOyB0aGVuCisgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1XY2FzdC1xdWFsIC1wZWRhbnRpYyAtRFpMSUJfQ09OU1QiCisgICAgZWxzZQorICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdleHRyYSAtcGVkYW50aWMiCisgICAgZmkKICAgZmkKICAgaWYgdGVzdCAteiAiJHVuYW1lIjsgdGhlbgogICAgIHVuYW1lPWAodW5hbWUgLXMgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAKICAgZmkKICAgY2FzZSAiJHVuYW1lIiBpbgotICBMaW51eCogfCBsaW51eCogfCBHTlUgfCBHTlUvKiB8ICpCU0QgfCBEcmFnb25GbHkpIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZlcnNpb24tc2NyaXB0LHpsaWIubWFwIn0gOzsKKyAgTGludXgqIHwgbGludXgqIHwgR05VIHwgR05VLyogfCBzb2xhcmlzKikKKyAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsemxpYi5tYXAifSA7OworICAqQlNEIHwgKmJzZCogfCBEcmFnb25GbHkpCisgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZlcnNpb24tc2NyaXB0LHpsaWIubWFwIn0KKyAgICAgICAgTERDT05GSUc9ImxkY29uZmlnIC1tIiA7OwogICBDWUdXSU4qIHwgQ3lnd2luKiB8IGN5Z3dpbiogfCBPUy8yKikKICAgICAgICAgRVhFPScuZXhlJyA7OwotICBNSU5HVyp8bWluZ3cqKQorICBNSU5HVyogfCBtaW5ndyopCiAjIHRlbXBvcmFyeSBieXBhc3MKICAgICAgICAgcm0gLWYgJHRlc3QuW2NvXSAkdGVzdCAkdGVzdCRzaGFyZWRfZXh0Ci0gICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugd2luMzIvTWFrZWZpbGUuZ2NjIGluc3RlYWQuIgotICAgICAgICBleGl0IDEKKyAgICAgICAgZWNobyAiUGxlYXNlIHVzZSB3aW4zMi9NYWtlZmlsZS5nY2MgaW5zdGVhZC4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgICAgbGVhdmUgMQogICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCJ9CiAgICAgICAgIExEU0hBUkVETElCQz0iIgogICAgICAgICBFWEU9Jy5leGUnIDs7CkBAIC0xNDIsMTcgKzIxMSwyNSBAQAogICAgICAgICAgICAgICAgICBzaGFyZWRfZXh0PScuc2wnCiAgICAgICAgICAgICAgICAgIFNIQVJFRExJQj0nbGliei5zbCcgOzsKICAgICAgICAgIGVzYWMgOzsKLSAgRGFyd2luKikgICBzaGFyZWRfZXh0PScuZHlsaWInCisgIERhcndpbiogfCBkYXJ3aW4qKQorICAgICAgICAgICAgIHNoYXJlZF9leHQ9Jy5keWxpYicKICAgICAgICAgICAgICBTSEFSRURMSUI9bGlieiRzaGFyZWRfZXh0CiAgICAgICAgICAgICAgU0hBUkVETElCVj1saWJ6LiRWRVIkc2hhcmVkX2V4dAogICAgICAgICAgICAgIFNIQVJFRExJQk09bGliei4kVkVSMSRzaGFyZWRfZXh0Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1keW5hbWljbGliIC1pbnN0YWxsX25hbWUgJGxpYmRpci8kU0hBUkVETElCTSAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICRWRVIxIC1jdXJyZW50X3ZlcnNpb24gJFZFUjMifSA7OworICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICRsaWJkaXIvJFNIQVJFRExJQk0gLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkVkVSMSAtY3VycmVudF92ZXJzaW9uICRWRVIzIn0KKyAgICAgICAgICAgICBpZiBsaWJ0b29sIC1WIDI+JjEgfCBncmVwIEFwcGxlID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgIEFSPSJsaWJ0b29sIgorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgQVI9Ii91c3IvYmluL2xpYnRvb2wiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBUkZMQUdTPSItbyIgOzsKICAgKikgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifSA7OwogICBlc2FjCiBlbHNlCiAgICMgZmluZCBzeXN0ZW0gbmFtZSBhbmQgY29ycmVzcG9uZGluZyBjYyBvcHRpb25zCiAgIENDPSR7Q0MtY2N9CiAgIGdjYz0wCisgIGVjaG8gLi4uIHVzaW5nICRDQyA+PiBjb25maWd1cmUubG9nCiAgIGlmIHRlc3QgLXogIiR1bmFtZSI7IHRoZW4KICAgICB1bmFtZT1gKHVuYW1lIC1zciB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYAogICBmaQpAQCAtMTgzLDE5ICsyNjAsMzQgQEAKICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi00IC1PIn0KICAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyJ9CiAgICAgICAgICAgICAgUkFOTElCPSR7UkFOTElCLSJ0cnVlIn0KLSAgICAgICAgICAgICBBUl9SQz0iY2MgLUEiIDs7CisgICAgICAgICAgICAgQVI9ImNjIgorICAgICAgICAgICAgIEFSRkxBR1M9Ii1BIiA7OwogICBTQ09fU1ZcIDMuMiopIFNGTEFHUz0ke0NGTEFHUy0iLU8zIC1keSAtS1BJQyAifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8zIn0KICAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtZHkgLUtQSUMgLUcifSA7OwotICBTdW5PU1wgNSopIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIn0KLSAgICAgICAgIGNhc2UgYCh1bmFtZSAtbSB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYCBpbgotICAgICAgICAgaTg2KikKLSAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi14cGVudGl1bSAtZmFzdCAtS1BJQyAtUi4ifQotICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLXhwZW50aXVtIC1mYXN0In0gOzsKLSAgICAgICAgICopCi0gICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAteGNnOTIgLUtQSUMgLVIuIn0KLSAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC14Y2c5MiJ9IDs7Ci0gICAgICAgICBlc2FjIDs7CisgIFN1bk9TXCA1KiB8IHNvbGFyaXMqKQorICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLUcgLWggbGlieiRzaGFyZWRfZXh0LiRWRVIxIn0KKyAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLUtQSUMifQorICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCJ9CisgICAgICAgICBpZiB0ZXN0ICRidWlsZDY0IC1lcSAxOyB0aGVuCisgICAgICAgICAgICAgIyBvbGQgdmVyc2lvbnMgb2YgU3VuUFJPL1dvcmtzaG9wL1N0dWRpbyBkb24ndCBzdXBwb3J0IC1tNjQsCisgICAgICAgICAgICAgIyBidXQgbmV3ZXIgb25lcyBkby4gIENoZWNrIGZvciBpdC4KKyAgICAgICAgICAgICBmbGFnNjQ9YCRDQyAtZmxhZ3MgfCBlZ3JlcCAtLSAnXi1tNjQnYAorICAgICAgICAgICAgIGlmIHRlc3QgeCIkZmxhZzY0IiAhPSB4IiIgOyB0aGVuCisgICAgICAgICAgICAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1tNjQiCisgICAgICAgICAgICAgICAgIFNGTEFHUz0iJHtTRkxBR1N9IC1tNjQiCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBjYXNlIGAodW5hbWUgLW0gfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KKyAgICAgICAgICAgICAgICAgICBpODYqKQorICAgICAgICAgICAgICAgICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC14YXJjaD1hbWQ2NCIKKyAgICAgICAgICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAteGFyY2g9YW1kNjQiIDs7CisgICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgIFNGTEFHUz0iJFNGTEFHUyAteGFyY2g9djkiCisgICAgICAgICAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXhhcmNoPXY5IiA7OworICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgICAgICA7OwogICBTdW5PU1wgNCopIFNGTEFHUz0ke0NGTEFHUy0iLU8yIC1QSUMifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8yIn0KICAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJsZCJ9IDs7CkBAIC0yMjUsMjUgKzMxNyw3OSBAQAogICBlc2FjCiBmaQogCisjIGRlc3RpbmF0aW9uIG5hbWVzIGZvciBzaGFyZWQgbGlicmFyeSBpZiBub3QgZGVmaW5lZCBhYm92ZQogU0hBUkVETElCPSR7U0hBUkVETElCLSJsaWJ6JHNoYXJlZF9leHQifQogU0hBUkVETElCVj0ke1NIQVJFRExJQlYtImxpYnokc2hhcmVkX2V4dC4kVkVSIn0KIFNIQVJFRExJQk09JHtTSEFSRURMSUJNLSJsaWJ6JHNoYXJlZF9leHQuJFZFUjEifQogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBkZWZpbmUgZnVuY3Rpb25zIGZvciB0ZXN0aW5nIGNvbXBpbGVyIGFuZCBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcyBhbmQgbG9nZ2luZyB0aGUgcmVzdWx0cworCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjZXJyb3IgZXJyb3IKK0VPRgoraWYgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+L2Rldi9udWxsOyB0aGVuCisgIHRyeSgpCisgIHsKKyAgICBzaG93ICQqCisgICAgdGVzdCAiYCggJCogKSAyPiYxIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2dgIiA9ICIiCisgIH0KKyAgZWNobyAtIHVzaW5nIGFueSBvdXRwdXQgZnJvbSBjb21waWxlciB0byBpbmRpY2F0ZSBhbiBlcnJvciA+PiBjb25maWd1cmUubG9nCitlbHNlCit0cnkoKQoreworICBzaG93ICQqCisgICggJCogKSA+PiBjb25maWd1cmUubG9nIDI+JjEKKyAgcmV0PSQ/CisgIGlmIHRlc3QgJHJldCAtbmUgMDsgdGhlbgorICAgIGVjaG8gIihleGl0IGNvZGUgIiRyZXQiKSIgPj4gY29uZmlndXJlLmxvZworICBmaQorICByZXR1cm4gJHJldAorfQorZmkKKwordHJ5Ym90aCgpCit7CisgIHNob3cgJCoKKyAgZ290PWAoICQqICkgMj4mMWAKKyAgcmV0PSQ/CisgIHByaW50ZiAlcyAiJGdvdCIgPj4gY29uZmlndXJlLmxvZworICBpZiB0ZXN0ICRyZXQgLW5lIDA7IHRoZW4KKyAgICByZXR1cm4gJHJldAorICBmaQorICB0ZXN0ICIkZ290IiA9ICIiCit9CisKK2NhdCA+ICR0ZXN0LmMgPDwgRU9GCitpbnQgZm9vKCkgeyByZXR1cm4gMDsgfQorRU9GCitlY2hvICJDaGVja2luZyBmb3Igb2JzZXNzaXZlLWNvbXB1bHNpdmUgY29tcGlsZXIgb3B0aW9ucy4uLiIgPj4gY29uZmlndXJlLmxvZworaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICJDb21waWxlciBlcnJvciByZXBvcnRpbmcgaXMgdG9vIGhhcnNoIGZvciAkMCAocGVyaGFwcyByZW1vdmUgLVdlcnJvcikuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGxlYXZlIDEKK2ZpCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIHNlZSBpZiBzaGFyZWQgbGlicmFyeSBidWlsZCBzdXBwb3J0ZWQKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKK2V4dGVybiBpbnQgZ2V0Y2hhcigpOworaW50IGhlbGxvKCkge3JldHVybiBnZXRjaGFyKCk7fQorRU9GCiBpZiB0ZXN0ICRzaGFyZWQgLWVxIDE7IHRoZW4KLSAgZWNobyBDaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4uLgorICBlY2hvIENoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0Li4uIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgIyB3ZSBtdXN0IHRlc3QgaW4gdHdvIHN0ZXBzIChjYyB0aGVuIGxkKSwgcmVxdWlyZWQgYXQgbGVhc3Qgb24gU3VuT1MgNC54Ci0gIGlmIHRlc3QgImAoJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiIgJiYKLSAgICAgdGVzdCAiYCgkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8pIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyBCdWlsZGluZyBzaGFyZWQgbGlicmFyeSAkU0hBUkVETElCViB3aXRoICRDQy4KKyAgaWYgdHJ5ICRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMgJiYKKyAgICAgdHJ5ICRMRFNIQVJFRCAkU0ZMQUdTIC1vICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QubzsgdGhlbgorICAgIGVjaG8gQnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgJFNIQVJFRExJQlYgd2l0aCAkQ0MuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZWxpZiB0ZXN0IC16ICIkb2xkX2NjIiAtYSAteiAiJG9sZF9jZmxhZ3MiOyB0aGVuCi0gICAgZWNobyBObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LgorICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIHNoYXJlZD0wOwogICBlbHNlCi0gICAgZWNobyBUZXN0ZWQgJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYwotICAgICRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMKLSAgICBlY2hvIFRlc3RlZCAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8KLSAgICAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8KLSAgICBlY2hvICdObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0OyB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTJworICAgIGVjaG8gJ05vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQ7IHRyeSB3aXRob3V0IGRlZmluaW5nIENDIGFuZCBDRkxBR1MnIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBzaGFyZWQ9MDsKICAgZmkKIGZpCkBAIC0yNTQsMjUgKzQwMCw0MyBAQAogICBTSEFSRURMSUI9IiIKICAgU0hBUkVETElCVj0iIgogICBTSEFSRURMSUJNPSIiCi0gIGVjaG8gQnVpbGRpbmcgc3RhdGljIGxpYnJhcnkgJFNUQVRJQ0xJQiB2ZXJzaW9uICRWRVIgd2l0aCAkQ0MuCisgIGVjaG8gQnVpbGRpbmcgc3RhdGljIGxpYnJhcnkgJFNUQVRJQ0xJQiB2ZXJzaW9uICRWRVIgd2l0aCAkQ0MuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKICAgQUxMPSJzdGF0aWMgc2hhcmVkIgogICBURVNUPSJhbGwgdGVzdHN0YXRpYyB0ZXN0c2hhcmVkIgogZmkKIAorIyBjaGVjayBmb3IgdW5kZXJzY29yZXMgaW4gZXh0ZXJuYWwgbmFtZXMgZm9yIHVzZSBieSBhc3NlbWJsZXIgY29kZQorQ1BQPSR7Q1BQLSIkQ0MgLUUifQorY2FzZSAkQ0ZMQUdTIGluCisgICpBU01WKikKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgICBzaG93ICIkTk0gJHRlc3QubyB8IGdyZXAgX2hlbGxvIgorICAgIGlmIHRlc3QgImAkTk0gJHRlc3QubyB8IGdyZXAgX2hlbGxvIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2dgIiA9ICIiOyB0aGVuCisgICAgICBDUFA9IiRDUFAgLUROT19VTkRFUkxJTkUiCisgICAgICBlY2hvIENoZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gTm8uIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlbHNlCisgICAgICBlY2hvIENoZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gWWVzLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZmkgOzsKK2VzYWMKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIGxhcmdlIGZpbGUgc3VwcG9ydCwgYW5kIGlmIG5vbmUsIGNoZWNrIGZvciBmc2Vla28oKQogY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogb2ZmNjRfdCBkdW1teSA9IDA7CiBFT0YKLWlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgLURfTEFSR0VGSUxFNjRfU09VUkNFPTEgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSAkdGVzdC5jOyB0aGVuCiAgIENGTEFHUz0iJHtDRkxBR1N9IC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xIgogICBTRkxBR1M9IiR7U0ZMQUdTfSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSIKICAgQUxMPSIke0FMTH0gYWxsNjQiCiAgIFRFU1Q9IiR7VEVTVH0gdGVzdDY0IgotICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBZZXMuIgotICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iCisgIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCi0gIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIE5vLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KIGludCBtYWluKHZvaWQpIHsKQEAgLTI4MCwyNzIgKzQ0NCwzMzUgQEAKICAgcmV0dXJuIDA7CiB9CiBFT0YKLSAgaWYgdGVzdCAiYCgkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZWxzZQogICAgIENGTEFHUz0iJHtDRkxBR1N9IC1ETk9fRlNFRUtPIgogICAgIFNGTEFHUz0iJHtTRkxBR1N9IC1ETk9fRlNFRUtPIgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gTm8uIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGZpCiBmaQogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3Igc3RyZXJyb3IoKSBmb3IgdXNlIGJ5IGd6KiBmdW5jdGlvbnMKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgoraW50IG1haW4oKSB7IHJldHVybiBzdHJsZW4oc3RyZXJyb3IoZXJybm8pKTsgfQorRU9GCitpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICBlY2hvICJDaGVja2luZyBmb3Igc3RyZXJyb3IuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRE5PX1NUUkVSUk9SIgorICBTRkxBR1M9IiR7U0ZMQUdTfSAtRE5PX1NUUkVSUk9SIgorICBlY2hvICJDaGVja2luZyBmb3Igc3RyZXJyb3IuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitmaQorCisjIGNvcHkgY2xlYW4gemNvbmYuaCBmb3Igc3Vic2VxdWVudCBlZGl0cwogY3AgLXAgemNvbmYuaC5pbiB6Y29uZi5oCiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciB1bmlzdGQuaCBhbmQgc2F2ZSByZXN1bHQgaW4gemNvbmYuaAogY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogaW50IG1haW4oKSB7IHJldHVybiAwOyB9CiBFT0YKLWlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCiAgIHNlZCA8IHpjb25mLmggIi9eI2lmZGVmIEhBVkVfVU5JU1REX0guKiBtYXkgYmUvcy9kZWYgSEFWRV9VTklTVERfSFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAogICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAotICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gWWVzLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIE5vLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHN0ZGFyZy5oIGFuZCBzYXZlIHJlc3VsdCBpbiB6Y29uZi5oCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RkYXJnLmg+CitpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK0VPRgoraWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgc2VkIDwgemNvbmYuaCAiL14jaWZkZWYgSEFWRV9TVERBUkdfSC4qIG1heSBiZS9zL2RlZiBIQVZFX1NUREFSR19IXCguKlwpIG1heSBiZS8gMVwxIHdhcy8iID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdGRhcmcuaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitlbHNlCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdGRhcmcuaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2ZpCisKKyMgaWYgdGhlIHpfIHByZWZpeCB3YXMgcmVxdWVzdGVkLCBzYXZlIHRoYXQgaW4gemNvbmYuaAogaWYgdGVzdCAkenByZWZpeCAtZXEgMTsgdGhlbgogICBzZWQgPCB6Y29uZi5oICIvI2lmZGVmIFpfUFJFRklYLiogbWF5IGJlL3MvZGVmIFpfUFJFRklYXCguKlwpIG1heSBiZS8gMVwxIHdhcy8iID4gemNvbmYudGVtcC5oCiAgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCi0gIGVjaG8gIlVzaW5nIHpfIHByZWZpeCBvbiBhbGwgc3ltYm9scy4iCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBlY2hvICJVc2luZyB6XyBwcmVmaXggb24gYWxsIHN5bWJvbHMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBmaQogCisjIGlmIC0tc29sbyBjb21waWxhdGlvbiB3YXMgcmVxdWVzdGVkLCBzYXZlIHRoYXQgaW4gemNvbmYuaCBhbmQgcmVtb3ZlIGd6IHN0dWZmIGZyb20gb2JqZWN0IGxpc3RzCitpZiB0ZXN0ICRzb2xvIC1lcSAxOyB0aGVuCisgIHNlZCAnLyNkZWZpbmUgWkNPTkZfSC9hXAorI2RlZmluZSBaX1NPTE8KKworJyA8IHpjb25mLmggPiB6Y29uZi50ZW1wLmgKKyAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKK09CSkM9JyQoT0JKWiknCitQSUNfT0JKQz0nJChQSUNfT0JKWiknCitmaQorCisjIGlmIGNvZGUgY292ZXJhZ2UgdGVzdGluZyB3YXMgcmVxdWVzdGVkLCB1c2Ugb2xkZXIgZ2NjIGlmIGRlZmluZWQsIGUuZy4gImdjYy00LjIiIG9uIE1hYyBPUyBYCitpZiB0ZXN0ICRjb3ZlciAtZXEgMTsgdGhlbgorICBDRkxBR1M9IiR7Q0ZMQUdTfSAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UiCisgIGlmIHRlc3QgLW4gIiRHQ0NfQ0xBU1NJQyI7IHRoZW4KKyAgICBDQz0kR0NDX0NMQVNTSUMKKyAgZmkKK2ZpCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNvbmR1Y3QgYSBzZXJpZXMgb2YgdGVzdHMgdG8gcmVzb2x2ZSBlaWdodCBwb3NzaWJsZSBjYXNlcyBvZiB1c2luZyAidnMiIG9yICJzIiBwcmludGYgZnVuY3Rpb25zCisjICh1c2luZyBzdGRhcmcgb3Igbm90KSwgd2l0aCBvciB3aXRob3V0ICJuIiAocHJvdmluZyBzaXplIG9mIGJ1ZmZlciksIGFuZCB3aXRoIG9yIHdpdGhvdXQgYQorIyByZXR1cm4gdmFsdWUuICBUaGUgbW9zdCBzZWN1cmUgcmVzdWx0IGlzIHZzbnByaW50ZigpIHdpdGggYSByZXR1cm4gdmFsdWUuICBzbnByaW50ZigpIHdpdGggYQorIyByZXR1cm4gdmFsdWUgaXMgc2VjdXJlIGFzIHdlbGwsIGJ1dCB0aGVuIGd6cHJpbnRmKCkgd2lsbCBiZSBsaW1pdGVkIHRvIDIwIGFyZ3VtZW50cy4KIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgInpjb25mLmgiCi0KIGludCBtYWluKCkKIHsKICNpZm5kZWYgU1REQwogICBjaG9rZSBtZQogI2VuZGlmCi0KICAgcmV0dXJuIDA7CiB9CiBFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHZzW25dcHJpbnRmKCkuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKLWlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBvciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgdnNbbl1wcmludGYoKS4iCi0KKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotCiBpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBjaGFyIGJ1ZlsyMF07CiAgIHZhX2xpc3QgYXA7Ci0KICAgdmFfc3RhcnQoYXAsIGZtdCk7CiAgIHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKICAgdmFfZW5kKGFwKTsKICAgcmV0dXJuIDA7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKIH0KIEVPRgorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAotICBpZiB0ZXN0ICJgKCRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gWWVzLiIKLQorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0KIGludCBteXRlc3QoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgIGludCBuOwogICBjaGFyIGJ1ZlsyMF07CiAgIHZhX2xpc3QgYXA7Ci0KICAgdmFfc3RhcnQoYXAsIGZtdCk7CiAgIG4gPSB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiBuOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gWWVzLiIKKyAgICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3ZzbnByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3ZzbnByaW50Zl92b2lkIgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBOby4iCi0gICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGVsc2UKICAgICBDRkxBR1M9IiRDRkxBR1MgLUROT192c25wcmludGYiCiAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ETk9fdnNucHJpbnRmIgotICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIKLSAgICBlY2hvICIgIFdBUk5JTkc6IHZzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHZzcHJpbnRmKCkuIHpsaWIiCi0gICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiCi0gICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgV0FSTklORzogdnNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gdnNwcmludGYoKS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotCiBpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICBuID0gdnNwcmludGYoYnVmLCBmbXQsIGFwKTsKICAgdmFfZW5kKGFwKTsKICAgcmV0dXJuIG47CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKIH0KIEVPRgogCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c3ByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3ZzcHJpbnRmX3ZvaWQiCiAgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfdnNwcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBOby4iCi0gICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKLSAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKLSAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGZpCiBlbHNlCi0gIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHNbbl1wcmludGYoKS4iCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHNbbl1wcmludGYoKS4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogaW50IG15dGVzdCgpCiB7CiAgIGNoYXIgYnVmWzIwXTsKLQogICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCAiZm9vIik7CiAgIHJldHVybiAwOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCkpOwogfQogRU9GCiAKLSAgaWYgdGVzdCAiYCgkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gWWVzLiIKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsICJmb28iKTsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgpKTsKIH0KIEVPRgogCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3NucHJpbnRmX3ZvaWQiCiAgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfc25wcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBOby4iCi0gICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKLSAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKLSAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGVsc2UKICAgICBDRkxBR1M9IiRDRkxBR1MgLUROT19zbnByaW50ZiIKICAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19zbnByaW50ZiIKLSAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIKLSAgICBlY2hvICIgIFdBUk5JTkc6IHNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gc3ByaW50ZigpLiB6bGliIgotICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IgotICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgV0FSTklORzogc25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byBzcHJpbnRmKCkuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogaW50IG15dGVzdCgpCiB7CiAgIGNoYXIgYnVmWzIwXTsKLQogICByZXR1cm4gc3ByaW50ZihidWYsICIlcyIsICJmb28iKTsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgpKTsKIH0KIEVPRgogCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gWWVzLiIKKyAgICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU19zcHJpbnRmX3ZvaWQiCiAgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfc3ByaW50Zl92b2lkIgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKLSAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKLSAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBmaQogZmkKIAorIyBzZWUgaWYgd2UgY2FuIGhpZGUgemxpYiBpbnRlcm5hbCBzeW1ib2xzIHRoYXQgYXJlIGxpbmtlZCBiZXR3ZWVuIHNlcGFyYXRlIHNvdXJjZSBmaWxlcwogaWYgdGVzdCAiJGdjYyIgLWVxIDE7IHRoZW4KKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKLSNpZiAoKF9fR05VQ19fLTApICogMTAgKyBfX0dOVUNfTUlOT1JfXy0wID49IDMzKQotIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKLSNlbHNlCi0jICBkZWZpbmUgWkxJQl9JTlRFUk5BTAotI2VuZGlmCisjZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKIGludCBaTElCX0lOVEVSTkFMIGZvbzsKIGludCBtYWluKCkKIHsKICAgcmV0dXJuIDA7CiB9CiBFT0YKLSAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBZZXMuIgorICBpZiB0cnlib3RoICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVZFX0hJRERFTiIKKyAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVZFX0hJRERFTiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBlbHNlCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fVklaIgotICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX1ZJWiIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gTm8uIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZmkKIGZpCiAKLUNQUD0ke0NQUC0iJENDIC1FIn0KLWNhc2UgJENGTEFHUyBpbgotICAqQVNNViopCi0gICAgaWYgdGVzdCAiYCROTSAkdGVzdC5vIHwgZ3JlcCBfaGVsbG9gIiA9ICIiOyB0aGVuCi0gICAgICBDUFA9IiRDUFAgLUROT19VTkRFUkxJTkUiCi0gICAgICBlY2hvIENoZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gTm8uCi0gICAgZWxzZQotICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIFllcy4KLSAgICBmaSA7OwotZXNhYworIyBzaG93IHRoZSByZXN1bHRzIGluIHRoZSBsb2cKK2VjaG8gPj4gY29uZmlndXJlLmxvZworZWNobyBBTEwgPSAkQUxMID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQVIgPSAkQVIgPj4gY29uZmlndXJlLmxvZworZWNobyBBUkZMQUdTID0gJEFSRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBDQyA9ICRDQyA+PiBjb25maWd1cmUubG9nCitlY2hvIENGTEFHUyA9ICRDRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBDUFAgPSAkQ1BQID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gRVhFID0gJEVYRSA+PiBjb25maWd1cmUubG9nCitlY2hvIExEQ09ORklHID0gJExEQ09ORklHID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERGTEFHUyA9ICRMREZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERTSEFSRUQgPSAkTERTSEFSRUQgPj4gY29uZmlndXJlLmxvZworZWNobyBMRFNIQVJFRExJQkMgPSAkTERTSEFSRURMSUJDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gT0JKQyA9ICRPQkpDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gUElDX09CSkMgPSAkUElDX09CSkMgPj4gY29uZmlndXJlLmxvZworZWNobyBSQU5MSUIgPSAkUkFOTElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0ZMQUdTID0gJFNGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIFNIQVJFRExJQiA9ICRTSEFSRURMSUIgPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUJNID0gJFNIQVJFRExJQk0gPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUJWID0gJFNIQVJFRExJQlYgPj4gY29uZmlndXJlLmxvZworZWNobyBTVEFUSUNMSUIgPSAkU1RBVElDTElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gVEVTVCA9ICRURVNUID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gVkVSID0gJFZFUiA+PiBjb25maWd1cmUubG9nCitlY2hvIFpfVTQgPSAkWl9VNCA+PiBjb25maWd1cmUubG9nCitlY2hvIGV4ZWNfcHJlZml4ID0gJGV4ZWNfcHJlZml4ID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gaW5jbHVkZWRpciA9ICRpbmNsdWRlZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gbGliZGlyID0gJGxpYmRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIG1hbmRpciA9ICRtYW5kaXIgPj4gY29uZmlndXJlLmxvZworZWNobyBwcmVmaXggPSAkcHJlZml4ID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gc2hhcmVkbGliZGlyID0gJHNoYXJlZGxpYmRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIHVuYW1lID0gJHVuYW1lID4+IGNvbmZpZ3VyZS5sb2cKIAotcm0gLWYgJHRlc3QuW2NvXSAkdGVzdCAkdGVzdCRzaGFyZWRfZXh0Ci0KLSMgdWRwYXRlIE1ha2VmaWxlCisjIHVkcGF0ZSBNYWtlZmlsZSB3aXRoIHRoZSBjb25maWd1cmUgcmVzdWx0cwogc2VkIDwgTWFrZWZpbGUuaW4gIgogL15DQyAqPS9zIz0uKiM9JENDIwogL15DRkxBR1MgKj0vcyM9LiojPSRDRkxBR1MjCkBAIC01NTcsNyArNzg0LDggQEAKIC9eU0hBUkVETElCICo9L3MjPS4qIz0kU0hBUkVETElCIwogL15TSEFSRURMSUJWICo9L3MjPS4qIz0kU0hBUkVETElCViMKIC9eU0hBUkVETElCTSAqPS9zIz0uKiM9JFNIQVJFRExJQk0jCi0vXkFSICo9L3MjPS4qIz0kQVJfUkMjCisvXkFSICo9L3MjPS4qIz0kQVIjCisvXkFSRkxBR1MgKj0vcyM9LiojPSRBUkZMQUdTIwogL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCiAvXkxEQ09ORklHICo9L3MjPS4qIz0kTERDT05GSUcjCiAvXkxEU0hBUkVETElCQyAqPS9zIz0uKiM9JExEU0hBUkVETElCQyMKQEAgLTU2OCwxMCArNzk2LDEzIEBACiAvXnNoYXJlZGxpYmRpciAqPS9zIz0uKiM9JHNoYXJlZGxpYmRpciMKIC9eaW5jbHVkZWRpciAqPS9zIz0uKiM9JGluY2x1ZGVkaXIjCiAvXm1hbmRpciAqPS9zIz0uKiM9JG1hbmRpciMKKy9eT0JKQyAqPS9zIz0uKiM9ICRPQkpDIworL15QSUNfT0JKQyAqPS9zIz0uKiM9ICRQSUNfT0JKQyMKIC9eYWxsOiAqL3MjOi4qIzogJEFMTCMKIC9edGVzdDogKi9zIzouKiM6ICRURVNUIwogIiA+IE1ha2VmaWxlCiAKKyMgY3JlYXRlIHpsaWIucGMgd2l0aCB0aGUgY29uZmlndXJlIHJlc3VsdHMKIHNlZCA8IHpsaWIucGMuaW4gIgogL15DQyAqPS9zIz0uKiM9JENDIwogL15DRkxBR1MgKj0vcyM9LiojPSRDRkxBR1MjCkBAIC01ODEsNyArODEyLDggQEAKIC9eU0hBUkVETElCICo9L3MjPS4qIz0kU0hBUkVETElCIwogL15TSEFSRURMSUJWICo9L3MjPS4qIz0kU0hBUkVETElCViMKIC9eU0hBUkVETElCTSAqPS9zIz0uKiM9JFNIQVJFRExJQk0jCi0vXkFSICo9L3MjPS4qIz0kQVJfUkMjCisvXkFSICo9L3MjPS4qIz0kQVIjCisvXkFSRkxBR1MgKj0vcyM9LiojPSRBUkZMQUdTIwogL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCiAvXkVYRSAqPS9zIz0uKiM9JEVYRSMKIC9ecHJlZml4ICo9L3MjPS4qIz0kcHJlZml4IwpAQCAtNTk0LDMgKzgyNiw2IEBACiAiIHwgc2VkIC1lICIKIHMvXEBWRVJTSU9OXEAvJFZFUi9nOwogIiA+IHpsaWIucGMKKworIyBkb25lCitsZWF2ZSAwCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY3JjMzIuYyBiL01vZHVsZXMvemxpYi9jcmMzMi5jCmluZGV4IDkxYmUzNzIuLjk3OWE3MTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9jcmMzMi5jCisrKyBiL01vZHVsZXMvemxpYi9jcmMzMi5jCkBAIC0xLDUgKzEsNSBAQAogLyogY3JjMzIuYyAtLSBjb21wdXRlIHRoZSBDUkMtMzIgb2YgYSBkYXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAsIDIwMTEsIDIwMTIgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICoKICAqIFRoYW5rcyB0byBSb2RuZXkgQnJvd24gPHJicm93bjY0QGNzYy5jb20uYXU+IGZvciBoaXMgY29udHJpYnV0aW9uIG9mIGZhc3RlcgpAQCAtMTcsNiArMTcsOCBAQAogICBvZiB0aGUgY3JjIHRhYmxlcy4gIFRoZXJlZm9yZSwgaWYgeW91ICNkZWZpbmUgRFlOQU1JQ19DUkNfVEFCTEUsIHlvdSBzaG91bGQKICAgZmlyc3QgY2FsbCBnZXRfY3JjX3RhYmxlKCkgdG8gaW5pdGlhbGl6ZSB0aGUgdGFibGVzIGJlZm9yZSBhbGxvd2luZyBtb3JlIHRoYW4KICAgb25lIHRocmVhZCB0byB1c2UgY3JjMzIoKS4KKworICBEWU5BTUlDX0NSQ19UQUJMRSBhbmQgTUFLRUNSQ0ggY2FuIGJlICNkZWZpbmVkIHRvIHdyaXRlIG91dCBjcmMzMi5oLgogICovCiAKICNpZmRlZiBNQUtFQ1JDSApAQCAtMzAsMzEgKzMyLDExIEBACiAKICNkZWZpbmUgbG9jYWwgc3RhdGljCiAKLS8qIEZpbmQgYSBmb3VyLWJ5dGUgaW50ZWdlciB0eXBlIGZvciBjcmMzMl9saXR0bGUoKSBhbmQgY3JjMzJfYmlnKCkuICovCi0jaWZuZGVmIE5PQllGT1VSCi0jICBpZmRlZiBTVERDICAgICAgICAgICAvKiBuZWVkIEFOU0kgQyBsaW1pdHMuaCB0byBkZXRlcm1pbmUgc2l6ZXMgKi8KLSMgICAgaW5jbHVkZSA8bGltaXRzLmg+Ci0jICAgIGRlZmluZSBCWUZPVVIKLSMgICAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCB1NDsKLSMgICAgZWxzZQotIyAgICAgIGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQotICAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHU0OwotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQotICAgICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHU0OwotIyAgICAgICAgZWxzZQotIyAgICAgICAgICB1bmRlZiBCWUZPVVIgICAgIC8qIGNhbid0IGZpbmQgYSBmb3VyLWJ5dGUgaW50ZWdlciB0eXBlISAqLwotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYgLyogU1REQyAqLwotI2VuZGlmIC8qICFOT0JZRk9VUiAqLwotCiAvKiBEZWZpbml0aW9ucyBmb3IgZG9pbmcgdGhlIGNyYyBmb3VyIGRhdGEgYnl0ZXMgYXQgYSB0aW1lLiAqLworI2lmICFkZWZpbmVkKE5PQllGT1VSKSAmJiBkZWZpbmVkKFpfVTQpCisjICBkZWZpbmUgQllGT1VSCisjZW5kaWYKICNpZmRlZiBCWUZPVVIKLSMgIGRlZmluZSBSRVYodykgKCgoKHcpPj4yNCkmMHhmZikrKCgodyk+PjgpJjB4ZmYwMCkrIFwKLSAgICAgICAgICAgICAgICAoKCh3KSYweGZmMDApPDw4KSsoKCh3KSYweGZmKTw8MjQpKQogICAgbG9jYWwgdW5zaWduZWQgbG9uZyBjcmMzMl9saXR0bGUgT0YoKHVuc2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqLCB1bnNpZ25lZCkpOwogICAgbG9jYWwgdW5zaWduZWQgbG9uZyBjcmMzMl9iaWcgT0YoKHVuc2lnbmVkIGxvbmcsCkBAIC02OCwxNiArNTAsMTYgQEAKIGxvY2FsIHVuc2lnbmVkIGxvbmcgZ2YyX21hdHJpeF90aW1lcyBPRigodW5zaWduZWQgbG9uZyAqbWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZlYykpOwogbG9jYWwgdm9pZCBnZjJfbWF0cml4X3NxdWFyZSBPRigodW5zaWduZWQgbG9uZyAqc3F1YXJlLCB1bnNpZ25lZCBsb25nICptYXQpKTsKLWxvY2FsIHVMb25nIGNyYzMyX2NvbWJpbmVfKHVMb25nIGNyYzEsIHVMb25nIGNyYzIsIHpfb2ZmNjRfdCBsZW4yKTsKK2xvY2FsIHVMb25nIGNyYzMyX2NvbWJpbmVfIE9GKCh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZjY0X3QgbGVuMikpOwogCiAKICNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQogCiBsb2NhbCB2b2xhdGlsZSBpbnQgY3JjX3RhYmxlX2VtcHR5ID0gMTsKLWxvY2FsIHVuc2lnbmVkIGxvbmcgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdOworbG9jYWwgel9jcmNfdCBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl07CiBsb2NhbCB2b2lkIG1ha2VfY3JjX3RhYmxlIE9GKCh2b2lkKSk7CiAjaWZkZWYgTUFLRUNSQ0gKLSAgIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKikpOworICAgbG9jYWwgdm9pZCB3cml0ZV90YWJsZSBPRigoRklMRSAqLCBjb25zdCB6X2NyY190IEZBUiAqKSk7CiAjZW5kaWYgLyogTUFLRUNSQ0ggKi8KIC8qCiAgIEdlbmVyYXRlIHRhYmxlcyBmb3IgYSBieXRlLXdpc2UgMzItYml0IENSQyBjYWxjdWxhdGlvbiBvbiB0aGUgcG9seW5vbWlhbDoKQEAgLTEwNyw5ICs4OSw5IEBACiAqLwogbG9jYWwgdm9pZCBtYWtlX2NyY190YWJsZSgpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBjOworICAgIHpfY3JjX3QgYzsKICAgICBpbnQgbiwgazsKLSAgICB1bnNpZ25lZCBsb25nIHBvbHk7ICAgICAgICAgICAgICAgICAvKiBwb2x5bm9taWFsIGV4Y2x1c2l2ZS1vciBwYXR0ZXJuICovCisgICAgel9jcmNfdCBwb2x5OyAgICAgICAgICAgICAgICAgICAgICAgLyogcG9seW5vbWlhbCBleGNsdXNpdmUtb3IgcGF0dGVybiAqLwogICAgIC8qIHRlcm1zIG9mIHBvbHlub21pYWwgZGVmaW5pbmcgdGhpcyBjcmMgKGV4Y2VwdCB4XjMyKTogKi8KICAgICBzdGF0aWMgdm9sYXRpbGUgaW50IGZpcnN0ID0gMTsgICAgICAvKiBmbGFnIHRvIGxpbWl0IGNvbmN1cnJlbnQgbWFraW5nICovCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0gezAsMSwyLDQsNSw3LDgsMTAsMTEsMTIsMTYsMjIsMjMsMjZ9OwpAQCAtMTIxLDEzICsxMDMsMTMgQEAKICAgICAgICAgZmlyc3QgPSAwOwogCiAgICAgICAgIC8qIG1ha2UgZXhjbHVzaXZlLW9yIHBhdHRlcm4gZnJvbSBwb2x5bm9taWFsICgweGVkYjg4MzIwVUwpICovCi0gICAgICAgIHBvbHkgPSAwVUw7Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCBzaXplb2YocCkvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOyBuKyspCi0gICAgICAgICAgICBwb2x5IHw9IDFVTCA8PCAoMzEgLSBwW25dKTsKKyAgICAgICAgcG9seSA9IDA7CisgICAgICAgIGZvciAobiA9IDA7IG4gPCAoaW50KShzaXplb2YocCkvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsgbisrKQorICAgICAgICAgICAgcG9seSB8PSAoel9jcmNfdCkxIDw8ICgzMSAtIHBbbl0pOwogCiAgICAgICAgIC8qIGdlbmVyYXRlIGEgY3JjIGZvciBldmVyeSA4LWJpdCB2YWx1ZSAqLwogICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspIHsKLSAgICAgICAgICAgIGMgPSAodW5zaWduZWQgbG9uZyluOworICAgICAgICAgICAgYyA9ICh6X2NyY190KW47CiAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgODsgaysrKQogICAgICAgICAgICAgICAgIGMgPSBjICYgMSA/IHBvbHkgXiAoYyA+PiAxKSA6IGMgPj4gMTsKICAgICAgICAgICAgIGNyY190YWJsZVswXVtuXSA9IGM7CkBAIC0xMzgsMTEgKzEyMCwxMSBAQAogICAgICAgICAgICBhbmQgdGhlbiB0aGUgYnl0ZSByZXZlcnNhbCBvZiB0aG9zZSBhcyB3ZWxsIGFzIHRoZSBmaXJzdCB0YWJsZSAqLwogICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspIHsKICAgICAgICAgICAgIGMgPSBjcmNfdGFibGVbMF1bbl07Ci0gICAgICAgICAgICBjcmNfdGFibGVbNF1bbl0gPSBSRVYoYyk7CisgICAgICAgICAgICBjcmNfdGFibGVbNF1bbl0gPSBaU1dBUDMyKGMpOwogICAgICAgICAgICAgZm9yIChrID0gMTsgayA8IDQ7IGsrKykgewogICAgICAgICAgICAgICAgIGMgPSBjcmNfdGFibGVbMF1bYyAmIDB4ZmZdIF4gKGMgPj4gOCk7CiAgICAgICAgICAgICAgICAgY3JjX3RhYmxlW2tdW25dID0gYzsKLSAgICAgICAgICAgICAgICBjcmNfdGFibGVbayArIDRdW25dID0gUkVWKGMpOworICAgICAgICAgICAgICAgIGNyY190YWJsZVtrICsgNF1bbl0gPSBaU1dBUDMyKGMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYgLyogQllGT1VSICovCkBAIC0xNjQsNyArMTQ2LDcgQEAKICAgICAgICAgaWYgKG91dCA9PSBOVUxMKSByZXR1cm47CiAgICAgICAgIGZwcmludGYob3V0LCAiLyogY3JjMzIuaCAtLSB0YWJsZXMgZm9yIHJhcGlkIENSQyBjYWxjdWxhdGlvblxuIik7CiAgICAgICAgIGZwcmludGYob3V0LCAiICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY3JjMzIuY1xuICovXG5cbiIpOwotICAgICAgICBmcHJpbnRmKG91dCwgImxvY2FsIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICIpOworICAgICAgICBmcHJpbnRmKG91dCwgImxvY2FsIGNvbnN0IHpfY3JjX3QgRkFSICIpOwogICAgICAgICBmcHJpbnRmKG91dCwgImNyY190YWJsZVtUQkxTXVsyNTZdID1cbntcbiAge1xuIik7CiAgICAgICAgIHdyaXRlX3RhYmxlKG91dCwgY3JjX3RhYmxlWzBdKTsKICMgIGlmZGVmIEJZRk9VUgpAQCAtMTg0LDEyICsxNjYsMTMgQEAKICNpZmRlZiBNQUtFQ1JDSAogbG9jYWwgdm9pZCB3cml0ZV90YWJsZShvdXQsIHRhYmxlKQogICAgIEZJTEUgKm91dDsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqdGFibGU7CisgICAgY29uc3Qgel9jcmNfdCBGQVIgKnRhYmxlOwogewogICAgIGludCBuOwogCiAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKQotICAgICAgICBmcHJpbnRmKG91dCwgIiVzMHglMDhseFVMJXMiLCBuICUgNSA/ICIiIDogIiAgICAiLCB0YWJsZVtuXSwKKyAgICAgICAgZnByaW50ZihvdXQsICIlczB4JTA4bHhVTCVzIiwgbiAlIDUgPyAiIiA6ICIgICAgIiwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykodGFibGVbbl0pLAogICAgICAgICAgICAgICAgIG4gPT0gMjU1ID8gIlxuIiA6IChuICUgNSA9PSA0ID8gIixcbiIgOiAiLCAiKSk7CiB9CiAjZW5kaWYgLyogTUFLRUNSQ0ggKi8KQEAgLTIwNCwxMyArMTg3LDEzIEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IGFzbSB2ZXJzaW9ucyBvZiBjcmMzMigpCiAgKi8KLWNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlKCkKK2NvbnN0IHpfY3JjX3QgRkFSICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlKCkKIHsKICNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQogICAgIGlmIChjcmNfdGFibGVfZW1wdHkpCiAgICAgICAgIG1ha2VfY3JjX3RhYmxlKCk7CiAjZW5kaWYgLyogRFlOQU1JQ19DUkNfVEFCTEUgKi8KLSAgICByZXR1cm4gKGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICopY3JjX3RhYmxlOworICAgIHJldHVybiAoY29uc3Qgel9jcmNfdCBGQVIgKiljcmNfdGFibGU7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTIzMiw3ICsyMTUsNyBAQAogCiAjaWZkZWYgQllGT1VSCiAgICAgaWYgKHNpemVvZih2b2lkICopID09IHNpemVvZihwdHJkaWZmX3QpKSB7Ci0gICAgICAgIHU0IGVuZGlhbjsKKyAgICAgICAgel9jcmNfdCBlbmRpYW47CiAKICAgICAgICAgZW5kaWFuID0gMTsKICAgICAgICAgaWYgKCooKHVuc2lnbmVkIGNoYXIgKikoJmVuZGlhbikpKQpAQCAtMjY2LDE3ICsyNDksMTcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwogICAgIHVuc2lnbmVkIGxlbjsKIHsKLSAgICByZWdpc3RlciB1NCBjOwotICAgIHJlZ2lzdGVyIGNvbnN0IHU0IEZBUiAqYnVmNDsKKyAgICByZWdpc3RlciB6X2NyY190IGM7CisgICAgcmVnaXN0ZXIgY29uc3Qgel9jcmNfdCBGQVIgKmJ1ZjQ7CiAKLSAgICBjID0gKHU0KWNyYzsKKyAgICBjID0gKHpfY3JjX3QpY3JjOwogICAgIGMgPSB+YzsKICAgICB3aGlsZSAobGVuICYmICgocHRyZGlmZl90KWJ1ZiAmIDMpKSB7CiAgICAgICAgIGMgPSBjcmNfdGFibGVbMF1bKGMgXiAqYnVmKyspICYgMHhmZl0gXiAoYyA+PiA4KTsKICAgICAgICAgbGVuLS07CiAgICAgfQogCi0gICAgYnVmNCA9IChjb25zdCB1NCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CisgICAgYnVmNCA9IChjb25zdCB6X2NyY190IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKICAgICB3aGlsZSAobGVuID49IDMyKSB7CiAgICAgICAgIERPTElUMzI7CiAgICAgICAgIGxlbiAtPSAzMjsKQEAgLTMwNiwxNyArMjg5LDE3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKICAgICB1bnNpZ25lZCBsZW47CiB7Ci0gICAgcmVnaXN0ZXIgdTQgYzsKLSAgICByZWdpc3RlciBjb25zdCB1NCBGQVIgKmJ1ZjQ7CisgICAgcmVnaXN0ZXIgel9jcmNfdCBjOworICAgIHJlZ2lzdGVyIGNvbnN0IHpfY3JjX3QgRkFSICpidWY0OwogCi0gICAgYyA9IFJFVigodTQpY3JjKTsKKyAgICBjID0gWlNXQVAzMigoel9jcmNfdCljcmMpOwogICAgIGMgPSB+YzsKICAgICB3aGlsZSAobGVuICYmICgocHRyZGlmZl90KWJ1ZiAmIDMpKSB7CiAgICAgICAgIGMgPSBjcmNfdGFibGVbNF1bKGMgPj4gMjQpIF4gKmJ1ZisrXSBeIChjIDw8IDgpOwogICAgICAgICBsZW4tLTsKICAgICB9CiAKLSAgICBidWY0ID0gKGNvbnN0IHU0IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKKyAgICBidWY0ID0gKGNvbnN0IHpfY3JjX3QgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOwogICAgIGJ1ZjQtLTsKICAgICB3aGlsZSAobGVuID49IDMyKSB7CiAgICAgICAgIERPQklHMzI7CkBAIC0zMzMsNyArMzE2LDcgQEAKICAgICAgICAgYyA9IGNyY190YWJsZVs0XVsoYyA+PiAyNCkgXiAqYnVmKytdIF4gKGMgPDwgOCk7CiAgICAgfSB3aGlsZSAoLS1sZW4pOwogICAgIGMgPSB+YzsKLSAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpKFJFVihjKSk7CisgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShaU1dBUDMyKGMpKTsKIH0KIAogI2VuZGlmIC8qIEJZRk9VUiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NyYzMyLmggYi9Nb2R1bGVzL3psaWIvY3JjMzIuaAppbmRleCA4MDUzYjYxLi45ZTBjNzc4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY3JjMzIuaAorKysgYi9Nb2R1bGVzL3psaWIvY3JjMzIuaApAQCAtMiw3ICsyLDcgQEAKICAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNyYzMyLmMKICAqLwogCi1sb2NhbCBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XSA9Citsb2NhbCBjb25zdCB6X2NyY190IEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XSA9CiB7CiAgIHsKICAgICAweDAwMDAwMDAwVUwsIDB4NzcwNzMwOTZVTCwgMHhlZTBlNjEyY1VMLCAweDk5MDk1MWJhVUwsIDB4MDc2ZGM0MTlVTCwKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmMgYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jCmluZGV4IGJjZWY2N2MuLjY5Njk1NzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmMKKysrIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGRlZmxhdGUuYyAtLSBjb21wcmVzcyBkYXRhIHVzaW5nIHRoZSBkZWZsYXRpb24gYWxnb3JpdGhtCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMzcsNyArMzcsNyBAQAogICogIFJFRkVSRU5DRVMKICAqCiAgKiAgICAgIERldXRzY2gsIEwuUC4sIkRFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uIi4KLSAqICAgICAgQXZhaWxhYmxlIGluIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0CisgKiAgICAgIEF2YWlsYWJsZSBpbiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxCiAgKgogICogICAgICBBIGRlc2NyaXB0aW9uIG9mIHRoZSBSYWJpbiBhbmQgS2FycCBhbGdvcml0aG0gaXMgZ2l2ZW4gaW4gdGhlIGJvb2sKICAqICAgICAgICAgIkFsZ29yaXRobXMiIGJ5IFIuIFNlZGdld2ljaywgQWRkaXNvbi1XZXNsZXksIHAyNTIuCkBAIC01Miw3ICs1Miw3IEBACiAjaW5jbHVkZSAiZGVmbGF0ZS5oIgogCiBjb25zdCBjaGFyIGRlZmxhdGVfY29weXJpZ2h0W10gPQotICAgIiBkZWZsYXRlIDEuMi41IENvcHlyaWdodCAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlciAiOworICAgIiBkZWZsYXRlIDEuMi44IENvcHlyaWdodCAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlciAiOwogLyoKICAgSWYgeW91IHVzZSB0aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaXMgd2VsY29tZQogICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3QuIElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90CkBAIC0xNTUsOSArMTU1LDEyIEBACiBzdHJ1Y3Qgc3RhdGljX3RyZWVfZGVzY19zIHtpbnQgZHVtbXk7fTsgLyogZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwogI2VuZGlmCiAKKy8qIHJhbmsgWl9CTE9DSyBiZXR3ZWVuIFpfTk9fRkxVU0ggYW5kIFpfUEFSVElBTF9GTFVTSCAqLworI2RlZmluZSBSQU5LKGYpICgoKGYpIDw8IDEpIC0gKChmKSA+IDQgPyA5IDogMCkpCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVXBkYXRlIGEgaGFzaCB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBpbnB1dCBieXRlCi0gKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gVVBEQVRFX0hBU0ggYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQorICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIHRvIFVQREFURV9IQVNIIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKICAqICAgIGlucHV0IGNoYXJhY3RlcnMsIHNvIHRoYXQgYSBydW5uaW5nIGhhc2gga2V5IGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZQogICogICAgcHJldmlvdXMga2V5IGluc3RlYWQgb2YgY29tcGxldGUgcmVjYWxjdWxhdGlvbiBlYWNoIHRpbWUuCiAgKi8KQEAgLTE3MCw3ICsxNzMsNyBAQAogICogdGhlIHByZXZpb3VzIGxlbmd0aCBvZiB0aGUgaGFzaCBjaGFpbi4KICAqIElmIHRoaXMgZmlsZSBpcyBjb21waWxlZCB3aXRoIC1ERkFTVEVTVCwgdGhlIGNvbXByZXNzaW9uIGxldmVsIGlzIGZvcmNlZAogICogdG8gMSwgYW5kIG5vIGhhc2ggY2hhaW5zIGFyZSBtYWludGFpbmVkLgotICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIElOU0VSVF9TVFJJTkcgYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQorICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIHRvIElOU0VSVF9TVFJJTkcgYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQogICogICAgaW5wdXQgY2hhcmFjdGVycyBhbmQgdGhlIGZpcnN0IE1JTl9NQVRDSCBieXRlcyBvZiBzdHIgYXJlIHZhbGlkCiAgKiAgICAoZXhjZXB0IGZvciB0aGUgbGFzdCBNSU5fTUFUQ0gtMSBieXRlcyBvZiB0aGUgaW5wdXQgZmlsZSkuCiAgKi8KQEAgLTIzNSwxMCArMjM4LDE5IEBACiAKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7CiAgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7CisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCiAgICAgICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7CiAgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyNlbmRpZgogICAgIH0KLSAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKSBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgICAgICBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyNlbmRpZgogCiAjaWZkZWYgRkFTVEVTVAogICAgIGlmIChsZXZlbCAhPSAwKSBsZXZlbCA9IDE7CkBAIC0yOTMsNyArMzA1LDcgQEAKICAgICBpZiAocy0+d2luZG93ID09IFpfTlVMTCB8fCBzLT5wcmV2ID09IFpfTlVMTCB8fCBzLT5oZWFkID09IFpfTlVMTCB8fAogICAgICAgICBzLT5wZW5kaW5nX2J1ZiA9PSBaX05VTEwpIHsKICAgICAgICAgcy0+c3RhdHVzID0gRklOSVNIX1NUQVRFOwotICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciopRVJSX01TRyhaX01FTV9FUlJPUik7CisgICAgICAgIHN0cm0tPm1zZyA9IEVSUl9NU0coWl9NRU1fRVJST1IpOwogICAgICAgICBkZWZsYXRlRW5kIChzdHJtKTsKICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIH0KQEAgLTMxNCw0MyArMzI2LDcwIEBACiAgICAgdUludCAgZGljdExlbmd0aDsKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIHVJbnQgbGVuZ3RoID0gZGljdExlbmd0aDsKLSAgICB1SW50IG47Ci0gICAgSVBvcyBoYXNoX2hlYWQgPSAwOworICAgIHVJbnQgc3RyLCBuOworICAgIGludCB3cmFwOworICAgIHVuc2lnbmVkIGF2YWlsOworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciAqbmV4dDsKIAotICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwgfHwgZGljdGlvbmFyeSA9PSBaX05VTEwgfHwKLSAgICAgICAgc3RybS0+c3RhdGUtPndyYXAgPT0gMiB8fAotICAgICAgICAoc3RybS0+c3RhdGUtPndyYXAgPT0gMSAmJiBzdHJtLT5zdGF0ZS0+c3RhdHVzICE9IElOSVRfU1RBVEUpKQorICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwgfHwgZGljdGlvbmFyeSA9PSBaX05VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgd3JhcCA9IHMtPndyYXA7CisgICAgaWYgKHdyYXAgPT0gMiB8fCAod3JhcCA9PSAxICYmIHMtPnN0YXR1cyAhPSBJTklUX1NUQVRFKSB8fCBzLT5sb29rYWhlYWQpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAotICAgIHMgPSBzdHJtLT5zdGF0ZTsKLSAgICBpZiAocy0+d3JhcCkKKyAgICAvKiB3aGVuIHVzaW5nIHpsaWIgd3JhcHBlcnMsIGNvbXB1dGUgQWRsZXItMzIgZm9yIHByb3ZpZGVkIGRpY3Rpb25hcnkgKi8KKyAgICBpZiAod3JhcCA9PSAxKQogICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+YWRsZXIsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOworICAgIHMtPndyYXAgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogYXZvaWQgY29tcHV0aW5nIEFkbGVyLTMyIGluIHJlYWRfYnVmICovCiAKLSAgICBpZiAobGVuZ3RoIDwgTUlOX01BVENIKSByZXR1cm4gWl9PSzsKLSAgICBpZiAobGVuZ3RoID4gcy0+d19zaXplKSB7Ci0gICAgICAgIGxlbmd0aCA9IHMtPndfc2l6ZTsKLSAgICAgICAgZGljdGlvbmFyeSArPSBkaWN0TGVuZ3RoIC0gbGVuZ3RoOyAvKiB1c2UgdGhlIHRhaWwgb2YgdGhlIGRpY3Rpb25hcnkgKi8KKyAgICAvKiBpZiBkaWN0aW9uYXJ5IHdvdWxkIGZpbGwgd2luZG93LCBqdXN0IHJlcGxhY2UgdGhlIGhpc3RvcnkgKi8KKyAgICBpZiAoZGljdExlbmd0aCA+PSBzLT53X3NpemUpIHsKKyAgICAgICAgaWYgKHdyYXAgPT0gMCkgeyAgICAgICAgICAgIC8qIGFscmVhZHkgZW1wdHkgb3RoZXJ3aXNlICovCisgICAgICAgICAgICBDTEVBUl9IQVNIKHMpOworICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSAwOworICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAgICAgICAgIHMtPmluc2VydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZGljdGlvbmFyeSArPSBkaWN0TGVuZ3RoIC0gcy0+d19zaXplOyAgLyogdXNlIHRoZSB0YWlsICovCisgICAgICAgIGRpY3RMZW5ndGggPSBzLT53X3NpemU7CiAgICAgfQotICAgIHptZW1jcHkocy0+d2luZG93LCBkaWN0aW9uYXJ5LCBsZW5ndGgpOwotICAgIHMtPnN0cnN0YXJ0ID0gbGVuZ3RoOwotICAgIHMtPmJsb2NrX3N0YXJ0ID0gKGxvbmcpbGVuZ3RoOwogCi0gICAgLyogSW5zZXJ0IGFsbCBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIChleGNlcHQgZm9yIHRoZSBsYXN0IHR3byBieXRlcykuCi0gICAgICogcy0+bG9va2FoZWFkIHN0YXlzIG51bGwsIHNvIHMtPmluc19oIHdpbGwgYmUgcmVjb21wdXRlZCBhdCB0aGUgbmV4dAotICAgICAqIGNhbGwgb2YgZmlsbF93aW5kb3cuCi0gICAgICovCi0gICAgcy0+aW5zX2ggPSBzLT53aW5kb3dbMF07Ci0gICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1sxXSk7Ci0gICAgZm9yIChuID0gMDsgbiA8PSBsZW5ndGggLSBNSU5fTUFUQ0g7IG4rKykgewotICAgICAgICBJTlNFUlRfU1RSSU5HKHMsIG4sIGhhc2hfaGVhZCk7CisgICAgLyogaW5zZXJ0IGRpY3Rpb25hcnkgaW50byB3aW5kb3cgYW5kIGhhc2ggKi8KKyAgICBhdmFpbCA9IHN0cm0tPmF2YWlsX2luOworICAgIG5leHQgPSBzdHJtLT5uZXh0X2luOworICAgIHN0cm0tPmF2YWlsX2luID0gZGljdExlbmd0aDsKKyAgICBzdHJtLT5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilkaWN0aW9uYXJ5OworICAgIGZpbGxfd2luZG93KHMpOworICAgIHdoaWxlIChzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CisgICAgICAgIHN0ciA9IHMtPnN0cnN0YXJ0OworICAgICAgICBuID0gcy0+bG9va2FoZWFkIC0gKE1JTl9NQVRDSC0xKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5fTUFUQ0gtMV0pOworI2lmbmRlZiBGQVNURVNUCisgICAgICAgICAgICBzLT5wcmV2W3N0ciAmIHMtPndfbWFza10gPSBzLT5oZWFkW3MtPmluc19oXTsKKyNlbmRpZgorICAgICAgICAgICAgcy0+aGVhZFtzLT5pbnNfaF0gPSAoUG9zKXN0cjsKKyAgICAgICAgICAgIHN0cisrOworICAgICAgICB9IHdoaWxlICgtLW4pOworICAgICAgICBzLT5zdHJzdGFydCA9IHN0cjsKKyAgICAgICAgcy0+bG9va2FoZWFkID0gTUlOX01BVENILTE7CisgICAgICAgIGZpbGxfd2luZG93KHMpOwogICAgIH0KLSAgICBpZiAoaGFzaF9oZWFkKSBoYXNoX2hlYWQgPSAwOyAgLyogdG8gbWFrZSBjb21waWxlciBoYXBweSAqLworICAgIHMtPnN0cnN0YXJ0ICs9IHMtPmxvb2thaGVhZDsKKyAgICBzLT5ibG9ja19zdGFydCA9IChsb25nKXMtPnN0cnN0YXJ0OworICAgIHMtPmluc2VydCA9IHMtPmxvb2thaGVhZDsKKyAgICBzLT5sb29rYWhlYWQgPSAwOworICAgIHMtPm1hdGNoX2xlbmd0aCA9IHMtPnByZXZfbGVuZ3RoID0gTUlOX01BVENILTE7CisgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKKyAgICBzdHJtLT5uZXh0X2luID0gbmV4dDsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGF2YWlsOworICAgIHMtPndyYXAgPSB3cmFwOwogICAgIHJldHVybiBaX09LOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi1pbnQgWkVYUE9SVCBkZWZsYXRlUmVzZXQgKHN0cm0pCitpbnQgWkVYUE9SVCBkZWZsYXRlUmVzZXRLZWVwIChzdHJtKQogICAgIHpfc3RyZWFtcCBzdHJtOwogewogICAgIGRlZmxhdGVfc3RhdGUgKnM7CkBAIC0zODAsMTIgKzQxOSwyMyBAQAogICAgIHMtPmxhc3RfZmx1c2ggPSBaX05PX0ZMVVNIOwogCiAgICAgX3RyX2luaXQocyk7Ci0gICAgbG1faW5pdChzKTsKIAogICAgIHJldHVybiBaX09LOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlUmVzZXQgKHN0cm0pCisgICAgel9zdHJlYW1wIHN0cm07Cit7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGRlZmxhdGVSZXNldEtlZXAoc3RybSk7CisgICAgaWYgKHJldCA9PSBaX09LKQorICAgICAgICBsbV9pbml0KHN0cm0tPnN0YXRlKTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0SGVhZGVyIChzdHJtLCBoZWFkKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGd6X2hlYWRlcnAgaGVhZDsKQEAgLTM5NywxNCArNDQ3LDQyIEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVQZW5kaW5nIChzdHJtLCBwZW5kaW5nLCBiaXRzKQorICAgIHVuc2lnbmVkICpwZW5kaW5nOworICAgIGludCAqYml0czsKKyAgICB6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKHBlbmRpbmcgIT0gWl9OVUxMKQorICAgICAgICAqcGVuZGluZyA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nOworICAgIGlmIChiaXRzICE9IFpfTlVMTCkKKyAgICAgICAgKmJpdHMgPSBzdHJtLT5zdGF0ZS0+YmlfdmFsaWQ7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIGludCBaRVhQT1JUIGRlZmxhdGVQcmltZSAoc3RybSwgYml0cywgdmFsdWUpCiAgICAgel9zdHJlYW1wIHN0cm07CiAgICAgaW50IGJpdHM7CiAgICAgaW50IHZhbHVlOwogeworICAgIGRlZmxhdGVfc3RhdGUgKnM7CisgICAgaW50IHB1dDsKKwogICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICBzdHJtLT5zdGF0ZS0+YmlfdmFsaWQgPSBiaXRzOwotICAgIHN0cm0tPnN0YXRlLT5iaV9idWYgPSAodXNoKSh2YWx1ZSAmICgoMSA8PCBiaXRzKSAtIDEpKTsKKyAgICBzID0gc3RybS0+c3RhdGU7CisgICAgaWYgKChCeXRlZiAqKShzLT5kX2J1ZikgPCBzLT5wZW5kaW5nX291dCArICgoQnVmX3NpemUgKyA3KSA+PiAzKSkKKyAgICAgICAgcmV0dXJuIFpfQlVGX0VSUk9SOworICAgIGRvIHsKKyAgICAgICAgcHV0ID0gQnVmX3NpemUgLSBzLT5iaV92YWxpZDsKKyAgICAgICAgaWYgKHB1dCA+IGJpdHMpCisgICAgICAgICAgICBwdXQgPSBiaXRzOworICAgICAgICBzLT5iaV9idWYgfD0gKHVzaCkoKHZhbHVlICYgKCgxIDw8IHB1dCkgLSAxKSkgPDwgcy0+YmlfdmFsaWQpOworICAgICAgICBzLT5iaV92YWxpZCArPSBwdXQ7CisgICAgICAgIF90cl9mbHVzaF9iaXRzKHMpOworICAgICAgICB2YWx1ZSA+Pj0gcHV0OworICAgICAgICBiaXRzIC09IHB1dDsKKyAgICB9IHdoaWxlIChiaXRzKTsKICAgICByZXR1cm4gWl9PSzsKIH0KIApAQCAtNDM1LDYgKzUxMyw4IEBACiAgICAgICAgIHN0cm0tPnRvdGFsX2luICE9IDApIHsKICAgICAgICAgLyogRmx1c2ggdGhlIGxhc3QgYnVmZmVyOiAqLwogICAgICAgICBlcnIgPSBkZWZsYXRlKHN0cm0sIFpfQkxPQ0spOworICAgICAgICBpZiAoZXJyID09IFpfQlVGX0VSUk9SICYmIHMtPnBlbmRpbmcgPT0gMCkKKyAgICAgICAgICAgIGVyciA9IFpfT0s7CiAgICAgfQogICAgIGlmIChzLT5sZXZlbCAhPSBsZXZlbCkgewogICAgICAgICBzLT5sZXZlbCA9IGxldmVsOwpAQCAtNTYyLDE5ICs2NDIsMjIgQEAKIGxvY2FsIHZvaWQgZmx1c2hfcGVuZGluZyhzdHJtKQogICAgIHpfc3RyZWFtcCBzdHJtOwogewotICAgIHVuc2lnbmVkIGxlbiA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nOworICAgIHVuc2lnbmVkIGxlbjsKKyAgICBkZWZsYXRlX3N0YXRlICpzID0gc3RybS0+c3RhdGU7CiAKKyAgICBfdHJfZmx1c2hfYml0cyhzKTsKKyAgICBsZW4gPSBzLT5wZW5kaW5nOwogICAgIGlmIChsZW4gPiBzdHJtLT5hdmFpbF9vdXQpIGxlbiA9IHN0cm0tPmF2YWlsX291dDsKICAgICBpZiAobGVuID09IDApIHJldHVybjsKIAotICAgIHptZW1jcHkoc3RybS0+bmV4dF9vdXQsIHN0cm0tPnN0YXRlLT5wZW5kaW5nX291dCwgbGVuKTsKKyAgICB6bWVtY3B5KHN0cm0tPm5leHRfb3V0LCBzLT5wZW5kaW5nX291dCwgbGVuKTsKICAgICBzdHJtLT5uZXh0X291dCAgKz0gbGVuOwotICAgIHN0cm0tPnN0YXRlLT5wZW5kaW5nX291dCAgKz0gbGVuOworICAgIHMtPnBlbmRpbmdfb3V0ICArPSBsZW47CiAgICAgc3RybS0+dG90YWxfb3V0ICs9IGxlbjsKICAgICBzdHJtLT5hdmFpbF9vdXQgIC09IGxlbjsKLSAgICBzdHJtLT5zdGF0ZS0+cGVuZGluZyAtPSBsZW47Ci0gICAgaWYgKHN0cm0tPnN0YXRlLT5wZW5kaW5nID09IDApIHsKLSAgICAgICAgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0ID0gc3RybS0+c3RhdGUtPnBlbmRpbmdfYnVmOworICAgIHMtPnBlbmRpbmcgLT0gbGVuOworICAgIGlmIChzLT5wZW5kaW5nID09IDApIHsKKyAgICAgICAgcy0+cGVuZGluZ19vdXQgPSBzLT5wZW5kaW5nX2J1ZjsKICAgICB9CiB9CiAKQEAgLTgwMSw3ICs4ODQsNyBAQAogICAgICAqIGZsdXNoZXMuIEZvciByZXBlYXRlZCBhbmQgdXNlbGVzcyBjYWxscyB3aXRoIFpfRklOSVNILCB3ZSBrZWVwCiAgICAgICogcmV0dXJuaW5nIFpfU1RSRUFNX0VORCBpbnN0ZWFkIG9mIFpfQlVGX0VSUk9SLgogICAgICAqLwotICAgIH0gZWxzZSBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBmbHVzaCA8PSBvbGRfZmx1c2ggJiYKKyAgICB9IGVsc2UgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgUkFOSyhmbHVzaCkgPD0gUkFOSyhvbGRfZmx1c2gpICYmCiAgICAgICAgICAgICAgICBmbHVzaCAhPSBaX0ZJTklTSCkgewogICAgICAgICBFUlJfUkVUVVJOKHN0cm0sIFpfQlVGX0VSUk9SKTsKICAgICB9CkBAIC04NTAsNiArOTMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdHJzdGFydCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBzLT5ibG9ja19zdGFydCA9IDBMOworICAgICAgICAgICAgICAgICAgICAgICAgcy0+aW5zZXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTk0NSwxMiArMTAyOSwxMiBAQAogCiAgICAgc3MgPSBzb3VyY2UtPnN0YXRlOwogCi0gICAgem1lbWNweShkZXN0LCBzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOworICAgIHptZW1jcHkoKHZvaWRwZilkZXN0LCAodm9pZHBmKXNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7CiAKICAgICBkcyA9IChkZWZsYXRlX3N0YXRlICopIFpBTExPQyhkZXN0LCAxLCBzaXplb2YoZGVmbGF0ZV9zdGF0ZSkpOwogICAgIGlmIChkcyA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKICAgICBkZXN0LT5zdGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopIGRzOwotICAgIHptZW1jcHkoZHMsIHNzLCBzaXplb2YoZGVmbGF0ZV9zdGF0ZSkpOworICAgIHptZW1jcHkoKHZvaWRwZilkcywgKHZvaWRwZilzcywgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKICAgICBkcy0+c3RybSA9IGRlc3Q7CiAKICAgICBkcy0+d2luZG93ID0gKEJ5dGVmICopIFpBTExPQyhkZXN0LCBkcy0+d19zaXplLCAyKnNpemVvZihCeXRlKSk7CkBAIC05NjYsOCArMTA1MCw4IEBACiAgICAgfQogICAgIC8qIGZvbGxvd2luZyB6bWVtY3B5IGRvIG5vdCB3b3JrIGZvciAxNi1iaXQgTVNET1MgKi8KICAgICB6bWVtY3B5KGRzLT53aW5kb3csIHNzLT53aW5kb3csIGRzLT53X3NpemUgKiAyICogc2l6ZW9mKEJ5dGUpKTsKLSAgICB6bWVtY3B5KGRzLT5wcmV2LCBzcy0+cHJldiwgZHMtPndfc2l6ZSAqIHNpemVvZihQb3MpKTsKLSAgICB6bWVtY3B5KGRzLT5oZWFkLCBzcy0+aGVhZCwgZHMtPmhhc2hfc2l6ZSAqIHNpemVvZihQb3MpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMtPnByZXYsICh2b2lkcGYpc3MtPnByZXYsIGRzLT53X3NpemUgKiBzaXplb2YoUG9zKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRzLT5oZWFkLCAodm9pZHBmKXNzLT5oZWFkLCBkcy0+aGFzaF9zaXplICogc2l6ZW9mKFBvcykpOwogICAgIHptZW1jcHkoZHMtPnBlbmRpbmdfYnVmLCBzcy0+cGVuZGluZ19idWYsICh1SW50KWRzLT5wZW5kaW5nX2J1Zl9zaXplKTsKIAogICAgIGRzLT5wZW5kaW5nX291dCA9IGRzLT5wZW5kaW5nX2J1ZiArIChzcy0+cGVuZGluZ19vdXQgLSBzcy0+cGVuZGluZ19idWYpOwpAQCAtMTAwMSwxNSArMTA4NSwxNSBAQAogCiAgICAgc3RybS0+YXZhaWxfaW4gIC09IGxlbjsKIAorICAgIHptZW1jcHkoYnVmLCBzdHJtLT5uZXh0X2luLCBsZW4pOwogICAgIGlmIChzdHJtLT5zdGF0ZS0+d3JhcCA9PSAxKSB7Ci0gICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgc3RybS0+bmV4dF9pbiwgbGVuKTsKKyAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBidWYsIGxlbik7CiAgICAgfQogI2lmZGVmIEdaSVAKICAgICBlbHNlIGlmIChzdHJtLT5zdGF0ZS0+d3JhcCA9PSAyKSB7Ci0gICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHN0cm0tPm5leHRfaW4sIGxlbik7CisgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIGJ1ZiwgbGVuKTsKICAgICB9CiAjZW5kaWYKLSAgICB6bWVtY3B5KGJ1Ziwgc3RybS0+bmV4dF9pbiwgbGVuKTsKICAgICBzdHJtLT5uZXh0X2luICArPSBsZW47CiAgICAgc3RybS0+dG90YWxfaW4gKz0gbGVuOwogCkBAIC0xMDM2LDYgKzExMjAsNyBAQAogICAgIHMtPnN0cnN0YXJ0ID0gMDsKICAgICBzLT5ibG9ja19zdGFydCA9IDBMOwogICAgIHMtPmxvb2thaGVhZCA9IDA7CisgICAgcy0+aW5zZXJ0ID0gMDsKICAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSC0xOwogICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgcy0+aW5zX2ggPSAwOwpAQCAtMTMxMCw2ICsxMzk1LDggQEAKICAgICB1bnNpZ25lZCBtb3JlOyAgICAvKiBBbW91bnQgb2YgZnJlZSBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSB3aW5kb3cuICovCiAgICAgdUludCB3c2l6ZSA9IHMtPndfc2l6ZTsKIAorICAgIEFzc2VydChzLT5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFELCAiYWxyZWFkeSBlbm91Z2ggbG9va2FoZWFkIik7CisKICAgICBkbyB7CiAgICAgICAgIG1vcmUgPSAodW5zaWduZWQpKHMtPndpbmRvd19zaXplIC0odWxnKXMtPmxvb2thaGVhZCAtKHVsZylzLT5zdHJzdGFydCk7CiAKQEAgLTEzNjIsNyArMTQ0OSw3IEBACiAjZW5kaWYKICAgICAgICAgICAgIG1vcmUgKz0gd3NpemU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHMtPnN0cm0tPmF2YWlsX2luID09IDApIHJldHVybjsKKyAgICAgICAgaWYgKHMtPnN0cm0tPmF2YWlsX2luID09IDApIGJyZWFrOwogCiAgICAgICAgIC8qIElmIHRoZXJlIHdhcyBubyBzbGlkaW5nOgogICAgICAgICAgKiAgICBzdHJzdGFydCA8PSBXU0laRStNQVhfRElTVC0xICYmIGxvb2thaGVhZCA8PSBNSU5fTE9PS0FIRUFEIC0gMSAmJgpAQCAtMTM4MSwxMiArMTQ2OCwyNCBAQAogICAgICAgICBzLT5sb29rYWhlYWQgKz0gbjsKIAogICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBpbnB1dDogKi8KLSAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKLSAgICAgICAgICAgIHMtPmluc19oID0gcy0+d2luZG93W3MtPnN0cnN0YXJ0XTsKLSAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQrMV0pOworICAgICAgICBpZiAocy0+bG9va2FoZWFkICsgcy0+aW5zZXJ0ID49IE1JTl9NQVRDSCkgeworICAgICAgICAgICAgdUludCBzdHIgPSBzLT5zdHJzdGFydCAtIHMtPmluc2VydDsKKyAgICAgICAgICAgIHMtPmluc19oID0gcy0+d2luZG93W3N0cl07CisgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIDFdKTsKICNpZiBNSU5fTUFUQ0ggIT0gMwogICAgICAgICAgICAgQ2FsbCBVUERBVEVfSEFTSCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXMKICNlbmRpZgorICAgICAgICAgICAgd2hpbGUgKHMtPmluc2VydCkgeworICAgICAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsKKyNpZm5kZWYgRkFTVEVTVAorICAgICAgICAgICAgICAgIHMtPnByZXZbc3RyICYgcy0+d19tYXNrXSA9IHMtPmhlYWRbcy0+aW5zX2hdOworI2VuZGlmCisgICAgICAgICAgICAgICAgcy0+aGVhZFtzLT5pbnNfaF0gPSAoUG9zKXN0cjsKKyAgICAgICAgICAgICAgICBzdHIrKzsKKyAgICAgICAgICAgICAgICBzLT5pbnNlcnQtLTsKKyAgICAgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkICsgcy0+aW5zZXJ0IDwgTUlOX01BVENIKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBJZiB0aGUgd2hvbGUgaW5wdXQgaGFzIGxlc3MgdGhhbiBNSU5fTUFUQ0ggYnl0ZXMsIGluc19oIGlzIGdhcmJhZ2UsCiAgICAgICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBpbXBvcnRhbnQgc2luY2Ugb25seSBsaXRlcmFsIGJ5dGVzIHdpbGwgYmUgZW1pdHRlZC4KQEAgLTE0MjcsNiArMTUyNiw5IEBACiAgICAgICAgICAgICBzLT5oaWdoX3dhdGVyICs9IGluaXQ7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQsCisgICAgICAgICAgICJub3QgZW5vdWdoIHJvb20gZm9yIHNlYXJjaCIpOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE1MDYsOCArMTYwOCwxNCBAQAogICAgICAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSAwOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAoKGxvbmcpcy0+c3Ryc3RhcnQgPiBzLT5ibG9ja19zdGFydCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTYwMyw4ICsxNzExLDE0IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQgPCBNSU5fTUFUQ0gtMSA/IHMtPnN0cnN0YXJ0IDogTUlOX01BVENILTE7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CiAKICNpZm5kZWYgRkFTVEVTVApAQCAtMTcyOCw4ICsxODQyLDE0IEBACiAgICAgICAgIF90cl90YWxseV9saXQocywgcy0+d2luZG93W3MtPnN0cnN0YXJ0LTFdLCBiZmx1c2gpOwogICAgICAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IHMtPnN0cnN0YXJ0IDwgTUlOX01BVENILTEgPyBzLT5zdHJzdGFydCA6IE1JTl9NQVRDSC0xOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogI2VuZGlmIC8qIEZBU1RFU1QgKi8KIApAQCAtMTc0OSwxMSArMTg2OSwxMSBAQAogICAgIGZvciAoOzspIHsKICAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0CiAgICAgICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzCi0gICAgICAgICAqIGZvciB0aGUgbG9uZ2VzdCBlbmNvZGFibGUgcnVuLgorICAgICAgICAgKiBmb3IgdGhlIGxvbmdlc3QgcnVuLCBwbHVzIG9uZSBmb3IgdGhlIHVucm9sbGVkIGxvb3AuCiAgICAgICAgICAqLwotICAgICAgICBpZiAocy0+bG9va2FoZWFkIDwgTUFYX01BVENIKSB7CisgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPD0gTUFYX01BVENIKSB7CiAgICAgICAgICAgICBmaWxsX3dpbmRvdyhzKTsKLSAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPCBNQVhfTUFUQ0ggJiYgZmx1c2ggPT0gWl9OT19GTFVTSCkgeworICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8PSBNQVhfTUFUQ0ggJiYgZmx1c2ggPT0gWl9OT19GTFVTSCkgewogICAgICAgICAgICAgICAgIHJldHVybiBuZWVkX21vcmU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIGJyZWFrOyAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqLwpAQCAtMTc3Niw2ICsxODk2LDcgQEAKICAgICAgICAgICAgICAgICBpZiAocy0+bWF0Y2hfbGVuZ3RoID4gcy0+bG9va2FoZWFkKQogICAgICAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5sb29rYWhlYWQ7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBBc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVJbnQpKHMtPndpbmRvd19zaXplLTEpLCAid2lsZCBzY2FuIik7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBFbWl0IG1hdGNoIGlmIGhhdmUgcnVuIG9mIE1JTl9NQVRDSCBvciBsb25nZXIsIGVsc2UgZW1pdCBsaXRlcmFsICovCkBAIC0xNzk2LDggKzE5MTcsMTQgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSAwOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE4MjksNiArMTk1NiwxMiBAQAogICAgICAgICBzLT5zdHJzdGFydCsrOwogICAgICAgICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSAwOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2RlZmxhdGUuaCBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmgKaW5kZXggY2JmMGQxZS4uY2UwMjk5ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2RlZmxhdGUuaAorKysgYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyogZGVmbGF0ZS5oIC0tIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBKZWFuLWxvdXAgR2FpbGx5CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNDgsNiArNDgsOSBAQAogI2RlZmluZSBNQVhfQklUUyAxNQogLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQklUUyBiaXRzICovCiAKKyNkZWZpbmUgQnVmX3NpemUgMTYKKy8qIHNpemUgb2YgYml0IGJ1ZmZlciBpbiBiaV9idWYgKi8KKwogI2RlZmluZSBJTklUX1NUQVRFICAgIDQyCiAjZGVmaW5lIEVYVFJBX1NUQVRFICAgNjkKICNkZWZpbmUgTkFNRV9TVEFURSAgICA3MwpAQCAtMTAxLDcgKzEwNCw3IEBACiAgICAgaW50ICAgd3JhcDsgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCAqLwogICAgIGd6X2hlYWRlcnAgIGd6aGVhZDsgIC8qIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIHRvIHdyaXRlICovCiAgICAgdUludCAgIGd6aW5kZXg7ICAgICAgLyogd2hlcmUgaW4gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQgKi8KLSAgICBCeXRlICBtZXRob2Q7ICAgICAgICAvKiBTVE9SRUQgKGZvciB6aXAgb25seSkgb3IgREVGTEFURUQgKi8KKyAgICBCeXRlICBtZXRob2Q7ICAgICAgICAvKiBjYW4gb25seSBiZSBERUZMQVRFRCAqLwogICAgIGludCAgIGxhc3RfZmx1c2g7ICAgIC8qIHZhbHVlIG9mIGZsdXNoIHBhcmFtIGZvciBwcmV2aW91cyBkZWZsYXRlIGNhbGwgKi8KIAogICAgICAgICAgICAgICAgIC8qIHVzZWQgYnkgZGVmbGF0ZS5jOiAqLwpAQCAtMTg4LDcgKzE5MSw3IEBACiAgICAgaW50IG5pY2VfbWF0Y2g7IC8qIFN0b3Agc2VhcmNoaW5nIHdoZW4gY3VycmVudCBtYXRjaCBleGNlZWRzIHRoaXMgKi8KIAogICAgICAgICAgICAgICAgIC8qIHVzZWQgYnkgdHJlZXMuYzogKi8KLSAgICAvKiBEaWRuJ3QgdXNlIGN0X2RhdGEgdHlwZWRlZiBiZWxvdyB0byBzdXByZXNzIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyAgICAvKiBEaWRuJ3QgdXNlIGN0X2RhdGEgdHlwZWRlZiBiZWxvdyB0byBzdXBwcmVzcyBjb21waWxlciB3YXJuaW5nICovCiAgICAgc3RydWN0IGN0X2RhdGFfcyBkeW5fbHRyZWVbSEVBUF9TSVpFXTsgICAvKiBsaXRlcmFsIGFuZCBsZW5ndGggdHJlZSAqLwogICAgIHN0cnVjdCBjdF9kYXRhX3MgZHluX2R0cmVlWzIqRF9DT0RFUysxXTsgLyogZGlzdGFuY2UgdHJlZSAqLwogICAgIHN0cnVjdCBjdF9kYXRhX3MgYmxfdHJlZVsyKkJMX0NPREVTKzFdOyAgLyogSHVmZm1hbiB0cmVlIGZvciBiaXQgbGVuZ3RocyAqLwpAQCAtMjQ0LDcgKzI0Nyw3IEBACiAgICAgdWxnIG9wdF9sZW47ICAgICAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBvcHRpbWFsIHRyZWVzICovCiAgICAgdWxnIHN0YXRpY19sZW47ICAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBzdGF0aWMgdHJlZXMgKi8KICAgICB1SW50IG1hdGNoZXM7ICAgICAgIC8qIG51bWJlciBvZiBzdHJpbmcgbWF0Y2hlcyBpbiBjdXJyZW50IGJsb2NrICovCi0gICAgaW50IGxhc3RfZW9iX2xlbjsgICAvKiBiaXQgbGVuZ3RoIG9mIEVPQiBjb2RlIGZvciBsYXN0IGJsb2NrICovCisgICAgdUludCBpbnNlcnQ7ICAgICAgICAvKiBieXRlcyBhdCBlbmQgb2Ygd2luZG93IGxlZnQgdG8gaW5zZXJ0ICovCiAKICNpZmRlZiBERUJVRwogICAgIHVsZyBjb21wcmVzc2VkX2xlbjsgLyogdG90YWwgYml0IGxlbmd0aCBvZiBjb21wcmVzc2VkIGZpbGUgbW9kIDJeMzIgKi8KQEAgLTI5NCw2ICsyOTcsNyBAQAogaW50IFpMSUJfSU5URVJOQUwgX3RyX3RhbGx5IE9GKChkZWZsYXRlX3N0YXRlICpzLCB1bnNpZ25lZCBkaXN0LCB1bnNpZ25lZCBsYykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVsZyBzdG9yZWRfbGVuLCBpbnQgbGFzdCkpOwordm9pZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9iaXRzIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiB2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2FsaWduIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiB2b2lkIFpMSUJfSU5URVJOQUwgX3RyX3N0b3JlZF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVsZyBzdG9yZWRfbGVuLCBpbnQgbGFzdCkpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2V4YW1wbGUuYyBiL01vZHVsZXMvemxpYi9leGFtcGxlLmMKaW5kZXggNjA0NzM2Zi4uMTM4YTY5OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2V4YW1wbGUuYworKysgYi9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogZXhhbXBsZS5jIC0tIHVzYWdlIGV4YW1wbGUgb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDExIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMjYsNyArMjYsNyBAQAogICAgIH0gXAogfQogCi1jb25zdCBjaGFyIGhlbGxvW10gPSAiaGVsbG8sIGhlbGxvISI7Cit6X2NvbnN0IGNoYXIgaGVsbG9bXSA9ICJoZWxsbywgaGVsbG8hIjsKIC8qICJoZWxsbyB3b3JsZCIgd291bGQgYmUgbW9yZSBzdGFuZGFyZCwgYnV0IHRoZSByZXBlYXRlZCAiaGVsbG8iCiAgKiBzdHJlc3NlcyB0aGUgY29tcHJlc3Npb24gY29kZSBiZXR0ZXIsIHNvcnJ5Li4uCiAgKi8KQEAgLTM0LDEwICszNCw2IEBACiBjb25zdCBjaGFyIGRpY3Rpb25hcnlbXSA9ICJoZWxsbyI7CiB1TG9uZyBkaWN0SWQ7IC8qIEFkbGVyMzIgdmFsdWUgb2YgdGhlIGRpY3Rpb25hcnkgKi8KIAotdm9pZCB0ZXN0X2NvbXByZXNzICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Ci12b2lkIHRlc3RfZ3ppbyAgICAgICAgICBPRigoY29uc3QgY2hhciAqZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwogdm9pZCB0ZXN0X2RlZmxhdGUgICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbikpOwogdm9pZCB0ZXN0X2luZmxhdGUgICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CkBAIC01Myw2ICs0OSwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKIGludCAgbWFpbiAgICAgICAgICAgICAgIE9GKChpbnQgYXJnYywgY2hhciAqYXJndltdKSk7CiAKKworI2lmZGVmIFpfU09MTworCit2b2lkICpteWFsbG9jIE9GKCh2b2lkICosIHVuc2lnbmVkLCB1bnNpZ25lZCkpOwordm9pZCBteWZyZWUgT0YoKHZvaWQgKiwgdm9pZCAqKSk7CisKK3ZvaWQgKm15YWxsb2MocSwgbiwgbSkKKyAgICB2b2lkICpxOworICAgIHVuc2lnbmVkIG4sIG07Cit7CisgICAgcSA9IFpfTlVMTDsKKyAgICByZXR1cm4gY2FsbG9jKG4sIG0pOworfQorCit2b2lkIG15ZnJlZSh2b2lkICpxLCB2b2lkICpwKQoreworICAgIHEgPSBaX05VTEw7CisgICAgZnJlZShwKTsKK30KKworc3RhdGljIGFsbG9jX2Z1bmMgemFsbG9jID0gbXlhbGxvYzsKK3N0YXRpYyBmcmVlX2Z1bmMgemZyZWUgPSBteWZyZWU7CisKKyNlbHNlIC8qICFaX1NPTE8gKi8KKworc3RhdGljIGFsbG9jX2Z1bmMgemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKK3N0YXRpYyBmcmVlX2Z1bmMgemZyZWUgPSAoZnJlZV9mdW5jKTA7CisKK3ZvaWQgdGVzdF9jb21wcmVzcyAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwordm9pZCB0ZXN0X2d6aW8gICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKmZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBUZXN0IGNvbXByZXNzKCkgYW5kIHVuY29tcHJlc3MoKQogICovCkBAIC0xNjMsNiArMTkyLDggQEAKICNlbmRpZgogfQogCisjZW5kaWYgLyogWl9TT0xPICovCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGVzdCBkZWZsYXRlKCkgd2l0aCBzbWFsbCBidWZmZXJzCiAgKi8KQEAgLTE3NCwxNCArMjA1LDE0IEBACiAgICAgaW50IGVycjsKICAgICB1TG9uZyBsZW4gPSAodUxvbmcpc3RybGVuKGhlbGxvKSsxOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfREVGQVVMVF9DT01QUkVTU0lPTik7CiAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVJbml0Iik7CiAKLSAgICBjX3N0cmVhbS5uZXh0X2luICA9IChCeXRlZiopaGVsbG87CisgICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoel9jb25zdCB1bnNpZ25lZCBjaGFyICopaGVsbG87CiAgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKIAogICAgIHdoaWxlIChjX3N0cmVhbS50b3RhbF9pbiAhPSBsZW4gJiYgY19zdHJlYW0udG90YWxfb3V0IDwgY29tcHJMZW4pIHsKQEAgLTIxMyw4ICsyNDQsOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtMjUyLDggKzI4Myw4IEBACiAgICAgel9zdHJlYW0gY19zdHJlYW07IC8qIGNvbXByZXNzaW9uIHN0cmVhbSAqLwogICAgIGludCBlcnI7CiAKLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9CRVNUX1NQRUVEKTsKQEAgLTMwOSw4ICszNDAsOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtMzQ5LDE0ICszODAsMTQgQEAKICAgICBpbnQgZXJyOwogICAgIHVJbnQgbGVuID0gKHVJbnQpc3RybGVuKGhlbGxvKSsxOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfREVGQVVMVF9DT01QUkVTU0lPTik7CiAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVJbml0Iik7CiAKLSAgICBjX3N0cmVhbS5uZXh0X2luICA9IChCeXRlZiopaGVsbG87CisgICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoel9jb25zdCB1bnNpZ25lZCBjaGFyICopaGVsbG87CiAgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKICAgICBjX3N0cmVhbS5hdmFpbF9pbiA9IDM7CiAgICAgY19zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpKmNvbXByTGVuOwpAQCAtMzg4LDggKzQxOSw4IEBACiAKICAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CiAKLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CkBAIC00MzAsMjIgKzQ2MSwyMiBAQAogICAgIHpfc3RyZWFtIGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KICAgICBpbnQgZXJyOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lPTik7CiAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVJbml0Iik7CiAKICAgICBlcnIgPSBkZWZsYXRlU2V0RGljdGlvbmFyeSgmY19zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IEJ5dGVmKilkaWN0aW9uYXJ5LCBzaXplb2YoZGljdGlvbmFyeSkpOworICAgICAgICAgICAgICAgIChjb25zdCBCeXRlZiopZGljdGlvbmFyeSwgKGludClzaXplb2YoZGljdGlvbmFyeSkpOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlU2V0RGljdGlvbmFyeSIpOwogCiAgICAgZGljdElkID0gY19zdHJlYW0uYWRsZXI7CiAgICAgY19zdHJlYW0ubmV4dF9vdXQgPSBjb21wcjsKICAgICBjX3N0cmVhbS5hdmFpbF9vdXQgPSAodUludCljb21wckxlbjsKIAotICAgIGNfc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gPSAoel9jb25zdCB1bnNpZ25lZCBjaGFyICopaGVsbG87CiAgICAgY19zdHJlYW0uYXZhaWxfaW4gPSAodUludClzdHJsZW4oaGVsbG8pKzE7CiAKICAgICBlcnIgPSBkZWZsYXRlKCZjX3N0cmVhbSwgWl9GSU5JU0gpOwpAQCAtNDY5LDggKzUwMCw4IEBACiAKICAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CiAKLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CkBAIC00OTEsNyArNTIyLDcgQEAKICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJyID0gaW5mbGF0ZVNldERpY3Rpb25hcnkoJmRfc3RyZWFtLCAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGljdGlvbmFyeSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZGljdGlvbmFyeSkpOwogICAgICAgICB9CiAgICAgICAgIENIRUNLX0VSUihlcnIsICJpbmZsYXRlIHdpdGggZGljdCIpOwogICAgIH0KQEAgLTU0MCwxMCArNTcxLDE1IEBACiAgICAgICAgIHByaW50Zigib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQorCisjaWZkZWYgWl9TT0xPCisgICAgYXJnYyA9IHN0cmxlbihhcmd2WzBdKTsKKyNlbHNlCiAgICAgdGVzdF9jb21wcmVzcyhjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOwogCiAgICAgdGVzdF9nemlvKChhcmdjID4gMSA/IGFyZ3ZbMV0gOiBURVNURklMRSksCiAgICAgICAgICAgICAgIHVuY29tcHIsIHVuY29tcHJMZW4pOworI2VuZGlmCiAKICAgICB0ZXN0X2RlZmxhdGUoY29tcHIsIGNvbXByTGVuKTsKICAgICB0ZXN0X2luZmxhdGUoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nemd1dHMuaCBiL01vZHVsZXMvemxpYi9nemd1dHMuaAppbmRleCAwZjhmYjc5Li5kODc2NTlkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3pndXRzLmgKKysrIGIvTW9kdWxlcy96bGliL2d6Z3V0cy5oCkBAIC0xLDUgKzEsNSBAQAogLyogZ3pndXRzLmggLS0gemxpYiBpbnRlcm5hbCBoZWFkZXIgZGVmaW5pdGlvbnMgZm9yIGd6KiBvcGVyYXRpb25zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xMiw3ICsxMiw3IEBACiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZiAoKF9fR05VQ19fLTApICogMTAgKyBfX0dOVUNfTUlOT1JfXy0wID49IDMzKSAmJiAhZGVmaW5lZChOT19WSVopCisjaWZkZWYgSEFWRV9ISURERU4KICMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiAjZWxzZQogIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKQEAgLTI3LDEzICsyNyw4MCBAQAogI2VuZGlmCiAjaW5jbHVkZSA8ZmNudGwuaD4KIAorI2lmZGVmIF9XSU4zMgorIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfV0lOMzIpCisjICBpbmNsdWRlIDxpby5oPgorI2VuZGlmCisKKyNpZmRlZiBXSU5BUElfRkFNSUxZCisjICBkZWZpbmUgb3BlbiBfb3BlbgorIyAgZGVmaW5lIHJlYWQgX3JlYWQKKyMgIGRlZmluZSB3cml0ZSBfd3JpdGUKKyMgIGRlZmluZSBjbG9zZSBfY2xvc2UKKyNlbmRpZgorCiAjaWZkZWYgTk9fREVGTEFURSAgICAgICAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBkZWZpbml0aW9uICovCiAjICBkZWZpbmUgTk9fR1pDT01QUkVTUwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFNUREM5OSkgfHwgKGRlZmluZWQoX19UVVJCT0NfXykgJiYgX19UVVJCT0NfXyA+PSAweDU1MCkKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19DWUdXSU5fXykKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTVNET1MpICYmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAoQk9STEFOREMgPiAweDQxMCkKKyMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgaWZkZWYgTVNET1MKKy8qIHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChESkdQUD8pLAorICAgYnV0IGZvciBub3cgd2UganVzdCBhc3N1bWUgaXQgZG9lc24ndC4gKi8KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fVFVSQk9DX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIFdJTjMyCisvKiBJbiBXaW4zMiwgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSBhcyB0aGUgIm5vbi1BTlNJIiBfdnNucHJpbnRmLiAqLworIyAgICBpZiAhZGVmaW5lZCh2c25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyMgICAgICBpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgKCBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE1MDAgKQorIyAgICAgICAgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZkZWYgX19TQVNDCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBWTVMKKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fT1M0MDBfXworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgX19NVlNfXworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIHVubGlrZSBzbnByaW50ZiAod2hpY2ggaXMgcmVxdWlyZWQgaW4gQzk5LCB5ZXQgc3RpbGwgbm90IHN1cHBvcnRlZCBieQorICAgTWljcm9zb2Z0IG1vcmUgdGhhbiBhIGRlY2FkZSBsYXRlciEpLCBfc25wcmludGYgZG9lcyBub3QgZ3VhcmFudGVlIG51bGwKKyAgIHRlcm1pbmF0aW9uIG9mIHRoZSByZXN1bHQgLS0gaG93ZXZlciB0aGlzIGlzIG9ubHkgdXNlZCBpbiBnemxpYi5jIHdoZXJlCisgICB0aGUgcmVzdWx0IGlzIGFzc3VyZWQgdG8gZml0IGluIHRoZSBzcGFjZSBwcm92aWRlZCAqLwogI2lmZGVmIF9NU0NfVkVSCi0jICBpbmNsdWRlIDxpby5oPgotIyAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCisjICBkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCiAjZW5kaWYKIAogI2lmbmRlZiBsb2NhbApAQCAtNTIsNyArMTE5LDcgQEAKICMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KICMgIGRlZmluZSB6c3RyZXJyb3IoKSBnel9zdHJ3aW5lcnJvcigoRFdPUkQpR2V0TGFzdEVycm9yKCkpCiAjZWxzZQotIyAgaWZkZWYgU1REQworIyAgaWZuZGVmIE5PX1NUUkVSUk9SCiAjICAgIGluY2x1ZGUgPGVycm5vLmg+CiAjICAgIGRlZmluZSB6c3RyZXJyb3IoKSBzdHJlcnJvcihlcnJubykKICMgIGVsc2UKQEAgLTY4LDcgKzEzNSwxNSBAQAogICAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3pvZmZzZXQ2NCBPRigoZ3pGaWxlKSk7CiAjZW5kaWYKIAotLyogZGVmYXVsdCBpL28gYnVmZmVyIHNpemUgLS0gZG91YmxlIHRoaXMgZm9yIG91dHB1dCB3aGVuIHJlYWRpbmcgKi8KKy8qIGRlZmF1bHQgbWVtTGV2ZWwgKi8KKyNpZiBNQVhfTUVNX0xFVkVMID49IDgKKyMgIGRlZmluZSBERUZfTUVNX0xFVkVMIDgKKyNlbHNlCisjICBkZWZpbmUgREVGX01FTV9MRVZFTCAgTUFYX01FTV9MRVZFTAorI2VuZGlmCisKKy8qIGRlZmF1bHQgaS9vIGJ1ZmZlciBzaXplIC0tIGRvdWJsZSB0aGlzIGZvciBvdXRwdXQgd2hlbiByZWFkaW5nICh0aGlzIGFuZAorICAgdHdpY2UgdGhpcyBtdXN0IGJlIGFibGUgdG8gZml0IGluIGFuIHVuc2lnbmVkIHR5cGUpICovCiAjZGVmaW5lIEdaQlVGU0laRSA4MTkyCiAKIC8qIGd6aXAgbW9kZXMsIGFsc28gcHJvdmlkZSBhIGxpdHRsZSBpbnRlZ3JpdHkgY2hlY2sgb24gdGhlIHBhc3NlZCBzdHJ1Y3R1cmUgKi8KQEAgLTg0LDIzICsxNTksMjUgQEAKIAogLyogaW50ZXJuYWwgZ3ppcCBmaWxlIHN0YXRlIGRhdGEgc3RydWN0dXJlICovCiB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIC8qIGV4cG9zZWQgY29udGVudHMgZm9yIGd6Z2V0YygpIG1hY3JvICovCisgICAgc3RydWN0IGd6RmlsZV9zIHg7ICAgICAgLyogIngiIGZvciBleHBvc2VkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeC5oYXZlOiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IHgubmV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgubmV4dDogbmV4dCBvdXRwdXQgZGF0YSB0byBkZWxpdmVyIG9yIHdyaXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeC5wb3M6IGN1cnJlbnQgcG9zaXRpb24gaW4gdW5jb21wcmVzc2VkIGRhdGEgKi8KICAgICAgICAgLyogdXNlZCBmb3IgYm90aCByZWFkaW5nIGFuZCB3cml0aW5nICovCiAgICAgaW50IG1vZGU7ICAgICAgICAgICAgICAgLyogc2VlIGd6aXAgbW9kZXMgYWJvdmUgKi8KICAgICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAvKiBmaWxlIGRlc2NyaXB0b3IgKi8KICAgICBjaGFyICpwYXRoOyAgICAgICAgICAgICAvKiBwYXRoIG9yIGZkIGZvciBlcnJvciBtZXNzYWdlcyAqLwotICAgIHpfb2ZmNjRfdCBwb3M7ICAgICAgICAgIC8qIGN1cnJlbnQgcG9zaXRpb24gaW4gdW5jb21wcmVzc2VkIGRhdGEgKi8KICAgICB1bnNpZ25lZCBzaXplOyAgICAgICAgICAvKiBidWZmZXIgc2l6ZSwgemVybyBpZiBub3QgYWxsb2NhdGVkIHlldCAqLwogICAgIHVuc2lnbmVkIHdhbnQ7ICAgICAgICAgIC8qIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSwgZGVmYXVsdCBpcyBHWkJVRlNJWkUgKi8KICAgICB1bnNpZ25lZCBjaGFyICppbjsgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KICAgICB1bnNpZ25lZCBjaGFyICpvdXQ7ICAgICAvKiBvdXRwdXQgYnVmZmVyIChkb3VibGUtc2l6ZWQgd2hlbiByZWFkaW5nKSAqLwotICAgIHVuc2lnbmVkIGNoYXIgKm5leHQ7ICAgIC8qIG5leHQgb3V0cHV0IGRhdGEgdG8gZGVsaXZlciBvciB3cml0ZSAqLworICAgIGludCBkaXJlY3Q7ICAgICAgICAgICAgIC8qIDAgaWYgcHJvY2Vzc2luZyBnemlwLCAxIGlmIHRyYW5zcGFyZW50ICovCiAgICAgICAgIC8qIGp1c3QgZm9yIHJlYWRpbmcgKi8KLSAgICB1bnNpZ25lZCBoYXZlOyAgICAgICAgICAvKiBhbW91bnQgb2Ygb3V0cHV0IGRhdGEgdW51c2VkIGF0IG5leHQgKi8KLSAgICBpbnQgZW9mOyAgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGVuZCBvZiBpbnB1dCBmaWxlIHJlYWNoZWQgKi8KLSAgICB6X29mZjY0X3Qgc3RhcnQ7ICAgICAgICAvKiB3aGVyZSB0aGUgZ3ppcCBkYXRhIHN0YXJ0ZWQsIGZvciByZXdpbmRpbmcgKi8KLSAgICB6X29mZjY0X3QgcmF3OyAgICAgICAgICAvKiB3aGVyZSB0aGUgcmF3IGRhdGEgc3RhcnRlZCwgZm9yIHNlZWtpbmcgKi8KICAgICBpbnQgaG93OyAgICAgICAgICAgICAgICAvKiAwOiBnZXQgaGVhZGVyLCAxOiBjb3B5LCAyOiBkZWNvbXByZXNzICovCi0gICAgaW50IGRpcmVjdDsgICAgICAgICAgICAgLyogdHJ1ZSBpZiBsYXN0IHJlYWQgZGlyZWN0LCBmYWxzZSBpZiBnemlwICovCisgICAgel9vZmY2NF90IHN0YXJ0OyAgICAgICAgLyogd2hlcmUgdGhlIGd6aXAgZGF0YSBzdGFydGVkLCBmb3IgcmV3aW5kaW5nICovCisgICAgaW50IGVvZjsgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBlbmQgb2YgaW5wdXQgZmlsZSByZWFjaGVkICovCisgICAgaW50IHBhc3Q7ICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiByZWFkIHJlcXVlc3RlZCBwYXN0IGVuZCAqLwogICAgICAgICAvKiBqdXN0IGZvciB3cml0aW5nICovCiAgICAgaW50IGxldmVsOyAgICAgICAgICAgICAgLyogY29tcHJlc3Npb24gbGV2ZWwgKi8KICAgICBpbnQgc3RyYXRlZ3k7ICAgICAgICAgICAvKiBjb21wcmVzc2lvbiBzdHJhdGVneSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6aW8uYyBiL01vZHVsZXMvemxpYi9nemlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOTBmNDkuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy96bGliL2d6aW8uYworKysgL2Rldi9udWxsCkBAIC0xLDEwMjYgKzAsMCBAQAotLyogZ3ppby5jIC0tIElPIG9uIC5neiBmaWxlcwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKLSAqCi0gKiBDb21waWxlIHRoaXMgZmlsZSB3aXRoIC1ETk9fR1pDT01QUkVTUyB0byBhdm9pZCB0aGUgY29tcHJlc3Npb24gY29kZS4KLSAqLwotCi0vKiBAKCMpICRJZCQgKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJ6dXRpbC5oIgotCi0jaWZkZWYgTk9fREVGTEFURSAgICAgICAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBkZWZpbml0aW9uICovCi0jICBkZWZpbmUgTk9fR1pDT01QUkVTUwotI2VuZGlmCi0KLSNpZm5kZWYgTk9fRFVNTVlfREVDTAotc3RydWN0IGludGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsgLyogZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwotI2VuZGlmCi0KLSNpZm5kZWYgWl9CVUZTSVpFCi0jICBpZmRlZiBNQVhTRUdfNjRLCi0jICAgIGRlZmluZSBaX0JVRlNJWkUgNDA5NiAvKiBtaW5pbWl6ZSBtZW1vcnkgdXNhZ2UgZm9yIDE2LWJpdCBET1MgKi8KLSMgIGVsc2UKLSMgICAgZGVmaW5lIFpfQlVGU0laRSAxNjM4NAotIyAgZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBaX1BSSU5URl9CVUZTSVpFCi0jICBkZWZpbmUgWl9QUklOVEZfQlVGU0laRSA0MDk2Ci0jZW5kaWYKLQotI2lmZGVmIF9fTVZTX18KLSMgIHByYWdtYSBtYXAgKGZkb3BlbiAsICJcMTc0XDE3NEZET1BFTiIpCi0gICBGSUxFICpmZG9wZW4oaW50LCBjb25zdCBjaGFyICopOwotI2VuZGlmCi0KLSNpZm5kZWYgU1REQwotZXh0ZXJuIHZvaWRwICBtYWxsb2MgT0YoKHVJbnQgc2l6ZSkpOwotZXh0ZXJuIHZvaWQgICBmcmVlICAgT0YoKHZvaWRwZiBwdHIpKTsKLSNlbmRpZgotCi0jZGVmaW5lIEFMTE9DKHNpemUpIG1hbGxvYyhzaXplKQotI2RlZmluZSBUUllGUkVFKHApIHtpZiAocCkgZnJlZShwKTt9Ci0KLXN0YXRpYyBpbnQgY29uc3QgZ3pfbWFnaWNbMl0gPSB7MHgxZiwgMHg4Yn07IC8qIGd6aXAgbWFnaWMgaGVhZGVyICovCi0KLS8qIGd6aXAgZmxhZyBieXRlICovCi0jZGVmaW5lIEFTQ0lJX0ZMQUcgICAweDAxIC8qIGJpdCAwIHNldDogZmlsZSBwcm9iYWJseSBhc2NpaSB0ZXh0ICovCi0jZGVmaW5lIEhFQURfQ1JDICAgICAweDAyIC8qIGJpdCAxIHNldDogaGVhZGVyIENSQyBwcmVzZW50ICovCi0jZGVmaW5lIEVYVFJBX0ZJRUxEICAweDA0IC8qIGJpdCAyIHNldDogZXh0cmEgZmllbGQgcHJlc2VudCAqLwotI2RlZmluZSBPUklHX05BTUUgICAgMHgwOCAvKiBiaXQgMyBzZXQ6IG9yaWdpbmFsIGZpbGUgbmFtZSBwcmVzZW50ICovCi0jZGVmaW5lIENPTU1FTlQgICAgICAweDEwIC8qIGJpdCA0IHNldDogZmlsZSBjb21tZW50IHByZXNlbnQgKi8KLSNkZWZpbmUgUkVTRVJWRUQgICAgIDB4RTAgLyogYml0cyA1Li43OiByZXNlcnZlZCAqLwotCi10eXBlZGVmIHN0cnVjdCBnel9zdHJlYW0gewotICAgIHpfc3RyZWFtIHN0cmVhbTsKLSAgICBpbnQgICAgICB6X2VycjsgICAvKiBlcnJvciBjb2RlIGZvciBsYXN0IHN0cmVhbSBvcGVyYXRpb24gKi8KLSAgICBpbnQgICAgICB6X2VvZjsgICAvKiBzZXQgaWYgZW5kIG9mIGlucHV0IGZpbGUgKi8KLSAgICBGSUxFICAgICAqZmlsZTsgICAvKiAuZ3ogZmlsZSAqLwotICAgIEJ5dGUgICAgICppbmJ1ZjsgIC8qIGlucHV0IGJ1ZmZlciAqLwotICAgIEJ5dGUgICAgICpvdXRidWY7IC8qIG91dHB1dCBidWZmZXIgKi8KLSAgICB1TG9uZyAgICBjcmM7ICAgICAvKiBjcmMzMiBvZiB1bmNvbXByZXNzZWQgZGF0YSAqLwotICAgIGNoYXIgICAgICptc2c7ICAgIC8qIGVycm9yIG1lc3NhZ2UgKi8KLSAgICBjaGFyICAgICAqcGF0aDsgICAvKiBwYXRoIG5hbWUgZm9yIGRlYnVnZ2luZyBvbmx5ICovCi0gICAgaW50ICAgICAgdHJhbnNwYXJlbnQ7IC8qIDEgaWYgaW5wdXQgZmlsZSBpcyBub3QgYSAuZ3ogZmlsZSAqLwotICAgIGNoYXIgICAgIG1vZGU7ICAgIC8qICd3JyBvciAncicgKi8KLSAgICB6X29mZl90ICBzdGFydDsgICAvKiBzdGFydCBvZiBjb21wcmVzc2VkIGRhdGEgaW4gZmlsZSAoaGVhZGVyIHNraXBwZWQpICovCi0gICAgel9vZmZfdCAgaW47ICAgICAgLyogYnl0ZXMgaW50byBkZWZsYXRlIG9yIGluZmxhdGUgKi8KLSAgICB6X29mZl90ICBvdXQ7ICAgICAvKiBieXRlcyBvdXQgb2YgZGVmbGF0ZSBvciBpbmZsYXRlICovCi0gICAgaW50ICAgICAgYmFjazsgICAgLyogb25lIGNoYXJhY3RlciBwdXNoLWJhY2sgKi8KLSAgICBpbnQgICAgICBsYXN0OyAgICAvKiB0cnVlIGlmIHB1c2gtYmFjayBpcyBsYXN0IGNoYXJhY3RlciAqLwotfSBnel9zdHJlYW07Ci0KLQotbG9jYWwgZ3pGaWxlIGd6X29wZW4gICAgICBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSwgaW50ICBmZCkpOwotbG9jYWwgaW50IGRvX2ZsdXNoICAgICAgICBPRigoZ3pGaWxlIGZpbGUsIGludCBmbHVzaCkpOwotbG9jYWwgaW50ICAgIGdldF9ieXRlICAgICBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCB2b2lkICAgY2hlY2tfaGVhZGVyIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIGludCAgICBkZXN0cm95ICAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgdm9pZCAgIHB1dExvbmcgICAgICBPRigoRklMRSAqZmlsZSwgdUxvbmcgeCkpOwotbG9jYWwgdUxvbmcgIGdldExvbmcgICAgICBPRigoZ3pfc3RyZWFtICpzKSk7Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBPcGVucyBhIGd6aXAgKC5neikgZmlsZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLiBUaGUgbW9kZSBwYXJhbWV0ZXIKLSAgIGlzIGFzIGluIGZvcGVuICgicmIiIG9yICJ3YiIpLiBUaGUgZmlsZSBpcyBnaXZlbiBlaXRoZXIgYnkgZmlsZSBkZXNjcmlwdG9yCi0gICBvciBwYXRoIG5hbWUgKGlmIGZkID09IC0xKS4KLSAgICAgZ3pfb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlIGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCBvciBpZiB0aGVyZSB3YXMKLSAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZTsgZXJybm8KLSAgIGNhbiBiZSBjaGVja2VkIHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28gY2FzZXMgKGlmIGVycm5vIGlzIHplcm8sIHRoZQotICAgemxpYiBlcnJvciBpcyBaX01FTV9FUlJPUikuCi0qLwotbG9jYWwgZ3pGaWxlIGd6X29wZW4gKHBhdGgsIG1vZGUsIGZkKQotICAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLSAgICBpbnQgIGZkOwotewotICAgIGludCBlcnI7Ci0gICAgaW50IGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOyAvKiBjb21wcmVzc2lvbiBsZXZlbCAqLwotICAgIGludCBzdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsgLyogY29tcHJlc3Npb24gc3RyYXRlZ3kgKi8KLSAgICBjaGFyICpwID0gKGNoYXIqKW1vZGU7Ci0gICAgZ3pfc3RyZWFtICpzOwotICAgIGNoYXIgZm1vZGVbODBdOyAvKiBjb3B5IG9mIG1vZGUsIHdpdGhvdXQgdGhlIGNvbXByZXNzaW9uIGxldmVsICovCi0gICAgY2hhciAqbSA9IGZtb2RlOwotCi0gICAgaWYgKCFwYXRoIHx8ICFtb2RlKSByZXR1cm4gWl9OVUxMOwotCi0gICAgcyA9IChnel9zdHJlYW0gKilBTExPQyhzaXplb2YoZ3pfc3RyZWFtKSk7Ci0gICAgaWYgKCFzKSByZXR1cm4gWl9OVUxMOwotCi0gICAgcy0+c3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgcy0+c3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOwotICAgIHMtPnN0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZiA9IFpfTlVMTDsKLSAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWYgPSBaX05VTEw7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gcy0+c3RyZWFtLmF2YWlsX291dCA9IDA7Ci0gICAgcy0+ZmlsZSA9IE5VTEw7Ci0gICAgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICBzLT5pbiA9IDA7Ci0gICAgcy0+b3V0ID0gMDsKLSAgICBzLT5iYWNrID0gRU9GOwotICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgIHMtPm1zZyA9IE5VTEw7Ci0gICAgcy0+dHJhbnNwYXJlbnQgPSAwOwotCi0gICAgcy0+cGF0aCA9IChjaGFyKilBTExPQyhzdHJsZW4ocGF0aCkrMSk7Ci0gICAgaWYgKHMtPnBhdGggPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgfQotICAgIHN0cmNweShzLT5wYXRoLCBwYXRoKTsgLyogZG8gdGhpcyBlYXJseSBmb3IgZGVidWdnaW5nICovCi0KLSAgICBzLT5tb2RlID0gJ1wwJzsKLSAgICBkbyB7Ci0gICAgICAgIGlmICgqcCA9PSAncicpIHMtPm1vZGUgPSAncic7Ci0gICAgICAgIGlmICgqcCA9PSAndycgfHwgKnAgPT0gJ2EnKSBzLT5tb2RlID0gJ3cnOwotICAgICAgICBpZiAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykgewotICAgICAgICAgICAgbGV2ZWwgPSAqcCAtICcwJzsKLSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnZicpIHsKLSAgICAgICAgICBzdHJhdGVneSA9IFpfRklMVEVSRUQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2gnKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX0hVRkZNQU5fT05MWTsKLSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnUicpIHsKLSAgICAgICAgICBzdHJhdGVneSA9IFpfUkxFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKm0rKyA9ICpwOyAvKiBjb3B5IHRoZSBtb2RlICovCi0gICAgICAgIH0KLSAgICB9IHdoaWxlICgqcCsrICYmIG0gIT0gZm1vZGUgKyBzaXplb2YoZm1vZGUpKTsKLSAgICBpZiAocy0+bW9kZSA9PSAnXDAnKSByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIGVyciA9IFpfU1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAgICAgICAgZXJyID0gZGVmbGF0ZUluaXQyKCYocy0+c3RyZWFtKSwgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBaX0RFRkxBVEVELCAtTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBzdHJhdGVneSk7Ci0gICAgICAgIC8qIHdpbmRvd0JpdHMgaXMgcGFzc2VkIDwgMCB0byBzdXBwcmVzcyB6bGliIGhlYWRlciAqLwotCi0gICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOwotI2VuZGlmCi0gICAgICAgIGlmIChlcnIgIT0gWl9PSyB8fCBzLT5vdXRidWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiAgPSBzLT5pbmJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOwotCi0gICAgICAgIGVyciA9IGluZmxhdGVJbml0MigmKHMtPnN0cmVhbSksIC1NQVhfV0JJVFMpOwotICAgICAgICAvKiB3aW5kb3dCaXRzIGlzIHBhc3NlZCA8IDAgdG8gdGVsbCB0aGF0IHRoZXJlIGlzIG5vIHpsaWIgaGVhZGVyLgotICAgICAgICAgKiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIGluZmxhdGUgKnJlcXVpcmVzKiBhbiBleHRyYSAiZHVtbXkiIGJ5dGUKLSAgICAgICAgICogYWZ0ZXIgdGhlIGNvbXByZXNzZWQgc3RyZWFtIGluIG9yZGVyIHRvIGNvbXBsZXRlIGRlY29tcHJlc3Npb24gYW5kCi0gICAgICAgICAqIHJldHVybiBaX1NUUkVBTV9FTkQuIEhlcmUgdGhlIGd6aXAgQ1JDMzIgZW5zdXJlcyB0aGF0IDQgYnl0ZXMgYXJlCi0gICAgICAgICAqIHByZXNlbnQgYWZ0ZXIgdGhlIGNvbXByZXNzZWQgc3RyZWFtLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGVyciAhPSBaX09LIHx8IHMtPmluYnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0KLSAgICBlcnJubyA9IDA7Ci0gICAgcy0+ZmlsZSA9IGZkIDwgMCA/IEZfT1BFTihwYXRoLCBmbW9kZSkgOiAoRklMRSopZmRvcGVuKGZkLCBmbW9kZSk7Ci0KLSAgICBpZiAocy0+ZmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICB9Ci0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0gICAgICAgIC8qIFdyaXRlIGEgdmVyeSBzaW1wbGUgLmd6IGhlYWRlcjoKLSAgICAgICAgICovCi0gICAgICAgIGZwcmludGYocy0+ZmlsZSwgIiVjJWMlYyVjJWMlYyVjJWMlYyVjIiwgZ3pfbWFnaWNbMF0sIGd6X21hZ2ljWzFdLAotICAgICAgICAgICAgIFpfREVGTEFURUQsIDAgLypmbGFncyovLCAwLDAsMCwwIC8qdGltZSovLCAwIC8qeGZsYWdzKi8sIE9TX0NPREUpOwotICAgICAgICBzLT5zdGFydCA9IDEwTDsKLSAgICAgICAgLyogV2UgdXNlIDEwTCBpbnN0ZWFkIG9mIGZ0ZWxsKHMtPmZpbGUpIHRvIGJlY2F1c2UgZnRlbGwgY2F1c2VzIGFuCi0gICAgICAgICAqIGZmbHVzaCBvbiBzb21lIHN5c3RlbXMuIFRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBkb2Vzbid0IHVzZQotICAgICAgICAgKiBzdGFydCBhbnl3YXkgaW4gd3JpdGUgbW9kZSwgc28gdGhpcyBpbml0aWFsaXphdGlvbiBpcyBub3QKLSAgICAgICAgICogbmVjZXNzYXJ5LgotICAgICAgICAgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBjaGVja19oZWFkZXIocyk7IC8qIHNraXAgdGhlIC5neiBoZWFkZXIgKi8KLSAgICAgICAgcy0+c3RhcnQgPSBmdGVsbChzLT5maWxlKSAtIHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gKGd6RmlsZSlzOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4KLSovCi1nekZpbGUgWkVYUE9SVCBnem9wZW4gKHBhdGgsIG1vZGUpCi0gICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotewotICAgIHJldHVybiBnel9vcGVuIChwYXRoLCBtb2RlLCAtMSk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBBc3NvY2lhdGUgYSBnekZpbGUgd2l0aCB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLiBmZCBpcyBub3QgZHVwJ2VkIGhlcmUKLSAgIHRvIG1pbWljIHRoZSBiZWhhdmlvKHUpciBvZiBmZG9wZW4uCi0qLwotZ3pGaWxlIFpFWFBPUlQgZ3pkb3BlbiAoZmQsIG1vZGUpCi0gICAgaW50IGZkOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci17Ci0gICAgY2hhciBuYW1lWzQ2XTsgICAgICAvKiBhbGxvdyBmb3IgdXAgdG8gMTI4LWJpdCBpbnRlZ2VycyAqLwotCi0gICAgaWYgKGZkIDwgMCkgcmV0dXJuIChnekZpbGUpWl9OVUxMOwotICAgIHNwcmludGYobmFtZSwgIjxmZDolZD4iLCBmZCk7IC8qIGZvciBkZWJ1Z2dpbmcgKi8KLQotICAgIHJldHVybiBnel9vcGVuIChuYW1lLCBtb2RlLCBmZCk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgc3RyYXRlZ3kKLSAqLwotaW50IFpFWFBPUlQgZ3pzZXRwYXJhbXMgKGZpbGUsIGxldmVsLCBzdHJhdGVneSkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgbGV2ZWw7Ci0gICAgaW50IHN0cmF0ZWd5OwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICAvKiBNYWtlIHJvb20gdG8gYWxsb3cgZmx1c2hpbmcgKi8KLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX291dCA9PSAwKSB7Ci0KLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAgICAgICBpZiAoZndyaXRlKHMtPm91dGJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKSAhPSBaX0JVRlNJWkUpIHsKLSAgICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgfQotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgIH0KLQotICAgIHJldHVybiBkZWZsYXRlUGFyYW1zICgmKHMtPnN0cmVhbSksIGxldmVsLCBzdHJhdGVneSk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZWFkIGEgYnl0ZSBmcm9tIGEgZ3pfc3RyZWFtOyB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4uIFJldHVybiBFT0YKLSAgIGZvciBlbmQgb2YgZmlsZS4KLSAgIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzIGhhcyBiZWVuIHN1Y2Vzc2Z1bGx5IG9wZW5lZCBmb3IgcmVhZGluZy4KLSovCi1sb2NhbCBpbnQgZ2V0X2J5dGUocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaWYgKHMtPnpfZW9mKSByZXR1cm4gRU9GOwotICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCkgewotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KWZyZWFkKHMtPmluYnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpOwotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgIHMtPnpfZW9mID0gMTsKLSAgICAgICAgICAgIGlmIChmZXJyb3Iocy0+ZmlsZSkpIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgICAgIHJldHVybiBFT0Y7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luLS07Ci0gICAgcmV0dXJuICoocy0+c3RyZWFtLm5leHRfaW4pKys7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgQ2hlY2sgdGhlIGd6aXAgaGVhZGVyIG9mIGEgZ3pfc3RyZWFtIG9wZW5lZCBmb3IgcmVhZGluZy4gU2V0IHRoZSBzdHJlYW0KLSAgICBtb2RlIHRvIHRyYW5zcGFyZW50IGlmIHRoZSBnemlwIG1hZ2ljIGhlYWRlciBpcyBub3QgcHJlc2VudDsgc2V0IHMtPmVycgotICAgIHRvIFpfREFUQV9FUlJPUiBpZiB0aGUgbWFnaWMgaGVhZGVyIGlzIHByZXNlbnQgYnV0IHRoZSByZXN0IG9mIHRoZSBoZWFkZXIKLSAgICBpcyBpbmNvcnJlY3QuCi0gICAgSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHMgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIHN1Y2Vzc2Z1bGx5OwotICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiBpcyB6ZXJvIGZvciB0aGUgZmlyc3QgdGltZSwgYnV0IG1heSBiZSBub24temVybwotICAgICAgIGZvciBjb25jYXRlbmF0ZWQgLmd6IGZpbGVzLgotKi8KLWxvY2FsIHZvaWQgY2hlY2tfaGVhZGVyKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGludCBtZXRob2Q7IC8qIG1ldGhvZCBieXRlICovCi0gICAgaW50IGZsYWdzOyAgLyogZmxhZ3MgYnl0ZSAqLwotICAgIHVJbnQgbGVuOwotICAgIGludCBjOwotCi0gICAgLyogQXNzdXJlIHR3byBieXRlcyBpbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBwZWVrIGFoZWFkIC0tIGhhbmRsZSBjYXNlCi0gICAgICAgd2hlcmUgZmlyc3QgYnl0ZSBvZiBoZWFkZXIgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFmdGVyIHRoZSBsYXN0Ci0gICAgICAgZ3ppcCBzZWdtZW50ICovCi0gICAgbGVuID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgIGlmIChsZW4gPCAyKSB7Ci0gICAgICAgIGlmIChsZW4pIHMtPmluYnVmWzBdID0gcy0+c3RyZWFtLm5leHRfaW5bMF07Ci0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbGVuID0gKHVJbnQpZnJlYWQocy0+aW5idWYgKyBsZW4sIDEsIFpfQlVGU0laRSA+PiBsZW4sIHMtPmZpbGUpOwotICAgICAgICBpZiAobGVuID09IDAgJiYgZmVycm9yKHMtPmZpbGUpKSBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiArPSBsZW47Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPCAyKSB7Ci0gICAgICAgICAgICBzLT50cmFuc3BhcmVudCA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFBlZWsgYWhlYWQgdG8gY2hlY2sgdGhlIGd6aXAgbWFnaWMgaGVhZGVyICovCi0gICAgaWYgKHMtPnN0cmVhbS5uZXh0X2luWzBdICE9IGd6X21hZ2ljWzBdIHx8Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luWzFdICE9IGd6X21hZ2ljWzFdKSB7Ci0gICAgICAgIHMtPnRyYW5zcGFyZW50ID0gMTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gLT0gMjsKLSAgICBzLT5zdHJlYW0ubmV4dF9pbiArPSAyOwotCi0gICAgLyogQ2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGd6aXAgaGVhZGVyICovCi0gICAgbWV0aG9kID0gZ2V0X2J5dGUocyk7Ci0gICAgZmxhZ3MgPSBnZXRfYnl0ZShzKTsKLSAgICBpZiAobWV0aG9kICE9IFpfREVGTEFURUQgfHwgKGZsYWdzICYgUkVTRVJWRUQpICE9IDApIHsKLSAgICAgICAgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKiBEaXNjYXJkIHRpbWUsIHhmbGFncyBhbmQgT1MgY29kZTogKi8KLSAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IDY7IGxlbisrKSAodm9pZClnZXRfYnl0ZShzKTsKLQotICAgIGlmICgoZmxhZ3MgJiBFWFRSQV9GSUVMRCkgIT0gMCkgeyAvKiBza2lwIHRoZSBleHRyYSBmaWVsZCAqLwotICAgICAgICBsZW4gID0gICh1SW50KWdldF9ieXRlKHMpOwotICAgICAgICBsZW4gKz0gKCh1SW50KWdldF9ieXRlKHMpKTw8ODsKLSAgICAgICAgLyogbGVuIGlzIGdhcmJhZ2UgaWYgRU9GIGJ1dCB0aGUgbG9vcCBiZWxvdyB3aWxsIHF1aXQgYW55d2F5ICovCi0gICAgICAgIHdoaWxlIChsZW4tLSAhPSAwICYmIGdldF9ieXRlKHMpICE9IEVPRikgOwotICAgIH0KLSAgICBpZiAoKGZsYWdzICYgT1JJR19OQU1FKSAhPSAwKSB7IC8qIHNraXAgdGhlIG9yaWdpbmFsIGZpbGUgbmFtZSAqLwotICAgICAgICB3aGlsZSAoKGMgPSBnZXRfYnl0ZShzKSkgIT0gMCAmJiBjICE9IEVPRikgOwotICAgIH0KLSAgICBpZiAoKGZsYWdzICYgQ09NTUVOVCkgIT0gMCkgeyAgIC8qIHNraXAgdGhlIC5neiBmaWxlIGNvbW1lbnQgKi8KLSAgICAgICAgd2hpbGUgKChjID0gZ2V0X2J5dGUocykpICE9IDAgJiYgYyAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIEhFQURfQ1JDKSAhPSAwKSB7ICAvKiBza2lwIHRoZSBoZWFkZXIgY3JjICovCi0gICAgICAgIGZvciAobGVuID0gMDsgbGVuIDwgMjsgbGVuKyspICh2b2lkKWdldF9ieXRlKHMpOwotICAgIH0KLSAgICBzLT56X2VyciA9IHMtPnpfZW9mID8gWl9EQVRBX0VSUk9SIDogWl9PSzsKLX0KLQotIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ2xlYW51cCB0aGVuIGZyZWUgdGhlIGdpdmVuIGd6X3N0cmVhbS4gUmV0dXJuIGEgemxpYiBlcnJvciBjb2RlLgotICAgVHJ5IGZyZWVpbmcgaW4gdGhlIHJldmVyc2Ugb3JkZXIgb2YgYWxsb2NhdGlvbnMuCi0gKi8KLWxvY2FsIGludCBkZXN0cm95IChzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICBpbnQgZXJyID0gWl9PSzsKLQotICAgIGlmICghcykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgVFJZRlJFRShzLT5tc2cpOwotCi0gICAgaWYgKHMtPnN0cmVhbS5zdGF0ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgICAgIGVyciA9IFpfU1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAgICAgICAgICAgIGVyciA9IGRlZmxhdGVFbmQoJihzLT5zdHJlYW0pKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UgaWYgKHMtPm1vZGUgPT0gJ3InKSB7Ci0gICAgICAgICAgICBlcnIgPSBpbmZsYXRlRW5kKCYocy0+c3RyZWFtKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHMtPmZpbGUgIT0gTlVMTCAmJiBmY2xvc2Uocy0+ZmlsZSkpIHsKLSNpZmRlZiBFU1BJUEUKLSAgICAgICAgaWYgKGVycm5vICE9IEVTUElQRSkgLyogZmNsb3NlIGlzIGJyb2tlbiBmb3IgcGlwZXMgaW4gSFAvVVggKi8KLSNlbmRpZgotICAgICAgICAgICAgZXJyID0gWl9FUlJOTzsKLSAgICB9Ci0gICAgaWYgKHMtPnpfZXJyIDwgMCkgZXJyID0gcy0+el9lcnI7Ci0KLSAgICBUUllGUkVFKHMtPmluYnVmKTsKLSAgICBUUllGUkVFKHMtPm91dGJ1Zik7Ci0gICAgVFJZRlJFRShzLT5wYXRoKTsKLSAgICBUUllGUkVFKHMpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnenJlYWQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQgKDAgZm9yIGVuZCBvZiBmaWxlKS4KLSovCi1pbnQgWkVYUE9SVCBnenJlYWQgKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAgIHZvaWRwIGJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLSAgICBCeXRlZiAqc3RhcnQgPSAoQnl0ZWYqKWJ1ZjsgLyogc3RhcnRpbmcgcG9pbnQgZm9yIGNyYyBjb21wdXRhdGlvbiAqLwotICAgIEJ5dGUgICpuZXh0X291dDsgLyogPT0gc3RyZWFtLm5leHRfb3V0IGJ1dCBub3QgZm9yY2VkIGZhciAoZm9yIE1TRE9TKSAqLwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgaWYgKHMtPnpfZXJyID09IFpfREFUQV9FUlJPUiB8fCBzLT56X2VyciA9PSBaX0VSUk5PKSByZXR1cm4gLTE7Ci0gICAgaWYgKHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCkgcmV0dXJuIDA7ICAvKiBFT0YgKi8KLQotICAgIG5leHRfb3V0ID0gKEJ5dGUqKWJ1ZjsKLSAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSAoQnl0ZWYqKWJ1ZjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gbGVuOwotCi0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgJiYgcy0+YmFjayAhPSBFT0YpIHsKLSAgICAgICAgKm5leHRfb3V0KysgPSBzLT5iYWNrOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQrKzsKLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dC0tOwotICAgICAgICBzLT5iYWNrID0gRU9GOwotICAgICAgICBzLT5vdXQrKzsKLSAgICAgICAgc3RhcnQrKzsKLSAgICAgICAgaWYgKHMtPmxhc3QpIHsKLSAgICAgICAgICAgIHMtPnpfZXJyID0gWl9TVFJFQU1fRU5EOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB3aGlsZSAocy0+c3RyZWFtLmF2YWlsX291dCAhPSAwKSB7Ci0KLSAgICAgICAgaWYgKHMtPnRyYW5zcGFyZW50KSB7Ci0gICAgICAgICAgICAvKiBDb3B5IGZpcnN0IHRoZSBsb29rYWhlYWQgYnl0ZXM6ICovCi0gICAgICAgICAgICB1SW50IG4gPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgICAgICBpZiAobiA+IHMtPnN0cmVhbS5hdmFpbF9vdXQpIG4gPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICAgICAgaWYgKG4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgem1lbWNweShzLT5zdHJlYW0ubmV4dF9vdXQsIHMtPnN0cmVhbS5uZXh0X2luLCBuKTsKLSAgICAgICAgICAgICAgICBuZXh0X291dCArPSBuOwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IG5leHRfb3V0OwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X2luICAgKz0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0IC09IG47Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luICAtPSBuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCAtPQotICAgICAgICAgICAgICAgICAgICAodUludClmcmVhZChuZXh0X291dCwgMSwgcy0+c3RyZWFtLmF2YWlsX291dCwgcy0+ZmlsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW4gLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgICAgIHMtPmluICArPSBsZW47Ci0gICAgICAgICAgICBzLT5vdXQgKz0gbGVuOwotICAgICAgICAgICAgaWYgKGxlbiA9PSAwKSBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICByZXR1cm4gKGludClsZW47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwICYmICFzLT56X2VvZikgewotCi0gICAgICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludClmcmVhZChzLT5pbmJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKTsKLSAgICAgICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCkgewotICAgICAgICAgICAgICAgIHMtPnpfZW9mID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZmVycm9yKHMtPmZpbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICAgICAgfQotICAgICAgICBzLT5pbiArPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCArPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBzLT56X2VyciA9IGluZmxhdGUoJihzLT5zdHJlYW0pLCBaX05PX0ZMVVNIKTsKLSAgICAgICAgcy0+aW4gLT0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLQotICAgICAgICBpZiAocy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgICAgICAvKiBDaGVjayBDUkMgYW5kIG9yaWdpbmFsIHNpemUgKi8KLSAgICAgICAgICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgc3RhcnQsICh1SW50KShzLT5zdHJlYW0ubmV4dF9vdXQgLSBzdGFydCkpOwotICAgICAgICAgICAgc3RhcnQgPSBzLT5zdHJlYW0ubmV4dF9vdXQ7Ci0KLSAgICAgICAgICAgIGlmIChnZXRMb25nKHMpICE9IHMtPmNyYykgewotICAgICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9EQVRBX0VSUk9SOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAodm9pZClnZXRMb25nKHMpOwotICAgICAgICAgICAgICAgIC8qIFRoZSB1bmNvbXByZXNzZWQgbGVuZ3RoIHJldHVybmVkIGJ5IGFib3ZlIGdldGxvbmcoKSBtYXkgYmUKLSAgICAgICAgICAgICAgICAgKiBkaWZmZXJlbnQgZnJvbSBzLT5vdXQgaW4gY2FzZSBvZiBjb25jYXRlbmF0ZWQgLmd6IGZpbGVzLgotICAgICAgICAgICAgICAgICAqIENoZWNrIGZvciBzdWNoIGZpbGVzOgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGNoZWNrX2hlYWRlcihzKTsKLSAgICAgICAgICAgICAgICBpZiAocy0+el9lcnIgPT0gWl9PSykgewotICAgICAgICAgICAgICAgICAgICBpbmZsYXRlUmVzZXQoJihzLT5zdHJlYW0pKTsKLSAgICAgICAgICAgICAgICAgICAgcy0+Y3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChzLT56X2VyciAhPSBaX09LIHx8IHMtPnpfZW9mKSBicmVhazsKLSAgICB9Ci0gICAgcy0+Y3JjID0gY3JjMzIocy0+Y3JjLCBzdGFydCwgKHVJbnQpKHMtPnN0cmVhbS5uZXh0X291dCAtIHN0YXJ0KSk7Ci0KLSAgICBpZiAobGVuID09IHMtPnN0cmVhbS5hdmFpbF9vdXQgJiYKLSAgICAgICAgKHMtPnpfZXJyID09IFpfREFUQV9FUlJPUiB8fCBzLT56X2VyciA9PSBaX0VSUk5PKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiAoaW50KShsZW4gLSBzLT5zdHJlYW0uYXZhaWxfb3V0KTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlCi0gICBvciAtMSBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgotKi8KLWludCBaRVhQT1JUIGd6Z2V0YyhmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIHVuc2lnbmVkIGNoYXIgYzsKLQotICAgIHJldHVybiBnenJlYWQoZmlsZSwgJmMsIDEpID09IDEgPyBjIDogLTE7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBQdXNoIG9uZSBieXRlIGJhY2sgb250byB0aGUgc3RyZWFtLgotKi8KLWludCBaRVhQT1JUIGd6dW5nZXRjKGMsIGZpbGUpCi0gICAgaW50IGM7Ci0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicgfHwgYyA9PSBFT0YgfHwgcy0+YmFjayAhPSBFT0YpIHJldHVybiBFT0Y7Ci0gICAgcy0+YmFjayA9IGM7Ci0gICAgcy0+b3V0LS07Ci0gICAgcy0+bGFzdCA9IChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpOwotICAgIGlmIChzLT5sYXN0KSBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIHJldHVybiBjOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUmVhZHMgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJlCi0gICByZWFkLCBvciBhIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwgb3IgYW4KLSAgIGVuZC1vZi1maWxlIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIFRoZSBzdHJpbmcgaXMgdGhlbiB0ZXJtaW5hdGVkCi0gICB3aXRoIGEgbnVsbCBjaGFyYWN0ZXIuCi0gICAgICBnemdldHMgcmV0dXJucyBidWYsIG9yIFpfTlVMTCBpbiBjYXNlIG9mIGVycm9yLgotCi0gICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgb3B0aW1pemVkIGF0IGFsbC4KLSovCi1jaGFyICogWkVYUE9SVCBnemdldHMoZmlsZSwgYnVmLCBsZW4pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgY2hhciAqYnVmOwotICAgIGludCBsZW47Ci17Ci0gICAgY2hhciAqYiA9IGJ1ZjsKLSAgICBpZiAoYnVmID09IFpfTlVMTCB8fCBsZW4gPD0gMCkgcmV0dXJuIFpfTlVMTDsKLQotICAgIHdoaWxlICgtLWxlbiA+IDAgJiYgZ3pyZWFkKGZpbGUsIGJ1ZiwgMSkgPT0gMSAmJiAqYnVmKysgIT0gJ1xuJykgOwotICAgICpidWYgPSAnXDAnOwotICAgIHJldHVybiBiID09IGJ1ZiAmJiBsZW4gPiAwID8gWl9OVUxMIDogYjsKLX0KLQotCi0jaWZuZGVmIE5PX0daQ09NUFJFU1MKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3p3cml0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBpbiBjYXNlIG9mIGVycm9yKS4KLSovCi1pbnQgWkVYUE9SVCBnendyaXRlIChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICB2b2lkcGMgYnVmOwotICAgIHVuc2lnbmVkIGxlbjsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgcy0+c3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKWJ1ZjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSBsZW47Ci0KLSAgICB3aGlsZSAocy0+c3RyZWFtLmF2YWlsX2luICE9IDApIHsKLQotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX291dCA9PSAwKSB7Ci0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgICAgIGlmIChmd3JpdGUocy0+b3V0YnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpICE9IFpfQlVGU0laRSkgewotICAgICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+aW4gKz0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBkZWZsYXRlKCYocy0+c3RyZWFtKSwgWl9OT19GTFVTSCk7Ci0gICAgICAgIHMtPmluIC09IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIGlmIChzLT56X2VyciAhPSBaX09LKSBicmVhazsKLSAgICB9Ci0gICAgcy0+Y3JjID0gY3JjMzIocy0+Y3JjLCAoY29uc3QgQnl0ZWYgKilidWYsIGxlbik7Ci0KLSAgICByZXR1cm4gKGludCkobGVuIC0gcy0+c3RyZWFtLmF2YWlsX2luKTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3MgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcgotICAgY29udHJvbCBvZiB0aGUgZm9ybWF0IHN0cmluZywgYXMgaW4gZnByaW50Zi4gZ3pwcmludGYgcmV0dXJucyB0aGUgbnVtYmVyIG9mCi0gICB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiAoMCBpbiBjYXNlIG9mIGVycm9yKS4KLSovCi0jaWZkZWYgU1REQwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAvKiBhcmdzICovIC4uLikKLXsKLSAgICBjaGFyIGJ1ZltaX1BSSU5URl9CVUZTSVpFXTsKLSAgICB2YV9saXN0IHZhOwotICAgIGludCBsZW47Ci0KLSAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7Ci0gICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0jaWZkZWYgTk9fdnNucHJpbnRmCi0jICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICh2b2lkKXZzcHJpbnRmKGJ1ZiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemVvZihidWYpOyBsZW4rKykKLSAgICAgICAgaWYgKGJ1ZltsZW5dID09IDApIGJyZWFrOwotIyAgZWxzZQotICAgIGxlbiA9IHZzcHJpbnRmKGJ1ZiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSMgIGVuZGlmCi0jZWxzZQotIyAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jICBlbHNlCi0gICAgbGVuID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0jICBlbmRpZgotI2VuZGlmCi0gICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+PSAoaW50KXNpemVvZihidWYpIHx8IGJ1ZltzaXplb2YoYnVmKSAtIDFdICE9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnendyaXRlKGZpbGUsIGJ1ZiwgKHVuc2lnbmVkKWxlbik7Ci19Ci0jZWxzZSAvKiBub3QgQU5TSSBDICovCi0KLWludCBaRVhQT1JUVkEgZ3pwcmludGYgKGZpbGUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAotICAgICAgICAgICAgICAgICAgICAgICBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgY29uc3QgY2hhciAqZm9ybWF0OwotICAgIGludCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCi0gICAgICAgIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMDsKLXsKLSAgICBjaGFyIGJ1ZltaX1BSSU5URl9CVUZTSVpFXTsKLSAgICBpbnQgbGVuOwotCi0gICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwotI2lmZGVmIE5PX3NucHJpbnRmCi0jICBpZmRlZiBIQVNfc3ByaW50Zl92b2lkCi0gICAgc3ByaW50ZihidWYsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemVvZihidWYpOyBsZW4rKykKLSAgICAgICAgaWYgKGJ1ZltsZW5dID09IDApIGJyZWFrOwotIyAgZWxzZQotICAgIGxlbiA9IHNwcmludGYoYnVmLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotIyAgZW5kaWYKLSNlbHNlCi0jICBpZmRlZiBIQVNfc25wcmludGZfdm9pZAotICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0gICAgbGVuID0gc3RybGVuKGJ1Zik7Ci0jICBlbHNlCi0gICAgbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0jICBlbmRpZgotI2VuZGlmCi0gICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+PSBzaXplb2YoYnVmKSB8fCBidWZbc2l6ZW9mKGJ1ZikgLSAxXSAhPSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCBidWYsIGxlbik7Ci19Ci0jZW5kaWYKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBXcml0ZXMgYywgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIsIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6cHV0YyByZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgotKi8KLWludCBaRVhQT1JUIGd6cHV0YyhmaWxlLCBjKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCBjOwotewotICAgIHVuc2lnbmVkIGNoYXIgY2MgPSAodW5zaWduZWQgY2hhcikgYzsgLyogcmVxdWlyZWQgZm9yIGJpZyBlbmRpYW4gc3lzdGVtcyAqLwotCi0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgJmNjLCAxKSA9PSAxID8gKGludCljYyA6IC0xOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgV3JpdGVzIHRoZSBnaXZlbiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUsIGV4Y2x1ZGluZwotICAgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLgotICAgICAgZ3pwdXRzIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0qLwotaW50IFpFWFBPUlQgZ3pwdXRzKGZpbGUsIHMpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgY29uc3QgY2hhciAqczsKLXsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCAoY2hhciopcywgKHVuc2lnbmVkKXN0cmxlbihzKSk7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gVGhlIHBhcmFtZXRlcgotICAgZmx1c2ggaXMgYXMgaW4gdGhlIGRlZmxhdGUoKSBmdW5jdGlvbi4KLSovCi1sb2NhbCBpbnQgZG9fZmx1c2ggKGZpbGUsIGZsdXNoKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCBmbHVzaDsKLXsKLSAgICB1SW50IGxlbjsKLSAgICBpbnQgZG9uZSA9IDA7Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAndycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7IC8qIHNob3VsZCBiZSB6ZXJvIGFscmVhZHkgYW55d2F5ICovCi0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGxlbiA9IFpfQlVGU0laRSAtIHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgaWYgKGxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoKHVJbnQpZndyaXRlKHMtPm91dGJ1ZiwgMSwgbGVuLCBzLT5maWxlKSAhPSBsZW4pIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFpfRVJSTk87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWY7Ci0gICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkb25lKSBicmVhazsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gZGVmbGF0ZSgmKHMtPnN0cmVhbSksIGZsdXNoKTsKLSAgICAgICAgcy0+b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgLyogSWdub3JlIHRoZSBzZWNvbmQgb2YgdHdvIGNvbnNlY3V0aXZlIGZsdXNoZXM6ICovCi0gICAgICAgIGlmIChsZW4gPT0gMCAmJiBzLT56X2VyciA9PSBaX0JVRl9FUlJPUikgcy0+el9lcnIgPSBaX09LOwotCi0gICAgICAgIC8qIGRlZmxhdGUgaGFzIGZpbmlzaGVkIGZsdXNoaW5nIG9ubHkgd2hlbiBpdCBoYXNuJ3QgdXNlZCB1cAotICAgICAgICAgKiBhbGwgdGhlIGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlcjoKLSAgICAgICAgICovCi0gICAgICAgIGRvbmUgPSAocy0+c3RyZWFtLmF2YWlsX291dCAhPSAwIHx8IHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCk7Ci0KLSAgICAgICAgaWYgKHMtPnpfZXJyICE9IFpfT0sgJiYgcy0+el9lcnIgIT0gWl9TVFJFQU1fRU5EKSBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuICBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogcy0+el9lcnI7Ci19Ci0KLWludCBaRVhQT1JUIGd6Zmx1c2ggKGZpbGUsIGZsdXNoKQotICAgICBnekZpbGUgZmlsZTsKLSAgICAgaW50IGZsdXNoOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0gICAgaW50IGVyciA9IGRvX2ZsdXNoIChmaWxlLCBmbHVzaCk7Ci0KLSAgICBpZiAoZXJyKSByZXR1cm4gZXJyOwotICAgIGZmbHVzaChzLT5maWxlKTsKLSAgICByZXR1cm4gIHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOiBzLT56X2VycjsKLX0KLSNlbmRpZiAvKiBOT19HWkNPTVBSRVNTICovCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgU2V0cyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZSBnaXZlbgotICAgY29tcHJlc3NlZCBmaWxlLiBUaGUgb2Zmc2V0IHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0gICAgICBnenNlZWsgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG9mZnNldCBsb2NhdGlvbiBhcyBtZWFzdXJlZCBpbiBieXRlcyBmcm9tCi0gICB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgotICAgICAgU0VFS19FTkQgaXMgbm90IGltcGxlbWVudGVkLCByZXR1cm5zIGVycm9yLgotICAgICAgSW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBnenNlZWsgY2FuIGJlIGV4dHJlbWVseSBzbG93LgotKi8KLXpfb2ZmX3QgWkVYUE9SVCBnenNlZWsgKGZpbGUsIG9mZnNldCwgd2hlbmNlKQotICAgIGd6RmlsZSBmaWxlOwotICAgIHpfb2ZmX3Qgb2Zmc2V0OwotICAgIGludCB3aGVuY2U7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgd2hlbmNlID09IFNFRUtfRU5EIHx8Ci0gICAgICAgIHMtPnpfZXJyID09IFpfRVJSTk8gfHwgcy0+el9lcnIgPT0gWl9EQVRBX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiAtMUw7Ci0gICAgfQotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICByZXR1cm4gLTFMOwotI2Vsc2UKLSAgICAgICAgaWYgKHdoZW5jZSA9PSBTRUVLX1NFVCkgewotICAgICAgICAgICAgb2Zmc2V0IC09IHMtPmluOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzZXQgPCAwKSByZXR1cm4gLTFMOwotCi0gICAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIHplcm8gYnl0ZXMgdG8gd3JpdGUuICovCi0gICAgICAgIGlmIChzLT5pbmJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHMtPmluYnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7IC8qIGZvciBzZWVraW5nICovCi0gICAgICAgICAgICBpZiAocy0+aW5idWYgPT0gWl9OVUxMKSByZXR1cm4gLTFMOwotICAgICAgICAgICAgem1lbXplcm8ocy0+aW5idWYsIFpfQlVGU0laRSk7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKG9mZnNldCA+IDApICB7Ci0gICAgICAgICAgICB1SW50IHNpemUgPSBaX0JVRlNJWkU7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0IDwgWl9CVUZTSVpFKSBzaXplID0gKHVJbnQpb2Zmc2V0OwotCi0gICAgICAgICAgICBzaXplID0gZ3p3cml0ZShmaWxlLCBzLT5pbmJ1Ziwgc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gLTFMOwotCi0gICAgICAgICAgICBvZmZzZXQgLT0gc2l6ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcy0+aW47Ci0jZW5kaWYKLSAgICB9Ci0gICAgLyogUmVzdCBvZiBmdW5jdGlvbiBpcyBmb3IgcmVhZGluZyBvbmx5ICovCi0KLSAgICAvKiBjb21wdXRlIGFic29sdXRlIHBvc2l0aW9uICovCi0gICAgaWYgKHdoZW5jZSA9PSBTRUVLX0NVUikgewotICAgICAgICBvZmZzZXQgKz0gcy0+b3V0OwotICAgIH0KLSAgICBpZiAob2Zmc2V0IDwgMCkgcmV0dXJuIC0xTDsKLQotICAgIGlmIChzLT50cmFuc3BhcmVudCkgewotICAgICAgICAvKiBtYXAgdG8gZnNlZWsgKi8KLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luID0gMDsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICAgICAgaWYgKGZzZWVrKHMtPmZpbGUsIG9mZnNldCwgU0VFS19TRVQpIDwgMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICBzLT5pbiA9IHMtPm91dCA9IG9mZnNldDsKLSAgICAgICAgcmV0dXJuIG9mZnNldDsKLSAgICB9Ci0KLSAgICAvKiBGb3IgYSBuZWdhdGl2ZSBzZWVrLCByZXdpbmQgYW5kIHVzZSBwb3NpdGl2ZSBzZWVrICovCi0gICAgaWYgKG9mZnNldCA+PSBzLT5vdXQpIHsKLSAgICAgICAgb2Zmc2V0IC09IHMtPm91dDsKLSAgICB9IGVsc2UgaWYgKGd6cmV3aW5kKGZpbGUpIDwgMCkgewotICAgICAgICByZXR1cm4gLTFMOwotICAgIH0KLSAgICAvKiBvZmZzZXQgaXMgbm93IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcC4gKi8KLQotICAgIGlmIChvZmZzZXQgIT0gMCAmJiBzLT5vdXRidWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgIHMtPm91dGJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOwotICAgICAgICBpZiAocy0+b3V0YnVmID09IFpfTlVMTCkgcmV0dXJuIC0xTDsKLSAgICB9Ci0gICAgaWYgKG9mZnNldCAmJiBzLT5iYWNrICE9IEVPRikgewotICAgICAgICBzLT5iYWNrID0gRU9GOwotICAgICAgICBzLT5vdXQrKzsKLSAgICAgICAgb2Zmc2V0LS07Ci0gICAgICAgIGlmIChzLT5sYXN0KSBzLT56X2VyciA9IFpfU1RSRUFNX0VORDsKLSAgICB9Ci0gICAgd2hpbGUgKG9mZnNldCA+IDApICB7Ci0gICAgICAgIGludCBzaXplID0gWl9CVUZTSVpFOwotICAgICAgICBpZiAob2Zmc2V0IDwgWl9CVUZTSVpFKSBzaXplID0gKGludClvZmZzZXQ7Ci0KLSAgICAgICAgc2l6ZSA9IGd6cmVhZChmaWxlLCBzLT5vdXRidWYsICh1SW50KXNpemUpOwotICAgICAgICBpZiAoc2l6ZSA8PSAwKSByZXR1cm4gLTFMOwotICAgICAgICBvZmZzZXQgLT0gc2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHMtPm91dDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJld2luZHMgaW5wdXQgZmlsZS4KLSovCi1pbnQgWkVYUE9SVCBnenJld2luZCAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIC0xOwotCi0gICAgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICBzLT5iYWNrID0gRU9GOwotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICBpZiAoIXMtPnRyYW5zcGFyZW50KSAodm9pZClpbmZsYXRlUmVzZXQoJnMtPnN0cmVhbSk7Ci0gICAgcy0+aW4gPSAwOwotICAgIHMtPm91dCA9IDA7Ci0gICAgcmV0dXJuIGZzZWVrKHMtPmZpbGUsIHMtPnN0YXJ0LCBTRUVLX1NFVCk7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIFRoaXMgcG9zaXRpb24gcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKLSAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KLSovCi16X29mZl90IFpFWFBPUlQgZ3p0ZWxsIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIHJldHVybiBnenNlZWsoZmlsZSwgMEwsIFNFRUtfQ1VSKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJldHVybnMgMSB3aGVuIEVPRiBoYXMgcHJldmlvdXNseSBiZWVuIGRldGVjdGVkIHJlYWRpbmcgdGhlIGdpdmVuCi0gICBpbnB1dCBzdHJlYW0sIG90aGVyd2lzZSB6ZXJvLgotKi8KLWludCBaRVhQT1JUIGd6ZW9mIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICAvKiBXaXRoIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzIHRoYXQgY2FuIGhhdmUgZW1iZWRkZWQKLSAgICAgKiBjcmMgdHJhaWxlcnMsIHpfZW9mIGlzIG5vIGxvbmdlciB0aGUgb25seS9iZXN0IGluZGljYXRvciBvZiBFT0YKLSAgICAgKiBvbiBhIGd6X3N0cmVhbS4gSGFuZGxlIGVuZC1vZi1zdHJlYW0gZXJyb3IgZXhwbGljaXRseSBoZXJlLgotICAgICAqLwotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAwOwotICAgIGlmIChzLT56X2VvZikgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIHMtPnpfZXJyID09IFpfU1RSRUFNX0VORDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJldHVybnMgMSBpZiByZWFkaW5nIGFuZCBkb2luZyBzbyB0cmFuc3BhcmVudGx5LCBvdGhlcndpc2UgemVyby4KLSovCi1pbnQgWkVYUE9SVCBnemRpcmVjdCAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHMtPnRyYW5zcGFyZW50OwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgIE91dHB1dHMgYSBsb25nIGluIExTQiBvcmRlciB0byB0aGUgZ2l2ZW4gZmlsZQotKi8KLWxvY2FsIHZvaWQgcHV0TG9uZyAoZmlsZSwgeCkKLSAgICBGSUxFICpmaWxlOwotICAgIHVMb25nIHg7Ci17Ci0gICAgaW50IG47Ci0gICAgZm9yIChuID0gMDsgbiA8IDQ7IG4rKykgewotICAgICAgICBmcHV0YygoaW50KSh4ICYgMHhmZiksIGZpbGUpOwotICAgICAgICB4ID4+PSA4OwotICAgIH0KLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBSZWFkcyBhIGxvbmcgaW4gTFNCIG9yZGVyIGZyb20gdGhlIGdpdmVuIGd6X3N0cmVhbS4gU2V0cyB6X2VyciBpbiBjYXNlCi0gICBvZiBlcnJvci4KLSovCi1sb2NhbCB1TG9uZyBnZXRMb25nIChzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICB1TG9uZyB4ID0gKHVMb25nKWdldF9ieXRlKHMpOwotICAgIGludCBjOwotCi0gICAgeCArPSAoKHVMb25nKWdldF9ieXRlKHMpKTw8ODsKLSAgICB4ICs9ICgodUxvbmcpZ2V0X2J5dGUocykpPDwxNjsKLSAgICBjID0gZ2V0X2J5dGUocyk7Ci0gICAgaWYgKGMgPT0gRU9GKSBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICB4ICs9ICgodUxvbmcpYyk8PDI0OwotICAgIHJldHVybiB4OwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaWYgbmVjZXNzYXJ5LCBjbG9zZXMgdGhlIGNvbXByZXNzZWQgZmlsZQotICAgYW5kIGRlYWxsb2NhdGVzIGFsbCB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLgotKi8KLWludCBaRVhQT1JUIGd6Y2xvc2UgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotI2Vsc2UKLSAgICAgICAgaWYgKGRvX2ZsdXNoIChmaWxlLCBaX0ZJTklTSCkgIT0gWl9PSykKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95KChnel9zdHJlYW0qKWZpbGUpOwotCi0gICAgICAgIHB1dExvbmcgKHMtPmZpbGUsIHMtPmNyYyk7Ci0gICAgICAgIHB1dExvbmcgKHMtPmZpbGUsICh1TG9uZykocy0+aW4gJiAweGZmZmZmZmZmKSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIGRlc3Ryb3koKGd6X3N0cmVhbSopZmlsZSk7Ci19Ci0KLSNpZmRlZiBTVERDCi0jICBkZWZpbmUgenN0cmVycm9yKGVycm51bSkgc3RyZXJyb3IoZXJybnVtKQotI2Vsc2UKLSMgIGRlZmluZSB6c3RyZXJyb3IoZXJybnVtKSAiIgotI2VuZGlmCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIGZvciB0aGUgbGFzdCBlcnJvciB3aGljaCBvY2N1cnJlZCBvbiB0aGUKLSAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gZXJybnVtIGlzIHNldCB0byB6bGliIGVycm9yIG51bWJlci4gSWYgYW4KLSAgIGVycm9yIG9jY3VycmVkIGluIHRoZSBmaWxlIHN5c3RlbSBhbmQgbm90IGluIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5LAotICAgZXJybnVtIGlzIHNldCB0byBaX0VSUk5PIGFuZCB0aGUgYXBwbGljYXRpb24gbWF5IGNvbnN1bHQgZXJybm8KLSAgIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4KLSovCi1jb25zdCBjaGFyICogWkVYUE9SVCBnemVycm9yIChmaWxlLCBlcnJudW0pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50ICplcnJudW07Ci17Ci0gICAgY2hhciAqbTsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCkgewotICAgICAgICAqZXJybnVtID0gWl9TVFJFQU1fRVJST1I7Ci0gICAgICAgIHJldHVybiAoY29uc3QgY2hhciopRVJSX01TRyhaX1NUUkVBTV9FUlJPUik7Ci0gICAgfQotICAgICplcnJudW0gPSBzLT56X2VycjsKLSAgICBpZiAoKmVycm51bSA9PSBaX09LKSByZXR1cm4gKGNvbnN0IGNoYXIqKSIiOwotCi0gICAgbSA9IChjaGFyKikoKmVycm51bSA9PSBaX0VSUk5PID8genN0cmVycm9yKGVycm5vKSA6IHMtPnN0cmVhbS5tc2cpOwotCi0gICAgaWYgKG0gPT0gTlVMTCB8fCAqbSA9PSAnXDAnKSBtID0gKGNoYXIqKUVSUl9NU0cocy0+el9lcnIpOwotCi0gICAgVFJZRlJFRShzLT5tc2cpOwotICAgIHMtPm1zZyA9IChjaGFyKilBTExPQyhzdHJsZW4ocy0+cGF0aCkgKyBzdHJsZW4obSkgKyAzKTsKLSAgICBpZiAocy0+bXNnID09IFpfTlVMTCkgcmV0dXJuIChjb25zdCBjaGFyKilFUlJfTVNHKFpfTUVNX0VSUk9SKTsKLSAgICBzdHJjcHkocy0+bXNnLCBzLT5wYXRoKTsKLSAgICBzdHJjYXQocy0+bXNnLCAiOiAiKTsKLSAgICBzdHJjYXQocy0+bXNnLCBtKTsKLSAgICByZXR1cm4gKGNvbnN0IGNoYXIqKXMtPm1zZzsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIENsZWFyIHRoZSBlcnJvciBhbmQgZW5kLW9mLWZpbGUgZmxhZ3MsIGFuZCBkbyB0aGUgc2FtZSBmb3IgdGhlIHJlYWwgZmlsZS4KLSovCi12b2lkIFpFWFBPUlQgZ3pjbGVhcmVyciAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCkgcmV0dXJuOwotICAgIGlmIChzLT56X2VyciAhPSBaX1NUUkVBTV9FTkQpIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgY2xlYXJlcnIocy0+ZmlsZSk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3psaWIuYyBiL01vZHVsZXMvemxpYi9nemxpYi5jCmluZGV4IDYwM2U2MGUuLmZhZTIwMmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nemxpYi5jCisrKyBiL01vZHVsZXMvemxpYi9nemxpYi5jCkBAIC0xLDE5ICsxLDIzIEBACiAvKiBnemxpYi5jIC0tIHpsaWIgZnVuY3Rpb25zIGNvbW1vbiB0byByZWFkaW5nIGFuZCB3cml0aW5nIGd6aXAgZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKICNpbmNsdWRlICJnemd1dHMuaCIKIAorI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0JPUkxBTkRDX18pCisjICBkZWZpbmUgTFNFRUsgX2xzZWVraTY0CisjZWxzZQogI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCiAjICBkZWZpbmUgTFNFRUsgbHNlZWs2NAogI2Vsc2UKICMgIGRlZmluZSBMU0VFSyBsc2VlawogI2VuZGlmCisjZW5kaWYKIAogLyogTG9jYWwgZnVuY3Rpb25zICovCiBsb2NhbCB2b2lkIGd6X3Jlc2V0IE9GKChnel9zdGF0ZXApKTsKLWxvY2FsIGd6RmlsZSBnel9vcGVuIE9GKChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSk7Citsb2NhbCBnekZpbGUgZ3pfb3BlbiBPRigoY29uc3Qgdm9pZCAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOwogCiAjaWYgZGVmaW5lZCBVTkRFUl9DRQogCkBAIC03MSwyOCArNzUsNDAgQEAKIGxvY2FsIHZvaWQgZ3pfcmVzZXQoc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogeworICAgIHN0YXRlLT54LmhhdmUgPSAwOyAgICAgICAgICAgICAgLyogbm8gb3V0cHV0IGRhdGEgYXZhaWxhYmxlICovCiAgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsgICAvKiBmb3IgcmVhZGluZyAuLi4gKi8KLSAgICAgICAgc3RhdGUtPmhhdmUgPSAwOyAgICAgICAgICAgIC8qIG5vIG91dHB1dCBkYXRhIGF2YWlsYWJsZSAqLwogICAgICAgICBzdGF0ZS0+ZW9mID0gMDsgICAgICAgICAgICAgLyogbm90IGF0IGVuZCBvZiBmaWxlICovCisgICAgICAgIHN0YXRlLT5wYXN0ID0gMDsgICAgICAgICAgICAvKiBoYXZlIG5vdCByZWFkIHBhc3QgZW5kIHlldCAqLwogICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsgICAgICAgICAgLyogbG9vayBmb3IgZ3ppcCBoZWFkZXIgKi8KLSAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7ICAgICAgICAgIC8qIGRlZmF1bHQgZm9yIGVtcHR5IGZpbGUgKi8KICAgICB9CiAgICAgc3RhdGUtPnNlZWsgPSAwOyAgICAgICAgICAgICAgICAvKiBubyBzZWVrIHJlcXVlc3QgcGVuZGluZyAqLwogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsgICAgLyogY2xlYXIgZXJyb3IgKi8KLSAgICBzdGF0ZS0+cG9zID0gMDsgICAgICAgICAgICAgICAgIC8qIG5vIHVuY29tcHJlc3NlZCBkYXRhIHlldCAqLworICAgIHN0YXRlLT54LnBvcyA9IDA7ICAgICAgICAgICAgICAgLyogbm8gdW5jb21wcmVzc2VkIGRhdGEgeWV0ICovCiAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOyAgICAgICAvKiBubyBpbnB1dCBkYXRhIHlldCAqLwogfQogCiAvKiBPcGVuIGEgZ3ppcCBmaWxlIGVpdGhlciBieSBuYW1lIG9yIGZpbGUgZGVzY3JpcHRvci4gKi8KIGxvY2FsIGd6RmlsZSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKQotICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgY29uc3Qgdm9pZCAqcGF0aDsKICAgICBpbnQgZmQ7CiAgICAgY29uc3QgY2hhciAqbW9kZTsKIHsKICAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgc2l6ZV90IGxlbjsKKyAgICBpbnQgb2ZsYWc7CisjaWZkZWYgT19DTE9FWEVDCisgICAgaW50IGNsb2V4ZWMgPSAwOworI2VuZGlmCisjaWZkZWYgT19FWENMCisgICAgaW50IGV4Y2x1c2l2ZSA9IDA7CisjZW5kaWYKKworICAgIC8qIGNoZWNrIGlucHV0ICovCisgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBhbGxvY2F0ZSBnekZpbGUgc3RydWN0dXJlIHRvIHJldHVybiAqLwotICAgIHN0YXRlID0gbWFsbG9jKHNpemVvZihnel9zdGF0ZSkpOworICAgIHN0YXRlID0gKGd6X3N0YXRlcCltYWxsb2Moc2l6ZW9mKGd6X3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN0YXRlLT5zaXplID0gMDsgICAgICAgICAgICAvKiBubyBidWZmZXJzIGFsbG9jYXRlZCB5ZXQgKi8KQEAgLTEwMyw2ICsxMTksNyBAQAogICAgIHN0YXRlLT5tb2RlID0gR1pfTk9ORTsKICAgICBzdGF0ZS0+bGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CiAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9ERUZBVUxUX1NUUkFURUdZOworICAgIHN0YXRlLT5kaXJlY3QgPSAwOwogICAgIHdoaWxlICgqbW9kZSkgewogICAgICAgICBpZiAoKm1vZGUgPj0gJzAnICYmICptb2RlIDw9ICc5JykKICAgICAgICAgICAgIHN0YXRlLT5sZXZlbCA9ICptb2RlIC0gJzAnOwpAQCAtMTI0LDYgKzE0MSwxNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgY2FzZSAnYic6ICAgICAgIC8qIGlnbm9yZSAtLSB3aWxsIHJlcXVlc3QgYmluYXJ5IGFueXdheSAqLwogICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIE9fQ0xPRVhFQworICAgICAgICAgICAgY2FzZSAnZSc6CisgICAgICAgICAgICAgICAgY2xvZXhlYyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBPX0VYQ0wKKyAgICAgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgICAgIGV4Y2x1c2l2ZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgICAgIGNhc2UgJ2YnOgogICAgICAgICAgICAgICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfRklMVEVSRUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzUsNiArMTYyLDEwIEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdGJzoKICAgICAgICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0ZJWEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnVCc6CisgICAgICAgICAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgLyogY291bGQgY29uc2lkZXIgYXMgYW4gZXJyb3IsIGJ1dCBqdXN0IGlnbm9yZSAqLwogICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIH0KQEAgLTE0NywzMCArMTc4LDcxIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIC8qIGNhbid0IGZvcmNlIHRyYW5zcGFyZW50IHJlYWQgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeworICAgICAgICBpZiAoc3RhdGUtPmRpcmVjdCkgeworICAgICAgICAgICAgZnJlZShzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsgICAgICAvKiBmb3IgZW1wdHkgZmlsZSAqLworICAgIH0KKwogICAgIC8qIHNhdmUgdGhlIHBhdGggbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLSAgICBzdGF0ZS0+cGF0aCA9IG1hbGxvYyhzdHJsZW4ocGF0aCkgKyAxKTsKKyNpZmRlZiBfV0lOMzIKKyAgICBpZiAoZmQgPT0gLTIpIHsKKyAgICAgICAgbGVuID0gd2NzdG9tYnMoTlVMTCwgcGF0aCwgMCk7CisgICAgICAgIGlmIChsZW4gPT0gKHNpemVfdCktMSkKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBsZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKilwYXRoKTsKKyAgICBzdGF0ZS0+cGF0aCA9IChjaGFyICopbWFsbG9jKGxlbiArIDEpOwogICAgIGlmIChzdGF0ZS0+cGF0aCA9PSBOVUxMKSB7CiAgICAgICAgIGZyZWUoc3RhdGUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc3RyY3B5KHN0YXRlLT5wYXRoLCBwYXRoKTsKKyNpZmRlZiBfV0lOMzIKKyAgICBpZiAoZmQgPT0gLTIpCisgICAgICAgIGlmIChsZW4pCisgICAgICAgICAgICB3Y3N0b21icyhzdGF0ZS0+cGF0aCwgcGF0aCwgbGVuICsgMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICooc3RhdGUtPnBhdGgpID0gMDsKKyAgICBlbHNlCisjZW5kaWYKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgICAgICBzbnByaW50ZihzdGF0ZS0+cGF0aCwgbGVuICsgMSwgIiVzIiwgKGNvbnN0IGNoYXIgKilwYXRoKTsKKyNlbHNlCisgICAgICAgIHN0cmNweShzdGF0ZS0+cGF0aCwgcGF0aCk7CisjZW5kaWYKIAotICAgIC8qIG9wZW4gdGhlIGZpbGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbW9kZSAob3IganVzdCB1c2UgZmQpICovCi0gICAgc3RhdGUtPmZkID0gZmQgIT0gLTEgPyBmZCA6Ci0gICAgICAgIG9wZW4ocGF0aCwKKyAgICAvKiBjb21wdXRlIHRoZSBmbGFncyBmb3Igb3BlbigpICovCisgICAgb2ZsYWcgPQogI2lmZGVmIE9fTEFSR0VGSUxFCi0gICAgICAgICAgICBPX0xBUkdFRklMRSB8CisgICAgICAgIE9fTEFSR0VGSUxFIHwKICNlbmRpZgogI2lmZGVmIE9fQklOQVJZCi0gICAgICAgICAgICBPX0JJTkFSWSB8CisgICAgICAgIE9fQklOQVJZIHwKICNlbmRpZgotICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPwotICAgICAgICAgICAgICAgIE9fUkRPTkxZIDoKLSAgICAgICAgICAgICAgICAoT19XUk9OTFkgfCBPX0NSRUFUIHwgKAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9PSBHWl9XUklURSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBPX1RSVU5DIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIE9fQVBQRU5EKSkpLAotICAgICAgICAgICAgMDY2Nik7CisjaWZkZWYgT19DTE9FWEVDCisgICAgICAgIChjbG9leGVjID8gT19DTE9FWEVDIDogMCkgfAorI2VuZGlmCisgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KKyAgICAgICAgIE9fUkRPTkxZIDoKKyAgICAgICAgIChPX1dST05MWSB8IE9fQ1JFQVQgfAorI2lmZGVmIE9fRVhDTAorICAgICAgICAgIChleGNsdXNpdmUgPyBPX0VYQ0wgOiAwKSB8CisjZW5kaWYKKyAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfV1JJVEUgPworICAgICAgICAgICBPX1RSVU5DIDoKKyAgICAgICAgICAgT19BUFBFTkQpKSk7CisKKyAgICAvKiBvcGVuIHRoZSBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIGZsYWdzIChvciBqdXN0IHVzZSBmZCkgKi8KKyAgICBzdGF0ZS0+ZmQgPSBmZCA+IC0xID8gZmQgOiAoCisjaWZkZWYgX1dJTjMyCisgICAgICAgIGZkID09IC0yID8gX3dvcGVuKHBhdGgsIG9mbGFnLCAwNjY2KSA6CisjZW5kaWYKKyAgICAgICAgb3BlbigoY29uc3QgY2hhciAqKXBhdGgsIG9mbGFnLCAwNjY2KSk7CiAgICAgaWYgKHN0YXRlLT5mZCA9PSAtMSkgewogICAgICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKICAgICAgICAgZnJlZShzdGF0ZSk7CkBAIC0yMTYsMTUgKzI4OCwyOSBAQAogICAgIGNoYXIgKnBhdGg7ICAgICAgICAgLyogaWRlbnRpZmllciBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KICAgICBnekZpbGUgZ3o7CiAKLSAgICBpZiAoZmQgPT0gLTEgfHwgKHBhdGggPSBtYWxsb2MoNyArIDMgKiBzaXplb2YoaW50KSkpID09IE5VTEwpCisgICAgaWYgKGZkID09IC0xIHx8IChwYXRoID0gKGNoYXIgKiltYWxsb2MoNyArIDMgKiBzaXplb2YoaW50KSkpID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYocGF0aCwgNyArIDMgKiBzaXplb2YoaW50KSwgIjxmZDolZD4iLCBmZCk7IC8qIGZvciBkZWJ1Z2dpbmcgKi8KKyNlbHNlCiAgICAgc3ByaW50ZihwYXRoLCAiPGZkOiVkPiIsIGZkKTsgICAvKiBmb3IgZGVidWdnaW5nICovCisjZW5kaWYKICAgICBneiA9IGd6X29wZW4ocGF0aCwgZmQsIG1vZGUpOwogICAgIGZyZWUocGF0aCk7CiAgICAgcmV0dXJuIGd6OwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCisjaWZkZWYgX1dJTjMyCitnekZpbGUgWkVYUE9SVCBnem9wZW5fdyhwYXRoLCBtb2RlKQorICAgIGNvbnN0IHdjaGFyX3QgKnBhdGg7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihwYXRoLCAtMiwgbW9kZSk7Cit9CisjZW5kaWYKKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLwogaW50IFpFWFBPUlQgZ3pidWZmZXIoZmlsZSwgc2l6ZSkKICAgICBnekZpbGUgZmlsZTsKICAgICB1bnNpZ25lZCBzaXplOwpAQCAtMjQzLDggKzMyOSw4IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGNoZWNrIGFuZCBzZXQgcmVxdWVzdGVkIHNpemUgKi8KLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHNpemUgPCAyKQorICAgICAgICBzaXplID0gMjsgICAgICAgICAgICAgICAvKiBuZWVkIHR3byBieXRlcyB0byBjaGVjayBtYWdpYyBoZWFkZXIgKi8KICAgICBzdGF0ZS0+d2FudCA9IHNpemU7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yNjEsNyArMzQ3LDggQEAKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAogICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBiYWNrIHVwIGFuZCBzdGFydCBvdmVyICovCkBAIC0yODksNyArMzc2LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogY2hlY2sgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICBpZiAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGNhbiBvbmx5IHNlZWsgZnJvbSBzdGFydCBvciByZWxhdGl2ZSB0byBjdXJyZW50IHBvc2l0aW9uICovCkBAIC0yOTgsMzEgKzM4NSwzMiBAQAogCiAgICAgLyogbm9ybWFsaXplIG9mZnNldCB0byBhIFNFRUtfQ1VSIHNwZWNpZmljYXRpb24gKi8KICAgICBpZiAod2hlbmNlID09IFNFRUtfU0VUKQotICAgICAgICBvZmZzZXQgLT0gc3RhdGUtPnBvczsKKyAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT54LnBvczsKICAgICBlbHNlIGlmIChzdGF0ZS0+c2VlaykKICAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT5za2lwOwogICAgIHN0YXRlLT5zZWVrID0gMDsKIAogICAgIC8qIGlmIHdpdGhpbiByYXcgYXJlYSB3aGlsZSByZWFkaW5nLCBqdXN0IGdvIHRoZXJlICovCiAgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgJiYgc3RhdGUtPmhvdyA9PSBDT1BZICYmCi0gICAgICAgIHN0YXRlLT5wb3MgKyBvZmZzZXQgPj0gc3RhdGUtPnJhdykgewotICAgICAgICByZXQgPSBMU0VFSyhzdGF0ZS0+ZmQsIG9mZnNldCAtIHN0YXRlLT5oYXZlLCBTRUVLX0NVUik7CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKyBvZmZzZXQgPj0gMCkgeworICAgICAgICByZXQgPSBMU0VFSyhzdGF0ZS0+ZmQsIG9mZnNldCAtIHN0YXRlLT54LmhhdmUsIFNFRUtfQ1VSKTsKICAgICAgICAgaWYgKHJldCA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKICAgICAgICAgc3RhdGUtPmVvZiA9IDA7CisgICAgICAgIHN0YXRlLT5wYXN0ID0gMDsKICAgICAgICAgc3RhdGUtPnNlZWsgPSAwOwogICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiAgICAgICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiBzdGF0ZS0+cG9zOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gb2Zmc2V0OworICAgICAgICByZXR1cm4gc3RhdGUtPngucG9zOwogICAgIH0KIAogICAgIC8qIGNhbGN1bGF0ZSBza2lwIGFtb3VudCwgcmV3aW5kaW5nIGlmIG5lZWRlZCBmb3IgYmFjayBzZWVrIHdoZW4gcmVhZGluZyAqLwogICAgIGlmIChvZmZzZXQgPCAwKSB7CiAgICAgICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEKSAgICAgICAgIC8qIHdyaXRpbmcgLS0gY2FuJ3QgZ28gYmFja3dhcmRzICovCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIG9mZnNldCArPSBzdGF0ZS0+cG9zOworICAgICAgICBvZmZzZXQgKz0gc3RhdGUtPngucG9zOwogICAgICAgICBpZiAob2Zmc2V0IDwgMCkgICAgICAgICAgICAgICAgICAgICAvKiBiZWZvcmUgc3RhcnQgb2YgZmlsZSEgKi8KICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKGd6cmV3aW5kKGZpbGUpID09IC0xKSAgICAgICAgICAgLyogcmV3aW5kLCB0aGVuIHNraXAgdG8gb2Zmc2V0ICovCkBAIC0zMzEsMTEgKzQxOSwxMSBAQAogCiAgICAgLyogaWYgcmVhZGluZywgc2tpcCB3aGF0J3MgaW4gb3V0cHV0IGJ1ZmZlciAob25lIGxlc3MgZ3pnZXRjKCkgY2hlY2spICovCiAgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKLSAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+aGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+aGF2ZSA+IG9mZnNldCA/Ci0gICAgICAgICAgICAodW5zaWduZWQpb2Zmc2V0IDogc3RhdGUtPmhhdmU7Ci0gICAgICAgIHN0YXRlLT5oYXZlIC09IG47Ci0gICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+eC5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT54LmhhdmUgPiBvZmZzZXQgPworICAgICAgICAgICAgKHVuc2lnbmVkKW9mZnNldCA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgb2Zmc2V0IC09IG47CiAgICAgfQogCkBAIC0zNDQsNyArNDMyLDcgQEAKICAgICAgICAgc3RhdGUtPnNlZWsgPSAxOwogICAgICAgICBzdGF0ZS0+c2tpcCA9IG9mZnNldDsKICAgICB9Ci0gICAgcmV0dXJuIHN0YXRlLT5wb3MgKyBvZmZzZXQ7CisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIG9mZnNldDsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtMzczLDcgKzQ2MSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHJldHVybiBwb3NpdGlvbiAqLwotICAgIHJldHVybiBzdGF0ZS0+cG9zICsgKHN0YXRlLT5zZWVrID8gc3RhdGUtPnNraXAgOiAwKTsKKyAgICByZXR1cm4gc3RhdGUtPngucG9zICsgKHN0YXRlLT5zZWVrID8gc3RhdGUtPnNraXAgOiAwKTsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtNDMzLDggKzUyMSw3IEBACiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLyogcmV0dXJuIGVuZC1vZi1maWxlIHN0YXRlICovCi0gICAgcmV0dXJuIHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPwotICAgICAgICAoc3RhdGUtPmVvZiAmJiBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9PSAwICYmIHN0YXRlLT5oYXZlID09IDApIDogMDsKKyAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/IHN0YXRlLT5wYXN0IDogMDsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtNDU0LDcgKzU0MSw4IEBACiAgICAgLyogcmV0dXJuIGVycm9yIGluZm9ybWF0aW9uICovCiAgICAgaWYgKGVycm51bSAhPSBOVUxMKQogICAgICAgICAqZXJybnVtID0gc3RhdGUtPmVycjsKLSAgICByZXR1cm4gc3RhdGUtPm1zZyA9PSBOVUxMID8gIiIgOiBzdGF0ZS0+bXNnOworICAgIHJldHVybiBzdGF0ZS0+ZXJyID09IFpfTUVNX0VSUk9SID8gIm91dCBvZiBtZW1vcnkiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZS0+bXNnID09IE5VTEwgPyAiIiA6IHN0YXRlLT5tc2cpOwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC00NzEsOCArNTU5LDEwIEBACiAgICAgICAgIHJldHVybjsKIAogICAgIC8qIGNsZWFyIGVycm9yIGFuZCBlbmQtb2YtZmlsZSAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKQorICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7CiAgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CisgICAgfQogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKIH0KIApAQCAtNDk0LDI2ICs1ODQsMzMgQEAKICAgICAgICAgc3RhdGUtPm1zZyA9IE5VTEw7CiAgICAgfQogCisgICAgLyogaWYgZmF0YWwsIHNldCBzdGF0ZS0+eC5oYXZlIHRvIDAgc28gdGhhdCB0aGUgZ3pnZXRjKCkgbWFjcm8gZmFpbHMgKi8KKyAgICBpZiAoZXJyICE9IFpfT0sgJiYgZXJyICE9IFpfQlVGX0VSUk9SKQorICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKKwogICAgIC8qIHNldCBlcnJvciBjb2RlLCBhbmQgaWYgbm8gbWVzc2FnZSwgdGhlbiBkb25lICovCiAgICAgc3RhdGUtPmVyciA9IGVycjsKICAgICBpZiAobXNnID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8qIGZvciBhbiBvdXQgb2YgbWVtb3J5IGVycm9yLCBzYXZlIGFzIHN0YXRpYyBzdHJpbmcgKi8KLSAgICBpZiAoZXJyID09IFpfTUVNX0VSUk9SKSB7Ci0gICAgICAgIHN0YXRlLT5tc2cgPSAoY2hhciAqKW1zZzsKKyAgICAvKiBmb3IgYW4gb3V0IG9mIG1lbW9yeSBlcnJvciwgcmV0dXJuIGxpdGVyYWwgc3RyaW5nIHdoZW4gcmVxdWVzdGVkICovCisgICAgaWYgKGVyciA9PSBaX01FTV9FUlJPUikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8qIGNvbnN0cnVjdCBlcnJvciBtZXNzYWdlIHdpdGggcGF0aCAqLwotICAgIGlmICgoc3RhdGUtPm1zZyA9IG1hbGxvYyhzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzKSkgPT0gTlVMTCkgeworICAgIGlmICgoc3RhdGUtPm1zZyA9IChjaGFyICopbWFsbG9jKHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBzdHJsZW4obXNnKSArIDMpKSA9PQorICAgICAgICAgICAgTlVMTCkgewogICAgICAgICBzdGF0ZS0+ZXJyID0gWl9NRU1fRVJST1I7Ci0gICAgICAgIHN0YXRlLT5tc2cgPSAoY2hhciAqKSJvdXQgb2YgbWVtb3J5IjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKHN0YXRlLT5tc2csIHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBzdHJsZW4obXNnKSArIDMsCisgICAgICAgICAgICAgIiVzJXMlcyIsIHN0YXRlLT5wYXRoLCAiOiAiLCBtc2cpOworI2Vsc2UKICAgICBzdHJjcHkoc3RhdGUtPm1zZywgc3RhdGUtPnBhdGgpOwogICAgIHN0cmNhdChzdGF0ZS0+bXNnLCAiOiAiKTsKICAgICBzdHJjYXQoc3RhdGUtPm1zZywgbXNnKTsKKyNlbmRpZgogICAgIHJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6cmVhZC5jIGIvTW9kdWxlcy96bGliL2d6cmVhZC5jCmluZGV4IDU0ODIwMWEuLmJmNDUzOGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nenJlYWQuYworKysgYi9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMKQEAgLTEsNSArMSw1IEBACiAvKiBnenJlYWQuYyAtLSB6bGliIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC04LDEwICs4LDkgQEAKIC8qIExvY2FsIGZ1bmN0aW9ucyAqLwogbG9jYWwgaW50IGd6X2xvYWQgT0YoKGd6X3N0YXRlcCwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwgdW5zaWduZWQgKikpOwogbG9jYWwgaW50IGd6X2F2YWlsIE9GKChnel9zdGF0ZXApKTsKLWxvY2FsIGludCBnel9uZXh0NCBPRigoZ3pfc3RhdGVwLCB1bnNpZ25lZCBsb25nICopKTsKLWxvY2FsIGludCBnel9oZWFkIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9sb29rIE9GKChnel9zdGF0ZXApKTsKIGxvY2FsIGludCBnel9kZWNvbXAgT0YoKGd6X3N0YXRlcCkpOwotbG9jYWwgaW50IGd6X21ha2UgT0YoKGd6X3N0YXRlcCkpOworbG9jYWwgaW50IGd6X2ZldGNoIE9GKChnel9zdGF0ZXApKTsKIGxvY2FsIGludCBnel9za2lwIE9GKChnel9zdGF0ZXAsIHpfb2ZmNjRfdCkpOwogCiAvKiBVc2UgcmVhZCgpIHRvIGxvYWQgYSBidWZmZXIgLS0gcmV0dXJuIC0xIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gIFJlYWQgZnJvbQpAQCAtNDYsNzMgKzQ1LDU0IEBACiAgICBlcnJvciwgMCBvdGhlcndpc2UuICBOb3RlIHRoYXQgdGhlIGVvZiBmbGFnIGlzIHNldCB3aGVuIHRoZSBlbmQgb2YgdGhlIGlucHV0CiAgICBmaWxlIGlzIHJlYWNoZWQsIGV2ZW4gdGhvdWdoIHRoZXJlIG1heSBiZSB1bnVzZWQgZGF0YSBpbiB0aGUgYnVmZmVyLiAgT25jZQogICAgdGhhdCBkYXRhIGhhcyBiZWVuIHVzZWQsIG5vIG1vcmUgYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlYWQgdGhlIGZpbGUuCi0gICBnel9hdmFpbCgpIGFzc3VtZXMgdGhhdCBzdHJtLT5hdmFpbF9pbiA9PSAwLiAqLworICAgSWYgc3RybS0+YXZhaWxfaW4gIT0gMCwgdGhlbiB0aGUgY3VycmVudCBkYXRhIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YKKyAgIHRoZSBpbnB1dCBidWZmZXIsIGFuZCB0aGVuIHRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlciBpcyBsb2FkZWQgd2l0aCB0aGUKKyAgIGF2YWlsYWJsZSBkYXRhIGZyb20gdGhlIGlucHV0IGZpbGUuICovCiBsb2NhbCBpbnQgZ3pfYXZhaWwoc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogeworICAgIHVuc2lnbmVkIGdvdDsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICBpZiAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoc3RhdGUtPmVvZiA9PSAwKSB7Ci0gICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+aW4sIHN0YXRlLT5zaXplLAotICAgICAgICAgICAgICAgICh1bnNpZ25lZCAqKSYoc3RybS0+YXZhaWxfaW4pKSA9PSAtMSkKKyAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luKSB7ICAgICAgIC8qIGNvcHkgd2hhdCdzIHRoZXJlIHRvIHRoZSBzdGFydCAqLworICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcCA9IHN0YXRlLT5pbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0IGNoYXIgKnEgPSBzdHJtLT5uZXh0X2luOworICAgICAgICAgICAgdW5zaWduZWQgbiA9IHN0cm0tPmF2YWlsX2luOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICpwKysgPSAqcSsrOworICAgICAgICAgICAgfSB3aGlsZSAoLS1uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPmluICsgc3RybS0+YXZhaWxfaW4sCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zaXplIC0gc3RybS0+YXZhaWxfaW4sICZnb3QpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBzdHJtLT5hdmFpbF9pbiArPSBnb3Q7CiAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi0vKiBHZXQgbmV4dCBieXRlIGZyb20gaW5wdXQsIG9yIC0xIGlmIGVuZCBvciBlcnJvci4gKi8KLSNkZWZpbmUgTkVYVCgpICgoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBnel9hdmFpbChzdGF0ZSkgPT0gLTEpID8gLTEgOiBcCi0gICAgICAgICAgICAgICAgKHN0cm0tPmF2YWlsX2luID09IDAgPyAtMSA6IFwKLSAgICAgICAgICAgICAgICAgKHN0cm0tPmF2YWlsX2luLS0sICooc3RybS0+bmV4dF9pbikrKykpKQotCi0vKiBHZXQgYSBmb3VyLWJ5dGUgbGl0dGxlLWVuZGlhbiBpbnRlZ2VyIGFuZCByZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCB0aGUgdmFsdWUKLSAgIGluICpyZXQuICBPdGhlcndpc2UgLTEgaXMgcmV0dXJuZWQgYW5kICpyZXQgaXMgbm90IG1vZGlmaWVkLiAqLwotbG9jYWwgaW50IGd6X25leHQ0KHN0YXRlLCByZXQpCi0gICAgZ3pfc3RhdGVwIHN0YXRlOwotICAgIHVuc2lnbmVkIGxvbmcgKnJldDsKLXsKLSAgICBpbnQgY2g7Ci0gICAgdW5zaWduZWQgbG9uZyB2YWw7Ci0gICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKLQotICAgIHZhbCA9IE5FWFQoKTsKLSAgICB2YWwgKz0gKHVuc2lnbmVkKU5FWFQoKSA8PCA4OwotICAgIHZhbCArPSAodW5zaWduZWQgbG9uZylORVhUKCkgPDwgMTY7Ci0gICAgY2ggPSBORVhUKCk7Ci0gICAgaWYgKGNoID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgdmFsICs9ICh1bnNpZ25lZCBsb25nKWNoIDw8IDI0OwotICAgICpyZXQgPSB2YWw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIExvb2sgZm9yIGd6aXAgaGVhZGVyLCBzZXQgdXAgZm9yIGluZmxhdGUgb3IgY29weS4gIHN0YXRlLT5oYXZlIG11c3QgYmUgemVyby4KKy8qIExvb2sgZm9yIGd6aXAgaGVhZGVyLCBzZXQgdXAgZm9yIGluZmxhdGUgb3IgY29weS4gIHN0YXRlLT54LmhhdmUgbXVzdCBiZSAwLgogICAgSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBpbiwgYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiAgc3RhdGUtPmhvdyB3aWxsIGJlCiAgICBsZWZ0IHVuY2hhbmdlZCBpZiB0aGVyZSBpcyBubyBtb3JlIGlucHV0IGRhdGEgYXZhaWxhYmxlLCB3aWxsIGJlIHNldCB0byBDT1BZCiAgICBpZiB0aGVyZSBpcyBubyBnemlwIGhlYWRlciBhbmQgZGlyZWN0IGNvcHlpbmcgd2lsbCBiZSBwZXJmb3JtZWQsIG9yIGl0IHdpbGwKLSAgIGJlIHNldCB0byBHWklQIGZvciBkZWNvbXByZXNzaW9uLCBhbmQgdGhlIGd6aXAgaGVhZGVyIHdpbGwgYmUgc2tpcHBlZCBzbwotICAgdGhhdCB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgZGF0YSBpcyB0aGUgcmF3IGRlZmxhdGUgc3RyZWFtLiAgSWYgZGlyZWN0Ci0gICBjb3B5aW5nLCB0aGVuIGxlZnRvdmVyIGlucHV0IGRhdGEgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIHdpbGwgYmUgY29waWVkIHRvCi0gICB0aGUgb3V0cHV0IGJ1ZmZlci4gIEluIHRoYXQgY2FzZSwgYWxsIGZ1cnRoZXIgZmlsZSByZWFkcyB3aWxsIGJlIGRpcmVjdGx5IHRvCi0gICBlaXRoZXIgdGhlIG91dHB1dCBidWZmZXIgb3IgYSB1c2VyIGJ1ZmZlci4gIElmIGRlY29tcHJlc3NpbmcsIHRoZSBpbmZsYXRlCi0gICBzdGF0ZSBhbmQgdGhlIGNoZWNrIHZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQuICBnel9oZWFkKCkgd2lsbCByZXR1cm4gMCBvbgotICAgc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLiAgRmFpbHVyZXMgbWF5IGluY2x1ZGUgcmVhZCBlcnJvcnMgb3IgZ3ppcCBoZWFkZXIKLSAgIGVycm9ycy4gICovCi1sb2NhbCBpbnQgZ3pfaGVhZChzdGF0ZSkKKyAgIGJlIHNldCB0byBHWklQIGZvciBkZWNvbXByZXNzaW9uLiAgSWYgZGlyZWN0IGNvcHlpbmcsIHRoZW4gbGVmdG92ZXIgaW5wdXQKKyAgIGRhdGEgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIHdpbGwgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgSW4gdGhhdAorICAgY2FzZSwgYWxsIGZ1cnRoZXIgZmlsZSByZWFkcyB3aWxsIGJlIGRpcmVjdGx5IHRvIGVpdGhlciB0aGUgb3V0cHV0IGJ1ZmZlciBvcgorICAgYSB1c2VyIGJ1ZmZlci4gIElmIGRlY29tcHJlc3NpbmcsIHRoZSBpbmZsYXRlIHN0YXRlIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCisgICBnel9sb29rKCkgd2lsbCByZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuICovCitsb2NhbCBpbnQgZ3pfbG9vayhzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKLSAgICBpbnQgZmxhZ3M7Ci0gICAgdW5zaWduZWQgbGVuOwogCiAgICAgLyogYWxsb2NhdGUgcmVhZCBidWZmZXJzIGFuZCBpbmZsYXRlIG1lbW9yeSAqLwogICAgIGlmIChzdGF0ZS0+c2l6ZSA9PSAwKSB7CiAgICAgICAgIC8qIGFsbG9jYXRlIGJ1ZmZlcnMgKi8KLSAgICAgICAgc3RhdGUtPmluID0gbWFsbG9jKHN0YXRlLT53YW50KTsKLSAgICAgICAgc3RhdGUtPm91dCA9IG1hbGxvYyhzdGF0ZS0+d2FudCA8PCAxKTsKKyAgICAgICAgc3RhdGUtPmluID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQpOworICAgICAgICBzdGF0ZS0+b3V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQgPDwgMSk7CiAgICAgICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCB8fCBzdGF0ZS0+b3V0ID09IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChzdGF0ZS0+b3V0ICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKQEAgLTEyOSw3ICsxMDksNyBAQAogICAgICAgICBzdGF0ZS0+c3RybS5vcGFxdWUgPSBaX05VTEw7CiAgICAgICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsKICAgICAgICAgc3RhdGUtPnN0cm0ubmV4dF9pbiA9IFpfTlVMTDsKLSAgICAgICAgaWYgKGluZmxhdGVJbml0MigmKHN0YXRlLT5zdHJtKSwgLTE1KSAhPSBaX09LKSB7ICAgIC8qIHJhdyBpbmZsYXRlICovCisgICAgICAgIGlmIChpbmZsYXRlSW5pdDIoJihzdGF0ZS0+c3RybSksIDE1ICsgMTYpICE9IFpfT0spIHsgICAgLyogZ3VuemlwICovCiAgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOwogICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOwogICAgICAgICAgICAgc3RhdGUtPnNpemUgPSAwOwpAQCAtMTM4LDgzICsxMTgsNDUgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIGdldCBzb21lIGRhdGEgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLwotICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKSB7CisgICAgLyogZ2V0IGF0IGxlYXN0IHRoZSBtYWdpYyBieXRlcyBpbiB0aGUgaW5wdXQgYnVmZmVyICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luIDwgMikgewogICAgICAgICBpZiAoZ3pfYXZhaWwoc3RhdGUpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIC8qIGxvb2sgZm9yIHRoZSBnemlwIG1hZ2ljIGhlYWRlciBieXRlcyAzMSBhbmQgMTM5ICovCi0gICAgaWYgKHN0cm0tPm5leHRfaW5bMF0gPT0gMzEpIHsKLSAgICAgICAgc3RybS0+YXZhaWxfaW4tLTsKLSAgICAgICAgc3RybS0+bmV4dF9pbisrOwotICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBnel9hdmFpbChzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiAmJiBzdHJtLT5uZXh0X2luWzBdID09IDEzOSkgewotICAgICAgICAgICAgLyogd2UgaGF2ZSBhIGd6aXAgaGVhZGVyLCB3b28gaG9vISAqLwotICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4tLTsKLSAgICAgICAgICAgIHN0cm0tPm5leHRfaW4rKzsKLQotICAgICAgICAgICAgLyogc2tpcCByZXN0IG9mIGhlYWRlciAqLwotICAgICAgICAgICAgaWYgKE5FWFQoKSAhPSA4KSB7ICAgICAgLyogY29tcHJlc3Npb24gbWV0aG9kICovCi0gICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmxhZ3MgPSBORVhUKCk7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAweGUwKSB7ICAgICAvKiByZXNlcnZlZCBmbGFnIGJpdHMgKi8KLSAgICAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTkVYVCgpOyAgICAgICAgICAgICAgICAgLyogbW9kaWZpY2F0aW9uIHRpbWUgKi8KLSAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgIC8qIGV4dHJhIGZsYWdzICovCi0gICAgICAgICAgICBORVhUKCk7ICAgICAgICAgICAgICAgICAvKiBvcGVyYXRpbmcgc3lzdGVtICovCi0gICAgICAgICAgICBpZiAoZmxhZ3MgJiA0KSB7ICAgICAgICAvKiBleHRyYSBmaWVsZCAqLwotICAgICAgICAgICAgICAgIGxlbiA9ICh1bnNpZ25lZClORVhUKCk7Ci0gICAgICAgICAgICAgICAgbGVuICs9ICh1bnNpZ25lZClORVhUKCkgPDwgODsKLSAgICAgICAgICAgICAgICB3aGlsZSAobGVuLS0pCi0gICAgICAgICAgICAgICAgICAgIGlmIChORVhUKCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiA4KSAgICAgICAgICAvKiBmaWxlIG5hbWUgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoTkVYVCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMTYpICAgICAgICAgLyogY29tbWVudCAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChORVhUKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAyKSB7ICAgICAgICAvKiBoZWFkZXIgY3JjICovCi0gICAgICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGFuIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaXMgbm90IGNoZWNrZWQgZm9yIGhlcmUgLS0gaXQgd2lsbCBiZQotICAgICAgICAgICAgICAgbm90aWNlZCBvbiB0aGUgZmlyc3QgcmVxdWVzdCBmb3IgdW5jb21wcmVzc2VkIGRhdGEgKi8KLQotICAgICAgICAgICAgLyogc2V0IHVwIGZvciBkZWNvbXByZXNzaW9uICovCi0gICAgICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7Ci0gICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgc3RhdGUtPmhvdyA9IEdaSVA7Ci0gICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogbm90IGEgZ3ppcCBmaWxlIC0tIHNhdmUgZmlyc3QgYnl0ZSAoMzEpIGFuZCBmYWxsIHRvIHJhdyBpL28gKi8KLSAgICAgICAgICAgIHN0YXRlLT5vdXRbMF0gPSAzMTsKLSAgICAgICAgICAgIHN0YXRlLT5oYXZlID0gMTsKLSAgICAgICAgfQorICAgIC8qIGxvb2sgZm9yIGd6aXAgbWFnaWMgYnl0ZXMgLS0gaWYgdGhlcmUsIGRvIGd6aXAgZGVjb2RpbmcgKG5vdGU6IHRoZXJlIGlzCisgICAgICAgYSBsb2dpY2FsIGRpbGVtbWEgaGVyZSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBjYXNlIG9mIGEgcGFydGlhbGx5IHdyaXR0ZW4KKyAgICAgICBnemlwIGZpbGUsIHRvIHdpdCwgaWYgYSBzaW5nbGUgMzEgYnl0ZSBpcyB3cml0dGVuLCB0aGVuIHdlIGNhbm5vdCB0ZWxsCisgICAgICAgd2hldGhlciB0aGlzIGlzIGEgc2luZ2xlLWJ5dGUgZmlsZSwgb3IganVzdCBhIHBhcnRpYWxseSB3cml0dGVuIGd6aXAKKyAgICAgICBmaWxlIC0tIGZvciBoZXJlIHdlIGFzc3VtZSB0aGF0IGlmIGEgZ3ppcCBmaWxlIGlzIGJlaW5nIHdyaXR0ZW4sIHRoZW4KKyAgICAgICB0aGUgaGVhZGVyIHdpbGwgYmUgd3JpdHRlbiBpbiBhIHNpbmdsZSBvcGVyYXRpb24sIHNvIHRoYXQgcmVhZGluZyBhCisgICAgICAgc2luZ2xlIGJ5dGUgaXMgc3VmZmljaWVudCBpbmRpY2F0aW9uIHRoYXQgaXQgaXMgbm90IGEgZ3ppcCBmaWxlKSAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA+IDEgJiYKKyAgICAgICAgICAgIHN0cm0tPm5leHRfaW5bMF0gPT0gMzEgJiYgc3RybS0+bmV4dF9pblsxXSA9PSAxMzkpIHsKKyAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOworICAgICAgICBzdGF0ZS0+aG93ID0gR1pJUDsKKyAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDA7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIC8qIGRvaW5nIHJhdyBpL28sIHNhdmUgc3RhcnQgb2YgcmF3IGRhdGEgZm9yIHNlZWtpbmcsIGNvcHkgYW55IGxlZnRvdmVyCi0gICAgICAgaW5wdXQgdG8gb3V0cHV0IC0tIHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBvdXRwdXQgYnVmZmVyIGlzIGxhcmdlciB0aGFuCi0gICAgICAgdGhlIGlucHV0IGJ1ZmZlciwgd2hpY2ggYWxzbyBhc3N1cmVzIHNwYWNlIGZvciBnenVuZ2V0YygpICovCi0gICAgc3RhdGUtPnJhdyA9IHN0YXRlLT5wb3M7Ci0gICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0OworICAgIC8qIG5vIGd6aXAgaGVhZGVyIC0tIGlmIHdlIHdlcmUgZGVjb2RpbmcgZ3ppcCBiZWZvcmUsIHRoZW4gdGhpcyBpcyB0cmFpbGluZworICAgICAgIGdhcmJhZ2UuICBJZ25vcmUgdGhlIHRyYWlsaW5nIGdhcmJhZ2UgYW5kIGZpbmlzaC4gKi8KKyAgICBpZiAoc3RhdGUtPmRpcmVjdCA9PSAwKSB7CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgc3RhdGUtPmVvZiA9IDE7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBkb2luZyByYXcgaS9vLCBjb3B5IGFueSBsZWZ0b3ZlciBpbnB1dCB0byBvdXRwdXQgLS0gdGhpcyBhc3N1bWVzIHRoYXQKKyAgICAgICB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBsYXJnZXIgdGhhbiB0aGUgaW5wdXQgYnVmZmVyLCB3aGljaCBhbHNvIGFzc3VyZXMKKyAgICAgICBzcGFjZSBmb3IgZ3p1bmdldGMoKSAqLworICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0OwogICAgIGlmIChzdHJtLT5hdmFpbF9pbikgewotICAgICAgICBtZW1jcHkoc3RhdGUtPm5leHQgKyBzdGF0ZS0+aGF2ZSwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOwotICAgICAgICBzdGF0ZS0+aGF2ZSArPSBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgbWVtY3B5KHN0YXRlLT54Lm5leHQsIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IHN0cm0tPmF2YWlsX2luOwogICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CiAgICAgfQogICAgIHN0YXRlLT5ob3cgPSBDT1BZOwpAQCAtMjIzLDE5ICsxNjUsMTUgQEAKIH0KIAogLyogRGVjb21wcmVzcyBmcm9tIGlucHV0IHRvIHRoZSBwcm92aWRlZCBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGluIHRoZSBzdGF0ZS4KLSAgIElmIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBpcyByZWFjaGVkLCB0aGVuIHZlcmlmeSB0aGUgZ3ppcCB0cmFpbGVyCi0gICBjaGVjayB2YWx1ZSBhbmQgbGVuZ3RoIChtb2R1bG8gMl4zMikuICBzdGF0ZS0+aGF2ZSBhbmQgc3RhdGUtPm5leHQgYXJlIHNldAotICAgdG8gcG9pbnQgdG8gdGhlIGp1c3QgZGVjb21wcmVzc2VkIGRhdGEsIGFuZCB0aGUgY3JjIGlzIHVwZGF0ZWQuICBJZiB0aGUKLSAgIHRyYWlsZXIgaXMgdmVyaWZpZWQsIHN0YXRlLT5ob3cgaXMgcmVzZXQgdG8gTE9PSyB0byBsb29rIGZvciB0aGUgbmV4dCBnemlwCi0gICBzdHJlYW0gb3IgcmF3IGRhdGEsIG9uY2Ugc3RhdGUtPmhhdmUgaXMgZGVwbGV0ZWQuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEKLSAgIG9uIGZhaWx1cmUuICBGYWlsdXJlcyBtYXkgaW5jbHVkZSBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSBvciBhIGZhaWxlZCBnemlwCi0gICB0cmFpbGVyIHZlcmlmaWNhdGlvbi4gKi8KKyAgIE9uIHJldHVybiwgc3RhdGUtPnguaGF2ZSBhbmQgc3RhdGUtPngubmV4dCBwb2ludCB0byB0aGUganVzdCBkZWNvbXByZXNzZWQKKyAgIGRhdGEuICBJZiB0aGUgZ3ppcCBzdHJlYW0gY29tcGxldGVzLCBzdGF0ZS0+aG93IGlzIHJlc2V0IHRvIExPT0sgdG8gbG9vayBmb3IKKyAgIHRoZSBuZXh0IGd6aXAgc3RyZWFtIG9yIHJhdyBkYXRhLCBvbmNlIHN0YXRlLT54LmhhdmUgaXMgZGVwbGV0ZWQuICBSZXR1cm5zIDAKKyAgIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuICovCiBsb2NhbCBpbnQgZ3pfZGVjb21wKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKLSAgICBpbnQgcmV0OworICAgIGludCByZXQgPSBaX09LOwogICAgIHVuc2lnbmVkIGhhZDsKLSAgICB1bnNpZ25lZCBsb25nIGNyYywgbGVuOwogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKICAgICAvKiBmaWxsIG91dHB1dCBidWZmZXIgdXAgdG8gZW5kIG9mIGRlZmxhdGUgc3RyZWFtICovCkBAIC0yNDUsMTUgKzE4MywxNSBAQAogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBnel9hdmFpbChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBkZWNvbXByZXNzIGFuZCBoYW5kbGUgZXJyb3JzICovCiAgICAgICAgIHJldCA9IGluZmxhdGUoc3RybSwgWl9OT19GTFVTSCk7CiAgICAgICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRVJST1IgfHwgcmV0ID09IFpfTkVFRF9ESUNUKSB7CiAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9TVFJFQU1fRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yOiBpbmZsYXRlIHN0cmVhbSBjb3JydXB0Iik7CisgICAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgZXJyb3I6IGluZmxhdGUgc3RyZWFtIGNvcnJ1cHQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBpZiAocmV0ID09IFpfTUVNX0VSUk9SKSB7CkBAIC0yNjIsNjcgKzIwMCw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChyZXQgPT0gWl9EQVRBX0VSUk9SKSB7ICAgICAgICAgICAgICAvKiBkZWZsYXRlIHN0cmVhbSBpbnZhbGlkICovCiAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9PSBOVUxMID8gImNvbXByZXNzZWQgZGF0YSBlcnJvciIgOiBzdHJtLT5tc2cpOworICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID09IE5VTEwgPyAiY29tcHJlc3NlZCBkYXRhIGVycm9yIiA6IHN0cm0tPm1zZyk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgJiYgcmV0ICE9IFpfU1RSRUFNX0VORCk7CiAKLSAgICAvKiB1cGRhdGUgYXZhaWxhYmxlIG91dHB1dCBhbmQgY3JjIGNoZWNrIHZhbHVlICovCi0gICAgc3RhdGUtPmhhdmUgPSBoYWQgLSBzdHJtLT5hdmFpbF9vdXQ7Ci0gICAgc3RhdGUtPm5leHQgPSBzdHJtLT5uZXh0X291dCAtIHN0YXRlLT5oYXZlOwotICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoc3RybS0+YWRsZXIsIHN0YXRlLT5uZXh0LCBzdGF0ZS0+aGF2ZSk7CisgICAgLyogdXBkYXRlIGF2YWlsYWJsZSBvdXRwdXQgKi8KKyAgICBzdGF0ZS0+eC5oYXZlID0gaGFkIC0gc3RybS0+YXZhaWxfb3V0OworICAgIHN0YXRlLT54Lm5leHQgPSBzdHJtLT5uZXh0X291dCAtIHN0YXRlLT54LmhhdmU7CiAKLSAgICAvKiBjaGVjayBnemlwIHRyYWlsZXIgaWYgYXQgZW5kIG9mIGRlZmxhdGUgc3RyZWFtICovCi0gICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgaWYgKGd6X25leHQ0KHN0YXRlLCAmY3JjKSA9PSAtMSB8fCBnel9uZXh0NChzdGF0ZSwgJmxlbikgPT0gLTEpIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNyYyAhPSBzdHJtLT5hZGxlcikgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgImluY29ycmVjdCBkYXRhIGNoZWNrIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlbiAhPSAoc3RybS0+dG90YWxfb3V0ICYgMHhmZmZmZmZmZkwpKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAiaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOyAgICAgIC8qIHJlYWR5IGZvciBuZXh0IHN0cmVhbSwgb25jZSBoYXZlIGlzIDAgKGxlYXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5kaXJlY3QgdW5jaGFuZ2VkIHRvIHJlbWVtYmVyIGhvdykgKi8KLSAgICB9CisgICAgLyogaWYgdGhlIGd6aXAgc3RyZWFtIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGxvb2sgZm9yIGFub3RoZXIgKi8KKyAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VORCkKKyAgICAgICAgc3RhdGUtPmhvdyA9IExPT0s7CiAKICAgICAvKiBnb29kIGRlY29tcHJlc3Npb24gKi8KICAgICByZXR1cm4gMDsKIH0KIAotLyogTWFrZSBkYXRhIGFuZCBwdXQgaW4gdGhlIG91dHB1dCBidWZmZXIuICBBc3N1bWVzIHRoYXQgc3RhdGUtPmhhdmUgPT0gMC4KKy8qIEZldGNoIGRhdGEgYW5kIHB1dCBpdCBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4gIEFzc3VtZXMgc3RhdGUtPnguaGF2ZSBpcyAwLgogICAgRGF0YSBpcyBlaXRoZXIgY29waWVkIGZyb20gdGhlIGlucHV0IGZpbGUgb3IgZGVjb21wcmVzc2VkIGZyb20gdGhlIGlucHV0CiAgICBmaWxlIGRlcGVuZGluZyBvbiBzdGF0ZS0+aG93LiAgSWYgc3RhdGUtPmhvdyBpcyBMT09LLCB0aGVuIGEgZ3ppcCBoZWFkZXIgaXMKLSAgIGxvb2tlZCBmb3IgKGFuZCBza2lwcGVkIGlmIGZvdW5kKSB0byBkZXRlcm1pbmUgd2l0aGVyIHRvIGNvcHkgb3IgZGVjb21wcmVzcy4KLSAgIFJldHVybnMgLTEgb24gZXJyb3IsIG90aGVyd2lzZSAwLiAgZ3pfbWFrZSgpIHdpbGwgbGVhdmUgc3RhdGUtPmhhdmUgYXMgQ09QWQotICAgb3IgR1pJUCB1bmxlc3MgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZSBoYXMgYmVlbiByZWFjaGVkIGFuZCBhbGwgZGF0YSBoYXMKLSAgIGJlZW4gcHJvY2Vzc2VkLiAgKi8KLWxvY2FsIGludCBnel9tYWtlKHN0YXRlKQorICAgbG9va2VkIGZvciB0byBkZXRlcm1pbmUgd2hldGhlciB0byBjb3B5IG9yIGRlY29tcHJlc3MuICBSZXR1cm5zIC0xIG9uIGVycm9yLAorICAgb3RoZXJ3aXNlIDAuICBnel9mZXRjaCgpIHdpbGwgbGVhdmUgc3RhdGUtPmhvdyBhcyBDT1BZIG9yIEdaSVAgdW5sZXNzIHRoZQorICAgZW5kIG9mIHRoZSBpbnB1dCBmaWxlIGhhcyBiZWVuIHJlYWNoZWQgYW5kIGFsbCBkYXRhIGhhcyBiZWVuIHByb2Nlc3NlZC4gICovCitsb2NhbCBpbnQgZ3pfZmV0Y2goc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogewogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICBpZiAoc3RhdGUtPmhvdyA9PSBMT09LKSB7ICAgICAgICAgICAvKiBsb29rIGZvciBnemlwIGhlYWRlciAqLwotICAgICAgICBpZiAoZ3pfaGVhZChzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgICAgICAgICAgICAgICAgLyogZ290IHNvbWUgZGF0YSBmcm9tIGd6X2hlYWQoKSAqLworICAgIGRvIHsKKyAgICAgICAgc3dpdGNoKHN0YXRlLT5ob3cpIHsKKyAgICAgICAgY2FzZSBMT09LOiAgICAgIC8qIC0+IExPT0ssIENPUFkgKG9ubHkgaWYgbmV2ZXIgR1pJUCksIG9yIEdaSVAgKi8KKyAgICAgICAgICAgIGlmIChnel9sb29rKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoc3RhdGUtPmhvdyA9PSBMT09LKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09QWTogICAgICAvKiAtPiBDT1BZICovCisgICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPm91dCwgc3RhdGUtPnNpemUgPDwgMSwgJihzdGF0ZS0+eC5oYXZlKSkKKyAgICAgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQ7CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKHN0YXRlLT5ob3cgPT0gQ09QWSkgeyAgICAgICAgICAgLyogc3RyYWlnaHQgY29weSAqLwotICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPm91dCwgc3RhdGUtPnNpemUgPDwgMSwgJihzdGF0ZS0+aGF2ZSkpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5vdXQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gR1pJUCkgeyAgICAgIC8qIGRlY29tcHJlc3MgKi8KLSAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemUgPDwgMTsKLSAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OwotICAgICAgICBpZiAoZ3pfZGVjb21wKHN0YXRlKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9CisgICAgICAgIGNhc2UgR1pJUDogICAgICAvKiAtPiBHWklQIG9yIExPT0sgKGlmIGVuZCBvZiBnemlwIHN0cmVhbSkgKi8KKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplIDw8IDE7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgICAgICBpZiAoZ3pfZGVjb21wKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChzdGF0ZS0+eC5oYXZlID09IDAgJiYgKCFzdGF0ZS0+ZW9mIHx8IHN0cm0tPmF2YWlsX2luKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMzNiwxMiArMjYyLDEyIEBACiAgICAgLyogc2tpcCBvdmVyIGxlbiBieXRlcyBvciByZWFjaCBlbmQtb2YtZmlsZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0ICovCiAgICAgd2hpbGUgKGxlbikKICAgICAgICAgLyogc2tpcCBvdmVyIHdoYXRldmVyIGlzIGluIG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgaWYgKHN0YXRlLT5oYXZlKSB7Ci0gICAgICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT5oYXZlID4gbGVuID8KLSAgICAgICAgICAgICAgICAodW5zaWduZWQpbGVuIDogc3RhdGUtPmhhdmU7Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOwotICAgICAgICAgICAgc3RhdGUtPm5leHQgKz0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPnguaGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+eC5oYXZlID4gbGVuID8KKyAgICAgICAgICAgICAgICAodW5zaWduZWQpbGVuIDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgICAgICAgICAgbGVuIC09IG47CiAgICAgICAgIH0KIApAQCAtMzUyLDcgKzI3OCw3IEBACiAgICAgICAgIC8qIG5lZWQgbW9yZSBkYXRhIHRvIHNraXAgLS0gbG9hZCB1cCBvdXRwdXQgYnVmZmVyICovCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLyogZ2V0IG1vcmUgb3V0cHV0LCBsb29raW5nIGZvciBoZWFkZXIgaWYgcmVxdWlyZWQgKi8KLSAgICAgICAgICAgIGlmIChnel9tYWtlKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChnel9mZXRjaChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0zNzQsMTQgKzMwMCwxNSBAQAogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KICAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2b2lkcyB0aGUgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLwogICAgIGlmICgoaW50KWxlbiA8IDApIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNDAwLDQ5ICszMjcsNTEgQEAKICAgICBnb3QgPSAwOwogICAgIGRvIHsKICAgICAgICAgLyogZmlyc3QganVzdCB0cnkgY29weWluZyBkYXRhIGZyb20gdGhlIG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgaWYgKHN0YXRlLT5oYXZlKSB7Ci0gICAgICAgICAgICBuID0gc3RhdGUtPmhhdmUgPiBsZW4gPyBsZW4gOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT5uZXh0LCBuKTsKLSAgICAgICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOworICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSkgeworICAgICAgICAgICAgbiA9IHN0YXRlLT54LmhhdmUgPiBsZW4gPyBsZW4gOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPngubmV4dCwgbik7CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CiAgICAgICAgIH0KIAogICAgICAgICAvKiBvdXRwdXQgYnVmZmVyIGVtcHR5IC0tIHJldHVybiBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCAqLwotICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0cm0tPmF2YWlsX2luID09IDApCisgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5lb2YgJiYgc3RybS0+YXZhaWxfaW4gPT0gMCkgeworICAgICAgICAgICAgc3RhdGUtPnBhc3QgPSAxOyAgICAgICAgLyogdHJpZWQgdG8gcmVhZCBwYXN0IGVuZCAqLwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICAvKiBuZWVkIG91dHB1dCBkYXRhIC0tIGZvciBzbWFsbCBsZW4gb3IgbmV3IHN0cmVhbSBsb2FkIHVwIG91ciBvdXRwdXQKICAgICAgICAgICAgYnVmZmVyICovCiAgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSyB8fCBsZW4gPCAoc3RhdGUtPnNpemUgPDwgMSkpIHsKICAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCi0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICBpZiAoZ3pfZmV0Y2goc3RhdGUpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBubyBwcm9ncmVzcyB5ZXQgLS0gZ28gYmFjayB0byBtZW1jcHkoKSBhYm92ZSAqLworICAgICAgICAgICAgY29udGludWU7ICAgICAgIC8qIG5vIHByb2dyZXNzIHlldCAtLSBnbyBiYWNrIHRvIGNvcHkgYWJvdmUgKi8KICAgICAgICAgICAgIC8qIHRoZSBjb3B5IGFib3ZlIGFzc3VyZXMgdGhhdCB3ZSB3aWxsIGxlYXZlIHdpdGggc3BhY2UgaW4gdGhlCiAgICAgICAgICAgICAgICBvdXRwdXQgYnVmZmVyLCBhbGxvd2luZyBhdCBsZWFzdCBvbmUgZ3p1bmdldGMoKSB0byBzdWNjZWVkICovCiAgICAgICAgIH0KIAogICAgICAgICAvKiBsYXJnZSBsZW4gLS0gcmVhZCBkaXJlY3RseSBpbnRvIHVzZXIgYnVmZmVyICovCiAgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gQ09QWSkgeyAgICAgIC8qIHJlYWQgZGlyZWN0bHkgKi8KLSAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBidWYsIGxlbiwgJm4pID09IC0xKQorICAgICAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsICh1bnNpZ25lZCBjaGFyICopYnVmLCBsZW4sICZuKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBsYXJnZSBsZW4gLS0gZGVjb21wcmVzcyBkaXJlY3RseSBpbnRvIHVzZXIgYnVmZmVyICovCiAgICAgICAgIGVsc2UgeyAgLyogc3RhdGUtPmhvdyA9PSBHWklQICovCiAgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBsZW47Ci0gICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IGJ1ZjsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilidWY7CiAgICAgICAgICAgICBpZiAoZ3pfZGVjb21wKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBuID0gc3RhdGUtPmhhdmU7Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7CisgICAgICAgICAgICBuID0gc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgLyogdXBkYXRlIHByb2dyZXNzICovCiAgICAgICAgIGxlbiAtPSBuOwogICAgICAgICBidWYgPSAoY2hhciAqKWJ1ZiArIG47CiAgICAgICAgIGdvdCArPSBuOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgIH0gd2hpbGUgKGxlbik7CiAKICAgICAvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byB1c2VyIGJ1ZmZlciAod2lsbCBmaXQgaW4gaW50KSAqLwpAQCAtNDUwLDYgKzM3OSwxMSBAQAogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCisjaWZkZWYgWl9QUkVGSVhfU0VUCisjICB1bmRlZiB6X2d6Z2V0YworI2Vsc2UKKyMgIHVuZGVmIGd6Z2V0YworI2VuZGlmCiBpbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKQEAgLTQ2MiwxNSArMzk2LDE2IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHRyeSBvdXRwdXQgYnVmZmVyIChubyBuZWVkIHRvIGNoZWNrIGZvciBza2lwIHJlcXVlc3QpICovCi0gICAgaWYgKHN0YXRlLT5oYXZlKSB7Ci0gICAgICAgIHN0YXRlLT5oYXZlLS07Ci0gICAgICAgIHN0YXRlLT5wb3MrKzsKLSAgICAgICAgcmV0dXJuICooc3RhdGUtPm5leHQpKys7CisgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgc3RhdGUtPnguaGF2ZS0tOworICAgICAgICBzdGF0ZS0+eC5wb3MrKzsKKyAgICAgICAgcmV0dXJuICooc3RhdGUtPngubmV4dCkrKzsKICAgICB9CiAKICAgICAvKiBub3RoaW5nIHRoZXJlIC0tIHRyeSBnenJlYWQoKSAqLwpAQCAtNDc4LDYgKzQxMywxMiBAQAogICAgIHJldHVybiByZXQgPCAxID8gLTEgOiBidWZbMF07CiB9CiAKK2ludCBaRVhQT1JUIGd6Z2V0Y18oZmlsZSkKK2d6RmlsZSBmaWxlOworeworICAgIHJldHVybiBnemdldGMoZmlsZSk7Cit9CisKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUIGd6dW5nZXRjKGMsIGZpbGUpCiAgICAgaW50IGM7CkBAIC00OTAsOCArNDMxLDkgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogcHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLwpAQCAtNTA2LDMyICs0NDgsMzQgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogaWYgb3V0cHV0IGJ1ZmZlciBlbXB0eSwgcHV0IGJ5dGUgYXQgZW5kIChhbGxvd3MgbW9yZSBwdXNoaW5nKSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7Ci0gICAgICAgIHN0YXRlLT5oYXZlID0gMTsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpIC0gMTsKLSAgICAgICAgc3RhdGUtPm5leHRbMF0gPSBjOwotICAgICAgICBzdGF0ZS0+cG9zLS07CisgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCkgeworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMTsKKyAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQgKyAoc3RhdGUtPnNpemUgPDwgMSkgLSAxOworICAgICAgICBzdGF0ZS0+eC5uZXh0WzBdID0gYzsKKyAgICAgICAgc3RhdGUtPngucG9zLS07CisgICAgICAgIHN0YXRlLT5wYXN0ID0gMDsKICAgICAgICAgcmV0dXJuIGM7CiAgICAgfQogCiAgICAgLyogaWYgbm8gcm9vbSwgZ2l2ZSB1cCAobXVzdCBoYXZlIGFscmVhZHkgZG9uZSBhIGd6dW5nZXRjKCkpICovCi0gICAgaWYgKHN0YXRlLT5oYXZlID09IChzdGF0ZS0+c2l6ZSA8PCAxKSkgewotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJvdXQgb2Ygcm9vbSB0byBwdXNoIGNoYXJhY3RlcnMiKTsKKyAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAoc3RhdGUtPnNpemUgPDwgMSkpIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgIm91dCBvZiByb29tIHRvIHB1c2ggY2hhcmFjdGVycyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgLyogc2xpZGUgb3V0cHV0IGRhdGEgaWYgbmVlZGVkIGFuZCBpbnNlcnQgYnl0ZSBiZWZvcmUgZXhpc3RpbmcgZGF0YSAqLwotICAgIGlmIChzdGF0ZS0+bmV4dCA9PSBzdGF0ZS0+b3V0KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKnNyYyA9IHN0YXRlLT5vdXQgKyBzdGF0ZS0+aGF2ZTsKKyAgICBpZiAoc3RhdGUtPngubmV4dCA9PSBzdGF0ZS0+b3V0KSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNyYyA9IHN0YXRlLT5vdXQgKyBzdGF0ZS0+eC5oYXZlOwogICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKTsKICAgICAgICAgd2hpbGUgKHNyYyA+IHN0YXRlLT5vdXQpCiAgICAgICAgICAgICAqLS1kZXN0ID0gKi0tc3JjOwotICAgICAgICBzdGF0ZS0+bmV4dCA9IGRlc3Q7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBkZXN0OwogICAgIH0KLSAgICBzdGF0ZS0+aGF2ZSsrOwotICAgIHN0YXRlLT5uZXh0LS07Ci0gICAgc3RhdGUtPm5leHRbMF0gPSBjOwotICAgIHN0YXRlLT5wb3MtLTsKKyAgICBzdGF0ZS0+eC5oYXZlKys7CisgICAgc3RhdGUtPngubmV4dC0tOworICAgIHN0YXRlLT54Lm5leHRbMF0gPSBjOworICAgIHN0YXRlLT54LnBvcy0tOworICAgIHN0YXRlLT5wYXN0ID0gMDsKICAgICByZXR1cm4gYzsKIH0KIApAQCAtNTUxLDggKzQ5NSw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBwcm9jZXNzIGEgc2tpcCByZXF1ZXN0ICovCkBAIC01NjksMzIgKzUxNCwzMSBAQAogICAgIGxlZnQgPSAodW5zaWduZWQpbGVuIC0gMTsKICAgICBpZiAobGVmdCkgZG8gewogICAgICAgICAvKiBhc3N1cmUgdGhhdCBzb21ldGhpbmcgaXMgaW4gdGhlIG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgaWYgKHN0YXRlLT5oYXZlID09IDApIHsKLSAgICAgICAgICAgIGlmIChnel9tYWtlKHN0YXRlKSA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAvKiBlcnJvciAqLwotICAgICAgICAgICAgaWYgKHN0YXRlLT5oYXZlID09IDApIHsgICAgIC8qIGVuZCBvZiBmaWxlICovCi0gICAgICAgICAgICAgICAgaWYgKGJ1ZiA9PSBzdHIpICAgICAgICAgLyogZ290IGJ1cGt1cyAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBnb3Qgc29tZXRoaW5nIC0tIHJldHVybiBpdCAqLwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAwICYmIGd6X2ZldGNoKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBlcnJvciAqLworICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAwKSB7ICAgICAgIC8qIGVuZCBvZiBmaWxlICovCisgICAgICAgICAgICBzdGF0ZS0+cGFzdCA9IDE7ICAgICAgICAgICAgLyogcmVhZCBwYXN0IGVuZCAqLworICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiB3aGF0IHdlIGhhdmUgKi8KICAgICAgICAgfQogCiAgICAgICAgIC8qIGxvb2sgZm9yIGVuZC1vZi1saW5lIGluIGN1cnJlbnQgb3V0cHV0IGJ1ZmZlciAqLwotICAgICAgICBuID0gc3RhdGUtPmhhdmUgPiBsZWZ0ID8gbGVmdCA6IHN0YXRlLT5oYXZlOwotICAgICAgICBlb2wgPSBtZW1jaHIoc3RhdGUtPm5leHQsICdcbicsIG4pOworICAgICAgICBuID0gc3RhdGUtPnguaGF2ZSA+IGxlZnQgPyBsZWZ0IDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgZW9sID0gKHVuc2lnbmVkIGNoYXIgKiltZW1jaHIoc3RhdGUtPngubmV4dCwgJ1xuJywgbik7CiAgICAgICAgIGlmIChlb2wgIT0gTlVMTCkKLSAgICAgICAgICAgIG4gPSAodW5zaWduZWQpKGVvbCAtIHN0YXRlLT5uZXh0KSArIDE7CisgICAgICAgICAgICBuID0gKHVuc2lnbmVkKShlb2wgLSBzdGF0ZS0+eC5uZXh0KSArIDE7CiAKICAgICAgICAgLyogY29weSB0aHJvdWdoIGVuZC1vZi1saW5lLCBvciByZW1haW5kZXIgaWYgbm90IGZvdW5kICovCi0gICAgICAgIG1lbWNweShidWYsIHN0YXRlLT5uZXh0LCBuKTsKLSAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKLSAgICAgICAgc3RhdGUtPm5leHQgKz0gbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+eC5uZXh0LCBuKTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgICAgICBsZWZ0IC09IG47CiAgICAgICAgIGJ1ZiArPSBuOwogICAgIH0gd2hpbGUgKGxlZnQgJiYgZW9sID09IE5VTEwpOwogCi0gICAgLyogZm91bmQgZW5kLW9mLWxpbmUgb3Igb3V0IG9mIHNwYWNlIC0tIHRlcm1pbmF0ZSBzdHJpbmcgYW5kIHJldHVybiBpdCAqLworICAgIC8qIHJldHVybiB0ZXJtaW5hdGVkIHN0cmluZywgb3IgaWYgbm90aGluZywgZW5kIG9mIGZpbGUgKi8KKyAgICBpZiAoYnVmID09IHN0cikKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYnVmWzBdID0gMDsKICAgICByZXR1cm4gc3RyOwogfQpAQCAtNjEwLDE2ICs1NTQsMTIgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KICAgICAvKiBpZiB0aGUgc3RhdGUgaXMgbm90IGtub3duLCBidXQgd2UgY2FuIGZpbmQgb3V0LCB0aGVuIGRvIHNvICh0aGlzIGlzCiAgICAgICAgbWFpbmx5IGZvciByaWdodCBhZnRlciBhIGd6b3BlbigpIG9yIGd6ZG9wZW4oKSkgKi8KLSAgICBpZiAoc3RhdGUtPmhvdyA9PSBMT09LICYmIHN0YXRlLT5oYXZlID09IDApCi0gICAgICAgICh2b2lkKWd6X2hlYWQoc3RhdGUpOworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEICYmIHN0YXRlLT5ob3cgPT0gTE9PSyAmJiBzdGF0ZS0+eC5oYXZlID09IDApCisgICAgICAgICh2b2lkKWd6X2xvb2soc3RhdGUpOwogCi0gICAgLyogcmV0dXJuIDEgaWYgcmVhZGluZyBkaXJlY3QsIDAgaWYgZGVjb21wcmVzc2luZyBhIGd6aXAgc3RyZWFtICovCisgICAgLyogcmV0dXJuIDEgaWYgdHJhbnNwYXJlbnQsIDAgaWYgcHJvY2Vzc2luZyBhIGd6aXAgc3RyZWFtICovCiAgICAgcmV0dXJuIHN0YXRlLT5kaXJlY3Q7CiB9CiAKQEAgLTYyNyw3ICs1NjcsNyBAQAogaW50IFpFWFBPUlQgZ3pjbG9zZV9yKGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0LCBlcnI7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogCiAgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwpAQCAtNjQ1LDkgKzU4NSwxMCBAQAogICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOwogICAgICAgICBmcmVlKHN0YXRlLT5pbik7CiAgICAgfQorICAgIGVyciA9IHN0YXRlLT5lcnIgPT0gWl9CVUZfRVJST1IgPyBaX0JVRl9FUlJPUiA6IFpfT0s7CiAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogICAgIGZyZWUoc3RhdGUtPnBhdGgpOwogICAgIHJldCA9IGNsb3NlKHN0YXRlLT5mZCk7CiAgICAgZnJlZShzdGF0ZSk7Ci0gICAgcmV0dXJuIHJldCA/IFpfRVJSTk8gOiBaX09LOworICAgIHJldHVybiByZXQgPyBaX0VSUk5PIDogZXJyOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6d3JpdGUuYyBiL01vZHVsZXMvemxpYi9nendyaXRlLmMKaW5kZXggZThkZWZjNi4uYWE3NjdmYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6d3JpdGUuYworKysgYi9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogZ3p3cml0ZS5jIC0tIHpsaWIgZnVuY3Rpb25zIGZvciB3cml0aW5nIGd6aXAgZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE4LDQ0ICsxOCw1NSBAQAogICAgIGludCByZXQ7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIC8qIGFsbG9jYXRlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyAqLwotICAgIHN0YXRlLT5pbiA9IG1hbGxvYyhzdGF0ZS0+d2FudCk7Ci0gICAgc3RhdGUtPm91dCA9IG1hbGxvYyhzdGF0ZS0+d2FudCk7Ci0gICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMIHx8IHN0YXRlLT5vdXQgPT0gTlVMTCkgewotICAgICAgICBpZiAoc3RhdGUtPm91dCAhPSBOVUxMKQotICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKLSAgICAgICAgaWYgKHN0YXRlLT5pbiAhPSBOVUxMKQotICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgIC8qIGFsbG9jYXRlIGlucHV0IGJ1ZmZlciAqLworICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICBpZiAoc3RhdGUtPmluID09IE5VTEwpIHsKICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgLyogYWxsb2NhdGUgZGVmbGF0ZSBtZW1vcnksIHNldCB1cCBmb3IgZ3ppcCBjb21wcmVzc2lvbiAqLwotICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKLSAgICBzdHJtLT56ZnJlZSA9IFpfTlVMTDsKLSAgICBzdHJtLT5vcGFxdWUgPSBaX05VTEw7Ci0gICAgcmV0ID0gZGVmbGF0ZUluaXQyKHN0cm0sIHN0YXRlLT5sZXZlbCwgWl9ERUZMQVRFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgMTUgKyAxNiwgOCwgc3RhdGUtPnN0cmF0ZWd5KTsKLSAgICBpZiAocmV0ICE9IFpfT0spIHsKLSAgICAgICAgZnJlZShzdGF0ZS0+aW4pOwotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAvKiBvbmx5IG5lZWQgb3V0cHV0IGJ1ZmZlciBhbmQgZGVmbGF0ZSBzdGF0ZSBpZiBjb21wcmVzc2luZyAqLworICAgIGlmICghc3RhdGUtPmRpcmVjdCkgeworICAgICAgICAvKiBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyICovCisgICAgICAgIHN0YXRlLT5vdXQgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CisgICAgICAgIGlmIChzdGF0ZS0+b3V0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFsbG9jYXRlIGRlZmxhdGUgbWVtb3J5LCBzZXQgdXAgZm9yIGd6aXAgY29tcHJlc3Npb24gKi8KKyAgICAgICAgc3RybS0+emFsbG9jID0gWl9OVUxMOworICAgICAgICBzdHJtLT56ZnJlZSA9IFpfTlVMTDsKKyAgICAgICAgc3RybS0+b3BhcXVlID0gWl9OVUxMOworICAgICAgICByZXQgPSBkZWZsYXRlSW5pdDIoc3RybSwgc3RhdGUtPmxldmVsLCBaX0RFRkxBVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1dCSVRTICsgMTYsIERFRl9NRU1fTEVWRUwsIHN0YXRlLT5zdHJhdGVneSk7CisgICAgICAgIGlmIChyZXQgIT0gWl9PSykgeworICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qIG1hcmsgc3RhdGUgYXMgaW5pdGlhbGl6ZWQgKi8KICAgICBzdGF0ZS0+c2l6ZSA9IHN0YXRlLT53YW50OwogCi0gICAgLyogaW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgKi8KLSAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKLSAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7Ci0gICAgc3RhdGUtPm5leHQgPSBzdHJtLT5uZXh0X291dDsKKyAgICAvKiBpbml0aWFsaXplIHdyaXRlIGJ1ZmZlciBpZiBjb21wcmVzc2luZyAqLworICAgIGlmICghc3RhdGUtPmRpcmVjdCkgeworICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKKyAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCiAvKiBDb21wcmVzcyB3aGF0ZXZlciBpcyBhdCBhdmFpbF9pbiBhbmQgbmV4dF9pbiBhbmQgd3JpdGUgdG8gdGhlIG91dHB1dCBmaWxlLgogICAgUmV0dXJuIC0xIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdyaXRpbmcgdG8gdGhlIG91dHB1dCBmaWxlLCBvdGhlcndpc2UgMC4KICAgIGZsdXNoIGlzIGFzc3VtZWQgdG8gYmUgYSB2YWxpZCBkZWZsYXRlKCkgZmx1c2ggdmFsdWUuICBJZiBmbHVzaCBpcyBaX0ZJTklTSCwKLSAgIHRoZW4gdGhlIGRlZmxhdGUoKSBzdGF0ZSBpcyByZXNldCB0byBzdGFydCBhIG5ldyBnemlwIHN0cmVhbS4gKi8KKyAgIHRoZW4gdGhlIGRlZmxhdGUoKSBzdGF0ZSBpcyByZXNldCB0byBzdGFydCBhIG5ldyBnemlwIHN0cmVhbS4gIElmIGd6LT5kaXJlY3QKKyAgIGlzIHRydWUsIHRoZW4gc2ltcGx5IHdyaXRlIHRvIHRoZSBvdXRwdXQgZmlsZSB3aXRob3V0IGNvbXByZXNzaW5nLCBhbmQKKyAgIGlnbm9yZSBmbHVzaC4gKi8KIGxvY2FsIGludCBnel9jb21wKHN0YXRlLCBmbHVzaCkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgaW50IGZsdXNoOwpAQCAtNjgsNiArNzksMTcgQEAKICAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgLyogd3JpdGUgZGlyZWN0bHkgaWYgcmVxdWVzdGVkICovCisgICAgaWYgKHN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdHJtLT5uZXh0X2luLCBzdHJtLT5hdmFpbF9pbik7CisgICAgICAgIGlmIChnb3QgPCAwIHx8ICh1bnNpZ25lZClnb3QgIT0gc3RybS0+YXZhaWxfaW4pIHsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICAvKiBydW4gZGVmbGF0ZSgpIG9uIHByb3ZpZGVkIGlucHV0IHVudGlsIGl0IHByb2R1Y2VzIG5vIG1vcmUgb3V0cHV0ICovCiAgICAgcmV0ID0gWl9PSzsKICAgICBkbyB7CkBAIC03NSw4ICs5Nyw4IEBACiAgICAgICAgICAgIGRvaW5nIFpfRklOSVNIIHRoZW4gZG9uJ3Qgd3JpdGUgdW50aWwgd2UgZ2V0IHRvIFpfU1RSRUFNX0VORCAqLwogICAgICAgICBpZiAoc3RybS0+YXZhaWxfb3V0ID09IDAgfHwgKGZsdXNoICE9IFpfTk9fRkxVU0ggJiYKICAgICAgICAgICAgIChmbHVzaCAhPSBaX0ZJTklTSCB8fCByZXQgPT0gWl9TVFJFQU1fRU5EKSkpIHsKLSAgICAgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPm5leHQpOwotICAgICAgICAgICAgaWYgKGhhdmUgJiYgKChnb3QgPSB3cml0ZShzdGF0ZS0+ZmQsIHN0YXRlLT5uZXh0LCBoYXZlKSkgPCAwIHx8CisgICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKShzdHJtLT5uZXh0X291dCAtIHN0YXRlLT54Lm5leHQpOworICAgICAgICAgICAgaWYgKGhhdmUgJiYgKChnb3QgPSB3cml0ZShzdGF0ZS0+ZmQsIHN0YXRlLT54Lm5leHQsIGhhdmUpKSA8IDAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpZ290ICE9IGhhdmUpKSB7CiAgICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfRVJSTk8sIHpzdHJlcnJvcigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC04NSw3ICsxMDcsNyBAQAogICAgICAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplOwogICAgICAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBjb21wcmVzcyAqLwpAQCAtMTMxLDcgKzE1Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBuOwogICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGxlbiAtPSBuOwpAQCAtMTQ2LDcgKzE2OCw2IEBACiAgICAgdW5zaWduZWQgbGVuOwogewogICAgIHVuc2lnbmVkIHB1dCA9IGxlbjsKLSAgICB1bnNpZ25lZCBuOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKICAgICB6X3N0cmVhbXAgc3RybTsKIApAQCAtMTYzLDcgKzE4NCw3IEBACiAgICAgLyogc2luY2UgYW4gaW50IGlzIHJldHVybmVkLCBtYWtlIHN1cmUgbGVuIGZpdHMgaW4gb25lLCBvdGhlcndpc2UgcmV0dXJuCiAgICAgICAgd2l0aCBhbiBlcnJvciAodGhpcyBhdm9pZHMgdGhlIGZsYXcgaW4gdGhlIGludGVyZmFjZSkgKi8KICAgICBpZiAoKGludClsZW4gPCAwKSB7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTg2LDE2ICsyMDcsMTkgQEAKICAgICBpZiAobGVuIDwgc3RhdGUtPnNpemUpIHsKICAgICAgICAgLyogY29weSB0byBpbnB1dCBidWZmZXIsIGNvbXByZXNzIHdoZW4gZnVsbCAqLwogICAgICAgICBkbyB7CisgICAgICAgICAgICB1bnNpZ25lZCBoYXZlLCBjb3B5OworCiAgICAgICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKICAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgICAgICAgICAgbiA9IHN0YXRlLT5zaXplIC0gc3RybS0+YXZhaWxfaW47Ci0gICAgICAgICAgICBpZiAobiA+IGxlbikKLSAgICAgICAgICAgICAgICBuID0gbGVuOwotICAgICAgICAgICAgbWVtY3B5KHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbiwgYnVmLCBuKTsKLSAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luICs9IG47Ci0gICAgICAgICAgICBzdGF0ZS0+cG9zICs9IG47Ci0gICAgICAgICAgICBidWYgPSAoY2hhciAqKWJ1ZiArIG47Ci0gICAgICAgICAgICBsZW4gLT0gbjsKKyAgICAgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKChzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4pIC0gc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+c2l6ZSAtIGhhdmU7CisgICAgICAgICAgICBpZiAoY29weSA+IGxlbikKKyAgICAgICAgICAgICAgICBjb3B5ID0gbGVuOworICAgICAgICAgICAgbWVtY3B5KHN0YXRlLT5pbiArIGhhdmUsIGJ1ZiwgY29weSk7CisgICAgICAgICAgICBzdHJtLT5hdmFpbF9pbiArPSBjb3B5OworICAgICAgICAgICAgc3RhdGUtPngucG9zICs9IGNvcHk7CisgICAgICAgICAgICBidWYgPSAoY29uc3QgY2hhciAqKWJ1ZiArIGNvcHk7CisgICAgICAgICAgICBsZW4gLT0gY29weTsKICAgICAgICAgICAgIGlmIChsZW4gJiYgZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0gd2hpbGUgKGxlbik7CkBAIC0yMDcsOCArMjMxLDggQEAKIAogICAgICAgICAvKiBkaXJlY3RseSBjb21wcmVzcyB1c2VyIGJ1ZmZlciB0byBmaWxlICovCiAgICAgICAgIHN0cm0tPmF2YWlsX2luID0gbGVuOwotICAgICAgICBzdHJtLT5uZXh0X2luID0gKHZvaWRwKWJ1ZjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBsZW47CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKWJ1ZjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IGxlbjsKICAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjIyLDYgKzI0Niw3IEBACiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgaW50IGM7CiB7CisgICAgdW5zaWduZWQgaGF2ZTsKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxXTsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgel9zdHJlYW1wIHN0cm07CkBAIC0yNDUsMTkgKzI3MCwyMyBAQAogCiAgICAgLyogdHJ5IHdyaXRpbmcgdG8gaW5wdXQgYnVmZmVyIGZvciBzcGVlZCAoc3RhdGUtPnNpemUgPT0gMCBpZiBidWZmZXIgbm90CiAgICAgICAgaW5pdGlhbGl6ZWQpICovCi0gICAgaWYgKHN0cm0tPmF2YWlsX2luIDwgc3RhdGUtPnNpemUpIHsKKyAgICBpZiAoc3RhdGUtPnNpemUpIHsKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgICAgICBzdHJtLT5uZXh0X2luW3N0cm0tPmF2YWlsX2luKytdID0gYzsKLSAgICAgICAgc3RhdGUtPnBvcysrOwotICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoKHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbikgLSBzdGF0ZS0+aW4pOworICAgICAgICBpZiAoaGF2ZSA8IHN0YXRlLT5zaXplKSB7CisgICAgICAgICAgICBzdGF0ZS0+aW5baGF2ZV0gPSBjOworICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4rKzsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcysrOworICAgICAgICAgICAgcmV0dXJuIGMgJiAweGZmOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyogbm8gcm9vbSBpbiBidWZmZXIgb3Igbm90IGluaXRpYWxpemVkLCB1c2UgZ3pfd3JpdGUoKSAqLwogICAgIGJ1ZlswXSA9IGM7CiAgICAgaWYgKGd6d3JpdGUoZmlsZSwgYnVmLCAxKSAhPSAxKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIGM7CisgICAgcmV0dXJuIGMgJiAweGZmOwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC0yNzQsMTYgKzMwMywxNSBAQAogICAgIHJldHVybiByZXQgPT0gMCAmJiBsZW4gIT0gMCA/IC0xIDogcmV0OwogfQogCi0jaWZkZWYgU1REQworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KLWludCBaRVhQT1JUVkEgZ3pwcmludGYgKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK2ludCBaRVhQT1JUVkEgZ3p2cHJpbnRmKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpCiB7CiAgICAgaW50IHNpemUsIGxlbjsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgel9zdHJlYW1wIHN0cm07Ci0gICAgdmFfbGlzdCB2YTsKIAogICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KICAgICBpZiAoZmlsZSA9PSBOVUxMKQpAQCAtMzEzLDI1ICszNDEsMjAgQEAKICAgICAvKiBkbyB0aGUgcHJpbnRmKCkgaW50byB0aGUgaW5wdXQgYnVmZmVyLCBwdXQgbGVuZ3RoIGluIGxlbiAqLwogICAgIHNpemUgPSAoaW50KShzdGF0ZS0+c2l6ZSk7CiAgICAgc3RhdGUtPmluW3NpemUgLSAxXSA9IDA7Ci0gICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7CiAjaWZkZWYgTk9fdnNucHJpbnRmCiAjICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICh2b2lkKXZzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKKyAgICAodm9pZCl2c3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIHZhKTsKICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemU7IGxlbisrKQogICAgICAgICBpZiAoc3RhdGUtPmluW2xlbl0gPT0gMCkgYnJlYWs7CiAjICBlbHNlCi0gICAgbGVuID0gdnNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOworICAgIGxlbiA9IHZzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgdmEpOwogIyAgZW5kaWYKICNlbHNlCiAjICBpZmRlZiBIQVNfdnNucHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c25wcmludGYoc3RhdGUtPmluLCBzaXplLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotICAgIGxlbiA9IHN0cmxlbihzdGF0ZS0+aW4pOworICAgICh2b2lkKXZzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIHZhKTsKKyAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKikoc3RhdGUtPmluKSk7CiAjICBlbHNlCiAgICAgbGVuID0gdnNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7CiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTM0MiwxMSArMzY1LDIyIEBACiAgICAgLyogdXBkYXRlIGJ1ZmZlciBhbmQgcG9zaXRpb24sIGRlZmVyIGNvbXByZXNzaW9uIHVudGlsIG5lZWRlZCAqLwogICAgIHN0cm0tPmF2YWlsX2luID0gKHVuc2lnbmVkKWxlbjsKICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgcmV0dXJuIGxlbjsKIH0KIAotI2Vsc2UgLyogIVNUREMgKi8KK2ludCBaRVhQT1JUVkEgZ3pwcmludGYoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgdmE7CisgICAgaW50IHJldDsKKworICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOworICAgIHJldCA9IGd6dnByaW50ZihmaWxlLCBmb3JtYXQsIHZhKTsKKyAgICB2YV9lbmQodmEpOworICAgIHJldHVybiByZXQ7Cit9CisKKyNlbHNlIC8qICFTVERDICYmICFaX0hBVkVfU1REQVJHX0ggKi8KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwogaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZmlsZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCkBAIC0zNjYsNiArNDAwLDEwIEBACiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAgICAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCisgICAgLyogY2hlY2sgdGhhdCBjYW4gcmVhbGx5IHBhc3MgcG9pbnRlciBpbiBpbnRzICovCisgICAgaWYgKHNpemVvZihpbnQpICE9IHNpemVvZih2b2lkICopKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCiAgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zOTAsMjIgKzQyOCwyMyBAQAogICAgIHN0YXRlLT5pbltzaXplIC0gMV0gPSAwOwogI2lmZGVmIE5PX3NucHJpbnRmCiAjICBpZmRlZiBIQVNfc3ByaW50Zl92b2lkCi0gICAgc3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAorICAgIHNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCiAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwogICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZTsgbGVuKyspCiAgICAgICAgIGlmIChzdGF0ZS0+aW5bbGVuXSA9PSAwKSBicmVhazsKICMgIGVsc2UKLSAgICBsZW4gPSBzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKKyAgICBsZW4gPSBzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAorICAgICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKICMgIGVuZGlmCiAjZWxzZQogIyAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAgICBzbnByaW50ZihzdGF0ZS0+aW4sIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAorICAgIHNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAogICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0gICAgbGVuID0gc3RybGVuKHN0YXRlLT5pbik7CisgICAgbGVuID0gc3RybGVuKChjaGFyICopKHN0YXRlLT5pbikpOwogIyAgZWxzZQotICAgIGxlbiA9IHNucHJpbnRmKHN0YXRlLT5pbiwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisgICAgbGVuID0gc25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LAorICAgICAgICAgICAgICAgICAgIGE3LCBhOCwgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsCisgICAgICAgICAgICAgICAgICAgYTE5LCBhMjApOwogIyAgZW5kaWYKICNlbmRpZgogCkBAIC00MTYsNyArNDU1LDcgQEAKICAgICAvKiB1cGRhdGUgYnVmZmVyIGFuZCBwb3NpdGlvbiwgZGVmZXIgY29tcHJlc3Npb24gdW50aWwgbmVlZGVkICovCiAgICAgc3RybS0+YXZhaWxfaW4gPSAodW5zaWduZWQpbGVuOwogICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgc3RhdGUtPnBvcyArPSBsZW47CisgICAgc3RhdGUtPngucG9zICs9IGxlbjsKICAgICByZXR1cm4gbGVuOwogfQogCkBAIC01MDAsNyArNTM5LDcgQEAKIGludCBaRVhQT1JUIGd6Y2xvc2VfdyhmaWxlKQogICAgIGd6RmlsZSBmaWxlOwogewotICAgIGludCByZXQgPSAwOworICAgIGludCByZXQgPSBaX09LOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIAogICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KQEAgLTUxNSwxNyArNTU0LDI0IEBACiAgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLwogICAgIGlmIChzdGF0ZS0+c2VlaykgewogICAgICAgICBzdGF0ZS0+c2VlayA9IDA7Ci0gICAgICAgIHJldCArPSBnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCk7CisgICAgICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXQgPSBzdGF0ZS0+ZXJyOwogICAgIH0KIAogICAgIC8qIGZsdXNoLCBmcmVlIG1lbW9yeSwgYW5kIGNsb3NlIGZpbGUgKi8KLSAgICByZXQgKz0gZ3pfY29tcChzdGF0ZSwgWl9GSU5JU0gpOwotICAgICh2b2lkKWRlZmxhdGVFbmQoJihzdGF0ZS0+c3RybSkpOwotICAgIGZyZWUoc3RhdGUtPm91dCk7Ci0gICAgZnJlZShzdGF0ZS0+aW4pOworICAgIGlmIChnel9jb21wKHN0YXRlLCBaX0ZJTklTSCkgPT0gLTEpCisgICAgICAgIHJldCA9IHN0YXRlLT5lcnI7CisgICAgaWYgKHN0YXRlLT5zaXplKSB7CisgICAgICAgIGlmICghc3RhdGUtPmRpcmVjdCkgeworICAgICAgICAgICAgKHZvaWQpZGVmbGF0ZUVuZCgmKHN0YXRlLT5zdHJtKSk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOworICAgICAgICB9CisgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICB9CiAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogICAgIGZyZWUoc3RhdGUtPnBhdGgpOwotICAgIHJldCArPSBjbG9zZShzdGF0ZS0+ZmQpOworICAgIGlmIChjbG9zZShzdGF0ZS0+ZmQpID09IC0xKQorICAgICAgICByZXQgPSBaX0VSUk5POwogICAgIGZyZWUoc3RhdGUpOwotICAgIHJldHVybiByZXQgPyBaX0VSUk5PIDogWl9PSzsKKyAgICByZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmJhY2suYyBiL01vZHVsZXMvemxpYi9pbmZiYWNrLmMKaW5kZXggYWYzYThjOS4uZjM4MzNjMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmJhY2suYworKysgYi9Nb2R1bGVzL3psaWIvaW5mYmFjay5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mYmFjay5jIC0tIGluZmxhdGUgdXNpbmcgYSBjYWxsLWJhY2sgaW50ZXJmYWNlCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOSBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMSBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNDIsMTAgKzQyLDE5IEBACiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyNlbmRpZgogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKVpBTExPQyhzdHJtLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CkBAIC0yNDYsNyArMjU1LDcgQEAKIHZvaWQgRkFSICpvdXRfZGVzYzsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGhhdmUsIGxlZnQ7ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsgICAgICAgICAvKiBiaXQgYnVmZmVyICovCkBAIC0zOTQsNyArNDAzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsIDwgMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgTkVFREJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUrK10gPSBoZXJlLnZhbDsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jIGIvTW9kdWxlcy96bGliL2luZmZhc3QuYwppbmRleCAyZjFkNjBiLi5iZGE1OWNlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZmYXN0LmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZmYXN0LmMgLS0gZmFzdCBkZWNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDgsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDgsIDIwMTAsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTY5LDggKzY5LDggQEAKIHVuc2lnbmVkIHN0YXJ0OyAgICAgICAgIC8qIGluZmxhdGUoKSdzIHN0YXJ0aW5nIHZhbHVlIGZvciBzdHJtLT5hdmFpbF9vdXQgKi8KIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICppbjsgICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X2luICovCi0gICAgdW5zaWduZWQgY2hhciBGQVIgKmxhc3Q7ICAgIC8qIHdoaWxlIGluIDwgbGFzdCwgZW5vdWdoIGlucHV0IGF2YWlsYWJsZSAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmluOyAgICAgIC8qIGxvY2FsIHN0cm0tPm5leHRfaW4gKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpsYXN0OyAgICAvKiBoYXZlIGVub3VnaCBpbnB1dCB3aGlsZSBpbiA8IGxhc3QgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqb3V0OyAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9vdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqYmVnOyAgICAgLyogaW5mbGF0ZSgpJ3MgaW5pdGlhbCBzdHJtLT5uZXh0X291dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICplbmQ7ICAgICAvKiB3aGlsZSBvdXQgPCBlbmQsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oIGIvTW9kdWxlcy96bGliL2luZmZpeGVkLmgKaW5kZXggNzVlZDRiNS4uZDYyODMyNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmZpeGVkLmgKKysrIGIvTW9kdWxlcy96bGliL2luZmZpeGVkLmgKQEAgLTIsOSArMiw5IEBACiAgICAgICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgbWFrZWZpeGVkKCkuCiAgICAgICovCiAKLSAgICAvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdAotICAgICAgIGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGFuZAotICAgICAgIGlzIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KKyAgICAvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLgorICAgICAgIEl0IGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbGlicmFyeSBhbmQgaXMKKyAgICAgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCiAgICAgICovCiAKICAgICBzdGF0aWMgY29uc3QgY29kZSBsZW5maXhbNTEyXSA9IHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZsYXRlLmMgYi9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jCmluZGV4IGE4NDMxYWIuLjg3MGY4OWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZsYXRlLmMKKysrIGIvTW9kdWxlcy96bGliL2luZmxhdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmxhdGUuYyAtLSB6bGliIGRlY29tcHJlc3Npb24KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC05MywxNCArOTMsMTUgQEAKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogbG9jYWwgdm9pZCBmaXhlZHRhYmxlcyBPRigoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZSkpOwotbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyBPRigoel9zdHJlYW1wIHN0cm0sIHVuc2lnbmVkIG91dCkpOworbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyBPRigoel9zdHJlYW1wIHN0cm0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb3B5KSk7CiAjaWZkZWYgQlVJTERGSVhFRAogICAgdm9pZCBtYWtlZml4ZWQgT0YoKHZvaWQpKTsKICNlbmRpZgotbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaCBPRigodW5zaWduZWQgRkFSICpoYXZlLCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmLAorbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaCBPRigodW5zaWduZWQgRkFSICpoYXZlLCBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuKSk7CiAKLWludCBaRVhQT1JUIGluZmxhdGVSZXNldChzdHJtKQoraW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0S2VlcChzdHJtKQogel9zdHJlYW1wIHN0cm07CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKQEAgLTEwOSwxNSArMTEwLDEzIEBACiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CiAgICAgc3RybS0+dG90YWxfaW4gPSBzdHJtLT50b3RhbF9vdXQgPSBzdGF0ZS0+dG90YWwgPSAwOwogICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsKLSAgICBzdHJtLT5hZGxlciA9IDE7ICAgICAgICAvKiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2YSB0ZXN0IHN1aXRlICovCisgICAgaWYgKHN0YXRlLT53cmFwKSAgICAgICAgLyogdG8gc3VwcG9ydCBpbGwtY29uY2VpdmVkIEphdmEgdGVzdCBzdWl0ZSAqLworICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT53cmFwICYgMTsKICAgICBzdGF0ZS0+bW9kZSA9IEhFQUQ7CiAgICAgc3RhdGUtPmxhc3QgPSAwOwogICAgIHN0YXRlLT5oYXZlZGljdCA9IDA7CiAgICAgc3RhdGUtPmRtYXggPSAzMjc2OFU7CiAgICAgc3RhdGUtPmhlYWQgPSBaX05VTEw7Ci0gICAgc3RhdGUtPndzaXplID0gMDsKLSAgICBzdGF0ZS0+d2hhdmUgPSAwOwotICAgIHN0YXRlLT53bmV4dCA9IDA7CiAgICAgc3RhdGUtPmhvbGQgPSAwOwogICAgIHN0YXRlLT5iaXRzID0gMDsKICAgICBzdGF0ZS0+bGVuY29kZSA9IHN0YXRlLT5kaXN0Y29kZSA9IHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwpAQCAtMTI3LDYgKzEyNiwxOSBAQAogICAgIHJldHVybiBaX09LOwogfQogCitpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQoc3RybSkKK3pfc3RyZWFtcCBzdHJtOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgc3RhdGUtPndzaXplID0gMDsKKyAgICBzdGF0ZS0+d2hhdmUgPSAwOworICAgIHN0YXRlLT53bmV4dCA9IDA7CisgICAgcmV0dXJuIGluZmxhdGVSZXNldEtlZXAoc3RybSk7Cit9CisKIGludCBaRVhQT1JUIGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cykKIHpfc3RyZWFtcCBzdHJtOwogaW50IHdpbmRvd0JpdHM7CkBAIC0xODAsMTAgKzE5MiwxOSBAQAogICAgIGlmIChzdHJtID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovCiAgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7CisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCiAgICAgICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7CiAgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyNlbmRpZgogICAgIH0KLSAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKSBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgICAgICBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyNlbmRpZgogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKQogICAgICAgICAgICAgWkFMTE9DKHN0cm0sIDEsIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKQEAgLTMyMSw4ICszNDIsOCBAQAogICAgIGxvdyA9IDA7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAoKGxvdyAlIDcpID09IDApIHByaW50ZigiXG4gICAgICAgICIpOwotICAgICAgICBwcmludGYoInsldSwldSwlZH0iLCBzdGF0ZS5sZW5jb2RlW2xvd10ub3AsIHN0YXRlLmxlbmNvZGVbbG93XS5iaXRzLAotICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZVtsb3ddLnZhbCk7CisgICAgICAgIHByaW50ZigieyV1LCV1LCVkfSIsIChsb3cgJiAxMjcpID09IDk5ID8gNjQgOiBzdGF0ZS5sZW5jb2RlW2xvd10ub3AsCisgICAgICAgICAgICAgICBzdGF0ZS5sZW5jb2RlW2xvd10uYml0cywgc3RhdGUubGVuY29kZVtsb3ddLnZhbCk7CiAgICAgICAgIGlmICgrK2xvdyA9PSBzaXplKSBicmVhazsKICAgICAgICAgcHV0Y2hhcignLCcpOwogICAgIH0KQEAgLTM1NSwxMiArMzc2LDEzIEBACiAgICBvdXRwdXQgd2lsbCBmYWxsIGluIHRoZSBvdXRwdXQgZGF0YSwgbWFraW5nIG1hdGNoIGNvcGllcyBzaW1wbGVyIGFuZCBmYXN0ZXIuCiAgICBUaGUgYWR2YW50YWdlIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIHByb2Nlc3NvcidzIGRhdGEgY2FjaGVzLgogICovCi1sb2NhbCBpbnQgdXBkYXRld2luZG93KHN0cm0sIG91dCkKK2xvY2FsIGludCB1cGRhdGV3aW5kb3coc3RybSwgZW5kLCBjb3B5KQogel9zdHJlYW1wIHN0cm07Ci11bnNpZ25lZCBvdXQ7Citjb25zdCBCeXRlZiAqZW5kOwordW5zaWduZWQgY29weTsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNvcHksIGRpc3Q7CisgICAgdW5zaWduZWQgZGlzdDsKIAogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogCkBAIC0zODAsMTkgKzQwMiwxOCBAQAogICAgIH0KIAogICAgIC8qIGNvcHkgc3RhdGUtPndzaXplIG9yIGxlc3Mgb3V0cHV0IGJ5dGVzIGludG8gdGhlIGNpcmN1bGFyIHdpbmRvdyAqLwotICAgIGNvcHkgPSBvdXQgLSBzdHJtLT5hdmFpbF9vdXQ7CiAgICAgaWYgKGNvcHkgPj0gc3RhdGUtPndzaXplKSB7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+d3NpemUsIHN0YXRlLT53c2l6ZSk7CisgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gc3RhdGUtPndzaXplLCBzdGF0ZS0+d3NpemUpOwogICAgICAgICBzdGF0ZS0+d25leHQgPSAwOwogICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBkaXN0ID0gc3RhdGUtPndzaXplIC0gc3RhdGUtPnduZXh0OwogICAgICAgICBpZiAoZGlzdCA+IGNvcHkpIGRpc3QgPSBjb3B5OwotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsIHN0cm0tPm5leHRfb3V0IC0gY29weSwgZGlzdCk7CisgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgZW5kIC0gY29weSwgZGlzdCk7CiAgICAgICAgIGNvcHkgLT0gZGlzdDsKICAgICAgICAgaWYgKGNvcHkpIHsKLSAgICAgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgc3RybS0+bmV4dF9vdXQgLSBjb3B5LCBjb3B5KTsKKyAgICAgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gY29weSwgY29weSk7CiAgICAgICAgICAgICBzdGF0ZS0+d25leHQgPSBjb3B5OwogICAgICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwogICAgICAgICB9CkBAIC00OTksMTEgKzUyMCw2IEBACiAgICAgICAgIGJpdHMgLT0gYml0cyAmIDc7IFwKICAgICB9IHdoaWxlICgwKQogCi0vKiBSZXZlcnNlIHRoZSBieXRlcyBpbiBhIDMyLWJpdCB2YWx1ZSAqLwotI2RlZmluZSBSRVZFUlNFKHEpIFwKLSAgICAoKCgocSkgPj4gMjQpICYgMHhmZikgKyAoKChxKSA+PiA4KSAmIDB4ZmYwMCkgKyBcCi0gICAgICgoKHEpICYgMHhmZjAwKSA8PCA4KSArICgoKHEpICYgMHhmZikgPDwgMjQpKQotCiAvKgogICAgaW5mbGF0ZSgpIHVzZXMgYSBzdGF0ZSBtYWNoaW5lIHRvIHByb2Nlc3MgYXMgbXVjaCBpbnB1dCBkYXRhIGFuZCBnZW5lcmF0ZSBhcwogICAgbXVjaCBvdXRwdXQgZGF0YSBhcyBwb3NzaWJsZSBiZWZvcmUgcmV0dXJuaW5nLiAgVGhlIHN0YXRlIG1hY2hpbmUgaXMKQEAgLTU5MSw3ICs2MDcsNyBAQAogaW50IGZsdXNoOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKnB1dDsgICAgIC8qIG5leHQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgaGF2ZSwgbGVmdDsgICAgICAgIC8qIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgbG9uZyBob2xkOyAgICAgICAgIC8qIGJpdCBidWZmZXIgKi8KQEAgLTc5Nyw3ICs4MTMsNyBAQAogI2VuZGlmCiAgICAgICAgIGNhc2UgRElDVElEOgogICAgICAgICAgICAgTkVFREJJVFMoMzIpOwotICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+Y2hlY2sgPSBSRVZFUlNFKGhvbGQpOworICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+Y2hlY2sgPSBaU1dBUDMyKGhvbGQpOwogICAgICAgICAgICAgSU5JVEJJVFMoKTsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gRElDVDsKICAgICAgICAgY2FzZSBESUNUOgpAQCAtOTA1LDcgKzkyMSw3IEBACiAgICAgICAgICAgICB3aGlsZSAoc3RhdGUtPmhhdmUgPCAxOSkKICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tvcmRlcltzdGF0ZS0+aGF2ZSsrXV0gPSAwOwogICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDc7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKENPREVTLCBzdGF0ZS0+bGVucywgMTksICYoc3RhdGUtPm5leHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHN0YXRlLT5sZW5iaXRzKSwgc3RhdGUtPndvcmspOwpAQCAtOTI1LDcgKzk0MSw2IEBACiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0gaGVyZS52YWw7CiAgICAgICAgICAgICAgICAgfQpAQCAtOTgwLDcgKzk5NSw3IEBACiAgICAgICAgICAgICAgICB2YWx1ZXMgaGVyZSAoOSBhbmQgNikgd2l0aG91dCByZWFkaW5nIHRoZSBjb21tZW50cyBpbiBpbmZ0cmVlcy5oCiAgICAgICAgICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9VR0ggY29uc3RhbnRzLCB3aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovCiAgICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvbnN0IGNvZGUgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5sZW5iaXRzID0gOTsKICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoTEVOUywgc3RhdGUtPmxlbnMsIHN0YXRlLT5ubGVuLCAmKHN0YXRlLT5uZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKQEAgLTk4OSw3ICsxMDA0LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5kaXN0Y29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+ZGlzdGNvZGUgPSAoY29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmRpc3RiaXRzID0gNjsKICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLT5sZW5zICsgc3RhdGUtPm5sZW4sIHN0YXRlLT5uZGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHN0YXRlLT5uZXh0KSwgJihzdGF0ZS0+ZGlzdGJpdHMpLCBzdGF0ZS0+d29yayk7CkBAIC0xMTcwLDcgKzExODUsNyBAQAogI2lmZGVmIEdVTlpJUAogICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmZsYWdzID8gaG9sZCA6CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgIFJFVkVSU0UoaG9sZCkpICE9IHN0YXRlLT5jaGVjaykgeworICAgICAgICAgICAgICAgICAgICAgWlNXQVAzMihob2xkKSkgIT0gc3RhdGUtPmNoZWNrKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImluY29ycmVjdCBkYXRhIGNoZWNrIjsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIxNCw4ICsxMjI5LDkgQEAKICAgICAgKi8KICAgaW5mX2xlYXZlOgogICAgIFJFU1RPUkUoKTsKLSAgICBpZiAoc3RhdGUtPndzaXplIHx8IChzdGF0ZS0+bW9kZSA8IENIRUNLICYmIG91dCAhPSBzdHJtLT5hdmFpbF9vdXQpKQotICAgICAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIG91dCkpIHsKKyAgICBpZiAoc3RhdGUtPndzaXplIHx8IChvdXQgIT0gc3RybS0+YXZhaWxfb3V0ICYmIHN0YXRlLT5tb2RlIDwgQkFEICYmCisgICAgICAgICAgICAoc3RhdGUtPm1vZGUgPCBDSEVDSyB8fCBmbHVzaCAhPSBaX0ZJTklTSCkpKQorICAgICAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0tPm5leHRfb3V0LCBvdXQgLSBzdHJtLT5hdmFpbF9vdXQpKSB7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IE1FTTsKICAgICAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICAgICAgfQpAQCAtMTI0OSwxMyArMTI2NSwzNyBAQAogICAgIHJldHVybiBaX09LOwogfQogCitpbnQgWkVYUE9SVCBpbmZsYXRlR2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQorel9zdHJlYW1wIHN0cm07CitCeXRlZiAqZGljdGlvbmFyeTsKK3VJbnQgKmRpY3RMZW5ndGg7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIC8qIGNoZWNrIHN0YXRlICovCisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworCisgICAgLyogY29weSBkaWN0aW9uYXJ5ICovCisgICAgaWYgKHN0YXRlLT53aGF2ZSAmJiBkaWN0aW9uYXJ5ICE9IFpfTlVMTCkgeworICAgICAgICB6bWVtY3B5KGRpY3Rpb25hcnksIHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsCisgICAgICAgICAgICAgICAgc3RhdGUtPndoYXZlIC0gc3RhdGUtPnduZXh0KTsKKyAgICAgICAgem1lbWNweShkaWN0aW9uYXJ5ICsgc3RhdGUtPndoYXZlIC0gc3RhdGUtPnduZXh0LAorICAgICAgICAgICAgICAgIHN0YXRlLT53aW5kb3csIHN0YXRlLT53bmV4dCk7CisgICAgfQorICAgIGlmIChkaWN0TGVuZ3RoICE9IFpfTlVMTCkKKyAgICAgICAgKmRpY3RMZW5ndGggPSBzdGF0ZS0+d2hhdmU7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKIGludCBaRVhQT1JUIGluZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpCiB6X3N0cmVhbXAgc3RybTsKIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5OwogdUludCBkaWN0TGVuZ3RoOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgbG9uZyBpZDsKKyAgICB1bnNpZ25lZCBsb25nIGRpY3RpZDsKKyAgICBpbnQgcmV0OwogCiAgICAgLyogY2hlY2sgc3RhdGUgKi8KICAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CkBAIC0xMjYzLDI5ICsxMzAzLDIxIEBACiAgICAgaWYgKHN0YXRlLT53cmFwICE9IDAgJiYgc3RhdGUtPm1vZGUgIT0gRElDVCkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogCi0gICAgLyogY2hlY2sgZm9yIGNvcnJlY3QgZGljdGlvbmFyeSBpZCAqLworICAgIC8qIGNoZWNrIGZvciBjb3JyZWN0IGRpY3Rpb25hcnkgaWRlbnRpZmllciAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBESUNUKSB7Ci0gICAgICAgIGlkID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgaWQgPSBhZGxlcjMyKGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKLSAgICAgICAgaWYgKGlkICE9IHN0YXRlLT5jaGVjaykKKyAgICAgICAgZGljdGlkID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKKyAgICAgICAgZGljdGlkID0gYWRsZXIzMihkaWN0aWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOworICAgICAgICBpZiAoZGljdGlkICE9IHN0YXRlLT5jaGVjaykKICAgICAgICAgICAgIHJldHVybiBaX0RBVEFfRVJST1I7CiAgICAgfQogCi0gICAgLyogY29weSBkaWN0aW9uYXJ5IHRvIHdpbmRvdyAqLwotICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS0+YXZhaWxfb3V0KSkgeworICAgIC8qIGNvcHkgZGljdGlvbmFyeSB0byB3aW5kb3cgdXNpbmcgdXBkYXRld2luZG93KCksIHdoaWNoIHdpbGwgYW1lbmQgdGhlCisgICAgICAgZXhpc3RpbmcgZGljdGlvbmFyeSBpZiBhcHByb3ByaWF0ZSAqLworICAgIHJldCA9IHVwZGF0ZXdpbmRvdyhzdHJtLCBkaWN0aW9uYXJ5ICsgZGljdExlbmd0aCwgZGljdExlbmd0aCk7CisgICAgaWYgKHJldCkgewogICAgICAgICBzdGF0ZS0+bW9kZSA9IE1FTTsKICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIH0KLSAgICBpZiAoZGljdExlbmd0aCA+IHN0YXRlLT53c2l6ZSkgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGRpY3Rpb25hcnkgKyBkaWN0TGVuZ3RoIC0gc3RhdGUtPndzaXplLAotICAgICAgICAgICAgICAgIHN0YXRlLT53c2l6ZSk7Ci0gICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53c2l6ZSAtIGRpY3RMZW5ndGgsIGRpY3Rpb25hcnksCi0gICAgICAgICAgICAgICAgZGljdExlbmd0aCk7Ci0gICAgICAgIHN0YXRlLT53aGF2ZSA9IGRpY3RMZW5ndGg7Ci0gICAgfQogICAgIHN0YXRlLT5oYXZlZGljdCA9IDE7CiAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIGRpY3Rpb25hcnkgc2V0XG4iKSk7CiAgICAgcmV0dXJuIFpfT0s7CkBAIC0xMzIxLDcgKzEzNTMsNyBAQAogICovCiBsb2NhbCB1bnNpZ25lZCBzeW5jc2VhcmNoKGhhdmUsIGJ1ZiwgbGVuKQogdW5zaWduZWQgRkFSICpoYXZlOwotdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CiB1bnNpZ25lZCBsZW47CiB7CiAgICAgdW5zaWduZWQgZ290OwpAQCAtMTQzMyw4ICsxNDY1LDggQEAKICAgICB9CiAKICAgICAvKiBjb3B5IHN0YXRlICovCi0gICAgem1lbWNweShkZXN0LCBzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOwotICAgIHptZW1jcHkoY29weSwgc3RhdGUsIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOworICAgIHptZW1jcHkoKHZvaWRwZilkZXN0LCAodm9pZHBmKXNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7CisgICAgem1lbWNweSgodm9pZHBmKWNvcHksICh2b2lkcGYpc3RhdGUsIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZS0+bGVuY29kZSA+PSBzdGF0ZS0+Y29kZXMgJiYKICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPD0gc3RhdGUtPmNvZGVzICsgRU5PVUdIIC0gMSkgewogICAgICAgICBjb3B5LT5sZW5jb2RlID0gY29weS0+Y29kZXMgKyAoc3RhdGUtPmxlbmNvZGUgLSBzdGF0ZS0+Y29kZXMpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmMgYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuYwppbmRleCAxMWU5YzUyLi40NGQ4OWNmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuYworKysgYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZnRyZWVzLmMgLS0gZ2VuZXJhdGUgSHVmZm1hbiB0cmVlcyBmb3IgZWZmaWNpZW50IGRlY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgTUFYQklUUyAxNQogCiBjb25zdCBjaGFyIGluZmxhdGVfY29weXJpZ2h0W10gPQotICAgIiBpbmZsYXRlIDEuMi41IENvcHlyaWdodCAxOTk1LTIwMTAgTWFyayBBZGxlciAiOworICAgIiBpbmZsYXRlIDEuMi44IENvcHlyaWdodCAxOTk1LTIwMTMgTWFyayBBZGxlciAiOwogLyoKICAgSWYgeW91IHVzZSB0aGUgemxpYiBsaWJyYXJ5IGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaXMgd2VsY29tZQogICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB5b3VyIHByb2R1Y3QuIElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwfTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGV4dFszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLwogICAgICAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwKLSAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDczLCAxOTV9OworICAgICAgICAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgNzIsIDc4fTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGJhc2VbMzJdID0geyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovCiAgICAgICAgIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKICAgICAgICAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LApAQCAtMjA4LDggKzIwOCw4IEBACiAgICAgbWFzayA9IHVzZWQgLSAxOyAgICAgICAgICAgIC8qIG1hc2sgZm9yIGNvbXBhcmluZyBsb3cgKi8KIAogICAgIC8qIGNoZWNrIGF2YWlsYWJsZSB0YWJsZSBzcGFjZSAqLwotICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPj0gRU5PVUdIX0xFTlMpIHx8Ci0gICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPj0gRU5PVUdIX0RJU1RTKSkKKyAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8CisgICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIC8qIHByb2Nlc3MgYWxsIGNvZGVzIGFuZCBtYWtlIHRhYmxlIGVudHJpZXMgKi8KQEAgLTI3Nyw4ICsyNzcsOCBAQAogCiAgICAgICAgICAgICAvKiBjaGVjayBmb3IgZW5vdWdoIHNwYWNlICovCiAgICAgICAgICAgICB1c2VkICs9IDFVIDw8IGN1cnI7Ci0gICAgICAgICAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSF9MRU5TKSB8fAotICAgICAgICAgICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPj0gRU5PVUdIX0RJU1RTKSkKKyAgICAgICAgICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHwKKyAgICAgICAgICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICAgICAgLyogcG9pbnQgZW50cnkgaW4gcm9vdCB0YWJsZSB0byBzdWItdGFibGUgKi8KQEAgLTI4OSwzOCArMjg5LDE0IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKgotICAgICAgIEZpbGwgaW4gcmVzdCBvZiB0YWJsZSBmb3IgaW5jb21wbGV0ZSBjb2Rlcy4gIFRoaXMgbG9vcCBpcyBzaW1pbGFyIHRvIHRoZQotICAgICAgIGxvb3AgYWJvdmUgaW4gaW5jcmVtZW50aW5nIGh1ZmYgZm9yIHRhYmxlIGluZGljZXMuICBJdCBpcyBhc3N1bWVkIHRoYXQKLSAgICAgICBsZW4gaXMgZXF1YWwgdG8gY3VyciArIGRyb3AsIHNvIHRoZXJlIGlzIG5vIGxvb3AgbmVlZGVkIHRvIGluY3JlbWVudAotICAgICAgIHRocm91Z2ggaGlnaCBpbmRleCBiaXRzLiAgV2hlbiB0aGUgY3VycmVudCBzdWItdGFibGUgaXMgZmlsbGVkLCB0aGUgbG9vcAotICAgICAgIGRyb3BzIGJhY2sgdG8gdGhlIHJvb3QgdGFibGUgdG8gZmlsbCBpbiBhbnkgcmVtYWluaW5nIGVudHJpZXMgdGhlcmUuCi0gICAgICovCi0gICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCi0gICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3ApOwotICAgIGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7Ci0gICAgd2hpbGUgKGh1ZmYgIT0gMCkgewotICAgICAgICAvKiB3aGVuIGRvbmUgd2l0aCBzdWItdGFibGUsIGRyb3AgYmFjayB0byByb290IHRhYmxlICovCi0gICAgICAgIGlmIChkcm9wICE9IDAgJiYgKGh1ZmYgJiBtYXNrKSAhPSBsb3cpIHsKLSAgICAgICAgICAgIGRyb3AgPSAwOwotICAgICAgICAgICAgbGVuID0gcm9vdDsKLSAgICAgICAgICAgIG5leHQgPSAqdGFibGU7Ci0gICAgICAgICAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcilsZW47Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBwdXQgaW52YWxpZCBjb2RlIG1hcmtlciBpbiB0YWJsZSAqLwotICAgICAgICBuZXh0W2h1ZmYgPj4gZHJvcF0gPSBoZXJlOwotCi0gICAgICAgIC8qIGJhY2t3YXJkcyBpbmNyZW1lbnQgdGhlIGxlbi1iaXQgY29kZSBodWZmICovCi0gICAgICAgIGluY3IgPSAxVSA8PCAobGVuIC0gMSk7Ci0gICAgICAgIHdoaWxlIChodWZmICYgaW5jcikKLSAgICAgICAgICAgIGluY3IgPj49IDE7Ci0gICAgICAgIGlmIChpbmNyICE9IDApIHsKLSAgICAgICAgICAgIGh1ZmYgJj0gaW5jciAtIDE7Ci0gICAgICAgICAgICBodWZmICs9IGluY3I7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaHVmZiA9IDA7CisgICAgLyogZmlsbCBpbiByZW1haW5pbmcgdGFibGUgZW50cnkgaWYgY29kZSBpcyBpbmNvbXBsZXRlIChndWFyYW50ZWVkIHRvIGhhdmUKKyAgICAgICBhdCBtb3N0IG9uZSByZW1haW5pbmcgZW50cnksIHNpbmNlIGlmIHRoZSBjb2RlIGlzIGluY29tcGxldGUsIHRoZQorICAgICAgIG1heGltdW0gY29kZSBsZW5ndGggdGhhdCB3YXMgYWxsb3dlZCB0byBnZXQgdGhpcyBmYXIgaXMgb25lIGJpdCkgKi8KKyAgICBpZiAoaHVmZiAhPSAwKSB7CisgICAgICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcik2NDsgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCisgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKKyAgICAgICAgaGVyZS52YWwgPSAodW5zaWduZWQgc2hvcnQpMDsKKyAgICAgICAgbmV4dFtodWZmXSA9IGhlcmU7CiAgICAgfQogCiAgICAgLyogc2V0IHJldHVybiBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaCBiL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5oCmluZGV4IDI0MjMwYzUuLmJhYTUzYTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5oCisrKyBiL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5oCkBAIC00MSw3ICs0MSw3IEBACiAgICBleGFtcGxlcy9lbm91Z2guYyBmb3VuZCBpbiB0aGUgemxpYiBkaXN0cmlidHV0aW9uLiAgVGhlIGFyZ3VtZW50cyB0byB0aGF0CiAgICBwcm9ncmFtIGFyZSB0aGUgbnVtYmVyIG9mIHN5bWJvbHMsIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSwgYW5kIHRoZQogICAgbWF4aW11bSBiaXQgbGVuZ3RoIG9mIGEgY29kZS4gICJlbm91Z2ggMjg2IDkgMTUiIGZvciBsaXRlcmFsL2xlbmd0aCBjb2RlcwotICAgcmV0dXJucyA4NTIsIGFuZCAiZW5vdWdoIDMwIDYgMTUiIGZvciBkaXN0YW5jZSBjb2RlcyByZXR1cm5zIDU5Mi4KKyAgIHJldHVybnMgcmV0dXJucyA4NTIsIGFuZCAiZW5vdWdoIDMwIDYgMTUiIGZvciBkaXN0YW5jZSBjb2RlcyByZXR1cm5zIDU5Mi4KICAgIFRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSAoOSBvciA2KSBpcyBmb3VuZCBpbiB0aGUgZmlmdGggYXJndW1lbnQgb2YgdGhlCiAgICBpbmZsYXRlX3RhYmxlKCkgY2FsbHMgaW4gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMuICBJZiB0aGUgcm9vdCB0YWJsZSBzaXplIGlzCiAgICBjaGFuZ2VkLCB0aGVuIHRoZXNlIG1heGltdW0gc2l6ZXMgd291bGQgYmUgbmVlZCB0byBiZSByZWNhbGN1bGF0ZWQgYW5kCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tIGIvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbQppbmRleCA2NTc2NDkwLi42NWU5ZDBjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tCisrKyBiL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20KQEAgLTMsNyArMyw3IEBACiAkIQogJCEgSW4gY2FzZSBvZiBwcm9ibGVtcyB3aXRoIHRoZSBpbnN0YWxsIHlvdSBtaWdodCBjb250YWN0IG1lIGF0CiAkISB6aW5zZXJAemluc2VyLm5vLWlwLmluZm8ocHJlZmVycmVkKSBvcgotJCEgemluc2VyQHN5c2Rldi5kZXV0c2NoZS1ib2Vyc2UuY29tICh3b3JrKQorJCEgbWFydGluLnppbnNlckBldXJleGNoYW5nZS5jb20gKHdvcmspCiAkIQogJCEgTWFrZSBwcm9jZWR1cmUgaGlzdG9yeSBmb3IgWmxpYgogJCEKQEAgLTE0LDkgKzE0LDE2IEBACiAkISAwLjAzIDIwMDkxMjI0IEFkZCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlIGNoZWNrCiAkISAwLjA0IDIwMTAwMTEwIEFkZCBuZXcgZ3pjbG9zZSwgZ3psaWIsIGd6cmVhZCwgZ3p3cml0ZQogJCEgMC4wNSAyMDEwMDIyMSBFeGNoYW5nZSB6bGliZGVmcy5oIGJ5IHpjb25mLmguaW4KKyQhIDAuMDYgMjAxMjAxMTEgRml4IG1pc3NpbmcgYW1pc3NfZXJyLCB1cGRhdGUgemNvbmZfaC5pbiwgZml4IG5ldyBleG1wbGVzCiskISAgICAgICAgICAgICAgIHN1YmRpciBwYXRoLCB1cGRhdGUgbW9kdWxlIHNlYXJjaCBpbiBtYWtlZmlsZS5pbgorJCEgMC4wNyAyMDEyMDExNSBUcmlnZ2VyZWQgYnkgd29yayBkb25lIGJ5IEFsZXhleSBDaHVwYWhpbiBjb21wbGV0bHkgcmVkZXNpZ25lZAorJCEgICAgICAgICAgICAgICBzaGFyZWQgaW1hZ2UgY3JlYXRpb24KKyQhIDAuMDggMjAxMjAyMTkgTWFrZSBpdCB3b3JrIG9uIFZBWCBhZ2FpbiwgcHJlLWxvYWQgbWlzc2luZyBzeW1ib2xzIHRvIHNoYXJlZAorJCEgICAgICAgICAgICAgICBpbWFnZQorJCEgMC4wOSAyMDEyMDMwNSBTTVMuICBQMSBzZXRzIGJ1aWxkZXIgKCJNTUsiLCAiTU1TIiwgIiAiIChidWlsdC1pbikpLgorJCEgICAgICAgICAgICAgICAiIiAtPiBhdXRvbWF0aWMsIHByZWZlcmVuY2U6IE1NSywgTU1TLCBidWlsdC1pbi4KICQhCiAkIG9uIGVycm9yIHRoZW4gZ290byBlcnJfZXhpdAotJCBzZXQgcHJvYy9wYXJzZT1leHQKICQhCiAkIHRydWUgID0gMQogJCBmYWxzZSA9IDAKQEAgLTMyLDMxICszOSw0MyBAQAogJCEKICQhIFNldHVwIHZhcmlhYmxlcyBob2xkaW5nICJjb25maWciIGluZm9ybWF0aW9uCiAkIQotJCBNYWtlICAgID0gIiIKKyQgTWFrZSAgICA9ICInJ3AxJyIKICQgbmFtZSAgICAgPSAiWmxpYiIKICQgdmVyc2lvbiAgPSAiPy4/Lj8iCiAkIHZfc3RyaW5nID0gIlpMSUJfVkVSU0lPTiIKICQgdl9maWxlICAgPSAiemxpYi5oIgotJCBjY29wdCAgID0gIiIKKyQgY2NvcHQgICA9ICIvaW5jbHVkZSA9IFtdIgogJCBsb3B0cyAgID0gIiIKICQgZG5zcmwgICA9ICIiCi0kIGFjb25mX2luX2ZpbGUgPSAiemNvbmYuaC5pbiN6Y29uZi5oX2luIgorJCBhY29uZl9pbl9maWxlID0gInpjb25mLmguaW4jemNvbmYuaF9pbiN6Y29uZl9oLmluIgogJCBjb25mX2NoZWNrX3N0cmluZyA9ICIiCiAkIGxpbmtvbmx5ID0gZmFsc2UKICQgb3B0ZmlsZSAgPSBuYW1lICsgIi5vcHQiCiskIG1hcGZpbGUgID0gbmFtZSArICIubWFwIgogJCBsaWJkZWZzICA9ICIiCiskIHZheCAgICAgID0gZiRnZXRzeWkoIkhXX01PREVMIikubHQuMTAyNAogJCBheHAgICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmdlLjEwMjQgLmFuZC4gZiRnZXRzeWkoIkhXX01PREVMIikubHQuNDA5NgorJCBpYTY0ICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmdlLjQwOTYKICQhCi0kIHdob2FtaSA9IGYkcGFyc2UoZiRlbnZpb3JubWVudCgiUHJvY2VkdXJlIiksLCwsIk5PX0NPTkNFQUwiKQorJCEgMjAxMi0wMy0wNSBTTVMuCiskISBXaHkgaXMgdGhpcyBuZWVkZWQ/ICBBbmQgaWYgaXQgaXMgbmVlZGVkLCB3aHkgbm90IHNpbXBseSAiLm5vdC4gdmF4Ij8KKyQhCiskISEhIGlmIGF4cCAub3IuIGlhNjQgdGhlbiAgc2V0IHByb2MvcGFyc2U9ZXh0ZW5kZWQKKyQhCiskIHdob2FtaSA9IGYkcGFyc2UoZiRlbnZpcm9ubWVudCgiUHJvY2VkdXJlIiksLCwsIk5PX0NPTkNFQUwiKQogJCBteWRlZiAgPSBGJHBhcnNlKHdob2FtaSwsLCJERVZJQ0UiKQogJCBteWRpciAgPSBmJHBhcnNlKHdob2FtaSwsLCJESVJFQ1RPUlkiKSAtICJdWyIKICQgbXlwcm9jID0gZiRwYXJzZSh3aG9hbWksLCwiTmFtZSIpICsgZiRwYXJzZSh3aG9hbWksLCwidHlwZSIpCiAkIQogJCEgQ2hlY2sgZm9yIE1NSy9NTVMKICQhCi0kIElmIEYkU2VhcmNoICgiU3lzJFN5c3RlbTpNTVMuRVhFIikgLm5lcy4gIiIgVGhlbiBNYWtlID0gIk1NUyIKLSQgSWYgRiRUeXBlIChNTUspIC5lcXMuICJTVFJJTkciIFRoZW4gTWFrZSA9ICJNTUsiCi0kIQorJCBpZiAoTWFrZSAuZXFzLiAiIikKKyQgdGhlbgorJCAgIElmIEYkU2VhcmNoICgiU3lzJFN5c3RlbTpNTVMuRVhFIikgLm5lcy4gIiIgVGhlbiBNYWtlID0gIk1NUyIKKyQgICBJZiBGJFR5cGUgKE1NSykgLmVxcy4gIlNUUklORyIgVGhlbiBNYWtlID0gIk1NSyIKKyQgZWxzZQorJCAgIE1ha2UgPSBmJGVkaXQoIE1ha2UsICJ0cmltIikKKyQgZW5kaWYKICQhCiAkIGdvc3ViIGZpbmRfdmVyc2lvbgogJCEKQEAgLTY5LDYgKzg4LDcgQEAKICQhCiAkIGdvc3ViIGNoZWNrX2NvbXBpbGVyCiAkIGNsb3NlIHRvcHQKKyQgY2xvc2Ugb3B0ZgogJCEKICQgaWYgaXRzX2RlY2MKICQgdGhlbgpAQCAtODMsNiArMTAzLDE1IEBACiAkICAgICAgIGRlZmluZSBzeXMgZGVjYyRsaWJyYXJ5X2luY2x1ZGU6CiAkICAgICBlbmRpZgogJCAgIGVuZGlmCiskIQorJCEgMjAxMi0wMy0wNSBTTVMuCiskISBXaHkgL05BTUVTID0gQVNfSVM/ICBXaHkgbm90IHNpbXBseSAiLm5vdC4gdmF4Ij8gIEFuZCB3aHkgbm90IG9uIFZBWD8KKyQhCiskICAgaWYgYXhwIC5vci4gaWE2NAorJCAgIHRoZW4KKyQgICAgICAgY2NvcHQgPSBjY29wdCArICIvbmFtZT1hc19pcy9vcHQ9KGlubGluZT1zcGVlZCkiCiskICAgICAgIHNfY2FzZSA9IHRydWUKKyQgICBlbmRpZgogJCBlbmRpZgogJCBpZiBpdHNfdmF4YyAub3IuIGl0c19nbnVjCiAkIHRoZW4KQEAgLTEyMiwxNSArMTUxLDIwIEBACiAkIGVuZGlmCiAkIGdvdG8gYWNvbmZfbG9vcAogJEFDT05GX0VYSVQ6CiskIHdyaXRlIGFjb25mICIiCiskIHdyaXRlIGFjb25mICIvKiBWTVMgc3BlY2lmaWNzIGFkZGVkIGJ5IG1ha2Vfdm1zLmNvbTogKi8iCiAkIHdyaXRlIGFjb25mICIjZGVmaW5lIFZNUyAxIgogJCB3cml0ZSBhY29uZiAiI2luY2x1ZGUgPHVuaXN0ZC5oPiIKICQgd3JpdGUgYWNvbmYgIiNpbmNsdWRlIDx1bml4aW8uaD4iCiAkIHdyaXRlIGFjb25mICIjaWZkZWYgX0xBUkdFRklMRSIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgb2ZmNjRfdCBfX29mZjY0X3QiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGZvcGVuNjQgZm9wZW4iCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGZzZWVrbzY0IGZzZWVrbyIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgbHNlZWs2NCBsc2VlayIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgZnRlbGxvNjQgZnRlbGwiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBvZmY2NF90IF9fb2ZmNjRfdCIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGZvcGVuNjQgZm9wZW4iCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBmc2Vla282NCBmc2Vla28iCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBsc2VlazY0IGxzZWVrIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgZnRlbGxvNjQgZnRlbGwiCiskIHdyaXRlIGFjb25mICIjZW5kaWYiCiskIHdyaXRlIGFjb25mICIjaWYgIWRlZmluZWQoIF9fVkFYKSAmJiAoX19DUlRMX1ZFUiA+PSA3MDMxMjAwMCkiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBIQVZFX1ZTTlBSSU5URiIKICQgd3JpdGUgYWNvbmYgIiNlbmRpZiIKICQgY2xvc2UgYWNvbmZfaW4KICQgY2xvc2UgYWNvbmYKQEAgLTEzOSw4ICsxNzMsOSBAQAogJCEKICQgd3JpdGUgc3lzJG91dHB1dCAiQ29tcGlsaW5nIFpsaWIgc291cmNlcyAuLi4iCiAkIGlmIG1ha2UuZXFzLiIiCi0kICB0aGVuCi0kICAgZGVsZSBleGFtcGxlLm9iajsqLG1pbmlnemlwLm9iajsqCiskIHRoZW4KKyQgICBpZiAoZiRzZWFyY2goICJleGFtcGxlLm9iajsqIikgLm5lcy4gIiIpIHRoZW4gZGVsZXRlIGV4YW1wbGUub2JqOyoKKyQgICBpZiAoZiRzZWFyY2goICJtaW5pZ3ppcC5vYmo7KiIpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSBtaW5pZ3ppcC5vYmo7KgogJCAgIENBTEwgTUFLRSBhZGxlcjMyLk9CSiAiQ0MgJydDQ09QVCcgYWRsZXIzMiIgLQogICAgICAgICAgICAgICAgIGFkbGVyMzIuYyB6bGliLmggemNvbmYuaAogJCAgIENBTEwgTUFLRSBjb21wcmVzcy5PQkogIkNDICcnQ0NPUFQnIGNvbXByZXNzIiAtCkBAIC0xNzQsNDEgKzIwOSwzNCBAQAogJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIFpsaWIgLi4uIgogJCAgIENBTEwgTUFLRSBsaWJ6Lk9MQiAibGliL2NyZWEgbGliei5vbGIgKi5vYmoiICouT0JKCiAkICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgZXhhbXBsZS4uLiIKLSQgICBDQUxMIE1BS0UgZXhhbXBsZS5PQkogIkNDICcnQ0NPUFQnIGV4YW1wbGUiIC0KLSAgICAgICAgICAgICAgICBleGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKyQgICBDQUxMIE1BS0UgZXhhbXBsZS5PQkogIkNDICcnQ0NPUFQnIFsudGVzdF1leGFtcGxlIiAtCisgICAgICAgICAgICAgICAgWy50ZXN0XWV4YW1wbGUuYyB6bGliLmggemNvbmYuaAogJCAgIGNhbGwgbWFrZSBleGFtcGxlLmV4ZSAiTElOSyBleGFtcGxlLGxpYnoub2xiL2xpYiIgZXhhbXBsZS5vYmogbGliei5vbGIKLSQgICBpZiBmJHNlYXJjaCgieDExdm1zOnh2bXN1dGlscy5vbGIiKSAubmVzLiAiIgotJCAgIHRoZW4KLSQgICAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIG1pbmlnemlwLi4uIgotJCAgICAgQ0FMTCBNQUtFIG1pbmlnemlwLk9CSiAiQ0MgJydDQ09QVCcgbWluaWd6aXAiIC0KLSAgICAgICAgICAgICAgICBtaW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCi0kICAgICBjYWxsIG1ha2UgbWluaWd6aXAuZXhlIC0KLSAgICAgICAgICAgICAgICAiTElOSyBtaW5pZ3ppcCxsaWJ6Lm9sYi9saWIseDExdm1zOnh2bXN1dGlscy5vbGIvbGliIiAtCi0gICAgICAgICAgICAgICAgbWluaWd6aXAub2JqIGxpYnoub2xiCi0kICAgZW5kaWYKLSQgIGVsc2UKKyQgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBtaW5pZ3ppcC4uLiIKKyQgICBDQUxMIE1BS0UgbWluaWd6aXAuT0JKICJDQyAnJ0NDT1BUJyBbLnRlc3RdbWluaWd6aXAiIC0KKyAgICAgICAgICAgICAgWy50ZXN0XW1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKyQgICBjYWxsIG1ha2UgbWluaWd6aXAuZXhlIC0KKyAgICAgICAgICAgICAgIkxJTksgbWluaWd6aXAsbGliei5vbGIvbGliIiAtCisgICAgICAgICAgICAgIG1pbmlnemlwLm9iaiBsaWJ6Lm9sYgorJCBlbHNlCiAkICAgZ29zdWIgY3JlYV9tbXMKICQgICB3cml0ZSBzeXMkb3V0cHV0ICJNYWtlICcnbmFtZScgJyd2ZXJzaW9uJyB3aXRoICcnTWFrZScgIgogJCAgICdtYWtlJwotJCAgZW5kaWYKLSQhCi0kISBBbHBoYSBnZXRzIGEgc2hhcmVhYmxlIGltYWdlCi0kIQotJCBJZiBheHAKLSQgVGhlbgotJCAgIGdvc3ViIGNyZWFfb2xpc3QKLSQgICB3cml0ZSBzeXMkb3V0cHV0ICJDcmVhdGluZyBsaWJ6c2hyLmV4ZSIKLSQgICBjYWxsIGFuYWxfb2JqX2F4cCBtb2R1bGVzLm9wdCBfbGluay5vcHQKLSQgICBpZiBzX2Nhc2UKLSQgICB0aGVuCi0kICAgICAgb3Blbi9hcHBlbmQgb3B0ZiBtb2R1bGVzLm9wdAotJCAgICAgIHdyaXRlIG9wdGYgImNhc2Vfc2Vuc2l0aXZlPVlFUyIKLSQgICAgICBjbG9zZSBvcHRmCi0kICAgZW5kaWYKLSQgICBMSU5LXydsb3B0cycvU0hBUkU9bGlienNoci5leGUgbW9kdWxlcy5vcHQvb3B0LF9saW5rLm9wdC9vcHQKICQgZW5kaWYKKyQhCiskISBDcmVhdGUgc2hhcmVhYmxlIGltYWdlCiskIQorJCBnb3N1YiBjcmVhX29saXN0CiskIHdyaXRlIHN5cyRvdXRwdXQgIkNyZWF0aW5nIGxpYnpzaHIuZXhlIgorJCBjYWxsIG1hcF8yX3Nob3B0ICdtYXBmaWxlJyAnb3B0ZmlsZScKKyQgTElOS18nbG9wdHMnL1NIQVJFPWxpYnpzaHIuZXhlIG1vZHVsZXMub3B0L29wdCwnb3B0ZmlsZScvb3B0CiAkIHdyaXRlIHN5cyRvdXRwdXQgIlpsaWIgYnVpbGQgY29tcGxldGVkIgorJCBkZWxldGUvbm9sb2cgdG1wLm9wdDsqCiAkIGV4aXQKKyRBTUlTU19FUlI6CiskIHdyaXRlIHN5cyRvdXRwdXQgIk5vIHNvdXJjZSBmb3IgY29uZmlnLmhpbiBmb3VuZC4iCiskIHdyaXRlIHN5cyRvdXRwdXQgIlRyaWVkIGFueSBvZiAnJ2Fjb25mX2luX2ZpbGUnIgorJCBnb3RvIGVycl9leGl0CiAkQ0NfRVJSOgogJCB3cml0ZSBzeXMkb3V0cHV0ICJDIGNvbXBpbGVyIHJlcXVpcmVkIHRvIGJ1aWxkICcnbmFtZSciCiAkIGdvdG8gZXJyX2V4aXQKQEAgLTIxNiw3ICsyNDQsNiBAQAogJCBzZXQgbWVzc2FnZS9mYWNpbC9pZGVudC9zZXZlci90ZXh0CiAkIGNsb3NlL25vbG9nIG9wdGYKICQgY2xvc2Uvbm9sb2cgdG9wdAotJCBjbG9zZS9ub2xvZyBjb25mX2hpbgogJCBjbG9zZS9ub2xvZyBhY29uZl9pbgogJCBjbG9zZS9ub2xvZyBhY29uZgogJCBjbG9zZS9ub2xvZyBvdXQKQEAgLTM5Nyw3ICs0MjQsNyBAQAogJCBkZWNrCiAjIGRlc2NyaXAubW1zOiBNTVMgZGVzY3JpcHRpb24gZmlsZSBmb3IgYnVpbGRpbmcgemxpYiBvbiBWTVMKICMgd3JpdHRlbiBieSBNYXJ0aW4gUC5KLiBaaW5zZXIKLSMgPHppbnNlckB6aW5zZXIubm8taXAuaW5mbyBvciB6aW5zZXJAc3lzZGV2LmRldXRzY2hlLWJvZXJzZS5jb20+CisjIDx6aW5zZXJAemluc2VyLm5vLWlwLmluZm8gb3IgbWFydGluLnppbnNlckBldXJleGNoYW5nZS5jb20+CiAKIE9CSlMgPSBhZGxlcjMyLm9iaiwgY29tcHJlc3Mub2JqLCBjcmMzMi5vYmosIGd6Y2xvc2Uub2JqLCBnemxpYi5vYmpcCiAgICAgICAgZ3pyZWFkLm9iaiwgZ3p3cml0ZS5vYmosIHVuY29tcHIub2JqLCBpbmZiYWNrLm9ialwKQEAgLTQwNywxMCArNDM0LDkgQEAKICQgZW9kCiAkIHdyaXRlIG91dCAiQ0ZMQUdTPSIsIGNjb3B0CiAkIHdyaXRlIG91dCAiTE9QVFM9IiwgbG9wdHMKKyQgd3JpdGUgb3V0ICJhbGwgOiBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUgbGliei5vbGIiCiAkIGNvcHkgc3lzJGlucHV0OiBvdXQKICQgZGVjawotCi1hbGwgOiBleGFtcGxlLmV4ZSBtaW5pZ3ppcC5leGUgbGliei5vbGIKICAgICAgICAgQCB3cml0ZSBzeXMkb3V0cHV0ICIgRXhhbXBsZSBhcHBsaWNhdGlvbnMgYXZhaWxhYmxlIgogCiBsaWJ6Lm9sYiA6IGxpYnoub2xiKCQoT0JKUykpCkBAIC00MjAsNyArNDQ2LDcgQEAKICAgICAgICAgICAgICAgbGluayAkKExPUFRTKSBleGFtcGxlLGxpYnoub2xiL2xpYgogCiBtaW5pZ3ppcC5leGUgOiBtaW5pZ3ppcC5vYmogbGliei5vbGIKLSAgICAgICAgICAgICAgbGluayAkKExPUFRTKSBtaW5pZ3ppcCxsaWJ6Lm9sYi9saWIseDExdm1zOnh2bXN1dGlscy5vbGIvbGliCisgICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgbWluaWd6aXAsbGliei5vbGIvbGliCiAKIGNsZWFuIDoKIAlkZWxldGUgKi5vYmo7KixsaWJ6Lm9sYjsqLCoub3B0OyosKi5leGU7KgpAQCAtNDMxLDcgKzQ1Nyw3IEBACiBjb21wcmVzcy5vYmogOiBjb21wcmVzcy5jIHpsaWIuaCB6Y29uZi5oCiBjcmMzMi5vYmogICAgOiBjcmMzMi5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGRlZmxhdGUub2JqICA6IGRlZmxhdGUuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAotZXhhbXBsZS5vYmogIDogZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCitleGFtcGxlLm9iaiAgOiBbLnRlc3RdZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCiBnemNsb3NlLm9iaiAgOiBnemNsb3NlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogZ3psaWIub2JqICAgIDogZ3psaWIuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBnenJlYWQub2JqICAgOiBnenJlYWQuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCkBAIC00MzksNyArNDY1LDcgQEAKIGluZmZhc3Qub2JqICA6IGluZmZhc3QuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mZmFzdC5oCiBpbmZsYXRlLm9iaiAgOiBpbmZsYXRlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogaW5mdHJlZXMub2JqIDogaW5mdHJlZXMuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmgKLW1pbmlnemlwLm9iaiA6IG1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKK21pbmlnemlwLm9iaiA6IFsudGVzdF1taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCiB0cmVlcy5vYmogICAgOiB0cmVlcy5jIGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiB1bmNvbXByLm9iaiAgOiB1bmNvbXByLmMgemxpYi5oIHpjb25mLmgKIHp1dGlsLm9iaiAgICA6IHp1dGlsLmMgenV0aWwuaCB6bGliLmggemNvbmYuaApAQCAtNDU1LDEzICs0ODEsMTggQEAKICRDUkVBX09MSVNUOgogJCBvcGVuL3JlYWQgbWluIG1ha2VmaWxlLmluCiAkIG9wZW4vd3JpdGUgbW9kIG1vZHVsZXMub3B0Ci0kIHNyY19jaGVjayA9ICJPQkpDID0iCiskIHNyY19jaGVja19saXN0ID0gIk9CSlogPSNPQkpHID0iCiAkTVJMT09QOgogJCByZWFkL2VuZD1tcmRvbmUgbWluIHJlYwotJCBpZiAoZiRleHRyYWN0KDAsNixyZWMpIC5uZXMuIHNyY19jaGVjaykgdGhlbiBnb3RvIG1ybG9vcAorJCBpID0gMAorJFNSQ19DSEVDS19MT09QOgorJCBzcmNfY2hlY2sgPSBmJGVsZW1lbnQoaSwgIiMiLCBzcmNfY2hlY2tfbGlzdCkKKyQgaSA9IGkrMQorJCBpZiBzcmNfY2hlY2sgLmVxcy4gIiMiIHRoZW4gZ290byBtcmxvb3AKKyQgaWYgKGYkZXh0cmFjdCgwLDYscmVjKSAubmVzLiBzcmNfY2hlY2spIHRoZW4gZ290byBzcmNfY2hlY2tfbG9vcAogJCByZWMgPSByZWMgLSBzcmNfY2hlY2sKICQgZ29zdWIgZXh0cmFfZmlsbmFtCi0kIGlmIChmJGVsZW1lbnQoMSwiXCIscmVjKSAuZXFzLiAiXCIpIHRoZW4gZ290byBtcmRvbmUKKyQgaWYgKGYkZWxlbWVudCgxLCJcIixyZWMpIC5lcXMuICJcIikgdGhlbiBnb3RvIG1ybG9vcAogJE1SU0xPT1A6CiAkIHJlYWQvZW5kPW1yZG9uZSBtaW4gcmVjCiAkIGdvc3ViIGV4dHJhX2ZpbG5hbQpAQCAtNjcyLDEyNCArNzAzLDYgQEAKICQgcmV0dXJuCiAkIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCEKLSQhIEFuYWx5emUgT2JqZWN0IGZpbGVzIGZvciBPcGVuVk1TIEFYUCB0byBleHRyYWN0IFByb2NlZHVyZSBhbmQgRGF0YQotJCEgaW5mb3JtYXRpb24gdG8gYnVpbGQgYSBzeW1ib2wgdmVjdG9yIGZvciBhIHNoYXJlYWJsZSBpbWFnZQotJCEgQWxsIHRoZSAiYnJhaW5zIiBvZiB0aGlzIGxvZ2ljIHdhcyBzdWdnZXN0ZWQgYnkgSGFydG11dCBCZWNrZXIKLSQhIChIYXJ0bXV0LkJlY2tlckBjb21wYXEuY29tKS4gQWxsIHRoZSBidWdzIHdlcmUgaW50cm9kdWNlZCBieSBtZQotJCEgKHppbnNlckB6aW5zZXIubm8taXAuaW5mbyksIHNvIGlmIHlvdSBkbyBoYXZlIHByb2JsZW0gcmVwb3J0cyBwbGVhc2UgZG8gbm90Ci0kISBib3RoZXIgSGFydG11dC9IUCwgYnV0IGdldCBpbiB0b3VjaCB3aXRoIG1lCi0kIQotJCEgVmVyc2lvbiBoaXN0b3J5Ci0kISAwLjAxIDIwMDQwNDA2IFNraXAgb3ZlciBzaGFyZWFibGUgaW1hZ2VzIGluIG9wdGlvbiBmaWxlCi0kISAwLjAyIDIwMDQxMTA5IEZpeCBvcHRpb24gZmlsZSBmb3Igc2hhcmVhYmxlIGltYWdlcyB3aXRoIGNhc2Vfc2Vuc2l0aXZlPVlFUwotJCEgMC4wMyAyMDA1MDEwNyBTa2lwIG92ZXIgSWRlbnRpZmljYXRpb24gbGFiZWxzIGluIG9wdGlvbiBmaWxlCi0kISAwLjA0IDIwMDYwMTE3IEFkZCB1cHBlcmNhc2UgYWxpYXMgdG8gY29kZSBjb21waWxlZCB3aXRoIC9uYW1lPWFzX2lzCi0kIQotJCBBTkFMX09CSl9BWFA6IFN1YnJvdXRpbmUKLSQgViA9ICdGJFZlcmlmeSgwKQotJCBTQVkgOj0gIldSSVRFXyBTWVMkT1VUUFVUIgotJAotJCBJRiBGJFNFQVJDSCgiJydQMSciKSAuRVFTLiAiIgotJCBUSEVOCi0kICAgIFNBWSAiQU5BTF9PQkpfQVhQLUUtTk9TVUNIRklMRTogIEVycm9yLCBpbnB1dGZpbGUgJydwMScgbm90IGF2YWlsYWJsZSIKLSQgICAgZ290byBleGl0X2FhCi0kIEVORElGCi0kIElGICInJ1AyJyIgLkVRUy4gIiIKLSQgVEhFTgotJCAgICBTQVkgIkFOQUxfT0JKX0FYUDogIEVycm9yLCBubyBvdXRwdXQgZmlsZSBwcm92aWRlZCIKLSQgICAgZ290byBleGl0X2FhCi0kIEVORElGCi0kCi0kIG9wZW4vcmVhZCBpbiAncDEKLSQgY3JlYXRlIGEudG1wCi0kIG9wZW4vYXBwZW5kIGF0bXAgYS50bXAKLSQgbG9vcDoKLSQgcmVhZC9lbmQ9ZW5kX2xvb3AgaW4gbGluZQotJCBpZiBmJGxvY2F0ZSgiL1NIQVJFIixmJGVkaXQobGluZSwidXBjYXNlIikpIC5sdC4gZiRsZW5ndGgobGluZSkKLSQgdGhlbgotJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkFOQUxfU0tQX1NIUi1pLXNraXBzaGFyZSwgJydsaW5lJyIKLSQgICBnb3RvIGxvb3AKLSQgZW5kaWYKLSQgaWYgZiRsb2NhdGUoIklERU5USUZJQ0FUSU9OPSIsZiRlZGl0KGxpbmUsInVwY2FzZSIpKSAubHQuIGYkbGVuZ3RoKGxpbmUpCi0kIHRoZW4KLSQgICB3cml0ZSBzeXMkb3V0cHV0ICJBTkFMX09CSl9BWFAtaS1pZGVudDogSWRlbnRpZmljYXRpb24gIiwgLQotICAgICAgICAgICAgICAgICAgICAgZiRlbGVtZW50KDEsIj0iLGxpbmUpCi0kICAgZ290byBsb29wCi0kIGVuZGlmCi0kIGY9IGYkc2VhcmNoKGxpbmUpCi0kIGlmIGYgLmVxcy4gIiIKLSQgdGhlbgotJAl3cml0ZSBzeXMkb3V0cHV0ICJBTkFMX09CSl9BWFAtdy1ub3N1Y2hmaWxlLCAnJ2xpbmUnIgotJAlnb3RvIGxvb3AKLSQgZW5kaWYKLSQgZGVmaW5lL3VzZXIgc3lzJG91dHB1dCBubDoKLSQgZGVmaW5lL3VzZXIgc3lzJGVycm9yIG5sOgotJCBhbmFsL29iai9nc2QgJ2YgL291dD14LnRtcAotJCBvcGVuL3JlYWQgeHRtcCB4LnRtcAotJCBYTE9PUDoKLSQgcmVhZC9lbmQ9ZW5kX3hsb29wIHh0bXAgeGxpbmUKLSQgeGxpbmUgPSBmJGVkaXQoeGxpbmUsImNvbXByZXNzIikKLSQgd3JpdGUgYXRtcCB4bGluZQotJCBnb3RvIHhsb29wCi0kIEVORF9YTE9PUDoKLSQgY2xvc2UgeHRtcAotJCBnb3RvIGxvb3AKLSQgZW5kX2xvb3A6Ci0kIGNsb3NlIGluCi0kIGNsb3NlIGF0bXAKLSQgaWYgZiRzZWFyY2goImEudG1wIikgLmVxcy4gIiIgLQotCXRoZW4gJCBleGl0Ci0kICEgYWxsIGdsb2JhbCBkZWZpbml0aW9ucwotJCBzZWFyY2ggYS50bXAgInN5bWJvbDoiLCJFR1NZJFZfREVGIDEiLCJFR1NZJFZfTk9STSAxIi9vdXQ9Yi50bXAKLSQgISBhbGwgcHJvY2VkdXJlcwotJCBzZWFyY2ggYi50bXAgIkVHU1kkVl9OT1JNIDEiL3dpbmQ9KDAsMSkgL291dD1jLnRtcAotJCBzZWFyY2ggYy50bXAgInN5bWJvbDoiL291dD1kLnRtcAotJCBkZWZpbmUvdXNlciBzeXMkb3V0cHV0IG5sOgotJCBlZGl0by9lZHQvY29tbWFuZD1zeXMkaW5wdXQgZC50bXAKLXN1Yi9zeW1ib2w6ICIvc3ltYm9sX3ZlY3Rvcj0oL3dob2xlCi1zdWIvIi89UFJPQ0VEVVJFKS93aG9sZQotZXhpdAotJCAhIGFsbCBkYXRhCi0kIHNlYXJjaCBiLnRtcCAiRUdTWSRWX0RFRiAxIi93aW5kPSgwLDEpIC9vdXQ9ZS50bXAKLSQgc2VhcmNoIGUudG1wICJzeW1ib2w6Ii9vdXQ9Zi50bXAKLSQgZGVmaW5lL3VzZXIgc3lzJG91dHB1dCBubDoKLSQgZWRpdG8vZWR0L2NvbW1hbmQ9c3lzJGlucHV0IGYudG1wCi1zdWIvc3ltYm9sOiAiL3N5bWJvbF92ZWN0b3I9KC93aG9sZQotc3ViLyIvPURBVEEpL3dob2xlCi1leGl0Ci0kIHNvcnQvbm9kdXBsIGQudG1wLGYudG1wIGcudG1wCi0kIG9wZW4vcmVhZCByYXdfdmVjdG9yIGcudG1wCi0kIG9wZW4vd3JpdGUgY2FzZV92ZWN0b3IgJ3AyJwotJCBSQVdMT09QOgotJCByZWFkL2VuZD1lbmRfcmF3bG9vcCByYXdfdmVjdG9yIHJhd19lbGVtZW50Ci0kIHdyaXRlIGNhc2VfdmVjdG9yIHJhd19lbGVtZW50Ci0kIGlmIGYkbG9jYXRlKCI9UFJPQ0VEVVJFKSIscmF3X2VsZW1lbnQpIC5sdC4gZiRsZW5ndGgocmF3X2VsZW1lbnQpCi0kIHRoZW4KLSQgICAgIG5hbWUgPSBmJGVsZW1lbnQoMSwiPSIscmF3X2VsZW1lbnQpIC0gIigiCi0kICAgICBpZiBmJGVkaXQobmFtZSwiVVBDQVNFIikgLm5lcy4gbmFtZSB0aGVuIC0KLSAgICAgICAgICB3cml0ZSBjYXNlX3ZlY3RvciBmJGZhbygiIHN5bWJvbF92ZWN0b3I9KCFBUy8hQVM9UFJPQ0VEVVJFKSIsIC0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgIGYkZWRpdChuYW1lLCJVUENBU0UiKSwgbmFtZSkKLSQgZW5kaWYKLSQgaWYgZiRsb2NhdGUoIj1EQVRBKSIscmF3X2VsZW1lbnQpIC5sdC4gZiRsZW5ndGgocmF3X2VsZW1lbnQpCi0kIHRoZW4KLSQgICAgIG5hbWUgPSBmJGVsZW1lbnQoMSwiPSIscmF3X2VsZW1lbnQpIC0gIigiCi0kICAgICBpZiBmJGVkaXQobmFtZSwiVVBDQVNFIikgLm5lcy4gbmFtZSB0aGVuIC0KLSAgICAgICAgICB3cml0ZSBjYXNlX3ZlY3RvciBmJGZhbygiIHN5bWJvbF92ZWN0b3I9KCFBUy8hQVM9REFUQSkiLCAtCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBmJGVkaXQobmFtZSwiVVBDQVNFIiksIG5hbWUpCi0kIGVuZGlmCi0kIGdvdG8gcmF3bG9vcAotJCBFTkRfUkFXTE9PUDoKLSQgY2xvc2UgcmF3X3ZlY3RvcgotJCBjbG9zZSBjYXNlX3ZlY3RvcgotJCBkZWxldGUgYS50bXA7KixiLnRtcDsqLGMudG1wOyosZC50bXA7KixlLnRtcDsqLGYudG1wOyosZy50bXA7KgotJCBpZiBmJHNlYXJjaCgieC50bXAiKSAubmVzLiAiIiAtCi0JdGhlbiAkIGRlbGV0ZSB4LnRtcDsqCi0kIQotJCBFWElUX0FBOgotJCBpZiBWIHRoZW4gc2V0IHZlcmlmeQotJCBlbmRzdWJyb3V0aW5lCi0kIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCEKICQhIFdyaXRlIGNvbmZpZ3VyYXRpb24gdG8gYm90aCBwZXJtYW5lbnQgYW5kIHRlbXBvcmFyeSBjb25maWcgZmlsZQogJCEKICQhIFZlcnNpb24gaGlzdG9yeQpAQCAtODAyLDMgKzcxNSwxNTMgQEAKICQgIGNsb3NlIGNvbmZoCiAkRU5EU1VCUk9VVElORQogJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBBbmFseXplIHRoZSBwcm9qZWN0IG1hcCBmaWxlIGFuZCBjcmVhdGUgdGhlIHN5bWJvbCB2ZWN0b3IgZm9yIGEgc2hhcmVhYmxlCiskISBpbWFnZSBmcm9tIGl0CiskIQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMTIwMTI4IEZpcnN0IHZlcnNpb24KKyQhIDAuMDIgMjAxMjAyMjYgQWRkIHByZS1sb2FkIGxvZ2ljCiskIQorJCBNQVBfMl9TSE9QVDogU3Vicm91dGluZQorJCEKKyQgU0FZIDo9ICJXUklURV8gU1lTJE9VVFBVVCIKKyQhCiskIElGIEYkU0VBUkNIKCInJ1AxJyIpIC5FUVMuICIiCiskIFRIRU4KKyQgICAgU0FZICJNQVBfMl9TSE9QVC1FLU5PU1VDSEZJTEU6ICBFcnJvciwgaW5wdXRmaWxlICcncDEnIG5vdCBhdmFpbGFibGUiCiskICAgIGdvdG8gZXhpdF9tMnMKKyQgRU5ESUYKKyQgSUYgIicnUDInIiAuRVFTLiAiIgorJCBUSEVOCiskICAgIFNBWSAiTUFQXzJfU0hPUFQ6ICBFcnJvciwgbm8gb3V0cHV0IGZpbGUgcHJvdmlkZWQiCiskICAgIGdvdG8gZXhpdF9tMnMKKyQgRU5ESUYKKyQhCiskIG1vZHVsZTEgPSAiZGVmbGF0ZSNkZWZsYXRlRW5kI2RlZmxhdGVJbml0XyNkZWZsYXRlUGFyYW1zI2RlZmxhdGVTZXREaWN0aW9uYXJ5IgorJCBtb2R1bGUyID0gImd6Y2xvc2UjZ3plcnJvciNnemdldGMjZ3pnZXRzI2d6b3BlbiNnenByaW50ZiNnenB1dGMjZ3pwdXRzI2d6cmVhZCIKKyQgbW9kdWxlMyA9ICJnenNlZWsjZ3p0ZWxsI2luZmxhdGUjaW5mbGF0ZUVuZCNpbmZsYXRlSW5pdF8jaW5mbGF0ZVNldERpY3Rpb25hcnkiCiskIG1vZHVsZTQgPSAiaW5mbGF0ZVN5bmMjdW5jb21wcmVzcyN6bGliVmVyc2lvbiNjb21wcmVzcyIKKyQgb3Blbi9yZWFkIG1hcCAncDEKKyQgaWYgYXhwIC5vci4gaWE2NAorJCB0aGVuCiskICAgICBvcGVuL3dyaXRlIGFvcHQgYS5vcHQKKyQgICAgIG9wZW4vd3JpdGUgYm9wdCBiLm9wdAorJCAgICAgd3JpdGUgYW9wdCAiIENBU0VfU0VOU0lUSVZFPVlFUyIKKyQgICAgIHdyaXRlIGJvcHQgIlNZTUJPTF9WRUNUT1I9ICgtIgorJCAgICAgbW9kX3N5bV9udW0gPSAxCiskIE1PRF9TWU1fTE9PUDoKKyQgICAgIGlmIGYkdHlwZShtb2R1bGUnbW9kX3N5bV9udW0nKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICAgIG1vZF9pbiA9IDAKKyQgTU9EX1NZTV9JTjoKKyQgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZWxlbWVudChtb2RfaW4sICIjIiwgbW9kdWxlJ21vZF9zeW1fbnVtJykKKyQgICAgICAgICBpZiBzaGFyZWRfcHJvYyAubmVzLiAiIyIKKyQgICAgICAgICB0aGVuCiskICAgICAgICAgICAgIHdyaXRlIGFvcHQgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLC0KKyAgICAgICAgCQkgICAgICAgZiRlZGl0KHNoYXJlZF9wcm9jLCJ1cGNhc2UiKSxzaGFyZWRfcHJvYykKKyQgICAgICAgICAgICAgd3JpdGUgYm9wdCBmJGZhbygiIUFTPVBST0NFRFVSRSwtIixzaGFyZWRfcHJvYykKKyQgICAgICAgICAgICAgbW9kX2luID0gbW9kX2luICsgMQorJCAgICAgICAgICAgICBnb3RvIG1vZF9zeW1faW4KKyQgICAgICAgICBlbmRpZgorJCAgICAgICAgIG1vZF9zeW1fbnVtID0gbW9kX3N5bV9udW0gKyAxCiskICAgICAgICAgZ290byBtb2Rfc3ltX2xvb3AKKyQgICAgIGVuZGlmCiskTUFQX0xPT1A6CiskICAgICByZWFkL2VuZD1tYXBfZW5kIG1hcCBsaW5lCiskICAgICBpZiAoZiRsb2NhdGUoInsiLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSkgLm9yLiAtCisgICAgICAgICAoZiRsb2NhdGUoImdsb2JhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpKQorJCAgICAgdGhlbgorJCAgICAgICAgIHByb2MgPSB0cnVlCiskICAgICAgICAgZ290byBtYXBfbG9vcAorJCAgICAgZW5kaWYKKyQgICAgIGlmIGYkbG9jYXRlKCJ9IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIGlmIGYkbG9jYXRlKCJsb2NhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICBpZiBwcm9jCiskICAgICB0aGVuCiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVkaXQobGluZSwiY29sbGFwc2UiKQorJCAgICAgICAgIGNob3Bfc2VtaSA9IGYkbG9jYXRlKCI7Iiwgc2hhcmVkX3Byb2MpCiskICAgICAgICAgaWYgY2hvcF9zZW1pIC5sdC4gZiRsZW5ndGgoc2hhcmVkX3Byb2MpIHRoZW4gLQorICAgICAgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZXh0cmFjdCgwLCBjaG9wX3NlbWksIHNoYXJlZF9wcm9jKQorJCAgICAgICAgIHdyaXRlIGFvcHQgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLC0KKyAgICAgICAgCQkJIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIiksc2hhcmVkX3Byb2MpCiskICAgICAgICAgd3JpdGUgYm9wdCBmJGZhbygiIUFTPVBST0NFRFVSRSwtIixzaGFyZWRfcHJvYykKKyQgICAgIGVuZGlmCiskICAgICBnb3RvIG1hcF9sb29wCiskTUFQX0VORDoKKyQgICAgIGNsb3NlL25vbG9nIGFvcHQKKyQgICAgIGNsb3NlL25vbG9nIGJvcHQKKyQgICAgIG9wZW4vYXBwZW5kIGxpYm9wdCAncDInCiskICAgICBvcGVuL3JlYWQgYW9wdCBhLm9wdAorJCAgICAgb3Blbi9yZWFkIGJvcHQgYi5vcHQKKyRBTE9PUDoKKyQgICAgIHJlYWQvZW5kPWFsb29wX2VuZCBhb3B0IGxpbmUKKyQgICAgIHdyaXRlIGxpYm9wdCBsaW5lCiskICAgICBnb3RvIGFsb29wCiskQUxPT1BfRU5EOgorJCAgICAgY2xvc2Uvbm9sb2cgYW9wdAorJCAgICAgc3YgPSAiIgorJEJMT09QOgorJCAgICAgcmVhZC9lbmQ9Ymxvb3BfZW5kIGJvcHQgc3ZuCiskICAgICBpZiAoc3ZuLm5lcy4iIikKKyQgICAgIHRoZW4KKyQgICAgICAgIGlmIChzdi5uZXMuIiIpIHRoZW4gd3JpdGUgbGlib3B0IHN2CiskICAgICAgICBzdiA9IHN2bgorJCAgICAgZW5kaWYKKyQgICAgIGdvdG8gYmxvb3AKKyRCTE9PUF9FTkQ6CiskICAgICB3cml0ZSBsaWJvcHQgZiRleHRyYWN0KDAsZiRsZW5ndGgoc3YpLTIsc3YpLCAiLSIKKyQgICAgIHdyaXRlIGxpYm9wdCAiKSIKKyQgICAgIGNsb3NlL25vbG9nIGJvcHQKKyQgICAgIGRlbGV0ZS9ub2xvZy9ub2NvbmYgYS5vcHQ7KixiLm9wdDsqCiskIGVsc2UKKyQgICAgIGlmIHZheAorJCAgICAgdGhlbgorJCAgICAgb3Blbi9hcHBlbmQgbGlib3B0ICdwMicKKyQgICAgIG1vZF9zeW1fbnVtID0gMQorJCBWTU9EX1NZTV9MT09QOgorJCAgICAgaWYgZiR0eXBlKG1vZHVsZSdtb2Rfc3ltX251bScpIC5uZXMuICIiCiskICAgICB0aGVuCiskICAgICAgICAgbW9kX2luID0gMAorJCBWTU9EX1NZTV9JTjoKKyQgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZWxlbWVudChtb2RfaW4sICIjIiwgbW9kdWxlJ21vZF9zeW1fbnVtJykKKyQgICAgICAgICBpZiBzaGFyZWRfcHJvYyAubmVzLiAiIyIKKyQgICAgICAgICB0aGVuCiskICAgICAJICAgICAgd3JpdGUgbGlib3B0IGYkZmFvKCJVTklWRVJTQUw9IUFTIiwtCisgICAgICAJICAJCQkgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIikpCiskICAgICAgICAgICAgIG1vZF9pbiA9IG1vZF9pbiArIDEKKyQgICAgICAgICAgICAgZ290byB2bW9kX3N5bV9pbgorJCAgICAgICAgIGVuZGlmCiskICAgICAgICAgbW9kX3N5bV9udW0gPSBtb2Rfc3ltX251bSArIDEKKyQgICAgICAgICBnb3RvIHZtb2Rfc3ltX2xvb3AKKyQgICAgIGVuZGlmCiskVk1BUF9MT09QOgorJCAgICAgCSAgcmVhZC9lbmQ9dm1hcF9lbmQgbWFwIGxpbmUKKyQgICAgIAkgIGlmIChmJGxvY2F0ZSgieyIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpKSAub3IuIC0KKyAgIAkgICAgICAoZiRsb2NhdGUoImdsb2JhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpKQorJCAgICAgCSAgdGhlbgorJCAgICAgCSAgICAgIHByb2MgPSB0cnVlCiskICAgICAJICAgICAgZ290byB2bWFwX2xvb3AKKyQgICAgIAkgIGVuZGlmCiskICAgICAJICBpZiBmJGxvY2F0ZSgifSIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICAJICBpZiBmJGxvY2F0ZSgibG9jYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgCSAgaWYgcHJvYworJCAgICAgCSAgdGhlbgorJCAgICAgCSAgICAgIHNoYXJlZF9wcm9jID0gZiRlZGl0KGxpbmUsImNvbGxhcHNlIikKKyQgICAgIAkgICAgICBjaG9wX3NlbWkgPSBmJGxvY2F0ZSgiOyIsIHNoYXJlZF9wcm9jKQorJCAgICAgCSAgICAgIGlmIGNob3Bfc2VtaSAubHQuIGYkbGVuZ3RoKHNoYXJlZF9wcm9jKSB0aGVuIC0KKyAgICAgIAkgIAkgIHNoYXJlZF9wcm9jID0gZiRleHRyYWN0KDAsIGNob3Bfc2VtaSwgc2hhcmVkX3Byb2MpCiskICAgICAJICAgICAgd3JpdGUgbGlib3B0IGYkZmFvKCJVTklWRVJTQUw9IUFTIiwtCisgICAgICAJICAJCQkgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIikpCiskICAgICAJICBlbmRpZgorJCAgICAgCSAgZ290byB2bWFwX2xvb3AKKyRWTUFQX0VORDoKKyQgICAgIGVsc2UKKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJVbmtub3duIEFyY2hpdGVjdHVyZSAoTm90IFZBWCwgQVhQLCBvciBJQTY0KSIKKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJObyBvcHRpb25zIGZpbGUgY3JlYXRlZCIKKyQgICAgIGVuZGlmCiskIGVuZGlmCiskIEVYSVRfTTJTOgorJCBjbG9zZS9ub2xvZyBtYXAKKyQgY2xvc2Uvbm9sb2cgbGlib3B0CiskIGVuZHN1YnJvdXRpbmUKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jIGIvTW9kdWxlcy96bGliL21pbmlnemlwLmMKaW5kZXggOTgyNWNjYy4uYjMwMjVhNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL21pbmlnemlwLmMKKysrIGIvTW9kdWxlcy96bGliL21pbmlnemlwLmMKQEAgLTEsNSArMSw1IEBACiAvKiBtaW5pZ3ppcC5jIC0tIHNpbXVsYXRlIGd6aXAgdXNpbmcgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwLCAyMDExIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNDAsNiArNDAsMTAgQEAKICMgIGRlZmluZSBTRVRfQklOQVJZX01PREUoZmlsZSkKICNlbmRpZgogCisjaWZkZWYgX01TQ19WRVIKKyMgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCiAjaWZkZWYgVk1TCiAjICBkZWZpbmUgdW5saW5rIGRlbGV0ZQogIyAgZGVmaW5lIEdaX1NVRkZJWCAiLWd6IgpAQCAtMTM4LDYgKzE0MiwxOTcgQEAKICMgIGRlZmluZSBsb2NhbAogI2VuZGlmCiAKKyNpZmRlZiBaX1NPTE8KKy8qIGZvciBaX1NPTE8sIGNyZWF0ZSBzaW1wbGlmaWVkIGd6KiBmdW5jdGlvbnMgdXNpbmcgZGVmbGF0ZSBhbmQgaW5mbGF0ZSAqLworCisjaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoWl9MQVJHRSkKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgdW5saW5rKCkgKi8KKyNlbmRpZgorCit2b2lkICpteWFsbG9jIE9GKCh2b2lkICosIHVuc2lnbmVkLCB1bnNpZ25lZCkpOwordm9pZCBteWZyZWUgT0YoKHZvaWQgKiwgdm9pZCAqKSk7CisKK3ZvaWQgKm15YWxsb2MocSwgbiwgbSkKKyAgICB2b2lkICpxOworICAgIHVuc2lnbmVkIG4sIG07Cit7CisgICAgcSA9IFpfTlVMTDsKKyAgICByZXR1cm4gY2FsbG9jKG4sIG0pOworfQorCit2b2lkIG15ZnJlZShxLCBwKQorICAgIHZvaWQgKnEsICpwOworeworICAgIHEgPSBaX05VTEw7CisgICAgZnJlZShwKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgZ3pGaWxlX3MgeworICAgIEZJTEUgKmZpbGU7CisgICAgaW50IHdyaXRlOworICAgIGludCBlcnI7CisgICAgY2hhciAqbXNnOworICAgIHpfc3RyZWFtIHN0cm07Cit9ICpnekZpbGU7CisKK2d6RmlsZSBnem9wZW4gT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitnekZpbGUgZ3pkb3BlbiBPRigoaW50LCBjb25zdCBjaGFyICopKTsKK2d6RmlsZSBnel9vcGVuIE9GKChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSk7CisKK2d6RmlsZSBnem9wZW4ocGF0aCwgbW9kZSkKK2NvbnN0IGNoYXIgKnBhdGg7Citjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKHBhdGgsIC0xLCBtb2RlKTsKK30KKworZ3pGaWxlIGd6ZG9wZW4oZmQsIG1vZGUpCitpbnQgZmQ7Citjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKE5VTEwsIGZkLCBtb2RlKTsKK30KKworZ3pGaWxlIGd6X29wZW4ocGF0aCwgZmQsIG1vZGUpCisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBpbnQgZmQ7CisgICAgY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICBnekZpbGUgZ3o7CisgICAgaW50IHJldDsKKworICAgIGd6ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3pGaWxlX3MpKTsKKyAgICBpZiAoZ3ogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZ3otPndyaXRlID0gc3RyY2hyKG1vZGUsICd3JykgIT0gTlVMTDsKKyAgICBnei0+c3RybS56YWxsb2MgPSBteWFsbG9jOworICAgIGd6LT5zdHJtLnpmcmVlID0gbXlmcmVlOworICAgIGd6LT5zdHJtLm9wYXF1ZSA9IFpfTlVMTDsKKyAgICBpZiAoZ3otPndyaXRlKQorICAgICAgICByZXQgPSBkZWZsYXRlSW5pdDIoJihnei0+c3RybSksIC0xLCA4LCAxNSArIDE2LCA4LCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZ3otPnN0cm0ubmV4dF9pbiA9IDA7CisgICAgICAgIGd6LT5zdHJtLmF2YWlsX2luID0gWl9OVUxMOworICAgICAgICByZXQgPSBpbmZsYXRlSW5pdDIoJihnei0+c3RybSksIDE1ICsgMTYpOworICAgIH0KKyAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgZnJlZShneik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBnei0+ZmlsZSA9IHBhdGggPT0gTlVMTCA/IGZkb3BlbihmZCwgZ3otPndyaXRlID8gIndiIiA6ICJyYiIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcGVuKHBhdGgsIGd6LT53cml0ZSA/ICJ3YiIgOiAicmIiKTsKKyAgICBpZiAoZ3otPmZpbGUgPT0gTlVMTCkgeworICAgICAgICBnei0+d3JpdGUgPyBkZWZsYXRlRW5kKCYoZ3otPnN0cm0pKSA6IGluZmxhdGVFbmQoJihnei0+c3RybSkpOworICAgICAgICBmcmVlKGd6KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGd6LT5lcnIgPSAwOworICAgIGd6LT5tc2cgPSAiIjsKKyAgICByZXR1cm4gZ3o7Cit9CisKK2ludCBnendyaXRlIE9GKChnekZpbGUsIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQpKTsKKworaW50IGd6d3JpdGUoZ3osIGJ1ZiwgbGVuKQorICAgIGd6RmlsZSBnejsKKyAgICBjb25zdCB2b2lkICpidWY7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIHpfc3RyZWFtICpzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgb3V0W0JVRkxFTl07CisKKyAgICBpZiAoZ3ogPT0gTlVMTCB8fCAhZ3otPndyaXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgc3RybS0+bmV4dF9pbiA9ICh2b2lkICopYnVmOworICAgIHN0cm0tPmF2YWlsX2luID0gbGVuOworICAgIGRvIHsKKyAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBvdXQ7CisgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IEJVRkxFTjsKKyAgICAgICAgKHZvaWQpZGVmbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgZndyaXRlKG91dCwgMSwgQlVGTEVOIC0gc3RybS0+YXZhaWxfb3V0LCBnei0+ZmlsZSk7CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ID09IDApOworICAgIHJldHVybiBsZW47Cit9CisKK2ludCBnenJlYWQgT0YoKGd6RmlsZSwgdm9pZCAqLCB1bnNpZ25lZCkpOworCitpbnQgZ3pyZWFkKGd6LCBidWYsIGxlbikKKyAgICBnekZpbGUgZ3o7CisgICAgdm9pZCAqYnVmOworICAgIHVuc2lnbmVkIGxlbjsKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGdvdDsKKyAgICB1bnNpZ25lZCBjaGFyIGluWzFdOworICAgIHpfc3RyZWFtICpzdHJtOworCisgICAgaWYgKGd6ID09IE5VTEwgfHwgZ3otPndyaXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoZ3otPmVycikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIHN0cm0tPm5leHRfb3V0ID0gKHZvaWQgKilidWY7CisgICAgc3RybS0+YXZhaWxfb3V0ID0gbGVuOworICAgIGRvIHsKKyAgICAgICAgZ290ID0gZnJlYWQoaW4sIDEsIDEsIGd6LT5maWxlKTsKKyAgICAgICAgaWYgKGdvdCA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBpbjsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAxOworICAgICAgICByZXQgPSBpbmZsYXRlKHN0cm0sIFpfTk9fRkxVU0gpOworICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikgeworICAgICAgICAgICAgZ3otPmVyciA9IFpfREFUQV9FUlJPUjsKKyAgICAgICAgICAgIGd6LT5tc2cgPSBzdHJtLT5tc2c7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VORCkKKyAgICAgICAgICAgIGluZmxhdGVSZXNldChzdHJtKTsKKyAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQpOworICAgIHJldHVybiBsZW4gLSBzdHJtLT5hdmFpbF9vdXQ7Cit9CisKK2ludCBnemNsb3NlIE9GKChnekZpbGUpKTsKKworaW50IGd6Y2xvc2UoZ3opCisgICAgZ3pGaWxlIGd6OworeworICAgIHpfc3RyZWFtICpzdHJtOworICAgIHVuc2lnbmVkIGNoYXIgb3V0W0JVRkxFTl07CisKKyAgICBpZiAoZ3ogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBpZiAoZ3otPndyaXRlKSB7CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBaX05VTEw7CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBvdXQ7CisgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBCVUZMRU47CisgICAgICAgICAgICAodm9pZClkZWZsYXRlKHN0cm0sIFpfRklOSVNIKTsKKyAgICAgICAgICAgIGZ3cml0ZShvdXQsIDEsIEJVRkxFTiAtIHN0cm0tPmF2YWlsX291dCwgZ3otPmZpbGUpOworICAgICAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgPT0gMCk7CisgICAgICAgIGRlZmxhdGVFbmQoc3RybSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgaW5mbGF0ZUVuZChzdHJtKTsKKyAgICBmY2xvc2UoZ3otPmZpbGUpOworICAgIGZyZWUoZ3opOworICAgIHJldHVybiBaX09LOworfQorCitjb25zdCBjaGFyICpnemVycm9yIE9GKChnekZpbGUsIGludCAqKSk7CisKK2NvbnN0IGNoYXIgKmd6ZXJyb3IoZ3osIGVycikKKyAgICBnekZpbGUgZ3o7CisgICAgaW50ICplcnI7Cit7CisgICAgKmVyciA9IGd6LT5lcnI7CisgICAgcmV0dXJuIGd6LT5tc2c7Cit9CisKKyNlbmRpZgorCiBjaGFyICpwcm9nOwogCiB2b2lkIGVycm9yICAgICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKm1zZykpOwpAQCAtMjcyLDggKzQ2NywxMiBAQAogICAgICAgICBleGl0KDEpOwogICAgIH0KIAorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYob3V0ZmlsZSwgc2l6ZW9mKG91dGZpbGUpLCAiJXMlcyIsIGZpbGUsIEdaX1NVRkZJWCk7CisjZWxzZQogICAgIHN0cmNweShvdXRmaWxlLCBmaWxlKTsKICAgICBzdHJjYXQob3V0ZmlsZSwgR1pfU1VGRklYKTsKKyNlbmRpZgogCiAgICAgaW4gPSBmb3BlbihmaWxlLCAicmIiKTsKICAgICBpZiAoaW4gPT0gTlVMTCkgewpAQCAtMzA4LDcgKzUwNywxMSBAQAogICAgICAgICBleGl0KDEpOwogICAgIH0KIAorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgZmlsZSk7CisjZWxzZQogICAgIHN0cmNweShidWYsIGZpbGUpOworI2VuZGlmCiAKICAgICBpZiAobGVuID4gU1VGRklYX0xFTiAmJiBzdHJjbXAoZmlsZStsZW4tU1VGRklYX0xFTiwgR1pfU1VGRklYKSA9PSAwKSB7CiAgICAgICAgIGluZmlsZSA9IGZpbGU7CkBAIC0zMTcsNyArNTIwLDExIEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgb3V0ZmlsZSA9IGZpbGU7CiAgICAgICAgIGluZmlsZSA9IGJ1ZjsKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgICAgICBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJXMiLCBHWl9TVUZGSVgpOworI2Vsc2UKICAgICAgICAgc3RyY2F0KGluZmlsZSwgR1pfU1VGRklYKTsKKyNlbmRpZgogICAgIH0KICAgICBpbiA9IGd6b3BlbihpbmZpbGUsICJyYiIpOwogICAgIGlmIChpbiA9PSBOVUxMKSB7CkBAIC0zNTUsNyArNTYyLDExIEBACiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgY2hhciAqYm5hbWUsIG91dG1vZGVbMjBdOwogCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihvdXRtb2RlLCBzaXplb2Yob3V0bW9kZSksICIlcyIsICJ3YjYgIik7CisjZWxzZQogICAgIHN0cmNweShvdXRtb2RlLCAid2I2ICIpOworI2VuZGlmCiAKICAgICBwcm9nID0gYXJndlswXTsKICAgICBibmFtZSA9IHN0cnJjaHIoYXJndlswXSwgJy8nKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi90cmVlcy5jIGIvTW9kdWxlcy96bGliL3RyZWVzLmMKaW5kZXggNTZlOWJiMS4uMWZkNzc1OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3RyZWVzLmMKKysrIGIvTW9kdWxlcy96bGliL3RyZWVzLmMKQEAgLTEsNSArMSw1IEBACiAvKiB0cmVlcy5jIC0tIG91dHB1dCBkZWZsYXRlZCBkYXRhIHVzaW5nIEh1ZmZtYW4gY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBKZWFuLWxvdXAgR2FpbGx5CiAgKiBkZXRlY3RfZGF0YV90eXBlKCkgZnVuY3Rpb24gcHJvdmlkZWQgZnJlZWx5IGJ5IENvc21pbiBUcnV0YSwgMjAwNgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCkBAIC03NCwxMSArNzQsNiBAQAogICogcHJvYmFiaWxpdHksIHRvIGF2b2lkIHRyYW5zbWl0dGluZyB0aGUgbGVuZ3RocyBmb3IgdW51c2VkIGJpdCBsZW5ndGggY29kZXMuCiAgKi8KIAotI2RlZmluZSBCdWZfc2l6ZSAoOCAqIDIqc2l6ZW9mKGNoYXIpKQotLyogTnVtYmVyIG9mIGJpdHMgdXNlZCB3aXRoaW4gYmlfYnVmLiAoYmlfYnVmIG1pZ2h0IGJlIGltcGxlbWVudGVkIG9uCi0gKiBtb3JlIHRoYW4gMTYgYml0cyBvbiBzb21lIHN5c3RlbXMuKQotICovCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogTG9jYWwgZGF0YS4gVGhlc2UgYXJlIGluaXRpYWxpemVkIG9ubHkgb25jZS4KICAqLwpAQCAtMTUxLDggKzE0Niw4IEBACiBsb2NhbCBpbnQgIGJ1aWxkX2JsX3RyZWUgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiBsb2NhbCB2b2lkIHNlbmRfYWxsX3RyZWVzIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgbGNvZGVzLCBpbnQgZGNvZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsY29kZXMpKTsKLWxvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGN0X2RhdGEgKmx0cmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RfZGF0YSAqZHRyZWUpKTsKK2xvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNvbnN0IGN0X2RhdGEgKmx0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3RfZGF0YSAqZHRyZWUpKTsKIGxvY2FsIGludCAgZGV0ZWN0X2RhdGFfdHlwZSBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdW5zaWduZWQgYmlfcmV2ZXJzZSBPRigodW5zaWduZWQgdmFsdWUsIGludCBsZW5ndGgpKTsKIGxvY2FsIHZvaWQgYmlfd2luZHVwICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKQEAgLTM5OSw3ICszOTQsNiBAQAogCiAgICAgcy0+YmlfYnVmID0gMDsKICAgICBzLT5iaV92YWxpZCA9IDA7Ci0gICAgcy0+bGFzdF9lb2JfbGVuID0gODsgLyogZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZSAqLwogI2lmZGVmIERFQlVHCiAgICAgcy0+Y29tcHJlc3NlZF9sZW4gPSAwTDsKICAgICBzLT5iaXRzX3NlbnQgPSAwTDsKQEAgLTg4MywxNSArODc3LDE3IEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogRmx1c2ggdGhlIGJpdHMgaW4gdGhlIGJpdCBidWZmZXIgdG8gcGVuZGluZyBvdXRwdXQgKGxlYXZlcyBhdCBtb3N0IDcgYml0cykKKyAqLwordm9pZCBaTElCX0lOVEVSTkFMIF90cl9mbHVzaF9iaXRzKHMpCisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKK3sKKyAgICBiaV9mbHVzaChzKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBTZW5kIG9uZSBlbXB0eSBzdGF0aWMgYmxvY2sgdG8gZ2l2ZSBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlLgogICogVGhpcyB0YWtlcyAxMCBiaXRzLCBvZiB3aGljaCA3IG1heSByZW1haW4gaW4gdGhlIGJpdCBidWZmZXIuCi0gKiBUaGUgY3VycmVudCBpbmZsYXRlIGNvZGUgcmVxdWlyZXMgOSBiaXRzIG9mIGxvb2thaGVhZC4gSWYgdGhlCi0gKiBsYXN0IHR3byBjb2RlcyBmb3IgdGhlIHByZXZpb3VzIGJsb2NrIChyZWFsIGNvZGUgcGx1cyBFT0IpIHdlcmUgY29kZWQKLSAqIG9uIDUgYml0cyBvciBsZXNzLCBpbmZsYXRlIG1heSBoYXZlIG9ubHkgNSszIGJpdHMgb2YgbG9va2FoZWFkIHRvIGRlY29kZQotICogdGhlIGxhc3QgcmVhbCBjb2RlLiBJbiB0aGlzIGNhc2Ugd2Ugc2VuZCB0d28gZW1wdHkgc3RhdGljIGJsb2NrcyBpbnN0ZWFkCi0gKiBvZiBvbmUuIChUaGVyZSBhcmUgbm8gcHJvYmxlbXMgaWYgdGhlIHByZXZpb3VzIGJsb2NrIGlzIHN0b3JlZCBvciBmaXhlZC4pCi0gKiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgd2UgYXNzdW1lIHRoZSB3b3JzdCBjYXNlIG9mIGxhc3QgcmVhbCBjb2RlIGVuY29kZWQKLSAqIG9uIG9uZSBiaXQgb25seS4KICAqLwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9hbGlnbihzKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CkBAIC05MDIsMjAgKzg5OCw2IEBACiAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMTBMOyAvKiAzIGZvciBibG9jayB0eXBlLCA3IGZvciBFT0IgKi8KICNlbmRpZgogICAgIGJpX2ZsdXNoKHMpOwotICAgIC8qIE9mIHRoZSAxMCBiaXRzIGZvciB0aGUgZW1wdHkgYmxvY2ssIHdlIGhhdmUgYWxyZWFkeSBzZW50Ci0gICAgICogKDEwIC0gYmlfdmFsaWQpIGJpdHMuIFRoZSBsb29rYWhlYWQgZm9yIHRoZSBsYXN0IHJlYWwgY29kZSAoYmVmb3JlCi0gICAgICogdGhlIEVPQiBvZiB0aGUgcHJldmlvdXMgYmxvY2spIHdhcyB0aHVzIGF0IGxlYXN0IG9uZSBwbHVzIHRoZSBsZW5ndGgKLSAgICAgKiBvZiB0aGUgRU9CIHBsdXMgd2hhdCB3ZSBoYXZlIGp1c3Qgc2VudCBvZiB0aGUgZW1wdHkgc3RhdGljIGJsb2NrLgotICAgICAqLwotICAgIGlmICgxICsgcy0+bGFzdF9lb2JfbGVuICsgMTAgLSBzLT5iaV92YWxpZCA8IDkpIHsKLSAgICAgICAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUzw8MSwgMyk7Ci0gICAgICAgIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIHN0YXRpY19sdHJlZSk7Ci0jaWZkZWYgREVCVUcKLSAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMTBMOwotI2VuZGlmCi0gICAgICAgIGJpX2ZsdXNoKHMpOwotICAgIH0KLSAgICBzLT5sYXN0X2VvYl9sZW4gPSA3OwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTk5MCw3ICs5NzIsOCBAQAogICAgIH0gZWxzZSBpZiAocy0+c3RyYXRlZ3kgPT0gWl9GSVhFRCB8fCBzdGF0aWNfbGVuYiA9PSBvcHRfbGVuYikgewogI2VuZGlmCiAgICAgICAgIHNlbmRfYml0cyhzLCAoU1RBVElDX1RSRUVTPDwxKStsYXN0LCAzKTsKLSAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGN0X2RhdGEgKilzdGF0aWNfbHRyZWUsIChjdF9kYXRhICopc3RhdGljX2R0cmVlKTsKKyAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGNvbnN0IGN0X2RhdGEgKilzdGF0aWNfbHRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjdF9kYXRhICopc3RhdGljX2R0cmVlKTsKICNpZmRlZiBERUJVRwogICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsgcy0+c3RhdGljX2xlbjsKICNlbmRpZgpAQCAtOTk4LDcgKzk4MSw4IEBACiAgICAgICAgIHNlbmRfYml0cyhzLCAoRFlOX1RSRUVTPDwxKStsYXN0LCAzKTsKICAgICAgICAgc2VuZF9hbGxfdHJlZXMocywgcy0+bF9kZXNjLm1heF9jb2RlKzEsIHMtPmRfZGVzYy5tYXhfY29kZSsxLAogICAgICAgICAgICAgICAgICAgICAgICBtYXhfYmxpbmRleCsxKTsKLSAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGN0X2RhdGEgKilzLT5keW5fbHRyZWUsIChjdF9kYXRhICopcy0+ZHluX2R0cmVlKTsKKyAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGNvbnN0IGN0X2RhdGEgKilzLT5keW5fbHRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2R0cmVlKTsKICNpZmRlZiBERUJVRwogICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsgcy0+b3B0X2xlbjsKICNlbmRpZgpAQCAtMTA3NSw4ICsxMDU5LDggQEAKICAqLwogbG9jYWwgdm9pZCBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICBjdF9kYXRhICpsdHJlZTsgLyogbGl0ZXJhbCB0cmVlICovCi0gICAgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi8KKyAgICBjb25zdCBjdF9kYXRhICpsdHJlZTsgLyogbGl0ZXJhbCB0cmVlICovCisgICAgY29uc3QgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi8KIHsKICAgICB1bnNpZ25lZCBkaXN0OyAgICAgIC8qIGRpc3RhbmNlIG9mIG1hdGNoZWQgc3RyaW5nICovCiAgICAgaW50IGxjOyAgICAgICAgICAgICAvKiBtYXRjaCBsZW5ndGggb3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRpc3QgPT0gMCkgKi8KQEAgLTExMTgsNyArMTEwMiw2IEBACiAgICAgfSB3aGlsZSAobHggPCBzLT5sYXN0X2xpdCk7CiAKICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBsdHJlZSk7Ci0gICAgcy0+bGFzdF9lb2JfbGVuID0gbHRyZWVbRU5EX0JMT0NLXS5MZW47CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTIyNiw3ICsxMjA5LDYgQEAKICAgICBpbnQgICAgICBoZWFkZXI7ICAvKiB0cnVlIGlmIGJsb2NrIGhlYWRlciBtdXN0IGJlIHdyaXR0ZW4gKi8KIHsKICAgICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovCi0gICAgcy0+bGFzdF9lb2JfbGVuID0gODsgLyogZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZSAqLwogCiAgICAgaWYgKGhlYWRlcikgewogICAgICAgICBwdXRfc2hvcnQocywgKHVzaClsZW4pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3VuY29tcHIuYyBiL01vZHVsZXMvemxpYi91bmNvbXByLmMKaW5kZXggYWQ5OGJlMy4uMjQyZTk0OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3VuY29tcHIuYworKysgYi9Nb2R1bGVzL3psaWIvdW5jb21wci5jCkBAIC0zMCw3ICszMCw3IEBACiAgICAgel9zdHJlYW0gc3RyZWFtOwogICAgIGludCBlcnI7CiAKLSAgICBzdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopc291cmNlOworICAgIHN0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CiAgICAgc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc291cmNlTGVuOwogICAgIC8qIENoZWNrIGZvciBzb3VyY2UgPiA2NEsgb24gMTYtYml0IG1hY2hpbmU6ICovCiAgICAgaWYgKCh1TG9uZylzdHJlYW0uYXZhaWxfaW4gIT0gc291cmNlTGVuKSByZXR1cm4gWl9CVUZfRVJST1I7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaCBiL01vZHVsZXMvemxpYi96Y29uZi5oCmluZGV4IDAyY2U1NmMuLjk5ODdhNzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5oCisrKyBiL01vZHVsZXMvemxpYi96Y29uZi5oCkBAIC0xLDUgKzEsNSBAQAogLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE1LDExICsxNSwxMyBAQAogICogdGhpcyBwZXJtYW5lbnRseSBpbiB6Y29uZi5oIHVzaW5nICIuL2NvbmZpZ3VyZSAtLXpwcmVmaXgiLgogICovCiAjaWZkZWYgWl9QUkVGSVggICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX1BSRUZJWF9TRVQKIAogLyogYWxsIGxpbmtlZCBzeW1ib2xzICovCiAjICBkZWZpbmUgX2Rpc3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQogIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQogIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAgICAgICB6X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9iaXRzICAgICAgICB6X190cl9mbHVzaF9iaXRzCiAjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrCiAjICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKICMgIGRlZmluZSBfdHJfc3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCkBAIC0yNyw5ICsyOSwxMSBAQAogIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgICAgICAgel9hZGxlcjMyX2NvbWJpbmUKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmU2NCAgICAgel9hZGxlcjMyX2NvbWJpbmU2NAotIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCi0jICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCi0jICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKKyMgICAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgorIyAgICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgZW5kaWYKICMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lNjQgICAgICAgel9jcmMzMl9jb21iaW5lNjQKQEAgLTQwLDQ0ICs0NCw1MyBAQAogIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KICMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVBlbmRpbmcgICAgICAgIHpfZGVmbGF0ZVBlbmRpbmcKICMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKICMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXRLZWVwICAgICAgel9kZWZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKICMgIGRlZmluZSBkZWZsYXRlU2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCiAjICBkZWZpbmUgZGVmbGF0ZVR1bmUgICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKICMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKLSMgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgotIyAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAotIyAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCi0jICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKLSMgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCi0jICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQotIyAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgotIyAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdwotIyAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0Ci0jICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgotIyAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCi0jICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgotIyAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKLSMgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKLSMgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKLSMgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAotIyAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKLSMgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KLSMgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAotIyAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCi0jICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCi0jICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCi0jICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCi0jICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKLSMgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKLSMgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAotIyAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCi0jICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCi0jICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKLSMgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YwotIyAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCisjICAgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgICAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCisjICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgorIyAgICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCisjICAgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgICAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0CisjICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCisjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgorIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICAgIGRlZmluZSBnemdldGNfICAgICAgICAgICAgICAgel9nemdldGNfCisjICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgICAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0CisjICAgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICAgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KKyMgICAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0CisjICAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdworIyAgICBlbmRpZgorIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKKyMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50ZgorIyAgICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCisjICAgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKKyMgICAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAorIyAgICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKKyMgICAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlaworIyAgICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCisjICAgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKKyMgICAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0CisjICAgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YworIyAgICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgZW5kaWYKICMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKICMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZApAQCAtOTIsMTYgKzEwNSwyMiBAQAogIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAogIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDIKICMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKICMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CiAjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAogIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBlbmRpZgogIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotIyAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKLSMgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKKyMgICAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgZW5kaWYKICMgIGRlZmluZSB6bGliQ29tcGlsZUZsYWdzICAgICAgel96bGliQ29tcGlsZUZsYWdzCiAjICBkZWZpbmUgemxpYlZlcnNpb24gICAgICAgICAgIHpfemxpYlZlcnNpb24KIApAQCAtMTExLDcgKzEzMCw5IEBACiAjICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwogIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCiAjICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jCi0jICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgZ3pfaGVhZGVyICAgICAgICAgICAgIHpfZ3pfaGVhZGVyCiAjICBkZWZpbmUgZ3pfaGVhZGVycCAgICAgICAgICAgIHpfZ3pfaGVhZGVycAogIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKQEAgLTE5Nyw2ICsyMTgsMTIgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkKKyMgIGRlZmluZSB6X2NvbnN0IGNvbnN0CisjZWxzZQorIyAgZGVmaW5lIHpfY29uc3QKKyNlbmRpZgorCiAvKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwogI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCiAjICBkZWZpbmUgTk9fRFVNTVlfREVDTApAQCAtMjQzLDYgKzI3MCwxNCBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIFpfQVJHIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN0ZGFyZyAqLworIyAgaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKwogLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKICAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCiAgKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKQEAgLTM1NiwxMiArMzkxLDQ3IEBACiAgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChaX1U0KSAmJiAhZGVmaW5lZChaX1NPTE8pICYmIGRlZmluZWQoU1REQykKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorIyAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQKKyMgIGVsaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcKKyMgIGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIHNob3J0CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBaX1U0CisgICB0eXBlZGVmIFpfVTQgel9jcmNfdDsKKyNlbHNlCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsKKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCiAjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU1REQVJHX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9TVERBUkdfSAorI2VuZGlmCisKICNpZmRlZiBTVERDCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgLyogZm9yIG9mZl90ICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAgZW5kaWYKICNlbmRpZgogCiAvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZApAQCAtMzcwLDIxICs0NDAsMzggQEAKICAqIGJvdGggIiN1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQgIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAwIiBhcwogICogZXF1aXZhbGVudGx5IHJlcXVlc3Rpbmcgbm8gNjQtYml0IG9wZXJhdGlvbnMKICAqLwotI2lmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQorI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCiAjICB1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGlmbmRlZiB6X29mZl90Ci0jICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoWl9IQVZFX1VOSVNURF9IKQorIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisjaWZuZGVmIFpfU09MTworIyAgaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKKyMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNFRUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovCisjICAgIGlmZGVmIFZNUworIyAgICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgICAgZW5kaWYKKyMgICAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIFNFRUtfU0VUCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCiAjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwogIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KQEAgLTM5NCwxOCArNDgxLDE0IEBACiAjICBkZWZpbmUgel9vZmZfdCBsb25nCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFpfTEFSR0U2NCkKICMgIGRlZmluZSB6X29mZjY0X3Qgb2ZmNjRfdAogI2Vsc2UKLSMgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAgIGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4gYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluCmluZGV4IGEyZjcxYjEuLjA0MzAxOWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4KKysrIGIvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgpAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNywxMSArMTcsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjksOSArMzEsMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00Miw0NCArNDYsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTk0LDE2ICsxMDcsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMyw3ICsxMzIsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTksNiArMjIwLDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0NSw2ICsyNzIsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTgsMTIgKzM5Myw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MiwyMSArNDQyLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTYsMTggKzQ4MywxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbiBiL01vZHVsZXMvemxpYi96Y29uZi5oLmluCmluZGV4IDAyY2U1NmMuLjk5ODdhNzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5oLmluCisrKyBiL01vZHVsZXMvemxpYi96Y29uZi5oLmluCkBAIC0xLDUgKzEsNSBAQAogLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE1LDExICsxNSwxMyBAQAogICogdGhpcyBwZXJtYW5lbnRseSBpbiB6Y29uZi5oIHVzaW5nICIuL2NvbmZpZ3VyZSAtLXpwcmVmaXgiLgogICovCiAjaWZkZWYgWl9QUkVGSVggICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX1BSRUZJWF9TRVQKIAogLyogYWxsIGxpbmtlZCBzeW1ib2xzICovCiAjICBkZWZpbmUgX2Rpc3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQogIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQogIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAgICAgICB6X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9iaXRzICAgICAgICB6X190cl9mbHVzaF9iaXRzCiAjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrCiAjICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKICMgIGRlZmluZSBfdHJfc3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCkBAIC0yNyw5ICsyOSwxMSBAQAogIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgICAgICAgel9hZGxlcjMyX2NvbWJpbmUKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmU2NCAgICAgel9hZGxlcjMyX2NvbWJpbmU2NAotIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCi0jICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCi0jICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKKyMgICAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgorIyAgICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgZW5kaWYKICMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lNjQgICAgICAgel9jcmMzMl9jb21iaW5lNjQKQEAgLTQwLDQ0ICs0NCw1MyBAQAogIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KICMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVBlbmRpbmcgICAgICAgIHpfZGVmbGF0ZVBlbmRpbmcKICMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKICMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXRLZWVwICAgICAgel9kZWZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKICMgIGRlZmluZSBkZWZsYXRlU2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCiAjICBkZWZpbmUgZGVmbGF0ZVR1bmUgICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKICMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKLSMgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgotIyAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAotIyAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCi0jICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKLSMgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCi0jICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQotIyAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgotIyAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdwotIyAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0Ci0jICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgotIyAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCi0jICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgotIyAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKLSMgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKLSMgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKLSMgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAotIyAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKLSMgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KLSMgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAotIyAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCi0jICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCi0jICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCi0jICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCi0jICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKLSMgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKLSMgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAotIyAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCi0jICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCi0jICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKLSMgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YwotIyAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCisjICAgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgICAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCisjICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgorIyAgICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCisjICAgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgICAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0CisjICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCisjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgorIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICAgIGRlZmluZSBnemdldGNfICAgICAgICAgICAgICAgel9nemdldGNfCisjICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgICAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0CisjICAgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICAgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KKyMgICAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0CisjICAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdworIyAgICBlbmRpZgorIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKKyMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50ZgorIyAgICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCisjICAgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKKyMgICAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAorIyAgICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKKyMgICAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlaworIyAgICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCisjICAgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKKyMgICAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0CisjICAgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YworIyAgICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgZW5kaWYKICMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKICMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZApAQCAtOTIsMTYgKzEwNSwyMiBAQAogIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAogIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDIKICMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKICMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CiAjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAogIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBlbmRpZgogIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotIyAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKLSMgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKKyMgICAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgZW5kaWYKICMgIGRlZmluZSB6bGliQ29tcGlsZUZsYWdzICAgICAgel96bGliQ29tcGlsZUZsYWdzCiAjICBkZWZpbmUgemxpYlZlcnNpb24gICAgICAgICAgIHpfemxpYlZlcnNpb24KIApAQCAtMTExLDcgKzEzMCw5IEBACiAjICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwogIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCiAjICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jCi0jICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgZ3pfaGVhZGVyICAgICAgICAgICAgIHpfZ3pfaGVhZGVyCiAjICBkZWZpbmUgZ3pfaGVhZGVycCAgICAgICAgICAgIHpfZ3pfaGVhZGVycAogIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKQEAgLTE5Nyw2ICsyMTgsMTIgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkKKyMgIGRlZmluZSB6X2NvbnN0IGNvbnN0CisjZWxzZQorIyAgZGVmaW5lIHpfY29uc3QKKyNlbmRpZgorCiAvKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwogI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCiAjICBkZWZpbmUgTk9fRFVNTVlfREVDTApAQCAtMjQzLDYgKzI3MCwxNCBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIFpfQVJHIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN0ZGFyZyAqLworIyAgaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKwogLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKICAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCiAgKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKQEAgLTM1NiwxMiArMzkxLDQ3IEBACiAgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChaX1U0KSAmJiAhZGVmaW5lZChaX1NPTE8pICYmIGRlZmluZWQoU1REQykKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorIyAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQKKyMgIGVsaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcKKyMgIGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIHNob3J0CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBaX1U0CisgICB0eXBlZGVmIFpfVTQgel9jcmNfdDsKKyNlbHNlCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsKKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCiAjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU1REQVJHX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9TVERBUkdfSAorI2VuZGlmCisKICNpZmRlZiBTVERDCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgLyogZm9yIG9mZl90ICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAgZW5kaWYKICNlbmRpZgogCiAvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZApAQCAtMzcwLDIxICs0NDAsMzggQEAKICAqIGJvdGggIiN1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQgIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAwIiBhcwogICogZXF1aXZhbGVudGx5IHJlcXVlc3Rpbmcgbm8gNjQtYml0IG9wZXJhdGlvbnMKICAqLwotI2lmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQorI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCiAjICB1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGlmbmRlZiB6X29mZl90Ci0jICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoWl9IQVZFX1VOSVNURF9IKQorIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisjaWZuZGVmIFpfU09MTworIyAgaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKKyMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNFRUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovCisjICAgIGlmZGVmIFZNUworIyAgICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgICAgZW5kaWYKKyMgICAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIFNFRUtfU0VUCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCiAjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwogIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KQEAgLTM5NCwxOCArNDgxLDE0IEBACiAjICBkZWZpbmUgel9vZmZfdCBsb25nCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFpfTEFSR0U2NCkKICMgIGRlZmluZSB6X29mZjY0X3Qgb2ZmNjRfdAogI2Vsc2UKLSMgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAgIGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96Y29uZi5pbi5oIGIvTW9kdWxlcy96bGliL3pjb25mLmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYTk0MzEuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy96bGliL3pjb25mLmluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKi8KLQotLyogQCgjKSAkSWQkICovCi0KLSNpZm5kZWYgWkNPTkZfSAotI2RlZmluZSBaQ09ORl9ICi0KLS8qCi0gKiBJZiB5b3UgKnJlYWxseSogbmVlZCBhIHVuaXF1ZSBwcmVmaXggZm9yIGFsbCB0eXBlcyBhbmQgbGlicmFyeSBmdW5jdGlvbnMsCi0gKiBjb21waWxlIHdpdGggLURaX1BSRUZJWC4gVGhlICJzdGFuZGFyZCIgemxpYiBzaG91bGQgYmUgY29tcGlsZWQgd2l0aG91dCBpdC4KLSAqLwotI2lmZGVmIFpfUFJFRklYCi0jICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCi0jICBkZWZpbmUgZGVmbGF0ZSAgICAgICAgICAgICAgIHpfZGVmbGF0ZQotIyAgZGVmaW5lIGRlZmxhdGVFbmQgICAgICAgICAgICB6X2RlZmxhdGVFbmQKLSMgIGRlZmluZSBpbmZsYXRlSW5pdF8gICAgICAgICAgel9pbmZsYXRlSW5pdF8KLSMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCi0jICBkZWZpbmUgaW5mbGF0ZUVuZCAgICAgICAgICAgIHpfaW5mbGF0ZUVuZAotIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KLSMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQotIyAgZGVmaW5lIGRlZmxhdGVDb3B5ICAgICAgICAgICB6X2RlZmxhdGVDb3B5Ci0jICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0Ci0jICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcwotIyAgZGVmaW5lIGRlZmxhdGVCb3VuZCAgICAgICAgICB6X2RlZmxhdGVCb3VuZAotIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQotIyAgZGVmaW5lIGluZmxhdGVJbml0Ml8gICAgICAgICB6X2luZmxhdGVJbml0Ml8KLSMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQotIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCi0jICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAotIyAgZGVmaW5lIGluZmxhdGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5Ci0jICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0Ci0jICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKLSMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZAotIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCi0jICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCi0jICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKLSMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCi0jICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKLSMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0KLSMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCi0jICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jCi0jICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwotIyAgZGVmaW5lIG91dF9mdW5jICAgICAgICAgICAgICB6X291dF9mdW5jCi0jICBkZWZpbmUgQnl0ZSAgICAgICAgICAgICAgICAgIHpfQnl0ZQotIyAgZGVmaW5lIHVJbnQgICAgICAgICAgICAgICAgICB6X3VJbnQKLSMgIGRlZmluZSB1TG9uZyAgICAgICAgICAgICAgICAgel91TG9uZwotIyAgZGVmaW5lIEJ5dGVmICAgICAgICAgICAgICAgICB6X0J5dGVmCi0jICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKLSMgIGRlZmluZSBpbnRmICAgICAgICAgICAgICAgICAgel9pbnRmCi0jICBkZWZpbmUgdUludGYgICAgICAgICAgICAgICAgIHpfdUludGYKLSMgIGRlZmluZSB1TG9uZ2YgICAgICAgICAgICAgICAgel91TG9uZ2YKLSMgIGRlZmluZSB2b2lkcGYgICAgICAgICAgICAgICAgel92b2lkcGYKLSMgIGRlZmluZSB2b2lkcCAgICAgICAgICAgICAgICAgel92b2lkcAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVNET1NfXykgJiYgIWRlZmluZWQoTVNET1MpCi0jICBkZWZpbmUgTVNET1MKLSNlbmRpZgotI2lmIChkZWZpbmVkKE9TXzIpIHx8IGRlZmluZWQoX19PUzJfXykpICYmICFkZWZpbmVkKE9TMikKLSMgIGRlZmluZSBPUzIKLSNlbmRpZgotI2lmIGRlZmluZWQoX1dJTkRPV1MpICYmICFkZWZpbmVkKFdJTkRPV1MpCi0jICBkZWZpbmUgV0lORE9XUwotI2VuZGlmCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgfHwgZGVmaW5lZChfX1dJTjMyX18pCi0jICBpZm5kZWYgV0lOMzIKLSMgICAgZGVmaW5lIFdJTjMyCi0jICBlbmRpZgotI2VuZGlmCi0jaWYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTkRPV1MpKSAmJiAhZGVmaW5lZChXSU4zMikKLSMgIGlmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0ZMQVRfXykgJiYgIWRlZmluZWQoX18zODZfXykKLSMgICAgaWZuZGVmIFNZUzE2QklUCi0jICAgICAgZGVmaW5lIFNZUzE2QklUCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qCi0gKiBDb21waWxlIHdpdGggLURNQVhTRUdfNjRLIGlmIHRoZSBhbGxvYyBmdW5jdGlvbiBjYW5ub3QgYWxsb2NhdGUgbW9yZQotICogdGhhbiA2NGsgYnl0ZXMgYXQgYSB0aW1lIChuZWVkZWQgb24gc3lzdGVtcyB3aXRoIDE2LWJpdCBpbnQpLgotICovCi0jaWZkZWYgU1lTMTZCSVQKLSMgIGRlZmluZSBNQVhTRUdfNjRLCi0jZW5kaWYKLSNpZmRlZiBNU0RPUwotIyAgZGVmaW5lIFVOQUxJR05FRF9PSwotI2VuZGlmCi0KLSNpZmRlZiBfX1NURENfVkVSU0lPTl9fCi0jICBpZm5kZWYgU1REQwotIyAgICBkZWZpbmUgU1REQwotIyAgZW5kaWYKLSMgIGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotIyAgICBpZm5kZWYgU1REQzk5Ci0jICAgICAgZGVmaW5lIFNUREM5OQotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChfX0hPU19BSVhfXykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykgJiYgIWRlZmluZWQoU1REQykgICAgLyogaVNlcmllcyAoZm9ybWVybHkgQVMvNDAwKS4gKi8KLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLQotI2lmbmRlZiBTVERDCi0jICBpZm5kZWYgY29uc3QgLyogY2Fubm90IHVzZSAhZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChjb25zdCkgb24gTWFjICovCi0jICAgIGRlZmluZSBjb25zdCAgICAgICAvKiBub3RlOiBuZWVkIGEgbW9yZSBnZW50bGUgc29sdXRpb24gaGVyZSAqLwotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwotI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCi0jICBkZWZpbmUgTk9fRFVNTVlfREVDTAotI2VuZGlmCi0KLS8qIE1heGltdW0gdmFsdWUgZm9yIG1lbUxldmVsIGluIGRlZmxhdGVJbml0MiAqLwotI2lmbmRlZiBNQVhfTUVNX0xFVkVMCi0jICBpZmRlZiBNQVhTRUdfNjRLCi0jICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDgKLSMgIGVsc2UKLSMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOQotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBNYXhpbXVtIHZhbHVlIGZvciB3aW5kb3dCaXRzIGluIGRlZmxhdGVJbml0MiBhbmQgaW5mbGF0ZUluaXQyLgotICogV0FSTklORzogcmVkdWNpbmcgTUFYX1dCSVRTIG1ha2VzIG1pbmlnemlwIHVuYWJsZSB0byBleHRyYWN0IC5neiBmaWxlcwotICogY3JlYXRlZCBieSBnemlwLiAoRmlsZXMgY3JlYXRlZCBieSBtaW5pZ3ppcCBjYW4gc3RpbGwgYmUgZXh0cmFjdGVkIGJ5Ci0gKiBnemlwLikKLSAqLwotI2lmbmRlZiBNQVhfV0JJVFMKLSMgIGRlZmluZSBNQVhfV0JJVFMgICAxNSAvKiAzMksgTFo3NyB3aW5kb3cgKi8KLSNlbmRpZgotCi0vKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKLSAgICAgICAgICAgICgxIDw8ICh3aW5kb3dCaXRzKzIpKSArICAoMSA8PCAobWVtTGV2ZWwrOSkpCi0gdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cz0xNSAgKyAgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4ICAoZGVmYXVsdCB2YWx1ZXMpCi0gcGx1cyBhIGZldyBraWxvYnl0ZXMgZm9yIHNtYWxsIG9iamVjdHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZWR1Y2UKLSB0aGUgZGVmYXVsdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gMjU2SyB0byAxMjhLLCBjb21waWxlIHdpdGgKLSAgICAgbWFrZSBDRkxBR1M9Ii1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03IgotIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCi0KLSAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cwotIHRoYXQgaXMsIDMySyBmb3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhIGZldyBraWxvYnl0ZXMKLSBmb3Igc21hbGwgb2JqZWN0cy4KLSovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgZGVjbGFyYXRpb25zICovCi0KLSNpZm5kZWYgT0YgLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotIyAgaWZkZWYgU1REQwotIyAgICBkZWZpbmUgT0YoYXJncykgIGFyZ3MKLSMgIGVsc2UKLSMgICAgZGVmaW5lIE9GKGFyZ3MpICAoKQotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAotICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KLSAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQotICogdG8gZGVmaW5lIE5PX01FTUNQWSBpbiB6dXRpbC5oLiAgSWYgeW91IGRvbid0IG5lZWQgdGhlIG1peGVkIG1vZGVsLAotICoganVzdCBkZWZpbmUgRkFSIHRvIGJlIGVtcHR5LgotICovCi0jaWZkZWYgU1lTMTZCSVQKLSMgIGlmIGRlZmluZWQoTV9JODZTTSkgfHwgZGVmaW5lZChNX0k4Nk1NKQotICAgICAvKiBNU0Mgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCi0jICAgIGRlZmluZSBTTUFMTF9NRURJVU0KLSMgICAgaWZkZWYgX01TQ19WRVIKLSMgICAgICBkZWZpbmUgRkFSIF9mYXIKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBGQVIgZmFyCi0jICAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWYgKGRlZmluZWQoX19TTUFMTF9fKSB8fCBkZWZpbmVkKF9fTUVESVVNX18pKQotICAgICAvKiBUdXJibyBDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLwotIyAgICBkZWZpbmUgU01BTExfTUVESVVNCi0jICAgIGlmZGVmIF9fQk9STEFORENfXwotIyAgICAgIGRlZmluZSBGQVIgX2ZhcgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIEZBUiBmYXIKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoV0lORE9XUykgfHwgZGVmaW5lZChXSU4zMikKLSAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgYXMgYSBETEwsIGRlZmluZSBaTElCX0RMTC4KLSAgICAqIFRoaXMgaXMgbm90IG1hbmRhdG9yeSwgYnV0IGl0IG9mZmVycyBhIGxpdHRsZSBwZXJmb3JtYW5jZSBpbmNyZWFzZS4KLSAgICAqLwotIyAgaWZkZWYgWkxJQl9ETEwKLSMgICAgaWYgZGVmaW5lZChXSU4zMikgJiYgKCFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+PSAweDUwMCkpCi0jICAgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAotIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotIyAgICAgIGVsc2UKLSMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYgIC8qIFpMSUJfRExMICovCi0gICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIHdpdGggdGhlIFdJTkFQSS9XSU5BUElWIGNhbGxpbmcgY29udmVudGlvbiwKLSAgICAqIGRlZmluZSBaTElCX1dJTkFQSS4KLSAgICAqIENhdXRpb246IHRoZSBzdGFuZGFyZCBaTElCMS5ETEwgaXMgTk9UIGNvbXBpbGVkIHVzaW5nIFpMSUJfV0lOQVBJLgotICAgICovCi0jICBpZmRlZiBaTElCX1dJTkFQSQotIyAgICBpZmRlZiBGQVIKLSMgICAgICB1bmRlZiBGQVIKLSMgICAgZW5kaWYKLSMgICAgaW5jbHVkZSA8d2luZG93cy5oPgotICAgICAvKiBObyBuZWVkIGZvciBfZXhwb3J0LCB1c2UgWkxJQi5ERUYgaW5zdGVhZC4gKi8KLSAgICAgLyogRm9yIGNvbXBsZXRlIFdpbmRvd3MgY29tcGF0aWJpbGl0eSwgdXNlIFdJTkFQSSwgbm90IF9fc3RkY2FsbC4gKi8KLSMgICAgZGVmaW5lIFpFWFBPUlQgV0lOQVBJCi0jICAgIGlmZGVmIFdJTjMyCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBXSU5BUElWCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgWkVYUE9SVFZBIEZBUiBDREVDTAotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX19CRU9TX18pCi0jICBpZmRlZiBaTElCX0RMTAotIyAgICBpZmRlZiBaTElCX0lOVEVSTkFMCi0jICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIFpFWFRFUk4KLSMgIGRlZmluZSBaRVhURVJOIGV4dGVybgotI2VuZGlmCi0jaWZuZGVmIFpFWFBPUlQKLSMgIGRlZmluZSBaRVhQT1JUCi0jZW5kaWYKLSNpZm5kZWYgWkVYUE9SVFZBCi0jICBkZWZpbmUgWkVYUE9SVFZBCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSMgIGRlZmluZSBGQVIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX19NQUNUWVBFU19fKQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICBCeXRlOyAgLyogOCBiaXRzICovCi0jZW5kaWYKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgdUludDsgIC8qIDE2IGJpdHMgb3IgbW9yZSAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICB1TG9uZzsgLyogMzIgYml0cyBvciBtb3JlICovCi0KLSNpZmRlZiBTTUFMTF9NRURJVU0KLSAgIC8qIEJvcmxhbmQgQy9DKysgYW5kIHNvbWUgb2xkIE1TQyB2ZXJzaW9ucyBpZ25vcmUgRkFSIGluc2lkZSB0eXBlZGVmICovCi0jICBkZWZpbmUgQnl0ZWYgQnl0ZSBGQVIKLSNlbHNlCi0gICB0eXBlZGVmIEJ5dGUgIEZBUiBCeXRlZjsKLSNlbmRpZgotdHlwZWRlZiBjaGFyICBGQVIgY2hhcmY7Ci10eXBlZGVmIGludCAgIEZBUiBpbnRmOwotdHlwZWRlZiB1SW50ICBGQVIgdUludGY7Ci10eXBlZGVmIHVMb25nIEZBUiB1TG9uZ2Y7Ci0KLSNpZmRlZiBTVERDCi0gICB0eXBlZGVmIHZvaWQgY29uc3QgKnZvaWRwYzsKLSAgIHR5cGVkZWYgdm9pZCBGQVIgICAqdm9pZHBmOwotICAgdHlwZWRlZiB2b2lkICAgICAgICp2b2lkcDsKLSNlbHNlCi0gICB0eXBlZGVmIEJ5dGUgY29uc3QgKnZvaWRwYzsKLSAgIHR5cGVkZWYgQnl0ZSBGQVIgICAqdm9pZHBmOwotICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKLSNlbmRpZgotCi0jaWYgMCAgICAgICAgICAgLyogSEFWRV9VTklTVERfSCAtLSB0aGlzIGxpbmUgaXMgdXBkYXRlZCBieSAuL2NvbmZpZ3VyZSAqLwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC8qIGZvciBvZmZfdCAqLwotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKLSNlbmRpZgotI2lmbmRlZiBTRUVLX1NFVAotIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCi0jICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwotIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KLSNlbmRpZgotI2lmbmRlZiB6X29mZl90Ci0jICBkZWZpbmUgel9vZmZfdCBsb25nCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBpZmRlZiBGQVIKLSMgICAgdW5kZWYgRkFSCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUluaXRfLCJERUlOIikKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0Ml8sIkRFSU4yIikKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVCb3VuZCwiREVCTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUluaXRfLCJJTklOIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVFbmQsIklORU5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVTeW5jLCJJTlNZIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQotIyAgIHByYWdtYSBtYXAoY29tcHJlc3NCb3VuZCwiQ01CTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV90YWJsZSwiSU5UQUJMIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlX2NvcHlyaWdodCwiSU5DT1BZIikKLSNlbmRpZgotCi0jZW5kaWYgLyogWkNPTkZfSCAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIuMyBiL01vZHVsZXMvemxpYi96bGliLjMKaW5kZXggMjdhZGM0Yy4uMDE2MGU2MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIuMworKysgYi9Nb2R1bGVzL3psaWIvemxpYi4zCkBAIC0xLDQgKzEsNCBAQAotLlRIIFpMSUIgMyAiMTkgQXByIDIwMTAiCisuVEggWkxJQiAzICIyOCBBcHIgMjAxMyIKIC5TSCBOQU1FCiB6bGliIFwtIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gbGlicmFyeQogLlNIIFNZTk9QU0lTCkBAIC0zNiw5ICszNiw5IEBACiAuSVIgemxpYi5oIC4KIFRoZSBkaXN0cmlidXRpb24gc291cmNlIGluY2x1ZGVzIGV4YW1wbGVzIG9mIHVzZSBvZiB0aGUgbGlicmFyeQogaW4gdGhlIGZpbGVzCi0uSSBleGFtcGxlLmMKKy5JIHRlc3QvZXhhbXBsZS5jCiBhbmQKLS5JUiBtaW5pZ3ppcC5jLAorLklSIHRlc3QvbWluaWd6aXAuYywKIGFzIHdlbGwgYXMgb3RoZXIgZXhhbXBsZXMgaW4gdGhlCiAuSVIgZXhhbXBsZXMvCiBkaXJlY3RvcnkuCkBAIC02NSw3ICs2NSw3IEBACiB3cml0dGVuIGJ5IEEuTS4gS3VjaGxpbmcgKGFta0BtYWduZXQuY29tKSwKIGlzIGF2YWlsYWJsZSBpbiBQeXRob24gMS41IGFuZCBsYXRlciB2ZXJzaW9uczoKIC5JUAotaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbAoraHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3psaWIuaHRtbAogLkxQCiAuSSB6bGliCiBpcyBidWlsdCBpbnRvCkBAIC05NSwxMSArOTUsMTEgQEAKIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQwogKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzOgogLklQCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dCAoZm9yIHRoZSB6bGliIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwIChmb3IgdGhlIHpsaWIgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKIC5icgotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MS50eHQgKGZvciB0aGUgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MSAoZm9yIHRoZSBkZWZsYXRlIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQpCiAuYnIKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTIudHh0IChmb3IgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTIgKGZvciB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQogLkxQCiBNYXJrIE5lbHNvbiB3cm90ZSBhbiBhcnRpY2xlIGFib3V0CiAuSSB6bGliCkBAIC0xMjUsOCArMTI1LDggQEAKIFNlbmQgcXVlc3Rpb25zIGFuZC9vciBjb21tZW50cyB0byB6bGliQGd6aXAub3JnLAogb3IgKGZvciB0aGUgV2luZG93cyBETEwgdmVyc2lvbikgdG8gR2lsbGVzIFZvbGxhbnQgKGluZm9Ad2luaW1hZ2UuY29tKS4KIC5TSCBBVVRIT1JTCi1WZXJzaW9uIDEuMi41Ci1Db3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IChqbG91cEBnemlwLm9yZykKK1ZlcnNpb24gMS4yLjgKK0NvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgKGpsb3VwQGd6aXAub3JnKQogYW5kIE1hcmsgQWRsZXIgKG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUpLgogLkxQCiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcy1pcywiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemxpYi5oIGIvTW9kdWxlcy96bGliL3psaWIuaAppbmRleCA3OWExODdjLi4zZTBjNzY3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemxpYi5oCisrKyBiL01vZHVsZXMvemxpYi96bGliLmgKQEAgLTEsNyArMSw3IEBACiAvKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAgdmVyc2lvbiAxLjIuNSwgQXByaWwgMTl0aCwgMjAxMAorICB2ZXJzaW9uIDEuMi44LCBBcHJpbCAyOHRoLCAyMDEzCiAKLSAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAKICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwpAQCAtMjQsOCArMjQsOCBAQAogCiAKICAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcyAoUmVxdWVzdCBmb3IKLSAgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQKLSAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQgKGRlZmxhdGUgZm9ybWF0KSBhbmQgcmZjMTk1Mi50eHQgKGd6aXAgZm9ybWF0KS4KKyAgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MAorICAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1hdCkgYW5kIHJmYzE5NTIgKGd6aXAgZm9ybWF0KS4KICovCiAKICNpZm5kZWYgWkxJQl9ICkBAIC0zNywxMSArMzcsMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNkZWZpbmUgWkxJQl9WRVJTSU9OICIxLjIuNSIKLSNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjUwCisjZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjgiCisjZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTI4MAogI2RlZmluZSBaTElCX1ZFUl9NQUpPUiAxCiAjZGVmaW5lIFpMSUJfVkVSX01JTk9SIDIKLSNkZWZpbmUgWkxJQl9WRVJfUkVWSVNJT04gNQorI2RlZmluZSBaTElCX1ZFUl9SRVZJU0lPTiA4CiAjZGVmaW5lIFpMSUJfVkVSX1NVQlJFVklTSU9OIDAKIAogLyoKQEAgLTgzLDE1ICs4MywxNSBAQAogc3RydWN0IGludGVybmFsX3N0YXRlOwogCiB0eXBlZGVmIHN0cnVjdCB6X3N0cmVhbV9zIHsKLSAgICBCeXRlZiAgICAqbmV4dF9pbjsgIC8qIG5leHQgaW5wdXQgYnl0ZSAqLworICAgIHpfY29uc3QgQnl0ZWYgKm5leHRfaW47ICAgICAvKiBuZXh0IGlucHV0IGJ5dGUgKi8KICAgICB1SW50ICAgICBhdmFpbF9pbjsgIC8qIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9pbiAqLwotICAgIHVMb25nICAgIHRvdGFsX2luOyAgLyogdG90YWwgbmIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi8KKyAgICB1TG9uZyAgICB0b3RhbF9pbjsgIC8qIHRvdGFsIG51bWJlciBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhciAqLwogCiAgICAgQnl0ZWYgICAgKm5leHRfb3V0OyAvKiBuZXh0IG91dHB1dCBieXRlIHNob3VsZCBiZSBwdXQgdGhlcmUgKi8KICAgICB1SW50ICAgICBhdmFpbF9vdXQ7IC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG5leHRfb3V0ICovCi0gICAgdUxvbmcgICAgdG90YWxfb3V0OyAvKiB0b3RhbCBuYiBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovCisgICAgdUxvbmcgICAgdG90YWxfb3V0OyAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLwogCi0gICAgY2hhciAgICAgKm1zZzsgICAgICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KKyAgICB6X2NvbnN0IGNoYXIgKm1zZzsgIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqLwogICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKnN0YXRlOyAvKiBub3QgdmlzaWJsZSBieSBhcHBsaWNhdGlvbnMgKi8KIAogICAgIGFsbG9jX2Z1bmMgemFsbG9jOyAgLyogdXNlZCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KQEAgLTMyNyw4ICszMjcsOSBAQAogCiAgICAgWl9GSU5JU0ggY2FuIGJlIHVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQgaWYgYWxsIHRoZSBjb21wcmVzc2lvbgogICBpcyB0byBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAuICBJbiB0aGlzIGNhc2UsIGF2YWlsX291dCBtdXN0IGJlIGF0IGxlYXN0IHRoZQotICB2YWx1ZSByZXR1cm5lZCBieSBkZWZsYXRlQm91bmQgKHNlZSBiZWxvdykuICBJZiBkZWZsYXRlIGRvZXMgbm90IHJldHVybgotICBaX1NUUkVBTV9FTkQsIHRoZW4gaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYXMgZGVzY3JpYmVkIGFib3ZlLgorICB2YWx1ZSByZXR1cm5lZCBieSBkZWZsYXRlQm91bmQgKHNlZSBiZWxvdykuICBUaGVuIGRlZmxhdGUgaXMgZ3VhcmFudGVlZCB0bworICByZXR1cm4gWl9TVFJFQU1fRU5ELiAgSWYgbm90IGVub3VnaCBvdXRwdXQgc3BhY2UgaXMgcHJvdmlkZWQsIGRlZmxhdGUgd2lsbAorICBub3QgcmV0dXJuIFpfU1RSRUFNX0VORCwgYW5kIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KIAogICAgIGRlZmxhdGUoKSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIGFsbCBpbnB1dCByZWFkCiAgIHNvIGZhciAodGhhdCBpcywgdG90YWxfaW4gYnl0ZXMpLgpAQCAtNDUxLDIzICs0NTIsMjkgQEAKICAgZXJyb3IuICBIb3dldmVyIGlmIGFsbCBkZWNvbXByZXNzaW9uIGlzIHRvIGJlIHBlcmZvcm1lZCBpbiBhIHNpbmdsZSBzdGVwIChhCiAgIHNpbmdsZSBjYWxsIG9mIGluZmxhdGUpLCB0aGUgcGFyYW1ldGVyIGZsdXNoIHNob3VsZCBiZSBzZXQgdG8gWl9GSU5JU0guICBJbgogICB0aGlzIGNhc2UgYWxsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkIGFuZCBhbGwgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZDsKLSAgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4gIChUaGUgc2l6ZQotICBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbWF5IGhhdmUgYmVlbiBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBmb3IgdGhpcwotICBwdXJwb3NlLikgVGhlIG5leHQgb3BlcmF0aW9uIG9uIHRoaXMgc3RyZWFtIG11c3QgYmUgaW5mbGF0ZUVuZCB0byBkZWFsbG9jYXRlCi0gIHRoZSBkZWNvbXByZXNzaW9uIHN0YXRlLiAgVGhlIHVzZSBvZiBaX0ZJTklTSCBpcyBuZXZlciByZXF1aXJlZCwgYnV0IGNhbiBiZQotICB1c2VkIHRvIGluZm9ybSBpbmZsYXRlIHRoYXQgYSBmYXN0ZXIgYXBwcm9hY2ggbWF5IGJlIHVzZWQgZm9yIHRoZSBzaW5nbGUKLSAgaW5mbGF0ZSgpIGNhbGwuCisgIGF2YWlsX291dCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgZm9yIHRoZQorICBvcGVyYXRpb24gdG8gY29tcGxldGUuICAoVGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG1heSBoYXZlIGJlZW4KKyAgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgZm9yIHRoaXMgcHVycG9zZS4pIFRoZSB1c2Ugb2YgWl9GSU5JU0ggaXMgbm90CisgIHJlcXVpcmVkIHRvIHBlcmZvcm0gYW4gaW5mbGF0aW9uIGluIG9uZSBzdGVwLiAgSG93ZXZlciBpdCBtYXkgYmUgdXNlZCB0bworICBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoIGNhbiBiZSB1c2VkIGZvciB0aGUgc2luZ2xlIGluZmxhdGUoKQorICBjYWxsLiAgWl9GSU5JU0ggYWxzbyBpbmZvcm1zIGluZmxhdGUgdG8gbm90IG1haW50YWluIGEgc2xpZGluZyB3aW5kb3cgaWYgdGhlCisgIHN0cmVhbSBjb21wbGV0ZXMsIHdoaWNoIHJlZHVjZXMgaW5mbGF0ZSdzIG1lbW9yeSBmb290cHJpbnQuICBJZiB0aGUgc3RyZWFtCisgIGRvZXMgbm90IGNvbXBsZXRlLCBlaXRoZXIgYmVjYXVzZSBub3QgYWxsIG9mIHRoZSBzdHJlYW0gaXMgcHJvdmlkZWQgb3Igbm90CisgIGVub3VnaCBvdXRwdXQgc3BhY2UgaXMgcHJvdmlkZWQsIHRoZW4gYSBzbGlkaW5nIHdpbmRvdyB3aWxsIGJlIGFsbG9jYXRlZCBhbmQKKyAgaW5mbGF0ZSgpIGNhbiBiZSBjYWxsZWQgYWdhaW4gdG8gY29udGludWUgdGhlIG9wZXJhdGlvbiBhcyBpZiBaX05PX0ZMVVNIIGhhZAorICBiZWVuIHVzZWQuCiAKICAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgaW5mbGF0ZSgpIGFsd2F5cyBmbHVzaGVzIGFzIG11Y2ggb3V0cHV0IGFzCiAgIHBvc3NpYmxlIHRvIHRoZSBvdXRwdXQgYnVmZmVyLCBhbmQgYWx3YXlzIHVzZXMgdGhlIGZhc3RlciBhcHByb2FjaCBvbiB0aGUKLSAgZmlyc3QgY2FsbC4gIFNvIHRoZSBvbmx5IGVmZmVjdCBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGluIHRoaXMgaW1wbGVtZW50YXRpb24KLSAgaXMgb24gdGhlIHJldHVybiB2YWx1ZSBvZiBpbmZsYXRlKCksIGFzIG5vdGVkIGJlbG93LCBvciB3aGVuIGl0IHJldHVybnMgZWFybHkKLSAgYmVjYXVzZSBaX0JMT0NLIG9yIFpfVFJFRVMgaXMgdXNlZC4KKyAgZmlyc3QgY2FsbC4gIFNvIHRoZSBlZmZlY3RzIG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhcmUKKyAgb24gdGhlIHJldHVybiB2YWx1ZSBvZiBpbmZsYXRlKCkgYXMgbm90ZWQgYmVsb3csIHdoZW4gaW5mbGF0ZSgpIHJldHVybnMgZWFybHkKKyAgd2hlbiBaX0JMT0NLIG9yIFpfVFJFRVMgaXMgdXNlZCwgYW5kIHdoZW4gaW5mbGF0ZSgpIGF2b2lkcyB0aGUgYWxsb2NhdGlvbiBvZgorICBtZW1vcnkgZm9yIGEgc2xpZGluZyB3aW5kb3cgd2hlbiBaX0ZJTklTSCBpcyB1c2VkLgogCiAgICAgIElmIGEgcHJlc2V0IGRpY3Rpb25hcnkgaXMgbmVlZGVkIGFmdGVyIHRoaXMgY2FsbCAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5Ci0gIGJlbG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIHRoZSBkaWN0aW9uYXJ5CisgIGJlbG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiB0aGUgZGljdGlvbmFyeQogICBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9ORUVEX0RJQ1Q7IG90aGVyd2lzZSBpdCBzZXRzCi0gIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQgc28gZmFyICh0aGF0IGlzLAorICBzdHJtLT5hZGxlciB0byB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgYWxsIG91dHB1dCBwcm9kdWNlZCBzbyBmYXIgKHRoYXQgaXMsCiAgIHRvdGFsX291dCBieXRlcykgYW5kIHJldHVybnMgWl9PSywgWl9TVFJFQU1fRU5EIG9yIGFuIGVycm9yIGNvZGUgYXMgZGVzY3JpYmVkCiAgIGJlbG93LiAgQXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCBpbmZsYXRlKCkgY2hlY2tzIHRoYXQgaXRzIGNvbXB1dGVkIGFkbGVyMzIKICAgY2hlY2tzdW0gaXMgZXF1YWwgdG8gdGhhdCBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX1NUUkVBTV9FTkQKQEAgLTQ3OCw3ICs0ODUsOSBAQAogICBpbml0aWFsaXppbmcgd2l0aCBpbmZsYXRlSW5pdDIoKS4gIEFueSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGd6aXAKICAgaGVhZGVyIGlzIG5vdCByZXRhaW5lZCwgc28gYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0aGF0IGluZm9ybWF0aW9uIHNob3VsZAogICBpbnN0ZWFkIHVzZSByYXcgaW5mbGF0ZSwgc2VlIGluZmxhdGVJbml0MigpIGJlbG93LCBvciBpbmZsYXRlQmFjaygpIGFuZAotICBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9mIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlci4KKyAgcGVyZm9ybSB0aGVpciBvd24gcHJvY2Vzc2luZyBvZiB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIuICBXaGVuIHByb2Nlc3NpbmcKKyAgZ3ppcC13cmFwcGVkIGRlZmxhdGUgZGF0YSwgc3RybS0+YWRsZXIzMiBpcyBzZXQgdG8gdGhlIENSQy0zMiBvZiB0aGUgb3V0cHV0CisgIHByb2R1Y3RlZCBzbyBmYXIuICBUaGUgQ1JDLTMyIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgZ3ppcCB0cmFpbGVyLgogCiAgICAgaW5mbGF0ZSgpIHJldHVybnMgWl9PSyBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQgcHJvY2Vzc2VkCiAgIG9yIG1vcmUgb3V0cHV0IHByb2R1Y2VkKSwgWl9TVFJFQU1fRU5EIGlmIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMKQEAgLTU4MCwxMCArNTg5LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50ICBkaWN0TGVuZ3RoKSk7CiAvKgogICAgICBJbml0aWFsaXplcyB0aGUgY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiBieXRlIHNlcXVlbmNlCi0gICB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkCi0gICBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCwgZGVmbGF0ZUluaXQyIG9yIGRlZmxhdGVSZXNldCwgYmVmb3JlIGFueSBjYWxsCi0gICBvZiBkZWZsYXRlLiAgVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lCi0gICBkaWN0aW9uYXJ5IChzZWUgaW5mbGF0ZVNldERpY3Rpb25hcnkpLgorICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LiAgV2hlbiB1c2luZyB0aGUgemxpYiBmb3JtYXQsIHRoaXMKKyAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0LCBkZWZsYXRlSW5pdDIgb3IKKyAgIGRlZmxhdGVSZXNldCwgYW5kIGJlZm9yZSBhbnkgY2FsbCBvZiBkZWZsYXRlLiAgV2hlbiBkb2luZyByYXcgZGVmbGF0ZSwgdGhpcworICAgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZWl0aGVyIGJlZm9yZSBhbnkgY2FsbCBvZiBkZWZsYXRlLCBvciBpbW1lZGlhdGVseQorICAgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2YgYSBkZWZsYXRlIGJsb2NrLCBpLmUuIGFmdGVyIGFsbCBpbnB1dCBoYXMgYmVlbgorICAgY29uc3VtZWQgYW5kIGFsbCBvdXRwdXQgaGFzIGJlZW4gZGVsaXZlcmVkIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBmbHVzaAorICAgb3B0aW9ucyBaX0JMT0NLLCBaX1BBUlRJQUxfRkxVU0gsIFpfU1lOQ19GTFVTSCwgb3IgWl9GVUxMX0ZMVVNILiAgVGhlCisgICBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBkaWN0aW9uYXJ5IChzZWUKKyAgIGluZmxhdGVTZXREaWN0aW9uYXJ5KS4KIAogICAgICBUaGUgZGljdGlvbmFyeSBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5CiAgICB0byBiZSBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5CkBAIC02MTAsOCArNjI0LDggQEAKICAgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIGEKICAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChlLmcuICBkaWN0aW9uYXJ5IGJlaW5nIFpfTlVMTCkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcwogICAgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZSBpZiBkZWZsYXRlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlzIHN0cmVhbQotICAgb3IgaWYgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBpcyBic29ydCkuICBkZWZsYXRlU2V0RGljdGlvbmFyeSBkb2VzIG5vdAotICAgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyAgIG9yIGlmIG5vdCBhdCBhIGJsb2NrIGJvdW5kYXJ5IGZvciByYXcgZGVmbGF0ZSkuICBkZWZsYXRlU2V0RGljdGlvbmFyeSBkb2VzCisgICBub3QgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LApAQCAtNjg4LDkgKzcwMiwyOSBAQAogICAgZGVmbGF0aW9uIG9mIHNvdXJjZUxlbiBieXRlcy4gIEl0IG11c3QgYmUgY2FsbGVkIGFmdGVyIGRlZmxhdGVJbml0KCkgb3IKICAgIGRlZmxhdGVJbml0MigpLCBhbmQgYWZ0ZXIgZGVmbGF0ZVNldEhlYWRlcigpLCBpZiB1c2VkLiAgVGhpcyB3b3VsZCBiZSB1c2VkCiAgICB0byBhbGxvY2F0ZSBhbiBvdXRwdXQgYnVmZmVyIGZvciBkZWZsYXRpb24gaW4gYSBzaW5nbGUgcGFzcywgYW5kIHNvIHdvdWxkIGJlCi0gICBjYWxsZWQgYmVmb3JlIGRlZmxhdGUoKS4KKyAgIGNhbGxlZCBiZWZvcmUgZGVmbGF0ZSgpLiAgSWYgdGhhdCBmaXJzdCBkZWZsYXRlKCkgY2FsbCBpcyBwcm92aWRlZCB0aGUKKyAgIHNvdXJjZUxlbiBpbnB1dCBieXRlcywgYW4gb3V0cHV0IGJ1ZmZlciBhbGxvY2F0ZWQgdG8gdGhlIHNpemUgcmV0dXJuZWQgYnkKKyAgIGRlZmxhdGVCb3VuZCgpLCBhbmQgdGhlIGZsdXNoIHZhbHVlIFpfRklOSVNILCB0aGVuIGRlZmxhdGUoKSBpcyBndWFyYW50ZWVkCisgICB0byByZXR1cm4gWl9TVFJFQU1fRU5ELiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgY29tcHJlc3NlZCBzaXplIHRvCisgICBiZSBsYXJnZXIgdGhhbiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kKCkgaWYgZmx1c2ggb3B0aW9ucyBvdGhlcgorICAgdGhhbiBaX0ZJTklTSCBvciBaX05PX0ZMVVNIIGFyZSB1c2VkLgogKi8KIAorWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUGVuZGluZyBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqcGVuZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYml0cykpOworLyoKKyAgICAgZGVmbGF0ZVBlbmRpbmcoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYW5kIGJpdHMgb2Ygb3V0cHV0IHRoYXQgaGF2ZQorICAgYmVlbiBnZW5lcmF0ZWQsIGJ1dCBub3QgeWV0IHByb3ZpZGVkIGluIHRoZSBhdmFpbGFibGUgb3V0cHV0LiAgVGhlIGJ5dGVzIG5vdAorICAgcHJvdmlkZWQgd291bGQgYmUgZHVlIHRvIHRoZSBhdmFpbGFibGUgb3V0cHV0IHNwYWNlIGhhdmluZyBiZWluZyBjb25zdW1lZC4KKyAgIFRoZSBudW1iZXIgb2YgYml0cyBvZiBvdXRwdXQgbm90IHByb3ZpZGVkIGFyZSBiZXR3ZWVuIDAgYW5kIDcsIHdoZXJlIHRoZXkKKyAgIGF3YWl0IG1vcmUgYml0cyB0byBqb2luIHRoZW0gaW4gb3JkZXIgdG8gZmlsbCBvdXQgYSBmdWxsIGJ5dGUuICBJZiBwZW5kaW5nCisgICBvciBiaXRzIGFyZSBaX05VTEwsIHRoZW4gdGhvc2UgdmFsdWVzIGFyZSBub3Qgc2V0LgorCisgICAgIGRlZmxhdGVQZW5kaW5nIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyAqLworCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQcmltZSBPRigoel9zdHJlYW1wIHN0cm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKSk7CkBAIC03MDMsOCArNzM3LDkgQEAKICAgIHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdmFsdWUKICAgIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIG91dHB1dC4KIAotICAgICBkZWZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKLSAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorICAgICBkZWZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICByb29tIGluIHRoZSBpbnRlcm5hbCBidWZmZXIgdG8gaW5zZXJ0IHRoZSBiaXRzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUKKyAgIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVNldEhlYWRlciBPRigoel9zdHJlYW1wIHN0cm0sCkBAIC03OTAsMTAgKzgyNSwxMSBAQAogICAgaWYgdGhhdCBjYWxsIHJldHVybmVkIFpfTkVFRF9ESUNULiAgVGhlIGRpY3Rpb25hcnkgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yCiAgICBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBhZGxlcjMyIHZhbHVlIHJldHVybmVkIGJ5IHRoYXQgY2FsbCBvZiBpbmZsYXRlLgogICAgVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQotICAgZGVmbGF0ZVNldERpY3Rpb25hcnkpLiAgRm9yIHJhdyBpbmZsYXRlLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIGluZmxhdGVJbml0MigpIG9yIGluZmxhdGVSZXNldCgpIGFuZCBiZWZvcmUgYW55IGNhbGwgb2YKLSAgIGluZmxhdGUoKSB0byBzZXQgdGhlIGRpY3Rpb25hcnkuICBUaGUgYXBwbGljYXRpb24gbXVzdCBpbnN1cmUgdGhhdCB0aGUKLSAgIGRpY3Rpb25hcnkgdGhhdCB3YXMgdXNlZCBmb3IgY29tcHJlc3Npb24gaXMgcHJvdmlkZWQuCisgICBkZWZsYXRlU2V0RGljdGlvbmFyeSkuICBGb3IgcmF3IGluZmxhdGUsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBhbnkKKyAgIHRpbWUgdG8gc2V0IHRoZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkgaXMgc21hbGxlciB0aGFuIHRoZQorICAgd2luZG93IGFuZCB0aGVyZSBpcyBhbHJlYWR5IGRhdGEgaW4gdGhlIHdpbmRvdywgdGhlbiB0aGUgcHJvdmlkZWQgZGljdGlvbmFyeQorICAgd2lsbCBhbWVuZCB3aGF0J3MgdGhlcmUuICBUaGUgYXBwbGljYXRpb24gbXVzdCBpbnN1cmUgdGhhdCB0aGUgZGljdGlvbmFyeQorICAgdGhhdCB3YXMgdXNlZCBmb3IgY29tcHJlc3Npb24gaXMgcHJvdmlkZWQuCiAKICAgICAgaW5mbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGEKICAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChlLmcuICBkaWN0aW9uYXJ5IGJlaW5nIFpfTlVMTCkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcwpAQCAtODAzLDE5ICs4MzksMzggQEAKICAgIGluZmxhdGUoKS4KICovCiAKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUdldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZWYgKmRpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50ICAqZGljdExlbmd0aCkpOworLyoKKyAgICAgUmV0dXJucyB0aGUgc2xpZGluZyBkaWN0aW9uYXJ5IGJlaW5nIG1haW50YWluZWQgYnkgaW5mbGF0ZS4gIGRpY3RMZW5ndGggaXMKKyAgIHNldCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkaWN0aW9uYXJ5LCBhbmQgdGhhdCBtYW55IGJ5dGVzIGFyZSBjb3BpZWQKKyAgIHRvIGRpY3Rpb25hcnkuICBkaWN0aW9uYXJ5IG11c3QgaGF2ZSBlbm91Z2ggc3BhY2UsIHdoZXJlIDMyNzY4IGJ5dGVzIGlzCisgICBhbHdheXMgZW5vdWdoLiAgSWYgaW5mbGF0ZUdldERpY3Rpb25hcnkoKSBpcyBjYWxsZWQgd2l0aCBkaWN0aW9uYXJ5IGVxdWFsIHRvCisgICBaX05VTEwsIHRoZW4gb25seSB0aGUgZGljdGlvbmFyeSBsZW5ndGggaXMgcmV0dXJuZWQsIGFuZCBub3RoaW5nIGlzIGNvcGllZC4KKyAgIFNpbWlsYXJ5LCBpZiBkaWN0TGVuZ3RoIGlzIFpfTlVMTCwgdGhlbiBpdCBpcyBub3Qgc2V0LgorCisgICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBvbiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUKKyAgIHN0cmVhbSBzdGF0ZSBpcyBpbmNvbnNpc3RlbnQuCisqLworCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVTeW5jIE9GKCh6X3N0cmVhbXAgc3RybSkpOwogLyoKLSAgICAgU2tpcHMgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgdW50aWwgYSBmdWxsIGZsdXNoIHBvaW50IChzZWUgYWJvdmUgdGhlCi0gICBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlIHdpdGggWl9GVUxMX0ZMVVNIKSBjYW4gYmUgZm91bmQsIG9yIHVudGlsIGFsbAorICAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSB1bnRpbCBhIHBvc3NpYmxlIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZQorICAgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlIHdpdGggWl9GVUxMX0ZMVVNIKSBjYW4gYmUgZm91bmQsIG9yIHVudGlsIGFsbAogICAgYXZhaWxhYmxlIGlucHV0IGlzIHNraXBwZWQuICBObyBvdXRwdXQgaXMgcHJvdmlkZWQuCiAKLSAgICAgaW5mbGF0ZVN5bmMgcmV0dXJucyBaX09LIGlmIGEgZnVsbCBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwgWl9CVUZfRVJST1IKLSAgIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQgaGFzIGJlZW4KLSAgIGZvdW5kLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50LiAgSW4gdGhlCi0gICBzdWNjZXNzIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0b3RhbF9pbgotICAgd2hpY2ggaW5kaWNhdGVzIHdoZXJlIHZhbGlkIGNvbXByZXNzZWQgZGF0YSB3YXMgZm91bmQuICBJbiB0aGUgZXJyb3IgY2FzZSwKLSAgIHRoZSBhcHBsaWNhdGlvbiBtYXkgcmVwZWF0ZWRseSBjYWxsIGluZmxhdGVTeW5jLCBwcm92aWRpbmcgbW9yZSBpbnB1dCBlYWNoCi0gICB0aW1lLCB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4KKyAgICAgaW5mbGF0ZVN5bmMgc2VhcmNoZXMgZm9yIGEgMDAgMDAgRkYgRkYgcGF0dGVybiBpbiB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgQWxsIGZ1bGwgZmx1c2ggcG9pbnRzIGhhdmUgdGhpcyBwYXR0ZXJuLCBidXQgbm90IGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzCisgICBwYXR0ZXJuIGFyZSBmdWxsIGZsdXNoIHBvaW50cy4KKworICAgICBpbmZsYXRlU3luYyByZXR1cm5zIFpfT0sgaWYgYSBwb3NzaWJsZSBmdWxsIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLAorICAgWl9CVUZfRVJST1IgaWYgbm8gbW9yZSBpbnB1dCB3YXMgcHJvdmlkZWQsIFpfREFUQV9FUlJPUiBpZiBubyBmbHVzaCBwb2ludAorICAgaGFzIGJlZW4gZm91bmQsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQuCisgICBJbiB0aGUgc3VjY2VzcyBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgY3VycmVudCB2YWx1ZSBvZgorICAgdG90YWxfaW4gd2hpY2ggaW5kaWNhdGVzIHdoZXJlIHZhbGlkIGNvbXByZXNzZWQgZGF0YSB3YXMgZm91bmQuICBJbiB0aGUKKyAgIGVycm9yIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgcmVwZWF0ZWRseSBjYWxsIGluZmxhdGVTeW5jLCBwcm92aWRpbmcgbW9yZQorICAgaW5wdXQgZWFjaCB0aW1lLCB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LApAQCAtOTYyLDEyICsxMDE3LDEzIEBACiAgICAgIFNlZSBpbmZsYXRlQmFjaygpIGZvciB0aGUgdXNhZ2Ugb2YgdGhlc2Ugcm91dGluZXMuCiAKICAgICAgaW5mbGF0ZUJhY2tJbml0IHdpbGwgcmV0dXJuIFpfT0sgb24gc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYW55IG9mCi0gICB0aGUgcGFyYW1hdGVycyBhcmUgaW52YWxpZCwgWl9NRU1fRVJST1IgaWYgdGhlIGludGVybmFsIHN0YXRlIGNvdWxkIG5vdCBiZQorICAgdGhlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQsIFpfTUVNX0VSUk9SIGlmIHRoZSBpbnRlcm5hbCBzdGF0ZSBjb3VsZCBub3QgYmUKICAgIGFsbG9jYXRlZCwgb3IgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGRvZXMgbm90IG1hdGNoCiAgICB0aGUgdmVyc2lvbiBvZiB0aGUgaGVhZGVyIGZpbGUuCiAqLwogCi10eXBlZGVmIHVuc2lnbmVkICgqaW5fZnVuYykgT0YoKHZvaWQgRkFSICosIHVuc2lnbmVkIGNoYXIgRkFSICogRkFSICopKTsKK3R5cGVkZWYgdW5zaWduZWQgKCppbl9mdW5jKSBPRigodm9pZCBGQVIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqIEZBUiAqKSk7CiB0eXBlZGVmIGludCAoKm91dF9mdW5jKSBPRigodm9pZCBGQVIgKiwgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQpKTsKIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFjayBPRigoel9zdHJlYW1wIHN0cm0sCkBAIC05NzUsMTEgKzEwMzEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9mdW5jIG91dCwgdm9pZCBGQVIgKm91dF9kZXNjKSk7CiAvKgogICAgICBpbmZsYXRlQmFjaygpIGRvZXMgYSByYXcgaW5mbGF0ZSB3aXRoIGEgc2luZ2xlIGNhbGwgdXNpbmcgYSBjYWxsLWJhY2sKLSAgIGludGVyZmFjZSBmb3IgaW5wdXQgYW5kIG91dHB1dC4gIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBpbmZsYXRlKCkgZm9yCi0gICBmaWxlIGkvbyBhcHBsaWNhdGlvbnMgaW4gdGhhdCBpdCBhdm9pZHMgY29weWluZyBiZXR3ZWVuIHRoZSBvdXRwdXQgYW5kIHRoZQotICAgc2xpZGluZyB3aW5kb3cgYnkgc2ltcGx5IG1ha2luZyB0aGUgd2luZG93IGl0c2VsZiB0aGUgb3V0cHV0IGJ1ZmZlci4gIFRoaXMKLSAgIGZ1bmN0aW9uIHRydXN0cyB0aGUgYXBwbGljYXRpb24gdG8gbm90IGNoYW5nZSB0aGUgb3V0cHV0IGJ1ZmZlciBwYXNzZWQgYnkKLSAgIHRoZSBvdXRwdXQgZnVuY3Rpb24sIGF0IGxlYXN0IHVudGlsIGluZmxhdGVCYWNrKCkgcmV0dXJucy4KKyAgIGludGVyZmFjZSBmb3IgaW5wdXQgYW5kIG91dHB1dC4gIFRoaXMgaXMgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQgdGhhbgorICAgaW5mbGF0ZSgpIGZvciBmaWxlIGkvbyBhcHBsaWNhdGlvbnMsIGluIHRoYXQgaXQgYXZvaWRzIGNvcHlpbmcgYmV0d2VlbiB0aGUKKyAgIG91dHB1dCBhbmQgdGhlIHNsaWRpbmcgd2luZG93IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYgdGhlIG91dHB1dAorICAgYnVmZmVyLiAgaW5mbGF0ZSgpIGNhbiBiZSBmYXN0ZXIgb24gbW9kZXJuIENQVXMgd2hlbiB1c2VkIHdpdGggbGFyZ2UKKyAgIGJ1ZmZlcnMuICBpbmZsYXRlQmFjaygpIHRydXN0cyB0aGUgYXBwbGljYXRpb24gdG8gbm90IGNoYW5nZSB0aGUgb3V0cHV0CisgICBidWZmZXIgcGFzc2VkIGJ5IHRoZSBvdXRwdXQgZnVuY3Rpb24sIGF0IGxlYXN0IHVudGlsIGluZmxhdGVCYWNrKCkgcmV0dXJucy4KIAogICAgICBpbmZsYXRlQmFja0luaXQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUKICAgIGFuZCB0byBpbml0aWFsaXplIHRoZSBzdGF0ZSB3aXRoIHRoZSB1c2VyLXByb3ZpZGVkIHdpbmRvdyBidWZmZXIuCkBAIC0xMDg4LDYgKzExNDUsNyBAQAogICAgICAyNy0zMTogMCAocmVzZXJ2ZWQpCiAgKi8KIAorI2lmbmRlZiBaX1NPTE8KIAogICAgICAgICAgICAgICAgICAgICAgICAgLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KIApAQCAtMTE0OSwxMCArMTIwNywxMSBAQAogCiAgICAgIHVuY29tcHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKICAgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dAotICAgYnVmZmVyLCBvciBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzIGNvcnJ1cHRlZCBvciBpbmNvbXBsZXRlLgorICAgYnVmZmVyLCBvciBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzIGNvcnJ1cHRlZCBvciBpbmNvbXBsZXRlLiAgSW4KKyAgIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSwgdW5jb21wcmVzcygpIHdpbGwgZmlsbCB0aGUgb3V0cHV0CisgICBidWZmZXIgd2l0aCB0aGUgdW5jb21wcmVzc2VkIGRhdGEgdXAgdG8gdGhhdCBwb2ludC4KICovCiAKLQogICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3ppcCBmaWxlIGFjY2VzcyBmdW5jdGlvbnMgKi8KIAogLyoKQEAgLTExNjIsNyArMTIyMSw3IEBACiAgICB3cmFwcGVyLCBkb2N1bWVudGVkIGluIFJGQyAxOTUyLCB3cmFwcGVkIGFyb3VuZCBhIGRlZmxhdGUgc3RyZWFtLgogKi8KIAotdHlwZWRlZiB2b2lkcCBnekZpbGU7ICAgICAgIC8qIG9wYXF1ZSBnemlwIGZpbGUgZGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgZ3pGaWxlX3MgKmd6RmlsZTsgICAgLyogc2VtaS1vcGFxdWUgZ3ppcCBmaWxlIGRlc2NyaXB0b3IgKi8KIAogLyoKIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIE9GKChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKSk7CkBAIC0xMTcyLDEzICsxMjMxLDI4IEBACiAgICBhIHN0cmF0ZWd5OiAnZicgZm9yIGZpbHRlcmVkIGRhdGEgYXMgaW4gIndiNmYiLCAnaCcgZm9yIEh1ZmZtYW4tb25seQogICAgY29tcHJlc3Npb24gYXMgaW4gIndiMWgiLCAnUicgZm9yIHJ1bi1sZW5ndGggZW5jb2RpbmcgYXMgaW4gIndiMVIiLCBvciAnRicKICAgIGZvciBmaXhlZCBjb2RlIGNvbXByZXNzaW9uIGFzIGluICJ3YjlGIi4gIChTZWUgdGhlIGRlc2NyaXB0aW9uIG9mCi0gICBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmF0ZWd5IHBhcmFtZXRlci4pIEFsc28gImEiCi0gICBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mICJ3IiB0byByZXF1ZXN0IHRoYXQgdGhlIGd6aXAgc3RyZWFtIHRoYXQgd2lsbCBiZQotICAgd3JpdHRlbiBiZSBhcHBlbmRlZCB0byB0aGUgZmlsZS4gICIrIiB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciwgc2luY2UgcmVhZGluZwotICAgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgZ3ppcCBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQuCisgICBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmF0ZWd5IHBhcmFtZXRlci4pICAnVCcgd2lsbAorICAgcmVxdWVzdCB0cmFuc3BhcmVudCB3cml0aW5nIG9yIGFwcGVuZGluZyB3aXRoIG5vIGNvbXByZXNzaW9uIGFuZCBub3QgdXNpbmcKKyAgIHRoZSBnemlwIGZvcm1hdC4KKworICAgICAiYSIgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwKKyAgIGJlIHdyaXR0ZW4gYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICAiKyIgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IsIHNpbmNlCisgICByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBzYW1lIGd6aXAgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLiAgVGhlIGFkZGl0aW9uIG9mCisgICAieCIgd2hlbiB3cml0aW5nIHdpbGwgY3JlYXRlIHRoZSBmaWxlIGV4Y2x1c2l2ZWx5LCB3aGljaCBmYWlscyBpZiB0aGUgZmlsZQorICAgYWxyZWFkeSBleGlzdHMuICBPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgdGhlIGFkZGl0aW9uIG9mICJlIiB3aGVuCisgICByZWFkaW5nIG9yIHdyaXRpbmcgd2lsbCBzZXQgdGhlIGZsYWcgdG8gY2xvc2UgdGhlIGZpbGUgb24gYW4gZXhlY3ZlKCkgY2FsbC4KKworICAgICBUaGVzZSBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgZ3ppcCwgd2lsbCByZWFkIGFuZCBkZWNvZGUgYSBzZXF1ZW5jZSBvZiBnemlwCisgICBzdHJlYW1zIGluIGEgZmlsZS4gIFRoZSBhcHBlbmQgZnVuY3Rpb24gb2YgZ3pvcGVuKCkgY2FuIGJlIHVzZWQgdG8gY3JlYXRlCisgICBzdWNoIGEgZmlsZS4gIChBbHNvIHNlZSBnemZsdXNoKCkgZm9yIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMuKSAgV2hlbgorICAgYXBwZW5kaW5nLCBnem9wZW4gZG9lcyBub3QgdGVzdCB3aGV0aGVyIHRoZSBmaWxlIGJlZ2lucyB3aXRoIGEgZ3ppcCBzdHJlYW0sCisgICBub3IgZG9lcyBpdCBsb29rIGZvciB0aGUgZW5kIG9mIHRoZSBnemlwIHN0cmVhbXMgdG8gYmVnaW4gYXBwZW5kaW5nLiAgZ3pvcGVuCisgICB3aWxsIHNpbXBseSBhcHBlbmQgYSBnemlwIHN0cmVhbSB0byB0aGUgZXhpc3RpbmcgZmlsZS4KIAogICAgICBnem9wZW4gY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGZpbGUgd2hpY2ggaXMgbm90IGluIGd6aXAgZm9ybWF0OyBpbiB0aGlzCi0gICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uCisgICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBXaGVuCisgICByZWFkaW5nLCB0aGlzIHdpbGwgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSBieSBsb29raW5nIGZvciB0aGUgbWFnaWMgdHdvLQorICAgYnl0ZSBnemlwIGhlYWRlci4KIAogICAgICBnem9wZW4gcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQsIGlmIHRoZXJlIHdhcwogICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgZ3pGaWxlIHN0YXRlLCBvciBpZiBhbiBpbnZhbGlkIG1vZGUgd2FzCkBAIC0xMTk3LDcgKzEyNzEsMTEgQEAKICAgIGRlc2NyaXB0b3IgZmQsIGp1c3QgbGlrZSBmY2xvc2UoZmRvcGVuKGZkLCBtb2RlKSkgY2xvc2VzIHRoZSBmaWxlIGRlc2NyaXB0b3IKICAgIGZkLiAgSWYgeW91IHdhbnQgdG8ga2VlcCBmZCBvcGVuLCB1c2UgZmQgPSBkdXAoZmRfa2VlcCk7IGd6ID0gZ3pkb3BlbihmZCwKICAgIG1vZGUpOy4gIFRoZSBkdXBsaWNhdGVkIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHNhdmVkIHRvIGF2b2lkIGEgbGVhaywgc2luY2UKLSAgIGd6ZG9wZW4gZG9lcyBub3QgY2xvc2UgZmQgaWYgaXQgZmFpbHMuCisgICBnemRvcGVuIGRvZXMgbm90IGNsb3NlIGZkIGlmIGl0IGZhaWxzLiAgSWYgeW91IGFyZSB1c2luZyBmaWxlbm8oKSB0byBnZXQgdGhlCisgICBmaWxlIGRlc2NyaXB0b3IgZnJvbSBhIEZJTEUgKiwgdGhlbiB5b3Ugd2lsbCBoYXZlIHRvIHVzZSBkdXAoKSB0byBhdm9pZAorICAgZG91YmxlLWNsb3NlKClpbmcgdGhlIGZpbGUgZGVzY3JpcHRvci4gIEJvdGggZ3pjbG9zZSgpIGFuZCBmY2xvc2UoKSB3aWxsCisgICBjbG9zZSB0aGUgYXNzb2NpYXRlZCBmaWxlIGRlc2NyaXB0b3IsIHNvIHRoZXkgbmVlZCB0byBoYXZlIGRpZmZlcmVudCBmaWxlCisgICBkZXNjcmlwdG9ycy4KIAogICAgICBnemRvcGVuIHJldHVybnMgTlVMTCBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUKICAgIGd6RmlsZSBzdGF0ZSwgaWYgYW4gaW52YWxpZCBtb2RlIHdhcyBzcGVjaWZpZWQgKGFuICdyJywgJ3cnLCBvciAnYScgd2FzIG5vdApAQCAtMTIzNSwxNCArMTMxMywyNiBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnenJlYWQgT0YoKGd6RmlsZSBmaWxlLCB2b2lkcCBidWYsIHVuc2lnbmVkIGxlbikpOwogLyoKICAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiAgSWYKLSAgIHRoZSBpbnB1dCBmaWxlIHdhcyBub3QgaW4gZ3ppcCBmb3JtYXQsIGd6cmVhZCBjb3BpZXMgdGhlIGdpdmVuIG51bWJlciBvZgotICAgYnl0ZXMgaW50byB0aGUgYnVmZmVyLgorICAgdGhlIGlucHV0IGZpbGUgaXMgbm90IGluIGd6aXAgZm9ybWF0LCBnenJlYWQgY29waWVzIHRoZSBnaXZlbiBudW1iZXIgb2YKKyAgIGJ5dGVzIGludG8gdGhlIGJ1ZmZlciBkaXJlY3RseSBmcm9tIHRoZSBmaWxlLgogCiAgICAgIEFmdGVyIHJlYWNoaW5nIHRoZSBlbmQgb2YgYSBnemlwIHN0cmVhbSBpbiB0aGUgaW5wdXQsIGd6cmVhZCB3aWxsIGNvbnRpbnVlCi0gICB0byByZWFkLCBsb29raW5nIGZvciBhbm90aGVyIGd6aXAgc3RyZWFtLCBvciBmYWlsaW5nIHRoYXQsIHJlYWRpbmcgdGhlIHJlc3QKLSAgIG9mIHRoZSBpbnB1dCBmaWxlIGRpcmVjdGx5IHdpdGhvdXQgZGVjb21wcmVzc2lvbi4gIFRoZSBlbnRpcmUgaW5wdXQgZmlsZQotICAgd2lsbCBiZSByZWFkIGlmIGd6cmVhZCBpcyBjYWxsZWQgdW50aWwgaXQgcmV0dXJucyBsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZAotICAgbGVuLgorICAgdG8gcmVhZCwgbG9va2luZyBmb3IgYW5vdGhlciBnemlwIHN0cmVhbS4gIEFueSBudW1iZXIgb2YgZ3ppcCBzdHJlYW1zIG1heSBiZQorICAgY29uY2F0ZW5hdGVkIGluIHRoZSBpbnB1dCBmaWxlLCBhbmQgd2lsbCBhbGwgYmUgZGVjb21wcmVzc2VkIGJ5IGd6cmVhZCgpLgorICAgSWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBnemlwIHN0cmVhbSBpcyBlbmNvdW50ZXJlZCBhZnRlciBhIGd6aXAgc3RyZWFtLAorICAgdGhhdCByZW1haW5pbmcgdHJhaWxpbmcgZ2FyYmFnZSBpcyBpZ25vcmVkIChhbmQgbm8gZXJyb3IgaXMgcmV0dXJuZWQpLgorCisgICAgIGd6cmVhZCBjYW4gYmUgdXNlZCB0byByZWFkIGEgZ3ppcCBmaWxlIHRoYXQgaXMgYmVpbmcgY29uY3VycmVudGx5IHdyaXR0ZW4uCisgICBVcG9uIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0LCBnenJlYWQgd2lsbCByZXR1cm4gd2l0aCB0aGUgYXZhaWxhYmxlCisgICBkYXRhLiAgSWYgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgZ3plcnJvciBpcyBaX09LIG9yIFpfQlVGX0VSUk9SLCB0aGVuCisgICBnemNsZWFyZXJyIGNhbiBiZSB1c2VkIHRvIGNsZWFyIHRoZSBlbmQgb2YgZmlsZSBpbmRpY2F0b3IgaW4gb3JkZXIgdG8gcGVybWl0CisgICBnenJlYWQgdG8gYmUgdHJpZWQgYWdhaW4uICBaX09LIGluZGljYXRlcyB0aGF0IGEgZ3ppcCBzdHJlYW0gd2FzIGNvbXBsZXRlZAorICAgb24gdGhlIGxhc3QgZ3pyZWFkLiAgWl9CVUZfRVJST1IgaW5kaWNhdGVzIHRoYXQgdGhlIGlucHV0IGZpbGUgZW5kZWQgaW4gdGhlCisgICBtaWRkbGUgb2YgYSBnemlwIHN0cmVhbS4gIE5vdGUgdGhhdCBnenJlYWQgZG9lcyBub3QgcmV0dXJuIC0xIGluIHRoZSBldmVudAorICAgb2YgYW4gaW5jb21wbGV0ZSBnemlwIHN0cmVhbS4gIFRoaXMgZXJyb3IgaXMgZGVmZXJyZWQgdW50aWwgZ3pjbG9zZSgpLCB3aGljaAorICAgd2lsbCByZXR1cm4gWl9CVUZfRVJST1IgaWYgdGhlIGxhc3QgZ3pyZWFkIGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgYSBnemlwCisgICBzdHJlYW0uICBBbHRlcm5hdGl2ZWx5LCBnemVycm9yIGNhbiBiZSB1c2VkIGJlZm9yZSBnemNsb3NlIHRvIGRldGVjdCB0aGlzCisgICBjYXNlLgogCiAgICAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQsIGxlc3MgdGhhbgogICAgbGVuIGZvciBlbmQgb2YgZmlsZSwgb3IgLTEgZm9yIGVycm9yLgpAQCAtMTI1Niw3ICsxMzQ2LDcgQEAKICAgIGVycm9yLgogKi8KIAotWkVYVEVSTiBpbnQgWkVYUE9SVFZBIGd6cHJpbnRmIE9GKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKK1pFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBaX0FSRygoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CiAvKgogICAgICBDb252ZXJ0cywgZm9ybWF0cywgYW5kIHdyaXRlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKICAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuICBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKQEAgLTEzMDEsNyArMTM5MSwxMCBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnemdldGMgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgogICAgICBSZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuICBnemdldGMgcmV0dXJucyB0aGlzIGJ5dGUgb3IgLTEKLSAgIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUgb3IgZXJyb3IuCisgICBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvIGZvciBzcGVlZC4KKyAgIEFzIHN1Y2gsIGl0IGRvZXMgbm90IGRvIGFsbCBvZiB0aGUgY2hlY2tpbmcgdGhlIG90aGVyIGZ1bmN0aW9ucyBkby4gIEkuZS4KKyAgIGl0IGRvZXMgbm90IGNoZWNrIHRvIHNlZSBpZiBmaWxlIGlzIE5VTEwsIG5vciB3aGV0aGVyIHRoZSBzdHJ1Y3R1cmUgZmlsZQorICAgcG9pbnRzIHRvIGhhcyBiZWVuIGNsb2JiZXJlZCBvciBub3QuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGd6dW5nZXRjIE9GKChpbnQgYywgZ3pGaWxlIGZpbGUpKTsKQEAgLTEzOTcsOSArMTQ5MCw3IEBACiBaRVhURVJOIGludCBaRVhQT1JUIGd6ZGlyZWN0IE9GKChnekZpbGUgZmlsZSkpOwogLyoKICAgICAgUmV0dXJucyB0cnVlICgxKSBpZiBmaWxlIGlzIGJlaW5nIGNvcGllZCBkaXJlY3RseSB3aGlsZSByZWFkaW5nLCBvciBmYWxzZQotICAgKDApIGlmIGZpbGUgaXMgYSBnemlwIHN0cmVhbSBiZWluZyBkZWNvbXByZXNzZWQuICBUaGlzIHN0YXRlIGNhbiBjaGFuZ2UgZnJvbQotICAgZmFsc2UgdG8gdHJ1ZSB3aGlsZSByZWFkaW5nIHRoZSBpbnB1dCBmaWxlIGlmIHRoZSBlbmQgb2YgYSBnemlwIHN0cmVhbSBpcwotICAgcmVhY2hlZCwgYnV0IGlzIGZvbGxvd2VkIGJ5IGRhdGEgdGhhdCBpcyBub3QgYW5vdGhlciBnemlwIHN0cmVhbS4KKyAgICgwKSBpZiBmaWxlIGlzIGEgZ3ppcCBzdHJlYW0gYmVpbmcgZGVjb21wcmVzc2VkLgogCiAgICAgIElmIHRoZSBpbnB1dCBmaWxlIGlzIGVtcHR5LCBnemRpcmVjdCgpIHdpbGwgcmV0dXJuIHRydWUsIHNpbmNlIHRoZSBpbnB1dAogICAgZG9lcyBub3QgY29udGFpbiBhIGd6aXAgc3RyZWFtLgpAQCAtMTQwOCw2ICsxNDk5LDEzIEBACiAgICBjYXVzZSBidWZmZXJzIHRvIGJlIGFsbG9jYXRlZCB0byBhbGxvdyByZWFkaW5nIHRoZSBmaWxlIHRvIGRldGVybWluZSBpZiBpdAogICAgaXMgYSBnemlwIGZpbGUuICBUaGVyZWZvcmUgaWYgZ3pidWZmZXIoKSBpcyB1c2VkLCBpdCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZQogICAgZ3pkaXJlY3QoKS4KKworICAgICBXaGVuIHdyaXRpbmcsIGd6ZGlyZWN0KCkgcmV0dXJucyB0cnVlICgxKSBpZiB0cmFuc3BhcmVudCB3cml0aW5nIHdhcworICAgcmVxdWVzdGVkICgid1QiIGZvciB0aGUgZ3pvcGVuKCkgbW9kZSksIG9yIGZhbHNlICgwKSBvdGhlcndpc2UuICAoTm90ZToKKyAgIGd6ZGlyZWN0KCkgaXMgbm90IG5lZWRlZCB3aGVuIHdyaXRpbmcuICBUcmFuc3BhcmVudCB3cml0aW5nIG11c3QgYmUKKyAgIGV4cGxpY2l0bHkgcmVxdWVzdGVkLCBzbyB0aGUgYXBwbGljYXRpb24gYWxyZWFkeSBrbm93cyB0aGUgYW5zd2VyLiAgV2hlbgorICAgbGlua2luZyBzdGF0aWNhbGx5LCB1c2luZyBnemRpcmVjdCgpIHdpbGwgaW5jbHVkZSBhbGwgb2YgdGhlIHpsaWIgY29kZSBmb3IKKyAgIGd6aXAgZmlsZSByZWFkaW5nIGFuZCBkZWNvbXByZXNzaW9uLCB3aGljaCBtYXkgbm90IGJlIGRlc2lyZWQuKQogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCAgICBnemNsb3NlIE9GKChnekZpbGUgZmlsZSkpOwpAQCAtMTQxOSw3ICsxNTE3LDggQEAKICAgIG11c3Qgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBhbGxvY2F0aW9uLgogCiAgICAgIGd6Y2xvc2Ugd2lsbCByZXR1cm4gWl9TVFJFQU1fRVJST1IgaWYgZmlsZSBpcyBub3QgdmFsaWQsIFpfRVJSTk8gb24gYQotICAgZmlsZSBvcGVyYXRpb24gZXJyb3IsIG9yIFpfT0sgb24gc3VjY2Vzcy4KKyAgIGZpbGUgb3BlcmF0aW9uIGVycm9yLCBaX01FTV9FUlJPUiBpZiBvdXQgb2YgbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGUKKyAgIGxhc3QgcmVhZCBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgZ3ppcCBzdHJlYW0sIG9yIFpfT0sgb24gc3VjY2Vzcy4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pjbG9zZV9yIE9GKChnekZpbGUgZmlsZSkpOwpAQCAtMTQ1Nyw2ICsxNTU2LDcgQEAKICAgIGZpbGUgdGhhdCBpcyBiZWluZyB3cml0dGVuIGNvbmN1cnJlbnRseS4KICovCiAKKyNlbmRpZiAvKiAhWl9TT0xPICovCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrc3VtIGZ1bmN0aW9ucyAqLwogCkBAIC0xNDkyLDE2ICsxNTkyLDE3IEBACiAgICAgIENvbWJpbmUgdHdvIEFkbGVyLTMyIGNoZWNrc3VtcyBpbnRvIG9uZS4gIEZvciB0d28gc2VxdWVuY2VzIG9mIGJ5dGVzLCBzZXExCiAgICBhbmQgc2VxMiB3aXRoIGxlbmd0aHMgbGVuMSBhbmQgbGVuMiwgQWRsZXItMzIgY2hlY2tzdW1zIHdlcmUgY2FsY3VsYXRlZCBmb3IKICAgIGVhY2gsIGFkbGVyMSBhbmQgYWRsZXIyLiAgYWRsZXIzMl9jb21iaW5lKCkgcmV0dXJucyB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YKLSAgIHNlcTEgYW5kIHNlcTIgY29uY2F0ZW5hdGVkLCByZXF1aXJpbmcgb25seSBhZGxlcjEsIGFkbGVyMiwgYW5kIGxlbjIuCisgICBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgYWRsZXIxLCBhZGxlcjIsIGFuZCBsZW4yLiAgTm90ZQorICAgdGhhdCB0aGUgel9vZmZfdCB0eXBlIChsaWtlIG9mZl90KSBpcyBhIHNpZ25lZCBpbnRlZ2VyLiAgSWYgbGVuMiBpcworICAgbmVnYXRpdmUsIHRoZSByZXN1bHQgaGFzIG5vIG1lYW5pbmcgb3IgdXRpbGl0eS4KICovCiAKIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMiAgIE9GKCh1TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7CiAvKgogICAgICBVcGRhdGUgYSBydW5uaW5nIENSQy0zMiB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZCByZXR1cm4gdGhlCiAgICB1cGRhdGVkIENSQy0zMi4gIElmIGJ1ZiBpcyBaX05VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWlyZWQKLSAgIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBmb3IgdGhlIGNyYy4gIFByZS0gYW5kIHBvc3QtY29uZGl0aW9uaW5nIChvbmUncwotICAgY29tcGxlbWVudCkgaXMgcGVyZm9ybWVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBkb25lIGJ5IHRoZQotICAgYXBwbGljYXRpb24uCisgICBpbml0aWFsIHZhbHVlIGZvciB0aGUgY3JjLiAgUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcgKG9uZSdzIGNvbXBsZW1lbnQpIGlzCisgICBwZXJmb3JtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlIGFwcGxpY2F0aW9uLgogCiAgICBVc2FnZSBleGFtcGxlOgogCkBAIC0xNTQ0LDE3ICsxNjQ1LDQyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJlYW1fc2l6ZSkpOwogI2RlZmluZSBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgXAotICAgICAgICBkZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgIGRlZmxhdGVJbml0Xygoc3RybSksIChsZXZlbCksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlSW5pdChzdHJtKSBcCi0gICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgaW5mbGF0ZUluaXRfKChzdHJtKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIFwKICAgICAgICAgZGVmbGF0ZUluaXQyXygoc3RybSksKGxldmVsKSwobWV0aG9kKSwod2luZG93Qml0cyksKG1lbUxldmVsKSxcCi0gICAgICAgICAgICAgICAgICAgICAgKHN0cmF0ZWd5KSwgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgICAgICAgICAgICAgICAoc3RyYXRlZ3kpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgaW5mbGF0ZUluaXQyKHN0cm0sIHdpbmRvd0JpdHMpIFwKLSAgICAgICAgaW5mbGF0ZUluaXQyXygoc3RybSksICh3aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIFwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGluZmxhdGVCYWNrSW5pdChzdHJtLCB3aW5kb3dCaXRzLCB3aW5kb3cpIFwKICAgICAgICAgaW5mbGF0ZUJhY2tJbml0Xygoc3RybSksICh3aW5kb3dCaXRzKSwgKHdpbmRvdyksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorCisjaWZuZGVmIFpfU09MTworCisvKiBnemdldGMoKSBtYWNybyBhbmQgaXRzIHN1cHBvcnRpbmcgZnVuY3Rpb24gYW5kIGV4cG9zZWQgZGF0YSBzdHJ1Y3R1cmUuICBOb3RlCisgKiB0aGF0IHRoZSByZWFsIGludGVybmFsIHN0YXRlIGlzIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIGV4cG9zZWQgc3RydWN0dXJlLgorICogVGhpcyBhYmJyZXZpYXRlZCBzdHJ1Y3R1cmUgZXhwb3NlcyBqdXN0IGVub3VnaCBmb3IgdGhlIGd6Z2V0YygpIG1hY3JvLiAgVGhlCisgKiB1c2VyIHNob3VsZCBub3QgbWVzcyB3aXRoIHRoZXNlIGV4cG9zZWQgZWxlbWVudHMsIHNpbmNlIHRoZWlyIG5hbWVzIG9yCisgKiBiZWhhdmlvciBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwgcGVyaGFwcyBldmVuIGNhcHJpY2lvdXNseS4gIFRoZXkgY2FuCisgKiBvbmx5IGJlIHVzZWQgYnkgdGhlIGd6Z2V0YygpIG1hY3JvLiAgWW91IGhhdmUgYmVlbiB3YXJuZWQuCisgKi8KK3N0cnVjdCBnekZpbGVfcyB7CisgICAgdW5zaWduZWQgaGF2ZTsKKyAgICB1bnNpZ25lZCBjaGFyICpuZXh0OworICAgIHpfb2ZmNjRfdCBwb3M7Cit9OworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemdldGNfIE9GKChnekZpbGUgZmlsZSkpOyAgLyogYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAgdW5kZWYgel9nemdldGMKKyMgIGRlZmluZSB6X2d6Z2V0YyhnKSBcCisgICAgICAgICAgKChnKS0+aGF2ZSA/ICgoZyktPmhhdmUtLSwgKGcpLT5wb3MrKywgKigoZyktPm5leHQpKyspIDogZ3pnZXRjKGcpKQorI2Vsc2UKKyMgIGRlZmluZSBnemdldGMoZykgXAorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IGd6Z2V0YyhnKSkKKyNlbmRpZgogCiAvKiBwcm92aWRlIDY0LWJpdCBvZmZzZXQgZnVuY3Rpb25zIGlmIF9MQVJHRUZJTEU2NF9TT1VSQ0UgZGVmaW5lZCwgYW5kL29yCiAgKiBjaGFuZ2UgdGhlIHJlZ3VsYXIgZnVuY3Rpb25zIHRvIDY0IGJpdHMgaWYgX0ZJTEVfT0ZGU0VUX0JJVFMgaXMgNjQgKGlmCkBAIC0xNTYyLDcgKzE2ODgsNyBAQAogICogZnVuY3Rpb25zIGFyZSBjaGFuZ2VkIHRvIDY0IGJpdHMpIC0tIGluIGNhc2UgdGhlc2UgYXJlIHNldCBvbiBzeXN0ZW1zCiAgKiB3aXRob3V0IGxhcmdlIGZpbGUgc3VwcG9ydCwgX0xGUzY0X0xBUkdFRklMRSBtdXN0IGFsc28gYmUgdHJ1ZQogICovCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZmRlZiBaX0xBUkdFNjQKICAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CiAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmNjRfdCwgaW50KSk7CiAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6dGVsbDY0IE9GKChnekZpbGUpKTsKQEAgLTE1NzEsMTQgKzE2OTcsMjMgQEAKICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmY2NF90KSk7CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKFpMSUJfSU5URVJOQUwpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgX0xGUzY0X0xBUkdFRklMRS0wCi0jICBkZWZpbmUgZ3pvcGVuIGd6b3BlbjY0Ci0jICBkZWZpbmUgZ3pzZWVrIGd6c2VlazY0Ci0jICBkZWZpbmUgZ3p0ZWxsIGd6dGVsbDY0Ci0jICBkZWZpbmUgZ3pvZmZzZXQgZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSBhZGxlcjMyX2NvbWJpbmU2NAotIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgY3JjMzJfY29tYmluZTY0Ci0jICBpZmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisjaWYgIWRlZmluZWQoWkxJQl9JTlRFUk5BTCkgJiYgZGVmaW5lZChaX1dBTlQ2NCkKKyMgIGlmZGVmIFpfUFJFRklYX1NFVAorIyAgICBkZWZpbmUgel9nem9wZW4gel9nem9wZW42NAorIyAgICBkZWZpbmUgel9nenNlZWsgel9nenNlZWs2NAorIyAgICBkZWZpbmUgel9nenRlbGwgel9nenRlbGw2NAorIyAgICBkZWZpbmUgel9nem9mZnNldCB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIHpfYWRsZXIzMl9jb21iaW5lIHpfYWRsZXIzMl9jb21iaW5lNjQKKyMgICAgZGVmaW5lIHpfY3JjMzJfY29tYmluZSB6X2NyYzMyX2NvbWJpbmU2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgZ3pvcGVuIGd6b3BlbjY0CisjICAgIGRlZmluZSBnenNlZWsgZ3pzZWVrNjQKKyMgICAgZGVmaW5lIGd6dGVsbCBnenRlbGw2NAorIyAgICBkZWZpbmUgZ3pvZmZzZXQgZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lIGFkbGVyMzJfY29tYmluZTY0CisjICAgIGRlZmluZSBjcmMzMl9jb21iaW5lIGNyYzMyX2NvbWJpbmU2NAorIyAgZW5kaWYKKyMgIGlmbmRlZiBaX0xBUkdFNjQKICAgICAgWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKICAgICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pzZWVrNjQgT0YoKGd6RmlsZSwgel9vZmZfdCwgaW50KSk7CiAgICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6dGVsbDY0IE9GKChnekZpbGUpKTsKQEAgLTE1OTUsNiArMTczMCwxMyBAQAogICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOwogI2VuZGlmCiAKKyNlbHNlIC8qIFpfU09MTyAqLworCisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKworI2VuZGlmIC8qICFaX1NPTE8gKi8KKwogLyogaGFjayBmb3IgYnVnZ3kgY29tcGlsZXJzICovCiAjaWYgIWRlZmluZWQoWlVUSUxfSCkgJiYgIWRlZmluZWQoTk9fRFVNTVlfREVDTCkKICAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9OwpAQCAtMTYwMyw4ICsxNzQ1LDIxIEBACiAvKiB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zICovCiBaRVhURVJOIGNvbnN0IGNoYXIgICAqIFpFWFBPUlQgekVycm9yICAgICAgICAgICBPRigoaW50KSk7CiBaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVN5bmNQb2ludCBPRigoel9zdHJlYW1wKSk7Ci1aRVhURVJOIGNvbnN0IHVMb25nZiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSAgICBPRigodm9pZCkpOworWkVYVEVSTiBjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSAgICBPRigodm9pZCkpOwogWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVVbmRlcm1pbmUgT0YoKHpfc3RyZWFtcCwgaW50KSk7CitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVJlc2V0S2VlcCBPRigoel9zdHJlYW1wKSk7CitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgZGVmbGF0ZVJlc2V0S2VlcCBPRigoel9zdHJlYW1wKSk7CisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKFpfU09MTykKK1pFWFRFUk4gZ3pGaWxlICAgICAgICAgWkVYUE9SVCBnem9wZW5fdyBPRigoY29uc3Qgd2NoYXJfdCAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kZSkpOworI2VuZGlmCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVFZBIGd6dnByaW50ZiBaX0FSRygoZ3pGaWxlIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCB2YSkpOworIyAgZW5kaWYKKyNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96bGliLm1hcCBiL01vZHVsZXMvemxpYi96bGliLm1hcAppbmRleCBmMjgyZDM2Li41NWM2NjQ3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemxpYi5tYXAKKysrIGIvTW9kdWxlcy96bGliL3psaWIubWFwCkBAIC02NiwzICs2NiwxOCBAQAogICAgIGd6Y2xvc2VfcjsKICAgICBnemNsb3NlX3c7CiB9IFpMSUJfMS4yLjMuNDsKKworWkxJQl8xLjIuNS4xIHsKKyAgICBkZWZsYXRlUGVuZGluZzsKK30gWkxJQl8xLjIuMy41OworCitaTElCXzEuMi41LjIgeworICAgIGRlZmxhdGVSZXNldEtlZXA7CisgICAgZ3pnZXRjXzsKKyAgICBpbmZsYXRlUmVzZXRLZWVwOworfSBaTElCXzEuMi41LjE7CisKK1pMSUJfMS4yLjcuMSB7CisgICAgaW5mbGF0ZUdldERpY3Rpb25hcnk7CisgICAgZ3p2cHJpbnRmOworfSBaTElCXzEuMi41LjI7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvenV0aWwuYyBiL01vZHVsZXMvemxpYi96dXRpbC5jCmluZGV4IDg5OGVkMzQuLjIzZDJlYmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96dXRpbC5jCisrKyBiL01vZHVsZXMvemxpYi96dXRpbC5jCkBAIC0xLDE3ICsxLDIwIEBACiAvKiB6dXRpbC5jIC0tIHRhcmdldCBkZXBlbmRlbnQgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSwgMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTAsIDIwMTEsIDIwMTIgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCiAvKiBAKCMpICRJZCQgKi8KIAogI2luY2x1ZGUgInp1dGlsLmgiCisjaWZuZGVmIFpfU09MTworIyAgaW5jbHVkZSAiZ3pndXRzLmgiCisjZW5kaWYKIAogI2lmbmRlZiBOT19EVU1NWV9ERUNMCiBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgICAgICB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KICNlbmRpZgogCi1jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdID0geworel9jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdID0gewogIm5lZWQgZGljdGlvbmFyeSIsICAgICAvKiBaX05FRURfRElDVCAgICAgICAyICAqLwogInN0cmVhbSBlbmQiLCAgICAgICAgICAvKiBaX1NUUkVBTV9FTkQgICAgICAxICAqLwogIiIsICAgICAgICAgICAgICAgICAgICAvKiBaX09LICAgICAgICAgICAgICAwICAqLwpAQCAtODUsMjcgKzg4LDI3IEBACiAjaWZkZWYgRkFTVEVTVAogICAgIGZsYWdzICs9IDFMIDw8IDIxOwogI2VuZGlmCi0jaWZkZWYgU1REQworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCiAjICBpZmRlZiBOT192c25wcmludGYKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CiAjICAgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZWxzZQogIyAgICBpZmRlZiBIQVNfdnNucHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbmRpZgogI2Vsc2UKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjQ7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjQ7CiAjICBpZmRlZiBOT19zbnByaW50ZgotICAgICAgICBmbGFncyArPSAxTCA8PCAyNTsKKyAgICBmbGFncyArPSAxTCA8PCAyNTsKICMgICAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVsc2UKICMgICAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCkBAIC0xODEsNiArMTg0LDcgQEAKIH0KICNlbmRpZgogCisjaWZuZGVmIFpfU09MTwogCiAjaWZkZWYgU1lTMTZCSVQKIApAQCAtMzE2LDMgKzMyMCw1IEBACiB9CiAKICNlbmRpZiAvKiBNWV9aQ0FMTE9DICovCisKKyNlbmRpZiAvKiAhWl9TT0xPICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvenV0aWwuaCBiL01vZHVsZXMvemxpYi96dXRpbC5oCmluZGV4IDI1OGZhODguLjI0YWIwNmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96dXRpbC5oCisrKyBiL01vZHVsZXMvemxpYi96dXRpbC5oCkBAIC0xLDUgKzEsNSBAQAogLyogenV0aWwuaCAtLSBpbnRlcm5hbCBpbnRlcmZhY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTEzLDcgKzEzLDcgQEAKICNpZm5kZWYgWlVUSUxfSAogI2RlZmluZSBaVVRJTF9ICiAKLSNpZiAoKF9fR05VQ19fLTApICogMTAgKyBfX0dOVUNfTUlOT1JfXy0wID49IDMzKSAmJiAhZGVmaW5lZChOT19WSVopCisjaWZkZWYgSEFWRV9ISURERU4KICMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiAjZWxzZQogIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgInpsaWIuaCIKIAotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGlmICEoZGVmaW5lZChfV0lOMzJfV0NFKSAmJiBkZWZpbmVkKF9NU0NfVkVSKSkKICMgICAgaW5jbHVkZSA8c3RkZGVmLmg+CiAjICBlbmRpZgpAQCAtMjksNiArMjksMTAgQEAKICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAKKyNpZmRlZiBaX1NPTE8KKyAgIHR5cGVkZWYgbG9uZyBwdHJkaWZmX3Q7ICAvKiBndWVzcyAtLSB3aWxsIGJlIGNhdWdodCBpZiBndWVzcyBpcyB3cm9uZyAqLworI2VuZGlmCisKICNpZm5kZWYgbG9jYWwKICMgIGRlZmluZSBsb2NhbCBzdGF0aWMKICNlbmRpZgpAQCAtNDAsMTMgKzQ0LDEzIEBACiB0eXBlZGVmIHVzaCBGQVIgdXNoZjsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdWxnOwogCi1leHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXTsgLyogaW5kZXhlZCBieSAyLXpsaWJfZXJyb3IgKi8KK2V4dGVybiB6X2NvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF07IC8qIGluZGV4ZWQgYnkgMi16bGliX2Vycm9yICovCiAvKiAoc2l6ZSBnaXZlbiB0byBhdm9pZCBzaWxseSB3YXJuaW5ncyB3aXRoIFZpc3VhbCBDKyspICovCiAKICNkZWZpbmUgRVJSX01TRyhlcnIpIHpfZXJybXNnW1pfTkVFRF9ESUNULShlcnIpXQogCiAjZGVmaW5lIEVSUl9SRVRVUk4oc3RybSxlcnIpIFwKLSAgcmV0dXJuIChzdHJtLT5tc2cgPSAoY2hhciopRVJSX01TRyhlcnIpLCAoZXJyKSkKKyAgcmV0dXJuIChzdHJtLT5tc2cgPSBFUlJfTVNHKGVyciksIChlcnIpKQogLyogVG8gYmUgdXNlZCBvbmx5IHdoZW4gdGhlIHN0YXRlIGlzIGtub3duIHRvIGJlIHZhbGlkICovCiAKICAgICAgICAgLyogY29tbW9uIGNvbnN0YW50cyAqLwpAQCAtNzgsMTYgKzgyLDE4IEBACiAKICNpZiBkZWZpbmVkKE1TRE9TKSB8fCAoZGVmaW5lZChXSU5ET1dTKSAmJiAhZGVmaW5lZChXSU4zMikpCiAjICBkZWZpbmUgT1NfQ09ERSAgMHgwMAotIyAgaWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKLSMgICAgaWYgKF9fU1REQ19fID09IDEpICYmIChkZWZpbmVkKF9fTEFSR0VfXykgfHwgZGVmaW5lZChfX0NPTVBBQ1RfXykpCi0gICAgICAgLyogQWxsb3cgY29tcGlsYXRpb24gd2l0aCBBTlNJIGtleXdvcmRzIG9ubHkgZW5hYmxlZCAqLwotICAgICAgIHZvaWQgX0NkZWNsIGZhcmZyZWUoIHZvaWQgKmJsb2NrICk7Ci0gICAgICAgdm9pZCAqX0NkZWNsIGZhcm1hbGxvYyggdW5zaWduZWQgbG9uZyBuYnl0ZXMgKTsKLSMgICAgZWxzZQotIyAgICAgIGluY2x1ZGUgPGFsbG9jLmg+CisjICBpZm5kZWYgWl9TT0xPCisjICAgIGlmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCisjICAgICAgaWYgKF9fU1REQ19fID09IDEpICYmIChkZWZpbmVkKF9fTEFSR0VfXykgfHwgZGVmaW5lZChfX0NPTVBBQ1RfXykpCisgICAgICAgICAvKiBBbGxvdyBjb21waWxhdGlvbiB3aXRoIEFOU0kga2V5d29yZHMgb25seSBlbmFibGVkICovCisgICAgICAgICB2b2lkIF9DZGVjbCBmYXJmcmVlKCB2b2lkICpibG9jayApOworICAgICAgICAgdm9pZCAqX0NkZWNsIGZhcm1hbGxvYyggdW5zaWduZWQgbG9uZyBuYnl0ZXMgKTsKKyMgICAgICBlbHNlCisjICAgICAgICBpbmNsdWRlIDxhbGxvYy5oPgorIyAgICAgIGVuZGlmCisjICAgIGVsc2UgLyogTVNDIG9yIERKR1BQICovCisjICAgICAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICAgIGVuZGlmCi0jICBlbHNlIC8qIE1TQyBvciBESkdQUCAqLwotIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtMTA3LDE4ICsxMTMsMjAgQEAKIAogI2lmZGVmIE9TMgogIyAgZGVmaW5lIE9TX0NPREUgIDB4MDYKLSMgIGlmZGVmIE1fSTg2CisjICBpZiBkZWZpbmVkKE1fSTg2KSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICAgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgZW5kaWYKICNlbmRpZgogCiAjaWYgZGVmaW5lZChNQUNPUykgfHwgZGVmaW5lZChUQVJHRVRfT1NfTUFDKQogIyAgZGVmaW5lIE9TX0NPREUgIDB4MDcKLSMgIGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVfb3MgJiYgX19kZXN0X29zICE9IF9fd2luMzJfb3MKLSMgICAgaW5jbHVkZSA8dW5peC5oPiAvKiBmb3IgZmRvcGVuICovCi0jICBlbHNlCi0jICAgIGlmbmRlZiBmZG9wZW4KLSMgICAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyogTm8gZmRvcGVuKCkgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBfX2Rlc3Rfb3MgIT0gX19iZV9vcyAmJiBfX2Rlc3Rfb3MgIT0gX193aW4zMl9vcworIyAgICAgIGluY2x1ZGUgPHVuaXguaD4gLyogZm9yIGZkb3BlbiAqLworIyAgICBlbHNlCisjICAgICAgaWZuZGVmIGZkb3BlbgorIyAgICAgICAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCisjICAgICAgZW5kaWYKICMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKQEAgLTE1MywxNCArMTYxLDE1IEBACiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQk9STEFORENfXykKKyNpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgIWRlZmluZWQoTVNET1MpCiAgICNwcmFnbWEgd2FybiAtODAwNAogICAjcHJhZ21hIHdhcm4gLTgwMDgKICAgI3ByYWdtYSB3YXJuIC04MDY2CiAjZW5kaWYKIAogLyogcHJvdmlkZSBwcm90b3R5cGVzIGZvciB0aGVzZSB3aGVuIGJ1aWxkaW5nIHpsaWIgd2l0aG91dCBMRlMgKi8KLSNpZiAhZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSB8fCBfTEZTNjRfTEFSR0VGSUxFLTAgPT0gMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgXAorICAgICghZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSB8fCBfTEZTNjRfTEFSR0VGSUxFLTAgPT0gMCkKICAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOwogICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOwogI2VuZGlmCkBAIC0xNzcsNDIgKzE4Niw3IEBACiAKICAgICAgICAgIC8qIGZ1bmN0aW9ucyAqLwogCi0jaWYgZGVmaW5lZChTVERDOTkpIHx8IChkZWZpbmVkKF9fVFVSQk9DX18pICYmIF9fVFVSQk9DX18gPj0gMHg1NTApCi0jICBpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCi0jICBlbmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0NZR1dJTl9fKQotIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgotIyAgZW5kaWYKLSNlbmRpZgotI2lmbmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgaWZkZWYgTVNET1MKLSAgICAgLyogdnNucHJpbnRmIG1heSBleGlzdCBvbiBzb21lIE1TLURPUyBjb21waWxlcnMgKERKR1BQPyksCi0gICAgICAgIGJ1dCBmb3Igbm93IHdlIGp1c3QgYXNzdW1lIGl0IGRvZXNuJ3QuICovCi0jICAgIGRlZmluZSBOT192c25wcmludGYKLSMgIGVuZGlmCi0jICBpZmRlZiBfX1RVUkJPQ19fCi0jICAgIGRlZmluZSBOT192c25wcmludGYKLSMgIGVuZGlmCi0jICBpZmRlZiBXSU4zMgotICAgICAvKiBJbiBXaW4zMiwgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSBhcyB0aGUgIm5vbi1BTlNJIiBfdnNucHJpbnRmLiAqLwotIyAgICBpZiAhZGVmaW5lZCh2c25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKLSMgICAgICBpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgKCBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE1MDAgKQotIyAgICAgICAgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWZkZWYgX19TQVNDCi0jICAgIGRlZmluZSBOT192c25wcmludGYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBWTVMKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChweXIpCisjaWYgZGVmaW5lZChweXIpIHx8IGRlZmluZWQoWl9TT0xPKQogIyAgZGVmaW5lIE5PX01FTUNQWQogI2VuZGlmCiAjaWYgZGVmaW5lZChTTUFMTF9NRURJVU0pICYmICFkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX1NDX18pCkBAIC0yNjEsMTQgKzIzNSwxOSBAQAogIyAgZGVmaW5lIFRyYWNlY3YoYyx4KQogI2VuZGlmCiAKLQotdm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplKSk7Ci12b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikpOworI2lmbmRlZiBaX1NPTE8KKyAgIHZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgT0YoKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSkpOworICAgdm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpKTsKKyNlbmRpZgogCiAjZGVmaW5lIFpBTExPQyhzdHJtLCBpdGVtcywgc2l6ZSkgXAogICAgICAgICAgICAoKigoc3RybSktPnphbGxvYykpKChzdHJtKS0+b3BhcXVlLCAoaXRlbXMpLCAoc2l6ZSkpCiAjZGVmaW5lIFpGUkVFKHN0cm0sIGFkZHIpICAoKigoc3RybSktPnpmcmVlKSkoKHN0cm0pLT5vcGFxdWUsICh2b2lkcGYpKGFkZHIpKQogI2RlZmluZSBUUllfRlJFRShzLCBwKSB7aWYgKHApIFpGUkVFKHMsIHApO30KIAorLyogUmV2ZXJzZSB0aGUgYnl0ZXMgaW4gYSAzMi1iaXQgdmFsdWUgKi8KKyNkZWZpbmUgWlNXQVAzMihxKSAoKCgocSkgPj4gMjQpICYgMHhmZikgKyAoKChxKSA+PiA4KSAmIDB4ZmYwMCkgKyBcCisgICAgICAgICAgICAgICAgICAgICgoKHEpICYgMHhmZjAwKSA8PCA4KSArICgoKHEpICYgMHhmZikgPDwgMjQpKQorCiAjZW5kaWYgLyogWlVUSUxfSCAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGlibW9kdWxlLmMgYi9Nb2R1bGVzL3psaWJtb2R1bGUuYwppbmRleCBlNzE4Nzk1Li4xYjY1ZWIwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3psaWJtb2R1bGUuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJ6bGliLmgiCiAKKwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgI2luY2x1ZGUgInB5dGhyZWFkLmgiCiAgICAgI2RlZmluZSBFTlRFUl9aTElCKG9iaikgXApAQCAtMTMyLDEwICsxMzMsMzAgQEAKICAgICB9CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGxvY2siKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKK3N0YXRpYyB2b2lkKgorUHlabGliX01hbGxvYyh2b2lkcGYgY3R4LCB1SW50IGl0ZW1zLCB1SW50IHNpemUpCit7CisgICAgaWYgKGl0ZW1zID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAvIHNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFB5TWVtX01hbGxvYygpIGNhbm5vdCBiZSB1c2VkOiB0aGUgR0lMIGlzIG5vdCBoZWxkIHdoZW4KKyAgICAgICBpbmZsYXRlKCkgYW5kIGRlZmxhdGUoKSBhcmUgY2FsbGVkICovCisgICAgcmV0dXJuIFB5TWVtX1Jhd01hbGxvYyhpdGVtcyAqIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorUHlabGliX0ZyZWUodm9pZHBmIGN0eCwgdm9pZCAqcHRyKQoreworICAgIFB5TWVtX1Jhd0ZyZWUocHRyKTsKK30KKwogUHlEb2NfU1RSVkFSKGNvbXByZXNzX19kb2NfXywKICJjb21wcmVzcyhzdHJpbmdbLCBsZXZlbF0pIC0tIFJldHVybmVkIGNvbXByZXNzZWQgc3RyaW5nLlxuIgogIlxuIgpAQCAtMTYxLDExICsxODIsMTEgQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGxlbmd0aCA9IHBpbnB1dC5sZW47CisgICAgbGVuZ3RoID0gKHVuc2lnbmVkIGludClwaW5wdXQubGVuOwogCiAgICAgenN0LmF2YWlsX291dCA9IGxlbmd0aCArIGxlbmd0aC8xMDAwICsgMTIgKyAxOwogCi0gICAgb3V0cHV0ID0gKEJ5dGUqKW1hbGxvYyh6c3QuYXZhaWxfb3V0KTsKKyAgICBvdXRwdXQgPSAoQnl0ZSopUHlNZW1fTWFsbG9jKHpzdC5hdmFpbF9vdXQpOwogICAgIGlmIChvdXRwdXQgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIGNvbXByZXNzIGRhdGEiKTsKQEAgLTE3NSw4ICsxOTYsOSBAQAogICAgIC8qIFBhc3QgdGhlIHBvaW50IG9mIG5vIHJldHVybi4gIEZyb20gaGVyZSBvbiBvdXQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCiAgICAgICAgd2UgY2xlYW4gdXAgbWFsbG9jcyAmIElOQ1JFRnMuICovCiAKLSAgICB6c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICB6c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICB6c3Qub3BhcXVlID0gTlVMTDsKKyAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKW91dHB1dDsKICAgICB6c3QubmV4dF9pbiA9IChCeXRlICopaW5wdXQ7CiAgICAgenN0LmF2YWlsX2luID0gbGVuZ3RoOwpAQCAtMjE4LDcgKzI0MCw3IEBACiAKICBlcnJvcjoKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW5wdXQpOwotICAgIGZyZWUob3V0cHV0KTsKKyAgICBQeU1lbV9GcmVlKG91dHB1dCk7CiAKICAgICByZXR1cm4gUmV0dXJuVmFsOwogfQpAQCAtMjUxLDcgKzI3Myw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKLSAgICBsZW5ndGggPSBwaW5wdXQubGVuOworICAgIGxlbmd0aCA9ICh1bnNpZ25lZCBpbnQpcGlucHV0LmxlbjsKIAogICAgIGlmIChyX3N0cmxlbiA8PSAwKQogICAgICAgICByX3N0cmxlbiA9IDE7CkBAIC0yNjIsOCArMjg0LDkgQEAKICAgICBpZiAoIShyZXN1bHRfc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCByX3N0cmxlbikpKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgenN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgenN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgenN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgenN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgenN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgenN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHRfc3RyKTsKICAgICB6c3QubmV4dF9pbiA9IChCeXRlICopaW5wdXQ7CiAgICAgZXJyID0gaW5mbGF0ZUluaXQyKCZ6c3QsIHdzaXplKTsKQEAgLTM1Niw4ICszNzksOSBAQAogICAgIHNlbGYgPSBuZXdjb21wb2JqZWN0KCZDb21wdHlwZSk7CiAgICAgaWYgKHNlbGY9PU5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc2VsZi0+enN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgc2VsZi0+enN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgc2VsZi0+enN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+enN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgc2VsZi0+enN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBOVUxMOwogICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IDA7CiAgICAgZXJyID0gZGVmbGF0ZUluaXQyKCZzZWxmLT56c3QsIGxldmVsLCBtZXRob2QsIHdiaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpOwpAQCAtNDIwLDggKzQ0NCw5IEBACiAgICAgc2VsZiA9IG5ld2NvbXBvYmplY3QoJkRlY29tcHR5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICBzZWxmLT56c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICBzZWxmLT56c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICBzZWxmLT56c3Qub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT56c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICBzZWxmLT56c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICBzZWxmLT56c3QubmV4dF9pbiA9IE5VTEw7CiAgICAgc2VsZi0+enN0LmF2YWlsX2luID0gMDsKICAgICBpZiAoemRpY3QgIT0gTlVMTCkgewpAQCAtNTI1LDggKzU1MCw3IEBACiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoZXJyID09IFpfT0sgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7CiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KQEAgLTU1MCw4ICs1NzQsNyBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKICBlcnJvcjoKQEAgLTU3Myw3ICs1OTYsNyBAQAogICAgICAgICAgICAgUHlfc3NpemVfdCBvbGRfc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+dW51c2VkX2RhdGEpOwogICAgICAgICAgICAgUHlfc3NpemVfdCBuZXdfc2l6ZTsKICAgICAgICAgICAgIFB5T2JqZWN0ICpuZXdfZGF0YTsKLSAgICAgICAgICAgIGlmIChzZWxmLT56c3QuYXZhaWxfaW4gPiBQWV9TU0laRV9UX01BWCAtIG9sZF9zaXplKSB7CisgICAgICAgICAgICBpZiAoKFB5X3NzaXplX3Qpc2VsZi0+enN0LmF2YWlsX2luID4gUFlfU1NJWkVfVF9NQVggLSBvbGRfc2l6ZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQpAQCAtNjA0LDg3ICs2MjcsMTM2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXBfZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcyhkYXRhLCBtYXhfbGVuZ3RoKSAtLSBSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkXG4iCi0idmVyc2lvbiBvZiB0aGUgZGF0YS5cbiIKKy8qW2NsaW5pY10KKworbW9kdWxlIHpsaWIKKworemxpYi5kZWNvbXByZXNzCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAgICAgVGhlIGJpbmFyeSBkYXRhIHRvIGRlY29tcHJlc3MuCisgICAgbWF4X2xlbmd0aDogaW50ID0gMAorICAgICAgICBUaGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YS4KKyAgICAgICAgVW5jb25zdW1lZCBpbnB1dCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluCisgICAgICAgIHRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLgorICAgIC8KKworUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpbgoraW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KK0NhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUih6bGliX2RlY29tcHJlc3NfX2RvY19fLAorIlJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YS5cbiIKKyJcbiIKKyJ6bGliLmRlY29tcHJlc3MoZGF0YSwgbWF4X2xlbmd0aD0wKVxuIgorIiAgZGF0YVxuIgorIiAgICBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb21wcmVzcy5cbiIKKyIgIG1heF9sZW5ndGhcbiIKKyIgICAgVGhlIG1heGltdW0gYWxsb3dhYmxlIGxlbmd0aCBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEuXG4iCisiICAgIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpblxuIgorIiAgICB0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS5cbiIKICJcbiIKICJBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpblxuIgogImludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG4iCi0iQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy5cbiIKLSJJZiB0aGUgbWF4X2xlbmd0aCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlXG4iCi0ibm8gbG9uZ2VyIHRoYW4gbWF4X2xlbmd0aC4gIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpblxuIgotInRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLiIpOworIkNhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuIik7CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX2RlY29tcHJlc3NfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9vYmpkZWNvbXByZXNzKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9kZWNvbXByZXNzX2ltcGwoUHlPYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSwgaW50IG1heF9sZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9kZWNvbXByZXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgZXJyLCBtYXhfbGVuZ3RoID0gMDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YTsKKyAgICBpbnQgbWF4X2xlbmd0aCA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfGk6ZGVjb21wcmVzcyIsCisgICAgICAgICZkYXRhLCAmbWF4X2xlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX2RlY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSwgbWF4X2xlbmd0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc19pbXBsKFB5T2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsIGludCBtYXhfbGVuZ3RoKQorLypbY2xpbmljIGNoZWNrc3VtOiAxNjhkMDkzZDQwMDczOWRkZTk0N2NjYTFmNGZiMGY5ZDUxY2RjMmM5XSovCit7CisgICAgY29tcG9iamVjdCAqenNlbGYgPSAoY29tcG9iamVjdCAqKXNlbGY7CisgICAgaW50IGVycjsKICAgICB1bnNpZ25lZCBpbnQgaW5wbGVuOwogICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCwgbGVuZ3RoID0gREVGQVVMVEFMTE9DOwogICAgIFB5T2JqZWN0ICpSZXRWYWwgPSBOVUxMOwotICAgIFB5X2J1ZmZlciBwaW5wdXQ7CiAgICAgQnl0ZSAqaW5wdXQ7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGk6ZGVjb21wcmVzcyIsICZwaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZtYXhfbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmIChkYXRhLT5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKLSAgICBpbnBsZW4gPSBwaW5wdXQubGVuOworICAgIGlucHV0ID0gZGF0YS0+YnVmOworICAgIGlucGxlbiA9IGRhdGEtPmxlbjsKICAgICBpZiAobWF4X2xlbmd0aCA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibWF4X2xlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0ZXI7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIGxpbWl0IGFtb3VudCBvZiBkYXRhIGFsbG9jYXRlZCB0byBtYXhfbGVuZ3RoICovCiAgICAgaWYgKG1heF9sZW5ndGggJiYgbGVuZ3RoID4gbWF4X2xlbmd0aCkKICAgICAgICAgbGVuZ3RoID0gbWF4X2xlbmd0aDsKICAgICBpZiAoIShSZXRWYWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIEVOVEVSX1pMSUIoc2VsZik7CisgICAgRU5URVJfWkxJQih6c2VsZik7CiAKLSAgICBzdGFydF90b3RhbF9vdXQgPSBzZWxmLT56c3QudG90YWxfb3V0OwotICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IGlucGxlbjsKLSAgICBzZWxmLT56c3QubmV4dF9pbiA9IGlucHV0OwotICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7Ci0gICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpOworICAgIHN0YXJ0X3RvdGFsX291dCA9IHpzZWxmLT56c3QudG90YWxfb3V0OworICAgIHpzZWxmLT56c3QuYXZhaWxfaW4gPSBpbnBsZW47CisgICAgenNlbGYtPnpzdC5uZXh0X2luID0gaW5wdXQ7CisgICAgenNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7CisgICAgenNlbGYtPnpzdC5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBlcnIgPSBpbmZsYXRlKCYoc2VsZi0+enN0KSwgWl9TWU5DX0ZMVVNIKTsKKyAgICBlcnIgPSBpbmZsYXRlKCYoenNlbGYtPnpzdCksIFpfU1lOQ19GTFVTSCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgIGlmIChlcnIgPT0gWl9ORUVEX0RJQ1QgJiYgc2VsZi0+emRpY3QgIT0gTlVMTCkgeworICAgIGlmIChlcnIgPT0gWl9ORUVEX0RJQ1QgJiYgenNlbGYtPnpkaWN0ICE9IE5VTEwpIHsKICAgICAgICAgUHlfYnVmZmVyIHpkaWN0X2J1ZjsKLSAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzZWxmLT56ZGljdCwgJnpkaWN0X2J1ZiwgUHlCVUZfU0lNUExFKSA9PSAtMSkgeworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHpzZWxmLT56ZGljdCwgJnpkaWN0X2J1ZiwgUHlCVUZfU0lNUExFKSA9PSAtMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7CiAgICAgICAgICAgICBSZXRWYWwgPSBOVUxMOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmKHNlbGYtPnpzdCksIHpkaWN0X2J1Zi5idWYsIHpkaWN0X2J1Zi5sZW4pOworICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmKHpzZWxmLT56c3QpLCB6ZGljdF9idWYuYnVmLCB6ZGljdF9idWYubGVuKTsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3RfYnVmKTsKICAgICAgICAgaWYgKGVyciAhPSBaX09LKSB7Ci0gICAgICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7CisgICAgICAgICAgICB6bGliX2Vycm9yKHpzZWxmLT56c3QsIGVyciwgIndoaWxlIGRlY29tcHJlc3NpbmcgZGF0YSIpOwogICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7CiAgICAgICAgICAgICBSZXRWYWwgPSBOVUxMOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICAvKiBSZXBlYXQgdGhlIGNhbGwgdG8gaW5mbGF0ZS4gKi8KICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBlcnIgPSBpbmZsYXRlKCYoc2VsZi0+enN0KSwgWl9TWU5DX0ZMVVNIKTsKKyAgICAgICAgZXJyID0gaW5mbGF0ZSgmKHpzZWxmLT56c3QpLCBaX1NZTkNfRkxVU0gpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KIAogICAgIC8qIFdoaWxlIFpfT0sgYW5kIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwsIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0LgogICAgICAgIFNvIGV4dGVuZCB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdHJ5IGFnYWluLgogICAgICovCi0gICAgd2hpbGUgKGVyciA9PSBaX09LICYmIHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCkgeworICAgIHdoaWxlIChlcnIgPT0gWl9PSyAmJiB6c2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7CiAgICAgICAgIC8qIElmIG1heF9sZW5ndGggc2V0LCBkb24ndCBjb250aW51ZSBkZWNvbXByZXNzaW5nIGlmIHdlJ3ZlIGFscmVhZHkKICAgICAgICAgICAgcmVhY2hlZCB0aGUgbGltaXQuCiAgICAgICAgICovCkBAIC02OTgsMjAgKzc3MCwxOSBAQAogICAgICAgICAgICAgbGVuZ3RoID0gbWF4X2xlbmd0aDsKIAogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIGxlbmd0aCkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQorICAgICAgICB6c2VsZi0+enN0Lm5leHRfb3V0ID0KICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSArIG9sZF9sZW5ndGg7Ci0gICAgICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGggLSBvbGRfbGVuZ3RoOworICAgICAgICB6c2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aCAtIG9sZF9sZW5ndGg7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBlcnIgPSBpbmZsYXRlKCYoc2VsZi0+enN0KSwgWl9TWU5DX0ZMVVNIKTsKKyAgICAgICAgZXJyID0gaW5mbGF0ZSgmKHpzZWxmLT56c3QpLCBaX1NZTkNfRkxVU0gpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KIAotICAgIGlmIChzYXZlX3VuY29uc3VtZWRfaW5wdXQoc2VsZiwgZXJyKSA8IDApIHsKKyAgICBpZiAoc2F2ZV91bmNvbnN1bWVkX2lucHV0KHpzZWxmLCBlcnIpIDwgMCkgewogICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKICAgICAgICAgUmV0VmFsID0gTlVMTDsKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTcyMCwyNyArNzkxLDI0IEBACiAgICAgaWYgKGVyciA9PSBaX1NUUkVBTV9FTkQpIHsKICAgICAgICAgLyogVGhpcyBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBjYWxsIGluZmxhdGVFbmQsIGJ1dCB0aGUgb2xkIGJlaGF2aW91cgogICAgICAgICAgICBvZiBvbmx5IGNhbGxpbmcgaXQgb24gZmx1c2goKSBpcyBwcmVzZXJ2ZWQuICovCi0gICAgICAgIHNlbGYtPmVvZiA9IDE7CisgICAgICAgIHpzZWxmLT5lb2YgPSAxOwogICAgIH0gZWxzZSBpZiAoZXJyICE9IFpfT0sgJiYgZXJyICE9IFpfQlVGX0VSUk9SKSB7CiAgICAgICAgIC8qIFdlIHdpbGwgb25seSBnZXQgWl9CVUZfRVJST1IgaWYgdGhlIG91dHB1dCBidWZmZXIgd2FzIGZ1bGwKICAgICAgICAgICAgYnV0IHRoZXJlIHdhc24ndCBtb3JlIG91dHB1dCB3aGVuIHdlIHRyaWVkIGFnYWluLCBzbyBpdCBpcwogICAgICAgICAgICBub3QgYW4gZXJyb3IgY29uZGl0aW9uLgogICAgICAgICAqLwotICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7CisgICAgICAgIHpsaWJfZXJyb3IoenNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7CiAgICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwogICAgICAgICBSZXRWYWwgPSBOVUxMOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgenNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgeworICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgIH0KIAogIGVycm9yOgotICAgIExFQVZFX1pMSUIoc2VsZik7Ci0gZXJyb3Jfb3V0ZXI6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKKyAgICBMRUFWRV9aTElCKHpzZWxmKTsKICAgICByZXR1cm4gUmV0VmFsOwogfQogCkBAIC03ODcsOCArODU1LDcgQEAKICAgICAgICBzbyBleHRlbmQgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRyeSBhZ2FpbiAqLwogICAgIHdoaWxlIChlcnIgPT0gWl9PSyAmJiBzZWxmLT56c3QuYXZhaWxfb3V0ID09IDApIHsKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGggPDwgMSkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQpAQCAtODI3LDggKzg5NCw3IEBACiAgICAgfQogCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgfQogCiAgZXJyb3I6CkBAIC04MzgsMTIgKzkwNCwyNyBAQAogfQogCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLVB5RG9jX1NUUlZBUihjb21wX2NvcHlfX2RvY19fLAotImNvcHkoKSAtLSBSZXR1cm4gYSBjb3B5IG9mIHRoZSBjb21wcmVzc2lvbiBvYmplY3QuIik7CisKKy8qW2NsaW5pY10KKworemxpYi5jb3B5CisKK1JldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKHpsaWJfY29weV9fZG9jX18sCisiUmV0dXJuIGEgY29weSBvZiB0aGUgY29tcHJlc3Npb24gb2JqZWN0LlxuIgorIlxuIgorInpsaWIuY29weSgpIik7CisKKyNkZWZpbmUgWkxJQl9DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKXpsaWJfY29weSwgTUVUSF9OT0FSR1MsIHpsaWJfY29weV9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2NvcHkoY29tcG9iamVjdCAqc2VsZikKK3psaWJfY29weShQeU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogN2I2NDhkZTJjMWY5MzNiYTJiOWZhMTczMzFmZjFhNDRkOWE0YTc0MF0qLwogeworICAgIGNvbXBvYmplY3QgKnpzZWxmID0gKGNvbXBvYmplY3QgKilzZWxmOwogICAgIGNvbXBvYmplY3QgKnJldHZhbCA9IE5VTEw7CiAgICAgaW50IGVycjsKIApAQCAtODUzLDggKzkzNCw4IEBACiAgICAgLyogQ29weSB0aGUgenN0cmVhbSBzdGF0ZQogICAgICAqIFdlIHVzZSBFTlRFUl9aTElCIC8gTEVBVkVfWkxJQiB0byBtYWtlIHRoaXMgdGhyZWFkLXNhZmUKICAgICAgKi8KLSAgICBFTlRFUl9aTElCKHNlbGYpOwotICAgIGVyciA9IGRlZmxhdGVDb3B5KCZyZXR2YWwtPnpzdCwgJnNlbGYtPnpzdCk7CisgICAgRU5URVJfWkxJQih6c2VsZik7CisgICAgZXJyID0gZGVmbGF0ZUNvcHkoJnJldHZhbC0+enN0LCAmenNlbGYtPnpzdCk7CiAgICAgc3dpdGNoKGVycikgewogICAgIGNhc2UoWl9PSyk6CiAgICAgICAgIGJyZWFrOwpAQCAtODY2LDI4ICs5NDcsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbXByZXNzaW9uIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHpsaWJfZXJyb3Ioc2VsZi0+enN0LCBlcnIsICJ3aGlsZSBjb3B5aW5nIGNvbXByZXNzaW9uIG9iamVjdCIpOworICAgICAgICB6bGliX2Vycm9yKHpzZWxmLT56c3QsIGVyciwgIndoaWxlIGNvcHlpbmcgY29tcHJlc3Npb24gb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIFB5X0lOQ1JFRihzZWxmLT51bnVzZWRfZGF0YSk7Ci0gICAgUHlfSU5DUkVGKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7Ci0gICAgUHlfWElOQ1JFRihzZWxmLT56ZGljdCk7CisgICAgUHlfSU5DUkVGKHpzZWxmLT51bnVzZWRfZGF0YSk7CisgICAgUHlfSU5DUkVGKHpzZWxmLT51bmNvbnN1bWVkX3RhaWwpOworICAgIFB5X1hJTkNSRUYoenNlbGYtPnpkaWN0KTsKICAgICBQeV9YREVDUkVGKHJldHZhbC0+dW51c2VkX2RhdGEpOwogICAgIFB5X1hERUNSRUYocmV0dmFsLT51bmNvbnN1bWVkX3RhaWwpOwogICAgIFB5X1hERUNSRUYocmV0dmFsLT56ZGljdCk7Ci0gICAgcmV0dmFsLT51bnVzZWRfZGF0YSA9IHNlbGYtPnVudXNlZF9kYXRhOwotICAgIHJldHZhbC0+dW5jb25zdW1lZF90YWlsID0gc2VsZi0+dW5jb25zdW1lZF90YWlsOwotICAgIHJldHZhbC0+emRpY3QgPSBzZWxmLT56ZGljdDsKLSAgICByZXR2YWwtPmVvZiA9IHNlbGYtPmVvZjsKKyAgICByZXR2YWwtPnVudXNlZF9kYXRhID0genNlbGYtPnVudXNlZF9kYXRhOworICAgIHJldHZhbC0+dW5jb25zdW1lZF90YWlsID0genNlbGYtPnVuY29uc3VtZWRfdGFpbDsKKyAgICByZXR2YWwtPnpkaWN0ID0genNlbGYtPnpkaWN0OworICAgIHJldHZhbC0+ZW9mID0genNlbGYtPmVvZjsKIAogICAgIC8qIE1hcmsgaXQgYXMgYmVpbmcgaW5pdGlhbGl6ZWQgKi8KICAgICByZXR2YWwtPmlzX2luaXRpYWxpc2VkID0gMTsKIAotICAgIExFQVZFX1pMSUIoc2VsZik7CisgICAgTEVBVkVfWkxJQih6c2VsZik7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXJldHZhbDsKIAogZXJyb3I6Ci0gICAgTEVBVkVfWkxJQihzZWxmKTsKKyAgICBMRUFWRV9aTElCKHpzZWxmKTsKICAgICBQeV9YREVDUkVGKHJldHZhbCk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC05ODgsOCArMTA2OSw3IEBACiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoKGVyciA9PSBaX09LIHx8IGVyciA9PSBaX0JVRl9FUlJPUikgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7CiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpICsgbGVuZ3RoOwpAQCAtMTAyMSw4ICsxMTAxLDcgQEAKICAgICB9CiAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXR2YWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICB9CiAKIGVycm9yOgpAQCAtMTAzOSwxNiArMTExOCwxNCBAQAogICAgIHsiZmx1c2giLCAoYmluYXJ5ZnVuYylQeVpsaWJfZmx1c2gsIE1FVEhfVkFSQVJHUywKICAgICAgICAgICAgICAgY29tcF9mbHVzaF9fZG9jX199LAogI2lmZGVmIEhBVkVfWkxJQl9DT1BZCi0gICAgeyJjb3B5IiwgIChQeUNGdW5jdGlvbilQeVpsaWJfY29weSwgTUVUSF9OT0FSR1MsCi0gICAgICAgICAgICAgIGNvbXBfY29weV9fZG9jX199LAorICAgIFpMSUJfQ09QWV9NRVRIT0RERUYKICNlbmRpZgogICAgIHtOVUxMLCBOVUxMfQogfTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIERlY29tcF9tZXRob2RzW10gPQogewotICAgIHsiZGVjb21wcmVzcyIsIChiaW5hcnlmdW5jKVB5WmxpYl9vYmpkZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgICAgZGVjb21wX2RlY29tcHJlc3NfX2RvY19ffSwKKyAgICBaTElCX0RFQ09NUFJFU1NfTUVUSE9EREVGCiAgICAgeyJmbHVzaCIsIChiaW5hcnlmdW5jKVB5WmxpYl91bmZsdXNoLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgICAgICAgIGRlY29tcF9mbHVzaF9fZG9jX199LAogI2lmZGVmIEhBVkVfWkxJQl9DT1BZCkBAIC0xMDk0LDEwICsxMTcxLDEwIEBACiAgICAgICAgICAgICBidWYgKz0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgICAgICBsZW4gLT0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgIH0KLSAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgYnVmLCBsZW4pOworICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBidWYsICh1bnNpZ25lZCBpbnQpbGVuKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICB9IGVsc2UgewotICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBwYnVmLmJ1ZiwgKHVuc2lnbmVkIGludClwYnVmLmxlbik7CiAgICAgfQogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhhZGxlcjMydmFsICYgMHhmZmZmZmZmZlUpOwpAQCAtMTEzMiwxMCArMTIwOSwxMCBAQAogICAgICAgICAgICAgYnVmICs9IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICAgICAgbGVuIC09IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICB9Ci0gICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMzMnZhbCwgYnVmLCBsZW4pOworICAgICAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgKHVuc2lnbmVkIGludClsZW4pOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMzMnZhbCwgcGJ1Zi5idWYsIHBidWYubGVuKTsKKyAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBwYnVmLmJ1ZiwgKHVuc2lnbmVkIGludClwYnVmLmxlbik7CiAgICAgfQogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhzaWduZWRfdmFsICYgMHhmZmZmZmZmZlUpOwpAQCAtMTI2NiwyMCArMTM0MywyMCBAQAogICAgICAgICBQeV9JTkNSRUYoWmxpYkVycm9yKTsKICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFpsaWJFcnJvcik7CiAgICAgfQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNQVhfV0JJVFMiLCBNQVhfV0JJVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZMQVRFRCIsIERFRkxBVEVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX01FTV9MRVZFTCIsIERFRl9NRU1fTEVWRUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0JFU1RfU1BFRUQiLCBaX0JFU1RfU1BFRUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0JFU1RfQ09NUFJFU1NJT04iLCBaX0JFU1RfQ09NUFJFU1NJT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0RFRkFVTFRfQ09NUFJFU1NJT04iLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZJTFRFUkVEIiwgWl9GSUxURVJFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfSFVGRk1BTl9PTkxZIiwgWl9IVUZGTUFOX09OTFkpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0RFRkFVTFRfU1RSQVRFR1kiLCBaX0RFRkFVTFRfU1RSQVRFR1kpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1BWF9XQklUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGTEFURUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9NRU1fTEVWRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfQkVTVF9TUEVFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9CRVNUX0NPTVBSRVNTSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRklMVEVSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfSFVGRk1BTl9PTkxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0RFRkFVTFRfU1RSQVRFR1kpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfRklOSVNIIiwgWl9GSU5JU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX05PX0ZMVVNIIiwgWl9OT19GTFVTSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfU1lOQ19GTFVTSCIsIFpfU1lOQ19GTFVTSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfRlVMTF9GTFVTSCIsIFpfRlVMTF9GTFVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9GSU5JU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfTk9fRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfU1lOQ19GTFVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9GVUxMX0ZMVVNIKTsKIAogICAgIHZlciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFpMSUJfVkVSU0lPTik7CiAgICAgaWYgKHZlciAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9hYnN0cmFjdC5jIGIvT2JqZWN0cy9hYnN0cmFjdC5jCmluZGV4IDEzMDljNTEuLjkxZGY1ZGEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYWJzdHJhY3QuYworKysgYi9PYmplY3RzL2Fic3RyYWN0LmMKQEAgLTY0LDQ5ICs2NCw3MiBAQAogfQogI2RlZmluZSBQeU9iamVjdF9MZW5ndGggUHlPYmplY3RfU2l6ZQogCitpbnQKK19QeU9iamVjdF9IYXNMZW4oUHlPYmplY3QgKm8pIHsKKyAgICByZXR1cm4gKFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlICYmIFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlLT5zcV9sZW5ndGgpIHx8CisgICAgICAgIChQeV9UWVBFKG8pLT50cF9hc19tYXBwaW5nICYmIFB5X1RZUEUobyktPnRwX2FzX21hcHBpbmctPm1wX2xlbmd0aCk7Cit9CiAKIC8qIFRoZSBsZW5ndGggaGludCBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlIGZyb20gby5fX2xlbl9fKCkKLSAgIG9yIG8uX19sZW5ndGhfaGludF9fKCkuICBJZiB0aG9zZSBtZXRob2RzIGFyZW4ndCBmb3VuZCBvciByZXR1cm4gYSBuZWdhdGl2ZQotICAgdmFsdWUsIHRoZW4gdGhlIGRlZmF1bHR2YWx1ZSBpcyByZXR1cm5lZC4gIElmIG9uZSBvZiB0aGUgY2FsbHMgZmFpbHMsCisgICBvciBvLl9fbGVuZ3RoX2hpbnRfXygpLiBJZiB0aG9zZSBtZXRob2RzIGFyZW4ndCBmb3VuZCB0aGUgZGVmYXVsdHZhbHVlIGlzCisgICByZXR1cm5lZC4gIElmIG9uZSBvZiB0aGUgY2FsbHMgZmFpbHMgd2l0aCBhbiBleGNlcHRpb24gb3RoZXIgdGhhbiBUeXBlRXJyb3IKICAgIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAtMS4KICovCiAKIFB5X3NzaXplX3QKLV9QeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSkKK1B5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgZGVmYXVsdHZhbHVlKQogeworICAgIFB5T2JqZWN0ICpoaW50LCAqcmVzdWx0OworICAgIFB5X3NzaXplX3QgcmVzOwogICAgIF9QeV9JREVOVElGSUVSKF9fbGVuZ3RoX2hpbnRfXyk7Ci0gICAgUHlPYmplY3QgKnJvLCAqaGludG1ldGg7Ci0gICAgUHlfc3NpemVfdCBydjsKLQotICAgIC8qIHRyeSBvLl9fbGVuX18oKSAqLwotICAgIHJ2ID0gUHlPYmplY3RfU2l6ZShvKTsKLSAgICBpZiAocnYgPj0gMCkKLSAgICAgICAgcmV0dXJuIHJ2OwotICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGlmIChfUHlPYmplY3RfSGFzTGVuKG8pKSB7CisgICAgICAgIHJlcyA9IFB5T2JqZWN0X0xlbmd0aChvKTsKKyAgICAgICAgaWYgKHJlcyA8IDAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQogICAgIH0KLQotICAgIC8qIHRyeSBvLl9fbGVuZ3RoX2hpbnRfXygpICovCi0gICAgaGludG1ldGggPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvLCAmUHlJZF9fX2xlbmd0aF9oaW50X18pOwotICAgIGlmIChoaW50bWV0aCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgIGhpbnQgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvLCAmUHlJZF9fX2xlbmd0aF9oaW50X18pOworICAgIGlmIChoaW50ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKLSAgICB9Ci0gICAgcm8gPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGhpbnRtZXRoLCBOVUxMKTsKLSAgICBQeV9ERUNSRUYoaGludG1ldGgpOwotICAgIGlmIChybyA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CiAgICAgfQotICAgIHJ2ID0gUHlMb25nX0NoZWNrKHJvKSA/IFB5TG9uZ19Bc1NzaXplX3Qocm8pIDogZGVmYXVsdHZhbHVlOwotICAgIFB5X0RFQ1JFRihybyk7Ci0gICAgcmV0dXJuIHJ2OworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoaGludCwgTlVMTCk7CisgICAgUHlfREVDUkVGKGhpbnQpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBQeV9Ob3RJbXBsZW1lbnRlZCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKKyAgICB9CisgICAgaWYgKCFQeUxvbmdfQ2hlY2socmVzdWx0KSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiX19sZW5ndGhfaGludF9fIG11c3QgYmUgYW4gaW50ZWdlciwgbm90ICUuMTAwcyIsCisgICAgICAgICAgICBQeV9UWVBFKHJlc3VsdCktPnRwX25hbWUpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXMgPSBQeUxvbmdfQXNTc2l6ZV90KHJlc3VsdCk7CisgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgaWYgKHJlcyA8IDAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiX19sZW5ndGhfaGludF9fKCkgc2hvdWxkIHJldHVybiA+PSAwIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKIH0KIAogUHlPYmplY3QgKgpAQCAtMjAyLDcgKzIyNSw3IEBACiB9CiAKIGludAotUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogewogICAgIFB5T2JqZWN0ICpva2V5OwogICAgIGludCByZXQ7CkBAIC0xMjE3LDcgKzEyNDAsNyBAQAogICB0byBiZSBhbiBpbnQgb3IgaGF2ZSBhbiBfX2ludF9fIG1ldGhvZC4gU3RlYWxzIGludGVncmFsJ3MKICAgcmVmZXJlbmNlLiBlcnJvcl9mb3JtYXQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgVHlwZUVycm9yIGlmIGludGVncmFsCiAgIGlzbid0IGFjdHVhbGx5IGFuIEludGVncmFsIGluc3RhbmNlLiBlcnJvcl9mb3JtYXQgc2hvdWxkIGJlIGEgZm9ybWF0IHN0cmluZwotICB0aGF0IGNhbiBhY2NlcHQgYSBjaGFyKiBuYW1pbmcgaW50ZWdyYWwncyB0eXBlLiAKKyAgdGhhdCBjYW4gYWNjZXB0IGEgY2hhciogbmFtaW5nIGludGVncmFsJ3MgdHlwZS4KICovCiBzdGF0aWMgUHlPYmplY3QgKgogY29udmVydF9pbnRlZ3JhbF90b19pbnQoUHlPYmplY3QgKmludGVncmFsLCBjb25zdCBjaGFyICplcnJvcl9mb3JtYXQpCkBAIC0xMjM2LDcgKzEyNTksNyBAQAogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCBlcnJvcl9mb3JtYXQsIFB5X1RZUEUoaW50ZWdyYWwpLT50cF9uYW1lKTsKICAgICBQeV9ERUNSRUYoaW50ZWdyYWwpOwotICAgIHJldHVybiBOVUxMOyAgICAKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogCkBAIC0xNjY5LDcgKzE2OTIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEd1ZXNzIHJlc3VsdCBzaXplIGFuZCBhbGxvY2F0ZSBzcGFjZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQodiwgMTApOworICAgIG4gPSBQeU9iamVjdF9MZW5ndGhIaW50KHYsIDEwKTsKICAgICBpZiAobiA9PSAtMSkKICAgICAgICAgZ290byBGYWlsOwogICAgIHJlc3VsdCA9IFB5VHVwbGVfTmV3KG4pOwpAQCAtMTkyOSw3ICsxOTUyLDcgQEAKICNkZWZpbmUgUHlNYXBwaW5nX0xlbmd0aCBQeU1hcHBpbmdfU2l6ZQogCiBQeU9iamVjdCAqCi1QeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqb2tleSwgKnI7CiAKQEAgLTE5NDUsNyArMTk2OCw3IEBACiB9CiAKIGludAotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQorUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFB5T2JqZWN0ICpva2V5OwogICAgIGludCByOwpAQCAtMTk2NCw3ICsxOTg3LDcgQEAKIH0KIAogaW50Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiB7CiAgICAgUHlPYmplY3QgKnY7CiAKQEAgLTIwNjMsMTAgKzIwODYsMTUgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXN1bHQgPSAoKmNhbGwpKGZ1bmMsIGFyZywga3cpOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorI2lmZGVmIE5ERUJVRworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAiTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGFzc2VydChyZXN1bHQgIT0gTlVMTCB8fCBQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJyUuMjAwcycgb2JqZWN0IGlzIG5vdCBjYWxsYWJsZSIsCkBAIC0yMTAxLDcgKzIxMjksNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK1B5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmFyZ3M7CkBAIC0yMTE2LDEyICsyMTQ0LDE0IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIGNhbGxfZnVuY3Rpb25fdGFpbChjYWxsYWJsZSwgYXJncyk7CiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjE0MSw3ICsyMTcxLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQorY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQogewogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjE3MCw3ICsyMjAwLDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIxOTEsNyArMjIyMSw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICpuYW1lLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sIF9QeV9JZGVudGlmaWVyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIyMTIsNyArMjI0Myw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLCBjaGFyICpuYW1lLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMjMyLDcgKzIyNjQsOCBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMzAyLDcgKzIzMzUsNyBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCiAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqbmFtZSwgLi4uKQogewogICAgIFB5T2JqZWN0ICphcmdzLCAqdG1wOwpAQCAtMjY3Nyw4ICsyNzEwLDggQEAKICAqIE5VTEwgdGVybWluYXRlZCBzdHJpbmcgcG9pbnRlcnMgd2l0aCBhIE5VTEwgY2hhciogdGVybWluYXRpbmcgdGhlIGFycmF5LgogICogKGllOiBhbiBhcmd2IG9yIGVudiBsaXN0KQogICoKLSAqIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSByZXR1cm5lZCBsaXN0IGlzIGFsbG9jYXRlZCB1c2luZyBtYWxsb2MoKSBhbmQgTVVTVAotICogYmUgZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBhIGZyZWUoKSBsb29wIG9yIF9QeV9GcmVlQ2hhclBBcnJheSgpLgorICogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHJldHVybmVkIGxpc3QgaXMgYWxsb2NhdGVkIHVzaW5nIFB5TWVtX01hbGxvYygpCisgKiBhbmQgTVVTVCBiZSBmcmVlZCBieSBfUHlfRnJlZUNoYXJQQXJyYXkoKS4KICAqLwogY2hhciAqY29uc3QgKgogX1B5U2VxdWVuY2VfQnl0ZXNUb0NoYXJwQXJyYXkoUHlPYmplY3QqIHNlbGYpCkBAIC0yNjg2LDYgKzI3MTksNyBAQAogICAgIGNoYXIgKiphcnJheTsKICAgICBQeV9zc2l6ZV90IGksIGFyZ2M7CiAgICAgUHlPYmplY3QgKml0ZW0gPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIGFyZ2MgPSBQeVNlcXVlbmNlX1NpemUoc2VsZik7CiAgICAgaWYgKGFyZ2MgPT0gLTEpCkBAIC0yNjk4LDcgKzI3MzIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBhcnJheSA9IG1hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgIGFycmF5ID0gUHlNZW1fTWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY2hhciAqKSk7CiAgICAgaWYgKGFycmF5ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNzE3LDExICsyNzUxLDEzIEBACiAgICAgICAgICAgICBhcnJheVtpXSA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KLSAgICAgICAgYXJyYXlbaV0gPSBzdHJkdXAoZGF0YSk7CisgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGl0ZW0pICsgMTsKKyAgICAgICAgYXJyYXlbaV0gPSBQeU1lbV9NYWxsb2Moc2l6ZSk7CiAgICAgICAgIGlmICghYXJyYXlbaV0pIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGFycmF5W2ldLCBkYXRhLCBzaXplKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgIH0KICAgICBhcnJheVthcmdjXSA9IE5VTEw7CkBAIC0yNzQxLDcgKzI3NzcsNyBAQAogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBmb3IgKGkgPSAwOyBhcnJheVtpXSAhPSBOVUxMOyArK2kpIHsKLSAgICAgICAgZnJlZShhcnJheVtpXSk7CisgICAgICAgIFB5TWVtX0ZyZWUoYXJyYXlbaV0pOwogICAgIH0KLSAgICBmcmVlKCh2b2lkKilhcnJheSk7CisgICAgUHlNZW1fRnJlZSgodm9pZCopYXJyYXkpOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYyBiL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKaW5kZXggNjBiMjgxMS4uMjM1OGUwNSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYworKysgYi9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCkBAIC0xNTAsNiArMTUwLDcgQEAKICAgICB9CiAgICAgUHlfU0laRShuZXcpID0gc2l6ZTsKICAgICBuZXctPm9iX2FsbG9jID0gYWxsb2M7CisgICAgbmV3LT5vYl9zdGFydCA9IG5ldy0+b2JfYnl0ZXM7CiAgICAgbmV3LT5vYl9leHBvcnRzID0gMDsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKiluZXc7CkBAIC0xNzcsNDggKzE3OCw3MCBAQAogUHlCeXRlQXJyYXlfUmVzaXplKFB5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IHNpemUpCiB7CiAgICAgdm9pZCAqc3ZhbDsKLSAgICBQeV9zc2l6ZV90IGFsbG9jID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9hbGxvYzsKKyAgICBQeUJ5dGVBcnJheU9iamVjdCAqb2JqID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpOworICAgIFB5X3NzaXplX3QgYWxsb2MgPSBvYmotPm9iX2FsbG9jOworICAgIFB5X3NzaXplX3QgbG9naWNhbF9vZmZzZXQgPSBvYmotPm9iX3N0YXJ0IC0gb2JqLT5vYl9ieXRlczsKIAogICAgIGFzc2VydChzZWxmICE9IE5VTEwpOwogICAgIGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSk7CiAgICAgYXNzZXJ0KHNpemUgPj0gMCk7CisgICAgYXNzZXJ0KGxvZ2ljYWxfb2Zmc2V0ID49IDApOworICAgIGFzc2VydChsb2dpY2FsX29mZnNldCA8PSBhbGxvYyk7CiAKICAgICBpZiAoc2l6ZSA9PSBQeV9TSVpFKHNlbGYpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIV9jYW5yZXNpemUoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZikpIHsKKyAgICBpZiAoIV9jYW5yZXNpemUob2JqKSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKHNpemUgPCBhbGxvYyAvIDIpIHsKLSAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSA8IGFsbG9jKSB7Ci0gICAgICAgIC8qIFdpdGhpbiBhbGxvY2F0ZWQgc2l6ZTsgcXVpY2sgZXhpdCAqLwotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNpemUgPD0gYWxsb2MgKiAxLjEyNSkgewotICAgICAgICAvKiBNb2RlcmF0ZSB1cHNpemU7IG92ZXJhbGxvY2F0ZSBzaW1pbGFyIHRvIGxpc3RfcmVzaXplKCkgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgaWYgKHNpemUgKyBsb2dpY2FsX29mZnNldCArIDEgPCBhbGxvYykgeworICAgICAgICAvKiBDdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggdG8gaG9zdCB0aGUgcmVxdWVzdGVkIHNpemUsCisgICAgICAgICAgIGRlY2lkZSBvbiBhIHN0cmF0ZWd5LiAqLworICAgICAgICBpZiAoc2l6ZSA8IGFsbG9jIC8gMikgeworICAgICAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KKyAgICAgICAgICAgIGFsbG9jID0gc2l6ZSArIDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNaW5vciBkb3duc2l6ZTsgcXVpY2sgZXhpdCAqLworICAgICAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7CisgICAgICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogTWFqb3IgdXBzaXplOyByZXNpemUgdXAgdG8gZXhhY3Qgc2l6ZSAqLwotICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICAvKiBOZWVkIGdyb3dpbmcsIGRlY2lkZSBvbiBhIHN0cmF0ZWd5ICovCisgICAgICAgIGlmIChzaXplIDw9IGFsbG9jICogMS4xMjUpIHsKKyAgICAgICAgICAgIC8qIE1vZGVyYXRlIHVwc2l6ZTsgb3ZlcmFsbG9jYXRlIHNpbWlsYXIgdG8gbGlzdF9yZXNpemUoKSAqLworICAgICAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNYWpvciB1cHNpemU7IHJlc2l6ZSB1cCB0byBleGFjdCBzaXplICovCisgICAgICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3ZhbCA9IFB5T2JqZWN0X1JlYWxsb2MoKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlcywgYWxsb2MpOwotICAgIGlmIChzdmFsID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChsb2dpY2FsX29mZnNldCA+IDApIHsKKyAgICAgICAgc3ZhbCA9IFB5T2JqZWN0X01hbGxvYyhhbGxvYyk7CisgICAgICAgIGlmIChzdmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHN2YWwsIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwgUHlfTUlOKHNpemUsIFB5X1NJWkUoc2VsZikpKTsKKyAgICAgICAgUHlPYmplY3RfRnJlZShvYmotPm9iX2J5dGVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN2YWwgPSBQeU9iamVjdF9SZWFsbG9jKG9iai0+b2JfYnl0ZXMsIGFsbG9jKTsKKyAgICAgICAgaWYgKHN2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KIAotICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXMgPSBzdmFsOworICAgIG9iai0+b2JfYnl0ZXMgPSBvYmotPm9iX3N0YXJ0ID0gc3ZhbDsKICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2FsbG9jID0gYWxsb2M7Ci0gICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLworICAgIG9iai0+b2JfYWxsb2MgPSBhbGxvYzsKKyAgICBvYmotPm9iX2J5dGVzW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTI4OCwxMyArMzExLDEzIEBACiAgICAgfQogICAgIGlmIChzaXplIDwgc2VsZi0+b2JfYWxsb2MpIHsKICAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7Ci0gICAgICAgIHNlbGYtPm9iX2J5dGVzW1B5X1NJWkUoc2VsZildID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCisgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtQeV9TSVpFKHNlbGYpXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLwogICAgIH0KICAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIG15c2l6ZSwgdm8uYnVmLCB2by5sZW4pOworICAgIG1lbWNweShQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgKyBteXNpemUsIHZvLmJ1Ziwgdm8ubGVuKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2byk7CiAgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwpAQCAtMzMxLDYgKzM1NCw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBteXNpemU7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIGNvdW50ID0gMDsKQEAgLTMzOCwxOSArMzYyLDE2IEBACiAgICAgaWYgKGNvdW50ID4gMCAmJiBteXNpemUgPiBQWV9TU0laRV9UX01BWCAvIGNvdW50KQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzaXplID0gbXlzaXplICogY291bnQ7Ci0gICAgaWYgKHNpemUgPCBzZWxmLT5vYl9hbGxvYykgewotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKKyAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgaWYgKG15c2l6ZSA9PSAxKQotICAgICAgICBtZW1zZXQoc2VsZi0+b2JfYnl0ZXMsIHNlbGYtPm9iX2J5dGVzWzBdLCBzaXplKTsKKyAgICAgICAgbWVtc2V0KGJ1ZiwgYnVmWzBdLCBzaXplKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIGkqbXlzaXplLCBzZWxmLT5vYl9ieXRlcywgbXlzaXplKTsKKyAgICAgICAgICAgIG1lbWNweShidWYgKyBpKm15c2l6ZSwgYnVmLCBteXNpemUpOwogICAgIH0KIAogICAgIFB5X0lOQ1JFRihzZWxmKTsKQEAgLTM2Niw3ICszODcsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImJ5dGVhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpKHNlbGYtPm9iX2J5dGVzW2ldKSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zODUsNyArNDA2LDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiYnl0ZWFycmF5IGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoc2VsZi0+b2JfYnl0ZXNbaV0pKTsKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaW5kZXgpKSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoLCBjdXIsIGk7CkBAIC0zOTgsOCArNDE5LDggQEAKICAgICAgICAgaWYgKHNsaWNlbGVuZ3RoIDw9IDApCiAgICAgICAgICAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwogICAgICAgICBlbHNlIGlmIChzdGVwID09IDEpIHsKLSAgICAgICAgICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSArIHN0YXJ0LCBzbGljZWxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFyICpzb3VyY2VfYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwpAQCAtNDI1LDEwICs0NDYsNjggQEAKIH0KIAogc3RhdGljIGludAorYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnl0ZXMsIFB5X3NzaXplX3QgYnl0ZXNfbGVuKQoreworICAgIFB5X3NzaXplX3QgYXZhaWwgPSBoaSAtIGxvOworICAgIGNoYXIgKmJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICBQeV9zc2l6ZV90IGdyb3d0aCA9IGJ5dGVzX2xlbiAtIGF2YWlsOworICAgIGFzc2VydChhdmFpbCA+PSAwKTsKKworICAgIGlmIChncm93dGggIT0gMCkgeworICAgICAgICBpZiAoZ3Jvd3RoIDwgMCkgeworICAgICAgICAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChsbyA9PSAwKSB7CisgICAgICAgICAgICAgICAgLyogU2hyaW5rIHRoZSBidWZmZXIgYnkgYWR2YW5jaW5nIGl0cyBsb2dpY2FsIHN0YXJ0ICovCisgICAgICAgICAgICAgICAgc2VsZi0+b2Jfc3RhcnQgLT0gZ3Jvd3RoOworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgICAgICAgICAgfCAgIHw8LS0tLWF2YWlsLS0tLS0+fDwtLS0tLXRhaWwtLS0tLS0+fAorICAgICAgICAgICAgICAgICAgfCAgICAgIHw8LWJ5dGVzX2xlbi0+fDwtLS0tLXRhaWwtLS0tLS0+fAorICAgICAgICAgICAgICAgICAgMCAgICBuZXdfbG8gICAgICAgICBuZXdfaGkgICAgICAgICAgbmV3X3NpemUKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKKyAgICAgICAgICAgICAgICAgIHwgICB8PC0tLS1hdmFpbC0tLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgICAgICAgICAgfCAgIHw8LWJ5dGVzX2xlbi0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgICAgICAgICAwICAgbG8gICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiArIGxvICsgYnl0ZXNfbGVuLCBidWYgKyBoaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBoaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogbmVlZCB0byB2ZXJpZnkgdGhpcyBjYW4ndCBvdmVyZmxvdyEgKi8KKyAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgKKyAgICAgICAgICAgICAgICAoUHlPYmplY3QgKilzZWxmLCBQeV9TSVpFKHNlbGYpICsgZ3Jvd3RoKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICAgICAgaWYgKGdyb3d0aCA+IDApIHsKKyAgICAgICAgICAgIC8qIE1ha2UgdGhlIHBsYWNlIGZvciB0aGUgYWRkaXRpb25hbCBieXRlcyAqLworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgMCAgIGxvICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCisgICAgICAgICAgICAgIHwgICB8PC1hdmFpbC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgICAgIHwgICB8PC0tLWJ5dGVzX2xlbi0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgbG8gKyBieXRlc19sZW4sIGJ1ZiArIGhpLAorICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gbG8gLSBieXRlc19sZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJ5dGVzX2xlbiA+IDApCisgICAgICAgIG1lbWNweShidWYgKyBsbywgYnl0ZXMsIGJ5dGVzX2xlbik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGJ5dGVhcnJheV9zZXRzbGljZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZXMpCiB7Ci0gICAgUHlfc3NpemVfdCBhdmFpbCwgbmVlZGVkOworICAgIFB5X3NzaXplX3QgbmVlZGVkOwogICAgIHZvaWQgKmJ5dGVzOwogICAgIFB5X2J1ZmZlciB2Ynl0ZXM7CiAgICAgaW50IHJlcyA9IDA7CkBAIC00NjcsNTAgKzU0Niw5IEBACiAgICAgaWYgKGhpID4gUHlfU0laRShzZWxmKSkKICAgICAgICAgaGkgPSBQeV9TSVpFKHNlbGYpOwogCi0gICAgYXZhaWwgPSBoaSAtIGxvOwotICAgIGlmIChhdmFpbCA8IDApCi0gICAgICAgIGxvID0gaGkgPSBhdmFpbCA9IDA7Ci0KLSAgICBpZiAoYXZhaWwgIT0gbmVlZGVkKSB7Ci0gICAgICAgIGlmIChhdmFpbCA+IG5lZWRlZCkgewotICAgICAgICAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKSB7Ci0gICAgICAgICAgICAgICAgcmVzID0gLTE7Ci0gICAgICAgICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgIHwgICB8PC0tLS1hdmFpbC0tLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICB8ICAgfDwtbmVlZGVkLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBsbyArIG5lZWRlZCwgc2VsZi0+b2JfYnl0ZXMgKyBoaSwKLSAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIGhpKTsKLSAgICAgICAgfQotICAgICAgICAvKiBYWFgobm5vcndpdHopOiBuZWVkIHRvIHZlcmlmeSB0aGlzIGNhbid0IG92ZXJmbG93ISAqLwotICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgbmVlZGVkIC0gYXZhaWwpIDwgMCkgewotICAgICAgICAgICAgICAgIHJlcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhdmFpbCA8IG5lZWRlZCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgIHwgICB8PC1hdmFpbC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIHwgICB8PC0tLS1uZWVkZWQtLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBsbyArIG5lZWRlZCwgc2VsZi0+b2JfYnl0ZXMgKyBoaSwKLSAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIGxvIC0gbmVlZGVkKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChuZWVkZWQgPiAwKQotICAgICAgICBtZW1jcHkoc2VsZi0+b2JfYnl0ZXMgKyBsbywgYnl0ZXMsIG5lZWRlZCk7Ci0KLQotIGZpbmlzaDoKKyAgICByZXMgPSBieXRlYXJyYXlfc2V0c2xpY2VfbGluZWFyKHNlbGYsIGxvLCBoaSwgYnl0ZXMsIG5lZWRlZCk7CiAgICAgaWYgKHZieXRlcy5sZW4gIT0gLTEpCi0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2Ynl0ZXMpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2Ynl0ZXMpOwogICAgIHJldHVybiByZXM7CiB9CiAKQEAgLTUzMyw3ICs1NzEsNyBAQAogICAgIGlmICghX2dldGJ5dGV2YWx1ZSh2YWx1ZSwgJml2YWwpKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBzZWxmLT5vYl9ieXRlc1tpXSA9IGl2YWw7CisgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldID0gaXZhbDsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNTQxLDcgKzU3OSw4IEBACiBieXRlYXJyYXlfYXNzX3N1YnNjcmlwdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmluZGV4LCBQeU9iamVjdCAqdmFsdWVzKQogewogICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuLCBuZWVkZWQ7Ci0gICAgY2hhciAqYnl0ZXM7CisgICAgY2hhciAqYnVmLCAqYnl0ZXM7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCiAgICAgaWYgKFB5SW5kZXhfQ2hlY2soaW5kZXgpKSB7CiAgICAgICAgIFB5X3NzaXplX3QgaSA9IFB5TnVtYmVyX0FzU3NpemVfdChpbmRleCwgUHlFeGNfSW5kZXhFcnJvcik7CkBAIC01NjgsNyArNjA3LDcgQEAKICAgICAgICAgICAgIGludCBpdmFsOwogICAgICAgICAgICAgaWYgKCFfZ2V0Ynl0ZXZhbHVlKHZhbHVlcywgJml2YWwpKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzW2ldID0gKGNoYXIpaXZhbDsKKyAgICAgICAgICAgIGJ1ZltpXSA9IChjaGFyKWl2YWw7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTYwNiw3ICs2NDUsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHZhbHVlcykpOwotICAgICAgICBieXRlcyA9ICgoUHlCeXRlQXJyYXlPYmplY3QgKil2YWx1ZXMpLT5vYl9ieXRlczsKKyAgICAgICAgYnl0ZXMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodmFsdWVzKTsKICAgICAgICAgbmVlZGVkID0gUHlfU0laRSh2YWx1ZXMpOwogICAgIH0KICAgICAvKiBNYWtlIHN1cmUgYls1OjJdID0gLi4uIGluc2VydHMgYmVmb3JlIDUsIG5vdCBiZWZvcmUgMi4gKi8KQEAgLTYxNCwzOCArNjUzLDcgQEAKICAgICAgICAgKHN0ZXAgPiAwICYmIHN0YXJ0ID4gc3RvcCkpCiAgICAgICAgIHN0b3AgPSBzdGFydDsKICAgICBpZiAoc3RlcCA9PSAxKSB7Ci0gICAgICAgIGlmIChzbGljZWxlbiAhPSBuZWVkZWQpIHsKLSAgICAgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoc2xpY2VsZW4gPiBuZWVkZWQpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgMCAgIHN0YXJ0ICAgICAgICAgICBzdG9wICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICAgICAgfCAgIHw8LS0tc2xpY2VsZW4tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICB8ICAgfDwtbmVlZGVkLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgIDAgICBsbyAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBzdGFydCArIG5lZWRlZCwgc2VsZi0+b2JfYnl0ZXMgKyBzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIHN0b3ApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgKyBuZWVkZWQgLSBzbGljZWxlbikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChzbGljZWxlbiA8IG5lZWRlZCkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgICAgIHwgICB8PC1hdmFpbC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICB8ICAgfDwtLS0tbmVlZGVkLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgc3RhcnQgKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBzdGFydCAtIG5lZWRlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmVlZGVkID4gMCkKLSAgICAgICAgICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0LCBieXRlcywgbmVlZGVkKTsKLQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGJ5dGVhcnJheV9zZXRzbGljZV9saW5lYXIoc2VsZiwgc3RhcnQsIHN0b3AsIGJ5dGVzLCBuZWVkZWQpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaWYgKG5lZWRlZCA9PSAwKSB7CkBAIC02NzIsMTQgKzY4MCwxNCBAQAogICAgICAgICAgICAgICAgIGlmIChjdXIgKyBzdGVwID49IChzaXplX3QpUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikpCiAgICAgICAgICAgICAgICAgICAgIGxpbSA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpIC0gY3VyIC0gMTsKIAotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBjdXIgLSBpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+b2JfYnl0ZXMgKyBjdXIgKyAxLCBsaW0pOworICAgICAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgY3VyIC0gaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIGN1ciArIDEsIGxpbSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBNb3ZlIHRoZSB0YWlsIG9mIHRoZSBieXRlcywgaW4gb25lIGNodW5rICovCiAgICAgICAgICAgICBjdXIgPSBzdGFydCArIChzaXplX3Qpc2xpY2VsZW4qc3RlcDsKICAgICAgICAgICAgIGlmIChjdXIgPCAoc2l6ZV90KVB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKSB7Ci0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIGN1ciAtIHNsaWNlbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+b2JfYnl0ZXMgKyBjdXIsCisgICAgICAgICAgICAgICAgbWVtbW92ZShidWYgKyBjdXIgLSBzbGljZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIGN1ciwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpIC0gY3VyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKQEAgLTcwMSw3ICs3MDksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgc2xpY2VsZW47IGN1ciArPSBzdGVwLCBpKyspCi0gICAgICAgICAgICAgICAgc2VsZi0+b2JfYnl0ZXNbY3VyXSA9IGJ5dGVzW2ldOworICAgICAgICAgICAgICAgIGJ1ZltjdXJdID0gYnl0ZXNbaV07CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTc4MSw3ICs3ODksNyBAQAogICAgICAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIGNvdW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBtZW1zZXQoc2VsZi0+b2JfYnl0ZXMsIDAsIGNvdW50KTsKKyAgICAgICAgICAgIG1lbXNldChQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksIDAsIGNvdW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC03OTQsNyArODAyLDggQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgc2l6ZSA9IHZpZXcubGVuOwogICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkgZ290byBmYWlsOwotICAgICAgICBpZiAoUHlCdWZmZXJfVG9Db250aWd1b3VzKHNlbGYtPm9iX2J5dGVzLCAmdmlldywgc2l6ZSwgJ0MnKSA8IDApCisgICAgICAgIGlmIChQeUJ1ZmZlcl9Ub0NvbnRpZ3VvdXMoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLAorICAgICAgICAgICAgJnZpZXcsIHNpemUsICdDJykgPCAwKQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC04MzgsNyArODQ3LDcgQEAKICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikrKzsKICAgICAgICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIFB5X1NJWkUoc2VsZikrMSkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKS0xXSA9IHZhbHVlOworICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbUHlfU0laRShzZWxmKS0xXSA9IHZhbHVlOwogICAgIH0KIAogICAgIC8qIENsZWFuIHVwIGFuZCByZXR1cm4gc3VjY2VzcyAqLwpAQCAtODYyLDkgKzg3MSwxMCBAQAogICAgIC8qIDE1ID09IHN0cmxlbihxdW90ZV9wcmVmaXgpICsgMiArIHN0cmxlbihxdW90ZV9wb3N0Zml4KSArIDEgKi8KICAgICBzaXplX3QgbmV3c2l6ZTsKICAgICBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgY2hhciBjOwotICAgIHJlZ2lzdGVyIGNoYXIgKnA7CisgICAgUHlfc3NpemVfdCBpOworICAgIGNoYXIgKmJ5dGVzOworICAgIGNoYXIgYzsKKyAgICBjaGFyICpwOwogICAgIGludCBxdW90ZTsKICAgICBjaGFyICp0ZXN0LCAqc3RhcnQ7CiAgICAgY2hhciAqYnVmZmVyOwpAQCAtODk5LDExICs5MDksMTIgQEAKICAgICAgICAgKnArKyA9ICpxdW90ZV9wcmVmaXgrKzsKICAgICAqcCsrID0gcXVvdGU7CiAKKyAgICBieXRlcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCBlbm91Z2ggcm9vbSBmb3IgYSBoZXggZXNjYXBlCiAgICAgICAgICAgIGFuZCBhIGNsb3NpbmcgcXVvdGUuICovCiAgICAgICAgIGFzc2VydChuZXdzaXplIC0gKHAgLSBidWZmZXIpID49IDUpOwotICAgICAgICBjID0gc2VsZi0+b2JfYnl0ZXNbaV07CisgICAgICAgIGMgPSBieXRlc1tpXTsKICAgICAgICAgaWYgKGMgPT0gJ1wnJyB8fCBjID09ICdcXCcpCiAgICAgICAgICAgICAqcCsrID0gJ1xcJywgKnArKyA9IGM7CiAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ1x0JykKQEAgLTEwMzgsNiArMTA0OSw3IEBACiAjZGVmaW5lIEZBU1RTRUFSQ0ggZmFzdHNlYXJjaAogI2RlZmluZSBTVFJJTkdMSUIoRikgc3RyaW5nbGliXyMjRgogI2RlZmluZSBTVFJJTkdMSUJfQ0hBUiBjaGFyCisjZGVmaW5lIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiAxCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gUHlCeXRlQXJyYXlfR0VUX1NJWkUKICNkZWZpbmUgU1RSSU5HTElCX1NUUiBQeUJ5dGVBcnJheV9BU19TVFJJTkcKICNkZWZpbmUgU1RSSU5HTElCX05FVyBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZQpAQCAtMTA0OSw2ICsxMDYxLDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvZmFzdHNlYXJjaC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL2pvaW4uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvcGFydGl0aW9uLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2N0eXBlLmgiCkBAIC0xNDI5LDkgKzE0NDIsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVhcnJheV90cmFuc2xhdGUoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJlZ2lzdGVyIGNoYXIgKmlucHV0LCAqb3V0cHV0OwotICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnRhYmxlOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgYzsKKyAgICBjaGFyICppbnB1dCwgKm91dHB1dDsKKyAgICBjb25zdCBjaGFyICp0YWJsZTsKKyAgICBQeV9zc2l6ZV90IGksIGM7CiAgICAgUHlPYmplY3QgKmlucHV0X29iaiA9IChQeU9iamVjdCopc2VsZjsKICAgICBjb25zdCBjaGFyICpvdXRwdXRfc3RhcnQ7CiAgICAgUHlfc3NpemVfdCBpbmxlbjsKQEAgLTIxOTIsNyArMjIwNSw3IEBACiAgICAgUHlfc3NpemVfdCBpLCBqLCBuID0gUHlfU0laRShzZWxmKTsKIAogICAgIGogPSBuIC8gMjsKLSAgICBoZWFkID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgaGVhZCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICB0YWlsID0gaGVhZCArIG4gLSAxOwogICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsKICAgICAgICAgc3dhcCA9ICpoZWFkOwpAQCAtMjIxMyw2ICsyMjI2LDcgQEAKICAgICBQeU9iamVjdCAqdmFsdWU7CiAgICAgaW50IGl2YWw7CiAgICAgUHlfc3NpemVfdCB3aGVyZSwgbiA9IFB5X1NJWkUoc2VsZik7CisgICAgY2hhciAqYnVmOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJuTzppbnNlcnQiLCAmd2hlcmUsICZ2YWx1ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjIyNiw2ICsyMjQwLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuICsgMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAKICAgICBpZiAod2hlcmUgPCAwKSB7CiAgICAgICAgIHdoZXJlICs9IG47CkBAIC0yMjM0LDggKzIyNDksOCBAQAogICAgIH0KICAgICBpZiAod2hlcmUgPiBuKQogICAgICAgICB3aGVyZSA9IG47Ci0gICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHdoZXJlICsgMSwgc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSwgbiAtIHdoZXJlKTsKLSAgICBzZWxmLT5vYl9ieXRlc1t3aGVyZV0gPSBpdmFsOworICAgIG1lbW1vdmUoYnVmICsgd2hlcmUgKyAxLCBidWYgKyB3aGVyZSwgbiAtIHdoZXJlKTsKKyAgICBidWZbd2hlcmVdID0gaXZhbDsKIAogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjI2MCw3ICsyMjc1LDcgQEAKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gKyAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZi0+b2JfYnl0ZXNbbl0gPSB2YWx1ZTsKKyAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbbl0gPSB2YWx1ZTsKIAogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjI5MSw3ICsyMzA2LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlIGFyZ3VtZW50LiAzMiBpcyBhcmJpdHJhcnkuICovCi0gICAgYnVmX3NpemUgPSBfUHlPYmplY3RfTGVuZ3RoSGludChhcmcsIDMyKTsKKyAgICBidWZfc2l6ZSA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoYXJnLCAzMik7CiAgICAgaWYgKGJ1Zl9zaXplID09IC0xKSB7CiAgICAgICAgIFB5X0RFQ1JFRihpdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjM1Myw2ICsyMzY4LDcgQEAKIHsKICAgICBpbnQgdmFsdWU7CiAgICAgUHlfc3NpemVfdCB3aGVyZSA9IC0xLCBuID0gUHlfU0laRShzZWxmKTsKKyAgICBjaGFyICpidWY7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnBvcCIsICZ3aGVyZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjM3MSw4ICsyMzg3LDkgQEAKICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgdmFsdWUgPSBzZWxmLT5vYl9ieXRlc1t3aGVyZV07Ci0gICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHdoZXJlLCBzZWxmLT5vYl9ieXRlcyArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgdmFsdWUgPSBidWZbd2hlcmVdOworICAgIG1lbW1vdmUoYnVmICsgd2hlcmUsIGJ1ZiArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gLSAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMzg4LDEyICsyNDA1LDEzIEBACiB7CiAgICAgaW50IHZhbHVlOwogICAgIFB5X3NzaXplX3Qgd2hlcmUsIG4gPSBQeV9TSVpFKHNlbGYpOworICAgIGNoYXIgKmJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAogICAgIGlmICghIF9nZXRieXRldmFsdWUoYXJnLCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZvciAod2hlcmUgPSAwOyB3aGVyZSA8IG47IHdoZXJlKyspIHsKLSAgICAgICAgaWYgKHNlbGYtPm9iX2J5dGVzW3doZXJlXSA9PSB2YWx1ZSkKKyAgICAgICAgaWYgKGJ1Zlt3aGVyZV0gPT0gdmFsdWUpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKHdoZXJlID09IG4pIHsKQEAgLTI0MDMsNyArMjQyMSw3IEBACiAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSwgc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CisgICAgbWVtbW92ZShidWYgKyB3aGVyZSwgYnVmICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiAtIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI0MTMsMjEgKzI0MzEsMjEgQEAKIC8qIFhYWCBUaGVzZSB0d28gaGVscGVycyBjb3VsZCBiZSBvcHRpbWl6ZWQgaWYgYXJnc2l6ZSA9PSAxICovCiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1sc3RyaXBfaGVscGVyKHVuc2lnbmVkIGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKK2xzdHJpcF9oZWxwZXIoY2hhciAqbXlwdHIsIFB5X3NzaXplX3QgbXlzaXplLAogICAgICAgICAgICAgICB2b2lkICphcmdwdHIsIFB5X3NzaXplX3QgYXJnc2l6ZSkKIHsKICAgICBQeV9zc2l6ZV90IGkgPSAwOwotICAgIHdoaWxlIChpIDwgbXlzaXplICYmIG1lbWNocihhcmdwdHIsIG15cHRyW2ldLCBhcmdzaXplKSkKKyAgICB3aGlsZSAoaSA8IG15c2l6ZSAmJiBtZW1jaHIoYXJncHRyLCAodW5zaWduZWQgY2hhcikgbXlwdHJbaV0sIGFyZ3NpemUpKQogICAgICAgICBpKys7CiAgICAgcmV0dXJuIGk7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1yc3RyaXBfaGVscGVyKHVuc2lnbmVkIGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKK3JzdHJpcF9oZWxwZXIoY2hhciAqbXlwdHIsIFB5X3NzaXplX3QgbXlzaXplLAogICAgICAgICAgICAgICB2b2lkICphcmdwdHIsIFB5X3NzaXplX3QgYXJnc2l6ZSkKIHsKICAgICBQeV9zc2l6ZV90IGkgPSBteXNpemUgLSAxOwotICAgIHdoaWxlIChpID49IDAgJiYgbWVtY2hyKGFyZ3B0ciwgbXlwdHJbaV0sIGFyZ3NpemUpKQorICAgIHdoaWxlIChpID49IDAgJiYgbWVtY2hyKGFyZ3B0ciwgKHVuc2lnbmVkIGNoYXIpIG15cHRyW2ldLCBhcmdzaXplKSkKICAgICAgICAgaS0tOwogICAgIHJldHVybiBpICsgMTsKIH0KQEAgLTI0NDIsNyArMjQ2MCw3IEBACiBieXRlYXJyYXlfc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgbGVmdCwgcmlnaHQsIG15c2l6ZSwgYXJnc2l6ZTsKLSAgICB2b2lkICpteXB0ciwgKmFyZ3B0cjsKKyAgICBjaGFyICpteXB0ciwgKmFyZ3B0cjsKICAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKICAgICBQeV9idWZmZXIgdmFyZzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnN0cmlwIiwgJmFyZykpCkBAIC0yNDU0LDEwICsyNDcyLDEwIEBACiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChfZ2V0YnVmZmVyKGFyZywgJnZhcmcpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhcmdwdHIgPSB2YXJnLmJ1ZjsKKyAgICAgICAgYXJncHRyID0gKGNoYXIgKikgdmFyZy5idWY7CiAgICAgICAgIGFyZ3NpemUgPSB2YXJnLmxlbjsKICAgICB9Ci0gICAgbXlwdHIgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwogICAgIGxlZnQgPSBsc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CiAgICAgaWYgKGxlZnQgPT0gbXlzaXplKQpAQCAtMjQ2Niw3ICsyNDg0LDcgQEAKICAgICAgICAgcmlnaHQgPSByc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CiAgICAgaWYgKGFyZyAhPSBQeV9Ob25lKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2YXJnKTsKLSAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfYnl0ZXMgKyBsZWZ0LCByaWdodCAtIGxlZnQpOworICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShteXB0ciArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CiB9CiAKIFB5RG9jX1NUUlZBUihsc3RyaXBfX2RvY19fLApAQCAtMjQ3OSw3ICsyNDk3LDcgQEAKIGJ5dGVhcnJheV9sc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgbGVmdCwgcmlnaHQsIG15c2l6ZSwgYXJnc2l6ZTsKLSAgICB2b2lkICpteXB0ciwgKmFyZ3B0cjsKKyAgICBjaGFyICpteXB0ciwgKmFyZ3B0cjsKICAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKICAgICBQeV9idWZmZXIgdmFyZzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOmxzdHJpcCIsICZhcmcpKQpAQCAtMjQ5MSwxNiArMjUwOSwxNiBAQAogICAgIGVsc2UgewogICAgICAgICBpZiAoX2dldGJ1ZmZlcihhcmcsICZ2YXJnKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXJncHRyID0gdmFyZy5idWY7CisgICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwogICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CiAgICAgfQotICAgIG15cHRyID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgbXlwdHIgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKICAgICBsZWZ0ID0gbHN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIHJpZ2h0ID0gbXlzaXplOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKKyAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUobXlwdHIgKyBsZWZ0LCByaWdodCAtIGxlZnQpOwogfQogCiBQeURvY19TVFJWQVIocnN0cmlwX19kb2NfXywKQEAgLTI1MTMsNyArMjUzMSw3IEBACiBieXRlYXJyYXlfcnN0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8Tzpyc3RyaXAiLCAmYXJnKSkKQEAgLTI1MjUsMTUgKzI1NDMsMTUgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IHZhcmcuYnVmOworICAgICAgICBhcmdwdHIgPSAoY2hhciAqKSB2YXJnLmJ1ZjsKICAgICAgICAgYXJnc2l6ZSA9IHZhcmcubGVuOwogICAgIH0KLSAgICBteXB0ciA9IHNlbGYtPm9iX2J5dGVzOworICAgIG15cHRyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7CiAgICAgcmlnaHQgPSByc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CiAgICAgaWYgKGFyZyAhPSBQeV9Ob25lKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2YXJnKTsKLSAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfYnl0ZXMsIHJpZ2h0KTsKKyAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUobXlwdHIsIHJpZ2h0KTsKIH0KIAogUHlEb2NfU1RSVkFSKGRlY29kZV9kb2MsCkBAIC0yNTc4LDczICsyNTk2LDkgQEAKIGluIGJldHdlZW4gZWFjaCBwYWlyLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBuZXcgYnl0ZWFycmF5LiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X2pvaW4oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdCkKK2J5dGVhcnJheV9qb2luKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaXRlcmFibGUpCiB7Ci0gICAgUHlPYmplY3QgKnNlcTsKLSAgICBQeV9zc2l6ZV90IG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5X3NzaXplX3QgbjsKLSAgICBQeU9iamVjdCAqKml0ZW1zOwotICAgIFB5X3NzaXplX3QgdG90YWxzaXplID0gMDsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGNoYXIgKmRlc3Q7Ci0KLSAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QoaXQsICJjYW4gb25seSBqb2luIGFuIGl0ZXJhYmxlIik7Ci0gICAgaWYgKHNlcSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBuID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKHNlcSk7Ci0gICAgaXRlbXMgPSBQeVNlcXVlbmNlX0Zhc3RfSVRFTVMoc2VxKTsKLQotICAgIC8qIENvbXB1dGUgdGhlIHRvdGFsIHNpemUsIGFuZCBjaGVjayB0aGF0IHRoZXkgYXJlIGFsbCBieXRlcyAqLwotICAgIC8qIFhYWCBTaG91bGRuJ3Qgd2UgdXNlIF9nZXRidWZmZXIoKSBvbiB0aGVzZSBpdGVtcyBpbnN0ZWFkPyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKm9iaiA9IGl0ZW1zW2ldOwotICAgICAgICBpZiAoIVB5Qnl0ZUFycmF5X0NoZWNrKG9iaikgJiYgIVB5Qnl0ZXNfQ2hlY2sob2JqKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuIG9ubHkgam9pbiBhbiBpdGVyYWJsZSBvZiBieXRlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIihpdGVtICVsZCBoYXMgdHlwZSAnJS4xMDBzJykiLAotICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCAlbGQgaXNuJ3QgcmlnaHQgb24gV2luNjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylpLCBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAgICB0b3RhbHNpemUgKz0gbXlzaXplOwotICAgICAgICB0b3RhbHNpemUgKz0gUHlfU0laRShvYmopOwotICAgICAgICBpZiAodG90YWxzaXplIDwgMCkgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBBbGxvY2F0ZSB0aGUgcmVzdWx0LCBhbmQgY29weSB0aGUgYnl0ZXMgKi8KLSAgICByZXN1bHQgPSBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB0b3RhbHNpemUpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBkZXN0ID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHJlc3VsdCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBQeU9iamVjdCAqb2JqID0gaXRlbXNbaV07Ci0gICAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IFB5X1NJWkUob2JqKTsKLSAgICAgICAgY2hhciAqYnVmOwotICAgICAgICBpZiAoUHlCeXRlQXJyYXlfQ2hlY2sob2JqKSkKLSAgICAgICAgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKG9iaik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgYnVmID0gUHlCeXRlc19BU19TVFJJTkcob2JqKTsKLSAgICAgICAgaWYgKGkpIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzZWxmLT5vYl9ieXRlcywgbXlzaXplKTsKLSAgICAgICAgICAgIGRlc3QgKz0gbXlzaXplOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweShkZXN0LCBidWYsIHNpemUpOwotICAgICAgICBkZXN0ICs9IHNpemU7Ci0gICAgfQotCi0gICAgLyogRG9uZSAqLwotICAgIFB5X0RFQ1JFRihzZXEpOwotICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAvKiBFcnJvciBoYW5kbGluZyAqLwotICBlcnJvcjoKLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gc3RyaW5nbGliX2J5dGVzX2pvaW4oc2VsZiwgaXRlcmFibGUpOwogfQogCiBQeURvY19TVFJWQVIoc3BsaXRsaW5lc19fZG9jX18sCkBAIC0yNzQ4LDYgKzI3MDIsNyBAQAogewogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKKyAgICBjaGFyICpidWY7CiAKICAgICBkaWN0ID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9fX2RpY3RfXyk7CiAgICAgaWYgKGRpY3QgPT0gTlVMTCkgewpAQCAtMjc1NiwxOSArMjcxMSwyMCBAQAogICAgICAgICBQeV9JTkNSRUYoZGljdCk7CiAgICAgfQogCisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIGlmIChwcm90byA8IDMpIHsKICAgICAgICAgLyogdXNlIHN0ciBiYXNlZCByZWR1Y3Rpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIueCAqLwogICAgICAgICBQeU9iamVjdCAqbGF0aW4xOwotICAgICAgICBpZiAoc2VsZi0+b2JfYnl0ZXMpCi0gICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHNlbGYtPm9iX2J5dGVzLCBQeV9TSVpFKHNlbGYpLCBOVUxMKTsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikpCisgICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKGJ1ZiwgUHlfU0laRShzZWxmKSwgTlVMTCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxhdGluMSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKE5zKU4pIiwgUHlfVFlQRShzZWxmKSwgbGF0aW4xLCAibGF0aW4tMSIsIGRpY3QpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogdXNlIG1vcmUgZWZmaWNpZW50IGJ5dGUgYmFzZWQgcmVkdWN0aW9uICovCi0gICAgICAgIGlmIChzZWxmLT5vYl9ieXRlcykgewotICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKHkjKU4pIiwgUHlfVFlQRShzZWxmKSwgc2VsZi0+b2JfYnl0ZXMsIFB5X1NJWkUoc2VsZiksIGRpY3QpOworICAgICAgICBpZiAoUHlfU0laRShzZWxmKSkgeworICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKHkjKU4pIiwgUHlfVFlQRShzZWxmKSwgYnVmLCBQeV9TSVpFKHNlbGYpLCBkaWN0KTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTygpTikiLCBQeV9UWVBFKHNlbGYpLCBkaWN0KTsKQEAgLTMwMDAsNyArMjk1Niw3IEBACiAKICAgICBpZiAoaXQtPml0X2luZGV4IDwgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VxKSkgewogICAgICAgICBpdGVtID0gUHlMb25nX0Zyb21Mb25nKAotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpc2VxLT5vYl9ieXRlc1tpdC0+aXRfaW5kZXhdKTsKKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKVB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZXEpW2l0LT5pdF9pbmRleF0pOwogICAgICAgICBpZiAoaXRlbSAhPSBOVUxMKQogICAgICAgICAgICAgKytpdC0+aXRfaW5kZXg7CiAgICAgICAgIHJldHVybiBpdGVtOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMgYi9PYmplY3RzL2J5dGVzX21ldGhvZHMuYwppbmRleCBlZjNjMmY3Li40ZTgxMDdiIDEwMDY0NAotLS0gYS9PYmplY3RzL2J5dGVzX21ldGhvZHMuYworKysgYi9PYmplY3RzL2J5dGVzX21ldGhvZHMuYwpAQCAtMTAsOSArMTAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNzcGFjZShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU1NQQUNFKCpwKSkKQEAgLTQwLDkgKzQwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzYWxwaGEoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNBTFBIQSgqcCkpCkBAIC03MCw5ICs3MCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2FsbnVtKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTQUxOVU0oKnApKQpAQCAtMTAwLDkgKzEwMCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2RpZ2l0KGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTRElHSVQoKnApKQpAQCAtMTMwLDkgKzEzMCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2xvd2VyKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAgICAgaW50IGNhc2VkOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwpAQCAtMTY0LDkgKzE2NCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc3VwcGVyKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAgICAgaW50IGNhc2VkOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwpAQCAtMjAwLDkgKzIwMCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc3RpdGxlKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAgICAgaW50IGNhc2VkLCBwcmV2aW91c19pc19jYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgIGNhc2VkID0gMDsKICAgICBwcmV2aW91c19pc19jYXNlZCA9IDA7CiAgICAgZm9yICg7IHAgPCBlOyBwKyspIHsKLSAgICAgICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciBjaCA9ICpwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNoID0gKnA7CiAKICAgICAgICAgaWYgKFB5X0lTVVBQRVIoY2gpKSB7CiAgICAgICAgICAgICBpZiAocHJldmlvdXNfaXNfY2FzZWQpCmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVzb2JqZWN0LmMgYi9PYmplY3RzL2J5dGVzb2JqZWN0LmMKaW5kZXggNDc4OThmZS4uNTI5YzYzNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlc29iamVjdC5jCisrKyBiL09iamVjdHMvYnl0ZXNvYmplY3QuYwpAQCAtMTAsOSArMTAsMTggQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBfZ2V0YnVmZmVyKFB5T2JqZWN0ICpvYmosIFB5X2J1ZmZlciAqdmlldykKIHsKLSAgICBQeUJ1ZmZlclByb2NzICpidWZmZXIgPSBQeV9UWVBFKG9iaiktPnRwX2FzX2J1ZmZlcjsKKyAgICBQeUJ1ZmZlclByb2NzICpidWZmZXJwcm9jczsKKyAgICBpZiAoUHlCeXRlc19DaGVja0V4YWN0KG9iaikpIHsKKyAgICAgICAgLyogRmFzdCBwYXRoLCBlLmcuIGZvciAuam9pbigpIG9mIG1hbnkgYnl0ZXMgb2JqZWN0cyAqLworICAgICAgICBQeV9JTkNSRUYob2JqKTsKKyAgICAgICAgdmlldy0+b2JqID0gb2JqOworICAgICAgICB2aWV3LT5idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhvYmopOworICAgICAgICB2aWV3LT5sZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKG9iaik7CisgICAgICAgIHJldHVybiB2aWV3LT5sZW47CisgICAgfQogCi0gICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8IGJ1ZmZlci0+YmZfZ2V0YnVmZmVyID09IE5VTEwpCisgICAgYnVmZmVycHJvY3MgPSBQeV9UWVBFKG9iaiktPnRwX2FzX2J1ZmZlcjsKKyAgICBpZiAoYnVmZmVycHJvY3MgPT0gTlVMTCB8fCBidWZmZXJwcm9jcy0+YmZfZ2V0YnVmZmVyID09IE5VTEwpCiAgICAgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSSIsCkBAIC0yMCw3ICsyOSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoYnVmZmVyLT5iZl9nZXRidWZmZXIob2JqLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKKyAgICBpZiAoYnVmZmVycHJvY3MtPmJmX2dldGJ1ZmZlcihvYmosIHZpZXcsIFB5QlVGX1NJTVBMRSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIHZpZXctPmxlbjsKIH0KQEAgLTY1LDcgKzc0LDcgQEAKIFB5T2JqZWN0ICoKIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoY29uc3QgY2hhciAqc3RyLCBQeV9zc2l6ZV90IHNpemUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqb3A7CisgICAgUHlCeXRlc09iamVjdCAqb3A7CiAgICAgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICJOZWdhdGl2ZSBzaXplIHBhc3NlZCB0byBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplIik7CkBAIC0xMTcsOCArMTI2LDggQEAKIFB5T2JqZWN0ICoKIFB5Qnl0ZXNfRnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHNpemU7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqb3A7CisgICAgc2l6ZV90IHNpemU7CisgICAgUHlCeXRlc09iamVjdCAqb3A7CiAKICAgICBhc3NlcnQoc3RyICE9IE5VTEwpOwogICAgIHNpemUgPSBzdHJsZW4oc3RyKTsKQEAgLTUwNCw3ICs1MTMsNyBAQAogLyogb2JqZWN0IGFwaSAqLwogCiBQeV9zc2l6ZV90Ci1QeUJ5dGVzX1NpemUocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlCeXRlc19TaXplKFB5T2JqZWN0ICpvcCkKIHsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MTUsNyArNTI0LDcgQEAKIH0KIAogY2hhciAqCi1QeUJ5dGVzX0FzU3RyaW5nKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5Qnl0ZXNfQXNTdHJpbmcoUHlPYmplY3QgKm9wKQogewogICAgIGlmICghUHlCeXRlc19DaGVjayhvcCkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTUyNiw5ICs1MzUsOSBAQAogfQogCiBpbnQKLVB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY2hhciAqKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCAqbGVuKQorUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpsZW4pCiB7CiAgICAgaWYgKHMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTU2MCw2ICs1NjksNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvam9pbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9wYXJ0aXRpb24uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY3R5cGUuaCIKQEAgLTU2OSw3ICs1NzksNyBAQAogUHlPYmplY3QgKgogUHlCeXRlc19SZXByKFB5T2JqZWN0ICpvYmosIGludCBzbWFydHF1b3RlcykKIHsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0KiBvcCA9IChQeUJ5dGVzT2JqZWN0Kikgb2JqOworICAgIFB5Qnl0ZXNPYmplY3QqIG9wID0gKFB5Qnl0ZXNPYmplY3QqKSBvYmo7CiAgICAgUHlfc3NpemVfdCBpLCBsZW5ndGggPSBQeV9TSVpFKG9wKTsKICAgICBzaXplX3QgbmV3c2l6ZSwgc3F1b3RlcywgZHF1b3RlczsKICAgICBQeU9iamVjdCAqdjsKQEAgLTcwOCwxMiArNzE4LDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yZXBlYXQocmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBuKQorYnl0ZXNfcmVwZWF0KFB5Qnl0ZXNPYmplY3QgKmEsIFB5X3NzaXplX3QgbikKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpvcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBqOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeUJ5dGVzT2JqZWN0ICpvcDsKICAgICBzaXplX3QgbmJ5dGVzOwogICAgIGlmIChuIDwgMCkKICAgICAgICAgbiA9IDA7CkBAIC03ODMsNyArNzkzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2l0ZW0oUHlCeXRlc09iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpKQorYnl0ZXNfaXRlbShQeUJ5dGVzT2JqZWN0ICphLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShhKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImluZGV4IG91dCBvZiByYW5nZSIpOwpAQCAtMTExMiw5NCArMTEyMiw5IEBACiBFeGFtcGxlOiBiJy4nLmpvaW4oW2InYWInLCBiJ3BxJywgYidycyddKSAtPiBiJ2FiLnBxLnJzJy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2pvaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvcmlnKQorYnl0ZXNfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIGNoYXIgKnNlcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpOwotICAgIGNvbnN0IFB5X3NzaXplX3Qgc2VwbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKTsKLSAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLSAgICBjaGFyICpwOwotICAgIFB5X3NzaXplX3Qgc2VxbGVuID0gMDsKLSAgICBzaXplX3Qgc3ogPSAwOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqc2VxLCAqaXRlbTsKLQotICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChvcmlnLCAiIik7Ci0gICAgaWYgKHNlcSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfU2l6ZShzZXEpOwotICAgIGlmIChzZXFsZW4gPT0gMCkgewotICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygiIik7Ci0gICAgfQotICAgIGlmIChzZXFsZW4gPT0gMSkgewotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgMCk7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3QoaXRlbSkpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgcmV0dXJuIGl0ZW07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBUaGVyZSBhcmUgYXQgbGVhc3QgdHdvIHRoaW5ncyB0byBqb2luLCBvciBlbHNlIHdlIGhhdmUgYSBzdWJjbGFzcwotICAgICAqIG9mIHRoZSBidWlsdGluIHR5cGVzIGluIHRoZSBzZXF1ZW5jZS4KLSAgICAgKiBEbyBhIHByZS1wYXNzIHRvIGZpZ3VyZSBvdXQgdGhlIHRvdGFsIGFtb3VudCBvZiBzcGFjZSB3ZSdsbAotICAgICAqIG5lZWQgKHN6KSwgYW5kIHNlZSB3aGV0aGVyIGFsbCBhcmd1bWVudCBhcmUgYnl0ZXMuCi0gICAgICovCi0gICAgLyogWFhYIFNob3VsZG4ndCB3ZSB1c2UgX2dldGJ1ZmZlcigpIG9uIHRoZXNlIGl0ZW1zIGluc3RlYWQ/ICovCi0gICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBvbGRfc3ogPSBzejsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGkpOwotICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soaXRlbSkgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBpdGVtICV6ZDogZXhwZWN0ZWQgYnl0ZXMsIgotICAgICAgICAgICAgICAgICAgICAgICAgICIgJS44MHMgZm91bmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGksIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBzeiArPSBQeV9TSVpFKGl0ZW0pOwotICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgICAgc3ogKz0gc2VwbGVuOwotICAgICAgICBpZiAoc3ogPCBvbGRfc3ogfHwgc3ogPiBQWV9TU0laRV9UX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgImpvaW4oKSByZXN1bHQgaXMgdG9vIGxvbmcgZm9yIGJ5dGVzIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQWxsb2NhdGUgcmVzdWx0IHNwYWNlLiAqLwotICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIqKU5VTEwsIHN6KTsKLSAgICBpZiAocmVzID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIENhdGVuYXRlIGV2ZXJ5dGhpbmcuICovCi0gICAgLyogSSdtIG5vdCB3b3JyaWVkIGFib3V0IGEgUHlCeXRlQXJyYXkgaXRlbSBncm93aW5nIGJlY2F1c2UgdGhlcmUncwotICAgICAgIG5vd2hlcmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB3ZSByZWxlYXNlIHRoZSBHSUwuICovCi0gICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7Ci0gICAgICAgIHNpemVfdCBuOwotICAgICAgICBjaGFyICpxOwotICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIHNlcCwgc2VwbGVuKTsKLSAgICAgICAgICAgIHAgKz0gc2VwbGVuOwotICAgICAgICB9Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKLSAgICAgICAgbiA9IFB5X1NJWkUoaXRlbSk7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKGl0ZW0pKQotICAgICAgICAgICAgcSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBxID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBQeV9NRU1DUFkocCwgcSwgbik7Ci0gICAgICAgIHAgKz0gbjsKLSAgICB9Ci0KLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiBzdHJpbmdsaWJfYnl0ZXNfam9pbihzZWxmLCBpdGVyYWJsZSk7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTE0MjIsNyArMTM0Nyw3IEBACiB7CiAgICAgUHlPYmplY3QgKnNlcCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgKGNoYXIgKilzdHJpcGZvcm1hdFtzdHJpcHR5cGVdLCAmc2VwKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHNlcCAhPSBOVUxMICYmIHNlcCAhPSBQeV9Ob25lKSB7CkBAIC0xNTM2LDkgKzE0NjEsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzX3RyYW5zbGF0ZShQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBjaGFyICppbnB1dCwgKm91dHB1dDsKKyAgICBjaGFyICppbnB1dCwgKm91dHB1dDsKICAgICBjb25zdCBjaGFyICp0YWJsZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGMsIGNoYW5nZWQgPSAwOworICAgIFB5X3NzaXplX3QgaSwgYywgY2hhbmdlZCA9IDA7CiAgICAgUHlPYmplY3QgKmlucHV0X29iaiA9IChQeU9iamVjdCopc2VsZjsKICAgICBjb25zdCBjaGFyICpvdXRwdXRfc3RhcnQsICpkZWxfdGFibGU9TlVMTDsKICAgICBQeV9zc2l6ZV90IGlubGVuLCB0YWJsZW4sIGRlbGxlbiA9IDA7CkBAIC0yMzE2LDggKzIyNDEsNiBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmRlY29kZSIsIGt3bGlzdCwgJmVuY29kaW5nLCAmZXJyb3JzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nID09IE5VTEwpCi0gICAgICAgIGVuY29kaW5nID0gUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpOwogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qoc2VsZiwgZW5jb2RpbmcsIGVycm9ycyk7CiB9CiAKQEAgLTI2NzksNyArMjYwMiw3IEBACiAgICAgfQogCiAgICAgLyogRm9yIGl0ZXJhdG9yIHZlcnNpb24sIGNyZWF0ZSBhIHN0cmluZyBvYmplY3QgYW5kIHJlc2l6ZSBhcyBuZWVkZWQgKi8KLSAgICBzaXplID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoeCwgNjQpOworICAgIHNpemUgPSBQeU9iamVjdF9MZW5ndGhIaW50KHgsIDY0KTsKICAgICBpZiAoc2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBBbGxvY2F0ZSBhbiBleHRyYSBieXRlIHRvIHByZXZlbnQgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgpIGZyb20KQEAgLTI3MzcsOSArMjY2MCw4IEBACiAgICAgcmV0dXJuIG5ldzsKIAogICBlcnJvcjoKLSAgICAvKiBFcnJvciBoYW5kbGluZyB3aGVuIG5ldyAhPSBOVUxMICovCiAgICAgUHlfWERFQ1JFRihpdCk7Ci0gICAgUHlfREVDUkVGKG5ldyk7CisgICAgUHlfWERFQ1JFRihuZXcpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yODI1LDkgKzI3NDcsOSBAQAogfTsKIAogdm9pZAotUHlCeXRlc19Db25jYXQocmVnaXN0ZXIgUHlPYmplY3QgKipwdiwgcmVnaXN0ZXIgUHlPYmplY3QgKncpCitQeUJ5dGVzX0NvbmNhdChQeU9iamVjdCAqKnB2LCBQeU9iamVjdCAqdykKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBhc3NlcnQocHYgIT0gTlVMTCk7CiAgICAgaWYgKCpwdiA9PSBOVUxMKQogICAgICAgICByZXR1cm47CkBAIC0yODQxLDcgKzI3NjMsNyBAQAogfQogCiB2b2lkCi1QeUJ5dGVzX0NvbmNhdEFuZERlbChyZWdpc3RlciBQeU9iamVjdCAqKnB2LCByZWdpc3RlciBQeU9iamVjdCAqdykKK1B5Qnl0ZXNfQ29uY2F0QW5kRGVsKFB5T2JqZWN0ICoqcHYsIFB5T2JqZWN0ICp3KQogewogICAgIFB5Qnl0ZXNfQ29uY2F0KHB2LCB3KTsKICAgICBQeV9YREVDUkVGKHcpOwpAQCAtMjg2NSw4ICsyNzg3LDggQEAKIGludAogX1B5Qnl0ZXNfUmVzaXplKFB5T2JqZWN0ICoqcHYsIFB5X3NzaXplX3QgbmV3c2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpzdjsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeUJ5dGVzT2JqZWN0ICpzdjsKICAgICB2ID0gKnB2OwogICAgIGlmICghUHlCeXRlc19DaGVjayh2KSB8fCBQeV9SRUZDTlQodikgIT0gMSB8fCBuZXdzaXplIDwgMCkgewogICAgICAgICAqcHYgPSAwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jbGFzc29iamVjdC5jIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCmluZGV4IGNkYzliMWMuLjI3ZjdlZjQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY2xhc3NvYmplY3QuYworKysgYi9PYmplY3RzL2NsYXNzb2JqZWN0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIFB5T2JqZWN0ICoKIFB5TWV0aG9kX05ldyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlNZXRob2RPYmplY3QgKmltOworICAgIFB5TWV0aG9kT2JqZWN0ICppbTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE2NCw3ICsxNjQsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbWV0aG9kX2RlYWxsb2MocmVnaXN0ZXIgUHlNZXRob2RPYmplY3QgKmltKQorbWV0aG9kX2RlYWxsb2MoUHlNZXRob2RPYmplY3QgKmltKQogewogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGltKTsKICAgICBpZiAoaW0tPmltX3dlYWtyZWZsaXN0ICE9IE5VTEwpCkBAIC01MDksNyArNTA5LDcgQEAKIAogc3RhdGljIFB5T2JqZWN0ICoKIGluc3RhbmNlbWV0aG9kX2Rlc2NyX2dldChQeU9iamVjdCAqZGVzY3IsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICp0eXBlKSB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKmZ1bmMgPSBQeUluc3RhbmNlTWV0aG9kX0dFVF9GVU5DVElPTihkZXNjcik7CisgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUluc3RhbmNlTWV0aG9kX0dFVF9GVU5DVElPTihkZXNjcik7CiAgICAgaWYgKG9iaiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihmdW5jKTsKICAgICAgICAgcmV0dXJuIGZ1bmM7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NvZGVvYmplY3QuYyBiL09iamVjdHMvY29kZW9iamVjdC5jCmluZGV4IDk3MTNmNjEuLjM1M2Y0MTQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY29kZW9iamVjdC5jCisrKyBiL09iamVjdHMvY29kZW9iamVjdC5jCkBAIC03NCw2ICs3NCwxMSBAQAogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgLyogRW5zdXJlIHRoYXQgdGhlIGZpbGVuYW1lIGlzIGEgcmVhZHkgVW5pY29kZSBzdHJpbmcgKi8KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGZpbGVuYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgbl9jZWxsdmFycyA9IFB5VHVwbGVfR0VUX1NJWkUoY2VsbHZhcnMpOwogICAgIGludGVybl9zdHJpbmdzKG5hbWVzKTsKICAgICBpbnRlcm5fc3RyaW5ncyh2YXJuYW1lcyk7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCmluZGV4IGIwOGFhNmYuLjY0ZTdiNDQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY29tcGxleG9iamVjdC5jCisrKyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIFB5T2JqZWN0ICoKIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoUHlfY29tcGxleCBjdmFsKQogewotICAgIHJlZ2lzdGVyIFB5Q29tcGxleE9iamVjdCAqb3A7CisgICAgUHlDb21wbGV4T2JqZWN0ICpvcDsKIAogICAgIC8qIElubGluZSBQeU9iamVjdF9OZXcgKi8KICAgICBvcCA9IChQeUNvbXBsZXhPYmplY3QgKikgUHlPYmplY3RfTUFMTE9DKHNpemVvZihQeUNvbXBsZXhPYmplY3QpKTsKQEAgLTI3MSw2ICsyNzEsMTIgQEAKICAgICBpZiAoZikgewogICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmLCBOVUxMKTsKICAgICAgICAgUHlfREVDUkVGKGYpOworICAgICAgICBpZiAocmVzICE9IE5VTEwgJiYgIVB5Q29tcGxleF9DaGVjayhyZXMpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJfX2NvbXBsZXhfXyBzaG91bGQgcmV0dXJuIGEgY29tcGxleCBvYmplY3QiKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yOTYsMTIgKzMwMiw2IEBACiAgICAgbmV3b3AgPSB0cnlfY29tcGxleF9zcGVjaWFsX21ldGhvZChvcCk7CiAKICAgICBpZiAobmV3b3ApIHsKLSAgICAgICAgaWYgKCFQeUNvbXBsZXhfQ2hlY2sobmV3b3ApKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJfX2NvbXBsZXhfXyBzaG91bGQgcmV0dXJuIGEgY29tcGxleCBvYmplY3QiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdvcCk7Ci0gICAgICAgICAgICByZXR1cm4gY3Y7Ci0gICAgICAgIH0KICAgICAgICAgY3YgPSAoKFB5Q29tcGxleE9iamVjdCAqKW5ld29wKS0+Y3ZhbDsKICAgICAgICAgUHlfREVDUkVGKG5ld29wKTsKICAgICAgICAgcmV0dXJuIGN2OwpAQCAtNzA1LDcgKzcwNSw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5Q29tcGxleF9Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKZGlmZiAtLWdpdCBhL09iamVjdHMvZGVzY3JvYmplY3QuYyBiL09iamVjdHMvZGVzY3JvYmplY3QuYwppbmRleCBhYmNjMDAyLi5kNGY4MDQ4IDEwMDY0NAotLS0gYS9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICgoUHlUeXBlT2JqZWN0ICopdHlwZSktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIHR5cGUpOworICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChkZXNjci0+ZF9tZXRob2QsIHR5cGUsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTI1LDcgKzEyNSw3IEBACiAKICAgICBpZiAoZGVzY3JfY2hlY2soKFB5RGVzY3JPYmplY3QgKilkZXNjciwgb2JqLCAmcmVzKSkKICAgICAgICAgcmV0dXJuIHJlczsKLSAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgb2JqKTsKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBvYmosIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCBzZWxmKTsKKyAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBzZWxmLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBhcmdjKTsKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgc2VsZik7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgc2VsZiwgTlVMTCk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgYXJnYyk7CkBAIC0xMDA5LDcgKzEwMDksNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHdyYXBwZXJfcmljaGNvbXBhcmUoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiLCBpbnQgb3ApCiB7Ci0gICAgaW50IHJlc3VsdDsKKyAgICBQeV9pbnRwdHJfdCByZXN1bHQ7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgUHlXcmFwcGVyRGVzY3JPYmplY3QgKmFfZGVzY3IsICpiX2Rlc2NyOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL2RpY3RvYmplY3QuYyBiL09iamVjdHMvZGljdG9iamVjdC5jCmluZGV4IDdhYTVlYTguLjI0MjQxNzYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGljdG9iamVjdC5jCisrKyBiL09iamVjdHMvZGljdG9iamVjdC5jCkBAIC05NSwyMCArOTUsNiBAQAogaXQncyBVU0FCTEVfRlJBQ1RJT04gKGN1cnJlbnRseSB0d28tdGhpcmRzKSBmdWxsLgogKi8KIAotLyogU2V0IGEga2V5IGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgd3JhcHBpbmcgaXQgaW4gYQotICogdHVwbGUgYXV0b21hdGljYWxseSBzbyB0aGF0IHR1cGxlIGtleXMgYXJlIG5vdCB1bnBhY2tlZCBhcyB0aGUKLSAqIGV4Y2VwdGlvbiBhcmd1bWVudHMuICovCi1zdGF0aWMgdm9pZAotc2V0X2tleV9lcnJvcihQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICp0dXA7Ci0gICAgdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7Ci0gICAgaWYgKCF0dXApCi0gICAgICAgIHJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KLSAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7Ci0gICAgUHlfREVDUkVGKHR1cCk7Ci19Ci0KICNkZWZpbmUgUEVSVFVSQl9TSElGVCA1CiAKIC8qCkBAIC0zMDUsOSArMjkxLDkgQEAKICAqICNkZWZpbmUgVVNBQkxFX0ZSQUNUSU9OKG4pICgoKG4pID4+IDEpICsgKChuKSA+PiAyKSAtICgobikgPj4gMykpCiAqLwogCi0vKiBHUk9XVEhfUkFURS4gR3Jvd3RoIHJhdGUgdXBvbiBoaXR0aW5nIG1heGltdW0gbG9hZC4gCi0gKiBDdXJyZW50bHkgc2V0IHRvIHVzZWQqMiArIGNhcGFjaXR5LzIuIAotICogVGhpcyBtZWFucyB0aGF0IGRpY3RzIGRvdWJsZSBpbiBzaXplIHdoZW4gZ3Jvd2luZyB3aXRob3V0IGRlbGV0aW9ucywgCisvKiBHUk9XVEhfUkFURS4gR3Jvd3RoIHJhdGUgdXBvbiBoaXR0aW5nIG1heGltdW0gbG9hZC4KKyAqIEN1cnJlbnRseSBzZXQgdG8gdXNlZCoyICsgY2FwYWNpdHkvMi4KKyAqIFRoaXMgbWVhbnMgdGhhdCBkaWN0cyBkb3VibGUgaW4gc2l6ZSB3aGVuIGdyb3dpbmcgd2l0aG91dCBkZWxldGlvbnMsCiAgKiBidXQgaGF2ZSBtb3JlIGhlYWQgcm9vbSB3aGVuIHRoZSBudW1iZXIgb2YgZGVsZXRpb25zIGlzIG9uIGEgcGFyIHdpdGggdGhlCiAgKiBudW1iZXIgb2YgaW5zZXJ0aW9ucy4KICAqIFJhaXNpbmcgdGhpcyB0byB1c2VkKjQgZG91YmxlcyBtZW1vcnkgY29uc3VtcHRpb24gZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mCkBAIC0zODksNiArMzc1LDcgQEAKIG5ld19kaWN0KFB5RGljdEtleXNPYmplY3QgKmtleXMsIFB5T2JqZWN0ICoqdmFsdWVzKQogewogICAgIFB5RGljdE9iamVjdCAqbXA7CisgICAgYXNzZXJ0KGtleXMgIT0gTlVMTCk7CiAgICAgaWYgKG51bWZyZWUpIHsKICAgICAgICAgbXAgPSBmcmVlX2xpc3RbLS1udW1mcmVlXTsKICAgICAgICAgYXNzZXJ0IChtcCAhPSBOVUxMKTsKQEAgLTQzMSw3ICs0MTgsMTAgQEAKIFB5T2JqZWN0ICoKIFB5RGljdF9OZXcodm9pZCkKIHsKLSAgICByZXR1cm4gbmV3X2RpY3QobmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKSwgTlVMTCk7CisgICAgUHlEaWN0S2V5c09iamVjdCAqa2V5cyA9IG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCk7CisgICAgaWYgKGtleXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG5ld19kaWN0KGtleXMsIE5VTEwpOwogfQogCiAvKgpAQCAtNDYzLDEzICs0NTMsMTMgQEAKIGxvb2tkaWN0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2s7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IHBlcnR1cmI7CisgICAgUHlEaWN0S2V5RW50cnkgKmZyZWVzbG90OworICAgIHNpemVfdCBtYXNrOwogICAgIFB5RGljdEtleUVudHJ5ICplcDA7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOwotICAgIHJlZ2lzdGVyIGludCBjbXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIGludCBjbXA7CiAgICAgUHlPYmplY3QgKnN0YXJ0a2V5OwogCiB0b3A6CkBAIC01NTUsMTIgKzU0NSwxMiBAQAogbG9va2RpY3RfdW5pY29kZShQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7CisgICAgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXAwID0gJm1wLT5tYV9rZXlzLT5ka19lbnRyaWVzWzBdOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdG8gaGFuZGxlIG5vbi11bmljb2RlIGtleXMsCiAgICAgICAgaW5jbHVkaW5nIHN1YmNsYXNzZXMgb2Ygc3RyOyBlLmcuLCBvbmUgcmVhc29uIHRvIHN1YmNsYXNzCkBAIC02MjAsMTEgKzYxMCwxMSBAQAogbG9va2RpY3RfdW5pY29kZV9ub2R1bW15KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOwogICAgIFB5RGljdEtleUVudHJ5ICplcDAgPSAmbXAtPm1hX2tleXMtPmRrX2VudHJpZXNbMF07Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKIAogICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgbm9uLXVuaWNvZGUga2V5cywKICAgICAgICBpbmNsdWRpbmcgc3ViY2xhc3NlcyBvZiBzdHI7IGUuZy4sIG9uZSByZWFzb24gdG8gc3ViY2xhc3MKQEAgLTY2NSwxMSArNjU1LDExIEBACiBsb29rZGljdF9zcGxpdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOwogICAgIFB5RGljdEtleUVudHJ5ICplcDAgPSAmbXAtPm1hX2tleXMtPmRrX2VudHJpZXNbMF07Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSkgewogICAgICAgICBlcCA9IGxvb2tkaWN0KG1wLCBrZXksIGhhc2gsIHZhbHVlX2FkZHIpOwpAQCAtMTIzNyw3ICsxMjI3LDcgQEAKICAgICBpZiAoZXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICgqdmFsdWVfYWRkciA9PSBOVUxMKSB7Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgb2xkX3ZhbHVlID0gKnZhbHVlX2FkZHI7CkBAIC0xMzkxLDcgKzEzODEsNyBAQAogICAgICAgICB9CiAgICAgICAgIERLX0RFQ1JFRihrZXlzKTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZSBpZiAoa2V5cyAhPSBOVUxMKSB7CiAgICAgICAgIGFzc2VydChrZXlzLT5ka19yZWZjbnQgPT0gMSk7CiAgICAgICAgIERLX0RFQ1JFRihrZXlzKTsKICAgICB9CkBAIC0xNDM5LDYgKzE0MjksOSBAQAogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgICAgICBzID0gUHlPYmplY3RfUmVwcihrZXkpOwogICAgICAgICBQeVVuaWNvZGVfQXBwZW5kKCZzLCBjb2xvbik7CisgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIERvbmU7CisKICAgICAgICAgUHlVbmljb2RlX0FwcGVuZEFuZERlbCgmcywgUHlPYmplY3RfUmVwcih2YWx1ZSkpOwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKQEAgLTE0OTEsNyArMTQ4NCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X3N1YnNjcmlwdChQeURpY3RPYmplY3QgKm1wLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQorZGljdF9zdWJzY3JpcHQoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBQeU9iamVjdCAqdjsKICAgICBQeV9oYXNoX3QgaGFzaDsKQEAgLTE1MjMsNyArMTUxNiw3IEBACiAgICAgICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlCkBAIC0xNTQ3LDEwICsxNTQwLDEwIEBACiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9rZXlzKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2tleXMoUHlEaWN0T2JqZWN0ICptcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGo7CisgICAgUHlPYmplY3QgKnY7CisgICAgUHlfc3NpemVfdCBpLCBqOwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKICAgICBQeV9zc2l6ZV90IHNpemUsIG4sIG9mZnNldDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKQEAgLTE1OTEsMTAgKzE1ODQsMTAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfdmFsdWVzKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X3ZhbHVlcyhQeURpY3RPYmplY3QgKm1wKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgajsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeV9zc2l6ZV90IGksIGo7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuLCBvZmZzZXQ7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKQEAgLTE2MzMsMTAgKzE2MjYsMTAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfaXRlbXMocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfaXRlbXMoUHlEaWN0T2JqZWN0ICptcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGosIG47CisgICAgUHlPYmplY3QgKnY7CisgICAgUHlfc3NpemVfdCBpLCBqLCBuOwogICAgIFB5X3NzaXplX3Qgc2l6ZSwgb2Zmc2V0OwogICAgIFB5T2JqZWN0ICppdGVtLCAqa2V5OwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKQEAgLTE5MDgsOCArMTkwMSw4IEBACiBpbnQKIFB5RGljdF9NZXJnZShQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIsIGludCBvdmVycmlkZSkKIHsKLSAgICByZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCAqb3RoZXI7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBuOworICAgIFB5RGljdE9iamVjdCAqbXAsICpvdGhlcjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAgICAgUHlEaWN0S2V5RW50cnkgKmVudHJ5OwogCiAgICAgLyogV2UgYWNjZXB0IGZvciB0aGUgYXJndW1lbnQgZWl0aGVyIGEgY29uY3JldGUgZGljdGlvbmFyeSBvYmplY3QsCkBAIC0yMDA2LDcgKzE5OTksNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9jb3B5KHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2NvcHkoUHlEaWN0T2JqZWN0ICptcCkKIHsKICAgICByZXR1cm4gUHlEaWN0X0NvcHkoKFB5T2JqZWN0KiltcCk7CiB9CkBAIC0yMTE4LDEzICsyMTExLDE4IEBACiAgICAgICAgIGlmIChhdmFsICE9IE5VTEwpIHsKICAgICAgICAgICAgIGludCBjbXA7CiAgICAgICAgICAgICBQeU9iamVjdCAqYnZhbDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqdmFkZHI7CiAgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gZXAtPm1lX2tleTsKICAgICAgICAgICAgIC8qIHRlbXBvcmFyaWx5IGJ1bXAgYXZhbCdzIHJlZmNvdW50IHRvIGVuc3VyZSBpdCBzdGF5cwogICAgICAgICAgICAgICAgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoIGl0ICovCiAgICAgICAgICAgICBQeV9JTkNSRUYoYXZhbCk7CiAgICAgICAgICAgICAvKiBkaXR0byBmb3Iga2V5ICovCiAgICAgICAgICAgICBQeV9JTkNSRUYoa2V5KTsKLSAgICAgICAgICAgIGJ2YWwgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcigoUHlPYmplY3QgKiliLCBrZXkpOworICAgICAgICAgICAgLyogcmV1c2UgdGhlIGtub3duIGhhc2ggdmFsdWUgKi8KKyAgICAgICAgICAgIGlmICgoYi0+bWFfa2V5cy0+ZGtfbG9va3VwKShiLCBrZXksIGVwLT5tZV9oYXNoLCAmdmFkZHIpID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnZhbCA9IE5VTEw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnZhbCA9ICp2YWRkcjsKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICAgICAgaWYgKGJ2YWwgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhdmFsKTsKQEAgLTIxNjIsOSArMjE2MCwzMSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKKy8qW2NsaW5pY10KK21vZHVsZSBkaWN0CisKK0Bjb2V4aXN0CitkaWN0Ll9fY29udGFpbnNfXworCisgIGtleTogb2JqZWN0CisgIC8KKworVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlIgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoZGljdF9fX2NvbnRhaW5zX19fX2RvY19fLAorIlRydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZVwiXG4iCisiXG4iCisiZGljdC5fX2NvbnRhaW5zX18oa2V5KSIpOworCisjZGVmaW5lIERJQ1RfX19DT05UQUlOU19fX01FVEhPRERFRiAgICBcCisgICAgeyJfX2NvbnRhaW5zX18iLCAoUHlDRnVuY3Rpb24pZGljdF9fX2NvbnRhaW5zX18sIE1FVEhfT3xNRVRIX0NPRVhJU1QsIGRpY3RfX19jb250YWluc19fX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2NvbnRhaW5zKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpCitkaWN0X19fY29udGFpbnNfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSkKKy8qW2NsaW5pYyBjaGVja3N1bTogNjFjNWM4MDJlYTFkMzU2OTlhMWE3NTRmMWYzNTM4ZWE5YjI1OWNmNF0qLwogeworICAgIHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAgPSAoUHlEaWN0T2JqZWN0ICopc2VsZjsKICAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9hZGRyOwpAQCAtMjE4Miw3ICsyMjAyLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfZ2V0KHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQorZGljdF9nZXQoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKICAgICBQeU9iamVjdCAqZmFpbG9iaiA9IFB5X05vbmU7CkBAIC0yMjEwLDE5ICsyMjMwLDE5IEBACiAgICAgcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfc2V0ZGVmYXVsdChyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKK1B5T2JqZWN0ICoKK1B5RGljdF9TZXREZWZhdWx0KFB5T2JqZWN0ICpkLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdG9iaikKIHsKLSAgICBQeU9iamVjdCAqa2V5OwotICAgIFB5T2JqZWN0ICpmYWlsb2JqID0gUHlfTm9uZTsKKyAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKWQ7CiAgICAgUHlPYmplY3QgKnZhbCA9IE5VTEw7CiAgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogICAgIFB5T2JqZWN0ICoqdmFsdWVfYWRkcjsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNldGRlZmF1bHQiLCAxLCAyLCAma2V5LCAmZmFpbG9iaikpCisgICAgaWYgKCFQeURpY3RfQ2hlY2soZCkpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwotCisgICAgfQogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fAogICAgICAgICAoaGFzaCA9ICgoUHlBU0NJSU9iamVjdCAqKSBrZXkpLT5oYXNoKSA9PSAtMSkgewogICAgICAgICBoYXNoID0gUHlPYmplY3RfSGFzaChrZXkpOwpAQCAtMjI0MCwyMyArMjI2MCwzNSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZXAgPSBmaW5kX2VtcHR5X3Nsb3QobXAsIGtleSwgaGFzaCwgJnZhbHVlX2FkZHIpOwogICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRihmYWlsb2JqKTsKKyAgICAgICAgUHlfSU5DUkVGKGRlZmF1bHRvYmopOwogICAgICAgICBQeV9JTkNSRUYoa2V5KTsKLSAgICAgICAgTUFJTlRBSU5fVFJBQ0tJTkcobXAsIGtleSwgZmFpbG9iaik7CisgICAgICAgIE1BSU5UQUlOX1RSQUNLSU5HKG1wLCBrZXksIGRlZmF1bHRvYmopOwogICAgICAgICBlcC0+bWVfa2V5ID0ga2V5OwogICAgICAgICBlcC0+bWVfaGFzaCA9IGhhc2g7Ci0gICAgICAgICp2YWx1ZV9hZGRyID0gZmFpbG9iajsKLSAgICAgICAgdmFsID0gZmFpbG9iajsKKyAgICAgICAgKnZhbHVlX2FkZHIgPSBkZWZhdWx0b2JqOworICAgICAgICB2YWwgPSBkZWZhdWx0b2JqOwogICAgICAgICBtcC0+bWFfa2V5cy0+ZGtfdXNhYmxlLS07CiAgICAgICAgIG1wLT5tYV91c2VkKys7CiAgICAgfQotICAgIFB5X0lOQ1JFRih2YWwpOwogICAgIHJldHVybiB2YWw7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0X3NldGRlZmF1bHQoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmtleSwgKnZhbDsKKyAgICBQeU9iamVjdCAqZGVmYXVsdG9iaiA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZXRkZWZhdWx0IiwgMSwgMiwgJmtleSwgJmRlZmF1bHRvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHZhbCA9IFB5RGljdF9TZXREZWZhdWx0KChQeU9iamVjdCAqKW1wLCBrZXksIGRlZmF1bHRvYmopOworICAgIFB5X1hJTkNSRUYodmFsKTsKKyAgICByZXR1cm4gdmFsOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9jbGVhcihyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9jbGVhcihQeURpY3RPYmplY3QgKm1wKQogewogICAgIFB5RGljdF9DbGVhcigoUHlPYmplY3QgKiltcCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0yMjc4LDcgKzIzMTAsNyBAQAogICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmx0KTsKICAgICAgICAgICAgIHJldHVybiBkZWZsdDsKICAgICAgICAgfQotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CkBAIC0yMjk2LDcgKzIzMjgsNyBAQAogICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmx0KTsKICAgICAgICAgICAgIHJldHVybiBkZWZsdDsKICAgICAgICAgfQotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgKnZhbHVlX2FkZHIgPSBOVUxMOwpAQCAtMjQzNyw5ICsyNDY5LDYgQEAKICAgICByZXR1cm4gc2l6ZW9mKFB5RGljdEtleXNPYmplY3QpICsgKERLX1NJWkUoa2V5cyktMSkgKiBzaXplb2YoUHlEaWN0S2V5RW50cnkpOwogfQogCi1QeURvY19TVFJWQVIoY29udGFpbnNfX2RvY19fLAotIkQuX19jb250YWluc19fKGspIC0+IFRydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZSIpOwotCiBQeURvY19TVFJWQVIoZ2V0aXRlbV9fZG9jX18sICJ4Ll9fZ2V0aXRlbV9fKHkpIDw9PT4geFt5XSIpOwogCiBQeURvY19TVFJWQVIoc2l6ZW9mX19kb2NfXywKQEAgLTI0NjAsMTAgKzI0ODksMTAgQEAKIDItdHVwbGU7IGJ1dCByYWlzZSBLZXlFcnJvciBpZiBEIGlzIGVtcHR5LiIpOwogCiBQeURvY19TVFJWQVIodXBkYXRlX19kb2NfXywKLSJELnVwZGF0ZShbRSwgXSoqRikgLT4gTm9uZS4gIFVwZGF0ZSBEIGZyb20gZGljdC9pdGVyYWJsZSBFIGFuZCBGLlxuIgotIklmIEUgcHJlc2VudCBhbmQgaGFzIGEgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgayBpbiBFOiBEW2tdID0gRVtrXVxuXAotSWYgRSBwcmVzZW50IGFuZCBsYWNrcyAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciAoaywgdikgaW4gRTogRFtrXSA9IHZcblwKLUluIGVpdGhlciBjYXNlLCB0aGlzIGlzIGZvbGxvd2VkIGJ5OiBmb3IgayBpbiBGOiBEW2tdID0gRltrXSIpOworIkQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBkaWN0L2l0ZXJhYmxlIEUgYW5kIEYuXG5cCitJZiBFIGlzIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCB0aGVuIGRvZXM6ICBmb3IgayBpbiBFOiBEW2tdID0gRVtrXVxuXAorSWYgRSBpcyBwcmVzZW50IGFuZCBsYWNrcyBhIC5rZXlzKCkgbWV0aG9kLCB0aGVuIGRvZXM6ICBmb3IgaywgdiBpbiBFOiBEW2tdID0gdlxuXAorSW4gZWl0aGVyIGNhc2UsIHRoaXMgaXMgZm9sbG93ZWQgYnk6IGZvciBrIGluIEY6ICBEW2tdID0gRltrXSIpOwogCiBQeURvY19TVFJWQVIoZnJvbWtleXNfX2RvY19fLAogImRpY3QuZnJvbWtleXMoU1ssdl0pIC0+IE5ldyBkaWN0IHdpdGgga2V5cyBmcm9tIFMgYW5kIHZhbHVlcyBlcXVhbCB0byB2LlxuXApAQCAtMjQ4OCw4ICsyNTE3LDcgQEAKICAgICAgICAgICAgICAiRC52YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtYXBwX21ldGhvZHNbXSA9IHsKLSAgICB7Il9fY29udGFpbnNfXyIsKFB5Q0Z1bmN0aW9uKWRpY3RfY29udGFpbnMsICAgICBNRVRIX08gfCBNRVRIX0NPRVhJU1QsCi0gICAgIGNvbnRhaW5zX19kb2NfX30sCisgICAgRElDVF9fX0NPTlRBSU5TX19fTUVUSE9EREVGCiAgICAgeyJfX2dldGl0ZW1fXyIsIChQeUNGdW5jdGlvbilkaWN0X3N1YnNjcmlwdCwgICAgICAgIE1FVEhfTyB8IE1FVEhfQ09FWElTVCwKICAgICAgZ2V0aXRlbV9fZG9jX199LAogICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3Rfc2l6ZW9mLCAgICAgICBNRVRIX05PQVJHUywKQEAgLTI1NjgsMjIgKzI1OTYsMjMgQEAKIGRpY3RfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T2JqZWN0ICpzZWxmOworICAgIFB5RGljdE9iamVjdCAqZDsKIAogICAgIGFzc2VydCh0eXBlICE9IE5VTEwgJiYgdHlwZS0+dHBfYWxsb2MgIT0gTlVMTCk7CiAgICAgc2VsZiA9IHR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwotICAgIGlmIChzZWxmICE9IE5VTEwpIHsKLSAgICAgICAgUHlEaWN0T2JqZWN0ICpkID0gKFB5RGljdE9iamVjdCAqKXNlbGY7Ci0gICAgICAgIGQtPm1hX2tleXMgPSBuZXdfa2V5c19vYmplY3QoUHlEaWN0X01JTlNJWkVfQ09NQklORUQpOwotICAgICAgICAvKiBYWFggLSBTaG91bGQgd2UgcmFpc2UgYSBuby1tZW1vcnkgZXJyb3I/ICovCi0gICAgICAgIGlmIChkLT5tYV9rZXlzID09IE5VTEwpIHsKLSAgICAgICAgICAgIERLX0lOQ1JFRihQeV9FTVBUWV9LRVlTKTsKLSAgICAgICAgICAgIGQtPm1hX2tleXMgPSBQeV9FTVBUWV9LRVlTOwotICAgICAgICAgICAgZC0+bWFfdmFsdWVzID0gZW1wdHlfdmFsdWVzOwotICAgICAgICB9Ci0gICAgICAgIGQtPm1hX3VzZWQgPSAwOwotICAgICAgICAvKiBUaGUgb2JqZWN0IGhhcyBiZWVuIGltcGxpY2l0bHkgdHJhY2tlZCBieSB0cF9hbGxvYyAqLwotICAgICAgICBpZiAodHlwZSA9PSAmUHlEaWN0X1R5cGUpCi0gICAgICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhkKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkID0gKFB5RGljdE9iamVjdCAqKXNlbGY7CisKKyAgICAvKiBUaGUgb2JqZWN0IGhhcyBiZWVuIGltcGxpY2l0bHkgdHJhY2tlZCBieSB0cF9hbGxvYyAqLworICAgIGlmICh0eXBlID09ICZQeURpY3RfVHlwZSkKKyAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soZCk7CisKKyAgICBkLT5tYV91c2VkID0gMDsKKyAgICBkLT5tYV9rZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKKyAgICBpZiAoZC0+bWFfa2V5cyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiBzZWxmOwogfQpAQCAtMjY1OSw4ICsyNjg4LDEwIEBACiB7CiAgICAgUHlPYmplY3QgKmt2OwogICAgIGt2ID0gX1B5VW5pY29kZV9Gcm9tSWQoa2V5KTsgLyogYm9ycm93ZWQgKi8KLSAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICBpZiAoa3YgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIFB5RGljdF9HZXRJdGVtKGRwLCBrdik7CiB9CiAKQEAgLTI2NzEsOCArMjcwMiwxMCBAQAogewogICAgIFB5T2JqZWN0ICprdiwgKnJ2OwogICAgIGt2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoa2V5KTsKLSAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICBpZiAoa3YgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcnYgPSBQeURpY3RfR2V0SXRlbSh2LCBrdik7CiAgICAgUHlfREVDUkVGKGt2KTsKICAgICByZXR1cm4gcnY7CkBAIC0yNzk1LDggKzI4MjgsOCBAQAogc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlcl9pdGVybmV4dGtleShkaWN0aXRlcm9iamVjdCAqZGkpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKLSAgICByZWdpc3RlciBQeURpY3RLZXlzT2JqZWN0ICprOworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5RGljdEtleXNPYmplY3QgKms7CiAgICAgUHlEaWN0T2JqZWN0ICpkID0gZGktPmRpX2RpY3Q7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKQEAgLTI4NzgsNyArMjkxMSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKmRpY3RpdGVyX2l0ZXJuZXh0dmFsdWUoZGljdGl0ZXJvYmplY3QgKmRpKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKKyAgICBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKICAgICBQeURpY3RPYmplY3QgKmQgPSBkaS0+ZGlfZGljdDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMjk1OSw3ICsyOTkyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqZGljdGl0ZXJfaXRlcm5leHRpdGVtKGRpY3RpdGVyb2JqZWN0ICpkaSkKIHsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpyZXN1bHQgPSBkaS0+ZGlfcmVzdWx0OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwogICAgIFB5RGljdE9iamVjdCAqZCA9IGRpLT5kaV9kaWN0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IDZiMDQ3MDAuLmRlNWQ3NDYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC0xMjEsMTEgKzEyMSwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIEJhc2VFeGNlcHRpb25fcmVwcihQeUJhc2VFeGNlcHRpb25PYmplY3QgKnNlbGYpCiB7Ci0gICAgY2hhciAqbmFtZTsKLSAgICBjaGFyICpkb3Q7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBjb25zdCBjaGFyICpkb3Q7CiAKLSAgICBuYW1lID0gKGNoYXIgKilQeV9UWVBFKHNlbGYpLT50cF9uYW1lOwotICAgIGRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKyAgICBuYW1lID0gUHlfVFlQRShzZWxmKS0+dHBfbmFtZTsKKyAgICBkb3QgPSAoY29uc3QgY2hhciAqKSBzdHJyY2hyKG5hbWUsICcuJyk7CiAgICAgaWYgKGRvdCAhPSBOVUxMKSBuYW1lID0gZG90KzE7CiAKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzJVIiLCBuYW1lLCBzZWxmLT5hcmdzKTsKQEAgLTIzMjcsNyArMjMyNyw3IEBACiAgICAgfQogCiAjaWZkZWYgTVNfV0lORE9XUwotI2luY2x1ZGUgPFdpbnNvY2syLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KIC8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIHdlcmUgYWRkZWQgdG8gZXJybm8uaCBpbiBWUzIwMTAgYnV0IGhhdmUKICAgIHByZWZlcnJlZCBXU0EgZXF1aXZhbGVudHMuICovCiAjdW5kZWYgRUFERFJJTlVTRQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9maWxlb2JqZWN0LmMgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwppbmRleCA5OGY0MmE5Li41OTZmOTA5IDEwMDY0NAotLS0gYS9PYmplY3RzL2ZpbGVvYmplY3QuYworKysgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwpAQCAtMjYsOCArMjYsOCBAQAogLyogRXh0ZXJuYWwgQyBpbnRlcmZhY2UgKi8KIAogUHlPYmplY3QgKgotUHlGaWxlX0Zyb21GZChpbnQgZmQsIGNoYXIgKm5hbWUsIGNoYXIgKm1vZGUsIGludCBidWZmZXJpbmcsIGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICBjaGFyICplcnJvcnMsIGNoYXIgKm5ld2xpbmUsIGludCBjbG9zZWZkKQorUHlGaWxlX0Zyb21GZChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBidWZmZXJpbmcsIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGNvbnN0IGNoYXIgKm5ld2xpbmUsIGludCBjbG9zZWZkKQogewogICAgIFB5T2JqZWN0ICppbywgKnN0cmVhbTsKICAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKQEAgLTM5MCw3ICszOTAsNyBAQAogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGVycm5vID0gMDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChuID4gSU5UX01BWCkKICAgICAgICAgbiA9IElOVF9NQVg7CiAgICAgbiA9IHdyaXRlKHNlbGYtPmZkLCBjLCAoaW50KW4pOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCmluZGV4IGEwOGE4NTIuLjk3NzEwNjMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmxvYXRvYmplY3QuYworKysgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKQEAgLTksMTEgKzksNiBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZmxvYXQuaD4KIAotI3VuZGVmIE1BWAotI3VuZGVmIE1JTgotI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKLSNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0KIAogLyogU3BlY2lhbCBmcmVlIGxpc3QKICAgIGZyZWVfbGlzdCBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBhdmFpbGFibGUgUHlGbG9hdE9iamVjdHMsIGxpbmtlZApAQCAtMTE0LDcgKzEwOSw3IEBACiBQeU9iamVjdCAqCiBQeUZsb2F0X0Zyb21Eb3VibGUoZG91YmxlIGZ2YWwpCiB7Ci0gICAgcmVnaXN0ZXIgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CisgICAgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CiAgICAgaWYgKG9wICE9IE5VTEwpIHsKICAgICAgICAgZnJlZV9saXN0ID0gKFB5RmxvYXRPYmplY3QgKikgUHlfVFlQRShvcCk7CiAgICAgICAgIG51bWZyZWUtLTsKQEAgLTI0Niw3ICsyNDEsNyBAQAogc3RhdGljIGludAogY29udmVydF90b19kb3VibGUoUHlPYmplY3QgKip2LCBkb3VibGUgKmRibCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqID0gKnY7CisgICAgUHlPYmplY3QgKm9iaiA9ICp2OwogCiAgICAgaWYgKFB5TG9uZ19DaGVjayhvYmopKSB7CiAgICAgICAgICpkYmwgPSBQeUxvbmdfQXNEb3VibGUob2JqKTsKQEAgLTExMzEsNyArMTEyNiw3IEBACiAgICAgfQogCiAgICAgbSA9IGZyZXhwKGZhYnMoeCksICZlKTsKLSAgICBzaGlmdCA9IDEgLSBNQVgoREJMX01JTl9FWFAgLSBlLCAwKTsKKyAgICBzaGlmdCA9IDEgLSBQeV9NQVgoREJMX01JTl9FWFAgLSBlLCAwKTsKICAgICBtID0gbGRleHAobSwgc2hpZnQpOwogICAgIGUgLT0gc2hpZnQ7CiAKQEAgLTEyODUsOCArMTI4MCw4IEBACiAgICAgZmRpZ2l0cyA9IGNvZWZmX2VuZCAtIHNfc3RvcmU7CiAgICAgaWYgKG5kaWdpdHMgPT0gMCkKICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKLSAgICBpZiAobmRpZ2l0cyA+IE1JTihEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIExPTkdfTUlOLzIsCi0gICAgICAgICAgICAgICAgICAgICAgTE9OR19NQVgvMiArIDEgLSBEQkxfTUFYX0VYUCkvNCkKKyAgICBpZiAobmRpZ2l0cyA+IFB5X01JTihEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIExPTkdfTUlOLzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgTE9OR19NQVgvMiArIDEgLSBEQkxfTUFYX0VYUCkvNCkKICAgICAgICAgZ290byBpbnNhbmVfbGVuZ3RoX2Vycm9yOwogCiAgICAgLyogW3AgPGV4cG9uZW50Pl0gKi8KQEAgLTEzNDIsNyArMTMzNyw3IEBACiAKICAgICAvKiBsc2IgPSBleHBvbmVudCBvZiBsZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlICpyb3VuZGVkKiB2YWx1ZS4KICAgICAgICBUaGlzIGlzIHRvcF9leHAgLSBEQkxfTUFOVF9ESUcgdW5sZXNzIHJlc3VsdCBpcyBzdWJub3JtYWwuICovCi0gICAgbHNiID0gTUFYKHRvcF9leHAsIChsb25nKURCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRzsKKyAgICBsc2IgPSBQeV9NQVgodG9wX2V4cCwgKGxvbmcpREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHOwogCiAgICAgeCA9IDAuMDsKICAgICBpZiAoZXhwID49IGxzYikgewpAQCAtMTcxMSw3ICsxNzA2LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKICAgICByZXQgPSBfUHlGbG9hdF9Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTE4NTgsNyArMTg1Myw3IEBACiAgICAgZmxvYXRfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CiAKLXZvaWQKK2ludAogX1B5RmxvYXRfSW5pdCh2b2lkKQogewogICAgIC8qIFdlIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbWFjaGluZSBpcyB1c2luZyBJRUVFCkBAIC0xOTA4LDggKzE5MDMsMTEgQEAKICAgICBmbG9hdF9mb3JtYXQgPSBkZXRlY3RlZF9mbG9hdF9mb3JtYXQ7CiAKICAgICAvKiBJbml0IGZsb2F0IGluZm8gKi8KLSAgICBpZiAoRmxvYXRJbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkZsb2F0SW5mb1R5cGUsICZmbG9hdGluZm9fZGVzYyk7CisgICAgaWYgKEZsb2F0SW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmRmxvYXRJbmZvVHlwZSwgJmZsb2F0aW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDE7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jIGIvT2JqZWN0cy9mcmFtZW9iamVjdC5jCmluZGV4IDgwOGU1OTUuLjc2ZTc3YjggMTAwNjQ0Ci0tLSBhL09iamVjdHMvZnJhbWVvYmplY3QuYworKysgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKQEAgLTcsMTEgKzcsNiBAQAogI2luY2x1ZGUgIm9wY29kZS5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jdW5kZWYgTUlOCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1JTihhLCBiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQotI2RlZmluZSBNQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKLQogI2RlZmluZSBPRkYoeCkgb2Zmc2V0b2YoUHlGcmFtZU9iamVjdCwgeCkKIAogc3RhdGljIFB5TWVtYmVyRGVmIGZyYW1lX21lbWJlcmxpc3RbXSA9IHsKQEAgLTI2LDcgKzIxLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBmcmFtZV9nZXRsb2NhbHMoUHlGcmFtZU9iamVjdCAqZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmKTsKKyAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9JTkNSRUYoZi0+Zl9sb2NhbHMpOwogICAgIHJldHVybiBmLT5mX2xvY2FsczsKIH0KQEAgLTE2MCw4ICsxNTYsOCBAQAogCiAgICAgLyogV2UncmUgbm93IHJlYWR5IHRvIGxvb2sgYXQgdGhlIGJ5dGVjb2RlLiAqLwogICAgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKGYtPmZfY29kZS0+Y29fY29kZSwgKGNoYXIgKiopJmNvZGUsICZjb2RlX2xlbik7Ci0gICAgbWluX2FkZHIgPSBNSU4obmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKLSAgICBtYXhfYWRkciA9IE1BWChuZXdfbGFzdGksIGYtPmZfbGFzdGkpOworICAgIG1pbl9hZGRyID0gUHlfTUlOKG5ld19sYXN0aSwgZi0+Zl9sYXN0aSk7CisgICAgbWF4X2FkZHIgPSBQeV9NQVgobmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKIAogICAgIC8qIFlvdSBjYW4ndCBqdW1wIG9udG8gYSBsaW5lIHdpdGggYW4gJ2V4Y2VwdCcgc3RhdGVtZW50IG9uIGl0IC0KICAgICAgKiB0aGV5IGV4cGVjdCB0byBoYXZlIGFuIGV4Y2VwdGlvbiBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjaywgd2hpY2gKQEAgLTI5Myw3ICsyODksNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBtaW5fZGVsdGFfaWJsb2NrID0gTUlOKG1pbl9kZWx0YV9pYmxvY2ssIGRlbHRhX2libG9jayk7CisgICAgICAgIG1pbl9kZWx0YV9pYmxvY2sgPSBQeV9NSU4obWluX2RlbHRhX2libG9jaywgZGVsdGFfaWJsb2NrKTsKIAogICAgICAgICBpZiAob3AgPj0gSEFWRV9BUkdVTUVOVCkgewogICAgICAgICAgICAgYWRkciArPSAyOwpAQCAtNDY2LDcgKzQ2Miw3IEBACiBmcmFtZV90cmF2ZXJzZShQeUZyYW1lT2JqZWN0ICpmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKICAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqcDsKLSAgICBpbnQgaSwgc2xvdHM7CisgICAgUHlfc3NpemVfdCBpLCBzbG90czsKIAogICAgIFB5X1ZJU0lUKGYtPmZfYmFjayk7CiAgICAgUHlfVklTSVQoZi0+Zl9jb2RlKTsKQEAgLTQ5MywxMCArNDg5LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1mcmFtZV9jbGVhcihQeUZyYW1lT2JqZWN0ICpmKQorZnJhbWVfdHBfY2xlYXIoUHlGcmFtZU9iamVjdCAqZikKIHsKICAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqcCwgKipvbGR0b3A7Ci0gICAgaW50IGksIHNsb3RzOworICAgIFB5X3NzaXplX3QgaSwgc2xvdHM7CiAKICAgICAvKiBCZWZvcmUgYW55dGhpbmcgZWxzZSwgbWFrZSBzdXJlIHRoYXQgdGhpcyBmcmFtZSBpcyBjbGVhcmx5IG1hcmtlZAogICAgICAqIGFzIGJlaW5nIGRlZnVuY3QhICBFbHNlLCBlLmcuLCBhIGdlbmVyYXRvciByZWFjaGFibGUgZnJvbSB0aGlzCkBAIC01MDUsNiArNTAxLDcgQEAKICAgICAgKi8KICAgICBvbGR0b3AgPSBmLT5mX3N0YWNrdG9wOwogICAgIGYtPmZfc3RhY2t0b3AgPSBOVUxMOworICAgIGYtPmZfZXhlY3V0aW5nID0gMDsKIAogICAgIFB5X0NMRUFSKGYtPmZfZXhjX3R5cGUpOwogICAgIFB5X0NMRUFSKGYtPmZfZXhjX3ZhbHVlKTsKQEAgLTUyNSw2ICs1MjIsMjUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK2ZyYW1lX2NsZWFyKFB5RnJhbWVPYmplY3QgKmYpCit7CisgICAgaWYgKGYtPmZfZXhlY3V0aW5nKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGNsZWFyIGFuIGV4ZWN1dGluZyBmcmFtZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGYtPmZfZ2VuKSB7CisgICAgICAgIF9QeUdlbl9GaW5hbGl6ZShmLT5mX2dlbik7CisgICAgICAgIGFzc2VydChmLT5mX2dlbiA9PSBOVUxMKTsKKyAgICB9CisgICAgZnJhbWVfdHBfY2xlYXIoZik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihjbGVhcl9fZG9jX18sCisiRi5jbGVhcigpOiBjbGVhciBtb3N0IHJlZmVyZW5jZXMgaGVsZCBieSB0aGUgZnJhbWUiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKIGZyYW1lX3NpemVvZihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIFB5X3NzaXplX3QgcmVzLCBleHRyYXMsIG5jZWxscywgbmZyZWVzOwpAQCAtNTQzLDYgKzU1OSw4IEBACiAiRi5fX3NpemVvZl9fKCkgLT4gc2l6ZSBvZiBGIGluIG1lbW9yeSwgaW4gYnl0ZXMiKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIGZyYW1lX21ldGhvZHNbXSA9IHsKKyAgICB7ImNsZWFyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilmcmFtZV9jbGVhciwgICAgICAgTUVUSF9OT0FSR1MsCisgICAgIGNsZWFyX19kb2NfX30sCiAgICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pZnJhbWVfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAogICAgICBzaXplb2ZfX2RvY19ffSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KQEAgLTU3MSw3ICs1ODksNyBAQAogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywvKiB0cF9mbGFncyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylmcmFtZV90cmF2ZXJzZSwgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KWZyYW1lX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAoaW5xdWlyeSlmcmFtZV90cF9jbGVhciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KQEAgLTcxMyw2ICs3MzEsOCBAQAogICAgIGYtPmZfbGFzdGkgPSAtMTsKICAgICBmLT5mX2xpbmVubyA9IGNvZGUtPmNvX2ZpcnN0bGluZW5vOwogICAgIGYtPmZfaWJsb2NrID0gMDsKKyAgICBmLT5mX2V4ZWN1dGluZyA9IDA7CisgICAgZi0+Zl9nZW4gPSBOVUxMOwogCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKGYpOwogICAgIHJldHVybiBmOwpAQCAtNzUzLDEyICs3NzMsOSBAQAogICAgSWYgZGVyZWYgaXMgdHJ1ZSwgdGhlbiB0aGUgdmFsdWVzIGJlaW5nIGNvcGllZCBhcmUgY2VsbCB2YXJpYWJsZXMKICAgIGFuZCB0aGUgdmFsdWUgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGNlbGwgdmFyaWFibGUgYmVmb3JlIGJlaW5nIHB1dAogICAgaW4gZGljdC4KLQotICAgRXhjZXB0aW9ucyByYWlzZWQgd2hpbGUgbW9kaWZ5aW5nIHRoZSBkaWN0IGFyZSBzaWxlbnRseSBpZ25vcmVkLAotICAgYmVjYXVzZSB0aGVyZSBpcyBubyBnb29kIHdheSB0byByZXBvcnQgdGhlbS4KICAqLwogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogbWFwX3RvX2RpY3QoUHlPYmplY3QgKm1hcCwgUHlfc3NpemVfdCBubWFwLCBQeU9iamVjdCAqZGljdCwgUHlPYmplY3QgKip2YWx1ZXMsCiAgICAgICAgICAgICBpbnQgZGVyZWYpCiB7CkBAIC03NzUsMTQgKzc5MiwxOSBAQAogICAgICAgICAgICAgdmFsdWUgPSBQeUNlbGxfR0VUKHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0RlbEl0ZW0oZGljdCwga2V5KSAhPSAwKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfRGVsSXRlbShkaWN0LCBrZXkpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoUHlPYmplY3RfU2V0SXRlbShkaWN0LCBrZXksIHZhbHVlKSAhPSAwKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiAwOwogfQogCiAvKiBDb3B5IHZhbHVlcyBmcm9tIHRoZSAibG9jYWxzIiBkaWN0IGludG8gdGhlIGZhc3QgbG9jYWxzLgpAQCAtODM5LDQyICs4NjEsNDkgQEAKICAgICB9CiB9CiAKLXZvaWQKLVB5RnJhbWVfRmFzdFRvTG9jYWxzKFB5RnJhbWVPYmplY3QgKmYpCitpbnQKK1B5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKFB5RnJhbWVPYmplY3QgKmYpCiB7CiAgICAgLyogTWVyZ2UgZmFzdCBsb2NhbHMgaW50byBmLT5mX2xvY2FscyAqLwogICAgIFB5T2JqZWN0ICpsb2NhbHMsICptYXA7CiAgICAgUHlPYmplY3QgKipmYXN0OwotICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeV9zc2l6ZV90IGo7Ci0gICAgaW50IG5jZWxscywgbmZyZWV2YXJzOwotICAgIGlmIChmID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKyAgICBQeV9zc2l6ZV90IG5jZWxscywgbmZyZWV2YXJzOworCisgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBsb2NhbHMgPSBmLT5mX2xvY2FsczsKICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKICAgICAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogQ2FuJ3QgcmVwb3J0IGl0IDotKCAqLwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgY28gPSBmLT5mX2NvZGU7CiAgICAgbWFwID0gY28tPmNvX3Zhcm5hbWVzOwotICAgIGlmICghUHlUdXBsZV9DaGVjayhtYXApKQotICAgICAgICByZXR1cm47Ci0gICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG1hcCkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNvX3Zhcm5hbWVzIG11c3QgYmUgYSB0dXBsZSwgbm90ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobWFwKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgZmFzdCA9IGYtPmZfbG9jYWxzcGx1czsKICAgICBqID0gUHlUdXBsZV9HRVRfU0laRShtYXApOwogICAgIGlmIChqID4gY28tPmNvX25sb2NhbHMpCiAgICAgICAgIGogPSBjby0+Y29fbmxvY2FsczsKLSAgICBpZiAoY28tPmNvX25sb2NhbHMpCi0gICAgICAgIG1hcF90b19kaWN0KG1hcCwgaiwgbG9jYWxzLCBmYXN0LCAwKTsKKyAgICBpZiAoY28tPmNvX25sb2NhbHMpIHsKKyAgICAgICAgaWYgKG1hcF90b19kaWN0KG1hcCwgaiwgbG9jYWxzLCBmYXN0LCAwKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIG5jZWxscyA9IFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKTsKICAgICBuZnJlZXZhcnMgPSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19mcmVldmFycyk7CiAgICAgaWYgKG5jZWxscyB8fCBuZnJlZXZhcnMpIHsKLSAgICAgICAgbWFwX3RvX2RpY3QoY28tPmNvX2NlbGx2YXJzLCBuY2VsbHMsCi0gICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzLCAxKTsKKyAgICAgICAgaWYgKG1hcF90b19kaWN0KGNvLT5jb19jZWxsdmFycywgbmNlbGxzLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzLCBmYXN0ICsgY28tPmNvX25sb2NhbHMsIDEpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCiAgICAgICAgIC8qIElmIHRoZSBuYW1lc3BhY2UgaXMgdW5vcHRpbWl6ZWQsIHRoZW4gb25lIG9mIHRoZQogICAgICAgICAgICBmb2xsb3dpbmcgY2FzZXMgYXBwbGllczoKICAgICAgICAgICAgMS4gSXQgZG9lcyBub3QgY29udGFpbiBmcmVlIHZhcmlhYmxlcywgYmVjYXVzZSBpdApAQCAtODg0LDExICs5MTMsMjQgQEAKICAgICAgICAgICAgaW50byB0aGUgbG9jYWxzIGRpY3QgdXNlZCBieSB0aGUgY2xhc3MuCiAgICAgICAgICovCiAgICAgICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19PUFRJTUlaRUQpIHsKLSAgICAgICAgICAgIG1hcF90b19kaWN0KGNvLT5jb19mcmVldmFycywgbmZyZWV2YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzLCBmYXN0ICsgY28tPmNvX25sb2NhbHMgKyBuY2VsbHMsIDEpOworICAgICAgICAgICAgaWYgKG1hcF90b19kaWN0KGNvLT5jb19mcmVldmFycywgbmZyZWV2YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzICsgbmNlbGxzLCAxKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK1B5RnJhbWVfRmFzdFRvTG9jYWxzKFB5RnJhbWVPYmplY3QgKmYpCit7CisgICAgaW50IHJlczsKKworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisKKyAgICByZXMgPSBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmKTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKIH0KIAogdm9pZApAQCAtOTAwLDcgKzk0Miw3IEBACiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIFB5X3NzaXplX3QgajsKLSAgICBpbnQgbmNlbGxzLCBuZnJlZXZhcnM7CisgICAgUHlfc3NpemVfdCBuY2VsbHMsIG5mcmVldmFyczsKICAgICBpZiAoZiA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CmRpZmYgLS1naXQgYS9PYmplY3RzL2Z1bmNvYmplY3QuYyBiL09iamVjdHMvZnVuY29iamVjdC5jCmluZGV4IDQ5NDE1YjkuLmIwNDM5MzQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZnVuY29iamVjdC5jCisrKyBiL09iamVjdHMvZnVuY29iamVjdC5jCkBAIC04LDYwICs4LDU5IEBACiBQeU9iamVjdCAqCiBQeUZ1bmN0aW9uX05ld1dpdGhRdWFsTmFtZShQeU9iamVjdCAqY29kZSwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpxdWFsbmFtZSkKIHsKLSAgICBQeUZ1bmN0aW9uT2JqZWN0ICpvcCA9IFB5T2JqZWN0X0dDX05ldyhQeUZ1bmN0aW9uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUZ1bmN0aW9uX1R5cGUpOwotICAgIHN0YXRpYyBQeU9iamVjdCAqX19uYW1lX18gPSAwOwotICAgIGlmIChvcCAhPSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpkb2M7Ci0gICAgICAgIFB5T2JqZWN0ICpjb25zdHM7Ci0gICAgICAgIFB5T2JqZWN0ICptb2R1bGU7Ci0gICAgICAgIG9wLT5mdW5jX3dlYWtyZWZsaXN0ID0gTlVMTDsKLSAgICAgICAgUHlfSU5DUkVGKGNvZGUpOwotICAgICAgICBvcC0+ZnVuY19jb2RlID0gY29kZTsKLSAgICAgICAgUHlfSU5DUkVGKGdsb2JhbHMpOwotICAgICAgICBvcC0+ZnVuY19nbG9iYWxzID0gZ2xvYmFsczsKLSAgICAgICAgb3AtPmZ1bmNfbmFtZSA9ICgoUHlDb2RlT2JqZWN0ICopY29kZSktPmNvX25hbWU7Ci0gICAgICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19uYW1lKTsKLSAgICAgICAgb3AtPmZ1bmNfZGVmYXVsdHMgPSBOVUxMOyAvKiBObyBkZWZhdWx0IGFyZ3VtZW50cyAqLwotICAgICAgICBvcC0+ZnVuY19rd2RlZmF1bHRzID0gTlVMTDsgLyogTm8ga2V5d29yZCBvbmx5IGRlZmF1bHRzICovCi0gICAgICAgIG9wLT5mdW5jX2Nsb3N1cmUgPSBOVUxMOwotICAgICAgICBjb25zdHMgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19jb25zdHM7Ci0gICAgICAgIGlmIChQeVR1cGxlX1NpemUoY29uc3RzKSA+PSAxKSB7Ci0gICAgICAgICAgICBkb2MgPSBQeVR1cGxlX0dldEl0ZW0oY29uc3RzLCAwKTsKLSAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGRvYykpCi0gICAgICAgICAgICAgICAgZG9jID0gUHlfTm9uZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2MgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoZG9jKTsKLSAgICAgICAgb3AtPmZ1bmNfZG9jID0gZG9jOwotICAgICAgICBvcC0+ZnVuY19kaWN0ID0gTlVMTDsKLSAgICAgICAgb3AtPmZ1bmNfbW9kdWxlID0gTlVMTDsKLSAgICAgICAgb3AtPmZ1bmNfYW5ub3RhdGlvbnMgPSBOVUxMOworICAgIFB5RnVuY3Rpb25PYmplY3QgKm9wOworICAgIFB5T2JqZWN0ICpkb2MsICpjb25zdHMsICptb2R1bGU7CisgICAgc3RhdGljIFB5T2JqZWN0ICpfX25hbWVfXyA9IE5VTEw7CiAKLSAgICAgICAgLyogX19tb2R1bGVfXzogSWYgbW9kdWxlIG5hbWUgaXMgaW4gZ2xvYmFscywgdXNlIGl0LgotICAgICAgICAgICBPdGhlcndpc2UsIHVzZSBOb25lLgotICAgICAgICAqLwotICAgICAgICBpZiAoIV9fbmFtZV9fKSB7Ci0gICAgICAgICAgICBfX25hbWVfXyA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOwotICAgICAgICAgICAgaWYgKCFfX25hbWVfXykgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbW9kdWxlID0gUHlEaWN0X0dldEl0ZW0oZ2xvYmFscywgX19uYW1lX18pOwotICAgICAgICBpZiAobW9kdWxlKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYobW9kdWxlKTsKLSAgICAgICAgICAgIG9wLT5mdW5jX21vZHVsZSA9IG1vZHVsZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocXVhbG5hbWUpCi0gICAgICAgICAgICBvcC0+ZnVuY19xdWFsbmFtZSA9IHF1YWxuYW1lOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcC0+ZnVuY19xdWFsbmFtZSA9IG9wLT5mdW5jX25hbWU7Ci0gICAgICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19xdWFsbmFtZSk7CisgICAgaWYgKF9fbmFtZV9fID09IE5VTEwpIHsKKyAgICAgICAgX19uYW1lX18gPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKKyAgICAgICAgaWYgKF9fbmFtZV9fID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBvcCA9IFB5T2JqZWN0X0dDX05ldyhQeUZ1bmN0aW9uT2JqZWN0LCAmUHlGdW5jdGlvbl9UeXBlKTsKKyAgICBpZiAob3AgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBvcC0+ZnVuY193ZWFrcmVmbGlzdCA9IE5VTEw7CisgICAgUHlfSU5DUkVGKGNvZGUpOworICAgIG9wLT5mdW5jX2NvZGUgPSBjb2RlOworICAgIFB5X0lOQ1JFRihnbG9iYWxzKTsKKyAgICBvcC0+ZnVuY19nbG9iYWxzID0gZ2xvYmFsczsKKyAgICBvcC0+ZnVuY19uYW1lID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fbmFtZTsKKyAgICBQeV9JTkNSRUYob3AtPmZ1bmNfbmFtZSk7CisgICAgb3AtPmZ1bmNfZGVmYXVsdHMgPSBOVUxMOyAvKiBObyBkZWZhdWx0IGFyZ3VtZW50cyAqLworICAgIG9wLT5mdW5jX2t3ZGVmYXVsdHMgPSBOVUxMOyAvKiBObyBrZXl3b3JkIG9ubHkgZGVmYXVsdHMgKi8KKyAgICBvcC0+ZnVuY19jbG9zdXJlID0gTlVMTDsKKworICAgIGNvbnN0cyA9ICgoUHlDb2RlT2JqZWN0ICopY29kZSktPmNvX2NvbnN0czsKKyAgICBpZiAoUHlUdXBsZV9TaXplKGNvbnN0cykgPj0gMSkgeworICAgICAgICBkb2MgPSBQeVR1cGxlX0dldEl0ZW0oY29uc3RzLCAwKTsKKyAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZG9jKSkKKyAgICAgICAgICAgIGRvYyA9IFB5X05vbmU7CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGRvYyA9IFB5X05vbmU7CisgICAgUHlfSU5DUkVGKGRvYyk7CisgICAgb3AtPmZ1bmNfZG9jID0gZG9jOworCisgICAgb3AtPmZ1bmNfZGljdCA9IE5VTEw7CisgICAgb3AtPmZ1bmNfbW9kdWxlID0gTlVMTDsKKyAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7CisKKyAgICAvKiBfX21vZHVsZV9fOiBJZiBtb2R1bGUgbmFtZSBpcyBpbiBnbG9iYWxzLCB1c2UgaXQuCisgICAgICAgT3RoZXJ3aXNlLCB1c2UgTm9uZS4gKi8KKyAgICBtb2R1bGUgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBfX25hbWVfXyk7CisgICAgaWYgKG1vZHVsZSkgeworICAgICAgICBQeV9JTkNSRUYobW9kdWxlKTsKKyAgICAgICAgb3AtPmZ1bmNfbW9kdWxlID0gbW9kdWxlOworICAgIH0KKyAgICBpZiAocXVhbG5hbWUpCisgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gcXVhbG5hbWU7CisgICAgZWxzZQorICAgICAgICBvcC0+ZnVuY19xdWFsbmFtZSA9IG9wLT5mdW5jX25hbWU7CisgICAgUHlfSU5DUkVGKG9wLT5mdW5jX3F1YWxuYW1lKTsKKwogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhvcCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW9wOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9nZW5vYmplY3QuYyBiL09iamVjdHMvZ2Vub2JqZWN0LmMKaW5kZXggMDE2YmZhMi4uMDhkMzBiZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9nZW5vYmplY3QuYworKysgYi9PYmplY3RzL2dlbm9iamVjdC5jCkBAIC0xNSw2ICsxNSwzMSBAQAogICAgIHJldHVybiAwOwogfQogCit2b2lkCitfUHlHZW5fRmluYWxpemUoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlHZW5PYmplY3QgKmdlbiA9IChQeUdlbk9iamVjdCAqKXNlbGY7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgaWYgKGdlbi0+Z2lfZnJhbWUgPT0gTlVMTCB8fCBnZW4tPmdpX2ZyYW1lLT5mX3N0YWNrdG9wID09IE5VTEwpCisgICAgICAgIC8qIEdlbmVyYXRvciBpc24ndCBwYXVzZWQsIHNvIG5vIG5lZWQgdG8gY2xvc2UgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgIHJlcyA9IGdlbl9jbG9zZShnZW4sIE5VTEwpOworCisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc2VsZik7CisgICAgZWxzZQorICAgICAgICBQeV9ERUNSRUYocmVzKTsKKworICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworfQorCiBzdGF0aWMgdm9pZAogZ2VuX2RlYWxsb2MoUHlHZW5PYmplY3QgKmdlbikKIHsKQEAgLTI3LDEyICs1Miw4IEBACiAKICAgICBfUHlPYmplY3RfR0NfVFJBQ0soc2VsZik7CiAKLSAgICBpZiAoZ2VuLT5naV9mcmFtZSAhPSBOVUxMICYmIGdlbi0+Z2lfZnJhbWUtPmZfc3RhY2t0b3AgIT0gTlVMTCkgewotICAgICAgICAvKiBHZW5lcmF0b3IgaXMgcGF1c2VkLCBzbyB3ZSBuZWVkIHRvIGNsb3NlICovCi0gICAgICAgIFB5X1RZUEUoZ2VuKS0+dHBfZGVsKHNlbGYpOwotICAgICAgICBpZiAoc2VsZi0+b2JfcmVmY250ID4gMCkKLSAgICAgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAvKiByZXN1cnJlY3RlZC4gIDooICovCi0gICAgfQorICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZikpCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAvKiByZXN1cnJlY3RlZC4gIDooICovCiAKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBQeV9DTEVBUihnZW4tPmdpX2ZyYW1lKTsKQEAgLTQwLDcgKzYxLDYgQEAKICAgICBQeU9iamVjdF9HQ19EZWwoZ2VuKTsKIH0KIAotCiBzdGF0aWMgUHlPYmplY3QgKgogZ2VuX3NlbmRfZXgoUHlHZW5PYmplY3QgKmdlbiwgUHlPYmplY3QgKmFyZywgaW50IGV4YykKIHsKQEAgLTEyMCw2ICsxNDAsNyBAQAogICAgICAgICBQeV9YREVDUkVGKHQpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgICAgICBQeV9YREVDUkVGKHRiKTsKKyAgICAgICAgZ2VuLT5naV9mcmFtZS0+Zl9nZW4gPSBOVUxMOwogICAgICAgICBnZW4tPmdpX2ZyYW1lID0gTlVMTDsKICAgICAgICAgUHlfREVDUkVGKGYpOwogICAgIH0KQEAgLTIyMiw2OCArMjQzLDYgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQKLWdlbl9kZWwoUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKnJlczsKLSAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwotICAgIFB5R2VuT2JqZWN0ICpnZW4gPSAoUHlHZW5PYmplY3QgKilzZWxmOwotCi0gICAgaWYgKGdlbi0+Z2lfZnJhbWUgPT0gTlVMTCB8fCBnZW4tPmdpX2ZyYW1lLT5mX3N0YWNrdG9wID09IE5VTEwpCi0gICAgICAgIC8qIEdlbmVyYXRvciBpc24ndCBwYXVzZWQsIHNvIG5vIG5lZWQgdG8gY2xvc2UgKi8KLSAgICAgICAgcmV0dXJuOwotCi0gICAgLyogVGVtcG9yYXJpbHkgcmVzdXJyZWN0IHRoZSBvYmplY3QuICovCi0gICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA9PSAwKTsKLSAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOwotCi0gICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KLSAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKLQotICAgIHJlcyA9IGdlbl9jbG9zZShnZW4sIE5VTEwpOwotCi0gICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc2VsZik7Ci0gICAgZWxzZQotICAgICAgICBQeV9ERUNSRUYocmVzKTsKLQotICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KLSAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwotCi0gICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAotICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCi0gICAgICovCi0gICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOwotICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQotICAgICAgICByZXR1cm47IC8qIHRoaXMgaXMgdGhlIG5vcm1hbCBwYXRoIG91dCAqLwotCi0gICAgLyogY2xvc2UoKSByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKLSAgICAgKiBuZXZlciBoYXBwZW5lZC4KLSAgICAgKi8KLSAgICB7Ci0gICAgICAgIFB5X3NzaXplX3QgcmVmY250ID0gc2VsZi0+b2JfcmVmY250OwotICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOwotICAgICAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7Ci0gICAgfQotICAgIGFzc2VydChQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkgJiYKLSAgICAgICAgICAgX1B5X0FTX0dDKHNlbGYpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKLQotICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbwotICAgICAqIHdlIG5lZWQgdG8gdW5kbyB0aGF0LiAqLwotICAgIF9QeV9ERUNfUkVGVE9UQUw7Ci0gICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKLSAgICAgKiBjaGFpbiwgc28gbm8gbW9yZSB0byBkbyB0aGVyZS4KLSAgICAgKiBJZiBDT1VOVF9BTExPQ1MsIHRoZSBvcmlnaW5hbCBkZWNyZWYgYnVtcGVkIHRwX2ZyZWVzLCBhbmQKLSAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKLSAgICAgKiB1bmRvbmUuCi0gICAgICovCi0jaWZkZWYgQ09VTlRfQUxMT0NTCi0gICAgLS0oUHlfVFlQRShzZWxmKS0+dHBfZnJlZXMpOwotICAgIC0tKFB5X1RZUEUoc2VsZiktPnRwX2FsbG9jcyk7Ci0jZW5kaWYKLX0KLQotCiAKIFB5RG9jX1NUUlZBUih0aHJvd19kb2MsCiAidGhyb3codHlwWyx2YWxbLHRiXV0pIC0+IHJhaXNlIGV4Y2VwdGlvbiBpbiBnZW5lcmF0b3IsXG5cCkBAIC01MTcsNyArNDc2LDggQEAKICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwKKyAgICAgICAgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWdlbl90cmF2ZXJzZSwgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtNTQ0LDcgKzUwNCw5IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KLSAgICBnZW5fZGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIF9QeUdlbl9GaW5hbGl6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAKIFB5T2JqZWN0ICoKQEAgLTU1Niw2ICs1MTgsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZ2VuLT5naV9mcmFtZSA9IGY7CisgICAgZi0+Zl9nZW4gPSAoUHlPYmplY3QgKikgZ2VuOwogICAgIFB5X0lOQ1JFRihmLT5mX2NvZGUpOwogICAgIGdlbi0+Z2lfY29kZSA9IChQeU9iamVjdCAqKShmLT5mX2NvZGUpOwogICAgIGdlbi0+Z2lfcnVubmluZyA9IDA7CmRpZmYgLS1naXQgYS9PYmplY3RzL2l0ZXJvYmplY3QuYyBiL09iamVjdHMvaXRlcm9iamVjdC5jCmluZGV4IDNjZmJlYWYuLjc3ZmY4MTAgMTAwNjQ0Ci0tLSBhL09iamVjdHMvaXRlcm9iamVjdC5jCisrKyBiL09iamVjdHMvaXRlcm9iamVjdC5jCkBAIC00LDcgKzQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIGxvbmcgICAgICBpdF9pbmRleDsKKyAgICBQeV9zc2l6ZV90IGl0X2luZGV4OwogICAgIFB5T2JqZWN0ICppdF9zZXE7IC8qIFNldCB0byBOVUxMIHdoZW4gaXRlcmF0b3IgaXMgZXhoYXVzdGVkICovCiB9IHNlcWl0ZXJvYmplY3Q7CiAKQEAgLTc2LDkgKzc2LDE0IEBACiAgICAgUHlfc3NpemVfdCBzZXFzaXplLCBsZW47CiAKICAgICBpZiAoaXQtPml0X3NlcSkgewotICAgICAgICBzZXFzaXplID0gUHlTZXF1ZW5jZV9TaXplKGl0LT5pdF9zZXEpOwotICAgICAgICBpZiAoc2Vxc2l6ZSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0xlbihpdC0+aXRfc2VxKSkgeworICAgICAgICAgICAgc2Vxc2l6ZSA9IFB5U2VxdWVuY2VfU2l6ZShpdC0+aXRfc2VxKTsKKyAgICAgICAgICAgIGlmIChzZXFzaXplID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworICAgICAgICB9CiAgICAgICAgIGxlbiA9IHNlcXNpemUgLSBpdC0+aXRfaW5kZXg7CiAgICAgICAgIGlmIChsZW4gPj0gMCkKICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobGVuKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvbGlzdG9iamVjdC5jIGIvT2JqZWN0cy9saXN0b2JqZWN0LmMKaW5kZXggNmUwZDA5NC4uYzA4YzFmNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9saXN0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9saXN0b2JqZWN0LmMKQEAgLTIxMywxMSArMjEzLDExIEBACiB9CiAKIGludAotUHlMaXN0X1NldEl0ZW0ocmVnaXN0ZXIgUHlPYmplY3QgKm9wLCByZWdpc3RlciBQeV9zc2l6ZV90IGksCi0gICAgICAgICAgICAgICByZWdpc3RlciBQeU9iamVjdCAqbmV3aXRlbSkKK1B5TGlzdF9TZXRJdGVtKFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCBpLAorICAgICAgICAgICAgICAgUHlPYmplY3QgKm5ld2l0ZW0pCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9sZGl0ZW07Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipwOworICAgIFB5T2JqZWN0ICpvbGRpdGVtOworICAgIFB5T2JqZWN0ICoqcDsKICAgICBpZiAoIVB5TGlzdF9DaGVjayhvcCkpIHsKICAgICAgICAgUHlfWERFQ1JFRihuZXdpdGVtKTsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC02NDQsOSArNjQ0LDE0IEBACiAgICAgbWVtY3B5KHJlY3ljbGUsICZpdGVtW2lsb3ddLCBzKTsKIAogICAgIGlmIChkIDwgMCkgeyAvKiBEZWxldGUgLWQgaXRlbXMgKi8KLSAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLAotICAgICAgICAgICAgKFB5X1NJWkUoYSkgLSBpaGlnaCkqc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICAgICAgbGlzdF9yZXNpemUoYSwgUHlfU0laRShhKSArIGQpOworICAgICAgICBQeV9zc2l6ZV90IHRhaWw7CisgICAgICAgIHRhaWwgPSAoUHlfU0laRShhKSAtIGloaWdoKSAqIHNpemVvZihQeU9iamVjdCAqKTsKKyAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLCB0YWlsKTsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKGEsIFB5X1NJWkUoYSkgKyBkKSA8IDApIHsKKyAgICAgICAgICAgIG1lbW1vdmUoJml0ZW1baWhpZ2hdLCAmaXRlbVtpaGlnaCtkXSwgdGFpbCk7CisgICAgICAgICAgICBtZW1jcHkoJml0ZW1baWxvd10sIHJlY3ljbGUsIHMpOworICAgICAgICAgICAgZ290byBFcnJvcjsKKyAgICAgICAgfQogICAgICAgICBpdGVtID0gYS0+b2JfaXRlbTsKICAgICB9CiAgICAgZWxzZSBpZiAoZCA+IDApIHsgLyogSW5zZXJ0IGQgaXRlbXMgKi8KQEAgLTgyNiw3ICs4MzEsNyBAQAogICAgIGl0ZXJuZXh0ID0gKml0LT5vYl90eXBlLT50cF9pdGVybmV4dDsKIAogICAgIC8qIEd1ZXNzIGEgcmVzdWx0IGxpc3Qgc2l6ZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CisgICAgbiA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CiAgICAgaWYgKG4gPT0gLTEpIHsKICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04NzEsOCArODc2LDEwIEBACiAgICAgfQogCiAgICAgLyogQ3V0IGJhY2sgcmVzdWx0IGxpc3QgaWYgaW5pdGlhbCBndWVzcyB3YXMgdG9vIGxhcmdlLiAqLwotICAgIGlmIChQeV9TSVpFKHNlbGYpIDwgc2VsZi0+YWxsb2NhdGVkKQotICAgICAgICBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsgIC8qIHNocmlua2luZyBjYW4ndCBmYWlsICovCisgICAgaWYgKFB5X1NJWkUoc2VsZikgPCBzZWxmLT5hbGxvY2F0ZWQpIHsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgUHlfREVDUkVGKGl0KTsKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTkyNSwxNyArOTMyLDE3IEBACiAgICAgdiA9IHNlbGYtPm9iX2l0ZW1baV07CiAgICAgaWYgKGkgPT0gUHlfU0laRShzZWxmKSAtIDEpIHsKICAgICAgICAgc3RhdHVzID0gbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSAtIDEpOwotICAgICAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgICAgICByZXR1cm4gdjsgLyogYW5kIHYgbm93IG93bnMgdGhlIHJlZmVyZW5jZSB0aGUgbGlzdCBoYWQgKi8KKyAgICAgICAgaWYgKHN0YXR1cyA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIHY7IC8qIGFuZCB2IG5vdyBvd25zIHRoZSByZWZlcmVuY2UgdGhlIGxpc3QgaGFkICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYodik7CiAgICAgc3RhdHVzID0gbGlzdF9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLCAoUHlPYmplY3QgKilOVUxMKTsKLSAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgIC8qIFVzZSBzdGF0dXMsIHNvIHRoYXQgaW4gYSByZWxlYXNlIGJ1aWxkIGNvbXBpbGVycyBkb24ndAotICAgICAqIGNvbXBsYWluIGFib3V0IHRoZSB1bnVzZWQgbmFtZS4KLSAgICAgKi8KLSAgICAodm9pZCkgc3RhdHVzOwotCisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIHY7CiB9CiAKQEAgLTEwNTEsOSArMTA1OCw5IEBACiBzdGF0aWMgaW50CiBiaW5hcnlzb3J0KHNvcnRzbGljZSBsbywgUHlPYmplY3QgKipoaSwgUHlPYmplY3QgKipzdGFydCkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGs7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipsLCAqKnAsICoqcjsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcGl2b3Q7CisgICAgUHlfc3NpemVfdCBrOworICAgIFB5T2JqZWN0ICoqbCwgKipwLCAqKnI7CisgICAgUHlPYmplY3QgKnBpdm90OwogCiAgICAgYXNzZXJ0KGxvLmtleXMgPD0gc3RhcnQgJiYgc3RhcnQgPD0gaGkpOwogICAgIC8qIGFzc2VydCBbbG8sIHN0YXJ0KSBpcyBzb3J0ZWQgKi8KQEAgLTI2NjAsNyArMjY2Nyw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyBpdF9pbmRleDsKKyAgICBQeV9zc2l6ZV90IGl0X2luZGV4OwogICAgIFB5TGlzdE9iamVjdCAqaXRfc2VxOyAvKiBTZXQgdG8gTlVMTCB3aGVuIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLwogfSBsaXN0aXRlcm9iamVjdDsKIApAQCAtMjc5Nyw3ICsyODA0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBsaXN0aXRlcl9zZXRzdGF0ZShsaXN0aXRlcm9iamVjdCAqaXQsIFB5T2JqZWN0ICpzdGF0ZSkKIHsKLSAgICBsb25nIGluZGV4ID0gUHlMb25nX0FzTG9uZyhzdGF0ZSk7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IFB5TG9uZ19Bc1NzaXplX3Qoc3RhdGUpOwogICAgIGlmIChpbmRleCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoaXQtPml0X3NlcSAhPSBOVUxMKSB7CkBAIC0yOTU4LDcgKzI5NjUsNyBAQAogICAgIGlmIChmb3J3YXJkKSB7CiAgICAgICAgIGxpc3RpdGVyb2JqZWN0ICppdCA9IChsaXN0aXRlcm9iamVjdCAqKV9pdDsKICAgICAgICAgaWYgKGl0LT5pdF9zZXEpCi0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKWwiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAorICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTyluIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5pdF9zZXEsIGl0LT5pdF9pbmRleCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbGlzdHJldml0ZXJvYmplY3QgKml0ID0gKGxpc3RyZXZpdGVyb2JqZWN0ICopX2l0OwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9sb25nb2JqZWN0LmMgYi9PYmplY3RzL2xvbmdvYmplY3QuYwppbmRleCA2MzgzNTA3Li5hNWMwZDFiIDEwMDY0NAotLS0gYS9PYmplY3RzL2xvbmdvYmplY3QuYworKysgYi9PYmplY3RzL2xvbmdvYmplY3QuYwpAQCAtMTcsNyArMTcsOCBAQAogI2VuZGlmCiAKIC8qIGNvbnZlcnQgYSBQeUxvbmcgb2Ygc2l6ZSAxLCAwIG9yIC0xIHRvIGFuIHNkaWdpdCAqLwotI2RlZmluZSBNRURJVU1fVkFMVUUoeCkgKFB5X1NJWkUoeCkgPCAwID8gLShzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSA6ICAgXAorI2RlZmluZSBNRURJVU1fVkFMVUUoeCkgKGFzc2VydCgtMSA8PSBQeV9TSVpFKHgpICYmIFB5X1NJWkUoeCkgPD0gMSksICAgXAorICAgICAgICAgUHlfU0laRSh4KSA8IDAgPyAtKHNkaWdpdCkoeCktPm9iX2RpZ2l0WzBdIDogICBcCiAgICAgICAgICAgICAgKFB5X1NJWkUoeCkgPT0gMCA/IChzZGlnaXQpMCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgIChzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSkpCiAjZGVmaW5lIEFCUyh4KSAoKHgpIDwgMCA/IC0oeCkgOiAoeCkpCkBAIC03MCwxMSArNzEsMjEgQEAKIAogLyogSWYgYSBmcmVzaGx5LWFsbG9jYXRlZCBpbnQgaXMgYWxyZWFkeSBzaGFyZWQsIGl0IG11c3QKICAgIGJlIGEgc21hbGwgaW50ZWdlciwgc28gbmVnYXRpbmcgaXQgbXVzdCBnbyB0byBQeUxvbmdfRnJvbUxvbmcgKi8KLSNkZWZpbmUgTkVHQVRFKHgpIFwKLSAgICBkbyBpZiAoUHlfUkVGQ05UKHgpID09IDEpIFB5X1NJWkUoeCkgPSAtUHlfU0laRSh4KTsgIFwKLSAgICAgICBlbHNlIHsgUHlPYmplY3QqIHRtcD1QeUxvbmdfRnJvbUxvbmcoLU1FRElVTV9WQUxVRSh4KSk7ICBcCi0gICAgICAgICAgIFB5X0RFQ1JFRih4KTsgKHgpID0gKFB5TG9uZ09iamVjdCopdG1wOyB9ICAgICAgICAgICAgICAgXAotICAgIHdoaWxlKDApCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK19QeUxvbmdfTmVnYXRlKFB5TG9uZ09iamVjdCAqKnhfcCkKK3sKKyAgICBQeUxvbmdPYmplY3QgKng7CisKKyAgICB4ID0gKFB5TG9uZ09iamVjdCAqKSp4X3A7CisgICAgaWYgKFB5X1JFRkNOVCh4KSA9PSAxKSB7CisgICAgICAgIFB5X1NJWkUoeCkgPSAtUHlfU0laRSh4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICp4X3AgPSAoUHlMb25nT2JqZWN0ICopUHlMb25nX0Zyb21Mb25nKC1NRURJVU1fVkFMVUUoeCkpOworICAgIFB5X0RFQ1JFRih4KTsKK30KKwogLyogRm9yIGludCBtdWx0aXBsaWNhdGlvbiwgdXNlIHRoZSBPKE4qKjIpIHNjaG9vbCBhbGdvcml0aG0gdW5sZXNzCiAgKiBib3RoIG9wZXJhbmRzIGNvbnRhaW4gbW9yZSB0aGFuIEtBUkFUU1VCQV9DVVRPRkYgZGlnaXRzICh0aGlzCiAgKiBiZWluZyBhbiBpbnRlcm5hbCBQeXRob24gaW50IGRpZ2l0LCBpbiBiYXNlIEJBU0UpLgpAQCAtODksMTEgKzEwMCw2IEBACiAgKi8KICNkZWZpbmUgRklWRUFSWV9DVVRPRkYgOAogCi0jdW5kZWYgTUlOCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA+ICh5KSA/ICh5KSA6ICh4KSkKLQogI2RlZmluZSBTSUdDSEVDSyhQeVRyeUJsb2NrKSAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpIFB5VHJ5QmxvY2sgICAgXApAQCAtMTA0LDcgKzExMCw3IEBACiAgICBvZiB0aGUgYWxnb3JpdGhtcyB1c2VkLCB0aGlzIGNvdWxkIHNhdmUgYXQgbW9zdCBiZSBvbmUgd29yZCBhbnl3YXkuICovCiAKIHN0YXRpYyBQeUxvbmdPYmplY3QgKgotbG9uZ19ub3JtYWxpemUocmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2KQorbG9uZ19ub3JtYWxpemUoUHlMb25nT2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaiA9IEFCUyhQeV9TSVpFKHYpKTsKICAgICBQeV9zc2l6ZV90IGkgPSBqOwpAQCAtMzM0LDcgKzM0MCw3IEBACiBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKnZ2LCBpbnQgKm92ZXJmbG93KQogewogICAgIC8qIFRoaXMgdmVyc2lvbiBieSBUaW0gUGV0ZXJzICovCi0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBsb25nIHgsIHByZXY7CiAgICAgbG9uZyByZXM7CiAgICAgUHlfc3NpemVfdCBpOwpAQCAtNDU3LDcgKzQ2Myw3IEBACiAKIFB5X3NzaXplX3QKIFB5TG9uZ19Bc1NzaXplX3QoUHlPYmplY3QgKnZ2KSB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICBzaXplX3QgeCwgcHJldjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHNpZ247CkBAIC01MTMsNyArNTE5LDcgQEAKIHVuc2lnbmVkIGxvbmcKIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBsb25nIHgsIHByZXY7CiAgICAgUHlfc3NpemVfdCBpOwogCkBAIC01NDMsNyArNTQ5LDcgQEAKICAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgfCB2LT5vYl9kaWdpdFtpXTsKICAgICAgICAgaWYgKCh4ID4+IFB5TG9uZ19TSElGVCkgIT0gcHJldikgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gQyB1bnNpZ25lZCBsb25nIik7CiAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC0xOwogICAgICAgICB9CkBAIC01NTcsNyArNTYzLDcgQEAKIHNpemVfdAogUHlMb25nX0FzU2l6ZV90KFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHNpemVfdCB4LCBwcmV2OwogICAgIFB5X3NzaXplX3QgaTsKIApAQCAtNjAwLDcgKzYwNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZwogX1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2soUHlPYmplY3QgKnZ2KQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgbG9uZyB4OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTYyOCw3ICs2MzQsNyBAQAogfQogCiB1bnNpZ25lZCBsb25nCi1QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2soUHlPYmplY3QgKm9wKQogewogICAgIFB5TnVtYmVyTWV0aG9kcyAqbmI7CiAgICAgUHlMb25nT2JqZWN0ICpsbzsKQEAgLTk1NCw5ICs5NjAsNiBAQAogUHlMb25nX0Zyb21Wb2lkUHRyKHZvaWQgKnApCiB7CiAjaWYgU0laRU9GX1ZPSURfUCA8PSBTSVpFT0ZfTE9ORwotICAgIC8qIHNwZWNpYWwtY2FzZSBudWxsIHBvaW50ZXIgKi8KLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKShQeV91aW50cHRyX3QpcCk7CiAjZWxzZQogCkBAIC05NjYsOSArOTY5LDYgQEAKICNpZiBTSVpFT0ZfTE9OR19MT05HIDwgU0laRU9GX1ZPSURfUAogIyAgIGVycm9yICJQeUxvbmdfRnJvbVZvaWRQdHI6IHNpemVvZihQWV9MT05HX0xPTkcpIDwgc2l6ZW9mKHZvaWQqKSIKICNlbmRpZgotICAgIC8qIHNwZWNpYWwtY2FzZSBudWxsIHBvaW50ZXIgKi8KLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKShQeV91aW50cHRyX3QpcCk7CiAjZW5kaWYgLyogU0laRU9GX1ZPSURfUCA8PSBTSVpFT0ZfTE9ORyAqLwogCkBAIC0xMDE0LDcgKzEwMTQsNiBAQAogICogcmV3cml0dGVuIHRvIHVzZSB0aGUgbmV3ZXIgUHlMb25nX3tBcyxGcm9tfUJ5dGVBcnJheSBBUEkuCiAgKi8KIAotI2RlZmluZSBJU19MSVRUTEVfRU5ESUFOIChpbnQpKih1bnNpZ25lZCBjaGFyKikmb25lCiAjZGVmaW5lIFBZX0FCU19MTE9OR19NSU4gKDAtKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylQWV9MTE9OR19NSU4pCiAKIC8qIENyZWF0ZSBhIG5ldyBpbnQgb2JqZWN0IGZyb20gYSBDIFBZX0xPTkdfTE9ORyBpbnQuICovCkBAIC0xMTY3LDcgKzExNjYsNiBAQAogewogICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICBQWV9MT05HX0xPTkcgYnl0ZXM7Ci0gICAgaW50IG9uZSA9IDE7CiAgICAgaW50IHJlczsKIAogICAgIGlmICh2diA9PSBOVUxMKSB7CkBAIC0xMjAyLDcgKzEyMDAsNyBAQAogICAgIGNhc2UgMTogcmV0dXJuIHYtPm9iX2RpZ2l0WzBdOwogICAgIH0KICAgICByZXMgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKil2diwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBJU19MSVRUTEVfRU5ESUFOLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIFBZX0xJVFRMRV9FTkRJQU4sIDEpOwogCiAgICAgLyogUGxhbiA5IGNhbid0IGhhbmRsZSBQWV9MT05HX0xPTkcgaW4gPyA6IGV4cHJlc3Npb25zICovCiAgICAgaWYgKHJlcyA8IDApCkBAIC0xMjE5LDcgKzEyMTcsNiBAQAogewogICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgYnl0ZXM7Ci0gICAgaW50IG9uZSA9IDE7CiAgICAgaW50IHJlczsKIAogICAgIGlmICh2diA9PSBOVUxMKSB7CkBAIC0xMjM4LDcgKzEyMzUsNyBAQAogICAgIH0KIAogICAgIHJlcyA9IF9QeUxvbmdfQXNCeXRlQXJyYXkoKFB5TG9uZ09iamVjdCAqKXZ2LCAodW5zaWduZWQgY2hhciAqKSZieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIElTX0xJVFRMRV9FTkRJQU4sIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgUFlfTElUVExFX0VORElBTiwgMCk7CiAKICAgICAvKiBQbGFuIDkgY2FuJ3QgaGFuZGxlIFBZX0xPTkdfTE9ORyBpbiA/IDogZXhwcmVzc2lvbnMgKi8KICAgICBpZiAocmVzIDwgMCkKQEAgLTEyNTMsNyArMTI1MCw3IEBACiBzdGF0aWMgdW5zaWduZWQgUFlfTE9OR19MT05HCiBfUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2soUHlPYmplY3QgKnZ2KQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIHg7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaWduOwpAQCAtMTI4MSw3ICsxMjc4LDcgQEAKIH0KIAogdW5zaWduZWQgUFlfTE9OR19MT05HCi1QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzayhyZWdpc3RlciBQeU9iamVjdCAqb3ApCitQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzayhQeU9iamVjdCAqb3ApCiB7CiAgICAgUHlOdW1iZXJNZXRob2RzICpuYjsKICAgICBQeUxvbmdPYmplY3QgKmxvOwpAQCAtMTMxNCw3ICsxMzExLDYgQEAKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpLTE7CiAgICAgfQogfQotI3VuZGVmIElTX0xJVFRMRV9FTkRJQU4KIAogLyogR2V0IGEgQyBsb25nIGxvbmcgaW50IGZyb20gYW4gaW50IG9iamVjdCBvciBhbnkgb2JqZWN0IHRoYXQgaGFzIGFuCiAgICBfX2ludF9fIG1ldGhvZC4KQEAgLTEzMzAsNyArMTMyNiw3IEBACiBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICp2diwgaW50ICpvdmVyZmxvdykKIHsKICAgICAvKiBUaGlzIHZlcnNpb24gYnkgVGltIFBldGVycyAqLwotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIHgsIHByZXY7CiAgICAgUFlfTE9OR19MT05HIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC0xNjA2LDcgKzE2MDIsNyBAQAogICAgICovCiAgICAgaWYgKHNpemVfYSA+IFBZX1NTSVpFX1RfTUFYIC8gUHlMb25nX1NISUZUKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaXMgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLyogdGhlIGV4cHJlc3Npb24gc2l6ZV9hICogUHlMb25nX1NISUZUIGlzIG5vdyBzYWZlIGZyb20gb3ZlcmZsb3cgKi8KQEAgLTE2NzYsNyArMTY3Miw2IEBACiAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcCA9IChUWVBFKilQeVVuaWNvZGVfREFUQShzdHIpICsgc3RybGVuOyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICpwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAvKiBwb3V0WzBdIHRocm91Z2ggcG91dFtzaXplLTJdIGNvbnRyaWJ1dGUgZXhhY3RseSAgICAgICAgICAgIFwKICAgICAgICAgICAgX1B5TG9uZ19ERUNJTUFMX1NISUZUIGRpZ2l0cyBlYWNoICovICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGZvciAoaT0wOyBpIDwgc2l6ZSAtIDE7IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTc0OSw3ICsxNzQ0LDcgQEAKIGxvbmdfZm9ybWF0X2JpbmFyeShQeU9iamVjdCAqYWEsIGludCBiYXNlLCBpbnQgYWx0ZXJuYXRlLAogICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKmEgPSAoUHlMb25nT2JqZWN0ICopYWE7CisgICAgUHlMb25nT2JqZWN0ICphID0gKFB5TG9uZ09iamVjdCAqKWFhOwogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5X3NzaXplX3Qgc3o7CiAgICAgUHlfc3NpemVfdCBzaXplX2E7CkBAIC0xNzkwLDcgKzE3ODUsNyBAQAogICAgICAgICAvKiBFbnN1cmUgb3ZlcmZsb3cgZG9lc24ndCBvY2N1ciBkdXJpbmcgY29tcHV0YXRpb24gb2Ygc3ouICovCiAgICAgICAgIGlmIChzaXplX2EgPiAoUFlfU1NJWkVfVF9NQVggLSAzKSAvIFB5TG9uZ19TSElGVCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCBpcyB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgc2l6ZV9hX2luX2JpdHMgPSAoc2l6ZV9hIC0gMSkgKiBQeUxvbmdfU0hJRlQgKwpAQCAtMTk0NiwxMCArMTk0MSwxMCBAQAogICogc3RyaW5nIGNoYXJhY3RlcnMuCiAgKi8KIHN0YXRpYyBQeUxvbmdPYmplY3QgKgotbG9uZ19mcm9tX2JpbmFyeV9iYXNlKGNoYXIgKipzdHIsIGludCBiYXNlKQorbG9uZ19mcm9tX2JpbmFyeV9iYXNlKGNvbnN0IGNoYXIgKipzdHIsIGludCBiYXNlKQogewotICAgIGNoYXIgKnAgPSAqc3RyOwotICAgIGNoYXIgKnN0YXJ0ID0gcDsKKyAgICBjb25zdCBjaGFyICpwID0gKnN0cjsKKyAgICBjb25zdCBjaGFyICpzdGFydCA9IHA7CiAgICAgaW50IGJpdHNfcGVyX2NoYXI7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIFB5TG9uZ09iamVjdCAqejsKQEAgLTIwMTQsMTAgKzIwMDksMTAgQEAKICAqIElmIHVuc3VjY2Vzc2Z1bCwgTlVMTCB3aWxsIGJlIHJldHVybmVkLgogICovCiBQeU9iamVjdCAqCi1QeUxvbmdfRnJvbVN0cmluZyhjaGFyICpzdHIsIGNoYXIgKipwZW5kLCBpbnQgYmFzZSkKK1B5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogewogICAgIGludCBzaWduID0gMSwgZXJyb3JfaWZfbm9uemVybyA9IDA7Ci0gICAgY2hhciAqc3RhcnQsICpvcmlnX3N0ciA9IHN0cjsKKyAgICBjb25zdCBjaGFyICpzdGFydCwgKm9yaWdfc3RyID0gc3RyOwogICAgIFB5TG9uZ09iamVjdCAqeiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnN0cm9iajsKICAgICBQeV9zc2l6ZV90IHNsZW47CkBAIC0yMTQ2LDEzICsyMTQxLDEzIEBACiBqdXN0IDEgZGlnaXQgYXQgdGhlIHN0YXJ0LCBzbyB0aGF0IHRoZSBjb3B5aW5nIGNvZGUgd2FzIGV4ZXJjaXNlZCBmb3IgZXZlcnkKIGRpZ2l0IGJleW9uZCB0aGUgZmlyc3QuCiAqKiovCi0gICAgICAgIHJlZ2lzdGVyIHR3b2RpZ2l0cyBjOyAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgdHdvZGlnaXRzIGM7ICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLwogICAgICAgICBQeV9zc2l6ZV90IHNpemVfejsKICAgICAgICAgaW50IGk7CiAgICAgICAgIGludCBjb252d2lkdGg7CiAgICAgICAgIHR3b2RpZ2l0cyBjb252bXVsdG1heCwgY29udm11bHQ7CiAgICAgICAgIGRpZ2l0ICpweiwgKnB6c3RvcDsKLSAgICAgICAgY2hhciogc2NhbjsKKyAgICAgICAgY29uc3QgY2hhciogc2NhbjsKIAogICAgICAgICBzdGF0aWMgZG91YmxlIGxvZ19iYXNlX0JBU0VbMzddID0gezAuMGUwLH07CiAgICAgICAgIHN0YXRpYyBpbnQgY29udndpZHRoX2Jhc2VbMzddID0gezAsfTsKQEAgLTIyODAsMTkgKzIyNzUsMTkgQEAKICAgICBpZiAoeiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAocGVuZCAhPSBOVUxMKQotICAgICAgICAqcGVuZCA9IHN0cjsKKyAgICAgICAgKnBlbmQgPSAoY2hhciAqKXN0cjsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHo7CiAKICAgb25FcnJvcjoKICAgICBpZiAocGVuZCAhPSBOVUxMKQotICAgICAgICAqcGVuZCA9IHN0cjsKKyAgICAgICAgKnBlbmQgPSAoY2hhciAqKXN0cjsKICAgICBQeV9YREVDUkVGKHopOwogICAgIHNsZW4gPSBzdHJsZW4ob3JpZ19zdHIpIDwgMjAwID8gc3RybGVuKG9yaWdfc3RyKSA6IDIwMDsKICAgICBzdHJvYmogPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUob3JpZ19zdHIsIHNsZW4pOwogICAgIGlmIChzdHJvYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJVIiLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCiAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7CiAgICAgUHlfREVDUkVGKHN0cm9iaik7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzE2LDcgKzIzMTEsNyBAQAogICAgIHN0cm9iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgUHlfTUlOKGxlbiwgMjAwKSk7CiAgICAgaWYgKHN0cm9iaiAhPSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCiAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBzdHJvYmopOwogICAgICAgICBQeV9ERUNSRUYoc3Ryb2JqKTsKICAgICB9CkBAIC0yMzM3LDcgKzIzMzIsNyBAQAogUHlPYmplY3QgKgogUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KFB5T2JqZWN0ICp1LCBpbnQgYmFzZSkKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXNjaWlkaWcsICpzdHJvYmo7CisgICAgUHlPYmplY3QgKnJlc3VsdCwgKmFzY2lpZGlnOwogICAgIGNoYXIgKmJ1ZmZlciwgKmVuZCA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBidWZsZW47CiAKQEAgLTIzNTksMTMgKzIzNTQsOSBAQAogICAgICAgICBQeV9ERUNSRUYoYXNjaWlkaWcpOwogICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CiAgICAgfQotICAgIHN0cm9iaiA9IFB5U2VxdWVuY2VfR2V0U2xpY2UodSwgMCwgMjAwKTsKLSAgICBpZiAoc3Ryb2JqICE9IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKLSAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHJvYmopOwotICAgIH0KKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlLjIwMFIiLAorICAgICAgICAgICAgICAgICBiYXNlLCB1KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjQxOSwxMCArMjQxMCwyMSBAQAogICAgICAgIFRoZSBxdW90aWVudCB6IGhhcyB0aGUgc2lnbiBvZiBhKmI7CiAgICAgICAgdGhlIHJlbWFpbmRlciByIGhhcyB0aGUgc2lnbiBvZiBhLAogICAgICAgIHNvIGEgPSBiKnogKyByLiAqLwotICAgIGlmICgoUHlfU0laRShhKSA8IDApICE9IChQeV9TSVpFKGIpIDwgMCkpCi0gICAgICAgIE5FR0FURSh6KTsKLSAgICBpZiAoUHlfU0laRShhKSA8IDAgJiYgUHlfU0laRSgqcHJlbSkgIT0gMCkKLSAgICAgICAgTkVHQVRFKCpwcmVtKTsKKyAgICBpZiAoKFB5X1NJWkUoYSkgPCAwKSAhPSAoUHlfU0laRShiKSA8IDApKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKnByZW0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGlmIChQeV9TSVpFKGEpIDwgMCAmJiBQeV9TSVpFKCpwcmVtKSAhPSAwKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKHByZW0pOworICAgICAgICBpZiAoKnByZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHopOworICAgICAgICAgICAgUHlfQ0xFQVIoKnByZW0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQogICAgICpwZGl2ID0gbWF5YmVfc21hbGxfbG9uZyh6KTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI2OTgsNyArMjcwMCw3IEBACiAgICAgeCA9IF9QeUxvbmdfRnJleHAoKFB5TG9uZ09iamVjdCAqKXYsICZleHBvbmVudCk7CiAgICAgaWYgKCh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgfHwgZXhwb25lbnQgPiBEQkxfTUFYX0VYUCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIGludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOwogICAgICAgICByZXR1cm4gLTEuMDsKICAgICB9CiAgICAgcmV0dXJuIGxkZXhwKHgsIChpbnQpZXhwb25lbnQpOwpAQCAtMjkxOCw4ICsyOTIwLDExIEBACiAgICAgICAgIGJvcnJvdyAmPSAxOyAvKiBLZWVwIG9ubHkgb25lIHNpZ24gYml0ICovCiAgICAgfQogICAgIGFzc2VydChib3Jyb3cgPT0gMCk7Ci0gICAgaWYgKHNpZ24gPCAwKQotICAgICAgICBORUdBVEUoeik7CisgICAgaWYgKHNpZ24gPCAwKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gbG9uZ19ub3JtYWxpemUoeik7CiB9CiAKQEAgLTMwODYsNyArMzA5MSw3IEBACiAgICAgUHlfc3NpemVfdCBzaXplX2xvLCBzaXplX2hpOwogICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZV9uID0gQUJTKFB5X1NJWkUobikpOwogCi0gICAgc2l6ZV9sbyA9IE1JTihzaXplX24sIHNpemUpOworICAgIHNpemVfbG8gPSBQeV9NSU4oc2l6ZV9uLCBzaXplKTsKICAgICBzaXplX2hpID0gc2l6ZV9uIC0gc2l6ZV9sbzsKIAogICAgIGlmICgoaGkgPSBfUHlMb25nX05ldyhzaXplX2hpKSkgPT0gTlVMTCkKQEAgLTMzNTcsNyArMzM2Miw3IEBACiAgICAgbmJkb25lID0gMDsKICAgICB3aGlsZSAoYnNpemUgPiAwKSB7CiAgICAgICAgIFB5TG9uZ09iamVjdCAqcHJvZHVjdDsKLSAgICAgICAgY29uc3QgUHlfc3NpemVfdCBuYnRvdXNlID0gTUlOKGJzaXplLCBhc2l6ZSk7CisgICAgICAgIGNvbnN0IFB5X3NzaXplX3QgbmJ0b3VzZSA9IFB5X01JTihic2l6ZSwgYXNpemUpOwogCiAgICAgICAgIC8qIE11bHRpcGx5IHRoZSBuZXh0IHNsaWNlIG9mIGIgYnkgYS4gKi8KICAgICAgICAgbWVtY3B5KGJzbGljZS0+b2JfZGlnaXQsIGItPm9iX2RpZ2l0ICsgbmJkb25lLApAQCAtMzQxMCw4ICszNDE1LDExIEBACiAKICAgICB6ID0ga19tdWwoYSwgYik7CiAgICAgLyogTmVnYXRlIGlmIGV4YWN0bHkgb25lIG9mIHRoZSBpbnB1dHMgaXMgbmVnYXRpdmUuICovCi0gICAgaWYgKCgoUHlfU0laRShhKSBeIFB5X1NJWkUoYikpIDwgMCkgJiYgeikKLSAgICAgICAgTkVHQVRFKHopOworICAgIGlmICgoKFB5X1NJWkUoYSkgXiBQeV9TSVpFKGIpKSA8IDApICYmIHopIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUoJnopOworICAgICAgICBpZiAoeiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiAoUHlPYmplY3QgKil6OwogfQogCkBAIC0zNjQ4LDcgKzM2NTYsNyBAQAogICAgICAgICBnb3RvIHVuZGVyZmxvd19vcl96ZXJvOwogCiAgICAgLyogQ2hvb3NlIHZhbHVlIGZvciBzaGlmdDsgc2VlIGNvbW1lbnRzIGZvciBzdGVwIDEgYWJvdmUuICovCi0gICAgc2hpZnQgPSBNQVgoZGlmZiwgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHIC0gMjsKKyAgICBzaGlmdCA9IFB5X01BWChkaWZmLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcgLSAyOwogCiAgICAgaW5leGFjdCA9IDA7CiAKQEAgLTM3MTksNyArMzcyNyw3IEBACiAgICAgeF9iaXRzID0gKHhfc2l6ZS0xKSpQeUxvbmdfU0hJRlQrYml0c19pbl9kaWdpdCh4LT5vYl9kaWdpdFt4X3NpemUtMV0pOwogCiAgICAgLyogVGhlIG51bWJlciBvZiBleHRyYSBiaXRzIHRoYXQgaGF2ZSB0byBiZSByb3VuZGVkIGF3YXkuICovCi0gICAgZXh0cmFfYml0cyA9IE1BWCh4X2JpdHMsIERCTF9NSU5fRVhQIC0gc2hpZnQpIC0gREJMX01BTlRfRElHOworICAgIGV4dHJhX2JpdHMgPSBQeV9NQVgoeF9iaXRzLCBEQkxfTUlOX0VYUCAtIHNoaWZ0KSAtIERCTF9NQU5UX0RJRzsKICAgICBhc3NlcnQoZXh0cmFfYml0cyA9PSAyIHx8IGV4dHJhX2JpdHMgPT0gMyk7CiAKICAgICAvKiBSb3VuZCBieSBkaXJlY3RseSBtb2RpZnlpbmcgdGhlIGxvdyBkaWdpdCBvZiB4LiAqLwpAQCAtMzg1OCw3ICszODY2LDkgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihjKTsKICAgICAgICAgICAgIGMgPSB0ZW1wOwogICAgICAgICAgICAgdGVtcCA9IE5VTEw7Ci0gICAgICAgICAgICBORUdBVEUoYyk7CisgICAgICAgICAgICBfUHlMb25nX05lZ2F0ZSgmYyk7CisgICAgICAgICAgICBpZiAoYyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBpZiBtb2R1bHVzID09IDE6CkBAIC0zOTY0LDEwICszOTc0LDcgQEAKICAgICBnb3RvIERvbmU7CiAKICAgRXJyb3I6Ci0gICAgaWYgKHogIT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoeik7Ci0gICAgICAgIHogPSBOVUxMOwotICAgIH0KKyAgICBQeV9DTEVBUih6KTsKICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgRG9uZToKICAgICBpZiAoUHlfU0laRShiKSA+IEZJVkVBUllfQ1VUT0ZGKSB7CkBAIC00MDk3LDEwICs0MTA0LDEwIEBACiAKICAgICBzaGlmdGJ5ID0gUHlMb25nX0FzU3NpemVfdCgoUHlPYmplY3QgKiliKTsKICAgICBpZiAoc2hpZnRieSA9PSAtMUwgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaGlmdGJ5IDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm5lZ2F0aXZlIHNoaWZ0IGNvdW50Iik7Ci0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogd29yZHNoaWZ0LCByZW1zaGlmdCA9IGRpdm1vZChzaGlmdGJ5LCBQeUxvbmdfU0hJRlQpICovCiAgICAgd29yZHNoaWZ0ID0gc2hpZnRieSAvIFB5TG9uZ19TSElGVDsKQEAgLTQxMTIsOSArNDExOSwxMSBAQAogICAgICAgICArK25ld3NpemU7CiAgICAgeiA9IF9QeUxvbmdfTmV3KG5ld3NpemUpOwogICAgIGlmICh6ID09IE5VTEwpCi0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOwotICAgIGlmIChQeV9TSVpFKGEpIDwgMCkKLSAgICAgICAgTkVHQVRFKHopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlfU0laRShhKSA8IDApIHsKKyAgICAgICAgYXNzZXJ0KFB5X1JFRkNOVCh6KSA9PSAxKTsKKyAgICAgICAgUHlfU0laRSh6KSA9IC1QeV9TSVpFKHopOworICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgd29yZHNoaWZ0OyBpKyspCiAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gMDsKICAgICBhY2N1bSA9IDA7CkBAIC00MTI4LDcgKzQxMzcsNiBAQAogICAgIGVsc2UKICAgICAgICAgYXNzZXJ0KCFhY2N1bSk7CiAgICAgeiA9IGxvbmdfbm9ybWFsaXplKHopOwotICBsc2hpZnRfZXJyb3I6CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBtYXliZV9zbWFsbF9sb25nKHopOwogfQogCkBAIC00MTUzLDcgKzQxNjEsNyBAQAogCiBzdGF0aWMgUHlPYmplY3QgKgogbG9uZ19iaXR3aXNlKFB5TG9uZ09iamVjdCAqYSwKLSAgICAgICAgICAgICBpbnQgb3AsICAvKiAnJicsICd8JywgJ14nICovCisgICAgICAgICAgICAgY2hhciBvcCwgIC8qICcmJywgJ3wnLCAnXicgKi8KICAgICAgICAgICAgICBQeUxvbmdPYmplY3QgKmIpCiB7CiAgICAgaW50IG5lZ2EsIG5lZ2IsIG5lZ3o7CkBAIC00MzI4LDggKzQzMzYsNyBAQAogbG9uZ19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlPYmplY3QgKm9iYXNlID0gTlVMTCwgKnggPSBOVUxMOwotICAgIGxvbmcgYmFzZTsKLSAgICBpbnQgb3ZlcmZsb3c7CisgICAgUHlfc3NpemVfdCBiYXNlOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsieCIsICJiYXNlIiwgMH07CiAKICAgICBpZiAodHlwZSAhPSAmUHlMb25nX1R5cGUpCkBAIC00MzQ4LDEwICs0MzU1LDEwIEBACiAgICAgaWYgKG9iYXNlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeU51bWJlcl9Mb25nKHgpOwogCi0gICAgYmFzZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmFzZSwgJm92ZXJmbG93KTsKKyAgICBiYXNlID0gUHlOdW1iZXJfQXNTc2l6ZV90KG9iYXNlLCBOVUxMKTsKICAgICBpZiAoYmFzZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAob3ZlcmZsb3cgfHwgKGJhc2UgIT0gMCAmJiBiYXNlIDwgMikgfHwgYmFzZSA+IDM2KSB7CisgICAgaWYgKChiYXNlICE9IDAgJiYgYmFzZSA8IDIpIHx8IGJhc2UgPiAzNikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQoKSBiYXNlIG11c3QgYmUgPj0gMiBhbmQgPD0gMzYiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00NDMyLDcgKzQ0MzksNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdF9zcGVjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeUxvbmdfRm9ybWF0QWR2YW5jZWRXcml0ZXIoCiAgICAgICAgICZ3cml0ZXIsCiAgICAgICAgIHNlbGYsCkBAIC01MDg5LDggKzUwOTYsMTAgQEAKICAgICB9CiAjZW5kaWYKICAgICAvKiBpbml0aWFsaXplIGludF9pbmZvICovCi0gICAgaWYgKEludF9JbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkludF9JbmZvVHlwZSwgJmludF9pbmZvX2Rlc2MpOworICAgIGlmIChJbnRfSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmSW50X0luZm9UeXBlLCAmaW50X2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL21lbW9yeW9iamVjdC5jIGIvT2JqZWN0cy9tZW1vcnlvYmplY3QuYwppbmRleCAxODlhZjg4Li4xZDUyZDlkIDEwMDY0NAotLS0gYS9PYmplY3RzL21lbW9yeW9iamVjdC5jCisrKyBiL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKQEAgLTI0MDIsNyArMjQwMiw3IEBACiAKIC8qIEFzIHNlcXVlbmNlICovCiBzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgbWVtb3J5X2FzX3NlcXVlbmNlID0gewotICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCisgICAgICAgIChsZW5mdW5jKW1lbW9yeV9sZW5ndGgsICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2NvbmNhdCAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfcmVwZWF0ICovCiAgICAgICAgIChzc2l6ZWFyZ2Z1bmMpbWVtb3J5X2l0ZW0sICAgICAgICAvKiBzcV9pdGVtICovCmRpZmYgLS1naXQgYS9PYmplY3RzL21ldGhvZG9iamVjdC5jIGIvT2JqZWN0cy9tZXRob2RvYmplY3QuYwppbmRleCBmMDY4NWRkLi4xMWM4YjZlIDEwMDY0NAotLS0gYS9PYmplY3RzL21ldGhvZG9iamVjdC5jCisrKyBiL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKQEAgLTEzLDYgKzEzLDE1IEBACiAjZGVmaW5lIFB5Q0Z1bmN0aW9uX01BWEZSRUVMSVNUIDI1NgogI2VuZGlmCiAKKy8qIHVuZGVmaW5lIG1hY3JvIHRyYW1wb2xpbmUgdG8gUHlDRnVuY3Rpb25fTmV3RXggKi8KKyN1bmRlZiBQeUNGdW5jdGlvbl9OZXcKKworUHlPYmplY3QgKgorUHlDRnVuY3Rpb25fTmV3KFB5TWV0aG9kRGVmICptbCwgUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ld0V4KG1sLCBzZWxmLCBOVUxMKTsKK30KKwogUHlPYmplY3QgKgogUHlDRnVuY3Rpb25fTmV3RXgoUHlNZXRob2REZWYgKm1sLCBQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1vZHVsZSkKIHsKQEAgLTcwLDIzICs3OSwzNCBAQAogUHlPYmplY3QgKgogUHlDRnVuY3Rpb25fQ2FsbChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3KQogeworI2RlZmluZSBDSEVDS19SRVNVTFQocmVzKSBhc3NlcnQocmVzICE9IE5VTEwgfHwgUHlFcnJfT2NjdXJyZWQoKSkKKwogICAgIFB5Q0Z1bmN0aW9uT2JqZWN0KiBmID0gKFB5Q0Z1bmN0aW9uT2JqZWN0KilmdW5jOwogICAgIFB5Q0Z1bmN0aW9uIG1ldGggPSBQeUNGdW5jdGlvbl9HRVRfRlVOQ1RJT04oZnVuYyk7CiAgICAgUHlPYmplY3QgKnNlbGYgPSBQeUNGdW5jdGlvbl9HRVRfU0VMRihmdW5jKTsKKyAgICBQeU9iamVjdCAqcmVzOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIHN3aXRjaCAoUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMpICYgfihNRVRIX0NMQVNTIHwgTUVUSF9TVEFUSUMgfCBNRVRIX0NPRVhJU1QpKSB7CiAgICAgY2FzZSBNRVRIX1ZBUkFSR1M6Ci0gICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgYXJnKTsKKyAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApIHsKKyAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgYXJnKTsKKyAgICAgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFM6Ci0gICAgICAgIHJldHVybiAoKihQeUNGdW5jdGlvbldpdGhLZXl3b3JkcyltZXRoKShzZWxmLCBhcmcsIGt3KTsKKyAgICAgICAgcmVzID0gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpbWV0aCkoc2VsZiwgYXJnLCBrdyk7CisgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICByZXR1cm4gcmVzOwogICAgIGNhc2UgTUVUSF9OT0FSR1M6CiAgICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7CiAgICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIE5VTEwpOworICAgICAgICAgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBubyBhcmd1bWVudHMgKCV6ZCBnaXZlbikiLAogICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOwpAQCAtOTYsOCArMTE2LDExIEBACiAgICAgY2FzZSBNRVRIX086CiAgICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7CiAgICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCkpOworICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkgeworICAgICAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApKTsKKyAgICAgICAgICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQgKCV6ZCBnaXZlbikiLAogICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOwpAQCAtMTE0LDYgKzEzNyw4IEBACiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiUuMjAwcygpIHRha2VzIG5vIGtleXdvcmQgYXJndW1lbnRzIiwKICAgICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSk7CiAgICAgcmV0dXJuIE5VTEw7CisKKyN1bmRlZiBDSEVDS19SRVNVTFQKIH0KIAogLyogTWV0aG9kcyAodGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZHMsIHRoYXQgaXMpICovCkBAIC0zNDYsMTcgKzM3MSwzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJlZSBQeUNGdW5jdGlvbk9iamVjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1mcmVlLCBzaXplb2YoUHlDRnVuY3Rpb25PYmplY3QpKTsKIH0KLQotLyogUHlDRnVuY3Rpb25fTmV3KCkgaXMgbm93IGp1c3QgYSBtYWNybyB0aGF0IGNhbGxzIFB5Q0Z1bmN0aW9uX05ld0V4KCksCi0gICBidXQgaXQncyBwYXJ0IG9mIHRoZSBBUEkgc28gd2UgbmVlZCB0byBrZWVwIGEgZnVuY3Rpb24gYXJvdW5kIHRoYXQKLSAgIGV4aXN0aW5nIEMgZXh0ZW5zaW9ucyBjYW4gY2FsbC4KLSovCi0KLSN1bmRlZiBQeUNGdW5jdGlvbl9OZXcKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlDRnVuY3Rpb25fTmV3KFB5TWV0aG9kRGVmICosIFB5T2JqZWN0ICopOwotCi1QeU9iamVjdCAqCi1QeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKm1sLCBQeU9iamVjdCAqc2VsZikKLXsKLSAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgobWwsIHNlbGYsIE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9tb2R1bGVvYmplY3QuYyBiL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKaW5kZXggMmYyYmQzNi4uM2VhM2JlOCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9tb2R1bGVvYmplY3QuYworKysgYi9PYmplY3RzL21vZHVsZW9iamVjdC5jCkBAIC0xMSw2ICsxMSw4IEBACiAgICAgUHlPYmplY3QgKm1kX2RpY3Q7CiAgICAgc3RydWN0IFB5TW9kdWxlRGVmICptZF9kZWY7CiAgICAgdm9pZCAqbWRfc3RhdGU7CisgICAgUHlPYmplY3QgKm1kX3dlYWtsaXN0OworICAgIFB5T2JqZWN0ICptZF9uYW1lOyAgLyogZm9yIGxvZ2dpbmcgcHVycG9zZXMgYWZ0ZXIgbWRfZGljdCBpcyBjbGVhcmVkICovCiB9IFB5TW9kdWxlT2JqZWN0OwogCiBzdGF0aWMgUHlNZW1iZXJEZWYgbW9kdWxlX21lbWJlcnNbXSA9IHsKQEAgLTI2LDYgKzI4LDMzIEBACiB9OwogCiAKK3N0YXRpYyBpbnQKK21vZHVsZV9pbml0X2RpY3QoUHlNb2R1bGVPYmplY3QgKm1vZCwgUHlPYmplY3QgKm1kX2RpY3QsCisgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqZG9jKQoreworICAgIGlmIChtZF9kaWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoZG9jID09IE5VTEwpCisgICAgICAgIGRvYyA9IFB5X05vbmU7CisKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fbmFtZV9fIiwgbmFtZSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19kb2NfXyIsIGRvYykgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19wYWNrYWdlX18iLCBQeV9Ob25lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX2xvYWRlcl9fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChuYW1lKSkgeworICAgICAgICBQeV9JTkNSRUYobmFtZSk7CisgICAgICAgIFB5X1hERUNSRUYobW9kLT5tZF9uYW1lKTsKKyAgICAgICAgbW9kLT5tZF9uYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCiBQeU9iamVjdCAqCiBQeU1vZHVsZV9OZXdPYmplY3QoUHlPYmplY3QgKm5hbWUpCiB7CkBAIC0zNSwxNCArNjQsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbS0+bWRfZGVmID0gTlVMTDsKICAgICBtLT5tZF9zdGF0ZSA9IE5VTEw7CisgICAgbS0+bWRfd2Vha2xpc3QgPSBOVUxMOworICAgIG0tPm1kX25hbWUgPSBOVUxMOwogICAgIG0tPm1kX2RpY3QgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKG0tPm1kX2RpY3QgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19uYW1lX18iLCBuYW1lKSAhPSAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG0tPm1kX2RpY3QsICJfX2RvY19fIiwgUHlfTm9uZSkgIT0gMCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19wYWNrYWdlX18iLCBQeV9Ob25lKSAhPSAwKQorICAgIGlmIChtb2R1bGVfaW5pdF9kaWN0KG0sIG0tPm1kX2RpY3QsIG5hbWUsIE5VTEwpICE9IDApCiAgICAgICAgIGdvdG8gZmFpbDsKICAgICBQeU9iamVjdF9HQ19UcmFjayhtKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbTsKQEAgLTM0Nyw5ICszNzIsNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBtLT5tZF9kaWN0ID0gZGljdDsKICAgICB9Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICJfX25hbWVfXyIsIG5hbWUpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiX19kb2NfXyIsIGRvYykgPCAwKQorICAgIGlmIChtb2R1bGVfaW5pdF9kaWN0KG0sIGRpY3QsIG5hbWUsIGRvYykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNTgsMTIgKzM4MSwxNSBAQAogbW9kdWxlX2RlYWxsb2MoUHlNb2R1bGVPYmplY3QgKm0pCiB7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhtKTsKKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcgJiYgbS0+bWRfbmFtZSkgeworICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgZGVzdHJveSAlU1xuIiwgbS0+bWRfbmFtZSk7CisgICAgfQorICAgIGlmIChtLT5tZF93ZWFrbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBtKTsKICAgICBpZiAobS0+bWRfZGVmICYmIG0tPm1kX2RlZi0+bV9mcmVlKQogICAgICAgICBtLT5tZF9kZWYtPm1fZnJlZShtKTsKLSAgICBpZiAobS0+bWRfZGljdCAhPSBOVUxMKSB7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcigoUHlPYmplY3QgKiltKTsKLSAgICAgICAgUHlfREVDUkVGKG0tPm1kX2RpY3QpOwotICAgIH0KKyAgICBQeV9YREVDUkVGKG0tPm1kX2RpY3QpOworICAgIFB5X1hERUNSRUYobS0+bWRfbmFtZSk7CiAgICAgaWYgKG0tPm1kX3N0YXRlICE9IE5VTEwpCiAgICAgICAgIFB5TWVtX0ZSRUUobS0+bWRfc3RhdGUpOwogICAgIFB5X1RZUEUobSktPnRwX2ZyZWUoKFB5T2JqZWN0ICopbSk7CkBAIC0zODAsNyArNDA2LDcgQEAKICAgICBpZiAobS0+bWRfZGljdCAhPSBOVUxMKSB7CiAgICAgICAgIGxvYWRlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG0tPm1kX2RpY3QsICJfX2xvYWRlcl9fIik7CiAgICAgfQotICAgIGlmIChsb2FkZXIgIT0gTlVMTCkgeworICAgIGlmIChsb2FkZXIgIT0gTlVMTCAmJiBsb2FkZXIgIT0gUHlfTm9uZSkgewogICAgICAgICByZXByID0gUHlPYmplY3RfQ2FsbE1ldGhvZChsb2FkZXIsICJtb2R1bGVfcmVwciIsICIoTykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKiltLCBOVUxMKTsKICAgICAgICAgaWYgKHJlcHIgPT0gTlVMTCkgewpAQCAtNDA0LDEwICs0MzAsMTAgQEAKICAgICBmaWxlbmFtZSA9IFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KChQeU9iamVjdCAqKW0pOwogICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIC8qIFRoZXJlJ3Mgbm8gbS5fX2ZpbGVfXywgc28gaWYgdGhlcmUgd2FzIGFuIF9fbG9hZGVyX18sIHVzZSB0aGF0IGluCisgICAgICAgIC8qIFRoZXJlJ3Mgbm8gbS5fX2ZpbGVfXywgc28gaWYgdGhlcmUgd2FzIGEgX19sb2FkZXJfXywgdXNlIHRoYXQgaW4KICAgICAgICAgICogdGhlIHJlcHIsIG90aGVyd2lzZSwgdGhlIG9ubHkgdGhpbmcgeW91IGNhbiB1c2UgaXMgbS5fX25hbWVfXwogICAgICAgICAgKi8KLSAgICAgICAgaWYgKGxvYWRlciA9PSBOVUxMKSB7CisgICAgICAgIGlmIChsb2FkZXIgPT0gTlVMTCB8fCBsb2FkZXIgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSPiIsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtNTA5LDcgKzUzNSw3IEBACiAgICAgKHRyYXZlcnNlcHJvYyltb2R1bGVfdHJhdmVyc2UsICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KW1vZHVsZV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIG9mZnNldG9mKFB5TW9kdWxlT2JqZWN0LCBtZF93ZWFrbGlzdCksICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgbW9kdWxlX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCmRpZmYgLS1naXQgYS9PYmplY3RzL25hbWVzcGFjZW9iamVjdC5jIGIvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYwppbmRleCBmZjI3OGQzLi45ZTk1MDk0IDEwMDY0NAotLS0gYS9PYmplY3RzL25hbWVzcGFjZW9iamVjdC5jCisrKyBiL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBpZiAoYXJncyAhPSBOVUxMKSB7CiAgICAgICAgIFB5X3NzaXplX3QgYXJnY291bnQgPSBQeU9iamVjdF9TaXplKGFyZ3MpOwogICAgICAgICBpZiAoYXJnY291bnQgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGFyZ2NvdW50OworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBlbHNlIGlmIChhcmdjb3VudCA+IDApIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJubyBwb3NpdGlvbmFsIGFyZ3VtZW50cyBleHBlY3RlZCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNjYsMTYgKzY2LDIwIEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLW5hbWVzcGFjZV9yZXByKF9QeU5hbWVzcGFjZU9iamVjdCAqbnMpCituYW1lc3BhY2VfcmVwcihQeU9iamVjdCAqbnMpCiB7CiAgICAgaW50IGksIGxvb3BfZXJyb3IgPSAwOwogICAgIFB5T2JqZWN0ICpwYWlycyA9IE5VTEwsICpkID0gTlVMTCwgKmtleXMgPSBOVUxMLCAqa2V5c19pdGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqa2V5OwogICAgIFB5T2JqZWN0ICpzZXBhcmF0b3IsICpwYWlyc3JlcHIsICpyZXByID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogbmFtZTsKIAotICAgIGkgPSBQeV9SZXByRW50ZXIoKFB5T2JqZWN0ICopbnMpOworICAgIG5hbWUgPSAoUHlfVFlQRShucykgPT0gJl9QeU5hbWVzcGFjZV9UeXBlKSA/ICJuYW1lc3BhY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnMtPm9iX3R5cGUtPnRwX25hbWU7CisKKyAgICBpID0gUHlfUmVwckVudGVyKG5zKTsKICAgICBpZiAoaSAhPSAwKSB7Ci0gICAgICAgIHJldHVybiBpID4gMCA/IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJuYW1lc3BhY2UoLi4uKSIpIDogTlVMTDsKKyAgICAgICAgcmV0dXJuIGkgPiAwID8gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKC4uLikiLCBuYW1lKSA6IE5VTEw7CiAgICAgfQogCiAgICAgcGFpcnMgPSBQeUxpc3RfTmV3KDApOwpAQCAtMTI3LDggKzEzMSw3IEBACiAgICAgaWYgKHBhaXJzcmVwciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyglUykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFB5T2JqZWN0ICopbnMpLT5vYl90eXBlLT50cF9uYW1lLCBwYWlyc3JlcHIpOworICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoJVMpIiwgbmFtZSwgcGFpcnNyZXByKTsKICAgICBQeV9ERUNSRUYocGFpcnNyZXByKTsKIAogZXJyb3I6CkBAIC0xMzYsNyArMTM5LDcgQEAKICAgICBQeV9YREVDUkVGKGQpOwogICAgIFB5X1hERUNSRUYoa2V5cyk7CiAgICAgUHlfWERFQ1JFRihrZXlzX2l0ZXIpOwotICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKilucyk7CisgICAgUHlfUmVwckxlYXZlKG5zKTsKIAogICAgIHJldHVybiByZXByOwogfQpAQCAtMTU4LDE0ICsxNjEsNDkgQEAKIH0KIAogCitzdGF0aWMgUHlPYmplY3QgKgorbmFtZXNwYWNlX3JpY2hjb21wYXJlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIsIGludCBvcCkKK3sKKyAgICBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShzZWxmLCAoUHlPYmplY3QgKikmX1B5TmFtZXNwYWNlX1R5cGUpICYmCisgICAgICAgICAgICBQeU9iamVjdF9Jc0luc3RhbmNlKG90aGVyLCAoUHlPYmplY3QgKikmX1B5TmFtZXNwYWNlX1R5cGUpKQorICAgICAgICByZXR1cm4gUHlPYmplY3RfUmljaENvbXBhcmUoKChfUHlOYW1lc3BhY2VPYmplY3QgKilzZWxmKS0+bnNfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfUHlOYW1lc3BhY2VPYmplY3QgKilvdGhlciktPm5zX2RpY3QsIG9wKTsKKyAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOworICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKK30KKworCitQeURvY19TVFJWQVIobmFtZXNwYWNlX3JlZHVjZV9fZG9jX18sICJSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCituYW1lc3BhY2VfcmVkdWNlKF9QeU5hbWVzcGFjZU9iamVjdCAqbnMpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCwgKmFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKworICAgIGlmICghYXJncykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXN1bHQgPSBQeVR1cGxlX1BhY2soMywgKFB5T2JqZWN0ICopUHlfVFlQRShucyksIGFyZ3MsIG5zLT5uc19kaWN0KTsKKyAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgUHlNZXRob2REZWYgbmFtZXNwYWNlX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pbmFtZXNwYWNlX3JlZHVjZSwgTUVUSF9OT0FSR1MsCisgICAgIG5hbWVzcGFjZV9yZWR1Y2VfX2RvY19ffSwKKyAgICB7TlVMTCwgICAgICAgICBOVUxMfSAgLyogc2VudGluZWwgKi8KK307CisKKwogUHlEb2NfU1RSVkFSKG5hbWVzcGFjZV9kb2MsCiAiQSBzaW1wbGUgYXR0cmlidXRlLWJhc2VkIG5hbWVzcGFjZS5cblwKIFxuXAotbmFtZXNwYWNlKCoqa3dhcmdzKSIpOworU2ltcGxlTmFtZXNwYWNlKCoqa3dhcmdzKSIpOwogCiBQeVR5cGVPYmplY3QgX1B5TmFtZXNwYWNlX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKLSAgICAibmFtZXNwYWNlIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICAidHlwZXMuU2ltcGxlTmFtZXNwYWNlIiwgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KICAgICBzaXplb2YoX1B5TmFtZXNwYWNlT2JqZWN0KSwgICAgICAgICAgICAgICAgIC8qIHRwX3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgKGRlc3RydWN0b3IpbmFtZXNwYWNlX2RlYWxsb2MsICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCkBAIC0xODgsMTEgKzIyNiwxMSBAQAogICAgIG5hbWVzcGFjZV9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYyluYW1lc3BhY2VfdHJhdmVyc2UsICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KW5hbWVzcGFjZV9jbGVhciwgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgbmFtZXNwYWNlX3JpY2hjb21wYXJlLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgbmFtZXNwYWNlX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgbmFtZXNwYWNlX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvb2JqZWN0LmMgYi9PYmplY3RzL29iamVjdC5jCmluZGV4IDk0OWU3ZGMuLjk1YTUzMzQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9vYmplY3QuYwpAQCAtMjIsNyArMjIsNyBAQAogICAgIG8gPSBfUHlEaWN0X0R1bW15KCk7CiAgICAgaWYgKG8gIT0gTlVMTCkKICAgICAgICAgdG90YWwgLT0gby0+b2JfcmVmY250OwotICAgIG8gPSBfUHlTZXRfRHVtbXkoKTsKKyAgICBvID0gX1B5U2V0X0R1bW15OwogICAgIGlmIChvICE9IE5VTEwpCiAgICAgICAgIHRvdGFsIC09IG8tPm9iX3JlZmNudDsKICAgICByZXR1cm4gdG90YWw7CkBAIC0yNTUsNiArMjU1LDcyIEBACiAgICAgcmV0dXJuIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCB0cCwgbml0ZW1zKTsKIH0KIAordm9pZAorUHlPYmplY3RfQ2FsbEZpbmFsaXplcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShzZWxmKTsKKworICAgIC8qIFRoZSBmb3JtZXIgY291bGQgaGFwcGVuIG9uIGhlYXB0eXBlcyBjcmVhdGVkIGZyb20gdGhlIEMgQVBJLCBlLmcuCisgICAgICAgUHlUeXBlX0Zyb21TcGVjKCkuICovCisgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0cCwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSB8fAorICAgICAgICB0cC0+dHBfZmluYWxpemUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIC8qIHRwX2ZpbmFsaXplIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLiAqLworICAgIGlmIChQeVR5cGVfSVNfR0ModHApICYmIF9QeUdDX0ZJTkFMSVpFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHAtPnRwX2ZpbmFsaXplKHNlbGYpOworICAgIGlmIChQeVR5cGVfSVNfR0ModHApKQorICAgICAgICBfUHlHQ19TRVRfRklOQUxJWkVEKHNlbGYsIDEpOworfQorCitpbnQKK1B5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHJlZmNudDsKKworICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLworICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgIT0gMCkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MgY2FsbGVkIG9uICIKKyAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHdpdGggYSBub24temVybyByZWZjb3VudCIpOworICAgIH0KKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgUHlPYmplY3RfQ2FsbEZpbmFsaXplcihzZWxmKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCisKKyAgICAvKiB0cF9maW5hbGl6ZSByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7CisgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisKKyAgICBpZiAoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpKSB7CisgICAgICAgIGFzc2VydChfUHlHQ19SRUZTKHNlbGYpICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICB9CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCisgICAgcmV0dXJuIC0xOworfQorCiBpbnQKIFB5T2JqZWN0X1ByaW50KFB5T2JqZWN0ICpvcCwgRklMRSAqZnAsIGludCBmbGFncykKIHsKQEAgLTM0MCwxMSArNDA2LDE3IEBACiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWw7CiAjZW5kaWYKKyAgICAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9iamVjdCAgOiAiKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBnaWwgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCisKKyAgICAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAgICAgICAgICh2b2lkKVB5T2JqZWN0X1ByaW50KG9wLCBzdGRlcnIsIDApOworICAgICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbCk7CiAjZW5kaWYKQEAgLTM3Nyw2ICs0NDksMTQgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfcmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPm9iX3R5cGUtPnRwX25hbWUsIHYpOworCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9SZXByKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIHJlcyA9ICgqdi0+b2JfdHlwZS0+dHBfcmVwcikodik7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQxOSw2ICs0OTksMTMgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfc3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeU9iamVjdF9SZXByKHYpOwogCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9TdHIoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgLyogSXQgaXMgcG9zc2libGUgZm9yIGEgdHlwZSB0byBoYXZlIGEgdHBfc3RyIHJlcHJlc2VudGF0aW9uIHRoYXQgbG9vcHMKICAgICAgICBpbmZpbml0ZWx5LiAqLwogICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBnZXR0aW5nIHRoZSBzdHIgb2YgYW4gb2JqZWN0IikpCkBAIC00NTEsNiArNTM4LDkgQEAKICAgICBpZiAocmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkocmVwcikpCisgICAgICAgIHJldHVybiByZXByOworCiAgICAgLyogcmVwciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgUHlVbmljb2RlIG9iamVjdCBieSBQeU9iamVjdF9SZXByICovCiAgICAgYXNjaWkgPSBfUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcocmVwciwgImJhY2tzbGFzaHJlcGxhY2UiKTsKICAgICBQeV9ERUNSRUYocmVwcik7CkBAIC0xMzE3LDEyICsxNDA3LDExIEBACiBfZGlyX2xvY2Fscyh2b2lkKQogewogICAgIFB5T2JqZWN0ICpuYW1lczsKLSAgICBQeU9iamVjdCAqbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgIFB5T2JqZWN0ICpsb2NhbHM7CiAKLSAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiZnJhbWUgZG9lcyBub3QgZXhpc3QiKTsKKyAgICBsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgaWYgKGxvY2FscyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICBuYW1lcyA9IFB5TWFwcGluZ19LZXlzKGxvY2Fscyk7CiAgICAgaWYgKCFuYW1lcykKQEAgLTE1MjQsMTIgKzE2MTMsMjEgQEAKICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CiB9CiAKK3N0YXRpYyB2b2lkCitub3RpbXBsZW1lbnRlZF9kZWFsbG9jKFB5T2JqZWN0KiBpZ25vcmUpCit7CisgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgZ2V0IGNhbGxlZCwgYnV0IHdlIGFsc28gZG9uJ3Qgd2FudCB0byBTRUdWIGlmCisgICAgICogd2UgYWNjaWRlbnRhbGx5IGRlY3JlZiBOb3RJbXBsZW1lbnRlZCBvdXQgb2YgZXhpc3RlbmNlLgorICAgICAqLworICAgIFB5X0ZhdGFsRXJyb3IoImRlYWxsb2NhdGluZyBOb3RJbXBsZW1lbnRlZCIpOworfQorCiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5Tm90SW1wbGVtZW50ZWRfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJOb3RJbXBsZW1lbnRlZFR5cGUiLAogICAgIDAsCiAgICAgMCwKLSAgICBub25lX2RlYWxsb2MsICAgICAgIC8qdHBfZGVhbGxvYyovIC8qbmV2ZXIgY2FsbGVkKi8KKyAgICBub3RpbXBsZW1lbnRlZF9kZWFsbG9jLCAgICAgICAvKnRwX2RlYWxsb2MqLyAvKm5ldmVyIGNhbGxlZCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwpAQCAtMTY5OSwxNSArMTc5Nyw2IEBACiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlNZW1iZXJEZXNjcl9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbWVtYmVyIGRlc2NyaXB0b3IgdHlwZSIpOwogCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlGaWx0ZXJfVHlwZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGZpbHRlciB0eXBlIik7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeU1hcF9UeXBlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbWFwIHR5cGUiKTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5WmlwX1R5cGUpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSB6aXAgdHlwZSIpOwotCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmX1B5TmFtZXNwYWNlX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBuYW1lc3BhY2UgdHlwZSIpOwogCkBAIC0xNzQ5LDEwICsxODM4LDEwIEBACiB9CiAKIHZvaWQKLV9QeV9Gb3JnZXRSZWZlcmVuY2UocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorX1B5X0ZvcmdldFJlZmVyZW5jZShQeU9iamVjdCAqb3ApCiB7CiAjaWZkZWYgU0xPV19VTlJFRl9DSEVDSwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpwOworICAgIFB5T2JqZWN0ICpwOwogI2VuZGlmCiAgICAgaWYgKG9wLT5vYl9yZWZjbnQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJVTlJFRiBuZWdhdGl2ZSByZWZjbnQiKTsKQEAgLTE4NTYsMjYgKzE5NDUsNiBAQAogUHlfc3NpemVfdCAoKl9QeV9hYnN0cmFjdF9oYWNrKShQeU9iamVjdCAqKSA9IFB5T2JqZWN0X1NpemU7CiAKIAotLyogUHl0aG9uJ3MgbWFsbG9jIHdyYXBwZXJzIChzZWUgcHltZW0uaCkgKi8KLQotdm9pZCAqCi1QeU1lbV9NYWxsb2Moc2l6ZV90IG5ieXRlcykKLXsKLSAgICByZXR1cm4gUHlNZW1fTUFMTE9DKG5ieXRlcyk7Ci19Ci0KLXZvaWQgKgotUHlNZW1fUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBQeU1lbV9SRUFMTE9DKHAsIG5ieXRlcyk7Ci19Ci0KLXZvaWQKLVB5TWVtX0ZyZWUodm9pZCAqcCkKLXsKLSAgICBQeU1lbV9GUkVFKHApOwotfQotCiB2b2lkCiBfUHlPYmplY3RfRGVidWdUeXBlU3RhdHMoRklMRSAqb3V0KQogewpAQCAtMTg4NSw3ICsxOTU0LDYgQEAKICAgICBfUHlGcmFtZV9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5TGlzdF9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5TWV0aG9kX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKLSAgICBfUHlTZXRfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogICAgIF9QeVR1cGxlX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKIH0KIApAQCAtMTkyNyw3ICsxOTk1LDggQEAKICAgICAgICAgaWYgKFB5TGlzdF9HRVRfSVRFTShsaXN0LCBpKSA9PSBvYmopCiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgUHlMaXN0X0FwcGVuZChsaXN0LCBvYmopOworICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIG9iaikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE5MzcsMTMgKzIwMDYsMTggQEAKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBQeU9iamVjdCAqbGlzdDsKICAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwogCiAgICAgZGljdCA9IFB5VGhyZWFkU3RhdGVfR2V0RGljdCgpOwogICAgIGlmIChkaWN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBmaW5hbGx5OworCiAgICAgbGlzdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSk7CiAgICAgaWYgKGxpc3QgPT0gTlVMTCB8fCAhUHlMaXN0X0NoZWNrKGxpc3QpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGdvdG8gZmluYWxseTsKKwogICAgIGkgPSBQeUxpc3RfR0VUX1NJWkUobGlzdCk7CiAgICAgLyogQ291bnQgYmFja3dhcmRzIGJlY2F1c2Ugd2UgYWx3YXlzIGV4cGVjdCBvYmogdG8gYmUgbGlzdFstMV0gKi8KICAgICB3aGlsZSAoLS1pID49IDApIHsKQEAgLTE5NTIsNiArMjAyNiwxMCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKK2ZpbmFsbHk6CisgICAgLyogaWdub3JlIGV4Y2VwdGlvbnMgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gcmVwb3J0IHRoZW0uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKIH0KIAogLyogVHJhc2hjYW4gc3VwcG9ydC4gKi8KQEAgLTE5NzIsNyArMjA1MCw3IEBACiBfUHlUcmFzaF9kZXBvc2l0X29iamVjdChQeU9iamVjdCAqb3ApCiB7CiAgICAgYXNzZXJ0KFB5T2JqZWN0X0lTX0dDKG9wKSk7Ci0gICAgYXNzZXJ0KF9QeV9BU19HQyhvcCktPmdjLmdjX3JlZnMgPT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOworICAgIGFzc2VydChfUHlHQ19SRUZTKG9wKSA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CiAgICAgYXNzZXJ0KG9wLT5vYl9yZWZjbnQgPT0gMCk7CiAgICAgX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcHJldiA9IChQeUdDX0hlYWQgKilfUHlUcmFzaF9kZWxldGVfbGF0ZXI7CiAgICAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyID0gb3A7CkBAIC0xOTg0LDcgKzIwNjIsNyBAQAogewogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAgICAgYXNzZXJ0KFB5T2JqZWN0X0lTX0dDKG9wKSk7Ci0gICAgYXNzZXJ0KF9QeV9BU19HQyhvcCktPmdjLmdjX3JlZnMgPT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOworICAgIGFzc2VydChfUHlHQ19SRUZTKG9wKSA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CiAgICAgYXNzZXJ0KG9wLT5vYl9yZWZjbnQgPT0gMCk7CiAgICAgX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcHJldiA9IChQeUdDX0hlYWQgKikgdHN0YXRlLT50cmFzaF9kZWxldGVfbGF0ZXI7CiAgICAgdHN0YXRlLT50cmFzaF9kZWxldGVfbGF0ZXIgPSBvcDsKZGlmZiAtLWdpdCBhL09iamVjdHMvb2JtYWxsb2MuYyBiL09iamVjdHMvb2JtYWxsb2MuYwppbmRleCBjMjYxYjY4Li4wMDRjZmFhIDEwMDY0NAotLS0gYS9PYmplY3RzL29ibWFsbG9jLmMKKysrIGIvT2JqZWN0cy9vYm1hbGxvYy5jCkBAIC0xLDE0ICsxLDM3NCBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCi0jaWZkZWYgV0lUSF9QWU1BTExPQworLyogUHl0aG9uJ3MgbWFsbG9jIHdyYXBwZXJzIChzZWUgcHltZW0uaCkgKi8KIAotI2lmZGVmIEhBVkVfTU1BUAotICNpbmNsdWRlIDxzeXMvbW1hbi5oPgotICNpZmRlZiBNQVBfQU5PTllNT1VTCi0gICNkZWZpbmUgQVJFTkFTX1VTRV9NTUFQCisjaWZkZWYgUFlNQUxMT0NfREVCVUcgICAvKiBXSVRIX1BZTUFMTE9DICYmIFBZTUFMTE9DX0RFQlVHICovCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCogX1B5TWVtX0RlYnVnTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApOworc3RhdGljIHZvaWQqIF9QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKworc3RhdGljIHZvaWQgX1B5T2JqZWN0X0RlYnVnRHVtcEFkZHJlc3MoY29uc3Qgdm9pZCAqcCk7CitzdGF0aWMgdm9pZCBfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoY2hhciBhcGlfaWQsIGNvbnN0IHZvaWQgKnApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9faGFzX2ZlYXR1cmUpICAvKiBDbGFuZyAqLworICNpZiBfX2hhc19mZWF0dXJlKGFkZHJlc3Nfc2FuaXRpemVyKSAgLyogaXMgQVNBTiBlbmFibGVkPyAqLworICAjZGVmaW5lIEFUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUyBcCisgICAgICAgIF9fYXR0cmlidXRlX18oKG5vX2FkZHJlc3Nfc2FmZXR5X2FuYWx5c2lzKSkgXAorICAgICAgICBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorICNlbHNlCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCisgI2VuZGlmCisjZWxzZQorICNpZiBkZWZpbmVkKF9fU0FOSVRJWkVfQUREUkVTU19fKSAgLyogR0NDIDQuOC54LCBpcyBBU0FOIGVuYWJsZWQ/ICovCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXygobm9fYWRkcmVzc19zYWZldHlfYW5hbHlzaXMpKSBcCisgICAgICAgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisgI2Vsc2UKKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKICAjZW5kaWYKICNlbmRpZgogCisjaWZkZWYgV0lUSF9QWU1BTExPQworCisjaWZkZWYgTVNfV0lORE9XUworIyAgaW5jbHVkZSA8d2luZG93cy5oPgorI2VsaWYgZGVmaW5lZChIQVZFX01NQVApCisjICBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyAgaWZkZWYgTUFQX0FOT05ZTU9VUworIyAgICBkZWZpbmUgQVJFTkFTX1VTRV9NTUFQCisjICBlbmRpZgorI2VuZGlmCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkKiBfUHlPYmplY3RfTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgX1B5T2JqZWN0X0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKTsKK3N0YXRpYyB2b2lkKiBfUHlPYmplY3RfUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworI2VuZGlmCisKKworc3RhdGljIHZvaWQgKgorX1B5TWVtX1Jhd01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIC8qIFB5TWVtX01hbGxvYygwKSBtZWFucyBtYWxsb2MoMSkuIFNvbWUgc3lzdGVtcyB3b3VsZCByZXR1cm4gTlVMTAorICAgICAgIGZvciBtYWxsb2MoMCksIHdoaWNoIHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuIFNvbWUgcGxhdGZvcm1zIHdvdWxkCisgICAgICAgcmV0dXJuIGEgcG9pbnRlciB3aXRoIG5vIG1lbW9yeSBiZWhpbmQgaXQsIHdoaWNoIHdvdWxkIGJyZWFrIHB5bWFsbG9jLgorICAgICAgIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHNpemUgPSAxOworICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9SYXdSZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBzaXplID0gMTsKKyAgICByZXR1cm4gcmVhbGxvYyhwdHIsIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorX1B5TWVtX1Jhd0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgZnJlZShwdHIpOworfQorCisKKyNpZmRlZiBNU19XSU5ET1dTCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFWaXJ0dWFsQWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gVmlydHVhbEFsbG9jKE5VTEwsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBNRU1fQ09NTUlUIHwgTUVNX1JFU0VSVkUsIFBBR0VfUkVBRFdSSVRFKTsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYVZpcnR1YWxGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBWaXJ0dWFsRnJlZShwdHIsIDAsIE1FTV9SRUxFQVNFKTsKK30KKworI2VsaWYgZGVmaW5lZChBUkVOQVNfVVNFX01NQVApCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFNbWFwKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCAqcHRyOworICAgIHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7CisgICAgaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBhc3NlcnQocHRyICE9IE5VTEwpOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlPYmplY3RfQXJlbmFNdW5tYXAodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIG11bm1hcChwdHIsIHNpemUpOworfQorCisjZWxzZQorc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X0FyZW5hTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYUZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIGZyZWUocHRyKTsKK30KKyNlbmRpZgorCisKKyNkZWZpbmUgUFlSQVdfRlVOQ1MgX1B5TWVtX1Jhd01hbGxvYywgX1B5TWVtX1Jhd1JlYWxsb2MsIF9QeU1lbV9SYXdGcmVlCisjaWZkZWYgV0lUSF9QWU1BTExPQworIyAgZGVmaW5lIFBZT0JKX0ZVTkNTIF9QeU9iamVjdF9NYWxsb2MsIF9QeU9iamVjdF9SZWFsbG9jLCBfUHlPYmplY3RfRnJlZQorI2Vsc2UKKyMgIGRlZmluZSBQWU9CSl9GVU5DUyBQWVJBV19GVU5DUworI2VuZGlmCisjZGVmaW5lIFBZTUVNX0ZVTkNTIFBZUkFXX0ZVTkNTCisKKyNpZmRlZiBQWU1BTExPQ19ERUJVRwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIFdlIHRhZyBlYWNoIGJsb2NrIHdpdGggYW4gQVBJIElEIGluIG9yZGVyIHRvIHRhZyBBUEkgdmlvbGF0aW9ucyAqLworICAgIGNoYXIgYXBpX2lkOworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworfSBkZWJ1Z19hbGxvY19hcGlfdDsKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGRlYnVnX2FsbG9jX2FwaV90IHJhdzsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCBtZW07CisgICAgZGVidWdfYWxsb2NfYXBpX3Qgb2JqOworfSBfUHlNZW1fRGVidWcgPSB7CisgICAgeydyJywge05VTEwsIFBZUkFXX0ZVTkNTfX0sCisgICAgeydtJywge05VTEwsIFBZTUVNX0ZVTkNTfX0sCisgICAgeydvJywge05VTEwsIFBZT0JKX0ZVTkNTfX0KKyAgICB9OworCisjZGVmaW5lIFBZREJHX0ZVTkNTIF9QeU1lbV9EZWJ1Z01hbGxvYywgX1B5TWVtX0RlYnVnUmVhbGxvYywgX1B5TWVtX0RlYnVnRnJlZQorI2VuZGlmCisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlNZW1fUmF3ID0geworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgJl9QeU1lbV9EZWJ1Zy5yYXcsIFBZREJHX0ZVTkNTCisjZWxzZQorICAgIE5VTEwsIFBZUkFXX0ZVTkNTCisjZW5kaWYKKyAgICB9OworCitzdGF0aWMgUHlNZW1BbGxvY2F0b3IgX1B5TWVtID0geworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgJl9QeU1lbV9EZWJ1Zy5tZW0sIFBZREJHX0ZVTkNTCisjZWxzZQorICAgIE5VTEwsIFBZTUVNX0ZVTkNTCisjZW5kaWYKKyAgICB9OworCitzdGF0aWMgUHlNZW1BbGxvY2F0b3IgX1B5T2JqZWN0ID0geworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgJl9QeU1lbV9EZWJ1Zy5vYmosIFBZREJHX0ZVTkNTCisjZWxzZQorICAgIE5VTEwsIFBZT0JKX0ZVTkNTCisjZW5kaWYKKyAgICB9OworCisjdW5kZWYgUFlSQVdfRlVOQ1MKKyN1bmRlZiBQWU1FTV9GVU5DUworI3VuZGVmIFBZT0JKX0ZVTkNTCisjdW5kZWYgUFlEQkdfRlVOQ1MKKworc3RhdGljIFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgX1B5T2JqZWN0X0FyZW5hID0ge05VTEwsCisjaWZkZWYgTVNfV0lORE9XUworICAgIF9QeU9iamVjdF9BcmVuYVZpcnR1YWxBbGxvYywgX1B5T2JqZWN0X0FyZW5hVmlydHVhbEZyZWUKKyNlbGlmIGRlZmluZWQoQVJFTkFTX1VTRV9NTUFQKQorICAgIF9QeU9iamVjdF9BcmVuYU1tYXAsIF9QeU9iamVjdF9BcmVuYU11bm1hcAorI2Vsc2UKKyAgICBfUHlPYmplY3RfQXJlbmFNYWxsb2MsIF9QeU9iamVjdF9BcmVuYUZyZWUKKyNlbmRpZgorICAgIH07CisKK3ZvaWQKK1B5TWVtX1NldHVwRGVidWdIb29rcyh2b2lkKQoreworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7CisKKyAgICBhbGxvYy5tYWxsb2MgPSBfUHlNZW1fRGVidWdNYWxsb2M7CisgICAgYWxsb2MucmVhbGxvYyA9IF9QeU1lbV9EZWJ1Z1JlYWxsb2M7CisgICAgYWxsb2MuZnJlZSA9IF9QeU1lbV9EZWJ1Z0ZyZWU7CisKKyAgICBpZiAoX1B5TWVtX1Jhdy5tYWxsb2MgIT0gX1B5TWVtX0RlYnVnTWFsbG9jKSB7CisgICAgICAgIGFsbG9jLmN0eCA9ICZfUHlNZW1fRGVidWcucmF3OworICAgICAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJl9QeU1lbV9EZWJ1Zy5yYXcuYWxsb2MpOworICAgICAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jKTsKKyAgICB9CisKKyAgICBpZiAoX1B5TWVtLm1hbGxvYyAhPSBfUHlNZW1fRGVidWdNYWxsb2MpIHsKKyAgICAgICAgYWxsb2MuY3R4ID0gJl9QeU1lbV9EZWJ1Zy5tZW07CisgICAgICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmX1B5TWVtX0RlYnVnLm1lbS5hbGxvYyk7CisgICAgICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2MpOworICAgIH0KKworICAgIGlmIChfUHlPYmplY3QubWFsbG9jICE9IF9QeU1lbV9EZWJ1Z01hbGxvYykgeworICAgICAgICBhbGxvYy5jdHggPSAmX1B5TWVtX0RlYnVnLm9iajsKKyAgICAgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9PQkosICZfUHlNZW1fRGVidWcub2JqLmFsbG9jKTsKKyAgICAgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9PQkosICZhbGxvYyk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQKK1B5TWVtX0dldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpCit7CisgICAgc3dpdGNoKGRvbWFpbikKKyAgICB7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fUkFXOiAqYWxsb2NhdG9yID0gX1B5TWVtX1JhdzsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiAqYWxsb2NhdG9yID0gX1B5TWVtOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6ICphbGxvY2F0b3IgPSBfUHlPYmplY3Q7IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIHVua25vd24gZG9tYWluICovCisgICAgICAgIGFsbG9jYXRvci0+Y3R4ID0gTlVMTDsKKyAgICAgICAgYWxsb2NhdG9yLT5tYWxsb2MgPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPnJlYWxsb2MgPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPmZyZWUgPSBOVUxMOworICAgIH0KK30KKwordm9pZAorUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IF9QeU1lbV9SYXcgPSAqYWxsb2NhdG9yOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IF9QeU1lbSA9ICphbGxvY2F0b3I7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogX1B5T2JqZWN0ID0gKmFsbG9jYXRvcjsgYnJlYWs7CisgICAgLyogaWdub3JlIHVua25vd24gZG9tYWluICovCisgICAgfQorCit9CisKK3ZvaWQKK1B5T2JqZWN0X0dldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICAqYWxsb2NhdG9yID0gX1B5T2JqZWN0X0FyZW5hOworfQorCit2b2lkCitQeU9iamVjdF9TZXRBcmVuYUFsbG9jYXRvcihQeU9iamVjdEFyZW5hQWxsb2NhdG9yICphbGxvY2F0b3IpCit7CisgICAgX1B5T2JqZWN0X0FyZW5hID0gKmFsbG9jYXRvcjsKK30KKwordm9pZCAqCitQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgLyoKKyAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KKyAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjaworICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgorICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIHNpemUgPCAwIGlzIG5vdCByZXF1aXJlZC4KKyAgICAgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9QeU1lbV9SYXcubWFsbG9jKF9QeU1lbV9SYXcuY3R4LCBzaXplKTsKK30KKwordm9pZCoKK1B5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbV9SYXcucmVhbGxvYyhfUHlNZW1fUmF3LmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3ZvaWQgUHlNZW1fUmF3RnJlZSh2b2lkICpwdHIpCit7CisgICAgX1B5TWVtX1Jhdy5mcmVlKF9QeU1lbV9SYXcuY3R4LCBwdHIpOworfQorCit2b2lkICoKK1B5TWVtX01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlNZW0ubWFsbG9jKF9QeU1lbS5jdHgsIHNpemUpOworfQorCit2b2lkICoKK1B5TWVtX1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbS5yZWFsbG9jKF9QeU1lbS5jdHgsIHB0ciwgbmV3X3NpemUpOworfQorCit2b2lkCitQeU1lbV9GcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlNZW0uZnJlZShfUHlNZW0uY3R4LCBwdHIpOworfQorCitjaGFyICoKK19QeU1lbV9SYXdTdHJkdXAoY29uc3QgY2hhciAqc3RyKQoreworICAgIHNpemVfdCBzaXplOworICAgIGNoYXIgKmNvcHk7CisKKyAgICBzaXplID0gc3RybGVuKHN0cikgKyAxOworICAgIGNvcHkgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZSk7CisgICAgaWYgKGNvcHkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbWVtY3B5KGNvcHksIHN0ciwgc2l6ZSk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK2NoYXIgKgorX1B5TWVtX1N0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgY2hhciAqY29weTsKKworICAgIHNpemUgPSBzdHJsZW4oc3RyKSArIDE7CisgICAgY29weSA9IFB5TWVtX01hbGxvYyhzaXplKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtZW1jcHkoY29weSwgc3RyLCBzaXplKTsKKyAgICByZXR1cm4gY29weTsKK30KKwordm9pZCAqCitQeU9iamVjdF9NYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKHNpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5T2JqZWN0Lm1hbGxvYyhfUHlPYmplY3QuY3R4LCBzaXplKTsKK30KKwordm9pZCAqCitQeU9iamVjdF9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChuZXdfc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlPYmplY3QucmVhbGxvYyhfUHlPYmplY3QuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKwordm9pZAorUHlPYmplY3RfRnJlZSh2b2lkICpwdHIpCit7CisgICAgX1B5T2JqZWN0LmZyZWUoX1B5T2JqZWN0LmN0eCwgcHRyKTsKK30KKworCisjaWZkZWYgV0lUSF9QWU1BTExPQworCiAjaWZkZWYgV0lUSF9WQUxHUklORAogI2luY2x1ZGUgPHZhbGdyaW5kL3ZhbGdyaW5kLmg+CiAKQEAgLTUyNSw2ICs4ODUsMTUgQEAKIC8qIEhpZ2ggd2F0ZXIgbWFyayAobWF4IHZhbHVlIGV2ZXIgc2VlbikgZm9yIG5hcmVuYXNfY3VycmVudGx5X2FsbG9jYXRlZC4gKi8KIHN0YXRpYyBzaXplX3QgbmFyZW5hc19oaWdod2F0ZXIgPSAwOwogCitzdGF0aWMgUHlfc3NpemVfdCBfUHlfQWxsb2NhdGVkQmxvY2tzID0gMDsKKworUHlfc3NpemVfdAorX1B5X0dldEFsbG9jYXRlZEJsb2Nrcyh2b2lkKQoreworICAgIHJldHVybiBfUHlfQWxsb2NhdGVkQmxvY2tzOworfQorCisKIC8qIEFsbG9jYXRlIGEgbmV3IGFyZW5hLiAgSWYgd2UgcnVuIG91dCBvZiBtZW1vcnksIHJldHVybiBOVUxMLiAgRWxzZQogICogYWxsb2NhdGUgYSBuZXcgYXJlbmEsIGFuZCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgYW4gYXJlbmFfb2JqZWN0CiAgKiBkZXNjcmliaW5nIHRoZSBuZXcgYXJlbmEuICBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlIGNhbGxlciB3aWxsIHNldApAQCAtNTM2LDcgKzkwNSw2IEBACiAgICAgc3RydWN0IGFyZW5hX29iamVjdCogYXJlbmFvYmo7CiAgICAgdWludCBleGNlc3M7ICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgYWJvdmUgcG9vbCBhbGlnbm1lbnQgKi8KICAgICB2b2lkICphZGRyZXNzOwotICAgIGludCBlcnI7CiAKICNpZmRlZiBQWU1BTExPQ19ERUJVRwogICAgIGlmIChQeV9HRVRFTlYoIlBZVEhPTk1BTExPQ1NUQVRTIikpCkBAIC01NTgsNyArOTI2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAvKiBvdmVyZmxvdyAqLwogI2VuZGlmCiAgICAgICAgIG5ieXRlcyA9IG51bWFyZW5hcyAqIHNpemVvZigqYXJlbmFzKTsKLSAgICAgICAgYXJlbmFvYmogPSAoc3RydWN0IGFyZW5hX29iamVjdCAqKXJlYWxsb2MoYXJlbmFzLCBuYnl0ZXMpOworICAgICAgICBhcmVuYW9iaiA9IChzdHJ1Y3QgYXJlbmFfb2JqZWN0ICopUHlNZW1fUmF3UmVhbGxvYyhhcmVuYXMsIG5ieXRlcyk7CiAgICAgICAgIGlmIChhcmVuYW9iaiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGFyZW5hcyA9IGFyZW5hb2JqOwpAQCAtNTg5LDE1ICs5NTcsOCBAQAogICAgIGFyZW5hb2JqID0gdW51c2VkX2FyZW5hX29iamVjdHM7CiAgICAgdW51c2VkX2FyZW5hX29iamVjdHMgPSBhcmVuYW9iai0+bmV4dGFyZW5hOwogICAgIGFzc2VydChhcmVuYW9iai0+YWRkcmVzcyA9PSAwKTsKLSNpZmRlZiBBUkVOQVNfVVNFX01NQVAKLSAgICBhZGRyZXNzID0gbW1hcChOVUxMLCBBUkVOQV9TSVpFLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApOwotICAgIGVyciA9IChhZGRyZXNzID09IE1BUF9GQUlMRUQpOwotI2Vsc2UKLSAgICBhZGRyZXNzID0gbWFsbG9jKEFSRU5BX1NJWkUpOwotICAgIGVyciA9IChhZGRyZXNzID09IDApOwotI2VuZGlmCi0gICAgaWYgKGVycikgeworICAgIGFkZHJlc3MgPSBfUHlPYmplY3RfQXJlbmEuYWxsb2MoX1B5T2JqZWN0X0FyZW5hLmN0eCwgQVJFTkFfU0laRSk7CisgICAgaWYgKGFkZHJlc3MgPT0gTlVMTCkgewogICAgICAgICAvKiBUaGUgYWxsb2NhdGlvbiBmYWlsZWQ6IHJldHVybiBOVUxMIGFmdGVyIHB1dHRpbmcgdGhlCiAgICAgICAgICAqIGFyZW5hb2JqIGJhY2suCiAgICAgICAgICAqLwpAQCAtNzYwLDE1ICsxMTIxLDE2IEBACiAgKiBVbmxlc3MgdGhlIG9wdGltaXplciByZW9yZGVycyBldmVyeXRoaW5nLCBiZWluZyB0b28gc21hcnQuLi4KICAqLwogCi0jdW5kZWYgUHlPYmplY3RfTWFsbG9jCi12b2lkICoKLVB5T2JqZWN0X01hbGxvYyhzaXplX3QgbmJ5dGVzKQorc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuYnl0ZXMpCiB7CiAgICAgYmxvY2sgKmJwOwogICAgIHBvb2xwIHBvb2w7CiAgICAgcG9vbHAgbmV4dDsKICAgICB1aW50IHNpemU7CiAKKyAgICBfUHlfQWxsb2NhdGVkQmxvY2tzKys7CisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEpKQogICAgICAgICBydW5uaW5nX29uX3ZhbGdyaW5kID0gUlVOTklOR19PTl9WQUxHUklORDsKQEAgLTc3NywxNSArMTEzOSw2IEBACiAjZW5kaWYKIAogICAgIC8qCi0gICAgICogTGltaXQgb3Vyc2VsdmVzIHRvIFBZX1NTSVpFX1RfTUFYIGJ5dGVzIHRvIHByZXZlbnQgc2VjdXJpdHkgaG9sZXMuCi0gICAgICogTW9zdCBweXRob24gaW50ZXJuYWxzIGJsaW5kbHkgdXNlIGEgc2lnbmVkIFB5X3NzaXplX3QgdG8gdHJhY2sKLSAgICAgKiB0aGluZ3Mgd2l0aG91dCBjaGVja2luZyBmb3Igb3ZlcmZsb3dzIG9yIG5lZ2F0aXZlcy4KLSAgICAgKiBBcyBzaXplX3QgaXMgdW5zaWduZWQsIGNoZWNraW5nIGZvciBuYnl0ZXMgPCAwIGlzIG5vdCByZXF1aXJlZC4KLSAgICAgKi8KLSAgICBpZiAobmJ5dGVzID4gUFlfU1NJWkVfVF9NQVgpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyoKICAgICAgKiBUaGlzIGltcGxpY2l0bHkgcmVkaXJlY3RzIG1hbGxvYygwKS4KICAgICAgKi8KICAgICBpZiAoKG5ieXRlcyAtIDEpIDwgU01BTExfUkVRVUVTVF9USFJFU0hPTEQpIHsKQEAgLTkwMSw2ICsxMjU0LDcgQEAKICAgICAgICAgICAgICAgICAgKiBhbmQgZnJlZSBsaXN0IGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLgogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGJwID0gcG9vbC0+ZnJlZWJsb2NrOworICAgICAgICAgICAgICAgIGFzc2VydChicCAhPSBOVUxMKTsKICAgICAgICAgICAgICAgICBwb29sLT5mcmVlYmxvY2sgPSAqKGJsb2NrICoqKWJwOwogICAgICAgICAgICAgICAgIFVOTE9DSygpOwogICAgICAgICAgICAgICAgIHJldHVybiAodm9pZCAqKWJwOwpAQCAtOTU2LDE2ICsxMzEwLDE5IEBACiAgICAgICogbGFzdCBjaGFuY2UgdG8gc2VydmUgdGhlIHJlcXVlc3QpIG9yIHdoZW4gdGhlIG1heCBtZW1vcnkgbGltaXQKICAgICAgKiBoYXMgYmVlbiByZWFjaGVkLgogICAgICAqLwotICAgIGlmIChuYnl0ZXMgPT0gMCkKLSAgICAgICAgbmJ5dGVzID0gMTsKLSAgICByZXR1cm4gKHZvaWQgKiltYWxsb2MobmJ5dGVzKTsKKyAgICB7CisgICAgICAgIHZvaWQgKnJlc3VsdCA9IFB5TWVtX1Jhd01hbGxvYyhuYnl0ZXMpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MtLTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiB9CiAKIC8qIGZyZWUgKi8KIAotI3VuZGVmIFB5T2JqZWN0X0ZyZWUKLXZvaWQKLVB5T2JqZWN0X0ZyZWUodm9pZCAqcCkKK0FUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUworc3RhdGljIHZvaWQKK19QeU9iamVjdF9GcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCkKIHsKICAgICBwb29scCBwb29sOwogICAgIGJsb2NrICpsYXN0ZnJlZTsKQEAgLTk3OCw2ICsxMzM1LDggQEAKICAgICBpZiAocCA9PSBOVUxMKSAgICAgIC8qIGZyZWUoTlVMTCkgaGFzIG5vIGVmZmVjdCAqLwogICAgICAgICByZXR1cm47CiAKKyAgICBfUHlfQWxsb2NhdGVkQmxvY2tzLS07CisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPiAwKSkKICAgICAgICAgZ290byByZWRpcmVjdDsKQEAgLTEwNzIsMTEgKzE0MzEsOCBAQAogICAgICAgICAgICAgICAgIHVudXNlZF9hcmVuYV9vYmplY3RzID0gYW87CiAKICAgICAgICAgICAgICAgICAvKiBGcmVlIHRoZSBlbnRpcmUgYXJlbmEuICovCi0jaWZkZWYgQVJFTkFTX1VTRV9NTUFQCi0gICAgICAgICAgICAgICAgbXVubWFwKCh2b2lkICopYW8tPmFkZHJlc3MsIEFSRU5BX1NJWkUpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBmcmVlKCh2b2lkICopYW8tPmFkZHJlc3MpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgX1B5T2JqZWN0X0FyZW5hLmZyZWUoX1B5T2JqZWN0X0FyZW5hLmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFvLT5hZGRyZXNzLCBBUkVOQV9TSVpFKTsKICAgICAgICAgICAgICAgICBhby0+YWRkcmVzcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWFyayB1bmFzc29jaWF0ZWQgKi8KICAgICAgICAgICAgICAgICAtLW5hcmVuYXNfY3VycmVudGx5X2FsbG9jYXRlZDsKIApAQCAtMTE4NSw3ICsxNTQxLDcgQEAKIHJlZGlyZWN0OgogI2VuZGlmCiAgICAgLyogV2UgZGlkbid0IGFsbG9jYXRlIHRoaXMgYWRkcmVzcy4gKi8KLSAgICBmcmVlKHApOworICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiB9CiAKIC8qIHJlYWxsb2MuICBJZiBwIGlzIE5VTEwsIHRoaXMgYWN0cyBsaWtlIG1hbGxvYyhuYnl0ZXMpLiAgRWxzZSBpZiBuYnl0ZXM9PTAsCkBAIC0xMTkzLDkgKzE1NDksOSBAQAogICogcmV0dXJuIGEgbm9uLU5VTEwgcmVzdWx0LgogICovCiAKLSN1bmRlZiBQeU9iamVjdF9SZWFsbG9jCi12b2lkICoKLVB5T2JqZWN0X1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK0FUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUworc3RhdGljIHZvaWQgKgorX1B5T2JqZWN0X1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQogewogICAgIHZvaWQgKmJwOwogICAgIHBvb2xwIHBvb2w7CkBAIC0xMjA1LDE2ICsxNTYxLDcgQEAKICNlbmRpZgogCiAgICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X01hbGxvYyhuYnl0ZXMpOwotCi0gICAgLyoKLSAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KLSAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjawotICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgotICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIG5ieXRlcyA8IDAgaXMgbm90IHJlcXVpcmVkLgotICAgICAqLwotICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBfUHlPYmplY3RfTWFsbG9jKGN0eCwgbmJ5dGVzKTsKIAogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICAvKiBUcmVhdCBydW5uaW5nX29uX3ZhbGdyaW5kID09IC0xIHRoZSBzYW1lIGFzIDAgKi8KQEAgLTEyNDIsMTAgKzE1ODksMTAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNpemUgPSBuYnl0ZXM7CiAgICAgICAgIH0KLSAgICAgICAgYnAgPSBQeU9iamVjdF9NYWxsb2MobmJ5dGVzKTsKKyAgICAgICAgYnAgPSBfUHlPYmplY3RfTWFsbG9jKGN0eCwgbmJ5dGVzKTsKICAgICAgICAgaWYgKGJwICE9IE5VTEwpIHsKICAgICAgICAgICAgIG1lbWNweShicCwgcCwgc2l6ZSk7Ci0gICAgICAgICAgICBQeU9iamVjdF9GcmVlKHApOworICAgICAgICAgICAgX1B5T2JqZWN0X0ZyZWUoY3R4LCBwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYnA7CiAgICAgfQpAQCAtMTI2MywxNCArMTYxMCwxNCBAQAogICAgICAqIGF0IHAuICBJbnN0ZWFkIHdlIHB1bnQ6ICBsZXQgQyBjb250aW51ZSB0byBtYW5hZ2UgdGhpcyBibG9jay4KICAgICAgKi8KICAgICBpZiAobmJ5dGVzKQotICAgICAgICByZXR1cm4gcmVhbGxvYyhwLCBuYnl0ZXMpOworICAgICAgICByZXR1cm4gUHlNZW1fUmF3UmVhbGxvYyhwLCBuYnl0ZXMpOwogICAgIC8qIEMgZG9lc24ndCBkZWZpbmUgdGhlIHJlc3VsdCBvZiByZWFsbG9jKHAsIDApIChpdCBtYXkgb3IgbWF5IG5vdAogICAgICAqIHJldHVybiBOVUxMIHRoZW4pLCBidXQgUHl0aG9uJ3MgZG9jcyBwcm9taXNlIHRoYXQgbmJ5dGVzPT0wIG5ldmVyCiAgICAgICogcmV0dXJucyBOVUxMLiAgV2UgZG9uJ3QgcGFzcyAwIHRvIHJlYWxsb2MoKSwgdG8gYXZvaWQgdGhhdCBlbmRjYXNlCiAgICAgICogdG8gYmVnaW4gd2l0aC4gIEV2ZW4gdGhlbiwgd2UgY2FuJ3QgYmUgc3VyZSB0aGF0IHJlYWxsb2MoKSB3b24ndAogICAgICAqIHJldHVybiBOVUxMLgogICAgICAqLwotICAgIGJwID0gcmVhbGxvYyhwLCAxKTsKKyAgICBicCA9IFB5TWVtX1Jhd1JlYWxsb2MocCwgMSk7CiAgICAgcmV0dXJuIGJwID8gYnAgOiBwOwogfQogCkBAIC0xMjgwLDIzICsxNjI3LDEyIEBACiAvKiBweW1hbGxvYyBub3QgZW5hYmxlZDogIFJlZGlyZWN0IHRoZSBlbnRyeSBwb2ludHMgdG8gbWFsbG9jLiAgVGhlc2Ugd2lsbAogICogb25seSBiZSB1c2VkIGJ5IGV4dGVuc2lvbnMgdGhhdCBhcmUgY29tcGlsZWQgd2l0aCBweW1hbGxvYyBlbmFibGVkLiAqLwogCi12b2lkICoKLVB5T2JqZWN0X01hbGxvYyhzaXplX3QgbikKK1B5X3NzaXplX3QKK19QeV9HZXRBbGxvY2F0ZWRCbG9ja3Modm9pZCkKIHsKLSAgICByZXR1cm4gUHlNZW1fTUFMTE9DKG4pOworICAgIHJldHVybiAwOwogfQogCi12b2lkICoKLVB5T2JqZWN0X1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG4pCi17Ci0gICAgcmV0dXJuIFB5TWVtX1JFQUxMT0MocCwgbik7Ci19Ci0KLXZvaWQKLVB5T2JqZWN0X0ZyZWUodm9pZCAqcCkKLXsKLSAgICBQeU1lbV9GUkVFKHApOwotfQogI2VuZGlmIC8qIFdJVEhfUFlNQUxMT0MgKi8KIAogI2lmZGVmIFBZTUFMTE9DX0RFQlVHCkBAIC0xMzE2LDEwICsxNjUyLDYgQEAKICNkZWZpbmUgREVBREJZVEUgICAgICAgMHhEQiAgICAvKiBkZWFkIChuZXdseSBmcmVlZCkgbWVtb3J5ICovCiAjZGVmaW5lIEZPUkJJRERFTkJZVEUgIDB4RkIgICAgLyogdW50b3VjaGFibGUgYnl0ZXMgYXQgZWFjaCBlbmQgb2YgYSBibG9jayAqLwogCi0vKiBXZSB0YWcgZWFjaCBibG9jayB3aXRoIGFuIEFQSSBJRCBpbiBvcmRlciB0byB0YWcgQVBJIHZpb2xhdGlvbnMgKi8KLSNkZWZpbmUgX1BZTUFMTE9DX01FTV9JRCAnbScgICAvKiB0aGUgUHlNZW1fTWFsbG9jKCkgQVBJICovCi0jZGVmaW5lIF9QWU1BTExPQ19PQkpfSUQgJ28nICAgLyogVGhlIFB5T2JqZWN0X01hbGxvYygpIEFQSSAqLwotCiBzdGF0aWMgc2l6ZV90IHNlcmlhbG5vID0gMDsgICAgIC8qIGluY3JlbWVudGVkIG9uIGVhY2ggZGVidWcge20scmV9YWxsb2MgKi8KIAogLyogc2VyaWFsbm8gaXMgYWx3YXlzIGluY3JlbWVudGVkIHZpYSBjYWxsaW5nIHRoaXMgcm91dGluZS4gIFRoZSBwb2ludCBpcwpAQCAtMTM5Miw3ICsxNzI0LDkgQEAKIHBbMDogU10KICAgICBOdW1iZXIgb2YgYnl0ZXMgb3JpZ2luYWxseSBhc2tlZCBmb3IuICBUaGlzIGlzIGEgc2l6ZV90LCBiaWctZW5kaWFuIChlYXNpZXIKICAgICB0byByZWFkIGluIGEgbWVtb3J5IGR1bXApLgotcFtTOiAyKlNdCitwW1NdCisgICAgQVBJIElELiAgU2VlIFBFUCA0NDUuICBUaGlzIGlzIGEgY2hhcmFjdGVyLCBidXQgc2VlbXMgdW5kb2N1bWVudGVkLgorcFtTKzE6IDIqU10KICAgICBDb3BpZXMgb2YgRk9SQklEREVOQllURS4gIFVzZWQgdG8gY2F0Y2ggdW5kZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzIqUzogMipTK25dCiAgICAgVGhlIHJlcXVlc3RlZCBtZW1vcnksIGZpbGxlZCB3aXRoIGNvcGllcyBvZiBDTEVBTkJZVEUuCkBAIC0xNDAyLDU4ICsxNzM2LDE4IEBACiBwWzIqUytuOiAyKlMrbitTXQogICAgIENvcGllcyBvZiBGT1JCSURERU5CWVRFLiAgVXNlZCB0byBjYXRjaCBvdmVyLSB3cml0ZXMgYW5kIHJlYWRzLgogcFsyKlMrbitTOiAyKlMrbisyKlNdCi0gICAgQSBzZXJpYWwgbnVtYmVyLCBpbmNyZW1lbnRlZCBieSAxIG9uIGVhY2ggY2FsbCB0byBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSAgICBhbmQgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYy4KKyAgICBBIHNlcmlhbCBudW1iZXIsIGluY3JlbWVudGVkIGJ5IDEgb24gZWFjaCBjYWxsIHRvIF9QeU1lbV9EZWJ1Z01hbGxvYworICAgIGFuZCBfUHlNZW1fRGVidWdSZWFsbG9jLgogICAgIFRoaXMgaXMgYSBiaWctZW5kaWFuIHNpemVfdC4KICAgICBJZiAiYmFkIG1lbW9yeSIgaXMgZGV0ZWN0ZWQgbGF0ZXIsIHRoZSBzZXJpYWwgbnVtYmVyIGdpdmVzIGFuCiAgICAgZXhjZWxsZW50IHdheSB0byBzZXQgYSBicmVha3BvaW50IG9uIHRoZSBuZXh0IHJ1biwgdG8gY2FwdHVyZSB0aGUKICAgICBpbnN0YW50IGF0IHdoaWNoIHRoaXMgYmxvY2sgd2FzIHBhc3NlZCBvdXQuCiAqLwogCi0vKiBkZWJ1ZyByZXBsYWNlbWVudHMgZm9yIHRoZSBQeU1lbV8qIG1lbW9yeSBBUEkgKi8KLXZvaWQgKgotX1B5TWVtX0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3QgbmJ5dGVzKQogewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoX1BZTUFMTE9DX01FTV9JRCwgbmJ5dGVzKTsKLX0KLXZvaWQgKgotX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKF9QWU1BTExPQ19NRU1fSUQsIHAsIG5ieXRlcyk7Ci19Ci12b2lkCi1fUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShfUFlNQUxMT0NfTUVNX0lELCBwKTsKLX0KLQotLyogZGVidWcgcmVwbGFjZW1lbnRzIGZvciB0aGUgUHlPYmplY3RfKiBtZW1vcnkgQVBJICovCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoX1BZTUFMTE9DX09CSl9JRCwgbmJ5dGVzKTsKLX0KLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKF9QWU1BTExPQ19PQkpfSUQsIHAsIG5ieXRlcyk7Ci19Ci12b2lkCi1fUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShfUFlNQUxMT0NfT0JKX0lELCBwKTsKLX0KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzcyhjb25zdCB2b2lkICpwKQotewotICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShfUFlNQUxMT0NfT0JKX0lELCBwKTsKLX0KLQotCi0vKiBnZW5lcmljIGRlYnVnIG1lbW9yeSBhcGksIHdpdGggYW4gImlkIiB0byBpZGVudGlmeSB0aGUgQVBJIGluIHVzZSAqLwotdm9pZCAqCi1fUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoY2hhciBpZCwgc2l6ZV90IG5ieXRlcykKLXsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OwogICAgIHVjaGFyICpwOyAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzIG9mIG1hbGxvYydlZCBibG9jayAqLwogICAgIHVjaGFyICp0YWlsOyAgICAgICAgLyogcCArIDIqU1NUICsgbmJ5dGVzID09IHBvaW50ZXIgdG8gdGFpbCBwYWQgYnl0ZXMgKi8KICAgICBzaXplX3QgdG90YWw7ICAgICAgIC8qIG5ieXRlcyArIDQqU1NUICovCkBAIC0xNDY0LDE0ICsxNzU4LDE0IEBACiAgICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgc2l6ZV90ICovCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcCA9ICh1Y2hhciAqKVB5T2JqZWN0X01hbGxvYyh0b3RhbCk7CisgICAgcCA9ICh1Y2hhciAqKWFwaS0+YWxsb2MubWFsbG9jKGFwaS0+YWxsb2MuY3R4LCB0b3RhbCk7CiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBhdCBwLCB3cml0ZSBzaXplIChTU1QgYnl0ZXMpLCBpZCAoMSBieXRlKSwgcGFkIChTU1QtMSBieXRlcykgKi8KICAgICB3cml0ZV9zaXplX3QocCwgbmJ5dGVzKTsKLSAgICBwW1NTVF0gPSAodWNoYXIpaWQ7Ci0gICAgbWVtc2V0KHAgKyBTU1QgKyAxICwgRk9SQklEREVOQllURSwgU1NULTEpOworICAgIHBbU1NUXSA9ICh1Y2hhcilhcGktPmFwaV9pZDsKKyAgICBtZW1zZXQocCArIFNTVCArIDEsIEZPUkJJRERFTkJZVEUsIFNTVC0xKTsKIAogICAgIGlmIChuYnl0ZXMgPiAwKQogICAgICAgICBtZW1zZXQocCArIDIqU1NULCBDTEVBTkJZVEUsIG5ieXRlcyk7CkBAIC0xNDg5LDM1ICsxNzgzLDM3IEBACiAgICBUaGVuIGZpbGxzIHRoZSBvcmlnaW5hbCBieXRlcyB3aXRoIERFQURCWVRFLgogICAgVGhlbiBjYWxscyB0aGUgdW5kZXJseWluZyBmcmVlLgogKi8KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApCitzdGF0aWMgdm9pZAorX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApCiB7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgKmFwaSA9IChkZWJ1Z19hbGxvY19hcGlfdCAqKWN0eDsKICAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXAgLSAyKlNTVDsgIC8qIGFkZHJlc3MgcmV0dXJuZWQgZnJvbSBtYWxsb2MgKi8KICAgICBzaXplX3QgbmJ5dGVzOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwotICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShhcGksIHApOworICAgIF9QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhhcGktPmFwaV9pZCwgcCk7CiAgICAgbmJ5dGVzID0gcmVhZF9zaXplX3QocSk7CiAgICAgbmJ5dGVzICs9IDQqU1NUOwogICAgIGlmIChuYnl0ZXMgPiAwKQogICAgICAgICBtZW1zZXQocSwgREVBREJZVEUsIG5ieXRlcyk7Ci0gICAgUHlPYmplY3RfRnJlZShxKTsKKyAgICBhcGktPmFsbG9jLmZyZWUoYXBpLT5hbGxvYy5jdHgsIHEpOwogfQogCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoY2hhciBhcGksIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKIHsKLSAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXA7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgKmFwaSA9IChkZWJ1Z19hbGxvY19hcGlfdCAqKWN0eDsKKyAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXAsICpvbGRxOwogICAgIHVjaGFyICp0YWlsOwogICAgIHNpemVfdCB0b3RhbDsgICAgICAgLyogbmJ5dGVzICsgNCpTU1QgKi8KICAgICBzaXplX3Qgb3JpZ2luYWxfbmJ5dGVzOwogICAgIGludCBpOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShhcGksIG5ieXRlcyk7CisgICAgICAgIHJldHVybiBfUHlNZW1fRGVidWdNYWxsb2MoY3R4LCBuYnl0ZXMpOwogCi0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGFwaSwgcCk7CisgICAgX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGFwaS0+YXBpX2lkLCBwKTsKICAgICBidW1wc2VyaWFsbm8oKTsKICAgICBvcmlnaW5hbF9uYnl0ZXMgPSByZWFkX3NpemVfdChxIC0gMipTU1QpOwogICAgIHRvdGFsID0gbmJ5dGVzICsgNCpTU1Q7CkBAIC0xNTI1LDI0ICsxODIxLDI2IEBACiAgICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgc2l6ZV90ICovCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKG5ieXRlcyA8IG9yaWdpbmFsX25ieXRlcykgewotICAgICAgICAvKiBzaHJpbmtpbmc6ICBtYXJrIG9sZCBleHRyYSBtZW1vcnkgZGVhZCAqLwotICAgICAgICBtZW1zZXQocSArIG5ieXRlcywgREVBREJZVEUsIG9yaWdpbmFsX25ieXRlcyAtIG5ieXRlcyArIDIqU1NUKTsKLSAgICB9Ci0KICAgICAvKiBSZXNpemUgYW5kIGFkZCBkZWNvcmF0aW9ucy4gV2UgbWF5IGdldCBhIG5ldyBwb2ludGVyIGhlcmUsIGluIHdoaWNoCiAgICAgICogY2FzZSB3ZSBkaWRuJ3QgZ2V0IHRoZSBjaGFuY2UgdG8gbWFyayB0aGUgb2xkIG1lbW9yeSB3aXRoIERFQURCWVRFLAogICAgICAqIGJ1dCB3ZSBsaXZlIHdpdGggdGhhdC4KICAgICAgKi8KLSAgICBxID0gKHVjaGFyICopUHlPYmplY3RfUmVhbGxvYyhxIC0gMipTU1QsIHRvdGFsKTsKKyAgICBvbGRxID0gcTsKKyAgICBxID0gKHVjaGFyICopYXBpLT5hbGxvYy5yZWFsbG9jKGFwaS0+YWxsb2MuY3R4LCBxIC0gMipTU1QsIHRvdGFsKTsKICAgICBpZiAocSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChxID09IG9sZHEgJiYgbmJ5dGVzIDwgb3JpZ2luYWxfbmJ5dGVzKSB7CisgICAgICAgIC8qIHNocmlua2luZzogIG1hcmsgb2xkIGV4dHJhIG1lbW9yeSBkZWFkICovCisgICAgICAgIG1lbXNldChxICsgbmJ5dGVzLCBERUFEQllURSwgb3JpZ2luYWxfbmJ5dGVzIC0gbmJ5dGVzKTsKKyAgICB9CisKICAgICB3cml0ZV9zaXplX3QocSwgbmJ5dGVzKTsKLSAgICBhc3NlcnQocVtTU1RdID09ICh1Y2hhcilhcGkpOworICAgIGFzc2VydChxW1NTVF0gPT0gKHVjaGFyKWFwaS0+YXBpX2lkKTsKICAgICBmb3IgKGkgPSAxOyBpIDwgU1NUOyArK2kpCiAgICAgICAgIGFzc2VydChxW1NTVCArIGldID09IEZPUkJJRERFTkJZVEUpOwogICAgIHEgKz0gMipTU1Q7CisKICAgICB0YWlsID0gcSArIG5ieXRlczsKICAgICBtZW1zZXQodGFpbCwgRk9SQklEREVOQllURSwgU1NUKTsKICAgICB3cml0ZV9zaXplX3QodGFpbCArIFNTVCwgc2VyaWFsbm8pOwpAQCAtMTU2MSw4ICsxODU5LDggQEAKICAqIGFuZCBjYWxsIFB5X0ZhdGFsRXJyb3IgdG8ga2lsbCB0aGUgcHJvZ3JhbS4KICAqIFRoZSBBUEkgaWQsIGlzIGFsc28gY2hlY2tlZC4KICAqLwotIHZvaWQKLV9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShjaGFyIGFwaSwgY29uc3Qgdm9pZCAqcCkKK3N0YXRpYyB2b2lkCitfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApCiB7CiAgICAgY29uc3QgdWNoYXIgKnEgPSAoY29uc3QgdWNoYXIgKilwOwogICAgIGNoYXIgbXNnYnVmWzY0XTsKQEAgLTE2MTQsNyArMTkxMiw3IEBACiB9CiAKIC8qIERpc3BsYXkgaW5mbyB0byBzdGRlcnIgYWJvdXQgdGhlIG1lbW9yeSBibG9jayBhdCBwLiAqLwotdm9pZAorc3RhdGljIHZvaWQKIF9QeU9iamVjdF9EZWJ1Z0R1bXBBZGRyZXNzKGNvbnN0IHZvaWQgKnApCiB7CiAgICAgY29uc3QgdWNoYXIgKnEgPSAoY29uc3QgdWNoYXIgKilwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9yYW5nZW9iamVjdC5jIGIvT2JqZWN0cy9yYW5nZW9iamVjdC5jCmluZGV4IGQ3OTBjYTguLmE0ZDlmYjMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvcmFuZ2VvYmplY3QuYworKysgYi9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKQEAgLTMxOCwxOTUgKzMxOCw2IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotLyogQWRkaXRpb25hbCBoZWxwZXJzLCBzaW5jZSB0aGUgc3RhbmRhcmQgc2xpY2UgaGVscGVycwotICogYWxsIGNsaXAgdG8gUFlfU1NJWkVfVF9NQVgKLSAqLwotCi0vKiBSZXBsYWNlIF9QeUV2YWxfU2xpY2VJbmRleCAqLwotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXB1dGVfc2xpY2VfZWxlbWVudChQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotICAgIGlmIChvYmogIT0gTlVMTCkgewotICAgICAgICBpZiAoUHlJbmRleF9DaGVjayhvYmopKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9JbmRleChvYmopOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2UgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSBvciBoYXZlIGFuIF9faW5kZXhfXyBtZXRob2QiKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBSZXBsYWNlIFB5U2xpY2VfR2V0SW5kaWNlc0V4Ci0gKiAgIFJlc3VsdCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHNsaWNlIGlzIGVtcHR5Ci0gKiAgICAoLTEgPSBlcnJvciwgMCA9IGVtcHR5IHNsaWNlLCAxID0gc2xpY2UgY29udGFpbnMgZWxlbWVudHMpCi0gKi8KLXN0YXRpYyBpbnQKLWNvbXB1dGVfc2xpY2VfaW5kaWNlcyhyYW5nZW9iamVjdCAqciwgUHlTbGljZU9iamVjdCAqc2xpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydCwgUHlPYmplY3QgKipzdG9wLCBQeU9iamVjdCAqKnN0ZXApCi17Ci0gICAgaW50IGNtcF9yZXN1bHQsIGhhc19lbGVtZW50czsKLSAgICBQeV9zc2l6ZV90IGNsYW1wZWRfc3RlcCA9IDA7Ci0gICAgUHlPYmplY3QgKnplcm8gPSBOVUxMLCAqb25lID0gTlVMTCwgKm5lZ19vbmUgPSBOVUxMLCAqY2FuZGlkYXRlID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdG1wX3N0YXJ0ID0gTlVMTCwgKnRtcF9zdG9wID0gTlVMTCwgKnRtcF9zdGVwID0gTlVMTDsKLSAgICB6ZXJvID0gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICh6ZXJvID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMSk7Ci0gICAgaWYgKG9uZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgbmVnX29uZSA9IFB5TG9uZ19Gcm9tTG9uZygtMSk7Ci0gICAgaWYgKG5lZ19vbmUgPT0gTlVMTCkgZ290byBGYWlsOwotCi0gICAgLyogQ2FsY3VsYXRlIHN0ZXAgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0ZXAgPT0gUHlfTm9uZSkgewotICAgICAgICBjbGFtcGVkX3N0ZXAgPSAxOwotICAgICAgICB0bXBfc3RlcCA9IG9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGVwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIV9QeUV2YWxfU2xpY2VJbmRleChzbGljZS0+c3RlcCwgJmNsYW1wZWRfc3RlcCkpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA9PSAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpOwotICAgICAgICAgICAgZ290byBGYWlsOwotICAgICAgICB9Ci0gICAgICAgIHRtcF9zdGVwID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdGVwKTsKLSAgICAgICAgaWYgKHRtcF9zdGVwID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICB9Ci0KLSAgICAvKiBDYWxjdWxhdGUgc3RhcnQgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0YXJ0ID09IFB5X05vbmUpIHsKLSAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgIHRtcF9zdGFydCA9IFB5TnVtYmVyX1N1YnRyYWN0KHItPmxlbmd0aCwgb25lKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gemVybzsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RhcnQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FuZGlkYXRlID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdGFydCk7Ci0gICAgICAgIGlmIChjYW5kaWRhdGUgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNhbmRpZGF0ZSwgemVybywgUHlfTFQpOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlIDwgMCAqLwotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfQWRkKHItPmxlbmd0aCwgY2FuZGlkYXRlKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgUHlfQ0xFQVIoY2FuZGlkYXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA+PSAwICovCi0gICAgICAgICAgICB0bXBfc3RhcnQgPSBjYW5kaWRhdGU7Ci0gICAgICAgICAgICBjYW5kaWRhdGUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RhcnQgPCAwICovCi0gICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RhcnQpOwotICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSBuZWdfb25lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSB6ZXJvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RhcnQgPj0gMCAqLwotICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHItPmxlbmd0aCwgUHlfR0UpOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLyogdG1wX3N0YXJ0ID49IHItPmxlbmd0aCAqLwotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3N0YXJ0ID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSByLT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RhcnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIENhbGN1bGF0ZSBzdG9wIHZhbHVlICovCi0gICAgaWYgKHNsaWNlLT5zdG9wID09IFB5X05vbmUpIHsKLSAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgIHRtcF9zdG9wID0gbmVnX29uZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRtcF9zdG9wID0gci0+bGVuZ3RoOwotICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRih0bXBfc3RvcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FuZGlkYXRlID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdG9wKTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY2FuZGlkYXRlLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgPCAwICovCi0gICAgICAgICAgICB0bXBfc3RvcCA9IFB5TnVtYmVyX0FkZChyLT5sZW5ndGgsIGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgICBpZiAodG1wX3N0b3AgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgUHlfQ0xFQVIoY2FuZGlkYXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA+PSAwICovCi0gICAgICAgICAgICB0bXBfc3RvcCA9IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RvcCwgemVybywgUHlfTFQpOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY21wX3Jlc3VsdCkgewotICAgICAgICAgICAgLyogdG1wX3N0b3AgPCAwICovCi0gICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RvcCk7Ci0gICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gbmVnX29uZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdG1wX3N0b3AgPSB6ZXJvOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdG9wKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdG9wID49IDAgKi8KLSAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0b3AsIHItPmxlbmd0aCwgUHlfR0UpOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgLyogdG1wX3N0b3AgPj0gci0+bGVuZ3RoICovCi0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0b3ApOwotICAgICAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3N0b3AgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gci0+bGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0b3ApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIENoZWNrIGlmIHRoZSBzbGljZSBpcyBlbXB0eSBvciBub3QgKi8KLSAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICBoYXNfZWxlbWVudHMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCB0bXBfc3RvcCwgUHlfR1QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGhhc19lbGVtZW50cyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHRtcF9zdG9wLCBQeV9MVCk7Ci0gICAgfQotICAgIGlmIChoYXNfZWxlbWVudHMgPT0gLTEpIGdvdG8gRmFpbDsKLQotICAgICpzdGFydCA9IHRtcF9zdGFydDsKLSAgICAqc3RvcCA9IHRtcF9zdG9wOwotICAgICpzdGVwID0gdG1wX3N0ZXA7Ci0gICAgUHlfREVDUkVGKG5lZ19vbmUpOwotICAgIFB5X0RFQ1JFRihvbmUpOwotICAgIFB5X0RFQ1JFRih6ZXJvKTsKLSAgICByZXR1cm4gaGFzX2VsZW1lbnRzOwotCi0gIEZhaWw6Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RhcnQpOwotICAgIFB5X1hERUNSRUYodG1wX3N0b3ApOwotICAgIFB5X1hERUNSRUYodG1wX3N0ZXApOwotICAgIFB5X1hERUNSRUYoY2FuZGlkYXRlKTsKLSAgICBQeV9YREVDUkVGKG5lZ19vbmUpOwotICAgIFB5X1hERUNSRUYob25lKTsKLSAgICBQeV9YREVDUkVGKHplcm8pOwotICAgIHJldHVybiAtMTsKLX0KLQogc3RhdGljIFB5T2JqZWN0ICoKIGNvbXB1dGVfc2xpY2UocmFuZ2VvYmplY3QgKnIsIFB5T2JqZWN0ICpfc2xpY2UpCiB7CkBAIC01MTQsMTAgKzMyNSwxMSBAQAogICAgIHJhbmdlb2JqZWN0ICpyZXN1bHQ7CiAgICAgUHlPYmplY3QgKnN0YXJ0ID0gTlVMTCwgKnN0b3AgPSBOVUxMLCAqc3RlcCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnN1YnN0YXJ0ID0gTlVMTCwgKnN1YnN0b3AgPSBOVUxMLCAqc3Vic3RlcCA9IE5VTEw7Ci0gICAgaW50IGhhc19lbGVtZW50czsKKyAgICBpbnQgZXJyb3I7CiAKLSAgICBoYXNfZWxlbWVudHMgPSBjb21wdXRlX3NsaWNlX2luZGljZXMociwgc2xpY2UsICZzdGFydCwgJnN0b3AsICZzdGVwKTsKLSAgICBpZiAoaGFzX2VsZW1lbnRzID09IC0xKSByZXR1cm4gTlVMTDsKKyAgICBlcnJvciA9IF9QeVNsaWNlX0dldExvbmdJbmRpY2VzKHNsaWNlLCByLT5sZW5ndGgsICZzdGFydCwgJnN0b3AsICZzdGVwKTsKKyAgICBpZiAoZXJyb3IgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgc3Vic3RlcCA9IFB5TnVtYmVyX011bHRpcGx5KHItPnN0ZXAsIHN0ZXApOwogICAgIGlmIChzdWJzdGVwID09IE5VTEwpIGdvdG8gZmFpbDsKQEAgLTUyNywxMyArMzM5LDggQEAKICAgICBpZiAoc3Vic3RhcnQgPT0gTlVMTCkgZ290byBmYWlsOwogICAgIFB5X0NMRUFSKHN0YXJ0KTsKIAotICAgIGlmIChoYXNfZWxlbWVudHMpIHsKLSAgICAgICAgc3Vic3RvcCA9IGNvbXB1dGVfaXRlbShyLCBzdG9wKTsKLSAgICAgICAgaWYgKHN1YnN0b3AgPT0gTlVMTCkgZ290byBmYWlsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN1YnN0b3AgPSBzdWJzdGFydDsKLSAgICAgICAgUHlfSU5DUkVGKHN1YnN0b3ApOwotICAgIH0KKyAgICBzdWJzdG9wID0gY29tcHV0ZV9pdGVtKHIsIHN0b3ApOworICAgIGlmIChzdWJzdG9wID09IE5VTEwpIGdvdG8gZmFpbDsKICAgICBQeV9DTEVBUihzdG9wKTsKIAogICAgIHJlc3VsdCA9IG1ha2VfcmFuZ2Vfb2JqZWN0KFB5X1RZUEUociksIHN1YnN0YXJ0LCBzdWJzdG9wLCBzdWJzdGVwKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc2V0b2JqZWN0LmMgYi9PYmplY3RzL3NldG9iamVjdC5jCmluZGV4IGVhNWEyNGMuLmFkYzk5ZGEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc2V0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zZXRvYmplY3QuYwpAQCAtMSwxNTQgKzEsMTIxIEBACiAKIC8qIHNldCBvYmplY3QgaW1wbGVtZW50YXRpb24KKwogICAgV3JpdHRlbiBhbmQgbWFpbnRhaW5lZCBieSBSYXltb25kIEQuIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+CiAgICBEZXJpdmVkIGZyb20gTGliL3NldHMucHkgYW5kIE9iamVjdHMvZGljdG9iamVjdC5jLgogCi0gICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KKyAgIENvcHlyaWdodCAoYykgMjAwMy0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgVGhlIGJhc2ljIGxvb2t1cCBmdW5jdGlvbiB1c2VkIGJ5IGFsbCBvcGVyYXRpb25zLgorICAgVGhpcyBpcyBiYXNlZCBvbiBBbGdvcml0aG0gRCBmcm9tIEtudXRoIFZvbC4gMywgU2VjLiA2LjQuCisKKyAgIFRoZSBpbml0aWFsIHByb2JlIGluZGV4IGlzIGNvbXB1dGVkIGFzIGhhc2ggbW9kIHRoZSB0YWJsZSBzaXplLgorICAgU3Vic2VxdWVudCBwcm9iZSBpbmRpY2VzIGFyZSBjb21wdXRlZCBhcyBleHBsYWluZWQgaW4gT2JqZWN0cy9kaWN0b2JqZWN0LmMuCisKKyAgIFRvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHksIGVhY2ggcHJvYmUgaW5zcGVjdHMgYSBzZXJpZXMgb2YgY29uc2VjdXRpdmUKKyAgIG5lYXJieSBlbnRyaWVzIGJlZm9yZSBtb3Zpbmcgb24gdG8gcHJvYmVzIGVsc2V3aGVyZSBpbiBtZW1vcnkuICBUaGlzIGxlYXZlcworICAgdXMgd2l0aCBhIGh5YnJpZCBvZiBsaW5lYXIgcHJvYmluZyBhbmQgb3BlbiBhZGRyZXNzaW5nLiAgVGhlIGxpbmVhciBwcm9iaW5nCisgICByZWR1Y2VzIHRoZSBjb3N0IG9mIGhhc2ggY29sbGlzaW9ucyBiZWNhdXNlIGNvbnNlY3V0aXZlIG1lbW9yeSBhY2Nlc3NlcworICAgdGVuZCB0byBiZSBtdWNoIGNoZWFwZXIgdGhhbiBzY2F0dGVyZWQgcHJvYmVzLiAgQWZ0ZXIgTElORUFSX1BST0JFUyBzdGVwcywKKyAgIHdlIHRoZW4gdXNlIG9wZW4gYWRkcmVzc2luZyB3aXRoIHRoZSB1cHBlciBiaXRzIGZyb20gdGhlIGhhc2ggdmFsdWUuICBUaGlzCisgICBoZWxwcyBicmVhay11cCBsb25nIGNoYWlucyBvZiBjb2xsaXNpb25zLgorCisgICBBbGwgYXJpdGhtZXRpYyBvbiBoYXNoIHNob3VsZCBpZ25vcmUgb3ZlcmZsb3cuCisKKyAgIFVubGlrZSB0aGUgZGljdGlvbmFyeSBpbXBsZW1lbnRhdGlvbiwgdGhlIGxvb2trZXkgZnVuY3Rpb25zIGNhbiByZXR1cm4KKyAgIE5VTEwgaWYgdGhlIHJpY2ggY29tcGFyaXNvbiByZXR1cm5zIGFuIGVycm9yLgogKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9lcS5oIgogCi0vKiBTZXQgYSBrZXkgZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50LCB3cmFwcGluZyBpdCBpbiBhCi0gKiB0dXBsZSBhdXRvbWF0aWNhbGx5IHNvIHRoYXQgdHVwbGUga2V5cyBhcmUgbm90IHVucGFja2VkIGFzIHRoZQotICogZXhjZXB0aW9uIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyB2b2lkCi1zZXRfa2V5X2Vycm9yKFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnR1cDsKLSAgICB0dXAgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKLSAgICBpZiAoIXR1cCkKLSAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgd2lsbCBleHBlY3QgZXJyb3IgdG8gYmUgc2V0IGFueXdheSAqLwotICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgdHVwKTsKLSAgICBQeV9ERUNSRUYodHVwKTsKLX0KKy8qIE9iamVjdCB1c2VkIGFzIGR1bW15IGtleSB0byBmaWxsIGRlbGV0ZWQgZW50cmllcyAqLworc3RhdGljIFB5T2JqZWN0IF9kdW1teV9zdHJ1Y3Q7CiAKLS8qIFRoaXMgbXVzdCBiZSA+PSAxLiAqLworI2RlZmluZSBkdW1teSAoJl9kdW1teV9zdHJ1Y3QpCisKKy8qIEV4cG9ydGVkIGZvciB0aGUgZ2RiIHBsdWdpbidzIGJlbmVmaXQuICovCitQeU9iamVjdCAqX1B5U2V0X0R1bW15ID0gZHVtbXk7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09IEJlZ2luIGxvZ2ljIGZvciBwcm9iaW5nIHRoZSBoYXNoIHRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworLyogU2V0IHRoaXMgdG8gemVybyB0byB0dXJuLW9mZiBsaW5lYXIgcHJvYmluZyAqLworI2lmbmRlZiBMSU5FQVJfUFJPQkVTCisjZGVmaW5lIExJTkVBUl9QUk9CRVMgOQorI2VuZGlmCisKKy8qIFRoaXMgbXVzdCBiZSA+PSAxICovCiAjZGVmaW5lIFBFUlRVUkJfU0hJRlQgNQogCi0vKiBPYmplY3QgdXNlZCBhcyBkdW1teSBrZXkgdG8gZmlsbCBkZWxldGVkIGVudHJpZXMgKi8KLXN0YXRpYyBQeU9iamVjdCAqZHVtbXkgPSBOVUxMOyAvKiBJbml0aWFsaXplZCBieSBmaXJzdCBjYWxsIHRvIG1ha2VfbmV3X3NldCgpICovCi0KLSNpZmRlZiBQeV9SRUZfREVCVUcKLVB5T2JqZWN0ICoKLV9QeVNldF9EdW1teSh2b2lkKQotewotICAgIHJldHVybiBkdW1teTsKLX0KLSNlbmRpZgotCi0jZGVmaW5lIElOSVRfTk9OWkVST19TRVRfU0xPVFMoc28pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChzbyktPnRhYmxlID0gKHNvKS0+c21hbGx0YWJsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoc28pLT5tYXNrID0gUHlTZXRfTUlOU0laRSAtIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHNvKS0+aGFzaCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCkKLQotI2RlZmluZSBFTVBUWV9UT19NSU5TSVpFKHNvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtZW1zZXQoKHNvKS0+c21hbGx0YWJsZSwgMCwgc2l6ZW9mKChzbyktPnNtYWxsdGFibGUpKTsgICAgICBcCi0gICAgKHNvKS0+dXNlZCA9IChzbyktPmZpbGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIElOSVRfTk9OWkVST19TRVRfU0xPVFMoc28pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApCi0KLS8qIFJldXNlIHNjaGVtZSB0byBzYXZlIGNhbGxzIHRvIG1hbGxvYywgZnJlZSwgYW5kIG1lbXNldCAqLwotI2lmbmRlZiBQeVNldF9NQVhGUkVFTElTVAotI2RlZmluZSBQeVNldF9NQVhGUkVFTElTVCA4MAotI2VuZGlmCi1zdGF0aWMgUHlTZXRPYmplY3QgKmZyZWVfbGlzdFtQeVNldF9NQVhGUkVFTElTVF07Ci1zdGF0aWMgaW50IG51bWZyZWUgPSAwOwotCi0KLS8qCi1UaGUgYmFzaWMgbG9va3VwIGZ1bmN0aW9uIHVzZWQgYnkgYWxsIG9wZXJhdGlvbnMuCi1UaGlzIGlzIGJhc2VkIG9uIEFsZ29yaXRobSBEIGZyb20gS251dGggVm9sLiAzLCBTZWMuIDYuNC4KLU9wZW4gYWRkcmVzc2luZyBpcyBwcmVmZXJyZWQgb3ZlciBjaGFpbmluZyBzaW5jZSB0aGUgbGluayBvdmVyaGVhZCBmb3IKLWNoYWluaW5nIHdvdWxkIGJlIHN1YnN0YW50aWFsICgxMDAlIHdpdGggdHlwaWNhbCBtYWxsb2Mgb3ZlcmhlYWQpLgotCi1UaGUgaW5pdGlhbCBwcm9iZSBpbmRleCBpcyBjb21wdXRlZCBhcyBoYXNoIG1vZCB0aGUgdGFibGUgc2l6ZS4gU3Vic2VxdWVudAotcHJvYmUgaW5kaWNlcyBhcmUgY29tcHV0ZWQgYXMgZXhwbGFpbmVkIGluIE9iamVjdHMvZGljdG9iamVjdC5jLgotCi1BbGwgYXJpdGhtZXRpYyBvbiBoYXNoIHNob3VsZCBpZ25vcmUgb3ZlcmZsb3cuCi0KLVVubGlrZSB0aGUgZGljdGlvbmFyeSBpbXBsZW1lbnRhdGlvbiwgdGhlIGxvb2trZXkgZnVuY3Rpb25zIGNhbiByZXR1cm4KLU5VTEwgaWYgdGhlIHJpY2ggY29tcGFyaXNvbiByZXR1cm5zIGFuIGVycm9yLgotKi8KLQogc3RhdGljIHNldGVudHJ5ICoKLXNldF9sb29ra2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2gpCitzZXRfbG9va2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CiAgICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKLSAgICByZWdpc3RlciBpbnQgY21wOwotICAgIFB5T2JqZWN0ICpzdGFydGtleTsKKyAgICBzZXRlbnRyeSAqZnJlZXNsb3QgPSBOVUxMOworICAgIHNldGVudHJ5ICplbnRyeTsKKyAgICBzaXplX3QgcGVydHVyYiA9IGhhc2g7CisgICAgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCisgICAgc2l6ZV90IGo7CisgICAgaW50IGNtcDsKIAotICAgIGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOwotICAgIGVudHJ5ID0gJnRhYmxlW2ldOwotICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgfHwgZW50cnktPmtleSA9PSBrZXkpCisgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBlbnRyeTsKIAotICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15KQotICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwotICAgIGVsc2UgewotICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCkgewotICAgICAgICAgICAgc3RhcnRrZXkgPSBlbnRyeS0+a2V5OworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleSkKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnN0YXJ0a2V5ID0gZW50cnktPmtleTsKICAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7CiAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0a2V5KTsKICAgICAgICAgICAgIGlmIChjbXAgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgaWYgKHRhYmxlID09IHNvLT50YWJsZSAmJiBlbnRyeS0+a2V5ID09IHN0YXJ0a2V5KSB7CisgICAgICAgICAgICBpZiAodGFibGUgIT0gc28tPnRhYmxlIHx8IGVudHJ5LT5rZXkgIT0gc3RhcnRrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOworICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCisgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworCisgICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRrZXkgPSBlbnRyeS0+a2V5OworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7CisgICAgICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0a2V5LCBrZXksIFB5X0VRKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOworICAgICAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBpZiAodGFibGUgIT0gc28tPnRhYmxlIHx8IGVudHJ5LT5rZXkgIT0gc3RhcnRrZXkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKICAgICAgICAgICAgICAgICBpZiAoY21wID4gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogVGhlIGNvbXBhcmUgZGlkIG1ham9yIG5hc3R5IHN0dWZmIHRvIHRoZQotICAgICAgICAgICAgICAgICAqIHNldDogIHN0YXJ0IG92ZXIuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwogICAgICAgICB9Ci0gICAgICAgIGZyZWVzbG90ID0gTlVMTDsKLSAgICB9CiAKLSAgICAvKiBJbiB0aGUgbG9vcCwga2V5ID09IGR1bW15IGlzIGJ5IGZhciAoZmFjdG9yIG9mIDEwMHMpIHRoZQotICAgICAgIGxlYXN0IGxpa2VseSBvdXRjb21lLCBzbyB0ZXN0IGZvciB0aGF0IGxhc3QuICovCi0gICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7Ci0gICAgICAgIGkgPSAoaSA8PCAyKSArIGkgKyBwZXJ0dXJiICsgMTsKKyAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKKyAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisKICAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOwotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoZnJlZXNsb3QgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBlbnRyeSA9IGZyZWVzbG90OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKLSAgICAgICAgICAgIHN0YXJ0a2V5ID0gZW50cnktPmtleTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7Ci0gICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOwotICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0a2V5KTsKLSAgICAgICAgICAgIGlmIChjbXAgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgaWYgKHRhYmxlID09IHNvLT50YWJsZSAmJiBlbnRyeS0+a2V5ID09IHN0YXJ0a2V5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNtcCA+IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogVGhlIGNvbXBhcmUgZGlkIG1ham9yIG5hc3R5IHN0dWZmIHRvIHRoZQotICAgICAgICAgICAgICAgICAqIHNldDogIHN0YXJ0IG92ZXIuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CiAgICAgfQotICAgIHJldHVybiBlbnRyeTsKKyAgZm91bmRfbnVsbDoKKyAgICByZXR1cm4gZnJlZXNsb3QgPT0gTlVMTCA/IGVudHJ5IDogZnJlZXNsb3Q7CiB9CiAKIC8qCkBAIC0xNTcsMTQgKzEyNCwxNSBAQAogICogc2VlIGlmIHRoZSBjb21wYXJpc29uIGFsdGVyZWQgdGhlIHRhYmxlLgogICovCiBzdGF0aWMgc2V0ZW50cnkgKgotc2V0X2xvb2trZXlfdW5pY29kZShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoKQorc2V0X2xvb2trZXlfdW5pY29kZShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CiAgICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqZnJlZXNsb3QgPSBOVUxMOworICAgIHNldGVudHJ5ICplbnRyeTsKKyAgICBzaXplX3QgcGVydHVyYiA9IGhhc2g7CisgICAgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsKKyAgICBzaXplX3QgajsKIAogICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgbm9uLXVuaWNvZGUga2V5cywKICAgICAgICBpbmNsdWRpbmcgc3ViY2xhc3NlcyBvZiBzdHI7IGUuZy4sIG9uZSByZWFzb24gdG8gc3ViY2xhc3MKQEAgLTE3NCw0NiArMTQyLDk0IEBACiAgICAgICAgIHNvLT5sb29rdXAgPSBzZXRfbG9va2tleTsKICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwogICAgIH0KLSAgICBpID0gKHNpemVfdCloYXNoICYgbWFzazsKLSAgICBlbnRyeSA9ICZ0YWJsZVtpXTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMIHx8IGVudHJ5LT5rZXkgPT0ga2V5KQotICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkpCi0gICAgICAgIGZyZWVzbG90ID0gZW50cnk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkKLSAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgZnJlZXNsb3QgPSBOVUxMOwotICAgIH0KIAotICAgIC8qIEluIHRoZSBsb29wLCBrZXkgPT0gZHVtbXkgaXMgYnkgZmFyIChmYWN0b3Igb2YgMTAwcykgdGhlCi0gICAgICAgbGVhc3QgbGlrZWx5IG91dGNvbWUsIHNvIHRlc3QgZm9yIHRoYXQgbGFzdC4gKi8KLSAgICBmb3IgKHBlcnR1cmIgPSBoYXNoOyA7IHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQpIHsKLSAgICAgICAgaSA9IChpIDw8IDIpICsgaSArIHBlcnR1cmIgKyAxOwotICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gZnJlZXNsb3QgPT0gTlVMTCA/IGVudHJ5IDogZnJlZXNsb3Q7CisgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBlbnRyeTsKKworICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleQogICAgICAgICAgICAgfHwgKGVudHJ5LT5oYXNoID09IGhhc2gKLSAgICAgICAgICAgICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkKLSAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCisgICAgICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQorICAgICAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCiAgICAgICAgICAgICByZXR1cm4gZW50cnk7CiAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCiAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworCisgICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5CisgICAgICAgICAgICAgICAgfHwgKGVudHJ5LT5oYXNoID09IGhhc2gKKyAgICAgICAgICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQorICAgICAgICAgICAgICAgICAgICAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAgIHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQ7CisgICAgICAgIGkgPSBpICogNSArIDEgKyBwZXJ0dXJiOworCisgICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKICAgICB9Ci0gICAgYXNzZXJ0KDApOyAgICAgICAgICAvKiBOT1QgUkVBQ0hFRCAqLwotICAgIHJldHVybiAwOworICBmb3VuZF9udWxsOgorICAgIHJldHVybiBmcmVlc2xvdCA9PSBOVUxMID8gZW50cnkgOiBmcmVlc2xvdDsKIH0KIAogLyoKK0ludGVybmFsIHJvdXRpbmUgdXNlZCBieSBzZXRfdGFibGVfcmVzaXplKCkgdG8gaW5zZXJ0IGFuIGl0ZW0gd2hpY2ggaXMKK2tub3duIHRvIGJlIGFic2VudCBmcm9tIHRoZSBzZXQuICBUaGlzIHJvdXRpbmUgYWxzbyBhc3N1bWVzIHRoYXQKK3RoZSBzZXQgY29udGFpbnMgbm8gZGVsZXRlZCBlbnRyaWVzLiAgQmVzaWRlcyB0aGUgcGVyZm9ybWFuY2UgYmVuZWZpdCwKK3VzaW5nIHNldF9pbnNlcnRfY2xlYW4oKSBpbiBzZXRfdGFibGVfcmVzaXplKCkgaXMgZGFuZ2Vyb3VzIChTRiBidWcgIzE0NTYyMDkpLgorTm90ZSB0aGF0IG5vIHJlZmNvdW50cyBhcmUgY2hhbmdlZCBieSB0aGlzIHJvdXRpbmU7IGlmIG5lZWRlZCwgdGhlIGNhbGxlcgoraXMgcmVzcG9uc2libGUgZm9yIGluY3JlZidpbmcgYGtleWAuCisqLworc3RhdGljIHZvaWQKK3NldF9pbnNlcnRfY2xlYW4oUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKK3sKKyAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7CisgICAgc2V0ZW50cnkgKmVudHJ5OworICAgIHNpemVfdCBwZXJ0dXJiID0gaGFzaDsKKyAgICBzaXplX3QgbWFzayA9IChzaXplX3Qpc28tPm1hc2s7CisgICAgc2l6ZV90IGkgPSAoc2l6ZV90KWhhc2g7CisgICAgc2l6ZV90IGo7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICB9CisgICAgICAgIHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQ7CisgICAgICAgIGkgPSBpICogNSArIDEgKyBwZXJ0dXJiOworICAgIH0KKyAgZm91bmRfbnVsbDoKKyAgICBlbnRyeS0+a2V5ID0ga2V5OworICAgIGVudHJ5LT5oYXNoID0gaGFzaDsKKyAgICBzby0+ZmlsbCsrOworICAgIHNvLT51c2VkKys7Cit9CisKKy8qID09PT09PT09IEVuZCBsb2dpYyBmb3IgcHJvYmluZyB0aGUgaGFzaCB0YWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworLyoKIEludGVybmFsIHJvdXRpbmUgdG8gaW5zZXJ0IGEgbmV3IGtleSBpbnRvIHRoZSB0YWJsZS4KIFVzZWQgYnkgdGhlIHB1YmxpYyBpbnNlcnQgcm91dGluZS4KIEVhdHMgYSByZWZlcmVuY2UgdG8ga2V5LgogKi8KIHN0YXRpYyBpbnQKLXNldF9pbnNlcnRfa2V5KHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCitzZXRfaW5zZXJ0X2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAKICAgICBhc3NlcnQoc28tPmxvb2t1cCAhPSBOVUxMKTsKICAgICBlbnRyeSA9IHNvLT5sb29rdXAoc28sIGtleSwgaGFzaCk7CkBAIC0yMzAsNyArMjQ2LDYgQEAKICAgICAgICAgZW50cnktPmtleSA9IGtleTsKICAgICAgICAgZW50cnktPmhhc2ggPSBoYXNoOwogICAgICAgICBzby0+dXNlZCsrOwotICAgICAgICBQeV9ERUNSRUYoZHVtbXkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIEFDVElWRSAqLwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKQEAgLTIzOSwzNSArMjU0LDYgQEAKIH0KIAogLyoKLUludGVybmFsIHJvdXRpbmUgdXNlZCBieSBzZXRfdGFibGVfcmVzaXplKCkgdG8gaW5zZXJ0IGFuIGl0ZW0gd2hpY2ggaXMKLWtub3duIHRvIGJlIGFic2VudCBmcm9tIHRoZSBzZXQuICBUaGlzIHJvdXRpbmUgYWxzbyBhc3N1bWVzIHRoYXQKLXRoZSBzZXQgY29udGFpbnMgbm8gZGVsZXRlZCBlbnRyaWVzLiAgQmVzaWRlcyB0aGUgcGVyZm9ybWFuY2UgYmVuZWZpdCwKLXVzaW5nIHNldF9pbnNlcnRfY2xlYW4oKSBpbiBzZXRfdGFibGVfcmVzaXplKCkgaXMgZGFuZ2Vyb3VzIChTRiBidWcgIzE0NTYyMDkpLgotTm90ZSB0aGF0IG5vIHJlZmNvdW50cyBhcmUgY2hhbmdlZCBieSB0aGlzIHJvdXRpbmU7IGlmIG5lZWRlZCwgdGhlIGNhbGxlcgotaXMgcmVzcG9uc2libGUgZm9yIGluY3JlZidpbmcgYGtleWAuCi0qLwotc3RhdGljIHZvaWQKLXNldF9pbnNlcnRfY2xlYW4ocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKLXsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IChzaXplX3Qpc28tPm1hc2s7Ci0gICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKLQotICAgIGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOwotICAgIGVudHJ5ID0gJnRhYmxlW2ldOwotICAgIGZvciAocGVydHVyYiA9IGhhc2g7IGVudHJ5LT5rZXkgIT0gTlVMTDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkgewotICAgICAgICBpID0gKGkgPDwgMikgKyBpICsgcGVydHVyYiArIDE7Ci0gICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICB9Ci0gICAgc28tPmZpbGwrKzsKLSAgICBlbnRyeS0+a2V5ID0ga2V5OwotICAgIGVudHJ5LT5oYXNoID0gaGFzaDsKLSAgICBzby0+dXNlZCsrOwotfQotCi0vKgogUmVzdHJ1Y3R1cmUgdGhlIHRhYmxlIGJ5IGFsbG9jYXRpbmcgYSBuZXcgdGFibGUgYW5kIHJlaW5zZXJ0aW5nIGFsbAoga2V5cyBhZ2Fpbi4gIFdoZW4gZW50cmllcyBoYXZlIGJlZW4gZGVsZXRlZCwgdGhlIG5ldyB0YWJsZSBtYXkKIGFjdHVhbGx5IGJlIHNtYWxsZXIgdGhhbiB0aGUgb2xkIG9uZS4KQEAgLTMzMCwyMyArMzE2LDE0IEBACiAgICAgc28tPnRhYmxlID0gbmV3dGFibGU7CiAgICAgc28tPm1hc2sgPSBuZXdzaXplIC0gMTsKICAgICBtZW1zZXQobmV3dGFibGUsIDAsIHNpemVvZihzZXRlbnRyeSkgKiBuZXdzaXplKTsKKyAgICBpID0gc28tPnVzZWQ7CiAgICAgc28tPnVzZWQgPSAwOwotICAgIGkgPSBzby0+ZmlsbDsKICAgICBzby0+ZmlsbCA9IDA7CiAKICAgICAvKiBDb3B5IHRoZSBkYXRhIG92ZXI7IHRoaXMgaXMgcmVmY291bnQtbmV1dHJhbCBmb3IgYWN0aXZlIGVudHJpZXM7CiAgICAgICAgZHVtbXkgZW50cmllcyBhcmVuJ3QgY29waWVkIG92ZXIsIG9mIGNvdXJzZSAqLwogICAgIGZvciAoZW50cnkgPSBvbGR0YWJsZTsgaSA+IDA7IGVudHJ5KyspIHsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgLyogVU5VU0VEICovCi0gICAgICAgICAgICA7Ci0gICAgICAgIH0gZWxzZSBpZiAoZW50cnktPmtleSA9PSBkdW1teSkgewotICAgICAgICAgICAgLyogRFVNTVkgKi8KLSAgICAgICAgICAgIC0taTsKLSAgICAgICAgICAgIGFzc2VydChlbnRyeS0+a2V5ID09IGR1bW15KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIEFDVElWRSAqLworICAgICAgICBpZiAoZW50cnktPmtleSAhPSBOVUxMICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKICAgICAgICAgICAgIC0taTsKICAgICAgICAgICAgIHNldF9pbnNlcnRfY2xlYW4oc28sIGVudHJ5LT5rZXksIGVudHJ5LT5oYXNoKTsKICAgICAgICAgfQpAQCAtMzYwLDkgKzMzNyw5IEBACiAvKiBDQVVUSU9OOiBzZXRfYWRkX2tleS9lbnRyeSgpIG11c3QgZ3VhcmFudGVlIGl0IHdvbid0IHJlc2l6ZSB0aGUgdGFibGUgKi8KIAogc3RhdGljIGludAotc2V0X2FkZF9lbnRyeShyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIHNldGVudHJ5ICplbnRyeSkKK3NldF9hZGRfZW50cnkoUHlTZXRPYmplY3QgKnNvLCBzZXRlbnRyeSAqZW50cnkpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBuX3VzZWQ7CisgICAgUHlfc3NpemVfdCBuX3VzZWQ7CiAgICAgUHlPYmplY3QgKmtleSA9IGVudHJ5LT5rZXk7CiAgICAgUHlfaGFzaF90IGhhc2ggPSBlbnRyeS0+aGFzaDsKIApAQCAtMzc5LDEwICszNTYsMTAgQEAKIH0KIAogc3RhdGljIGludAotc2V0X2FkZF9rZXkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQorc2V0X2FkZF9rZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQogewotICAgIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgbl91c2VkOworICAgIFB5X2hhc2hfdCBoYXNoOworICAgIFB5X3NzaXplX3Qgbl91c2VkOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CiAgICAgICAgIChoYXNoID0gKChQeUFTQ0lJT2JqZWN0ICopIGtleSktPmhhc2gpID09IC0xKSB7CkBAIC00MDcsNyArMzg0LDcgQEAKIAogc3RhdGljIGludAogc2V0X2Rpc2NhcmRfZW50cnkoUHlTZXRPYmplY3QgKnNvLCBzZXRlbnRyeSAqb2xkZW50cnkpCi17ICAgICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKK3sgICAgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICpvbGRfa2V5OwogCiAgICAgZW50cnkgPSAoc28tPmxvb2t1cCkoc28sIG9sZGVudHJ5LT5rZXksIG9sZGVudHJ5LT5oYXNoKTsKQEAgLTQxNiw3ICszOTMsNiBAQAogICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgIHx8ICBlbnRyeS0+a2V5ID09IGR1bW15KQogICAgICAgICByZXR1cm4gRElTQ0FSRF9OT1RGT1VORDsKICAgICBvbGRfa2V5ID0gZW50cnktPmtleTsKLSAgICBQeV9JTkNSRUYoZHVtbXkpOwogICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKICAgICBzby0+dXNlZC0tOwogICAgIFB5X0RFQ1JFRihvbGRfa2V5KTsKQEAgLTQyNiw4ICs0MDIsOCBAQAogc3RhdGljIGludAogc2V0X2Rpc2NhcmRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKLSAgICByZWdpc3RlciBQeV9oYXNoX3QgaGFzaDsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfaGFzaF90IGhhc2g7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICpvbGRfa2V5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwpAQCAtNDQ0LDEzICs0MjAsMjMgQEAKICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMICB8fCAgZW50cnktPmtleSA9PSBkdW1teSkKICAgICAgICAgcmV0dXJuIERJU0NBUkRfTk9URk9VTkQ7CiAgICAgb2xkX2tleSA9IGVudHJ5LT5rZXk7Ci0gICAgUHlfSU5DUkVGKGR1bW15KTsKICAgICBlbnRyeS0+a2V5ID0gZHVtbXk7CiAgICAgc28tPnVzZWQtLTsKICAgICBQeV9ERUNSRUYob2xkX2tleSk7CiAgICAgcmV0dXJuIERJU0NBUkRfRk9VTkQ7CiB9CiAKK3N0YXRpYyB2b2lkCitzZXRfZW1wdHlfdG9fbWluc2l6ZShQeVNldE9iamVjdCAqc28pCit7CisgICAgbWVtc2V0KHNvLT5zbWFsbHRhYmxlLCAwLCBzaXplb2Yoc28tPnNtYWxsdGFibGUpKTsKKyAgICBzby0+ZmlsbCA9IDA7CisgICAgc28tPnVzZWQgPSAwOworICAgIHNvLT5tYXNrID0gUHlTZXRfTUlOU0laRSAtIDE7CisgICAgc28tPnRhYmxlID0gc28tPnNtYWxsdGFibGU7CisgICAgc28tPmhhc2ggPSAtMTsKK30KKwogc3RhdGljIGludAogc2V0X2NsZWFyX2ludGVybmFsKFB5U2V0T2JqZWN0ICpzbykKIHsKQEAgLTQ1OCwxNCArNDQ0LDEzIEBACiAgICAgaW50IHRhYmxlX2lzX21hbGxvY2VkOwogICAgIFB5X3NzaXplX3QgZmlsbDsKICAgICBzZXRlbnRyeSBzbWFsbF9jb3B5W1B5U2V0X01JTlNJWkVdOwotI2lmZGVmIFB5X0RFQlVHCi0gICAgUHlfc3NpemVfdCBpLCBuOwotICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKIAotICAgIG4gPSBzby0+bWFzayArIDE7Ci0gICAgaSA9IDA7CisjaWZkZWYgUHlfREVCVUcKKyAgICBQeV9zc2l6ZV90IGkgPSAwOworICAgIFB5X3NzaXplX3QgbiA9IHNvLT5tYXNrICsgMTsKICNlbmRpZgogCisgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIHRhYmxlID0gc28tPnRhYmxlOwogICAgIGFzc2VydCh0YWJsZSAhPSBOVUxMKTsKICAgICB0YWJsZV9pc19tYWxsb2NlZCA9IHRhYmxlICE9IHNvLT5zbWFsbHRhYmxlOwpAQCAtNDc4LDcgKzQ2Myw3IEBACiAgICAgICovCiAgICAgZmlsbCA9IHNvLT5maWxsOwogICAgIGlmICh0YWJsZV9pc19tYWxsb2NlZCkKLSAgICAgICAgRU1QVFlfVE9fTUlOU0laRShzbyk7CisgICAgICAgIHNldF9lbXB0eV90b19taW5zaXplKHNvKTsKIAogICAgIGVsc2UgaWYgKGZpbGwgPiAwKSB7CiAgICAgICAgIC8qIEl0J3MgYSBzbWFsbCB0YWJsZSB3aXRoIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGNsZWFyZWQuCkBAIC00ODcsNyArNDcyLDcgQEAKICAgICAgICAgICovCiAgICAgICAgIG1lbWNweShzbWFsbF9jb3B5LCB0YWJsZSwgc2l6ZW9mKHNtYWxsX2NvcHkpKTsKICAgICAgICAgdGFibGUgPSBzbWFsbF9jb3B5OwotICAgICAgICBFTVBUWV9UT19NSU5TSVpFKHNvKTsKKyAgICAgICAgc2V0X2VtcHR5X3RvX21pbnNpemUoc28pOwogICAgIH0KICAgICAvKiBlbHNlIGl0J3MgYSBzbWFsbCB0YWJsZSB0aGF0J3MgYWxyZWFkeSBlbXB0eSAqLwogCkBAIC01MDIsNyArNDg3LDggQEAKICNlbmRpZgogICAgICAgICBpZiAoZW50cnktPmtleSkgewogICAgICAgICAgICAgLS1maWxsOwotICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgIT0gZHVtbXkpCisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOwogICAgICAgICB9CiAjaWZkZWYgUHlfREVCVUcKICAgICAgICAgZWxzZQpAQCAtNTMzLDcgKzUxOSw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgbWFzazsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqdGFibGU7CisgICAgc2V0ZW50cnkgKnRhYmxlOwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIGkgPSAqcG9zX3B0cjsKQEAgLTU1Myw3ICs1MzksNyBAQAogc3RhdGljIHZvaWQKIHNldF9kZWFsbG9jKFB5U2V0T2JqZWN0ICpzbykKIHsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5X3NzaXplX3QgZmlsbCA9IHNvLT5maWxsOwogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2soc28pOwogICAgIFB5X1RSQVNIQ0FOX1NBRkVfQkVHSU4oc28pCkBAIC01NjMsMTUgKzU0OSwxMyBAQAogICAgIGZvciAoZW50cnkgPSBzby0+dGFibGU7IGZpbGwgPiAwOyBlbnRyeSsrKSB7CiAgICAgICAgIGlmIChlbnRyeS0+a2V5KSB7CiAgICAgICAgICAgICAtLWZpbGw7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSAhPSBkdW1teSkKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHNvLT50YWJsZSAhPSBzby0+c21hbGx0YWJsZSkKICAgICAgICAgUHlNZW1fREVMKHNvLT50YWJsZSk7Ci0gICAgaWYgKG51bWZyZWUgPCBQeVNldF9NQVhGUkVFTElTVCAmJiBQeUFueVNldF9DaGVja0V4YWN0KHNvKSkKLSAgICAgICAgZnJlZV9saXN0W251bWZyZWUrK10gPSBzbzsKLSAgICBlbHNlCi0gICAgICAgIFB5X1RZUEUoc28pLT50cF9mcmVlKHNvKTsKKyAgICBQeV9UWVBFKHNvKS0+dHBfZnJlZShzbyk7CiAgICAgUHlfVFJBU0hDQU5fU0FGRV9FTkQoc28pCiB9CiAKQEAgLTYzMiw4ICs2MTYsOCBAQAogICAgIFB5U2V0T2JqZWN0ICpvdGhlcjsKICAgICBQeU9iamVjdCAqa2V5OwogICAgIFB5X2hhc2hfdCBoYXNoOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfc3NpemVfdCBpOworICAgIHNldGVudHJ5ICplbnRyeTsKIAogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKG90aGVyc2V0KSk7CkBAIC03MDEsOCArNjg1LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfcG9wKFB5U2V0T2JqZWN0ICpzbykKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGkgPSAwOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9zc2l6ZV90IGkgPSAwOworICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeU9iamVjdCAqa2V5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwpAQCAtNzM0LDcgKzcxOCw2IEBACiAgICAgICAgIH0KICAgICB9CiAgICAga2V5ID0gZW50cnktPmtleTsKLSAgICBQeV9JTkNSRUYoZHVtbXkpOwogICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKICAgICBzby0+dXNlZC0tOwogICAgIHNvLT50YWJsZVswXS5oYXNoID0gaSArIDE7ICAvKiBuZXh0IHBsYWNlIHRvIHN0YXJ0ICovCkBAIC04NjksOCArODUyLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqc2V0aXRlcl9pdGVybmV4dChzZXRpdGVyb2JqZWN0ICpzaSkKIHsKICAgICBQeU9iamVjdCAqa2V5OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzazsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfc3NpemVfdCBpLCBtYXNrOworICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeVNldE9iamVjdCAqc28gPSBzaS0+c2lfc2V0OwogCiAgICAgaWYgKHNvID09IE5VTEwpCkBAIC0xMDI0LDMzICsxMDA3LDE5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogbWFrZV9uZXdfc2V0KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbyA9IE5VTEw7Ci0KLSAgICBpZiAoZHVtbXkgPT0gTlVMTCkgeyAvKiBBdXRvLWluaXRpYWxpemUgZHVtbXkgKi8KLSAgICAgICAgZHVtbXkgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPGR1bW15IGtleT4iKTsKLSAgICAgICAgaWYgKGR1bW15ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgUHlTZXRPYmplY3QgKnNvID0gTlVMTDsKIAogICAgIC8qIGNyZWF0ZSBQeVNldE9iamVjdCBzdHJ1Y3R1cmUgKi8KLSAgICBpZiAobnVtZnJlZSAmJgotICAgICAgICAodHlwZSA9PSAmUHlTZXRfVHlwZSAgfHwgIHR5cGUgPT0gJlB5RnJvemVuU2V0X1R5cGUpKSB7Ci0gICAgICAgIHNvID0gZnJlZV9saXN0Wy0tbnVtZnJlZV07Ci0gICAgICAgIGFzc2VydCAoc28gIT0gTlVMTCAmJiBQeUFueVNldF9DaGVja0V4YWN0KHNvKSk7Ci0gICAgICAgIFB5X1RZUEUoc28pID0gdHlwZTsKLSAgICAgICAgX1B5X05ld1JlZmVyZW5jZSgoUHlPYmplY3QgKilzbyk7Ci0gICAgICAgIEVNUFRZX1RPX01JTlNJWkUoc28pOwotICAgICAgICBQeU9iamVjdF9HQ19UcmFjayhzbyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc28gPSAoUHlTZXRPYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKLSAgICAgICAgaWYgKHNvID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgLyogdHBfYWxsb2MgaGFzIGFscmVhZHkgemVyb2VkIHRoZSBzdHJ1Y3R1cmUgKi8KLSAgICAgICAgYXNzZXJ0KHNvLT50YWJsZSA9PSBOVUxMICYmIHNvLT5maWxsID09IDAgJiYgc28tPnVzZWQgPT0gMCk7Ci0gICAgICAgIElOSVRfTk9OWkVST19TRVRfU0xPVFMoc28pOwotICAgIH0KKyAgICBzbyA9IChQeVNldE9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOworICAgIGlmIChzbyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIHNvLT5maWxsID0gMDsKKyAgICBzby0+dXNlZCA9IDA7CisgICAgc28tPm1hc2sgPSBQeVNldF9NSU5TSVpFIC0gMTsKKyAgICBzby0+dGFibGUgPSBzby0+c21hbGx0YWJsZTsKICAgICBzby0+bG9va3VwID0gc2V0X2xvb2trZXlfdW5pY29kZTsKKyAgICBzby0+aGFzaCA9IC0xOwogICAgIHNvLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAKICAgICBpZiAoaXRlcmFibGUgIT0gTlVMTCkgewpAQCAtMTExMywzNSArMTA4MiwxNSBAQAogaW50CiBQeVNldF9DbGVhckZyZWVMaXN0KHZvaWQpCiB7Ci0gICAgaW50IGZyZWVsaXN0X3NpemUgPSBudW1mcmVlOwotICAgIFB5U2V0T2JqZWN0ICpzbzsKLQotICAgIHdoaWxlIChudW1mcmVlKSB7Ci0gICAgICAgIG51bWZyZWUtLTsKLSAgICAgICAgc28gPSBmcmVlX2xpc3RbbnVtZnJlZV07Ci0gICAgICAgIFB5T2JqZWN0X0dDX0RlbChzbyk7Ci0gICAgfQotICAgIHJldHVybiBmcmVlbGlzdF9zaXplOworICAgIHJldHVybiAwOwogfQogCiB2b2lkCiBQeVNldF9GaW5pKHZvaWQpCiB7Ci0gICAgUHlTZXRfQ2xlYXJGcmVlTGlzdCgpOwotICAgIFB5X0NMRUFSKGR1bW15KTsKICAgICBQeV9DTEVBUihlbXB0eWZyb3plbnNldCk7CiB9CiAKLS8qIFByaW50IHN1bW1hcnkgaW5mbyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIG9wdGltaXplZCBhbGxvY2F0b3IgKi8KLXZvaWQKLV9QeVNldF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCkKLXsKLSAgICBfUHlEZWJ1Z0FsbG9jYXRvclN0YXRzKG91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmVlIFB5U2V0T2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWZyZWUsIHNpemVvZihQeVNldE9iamVjdCkpOwotfQotCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewpAQCAtMTk1Miw3ICsxOTAxLDcgQEAKICAgICB9CiAKICAgICBpZiAocnYgPT0gRElTQ0FSRF9OT1RGT1VORCkgewotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0yNDE0LDcgKzIzNjMsNyBAQAogICAgIFB5X3NzaXplX3QgY291bnQ7CiAgICAgY2hhciAqczsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKmVsZW09TlVMTCwgKmR1cD1OVUxMLCAqdCwgKmYsICpkdXAyLCAqeDsKKyAgICBQeU9iamVjdCAqZWxlbT1OVUxMLCAqZHVwPU5VTEwsICp0LCAqZiwgKmR1cDIsICp4PU5VTEw7CiAgICAgUHlPYmplY3QgKm9iID0gKFB5T2JqZWN0ICopc287CiAgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlPYmplY3QgKnN0cjsKQEAgLTI1MzcsMyArMjQ4Niw0NiBAQAogI3VuZGVmIGFzc2VydFJhaXNlcwogCiAjZW5kaWYKKworLyoqKioqIER1bW15IFN0cnVjdCAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2R1bW15X3JlcHIoUHlPYmplY3QgKm9wKQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiPGR1bW15IGtleT4iKTsKK30KKworc3RhdGljIHZvaWQKK2R1bW15X2RlYWxsb2MoUHlPYmplY3QqIGlnbm9yZSkKK3sKKyAgICBQeV9GYXRhbEVycm9yKCJkZWFsbG9jYXRpbmcgPGR1bW15IGtleT4iKTsKK30KKworc3RhdGljIFB5VHlwZU9iamVjdCBfUHlTZXREdW1teV9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgIjxkdW1teSBrZXk+IHR5cGUiLAorICAgIDAsCisgICAgMCwKKyAgICBkdW1teV9kZWFsbG9jLCAgICAgIC8qdHBfZGVhbGxvYyovIC8qbmV2ZXIgY2FsbGVkKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KKyAgICBkdW1teV9yZXByLCAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zdHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxULCAvKnRwX2ZsYWdzICovCit9OworCitzdGF0aWMgUHlPYmplY3QgX2R1bW15X3N0cnVjdCA9IHsKKyAgX1B5T2JqZWN0X0VYVFJBX0lOSVQKKyAgMiwgJl9QeVNldER1bW15X1R5cGUKK307CisKZGlmZiAtLWdpdCBhL09iamVjdHMvc2xpY2VvYmplY3QuYyBiL09iamVjdHMvc2xpY2VvYmplY3QuYwppbmRleCAxNTkzMzM1Li41MmYxYzg5IDEwMDY0NAotLS0gYS9PYmplY3RzL3NsaWNlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zbGljZW9iamVjdC5jCkBAIC0yOTksMjMgKzI5OSwxOTggQEAKICAgICB7MH0KIH07CiAKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgc2xpY2UgYXJndW1lbnQgdG8gYSBQeUxvbmcsIGFuZCByYWlzZSBUeXBlRXJyb3IKKyAgIHdpdGggYSBzdWl0YWJsZSBtZXNzYWdlIG9uIGZhaWx1cmUuICovCisKK3N0YXRpYyBQeU9iamVjdCoKK2V2YWx1YXRlX3NsaWNlX2luZGV4KFB5T2JqZWN0ICp2KQoreworICAgIGlmIChQeUluZGV4X0NoZWNrKHYpKSB7CisgICAgICAgIHJldHVybiBQeU51bWJlcl9JbmRleCh2KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2UgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKy8qIENvbXB1dGUgc2xpY2UgaW5kaWNlcyBnaXZlbiBhIHNsaWNlIGFuZCBsZW5ndGguICBSZXR1cm4gLTEgb24gZmFpbHVyZS4gIFVzZWQKKyAgIGJ5IHNsaWNlLmluZGljZXMgYW5kIHJhbmdlb2JqZWN0IHNsaWNpbmcuICBBc3N1bWVzIHRoYXQgYGxlbmAgaXMgYQorICAgbm9ubmVnYXRpdmUgaW5zdGFuY2Ugb2YgUHlMb25nLiAqLworCitpbnQKK19QeVNsaWNlX0dldExvbmdJbmRpY2VzKFB5U2xpY2VPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0YXJ0X3B0ciwgUHlPYmplY3QgKipzdG9wX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RlcF9wdHIpCit7CisgICAgUHlPYmplY3QgKnN0YXJ0PU5VTEwsICpzdG9wPU5VTEwsICpzdGVwPU5VTEw7CisgICAgUHlPYmplY3QgKnVwcGVyPU5VTEwsICpsb3dlcj1OVUxMOworICAgIGludCBzdGVwX2lzX25lZ2F0aXZlLCBjbXBfcmVzdWx0OworCisgICAgLyogQ29udmVydCBzdGVwIHRvIGFuIGludGVnZXI7IHJhaXNlIGZvciB6ZXJvIHN0ZXAuICovCisgICAgaWYgKHNlbGYtPnN0ZXAgPT0gUHlfTm9uZSkgeworICAgICAgICBzdGVwID0gUHlMb25nX0Zyb21Mb25nKDFMKTsKKyAgICAgICAgaWYgKHN0ZXAgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHN0ZXBfaXNfbmVnYXRpdmUgPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW50IHN0ZXBfc2lnbjsKKyAgICAgICAgc3RlcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNlbGYtPnN0ZXApOworICAgICAgICBpZiAoc3RlcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgc3RlcF9zaWduID0gX1B5TG9uZ19TaWduKHN0ZXApOworICAgICAgICBpZiAoc3RlcF9zaWduID09IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBzdGVwIGNhbm5vdCBiZSB6ZXJvIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHN0ZXBfaXNfbmVnYXRpdmUgPSBzdGVwX3NpZ24gPCAwOworICAgIH0KKworICAgIC8qIEZpbmQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBmb3Igc3RhcnQgYW5kIHN0b3AuICovCisgICAgaWYgKHN0ZXBfaXNfbmVnYXRpdmUpIHsKKyAgICAgICAgbG93ZXIgPSBQeUxvbmdfRnJvbUxvbmcoLTFMKTsKKyAgICAgICAgaWYgKGxvd2VyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHVwcGVyID0gUHlOdW1iZXJfQWRkKGxlbmd0aCwgbG93ZXIpOworICAgICAgICBpZiAodXBwZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsb3dlciA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgICAgIGlmIChsb3dlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICB1cHBlciA9IGxlbmd0aDsKKyAgICAgICAgUHlfSU5DUkVGKHVwcGVyKTsKKyAgICB9CisKKyAgICAvKiBDb21wdXRlIHN0YXJ0LiAqLworICAgIGlmIChzZWxmLT5zdGFydCA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0YXJ0ID0gc3RlcF9pc19uZWdhdGl2ZSA/IHVwcGVyIDogbG93ZXI7CisgICAgICAgIFB5X0lOQ1JFRihzdGFydCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdGFydCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNlbGYtPnN0YXJ0KTsKKyAgICAgICAgaWYgKHN0YXJ0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChfUHlMb25nX1NpZ24oc3RhcnQpIDwgMCkgeworICAgICAgICAgICAgLyogc3RhcnQgKz0gbGVuZ3RoICovCisgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlOdW1iZXJfQWRkKHN0YXJ0LCBsZW5ndGgpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gdG1wOworICAgICAgICAgICAgaWYgKHN0YXJ0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydCwgbG93ZXIsIFB5X0xUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYobG93ZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBsb3dlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnQsIHVwcGVyLCBQeV9HVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHVwcGVyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gdXBwZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDb21wdXRlIHN0b3AuICovCisgICAgaWYgKHNlbGYtPnN0b3AgPT0gUHlfTm9uZSkgeworICAgICAgICBzdG9wID0gc3RlcF9pc19uZWdhdGl2ZSA/IGxvd2VyIDogdXBwZXI7CisgICAgICAgIFB5X0lOQ1JFRihzdG9wKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0b3AgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzZWxmLT5zdG9wKTsKKyAgICAgICAgaWYgKHN0b3AgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKF9QeUxvbmdfU2lnbihzdG9wKSA8IDApIHsKKyAgICAgICAgICAgIC8qIHN0b3AgKz0gbGVuZ3RoICovCisgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlOdW1iZXJfQWRkKHN0b3AsIGxlbmd0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICBzdG9wID0gdG1wOworICAgICAgICAgICAgaWYgKHN0b3AgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0b3AsIGxvd2VyLCBQeV9MVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGxvd2VyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICAgICAgc3RvcCA9IGxvd2VyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdG9wLCB1cHBlciwgUHlfR1QpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih1cHBlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgICAgIHN0b3AgPSB1cHBlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICpzdGFydF9wdHIgPSBzdGFydDsKKyAgICAqc3RvcF9wdHIgPSBzdG9wOworICAgICpzdGVwX3B0ciA9IHN0ZXA7CisgICAgUHlfREVDUkVGKHVwcGVyKTsKKyAgICBQeV9ERUNSRUYobG93ZXIpOworICAgIHJldHVybiAwOworCisgIGVycm9yOgorICAgICpzdGFydF9wdHIgPSAqc3RvcF9wdHIgPSAqc3RlcF9wdHIgPSBOVUxMOworICAgIFB5X1hERUNSRUYoc3RhcnQpOworICAgIFB5X1hERUNSRUYoc3RvcCk7CisgICAgUHlfWERFQ1JFRihzdGVwKTsKKyAgICBQeV9YREVDUkVGKHVwcGVyKTsKKyAgICBQeV9YREVDUkVGKGxvd2VyKTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHNsaWNlLmluZGljZXMuICovCisKIHN0YXRpYyBQeU9iamVjdCoKIHNsaWNlX2luZGljZXMoUHlTbGljZU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGxlbikKIHsKLSAgICBQeV9zc2l6ZV90IGlsZW4sIHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbmd0aDsKKyAgICBQeU9iamVjdCAqc3RhcnQsICpzdG9wLCAqc3RlcDsKKyAgICBQeU9iamVjdCAqbGVuZ3RoOworICAgIGludCBlcnJvcjsKIAotICAgIGlsZW4gPSBQeU51bWJlcl9Bc1NzaXplX3QobGVuLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICAvKiBDb252ZXJ0IGxlbmd0aCB0byBhbiBpbnRlZ2VyIGlmIG5lY2Vzc2FyeTsgcmFpc2UgZm9yIG5lZ2F0aXZlIGxlbmd0aC4gKi8KKyAgICBsZW5ndGggPSBQeU51bWJlcl9JbmRleChsZW4pOworICAgIGlmIChsZW5ndGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoaWxlbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgaWYgKF9QeUxvbmdfU2lnbihsZW5ndGgpIDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggc2hvdWxkIG5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgICBQeV9ERUNSRUYobGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeU9iamVjdCopc2VsZiwgaWxlbiwgJnN0YXJ0LCAmc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ZXAsICZzbGljZWxlbmd0aCkgPCAwKSB7CisgICAgZXJyb3IgPSBfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhzZWxmLCBsZW5ndGgsICZzdGFydCwgJnN0b3AsICZzdGVwKTsKKyAgICBQeV9ERUNSRUYobGVuZ3RoKTsKKyAgICBpZiAoZXJyb3IgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIobm5uKSIsIHN0YXJ0LCBzdG9wLCBzdGVwKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTk5OKSIsIHN0YXJ0LCBzdG9wLCBzdGVwKTsKIH0KIAogUHlEb2NfU1RSVkFSKHNsaWNlX2luZGljZXNfZG9jLApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmgKaW5kZXggZjYyODEzZC4uZDBmYzE4ZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyhTVFIsTEVOKSAgIF9QeVVuaWNvZGVfRnJvbUFTQ0lJKChjaGFyKikoU1RSKSwoTEVOKSkKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmggYi9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaAppbmRleCBmMzUzMzY3Li41NzMxOWM2IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaApAQCAtMzgsOCArMzgsOCBAQAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmIChfUHlfSVNfQUxJR05FRChzLCBTSVpFT0ZfTE9ORykpIHsKICAgICAgICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpfcyA9IHM7Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXIgU1RSSU5HTElCX0NIQVIgKl9wID0gcDsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfcyA9IHM7CisgICAgICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgKl9wID0gcDsKICAgICAgICAgICAgICAgICB3aGlsZSAoX3MgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGEgd2hvbGUgbG9uZyBhdCBhIHRpbWUgKGVpdGhlciA0IG9yIDggYnl0ZXMpLAogICAgICAgICAgICAgICAgICAgICAgICBhbmQgZG8gYSBmYXN0IHVucm9sbGVkIGNvcHkgaWYgaXQgb25seSBjb250YWlucyBBU0NJSQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopIF9zOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBBU0NJSV9DSEFSX01BU0spCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICAgICAgICAgICAgICAgICAgICAgX3BbMF0gPSAoU1RSSU5HTElCX0NIQVIpKHZhbHVlICYgMHhGRnUpOwogICAgICAgICAgICAgICAgICAgICBfcFsxXSA9IChTVFJJTkdMSUJfQ0hBUikoKHZhbHVlID4+IDgpICYgMHhGRnUpOwogICAgICAgICAgICAgICAgICAgICBfcFsyXSA9IChTVFJJTkdMSUJfQ0hBUikoKHZhbHVlID4+IDE2KSAmIDB4RkZ1KTsKQEAgLTQ4Niw3ICs0ODYsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEgPSAqaW5wdHI7CiAgICAgU1RSSU5HTElCX0NIQVIgKnAgPSBkZXN0ICsgKm91dHBvczsKICAgICAvKiBPZmZzZXRzIGZyb20gcSBmb3IgcmV0cmlldmluZyBieXRlIHBhaXJzIGluIHRoZSByaWdodCBvcmRlci4gKi8KLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICAgICBpbnQgaWhpID0gISFuYXRpdmVfb3JkZXJpbmcsIGlsbyA9ICFuYXRpdmVfb3JkZXJpbmc7CiAjZWxzZQogICAgIGludCBpaGkgPSAhbmF0aXZlX29yZGVyaW5nLCBpbG8gPSAhIW5hdGl2ZV9vcmRlcmluZzsKQEAgLTQ5OSw3ICs0OTksNyBAQAogICAgICAgICAgICByZWFkcyBhcmUgbW9yZSBleHBlbnNpdmUsIGJldHRlciB0byBkZWZlciB0byBhbm90aGVyIGl0ZXJhdGlvbi4gKi8KICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHEsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAgICAgLyogRmFzdCBwYXRoIGZvciBydW5zIG9mIGluLXJhbmdlIG5vbi1zdXJyb2dhdGUgY2hhcnMuICovCi0gICAgICAgICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpfcSA9IHE7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfcSA9IHE7CiAgICAgICAgICAgICB3aGlsZSAoX3EgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2sgPSAqICh1bnNpZ25lZCBsb25nICopIF9xOwogICAgICAgICAgICAgICAgIGlmIChuYXRpdmVfb3JkZXJpbmcpIHsKQEAgLTUxNyw3ICs1MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBibG9jayA9IFNXQUIoYmxvY2spOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogIyBpZiBTSVpFT0ZfTE9ORyA9PSA0CiAgICAgICAgICAgICAgICAgcFswXSA9IChTVFJJTkdMSUJfQ0hBUikoYmxvY2sgJiAweEZGRkZ1KTsKICAgICAgICAgICAgICAgICBwWzFdID0gKFNUUklOR0xJQl9DSEFSKShibG9jayA+PiAxNik7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9lcS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaAppbmRleCAzZTVmNTEwLi5mOGZkMzg0IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9lcS5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2VxLmgKQEAgLTYsOCArNiw4IEBACiBQeV9MT0NBTF9JTkxJTkUoaW50KQogdW5pY29kZV9lcShQeU9iamVjdCAqYWEsIFB5T2JqZWN0ICpiYikKIHsKLSAgICByZWdpc3RlciBQeVVuaWNvZGVPYmplY3QgKmEgPSAoUHlVbmljb2RlT2JqZWN0ICopYWE7Ci0gICAgcmVnaXN0ZXIgUHlVbmljb2RlT2JqZWN0ICpiID0gKFB5VW5pY29kZU9iamVjdCAqKWJiOworICAgIFB5VW5pY29kZU9iamVjdCAqYSA9IChQeVVuaWNvZGVPYmplY3QgKilhYTsKKyAgICBQeVVuaWNvZGVPYmplY3QgKmIgPSAoUHlVbmljb2RlT2JqZWN0ICopYmI7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGEpID09IC0xIHx8IFB5VW5pY29kZV9SRUFEWShiKSA9PSAtMSkgewogICAgICAgICBhc3NlcnQoMCAmJiAidW5pY29kZV9lcSByZWFkeSBmYWlsIik7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggYi9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKaW5kZXggNTVhYzc3ZC4uY2Q3Y2FjNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaApAQCAtMTQyLDYgKzE0Miw4IEBACiAgICAgbWFzayA9IDA7CiAKICAgICBpZiAobW9kZSAhPSBGQVNUX1JTRUFSQ0gpIHsKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnNzID0gcyArIG0gLSAxOworICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqcHAgPSBwICsgbSAtIDE7CiAKICAgICAgICAgLyogY3JlYXRlIGNvbXByZXNzZWQgYm95ZXItbW9vcmUgZGVsdGEgMSB0YWJsZSAqLwogCkBAIC0xNTYsNyArMTU4LDcgQEAKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IHc7IGkrKykgewogICAgICAgICAgICAgLyogbm90ZTogdXNpbmcgbWxhc3QgaW4gdGhlIHNraXAgcGF0aCBzbG93cyB0aGluZ3MgZG93biBvbiB4ODYgKi8KLSAgICAgICAgICAgIGlmIChzW2krbS0xXSA9PSBwW20tMV0pIHsKKyAgICAgICAgICAgIGlmIChzc1tpXSA9PSBwcFswXSkgewogICAgICAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSBtYXRjaCAqLwogICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBtbGFzdDsgaisrKQogICAgICAgICAgICAgICAgICAgICBpZiAoc1tpK2pdICE9IHBbal0pCkBAIC0xNzIsMTMgKzE3NCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLyogbWlzczogY2hlY2sgaWYgbmV4dCBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCi0gICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc1tpK21dKSkKKyAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzc1tpKzFdKSkKICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBtOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBza2lwOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBza2lwOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2krbV0pKQorICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNzW2krMV0pKQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIG07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBiL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaAppbmRleCAwNjU1OWM4Li5lYjNmZTg4IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgd2hpbGUgKHAgPCBlbmQpIHsKICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHAsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpfcCA9IHA7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfcCA9IHA7CiAgICAgICAgICAgICB3aGlsZSAoX3AgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAqKHVuc2lnbmVkIGxvbmcgKikgX3A7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYgVUNTMV9BU0NJSV9DSEFSX01BU0spCkBAIC02Niw3ICs2Niw3IEBACiAjZWxzZQogI2Vycm9yIEludmFsaWQgU1RSSU5HTElCX1NJWkVPRl9DSEFSIChtdXN0IGJlIDEsIDIgb3IgNCkKICNlbmRpZgotICAgIHJlZ2lzdGVyIFB5X1VDUzQgbWFzazsKKyAgICBQeV9VQ1M0IG1hc2s7CiAgICAgUHlfc3NpemVfdCBuID0gZW5kIC0gYmVnaW47CiAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnAgPSBiZWdpbjsKICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gYmVnaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKG4sIDQpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvam9pbi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvam9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NjhiMzEKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qIHN0cmluZ2xpYjogYnl0ZXMgam9pbmluZyBpbXBsZW1lbnRhdGlvbiAqLworCisjaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSICE9IDEKKyNlcnJvciBqb2luLmggb25seSBjb21wYXRpYmxlIHdpdGggYnl0ZS13aXNlIHN0cmluZ3MKKyNlbmRpZgorCitQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKK1NUUklOR0xJQihieXRlc19qb2luKShQeU9iamVjdCAqc2VwLCBQeU9iamVjdCAqaXRlcmFibGUpCit7CisgICAgY2hhciAqc2Vwc3RyID0gU1RSSU5HTElCX1NUUihzZXApOworICAgIGNvbnN0IFB5X3NzaXplX3Qgc2VwbGVuID0gU1RSSU5HTElCX0xFTihzZXApOworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworICAgIGNoYXIgKnA7CisgICAgUHlfc3NpemVfdCBzZXFsZW4gPSAwOworICAgIFB5X3NzaXplX3Qgc3ogPSAwOworICAgIFB5X3NzaXplX3QgaSwgbmJ1ZnM7CisgICAgUHlPYmplY3QgKnNlcSwgKml0ZW07CisgICAgUHlfYnVmZmVyICpidWZmZXJzID0gTlVMTDsKKyNkZWZpbmUgTkJfU1RBVElDX0JVRkZFUlMgMTAKKyAgICBQeV9idWZmZXIgc3RhdGljX2J1ZmZlcnNbTkJfU1RBVElDX0JVRkZFUlNdOworCisgICAgc2VxID0gUHlTZXF1ZW5jZV9GYXN0KGl0ZXJhYmxlLCAiY2FuIG9ubHkgam9pbiBhbiBpdGVyYWJsZSIpOworICAgIGlmIChzZXEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZXFsZW4gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKTsKKyAgICBpZiAoc2VxbGVuID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgIHJldHVybiBTVFJJTkdMSUJfTkVXKE5VTEwsIDApOworICAgIH0KKyNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICBpZiAoc2VxbGVuID09IDEpIHsKKyAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIDApOworICAgICAgICBpZiAoU1RSSU5HTElCX0NIRUNLX0VYQUNUKGl0ZW0pKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIHJldHVybiBpdGVtOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgaWYgKHNlcWxlbiA+IE5CX1NUQVRJQ19CVUZGRVJTKSB7CisgICAgICAgIGJ1ZmZlcnMgPSBQeU1lbV9ORVcoUHlfYnVmZmVyLCBzZXFsZW4pOworICAgICAgICBpZiAoYnVmZmVycyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYnVmZmVycyA9IHN0YXRpY19idWZmZXJzOworICAgIH0KKworICAgIC8qIEhlcmUgaXMgdGhlIGdlbmVyYWwgY2FzZS4gIERvIGEgcHJlLXBhc3MgdG8gZmlndXJlIG91dCB0aGUgdG90YWwKKyAgICAgKiBhbW91bnQgb2Ygc3BhY2Ugd2UnbGwgbmVlZCAoc3opLCBhbmQgc2VlIHdoZXRoZXIgYWxsIGFyZ3VtZW50cyBhcmUKKyAgICAgKiBidWZmZXItY29tcGF0aWJsZS4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwLCBuYnVmcyA9IDA7IGkgPCBzZXFsZW47IGkrKykgeworICAgICAgICBQeV9zc2l6ZV90IGl0ZW1sZW47CisgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKKyAgICAgICAgaWYgKF9nZXRidWZmZXIoaXRlbSwgJmJ1ZmZlcnNbaV0pIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UgaXRlbSAlemQ6IGV4cGVjdGVkIGJ5dGVzLCBieXRlYXJyYXksICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAib3IgYW4gb2JqZWN0IHdpdGggdGhlIGJ1ZmZlciBpbnRlcmZhY2UsICUuODBzIGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpLCBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgbmJ1ZnMgPSBpICsgMTsgIC8qIGZvciBlcnJvciBjbGVhbnVwICovCisgICAgICAgIGl0ZW1sZW4gPSBidWZmZXJzW2ldLmxlbjsKKyAgICAgICAgaWYgKGl0ZW1sZW4gPiBQWV9TU0laRV9UX01BWCAtIHN6KSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam9pbigpIHJlc3VsdCBpcyB0b28gbG9uZyIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzeiArPSBpdGVtbGVuOworICAgICAgICBpZiAoaSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoc2VwbGVuID4gUFlfU1NJWkVfVF9NQVggLSBzeikgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam9pbigpIHJlc3VsdCBpcyB0b28gbG9uZyIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeiArPSBzZXBsZW47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlcWxlbiAhPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSByZXN1bHQgc3BhY2UuICovCisgICAgcmVzID0gU1RSSU5HTElCX05FVyhOVUxMLCBzeik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgLyogQ2F0ZW5hdGUgZXZlcnl0aGluZy4gKi8KKyAgICBwID0gU1RSSU5HTElCX1NUUihyZXMpOworICAgIGlmICghc2VwbGVuKSB7CisgICAgICAgIC8qIGZhc3QgcGF0aCAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmJ1ZnM7IGkrKykgeworICAgICAgICAgICAgUHlfc3NpemVfdCBuID0gYnVmZmVyc1tpXS5sZW47CisgICAgICAgICAgICBjaGFyICpxID0gYnVmZmVyc1tpXS5idWY7CisgICAgICAgICAgICBQeV9NRU1DUFkocCwgcSwgbik7CisgICAgICAgICAgICBwICs9IG47CisgICAgICAgIH0KKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgbmJ1ZnM7IGkrKykgeworICAgICAgICBQeV9zc2l6ZV90IG47CisgICAgICAgIGNoYXIgKnE7CisgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkocCwgc2Vwc3RyLCBzZXBsZW4pOworICAgICAgICAgICAgcCArPSBzZXBsZW47CisgICAgICAgIH0KKyAgICAgICAgbiA9IGJ1ZmZlcnNbaV0ubGVuOworICAgICAgICBxID0gYnVmZmVyc1tpXS5idWY7CisgICAgICAgIFB5X01FTUNQWShwLCBxLCBuKTsKKyAgICAgICAgcCArPSBuOworICAgIH0KKyAgICBnb3RvIGRvbmU7CisKK2Vycm9yOgorICAgIHJlcyA9IE5VTEw7Citkb25lOgorICAgIFB5X0RFQ1JFRihzZXEpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXJzW2ldKTsKKyAgICBpZiAoYnVmZmVycyAhPSBzdGF0aWNfYnVmZmVycykKKyAgICAgICAgUHlNZW1fRlJFRShidWZmZXJzKTsKKyAgICByZXR1cm4gcmVzOworfQorCisjdW5kZWYgTkJfU1RBVElDX0JVRkZFUlMKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKaW5kZXggNDBjYjUxMi4uZWQzMmE2ZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKQEAgLTI5LDYgKzI5LDExIEBACiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCBTVFJJTkdMSUJfTkVXKHN0ciwgc3RyX2xlbikpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMSwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAyLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKKworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG91dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgKFB5T2JqZWN0Kikgc3RyX29iaik7CkBAIC03OSw2ICs4NCwxMSBAQAogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIFNUUklOR0xJQl9ORVcoc3RyLCBzdHJfbGVuKSk7CisKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvdXQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICNlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3JlcGxhY2UuaCBiL09iamVjdHMvc3RyaW5nbGliL3JlcGxhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjMxOGVkCi0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIHN0cmluZ2xpYjogcmVwbGFjZSBpbXBsZW1lbnRhdGlvbiAqLworCisjaWZuZGVmIFNUUklOR0xJQl9GQVNUU0VBUkNIX0gKKyNlcnJvciBtdXN0IGluY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBtb2R1bGUKKyNlbmRpZgorCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK1NUUklOR0xJQihyZXBsYWNlXzFjaGFyX2lucGxhY2UpKFNUUklOR0xJQl9DSEFSKiBzLCBTVFJJTkdMSUJfQ0hBUiogZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB1MSwgUHlfVUNTNCB1MiwgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICAqcyA9IHUyOworICAgIHdoaWxlICgtLW1heGNvdW50ICYmICsrcyAhPSBlbmQpIHsKKyAgICAgICAgLyogRmluZCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgcmVwbGFjZWQuCisKKyAgICAgICAgICAgSWYgaXQgb2NjdXJzIG9mdGVuLCBpdCBpcyBmYXN0ZXIgdG8gc2NhbiBmb3IgaXQgdXNpbmcgYW4gaW5saW5lCisgICAgICAgICAgIGxvb3AuICBJZiBpdCBvY2N1cnMgc2VsZG9tLCBpdCBpcyBmYXN0ZXIgdG8gc2NhbiBmb3IgaXQgdXNpbmcgYQorICAgICAgICAgICBmdW5jdGlvbiBjYWxsOyB0aGUgb3ZlcmhlYWQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgYW1vcnRpemVkCisgICAgICAgICAgIGFjcm9zcyB0aGUgbWFueSBjaGFyYWN0ZXJzIHRoYXQgY2FsbCBjb3ZlcnMuICBXZSBzdGFydCB3aXRoIGFuCisgICAgICAgICAgIGlubGluZSBsb29wIGFuZCB1c2UgYSBoZXVyaXN0aWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gZmFsbCBiYWNrCisgICAgICAgICAgIHRvIGEgZnVuY3Rpb24gY2FsbC4gKi8KKyAgICAgICAgaWYgKCpzICE9IHUxKSB7CisgICAgICAgICAgICBpbnQgYXR0ZW1wdHMgPSAxMDsKKyAgICAgICAgICAgIC8qIHNlYXJjaCB1MSBpbiBhIGR1bW15IGxvb3AgKi8KKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrcyA9PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gdTEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICghLS1hdHRlbXB0cykgeworICAgICAgICAgICAgICAgICAgICAvKiBpZiB1MSB3YXMgbm90IGZvdW5kIGZvciBhdHRlbXB0cyBpdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICB1c2UgRkFTVFNFQVJDSCgpIG9yIG1lbWNocigpICovCisjaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID09IDEKKyAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAgICBzID0gbWVtY2hyKHMsIHUxLCBlbmQgLSBzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgY2gxID0gKFNUUklOR0xJQl9DSEFSKSB1MTsKKyAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAgICBpID0gRkFTVFNFQVJDSChzLCBlbmQgLSBzLCAmY2gxLCAxLCAwLCBGQVNUX1NFQVJDSCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcyArPSBpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIC8qIHJlc3RhcnQgdGhlIGR1bW15IGxvb3AgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICpzID0gdTI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBiL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKaW5kZXggOTQ3ZGQyOC4uMzFmNzdhNyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCkBAIC0zNDUsOCArMzQ1LDggQEAKICAgICAgICBhbmQgdGhlIGFwcGVuZHMgb25seSBkb25lIHdoZW4gdGhlIHByZWFsbG9jIGJ1ZmZlciBpcyBmdWxsLgogICAgICAgIFRoYXQncyB0b28gbXVjaCB3b3JrIGZvciBsaXR0bGUgZ2Fpbi4qLwogCi0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBqOwogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldygwKTsKICAgICBQeU9iamVjdCAqc3ViOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggYi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKaW5kZXggN2JiOTFhNy4uY2UyN2YzZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaApAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIF9QeUJ5dGVzX1Jlc2l6ZQogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlCeXRlc19DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlCeXRlc19DaGVja0V4YWN0CiAjZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9TdHIKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaAppbmRleCBlOGM2ZmNiLi5jZTFlYjU3IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbVVDUzEKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oCmluZGV4IDQ1ZTU3MjkuLmY5MDBjYjYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV8yQllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tVUNTMgotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmgKaW5kZXggNjQ3YTI3ZS4uODZhNDgwZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzRCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBfUHlVbmljb2RlX0Zyb21VQ1M0Ci0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmggYi9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCmluZGV4IDAzMTE3ZWMuLmY5ZDNmMWQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaApAQCAtNiw3ICs2LDYgQEAKICN1bmRlZiAgU1RSSU5HTElCX1NUUgogI3VuZGVmICBTVFJJTkdMSUJfTEVOCiAjdW5kZWYgIFNUUklOR0xJQl9ORVcKLSN1bmRlZiAgU1RSSU5HTElCX1JFU0laRQogI3VuZGVmICBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcKICN1bmRlZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaAppbmRleCBjMWMyY2YzLi5hZWMyMjFhIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmgKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiBzdGF0aWMgaW50CiBwYXJzZV9maWVsZChTdWJTdHJpbmcgKnN0ciwgU3ViU3RyaW5nICpmaWVsZF9uYW1lLCBTdWJTdHJpbmcgKmZvcm1hdF9zcGVjLAotICAgICAgICAgICAgUHlfVUNTNCAqY29udmVyc2lvbikKKyAgICAgICAgICAgIGludCAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nLCBQeV9VQ1M0ICpjb252ZXJzaW9uKQogewogICAgIC8qIE5vdGUgdGhpcyBmdW5jdGlvbiB3b3JrcyBpZiB0aGUgZmllbGQgbmFtZSBpcyB6ZXJvIGxlbmd0aCwKICAgICAgICB3aGljaCBpcyBnb29kLiAgWmVybyBsZW5ndGggZmllbGQgbmFtZXMgYXJlIGhhbmRsZWQgbGF0ZXIsIGluCkBAIC01NjEsNiArNTYxLDE1IEBACiAgICAgZmllbGRfbmFtZS0+c3RhcnQgPSBzdHItPnN0YXJ0OwogICAgIHdoaWxlIChzdHItPnN0YXJ0IDwgc3RyLT5lbmQpIHsKICAgICAgICAgc3dpdGNoICgoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKykpKSB7CisgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmV4cGVjdGVkICd7JyBpbiBmaWVsZCBuYW1lIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICBmb3IgKDsgc3RyLT5zdGFydCA8IHN0ci0+ZW5kOyBzdHItPnN0YXJ0KyspCisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQpID09ICddJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnfSc6CiAgICAgICAgIGNhc2UgJzonOgogICAgICAgICBjYXNlICchJzoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTcwLDQxICs1NzksNjIgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydCAtIDE7CiAgICAgaWYgKGMgPT0gJyEnIHx8IGMgPT0gJzonKSB7CisgICAgICAgIFB5X3NzaXplX3QgY291bnQ7CiAgICAgICAgIC8qIHdlIGhhdmUgYSBmb3JtYXQgc3BlY2lmaWVyIGFuZC9vciBhIGNvbnZlcnNpb24gKi8KICAgICAgICAgLyogZG9uJ3QgaW5jbHVkZSB0aGUgbGFzdCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydC0xOwotCi0gICAgICAgIC8qIHRoZSBmb3JtYXQgc3BlY2lmaWVyIGlzIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgKi8KLSAgICAgICAgZm9ybWF0X3NwZWMtPnN0ciA9IHN0ci0+c3RyOwotICAgICAgICBmb3JtYXRfc3BlYy0+c3RhcnQgPSBzdHItPnN0YXJ0OwotICAgICAgICBmb3JtYXRfc3BlYy0+ZW5kID0gc3RyLT5lbmQ7CiAKICAgICAgICAgLyogc2VlIGlmIHRoZXJlJ3MgYSBjb252ZXJzaW9uIHNwZWNpZmllciAqLwogICAgICAgICBpZiAoYyA9PSAnIScpIHsKICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYW5vdGhlciBjaGFyYWN0ZXIgcHJlc2VudCAqLwotICAgICAgICAgICAgaWYgKGZvcm1hdF9zcGVjLT5zdGFydCA+PSBmb3JtYXRfc3BlYy0+ZW5kKSB7CisgICAgICAgICAgICBpZiAoc3RyLT5zdGFydCA+PSBzdHItPmVuZCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kIG9mIGZvcm1hdCB3aGlsZSBsb29raW5nIGZvciBjb252ZXJzaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZCBvZiBzdHJpbmcgd2hpbGUgbG9va2luZyBmb3IgY29udmVyc2lvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZXIiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpjb252ZXJzaW9uID0gUHlVbmljb2RlX1JFQURfQ0hBUihmb3JtYXRfc3BlYy0+c3RyLCBmb3JtYXRfc3BlYy0+c3RhcnQrKyk7CisgICAgICAgICAgICAqY29udmVyc2lvbiA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKyk7CiAKLSAgICAgICAgICAgIC8qIGlmIHRoZXJlIGlzIGFub3RoZXIgY2hhcmFjdGVyLCBpdCBtdXN0IGJlIGEgY29sb24gKi8KLSAgICAgICAgICAgIGlmIChmb3JtYXRfc3BlYy0+c3RhcnQgPCBmb3JtYXRfc3BlYy0+ZW5kKSB7Ci0gICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoZm9ybWF0X3NwZWMtPnN0ciwgZm9ybWF0X3NwZWMtPnN0YXJ0KyspOworICAgICAgICAgICAgaWYgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgeworICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspOworICAgICAgICAgICAgICAgIGlmIChjID09ICd9JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgaWYgKGMgIT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICc6JyBhZnRlciBmb3JtYXQgc3BlY2lmaWVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJzonIGFmdGVyIGNvbnZlcnNpb24gc3BlY2lmaWVyIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBmb3JtYXRfc3BlYy0+c3RyID0gc3RyLT5zdHI7CisgICAgICAgIGZvcm1hdF9zcGVjLT5zdGFydCA9IHN0ci0+c3RhcnQ7CisgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgd2hpbGUgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgeworICAgICAgICAgICAgc3dpdGNoICgoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKykpKSB7CisgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgICAgICAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nID0gMTsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICAgICAgY291bnQtLTsKKyAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlYy0+ZW5kID0gc3RyLT5zdGFydCAtIDE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVubWF0Y2hlZCAneycgaW4gZm9ybWF0IHNwZWMiKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgLyogZW5kIG9mIHN0cmluZywgdGhlcmUncyBubyBmb3JtYXRfc3BlYyBvciBjb252ZXJzaW9uICovCi0gICAgICAgIGZpZWxkX25hbWUtPmVuZCA9IHN0ci0+c3RhcnQ7CisgICAgZWxzZSBpZiAoYyAhPSAnfScpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJleHBlY3RlZCAnfScgYmVmb3JlIGVuZCBvZiBzdHJpbmciKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgcmV0dXJuIDE7CiB9CkBAIC02MzgsMTAgKzY2OCw5IEBACiAgICAgICAgICAgICAgICAgICAgIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsIFB5X1VDUzQgKmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgIGludCAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nKQogewotICAgIGludCBhdF9lbmQsIGhpdF9mb3JtYXRfc3BlYzsKKyAgICBpbnQgYXRfZW5kOwogICAgIFB5X1VDUzQgYyA9IDA7CiAgICAgUHlfc3NpemVfdCBzdGFydDsKLSAgICBpbnQgY291bnQ7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaW50IG1hcmt1cF9mb2xsb3dzID0gMDsKIApAQCAtNzEzLDUwICs3NDIsMTIgQEAKICAgICBpZiAoIW1hcmt1cF9mb2xsb3dzKQogICAgICAgICByZXR1cm4gMjsKIAotICAgIC8qIHRoaXMgaXMgbWFya3VwLCBmaW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBieSBjb3VudGluZyBuZXN0ZWQKLSAgICAgICBicmFjZXMuICBub3RlIHRoYXQgdGhpcyBwcm9oaWJpdHMgZXNjYXBlZCBicmFjZXMsIHNvIHRoYXQKLSAgICAgICBmb3JtYXRfc3BlY3MgY2Fubm90IGhhdmUgYnJhY2VzIGluIHRoZW0uICovCisgICAgLyogdGhpcyBpcyBtYXJrdXA7IHBhcnNlIHRoZSBmaWVsZCAqLwogICAgICpmaWVsZF9wcmVzZW50ID0gMTsKLSAgICBjb3VudCA9IDE7Ci0KLSAgICBzdGFydCA9IHNlbGYtPnN0ci5zdGFydDsKLQotICAgIC8qIHdlIGtub3cgd2UgY2FuJ3QgaGF2ZSBhIHplcm8gbGVuZ3RoIHN0cmluZywgc28gZG9uJ3Qgd29ycnkKLSAgICAgICBhYm91dCB0aGF0IGNhc2UgKi8KLSAgICBoaXRfZm9ybWF0X3NwZWMgPSAwOwotICAgIHdoaWxlIChzZWxmLT5zdHIuc3RhcnQgPCBzZWxmLT5zdHIuZW5kKSB7Ci0gICAgICAgIHN3aXRjaCAoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc2VsZi0+c3RyLnN0ciwgc2VsZi0+c3RyLnN0YXJ0KyspKSB7Ci0gICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgaGl0X2Zvcm1hdF9zcGVjID0gMTsKLSAgICAgICAgICAgIGNvdW50ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgIC8qIHRoZSBmb3JtYXQgc3BlYyBuZWVkcyB0byBiZSByZWN1cnNpdmVseSBleHBhbmRlZC4KLSAgICAgICAgICAgICAgIHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCBhbmQgbm90IHN0cmljdGx5IG5lZWRlZCAqLwotICAgICAgICAgICAgaWYgKGhpdF9mb3JtYXRfc3BlYykKLSAgICAgICAgICAgICAgICAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nID0gMTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnfSc6Ci0gICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgaWYgKGNvdW50IDw9IDApIHsKLSAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lLiAgcGFyc2UgYW5kIGdldCBvdXQgKi8KLSAgICAgICAgICAgICAgICBTdWJTdHJpbmcgczsKLQotICAgICAgICAgICAgICAgIFN1YlN0cmluZ19pbml0KCZzLCBzZWxmLT5zdHIuc3RyLCBzdGFydCwgc2VsZi0+c3RyLnN0YXJ0IC0gMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlX2ZpZWxkKCZzLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywgY29udmVyc2lvbikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgICAgICAvKiBzdWNjZXNzICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIGVuZCBvZiBzdHJpbmcgd2hpbGUgc2VhcmNoaW5nIGZvciBtYXRjaGluZyAnfScgKi8KLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVubWF0Y2hlZCAneycgaW4gZm9ybWF0Iik7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFwYXJzZV9maWVsZCgmc2VsZi0+c3RyLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZywgY29udmVyc2lvbikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAyOwogfQogCiAKQEAgLTg3NSwyNSArODY2LDE5IEBACiAgICAgU3ViU3RyaW5nIGxpdGVyYWw7CiAgICAgU3ViU3RyaW5nIGZpZWxkX25hbWU7CiAgICAgU3ViU3RyaW5nIGZvcm1hdF9zcGVjOwotICAgIFB5X1VDUzQgY29udmVyc2lvbiwgbWF4Y2hhcjsKLSAgICBQeV9zc2l6ZV90IHN1YmxlbjsKLSAgICBpbnQgZXJyOworICAgIFB5X1VDUzQgY29udmVyc2lvbjsKIAogICAgIE1hcmt1cEl0ZXJhdG9yX2luaXQoJml0ZXIsIGlucHV0LT5zdHIsIGlucHV0LT5zdGFydCwgaW5wdXQtPmVuZCk7CiAgICAgd2hpbGUgKChyZXN1bHQgPSBNYXJrdXBJdGVyYXRvcl9uZXh0KCZpdGVyLCAmbGl0ZXJhbCwgJmZpZWxkX3ByZXNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWVsZF9uYW1lLCAmZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nKSkgPT0gMikgewotICAgICAgICBzdWJsZW4gPSBsaXRlcmFsLmVuZCAtIGxpdGVyYWwuc3RhcnQ7Ci0gICAgICAgIGlmIChzdWJsZW4pIHsKLSAgICAgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKGxpdGVyYWwuc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdGFydCwgbGl0ZXJhbC5lbmQpOwotICAgICAgICAgICAgZXJyID0gX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgc3VibGVuLCBtYXhjaGFyKTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gLTEpCisgICAgICAgIGlmIChsaXRlcmFsLmVuZCAhPSBsaXRlcmFsLnN0YXJ0KSB7CisgICAgICAgICAgICBpZiAoIWZpZWxkX3ByZXNlbnQgJiYgaXRlci5zdHIuc3RhcnQgPT0gaXRlci5zdHIuZW5kKQorICAgICAgICAgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMDsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3Vic3RyaW5nKHdyaXRlciwgbGl0ZXJhbC5zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLnN0YXJ0LCBsaXRlcmFsLmVuZCkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdHIsIGxpdGVyYWwuc3RhcnQsIHN1Ymxlbik7Ci0gICAgICAgICAgICB3cml0ZXItPnBvcyArPSBzdWJsZW47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZmllbGRfcHJlc2VudCkgewpAQCAtOTE4LDcgKzkwMyw2IEBACiAgICAgICAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCwgQXV0b051bWJlciAqYXV0b19udW1iZXIpCiB7CiAgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Ci0gICAgUHlfc3NpemVfdCBtaW5sZW47CiAKICAgICAvKiBjaGVjayB0aGUgcmVjdXJzaW9uIGxldmVsICovCiAgICAgaWYgKHJlY3Vyc2lvbl9kZXB0aCA8PSAwKSB7CkBAIC05MjcsOCArOTExLDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbWlubGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5wdXQtPnN0cikgKyAxMDA7Ci0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIG1pbmxlbik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5wdXQtPnN0cikgKyAxMDA7CiAKICAgICBpZiAoIWRvX21hcmt1cChpbnB1dCwgYXJncywga3dhcmdzLCAmd3JpdGVyLCByZWN1cnNpb25fZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgYXV0b19udW1iZXIpKSB7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAppbmRleCBmMTZmMjFlLi4zZGI1NjI5IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKQEAgLTIxLDE3ICsyMSwxMSBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBQeVVuaWNvZGVfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDAKLSNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1VuaWNvZGUKLSNkZWZpbmUgU1RSSU5HTElCX1RPQVNDSUkgICAgICAgIFB5T2JqZWN0X1JlcHIKLSNlbHNlCiAjZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9TdHIKICNkZWZpbmUgU1RSSU5HTElCX1RPQVNDSUkgICAgICAgIFB5T2JqZWN0X0FTQ0lJCi0jZW5kaWYKIAogI2RlZmluZSBTVFJJTkdMSUJfV0FOVF9DT05UQUlOU19PQkogMQogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cnVjdHNlcS5jIGIvT2JqZWN0cy9zdHJ1Y3RzZXEuYwppbmRleCBjM2I5YTcyLi42NjQzNDRiIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cnVjdHNlcS5jCisrKyBiL09iamVjdHMvc3RydWN0c2VxLmMKQEAgLTExLDE3ICsxMSwyMCBAQAogLyogRmllbGRzIHdpdGggdGhpcyBuYW1lIGhhdmUgb25seSBhIGZpZWxkIGluZGV4LCBub3QgYSBmaWVsZCBuYW1lLgogICAgVGhleSBhcmUgb25seSBhbGxvd2VkIGZvciBpbmRpY2VzIDwgbl92aXNpYmxlX2ZpZWxkcy4gKi8KIGNoYXIgKlB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkID0gInVubmFtZWQgZmllbGQiOworX1B5X0lERU5USUZJRVIobl9zZXF1ZW5jZV9maWVsZHMpOworX1B5X0lERU5USUZJRVIobl9maWVsZHMpOworX1B5X0lERU5USUZJRVIobl91bm5hbWVkX2ZpZWxkcyk7CiAKICNkZWZpbmUgVklTSUJMRV9TSVpFKG9wKSBQeV9TSVpFKG9wKQogI2RlZmluZSBWSVNJQkxFX1NJWkVfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCB2aXNpYmxlX2xlbmd0aF9rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fc2VxdWVuY2VfZmllbGRzKSkKIAogI2RlZmluZSBSRUFMX1NJWkVfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCByZWFsX2xlbmd0aF9rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fZmllbGRzKSkKICNkZWZpbmUgUkVBTF9TSVpFKG9wKSBSRUFMX1NJWkVfVFAoUHlfVFlQRShvcCkpCiAKICNkZWZpbmUgVU5OQU1FRF9GSUVMRFNfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCB1bm5hbWVkX2ZpZWxkc19rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fdW5uYW1lZF9maWVsZHMpKQogI2RlZmluZSBVTk5BTUVEX0ZJRUxEUyhvcCkgVU5OQU1FRF9GSUVMRFNfVFAoUHlfVFlQRShvcCkpCiAKIApAQCAtNTksNyArNjIsNyBAQAogc3RydWN0c2VxX2RlYWxsb2MoUHlTdHJ1Y3RTZXF1ZW5jZSAqb2JqKQogewogICAgIFB5X3NzaXplX3QgaSwgc2l6ZTsKLSAgICAKKwogICAgIHNpemUgPSBSRUFMX1NJWkUob2JqKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFB5X1hERUNSRUYob2JqLT5vYl9pdGVtW2ldKTsKQEAgLTIzMCw4ICsyMzMsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHN0cnVjdHNlcV9yZWR1Y2UoUHlTdHJ1Y3RTZXF1ZW5jZSogc2VsZikKIHsKLSAgICBQeU9iamVjdCogdHVwOwotICAgIFB5T2JqZWN0KiBkaWN0OworICAgIFB5T2JqZWN0KiB0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0KiBkaWN0ID0gTlVMTDsKICAgICBQeU9iamVjdCogcmVzdWx0OwogICAgIFB5X3NzaXplX3Qgbl9maWVsZHMsIG5fdmlzaWJsZV9maWVsZHMsIG5fdW5uYW1lZF9maWVsZHM7CiAgICAgaW50IGk7CkBAIC0yNDAsMTUgKzI0MywxMiBAQAogICAgIG5fdmlzaWJsZV9maWVsZHMgPSBWSVNJQkxFX1NJWkUoc2VsZik7CiAgICAgbl91bm5hbWVkX2ZpZWxkcyA9IFVOTkFNRURfRklFTERTKHNlbGYpOwogICAgIHR1cCA9IFB5VHVwbGVfTmV3KG5fdmlzaWJsZV9maWVsZHMpOwotICAgIGlmICghdHVwKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIXR1cCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGRpY3QgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKCFkaWN0KSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0dXApOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFkaWN0KQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG5fdmlzaWJsZV9maWVsZHM7IGkrKykgewogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+b2JfaXRlbVtpXSk7CkBAIC0yNTcsOCArMjU3LDggQEAKIAogICAgIGZvciAoOyBpIDwgbl9maWVsZHM7IGkrKykgewogICAgICAgICBjaGFyICpuID0gUHlfVFlQRShzZWxmKS0+dHBfbWVtYmVyc1tpLW5fdW5uYW1lZF9maWVsZHNdLm5hbWU7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIG4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2l0ZW1baV0pOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgbiwgc2VsZi0+b2JfaXRlbVtpXSkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICByZXN1bHQgPSBQeV9CdWlsZFZhbHVlKCIoTyhPTykpIiwgUHlfVFlQRShzZWxmKSwgdHVwLCBkaWN0KTsKQEAgLTI2Nyw2ICsyNjcsMTEgQEAKICAgICBQeV9ERUNSRUYoZGljdCk7CiAKICAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHR1cCk7CisgICAgUHlfWERFQ1JFRihkaWN0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHN0cnVjdHNlcV9tZXRob2RzW10gPSB7CkBAIC0zMTUsMTIgKzMyMCwxMyBAQAogICAgIHN0cnVjdHNlcV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwogCi12b2lkCi1QeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQoraW50CitQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKIHsKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBQeU1lbWJlckRlZiogbWVtYmVyczsKICAgICBpbnQgbl9tZW1iZXJzLCBuX3VubmFtZWRfbWVtYmVycywgaSwgazsKKyAgICBQeU9iamVjdCAqdjsKIAogI2lmZGVmIFB5X1RSQUNFX1JFRlMKICAgICAvKiBpZiB0aGUgdHlwZSBvYmplY3Qgd2FzIGNoYWluZWQsIHVuY2hhaW4gaXQgZmlyc3QKQEAgLTM0Miw4ICszNDgsMTAgQEAKICAgICB0eXBlLT50cF9kb2MgPSBkZXNjLT5kb2M7CiAKICAgICBtZW1iZXJzID0gUHlNZW1fTkVXKFB5TWVtYmVyRGVmLCBuX21lbWJlcnMtbl91bm5hbWVkX21lbWJlcnMrMSk7Ci0gICAgaWYgKG1lbWJlcnMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtZW1iZXJzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGZvciAoaSA9IGsgPSAwOyBpIDwgbl9tZW1iZXJzOyArK2kpIHsKICAgICAgICAgaWYgKGRlc2MtPmZpZWxkc1tpXS5uYW1lID09IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkKQpAQCAtMzYxLDMwICszNjksNTYgQEAKICAgICB0eXBlLT50cF9tZW1iZXJzID0gbWVtYmVyczsKIAogICAgIGlmIChQeVR5cGVfUmVhZHkodHlwZSkgPCAwKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAtMTsKICAgICBQeV9JTkNSRUYodHlwZSk7CiAKICAgICBkaWN0ID0gdHlwZS0+dHBfZGljdDsKICNkZWZpbmUgU0VUX0RJQ1RfRlJPTV9JTlQoa2V5LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeU9iamVjdCAqdiA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgdmFsdWUpOyAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHYgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBrZXksIHYpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICB2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwga2V5LCB2KSA8IDApIHsgICAgICAgICAgIFwKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAogICAgIFNFVF9ESUNUX0ZST01fSU5UKHZpc2libGVfbGVuZ3RoX2tleSwgZGVzYy0+bl9pbl9zZXF1ZW5jZSk7CiAgICAgU0VUX0RJQ1RfRlJPTV9JTlQocmVhbF9sZW5ndGhfa2V5LCBuX21lbWJlcnMpOwogICAgIFNFVF9ESUNUX0ZST01fSU5UKHVubmFtZWRfZmllbGRzX2tleSwgbl91bm5hbWVkX21lbWJlcnMpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK1B5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCit7CisgICAgKHZvaWQpUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIodHlwZSwgZGVzYyk7CiB9CiAKIFB5VHlwZU9iamVjdCoKIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZShQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCiB7Ci0gICAgUHlUeXBlT2JqZWN0ICpyZXN1bHQgPSAoUHlUeXBlT2JqZWN0KilQeVR5cGVfR2VuZXJpY0FsbG9jKCZQeVR5cGVfVHlwZSwgMCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUocmVzdWx0LCBkZXNjKTsKKyAgICBQeVR5cGVPYmplY3QgKnJlc3VsdDsKKworICAgIHJlc3VsdCA9IChQeVR5cGVPYmplY3QqKVB5VHlwZV9HZW5lcmljQWxsb2MoJlB5VHlwZV9UeXBlLCAwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihyZXN1bHQsIGRlc2MpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CisKK2ludCBfUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0KHZvaWQpCit7CisgICAgaWYgKF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fc2VxdWVuY2VfZmllbGRzKSA9PSBOVUxMCisgICAgICAgIHx8IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fZmllbGRzKSA9PSBOVUxMCisgICAgICAgIHx8IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fdW5uYW1lZF9maWVsZHMpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy90dXBsZW9iamVjdC5jIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCmluZGV4IGVjM2Y5MWIuLmEzM2Q4YzAgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHVwbGVvYmplY3QuYworKysgYi9PYmplY3RzL3R1cGxlb2JqZWN0LmMKQEAgLTYzLDkgKzYzLDkgQEAKIH0KIAogUHlPYmplY3QgKgotUHlUdXBsZV9OZXcocmVnaXN0ZXIgUHlfc3NpemVfdCBzaXplKQorUHlUdXBsZV9OZXcoUHlfc3NpemVfdCBzaXplKQogewotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKm9wOworICAgIFB5VHVwbGVPYmplY3QgKm9wOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIH0KIAogUHlfc3NpemVfdAotUHlUdXBsZV9TaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5VHVwbGVfU2l6ZShQeU9iamVjdCAqb3ApCiB7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeVR1cGxlX0dldEl0ZW0ocmVnaXN0ZXIgUHlPYmplY3QgKm9wLCByZWdpc3RlciBQeV9zc2l6ZV90IGkpCitQeVR1cGxlX0dldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTE0NywxMCArMTQ3LDEwIEBACiB9CiAKIGludAotUHlUdXBsZV9TZXRJdGVtKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBQeU9iamVjdCAqbmV3aXRlbSkKK1B5VHVwbGVfU2V0SXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKm5ld2l0ZW0pCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9sZGl0ZW07Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipwOworICAgIFB5T2JqZWN0ICpvbGRpdGVtOworICAgIFB5T2JqZWN0ICoqcDsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sob3ApIHx8IG9wLT5vYl9yZWZjbnQgIT0gMSkgewogICAgICAgICBQeV9YREVDUkVGKG5ld2l0ZW0pOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTIyNCwxMCArMjI0LDEwIEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi10dXBsZWRlYWxsb2MocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqb3ApCit0dXBsZWRlYWxsb2MoUHlUdXBsZU9iamVjdCAqb3ApCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgbGVuID0gIFB5X1NJWkUob3ApOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9ICBQeV9TSVpFKG9wKTsKICAgICBQeU9iamVjdF9HQ19VblRyYWNrKG9wKTsKICAgICBQeV9UUkFTSENBTl9TQUZFX0JFR0lOKG9wKQogICAgIGlmIChsZW4gPiAwKSB7CkBAIC0zMjIsMTUgKzMyMiwxOCBAQAogCiAgICAgIDEwODI1MjcsIDExNjUwNDksIDEwODI1MzEsIDExNjUwNTcsIDEyNDc1ODEsIDEzMzAxMDMsIDEwODI1MzMsCiAgICAgIDEzMzAxMTEsIDE0MTI2MzMsIDExNjUwNjksIDEyNDc1OTksIDE0OTUxNzcsIDE1Nzc2OTkKKworICAgVGVzdHMgaGF2ZSBzaG93biB0aGF0IGl0J3Mgbm90IHdvcnRoIHRvIGNhY2hlIHRoZSBoYXNoIHZhbHVlLCBzZWUKKyAgIGlzc3VlICM5Njg1LgogKi8KIAogc3RhdGljIFB5X2hhc2hfdAogdHVwbGVoYXNoKFB5VHVwbGVPYmplY3QgKnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfdWhhc2hfdCB4OyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgUHlfaGFzaF90IHk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBsZW4gPSBQeV9TSVpFKHYpOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqcDsKKyAgICBQeV91aGFzaF90IHg7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KKyAgICBQeV9oYXNoX3QgeTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5X1NJWkUodik7CisgICAgUHlPYmplY3QgKipwOwogICAgIFB5X3VoYXNoX3QgbXVsdCA9IF9QeUhBU0hfTVVMVElQTElFUjsKICAgICB4ID0gMHgzNDU2NzhVTDsKICAgICBwID0gdi0+b2JfaXRlbTsKQEAgLTM2Nyw3ICszNzAsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVpdGVtKHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSkKK3R1cGxlaXRlbShQeVR1cGxlT2JqZWN0ICphLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShhKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInR1cGxlIGluZGV4IG91dCBvZiByYW5nZSIpOwpAQCAtMzc4LDEyICszODEsMTIgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXR1cGxlc2xpY2UocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpbG93LAotICAgICAgICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGloaWdoKQordHVwbGVzbGljZShQeVR1cGxlT2JqZWN0ICphLCBQeV9zc2l6ZV90IGlsb3csCisgICAgICAgICAgIFB5X3NzaXplX3QgaWhpZ2gpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqbnA7CisgICAgUHlUdXBsZU9iamVjdCAqbnA7CiAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGlmIChpbG93IDwgMCkKICAgICAgICAgaWxvdyA9IDA7CkBAIC00MjAsMTAgKzQyMywxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVjb25jYXQocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlPYmplY3QgKmJiKQordHVwbGVjb25jYXQoUHlUdXBsZU9iamVjdCAqYSwgUHlPYmplY3QgKmJiKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OwogICAgIFB5VHVwbGVPYmplY3QgKm5wOwogICAgIGlmICghUHlUdXBsZV9DaGVjayhiYikpIHsKQEAgLTgzMyw4ICs4MzYsOCBAQAogaW50CiBfUHlUdXBsZV9SZXNpemUoUHlPYmplY3QgKipwdiwgUHlfc3NpemVfdCBuZXdzaXplKQogewotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqc3Y7CisgICAgUHlUdXBsZU9iamVjdCAqdjsKKyAgICBQeVR1cGxlT2JqZWN0ICpzdjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBvbGRzaXplOwogCkBAIC05MjcsNyArOTMwLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICBsb25nIGl0X2luZGV4OworICAgIFB5X3NzaXplX3QgaXRfaW5kZXg7CiAgICAgUHlUdXBsZU9iamVjdCAqaXRfc2VxOyAvKiBTZXQgdG8gTlVMTCB3aGVuIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLwogfSB0dXBsZWl0ZXJvYmplY3Q7CiAKQEAgLTk4NSw3ICs5ODgsNyBAQAogdHVwbGVpdGVyX3JlZHVjZSh0dXBsZWl0ZXJvYmplY3QgKml0KQogewogICAgIGlmIChpdC0+aXRfc2VxKQotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKWwiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKW4iLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+aXRfc2VxLCBpdC0+aXRfaW5kZXgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oKCkpIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSk7CkBAIC05OTQsNyArOTk3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0dXBsZWl0ZXJfc2V0c3RhdGUodHVwbGVpdGVyb2JqZWN0ICppdCwgUHlPYmplY3QgKnN0YXRlKQogewotICAgIGxvbmcgaW5kZXggPSBQeUxvbmdfQXNMb25nKHN0YXRlKTsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gUHlMb25nX0FzU3NpemVfdChzdGF0ZSk7CiAgICAgaWYgKGluZGV4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChpdC0+aXRfc2VxICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL09iamVjdHMvdHlwZW9iamVjdC5jIGIvT2JqZWN0cy90eXBlb2JqZWN0LmMKaW5kZXggM2RjYmM4Ni4uMzA5YWZhNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy90eXBlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90eXBlb2JqZWN0LmMKQEAgLTEwMSwxNiArMTAxLDE3IEBACiAgICAgICAgbmVlZGVkLgogICAgICAqLwogICAgIFB5T2JqZWN0ICpyYXcsICpyZWY7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGlmICghUHlUeXBlX0hhc0ZlYXR1cmUodHlwZSwgUHlfVFBGTEFHU19WQUxJRF9WRVJTSU9OX1RBRykpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJhdyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CiAgICAgaWYgKHJhdyAhPSBOVUxMKSB7Ci0gICAgICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUocmF3KTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHJhdywgaSk7CisgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChyYXcpKTsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChyYXcsICZpLCBOVUxMLCAmcmVmKSkgeworICAgICAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKICAgICAgICAgICAgIHJlZiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgICAgICBpZiAocmVmICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICBQeVR5cGVfTW9kaWZpZWQoKFB5VHlwZU9iamVjdCAqKXJlZik7CkBAIC00MzUsNiArNDM2LDcgQEAKIHN0YXRpYyBpbnQgY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudChQeVR5cGVPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICosIGNoYXIgKik7CiBzdGF0aWMgaW50IGFkZF9zdWJjbGFzcyhQeVR5cGVPYmplY3QqLCBQeVR5cGVPYmplY3QqKTsKIHN0YXRpYyB2b2lkIHJlbW92ZV9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICopOworc3RhdGljIHZvaWQgcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9hbGxfc2xvdHMoUHlUeXBlT2JqZWN0ICopOwogCiB0eXBlZGVmIGludCAoKnVwZGF0ZV9jYWxsYmFjaykoUHlUeXBlT2JqZWN0ICosIHZvaWQgKik7CkBAIC00NDgsMTUgKzQ1MCwxNSBAQAogewogICAgIFB5VHlwZU9iamVjdCAqc3ViY2xhc3M7CiAgICAgUHlPYmplY3QgKnJlZiwgKnN1YmNsYXNzZXMsICpvbGRfbXJvOwotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBzdWJjbGFzc2VzID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAoc3ViY2xhc3NlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKHN1YmNsYXNzZXMpKTsKLSAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHN1YmNsYXNzZXMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHN1YmNsYXNzZXMsIGkpOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChzdWJjbGFzc2VzKSk7CisgICAgaSA9IDA7CisKKyAgICB3aGlsZSAoUHlEaWN0X05leHQoc3ViY2xhc3NlcywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHN1YmNsYXNzID0gKFB5VHlwZU9iamVjdCAqKVB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGFzc2VydChzdWJjbGFzcyAhPSBOVUxMKTsKQEAgLTU3NSwxMyArNTc3LDcgQEAKICAgICAvKiBmb3Igbm93LCBzb2QgdGhhdDoganVzdCByZW1vdmUgZnJvbSBhbGwgb2xkX2Jhc2VzLAogICAgICAgIGFkZCB0byBhbGwgbmV3X2Jhc2VzICovCiAKLSAgICBmb3IgKGkgPSBQeVR1cGxlX0dFVF9TSVpFKG9sZF9iYXNlcykgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICBvYiA9IFB5VHVwbGVfR0VUX0lURU0ob2xkX2Jhc2VzLCBpKTsKLSAgICAgICAgaWYgKFB5VHlwZV9DaGVjayhvYikpIHsKLSAgICAgICAgICAgIHJlbW92ZV9zdWJjbGFzcygKLSAgICAgICAgICAgICAgICAoUHlUeXBlT2JqZWN0KilvYiwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKHR5cGUsIG9sZF9iYXNlcyk7CiAKICAgICBmb3IgKGkgPSBQeVR1cGxlX0dFVF9TSVpFKHZhbHVlKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgIG9iID0gUHlUdXBsZV9HRVRfSVRFTSh2YWx1ZSwgaSk7CkBAIC03MzMsNiArNzI5LDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogdHlwZV9jYWxsKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIG9iaiA9IHR5cGUtPnRwX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKICAgICBpZiAob2JqICE9IE5VTEwpIHsKICAgICAgICAgLyogVWdseSBleGNlcHRpb246IHdoZW4gdGhlIGNhbGwgd2FzIHR5cGUoc29tZXRoaW5nKSwKQEAgLTc0NywxMCArNzUwLDEyIEBACiAgICAgICAgIGlmICghUHlUeXBlX0lzU3VidHlwZShQeV9UWVBFKG9iaiksIHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgdHlwZSA9IFB5X1RZUEUob2JqKTsKLSAgICAgICAgaWYgKHR5cGUtPnRwX2luaXQgIT0gTlVMTCAmJgotICAgICAgICAgICAgdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICBpZiAodHlwZS0+dHBfaW5pdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgcmVzID0gdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpOworICAgICAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBvYmo7CkBAIC05MDksNiArOTE0LDcgQEAKICAgICBQeVR5cGVPYmplY3QgKnR5cGUsICpiYXNlOwogICAgIGRlc3RydWN0b3IgYmFzZWRlYWxsb2M7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBpbnQgaGFzX2ZpbmFsaXplcjsKIAogICAgIC8qIEV4dHJhY3QgdGhlIHR5cGU7IHdlIGV4cGVjdCBpdCB0byBiZSBhIGhlYXAgdHlwZSAqLwogICAgIHR5cGUgPSBQeV9UWVBFKHNlbGYpOwpAQCAtOTI0LDYgKzkzMCwxMCBAQAogICAgICAgICAgICBjbGVhcl9zbG90cygpLCBvciBERUNSRUYgdGhlIGRpY3QsIG9yIGNsZWFyIHdlYWtyZWZzLiAqLwogCiAgICAgICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCisgICAgICAgIGlmICh0eXBlLT50cF9maW5hbGl6ZSkgeworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmICh0eXBlLT50cF9kZWwpIHsKICAgICAgICAgICAgIHR5cGUtPnRwX2RlbChzZWxmKTsKICAgICAgICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQpAQCAtOTc1LDI1ICs5ODUsMzYgQEAKICAgICAgICAgYXNzZXJ0KGJhc2UpOwogICAgIH0KIAotICAgIC8qIElmIHdlIGFkZGVkIGEgd2Vha2xpc3QsIHdlIGNsZWFyIGl0LiAgICAgIERvIHRoaXMgKmJlZm9yZSogY2FsbGluZwotICAgICAgIHRoZSBmaW5hbGl6ZXIgKF9fZGVsX18pLCBjbGVhcmluZyBzbG90cywgb3IgY2xlYXJpbmcgdGhlIGluc3RhbmNlCi0gICAgICAgZGljdC4gKi8KKyAgICBoYXNfZmluYWxpemVyID0gdHlwZS0+dHBfZmluYWxpemUgfHwgdHlwZS0+dHBfZGVsOwogCisgICAgLyogTWF5YmUgY2FsbCBmaW5hbGl6ZXI7IGV4aXQgZWFybHkgaWYgcmVzdXJyZWN0ZWQgKi8KKyAgICBpZiAoaGFzX2ZpbmFsaXplcikKKyAgICAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKHNlbGYpOworCisgICAgaWYgKHR5cGUtPnRwX2ZpbmFsaXplKSB7CisgICAgICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZikgPCAwKSB7CisgICAgICAgICAgICAvKiBSZXN1cnJlY3RlZCAqLworICAgICAgICAgICAgZ290byBlbmRsYWJlbDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBJZiB3ZSBhZGRlZCBhIHdlYWtsaXN0LCB3ZSBjbGVhciBpdC4gICAgICBEbyB0aGlzICpiZWZvcmUqIGNhbGxpbmcKKyAgICAgICB0cF9kZWwsIGNsZWFyaW5nIHNsb3RzLCBvciBjbGVhcmluZyB0aGUgaW5zdGFuY2UgZGljdC4gKi8KICAgICBpZiAodHlwZS0+dHBfd2Vha2xpc3RvZmZzZXQgJiYgIWJhc2UtPnRwX3dlYWtsaXN0b2Zmc2V0KQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKHNlbGYpOwogCi0gICAgLyogTWF5YmUgY2FsbCBmaW5hbGl6ZXI7IGV4aXQgZWFybHkgaWYgcmVzdXJyZWN0ZWQgKi8KICAgICBpZiAodHlwZS0+dHBfZGVsKSB7Ci0gICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKICAgICAgICAgdHlwZS0+dHBfZGVsKHNlbGYpOwotICAgICAgICBpZiAoc2VsZi0+b2JfcmVmY250ID4gMCkKLSAgICAgICAgICAgIGdvdG8gZW5kbGFiZWw7ICAgICAgICAgICAgICAvKiByZXN1cnJlY3RlZCAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKKyAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApIHsKKyAgICAgICAgICAgIC8qIFJlc3VycmVjdGVkICovCisgICAgICAgICAgICBnb3RvIGVuZGxhYmVsOworICAgICAgICB9CisgICAgfQorICAgIGlmIChoYXNfZmluYWxpemVyKSB7CisgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgICAgICAvKiBOZXcgd2Vha3JlZnMgY291bGQgYmUgY3JlYXRlZCBkdXJpbmcgdGhlIGZpbmFsaXplciBjYWxsLgotICAgICAgICAgICAgSWYgdGhpcyBvY2N1cnMsIGNsZWFyIHRoZW0gb3V0IHdpdGhvdXQgY2FsbGluZyB0aGVpcgotICAgICAgICAgICAgZmluYWxpemVycyBzaW5jZSB0aGV5IG1pZ2h0IHJlbHkgb24gcGFydCBvZiB0aGUgb2JqZWN0Ci0gICAgICAgICAgICBiZWluZyBmaW5hbGl6ZWQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4gKi8KKyAgICAgICAgICAgSWYgdGhpcyBvY2N1cnMsIGNsZWFyIHRoZW0gb3V0IHdpdGhvdXQgY2FsbGluZyB0aGVpcgorICAgICAgICAgICBmaW5hbGl6ZXJzIHNpbmNlIHRoZXkgbWlnaHQgcmVseSBvbiBwYXJ0IG9mIHRoZSBvYmplY3QKKyAgICAgICAgICAgYmVpbmcgZmluYWxpemVkIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuICovCiAgICAgICAgIGlmICh0eXBlLT50cF93ZWFrbGlzdG9mZnNldCAmJiAhYmFzZS0+dHBfd2Vha2xpc3RvZmZzZXQpIHsKICAgICAgICAgICAgIC8qIE1vZGVsZWQgYWZ0ZXIgR0VUX1dFQUtSRUZTX0xJU1RQVFIoKSAqLwogICAgICAgICAgICAgUHlXZWFrUmVmZXJlbmNlICoqbGlzdCA9IChQeVdlYWtSZWZlcmVuY2UgKiopIFwKQEAgLTE0NTMsOCArMTQ3NCwxMCBAQAogICAgICAgIHRoYXQgaXMgbm90IGluY2x1ZGVkIGluIGFjYy4KICAgICAqLwogICAgIHJlbWFpbiA9IChpbnQgKilQeU1lbV9NQUxMT0MoU0laRU9GX0lOVCp0b19tZXJnZV9zaXplKTsKLSAgICBpZiAocmVtYWluID09IE5VTEwpCisgICAgaWYgKHJlbWFpbiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IHRvX21lcmdlX3NpemU7IGkrKykKICAgICAgICAgcmVtYWluW2ldID0gMDsKIApAQCAtMTQ4Niw3ICsxNTA5LDcgQEAKICAgICAgICAgfQogICAgICAgICBvayA9IFB5TGlzdF9BcHBlbmQoYWNjLCBjYW5kaWRhdGUpOwogICAgICAgICBpZiAob2sgPCAwKSB7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHJlbWFpbik7CisgICAgICAgICAgICBQeU1lbV9GUkVFKHJlbWFpbik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRvX21lcmdlX3NpemU7IGorKykgewpAQCAtMTk0Niw3ICsxOTY5LDcgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi1sb25nCit1bnNpZ25lZCBsb25nCiBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0ICp0eXBlKQogewogICAgIHJldHVybiB0eXBlLT50cF9mbGFnczsKQEAgLTIyMTcsNyArMjI0MCw3IEBACiAKICAgICAvKiBJbml0aWFsaXplIHRwX2ZsYWdzICovCiAgICAgdHlwZS0+dHBfZmxhZ3MgPSBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hFQVBUWVBFIHwKLSAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRTsKKyAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRTsKICAgICBpZiAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpCiAgICAgICAgIHR5cGUtPnRwX2ZsYWdzIHw9IFB5X1RQRkxBR1NfSEFWRV9HQzsKIApAQCAtMjI4Nyw4ICsyMzEwLDEwIEBACiAgICAgICAgICAgICAvKiBTaWxlbnRseSB0cnVuY2F0ZSB0aGUgZG9jc3RyaW5nIGlmIGl0IGNvbnRhaW5zIG51bGwgYnl0ZXMuICovCiAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oZG9jX3N0cik7CiAgICAgICAgICAgICB0cF9kb2MgPSAoY2hhciAqKVB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKLSAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbWNweSh0cF9kb2MsIGRvY19zdHIsIGxlbiArIDEpOwogICAgICAgICAgICAgdHlwZS0+dHBfZG9jID0gdHBfZG9jOwogICAgICAgICB9CkBAIC0yNDA4LDcgKzI0MzMsNyBAQAogICAgIGNoYXIgKnM7CiAgICAgY2hhciAqcmVzX3N0YXJ0ID0gKGNoYXIqKXJlczsKICAgICBQeVR5cGVfU2xvdCAqc2xvdDsKLSAgICAKKwogICAgIC8qIFNldCB0aGUgdHlwZSBuYW1lIGFuZCBxdWFsbmFtZSAqLwogICAgIHMgPSBzdHJyY2hyKHNwZWMtPm5hbWUsICcuJyk7CiAgICAgaWYgKHMgPT0gTlVMTCkKQEAgLTI0MjksNyArMjQ1NCw3IEBACiAgICAgdHlwZS0+dHBfbmFtZSA9IHNwZWMtPm5hbWU7CiAgICAgaWYgKCF0eXBlLT50cF9uYW1lKQogICAgICAgICBnb3RvIGZhaWw7Ci0gICAgCisKICAgICAvKiBBZGp1c3QgZm9yIGVtcHR5IHR1cGxlIGJhc2VzICovCiAgICAgaWYgKCFiYXNlcykgewogICAgICAgICBiYXNlID0gJlB5QmFzZU9iamVjdF9UeXBlOwpAQCAtMjQ5MSw4ICsyNTE2LDEwIEBACiAgICAgICAgIGlmIChzbG90LT5zbG90ID09IFB5X3RwX2RvYykgewogICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzbG90LT5wZnVuYykrMTsKICAgICAgICAgICAgIGNoYXIgKnRwX2RvYyA9IFB5T2JqZWN0X01BTExPQyhsZW4pOwotICAgICAgICAgICAgaWYgKHRwX2RvYyA9PSBOVUxMKQorICAgICAgICAgICAgaWYgKHRwX2RvYyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1jcHkodHBfZG9jLCBzbG90LT5wZnVuYywgbGVuKTsKICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyA9IHRwX2RvYzsKICAgICAgICAgfQpAQCAtMjUxMyw3ICsyNTQwLDcgQEAKICAgICAvKiBTZXQgdHlwZS5fX21vZHVsZV9fICovCiAgICAgcyA9IHN0cnJjaHIoc3BlYy0+bmFtZSwgJy4nKTsKICAgICBpZiAocyAhPSBOVUxMKQotICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX21vZHVsZV9fLCAKKyAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXywKICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgKICAgICAgICAgICAgICAgICBzcGVjLT5uYW1lLCAoUHlfc3NpemVfdCkocyAtIHNwZWMtPm5hbWUpKSk7CiAKQEAgLTI3MDIsMTAgKzI3MjksMTQgQEAKIHR5cGVfZGVhbGxvYyhQeVR5cGVPYmplY3QgKnR5cGUpCiB7CiAgICAgUHlIZWFwVHlwZU9iamVjdCAqZXQ7CisgICAgUHlPYmplY3QgKnRwLCAqdmFsLCAqdGI7CiAKICAgICAvKiBBc3NlcnQgdGhpcyBpcyBhIGhlYXAtYWxsb2NhdGVkIHR5cGUgb2JqZWN0ICovCiAgICAgYXNzZXJ0KHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSk7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0sodHlwZSk7CisgICAgUHlFcnJfRmV0Y2goJnRwLCAmdmFsLCAmdGIpOworICAgIHJlbW92ZV9hbGxfc3ViY2xhc3Nlcyh0eXBlLCB0eXBlLT50cF9iYXNlcyk7CisgICAgUHlFcnJfUmVzdG9yZSh0cCwgdmFsLCB0Yik7CiAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKil0eXBlKTsKICAgICBldCA9IChQeUhlYXBUeXBlT2JqZWN0ICopdHlwZTsKICAgICBQeV9YREVDUkVGKHR5cGUtPnRwX2Jhc2UpOwpAQCAtMjczMCw3ICsyNzYxLDcgQEAKIHR5cGVfc3ViY2xhc3NlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzX2lnbm9yZWQpCiB7CiAgICAgUHlPYmplY3QgKmxpc3QsICpyYXcsICpyZWY7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmIChsaXN0ID09IE5VTEwpCkBAIC0yNzM4LDEwICsyNzY5LDkgQEAKICAgICByYXcgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChyYXcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhyYXcpKTsKLSAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHJhdyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0ocmF3LCBpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QocmF3KSk7CisgICAgaSA9IDA7CisgICAgd2hpbGUgKFB5RGljdF9OZXh0KHJhdywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHJlZiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGlmIChyZWYgIT0gUHlfTm9uZSkgewpAQCAtMjkzMCw4ICsyOTYwLDggQEAKICAgICAgICAgICAgY2xhc3MncyBkaWN0OyB0aGUgY3ljbGUgd2lsbCBiZSBicm9rZW4gdGhhdCB3YXkuCiAKICAgICAgICB0cF9zdWJjbGFzc2VzOgotICAgICAgICAgICBBIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZTsgYW5kCi0gICAgICAgICAgIGxpc3RzIGhhdmUgdGhlaXIgb3duIHRwX2NsZWFyLgorICAgICAgICAgICBBIGRpY3Qgb2Ygd2VhayByZWZlcmVuY2VzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZTsgYW5kCisgICAgICAgICAgIGRpY3RzIGhhdmUgdGhlaXIgb3duIHRwX2NsZWFyLgogCiAgICAgICAgc2xvdHMgKGluIFB5SGVhcFR5cGVPYmplY3QpOgogICAgICAgICAgICBBIHR1cGxlIG9mIHN0cmluZ3MgY2FuJ3QgYmUgcGFydCBvZiBhIGN5Y2xlLgpAQCAtMzMyMCw3ICszMzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18gYXNzaWdubWVudDogb25seSBmb3IgaGVhcCB0eXBlcyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChjb21wYXRpYmxlX2Zvcl9hc3NpZ25tZW50KG5ld3RvLCBvbGR0bywgIl9fY2xhc3NfXyIpKSB7CisgICAgaWYgKGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQob2xkdG8sIG5ld3RvLCAiX19jbGFzc19fIikpIHsKICAgICAgICAgUHlfSU5DUkVGKG5ld3RvKTsKICAgICAgICAgUHlfVFlQRShzZWxmKSA9IG5ld3RvOwogICAgICAgICBQeV9ERUNSRUYob2xkdG8pOwpAQCAtMzY2NiwxNiArMzY5Niw5IEBACiAgICAgICAgIC8qIElzc3VlIDc5OTQ6IElmIHdlJ3JlIGNvbnZlcnRpbmcgdG8gYSBzdHJpbmcsIHdlCiAgICAgICAgICAgIHNob3VsZCByZWplY3QgZm9ybWF0IHNwZWNpZmljYXRpb25zICovCiAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChmb3JtYXRfc3BlYykgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyBpcyBkZXByZWNhdGVkIiwgMSkgPCAwKSB7Ci0gICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIEV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvcjoKLSAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgIm5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIHBhc3NlZCB0byBvYmplY3QuX19mb3JtYXRfXyIpOwotICAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0Zvcm1hdChzZWxmX2FzX3N0ciwgZm9ybWF0X3NwZWMpOwpAQCAtMzgzMCw3ICszODUzLDcgQEAKICAgICAgICAgICAgIGRlc2NyID0gUHlEZXNjcl9OZXdDbGFzc01ldGhvZCh0eXBlLCBtZXRoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChtZXRoLT5tbF9mbGFncyAmIE1FVEhfU1RBVElDKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY2Z1bmMgPSBQeUNGdW5jdGlvbl9OZXcobWV0aCwgKFB5T2JqZWN0Kil0eXBlKTsKKyAgICAgICAgICBQeU9iamVjdCAqY2Z1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeChtZXRoLCAoUHlPYmplY3QqKXR5cGUsIE5VTEwpOwogICAgICAgICAgICAgaWYgKGNmdW5jID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgZGVzY3IgPSBQeVN0YXRpY01ldGhvZF9OZXcoY2Z1bmMpOwpAQCAtNDEwMCw2ICs0MTIzLDEwIEBACiAgICAgICAgIENPUFlTTE9UKHRwX2luaXQpOwogICAgICAgICBDT1BZU0xPVCh0cF9hbGxvYyk7CiAgICAgICAgIENPUFlTTE9UKHRwX2lzX2djKTsKKyAgICAgICAgaWYgKCh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYKKyAgICAgICAgICAgIChiYXNlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkpIHsKKyAgICAgICAgICAgIENPUFlTTE9UKHRwX2ZpbmFsaXplKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKSA9PQogICAgICAgICAgICAgKGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKSkgewogICAgICAgICAgICAgLyogVGhleSBhZ3JlZSBhYm91dCBnYy4gKi8KQEAgLTQyNTIsMTEgKzQyNzksMTUgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICpkb2MgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh0eXBlLT50cF9kb2MpOwogICAgICAgICAgICAgaWYgKGRvYyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2RvY19fLCBkb2MpOworICAgICAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fZG9jX18sIGRvYykgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRvYyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihkb2MpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19fZG9jX18sIFB5X05vbmUpOworICAgICAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX19kb2NfXywgUHlfTm9uZSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQzMDAsMTMgKzQzMzEsMTEgQEAKICAgICAvKiBXYXJuIGZvciBhIHR5cGUgdGhhdCBpbXBsZW1lbnRzIHRwX2NvbXBhcmUgKG5vdyBrbm93biBhcwogICAgICAgIHRwX3Jlc2VydmVkKSBidXQgbm90IHRwX3JpY2hjb21wYXJlLiAqLwogICAgIGlmICh0eXBlLT50cF9yZXNlcnZlZCAmJiAhdHlwZS0+dHBfcmljaGNvbXBhcmUpIHsKLSAgICAgICAgaW50IGVycm9yOwotICAgICAgICBlcnJvciA9IFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAxLAorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRlZmluZXMgdHBfcmVzZXJ2ZWQgKGZvcm1lcmx5IHRwX2NvbXBhcmUpICIKICAgICAgICAgICAgICJidXQgbm90IHRwX3JpY2hjb21wYXJlLiBDb21wYXJpc29ucyBtYXkgbm90IGJlaGF2ZSBhcyBpbnRlbmRlZC4iLAogICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgIGlmIChlcnJvciA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgLyogQWxsIGRvbmUgLS0gc2V0IHRoZSByZWFkeSBmbGFnICovCkBAIC00MzIzLDQ5ICs0MzUyLDU3IEBACiBzdGF0aWMgaW50CiBhZGRfc3ViY2xhc3MoUHlUeXBlT2JqZWN0ICpiYXNlLCBQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIGludCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpyZWYsICpuZXdvYmo7CisgICAgaW50IHJlc3VsdCA9IC0xOworICAgIFB5T2JqZWN0ICpkaWN0LCAqa2V5LCAqbmV3b2JqOwogCi0gICAgbGlzdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgICAgICBiYXNlLT50cF9zdWJjbGFzc2VzID0gbGlzdCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgZGljdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICBiYXNlLT50cF9zdWJjbGFzc2VzID0gZGljdCA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhsaXN0KSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KGRpY3QpKTsKKyAgICBrZXkgPSBQeUxvbmdfRnJvbVZvaWRQdHIoKHZvaWQgKikgdHlwZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgbmV3b2JqID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKil0eXBlLCBOVUxMKTsKLSAgICBpID0gUHlMaXN0X0dFVF9TSVpFKGxpc3QpOwotICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0obGlzdCwgaSk7Ci0gICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7Ci0gICAgICAgIGlmIChQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpID09IFB5X05vbmUpCi0gICAgICAgICAgICByZXR1cm4gUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgbmV3b2JqKTsKKyAgICBpZiAobmV3b2JqICE9IE5VTEwpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW0oZGljdCwga2V5LCBuZXdvYmopOworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMaXN0X0FwcGVuZChsaXN0LCBuZXdvYmopOwotICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgIFB5X0RFQ1JFRihrZXkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkCiByZW1vdmVfc3ViY2xhc3MoUHlUeXBlT2JqZWN0ICpiYXNlLCBQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpsaXN0LCAqcmVmOworICAgIFB5T2JqZWN0ICpkaWN0LCAqa2V5OwogCi0gICAgbGlzdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgeworICAgIGRpY3QgPSBiYXNlLT50cF9zdWJjbGFzc2VzOworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGxpc3QpKTsKLSAgICBpID0gUHlMaXN0X0dFVF9TSVpFKGxpc3QpOwotICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0obGlzdCwgaSk7Ci0gICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7Ci0gICAgICAgIGlmIChQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpID09IChQeU9iamVjdCopdHlwZSkgewotICAgICAgICAgICAgLyogdGhpcyBjYW4ndCBmYWlsLCByaWdodD8gKi8KLSAgICAgICAgICAgIFB5U2VxdWVuY2VfRGVsSXRlbShsaXN0LCBpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QoZGljdCkpOworICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCAqKSB0eXBlKTsKKyAgICBpZiAoa2V5ID09IE5VTEwgfHwgUHlEaWN0X0RlbEl0ZW0oZGljdCwga2V5KSkgeworICAgICAgICAvKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHR5cGUgaW5pdGlhbGl6YXRpb24gZXJyb3JlZCBvdXQgYmVmb3JlCisgICAgICAgICAgIHRoZSBiYXNlIHN1YmNsYXNzZXMgd2VyZSB1cGRhdGVkIChlLmcuIGEgbm9uLXN0ciBfX3F1YWxuYW1lX18KKyAgICAgICAgICAgd2FzIHBhc3NlZCBpbiB0aGUgdHlwZSBkaWN0KS4gKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisgICAgUHlfWERFQ1JFRihrZXkpOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKQoreworICAgIGlmIChiYXNlcykgeworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeVR1cGxlX0dFVF9TSVpFKGJhc2VzKTsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFB5VHVwbGVfR0VUX0lURU0oYmFzZXMsIGkpOworICAgICAgICAgICAgaWYgKFB5VHlwZV9DaGVjayhiYXNlKSkKKyAgICAgICAgICAgICAgICByZW1vdmVfc3ViY2xhc3MoKFB5VHlwZU9iamVjdCopIGJhc2UsIHR5cGUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDcyMiw2ICs0NzU5LDE4IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCit3cmFwX2RlbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIHZvaWQgKndyYXBwZWQpCit7CisgICAgZGVzdHJ1Y3RvciBmdW5jID0gKGRlc3RydWN0b3Ipd3JhcHBlZDsKKworICAgIGlmICghY2hlY2tfbnVtX2FyZ3MoYXJncywgMCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgKCpmdW5jKShzZWxmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIHdyYXBfcmljaGNtcGZ1bmMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCB2b2lkICp3cmFwcGVkLCBpbnQgb3ApCiB7CiAgICAgcmljaGNtcGZ1bmMgZnVuYyA9IChyaWNoY21wZnVuYyl3cmFwcGVkOwpAQCAtNDkwMCw3ICs0OTQ5LDcgQEAKIAogICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX25ld19fKSAhPSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KHRwX25ld19tZXRob2RkZWYsIChQeU9iamVjdCAqKXR5cGUpOworICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeCh0cF9uZXdfbWV0aG9kZGVmLCAoUHlPYmplY3QgKil0eXBlLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbmV3X18sIGZ1bmMpKSB7CkBAIC01Mjc4LDI4ICs1MzI3LDExIEBACiAgICAgX1B5X0lERU5USUZJRVIoX19zdHJfXyk7CiAKICAgICBmdW5jID0gbG9va3VwX21ldGhvZChzZWxmLCAmUHlJZF9fX3N0cl9fKTsKLSAgICBpZiAoZnVuYyAhPSBOVUxMKSB7Ci0gICAgICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIE5VTEwpOwotICAgICAgICBQeV9ERUNSRUYoZnVuYyk7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBQeU9iamVjdCAqcmVzczsgKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgcmVzID0gc2xvdF90cF9yZXByKHNlbGYpOwotICAgICAgICBpZiAoIXJlcykKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAvKiBYWFggdGhpcyBpcyBub24tc2Vuc2ljYWwuIFdoeSBzaG91bGQgd2UgcmV0dXJuCi0gICAgICAgICAgIGEgYnl0ZXMgb2JqZWN0IGZyb20gX19zdHJfXy4gSXMgdGhpcyBjb2RlIGV2ZW4KLSAgICAgICAgICAgdXNlZD8gLSBtdmwgKi8KLSAgICAgICAgYXNzZXJ0KDApOwotICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAvKgotICAgICAgICByZXNzID0gX1B5VW5pY29kZV9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nKHJlcyk7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXMpOwotICAgICAgICByZXR1cm4gcmVzczsKLSAgICAgICAgKi8KLSAgICB9CisgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgTlVMTCk7CisgICAgUHlfREVDUkVGKGZ1bmMpOworICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBQeV9oYXNoX3QKQEAgLTU2MTksMTYgKzU2NTEsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNsb3RfdHBfZGVsKFB5T2JqZWN0ICpzZWxmKQorc2xvdF90cF9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKIHsKICAgICBfUHlfSURFTlRJRklFUihfX2RlbF9fKTsKICAgICBQeU9iamVjdCAqZGVsLCAqcmVzOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAKLSAgICAvKiBUZW1wb3JhcmlseSByZXN1cnJlY3QgdGhlIG9iamVjdC4gKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID09IDApOwotICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7Ci0KICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLwogICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwogCkBAIC01NjQ1LDM3ICs1NjczLDYgQEAKIAogICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwotCi0gICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAotICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCi0gICAgICovCi0gICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOwotICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQotICAgICAgICByZXR1cm47ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCi0KLSAgICAvKiBfX2RlbF9fIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgotICAgICAqIG5ldmVyIGhhcHBlbmVkLgotICAgICAqLwotICAgIHsKLSAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7Ci0gICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7Ci0gICAgICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKLSAgICB9Ci0gICAgYXNzZXJ0KCFQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkgfHwKLSAgICAgICAgICAgX1B5X0FTX0dDKHNlbGYpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKLSAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICogdW5kb25lLgotICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7Ci0gICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7Ci0jZW5kaWYKIH0KIAogCkBAIC01Nzg0LDcgKzU3ODEsNyBAQAogICAgICAgICAgICAic2VlIGhlbHAodHlwZSh4KSkgZm9yIHNpZ25hdHVyZSIsCiAgICAgICAgICAgIFB5V3JhcHBlckZsYWdfS0VZV09SRFMpLAogICAgIFRQU0xPVCgiX19uZXdfXyIsIHRwX25ldywgc2xvdF90cF9uZXcsIE5VTEwsICIiKSwKLSAgICBUUFNMT1QoIl9fZGVsX18iLCB0cF9kZWwsIHNsb3RfdHBfZGVsLCBOVUxMLCAiIiksCisgICAgVFBTTE9UKCJfX2RlbF9fIiwgdHBfZmluYWxpemUsIHNsb3RfdHBfZmluYWxpemUsICh3cmFwcGVyZnVuYyl3cmFwX2RlbCwgIiIpLAogCiAgICAgQklOU0xPVCgiX19hZGRfXyIsIG5iX2FkZCwgc2xvdF9uYl9hZGQsCiAgICAgICAgICIrIiksCkBAIC02MTgxLDE1ICs2MTc4LDE0IEBACiB7CiAgICAgUHlUeXBlT2JqZWN0ICpzdWJjbGFzczsKICAgICBQeU9iamVjdCAqcmVmLCAqc3ViY2xhc3NlcywgKmRpY3Q7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIHN1YmNsYXNzZXMgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChzdWJjbGFzc2VzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGFzc2VydChQeUxpc3RfQ2hlY2soc3ViY2xhc3NlcykpOwotICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUoc3ViY2xhc3Nlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0oc3ViY2xhc3NlcywgaSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHN1YmNsYXNzZXMpKTsKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoUHlEaWN0X05leHQoc3ViY2xhc3NlcywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHN1YmNsYXNzID0gKFB5VHlwZU9iamVjdCAqKVB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGFzc2VydChzdWJjbGFzcyAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCmluZGV4IGE1NzJjMTIuLmVhNTQwZDYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMKKysrIGIvT2JqZWN0cy91bmljb2RlY3R5cGUuYwpAQCAtNjEsNyArNjEsNyBAQAogLyogUmV0dXJucyB0aGUgdGl0bGVjYXNlIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZXNwb25kaW5nIHRvIGNoIG9yIGp1c3QKICAgIGNoIGlmIG5vIHRpdGxlY2FzZSBtYXBwaW5nIGlzIGtub3duLiAqLwogCi1QeV9VQ1M0IF9QeVVuaWNvZGVfVG9UaXRsZWNhc2UocmVnaXN0ZXIgUHlfVUNTNCBjaCkKK1B5X1VDUzQgX1B5VW5pY29kZV9Ub1RpdGxlY2FzZShQeV9VQ1M0IGNoKQogewogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwppbmRleCBhMTQ5MTc3Li5hYmFhZGNkIDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYworKysgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwpAQCAtNDcsMTQgKzQ3LDYgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAotLyogRW5kaWFubmVzcyBzd2l0Y2hlczsgZGVmYXVsdHMgdG8gbGl0dGxlIGVuZGlhbiAqLwotCi0jaWZkZWYgV09SRFNfQklHRU5ESUFOCi0jIGRlZmluZSBCWVRFT1JERVJfSVNfQklHX0VORElBTgotI2Vsc2UKLSMgZGVmaW5lIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCi0jZW5kaWYKLQogLyogLS0tIEdsb2JhbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIE5PVEU6IEluIHRoZSBpbnRlcnByZXRlcidzIGluaXRpYWxpemF0aW9uIHBoYXNlLCBzb21lIGdsb2JhbHMgYXJlIGN1cnJlbnRseQpAQCAtMTMwLDE2ICsxMjIsMTQgQEAKIC8qIHRydWUgaWYgdGhlIFVuaWNvZGUgb2JqZWN0IGhhcyBhbiBhbGxvY2F0ZWQgVVRGLTggbWVtb3J5IGJsb2NrCiAgICAobm90IHNoYXJlZCB3aXRoIG90aGVyIGRhdGEpICovCiAjZGVmaW5lIF9QeVVuaWNvZGVfSEFTX1VURjhfTUVNT1JZKG9wKSAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sob3ApKSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoIVB5VW5pY29kZV9JU19DT01QQUNUX0FTQ0lJKG9wKSAgICAgICAgICAgICAgICAgICBcCisgICAgKCghUHlVbmljb2RlX0lTX0NPTVBBQ1RfQVNDSUkob3ApICAgICAgICAgICAgICAgICAgIFwKICAgICAgICYmIF9QeVVuaWNvZGVfVVRGOChvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgJiYgX1B5VW5pY29kZV9VVEY4KG9wKSAhPSBQeVVuaWNvZGVfREFUQShvcCkpKQogCiAvKiB0cnVlIGlmIHRoZSBVbmljb2RlIG9iamVjdCBoYXMgYW4gYWxsb2NhdGVkIHdzdHIgbWVtb3J5IGJsb2NrCiAgICAobm90IHNoYXJlZCB3aXRoIG90aGVyIGRhdGEpICovCiAjZGVmaW5lIF9QeVVuaWNvZGVfSEFTX1dTVFJfTUVNT1JZKG9wKSAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sob3ApKSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoX1B5VW5pY29kZV9XU1RSKG9wKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChfUHlVbmljb2RlX1dTVFIob3ApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICghUHlVbmljb2RlX0lTX1JFQURZKG9wKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIF9QeVVuaWNvZGVfV1NUUihvcCkgIT0gUHlVbmljb2RlX0RBVEEob3ApKSkpCiAKQEAgLTE5OSw2ICsxODksMTAgQEAKICAgICAgICAgcmV0dXJuIHVuaWNvZGVfZW1wdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpOworCiAvKiBMaXN0IG9mIHN0YXRpYyBzdHJpbmdzLiAqLwogc3RhdGljIF9QeV9JZGVudGlmaWVyICpzdGF0aWNfc3RyaW5ncyA9IE5VTEw7CiAKQEAgLTQyNyw4ICs0MjEsNiBAQAogI2lmbmRlZiBQeV9ERUJVRwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgYXNzZXJ0KFB5X1JFRkNOVCh1bmljb2RlKSA9PSAxKTsKLQogICAgIGxlbiA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSk7CiAgICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKQEAgLTQ0NSwxMCArNDM3LDEyIEBACiAgICAgfQogCiAgICAgaWYgKF9QeVVuaWNvZGVfUmVhZHkodW5pY29kZSkgPCAwKSB7Ci0gICAgICAgIFB5X1hERUNSRUYodW5pY29kZSk7CisgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2Vsc2UKKyAgICBhc3NlcnQoUHlfUkVGQ05UKHVuaWNvZGUpID09IDEpOworCiAgICAgLyogZG9uJ3QgbWFrZSB0aGUgcmVzdWx0IHJlYWR5IGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRoYXQgdGhlIGNhbGxlcgogICAgICAgIG1ha2VzIHRoZSBzdHJpbmcgcmVhZHkgYmVmb3JlIHVzaW5nIGl0ICovCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7CkBAIC00NzEsNyArNDY1LDkgQEAKICAgICB9CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgMCk7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIDApOwogICAgICAgICBpZiAoY2ggPCAyNTYpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpsYXRpbjFfY2hhciA9IHVuaWNvZGVfbGF0aW4xW2NoXTsKICAgICAgICAgICAgIGlmIChsYXRpbjFfY2hhciAhPSBOVUxMKSB7CkBAIC01NDQsNyArNTQwLDYgQEAKIAogc3RhdGljIEJMT09NX01BU0sgYmxvb21fbGluZWJyZWFrID0gfihCTE9PTV9NQVNLKTA7CiAKLSNkZWZpbmUgQkxPT01fQUREKG1hc2ssIGNoKSAoKG1hc2sgfD0gKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQogI2RlZmluZSBCTE9PTShtYXNrLCBjaCkgICAgICgobWFzayAmICAoMVVMIDw8ICgoY2gpICYgKEJMT09NX1dJRFRIIC0gMSkpKSkpCiAKICNkZWZpbmUgQkxPT01fTElORUJSRUFLKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU1NCwyMSArNTQ5LDQwIEBACiBQeV9MT0NBTF9JTkxJTkUoQkxPT01fTUFTSykKIG1ha2VfYmxvb21fbWFzayhpbnQga2luZCwgdm9pZCogcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKKyNkZWZpbmUgQkxPT01fVVBEQVRFKFRZUEUsIE1BU0ssIFBUUiwgTEVOKSAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUWVBFICpkYXRhID0gKFRZUEUgKilQVFI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVFlQRSAqZW5kID0gZGF0YSArIExFTjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgY2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmb3IgKDsgZGF0YSAhPSBlbmQ7IGRhdGErKykgeyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNoID0gKmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNQVNLIHw9ICgxVUwgPDwgKGNoICYgKEJMT09NX1dJRFRIIC0gMSkpKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwogICAgIC8qIGNhbGN1bGF0ZSBzaW1wbGUgYmxvb20tc3R5bGUgYml0bWFzayBmb3IgYSBnaXZlbiB1bmljb2RlIHN0cmluZyAqLwogCiAgICAgQkxPT01fTUFTSyBtYXNrOwotICAgIFB5X3NzaXplX3QgaTsKIAogICAgIG1hc2sgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgQkxPT01fQUREKG1hc2ssIFB5VW5pY29kZV9SRUFEKGtpbmQsIHB0ciwgaSkpOwotCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzEsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzIsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzQsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOworICAgIH0KICAgICByZXR1cm4gbWFzazsKLX0KIAotI2RlZmluZSBCTE9PTV9NRU1CRVIobWFzaywgY2hyLCBzdHIpIFwKLSAgICAoQkxPT00obWFzaywgY2hyKSBcCi0gICAgICYmIChQeVVuaWNvZGVfRmluZENoYXIoc3RyLCBjaHIsIDAsIFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0ciksIDEpID49IDApKQorI3VuZGVmIEJMT09NX1VQREFURQorfQogCiAvKiBDb21waWxhdGlvbiBvZiB0ZW1wbGF0ZWQgcm91dGluZXMgKi8KIApAQCAtNTg4LDYgKzYwMiw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvcmVwbGFjZS5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kX21heF9jaGFyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdW5kZWYuaCIKQEAgLTU5OCw2ICs2MTMsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3JlcGxhY2UuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9sb2NhbGV1dGlsLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuZGVmLmgiCkBAIC02MDgsNiArNjI0LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9yZXBsYWNlLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvbG9jYWxldXRpbC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi91bmRlZi5oIgpAQCAtNjU0LDYgKzY3MSwyNSBAQAogICAgIH0KIH0KIAorI2lmZGVmIFB5X0RFQlVHCisvKiBGaWxsIHRoZSBkYXRhIG9mIGFuIFVuaWNvZGUgc3RyaW5nIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIHRvIGRldGVjdCBidWdzCisgICBlYXJsaWVyLgorCisgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywgYXQgbGVhc3QgZm9yCisgICBBU0NJSSBhbmQgVUNTLTQgc3RyaW5ncy4gVSswMEZGIGlzIGludmFsaWQgaW4gQVNDSUkgYW5kIFUrRkZGRkZGRkYgaXMgYW4KKyAgIGludmFsaWQgY2hhcmFjdGVyIGluIFVuaWNvZGUgNi4wLiAqLworc3RhdGljIHZvaWQKK3VuaWNvZGVfZmlsbF9pbnZhbGlkKFB5T2JqZWN0ICp1bmljb2RlLCBQeV9zc2l6ZV90IG9sZF9sZW5ndGgpCit7CisgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICBQeV9VQ1MxICpkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSk7CisgICAgUHlfc3NpemVfdCBsZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyAgICBpZiAobGVuZ3RoIDw9IG9sZF9sZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1zZXQoZGF0YSArIG9sZF9sZW5ndGggKiBraW5kLCAweGZmLCAobGVuZ3RoIC0gb2xkX2xlbmd0aCkgKiBraW5kKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiByZXNpemVfY29tcGFjdChQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBsZW5ndGgpCiB7CkBAIC02NjIsNiArNjk4LDEwIEBACiAgICAgUHlfc3NpemVfdCBuZXdfc2l6ZTsKICAgICBpbnQgc2hhcmVfd3N0cjsKICAgICBQeU9iamVjdCAqbmV3X3VuaWNvZGU7CisjaWZkZWYgUHlfREVCVUcKKyAgICBQeV9zc2l6ZV90IG9sZF9sZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyNlbmRpZgorCiAgICAgYXNzZXJ0KHVuaWNvZGVfbW9kaWZpYWJsZSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19SRUFEWSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19DT01QQUNUKHVuaWNvZGUpKTsKQEAgLTcwMSw2ICs3NDEsOSBAQAogICAgICAgICBQeU9iamVjdF9ERUwoX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpKTsKICAgICAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpID0gTlVMTDsKICAgICB9CisjaWZkZWYgUHlfREVCVUcKKyAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgUHlVbmljb2RlX0RBVEEodW5pY29kZSksCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgMCk7CiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CkBAIC03MTksNiArNzYyLDkgQEAKICAgICAgICAgUHlfc3NpemVfdCBjaGFyX3NpemU7CiAgICAgICAgIGludCBzaGFyZV93c3RyLCBzaGFyZV91dGY4OwogICAgICAgICB2b2lkICpkYXRhOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCA9IF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpOworI2VuZGlmCiAKICAgICAgICAgZGF0YSA9IF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSk7CiAgICAgICAgIGNoYXJfc2l6ZSA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwpAQCAtNzU0LDYgKzgwMCw5IEBACiAgICAgICAgIH0KICAgICAgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7CiAgICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgZGF0YSwgbGVuZ3RoLCAwKTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgICAgICBpZiAoc2hhcmVfd3N0ciB8fCBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPT0gTlVMTCkgewogICAgICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTgwNiw4ICs4NTUsOCBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGNvcHlfbGVuZ3RoID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKTsKICAgICAgICAgY29weV9sZW5ndGggPSBQeV9NSU4oY29weV9sZW5ndGgsIGxlbmd0aCk7Ci0gICAgICAgIFB5X1VOSUNPREVfQ09QWShfUHlVbmljb2RlX1dTVFIodyksIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfbGVuZ3RoKTsKKyAgICAgICAgUHlfTUVNQ1BZKF9QeVVuaWNvZGVfV1NUUih3KSwgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgY29weV9sZW5ndGggKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICByZXR1cm4gdzsKICAgICB9CiB9CkBAIC04MjQsNyArODczLDcgQEAKIHN0YXRpYyBQeVVuaWNvZGVPYmplY3QgKgogX1B5VW5pY29kZV9OZXcoUHlfc3NpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmVnaXN0ZXIgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlOworICAgIFB5VW5pY29kZU9iamVjdCAqdW5pY29kZTsKICAgICBzaXplX3QgbmV3X3NpemU7CiAKICAgICAvKiBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MgKi8KQEAgLTg0Nyw2ICs4OTYsMTkgQEAKICAgICBpZiAodW5pY29kZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuZXdfc2l6ZSA9IHNpemVvZihQeV9VTklDT0RFKSAqICgoc2l6ZV90KWxlbmd0aCArIDEpOworCisgICAgX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKSA9IGxlbmd0aDsKKyAgICBfUHlVbmljb2RlX0hBU0godW5pY29kZSkgPSAtMTsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmludGVybmVkID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmtpbmQgPSAwOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuY29tcGFjdCA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5yZWFkeSA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5hc2NpaSA9IDA7CisgICAgX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSAwOworICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9VVEY4X0xFTkdUSCh1bmljb2RlKSA9IDA7CisKICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPSAoUHlfVU5JQ09ERSopIFB5T2JqZWN0X01BTExPQyhuZXdfc2l6ZSk7CiAgICAgaWYgKCFfUHlVbmljb2RlX1dTVFIodW5pY29kZSkpIHsKICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwpAQCAtODYzLDE3ICs5MjUsNyBAQAogICAgICAqLwogICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKVswXSA9IDA7CiAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpW2xlbmd0aF0gPSAwOwotICAgIF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7Ci0gICAgX1B5VW5pY29kZV9IQVNIKHVuaWNvZGUpID0gLTE7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5pbnRlcm5lZCA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5raW5kID0gMDsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmNvbXBhY3QgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkucmVhZHkgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuYXNjaWkgPSAwOwotICAgIF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpID0gMDsKLSAgICBfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfVVRGOF9MRU5HVEgodW5pY29kZSkgPSAwOworCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgoUHlPYmplY3QgKil1bmljb2RlLCAwKSk7CiAgICAgcmV0dXJuIHVuaWNvZGU7CiB9CkBAIC0xMDc4LDExICsxMTMwLDcgQEAKICAgICAgICAgfQogICAgIH0KICNpZmRlZiBQeV9ERUJVRwotICAgIC8qIEZpbGwgdGhlIGRhdGEgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMgdG8gZGV0ZWN0IGJ1Z3MgZWFybGllci4KLSAgICAgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywKLSAgICAgICBhdCBsZWFzdCBmb3IgQVNDSUkgYW5kIFVDUy00IHN0cmluZ3MuIFUrMDBGRiBpcyBpbnZhbGlkIGluIEFTQ0lJCi0gICAgICAgYW5kIFUrRkZGRkZGRkYgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgaW4gVW5pY29kZSA2LjAuICovCi0gICAgbWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUgKiBraW5kKTsKKyAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCgoUHlPYmplY3QqKXVuaWNvZGUsIDApOwogI2VuZGlmCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgoUHlPYmplY3QqKXVuaWNvZGUsIDApKTsKICAgICByZXR1cm4gb2JqOwpAQCAtMTUxMiw3ICsxNTYwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLXVuaWNvZGVfZGVhbGxvYyhyZWdpc3RlciBQeU9iamVjdCAqdW5pY29kZSkKK3VuaWNvZGVfZGVhbGxvYyhQeU9iamVjdCAqdW5pY29kZSkKIHsKICAgICBzd2l0Y2ggKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh1bmljb2RlKSkgewogICAgIGNhc2UgU1NUQVRFX05PVF9JTlRFUk5FRDoKQEAgLTE2NDQsMzggKzE2OTIsNiBAQAogICAgIHJldHVybiB1bmljb2RlX3Jlc2l6ZShwX3VuaWNvZGUsIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbnQKLXVuaWNvZGVfd2lkZW4oUHlPYmplY3QgKipwX3VuaWNvZGUsIFB5X3NzaXplX3QgbGVuZ3RoLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4Y2hhcikKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGFzc2VydChQeVVuaWNvZGVfSVNfUkVBRFkoKnBfdW5pY29kZSkpOwotICAgIGFzc2VydChsZW5ndGggPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKnBfdW5pY29kZSkpOwotICAgIGlmIChtYXhjaGFyIDw9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSgqcF91bmljb2RlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmVzdWx0ID0gUHlVbmljb2RlX05ldyhQeVVuaWNvZGVfR0VUX0xFTkdUSCgqcF91bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNoYXIpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlc3VsdCwgMCwgKnBfdW5pY29kZSwgMCwgbGVuZ3RoKTsKLSAgICBQeV9ERUNSRUYoKnBfdW5pY29kZSk7Ci0gICAgKnBfdW5pY29kZSA9IHJlc3VsdDsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdW5pY29kZV9wdXRjaGFyKFB5T2JqZWN0ICoqcF91bmljb2RlLCBQeV9zc2l6ZV90ICpwb3MsCi0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCkKLXsKLSAgICBhc3NlcnQoY2ggPD0gTUFYX1VOSUNPREUpOwotICAgIGlmICh1bmljb2RlX3dpZGVuKHBfdW5pY29kZSwgKnBvcywgY2gpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCgqcF91bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RBVEEoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICgqcG9zKSsrLCBjaCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIC8qIENvcHkgYSBBU0NJSSBvciBsYXRpbjEgY2hhciogc3RyaW5nIGludG8gYSBQeXRob24gVW5pY29kZSBzdHJpbmcuCiAKICAgIFdBUk5JTkc6IFRoZSBmdW5jdGlvbiBkb2Vzbid0IGNvcHkgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyIGFuZApAQCAtMTY5Miw2ICsxNzA4LDE0IEBACiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDogewogICAgICAgICBhc3NlcnQoaW5kZXggKyBsZW4gPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSkpOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IHVjczFsaWJfZmluZF9tYXhfY2hhcigKKyAgICAgICAgICAgICAgICAoY29uc3QgUHlfVUNTMSopc3RyLAorICAgICAgICAgICAgICAgIChjb25zdCBQeV9VQ1MxKilzdHIgKyBsZW4pOworICAgICAgICAgICAgYXNzZXJ0KG1heGNoYXIgPCAxMjgpOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgbWVtY3B5KChjaGFyICopIGRhdGEgKyBpbmRleCwgc3RyLCBsZW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xOTM3LDEzICsxOTYxLDE3IEBACiAgICAgYXNzZXJ0KHNpemUgPiAwKTsKICAgICBpZiAoc2l6ZSA9PSAxKSB7CiAgICAgICAgIFB5X1VDUzQgY2ggPSB1WzBdOworICAgICAgICBpbnQga2luZDsKKyAgICAgICAgdm9pZCAqZGF0YTsKICAgICAgICAgaWYgKGNoIDwgMjU2KQogICAgICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhciljaCk7CiAKICAgICAgICAgcmVzID0gUHlVbmljb2RlX05ldygxLCBjaCk7CiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQocmVzKSwgUHlVbmljb2RlX0RBVEEocmVzKSwgMCwgY2gpOworICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQocmVzKTsKKyAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHJlcyk7CisgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCAwLCBjaCk7CiAgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmVzLCAxKSk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQpAQCAtMTk3MywxMyArMjAwMSwxNyBAQAogICAgIGFzc2VydChzaXplID4gMCk7CiAgICAgaWYgKHNpemUgPT0gMSkgewogICAgICAgICBQeV9VQ1M0IGNoID0gdVswXTsKKyAgICAgICAgaW50IGtpbmQ7CisgICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgIGlmIChjaCA8IDI1NikKICAgICAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpY2gpOwogCiAgICAgICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoMSwgY2gpOwogICAgICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHJlcyksIFB5VW5pY29kZV9EQVRBKHJlcyksIDAsIGNoKTsKKyAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHJlcyk7CisgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShyZXMpOworICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgMCwgY2gpOwogICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJlcywgMSkpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KQEAgLTIyNTgsNyArMjI5MCw3IEBACiAjaWZkZWYgSEFWRV9XQ0hBUl9ICiAKIFB5T2JqZWN0ICoKLVB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocmVnaXN0ZXIgY29uc3Qgd2NoYXJfdCAqdywgUHlfc3NpemVfdCBzaXplKQorUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihjb25zdCB3Y2hhcl90ICp3LCBQeV9zc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKHcgPT0gTlVMTCkgewogICAgICAgICBpZiAoc2l6ZSA9PSAwKQpAQCAtMjI3OCwxNiArMjMxMCw5IEBACiAKIHN0YXRpYyB2b2lkCiBtYWtlZm10KGNoYXIgKmZtdCwgaW50IGxvbmdmbGFnLCBpbnQgbG9uZ2xvbmdmbGFnLCBpbnQgc2l6ZV90ZmxhZywKLSAgICAgICAgaW50IHplcm9wYWQsIGludCB3aWR0aCwgaW50IHByZWNpc2lvbiwgY2hhciBjKQorICAgICAgICBjaGFyIGMpCiB7CiAgICAgKmZtdCsrID0gJyUnOwotICAgIGlmICh3aWR0aCkgewotICAgICAgICBpZiAoemVyb3BhZCkKLSAgICAgICAgICAgICpmbXQrKyA9ICcwJzsKLSAgICAgICAgZm10ICs9IHNwcmludGYoZm10LCAiJWQiLCB3aWR0aCk7Ci0gICAgfQotICAgIGlmIChwcmVjaXNpb24pCi0gICAgICAgIGZtdCArPSBzcHJpbnRmKGZtdCwgIi4lZCIsIHByZWNpc2lvbik7CiAgICAgaWYgKGxvbmdmbGFnKQogICAgICAgICAqZm10KysgPSAnbCc7CiAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKSB7CkBAIC0yMzEyLDQ0ICsyMzM3LDEzOSBAQAogICAgICpmbXQgPSAnXDAnOwogfQogCi0vKiBoZWxwZXIgZm9yIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpICovCisvKiBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciBvdXRwdXQgb2YgJWxsZCBvciAlcC4KKyAgIFdlIG5lZWQgYXQgbW9zdCBjZWlsKGxvZzEwKDI1NikqU0laRU9GX0xPTkdfTE9ORykgZGlnaXRzLAorICAgcGx1cyAxIGZvciB0aGUgc2lnbi4gIDUzLzIyIGlzIGFuIHVwcGVyIGJvdW5kIGZvciBsb2cxMCgyNTYpLiAqLworI2RlZmluZSBNQVhfTE9OR19MT05HX0NIQVJTICgyICsgKFNJWkVPRl9MT05HX0xPTkcqNTMtMSkgLyAyMikKKworc3RhdGljIGludAordW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgd2lkdGgsIFB5X3NzaXplX3QgcHJlY2lzaW9uKQoreworICAgIFB5X3NzaXplX3QgbGVuZ3RoLCBmaWxsLCBhcmdsZW47CisgICAgUHlfVUNTNCBtYXhjaGFyOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBsZW5ndGggPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOworICAgIGlmICgocHJlY2lzaW9uID09IC0xIHx8IHByZWNpc2lvbiA+PSBsZW5ndGgpCisgICAgICAgICYmIHdpZHRoIDw9IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBzdHIpOworCisgICAgaWYgKHByZWNpc2lvbiAhPSAtMSkKKyAgICAgICAgbGVuZ3RoID0gUHlfTUlOKHByZWNpc2lvbiwgbGVuZ3RoKTsKKworICAgIGFyZ2xlbiA9IFB5X01BWChsZW5ndGgsIHdpZHRoKTsKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiB3cml0ZXItPm1heGNoYXIpCisgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHN0ciwgMCwgbGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgYXJnbGVuLCBtYXhjaGFyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHdpZHRoID4gbGVuZ3RoKSB7CisgICAgICAgIGZpbGwgPSB3aWR0aCAtIGxlbmd0aDsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgJyAnKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICB9CisKKyAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCAwLCBsZW5ndGgpOworICAgIHdyaXRlci0+cG9zICs9IGxlbmd0aDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX2NzdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHdpZHRoLCBQeV9zc2l6ZV90IHByZWNpc2lvbikKK3sKKyAgICAvKiBVVEYtOCAqLworICAgIFB5X3NzaXplX3QgbGVuZ3RoOworICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIGludCByZXM7CisKKyAgICBsZW5ndGggPSBzdHJsZW4oc3RyKTsKKyAgICBpZiAocHJlY2lzaW9uICE9IC0xKQorICAgICAgICBsZW5ndGggPSBQeV9NSU4obGVuZ3RoLCBwcmVjaXNpb24pOworICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHN0ciwgbGVuZ3RoLCAicmVwbGFjZSIsIE5VTEwpOworICAgIGlmICh1bmljb2RlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJlcyA9IHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCB1bmljb2RlLCB3aWR0aCwgLTEpOworICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICByZXR1cm4gcmVzOworfQogCiBzdGF0aWMgY29uc3QgY2hhcioKLXBhcnNlX2Zvcm1hdF9mbGFncyhjb25zdCBjaGFyICpmLAotICAgICAgICAgICAgICAgICAgIGludCAqcF93aWR0aCwgaW50ICpwX3ByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICBpbnQgKnBfbG9uZ2ZsYWcsIGludCAqcF9sb25nbG9uZ2ZsYWcsIGludCAqcF9zaXplX3RmbGFnKQordW5pY29kZV9mcm9tZm9ybWF0X2FyZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmYsIHZhX2xpc3QgKnZhcmdzKQogewotICAgIGludCB3aWR0aCwgcHJlY2lzaW9uLCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnOworICAgIGNvbnN0IGNoYXIgKnA7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgaW50IHplcm9wYWQ7CisgICAgUHlfc3NpemVfdCB3aWR0aDsKKyAgICBQeV9zc2l6ZV90IHByZWNpc2lvbjsKKyAgICBpbnQgbG9uZ2ZsYWc7CisgICAgaW50IGxvbmdsb25nZmxhZzsKKyAgICBpbnQgc2l6ZV90ZmxhZzsKKyAgICBQeV9zc2l6ZV90IGZpbGw7CisKKyAgICBwID0gZjsKKyAgICBmKys7CisgICAgemVyb3BhZCA9IDA7CisgICAgaWYgKCpmID09ICcwJykgeworICAgICAgICB6ZXJvcGFkID0gMTsKKyAgICAgICAgZisrOworICAgIH0KIAogICAgIC8qIHBhcnNlIHRoZSB3aWR0aC5wcmVjaXNpb24gcGFydCwgZS5nLiAiJTIuNXMiID0+IHdpZHRoPTIsIHByZWNpc2lvbj01ICovCi0gICAgZisrOwotICAgIHdpZHRoID0gMDsKLSAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKQotICAgICAgICB3aWR0aCA9ICh3aWR0aCoxMCkgKyAqZisrIC0gJzAnOwotICAgIHByZWNpc2lvbiA9IDA7CisgICAgd2lkdGggPSAtMTsKKyAgICBpZiAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgIHdpZHRoID0gKmYgLSAnMCc7CisgICAgICAgIGYrKzsKKyAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICAgICAgaWYgKHdpZHRoID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpKmYgLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aWR0aCA9ICh3aWR0aCAqIDEwKSArICgqZiAtICcwJyk7CisgICAgICAgICAgICBmKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJlY2lzaW9uID0gLTE7CiAgICAgaWYgKCpmID09ICcuJykgewogICAgICAgICBmKys7Ci0gICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpCi0gICAgICAgICAgICBwcmVjaXNpb24gPSAocHJlY2lzaW9uKjEwKSArICpmKysgLSAnMCc7CisgICAgICAgIGlmIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgICAgIHByZWNpc2lvbiA9ICgqZiAtICcwJyk7CisgICAgICAgICAgICBmKys7CisgICAgICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KSpmIC0gJzAnKSkgLyAxMCkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVjaXNpb24gdG9vIGJpZyIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gKHByZWNpc2lvbiAqIDEwKSArICgqZiAtICcwJyk7CisgICAgICAgICAgICAgICAgZisrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGlmICgqZiA9PSAnJScpIHsKICAgICAgICAgICAgIC8qICIlLjMlcyIgPT4gZiBwb2ludHMgdG8gIjMiICovCiAgICAgICAgICAgICBmLS07CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCpmID09ICdcMCcpIHsKLSAgICAgICAgLyogYm9ndXMgZm9ybWF0ICIlLjEiID0+IGdvIGJhY2t3YXJkLCBmIHBvaW50cyB0byAiMSIgKi8KKyAgICAgICAgLyogYm9ndXMgZm9ybWF0ICIlLjEyMyIgPT4gZ28gYmFja3dhcmQsIGYgcG9pbnRzIHRvICIzIiAqLwogICAgICAgICBmLS07CiAgICAgfQotICAgIGlmIChwX3dpZHRoICE9IE5VTEwpCi0gICAgICAgICpwX3dpZHRoID0gd2lkdGg7Ci0gICAgaWYgKHBfcHJlY2lzaW9uICE9IE5VTEwpCi0gICAgICAgICpwX3ByZWNpc2lvbiA9IHByZWNpc2lvbjsKIAogICAgIC8qIEhhbmRsZSAlbGQsICVsdSwgJWxsZCBhbmQgJWxsdS4gKi8KICAgICBsb25nZmxhZyA9IDA7CiAgICAgbG9uZ2xvbmdmbGFnID0gMDsKICAgICBzaXplX3RmbGFnID0gMDsKLQogICAgIGlmICgqZiA9PSAnbCcpIHsKICAgICAgICAgaWYgKGZbMV0gPT0gJ2QnIHx8IGZbMV0gPT0gJ3UnIHx8IGZbMV0gPT0gJ2knKSB7CiAgICAgICAgICAgICBsb25nZmxhZyA9IDE7CkBAIC0yMzY4LDQ5OSArMjQ4OCwyODkgQEAKICAgICAgICAgc2l6ZV90ZmxhZyA9IDE7CiAgICAgICAgICsrZjsKICAgICB9Ci0gICAgaWYgKHBfbG9uZ2ZsYWcgIT0gTlVMTCkKLSAgICAgICAgKnBfbG9uZ2ZsYWcgPSBsb25nZmxhZzsKLSAgICBpZiAocF9sb25nbG9uZ2ZsYWcgIT0gTlVMTCkKLSAgICAgICAgKnBfbG9uZ2xvbmdmbGFnID0gbG9uZ2xvbmdmbGFnOwotICAgIGlmIChwX3NpemVfdGZsYWcgIT0gTlVMTCkKLSAgICAgICAgKnBfc2l6ZV90ZmxhZyA9IHNpemVfdGZsYWc7CisKKyAgICBpZiAoZlsxXSA9PSAnXDAnKQorICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDA7CisKKyAgICBzd2l0Y2ggKCpmKSB7CisgICAgY2FzZSAnYyc6CisgICAgeworICAgICAgICBpbnQgb3JkaW5hbCA9IHZhX2FyZygqdmFyZ3MsIGludCk7CisgICAgICAgIGlmIChvcmRpbmFsIDwgMCB8fCBvcmRpbmFsID4gTUFYX1VOSUNPREUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgYXJndW1lbnQgbm90IGluIHJhbmdlKDB4MTEwMDAwKSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgb3JkaW5hbCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ2knOgorICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ3UnOgorICAgIGNhc2UgJ3gnOgorICAgIHsKKyAgICAgICAgLyogdXNlZCBieSBzcHJpbnRmICovCisgICAgICAgIGNoYXIgZm10WzEwXTsgLyogc2hvdWxkIGJlIGVub3VnaCBmb3IgIiUwbGxkXDAiICovCisgICAgICAgIGNoYXIgYnVmZmVyW01BWF9MT05HX0xPTkdfQ0hBUlNdOworICAgICAgICBQeV9zc2l6ZV90IGFyZ2xlbjsKKworICAgICAgICBpZiAoKmYgPT0gJ3UnKSB7CisgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgKmYpOworCisgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHVuc2lnbmVkIGxvbmcpKTsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCB1bnNpZ25lZCBQWV9MT05HX0xPTkcpKTsKKyNlbmRpZgorICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgc2l6ZV90KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHVuc2lnbmVkIGludCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCpmID09ICd4JykgeworICAgICAgICAgICAgbWFrZWZtdChmbXQsIDAsIDAsIDAsICd4Jyk7CisgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LCB2YV9hcmcoKnZhcmdzLCBpbnQpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCAqZik7CisKKyAgICAgICAgICAgIGlmIChsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgbG9uZykpOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIFBZX0xPTkdfTE9ORykpOworI2VuZGlmCisgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBQeV9zc2l6ZV90KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIGludCkpOworICAgICAgICB9CisgICAgICAgIGFzc2VydChsZW4gPj0gMCk7CisKKyAgICAgICAgaWYgKHByZWNpc2lvbiA8IGxlbikKKyAgICAgICAgICAgIHByZWNpc2lvbiA9IGxlbjsKKworICAgICAgICBhcmdsZW4gPSBQeV9NQVgocHJlY2lzaW9uLCB3aWR0aCk7CisgICAgICAgIGFzc2VydCh1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoKFB5X1VDUzEqKWJ1ZmZlciwgKFB5X1VDUzEqKWJ1ZmZlciArIGxlbikgPD0gMTI3KTsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGFyZ2xlbiwgMTI3KSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmICh3aWR0aCA+IHByZWNpc2lvbikgeworICAgICAgICAgICAgUHlfVUNTNCBmaWxsY2hhcjsKKyAgICAgICAgICAgIGZpbGwgPSB3aWR0aCAtIHByZWNpc2lvbjsKKyAgICAgICAgICAgIGZpbGxjaGFyID0gemVyb3BhZD8nMCc6JyAnOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgZmlsbGNoYXIpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJlY2lzaW9uID4gbGVuKSB7CisgICAgICAgICAgICBmaWxsID0gcHJlY2lzaW9uIC0gbGVuOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgJzAnKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IGZpbGw7CisgICAgICAgIH0KKworICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBidWZmZXIsIGxlbik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAncCc6CisgICAgeworICAgICAgICBjaGFyIG51bWJlcltNQVhfTE9OR19MT05HX0NIQVJTXTsKKworICAgICAgICBsZW4gPSBzcHJpbnRmKG51bWJlciwgIiVwIiwgdmFfYXJnKCp2YXJncywgdm9pZCopKTsKKyAgICAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKKworICAgICAgICAvKiAlcCBpcyBpbGwtZGVmaW5lZDogIGVuc3VyZSBsZWFkaW5nIDB4LiAqLworICAgICAgICBpZiAobnVtYmVyWzFdID09ICdYJykKKyAgICAgICAgICAgIG51bWJlclsxXSA9ICd4JzsKKyAgICAgICAgZWxzZSBpZiAobnVtYmVyWzFdICE9ICd4JykgeworICAgICAgICAgICAgbWVtbW92ZShudW1iZXIgKyAyLCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgIHN0cmxlbihudW1iZXIpICsgMSk7CisgICAgICAgICAgICBudW1iZXJbMF0gPSAnMCc7CisgICAgICAgICAgICBudW1iZXJbMV0gPSAneCc7CisgICAgICAgICAgICBsZW4gKz0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydCh1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoKFB5X1VDUzEqKW51bWJlciwgKFB5X1VDUzEqKW51bWJlciArIGxlbikgPD0gMTI3KTsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGxlbiwgMTI3KSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBudW1iZXIsIGxlbik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAncyc6CisgICAgeworICAgICAgICAvKiBVVEYtOCAqLworICAgICAgICBjb25zdCBjaGFyICpzID0gdmFfYXJnKCp2YXJncywgY29uc3QgY2hhciopOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX2NzdHIod3JpdGVyLCBzLCB3aWR0aCwgcHJlY2lzaW9uKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnVSc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIGFzc2VydChvYmogJiYgX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKKworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIG9iaiwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnVic6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IHZhX2FyZygqdmFyZ3MsIGNvbnN0IGNoYXIgKik7CisgICAgICAgIGlmIChvYmopIHsKKyAgICAgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NIRUNLKG9iaikpOworICAgICAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCBvYmosIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cih3cml0ZXIsIHN0ciwgd2lkdGgsIHByZWNpc2lvbikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ1MnOgorICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZygqdmFyZ3MsIFB5T2JqZWN0ICopOworICAgICAgICBQeU9iamVjdCAqc3RyOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgc3RyID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgICAgIGlmICghc3RyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgc3RyLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnUic6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICpyZXByOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgcmVwciA9IFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICAgICAgaWYgKCFyZXByKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgcmVwciwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnQSc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICphc2NpaTsKKyAgICAgICAgYXNzZXJ0KG9iaik7CisgICAgICAgIGFzY2lpID0gUHlPYmplY3RfQVNDSUkob2JqKTsKKyAgICAgICAgaWYgKCFhc2NpaSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIGFzY2lpLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihhc2NpaSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJyUnOgorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCAnJScpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIGlmIHdlIHN0dW1ibGUgdXBvbiBhbiB1bmtub3duIGZvcm1hdHRpbmcgY29kZSwgY29weSB0aGUgcmVzdAorICAgICAgICAgICBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byB0aGUgb3V0cHV0IHN0cmluZy4gKHdlIGNhbm5vdCBqdXN0CisgICAgICAgICAgIHNraXAgdGhlIGNvZGUsIHNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgd2hhdCdzIGluIHRoZQorICAgICAgICAgICBhcmd1bWVudCBsaXN0KSAqLworICAgICAgICBsZW4gPSBzdHJsZW4ocCk7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ3N0cih3cml0ZXIsIHAsIGxlbikgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZiA9IHArbGVuOworICAgICAgICByZXR1cm4gZjsKKyAgICB9CisKKyAgICBmKys7CiAgICAgcmV0dXJuIGY7CiB9CiAKLS8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIG91dHB1dCBvZiAlbGQuICAyMSBjaGFyYWN0ZXJzCi0gICBhbGxvd3MgZm9yIDY0LWJpdCBpbnRlZ2VycyAoaW4gZGVjaW1hbCkgYW5kIGFuIG9wdGlvbmFsIHNpZ24uICovCi0jZGVmaW5lIE1BWF9MT05HX0NIQVJTIDIxCi0vKiBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciBvdXRwdXQgb2YgJWxsZC4KLSAgIFdlIG5lZWQgYXQgbW9zdCBjZWlsKGxvZzEwKDI1NikqU0laRU9GX0xPTkdfTE9ORykgZGlnaXRzLAotICAgcGx1cyAxIGZvciB0aGUgc2lnbi4gIDUzLzIyIGlzIGFuIHVwcGVyIGJvdW5kIGZvciBsb2cxMCgyNTYpLiAqLwotI2RlZmluZSBNQVhfTE9OR19MT05HX0NIQVJTICgyICsgKFNJWkVPRl9MT05HX0xPTkcqNTMtMSkgLyAyMikKLQogUHlPYmplY3QgKgogUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJncykKIHsKLSAgICB2YV9saXN0IGNvdW50OwotICAgIFB5X3NzaXplX3QgY2FsbGNvdW50ID0gMDsKLSAgICBQeU9iamVjdCAqKmNhbGxyZXN1bHRzID0gTlVMTDsKLSAgICBQeU9iamVjdCAqKmNhbGxyZXN1bHQgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgbiA9IDA7Ci0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgcHJlY2lzaW9uID0gMDsKLSAgICBpbnQgemVyb3BhZDsKLSAgICBjb25zdCBjaGFyKiBmOwotICAgIFB5T2JqZWN0ICpzdHJpbmc7Ci0gICAgLyogdXNlZCBieSBzcHJpbnRmICovCi0gICAgY2hhciBmbXRbNjFdOyAvKiBzaG91bGQgYmUgZW5vdWdoIGZvciAlMHdpZHRoLnByZWNpc2lvbmxsZCAqLwotICAgIFB5X1VDUzQgbWF4Y2hhciA9IDEyNzsgLyogcmVzdWx0IGlzIEFTQ0lJIGJ5IGRlZmF1bHQgKi8KLSAgICBQeV9VQ1M0IGFyZ21heGNoYXI7Ci0gICAgUHlfc3NpemVfdCBudW1iZXJzaXplID0gMDsKLSAgICBjaGFyICpudW1iZXJyZXN1bHRzID0gTlVMTDsKLSAgICBjaGFyICpudW1iZXJyZXN1bHQgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOworICAgIHZhX2xpc3QgdmFyZ3MyOworICAgIGNvbnN0IGNoYXIgKmY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAKLSAgICBQeV9WQV9DT1BZKGNvdW50LCB2YXJncyk7Ci0gICAgLyogc3RlcCAxOiBjb3VudCB0aGUgbnVtYmVyIG9mICVTLyVSLyVBLyVzIGZvcm1hdCBzcGVjaWZpY2F0aW9ucwotICAgICAqICh3ZSBjYWxsIFB5T2JqZWN0X1N0cigpL1B5T2JqZWN0X1JlcHIoKS9QeU9iamVjdF9BU0NJSSgpLwotICAgICAqIFB5VW5pY29kZV9EZWNvZGVVVEY4KCkgZm9yIHRoZXNlIG9iamVjdHMgb25jZSBkdXJpbmcgc3RlcCAzIGFuZCBwdXQgdGhlCi0gICAgICogcmVzdWx0IGluIGFuIGFycmF5KQotICAgICAqIGFsc28gZXN0aW1hdGUgYSB1cHBlciBib3VuZCBmb3IgYWxsIHRoZSBudW1iZXIgZm9ybWF0cyBpbiB0aGUgc3RyaW5nLAotICAgICAqIG51bWJlcnMgd2lsbCBiZSBmb3JtYXR0ZWQgaW4gc3RlcCAzIGFuZCBiZSBrZXB0IGluIGEgJ1wwJy1zZXBhcmF0ZWQKLSAgICAgKiBidWZmZXIgYmVmb3JlIHB1dHRpbmcgZXZlcnl0aGluZyB0b2dldGhlci4gKi8KLSAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzdHJsZW4oZm9ybWF0KSArIDEwMDsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKworICAgIC8qIHZhX2xpc3QgbWF5IGJlIGFuIGFycmF5IChvZiAxIGl0ZW0pIG9uIHNvbWUgcGxhdGZvcm1zIChleDogQU1ENjQpLgorICAgICAgIENvcHkgaXQgdG8gYmUgYWJsZSB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIGEgc3ViZnVuY3Rpb24uICovCisgICAgUHlfVkFfQ09QWSh2YXJnczIsIHZhcmdzKTsKKworICAgIGZvciAoZiA9IGZvcm1hdDsgKmY7ICkgewogICAgICAgICBpZiAoKmYgPT0gJyUnKSB7Ci0gICAgICAgICAgICBpbnQgbG9uZ2xvbmdmbGFnOwotICAgICAgICAgICAgLyogc2tpcCB3aWR0aCBvciB3aWR0aC5wcmVjaXNpb24gKGVnLiAiMS4yIiBvZiAiJTEuMmYiKSAqLwotICAgICAgICAgICAgZiA9IHBhcnNlX2Zvcm1hdF9mbGFncyhmLCAmd2lkdGgsIE5VTEwsIE5VTEwsICZsb25nbG9uZ2ZsYWcsIE5VTEwpOwotICAgICAgICAgICAgaWYgKCpmID09ICdzJyB8fCAqZj09J1MnIHx8ICpmPT0nUicgfHwgKmY9PSdBJyB8fCAqZj09J1YnKQotICAgICAgICAgICAgICAgICsrY2FsbGNvdW50OwotCi0gICAgICAgICAgICBlbHNlIGlmICgqZiA9PSAnZCcgfHwgKmY9PSd1JyB8fCAqZj09J2knIHx8ICpmPT0neCcgfHwgKmY9PSdwJykgewotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgICAgaWYgKGxvbmdsb25nZmxhZykgewotICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPCBNQVhfTE9OR19MT05HX0NIQVJTKQotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNQVhfTE9OR19MT05HX0NIQVJTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgLyogTUFYX0xPTkdfQ0hBUlMgaXMgZW5vdWdoIHRvIGhvbGQgYSA2NC1iaXQgaW50ZWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHNpZ24uICBEZWNpbWFsIHRha2VzIHRoZSBtb3N0IHNwYWNlLiAgVGhpcwotICAgICAgICAgICAgICAgICAgICAgICBpc24ndCBlbm91Z2ggZm9yIG9jdGFsLiAgSWYgYSB3aWR0aCBpcyBzcGVjaWZpZWQgd2UKLSAgICAgICAgICAgICAgICAgICAgICAgbmVlZCBtb3JlICh3aGljaCB3ZSBhbGxvY2F0ZSBsYXRlcikuICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IE1BWF9MT05HX0NIQVJTKQotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNQVhfTE9OR19DSEFSUzsKLQotICAgICAgICAgICAgICAgIC8qIGFjY291bnQgZm9yIHRoZSBzaXplICsgJ1wwJyB0byBzZXBhcmF0ZSBudW1iZXJzCi0gICAgICAgICAgICAgICAgICAgaW5zaWRlIG9mIHRoZSBudW1iZXJyZXN1bHRzIGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgIG51bWJlcnNpemUgKz0gKHdpZHRoICsgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoKHVuc2lnbmVkIGNoYXIpKmYgPiAxMjcpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICJQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSBleHBlY3RzIGFuIEFTQ0lJLWVuY29kZWQgZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAic3RyaW5nLCBnb3QgYSBub24tQVNDSUkgYnl0ZTogMHglMDJ4IiwKLSAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcikqZik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBzdGVwIDI6IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlc3VsdHMgb2YKLSAgICAgKiBQeU9iamVjdF9TdHIoKS9QeU9iamVjdF9SZXByKCkvUHlVbmljb2RlX0RlY29kZVVURjgoKSBjYWxscyAqLwotICAgIGlmIChjYWxsY291bnQpIHsKLSAgICAgICAgY2FsbHJlc3VsdHMgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogY2FsbGNvdW50KTsKLSAgICAgICAgaWYgKCFjYWxscmVzdWx0cykgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxyZXN1bHQgPSBjYWxscmVzdWx0czsKLSAgICB9Ci0gICAgLyogc3RlcCAyLjU6IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlc3VsdHMgb2YgZm9ybWF0aW5nIG51bWJlcnMgKi8KLSAgICBpZiAobnVtYmVyc2l6ZSkgewotICAgICAgICBudW1iZXJyZXN1bHRzID0gUHlPYmplY3RfTWFsbG9jKG51bWJlcnNpemUpOwotICAgICAgICBpZiAoIW51bWJlcnJlc3VsdHMpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgbnVtYmVycmVzdWx0ID0gbnVtYmVycmVzdWx0czsKLSAgICB9Ci0KLSAgICAvKiBzdGVwIDM6IGZvcm1hdCBudW1iZXJzIGFuZCBmaWd1cmUgb3V0IGhvdyBsYXJnZSBhIGJ1ZmZlciB3ZSBuZWVkICovCi0gICAgZm9yIChmID0gZm9ybWF0OyAqZjsgZisrKSB7Ci0gICAgICAgIGlmICgqZiA9PSAnJScpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHA7Ci0gICAgICAgICAgICBpbnQgbG9uZ2ZsYWc7Ci0gICAgICAgICAgICBpbnQgbG9uZ2xvbmdmbGFnOwotICAgICAgICAgICAgaW50IHNpemVfdGZsYWc7Ci0gICAgICAgICAgICBpbnQgbnVtcHJpbnRlZDsKLQotICAgICAgICAgICAgcCA9IGY7Ci0gICAgICAgICAgICB6ZXJvcGFkID0gKGZbMV0gPT0gJzAnKTsKLSAgICAgICAgICAgIGYgPSBwYXJzZV9mb3JtYXRfZmxhZ3MoZiwgJndpZHRoLCAmcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9uZ2ZsYWcsICZsb25nbG9uZ2ZsYWcsICZzaXplX3RmbGFnKTsKLSAgICAgICAgICAgIHN3aXRjaCAoKmYpIHsKLSAgICAgICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBvcmRpbmFsID0gdmFfYXJnKGNvdW50LCBpbnQpOwotICAgICAgICAgICAgICAgIGlmIChvcmRpbmFsIDwgMCB8fCBvcmRpbmFsID4gTUFYX1VOSUNPREUpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJWMgYXJnIG5vdCBpbiByYW5nZSgweDExMDAwMCkiKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIChQeV9VQ1M0KW9yZGluYWwpOwotICAgICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsIHplcm9wYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcHJlY2lzaW9uLCAqZik7Ci0gICAgICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBsb25nKSk7Ci0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIFBZX0xPTkdfTE9ORykpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgUHlfc3NpemVfdCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgaW50KSk7Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgYnkgKzEgdG8gc2tpcCBvdmVyIHRoZSAnXDAnICovCi0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IChudW1wcmludGVkICsgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMSkgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMikgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bXByaW50ZWQgPj0gMCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgemVyb3BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBwcmVjaXNpb24sICd1Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCB1bnNpZ25lZCBsb25nKSk7Ci0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgc2l6ZV90KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCB1bnNpZ25lZCBpbnQpKTsKLSAgICAgICAgICAgICAgICBuICs9IG51bXByaW50ZWQ7Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IChudW1wcmludGVkICsgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMSkgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMikgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bXByaW50ZWQgPj0gMCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgMCwgMCwgMCwgemVyb3BhZCwgd2lkdGgsIHByZWNpc2lvbiwgJ3gnKTsKLSAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwgdmFfYXJnKGNvdW50LCBpbnQpKTsKLSAgICAgICAgICAgICAgICBuICs9IG51bXByaW50ZWQ7Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IChudW1wcmludGVkICsgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMSkgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMikgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bXByaW50ZWQgPj0gMCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsICIlcCIsIHZhX2FyZyhjb3VudCwgdm9pZCopKTsKLSAgICAgICAgICAgICAgICAvKiAlcCBpcyBpbGwtZGVmaW5lZDogIGVuc3VyZSBsZWFkaW5nIDB4LiAqLwotICAgICAgICAgICAgICAgIGlmIChudW1iZXJyZXN1bHRbMV0gPT0gJ1gnKQotICAgICAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHRbMV0gPSAneCc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobnVtYmVycmVzdWx0WzFdICE9ICd4JykgewotICAgICAgICAgICAgICAgICAgICBtZW1tb3ZlKG51bWJlcnJlc3VsdCArIDIsIG51bWJlcnJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4obnVtYmVycmVzdWx0KSArIDEpOwotICAgICAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHRbMF0gPSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdFsxXSA9ICd4JzsKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuICs9IG51bXByaW50ZWQ7Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IChudW1wcmludGVkICsgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMSkgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMikgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bXByaW50ZWQgPj0gMCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBVVEYtOCAqLwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMgPSB2YV9hcmcoY291bnQsIGNvbnN0IGNoYXIqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyID0gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzLCBzdHJsZW4ocyksICJyZXBsYWNlIiwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHIpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAvKiBzaW5jZSBQeVVuaWNvZGVfRGVjb2RlVVRGOCByZXR1cm5zIGFscmVhZHkgZmxleGlibGUKLSAgICAgICAgICAgICAgICAgICB1bmljb2RlIG9iamVjdHMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCByZWFkeSBvbiB0aGVtICovCi0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBzdHIgYW5kIHN3aXRjaCB0byB0aGUgbmV4dCBzbG90ICovCi0gICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IHN0cjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1UnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmogJiYgX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKG9iaik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdWJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgPSB2YV9hcmcoY291bnQsIGNvbnN0IGNoYXIgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0cl9vYmo7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaiB8fCBzdHIpOwotICAgICAgICAgICAgICAgIGFzc2VydCghb2JqIHx8IF9QeVVuaWNvZGVfQ0hFQ0sob2JqKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUob2JqKTsKLSAgICAgICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cl9vYmogPSBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHN0ciwgc3RybGVuKHN0ciksICJyZXBsYWNlIiwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RyX29iaikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHJfb2JqKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cl9vYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyX29iaik7Ci0gICAgICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyX29iaik7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBzdHJfb2JqOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaik7Ci0gICAgICAgICAgICAgICAgc3RyID0gUHlPYmplY3RfU3RyKG9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHIpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBzdHIgYW5kIHN3aXRjaCB0byB0aGUgbmV4dCBzbG90ICovCi0gICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IHN0cjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1InOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXByOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmopOwotICAgICAgICAgICAgICAgIHJlcHIgPSBQeU9iamVjdF9SZXByKG9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXByKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXByKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVwcik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShyZXByKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwcik7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHJlcHIgYW5kIHN3aXRjaCB0byB0aGUgbmV4dCBzbG90ICovCi0gICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IHJlcHI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXNjaWk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaik7Ci0gICAgICAgICAgICAgICAgYXNjaWkgPSBQeU9iamVjdF9BU0NJSShvYmopOwotICAgICAgICAgICAgICAgIGlmICghYXNjaWkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGFzY2lpKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXNjaWkpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoYXNjaWkpOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChhc2NpaSk7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHJlcHIgYW5kIHN3aXRjaCB0byB0aGUgbmV4dCBzbG90ICovCi0gICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IGFzY2lpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAvKiBpZiB3ZSBzdHVtYmxlIHVwb24gYW4gdW5rbm93bgotICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmcgY29kZSwgY29weSB0aGUgcmVzdCBvZgotICAgICAgICAgICAgICAgICAgIHRoZSBmb3JtYXQgc3RyaW5nIHRvIHRoZSBvdXRwdXQKLSAgICAgICAgICAgICAgICAgICBzdHJpbmcuICh3ZSBjYW5ub3QganVzdCBza2lwIHRoZQotICAgICAgICAgICAgICAgICAgIGNvZGUsIHNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cKLSAgICAgICAgICAgICAgICAgICB3aGF0J3MgaW4gdGhlIGFyZ3VtZW50IGxpc3QpICovCi0gICAgICAgICAgICAgICAgbiArPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICAgICAgZ290byBleHBhbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbisrOwotICAgIH0KLSAgZXhwYW5kOgotICAgIC8qIHN0ZXAgNDogZmlsbCB0aGUgYnVmZmVyICovCi0gICAgLyogU2luY2Ugd2UndmUgYW5hbHl6ZWQgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZCwKLSAgICAgICB3ZSBkb24ndCBoYXZlIHRvIHJlc2l6ZSB0aGUgc3RyaW5nLgotICAgICAgIFRoZXJlIGNhbiBiZSBubyBlcnJvcnMgYmV5b25kIHRoaXMgcG9pbnQuICovCi0gICAgc3RyaW5nID0gUHlVbmljb2RlX05ldyhuLCBtYXhjaGFyKTsKLSAgICBpZiAoIXN0cmluZykKLSAgICAgICAgZ290byBmYWlsOwotICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzdHJpbmcpOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzdHJpbmcpOwotICAgIGNhbGxyZXN1bHQgPSBjYWxscmVzdWx0czsKLSAgICBudW1iZXJyZXN1bHQgPSBudW1iZXJyZXN1bHRzOwotCi0gICAgZm9yIChpID0gMCwgZiA9IGZvcm1hdDsgKmY7IGYrKykgewotICAgICAgICBpZiAoKmYgPT0gJyUnKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBwOwotCi0gICAgICAgICAgICBwID0gZjsKLSAgICAgICAgICAgIGYgPSBwYXJzZV9mb3JtYXRfZmxhZ3MoZiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICAvKiBjaGVja2luZyBmb3IgPT0gYmVjYXVzZSB0aGUgbGFzdCBhcmd1bWVudCBjb3VsZCBiZSBhIGVtcHR5Ci0gICAgICAgICAgICAgICBzdHJpbmcsIHdoaWNoIGNhdXNlcyBpIHRvIHBvaW50IHRvIGVuZCwgdGhlIGFzc2VydCBhdCB0aGUgZW5kIG9mCi0gICAgICAgICAgICAgICB0aGUgbG9vcCAqLwotICAgICAgICAgICAgYXNzZXJ0KGkgPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoKmYpIHsKLSAgICAgICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IGludCBvcmRpbmFsID0gdmFfYXJnKHZhcmdzLCBpbnQpOwotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBpKyssIG9yZGluYWwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICAgICAgICAgICAgICAvKiB1bnVzZWQsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgaWYgKCpmID09ICdwJykKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgdm9pZCAqKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcodmFyZ3MsIGludCk7Ci0gICAgICAgICAgICAgICAgLyogZXh0cmFjdCB0aGUgcmVzdWx0IGZyb20gbnVtYmVycmVzdWx0cyBhbmQgYXBwZW5kLiAqLwotICAgICAgICAgICAgICAgIGxlbiA9IHN0cmxlbihudW1iZXJyZXN1bHQpOwotICAgICAgICAgICAgICAgIHVuaWNvZGVfd3JpdGVfY3N0cihzdHJpbmcsIGksIG51bWJlcnJlc3VsdCwgbGVuKTsKLSAgICAgICAgICAgICAgICAvKiBza2lwIG92ZXIgdGhlIHNlcGFyYXRpbmcgJ1wwJyAqLwotICAgICAgICAgICAgICAgIGkgKz0gbGVuOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSBsZW47Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCpudW1iZXJyZXN1bHQgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0Kys7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiB1bnVzZWQsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplOwotICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcodmFyZ3MsIGNoYXIgKik7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoKmNhbGxyZXN1bHQpIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgKmNhbGxyZXN1bHQsIDAsIHNpemUpOwotICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICAvKiBXZSdyZSBkb25lIHdpdGggdGhlIHVuaWNvZGUoKS9yZXByKCkgPT4gZm9yZ2V0IGl0ICovCi0gICAgICAgICAgICAgICAgUHlfREVDUkVGKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggdG8gbmV4dCB1bmljb2RlKCkvcmVwcigpIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgICsrY2FsbHJlc3VsdDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1UnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcodmFyZ3MsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQob2JqKSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksIG9iaiwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVic6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcodmFyZ3MsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIHZhX2FyZyh2YXJncywgY29uc3QgY2hhciAqKTsKLSAgICAgICAgICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQob2JqKSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCBvYmosIDAsIHNpemUpOwotICAgICAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKCpjYWxscmVzdWx0KSA8PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgKmNhbGxyZXN1bHQsIDAsIHNpemUpOwotICAgICAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrY2FsbHJlc3VsdDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgY2FzZSAnUic6Ci0gICAgICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgLyogdW51c2VkLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcodmFyZ3MsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORCgqY2FsbHJlc3VsdCkgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCAqY2FsbHJlc3VsdCwgMCwgIHNpemUpOwotICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICAvKiBXZSdyZSBkb25lIHdpdGggdGhlIHVuaWNvZGUoKS9yZXByKCkgPT4gZm9yZ2V0IGl0ICovCi0gICAgICAgICAgICAgICAgUHlfREVDUkVGKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggdG8gbmV4dCB1bmljb2RlKCkvcmVwcigpIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgICsrY2FsbHJlc3VsdDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBpKyssICclJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuID0gc3RybGVuKHApOwotICAgICAgICAgICAgICAgIHVuaWNvZGVfd3JpdGVfY3N0cihzdHJpbmcsIGksIHAsIGxlbik7Ci0gICAgICAgICAgICAgICAgaSArPSBsZW47Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGkgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmID0gdW5pY29kZV9mcm9tZm9ybWF0X2FyZygmd3JpdGVyLCBmLCAmdmFyZ3MyKTsKKyAgICAgICAgICAgIGlmIChmID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXNzZXJ0KGkgPCBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBpKyssICpmKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBhc3NlcnQoaSA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnA7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICBlbmQ6Ci0gICAgaWYgKGNhbGxyZXN1bHRzKQotICAgICAgICBQeU9iamVjdF9GcmVlKGNhbGxyZXN1bHRzKTsKLSAgICBpZiAobnVtYmVycmVzdWx0cykKLSAgICAgICAgUHlPYmplY3RfRnJlZShudW1iZXJyZXN1bHRzKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQoc3RyaW5nKTsKLSAgZmFpbDoKLSAgICBpZiAoY2FsbHJlc3VsdHMpIHsKLSAgICAgICAgUHlPYmplY3QgKipjYWxscmVzdWx0MiA9IGNhbGxyZXN1bHRzOwotICAgICAgICB3aGlsZSAoY2FsbHJlc3VsdDIgPCBjYWxscmVzdWx0KSB7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKCpjYWxscmVzdWx0Mik7Ci0gICAgICAgICAgICArK2NhbGxyZXN1bHQyOworICAgICAgICAgICAgcCA9IGY7CisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQgY2hhcikqcCA+IDEyNykgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSBleHBlY3RzIGFuIEFTQ0lJLWVuY29kZWQgZm9ybWF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcsIGdvdCBhIG5vbi1BU0NJSSBieXRlOiAweCUwMngiLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpKnApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJyUnKTsKKyAgICAgICAgICAgIGxlbiA9IHAgLSBmOworCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1wwJykKKyAgICAgICAgICAgICAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgbGVuLCAxMjcpID09IC0xKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIHVuaWNvZGVfd3JpdGVfY3N0cih3cml0ZXIuYnVmZmVyLCB3cml0ZXIucG9zLCBmLCBsZW4pOworICAgICAgICAgICAgd3JpdGVyLnBvcyArPSBsZW47CisKKyAgICAgICAgICAgIGYgPSBwOwogICAgICAgICB9Ci0gICAgICAgIFB5T2JqZWN0X0ZyZWUoY2FsbHJlc3VsdHMpOwogICAgIH0KLSAgICBpZiAobnVtYmVycmVzdWx0cykKLSAgICAgICAgUHlPYmplY3RfRnJlZShudW1iZXJyZXN1bHRzKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CisKKyAgZmFpbDoKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI5NjgsNiArMjg3OCw5IEBACiBQeVVuaWNvZGVfRnJvbU9yZGluYWwoaW50IG9yZGluYWwpCiB7CiAgICAgUHlPYmplY3QgKnY7CisgICAgdm9pZCAqZGF0YTsKKyAgICBpbnQga2luZDsKKwogICAgIGlmIChvcmRpbmFsIDwgMCB8fCBvcmRpbmFsID4gTUFYX1VOSUNPREUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2hyKCkgYXJnIG5vdCBpbiByYW5nZSgweDExMDAwMCkiKTsKQEAgLTI5ODAsMTMgKzI4OTMsMTUgQEAKICAgICB2ID0gUHlVbmljb2RlX05ldygxLCBvcmRpbmFsKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQodiksIFB5VW5pY29kZV9EQVRBKHYpLCAwLCBvcmRpbmFsKTsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodik7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHYpOworICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCAwLCBvcmRpbmFsKTsKICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHYsIDEpKTsKICAgICByZXR1cm4gdjsKIH0KIAogUHlPYmplY3QgKgotUHlVbmljb2RlX0Zyb21PYmplY3QocmVnaXN0ZXIgUHlPYmplY3QgKm9iaikKK1B5VW5pY29kZV9Gcm9tT2JqZWN0KFB5T2JqZWN0ICpvYmopCiB7CiAgICAgLyogWFhYIFBlcmhhcHMgd2Ugc2hvdWxkIG1ha2UgdGhpcyBBUEkgYW4gYWxpYXMgb2YKICAgICAgICBQeU9iamVjdF9TdHIoKSBpbnN0ZWFkID8hICovCkBAIC0zMDA4LDcgKzI5MjMsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QocmVnaXN0ZXIgUHlPYmplY3QgKm9iaiwKK1B5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChQeU9iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKQEAgLTMwNjAsOCArMjk3NSw4IEBACiAgICAxIG9uIHN1Y2Nlc3MuICovCiBpbnQKIF9QeV9ub3JtYWxpemVfZW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgY2hhciAqbG93ZXIsCi0gICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvd2VyX2xlbikKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3dlcl9sZW4pCiB7CiAgICAgY29uc3QgY2hhciAqZTsKICAgICBjaGFyICpsOwpAQCAtMzEwOSw3ICszMDI0LDggQEAKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHMsIHNpemUsIGVycm9ycywgTlVMTCk7CiAgICAgICAgIGVsc2UgaWYgKChzdHJjbXAobG93ZXIsICJsYXRpbi0xIikgPT0gMCkgfHwKICAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImxhdGluMSIpID09IDApIHx8Ci0gICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc28tODg1OS0xIikgPT0gMCkpCisgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc28tODg1OS0xIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzbzg4NTktMSIpID09IDApKQogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEocywgc2l6ZSwgZXJyb3JzKTsKICNpZmRlZiBIQVZFX01CQ1MKICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGxvd2VyLCAibWJjcyIpID09IDApCkBAIC0zMzQzLDcgKzMyNTksNyBAQAogICAgIH0KIAogICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpIHsKLSAgICAgICAgLyogbG9jYWxlIGVuY29kaW5nIHdpdGggc3Vycm9nYXRlZXNjYXBlICovCisgICAgICAgIC8qICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIgKi8KICAgICAgICAgY2hhciAqc3RyOwogCiAgICAgICAgIHN0ciA9IF9QeV93Y2hhcjJjaGFyKHdzdHIsICZlcnJvcl9wb3MpOwpAQCAtMzM2Myw2ICszMjc5LDcgQEAKICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RyaWN0IG1vZGUgKi8KICAgICAgICAgc2l6ZV90IGxlbiwgbGVuMjsKIAogICAgICAgICBsZW4gPSB3Y3N0b21icyhOVUxMLCB3c3RyLCAwKTsKQEAgLTM0MDEsNyArMzMxOCw3IEBACiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihlcnJtc2csICZlcnJsZW4pOwogICAgICAgICBpZiAod3N0ciAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZWFzb24gPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIGVycmxlbik7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3c3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlcnJtc2cgPSBOVUxMOwogICAgIH0KQEAgLTM0NzksNyArMzM5Niw4IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKHN0cmNtcChsb3dlciwgImxhdGluLTEiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAibGF0aW4xIikgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvODg1OS0xIikgPT0gMCkpCiAgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc0xhdGluMVN0cmluZyh1bmljb2RlLCBlcnJvcnMpOwogI2lmZGVmIEhBVkVfTUJDUwogICAgICAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJtYmNzIikgPT0gMCkKQEAgLTM2MDgsOCArMzUyNiw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpCi0gICAgeworICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpIHsKKyAgICAgICAgLyogInN1cnJvZ2F0ZWVzY2FwZSIgZXJyb3IgaGFuZGxlciAqLwogICAgICAgICB3c3RyID0gX1B5X2NoYXIyd2NoYXIoc3RyLCAmd2xlbik7CiAgICAgICAgIGlmICh3c3RyID09IE5VTEwpIHsKICAgICAgICAgICAgIGlmICh3bGVuID09IChzaXplX3QpLTEpCkBAIC0zNjIwLDkgKzM1MzgsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIHdsZW4pOwotICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdzdHIpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RyaWN0IG1vZGUgKi8KICNpZm5kZWYgSEFWRV9CUk9LRU5fTUJTVE9XQ1MKICAgICAgICAgd2xlbiA9IG1ic3Rvd2NzKE5VTEwsIHN0ciwgMCk7CiAjZWxzZQpAQCAtMzY0Miw3ICszNTYxLDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8qIFRoaXMgc2hvdWxkbid0IGZhaWwgbm93ICovCiAgICAgICAgIHdsZW4yID0gbWJzdG93Y3Mod3N0ciwgc3RyLCB3bGVuKzEpOwogICAgICAgICBpZiAod2xlbjIgPT0gKHNpemVfdCktMSkgewogICAgICAgICAgICAgaWYgKHdzdHIgIT0gc21hbGxidWYpCkBAIC0zNjY4LDcgKzM1ODYsNyBAQAogICAgICAgICB3c3RyID0gX1B5X2NoYXIyd2NoYXIoZXJybXNnLCAmZXJybGVuKTsKICAgICAgICAgaWYgKHdzdHIgIT0gTlVMTCkgewogICAgICAgICAgICAgcmVhc29uID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3c3RyLCBlcnJsZW4pOwotICAgICAgICAgICAgUHlNZW1fRnJlZSh3c3RyKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZXJybXNnID0gTlVMTDsKICAgICB9CkBAIC0zNzM2LDE4ICszNjU0LDIwIEBACiAKIAogaW50Ci1fUHlVbmljb2RlX0hhc05VTENoYXJzKFB5T2JqZWN0KiBzKQorX1B5VW5pY29kZV9IYXNOVUxDaGFycyhQeU9iamVjdCogc3RyKQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqbnVsID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHBvczsKIAotICAgIGlmIChudWwgPT0gTlVMTCkKLSAgICAgICAgbnVsID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJcMCIsIDEpOwotICAgIGlmIChudWwgPT0gTlVMTCkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gUHlVbmljb2RlX0NvbnRhaW5zKHMsIG51bCk7CisgICAgcG9zID0gZmluZGNoYXIoUHlVbmljb2RlX0RBVEEoc3RyKSwgUHlVbmljb2RlX0tJTkQoc3RyKSwKKyAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpLCAnXDAnLCAxKTsKKyAgICBpZiAocG9zID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOwogfQogCi0KIGludAogUHlVbmljb2RlX0ZTQ29udmVydGVyKFB5T2JqZWN0KiBhcmcsIHZvaWQqIGFkZHIpCiB7CkBAIC0zODUxLDYgKzM3NzEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IFB5T2JqZWN0X01BTExPQyhQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKSArIDEpOwogICAgICAgICBpZiAoX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTQwMTksNiArMzk0MCw5IEBACiBQeV9VQ1M0CiBQeVVuaWNvZGVfUmVhZENoYXIoUHlPYmplY3QgKnVuaWNvZGUsIFB5X3NzaXplX3QgaW5kZXgpCiB7CisgICAgdm9pZCAqZGF0YTsKKyAgICBpbnQga2luZDsKKwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHVuaWNvZGUpIHx8IFB5VW5pY29kZV9SRUFEWSh1bmljb2RlKSA9PSAtMSkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwogICAgICAgICByZXR1cm4gKFB5X1VDUzQpLTE7CkBAIC00MDI3LDcgKzM5NTEsOSBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInN0cmluZyBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIChQeV9VQ1M0KS0xOwogICAgIH0KLSAgICByZXR1cm4gUHlVbmljb2RlX1JFQURfQ0hBUih1bmljb2RlLCBpbmRleCk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5kZXgpOwogfQogCiBpbnQKQEAgLTQwODYsNiArNDAxMiw3IEBACiAgICAgKmV4Y2VwdGlvbk9iamVjdCA9IE5VTEw7CiB9CiAKKyNpZmRlZiBIQVZFX01CQ1MKIC8qIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGhlbHBlcjoKICAgIGJ1aWxkIGFyZ3VtZW50cywgY2FsbCB0aGUgY2FsbGJhY2sgYW5kIGNoZWNrIHRoZSBhcmd1bWVudHMsCiAgICBpZiBubyBleGNlcHRpb24gb2NjdXJyZWQsIGNvcHkgdGhlIHJlcGxhY2VtZW50IHRvIHRoZSBvdXRwdXQKQEAgLTQwOTQsMTEgKzQwMjEsMTIgQEAKICovCiAKIHN0YXRpYyBpbnQKLXVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqcmVhc29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKmlucHV0LCBjb25zdCBjaGFyICoqaW5lbmQsIFB5X3NzaXplX3QgKnN0YXJ0aW5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqb3V0cHV0LCBQeV9zc2l6ZV90ICpvdXRwb3MpCit1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93Y2hhcigKKyAgICBjb25zdCBjaGFyICplcnJvcnMsIFB5T2JqZWN0ICoqZXJyb3JIYW5kbGVyLAorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpyZWFzb24sCisgICAgY29uc3QgY2hhciAqKmlucHV0LCBjb25zdCBjaGFyICoqaW5lbmQsIFB5X3NzaXplX3QgKnN0YXJ0aW5wb3MsCisgICAgUHlfc3NpemVfdCAqZW5kaW5wb3MsIFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LCBjb25zdCBjaGFyICoqaW5wdHIsCisgICAgUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcykKIHsKICAgICBzdGF0aWMgY2hhciAqYXJncGFyc2UgPSAiTyFuO2RlY29kaW5nIGVycm9yIGhhbmRsZXIgbXVzdCByZXR1cm4gKHN0ciwgaW50KSB0dXBsZSI7CiAKQEAgLTQxMDksMTIgKzQwMzcsMTEgQEAKICAgICBQeV9zc2l6ZV90IHJlcXVpcmVkc2l6ZTsKICAgICBQeV9zc2l6ZV90IG5ld3BvczsKICAgICBQeU9iamVjdCAqaW5wdXRvYmogPSBOVUxMOwotICAgIGludCByZXMgPSAtMTsKKyAgICB3Y2hhcl90ICpyZXB3c3RyOworICAgIFB5X3NzaXplX3QgcmVwd2xlbjsKIAotICAgIGlmIChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgIT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpCi0gICAgICAgIG91dHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqb3V0cHV0KTsKLSAgICBlbHNlCi0gICAgICAgIG91dHNpemUgPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKCpvdXRwdXQpOworICAgIGFzc2VydCAoX1B5VW5pY29kZV9LSU5EKCpvdXRwdXQpID09IFB5VW5pY29kZV9XQ0hBUl9LSU5EKTsKKyAgICBvdXRzaXplID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCgqb3V0cHV0KTsKIAogICAgIGlmICgqZXJyb3JIYW5kbGVyID09IE5VTEwpIHsKICAgICAgICAgKmVycm9ySGFuZGxlciA9IFB5Q29kZWNfTG9va3VwRXJyb3IoZXJyb3JzKTsKQEAgLTQxMzksNyArNDA2Niw5OCBAQAogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUocmVzdHVwbGUsIGFyZ3BhcnNlLCAmUHlVbmljb2RlX1R5cGUsICZyZXB1bmljb2RlLCAmbmV3cG9zKSkKICAgICAgICAgZ290byBvbkVycm9yOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwdW5pY29kZSkgPT0gLTEpCisKKyAgICAvKiBDb3B5IGJhY2sgdGhlIGJ5dGVzIHZhcmlhYmxlcywgd2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRoZQorICAgICAgIGNhbGxiYWNrICovCisgICAgaW5wdXRvYmogPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QoKmV4Y2VwdGlvbk9iamVjdCk7CisgICAgaWYgKCFpbnB1dG9iaikKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIGlmICghUHlCeXRlc19DaGVjayhpbnB1dG9iaikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImV4Y2VwdGlvbiBhdHRyaWJ1dGUgb2JqZWN0IG11c3QgYmUgYnl0ZXMiKTsKKyAgICB9CisgICAgKmlucHV0ID0gUHlCeXRlc19BU19TVFJJTkcoaW5wdXRvYmopOworICAgIGluc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoaW5wdXRvYmopOworICAgICppbmVuZCA9ICppbnB1dCArIGluc2l6ZTsKKyAgICAvKiB3ZSBjYW4gREVDUkVGIHNhZmVseSwgYXMgdGhlIGV4Y2VwdGlvbiBoYXMgYW5vdGhlciByZWZlcmVuY2UsCisgICAgICAgc28gdGhlIG9iamVjdCB3b24ndCBnbyBhd2F5LiAqLworICAgIFB5X0RFQ1JFRihpbnB1dG9iaik7CisKKyAgICBpZiAobmV3cG9zPDApCisgICAgICAgIG5ld3BvcyA9IGluc2l6ZStuZXdwb3M7CisgICAgaWYgKG5ld3BvczwwIHx8IG5ld3Bvcz5pbnNpemUpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsICJwb3NpdGlvbiAlemQgZnJvbSBlcnJvciBoYW5kbGVyIG91dCBvZiBib3VuZHMiLCBuZXdwb3MpOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorCisgICAgcmVwd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHJlcHVuaWNvZGUsICZyZXB3bGVuKTsKKyAgICBpZiAocmVwd3N0ciA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCisgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKKyAgICAgICBhdCB0aGUgbmV3IGlucHV0IHBvc2l0aW9uKSwgc28gd2Ugd29uJ3QgaGF2ZSB0byBjaGVjayBzcGFjZQorICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLworICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3MgKyByZXB3bGVuICsgaW5zaXplLW5ld3BvczsKKyAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgeworICAgICAgICBpZiAocmVxdWlyZWRzaXplIDwgMipvdXRzaXplKQorICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOworICAgICAgICBpZiAodW5pY29kZV9yZXNpemUob3V0cHV0LCByZXF1aXJlZHNpemUpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgd2NzbmNweShfUHlVbmljb2RlX1dTVFIoKm91dHB1dCkgKyAqb3V0cG9zLCByZXB3c3RyLCByZXB3bGVuKTsKKyAgICAqb3V0cG9zICs9IHJlcHdsZW47CisKKyAgICAqZW5kaW5wb3MgPSBuZXdwb3M7CisgICAgKmlucHRyID0gKmlucHV0ICsgbmV3cG9zOworCisgICAgLyogd2UgbWFkZSBpdCEgKi8KKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gMDsKKworICBvbkVycm9yOgorICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOworICAgIHJldHVybiAtMTsKK30KKyNlbmRpZiAgIC8qIEhBVkVfTUJDUyAqLworCitzdGF0aWMgaW50Cit1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCisgICAgY29uc3QgY2hhciAqZXJyb3JzLCBQeU9iamVjdCAqKmVycm9ySGFuZGxlciwKKyAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqcmVhc29uLAorICAgIGNvbnN0IGNoYXIgKippbnB1dCwgY29uc3QgY2hhciAqKmluZW5kLCBQeV9zc2l6ZV90ICpzdGFydGlucG9zLAorICAgIFB5X3NzaXplX3QgKmVuZGlucG9zLCBQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwgY29uc3QgY2hhciAqKmlucHRyLAorICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciAvKiBQeU9iamVjdCAqKm91dHB1dCwgUHlfc3NpemVfdCAqb3V0cG9zICovKQoreworICAgIHN0YXRpYyBjaGFyICphcmdwYXJzZSA9ICJPIW47ZGVjb2RpbmcgZXJyb3IgaGFuZGxlciBtdXN0IHJldHVybiAoc3RyLCBpbnQpIHR1cGxlIjsKKworICAgIFB5T2JqZWN0ICpyZXN0dXBsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcHVuaWNvZGUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgaW5zaXplOworICAgIFB5X3NzaXplX3QgbmV3cG9zOworICAgIFB5X3NzaXplX3QgcmVwbGVuOworICAgIFB5T2JqZWN0ICppbnB1dG9iaiA9IE5VTEw7CisKKyAgICBpZiAoKmVycm9ySGFuZGxlciA9PSBOVUxMKSB7CisgICAgICAgICplcnJvckhhbmRsZXIgPSBQeUNvZGVjX0xvb2t1cEVycm9yKGVycm9ycyk7CisgICAgICAgIGlmICgqZXJyb3JIYW5kbGVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorCisgICAgbWFrZV9kZWNvZGVfZXhjZXB0aW9uKGV4Y2VwdGlvbk9iamVjdCwKKyAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICppbnB1dCwgKmluZW5kIC0gKmlucHV0LAorICAgICAgICAqc3RhcnRpbnBvcywgKmVuZGlucG9zLAorICAgICAgICByZWFzb24pOworICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ID09IE5VTEwpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKworICAgIHJlc3R1cGxlID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncygqZXJyb3JIYW5kbGVyLCAqZXhjZXB0aW9uT2JqZWN0LCBOVUxMKTsKKyAgICBpZiAocmVzdHVwbGUgPT0gTlVMTCkKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIGlmICghUHlUdXBsZV9DaGVjayhyZXN0dXBsZSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgJmFyZ3BhcnNlWzRdKTsKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUocmVzdHVwbGUsIGFyZ3BhcnNlLCAmUHlVbmljb2RlX1R5cGUsICZyZXB1bmljb2RlLCAmbmV3cG9zKSkKICAgICAgICAgZ290byBvbkVycm9yOwogCiAgICAgLyogQ29weSBiYWNrIHRoZSBieXRlcyB2YXJpYWJsZXMsIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZCBieSB0aGUKQEAgLTQxNjQsNTQgKzQxODIsMjUgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgIT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpIHsKLSAgICAgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCi0gICAgICAgICAgIGhhdmUrdGhlIHJlcGxhY2VtZW50K3RoZSByZXN0IG9mIHRoZSBzdHJpbmcgKHN0YXJ0aW5nCi0gICAgICAgICAgIGF0IHRoZSBuZXcgaW5wdXQgcG9zaXRpb24pLCBzbyB3ZSB3b24ndCBoYXZlIHRvIGNoZWNrIHNwYWNlCi0gICAgICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLwotICAgICAgICBQeV9zc2l6ZV90IHJlcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcHVuaWNvZGUpOwotICAgICAgICByZXF1aXJlZHNpemUgPSAqb3V0cG9zICsgcmVwbGVuICsgaW5zaXplLW5ld3BvczsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IG91dHNpemUpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlZHNpemU8MipvdXRzaXplKQotICAgICAgICAgICAgICAgIHJlcXVpcmVkc2l6ZSA9IDIqb3V0c2l6ZTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShvdXRwdXQsIHJlcXVpcmVkc2l6ZSkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAodW5pY29kZV93aWRlbihvdXRwdXQsICpvdXRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShyZXB1bmljb2RlKSkgPCAwKQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycygqb3V0cHV0LCAqb3V0cG9zLCByZXB1bmljb2RlLCAwLCByZXBsZW4pOwotICAgICAgICAqb3V0cG9zICs9IHJlcGxlbjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdjaGFyX3QgKnJlcHdzdHI7Ci0gICAgICAgIFB5X3NzaXplX3QgcmVwd2xlbjsKLSAgICAgICAgcmVwd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHJlcHVuaWNvZGUsICZyZXB3bGVuKTsKLSAgICAgICAgaWYgKHJlcHdzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCi0gICAgICAgICAgIGhhdmUrdGhlIHJlcGxhY2VtZW50K3RoZSByZXN0IG9mIHRoZSBzdHJpbmcgKHN0YXJ0aW5nCi0gICAgICAgICAgIGF0IHRoZSBuZXcgaW5wdXQgcG9zaXRpb24pLCBzbyB3ZSB3b24ndCBoYXZlIHRvIGNoZWNrIHNwYWNlCi0gICAgICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLwotICAgICAgICByZXF1aXJlZHNpemUgPSAqb3V0cG9zICsgcmVwd2xlbiArIGluc2l6ZS1uZXdwb3M7Ci0gICAgICAgIGlmIChyZXF1aXJlZHNpemUgPiBvdXRzaXplKSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZWRzaXplIDwgMipvdXRzaXplKQotICAgICAgICAgICAgICAgIHJlcXVpcmVkc2l6ZSA9IDIqb3V0c2l6ZTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShvdXRwdXQsIHJlcXVpcmVkc2l6ZSkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgfQotICAgICAgICB3Y3NuY3B5KF9QeVVuaWNvZGVfV1NUUigqb3V0cHV0KSArICpvdXRwb3MsIHJlcHdzdHIsIHJlcHdsZW4pOwotICAgICAgICAqb3V0cG9zICs9IHJlcHdsZW47Ci0gICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwdW5pY29kZSkgPCAwKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgcmVwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwdW5pY29kZSk7CisgICAgd3JpdGVyLT5taW5fbGVuZ3RoICs9IHJlcGxlbjsKKyAgICBpZiAocmVwbGVuID4gMSkKKyAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAxOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgcmVwdW5pY29kZSkgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKwogICAgICplbmRpbnBvcyA9IG5ld3BvczsKICAgICAqaW5wdHIgPSAqaW5wdXQgKyBuZXdwb3M7CiAKICAgICAvKiB3ZSBtYWRlIGl0ISAqLwotICAgIHJlcyA9IDA7CisgICAgUHlfWERFQ1JFRihyZXN0dXBsZSk7CisgICAgcmV0dXJuIDA7CiAKICAgb25FcnJvcjoKICAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiAtMTsKIH0KIAogLyogLS0tIFVURi03IENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MzE5LDkgKzQzMDgsOCBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7CiAgICAgY29uc3QgY2hhciAqZTsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKICAgICBpbnQgaW5TaGlmdCA9IDA7CiAgICAgUHlfc3NpemVfdCBzaGlmdE91dFN0YXJ0OwpAQCAtNDMzMSwxNyArNDMxOSwxNyBAQAogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCi0gICAgLyogU3RhcnQgb2ZmIGFzc3VtaW5nIGl0J3MgYWxsIEFTQ0lJLiBXaWRlbiBsYXRlciBhcyBuZWNlc3NhcnkuICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplID09IDApIHsKICAgICAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAgICAgKmNvbnN1bWVkID0gMDsKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7CisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KIAotICAgIHNoaWZ0T3V0U3RhcnQgPSBvdXRwb3MgPSAwOworICAgIC8qIFN0YXJ0IG9mZiBhc3N1bWluZyBpdCdzIGFsbCBBU0NJSS4gV2lkZW4gbGF0ZXIgYXMgbmVjZXNzYXJ5LiAqLworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisKKyAgICBzaGlmdE91dFN0YXJ0ID0gMDsKICAgICBlID0gcyArIHNpemU7CiAKICAgICB3aGlsZSAocyA8IGUpIHsKQEAgLTQzNjQsMTMgKzQzNTIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4cGVjdGluZyBhIHNlY29uZCBzdXJyb2dhdGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUob3V0Q2gpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjaDIgPSBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUyhzdXJyb2dhdGUsIG91dENoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaDIpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gyKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgc3Vycm9nYXRlKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHN1cnJvZ2F0ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQzODAsNyArNDM2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSBvdXRDaDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIG91dENoKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgb3V0Q2gpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC00Mzg5LDcgKzQzNzcsNyBAQAogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAwOwogICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgICAgICBpZiAoc3Vycm9nYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIHN1cnJvZ2F0ZSkgPCAwKQorICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgc3Vycm9nYXRlKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQxMCw3ICs0Mzk4LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJy0nKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qICctJyBpcyBhYnNvcmJlZDsgb3RoZXIgdGVybWluYXRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyBhcmUgcHJlc2VydmVkICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ0MjAsMjAgKzQ0MDgsMjAgQEAKICAgICAgICAgICAgIHMrKzsgLyogY29uc3VtZSAnKycgKi8KICAgICAgICAgICAgIGlmIChzIDwgZSAmJiAqcyA9PSAnLScpIHsgLyogJystJyBlbmNvZGVzICcrJyAqLwogICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCAnKycpIDwgMCkKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgJysnKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgeyAvKiBiZWdpbiBiYXNlNjQtZW5jb2RlZCBzZWN0aW9uICovCiAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDE7Ci0gICAgICAgICAgICAgICAgc2hpZnRPdXRTdGFydCA9IG91dHBvczsKKyAgICAgICAgICAgICAgICBzaGlmdE91dFN0YXJ0ID0gd3JpdGVyLnBvczsKICAgICAgICAgICAgICAgICBiYXNlNjRiaXRzID0gMDsKICAgICAgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKERFQ09ERV9ESVJFQ1QoY2gpKSB7IC8qIGNoYXJhY3RlciBkZWNvZGVzIGFzIGl0c2VsZiAqLwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CkBAIC00NDQ0LDExICs0NDMyLDExIEBACiAgICAgICAgIGNvbnRpbnVlOwogdXRmN0Vycm9yOgogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGY3IiwgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCkBAIC00NDYwLDExICs0NDQ4LDExIEBACiAgICAgICAgICAgICAgICAgKGJhc2U2NGJpdHMgPj0gNikgfHwKICAgICAgICAgICAgICAgICAoYmFzZTY0Yml0cyA+IDAgJiYgYmFzZTY0YnVmZmVyICE9IDApKSB7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHNpemU7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJ1dGY3IiwgInVudGVybWluYXRlZCBzaGlmdCBzZXF1ZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBpZiAocyA8IGUpCiAgICAgICAgICAgICAgICAgZ290byByZXN0YXJ0OwpAQCAtNDQ3NCw3ICs0NDYyLDcgQEAKICAgICAvKiByZXR1cm4gc3RhdGUgKi8KICAgICBpZiAoY29uc3VtZWQpIHsKICAgICAgICAgaWYgKGluU2hpZnQpIHsKLSAgICAgICAgICAgIG91dHBvcyA9IHNoaWZ0T3V0U3RhcnQ7IC8qIGJhY2sgb2ZmIG91dHB1dCAqLworICAgICAgICAgICAgd3JpdGVyLnBvcyA9IHNoaWZ0T3V0U3RhcnQ7IC8qIGJhY2sgb2ZmIG91dHB1dCAqLwogICAgICAgICAgICAgKmNvbnN1bWVkID0gc3RhcnRpbnBvczsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTQ0ODIsMTcgKzQ0NzAsMTQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdW5pY29kZSwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHVuaWNvZGUpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDU3NSw3ICs0NTYwLDcgQEAKIAogICAgICAgICAgICAgLyogY29kZSBmaXJzdCBzdXJyb2dhdGUgKi8KICAgICAgICAgICAgIGJhc2U2NGJpdHMgKz0gMTY7Ci0gICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAoYmFzZTY0YnVmZmVyIDw8IDE2KSB8IDB4ZDgwMCB8ICgoY2gtMHgxMDAwMCkgPj4gMTApOworICAgICAgICAgICAgYmFzZTY0YnVmZmVyID0gKGJhc2U2NGJ1ZmZlciA8PCAxNikgfCBQeV9VTklDT0RFX0hJR0hfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgIHdoaWxlIChiYXNlNjRiaXRzID49IDYpIHsKICAgICAgICAgICAgICAgICAqb3V0KysgPSBUT19CQVNFNjQoYmFzZTY0YnVmZmVyID4+IChiYXNlNjRiaXRzLTYpKTsKICAgICAgICAgICAgICAgICBiYXNlNjRiaXRzIC09IDY7CkBAIC00Njc2LDkgKzQ2NjEsOSBAQAogICAgIGlmIChfUHlfSVNfQUxJR05FRChwLCBTSVpFT0ZfTE9ORykpIHsKICAgICAgICAgLyogRmFzdCBwYXRoLCBzZWUgaW4gU1RSSU5HTElCKHV0ZjhfZGVjb2RlKSBmb3IKICAgICAgICAgICAgYW4gZXhwbGFuYXRpb24uICovCi0gICAgICAgIC8qIEhlbHAgcmVnaXN0ZXIgYWxsb2NhdGlvbiAqLwotICAgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpfcCA9IHA7Ci0gICAgICAgIHJlZ2lzdGVyIFB5X1VDUzEgKiBxID0gZGVzdDsKKyAgICAgICAgLyogSGVscCBhbGxvY2F0aW9uICovCisgICAgICAgIGNvbnN0IGNoYXIgKl9wID0gcDsKKyAgICAgICAgUHlfVUNTMSAqIHEgPSBkZXN0OwogICAgICAgICB3aGlsZSAoX3AgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICooY29uc3QgdW5zaWduZWQgbG9uZyAqKSBfcDsKICAgICAgICAgICAgIGlmICh2YWx1ZSAmIEFTQ0lJX0NIQVJfTUFTSykKQEAgLTQ3MDEsOCArNDY4Niw4IEBACiAgICAgICAgIC8qIEZhc3QgcGF0aCwgc2VlIGluIFNUUklOR0xJQih1dGY4X2RlY29kZSkgaW4gc3RyaW5nbGliL2NvZGVjcy5oCiAgICAgICAgICAgIGZvciBhbiBleHBsYW5hdGlvbi4gKi8KICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHAsIFNJWkVPRl9MT05HKSkgewotICAgICAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpfcCA9IHA7CisgICAgICAgICAgICAvKiBIZWxwIGFsbG9jYXRpb24gKi8KKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9wID0gcDsKICAgICAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICoodW5zaWduZWQgbG9uZyAqKSBfcDsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBBU0NJSV9DSEFSX01BU0spCkBAIC00NzI3LDEwICs0NzEyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpjb25zdW1lZCkKIHsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIGNvbnN0IGNoYXIgKmVuZCA9IHMgKyBzaXplOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwogCiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7CkBAIC00NzUxLDI5ICs0NzM1LDI2IEBACiAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpc1swXSk7CiAgICAgfQogCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCB3cml0ZXIubWluX2xlbmd0aCwgMTI3KSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOwogCi0gICAgb3V0cG9zID0gYXNjaWlfZGVjb2RlKHMsIGVuZCwgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSkpOwotICAgIHMgKz0gb3V0cG9zOworICAgIHdyaXRlci5wb3MgPSBhc2NpaV9kZWNvZGUocywgZW5kLCB3cml0ZXIuZGF0YSk7CisgICAgcyArPSB3cml0ZXIucG9zOwogICAgIHdoaWxlIChzIDwgZW5kKSB7CiAgICAgICAgIFB5X1VDUzQgY2g7Ci0gICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CisgICAgICAgIGludCBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKQotICAgICAgICAgICAgICAgIGNoID0gYXNjaWlsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkod3JpdGVyLmJ1ZmZlcikpCisgICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNoID0gdWNzMWxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgICAgIGNoID0gdWNzMWxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgIGNoID0gdWNzMmxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMkJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICBjaCA9IHVjczJsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwgd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFzc2VydChraW5kID09IFB5VW5pY29kZV80QllURV9LSU5EKTsKLSAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICBjaCA9IHVjczRsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwgd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zKTsKICAgICAgICAgfQogCiAgICAgICAgIHN3aXRjaCAoY2gpIHsKQEAgLTQ3OTcsMzUgKzQ3NzgsMzEgQEAKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIGNoIC0gMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAidXRmLTgiLCBlcnJtc2csCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmVuZCwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAogRW5kOgotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdW5pY29kZSwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gcyAtIHN0YXJ0czsKIAogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7Ci0gICAgcmV0dXJuIHVuaWNvZGU7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiBvbkVycm9yOgogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgUHlfWERFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ4MzUsNyArNDgxMiw3IEBACiAgICB1c2VkIHRvIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBvbiBNYWMgT1MgWC4KIAogICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCB3aWRlIGNoYXJhY3RlciBzdHJpbmcgKHVzZQotICAgUHlNZW1fRnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSksIG9yIE5VTEwgb24gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuICovCisgICBQeU1lbV9SYXdGcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSwgb3IgTlVMTCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4gKi8KIAogd2NoYXJfdCoKIF9QeV9EZWNvZGVVVEY4X3N1cnJvZ2F0ZWVzY2FwZShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUpCkBAIC00ODQ4LDcgKzQ4MjUsNyBAQAogICAgICAgIGNoYXJhY3RlciBjb3VudCAqLwogICAgIGlmIChQWV9TU0laRV9UX01BWCAvIHNpemVvZih3Y2hhcl90KSA8IChzaXplICsgMSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHVuaWNvZGUgPSBQeU1lbV9NYWxsb2MoKHNpemUgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgdW5pY29kZSA9IFB5TWVtX1Jhd01hbGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoIXVuaWNvZGUpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC00OTcxLDE3ICs0OTQ4LDEwIEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZTsKLSAgICBpbnQgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KKyAgICBpbnQgbGUsIGJvID0gMDsgICAgICAgLyogYXNzdW1lIG5hdGl2ZSBvcmRlcmluZyBieSBkZWZhdWx0ICovCiAgICAgY29uc3QgY2hhciAqZXJybXNnID0gIiI7Ci0gICAgLyogT2Zmc2V0cyBmcm9tIHEgZm9yIHJldHJpZXZpbmcgYnl0ZXMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCi0gICAgaW50IGlvcmRlcltdID0gezAsIDEsIDIsIDN9OwotI2Vsc2UKLSAgICBpbnQgaW9yZGVyW10gPSB7MywgMiwgMSwgMH07Ci0jZW5kaWYKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKIApAQCAtNDk5NSwxMDcgKzQ5NjUsMTA2IEBACiAgICAgICAgYnl0ZSBvcmRlciBzZXR0aW5nIGFjY29yZGluZ2x5LiBJbiBuYXRpdmUgbW9kZSwgdGhlIGxlYWRpbmcgQk9NCiAgICAgICAgbWFyayBpcyBza2lwcGVkLCBpbiBhbGwgb3RoZXIgbW9kZXMsIGl0IGlzIGNvcGllZCB0byB0aGUgb3V0cHV0CiAgICAgICAgc3RyZWFtIGFzLWlzIChnaXZpbmcgYSBaV05CU1AgY2hhcmFjdGVyKS4gKi8KLSAgICBpZiAoYm8gPT0gMCkgewotICAgICAgICBpZiAoc2l6ZSA+PSA0KSB7Ci0gICAgICAgICAgICBjb25zdCBQeV9VQ1M0IGJvbSA9IChxW2lvcmRlclszXV0gPDwgMjQpIHwgKHFbaW9yZGVyWzJdXSA8PCAxNikgfAotICAgICAgICAgICAgICAgIChxW2lvcmRlclsxXV0gPDwgOCkgfCBxW2lvcmRlclswXV07Ci0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KLSAgICAgICAgICAgIGlmIChib20gPT0gMHgwMDAwRkVGRikgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYm9tID09IDB4RkZGRTAwMDApIHsKLSAgICAgICAgICAgICAgICBxICs9IDQ7Ci0gICAgICAgICAgICAgICAgYm8gPSAxOwotICAgICAgICAgICAgfQorICAgIGlmIChibyA9PSAwICYmIHNpemUgPj0gNCkgeworICAgICAgICBQeV9VQ1M0IGJvbSA9IChxWzNdIDw8IDI0KSB8IChxWzJdIDw8IDE2KSB8IChxWzFdIDw8IDgpIHwgcVswXTsKKyAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7CisgICAgICAgICAgICBibyA9IC0xOworICAgICAgICAgICAgcSArPSA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGJvbSA9PSAweEZGRkUwMDAwKSB7CisgICAgICAgICAgICBibyA9IDE7CisgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ5dGVvcmRlcikKKyAgICAgICAgICAgICpieXRlb3JkZXIgPSBibzsKKyAgICB9CisKKyAgICBpZiAocSA9PSBlKSB7CisgICAgICAgIGlmIChjb25zdW1lZCkKKyAgICAgICAgICAgICpjb25zdW1lZCA9IHNpemU7CisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOworICAgIH0KKworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgIGxlID0gYm8gPCAwOwogI2Vsc2UKLSAgICAgICAgICAgIGlmIChib20gPT0gMHgwMDAwRkVGRikgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChib20gPT0gMHhGRkZFMDAwMCkgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IC0xOwotICAgICAgICAgICAgfQorICAgIGxlID0gYm8gPD0gMDsKICNlbmRpZgorCisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gKGUgLSBxICsgMykgLyA0OworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFB5X1VDUzQgY2ggPSAwOworICAgICAgICBQeV9VQ1M0IG1heGNoID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHdyaXRlci5idWZmZXIpOworCisgICAgICAgIGlmIChlIC0gcSA+PSA0KSB7CisgICAgICAgICAgICBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQgPSB3cml0ZXIua2luZDsKKyAgICAgICAgICAgIHZvaWQgKmRhdGEgPSB3cml0ZXIuZGF0YTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhc3QgPSBlIC0gNDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgcG9zID0gd3JpdGVyLnBvczsKKyAgICAgICAgICAgIGlmIChsZSkgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAocVszXSA8PCAyNCkgfCAocVsyXSA8PCAxNikgfCAocVsxXSA8PCA4KSB8IHFbMF07CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+IG1heGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBwb3MrKywgY2gpOworICAgICAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocSA8PSBsYXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAocVswXSA8PCAyNCkgfCAocVsxXSA8PCAxNikgfCAocVsyXSA8PCA4KSB8IHFbM107CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+IG1heGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBwb3MrKywgY2gpOworICAgICAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocSA8PSBsYXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlci5wb3MgPSBwb3M7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAoYm8gPT0gLTEpIHsKLSAgICAgICAgLyogZm9yY2UgTEUgKi8KLSAgICAgICAgaW9yZGVyWzBdID0gMDsKLSAgICAgICAgaW9yZGVyWzFdID0gMTsKLSAgICAgICAgaW9yZGVyWzJdID0gMjsKLSAgICAgICAgaW9yZGVyWzNdID0gMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYm8gPT0gMSkgewotICAgICAgICAvKiBmb3JjZSBCRSAqLwotICAgICAgICBpb3JkZXJbMF0gPSAzOwotICAgICAgICBpb3JkZXJbMV0gPSAyOwotICAgICAgICBpb3JkZXJbMl0gPSAxOwotICAgICAgICBpb3JkZXJbM10gPSAwOwotICAgIH0KLQotICAgIC8qIFRoaXMgbWlnaHQgYmUgb25lIHRvIG11Y2gsIGJlY2F1c2Ugb2YgYSBCT00gKi8KLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldygoc2l6ZSszKS80LCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7Ci0gICAgb3V0cG9zID0gMDsKLQotICAgIHdoaWxlIChxIDwgZSkgewotICAgICAgICBQeV9VQ1M0IGNoOwotICAgICAgICAvKiByZW1haW5pbmcgYnl0ZXMgYXQgdGhlIGVuZD8gKHNpemUgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA0KSAqLwotICAgICAgICBpZiAoZS1xPDQpIHsKLSAgICAgICAgICAgIGlmIChjb25zdW1lZCkKKyAgICAgICAgaWYgKGNoIDw9IG1heGNoKSB7CisgICAgICAgICAgICBpZiAocSA9PSBlIHx8IGNvbnN1bWVkKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogcmVtYWluaW5nIGJ5dGVzIGF0IHRoZSBlbmQ/IChzaXplIHNob3VsZCBiZSBkaXZpc2libGUgYnkgNCkgKi8KICAgICAgICAgICAgIGVycm1zZyA9ICJ0cnVuY2F0ZWQgZGF0YSI7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSktc3RhcnRzOwotICAgICAgICAgICAgZW5kaW5wb3MgPSAoKGNvbnN0IGNoYXIgKillKS1zdGFydHM7Ci0gICAgICAgICAgICBnb3RvIHV0ZjMyRXJyb3I7Ci0gICAgICAgICAgICAvKiBUaGUgcmVtYWluaW5nIGlucHV0IGNoYXJzIGFyZSBpZ25vcmVkIGlmIHRoZSBjYWxsYmFjawotICAgICAgICAgICAgICAgY2hvb3NlcyB0byBza2lwIHRoZSBpbnB1dCAqLworICAgICAgICAgICAgc3RhcnRpbnBvcyA9ICgoY29uc3QgY2hhciAqKXEpIC0gc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSAoKGNvbnN0IGNoYXIgKillKSAtIHN0YXJ0czsKICAgICAgICAgfQotICAgICAgICBjaCA9IChxW2lvcmRlclszXV0gPDwgMjQpIHwgKHFbaW9yZGVyWzJdXSA8PCAxNikgfAotICAgICAgICAgICAgKHFbaW9yZGVyWzFdXSA8PCA4KSB8IHFbaW9yZGVyWzBdXTsKLQotICAgICAgICBpZiAoY2ggPj0gMHgxMTAwMDApCi0gICAgICAgIHsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoY2ggPCAweDExMDAwMCkgeworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICAgICAgcSArPSA0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJybXNnID0gImNvZGVwb2ludCBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIjsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKS1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrNDsKLSAgICAgICAgICAgIGdvdG8gdXRmMzJFcnJvcjsKKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgcSArPSA0OwotICAgICAgICBjb250aW51ZTsKLSAgICAgIHV0ZjMyRXJyb3I6Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKworICAgICAgICAvKiBUaGUgcmVtYWluaW5nIGlucHV0IGNoYXJzIGFyZSBpZ25vcmVkIGlmIHRoZSBjYWxsYmFjaworICAgICAgICAgICBjaG9vc2VzIHRvIHNraXAgdGhlIGlucHV0ICovCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGYzMiIsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAoY29uc3QgY2hhciAqKikmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgKGNvbnN0IGNoYXIgKiopJnEsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChieXRlb3JkZXIpCi0gICAgICAgICpieXRlb3JkZXIgPSBibzsKLQogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gKGNvbnN0IGNoYXIgKilxLXN0YXJ0czsKIAotICAgIC8qIEFkanVzdCBsZW5ndGggKi8KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01MTEzLDcgKzUwODIsNyBAQAogICAgIHVuc2lnbmVkIGNoYXIgKnA7CiAgICAgUHlfc3NpemVfdCBuc2l6ZSwgaTsKICAgICAvKiBPZmZzZXRzIGZyb20gcCBmb3Igc3RvcmluZyBieXRlIHBhaXJzIGluIHRoZSByaWdodCBvcmRlci4gKi8KLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICAgICBpbnQgaW9yZGVyW10gPSB7MCwgMSwgMiwgM307CiAjZWxzZQogICAgIGludCBpb3JkZXJbXSA9IHszLCAyLCAxLCAwfTsKQEAgLTUyMTYsOCArNTE4NSw3IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZTsKICAgICBpbnQgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nOwpAQCAtNTI1NSw3ICs1MjIzLDcgQEAKICAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgfQogCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAgICAgbmF0aXZlX29yZGVyaW5nID0gYm8gPD0gMDsKICNlbHNlCiAgICAgbmF0aXZlX29yZGVyaW5nID0gYm8gPj0gMDsKQEAgLTUyNjMsMzIgKzUyMzEsMzIgQEAKIAogICAgIC8qIE5vdGU6IHNpemUgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZyBVbmljb2RlCiAgICAgICAgY2hhcmFjdGVyIGNvdW50ICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoKGUgLSBxICsgMSkgLyAyLCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gKGUgLSBxICsgMSkgLyAyOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKIAotICAgIG91dHBvcyA9IDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgUHlfVUNTNCBjaCA9IDA7CiAgICAgICAgIGlmIChlIC0gcSA+PSAyKSB7Ci0gICAgICAgICAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgICAgICAgICAgaW50IGtpbmQgPSB3cml0ZXIua2luZDsKICAgICAgICAgICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHdyaXRlci5idWZmZXIpKQogICAgICAgICAgICAgICAgICAgICBjaCA9IGFzY2lpbGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMSopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaCA9IHVjczFsaWJfdXRmMTZfZGVjb2RlKCZxLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MxKil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29yZGVyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewogICAgICAgICAgICAgICAgIGNoID0gdWNzMmxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMkJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MyKil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7CiAgICAgICAgICAgICAgICAgY2ggPSB1Y3M0bGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV80QllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzQqKXdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUzMjQsMTIgKzUyOTIsMTIgQEAKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsCiAgICAgICAgICAgICAgICAgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAidXRmMTYiLCBlcnJtc2csCkBAIC01MzM5LDggKzUzMDcsNyBAQAogICAgICAgICAgICAgICAgICZlbmRpbnBvcywKICAgICAgICAgICAgICAgICAmZXhjLAogICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICoqKSZxLAotICAgICAgICAgICAgICAgICZ1bmljb2RlLAotICAgICAgICAgICAgICAgICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIApAQCAtNTM0OCwxNiArNTMxNSwxMiBAQAogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gKGNvbnN0IGNoYXIgKilxLXN0YXJ0czsKIAotICAgIC8qIEFkanVzdCBsZW5ndGggKi8KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01Mzc1LDcgKzUzMzgsNyBAQAogICAgIHVuc2lnbmVkIHNob3J0ICpvdXQ7CiAgICAgUHlfc3NpemVfdCBieXRlc2l6ZTsKICAgICBQeV9zc2l6ZV90IHBhaXJzOwotI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2lmIFBZX0JJR19FTkRJQU4KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nID0gYnl0ZW9yZGVyID49IDA7CiAjZWxzZQogICAgIGludCBuYXRpdmVfb3JkZXJpbmcgPSBieXRlb3JkZXIgPD0gMDsKQEAgLTU1MjMsMjcgKzU0ODYsMjYgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVuZDsKICAgICBjaGFyKiBtZXNzYWdlOwogICAgIFB5X1VDUzQgY2hyID0gMHhmZmZmZmZmZjsgLyogaW4gY2FzZSAnZ2V0Y29kZScgbWVzc2VzIHVwICovCiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgUHlfc3NpemVfdCBpOwogCiAgICAgbGVuID0gbGVuZ3RoX29mX2VzY2FwZWRfYXNjaWlfc3RyaW5nKHMsIHNpemUpOworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAKICAgICAvKiBBZnRlciBsZW5ndGhfb2ZfZXNjYXBlZF9hc2NpaV9zdHJpbmcoKSB0aGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlcywKICAgICAgICBlaXRoZXIgdGhlIHN0cmluZyBpcyBwdXJlIEFTQ0lJIHdpdGggbmFtZWQgZXNjYXBlcyBsaWtlIFxuLCBldGMuCiAgICAgICAgYW5kIHdlIGRldGVybWluZWQgaXQncyBleGFjdCBzaXplIChjb21tb24gY2FzZSkKICAgICAgICBvciBpdCBjb250YWlucyBceCwgXHUsIC4uLiBlc2NhcGUgc2VxdWVuY2VzLiAgdGhlbiB3ZSBjcmVhdGUgYQogICAgICAgIGxlZ2FjeSB3Y2hhciBzdHJpbmcgYW5kIHJlc2l6ZSBpdCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uICovCi0gICAgaWYgKGxlbiA+PSAwKSB7Ci0gICAgICAgIHYgPSBQeVVuaWNvZGVfTmV3KGxlbiwgMTI3KTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQodikgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICBpZiAobGVuID4gMCkgeworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IGxlbjsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIEVzY2FwZWQgc3RyaW5ncyB3aWxsIGFsd2F5cyBiZSBsb25nZXIgdGhhbiB0aGUgcmVzdWx0aW5nCkBAIC01NTUxLDE1ICs1NTEzLDExIEBACiAgICAgICAgICAgIGxlbmd0aCBhZnRlciBjb252ZXJzaW9uIHRvIHRoZSB0cnVlIHZhbHVlLgogICAgICAgICAgICAoYnV0IGlmIHRoZSBlcnJvciBjYWxsYmFjayByZXR1cm5zIGEgbG9uZyByZXBsYWNlbWVudCBzdHJpbmcKICAgICAgICAgICAgd2UnbGwgaGF2ZSB0byBhbGxvY2F0ZSBtb3JlIHNwYWNlKSAqLwotICAgICAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIGxlbiA9IHNpemU7CisgICAgICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKICAgICB9CiAKICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBpID0gMDsKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogICAgIGVuZCA9IHMgKyBzaXplOwogCiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKQEAgLTU1NjcsMTMgKzU1MjUsMTEgQEAKICAgICAgICAgUHlfVUNTNCB4OwogICAgICAgICBpbnQgZGlnaXRzOwogCi0gICAgICAgIC8qIFRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggaSA9PSBhc2NpaV9sZW5ndGggaXMgYSBiYWNrc2xhc2gKLSAgICAgICAgICAgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAqLwotICAgICAgICBhc3NlcnQoaSA8PSBsZW4pOwotCiAgICAgICAgIC8qIE5vbi1lc2NhcGUgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgVW5pY29kZSBvcmRpbmFscyAqLwogICAgICAgICBpZiAoKnMgIT0gJ1xcJykgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJmksICh1bnNpZ25lZCBjaGFyKSAqcysrKSA8IDApCisgICAgICAgICAgICB4ID0gKHVuc2lnbmVkIGNoYXIpKnM7CisgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC01NTg1LDE4ICs1NTQxLDE0IEBACiAgICAgICAgIGlmIChzID4gZW5kKQogICAgICAgICAgICAgYyA9ICdcMCc7IC8qIEludmFsaWQgYWZ0ZXIgXCAqLwogCi0gICAgICAgIC8qIFRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggaSA9PSBhc2NpaV9sZW5ndGggaXMgYSBiYWNrc2xhc2gKLSAgICAgICAgICAgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAqLwotICAgICAgICBhc3NlcnQoaSA8IGxlbiB8fCAoaSA9PSBsZW4gJiYgYyA9PSAnXG4nKSk7Ci0KICAgICAgICAgc3dpdGNoIChjKSB7CiAKICAgICAgICAgICAgIC8qIFx4IGVzY2FwZXMgKi8KLSNkZWZpbmUgV1JJVEVDSEFSKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJmksIGNoKSA8IDApICAgIFwKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfXdoaWxlKDApCisjZGVmaW5lIFdSSVRFQ0hBUihjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIChjaCkpIDwgMCkgICAgXAorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAgICAgICAgIGNhc2UgJ1xuJzogYnJlYWs7CiAgICAgICAgIGNhc2UgJ1xcJzogV1JJVEVDSEFSKCdcXCcpOyBicmVhazsKQEAgLTU3MjAsMzUgKzU2NzIsMzIgQEAKIAogICAgICAgZXJyb3I6CiAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInVuaWNvZGVlc2NhcGUiLCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ2LCAmaSkpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpOwogICAgICAgICBjb250aW51ZTsKICAgICB9CiAjdW5kZWYgV1JJVEVDSEFSCiAKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIGkpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHYpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICB1Y25oYXNoRXJyb3I6CiAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICBQeUV4Y19Vbmljb2RlRXJyb3IsCiAgICAgICAgICJcXE4gZXNjYXBlcyBub3Qgc3VwcG9ydGVkIChjYW4ndCBsb2FkIHVuaWNvZGVkYXRhIG1vZHVsZSkiCiAgICAgICAgICk7Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKIAogICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01OTAxLDIzICs1ODUwLDIyIEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplbmQ7CiAgICAgY29uc3QgY2hhciAqYnM7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKKwogICAgIC8qIEVzY2FwZWQgc3RyaW5ncyB3aWxsIGFsd2F5cyBiZSBsb25nZXIgdGhhbiB0aGUgcmVzdWx0aW5nCiAgICAgICAgVW5pY29kZSBzdHJpbmcsIHNvIHdlIHN0YXJ0IHdpdGggc2l6ZSBoZXJlIGFuZCB0aGVuIHJlZHVjZSB0aGUKICAgICAgICBsZW5ndGggYWZ0ZXIgY29udmVyc2lvbiB0byB0aGUgdHJ1ZSB2YWx1ZS4gKEJ1dCBkZWNvZGluZyBlcnJvcgogICAgICAgIGhhbmRsZXIgbWlnaHQgaGF2ZSB0byByZXNpemUgdGhlIHN0cmluZykgKi8KLSAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBvdXRwb3MgPSAwOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisKICAgICBlbmQgPSBzICsgc2l6ZTsKICAgICB3aGlsZSAocyA8IGVuZCkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGM7CkBAIC01OTI3LDcgKzU4NzUsOCBAQAogCiAgICAgICAgIC8qIE5vbi1lc2NhcGUgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgVW5pY29kZSBvcmRpbmFscyAqLwogICAgICAgICBpZiAoKnMgIT0gJ1xcJykgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgKHVuc2lnbmVkIGNoYXIpKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC01OTM5LDcgKzU4ODgsOCBAQAogICAgICAgICBmb3IgKDtzIDwgZW5kOykgewogICAgICAgICAgICAgaWYgKCpzICE9ICdcXCcpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCAodW5zaWduZWQgY2hhcikqcysrKSA8IDApCisgICAgICAgICAgICB4ID0gKHVuc2lnbmVkIGNoYXIpKnMrKzsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCB4KSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHMgLSBicykgJiAxKSA9PSAwIHx8CkBAIC01OTQ3LDcgKzU4OTcsNyBAQAogICAgICAgICAgICAgKCpzICE9ICd1JyAmJiAqcyAhPSAnVScpKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBvdXRwb3MtLTsKKyAgICAgICAgd3JpdGVyLnBvcy0tOwogICAgICAgICBjb3VudCA9ICpzPT0ndScgPyA0IDogODsKICAgICAgICAgcysrOwogCkBAIC01OTU2LDExICs1OTA2LDExIEBACiAgICAgICAgICAgICBjID0gKHVuc2lnbmVkIGNoYXIpKnM7CiAgICAgICAgICAgICBpZiAoIVB5X0lTWERJR0lUKGMpKSB7CiAgICAgICAgICAgICAgICAgZW5kaW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICJyYXd1bmljb2RlZXNjYXBlIiwgInRydW5jYXRlZCBcXHVYWFhYIiwKICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICBnb3RvIG5leHRCeXRlOwogICAgICAgICAgICAgfQpAQCAtNTk3MywyOCArNTkyMywyNyBAQAogICAgICAgICAgICAgICAgIHggKz0gMTAgKyBjIC0gJ0EnOwogICAgICAgICB9CiAgICAgICAgIGlmICh4IDw9IE1BWF9VTklDT0RFKSB7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB4KSA8IDApCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJyYXd1bmljb2RlZXNjYXBlIiwgIlxcVXh4eHh4eHh4IG91dCBvZiByYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgbmV4dEJ5dGU6CiAgICAgICAgIDsKICAgICB9Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHYpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC02MDk0LDggKzYwNDMsNyBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqZW5kOwogICAgIGNvbnN0IGNoYXIgKnJlYXNvbjsKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKQEAgLTYxMDYsMTUgKzYwNTQsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgIDEpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIFhYWCBvdmVyZmxvdyBkZXRlY3Rpb24gbWlzc2luZyAqLwotICAgIHYgPSBQeVVuaWNvZGVfTmV3KChzaXplK1B5X1VOSUNPREVfU0laRS0xKS8gUHlfVU5JQ09ERV9TSVpFLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodikgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgb3V0cG9zID0gMDsKLSAgICBlbmQgPSBzICsgc2l6ZTsKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKIAorICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICBpZiAoc2l6ZSAvIFB5X1VOSUNPREVfU0laRSA+IFBZX1NTSVpFX1RfTUFYIC0gMSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorICAgIHdyaXRlci5taW5fbGVuZ3RoID0gKHNpemUgKyAoUHlfVU5JQ09ERV9TSVpFIC0gMSkpIC8gUHlfVU5JQ09ERV9TSVpFOworCisgICAgZW5kID0gcyArIHNpemU7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgUHlfVU5JQ09ERSB1Y2g7CiAgICAgICAgIFB5X1VDUzQgY2g7CkBAIC02MTU2LDI4ICs2MTA2LDI2IEBACiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICBjb250aW51ZTsKIAogICBlcnJvcjoKICAgICAgICAgc3RhcnRpbnBvcyA9IHMgLSBzdGFydHM7Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInVuaWNvZGVfaW50ZXJuYWwiLCByZWFzb24sCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmVuZCwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjU0MSw3ICs2NDg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7CiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBpbnQga2luZDsKICAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKQEAgLTY1NTgsNDYgKzY1MDYsNDYgQEAKICAgICBpZiAoc2l6ZSA9PSAxICYmICh1bnNpZ25lZCBjaGFyKXNbMF0gPCAxMjgpCiAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpc1swXSk7CiAKLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh1bmljb2RlID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGUgPSBzICsgc2l6ZTsKLSAgICBkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSk7CisgICAgZGF0YSA9IHdyaXRlci5kYXRhOwogICAgIG91dHBvcyA9IGFzY2lpX2RlY29kZShzLCBlLCAoUHlfVUNTMSAqKWRhdGEpOwotICAgIGlmIChvdXRwb3MgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7CisgICAgd3JpdGVyLnBvcyA9IG91dHBvczsKKyAgICBpZiAod3JpdGVyLnBvcyA9PSBzaXplKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKLSAgICBzICs9IG91dHBvczsKLSAgICBraW5kID0gUHlVbmljb2RlXzFCWVRFX0tJTkQ7CisgICAgcyArPSB3cml0ZXIucG9zOworICAgIGtpbmQgPSB3cml0ZXIua2luZDsKICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpKnM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOwogICAgICAgICBpZiAoYyA8IDEyOCkgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIG91dHBvcysrLCBjKTsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCB3cml0ZXIucG9zLCBjKTsKKyAgICAgICAgICAgIHdyaXRlci5wb3MrKzsKICAgICAgICAgICAgICsrczsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDE7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJhc2NpaSIsICJvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpIiwKICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKLSAgICAgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICAgICAgICAgIGtpbmQgPSB3cml0ZXIua2luZDsKKyAgICAgICAgICAgIGRhdGEgPSB3cml0ZXIuZGF0YTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjYyOSw3ICs2NTc3LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogRmFzdCBwYXRoOiBpZiBpdCBpcyBhbiBBU0NJSS1vbmx5IHN0cmluZywgY29uc3RydWN0IGJ5dGVzIG9iamVjdAogICAgICAgIGRpcmVjdGx5LiBFbHNlIGRlZmVyIHRvIGFib3ZlIGZ1bmN0aW9uIHRvIHJhaXNlIHRoZSBleGNlcHRpb24uICovCi0gICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh1bmljb2RlKSA8IDEyOCkKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKQogICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShQeVVuaWNvZGVfREFUQSh1bmljb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSkpOwogICAgIHJldHVybiB1bmljb2RlX2VuY29kZV91Y3MxKHVuaWNvZGUsIGVycm9ycywgMTI4KTsKQEAgLTY3MDcsOCArNjY1NSw4IEBACiAgKiBEZWNvZGUgYSBieXRlIHN0cmluZyBmcm9tIGEgV2luZG93cyBjb2RlIHBhZ2UgaW50byB1bmljb2RlIG9iamVjdCBpbiBzdHJpY3QKICAqIG1vZGUuCiAgKgotICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZGVjb2RlIGVycm9yLCBvciByYWlzZSBhCi0gKiBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMgLTEgb24gb3RoZXIgZXJyb3IuCisgKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgcmV0dXJucyAtMiBvbiBkZWNvZGUgZXJyb3IsIG9yIHJhaXNlIGFuCisgKiBPU0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgogICovCiBzdGF0aWMgaW50CiBkZWNvZGVfY29kZV9wYWdlX3N0cmljdChVSU5UIGNvZGVfcGFnZSwKQEAgLTY3NTksNyArNjcwNyw3IEBACiAgKiBEZWNvZGUgYSBieXRlIHN0cmluZyBmcm9tIGEgY29kZSBwYWdlIGludG8gdW5pY29kZSBvYmplY3Qgd2l0aCBhbiBlcnJvcgogICogaGFuZGxlci4KICAqCi0gKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYSBXaW5kb3dzRXJyb3Igb3IKKyAqIFJldHVybnMgY29uc3VtZWQgc2l6ZSBpZiBzdWNjZWVkLCBvciByYWlzZSBhbiBPU0Vycm9yIG9yCiAgKiBVbmljb2RlRGVjb2RlRXJyb3IgZXhjZXB0aW9uIGFuZCByZXR1cm5zIC0xIG9uIGVycm9yLgogICovCiBzdGF0aWMgaW50CkBAIC02Nzc4LDcgKzY3MjYsOCBAQAogICAgIC8qIGVhY2ggc3RlcCBjYW5ub3QgZGVjb2RlIG1vcmUgdGhhbiAxIGNoYXJhY3RlciwgYnV0IGEgY2hhcmFjdGVyIGNhbiBiZQogICAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3Vycm9nYXRlIHBhaXIgKi8KICAgICB3Y2hhcl90IGJ1ZmZlclsyXSwgKnN0YXJ0b3V0LCAqb3V0OwotICAgIGludCBpbnNpemUsIG91dHNpemU7CisgICAgaW50IGluc2l6ZTsKKyAgICBQeV9zc2l6ZV90IG91dHNpemU7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmVuY29kaW5nX29iaiA9IE5VTEw7CkBAIC02ODU4LDcgKzY4MDcsNyBAQAogICAgICAgICAgICAgc3RhcnRpbnBvcyA9IGluIC0gc3RhcnRpbjsKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDE7CiAgICAgICAgICAgICBvdXRwb3MgPSBvdXQgLSBQeVVuaWNvZGVfQVNfVU5JQ09ERSgqdik7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd2NoYXIoCiAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0aW4sICZlbmRpbiwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJmluLApAQCAtNzAxNCw3ICs2OTYzLDcgQEAKICAqIG1vZGUuCiAgKgogICogUmV0dXJucyBjb25zdW1lZCBjaGFyYWN0ZXJzIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZW5jb2RlIGVycm9yLCBvciByYWlzZQotICogYSBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMgLTEgb24gb3RoZXIgZXJyb3IuCisgKiBhbiBPU0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgogICovCiBzdGF0aWMgaW50CiBlbmNvZGVfY29kZV9wYWdlX3N0cmljdChVSU5UIGNvZGVfcGFnZSwgUHlPYmplY3QgKipvdXRieXRlcywKQEAgLTcwNDgsMTAgKzY5OTcsMTEgQEAKICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgYXNzZXJ0KHNpemUgPD0gSU5UX01BWCk7CiAKICAgICAvKiBGaXJzdCBnZXQgdGhlIHNpemUgb2YgdGhlIHJlc3VsdCAqLwogICAgIG91dHNpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGNvZGVfcGFnZSwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCAoaW50KXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBwdXNlZERlZmF1bHRDaGFyKTsKICAgICBpZiAob3V0c2l6ZSA8PSAwKQpAQCAtNzA4OCw3ICs3MDM4LDcgQEAKIAogICAgIC8qIERvIHRoZSBjb252ZXJzaW9uICovCiAgICAgb3V0c2l6ZSA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoY29kZV9wYWdlLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIChpbnQpc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIG91dHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcHVzZWREZWZhdWx0Q2hhcik7CiAgICAgUHlfQ0xFQVIoc3Vic3RyaW5nKTsKQEAgLTcxMTAsNyArNzA2MCw3IEBACiAgKiBFbmNvZGUgYSBVbmljb2RlIHN0cmluZyB0byBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gYSBieXRlIHN0cmluZyB1c2luZyBhCiAgKiBlcnJvciBoYW5kbGVyLgogICoKLSAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCBvciByYWlzZSBhIFdpbmRvd3NFcnJvciBhbmQgcmV0dXJucworICogUmV0dXJucyBjb25zdW1lZCBjaGFyYWN0ZXJzIGlmIHN1Y2NlZWQsIG9yIHJhaXNlIGFuIE9TRXJyb3IgYW5kIHJldHVybnMKICAqIC0xIG9uIG90aGVyIGVycm9yLgogICovCiBzdGF0aWMgaW50CkBAIC03MTk2LDkgKzcxNDYsOCBAQAogICAgICAgICAgICAgY2hhcnNpemUgPSAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2ggLT0gMHgxMDAwMDsKLSAgICAgICAgICAgIGNoYXJzWzBdID0gMHhkODAwICsgKGNoID4+IDEwKTsKLSAgICAgICAgICAgIGNoYXJzWzFdID0gMHhkYzAwICsgKGNoICYgMHgzZmYpOworICAgICAgICAgICAgY2hhcnNbMF0gPSBQeV9VTklDT0RFX0hJR0hfU1VSUk9HQVRFKGNoKTsKKyAgICAgICAgICAgIGNoYXJzWzFdID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgIGNoYXJzaXplID0gMjsKICAgICAgICAgfQogCkBAIC03MzkxLDIyMCArNzM0MCwyNTggQEAKIAogLyogLS0tIENoYXJhY3RlciBNYXBwaW5nIENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBpbnQKK2NoYXJtYXBfZGVjb2RlX3N0cmluZyhjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQoreworICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CisgICAgY29uc3QgY2hhciAqZTsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3MsIGVuZGlucG9zOworICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMLCAqZXhjID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IG1hcGxlbjsKKyAgICBlbnVtIFB5VW5pY29kZV9LaW5kIG1hcGtpbmQ7CisgICAgdm9pZCAqbWFwZGF0YTsKKyAgICBQeV9VQ1M0IHg7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobWFwcGluZykgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1hcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG1hcHBpbmcpOworICAgIG1hcGRhdGEgPSBQeVVuaWNvZGVfREFUQShtYXBwaW5nKTsKKyAgICBtYXBraW5kID0gUHlVbmljb2RlX0tJTkQobWFwcGluZyk7CisKKyAgICBlID0gcyArIHNpemU7CisKKyAgICBpZiAobWFwa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCAmJiBtYXBsZW4gPj0gMjU2KSB7CisgICAgICAgIC8qIGZhc3QtcGF0aCBmb3IgY3AwMzcsIGNwNTAwIGFuZCBpc284ODU5XzEgZW5jb2RpbmdzLiBpc284ODU5XzEKKyAgICAgICAgICogaXMgZGlzYWJsZWQgaW4gZW5jb2RpbmcgYWxpYXNlcywgbGF0aW4xIGlzIHByZWZlcnJlZCBiZWNhdXNlCisgICAgICAgICAqIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBmYXN0ZXIuICovCisgICAgICAgIFB5X1VDUzEgKm1hcGRhdGFfdWNzMSA9IChQeV9VQ1MxICopbWFwZGF0YTsKKyAgICAgICAgUHlfVUNTMSAqb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICBQeV9VQ1M0IG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisKKyAgICAgICAgYXNzZXJ0ICh3cml0ZXItPmtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOworICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgIGNoID0gKnM7CisgICAgICAgICAgICB4ID0gbWFwZGF0YV91Y3MxW2NoXTsKKyAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikgeworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCAxLCAweGZmKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0ZGF0YVt3cml0ZXItPnBvc10gPSB4OworICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICsrczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgeworICAgICAgICAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBvdXRraW5kID0gd3JpdGVyLT5raW5kOworICAgICAgICAgICAgUHlfVUNTMiAqbWFwZGF0YV91Y3MyID0gKFB5X1VDUzIgKiltYXBkYXRhOworICAgICAgICAgICAgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1MxICpvdXRkYXRhID0gKFB5X1VDUzEgKil3cml0ZXItPmRhdGE7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgICAgICAgICAgICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICAgICAgICAgICAgICBjaCA9ICpzOworICAgICAgICAgICAgICAgICAgICB4ID0gbWFwZGF0YV91Y3MyW2NoXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPiBtYXhjaGFyKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YVt3cml0ZXItPnBvc10gPSB4OworICAgICAgICAgICAgICAgICAgICB3cml0ZXItPnBvcysrOworICAgICAgICAgICAgICAgICAgICArK3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgeworICAgICAgICAgICAgICAgIFB5X1VDUzIgKm91dGRhdGEgPSAoUHlfVUNTMiAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqczsKKyAgICAgICAgICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMltjaF07CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IDB4RkZGRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICAgICAgICAgKytzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjaCA9ICpzOworCisgICAgICAgIGlmIChjaCA8IG1hcGxlbikKKyAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChtYXBraW5kLCBtYXBkYXRhLCBjaCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHggPSAweGZmZmU7IC8qIGludmFsaWQgdmFsdWUgKi8KK0Vycm9yOgorICAgICAgICBpZiAoeCA9PSAweGZmZmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCisgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCisgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgImNoYXJtYXAiLCAiY2hhcmFjdGVyIG1hcHMgdG8gPHVuZGVmaW5lZD4iLAorICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCisgICAgICAgICAgICAgICAgICAgIHdyaXRlcikpIHsKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIHgpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgKytzOworICAgIH0KKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAwOworCitvbkVycm9yOgorICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50CitjaGFybWFwX2RlY29kZV9tYXBwaW5nKGNvbnN0IGNoYXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQoreworICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CisgICAgY29uc3QgY2hhciAqZTsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3MsIGVuZGlucG9zOworICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMLCAqZXhjID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyIGNoOworICAgIFB5T2JqZWN0ICprZXksICppdGVtID0gTlVMTDsKKworICAgIGUgPSBzICsgc2l6ZTsKKworICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICBjaCA9ICpzOworCisgICAgICAgIC8qIEdldCBtYXBwaW5nIChjaGFyIG9yZGluYWwgLT4gaW50ZWdlciwgVW5pY29kZSBjaGFyIG9yIE5vbmUpICovCisgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZyljaCk7CisgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKworICAgICAgICBpdGVtID0gUHlPYmplY3RfR2V0SXRlbShtYXBwaW5nLCBrZXkpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTG9va3VwRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgLyogTm8gbWFwcGluZyBmb3VuZCBtZWFuczogbWFwcGluZyBpcyB1bmRlZmluZWQuICovCisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFwcGx5IG1hcHBpbmcgKi8KKyAgICAgICAgaWYgKGl0ZW0gPT0gUHlfTm9uZSkKKyAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICBpZiAoUHlMb25nX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgICAgICBsb25nIHZhbHVlID0gUHlMb25nX0FTX0xPTkcoaXRlbSk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQorICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IE1BWF9VTklDT0RFKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgYmUgaW4gcmFuZ2UoMHglbHgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpTUFYX1VOSUNPREUgKyAxKTsKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIHZhbHVlKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShpdGVtKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSkgPT0gMSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgdmFsdWUgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKGl0ZW0sIDApOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIHZhbHVlKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIGl0ZW0pID09IC0xKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiB3cm9uZyByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgcmV0dXJuIGludGVnZXIsIE5vbmUgb3Igc3RyIik7CisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoaXRlbSk7CisgICAgICAgICsrczsKKyAgICAgICAgY29udGludWU7CisKK1VuZGVmaW5lZDoKKyAgICAgICAgLyogdW5kZWZpbmVkIG1hcHBpbmcgKi8KKyAgICAgICAgUHlfQ0xFQVIoaXRlbSk7CisgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKKyAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzE7CisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCisgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAorICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKKyAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCisgICAgICAgICAgICAgICAgd3JpdGVyKSkgeworICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgfQorICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgcmV0dXJuIDA7CisKK29uRXJyb3I6CisgICAgUHlfWERFQ1JFRihpdGVtKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAtMTsKK30KKwogUHlPYmplY3QgKgogUHlVbmljb2RlX0RlY29kZUNoYXJtYXAoY29uc3QgY2hhciAqcywKICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewotICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7Ci0gICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwotICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgY29uc3QgY2hhciAqZTsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBQeV9zc2l6ZV90IGV4dHJhY2hhcnMgPSAwOwotICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCiAgICAgLyogRGVmYXVsdCB0byBMYXRpbi0xICovCiAgICAgaWYgKG1hcHBpbmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEocywgc2l6ZSwgZXJyb3JzKTsKIAotICAgIHYgPSBQeVVuaWNvZGVfTmV3KHNpemUsIDEyNyk7Ci0gICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIGlmIChzaXplID09IDApCi0gICAgICAgIHJldHVybiB2OwotICAgIG91dHBvcyA9IDA7Ci0gICAgZSA9IHMgKyBzaXplOworICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChtYXBwaW5nKSkgewotICAgICAgICBQeV9zc2l6ZV90IG1hcGxlbjsKLSAgICAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBtYXBraW5kOwotICAgICAgICB2b2lkICptYXBkYXRhOwotICAgICAgICBQeV9VQ1M0IHg7Ci0KLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShtYXBwaW5nKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIG1hcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG1hcHBpbmcpOwotICAgICAgICBtYXBkYXRhID0gUHlVbmljb2RlX0RBVEEobWFwcGluZyk7Ci0gICAgICAgIG1hcGtpbmQgPSBQeVVuaWNvZGVfS0lORChtYXBwaW5nKTsKLSAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoOwotICAgICAgICAgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgewotICAgICAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgb3V0a2luZCA9IFB5VW5pY29kZV9LSU5EKHYpOwotICAgICAgICAgICAgICAgIGlmIChvdXRraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGRhdGEgPSBQeVVuaWNvZGVfREFUQSh2KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHYpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChQeVVuaWNvZGVfMkJZVEVfS0lORCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPiBtYXhjaGFyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlXzFCWVRFX0tJTkQsIG91dGRhdGEsIG91dHBvcysrLCB4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRkYXRhID0gUHlVbmljb2RlX0RBVEEodik7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaCA9ICpzOwotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9SRUFEKFB5VW5pY29kZV8yQllURV9LSU5ELCBtYXBkYXRhLCBjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAweEZGRkUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfMkJZVEVfS0lORCwgb3V0ZGF0YSwgb3V0cG9zKyssIHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgKytzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoID0gKnM7Ci0KLSAgICAgICAgICAgIGlmIChjaCA8IG1hcGxlbikKLSAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQobWFwa2luZCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHggPSAweGZmZmU7IC8qIGludmFsaWQgdmFsdWUgKi8KLUVycm9yOgotICAgICAgICAgICAgaWYgKHggPT0gMHhmZmZlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOwotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkgewotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB4KSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgKytzOwotICAgICAgICB9CisgICAgICAgIGlmIChjaGFybWFwX2RlY29kZV9zdHJpbmcocywgc2l6ZSwgbWFwcGluZywgZXJyb3JzLCAmd3JpdGVyKSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp3LCAqeDsKLQotICAgICAgICAgICAgLyogR2V0IG1hcHBpbmcgKGNoYXIgb3JkaW5hbCAtPiBpbnRlZ2VyLCBVbmljb2RlIGNoYXIgb3IgTm9uZSkgKi8KLSAgICAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpY2gpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShtYXBwaW5nLCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Mb29rdXBFcnJvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm8gbWFwcGluZyBmb3VuZCBtZWFuczogbWFwcGluZyBpcyB1bmRlZmluZWQuICovCi0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIEFwcGx5IG1hcHBpbmcgKi8KLSAgICAgICAgICAgIGlmICh4ID09IFB5X05vbmUpCi0gICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7Ci0gICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHgpKSB7Ci0gICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSA9IFB5TG9uZ19BU19MT05HKHgpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgYmUgaW4gcmFuZ2UoMHglbHgpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKU1BWF9VTklDT0RFICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB2YWx1ZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh4KSkgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgdGFyZ2V0c2l6ZTsKLQotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoeCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRhcmdldHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh4KTsKLQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzaXplID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogMS0xIG1hcHBpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB2YWx1ZSA9IFB5VW5pY29kZV9SRUFEX0NIQVIoeCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgdmFsdWUpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldHNpemUgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIDEtbiBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzaXplID4gZXh0cmFjaGFycykgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzaXplIGZpcnN0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5lZWRlZCA9ICh0YXJnZXRzaXplIC0gZXh0cmFjaGFycykgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldHNpemUgPDwgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWNoYXJzICs9IG5lZWRlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCBvdmVyZmxvdyBkZXRlY3Rpb24gbWlzc2luZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpICsgbmVlZGVkKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV93aWRlbigmdiwgb3V0cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoeCkpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db3B5Q2hhcmFjdGVycyh2LCBvdXRwb3MsIHgsIDAsIHRhcmdldHNpemUpOwotICAgICAgICAgICAgICAgICAgICBvdXRwb3MgKz0gdGFyZ2V0c2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFjaGFycyAtPSB0YXJnZXRzaXplOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiAxLTAgbWFwcGluZzogc2tpcCB0aGUgY2hhcmFjdGVyICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiB3cm9uZyByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIG1hcHBpbmcgbXVzdCByZXR1cm4gaW50ZWdlciwgTm9uZSBvciBzdHIiKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgKytzOwotICAgICAgICAgICAgY29udGludWU7Ci1VbmRlZmluZWQ6Ci0gICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLwotICAgICAgICAgICAgUHlfWERFQ1JFRih4KTsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAotICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKLSAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpIHsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGNoYXJtYXBfZGVjb2RlX21hcHBpbmcocywgc2l6ZSwgbWFwcGluZywgZXJyb3JzLCAmd3JpdGVyKSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7Ci0gICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7Ci0gICAgUHlfWERFQ1JFRihleGMpOwotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC04MTE4LDEwICs4MTA1LDE0IEBACiAgICAgICogLTE9bm90IGluaXRpYWxpemVkLCAwPXVua25vd24sIDE9c3RyaWN0LCAyPXJlcGxhY2UsCiAgICAgICogMz1pZ25vcmUsIDQ9eG1sY2hhcnJlZnJlcGxhY2UgKi8KICAgICBpbnQga25vd25fZXJyb3JIYW5kbGVyID0gLTE7CisgICAgdm9pZCAqZGF0YTsKKyAgICBpbnQga2luZDsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodW5pY29kZSkgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmljb2RlKTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwogCiAgICAgLyogRGVmYXVsdCB0byBMYXRpbi0xICovCiAgICAgaWYgKG1hcHBpbmcgPT0gTlVMTCkKQEAgLTgxMzYsNyArODEyNyw3IEBACiAgICAgICAgIHJldHVybiByZXM7CiAKICAgICB3aGlsZSAoaW5wb3M8c2l6ZSkgewotICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQURfQ0hBUih1bmljb2RlLCBpbnBvcyk7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpbnBvcyk7CiAgICAgICAgIC8qIHRyeSB0byBlbmNvZGUgaXQgKi8KICAgICAgICAgY2hhcm1hcGVuY29kZV9yZXN1bHQgeCA9IGNoYXJtYXBlbmNvZGVfb3V0cHV0KGNoLCBtYXBwaW5nLCAmcmVzLCAmcmVzcG9zKTsKICAgICAgICAgaWYgKHg9PWVuY19FWENFUFRJT04pIC8qIGVycm9yICovCkBAIC04MjIyLDE5ICs4MjEzLDYgQEAKICAgICB9CiB9CiAKLS8qIHJhaXNlcyBhIFVuaWNvZGVUcmFuc2xhdGVFcnJvciAqLwotc3RhdGljIHZvaWQKLXJhaXNlX3RyYW5zbGF0ZV9leGNlcHRpb24oUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBQeV9zc2l6ZV90IGVuZHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uKQotewotICAgIG1ha2VfdHJhbnNsYXRlX2V4Y2VwdGlvbihleGNlcHRpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUsIHN0YXJ0cG9zLCBlbmRwb3MsIHJlYXNvbik7Ci0gICAgaWYgKCpleGNlcHRpb25PYmplY3QgIT0gTlVMTCkKLSAgICAgICAgUHlDb2RlY19TdHJpY3RFcnJvcnMoKmV4Y2VwdGlvbk9iamVjdCk7Ci19Ci0KIC8qIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGhlbHBlcjoKICAgIGJ1aWxkIGFyZ3VtZW50cywgY2FsbCB0aGUgY2FsbGJhY2sgYW5kIGNoZWNrIHRoZSBhcmd1bWVudHMsCiAgICBwdXQgdGhlIHJlc3VsdCBpbnRvIG5ld3BvcyBhbmQgcmV0dXJuIHRoZSByZXBsYWNlbWVudCBzdHJpbmcsIHdoaWNoCkBAIC04NTEwLDggKzg0ODgsMTAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN3aXRjaCAoa25vd25fZXJyb3JIYW5kbGVyKSB7CiAgICAgICAgICAgICBjYXNlIDE6IC8qIHN0cmljdCAqLwotICAgICAgICAgICAgICAgIHJhaXNlX3RyYW5zbGF0ZV9leGNlcHRpb24oJmV4YywgaW5wdXQsIGNvbGxzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlbmQsIHJlYXNvbik7CisgICAgICAgICAgICAgICAgbWFrZV90cmFuc2xhdGVfZXhjZXB0aW9uKCZleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBjb2xsc3RhcnQsIGNvbGxlbmQsIHJlYXNvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4YyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBQeUNvZGVjX1N0cmljdEVycm9ycyhleGMpOwogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNhc2UgMjogLyogcmVwbGFjZSAqLwogICAgICAgICAgICAgICAgIC8qIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHNwYWNlLCB0aGlzIGlzIGEgMToxIHJlcGxhY2VtZW50ICovCkBAIC05MTAzLDcgKzkwODMsNyBAQAogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSB8fAogICAgICAgICBQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChzdWJzdHJpbmcpID09IDApCiAgICAgICAgIHJldHVybiAxOwpAQCAtOTE0MSw3ICs5MTIxLDYgQEAKICAgICAgICAgICAgIC8qIFdlIGRvIG5vdCBuZWVkIHRvIGNvbXBhcmUgMCBhbmQgbGVuKHN1YnN0cmluZyktMSBiZWNhdXNlCiAgICAgICAgICAgICAgICB0aGUgaWYgc3RhdGVtZW50IGFib3ZlIGVuc3VyZWQgYWxyZWFkeSB0aGF0IHRoZXkgYXJlIGVxdWFsCiAgICAgICAgICAgICAgICB3aGVuIHdlIGVuZCB1cCBoZXJlLiAqLwotICAgICAgICAgICAgLyogVE9ETzogaG9ub3IgZGlyZWN0aW9uIGFuZCBkbyBhIGZvcndhcmQgb3IgYmFja3dhcmRzIHNlYXJjaCAqLwogICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGVuZF9zdWI7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kX3NlbGYsIGRhdGFfc2VsZiwgb2Zmc2V0ICsgaSkgIT0KICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZF9zdWIsIGRhdGFfc3ViLCBpKSkKQEAgLTk2MDMsNDEgKzk1ODIsNDkgQEAKICAgICAgICAgICAgIHNlcF9kYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEoc2VwKTsKICAgICB9CiAjZW5kaWYKLSAgICBmb3IgKGkgPSAwLCByZXNfb2Zmc2V0ID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKLSAgICAgICAgaXRlbSA9IGl0ZW1zW2ldOwotICAgICAgICAvKiBDb3B5IGl0ZW0sIGFuZCBtYXliZSB0aGUgc2VwYXJhdG9yLiAqLwotICAgICAgICBpZiAoaSAmJiBzZXBsZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKHVzZV9tZW1jcHkpIHsKKyAgICBpZiAodXNlX21lbWNweSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICAgICAgLyogQ29weSBpdGVtLCBhbmQgbWF5YmUgdGhlIHNlcGFyYXRvci4gKi8KKyAgICAgICAgICAgIGlmIChpICYmIHNlcGxlbiAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfTUVNQ1BZKHJlc19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCAqIHNlcGxlbik7CiAgICAgICAgICAgICAgICAgcmVzX2RhdGEgKz0ga2luZCAqIHNlcGxlbjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcywgcmVzX29mZnNldCwgc2VwLCAwLCBzZXBsZW4pOwotICAgICAgICAgICAgICAgIHJlc19vZmZzZXQgKz0gc2VwbGVuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGl0ZW1sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpdGVtKTsKLSAgICAgICAgaWYgKGl0ZW1sZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKHVzZV9tZW1jcHkpIHsKKworICAgICAgICAgICAgaXRlbWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW1sZW4gIT0gMCkgewogICAgICAgICAgICAgICAgIFB5X01FTUNQWShyZXNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RBVEEoaXRlbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQgKiBpdGVtbGVuKTsKICAgICAgICAgICAgICAgICByZXNfZGF0YSArPSBraW5kICogaXRlbWxlbjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICB9CisgICAgICAgIGFzc2VydChyZXNfZGF0YSA9PSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICArIGtpbmQgKiBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXMpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDAsIHJlc19vZmZzZXQgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICAgICAgLyogQ29weSBpdGVtLCBhbmQgbWF5YmUgdGhlIHNlcGFyYXRvci4gKi8KKyAgICAgICAgICAgIGlmIChpICYmIHNlcGxlbiAhPSAwKSB7CisgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVzLCByZXNfb2Zmc2V0LCBzZXAsIDAsIHNlcGxlbik7CisgICAgICAgICAgICAgICAgcmVzX29mZnNldCArPSBzZXBsZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZW1sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpdGVtKTsKKyAgICAgICAgICAgIGlmIChpdGVtbGVuICE9IDApIHsKICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXMsIHJlc19vZmZzZXQsIGl0ZW0sIDAsIGl0ZW1sZW4pOwogICAgICAgICAgICAgICAgIHJlc19vZmZzZXQgKz0gaXRlbWxlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KLSAgICBpZiAodXNlX21lbWNweSkKLSAgICAgICAgYXNzZXJ0KHJlc19kYXRhID09IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICsga2luZCAqIFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcykpOwotICAgIGVsc2UKICAgICAgICAgYXNzZXJ0KHJlc19vZmZzZXQgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzKSk7CisgICAgfQogCiAgICAgUHlfREVDUkVGKGZzZXEpOwogICAgIFB5X1hERUNSRUYoc2VwKTsKQEAgLTEwMDI5LDYgKzEwMDE2LDMxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCityZXBsYWNlXzFjaGFyX2lucGxhY2UoUHlPYmplY3QgKnUsIFB5X3NzaXplX3QgcG9zLAorICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdTEsIFB5X1VDUzQgdTIsIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1KTsKKyAgICB2b2lkICpkYXRhID0gUHlVbmljb2RlX0RBVEEodSk7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1KTsKKyAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICB1Y3MxbGliX3JlcGxhY2VfMWNoYXJfaW5wbGFjZSgoUHlfVUNTMSAqKWRhdGEgKyBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MxICopZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsIHUyLCBtYXhjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgdWNzMmxpYl9yZXBsYWNlXzFjaGFyX2lucGxhY2UoKFB5X1VDUzIgKilkYXRhICsgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMiAqKWRhdGEgKyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxLCB1MiwgbWF4Y291bnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICB1Y3M0bGliX3JlcGxhY2VfMWNoYXJfaW5wbGFjZSgoUHlfVUNTNCAqKWRhdGEgKyBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1M0ICopZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsIHUyLCBtYXhjb3VudCk7CisgICAgfQorfQorCiBzdGF0aWMgUHlPYmplY3QgKgogcmVwbGFjZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cjEsCiAgICAgICAgIFB5T2JqZWN0ICpzdHIyLCBQeV9zc2l6ZV90IG1heGNvdW50KQpAQCAtMTAwNDUsNyArMTAwNTcsNyBAQAogICAgIFB5X3NzaXplX3QgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjEpOwogICAgIFB5X3NzaXplX3QgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjIpOwogICAgIGludCBtYXlzaHJpbms7Ci0gICAgUHlfVUNTNCBtYXhjaGFyLCBtYXhjaGFyX3N0cjI7CisgICAgUHlfVUNTNCBtYXhjaGFyLCBtYXhjaGFyX3N0cjEsIG1heGNoYXJfc3RyMjsKIAogICAgIGlmIChtYXhjb3VudCA8IDApCiAgICAgICAgIG1heGNvdW50ID0gUFlfU1NJWkVfVF9NQVg7CkBAIC0xMDA1NCwxNSArMTAwNjYsMTYgQEAKIAogICAgIGlmIChzdHIxID09IHN0cjIpCiAgICAgICAgIGdvdG8gbm90aGluZzsKLSAgICBpZiAoc2tpbmQgPCBraW5kMSkKLSAgICAgICAgLyogc3Vic3RyaW5nIHRvbyB3aWRlIHRvIGJlIHByZXNlbnQgKi8KLSAgICAgICAgZ290byBub3RoaW5nOwogCiAgICAgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzZWxmKTsKKyAgICBtYXhjaGFyX3N0cjEgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyMSk7CisgICAgaWYgKG1heGNoYXIgPCBtYXhjaGFyX3N0cjEpCisgICAgICAgIC8qIHN1YnN0cmluZyB0b28gd2lkZSB0byBiZSBwcmVzZW50ICovCisgICAgICAgIGdvdG8gbm90aGluZzsKICAgICBtYXhjaGFyX3N0cjIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyMik7CiAgICAgLyogUmVwbGFjaW5nIHN0cjEgd2l0aCBzdHIyIG1heSBjYXVzZSBhIG1heGNoYXIgcmVkdWN0aW9uIGluIHRoZQogICAgICAgIHJlc3VsdCBzdHJpbmcuICovCi0gICAgbWF5c2hyaW5rID0gKG1heGNoYXJfc3RyMiA8IG1heGNoYXIpOworICAgIG1heXNocmluayA9IChtYXhjaGFyX3N0cjIgPCBtYXhjaGFyX3N0cjEpICYmIChtYXhjaGFyID09IG1heGNoYXJfc3RyMSk7CiAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBtYXhjaGFyX3N0cjIpOwogCiAgICAgaWYgKGxlbjEgPT0gbGVuMikgewpAQCAtMTAwNzIsMzUgKzEwMDg1LDE5IEBACiAgICAgICAgIGlmIChsZW4xID09IDEpIHsKICAgICAgICAgICAgIC8qIHJlcGxhY2UgY2hhcmFjdGVycyAqLwogICAgICAgICAgICAgUHlfVUNTNCB1MSwgdTI7Ci0gICAgICAgICAgICBpbnQgcmtpbmQ7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGluZGV4LCBwb3M7Ci0gICAgICAgICAgICBjaGFyICpzcmM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHBvczsKIAotICAgICAgICAgICAgdTEgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0cjEsIDApOwotICAgICAgICAgICAgcG9zID0gZmluZGNoYXIoc2J1ZiwgUHlVbmljb2RlX0tJTkQoc2VsZiksIHNsZW4sIHUxLCAxKTsKKyAgICAgICAgICAgIHUxID0gUHlVbmljb2RlX1JFQUQoa2luZDEsIGJ1ZjEsIDApOworICAgICAgICAgICAgcG9zID0gZmluZGNoYXIoc2J1Ziwgc2tpbmQsIHNsZW4sIHUxLCAxKTsKICAgICAgICAgICAgIGlmIChwb3MgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gbm90aGluZzsKLSAgICAgICAgICAgIHUyID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHIyLCAwKTsKKyAgICAgICAgICAgIHUyID0gUHlVbmljb2RlX1JFQUQoa2luZDIsIGJ1ZjIsIDApOwogICAgICAgICAgICAgdSA9IFB5VW5pY29kZV9OZXcoc2xlbiwgbWF4Y2hhcik7CiAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHUsIDAsIHNlbGYsIDAsIHNsZW4pOwotICAgICAgICAgICAgcmtpbmQgPSBQeVVuaWNvZGVfS0lORCh1KTsKIAotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHJraW5kLCBQeVVuaWNvZGVfREFUQSh1KSwgcG9zLCB1Mik7Ci0gICAgICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgICAgICBzcmMgPSBzYnVmOwotICAgICAgICAgICAgd2hpbGUgKC0tbWF4Y291bnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgc3JjICs9IHBvcyAqIFB5VW5pY29kZV9LSU5EKHNlbGYpOwotICAgICAgICAgICAgICAgIHNsZW4gLT0gcG9zOwotICAgICAgICAgICAgICAgIGluZGV4ICs9IHBvczsKLSAgICAgICAgICAgICAgICBwb3MgPSBmaW5kY2hhcihzcmMsIFB5VW5pY29kZV9LSU5EKHNlbGYpLCBzbGVuLCB1MSwgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA8IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShya2luZCwgUHlVbmljb2RlX0RBVEEodSksIGluZGV4ICsgcG9zLCB1Mik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh1LCAwLCBzZWxmLCAwLCBzbGVuKTsKKyAgICAgICAgICAgIHJlcGxhY2VfMWNoYXJfaW5wbGFjZSh1LCBwb3MsIHUxLCB1MiwgbWF4Y291bnQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaW50IHJraW5kID0gc2tpbmQ7CkBAIC0xMDQxMiw5ICsxMDQwOSwyOCBAQAogc3RhdGljIGludAogdW5pY29kZV9jb21wYXJlKFB5T2JqZWN0ICpzdHIxLCBQeU9iamVjdCAqc3RyMikKIHsKKyNkZWZpbmUgQ09NUEFSRShUWVBFMSwgVFlQRTIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgVFlQRTEqIHAxID0gKFRZUEUxICopZGF0YTE7IFwKKyAgICAgICAgVFlQRTIqIHAyID0gKFRZUEUyICopZGF0YTI7IFwKKyAgICAgICAgVFlQRTEqIGVuZCA9IHAxICsgbGVuOyBcCisgICAgICAgIFB5X1VDUzQgYzEsIGMyOyBcCisgICAgICAgIGZvciAoOyBwMSAhPSBlbmQ7IHAxKyssIHAyKyspIHsgXAorICAgICAgICAgICAgYzEgPSAqcDE7IFwKKyAgICAgICAgICAgIGMyID0gKnAyOyBcCisgICAgICAgICAgICBpZiAoYzEgIT0gYzIpIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gKGMxIDwgYzIpID8gLTEgOiAxOyBcCisgICAgICAgIH0gXAorICAgIH0gXAorICAgIHdoaWxlICgwKQorCiAgICAgaW50IGtpbmQxLCBraW5kMjsKICAgICB2b2lkICpkYXRhMSwgKmRhdGEyOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMiwgaTsKKyAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjIsIGxlbjsKKworICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLworICAgIGlmIChzdHIxID09IHN0cjIpCisgICAgICAgIHJldHVybiAwOwogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzdHIxKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN0cjIpOwpAQCAtMTA0MjIsMTkgKzEwNDM4LDEyMCBAQAogICAgIGRhdGEyID0gUHlVbmljb2RlX0RBVEEoc3RyMik7CiAgICAgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjEpOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIyKTsKKyAgICBsZW4gPSBQeV9NSU4obGVuMSwgbGVuMik7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuMSAmJiBpIDwgbGVuMjsgKytpKSB7Ci0gICAgICAgIFB5X1VDUzQgYzEsIGMyOwotICAgICAgICBjMSA9IFB5VW5pY29kZV9SRUFEKGtpbmQxLCBkYXRhMSwgaSk7Ci0gICAgICAgIGMyID0gUHlVbmljb2RlX1JFQUQoa2luZDIsIGRhdGEyLCBpKTsKLQotICAgICAgICBpZiAoYzEgIT0gYzIpCi0gICAgICAgICAgICByZXR1cm4gKGMxIDwgYzIpID8gLTEgOiAxOworICAgIHN3aXRjaChraW5kMSkgeworICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBzd2l0Y2goa2luZDIpIHsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGNtcCA9IG1lbWNtcChkYXRhMSwgZGF0YTIsIGxlbik7CisgICAgICAgICAgICAvKiBub3JtYWxpemUgcmVzdWx0IG9mIG1lbWNtcCgpIGludG8gdGhlIHJhbmdlIFstMTsgMV0gKi8KKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMSwgUHlfVUNTMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMSwgUHlfVUNTNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MyLCBQeV9VQ1MxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICB7CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzIsIFB5X1VDUzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMiwgUHlfVUNTNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1MxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1MyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgICAgICB7CisjaWYgZGVmaW5lZChIQVZFX1dNRU1DTVApICYmIFNJWkVPRl9XQ0hBUl9UID09IDQKKyAgICAgICAgICAgIGludCBjbXAgPSB3bWVtY21wKCh3Y2hhcl90ICopZGF0YTEsICh3Y2hhcl90ICopZGF0YTIsIGxlbik7CisgICAgICAgICAgICAvKiBub3JtYWxpemUgcmVzdWx0IG9mIHdtZW1jbXAoKSBpbnRvIHRoZSByYW5nZSBbLTE7IDFdICovCisgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzQsIFB5X1VDUzQpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIChsZW4xIDwgbGVuMikgPyAtMSA6IChsZW4xICE9IGxlbjIpOworICAgIGlmIChsZW4xID09IGxlbjIpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW4xIDwgbGVuMikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7CisKKyN1bmRlZiBDT01QQVJFCiB9CiAKK3N0YXRpYyBpbnQKK3VuaWNvZGVfY29tcGFyZV9lcShQeU9iamVjdCAqc3RyMSwgUHlPYmplY3QgKnN0cjIpCit7CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTEsICpkYXRhMjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgY21wOworCisgICAgLyogYSBzdHJpbmcgaXMgZXF1YWwgdG8gaXRzZWxmICovCisgICAgaWYgKHN0cjEgPT0gc3RyMikKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIxKTsKKyAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMikgIT0gbGVuKQorICAgICAgICByZXR1cm4gMDsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyMSk7CisgICAgaWYgKFB5VW5pY29kZV9LSU5EKHN0cjIpICE9IGtpbmQpCisgICAgICAgIHJldHVybiAwOworICAgIGRhdGExID0gUHlVbmljb2RlX0RBVEEoc3RyMSk7CisgICAgZGF0YTIgPSBQeVVuaWNvZGVfREFUQShzdHIyKTsKKworICAgIGNtcCA9IG1lbWNtcChkYXRhMSwgZGF0YTIsIGxlbiAqIGtpbmQpOworICAgIHJldHVybiAoY21wID09IDApOworfQorCisKIGludAogUHlVbmljb2RlX0NvbXBhcmUoUHlPYmplY3QgKmxlZnQsIFB5T2JqZWN0ICpyaWdodCkKIHsKQEAgLTEwNDU2LDI1ICsxMDU3Myw0MiBAQAogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOwogICAgIFB5X1VDUzQgY2hyOwogCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sodW5pKSk7CiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh1bmkpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CiAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaSk7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaSk7Ci0gICAgLyogQ29tcGFyZSBVbmljb2RlIHN0cmluZyBhbmQgc291cmNlIGNoYXJhY3RlciBzZXQgc3RyaW5nICovCi0gICAgZm9yIChpID0gMDsgKGNociA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKSAmJiBzdHJbaV07IGkrKykKLSAgICAgICAgaWYgKGNociAhPSBzdHJbaV0pCi0gICAgICAgICAgICByZXR1cm4gKGNociA8ICh1bnNpZ25lZCBjaGFyKShzdHJbaV0pKSA/IC0xIDogMTsKLSAgICAvKiBUaGlzIGNoZWNrIGtlZXBzIFB5dGhvbiBzdHJpbmdzIHRoYXQgZW5kIGluICdcMCcgZnJvbSBjb21wYXJpbmcgZXF1YWwKLSAgICAgdG8gQyBzdHJpbmdzIGlkZW50aWNhbCB1cCB0byB0aGF0IHBvaW50LiAqLwotICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmkpICE9IGkgfHwgY2hyKQotICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLwotICAgIGlmIChzdHJbaV0pCi0gICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLwotICAgIHJldHVybiAwOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmkpOworICAgICAgICBQeV9zc2l6ZV90IGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmkpOworICAgICAgICBzaXplX3QgbGVuLCBsZW4yID0gc3RybGVuKHN0cik7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgbGVuID0gUHlfTUlOKGxlbjEsIGxlbjIpOworICAgICAgICBjbXAgPSBtZW1jbXAoZGF0YSwgc3RyLCBsZW4pOworICAgICAgICBpZiAoY21wICE9IDApCisgICAgICAgICAgICByZXR1cm4gY21wOworICAgICAgICBpZiAobGVuMSA+IGxlbjIpCisgICAgICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLworICAgICAgICBpZiAobGVuMiA+IGxlbjEpCisgICAgICAgICAgICByZXR1cm4gLTE7IC8qIHN0ciBpcyBsb25nZXIgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB2b2lkICpkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pKTsKKyAgICAgICAgLyogQ29tcGFyZSBVbmljb2RlIHN0cmluZyBhbmQgc291cmNlIGNoYXJhY3RlciBzZXQgc3RyaW5nICovCisgICAgICAgIGZvciAoaSA9IDA7IChjaHIgPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkgJiYgc3RyW2ldOyBpKyspCisgICAgICAgICAgICBpZiAoY2hyICE9IHN0cltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGNociA8ICh1bnNpZ25lZCBjaGFyKShzdHJbaV0pKSA/IC0xIDogMTsKKyAgICAgICAgLyogVGhpcyBjaGVjayBrZWVwcyBQeXRob24gc3RyaW5ncyB0aGF0IGVuZCBpbiAnXDAnIGZyb20gY29tcGFyaW5nIGVxdWFsCisgICAgICAgICB0byBDIHN0cmluZ3MgaWRlbnRpY2FsIHVwIHRvIHRoYXQgcG9pbnQuICovCisgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmkpICE9IGkgfHwgY2hyKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHVuaSBpcyBsb25nZXIgKi8KKyAgICAgICAgaWYgKHN0cltpXSkKKyAgICAgICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiB9CiAKIApAQCAtMTA0ODUsMzYgKzEwNjE5LDI3IEBACiBQeVVuaWNvZGVfUmljaENvbXBhcmUoUHlPYmplY3QgKmxlZnQsIFB5T2JqZWN0ICpyaWdodCwgaW50IG9wKQogewogICAgIGludCByZXN1bHQ7CisgICAgUHlPYmplY3QgKnY7CiAKLSAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGxlZnQpICYmIFB5VW5pY29kZV9DaGVjayhyaWdodCkpIHsKLSAgICAgICAgUHlPYmplY3QgKnY7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobGVmdCkgPT0gLTEgfHwKLSAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEWShyaWdodCkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGxlZnQpICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJpZ2h0KSB8fAotICAgICAgICAgICAgUHlVbmljb2RlX0tJTkQobGVmdCkgIT0gUHlVbmljb2RlX0tJTkQocmlnaHQpKSB7Ci0gICAgICAgICAgICBpZiAob3AgPT0gUHlfRVEpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9GYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBQeV9ORSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfVHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobGVmdCkgfHwgIVB5VW5pY29kZV9DaGVjayhyaWdodCkpCisgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobGVmdCkgPT0gLTEgfHwKKyAgICAgICAgUHlVbmljb2RlX1JFQURZKHJpZ2h0KSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAob3AgPT0gUHlfRVEgfHwgb3AgPT0gUHlfTkUpIHsKKyAgICAgICAgcmVzdWx0ID0gdW5pY29kZV9jb21wYXJlX2VxKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgaWYgKG9wID09IFB5X0VRKQorICAgICAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSB1bmljb2RlX2NvbXBhcmUobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgdiA9IFRFU1RfQ09ORCghcmVzdWx0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IHVuaWNvZGVfY29tcGFyZShsZWZ0LCByaWdodCk7CiAKICAgICAgICAgLyogQ29udmVydCB0aGUgcmV0dXJuIHZhbHVlIHRvIGEgQm9vbGVhbiAqLwogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgUHlfRVE6Ci0gICAgICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCA9PSAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB5X05FOgotICAgICAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQgIT0gMCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQeV9MRToKICAgICAgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0IDw9IDApOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDUzMSwxOCArMTA2NTYsMTYgQEAKICAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgIHJldHVybiB2OwogICAgIH0KLQotICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKyAgICBQeV9JTkNSRUYodik7CisgICAgcmV0dXJuIHY7CiB9CiAKIGludAogUHlVbmljb2RlX0NvbnRhaW5zKFB5T2JqZWN0ICpjb250YWluZXIsIFB5T2JqZWN0ICplbGVtZW50KQogewogICAgIFB5T2JqZWN0ICpzdHIsICpzdWI7Ci0gICAgaW50IGtpbmQxLCBraW5kMiwga2luZDsKKyAgICBpbnQga2luZDEsIGtpbmQyOwogICAgIHZvaWQgKmJ1ZjEsICpidWYyOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBpbnQgcmVzdWx0OwpAQCAtMTA1NjEsMjMgKzEwNjg0LDE4IEBACiAgICAgICAgIFB5X0RFQ1JFRihzdWIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3ViKSA9PSAtMSB8fCBQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkgewotICAgICAgICBQeV9ERUNSRUYoc3ViKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgfQogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzdHIpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3ViKTsKLSAgICBraW5kID0ga2luZDE7CiAgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHN0cik7CiAgICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHN1Yik7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpIHsKLSAgICAgICAgaWYgKGtpbmQyID4ga2luZCkgeworICAgIGlmIChraW5kMiAhPSBraW5kMSkgeworICAgICAgICBpZiAoa2luZDIgPiBraW5kMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzdWIsIGtpbmQpOworICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3ViLCBraW5kMSk7CiAgICAgfQogICAgIGlmICghYnVmMikgewogICAgICAgICBQeV9ERUNSRUYoc3ViKTsKQEAgLTEwNTg3LDcgKzEwNzA1LDcgQEAKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3ViKTsKIAotICAgIHN3aXRjaCAoa2luZCkgeworICAgIHN3aXRjaCAoa2luZDEpIHsKICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgogICAgICAgICByZXN1bHQgPSB1Y3MxbGliX2ZpbmQoYnVmMSwgbGVuMSwgYnVmMiwgbGVuMiwgMCkgIT0gLTE7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA2MDUsNyArMTA3MjMsNyBAQAogICAgIFB5X0RFQ1JFRihzdHIpOwogICAgIFB5X0RFQ1JFRihzdWIpOwogCi0gICAgaWYgKGtpbmQyICE9IGtpbmQpCisgICAgaWYgKGtpbmQyICE9IGtpbmQxKQogICAgICAgICBQeU1lbV9GcmVlKGJ1ZjIpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEwNjgxLDcgKzEwNzk5LDggQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBsZWZ0ID0gKnBfbGVmdDsKLSAgICBpZiAocmlnaHQgPT0gTlVMTCB8fCBsZWZ0ID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVjayhsZWZ0KSkgeworICAgIGlmIChyaWdodCA9PSBOVUxMIHx8IGxlZnQgPT0gTlVMTAorICAgICAgICB8fCAhUHlVbmljb2RlX0NoZWNrKGxlZnQpIHx8ICFQeVVuaWNvZGVfQ2hlY2socmlnaHQpKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTA3MjEsMTUgKzEwODQwLDkgQEAKICAgICAgICAgJiYgIShQeVVuaWNvZGVfSVNfQVNDSUkobGVmdCkgJiYgIVB5VW5pY29kZV9JU19BU0NJSShyaWdodCkpKQogICAgIHsKICAgICAgICAgLyogYXBwZW5kIGlucGxhY2UgKi8KLSAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKHBfbGVmdCwgbmV3X2xlbikgIT0gMCkgewotICAgICAgICAgICAgLyogWFhYIGlmIF9QeVVuaWNvZGVfUmVzaXplKCkgZmFpbHMsICdsZWZ0JyBoYXMgYmVlbgotICAgICAgICAgICAgICogZGVhbGxvY2F0ZWQgc28gaXQgY2Fubm90IGJlIHB1dCBiYWNrIGludG8KLSAgICAgICAgICAgICAqICd2YXJpYWJsZScuICBUaGUgTWVtb3J5RXJyb3IgaXMgcmFpc2VkIHdoZW4gdGhlcmUKLSAgICAgICAgICAgICAqIGlzIG5vIHZhbHVlIGluICd2YXJpYWJsZScsIHdoaWNoIG1pZ2h0ICh2ZXJ5Ci0gICAgICAgICAgICAgKiByZW1vdGVseSkgYmUgYSBjYXVzZSBvZiBpbmNvbXBhdGliaWxpdGllcy4KLSAgICAgICAgICAgICAqLworICAgICAgICBpZiAodW5pY29kZV9yZXNpemUocF9sZWZ0LCBuZXdfbGVuKSAhPSAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQorCiAgICAgICAgIC8qIGNvcHkgJ3JpZ2h0JyBpbnRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgYXJlYSBvZiAnbGVmdCcgKi8KICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoKnBfbGVmdCwgbGVmdF9sZW4sIHJpZ2h0LCAwLCByaWdodF9sZW4pOwogICAgIH0KQEAgLTEwNzg1LDggKzEwODk4LDEwIEBACiAKICAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHNlbGYpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3Vic3RyaW5nKTsKLSAgICBpZiAoa2luZDIgPiBraW5kMSkKKyAgICBpZiAoa2luZDIgPiBraW5kMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICB9CiAgICAga2luZCA9IGtpbmQxOwogICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKICAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3Vic3RyaW5nKTsKQEAgLTEwOTY0LDEwICsxMTA3OSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKDEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTExMDkwLDEwICsxMTIwOSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKDEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTExNjIzLDYgKzExNzQ2LDcgQEAKICAgICBpbnQga2luZDsKICAgICBQeV9zc2l6ZV90IGksIGosIGxlbjsKICAgICBCTE9PTV9NQVNLIHNlcG1hc2s7CisgICAgUHlfc3NpemVfdCBzZXBsZW47CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xIHx8IFB5VW5pY29kZV9SRUFEWShzZXBvYmopID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTExNjMwLDI0ICsxMTc1NCwzNSBAQAogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7CisgICAgc2VwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKTsKICAgICBzZXBtYXNrID0gbWFrZV9ibG9vbV9tYXNrKFB5VW5pY29kZV9LSU5EKHNlcG9iaiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfREFUQShzZXBvYmopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBsZW4pOwogCiAgICAgaSA9IDA7CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmCi0gICAgICAgICAgICAgICBCTE9PTV9NRU1CRVIoc2VwbWFzaywgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSksIHNlcG9iaikpIHsKKyAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQogICAgIH0KIAogICAgIGogPSBsZW47CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBqLS07CisgICAgICAgIHdoaWxlIChqID49IGkpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGotLTsKLSAgICAgICAgfSB3aGlsZSAoaiA+PSBpICYmCi0gICAgICAgICAgICAgICAgIEJMT09NX01FTUJFUihzZXBtYXNrLCBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKSwgc2Vwb2JqKSk7CisgICAgICAgIH0KKwogICAgICAgICBqKys7CiAgICAgfQogCkBAIC0xMTY5NCwzMCArMTE4MjksNjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkb19zdHJpcChQeU9iamVjdCAqc2VsZiwgaW50IHN0cmlwdHlwZSkKIHsKLSAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYpOwogCi0gICAgaSA9IDA7Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIFB5X1VOSUNPREVfSVNTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkpIHsKLSAgICAgICAgICAgIGkrKzsKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHNlbGYpKSB7CisgICAgICAgIFB5X1VDUzEgKmRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZWxmKTsKKworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2ldOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBqID0gbGVuOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgeworICAgICAgICAgICAgai0tOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2pdOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqKys7CiAgICAgICAgIH0KICAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKIAotICAgIGogPSBsZW47Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGogPSBsZW47CisgICAgICAgIGlmIChzdHJpcHR5cGUgIT0gTEVGVFNUUklQKSB7CiAgICAgICAgICAgICBqLS07Ci0gICAgICAgIH0gd2hpbGUgKGogPj0gaSAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaikpKTsKLSAgICAgICAgaisrOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBQeVVuaWNvZGVfU3Vic3RyaW5nKHNlbGYsIGksIGopOwpAQCAtMTE3MjksNyArMTE4OTcsNyBAQAogewogICAgIFB5T2JqZWN0ICpzZXAgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIChjaGFyICopc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzZXAgIT0gTlVMTCAmJiBzZXAgIT0gUHlfTm9uZSkgewpAQCAtMTE5NDEsNyArMTIxMDksNyBAQAogICAgIFB5X3NzaXplX3QgaXNpemU7CiAgICAgUHlfc3NpemVfdCBvc2l6ZSwgc3F1b3RlLCBkcXVvdGUsIGksIG87CiAgICAgUHlfVUNTNCBtYXgsIHF1b3RlOwotICAgIGludCBpa2luZCwgb2tpbmQ7CisgICAgaW50IGlraW5kLCBva2luZCwgdW5jaGFuZ2VkOwogICAgIHZvaWQgKmlkYXRhLCAqb2RhdGE7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQpAQCAtMTE5NTIsNyArMTIxMjAsNyBAQAogCiAgICAgLyogQ29tcHV0ZSBsZW5ndGggb2Ygb3V0cHV0LCBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQKICAgICAgICBtYXhpbXVtIGNoYXJhY3RlciAqLwotICAgIG9zaXplID0gMjsgLyogcXVvdGVzICovCisgICAgb3NpemUgPSAwOwogICAgIG1heCA9IDEyNzsKICAgICBzcXVvdGUgPSBkcXVvdGUgPSAwOwogICAgIGlraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CkBAIC0xMTk4Myw3ICsxMjE1MSw5IEBACiAgICAgfQogCiAgICAgcXVvdGUgPSAnXCcnOworICAgIHVuY2hhbmdlZCA9IChvc2l6ZSA9PSBpc2l6ZSk7CiAgICAgaWYgKHNxdW90ZSkgeworICAgICAgICB1bmNoYW5nZWQgPSAwOwogICAgICAgICBpZiAoZHF1b3RlKQogICAgICAgICAgICAgLyogQm90aCBzcXVvdGUgYW5kIGRxdW90ZSBwcmVzZW50LiBVc2Ugc3F1b3RlLAogICAgICAgICAgICAgICAgYW5kIGVzY2FwZSB0aGVtICovCkBAIC0xMTk5MSw2ICsxMjE2MSw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHF1b3RlID0gJyInOwogICAgIH0KKyAgICBvc2l6ZSArPSAyOyAgIC8qIHF1b3RlcyAqLwogCiAgICAgcmVwciA9IFB5VW5pY29kZV9OZXcob3NpemUsIG1heCk7CiAgICAgaWYgKHJlcHIgPT0gTlVMTCkKQEAgLTEyMDAwLDgxICsxMjE3MSw4NyBAQAogCiAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgMCwgcXVvdGUpOwogICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG9zaXplLTEsIHF1b3RlKTsKKyAgICBpZiAodW5jaGFuZ2VkKSB7CisgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcHIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDAsIG8gPSAxOyBpIDwgaXNpemU7IGkrKykgeworICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7CiAKLSAgICBmb3IgKGkgPSAwLCBvID0gMTsgaSA8IGlzaXplOyBpKyspIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7Ci0KLSAgICAgICAgLyogRXNjYXBlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgKi8KLSAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBzcGVjaWFsIHdoaXRlc3BhY2UgdG8gJ1x0JywgXG4nLCAnXHInICovCi0gICAgICAgIGlmIChjaCA9PSAnXHQnKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndCcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoID09ICdcbicpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xyJykgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3InKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLwotICAgICAgICBlbHNlIGlmIChjaCA8ICcgJyB8fCBjaCA9PSAweDdGKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgIGVsc2UgaWYgKGNoIDwgMHg3RikgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBOb24tQVNDSUkgY2hhcmFjdGVycyAqLwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIE1hcCBVbmljb2RlIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgKGNhdGVnb3JpZXMgWiogYW5kIEMqIGV4Y2VwdCBBU0NJSSBzcGFjZSkKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNQUklOVEFCTEUoY2gpKSB7CisgICAgICAgICAgICAvKiBFc2NhcGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyAqLworICAgICAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPD0gMHhmZikgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA8PSAweGZmZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndScpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogTWFwIDIxLWJpdCBjaGFyYWN0ZXJzIHRvICdcVTAweHh4eHh4JyAqLwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdVJyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjApICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxNikgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogTWFwIHNwZWNpYWwgd2hpdGVzcGFjZSB0byAnXHQnLCBcbicsICdccicgKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd0Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXHInKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdyJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAnICcgfHwgY2ggPT0gMHg3RikgeworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENvcHkgQVNDSUkgY2hhcmFjdGVycyBhcy1pcyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweDdGKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE5vbi1BU0NJSSBjaGFyYWN0ZXJzICovCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBNYXAgVW5pY29kZSB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcmllcyBaKiBhbmQgQyogZXhjZXB0IEFTQ0lJIHNwYWNlKQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTUFJJTlRBQkxFKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDw9IDB4ZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3gnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweDAwMEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPD0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd1Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMjEtYml0IGNoYXJhY3RlcnMgdG8gJ1xVMDB4eHh4eHgnICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnVScpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI4KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDIwKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDE2KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDgpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEyMTA0LDEwICsxMjI4MSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKC0xLCBzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQpOwogCkBAIC0xMjEzNiwxMCArMTIzMTcsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBhbnlfZmluZF9zbGljZSgtMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTI0OTYsMjggKzEyNjgxLDc2IEBACiAgICAgcmV0dXJuIGNhc2Vfb3BlcmF0aW9uKHNlbGYsIGRvX3N3YXBjYXNlKTsKIH0KIAotUHlEb2NfU1RSVkFSKG1ha2V0cmFuc19fZG9jX18sCi0gICAgICAgICAgICAgInN0ci5tYWtldHJhbnMoeFssIHlbLCB6XV0pIC0+IGRpY3QgKHN0YXRpYyBtZXRob2QpXG5cCi1cblwKLVJldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3Igc3RyLnRyYW5zbGF0ZSgpLlxuXAotSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgVW5pY29kZVxuXAotb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS5cblwKLUNoYXJhY3RlciBrZXlzIHdpbGwgYmUgdGhlbiBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cCi1JZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLCBhbmRcblwKLWluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGVcblwKLWNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiBJZiB0aGVyZSBpcyBhIHRoaXJkIGFyZ3VtZW50LCBpdFxuXAotbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0byBOb25lIGluIHRoZSByZXN1bHQuIik7CisvKltjbGluaWNdCittb2R1bGUgc3RyCiAKLXN0YXRpYyBQeU9iamVjdCoKK0BzdGF0aWNtZXRob2QKK3N0ci5tYWtldHJhbnMgYXMgdW5pY29kZV9tYWtldHJhbnMKKworICB4OiBvYmplY3QKKworICB5OiB1bmljb2RlPU5VTEwKKworICB6OiB1bmljb2RlPU5VTEwKKworICAvCisKK1JldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3Igc3RyLnRyYW5zbGF0ZSgpLgorCitJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBVbmljb2RlCitvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBOb25lLgorQ2hhcmFjdGVyIGtleXMgd2lsbCBiZSB0aGVuIGNvbnZlcnRlZCB0byBvcmRpbmFscy4KK0lmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsIGFuZAoraW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkIHRvIHRoZQorY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuIElmIHRoZXJlIGlzIGEgdGhpcmQgYXJndW1lbnQsIGl0CittdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVfbWFrZXRyYW5zX19kb2NfXywKKyJSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS5cbiIKKyJcbiIKKyJzdHIubWFrZXRyYW5zKHgsIHk9Tm9uZSwgej1Ob25lKVxuIgorIlxuIgorIklmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVuaWNvZGVcbiIKKyJvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBOb25lLlxuIgorIkNoYXJhY3RlciBrZXlzIHdpbGwgYmUgdGhlbiBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG4iCisiSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCwgYW5kXG4iCisiaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkIHRvIHRoZVxuIgorImNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiBJZiB0aGVyZSBpcyBhIHRoaXJkIGFyZ3VtZW50LCBpdFxuIgorIm11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG8gTm9uZSBpbiB0aGUgcmVzdWx0LiIpOworCisjZGVmaW5lIFVOSUNPREVfTUFLRVRSQU5TX01FVEhPRERFRiAgICBcCisgICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pdW5pY29kZV9tYWtldHJhbnMsIE1FVEhfVkFSQVJHU3xNRVRIX1NUQVRJQywgdW5pY29kZV9tYWtldHJhbnNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfbWFrZXRyYW5zX2ltcGwoUHlPYmplY3QgKngsIFB5T2JqZWN0ICp5LCBQeU9iamVjdCAqeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCiB1bmljb2RlX21ha2V0cmFucyhQeU9iamVjdCAqbnVsbCwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKngsICp5ID0gTlVMTCwgKnogPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICp4OworICAgIFB5T2JqZWN0ICp5ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqeiA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk98VVU6bWFrZXRyYW5zIiwKKyAgICAgICAgJngsICZ5LCAmeikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlX21ha2V0cmFuc19pbXBsKHgsIHksIHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlX21ha2V0cmFuc19pbXBsKFB5T2JqZWN0ICp4LCBQeU9iamVjdCAqeSwgUHlPYmplY3QgKnopCisvKltjbGluaWMgY2hlY2tzdW06IDEzN2RiOWMzMTk5ZTc5MDZiNzk2NzAwOWY1MTFjMjRmYTMyMzViNWZdKi8KK3sKICAgICBQeU9iamVjdCAqbmV3ID0gTlVMTCwgKmtleSwgKnZhbHVlOwogICAgIFB5X3NzaXplX3QgaSA9IDA7CiAgICAgaW50IHJlczsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xVVTptYWtldHJhbnMiLCAmeCwgJnksICZ6KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmV3ID0gUHlEaWN0X05ldygpOwogICAgIGlmICghbmV3KQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEyNzI4LDYgKzEyOTYxLDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsIC0xKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKICAgICAgICAgICAgIH0KQEAgLTEyNzQ0LDYgKzEyOTc5LDggQEAKICAgICB9CiAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgLTEpOwogICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKIH0KIApAQCAtMTI3NzcsNiArMTMwMTQsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgKzEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogICAgICAgICAgICAgfQpAQCAtMTI3OTIsMjcgKzEzMDMxLDM1IEBACiAgICAgfQogICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsICsxKTsKICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlc3VsdCk7CiB9CiAKIFB5X0xPQ0FMX0lOTElORSh2b2lkKQogX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewotICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBpZiAoIXdyaXRlci0+cmVhZG9ubHkpCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLyogQ29weS1vbi13cml0ZSBtb2RlOiBzZXQgYnVmZmVyIHNpemUgdG8gMCBzbworICAgICAgICAgKiBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoKSB3aWxsIGNvcHkgKGFuZCBlbmxhcmdlKSB0aGUgYnVmZmVyIG9uCisgICAgICAgICAqIG5leHQgd3JpdGUuICovCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IDA7CisgICAgfQogICAgIHdyaXRlci0+bWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh3cml0ZXItPmJ1ZmZlcik7CiAgICAgd3JpdGVyLT5kYXRhID0gUHlVbmljb2RlX0RBVEEod3JpdGVyLT5idWZmZXIpOwogICAgIHdyaXRlci0+a2luZCA9IFB5VW5pY29kZV9LSU5EKHdyaXRlci0+YnVmZmVyKTsKIH0KIAogdm9pZAotX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfc3NpemVfdCBtaW5fbGVuZ3RoKQorX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICBtZW1zZXQod3JpdGVyLCAwLCBzaXplb2YoKndyaXRlcikpOwogI2lmZGVmIFB5X0RFQlVHCiAgICAgd3JpdGVyLT5raW5kID0gNTsgICAgLyogaW52YWxpZCBraW5kICovCiAjZW5kaWYKLSAgICB3cml0ZXItPm1pbl9sZW5ndGggPSBQeV9NQVgobWluX2xlbmd0aCwgMTAwKTsKLSAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IChtaW5fbGVuZ3RoID4gMCk7CisgICAgd3JpdGVyLT5taW5fY2hhciA9IDEyNzsKIH0KIAogaW50CkBAIC0xMjgzMCwyOSArMTMwNzcsMjggQEAKICAgICB9CiAgICAgbmV3bGVuID0gd3JpdGVyLT5wb3MgKyBsZW5ndGg7CiAKKyAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHdyaXRlci0+bWluX2NoYXIpOworCiAgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7CisgICAgICAgIGFzc2VydCghd3JpdGVyLT5yZWFkb25seSk7CisgICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZSAmJiBuZXdsZW4gPD0gKFBZX1NTSVpFX1RfTUFYIC0gbmV3bGVuIC8gNCkpIHsKICAgICAgICAgICAgIC8qIG92ZXJhbGxvY2F0ZSAyNSUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZXNpemUgKi8KLSAgICAgICAgICAgIGlmIChuZXdsZW4gPD0gKFBZX1NTSVpFX1RfTUFYIC0gbmV3bGVuIC8gNCkpCi0gICAgICAgICAgICAgICAgbmV3bGVuICs9IG5ld2xlbiAvIDQ7Ci0gICAgICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQotICAgICAgICAgICAgICAgIG5ld2xlbiA9IHdyaXRlci0+bWluX2xlbmd0aDsKKyAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyA0OwogICAgICAgICB9CisgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCisgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBQeVVuaWNvZGVfTmV3KG5ld2xlbiwgbWF4Y2hhcik7CiAgICAgICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwotICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBpZiAobmV3bGVuID4gd3JpdGVyLT5zaXplKSB7Ci0gICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZSkgeworICAgIGVsc2UgaWYgKG5ld2xlbiA+IHdyaXRlci0+c2l6ZSkgeworICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUgJiYgbmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIDQpKSB7CiAgICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgMjUlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVzaXplICovCi0gICAgICAgICAgICBpZiAobmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIDQpKQotICAgICAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyA0OwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8IHdyaXRlci0+bWluX2xlbmd0aCkKLSAgICAgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gNDsKICAgICAgICAgfQorICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQorICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOwogCiAgICAgICAgIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyIHx8IHdyaXRlci0+cmVhZG9ubHkpIHsKICAgICAgICAgICAgIC8qIHJlc2l6ZSArIHdpZGVuICovCkBAIC0xMjg3MCw3ICsxMzExNiw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gbmV3YnVmZmVyOwotICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwogICAgIH0KICAgICBlbHNlIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyKSB7CiAgICAgICAgIGFzc2VydCghd3JpdGVyLT5yZWFkb25seSk7CkBAIC0xMjg4MSwxMSArMTMxMjYsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5idWZmZXIsIDAsIHdyaXRlci0+cG9zKTsKICAgICAgICAgUHlfREVDUkVGKHdyaXRlci0+YnVmZmVyKTsKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7Ci0gICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgfQorICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgcmV0dXJuIDA7CiB9CiAKK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIDEsIGNoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBjaCk7CisgICAgd3JpdGVyLT5wb3MrKzsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgY2gpOworfQorCiBpbnQKIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyKQogewpAQCAtMTI5MDAsMTEgKzEzMTYxLDEwIEBACiAgICAgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpOwogICAgIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyIHx8IGxlbiA+IHdyaXRlci0+c2l6ZSAtIHdyaXRlci0+cG9zKSB7CiAgICAgICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMICYmICF3cml0ZXItPm92ZXJhbGxvY2F0ZSkgeworICAgICAgICAgICAgd3JpdGVyLT5yZWFkb25seSA9IDE7CiAgICAgICAgICAgICBQeV9JTkNSRUYoc3RyKTsKICAgICAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gc3RyOwogICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKLSAgICAgICAgICAgIHdyaXRlci0+cmVhZG9ubHkgPSAxOwotICAgICAgICAgICAgd3JpdGVyLT5zaXplID0gMDsKICAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IGxlbjsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMjkxNywyOCArMTMxNzcsODIgQEAKICAgICByZXR1cm4gMDsKIH0KIAoraW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3Vic3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCit7CisgICAgUHlfVUNTNCBtYXhjaGFyOworICAgIFB5X3NzaXplX3QgbGVuOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBhc3NlcnQoMCA8PSBzdGFydCk7CisgICAgYXNzZXJ0KGVuZCA8PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpKTsKKyAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKKworICAgIGlmIChlbmQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSkKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBzdHIpOworCisgICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpID4gd3JpdGVyLT5tYXhjaGFyKQorICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcihzdHIsIHN0YXJ0LCBlbmQpOworICAgIGVsc2UKKyAgICAgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKyAgICBsZW4gPSBlbmQgLSBzdGFydDsKKworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIG1heGNoYXIpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgc3RhcnQsIGxlbik7CisgICAgd3JpdGVyLT5wb3MgKz0gbGVuOworICAgIHJldHVybiAwOworfQorCitpbnQKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDc3RyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgY29uc3QgY2hhciAqc3RyLCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisKKyAgICBtYXhjaGFyID0gdWNzMWxpYl9maW5kX21heF9jaGFyKChQeV9VQ1MxKilzdHIsIChQeV9VQ1MxKilzdHIgKyBsZW4pOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIG1heGNoYXIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgdW5pY29kZV93cml0ZV9jc3RyKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgc3RyLCBsZW4pOworICAgIHdyaXRlci0+cG9zICs9IGxlbjsKKyAgICByZXR1cm4gMDsKK30KKwogUHlPYmplY3QgKgogX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogeworICAgIFB5T2JqZWN0ICpzdHI7CiAgICAgaWYgKHdyaXRlci0+cG9zID09IDApIHsKLSAgICAgICAgUHlfWERFQ1JFRih3cml0ZXItPmJ1ZmZlcik7CisgICAgICAgIFB5X0NMRUFSKHdyaXRlci0+YnVmZmVyKTsKICAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgfQogICAgIGlmICh3cml0ZXItPnJlYWRvbmx5KSB7Ci0gICAgICAgIGFzc2VydChQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcikgPT0gd3JpdGVyLT5wb3MpOwotICAgICAgICByZXR1cm4gd3JpdGVyLT5idWZmZXI7CisgICAgICAgIHN0ciA9IHdyaXRlci0+YnVmZmVyOworICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IE5VTEw7CisgICAgICAgIGFzc2VydChQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpID09IHdyaXRlci0+cG9zKTsKKyAgICAgICAgcmV0dXJuIHN0cjsKICAgICB9CiAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKSAhPSB3cml0ZXItPnBvcykgewogICAgICAgICBQeU9iamVjdCAqbmV3YnVmZmVyOwogICAgICAgICBuZXdidWZmZXIgPSByZXNpemVfY29tcGFjdCh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MpOwogICAgICAgICBpZiAobmV3YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih3cml0ZXItPmJ1ZmZlcik7CisgICAgICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IE5VTEw7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IG5ld2J1ZmZlcjsKICAgICB9Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh3cml0ZXItPmJ1ZmZlciwgMSkpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdF9yZWFkeSh3cml0ZXItPmJ1ZmZlcik7CisgICAgc3RyID0gd3JpdGVyLT5idWZmZXI7CisgICAgd3JpdGVyLT5idWZmZXIgPSBOVUxMOworICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSk7CisgICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0X3JlYWR5KHN0cik7CiB9CiAKIHZvaWQKQEAgLTEyOTczLDcgKzEzMjg3LDcgQEAKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5VW5pY29kZV9Gb3JtYXRBZHZhbmNlZFdyaXRlcigmd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgZm9ybWF0X3NwZWMsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChmb3JtYXRfc3BlYykpOwpAQCAtMTMwNzYsOCArMTMzOTAsNyBAQAogICAgIHsiZm9ybWF0IiwgKFB5Q0Z1bmN0aW9uKSBkb19zdHJpbmdfZm9ybWF0LCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBmb3JtYXRfX2RvY19ffSwKICAgICB7ImZvcm1hdF9tYXAiLCAoUHlDRnVuY3Rpb24pIGRvX3N0cmluZ19mb3JtYXRfbWFwLCBNRVRIX08sIGZvcm1hdF9tYXBfX2RvY19ffSwKICAgICB7Il9fZm9ybWF0X18iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfX2Zvcm1hdF9fLCBNRVRIX1ZBUkFSR1MsIHBfZm9ybWF0X19kb2NfX30sCi0gICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfbWFrZXRyYW5zLAotICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX1NUQVRJQywgbWFrZXRyYW5zX19kb2NfX30sCisgICAgVU5JQ09ERV9NQUtFVFJBTlNfTUVUSE9EREVGCiAgICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX19zaXplb2ZfXywgTUVUSF9OT0FSR1MsIHNpemVvZl9fZG9jX199LAogI2lmIDAKICAgICAvKiBUaGVzZSBtZXRob2RzIGFyZSBqdXN0IHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgaW1wbGVtZW50YXRpb24uICovCkBAIC0xMzE5MiwxNiArMTM1MDUsMzkgQEAKIAogLyogSGVscGVycyBmb3IgUHlVbmljb2RlX0Zvcm1hdCgpICovCiAKK3N0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90IHsKKyAgICBQeU9iamVjdCAqYXJnczsKKyAgICBpbnQgYXJnc19vd25lZDsKKyAgICBQeV9zc2l6ZV90IGFyZ2xlbiwgYXJnaWR4OworICAgIFB5T2JqZWN0ICpkaWN0OworCisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBmbXRraW5kOworICAgIFB5X3NzaXplX3QgZm10Y250LCBmbXRwb3M7CisgICAgdm9pZCAqZm10ZGF0YTsKKyAgICBQeU9iamVjdCAqZm10c3RyOworCisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Cit9OworCitzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgeworICAgIFB5X1VDUzQgY2g7CisgICAgaW50IGZsYWdzOworICAgIFB5X3NzaXplX3Qgd2lkdGg7CisgICAgaW50IHByZWM7CisgICAgaW50IHNpZ247Cit9OworCiBzdGF0aWMgUHlPYmplY3QgKgotZ2V0bmV4dGFyZyhQeU9iamVjdCAqYXJncywgUHlfc3NpemVfdCBhcmdsZW4sIFB5X3NzaXplX3QgKnBfYXJnaWR4KQordW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4KQogewotICAgIFB5X3NzaXplX3QgYXJnaWR4ID0gKnBfYXJnaWR4OwotICAgIGlmIChhcmdpZHggPCBhcmdsZW4pIHsKLSAgICAgICAgKCpwX2FyZ2lkeCkrKzsKLSAgICAgICAgaWYgKGFyZ2xlbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gYXJnczsKKyAgICBQeV9zc2l6ZV90IGFyZ2lkeCA9IGN0eC0+YXJnaWR4OworCisgICAgaWYgKGFyZ2lkeCA8IGN0eC0+YXJnbGVuKSB7CisgICAgICAgIGN0eC0+YXJnaWR4Kys7CisgICAgICAgIGlmIChjdHgtPmFyZ2xlbiA8IDApCisgICAgICAgICAgICByZXR1cm4gY3R4LT5hcmdzOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIGFyZ2lkeCk7CisgICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGN0eC0+YXJncywgYXJnaWR4KTsKICAgICB9CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmb3JtYXQgc3RyaW5nIik7CkBAIC0xMzIxMCwyMyArMTM1NDYsMzQgQEAKIAogLyogUmV0dXJucyBhIG5ldyByZWZlcmVuY2UgdG8gYSBQeVVuaWNvZGUgb2JqZWN0LCBvciBOVUxMIG9uIGZhaWx1cmUuICovCiAKKy8qIEZvcm1hdCBhIGZsb2F0IGludG8gdGhlIHdyaXRlciBpZiB0aGUgd3JpdGVyIGlzIG5vdCBOVUxMLCBvciBpbnRvICpwX291dHB1dAorICAgb3RoZXJ3aXNlLgorCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KIHN0YXRpYyBpbnQKLWZvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBpbnQgZmxhZ3MsIGludCBwcmVjLCBpbnQgdHlwZSwKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK2Zvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CiAgICAgY2hhciAqcDsKICAgICBkb3VibGUgeDsKICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgcHJlYzsKKyAgICBpbnQgZHRvYV9mbGFnczsKIAogICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKHYpOwogICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgcHJlYyA9IGFyZy0+cHJlYzsKICAgICBpZiAocHJlYyA8IDApCiAgICAgICAgIHByZWMgPSA2OwogCi0gICAgcCA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh4LCB0eXBlLCBwcmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgRl9BTFQpID8gUHlfRFRTRl9BTFQgOiAwLCBOVUxMKTsKKyAgICBpZiAoYXJnLT5mbGFncyAmIEZfQUxUKQorICAgICAgICBkdG9hX2ZsYWdzID0gUHlfRFRTRl9BTFQ7CisgICAgZWxzZQorICAgICAgICBkdG9hX2ZsYWdzID0gMDsKKyAgICBwID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsIGFyZy0+Y2gsIHByZWMsIGR0b2FfZmxhZ3MsIE5VTEwpOwogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBsZW4gPSBzdHJsZW4ocCk7CkBAIC0xMzI2Myw3ICsxMzYxMCw3IEBACiAgKiBwcm9kdWNlIGEgJy0nIHNpZ24sIGJ1dCBjYW4gZm9yIFB5dGhvbidzIHVuYm91bmRlZCBpbnRzLgogICovCiBzdGF0aWMgUHlPYmplY3QqCi1mb3JtYXRsb25nKFB5T2JqZWN0ICp2YWwsIGludCBmbGFncywgaW50IHByZWMsIGludCB0eXBlKQorZm9ybWF0bG9uZyhQeU9iamVjdCAqdmFsLCBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBjaGFyICpidWY7CkBAIC0xMzI3Myw2ICsxMzYyMCw4IEBACiAgICAgUHlfc3NpemVfdCBsbGVuOwogICAgIGludCBudW1kaWdpdHM7ICAgICAgLyogbGVuID09IG51bW5vbmRpZ2l0cyArIG51bWRpZ2l0cyAqLwogICAgIGludCBudW1ub25kaWdpdHMgPSAwOworICAgIGludCBwcmVjID0gYXJnLT5wcmVjOworICAgIGludCB0eXBlID0gYXJnLT5jaDsKIAogICAgIC8qIEF2b2lkIGV4Y2VlZGluZyBTU0laRV9UX01BWCAqLwogICAgIGlmIChwcmVjID4gSU5UX01BWC0zKSB7CkBAIC0xMzI4NCwxMyArMTM2MzMsMTQgQEAKICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHZhbCkpOwogCiAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCEiJ3R5cGUnIG5vdCBpbiBbZGl1b3hYXSIpOwogICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ2knOgogICAgIGNhc2UgJ3UnOgotICAgICAgICAvKiBTcGVjaWFsLWNhc2UgYm9vbGVhbjogd2Ugd2FudCAwLzEgKi8KLSAgICAgICAgaWYgKFB5Qm9vbF9DaGVjayh2YWwpKQotICAgICAgICAgICAgcmVzdWx0ID0gUHlOdW1iZXJfVG9CYXNlKHZhbCwgMTApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBQeV9UWVBFKHZhbCktPnRwX3N0cih2YWwpOworICAgICAgICAvKiBpbnQgYW5kIGludCBzdWJjbGFzc2VzIHNob3VsZCBwcmludCBudW1lcmljYWxseSB3aGVuIGEgbnVtZXJpYyAqLworICAgICAgICAvKiBmb3JtYXQgY29kZSBpcyB1c2VkIChzZWUgaXNzdWUxODc4MCkgKi8KKyAgICAgICAgcmVzdWx0ID0gUHlOdW1iZXJfVG9CYXNlKHZhbCwgMTApOwogICAgICAgICBicmVhazsKICAgICBjYXNlICdvJzoKICAgICAgICAgbnVtbm9uZGlnaXRzID0gMjsKQEAgLTEzMzAxLDggKzEzNjUxLDYgQEAKICAgICAgICAgbnVtbm9uZGlnaXRzID0gMjsKICAgICAgICAgcmVzdWx0ID0gUHlOdW1iZXJfVG9CYXNlKHZhbCwgMTYpOwogICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoISIndHlwZScgbm90IGluIFtkdW94WF0iKTsKICAgICB9CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTMzMTMsMTIgKzEzNjYxLDE0IEBACiAKICAgICAvKiBUbyBtb2RpZnkgdGhlIHN0cmluZyBpbi1wbGFjZSwgdGhlcmUgY2FuIG9ubHkgYmUgb25lIHJlZmVyZW5jZS4gKi8KICAgICBpZiAoUHlfUkVGQ05UKHJlc3VsdCkgIT0gMSkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBidWYgPSBQeVVuaWNvZGVfREFUQShyZXN1bHQpOwogICAgIGxsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXN1bHQpOwogICAgIGlmIChsbGVuID4gSU5UX01BWCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsYXJnZSBpbiBfUHlCeXRlc19Gb3JtYXRMb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTMzMzAsNyArMTM2ODAsNyBAQAogICAgIGFzc2VydChudW1kaWdpdHMgPiAwKTsKIAogICAgIC8qIEdldCByaWQgb2YgYmFzZSBtYXJrZXIgdW5sZXNzIEZfQUxUICovCi0gICAgaWYgKCgoZmxhZ3MgJiBGX0FMVCkgPT0gMCAmJgorICAgIGlmICgoKGFyZy0+ZmxhZ3MgJiBGX0FMVCkgPT0gMCAmJgogICAgICAgICAodHlwZSA9PSAnbycgfHwgdHlwZSA9PSAneCcgfHwgdHlwZSA9PSAnWCcpKSkgewogICAgICAgICBhc3NlcnQoYnVmW3NpZ25dID09ICcwJyk7CiAgICAgICAgIGFzc2VydChidWZbc2lnbisxXSA9PSAneCcgfHwgYnVmW3NpZ24rMV0gPT0gJ1gnIHx8CkBAIC0xMzM3NSwxNSArMTM3MjUsMTAwIEBACiAgICAgICAgICAgICBpZiAoYnVmW2ldID49ICdhJyAmJiBidWZbaV0gPD0gJ3gnKQogICAgICAgICAgICAgICAgIGJ1ZltpXSAtPSAnYSctJ0EnOwogICAgIH0KLSAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhyZXN1bHQpIHx8IGxlbiAhPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXN1bHQpKSB7CisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2socmVzdWx0KQorICAgICAgICB8fCBidWYgIT0gUHlVbmljb2RlX0RBVEEocmVzdWx0KSkgewogICAgICAgICBQeU9iamVjdCAqdW5pY29kZTsKICAgICAgICAgdW5pY29kZSA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGJ1ZiwgbGVuKTsKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJlc3VsdCA9IHVuaWNvZGU7CiAgICAgfQorICAgIGVsc2UgaWYgKGxlbiAhPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXN1bHQpKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZyZXN1bHQsIGxlbikgPCAwKQorICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLyogRm9ybWF0IGFuIGludGVnZXIuCisgKiBSZXR1cm4gMSBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIHRoZSB3cml0ZXIsCisgKiAgICAgICAgMCBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvICpwX291dHB1dAorICogICAgICAgLTEgYW5kIHJhaXNlIGFuIGV4Y2VwdGlvbiBvbiBlcnJvciAqLworc3RhdGljIGludAorbWFpbmZvcm1hdGxvbmcoUHlPYmplY3QgKnYsCisgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCit7CisgICAgUHlPYmplY3QgKmlvYmosICpyZXM7CisgICAgY2hhciB0eXBlID0gKGNoYXIpYXJnLT5jaDsKKworICAgIGlmICghUHlOdW1iZXJfQ2hlY2sodikpCisgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworCisgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7CisgICAgICAgIGlmIChpb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgZ290byB3cm9uZ3R5cGU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KFB5TG9uZ19DaGVjayhpb2JqKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpb2JqID0gdjsKKyAgICAgICAgUHlfSU5DUkVGKGlvYmopOworICAgIH0KKworICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KQorICAgICAgICAmJiBhcmctPndpZHRoID09IC0xICYmIGFyZy0+cHJlYyA9PSAtMQorICAgICAgICAmJiAhKGFyZy0+ZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpCisgICAgICAgICYmIHR5cGUgIT0gJ1gnKQorICAgIHsKKyAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgIGludCBhbHRlcm5hdGUgPSBhcmctPmZsYWdzICYgRl9BTFQ7CisgICAgICAgIGludCBiYXNlOworCisgICAgICAgIHN3aXRjaCh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFzc2VydCgwICYmICIndHlwZScgbm90IGluIFtkaXVveFhdIik7CisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbyc6CisgICAgICAgICAgICAgICAgYmFzZSA9IDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgIGNhc2UgJ1gnOgorICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcih3cml0ZXIsIHYsIGJhc2UsIGFsdGVybmF0ZSkgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaW9iaik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJlcyA9IGZvcm1hdGxvbmcoaW9iaiwgYXJnKTsKKyAgICBQeV9ERUNSRUYoaW9iaik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgKnBfb3V0cHV0ID0gcmVzOworICAgIHJldHVybiAwOworCit3cm9uZ3R5cGU6CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICIlJSVjIGZvcm1hdDogYSBudW1iZXIgaXMgcmVxdWlyZWQsICIKKyAgICAgICAgICAgICJub3QgJS4yMDBzIiwKKyAgICAgICAgICAgIHR5cGUsIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgIHJldHVybiAtMTsKK30KKwogc3RhdGljIFB5X1VDUzQKIGZvcm1hdGNoYXIoUHlPYmplY3QgKnYpCiB7CkBAIC0xMzQxNiw1NDAgKzEzODUxLDU4NyBAQAogICAgIHJldHVybiAoUHlfVUNTNCkgLTE7CiB9CiAKKy8qIFBhcnNlIG9wdGlvbnMgb2YgYW4gYXJndW1lbnQ6IGZsYWdzLCB3aWR0aCwgcHJlY2lzaW9uLgorICAgSGFuZGxlIGFsc28gIiUobmFtZSkiIHN5bnRheC4KKworICAgUmV0dXJuIDAgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIGFyZy0+c3RyLgorICAgUmV0dXJuIDEgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIHdyaXR0ZW4gaW50byBjdHgtPndyaXRlciwKKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAordW5pY29kZV9mb3JtYXRfYXJnX3BhcnNlKHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcpCit7CisjZGVmaW5lIEZPUk1BVF9SRUFEKGN0eCkgXAorICAgICAgICBQeVVuaWNvZGVfUkVBRCgoY3R4KS0+Zm10a2luZCwgKGN0eCktPmZtdGRhdGEsIChjdHgpLT5mbXRwb3MpCisKKyAgICBQeU9iamVjdCAqdjsKKworICAgIGlmIChhcmctPmNoID09ICcoJykgeworICAgICAgICAvKiBHZXQgYXJndW1lbnQgdmFsdWUgZnJvbSBhIGRpY3Rpb25hcnkuIEV4YW1wbGU6ICIlKG5hbWUpcyIuICovCisgICAgICAgIFB5X3NzaXplX3Qga2V5c3RhcnQ7CisgICAgICAgIFB5X3NzaXplX3Qga2V5bGVuOworICAgICAgICBQeU9iamVjdCAqa2V5OworICAgICAgICBpbnQgcGNvdW50ID0gMTsKKworICAgICAgICBpZiAoY3R4LT5kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCByZXF1aXJlcyBhIG1hcHBpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICArK2N0eC0+Zm10cG9zOworICAgICAgICAtLWN0eC0+Zm10Y250OworICAgICAgICBrZXlzdGFydCA9IGN0eC0+Zm10cG9zOworICAgICAgICAvKiBTa2lwIG92ZXIgYmFsYW5jZWQgcGFyZW50aGVzZXMgKi8KKyAgICAgICAgd2hpbGUgKHBjb3VudCA+IDAgJiYgLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGlmIChhcmctPmNoID09ICcpJykKKyAgICAgICAgICAgICAgICAtLXBjb3VudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPT0gJygnKQorICAgICAgICAgICAgICAgICsrcGNvdW50OworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgfQorICAgICAgICBrZXlsZW4gPSBjdHgtPmZtdHBvcyAtIGtleXN0YXJ0IC0gMTsKKyAgICAgICAgaWYgKGN0eC0+Zm10Y250IDwgMCB8fCBwY291bnQgPiAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQga2V5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gUHlVbmljb2RlX1N1YnN0cmluZyhjdHgtPmZtdHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzdGFydCwga2V5c3RhcnQgKyBrZXlsZW4pOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChjdHgtPmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjdHgtPmFyZ3MpOworICAgICAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMDsKKyAgICAgICAgfQorICAgICAgICBjdHgtPmFyZ3MgPSBQeU9iamVjdF9HZXRJdGVtKGN0eC0+ZGljdCwga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmIChjdHgtPmFyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMTsKKyAgICAgICAgY3R4LT5hcmdsZW4gPSAtMTsKKyAgICAgICAgY3R4LT5hcmdpZHggPSAtMjsKKyAgICB9CisKKyAgICAvKiBQYXJzZSBmbGFncy4gRXhhbXBsZTogIiUraSIgPT4gZmxhZ3M9Rl9TSUdOLiAqLworICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIHN3aXRjaCAoYXJnLT5jaCkgeworICAgICAgICBjYXNlICctJzogYXJnLT5mbGFncyB8PSBGX0xKVVNUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnKyc6IGFyZy0+ZmxhZ3MgfD0gRl9TSUdOOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnICc6IGFyZy0+ZmxhZ3MgfD0gRl9CTEFOSzsgY29udGludWU7CisgICAgICAgIGNhc2UgJyMnOiBhcmctPmZsYWdzIHw9IEZfQUxUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnMCc6IGFyZy0+ZmxhZ3MgfD0gRl9aRVJPOyBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBQYXJzZSB3aWR0aC4gRXhhbXBsZTogIiUxMHMiID0+IHdpZHRoPTEwICovCisgICAgaWYgKGFyZy0+Y2ggPT0gJyonKSB7CisgICAgICAgIHYgPSB1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKGN0eCk7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFyZy0+d2lkdGggPSBQeUxvbmdfQXNTc2l6ZV90KHYpOworICAgICAgICBpZiAoYXJnLT53aWR0aCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYXJnLT53aWR0aCA8IDApIHsKKyAgICAgICAgICAgIGFyZy0+ZmxhZ3MgfD0gRl9MSlVTVDsKKyAgICAgICAgICAgIGFyZy0+d2lkdGggPSAtYXJnLT53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYXJnLT5jaCA+PSAnMCcgJiYgYXJnLT5jaCA8PSAnOScpIHsKKyAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+Y2ggLSAnMCc7CisgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBTaW5jZSBhcmctPmNoIGlzIHVuc2lnbmVkLCB0aGUgUkhTIHdvdWxkIGVuZCB1cCBhcyB1bnNpZ25lZCwKKyAgICAgICAgICAgICAgIG1peGluZyBzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24uIFNpbmNlIGFyZy0+Y2ggaXMgYmV0d2VlbgorICAgICAgICAgICAgICAgJzAnIGFuZCAnOScsIGNhc3RpbmcgdG8gaW50IGlzIHNhZmUuICovCisgICAgICAgICAgICBpZiAoYXJnLT53aWR0aCA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+d2lkdGgqMTAgKyAoYXJnLT5jaCAtICcwJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBQYXJzZSBwcmVjaXNpb24uIEV4YW1wbGU6ICIlLjNmIiA9PiBwcmVjPTMgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAnLicpIHsKKyAgICAgICAgYXJnLT5wcmVjID0gMDsKKyAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICB9CisgICAgICAgIGlmIChhcmctPmNoID09ICcqJykgeworICAgICAgICAgICAgdiA9IHVuaWNvZGVfZm9ybWF0X2dldG5leHRhcmcoY3R4KTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmctPnByZWMgPSBfUHlMb25nX0FzSW50KHYpOworICAgICAgICAgICAgaWYgKGFyZy0+cHJlYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChhcmctPnByZWMgPCAwKQorICAgICAgICAgICAgICAgIGFyZy0+cHJlYyA9IDA7CisgICAgICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhcmctPmNoID49ICcwJyAmJiBhcmctPmNoIDw9ICc5JykgeworICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5jaCAtICcwJzsKKyAgICAgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChhcmctPnByZWMgPiAoSU5UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWNpc2lvbiB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5wcmVjKjEwICsgKGFyZy0+Y2ggLSAnMCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogSWdub3JlICJoIiwgImwiIGFuZCAiTCIgZm9ybWF0IHByZWZpeCAoZXg6ICIlaGkiIG9yICIlbHMiKSAqLworICAgIGlmIChjdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgIGlmIChhcmctPmNoID09ICdoJyB8fCBhcmctPmNoID09ICdsJyB8fCBhcmctPmNoID09ICdMJykgeworICAgICAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGN0eC0+Zm10Y250IDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworCisjdW5kZWYgRk9STUFUX1JFQUQKK30KKworLyogRm9ybWF0IG9uZSBhcmd1bWVudC4gU3VwcG9ydGVkIGNvbnZlcnNpb24gc3BlY2lmaWVyczoKKworICAgLSAicyIsICJyIiwgImEiOiBhbnkgdHlwZQorICAgLSAiaSIsICJkIiwgInUiLCAibyIsICJ4IiwgIlgiOiBpbnQKKyAgIC0gImUiLCAiRSIsICJmIiwgIkYiLCAiZyIsICJHIjogZmxvYXQKKyAgIC0gImMiOiBpbnQgb3Igc3RyICgxIGNoYXJhY3RlcikKKworICAgV2hlbiBwb3NzaWJsZSwgdGhlIG91dHB1dCBpcyB3cml0dGVuIGRpcmVjdGx5IGludG8gdGhlIFVuaWNvZGUgd3JpdGVyCisgICAoY3R4LT53cml0ZXIpLiBBIHN0cmluZyBpcyBjcmVhdGVkIHdoZW4gcGFkZGluZyBpcyByZXF1aXJlZC4KKworICAgUmV0dXJuIDAgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvICpwX3N0ciwKKyAgICAgICAgICAxIGlmIHRoZSBhcmd1bWVudCBoYXMgYmVlbiB3cml0dGVuIGludG8gY3R4LT53cml0ZXIsCisgICAgICAgICAtMSBvbiBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK3VuaWNvZGVfZm9ybWF0X2FyZ19mb3JtYXQoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9zdHIpCit7CisgICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyID0gJmN0eC0+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+ICc5JykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjID4gKElOVF9NQVggLSAoKGludCljIC0gJzAnKSkgLyAxMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlYyB0b28gYmlnIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IHByZWMqMTAgKyAoYyAtICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IC8qIHByZWMgKi8KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgIGlmIChjID09ICdoJyB8fCBjID09ICdsJyB8fCBjID09ICdMJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoLS1mbXRjbnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm10Y250IDwgMCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQiKTsKKyAgICAgICAgICAgIGN0eC5mbXRwb3MrKzsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2Zvcm1hdF9hcmcoJmN0eCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZtdGNudCA9PSAwKQotICAgICAgICAgICAgICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgICAgICBpZiAoYyA9PSAnJScpIHsKLSAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIDEsICclJykgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCAnJScpOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdiA9IGdldG5leHRhcmcoYXJncywgYXJnbGVuLCAmYXJnaWR4KTsKLSAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgICAgICAgICBzaWduID0gMDsKLSAgICAgICAgICAgIHNpZ25jaGFyID0gJ1wwJzsKLSAgICAgICAgICAgIGZpbGwgPSAnICc7Ci0gICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLQotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSAmJiB3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgMTAsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmIGMgPT0gJ3MnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSB2OwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodGVtcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAncycpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfU3RyKHYpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09ICdyJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBQeU9iamVjdF9SZXByKHYpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfQVNDSUkodik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgY2FzZSAnWCc6Ci0gICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpCi0gICAgICAgICAgICAgICAgICAgICYmIHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEKLSAgICAgICAgICAgICAgICAgICAgJiYgIShmbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCAxMCwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCAxNiwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdvJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCA4LCBmbGFncyAmIEZfQUxUKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlzbnVtb2sgPSAwOwotICAgICAgICAgICAgICAgIGlmIChQeU51bWJlcl9DaGVjayh2KSkgewotICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaW9iaj1OVUxMOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvYmogPSB2OwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGlvYmopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlvYmohPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2soaW9iaikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc251bW9rID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gZm9ybWF0bG9uZyhpb2JqLCBmbGFncywgcHJlYywgKGMgPT0gJ2knPyAnZCc6IGMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFpc251bW9rKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSUlYyBmb3JtYXQ6IGEgbnVtYmVyIGlzIHJlcXVpcmVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIChjaGFyKWMsIFB5X1RZUEUodiktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZfWkVSTykKLSAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICcwJzsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnZSc6Ci0gICAgICAgICAgICBjYXNlICdFJzoKLSAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICBjYXNlICdnJzoKLSAgICAgICAgICAgIGNhc2UgJ0cnOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xCi0gICAgICAgICAgICAgICAgICAgICYmICEoZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBmbGFncywgcHJlYywgYywgTlVMTCwgJndyaXRlcikgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzaWduID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGX1pFUk8pCi0gICAgICAgICAgICAgICAgICAgIGZpbGwgPSAnMCc7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm1hdGZsb2F0KHYsIGZsYWdzLCBwcmVjLCBjLCAmdGVtcCwgTlVMTCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gZm9ybWF0Y2hhcih2KTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gKFB5X1VDUzQpIC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgMSwgY2gpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCBjaCk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXIgJyVjJyAoMHgleCkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXQgaW5kZXggJXpkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMxPD1jICYmIGM8PTEyNikgPyAoY2hhciljIDogJz8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdHBvcyAtIDEpOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgYXNzZXJ0IChQeVVuaWNvZGVfQ2hlY2sodGVtcCkpOwotCi0gICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMQotICAgICAgICAgICAgICAgICYmICEoZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHRlbXApID09IC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHRlbXApID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodGVtcCk7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHRlbXApOwotICAgICAgICAgICAgcGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHRlbXApOwotICAgICAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodGVtcCk7Ci0KLSAgICAgICAgICAgIGlmIChjID09ICdzJyB8fCBjID09ICdyJyB8fCBjID09ICdhJykgewotICAgICAgICAgICAgICAgIGlmIChwcmVjID49IDAgJiYgbGVuID4gcHJlYykKLSAgICAgICAgICAgICAgICAgICAgbGVuID0gcHJlYzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogcGJ1ZiBpcyBpbml0aWFsaXplZCBoZXJlLiAqLwotICAgICAgICAgICAgcGluZGV4ID0gMDsKLSAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICctJyB8fCBjaCA9PSAnKycpIHsKLSAgICAgICAgICAgICAgICAgICAgc2lnbmNoYXIgPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgbGVuLS07Ci0gICAgICAgICAgICAgICAgICAgIHBpbmRleCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIEZfU0lHTikKLSAgICAgICAgICAgICAgICAgICAgc2lnbmNoYXIgPSAnKyc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBGX0JMQU5LKQotICAgICAgICAgICAgICAgICAgICBzaWduY2hhciA9ICcgJzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNpZ24gPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdpZHRoIDwgbGVuKQotICAgICAgICAgICAgICAgIHdpZHRoID0gbGVuOwotCi0gICAgICAgICAgICAvKiBDb21wdXRlIHRoZSBsZW5ndGggYW5kIG1heGltdW0gY2hhcmFjdGVyIG9mIHRoZQotICAgICAgICAgICAgICAgd3JpdHRlbiBjaGFyYWN0ZXJzICovCi0gICAgICAgICAgICBidWZtYXhjaGFyID0gMTI3OwotICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBGX0xKVVNUKSkgewotICAgICAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgod2lkdGgtMSkgPiBsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBidWZtYXhjaGFyID0gUHlfTUFYKGJ1Zm1heGNoYXIsIGZpbGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmbWF4Y2hhciA9IFB5X01BWChidWZtYXhjaGFyLCBmaWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih0ZW1wLCAwLCBwaW5kZXgrbGVuKTsKLSAgICAgICAgICAgIGJ1Zm1heGNoYXIgPSBQeV9NQVgoYnVmbWF4Y2hhciwgbWF4Y2hhcik7Ci0KLSAgICAgICAgICAgIGJ1ZmxlbiA9IHdpZHRoOwotICAgICAgICAgICAgaWYgKHNpZ24gJiYgbGVuID09IHdpZHRoKQotICAgICAgICAgICAgICAgIGJ1ZmxlbisrOwotCi0gICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIGJ1ZmxlbiwgYnVmbWF4Y2hhcikgPT0gLTEpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgICAgICAgICAvKiBXcml0ZSBjaGFyYWN0ZXJzICovCi0gICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgIGlmIChmaWxsICE9ICcgJykgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCBzaWduY2hhcik7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuKQotICAgICAgICAgICAgICAgICAgICB3aWR0aC0tOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChmbGFncyAmIEZfQUxUKSAmJiAoYyA9PSAneCcgfHwgYyA9PSAnWCcgfHwgYyA9PSAnbycpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4ICsgMSkgPT0gYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpbGwgIT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MrMSwgYyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgcGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdpZHRoIC09IDI7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAwOwotICAgICAgICAgICAgICAgIGxlbiAtPSAyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuICYmICEoZmxhZ3MgJiBGX0xKVVNUKSkgewotICAgICAgICAgICAgICAgIHN1YmxlbiA9IHdpZHRoIC0gbGVuOwotICAgICAgICAgICAgICAgIEZJTEwod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCBmaWxsLCB3cml0ZXIucG9zLCBzdWJsZW4pOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gc3VibGVuOwotICAgICAgICAgICAgICAgIHdpZHRoID0gbGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpbGwgPT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgc2lnbmNoYXIpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGX0FMVCkgJiYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnIHx8IGMgPT0gJ28nKSkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KSA9PSAnMCcpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KzEpID09IGMpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCAnMCcpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zKzEsIGMpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgIHBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxlbikgewotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci5idWZmZXIsIHdyaXRlci5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCwgcGluZGV4LCBsZW4pOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gbGVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHdpZHRoID4gbGVuKSB7Ci0gICAgICAgICAgICAgICAgc3VibGVuID0gd2lkdGggLSBsZW47Ci0gICAgICAgICAgICAgICAgRklMTCh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsICcgJywgd3JpdGVyLnBvcywgc3VibGVuKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IHN1YmxlbjsKLSAgICAgICAgICAgIH0KLQotbmV4dGFyZzoKLSAgICAgICAgICAgIGlmIChkaWN0ICYmIChhcmdpZHggPCBhcmdsZW4pICYmIGMgIT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9DTEVBUih0ZW1wKTsKLSAgICAgICAgfSAvKiAnJScgKi8KLSAgICB9IC8qIHVudGlsIGVuZCAqLwotICAgIGlmIChhcmdpZHggPCBhcmdsZW4gJiYgIWRpY3QpIHsKKyAgICBpZiAoY3R4LmFyZ2lkeCA8IGN0eC5hcmdsZW4gJiYgIWN0eC5kaWN0KSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBzdHJpbmcgZm9ybWF0dGluZyIpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCi0gICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIGlmIChjdHguYXJnc19vd25lZCkgeworICAgICAgICBQeV9ERUNSRUYoY3R4LmFyZ3MpOwogICAgIH0KLSAgICBQeV9ERUNSRUYodWZvcm1hdCk7Ci0gICAgUHlfWERFQ1JFRih0ZW1wKTsKLSAgICBQeV9YREVDUkVGKHNlY29uZCk7Ci0gICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOworICAgIFB5X0RFQ1JFRihjdHguZm10c3RyKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJmN0eC53cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKHVmb3JtYXQpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0gICAgUHlfWERFQ1JFRihzZWNvbmQpOwotICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKLSAgICBpZiAoYXJnc19vd25lZCkgewotICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgUHlfREVDUkVGKGN0eC5mbXRzdHIpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmY3R4LndyaXRlcik7CisgICAgaWYgKGN0eC5hcmdzX293bmVkKSB7CisgICAgICAgIFB5X0RFQ1JFRihjdHguYXJncyk7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMTQyMDksNyArMTQ2OTEsNyBAQAogdm9pZAogUHlVbmljb2RlX0ludGVybkluUGxhY2UoUHlPYmplY3QgKipwKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpzID0gKnA7CisgICAgUHlPYmplY3QgKnMgPSAqcDsKICAgICBQeU9iamVjdCAqdDsKICNpZmRlZiBQeV9ERUJVRwogICAgIGFzc2VydChzICE9IE5VTEwpOwpAQCAtMTQyMzgsMTIgKzE0NzIwLDEyIEBACiAgICAgdCA9IFB5RGljdF9HZXRJdGVtKGludGVybmVkLCBzKTsKICAgICBQeV9FTkRfQUxMT1dfUkVDVVJTSU9OCiAKLSAgICAgICAgaWYgKHQpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih0KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRigqcCk7Ci0gICAgICAgICAgICAqcCA9IHQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAodCkgeworICAgICAgICBQeV9JTkNSRUYodCk7CisgICAgICAgIFB5X0RFQ1JFRigqcCk7CisgICAgICAgICpwID0gdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIFB5VGhyZWFkU3RhdGVfR0VUKCktPnJlY3Vyc2lvbl9jcml0aWNhbCA9IDE7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtKGludGVybmVkLCBzLCBzKSA8IDApIHsKQEAgLTE0NTQyLDcgKzE1MDI0LDcgQEAKIGludAogUHlfVU5JQ09ERV9zdHJuY21wKGNvbnN0IFB5X1VOSUNPREUgKnMxLCBjb25zdCBQeV9VTklDT0RFICpzMiwgc2l6ZV90IG4pCiB7Ci0gICAgcmVnaXN0ZXIgUHlfVU5JQ09ERSB1MSwgdTI7CisgICAgUHlfVU5JQ09ERSB1MSwgdTI7CiAgICAgZm9yICg7IG4gIT0gMDsgbi0tKSB7CiAgICAgICAgIHUxID0gKnMxOwogICAgICAgICB1MiA9ICpzMjsKZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaCBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaAppbmRleCA0NmE5MmJiLi4xZmRjMDkyIDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKKysrIGIvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCkBAIC0xNTg5LDcgKzE1ODksNyBAQAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgCiAgICAgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNSwgNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgCiAgICAgMjEsIDIxLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDUsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMjUsIDI1LCAyNSwgNSwgMjEsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgOTYsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA3LCA4LCAKQEAgLTE4MDEsNyArMTgwMSw3IEBACiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA1LCA1LCA5NiwgNSwgNSwgNSwgNSwgNTUsIDI1LCAwLCAwLCA3LCAKICAgICA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDI1LCAyNSwgMjUsIDIsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNSwgMjUsIDI1LCAyMSwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgOTYsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIApAQCAtMTgyOCw3ICsxODI4LDcgQEAKICAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTMyLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMTgsIDE4LCAxOCwgMCwgMCwgNSwgNSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMTgsIDE4LCAyNSwgMCwgMCwgNSwgNSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMjUsIDE4LCAyNSwgCkBAIC0xOTE1LDExICsxOTE1LDExIEBACiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNiwgNSwgNSwgNiwgMywgMywgMjEsIDIxLCAyMSwgMjEsIDIxLCAyLCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgMTgsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI0NSwgOTUsIDAsIDAsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjQ1LCA5NSwgMCwgMCwgCiAgICAgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgNSwgNSwgNSwgNSwgNSwgOTUsIDI0NSwgMjYsIDIyLCAyMywgMjQ2LCAKICAgICAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgNSwgNSwgNSwgNSwgNSwgMCwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAogICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCA2LCA2LCA2LCA2LCAyNSwgNiwgNiwgNiwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgMTEzLCA1LCA1LCAKQEAgLTI1OTMsMTAgKzI1OTMsMTAgQEAKICAgICAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMjUyLCAyNTIsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMjUyLCAyNTIsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIApAQCAtMzM4MCw2ICszMzgwLDcgQEAKICAgICBjYXNlIDB4MTI0MzU6CiAgICAgY2FzZSAweDEyNDRBOgogICAgIGNhc2UgMHgxMjQ1MDoKKyAgICBjYXNlIDB4MTI0NTY6CiAgICAgY2FzZSAweDEyNDU5OgogICAgIGNhc2UgMHgxRDM2MToKICAgICBjYXNlIDB4MUQ3RDA6CkBAIC0zNDI3LDYgKzM0MjgsOCBAQAogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwMDAuMDsKICAgICBjYXNlIDB4MzI1MToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIxLjA7CisgICAgY2FzZSAweDEyNDMyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjE2MDAwLjA7CiAgICAgY2FzZSAweDMyNTI6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAyMi4wOwogICAgIGNhc2UgMHgzMjUzOgpAQCAtMzUzNCw2ICszNTM3LDcgQEAKICAgICBjYXNlIDB4MTI0M0I6CiAgICAgY2FzZSAweDEyNDRCOgogICAgIGNhc2UgMHgxMjQ1MToKKyAgICBjYXNlIDB4MTI0NTc6CiAgICAgY2FzZSAweDFEMzYyOgogICAgIGNhc2UgMHgxRDdEMToKICAgICBjYXNlIDB4MUQ3REI6CkBAIC0zNzIxLDYgKzM3MjUsOCBAQAogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDIuMDsKICAgICBjYXNlIDB4MzJCODoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQzLjA7CisgICAgY2FzZSAweDEyNDMzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDMyMDAwLjA7CiAgICAgY2FzZSAweDMyQjk6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA0NC4wOwogICAgIGNhc2UgMHgzMkJBOgpAQCAtNDI3MSw3ICs0Mjc3LDcgQEAKIC8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgYmlkaXJlY3Rpb25hbAogICogdHlwZSAnV1MnLCAnQicgb3IgJ1MnIG9yIHRoZSBjYXRlZ29yeSAnWnMnLCAwIG90aGVyd2lzZS4KICAqLwotaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKHJlZ2lzdGVyIGNvbnN0IFB5X1VDUzQgY2gpCitpbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UoY29uc3QgUHlfVUNTNCBjaCkKIHsKICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgY2FzZSAweDAwMDk6CkBAIC00Mjg3LDcgKzQyOTMsNiBAQAogICAgIGNhc2UgMHgwMDg1OgogICAgIGNhc2UgMHgwMEEwOgogICAgIGNhc2UgMHgxNjgwOgotICAgIGNhc2UgMHgxODBFOgogICAgIGNhc2UgMHgyMDAwOgogICAgIGNhc2UgMHgyMDAxOgogICAgIGNhc2UgMHgyMDAyOgpAQCAtNDMxMyw3ICs0MzE4LDcgQEAKICAqIHByb3BlcnR5ICdCSycsICdDUicsICdMRicgb3IgJ05MJyBvciBoYXZpbmcgYmlkaXJlY3Rpb25hbAogICogdHlwZSAnQicsIDAgb3RoZXJ3aXNlLgogICovCi1pbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKQoraW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsoY29uc3QgUHlfVUNTNCBjaCkKIHsKICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgY2FzZSAweDAwMEE6CmRpZmYgLS1naXQgYS9PYmplY3RzL3dlYWtyZWZvYmplY3QuYyBiL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCmluZGV4IGI0OWRjZWUuLmMwODNmOGYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCisrKyBiL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCkBAIC0zMzgsNiArMzM4LDExIEBACiB9CiAKIAorc3RhdGljIFB5TWVtYmVyRGVmIHdlYWtyZWZfbWVtYmVyc1tdID0geworICAgIHsiX19jYWxsYmFja19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5V2Vha1JlZmVyZW5jZSwgd3JfY2FsbGJhY2spLCBSRUFET05MWX0sCisgICAge05VTEx9IC8qIFNlbnRpbmVsICovCit9OworCiBQeVR5cGVPYmplY3QKIF9QeVdlYWtyZWZfUmVmVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQpAQCAtMzY5LDcgKzM3NCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLworICAgIHdlYWtyZWZfbWVtYmVycywgICAgICAgICAgICAvKnRwX21lbWJlcnMqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldHNldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzZSovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdCovCmRpZmYgLS1naXQgYS9QQy9WQzYvX2N0eXBlcy5kc3AgYi9QQy9WQzYvX2N0eXBlcy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOThlYWMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19jdHlwZXMuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2N0eXBlcyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fY3R5cGVzIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXMubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXMubWFrIiBDRkc9Il9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfY3R5cGVzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2N0eXBlcyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlcyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2FsbHByb2MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcY2ZpZWxkLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xtYWxsb2NfY2xvc3VyZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xwcmVwX2NpZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjMyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcCBiL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWViMjE3Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfY3R5cGVzX3Rlc3QiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXNfdGVzdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlc190ZXN0Lm1hayIgQ0ZHPSJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXNfdGVzdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX3Rlc3QucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2N0eXBlc190ZXN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX3Rlc3RfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fZWxlbWVudHRyZWUuZHNwIGIvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYzBjZGQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfZWxlbWVudHRyZWUiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9lbGVtZW50dHJlZS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2VsZW1lbnR0cmVlLm1hayIgQ0ZHPSJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9lbGVtZW50dHJlZSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EICJCWVRFT1JERVI9MTIzNCIgL0QgIlhNTF9DT05URVhUX0JZVEVTPTEwMjQiIC9EICJVU0VfUFlFWFBBVF9DQVBJIiAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19lbGVtZW50dHJlZS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfZWxlbWVudHRyZWUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgIkJZVEVPUkRFUj0xMjM0IiAvRCAiWE1MX0NPTlRFWFRfQllURVM9MTAyNCIgL0QgIlVTRV9QWUVYUEFUX0NBUEkiIC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2VsZW1lbnR0cmVlX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9lbGVtZW50dHJlZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19tc2kuZHNwIGIvUEMvVkM2L19tc2kuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmE2MWJjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fbXNpLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX21zaSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fbXNpIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tc2kubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tc2kubWFrIiBDRkc9Il9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfbXNpIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX21zaSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX21zaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXNpLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX21zaSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfbXNpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX21zaV9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfbXNpIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQQ1xfbXNpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AgYi9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYjg0NzAuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX211bHRpcHJvY2Vzc2luZyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tdWx0aXByb2Nlc3NpbmcubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tdWx0aXByb2Nlc3NpbmcubWFrIiBDRkc9Il9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tdWx0aXByb2Nlc3NpbmcucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9tdWx0aXByb2Nlc3NpbmciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMWQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tdWx0aXByb2Nlc3NpbmdfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzZW1hcGhvcmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NvY2tldC5kc3AgYi9QQy9WQzYvX3NvY2tldC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZWU4ZjIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19zb2NrZXQuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc29ja2V0IiAtIFBhY2thZ2UgT3duZXI9PDQ+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+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvaiBiL1BDL1ZTOC4wL19lbGVtZW50dHJlZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1N2RhNzIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlQcm9qZWN0R1VJRD0iezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0iDQotCVJvb3ROYW1lc3BhY2U9Il9lbGVtZW50dHJlZSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWkuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWl0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXRfY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGV4cGF0X2V4dGVybmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGlhc2NpaXRhYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxpbnRlcm5hbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxsYXRpbjF0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcbWFjY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XG5hbWV0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRccHlleHBhdG5zLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHV0Zjh0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcd2luY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2ogYi9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMzFlMmUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2hhc2hsaWIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfaGFzaGxpYiINCi0JUHJvamVjdEdVSUQ9Ins0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9Ig0KLQlSb290TmFtZXNwYWNlPSJfaGFzaGxpYiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oYXNob3BlbnNzbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19tc2kudmNwcm9qIGIvUEMvVlM4LjAvX21zaS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OTcxYzYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX21zaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9tc2kiDQotCVByb2plY3RHVUlEPSJ7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfSINCi0JUm9vdE5hbWVzcGFjZT0iX21zaSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcX21zaS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qIGIvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMWNhZmMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9tdWx0aXByb2Nlc3NpbmciDQotCVByb2plY3RHVUlEPSJ7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fSINCi0JUm9vdE5hbWVzcGFjZT0iX211bHRpcHJvY2Vzc2luZyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+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+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3NvY2tldC52Y3Byb2ogYi9QQy9WUzguMC9fc29ja2V0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFiZDk4Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fc29ja2V0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3NvY2tldCINCi0JUHJvamVjdEdVSUQ9Ins4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9Ig0KLQlSb290TmFtZXNwYWNlPSJfc29ja2V0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmMTlmMS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zcWxpdGUzIg0KLQlQcm9qZWN0R1VJRD0iezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0iDQotCVJvb3ROYW1lc3BhY2U9Il9zcWxpdGUzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zc2wudmNwcm9qIGIvUEMvVlM4LjAvX3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjY3YTQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3NzbC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zc2wiDQotCVByb2plY3RHVUlEPSJ7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfSINCi0JUm9vdE5hbWVzcGFjZT0iX3NzbCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zc2wuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fdGtpbnRlci52Y3Byb2ogYi9QQy9WUzguMC9fdGtpbnRlci52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MDBiZGUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3RraW50ZXIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfdGtpbnRlciINCi0JUHJvamVjdEdVSUQ9Ins0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KLQlSb290TmFtZXNwYWNlPSJfdGtpbnRlciINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliRGVidWcpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYkRlYnVnKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGtpbnRlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9iZGlzdF93aW5pbnN0LnZjcHJvaiBiL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTFlZGYyLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJiZGlzdF93aW5pbnN0Ig0KLQlQcm9qZWN0R1VJRD0ie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQotCVJvb3ROYW1lc3BhY2U9Indpbmluc3QiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LnRsYiINCi0JCQkJSGVhZGVyRmlsZU5hbWU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZTsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJjb21jdGwzMi5saWIgaW1hZ2VobHAubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC04LjAuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlwuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC50bGIiDQotCQkJCUhlYWRlckZpbGVOYW1lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjEiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGU7Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDOy4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iY29tY3RsMzIubGliIGltYWdlaGxwLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLWFtZDY0LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJQkMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTguMC1hbWQ2NC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxleHRyYWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9InpsaWIiDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmwiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxhcmNoaXZlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XFB5dGhvblBvd2VyZWQuYm1wIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkLmJhdCBiL1BDL1ZTOC4wL2J1aWxkLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJjODE4Ni4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBBIGJhdGNoIHByb2dyYW0gdG8gYnVpbGQgb3IgcmVidWlsZCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4KLXJlbSBqdXN0IGZvciBjb252ZW5pZW5jZS4KLQotc2V0bG9jYWwKLXNldCBwbGF0Zj1XaW4zMgotc2V0IGNvbmY9UmVsZWFzZQotc2V0IGJ1aWxkPS9idWlsZAotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLWMiIChzZXQgY29uZj0lMikgICAgICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXAiIChzZXQgcGxhdGY9JTIpICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXIiIChzZXQgYnVpbGQ9L3JlYnVpbGQpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgY21kPWRldmVudiBwY2J1aWxkLnNsbiAlYnVpbGQlICIlY29uZiV8JXBsYXRmJSIKLWVjaG8gJWNtZCUKLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9lbnYuYmF0IGIvUEMvVlM4LjAvYnVpbGRfZW52LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM2N2FlMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9lbnYuYmF0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQCVjb21zcGVjJSAvayBlbnYuYmF0ICUqCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9wZ28uYmF0IGIvUEMvVlM4LjAvYnVpbGRfcGdvLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3YjViZi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9wZ28uYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gQSBiYXRjaCBwcm9ncmFtIHRvIGJ1aWxkIFBHTyAoUHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uKSBieSBmaXJzdAotcmVtIGJ1aWxkaW5nIGluc3RydW1lbnRlZCBiaW5hcmllcywgdGhlbiBydW5uaW5nIHRoZSB0ZXN0c3VpdGUsIGFuZAotcmVtIGZpbmFsbHkgYnVpbGRpbmcgdGhlIG9wdGltaXplZCBjb2RlLgotcmVtIE5vdGUsIGFmdGVyIHRoZSBmaXJzdCBpbnN0cnVtZW50ZWQgcnVuLCBvbmUgY2FuIGp1c3Qga2VlcCBvbgotcmVtIGJ1aWxkaW5nIHRoZSBQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHdoaWxlIGRldmVsb3BpbmcuCi0KLXNldGxvY2FsCi1zZXQgcGxhdGY9V2luMzIKLQotcmVtIHVzZSB0aGUgcGVyZm9ybWFuY2UgdGVzdHN1aXRlLiAgVGhpcyBpcyBxdWljayBhbmQgc2ltcGxlCi1zZXQgam9iMT0uLlwuLlx0b29sc1xweWJlbmNoXHB5YmVuY2gucHkgLW4gMSAtQyAxIC0td2l0aC1nYwotc2V0IHBhdGgxPS4uXC4uXHRvb2xzXHB5YmVuY2gKLQotcmVtIG9yIHRoZSB3aG9sZSB0ZXN0c3VpdGUgZm9yIG1vcmUgdGhvcm91Z2ggdGVzdGluZwotc2V0IGpvYjI9Li5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLXNldCBwYXRoMj0uLlwuLlxsaWIKLQotc2V0IGpvYj0lam9iMSUKLXNldCBjbHJwYXRoPSVwYXRoMSUKLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii0yIiAoc2V0IGpvYj0lam9iMiUpICYgKHNldCBjbHJwYXRoPSVwYXRoMiUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgUEdJPSVwbGF0ZiUtcGdpCi1zZXQgUEdPPSVwbGF0ZiUtcGdvCi0KLUBlY2hvIG9uCi1yZW0gYnVpbGQgdGhlIGluc3RydW1lbnRlZCB2ZXJzaW9uCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdJbnN0cnVtZW50Ci0KLXJlbSByZW1vdmUgLnB5YyBmaWxlcywgLnBnYyBmaWxlcyBhbmQgZXhlY3V0ZSB0aGUgam9iCi0lUEdJJVxweXRob24uZXhlIHJtcHljLnB5ICVjbHJwYXRoJQotZGVsICVQR0klXCoucGdjCi0lUEdJJVxweXRob24uZXhlICVqb2IlCi0KLXJlbSBmaW5hbGx5IGJ1aWxkIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbgotaWYgZXhpc3QgJVBHTyUgZGVsIC9zIC9xICVQR08lCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdVcGRhdGUKLQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdCBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1N2IwOGIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLUBlY2hvIG9mZgotaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAotICBpZiAlMSBFUVUgRGVidWcgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzNfZC5kbGwgZXhpdCAxCi0gICkgRUxTRSAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzMuZGxsIGV4aXQgMQotICApCi0pCi0lSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMiAlMwotCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9zc2wucHkgYi9QQy9WUzguMC9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMTNlZjUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLSMgU2NyaXB0IGZvciBidWlsZGluZyB0aGUgX3NzbCBhbmQgX2hhc2hsaWIgbW9kdWxlcyBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIHRoZSBhY3R1YWwgX3NzbC5weWQgYW5kIF9oYXNobGliLnB5ZCBETExzLgotCi0jIFRIRU9SRVRJQ0FMTFksIHlvdSBjYW46Ci0jICogVW5wYWNrIHRoZSBsYXRlc3QgU1NMIHJlbGVhc2Ugb25lIGxldmVsIGFib3ZlIHlvdXIgbWFpbiBQeXRob24gc291cmNlCi0jICAgZGlyZWN0b3J5LiAgSXQgaXMgbGlrZWx5IHlvdSB3aWxsIGFscmVhZHkgZmluZCB0aGUgemxpYiBsaWJyYXJ5IGFuZAotIyAgIGFueSBvdGhlciBleHRlcm5hbCBwYWNrYWdlcyB0aGVyZS4KLSMgKiBJbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBpcyBzb21ld2hlcmUgb24geW91ciBwYXRoLgotIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQy9WUzguMCBkaXJlY3RvcnkuCi0jCi0jIGl0IHNob3VsZCBjb25maWd1cmUgYW5kIGJ1aWxkIFNTTCwgdGhlbiBidWlsZCB0aGUgX3NzbCBhbmQgX2hhc2hsaWIKLSMgUHl0aG9uIGV4dGVuc2lvbnMgd2l0aG91dCBpbnRlcnZlbnRpb24uCi0KLSMgTW9kaWZpZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcwotIyBOb3cgdGhpcyBzY3JpcHQgc3VwcG9ydHMgcHJlLWdlbmVyYXRlZCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgotIyBEZXZlbG9wZXJzIGRvbid0IG5lZWQgYW4gaW5zdGFsbGF0aW9uIG9mIFBlcmwgYW55bW9yZSB0byBidWlsZCBQeXRob24uIEEgc3ZuCi0jIGNoZWNrb3V0IGZyb20gb3VyIHN2biByZXBvc2l0b3J5IGlzIGVub3VnaC4KLSMKLSMgSW4gT3JkZXIgdG8gY3JlYXRlIHRoZSBmaWxlcyBpbiB0aGUgY2FzZSBvZiBhbiB1cGRhdGUgeW91IHN0aWxsIG5lZWQgUGVybC4KLSMgUnVuIGJ1aWxkX3NzbCBpbiB0aGlzIG9yZGVyOgotIyBweXRob24uZXhlIGJ1aWxkX3NzbC5weSBSZWxlYXNlIHg2NAotIyBweXRob24uZXhlIGJ1aWxkX3NzbC5weSBSZWxlYXNlIFdpbjMyCi0KLWltcG9ydCBvcywgc3lzLCByZSwgc2h1dGlsCi0KLSMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgotZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgotICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKLSAgICByZXQgPSBbXQotICAgIGZvciBwIGluIGVudHJpZXM6Ci0gICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgaWYgZXh0cmFzOgotICAgICAgICBmb3IgcCBpbiBleHRyYXM6Ci0gICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgcmV0dXJuIHJldAotCi0jIEZpbmQgYSBzdWl0YWJsZSBQZXJsIGluc3RhbGxhdGlvbiBmb3IgT3BlblNTTC4KLSMgY3lnd2luIHBlcmwgZG9lcyAqbm90KiB3b3JrLiAgQWN0aXZlUGVybCBkb2VzLgotIyBCZWluZyBhIFBlcmwgZHVtbXksIHRoZSBzaW1wbGVzdCB3YXkgSSBjYW4gY2hlY2sgaXMgaWYgdGhlICJXaW4zMiIgcGFja2FnZQotIyBpcyBhdmFpbGFibGUuCi1kZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgotICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKCciJXMiIC1lICJ1c2UgV2luMzI7IicgJSBwZXJsKQotICAgICAgICBmaC5yZWFkKCkKLSAgICAgICAgcmMgPSBmaC5jbG9zZSgpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcmV0dXJuIHBlcmwKLSAgICBwcmludCgiQ2FuIG5vdCBmaW5kIGEgc3VpdGFibGUgUEVSTDoiKQotICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCgiIHRoZSBmb2xsb3dpbmcgcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZDoiKQotICAgICAgICBmb3IgcCBpbiBwZXJsczoKLSAgICAgICAgICAgIHByaW50KCIgIiwgcCkKLSAgICAgICAgcHJpbnQoIiBOb25lIG9mIHRoZXNlIHZlcnNpb25zIGFwcGVhciBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgT3BlblNTTCIpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIiBOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIikKLSAgICBwcmludCgiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIpCi0gICAgcmV0dXJuIE5vbmUKLQotIyBMb2NhdGUgdGhlIGJlc3QgU1NMIGRpcmVjdG9yeSBnaXZlbiBhIGZldyByb290cyB0byBsb29rIGludG8uCi1kZWYgZmluZF9iZXN0X3NzbF9kaXIoc291cmNlcyk6Ci0gICAgY2FuZGlkYXRlcyA9IFtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiBkbyBub3QgYWJzcGF0aCBzOyB0aGUgYnVpbGQgd2lsbCBmYWlsIGlmIGFueQotICAgICAgICAgICAgIyBoaWdoZXIgdXAgZGlyZWN0b3J5IG5hbWUgaGFzIHNwYWNlcyBpbiBpdC4KLSAgICAgICAgICAgIGZuYW1lcyA9IG9zLmxpc3RkaXIocykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgZm5hbWVzID0gW10KLSAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKLSAgICAgICAgICAgIGZxbiA9IG9zLnBhdGguam9pbihzLCBmbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnFuKSBhbmQgZm5hbWUuc3RhcnRzd2l0aCgib3BlbnNzbC0iKToKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChmcW4pCi0gICAgIyBOb3cgd2UgaGF2ZSBhbGwgdGhlIGNhbmRpZGF0ZXMsIGxvY2F0ZSB0aGUgYmVzdC4KLSAgICBiZXN0X3BhcnRzID0gW10KLSAgICBiZXN0X25hbWUgPSBOb25lCi0gICAgZm9yIGMgaW4gY2FuZGlkYXRlczoKLSAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiWy4tXSIsIG9zLnBhdGguYmFzZW5hbWUoYykpWzE6XQotICAgICAgICAjIGVnIC0gb3BlbnNzbC0wLjkuNy1iZXRhMSAtIGlnbm9yZSBhbGwgImJldGEiIG9yIGFueSBvdGhlciBxdWFsaWZpZXJzCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPj0gNDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHBhcnRzID4gYmVzdF9wYXJ0czoKLSAgICAgICAgICAgIGJlc3RfcGFydHMgPSBwYXJ0cwotICAgICAgICAgICAgYmVzdF9uYW1lID0gYwotICAgIGlmIGJlc3RfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJpbnQoIkZvdW5kIGFuIFNTTCBkaXJlY3RvcnkgYXQgJyVzJyIgJSAoYmVzdF9uYW1lLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBmaW5kIGFuIFNTTCBkaXJlY3RvcnkgaW4gJyVzJyIgJSAoc291cmNlcywpKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJldHVybiBiZXN0X25hbWUKLQotZGVmIGNyZWF0ZV9tYWtlZmlsZTY0KG1ha2VmaWxlLCBtMzIpOgotICAgICIiIkNyZWF0ZSBhbmQgZml4IG1ha2VmaWxlIGZvciA2NGJpdAotCi0gICAgUmVwbGFjZSAzMiB3aXRoIDY0Yml0IGRpcmVjdG9yaWVzCi0gICAgIiIiCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG0zMik6Ci0gICAgICAgIHJldHVybgotICAgIHdpdGggb3BlbihtMzIpIGFzIGZpbjoKLSAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPXRtcDMyIiwgIj10bXA2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPW91dDMyIiwgIj1vdXQ2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPWluYzMyIiwgIj1pbmM2NCIpCi0gICAgICAgICAgICAgICAgIyBmb3JjZSA2NCBiaXQgbWFjaGluZQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIk1LTElCPWxpYiIsICJNS0xJQj1saWIgL01BQ0hJTkU6WDY0IikKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJMRkxBR1M9IiwgIkxGTEFHUz0vTUFDSElORTpYNjQgIikKLSAgICAgICAgICAgICAgICAjIGRvbid0IGxpbmsgYWdhaW5zdCB0aGUgbGliIG9uIDY0Yml0IHN5c3RlbXMKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJidWZmZXJvdmVyZmxvd3UubGliIiwgIiIpCi0gICAgICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQotICAgIG9zLnVubGluayhtMzIpCi0KLWRlZiBmaXhfbWFrZWZpbGUobWFrZWZpbGUpOgotICAgICIiIkZpeCBzb21lIHN0dWZmIGluIGFsbCBtYWtlZmlsZXMKLSAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpOgotICAgICAgICByZXR1cm4KLSAgICB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbjoKLSAgICAgICAgbGluZXMgPSBmaW4ucmVhZGxpbmVzKCkKLSAgICB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBFUkw9Iik6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ1A9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJDUD1jb3B5XG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk1LRElSPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiTUtESVI9bWtkaXJcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ0ZMQUc9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIGZvciBhbGdvIGluICgiUkM1IiwgIk1EQzIiLCAiSURFQSIpOgotICAgICAgICAgICAgICAgICAgICBub2FsZ28gPSAiIC1ET1BFTlNTTF9OT18lcyIgJSBhbGdvCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vYWxnbyBub3QgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgbm9hbGdvCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnXG4nCi0gICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBwcmludCgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQotICAgIG9zLnN5c3RlbSgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQotICAgIHByaW50KGRvX3NjcmlwdCkKLSAgICBvcy5zeXN0ZW0oZG9fc2NyaXB0KQotCi1kZWYgY21wKGYxLCBmMik6Ci0gICAgYnVmc2l6ZSA9IDEwMjQgKiA4Ci0gICAgd2l0aCBvcGVuKGYxLCAncmInKSBhcyBmcDEsIG9wZW4oZjIsICdyYicpIGFzIGZwMjoKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGIxID0gZnAxLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGIyID0gZnAyLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGlmIGIxICE9IGIyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGIxOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLWRlZiBjb3B5KHNyYywgZHN0KToKLSAgICBpZiBvcy5wYXRoLmlzZmlsZShkc3QpIGFuZCBjbXAoc3JjLCBkc3QpOgotICAgICAgICByZXR1cm4KLSAgICBzaHV0aWwuY29weShzcmMsIGRzdCkKLQotZGVmIG1haW4oKToKLSAgICBidWlsZF9hbGwgPSAiLWEiIGluIHN5cy5hcmd2Ci0gICAgaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2UiOgotICAgICAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiRGVidWciOgotICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHN0cihzeXMuYXJndikpCi0KLSAgICBpZiBzeXMuYXJndlsyXSA9PSAiV2luMzIiOgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCi0gICAgICAgIG1ha2VmaWxlPSJtc1xcbnQubWFrIgotICAgICAgICBtMzIgPSBtYWtlZmlsZQotICAgICAgICBkaXJzdWZmaXggPSAiMzIiCi0gICAgZWxpZiBzeXMuYXJndlsyXSA9PSAieDY0IjoKLSAgICAgICAgYXJjaD0iYW1kNjQiCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEEiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRhIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQ2NC5tYWsiCi0gICAgICAgIG0zMiA9IG1ha2VmaWxlLnJlcGxhY2UoJzY0JywgJycpCi0gICAgICAgIGRpcnN1ZmZpeCA9ICI2NCIKLSAgICAgICAgI29zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX09QVEVST04iCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihzdHIoc3lzLmFyZ3YpKQotCi0gICAgbWFrZV9mbGFncyA9ICIiCi0gICAgaWYgYnVpbGRfYWxsOgotICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgotICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgotICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybDoKLSAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIikKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIFBDL1ZTOC4wIC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCi0gICAgc3NsX2RpciA9IGZpbmRfYmVzdF9zc2xfZGlyKCgiLi5cXC4uXFwuLiIsKSkKLSAgICBpZiBzc2xfZGlyIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQotICAgIHRyeToKLSAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKLSAgICAgICAgIyByZWJ1aWxkIG1ha2VmaWxlIHdoZW4gd2UgZG8gdGhlIHJvbGUgb3ZlciBmcm9tIDMyIHRvIDY0IGJ1aWxkCi0gICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IiBhbmQgb3MucGF0aC5pc2ZpbGUobTMyKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKLSAgICAgICAgICAgIG9zLnVubGluayhtMzIpCi0KLSAgICAgICAgIyBJZiB0aGUgc3NsIG1ha2VmaWxlcyBkbyBub3QgZXhpc3QsIHdlIGludm9rZSBQZXJsIHRvIGdlbmVyYXRlIHRoZW0uCi0gICAgICAgICMgRHVlIHRvIGEgYnVnIGluIHRoaXMgc2NyaXB0LCB0aGUgbWFrZWZpbGUgc29tZXRpbWVzIGVuZGVkIHVwIGVtcHR5Ci0gICAgICAgICMgRm9yY2UgYSByZWdlbmVyYXRpb24gaWYgaXQgaXMuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKG1ha2VmaWxlKT09MDoKLSAgICAgICAgICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwcmludCgiUGVybCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFrZWZpbGVzISIpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgICAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAjIFB1dCBvdXIgd29ya2luZyBQZXJsIGF0IHRoZSBmcm9udCBvZiBvdXIgcGF0aAotICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXQotICAgICAgICAgICAgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCkKLSAgICAgICAgICAgIGlmIGRlYnVnOgotICAgICAgICAgICAgICAgIHByaW50KCJPcGVuU1NMIGRlYnVnIGJ1aWxkcyBhcmVuJ3Qgc3VwcG9ydGVkLiIpCi0gICAgICAgICAgICAjaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgIyAgICAjIHRoZSBkb19tYXNtIHNjcmlwdCBpbiBvcGVuc3NsIGRvZXNuJ3QgZ2VuZXJhdGUgYSBkZWJ1ZwotICAgICAgICAgICAgIyAgICAjIGJ1aWxkIG1ha2VmaWxlIHNvIHdlIGdlbmVyYXRlIGl0IGhlcmU6Ci0gICAgICAgICAgICAjICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IjoKLSAgICAgICAgICAgICAgICBjcmVhdGVfbWFrZWZpbGU2NChtYWtlZmlsZSwgbTMyKQotICAgICAgICAgICAgZml4X21ha2VmaWxlKG1ha2VmaWxlKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZi5oIiwgciJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoKQotCi0gICAgICAgICMgSWYgdGhlIGFzc2VtYmxlciBmaWxlcyBkb24ndCBleGlzdCBpbiB0bXBYWCwgY29weSB0aGVtIHRoZXJlCi0gICAgICAgIGlmIHBlcmwgaXMgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygidG1wIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKCJ0bXAiK2RpcnN1ZmZpeCkKLSAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBpZiBub3QgZi5lbmRzd2l0aCgiLmFzbSIpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHIidG1wJXNcJXMiICUgKGRpcnN1ZmZpeCwgZikpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiYXNtJXNcJXMiICUgKGRpcnN1ZmZpeCwgZiksICJ0bXAiK2RpcnN1ZmZpeCkKLQotICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgaWYgYXJjaCA9PSAiYW1kNjQiOgotICAgICAgICAgICAgcmMgPSBvcy5zeXN0ZW0oIm1sNjQgLWMgLUZvbXNcXHVwdGFibGUub2JqIG1zXFx1cHRhYmxlLmFzbSIpCi0gICAgICAgICAgICBpZiByYzoKLSAgICAgICAgICAgICAgICBwcmludCgibWw2NCBhc3NlbWJsZXIgaGFzIGZhaWxlZC4iKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KHJjKQotCi0gICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xidWlsZGluZi5oIikKLSAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiKQotCi0gICAgICAgICNtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIFBFUkw9XCIlc1wiIC1mIFwiJXNcIiIgJShwZXJsLCBtYWtlZmlsZSkKLSAgICAgICAgbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyAtZiBcIiVzXCIiICUgbWFrZWZpbGUKLSAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyBzc2wgbWFrZWZpbGVzOiIsIG1ha2VDb21tYW5kKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyAiK21ha2VmaWxlKyIgZmFpbGVkIikKLSAgICAgICAgICAgIHByaW50KHJjKQotICAgICAgICAgICAgc3lzLmV4aXQocmMpCi0gICAgZmluYWxseToKLSAgICAgICAgb3MuY2hkaXIob2xkX2NkKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX3RraW50ZXIucHkgYi9QQy9WUzguMC9idWlsZF90a2ludGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTU5MDM5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX3RraW50ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0iIiJTY3JpcHQgdG8gY29tcGlsZSB0aGUgZGVwZW5kZW5jaWVzIG9mIF90a2ludGVyCi0KLUNvcHlyaWdodCAoYykgMjAwNyBieSBDaHJpc3RpYW4gSGVpbWVzIDxjaHJpc3RpYW5AY2hlaW1lcy5kZT4KLQotTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1oZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCi1wYXIgPSBvcy5wYXRoLnBhcmRpcgotCi1pZiAxOgotICAgIFRDTCA9ICJ0Y2w4LjQuMTYiCi0gICAgVEsgPSAidGs4LjQuMTYiCi0gICAgVElYID0gInRpeC04LjQuMCIKLWVsc2U6Ci0gICAgVENMID0gInRjbDguNWIzIgotICAgIFRLID0gInRjbDguNWIzIgotICAgIFRJWCA9ICJUaXg4LjQuMiIKLQotUk9PVCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oaGVyZSwgcGFyLCBwYXIsIHBhcikpCi0jIFdpbmRvd3MgMjAwMCBjb21wYXRpYmlsaXR5OiBXSU5WRVIgMHgwNTAwCi0jIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYWEzODM3NDUuYXNweAotTk1BS0UgPSAibm1ha2UgL25vbG9nbyAvZiAlcyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCAlcyAlcyIKLQotZGVmIG5tYWtlKG1ha2VmaWxlLCBjb21tYW5kPSIiLCAqKmt3KToKLSAgICBkZWZpbmVzID0gJyAnLmpvaW4oaysnPScrdiBmb3IgaywgdiBpbiBrdy5pdGVtcygpKQotICAgIGNtZCA9IE5NQUtFICUgKG1ha2VmaWxlLCBkZWZpbmVzLCBjb21tYW5kKQotICAgIHByaW50KCJcblxuIitjbWQrIlxuIikKLSAgICBpZiBvcy5zeXN0ZW0oY21kKSAhPSAwOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoY21kKQotCi1kZWYgYnVpbGQocGxhdGZvcm0sIGNsZWFuKToKLSAgICBpZiBwbGF0Zm9ybSA9PSAiV2luMzIiOgotICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKFJPT1QsICJ0Y2x0ayIpCi0gICAgICAgIG1hY2hpbmUgPSAiWDg2IgotICAgIGVsaWYgcGxhdGZvcm0gPT0gIng2NCI6Ci0gICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oUk9PVCwgInRjbHRrNjQiKQotICAgICAgICBtYWNoaW5lID0gIlg2NCIKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHBsYXRmb3JtKQotCi0gICAgIyBUQ0wKLSAgICB0Y2xkaXIgPSBvcy5wYXRoLmpvaW4oUk9PVCwgVENMKQotICAgIGlmIDE6Ci0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbih0Y2xkaXIsICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIElOU1RBTExESVI9ZGVzdCkKLQotICAgICMgVEsKLSAgICBpZiAxOgotICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oUk9PVCwgVEssICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIFRDTERJUj10Y2xkaXIsIElOU1RBTExESVI9ZGVzdCkKLQotICAgICMgVElYCi0gICAgaWYgMToKLSAgICAgICAgIyBweXRob245Lm1hayBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3N2bi5weXRob24ub3JnCi0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihST09ULCBUSVgsICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCAiY2xlYW4iKQotICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCBNQUNISU5FPW1hY2hpbmUpCi0gICAgICAgIG5tYWtlKCJweXRob245Lm1hayIsICJpbnN0YWxsIikKLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMiBvciBzeXMuYXJndlsxXSBub3QgaW4gKCJXaW4zMiIsICJ4NjQiKToKLSAgICAgICAgcHJpbnQoIiVzIFdpbjMyfHg2NCIgJSBzeXMuYXJndlswXSkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIGlmICItYyIgaW4gc3lzLmFyZ3Y6Ci0gICAgICAgIGNsZWFuID0gVHJ1ZQotICAgIGVsc2U6Ci0gICAgICAgIGNsZWFuID0gRmFsc2UKLQotICAgIGJ1aWxkKHN5cy5hcmd2WzFdLCBjbGVhbikKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnoyLnZjcHJvaiBiL1BDL1ZTOC4wL2J6Mi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTE5NzkuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnoyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYnoyIg0KLQlQcm9qZWN0R1VJRD0iezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQotCVJvb3ROYW1lc3BhY2U9ImJ6MiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9ImJ6aXAyIDEuMC42IEhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYl9wcml2YXRlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJiemlwMiAxLjAuNiBTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJsb2Nrc29ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxjcmN0YWJsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGRlY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxodWZmbWFuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilccmFuZHRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcyBiL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjQzY2IuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJkZWJ1ZyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IktpbGxQeXRob25FeGUiDQotCQlWYWx1ZT0iJChPdXREaXIpXGtpbGxfcHl0aG9uX2QuZXhlIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9lbnYuYmF0IGIvUEMvVlM4LjAvZW52LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5OTBhOC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9lbnYuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AZWNobyBvZmYKLXNldCBWUzg9JVByb2dyYW1GaWxlcyVcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gOAotZWNobyBCdWlsZCBlbnZpcm9ubWVudHM6IHg4NiwgaWE2NCwgYW1kNjQsIHg4Nl9hbWQ2NCwgeDg2X2lhNjQKLWVjaG8uCi1jYWxsICIlVlM4JVxWQ1x2Y3ZhcnNhbGwuYmF0IiAlMQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZmllbGQzLnB5IGIvUEMvVlM4LjAvZmllbGQzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGNiZTM2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2ZpZWxkMy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQW4gYWJzdXJkIHdvcmthcm91bmQgZm9yIHRoZSBsYWNrIG9mIGFyaXRobWV0aWMgaW4gTVMncyByZXNvdXJjZSBjb21waWxlci4KLSMgQWZ0ZXIgYnVpbGRpbmcgUHl0aG9uLCBydW4gdGhpcywgdGhlbiBwYXN0ZSB0aGUgb3V0cHV0IGludG8gdGhlIGFwcHJvcHJpYXRlCi0jIHBhcnQgb2YgUENccHl0aG9uX250LnJjLgotIyBFeGFtcGxlIG91dHB1dDoKLSMKLSMgKiBGb3IgMi4zYTAsCi0jICogUFlfTUlDUk9fVkVSU0lPTiA9IDAKLSMgKiBQWV9SRUxFQVNFX0xFVkVMID0gJ2FscGhhJyA9IDB4QQotIyAqIFBZX1JFTEVBU0VfU0VSSUFMID0gMQotIyAqCi0jICogYW5kIDAqMTAwMCArIDEwKjEwICsgMSA9IDEwMS4KLSMgKi8KLSMgI2RlZmluZSBGSUVMRDMgMTAxCi0KLWltcG9ydCBzeXMKLQotbWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCA9IHN5cy52ZXJzaW9uX2luZm8KLWxldmVsbnVtID0geydhbHBoYSc6IDB4QSwKLSAgICAgICAgICAgICdiZXRhJzogMHhCLAotICAgICAgICAgICAgJ2NhbmRpZGF0ZSc6IDB4QywKLSAgICAgICAgICAgICdmaW5hbCc6IDB4RiwKLSAgICAgICAgICAgfVtsZXZlbF0KLXN0cmluZyA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0gIyBsaWtlICcyLjNhMCcKLQotcHJpbnQoIiAqIEZvciAlcywiICUgc3RyaW5nKQotcHJpbnQoIiAqIFBZX01JQ1JPX1ZFUlNJT04gPSAlZCIgJSBtaWNybykKLXByaW50KCIgKiBQWV9SRUxFQVNFX0xFVkVMID0gJXIgPSAlcyIgJSAobGV2ZWwsIGhleChsZXZlbG51bSkpKQotcHJpbnQoIiAqIFBZX1JFTEVBU0VfU0VSSUFMID0gJWQiICUgc2VyaWFsKQotcHJpbnQoIiAqIikKLQotZmllbGQzID0gbWljcm8gKiAxMDAwICsgbGV2ZWxudW0gKiAxMCArIHNlcmlhbAotCi1wcmludCgiICogYW5kICVkKjEwMDAgKyAlZCoxMCArICVkID0gJWQiICUgKG1pY3JvLCBsZXZlbG51bSwgc2VyaWFsLCBmaWVsZDMpKQotcHJpbnQoIiAqLyIpCi1wcmludCgiI2RlZmluZSBGSUVMRDMiLCBmaWVsZDMpCmRpZmYgLS1naXQgYS9QQy9WUzguMC9pZGxlLmJhdCBiL1BDL1ZTOC4wL2lkbGUuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjNlNzA0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2lkbGUuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gc3RhcnQgaWRsZQotcmVtIFVzYWdlOiAgaWRsZSBbLWRdCi1yZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi0KLXNldGxvY2FsCi1zZXQgZXhlPXB5dGhvbgotUEFUSCAlUEFUSCU7Li5cLi5cLi5cdGNsdGtcYmluCi0KLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQKLQotc2V0IGNtZD0lZXhlJSAuLi8uLi9MaWIvaWRsZWxpYi9pZGxlLnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci0KLWVjaG8gb24KLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9raWxsX3B5dGhvbi5jIGIvUEMvVlM4LjAva2lsbF9weXRob24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIzMjNkMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9raWxsX3B5dGhvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBIZWxwZXIgcHJvZ3JhbSBmb3Iga2lsbGluZyBsaW5nZXJpbmcgcHl0aG9uW19kXS5leGUgcHJvY2Vzc2VzIGJlZm9yZQotICogYnVpbGRpbmcsIHRodXMgYXR0ZW1wdGluZyB0byBhdm9pZCBidWlsZCBmYWlsdXJlcyBkdWUgdG8gZmlsZXMgYmVpbmcKLSAqIGxvY2tlZC4KLSAqLwotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHdjaGFyLmg+Ci0jaW5jbHVkZSA8dGxoZWxwMzIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jcHJhZ21hIGNvbW1lbnQobGliLCAicHNhcGkiKQotCi0jaWZkZWYgX0RFQlVHCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uX2QuZXhlIikKLSNkZWZpbmUgUFlUSE9OX0VYRV9MRU4gICAgICAoMTIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRSAgICAgKEwia2lsbF9weXRob25fZC5leGUiKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEVfTEVOICgxNykKLSNlbHNlCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uLmV4ZSIpCi0jZGVmaW5lIFBZVEhPTl9FWEVfTEVOICAgICAgKDEwKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEUgICAgIChMImtpbGxfcHl0aG9uLmV4ZSIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRV9MRU4gKDE1KQotI2VuZGlmCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgSEFORExFICAgaHAsIGhzcCwgaHNtOyAvKiBwcm9jZXNzLCBzbmFwc2hvdCBwcm9jZXNzZXMsIHNuYXBzaG90IG1vZHVsZXMgKi8KLSAgICBEV09SRCAgICBkYWMsIG91cl9waWQ7Ci0gICAgc2l6ZV90ICAgbGVuOwotICAgIHdjaGFyX3QgIHBhdGhbTUFYX1BBVEgrMV07Ci0KLSAgICBNT0RVTEVFTlRSWTMyVyAgbWU7Ci0gICAgUFJPQ0VTU0VOVFJZMzJXIHBlOwotCi0gICAgbWUuZHdTaXplID0gc2l6ZW9mKE1PRFVMRUVOVFJZMzJXKTsKLSAgICBwZS5kd1NpemUgPSBzaXplb2YoUFJPQ0VTU0VOVFJZMzJXKTsKLQotICAgIG1lbXNldChwYXRoLCAwLCBNQVhfUEFUSCsxKTsKLQotICAgIG91cl9waWQgPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7Ci0KLSAgICBoc20gPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsIG91cl9waWQpOwotICAgIGlmIChoc20gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgcHJpbnRmKCJDcmVhdGVUb29saGVscDMyU25hcHNob3RbMV0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoIU1vZHVsZTMyRmlyc3RXKGhzbSwgJm1lKSkgewotICAgICAgICBwcmludGYoIk1vZHVsZTMyRmlyc3RXWzFdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBFbnVtZXJhdGUgb3ZlciB0aGUgbW9kdWxlcyBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcyBpbiBvcmRlciB0byBmaW5kCi0gICAgICoga2lsbF9wcm9jZXNzW19kXS5leGUsIHRoZW4gdGFrZSBhIG5vdGUgb2YgdGhlIGRpcmVjdG9yeSBpdCBsaXZlcyBpbi4KLSAgICAgKi8KLSAgICBkbyB7Ci0gICAgICAgIGlmIChfd2NzbmljbXAobWUuc3pNb2R1bGUsIEtJTExfUFlUSE9OX0VYRSwgS0lMTF9QWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBsZW4gPSB3Y3NubGVuX3MobWUuc3pFeGVQYXRoLCBNQVhfUEFUSCkgLSBLSUxMX1BZVEhPTl9FWEVfTEVOOwotICAgICAgICB3Y3NuY3B5X3MocGF0aCwgTUFYX1BBVEgrMSwgbWUuc3pFeGVQYXRoLCBsZW4pOyAKLQotICAgICAgICBicmVhazsKLQotICAgIH0gd2hpbGUgKE1vZHVsZTMyTmV4dFcoaHNtLCAmbWUpKTsKLQotICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0KLSAgICBpZiAocGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgIHByaW50ZigiZmFpbGVkIHRvIGRpc2Nlcm4gZGlyZWN0b3J5IG9mIHJ1bm5pbmcgcHJvY2Vzc1xuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVGFrZSBhIHNuYXBzaG90IG9mIHN5c3RlbSBwcm9jZXNzZXMuICBFbnVtZXJhdGUgb3ZlciB0aGUgc25hcHNob3QsCi0gICAgICogbG9va2luZyBmb3IgcHl0aG9uIHByb2Nlc3Nlcy4gIFdoZW4gd2UgZmluZCBvbmUsIHZlcmlmeSBpdCBsaXZlcwotICAgICAqIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3ZSBsaXZlIGluLiAgSWYgaXQgZG9lcywga2lsbCBpdC4gIElmIHdlJ3JlCi0gICAgICogdW5hYmxlIHRvIGtpbGwgaXQsIHRyZWF0IHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgcmV0dXJuIDEuCi0gICAgICogCi0gICAgICogVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0aGF0IHdlJ3JlIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIAotICAgICAqIGJ1aWxkIHByb2Nlc3Mgb24gdGhlIGJhc2lzIHRoYXQgd2UnbGwgdGFrZSBjYXJlIG9mIGtpbGxpbmcgYW55Ci0gICAgICogcnVubmluZyBpbnN0YW5jZXMsIHN1Y2ggdGhhdCB0aGUgYnVpbGQgd29uJ3QgZW5jb3VudGVyIHBlcm1pc3Npb24KLSAgICAgKiBkZW5pZWQgZXJyb3JzIGR1cmluZyBsaW5raW5nLiBJZiB3ZSBjYW4ndCBraWxsIG9uZSBvZiB0aGUgcHJvY2Vzc2VzLAotICAgICAqIHdlIGNhbid0IHByb3ZpZGUgdGhpcyBhc3N1cmFuY2UsIGFuZCB0aGUgYnVpbGQgc2hvdWxkbid0IHN0YXJ0LgotICAgICAqLwotCi0gICAgaHNwID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQUFJPQ0VTUywgMCk7Ci0gICAgaWYgKGhzcCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICBwcmludGYoIkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdFsyXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICghUHJvY2VzczMyRmlyc3RXKGhzcCwgJnBlKSkgewotICAgICAgICBwcmludGYoIlByb2Nlc3MzMkZpcnN0VyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGRhYyA9IFBST0NFU1NfUVVFUllfSU5GT1JNQVRJT04gfCBQUk9DRVNTX1ZNX1JFQUQgfCBQUk9DRVNTX1RFUk1JTkFURTsKLSAgICBkbyB7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKLSAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCi0gICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgotICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCi0gICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KLSAgICAgICAgICovCi0KLSAgICAgICAgaWYgKF93Y3NuaWNtcChwZS5zekV4ZUZpbGUsIFBZVEhPTl9FWEUsIFBZVEhPTl9FWEVfTEVOKSkKLSAgICAgICAgICAgIC8qIFRoaXMgaXNuJ3QgYSBweXRob24gcHJvY2Vzcy4gKi8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIEl0J3MgYSBweXRob24gcHJvY2Vzcywgc28gZmlndXJlIG91dCB3aGljaCBkaXJlY3RvcnkgaXQncyBpbi4uLiAqLwotICAgICAgICBoc20gPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsIHBlLnRoMzJQcm9jZXNzSUQpOwotICAgICAgICBpZiAoaHNtID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICAgICAgLyogCi0gICAgICAgICAgICAgKiBJZiBvdXIgbW9kdWxlIHNuYXBzaG90IGZhaWxzICh3aGljaCB3aWxsIGhhcHBlbiBpZiB3ZSBkb24ndCBvd24KLSAgICAgICAgICAgICAqIHRoZSBwcm9jZXNzKSwganVzdCBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlLiAgKEl0IHNlZW1zIGRpZmZlcmVudAotICAgICAgICAgICAgICogdmVyc2lvbnMgb2YgV2luZG93cyByZXR1cm4gZGlmZmVyZW50IHZhbHVlcyBmb3IgR2V0TGFzdEVycm9yKCkKLSAgICAgICAgICAgICAqIGluIHRoaXMgc2l0dWF0aW9uOyBpdCdzIGVhc2llciB0byBqdXN0IGlnbm9yZSBpdCBhbmQgbW92ZSBvbiB2cy4KLSAgICAgICAgICAgICAqIHN0b3BwaW5nIHRoZSBidWlsZCBmb3Igd2hhdCBjb3VsZCBiZSBhIGZhbHNlIHBvc2l0aXZlLikKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghTW9kdWxlMzJGaXJzdFcoaHNtLCAmbWUpKSB7Ci0gICAgICAgICAgICBwcmludGYoIk1vZHVsZTMyRmlyc3RXWzJdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoX3djc25pY21wKG1lLnN6TW9kdWxlLCBQWVRIT05fRVhFLCBQWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICAgICAgLyogV3JvbmcgbW9kdWxlLCB3ZSdyZSBsb29raW5nIGZvciBweXRob25bX2RdLmV4ZS4uLiAqLwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoX3djc25pY21wKHBhdGgsIG1lLnN6RXhlUGF0aCwgbGVuKSkKLSAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGRvZXNuJ3QgbGl2ZSBpbiBvdXIgZGlyZWN0b3J5LiAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvKiBQeXRob24gcHJvY2VzcyByZXNpZGluZyBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5LCBraWxsIGl0ISAgKi8KLSAgICAgICAgICAgIGhwID0gT3BlblByb2Nlc3MoZGFjLCBGQUxTRSwgcGUudGgzMlByb2Nlc3NJRCk7Ci0gICAgICAgICAgICBpZiAoIWhwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJPcGVuUHJvY2VzcyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIVRlcm1pbmF0ZVByb2Nlc3MoaHAsIDEpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJUZXJtaW5hdGVQcm9jZXNzIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHApOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDbG9zZUhhbmRsZShocCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICB9IHdoaWxlIChNb2R1bGUzMk5leHRXKGhzbSwgJm1lKSk7Ci0KLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLQotICAgIH0gd2hpbGUgKFByb2Nlc3MzMk5leHRXKGhzcCwgJnBlKSk7Ci0KLSAgICBDbG9zZUhhbmRsZShoc3ApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHZpOiBzZXQgdHM9OCBzdz00IHN0cz00IGV4cGFuZHRhYiAqLwpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAva2lsbF9weXRob24udmNwcm9qIGIvUEMvVlM4LjAva2lsbF9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWJlMzMwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ia2lsbF9weXRob24iDQotCVByb2plY3RHVUlEPSJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCi0JUm9vdE5hbWVzcGFjZT0ia2lsbF9weXRob24iDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLlxraWxsX3B5dGhvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMgYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWZhMDdhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUgQ01EX1NJWkUgNTAwCi0KLS8qIFRoaXMgZmlsZSBjcmVhdGVzIHRoZSBnZXRidWlsZGluZm8ubyBvYmplY3QsIGJ5IGZpcnN0Ci0gICBpbnZva2luZyBzdWJ3Y3Jldi5leGUgKGlmIGZvdW5kKSwgYW5kIHRoZW4gaW52b2tpbmcgY2wuZXhlLgotICAgQXMgYSBzaWRlIGVmZmVjdCwgaXQgbWlnaHQgZ2VuZXJhdGUgUENCdWlsZFxnZXRidWlsZGluZm8yLmMKLSAgIGFsc28uIElmIHRoaXMgaXNuJ3QgYSBzdWJ2ZXJzaW9uIGNoZWNrb3V0LCBvciBzdWJ3Y3JldiBpc24ndAotICAgZm91bmQsIGl0IGNvbXBpbGVzIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgaW5zdGVhZC4KLQotICAgQ3VycmVudGx5LCBzdWJ3Y3Jldi5leGUgaXMgZm91bmQgZnJvbSB0aGUgcmVnaXN0cnkgZW50cmllcwotICAgb2YgVG9ydG9pc2VTVk4uCi0KLSAgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBwbGFjZSBnZXRidWlsZGluZm8ubyBpbnRvIHRoZSBwcm9wZXIKLSAgIGJpbmFyeSBkaXJlY3RvcnkuIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBhcyB0aGlzIHRvb2wgaXMKLSAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKLSAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KLQotICAgSG93ZXZlciwgaWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoaXMgd2lsbCBiZSB1c2VkCi0gICBhcyBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2hlcmUgYW55IGdldGJ1aWxkaW5mbzIuYyBhbmQKLSAgIGdldGJ1aWxkaW5mby5vIGZpbGVzIGFyZSBwdXQuICBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZQotICAgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGJ1aWx0IGluIHBhcmFsbGVsLCB0byBhdm9pZCB0aGVtCi0gICB0cmFtcGxpbmcgZWFjaCBvdGhlcidzIGZpbGVzLgotCi0qLwotCi1pbnQgbWFrZV9idWlsZGluZm8yKGNvbnN0IGNoYXIgKnRtcHBhdGgpCi17Ci0gICAgc3RydWN0IF9zdGF0IHN0OwotICAgIEhLRVkgaFRvcnRvaXNlOwotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRSsxXTsKLSAgICBEV09SRCB0eXBlLCBzaXplOwotICAgIGlmIChfc3RhdCgiLnN2biIsICZzdCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBBbGxvdyBzdXBwcmVzc2lvbiBvZiBzdWJ3Y3Jldi5leGUgaW52b2NhdGlvbiBpZiBhIG5vX3N1YndjcmV2IGZpbGUgaXMgcHJlc2VudC4gKi8KLSAgICBpZiAoX3N0YXQoIm5vX3N1YndjcmV2IiwgJnN0KSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoUmVnT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTICYmCi0gICAgICAgIFJlZ09wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAvKiBUb3J0b2lzZSBub3QgaW5zdGFsbGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbW1hbmRbMF0gPSAnIic7ICAvKiBxdW90ZSB0aGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZSAqLwotICAgIHNpemUgPSBzaXplb2YoY29tbWFuZCkgLSAxOwotICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaFRvcnRvaXNlLCAiRGlyZWN0b3J5IiwgMCwgJnR5cGUsIGNvbW1hbmQrMSwgJnNpemUpICE9IEVSUk9SX1NVQ0NFU1MgfHwKLSAgICAgICAgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgIC8qIFJlZ2lzdHJ5IGNvcnJ1cHRlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImJpblxcc3Vid2NyZXYuZXhlIik7Ci0gICAgaWYgKF9zdGF0KGNvbW1hbmQrMSwgJnN0KSA8IDApCi0gICAgICAgIC8qIHN1YndjcmV2LmV4ZSBub3QgcGFydCBvZiB0aGUgcmVsZWFzZSAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIC4uXFwuLiAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jICIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mbzIuYyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIGlmIChzeXN0ZW0oY29tbWFuZCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQotewotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRV0gPSAiY2wuZXhlIC1jIC1EX1dJTjMyIC1EVVNFX0RMX0VYUE9SVCAtRF9XSU5ET1dTIC1EV0lOMzIgLURfV0lORExMICI7Ci0gICAgY2hhciB0bXBwYXRoW0NNRF9TSVpFXSA9ICIiOwotICAgIGludCBkb191bmxpbmssIHJlc3VsdDsKLSAgICBjaGFyICp0bXBkaXIgPSBOVUxMOwotICAgIGlmIChhcmdjIDw9IDIgfHwgYXJnYyA+IDMpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKSBbdG1wZGlyXVxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2UiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIkRlYnVnIikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1EX0RFQlVHIC1NRGQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUl0YW5pdW0iKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19JVEFOSVVNICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VBTUQ2NCIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgIik7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19PUFRFUk9OICIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uICVzXG4iLCBhcmd2WzFdKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0gICAgaWYgKGFyZ2MgPiAyKSB7Ci0gICAgICAgIHRtcGRpciA9IGFyZ3ZbMl07Ci0gICAgICAgIHN0cmNhdF9zKHRtcHBhdGgsIF9jb3VudG9mKHRtcHBhdGgpLCB0bXBkaXIpOwotICAgICAgICBzdHJjYXRfcyh0bXBwYXRoLCBfY291bnRvZih0bXBwYXRoKSwgIlxcIik7Ci0gICAgfQotCi0gICAgaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIodG1wcGF0aCkpKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMgLURTVUJXQ1JFViAiKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIgLUZvIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvLm8gLUkuLlxcLi5cXEluY2x1ZGUgLUkuLlxcLi5cXFBDIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcmVzdWx0ID0gc3lzdGVtKGNvbW1hbmQpOwotICAgIGlmIChkb191bmxpbmspIHsKLSAgICAgICAgY29tbWFuZFswXSA9ICdcMCc7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMiKTsKLSAgICAgICAgX3VubGluayhjb21tYW5kKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2ogYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNWNjY2QuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJtYWtlX2J1aWxkaW5mbyINCi0JUHJvamVjdEdVSUQ9IntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLQlSb290TmFtZXNwYWNlPSJtYWtlX2J1aWxkaW5mbyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFrZV9idWlsZGluZm8uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiBiL1BDL1ZTOC4wL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGJmMTBkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlQcm9qZWN0R1VJRD0ie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotCVJvb3ROYW1lc3BhY2U9Im1ha2VfdmVyc2lvbmluZm8iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmMuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yYy5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250LmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmMuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yYy5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mby5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnQuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yY19kLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnRfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yY19kLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm9fZC5leGUiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1ha2VfdmVyc2lvbmluZm8uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wY2J1aWxkLnNsbiBiL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNhNGFhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCisrKyAvZGV2L251bGwKQEAgLTEsNTYwICswLDAgQEAKLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDkuMDANCi0jIFZpc3VhbCBTdHVkaW8gMjAwNQ0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uIiwgInB5dGhvbi52Y3Byb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9ID0ge0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX3ZlcnNpb25pbmZvIiwgIm1ha2VfdmVyc2lvbmluZm8udmNwcm9qIiwgIntGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbmNvcmUiLCAicHl0aG9uY29yZS52Y3Byb2oiLCAie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9ID0ge0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0NCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9ID0gezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0NCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9ID0ge0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob253IiwgInB5dGhvbncudmNwcm9qIiwgIntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmNwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmNwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2RDQ2REU4fSIpID0gIlNvbHV0aW9uIEl0ZW1zIiwgIlNvbHV0aW9uIEl0ZW1zIiwgIns1NTNFQzMzRS05ODE2LTQ5OTYtQTY2MC01RDYxODZBMEIwQjN9Ig0KLQlQcm9qZWN0U2VjdGlvbihTb2x1dGlvbkl0ZW1zKSA9IHByZVByb2plY3QNCi0JCS4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMgPSAuLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jDQotCQlyZWFkbWUudHh0ID0gcmVhZG1lLnR4dA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjcHJvaiIsICJ7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXMiLCAiX2N0eXBlcy52Y3Byb2oiLCAiezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzX3Rlc3QiLCAiX2N0eXBlc190ZXN0LnZjcHJvaiIsICJ7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9lbGVtZW50dHJlZSIsICJfZWxlbWVudHRyZWUudmNwcm9qIiwgInsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX21zaSIsICJfbXNpLnZjcHJvaiIsICJ7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zb2NrZXQiLCAiX3NvY2tldC52Y3Byb2oiLCAiezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3FsaXRlMyIsICJfc3FsaXRlMy52Y3Byb2oiLCAiezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9ID0ge0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3NsIiwgIl9zc2wudmNwcm9qIiwgIntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfSA9IHs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3Byb2oiLCAiezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiejIiLCAiYnoyLnZjcHJvaiIsICJ7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNlbGVjdCIsICJzZWxlY3QudmNwcm9qIiwgInsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidW5pY29kZWRhdGEiLCAidW5pY29kZWRhdGEudmNwcm9qIiwgIntFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHlleHBhdCIsICJweWV4cGF0LnZjcHJvaiIsICJ7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImJkaXN0X3dpbmluc3QiLCAiYmRpc3Rfd2luaW5zdC52Y3Byb2oiLCAie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2hhc2hsaWIiLCAiX2hhc2hsaWIudmNwcm9qIiwgIns0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3FsaXRlMyIsICJzcWxpdGUzLnZjcHJvaiIsICJ7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9tdWx0aXByb2Nlc3NpbmciLCAiX211bHRpcHJvY2Vzc2luZy52Y3Byb2oiLCAiezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2wiLCAic3NsLnZjcHJvaiIsICJ7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImtpbGxfcHl0aG9uIiwgImtpbGxfcHl0aG9uLnZjcHJvaiIsICJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCi1FbmRQcm9qZWN0DQotR2xvYmFsDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQotCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQotCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQNCi0JCVBHSW5zdHJ1bWVudHxXaW4zMiA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJUEdJbnN0cnVtZW50fHg2NCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCVBHVXBkYXRlfFdpbjMyID0gUEdVcGRhdGV8V2luMzINCi0JCVBHVXBkYXRlfHg2NCA9IFBHVXBkYXRlfHg2NA0KLQkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzINCi0JCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4NjQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KLQkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQotCUVuZEdsb2JhbFNlY3Rpb24NCi1FbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ2luc3RydW1lbnQudnNwcm9wcyBiL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGM1ZjE4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InBnaW5zdHJ1bWVudCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKE91dERpclBHSSkiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC1wZ2lcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJRmF2b3JTaXplT3JTcGVlZD0iMiINCi0JCU9taXRGcmFtZVBvaW50ZXJzPSJ0cnVlIg0KLQkJRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz0iZmFsc2UiDQotCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiDQotCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQotCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCi0JCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQotCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSIyIg0KLQkJUHJvZmlsZUd1aWRlZERhdGFiYXNlPSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ2lcJChUYXJnZXROYW1lKS5wZ2QiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSlcJChUYXJnZXROYW1lKS5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Ik91dERpclBHSSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ2lcIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzIGIvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZjZmMyZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InBndXBkYXRlIg0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnb1wiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFNvbHV0aW9uRGlyKVxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJQWRkaXRpb25hbE1hbmlmZXN0RGVwZW5kZW5jaWVzPSIiDQotCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSI0Ig0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWQudnNwcm9wcyBiL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGMyMWUxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiDQotCQlSdW50aW1lTGlicmFyeT0iMiINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5weWQiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkucGRiIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCUVtYmVkTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQlDb21tYW5kTGluZT0iIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWRfZC52c3Byb3BzIGIvUEMvVlM4LjAvcHlkX2QudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEzYTMwYi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weWRfZC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZF9kIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjAiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiDQotCQlSdW50aW1lTGlicmFyeT0iMyINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLnB5ZCINCi0JCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLnBkYiINCi0JCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKVwkKFRhcmdldE5hbWUpLmxpYiINCi0JCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQlFbWJlZE1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJQ29tbWFuZExpbmU9IiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoU29sdXRpb25EaXIpcHl0aG9uX2QuZXhlIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWV4cGF0LnZjcHJvaiBiL1BDL1ZTOC4wL3B5ZXhwYXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTllNGVjLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5ZXhwYXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWV4cGF0Ig0KLQlQcm9qZWN0R1VJRD0ie0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0iDQotCVJvb3ROYW1lc3BhY2U9InB5ZXhwYXQiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcyBiL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzFiZDNmLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5cHJvamVjdCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSINCi0JSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbk5hbWUpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMiINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsgLi5cLi5cUEMiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyIg0KLQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KLQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCVdhcm5pbmdMZXZlbD0iMyINCi0JCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQlDb21waWxlQXM9IjAiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiDQotCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFRhcmdldE5hbWUpLnBkYiINCi0JCVN1YlN5c3RlbT0iMiINCi0JCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCi0JCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQzsuLlwuLlxJbmNsdWRlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeURsbE5hbWUiDQotCQlWYWx1ZT0icHl0aG9uMzMiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKVxweXRob24uZXhlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJleHRlcm5hbHNEaXIiDQotCQlWYWx1ZT0iLi5cLi5cLi4iDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InNxbGl0ZTNEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjYuMjEiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9ImJ6MkRpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcYnppcDItMS4wLjYiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcdGNsdGsiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjREaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrNjQiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrTGliIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NS5saWIgJCh0Y2x0a0RpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0xpYkRlYnVnIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NWcubGliICQodGNsdGtEaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjRMaWIiDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODUubGliICQodGNsdGs2NERpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0TGliRGVidWciDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrNjREaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5dGhvbi52Y3Byb2ogYi9QQy9WUzguMC9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjQ3YzBlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbiINCi0JUHJvamVjdEdVSUQ9IntCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob25fZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIxMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbi5pY28iDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHl0aG9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YmI5ZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE5MjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbmNvcmUiDQotCVByb2plY3RHVUlEPSJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSINCi0JUm9vdE5hbWVzcGFjZT0icHl0aG9uY29yZSINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSlfZC5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSlfZC5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgKCRJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSW5jbHVkZSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFic3RyYWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFjY3UuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYXNkbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYml0c2V0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJvb2xvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZXNfbWV0aG9kcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxieXRlYXJyYXlvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZXNvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY2VsbG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjZXZhbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjbGFzc29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvZGVjcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb21waWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvbXBsZXhvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGF0ZXRpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGVzY3JvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGljdG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkeW5hbWljX2Fubm90YXRpb25zLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGVudW1vYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZXJyY29kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxldmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZpbGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZmlsZXV0aWxzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZsb2F0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZvcm1hdHRlcl91bmljb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZyYW1lb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZ1bmNvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZ2Vub2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdyYW1pbml0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdyYW1tYXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcaW1wb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGludHJjaGVjay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxpdGVyb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGxpc3RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbG9uZ2ludHJlcHIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbG9uZ29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtYXJzaGFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1lbW9yeW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZXRhZ3JhbW1hci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZXRob2RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbW9kc3VwcG9ydC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtb2R1bGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbm9kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb2JqaW1wbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvcGNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb3NkZWZzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhcnNldG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhdGNobGV2ZWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccGdlbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwZ2VuaGVhZGVycy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweV9jdXJzZXMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlhcmVuYS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWNhcHN1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHljdHlwZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWRlYnVnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXJyb3JzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlmcGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlnZXRvcHQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltYWN0b29sYm94LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5bWF0aC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltZW0uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlwb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5c3RhdGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdHJjbXAuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdHJ0b2QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZHRvYS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxQeXRob24tYXN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXFB5dGhvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRob25ydW4uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHl0aHJlYWQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccmFuZ2VvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc2V0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHNsaWNlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN0cnVjdG1lbWJlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzdHJ1Y3RzZXEuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3ltdGFibGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3lzbW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHRpbWVmdW5jcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0b2tlbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0cmFjZWJhY2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdHVwbGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdWNuaGFzaC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx1bmljb2Rlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHdlYWtyZWZvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Ik1vZHVsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jc3YuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2pzb24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbHNwcm9mLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9waWNrbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3JlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYmluYXNjaWkuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RhdGV0aW1lbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYWluLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJfaW8iDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJ6bGliIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMiDQotCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmaXhlZC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6Y29uZi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6Y29uZi5pbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6bGliLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9ImNqa2NvZGVjcyINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGFsZ19qaXN4MDIwMS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGNqa2NvZGVjcy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGVtdV9qaXN4MDIxM18yMDAwLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfY24uaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19oay5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19qcC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2tyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfdHcuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Ik9iamVjdHMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhY2N1LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2Fwc3VsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcY291bnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXGZhc3RzZWFyY2guaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmlsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmluZC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGdlbm9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xpdGVyb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxpc3RvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZW1vcnlvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHBhcnRpdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGV0eXBlX2RiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlBhcnNlciINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYWNjZWxlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGJpdHNldC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyMS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGxpc3Rub2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbm9kZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNldG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQQyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xfc3VicHJvY2Vzcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcd2lucmVnLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xjb25maWcuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGRsX250LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xlcnJtYXAuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGdldHBhdGhwLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtc3ZjcnRtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5Y29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQeXRob24iDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXF93YXJuaW5ncy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzZGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNldmFsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29kZWNzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29tcGlsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGVycm9ycy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZpbGV1dGlscy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnJvemVuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnV0dXJlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0YXJncy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0b3B0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ3JhbWluaXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnRkbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydGRsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbWFyc2hhbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzdHJ0b3VsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccGVlcGhvbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWFyZW5hLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHljdHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5ZnBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHltYXRoLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aW1lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdGF0ZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RyY21wLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJ0b2QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkdG9hLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHJhbmRvbS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5bXRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3lzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkX250LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdHJhY2ViYWNrLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fbnQucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9udy52Y3Byb2ogYi9QQy9WUzguMC9weXRob253LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzN2I3OC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob253LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHl0aG9udyINCi0JUHJvamVjdEdVSUQ9IntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9ud19kLmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbndfZC5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xXaW5NYWluLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzIGIvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGRlZjkwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJyZWxlYXNlIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iS2lsbFB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKE91dERpcilca2lsbF9weXRob24uZXhlIg0KLQkvPgkNCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcm1weWMucHkgYi9QQy9WUzguMC9ybXB5Yy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThlMTcwNS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9ybXB5Yy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgUmVtb3ZlIGFsbCB0aGUgLnB5YyBhbmQgLnB5byBmaWxlcyB1bmRlciAuLi9MaWIuCi0KLQotZGVmIGRlbHRyZWUocm9vdCk6Ci0gICAgaW1wb3J0IG9zCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCi0KLSAgICBucHljID0gbnB5byA9IDAKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhyb290KToKLSAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBkZWxldGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnB5YycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHljICs9IDEKLSAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aCgnLnB5bycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHlvICs9IDEKLQotICAgICAgICAgICAgaWYgZGVsZXRlOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShqb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmV0dXJuIG5weWMsIG5weW8KLQotbnB5YywgbnB5byA9IGRlbHRyZWUoIi4uLy4uL0xpYiIpCi1wcmludChucHljLCAiLnB5YyBkZWxldGVkLCIsIG5weW8sICIucHlvIGRlbGV0ZWQiKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcnQuYmF0IGIvUEMvVlM4LjAvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI5ZTE5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3J0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gcmVncnRlc3RfYXJncwotcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1yZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotcmVtICAgICAgYWZ0ZXIgZGVsZXRpbmcgYWxsIHRoZSAucHlbY29dIGZpbGVzIHJlYWNoYWJsZSBmcm9tIExpYi8uCi1yZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1yZW0gQWxsIGxlYWRpbmcgaW5zdGFuY2VzIG9mIHRoZXNlIHN3aXRjaGVzIGFyZSBzaGlmdGVkIG9mZiwgYW5kCi1yZW0gd2hhdGV2ZXIgcmVtYWlucyBpcyBwYXNzZWQgdG8gcmVncnRlc3QucHkuICBGb3IgZXhhbXBsZSwKLXJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC1PIC4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC14IHRlc3RfdGhyZWFkCi1yZW0gdHdpY2UsIGFuZAotcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5LgotcmVtCi1yZW0gQ29uZnVzaW5nOiAgaWYgeW91IHdhbnQgdG8gcGFzcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBsaWtlCi1yZW0gICAgIC11IG5ldHdvcmssbGFyZ2VmaWxlCi1yZW0gdGhlbiB5b3UgaGF2ZSB0byBxdW90ZSBpdCBvbiB0aGUgcnQgbGluZSwgbGlrZQotcmVtICAgICBydCAtdSAibmV0d29yayxsYXJnZWZpbGUiCi0KLXNldGxvY2FsCi0KLXNldCBleGU9cHl0aG9uCi1zZXQgcW1vZGU9Ci1zZXQgZGFzaE89Ci1QQVRIICVQQVRIJTslfmRwMC4uXC4uXC4uXHRjbHRrXGJpbgotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItcSIgKHNldCBxbW9kZT15ZXMpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi0KLXNldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlCi0KLWVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotJWV4ZSUgcm1weWMucHkKLQotZWNobyBvbgotJWNtZCUKLUBlY2hvIG9mZgotCi1lY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLXBhdXNlCi0KLTpRbW9kZQotZWNobyBvbgotJWNtZCUKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2ogYi9QQy9WUzguMC9zZWxlY3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzFmYzE2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNlbGVjdCINCi0JUHJvamVjdEdVSUQ9InsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9Ig0KLQlSb290TmFtZXNwYWNlPSJzZWxlY3QiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmJlNWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNxbGl0ZTMiDQotCVByb2plY3RHVUlEPSJ7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSINCi0JUm9vdE5hbWVzcGFjZT0ic3FsaXRlMyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5cZGVidWcudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90Oy4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTNleHQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMgYi9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDAzMjguLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNxbGl0ZTMiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSINCi0JCVdhcm5pbmdMZXZlbD0iMSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvc3NsLnZjcHJvaiBiL1BDL1ZTOC4wL3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZDYzNWUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3NsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ic3NsIg0KLQlQcm9qZWN0R1VJRD0ie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQotCVJvb3ROYW1lc3BhY2U9InNzbCINCi0JS2V5d29yZD0iTWFrZUZpbGVQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC91bmljb2RlZGF0YS52Y3Byb2ogYi9QQy9WUzguMC91bmljb2RlZGF0YS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjdkMjMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvdW5pY29kZWRhdGEudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJ1bmljb2RlZGF0YSINCi0JUHJvamVjdEdVSUQ9IntFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9Ig0KLQlSb290TmFtZXNwYWNlPSJ1bmljb2RlZGF0YSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGFfZGIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZW5hbWVfZGIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM4LjAvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTRkMjA2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVByb2plY3RHVUlEPSJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUm9vdE5hbWVzcGFjZT0idzl4cG9wZW4iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+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+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3dpbnNvdW5kLnZjcHJvaiBiL1BDL1ZTOC4wL3dpbnNvdW5kLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3OTM1Ny4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC93aW5zb3VuZC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9IndpbnNvdW5kIg0KLQlQcm9qZWN0R1VJRD0iezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQotCVJvb3ROYW1lc3BhY2U9IndpbnNvdW5kIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHdpbnNvdW5kLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAveDY0LnZzcHJvcHMgYi9QQy9WUzguMC94NjQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY4OGQ0NC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC94NjQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJhbWQ2NCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKVxhbWQ2NFwiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lONjQ7X01fWDY0Ig0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKEhPU1RfUFlUSE9OKSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2N0eXBlc190ZXN0LnZjcHJvaiBiL1BDL1ZTOS4wL19zaGEzLnZjcHJvagpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBQQy9WUzguMC9fY3R5cGVzX3Rlc3QudmNwcm9qCnJlbmFtZSB0byBQQy9WUzkuMC9fc2hhMy52Y3Byb2oKaW5kZXggMDk3MjQxZS4uNWZlMThkNSAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvX2N0eXBlc190ZXN0LnZjcHJvagorKysgYi9QQy9WUzkuMC9fc2hhMy52Y3Byb2oKQEAgLTEsMTAgKzEsMTAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KIDxWaXN1YWxTdHVkaW9Qcm9qZWN0DQogCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfY3R5cGVzX3Rlc3QiDQotCVByb2plY3RHVUlEPSJ7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfSINCi0JUm9vdE5hbWVzcGFjZT0iX2N0eXBlc190ZXN0Ig0KKwlWZXJzaW9uPSI5LDAwIg0KKwlOYW1lPSJfc2hhMyINCisJUHJvamVjdEdVSUQ9InswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9Ig0KKwlSb290TmFtZXNwYWNlPSJfc2hhMyINCiAJS2V5d29yZD0iV2luMzJQcm9qIg0KIAlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQogCT4NCkBAIC01MDAsMTggKzUwMCwxMCBAQAogCTwvUmVmZXJlbmNlcz4NCiAJPEZpbGVzPg0KIAkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCiAJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQogCQkJPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NoYTNcc2hhM21vZHVsZS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJPC9GaWx0ZXI+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qCmluZGV4IGY3MTAwZjEuLjgyYzU3YWUgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvagorKysgYi9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2oKQEAgLTU1NSwxMCArNTU1LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL19zc2wudmNwcm9qIGIvUEMvVlM5LjAvX3NzbC52Y3Byb2oKaW5kZXggOTdhYTI5NC4uYjQ3ZGMyNyAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvX3NzbC52Y3Byb2oKKysrIGIvUEMvVlM5LjAvX3NzbC52Y3Byb2oKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCisJVmVyc2lvbj0iOSwwMCINCiAJTmFtZT0iX3NzbCINCiAJUHJvamVjdEdVSUQ9IntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KIAlSb290TmFtZXNwYWNlPSJfc3NsIg0KQEAgLTU2LDcgKzU2LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTE4LDcgKzExOCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE4MCw3ICsxODAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTM2OCw3ICszNjgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC00MzEsNyArNDMxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQogCQkJLz4NCiAJCQk8VG9vbA0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL190ZXN0Y2FwaS52Y3Byb2ogYi9QQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBQQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qCnJlbmFtZSB0byBQQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagppbmRleCA3NmFkMmQ4Li4xNGQ5MTBkIDEwMDY0NAotLS0gYS9QQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qCisrKyBiL1BDL1ZTOS4wL190ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qCkBAIC0xLDEwICsxLDEwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3Rlc3RjYXBpIg0KLQlQcm9qZWN0R1VJRD0iezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQotCVJvb3ROYW1lc3BhY2U9Il90ZXN0Y2FwaSINCisJVmVyc2lvbj0iOS4wMCINCisJTmFtZT0iX3Rlc3RpbXBvcnRtdWx0aXBsZSINCisJUHJvamVjdEdVSUQ9InszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KKwlSb290TmFtZXNwYWNlPSJfdGVzdGltcG9ydG11bHRpcGxlIg0KIAlLZXl3b3JkPSJXaW4zMlByb2oiDQogCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCiAJPg0KQEAgLTUxMSw3ICs1MTEsNyBAQAogCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KIAkJCT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jIGIvUEMvVlM5LjAva2lsbF9weXRob24uYwppbmRleCBiYjMyM2QzLi42MDQ3MzFmIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jCisrKyBiL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBYWFggVE9ETzogaWYgd2UgcmVhbGx5IHdhbnRlZCB0byBiZSBmYW5jeSwgd2UgY291bGQgY2hlY2sgdGhlIAogICAgICAgICAgKiBtb2R1bGVzIGZvciBhbGwgcHJvY2Vzc2VzIChub3QganVzdCB0aGUgcHl0aG9uW19kXS5leGUgb25lcykKLSAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zM1tfZF0uZGxsKSwKKyAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zNFtfZF0uZGxsKSwKICAgICAgICAgICogYXMgdGhhdCB3b3VsZCBhbHNvIGluaGliaXQgb3VyIGFiaWxpdHkgdG8gcmVidWlsZCB0aGUgc29sdXRpb24uCiAgICAgICAgICAqIE5vdCB3b3J0aCBsb29zaW5nIHNsZWVwIG92ZXIgdGhvdWdoOyBmb3Igbm93LCBhIHNpbXBsZSBjaGVjayAKICAgICAgICAgICogZm9yIGp1c3QgdGhlIHB5dGhvbiBleGVjdXRhYmxlIHNob3VsZCBiZSBzdWZmaWNpZW50LgpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcGNidWlsZC5zbG4gYi9QQy9WUzkuMC9wY2J1aWxkLnNsbgppbmRleCA4ZjhjYmI2Li4zYjczZmNlIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9wY2J1aWxkLnNsbgorKysgYi9QQy9WUzkuMC9wY2J1aWxkLnNsbgpAQCAtMjAsMTEgKzIwLDYgQEAKIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KIAlFbmRQcm9qZWN0U2VjdGlvbg0KIEVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjcHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjcHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJTb2x1dGlvbiBJdGVtcyIsICJTb2x1dGlvbiBJdGVtcyIsICJ7NTUzRUMzM0UtOTgxNi00OTk2LUE2NjAtNUQ2MTg2QTBCMEIzfSINCkBAIC04Nyw2ICs4MiwxMSBAQAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RpbXBvcnRtdWx0aXBsZSIsICJfdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvaiIsICJ7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfSINCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KKwkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KKwlFbmRQcm9qZWN0U2VjdGlvbg0KK0VuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjcHJvaiIsICJ7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfSINCiAJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KQEAgLTE1Miw2ICsxNTIsOCBAQAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NoYTMiLCAiX3NoYTMudmNwcm9qIiwgInswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9Ig0KK0VuZFByb2plY3QNCiBHbG9iYWwNCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24NCiAJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzINCkBAIC00MjAsNiArNDIyLDIyIEBACiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQpAQCAtNjUxLDYgKzY2OSwyMiBAQAogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAlFbmRHbG9iYWxTZWN0aW9uDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQogCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UNCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcyBiL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzCmluZGV4IGZmMzc1OWUuLmM1NzkzZWQgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzCisrKyBiL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzCkBAIC0zOCw3ICszOCw3IEBACiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0iUHlEbGxOYW1lIg0KLQkJVmFsdWU9InB5dGhvbjMzIg0KKwkJVmFsdWU9InB5dGhvbjM0Ig0KIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJQeXRob25FeGUiDQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagppbmRleCA5ZmI2M2ZmLi5jZjYwNDcwIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagorKysgYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagpAQCAtMTExOSw3ICsxMTE5LDcgQEAKIAkJCQk+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+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL19tc2kuYyBiL1BDL19tc2kuYwppbmRleCAwYjViOTRlLi5lYjY5MDE0IDEwMDY0NAotLS0gYS9QQy9fbXNpLmMKKysrIGIvUEMvX21zaS5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyBGTkZDSU9QRU4oY2Jfb3BlbikKIHsKLSAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcsIHBtb2RlKTsKKyAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcgfCBPX05PSU5IRVJJVCwgcG1vZGUpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTc5LDcgKzE3OSw3IEBACiAKICAgICBDbG9zZUhhbmRsZShoYW5kbGUpOwogCi0gICAgcmV0dXJuIF9vcGVuKHBzek5hbWUsIF9PX1JET05MWSB8IF9PX0JJTkFSWSk7CisgICAgcmV0dXJuIF9vcGVuKHBzek5hbWUsIF9PX1JET05MWSB8IF9PX0JJTkFSWSB8IE9fTk9JTkhFUklUKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0KiBmY2ljcmVhdGUoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGFyZ3MpCkBAIC0xMDMwLDQwICsxMDMwLDQwIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSURCT1BFTl9UUkFOU0FDVCIsIChpbnQpTVNJREJPUEVOX1RSQU5TQUNUKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJREJPUEVOX1BBVENIRklMRSIsIChpbnQpTVNJREJPUEVOX1BBVENIRklMRSk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJQ09MSU5GT19OQU1FUyIsIE1TSUNPTElORk9fTkFNRVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lDT0xJTkZPX1RZUEVTIiwgTVNJQ09MSU5GT19UWVBFUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJQ09MSU5GT19OQU1FUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJQ09MSU5GT19UWVBFUyk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1NFRUsiLCBNU0lNT0RJRllfU0VFSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9SRUZSRVNIIiwgTVNJTU9ESUZZX1JFRlJFU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfSU5TRVJUIiwgTVNJTU9ESUZZX0lOU0VSVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9VUERBVEUiLCBNU0lNT0RJRllfVVBEQVRFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0FTU0lHTiIsIE1TSU1PRElGWV9BU1NJR04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfUkVQTEFDRSIsIE1TSU1PRElGWV9SRVBMQUNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX01FUkdFIiwgTVNJTU9ESUZZX01FUkdFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0RFTEVURSIsIE1TSU1PRElGWV9ERUxFVEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfSU5TRVJUX1RFTVBPUkFSWSIsIE1TSU1PRElGWV9JTlNFUlRfVEVNUE9SQVJZKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFIiwgTVNJTU9ESUZZX1ZBTElEQVRFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX05FVyIsIE1TSU1PRElGWV9WQUxJREFURV9ORVcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVkFMSURBVEVfRklFTEQiLCBNU0lNT0RJRllfVkFMSURBVEVfRklFTEQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVkFMSURBVEVfREVMRVRFIiwgTVNJTU9ESUZZX1ZBTElEQVRFX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1NFRUspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9SRUZSRVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfSU5TRVJUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVVBEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfQVNTSUdOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfUkVQTEFDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX01FUkdFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfREVMRVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfSU5TRVJUX1RFTVBPUkFSWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVkFMSURBVEVfTkVXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVkFMSURBVEVfRklFTEQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9WQUxJREFURV9ERUxFVEUpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9DT0RFUEFHRSIsIFBJRF9DT0RFUEFHRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9USVRMRSIsIFBJRF9USVRMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9TVUJKRUNUIiwgUElEX1NVQkpFQ1QpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQVVUSE9SIiwgUElEX0FVVEhPUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9LRVlXT1JEUyIsIFBJRF9LRVlXT1JEUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9DT01NRU5UUyIsIFBJRF9DT01NRU5UUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9URU1QTEFURSIsIFBJRF9URU1QTEFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9MQVNUQVVUSE9SIiwgUElEX0xBU1RBVVRIT1IpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfUkVWTlVNQkVSIiwgUElEX1JFVk5VTUJFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9MQVNUUFJJTlRFRCIsIFBJRF9MQVNUUFJJTlRFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9DUkVBVEVfRFRNIiwgUElEX0NSRUFURV9EVE0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVFNBVkVfRFRNIiwgUElEX0xBU1RTQVZFX0RUTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9QQUdFQ09VTlQiLCBQSURfUEFHRUNPVU5UKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1dPUkRDT1VOVCIsIFBJRF9XT1JEQ09VTlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ0hBUkNPVU5UIiwgUElEX0NIQVJDT1VOVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9BUFBOQU1FIiwgUElEX0FQUE5BTUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfU0VDVVJJVFkiLCBQSURfU0VDVVJJVFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9DT0RFUEFHRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1RJVExFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfU1VCSkVDVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0FVVEhPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0tFWVdPUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ09NTUVOVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9URU1QTEFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0xBU1RBVVRIT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9SRVZOVU1CRVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9MQVNUUFJJTlRFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0NSRUFURV9EVE0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9MQVNUU0FWRV9EVE0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9QQUdFQ09VTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9XT1JEQ09VTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9DSEFSQ09VTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9BUFBOQU1FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfU0VDVVJJVFkpOwogCiAgICAgTVNJRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24gKCJfbXNpLk1TSUVycm9yIiwgTlVMTCwgTlVMTCk7CiAgICAgaWYgKCFNU0lFcnJvcikKZGlmZiAtLWdpdCBhL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jIGIvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLmMKaW5kZXggYzExZDQ1ZC4uZTk0MDFkOSAxMDA2NDQKLS0tIGEvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLmMKKysrIGIvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLmMKQEAgLTc0Myw3ICs3NDMsNyBAQAogICAgIGlmIChwYXRobmFtZSA9PSBOVUxMIHx8IHBhdGhuYW1lWzBdID09ICdcMCcpCiAgICAgICAgIHJldHVybiAyOwogCi0gICAgZmggPSBvcGVuKHBhdGhuYW1lLCBfT19SRE9OTFkpOworICAgIGZoID0gb3BlbihwYXRobmFtZSwgX09fUkRPTkxZIHwgT19OT0lOSEVSSVQpOwogICAgIGlmICgtMSA9PSBmaCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIHBvc3RpbnN0YWxsLXNjcmlwdCAlc1xuIiwKICAgICAgICAgICAgIHBhdGhuYW1lKTsKZGlmZiAtLWdpdCBhL1BDL2NvbmZpZy5jIGIvUEMvY29uZmlnLmMKaW5kZXggNTdiNTA3My4uNDJhMDdjOSAxMDA2NDQKLS0tIGEvUEMvY29uZmlnLmMKKysrIGIvUEMvY29uZmlnLmMKQEAgLTE3LDcgKzE3LDcgQEAKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X21hdGgodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fbWQ1KHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfbnQodm9pZCk7Ci1leHRlcm4gUHlPYmplY3QqIFB5SW5pdF9vcGVyYXRvcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19vcGVyYXRvcih2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X3NpZ25hbCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19zaGExKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3NoYTI1Nih2b2lkKTsKQEAgLTY0LDYgKzY0LDcgQEAKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2F0ZXhpdCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogX1B5V2FybmluZ3NfSW5pdCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19zdHJpbmcodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RhdCh2b2lkKTsKIAogLyogdG9vbHMvZnJlZXplL21ha2Vjb25maWcucHkgbWFya2VyIGZvciBhZGRpdGlvbmFsICJleHRlcm4iICovCiAvKiAtLSBBRERNT0RVTEUgTUFSS0VSIDEgLS0gKi8KQEAgLTg3LDcgKzg4LDcgQEAKICAgICB7ImdjIiwgUHlJbml0X2djfSwKICAgICB7Im1hdGgiLCBQeUluaXRfbWF0aH0sCiAgICAgeyJudCIsIFB5SW5pdF9udH0sIC8qIFVzZSB0aGUgTlQgb3MgZnVuY3Rpb25zLCBub3QgcG9zaXggKi8KLSAgICB7Im9wZXJhdG9yIiwgUHlJbml0X29wZXJhdG9yfSwKKyAgICB7Il9vcGVyYXRvciIsIFB5SW5pdF9fb3BlcmF0b3J9LAogICAgIHsic2lnbmFsIiwgUHlJbml0X3NpZ25hbH0sCiAgICAgeyJfbWQ1IiwgUHlJbml0X19tZDV9LAogICAgIHsiX3NoYTEiLCBQeUluaXRfX3NoYTF9LApAQCAtMTU0LDYgKzE1NSw3IEBACiAgICAgeyJfaW8iLCBQeUluaXRfX2lvfSwKICAgICB7Il9waWNrbGUiLCBQeUluaXRfX3BpY2tsZX0sCiAgICAgeyJhdGV4aXQiLCBQeUluaXRfYXRleGl0fSwKKyAgICB7Il9zdGF0IiwgUHlJbml0X19zdGF0fSwKIAogICAgIC8qIFNlbnRpbmVsICovCiAgICAgezAsIDB9CmRpZmYgLS1naXQgYS9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qIGIvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagppbmRleCBmYmEwMGI2Li5kZjM2MzQxIDEwMDY0NAotLS0gYS9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qCisrKyBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKQEAgLTM5LDcgKzM5LDcgQEAKIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCiAJCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9leHBvcnQ6aW5pdGV4YW1wbGUiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHB5dGhvbjMzLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzQubGliIg0KIAkJCQlPdXRwdXRGaWxlPSIuXFJlbGVhc2UvZXhhbXBsZS5weWQiDQogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KQEAgLTEwNSw3ICsxMDUsNyBAQAogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzNfZC5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHB5dGhvbjM0X2QubGliIg0KIAkJCQlPdXRwdXRGaWxlPSIuXERlYnVnL2V4YW1wbGVfZC5weWQiDQogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KZGlmZiAtLWdpdCBhL1BDL2dldHBhdGhwLmMgYi9QQy9nZXRwYXRocC5jCmluZGV4IGI1YmYzMjUuLmRlYjQwZTcgMTAwNjQ0Ci0tLSBhL1BDL2dldHBhdGhwLmMKKysrIGIvUEMvZ2V0cGF0aHAuYwpAQCAtMSw2ICsxLDYgQEAKIAogLyogUmV0dXJuIHRoZSBpbml0aWFsIG1vZHVsZSBzZWFyY2ggcGF0aC4gKi8KLS8qIFVzZWQgYnkgRE9TLCBPUy8yLCBXaW5kb3dzIDMuMSwgV2luZG93cyA5NS85OCwgV2luZG93cyBOVC4gKi8KKy8qIFVzZWQgYnkgRE9TLCBXaW5kb3dzIDMuMSwgV2luZG93cyA5NS85OCwgV2luZG93cyBOVC4gKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgUEFUSCBSVUxFUyBGT1IgV0lORE9XUzoKQEAgLTI0NSw5ICsyNDUsOSBAQAogICAgIC8qIFRyaWVkIHRvIHVzZSBzeXNnZXQoIndpbnZlciIpIGJ1dCBoZXJlIGlzIHRvbyBlYXJseSA6LSggKi8KICAgICB2ZXJzaW9uTGVuID0gc3RybGVuKFB5V2luX0RMTFZlcnNpb25TdHJpbmcpOwogICAgIC8qIFNwYWNlIGZvciBhbGwgdGhlIGNoYXJzLCBwbHVzIG9uZSBcMCAqLwotICAgIGtleUJ1ZiA9IGtleUJ1ZlB0ciA9IG1hbGxvYyhzaXplb2Yoa2V5UHJlZml4KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXQ0hBUikqKHZlcnNpb25MZW4tMSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2V5U3VmZml4KSk7CisgICAga2V5QnVmID0ga2V5QnVmUHRyID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZihrZXlQcmVmaXgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdDSEFSKSoodmVyc2lvbkxlbi0xKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrZXlTdWZmaXgpKTsKICAgICBpZiAoa2V5QnVmPT1OVUxMKSBnb3RvIGRvbmU7CiAKICAgICBtZW1jcHkoa2V5QnVmUHRyLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLXNpemVvZihXQ0hBUikpOwpAQCAtMjcxLDcgKzI3MSw3IEBACiAgICAgLyogQWxsb2NhdGUgYSB0ZW1wIGFycmF5IG9mIGNoYXIgYnVmZmVycywgc28gd2Ugb25seSBuZWVkIHRvIGxvb3AKICAgICAgICByZWFkaW5nIHRoZSByZWdpc3RyeSBvbmNlCiAgICAgKi8KLSAgICBwcFBhdGhzID0gbWFsbG9jKCBzaXplb2YoV0NIQVIgKikgKiBudW1LZXlzICk7CisgICAgcHBQYXRocyA9IFB5TWVtX1Jhd01hbGxvYyggc2l6ZW9mKFdDSEFSICopICogbnVtS2V5cyApOwogICAgIGlmIChwcFBhdGhzPT1OVUxMKSBnb3RvIGRvbmU7CiAgICAgbWVtc2V0KHBwUGF0aHMsIDAsIHNpemVvZihXQ0hBUiAqKSAqIG51bUtleXMpOwogICAgIC8qIExvb3Agb3ZlciBhbGwgc3Via2V5cywgYWxsb2NhdGluZyBhIHRlbXAgc3ViLWJ1ZmZlci4gKi8KQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgICAgICAvKiBGaW5kIHRoZSB2YWx1ZSBvZiB0aGUgYnVmZmVyIHNpemUsIG1hbGxvYywgdGhlbiByZWFkIGl0ICovCiAgICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeFcoc3ViS2V5LCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAmcmVxZFNpemUpOwogICAgICAgICBpZiAocmVxZFNpemUpIHsKLSAgICAgICAgICAgIHBwUGF0aHNbaW5kZXhdID0gbWFsbG9jKHJlcWRTaXplKTsKKyAgICAgICAgICAgIHBwUGF0aHNbaW5kZXhdID0gUHlNZW1fUmF3TWFsbG9jKHJlcWRTaXplKTsKICAgICAgICAgICAgIGlmIChwcFBhdGhzW2luZGV4XSkgewogICAgICAgICAgICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeFcoc3ViS2V5LCBOVUxMLCAwLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBCWVRFKXBwUGF0aHNbaW5kZXhdLApAQCAtMzA4LDcgKzMwOCw3IEBACiAgICAgaWYgKGRhdGFTaXplID09IDApIGdvdG8gZG9uZTsKIAogICAgIC8qIG9yaWdpbmFsIGRhdGFzaXplIGZyb20gUmVnUXVlcnlJbmZvIGRvZXNuJ3QgaW5jbHVkZSB0aGUgXDAgKi8KLSAgICBkYXRhQnVmID0gbWFsbG9jKChkYXRhU2l6ZSsxKSAqIHNpemVvZihXQ0hBUikpOworICAgIGRhdGFCdWYgPSBQeU1lbV9SYXdNYWxsb2MoKGRhdGFTaXplKzEpICogc2l6ZW9mKFdDSEFSKSk7CiAgICAgaWYgKGRhdGFCdWYpIHsKICAgICAgICAgV0NIQVIgKnN6Q3VyID0gZGF0YUJ1ZjsKICAgICAgICAgRFdPUkQgcmVxZFNpemUgPSBkYXRhU2l6ZTsKQEAgLTM0NiwxNCArMzQ2LDEzIEBACiBkb25lOgogICAgIC8qIExvb3AgZnJlZWluZyBteSB0ZW1wIGJ1ZmZlcnMgKi8KICAgICBpZiAocHBQYXRocykgewotICAgICAgICBmb3IoaW5kZXg9MDtpbmRleDxudW1LZXlzO2luZGV4KyspCi0gICAgICAgICAgICBpZiAocHBQYXRoc1tpbmRleF0pIGZyZWUocHBQYXRoc1tpbmRleF0pOwotICAgICAgICBmcmVlKHBwUGF0aHMpOworICAgICAgICBmb3IoaW5kZXg9MDsgaW5kZXg8bnVtS2V5czsgaW5kZXgrKykKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocHBQYXRoc1tpbmRleF0pOworICAgICAgICBQeU1lbV9SYXdGcmVlKHBwUGF0aHMpOwogICAgIH0KICAgICBpZiAobmV3S2V5KQogICAgICAgICBSZWdDbG9zZUtleShuZXdLZXkpOwotICAgIGlmIChrZXlCdWYpCi0gICAgICAgIGZyZWUoa2V5QnVmKTsKKyAgICBQeU1lbV9SYXdGcmVlKGtleUJ1Zik7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KICNlbmRpZiAvKiBQeV9FTkFCTEVfU0hBUkVEICovCkBAIC00MzQsNyArNDMzLDcgQEAKICAgICAgICAgY2hhciAqIHAgPSBmZ2V0cyhidWZmZXIsIE1BWFBBVEhMRU4qMiwgZW52X2ZpbGUpOwogICAgICAgICB3Y2hhcl90IHRtcGJ1ZmZlcltNQVhQQVRITEVOKjIrMV07CiAgICAgICAgIFB5T2JqZWN0ICogZGVjb2RlZDsKLSAgICAgICAgaW50IG47CisgICAgICAgIHNpemVfdCBuOwogCiAgICAgICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKQEAgLTYxNiw3ICs2MTUsNyBAQAogICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCiAgICAgICAgIGJ1ZnN6ICs9IHdjc2xlbihlbnZwYXRoKSArIDE7CiAKLSAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBtYWxsb2MoYnVmc3oqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBQeU1lbV9SYXdNYWxsb2MoYnVmc3oqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoYnVmID09IE5VTEwpIHsKICAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwpAQCAtNjI5LDEwICs2MjgsOCBAQAogICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUFlUSE9OUEFUSDsKICAgICAgICAgfQogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgaWYgKG1hY2hpbmVwYXRoKQotICAgICAgICAgICAgZnJlZShtYWNoaW5lcGF0aCk7Ci0gICAgICAgIGlmICh1c2VycGF0aCkKLSAgICAgICAgICAgIGZyZWUodXNlcnBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1hY2hpbmVwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh1c2VycGF0aCk7CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjUyLDEzICs2NDksMTMgQEAKICAgICAgICAgd2NzY3B5KGJ1ZiwgdXNlcnBhdGgpOwogICAgICAgICBidWYgPSB3Y3NjaHIoYnVmLCBMJ1wwJyk7CiAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICBmcmVlKHVzZXJwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh1c2VycGF0aCk7CiAgICAgfQogICAgIGlmIChtYWNoaW5lcGF0aCkgewogICAgICAgICB3Y3NjcHkoYnVmLCBtYWNoaW5lcGF0aCk7CiAgICAgICAgIGJ1ZiA9IHdjc2NocihidWYsIEwnXDAnKTsKICAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIGZyZWUobWFjaGluZXBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1hY2hpbmVwYXRoKTsKICAgICB9CiAgICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewogICAgICAgICBpZiAoIXNraXBkZWZhdWx0KSB7CkBAIC03NDUsNyArNzQyLDcgQEAKIFB5X1NldFBhdGgoY29uc3Qgd2NoYXJfdCAqcGF0aCkKIHsKICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CiAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7CiAgICAgfQogICAgIGlmIChwYXRoICE9IE5VTEwpIHsKQEAgLTc1MywxMCArNzUwLDEwIEBACiAgICAgICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgICAgICB3Y3NuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKICAgICAgICAgcHJlZml4WzBdID0gTCdcMCc7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IG1hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbihwYXRoKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKQogICAgICAgICAgICAgd2NzY3B5KG1vZHVsZV9zZWFyY2hfcGF0aCwgcGF0aCk7Ci0JfQorICAgIH0KIH0KIAogd2NoYXJfdCAqCmRpZmYgLS1naXQgYS9QQy9sYXVuY2hlci5jIGIvUEMvbGF1bmNoZXIuYwppbmRleCA0NDVlOTZlLi5jOGFmMTk3IDEwMDY0NAotLS0gYS9QQy9sYXVuY2hlci5jCisrKyBiL1BDL2xhdW5jaGVyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgVmluYXkgU2FqaXAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBWaW5heSBTYWppcC4KICAqIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KICAqCiAgKiBCYXNlZCBvbiB0aGUgd29yayBvZjoKQEAgLTE4LDcgKzE4LDI4IEBACiAKIC8qIEJ1aWxkIG9wdGlvbnMuICovCiAjZGVmaW5lIFNLSVBfUFJFRklYCi0vKiAjZGVmaW5lIFNFQVJDSF9QQVRIICovCisjZGVmaW5lIFNFQVJDSF9QQVRICisKKy8qIEVycm9yIGNvZGVzICovCisKKyNkZWZpbmUgUkNfTk9fU1REX0hBTkRMRVMgICAxMDAKKyNkZWZpbmUgUkNfQ1JFQVRFX1BST0NFU1MgICAxMDEKKyNkZWZpbmUgUkNfQkFEX1ZJUlRVQUxfUEFUSCAxMDIKKyNkZWZpbmUgUkNfTk9fUFlUSE9OICAgICAgICAxMDMKKyNkZWZpbmUgUkNfTk9fTUVNT1JZICAgICAgICAxMDQKKy8qCisgKiBTQ1JJUFRfV1JBUFBFUiBpcyB1c2VkIHRvIGNob29zZSBiZXR3ZWVuIHR3byB2YXJpYW50cyBvZiBhbiBleGVjdXRhYmxlIGJ1aWx0CisgKiBmcm9tIHRoaXMgc291cmNlIGZpbGUuIElmIG5vdCBkZWZpbmVkLCB0aGUgUEVQIDM5NyBQeXRob24gbGF1bmNoZXIgaXMgYnVpbHQ7CisgKiBpZiBkZWZpbmVkLCBhIHNjcmlwdCBsYXVuY2hlciBvZiB0aGUgdHlwZSB1c2VkIGJ5IHNldHVwdG9vbHMgaXMgYnVpbHQsIHdoaWNoCisgKiBsb29rcyBmb3IgYSBzY3JpcHQgbmFtZSByZWxhdGVkIHRvIHRoZSBleGVjdXRhYmxlIG5hbWUgYW5kIHJ1bnMgdGhhdCBzY3JpcHQKKyAqIHdpdGggdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiBpbnRlcnByZXRlci4KKyAqCisgKiBTQ1JJUFRfV1JBUFBFUiBzaG91bGQgYmUgdW5kZWZpbmVkIGluIHRoZSBzb3VyY2UsIGFuZCBkZWZpbmVkIGluIGEgVlMgcHJvamVjdAorICogd2hpY2ggYnVpbGRzIHRoZSBzZXR1cHRvb2xzLXN0eWxlIGxhdW5jaGVyLgorICovCisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKyNkZWZpbmUgUkNfTk9fU0NSSVBUICAgICAgICAxMDUKKyNlbmRpZgogCiAvKiBKdXN0IGZvciBub3cgLSBzdGF0aWMgZGVmaW5pdGlvbiAqLwogCkBAIC0zMiwzMiArNTMsNiBAQAogICAgIHJldHVybiBwOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIHNpbXBsaWZ5IG1lbW9yeSBtYW5hZ2VtZW50Ci0gKiBhbmQgdG8gdHJlYXQgYmxhbmsgdmFsdWVzIGFzIGlmIHRoZXkgYXJlIGFic2VudC4KLSAqLwotc3RhdGljIHdjaGFyX3QgKiBnZXRfZW52KHdjaGFyX3QgKiBrZXkpCi17Ci0gICAgLyogVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUsIGp1c3QgbGlrZSBnZXRlbnYgKi8KLSAgICBzdGF0aWMgd2NoYXJfdCBidWZbMjU2XTsKLSAgICBEV09SRCByZXN1bHQgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZiwgMjU2KTsKLQotICAgIGlmIChyZXN1bHQgPiAyNTUpIHsKLSAgICAgICAgLyogTGFyZ2UgZW52aXJvbm1lbnQgdmFyaWFibGUuIEFjY2VwdCBzb21lIGxlYWthZ2UgKi8KLSAgICAgICAgd2NoYXJfdCAqYnVmMiA9ICh3Y2hhcl90KiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogKHJlc3VsdCsxKSk7Ci0gICAgICAgIEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmMiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGJ1ZjI7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSAwKQotICAgICAgICAvKiBFaXRoZXIgc29tZSBlcnJvciwgZS5nLiBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5ELAotICAgICAgICAgICBvciBhbiBlbXB0eSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gYnVmOwotfQotCi0KIHN0YXRpYyB2b2lkCiBkZWJ1Zyh3Y2hhcl90ICogZm9ybWF0LCAuLi4pCiB7CkBAIC0xMDAsMTEgKzk1LDQwIEBACiAjaWYgIWRlZmluZWQoX1dJTkRPV1MpCiAgICAgZndwcmludGYoc3RkZXJyLCBMIiVzXG4iLCBtZXNzYWdlKTsKICNlbHNlCi0gICAgTWVzc2FnZUJveChOVUxMLCBtZXNzYWdlLCBURVhUKCJQeXRob24gTGF1bmNoZXIgaXMgc29ycnkgdG8gc2F5IC4uLiIpLCBNQl9PSyk7IAorICAgIE1lc3NhZ2VCb3goTlVMTCwgbWVzc2FnZSwgVEVYVCgiUHl0aG9uIExhdW5jaGVyIGlzIHNvcnJ5IHRvIHNheSAuLi4iKSwKKyAgICAgICAgICAgICAgIE1CX09LKTsgCiAjZW5kaWYKICAgICBFeGl0UHJvY2VzcyhyYyk7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgdG8gc2ltcGxpZnkgbWVtb3J5IG1hbmFnZW1lbnQKKyAqIGFuZCB0byB0cmVhdCBibGFuayB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgYWJzZW50LgorICovCitzdGF0aWMgd2NoYXJfdCAqIGdldF9lbnYod2NoYXJfdCAqIGtleSkKK3sKKyAgICAvKiBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwganVzdCBsaWtlIGdldGVudiAqLworICAgIHN0YXRpYyB3Y2hhcl90IGJ1ZltCVUZTSVpFXTsKKyAgICBEV09SRCByZXN1bHQgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZiwgQlVGU0laRSk7CisKKyAgICBpZiAocmVzdWx0ID49IEJVRlNJWkUpIHsKKyAgICAgICAgLyogTGFyZ2UgZW52aXJvbm1lbnQgdmFyaWFibGUuIEFjY2VwdCBzb21lIGxlYWthZ2UgKi8KKyAgICAgICAgd2NoYXJfdCAqYnVmMiA9ICh3Y2hhcl90KiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogKHJlc3VsdCsxKSk7CisgICAgICAgIGlmIChidWYyID0gTlVMTCkgeworICAgICAgICAgICAgZXJyb3IoUkNfTk9fTUVNT1JZLCBMIkNvdWxkIG5vdCBhbGxvY2F0ZSBlbnZpcm9ubWVudCBidWZmZXIiKTsKKyAgICAgICAgfQorICAgICAgICBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZjIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBidWYyOworICAgIH0KKworICAgIGlmIChyZXN1bHQgPT0gMCkKKyAgICAgICAgLyogRWl0aGVyIHNvbWUgZXJyb3IsIGUuZy4gRVJST1JfRU5WVkFSX05PVF9GT1VORCwKKyAgICAgICAgICAgb3IgYW4gZW1wdHkgZW52aXJvbm1lbnQgdmFyaWFibGUuICovCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKwogI2lmIGRlZmluZWQoX1dJTkRPV1MpCiAKICNkZWZpbmUgUFlUSE9OX0VYRUNVVEFCTEUgTCJweXRob253LmV4ZSIKQEAgLTExNSwxMSArMTM5LDYgQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgUkNfTk9fU1REX0hBTkRMRVMgICAxMDAKLSNkZWZpbmUgUkNfQ1JFQVRFX1BST0NFU1MgICAxMDEKLSNkZWZpbmUgUkNfQkFEX1ZJUlRVQUxfUEFUSCAxMDIKLSNkZWZpbmUgUkNfTk9fUFlUSE9OICAgICAgICAxMDMKLQogI2RlZmluZSBNQVhfVkVSU0lPTl9TSVpFICAgIDQKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNDU3LDYgKzQ3Niw1MSBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKyNpZiBkZWZpbmVkKFNDUklQVF9XUkFQUEVSKQorLyoKKyAqIENoZWNrIGZvciBhIHNjcmlwdCBsb2NhdGVkIGFsb25nc2lkZSB0aGUgZXhlY3V0YWJsZQorICovCisKKyNpZiBkZWZpbmVkKF9XSU5ET1dTKQorI2RlZmluZSBTQ1JJUFRfU1VGRklYIEwiLXNjcmlwdC5weXciCisjZWxzZQorI2RlZmluZSBTQ1JJUFRfU1VGRklYIEwiLXNjcmlwdC5weSIKKyNlbmRpZgorCitzdGF0aWMgd2NoYXJfdCB3cmFwcGVkX3NjcmlwdF9wYXRoW01BWF9QQVRIXTsKKworLyogTG9jYXRlIHRoZSBzY3JpcHQgYmVpbmcgd3JhcHBlZC4KKyAqCisgKiBUaGlzIGNvZGUgc2hvdWxkIHN0b3JlIHRoZSBuYW1lIG9mIHRoZSB3cmFwcGVkIHNjcmlwdCBpbgorICogd3JhcHBlZF9zY3JpcHRfcGF0aCwgb3IgdGVybWluYXRlIHRoZSBwcm9ncmFtIHdpdGggYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8KKyAqIHZhbGlkIHdyYXBwZWQgc2NyaXB0IGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkCitsb2NhdGVfd3JhcHBlZF9zY3JpcHQoKQoreworICAgIHdjaGFyX3QgKiBwOworICAgIHNpemVfdCBwbGVuOworICAgIERXT1JEIGF0dHJzOworCisgICAgcGxlbiA9IEdldE1vZHVsZUZpbGVOYW1lVyhOVUxMLCB3cmFwcGVkX3NjcmlwdF9wYXRoLCBNQVhfUEFUSCk7CisgICAgcCA9IHdjc3JjaHIod3JhcHBlZF9zY3JpcHRfcGF0aCwgTCcuJyk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICBkZWJ1ZyhMIkdldE1vZHVsZUZpbGVOYW1lVyByZXR1cm5lZCB2YWx1ZSBoYXMgbm8gZXh0ZW5zaW9uOiAlc1xuIiwKKyAgICAgICAgICAgICAgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIGVycm9yKFJDX05PX1NDUklQVCwgTCJXcmFwcGVyIG5hbWUgJyVzJyBpcyBub3QgdmFsaWQuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgfQorCisgICAgd2NzbmNweV9zKHAsIE1BWF9QQVRIIC0gKHAgLSB3cmFwcGVkX3NjcmlwdF9wYXRoKSArIDEsIFNDUklQVF9TVUZGSVgsIF9UUlVOQ0FURSk7CisgICAgYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cod3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgaWYgKGF0dHJzID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisgICAgICAgIGRlYnVnKEwiRmlsZSAnJXMnIG5vbi1leGlzdGVudFxuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIGVycm9yKFJDX05PX1NDUklQVCwgTCJTY3JpcHQgZmlsZSAnJXMnIGlzIG5vdCBwcmVzZW50LiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgIH0KKworICAgIGRlYnVnKEwiVXNpbmcgd3JhcHBlZCBzY3JpcHQgZmlsZSAnJXMnXG4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKK30KKyNlbmRpZgorCiAvKgogICogUHJvY2VzcyBjcmVhdGlvbiBjb2RlCiAgKi8KQEAgLTU1MCw3ICs2MTQsNyBAQAogICAgICAgICBlcnJvcihSQ19DUkVBVEVfUFJPQ0VTUywgTCJVbmFibGUgdG8gY3JlYXRlIHByb2Nlc3MgdXNpbmcgJyVzJyIsIGNtZGxpbmUpOwogICAgIEFzc2lnblByb2Nlc3NUb0pvYk9iamVjdChqb2IsIHBpLmhQcm9jZXNzKTsKICAgICBDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLSAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisgICAgV2FpdEZvclNpbmdsZU9iamVjdEV4KHBpLmhQcm9jZXNzLCBJTkZJTklURSwgRkFMU0UpOwogICAgIG9rID0gR2V0RXhpdENvZGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAmcmMpOwogICAgIGlmICghb2spCiAgICAgICAgIGVycm9yKFJDX0NSRUFURV9QUk9DRVNTLCBMIkZhaWxlZCB0byBnZXQgZXhpdCBjb2RlIG9mIHByb2Nlc3MiKTsKQEAgLTU5NSwxMiArNjU5LDE3IEBACiAgICAgfQogfQogCi1zdGF0aWMgd2NoYXJfdCAqIGJ1aWx0aW5fdmlydHVhbF9wYXRocyBbXSA9IHsKLSAgICBMIi91c3IvYmluL2VudiBweXRob24iLAotICAgIEwiL3Vzci9iaW4vcHl0aG9uIiwKLSAgICBMIi91c3IvbG9jYWwvYmluL3B5dGhvbiIsCi0gICAgTCJweXRob24iLAotICAgIE5VTEwKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB3Y2hhcl90ICpzaGViYW5nOworICAgIEJPT0wgc2VhcmNoOworfSBTSEVCQU5HOworCitzdGF0aWMgU0hFQkFORyBidWlsdGluX3ZpcnR1YWxfcGF0aHMgW10gPSB7CisgICAgeyBMIi91c3IvYmluL2VudiBweXRob24iLCBUUlVFIH0sCisgICAgeyBMIi91c3IvYmluL3B5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBMIi91c3IvbG9jYWwvYmluL3B5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBMInB5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBOVUxMLCBGQUxTRSB9LAogfTsKIAogLyogRm9yIG5vdywgYSBzdGF0aWMgYXJyYXkgb2YgY29tbWFuZHMuICovCkBAIC03NzYsMTAgKzg0NSwxMCBAQAogCiBzdGF0aWMgQk9PTAogcGFyc2Vfc2hlYmFuZyh3Y2hhcl90ICogc2hlYmFuZ19saW5lLCBpbnQgbmNoYXJzLCB3Y2hhcl90ICoqIGNvbW1hbmQsCi0gICAgICAgICAgICAgIHdjaGFyX3QgKiogc3VmZml4KQorICAgICAgICAgICAgICB3Y2hhcl90ICoqIHN1ZmZpeCwgQk9PTCAqc2VhcmNoKQogewogICAgIEJPT0wgcmMgPSBGQUxTRTsKLSAgICB3Y2hhcl90ICoqIHZwcDsKKyAgICBTSEVCQU5HICogdnBwOwogICAgIHNpemVfdCBwbGVuOwogICAgIHdjaGFyX3QgKiBwOwogICAgIHdjaGFyX3QgemFwcGVkOwpAQCAtNzg5LDE1ICs4NTgsMTcgQEAKIAogICAgICpjb21tYW5kID0gTlVMTDsgICAgLyogZmFpbHVyZSByZXR1cm4gKi8KICAgICAqc3VmZml4ID0gTlVMTDsKKyAgICAqc2VhcmNoID0gRkFMU0U7CiAKICAgICBpZiAoKCpzaGViYW5nX2xpbmUrKyA9PSBMJyMnKSAmJiAoKnNoZWJhbmdfbGluZSsrID09IEwnIScpKSB7CiAgICAgICAgIHNoZWJhbmdfbGluZSA9IHNraXBfd2hpdGVzcGFjZShzaGViYW5nX2xpbmUpOwogICAgICAgICBpZiAoKnNoZWJhbmdfbGluZSkgewogICAgICAgICAgICAgKmNvbW1hbmQgPSBzaGViYW5nX2xpbmU7Ci0gICAgICAgICAgICBmb3IgKHZwcCA9IGJ1aWx0aW5fdmlydHVhbF9wYXRoczsgKnZwcDsgKyt2cHApIHsKLSAgICAgICAgICAgICAgICBwbGVuID0gd2NzbGVuKCp2cHApOwotICAgICAgICAgICAgICAgIGlmICh3Y3NuY21wKHNoZWJhbmdfbGluZSwgKnZwcCwgcGxlbikgPT0gMCkgeworICAgICAgICAgICAgZm9yICh2cHAgPSBidWlsdGluX3ZpcnR1YWxfcGF0aHM7IHZwcC0+c2hlYmFuZzsgKyt2cHApIHsKKyAgICAgICAgICAgICAgICBwbGVuID0gd2NzbGVuKHZwcC0+c2hlYmFuZyk7CisgICAgICAgICAgICAgICAgaWYgKHdjc25jbXAoc2hlYmFuZ19saW5lLCB2cHAtPnNoZWJhbmcsIHBsZW4pID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgcmMgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAqc2VhcmNoID0gdnBwLT5zZWFyY2g7CiAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGNhbiBkbyB0aGlzIGJlY2F1c2UgYWxsIGJ1aWx0aW4gY29tbWFuZHMgY29udGFpbgogICAgICAgICAgICAgICAgICAgICAgKiAicHl0aG9uIi4KICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04MDUsNyArODc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCp2cHAgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHZwcC0+c2hlYmFuZyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBOb3QgZm91bmQgaW4gYnVpbHRpbnMgLSBsb29rIGluIGN1c3RvbWlzZWQgY29tbWFuZHMuCiAgICAgICAgICAgICAgICAgICoKQEAgLTg1Niw3ICs5MjcsNyBAQAogfSBCT007CiAKIC8qCi0gKiBTdHJpY3RseSwgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgVVRGLTE2IGFuZiBVVEYtMzIsIHNpbmNlIFB5dGhvbiBpdHNlbGYKKyAqIFN0cmljdGx5LCB3ZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBVVEYtMTYgYW5kIFVURi0zMiwgc2luY2UgUHl0aG9uIGl0c2VsZgogICogZG9lc24ndC4gTmV2ZXIgbWluZCwgb25lIGRheSBpdCBtaWdodCAtIHRoZXJlJ3Mgbm8gaGFybSBsZWF2aW5nIGl0IGluLgogICovCiBzdGF0aWMgQk9NIEJPTXNbXSA9IHsKQEAgLTEwMTIsOCArMTA4MywxMCBAQAogICAgIGludCBpLCBqLCBuY2hhcnMgPSAwOwogICAgIGludCBoZWFkZXJfbGVuOwogICAgIEJPT0wgaXNfdmlydDsKKyAgICBCT09MIHNlYXJjaDsKICAgICB3Y2hhcl90ICogY29tbWFuZDsKICAgICB3Y2hhcl90ICogc3VmZml4OworICAgIENPTU1BTkQgKmNtZCA9IE5VTEw7CiAgICAgSU5TVEFMTEVEX1BZVEhPTiAqIGlwOwogCiAgICAgaWYgKHJjID09IDApIHsKQEAgLTExMjUsNyArMTE5OCw3IEBACiAgICAgICAgICAgICBpZiAobmNoYXJzID4gMCkgewogICAgICAgICAgICAgICAgIHNoZWJhbmdfbGluZVstLW5jaGFyc10gPSBMJ1wwJzsKICAgICAgICAgICAgICAgICBpc192aXJ0ID0gcGFyc2Vfc2hlYmFuZyhzaGViYW5nX2xpbmUsIG5jaGFycywgJmNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1ZmZpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1ZmZpeCwgJnNlYXJjaCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMInBhcnNlX3NoZWJhbmc6IGZvdW5kIGNvbW1hbmQ6ICVzXG4iLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc192aXJ0KSB7CkBAIC0xMTQxLDYgKzEyMTQsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihSQ19CQURfVklSVFVBTF9QQVRILCBMIlVua25vd24gdmlydHVhbCBcCiBwYXRoICclcyciLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gNjsgICAvKiBza2lwIHBhc3QgInB5dGhvbiIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgKCgqY29tbWFuZCA9PSBMJ1wwJykgfHwgaXNzcGFjZSgqY29tbWFuZCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBpcyBlbGlnaWJsZSBmb3IgcGF0aCBzZWFyY2gsIGFuZCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlzIG5vIHZlcnNpb24gc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMInNlYXJjaGluZyBQQVRIIGZvciBweXRob24gZXhlY3V0YWJsZVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gZmluZF9vbl9wYXRoKEwicHl0aG9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJQeXRob24gb24gcGF0aDogJXNcbiIsIGNtZCA/IGNtZC0+dmFsdWUgOiBMIjxub3QgZm91bmQ+Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMImxvY2F0ZWQgcHl0aG9uIG9uIFBBVEg6ICVzXG4iLCBjbWQtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlX2NoaWxkKGNtZC0+dmFsdWUsIHN1ZmZpeCwgY21kbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgaGVyZSwgYXMgd2UgaGF2ZSBmb3VuZCB0aGUgY29tbWFuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZBTEwgVEhST1VHSDogTm8gcHl0aG9uIGZvdW5kIG9uIFBBVEgsIHNvIGZhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiYWNrIHRvIGxvY2F0aW5nIHRoZSBjb3JyZWN0IGluc3RhbGxlZCBweXRob24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmNvbW1hbmQgJiYgIXZhbGlkYXRlX3ZlcnNpb24oY29tbWFuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoUkNfQkFEX1ZJUlRVQUxfUEFUSCwgTCJJbnZhbGlkIHZlcnNpb24gXAogc3BlY2lmaWNhdGlvbjogJyVzJy5cbkluIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzY3JpcHQsICdweXRob24nIG5lZWRzIHRvIGJlIFwKQEAgLTEyMjMsNiArMTMxMywxMiBAQAogICAgIHZvaWQgKiB2ZXJzaW9uX2RhdGE7CiAgICAgVlNfRklYRURGSUxFSU5GTyAqIGZpbGVfaW5mbzsKICAgICBVSU5UIGJsb2NrX3NpemU7CisgICAgaW50IGluZGV4OworI2lmIGRlZmluZWQoU0NSSVBUX1dSQVBQRVIpCisgICAgaW50IG5ld2xlbjsKKyAgICB3Y2hhcl90ICogbmV3Y29tbWFuZDsKKyAgICB3Y2hhcl90ICogYXZbMl07CisjZW5kaWYKIAogICAgIHdwID0gZ2V0X2VudihMIlBZTEFVTkNIX0RFQlVHIik7CiAgICAgaWYgKCh3cCAhPSBOVUxMKSAmJiAoKndwICE9IEwnXDAnKSkKQEAgLTEyNzEsOCArMTM2Nyw4IEBACiAgICAgICAgICAgICBpZiAoIXZhbGlkKQogICAgICAgICAgICAgICAgIGRlYnVnKEwiR2V0RmlsZVZlcnNpb25JbmZvIGZhaWxlZDogJVhcbiIsIEdldExhc3RFcnJvcigpKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHZhbGlkID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbl9kYXRhLCBMIlxcIiwgJmZpbGVfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZibG9ja19zaXplKTsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IFZlclF1ZXJ5VmFsdWVXKHZlcnNpb25fZGF0YSwgTCJcXCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBWT0lEICopICZmaWxlX2luZm8sICZibG9ja19zaXplKTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKQogICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMIlZlclF1ZXJ5VmFsdWUgZmFpbGVkOiAlWFxuIiwgR2V0TGFzdEVycm9yKCkpOwogICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtMTMwMiw3ICsxMzk4LDQwIEBACiAgICAgfQogCiAgICAgY29tbWFuZCA9IHNraXBfbWUoR2V0Q29tbWFuZExpbmVXKCkpOwotICAgIGRlYnVnKEwiQ2FsbGVkIHdpdGggY29tbWFuZCBsaW5lOiAlcyIsIGNvbW1hbmQpOworICAgIGRlYnVnKEwiQ2FsbGVkIHdpdGggY29tbWFuZCBsaW5lOiAlc1xuIiwgY29tbWFuZCk7CisKKyNpZiBkZWZpbmVkKFNDUklQVF9XUkFQUEVSKQorICAgIC8qIFRoZSBsYXVuY2hlciBpcyBiZWluZyB1c2VkIGluICJzY3JpcHQgd3JhcHBlciIgbW9kZS4KKyAgICAgKiBUaGVyZSBzaG91bGQgdGhlcmVmb3JlIGJlIGEgUHl0aG9uIHNjcmlwdCBuYW1lZCA8ZXhlbmFtZT4tc2NyaXB0LnB5IGluCisgICAgICogdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBsYXVuY2hlciBleGVjdXRhYmxlLgorICAgICAqIFB1dCB0aGUgc2NyaXB0IG5hbWUgaW50byBhcmd2IGFzIHRoZSBmaXJzdCAoc2NyaXB0IG5hbWUpIGFyZ3VtZW50LgorICAgICAqLworCisgICAgLyogR2V0IHRoZSB3cmFwcGVkIHNjcmlwdCBuYW1lIC0gaWYgdGhlIHNjcmlwdCBpcyBub3QgcHJlc2VudCwgdGhpcyB3aWxsCisgICAgICogdGVybWluYXRlIHRoZSBwcm9ncmFtIHdpdGggYW4gZXJyb3IuCisgICAgICovCisgICAgbG9jYXRlX3dyYXBwZWRfc2NyaXB0KCk7CisKKyAgICAvKiBBZGQgdGhlIHdyYXBwZWQgc2NyaXB0IHRvIHRoZSBzdGFydCBvZiBjb21tYW5kICovCisgICAgbmV3bGVuID0gd2NzbGVuKHdyYXBwZWRfc2NyaXB0X3BhdGgpICsgd2NzbGVuKGNvbW1hbmQpICsgMjsgLyogJyAnICsgTlVMICovCisgICAgbmV3Y29tbWFuZCA9IG1hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiBuZXdsZW4pOworICAgIGlmICghbmV3Y29tbWFuZCkgeworICAgICAgICBlcnJvcihSQ19OT19NRU1PUlksIEwiQ291bGQgbm90IGFsbG9jYXRlIG5ldyBjb21tYW5kIGxpbmUiKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdjc2NweV9zKG5ld2NvbW1hbmQsIG5ld2xlbiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIHdjc2NhdF9zKG5ld2NvbW1hbmQsIG5ld2xlbiwgTCIgIik7CisgICAgICAgIHdjc2NhdF9zKG5ld2NvbW1hbmQsIG5ld2xlbiwgY29tbWFuZCk7CisgICAgICAgIGRlYnVnKEwiUnVubmluZyB3cmFwcGVkIHNjcmlwdCB3aXRoIGNvbW1hbmQgbGluZSAnJXMnXG4iLCBuZXdjb21tYW5kKTsKKyAgICAgICAgcmVhZF9jb21tYW5kcygpOworICAgICAgICBhdlswXSA9IHdyYXBwZWRfc2NyaXB0X3BhdGg7CisgICAgICAgIGF2WzFdID0gTlVMTDsKKyAgICAgICAgbWF5YmVfaGFuZGxlX3NoZWJhbmcoYXYsIG5ld2NvbW1hbmQpOworICAgICAgICAvKiBSZXR1cm5zIGlmIG5vIHNoZWJhbmcgbGluZSAtIHBhc3MgdG8gZGVmYXVsdCBwcm9jZXNzaW5nICovCisgICAgICAgIGNvbW1hbmQgPSBuZXdjb21tYW5kOworICAgICAgICB2YWxpZCA9IEZBTFNFOworICAgIH0KKyNlbHNlCiAgICAgaWYgKGFyZ2MgPD0gMSkgewogICAgICAgICB2YWxpZCA9IEZBTFNFOwogICAgICAgICBwID0gTlVMTDsKQEAgLTEzMTAsMTMgKzE0MzksNiBAQAogICAgIGVsc2UgewogICAgICAgICBwID0gYXJndlsxXTsKICAgICAgICAgcGxlbiA9IHdjc2xlbihwKTsKLSAgICAgICAgaWYgKHBbMF0gIT0gTCctJykgewotICAgICAgICAgICAgcmVhZF9jb21tYW5kcygpOwotICAgICAgICAgICAgbWF5YmVfaGFuZGxlX3NoZWJhbmcoJmFyZ3ZbMV0sIGNvbW1hbmQpOwotICAgICAgICB9Ci0gICAgICAgIC8qIE5vIGZpbGUgd2l0aCBzaGViYW5nLCBvciBhbiB1bnJlY29nbmlzZWQgc2hlYmFuZy4KLSAgICAgICAgICogSXMgdGhlIGZpcnN0IGFyZyBhIHNwZWNpYWwgdmVyc2lvbiBxdWFsaWZpZXI/Ci0gICAgICAgICAqLwogICAgICAgICB2YWxpZCA9ICgqcCA9PSBMJy0nKSAmJiB2YWxpZGF0ZV92ZXJzaW9uKCZwWzFdKTsKICAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICAgICBpcCA9IGxvY2F0ZV9weXRob24oJnBbMV0pOwpAQCAtMTMyNiw3ICsxNDQ4LDE5IEBACiAgICAgICAgICAgICBjb21tYW5kICs9IHdjc2xlbihwKTsKICAgICAgICAgICAgIGNvbW1hbmQgPSBza2lwX3doaXRlc3BhY2UoY29tbWFuZCk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3IgKGluZGV4ID0gMTsgaW5kZXggPCBhcmdjOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCphcmd2W2luZGV4XSAhPSBMJy0nKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbmRleCA8IGFyZ2MpIHsKKyAgICAgICAgICAgICAgICByZWFkX2NvbW1hbmRzKCk7CisgICAgICAgICAgICAgICAgbWF5YmVfaGFuZGxlX3NoZWJhbmcoJmFyZ3ZbaW5kZXhdLCBjb21tYW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICBpcCA9IGxvY2F0ZV9weXRob24oTCIiKTsKICAgICAgICAgaWYgKGlwID09IE5VTEwpCkBAIC0xMzQ0LDcgKzE0NzgsNyBAQAogICAgICAgICAgICAgZndwcmludGYoc3Rkb3V0LCBMIlwKIFB5dGhvbiBMYXVuY2hlciBmb3IgV2luZG93cyBWZXJzaW9uICVzXG5cbiIsIHZlcnNpb25fdGV4dCk7CiAgICAgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwiXAotdXNhZ2U6ICVzIFsgbGF1bmNoZXItYXJndW1lbnRzIF0gc2NyaXB0IFsgc2NyaXB0LWFyZ3VtZW50cyBdXG5cbiIsIGFyZ3ZbMF0pOwordXNhZ2U6ICVzIFsgbGF1bmNoZXItYXJndW1lbnRzIF0gWyBweXRob24tYXJndW1lbnRzIF0gc2NyaXB0IFsgc2NyaXB0LWFyZ3VtZW50cyBdXG5cbiIsIGFyZ3ZbMF0pOwogICAgICAgICAgICAgZnB1dHdzKEwiXAogTGF1bmNoZXIgYXJndW1lbnRzOlxuXG5cCiAtMiAgICAgOiBMYXVuY2ggdGhlIGxhdGVzdCBQeXRob24gMi54IHZlcnNpb25cblwKZGlmZiAtLWdpdCBhL1BDL21zdmNydG1vZHVsZS5jIGIvUEMvbXN2Y3J0bW9kdWxlLmMKaW5kZXggMDRkMjA4OC4uMThkZWM2ZCAxMDA3NTUKLS0tIGEvUEMvbXN2Y3J0bW9kdWxlLmMKKysrIGIvUEMvbXN2Y3J0bW9kdWxlLmMKQEAgLTExMywxMSArMTEzLDEyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X29wZW5fb3NmaGFuZGxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBsb25nIGhhbmRsZTsKKyAgICBQeV9pbnRwdHJfdCBoYW5kbGU7CiAgICAgaW50IGZsYWdzOwogICAgIGludCBmZDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibGk6b3Blbl9vc2ZoYW5kbGUiLCAmaGFuZGxlLCAmZmxhZ3MpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOm9wZW5fb3NmaGFuZGxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmZsYWdzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmZCA9IF9vcGVuX29zZmhhbmRsZShoYW5kbGUsIGZsYWdzKTsKZGlmZiAtLWdpdCBhL1BDL29zMmVteC9NYWtlZmlsZSBiL1BDL29zMmVteC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAwNjEwZS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw2NzIgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjPT09PT09PT09PT09PT09PT09LS0tLS0tLS0tLS0tLS0tLQotIwotIyBUb3AtTGV2ZWwgTWFrZWZpbGUgZm9yIEJ1aWxkaW5nIFB5dGhvbiAyLjYgZm9yIE9TLzIgdXNpbmcgR0NDL0VNWAotIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQW5kcmV3IFphYm9sb3RueSwgPGJpdEBlbHRlY2gucnU+IGZvciBQeXRob24gMS41LjIKLSMgTW9kaWZpZWQgYnkgQW5kcmV3IE1hY0ludHlyZSwgPGFuZHltYWNAcGN1Zy5vcmcuYXU+IGZvciBQeXRob24gMi42Ci0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggW1BdR0NDL0VNWCBjb21waWxlciBhbnkKLSMgdmVyc2lvbiBhbmQgR05VIE1ha2UuCi0jCi0jIFRoZSBvdXRwdXQgb2YgdGhlIGJ1aWxkIGlzIGEgbGFyZ2lzaCBQeXRob24yNi5ETEwgY29udGFpbmluZyB0aGUKLSMgZXNzZW50aWFsIG1vZHVsZXMgb2YgUHl0aG9uIGFuZCBhIHNtYWxsIFB5dGhvbi5leGUgcHJvZ3JhbSB0byBzdGFydAotIyB0aGUgaW50ZXJwcmV0ZXIuIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjI2LkRMTCBpcyBuZWVkZWQuIFdlIGFsc28gYnVpbGQgcHl0aG9uX3MuYSBzdGF0aWMgbGlicmFyeSAod2hpY2gKLSMgY2FuIGJlIGNvbnZlcnRlZCBpbnRvIE9NRiAoLmxpYikgZm9ybWF0IHVzaW5nIGVteG9tZiB0b29sKSBhbmQgYm90aAotIyBweXRob24uYSBhbmQgcHl0aG9uLmxpYiBpbXBvcnQgbGlicmFyaWVzLiAgVGhlbiB0aGUgb3B0aW9uYWwgCi0jIGV4dGVuc2lvbiBtb2R1bGVzLCB3aGljaCBhcmUgT1MvMiBETExzIHJlbmFtZWQgd2l0aCBhIFBZRCBmaWxlIGV4dGVuc2lvbi4KLSMKLSMgUmVjb21tZW5kZWQgYnVpbGQgb3JkZXI6Ci0jICAgbWFrZSBkZXBlbmQJCShpZiB5b3UgaGF2ZSBtYWtlZGVwKQotIyAgIG1ha2UgYWxsCi0jICAgbWFrZSBseAkJKGlmIHlvdSBoYXZlIGx4bGl0ZSkKLSMgICBtYWtlIHRlc3QJCShvcHRpb25hbCkKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIz09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0KLQotIyA9PT0gQ29tcGlsYXRpb24gbW9kZTogZGVidWcgb3IgcmVsZWFzZSA9PT0KLU1PREU9CQlvcHRpbWl6ZQotI01PREU9CQlkZWJ1ZwotIyA9PT0gQXNzZXJ0KCkgZW5hYmxlZCA9PT0KLUFTU0VSVElPTlM9bm8KLSNBU1NFUlRJT05TPXllcwotIyA9PT0gSGFyZC13aXJlIGluc3RhbGxhdGlvbiBsb2NhdGlvbiA9PT0KLUZJWEVEX1BZSE9NRT1ubwotI0ZJWEVEX1BZSE9NRT15ZXMKLQotIyA9PT0gT3B0aW9uYWwgbW9kdWxlcyA9PT0KLSMgRG8geW91IGhhdmUgdGhlIEluZm9aaXAgY29tcHJlc3Npb24gbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX1pMSUI9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBVbHRyYSBGYXN0IENyeXB0IChVRkMpIGxpYnJhcnkgaW5zdGFsbGVkPwotSEFWRV9VRkM9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBUY2wvVGsgbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX1RDTFRLPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgR05VIHJlYWRsaW5lIGxpYnJhcnkgaW5zdGFsbGVkPwotIyBOT1RFOiBJJ20gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIEthaSBVd2UgUm9tbWVsJ3MgcG9ydCB0aGF0IAotIyAgICAgICAtIGlzIGNvbXBpbGVkIHdpdGggbXVsdGl0aHJlYWRpbmcgZW5hYmxlZAotIyAgICAgICAtIGlzIGxpbmtlZCBzdGF0aWNhbGx5Ci0jICAgICAgIEkgaGF2ZSBoYWQgbm8gc3VjY2VzcyB0cnlpbmcgdG8gdXNlIGEgRExMIHZlcnNpb24sIGV2ZW4gd2hlbgotIyAgICAgICBjb21waWxlZCB3aXRoIG11bHRpdGhyZWFkaW5nIGVuYWJsZWQuCi1IQVZFX0dSRUFETElORT0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEJTRCBEQiBsaWJyYXJ5ICh2MS44NSkgYXMgaW5jbHVkZWQgaW4gdGhlIEVNWEJTRCBwYWNrYWdlPwotIyBOT1RFOiB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgcmVjb21waWxlZCB3aXRoIGEgc3RydWN0dXJlIG1lbWJlcgotIyAgICAgICByZW5hbWVkIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGhlIG11bHRpdGhyZWFkZWQgZXJybm8gc3VwcG9ydAotIyAgICAgICAodGhlcmUgaXMgYSBzdHJ1Y3R1cmUgbWVtYmVyIGNhbGxlZCBlcnJubywgdXNlZCBmb3Igc2hhZG93aW5nIHRoZQotIyAgICAgICByZWFsIGVycm5vLCB3aGljaCBjb25mbGljdHMgd2l0aCB0aGUgZXJybm8gcmVkZWZpbml0aW9uIG9mIC1abXQpCi1IQVZFX0JTRERCPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgbmN1cnNlcyBsaWJyYXJ5IGluc3RhbGxlZD8gRU1YJ3MgQlNEIGN1cnNlcyBhcmVuJ3QgZW5vdWdoISAKLUhBVkVfTkNVUlNFUz0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEdEQk0gbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX0dEQk09CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBCWjIgY29tcHJlc3Npb24gbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX0JaMj0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIE9wZW5TU0wgbGlicmFyaWVzIGluc3RhbGxlZAotSEFWRV9PUEVOU1NMPQlubwotCi0jID09PSBpbnN0YWxsIGxvY2F0aW9ucyA9PT0KLSMgZGVmYXVsdCB2YWx1ZSBvZiBQWVRIT05IT01FCi1MSUJfRElSPUM6L1B5dGhvbjI2Ci0jIGRlZmF1bHQgaXMgdG8gaGF2ZSBldmVyeXRoaW5nIGluIG9yIHVuZGVyIFBZVEhPTkhPTUUKLUVYRV9ESVI9JChMSUJfRElSKQotRExMX0RJUj0kKEVYRV9ESVIpCi0KLQotIyA9PT0gVGhlIFRvb2xzID09PQotQ0M9CQlnY2MKLUNGTEFHUz0JCS1abXQgLVdhbGwgJChJTkNMVURFKQotQ0ZMQUdTLkxJQj0JJChDRkxBR1MpCi1MRD0JCWdjYwotTERGTEFHUz0JLVptdCAtWmNydGRsbCAtTC4gLWxnY2MKLUxERkxBR1MuRVhFPQkkKExERkxBR1MpCi1MREZMQUdTLkRMTD0JJChMREZMQUdTKSAtWmRsbAotTERGTEFHUy5BPQkkKExERkxBR1MpICQoTElCUykKLUFSRkxBR1M9CWNycwotSU1QTElCPQkJZW14aW1wCi1FWFBMSUI9CQllbXhleHAKLUVYRU9QVD0JCWVteGJpbmQKLVBZX0RFRj0JCS1EUHlfQlVJTERfQ09SRQotCi0KLSMgYWRqdXN0IEMgY29tcGlsZXIgc2V0dGluZ3MgYmFzZWQgb24gYnVpbGQgb3B0aW9ucwotaWZlcSAoJChNT0RFKSxkZWJ1ZykKLSAgQ0ZMQUdTKz0JLWcgLU8KLSAgTERGTEFHUys9CS1nCi1lbHNlCi0gIENGTEFHUys9CS1zIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlCi0gIExERkxBR1MrPQktcwotZW5kaWYKLUNGTEFHUys9CSQoUFlfREVGKQotaWZlcSAoJChBU1NFUlRJT05TKSxubykKLSAgQ0ZMQUdTKz0JLUROREVCVUcKLWVuZGlmCi1pZmVxICgkKEZJWEVEX1BZSE9NRSkseWVzKQotICBDRkxBR1MrPQktRFBSRUZJWD0kKERRVU9URSkkKExJQl9ESVIpJChEUVVPVEUpCi1lbmRpZgotCi0jIFdlJ3JlIHVzaW5nIHRoZSBPTUYgZm9ybWF0IHNpbmNlIEVNWCdzIGxkIGhhcyBhIG9ic2N1cmUgYnVnCi0jIGJlY2F1c2Ugb2Ygd2hpY2ggaXQgc29tZXRpbWVzIGZhaWxzIHRvIGJ1aWxkIHJlbG9jYXRpb25zCi0jIGluIC5kYXRhIHNlZ21lbnQgdGhhdCBwb2ludCB0byBhbm90aGVyIC5kYXRhIGxvY2F0aW9ucwotIyAoZXhjZXB0IGZvciB0aGUgZmluYWwgbGlua2luZyBpZiB0aGUgLkVYRXMpCi1PTUY9CQl5ZXMKLQotIyBpZiBmb3JrKCkgc3VwcG9ydCBpcyByZXF1aXJlZCwgdGhlIG1haW4gZXhlY3V0YWJsZSBtdXN0IGJlIGxpbmtlZCB3aXRoIGxkCi1FWEVPTUY9CQlubwotCi0jIEZpbGUgZXh0ZW5zaW9ucwotTU9EVUxFLkVYVD0JLnB5ZAotTU9ETElCLkVYVD0JLmRsbAotaWZlcSAoJChPTUYpLHllcykKLSAgTz0JCS5vYmoKLSAgQT0JCS5saWIKLSAgQVI9CQllbXhvbWZhcgotICBDRkxBR1MrPQktWm9tZgotICBMREZMQUdTKz0JLVpvbWYKLSAgaWZlcSAoJChNT0RFKSxkZWJ1ZykKLSAgICBBUkZMQUdTPQktcDY0IGNycwotICBlbHNlCi0gICAgQVJGTEFHUz0JLXAzMiBjcnMKLSAgZW5kaWYKLWVsc2UKLSAgTz0JCS5vCi0gIEE9CQkuYQotICBBUj0JCWFyCi1lbmRpZgotCi0KLSMgPT09IEJ1aWxkIHRpbWUgcmVzb3VyY2Ugc2V0dGluZ3MgPT09Ci0KLSMgRU1YJ3MgZGVmYXVsdCBudW1iZXIgb2YgZmlsZSBoYW5kbGVzIGlzIDQwLCB3aGljaCBpcyBzb21ldGltZXMgaW5zdWZmaWNpZW50Ci0jICh0aGUgdGVtcGZpbGUgcmVncmVzc2lvbiB0ZXN0IHRyaWVzIHRvIGNyZWF0ZSAxMDAgdGVtcG9yYXJ5IGZpbGVzKQotTkZJTEVTPTI1MAotCi0jIFRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZm9yIGNoaWxkIHRocmVhZHMgaXMgNjRrIGJ5dGVzLCB3aGljaCBpcwotIyBpbnN1ZmZpY2llbnQgZm9yIHNvbWUgYXBwbGljYXRpb25zIHdoaWNoIGRvIGEgbG90IG9mIHdvcmsgaW4gdGhyZWFkcwotIyAoc3VjaCBhcyBab3BlLCBlc3BlY2lhbGx5IGluIGNvbmp1bmN0aW9uIHdpdGggUGxvbmUpLgotIyBOb3RlIHRoYXQgdGhpcyBzZXR0aW5nIGlzIGRpc3RpbmN0IGZyb20gdGhlIHN0YWNrIHNpemUgZm9yIHRoZSBtYWluCi0jIHRocmVhZCwgd2hpY2ggaXMgc2V0IHZpYSB0aGUgJS5kZWYgcnVsZSBiZWxvdy4KLSMgRU1YIGRvY3VtZW50cyB0aGF0IHRoZSB0aHJlYWQgc3RhY2sgc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMzI3NjggYnl0ZXM7Ci0jIGZvciBab3BlL1Bsb25lIGF0IGxlYXN0IDEyOGsgYnl0ZXMgaXMgcmVjb21tZW5kZWQuCi0jIFVuY29tbWVudCAmIGFkanVzdCB0aGUgbmV4dCBsaW5lIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHN0YWNrIHNpemU6Ci0jQ0ZMQUdTKz0JLURUSFJFQURfU1RBQ0tfU0laRT0weDIwMDAwCi0KLQotIyA9PT0gVGhlIGVudmlyb25tZW50ID09PQotCi0jIFNvdXJjZSBmaWxlIHBhdGhzCi1TUkNQQVRIPS47Li4vLi4vUHl0aG9uOy4uLy4uL1BhcnNlcjsuLi8uLi9PYmplY3RzOy4uLy4uL0luY2x1ZGU7Li4vLi4vTW9kdWxlcwotIyBQeXRob24gY29udGFpbnMgdGhlIGNlbnRyYWwgY29yZSwgY29udGFpbmluZyB0aGUgYnVpbHRpbnMgYW5kIGludGVycHJldGVyLgotIyBQYXJzZXIgY29udGFpbnMgUHl0aG9uJ3MgSW50ZXJuYWwgUGFyc2VyIGFuZAotIyAgIFN0YW5kYWxvbmUgUGFyc2VyIEdlbmVyYXRvciBQcm9ncmFtIChTaGFyZXMgU29tZSBvZiBQeXRob24ncyBNb2R1bGVzKQotIyBPYmplY3RzIGNvbnRhaW5zIFB5dGhvbiBPYmplY3QgVHlwZXMKLSMgTW9kdWxlcyBjb250YWlucyBleHRlbnNpb24gTW9kdWxlcyAoQnVpbHQtSW4gb3IgYXMgU2VwYXJhdGUgRExMcykKLQotIyBVbml4IHNoZWxscyB0ZW5kIHRvIHVzZSAiJCIgYXMgZGVsaW1pdGVyIGZvciB2YXJpYWJsZSBuYW1lcy4KLSMgVGVzdCBmb3IgdGhpcyBiZWhhdmlvdXIgYW5kIHNldCAkKEJVQ0spIHZhcmlhYmxlIGNvcnJlc3BvbmRpZ2x5IC4uLgotX19UTVBfXzo9JChzaGVsbCBlY2hvICQkJCQpCi1pZmVxICgkKF9fVE1QX18pLCQkJCQpCi0gIEJVQ0s9CQkkJAotICBCUk89CQkoCi0gIEJSQz0JCSkKLWVsc2UKLSAgQlVDSz0JCVwkJAotICBCUk89CQlcKAotICBCUkM9CQlcKQotZW5kaWYKLSMgQ29tcHV0ZSB0aGUgImRvdWJsZSBxdW90ZSIgdmFyaWFibGUKLV9fVE1QX186PSQoc2hlbGwgZWNobyAiIikKLWlmZXEgKCQoX19UTVBfXyksIiIpCi0gIERRVU9URT0JIgotZWxzZQotICBEUVVPVEU9CVwiCi1lbmRpZgotCi0jIEluY2x1ZGUgcGF0aHMKLSNJTkNMVURFPQktSSQoc3Vic3QgOywgLUksICQoU1JDUEFUSCkpCi1JTkNMVURFPQktSS4gLUkuLi8uLi9JbmNsdWRlCi0KLSMgUGF0aCB0byBzZWFyY2ggZm9yIC5jIGZpbGVzCi12cGF0aCAlLmMgLjsuLjskKFNSQ1BBVEgpCi0KLSMgVG9wIG9mIHRoZSBwYWNrYWdlIHRyZWUKLVRPUD0JCS4uLy4uLwotCi0jIERpcmVjdG9yeSBmb3Igb3V0cHV0IGZpbGVzCi1PVVRCQVNFPQlvdXQvCi1PVVQ9CQkkKE9VVEJBU0UpJChNT0RFKS8KLQotIyBBZGRpdGlvbmFsIGxpYnJhcmllcwotTElCUz0JCS1sc29ja2V0Ci0KLSMgVXRpbGl0eSBtYWNybzogcmVwbGFjZW1lbnQgZm9yICReCi1eXj0JCSQoZmlsdGVyLW91dCAlJEEsJF4pCi0jIFVzZSAkKExeKSB0byBsaW5rIHdpdGggYWxsIGxpYnJhcmllcyBzcGVjaWZpZWQgYXMgZGVwZW5kZW5jaWVzCi1MXj0JCSQoYWRkcHJlZml4IC1sLCQoYmFzZW5hbWUgJChub3RkaXIgJChmaWx0ZXIgJSRBLCQrKSkpKQotCi0jIEJ1aWxkIHJ1bGVzCi0kKE9VVCklJE86ICUuYwotCSQoQ0MpICQoQ0ZMQUdTLkxJQikgLWMgJDwgLW8gJEAKLQotJS5hOgotCSQoTEQpICQoTERGTEFHUy5BKSAtbyAkQCAkKF5eKSAkKExeKQotCi0lLmRsbDoKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpCi0KLSUucHlkOiAkKE9VVCklbW9kdWxlJE8gJChPVVQpJV9tLmRlZgotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoUFlUSE9OLklNUExJQikgJChMSUJTKQotCi0lLmV4ZToKLQkkKExEKSAkKExERkxBR1MuRVhFKSAtbyAkQCAkKF5eKSAkKExeKQotCi0lX20uZGVmOgotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQobm90ZGlyICQqKSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFID4kQAotICAgICAgICBpZmVxICgkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKSQoTU9EVUxFLkVYVCkpLCkKLQkgIEBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKVB5dGhvbiBzdGFuZGFyZCBtb2R1bGUgJChub3RkaXIgJCopJChEUVVPVEUpID4+JEAKLSAgICAgICAgZWxzZQotCSAgQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpJChERVNDUklQVElPTi4kKG5vdGRpciAkKikkKE1PRFVMRS5FWFQpKSQoRFFVT1RFKSA+PiRACi0gICAgICAgIGVuZGlmCi0JQGVjaG8gREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgPj4kQAotCUBlY2hvIEVYUE9SVFMgPj4kQAotCUBlY2hvIAlpbml0JChub3RkaXIgJCopID4+JEAKLQotJS5kZWY6Ci0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIE5BTUUgJChub3RkaXIgJCopICQoRVhFVFlQRS4kKG5vdGRpciAkKikuZXhlKSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSkkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKS5leGUpJChEUVVPVEUpID4+JEAKLQlAZWNobyBTVEFDS1NJWkUgMjA5NzE1MiA+PiRACi0KLSMgT3V0cHV0IGZpbGUgbmFtZXMKLVBZVEhPTl9WRVI9CTIuNgotUFlUSE9OX0xJQj0JcHl0aG9uMzMKLVBZVEhPTi5MSUI9CSQoUFlUSE9OX0xJQilfcyRBCi1QWVRIT04uSU1QTElCPQkkKFBZVEhPTl9MSUIpJEEKLWlmZXEgKCQoRVhFT01GKSx5ZXMpCi0gIFBZVEhPTi5FWEVJTVA9CSQoUFlUSE9OLklNUExJQikKLSAgTERNT0RFLkVYRT0JCS1ab21mCi1lbHNlCi0gIFBZVEhPTi5FWEVJTVA9CSQoUFlUSE9OX0xJQikuYQotICBMRE1PREUuRVhFID0gCi1lbmRpZgotUFlUSE9OLkRMTD0JJChQWVRIT05fTElCKS5kbGwKLVBZVEhPTi5ERUY9CSQoUFlUSE9OX0xJQikuZGVmCi1QWVRIT04uRVhFPQlweXRob24uZXhlCi1QWVRIT05QTS5FWEU9CXB5dGhvbnBtLmV4ZQotUEdFTi5FWEU9CXBnZW4uZXhlCi1MSUJSQVJZPQkkKFBZVEhPTi5MSUIpCi1MRF9MSUJSQVJZPQkkKFBZVEhPTi5JTVBMSUIpCi0KLSMgQWRkaXRpb25hbCBleGVjdXRhYmxlIHBhcmFtZXRlcnMKLUVYRVRZUEUuJChQWVRIT04uRVhFKT0JCVdJTkRPV0NPTVBBVAotRVhFVFlQRS4kKFBZVEhPTlBNLkVYRSk9CVdJTkRPV0FQSQotRVhFVFlQRS4kKFBHRU4uRVhFKT0JCVdJTkRPV0NPTVBBVAotREVTQ1JJUFRJT04uJChQWVRIT04uRVhFKT0JUHl0aG9uIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZyBsYW5ndWFnZSBpbnRlcnByZXRlciBmb3IgT1MvMgotREVTQ1JJUFRJT04uJChQWVRIT05QTS5FWEUpPQkkKERFU0NSSVBUSU9OLiQoUFlUSE9OLkVYRSkpCi1ERVNDUklQVElPTi4kKFBHRU4uRVhFKT0JUHl0aG9uIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZyBsYW5ndWFnZSBwYXJzZXIgZ2VuZXJhdG9yIGZvciBPUy8yCi0KLSMgTW9kdWxlIGRlc2NyaXB0aW9ucwotREVTQ1JJUFRJT04uemxpYiQoTU9EVUxFLkVYVCk9CQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzaW5nIHRoZSBJbmZvWmlwIGNvbXByZXNzaW9uIGxpYnJhcnkKLURFU0NSSVBUSU9OLmNyeXB0JChNT0RVTEUuRVhUKT0JCVB5dGhvbiBFeHRlbnNpb24gRExMIGltcGxlbWVudGluZyB0aGUgY3J5cHQkKEJSTykkKEJSQykgZnVuY3Rpb24KLURFU0NSSVBUSU9OLl90a2ludGVyJChNT0RVTEUuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBUY2wvVGsgRW52aXJvbm1lbnQKLURFU0NSSVBUSU9OLnJlYWRsaW5lJChNT0RVTEUuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBHTlUgUmVhZExpbmUgbGlicmFyeQotREVTQ1JJUFRJT04uX2N1cnNlcyQoTU9ETElCLkVYVCk9CVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3MgdG8gbmN1cnNlcyBsaWJyYXJ5Ci1ERVNDUklQVElPTi5weWV4cGF0JChNT0RVTEUuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBleHBhdCBsaWJyYXJ5Ci1ERVNDUklQVElPTi5iejIkKE1PRFVMRS5FWFQpPQkJUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2Vzc2luZyB0aGUgYnoyIGNvbXByZXNzaW9uIGxpYnJhcnkKLQotIyBTb3VyY2UgZmlsZXMKLVNSQy5PUzJFTVg9CWNvbmZpZy5jIGRsZmNuLmMgZ2V0cGF0aHAuYwotU1JDLk1BSU49CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlNb2R1bGVzL2dldGJ1aWxkaW5mby5jIFwKLQkJTW9kdWxlcy9tYWluLmMpCi1TUkMuTU9EVUxFUz0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCU1vZHVsZXMvZ2Ntb2R1bGUuYyBcCi0JCU1vZHVsZXMvc2lnbmFsbW9kdWxlLmMgXAotCQlNb2R1bGVzL3Bvc2l4bW9kdWxlLmMgXAotCQlNb2R1bGVzL190aHJlYWRtb2R1bGUuYyBcCi0JCU1vZHVsZXMvYXJyYXltb2R1bGUuYyBcCi0JCU1vZHVsZXMvYmluYXNjaWkuYyBcCi0JCU1vZHVsZXMvY21hdGhtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2NvZGVjc21vZHVsZS5jIFwKLQkJTW9kdWxlcy9jb2xsZWN0aW9uc21vZHVsZS5jIFwKLQkJTW9kdWxlcy9fY3N2LmMgXAotCQlNb2R1bGVzL2RhdGV0aW1lbW9kdWxlLmMgXAotCQlNb2R1bGVzL2Vycm5vbW9kdWxlLmMgXAotCQlNb2R1bGVzL2ZjbnRsbW9kdWxlLmMgXAotCQlNb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2hlYXBxbW9kdWxlLmMgXAotCQlNb2R1bGVzL2ltYWdlb3AuYyBcCi0JCU1vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMgXAotCQlNb2R1bGVzL19sb2NhbGVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvbWF0aG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9vcGVyYXRvci5jIFwKLQkJTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMgXAotCQlNb2R1bGVzL3NoYTI1Nm1vZHVsZS5jIFwKLQkJTW9kdWxlcy9zaGE1MTJtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX3NyZS5jIFwKLQkJTW9kdWxlcy9fc3RydWN0LmMgXAotCQlNb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMgXAotCQlNb2R1bGVzL3Rlcm1pb3MuYyBcCi0JCU1vZHVsZXMvdGltZW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fd2Vha3JlZi5jIFwKLQkJTW9kdWxlcy94eHN1YnR5cGUuYyBcCi0JCU1vZHVsZXMvemlwaW1wb3J0LmMpCi1TUkMuUEFSU0UxPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJUGFyc2VyL2FjY2VsZXIuYyBcCi0JCVBhcnNlci9ncmFtbWFyMS5jIFwKLQkJUGFyc2VyL2xpc3Rub2RlLmMgXAotCQlQYXJzZXIvbm9kZS5jIFwKLQkJUGFyc2VyL3BhcnNlci5jIFwKLQkJUGFyc2VyL3BhcnNldG9rLmMgXAotCQlQYXJzZXIvYml0c2V0LmMgXAotCQlQYXJzZXIvbWV0YWdyYW1tYXIuYykKLVNSQy5QQVJTRTI9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvdG9rZW5pemVyLmMgXAotCQlQYXJzZXIvbXlyZWFkbGluZS5jKQotU1JDLlBBUlNFUj0JJChTUkMuUEFSU0UxKSBcCi0JCSQoU1JDLlBBUlNFMikKLVNSQy5QWVRIT049CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQeXRob24vUHl0aG9uLWFzdC5jIFwKLQkJUHl0aG9uL2FzZGwuYyBcCi0JCVB5dGhvbi9hc3QuYyBcCi0JCVB5dGhvbi9ibHRpbm1vZHVsZS5jIFwKLQkJUHl0aG9uL2V4Y2VwdGlvbnMuYyBcCi0JCVB5dGhvbi9jZXZhbC5jIFwKLQkJUHl0aG9uL2NvbXBpbGUuYyBcCi0JCVB5dGhvbi9jb2RlY3MuYyBcCi0JCVB5dGhvbi9keW5hbWljX2Fubm90YXRpb25zLmMgXAotCQlQeXRob24vZXJyb3JzLmMgXAotCQlQeXRob24vZnJvemVuLmMgXAotCQlQeXRob24vZnJvemVubWFpbi5jIFwKLQkJUHl0aG9uL2Z1dHVyZS5jIFwKLQkJUHl0aG9uL2dldGFyZ3MuYyBcCi0JCVB5dGhvbi9nZXRjb21waWxlci5jIFwKLQkJUHl0aG9uL2dldGNvcHlyaWdodC5jIFwKLQkJUHl0aG9uL2dldHBsYXRmb3JtLmMgXAotCQlQeXRob24vZ2V0dmVyc2lvbi5jIFwKLQkJUHl0aG9uL2dyYW1pbml0LmMgXAotCQlQeXRob24vaW1wb3J0LmMgXAotCQlQeXRob24vaW1wb3J0ZGwuYyBcCi0JCVB5dGhvbi9tYXJzaGFsLmMgXAotCQlQeXRob24vbW9kc3VwcG9ydC5jIFwKLQkJUHl0aG9uL215c25wcmludGYuYyBcCi0JCVB5dGhvbi9teXN0cnRvdWwuYyBcCi0JCVB5dGhvbi9weWFyZW5hLmMgXAotCQlQeXRob24vcHljdHlwZS5jIFwKLQkJUHl0aG9uL3B5ZnBlLmMgXAotCQlQeXRob24vcHlzdGF0ZS5jIFwKLQkJUHl0aG9uL3B5c3RydG9kLmMgXAotCQlQeXRob24vcHl0aG9ucnVuLmMgXAotCQlQeXRob24vc3RydWN0bWVtYmVyLmMgXAotCQlQeXRob24vc3ltdGFibGUuYyBcCi0JCVB5dGhvbi9zeXNtb2R1bGUuYyBcCi0JCVB5dGhvbi90cmFjZWJhY2suYyBcCi0JCVB5dGhvbi9nZXRvcHQuYyBcCi0JCVB5dGhvbi9keW5sb2FkX3NobGliLmMgXAotCQlQeXRob24vdGhyZWFkLmMpCi1TUkMuT0JKRUNUPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJT2JqZWN0cy9hYnN0cmFjdC5jIFwKLQkJT2JqZWN0cy9ib29sb2JqZWN0LmMgXAotCQlPYmplY3RzL2NlbGxvYmplY3QuYyBcCi0JCU9iamVjdHMvY2xhc3NvYmplY3QuYyBcCi0JCU9iamVjdHMvY29iamVjdC5jIFwKLQkJT2JqZWN0cy9jb2Rlb2JqZWN0LmMgXAotCQlPYmplY3RzL2NvbXBsZXhvYmplY3QuYyBcCi0JCU9iamVjdHMvZGVzY3JvYmplY3QuYyBcCi0JCU9iamVjdHMvZGljdG9iamVjdC5jIFwKLQkJT2JqZWN0cy9lbnVtb2JqZWN0LmMgXAotCQlPYmplY3RzL2ZpbGVvYmplY3QuYyBcCi0JCU9iamVjdHMvZmxvYXRvYmplY3QuYyBcCi0JCU9iamVjdHMvZnJhbWVvYmplY3QuYyBcCi0JCU9iamVjdHMvZnVuY29iamVjdC5jIFwKLQkJT2JqZWN0cy9nZW5vYmplY3QuYyBcCi0JCU9iamVjdHMvaXRlcm9iamVjdC5jIFwKLQkJT2JqZWN0cy9saXN0b2JqZWN0LmMgXAotCQlPYmplY3RzL2xvbmdvYmplY3QuYyBcCi0JCU9iamVjdHMvbWV0aG9kb2JqZWN0LmMgXAotCQlPYmplY3RzL21vZHVsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9vYmplY3QuYyBcCi0JCU9iamVjdHMvb2JtYWxsb2MuYyBcCi0JCU9iamVjdHMvcmFuZ2VvYmplY3QuYyBcCi0JCU9iamVjdHMvc2V0b2JqZWN0LmMgXAotCQlPYmplY3RzL3NsaWNlb2JqZWN0LmMgXAotCQlPYmplY3RzL3N0cmluZ29iamVjdC5jIFwKLQkJT2JqZWN0cy9zdHJ1Y3RzZXEuYyBcCi0JCU9iamVjdHMvdHVwbGVvYmplY3QuYyBcCi0JCU9iamVjdHMvdHlwZW9iamVjdC5jIFwKLQkJT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMgXAotCQlPYmplY3RzL3VuaWNvZGVjdHlwZS5jIFwKLQkJT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMpCi0KLVNSQy5MSUI9CSQoU1JDLk9TMkVNWCkgXAotCQkkKFNSQy5NQUlOKSBcCi0JCSQoU1JDLlBBUlNFUikgXAotCQkkKFNSQy5PQkpFQ1QpIFwKLQkJJChTUkMuUFlUSE9OKSBcCi0JCSQoU1JDLk1PRFVMRVMpCi1PQkouTElCPQkkKGFkZHByZWZpeCAkKE9VVCksJChub3RkaXIgJChTUkMuTElCOi5jPSRPKSkpCi0KLVNSQy5QR0VOPQkkKFNSQy5QQVJTRTEpIFwKLQkJJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCU9iamVjdHMvb2JtYWxsb2MuYykgXAotCQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJUHl0aG9uL215c25wcmludGYuYykgXAotCQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJUGFyc2VyL3Rva2VuaXplcl9wZ2VuLmMgXAotCQlQYXJzZXIvcGdlbm1haW4uYyBcCi0JCVBhcnNlci9wZ2VuLmMgXAotCQlQYXJzZXIvcHJpbnRncmFtbWFyLmMgXAotCQlQYXJzZXIvZ3JhbW1hci5jIFwKLQkJUGFyc2VyL2ZpcnN0c2V0cy5jKSBcCi0KLU9CSi5QR0VOPQkkKGFkZHByZWZpeCAkKE9VVCksJChub3RkaXIgJChTUkMuUEdFTjouYz0kTykpKQotCi1TUkMuRVhFPQkkKFRPUClNb2R1bGVzL3B5dGhvbi5jCi1TUkMuUE1FWEU9CXB5dGhvbnBtLmMKLQotIyBQeXRob24gbW9kdWxlcyB0byBiZSBkeW5hbWljYWxseSBsb2FkZWQgdGhhdDoKLSMgICAxKSBoYXZlIG9ubHkgc2luZ2xlIHNvdXJjZSBmaWxlIGFuZCByZXF1aXJlIG5vIGV4dHJhIGxpYnMKLSMgICAyKSB1c2UgdGhlIHN0YW5kYXJkIG1vZHVsZSBuYW1pbmcgY29udmVudGlvbgotIyAgICAgICh0aGUgJ21vZHVsZScgaW4gPz8/Pz9tb2R1bGUuYyBpcyBhc3N1bWVkKQotIyAtIHRoZXNlIGNhbiBiZSBidWlsdCB3aXRoIGltcGxpY2l0IHJ1bGVzCi1FQVNZRVhUTU9EVUxFUz0JZnBlY3RsIFwKLQkJZnBldGVzdCBcCi0JCXBhcnNlciBcCi0JCXB3ZCBcCi0JCXNlbGVjdCAKLQotIyBQeXRob24gbW9kdWxlcyB0byBiZSBkeW5hbWljYWxseSBsb2FkZWQgdGhhdCBuZWVkIGV4cGxpY2l0IGJ1aWxkIHJ1bGVzCi0jICAoZWl0aGVyIG11bHRpcGxlIHNvdXJjZSBmaWxlcyBhbmQvb3Igbm9uLXN0YW5kYXJkIG1vZHVsZSBuYW1pbmcpCi0jICAoTk9URTogdXNlIHNob3J0ZW5lZCBuYW1lcyBmb3IgbW9kdWxlcyBhZmZlY3RlZCBieSA4IGNoYXIgbmFtZSBsaW1pdCkKLUhBUkRFWFRNT0RVTEVTPQlfc29ja2V0IFwKLQkJX3Rlc3RjYXAgXAotCQl1bmljb2RlZAotCi0jIFB5dGhvbiBtb2R1bGVzIHRoYXQgYXJlIHVzZWQgYXMgbGlicmFyaWVzIGFuZCB0aGVyZWZvcmUgbXVzdCB1c2UKLSMgYSAuRExMIGV4dGVuc2lvbgotTElCRVhUTU9EVUxFUz0KLQotIyBQeXRob24gZXh0ZXJuYWwgKCQoTU9EVUxFLkVYVCkpIG1vZHVsZXMgLSBjYW4gYmUgRUFTWSBvciBIQVJECi1pZmVxICgkKEhBVkVfWkxJQikseWVzKQotICBIQVJERVhUTU9EVUxFUys9CXpsaWIKLWVuZGlmCi1pZmVxICgkKEhBVkVfVUZDKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JY3J5cHQKLWVuZGlmCi1pZmVxICgkKEhBVkVfVENMVEspLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQlfdGtpbnRlcgotICBDRkxBR1MrPQkJLURIQVNfRElSRU5UIC1JL1RjbFRrODAvaW5jbHVkZQotICBUS19MSUJTKz0JCS1ML1RjbFRrODAvbGliIC1sdGNsODAgLWx0azgwCi1lbmRpZgotaWZlcSAoJChIQVZFX0dSRUFETElORSkseWVzKQotICBIQVJERVhUTU9EVUxFUys9CXJlYWRsaW5lCi1lbmRpZgotaWZlcSAoJChIQVZFX05DVVJTRVMpLHllcykKLSAgTElCRVhUTU9EVUxFUys9CV9jdXJzZXMKLSAgSEFSREVYVE1PRFVMRVMrPQlfY3Vyc2VzXwotZW5kaWYKLWlmZXEgKCQoSEFWRV9HREJNKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JX2dkYm0gX2RibQotZW5kaWYKLWlmZXEgKCQoSEFWRV9CWjIpLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQliejIKLWVuZGlmCi1pZmVxICgkKEhBVkVfT1BFTlNTTCkseWVzKQotICBIQVJERVhUTU9EVUxFUys9CV9zc2wKLWVuZGlmCi0KLSMgRXhwYXQgaXMgbm93IGRpc3RyaWJ1dGVkIHdpdGggdGhlIFB5dGhvbiBzb3VyY2UKLUhBUkRFWFRNT0RVTEVTKz0JcHlleHBhdAotRVhQQVQuSU5DPQktSS4uLy4uL01vZHVsZXMvZXhwYXQKLUVYUEFULkRFRj0JLURIQVZFX0VYUEFUX0ggLURYTUxfTlM9MSAtRFhNTF9EVEQ9MSAtRFhNTF9CWVRFX09SREVSPTEyIFwKLQkJLURYTUxfQ09OVEVOVF9CWVRFUz0xMDI0IC1ESEFWRV9NRU1NT1ZFPTEgLURIQVZFX0JDT1BZPTEKLUVYUEFULlNSQz0JJChhZGRwcmVmaXggLi4vLi4vTW9kdWxlcy9leHBhdC8sIFwKLQkJeG1scGFyc2UuYyBcCi0JCXhtbHJvbGUuYyBcCi0JCXhtbHRvay5jKQotCi0jIGFsbCB0aGUgZXh0ZXJuYWwgbW9kdWxlcwotRVhURVJORExMUz0JJChhZGRzdWZmaXggJChNT0RVTEUuRVhUKSwkKHBhdHN1YnN0ICVtb2R1bGUsJSwkKEVBU1lFWFRNT0RVTEVTKSkpCi1FWFRFUk5ETExTKz0JJChhZGRzdWZmaXggJChNT0RVTEUuRVhUKSwkKHBhdHN1YnN0ICVtb2R1bGUsJSwkKEhBUkRFWFRNT0RVTEVTKSkpCi1FWFRFUk5ETExTKz0JJChhZGRzdWZmaXggJChNT0RMSUIuRVhUKSwkKHBhdHN1YnN0ICVtb2R1bGUsJSwkKExJQkVYVE1PRFVMRVMpKSkKLQotIyBUYXJnZXRzCi1hbGw6ICAkKE9VVCkgJChQWVRIT04uTElCKSAkKFBZVEhPTi5ERUYpICQoUFlUSE9OLklNUExJQikgJChQWVRIT04uRExMKSBcCi0JcHl0aG9uX25vbmNvcmUKLQotcHl0aG9uX25vbmNvcmU6Ci0JbWFrZSBQWV9ERUY9ICQoUFlUSE9OLkVYRSkgJChQWVRIT05QTS5FWEUpICQoUEdFTi5FWEUpICQoRVhURVJORExMUykKLQotY2xlYW46Ci0Jcm0gLWYgJChPVVQpKgotCXJtIC1mICQoUFlUSE9OLkxJQikgJChQWVRIT04uSU1QTElCKSAkKFBZVEhPTi5FWEVJTVApICQoUFlUSE9OLkRMTCkgXAotCSAgJChQWVRIT04uRVhFKSAkKFBZVEhPTlBNLkVYRSkgJChQR0VOLkVYRSkgKiQoTU9EVUxFLkVYVCkgKi5kbGwKLQlmaW5kIC4uLy4uL0xpYiAtbmFtZSAiKi5weVtjb10iIC1leGVjIHJtIHt9ICI7IgotCi1seDoKLQlAZWNobyBQYWNraW5nIGV2ZXJ5dGhpbmcgd2l0aCBseExpdGUuLi4KLQlseGxpdGUgJChQWVRIT04uRExMKSAkKFBZVEhPTi5FWEUpICQoUFlUSE9OUE0uRVhFKSAkKFBHRU4uRVhFKQotCi1kZXBlbmQ6ICQoT1VUQkFTRSkKLQltYWtlZGVwIC1mICQoT1VUQkFTRSlweXRob24uZGVwIC1vICQoQlVDSylPIC1wICQoQlVDSylcKE9VVFwpIFwKLQkgIC1yIC1jICQoSU5DTFVERSkgJChTUkMuTElCKSAkKFNSQy5QR0VOKQotCi0kKE9VVCk6ICQoT1VUQkFTRSkKLQotJChPVVQpICQoT1VUQkFTRSk6Ci0JbWtkaXIuZXhlICRACi0KLSQoUFlUSE9OLkxJQik6ICQoT0JKLkxJQikKLQlybS5leGUgLWYgJEAKLQkkKEFSKSAkKEFSRkxBR1MpICRAICReCi0KLSMgdGhlIFB5dGhvbiBjb3JlIERMTCAuZGVmIGZpbGUgbmVlZHMgdG8gaGF2ZSBhIG51bWJlciBvZiBub24tc3RhdGljCi0jIHN5bWJvbHMgdGhhdCBhcmVuJ3QgcGFydCBvZiB0aGUgUHl0aG9uIEMgQVBJIHJlbW92ZWQgKGNvbW1lbnRlZCBvdXQpCi0jIGZyb20gdGhlIERMTCBleHBvcnQgbGlzdC4KLSQoUFlUSE9OLkRFRik6ICQoUFlUSE9OLkxJQikKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTElCUkFSWSAkKFBZVEhPTl9MSUIpIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiRACi0JQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpUHl0aG9uICQoUFlUSE9OX1ZFUikgQ29yZSBETEwkKERRVU9URSkgPj4kQAotCUBlY2hvIFBST1RNT0RFID4+JEAKLQlAZWNobyBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JJChFWFBMSUIpIC11ICQoUFlUSE9OLkxJQikgfFwKLQkgc2VkIC1lICIvXiAgLmluaXQuKi9zL14gLzsgLyIgXAotCQktZSAiL14gIC5wY3JlXy4qL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmFycmF5X21ldGhvZHMvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZmFzdF9zYXZlX2xlYXZlL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsb3Blbi9zL14gLzsgLyIgXAotCQktZSAiL14gIC5kbHN5bS9zL14gLzsgLyIgXAotCQktZSAiL14gIC5kbGNsb3NlL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsZXJyb3Ivcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuX1B5X3JlXy4qL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLl9QeV9NRDUuKi9zL14gLzsgLyIgPj4kQAotCi0kKFBZVEhPTi5JTVBMSUIpOiAkKFBZVEhPTi5ERUYpCi0JJChJTVBMSUIpIC1vICRAICReCi0KLSQoUFlUSE9OLkVYRUlNUCk6ICQoUFlUSE9OLkRFRikKLQkkKElNUExJQikgLW8gJEAgJF4KLQotJChQWVRIT04uRExMKTogJChPVVQpZGxsZW50cnkkTyAkKFBZVEhPTi5MSUIpICQoUFlUSE9OLkRFRikKLQotIyBFeHBsaWNpdCBtYWtlIHRhcmdldHMgZm9yIHRoZSAuRVhFcyB0byBiZSBhYmxlIHRvIHVzZSBMRCB0byBsaW5rCi0jIChzbyB0aGF0IGZvcmsoKSB3aWxsIHdvcmsgaWYgcmVxdWlyZWQpCi0KLSQoUFlUSE9OLkVYRSk6ICQoU1JDLkVYRSkgJChQWVRIT04uRVhFSU1QKSAkKE9VVClweXRob24uZGVmCi0JJChDQykgLVptdCAkKExETU9ERS5FWEUpIC1aY3J0ZGxsIC1XYWxsICQoSU5DTFVERSkgLUwuIC1sZ2NjIC1vICRAICQoU1JDLkVYRSkgJChQWVRIT04uRVhFSU1QKSAkKExJQlMpICQoT1VUKXB5dGhvbi5kZWYKLQkkKEVYRU9QVCkgLWFxICQoUFlUSE9OLkVYRSkgLWgkKE5GSUxFUykKLQotJChQWVRIT05QTS5FWEUpOiAkKFNSQy5QTUVYRSkgJChQWVRIT04uRVhFSU1QKSAkKE9VVClweXRob25wbS5kZWYKLQkkKENDKSAtWm10ICQoTERNT0RFLkVYRSkgLVpjcnRkbGwgLVdhbGwgJChJTkNMVURFKSAtTC4gLWxnY2MgLW8gJEAgJChTUkMuUE1FWEUpICQoUFlUSE9OLkVYRUlNUCkgJChMSUJTKSAkKE9VVClweXRob25wbS5kZWYKLQkkKEVYRU9QVCkgLWFxICQoUFlUSE9OUE0uRVhFKSAtaCQoTkZJTEVTKQotCi0kKFBHRU4uRVhFKTogJChPQkouUEdFTikgJChPVVQpcGdlbi5kZWYKLQotIyBFeHBsaWNpdCBidWlsZGluZyBpbnN0cnVjdGlvbnMgZm9yIHRob3NlIGV4dGVybmFsIG1vZHVsZXMgdGhhdCByZXF1aXJlIAotIyBhd2t3YXJkIGhhbmRsaW5nIChkdWUgZS5nLiB0byBub24tc3RkIG5hbWluZywgb3IgbXVsdGlwbGUgc291cmNlIGZpbGVzKQotIyAtIHN0YW5kYXJkIG1vZHVsZXMKLQotX3NvY2tldCQoTU9EVUxFLkVYVCk6ICQoT1VUKXNvY2tldG1vZHVsZSRPICQoT1VUKV9zb2NrZXRfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykKLQotIyBfdGVzdGNhcGkgbmVlZHMgdG8gYmUgcmVuYW1lZCB0byBiZSB1c2VmdWwKLV90ZXN0Y2FwaSQoTU9EVUxFLkVYVCk6ICQoT1VUKV90ZXN0Y2FwaW1vZHVsZSRPICQoT1VUKV90ZXN0Y2FwaV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi1fdGVzdGNhcCQoTU9EVUxFLkVYVCk6IF90ZXN0Y2FwaSQoTU9EVUxFLkVYVCkKLQljcCAkXiAkQAotCi0jIHVuaWNvZGVkYXRhIG5lZWRzIHRvIGJlIHJlbmFtZWQgdG8gYmUgdXNlZnVsCi11bmljb2RlZGF0YSQoTU9EVUxFLkVYVCk6ICQoT1VUKXVuaWNvZGVkYXRhJE8gJChPVVQpdW5pY29kZWRhdGFfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgJChNT0RVTEVfTElCUykKLQotdW5pY29kZWQkKE1PRFVMRS5FWFQpOiB1bmljb2RlZGF0YSQoTU9EVUxFLkVYVCkKLQljcCAkXiAkQAotCi1jcnlwdCQoTU9EVUxFLkVYVCk6ICQoT1VUKWNyeXB0bW9kdWxlJE8gJChPVVQpY3J5cHRfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pIC1sdWZjICQoTElCUykKLQotIyBUaGUgX2N1cnNlc19wYW5lbCBtb2R1bGUgcmVxdWlyZXMgYSBjb3VwbGUgb2YgbmN1cnNlcyBsaWJyYXJ5IGVudHJ5Ci0jIHBvaW50cywgd2hpY2ggYXJlIGJlc3QgZXhwb3NlZCBhcyBleHBvcnRzIGZyb20gdGhlIF9jdXJzZXMgbW9kdWxlIERMTAotJChPVVQpX2N1cnNlc19tLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTElCUkFSWSAkKG5vdGRpciAkKikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSkkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKSQoTU9ETElCLkVYVCkpJChEUVVPVEUpID4+JEAKLQlAZWNobyBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JQGVjaG8gCWluaXRfY3Vyc2VzID4+JEAKLQlAZWNobyAJd25vdXRyZWZyZXNoID4+JEAKLQlAZWNobyAJX25jX3BhbmVsaG9vayA+PiRACi0JQGVjaG8gCWlzX2xpbmV0b3VjaGVkID4+JEAKLQlAZWNobyAJbXZ3aW4gPj4kQAotCUBlY2hvIAlzdGRzY3IgPj4kQAotCUBlY2hvIAl3dG91Y2hsbiA+PiRACi0KLSQoT1VUKV9jdXJzZXNfcGFuZWxfbS5kZWY6Ci0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIExJQlJBUlkgJChub3RkaXIgJCopIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiRACi0JQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpUHl0aG9uIHN0YW5kYXJkIG1vZHVsZSAkKG5vdGRpciAkKikkKERRVU9URSkgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBJTVBPUlRTID4+JEAKLQlAZWNobyAJX2N1cnNlcy53bm91dHJlZnJlc2ggPj4kQAotCUBlY2hvIAlfY3Vyc2VzLl9uY19wYW5lbGhvb2sgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLmlzX2xpbmV0b3VjaGVkID4+JEAKLQlAZWNobyAJX2N1cnNlcy5tdndpbiA+PiRACi0JQGVjaG8gCV9jdXJzZXMuc3Rkc2NyID4+JEAKLQlAZWNobyAJX2N1cnNlcy53dG91Y2hsbiA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JQGVjaG8gCWluaXRfY3Vyc2VzX3BhbmVsID4+JEAKLQotX2N1cnNlcyQoTU9ETElCLkVYVCk6ICQoT1VUKV9jdXJzZXNtb2R1bGUkTyAkKE9VVClfY3Vyc2VzX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sbmN1cnNlcwotCi0jIGN1cnNlc19wYW5lbCBuZWVkcyB0byBiZSByZW5hbWVkIHRvIGJlIHVzZWZ1bAotX2N1cnNlc19wYW5lbCQoTU9EVUxFLkVYVCk6ICQoT1VUKV9jdXJzZXNfcGFuZWwkTyAkKE9VVClfY3Vyc2VzX3BhbmVsX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1scGFuZWwKLQotX2N1cnNlc18kKE1PRFVMRS5FWFQpOiBfY3Vyc2VzX3BhbmVsJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLV9kYm0kKE1PRFVMRS5FWFQpOiAkKE9VVClfZGJtbW9kdWxlJE8gJChPVVQpZGJtX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sZ2RibQotCi1fZ2RibSQoTU9EVUxFLkVYVCk6ICQoT1VUKV9nZGJtbW9kdWxlJE8gJChPVVQpZ2RibV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbGdkYm0KLQotCi0jIEV4cGF0IGlzIG5vdyBkaXN0cmlidXRlZCB3aXRoIFB5dGhvbiwgc28gdXNlIHRoZSBpbmNsdWRlZCB2ZXJzaW9uCi0kKE9VVClweWV4cGF0JE86CS4uLy4uL01vZHVsZXMvcHlleHBhdC5jCi0JJChDQykgJChDRkxBR1MpICQoRVhQQVQuSU5DKSAtYyAtbyAkQCAkXgotJChPVVQpeG1scGFyc2UkTzoJLi4vLi4vTW9kdWxlcy9leHBhdC94bWxwYXJzZS5jCi0JJChDQykgJChDRkxBR1MpICQoRVhQQVQuSU5DKSAkKEVYUEFULkRFRikgLWMgLW8gJEAgJF4KLSQoT1VUKXhtbHJvbGUkTzoJLi4vLi4vTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpICQoRVhQQVQuREVGKSAtYyAtbyAkQCAkXgotJChPVVQpeG1sdG9rJE86CS4uLy4uL01vZHVsZXMvZXhwYXQveG1sdG9rLmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpICQoRVhQQVQuREVGKSAtYyAtbyAkQCAkXgotcHlleHBhdCQoTU9EVUxFLkVYVCk6ICQoT1VUKXB5ZXhwYXQkTyAkKE9VVCl4bWxwYXJzZSRPICQoT1VUKXhtbHJvbGUkTyBcCi0JCSQoT1VUKXhtbHRvayRPICQoT1VUKXB5ZXhwYXRfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykKLQotcmVhZGxpbmUkKE1PRFVMRS5FWFQpOiAkKE9VVClyZWFkbGluZSRPICQoT1VUKXJlYWRsaW5lX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1scmVhZGxpbmUgLWxuY3Vyc2VzCi0KLSNfdGtpbnRlciQoTU9EVUxFLkVYVCk6ICQoT1VUKV90a2ludGVyJE8gJChPVVQpdGNsTm90aWZ5JE8gJChPVVQpdGthcHBpbml0JE8KLV90a2ludGVyJChNT0RVTEUuRVhUKTogJChPVVQpX3RraW50ZXIkTyAkKE9VVCl0Y2xOb3RpZnkkTyBcCi0JCSQoT1VUKV90a2ludGVyX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpICQoVEtfTElCUykKLQotemxpYiQoTU9EVUxFLkVYVCk6ICQoT1VUKXpsaWJtb2R1bGUkTyAkKE9VVCl6bGliX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1segotCi1iejIkKE1PRFVMRS5FWFQpOiAkKE9VVCliejJtb2R1bGUkTyAkKE9VVCliejJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxiejIKLQotX3NzbCQoTU9EVUxFLkVYVCk6ICQoT1VUKV9zc2wkTyAkKE9VVClfc3NsX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sc3NsIC1sY3J5cHRvCi0KLSMgdGhlIHRlc3QgdGFyZ2V0Ci10ZXN0OgotCS1maW5kIC4uLy4uL0xpYiAtbmFtZSAiKi5weVtjb10iIC1leGVjIHJtIHt9ICI7IgotCS0uL3B5dGhvbiAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtbCAtdSAibmV0d29yayIKLQkuL3B5dGhvbiAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtbCAtdSAibmV0d29yayIKLQotLWluY2x1ZGUgJChPVVRCQVNFKXB5dGhvbi5kZXAKZGlmZiAtLWdpdCBhL1BDL29zMmVteC9SRUFETUUub3MyZW14IGIvUEMvb3MyZW14L1JFQURNRS5vczJlbXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxY2Y2ZGYuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L1JFQURNRS5vczJlbXgKKysrIC9kZXYvbnVsbApAQCAtMSw2NjMgKzAsMCBAQAotVGhpcyBpcyBhIHBvcnQgb2YgUHl0aG9uIDIuNiB0byBPUy8yIHVzaW5nIHRoZSBFTVggZGV2ZWxvcG1lbnQgdG9vbHMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotV2hhdCdzIG5ldyBzaW5jZSB0aGUgcHJldmlvdXMgcmVsZWFzZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Bbm90aGVyIGRheSwgYW5vdGhlciB2ZXJzaW9uLi4uCi0KLQotTGljZW5zZXMgYW5kIGluZm8gYWJvdXQgUHl0aG9uIGFuZCBFTVgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBsZWFzZSByZWFkIHRoZSBmaWxlIFJFQURNRS5QeXRob24tMi42IGluY2x1ZGVkIGluIHRoaXMgcGFja2FnZSBmb3IgCi1pbmZvcm1hdGlvbiBhYm91dCBQeXRob24gMi42LiAgVGhpcyBmaWxlIGlzIHRoZSBSRUFETUUgZmlsZSBmcm9tIHRoZSAKLVB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbiBhdmFpbGFibGUgdmlhIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8gCi1hbmQgaXRzIG1pcnJvcnMuICBUaGUgZmlsZSBMSUNFTkNFLlB5dGhvbi0yLjYgaXMgdGhlIHRleHQgb2YgdGhlIExpY2VuY2UgCi1mcm9tIHRoZSBQeXRob24gMi42IHNvdXJjZSBkaXN0cmlidXRpb24uCi0KLU5vdGUgdGhhdCB0aGUgRU1YIHBhY2thZ2UgdGhhdCB0aGlzIHBhY2thZ2UgZGVwZW5kcyBvbiBpcyByZWxlYXNlZCB1bmRlciAKLXRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZS4gIFBsZWFzZSByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiAKLWFjY29tcGFueWluZyB0aGUgRU1YIFJ1bnRpbWUgbGlicmFyaWVzIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSAKLWltcGxpY2F0aW9ucyBvZiB0aGlzLiAgQSBjb3B5IG9mIHZlcnNpb24gMiBvZiB0aGUgR1BMIGlzIGluY2x1ZGVkIGFzIHRoZSAKLWZpbGUgQ09QWUlORy5ncGwyLgotCi1SZWFkbGluZSBhbmQgR0RCTSBhcmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UuICBJIHRoaW5rIAotRWJlcmhhcmQgTWF0dGVzJyBwb3J0aW5nIGNoYW5nZXMgdG8gQlNEIERCIHYxLjg1IGFyZSBhbHNvIEdQTCdlZCAoQlNEIERCIAotaXRzZWxmIGlzIEJTRCBMaWNlbmNlZCkuICBuY3Vyc2VzIGFuZCBleHBhdCBhcHBlYXIgdG8gYmUgY292ZXJlZCBieSBNSVQgCi1zdHlsZSBsaWNlbmNlcyAtIHBsZWFzZSByZWZlciB0byB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbnMgZm9yIG1vcmUgZGV0YWlsLiAgCi16bGliIGlzIGRpc3RyaWJ1dGFibGUgdW5kZXIgYSB2ZXJ5IGZyZWUgbGljZW5zZS4gIEdOVSBVRkMgaXMgdW5kZXIgdGhlIAotR05VIExHUEwgKHNlZSBmaWxlIENPUFlJTkcubGliKS4KLQotTXkgcGF0Y2hlcyB0byB0aGUgUHl0aG9uLTIueCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgYW5kIGFueSBvdGhlciBwYWNrYWdlcyAKLXVzZWQgaW4gdGhpcyBwb3J0LCBhcmUgcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLgotCi1UaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KLUluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvciBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBmcm9tIHRoZSAKLXVzZSBvZiB0aGUgc29mdHdhcmUuCi0KLUkgZG8gaG9wZSBob3dldmVyIHRoYXQgaXQgcHJvdmVzIHVzZWZ1bCB0byBzb21lb25lLgotCi0KLU90aGVyIHBvcnRzCi0tLS0tLS0tLS0tLQotCi1UaGVyZSBoYXZlIGJlZW4gcG9ydHMgb2YgcHJldmlvdXMgdmVyc2lvbnMgb2YgUHl0aG9uIHRvIE9TLzIuCi0KLVRoZSBiZXN0IGtub3duIHdvdWxkIGJlIHRoYXQgYnkgSmVmZiBSdXNoLCBtb3N0IHJlY2VudGx5IG9mIHZlcnNpb24gCi0xLjUuMi4gIEplZmYgdXNlZCBJQk0ncyBWaXN1YWwgQWdlIEMrKyAodjMpIGZvciBoaXMgcG9ydHMsIGFuZCBoaXMgCi1wYXRjaGVzIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uLgotCi1BbmR5IFphYm9sb3RueSBpbXBsZW1lbnRlZCBhIHBvcnQgb2YgUHl0aG9uIHYxLjUuMiB1c2luZyB0aGUgRU1YIAotZGV2ZWxvcG1lbnQgdG9vbHMuICBIaXMgcGF0Y2hlcyBhZ2FpbnN0IHRoZSBQeXRob24gdjEuNS4yIHNvdXJjZSAKLWRpc3RyaWJ1dGlvbiBoYXZlIGJlY29tZSB0aGUgY29yZSBvZiB0aGlzIHBvcnQsIGFuZCB3aXRob3V0IGhpcyBlZmZvcnRzIAotdGhpcyBwb3J0IHdvdWxkbid0IGV4aXN0LiAgQW5keSdzIHBvcnQgYWxzbyBhcHBlYXJzIHRvIGhhdmUgYmVlbiAKLWNvbXBpbGVkIHdpdGggaGlzIHBvcnQgb2YgZ2NjIDIuOTUuMiB0byBFTVgsIHdoaWNoIEkgaGF2ZSBidXQgaGF2ZSAKLWNob3NlbiBub3QgdG8gdXNlIGZvciB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHBvcnQgKHNlZSBpdGVtIDE2IAotb2YgdGhlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgc2VjdGlvbiBiZWxvdykuCi0KLUl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgdGhlc2UgZWFybGllciBwb3J0cyBzdGlsbCB1c2FibGUgYWZ0ZXIgaW5zdGFsbGluZyAKLXRoaXMgcG9ydCAtIHNlZSB0aGUgUkVBRE1FLm9zMmVteC5tdWx0aXBsZV92ZXJzaW9ucyBmaWxlLCBjb250cmlidXRlZCBieQotRHIgRGF2aWQgTWVydHosIGZvciBhIHN1Z2dlc3RlZCBhcHByb2FjaCB0byBhY2hpZXZpbmcgdGhpcy4KLQotCi1Tb2Z0d2FyZSByZXF1aXJlbWVudHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIHBhY2thZ2UgcmVxdWlyZXMgdGhlIEVNWCBSdW50aW1lIHBhY2thZ2UsIGF2YWlsYWJsZSBmcm9tIHRoZSAKLUhvYmJlcyAoaHR0cDovL2hvYmJlcy5ubXN1LmVkdS8pIGFuZCBMRU8gKGh0dHA6Ly9hcmNoaXYubGVvLm9yZy8pIAotYXJjaGl2ZXMgb2YgT1MvMiBzb2Z0d2FyZS4gIEkgaGF2ZSB1c2VkIEVNWCB2ZXJzaW9uIDAuOWQgZml4MDQgaW4gCi1kZXZlbG9waW5nIHRoaXMgcG9ydC4KLQotTXkgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzIHJ1bm5pbmcgT1MvMiB2NCB3aXRoIGZpeHBhY2sgMTIuCi0KLTNyZCBwYXJ0eSBzb2Z0d2FyZSB3aGljaCBoYXMgYmVlbiBsaW5rZWQgaW50byBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlczoKLS0gbmN1cnNlcyAgICAgIChzZWUgaHR0cDovL2RpY2tleS5oaXMuY29tLyBmb3IgbW9yZSBpbmZvLCB2NS4yKQotLSBHTlUgUmVhZGxpbmUgKEthaSBVd2UgUm9tbWVsJ3MgcG9ydCBhdmFpbGFibGUgZnJvbSBIb2JiZXMgb3IgTEVPLCB2Mi4xKQotLSBHTlUgR0RCTSAgICAgKEthaSBVd2UgUm9tbWVsJ3MgcG9ydCBhdmFpbGFibGUgZnJvbSBIb2JiZXMgb3IgTEVPLCB2MS43LjMpCi0tIHpsaWIgICAgICAgICAoZGVyaXZlZCBmcm9tIEh1bmctQ2hpIENodSdzIHBvcnQgb2YgdjEuMS4zLCB2MS4xLjQpCi0tIGV4cGF0ICAgICAgICAoZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24sIHYxLjk1LjYpCi0tIEdOVSBVRkMgICAgICAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIExFTywgdjIuMC40KQotCi0KLUFib3V0IHRoaXMgcG9ydAotLS0tLS0tLS0tLS0tLS0tCi0KLUkgaGF2ZSBhdHRlbXB0ZWQgdG8gbWFrZSB0aGlzIHBvcnQgYXMgY29tcGxldGUgYW5kIGZ1bmN0aW9uYWwgYXMgSSBjYW4sIAotbm90d2l0aHN0YW5kaW5nIHRoZSBpc3N1ZXMgaW4gdGhlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgc2VjdGlvbiBiZWxvdy4KLQotQ29yZSBjb21wb25lbnRzOgotCi1QeXRob24uZXhlIGlzIGxpbmtlZCBhcyBhbiBhLm91dCBleGVjdXRhYmxlLCBpZSB1c2luZyBFTVggbWV0aG9kIEUxIAotdG8gY29tcGlsZSAmIGxpbmsgdGhlIGV4ZWN1dGFibGUuICBUaGlzIGlzIHNvIHRoYXQgZm9yaygpIHdvcmtzIChzZWUgCi0iWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMSkuCi0KLVB5dGhvbjI2LmRsbCBpcyBjcmVhdGVkIGFzIGEgbm9ybWFsIE9NRiBETEwsIHdpdGggYW4gT01GIGltcG9ydCAKLWxpYnJhcnkgYW5kIG1vZHVsZSBkZWZpbml0aW9uIGZpbGUuICBUaGVyZSBpcyBhbHNvIGFuIGEub3V0ICguYSkgaW1wb3J0IAotbGlicmFyeSB0byBzdXBwb3J0IGxpbmtpbmcgdGhlIERMTCB0byBhLm91dCBleGVjdXRhYmxlcy4gIFRoZSBETEwgCi1yZXF1aXJlcyB0aGUgRU1YIHJ1bnRpbWUgRExMcy4KLQotVGhpcyBwb3J0IGhhcyBiZWVuIGJ1aWx0IHdpdGggY29tcGxldGUgc3VwcG9ydCBmb3IgbXVsdGl0aHJlYWRpbmcuCi0KLU1vZHVsZXM6Ci0KLVdpdGggdGhlIGV4Y2VwdGlvbiBvZiBtb2R1bGVzIHRoYXQgaGF2ZSBhIHNpZ25pZmljYW50IGNvZGUgc2l6ZSwgb3IgYXJlIAotbm90IHJlY29tbWVuZGVkIG9yIGRlc2lyZWQgZm9yIG5vcm1hbCB1c2UsIHRoZSBzdGFuZGFyZCBtb2R1bGVzIGFyZSBub3cgCi1idWlsdCBpbnRvIHRoZSBjb3JlIERMTCByYXRoZXIgdGhhbiBjb25maWd1cmVkIGFzIGR5bmFtaWNhbGx5IGxvYWRhYmxlIAotbW9kdWxlcy4gIFRoaXMgaXMgZm9yIGJvdGggcmVhc29ucyBvZiBwZXJmb3JtYW5jZSAoc3RhcnR1cCB0aW1lKSBhbmQgCi1tZW1vcnkgdXNlIChsb3RzIG9mIHNtYWxsIERMTHMgZnJhZ21lbnQgdGhlIGFkZHJlc3Mgc3BhY2UpLgotCi1JIGhhdmVuJ3QgeWV0IGNoYW5nZWQgdGhlIGJ1aWxkaW5nIG9mIFB5dGhvbidzIGR5bmFtaWNhbGx5IGxvYWRhYmxlIAotbW9kdWxlcyBvdmVyIHRvIHVzaW5nIHRoZSBEaXN0VXRpbHMuCi0KLVNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMyBmb3Igbm90ZXMgYWJvdXQgdGhlIGZjbnRsIG1vZHVsZSwgYW5kIAotIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDEwIGZvciBub3RlcyBhYm91dCB0aGUgcHdkIGFuZCBncnAgbW9kdWxlcy4KLQotVGhpcyBwb3J0IHN1cHBvcnRzIGNhc2Ugc2Vuc2l0aXZlIG1vZHVsZSBpbXBvcnQgc2VtYW50aWNzLCBtYXRjaGluZyAKLXRoZSBXaW5kb3dzIHJlbGVhc2UuICBUaGlzIGNhbiBiZSBkZWFjdGl2YXRlZCBieSBzZXR0aW5nIHRoZSBQWVRIT05DQVNFT0sgCi1lbnZpcm9ubWVudCB2YXJpYWJsZSAodGhlIHZhbHVlIGRvZXNuJ3QgbWF0dGVyKSAtIHNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIAotaXRlbSAxMi4KLQotT3B0aW9uYWwgbW9kdWxlczoKLQotV2hlcmUgSSd2ZSBiZWVuIGFibGUgdG8gbG9jYXRlIHRoZSByZXF1aXJlZCAzcmQgcGFydHkgcGFja2FnZXMgYWxyZWFkeSAKLXBvcnRlZCB0byBPUy8yLCBJJ3ZlIGJ1aWx0IGFuZCBpbmNsdWRlZCB0aGVtLgotCi1UaGVzZSBpbmNsdWRlIG5jdXJzZXMgKF9jdXJzZXMsIF9jdXJzZXNfcGFuZWwpLAotR05VIEdEQk0gKGdkYm0sIGRibSksIHpsaWIgKHpsaWIpLCBHTlUgUmVhZGxpbmUgKHJlYWRsaW5lKSwgYW5kIEdOVSBVRkMgCi0oY3J5cHQpLgotCi1FeHBhdCBpcyBub3cgaW5jbHVkZWQgaW4gdGhlIFB5dGhvbiByZWxlYXNlIHNvdXJjZWJhbGwsIGFuZCB0aGUgcHlleHBhdCAKLW1vZHVsZSBpcyBhbHdheXMgYnVpbHQuCi0KLUkgaGF2ZSBidWlsdCB0aGVzZSBtb2R1bGVzIHN0YXRpY2FsbHkgbGlua2VkIGFnYWluc3QgdGhlIDNyZCBwYXJ0eSAKLWxpYnJhcmllcy4gIFVuZm9ydHVuYXRlbHkgbXkgYXR0ZW1wdHMgdG8gdXNlIHRoZSBkbGwgdmVyc2lvbiBvZiBHTlUgCi1yZWFkbGluZSBoYXZlIGJlZW4gYSBkaXNtYWwgZmFpbHVyZSwgaW4gdGhhdCB3aGVuIHRoZSBkeW5hbWljYWxseSAKLWxpbmtlZCByZWFkbGluZSBtb2R1bGUgaXMgYWN0aXZlIG90aGVyIG1vZHVsZXMgaW1tZWRpYXRlbHkgcHJvdm9rZSBhIAotY29yZSBkdW1wIHdoZW4gaW1wb3J0ZWQuCi0KLU9ubHkgdGhlIEJTRCBEQiBwYWNrYWdlIChwYXJ0IG9mIHRoZSBCU0QgcGFja2FnZSBkaXN0cmlidXRlZCB3aXRoIEVNWCkgCi1uZWVkcyBzb3VyY2UgbW9kaWZpY2F0aW9ucyB0byBiZSB1c2VkIGZvciB0aGlzIHBvcnQsIHBlcnRhaW5pbmcgdG8gdXNlIAotb2YgZXJybm8gd2l0aCBtdWx0aXRocmVhZGluZy4KLQotVGhlIG90aGVyIHBhY2thZ2VzLCBleGNlcHQgZm9yIG5jdXJzZXMgYW5kIHpsaWIsIG5lZWRlZCBNYWtlZmlsZSBjaGFuZ2VzIAotZm9yIG11bHRpdGhyZWFkaW5nIHN1cHBvcnQgYnV0IG5vIHNvdXJjZSBjaGFuZ2VzLgotCi1UaGUgX2N1cnNlc19wYW5lbCBtb2R1bGUgaXMgYSBwb3RlbnRpYWwgcHJvYmxlbSAtIHNlZSAiWU9VIEhBVkUgQkVFTiAKLVdBUk5FRCIgaXRlbSAxMy4KLQotVXBzdHJlYW0gc291cmNlIHBhdGNoZXM6Ci0KLU5vIHVwZGF0ZXMgdG8gdGhlIFB5dGhvbiAyLjYgcmVsZWFzZSBoYXZlIGJlY29tZSBhdmFpbGFibGUuCi0KLUxpYnJhcnkgYW5kIG90aGVyIGRpc3RyaWJ1dGVkIFB5dGhvbiBjb2RlOgotCi1UaGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkgbGl2ZXMgaW4gdGhlIExpYiBkaXJlY3RvcnkuICBBbGwgdGhlIHN0YW5kYXJkIAotbGlicmFyeSBjb2RlIGluY2x1ZGVkIHdpdGggdGhlIFB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbiBpcyBpbmNsdWRlZCAKLWluIHRoZSBiaW5hcnkgYXJjaGl2ZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBkb3MtOHgzIGFuZCB0a2ludGVyIAotc3ViZGlyZWN0b3JpZXMgd2hpY2ggaGF2ZSBiZWVuIG9taXR0ZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBiaW5hcnkgCi1hcmNoaXZlIC0gdGhlIGRvcy04eDMgY29tcG9uZW50cyBhcmUgdW5uZWNlc3NhcnkgZHVwbGljYXRlcyBhbmQgVGtpbnRlciAKLWlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwb3J0ICh5ZXQpLiAgQWxsIHRoZSBwbGF0LSogc3ViZGlyZWN0b3JpZXMgaW4gdGhlIAotc291cmNlIGRpc3RyaWJ1dGlvbiBoYXZlIGFsc28gYmVlbiBvbWl0dGVkLCBleGNlcHQgZm9yIHRoZSBwbGF0LW9zMmVteCAKLXN1YmRpcmVjdG9yeS4KLQotVGhlIFRvb2xzIGFuZCBEZW1vIGRpcmVjdG9yaWVzIGNvbnRhaW4gYSBjb2xsZWN0aW9uIG9mIFB5dGhvbiBzY3JpcHRzLiAgCi1UbyByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeSBhcmNoaXZlLCB0aGUgRGVtby9zZ2ksIERlbW8vVGl4LCAKLURlbW8vdGtpbnRlciwgVG9vbHMvYXVkaW9weSBhbmQgVG9vbHMvSURMRSBzdWJkaXJlY3RvcmllcyBoYXZlIGJlZW4gCi1vbWl0dGVkIGFzIG5vdCBiZWluZyBzdXBwb3J0ZWQgYnkgdGhpcyBwb3J0LiAgVGhlIE1pc2MgZGlyZWN0b3J5IGhhcyAKLWFsc28gYmVlbiBvbWl0dGVkLgotCi1BbGwgc3ViZGlyZWN0b3JpZXMgb21pdHRlZCBmcm9tIHRoZSBiaW5hcnkgYXJjaGl2ZSBjYW4gYmUgcmVjb25zdGl0dXRlZCAKLWZyb20gdGhlIFB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbiwgaWYgZGVzaXJlZC4KLQotU3VwcG9ydCBmb3IgYnVpbGRpbmcgUHl0aG9uIGV4dGVuc2lvbnM6Ci0KLVRoZSBDb25maWcgc3ViZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBmaWxlcyBkZXNjcmliaW5nIHRoZSBjb25maWd1cmF0aW9uIAotb2YgdGhlIGludGVycHJldGVyIGFuZCB0aGUgTWFrZWZpbGUsIGltcG9ydCBsaWJyYXJpZXMgZm9yIHRoZSBQeXRob24gRExMLCAKLWFuZCB0aGUgbW9kdWxlIGRlZmluaXRpb24gZmlsZSB1c2VkIHRvIGNyZWF0ZSB0aGUgUHl0aG9uIERMTC4gIFRoZSAKLUluY2x1ZGUgc3ViZGlyZWN0b3J5IGNvbnRhaW5zIGFsbCB0aGUgc3RhbmRhcmQgUHl0aG9uIGhlYWRlciBmaWxlcyAKLW5lZWRlZCBmb3IgYnVpbGRpbmcgZXh0ZW5zaW9ucy4KLQotQXMgSSBkb24ndCBoYXZlIHRoZSBWaXN1YWwgQWdlIEMrKyBjb21waWxlciwgSSd2ZSBtYWRlIG5vIGF0dGVtcHQgdG8gCi1oYXZlIHRoaXMgcG9ydCBzdXBwb3J0IGV4dGVuc2lvbnMgYnVpbHQgd2l0aCB0aGF0IGNvbXBpbGVyLgotCi0KLVBhY2thZ2luZwotLS0tLS0tLS0tCi0KLVRoaXMgcG9ydCBpcyBwYWNrYWdlZCBhcyBmb2xsb3dzOgotLSBweXRob24tMi42LW9zMmVteC1iaW4tMDM/Pz8/LnppcCAgKGJpbmFyaWVzLCBsaWJyYXJ5IG1vZHVsZXMpCi0tIHB5dGhvbi0yLjYtb3MyZW14LXNyYy0wMz8/Pz8gICAgICAocGF0Y2hlcyttYWtlZmlsZXMgZm9yIG5vbi1QeXRob24gY29kZSkKLQotQXMgYWxsIHRoZSBQeXRob24gc3BlY2lmaWMgcGF0Y2hlcyBmb3IgdGhlIHBvcnQgYXJlIG5vdyBwYXJ0IG9mIHRoZSAKLVB5dGhvbiByZWxlYXNlIHRhcmJhbGwsIG9ubHkgdGhlIHBhdGNoZXMgYW5kIG1ha2VmaWxlcyBpbnZvbHZlZCBpbiAKLWJ1aWxkaW5nIGV4dGVybmFsIGxpYnJhcmllcyBmb3Igb3B0aW9uYWwgZXh0ZW5zaW9ucyBhcmUgaW5jbHVkZWQgaW4gCi10aGUgc291cmNlIGFyY2hpdmUuCi0KLURvY3VtZW50YXRpb24gZm9yIHRoZSBQeXRob24gbGFuZ3VhZ2UsIGFzIHdlbGwgYXMgdGhlIFB5dGhvbiAyLjYgCi1zb3VyY2UgZGlzdGlidXRpb24sIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSBQeXRob24gd2Vic2l0ZSAKLShodHRwOi8vd3d3LnB5dGhvbi5vcmcvKSBvciB0aGUgUHl0aG9uIHByb2plY3QgcGFnZXMgYXQgU291cmNlZm9yZ2UgCi0oaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9weXRob24vKS4KLQotCi1JbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tLQotCi1PYnRhaW4gYW5kIGluc3RhbGwsIGFzIHBlciB0aGUgaW5jbHVkZWQgaW5zdHJ1Y3Rpb25zLCB0aGUgRU1YIHJ1bnRpbWUgCi1wYWNrYWdlLgotCi1VbnBhY2sgdGhpcyBhcmNoaXZlLCBwcmVzZXJ2aW5nIHRoZSBzdWJkaXJlY3RvcmllcywgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IAotb2YgdGhlIGRyaXZlIHdoZXJlIHlvdSB3YW50IFB5dGhvbiB0byBsaXZlLgotCi1BZGQgdGhlIFB5dGhvbiBkaXJlY3RvcnkgKGVnIEM6XFB5dGhvbjI2KSB0byB0aGUgUEFUSCBhbmQgTElCUEFUSCAKLXZhcmlhYmxlcyBpbiBDT05GSUcuU1lTLgotCi1Zb3Ugc2hvdWxkIHRoZW4gc2V0IHRoZSBQWVRIT05IT01FIGFuZCBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlcyAKLWluIENPTkZJRy5TWVMuCi0KLVBZVEhPTkhPTUUgc2hvdWxkIGJlIHNldCB0byBQeXRob24ncyB0b3AgbGV2ZWwgZGlyZWN0b3J5LiAgUFlUSE9OUEFUSCAKLXNob3VsZCBiZSBzZXQgdG8gdGhlIHNlbWljb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBwcmluY2lwYWwgUHl0aG9uIGxpYnJhcnkgCi1kaXJlY3Rvcmllcy4KLUkgdXNlOgotICBTRVQgUFlUSE9OSE9NRT1GOi9QeXRob24yNgotICBTRVQgUFlUSE9OUEFUSD1GOi9QeXRob24yNi9MaWI7RjovUHl0aG9uMjYvTGliL3BsYXQtb3MyZW14OwotICAgICAgICAgICAgICAgICBGOi9QeXRob24yNi9MaWIvbGliLWR5bmxvYWQ7RjovUHl0aG9uMjYvTGliL3NpdGUtcGFja2FnZXMKLQotTk9URSE6ICB0aGUgUFlUSE9OUEFUSCBzZXR0aW5nIGFib3ZlIGlzIGxpbmV3cmFwcGVkIGZvciB0aGlzIGRvY3VtZW50IC0gaXQgCi1zaG91bGQgYWxsIGJlIG9uIG9uZSBsaW5lIGluIENPTkZJRy5TWVMhCi0KLUlmIHlvdSB3aXNoIHRvIHVzZSB0aGUgY3Vyc2VzIG1vZHVsZSwgeW91IHNob3VsZCBzZXQgdGhlIFRFUk0gYW5kIFRFUk1JTkZPIAotZW52aXJvbm1lbnQgdmFyaWFibGVzIGFwcHJvcHJpYXRlbHkuCi0KLUlmIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgbmN1cnNlcyBpbnN0YWxsZWQsIEkgaGF2ZSBpbmNsdWRlZCBhIGNvcHkgb2YgdGhlIAotRU1YIHN1YnNldCBvZiB0aGUgVGVybWluZm8gZGF0YWJhc2UgaW5jbHVkZWQgd2l0aCB0aGUgbmN1cnNlcy01LjIgc291cmNlIAotZGlzdHJpYnV0aW9uLiAgVGhpcyBjYW4gYmUgdXNlZCBieSBzZXR0aW5nIHRoZSBURVJNSU5GTyBlbnZpcm9ubWVudCB2YXJpYWJsZSAKLXRvIHRoZSBwYXRoIG9mIHRoZSBUZXJtaW5mbyBzdWJkaXJlY3RvcnkgYmVsb3cgdGhlIFB5dGhvbiBob21lIGRpcmVjdG9yeS4KLU9uIG15IHN5c3RlbSB0aGlzIGxvb2tzIGxpa2U6Ci0gIFNFVCBURVJNSU5GTz1GOi9QeXRob24yNi9UZXJtaW5mbwotCi1Gb3IgdGhlIFRFUk0gZW52aXJvbm1lbnQgdmFyaWFibGUsIEkgd291bGQgdHJ5IG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICBTRVQgVEVSTT1hbnNpCi0gIFNFVCBURVJNPW9zMgotICBTRVQgVEVSTT13aW5kb3cKLQotWW91IHdpbGwgaGF2ZSB0byByZWJvb3QgeW91ciBzeXN0ZW0gZm9yIHRoZXNlIGNoYW5nZXMgdG8gQ09ORklHLlNZUyB0byB0YWtlIAotZWZmZWN0LgotCi1JZiB5b3Ugd2lzaCB0byBjb21waWxlIGFsbCB0aGUgaW5jbHVkZWQgUHl0aG9uIGxpYnJhcnkgbW9kdWxlcyB0byBieXRlY29kZSwgCi15b3UgY2FuIGNoYW5nZSBpbnRvIHRoZSBQeXRob24gaG9tZSBkaXJlY3RvcnkgYW5kIHJ1biB0aGUgQ09NUElMRUFMTC5DTUQgCi1iYXRjaCBmaWxlLgotCi1Zb3UgY2FuIGV4ZWN1dGUgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgaW5jbHVkZWQgd2l0aCB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgCi1kaXN0cmlidXRpb24gYnkgY2hhbmdpbmcgdG8gdGhlIFB5dGhvbiAyLjYgaG9tZSBkaXJlY3RvcnkgYW5kIGV4ZWN1dGluZyB0aGUgCi1SRUdSVEVTVC5DTUQgYmF0Y2ggZmlsZS4gIFRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIGtub3duIHRvIGZhaWwgYXQgdGhpcyAKLXRpbWU6Ci0tIHRlc3RfbWhsaWIgKEkgZG9uJ3Qga25vdyBvZiBhbnkgcG9ydCBvZiBNSCB0byBPUy8yKTsKLS0gdGVzdF9zdHJwdGltZSAoc2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAyMik7Ci0tIHRlc3RfdGltZSAoc2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAyMik7Ci0tIHRlc3RfcG9zaXhwYXRoIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIzKS4KLQotTm90ZSB0aGF0IHNvbWUgb2YgdGhlIG5ldHdvcmsgcmVsYXRlZCB0ZXN0cyBleHBlY3QgdGhlIGxvb3BiYWNrIGludGVyZmFjZQotKGludGVyZmFjZSAibG8iLCB3aXRoIElQIGFkZHJlc3MgMTI3LjAuMC4xKSB0byBiZSBlbmFibGVkLCB3aGljaCBmcm9tIG15Ci1leHBlcmllbmNlIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLiAgQWRkaXRpb25hbGx5LCB0ZXN0X3BvcGVuMgotZXhwZWN0cyB0aGUgImNhdCIgdXRpbGl0eSAoc3VjaCBhcyBmb3VuZCBpbiBwb3J0cyBvZiB0aGUgR05VIHRvb2xzKSB0bwotYmUgaW5zdGFsbGVkLgotCi0KLUJ1aWxkaW5nIGZyb20gc291cmNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaXRoIHRoZSBFTVggcG9ydCBub3cgY2hlY2tlZCBpbnRvIFB5dGhvbidzIENWUyByZXBvc2l0b3J5LCB0aGUgYnVpbGQgCi1pbmZyYXN0cnVjdHVyZSBpcyBwYXJ0IG9mIHRoZSBQeXRob24gcmVsZWFzZSBzb3VyY2ViYWxsLgotCi1QcmVyZXF1aXNpdGVzCi0KLUZpcnN0IGFuZCBmb3JlbW9zdCwgeW91IG5lZWQgYW4gb3BlcmF0aW9uYWwgRU1YIGRldmVsb3BtZW50IGluc3RhbGxhdGlvbiAtIAotRU1YIHYwLjlkIHdpdGggZml4MDQgKHRoZSBsYXRlc3QgYXQgdGltZSBvZiB3cml0aW5nKSAmIHRoZSBnY2MgMi44LjEgCi1jb21waWxlciByZWxlYXNlZCBieSBFYmVyaGFyZCBNYXR0ZXMgaXMgdGhlIHJlY29tbWVuZGVkIHNldHVwLgotCi1JZiB5b3UgaGF2ZSBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIGdjYyBpbnN0YWxsZWQsIHNlZSAiWU9VIEhBVkUgQkVFTiAKLVdBUk5FRCIgaXRlbSAxNi4KLQotT3RoZXIgaXRlbXMgb2Ygc29mdHdhcmUgcmVxdWlyZWQ6LQotCi0tIEdOVSBtYWtlIChJJ20gdXNpbmcgdjMuNzYuMSkKLS0gcm0sIGNwLCBta2RpciBmcm9tIHRoZSBHTlUgZmlsZSB1dGlsaXRpZXMgcGFja2FnZQotLSBHTlUgZmluZAotLSBHTlUgc2VkCi0KLVByb2NlZHVyZQotCi0wLiBhbGwgY2hhbmdlcyBtZW50aW9uZWQgYXBwbHkgdG8gZmlsZXMgaW4gdGhlIFBDL29zMmVteCBzdWJkaXJlY3RvcnkgCi0gICBvZiB0aGUgUHl0aG9uIHJlbGVhc2Ugc291cmNlIHRyZWUuICBtYWtlIGlzIGFsc28gZXhlY3V0ZWQgZnJvbSB0aGlzIAotICAgZGlyZWN0b3J5LCBzbyBjaGFuZ2UgaW50byB0aGlzIGRpcmVjdG9yeSBiZWZvcmUgcHJvY2VlZGluZy4KLQotMS4gZGVjaWRlIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgbG9jYXRpb24gb2YgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24uCi0gICBJZiB5b3Ugd2lzaCB0byBkbyB0aGlzLCBzZXQgdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBMSUJfRElSIAotICAgdG8gdGhlIGRpcmVjdG9yeSB5b3Ugd2lzaCB0byB1c2UgZm9yIFBZVEhPTkhPTUUgCi0gICAoZWcgL3Vzci9sb2NhbC9saWIvcHl0aG9uMi42KS4KLQotICAgSWYgeW91IHdhbnQgUHl0aG9uIHRvIGZpbmQgaXRzIGxpYnJhcnkgd2l0aG91dCB0aGUgUFlUSE9OSE9NRSAKLSAgIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCwgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgCi0gICBGSVhFRF9QWUhPTUUgdG8gInllcyIgKHVuY29tbWVudCB0aGUgYXBwcm9wcmlhdGUgbGluZSkuCi0KLTIuIElmIHlvdSB3aXNoIHRoZSBQeXRob24gZXhlY3V0YWJsZXMgKHB5dGhvbi5leGUsIHB5dGhvbnBtLmV4ZSAmIHBnZW4uZXhlKSAKLSAgIHRvIGJlIGluc3RhbGxlZCBpbiBhIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBQWVRIT05IT01FIGRpcmVjdG9yeSwgc2V0IAotICAgdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBFWEVfRElSIHRvIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkuCi0KLTMuIElmIHlvdSB3aXNoIHRoZSBQeXRob24gY29yZSBETEwgKHB5dGhvbjMzLmRsbCkgdG8gYmUgaW5zdGFsbGVkIGluIGEgCi0gICBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBQeXRob24gZXhlY3V0YWJsZXMgYXJlIAotICAgaW5zdGFsbGVkIChieSBkZWZhdWx0LCB0aGUgUFlUSE9OSE9NRSBkaXJlY3RvcnkpLCBzZXQgdGhlIHZhbHVlIG9mIHRoZSAKLSAgIE1ha2VmaWxlIHZhcmlhYmxlIERMTF9ESVIgdG8gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeS4gIFRoaXMgRExMIG11c3QgCi0gICBiZSBwbGFjZWQgaW4gYSBkaXJlY3Rvcnkgb24gdGhlIHN5c3RlbSdzIExJQlBBVEgsIG9yIHRoYXQgZ2V0cyBzZXQgCi0gICB3aXRoIEJFR0lOTElCUEFUSCBvciBFTkRMSUJQQVRILgotCi00LiBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQgYW55IG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZCAKLSAgIG9wdGlvbmFsIFB5dGhvbiBtb2R1bGVzLCBzZXQgdGhlIHZhbHVlIG9mIHRoZSByZWxldmFudCBIQVZFXzxwYWNrYWdlPiAKLSAgIE1ha2VmaWxlIHZhcmlhYmxlIHRvICJ5ZXMiLiAgVGhlIE1ha2VmaWxlIGN1cnJlbnRseSBzdXBwb3J0czoKLQotICAgbGlicmFyeSAgICAgICAgICAgICAgIE1ha2VmaWxlIHZhcmlhYmxlCi0gICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICB6bGliICgxLjEuNCkgICAgICAgICAgSEFWRV9aTElCCi0gICBHTlUgVWx0cmFGYXN0IENyeXB0ICAgSEFWRV9VRkMKLSAgIFRjbC9UayAgICAgICAgICAgICAgICBIQVZFX1RDTFRLIChub3Qga25vd24gdG8gd29yaykKLSAgIEdOVSBSZWFkbGluZSAgICAgICAgICBIQVZFX0dSRUFETElORQotICAgbmN1cnNlcyAgICAgICAgICAgICAgIEhBVkVfTkNVUlNFUwotICAgR05VIGdkYm0gICAgICAgICAgICAgIEhBVkVfR0RCTQotICAgbGliYnoyICAgICAgICAgICAgICAgIEhBVkVfQloyCi0gICBPcGVuU1NMICAgICAgICAgICAgICAgSEFWRV9PUEVOU1NMCi0KLSAgIFBsZWFzZSBub3RlIHRoYXQgeW91IG5lZWQgdG8gY2hlY2sgdGhhdCB3aGF0IHlvdSBoYXZlIGluc3RhbGxlZCAKLSAgIGlzIGNvbXBhdGlibGUgd2l0aCBQeXRob24ncyBidWlsZCBvcHRpb25zLiAgSW4gcGFydGljdWxhciwgdGhlIAotICAgQlNEIERCIHYxLjg1IGxpYnJhcnkgbmVlZHMgdG8gYmUgcmVidWlsdCB3aXRoIGEgc291cmNlIHBhdGNoIGZvciAKLSAgIG11bHRpdGhyZWFkIHN1cHBvcnQgKGRvZXNuJ3QgY2hhbmdlIHRoZSBsaWJyYXJ5J3MgcmVlbnRyYW50IHN0YXR1cyAKLSAgIGJ1dCBhbGxvd3MgaXQgdG8gYmUgbGlua2VkIHRvIFB5dGhvbiB3aGljaCBpcyBtdWx0aXRocmVhZGVkKS4gIAotICAgV2lkZWx5IGF2YWlsYWJsZSBiaW5hcnkgcGFja2FnZXMgb2Ygb3RoZXIgbGlicmFyeXMgJiBETExzIGFyZSAKLSAgIG5vdCBidWlsdC9saW5rZWQgd2l0aCBtdWx0aXRocmVhZCBzdXBwb3J0LiAgQmV3YXJlIQotCi0gICBBbHNvIG5vdGUgdGhhdCB0aGUgTWFrZWZpbGUgY3VycmVudGx5IGV4cGVjdHMgYW55IGxpYnJhcmllcyB0byBiZSAKLSAgIGZvdW5kIHdpdGggdGhlIGRlZmF1bHQgbGlicmFyeSBzZWFyY2ggcGF0aC4gIFlvdSBtYXkgbmVlZCB0byBhZGQgCi0gICAtTCBzd2l0Y2hlcyB0byB0aGUgTERGTEFHUyBNYWtlZmlsZSB2YXJpYWJsZSBpZiB5b3UgaGF2ZSBpbnN0YWxsZWQgCi0gICBsaWJyYXJpZXMgaW4gZGlyZWN0b3JpZXMgbm90IGluIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoICh3aGljaCBjYW4gCi0gICBiZSBjb250cm9sbGVkIGJ5IHRoZSBMSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgdXNlZCBieSBFTVgpLgotCi01LiBtYWtlCi0KLSAgIEl0IGlzIHVzdWFsbHkgYSBnb29kIGlkZWEgdG8gcmVkaXJlY3QgdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgCi0gICBvZiB0aGUgbWFrZSBwcm9jZXNzIHRvIGxvZyBmaWxlcywgc28gdGhhdCB5b3UgY2FuIHJldmlldyBhbnkgbWVzc2FnZXMuIAotCi02LiBtYWtlIHRlc3QKLQotICAgVGhpcyBydW5zIHRoZSBQeXRob24gcmVncmVzc2lvbiB0ZXN0cywgYW5kIGNvbXBsZXRpb24gaXMgYSBzaWduIG9mIAotICAgYSB1c2FibGUgYnVpbGQuICBZb3Ugc2hvdWxkIGNoZWNrIHRoZSBsaXN0IG9mIHNraXBwZWQgbW9kdWxlcyB0byAKLSAgIGVuc3VyZSB0aGF0IGFueSBvcHRpb25hbCBtb2R1bGVzIHlvdSBzZWxlY3RlZCBoYXZlIGJlZW4gYnVpbHQ7IAotICAgY2hlY2tpbmcgdGhlIGxpc3Qgb2YgZmFpbHVyZXMgYWdhaW5zdCB0aGUgbGlzdCBvZiBrbm93biBmYWlsdXJlcyAKLSAgIGVsc2V3aGVyZSBpbiB0aGlzIGRvY3VtZW50IGlzIGFsc28gcHJ1ZGVudC4KLQotNy4gbWFrZSBpbnN0YWxsCi0gICA+Pj4+Pj4gTk9UIFlFVCBDT01QTEVURSA8PDw8PDwgCi0KLTguIGNoYW5nZSB0byBhIGRpcmVjdG9yeSBvdXRzaWRlIHRoZSBQeXRob24gc291cmNlIHRyZWUgYW5kIHN0YXJ0IFB5dGhvbi4gCi0gICBDaGVjayB0aGUgdmVyc2lvbiBhbmQgYnVpbGQgZGF0ZSB0byBjb25maXJtIHNhdGlzZmFjdG9yeSBpbnN0YWxsYXRpb24uCi0KLQotWU9VIEhBVkUgQkVFTiBXQVJORUQhIQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JIGtub3cgYWJvdXQgYSBudW1iZXIgb2YgbmFzdGllcyBpbiB0aGlzIHBvcnQuCi0KLTEuICBFYmVyaGFyZCBNYXR0ZXMsIGF1dGhvciBvZiBFTVgsIHdyaXRlcyBpbiBoaXMgZG9jdW1lbnRhdGlvbiB0aGF0IGZvcmsoKSAKLWlzIHZlcnkgaW5lZmZpY2llbnQgaW4gdGhlIE9TLzIgZW52aXJvbm1lbnQuICBJdCBhbHNvIHJlcXVpcmVzIHRoYXQgdGhlIAotZXhlY3V0YWJsZSBiZSBsaW5rZWQgaW4gYS5vdXQgZm9ybWF0IHJhdGhlciB0aGFuIE9NRi4gIFVzZSB0aGUgb3MuZXhlYyAKLWFuZC9vciB0aGUgb3Muc3Bhd24gZmFtaWx5IG9mIGZ1bmN0aW9ucyB3aGVyZSBwb3NzaWJsZS4KLQotMi4gIEluIHRoZSBhYnNlbmNlIG9mIEdOVSBSZWFkbGluZSwgdGVybWluYXRpbmcgdGhlIGludGVycHJldGVyIHJlcXVpcmVzIGEgCi1jb250cm9sLVogKF5aKSBmb2xsb3dlZCBieSBhIGNhcnJpYWdlIHJldHVybi4gIEplZmYgUnVzaCBkb2N1bWVudGVkIHRoaXMgCi1wcm9ibGVtIGluIGhpcyBQeXRob24gMS41LjIgcG9ydC4gIFdpdGggUmVhZGxpbmUsIGEgY29udHJvbC1EICheRCkgd29ya3MgCi1hcyBwZXIgdGhlIHN0YW5kYXJkIFVuaXggZW52aXJvbm1lbnQuCi0KLTMuICBFTVggb25seSBoYXMgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIGZjbnRsKCkuICBUaGUgZmNudGwgbW9kdWxlIAotaW4gdGhpcyBwb3J0IHN1cHBvcnRzIHdoYXQgRU1YIHN1cHBvcnRzLiAgSWYgZmNudGwgaXMgaW1wb3J0YW50IHRvIHlvdSwgCi1wbGVhc2UgcmV2aWV3IHRoZSBFTVggQyBMaWJyYXJ5IFJlZmVyZW5jZSAoaW5jbHVkZWQgaW4gLklORiBmb3JtYXQgaW4gdGhlIAotRU1YVklFVy5aSVAgYXJjaGl2ZSBhcyBwYXJ0IG9mIHRoZSBjb21wbGV0ZSBFTVggZGV2ZWxvcG1lbnQgdG9vbHMgc3VpdGUpLgotQmVjYXVzZSBvZiBvdGhlciBzaWRlLWVmZmVjdHMgSSBoYXZlIG1vZGlmaWVkIHRoZSB0ZXN0X2ZjbnRsLnB5IHRlc3QgCi1zY3JpcHQgdG8gZGVhY3RpdmF0ZSB0aGUgZXhlcmNpc2luZyBvZiB0aGUgbWlzc2luZyBmdW5jdGlvbmFsaXR5LgotCi00LiAgVGhlIHJlYWRsaW5lIG1vZHVsZSBoYXMgYmVlbiBsaW5rZWQgYWdhaW5zdCBuY3Vyc2VzIHJhdGhlciB0aGFuIHRoZSAKLXRlcm1jYXAgbGlicmFyeSBzdXBwbGllZCB3aXRoIEVNWC4KLQotNS4gIEkgaGF2ZSBjb25maWd1cmVkIHRoaXMgcG9ydCB0byB1c2UgIi8iIGFzIHRoZSBwcmVmZXJyZWQgcGF0aCBzZXBhcmF0b3IgCi1jaGFyYWN0ZXIsIHJhdGhlciB0aGFuICJcIiAoJ1xcJyksIGluIGxpbmUgd2l0aCB0aGUgY29udmVudGlvbiBzdXBwb3J0ZWQgCi1ieSBFTVguICBCYWNrc2xhc2hlcyBhcmUgc3RpbGwgc3VwcG9ydGVkIG9mIGNvdXJzZSwgYW5kIHN0aWxsIGFwcGVhciBpbiAKLXVuZXhwZWN0ZWQgcGxhY2VzIGR1ZSB0byBvdXRzaWRlIHNvdXJjZXMgdGhhdCBkb24ndCBnZXQgbm9ybWFsaXNlZC4KLQotNi4gIFdoaWxlIHRoZSBEaXN0VXRpbHMgY29tcG9uZW50cyBhcmUgbm93IGZ1bmN0aW9uYWwsIG90aGVyIAotcGFja2FnaW5nL2JpbmFyeSBoYW5kbGluZyB0b29scyBhbmQgdXRpbGl0aWVzIHN1Y2ggYXMgdGhvc2UgaW5jbHVkZWQgaW4KLXRoZSBEZW1vIGFuZCBUb29scyBkaXJlY3RvcmllcyAtIGZyZWV6ZSBpbiBwYXJ0aWN1bGFyIC0gYXJlIHVubGlrZWx5IHRvIAotd29yay4gIElmIHlvdSBkbyBnZXQgdGhlbSBnb2luZywgSSdkIGxpa2UgdG8ga25vdyBhYm91dCB5b3VyIHN1Y2Nlc3MuCi0KLTcuICBJIGhhdmVuJ3Qgc2V0IG91dCB0byBzdXBwb3J0IHRoZSBbQkVHSU58RU5EXUxJQlBBVEggZnVuY3Rpb25hbGl0eSAKLXN1cHBvcnRlZCBieSBvbmUgb2YgdGhlIGVhcmxpZXIgcG9ydHMgKFJ1c2gncz8/KS4gIElmIGl0IHdvcmtzIGxldCBtZSBrbm93LgotCi04LiBBcyBhIHJlc3VsdCBvZiB0aGUgbGltaXRhdGlvbnMgaW1wb3NlZCBieSBFTVgncyBsaWJyYXJ5IHJvdXRpbmVzLCB0aGUgCi1zdGFuZGFyZCBleHRlbnNpb24gbW9kdWxlIHB3ZCBvbmx5IHN5bnRoZXNpc2VzIGEgc2ltcGxlIHBhc3N3ZCBkYXRhYmFzZSwgCi1hbmQgdGhlIGdycCBtb2R1bGUgY2Fubm90IGJlIHN1cHBvcnRlZCBhdCBhbGwuCi0KLUkgaGF2ZSB3cml0dGVuIHB1cmUgUHl0aG9uIHN1YnN0aXR1dGVzIGZvciBwd2QgYW5kIGdycCwgd2hpY2ggY2FuIHByb2Nlc3MgCi1yZWFsIHBhc3N3ZCBhbmQgZ3JvdXAgZmlsZXMgZm9yIHRob3NlIGFwcGxpY2F0aW9ucyAoc3VjaCBhcyBNYWlsTWFuKSB0aGF0IAotcmVxdWlyZSBtb3JlIHRoYW4gRU1YIGVtdWxhdGVzLiAgSSBoYXZlIHBsYWNlZCBwd2QucHkgYW5kIGdycC5weSBpbiAKLUxpYi9wbGF0LW9zMmVteCwgd2hpY2ggaXMgdXN1YWxseSBiZWZvcmUgTGliL2xpYi1keW5sb2FkICh3aGljaCBjb250YWlucyAKLXB3ZC5weWQpIGluIHRoZSBQWVRIT05QQVRILiAgSWYgeW91IGhhdmUgYmVjb21lIGF0dGFjaGVkIHRvIHdoYXQgcHdkLnB5ZCAKLXN1cHBvcnRzLCB5b3UgY2FuIHB1dCBMaWIvbGliLWR5bmxvYWQgYmVmb3JlIExpYi9wbGF0LW9zMmVteCBpbiBQWVRIT05QQVRIIAotb3IgZGVsZXRlL3JlbmFtZSBwd2QucHkgJiBncnAucHkuCi0KLXB3ZC5weSAmIGdycC5weSBzdXBwb3J0IGxvY2F0aW5nIHRoZWlyIGRhdGEgZmlsZXMgYnkgbG9va2luZyBpbiB0aGUgCi1lbnZpcm9ubWVudCBmb3IgdGhlbSBpbiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlOgotcHdkLnB5OiAgJEVUQ19QQVNTV0QgICAgICAgICAgICAgKCVFVENfUEFTU1dEJSkKLSAgICAgICAgICRFVEMvcGFzc3dkICAgICAgICAgICAgICglRVRDJS9wYXNzd2QpCi0gICAgICAgICAkUFlUSE9OSE9NRS9FdGMvcGFzc3dkICAoJVBZVEhPTkhPTUUlL0V0Yy9wYXNzd2QpCi1ncnAucHk6ICAkRVRDX0dST1VQICAgICAgICAgICAgICAoJUVUQ19HUk9VUCUpCi0gICAgICAgICAkRVRDL2dyb3VwICAgICAgICAgICAgICAoJUVUQyUvZ3JvdXApCi0gICAgICAgICAkUFlUSE9OSE9NRS9FdGMvZ3JvdXAgICAoJVBZVEhPTkhPTUUlL0V0Yy9ncm91cCkKLQotVGhlIEVUQ19QQVNTV0QgYW5kIEVUQ19HUk9VUCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGludGVuZGVkIHRvIGFsbG93IAotc3VwcG9ydCBmb3IgbXVsdGlwbGUgcGFzc3dkL2dycCBmaWxlcywgd2hlcmUgb3RoZXIgYXBwbGljYXRpb25zIG1heSBub3QgCi1zdXBwb3J0IGFzIHdpZGUgYSB2YXJpZXR5IG9mIGlucHV0IHZhcmlhdGlvbnMgKGRyaXZlIHJlbWFwcGluZ3MsIAotc2VwYXJhdG9ycyBldGMpLgotCi1Cb3RoIG1vZHVsZXMgc3VwcG9ydCB1c2luZyBlaXRoZXIgdGhlICI6IiBjaGFyYWN0ZXIgKFVuaXggc3RhbmRhcmQpIG9yIAotIjsiIChPUy8yLCBET1MsIFdpbmRvd3Mgc3RhbmRhcmQpIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGFuZCBwd2QucHkgCi1pbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgZHJpdmUgbGV0dGVyIGNvbnZlcnNpb25zIGZvciB0aGUgaG9tZV9kaXJlY3RvcnkgYW5kIAotc2hlbGwgZmllbGRzIChmb3IgdGhlICI6IiBzZXBhcmF0b3Igb25seSk6Ci0gICAgICAgICAkeCAgLT4gIHg6Ci0gICAgICAgICB4OyAgLT4gIHg6Ci0KLUV4YW1wbGUgdmVyc2lvbnMgb2YgcGFzc3dkIGFuZCBncm91cCBhcmUgaW4gdGhlIEV0YyBzdWJkaXJlY3RvcnkuICBUaGUgCi1yZWdyZXNzaW9uIHRlc3RzICh0ZXN0X3B3ZCBhbmQgdGVzdF9ncnApIHdpbGwgZmFpbCBpZiB2YWxpZCBwYXNzd29yZCBhbmQgCi1ncm91cCBmaWxlcyBjYW5ub3QgYmUgZm91bmQsIGJ1dCBzaG91bGQgcGFzcyBvdGhlcndpc2UuCi0KLUJlIGF3YXJlIHRoYXQgUHl0aG9uJ3MgcHdkICYgZ3JvdXAgbW9kdWxlcyBhcmUgZm9yIHJlYWRpbmcgcGFzc3dvcmQgYW5kIAotZ3JvdXAgaW5mb3JtYXRpb24gb25seS4KLQotMTEuIEVNWCdzIHRlcm1pb3Mgcm91dGluZXMgZG9uJ3Qgc3VwcG9ydCBhbGwgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgbm93IAotZXhwb3NlZCBieSB0aGUgdGVybWlvcyBtb2R1bGUgLSByZWZlciB0byB0aGUgRU1YIGRvY3VtZW50YXRpb24gdG8gZmluZCAKLW91dCB3aGF0IGlzIHN1cHBvcnRlZC4KLQotMTIuIFRoZSBjYXNlIHNlbnNpdGl2ZSBpbXBvcnQgc2VtYW50aWNzIGludHJvZHVjZWQgaW4gUHl0aG9uIDIuMSBmb3Igb3RoZXIgCi1jYXNlIGluc2Vuc2l0aXZlIGJ1dCBjYXNlIHByZXNlcnZpbmcgZmlsZS9vcGVyYXRpbmcgc3lzdGVtcyAoV2luZG93cyBldGMpLCAKLWhhdmUgYmVlbiBpbmNvcnBvcmF0ZWQgaW50byB0aGlzIHBvcnQsIGFuZCBhcmUgYWN0aXZlIGJ5IGRlZmF1bHQuICBTZXR0aW5nIAotdGhlIFBZVEhPTkNBU0VPSyBlbnZpcm9ubWVudCB2YXJpYWJsZSAodG8gYW55IHZhbHVlKSByZXZlcnRzIHRvIHRoZSAKLXByZXZpb3VzIChjYXNlIGluc2Vuc2l0aXZlKSBzZW1hbnRpY3MuICBUaGlzIGNhbiBiZSBhbiBpc3N1ZSB3aXRoIHNvbWUgCi1maWxlIG1hbmFnZW1lbnQgdXRpbGl0aWVzIHRoYXQgZG8gbm90IHByZXNlcnZlIHRoZSBjYXNlIG9mIGZpbGUgYW5kCi1kaXJlY3RvcnkgbmFtZXMuCi0KLTEzLiBCZWNhdXNlIEkgYW0gc3RhdGljYWxseSBsaW5raW5nIG5jdXJzZXMsIHRoZSBfY3Vyc2VzX3BhbmVsIAotbW9kdWxlIGhhcyBwb3RlbnRpYWwgcHJvYmxlbXMgYXJpc2luZyBmcm9tIHNlcGFyYXRlIGxpYnJhcnkgZGF0YSBhcmVhcy4KLVRvIGF2b2lkIHRoaXMsIEkgaGF2ZSBjb25maWd1cmVkIHRoZSBfY3Vyc2VzXy5weWQgKGltcG9ydGVkIGFzIAotIl9jdXJzZXNfcGFuZWwiKSB0byBpbXBvcnQgdGhlIG5jdXJzZXMgc3ltYm9scyBpdCBuZWVkcyBmcm9tIF9jdXJzZXMuZGxsIAotKHdoaWNoIGlzIHRoZSBjdXJzZXMgbW9kdWxlLCBidXQgd2l0aCBhIC5kbGwgZXh0ZW5zaW9uIHJhdGhlciB0aGFuIC5weWQgCi1zbyB0aGF0IHRoZSBkeW5hbWljIGxvYWRlciBjYW4gYWN0dWFsbHkgaW1wb3J0IHRoZSBzeW1ib2xzIGZyb20gaXQgYXMgYSAKLURMTCkuCi0KLVRoZSBzaXRlIG1vZHVsZSAoTGliL3NpdGUucHkpIGhhcyBjb2RlIGFkZGVkIHRvIHR3ZWFrIEJFR0lOTElCUEFUSCBzbwotdGhhdCBfY3Vyc2VzLmRsbCBpcyBmb3VuZCB3aGVuIF9jdXJzZXNfcGFuZWwgaXMgaW1wb3J0ZWQuICBJZiB5b3UgaGF2ZQotcHJvYmxlbXMgYXR0ZW1wdGluZyB0byB1c2UgdGhlIF9jdXJzZXNfcGFuZWwgc3VwcG9ydCBwbGVhc2UgbGV0IG1lIGtub3csCi1hbmQgSSdsbCBoYXZlIGFub3RoZXIgbG9vayBhdCB0aGlzLgotCi0xNC4gc3lzLnBsYXRmb3JtIHJlcG9ydHMgIm9zMmVteCIgaW5zdGVhZCBvZiAib3MyIi4gIG9zLm5hbWUgc3RpbGwgCi1yZXBvcnRzICJvczIiLiAgVGhpcyBjaGFuZ2Ugd2FzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gCi10aGUgVkFDKysgYnVpbGQgKGZvcm1lcmx5IG1haW50YWluZWQgYnkgTWljaGFlbCBNdWxsZXIpIGFuZCB0aGUgRU1YIGJ1aWxkIAotKHRoaXMgcG9ydCksIHByaW5jaXBhbGx5IGZvciBEaXN0VXRpbHMuCi0KLTE1LiBpdCBhcHBlYXJzIHRoYXQgdGhlICVXIHN1YnN0aXR1dGlvbiBpbiB0aGUgRU1YIHN0cmZ0aW1lKCkgcm91dGluZSBoYXMgCi1hbiBvZmYtYnktb25lIGJ1Zy4gIHN0cmZ0aW1lIHdhcyBsaXN0ZWQgYXMgcGFzc2luZyB0aGUgcmVncmVzc2lvbiB0ZXN0cyAKLWluIHByZXZpb3VzIHJlbGVhc2VzLCBidXQgdGhpcyBmYWN0IGFwcGVhcnMgdG8gaGF2ZSBiZWVuIGFuIG92ZXJzaWdodCBpbiAKLXRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUuICBUbyBmaXggdGhpcyByZWFsbHkgcmVxdWlyZXMgYSBwb3J0YWJsZSAKLXN0cmZ0aW1lIHJvdXRpbmUgLSBJJ20gbG9va2luZyBpbnRvIHVzaW5nIG9uZSBmcm9tIEZyZWVCU0QsIGJ1dCBpdHMgbm90IAotcmVhZHkgeWV0LgotCi0xNi4gSSBoYXZlIHN1Y2Nlc3NmdWxseSBidWlsdCB0aGlzIHBvcnQgd2l0aCBBbmR5IFphYm9sb3RueSdzIHBvcnRzIG9mIAotcGdjYyAyLjk1IGFuZCBnY2MgMy4yLjEsIGluIGFkZGl0aW9uIHRvIEVNJ3MgZ2NjIDIuOC4xLgotCi1JIGhhdmUgbm90IGF0dGVtcHRlZCB0byBjb21waWxlIFB5dGhvbiB3aXRoIGFueSB2ZXJzaW9uIG9mIGdjYyBwcmlvciB0byAKLXYyLjguMS4KLQotVGhpcyByZWxlYXNlIHNlZXMgdGhlIGRlZmF1bHQgb3B0aW1pc2F0aW9uIGNoYW5nZSB0byAKLSItTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1wcm9iZSIuICBUaGlzIHdvcmtzIGZpbmUgdG9vIGZvciBwZ2NjIDIuOTUgCi1idXQgbm90IGZvciBnY2MgMy4yLjEuCi0KLVdpdGggZ2NjIDMuMi4xLCAtTzMgY2F1c2VzIDIgdW5leHBlY3RlZCB0ZXN0IGZhaWx1cmVzOiB0ZXN0X2Zvcm1hdCBhbmQgCi10ZXN0X3VuaWNvZGUuICBCb3RoIHRoZXNlIHRlc3RzIHBhc3MgaWYgLU8yIGlzIGluc3RlYWQgb2YgLU8zIHdpdGggdGhpcyAKLWNvbXBpbGVyLCBhbmQgdGhlIHBlcmZvcm1hbmNlIGRpZmZlcmVuY2UgaXMgbmVnbGlnaWJsZSAoaW4gY29udHJhc3QgdG8gCi1nY2MgMi44LjEgYW5kIHBnY2MgMi45NSwgd2hlcmUgdGhlIHBlcmZvcm1hbmNlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgCi0yIG9wdGltaXNhdGlvbiBzZXR0aW5ncyBhcHByb2FjaGVzIDEwJSkuCi0KLTE3LiAgb3Muc3Bhd252KCkgYW5kIG9zLnNwYXdudmUoKSBleHBvc2UgRU1YJ3MgbGlicmFyeSByb3V0aW5lcyByYXRoZXIgCi10aGFuIHVzZSB0aGUgZW11bGF0aW9uIGluIG9zLnB5LgotCi1JbiBvcmRlciB0byBtYWtlIHVzZSBvZiBzb21lIG9mIHRoZSBmZWF0dXJlcyB0aGlzIG1ha2VzIGF2YWlsYWJsZSBpbiAKLXRoZSBPUy8yIGVudmlyb25tZW50LCB5b3Ugc2hvdWxkIHBlcnVzZSB0aGUgcmVsZXZhbnQgRU1YIGRvY3VtZW50YXRpb24gCi0oRU1YTElCLklORiBpbiB0aGUgRU1YVklFVy5aSVAgYXJjaGl2ZSBhY2NvbXBhbnlpbmcgdGhlIEVNWCBhcmNoaXZlcyAKLW9uIEhvYmJlcyBvciBMRU8pLiAgQmUgYXdhcmUgdGhhdCBJIGhhdmUgZXhwb3NlZCBhbGwgdGhlICJtb2RlIiBvcHRpb25zIAotc3VwcG9ydGVkIGJ5IEVNWCwgYnV0IHRoZXJlIGFyZSBjb21iaW5hdGlvbnMgdGhhdCBlaXRoZXIgY2Fubm90IGJlIAotcHJhY3RpY2FsbHkgdXNlZCBieS9pbiBQeXRob24gb3IgaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGNvbXByb21pc2UgeW91ciAKLXN5c3RlbSdzIHN0YWJpbGl0eS4KLQotMTguICBweXRob25wbS5leGUgdXNlZCB0byBiZSBqdXN0IHB5dGhvbi5leGUgd2l0aCB0aGUgV0lORE9XQVBJIGxpbmtlciAKLW9wdGlvbiBzZXQgaW4gdGhlIHB5dGhvbnBtLmRlZiBmaWxlLiAgSW4gcHJhY3RpY2UsIHRoaXMgdHVybnMgb3V0IHRvIGRvIAotbm90aGluZyB1c2VmdWwuCi0KLUkgaGF2ZSB3cml0dGVuIGEgcmVwbGFjZW1lbnQgd2hpY2ggd3JhcHMgdGhlIFB5dGhvbiBETEwgaW4gYSBnZW51aW5lIAotUHJlc2VudGF0aW9uIE1hbmFnZXIgYXBwbGljYXRpb24uICBUaGlzIHZlcnNpb24gYWN0dWFsbHkgcnVucyB0aGUgCi1QeXRob24gaW50ZXJwcmV0ZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgZnJvbSB0aGUgUE0gc2hlbGwsIGluIG9yZGVyIAotdGhhdCBQeXRob25QTSBoYXMgYSBmdW5jdGlvbmluZyBtZXNzYWdlIHF1ZXVlIGFzIGdvb2QgUE0gYXBwcyBzaG91bGQuCi1JbiBpdHMgY3VycmVudCBzdGF0ZSwgUHl0aG9uUE0ncyB3aW5kb3cgaXMgaGlkZGVuLiAgSXQgY2FuIGJlIGRpc3BsYXllZCwgCi1hbHRob3VnaCBpdCB3aWxsIGhhdmUgbm8gY29udGVudCBhcyBub3RoaW5nIGlzIGV2ZXIgd3JpdHRlbiB0byB0aGUgCi13aW5kb3cuICBPbmx5IHRoZSAiaGlkZSIgYnV0dG9uIGlzIGF2YWlsYWJsZS4gIEFsdGhvdWdoIHRoZSBjb2RlIAotaGFzIHN1cHBvcnQgZm9yIHNodXR0aW5nIFB5dGhvblBNIGRvd24gd2hlbiB0aGUgUHl0aG9uIGludGVycHJldGVyIGlzIAotc3RpbGwgYnVzeSAodmlhIHRoZSAiY29udHJvbCIgbWVudSksIHRoaXMgaXMgbm90IHdlbGwgdGVzdGVkIGFuZCBnaXZlbiAKLWNvbW1lbnRzIEkndmUgY29tZSBhY3Jvc3MgaW4gRU1YIGRvY3VtZW50YXRpb24gc3VnZ2VzdGluZyB0aGF0IHRoZSAKLXRocmVhZCBraWxsaW5nIG9wZXJhdGlvbiBoYXMgcHJvYmxlbXMgSSB3b3VsZCBzdWdnZXN0IGNhdXRpb24gaW4gCi1yZWx5aW5nIG9uIHRoaXMgY2FwYWJpbGl0eS4KLQotUHl0aG9uUE0gcHJvY2Vzc2VzIGNvbW1hbmRsaW5lIHBhcmFtZXRlcnMgbm9ybWFsbHkuICBUaGUgc3RhbmRhcmQgaW5wdXQsIAotb3V0cHV0IGFuZCBlcnJvciBzdHJlYW1zIGFyZSBvbmx5IHVzZWZ1bCBpZiByZWRpcmVjdGVkLCBhcyBQeXRob25QTSdzIAotd2luZG93IGlzIG5vdCBhIGNvbnNvbGUgaW4gYW55IGZvcm0gYW5kIHNvIGNhbm5vdCBhY2NlcHQgb3IgZGlzcGxheSAKLWFueXRoaW5nLiAgVGhpcyBtZWFucyB0aGF0IHRoZSAtaSBvcHRpb24gaXMgaW5lZmZlY3RpdmUuCi0KLUJlY2F1c2UgdGhlIFB5dGhvbiB0aHJlYWQgZG9lc24ndCBjcmVhdGUgaXRzIG93biBtZXNzYWdlIHF1ZXVlLCBjcmVhdGluZyAKLVBNIFdpbmRvd3MgYW5kIHBlcmZvcm1pbmcgbW9zdCBQTSBvcGVyYXRpb25zIGlzIG5vdCBwb3NzaWJsZSBmcm9tIHdpdGhpbiAKLXRoaXMgdGhyZWFkLiAgSG93IHRoaXMgd2lsbCBhZmZlY3Qgc3VwcG9ydGluZyBQTSBleHRlbnNpb25zIChzdWNoIGFzIAotVGtpbnRlciB1c2luZyBhIFBNIHBvcnQgb2YgVGNsL1RrLCBvciB3eFB5dGhvbiB1c2luZyB0aGUgUE0gcG9ydCBvZiAKLVd4V2luZG93cykgaXMgc3RpbGwgYmVpbmcgcmVzZWFyY2hlZC4KLQotTm90ZSB0aGF0IG9zLmZvcmsoKSBfRE9FU19OT1RfV09SS18gaW4gUHl0aG9uUE0gLSBTWVMzMTc1cyBhcmUgdGhlIHJlc3VsdCAKLW9mIHRyeWluZy4gIG9zLnNwYXdudigpIF9kb2VzXyB3b3JrLiAgUHl0aG9uUE0gcGFzc2VzIGFsbCByZWdyZXNzaW9uIHRlc3RzIAotdGhhdCB0aGUgc3RhbmRhcmQgUHl0aG9uIGludGVycHJldGVyIChweXRob24uZXhlKSBwYXNzZXMsIHdpdGggdGhlIGV4Y2VwdGlvbiAKLW9mIHRlc3RfZm9yazEgYW5kIHRlc3Rfc29ja2V0IHdoaWNoIGJvdGggYXR0ZW1wdCB0byB1c2Ugb3MuZm9yaygpLgotCi1JIHZlcnkgbXVjaCB3YW50IGZlZWRiYWNrIG9uIHRoZSBwZXJmb3JtYW5jZSwgYmVoYXZpb3VyIGFuZCB1dGlsaXR5IG9mIAotUHl0aG9uUE0uICBJIHdvdWxkIGxpa2UgdG8gYWRkIGEgUE0gY29uc29sZSBjYXBhYmlsaXR5IHRvIGl0LCBidXQgdGhhdCAKLXdpbGwgYmUgYSBub24tdHJpdmlhbCBlZmZvcnQuICBJIG1heSBiZSBhYmxlIHRvIGxldmVyYWdlIHRoZSBjb2RlIGluIAotSWxseWEgVmFlcycgVGNsL1RrIHBvcnQsIHdoaWNoIHdvdWxkIG1ha2UgaXQgZWFzaWVyLgotCi0xOS4gIG9zLmNoZGlyKCkgdXNlcyBFTVgncyBfY2hkaXIyKCksIHdoaWNoIHN1cHBvcnRzIGNoYW5naW5nIGJvdGggZHJpdmUgCi1hbmQgZGlyZWN0b3J5IGF0IG9uY2UuICBTaW1pbGFybHksIG9zLmdldGN3ZCgpIHVzZXMgRU1YJ3MgX2dldGN3ZCgpIAotd2hpY2ggcmV0dXJucyBkcml2ZSBhcyB3ZWxsIGFzIHBhdGguCi0KLTIwLiAgcHljb25maWcuaCBpcyBpbnN0YWxsZWQgaW4gdGhlIEluY2x1ZGUgc3ViZGlyZWN0b3J5IHdpdGggYWxsIAotb3RoZXIgaW5jbHVkZSBmaWxlcy4KLQotMjEuICB0aGUgZGVmYXVsdCBidWlsZCBleHBsaWNpdGx5IHNldHMgdGhlIG51bWJlciBvZiBmaWxlIGhhbmRsZXMgCi1hdmFpbGFibGUgdG8gYSBQeXRob24gcHJvY2VzcyB0byAyNTAuICBFTVggZGVmYXVsdCBpcyA0MCwgd2hpY2ggaXMgCi1pbnN1ZmZpY2llbnQgZm9yIHRoZSB0ZW1wZmlsZSByZWdyZXNzaW9uIHRlc3QgKHRlc3RfdGVtcGZpbGUpIHdoaWNoIAotdHJpZXMgdG8gY3JlYXRlIDEwMCB0ZW1wb3JhcnkgZmlsZXMuCi0KLVRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlIEVNWE9QVCBlbnZpcm9ubWVudCB2YXJpYWJsZToKLSAgc2V0IEVNWE9QVD0taDI1MAotaXMgZXF1aXZhbGVudCB0byB0aGUgc2V0dGluZyBjdXJyZW50bHkgdXNlZC4gIFRoZSBlbXhiaW5kIHV0aWxpdHkgKGlmIHlvdSAKLWhhdmUgaXQgaW5zdGFsbGVkKSBjYW4gYWxzbyBiZSB1c2VkIHRvIHBlcm1hbmVudGx5IGNoYW5nZSB0aGUgc2V0dGluZyBpbiAKLXB5dGhvbi5leGUgLSBwbGVhc2UgcmVmZXIgdG8gdGhlIEVNWCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi0yMi4gIGEgcHVyZSBweXRob24gc3RycHRpbWUgbW9kdWxlIGlzIG5vdyBwYXJ0IG9mIHRoZSBQeXRob24gc3RhbmRhcmQKLWxpYnJhcnksIHN1cGVyY2VkaW5nIGEgcGxhdGZvcm0gc3BlY2lmaWMgZXh0ZW5zaW9uIG1vZHVsZS4gVGhpcyBtb2R1bGUKLWxldmVyYWdlcyB0aGUgc3RyZnRpbWUgbW9kdWxlLCBhbmQgYXMgYSByZXN1bHQgdGVzdF9zdHJwdGltZSBmYWlscwotZHVlIHRvIHRoZSBFTVggc3RyZnRpbWUgYnVnIGluIGl0ZW0gMjAgYWJvdmUuCi0KLTIzLiAgdGVzdF9wb3NpeHBhdGggYXR0ZW1wdHMgdG8gZXhlcmNpc2UgdmFyaW91cyBQb3NpeCBwYXRoIHJlbGF0ZWQKLWZ1bmN0aW9uYWxpdHkuICBNb3N0IG9mIHRoZSBzdWItdGVzdHMgcGFzcywgYnV0IHRoZSAiaXNtb3VudCIgYW5kCi0ic2FtZXN0YXQiIHN1YnRlc3RzIGZhaWw6Ci0tIEVNWCBwcm92aWRlcyBub3Qgc2F0aXNmYWN0b3J5IG1vdW50IHBvaW50IGVtdWxhdGlvbiwgc28gImlzbW91bnQiCi0gIGNhbm5vdCBzdWNjZWVkOwotLSBFTVggZG9jdW1lbnRzIHRoYXQgc3VjY2Vzc2l2ZSBzdGF0KCkgY2FsbHMgd2lsbCBwcm9kdWNlIGRpZmZlcmVudAotICByZXN1bHRzLCBzbyAic2FtZXN0YXQiIGNhbm5vdCBzdWNjZWVkLgotCi10ZXN0X3Bvc2l4cGF0aCBzaG91bGQgc2tpcCB0aGVzZSB0ZXN0cyBvbiBFTVguCi0KLTI0LiAgSSBoYXZlIHJlcG9ydHMgb2YgQml0VG9ycmVudCBub3Qgd29ya2luZy4gIEl0IGFwcGVhcnMgdGhhdCB0aGUKLUVNWCBzZWxlY3QoKSBlbXVsYXRpb24sIHBvc3NpYmx5IGluIGNvbmNlcnQgd2l0aCBidWdzIGluIHRoZSBUQ1AvSVAKLXN0YWNrLCBydW5zIGludG8gcHJvYmxlbXMgdW5kZXIgdGhlIHN0cmVzcyBpbXBvc2VkIGJ5IHRoaXMgYXBwbGljYXRpb24uCi1JIHRoaW5rIGl0IHN1ZmZpY2VzIHRvIHNheSB0aGF0IEJpdFRvcnJlbnQgaXMgYSBmYWlyIHN0cmVzcyB0ZXN0IG9mIGEKLXN5c3RlbSdzIG5ldHdvcmtpbmcgY2FwYWJpbGl0eS4KLQotMjUuICBJbiB0aGUgYWJzZW5jZSBvZiBhbiBFTVggaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpbmsoKSBmdW5jdGlvbiwgSSd2ZSAKLWltcGxlbWVudGVkIGEgY3J1ZGUgUHl0aG9uIGVtdWxhdGlvbiwgaW4gdGhlIGZpbGUgCi1MaWIvcGxhdC1vczJlbXgvX2VteF9saW5rLnB5LiAgVGhpcyBpcyBpbXBvcnRlZCBpbnRvIHRoZSBvcyBtb2R1bGUsIGFuZCAKLWJlY29tZXMgYXZhaWxhYmxlIGFzIG9zLmxpbmsoKSBpbiB0aGUgbm9ybWFsIHdheS4KLQotVGhlIGVtdWxhdGlvbiBjb3BpZXMgdGhlIHNvdXJjZSBmaWxlIGluIGJpbmFyeSBtb2RlLCBhbmQgd2lsbCBmYWlsIGlmIAotZGlzayBzcGFjZSBpcyBleGhhdXN0ZWQuIFRoZSBjYWxsIGZhaWxzIGlmIHRoZSB0YXJnZXQgYWxyZWFkeSBleGlzdHMuIAotVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgdG8gdGhyZWFkIHNhZmV0eSB3aXRoIHRoaXMgZW11bGF0aW9uIC0gYmV3YXJlIQotCi1UaGUgZW11bGF0aW9uIHdhcyB3cml0dGVuIHRvIHN1cHBvcnQgYSBsaW5rKCkgYmFzZWQgZmlsZSBsb2NraW5nIHN5c3RlbSAKLXVzZWQgaW4gR05VIE1haWxtYW4uCi0KLTI2LiAgQUZfVU5JWCBzb2NrZXRzLCBvdGhlcndpc2Uga25vd24gYXMgVW5peCBkb21haW4gc29ja2V0cywgYXJlIG5vdwotc3VwcG9ydGVkLiAgVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHNvbWUgdHJhcHMgYXJpc2luZyBmcm9tIHRoZQotaW1wbGVtZW50YXRpb24gaW4gSUJNJ3MgVENQL0lQIHN0YWNrOi0KLS0gdGhlIHBhdGggbmFtZSBtdXN0IHN0YXJ0IHdpdGggJ1xcc29ja2V0XFwnICgnL3NvY2tldC8nIHdvbid0IHdvcmshKSwKLSAgd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZSBmdWxsIHBhdGggbmFtZSBsZXNzIHRoYW4gMTA4IGNoYXJhY3RlcnM7Ci0tIHVubGlrZSBVbml4LCB0aGUgc29ja2V0IGVuZHBvaW50cyBkb24ndCBleGlzdCBpbiB0aGUgZmlsZXN5c3RlbTsKLS0gYnkgZGVmYXVsdCwgc29ja2V0cyBhcmUgaW4gYmluYXJ5IG1vZGUuCi0KLTI3LiAgQXMgb2YgUHl0aG9uIDIuNCwgdGhlIG1weiwgcm90b3IgYW5kIHhyZWFkbGluZXMgbW9kdWxlcyBoYXZlIGJlZW4gCi1kcm9wcGVkIGZyb20gdGhlIFB5dGhvbiBzb3VyY2UgdHJlZS4KLQotMjguICBUaGUgc3VicHJvY2VzcyBtb2R1bGUgd2FzIGFkZGVkIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHJlbGF0aXZlbHkKLWxhdGUgaW4gdGhlIDIuNCBkZXZlbG9wbWVudCBjeWNsZS4gIFVuZm9ydHVuYXRlbHkgSSBoYXZlbid0IGhhZCB0aGUKLXJvdW5kIHR1aXRzIHRvIGFkYXB0IHRoZSBtb2R1bGUgdG8gdGhlIEVNWCBlbnZpcm9ubWVudCB5ZXQsIGFuZAotdGVzdF9zdWJwcm9jZXNzIGhhcyBhIG51bWJlciBvZiBmYWlsdXJlcyBhcyBhIHJlc3VsdC4KLQotMjkuICBUaGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciB0aHJlYWRzIGhhcyBiZWVuIDY0ay4gIFRoaXMgaXMgcHJvdmluZwotaW5zdWZmaWNpZW50IGZvciBzb21lIGNvZGViYXNlcywgc3VjaCBhcyBab3BlLiAgVGhlIHRocmVhZCBzdGFjayBzaXplCi1zdGlsbCBkZWZhdWx0cyB0byA2NGssIGJ1dCB0aGlzIGNhbiBub3cgYmUgaW5jcmVhc2VkIHZpYSB0aGUgc3RhY2tfc2l6ZSgpCi1mdW5jdGlvbiBleHBvc2VkIGJ5IHRoZSB0aHJlYWRpbmcgJiB0aHJlYWQgbW9kdWxlcyBhcyB3ZWxsIGFzIGJ5IGRlZmluaW5nCi1USFJFQURfU1RBQ0tfU0laRSB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBpbiB0aGUgTWFrZWZpbGUgKHdoaWNoIGNvbnRhaW5zCi1hIGNvbW1lbnRlZCBvdXQgZGVmaW5pdGlvbiBmb3IgMTI4a0IgdGhyZWFkIHN0YWNrcykuICBJIGhhdmUgc2VlbgotcmVmZXJlbmNlcyB0byBoZWF2eSBab3BlL1Bsb25lIHVzYWdlIHJlcXVpcmluZyAxTUIgdGhyZWFkIHN0YWNrcyBvbgotRnJlZUJTRCBhbmQgTGludXgsIGJ1dCBkb3VidCB0aGF0IGZvciBtb3N0IGxpa2VseSB1c2FnZSBvbiBPUy8yIHRoYXQKLW1vcmUgdGhhbiAyNTZrQiBpcyBuZWNlc3NhcnkuICBUaGUgc2l6ZSBvZiB0aGUgcmVxdWlyZWQgc3RhY2tzIChtYWluIAotYW5kIHRocmVhZCkgY2FuIHZhcnkgc2lnbmlmaWNhbnRseSBkZXBlbmRpbmcgb24gd2hpY2ggdmVyc2lvbiBvZiBnY2MKLWlzIHVzZWQgYWxvbmcgd2l0aCB0aGUgY29tcGlsZXIgb3B0aW1pc2F0aW9ucyBzZWxlY3RlZC4gIE5vdGUgdGhhdCB0aGUKLW1haW4gdGhyZWFkIHN0YWNrIHNpemUgaXMgc2V0IGR1cmluZyBsaW5raW5nIGFuZCBpcyBjdXJyZW50bHkgMk1CLgotCi0uLi4gcHJvYmFibHkgb3RoZXIgaXNzdWVzIHRoYXQgSSd2ZSBub3QgZW5jb3VudGVyZWQsIG9yIGRvbid0IHJlbWVtYmVyIDotKAotCi1JZiB5b3UgZW5jb3VudGVyIG90aGVyIGRpZmZpY3VsdGllcyB3aXRoIHRoaXMgcG9ydCwgd2hpY2ggY2FuIGJlIAotY2hhcmFjdGVyaXNlZCBhcyBwZWN1bGlhciB0byB0aGlzIHBvcnQgcmF0aGVyIHRoYW4gdG8gdGhlIFB5dGhvbiByZWxlYXNlLAotSSB3b3VsZCBsaWtlIHRvIGhlYXIgYWJvdXQgdGhlbS4gIEhvd2V2ZXIgSSBjYW5ub3QgcHJvbWlzZSB0byBiZSBhYmxlIHRvIGRvIAotYW55dGhpbmcgdG8gcmVzb2x2ZSBzdWNoIHByb2JsZW1zLiAgU2VlIHRoZSBDb250YWN0IHNlY3Rpb24gYmVsb3cuLi4KLQotCi1UbyBkby4uLgotLS0tLS0tLS0KLQotSW4gbm8gcGFydGljdWxhciBvcmRlciBvZiBhcHBhcmVudCBpbXBvcnRhbmNlIG9yIGxpa2VsaWhvb2QuLi4KLQotLSBzdXBwb3J0IFRraW50ZXIgYW5kL29yIGFsdGVybmF0aXZlIEdVSSAod3hXaW5kb3dzPz8pCi0KLQotQ3JlZGl0cwotLS0tLS0tLQotCi1JbiBhZGRpdGlvbiB0byBwZW9wbGUgaWRlbnRpZmllZCBhYm92ZSwgSSdkIGxpa2UgdG8gdGhhbms6Ci0tIHRoZSBCREZMLCBHdWlkbyB2YW4gUm9zc3VtLCBhbmQgY3JldyBmb3IgUHl0aG9uOwotLSBEciBEYXZpZCBNZXJ0eiwgZm9yIHRyeWluZyBvdXQgYSBwcmUtcmVsZWFzZSBvZiB0aGlzIHBvcnQ7Ci0tIHRoZSBQeXRob24tbGlzdC9jb21wLmxhbmcucHl0aG9uIGNvbW11bml0eTsKLS0gSm9obiBQb2x0b3JhaywgZm9yIGlucHV0IGFib3V0IHB3ZC9ncnAuCi0KLUNvbnRhY3QKLS0tLS0tLS0KLQotQ29uc3RydWN0aXZlIGZlZWRiYWNrLCBuZWdhdGl2ZSBvciBwb3NpdGl2ZSwgYWJvdXQgdGhpcyBwb3J0IGlzIHdlbGNvbWUgCi1hbmQgc2hvdWxkIGJlIGFkZHJlc3NlZCB0byBtZSBhdCB0aGUgZS1tYWlsIGFkZHJlc3NlcyBiZWxvdy4KLQotSSBoYXZlIGEgcHJpdmF0ZSBtYWlsaW5nIGxpc3QgZm9yIGFubm91bmNlbWVudHMgb2YgZml4ZXMgJiB1cGRhdGVzIHRvIAotdGhpcyBwb3J0LiAgSWYgeW91IHdpc2ggdG8gcmVjZWl2ZSBzdWNoIGUtbWFpbCBhbm5vdW5jbWVudHMsIHBsZWFzZSBzZW5kIAotbWUgYW4gZS1tYWlsIHJlcXVlc3RpbmcgdGhhdCB5b3UgYmUgYWRkZWQgdG8gdGhpcyBsaXN0LgotCi1BbmRyZXcgTWFjSW50eXJlCi1FLW1haWw6IGFuZHltYWNAYnVsbHNleWUuYXBhbmEub3JnLmF1LCBvciBhbmR5bWFjQHBjdWcub3JnLmF1Ci1XZWI6ICAgIGh0dHA6Ly93d3cuYW5keW1hYy5vcmcvCi0KLTI4IEphbnVhcnksIDIwMDguCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvY29uZmlnLmMgYi9QQy9vczJlbXgvY29uZmlnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NzkxMTAuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2NvbmZpZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIE1vZHVsZSBjb25maWd1cmF0aW9uICovCi0KLS8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgdGFibGUgb2YgYnVpbHQtaW4gbW9kdWxlcy4KLSAgIFNlZSBpbml0X2J1aWx0aW4oKSBpbiBpbXBvcnQuYy4gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi1leHRlcm4gdm9pZCBpbml0b3MyKCk7Ci1leHRlcm4gdm9pZCBpbml0c2lnbmFsKCk7Ci0jaWZkZWYgV0lUSF9USFJFQUQKLWV4dGVybiB2b2lkIGluaXRfdGhyZWFkKCk7Ci0jZW5kaWYKLWV4dGVybiB2b2lkIGluaXRfY29kZWNzKCk7Ci1leHRlcm4gdm9pZCBpbml0X2NzdigpOwotZXh0ZXJuIHZvaWQgaW5pdF9sb2NhbGUoKTsKLWV4dGVybiB2b2lkIGluaXRfcmFuZG9tKCk7Ci1leHRlcm4gdm9pZCBpbml0X3NyZSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9zeW10YWJsZSgpOwotZXh0ZXJuIHZvaWQgaW5pdF93ZWFrcmVmKCk7Ci1leHRlcm4gdm9pZCBpbml0YXJyYXkoKTsKLWV4dGVybiB2b2lkIGluaXRiaW5hc2NpaSgpOwotZXh0ZXJuIHZvaWQgaW5pdGNvbGxlY3Rpb25zKCk7Ci1leHRlcm4gdm9pZCBpbml0Y21hdGgoKTsKLWV4dGVybiB2b2lkIGluaXRkYXRldGltZSgpOwotZXh0ZXJuIHZvaWQgaW5pdGRsKCk7Ci1leHRlcm4gdm9pZCBpbml0ZXJybm8oKTsKLWV4dGVybiB2b2lkIGluaXRmY250bCgpOwotZXh0ZXJuIHZvaWQgaW5pdF9mdW5jdG9vbHMoKTsKLWV4dGVybiB2b2lkIGluaXRfaGVhcHEoKTsKLWV4dGVybiB2b2lkIGluaXRpbWFnZW9wKCk7Ci1leHRlcm4gdm9pZCBpbml0aXRlcnRvb2xzKCk7Ci1leHRlcm4gdm9pZCBpbml0bWF0aCgpOwotZXh0ZXJuIHZvaWQgaW5pdF9tZDUoKTsKLWV4dGVybiB2b2lkIGluaXRvcGVyYXRvcigpOwotZXh0ZXJuIHZvaWQgaW5pdF9zaGEoKTsKLWV4dGVybiB2b2lkIGluaXRfc2hhMjU2KCk7Ci1leHRlcm4gdm9pZCBpbml0X3NoYTUxMigpOwotZXh0ZXJuIHZvaWQgaW5pdF9zdHJ1Y3QoKTsKLWV4dGVybiB2b2lkIGluaXR0ZXJtaW9zKCk7Ci1leHRlcm4gdm9pZCBpbml0dGltZSgpOwotZXh0ZXJuIHZvaWQgaW5pdHh4c3VidHlwZSgpOwotZXh0ZXJuIHZvaWQgaW5pdHppcGltcG9ydCgpOwotI2lmICFIQVZFX0RZTkFNSUNfTE9BRElORwotZXh0ZXJuIHZvaWQgaW5pdF9jdXJzZXMoKTsKLWV4dGVybiB2b2lkIGluaXRfY3Vyc2VzX3BhbmVsKCk7Ci1leHRlcm4gdm9pZCBpbml0X3Rlc3RjYXBpKCk7Ci1leHRlcm4gdm9pZCBpbml0YnoyKCk7Ci1leHRlcm4gdm9pZCBpbml0ZnBlY3RsKCk7Ci1leHRlcm4gdm9pZCBpbml0ZnBldGVzdCgpOwotZXh0ZXJuIHZvaWQgaW5pdHBhcnNlcigpOwotZXh0ZXJuIHZvaWQgaW5pdHB3ZCgpOwotZXh0ZXJuIHZvaWQgaW5pdHVuaWNvZGVkYXRhKCk7Ci1leHRlcm4gdm9pZCBpbml0emxpYigpOwotI2lmZGVmIFVTRV9TT0NLRVQKLWV4dGVybiB2b2lkIGluaXRfc29ja2V0KCk7Ci1leHRlcm4gdm9pZCBpbml0c2VsZWN0KCk7Ci0jZW5kaWYKLSNlbmRpZgotLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCi0KLWV4dGVybiB2b2lkIFB5TWFyc2hhbF9Jbml0KCk7Ci1leHRlcm4gdm9pZCBpbml0aW1wKCk7Ci1leHRlcm4gdm9pZCBpbml0Z2MoKTsKLQotc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW10gPSB7Ci0KLSAgICB7Im9zMiIsIGluaXRvczJ9LAotICAgIHsic2lnbmFsIiwgaW5pdHNpZ25hbH0sCi0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICB7Il90aHJlYWQiLCBpbml0X3RocmVhZH0sCi0jZW5kaWYKLSAgICB7Il9jb2RlY3MiLCBpbml0X2NvZGVjc30sCi0gICAgeyJfY3N2IiwgaW5pdF9jc3Z9LAotICAgIHsiX2xvY2FsZSIsIGluaXRfbG9jYWxlfSwKLSAgICB7Il9yYW5kb20iLCBpbml0X3JhbmRvbX0sCi0gICAgeyJfc3JlIiwgaW5pdF9zcmV9LAotICAgIHsiX3N5bXRhYmxlIiwgaW5pdF9zeW10YWJsZX0sCi0gICAgeyJfd2Vha3JlZiIsIGluaXRfd2Vha3JlZn0sCi0gICAgeyJhcnJheSIsIGluaXRhcnJheX0sCi0gICAgeyJiaW5hc2NpaSIsIGluaXRiaW5hc2NpaX0sCi0gICAgeyJjb2xsZWN0aW9ucyIsIGluaXRjb2xsZWN0aW9uc30sCi0gICAgeyJjbWF0aCIsIGluaXRjbWF0aH0sCi0gICAgeyJkYXRldGltZSIsIGluaXRkYXRldGltZX0sCi0gICAgeyJkbCIsIGluaXRkbH0sCi0gICAgeyJlcnJubyIsIGluaXRlcnJub30sCi0gICAgeyJmY250bCIsIGluaXRmY250bH0sCi0gICAgeyJfZnVuY3Rvb2xzIiwgaW5pdF9mdW5jdG9vbHN9LAotICAgIHsiX2hlYXBxIiwgaW5pdF9oZWFwcX0sCi0gICAgeyJpbWFnZW9wIiwgaW5pdGltYWdlb3B9LAotICAgIHsiaXRlcnRvb2xzIiwgaW5pdGl0ZXJ0b29sc30sCi0gICAgeyJtYXRoIiwgaW5pdG1hdGh9LAotICAgIHsib3BlcmF0b3IiLCBpbml0b3BlcmF0b3J9LAotICAgIHsiX3NoYTI1NiIsIGluaXRfc2hhMjU2fSwKLSAgICB7Il9zaGE1MTIiLCBpbml0X3NoYTUxMn0sCi0gICAgeyJfc3RydWN0IiwgaW5pdF9zdHJ1Y3R9LAotICAgIHsidGVybWlvcyIsIGluaXR0ZXJtaW9zfSwKLSAgICB7InRpbWUiLCBpbml0dGltZX0sCi0gICAgeyJ4eHN1YnR5cGUiLCBpbml0eHhzdWJ0eXBlfSwKLSAgICB7InppcGltcG9ydCIsIGluaXR6aXBpbXBvcnR9LAotI2lmICFIQVZFX0RZTkFNSUNfTE9BRElORwotICAgIHsiX2N1cnNlcyIsIGluaXRfY3Vyc2VzfSwKLSAgICB7Il9jdXJzZXNfcGFuZWwiLCBpbml0X2N1cnNlc19wYW5lbH0sCi0gICAgeyJfdGVzdGNhcGkiLCBpbml0X3Rlc3RjYXBpfSwKLSAgICB7ImJ6MiIsIGluaXRiejJ9LAotICAgIHsiZnBlY3RsIiwgaW5pdGZwZWN0bH0sCi0gICAgeyJmcGV0ZXN0IiwgaW5pdGZwZXRlc3R9LAotICAgIHsicGFyc2VyIiwgaW5pdHBhcnNlcn0sCi0gICAgeyJwd2QiLCBpbml0cHdkfSwKLSAgICB7InVuaWNvZGVkYXRhIiwgaW5pdHVuaWNvZGVkYXRhfSwKLSAgICB7InpsaWIiLCBpbml0emxpYn0sCi0jaWZkZWYgVVNFX1NPQ0tFVAotICAgIHsiX3NvY2tldCIsIGluaXRfc29ja2V0fSwKLSAgICB7InNlbGVjdCIsIGluaXRzZWxlY3R9LAotI2VuZGlmCi0jZW5kaWYKLS8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMiAtLSAqLwotCi0gICAgLyogVGhpcyBtb2R1bGUgImxpdmVzIGluIiB3aXRoIG1hcnNoYWwuYyAqLwotICAgIHsibWFyc2hhbCIsIFB5TWFyc2hhbF9Jbml0fSwKLQotICAgIC8qIFRoaXMgbGl2ZXMgaXQgd2l0aCBpbXBvcnQuYyAqLwotICAgIHsiX2ltcCIsIGluaXRpbXB9LAotCi0gICAgLyogVGhlc2UgZW50cmllcyBhcmUgaGVyZSBmb3Igc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzICovCi0gICAgeyJidWlsdGlucyIsIE5VTEx9LAotICAgIHsic3lzIiwgTlVMTH0sCi0KLSAgICAvKiBUaGlzIGxpdmVzIGluIGdjbW9kdWxlLmMgKi8KLSAgICB7ImdjIiwgaW5pdGdjfSwKLQotICAgIC8qIFNlbnRpbmVsICovCi0gICAgezAsIDB9Ci19OwpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2RsZmNuLmMgYi9QQy9vczJlbXgvZGxmY24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkYTljZC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZGxmY24uYworKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0vKiAtKi0gQyAtKi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAxOTkxLTE5OTUgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLCBBbXN0ZXJkYW0sCi1UaGUgTmV0aGVybGFuZHMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKLUNlbnRydW0gb3IgQ1dJIG9yIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcyBvcgotQ05SSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCi1wZXJtaXNzaW9uLgotCi1XaGlsZSBDV0kgaXMgdGhlIGluaXRpYWwgc291cmNlIGZvciB0aGlzIHNvZnR3YXJlLCBhIG1vZGlmaWVkIHZlcnNpb24KLWlzIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMKLShDTlJJKSBhdCB0aGUgSW50ZXJuZXQgYWRkcmVzcyBmdHA6Ly9mdHAucHl0aG9uLm9yZy4KLQotU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEFORCBDTlJJIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEgKLVJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NICi1DRU5UUlVNIE9SIENOUkkgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi1QUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgotVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgotUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGxpYnJhcnkgaW1wbGVtZW50cyBkbG9wZW4oKSAtIFVuaXgtbGlrZSBkeW5hbWljIGxpbmtpbmcKLSAqIGVtdWxhdGlvbiBmdW5jdGlvbnMgZm9yIE9TLzIgdXNpbmcgRG9zTG9hZE1vZHVsZSgpIGFuZCBjb21wYW55LgotICovCi0KLSNkZWZpbmUgSU5DTF9ET1MKLSNkZWZpbmUgSU5DTF9ET1NFUlJPUlMKLSNkZWZpbmUgSU5DTF9ET1NTRVNNR1IKLSNkZWZpbmUgSU5DTF9XSU5QUk9HUkFNTElTVAotI2RlZmluZSBJTkNMX1dJTkZSQU1FTUdSCi0jaW5jbHVkZSA8b3MyLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hbGxvYy5oPgotCi10eXBlZGVmIHN0cnVjdCBfdHJhY2tfcmVjIHsKLSAgICBjaGFyICpuYW1lOwotICAgIEhNT0RVTEUgaGFuZGxlOwotICAgIHZvaWQgKmlkOwotICAgIHN0cnVjdCBfdHJhY2tfcmVjICpuZXh0OwotfSB0RExMY2hhaW4sICpETExjaGFpbjsKLQotc3RhdGljIERMTGNoYWluIGRsbG9hZCA9IE5VTEw7ICAvKiBBIHNpbXBsZSBjaGFpbmVkIGxpc3Qgb2YgRExMIG5hbWVzICovCi1zdGF0aWMgY2hhciBkbGVyciBbMjU2XTsgICAgICAgIC8qIGxhc3QgZXJyb3IgdGV4dCBzdHJpbmcgKi8KLXN0YXRpYyB2b2lkICpsYXN0X2lkOwotCi1zdGF0aWMgRExMY2hhaW4gZmluZF9pZCh2b2lkICppZCkKLXsKLSAgICBETExjaGFpbiB0bXA7Ci0KLSAgICBmb3IgKHRtcCA9IGRsbG9hZDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCi0gICAgICAgIGlmIChpZCA9PSB0bXAtPmlkKQotICAgICAgICAgICAgcmV0dXJuIHRtcDsKLQotICAgIHJldHVybiBOVUxMOwotfQotCi0vKiBsb2FkIGEgZHluYW1pYy1saW5rIGxpYnJhcnkgYW5kIHJldHVybiBoYW5kbGUgKi8KLXZvaWQgKmRsb3BlbihjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzKQotewotICAgIEhNT0RVTEUgaG07Ci0gICAgRExMY2hhaW4gdG1wOwotICAgIGNoYXIgZXJyWzI1Nl07Ci0gICAgY2hhciAqZXJydHh0OwotICAgIGludCByYyA9IDAsIHNldF9jaGFpbiA9IDA7Ci0KLSAgICBmb3IgKHRtcCA9IGRsbG9hZDsgdG1wOyB0bXAgPSB0bXAtPm5leHQpCi0gICAgICAgIGlmIChzdHJuaWNtcCh0bXAtPm5hbWUsIGZpbGVuYW1lLCA5OTkpID09IDApCi0gICAgICAgICAgICBicmVhazsKLQotICAgIGlmICghdG1wKQotICAgIHsKLSAgICAgICAgdG1wID0gKERMTGNoYWluKSBtYWxsb2Moc2l6ZW9mKHRETExjaGFpbikpOwotICAgICAgICBpZiAoIXRtcCkKLSAgICAgICAgICAgIGdvdG8gbm9tZW07Ci0gICAgICAgIHRtcC0+bmFtZSA9IHN0cmR1cChmaWxlbmFtZSk7Ci0gICAgICAgIHRtcC0+bmV4dCA9IGRsbG9hZDsKLSAgICAgICAgc2V0X2NoYWluID0gMTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHJjID0gRG9zTG9hZE1vZHVsZSgoUFNaKSZlcnIsIHNpemVvZihlcnIpLCBmaWxlbmFtZSwgJmhtKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgTk9fRVJST1I6Ci0gICAgICAgICAgICB0bXAtPmhhbmRsZSA9IGhtOwotICAgICAgICAgICAgaWYgKHNldF9jaGFpbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkbwotICAgICAgICAgICAgICAgICAgICBsYXN0X2lkKys7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChsYXN0X2lkID09IDApIHx8IChmaW5kX2lkKGxhc3RfaWQpKSk7Ci0gICAgICAgICAgICAgICAgdG1wLT5pZCA9IGxhc3RfaWQ7Ci0gICAgICAgICAgICAgICAgZGxsb2FkID0gdG1wOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRtcC0+aWQ7Ci0gICAgICAgIGNhc2UgRVJST1JfRklMRV9OT1RfRk9VTkQ6Ci0gICAgICAgIGNhc2UgRVJST1JfUEFUSF9OT1RfRk9VTkQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAibW9kdWxlIGAlcycgbm90IGZvdW5kIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVM6Ci0gICAgICAgIGNhc2UgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6Ci0gICAgICAgIGNhc2UgRVJST1JfU0hBUklOR19CVUZGRVJfRVhDRUVERUQ6Ci1ub21lbToKLSAgICAgICAgICAgIGVycnR4dCA9ICJvdXQgb2Ygc3lzdGVtIHJlc291cmNlcyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9BQ0NFU1NfREVOSUVEOgotICAgICAgICAgICAgZXJydHh0ID0gImFjY2VzcyBkZW5pZWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfQkFEX0ZPUk1BVDoKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX1NFR01FTlRfTlVNQkVSOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfT1JESU5BTDoKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX01PRFVMRVRZUEU6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9FWEVfU0lHTkFUVVJFOgotICAgICAgICBjYXNlIEVSUk9SX0VYRV9NQVJLRURfSU5WQUxJRDoKLSAgICAgICAgY2FzZSBFUlJPUl9JVEVSQVRFRF9EQVRBX0VYQ0VFRFNfNjRLOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTUlOQUxMT0NTSVpFOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfU0VHRFBMOgotICAgICAgICBjYXNlIEVSUk9SX0FVVE9EQVRBU0VHX0VYQ0VFRFNfNjRLOgotICAgICAgICBjYXNlIEVSUk9SX1JFTE9DU1JDX0NIQUlOX0VYQ0VFRFNfU0VHTElNSVQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiaW52YWxpZCBtb2R1bGUgZm9ybWF0IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTkFNRToKLSAgICAgICAgICAgIGVycnR4dCA9ICJmaWxlbmFtZSBkb2Vzbid0IG1hdGNoIG1vZHVsZSBuYW1lIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OOgotICAgICAgICBjYXNlIEVSUk9SX0xPQ0tfVklPTEFUSU9OOgotICAgICAgICAgICAgZXJydHh0ID0gInNoYXJpbmcgdmlvbGF0aW9uIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX0lOSVRfUk9VVElORV9GQUlMRUQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAibW9kdWxlIGluaXRpYWxpemF0aW9uIGZhaWxlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJjYXVzZSBgJXMnLCBlcnJvciBjb2RlID0gJWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHNucHJpbnRmKGRsZXJyLCBzaXplb2YoZGxlcnIpLCBlcnJ0eHQsICZlcnIsIHJjKTsKLSAgICBpZiAodG1wKQotICAgIHsKLSAgICAgICAgaWYgKHRtcC0+bmFtZSkKLSAgICAgICAgICAgIGZyZWUodG1wLT5uYW1lKTsKLSAgICAgICAgZnJlZSh0bXApOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYHN5bWJvbCcgaW4gRExMICovCi12b2lkICpkbHN5bSh2b2lkICpoYW5kbGUsIGNoYXIgKnN5bWJvbCkKLXsKLSAgICBpbnQgcmMgPSAwOwotICAgIFBGTiBhZGRyOwotICAgIGNoYXIgKmVycnR4dDsKLSAgICBpbnQgc3ltb3JkID0gMDsKLSAgICBETExjaGFpbiB0bXAgPSBmaW5kX2lkKGhhbmRsZSk7Ci0KLSAgICBpZiAoIXRtcCkKLSAgICAgICAgZ290byBpbnZfaGFuZGxlOwotCi0gICAgaWYgKCpzeW1ib2wgPT0gJyMnKQotICAgICAgICBzeW1vcmQgPSBhdG9pKHN5bWJvbCArIDEpOwotCi0gICAgc3dpdGNoIChyYyA9IERvc1F1ZXJ5UHJvY0FkZHIodG1wLT5oYW5kbGUsIHN5bW9yZCwgc3ltYm9sLCAmYWRkcikpCi0gICAgewotICAgICAgICBjYXNlIE5PX0VSUk9SOgotICAgICAgICAgICAgcmV0dXJuICh2b2lkICopYWRkcjsKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0hBTkRMRToKLWludl9oYW5kbGU6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiaW52YWxpZCBtb2R1bGUgaGFuZGxlIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX1BST0NfTk9UX0ZPVU5EOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTkFNRToKLSAgICAgICAgICAgIGVycnR4dCA9ICJubyBzeW1ib2wgYCVzJyBpbiBtb2R1bGUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAic3ltYm9sIGAlcycsIGVycm9yIGNvZGUgPSAlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc25wcmludGYoZGxlcnIsIHNpemVvZihkbGVyciksIGVycnR4dCwgc3ltYm9sLCByYyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGZyZWUgZHluYW1pY2FsbHktbGlua2VkIGxpYnJhcnkgKi8KLWludCBkbGNsb3NlKHZvaWQgKmhhbmRsZSkKLXsKLSAgICBpbnQgcmM7Ci0gICAgRExMY2hhaW4gdG1wID0gZmluZF9pZChoYW5kbGUpOwotCi0gICAgaWYgKCF0bXApCi0gICAgICAgIGdvdG8gaW52X2hhbmRsZTsKLQotICAgIHN3aXRjaCAocmMgPSBEb3NGcmVlTW9kdWxlKHRtcC0+aGFuZGxlKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgTk9fRVJST1I6Ci0gICAgICAgICAgICBmcmVlKHRtcC0+bmFtZSk7Ci0gICAgICAgICAgICBkbGxvYWQgPSB0bXAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0hBTkRMRToKLWludl9oYW5kbGU6Ci0gICAgICAgICAgICBzdHJjcHkoZGxlcnIsICJpbnZhbGlkIG1vZHVsZSBoYW5kbGUiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0FDQ0VTUzoKLSAgICAgICAgICAgIHN0cmNweShkbGVyciwgImFjY2VzcyBkZW5pZWQiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci19Ci0KLS8qIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGxhc3Qgb2NjdXJyZWQgZGwgZXJyb3IgKi8KLWNoYXIgKmRsZXJyb3IoKQotewotICAgIHJldHVybiBkbGVycjsKLX0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9kbGZjbi5oIGIvUEMvb3MyZW14L2RsZmNuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3M2FlNjkuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2RsZmNuLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKiAtKi0gQyAtKi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAxOTkxLTE5OTUgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLCBBbXN0ZXJkYW0sCi1UaGUgTmV0aGVybGFuZHMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKLUNlbnRydW0gb3IgQ1dJIG9yIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcyBvcgotQ05SSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCi1wZXJtaXNzaW9uLgotCi1XaGlsZSBDV0kgaXMgdGhlIGluaXRpYWwgc291cmNlIGZvciB0aGlzIHNvZnR3YXJlLCBhIG1vZGlmaWVkIHZlcnNpb24KLWlzIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMKLShDTlJJKSBhdCB0aGUgSW50ZXJuZXQgYWRkcmVzcyBmdHA6Ly9mdHAucHl0aG9uLm9yZy4KLQotU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEFORCBDTlJJIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEgKLVJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NICi1DRU5UUlVNIE9SIENOUkkgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi1QUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgotVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgotUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGxpYnJhcnkgaW1wbGVtZW50cyBkbG9wZW4oKSAtIFVuaXgtbGlrZSBkeW5hbWljIGxpbmtpbmcKLSAqIGVtdWxhdGlvbiBmdW5jdGlvbnMgZm9yIE9TLzIgdXNpbmcgRG9zTG9hZE1vZHVsZSgpIGFuZCBjb21wYW55LgotICovCi0KLSNpZm5kZWYgX0RMRkNOX0gKLSNkZWZpbmUgX0RMRkNOX0gKLQotLyogbG9hZCBhIGR5bmFtaWMtbGluayBsaWJyYXJ5IGFuZCByZXR1cm4gaGFuZGxlICovCi12b2lkICpkbG9wZW4oY2hhciAqZmlsZW5hbWUsIGludCBmbGFncyk7Ci0KLS8qIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGBzeW1ib2wnIGluIERMTCAqLwotdm9pZCAqZGxzeW0odm9pZCAqaGFuZGxlLCBjaGFyICpzeW1ib2wpOwotCi0vKiBmcmVlIGR5bmFtaWNhbGx5LWxpbmtlZCBsaWJyYXJ5ICovCi1pbnQgZGxjbG9zZSh2b2lkICpoYW5kbGUpOwotCi0vKiByZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyBsYXN0IG9jY3VycmVkIGRsIGVycm9yICovCi1jaGFyICpkbGVycm9yKHZvaWQpOwotCi0jZW5kaWYgLyogIV9ETEZDTl9IICovCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvZGxsZW50cnkuYyBiL1BDL29zMmVteC9kbGxlbnRyeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2NjYTFjLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9kbGxlbnRyeS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgUHl0aG9uIDIuMyBjb3JlIERMTC4KLSAqLwotCi0jZGVmaW5lIE5VTEwgMAotCi0jZGVmaW5lIFJFRihzKSAgZXh0ZXJuIHZvaWQgcygpOyB2b2lkICpfX19fcmVmXyMjcyA9ICZzOwotCi0vKiBNYWtlIHJlZmVyZW5jZXMgdG8gaW1wb3J0ZWQgc3ltYm9scyB0byBwdWxsIHRoZW0gZnJvbSBzdGF0aWMgbGlicmFyeSAqLwotUkVGKFB5X01haW4pOwotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLWV4dGVybiBpbnQgX0NSVF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX0NSVF90ZXJtKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19jdG9yZHRvckluaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2N0b3JkdG9yVGVybSh2b2lkKTsKLQotdW5zaWduZWQgbG9uZyBfRExMX0luaXRUZXJtKHVuc2lnbmVkIGxvbmcgbW9kX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBmbGFnKQotewotICAgIHN3aXRjaCAoZmxhZykKLSAgICB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGlmIChfQ1JUX2luaXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIF9fY3RvcmR0b3JJbml0KCk7Ci0KLSAgICAgICAgICAgIC8qIElnbm9yZSBmYXRhbCBzaWduYWxzICovCi0gICAgICAgICAgICBzaWduYWwoU0lHU0VHViwgU0lHX0lHTik7Ci0gICAgICAgICAgICBzaWduYWwoU0lHRlBFLCBTSUdfSUdOKTsKLQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgX19jdG9yZHRvclRlcm0oKTsKLSAgICAgICAgICAgIF9DUlRfdGVybSgpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9nZXRwYXRocC5jIGIvUEMvb3MyZW14L2dldHBhdGhwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNzM3NzQuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2dldHBhdGhwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTggKzAsMCBAQAotCi0vKiBSZXR1cm4gdGhlIGluaXRpYWwgbW9kdWxlIHNlYXJjaCBwYXRoLiAqLwotLyogVGhpcyB2ZXJzaW9uIHVzZWQgYnkgT1MvMitFTVggKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgUEFUSCBSVUxFUyBGT1IgT1MvMitFTVg6Ci0gICBUaGlzIGRlc2NyaWJlcyBob3cgc3lzLnBhdGggaXMgZm9ybWVkIG9uIE9TLzIrRU1YLiAgSXQgZGVzY3JpYmVzIHRoZQotICAgZnVuY3Rpb25hbGl0eSwgbm90IHRoZSBpbXBsZW1lbnRhdGlvbiAoaWUsIHRoZSBvcmRlciBpbiB3aGljaCB0aGVzZQotICAgYXJlIGFjdHVhbGx5IGZldGNoZWQgaXMgZGlmZmVyZW50KQotCi0gICAqIFB5dGhvbiBhbHdheXMgYWRkcyBhbiBlbXB0eSBlbnRyeSBhdCB0aGUgc3RhcnQsIHdoaWNoIGNvcnJlc3BvbmRzCi0gICAgIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLQotICAgKiBJZiB0aGUgUFlUSE9OUEFUSCBlbnYuIHZhci4gZXhpc3RzLCBpdHMgZW50cmllcyBhcmUgYWRkZWQgbmV4dC4KLQotICAgKiBXZSBhdHRlbXB0IHRvIGxvY2F0ZSB0aGUgIlB5dGhvbiBIb21lIiAtIGlmIHRoZSBQWVRIT05IT01FIGVudiB2YXIKLSAgICAgaXMgc2V0LCB3ZSBiZWxpZXZlIGl0LiAgT3RoZXJ3aXNlLCB3ZSB1c2UgdGhlIHBhdGggb2Ygb3VyIGhvc3QgLkVYRSdzCi0gICAgIHRvIHRyeSBhbmQgbG9jYXRlIG91ciAibGFuZG1hcmsiIChsaWJcXG9zLnB5KSBhbmQgZGVkdWNlIG91ciBob21lLgotICAgICAtIElmIHdlIERPIGhhdmUgYSBQeXRob24gSG9tZTogVGhlIHJlbGV2YW50IHN1Yi1kaXJlY3RvcmllcyAoTGliLAotICAgICAgIHBsYXQtd2luLCBldGMpIGFyZSBiYXNlZCBvbiB0aGUgUHl0aG9uIEhvbWUKLSAgICAgLSBJZiB3ZSBETyBOT1QgaGF2ZSBhIFB5dGhvbiBIb21lLCB0aGUgY29yZSBQeXRob24gUGF0aCBpcwotICAgICAgIGxvYWRlZCBmcm9tIHRoZSByZWdpc3RyeS4gIFRoaXMgaXMgdGhlIG1haW4gUHl0aG9uUGF0aCBrZXksCi0gICAgICAgYW5kIGJvdGggSEtMTSBhbmQgSEtDVSBhcmUgY29tYmluZWQgdG8gZm9ybSB0aGUgcGF0aCkKLQotICAgKiBJZmYgLSB3ZSBjYW4gbm90IGxvY2F0ZSB0aGUgUHl0aG9uIEhvbWUsIGFuZCBoYXZlIG5vdCBoYWQgYSBQWVRIT05QQVRICi0gICAgIHNwZWNpZmllZCAoaWUsIHdlIGhhdmUgX25vdGhpbmdfIHdlIGNhbiBhc3N1bWUgaXMgYSBnb29kIHBhdGgpLCBhCi0gICAgIGRlZmF1bHQgcGF0aCB3aXRoIHJlbGF0aXZlIGVudHJpZXMgaXMgdXNlZCAoZWcuIC5cTGliOy5ccGxhdC13aW4sIGV0YykKLQotCi0gIFRoZSBlbmQgcmVzdWx0IG9mIGFsbCB0aGlzIGlzOgotICAqIFdoZW4gcnVubmluZyBweXRob24uZXhlLCBvciBhbnkgb3RoZXIgLmV4ZSBpbiB0aGUgbWFpbiBQeXRob24gZGlyZWN0b3J5Ci0gICAgKGVpdGhlciBhbiBpbnN0YWxsZWQgdmVyc2lvbiwgb3IgZGlyZWN0bHkgZnJvbSB0aGUgUENidWlsZCBkaXJlY3RvcnkpLAotICAgIHRoZSBjb3JlIHBhdGggaXMgZGVkdWNlZC4KLQotICAqIFdoZW4gUHl0aG9uIGlzIGhvc3RlZCBpbiBhbm90aGVyIGV4ZSAoZGlmZmVyZW50IGRpcmVjdG9yeSwgZW1iZWRkZWQgdmlhCi0gICAgQ09NLCBldGMpLCB0aGUgUHl0aG9uIEhvbWUgd2lsbCBub3QgYmUgZGVkdWNlZCwgc28gdGhlIGNvcmUgcGF0aCBmcm9tCi0gICAgdGhlIHJlZ2lzdHJ5IGlzIHVzZWQuICBPdGhlciAiYXBwbGljYXRpb24gcGF0aHMgImluIHRoZSByZWdpc3RyeSBhcmUKLSAgICBhbHdheXMgcmVhZC4KLQotICAqIElmIFB5dGhvbiBjYW4ndCBmaW5kIGl0cyBob21lIGFuZCB0aGVyZSBpcyBubyByZWdpc3RyeSAoZWcsIGZyb3plbgotICAgIGV4ZSwgc29tZSB2ZXJ5IHN0cmFuZ2UgaW5zdGFsbGF0aW9uIHNldHVwKSB5b3UgZ2V0IGEgcGF0aCB3aXRoCi0gICAgc29tZSBkZWZhdWx0LCBidXQgcmVsYXRpdmUsIHBhdGhzLgotCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgIm9zZGVmcy5oIgotCi0jaWZuZGVmIFBZT1NfT1MyCi0jZXJyb3IgVGhpcyBmaWxlIG9ubHkgY29tcGlsYWJsZSBvbiBPUy8yCi0jZW5kaWYKLQotI2RlZmluZSBJTkNMX0RPUwotI2luY2x1ZGUgPG9zMi5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZiAvKiBIQVZFX1VOSVNURF9IICovCi0KLS8qIFNlYXJjaCBpbiBzb21lIGNvbW1vbiBsb2NhdGlvbnMgZm9yIHRoZSBhc3NvY2lhdGVkIFB5dGhvbiBsaWJyYXJpZXMuCi0gKgotICogUHlfR2V0UGF0aCgpIHRyaWVzIHRvIHJldHVybiBhIHNlbnNpYmxlIFB5dGhvbiBtb2R1bGUgc2VhcmNoIHBhdGguCi0gKgotICogVGhlIGFwcHJvYWNoIGlzIGFuIGFkYXB0YXRpb24gZm9yIFdpbmRvd3Mgb2YgdGhlIHN0cmF0ZWd5IHVzZWQgaW4KLSAqIC4uL01vZHVsZXMvZ2V0cGF0aC5jOyBpdCB1c2VzIHRoZSBXaW5kb3dzIFJlZ2lzdHJ5IGFzIG9uZSBvZiBpdHMKLSAqIGluZm9ybWF0aW9uIHNvdXJjZXMuCi0gKi8KLQotI2lmbmRlZiBMQU5ETUFSSwotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIExBTkRNQVJLICJsaWIvb3MucHkiCi0jZWxzZQotI2RlZmluZSBMQU5ETUFSSyAibGliXFxvcy5weSIKLSNlbmRpZgotI2VuZGlmCi0KLXN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwotCi0KLXN0YXRpYyBpbnQKLWlzX3NlcChjaGFyIGNoKSAvKiBkZXRlcm1pbmUgaWYgImNoIiBpcyBhIHNlcGFyYXRvciBjaGFyYWN0ZXIgKi8KLXsKLSNpZmRlZiBBTFRTRVAKLSAgICByZXR1cm4gY2ggPT0gU0VQIHx8IGNoID09IEFMVFNFUDsKLSNlbHNlCi0gICAgcmV0dXJuIGNoID09IFNFUDsKLSNlbmRpZgotfQotCi0vKiBhc3N1bWVzICdkaXInIG51bGwgdGVybWluYXRlZCBpbiBib3VuZHMuCi0gKiBOZXZlciB3cml0ZXMgYmV5b25kIGV4aXN0aW5nIHRlcm1pbmF0b3IuCi0gKi8KLXN0YXRpYyB2b2lkCi1yZWR1Y2UoY2hhciAqZGlyKQotewotICAgIHNpemVfdCBpID0gc3RybGVuKGRpcik7Ci0gICAgd2hpbGUgKGkgPiAwICYmICFpc19zZXAoZGlyW2ldKSkKLSAgICAgICAgLS1pOwotICAgIGRpcltpXSA9ICdcMCc7Ci19Ci0KLXN0YXRpYyBpbnQKLWV4aXN0cyhjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgcmV0dXJuIHN0YXQoZmlsZW5hbWUsICZidWYpID09IDA7Ci19Ci0KLS8qIElzIG1vZHVsZSAgKGNoZWNrIGZvciAucHljLy5weW8gdG9vKQotICogQXNzdW1lcyAnZmlsZW5hbWUnIE1BWFBBVEhMRU4rMSBieXRlcyBsb25nIC0KLSAqIG1heSBleHRlbmQgJ2ZpbGVuYW1lJyBieSBvbmUgY2hhcmFjdGVyLgotICovCi1zdGF0aWMgaW50Ci1pc21vZHVsZShjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBpZiAoZXhpc3RzKGZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvKiBDaGVjayBmb3IgdGhlIGNvbXBpbGVkIHZlcnNpb24gb2YgcHJlZml4LiAqLwotICAgIGlmIChzdHJsZW4oZmlsZW5hbWUpIDwgTUFYUEFUSExFTikgewotICAgICAgICBzdHJjYXQoZmlsZW5hbWUsIFB5X09wdGltaXplRmxhZyA/ICJvIiA6ICJjIik7Ci0gICAgICAgIGlmIChleGlzdHMoZmlsZW5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKiBBZGQgYSBwYXRoIGNvbXBvbmVudCwgYnkgYXBwZW5kaW5nIHN0dWZmIHRvIGJ1ZmZlci4KLSAgIGJ1ZmZlciBtdXN0IGhhdmUgYXQgbGVhc3QgTUFYUEFUSExFTiArIDEgYnl0ZXMgYWxsb2NhdGVkLCBhbmQgY29udGFpbiBhCi0gICBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBubyBtb3JlIHRoYW4gTUFYUEFUSExFTiBjaGFyYWN0ZXJzIChub3QgY291bnRpbmcKLSAgIHRoZSB0cmFpbGluZyBOVUwpLiAgSXQncyBhIGZhdGFsIGVycm9yIGlmIGl0IGNvbnRhaW5zIGEgc3RyaW5nIGxvbmdlciB0aGFuCi0gICB0aGF0IChjYWxsZXJzIG11c3QgYmUgY2FyZWZ1bCEpLiAgSWYgdGhlc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQsIGl0J3MKLSAgIGd1YXJhbnRlZWQgdGhhdCBidWZmZXIgd2lsbCBzdGlsbCBiZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIG5vIG1vcmUKLSAgIHRoYW4gTUFYUEFUSExFTiBjaGFyYWN0ZXJzIGF0IGV4aXQuICBJZiBzdHVmZiBpcyB0b28gbG9uZywgb25seSBhcyBtdWNoIG9mCi0gICBzdHVmZiBhcyBmaXRzIHdpbGwgYmUgYXBwZW5kZWQuCi0qLwotCi1zdGF0aWMgdm9pZAotam9pbihjaGFyICpidWZmZXIsIGNoYXIgKnN0dWZmKQotewotICAgIHNpemVfdCBuLCBrOwotICAgIGlmIChpc19zZXAoc3R1ZmZbMF0pKQotICAgICAgICBuID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgbiA9IHN0cmxlbihidWZmZXIpOwotICAgICAgICBpZiAobiA+IDAgJiYgIWlzX3NlcChidWZmZXJbbi0xXSkgJiYgbiA8IE1BWFBBVEhMRU4pCi0gICAgICAgICAgICBidWZmZXJbbisrXSA9IFNFUDsKLSAgICB9Ci0gICAgaWYgKG4gPiBNQVhQQVRITEVOKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJidWZmZXIgb3ZlcmZsb3cgaW4gZ2V0cGF0aHAuYydzIGpvaW5wYXRoKCkiKTsKLSAgICBrID0gc3RybGVuKHN0dWZmKTsKLSAgICBpZiAobiArIGsgPiBNQVhQQVRITEVOKQotICAgICAgICBrID0gTUFYUEFUSExFTiAtIG47Ci0gICAgc3RybmNweShidWZmZXIrbiwgc3R1ZmYsIGspOwotICAgIGJ1ZmZlcltuK2tdID0gJ1wwJzsKLX0KLQotLyogZ290bGFuZG1hcmsgb25seSBjYWxsZWQgYnkgc2VhcmNoX2Zvcl9wcmVmaXgsIHdoaWNoIGVuc3VyZXMKLSAqICdwcmVmaXgnIGlzIG51bGwgdGVybWluYXRlZCBpbiBib3VuZHMuICBqb2luKCkgZW5zdXJlcwotICogJ2xhbmRtYXJrJyBjYW4gbm90IG92ZXJmbG93IHByZWZpeCBpZiB0b28gbG9uZy4KLSAqLwotc3RhdGljIGludAotZ290bGFuZG1hcmsoY2hhciAqbGFuZG1hcmspCi17Ci0gICAgaW50IG4sIG9rOwotCi0gICAgbiA9IHN0cmxlbihwcmVmaXgpOwotICAgIGpvaW4ocHJlZml4LCBsYW5kbWFyayk7Ci0gICAgb2sgPSBpc21vZHVsZShwcmVmaXgpOwotICAgIHByZWZpeFtuXSA9ICdcMCc7Ci0gICAgcmV0dXJuIG9rOwotfQotCi0vKiBhc3N1bWVzIGFyZ3YwX3BhdGggaXMgTUFYUEFUSExFTisxIGJ5dGVzIGxvbmcsIGFscmVhZHkgXDAgdGVybSdkLgotICogYXNzdW1wdGlvbiBwcm92aWRlZCBieSBvbmx5IGNhbGxlciwgY2FsY3VsYXRlX3BhdGgoKQotICovCi1zdGF0aWMgaW50Ci1zZWFyY2hfZm9yX3ByZWZpeChjaGFyICphcmd2MF9wYXRoLCBjaGFyICpsYW5kbWFyaykKLXsKLSAgICAvKiBTZWFyY2ggZnJvbSBhcmd2MF9wYXRoLCB1bnRpbCBsYW5kbWFyayBpcyBmb3VuZCAqLwotICAgIHN0cmNweShwcmVmaXgsIGFyZ3YwX3BhdGgpOwotICAgIGRvIHsKLSAgICAgICAgaWYgKGdvdGxhbmRtYXJrKGxhbmRtYXJrKSkKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICByZWR1Y2UocHJlZml4KTsKLSAgICB9IHdoaWxlIChwcmVmaXhbMF0pOwotICAgIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nZXRfcHJvZ3BhdGgodm9pZCkKLXsKLSAgICBleHRlcm4gY2hhciAqUHlfR2V0UHJvZ3JhbU5hbWUodm9pZCk7Ci0gICAgY2hhciAqcGF0aCA9IGdldGVudigiUEFUSCIpOwotICAgIGNoYXIgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwotCi0gICAgUFBJQiBwaWI7Ci0gICAgaWYgKChEb3NHZXRJbmZvQmxvY2tzKE5VTEwsICZwaWIpID09IDApICYmCi0gICAgICAgIChEb3NRdWVyeU1vZHVsZU5hbWUocGliLT5waWJfaG10ZSwgc2l6ZW9mKHByb2dwYXRoKSwgcHJvZ3BhdGgpID09IDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJvZyA9PSBOVUxMIHx8ICpwcm9nID09ICdcMCcpCi0gICAgICAgIHByb2cgPSAicHl0aG9uIjsKLQotICAgIC8qIElmIHRoZXJlIGlzIG5vIHNsYXNoIGluIHRoZSBhcmd2MCBwYXRoLCB0aGVuIHdlIGhhdmUgdG8KLSAgICAgKiBhc3N1bWUgcHl0aG9uIGlzIG9uIHRoZSB1c2VyJ3MgJFBBVEgsIHNpbmNlIHRoZXJlJ3Mgbm8KLSAgICAgKiBvdGhlciB3YXkgdG8gZmluZCBhIGRpcmVjdG9yeSB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uICBJZgotICAgICAqICRQQVRIIGlzbid0IGV4cG9ydGVkLCB5b3UgbG9zZS4KLSAgICAgKi8KLSNpZmRlZiBBTFRTRVAKLSAgICBpZiAoc3RyY2hyKHByb2csIFNFUCkgfHwgc3RyY2hyKHByb2csIEFMVFNFUCkpCi0jZWxzZQotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSkKLSNlbmRpZgotICAgICAgICBzdHJuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKLSAgICBlbHNlIGlmIChwYXRoKSB7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBjaGFyICpkZWxpbSA9IHN0cmNocihwYXRoLCBERUxJTSk7Ci0KLSAgICAgICAgICAgIGlmIChkZWxpbSkgewotICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIHBhdGg7Ci0gICAgICAgICAgICAgICAgLyogZW5zdXJlIHdlIGNhbid0IG92ZXJ3cml0ZSBidWZmZXIgKi8KLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICAgICAgICAgICAgICBsZW4gPSBtaW4oTUFYUEFUSExFTixsZW4pOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBsZW4gPSBNQVhQQVRITEVOIDwgbGVuID8gTUFYUEFUSExFTiA6IGxlbjsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHBhdGgsIGxlbik7Ci0gICAgICAgICAgICAgICAgKihwcm9ncGF0aCArIGxlbikgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHBhdGgsIE1BWFBBVEhMRU4pOwotCi0gICAgICAgICAgICAvKiBqb2luKCkgaXMgc2FmZSBmb3IgTUFYUEFUSExFTisxIHNpemUgYnVmZmVyICovCi0gICAgICAgICAgICBqb2luKHByb2dwYXRoLCBwcm9nKTsKLSAgICAgICAgICAgIGlmIChleGlzdHMocHJvZ3BhdGgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIWRlbGltKSB7Ci0gICAgICAgICAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aCA9IGRlbGltICsgMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHByb2dwYXRoWzBdID0gJ1wwJzsKLX0KLQotc3RhdGljIHZvaWQKLWNhbGN1bGF0ZV9wYXRoKHZvaWQpCi17Ci0gICAgY2hhciBhcmd2MF9wYXRoW01BWFBBVEhMRU4rMV07Ci0gICAgY2hhciAqYnVmOwotICAgIHNpemVfdCBidWZzejsKLSAgICBjaGFyICpweXRob25ob21lID0gUHlfR2V0UHl0aG9uSG9tZSgpOwotICAgIGNoYXIgKmVudnBhdGggPSBnZXRlbnYoIlBZVEhPTlBBVEgiKTsKLSAgICBjaGFyIHppcF9wYXRoW01BWFBBVEhMRU4rMV07Ci0gICAgc2l6ZV90IGxlbjsKLQotICAgIGdldF9wcm9ncGF0aCgpOwotICAgIC8qIHByb2dwYXRoIGd1YXJhbnRlZWQgXDAgdGVybWluYXRlZCBpbiBNQVhQQVRIKzEgYnl0ZXMuICovCi0gICAgc3RyY3B5KGFyZ3YwX3BhdGgsIHByb2dwYXRoKTsKLSAgICByZWR1Y2UoYXJndjBfcGF0aCk7Ci0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCB8fCAqcHl0aG9uaG9tZSA9PSAnXDAnKSB7Ci0gICAgICAgIGlmIChzZWFyY2hfZm9yX3ByZWZpeChhcmd2MF9wYXRoLCBMQU5ETUFSSykpCi0gICAgICAgICAgICBweXRob25ob21lID0gcHJlZml4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBweXRob25ob21lID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBzdHJuY3B5KHByZWZpeCwgcHl0aG9uaG9tZSwgTUFYUEFUSExFTik7Ci0KLSAgICBpZiAoZW52cGF0aCAmJiAqZW52cGF0aCA9PSAnXDAnKQotICAgICAgICBlbnZwYXRoID0gTlVMTDsKLQotICAgIC8qIENhbGN1bGF0ZSB6aXAgYXJjaGl2ZSBwYXRoICovCi0gICAgc3RybmNweSh6aXBfcGF0aCwgcHJvZ3BhdGgsIE1BWFBBVEhMRU4pOwotICAgIHppcF9wYXRoW01BWFBBVEhMRU5dID0gJ1wwJzsKLSAgICBsZW4gPSBzdHJsZW4oemlwX3BhdGgpOwotICAgIGlmIChsZW4gPiA0KSB7Ci0gICAgICAgIHppcF9wYXRoW2xlbi0zXSA9ICd6JzsgIC8qIGNoYW5nZSBlbmRpbmcgdG8gInppcCIgKi8KLSAgICAgICAgemlwX3BhdGhbbGVuLTJdID0gJ2knOwotICAgICAgICB6aXBfcGF0aFtsZW4tMV0gPSAncCc7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICB6aXBfcGF0aFswXSA9IDA7Ci0gICAgfQotCi0gICAgLyogV2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBwYXRoIGZyb20gdGhlIGZvbGxvd2luZyBwYXJ0cy4KLSAgICAgKiAoMSkgdGhlIFBZVEhPTlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIHNldDsKLSAgICAgKiAoMikgdGhlIHppcCBhcmNoaXZlIGZpbGUgcGF0aDsKLSAgICAgKiAoMykgdGhlIFBZVEhPTlBBVEggY29uZmlnIG1hY3JvLCB3aXRoIHRoZSBsZWFkaW5nICIuIgotICAgICAqICAgICBvZiBlYWNoIGNvbXBvbmVudCByZXBsYWNlZCB3aXRoIHB5dGhvbmhvbWUsIGlmIHNldDsKLSAgICAgKiAoNCkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlIChhcmd2MF9wYXRoKS4KLSAgICAgKiBUaGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGNhbGN1bGF0ZXMgIzMgZmlyc3QuCi0gICAgICovCi0KLSAgICAvKiBDYWxjdWxhdGUgc2l6ZSBvZiByZXR1cm4gYnVmZmVyICovCi0gICAgaWYgKHB5dGhvbmhvbWUgIT0gTlVMTCkgewotICAgICAgICBjaGFyICpwOwotICAgICAgICBidWZzeiA9IDE7Ci0gICAgICAgIGZvciAocCA9IFBZVEhPTlBBVEg7ICpwOyBwKyspIHsKLSAgICAgICAgICAgIGlmICgqcCA9PSBERUxJTSkKLSAgICAgICAgICAgICAgICBidWZzeisrOyAvKiBudW1iZXIgb2YgREVMSU0gcGx1cyBvbmUgKi8KLSAgICAgICAgfQotICAgICAgICBidWZzeiAqPSBzdHJsZW4ocHl0aG9uaG9tZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgYnVmc3ogPSAwOwotICAgIGJ1ZnN6ICs9IHN0cmxlbihQWVRIT05QQVRIKSArIDE7Ci0gICAgYnVmc3ogKz0gc3RybGVuKGFyZ3YwX3BhdGgpICsgMTsKLSAgICBidWZzeiArPSBzdHJsZW4oemlwX3BhdGgpICsgMTsKLSAgICBpZiAoZW52cGF0aCAhPSBOVUxMKQotICAgICAgICBidWZzeiArPSBzdHJsZW4oZW52cGF0aCkgKyAxOwotCi0gICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmID0gbWFsbG9jKGJ1ZnN6KTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICBpZiAoZW52cGF0aCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBlbnZpcm9ubWVudCAkUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gZW52cGF0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZGVmYXVsdCBzdGF0aWMgcGF0aC5cbiIpOwotICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUFlUSE9OUEFUSDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGVudnBhdGgpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgZW52cGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICB9Ci0gICAgaWYgKHppcF9wYXRoWzBdKSB7Ci0gICAgICAgIHN0cmNweShidWYsIHppcF9wYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLQotICAgIGlmIChweXRob25ob21lID09IE5VTEwpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgUFlUSE9OUEFUSCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgY2hhciAqcCA9IFBZVEhPTlBBVEg7Ci0gICAgICAgIGNoYXIgKnE7Ci0gICAgICAgIHNpemVfdCBuOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBxID0gc3RyY2hyKHAsIERFTElNKTsKLSAgICAgICAgICAgIGlmIChxID09IE5VTEwpCi0gICAgICAgICAgICAgICAgbiA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuID0gcS1wOwotICAgICAgICAgICAgaWYgKHBbMF0gPT0gJy4nICYmIGlzX3NlcChwWzFdKSkgewotICAgICAgICAgICAgICAgIHN0cmNweShidWYsIHB5dGhvbmhvbWUpOwotICAgICAgICAgICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICBuLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHJuY3B5KGJ1ZiwgcCwgbik7Ci0gICAgICAgICAgICBidWYgKz0gbjsKLSAgICAgICAgICAgIGlmIChxID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgICAgIHAgPSBxKzE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGFyZ3YwX3BhdGgpIHsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIHN0cmNweShidWYsIGFyZ3YwX3BhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICB9Ci0gICAgKmJ1ZiA9ICdcMCc7Ci19Ci0KLQotLyogRXh0ZXJuYWwgaW50ZXJmYWNlICovCi0KLWNoYXIgKgotUHlfR2V0UGF0aCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotICAgIHJldHVybiBtb2R1bGVfc2VhcmNoX3BhdGg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJlZml4KHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotY2hhciAqCi1QeV9HZXRFeGVjUHJlZml4KHZvaWQpCi17Ci0gICAgcmV0dXJuIFB5X0dldFByZWZpeCgpOwotfQotCi1jaGFyICoKLVB5X0dldFByb2dyYW1GdWxsUGF0aCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotICAgIHJldHVybiBwcm9ncGF0aDsKLX0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9weWNvbmZpZy5oIGIvUEMvb3MyZW14L3B5Y29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NjEwNWEuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L3B5Y29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotI2lmbmRlZiBQeV9DT05GSUdfSAotI2RlZmluZSBQeV9DT05GSUdfSAotCi0jZXJyb3IgIlBFUCAxMTogT1MvMiBpcyBub3cgdW5zdXBwb3J0ZWQsIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQiCi0KLS8qIGNvbmZpZy5oLgotICogQXQgc29tZSB0aW1lIGluIHRoZSBwYXN0LCBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieS9mcm9tIGNvbmZpZ3VyZS4KLSAqIG5vdyBtYWludGFpbmVkIG1hbnVhbGx5LgotICovCi0KLS8qIGJ1aWxkIGVudmlyb25tZW50ICovCi0jZGVmaW5lIFBMQVRGT1JNCSJvczJlbXgiCi0jZGVmaW5lIENPTVBJTEVSCSJbRU1YIEdDQyAiIF9fVkVSU0lPTl9fICJdIgotI2RlZmluZSBQWU9TX09TMgkxCi0jZGVmaW5lIFBZQ0NfR0NDCTEKLQotLyogZGVmYXVsdCBsb2NhdGlvbihzKSAqLwotI2lmbmRlZiBQUkVGSVgKLSNkZWZpbmUgUFJFRklYCQkiIgotI2VuZGlmCi0jaWZuZGVmIFBZVEhPTlBBVEgKLSNkZWZpbmUgUFlUSE9OUEFUSAkiLi9MaWI7Li9MaWIvcGxhdC0iIFBMQVRGT1JNIFwKLQkJCSI7Li9MaWIvbGliLWR5bmxvYWQ7Li9MaWIvc2l0ZS1wYWNrYWdlcyIKLSNlbmRpZgotCi0vKiBEZWJ1Z2dpbmcgKi8KLSNpZm5kZWYgUHlfREVCVUcKLS8qI2RlZmluZSBQeV9ERUJVRyAxKi8KLSNlbmRpZgotCi0vKiBpZiBidWlsZGluZyBhbiBleHRlbnNpb24gb3Igd3JhcHBlciBleGVjdXRhYmxlLAotICogbWFyayBQeXRob24gQVBJIHN5bWJvbHMgImV4dGVybiIgc28gdGhhdCBzeW1ib2xzCi0gKiBpbXBvcnRlZCBmcm9tIHRoZSBQeXRob24gY29yZSBETEwgYXJlbid0IGR1cGxpY2F0ZWQuCi0gKi8KLSNpZmRlZiBQeV9CVUlMRF9DT1JFCi0jICBkZWZpbmUgUHlBUElfRlVOQyhSVFlQRSkJUlRZUEUKLSNlbHNlCi0jICBkZWZpbmUgUHlBUElfRlVOQyhSVFlQRSkJZXh0ZXJuIFJUWVBFCi0jZW5kaWYKLSNkZWZpbmUgUHlBUElfREFUQShSVFlQRSkJZXh0ZXJuIFJUWVBFCi0jZGVmaW5lIFB5TU9ESU5JVF9GVU5DCXZvaWQKLQotLyogVXNlIE9TLzIgZmxhdm91ciBvZiB0aHJlYWRzICovCi0jZGVmaW5lIFdJVEhfVEhSRUFECTEKLSNkZWZpbmUgT1MyX1RIUkVBRFMJMQotCi0vKiBXZSB3YW50IHNvY2tldHMgKi8KLSNkZWZpbmUgVENQSVBWNAkJMQotI2RlZmluZSBVU0VfU09DS0VUCTEKLSNkZWZpbmUgc29ja2xlbl90CWludAotI2RlZmluZSBGRF9TRVRTSVpFCTEwMjQKLQotLyogZW5hYmxlIHRoZSBQeXRob24gb2JqZWN0IGFsbG9jYXRvciAqLwotI2RlZmluZQlXSVRIX1BZTUFMTE9DCTEKLQotLyogZW5hYmxlIHRoZSBHQyBtb2R1bGUgKi8KLSNkZWZpbmUgV0lUSF9DWUNMRV9HQwkxCi0KLS8qIERlZmluZSBpZiB5b3Ugd2FudCBkb2N1bWVudGF0aW9uIHN0cmluZ3MgaW4gZXh0ZW5zaW9uIG1vZHVsZXMgKi8KLSNkZWZpbmUgV0lUSF9ET0NfU1RSSU5HUyAxCi0KLS8qIFVuaWNvZGUgcmVsYXRlZCAqLwotI2RlZmluZSBQWV9VTklDT0RFX1RZUEUJd2NoYXJfdAotI2RlZmluZSBQeV9VTklDT0RFX1NJWkUgU0laRU9GX1NIT1JUCi0KLS8qIEVNWCBkZWZpbmVzIHNzaXplX3QgKi8KLSNkZWZpbmUgSEFWRV9TU0laRV9UCTEKLQotLyogc3lzdGVtIGNhcGFiaWxpdGllcyAqLwotI2RlZmluZSBIQVZFX1RUWU5BTUUJMQotI2RlZmluZSBIQVZFX1dBSVQJMQotI2RlZmluZSBIQVZFX0dFVEVHSUQgICAgMQotI2RlZmluZSBIQVZFX0dFVEVVSUQgICAgMQotI2RlZmluZSBIQVZFX0dFVEdJRCAgICAgMQotI2RlZmluZSBIQVZFX0dFVFBQSUQgICAgMQotI2RlZmluZSBIQVZFX0dFVFVJRCAgICAgMQotI2RlZmluZSBIQVZFX09QRU5ESVIgICAgMQotI2RlZmluZSBIQVZFX1BJUEUgICAgICAgMQotI2RlZmluZSBIQVZFX1BPUEVOICAgICAgMQotI2RlZmluZSBIQVZFX1NZU1RFTQkxCi0jZGVmaW5lIEhBVkVfVFRZTkFNRQkxCi0jZGVmaW5lIEhBVkVfRFlOQU1JQ19MT0FESU5HCTEKLQotLyogaWYgcG9ydCBvZiBHREJNIGluc3RhbGxlZCwgaXQgaW5jbHVkZXMgTkRCTSBlbXVsYXRpb24gKi8KLSNkZWZpbmUgSEFWRV9OREJNX0ggMQotCi0vKiBuZWVkIHRoaXMgZm9yIHNwYXdudiBjb2RlIGluIHBvc2l4bW9kdWxlIChjbG9uZWQgZnJvbSBXSU4zMiBkZWYnbikgKi8KLXR5cGVkZWYgbG9uZyBpbnRwdHJfdDsKLQotLyogd2UgZG9uJ3QgaGF2ZSB0bV96b25lIGJ1dCBkbyBoYXZlIHRoZSBleHRlcm5hbCBhcnJheSB0em5hbWUgKi8KLSNkZWZpbmUgSEFWRV9UWk5BTUUgMQotCi0vKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoaW50IG9yIHZvaWQpLiAqLwotI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLwotI2RlZmluZSBTVERDX0hFQURFUlMgMQotCi0vKiBEZWZpbmUgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCi0jZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCi0KLS8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSB0eXBlIGxvbmcgbG9uZy4gKi8KLSNkZWZpbmUgSEFWRV9MT05HX0xPTkcgMQotCi0vKiBEZWZpbmUgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBmdW5jdGlvbiBwcm90b3R5cGVzLiAqLwotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMgMQotCi0vKiBEZWZpbmUgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyB2YXJpYWJsZSBsZW5ndGggZnVuY3Rpb24gcHJvdG90eXBlcwotICogKGUuZy4gdm9pZCBmcHJpbnRmKEZJTEUgKiwgY2hhciAqLCAuLi4pOykgKmFuZCogPHN0ZGFyZy5oPi4KLSAqLwotI2RlZmluZSBIQVZFX1NUREFSR19QUk9UT1RZUEVTIDEKLQotLyogRGVmaW5lIGlmIG1hbGxvYygwKSByZXR1cm5zIGEgTlVMTCBwb2ludGVyLiAqLwotI2RlZmluZSBNQUxMT0NfWkVST19SRVRVUk5TX05VTEwgMQotCi0vKiBEZWZpbmUgdG8gZm9yY2UgdXNlIG9mIHRocmVhZC1zYWZlIGVycm5vLCBoX2Vycm5vLCBhbmQgb3RoZXIgZnVuY3Rpb25zLiAqLwotI2RlZmluZSBfUkVFTlRSQU5UIDEKLQotLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3NlbGVjdC5oPiBhbmQgPHN5cy90aW1lLmg+Ci0gKiAod2hpY2ggeW91IGNhbid0IG9uIFNDTyBPRFQgMy4wKS4KLSAqLwotI2RlZmluZSBTWVNfU0VMRUNUX1dJVEhfU1lTX1RJTUUgMQotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFuIG9mZl90LiAqLwotI2RlZmluZSBTSVpFT0ZfT0ZGX1QgNAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFuIHRpbWVfdC4gKi8KLSNkZWZpbmUgU0laRU9GX1RJTUVfVCA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBzaG9ydC4gKi8KLSNkZWZpbmUgU0laRU9GX1NIT1JUIDIKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGludC4gKi8KLSNkZWZpbmUgU0laRU9GX0lOVCA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBsb25nLiAqLwotI2RlZmluZSBTSVpFT0ZfTE9ORyA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBsb25nIGxvbmcuICovCi0jZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgdm9pZCAqLiAqLwotI2RlZmluZSBTSVpFT0ZfVk9JRF9QIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHNpemVfdC4gKi8KLSNkZWZpbmUgU0laRU9GX1NJWkVfVCA0Ci0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYWxhcm0gZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfQUxBUk0gMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGNsb2NrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0NMT0NLIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBkdXAyIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0RVUDIgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGV4ZWN2IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0VYRUNWIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzcGF3bnYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1BBV05WIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmbG9jayBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GTE9DSyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZm9yayBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GT1JLIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmc3luYyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GU1lOQyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZnRpbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRlRJTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZ0cnVuY2F0ZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GVFJVTkNBVEUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldGN3ZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBlZXJuYW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBFRVJOQU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwZ3JwIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBHUlAgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRQSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHB3ZW50IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBXRU5UIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR0aW1lb2ZkYXkgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR3ZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRXRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaHlwb3QgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfSFlQT1QgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGtpbGwgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfS0lMTCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbWVtbW92ZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NRU1NT1ZFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBta3RpbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTUtUSU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwYXVzZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9QQVVTRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgcHV0ZW52IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BVVEVOViAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2VsZWN0IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFTEVDVCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0Z2lkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVEdJRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0bG9jYWxlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0cGdpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRQR0lEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXR1aWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUVUlEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXR2YnVmIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFZCVUYgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNpZ2FjdGlvbiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmVycm9yIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkVSUk9SIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJmdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TVFJGVElNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGNnZXRwZ3JwIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1RDR0VUUEdSUCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGNzZXRwZ3JwIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1RDU0VUUEdSUCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdG1wZmlsZSBmdW5jdGlvbi4gICovCi0jZGVmaW5lIEhBVkVfVE1QRklMRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdGltZXMgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVElNRVMgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHRydW5jYXRlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1RSVU5DQVRFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB1bmFtZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9VTkFNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgd2FpdHBpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9XQUlUUElEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8Y29uaW8uaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9DT05JT19ICi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0RJUkVDVF9ICi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9ESVJFTlRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0VSUk5PX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9JT19ICi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG5jdXJzZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTkNVUlNFU19IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwcm9jZXNzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1BST0NFU1NfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHNpZ25hbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxlLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19GSUxFX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1BBUkFNX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3VuLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19VTl9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy93YWl0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfVU5JU1REX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9VVElNRV9IIDEKLQotLyogRU1YIGhhcyBhbiBzbnByaW50ZigpLiAqLwotI2RlZmluZSBIQVZFX1NOUFJJTlRGIDEKLQotI2VuZGlmIC8qICFQeV9DT05GSUdfSCAqLwotCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvcHl0aG9uMzMuZGVmIGIvUEMvb3MyZW14L3B5dGhvbjMzLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU2NzI2Yi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHl0aG9uMzMuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMTMxNCArMCwwIEBACi1MSUJSQVJZIHB5dGhvbjMzIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgCi1ERVNDUklQVElPTiAiUHl0aG9uIDIuNiBDb3JlIERMTCIgCi1QUk9UTU9ERSAKLURBVEEgTVVMVElQTEUgTk9OU0hBUkVEIAotRVhQT1JUUyAKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvbmZpZykKLSAgIl9QeUltcG9ydF9Jbml0dGFiIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGxmY24pCi07ICAiZGxvcGVuIgotOyAgImRsc3ltIgotOyAgImRsY2xvc2UiCi07ICAiZGxlcnJvciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldHBhdGhwKQotICAiUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoIgotICAiUHlfR2V0UHJlZml4IgotICAiUHlfR2V0RXhlY1ByZWZpeCIKLSAgIlB5X0dldFBhdGgiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRidWlsZGluZm8pCi0gICJQeV9HZXRCdWlsZEluZm8iCi0gICJfUHlfc3ZudmVyc2lvbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1haW4pCi0gICJQeV9NYWluIgotICAiUHlfR2V0QXJnY0FyZ3YiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhY2NlbGVyKQotICAiUHlHcmFtbWFyX0FkZEFjY2VsZXJhdG9ycyIKLSAgIlB5R3JhbW1hcl9SZW1vdmVBY2NlbGVyYXRvcnMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihncmFtbWFyMSkKLSAgIlB5R3JhbW1hcl9GaW5kREZBIgotICAiUHlHcmFtbWFyX0xhYmVsUmVwciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGxpc3Rub2RlKQotICAiUHlOb2RlX0xpc3RUcmVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobm9kZSkKLSAgIlB5Tm9kZV9OZXciCi0gICJQeU5vZGVfQWRkQ2hpbGQiCi0gICJQeU5vZGVfRnJlZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHBhcnNlcikKLSAgIlB5UGFyc2VyX0FkZFRva2VuIgotICAiUHlQYXJzZXJfTmV3IgotICAiUHlQYXJzZXJfRGVsZXRlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocGFyc2V0b2spCi0gICJQeVBhcnNlcl9QYXJzZVN0cmluZyIKLSAgIlB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZSIKLSAgIlB5UGFyc2VyX1BhcnNlRmlsZSIKLSAgIlB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzIgotICAiUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFncyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJpdHNldCkKLSAgIl9QeV9uZXdiaXRzZXQiCi0gICJfUHlfZGVsYml0c2V0IgotICAiX1B5X2FkZGJpdCIKLSAgIl9QeV9zYW1lYml0c2V0IgotICAiX1B5X21lcmdlYml0c2V0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWV0YWdyYW1tYXIpCi0gICJfUHlfbWV0YV9ncmFtbWFyIgotICAiUHlfbWV0YV9ncmFtbWFyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodG9rZW5pemVyKQotICAiUHlUb2tlbl9PbmVDaGFyIgotICAiUHlUb2tlbl9Ud29DaGFycyIKLSAgIlB5VG9rZW5fVGhyZWVDaGFycyIKLSAgIlB5VG9rZW5pemVyX0Zyb21TdHJpbmciCi0gICJQeVRva2VuaXplcl9GcmVlIgotICAiUHlUb2tlbml6ZXJfRnJvbUZpbGUiCi0gICJQeVRva2VuaXplcl9HZXQiCi0gICJfUHlQYXJzZXJfVG9rZW5OYW1lcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG15cmVhZGxpbmUpCi0gICJfUHlPU19SZWFkbGluZVRTdGF0ZSIKLSAgIlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIiCi0gICJQeU9TX1N0ZGlvUmVhZGxpbmUiCi0gICJQeU9TX1JlYWRsaW5lIgotICAiUHlPU19JbnB1dEhvb2siCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhYnN0cmFjdCkKLSAgIl9QeU9iamVjdF9MZW5ndGhIaW50IgotICAiUHlNYXBwaW5nX1NpemUiCi0gICJQeU9iamVjdF9DYWxsTWV0aG9kIgotICAiUHlPYmplY3RfR2V0SXRlbSIKLSAgIlB5U2VxdWVuY2VfR2V0SXRlbSIKLSAgIlB5T2JqZWN0X1NldEl0ZW0iCi0gICJQeVNlcXVlbmNlX1NldEl0ZW0iCi0gICJQeU9iamVjdF9EZWxJdGVtIgotICAiUHlTZXF1ZW5jZV9EZWxJdGVtIgotICAiUHlOdW1iZXJfTXVsdGlwbHkiCi0gICJQeU51bWJlcl9JblBsYWNlQWRkIgotICAiUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5IgotICAiUHlOdW1iZXJfSW50IgotICAiUHlOdW1iZXJfTG9uZyIKLSAgIlB5TnVtYmVyX0Zsb2F0IgotICAiUHlTZXF1ZW5jZV9Db25jYXQiCi0gICJQeVNlcXVlbmNlX1JlcGVhdCIKLSAgIlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdCIKLSAgIlB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdCIKLSAgIlB5U2VxdWVuY2VfR2V0U2xpY2UiCi0gICJQeVNlcXVlbmNlX1NldFNsaWNlIgotICAiUHlTZXF1ZW5jZV9UdXBsZSIKLSAgIlB5T2JqZWN0X0dldEl0ZXIiCi0gICJQeUl0ZXJfTmV4dCIKLSAgIlB5U2VxdWVuY2VfRmFzdCIKLSAgIl9QeVNlcXVlbmNlX0l0ZXJTZWFyY2giCi0gICJQeU9iamVjdF9DYWxsRnVuY3Rpb24iCi0gICJfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUIgotICAiX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQiCi0gICJQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyIKLSAgIlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MiCi0gICJQeU9iamVjdF9DbXAiCi0gICJQeU9iamVjdF9DYWxsIgotICAiUHlPYmplY3RfQ2FsbE9iamVjdCIKLSAgIlB5T2JqZWN0X1R5cGUiCi0gICJQeU9iamVjdF9TaXplIgotICAiUHlPYmplY3RfTGVuZ3RoIgotICAiUHlPYmplY3RfRGVsSXRlbVN0cmluZyIKLSAgIlB5T2JqZWN0X0FzQ2hhckJ1ZmZlciIKLSAgIlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlciIKLSAgIlB5T2JqZWN0X0FzUmVhZEJ1ZmZlciIKLSAgIlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIiCi0gICJQeU51bWJlcl9DaGVjayIKLSAgIlB5TnVtYmVyX0FkZCIKLSAgIlB5TnVtYmVyX1N1YnRyYWN0IgotICAiUHlOdW1iZXJfRGl2aWRlIgotICAiUHlOdW1iZXJfRmxvb3JEaXZpZGUiCi0gICJQeU51bWJlcl9UcnVlRGl2aWRlIgotICAiUHlOdW1iZXJfUmVtYWluZGVyIgotICAiUHlOdW1iZXJfRGl2bW9kIgotICAiUHlOdW1iZXJfUG93ZXIiCi0gICJQeU51bWJlcl9OZWdhdGl2ZSIKLSAgIlB5TnVtYmVyX1Bvc2l0aXZlIgotICAiUHlOdW1iZXJfQWJzb2x1dGUiCi0gICJQeU51bWJlcl9JbnZlcnQiCi0gICJQeU51bWJlcl9Mc2hpZnQiCi0gICJQeU51bWJlcl9Sc2hpZnQiCi0gICJQeU51bWJlcl9BbmQiCi0gICJQeU51bWJlcl9Yb3IiCi0gICJQeU51bWJlcl9PciIKLSAgIlB5TnVtYmVyX0luZGV4IgotICAiUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0IgotICAiUHlOdW1iZXJfSW5QbGFjZURpdmlkZSIKLSAgIlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZSIKLSAgIlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlciIKLSAgIlB5TnVtYmVyX0luUGxhY2VQb3dlciIKLSAgIlB5TnVtYmVyX0luUGxhY2VMc2hpZnQiCi0gICJQeU51bWJlcl9JblBsYWNlUnNoaWZ0IgotICAiUHlOdW1iZXJfSW5QbGFjZUFuZCIKLSAgIlB5TnVtYmVyX0luUGxhY2VYb3IiCi0gICJQeU51bWJlcl9JblBsYWNlT3IiCi0gICJQeVNlcXVlbmNlX0NoZWNrIgotICAiUHlTZXF1ZW5jZV9TaXplIgotICAiUHlTZXF1ZW5jZV9MZW5ndGgiCi0gICJQeVNlcXVlbmNlX0RlbFNsaWNlIgotICAiUHlTZXF1ZW5jZV9MaXN0IgotICAiUHlTZXF1ZW5jZV9Db3VudCIKLSAgIlB5U2VxdWVuY2VfQ29udGFpbnMiCi0gICJQeVNlcXVlbmNlX0luIgotICAiUHlTZXF1ZW5jZV9JbmRleCIKLSAgIlB5TWFwcGluZ19DaGVjayIKLSAgIlB5TWFwcGluZ19MZW5ndGgiCi0gICJQeU1hcHBpbmdfSGFzS2V5U3RyaW5nIgotICAiUHlNYXBwaW5nX0hhc0tleSIKLSAgIlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nIgotICAiUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmciCi0gICJQeU9iamVjdF9Jc0luc3RhbmNlIgotICAiUHlPYmplY3RfSXNTdWJjbGFzcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJvb2xvYmplY3QpCi0gICJQeUJvb2xfRnJvbUxvbmciCi0gICJQeUJvb2xfVHlwZSIKLSAgIl9QeV9aZXJvU3RydWN0IgotICAiX1B5X1RydWVTdHJ1Y3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihidWZmZXJvYmplY3QpCi0gICJQeUJ1ZmZlcl9Gcm9tT2JqZWN0IgotICAiUHlCdWZmZXJfRnJvbVJlYWRXcml0ZU9iamVjdCIKLSAgIlB5QnVmZmVyX0Zyb21NZW1vcnkiCi0gICJQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlTWVtb3J5IgotICAiUHlCdWZmZXJfTmV3IgotICAiUHlCdWZmZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNlbGxvYmplY3QpCi0gICJQeUNlbGxfTmV3IgotICAiUHlDZWxsX0dldCIKLSAgIlB5Q2VsbF9TZXQiCi0gICJQeUNlbGxfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNsYXNzb2JqZWN0KQotICAiUHlDbGFzc19OZXciCi0gICJQeUNsYXNzX0lzU3ViY2xhc3MiCi0gICJQeUluc3RhbmNlX05ldyIKLSAgIlB5SW5zdGFuY2VfTmV3UmF3IgotICAiUHlNZXRob2RfTmV3IgotICAiUHlNZXRob2RfRnVuY3Rpb24iCi0gICJQeU1ldGhvZF9TZWxmIgotICAiUHlNZXRob2RfQ2xhc3MiCi0gICJfUHlJbnN0YW5jZV9Mb29rdXAiCi0gICJQeU1ldGhvZF9GaW5pIgotICAiUHlDbGFzc19UeXBlIgotICAiUHlJbnN0YW5jZV9UeXBlIgotICAiUHlNZXRob2RfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNhcHN1bGUpCi0gICJQeUNhcHN1bGVfR2V0Q29udGV4dCIKLSAgIlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yIgotICAiUHlDYXBzdWxlX0dldE5hbWUiCi0gICJQeUNhcHN1bGVfR2V0UG9pbnRlciIKLSAgIlB5Q2Fwc3VsZV9JbXBvcnQiCi0gICJQeUNhcHN1bGVfSXNWYWxpZCIKLSAgIlB5Q2Fwc3VsZV9OZXciCi0gICJQeUNhcHN1bGVfU2V0Q29udGV4dCIKLSAgIlB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yIgotICAiUHlDYXBzdWxlX1NldE5hbWUiCi0gICJQeUNhcHN1bGVfU2V0UG9pbnRlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvYmplY3QpCi0gICJQeUNPYmplY3RfRnJvbVZvaWRQdHIiCi0gICJQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjIgotICAiUHlDT2JqZWN0X0FzVm9pZFB0ciIKLSAgIlB5Q09iamVjdF9HZXREZXNjIgotICAiUHlDT2JqZWN0X0ltcG9ydCIKLSAgIlB5Q09iamVjdF9TZXRWb2lkUHRyIgotICAiUHlDT2JqZWN0X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2Rlb2JqZWN0KQotICAiUHlDb2RlX05ldyIKLSAgIlB5Q29kZV9BZGRyMkxpbmUiCi0gICJQeUNvZGVfQ2hlY2tMaW5lTnVtYmVyIgotICAiUHlDb2RlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb21wbGV4b2JqZWN0KQotICAiX1B5X2NfcG93IgotICAiX1B5X2Nfc3VtIgotICAiX1B5X2NfZGlmZiIKLSAgIl9QeV9jX25lZyIKLSAgIl9QeV9jX3Byb2QiCi0gICJfUHlfY19xdW90IgotICAiUHlDb21wbGV4X0Zyb21DQ29tcGxleCIKLSAgIlB5Q29tcGxleF9Gcm9tRG91YmxlcyIKLSAgIlB5Q29tcGxleF9SZWFsQXNEb3VibGUiCi0gICJQeUNvbXBsZXhfSW1hZ0FzRG91YmxlIgotICAiUHlDb21wbGV4X0FzQ0NvbXBsZXgiCi0gICJQeUNvbXBsZXhfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGRlc2Nyb2JqZWN0KQotICAiUHlXcmFwcGVyX05ldyIKLSAgIlB5RGVzY3JfTmV3TWV0aG9kIgotICAiUHlEZXNjcl9OZXdDbGFzc01ldGhvZCIKLSAgIlB5RGVzY3JfTmV3TWVtYmVyIgotICAiUHlEZXNjcl9OZXdHZXRTZXQiCi0gICJQeURlc2NyX05ld1dyYXBwZXIiCi0gICJQeURpY3RQcm94eV9OZXciCi0gICJQeVdyYXBwZXJEZXNjcl9UeXBlIgotICAiUHlQcm9wZXJ0eV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGljdG9iamVjdCkKLSAgIlB5RGljdF9OZXciCi0gICJQeURpY3RfR2V0SXRlbSIKLSAgIlB5RGljdF9TZXRJdGVtIgotICAiUHlEaWN0X0RlbEl0ZW0iCi0gICJQeURpY3RfQ2xlYXIiCi0gICJQeURpY3RfTWVyZ2VGcm9tU2VxMiIKLSAgIlB5RGljdF9NZXJnZSIKLSAgIlB5RGljdF9LZXlzIgotICAiUHlEaWN0X1ZhbHVlcyIKLSAgIlB5RGljdF9Db250YWlucyIKLSAgIlB5RGljdF9OZXh0IgotICAiUHlEaWN0X0l0ZW1zIgotICAiUHlEaWN0X1NpemUiCi0gICJQeURpY3RfQ29weSIKLSAgIlB5RGljdF9VcGRhdGUiCi0gICJQeURpY3RfR2V0SXRlbVN0cmluZyIKLSAgIlB5RGljdF9TZXRJdGVtU3RyaW5nIgotICAiUHlEaWN0X0RlbEl0ZW1TdHJpbmciCi0gICJQeURpY3RfVHlwZSIKLSAgIlB5RGljdEl0ZXJLZXlfVHlwZSIKLSAgIlB5RGljdEl0ZXJWYWx1ZV9UeXBlIgotICAiUHlEaWN0SXRlckl0ZW1fVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGVudW1vYmplY3QpCi0gICJQeUVudW1fVHlwZSIKLSAgIlB5UmV2ZXJzZWRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZpbGVvYmplY3QpCi0gICJQeUZpbGVfRnJvbVN0cmluZyIKLSAgIlB5X1VuaXZlcnNhbE5ld2xpbmVGcmVhZCIKLSAgIlB5RmlsZV9HZXRMaW5lIgotICAiUHlGaWxlX1NvZnRTcGFjZSIKLSAgIlB5RmlsZV9Xcml0ZU9iamVjdCIKLSAgIlB5RmlsZV9Xcml0ZVN0cmluZyIKLSAgIlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IiCi0gICJQeV9Vbml2ZXJzYWxOZXdsaW5lRmdldHMiCi0gICJQeUZpbGVfU2V0QnVmU2l6ZSIKLSAgIlB5RmlsZV9TZXRFbmNvZGluZyIKLSAgIlB5RmlsZV9Gcm9tRmlsZSIKLSAgIlB5RmlsZV9Bc0ZpbGUiCi0gICJQeUZpbGVfTmFtZSIKLSAgIlB5RmlsZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmxvYXRvYmplY3QpCi0gICJQeUZsb2F0X0Zyb21TdHJpbmciCi0gICJQeUZsb2F0X0FzRG91YmxlIgotICAiUHlGbG9hdF9GaW5pIgotICAiX1B5RmxvYXRfUGFjazQiCi0gICJfUHlGbG9hdF9QYWNrOCIKLSAgIl9QeUZsb2F0X1VucGFjazQiCi0gICJfUHlGbG9hdF9VbnBhY2s4IgotICAiUHlGbG9hdF9Gcm9tRG91YmxlIgotICAiUHlGbG9hdF9Bc1JlcHJTdHJpbmciCi0gICJQeUZsb2F0X0FzU3RyaW5nIgotICAiX1B5RmxvYXRfSW5pdCIKLSAgIlB5RmxvYXRfQXNTdHJpbmdFeCIKLSAgIlB5RmxvYXRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZyYW1lb2JqZWN0KQotICAiUHlGcmFtZV9OZXciCi0gICJQeUZyYW1lX0Zhc3RUb0xvY2FscyIKLSAgIlB5RnJhbWVfTG9jYWxzVG9GYXN0IgotICAiX1B5RnJhbWVfSW5pdCIKLSAgIlB5RnJhbWVfRmluaSIKLSAgIlB5RnJhbWVfQmxvY2tTZXR1cCIKLSAgIlB5RnJhbWVfQmxvY2tQb3AiCi0gICJQeUZyYW1lX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmdW5jb2JqZWN0KQotICAiUHlGdW5jdGlvbl9OZXciCi0gICJQeUZ1bmN0aW9uX0dldENvZGUiCi0gICJQeUZ1bmN0aW9uX0dldEdsb2JhbHMiCi0gICJQeUZ1bmN0aW9uX0dldE1vZHVsZSIKLSAgIlB5RnVuY3Rpb25fR2V0RGVmYXVsdHMiCi0gICJQeUZ1bmN0aW9uX1NldERlZmF1bHRzIgotICAiUHlGdW5jdGlvbl9HZXRDbG9zdXJlIgotICAiUHlGdW5jdGlvbl9TZXRDbG9zdXJlIgotICAiUHlDbGFzc01ldGhvZF9OZXciCi0gICJQeVN0YXRpY01ldGhvZF9OZXciCi0gICJQeUZ1bmN0aW9uX1R5cGUiCi0gICJQeUNsYXNzTWV0aG9kX1R5cGUiCi0gICJQeVN0YXRpY01ldGhvZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2Vub2JqZWN0KQotICAiUHlHZW5fTmV3IgotICAiUHlHZW5fTmVlZHNGaW5hbGl6aW5nIgotICAiUHlHZW5fVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGludG9iamVjdCkKLSAgIlB5SW50X0FzTG9uZyIKLSAgIlB5SW50X0FzVW5zaWduZWRMb25nTWFzayIKLSAgIlB5SW50X0FzVW5zaWduZWRMb25nTG9uZ01hc2siCi0gICJQeUludF9Gcm9tU3RyaW5nIgotICAiUHlJbnRfQXNTc2l6ZV90IgotICAiUHlJbnRfRmluaSIKLSAgIlB5SW50X0Zyb21Vbmljb2RlIgotICAiUHlJbnRfRnJvbUxvbmciCi0gICJQeUludF9Gcm9tU2l6ZV90IgotICAiUHlJbnRfRnJvbVNzaXplX3QiCi0gICJQeUludF9HZXRNYXgiCi0gICJfUHlJbnRfSW5pdCIKLSAgIlB5SW50X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpdGVyb2JqZWN0KQotICAiUHlTZXFJdGVyX05ldyIKLSAgIlB5Q2FsbEl0ZXJfTmV3IgotICAiUHlTZXFJdGVyX1R5cGUiCi0gICJQeUNhbGxJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihsaXN0b2JqZWN0KQotICAiUHlMaXN0X05ldyIKLSAgIlB5TGlzdF9BcHBlbmQiCi0gICJQeUxpc3RfU2l6ZSIKLSAgIlB5TGlzdF9HZXRJdGVtIgotICAiUHlMaXN0X1NldEl0ZW0iCi0gICJQeUxpc3RfSW5zZXJ0IgotICAiUHlMaXN0X0dldFNsaWNlIgotICAiUHlMaXN0X1NldFNsaWNlIgotICAiUHlMaXN0X1NvcnQiCi0gICJQeUxpc3RfUmV2ZXJzZSIKLSAgIlB5TGlzdF9Bc1R1cGxlIgotICAiX1B5TGlzdF9FeHRlbmQiCi0gICJQeUxpc3RfRmluaSIKLSAgIlB5TGlzdF9UeXBlIgotICAiUHlMaXN0SXRlcl9UeXBlIgotICAiUHlMaXN0UmV2SXRlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobG9uZ29iamVjdCkKLSAgIlB5TG9uZ19Gcm9tRG91YmxlIgotICAiUHlMb25nX0FzTG9uZyIKLSAgIl9QeUxvbmdfQXNTc2l6ZV90IgotICAiUHlMb25nX0FzVW5zaWduZWRMb25nIgotICAiX1B5TG9uZ19Gcm9tQnl0ZUFycmF5IgotICAiX1B5TG9uZ19Bc0J5dGVBcnJheSIKLSAgIlB5TG9uZ19Bc0RvdWJsZSIKLSAgIlB5TG9uZ19Gcm9tTG9uZ0xvbmciCi0gICJQeUxvbmdfQXNMb25nTG9uZyIKLSAgIlB5TG9uZ19Gcm9tU3RyaW5nIgotICAiUHlMb25nX0Zyb21Mb25nIgotICAiUHlMb25nX0Zyb21VbnNpZ25lZExvbmciCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrIgotICAiX1B5TG9uZ19Gcm9tU2l6ZV90IgotICAiX1B5TG9uZ19Gcm9tU3NpemVfdCIKLSAgIl9QeUxvbmdfQXNTY2FsZWREb3VibGUiCi0gICJQeUxvbmdfRnJvbVZvaWRQdHIiCi0gICJQeUxvbmdfQXNWb2lkUHRyIgotICAiUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nIgotICAiUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyIKLSAgIlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrIgotICAiUHlMb25nX0Zyb21Vbmljb2RlIgotICAiX1B5TG9uZ19TaWduIgotICAiX1B5TG9uZ19OdW1CaXRzIgotICAiX1B5TG9uZ19OZXciCi0gICJfUHlMb25nX0NvcHkiCi0gICJQeUxvbmdfVHlwZSIKLSAgIl9QeUxvbmdfRGlnaXRWYWx1ZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1ldGhvZG9iamVjdCkKLSAgIlB5Q0Z1bmN0aW9uX0NhbGwiCi0gICJQeV9GaW5kTWV0aG9kSW5DaGFpbiIKLSAgIlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uIgotICAiUHlDRnVuY3Rpb25fR2V0U2VsZiIKLSAgIlB5Q0Z1bmN0aW9uX0dldEZsYWdzIgotICAiUHlfRmluZE1ldGhvZCIKLSAgIlB5Q0Z1bmN0aW9uX05ld0V4IgotICAiUHlDRnVuY3Rpb25fRmluaSIKLSAgIlB5Q0Z1bmN0aW9uX05ldyIKLSAgIlB5Q0Z1bmN0aW9uX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtb2R1bGVvYmplY3QpCi0gICJQeU1vZHVsZV9OZXciCi0gICJfUHlNb2R1bGVfQ2xlYXIiCi0gICJQeU1vZHVsZV9HZXREaWN0IgotICAiUHlNb2R1bGVfR2V0TmFtZSIKLSAgIlB5TW9kdWxlX0dldEZpbGVuYW1lIgotICAiUHlNb2R1bGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG9iamVjdCkKLSAgIlB5X0RpdmlzaW9uV2FybmluZ0ZsYWciCi0gICJQeU9iamVjdF9TdHIiCi0gICJQeU9iamVjdF9SZXByIgotICAiX1B5T2JqZWN0X1N0ciIKLSAgIlB5T2JqZWN0X1VuaWNvZGUiCi0gICJQeU9iamVjdF9HZXRBdHRyIgotICAiUHlPYmplY3RfSXNUcnVlIgotICAiUHlOdW1iZXJfQ29lcmNlRXgiCi0gICJQeU9iamVjdF9Db21wYXJlIgotICAiUHlPYmplY3RfUmljaENvbXBhcmUiCi0gICJfUHlfSGFzaERvdWJsZSIKLSAgIlB5T2JqZWN0X0hhc2giCi0gICJQeU9iamVjdF9TZXRBdHRyIgotICAiUHlPYmplY3RfR2VuZXJpY0dldEF0dHIiCi0gICJQeU9iamVjdF9HZW5lcmljU2V0QXR0ciIKLSAgIlB5Q2FsbGFibGVfQ2hlY2siCi0gICJQeU9iamVjdF9EaXIiCi0gICJQeU1lbV9NYWxsb2MiCi0gICJQeU1lbV9SZWFsbG9jIgotICAiUHlNZW1fRnJlZSIKLSAgIlB5T2JqZWN0X1ByaW50IgotICAiX1B5T2JqZWN0X0R1bXAiCi0gICJQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wiCi0gICJQeU9iamVjdF9HZXRBdHRyU3RyaW5nIgotICAiUHlPYmplY3RfU2V0QXR0clN0cmluZyIKLSAgIlB5T2JqZWN0X0hhc0F0dHJTdHJpbmciCi0gICJQeU9iamVjdF9IYXNBdHRyIgotICAiX1B5T2JqZWN0X0dldERpY3RQdHIiCi0gICJQeU9iamVjdF9TZWxmSXRlciIKLSAgIlB5T2JqZWN0X05vdCIKLSAgIlB5TnVtYmVyX0NvZXJjZSIKLSAgIlB5X1JlcHJFbnRlciIKLSAgIlB5X1JlcHJMZWF2ZSIKLSAgIl9QeV9IYXNoUG9pbnRlciIKLSAgIlB5X0luY1JlZiIKLSAgIlB5X0RlY1JlZiIKLSAgIl9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0IgotICAiX1B5VHJhc2hfZGVzdHJveV9jaGFpbiIKLSAgIlB5T2JqZWN0X0luaXQiCi0gICJQeU9iamVjdF9Jbml0VmFyIgotICAiX1B5T2JqZWN0X05ldyIKLSAgIl9QeU9iamVjdF9OZXdWYXIiCi0gICJfUHlPYmplY3RfRGVsIgotICAiX1B5X1JlYWR5VHlwZXMiCi0gICJfUHlfU3dhcHBlZE9wIgotICAiX1B5X05vdEltcGxlbWVudGVkU3RydWN0IgotICAiX1B5X05vbmVTdHJ1Y3QiCi0gICJfUHlfY29iamVjdF9oYWNrIgotICAiX1B5X2Fic3RyYWN0X2hhY2siCi0gICJfUHlUcmFzaF9kZWxldGVfbmVzdGluZyIKLSAgIl9QeVRyYXNoX2RlbGV0ZV9sYXRlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG9ibWFsbG9jKQotICAiUHlPYmplY3RfTWFsbG9jIgotICAiUHlPYmplY3RfRnJlZSIKLSAgIlB5T2JqZWN0X1JlYWxsb2MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihyYW5nZW9iamVjdCkKLSAgIlB5UmFuZ2VfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNldG9iamVjdCkKLSAgIlB5U2V0X1BvcCIKLSAgIlB5U2V0X05ldyIKLSAgIlB5RnJvemVuU2V0X05ldyIKLSAgIlB5U2V0X1NpemUiCi0gICJQeVNldF9DbGVhciIKLSAgIlB5U2V0X0NvbnRhaW5zIgotICAiUHlTZXRfRGlzY2FyZCIKLSAgIlB5U2V0X0FkZCIKLSAgIl9QeVNldF9OZXh0IgotICAiX1B5U2V0X1VwZGF0ZSIKLSAgIlB5U2V0X0ZpbmkiCi0gICJQeVNldF9UeXBlIgotICAiUHlGcm96ZW5TZXRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNsaWNlb2JqZWN0KQotICAiX1B5U2xpY2VfRnJvbUluZGljZXMiCi0gICJQeVNsaWNlX0dldEluZGljZXMiCi0gICJQeVNsaWNlX0dldEluZGljZXNFeCIKLSAgIlB5U2xpY2VfTmV3IgotICAiX1B5X0VsbGlwc2lzT2JqZWN0IgotICAiUHlTbGljZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3RyaW5nb2JqZWN0KQotICAiUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUiCi0gICJQeVN0cmluZ19JbnRlcm5JblBsYWNlIgotICAiUHlTdHJpbmdfRnJvbVN0cmluZyIKLSAgIlB5U3RyaW5nX0Zyb21Gb3JtYXRWIgotICAiUHlTdHJpbmdfQXNTdHJpbmciCi0gICJfUHlTdHJpbmdfUmVzaXplIgotICAiUHlTdHJpbmdfRnJvbUZvcm1hdCIKLSAgIlB5U3RyaW5nX0FzRGVjb2RlZFN0cmluZyIKLSAgIlB5U3RyaW5nX0FzRW5jb2RlZFN0cmluZyIKLSAgIlB5U3RyaW5nX0RlY29kZUVzY2FwZSIKLSAgIlB5U3RyaW5nX1JlcHIiCi0gICJQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemUiCi0gICJfUHlTdHJpbmdfRm9ybWF0TG9uZyIKLSAgIlB5U3RyaW5nX0Zvcm1hdCIKLSAgIl9QeV9SZWxlYXNlSW50ZXJuZWRTdHJpbmdzIgotICAiUHlTdHJpbmdfU2l6ZSIKLSAgIlB5U3RyaW5nX0NvbmNhdCIKLSAgIlB5U3RyaW5nX0NvbmNhdEFuZERlbCIKLSAgIl9QeVN0cmluZ19FcSIKLSAgIlB5U3RyaW5nX0ludGVybkltbW9ydGFsIgotICAiUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZyIKLSAgIl9QeVN0cmluZ19Kb2luIgotICAiUHlTdHJpbmdfRGVjb2RlIgotICAiUHlTdHJpbmdfRW5jb2RlIgotICAiUHlTdHJpbmdfQXNFbmNvZGVkT2JqZWN0IgotICAiUHlTdHJpbmdfQXNEZWNvZGVkT2JqZWN0IgotICAiUHlTdHJpbmdfRmluaSIKLSAgIlB5U3RyaW5nX1R5cGUiCi0gICJQeUJhc2VTdHJpbmdfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN0cnVjdHNlcSkKLSAgIlB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUiCi0gICJQeVN0cnVjdFNlcXVlbmNlX05ldyIKLSAgIlB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodHVwbGVvYmplY3QpCi0gICJQeVR1cGxlX05ldyIKLSAgIlB5VHVwbGVfUGFjayIKLSAgIl9QeVR1cGxlX1Jlc2l6ZSIKLSAgIlB5VHVwbGVfU2l6ZSIKLSAgIlB5VHVwbGVfR2V0SXRlbSIKLSAgIlB5VHVwbGVfU2V0SXRlbSIKLSAgIlB5VHVwbGVfR2V0U2xpY2UiCi0gICJQeVR1cGxlX0ZpbmkiCi0gICJQeVR1cGxlX1R5cGUiCi0gICJQeVR1cGxlSXRlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodHlwZW9iamVjdCkKLSAgIlB5VHlwZV9Jc1N1YnR5cGUiCi0gICJfUHlUeXBlX0xvb2t1cCIKLSAgIlB5VHlwZV9SZWFkeSIKLSAgIlB5VHlwZV9HZW5lcmljQWxsb2MiCi0gICJfUHlPYmplY3RfU2xvdENvbXBhcmUiCi0gICJQeVR5cGVfR2VuZXJpY05ldyIKLSAgIlB5VHlwZV9UeXBlIgotICAiUHlCYXNlT2JqZWN0X1R5cGUiCi0gICJQeVN1cGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih1bmljb2Rlb2JqZWN0KQotICAiUHlVbmljb2RlVUNTMl9SZXNpemUiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21PcmRpbmFsIgotICAiUHlVbmljb2RlVUNTMl9Gcm9tT2JqZWN0IgotICAiUHlVbmljb2RlVUNTMl9Gcm9tRW5jb2RlZE9iamVjdCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlIgotICAiUHlVbmljb2RlVUNTMl9HZXREZWZhdWx0RW5jb2RpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjgiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZUxhdGluMSIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlQVNDSUkiCi0gICJQeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZFN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfQXNVVEY4U3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc0xhdGluMVN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfQXNBU0NJSVN0cmluZyIKLSAgIlB5VW5pY29kZV9EZWNvZGVVVEY3IgotICAiUHlVbmljb2RlX0VuY29kZVVURjciCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjhTdGF0ZWZ1bCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlVVRGOCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTZTdGF0ZWZ1bCIKLSAgIlB5VW5pY29kZVVDUzJfQXNVVEYxNlN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVW5pY29kZUVzY2FwZSIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlUmF3VW5pY29kZUVzY2FwZSIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlUmF3VW5pY29kZUVzY2FwZSIKLSAgIl9QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUludGVybmFsIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVDaGFybWFwIgotICAiUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAiCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZUNoYXJtYXAiCi0gICJQeVVuaWNvZGVVQ1MyX1RyYW5zbGF0ZUNoYXJtYXAiCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZURlY2ltYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0NvdW50IgotICAiUHlVbmljb2RlVUNTMl9GaW5kIgotICAiUHlVbmljb2RlVUNTMl9Kb2luIgotICAiUHlVbmljb2RlVUNTMl9TcGxpdGxpbmVzIgotICAiUHlVbmljb2RlVUNTMl9Db21wYXJlIgotICAiUHlVbmljb2RlVUNTMl9Db250YWlucyIKLSAgIlB5VW5pY29kZVVDUzJfQ29uY2F0IgotICAiX1B5VW5pY29kZV9YU3RyaXAiCi0gICJQeVVuaWNvZGVVQ1MyX1JlcGxhY2UiCi0gICJQeVVuaWNvZGVVQ1MyX1NwbGl0IgotICAiUHlVbmljb2RlVUNTMl9SU3BsaXQiCi0gICJQeVVuaWNvZGVVQ1MyX0Zvcm1hdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0luaXQiCi0gICJfUHlVbmljb2RlVUNTMl9GaW5pIgotICAiUHlVbmljb2RlVUNTMl9Gcm9tVW5pY29kZSIKLSAgIlB5VW5pY29kZVVDUzJfQXNVbmljb2RlIgotICAiUHlVbmljb2RlVUNTMl9HZXRTaXplIgotICAiUHlVbmljb2RlVUNTMl9HZXRNYXgiCi0gICJfUHlVbmljb2RlVUNTMl9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9TZXREZWZhdWx0RW5jb2RpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZSIKLSAgIlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkT2JqZWN0IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNiIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlVVRGMTYiCi0gICJQeVVuaWNvZGVVQ1MyX0FzVW5pY29kZUVzY2FwZVN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlVW5pY29kZUVzY2FwZSIKLSAgIlB5VW5pY29kZVVDUzJfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVMYXRpbjEiCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZUFTQ0lJIgotICAiUHlVbmljb2RlVUNTMl9Bc0NoYXJtYXBTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX1BhcnRpdGlvbiIKLSAgIlB5VW5pY29kZVVDUzJfUlBhcnRpdGlvbiIKLSAgIlB5VW5pY29kZVVDUzJfVHJhbnNsYXRlIgotICAiUHlVbmljb2RlVUNTMl9UYWlsbWF0Y2giCi0gICJQeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0IgotICAiUHlVbmljb2RlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih1bmljb2RlY3R5cGUpCi0gICJfUHlVbmljb2RlX1R5cGVSZWNvcmRzIgotICAiX1B5VW5pY29kZVVDUzJfVG9OdW1lcmljIgotICAiX1B5VW5pY29kZVVDUzJfSXNMb3dlcmNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc1VwcGVyY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzVGl0bGVjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfSXNXaGl0ZXNwYWNlIgotICAiX1B5VW5pY29kZVVDUzJfSXNMaW5lYnJlYWsiCi0gICJfUHlVbmljb2RlVUNTMl9Ub0xvd2VyY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvVXBwZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfVG9UaXRsZWNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Ub0RlY2ltYWxEaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvRGlnaXQiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0RlY2ltYWxEaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzRGlnaXQiCi0gICJfUHlVbmljb2RlVUNTMl9Jc051bWVyaWMiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0FscGhhIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIod2Vha3JlZm9iamVjdCkKLSAgIlB5V2Vha3JlZl9OZXdSZWYiCi0gICJQeVdlYWtyZWZfTmV3UHJveHkiCi0gICJQeU9iamVjdF9DbGVhcldlYWtSZWZzIgotICAiUHlXZWFrcmVmX0dldE9iamVjdCIKLSAgIl9QeVdlYWtyZWZfR2V0V2Vha3JlZkNvdW50IgotICAiX1B5V2Vha3JlZl9DbGVhclJlZiIKLSAgIl9QeVdlYWtyZWZfUmVmVHlwZSIKLSAgIl9QeVdlYWtyZWZfUHJveHlUeXBlIgotICAiX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKFB5dGhvbi1hc3QpCi07ICAiaW5pdF9hc3QiCi0gICJNb2R1bGUiCi0gICJJbnRlcmFjdGl2ZSIKLSAgIkV4cHJlc3Npb24iCi0gICJTdWl0ZSIKLSAgIkZ1bmN0aW9uRGVmIgotICAiQ2xhc3NEZWYiCi0gICJSZXR1cm4iCi0gICJEZWxldGUiCi0gICJBc3NpZ24iCi0gICJBdWdBc3NpZ24iCi0gICJQcmludCIKLSAgIkZvciIKLSAgIldoaWxlIgotICAiSWYiCi0gICJXaXRoIgotICAiUmFpc2UiCi0gICJUcnlFeGNlcHQiCi0gICJUcnlGaW5hbGx5IgotICAiQXNzZXJ0IgotICAiSW1wb3J0IgotICAiSW1wb3J0RnJvbSIKLSAgIkV4ZWMiCi0gICJHbG9iYWwiCi0gICJFeHByIgotICAiUGFzcyIKLSAgIkJyZWFrIgotICAiQ29udGludWUiCi0gICJCb29sT3AiCi0gICJCaW5PcCIKLSAgIlVuYXJ5T3AiCi0gICJMYW1iZGEiCi0gICJJZkV4cCIKLSAgIkRpY3QiCi0gICJMaXN0Q29tcCIKLSAgIkdlbmVyYXRvckV4cCIKLSAgIllpZWxkIgotICAiQ29tcGFyZSIKLSAgIkNhbGwiCi0gICJSZXByIgotICAiTnVtIgotICAiU3RyIgotICAiQXR0cmlidXRlIgotICAiU3Vic2NyaXB0IgotICAiTmFtZSIKLSAgIkxpc3QiCi0gICJUdXBsZSIKLSAgIkVsbGlwc2lzIgotICAiU2xpY2UiCi0gICJFeHRTbGljZSIKLSAgIkluZGV4IgotICAiY29tcHJlaGVuc2lvbiIKLSAgImV4Y2VwdGhhbmRsZXIiCi0gICJhcmd1bWVudHMiCi0gICJrZXl3b3JkIgotICAiYWxpYXMiCi0gICJQeUFTVF9tb2Qyb2JqIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYXNkbCkKLSAgImFzZGxfc2VxX25ldyIKLSAgImFzZGxfaW50X3NlcV9uZXciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhc3QpCi0gICJQeUFTVF9Gcm9tTm9kZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJsdGlubW9kdWxlKQotICAiX1B5QnVpbHRpbl9Jbml0IgotICAiUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGV4Y2VwdGlvbnMpCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0IgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kIgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kIgotICAiX1B5RXhjX0luaXQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9DcmVhdGUiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9DcmVhdGUiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZyIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nIgotICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0IgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0IgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0IgotICAiUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24iCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24iCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24iCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb24iCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24iCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24iCi0gICJfUHlFeGNfRmluaSIKLSAgIlB5RXhjX0Jhc2VFeGNlcHRpb24iCi0gICJQeUV4Y19FeGNlcHRpb24iCi0gICJQeUV4Y19TdGFuZGFyZEVycm9yIgotICAiUHlFeGNfVHlwZUVycm9yIgotICAiUHlFeGNfU3RvcEl0ZXJhdGlvbiIKLSAgIlB5RXhjX0dlbmVyYXRvckV4aXQiCi0gICJQeUV4Y19TeXN0ZW1FeGl0IgotICAiUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQiCi0gICJQeUV4Y19JbXBvcnRFcnJvciIKLSAgIlB5RXhjX0Vudmlyb25tZW50RXJyb3IiCi0gICJQeUV4Y19JT0Vycm9yIgotICAiUHlFeGNfT1NFcnJvciIKLSAgIlB5RXhjX0VPRkVycm9yIgotICAiUHlFeGNfUnVudGltZUVycm9yIgotICAiUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciIKLSAgIlB5RXhjX05hbWVFcnJvciIKLSAgIlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIgotICAiUHlFeGNfQXR0cmlidXRlRXJyb3IiCi0gICJQeUV4Y19JbmRleEVycm9yIgotICAiUHlFeGNfU3ludGF4RXJyb3IiCi0gICJQeUV4Y19JbmRlbnRhdGlvbkVycm9yIgotICAiUHlFeGNfVGFiRXJyb3IiCi0gICJQeUV4Y19Mb29rdXBFcnJvciIKLSAgIlB5RXhjX0tleUVycm9yIgotICAiUHlFeGNfVmFsdWVFcnJvciIKLSAgIlB5RXhjX1VuaWNvZGVFcnJvciIKLSAgIlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciIKLSAgIlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciIKLSAgIlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciIKLSAgIlB5RXhjX0Fzc2VydGlvbkVycm9yIgotICAiUHlFeGNfQXJpdGhtZXRpY0Vycm9yIgotICAiUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIgotICAiUHlFeGNfT3ZlcmZsb3dFcnJvciIKLSAgIlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIgotICAiUHlFeGNfU3lzdGVtRXJyb3IiCi0gICJQeUV4Y19SZWZlcmVuY2VFcnJvciIKLSAgIlB5RXhjX01lbW9yeUVycm9yIgotICAiUHlFeGNfV2FybmluZyIKLSAgIlB5RXhjX1VzZXJXYXJuaW5nIgotICAiUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nIgotICAiUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyIKLSAgIlB5RXhjX1N5bnRheFdhcm5pbmciCi0gICJQeUV4Y19SdW50aW1lV2FybmluZyIKLSAgIlB5RXhjX0Z1dHVyZVdhcm5pbmciCi0gICJQeUV4Y19JbXBvcnRXYXJuaW5nIgotICAiUHlFeGNfTWVtb3J5RXJyb3JJbnN0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2V2YWwpCi0gICJQeUV2YWxfRXZhbEZyYW1lRXgiCi0gICJQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcyIKLSAgIlB5RXZhbF9FdmFsQ29kZUV4IgotICAiUHlFdmFsX0dldEZyYW1lIgotICAiUHlFdmFsX0NhbGxPYmplY3QiCi0gICJQeUV2YWxfU2V0UHJvZmlsZSIKLSAgIlB5RXZhbF9TZXRUcmFjZSIKLSAgIlB5RXZhbF9HZXRCdWlsdGlucyIKLSAgIlB5RXZhbF9HZXRHbG9iYWxzIgotICAiUHlFdmFsX0dldExvY2FscyIKLSAgIlB5RXZhbF9HZXRSZXN0cmljdGVkIgotICAiUHlFdmFsX01lcmdlQ29tcGlsZXJGbGFncyIKLSAgIlB5X0ZsdXNoTGluZSIKLSAgIlB5X0FkZFBlbmRpbmdDYWxsIgotICAiUHlfTWFrZVBlbmRpbmdDYWxscyIKLSAgIlB5X1NldFJlY3Vyc2lvbkxpbWl0IgotICAiUHlfR2V0UmVjdXJzaW9uTGltaXQiCi0gICJfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsIgotICAiUHlFdmFsX0dldEZ1bmNOYW1lIgotICAiUHlFdmFsX0dldEZ1bmNEZXNjIgotICAiUHlFdmFsX0dldENhbGxTdGF0cyIKLSAgIlB5RXZhbF9FdmFsRnJhbWUiCi0gICJQeUV2YWxfU2F2ZVRocmVhZCIKLSAgIlB5RXZhbF9SZXN0b3JlVGhyZWFkIgotICAiUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZCIKLSAgIlB5RXZhbF9Jbml0VGhyZWFkcyIKLSAgIlB5RXZhbF9BY3F1aXJlTG9jayIKLSAgIlB5RXZhbF9SZWxlYXNlTG9jayIKLSAgIlB5RXZhbF9BY3F1aXJlVGhyZWFkIgotICAiUHlFdmFsX1JlbGVhc2VUaHJlYWQiCi0gICJQeUV2YWxfUmVJbml0VGhyZWFkcyIKLSAgIl9QeUV2YWxfU2xpY2VJbmRleCIKLSAgIlB5RXZhbF9FdmFsQ29kZSIKLSAgIl9QeUV2YWxfQ2FsbFRyYWNpbmciCi0gICJfUHlfQ2hlY2tSZWN1cnNpb25MaW1pdCIKLSAgIl9QeV9DaGVja0ludGVydmFsIgotICAiX1B5X1RpY2tlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvbXBpbGUpCi0gICJfUHlfTWFuZ2xlIgotICAiUHlBU1RfQ29tcGlsZSIKLSAgIlB5Tm9kZV9Db21waWxlIgotICAiUHlfT3B0aW1pemVGbGFnIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29kZWNzKQotICAiX1B5Q29kZWNfTG9va3VwIgotICAiUHlDb2RlY19FbmNvZGUiCi0gICJQeUNvZGVjX0RlY29kZSIKLSAgIlB5Q29kZWNfSWdub3JlRXJyb3JzIgotICAiUHlDb2RlY19SZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycyIKLSAgIlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycyIKLSAgIlB5Q29kZWNfUmVnaXN0ZXIiCi0gICJQeUNvZGVjX0VuY29kZXIiCi0gICJQeUNvZGVjX0RlY29kZXIiCi0gICJQeUNvZGVjX0luY3JlbWVudGFsRW5jb2RlciIKLSAgIlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyIgotICAiUHlDb2RlY19TdHJlYW1SZWFkZXIiCi0gICJQeUNvZGVjX1N0cmVhbVdyaXRlciIKLSAgIlB5Q29kZWNfUmVnaXN0ZXJFcnJvciIKLSAgIlB5Q29kZWNfTG9va3VwRXJyb3IiCi0gICJQeUNvZGVjX1N0cmljdEVycm9ycyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGVycm9ycykKLSAgIlB5RXJyX1NldE5vbmUiCi0gICJQeUVycl9TZXRTdHJpbmciCi0gICJQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMiCi0gICJQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24iCi0gICJQeUVycl9GZXRjaCIKLSAgIlB5RXJyX0NsZWFyIgotICAiUHlFcnJfTm9NZW1vcnkiCi0gICJQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QiCi0gICJQeUVycl9Gb3JtYXQiCi0gICJQeUVycl9OZXdFeGNlcHRpb24iCi0gICJQeUVycl9Xcml0ZVVucmFpc2FibGUiCi0gICJQeUVycl9TeW50YXhMb2NhdGlvbiIKLSAgIlB5RXJyX1Byb2dyYW1UZXh0IgotICAiUHlFcnJfU2V0T2JqZWN0IgotICAiUHlFcnJfT2NjdXJyZWQiCi0gICJQeUVycl9SZXN0b3JlIgotICAiUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyIKLSAgIlB5RXJyX0JhZEFyZ3VtZW50IgotICAiUHlFcnJfU2V0RnJvbUVycm5vIgotICAiUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lIgotICAiUHlFcnJfQmFkSW50ZXJuYWxDYWxsIgotICAiX1B5RXJyX0JhZEludGVybmFsQ2FsbCIKLSAgIlB5RXJyX1dhcm4iCi0gICJQeUVycl9XYXJuRXhwbGljaXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmcm96ZW4pCi0gICJQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZnJvemVubWFpbikKLSAgIlB5X0Zyb3plbk1haW4iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmdXR1cmUpCi0gICJQeUZ1dHVyZV9Gcm9tQVNUIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0YXJncykKLSAgIlB5QXJnX1BhcnNlIgotICAiX1B5QXJnX1BhcnNlX1NpemVUIgotICAiUHlBcmdfUGFyc2VUdXBsZSIKLSAgIl9QeUFyZ19QYXJzZVR1cGxlX1NpemVUIgotICAiUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzIgotICAiX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVCIKLSAgIlB5QXJnX1VucGFja1R1cGxlIgotICAiX1B5QXJnX05vS2V5d29yZHMiCi0gICJQeUFyZ19WYVBhcnNlIgotICAiUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHMiCi0gICJfUHlBcmdfVmFQYXJzZV9TaXplVCIKLSAgIl9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGNvbXBpbGVyKQotICAiUHlfR2V0Q29tcGlsZXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRjb3B5cmlnaHQpCi0gICJQeV9HZXRDb3B5cmlnaHQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRwbGF0Zm9ybSkKLSAgIlB5X0dldFBsYXRmb3JtIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0dmVyc2lvbikKLSAgIlB5X0dldFZlcnNpb24iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihncmFtaW5pdCkKLSAgIl9QeVBhcnNlcl9HcmFtbWFyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW1wb3J0KQotICAiX1B5SW1wb3J0X0luaXQiCi0gICJfUHlJbXBvcnRIb29rc19Jbml0IgotICAiUHlJbXBvcnRfSW1wb3J0TW9kdWxlIgotICAiUHlJbXBvcnRfQ2xlYW51cCIKLSAgIl9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbiIKLSAgIlB5SW1wb3J0X0FkZE1vZHVsZSIKLSAgIlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgiCi0gICJQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUiCi0gICJQeUltcG9ydF9JbXBvcnRNb2R1bGVFeCIKLSAgIlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsIgotICAiUHlJbXBvcnRfUmVsb2FkTW9kdWxlIgotICAiUHlJbXBvcnRfSW1wb3J0IgotOyAgImluaXRpbXAiCi0gICJfUHlJbXBvcnRfRmluaSIKLSAgIlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyIgotICAiUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUiCi0gICJQeUltcG9ydF9HZXRNb2R1bGVEaWN0IgotICAiX1B5SW1wb3J0X0ZpbmRNb2R1bGUiCi0gICJfUHlJbXBvcnRfSXNTY3JpcHQiCi0gICJfUHlJbXBvcnRfUmVJbml0TG9jayIKLSAgIl9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uIgotICAiUHlJbXBvcnRfQXBwZW5kSW5pdHRhYiIKLSAgIlB5SW1wb3J0X0V4dGVuZEluaXR0YWIiCi0gICJQeUltcG9ydF9Jbml0dGFiIgotICAiX1B5SW1wb3J0X0ZpbGV0YWIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpbXBvcnRkbCkKLSAgIl9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1hcnNoYWwpCi0gICJQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nIgotICAiUHlNYXJzaGFsX1dyaXRlTG9uZ1RvRmlsZSIKLSAgIlB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUiCi0gICJQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyIKLSAgIlB5TWFyc2hhbF9Jbml0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobW9kc3VwcG9ydCkKLSAgIlB5X0luaXRNb2R1bGU0IgotICAiUHlfQnVpbGRWYWx1ZSIKLSAgIl9QeV9CdWlsZFZhbHVlX1NpemVUIgotICAiUHlFdmFsX0NhbGxGdW5jdGlvbiIKLSAgIlB5RXZhbF9DYWxsTWV0aG9kIgotICAiX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVCIKLSAgIlB5X1ZhQnVpbGRWYWx1ZSIKLSAgIlB5TW9kdWxlX0FkZE9iamVjdCIKLSAgIlB5TW9kdWxlX0FkZEludENvbnN0YW50IgotICAiUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQiCi0gICJfUHlfUGFja2FnZUNvbnRleHQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihteXNucHJpbnRmKQotICAiUHlPU19zbnByaW50ZiIKLSAgIlB5T1NfdnNucHJpbnRmIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobXlzdHJ0b3VsKQotICAiUHlPU19zdHJ0b3VsIgotICAiUHlPU19zdHJ0b2wiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihweWFyZW5hKQotICAiUHlBcmVuYV9OZXciCi0gICJQeUFyZW5hX0ZyZWUiCi0gICJQeUFyZW5hX01hbGxvYyIKLSAgIlB5QXJlbmFfQWRkUHlPYmplY3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihweWZwZSkKLSAgIlB5RlBFX2R1bW15IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocHlzdGF0ZSkKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhciIKLSAgIlB5VGhyZWFkU3RhdGVfQ2xlYXIiCi0gICJfUHlUaHJlYWRfQ3VycmVudEZyYW1lcyIKLSAgIlB5R0lMU3RhdGVfRW5zdXJlIgotICAiUHlHSUxTdGF0ZV9SZWxlYXNlIgotICAiUHlJbnRlcnByZXRlclN0YXRlX05ldyIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUiCi0gICJQeVRocmVhZFN0YXRlX0RlbGV0ZSIKLSAgIlB5VGhyZWFkU3RhdGVfTmV3IgotICAiUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50IgotICAiUHlUaHJlYWRTdGF0ZV9HZXQiCi0gICJQeVRocmVhZFN0YXRlX1N3YXAiCi0gICJQeVRocmVhZFN0YXRlX0dldERpY3QiCi0gICJQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjIgotICAiUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUiCi0gICJQeUludGVycHJldGVyU3RhdGVfSGVhZCIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXh0IgotICAiUHlJbnRlcnByZXRlclN0YXRlX1RocmVhZEhlYWQiCi0gICJQeVRocmVhZFN0YXRlX05leHQiCi0gICJfUHlHSUxTdGF0ZV9Jbml0IgotICAiX1B5R0lMU3RhdGVfRmluaSIKLSAgIl9QeVRocmVhZFN0YXRlX0N1cnJlbnQiCi0gICJfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5dGhvbnJ1bikKLSAgIlB5X0lnbm9yZUVudmlyb25tZW50RmxhZyIKLSAgIlB5X0RlYnVnRmxhZyIKLSAgIlB5X1ZlcmJvc2VGbGFnIgotICAiUHlfTm9TaXRlRmxhZyIKLSAgIlB5X0ludGVyYWN0aXZlRmxhZyIKLSAgIlB5X0Zyb3plbkZsYWciCi0gICJQeV9Jbml0aWFsaXplRXgiCi0gICJQeV9GYXRhbEVycm9yIgotICAiUHlfTmV3SW50ZXJwcmV0ZXIiCi0gICJQeUVycl9QcmludCIKLSAgIlB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MiCi0gICJQeVBhcnNlcl9BU1RGcm9tRmlsZSIKLSAgIlB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzIgotICAiUHlSdW5fRmlsZUV4RmxhZ3MiCi0gICJQeV9FeGl0IgotICAiUHlFcnJfUHJpbnRFeCIKLSAgIlB5RXJyX0Rpc3BsYXkiCi0gICJQeV9TZXRQcm9ncmFtTmFtZSIKLSAgIlB5X0dldFByb2dyYW1OYW1lIgotICAiUHlfU2V0UHl0aG9uSG9tZSIKLSAgIlB5X0dldFB5dGhvbkhvbWUiCi0gICJQeV9Jbml0aWFsaXplIgotICAiUHlfRmluYWxpemUiCi0gICJQeV9Jc0luaXRpYWxpemVkIgotICAiUHlfRW5kSW50ZXJwcmV0ZXIiCi0gICJQeVJ1bl9BbnlGaWxlRmxhZ3MiCi0gICJQeV9GZElzSW50ZXJhY3RpdmUiCi0gICJQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncyIKLSAgIlB5UnVuX0FueUZpbGVFeEZsYWdzIgotICAiUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3MiCi0gICJQeVJ1bl9TdHJpbmdGbGFncyIKLSAgIlB5UGFyc2VyX0FTVEZyb21TdHJpbmciCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3MiCi0gICJQeV9Db21waWxlU3RyaW5nRmxhZ3MiCi0gICJQeV9TeW10YWJsZVN0cmluZyIKLSAgIlB5X0F0RXhpdCIKLSAgIlB5T1NfZ2V0c2lnIgotICAiUHlPU19zZXRzaWciCi0gICJQeVBhcnNlcl9TZXRFcnJvciIKLSAgIlB5TW9kdWxlX0dldFdhcm5pbmdzTW9kdWxlIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGaWxlbmFtZSIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZSIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nIgotICAiUHlSdW5fQW55RmlsZSIKLSAgIlB5UnVuX0FueUZpbGVFeCIKLSAgIlB5UnVuX0ZpbGUiCi0gICJQeVJ1bl9GaWxlRXgiCi0gICJQeVJ1bl9GaWxlRmxhZ3MiCi0gICJQeVJ1bl9TaW1wbGVGaWxlIgotICAiUHlSdW5fU2ltcGxlRmlsZUV4IgotICAiUHlSdW5fU3RyaW5nIgotICAiUHlSdW5fU2ltcGxlU3RyaW5nIgotICAiUHlfQ29tcGlsZVN0cmluZyIKLSAgIlB5UnVuX0ludGVyYWN0aXZlT25lIgotICAiUHlSdW5fSW50ZXJhY3RpdmVMb29wIgotICAiUHlfVXNlQ2xhc3NFeGNlcHRpb25zRmxhZyIKLSAgIlB5X1VuaWNvZGVGbGFnIgotICAiX1B5X1FuZXdGbGFnIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3RydWN0bWVtYmVyKQotICAiUHlNZW1iZXJfR2V0IgotICAiUHlNZW1iZXJfR2V0T25lIgotICAiUHlNZW1iZXJfU2V0T25lIgotICAiUHlNZW1iZXJfU2V0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3ltdGFibGUpCi0gICJQeVN5bXRhYmxlX0J1aWxkIgotICAiUHlTeW10YWJsZV9GcmVlIgotICAiUHlTVF9HZXRTY29wZSIKLSAgIlB5U3ltdGFibGVfTG9va3VwIgotICAiUHlTVEVudHJ5X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeXNtb2R1bGUpCi0gICJfUHlTeXNfSW5pdCIKLSAgIlB5U3lzX1dyaXRlU3RkZXJyIgotICAiUHlTeXNfU2V0UGF0aCIKLSAgIlB5U3lzX1NldEFyZ3YiCi0gICJQeVN5c19Xcml0ZVN0ZG91dCIKLSAgIlB5X1N1YnZlcnNpb25SZXZpc2lvbiIKLSAgIlB5X1N1YnZlcnNpb25TaG9ydEJyYW5jaCIKLSAgIlB5U3lzX0dldE9iamVjdCIKLSAgIlB5U3lzX1NldE9iamVjdCIKLSAgIlB5U3lzX0dldEZpbGUiCi0gICJQeVN5c19SZXNldFdhcm5PcHRpb25zIgotICAiUHlTeXNfQWRkV2Fybk9wdGlvbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRyYWNlYmFjaykKLSAgIlB5VHJhY2VCYWNrX0hlcmUiCi0gICJQeVRyYWNlQmFja19QcmludCIKLSAgIlB5VHJhY2VCYWNrX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRvcHQpCi0gICJfUHlPU19HZXRPcHQiCi0gICJfUHlPU19vcHRlcnIiCi0gICJfUHlPU19vcHRpbmQiCi0gICJfUHlPU19vcHRhcmciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkeW5sb2FkX3NobGliKQotICAiX1B5SW1wb3J0X0R5bkxvYWRGaWxldGFiIgotICAiX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGhyZWFkKQotICAiUHlUaHJlYWRfZGVsZXRlX2tleV92YWx1ZSIKLSAgIlB5VGhyZWFkX2luaXRfdGhyZWFkIgotICAiUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCIKLSAgIlB5VGhyZWFkX2V4aXRfdGhyZWFkIgotICAiUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCIKLSAgIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2siCi0gICJQeVRocmVhZF9mcmVlX2xvY2siCi0gICJQeVRocmVhZF9hY3F1aXJlX2xvY2siCi0gICJQeVRocmVhZF9yZWxlYXNlX2xvY2siCi0gICJQeVRocmVhZF9nZXRfc3RhY2tzaXplIgotICAiUHlUaHJlYWRfc2V0X3N0YWNrc2l6ZSIKLSAgIlB5VGhyZWFkX2NyZWF0ZV9rZXkiCi0gICJQeVRocmVhZF9kZWxldGVfa2V5IgotICAiUHlUaHJlYWRfc2V0X2tleV92YWx1ZSIKLSAgIlB5VGhyZWFkX2dldF9rZXlfdmFsdWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnY21vZHVsZSkKLTsgICJpbml0Z2MiCi0gICJfUHlPYmplY3RfR0NfTmV3IgotICAiX1B5T2JqZWN0X0dDX05ld1ZhciIKLSAgIlB5R0NfQ29sbGVjdCIKLSAgIl9QeU9iamVjdF9HQ19SZXNpemUiCi0gICJfUHlPYmplY3RfR0NfTWFsbG9jIgotICAiUHlPYmplY3RfR0NfVHJhY2siCi0gICJQeU9iamVjdF9HQ19VblRyYWNrIgotICAiUHlPYmplY3RfR0NfRGVsIgotICAiX1B5R0NfRHVtcCIKLSAgIl9QeU9iamVjdF9HQ19UcmFjayIKLSAgIl9QeU9iamVjdF9HQ19VblRyYWNrIgotICAiX1B5T2JqZWN0X0dDX0RlbCIKLSAgIl9QeUdDX2dlbmVyYXRpb24wIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2lnbmFsbW9kdWxlKQotOyAgImluaXRzaWduYWwiCi0gICJQeUVycl9DaGVja1NpZ25hbHMiCi0gICJQeUVycl9TZXRJbnRlcnJ1cHQiCi0gICJQeU9TX0ZpbmlJbnRlcnJ1cHRzIgotICAiUHlPU19JbnRlcnJ1cHRPY2N1cnJlZCIKLSAgIlB5T1NfSW5pdEludGVycnVwdHMiCi0gICJQeU9TX0FmdGVyRm9yayIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHBvc2l4bW9kdWxlKQotOyAgImluaXRvczIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfdGhyZWFkbW9kdWxlKQotOyAgImluaXRfdGhyZWFkIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYXJyYXltb2R1bGUpCi07ICAiaW5pdGFycmF5IgotOyAgImFycmF5X21ldGhvZHMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihiaW5hc2NpaSkKLTsgICJpbml0YmluYXNjaWkiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjbWF0aG1vZHVsZSkKLTsgICJpbml0Y21hdGgiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfY29kZWNzbW9kdWxlKQotOyAgImluaXRfY29kZWNzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29sbGVjdGlvbnNtb2R1bGUpCi07ICAiaW5pdGNvbGxlY3Rpb25zIgotICAiZGVxdWVpdGVyX3R5cGUiCi0gICJkZXF1ZXJldml0ZXJfdHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNQaWNrbGUpCi07ICAiaW5pdGNQaWNrbGUiCi07ICAiZmFzdF9zYXZlX2xlYXZlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2NzdikKLTsgICJpbml0X2NzdiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGRhdGV0aW1lbW9kdWxlKQotOyAgImluaXRkYXRldGltZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGRsbW9kdWxlKQotOyAgImluaXRkbCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGVycm5vbW9kdWxlKQotOyAgImluaXRlcnJubyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZjbnRsbW9kdWxlKQotOyAgImluaXRmY250bCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9mdW5jdG9vbHNtb2R1bGUpCi07ICAiaW5pdF9mdW5jdG9vbHMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfaGVhcHFtb2R1bGUpCi07ICAiaW5pdF9oZWFwcSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGltYWdlb3ApCi07ICAiaW5pdGltYWdlb3AiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpdGVydG9vbHNtb2R1bGUpCi07ICAiaW5pdGl0ZXJ0b29scyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9sb2NhbGVtb2R1bGUpCi07ICAiaW5pdF9sb2NhbGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtYXRobW9kdWxlKQotOyAgImluaXRtYXRoIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWQ1KQotICAibWQ1X2ZpbmlzaCIKLSAgIm1kNV9pbml0IgotICAibWQ1X2FwcGVuZCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1kNW1vZHVsZSkKLTsgICJpbml0X21kNSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG9wZXJhdG9yKQotOyAgImluaXRvcGVyYXRvciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9yYW5kb21tb2R1bGUpCi07ICAiaW5pdF9yYW5kb20iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihyZ2JpbWdtb2R1bGUpCi07ICAiaW5pdHJnYmltZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNoYW1vZHVsZSkKLTsgICJpbml0X3NoYSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNoYTI1Nm1vZHVsZSkKLTsgICJpbml0X3NoYTI1NiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHNoYTUxMm1vZHVsZSkKLTsgICJpbml0X3NoYTUxMiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9zcmUpCi07ICAiaW5pdF9zcmUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJvcG1vZHVsZSkKLTsgICJpbml0c3Ryb3AiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfc3RydWN0KQotOyAgImluaXRfc3RydWN0IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3ltdGFibGVtb2R1bGUpCi07ICAiaW5pdF9zeW10YWJsZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRlcm1pb3MpCi07ICAiaW5pdHRlcm1pb3MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0aW1lbW9kdWxlKQotOyAgImluaXR0aW1lIgotICAiX1B5VGltZV9Eb3VibGVUb1RpbWV0IgotOyAgImluaXR0aW1lem9uZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRpbWluZ21vZHVsZSkKLTsgICJpbml0dGltaW5nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3dlYWtyZWYpCi07ICAiaW5pdF93ZWFrcmVmIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoeHhzdWJ0eXBlKQotOyAgImluaXR4eHN1YnR5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih6aXBpbXBvcnQpCi07ICAiaW5pdHppcGltcG9ydCIKZGlmZiAtLWdpdCBhL1BDL29zMmVteC9weXRob25wbS5jIGIvUEMvb3MyZW14L3B5dGhvbnBtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNDdmNGIuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L3B5dGhvbnBtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyogT1MvMiBQTSBtYWluIHByb2dyYW0gLSBjcmVhdGVzIGEgaGlkZGVuIHdpbmRvdywgYW5kIHN0YXJ0cyBQeXRob24KLSAqIGludGVycHJldGVyIGluIGEgc2VwYXJhdGUgdGhyZWFkLCBzbyB0aGF0IFB5dGhvbiBzY3JpcHRzIGNhbiBiZQotICogcnVuIGluIFBNIHByb2Nlc3Mgc3BhY2Ugd2l0aG91dCBhIGNvbnNvbGUgV2luZG93LiAgVGhlIGludGVycHJldGVyCi0gKiBpcyBpbmNvcnBvcmF0ZWQgYnkgbGlua2luZyBpbiB0aGUgUHl0aG9uIERMTC4KLSAqCi0gKiBBcyBpdCBzdGFuZHMsIEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBhZGVxdWF0ZSBmb3Igc3VwcG9ydGluZyBQeXRob24KLSAqIEdVSSBtb2R1bGVzLCBhcyB0aGUgUHl0aG9uIHRocmVhZCBkb2Vzbid0IGhhdmUgaXRzIG93biBtZXNzYWdlCi0gKiBxdWV1ZSAtIHdoaWNoIGlzIHJlcXVpcmVkIG9mIHRocmVhZHMgdGhhdCB3YW50IHRvIGNyZWF0ZS91c2UKLSAqIFBNIHdpbmRvd3MuCi0gKgotICogVGhpcyBjb2RlIG93ZXMgYSBsb3QgdG8gIk9TLzIgUHJlc2VudGF0aW9uIE1hbmFnZXIgUHJvZ3JhbW1pbmciLCBieQotICogQ2hhcmxlcyBQZXR6b2xkLgotICoKLSAqIEFuZHJldyBNYWNJbnR5cmUgPGFuZHltYWNAYnVsbHNleWUuYXBhbmEub3JnLmF1PiwgQXVndXN0IDIwMDEuCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFB5dGhvbiAyLjEuMSBsaWNlbmNlIC0gc2VlIHRoZSBMSUNFTkNFCi0gKiBmaWxlIGluIHRoZSBQeXRob24gdjIuMS4xIChvciBsYXRlcikgc291cmNlIGRpc3RyaWJ1dGlvbi4KLSAqIENvcHlyaWdodCBhc3NpZ25lZCB0byB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24sIDIwMDEuCi0gKi8KLQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX1dJTgotI2luY2x1ZGUgPG9zMi5oPgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0vKiB1c2Ugc3RydWN0dXJlIHRvIHBhc3MgY29tbWFuZCBsaW5lIHRvIFB5dGhvbiB0aHJlYWQgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgaW50IGFyZ2M7Ci0gICAgY2hhciAqKmFyZ3Y7Ci0gICAgSFdORCBGcmFtZTsKLSAgICBpbnQgcnVubmluZzsKLX0gYXJnbGlzdDsKLQotLyogbWFrZSB0aGlzIGEgZ2xvYmFsIHRvIHNpbXBsaWZ5IGFjY2Vzcy4KLSAqIGl0IHNob3VsZCBvbmx5IGJlIHNldCBmcm9tIHRoZSBQeXRob24gdGhyZWFkLCBvciBieSB0aGUgY29kZSB0aGF0Ci0gKiBpbml0aWF0ZXMgdGhlIFB5dGhvbiB0aHJlYWQgd2hlbiB0aGUgdGhyZWFkIGNhbm5vdCBiZSBjcmVhdGVkLgotICovCi1pbnQgUHl0aG9uUkM7Ci0KLWV4dGVybiBETF9FWFBPUlQoaW50KSBQeV9NYWluKGludCwgY2hhciAqKik7Ci12b2lkIFB5dGhvblRocmVhZCh2b2lkICopOwotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIFVMT05HIEZyYW1lRmxhZ3MgPSBGQ0ZfVElUTEVCQVIgfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfU1lTTUVOVSB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TSVpFQk9SREVSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX0hJREVCVVRUT04gfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfU0hFTExQT1NJVElPTiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9UQVNLTElTVDsKLSAgICBIQUIgaGFiOwotICAgIEhNUSBobXE7Ci0gICAgSFdORCBDbGllbnQ7Ci0gICAgUU1TRyBxbXNnOwotICAgIGFyZ2xpc3QgYXJnczsKLSAgICBpbnQgcHl0aG9uX3RpZDsKLQotICAgIC8qIGluaXQgUE0gYW5kIGNyZWF0ZSBtZXNzYWdlIHF1ZXVlICovCi0gICAgaGFiID0gV2luSW5pdGlhbGl6ZSgwKTsKLSAgICBobXEgPSBXaW5DcmVhdGVNc2dRdWV1ZShoYWIsIDApOwotCi0gICAgLyogY3JlYXRlIGEgKGhpZGRlbikgV2luZG93IHRvIGhvdXNlIHRoZSB3aW5kb3cgcHJvY2VkdXJlICovCi0gICAgYXJncy5GcmFtZSA9IFdpbkNyZWF0ZVN0ZFdpbmRvdyhIV05EX0RFU0tUT1AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZyYW1lRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvblBNIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ2xpZW50KTsKLQotICAgIC8qIHJ1biBQeXRob24gaW50ZXJwcmV0ZXIgaW4gYSB0aHJlYWQgKi8KLSAgICBhcmdzLmFyZ2MgPSBhcmdjOwotICAgIGFyZ3MuYXJndiA9IGFyZ3Y7Ci0gICAgYXJncy5ydW5uaW5nID0gMDsKLSAgICBpZiAoLTEgPT0gKHB5dGhvbl90aWQgPSBfYmVnaW50aHJlYWQoUHl0aG9uVGhyZWFkLCBOVUxMLCAxMDI0ICogMTAyNCwgJmFyZ3MpKSkKLSAgICB7Ci0gICAgICAgIC8qIGNvdWxkbid0IHN0YXJ0IHRocmVhZCAqLwotICAgICAgICBXaW5BbGFybShIV05EX0RFU0tUT1AsIFdBX0VSUk9SKTsKLSAgICAgICAgUHl0aG9uUkMgPSAxOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvKiBwcm9jZXNzIFBNIG1lc3NhZ2VzLCB1bnRpbCBQeXRob24gZXhpdHMgKi8KLSAgICAgICAgd2hpbGUgKFdpbkdldE1zZyhoYWIsICZxbXNnLCBOVUxMSEFORExFLCAwLCAwKSkKLSAgICAgICAgICAgIFdpbkRpc3BhdGNoTXNnKGhhYiwgJnFtc2cpOwotICAgICAgICBpZiAoYXJncy5ydW5uaW5nID4gMCkKLSAgICAgICAgICAgIERvc0tpbGxUaHJlYWQocHl0aG9uX3RpZCk7Ci0gICAgfQotCi0gICAgLyogZGVzdHJveSB3aW5kb3csIHNodXRkb3duIG1lc3NhZ2UgcXVldWUgYW5kIFBNICovCi0gICAgV2luRGVzdHJveVdpbmRvdyhhcmdzLkZyYW1lKTsKLSAgICBXaW5EZXN0cm95TXNnUXVldWUoaG1xKTsKLSAgICBXaW5UZXJtaW5hdGUoaGFiKTsKLQotICAgIHJldHVybiBQeXRob25SQzsKLX0KLQotdm9pZCBQeXRob25UaHJlYWQodm9pZCAqYXJnbCkKLXsKLSAgICBIQUIgaGFiOwotICAgIGFyZ2xpc3QgKmFyZ3M7Ci0KLSAgICAvKiBQTSBpbml0aWFsaXNhdGlvbiAqLwotICAgIGhhYiA9IFdpbkluaXRpYWxpemUoMCk7Ci0KLSAgICAvKiBzdGFydCBQeXRob24gKi8KLSAgICBhcmdzID0gKGFyZ2xpc3QgKilhcmdsOwotICAgIGFyZ3MtPnJ1bm5pbmcgPSAxOwotICAgIFB5dGhvblJDID0gUHlfTWFpbihhcmdzLT5hcmdjLCBhcmdzLT5hcmd2KTsKLQotICAgIC8qIGVudGVyIGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgc2VuZCB0aGUgdGVybWluYXRpb24gbWVzc2FnZSAqLwotICAgIERvc0VudGVyQ3JpdFNlYygpOwotICAgIGFyZ3MtPnJ1bm5pbmcgPSAwOwotICAgIFdpblBvc3RNc2coYXJncy0+RnJhbWUsIFdNX1FVSVQsIE5VTEwsIE5VTEwpOwotCi0gICAgLyogc2h1dGRvd24gUE0gYW5kIHRlcm1pbmF0ZSB0aHJlYWQgKi8KLSAgICBXaW5UZXJtaW5hdGUoaGFiKTsKLSAgICBfZW5kdGhyZWFkKCk7Ci19CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9fdGtpbnRlci5kZWYgYi9QQy9vczJ2YWNwcC9fdGtpbnRlci5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZGFiOGQuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvX3RraW50ZXIuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1MSUJSQVJZICAgICAgICBfVEtJTlRFUiBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFCi1ERVNDUklQVElPTiAgICAnUHl0aG9uIEV4dGVuc2lvbiBETEwgdjEuMCBmb3IgQWNjZXNzIHRvIFRjbC9UayBFbnZpcm9ubWVudCcKLVBST1RNT0RFCi1EQVRBICAgICAgICAgICBNVUxUSVBMRSBOT05TSEFSRUQKLQotRVhQT1JUUwotICAgICAgICAgICAgICAgaW5pdF90a2ludGVyCi0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL2NvbmZpZy5jIGIvUEMvb3MydmFjcHAvY29uZmlnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNmI1MjEuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvY29uZmlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKiAtKi0gQyAtKi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAoYykgMjAwMCwgQmVPcGVuLmNvbS4KLUNvcHlyaWdodCAoYykgMTk5NS0yMDAwLCBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMuCi1Db3B5cmlnaHQgKGMpIDE5OTAtMTk5NSwgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotU2VlIHRoZSBmaWxlICJNaXNjL0NPUFlSSUdIVCIgZm9yIGluZm9ybWF0aW9uIG9uIHVzYWdlIGFuZAotcmVkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCBhbmQgZm9yIGEgRElTQ0xBSU1FUiBPRiBBTEwgV0FSUkFOVElFUy4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTW9kdWxlIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgotICAgU2VlIGluaXRfYnVpbHRpbigpIGluIGltcG9ydC5jLiAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLWV4dGVybiB2b2lkIGluaXRhcnJheSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRhdWRpb29wKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGJpbmFzY2lpKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGNtYXRoKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGVycm5vKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGltYWdlb3Aodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0bWF0aCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRtZDUodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0bnQodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0b3MyKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdG9wZXJhdG9yKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHBvc2l4KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHJnYmltZyh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzaWduYWwodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0c2VsZWN0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdF9zb2NrZXQodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0c3RydWN0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHRpbWUodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3RocmVhZCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRwY3JlKHZvaWQpOwotI2lmZGVmIFdJTjMyCi1leHRlcm4gdm9pZCBpbml0bXN2Y3J0KHZvaWQpOwotI2VuZGlmCi0KLS8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMSAtLSAqLwotCi1leHRlcm4gdm9pZCBQeU1hcnNoYWxfSW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRpbXAodm9pZCk7Ci0KLXN0cnVjdCBfaW5pdHRhYiBfUHlJbXBvcnRfSW5pdHRhYltdID0gewotCi0gICAgICAgIHsiYXJyYXkiLCBpbml0YXJyYXl9LAotI2lmZGVmIE1fSTM4NgotICAgICAgICB7ImF1ZGlvb3AiLCBpbml0YXVkaW9vcH0sCi0jZW5kaWYKLSAgICAgICAgeyJiaW5hc2NpaSIsIGluaXRiaW5hc2NpaX0sCi0gICAgICAgIHsiY21hdGgiLCBpbml0Y21hdGh9LAotICAgICAgICB7ImVycm5vIiwgaW5pdGVycm5vfSwKLS8vICAgICAgICB7ImltYWdlb3AiLCBpbml0aW1hZ2VvcH0sCi0gICAgICAgIHsibWF0aCIsIGluaXRtYXRofSwKLSAgICAgICAgeyJtZDUiLCBpbml0bWQ1fSwKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKQotICAgICAgICB7Im50IiwgaW5pdG50fSwgLyogVXNlIHRoZSBOVCBvcyBmdW5jdGlvbnMsIG5vdCBwb3NpeCAqLwotI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICB7Im9zMiIsIGluaXRvczJ9LAotI2Vsc2UKLSAgICAgICAgeyJwb3NpeCIsIGluaXRwb3NpeH0sCi0jZW5kaWYKLSNlbmRpZgotICAgICAgICB7Im9wZXJhdG9yIiwgaW5pdG9wZXJhdG9yfSwKLS8vICAgICAgICB7InJnYmltZyIsIGluaXRyZ2JpbWd9LAotICAgICAgICB7InNpZ25hbCIsIGluaXRzaWduYWx9LAotI2lmZGVmIFVTRV9TT0NLRVQKLSAgICAgICAgeyJfc29ja2V0IiwgaW5pdF9zb2NrZXR9LAotICAgICAgICB7InNlbGVjdCIsIGluaXRzZWxlY3R9LAotI2VuZGlmCi0gICAgICAgIHsic3RydWN0IiwgaW5pdHN0cnVjdH0sCi0gICAgICAgIHsidGltZSIsIGluaXR0aW1lfSwKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICB7Il90aHJlYWQiLCBpbml0X3RocmVhZH0sCi0jZW5kaWYKLSAgICAgICAgeyJwY3JlIiwgaW5pdHBjcmV9LAotI2lmZGVmIFdJTjMyCi0gICAgICAgIHsibXN2Y3J0IiwgaW5pdG1zdmNydH0sCi0jZW5kaWYKLQotLyogLS0gQURETU9EVUxFIE1BUktFUiAyIC0tICovCi0KLSAgICAgICAgLyogVGhpcyBtb2R1bGUgImxpdmVzIGluIiB3aXRoIG1hcnNoYWwuYyAqLwotICAgICAgICB7Im1hcnNoYWwiLCBQeU1hcnNoYWxfSW5pdH0sCi0KLSAgICAgICAgLyogVGhpcyBsaXZlcyBpdCB3aXRoIGltcG9ydC5jICovCi0gICAgICAgIHsiX2ltcCIsIGluaXRpbXB9LAotCi0gICAgICAgIC8qIFRoZXNlIGVudHJpZXMgYXJlIGhlcmUgZm9yIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcyAqLwotICAgICAgICB7ImJ1aWx0aW5zIiwgTlVMTH0sCi0gICAgICAgIHsic3lzIiwgTlVMTH0sCi0KLSAgICAgICAgLyogU2VudGluZWwgKi8KLSAgICAgICAgezAsIDB9Ci19OwpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvZ2V0cGF0aHAuYyBiL1BDL29zMnZhY3BwL2dldHBhdGhwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYzI4MjcuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvZ2V0cGF0aHAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MiArMCwwIEBACi0KLS8qIFJldHVybiB0aGUgaW5pdGlhbCBtb2R1bGUgc2VhcmNoIHBhdGguICovCi0vKiBVc2VkIGJ5IERPUywgT1MvMiwgV2luZG93cyAzLjEuICBXb3JrcyBvbiBOVCB0b28uICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJvc2RlZnMuaCIKLQotI2lmZGVmIE1TX1dJTjMyCi0jaW5jbHVkZSA8d2luZG93cy5oPgotZXh0ZXJuIEJPT0wgUHlXaW5fSXNXaW4zMnModm9pZCk7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYgLyogSEFWRV9VTklTVERfSCAqLwotCi0vKiBTZWFyY2ggaW4gc29tZSBjb21tb24gbG9jYXRpb25zIGZvciB0aGUgYXNzb2NpYXRlZCBQeXRob24gbGlicmFyaWVzLgotICoKLSAqIFR3byBkaXJlY3RvcmllcyBtdXN0IGJlIGZvdW5kLCB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgZGlyZWN0b3J5Ci0gKiAocHJlZml4KSwgY29udGFpbmluZyB0aGUgY29tbW9uIC5weSBhbmQgLnB5YyBmaWxlcywgYW5kIHRoZSBwbGF0Zm9ybQotICogZGVwZW5kZW50IGRpcmVjdG9yeSAoZXhlY19wcmVmaXgpLCBjb250YWluaW5nIHRoZSBzaGFyZWQgbGlicmFyeQotICogbW9kdWxlcy4gIE5vdGUgdGhhdCBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGNhbiBiZSB0aGUgc2FtZSBkaXJlY3RvcnksCi0gKiBidXQgZm9yIHNvbWUgaW5zdGFsbGF0aW9ucywgdGhleSBhcmUgZGlmZmVyZW50LgotICoKLSAqIFB5X0dldFBhdGgoKSB0cmllcyB0byByZXR1cm4gYSBzZW5zaWJsZSBQeXRob24gbW9kdWxlIHNlYXJjaCBwYXRoLgotICoKLSAqIEZpcnN0LCB3ZSBsb29rIHRvIHNlZSBpZiB0aGUgZXhlY3V0YWJsZSBpcyBpbiBhIHN1YmRpcmVjdG9yeSBvZgotICogdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnkuICBXZSBjYWxjdWxhdGUgdGhlIGZ1bGwgcGF0aCBvZiB0aGUKLSAqIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlIGFzIHByb2dwYXRoLiAgV2Ugd29yayBiYWNrd2FyZHMKLSAqIGFsb25nIHByb2dwYXRoIGFuZCBsb29rIGZvciAkZGlyL01vZHVsZXMvU2V0dXAuaW4sIGEgZGlzdGluY3RpdmUKLSAqIGxhbmRtYXJrLiAgSWYgZm91bmQsIHdlIHVzZSAkZGlyL0xpYiBhcyAkcm9vdC4gIFRoZSByZXR1cm5lZAotICogUHl0aG9uIHBhdGggaXMgdGhlIGNvbXBpbGVkICNkZWZpbmUgUFlUSE9OUEFUSCB3aXRoIGFsbCB0aGUgaW5pdGlhbAotICogIi4vbGliIiByZXBsYWNlZCBieSAkcm9vdC4KLSAqCi0gKiBPdGhlcndpc2UsIGlmIHRoZXJlIGlzIGEgUFlUSE9OUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2UgcmV0dXJuIHRoYXQuCi0gKgotICogT3RoZXJ3aXNlIHdlIHRyeSB0byBmaW5kICRwcm9ncGF0aC9saWIvb3MucHksIGFuZCBpZiBmb3VuZCwgdGhlbgotICogcm9vdCBpcyAkcHJvZ3BhdGgvbGliLCBhbmQgd2UgcmV0dXJuIFB5dGhvbiBwYXRoIGFzIGNvbXBpbGVkIFBZVEhPTlBBVEgKLSAqIHdpdGggYWxsICIuL2xpYiIgcmVwbGFjZWQgYnkgJHJvb3QgKGFzIGFib3ZlKS4KLSAqCi0gKi8KLQotI2lmbmRlZiBMQU5ETUFSSwotI2RlZmluZSBMQU5ETUFSSyAibGliXFxvcy5weSIKLSNlbmRpZgotCi1zdGF0aWMgY2hhciBwcmVmaXhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyIGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci0KLQotc3RhdGljIGludAotaXNfc2VwKGNoYXIgY2gpIC8qIGRldGVybWluZSBpZiAiY2giIGlzIGEgc2VwYXJhdG9yIGNoYXJhY3RlciAqLwotewotI2lmZGVmIEFMVFNFUAotICAgIHJldHVybiBjaCA9PSBTRVAgfHwgY2ggPT0gQUxUU0VQOwotI2Vsc2UKLSAgICByZXR1cm4gY2ggPT0gU0VQOwotI2VuZGlmCi19Ci0KLQotc3RhdGljIHZvaWQKLXJlZHVjZShjaGFyICpkaXIpCi17Ci0gICAgaW50IGkgPSBzdHJsZW4oZGlyKTsKLSAgICB3aGlsZSAoaSA+IDAgJiYgIWlzX3NlcChkaXJbaV0pKQotICAgICAgICAtLWk7Ci0gICAgZGlyW2ldID0gJ1wwJzsKLX0KLQotCi1zdGF0aWMgaW50Ci1leGlzdHMoY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgc3RydWN0IHN0YXQgYnVmOwotICAgIHJldHVybiBzdGF0KGZpbGVuYW1lLCAmYnVmKSA9PSAwOwotfQotCi0KLS8qIEFkZCBhIHBhdGggY29tcG9uZW50LCBieSBhcHBlbmRpbmcgc3R1ZmYgdG8gYnVmZmVyLgotICAgYnVmZmVyIG11c3QgaGF2ZSBhdCBsZWFzdCBNQVhQQVRITEVOICsgMSBieXRlcyBhbGxvY2F0ZWQsIGFuZCBjb250YWluIGEKLSAgIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIG5vIG1vcmUgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgKG5vdCBjb3VudGluZwotICAgdGhlIHRyYWlsaW5nIE5VTCkuICBJdCdzIGEgZmF0YWwgZXJyb3IgaWYgaXQgY29udGFpbnMgYSBzdHJpbmcgbG9uZ2VyIHRoYW4KLSAgIHRoYXQgKGNhbGxlcnMgbXVzdCBiZSBjYXJlZnVsISkuICBJZiB0aGVzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgaXQncwotICAgZ3VhcmFudGVlZCB0aGF0IGJ1ZmZlciB3aWxsIHN0aWxsIGJlIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZQotICAgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgYXQgZXhpdC4gIElmIHN0dWZmIGlzIHRvbyBsb25nLCBvbmx5IGFzIG11Y2ggb2YKLSAgIHN0dWZmIGFzIGZpdHMgd2lsbCBiZSBhcHBlbmRlZC4KLSovCi1zdGF0aWMgdm9pZAotam9pbihjaGFyICpidWZmZXIsIGNoYXIgKnN0dWZmKQotewotICAgIGludCBuLCBrOwotICAgIGlmIChpc19zZXAoc3R1ZmZbMF0pKQotICAgICAgICBuID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgbiA9IHN0cmxlbihidWZmZXIpOwotICAgICAgICBpZiAobiA+IDAgJiYgIWlzX3NlcChidWZmZXJbbi0xXSkgJiYgbiA8IE1BWFBBVEhMRU4pCi0gICAgICAgICAgICBidWZmZXJbbisrXSA9IFNFUDsKLSAgICB9Ci0gICAgaWYgKG4gPiBNQVhQQVRITEVOKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJidWZmZXIgb3ZlcmZsb3cgaW4gZ2V0cGF0aHAuYydzIGpvaW5wYXRoKCkiKTsKLSAgICBrID0gc3RybGVuKHN0dWZmKTsKLSAgICBpZiAobiArIGsgPiBNQVhQQVRITEVOKQotICAgICAgICBrID0gTUFYUEFUSExFTiAtIG47Ci0gICAgc3RybmNweShidWZmZXIrbiwgc3R1ZmYsIGspOwotICAgIGJ1ZmZlcltuK2tdID0gJ1wwJzsKLX0KLQotCi1zdGF0aWMgaW50Ci1zZWFyY2hfZm9yX3ByZWZpeChjaGFyICphcmd2MF9wYXRoLCBjaGFyICpsYW5kbWFyaykKLXsKLSAgICBpbnQgbjsKLQotICAgIC8qIFNlYXJjaCBmcm9tIGFyZ3YwX3BhdGgsIHVudGlsIHJvb3QgaXMgZm91bmQgKi8KLSAgICBzdHJjcHkocHJlZml4LCBhcmd2MF9wYXRoKTsKLSAgICBkbyB7Ci0gICAgICAgIG4gPSBzdHJsZW4ocHJlZml4KTsKLSAgICAgICAgam9pbihwcmVmaXgsIGxhbmRtYXJrKTsKLSAgICAgICAgaWYgKGV4aXN0cyhwcmVmaXgpKSB7Ci0gICAgICAgICAgICBwcmVmaXhbbl0gPSAnXDAnOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgcHJlZml4W25dID0gJ1wwJzsKLSAgICAgICAgcmVkdWNlKHByZWZpeCk7Ci0gICAgfSB3aGlsZSAocHJlZml4WzBdKTsKLSAgICByZXR1cm4gMDsKLX0KLQotI2lmZGVmIE1TX1dJTjMyCi0jaW5jbHVkZSAibWFsbG9jLmgiIC8vIGZvciBhbGxvY2EgLSBzZWUgY29tbWVudHMgYmVsb3chCi1leHRlcm4gY29uc3QgY2hhciAqUHlXaW5fRExMVmVyc2lvblN0cmluZzsgLy8gYSBzdHJpbmcgbG9hZGVkIGZyb20gdGhlIERMTCBhdCBzdGFydHVwLgotCi0KLS8qIExvYWQgYSBQWVRIT05QQVRIIHZhbHVlIGZyb20gdGhlIHJlZ2lzdHJ5LgotICAgTG9hZCBmcm9tIGVpdGhlciBIS0VZX0xPQ0FMX01BQ0hJTkUgb3IgSEtFWV9DVVJSRU5UX1VTRVIuCi0KLSAgIFJldHVybnMgTlVMTCwgb3IgYSBwb2ludGVyIHRoYXQgc2hvdWxkIGJlIGZyZWVkLgotKi8KLQotc3RhdGljIGNoYXIgKgotZ2V0cHl0aG9ucmVncGF0aChIS0VZIGtleUJhc2UsIEJPT0wgYldpbjMycykKLXsKLSAgICBIS0VZIG5ld0tleSA9IDA7Ci0gICAgRFdPUkQgbmFtZVNpemUgPSAwOwotICAgIERXT1JEIGRhdGFTaXplID0gMDsKLSAgICBEV09SRCBudW1FbnRyaWVzID0gMDsKLSAgICBMT05HIHJjOwotICAgIGNoYXIgKnJldHZhbCA9IE5VTEw7Ci0gICAgY2hhciAqZGF0YUJ1ZjsKLSAgICBjb25zdCBjaGFyIGtleVByZWZpeFtdID0gIlNvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXCI7Ci0gICAgY29uc3QgY2hhciBrZXlTdWZmaXhbXSA9ICJcXFB5dGhvblBhdGgiOwotICAgIGludCB2ZXJzaW9uTGVuOwotICAgIGNoYXIgKmtleUJ1ZjsKLQotICAgIC8vIFRyaWVkIHRvIHVzZSBzeXNnZXQoIndpbnZlciIpIGJ1dCBoZXJlIGlzIHRvbyBlYXJseSA6LSgKLSAgICB2ZXJzaW9uTGVuID0gc3RybGVuKFB5V2luX0RMTFZlcnNpb25TdHJpbmcpOwotICAgIC8vIGFsbG9jYSA9PSBubyBmcmVlIHJlcXVpcmVkLCBidXQgbWVtb3J5IG9ubHkgbG9jYWwgdG8gZm4uCi0gICAgLy8gYWxzbyBubyBoZWFwIGZyYWdtZW50YXRpb24hICBBbSBJIGJlaW5nIHNpbGx5PwotICAgIGtleUJ1ZiA9IGFsbG9jYShzaXplb2Yoa2V5UHJlZml4KS0xICsgdmVyc2lvbkxlbiArIHNpemVvZihrZXlTdWZmaXgpKTsgLy8gY2hhcnMgb25seSwgcGx1cyAxIE5VTEwuCi0gICAgLy8gbG90cyBvZiBjb25zdGFudHMgaGVyZSBmb3IgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGF3YXkgOi0pCi0gICAgbWVtY3B5KGtleUJ1Ziwga2V5UHJlZml4LCBzaXplb2Yoa2V5UHJlZml4KS0xKTsKLSAgICBtZW1jcHkoa2V5QnVmK3NpemVvZihrZXlQcmVmaXgpLTEsIFB5V2luX0RMTFZlcnNpb25TdHJpbmcsIHZlcnNpb25MZW4pOwotICAgIG1lbWNweShrZXlCdWYrc2l6ZW9mKGtleVByZWZpeCktMSt2ZXJzaW9uTGVuLCBrZXlTdWZmaXgsIHNpemVvZihrZXlTdWZmaXgpKTsgLy8gTlVMTCBjb21lcyB3aXRoIHRoaXMgb25lIQotCi0gICAgcmM9UmVnT3BlbktleShrZXlCYXNlLAotICAgICAgICAgICAgICAgICAga2V5QnVmLAotICAgICAgICAgICAgICAgICAgJm5ld0tleSk7Ci0gICAgaWYgKHJjPT1FUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIFJlZ1F1ZXJ5SW5mb0tleShuZXdLZXksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAmbnVtRW50cmllcywgJm5hbWVTaXplLCAmZGF0YVNpemUsIE5VTEwsIE5VTEwpOwotICAgIH0KLSAgICBpZiAoYldpbjMycyAmJiBudW1FbnRyaWVzPT0wICYmIGRhdGFTaXplPT0wKSB7Ci0gICAgICAgIC8qIG11c3QgaGFyZGNvZGUgZm9yIFdpbjMycyAqLwotICAgICAgICBudW1FbnRyaWVzID0gMTsKLSAgICAgICAgZGF0YVNpemUgPSA1MTE7Ci0gICAgfQotICAgIGlmIChudW1FbnRyaWVzKSB7Ci0gICAgICAgIC8qIExvb3Agb3ZlciBhbGwgc3Via2V5cy4gKi8KLSAgICAgICAgLyogV2luMzJzIGRvZXNudCBrbm93IGhvdyBtYW55IHN1YmtleXMsIHNvIHdlIGRvCi0gICAgICAgICAgIGl0IHR3aWNlICovCi0gICAgICAgIGNoYXIga2V5QnVmW01BWF9QQVRIKzFdOwotICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICBpbnQgb2ZmID0gMDsKLSAgICAgICAgZm9yKGluZGV4PTA7O2luZGV4KyspIHsKLSAgICAgICAgICAgIGxvbmcgcmVxZFNpemUgPSAwOwotICAgICAgICAgICAgRFdPUkQgcmMgPSBSZWdFbnVtS2V5KG5ld0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwga2V5QnVmLCBNQVhfUEFUSCsxKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICByYyA9IFJlZ1F1ZXJ5VmFsdWUobmV3S2V5LCBrZXlCdWYsIE5VTEwsICZyZXFkU2l6ZSk7Ci0gICAgICAgICAgICBpZiAocmMpIGJyZWFrOwotICAgICAgICAgICAgaWYgKGJXaW4zMnMgJiYgcmVxZFNpemU9PTApIHJlcWRTaXplID0gNTEyOwotICAgICAgICAgICAgZGF0YVNpemUgKz0gcmVxZFNpemUgKyAxOyAvKiAxIGZvciB0aGUgIjsiICovCi0gICAgICAgIH0KLSAgICAgICAgZGF0YUJ1ZiA9IG1hbGxvYyhkYXRhU2l6ZSsxKTsKLSAgICAgICAgaWYgKGRhdGFCdWY9PU5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsgLyogcHJldHR5IHNlcmlvdXM/ICBSYWlzZSBlcnJvcj8gKi8KLSAgICAgICAgLyogTm93IGxvb3Agb3ZlciwgZ3JhYmJpbmcgdGhlIHBhdGhzLgotICAgICAgICAgICBTdWJrZXlzIGJlZm9yZSBtYWluIGxpYnJhcnkgKi8KLSAgICAgICAgZm9yKGluZGV4PTA7O2luZGV4KyspIHsKLSAgICAgICAgICAgIGludCBhZGp1c3Q7Ci0gICAgICAgICAgICBsb25nIHJlcWRTaXplID0gZGF0YVNpemU7Ci0gICAgICAgICAgICBEV09SRCByYyA9IFJlZ0VudW1LZXkobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBrZXlCdWYsTUFYX1BBVEgrMSk7Ci0gICAgICAgICAgICBpZiAocmMpIGJyZWFrOwotICAgICAgICAgICAgcmMgPSBSZWdRdWVyeVZhbHVlKG5ld0tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlCdWYsIGRhdGFCdWYrb2ZmLCAmcmVxZFNpemUpOwotICAgICAgICAgICAgaWYgKHJjKSBicmVhazsKLSAgICAgICAgICAgIGlmIChyZXFkU2l6ZT4xKSB7Ci0gICAgICAgICAgICAgICAgLyogSWYgTm90aGluZywgb3Igb25seSAnXDAnIGNvcGllZC4gKi8KLSAgICAgICAgICAgICAgICBhZGp1c3QgPSBzdHJsZW4oZGF0YUJ1ZitvZmYpOwotICAgICAgICAgICAgICAgIGRhdGFTaXplIC09IGFkanVzdDsKLSAgICAgICAgICAgICAgICBvZmYgKz0gYWRqdXN0OwotICAgICAgICAgICAgICAgIGRhdGFCdWZbb2ZmKytdID0gJzsnOwotICAgICAgICAgICAgICAgIGRhdGFCdWZbb2ZmXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgZGF0YVNpemUtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBBZGRpdGlvbmFsbHksIHdpbjMycyBkb2VzbnQgd29yayBhcyBleHBlY3RlZCwgc28KLSAgICAgICAgICAgdGhlIHNwZWNpZmljIHN0cmxlbigpIGlzIHJlcXVpcmVkIGZvciAzLjEuICovCi0gICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZShuZXdLZXksICIiLCBkYXRhQnVmK29mZiwgJmRhdGFTaXplKTsKLSAgICAgICAgaWYgKHJjPT1FUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBpZiAoc3RybGVuKGRhdGFCdWYpPT0wKQotICAgICAgICAgICAgICAgIGZyZWUoZGF0YUJ1Zik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dmFsID0gZGF0YUJ1ZjsgLyogY2FsbGVyIHdpbGwgZnJlZSAqLwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyZWUoZGF0YUJ1Zik7Ci0gICAgfQotCi0gICAgaWYgKG5ld0tleSkKLSAgICAgICAgUmVnQ2xvc2VLZXkobmV3S2V5KTsKLSAgICByZXR1cm4gcmV0dmFsOwotfQotI2VuZGlmIC8qIE1TX1dJTjMyICovCi0KLXN0YXRpYyB2b2lkCi1nZXRfcHJvZ3BhdGgodm9pZCkKLXsKLSAgICBleHRlcm4gY2hhciAqUHlfR2V0UHJvZ3JhbU5hbWUodm9pZCk7Ci0gICAgY2hhciAqcGF0aCA9IGdldGVudigiUEFUSCIpOwotICAgIGNoYXIgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwotCi0jaWZkZWYgTVNfV0lOMzIKLSAgICBpZiAoR2V0TW9kdWxlRmlsZU5hbWUoTlVMTCwgcHJvZ3BhdGgsIE1BWFBBVEhMRU4pKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBpZiAocHJvZyA9PSBOVUxMIHx8ICpwcm9nID09ICdcMCcpCi0gICAgICAgIHByb2cgPSAicHl0aG9uIjsKLQotICAgIC8qIElmIHRoZXJlIGlzIG5vIHNsYXNoIGluIHRoZSBhcmd2MCBwYXRoLCB0aGVuIHdlIGhhdmUgdG8KLSAgICAgKiBhc3N1bWUgcHl0aG9uIGlzIG9uIHRoZSB1c2VyJ3MgJFBBVEgsIHNpbmNlIHRoZXJlJ3Mgbm8KLSAgICAgKiBvdGhlciB3YXkgdG8gZmluZCBhIGRpcmVjdG9yeSB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uICBJZgotICAgICAqICRQQVRIIGlzbid0IGV4cG9ydGVkLCB5b3UgbG9zZS4KLSAgICAgKi8KLSNpZmRlZiBBTFRTRVAKLSAgICBpZiAoc3RyY2hyKHByb2csIFNFUCkgfHwgc3RyY2hyKHByb2csIEFMVFNFUCkpCi0jZWxzZQotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSkKLSNlbmRpZgotICAgICAgICBzdHJjcHkocHJvZ3BhdGgsIHByb2cpOwotICAgIGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGNoYXIgKmRlbGltID0gc3RyY2hyKHBhdGgsIERFTElNKTsKLQotICAgICAgICAgICAgaWYgKGRlbGltKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiA9IGRlbGltIC0gcGF0aDsKLSAgICAgICAgICAgICAgICBzdHJuY3B5KHByb2dwYXRoLCBwYXRoLCBsZW4pOwotICAgICAgICAgICAgICAgICoocHJvZ3BhdGggKyBsZW4pID0gJ1wwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHJjcHkocHJvZ3BhdGgsIHBhdGgpOwotCi0gICAgICAgICAgICBqb2luKHByb2dwYXRoLCBwcm9nKTsKLSAgICAgICAgICAgIGlmIChleGlzdHMocHJvZ3BhdGgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIWRlbGltKSB7Ci0gICAgICAgICAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aCA9IGRlbGltICsgMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHByb2dwYXRoWzBdID0gJ1wwJzsKLX0KLQotc3RhdGljIHZvaWQKLWNhbGN1bGF0ZV9wYXRoKHZvaWQpCi17Ci0gICAgY2hhciBhcmd2MF9wYXRoW01BWFBBVEhMRU4rMV07Ci0gICAgY2hhciAqYnVmOwotICAgIGludCBidWZzejsKLSAgICBjaGFyICpweXRob25ob21lID0gUHlfR2V0UHl0aG9uSG9tZSgpOwotICAgIGNoYXIgKmVudnBhdGggPSBQeV9HRVRFTlYoIlBZVEhPTlBBVEgiKTsKLSNpZmRlZiBNU19XSU4zMgotICAgIGNoYXIgKm1hY2hpbmVwYXRoLCAqdXNlcnBhdGg7Ci0KLSAgICAvKiBBcmUgd2UgcnVubmluZyB1bmRlciBXaW5kb3dzIDMuMSgxKSBXaW4zMnM/ICovCi0gICAgaWYgKFB5V2luX0lzV2luMzJzKCkpIHsKLSAgICAgICAgLyogT25seSBDTEFTU0VTX1JPT1QgaXMgc3VwcG9ydGVkICovCi0gICAgICAgIG1hY2hpbmVwYXRoID0gZ2V0cHl0aG9ucmVncGF0aChIS0VZX0NMQVNTRVNfUk9PVCwgVFJVRSk7Ci0gICAgICAgIHVzZXJwYXRoID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgICBtYWNoaW5lcGF0aCA9IGdldHB5dGhvbnJlZ3BhdGgoSEtFWV9MT0NBTF9NQUNISU5FLCBGQUxTRSk7Ci0gICAgICAgIHVzZXJwYXRoID0gZ2V0cHl0aG9ucmVncGF0aChIS0VZX0NVUlJFTlRfVVNFUiwgRkFMU0UpOwotICAgIH0KLSNlbmRpZgotCi0gICAgZ2V0X3Byb2dwYXRoKCk7Ci0gICAgc3RyY3B5KGFyZ3YwX3BhdGgsIHByb2dwYXRoKTsKLSAgICByZWR1Y2UoYXJndjBfcGF0aCk7Ci0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCB8fCAqcHl0aG9uaG9tZSA9PSAnXDAnKSB7Ci0gICAgICAgIGlmIChzZWFyY2hfZm9yX3ByZWZpeChhcmd2MF9wYXRoLCBMQU5ETUFSSykpCi0gICAgICAgICAgICBweXRob25ob21lID0gcHJlZml4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBweXRob25ob21lID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgY2hhciAqZGVsaW07Ci0KLSAgICAgICAgc3RyY3B5KHByZWZpeCwgcHl0aG9uaG9tZSk7Ci0KLSAgICAvKiBFeHRyYWN0IEFueSBPcHRpb25hbCBUcmFpbGluZyBFWEVDX1BSRUZJWCAqLwotICAgIC8qIGUuZy4gUFlUSE9OSE9NRT08cHJlZml4Pjo8ZXhlY19wcmVmaXg+ICAgKi8KLSAgICBkZWxpbSA9IHN0cmNocihwcmVmaXgsIERFTElNKTsKLSAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgKmRlbGltID0gJ1wwJzsKLSAgICAgICAgc3RyY3B5KGV4ZWNfcHJlZml4LCBkZWxpbSsxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RyY3B5KGV4ZWNfcHJlZml4LCBFWEVDX1BSRUZJWCk7Ci0gICAgfQotCi0gICAgaWYgKGVudnBhdGggJiYgKmVudnBhdGggPT0gJ1wwJykKLSAgICAgICAgZW52cGF0aCA9IE5VTEw7Ci0KLSAgICAvKiBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhIHBhdGggZnJvbSB0aGUgZm9sbG93aW5nIHBhcnRzOgotICAgICAgICgxKSB0aGUgUFlUSE9OUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgc2V0OwotICAgICAgICgyKSBmb3IgV2luMzIsIHRoZSBtYWNoaW5lcGF0aCBhbmQgdXNlcnBhdGgsIGlmIHNldDsKLSAgICAgICAoMykgdGhlIFBZVEhPTlBBVEggY29uZmlnIG1hY3JvLCB3aXRoIHRoZSBsZWFkaW5nICIuIgotICAgICAgICAgICBvZiBlYWNoIGNvbXBvbmVudCByZXBsYWNlZCB3aXRoIHB5dGhvbmhvbWUsIGlmIHNldDsKLSAgICAgICAoNCkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlIChhcmd2MF9wYXRoKS4KLSAgICAgICBUaGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGNhbGN1bGF0ZXMgIzMgZmlyc3QuCi0gICAgKi8KLQotICAgIC8qIENhbGN1bGF0ZSBzaXplIG9mIHJldHVybiBidWZmZXIgKi8KLSAgICBpZiAocHl0aG9uaG9tZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNoYXIgKnA7Ci0gICAgICAgIGJ1ZnN6ID0gMTsKLSAgICAgICAgZm9yIChwID0gUFlUSE9OUEFUSDsgKnA7IHArKykgewotICAgICAgICAgICAgaWYgKCpwID09IERFTElNKQotICAgICAgICAgICAgICAgIGJ1ZnN6Kys7IC8qIG51bWJlciBvZiBERUxJTSBwbHVzIG9uZSAqLwotICAgICAgICB9Ci0gICAgICAgIGJ1ZnN6ICo9IHN0cmxlbihweXRob25ob21lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBidWZzeiA9IDA7Ci0gICAgYnVmc3ogKz0gc3RybGVuKFBZVEhPTlBBVEgpICsgMTsKLSAgICBpZiAoZW52cGF0aCAhPSBOVUxMKQotICAgICAgICBidWZzeiArPSBzdHJsZW4oZW52cGF0aCkgKyAxOwotICAgIGJ1ZnN6ICs9IHN0cmxlbihhcmd2MF9wYXRoKSArIDE7Ci0jaWZkZWYgTVNfV0lOMzIKLSAgICBpZiAobWFjaGluZXBhdGgpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihtYWNoaW5lcGF0aCkgKyAxOwotICAgIGlmICh1c2VycGF0aCkKLSAgICAgICAgYnVmc3ogKz0gc3RybGVuKHVzZXJwYXRoKSArIDE7Ci0jZW5kaWYKLQotICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZiA9IG1hbGxvYyhidWZzeik7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIFdlIGNhbid0IGV4aXQsIHNvIHByaW50IGEgd2FybmluZyBhbmQgbGltcCBhbG9uZyAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IG1hbGxvYyBkeW5hbWljIFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgaWYgKGVudnBhdGgpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZGVmYXVsdCBzdGF0aWMgJFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGVudnBhdGg7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzaW5nIGVudmlyb25tZW50ICRQWVRIT05QQVRILlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQWVRIT05QQVRIOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCkgewotICAgICAgICBzdHJjcHkoYnVmLCBlbnZwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChtYWNoaW5lcGF0aCkgewotICAgICAgICBzdHJjcHkoYnVmLCBtYWNoaW5lcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICB9Ci0gICAgaWYgKHVzZXJwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIHVzZXJwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSNlbmRpZgotICAgIGlmIChweXRob25ob21lID09IE5VTEwpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgUFlUSE9OUEFUSCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgY2hhciAqcCA9IFBZVEhPTlBBVEg7Ci0gICAgICAgIGNoYXIgKnE7Ci0gICAgICAgIGludCBuOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBxID0gc3RyY2hyKHAsIERFTElNKTsKLSAgICAgICAgICAgIGlmIChxID09IE5VTEwpCi0gICAgICAgICAgICAgICAgbiA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuID0gcS1wOwotICAgICAgICAgICAgaWYgKHBbMF0gPT0gJy4nICYmIGlzX3NlcChwWzFdKSkgewotICAgICAgICAgICAgICAgIHN0cmNweShidWYsIHB5dGhvbmhvbWUpOwotICAgICAgICAgICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgICAgICBuLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHJuY3B5KGJ1ZiwgcCwgbik7Ci0gICAgICAgICAgICBidWYgKz0gbjsKLSAgICAgICAgICAgIGlmIChxID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgICAgIHAgPSBxKzE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGFyZ3YwX3BhdGgpIHsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIHN0cmNweShidWYsIGFyZ3YwX3BhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICB9Ci0gICAgKmJ1ZiA9ICdcMCc7Ci19Ci0KLQotLyogRXh0ZXJuYWwgaW50ZXJmYWNlICovCi0KLWNoYXIgKgotUHlfR2V0UGF0aCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIG1vZHVsZV9zZWFyY2hfcGF0aDsKLX0KLQotY2hhciAqCi1QeV9HZXRQcmVmaXgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLQotICAgIHJldHVybiBwcmVmaXg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0RXhlY1ByZWZpeCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIGV4ZWNfcHJlZml4OwotfQotCi1jaGFyICoKLVB5X0dldFByb2dyYW1GdWxsUGF0aCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIHByb2dwYXRoOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvbWFrZWZpbGUgYi9QQy9vczJ2YWNwcC9tYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmMGFkYy4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9tYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE1NDkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyAgICAgICAgICBUb3AtTGV2ZWwgTWFrZWZpbGUgZm9yIEJ1aWxkaW5nIFB5dGhvbiBmb3IgT1MvMgotIwotIyBUaGlzIG1ha2VmaWxlIHdhcyBkZXZlbG9wZWQgZm9yIHVzZSB3aXRoIElCTSdzIFZpc3VhbEFnZSBDL0MrKwotIyBmb3IgT1MvMiBjb21waWxlciwgdmVyc2lvbiAzLjAsIHdpdGggRml4cGFjayA4IGFwcGxpZWQuICBJdCB1c2VzCi0jIHZlcnNpb24gNC4wIG9mIHRoZSBOTUFLRSB0b29sIHRoYXQgY29tZXMgd2l0aCB0aGF0IHBhY2thZ2UuCi0jCi0jIFRoZSBvdXRwdXQgb2YgdGhlIGJ1aWxkIGlzIGEgbGFyZ2lzaCBQeXRob24yMy5ETEwgY29udGFpbmluZyB0aGUKLSMgZXNzZW50aWFsIG1vZHVsZXMgb2YgUHl0aG9uIGFuZCBhIHNtYWxsIFB5dGhvbi5leGUgcHJvZ3JhbSB0byBzdGFydAotIyB0aGUgaW50ZXJwcmV0ZXIuICBXaGVuIGVtYmVkZGluZyBQeXRob24gd2l0aGluIGFub3RoZXIgcHJvZ3JhbSwgb25seQotIyBQeXRob24yMy5ETEwgaXMgbmVlZGVkLgotIwotIyBUaGVzZSB0d28gYmluYXJpZXMgY2FuIGJlIHN0YXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIFZpc3VhbEFnZSBDL0MrKwotIyBydW50aW1lIGxpYnJhcnkgKHByb2R1Y2luZyBsYXJnZXIgYmluYXJpZXMpLCBvciBkeW5hbWljYWxseSBsaW5rZWQKLSMgdG8gbWFrZSBzbWFsbGVyIG9uZXMgdGhhdCByZXF1aXJlIHRoZSBjb21waWxlciB0byBiZSBpbnN0YWxsZWQgb24KLSMgYW55IHN5c3RlbSBQeXRob24gaXMgdXNlZCBvbi4gIFJldmlldyB0aGUgL0dkKyBjb21waWxlciBvcHRpb24gZm9yCi0jIGhvdyB0byBkbyB0aGlzLgotIwotIyBOT1RFOiBJQk0ncyBOTUFLRSA0LjAgaXMgcmF0aGVyIGR1bWIsIHJlcXVpcmluZyB0aGlzIG1ha2VmaWxlIHRvCi0jICAgICAgIGJlIG11Y2ggbW9yZSBjb21wbGljYXRlZCB0aGFuIG5lY2Vzc2FyeS4gIEkgdXNlIE9wdXNNQUtFCi0jICAgICAgIG15c2VsZiBmb3IgYSBtdWNoIG1vcmUgcG93ZXJmdWwgTUFLRSB0b29sIGJ1dCBub3QgZXZlcnlvbmUKLSMgICAgICAgd2lzaGVzIHRvIGJ1eSBpdC4gIEhvd2V2ZXIsIGFzIGEgcmVzdWx0IEkgZGlkbid0IGhvb2sgaW4KLSMgICAgICAgdGhlIGRlcGVuZGVuY2llcyBvbiB0aGUgaW5jbHVkZSBmaWxlcyBhcyBOTUFLRSBoYXMgbm8gZWFzeQotIyAgICAgICB3YXkgdG8gZG8gdGhpcyB3aXRob3V0IGV4cGxpY2l0bHkgc3BlbGxpbmcgaXQgYWxsIG91dC4KLSMKLSMgSGlzdG9yeSAoTW9zdCBSZWNlbnQgRmlyc3QpCi0jCi0jIDI2LVNlcC05OCBqcnIgUmV0ZXN0ZWQgYW5kIGFkanVzdGVkIGZvciBidWlsZGluZyB3L1B5dGhvbiAxLjUuMmExCi0jIDIwLU5vdi05NyBqcnIgQ2xlYW5lZCBVcCBmb3IgQXBwbHlpbmcgdG8gRGlzdHJpYnV0aW9uCi0jIDI5LU9jdC05NyBqcnIgTW9kaWZpZWQgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjUgQWxwaGEgNAotIyAwMy1BdWctOTYganJyIE9yaWdpbmFsIGZvciBVc2Ugd2l0aCBQeXRob24gMS40IFJlbGVhc2UKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQbGFjZXMgYW5kIFRoaW5ncwotIyMjIyMjIyMjIyMjIyMjIyMjIwotUFlfTU9EVUxFUyAgICAgID0gLi5cLi5cTW9kdWxlcwotUFlfT0JKRUNUUyAgICAgID0gLi5cLi5cT2JqZWN0cwotUFlfUEFSU0VSICAgICAgID0gLi5cLi5cUGFyc2VyCi1QWV9QWVRIT04gICAgICAgPSAuLlwuLlxQeXRob24KLVBZX0lOQ0xVREUgICAgICA9IC4uXC4uXEluY2x1ZGUKLVBZX0lOQ0xVREVTICAgICA9IC47JChQWV9JTkNMVURFKTskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotCi0jIEZpbGUgdG8gQ29sbGVjdCBXb3JkeSBDb21waWxlciBPdXRwdXQgcmUgRXJyb3JzCi1FUlJTCQk9IG1ha2Uub3V0Ci0KLSMgV2hlcmUgdG8gRmluZCB0aGUgSUJNIFRDUC9JUCBTb2NrZXQgSW5jbHVkZXMgYW5kIExpYnJhcmllcwotT1MyVENQSVAgICAgICAgID0gQzpcTVBUTgotCi0jIFdoZXJlIHRvIEZpbmQgdGhlIFRjbC9UayBCYXNlIERpcmVjdG9yeSBmb3IgTGlicy9JbmNsdWRlcwotVENMVEsJCT0gRDpcVGNsVGsKLVRDTEJBU0UJCT0gRDpcVGNsNy42XE9TMgotVEtCQVNFCQk9IEQ6XFRrNC4yXE9TMgotCi0jIFdoZXJlIHRvIFB1dCB0aGUgLk9CSiBGaWxlcywgVG8gS2VlcCBUaGVtIE91dCBvZiB0aGUgV2F5Ci1QQVRIT0JKCQk9IG9iagotCi0jIFNlYXJjaCBQYXRoIGZvciBJbmNsdWRlIEZpbGVzCi1QUk9KSU5DTFVERQk9IC47JChUQ0xCQVNFKTskKFRLQkFTRSk7JChPUzJUQ1BJUClcSW5jbHVkZTskKFBZX0lOQ0xVREVTKQotCi0jIFBsYWNlIHRvIFNlYXJjaCBmb3IgU291cmNlcyByZSBPcHVzTUFLRSBEZXBlbmRlbmN5IEdlbmVyYXRvciAoQ29tbWVyY2lhbCkKLU1LTUZfU1JDUwk9ICQoUFlfTU9EVUxFUylcKi5jICQoUFlfT0JKRUNUUylcKi5jICQoUFlfUEFSU0VSKVwqLmMgJChQWV9QWVRIT04pXCouYwotCi0jLkhEUlBBVEguYwk6PSAkKFBST0pJTkNMVURFLDs9ICkgJCguSERSUEFUSC5jKQotIy5QQVRILmMgICAgICAgICA9IC47JChQWV9NT0RVTEVTKTskKFBZX09CSkVDVFMpOyQoUFlfUEFSU0VSKTskKFBZX1BZVEhPTikKLU9USEVSTElCUwk9IHNvMzJkbGwubGliIHRjcDMyZGxsLmxpYiAjIFRjbDc2LmxpYiBUazQyLmxpYgotCi0jIyMjIyMjIyMjIyMjIyMjIwotIyBJbmZlcmVuY2UgUnVsZXMKLSMjIyMjIyMjIyMjIyMjIyMjCi17JChQWV9NT0RVTEVTKVx9LmN7JChQQVRIT0JKKVx9Lm9iajoJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi17JChQWV9PQkpFQ1RTKVx9LmN7JChQQVRIT0JKKVx9Lm9iajoJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi17JChQWV9QQVJTRVIpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX1BZVEhPTilcfS5jeyQoUEFUSE9CSilcfS5vYmo6CSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQotLmN7JChQQVRIT0JKKVx9Lm9iajoJCQkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHl0aG9uIFN1YnN5c3RlbXMKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBQWVRIT04gaXMgdGhlIGNlbnRyYWwgY29yZSwgY29udGFpbmluZyB0aGUgYnVpbHRpbnMgYW5kIGludGVycHJldGVyLgotUFlUSE9OCQk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQmx0aW5Nb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ0V2YWwub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ29tcGlsZS5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRXJyb3JzLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRnJvemVuLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0YXJncy5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0Q29tcGlsZXIub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0Q29weXJpZ2h0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0TVRpbWUub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0T3B0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0UGxhdGZvcm0ub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0VmVyc2lvbi5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR3JhbUluaXQub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcSW1wb3J0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcSW1wb3J0REwub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTWFyc2hhbC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTW9kU3VwcG9ydC5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTXlTdHJ0b3VsLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUHlTdGF0ZS5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUHl0aG9uUnVuLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RydWN0TWVtYmVyLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3lzTW9kdWxlLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVGhyZWFkLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVHJhY2VCYWNrLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRnJvemVuTWFpbi5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcZXhjZXB0aW9ucy5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcc3ltdGFibGUub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcY29kZWNzLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcZnV0dXJlLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcZHlubG9hZF9vczIub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcbXlzbnByaW50Zi5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcaXRlcm9iamVjdC5vYmoKLQotIyBQeXRob24ncyBJbnRlcm5hbCBQYXJzZXIKLVBBUlNFUgkJPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQWNjZWxlci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHcmFtbWFyMS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXExpc3ROb2RlLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTm9kZS5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQYXJzZXIub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBhcnNlVG9rLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQml0U2V0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNZXRhR3JhbW1hci5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRva2VuaXplci5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTXlSZWFkbGluZS5vYmoKLQotIyBQeXRob24gT2JqZWN0IFR5cGVzCi1PQkpFQ1RTCQk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxBYnN0cmFjdC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEJvb2xPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQnVmZmVyT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDZWxsT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENsYXNzT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ09iamVjdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDb21wbGV4T2JqZWN0Lm9iaiBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXERlc2NyT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRGljdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxFbnVtT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZpbGVPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmxvYXRPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcmFtZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZ1bmNPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcSXRlck9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxMaXN0T2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXExvbmdPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTWV0aG9kT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNb2R1bGVPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE9iamVjdC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcT2JNYWxsb2Mub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxSYW5nZU9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFNsaWNlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RyaW5nT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJ1Y3RTZXEub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFR1cGxlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVHlwZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxVbmljb2RlT2JqZWN0Lm9iaiBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFVuaWNvZGVDVHlwZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcV2Vha3JlZk9iamVjdC5vYmoKLQotIyBFeHRlbnNpb24gTW9kdWxlcyAoQnVpbHQtSW4gb3IgYXMgU2VwYXJhdGUgRExMcykKLU1PRFVMRVMJCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEFycmF5TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQmluQXNjaWkub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDTWF0aE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEVycm5vTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR0NNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRCdWlsZEluZm8ub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldFBhdGhQLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTWFpbi5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYXRoTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1ENWMub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTUQ1TW9kdWxlLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxPcGVyYXRvci5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBDUkVNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUHlQQ1JFLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQb3NpeE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFJlZ2V4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUmVnRXhwci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTZWxlY3RNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFNpZ25hbE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU29ja2V0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJvcE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cnVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVGltZU1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaHJlYWRNb2R1bGUub2JqCi0KLSMgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi1QR0VOICAgICAgICAgICAgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUEdlbi5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQR2VuTWFpbi5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE15U05QcmludGYub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVG9rZW5pemVyX1BnZW4ub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUHJpbnRHcmFtbWFyLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHcmFtbWFyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZpcnN0U2V0cy5vYmoKLQotIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1hY3JvcyBhbmQgRmxhZ3MKLSMjIyMjIyMjIyMjIyMjIyMjIwotX0JBU0UJCT0gL1EgL1cyIC9JJChQUk9KSU5DTFVERSkKLQkJIyAvUSAgID0gT21pdCBJQk0gQ29weXJpZ2h0Ci0JCSMgL1cyICA9IFNob3cgV2FybmluZ3MvRXJyb3JzIE9ubHkKLQotX0dFTgkJPSAvRzQgL0dtIC9HZC0KLQkJIyAvRzQgID0gR2VuZXJhdGUgQ29kZSBmb3IgNDg2IChVc2UgMzg2IGZvciBEZWJ1Z2dlcikKLQkJIyAvR20gID0gVXNlIE11bHRpdGhyZWFkIFJ1bnRpbWUKLQkJIyAvR2QgID0gRHluYW1pY2FsbHkgTG9hZCBSdW50aW1lCi0JCSMgL01zICA9IFVzZSBfU3lzdGVtIENhbGxpbmcgQ29udmVudGlvbiAodnMgX09wdGxpbmspCi0JCSMgICAgICAgICh0byBhbGxvdyBub24tVkFDKysgY29kZSB0byBjYWxsIGludG8gUHl0aG9uMjMuZGxsKQotCi1fT1BUCQk9IC9PIC9HbAotCQkjIC9PICAgPSBFbmFibGUgU3BlZWQtT3B0aW1pemF0aW9ucwotCQkjIC9PbCAgPSBQYXNzIENvZGUgVGhydSBJbnRlcm1lZGlhdGUgTGlua2VyCi0JCSMgL0d1ICA9IEFkdmlzZSBMaW5rZXIgQWxsIEV4dCBEYXRhIGlzIElEJ2QKLQkJIyAvR2wgID0gSGF2ZSBMaW5rZXIgUmVtb3ZlIFVudXNlZCBGbnMKLQotX0RCRwkJPSAvV3Byby0gL1RpLSAvREhBVkVfQ09ORklHX0ggL0RVU0VfU09DS0VUCi0gICAgICAgICAgICAgICAgIyAvV3Bybz0gR2VuZXJhdGUgQ29tcGlsZXIgV2FybmluZ3MgcmUgTWlzc2luZyBQcm90b3R5cGVzCi0JCSMgL1RpICA9IEVtYmVkIERlYnVnZ2VyL0FuYWx5emVyIFJlY3MKLQkJIyAvVG0gID0gRW5hYmxlIERlYnVnIE1lbW9yeSBGbnMKLQkJIyAvVHggID0gUmVxdWVzdCBGdWxsIER1bXAgVXBvbiBFeGNlcHRpb24KLQkJIyAvREhBVkVfQ09ORklHX0ggPSBDYXVzZXMgVXNlIG9mIENPTkZJRy5IIFNldHRpbmdzCi0gICAgICAgICAgICAgICAgIyAvRFVTRV9TT0NLRVQgPSBFbmFibGVzIEJ1aWxkaW5nIEluIG9mIFNvY2tldCBBUEkKLQotX09VVAkJPSAKLQkJIyAvRmIgID0gRW1iZWQgQnJvd3NlciBSZWNzCi0JCSMgL0doICA9IEdlbmVyYXRlIENvZGUgZm9yIFByb2ZpbGVyIEhvb2tzCi0JCSMgL0ZsICA9IE91dHB1dCBDL0MrKyBMaXN0aW5nIEZpbGVzCi0gICAgICAgICAgICAgICAgIyAvTGYgID0gUHJvdmlkZSBGdWxsIChEZXRhaWxlZCkgTGlzdGluZyBGaWxlcwotCQkjIC9GbS4gPSBPdXRwdXQgTGlua2VyIE1hcCBGaWxlCi0JCSMgL0Z0LiA9IE91dHB1dCBDKysgVGVtcGxhdGUgUmVzb2x1dGlvbiBGaWxlcwotCi1fTUFQCQk9IC9GbU5vaXNlXCQoQFIpLm1hcAotCi1fRExMCQk9IC9HZS0KLV9FWEUJCT0gL0dlCi0JCSMgL0dlID0gQ3JlYXRlIGFuIEVYRSwgbm90IERMTAotCi1DRkxBR1MJCT0gJChfQkFTRSkgJChfR0VOKSAkKF9PUFQpICQoX0RCRykgJChfT1VUKSAkKF9FWEUpIC9TcwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFByaW1hcnkgVGFyZ2V0KHMpCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1BbGw6ICBvYmogbm9pc2UgUHlDb3JlLmxpYiBQeXRob24yMy5saWIgUEdlbi5leGUgXAotICAgICAgUHl0aG9uLmV4ZSBQeXRob25QTS5leGUgUHl0aG9uMjMuZGxsICMgX3RraW50ZXIuZGxsCi0KLU1vZHVsZXM6ICQoTU9EVUxFUykKLU9iamVjdHM6ICQoT0JKRUNUUykKLVBhcnNlcjogICQoUEFSU0VSKQotUHl0aG9uOiAgJChQWVRIT04pCi0KLSMgRGlyZWN0b3J5IHRvIEtlZXAgLk9CSiBGaWxlcyBPdXQgb2YgdGhlIFdheQotb2JqOgotCUAtbWtkaXIgb2JqID4+TlVMCi0KLSMgRGlyZWN0b3J5IHRvIEtlZXAgLk1BUCBhbmQgU3VjaCBUZXh0IEZpbGVzIE91dCBvZiB0aGUgV2F5Ci1ub2lzZToKLQlALW1rZGlyIG5vaXNlID4+TlVMCi0KLSMjIyMjIyMjIyMjIyMjCi0jCi0jIyMjIyMjIyMjIyMjIwotCi0jIFB5dGhvbiBFeHRlbnNpb24gRExMOiBUY2wvVGsgSW50ZXJmYWNlCi0jX3RraW50ZXIuZGxsOiAkKFBBVEhPQkopXF90a2ludGVyLm9iaiBQeXRob24yMy5saWIgX3RraW50ZXIuZGVmCi0jCUAgRWNobyBMaW5raW5nICRAIEFzIERMTAotIwlAICQoQ0MpICQoQ0ZMQUdTKSAvQiIvTk9FIiAkKF9ETEwpIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotIyQoUEFUSE9CSilcX3RraW50ZXIub2JqOiAkKFBZX01PRFVMRVMpXF90a2ludGVyLmMKLSMJQCBFY2hvIENvbXBpbGluZyAkKioKLSMJQCAkKENDKSAtYyAkKENGTEFHUykgJChfRExMKSAtRm8kQCAkKiogPj4kKEVSUlMpCi0KLSMgT2JqZWN0IExpYnJhcnkgb2YgQWxsIEVzc2VudGlhbCBQeXRob24gUm91dGluZXMKLVB5Q29yZS5saWI6ICQoTU9EVUxFUykgJChPQkpFQ1RTKSAkKFBBUlNFUikgJChQWVRIT04pICQoUEFUSE9CSilcQ29uZmlnLm9iagotCUAgRWNobyBBZGRpbmcgVXBkYXRlZCBPYmplY3QgRmlsZXMgdG8gTGluayBMaWJyYXJ5ICRACi0JQCAhIElMSUIgJEAgL05PTE9HTyAvTk9CQUNLVVAgLSskPyA7ID4+JChFUlJTKQotCi1QeXRob24yMy5kbGw6ICQoUEFUSE9CSilcQ29tcGlsZS5vYmogUHlDb3JlLmxpYiBQeXRob24uZGVmCi0JQCBFY2hvIExpbmtpbmcgJEAgQXMgRExMCi0JQCAkKENDKSAkKENGTEFHUykgL0IiL05PRSIgJChfRExMKSAvRmUkQCAkKF9NQVApICQqKiAkKE9USEVSTElCUykgPj4kKEVSUlMpCi0jCUAgRWNobyBDb21wcmVzc2luZyAkQCB3aXRoIEx4TGl0ZQotIwlAIGx4bGl0ZSAkQAotCi0jIElCTSBMaW5rZXIgUmVxdWlyZXMgT25lIEV4cGxpY2l0IC5PQkogVG8gQnVpbGQgYSAuRExMIGZyb20gYSAuTElCCi0kKFBBVEhPQkopXENvbXBpbGUub2JqOiAkKFBZX1BZVEhPTilcQ29tcGlsZS5jCi0JQCBFY2hvIENvbXBpbGluZyAkKioKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAkKF9ETEwpIC1GbyRAICQqKiA+PiQoRVJSUykKLQotIyBJbXBvcnQgTGlicmFyeSBmb3IgVXNpbmcgdGhlIFB5dGhvbjIzLmRsbAotUHl0aG9uMjMubGliOiBQeXRob24uZGVmCi0JQCBFY2hvIE1ha2luZyAkQAotCUAgSU1QTElCIC9OT0xPR08gL05PSUdOT1JFICRAICQqKiA+PiQoRVJSUykKLQlAIElMSUIgL05PTE9HTyAvQ09OVkZPUk1BVCAvTk9FWFRESUNUSU9OQVJZIC9OT0JST1dTRSAvTk9CQUNLVVAgJEA7ID4+JChFUlJTKQotCi0jIFNtYWxsIENvbW1hbmQtTGluZSBQcm9ncmFtIHRvIFN0YXJ0IEludGVycHJldGVyIGluIFB5dGhvbjIzLmRsbAotUHl0aG9uLmV4ZTogJChQQVRIT0JKKVxQeXRob24ub2JqIFB5dGhvbjIzLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1BNOlZJTyAvU1RBQ0s6MzYwMDAwIiAvRmUkQCAkKF9NQVApICQqKiAkKE9USEVSTElCUykgPj4kKEVSUlMpCi0KLSMgU21hbGwgUE0tR1VJIFByb2dyYW0gdG8gU3RhcnQgSW50ZXJwcmV0ZXIgaW4gUHl0aG9uMjMuZGxsCi1QeXRob25QTS5leGU6ICQoUEFUSE9CSilcUHl0aG9uLm9iaiBQeXRob24yMy5saWIKLQlAIEVjaG8gTGlua2luZyAkQCBBcyBFWEUKLQlAICQoQ0MpICQoQ0ZMQUdTKSAkKF9FWEUpIC9CIi9QTTpQTSAvU1RBQ0s6MzYwMDAwIiAvRmUkQCAkKF9NQVApICQqKiAkKE9USEVSTElCUykgPj4kKEVSUlMpCi0KLVBHZW4uZXhlOiAkKFBHRU4pIFB5Q29yZS5saWIKLQlAIEVjaG8gTGlua2luZyAkQCBBcyBFWEUKLQlAICQoQ0MpICQoQ0ZMQUdTKSAkKF9FWEUpIC9CIi9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTWlzY2VsbGFuZW91cyBUYXJnZXRzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFJlbW92ZSBJbnRlcm1lZGlhdGUgVGFyZ2V0cyBidXQgTGVhdmUgRXhlY3V0YWJsZSBCaW5hcmllcwotY2xlYW46Ci0JLS0gRGVsIC9RICQoUEFUSE9CSilcKi5vYmoJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAvWSBOb2lzZQkJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAkKEVSUlMpCQkJPk5VTCAyPiYxCi0KLSMgUmVtb3ZlIEFsbCBUYXJnZXRzLCBJbmNsdWRpbmcgRmluYWwgQmluYXJpZXMKLWRpc3RjbGVhbjogY2xlYW4KLSAgICAgICAgLS0gRGVsIC9RIFB5Q29yZS5saWIgUHl0aG9uMjMubGliICAgICAgID5OVUwgMj4mMQotICAgICAgICAtLSBEZWwgL1EgUHl0aG9uMjMuZGxsIFB5dGhvbi5leGUgUEdlbi5leGUgPk5VTCAyPiYxCi0KLXJlbGVhc2U6IFB5dGhvbi5leGUgUHl0aG9uMjMuZGxsIFB5dGhvbjIzLmxpYgotCS0tIEBFY2hvIFkgfCBjb3B5IC9VIFB5dGhvbi5leGUgICBEOlxFWEVzCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgUHl0aG9uMjMuZGxsIEQ6XERMTHMKLQktLSBARWNobyBZIHwgY29weSAvVSBQeXRob24yMy5saWIgRTpcVGF1XExpYgotCS0tIEBFY2hvIFkgfCBjb3B5IC9VIF90a2ludGVyLmRsbCBEOlxQeXRob24KLQotdGVzdDoKLSAgICAgICAgcHl0aG9uIC4uXC4uXGxpYlx0ZXN0XHJlZ3J0ZXN0LnB5Ci0KLSMgVXBkYXRlIERlcGVuZGVuY2llcyBvbiBUYXJnZXRzIChVc2VzIE9wdXNNQUtFIENvbW1lcmNpYWwgUHJvZHVjdCkKLWRlcGVuZDoKLQlEOlxPcHVzTWFrZVxvczJta21mIC1jIC1zCi0KLSMjIyBPUFVTIE1LTUY6ICBEbyBub3QgcmVtb3ZlIHRoaXMgbGluZSEgIEdlbmVyYXRlZCBkZXBlbmRlbmNpZXMgZm9sbG93LgotCi1fdGtpbnRlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYXJyYXltb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYXVkaW9vcC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteW1hdGguaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWJpbmFzY2lpLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jbWF0aG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNwaWNrbGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jcnlwdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jdXJzZXNtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotX2RibW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZXJybm8ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWVycm5vbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZjbnRsbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXGlvY3RsLmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnBlY3RsbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZwZXRlc3Rtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotX2dkYm1tb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdldGJ1aWxkaW5mby5vYmo6IHB5Y29uZmlnLmgKLQotZ2V0cGF0aC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlcb3NkZWZzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdycG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcZ3JwLmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWltYWdlb3Aub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1haW4ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1hdGhtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tcHptb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW5pc21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXHN5c1x0aW1lLmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotb3BlcmF0b3Iub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXBhcnNlcm1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxncmFtaW5pdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0b2tlbi5oIFwKLQkgJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcG9zaXgub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxteXRpbWUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1wb3NpeG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXB3ZG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoT1MyVENQSVApXEluY2x1ZGVccHdkLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJlYWRsaW5lLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1yZXNvdXJjZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXHN5c1x0aW1lLmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc2VsZWN0bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbXlzZWxlY3QuaCAkKFBZX0lOQ0xVREUpXG15dGltZS5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNpZ25hbG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zb2NrZXRtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxuZXRpbmV0XGluLmggXAotCSAkKE9TMlRDUElQKVxJbmNsdWRlXHN5c1xzb2NrZXQuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoT1MyVENQSVApXEluY2x1ZGVcbmV0ZGIuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zdHJ1Y3Rtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zeXNsb2dtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXHN5c2xvZy5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10ZXJtaW9zLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fdGhyZWFkbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRocmVhZC5oIFwKLQkgJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotdGltZW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXh4bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi16bGlibW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hYnN0cmFjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY2xhc3NvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jb21wbGV4b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZGljdG9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmlsZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZsb2F0b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnJhbWVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oIFwKLQkgJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnJhbWVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3Bjb2RlLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZ1bmNvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1saXN0b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1sb25nb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ2ludHJlcHIuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWV0aG9kb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tb2R1bGVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1yYW5nZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zbGljZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zdHJpbmdvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10dXBsZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10eXBlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi14eG9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYWNjZWxlci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG5vZGUuaCBcCi0JICQoUFlfUEFSU0VSKVxwYXJzZXIuaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotYml0c2V0Lm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1maXJzdHNldHMub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLWdyYW1tYXIub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLWdyYW1tYXIxLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxncmFtbWFyLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1pbnRyY2hlY2sub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotbGlzdG5vZGUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1tZXRhZ3JhbW1hci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0YWdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX1BBUlNFUilccGdlbi5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1teXJlYWRsaW5lLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oCi0KLW5vZGUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG5vZGUuaCBcCi0JICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1wYXJzZXIub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX1BBUlNFUilccGFyc2VyLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLXBhcnNldG9rLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZXJyY29kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxncmFtbWFyLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9QQVJTRVIpXHBhcnNlci5oICQoUFlfSU5DTFVERSlccGFyc2V0b2suaCBcCi0JICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX1BBUlNFUilcdG9rZW5pemVyLmgKLQotcGdlbi5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0YWdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX1BBUlNFUilccGdlbi5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1wZ2VubWFpbi5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG5vZGUuaCBcCi0JICQoUFlfSU5DTFVERSlccGFyc2V0b2suaCAkKFBZX1BBUlNFUilccGdlbi5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXByaW50Z3JhbW1hci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi10b2tlbml6ZXIub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZXJyY29kZS5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlcdG9rZW4uaCAkKFBZX1BBUlNFUilcdG9rZW5pemVyLmgKLQotYXRvZi5vYmo6IHB5Y29uZmlnLmgKLQotYmx0aW5tb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oIFwKLQkgJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZXZhbC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteW1hdGguaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNldmFsLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZyYW1lb2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXG9wY29kZS5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY29tcGlsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcZ3JhbWluaXQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oIFwKLQkgJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvcGNvZGUuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0b2tlbi5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZXJyb3JzLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mbW9kLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oCi0KLWZyb3plbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnJvemVubWFpbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0YXJncy5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29tcGlsZXIub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29weXJpZ2h0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdldHBsYXRmb3JtLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWdldHZlcnNpb24ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHBhdGNobGV2ZWwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ3JhbWluaXQub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotaHlwb3Qub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotaW1wb3J0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfUFlUSE9OKVxpbXBvcnRkbC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtYXJzaGFsLmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3NkZWZzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0b2tlbi5oIFwKLQkgJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotaW1wb3J0ZGwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfUFlUSE9OKVxpbXBvcnRkbC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3NkZWZzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tYXJzaGFsLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ2ludHJlcHIuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1hcnNoYWwuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tb2RzdXBwb3J0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1teXN0cnRvdWwub2JqOiBweWNvbmZpZy5oCi0KLXB5ZnBlLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmgKLQotcHlzdGF0ZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcHl0aG9ucnVuLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcYml0c2V0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oIFwKLQkgJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZXJyY29kZS5oICQoUFlfSU5DTFVERSlcZXZhbC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1hcnNoYWwuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHBhcnNldG9rLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zaWdjaGVjay5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc3RyZHVwLm9iajogcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotc3RydG9kLm9iajogcHljb25maWcuaAotCi1zdHJ1Y3RtZW1iZXIub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zeXNtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXG9zZGVmcy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10aHJlYWQub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcdGhyZWFkLmgKLQotdHJhY2ViYWNrLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmcmFtZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxvc2RlZnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaApkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rIGIvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTEyYzk2Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL21ha2VmaWxlLm9taworKysgL2Rldi9udWxsCkBAIC0xLDEwNDcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyAgICAgICAgICBUb3AtTGV2ZWwgTWFrZWZpbGUgZm9yIEJ1aWxkaW5nIFB5dGhvbiBmb3IgT1MvMgotIwotIyBUaGlzIG1ha2VmaWxlIHdhcyBkZXZlbG9wZWQgZm9yIHVzZSB3aXRoIElCTSdzIFZpc3VhbEFnZSBDL0MrKwotIyBmb3IgT1MvMiBjb21waWxlciwgdmVyc2lvbiAzLjAsIHdpdGggRml4cGFjayA4IGFwcGxpZWQuICBJdCB1c2VzCi0jIHRoZSBjb21tZXJjaWFsIE9wdXNNQUtFIHRvb2wuCi0jCi0jIFRoZSBvdXRwdXQgb2YgdGhlIGJ1aWxkIGlzIGEgbGFyZ2lzaCBQeXRob24xNS5ETEwgY29udGFpbmluZyB0aGUKLSMgZXNzZW50aWFsIG1vZHVsZXMgb2YgUHl0aG9uIGFuZCBhIHNtYWxsIFB5dGhvbi5leGUgcHJvZ3JhbSB0byBzdGFydAotIyB0aGUgaW50ZXJwcmV0ZXIuICBXaGVuIGVtYmVkZGluZyBQeXRob24gd2l0aGluIGFub3RoZXIgcHJvZ3JhbSwgb25seQotIyBQeXRob24xNS5ETEwgaXMgbmVlZGVkLgotIwotIyBUaGVzZSB0d28gYmluYXJpZXMgY2FuIGJlIHN0YXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIFZpc3VhbEFnZSBDL0MrKwotIyBydW50aW1lIGxpYnJhcnkgKHByb2R1Y2luZyBsYXJnZXIgYmluYXJpZXMpLCBvciBkeW5hbWljYWxseSBsaW5rZWQKLSMgdG8gbWFrZSBzbWFsbGVyIG9uZXMgdGhhdCByZXF1aXJlIHRoZSBjb21waWxlciB0byBiZSBpbnN0YWxsZWQgb24KLSMgYW55IHN5c3RlbSBQeXRob24gaXMgdXNlZCBvbi4KLSMKLSMgSGlzdG9yeSAoTW9zdCBSZWNlbnQgRmlyc3QpCi0jCi0jIDIwLU5vdi05NyBqcnIgQ2xlYW5lZCBVcCBmb3IgQXBwbHlpbmcgdG8gRGlzdHJpYnV0aW9uCi0jIDI5LU9jdC05NyBqcnIgTW9kaWZpZWQgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjUgQWxwaGEgNAotIyAwMy1BdWctOTYganJyIE9yaWdpbmFsIGZvciBVc2Ugd2l0aCBQeXRob24gMS40IFJlbGVhc2UKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQbGFjZXMgYW5kIFRoaW5ncwotIyMjIyMjIyMjIyMjIyMjIyMjIwotUFlfTU9EVUxFUyAgICAgID0gLi5cLi5cTW9kdWxlcwotUFlfT0JKRUNUUyAgICAgID0gLi5cLi5cT2JqZWN0cwotUFlfUEFSU0VSICAgICAgID0gLi5cLi5cUGFyc2VyCi1QWV9QWVRIT04gICAgICAgPSAuLlwuLlxQeXRob24KLVBZX0lOQ0xVREUgICAgICA9IC4uXC4uXEluY2x1ZGUKLVBZX0lOQ0xVREVTICAgICA9IC47JChQWV9JTkNMVURFKTskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotCi0jIFdoZXJlIHRvIEZpbmQgdGhlIElCTSBUQ1AvSVAgU29ja2V0IEluY2x1ZGVzIGFuZCBMaWJyYXJpZXMKLU9TMlRDUElQICAgICAgICA9IEM6XE1QVE4KLQotIyBXaGVyZSB0byBQdXQgdGhlIC5PQkogRmlsZXMsIFRvIEtlZXAgVGhlbSBPdXQgb2YgdGhlIFdheQotLlBBVEgub2JqCT0gb2JqCi0KLSMgU2VhcmNoIFBhdGggZm9yIEluY2x1ZGUgRmlsZXMKLVBST0pJTkNMVURFCT0gLjskKE9TMlRDUElQKVxJbmNsdWRlOyQoUFlfSU5DTFVERVMpCi0KLSMgUGxhY2UgdG8gU2VhcmNoIGZvciBTb3VyY2VzIHJlIE9wdXNNQUtFIERlcGVuZGVuY3kgR2VuZXJhdG9yIChDb21tZXJjaWFsKQotTUtNRl9TUkNTCT0gJChQWV9NT0RVTEVTKVwqLmMgJChQWV9PQkpFQ1RTKVwqLmMgJChQWV9QQVJTRVIpXCouYyAkKFBZX1BZVEhPTilcKi5jCi0KLS5IRFJQQVRILmMJOj0gJChQUk9KSU5DTFVERSw7PSApICQoLkhEUlBBVEguYykKLS5QQVRILmMgICAgICAgICA9IC47JChQWV9NT0RVTEVTKTskKFBZX09CSkVDVFMpOyQoUFlfUEFSU0VSKTskKFBZX1BZVEhPTikKLU9USEVSTElCUwk9ICQoT1MyVENQSVApXGxpYlxzbzMyZGxsLmxpYiAkKE9TMlRDUElQKVxsaWJcdGNwMzJkbGwubGliCi0KLSMjIyMjIyMjIyMjIyMjIyMjCi0jIEluZmVyZW5jZSBSdWxlcwotIyMjIyMjIyMjIyMjIyMjIyMKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFB5dGhvbiBTdWJzeXN0ZW1zCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgUFlUSE9OIGlzIHRoZSBjZW50cmFsIGNvcmUsIGNvbnRhaW5pbmcgdGhlIGJ1aWx0aW5zIGFuZCBpbnRlcnByZXRlci4KLVBZVEhPTgkJPSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQmx0aW5Nb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIENFdmFsLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBDb21waWxlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgRXJyb3JzLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEZyb3plbi5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRhcmdzLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgR2V0Q29tcGlsZXIub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldENvcHlyaWdodC5vYmogICBcCi0gICAgICAgICAgICAgICAgICBHZXRNVGltZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgR2V0T3B0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldFBsYXRmb3JtLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRWZXJzaW9uLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgR3JhbUluaXQub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEltcG9ydC5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBJbXBvcnRETC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgTWFyc2hhbC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1vZFN1cHBvcnQub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBNeVN0cnRvdWwub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgUHlTdGF0ZS5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFB5dGhvblJ1bi5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBTdHJ1Y3RNZW1iZXIub2JqICAgXAotICAgICAgICAgICAgICAgICAgU3lzTW9kdWxlLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFRocmVhZC5vYmogICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBUcmFjZUJhY2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgRnJvemVuTWFpbi5vYmoKLQotIyBPbWl0dGVkIFB5dGhvbiBFbGVtZW50cyAoYW5kIFJlYXNvbik6Ci0gICMgYXRvZi5jICAgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBkdXAyLmMgICAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGZtb2QuYyAgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgZ2V0Y3dkLmMgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBoeXBvdC5jICAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIG1lbW1vdmUuYyAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgc3RyZHVwLmMgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBzdHJlcnJvci5jICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIHN0cnRvZC5jICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0KLSAgIyBzaWdjaGVjay5jICAgICAgLS0gUHJpbWl0aXZlIFNpZ25hbCBDYXRjaGVyIChTaWduYWxNb2R1bGUuYyBVc2VkIEluc3RlYWQpCi0gICMgcHlmcGUuYyAgICAgICAgIC0tIFByaW1pdGl2ZSBGUEUgQ2F0Y2hlciAoTm90IFJlZmVyZW5jZWQgYnkgQW55b25lKQotICAjIGZyb3plbm1haW4uYwotCi0jIFB5dGhvbidzIEludGVybmFsIFBhcnNlcgotUEFSU0VSCQk9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEFjY2VsZXIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdyYW1tYXIxLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE15UmVhZGxpbmUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIE5vZGUub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBhcnNlci5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBhcnNlVG9rLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFRva2VuaXplci5vYmoKLQotIyBQeXRob24gT2JqZWN0IFR5cGVzCi1PQkpFQ1RTCQk9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEFic3RyYWN0Lm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENsYXNzT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIENPYmplY3Qub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENvbXBsZXhPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgIERpY3RPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEZpbGVPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEZsb2F0T2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEZyYW1lT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEZ1bmNPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIExpc3RPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIExvbmdPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ldGhvZE9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgIE1vZHVsZU9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgIE9iamVjdC5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFJhbmdlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFNsaWNlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cmluZ09iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFR1cGxlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFR5cGVPYmplY3Qub2JqCi0KLSMgT21pdHRlZCBPYmplY3RzIChhbmQgUmVhc29uKToKLSAgIyB4eG9iamVjdC5jICAgICAgLS0gVGVtcGxhdGUgdG8gQ3JlYXRlIFlvdXIgT3duIE9iamVjdCBUeXBlcwotCi0jIEV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotTU9EVUxFUwkJPSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBBcnJheU1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBCaW5Bc2NpaS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBDTWF0aE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBFcnJub01vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBHZXRCdWlsZEluZm8ub2JqICBcCi0gICAgICAgICAgICAgICAgICBHZXRQYXRoUC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBNYWluLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBNYXRoTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBNRDVjLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBNRDVNb2R1bGUub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBPcGVyYXRvci5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQb3NpeE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBSZWdleE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBSZWdFeHByLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBSZW9wTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBTZWxlY3RNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICBTaWduYWxNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICBTb2NrZXRNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICBTb3VuZEV4Lm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBTdHJvcE1vZHVsZS5vYmogICBcCi0gICAgICAgICAgICAgICAgICBTdHJ1Y3RNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICBUaW1lTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICBUaHJlYWRNb2R1bGUub2JqCi0KLSMgT21pdHRlZCBNb2R1bGVzIChhbmQgRGVzY3JpcHRpb24vUmVhc29uKToKLSAgIwotICAjIE11bHRpbWVkaWE6Ci0gICMgYXVkaW9vcC5jICAgICAgIC0tIFZhcmlvdXMgQ29tcHV0ZSBPcGVyYXRpb25zIG9uIEF1ZGlvIFNhbXBsZXMKLQotICAjIERhdGFiYXNlOgotICAjIF9kYm1tb2R1bGUuYyAgICAtLSBXcmFwcGVyIG9mIERCTSBEYXRhYmFzZSBBUEkgKEdlbmVyaWMgRmxhdm9yKQotICAjIF9nZGJtbW9kdWxlLmMgICAtLSBXcmFwcGVyIG9mIERCTSBEYXRhYmFzZSBBUEkgKEdOVSBGbGF2b3IpCi0KLSAgIyBDcnlwdG9ncmFwaHk6Ci0gICMgY3J5cHRtb2R1bGUuYyAgIC0tIFNpbXBsZSBXcmFwcGVyIGZvciBjcnlwdCgpIEZ1bmN0aW9uCi0KLSMgICAgICAgICAgICAgICAgICBmY250bG1vZHVsZS5vYmogICBcCi0jICAgICAgICAgICAgICAgICAgZnBlY3RsbW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIGZwZXRlc3Rtb2R1bGUub2JqIFwKLSMgVW5peC1TcGVjaWZpYyAgICBnZXRwYXRoLm9iaiAgICAgICBcCi0jICAgICAgICAgICAgICAgICAgZ3JwbW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIG1wem1vZHVsZS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICBuaXNtb2R1bGUub2JqICAgICBcCi0jICAgICAgICAgICAgICAgICAgcGFyc2VybW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIHB3ZG1vZHVsZS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICByZWFkbGluZS5vYmogICAgICBcCi0jICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uub2JqICAgICAgXAotIyAgICAgICAgICAgICAgICAgIHN5c2xvZ21vZHVsZS5vYmogIFwKLSMgICAgICAgICAgICAgICAgICB0ZXJtaW9zLm9iaiAgICAgICBcCi0KLSAgIyBVc2VyIEludGVyZmFjZToKLSMgICAgICAgICAgICAgICAgICBfdGtpbnRlci5vYmogICAgICBcICAgICAKLSMgICAgICAgICAgICAgICAgICBzdGR3aW5tb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgY3Vyc2VzbW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIHRjbE5vdGlmeS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICB0a2FwcGluaXQub2JqICAgICBcCi0gICMgZmxtb2R1bGUuYyAgICAgIC0tIFdyYXBwZXIgb2YgRk9STVMgTGlicmFyeSAoU2NyZWVuIEZvcm1zKQotCi0gICMgemxpYm1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgWkxpYiBDb21wcmVzc2lvbiBBUEkgKEdaaXAgRm9ybWF0KQotICAjIHB1cmVtb2R1bGUuYyAgICAtLSBXcmFwcGVyIG9mIFB1cmlmeSBEZWJ1Z2dpbmcgQVBJIChQcm9iYWJseSBOb24tT1MvMikKLSAgIyB4eG1vZHVsZS5jICAgICAgLS0gVGVtcGxhdGUgdG8gQ3JlYXRlIFlvdXIgT3duIE1vZHVsZQotCi0jCi0jIFN0YW5kYWxvbmUgUGFyc2VyIEdlbmVyYXRvciBQcm9ncmFtIChTaGFyZXMgU29tZSBvZiBQeXRob24ncyBNb2R1bGVzKQotUEdFTiAgICAgICAgICAgID0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUEdlbk1haW4ub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgUEdlbi5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUHJpbnRHcmFtbWFyLm9iaiAgXAotICAgICAgICAgICAgICAgICAgTGlzdE5vZGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgR3JhbW1hci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgQml0U2V0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgRmlyc3RTZXRzLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgTWV0YUdyYW1tYXIub2JqCi0KLSMgT21pdHRlZCBQYXJzZXIgRWxlbWVudHMgKGFuZCBSZWFzb24pOgotICAjIGludHJjaGVjay5jICAgICAtLSBOb3QgUmVmZXJlbmNlZCBieSBBbnlvbmUgKD8pCi0KLSMjIyMjIyMjIyMjIyMjIyMjIwotIyBNYWNyb3MgYW5kIEZsYWdzCi0jIyMjIyMjIyMjIyMjIyMjIyMKLV9CQVNFCQk9IC9RIC9XMiAvSSQoUFJPSklOQ0xVREUpCi0JCSMgL1EgICA9IE9taXQgSUJNIENvcHlyaWdodAotCQkjIC9XMiAgPSBTaG93IFdhcm5pbmdzL0Vycm9ycyBPbmx5Ci0JCSMgL0ZpICA9IENyZWF0ZSBQcmVjb21waWxlZCBIZWFkZXJzCi0JCSMgL1NpICA9IFV0aWxpemUgUHJlY29tcGlsZWQgSGVhZGVycwotCi1fR0VOCQk9IC9HNCAvR20gL0dkIC9CIi9TVEFDSzozNjAwMDAiCi0JCSMgL0c0ICA9IEdlbmVyYXRlIENvZGUgZm9yIDQ4NiAoVXNlIDM4NiBmb3IgRGVidWdnZXIpCi0JCSMgL0dtICA9IFVzZSBNdWx0aXRocmVhZCBSdW50aW1lCi0JCSMgL0dkICA9IER5bmFtaWNhbGx5IExvYWQgUnVudGltZQotCQkjIC9HcyAgPSBSZW1vdmUgQ29kZSBmb3IgU3RhY2sgUHJvYmVzCi0JCSMgL0d4ICA9IFJlbW92ZSBDKysgRXhjZXB0aW9uLUhhbmRsaW5nIEluZm8KLQkJIyAvVGRwID0gR2VuZXJhdGUgQ29kZSBmb3IgQysrIFRlbXBsYXRlcwotCQkjIC9SbiAgPSBHZW5lcmF0ZSBDb2RlIHdpdGhvdXQgYSBSdW50aW1lCi0JCSMgL0IiL1NUQUNLOm4iID0gU2V0IFN0YWNrIFNpemUKLQotX09QVAkJPSAvTyAvR2wKLQkJIyAvTyAgID0gRW5hYmxlIFNwZWVkLU9wdGltaXphdGlvbnMKLQkJIyAvT2wgID0gUGFzcyBDb2RlIFRocnUgSW50ZXJtZWRpYXRlIExpbmtlcgotCQkjIC9HdSAgPSBBZHZpc2UgTGlua2VyIEFsbCBFeHQgRGF0YSBpcyBJRCdkCi0JCSMgL0dsICA9IEhhdmUgTGlua2VyIFJlbW92ZSBVbnVzZWQgRm5zCi0KLV9EQkcJCT0gL0RIQVZFX0NPTkZJR19IIC9EVVNFX1NPQ0tFVAotCQkjIC9UaSAgPSBFbWJlZCBEZWJ1Z2dlci9BbmFseXplciBSZWNzCi0JCSMgL1RtICA9IEVuYWJsZSBEZWJ1ZyBNZW1vcnkgRm5zCi0JCSMgL1R4ICA9IFJlcXVlc3QgRnVsbCBEdW1wIFVwb24gRXhjZXB0aW9uCi0JCSMgL0RERUJVRyA9IEVuYWJsZSBBcHAtSW50ZXJuYWwgRGVidWdnaW5nIENvZGUKLSAgICAgICAgICAgICAgICAjIC9EVVNFX1NPQ0tFVCA9IAotICAgICAgICAgICAgICAgICMgL0RVU0VfRExfRVhQT1JUID0gCi0KLV9PVVQJCT0gCi0JCSMgL0ZiICA9IEVtYmVkIEJyb3dzZXIgUmVjcwotCQkjIC9HaCAgPSBHZW5lcmF0ZSBDb2RlIGZvciBQcm9maWxlciBIb29rcwotCQkjIC9GbCAgPSBPdXRwdXQgQy9DKysgTGlzdGluZyBGaWxlcwotICAgICAgICAgICAgICAgICMgL0xmICA9IFByb3ZpZGUgRnVsbCAoRGV0YWlsZWQpIExpc3RpbmcgRmlsZXMKLQkJIyAvRm0uID0gT3V0cHV0IExpbmtlciBNYXAgRmlsZQotCQkjIC9GdC4gPSBPdXRwdXQgQysrIFRlbXBsYXRlIFJlc29sdXRpb24gRmlsZXMKLQotX01BUAkJPSAvRm1Ob2lzZVwkKC5UQVJHRVQsQiw+Lm1hcCkKLQotX0RMTAkJPSAvR2UtCi1fRVhFCQk9IC9HZQotCQkjIC9HZSA9IENyZWF0ZSBhbiBFWEUsIG5vdCBETEwKLQotQ0ZMQUdTCQk9ICQoX0JBU0UpICQoX0dFTikgJChfT1BUKSAkKF9EQkcpICQoX09VVCkgJChfRVhFKSAvU3MKLUNQUEZMQUdTCT0gJChfQkFTRSkgJChfR0VOKSAkKF9PUFQpICQoX0RCRykgJChfT1VUKSAkKF9FWEUpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHJpbWFyeSBUYXJnZXQocykKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLUFsbDogIG9iaiBub2lzZSBQeUNvcmUubGliIFB5dGhvbjE1LmxpYiBQeXRob24xNS5kbGwgUHl0aG9uLmV4ZSBQR2VuLmV4ZQotCi0jIyMjIyMjIyMjIyMjIwotIwotIyMjIyMjIyMjIyMjIyMKLQotIyBPYmplY3QgTGlicmFyeSBvZiBBbGwgRXNzZW50aWFsIFB5dGhvbiBSb3V0aW5lcwotUHlDb3JlLmxpYjogJChNT0RVTEVTKSAkKE9CSkVDVFMpICQoUEFSU0VSKSAkKFBZVEhPTikgQ29uZmlnLm9iagotICAgICAgICAlZG8gIiUubGliIgotCi1QeXRob24xNS5kbGw6IENvbXBpbGUub2JqIFB5Q29yZS5saWIgUHl0aG9uLmRlZgotICAgICAgICAlZG8gIiUuZGxsIiBDUFBGTEFHUys9L0IiL05PRSIgQ1BQRkxBR1MrPSQoX01BUCkKLQotQ29tcGlsZS5vYmo6IENvbXBpbGUuYwotICAgICAgICAlZG8gIi5jLm9iaiIgQ0ZMQUdTKz0kKF9ETEwpCi0KLSMgSW1wb3J0IExpYnJhcnkgZm9yIFVzaW5nIHRoZSBQeXRob24xNS5kbGwKLVB5dGhvbjE1LmxpYjogUHl0aG9uLmRlZgotICAgICAgICAlZG8gIi5kZWYubGliIgotCi0jIFNtYWxsIFByb2dyYW0gdG8gU3RhcnQgSW50ZXJwcmV0ZXIgaW4gUHl0aG9uMTUuZGxsCi1QeXRob24uZXhlOiBQeXRob24ub2JqIFB5dGhvbjE1LmxpYgotICAgICAgICAlZG8gIiUuZXhlIiBDUFBGTEFHUys9JChfTUFQKQotCi0jUHl0aG9uLm9iajogUHl0aG9uLmMKLSMgICAgICAgICVkbyAiLmMub2JqIiBDRkxBR1MrPSQoX0VYRSkKLQotUEdlbi5leGU6ICQoUEdFTikgUHlDb3JlLmxpYgotICAgICAgICAlZG8gIiUuZXhlIiBDUFBGTEFHUys9JChfTUFQKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBNaXNjZWxsYW5lb3VzIFRhcmdldHMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgUmVtb3ZlIEludGVybWVkaWF0ZSBUYXJnZXRzIGJ1dCBMZWF2ZSBFeGVjdXRhYmxlIEJpbmFyaWVzCi1jbGVhbjoKLQktLSBEZWwgL1EgJCguUEFUSC5vYmopXCoub2JqCQk+TlVMIDI+JjEKLQktLSBEZWwgL1EgL1kgTm9pc2UJCQk+TlVMIDI+JjEKLQktLSBEZWwgL1EgJChFUlJTKQkJCT5OVUwgMj4mMQotCi0jIFJlbW92ZSBBbGwgVGFyZ2V0cywgSW5jbHVkaW5nIEZpbmFsIEJpbmFyaWVzCi1kaXN0Y2xlYW46IGNsZWFuCi0gICAgICAgIC0tIERlbCAvUSBQeUNvcmUubGliIFB5dGhvbjE1LmxpYiAgICAgICA+TlVMIDI+JjEKLSAgICAgICAgLS0gRGVsIC9RIFB5dGhvbjE1LmRsbCBQeXRob24uZXhlICAgICAgID5OVUwgMj4mMQotCi1yZWxlYXNlOiBQeXRob24uZXhlIFB5dGhvbjE1LmRsbCBQeXRob24xNS5saWIKLQktLSBARWNobyBZIHwgY29weSAvVSAkKC5TT1VSQ0VTLE0iKi5leGUiKSBEOlxFWEVzCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgJCguU09VUkNFUyxNIiouZGxsIikgRDpcRExMcwotCS0tIEBFY2hvIFkgfCBjb3B5IC9VICQoLlNPVVJDRVMsTSIqLmxpYiIpIEU6XFRhdVxMaWIKLQotdGVzdDoKLSAgICAgICAgcHl0aG9uIC4uXC4uXGxpYlx0ZXN0XHJlZ3J0ZXN0LnB5Ci0KLSMgVXBkYXRlIERlcGVuZGVuY2llcyBvbiBUYXJnZXRzIChVc2VzIE9wdXNNQUtFIENvbW1lcmNpYWwgUHJvZHVjdCkKLWRlcGVuZDoKLQlEOlxPcHVzTWFrZVxvczJta21mIC1jIC1zCi0KLSMjIyBPUFVTIE1LTUY6ICBEbyBub3QgcmVtb3ZlIHRoaXMgbGluZSEgIEdlbmVyYXRlZCBkZXBlbmRlbmNpZXMgZm9sbG93LgotCi1fdGtpbnRlci5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1hcnJheW1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1hdWRpb29wLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWJpbmFzY2lpLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNtYXRobW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNwaWNrbGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY3J5cHRtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY3Vyc2VzbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLV9kYm1tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZXJybm8ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZXJybm9tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZmNudGxtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxzeXNcaW9jdGwuaCBjZXZhbC5oIFwKLQkgY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIFwKLQkgZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIFwKLQkgaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZwZWN0bG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcGV0ZXN0bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLV9nZGJtbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGJ1aWxkaW5mby5vYmo6IHB5Y29uZmlnLmgKLQotZ2V0cGF0aC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1ncnBtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgZ3JwLmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotaW1hZ2VvcC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tYWluLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1hdGhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbXB6bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdpbnRyZXByLmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbmlzbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjOlxtcHRuXGluY2x1ZGVcc3lzXHRpbWUuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggXAotCSBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW9wZXJhdG9yLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXBhcnNlcm1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggZ3JhbWluaXQuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRva2VuLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXBvc2l4Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXBvc2l4bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXB3ZG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB3ZC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1yZWFkbGluZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1yZXNvdXJjZS5vYmo6IGFic3RyYWN0LmggYzpcbXB0blxpbmNsdWRlXHN5c1x0aW1lLmggY2V2YWwuaCBjbGFzc29iamVjdC5oIFwKLQkgY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggXAotCSBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zZWxlY3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG15c2VsZWN0LmggbXl0aW1lLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zaWduYWxtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc29ja2V0bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjOlxtcHRuXGluY2x1ZGVcbmV0aW5ldFxpbi5oIFwKLQkgYzpcbXB0blxpbmNsdWRlXHN5c1xzb2NrZXQuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBteXRpbWUuaCBuZXRkYi5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBcCi0JIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc3RydWN0bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXN5c2xvZ21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbG9nLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10ZXJtaW9zLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLV90aHJlYWRtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRocmVhZC5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotdGltZW1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbXl0aW1lLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi14eG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi16bGlibW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFic3RyYWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNsYXNzb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWNvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY29tcGxleG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1kaWN0b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZpbGVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN0cnVjdG1lbWJlci5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZmxvYXRvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnJhbWVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnJhbWVvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvcGNvZGUuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN0cnVjdG1lbWJlci5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mdW5jb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggXAotCSB0dXBsZW9iamVjdC5oCi0KLWxpc3RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbG9uZ29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25naW50cmVwci5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotbWV0aG9kb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0b2tlbi5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbW9kdWxlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1yYW5nZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zbGljZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJpbmdvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotdHVwbGVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotdHlwZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi14eG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1hY2NlbGVyLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIFwKLQkgcGFyc2VyLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1iaXRzZXQub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLWZpcnN0c2V0cy5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1ncmFtbWFyLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWdyYW1tYXIxLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWludHJjaGVjay5vYmo6IHB5Y29uZmlnLmggaW50cmNoZWNrLmggbXltYWxsb2MuaCBteXByb3RvLmgKLQotbGlzdG5vZGUub2JqOiBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oIG5vZGUuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCBcCi0JIHRva2VuLmgKLQotbWV0YWdyYW1tYXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBtZXRhZ3JhbW1hci5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggcGdlbi5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLW15cmVhZGxpbmUub2JqOiBweWNvbmZpZy5oIGludHJjaGVjay5oIG15bWFsbG9jLmggbXlwcm90by5oCi0KLW5vZGUub2JqOiBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oIG5vZGUuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi1wYXJzZXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGVycmNvZGUuaCBncmFtbWFyLmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBub2RlLmggcGFyc2VyLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1wYXJzZXRvay5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZXJyY29kZS5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG5vZGUuaCBwYXJzZXIuaCBwYXJzZXRvay5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmggXAotCSB0b2tlbml6ZXIuaAotCi1wZ2VuLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbWV0YWdyYW1tYXIuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG5vZGUuaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaAotCi1wZ2VubWFpbi5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIG5vZGUuaCBcCi0JIHBhcnNldG9rLmggcGdlbi5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLXByaW50Z3JhbW1hci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotdG9rZW5pemVyLm9iajogcHljb25maWcuaCBlcnJjb2RlLmggbXltYWxsb2MuaCBteXByb3RvLmggcGdlbmhlYWRlcnMuaCBcCi0JIHB5ZGVidWcuaCB0b2tlbi5oIHRva2VuaXplci5oCi0KLWF0b2Yub2JqOiBweWNvbmZpZy5oCi0KLWJsdGlubW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBldmFsLmggZmlsZW9iamVjdC5oIFwKLQkgZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggbXlwcm90by5oIG5vZGUuaCBvYmplY3QuaCBcCi0JIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY2V2YWwub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGV2YWwuaCBmaWxlb2JqZWN0LmggXAotCSBmbG9hdG9iamVjdC5oIGZyYW1lb2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIFwKLQkgaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggb3Bjb2RlLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotY29tcGlsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggZ3JhbWluaXQuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBcCi0JIG9wY29kZS5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdG9rZW4uaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWVycm9ycy5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mbW9kLm9iajogcHljb25maWcuaCBteW1hdGguaAotCi1mcm96ZW4ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnJvemVubWFpbi5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1nZXRhcmdzLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGNvbXBpbGVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGNvcHlyaWdodC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1nZXRwbGF0Zm9ybS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1nZXR2ZXJzaW9uLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcGF0Y2hsZXZlbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1ncmFtaW5pdC5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotaHlwb3Qub2JqOiBweWNvbmZpZy5oIG15bWF0aC5oIG15cHJvdG8uaAotCi1pbXBvcnQub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGVycmNvZGUuaCBldmFsLmggXAotCSBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW1wb3J0ZGwuaCBcCi0JIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBvc2RlZnMuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRva2VuLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1pbXBvcnRkbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbXBvcnRkbC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1hcnNoYWwub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdpbnRyZXByLmggbG9uZ29iamVjdC5oIG1hcnNoYWwuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1vZHN1cHBvcnQub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbXlzdHJ0b3VsLm9iajogcHljb25maWcuaAotCi1weWZwZS5vYmo6IHB5Y29uZmlnLmggcHlmcGUuaAotCi1weXN0YXRlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXB5dGhvbnJ1bi5vYmo6IGFic3RyYWN0LmggYml0c2V0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBpbGUuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXJyY29kZS5oIGV2YWwuaCBcCi0JIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBncmFtbWFyLmggaW1wb3J0LmggXAotCSBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1hcnNoYWwuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG5vZGUuaCBvYmplY3QuaCBvYmppbXBsLmggcGFyc2V0b2suaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc2lnY2hlY2sub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc3RyZHVwLm9iajogcHljb25maWcuaCBteW1hbGxvYy5oIG15cHJvdG8uaAotCi1zdHJ0b2Qub2JqOiBweWNvbmZpZy5oCi0KLXN0cnVjdG1lbWJlci5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggXAotCSB0dXBsZW9iamVjdC5oCi0KLXN5c21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIFwKLQkgcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10aHJlYWQub2JqOiBweWNvbmZpZy5oIHRocmVhZC5oCi0KLXRyYWNlYmFjay5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmcmFtZW9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9weWNvbmZpZy5oIGIvUEMvb3MydmFjcHAvcHljb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2NWI0NC4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9weWNvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLSNpZm5kZWYgUHlfQ09ORklHX0gKLSNkZWZpbmUgUHlfQ09ORklHX0gKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHB5Y29uZmlnLmguICBOT1QgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlLgotICoKLSAqIFRoaXMgaXMgYSBtYW51YWxseSBtYWludGFpbmVkIHZlcnNpb24gdXNlZCBmb3IgdGhlIElCTSBWaXN1YWxBZ2UKLSAqIEMvQysrIGNvbXBpbGVyIG9uIHRoZSBPUy8yIHBsYXRmb3JtLiAgSXQgaXMgYSBzdGFuZGFyZCBwYXJ0IG9mCi0gKiB0aGUgUHl0aG9uIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBGSUxFU1lTVEVNIERFRklORVM6Ci0gKiBUaGUgY29kZSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgd2F5IG9mIG5hbWluZyBmaWxlcyBhbmQKLSAqIGRpcmVjdG9yeSBwYXRocyBzaG91bGQgYmUgd3JhcHBlZCBhcm91bmQgb25lIG9mIHRoZSBmb2xsb3dpbmcKLSAqICNkZWZpbmVzOgotICoKLSAqICAgICBET1NGSUxFU1lTICAgUENET1MtU3R5bGUgKGZvciBQQ0RPUywgV2luZG93cyBhbmQgT1MvMikKLSAqICAgICBNQUNGSUxFU1lTICAgTWFjaW50b3NoLVN0eWxlCi0gKiAgICAgVU5JWEZJTEVTWVMgIFVuaXgtU3R5bGUKLSAqICAgICBBTUlHQUZJTEVTWVMgQW1pZ2FET1MtU3R5bGUKLSAqIAotICogQmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IGNvbXBpbGVycyBhbmQgb3BlcmF0aW5nIHN5c3RlbXMgaW4KLSAqIHVzZSBvbiB0aGUgSW50ZWwgcGxhdGZvcm0sIG5laXRoZXIgdGhlIGNvbXBpbGVyIG5hbWUgbm9yCi0gKiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBuYW1lIGlzIHN1ZmZpY2llbnQuCi0gKgotICogT1MvMiBERUZJTkVTOgotICogVGhlIGNvZGUgc3BlY2lmaWMgdG8gT1MvMidzIFByb2dyYW0gQVBJIHNob3VsZCBiZSB3cmFwcGVkIGFyb3VuZAotICoKLSAqIF9fVE9TX09TMl9fICAgVGFyZ2V0IE9wZXJhdGluZyBTeXN0ZW0sIE9TLzIKLSAqCi0gKiBBbnkgY29kZSBzcGVjaWZpYyB0byB0aGUgY29tcGlsZXIgaXRzZWxmIHNob3VsZCBiZSB3cmFwcGVkIHdpdGgKLSAqCi0gKiBfX0lCTUNfXyAgICAgIElCTSBDIENvbXBpbGVyCi0gKiBfX0lCTUNQUF9fICAgIElCTSBDKysgQ29tcGlsZXIKLSAqCi0gKiBOb3RlIHRoYXQgc2luY2UgdGhlIFZpc3VhbEFnZSBDL0MrKyBjb21waWxlciBpcyBhbHNvIGF2YWlsYWJsZQotICogZm9yIHRoZSBXaW5kb3dzIHBsYXRmb3JtLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHVzZSBib3RoIGEKLSAqIF9fVE9TX09TMl9fIGFuZCBhIF9fSUJNQ19fIHRvIHNlbGVjdCBhIHZlcnkgc3BlY2lmaWMgZW52aXJvbm1lbnQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBTb21lIHN5c3RlbXMgcmVxdWlyZSBzcGVjaWFsIGRlY2xhcmF0aW9ucyBmb3IgZGF0YSBpdGVtcyBpbXBvcnRlZAotICogb3IgZXhwb3J0ZWQgZnJvbSBkeW5hbWljIGxpbmsgbGlicmFyaWVzLiAgTm90ZSB0aGF0IHRoZSBkZWZpbml0aW9uCi0gKiBvZiBETF9JTVBPUlQgY292ZXJzIGJvdGggY2FzZXMuICBEZWZpbmUgVVNFX0RMX0lNUE9SVCBmb3IgdGhlIGNsaWVudAotICogb2YgYSBETEwuICBEZWZpbmUgVVNFX0RMX0VYUE9SVCB3aGVuIG1ha2luZyBhIERMTC4KLSAqLwotCi0jaW5jbHVkZSA8aW8uaD4KLQotLyogQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBGaW5kaW5nIE1vZHVsZXMgKi8KLSNkZWZpbmUgUFJFRklYICAgICAgICAgICAgICAgICAiIgotI2RlZmluZSBFWEVDX1BSRUZJWCAgICAgICAgICAgICIiCi0KLS8qIFByb3ZpZGUgYSBkZWZhdWx0IGxpYnJhcnkgc28gd3JpdGVycyBvZiBleHRlbnNpb24gbW9kdWxlcwotICogd29uJ3QgaGF2ZSB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQgYW55bW9yZQotICovCi0jcHJhZ21hIGxpYnJhcnkoIlB5dGhvbjI0LmxpYiIpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAzMi1CaXQgSUJNIFZpc3VhbEFnZSBDL0MrKyB2My4wIGZvciBPUy8yICAgICAqLwotLyogIChDb252ZXJ0IENvbXBpbGVyIEZsYWdzIGludG8gVXNlZnVsIFN3aXRjaGVzKSAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFBMQVRGT1JNICAgICJvczIiCi0jZGVmaW5lIENPTVBJTEVSICAgICJbVmlzdWFsQWdlIEMvQysrXSIKLSNkZWZpbmUgUFlPU19PUzIgICAgLyogRGVmaW5lIEluZGljYXRvciBvZiBPcGVyYXRpbmcgU3lzdGVtICovCi0jZGVmaW5lIFBZQ0NfVkFDUFAgIC8qIERlZmluZSBJbmRpY2F0b3Igb2YgQyBDb21waWxlciAqLwotCi0gIC8qIFBsYXRmb3JtIEZpbGVzeXN0ZW0gKi8KLSNkZWZpbmUgUFlUSE9OUEFUSCAgIi47LlxcbGliOy5cXGxpYlxccGxhdC13aW4iCi0jZGVmaW5lIERPU0ZJTEVTWVMgIC8qIE9TLzIgVXNlcyB0aGUgRE9TIEZpbGUgTmFtaW5nIENvbnZlbnRpb25zICovCi0vKiAjZGVmaW5lIElNUE9SVF84eDNfTkFNRVMgKGxldCdzIG1vdmUgdXAgdG8gbG9uZyBmaWxlbmFtZXMpICovCi0KLSAgLyogUGxhdGZvcm0gQ1BVLU1vZGUgRGVwZW5kZW5jaWVzICovCi0jZGVmaW5lIFdPUkRfQklUICAgICAgICAgICAgICAgIDMyIC8qIE9TLzIgaXMgYSAzMi1CaXQgT3BlcmF0aW5nIFN5c3RlbSAqLwotI2RlZmluZSBMT05HX0JJVCAgICAgICAgICAgICAgICAzMgotI2RlZmluZSBTSVpFT0ZfSU5UICAgICAgICAgICAgICAgNCAvKiBDb3VudCBvZiBCeXRlcyBpbiBhbiAoaW50KSAgICAgICAgICAgICovCi0jZGVmaW5lIFNJWkVPRl9MT05HICAgICAgICAgICAgICA0IC8qIENvdW50IG9mIEJ5dGVzIGluIGEgKGxvbmcpICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0laRU9GX1ZPSURfUCAgICAgICAgICAgIDQgLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAodm9pZCAqKSAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0xPTkdfTE9ORyAgICAgMSAqLyAvKiBWQUMrKyBkb2VzIG5vdCBzdXBwb3J0IChsb25nIGxvbmcpICAgICovCi0vKiAjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgICA4ICovIC8qIENvdW50IG9mIEJ5dGVzIGluIGEgKGxvbmcgbG9uZykgICAgICAgKi8KLQotLyogdW5pY29kZSBkZWZpbmluZXMgKi8KLSNkZWZpbmUgUFlfVU5JQ09ERV9UWVBFICAgIHdjaGFyX3QKLSNkZWZpbmUgUHlfVU5JQ09ERV9TSVpFIFNJWkVPRl9TSE9SVAotCi0vKiBkeW5hbWljIGxvYWRpbmcgKi8KLSNkZWZpbmUgSEFWRV9EWU5BTUlDX0xPQURJTkcgMQotCi0vKiBEZWZpbmUgaWYgdHlwZSBjaGFyIGlzIHVuc2lnbmVkIGFuZCB5b3UgYXJlIG5vdCB1c2luZyBnY2MuICAqLwotI2lmbmRlZiBfX0NIQVJfVU5TSUdORURfXwotLyogI3VuZGVmIF9fQ0hBUl9VTlNJR05FRF9fICovCi0jZW5kaWYKLQotdHlwZWRlZiBpbnQgbW9kZV90OwotdHlwZWRlZiBpbnQgdWlkX3Q7Ci10eXBlZGVmIGludCBnaWRfdDsKLXR5cGVkZWYgaW50IHBpZF90OwotCi0jaWYgZGVmaW5lZChfX01VTFRJX18pICAgICAvKiBJZiBDb21waWxlciAvR3QrIE11bHRpdGhyZWFkIE9wdGlvbiBFbmFibGVkLCAgKi8KLSAgI2RlZmluZSBXSVRIX1RIUkVBRCAgICAgICAgICAgIDEgLyogRW5hYmxlIFRocmVhZGluZyBUaHJvdWdob3V0IFB5dGhvbiAgICAqLwotICAjZGVmaW5lIE9TMl9USFJFQURTICAgICAgICAgICAgMSAvKiBBbmQgVXNlIHRoZSBPUy8yIEZsYXZvciBvZiBUaHJlYWRzICAgICovCi0vKiAjZGVmaW5lIF9SRUVOVFJBTlQgMSAqLyAvKiBVc2UgdGhyZWFkLXNhZmUgZXJybm8sIGhfZXJybm8sIGFuZCBvdGhlciBmbnMgKi8KLSNlbmRpZgotCi0gIC8qIENvbXBpbGVyIFJ1bnRpbWUgTGlicmFyeSBDYXBhYmlsaXRpZXMgKi8KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGRpcmVjdC5oPgotLyogI3VuZGVmIEJBRF9TVEFUSUNfRk9SV0FSRCAqLyAvKiBpZiBjb21waWxlciBib3RjaGVzIHN0YXRpYyBmd2QgZGVjbHMgKi8KLQotI2RlZmluZSBTVERDX0hFQURFUlMgICAgICAgICAgICAgMSAvKiBWQUMrKyBpcyBhbiBBTlNJIEMgQ29tcGlsZXIgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfSFlQT1QgICAgICAgICAgICAgICAxIC8qIGh5cG90KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9QVVRFTlYgICAgICAgICAgICAgIDEgLyogcHV0ZW52KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBWQV9MSVNUX0lTX0FSUkFZICAgMSAqLyAvKiBpZiB2YV9saXN0IGlzIGFuIGFycmF5IG9mIHNvbWUga2luZCAgICovCi0vKiAjZGVmaW5lIEhBVkVfQ09OSU9fSCAgICAgICAxICovIC8qICNpbmNsdWRlIDxjb25pby5oPiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9FUlJOT19IICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4gICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAgICAgICAgICAgKi8KLQotICAvKiBWYXJpYWJsZS1Bcmd1bWVudHMvUHJvdG90eXBlcyAqLwotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMgICAgICAgICAgMSAvKiBWQUMrKyBzdXBwb3J0cyBDIEZ1bmN0aW9uIFByb3RvdHlwZXMgICovCi0jZGVmaW5lIEhBVkVfU1REQVJHX1BST1RPVFlQRVMgICAxIC8qIE91ciA8c3RkYXJnLmg+IGhhcyBwcm90b3R5cGVzICAgICAgICAgKi8KLQotICAvKiBTdHJpbmcvTWVtb3J5L0xvY2FsZSBPcGVyYXRpb25zICovCi0jZGVmaW5lIEhBVkVfTUVNTU9WRSAgICAgICAgICAgICAxIC8qIG1lbW1vdmUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TVFJFUlJPUiAgICAgICAgICAgIDEgLyogc3RyZXJyb3IoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAgICAgICAgICAgMSAvKiBzZXRsb2NhbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIE1BTExPQ19aRVJPX1JFVFVSTlNfTlVMTCAxIC8qIE91ciBtYWxsb2MoMCkgcmV0dXJucyBhIE5VTEwgcHRyICAgICAgKi8KLQotICAvKiBTaWduYWwgSGFuZGxpbmcgKi8KLSNkZWZpbmUgSEFWRV9TSUdOQUxfSCAgICAgICAgICAgIDEgLyogc2lnbmFsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBSRVRTSUdUWVBFICAgICAgICAgICAgdm9pZCAvKiBSZXR1cm4gdHlwZSBvZiBoYW5kbGVycyAoaW50IG9yIHZvaWQpICovCi0vKiAjdW5kZWYgV0FOVF9TSUdGUEVfSEFORExFUiAgICovIC8qIEhhbmRsZSBTSUdGUEUgKHNlZSBJbmNsdWRlL3B5ZnBlLmgpICAgKi8KLS8qICNkZWZpbmUgSEFWRV9BTEFSTSAgICAgICAgIDEgKi8gLyogYWxhcm0oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1NJR0lOVEVSUlVQVCAgMSAqLyAvKiBzaWdpbnRlcnJ1cHQoKSAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU0lHUkVMU0UgICAgICAxICovIC8qIHNpZ3JlbHNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRE9OVF9IQVZFX1NJR19BTEFSTSAgICAgIDEKLSNkZWZpbmUgRE9OVF9IQVZFX1NJR19QQVVTRSAgICAgIDEKLQotICAvKiBDbG9jay9UaW1lIFN1cHBvcnQgKi8KLSNkZWZpbmUgSEFWRV9GVElNRSAgICAgICAgICAgICAgIDEgLyogV2UgaGF2ZSBmdGltZSgpIGluIDxzeXMvdGltZWIuaD4gICAgICAqLwotI2RlZmluZSBIQVZFX0NMT0NLICAgICAgICAgICAgICAgMSAvKiBjbG9jaygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1RSRlRJTUUgICAgICAgICAgICAxIC8qIHN0cmZ0aW1lKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9NS1RJTUUgICAgICAgICAgICAgIDEgLyogbWt0aW1lKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1RaTkFNRSAgICAgICAgICAgICAgMSAvKiBObyB0bV96b25lIGJ1dCBkbyBoYXZlIHR6bmFtZVtdICAgICAgICovCi0jZGVmaW5lIEhBVkVfVElNRVMgICAgICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvdGltZXMuaD4gICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVVRJTUVfSCAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy91dGltZS5oPiAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1VUSU1FX0ggICAgICAgMSAqLyAvKiAjaW5jbHVkZSA8dXRpbWUuaD4gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAgICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvdGltZS5oPiAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgVE1fSU5fU1lTX1RJTUUgICAgIDEgKi8gLyogPHN5cy90aW1lLmg+IGRlY2xhcmVzIHN0cnVjdCB0bSAgICAgICAqLwotI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAgICAgICAgMSAvKiBnZXR0aW1lb2ZkYXkoKSAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEdFVFRJTUVPRkRBWV9OT19UWiAxICovIC8qIGdldHRpbWVvZmRheSgpIGRvZXMgbm90IGhhdmUgMm5kIGFyZyAgKi8KLS8qICNkZWZpbmUgSEFWRV9USU1FR00gICAgICAgIDEgKi8gLyogdGltZWdtKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgICAgICAgMSAvKiBNaXggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPiAgICAgICAgICovCi0jZGVmaW5lIFNZU19TRUxFQ1RfV0lUSF9TWVNfVElNRSAxIC8qIE1peCA8c3lzL3NlbGVjdC5oPiBhbmQgPHN5cy90aW1lLmg+ICAgKi8KLS8qICNkZWZpbmUgSEFWRV9BTFRaT05FICAgICAgIDEgKi8gLyogaWYgPHRpbWUuaD4gZGVmaW5lcyBhbHR6b25lICAgICAgICAgICAqLwotCi0gIC8qIE5ldHdvcmsvU29ja2V0cyBTdXBwb3J0ICovCi0jZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4gICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgQlNEX1NFTEVDVCAgICAgICAgICAgICAgMSAvKiBVc2UgQlNEIHZlcnN1cyBPUy8yIGZvcm0gb2Ygc2VsZWN0KCkgICAqLwotI2RlZmluZSBIQVZFX1NFTEVDVCAgICAgICAgICAgICAxIC8qIHNlbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUUEVFUk5BTUUgICAgICAgIDEgLyogZ2V0cGVlcm5hbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICN1bmRlZiBIQVZFX0dFVEhPU1ROQU1FX1IgMSAqLyAvKiBnZXRob3N0bmFtZV9yKCkgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIC8qIEZpbGUgSS9PICovCi0jZGVmaW5lIEhBVkVfRFVQMiAgICAgICAgICAgICAgICAxIC8qIGR1cDIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9FWEVDViAgICAgICAgICAgICAgIDEgLyogZXhlY3YoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NFVFZCVUYgICAgICAgICAgICAgMSAvKiBzZXR2YnVmKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAgICAgICAgICAxIC8qIGdldGN3ZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9QSVBFICAgICAgICAgICAgICAgIDEgLyogcGlwZSgpICAgICBbT1MvMi1zcGVjaWZpYyBjb2RlIGFkZGVkXSAqLwotI2RlZmluZSBIQVZFX0lPX0ggICAgICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8aW8uaD4gICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfRkNOVExfSCAgICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxmY250bC5oPiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9ESVJFQ1RfSCAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPGRpcmVjdC5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZMT0NLICAgICAgICAgMSAqLyAvKiBmbG9jaygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVFJVTkNBVEUgICAgICAxICovIC8qIHRydW5jYXRlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9GVFJVTkNBVEUgICAgIDEgKi8gLyogZnRydW5jYXRlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0xTVEFUICAgICAgICAgMSAqLyAvKiBsc3RhdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfRElSRU5UX0ggICAgICAxICovIC8qICNpbmNsdWRlIDxkaXJlbnQuaD4gICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9PUEVORElSICAgICAgIDEgKi8gLyogb3BlbmRpcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFByb2Nlc3MgT3BlcmF0aW9ucyAqLwotI2RlZmluZSBIQVZFX1BST0NFU1NfSCAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8cHJvY2Vzcy5oPiAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUUElEICAgICAgICAgICAgICAxIC8qIGdldHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNURU0gICAgICAgICAgICAgIDEgLyogc3lzdGVtKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1dBSVQgICAgICAgICAgICAgICAgMSAvKiB3YWl0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfS0lMTCAgICAgICAgICAgICAgICAxIC8qIGtpbGwoKSAgICAgW09TLzItc3BlY2lmaWMgY29kZSBhZGRlZF0gKi8KLSNkZWZpbmUgSEFWRV9QT1BFTiAgICAgICAgICAgICAgIDEgLyogcG9wZW4oKSAgICBbT1MvMi1zcGVjaWZpYyBjb2RlIGFkZGVkXSAqLwotLyogI2RlZmluZSBIQVZFX0dFVFBQSUQgICAgICAgMSAqLyAvKiBnZXRwcGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfV0FJVFBJRCAgICAgICAxICovIC8qIHdhaXRwaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9GT1JLICAgICAgICAgIDEgKi8gLyogZm9yaygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFVzZXIvR3JvdXAgSUQgUXVlcmllcyAqLwotLyogI2RlZmluZSBIQVZFX0dFVEVHSUQgICAgICAgMSAqLwotLyogI2RlZmluZSBIQVZFX0dFVEVVSUQgICAgICAgMSAqLwotLyogI2RlZmluZSBIQVZFX0dFVEdJRCAgICAgICAgMSAqLwotLyogI2RlZmluZSBIQVZFX0dFVFVJRCAgICAgICAgMSAqLwotCi0gIC8qIFVuaXgtU3BlY2lmaWMgKi8KLS8qICNkZWZpbmUgSEFWRV9TWVNfVU5fSCAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy91bi5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1NZU19VVFNOQU1FX0ggMSAqLyAvKiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4gICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAgICAxICovIC8qICNpbmNsdWRlIDxzeXMvd2FpdC5oPiAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9VTklTVERfSCAgICAgIDEgKi8gLyogI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1VOQU1FICAgICAgICAgMSAqLyAvKiB1bmFtZSAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLS8qIERlZmluZSBpZiB5b3Ugd2FudCBkb2N1bWVudGF0aW9uIHN0cmluZ3MgaW4gZXh0ZW5zaW9uIG1vZHVsZXMgKi8KLSNkZWZpbmUgV0lUSF9ET0NfU1RSSU5HUyAxCi0KLSNpZmRlZiBVU0VfRExfRVhQT1JUCi0gICNkZWZpbmUgRExfSU1QT1JUKFJUWVBFKSBSVFlQRSBfU3lzdGVtCi0jZW5kaWYKLQotI2VuZGlmIC8qICFQeV9DT05GSUdfSCAqLwotCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9weXRob24uZGVmIGIvUEMvb3MydmFjcHAvcHl0aG9uLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyNWMyYS4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9weXRob24uZGVmCisrKyAvZGV2L251bGwKQEAgLTEsNDc5ICswLDAgQEAKLUxJQlJBUlkgICAgICAgIFBZVEhPTjI0IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UKLURFU0NSSVBUSU9OICAgICdQeXRob24gMi40IENvcmUgRExMJwotUFJPVE1PREUKLURBVEEgICAgICAgICAgIE1VTFRJUExFIE5PTlNIQVJFRAotCi1FWFBPUlRTCi0gICAgICAgICAgICAgICA7IERhdGEKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9UeXBlCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfVHlwZQotICAgICAgICAgICAgICAgUHlDbGFzc19UeXBlCi0gICAgICAgICAgICAgICBQeUNvZGVfVHlwZQotICAgICAgICAgICAgICAgUHlDb21wbGV4X1R5cGUKLSAgICAgICAgICAgICAgIFB5RGljdF9UeXBlCi0gICAgICAgICAgICAgICBQeUV4Y19Bcml0aG1ldGljRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0Fzc2VydGlvbkVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19BdHRyaWJ1dGVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRU9GRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0Vudmlyb25tZW50RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19JT0Vycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19JbXBvcnRFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfSW5kZXhFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfS2V5RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0Ci0gICAgICAgICAgICAgICBQeUV4Y19Mb29rdXBFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfTWVtb3J5RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX01lbW9yeUVycm9ySW5zdAotICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19PdmVyZmxvd0Vycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1N5bnRheEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXhpdAotICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcgotICAgICAgICAgICAgICAgUHlGaWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5RmxvYXRfVHlwZQotICAgICAgICAgICAgICAgUHlGcmFtZV9UeXBlCi0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1R5cGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXMKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0luaXR0YWIKLSAgICAgICAgICAgICAgIFB5SW5zdGFuY2VfVHlwZQotICAgICAgICAgICAgICAgUHlJbnRfVHlwZQotICAgICAgICAgICAgICAgUHlMaXN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19UeXBlCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9UeXBlCi0gICAgICAgICAgICAgICBQeU1vZHVsZV9UeXBlCi0gICAgICAgICAgICAgICBQeU9TX0lucHV0SG9vawotICAgICAgICAgICAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcgotICAgICAgICAgICAgICAgUHlSYW5nZV9UeXBlCi0gICAgICAgICAgICAgICBQeVNsaWNlX1R5cGUKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX1R5cGUKLSAgICAgICAgICAgICAgIFB5VHJhY2VCYWNrX1R5cGUKLSAgICAgICAgICAgICAgIFB5VHVwbGVfVHlwZQotICAgICAgICAgICAgICAgUHlUeXBlX1R5cGUKLSAgICAgICAgICAgICAgIFB5X0RlYnVnRmxhZwotICAgICAgICAgICAgICAgUHlfRnJvemVuRmxhZwotICAgICAgICAgICAgICAgUHlfSW50ZXJhY3RpdmVGbGFnCi0gICAgICAgICAgICAgICBQeV9Ob1NpdGVGbGFnCi0gICAgICAgICAgICAgICBQeV9PcHRpbWl6ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X1VzZUNsYXNzRXhjZXB0aW9uc0ZsYWcKLSAgICAgICAgICAgICAgIFB5X1ZlcmJvc2VGbGFnCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRmlsZXRhYgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0luaXR0YWIKLSAgICAgICAgICAgICAgIF9QeVBhcnNlcl9HcmFtbWFyCi0gICAgICAgICAgICAgICBfUHlQYXJzZXJfVG9rZW5OYW1lcwotICAgICAgICAgICAgICAgX1B5X0VsbGlwc2lzT2JqZWN0Ci0gICAgICAgICAgICAgICBfUHlfTm9uZVN0cnVjdAotICAgICAgICAgICAgICAgX1B5X1BhY2thZ2VDb250ZXh0Ci0gICAgICAgICAgICAgICBfUHlfVHJ1ZVN0cnVjdAotICAgICAgICAgICAgICAgX1B5X1plcm9TdHJ1Y3QKLSAgICAgICAgICAgICAgIF9QeV9hYnN0cmFjdF9oYWNrCi0gICAgICAgICAgICAgICBfUHlfY2Fwc3VsZV9oYWNrCi0gICAgICAgICAgICAgICBfUHlfcmVfc3ludGF4Ci0gICAgICAgICAgICAgICBfUHlfcmVfc3ludGF4X3RhYmxlCi0KLSAgICAgICAgICAgICAgIDsgQ29kZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2UKLSAgICAgICAgICAgICAgIFB5QXJnX1BhcnNlVHVwbGUKLSAgICAgICAgICAgICAgIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcwotICAgICAgICAgICAgICAgUHlBcmdfVmFQYXJzZQotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fRmluaQotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR2V0RmxhZ3MKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HZXRTZWxmCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9OZXcKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXRDb250ZXh0Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcgotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldE5hbWUKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXRQb2ludGVyCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfSW1wb3J0Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfSXNWYWxpZAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX05ldwotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldENvbnRleHQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0TmFtZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldFBvaW50ZXIKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9Bc1ZvaWRQdHIKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9Gcm9tVm9pZFB0ckFuZERlc2MKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9Gcm9tVm9pZFB0cgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0dldERlc2MKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9JbXBvcnQKLSAgICAgICAgICAgICAgIFB5Q2FsbGFibGVfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5Q2xhc3NfSXNTdWJjbGFzcwotICAgICAgICAgICAgICAgUHlDbGFzc19OZXcKLSAgICAgICAgICAgICAgIFB5Q29kZV9BZGRyMkxpbmUKLSAgICAgICAgICAgICAgIFB5Q29kZV9OZXcKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Bc0NDb21wbGV4Ci0gICAgICAgICAgICAgICBQeUNvbXBsZXhfRnJvbUNDb21wbGV4Ci0gICAgICAgICAgICAgICBQeUNvbXBsZXhfRnJvbURvdWJsZXMKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9JbWFnQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9SZWFsQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5RGljdF9DbGVhcgotICAgICAgICAgICAgICAgUHlEaWN0X0RlbEl0ZW0KLSAgICAgICAgICAgICAgIFB5RGljdF9EZWxJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RGljdF9JdGVtcwotICAgICAgICAgICAgICAgUHlEaWN0X0tleXMKLSAgICAgICAgICAgICAgIFB5RGljdF9OZXcKLSAgICAgICAgICAgICAgIFB5RGljdF9OZXh0Ci0gICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RGljdF9TaXplCi0gICAgICAgICAgICAgICBQeURpY3RfVmFsdWVzCi0gICAgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudAotICAgICAgICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gICAgICAgICAgICAgICBQeUVycl9DaGVja1NpZ25hbHMKLSAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyCi0gICAgICAgICAgICAgICBQeUVycl9FeGNlcHRpb25NYXRjaGVzCi0gICAgICAgICAgICAgICBQeUVycl9GZXRjaAotICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0Ci0gICAgICAgICAgICAgICBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKLSAgICAgICAgICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbgotICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkKLSAgICAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgotICAgICAgICAgICAgICAgUHlFcnJfT2NjdXJyZWQKLSAgICAgICAgICAgICAgIFB5RXJyX1ByaW50Ci0gICAgICAgICAgICAgICBQeUVycl9QcmludEV4Ci0gICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlCi0gICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8KLSAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQotICAgICAgICAgICAgICAgUHlFcnJfU2V0SW50ZXJydXB0Ci0gICAgICAgICAgICAgICBQeUVycl9TZXROb25lCi0gICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QKLSAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZwotICAgICAgICAgICAgICAgUHlFdmFsX0FjcXVpcmVMb2NrCi0gICAgICAgICAgICAgICBQeUV2YWxfQWNxdWlyZVRocmVhZAotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxGdW5jdGlvbgotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxNZXRob2QKLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsT2JqZWN0Ci0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcwotICAgICAgICAgICAgICAgUHlFdmFsX0V2YWxDb2RlCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRGcmFtZQotICAgICAgICAgICAgICAgUHlFdmFsX0dldEdsb2JhbHMKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRMb2NhbHMKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRSZXN0cmljdGVkCi0gICAgICAgICAgICAgICBQeUV2YWxfSW5pdFRocmVhZHMKLSAgICAgICAgICAgICAgIFB5RXZhbF9SZWxlYXNlTG9jawotICAgICAgICAgICAgICAgUHlFdmFsX1JlbGVhc2VUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9SZXN0b3JlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUV2YWxfU2F2ZVRocmVhZAotICAgICAgICAgICAgICAgUHlGaWxlX0FzRmlsZQotICAgICAgICAgICAgICAgUHlGaWxlX0Zyb21GaWxlCi0gICAgICAgICAgICAgICBQeUZpbGVfRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlGaWxlX0dldExpbmUKLSAgICAgICAgICAgICAgIFB5RmlsZV9OYW1lCi0gICAgICAgICAgICAgICBQeUZpbGVfU2V0QnVmU2l6ZQotICAgICAgICAgICAgICAgUHlGaWxlX1NvZnRTcGFjZQotICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0Ci0gICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcKLSAgICAgICAgICAgICAgIFB5RmxvYXRfQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5RmxvYXRfQXNTdHJpbmcKLSAgICAgICAgICAgICAgIFB5RmxvYXRfRmluaQotICAgICAgICAgICAgICAgUHlGbG9hdF9Gcm9tRG91YmxlCi0gICAgICAgICAgICAgICBQeUZyYW1lX0Jsb2NrUG9wCi0gICAgICAgICAgICAgICBQeUZyYW1lX0Jsb2NrU2V0dXAKLSAgICAgICAgICAgICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzCi0gICAgICAgICAgICAgICBQeUZyYW1lX0ZpbmkKLSAgICAgICAgICAgICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0Ci0gICAgICAgICAgICAgICBQeUZyYW1lX05ldwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HZXRDb2RlCi0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dldERlZmF1bHRzCi0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dldEdsb2JhbHMKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fTmV3Ci0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldERlZmF1bHRzCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfQWRkQWNjZWxlcmF0b3JzCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfRmluZERGQQotICAgICAgICAgICAgICAgUHlHcmFtbWFyX0xhYmVsUmVwcgotICAgICAgICAgICAgICAgUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycwotICAgICAgICAgICAgICAgUHlJbXBvcnRfQWRkTW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9BcHBlbmRJbml0dGFiCi0gICAgICAgICAgICAgICBQeUltcG9ydF9DbGVhbnVwCi0gICAgICAgICAgICAgICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAotICAgICAgICAgICAgICAgUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYgotICAgICAgICAgICAgICAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0dldE1vZHVsZURpY3QKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydAotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnRNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9SZWxvYWRNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW5zdGFuY2VfRG9CaW5PcAotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9OZXcKLSAgICAgICAgICAgICAgIFB5SW50X0FzTG9uZwotICAgICAgICAgICAgICAgUHlJbnRfRmluaQotICAgICAgICAgICAgICAgUHlJbnRfRnJvbUxvbmcKLSAgICAgICAgICAgICAgIFB5SW50X0dldE1heAotICAgICAgICAgICAgICAgUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCi0gICAgICAgICAgICAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlCi0gICAgICAgICAgICAgICBQeUludGVycHJldGVyU3RhdGVfTmV3Ci0gICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kCi0gICAgICAgICAgICAgICBQeUxpc3RfQXNUdXBsZQotICAgICAgICAgICAgICAgUHlMaXN0X0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5TGlzdF9HZXRTbGljZQotICAgICAgICAgICAgICAgUHlMaXN0X0luc2VydAotICAgICAgICAgICAgICAgUHlMaXN0X05ldwotICAgICAgICAgICAgICAgUHlMaXN0X1JldmVyc2UKLSAgICAgICAgICAgICAgIFB5TGlzdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeUxpc3RfU2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5TGlzdF9TaXplCi0gICAgICAgICAgICAgICBQeUxpc3RfU29ydAotICAgICAgICAgICAgICAgUHlMb25nX0FzRG91YmxlCi0gICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc1ZvaWRQdHIKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tRG91YmxlCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmdMb25nCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21VbnNpZ25lZExvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVm9pZFB0cgotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0NoZWNrCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0hhc0tleQotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0hhc0tleVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0xlbmd0aAotICAgICAgICAgICAgICAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Jbml0Ci0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb0ZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1lbV9GcmVlCi0gICAgICAgICAgICAgICBQeU1lbV9NYWxsb2MKLSAgICAgICAgICAgICAgIFB5TWVtX1JlYWxsb2MKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0NsYXNzCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9GaW5pCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9GdW5jdGlvbgotICAgICAgICAgICAgICAgUHlNZXRob2RfTmV3Ci0gICAgICAgICAgICAgICBQeU1ldGhvZF9TZWxmCi0gICAgICAgICAgICAgICBQeU1vZHVsZV9HZXREaWN0Ci0gICAgICAgICAgICAgICBQeU1vZHVsZV9HZXROYW1lCi0gICAgICAgICAgICAgICBQeU1vZHVsZV9OZXcKLSAgICAgICAgICAgICAgIFB5Tm9kZV9BZGRDaGlsZAotICAgICAgICAgICAgICAgUHlOb2RlX0NvbXBpbGUKLSAgICAgICAgICAgICAgIFB5Tm9kZV9GcmVlCi07ICAgICAgICAgICAgICAgUHlOb2RlX0xpc3RUcmVlCi0gICAgICAgICAgICAgICBQeU5vZGVfTmV3Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9BYnNvbHV0ZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfQWRkCi0gICAgICAgICAgICAgICBQeU51bWJlcl9BbmQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0NoZWNrCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Db2VyY2UKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0NvZXJjZUV4Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9EaXZpZGUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0Rpdm1vZAotICAgICAgICAgICAgICAgUHlOdW1iZXJfRmxvYXQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0ludAotICAgICAgICAgICAgICAgUHlOdW1iZXJfSW52ZXJ0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9Mb25nCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Mc2hpZnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX011bHRpcGx5Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9OZWdhdGl2ZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfT3IKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1Bvc2l0aXZlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Qb3dlcgotICAgICAgICAgICAgICAgUHlOdW1iZXJfUmVtYWluZGVyCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Sc2hpZnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1N1YnRyYWN0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9Yb3IKLSAgICAgICAgICAgICAgIFB5T1NfQWZ0ZXJGb3JrCi0gICAgICAgICAgICAgICBQeU9TX0ZpbmlJbnRlcnJ1cHRzCi0gICAgICAgICAgICAgICBQeU9TX0luaXRJbnRlcnJ1cHRzCi0gICAgICAgICAgICAgICBQeU9TX0ludGVycnVwdE9jY3VycmVkCi0gICAgICAgICAgICAgICBQeU9TX1JlYWRsaW5lCi0gICAgICAgICAgICAgICBQeU9TX1N0ZGlvUmVhZGxpbmUKLSAgICAgICAgICAgICAgIFB5T1Nfc3RydG9sCi0gICAgICAgICAgICAgICBQeU9TX3N0cnRvdWwKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NhbGxGdW5jdGlvbgotICAgICAgICAgICAgICAgUHlPYmplY3RfQ2FsbE1ldGhvZAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ2FsbE9iamVjdAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ21wCi0gICAgICAgICAgICAgICBQeU9iamVjdF9Db21wYXJlCi0gICAgICAgICAgICAgICBQeU9iamVjdF9EZWxJdGVtCi0gICAgICAgICAgICAgICBQeU9iamVjdF9HZXRBdHRyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nCi0gICAgICAgICAgICAgICBQeU9iamVjdF9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeU9iamVjdF9IYXNBdHRyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nCi0gICAgICAgICAgICAgICBQeU9iamVjdF9IYXNoCi0gICAgICAgICAgICAgICBQeU9iamVjdF9Jc1RydWUKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0xlbmd0aAotICAgICAgICAgICAgICAgUHlPYmplY3RfTm90Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9QcmludAotICAgICAgICAgICAgICAgUHlPYmplY3RfUmVwcgotICAgICAgICAgICAgICAgUHlPYmplY3RfU2V0QXR0cgotICAgICAgICAgICAgICAgUHlPYmplY3RfU2V0QXR0clN0cmluZwotICAgICAgICAgICAgICAgUHlPYmplY3RfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlPYmplY3RfU3RyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9UeXBlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9BZGRUb2tlbgotICAgICAgICAgICAgICAgUHlQYXJzZXJfRGVsZXRlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9OZXcKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX1BhcnNlRmlsZQotICAgICAgICAgICAgICAgUHlQYXJzZXJfUGFyc2VTdHJpbmcKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZQotICAgICAgICAgICAgICAgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmcKLSAgICAgICAgICAgICAgIFB5UmFuZ2VfTmV3Ci0gICAgICAgICAgICAgICBQeVJ1bl9BbnlGaWxlCi0gICAgICAgICAgICAgICBQeVJ1bl9GaWxlCi0gICAgICAgICAgICAgICBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3AKLSAgICAgICAgICAgICAgIFB5UnVuX0ludGVyYWN0aXZlT25lCi0gICAgICAgICAgICAgICBQeVJ1bl9TaW1wbGVGaWxlCi0gICAgICAgICAgICAgICBQeVJ1bl9TaW1wbGVTdHJpbmcKLSAgICAgICAgICAgICAgIFB5UnVuX1N0cmluZwotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9DaGVjawotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db25jYXQKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfQ29udGFpbnMKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfQ291bnQKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfRGVsSXRlbQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9EZWxTbGljZQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0luCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0luZGV4Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0xlbmd0aAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9MaXN0Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1JlcGVhdAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1NldFNsaWNlCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1R1cGxlCi0gICAgICAgICAgICAgICBQeVNsaWNlX0dldEluZGljZXMKLSAgICAgICAgICAgICAgIFB5U2xpY2VfTmV3Ci0gICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZwotICAgICAgICAgICAgICAgUHlTdHJpbmdfQ29uY2F0Ci0gICAgICAgICAgICAgICBQeVN0cmluZ19Db25jYXRBbmREZWwKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0ZpbmkKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zvcm1hdAotICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0ludGVybkluUGxhY2UKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX1NpemUKLSAgICAgICAgICAgICAgIFB5U3lzX0dldEZpbGUKLSAgICAgICAgICAgICAgIFB5U3lzX0dldE9iamVjdAotICAgICAgICAgICAgICAgUHlTeXNfU2V0QXJndgotICAgICAgICAgICAgICAgUHlTeXNfU2V0T2JqZWN0Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRQYXRoCi0gICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycgotICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRvdXQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfRGVsZXRlCi0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0dldAotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXREaWN0Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX05ldwotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9Td2FwCi0gICAgICAgICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2FsbG9jYXRlX3NlbWEKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2Rvd25fc2VtYQotICAgICAgICAgICAgICAgUHlUaHJlYWRfZXhpdF90aHJlYWQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfZnJlZV9zZW1hCi0gICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50Ci0gICAgICAgICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZAotICAgICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkCi0gICAgICAgICAgICAgICBQeVRocmVhZF91cF9zZW1hCi0gICAgICAgICAgICAgICBQeVRva2VuX09uZUNoYXIKLSAgICAgICAgICAgICAgIFB5VG9rZW5fVHdvQ2hhcnMKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0ZyZWUKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0Zyb21GaWxlCi0gICAgICAgICAgICAgICBQeVRva2VuaXplcl9Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeVRva2VuaXplcl9HZXQKLSAgICAgICAgICAgICAgIFB5VHJhY2VCYWNrX0hlcmUKLSAgICAgICAgICAgICAgIFB5VHJhY2VCYWNrX1ByaW50Ci0gICAgICAgICAgICAgICBQeVR1cGxlX0ZpbmkKLSAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRTbGljZQotICAgICAgICAgICAgICAgUHlUdXBsZV9OZXcKLSAgICAgICAgICAgICAgIFB5VHVwbGVfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlUdXBsZV9TaXplCi0gICAgICAgICAgICAgICBQeV9BZGRQZW5kaW5nQ2FsbAotICAgICAgICAgICAgICAgUHlfQXRFeGl0Ci0gICAgICAgICAgICAgICBQeV9CdWlsZFZhbHVlCi0gICAgICAgICAgICAgICBQeV9Db21waWxlU3RyaW5nCi0gICAgICAgICAgICAgICBQeV9FbmRJbnRlcnByZXRlcgotICAgICAgICAgICAgICAgUHlfRXhpdAotICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcgotICAgICAgICAgICAgICAgUHlfRmRJc0ludGVyYWN0aXZlCi0gICAgICAgICAgICAgICBQeV9GaW5hbGl6ZQotICAgICAgICAgICAgICAgUHlfRmluZE1ldGhvZAotICAgICAgICAgICAgICAgUHlfRmluZE1ldGhvZEluQ2hhaW4KLSAgICAgICAgICAgICAgIFB5X0ZsdXNoTGluZQotICAgICAgICAgICAgICAgUHlfRnJlZQotICAgICAgICAgICAgICAgUHlfR2V0QXJnY0FyZ3YKLSAgICAgICAgICAgICAgIFB5X0dldEJ1aWxkSW5mbwotICAgICAgICAgICAgICAgUHlfR2V0Q29tcGlsZXIKLSAgICAgICAgICAgICAgIFB5X0dldENvcHlyaWdodAotICAgICAgICAgICAgICAgUHlfR2V0RXhlY1ByZWZpeAotICAgICAgICAgICAgICAgUHlfR2V0UGF0aAotICAgICAgICAgICAgICAgUHlfR2V0UGxhdGZvcm0KLSAgICAgICAgICAgICAgIFB5X0dldFByZWZpeAotICAgICAgICAgICAgICAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCi0gICAgICAgICAgICAgICBQeV9HZXRQcm9ncmFtTmFtZQotICAgICAgICAgICAgICAgUHlfR2V0UHl0aG9uSG9tZQotICAgICAgICAgICAgICAgUHlfR2V0VmVyc2lvbgotICAgICAgICAgICAgICAgUHlfSW5pdE1vZHVsZTQKLSAgICAgICAgICAgICAgIFB5X0luaXRpYWxpemUKLSAgICAgICAgICAgICAgIFB5X0lzSW5pdGlhbGl6ZWQKLSAgICAgICAgICAgICAgIFB5X01haW4KLSAgICAgICAgICAgICAgIFB5X01ha2VQZW5kaW5nQ2FsbHMKLSAgICAgICAgICAgICAgIFB5X01hbGxvYwotICAgICAgICAgICAgICAgUHlfTmV3SW50ZXJwcmV0ZXIKLSAgICAgICAgICAgICAgIFB5X1JlYWxsb2MKLSAgICAgICAgICAgICAgIFB5X1JlcHJFbnRlcgotICAgICAgICAgICAgICAgUHlfUmVwckxlYXZlCi0gICAgICAgICAgICAgICBQeV9TZXRQcm9ncmFtTmFtZQotICAgICAgICAgICAgICAgUHlfU2V0UHl0aG9uSG9tZQotICAgICAgICAgICAgICAgUHlfVmFCdWlsZFZhbHVlCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0ZpbmlfMQotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9GaW5pXzIKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fSW5pdF8xCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0luaXRfMgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb24KLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaW5pCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb24KLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9Jbml0Ci0gICAgICAgICAgICAgICBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUKLSAgICAgICAgICAgICAgIF9QeUxvbmdfTmV3Ci0gICAgICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIKLSAgICAgICAgICAgICAgIF9QeU9iamVjdF9OZXcKLSAgICAgICAgICAgICAgIF9QeU9iamVjdF9OZXdWYXIKLSAgICAgICAgICAgICAgIF9QeVN0cmluZ19SZXNpemUKLSAgICAgICAgICAgICAgIF9QeVN5c19Jbml0Ci0gICAgICAgICAgICAgICBfUHlUdXBsZV9SZXNpemUKLSAgICAgICAgICAgICAgIF9QeV9NRDVGaW5hbAotICAgICAgICAgICAgICAgX1B5X01ENUluaXQKLSAgICAgICAgICAgICAgIF9QeV9NRDVVcGRhdGUKLTsgICAgICAgICAgICAgICBfUHlfYWRkYml0Ci0gICAgICAgICAgICAgICBfUHlfY19kaWZmCi0gICAgICAgICAgICAgICBfUHlfY19uZWcKLSAgICAgICAgICAgICAgIF9QeV9jX3BvdwotICAgICAgICAgICAgICAgX1B5X2NfcHJvZAotICAgICAgICAgICAgICAgX1B5X2NfcXVvdAotICAgICAgICAgICAgICAgX1B5X2Nfc3VtCi07ICAgICAgICAgICAgICAgX1B5X2RlbGJpdHNldAotOyAgICAgICAgICAgICAgIF9QeV9tZXJnZWJpdHNldAotOyAgICAgICAgICAgICAgIF9QeV9tZXRhX2dyYW1tYXIKLTsgICAgICAgICAgICAgICBfUHlfbmV3Yml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X3NhbWViaXRzZXQKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX1R5cGUKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX0Zyb21PYmplY3QKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX0Zyb21NZW1vcnkKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX0Zyb21SZWFkV3JpdGVNZW1vcnkKLSAgICAgICAgICAgICAgIFB5QnVmZmVyX05ldwotCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9yZWFkbWUudHh0IGIvUEMvb3MydmFjcHAvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM1ODYwNC4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLUlCTSBWaXN1YWxBZ2UgQy9DKysgZm9yIE9TLzIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVG8gYnVpbGQgUHl0aG9uIGZvciBPUy8yLCBjaGFuZ2UgaW50byAuL29zMnZhY3BwIGFuZCBpc3N1ZSBhbiAnTk1BS0UnCi1jb21tYW5kLiAgVGhpcyB3aWxsIGJ1aWxkIGEgUFlUSE9OMTUuRExMIGNvbnRhaW5pbmcgdGhlIHNldCBvZiBQeXRob24KLW1vZHVsZXMgbGlzdGVkIGluIGNvbmZpZy5jIGFuZCBhIHNtYWxsIFBZVEhPTi5FWEUgdG8gc3RhcnQgdGhlCi1pbnRlcnByZXRlci4KLQotQnkgY2hhbmdpbmcgdGhlIEMgY29tcGlsZXIgZmxhZyAvR2QtIGluIHRoZSBtYWtlZmlsZSB0byAvR2QrLCB5b3UgY2FuCi1yZWR1Y2UgdGhlIHNpemUgb2YgdGhlc2UgYnkgY2F1c2luZyBQeXRob24gdG8gZHluYW1pY2FsbHkgbGluayB0byB0aGUKLUMgcnVudGltZSBETExzIGluc3RlYWQgb2YgaW5jbHVkaW5nIHRoZWlyIGJ1bGsgaW4geW91ciBiaW5hcmllcy4gCi1Ib3dldmVyLCB0aGlzIG1lYW5zIHRoYXQgYW55IHN5c3RlbSBvbiB3aGljaCB5b3UgcnVuIFB5dGhvbiBtdXN0IGhhdmUKLXRoZSBWQUMrKyBjb21waWxlciBpbnN0YWxsZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aG9zZSBETExzIGF2YWlsYWJsZS4KLQotRHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzIHlvdSBtYXkgc2VlIGEgY291cGxlIG9mIGhhcm1sZXNzIHdhcm5pbmdzOgotCi0gIEZyb20gdGhlIEMgQ29tcGlsZXIsICJObyBmdW5jdGlvbiBwcm90b3R5cGUgZ2l2ZW4gZm9yIFhYWCIsIHdoaWNoCi0gIGNvbWVzIGZyb20gdGhlIHVzZSBvZiBLJlIgcGFyYW1ldGVycyB3aXRoaW4gUHl0aG9uIGZvciBwb3J0YWJpbGl0eS4KLQotICBGcm9tIHRoZSBJTElCIGxpYnJhcmlhbiwgIk1vZHVsZSBOb3QgRm91bmQgKFhYWCkiLCB3aGljaCBjb21lcwotICBmcm9tIGl0cyBhdHRlbXB0IHRvIHBlcmZvcm0gdGhlICgtKykgb3BlcmF0aW9uLCB3aGljaCByZW1vdmVzIGFuZAotICB0aGVuIGFkZHMgYSAuT0JKIHRvIHRoZSBsaWJyYXJ5LiAgVGhlIGZpcnN0IHRpbWUgYSBidWlsZCBpcyBkb25lLAotICBpdCBvYnZpb3VzbHkgY2Fubm90IHJlbW92ZSB3aGF0IGlzIG5vdCB5ZXQgYnVpbHQuCi0KLVRoaXMgYnVpbGQgaW5jbHVkZXMgc3VwcG9ydCBmb3IgbW9zdCBQeXRob24gZnVuY3Rpb25hbGl0eSBhcyB3ZWxsIGFzCi1UQ1AvSVAgc29ja2V0cy4gIEl0IG9taXRzIHRoZSBQb3NpeCBhYmlsaXR5IHRvICdmb3JrJyBhIHByb2Nlc3MgYnV0Ci1zdXBwb3J0cyB0aHJlYWRzIHVzaW5nIE9TLzIgbmF0aXZlIGNhcGFiaWxpdGllcy4gIEkgaGF2ZSB0cmllZCB0bwotc3VwcG9ydCBldmVyeXRoaW5nIHBvc3NpYmxlIGJ1dCBoZXJlIGFyZSBhIGZldyB1c2FnZSBub3Rlcy4KLQotCi0tLSBvcy5wb3BlbigpIFVzYWdlIFdhcm5pbmdzCi0KLVdpdGggcmVzcGVjdCB0byBteSBpbXBsZW1lbnRhdGlvbiBvZiBwb3BlbigpIHVuZGVyIE9TLzI6Ci0KLSAgICBpbXBvcnQgb3MKLQotICAgIGZkID0gb3MucG9wZW4oInBremlwLmV4ZSAtQCBqdW5rLnppcCIsICd3YicpCi0gICAgZmQud3JpdGUoImZpbGUxLnR4dFxuIikKLSAgICBmZC53cml0ZSgiZmlsZTIudHh0XG4iKQotICAgIGZkLndyaXRlKCJmaWxlMy50eHRcbiIpCi0gICAgZmQud3JpdGUoIlx4MWEiKSAgIyBTaG91bGQgTm90IEJlIE5lY2Vzc2FyeSBCdXQgSXMKLSAgICBmZC5jbG9zZSgpCi0KLVRoZXJlIGlzIGEgYnVnLCBlaXRoZXIgaW4gdGhlIFZBQysrIGNvbXBpbGVyIG9yIE9TLzIgaXRzZWxmLCB3aGVyZSB0aGUKLXNpbXBsZSBjbG9zdXJlIG9mIHRoZSB3cml0ZS1zaWRlIG9mIGEgcGlwZSAtdG8tIGEgcHJvY2VzcyBkb2VzIG5vdAotc2VuZCBhbiBFT0YgdG8gdGhhdCBwcm9jZXNzLiAgSSBmaW5kIEkgbXVzdCBleHBsaWNpdGx5IHdyaXRlIGEKLWNvbnRyb2wtWiAoRU9GKSBiZWZvcmUgY2xvc2luZyB0aGUgcGlwZS4gIFRoaXMgaXMgbm90IGEgcHJvYmxlbSB3aGVuCi11c2luZyBwb3BlbigpIGluIHJlYWQgbW9kZS4KLQotT25lIG90aGVyIHNsaWdodCBkaWZmZXJlbmNlIHdpdGggbXkgcG9wZW4oKSBpcyB0aGF0IEkgcmV0dXJuIE5vbmUKLWZyb20gdGhlIGNsb3NlKCksIGluc3RlYWQgb2YgdGhlIFVuaXggY29udmVudGlvbiBvZiB0aGUgcmV0dXJuIGNvZGUKLW9mIHRoZSBzcGF3bmVkIHByb2dyYW0uICBJIGNvdWxkIGZpbmQgbm8gZWFzeSB3YXkgdG8gZG8gdGhpcyB1bmRlcgotT1MvMi4KLQotCi0tLSBCRUdJTkxJQlBBVEgvRU5ETElCUEFUSAotCi1XaXRoIHJlc3BlY3QgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzLCB0aGlzIE9TLzIgcG9ydCBzdXBwb3J0cyB0aGUKLXNwZWNpYWwtdG8tT1MvMiBtYWdpYyBuYW1lcyBvZiAnQkVHSU5MSUJQQVRIJyBhbmQgJ0VORExJQlBBVEgnIHRvCi1jb250cm9sIHdoZXJlIHRvIGxvYWQgY29udmVudGlvbmFsIERMTHMgZnJvbS4gIFRob3NlIG5hbWVzIGFyZQotaW50ZXJjZXB0ZWQgYW5kIGNvbnZlcnRlZCB0byBjYWxscyBvbiB0aGUgT1MvMiBrZXJuZWwgQVBJcyBhbmQKLWFyZSBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLCB3aGV0aGVyIFB5dGhvbi1iYXNlZCBvciBub3QuCi0KLUEgZmV3IG5ldyBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgb3MgbW9kdWxlOgotCi0gICAgb3MubWVtaW5zdGFsbGVkICAjIENvdW50IG9mIEJ5dGVzIG9mIFJBTSBJbnN0YWxsZWQgb24gTWFjaGluZQotICAgIG9zLm1lbWtlcm5lbCAgICAgIyBDb3VudCBvZiBCeXRlcyBvZiBSQU0gUmVzZXJ2ZWQgKE5vbi1Td2FwcGFibGUpCi0gICAgb3MubWVtdmlydHVhbCAgICAjIENvdW50IG9mIEJ5dGVzIG9mIFZpcnR1YWwgUkFNIFBvc3NpYmxlCi0gICAgb3MudGltZXNsaWNlICAgICAjIER1cmF0aW9uIG9mIFNjaGVkdWxlciBUaW1lc2xpY2UsIGluIE1pbGxpc2Vjb25kcwotICAgIG9zLm1heHBhdGhsZW4gICAgIyBNYXhpbXVtIExlbmd0aCBvZiBhIFBhdGggU3BlY2lmaWNhdGlvbiwgaW4gY2hhcnMKLSAgICBvcy5tYXhuYW1lbGVuICAgICMgTWF4aW11bSBMZW5ndGggb2YgYSBTaW5nbGUgRGlyL0ZpbGUgTmFtZSwgaW4gY2hhcnMKLSAgICBvcy52ZXJzaW9uICAgICAgICMgVmVyc2lvbiBvZiBPUy8yIEJlaW5nIFJ1biBlLmcuICI0LjAwIgotICAgIG9zLnJldmlzaW9uICAgICAgIyBSZXZpc2lvbiBvZiBPUy8yIEJlaW5nIFJ1biAodXN1YWxseSB6ZXJvKQotICAgIG9zLmJvb3Rkcml2ZSAgICAgIyBEcml2ZSB0aGF0IFN5c3RlbSBCb290ZWQgRnJvbSBlLmcuICJDOiIKLSAgICAgICAgICAgICAgICAgICAgICMgKHVzZWZ1bCB0byBmaW5kIHRoZSBDT05GSUcuU1lTIHVzZWQgdG8gYm9vdCB3aXRoKQotCi0KLS0tIFVzaW5nIFB5dGhvbiBhcyB0aGUgRGVmYXVsdCBPUy8yIEJhdGNoIExhbmd1YWdlCi0KLU5vdGUgdGhhdCBPUy8yIHN1cHBvcnRzIHRoZSBVbml4IHRlY2huaXF1ZSBvZiBwdXR0aW5nIHRoZSBzcGVjaWFsCi1jb21tZW50IGxpbmUgYXQgdGhlIHRpbWUgb2Ygc2NyaXB0cyBlLmcuICIjIS91c3IvYmluL3B5dGhvbiIgaW4KLWEgZGlmZmVyZW50IHN5bnRhY3RpYyBmb3JtLiAgVG8gZG8gdGhpcywgcHV0IHlvdXIgc2NyaXB0IGludG8gYSBmaWxlCi13aXRoIGEgLkNNRCBleHRlbnNpb24gYW5kIGFkZGVkICdleHRwcm9jJyB0byB0aGUgdG9wIGFzIGZvbGxvd3M6Ci0KLSAgICBleHRwcm9jIEM6XFB5dGhvblxQeXRob24uZXhlIC14Ci0gICAgaW1wb3J0IG9zCi0gICAgcHJpbnQgIkhlbGxvIGZyb20gUHl0aG9uIgotCi1UaGUgJy14JyBvcHRpb24gdGVsbHMgUHl0aG9uIHRvIHNraXAgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZpbGUKLXdoaWxlIHByb2Nlc3NpbmcgdGhlIHJlc3QgYXMgbm9ybWFsIFB5dGhvbiBzb3VyY2UuCi0KLQotLS0gU3VnZ2VzdGVkIEVudmlyb25tZW50IFZhcmlhYmxlIFNldHVwCi0KLVdpdGggcmVzcGVjdCB0byB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBQeXRob24sIEkgdXNlIHRoZQotZm9sbG93aW5nIHNldHVwOgotCi0gICAgU2V0IFBZVEhPTkhPTUU9RTpcVGF1XFByb2plY3RzXFB5dGhvbjtEOlxETExzCi0gICAgU2V0IFBZVEhPTlBBVEg9LjtFOlxUYXVcUHJvamVjdHNcUHl0aG9uXExpYjsgXAotICAgICAgICAgICAgICAgICAgICAgRTpcVGF1XFByb2plY3RzXFB5dGhvblxMaWJccGxhdC13aW4KLQotVGhlIEVYRUNfUFJFRklYIChvcHRpb25hbCBzZWNvbmQgcGF0aHNwZWMgb24gUFlUSE9OSE9NRSkgaXMgd2hlcmUKLXlvdSBwdXQgYW55IFB5dGhvbiBleHRlbnNpb24gRExMcyB5b3UgbWF5IGNyZWF0ZS9vYnRhaW4uICBUaGVyZQotYXJlIG5vbmUgcHJvdmlkZWQgd2l0aCB0aGlzIHJlbGVhc2UuCi0KLQotLS0gQ29udGFjdCBJbmZvCi0KLUplZmYgUnVzaCBpcyBubyBsb25nZXIgc3VwcG9ydGluZyB0aGUgVkFDUFAgcG9ydCA6LSgKLQotSSBkb24ndCBoYXZlIHRoZSBWQUNQUCBjb21waWxlciwgc28gY2FuJ3QgcmVsaWFibHkgbWFpbnRhaW4gdGhpcyBwb3J0LiAKLQotQW55b25lIHdpdGggVkFDUFAgd2hvIGNhbiBjb250cmlidXRlIHBhdGNoZXMgdG8ga2VlcCB0aGlzIHBvcnQgYnVpbGRhYmxlCi1zaG91bGQgdXBsb2FkIHRoZW0gdG8gdGhlIFB5dGhvbiBQYXRjaCBNYW5hZ2VyIGF0IFNvdXJjZWZvcmdlIGFuZCAKLWFzc2lnbiB0aGVtIHRvIG1lIGZvciByZXZpZXcvY2hlY2tpbi4KLQotQW5kcmV3IE1hY0ludHlyZQotYWltYWNpbnR5cmUgYXQgdXNlcnMuc291cmNlZm9yZ2UubmV0Ci1BdWd1c3QgMTgsIDIwMDIuCmRpZmYgLS1naXQgYS9QQy9weWNvbmZpZy5oIGIvUEMvcHljb25maWcuaAppbmRleCBmMzIwY2NmLi44YjNkNjBmIDEwMDY0NAotLS0gYS9QQy9weWNvbmZpZy5oCisrKyBiL1BDL3B5Y29uZmlnLmgKQEAgLTE1NiwxNSArMTU2LDkgQEAKICNlbmRpZiAvKiBNU19XSU42NCAqLwogCiAvKiBzZXQgdGhlIHZlcnNpb24gbWFjcm9zIGZvciB0aGUgd2luZG93cyBoZWFkZXJzICovCi0jaWZkZWYgTVNfV0lOWDY0Ci0vKiA2NCBiaXQgb25seSBydW5zIG9uIFhQIG9yIGdyZWF0ZXIgKi8KKy8qIFB5dGhvbiAzLjQrIHJlcXVpcmVzIFdpbmRvd3MgWFAgb3IgZ3JlYXRlciAqLwogI2RlZmluZSBQeV9XSU5WRVIgMHgwNTAxIC8qIF9XSU4zMl9XSU5OVF9XSU5YUCAqLwogI2RlZmluZSBQeV9OVERESSBOVERESV9XSU5YUAotI2Vsc2UKLS8qIFB5dGhvbiAyLjYrIHJlcXVpcmVzIFdpbmRvd3MgMjAwMCBvciBncmVhdGVyICovCi0jZGVmaW5lIFB5X1dJTlZFUiAweDA1MDAgLyogX1dJTjMyX1dJTk5UX1dJTjJLICovCi0jZGVmaW5lIFB5X05URERJIE5URERJX1dJTjJLU1A0Ci0jZW5kaWYKIAogLyogV2Ugb25seSBzZXQgdGhlc2UgdmFsdWVzIHdoZW4gYnVpbGRpbmcgUHl0aG9uIC0gd2UgZG9uJ3Qgd2FudCB0byBmb3JjZQogICAgdGhlc2UgdmFsdWVzIG9uIGV4dGVuc2lvbnMsIGFzIHRoYXQgd2lsbCBhZmZlY3QgdGhlIHByb3RvdHlwZXMgYW5kCkBAIC0xOTksOCArMTkzLDEwIEBACiAjZGVmaW5lIEhBVkVfU1NJWkVfVCAxCiAKICNpZiBkZWZpbmVkKE1TX1dJTjMyKSAmJiAhZGVmaW5lZChNU19XSU42NCkKLSNpZmRlZiBfTV9JWDg2CisjaWYgZGVmaW5lZChfTV9JWDg2KQogI2RlZmluZSBDT01QSUxFUiBfUHlfUEFTVEVfVkVSU0lPTigiMzIgYml0IChJbnRlbCkiKQorI2VsaWYgZGVmaW5lZChfTV9BUk0pCisjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKEFSTSkiKQogI2Vsc2UKICNkZWZpbmUgQ09NUElMRVIgX1B5X1BBU1RFX1ZFUlNJT04oIjMyIGJpdCAoVW5rbm93bikiKQogI2VuZGlmCkBAIC0zMjQsMTEgKzMyMCwxMSBAQAogCQkJdGhlaXIgTWFrZWZpbGUgKG90aGVyIGNvbXBpbGVycyBhcmUgZ2VuZXJhbGx5CiAJCQl0YWtlbiBjYXJlIG9mIGJ5IGRpc3R1dGlscy4pICovCiAjCQkJaWYgZGVmaW5lZChfREVCVUcpCi0jCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzNfZC5saWIiKQorIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjM0X2QubGliIikKICMJCQllbGlmIGRlZmluZWQoUHlfTElNSVRFRF9BUEkpCiAjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMy5saWIiKQogIwkJCWVsc2UKLSMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zMy5saWIiKQorIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjM0LmxpYiIpCiAjCQkJZW5kaWYgLyogX0RFQlVHICovCiAjCQllbmRpZiAvKiBfTVNDX1ZFUiAqLwogIwllbmRpZiAvKiBQeV9CVUlMRF9DT1JFICovCkBAIC03MjcsNiArNzIzLDkgQEAKIC8qIFRoZSBzaXplIG9mIGB3Y2hhcl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCAyCiAKKy8qIFRoZSBzaXplIG9mIGBwaWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1BJRF9UIFNJWkVPRl9JTlQKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBkbCBsaWJyYXJ5ICgtbGRsKS4gICovCiAvKiAjdW5kZWYgSEFWRV9MSUJETCAqLwogCmRpZmYgLS1naXQgYS9QQy9weXRob24ubWsgYi9QQy9weXRob24ubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NjUxMDYuLjAwMDAwMDAKLS0tIGEvUEMvcHl0aG9uLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1wcm9qZWN0IDogbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfb3MyXHB5dGhfb3MyLmV4ZSBuOlxweXRob25ccHl0aG9uLTEuJg0KLTUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLmV4ZSAuU1lNQk9MSUMNCi0NCi0haW5jbHVkZSBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIubWsxDQotIWluY2x1ZGUgbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLm1rMQ0KZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMuZGVmIGIvUEMvcHl0aG9uMy5kZWYKaW5kZXggZDcyNjUyNS4uMGNmMGQ5NCAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMy5kZWYKKysrIGIvUEMvcHl0aG9uMy5kZWYKQEAgLTEsNjk5ICsxLDcwMCBAQAotOyBXaGVuIGNoYW5naW5nIHRoaXMgZmlsZSwgcnVuIHB5dGhvbjMzZ2VuLnB5Cis7IFdoZW4gY2hhbmdpbmcgdGhpcyBmaWxlLCBydW4gcHl0aG9uMzRnZW4ucHkKIExJQlJBUlkJInB5dGhvbjMiCiBFWFBPUlRTCi0gIFB5QXJnX1BhcnNlPXB5dGhvbjMzLlB5QXJnX1BhcnNlCi0gIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzMuUHlBcmdfUGFyc2VUdXBsZQotICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzMuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjMzLlB5QXJnX1VucGFja1R1cGxlCi0gIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzMuUHlBcmdfVmFQYXJzZQotICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zMy5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcwotICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzMuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCi0gIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjMzLlB5QmFzZU9iamVjdF9UeXBlIERBVEEKLSAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjMzLlB5Qm9vbF9Gcm9tTG9uZwotICBQeUJvb2xfVHlwZT1weXRob24zMy5QeUJvb2xfVHlwZSBEQVRBCi0gIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjMzLlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzMuUHlCeXRlQXJyYXlfQXNTdHJpbmcKLSAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0NvbmNhdAotICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKLSAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1Jlc2l6ZQotICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1NpemUKLSAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zMy5QeUJ5dGVBcnJheV9UeXBlIERBVEEKLSAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zMy5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zMy5QeUJ5dGVzX0FzU3RyaW5nCi0gIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCi0gIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjMzLlB5Qnl0ZXNfQ29uY2F0Ci0gIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjMzLlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCi0gIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjMzLlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCi0gIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zMy5QeUJ5dGVzX0Zyb21Gb3JtYXQKLSAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zMy5QeUJ5dGVzX0Zyb21Gb3JtYXRWCi0gIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zMy5QeUJ5dGVzX0Zyb21PYmplY3QKLSAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbVN0cmluZwotICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlc19SZXByPXB5dGhvbjMzLlB5Qnl0ZXNfUmVwcgotICBQeUJ5dGVzX1NpemU9cHl0aG9uMzMuUHlCeXRlc19TaXplCi0gIFB5Qnl0ZXNfVHlwZT1weXRob24zMy5QeUJ5dGVzX1R5cGUgREFUQQotICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0NhbGwKLSAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zMy5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0Ci0gIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0dldEZsYWdzCi0gIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCi0gIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0U2VsZgotICBQeUNGdW5jdGlvbl9OZXdFeD1weXRob24zMy5QeUNGdW5jdGlvbl9OZXdFeAotICBQeUNGdW5jdGlvbl9UeXBlPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX1R5cGUgREFUQQotICBQeUNhbGxJdGVyX05ldz1weXRob24zMy5QeUNhbGxJdGVyX05ldwotICBQeUNhbGxJdGVyX1R5cGU9cHl0aG9uMzMuUHlDYWxsSXRlcl9UeXBlIERBVEEKLSAgUHlDYWxsYWJsZV9DaGVjaz1weXRob24zMy5QeUNhbGxhYmxlX0NoZWNrCi0gIFB5Q2Fwc3VsZV9HZXRDb250ZXh0PXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXRDb250ZXh0Ci0gIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCi0gIFB5Q2Fwc3VsZV9HZXROYW1lPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXROYW1lCi0gIFB5Q2Fwc3VsZV9HZXRQb2ludGVyPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXRQb2ludGVyCi0gIFB5Q2Fwc3VsZV9JbXBvcnQ9cHl0aG9uMzMuUHlDYXBzdWxlX0ltcG9ydAotICBQeUNhcHN1bGVfSXNWYWxpZD1weXRob24zMy5QeUNhcHN1bGVfSXNWYWxpZAotICBQeUNhcHN1bGVfTmV3PXB5dGhvbjMzLlB5Q2Fwc3VsZV9OZXcKLSAgUHlDYXBzdWxlX1NldENvbnRleHQ9cHl0aG9uMzMuUHlDYXBzdWxlX1NldENvbnRleHQKLSAgUHlDYXBzdWxlX1NldERlc3RydWN0b3I9cHl0aG9uMzMuUHlDYXBzdWxlX1NldERlc3RydWN0b3IKLSAgUHlDYXBzdWxlX1NldE5hbWU9cHl0aG9uMzMuUHlDYXBzdWxlX1NldE5hbWUKLSAgUHlDYXBzdWxlX1NldFBvaW50ZXI9cHl0aG9uMzMuUHlDYXBzdWxlX1NldFBvaW50ZXIKLSAgUHlDYXBzdWxlX1R5cGU9cHl0aG9uMzMuUHlDYXBzdWxlX1R5cGUgREFUQQotICBQeUNsYXNzTWV0aG9kRGVzY3JfVHlwZT1weXRob24zMy5QeUNsYXNzTWV0aG9kRGVzY3JfVHlwZSBEQVRBCi0gIFB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMKLSAgUHlDb2RlY19EZWNvZGU9cHl0aG9uMzMuUHlDb2RlY19EZWNvZGUKLSAgUHlDb2RlY19EZWNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfRGVjb2RlcgotICBQeUNvZGVjX0VuY29kZT1weXRob24zMy5QeUNvZGVjX0VuY29kZQotICBQeUNvZGVjX0VuY29kZXI9cHl0aG9uMzMuUHlDb2RlY19FbmNvZGVyCi0gIFB5Q29kZWNfSWdub3JlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfSWdub3JlRXJyb3JzCi0gIFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyCi0gIFB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyCi0gIFB5Q29kZWNfS25vd25FbmNvZGluZz1weXRob24zMy5QeUNvZGVjX0tub3duRW5jb2RpbmcKLSAgUHlDb2RlY19Mb29rdXBFcnJvcj1weXRob24zMy5QeUNvZGVjX0xvb2t1cEVycm9yCi0gIFB5Q29kZWNfUmVnaXN0ZXI9cHl0aG9uMzMuUHlDb2RlY19SZWdpc3RlcgotICBQeUNvZGVjX1JlZ2lzdGVyRXJyb3I9cHl0aG9uMzMuUHlDb2RlY19SZWdpc3RlckVycm9yCi0gIFB5Q29kZWNfUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX1JlcGxhY2VFcnJvcnMKLSAgUHlDb2RlY19TdHJlYW1SZWFkZXI9cHl0aG9uMzMuUHlDb2RlY19TdHJlYW1SZWFkZXIKLSAgUHlDb2RlY19TdHJlYW1Xcml0ZXI9cHl0aG9uMzMuUHlDb2RlY19TdHJlYW1Xcml0ZXIKLSAgUHlDb2RlY19TdHJpY3RFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19TdHJpY3RFcnJvcnMKLSAgUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzCi0gIFB5Q29tcGxleF9Gcm9tRG91Ymxlcz1weXRob24zMy5QeUNvbXBsZXhfRnJvbURvdWJsZXMKLSAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZT1weXRob24zMy5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlCi0gIFB5Q29tcGxleF9SZWFsQXNEb3VibGU9cHl0aG9uMzMuUHlDb21wbGV4X1JlYWxBc0RvdWJsZQotICBQeUNvbXBsZXhfVHlwZT1weXRob24zMy5QeUNvbXBsZXhfVHlwZSBEQVRBCi0gIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2Q9cHl0aG9uMzMuUHlEZXNjcl9OZXdDbGFzc01ldGhvZAotICBQeURlc2NyX05ld0dldFNldD1weXRob24zMy5QeURlc2NyX05ld0dldFNldAotICBQeURlc2NyX05ld01lbWJlcj1weXRob24zMy5QeURlc2NyX05ld01lbWJlcgotICBQeURlc2NyX05ld01ldGhvZD1weXRob24zMy5QeURlc2NyX05ld01ldGhvZAotICBQeURpY3RJdGVtc19UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZW1zX1R5cGUgREFUQQotICBQeURpY3RJdGVySXRlbV9UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZXJJdGVtX1R5cGUgREFUQQotICBQeURpY3RJdGVyS2V5X1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlcktleV9UeXBlIERBVEEKLSAgUHlEaWN0SXRlclZhbHVlX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlclZhbHVlX1R5cGUgREFUQQotICBQeURpY3RLZXlzX1R5cGU9cHl0aG9uMzMuUHlEaWN0S2V5c19UeXBlIERBVEEKLSAgUHlEaWN0UHJveHlfTmV3PXB5dGhvbjMzLlB5RGljdFByb3h5X05ldwotICBQeURpY3RQcm94eV9UeXBlPXB5dGhvbjMzLlB5RGljdFByb3h5X1R5cGUgREFUQQotICBQeURpY3RWYWx1ZXNfVHlwZT1weXRob24zMy5QeURpY3RWYWx1ZXNfVHlwZSBEQVRBCi0gIFB5RGljdF9DbGVhcj1weXRob24zMy5QeURpY3RfQ2xlYXIKLSAgUHlEaWN0X0NvbnRhaW5zPXB5dGhvbjMzLlB5RGljdF9Db250YWlucwotICBQeURpY3RfQ29weT1weXRob24zMy5QeURpY3RfQ29weQotICBQeURpY3RfRGVsSXRlbT1weXRob24zMy5QeURpY3RfRGVsSXRlbQotICBQeURpY3RfRGVsSXRlbVN0cmluZz1weXRob24zMy5QeURpY3RfRGVsSXRlbVN0cmluZwotICBQeURpY3RfR2V0SXRlbT1weXRob24zMy5QeURpY3RfR2V0SXRlbQotICBQeURpY3RfR2V0SXRlbVN0cmluZz1weXRob24zMy5QeURpY3RfR2V0SXRlbVN0cmluZwotICBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcj1weXRob24zMy5QeURpY3RfR2V0SXRlbVdpdGhFcnJvcgotICBQeURpY3RfSXRlbXM9cHl0aG9uMzMuUHlEaWN0X0l0ZW1zCi0gIFB5RGljdF9LZXlzPXB5dGhvbjMzLlB5RGljdF9LZXlzCi0gIFB5RGljdF9NZXJnZT1weXRob24zMy5QeURpY3RfTWVyZ2UKLSAgUHlEaWN0X01lcmdlRnJvbVNlcTI9cHl0aG9uMzMuUHlEaWN0X01lcmdlRnJvbVNlcTIKLSAgUHlEaWN0X05ldz1weXRob24zMy5QeURpY3RfTmV3Ci0gIFB5RGljdF9OZXh0PXB5dGhvbjMzLlB5RGljdF9OZXh0Ci0gIFB5RGljdF9TZXRJdGVtPXB5dGhvbjMzLlB5RGljdF9TZXRJdGVtCi0gIFB5RGljdF9TZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9TZXRJdGVtU3RyaW5nCi0gIFB5RGljdF9TaXplPXB5dGhvbjMzLlB5RGljdF9TaXplCi0gIFB5RGljdF9UeXBlPXB5dGhvbjMzLlB5RGljdF9UeXBlIERBVEEKLSAgUHlEaWN0X1VwZGF0ZT1weXRob24zMy5QeURpY3RfVXBkYXRlCi0gIFB5RGljdF9WYWx1ZXM9cHl0aG9uMzMuUHlEaWN0X1ZhbHVlcwotICBQeUVsbGlwc2lzX1R5cGU9cHl0aG9uMzMuUHlFbGxpcHNpc19UeXBlIERBVEEKLSAgUHlFbnVtX1R5cGU9cHl0aG9uMzMuUHlFbnVtX1R5cGUgREFUQQotICBQeUVycl9CYWRBcmd1bWVudD1weXRob24zMy5QeUVycl9CYWRBcmd1bWVudAotICBQeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzMuUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gIFB5RXJyX0NoZWNrU2lnbmFscz1weXRob24zMy5QeUVycl9DaGVja1NpZ25hbHMKLSAgUHlFcnJfQ2xlYXI9cHl0aG9uMzMuUHlFcnJfQ2xlYXIKLSAgUHlFcnJfRGlzcGxheT1weXRob24zMy5QeUVycl9EaXNwbGF5Ci0gIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzMuUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcwotICBQeUVycl9GZXRjaD1weXRob24zMy5QeUVycl9GZXRjaAotICBQeUVycl9Gb3JtYXQ9cHl0aG9uMzMuUHlFcnJfRm9ybWF0Ci0gIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zMy5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKLSAgUHlFcnJfTmV3RXhjZXB0aW9uPXB5dGhvbjMzLlB5RXJyX05ld0V4Y2VwdGlvbgotICBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jPXB5dGhvbjMzLlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKLSAgUHlFcnJfTm9NZW1vcnk9cHl0aG9uMzMuUHlFcnJfTm9NZW1vcnkKLSAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uPXB5dGhvbjMzLlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgotICBQeUVycl9PY2N1cnJlZD1weXRob24zMy5QeUVycl9PY2N1cnJlZAotICBQeUVycl9QcmludD1weXRob24zMy5QeUVycl9QcmludAotICBQeUVycl9QcmludEV4PXB5dGhvbjMzLlB5RXJyX1ByaW50RXgKLSAgUHlFcnJfUHJvZ3JhbVRleHQ9cHl0aG9uMzMuUHlFcnJfUHJvZ3JhbVRleHQKLSAgUHlFcnJfUmVzdG9yZT1weXRob24zMy5QeUVycl9SZXN0b3JlCi0gIFB5RXJyX1NldEZyb21FcnJubz1weXRob24zMy5QeUVycl9TZXRGcm9tRXJybm8KLSAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lPXB5dGhvbjMzLlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQotICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3Q9cHl0aG9uMzMuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0Ci0gIFB5RXJyX1NldEludGVycnVwdD1weXRob24zMy5QeUVycl9TZXRJbnRlcnJ1cHQKLSAgUHlFcnJfU2V0Tm9uZT1weXRob24zMy5QeUVycl9TZXROb25lCi0gIFB5RXJyX1NldE9iamVjdD1weXRob24zMy5QeUVycl9TZXRPYmplY3QKLSAgUHlFcnJfU2V0U3RyaW5nPXB5dGhvbjMzLlB5RXJyX1NldFN0cmluZwotICBQeUVycl9TeW50YXhMb2NhdGlvbj1weXRob24zMy5QeUVycl9TeW50YXhMb2NhdGlvbgotICBQeUVycl9XYXJuRXg9cHl0aG9uMzMuUHlFcnJfV2FybkV4Ci0gIFB5RXJyX1dhcm5FeHBsaWNpdD1weXRob24zMy5QeUVycl9XYXJuRXhwbGljaXQKLSAgUHlFcnJfV2FybkZvcm1hdD1weXRob24zMy5QeUVycl9XYXJuRm9ybWF0Ci0gIFB5RXJyX1dyaXRlVW5yYWlzYWJsZT1weXRob24zMy5QeUVycl9Xcml0ZVVucmFpc2FibGUKLSAgUHlFdmFsX0FjcXVpcmVMb2NrPXB5dGhvbjMzLlB5RXZhbF9BY3F1aXJlTG9jawotICBQeUV2YWxfQWNxdWlyZVRocmVhZD1weXRob24zMy5QeUV2YWxfQWNxdWlyZVRocmVhZAotICBQeUV2YWxfQ2FsbEZ1bmN0aW9uPXB5dGhvbjMzLlB5RXZhbF9DYWxsRnVuY3Rpb24KLSAgUHlFdmFsX0NhbGxNZXRob2Q9cHl0aG9uMzMuUHlFdmFsX0NhbGxNZXRob2QKLSAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHM9cHl0aG9uMzMuUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKLSAgUHlFdmFsX0V2YWxDb2RlPXB5dGhvbjMzLlB5RXZhbF9FdmFsQ29kZQotICBQeUV2YWxfRXZhbENvZGVFeD1weXRob24zMy5QeUV2YWxfRXZhbENvZGVFeAotICBQeUV2YWxfRXZhbEZyYW1lPXB5dGhvbjMzLlB5RXZhbF9FdmFsRnJhbWUKLSAgUHlFdmFsX0V2YWxGcmFtZUV4PXB5dGhvbjMzLlB5RXZhbF9FdmFsRnJhbWVFeAotICBQeUV2YWxfR2V0QnVpbHRpbnM9cHl0aG9uMzMuUHlFdmFsX0dldEJ1aWx0aW5zCi0gIFB5RXZhbF9HZXRDYWxsU3RhdHM9cHl0aG9uMzMuUHlFdmFsX0dldENhbGxTdGF0cwotICBQeUV2YWxfR2V0RnJhbWU9cHl0aG9uMzMuUHlFdmFsX0dldEZyYW1lCi0gIFB5RXZhbF9HZXRGdW5jRGVzYz1weXRob24zMy5QeUV2YWxfR2V0RnVuY0Rlc2MKLSAgUHlFdmFsX0dldEZ1bmNOYW1lPXB5dGhvbjMzLlB5RXZhbF9HZXRGdW5jTmFtZQotICBQeUV2YWxfR2V0R2xvYmFscz1weXRob24zMy5QeUV2YWxfR2V0R2xvYmFscwotICBQeUV2YWxfR2V0TG9jYWxzPXB5dGhvbjMzLlB5RXZhbF9HZXRMb2NhbHMKLSAgUHlFdmFsX0luaXRUaHJlYWRzPXB5dGhvbjMzLlB5RXZhbF9Jbml0VGhyZWFkcwotICBQeUV2YWxfUmVJbml0VGhyZWFkcz1weXRob24zMy5QeUV2YWxfUmVJbml0VGhyZWFkcwotICBQeUV2YWxfUmVsZWFzZUxvY2s9cHl0aG9uMzMuUHlFdmFsX1JlbGVhc2VMb2NrCi0gIFB5RXZhbF9SZWxlYXNlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9SZWxlYXNlVGhyZWFkCi0gIFB5RXZhbF9SZXN0b3JlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9SZXN0b3JlVGhyZWFkCi0gIFB5RXZhbF9TYXZlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9TYXZlVGhyZWFkCi0gIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQ9cHl0aG9uMzMuUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZAotICBQeUV4Y19Bcml0aG1ldGljRXJyb3I9cHl0aG9uMzMuUHlFeGNfQXJpdGhtZXRpY0Vycm9yIERBVEEKLSAgUHlFeGNfQXNzZXJ0aW9uRXJyb3I9cHl0aG9uMzMuUHlFeGNfQXNzZXJ0aW9uRXJyb3IgREFUQQotICBQeUV4Y19BdHRyaWJ1dGVFcnJvcj1weXRob24zMy5QeUV4Y19BdHRyaWJ1dGVFcnJvciBEQVRBCi0gIFB5RXhjX0Jhc2VFeGNlcHRpb249cHl0aG9uMzMuUHlFeGNfQmFzZUV4Y2VwdGlvbiBEQVRBCi0gIFB5RXhjX0J1ZmZlckVycm9yPXB5dGhvbjMzLlB5RXhjX0J1ZmZlckVycm9yIERBVEEKLSAgUHlFeGNfQnl0ZXNXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0J5dGVzV2FybmluZyBEQVRBCi0gIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMy5QeUV4Y19EZXByZWNhdGlvbldhcm5pbmcgREFUQQotICBQeUV4Y19FT0ZFcnJvcj1weXRob24zMy5QeUV4Y19FT0ZFcnJvciBEQVRBCi0gIFB5RXhjX0Vudmlyb25tZW50RXJyb3I9cHl0aG9uMzMuUHlFeGNfRW52aXJvbm1lbnRFcnJvciBEQVRBCi0gIFB5RXhjX0V4Y2VwdGlvbj1weXRob24zMy5QeUV4Y19FeGNlcHRpb24gREFUQQotICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3I9cHl0aG9uMzMuUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIERBVEEKLSAgUHlFeGNfRnV0dXJlV2FybmluZz1weXRob24zMy5QeUV4Y19GdXR1cmVXYXJuaW5nIERBVEEKLSAgUHlFeGNfR2VuZXJhdG9yRXhpdD1weXRob24zMy5QeUV4Y19HZW5lcmF0b3JFeGl0IERBVEEKLSAgUHlFeGNfSU9FcnJvcj1weXRob24zMy5QeUV4Y19JT0Vycm9yIERBVEEKLSAgUHlFeGNfSW1wb3J0RXJyb3I9cHl0aG9uMzMuUHlFeGNfSW1wb3J0RXJyb3IgREFUQQotICBQeUV4Y19JbXBvcnRXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0ltcG9ydFdhcm5pbmcgREFUQQotICBQeUV4Y19JbmRlbnRhdGlvbkVycm9yPXB5dGhvbjMzLlB5RXhjX0luZGVudGF0aW9uRXJyb3IgREFUQQotICBQeUV4Y19JbmRleEVycm9yPXB5dGhvbjMzLlB5RXhjX0luZGV4RXJyb3IgREFUQQotICBQeUV4Y19LZXlFcnJvcj1weXRob24zMy5QeUV4Y19LZXlFcnJvciBEQVRBCi0gIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0PXB5dGhvbjMzLlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IERBVEEKLSAgUHlFeGNfTG9va3VwRXJyb3I9cHl0aG9uMzMuUHlFeGNfTG9va3VwRXJyb3IgREFUQQotICBQeUV4Y19NZW1vcnlFcnJvcj1weXRob24zMy5QeUV4Y19NZW1vcnlFcnJvciBEQVRBCi0gIFB5RXhjX01lbW9yeUVycm9ySW5zdD1weXRob24zMy5QeUV4Y19NZW1vcnlFcnJvckluc3QgREFUQQotICBQeUV4Y19OYW1lRXJyb3I9cHl0aG9uMzMuUHlFeGNfTmFtZUVycm9yIERBVEEKLSAgUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcj1weXRob24zMy5QeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIERBVEEKLSAgUHlFeGNfT1NFcnJvcj1weXRob24zMy5QeUV4Y19PU0Vycm9yIERBVEEKLSAgUHlFeGNfT3ZlcmZsb3dFcnJvcj1weXRob24zMy5QeUV4Y19PdmVyZmxvd0Vycm9yIERBVEEKLSAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMy5QeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKLSAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0PXB5dGhvbjMzLlB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCBEQVRBCi0gIFB5RXhjX1JlZmVyZW5jZUVycm9yPXB5dGhvbjMzLlB5RXhjX1JlZmVyZW5jZUVycm9yIERBVEEKLSAgUHlFeGNfUnVudGltZUVycm9yPXB5dGhvbjMzLlB5RXhjX1J1bnRpbWVFcnJvciBEQVRBCi0gIFB5RXhjX1J1bnRpbWVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1J1bnRpbWVXYXJuaW5nIERBVEEKLSAgUHlFeGNfU3RvcEl0ZXJhdGlvbj1weXRob24zMy5QeUV4Y19TdG9wSXRlcmF0aW9uIERBVEEKLSAgUHlFeGNfU3ludGF4RXJyb3I9cHl0aG9uMzMuUHlFeGNfU3ludGF4RXJyb3IgREFUQQotICBQeUV4Y19TeW50YXhXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1N5bnRheFdhcm5pbmcgREFUQQotICBQeUV4Y19TeXN0ZW1FcnJvcj1weXRob24zMy5QeUV4Y19TeXN0ZW1FcnJvciBEQVRBCi0gIFB5RXhjX1N5c3RlbUV4aXQ9cHl0aG9uMzMuUHlFeGNfU3lzdGVtRXhpdCBEQVRBCi0gIFB5RXhjX1RhYkVycm9yPXB5dGhvbjMzLlB5RXhjX1RhYkVycm9yIERBVEEKLSAgUHlFeGNfVHlwZUVycm9yPXB5dGhvbjMzLlB5RXhjX1R5cGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yPXB5dGhvbjMzLlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZURlY29kZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcj1weXRob24zMy5QeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVXYXJuaW5nIERBVEEKLSAgUHlFeGNfVXNlcldhcm5pbmc9cHl0aG9uMzMuUHlFeGNfVXNlcldhcm5pbmcgREFUQQotICBQeUV4Y19WYWx1ZUVycm9yPXB5dGhvbjMzLlB5RXhjX1ZhbHVlRXJyb3IgREFUQQotICBQeUV4Y19XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1dhcm5pbmcgREFUQQotICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcj1weXRob24zMy5QeUV4Y19aZXJvRGl2aXNpb25FcnJvciBEQVRBCi0gIFB5RXhjZXB0aW9uX0dldENhdXNlPXB5dGhvbjMzLlB5RXhjZXB0aW9uX0dldENhdXNlCi0gIFB5RXhjZXB0aW9uX0dldENvbnRleHQ9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0Q29udGV4dAotICBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2s9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCi0gIFB5RXhjZXB0aW9uX1NldENhdXNlPXB5dGhvbjMzLlB5RXhjZXB0aW9uX1NldENhdXNlCi0gIFB5RXhjZXB0aW9uX1NldENvbnRleHQ9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0Q29udGV4dAotICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2s9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCi0gIFB5RmlsZV9Gcm9tRmQ9cHl0aG9uMzMuUHlGaWxlX0Zyb21GZAotICBQeUZpbGVfR2V0TGluZT1weXRob24zMy5QeUZpbGVfR2V0TGluZQotICBQeUZpbGVfV3JpdGVPYmplY3Q9cHl0aG9uMzMuUHlGaWxlX1dyaXRlT2JqZWN0Ci0gIFB5RmlsZV9Xcml0ZVN0cmluZz1weXRob24zMy5QeUZpbGVfV3JpdGVTdHJpbmcKLSAgUHlGaWx0ZXJfVHlwZT1weXRob24zMy5QeUZpbHRlcl9UeXBlIERBVEEKLSAgUHlGbG9hdF9Bc0RvdWJsZT1weXRob24zMy5QeUZsb2F0X0FzRG91YmxlCi0gIFB5RmxvYXRfRnJvbURvdWJsZT1weXRob24zMy5QeUZsb2F0X0Zyb21Eb3VibGUKLSAgUHlGbG9hdF9Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5RmxvYXRfRnJvbVN0cmluZwotICBQeUZsb2F0X0dldEluZm89cHl0aG9uMzMuUHlGbG9hdF9HZXRJbmZvCi0gIFB5RmxvYXRfR2V0TWF4PXB5dGhvbjMzLlB5RmxvYXRfR2V0TWF4Ci0gIFB5RmxvYXRfR2V0TWluPXB5dGhvbjMzLlB5RmxvYXRfR2V0TWluCi0gIFB5RmxvYXRfVHlwZT1weXRob24zMy5QeUZsb2F0X1R5cGUgREFUQQotICBQeUZyb3plblNldF9OZXc9cHl0aG9uMzMuUHlGcm96ZW5TZXRfTmV3Ci0gIFB5RnJvemVuU2V0X1R5cGU9cHl0aG9uMzMuUHlGcm96ZW5TZXRfVHlwZSBEQVRBCi0gIFB5R0NfQ29sbGVjdD1weXRob24zMy5QeUdDX0NvbGxlY3QKLSAgUHlHSUxTdGF0ZV9FbnN1cmU9cHl0aG9uMzMuUHlHSUxTdGF0ZV9FbnN1cmUKLSAgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGU9cHl0aG9uMzMuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUKLSAgUHlHSUxTdGF0ZV9SZWxlYXNlPXB5dGhvbjMzLlB5R0lMU3RhdGVfUmVsZWFzZQotICBQeUdldFNldERlc2NyX1R5cGU9cHl0aG9uMzMuUHlHZXRTZXREZXNjcl9UeXBlIERBVEEKLSAgUHlJbXBvcnRfQWRkTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0FkZE1vZHVsZQotICBQeUltcG9ydF9BcHBlbmRJbml0dGFiPXB5dGhvbjMzLlB5SW1wb3J0X0FwcGVuZEluaXR0YWIKLSAgUHlJbXBvcnRfQ2xlYW51cD1weXRob24zMy5QeUltcG9ydF9DbGVhbnVwCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAotICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXM9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCi0gIFB5SW1wb3J0X0dldEltcG9ydGVyPXB5dGhvbjMzLlB5SW1wb3J0X0dldEltcG9ydGVyCi0gIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyPXB5dGhvbjMzLlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCi0gIFB5SW1wb3J0X0dldE1hZ2ljVGFnPXB5dGhvbjMzLlB5SW1wb3J0X0dldE1hZ2ljVGFnCi0gIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TW9kdWxlRGljdAotICBQeUltcG9ydF9JbXBvcnQ9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0Ci0gIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZT1weXRob24zMy5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKLSAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZQotICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbD1weXRob24zMy5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAotICBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKLSAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X1JlbG9hZE1vZHVsZQotICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXI9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQotICBQeUludGVycHJldGVyU3RhdGVfTmV3PXB5dGhvbjMzLlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKLSAgUHlJdGVyX05leHQ9cHl0aG9uMzMuUHlJdGVyX05leHQKLSAgUHlMaXN0SXRlcl9UeXBlPXB5dGhvbjMzLlB5TGlzdEl0ZXJfVHlwZSBEQVRBCi0gIFB5TGlzdFJldkl0ZXJfVHlwZT1weXRob24zMy5QeUxpc3RSZXZJdGVyX1R5cGUgREFUQQotICBQeUxpc3RfQXBwZW5kPXB5dGhvbjMzLlB5TGlzdF9BcHBlbmQKLSAgUHlMaXN0X0FzVHVwbGU9cHl0aG9uMzMuUHlMaXN0X0FzVHVwbGUKLSAgUHlMaXN0X0dldEl0ZW09cHl0aG9uMzMuUHlMaXN0X0dldEl0ZW0KLSAgUHlMaXN0X0dldFNsaWNlPXB5dGhvbjMzLlB5TGlzdF9HZXRTbGljZQotICBQeUxpc3RfSW5zZXJ0PXB5dGhvbjMzLlB5TGlzdF9JbnNlcnQKLSAgUHlMaXN0X05ldz1weXRob24zMy5QeUxpc3RfTmV3Ci0gIFB5TGlzdF9SZXZlcnNlPXB5dGhvbjMzLlB5TGlzdF9SZXZlcnNlCi0gIFB5TGlzdF9TZXRJdGVtPXB5dGhvbjMzLlB5TGlzdF9TZXRJdGVtCi0gIFB5TGlzdF9TZXRTbGljZT1weXRob24zMy5QeUxpc3RfU2V0U2xpY2UKLSAgUHlMaXN0X1NpemU9cHl0aG9uMzMuUHlMaXN0X1NpemUKLSAgUHlMaXN0X1NvcnQ9cHl0aG9uMzMuUHlMaXN0X1NvcnQKLSAgUHlMaXN0X1R5cGU9cHl0aG9uMzMuUHlMaXN0X1R5cGUgREFUQQotICBQeUxvbmdSYW5nZUl0ZXJfVHlwZT1weXRob24zMy5QeUxvbmdSYW5nZUl0ZXJfVHlwZSBEQVRBCi0gIFB5TG9uZ19Bc0RvdWJsZT1weXRob24zMy5QeUxvbmdfQXNEb3VibGUKLSAgUHlMb25nX0FzTG9uZz1weXRob24zMy5QeUxvbmdfQXNMb25nCi0gIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdz1weXRob24zMy5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKLSAgUHlMb25nX0FzTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0FzTG9uZ0xvbmcKLSAgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdz1weXRob24zMy5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93Ci0gIFB5TG9uZ19Bc1NpemVfdD1weXRob24zMy5QeUxvbmdfQXNTaXplX3QKLSAgUHlMb25nX0FzU3NpemVfdD1weXRob24zMy5QeUxvbmdfQXNTc2l6ZV90Ci0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmcKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCi0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCi0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2s9cHl0aG9uMzMuUHlMb25nX0FzVW5zaWduZWRMb25nTWFzawotICBQeUxvbmdfQXNWb2lkUHRyPXB5dGhvbjMzLlB5TG9uZ19Bc1ZvaWRQdHIKLSAgUHlMb25nX0Zyb21Eb3VibGU9cHl0aG9uMzMuUHlMb25nX0Zyb21Eb3VibGUKLSAgUHlMb25nX0Zyb21Mb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tTG9uZwotICBQeUxvbmdfRnJvbUxvbmdMb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tTG9uZ0xvbmcKLSAgUHlMb25nX0Zyb21TaXplX3Q9cHl0aG9uMzMuUHlMb25nX0Zyb21TaXplX3QKLSAgUHlMb25nX0Zyb21Tc2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Gcm9tU3NpemVfdAotICBQeUxvbmdfRnJvbVN0cmluZz1weXRob24zMy5QeUxvbmdfRnJvbVN0cmluZwotICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZz1weXRob24zMy5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZwotICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCi0gIFB5TG9uZ19Gcm9tVm9pZFB0cj1weXRob24zMy5QeUxvbmdfRnJvbVZvaWRQdHIKLSAgUHlMb25nX0dldEluZm89cHl0aG9uMzMuUHlMb25nX0dldEluZm8KLSAgUHlMb25nX1R5cGU9cHl0aG9uMzMuUHlMb25nX1R5cGUgREFUQQotICBQeU1hcF9UeXBlPXB5dGhvbjMzLlB5TWFwX1R5cGUgREFUQQotICBQeU1hcHBpbmdfQ2hlY2s9cHl0aG9uMzMuUHlNYXBwaW5nX0NoZWNrCi0gIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCi0gIFB5TWFwcGluZ19IYXNLZXk9cHl0aG9uMzMuUHlNYXBwaW5nX0hhc0tleQotICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nPXB5dGhvbjMzLlB5TWFwcGluZ19IYXNLZXlTdHJpbmcKLSAgUHlNYXBwaW5nX0l0ZW1zPXB5dGhvbjMzLlB5TWFwcGluZ19JdGVtcwotICBQeU1hcHBpbmdfS2V5cz1weXRob24zMy5QeU1hcHBpbmdfS2V5cwotICBQeU1hcHBpbmdfTGVuZ3RoPXB5dGhvbjMzLlB5TWFwcGluZ19MZW5ndGgKLSAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKLSAgUHlNYXBwaW5nX1NpemU9cHl0aG9uMzMuUHlNYXBwaW5nX1NpemUKLSAgUHlNYXBwaW5nX1ZhbHVlcz1weXRob24zMy5QeU1hcHBpbmdfVmFsdWVzCi0gIFB5TWVtX0ZyZWU9cHl0aG9uMzMuUHlNZW1fRnJlZQotICBQeU1lbV9NYWxsb2M9cHl0aG9uMzMuUHlNZW1fTWFsbG9jCi0gIFB5TWVtX1JlYWxsb2M9cHl0aG9uMzMuUHlNZW1fUmVhbGxvYwotICBQeU1lbWJlckRlc2NyX1R5cGU9cHl0aG9uMzMuUHlNZW1iZXJEZXNjcl9UeXBlIERBVEEKLSAgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Q9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKLSAgUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXM9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXMKLSAgUHlNZW1vcnlWaWV3X1R5cGU9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X1R5cGUgREFUQQotICBQeU1ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzMuUHlNZXRob2REZXNjcl9UeXBlIERBVEEKLSAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQ9cHl0aG9uMzMuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKLSAgUHlNb2R1bGVfQWRkT2JqZWN0PXB5dGhvbjMzLlB5TW9kdWxlX0FkZE9iamVjdAotICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudD1weXRob24zMy5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAotICBQeU1vZHVsZV9DcmVhdGUyPXB5dGhvbjMzLlB5TW9kdWxlX0NyZWF0ZTIKLSAgUHlNb2R1bGVfR2V0RGVmPXB5dGhvbjMzLlB5TW9kdWxlX0dldERlZgotICBQeU1vZHVsZV9HZXREaWN0PXB5dGhvbjMzLlB5TW9kdWxlX0dldERpY3QKLSAgUHlNb2R1bGVfR2V0RmlsZW5hbWU9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RmlsZW5hbWUKLSAgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3Q9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKLSAgUHlNb2R1bGVfR2V0TmFtZT1weXRob24zMy5QeU1vZHVsZV9HZXROYW1lCi0gIFB5TW9kdWxlX0dldFN0YXRlPXB5dGhvbjMzLlB5TW9kdWxlX0dldFN0YXRlCi0gIFB5TW9kdWxlX05ldz1weXRob24zMy5QeU1vZHVsZV9OZXcKLSAgUHlNb2R1bGVfVHlwZT1weXRob24zMy5QeU1vZHVsZV9UeXBlIERBVEEKLSAgUHlOdWxsSW1wb3J0ZXJfVHlwZT1weXRob24zMy5QeU51bGxJbXBvcnRlcl9UeXBlIERBVEEKLSAgUHlOdW1iZXJfQWJzb2x1dGU9cHl0aG9uMzMuUHlOdW1iZXJfQWJzb2x1dGUKLSAgUHlOdW1iZXJfQWRkPXB5dGhvbjMzLlB5TnVtYmVyX0FkZAotICBQeU51bWJlcl9BbmQ9cHl0aG9uMzMuUHlOdW1iZXJfQW5kCi0gIFB5TnVtYmVyX0FzU3NpemVfdD1weXRob24zMy5QeU51bWJlcl9Bc1NzaXplX3QKLSAgUHlOdW1iZXJfQ2hlY2s9cHl0aG9uMzMuUHlOdW1iZXJfQ2hlY2sKLSAgUHlOdW1iZXJfRGl2bW9kPXB5dGhvbjMzLlB5TnVtYmVyX0Rpdm1vZAotICBQeU51bWJlcl9GbG9hdD1weXRob24zMy5QeU51bWJlcl9GbG9hdAotICBQeU51bWJlcl9GbG9vckRpdmlkZT1weXRob24zMy5QeU51bWJlcl9GbG9vckRpdmlkZQotICBQeU51bWJlcl9JblBsYWNlQWRkPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VBZGQKLSAgUHlOdW1iZXJfSW5QbGFjZUFuZD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlQW5kCi0gIFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUKLSAgUHlOdW1iZXJfSW5QbGFjZUxzaGlmdD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlTHNoaWZ0Ci0gIFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlTXVsdGlwbHkKLSAgUHlOdW1iZXJfSW5QbGFjZU9yPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VPcgotICBQeU51bWJlcl9JblBsYWNlUG93ZXI9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVBvd2VyCi0gIFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXI9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcgotICBQeU51bWJlcl9JblBsYWNlUnNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VSc2hpZnQKLSAgUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdAotICBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZQotICBQeU51bWJlcl9JblBsYWNlWG9yPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VYb3IKLSAgUHlOdW1iZXJfSW5kZXg9cHl0aG9uMzMuUHlOdW1iZXJfSW5kZXgKLSAgUHlOdW1iZXJfSW52ZXJ0PXB5dGhvbjMzLlB5TnVtYmVyX0ludmVydAotICBQeU51bWJlcl9Mb25nPXB5dGhvbjMzLlB5TnVtYmVyX0xvbmcKLSAgUHlOdW1iZXJfTHNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0xzaGlmdAotICBQeU51bWJlcl9NdWx0aXBseT1weXRob24zMy5QeU51bWJlcl9NdWx0aXBseQotICBQeU51bWJlcl9OZWdhdGl2ZT1weXRob24zMy5QeU51bWJlcl9OZWdhdGl2ZQotICBQeU51bWJlcl9Pcj1weXRob24zMy5QeU51bWJlcl9PcgotICBQeU51bWJlcl9Qb3NpdGl2ZT1weXRob24zMy5QeU51bWJlcl9Qb3NpdGl2ZQotICBQeU51bWJlcl9Qb3dlcj1weXRob24zMy5QeU51bWJlcl9Qb3dlcgotICBQeU51bWJlcl9SZW1haW5kZXI9cHl0aG9uMzMuUHlOdW1iZXJfUmVtYWluZGVyCi0gIFB5TnVtYmVyX1JzaGlmdD1weXRob24zMy5QeU51bWJlcl9Sc2hpZnQKLSAgUHlOdW1iZXJfU3VidHJhY3Q9cHl0aG9uMzMuUHlOdW1iZXJfU3VidHJhY3QKLSAgUHlOdW1iZXJfVG9CYXNlPXB5dGhvbjMzLlB5TnVtYmVyX1RvQmFzZQotICBQeU51bWJlcl9UcnVlRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX1RydWVEaXZpZGUKLSAgUHlOdW1iZXJfWG9yPXB5dGhvbjMzLlB5TnVtYmVyX1hvcgotICBQeU9TX0FmdGVyRm9yaz1weXRob24zMy5QeU9TX0FmdGVyRm9yawotICBQeU9TX0luaXRJbnRlcnJ1cHRzPXB5dGhvbjMzLlB5T1NfSW5pdEludGVycnVwdHMKLSAgUHlPU19JbnB1dEhvb2s9cHl0aG9uMzMuUHlPU19JbnB1dEhvb2sgREFUQQotICBQeU9TX0ludGVycnVwdE9jY3VycmVkPXB5dGhvbjMzLlB5T1NfSW50ZXJydXB0T2NjdXJyZWQKLSAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcj1weXRob24zMy5QeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIERBVEEKLSAgUHlPU19kb3VibGVfdG9fc3RyaW5nPXB5dGhvbjMzLlB5T1NfZG91YmxlX3RvX3N0cmluZwotICBQeU9TX2dldHNpZz1weXRob24zMy5QeU9TX2dldHNpZwotICBQeU9TX215c3RyaWNtcD1weXRob24zMy5QeU9TX215c3RyaWNtcAotICBQeU9TX215c3RybmljbXA9cHl0aG9uMzMuUHlPU19teXN0cm5pY21wCi0gIFB5T1Nfc2V0c2lnPXB5dGhvbjMzLlB5T1Nfc2V0c2lnCi0gIFB5T1Nfc25wcmludGY9cHl0aG9uMzMuUHlPU19zbnByaW50ZgotICBQeU9TX3N0cmluZ190b19kb3VibGU9cHl0aG9uMzMuUHlPU19zdHJpbmdfdG9fZG91YmxlCi0gIFB5T1Nfc3RydG9sPXB5dGhvbjMzLlB5T1Nfc3RydG9sCi0gIFB5T1Nfc3RydG91bD1weXRob24zMy5QeU9TX3N0cnRvdWwKLSAgUHlPU192c25wcmludGY9cHl0aG9uMzMuUHlPU192c25wcmludGYKLSAgUHlPYmplY3RfQVNDSUk9cHl0aG9uMzMuUHlPYmplY3RfQVNDSUkKLSAgUHlPYmplY3RfQXNDaGFyQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzQ2hhckJ1ZmZlcgotICBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yPXB5dGhvbjMzLlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IKLSAgUHlPYmplY3RfQXNSZWFkQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzUmVhZEJ1ZmZlcgotICBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIKLSAgUHlPYmplY3RfQnl0ZXM9cHl0aG9uMzMuUHlPYmplY3RfQnl0ZXMKLSAgUHlPYmplY3RfQ2FsbD1weXRob24zMy5QeU9iamVjdF9DYWxsCi0gIFB5T2JqZWN0X0NhbGxGdW5jdGlvbj1weXRob24zMy5QeU9iamVjdF9DYWxsRnVuY3Rpb24KLSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncz1weXRob24zMy5QeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzCi0gIFB5T2JqZWN0X0NhbGxNZXRob2Q9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbE1ldGhvZAotICBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncz1weXRob24zMy5QeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncwotICBQeU9iamVjdF9DYWxsT2JqZWN0PXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxPYmplY3QKLSAgUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcgotICBQeU9iamVjdF9DbGVhcldlYWtSZWZzPXB5dGhvbjMzLlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMKLSAgUHlPYmplY3RfRGVsSXRlbT1weXRob24zMy5QeU9iamVjdF9EZWxJdGVtCi0gIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlPYmplY3RfRGVsSXRlbVN0cmluZwotICBQeU9iamVjdF9EaXI9cHl0aG9uMzMuUHlPYmplY3RfRGlyCi0gIFB5T2JqZWN0X0Zvcm1hdD1weXRob24zMy5QeU9iamVjdF9Gb3JtYXQKLSAgUHlPYmplY3RfRnJlZT1weXRob24zMy5QeU9iamVjdF9GcmVlCi0gIFB5T2JqZWN0X0dDX0RlbD1weXRob24zMy5QeU9iamVjdF9HQ19EZWwKLSAgUHlPYmplY3RfR0NfVHJhY2s9cHl0aG9uMzMuUHlPYmplY3RfR0NfVHJhY2sKLSAgUHlPYmplY3RfR0NfVW5UcmFjaz1weXRob24zMy5QeU9iamVjdF9HQ19VblRyYWNrCi0gIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyCi0gIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyCi0gIFB5T2JqZWN0X0dldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2V0QXR0cgotICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X0dldEF0dHJTdHJpbmcKLSAgUHlPYmplY3RfR2V0SXRlbT1weXRob24zMy5QeU9iamVjdF9HZXRJdGVtCi0gIFB5T2JqZWN0X0dldEl0ZXI9cHl0aG9uMzMuUHlPYmplY3RfR2V0SXRlcgotICBQeU9iamVjdF9IYXNBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0hhc0F0dHIKLSAgUHlPYmplY3RfSGFzQXR0clN0cmluZz1weXRob24zMy5QeU9iamVjdF9IYXNBdHRyU3RyaW5nCi0gIFB5T2JqZWN0X0hhc2g9cHl0aG9uMzMuUHlPYmplY3RfSGFzaAotICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQ9cHl0aG9uMzMuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkCi0gIFB5T2JqZWN0X0luaXQ9cHl0aG9uMzMuUHlPYmplY3RfSW5pdAotICBQeU9iamVjdF9Jbml0VmFyPXB5dGhvbjMzLlB5T2JqZWN0X0luaXRWYXIKLSAgUHlPYmplY3RfSXNJbnN0YW5jZT1weXRob24zMy5QeU9iamVjdF9Jc0luc3RhbmNlCi0gIFB5T2JqZWN0X0lzU3ViY2xhc3M9cHl0aG9uMzMuUHlPYmplY3RfSXNTdWJjbGFzcwotICBQeU9iamVjdF9Jc1RydWU9cHl0aG9uMzMuUHlPYmplY3RfSXNUcnVlCi0gIFB5T2JqZWN0X0xlbmd0aD1weXRob24zMy5QeU9iamVjdF9MZW5ndGgKLSAgUHlPYmplY3RfTWFsbG9jPXB5dGhvbjMzLlB5T2JqZWN0X01hbGxvYwotICBQeU9iamVjdF9Ob3Q9cHl0aG9uMzMuUHlPYmplY3RfTm90Ci0gIFB5T2JqZWN0X1JlYWxsb2M9cHl0aG9uMzMuUHlPYmplY3RfUmVhbGxvYwotICBQeU9iamVjdF9SZXByPXB5dGhvbjMzLlB5T2JqZWN0X1JlcHIKLSAgUHlPYmplY3RfUmljaENvbXBhcmU9cHl0aG9uMzMuUHlPYmplY3RfUmljaENvbXBhcmUKLSAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sPXB5dGhvbjMzLlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbAotICBQeU9iamVjdF9TZWxmSXRlcj1weXRob24zMy5QeU9iamVjdF9TZWxmSXRlcgotICBQeU9iamVjdF9TZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X1NldEF0dHIKLSAgUHlPYmplY3RfU2V0QXR0clN0cmluZz1weXRob24zMy5QeU9iamVjdF9TZXRBdHRyU3RyaW5nCi0gIFB5T2JqZWN0X1NldEl0ZW09cHl0aG9uMzMuUHlPYmplY3RfU2V0SXRlbQotICBQeU9iamVjdF9TaXplPXB5dGhvbjMzLlB5T2JqZWN0X1NpemUKLSAgUHlPYmplY3RfU3RyPXB5dGhvbjMzLlB5T2JqZWN0X1N0cgotICBQeU9iamVjdF9UeXBlPXB5dGhvbjMzLlB5T2JqZWN0X1R5cGUgREFUQQotICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncz1weXRob24zMy5QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncwotICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzPXB5dGhvbjMzLlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MKLSAgUHlQcm9wZXJ0eV9UeXBlPXB5dGhvbjMzLlB5UHJvcGVydHlfVHlwZSBEQVRBCi0gIFB5UmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzMuUHlSYW5nZUl0ZXJfVHlwZSBEQVRBCi0gIFB5UmFuZ2VfVHlwZT1weXRob24zMy5QeVJhbmdlX1R5cGUgREFUQQotICBQeVJldmVyc2VkX1R5cGU9cHl0aG9uMzMuUHlSZXZlcnNlZF9UeXBlIERBVEEKLSAgUHlTZXFJdGVyX05ldz1weXRob24zMy5QeVNlcUl0ZXJfTmV3Ci0gIFB5U2VxSXRlcl9UeXBlPXB5dGhvbjMzLlB5U2VxSXRlcl9UeXBlIERBVEEKLSAgUHlTZXF1ZW5jZV9DaGVjaz1weXRob24zMy5QeVNlcXVlbmNlX0NoZWNrCi0gIFB5U2VxdWVuY2VfQ29uY2F0PXB5dGhvbjMzLlB5U2VxdWVuY2VfQ29uY2F0Ci0gIFB5U2VxdWVuY2VfQ29udGFpbnM9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db250YWlucwotICBQeVNlcXVlbmNlX0NvdW50PXB5dGhvbjMzLlB5U2VxdWVuY2VfQ291bnQKLSAgUHlTZXF1ZW5jZV9EZWxJdGVtPXB5dGhvbjMzLlB5U2VxdWVuY2VfRGVsSXRlbQotICBQeVNlcXVlbmNlX0RlbFNsaWNlPXB5dGhvbjMzLlB5U2VxdWVuY2VfRGVsU2xpY2UKLSAgUHlTZXF1ZW5jZV9GYXN0PXB5dGhvbjMzLlB5U2VxdWVuY2VfRmFzdAotICBQeVNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzMuUHlTZXF1ZW5jZV9HZXRJdGVtCi0gIFB5U2VxdWVuY2VfR2V0U2xpY2U9cHl0aG9uMzMuUHlTZXF1ZW5jZV9HZXRTbGljZQotICBQeVNlcXVlbmNlX0luPXB5dGhvbjMzLlB5U2VxdWVuY2VfSW4KLSAgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0PXB5dGhvbjMzLlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAotICBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0Ci0gIFB5U2VxdWVuY2VfSW5kZXg9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JbmRleAotICBQeVNlcXVlbmNlX0xlbmd0aD1weXRob24zMy5QeVNlcXVlbmNlX0xlbmd0aAotICBQeVNlcXVlbmNlX0xpc3Q9cHl0aG9uMzMuUHlTZXF1ZW5jZV9MaXN0Ci0gIFB5U2VxdWVuY2VfUmVwZWF0PXB5dGhvbjMzLlB5U2VxdWVuY2VfUmVwZWF0Ci0gIFB5U2VxdWVuY2VfU2V0SXRlbT1weXRob24zMy5QeVNlcXVlbmNlX1NldEl0ZW0KLSAgUHlTZXF1ZW5jZV9TZXRTbGljZT1weXRob24zMy5QeVNlcXVlbmNlX1NldFNsaWNlCi0gIFB5U2VxdWVuY2VfU2l6ZT1weXRob24zMy5QeVNlcXVlbmNlX1NpemUKLSAgUHlTZXF1ZW5jZV9UdXBsZT1weXRob24zMy5QeVNlcXVlbmNlX1R1cGxlCi0gIFB5U2V0SXRlcl9UeXBlPXB5dGhvbjMzLlB5U2V0SXRlcl9UeXBlIERBVEEKLSAgUHlTZXRfQWRkPXB5dGhvbjMzLlB5U2V0X0FkZAotICBQeVNldF9DbGVhcj1weXRob24zMy5QeVNldF9DbGVhcgotICBQeVNldF9Db250YWlucz1weXRob24zMy5QeVNldF9Db250YWlucwotICBQeVNldF9EaXNjYXJkPXB5dGhvbjMzLlB5U2V0X0Rpc2NhcmQKLSAgUHlTZXRfTmV3PXB5dGhvbjMzLlB5U2V0X05ldwotICBQeVNldF9Qb3A9cHl0aG9uMzMuUHlTZXRfUG9wCi0gIFB5U2V0X1NpemU9cHl0aG9uMzMuUHlTZXRfU2l6ZQotICBQeVNldF9UeXBlPXB5dGhvbjMzLlB5U2V0X1R5cGUgREFUQQotICBQeVNsaWNlX0dldEluZGljZXM9cHl0aG9uMzMuUHlTbGljZV9HZXRJbmRpY2VzCi0gIFB5U2xpY2VfR2V0SW5kaWNlc0V4PXB5dGhvbjMzLlB5U2xpY2VfR2V0SW5kaWNlc0V4Ci0gIFB5U2xpY2VfTmV3PXB5dGhvbjMzLlB5U2xpY2VfTmV3Ci0gIFB5U2xpY2VfVHlwZT1weXRob24zMy5QeVNsaWNlX1R5cGUgREFUQQotICBQeVNvcnRXcmFwcGVyX1R5cGU9cHl0aG9uMzMuUHlTb3J0V3JhcHBlcl9UeXBlIERBVEEKLSAgUHlTdGF0ZV9GaW5kTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfRmluZE1vZHVsZQotICBQeVN0YXRlX0FkZE1vZHVsZT1weXRob24zMy5QeVN0YXRlX0FkZE1vZHVsZQotICBQeVN0YXRlX1JlbW92ZU1vZHVsZT1weXRob24zMy5QeVN0YXRlX1JlbW92ZU1vZHVsZQotICBQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtCi0gIFB5U3RydWN0U2VxdWVuY2VfTmV3PXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfTmV3Ci0gIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZT1weXRob24zMy5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQotICBQeVN1cGVyX1R5cGU9cHl0aG9uMzMuUHlTdXBlcl9UeXBlIERBVEEKLSAgUHlTeXNfQWRkV2Fybk9wdGlvbj1weXRob24zMy5QeVN5c19BZGRXYXJuT3B0aW9uCi0gIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlPXB5dGhvbjMzLlB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlCi0gIFB5U3lzX0Zvcm1hdFN0ZGVycj1weXRob24zMy5QeVN5c19Gb3JtYXRTdGRlcnIKLSAgUHlTeXNfRm9ybWF0U3Rkb3V0PXB5dGhvbjMzLlB5U3lzX0Zvcm1hdFN0ZG91dAotICBQeVN5c19HZXRPYmplY3Q9cHl0aG9uMzMuUHlTeXNfR2V0T2JqZWN0Ci0gIFB5U3lzX0hhc1dhcm5PcHRpb25zPXB5dGhvbjMzLlB5U3lzX0hhc1dhcm5PcHRpb25zCi0gIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnM9cHl0aG9uMzMuUHlTeXNfUmVzZXRXYXJuT3B0aW9ucwotICBQeVN5c19TZXRBcmd2PXB5dGhvbjMzLlB5U3lzX1NldEFyZ3YKLSAgUHlTeXNfU2V0QXJndkV4PXB5dGhvbjMzLlB5U3lzX1NldEFyZ3ZFeAotICBQeVN5c19TZXRPYmplY3Q9cHl0aG9uMzMuUHlTeXNfU2V0T2JqZWN0Ci0gIFB5U3lzX1NldFBhdGg9cHl0aG9uMzMuUHlTeXNfU2V0UGF0aAotICBQeVN5c19Xcml0ZVN0ZGVycj1weXRob24zMy5QeVN5c19Xcml0ZVN0ZGVycgotICBQeVN5c19Xcml0ZVN0ZG91dD1weXRob24zMy5QeVN5c19Xcml0ZVN0ZG91dAotICBQeVRocmVhZFN0YXRlX0NsZWFyPXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfQ2xlYXIKLSAgUHlUaHJlYWRTdGF0ZV9EZWxldGU9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9EZWxldGUKLSAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudAotICBQeVRocmVhZFN0YXRlX0dldD1weXRob24zMy5QeVRocmVhZFN0YXRlX0dldAotICBQeVRocmVhZFN0YXRlX0dldERpY3Q9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9HZXREaWN0Ci0gIFB5VGhyZWFkU3RhdGVfTmV3PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfTmV3Ci0gIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGM9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YwotICBQeVRocmVhZFN0YXRlX1N3YXA9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9Td2FwCi0gIFB5VHJhY2VCYWNrX0hlcmU9cHl0aG9uMzMuUHlUcmFjZUJhY2tfSGVyZQotICBQeVRyYWNlQmFja19QcmludD1weXRob24zMy5QeVRyYWNlQmFja19QcmludAotICBQeVRyYWNlQmFja19UeXBlPXB5dGhvbjMzLlB5VHJhY2VCYWNrX1R5cGUgREFUQQotICBQeVR1cGxlSXRlcl9UeXBlPXB5dGhvbjMzLlB5VHVwbGVJdGVyX1R5cGUgREFUQQotICBQeVR1cGxlX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzMuUHlUdXBsZV9DbGVhckZyZWVMaXN0Ci0gIFB5VHVwbGVfR2V0SXRlbT1weXRob24zMy5QeVR1cGxlX0dldEl0ZW0KLSAgUHlUdXBsZV9HZXRTbGljZT1weXRob24zMy5QeVR1cGxlX0dldFNsaWNlCi0gIFB5VHVwbGVfTmV3PXB5dGhvbjMzLlB5VHVwbGVfTmV3Ci0gIFB5VHVwbGVfUGFjaz1weXRob24zMy5QeVR1cGxlX1BhY2sKLSAgUHlUdXBsZV9TZXRJdGVtPXB5dGhvbjMzLlB5VHVwbGVfU2V0SXRlbQotICBQeVR1cGxlX1NpemU9cHl0aG9uMzMuUHlUdXBsZV9TaXplCi0gIFB5VHVwbGVfVHlwZT1weXRob24zMy5QeVR1cGxlX1R5cGUgREFUQQotICBQeVR5cGVfQ2xlYXJDYWNoZT1weXRob24zMy5QeVR5cGVfQ2xlYXJDYWNoZQotICBQeVR5cGVfRnJvbVNwZWM9cHl0aG9uMzMuUHlUeXBlX0Zyb21TcGVjCi0gIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcz1weXRob24zMy5QeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMKLSAgUHlUeXBlX0dlbmVyaWNBbGxvYz1weXRob24zMy5QeVR5cGVfR2VuZXJpY0FsbG9jCi0gIFB5VHlwZV9HZW5lcmljTmV3PXB5dGhvbjMzLlB5VHlwZV9HZW5lcmljTmV3Ci0gIFB5VHlwZV9HZXRGbGFncz1weXRob24zMy5QeVR5cGVfR2V0RmxhZ3MKLSAgUHlUeXBlX0lzU3VidHlwZT1weXRob24zMy5QeVR5cGVfSXNTdWJ0eXBlCi0gIFB5VHlwZV9Nb2RpZmllZD1weXRob24zMy5QeVR5cGVfTW9kaWZpZWQKLSAgUHlUeXBlX1JlYWR5PXB5dGhvbjMzLlB5VHlwZV9SZWFkeQotICBQeVR5cGVfVHlwZT1weXRob24zMy5QeVR5cGVfVHlwZSBEQVRBCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZT1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbgotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAotICBQeVVuaWNvZGVJdGVyX1R5cGU9cHl0aG9uMzMuUHlVbmljb2RlSXRlcl9UeXBlIERBVEEKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZV9BcHBlbmQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9BcHBlbmQKLSAgUHlVbmljb2RlX0FwcGVuZEFuZERlbD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FwcGVuZEFuZERlbAotICBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzQVNDSUlTdHJpbmcKLSAgUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzQ2hhcm1hcFN0cmluZwotICBQeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNEZWNvZGVkT2JqZWN0Ci0gIFB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNEZWNvZGVkVW5pY29kZQotICBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkT2JqZWN0Ci0gIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRTdHJpbmcKLSAgUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRVbmljb2RlCi0gIFB5VW5pY29kZV9Bc0xhdGluMVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzTGF0aW4xU3RyaW5nCi0gIFB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGMTZTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1VURjE2U3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjMyU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNVVEYzMlN0cmluZwotICBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNVVEY4U3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcKLSAgUHlVbmljb2RlX0FzV2lkZUNoYXI9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc1dpZGVDaGFyCi0gIFB5VW5pY29kZV9DbGVhckZyZWVsaXN0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQ2xlYXJGcmVlbGlzdAotICBQeVVuaWNvZGVfQ29tcGFyZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0NvbXBhcmUKLSAgUHlVbmljb2RlX0NvbmNhdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0NvbmNhdAotICBQeVVuaWNvZGVfQ29udGFpbnM9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Db250YWlucwotICBQeVVuaWNvZGVfQ291bnQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Db3VudAotICBQeVVuaWNvZGVfRGVjb2RlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlCi0gIFB5VW5pY29kZV9EZWNvZGVBU0NJST1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZUFTQ0lJCi0gIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlQ2hhcm1hcAotICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlRlNEZWZhdWx0Ci0gIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZQotICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlTGF0aW4xCi0gIFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlUmF3VW5pY29kZUVzY2FwZQotICBQeVVuaWNvZGVfRGVjb2RlVVRGMTY9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNgotICBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2U3RhdGVmdWwKLSAgUHlVbmljb2RlX0RlY29kZVVURjMyPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMzIKLSAgUHlVbmljb2RlX0RlY29kZVVURjMyU3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYzMlN0YXRlZnVsCi0gIFB5VW5pY29kZV9EZWNvZGVVVEY4PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOAotICBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOFN0YXRlZnVsCi0gIFB5VW5pY29kZV9EZWNvZGVVbmljb2RlRXNjYXBlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVW5pY29kZUVzY2FwZQotICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXI9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9GU0NvbnZlcnRlcgotICBQeVVuaWNvZGVfRlNEZWNvZGVyPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRlNEZWNvZGVyCi0gIFB5VW5pY29kZV9GaW5kPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRmluZAotICBQeVVuaWNvZGVfRm9ybWF0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRm9ybWF0Ci0gIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21FbmNvZGVkT2JqZWN0Ci0gIFB5VW5pY29kZV9Gcm9tRm9ybWF0PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbUZvcm1hdAotICBQeVVuaWNvZGVfRnJvbUZvcm1hdFY9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tRm9ybWF0VgotICBQeVVuaWNvZGVfRnJvbU9iamVjdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21PYmplY3QKLSAgUHlVbmljb2RlX0Zyb21PcmRpbmFsPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbU9yZGluYWwKLSAgUHlVbmljb2RlX0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tU3RyaW5nCi0gIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21TdHJpbmdBbmRTaXplCi0gIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXI9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tV2lkZUNoYXIKLSAgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0dldERlZmF1bHRFbmNvZGluZwotICBQeVVuaWNvZGVfR2V0U2l6ZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0dldFNpemUKLSAgUHlVbmljb2RlX0lzSWRlbnRpZmllcj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0lzSWRlbnRpZmllcgotICBQeVVuaWNvZGVfSm9pbj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0pvaW4KLSAgUHlVbmljb2RlX1BhcnRpdGlvbj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1BhcnRpdGlvbgotICBQeVVuaWNvZGVfUlBhcnRpdGlvbj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1JQYXJ0aXRpb24KLSAgUHlVbmljb2RlX1JTcGxpdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1JTcGxpdAotICBQeVVuaWNvZGVfUmVwbGFjZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1JlcGxhY2UKLSAgUHlVbmljb2RlX1Jlc2l6ZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1Jlc2l6ZQotICBQeVVuaWNvZGVfUmljaENvbXBhcmU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9SaWNoQ29tcGFyZQotICBQeVVuaWNvZGVfU2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfU2V0RGVmYXVsdEVuY29kaW5nCi0gIFB5VW5pY29kZV9TcGxpdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1NwbGl0Ci0gIFB5VW5pY29kZV9TcGxpdGxpbmVzPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfU3BsaXRsaW5lcwotICBQeVVuaWNvZGVfVGFpbG1hdGNoPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfVGFpbG1hdGNoCi0gIFB5VW5pY29kZV9UcmFuc2xhdGU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9UcmFuc2xhdGUKLSAgUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXA9cHl0aG9uMzMuUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAKLSAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcKLSAgUHlVbmljb2RlX0RlY29kZVVURjc9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjcKLSAgUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsCi0gIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQ9cHl0aG9uMzMuUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdAotICBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZwotICBQeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWw9cHl0aG9uMzMuUHlVbmljb2RlX0ludGVybkltbW9ydGFsCi0gIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlPXB5dGhvbjMzLlB5VW5pY29kZV9JbnRlcm5JblBsYWNlCi0gIFB5VW5pY29kZV9UeXBlPXB5dGhvbjMzLlB5VW5pY29kZV9UeXBlIERBVEEKLSAgUHlXZWFrcmVmX0dldE9iamVjdD1weXRob24zMy5QeVdlYWtyZWZfR2V0T2JqZWN0IERBVEEKLSAgUHlXZWFrcmVmX05ld1Byb3h5PXB5dGhvbjMzLlB5V2Vha3JlZl9OZXdQcm94eQotICBQeVdlYWtyZWZfTmV3UmVmPXB5dGhvbjMzLlB5V2Vha3JlZl9OZXdSZWYKLSAgUHlXcmFwcGVyRGVzY3JfVHlwZT1weXRob24zMy5QeVdyYXBwZXJEZXNjcl9UeXBlIERBVEEKLSAgUHlXcmFwcGVyX05ldz1weXRob24zMy5QeVdyYXBwZXJfTmV3Ci0gIFB5WmlwX1R5cGU9cHl0aG9uMzMuUHlaaXBfVHlwZSBEQVRBCi0gIFB5X0FkZFBlbmRpbmdDYWxsPXB5dGhvbjMzLlB5X0FkZFBlbmRpbmdDYWxsCi0gIFB5X0F0RXhpdD1weXRob24zMy5QeV9BdEV4aXQKLSAgUHlfQnVpbGRWYWx1ZT1weXRob24zMy5QeV9CdWlsZFZhbHVlCi0gIFB5X0NvbXBpbGVTdHJpbmc9cHl0aG9uMzMuUHlfQ29tcGlsZVN0cmluZwotICBQeV9EZWNSZWY9cHl0aG9uMzMuUHlfRGVjUmVmCi0gIFB5X0VuZEludGVycHJldGVyPXB5dGhvbjMzLlB5X0VuZEludGVycHJldGVyCi0gIFB5X0V4aXQ9cHl0aG9uMzMuUHlfRXhpdAotICBQeV9GYXRhbEVycm9yPXB5dGhvbjMzLlB5X0ZhdGFsRXJyb3IKLSAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfRmluYWxpemU9cHl0aG9uMzMuUHlfRmluYWxpemUKLSAgUHlfR2V0QnVpbGRJbmZvPXB5dGhvbjMzLlB5X0dldEJ1aWxkSW5mbwotICBQeV9HZXRDb21waWxlcj1weXRob24zMy5QeV9HZXRDb21waWxlcgotICBQeV9HZXRDb3B5cmlnaHQ9cHl0aG9uMzMuUHlfR2V0Q29weXJpZ2h0Ci0gIFB5X0dldEV4ZWNQcmVmaXg9cHl0aG9uMzMuUHlfR2V0RXhlY1ByZWZpeAotICBQeV9HZXRQYXRoPXB5dGhvbjMzLlB5X0dldFBhdGgKLSAgUHlfR2V0UGxhdGZvcm09cHl0aG9uMzMuUHlfR2V0UGxhdGZvcm0KLSAgUHlfR2V0UHJlZml4PXB5dGhvbjMzLlB5X0dldFByZWZpeAotICBQeV9HZXRQcm9ncmFtRnVsbFBhdGg9cHl0aG9uMzMuUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCi0gIFB5X0dldFByb2dyYW1OYW1lPXB5dGhvbjMzLlB5X0dldFByb2dyYW1OYW1lCi0gIFB5X0dldFB5dGhvbkhvbWU9cHl0aG9uMzMuUHlfR2V0UHl0aG9uSG9tZQotICBQeV9HZXRSZWN1cnNpb25MaW1pdD1weXRob24zMy5QeV9HZXRSZWN1cnNpb25MaW1pdAotICBQeV9HZXRWZXJzaW9uPXB5dGhvbjMzLlB5X0dldFZlcnNpb24KLSAgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfSW5jUmVmPXB5dGhvbjMzLlB5X0luY1JlZgotICBQeV9Jbml0aWFsaXplPXB5dGhvbjMzLlB5X0luaXRpYWxpemUKLSAgUHlfSW5pdGlhbGl6ZUV4PXB5dGhvbjMzLlB5X0luaXRpYWxpemVFeAotICBQeV9Jc0luaXRpYWxpemVkPXB5dGhvbjMzLlB5X0lzSW5pdGlhbGl6ZWQKLSAgUHlfTWFpbj1weXRob24zMy5QeV9NYWluCi0gIFB5X01ha2VQZW5kaW5nQ2FsbHM9cHl0aG9uMzMuUHlfTWFrZVBlbmRpbmdDYWxscwotICBQeV9OZXdJbnRlcnByZXRlcj1weXRob24zMy5QeV9OZXdJbnRlcnByZXRlcgotICBQeV9SZXByRW50ZXI9cHl0aG9uMzMuUHlfUmVwckVudGVyCi0gIFB5X1JlcHJMZWF2ZT1weXRob24zMy5QeV9SZXByTGVhdmUKLSAgUHlfU2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzMuUHlfU2V0UHJvZ3JhbU5hbWUKLSAgUHlfU2V0UHl0aG9uSG9tZT1weXRob24zMy5QeV9TZXRQeXRob25Ib21lCi0gIFB5X1NldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjMzLlB5X1NldFJlY3Vyc2lvbkxpbWl0Ci0gIFB5X1N5bXRhYmxlU3RyaW5nPXB5dGhvbjMzLlB5X1N5bXRhYmxlU3RyaW5nCi0gIFB5X1ZhQnVpbGRWYWx1ZT1weXRob24zMy5QeV9WYUJ1aWxkVmFsdWUKLSAgX1B5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zMy5fUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQ9cHl0aG9uMzMuX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVAotICBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVD1weXRob24zMy5fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVAotICBfUHlPYmplY3RfR0NfTWFsbG9jPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19NYWxsb2MKLSAgX1B5T2JqZWN0X0dDX05ldz1weXRob24zMy5fUHlPYmplY3RfR0NfTmV3Ci0gIF9QeU9iamVjdF9HQ19OZXdWYXI9cHl0aG9uMzMuX1B5T2JqZWN0X0dDX05ld1ZhcgotICBfUHlPYmplY3RfR0NfUmVzaXplPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19SZXNpemUKLSAgX1B5T2JqZWN0X05ldz1weXRob24zMy5fUHlPYmplY3RfTmV3Ci0gIF9QeU9iamVjdF9OZXdWYXI9cHl0aG9uMzMuX1B5T2JqZWN0X05ld1ZhcgotICBfUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzMuX1B5U3RhdGVfQWRkTW9kdWxlCi0gIF9QeVRocmVhZFN0YXRlX0luaXQ9cHl0aG9uMzMuX1B5VGhyZWFkU3RhdGVfSW5pdAotICBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYz1weXRob24zMy5fUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYwotICBfUHlUcmFzaF9kZWxldGVfbGF0ZXI9cHl0aG9uMzMuX1B5VHJhc2hfZGVsZXRlX2xhdGVyIERBVEEKLSAgX1B5VHJhc2hfZGVsZXRlX25lc3Rpbmc9cHl0aG9uMzMuX1B5VHJhc2hfZGVsZXRlX25lc3RpbmcgREFUQQotICBfUHlUcmFzaF9kZXBvc2l0X29iamVjdD1weXRob24zMy5fUHlUcmFzaF9kZXBvc2l0X29iamVjdAotICBfUHlUcmFzaF9kZXN0cm95X2NoYWluPXB5dGhvbjMzLl9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4KLSAgX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZT1weXRob24zMy5fUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIERBVEEKLSAgX1B5V2Vha3JlZl9Qcm94eVR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9Qcm94eVR5cGUgREFUQQotICBfUHlXZWFrcmVmX1JlZlR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9SZWZUeXBlIERBVEEKLSAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzMuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKLSAgX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQ9cHl0aG9uMzMuX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgREFUQQotICBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsPXB5dGhvbjMzLl9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwKLSAgX1B5X0RlYWxsb2M9cHl0aG9uMzMuX1B5X0RlYWxsb2MKLSAgX1B5X0VsbGlwc2lzT2JqZWN0PXB5dGhvbjMzLl9QeV9FbGxpcHNpc09iamVjdCBEQVRBCi0gIF9QeV9GYWxzZVN0cnVjdD1weXRob24zMy5fUHlfRmFsc2VTdHJ1Y3QgREFUQQotICBfUHlfTm9uZVN0cnVjdD1weXRob24zMy5fUHlfTm9uZVN0cnVjdCBEQVRBCi0gIF9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdD1weXRob24zMy5fUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QgREFUQQotICBfUHlfU3dhcHBlZE9wPXB5dGhvbjMzLl9QeV9Td2FwcGVkT3AgREFUQQotICBfUHlfVHJ1ZVN0cnVjdD1weXRob24zMy5fUHlfVHJ1ZVN0cnVjdCBEQVRBCi0gIF9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzMuX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAotICBfUHlBcmdfUGFyc2VfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1BhcnNlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZVR1cGxlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotICBfUHlBcmdfVmFQYXJzZV9TaXplVD1weXRob24zMy5fUHlBcmdfVmFQYXJzZV9TaXplVAotICBfUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCi0gIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9CdWlsZFZhbHVlX1NpemVUCisgIFB5QXJnX1BhcnNlPXB5dGhvbjM0LlB5QXJnX1BhcnNlCisgIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZQorICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCisgIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjM0LlB5QXJnX1VucGFja1R1cGxlCisgIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzQuUHlBcmdfVmFQYXJzZQorICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zNC5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcworICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzQuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCisgIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjM0LlB5QmFzZU9iamVjdF9UeXBlIERBVEEKKyAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjM0LlB5Qm9vbF9Gcm9tTG9uZworICBQeUJvb2xfVHlwZT1weXRob24zNC5QeUJvb2xfVHlwZSBEQVRBCisgIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjM0LlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzQuUHlCeXRlQXJyYXlfQXNTdHJpbmcKKyAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0NvbmNhdAorICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKKyAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1Jlc2l6ZQorICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1NpemUKKyAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zNC5QeUJ5dGVBcnJheV9UeXBlIERBVEEKKyAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zNC5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zNC5QeUJ5dGVzX0FzU3RyaW5nCisgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCisgIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0CisgIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCisgIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjM0LlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCisgIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXQKKyAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXRWCisgIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zNC5QeUJ5dGVzX0Zyb21PYmplY3QKKyAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZworICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlc19SZXByPXB5dGhvbjM0LlB5Qnl0ZXNfUmVwcgorICBQeUJ5dGVzX1NpemU9cHl0aG9uMzQuUHlCeXRlc19TaXplCisgIFB5Qnl0ZXNfVHlwZT1weXRob24zNC5QeUJ5dGVzX1R5cGUgREFUQQorICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0NhbGwKKyAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0CisgIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZsYWdzCisgIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCisgIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzQuUHlDRnVuY3Rpb25fR2V0U2VsZgorICBQeUNGdW5jdGlvbl9OZXc9cHl0aG9uMzQuUHlDRnVuY3Rpb25fTmV3CisgIFB5Q0Z1bmN0aW9uX05ld0V4PXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX05ld0V4CisgIFB5Q0Z1bmN0aW9uX1R5cGU9cHl0aG9uMzQuUHlDRnVuY3Rpb25fVHlwZSBEQVRBCisgIFB5Q2FsbEl0ZXJfTmV3PXB5dGhvbjM0LlB5Q2FsbEl0ZXJfTmV3CisgIFB5Q2FsbEl0ZXJfVHlwZT1weXRob24zNC5QeUNhbGxJdGVyX1R5cGUgREFUQQorICBQeUNhbGxhYmxlX0NoZWNrPXB5dGhvbjM0LlB5Q2FsbGFibGVfQ2hlY2sKKyAgUHlDYXBzdWxlX0dldENvbnRleHQ9cHl0aG9uMzQuUHlDYXBzdWxlX0dldENvbnRleHQKKyAgUHlDYXBzdWxlX0dldERlc3RydWN0b3I9cHl0aG9uMzQuUHlDYXBzdWxlX0dldERlc3RydWN0b3IKKyAgUHlDYXBzdWxlX0dldE5hbWU9cHl0aG9uMzQuUHlDYXBzdWxlX0dldE5hbWUKKyAgUHlDYXBzdWxlX0dldFBvaW50ZXI9cHl0aG9uMzQuUHlDYXBzdWxlX0dldFBvaW50ZXIKKyAgUHlDYXBzdWxlX0ltcG9ydD1weXRob24zNC5QeUNhcHN1bGVfSW1wb3J0CisgIFB5Q2Fwc3VsZV9Jc1ZhbGlkPXB5dGhvbjM0LlB5Q2Fwc3VsZV9Jc1ZhbGlkCisgIFB5Q2Fwc3VsZV9OZXc9cHl0aG9uMzQuUHlDYXBzdWxlX05ldworICBQeUNhcHN1bGVfU2V0Q29udGV4dD1weXRob24zNC5QeUNhcHN1bGVfU2V0Q29udGV4dAorICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcj1weXRob24zNC5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgorICBQeUNhcHN1bGVfU2V0TmFtZT1weXRob24zNC5QeUNhcHN1bGVfU2V0TmFtZQorICBQeUNhcHN1bGVfU2V0UG9pbnRlcj1weXRob24zNC5QeUNhcHN1bGVfU2V0UG9pbnRlcgorICBQeUNhcHN1bGVfVHlwZT1weXRob24zNC5QeUNhcHN1bGVfVHlwZSBEQVRBCisgIFB5Q2xhc3NNZXRob2REZXNjcl9UeXBlPXB5dGhvbjM0LlB5Q2xhc3NNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycworICBQeUNvZGVjX0RlY29kZT1weXRob24zNC5QeUNvZGVjX0RlY29kZQorICBQeUNvZGVjX0RlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19EZWNvZGVyCisgIFB5Q29kZWNfRW5jb2RlPXB5dGhvbjM0LlB5Q29kZWNfRW5jb2RlCisgIFB5Q29kZWNfRW5jb2Rlcj1weXRob24zNC5QeUNvZGVjX0VuY29kZXIKKyAgUHlDb2RlY19JZ25vcmVFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19JZ25vcmVFcnJvcnMKKyAgUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIKKyAgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKKyAgUHlDb2RlY19Lbm93bkVuY29kaW5nPXB5dGhvbjM0LlB5Q29kZWNfS25vd25FbmNvZGluZworICBQeUNvZGVjX0xvb2t1cEVycm9yPXB5dGhvbjM0LlB5Q29kZWNfTG9va3VwRXJyb3IKKyAgUHlDb2RlY19SZWdpc3Rlcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyCisgIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyRXJyb3IKKyAgUHlDb2RlY19SZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfUmVwbGFjZUVycm9ycworICBQeUNvZGVjX1N0cmVhbVJlYWRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVJlYWRlcgorICBQeUNvZGVjX1N0cmVhbVdyaXRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVdyaXRlcgorICBQeUNvZGVjX1N0cmljdEVycm9ycz1weXRob24zNC5QeUNvZGVjX1N0cmljdEVycm9ycworICBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKKyAgUHlDb21wbGV4X0Zyb21Eb3VibGVzPXB5dGhvbjM0LlB5Q29tcGxleF9Gcm9tRG91YmxlcworICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlPXB5dGhvbjM0LlB5Q29tcGxleF9JbWFnQXNEb3VibGUKKyAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZT1weXRob24zNC5QeUNvbXBsZXhfUmVhbEFzRG91YmxlCisgIFB5Q29tcGxleF9UeXBlPXB5dGhvbjM0LlB5Q29tcGxleF9UeXBlIERBVEEKKyAgUHlEZXNjcl9OZXdDbGFzc01ldGhvZD1weXRob24zNC5QeURlc2NyX05ld0NsYXNzTWV0aG9kCisgIFB5RGVzY3JfTmV3R2V0U2V0PXB5dGhvbjM0LlB5RGVzY3JfTmV3R2V0U2V0CisgIFB5RGVzY3JfTmV3TWVtYmVyPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWVtYmVyCisgIFB5RGVzY3JfTmV3TWV0aG9kPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWV0aG9kCisgIFB5RGljdEl0ZW1zX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlbXNfVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJJdGVtX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlckl0ZW1fVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJLZXlfVHlwZT1weXRob24zNC5QeURpY3RJdGVyS2V5X1R5cGUgREFUQQorICBQeURpY3RJdGVyVmFsdWVfVHlwZT1weXRob24zNC5QeURpY3RJdGVyVmFsdWVfVHlwZSBEQVRBCisgIFB5RGljdEtleXNfVHlwZT1weXRob24zNC5QeURpY3RLZXlzX1R5cGUgREFUQQorICBQeURpY3RQcm94eV9OZXc9cHl0aG9uMzQuUHlEaWN0UHJveHlfTmV3CisgIFB5RGljdFByb3h5X1R5cGU9cHl0aG9uMzQuUHlEaWN0UHJveHlfVHlwZSBEQVRBCisgIFB5RGljdFZhbHVlc19UeXBlPXB5dGhvbjM0LlB5RGljdFZhbHVlc19UeXBlIERBVEEKKyAgUHlEaWN0X0NsZWFyPXB5dGhvbjM0LlB5RGljdF9DbGVhcgorICBQeURpY3RfQ29udGFpbnM9cHl0aG9uMzQuUHlEaWN0X0NvbnRhaW5zCisgIFB5RGljdF9Db3B5PXB5dGhvbjM0LlB5RGljdF9Db3B5CisgIFB5RGljdF9EZWxJdGVtPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtCisgIFB5RGljdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtCisgIFB5RGljdF9HZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtV2l0aEVycm9yCisgIFB5RGljdF9JdGVtcz1weXRob24zNC5QeURpY3RfSXRlbXMKKyAgUHlEaWN0X0tleXM9cHl0aG9uMzQuUHlEaWN0X0tleXMKKyAgUHlEaWN0X01lcmdlPXB5dGhvbjM0LlB5RGljdF9NZXJnZQorICBQeURpY3RfTWVyZ2VGcm9tU2VxMj1weXRob24zNC5QeURpY3RfTWVyZ2VGcm9tU2VxMgorICBQeURpY3RfTmV3PXB5dGhvbjM0LlB5RGljdF9OZXcKKyAgUHlEaWN0X05leHQ9cHl0aG9uMzQuUHlEaWN0X05leHQKKyAgUHlEaWN0X1NldEl0ZW09cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW0KKyAgUHlEaWN0X1NldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW1TdHJpbmcKKyAgUHlEaWN0X1NpemU9cHl0aG9uMzQuUHlEaWN0X1NpemUKKyAgUHlEaWN0X1R5cGU9cHl0aG9uMzQuUHlEaWN0X1R5cGUgREFUQQorICBQeURpY3RfVXBkYXRlPXB5dGhvbjM0LlB5RGljdF9VcGRhdGUKKyAgUHlEaWN0X1ZhbHVlcz1weXRob24zNC5QeURpY3RfVmFsdWVzCisgIFB5RWxsaXBzaXNfVHlwZT1weXRob24zNC5QeUVsbGlwc2lzX1R5cGUgREFUQQorICBQeUVudW1fVHlwZT1weXRob24zNC5QeUVudW1fVHlwZSBEQVRBCisgIFB5RXJyX0JhZEFyZ3VtZW50PXB5dGhvbjM0LlB5RXJyX0JhZEFyZ3VtZW50CisgIFB5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNC5QeUVycl9CYWRJbnRlcm5hbENhbGwKKyAgUHlFcnJfQ2hlY2tTaWduYWxzPXB5dGhvbjM0LlB5RXJyX0NoZWNrU2lnbmFscworICBQeUVycl9DbGVhcj1weXRob24zNC5QeUVycl9DbGVhcgorICBQeUVycl9EaXNwbGF5PXB5dGhvbjM0LlB5RXJyX0Rpc3BsYXkKKyAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNC5QeUVycl9FeGNlcHRpb25NYXRjaGVzCisgIFB5RXJyX0ZldGNoPXB5dGhvbjM0LlB5RXJyX0ZldGNoCisgIFB5RXJyX0Zvcm1hdD1weXRob24zNC5QeUVycl9Gb3JtYXQKKyAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjM0LlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcworICBQeUVycl9OZXdFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uCisgIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M9cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYworICBQeUVycl9Ob01lbW9yeT1weXRob24zNC5QeUVycl9Ob01lbW9yeQorICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCisgIFB5RXJyX09jY3VycmVkPXB5dGhvbjM0LlB5RXJyX09jY3VycmVkCisgIFB5RXJyX1ByaW50PXB5dGhvbjM0LlB5RXJyX1ByaW50CisgIFB5RXJyX1ByaW50RXg9cHl0aG9uMzQuUHlFcnJfUHJpbnRFeAorICBQeUVycl9Qcm9ncmFtVGV4dD1weXRob24zNC5QeUVycl9Qcm9ncmFtVGV4dAorICBQeUVycl9SZXN0b3JlPXB5dGhvbjM0LlB5RXJyX1Jlc3RvcmUKKyAgUHlFcnJfU2V0RnJvbUVycm5vPXB5dGhvbjM0LlB5RXJyX1NldEZyb21FcnJubworICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWU9cHl0aG9uMzQuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCisgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QKKyAgUHlFcnJfU2V0SW50ZXJydXB0PXB5dGhvbjM0LlB5RXJyX1NldEludGVycnVwdAorICBQeUVycl9TZXROb25lPXB5dGhvbjM0LlB5RXJyX1NldE5vbmUKKyAgUHlFcnJfU2V0T2JqZWN0PXB5dGhvbjM0LlB5RXJyX1NldE9iamVjdAorICBQeUVycl9TZXRTdHJpbmc9cHl0aG9uMzQuUHlFcnJfU2V0U3RyaW5nCisgIFB5RXJyX1N5bnRheExvY2F0aW9uPXB5dGhvbjM0LlB5RXJyX1N5bnRheExvY2F0aW9uCisgIFB5RXJyX1dhcm5FeD1weXRob24zNC5QeUVycl9XYXJuRXgKKyAgUHlFcnJfV2FybkV4cGxpY2l0PXB5dGhvbjM0LlB5RXJyX1dhcm5FeHBsaWNpdAorICBQeUVycl9XYXJuRm9ybWF0PXB5dGhvbjM0LlB5RXJyX1dhcm5Gb3JtYXQKKyAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlPXB5dGhvbjM0LlB5RXJyX1dyaXRlVW5yYWlzYWJsZQorICBQeUV2YWxfQWNxdWlyZUxvY2s9cHl0aG9uMzQuUHlFdmFsX0FjcXVpcmVMb2NrCisgIFB5RXZhbF9BY3F1aXJlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9BY3F1aXJlVGhyZWFkCisgIFB5RXZhbF9DYWxsRnVuY3Rpb249cHl0aG9uMzQuUHlFdmFsX0NhbGxGdW5jdGlvbgorICBQeUV2YWxfQ2FsbE1ldGhvZD1weXRob24zNC5QeUV2YWxfQ2FsbE1ldGhvZAorICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3Jkcz1weXRob24zNC5QeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcworICBQeUV2YWxfRXZhbENvZGU9cHl0aG9uMzQuUHlFdmFsX0V2YWxDb2RlCisgIFB5RXZhbF9FdmFsQ29kZUV4PXB5dGhvbjM0LlB5RXZhbF9FdmFsQ29kZUV4CisgIFB5RXZhbF9FdmFsRnJhbWU9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZQorICBQeUV2YWxfRXZhbEZyYW1lRXg9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZUV4CisgIFB5RXZhbF9HZXRCdWlsdGlucz1weXRob24zNC5QeUV2YWxfR2V0QnVpbHRpbnMKKyAgUHlFdmFsX0dldENhbGxTdGF0cz1weXRob24zNC5QeUV2YWxfR2V0Q2FsbFN0YXRzCisgIFB5RXZhbF9HZXRGcmFtZT1weXRob24zNC5QeUV2YWxfR2V0RnJhbWUKKyAgUHlFdmFsX0dldEZ1bmNEZXNjPXB5dGhvbjM0LlB5RXZhbF9HZXRGdW5jRGVzYworICBQeUV2YWxfR2V0RnVuY05hbWU9cHl0aG9uMzQuUHlFdmFsX0dldEZ1bmNOYW1lCisgIFB5RXZhbF9HZXRHbG9iYWxzPXB5dGhvbjM0LlB5RXZhbF9HZXRHbG9iYWxzCisgIFB5RXZhbF9HZXRMb2NhbHM9cHl0aG9uMzQuUHlFdmFsX0dldExvY2FscworICBQeUV2YWxfSW5pdFRocmVhZHM9cHl0aG9uMzQuUHlFdmFsX0luaXRUaHJlYWRzCisgIFB5RXZhbF9SZUluaXRUaHJlYWRzPXB5dGhvbjM0LlB5RXZhbF9SZUluaXRUaHJlYWRzCisgIFB5RXZhbF9SZWxlYXNlTG9jaz1weXRob24zNC5QeUV2YWxfUmVsZWFzZUxvY2sKKyAgUHlFdmFsX1JlbGVhc2VUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1JlbGVhc2VUaHJlYWQKKyAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1Jlc3RvcmVUaHJlYWQKKyAgUHlFdmFsX1NhdmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1NhdmVUaHJlYWQKKyAgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZD1weXRob24zNC5QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkCisgIFB5RXhjX0FyaXRobWV0aWNFcnJvcj1weXRob24zNC5QeUV4Y19Bcml0aG1ldGljRXJyb3IgREFUQQorICBQeUV4Y19Bc3NlcnRpb25FcnJvcj1weXRob24zNC5QeUV4Y19Bc3NlcnRpb25FcnJvciBEQVRBCisgIFB5RXhjX0F0dHJpYnV0ZUVycm9yPXB5dGhvbjM0LlB5RXhjX0F0dHJpYnV0ZUVycm9yIERBVEEKKyAgUHlFeGNfQmFzZUV4Y2VwdGlvbj1weXRob24zNC5QeUV4Y19CYXNlRXhjZXB0aW9uIERBVEEKKyAgUHlFeGNfQnVmZmVyRXJyb3I9cHl0aG9uMzQuUHlFeGNfQnVmZmVyRXJyb3IgREFUQQorICBQeUV4Y19CeXRlc1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfQnl0ZXNXYXJuaW5nIERBVEEKKyAgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCisgIFB5RXhjX0VPRkVycm9yPXB5dGhvbjM0LlB5RXhjX0VPRkVycm9yIERBVEEKKyAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcj1weXRob24zNC5QeUV4Y19FbnZpcm9ubWVudEVycm9yIERBVEEKKyAgUHlFeGNfRXhjZXB0aW9uPXB5dGhvbjM0LlB5RXhjX0V4Y2VwdGlvbiBEQVRBCisgIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcj1weXRob24zNC5QeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IgREFUQQorICBQeUV4Y19GdXR1cmVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0Z1dHVyZVdhcm5pbmcgREFUQQorICBQeUV4Y19HZW5lcmF0b3JFeGl0PXB5dGhvbjM0LlB5RXhjX0dlbmVyYXRvckV4aXQgREFUQQorICBQeUV4Y19JT0Vycm9yPXB5dGhvbjM0LlB5RXhjX0lPRXJyb3IgREFUQQorICBQeUV4Y19JbXBvcnRFcnJvcj1weXRob24zNC5QeUV4Y19JbXBvcnRFcnJvciBEQVRBCisgIFB5RXhjX0ltcG9ydFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfSW1wb3J0V2FybmluZyBEQVRBCisgIFB5RXhjX0luZGVudGF0aW9uRXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZW50YXRpb25FcnJvciBEQVRBCisgIFB5RXhjX0luZGV4RXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZXhFcnJvciBEQVRBCisgIFB5RXhjX0tleUVycm9yPXB5dGhvbjM0LlB5RXhjX0tleUVycm9yIERBVEEKKyAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQ9cHl0aG9uMzQuUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgREFUQQorICBQeUV4Y19Mb29rdXBFcnJvcj1weXRob24zNC5QeUV4Y19Mb29rdXBFcnJvciBEQVRBCisgIFB5RXhjX01lbW9yeUVycm9yPXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9yIERBVEEKKyAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0PXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9ySW5zdCBEQVRBCisgIFB5RXhjX05hbWVFcnJvcj1weXRob24zNC5QeUV4Y19OYW1lRXJyb3IgREFUQQorICBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yPXB5dGhvbjM0LlB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IgREFUQQorICBQeUV4Y19PU0Vycm9yPXB5dGhvbjM0LlB5RXhjX09TRXJyb3IgREFUQQorICBQeUV4Y19PdmVyZmxvd0Vycm9yPXB5dGhvbjM0LlB5RXhjX092ZXJmbG93RXJyb3IgREFUQQorICBQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgREFUQQorICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3Q9cHl0aG9uMzQuUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0IERBVEEKKyAgUHlFeGNfUmVmZXJlbmNlRXJyb3I9cHl0aG9uMzQuUHlFeGNfUmVmZXJlbmNlRXJyb3IgREFUQQorICBQeUV4Y19SdW50aW1lRXJyb3I9cHl0aG9uMzQuUHlFeGNfUnVudGltZUVycm9yIERBVEEKKyAgUHlFeGNfUnVudGltZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfUnVudGltZVdhcm5pbmcgREFUQQorICBQeUV4Y19TdG9wSXRlcmF0aW9uPXB5dGhvbjM0LlB5RXhjX1N0b3BJdGVyYXRpb24gREFUQQorICBQeUV4Y19TeW50YXhFcnJvcj1weXRob24zNC5QeUV4Y19TeW50YXhFcnJvciBEQVRBCisgIFB5RXhjX1N5bnRheFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfU3ludGF4V2FybmluZyBEQVRBCisgIFB5RXhjX1N5c3RlbUVycm9yPXB5dGhvbjM0LlB5RXhjX1N5c3RlbUVycm9yIERBVEEKKyAgUHlFeGNfU3lzdGVtRXhpdD1weXRob24zNC5QeUV4Y19TeXN0ZW1FeGl0IERBVEEKKyAgUHlFeGNfVGFiRXJyb3I9cHl0aG9uMzQuUHlFeGNfVGFiRXJyb3IgREFUQQorICBQeUV4Y19UeXBlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVHlwZUVycm9yIERBVEEKKyAgUHlFeGNfVW5ib3VuZExvY2FsRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZURlY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVdhcm5pbmcgREFUQQorICBQeUV4Y19Vc2VyV2FybmluZz1weXRob24zNC5QeUV4Y19Vc2VyV2FybmluZyBEQVRBCisgIFB5RXhjX1ZhbHVlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVmFsdWVFcnJvciBEQVRBCisgIFB5RXhjX1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfV2FybmluZyBEQVRBCisgIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yPXB5dGhvbjM0LlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIERBVEEKKyAgUHlFeGNlcHRpb25fR2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0Q2F1c2UKKyAgUHlFeGNlcHRpb25fR2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRDb250ZXh0CisgIFB5RXhjZXB0aW9uX0dldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2sKKyAgUHlFeGNlcHRpb25fU2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0Q2F1c2UKKyAgUHlFeGNlcHRpb25fU2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRDb250ZXh0CisgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sKKyAgUHlGaWxlX0Zyb21GZD1weXRob24zNC5QeUZpbGVfRnJvbUZkCisgIFB5RmlsZV9HZXRMaW5lPXB5dGhvbjM0LlB5RmlsZV9HZXRMaW5lCisgIFB5RmlsZV9Xcml0ZU9iamVjdD1weXRob24zNC5QeUZpbGVfV3JpdGVPYmplY3QKKyAgUHlGaWxlX1dyaXRlU3RyaW5nPXB5dGhvbjM0LlB5RmlsZV9Xcml0ZVN0cmluZworICBQeUZpbHRlcl9UeXBlPXB5dGhvbjM0LlB5RmlsdGVyX1R5cGUgREFUQQorICBQeUZsb2F0X0FzRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfQXNEb3VibGUKKyAgUHlGbG9hdF9Gcm9tRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfRnJvbURvdWJsZQorICBQeUZsb2F0X0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlGbG9hdF9Gcm9tU3RyaW5nCisgIFB5RmxvYXRfR2V0SW5mbz1weXRob24zNC5QeUZsb2F0X0dldEluZm8KKyAgUHlGbG9hdF9HZXRNYXg9cHl0aG9uMzQuUHlGbG9hdF9HZXRNYXgKKyAgUHlGbG9hdF9HZXRNaW49cHl0aG9uMzQuUHlGbG9hdF9HZXRNaW4KKyAgUHlGbG9hdF9UeXBlPXB5dGhvbjM0LlB5RmxvYXRfVHlwZSBEQVRBCisgIFB5RnJvemVuU2V0X05ldz1weXRob24zNC5QeUZyb3plblNldF9OZXcKKyAgUHlGcm96ZW5TZXRfVHlwZT1weXRob24zNC5QeUZyb3plblNldF9UeXBlIERBVEEKKyAgUHlHQ19Db2xsZWN0PXB5dGhvbjM0LlB5R0NfQ29sbGVjdAorICBQeUdJTFN0YXRlX0Vuc3VyZT1weXRob24zNC5QeUdJTFN0YXRlX0Vuc3VyZQorICBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZT1weXRob24zNC5QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZQorICBQeUdJTFN0YXRlX1JlbGVhc2U9cHl0aG9uMzQuUHlHSUxTdGF0ZV9SZWxlYXNlCisgIFB5R2V0U2V0RGVzY3JfVHlwZT1weXRob24zNC5QeUdldFNldERlc2NyX1R5cGUgREFUQQorICBQeUltcG9ydF9BZGRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfQWRkTW9kdWxlCisgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWI9cHl0aG9uMzQuUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgorICBQeUltcG9ydF9DbGVhbnVwPXB5dGhvbjM0LlB5SW1wb3J0X0NsZWFudXAKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeD1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4CisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcz1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMKKyAgUHlJbXBvcnRfR2V0SW1wb3J0ZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0SW1wb3J0ZXIKKyAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKKyAgUHlJbXBvcnRfR2V0TWFnaWNUYWc9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNUYWcKKyAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdD1weXRob24zNC5QeUltcG9ydF9HZXRNb2R1bGVEaWN0CisgIFB5SW1wb3J0X0ltcG9ydD1weXRob24zNC5QeUltcG9ydF9JbXBvcnQKKyAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQorICBQeUltcG9ydF9JbXBvcnRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlCisgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsCisgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2s9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaworICBQeUltcG9ydF9SZWxvYWRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfUmVsb2FkTW9kdWxlCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcj1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfQ2xlYXIKKyAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZT1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfRGVsZXRlCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXc9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX05ldworICBQeUl0ZXJfTmV4dD1weXRob24zNC5QeUl0ZXJfTmV4dAorICBQeUxpc3RJdGVyX1R5cGU9cHl0aG9uMzQuUHlMaXN0SXRlcl9UeXBlIERBVEEKKyAgUHlMaXN0UmV2SXRlcl9UeXBlPXB5dGhvbjM0LlB5TGlzdFJldkl0ZXJfVHlwZSBEQVRBCisgIFB5TGlzdF9BcHBlbmQ9cHl0aG9uMzQuUHlMaXN0X0FwcGVuZAorICBQeUxpc3RfQXNUdXBsZT1weXRob24zNC5QeUxpc3RfQXNUdXBsZQorICBQeUxpc3RfR2V0SXRlbT1weXRob24zNC5QeUxpc3RfR2V0SXRlbQorICBQeUxpc3RfR2V0U2xpY2U9cHl0aG9uMzQuUHlMaXN0X0dldFNsaWNlCisgIFB5TGlzdF9JbnNlcnQ9cHl0aG9uMzQuUHlMaXN0X0luc2VydAorICBQeUxpc3RfTmV3PXB5dGhvbjM0LlB5TGlzdF9OZXcKKyAgUHlMaXN0X1JldmVyc2U9cHl0aG9uMzQuUHlMaXN0X1JldmVyc2UKKyAgUHlMaXN0X1NldEl0ZW09cHl0aG9uMzQuUHlMaXN0X1NldEl0ZW0KKyAgUHlMaXN0X1NldFNsaWNlPXB5dGhvbjM0LlB5TGlzdF9TZXRTbGljZQorICBQeUxpc3RfU2l6ZT1weXRob24zNC5QeUxpc3RfU2l6ZQorICBQeUxpc3RfU29ydD1weXRob24zNC5QeUxpc3RfU29ydAorICBQeUxpc3RfVHlwZT1weXRob24zNC5QeUxpc3RfVHlwZSBEQVRBCisgIFB5TG9uZ1JhbmdlSXRlcl9UeXBlPXB5dGhvbjM0LlB5TG9uZ1JhbmdlSXRlcl9UeXBlIERBVEEKKyAgUHlMb25nX0FzRG91YmxlPXB5dGhvbjM0LlB5TG9uZ19Bc0RvdWJsZQorICBQeUxvbmdfQXNMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmcKKyAgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdworICBQeUxvbmdfQXNMb25nTG9uZz1weXRob24zNC5QeUxvbmdfQXNMb25nTG9uZworICBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cKKyAgUHlMb25nX0FzU2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NpemVfdAorICBQeUxvbmdfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NzaXplX3QKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZworICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2s9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrCisgIFB5TG9uZ19Bc1ZvaWRQdHI9cHl0aG9uMzQuUHlMb25nX0FzVm9pZFB0cgorICBQeUxvbmdfRnJvbURvdWJsZT1weXRob24zNC5QeUxvbmdfRnJvbURvdWJsZQorICBQeUxvbmdfRnJvbUxvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nCisgIFB5TG9uZ19Gcm9tTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nTG9uZworICBQeUxvbmdfRnJvbVNpemVfdD1weXRob24zNC5QeUxvbmdfRnJvbVNpemVfdAorICBQeUxvbmdfRnJvbVNzaXplX3Q9cHl0aG9uMzQuUHlMb25nX0Zyb21Tc2l6ZV90CisgIFB5TG9uZ19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tU3RyaW5nCisgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCisgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKKyAgUHlMb25nX0Zyb21Wb2lkUHRyPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVm9pZFB0cgorICBQeUxvbmdfR2V0SW5mbz1weXRob24zNC5QeUxvbmdfR2V0SW5mbworICBQeUxvbmdfVHlwZT1weXRob24zNC5QeUxvbmdfVHlwZSBEQVRBCisgIFB5TWFwX1R5cGU9cHl0aG9uMzQuUHlNYXBfVHlwZSBEQVRBCisgIFB5TWFwcGluZ19DaGVjaz1weXRob24zNC5QeU1hcHBpbmdfQ2hlY2sKKyAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKKyAgUHlNYXBwaW5nX0hhc0tleT1weXRob24zNC5QeU1hcHBpbmdfSGFzS2V5CisgIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0hhc0tleVN0cmluZworICBQeU1hcHBpbmdfSXRlbXM9cHl0aG9uMzQuUHlNYXBwaW5nX0l0ZW1zCisgIFB5TWFwcGluZ19LZXlzPXB5dGhvbjM0LlB5TWFwcGluZ19LZXlzCisgIFB5TWFwcGluZ19MZW5ndGg9cHl0aG9uMzQuUHlNYXBwaW5nX0xlbmd0aAorICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZz1weXRob24zNC5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZworICBQeU1hcHBpbmdfU2l6ZT1weXRob24zNC5QeU1hcHBpbmdfU2l6ZQorICBQeU1hcHBpbmdfVmFsdWVzPXB5dGhvbjM0LlB5TWFwcGluZ19WYWx1ZXMKKyAgUHlNZW1fRnJlZT1weXRob24zNC5QeU1lbV9GcmVlCisgIFB5TWVtX01hbGxvYz1weXRob24zNC5QeU1lbV9NYWxsb2MKKyAgUHlNZW1fUmVhbGxvYz1weXRob24zNC5QeU1lbV9SZWFsbG9jCisgIFB5TWVtYmVyRGVzY3JfVHlwZT1weXRob24zNC5QeU1lbWJlckRlc2NyX1R5cGUgREFUQQorICBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdD1weXRob24zNC5QeU1lbW9yeVZpZXdfRnJvbU9iamVjdAorICBQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cz1weXRob24zNC5QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cworICBQeU1lbW9yeVZpZXdfVHlwZT1weXRob24zNC5QeU1lbW9yeVZpZXdfVHlwZSBEQVRBCisgIFB5TWV0aG9kRGVzY3JfVHlwZT1weXRob24zNC5QeU1ldGhvZERlc2NyX1R5cGUgREFUQQorICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudD1weXRob24zNC5QeU1vZHVsZV9BZGRJbnRDb25zdGFudAorICBQeU1vZHVsZV9BZGRPYmplY3Q9cHl0aG9uMzQuUHlNb2R1bGVfQWRkT2JqZWN0CisgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50PXB5dGhvbjM0LlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50CisgIFB5TW9kdWxlX0NyZWF0ZTI9cHl0aG9uMzQuUHlNb2R1bGVfQ3JlYXRlMgorICBQeU1vZHVsZV9HZXREZWY9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGVmCisgIFB5TW9kdWxlX0dldERpY3Q9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGljdAorICBQeU1vZHVsZV9HZXRGaWxlbmFtZT1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZQorICBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdAorICBQeU1vZHVsZV9HZXROYW1lPXB5dGhvbjM0LlB5TW9kdWxlX0dldE5hbWUKKyAgUHlNb2R1bGVfR2V0U3RhdGU9cHl0aG9uMzQuUHlNb2R1bGVfR2V0U3RhdGUKKyAgUHlNb2R1bGVfTmV3PXB5dGhvbjM0LlB5TW9kdWxlX05ldworICBQeU1vZHVsZV9UeXBlPXB5dGhvbjM0LlB5TW9kdWxlX1R5cGUgREFUQQorICBQeU51bGxJbXBvcnRlcl9UeXBlPXB5dGhvbjM0LlB5TnVsbEltcG9ydGVyX1R5cGUgREFUQQorICBQeU51bWJlcl9BYnNvbHV0ZT1weXRob24zNC5QeU51bWJlcl9BYnNvbHV0ZQorICBQeU51bWJlcl9BZGQ9cHl0aG9uMzQuUHlOdW1iZXJfQWRkCisgIFB5TnVtYmVyX0FuZD1weXRob24zNC5QeU51bWJlcl9BbmQKKyAgUHlOdW1iZXJfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TnVtYmVyX0FzU3NpemVfdAorICBQeU51bWJlcl9DaGVjaz1weXRob24zNC5QeU51bWJlcl9DaGVjaworICBQeU51bWJlcl9EaXZtb2Q9cHl0aG9uMzQuUHlOdW1iZXJfRGl2bW9kCisgIFB5TnVtYmVyX0Zsb2F0PXB5dGhvbjM0LlB5TnVtYmVyX0Zsb2F0CisgIFB5TnVtYmVyX0Zsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0Zsb29yRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VBZGQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZUFkZAorICBQeU51bWJlcl9JblBsYWNlQW5kPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VBbmQKKyAgUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZQorICBQeU51bWJlcl9JblBsYWNlTHNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VMc2hpZnQKKyAgUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseQorICBQeU51bWJlcl9JblBsYWNlT3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZU9yCisgIFB5TnVtYmVyX0luUGxhY2VQb3dlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUG93ZXIKKyAgUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyCisgIFB5TnVtYmVyX0luUGxhY2VSc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVJzaGlmdAorICBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Q9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0CisgIFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VYb3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVhvcgorICBQeU51bWJlcl9JbmRleD1weXRob24zNC5QeU51bWJlcl9JbmRleAorICBQeU51bWJlcl9JbnZlcnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW52ZXJ0CisgIFB5TnVtYmVyX0xvbmc9cHl0aG9uMzQuUHlOdW1iZXJfTG9uZworICBQeU51bWJlcl9Mc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfTHNoaWZ0CisgIFB5TnVtYmVyX011bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX011bHRpcGx5CisgIFB5TnVtYmVyX05lZ2F0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX05lZ2F0aXZlCisgIFB5TnVtYmVyX09yPXB5dGhvbjM0LlB5TnVtYmVyX09yCisgIFB5TnVtYmVyX1Bvc2l0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX1Bvc2l0aXZlCisgIFB5TnVtYmVyX1Bvd2VyPXB5dGhvbjM0LlB5TnVtYmVyX1Bvd2VyCisgIFB5TnVtYmVyX1JlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9SZW1haW5kZXIKKyAgUHlOdW1iZXJfUnNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX1JzaGlmdAorICBQeU51bWJlcl9TdWJ0cmFjdD1weXRob24zNC5QeU51bWJlcl9TdWJ0cmFjdAorICBQeU51bWJlcl9Ub0Jhc2U9cHl0aG9uMzQuUHlOdW1iZXJfVG9CYXNlCisgIFB5TnVtYmVyX1RydWVEaXZpZGU9cHl0aG9uMzQuUHlOdW1iZXJfVHJ1ZURpdmlkZQorICBQeU51bWJlcl9Yb3I9cHl0aG9uMzQuUHlOdW1iZXJfWG9yCisgIFB5T1NfQWZ0ZXJGb3JrPXB5dGhvbjM0LlB5T1NfQWZ0ZXJGb3JrCisgIFB5T1NfSW5pdEludGVycnVwdHM9cHl0aG9uMzQuUHlPU19Jbml0SW50ZXJydXB0cworICBQeU9TX0lucHV0SG9vaz1weXRob24zNC5QeU9TX0lucHV0SG9vayBEQVRBCisgIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQ9cHl0aG9uMzQuUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAorICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyPXB5dGhvbjM0LlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgREFUQQorICBQeU9TX2RvdWJsZV90b19zdHJpbmc9cHl0aG9uMzQuUHlPU19kb3VibGVfdG9fc3RyaW5nCisgIFB5T1NfZ2V0c2lnPXB5dGhvbjM0LlB5T1NfZ2V0c2lnCisgIFB5T1NfbXlzdHJpY21wPXB5dGhvbjM0LlB5T1NfbXlzdHJpY21wCisgIFB5T1NfbXlzdHJuaWNtcD1weXRob24zNC5QeU9TX215c3RybmljbXAKKyAgUHlPU19zZXRzaWc9cHl0aG9uMzQuUHlPU19zZXRzaWcKKyAgUHlPU19zbnByaW50Zj1weXRob24zNC5QeU9TX3NucHJpbnRmCisgIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZT1weXRob24zNC5QeU9TX3N0cmluZ190b19kb3VibGUKKyAgUHlPU19zdHJ0b2w9cHl0aG9uMzQuUHlPU19zdHJ0b2wKKyAgUHlPU19zdHJ0b3VsPXB5dGhvbjM0LlB5T1Nfc3RydG91bAorICBQeU9TX3ZzbnByaW50Zj1weXRob24zNC5QeU9TX3ZzbnByaW50ZgorICBQeU9iamVjdF9BU0NJST1weXRob24zNC5QeU9iamVjdF9BU0NJSQorICBQeU9iamVjdF9Bc0NoYXJCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNDaGFyQnVmZmVyCisgIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I9cHl0aG9uMzQuUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcgorICBQeU9iamVjdF9Bc1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNSZWFkQnVmZmVyCisgIFB5T2JqZWN0X0FzV3JpdGVCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcgorICBQeU9iamVjdF9CeXRlcz1weXRob24zNC5QeU9iamVjdF9CeXRlcworICBQeU9iamVjdF9DYWxsPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGwKKyAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbgorICBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZD1weXRob24zNC5QeU9iamVjdF9DYWxsTWV0aG9kCisgIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzCisgIFB5T2JqZWN0X0NhbGxPYmplY3Q9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbE9iamVjdAorICBQeU9iamVjdF9DaGVja1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyCisgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnM9cHl0aG9uMzQuUHlPYmplY3RfQ2xlYXJXZWFrUmVmcworICBQeU9iamVjdF9EZWxJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0RlbEl0ZW0KKyAgUHlPYmplY3RfRGVsSXRlbVN0cmluZz1weXRob24zNC5QeU9iamVjdF9EZWxJdGVtU3RyaW5nCisgIFB5T2JqZWN0X0Rpcj1weXRob24zNC5QeU9iamVjdF9EaXIKKyAgUHlPYmplY3RfRm9ybWF0PXB5dGhvbjM0LlB5T2JqZWN0X0Zvcm1hdAorICBQeU9iamVjdF9GcmVlPXB5dGhvbjM0LlB5T2JqZWN0X0ZyZWUKKyAgUHlPYmplY3RfR0NfRGVsPXB5dGhvbjM0LlB5T2JqZWN0X0dDX0RlbAorICBQeU9iamVjdF9HQ19UcmFjaz1weXRob24zNC5QeU9iamVjdF9HQ19UcmFjaworICBQeU9iamVjdF9HQ19VblRyYWNrPXB5dGhvbjM0LlB5T2JqZWN0X0dDX1VuVHJhY2sKKyAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY0dldEF0dHIKKyAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY1NldEF0dHIKKyAgUHlPYmplY3RfR2V0QXR0cj1weXRob24zNC5QeU9iamVjdF9HZXRBdHRyCisgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfR2V0QXR0clN0cmluZworICBQeU9iamVjdF9HZXRJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0dldEl0ZW0KKyAgUHlPYmplY3RfR2V0SXRlcj1weXRob24zNC5QeU9iamVjdF9HZXRJdGVyCisgIFB5T2JqZWN0X0hhc0F0dHI9cHl0aG9uMzQuUHlPYmplY3RfSGFzQXR0cgorICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKKyAgUHlPYmplY3RfSGFzaD1weXRob24zNC5QeU9iamVjdF9IYXNoCisgIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZD1weXRob24zNC5QeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQKKyAgUHlPYmplY3RfSW5pdD1weXRob24zNC5QeU9iamVjdF9Jbml0CisgIFB5T2JqZWN0X0luaXRWYXI9cHl0aG9uMzQuUHlPYmplY3RfSW5pdFZhcgorICBQeU9iamVjdF9Jc0luc3RhbmNlPXB5dGhvbjM0LlB5T2JqZWN0X0lzSW5zdGFuY2UKKyAgUHlPYmplY3RfSXNTdWJjbGFzcz1weXRob24zNC5QeU9iamVjdF9Jc1N1YmNsYXNzCisgIFB5T2JqZWN0X0lzVHJ1ZT1weXRob24zNC5QeU9iamVjdF9Jc1RydWUKKyAgUHlPYmplY3RfTGVuZ3RoPXB5dGhvbjM0LlB5T2JqZWN0X0xlbmd0aAorICBQeU9iamVjdF9NYWxsb2M9cHl0aG9uMzQuUHlPYmplY3RfTWFsbG9jCisgIFB5T2JqZWN0X05vdD1weXRob24zNC5QeU9iamVjdF9Ob3QKKyAgUHlPYmplY3RfUmVhbGxvYz1weXRob24zNC5QeU9iamVjdF9SZWFsbG9jCisgIFB5T2JqZWN0X1JlcHI9cHl0aG9uMzQuUHlPYmplY3RfUmVwcgorICBQeU9iamVjdF9SaWNoQ29tcGFyZT1weXRob24zNC5QeU9iamVjdF9SaWNoQ29tcGFyZQorICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2w9cHl0aG9uMzQuUHlPYmplY3RfUmljaENvbXBhcmVCb29sCisgIFB5T2JqZWN0X1NlbGZJdGVyPXB5dGhvbjM0LlB5T2JqZWN0X1NlbGZJdGVyCisgIFB5T2JqZWN0X1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfU2V0QXR0cgorICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X1NldEF0dHJTdHJpbmcKKyAgUHlPYmplY3RfU2V0SXRlbT1weXRob24zNC5QeU9iamVjdF9TZXRJdGVtCisgIFB5T2JqZWN0X1NpemU9cHl0aG9uMzQuUHlPYmplY3RfU2l6ZQorICBQeU9iamVjdF9TdHI9cHl0aG9uMzQuUHlPYmplY3RfU3RyCisgIFB5T2JqZWN0X1R5cGU9cHl0aG9uMzQuUHlPYmplY3RfVHlwZSBEQVRBCisgIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzPXB5dGhvbjM0LlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzCisgIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3M9cHl0aG9uMzQuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncworICBQeVByb3BlcnR5X1R5cGU9cHl0aG9uMzQuUHlQcm9wZXJ0eV9UeXBlIERBVEEKKyAgUHlSYW5nZUl0ZXJfVHlwZT1weXRob24zNC5QeVJhbmdlSXRlcl9UeXBlIERBVEEKKyAgUHlSYW5nZV9UeXBlPXB5dGhvbjM0LlB5UmFuZ2VfVHlwZSBEQVRBCisgIFB5UmV2ZXJzZWRfVHlwZT1weXRob24zNC5QeVJldmVyc2VkX1R5cGUgREFUQQorICBQeVNlcUl0ZXJfTmV3PXB5dGhvbjM0LlB5U2VxSXRlcl9OZXcKKyAgUHlTZXFJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXFJdGVyX1R5cGUgREFUQQorICBQeVNlcXVlbmNlX0NoZWNrPXB5dGhvbjM0LlB5U2VxdWVuY2VfQ2hlY2sKKyAgUHlTZXF1ZW5jZV9Db25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db25jYXQKKyAgUHlTZXF1ZW5jZV9Db250YWlucz1weXRob24zNC5QeVNlcXVlbmNlX0NvbnRhaW5zCisgIFB5U2VxdWVuY2VfQ291bnQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db3VudAorICBQeVNlcXVlbmNlX0RlbEl0ZW09cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxJdGVtCisgIFB5U2VxdWVuY2VfRGVsU2xpY2U9cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxTbGljZQorICBQeVNlcXVlbmNlX0Zhc3Q9cHl0aG9uMzQuUHlTZXF1ZW5jZV9GYXN0CisgIFB5U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVNlcXVlbmNlX0dldEl0ZW0KKyAgUHlTZXF1ZW5jZV9HZXRTbGljZT1weXRob24zNC5QeVNlcXVlbmNlX0dldFNsaWNlCisgIFB5U2VxdWVuY2VfSW49cHl0aG9uMzQuUHlTZXF1ZW5jZV9JbgorICBQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0CisgIFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdD1weXRob24zNC5QeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQKKyAgUHlTZXF1ZW5jZV9JbmRleD1weXRob24zNC5QeVNlcXVlbmNlX0luZGV4CisgIFB5U2VxdWVuY2VfTGVuZ3RoPXB5dGhvbjM0LlB5U2VxdWVuY2VfTGVuZ3RoCisgIFB5U2VxdWVuY2VfTGlzdD1weXRob24zNC5QeVNlcXVlbmNlX0xpc3QKKyAgUHlTZXF1ZW5jZV9SZXBlYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9SZXBlYXQKKyAgUHlTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0SXRlbQorICBQeVNlcXVlbmNlX1NldFNsaWNlPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0U2xpY2UKKyAgUHlTZXF1ZW5jZV9TaXplPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2l6ZQorICBQeVNlcXVlbmNlX1R1cGxlPXB5dGhvbjM0LlB5U2VxdWVuY2VfVHVwbGUKKyAgUHlTZXRJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXRJdGVyX1R5cGUgREFUQQorICBQeVNldF9BZGQ9cHl0aG9uMzQuUHlTZXRfQWRkCisgIFB5U2V0X0NsZWFyPXB5dGhvbjM0LlB5U2V0X0NsZWFyCisgIFB5U2V0X0NvbnRhaW5zPXB5dGhvbjM0LlB5U2V0X0NvbnRhaW5zCisgIFB5U2V0X0Rpc2NhcmQ9cHl0aG9uMzQuUHlTZXRfRGlzY2FyZAorICBQeVNldF9OZXc9cHl0aG9uMzQuUHlTZXRfTmV3CisgIFB5U2V0X1BvcD1weXRob24zNC5QeVNldF9Qb3AKKyAgUHlTZXRfU2l6ZT1weXRob24zNC5QeVNldF9TaXplCisgIFB5U2V0X1R5cGU9cHl0aG9uMzQuUHlTZXRfVHlwZSBEQVRBCisgIFB5U2xpY2VfR2V0SW5kaWNlcz1weXRob24zNC5QeVNsaWNlX0dldEluZGljZXMKKyAgUHlTbGljZV9HZXRJbmRpY2VzRXg9cHl0aG9uMzQuUHlTbGljZV9HZXRJbmRpY2VzRXgKKyAgUHlTbGljZV9OZXc9cHl0aG9uMzQuUHlTbGljZV9OZXcKKyAgUHlTbGljZV9UeXBlPXB5dGhvbjM0LlB5U2xpY2VfVHlwZSBEQVRBCisgIFB5U29ydFdyYXBwZXJfVHlwZT1weXRob24zNC5QeVNvcnRXcmFwcGVyX1R5cGUgREFUQQorICBQeVN0YXRlX0ZpbmRNb2R1bGU9cHl0aG9uMzQuUHlTdGF0ZV9GaW5kTW9kdWxlCisgIFB5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfQWRkTW9kdWxlCisgIFB5U3RhdGVfUmVtb3ZlTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfUmVtb3ZlTW9kdWxlCisgIFB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXc9cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlPXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZQorICBQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtCisgIFB5U3VwZXJfVHlwZT1weXRob24zNC5QeVN1cGVyX1R5cGUgREFUQQorICBQeVN5c19BZGRXYXJuT3B0aW9uPXB5dGhvbjM0LlB5U3lzX0FkZFdhcm5PcHRpb24KKyAgUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGU9cHl0aG9uMzQuUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGUKKyAgUHlTeXNfRm9ybWF0U3RkZXJyPXB5dGhvbjM0LlB5U3lzX0Zvcm1hdFN0ZGVycgorICBQeVN5c19Gb3JtYXRTdGRvdXQ9cHl0aG9uMzQuUHlTeXNfRm9ybWF0U3Rkb3V0CisgIFB5U3lzX0dldE9iamVjdD1weXRob24zNC5QeVN5c19HZXRPYmplY3QKKyAgUHlTeXNfSGFzV2Fybk9wdGlvbnM9cHl0aG9uMzQuUHlTeXNfSGFzV2Fybk9wdGlvbnMKKyAgUHlTeXNfUmVzZXRXYXJuT3B0aW9ucz1weXRob24zNC5QeVN5c19SZXNldFdhcm5PcHRpb25zCisgIFB5U3lzX1NldEFyZ3Y9cHl0aG9uMzQuUHlTeXNfU2V0QXJndgorICBQeVN5c19TZXRBcmd2RXg9cHl0aG9uMzQuUHlTeXNfU2V0QXJndkV4CisgIFB5U3lzX1NldE9iamVjdD1weXRob24zNC5QeVN5c19TZXRPYmplY3QKKyAgUHlTeXNfU2V0UGF0aD1weXRob24zNC5QeVN5c19TZXRQYXRoCisgIFB5U3lzX1dyaXRlU3RkZXJyPXB5dGhvbjM0LlB5U3lzX1dyaXRlU3RkZXJyCisgIFB5U3lzX1dyaXRlU3Rkb3V0PXB5dGhvbjM0LlB5U3lzX1dyaXRlU3Rkb3V0CisgIFB5VGhyZWFkU3RhdGVfQ2xlYXI9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9DbGVhcgorICBQeVRocmVhZFN0YXRlX0RlbGV0ZT1weXRob24zNC5QeVRocmVhZFN0YXRlX0RlbGV0ZQorICBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQ9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50CisgIFB5VGhyZWFkU3RhdGVfR2V0PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfR2V0CisgIFB5VGhyZWFkU3RhdGVfR2V0RGljdD1weXRob24zNC5QeVRocmVhZFN0YXRlX0dldERpY3QKKyAgUHlUaHJlYWRTdGF0ZV9OZXc9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9OZXcKKyAgUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Yz1weXRob24zNC5QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCisgIFB5VGhyZWFkU3RhdGVfU3dhcD1weXRob24zNC5QeVRocmVhZFN0YXRlX1N3YXAKKyAgUHlUcmFjZUJhY2tfSGVyZT1weXRob24zNC5QeVRyYWNlQmFja19IZXJlCisgIFB5VHJhY2VCYWNrX1ByaW50PXB5dGhvbjM0LlB5VHJhY2VCYWNrX1ByaW50CisgIFB5VHJhY2VCYWNrX1R5cGU9cHl0aG9uMzQuUHlUcmFjZUJhY2tfVHlwZSBEQVRBCisgIFB5VHVwbGVJdGVyX1R5cGU9cHl0aG9uMzQuUHlUdXBsZUl0ZXJfVHlwZSBEQVRBCisgIFB5VHVwbGVfQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeVR1cGxlX0NsZWFyRnJlZUxpc3QKKyAgUHlUdXBsZV9HZXRJdGVtPXB5dGhvbjM0LlB5VHVwbGVfR2V0SXRlbQorICBQeVR1cGxlX0dldFNsaWNlPXB5dGhvbjM0LlB5VHVwbGVfR2V0U2xpY2UKKyAgUHlUdXBsZV9OZXc9cHl0aG9uMzQuUHlUdXBsZV9OZXcKKyAgUHlUdXBsZV9QYWNrPXB5dGhvbjM0LlB5VHVwbGVfUGFjaworICBQeVR1cGxlX1NldEl0ZW09cHl0aG9uMzQuUHlUdXBsZV9TZXRJdGVtCisgIFB5VHVwbGVfU2l6ZT1weXRob24zNC5QeVR1cGxlX1NpemUKKyAgUHlUdXBsZV9UeXBlPXB5dGhvbjM0LlB5VHVwbGVfVHlwZSBEQVRBCisgIFB5VHlwZV9DbGVhckNhY2hlPXB5dGhvbjM0LlB5VHlwZV9DbGVhckNhY2hlCisgIFB5VHlwZV9Gcm9tU3BlYz1weXRob24zNC5QeVR5cGVfRnJvbVNwZWMKKyAgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzPXB5dGhvbjM0LlB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcworICBQeVR5cGVfR2VuZXJpY0FsbG9jPXB5dGhvbjM0LlB5VHlwZV9HZW5lcmljQWxsb2MKKyAgUHlUeXBlX0dlbmVyaWNOZXc9cHl0aG9uMzQuUHlUeXBlX0dlbmVyaWNOZXcKKyAgUHlUeXBlX0dldEZsYWdzPXB5dGhvbjM0LlB5VHlwZV9HZXRGbGFncworICBQeVR5cGVfSXNTdWJ0eXBlPXB5dGhvbjM0LlB5VHlwZV9Jc1N1YnR5cGUKKyAgUHlUeXBlX01vZGlmaWVkPXB5dGhvbjM0LlB5VHlwZV9Nb2RpZmllZAorICBQeVR5cGVfUmVhZHk9cHl0aG9uMzQuUHlUeXBlX1JlYWR5CisgIFB5VHlwZV9UeXBlPXB5dGhvbjM0LlB5VHlwZV9UeXBlIERBVEEKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZQorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZworICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZUl0ZXJfVHlwZT1weXRob24zNC5QeVVuaWNvZGVJdGVyX1R5cGUgREFUQQorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlX0FwcGVuZD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FwcGVuZAorICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXBwZW5kQW5kRGVsCisgIFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNBU0NJSVN0cmluZworICBQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNDaGFybWFwU3RyaW5nCisgIFB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0RlY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0FzRGVjb2RlZFVuaWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0RlY29kZWRVbmljb2RlCisgIFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZFN0cmluZworICBQeVVuaWNvZGVfQXNFbmNvZGVkVW5pY29kZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZFVuaWNvZGUKKyAgUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNMYXRpbjFTdHJpbmcKKyAgUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZworICBQeVVuaWNvZGVfQXNVVEYxNlN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzVVRGMTZTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGMzJTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc1VURjMyU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjhTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc1VURjhTdHJpbmcKKyAgUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzVW5pY29kZUVzY2FwZVN0cmluZworICBQeVVuaWNvZGVfQXNXaWRlQ2hhcj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzV2lkZUNoYXIKKyAgUHlVbmljb2RlX0NsZWFyRnJlZWxpc3Q9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9DbGVhckZyZWVsaXN0CisgIFB5VW5pY29kZV9Db21wYXJlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQ29tcGFyZQorICBQeVVuaWNvZGVfQ29uY2F0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQ29uY2F0CisgIFB5VW5pY29kZV9Db250YWlucz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0NvbnRhaW5zCisgIFB5VW5pY29kZV9Db3VudD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0NvdW50CisgIFB5VW5pY29kZV9EZWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGUKKyAgUHlVbmljb2RlX0RlY29kZUFTQ0lJPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlQVNDSUkKKyAgUHlVbmljb2RlX0RlY29kZUNoYXJtYXA9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVDaGFybWFwCisgIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVGU0RlZmF1bHRBbmRTaXplCisgIFB5VW5pY29kZV9EZWNvZGVMYXRpbjE9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVMYXRpbjEKKyAgUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVSYXdVbmljb2RlRXNjYXBlCisgIFB5VW5pY29kZV9EZWNvZGVVVEYxNj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2CisgIFB5VW5pY29kZV9EZWNvZGVVVEYxNlN0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTZTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVVRGMzI9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYzMgorICBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjMyU3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVURjg9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEY4CisgIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEY4U3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVbmljb2RlRXNjYXBlCisgIFB5VW5pY29kZV9GU0NvbnZlcnRlcj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0ZTQ29udmVydGVyCisgIFB5VW5pY29kZV9GU0RlY29kZXI9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9GU0RlY29kZXIKKyAgUHlVbmljb2RlX0ZpbmQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9GaW5kCisgIFB5VW5pY29kZV9Gb3JtYXQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gb3JtYXQKKyAgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbUVuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tRm9ybWF0CisgIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21Gb3JtYXRWCisgIFB5VW5pY29kZV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbU9iamVjdAorICBQeVVuaWNvZGVfRnJvbU9yZGluYWw9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tT3JkaW5hbAorICBQeVVuaWNvZGVfRnJvbVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21TdHJpbmcKKyAgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21XaWRlQ2hhcgorICBQeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfR2V0RGVmYXVsdEVuY29kaW5nCisgIFB5VW5pY29kZV9HZXRTaXplPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfR2V0U2l6ZQorICBQeVVuaWNvZGVfSXNJZGVudGlmaWVyPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfSXNJZGVudGlmaWVyCisgIFB5VW5pY29kZV9Kb2luPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfSm9pbgorICBQeVVuaWNvZGVfUGFydGl0aW9uPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUGFydGl0aW9uCisgIFB5VW5pY29kZV9SUGFydGl0aW9uPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUlBhcnRpdGlvbgorICBQeVVuaWNvZGVfUlNwbGl0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUlNwbGl0CisgIFB5VW5pY29kZV9SZXBsYWNlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUmVwbGFjZQorICBQeVVuaWNvZGVfUmVzaXplPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfUmVzaXplCisgIFB5VW5pY29kZV9SaWNoQ29tcGFyZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1JpY2hDb21wYXJlCisgIFB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9TZXREZWZhdWx0RW5jb2RpbmcKKyAgUHlVbmljb2RlX1NwbGl0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfU3BsaXQKKyAgUHlVbmljb2RlX1NwbGl0bGluZXM9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9TcGxpdGxpbmVzCisgIFB5VW5pY29kZV9UYWlsbWF0Y2g9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9UYWlsbWF0Y2gKKyAgUHlVbmljb2RlX1RyYW5zbGF0ZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1RyYW5zbGF0ZQorICBQeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcD1weXRob24zNC5QeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcAorICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZworICBQeVVuaWNvZGVfRGVjb2RlVVRGNz1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGNworICBQeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWwKKyAgUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdD1weXRob24zNC5QeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0CisgIFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nCisgIFB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbD1weXRob24zNC5QeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWwKKyAgUHlVbmljb2RlX0ludGVybkluUGxhY2U9cHl0aG9uMzQuUHlVbmljb2RlX0ludGVybkluUGxhY2UKKyAgUHlVbmljb2RlX1R5cGU9cHl0aG9uMzQuUHlVbmljb2RlX1R5cGUgREFUQQorICBQeVdlYWtyZWZfR2V0T2JqZWN0PXB5dGhvbjM0LlB5V2Vha3JlZl9HZXRPYmplY3QgREFUQQorICBQeVdlYWtyZWZfTmV3UHJveHk9cHl0aG9uMzQuUHlXZWFrcmVmX05ld1Byb3h5CisgIFB5V2Vha3JlZl9OZXdSZWY9cHl0aG9uMzQuUHlXZWFrcmVmX05ld1JlZgorICBQeVdyYXBwZXJEZXNjcl9UeXBlPXB5dGhvbjM0LlB5V3JhcHBlckRlc2NyX1R5cGUgREFUQQorICBQeVdyYXBwZXJfTmV3PXB5dGhvbjM0LlB5V3JhcHBlcl9OZXcKKyAgUHlaaXBfVHlwZT1weXRob24zNC5QeVppcF9UeXBlIERBVEEKKyAgUHlfQWRkUGVuZGluZ0NhbGw9cHl0aG9uMzQuUHlfQWRkUGVuZGluZ0NhbGwKKyAgUHlfQXRFeGl0PXB5dGhvbjM0LlB5X0F0RXhpdAorICBQeV9CdWlsZFZhbHVlPXB5dGhvbjM0LlB5X0J1aWxkVmFsdWUKKyAgUHlfQ29tcGlsZVN0cmluZz1weXRob24zNC5QeV9Db21waWxlU3RyaW5nCisgIFB5X0RlY1JlZj1weXRob24zNC5QeV9EZWNSZWYKKyAgUHlfRW5kSW50ZXJwcmV0ZXI9cHl0aG9uMzQuUHlfRW5kSW50ZXJwcmV0ZXIKKyAgUHlfRXhpdD1weXRob24zNC5QeV9FeGl0CisgIFB5X0ZhdGFsRXJyb3I9cHl0aG9uMzQuUHlfRmF0YWxFcnJvcgorICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nPXB5dGhvbjM0LlB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgREFUQQorICBQeV9GaW5hbGl6ZT1weXRob24zNC5QeV9GaW5hbGl6ZQorICBQeV9HZXRCdWlsZEluZm89cHl0aG9uMzQuUHlfR2V0QnVpbGRJbmZvCisgIFB5X0dldENvbXBpbGVyPXB5dGhvbjM0LlB5X0dldENvbXBpbGVyCisgIFB5X0dldENvcHlyaWdodD1weXRob24zNC5QeV9HZXRDb3B5cmlnaHQKKyAgUHlfR2V0RXhlY1ByZWZpeD1weXRob24zNC5QeV9HZXRFeGVjUHJlZml4CisgIFB5X0dldFBhdGg9cHl0aG9uMzQuUHlfR2V0UGF0aAorICBQeV9HZXRQbGF0Zm9ybT1weXRob24zNC5QeV9HZXRQbGF0Zm9ybQorICBQeV9HZXRQcmVmaXg9cHl0aG9uMzQuUHlfR2V0UHJlZml4CisgIFB5X0dldFByb2dyYW1GdWxsUGF0aD1weXRob24zNC5QeV9HZXRQcm9ncmFtRnVsbFBhdGgKKyAgUHlfR2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzQuUHlfR2V0UHJvZ3JhbU5hbWUKKyAgUHlfR2V0UHl0aG9uSG9tZT1weXRob24zNC5QeV9HZXRQeXRob25Ib21lCisgIFB5X0dldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjM0LlB5X0dldFJlY3Vyc2lvbkxpbWl0CisgIFB5X0dldFZlcnNpb249cHl0aG9uMzQuUHlfR2V0VmVyc2lvbgorICBQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nPXB5dGhvbjM0LlB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgREFUQQorICBQeV9JbmNSZWY9cHl0aG9uMzQuUHlfSW5jUmVmCisgIFB5X0luaXRpYWxpemU9cHl0aG9uMzQuUHlfSW5pdGlhbGl6ZQorICBQeV9Jbml0aWFsaXplRXg9cHl0aG9uMzQuUHlfSW5pdGlhbGl6ZUV4CisgIFB5X0lzSW5pdGlhbGl6ZWQ9cHl0aG9uMzQuUHlfSXNJbml0aWFsaXplZAorICBQeV9NYWluPXB5dGhvbjM0LlB5X01haW4KKyAgUHlfTWFrZVBlbmRpbmdDYWxscz1weXRob24zNC5QeV9NYWtlUGVuZGluZ0NhbGxzCisgIFB5X05ld0ludGVycHJldGVyPXB5dGhvbjM0LlB5X05ld0ludGVycHJldGVyCisgIFB5X1JlcHJFbnRlcj1weXRob24zNC5QeV9SZXByRW50ZXIKKyAgUHlfUmVwckxlYXZlPXB5dGhvbjM0LlB5X1JlcHJMZWF2ZQorICBQeV9TZXRQcm9ncmFtTmFtZT1weXRob24zNC5QeV9TZXRQcm9ncmFtTmFtZQorICBQeV9TZXRQeXRob25Ib21lPXB5dGhvbjM0LlB5X1NldFB5dGhvbkhvbWUKKyAgUHlfU2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzQuUHlfU2V0UmVjdXJzaW9uTGltaXQKKyAgUHlfU3ltdGFibGVTdHJpbmc9cHl0aG9uMzQuUHlfU3ltdGFibGVTdHJpbmcKKyAgUHlfVmFCdWlsZFZhbHVlPXB5dGhvbjM0LlB5X1ZhQnVpbGRWYWx1ZQorICBfUHlFcnJfQmFkSW50ZXJuYWxDYWxsPXB5dGhvbjM0Ll9QeUVycl9CYWRJbnRlcm5hbENhbGwKKyAgX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVD1weXRob24zNC5fUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUCisgIF9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUPXB5dGhvbjM0Ll9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUCisgIF9QeU9iamVjdF9HQ19NYWxsb2M9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX01hbGxvYworICBfUHlPYmplY3RfR0NfTmV3PXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19OZXcKKyAgX1B5T2JqZWN0X0dDX05ld1Zhcj1weXRob24zNC5fUHlPYmplY3RfR0NfTmV3VmFyCisgIF9QeU9iamVjdF9HQ19SZXNpemU9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX1Jlc2l6ZQorICBfUHlPYmplY3RfTmV3PXB5dGhvbjM0Ll9QeU9iamVjdF9OZXcKKyAgX1B5T2JqZWN0X05ld1Zhcj1weXRob24zNC5fUHlPYmplY3RfTmV3VmFyCisgIF9QeVN0YXRlX0FkZE1vZHVsZT1weXRob24zNC5fUHlTdGF0ZV9BZGRNb2R1bGUKKyAgX1B5VGhyZWFkU3RhdGVfSW5pdD1weXRob24zNC5fUHlUaHJlYWRTdGF0ZV9Jbml0CisgIF9QeVRocmVhZFN0YXRlX1ByZWFsbG9jPXB5dGhvbjM0Ll9QeVRocmVhZFN0YXRlX1ByZWFsbG9jCisgIF9QeVRyYXNoX2RlbGV0ZV9sYXRlcj1weXRob24zNC5fUHlUcmFzaF9kZWxldGVfbGF0ZXIgREFUQQorICBfUHlUcmFzaF9kZWxldGVfbmVzdGluZz1weXRob24zNC5fUHlUcmFzaF9kZWxldGVfbmVzdGluZyBEQVRBCisgIF9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0PXB5dGhvbjM0Ll9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0CisgIF9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW49cHl0aG9uMzQuX1B5VHJhc2hfZGVzdHJveV9jaGFpbgorICBfUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlPXB5dGhvbjM0Ll9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGUgREFUQQorICBfUHlXZWFrcmVmX1Byb3h5VHlwZT1weXRob24zNC5fUHlXZWFrcmVmX1Byb3h5VHlwZSBEQVRBCisgIF9QeVdlYWtyZWZfUmVmVHlwZT1weXRob24zNC5fUHlXZWFrcmVmX1JlZlR5cGUgREFUQQorICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zNC5fUHlfQnVpbGRWYWx1ZV9TaXplVAorICBfUHlfQ2hlY2tSZWN1cnNpb25MaW1pdD1weXRob24zNC5fUHlfQ2hlY2tSZWN1cnNpb25MaW1pdCBEQVRBCisgIF9QeV9DaGVja1JlY3Vyc2l2ZUNhbGw9cHl0aG9uMzQuX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbAorICBfUHlfRGVhbGxvYz1weXRob24zNC5fUHlfRGVhbGxvYworICBfUHlfRWxsaXBzaXNPYmplY3Q9cHl0aG9uMzQuX1B5X0VsbGlwc2lzT2JqZWN0IERBVEEKKyAgX1B5X0ZhbHNlU3RydWN0PXB5dGhvbjM0Ll9QeV9GYWxzZVN0cnVjdCBEQVRBCisgIF9QeV9Ob25lU3RydWN0PXB5dGhvbjM0Ll9QeV9Ob25lU3RydWN0IERBVEEKKyAgX1B5X05vdEltcGxlbWVudGVkU3RydWN0PXB5dGhvbjM0Ll9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdCBEQVRBCisgIF9QeV9Td2FwcGVkT3A9cHl0aG9uMzQuX1B5X1N3YXBwZWRPcCBEQVRBCisgIF9QeV9UcnVlU3RydWN0PXB5dGhvbjM0Ll9QeV9UcnVlU3RydWN0IERBVEEKKyAgX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVD1weXRob24zNC5fUHlfVmFCdWlsZFZhbHVlX1NpemVUCisgIF9QeUFyZ19QYXJzZV9TaXplVD1weXRob24zNC5fUHlBcmdfUGFyc2VfU2l6ZVQKKyAgX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQKKyAgX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVD1weXRob24zNC5fUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCisgIF9QeUFyZ19WYVBhcnNlX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19WYVBhcnNlX1NpemVUCisgIF9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVD1weXRob24zNC5fUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKKyAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMubWFrIGIvUEMvcHl0aG9uMy5tYWsKaW5kZXggMmVjOTE4NS4uOGY5ZDQ2OCAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMy5tYWsKKysrIGIvUEMvcHl0aG9uMy5tYWsKQEAgLTEsMTAgKzEsMTAgQEAKLSQoT3V0RGlyKXB5dGhvbjMuZGxsOglweXRob24zLmRlZiAkKE91dERpcilweXRob24zM3N0dWIubGliCi0JY2wgL0xEIC9GZSQoT3V0RGlyKXB5dGhvbjMuZGxsIHB5dGhvbjNkbGwuYyBweXRob24zLmRlZiAkKE91dERpcilweXRob24zM3N0dWIubGliCiskKE91dERpcilweXRob24zLmRsbDoJcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYgorCWNsIC9MRCAvRmUkKE91dERpcilweXRob24zLmRsbCBweXRob24zZGxsLmMgcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYgogCi0kKE91dERpcilweXRob24zM3N0dWIubGliOglweXRob24zM3N0dWIuZGVmCi0JbGliIC9kZWY6cHl0aG9uMzNzdHViLmRlZiAvb3V0OiQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIgL01BQ0hJTkU6JChNQUNISU5FKQorJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYjoJcHl0aG9uMzRzdHViLmRlZgorCWxpYiAvZGVmOnB5dGhvbjM0c3R1Yi5kZWYgL291dDokKE91dERpcilweXRob24zNHN0dWIubGliIC9NQUNISU5FOiQoTUFDSElORSkKIAogY2xlYW46Ci0JZGVsICQoT3V0RGlyKXB5dGhvbjMuZGxsICQoT3V0RGlyKXB5dGhvbjMubGliICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIgJChPdXREaXIpcHl0aG9uMy5leHAgJChPdXREaXIpcHl0aG9uMzNzdHViLmV4cAorCWRlbCAkKE91dERpcilweXRob24zLmRsbCAkKE91dERpcilweXRob24zLmxpYiAkKE91dERpcilweXRob24zNHN0dWIubGliICQoT3V0RGlyKXB5dGhvbjMuZXhwICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5leHAKIAogcmVidWlsZDogY2xlYW4gJChPdXREaXIpcHl0aG9uMy5kbGwKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMzZ2VuLnB5IGIvUEMvcHl0aG9uMzRnZW4ucHkKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gUEMvcHl0aG9uMzNnZW4ucHkKcmVuYW1lIHRvIFBDL3B5dGhvbjM0Z2VuLnB5CmluZGV4IDIxYjlmNTYuLjE4MGNlMTEgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbjMzZ2VuLnB5CisrKyBiL1BDL3B5dGhvbjM0Z2VuLnB5CkBAIC0xLDkgKzEsOSBAQAotIyBHZW5lcmF0ZSBweXRob24zM3N0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgorIyBHZW5lcmF0ZSBweXRob24zNHN0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgogIyBUaGUgcmVndWxhciBpbXBvcnQgbGlicmFyeSBjYW5ub3QgYmUgdXNlZCwKICMgc2luY2UgaXQgZG9lc24ndCBwcm92aWRlIHRoZSByaWdodCBzeW1ib2xzIGZvcgogIyBkYXRhIGZvcndhcmRpbmcKLW91dCA9IG9wZW4oInB5dGhvbjMzc3R1Yi5kZWYiLCAidyIpCi1vdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjMzIlxuJykKK291dCA9IG9wZW4oInB5dGhvbjM0c3R1Yi5kZWYiLCAidyIpCitvdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjM0IlxuJykKIG91dC53cml0ZSgnRVhQT1JUU1xuJykKIAogaW5wID0gb3BlbigicHl0aG9uMy5kZWYiKQpAQCAtMTQsNyArMTQsNyBAQAogYXNzZXJ0IGxpbmUuc3RyaXAoKT09J0VYUE9SVFMnCiAKIGZvciBsaW5lIGluIGlucDoKLSAgICAjIFNZTTE9cHl0aG9uMzMuU1lNMlsgREFUQV0KKyAgICAjIFNZTTE9cHl0aG9uMzQuU1lNMlsgREFUQV0KICAgICBoZWFkLCB0YWlsID0gbGluZS5zcGxpdCgnLicpCiAgICAgaWYgJ0RBVEEnIGluIHRhaWw6CiAgICAgICAgIHN5bWJvbCwgdGFpbCA9IHRhaWwuc3BsaXQoJyAnKQpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMzNzdHViLmRlZiBiL1BDL3B5dGhvbjM0c3R1Yi5kZWYKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gUEMvcHl0aG9uMzNzdHViLmRlZgpyZW5hbWUgdG8gUEMvcHl0aG9uMzRzdHViLmRlZgppbmRleCA1YjhjY2Y2Li5jMGYzYjM1IDEwMDY0NAotLS0gYS9QQy9weXRob24zM3N0dWIuZGVmCisrKyBiL1BDL3B5dGhvbjM0c3R1Yi5kZWYKQEAgLTEsNCArMSw0IEBACi1MSUJSQVJZICJweXRob24zMyIKK0xJQlJBUlkgInB5dGhvbjM0IgogRVhQT1JUUwogUHlBcmdfUGFyc2UKIFB5QXJnX1BhcnNlVHVwbGUKQEAgLTM3LDYgKzM3LDcgQEAKIFB5Q0Z1bmN0aW9uX0dldEZsYWdzCiBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgogUHlDRnVuY3Rpb25fR2V0U2VsZgorUHlDRnVuY3Rpb25fTmV3CiBQeUNGdW5jdGlvbl9OZXdFeAogUHlDRnVuY3Rpb25fVHlwZQogUHlDYWxsSXRlcl9OZXcKZGlmZiAtLWdpdCBhL1BDL3JlYWRtZS50eHQgYi9QQy9yZWFkbWUudHh0CmluZGV4IGZkYzA5YWIuLjYwZjIzMWUgMTAwNjQ0Ci0tLSBhL1BDL3JlYWRtZS50eHQKKysrIGIvUEMvcmVhZG1lLnR4dApAQCAtNzksMTkgKzc5LDYgQEAKIFRoZSBzdWJkaXJlY3RvcmllcyBWQzYsIFZTNy4xIGFuZCBWUzguMCBjb250YWluIGxlZ2FjeSBzdXBwb3J0IG9sZGVyCiB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4gU2VlIFBDYnVpbGQvcmVhZG1lLnR4dC4KIAotRU1YIGRldmVsb3BtZW50IHRvb2xzIGZvciBPUy8yCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU2VlIG9zMmVteC9yZWFkbWUudHh0LiBUaGlzIHBsYXRmb3JtIGlzIG1haW50YWluZWQgYnkgQW5kcmV3IE1hY0ludHlyZS4KLQotSUJNIFZpc3VhbEFnZSBDL0MrKyBmb3IgT1MvMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1TZWUgb3MydmFjcHAvcmVhZG1lLnR4dC4gIFRoaXMgcGxhdGZvcm0gaXMgc3VwcG9ydGVkIGJ5IEplZmYgUnVzaC4KLQotTk9URTogU3VwcG9ydCBmb3Igb3MydmFjcHAgbWF5IGJlIGRyb3BwZWQgaW4gdGhlIG5lYXIgZnV0dXJlLiBQbGVhc2UgbW92ZQotICAgICAgdG8gRU1YLgotCiBOb3RlIGZvciBXaW5kb3dzIDMueCBhbmQgRE9TIHVzZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL1BDL3c5eHBvcGVuLmMgYi9QQy93OXhwb3Blbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzk3OGRkLi4wMDAwMDAwCi0tLSBhL1BDL3c5eHBvcGVuLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIHc5eHBvcGVuLmMKLSAqCi0gKiBTZXJ2ZXMgYXMgYW4gaW50ZXJtZWRpYXRlIHN0dWIgV2luMzIgY29uc29sZSBhcHBsaWNhdGlvbiB0bwotICogYXZvaWQgYSBoYW5naW5nIHBpcGUgd2hlbiByZWRpcmVjdGluZyAxNi1iaXQgY29uc29sZSBiYXNlZAotICogcHJvZ3JhbXMgKGluY2x1ZGluZyBNUy1ET1MgY29uc29sZSBiYXNlZCBwcm9ncmFtcyBhbmQgYmF0Y2gKLSAqIGZpbGVzKSBvbiBXaW5kb3cgOTUgYW5kIFdpbmRvd3MgOTguCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIHRvIGJlIGxhdW5jaGVkIHdpdGggcmVkaXJlY3RlZCBzdGFuZGFyZAotICogaGFuZGxlcy4gSXQgd2lsbCBsYXVuY2ggdGhlIGNvbW1hbmQgbGluZSBzcGVjaWZpZWQgMTYtYml0Ci0gKiBjb25zb2xlIGJhc2VkIGFwcGxpY2F0aW9uIGluIHRoZSBzYW1lIGNvbnNvbGUsIGZvcndhcmRpbmcKLSAqIGl0cyBvd24gcmVkaXJlY3RlZCBzdGFuZGFyZCBoYW5kbGVzIHRvIHRoZSAxNi1iaXQgY2hpbGQuCi0KLSAqIEFLQSBzb2x1dGlvbiB0byB0aGUgcHJvYmxlbSBkZXNjcmliZWQgaW4gS0I6IFExNTA5NTYuCi0gKi8gICAgCi0KLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgLyogZm9yIG1hbGxvYyBhbmQgaXRzIGZyaWVuZHMgKi8KLQotY29uc3QgY2hhciAqdXNhZ2UgPQotIlRoaXMgcHJvZ3JhbSBpcyB1c2VkIGJ5IFB5dGhvbidzIG9zLnBvcGVuIGZ1bmN0aW9uXG4iCi0idG8gd29yayBhcm91bmQgYSBsaW1pdGF0aW9uIGluIFdpbmRvd3MgOTUvOTguICBJdCBpc1xuIgotIm5vdCBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgc3RhbmQtYWxvbmUgcHJvZ3JhbS4iOwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICAgIEJPT0wgYlJldDsKLSAgICBTVEFSVFVQSU5GTyBzaTsKLSAgICBQUk9DRVNTX0lORk9STUFUSU9OIHBpOwotICAgIERXT1JEIGV4aXRfY29kZT0wOwotICAgIHNpemVfdCBjbWRsZW4gPSAwOwotICAgIGludCBpOwotICAgIGNoYXIgKmNtZGxpbmUsICpjbWRsaW5lZmlsbDsKLQotICAgIGlmIChhcmdjIDwgMikgewotICAgICAgICBpZiAoR2V0RmlsZVR5cGUoR2V0U3RkSGFuZGxlKFNURF9JTlBVVF9IQU5ETEUpKT09RklMRV9UWVBFX0NIQVIpCi0gICAgICAgICAgICAvKiBBdHRhY2hlZCB0byBhIGNvbnNvbGUsIGFuZCB0aGVyZWZvcmUgbm90IGV4ZWN1dGVkIGJ5IFB5dGhvbgotICAgICAgICAgICAgICAgRGlzcGxheSBhIG1lc3NhZ2UgYm94IGZvciB0aGUgaW5xdWlzaXRpdmUgdXNlcgotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIE1lc3NhZ2VCb3goTlVMTCwgdXNhZ2UsIGFyZ3ZbMF0sIE1CX09LKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBFZWVrIC0gZXhlY3V0ZWQgYnkgUHl0aG9uLCBidXQgYXJncyBhcmUgc2NyZXdlZCEKLSAgICAgICAgICAgICAgIFdyaXRlIGFuIGVycm9yIG1lc3NhZ2UgdG8gc3Rkb3V0IHNvIHRoZXJlIGlzIGF0Ci0gICAgICAgICAgICAgICBsZWFzdCBzb21lIGNsdWUgZm9yIHRoZSBlbmQgdXNlciB3aGVuIGl0IGFwcGVhcnMKLSAgICAgICAgICAgICAgIGluIHRoZWlyIG91dHB1dC4KLSAgICAgICAgICAgICAgIEEgbWVzc2FnZSBib3ggd291bGQgYmUgaGlkZGVuIGFuZCBibG9ja3MgdGhlIGFwcC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJJbnRlcm5hbCBwb3BlbiBlcnJvciAtIG5vIGFyZ3Mgc3BlY2lmaWVkXG4lc1xuIiwgdXNhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAvKiBCdWlsZCB1cCB0aGUgY29tbWFuZC1saW5lIGZyb20gdGhlIGFyZ3MuCi0gICAgICAgQXJncyB3aXRoIGEgc3BhY2UgYXJlIHF1b3RlZCwgZXhpc3RpbmcgcXVvdGVzIGFyZSBlc2NhcGVkLgotICAgICAgIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUsIHdlIGFzc3VtZQotICAgICAgIGV2ZXJ5IGNoYXJhY3RlciBpcyBhIHF1b3RlIC0gaWUsIHdlIGFsbG9jYXRlIGRvdWJsZSB3aGF0IHdlIG5lZWQKLSAgICAgICBpbiB0aGUgd29yc3QgY2FzZS4gIEFzIHRoaXMgaXMgb25seSBkb3VibGUgdGhlIGNvbW1hbmQgbGluZSBwYXNzZWQKLSAgICAgICB0byB1cywgdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB0aGlzIGlzIHJlYXNvbmFibHkgc21hbGwsIHNvIHRoZSB0b3RhbCAKLSAgICAgICBhbGxvY2F0aW9uIHdpbGwgYWxtb3N0IGFsd2F5cyBiZSA8IDUxMiBieXRlcy4KLSAgICAqLwotICAgIGZvciAoaT0xO2k8YXJnYztpKyspCi0gICAgICAgIGNtZGxlbiArPSBzdHJsZW4oYXJndltpXSkqMiArIDM7IC8qIG9uZSBzcGFjZSwgbWF5YmUgMiBxdW90ZXMgKi8KLSAgICBjbWRsaW5lID0gY21kbGluZWZpbGwgPSAoY2hhciAqKW1hbGxvYyhjbWRsZW4rMSk7Ci0gICAgaWYgKGNtZGxpbmUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGZvciAoaT0xO2k8YXJnYztpKyspIHsKLSAgICAgICAgY29uc3QgY2hhciAqYXJnbG9vazsKLSAgICAgICAgaW50IGJRdW90ZSA9IHN0cmNocihhcmd2W2ldLCAnICcpICE9IE5VTEw7Ci0gICAgICAgIGlmIChiUXVvdGUpCi0gICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICciJzsKLSAgICAgICAgLyogZXNjYXBlIHF1b3RlcyAqLwotICAgICAgICBmb3IgKGFyZ2xvb2s9YXJndltpXTsqYXJnbG9vazthcmdsb29rKyspIHsKLSAgICAgICAgICAgIGlmICgqYXJnbG9vaz09JyInKQotICAgICAgICAgICAgICAgICpjbWRsaW5lZmlsbCsrID0gJ1xcJzsKLSAgICAgICAgICAgICpjbWRsaW5lZmlsbCsrID0gKmFyZ2xvb2s7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJRdW90ZSkKLSAgICAgICAgICAgICpjbWRsaW5lZmlsbCsrID0gJyInOwotICAgICAgICAqY21kbGluZWZpbGwrKyA9ICcgJzsKLSAgICB9Ci0gICAgKmNtZGxpbmVmaWxsID0gJ1wwJzsKLQotICAgIC8qIE1ha2UgY2hpbGQgcHJvY2VzcyB1c2UgdGhpcyBhcHAncyBzdGFuZGFyZCBmaWxlcy4gKi8KLSAgICBaZXJvTWVtb3J5KCZzaSwgc2l6ZW9mIHNpKTsKLSAgICBzaS5jYiA9IHNpemVvZiBzaTsKLSAgICBzaS5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7Ci0gICAgc2kuaFN0ZElucHV0ID0gR2V0U3RkSGFuZGxlKFNURF9JTlBVVF9IQU5ETEUpOwotICAgIHNpLmhTdGRPdXRwdXQgPSBHZXRTdGRIYW5kbGUoU1REX09VVFBVVF9IQU5ETEUpOwotICAgIHNpLmhTdGRFcnJvciA9IEdldFN0ZEhhbmRsZShTVERfRVJST1JfSEFORExFKTsKLQotICAgIGJSZXQgPSBDcmVhdGVQcm9jZXNzKAotICAgICAgICBOVUxMLCBjbWRsaW5lLAotICAgICAgICBOVUxMLCBOVUxMLAotICAgICAgICBUUlVFLCAwLAotICAgICAgICBOVUxMLCBOVUxMLAotICAgICAgICAmc2ksICZwaQotICAgICAgICApOwotCi0gICAgZnJlZShjbWRsaW5lKTsKLQotICAgIGlmIChiUmV0KSB7Ci0gICAgICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHBpLmhQcm9jZXNzLCBJTkZJTklURSkgIT0gV0FJVF9GQUlMRUQpIHsKLQkgICAgR2V0RXhpdENvZGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAmZXhpdF9jb2RlKTsKLQl9Ci0gICAgICAgIENsb3NlSGFuZGxlKHBpLmhQcm9jZXNzKTsKLSAgICAgICAgQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7Ci0gICAgICAgIHJldHVybiBleGl0X2NvZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9QQy93aW5yZWcuYyBiL1BDL3dpbnJlZy5jCmluZGV4IDNiOTY5M2MuLjU2M2EzZWIgMTAwNjQ0Ci0tLSBhL1BDL3dpbnJlZy5jCisrKyBiL1BDL3dpbnJlZy5jCkBAIC05MzcsNyArOTM3LDcgQEAKICAgICAgICAgICAgICAgICB3Y2hhcl90ICpkYXRhID0gKHdjaGFyX3QgKilyZXREYXRhQnVmOwogICAgICAgICAgICAgICAgIGludCBsZW4gPSByZXREYXRhU2l6ZSAvIDI7CiAgICAgICAgICAgICAgICAgaW50IHMgPSBjb3VudFN0cmluZ3MoZGF0YSwgbGVuKTsKLSAgICAgICAgICAgICAgICB3Y2hhcl90ICoqc3RyID0gKHdjaGFyX3QgKiopbWFsbG9jKHNpemVvZih3Y2hhcl90ICopKnMpOworICAgICAgICAgICAgICAgIHdjaGFyX3QgKipzdHIgPSAod2NoYXJfdCAqKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QgKikqcyk7CiAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKIApAQCAtOTU4LDcgKzk1OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHN0cltpbmRleF0sIGxlbikpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNzkzLDkgKzE3OTMsOSBAQAogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiSEtFWVR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikmUHlIS0VZX1R5cGUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0lOQ1JFRihQeUV4Y19XaW5kb3dzRXJyb3IpOworICAgIFB5X0lOQ1JFRihQeUV4Y19PU0Vycm9yKTsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgImVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEFkZCB0aGUgcmVsZXZhbnQgY29uc3RhbnRzICovCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ogYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCnJlbmFtZSB0byBQQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKaW5kZXggZDFhZmUyMi4uZDBlZTcyZiAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX292ZXJsYXBwZWQudmN4cHJvagpAQCAtMSw0ICsxLDQgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KQEAgLTM1LDEwNCArMzUsOTUgQEAKICAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgogICA8L0l0ZW1Hcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgotICAgIDxQcm9qZWN0R3VpZD57RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fTwvUHJvamVjdEd1aWQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+dzl4cG9wZW48L1Jvb3ROYW1lc3BhY2U+CisgICAgPFByb2plY3RHdWlkPntFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9PC9Qcm9qZWN0R3VpZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5fb3ZlcmxhcHBlZDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KICAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KICAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+CiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgpAQCAtMTU5LDEyNyArMTUwLDgzIEBACiAgICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcdzl4cG9wZW4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3ZlcmxhcHBlZC5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ogYi9QQ2J1aWxkL19zaGEzLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKY29weSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpjb3B5IHRvIFBDYnVpbGQvX3NoYTMudmN4cHJvagppbmRleCBkMWFmZTIyLi5mMjRjYmRjIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2oKKysrIGIvUENidWlsZC9fc2hhMy52Y3hwcm9qCkBAIC0zNSwxMDQgKzM1LDk1IEBACiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgPC9JdGVtR3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH08L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPnc5eHBvcGVuPC9Sb290TmFtZXNwYWNlPgorICAgIDxQcm9qZWN0R3VpZD57MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X3NoYTM8L1Jvb3ROYW1lc3BhY2U+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+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjcgKzE1MCw2NyBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcdzl4cG9wZW4uYyIgLz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zaGEzXHNoYTNtb2R1bGUuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+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+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKY29weSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpjb3B5IHRvIFBDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLjg0OTg0ZmYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvagpAQCAtMzUsMTA0ICszNSw5NSBAQAogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+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+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2ouZmlsdGVycwpzaW1pbGFyaXR5IGluZGV4IDcyJQpyZW5hbWUgZnJvbSBQQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycwpyZW5hbWUgdG8gUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2ouZmlsdGVycwppbmRleCBkZWM2N2FkLi5kYjBkMGE2IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycworKysgYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvai5maWx0ZXJzCkBAIC0yLDEyICsyLDEyIEBACiA8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXA+CiAgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2FiYzJkZmZkLTNmMmEtNDdiZC1iODliLTAzMTRjOTllZjIxZX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MWVjMzhhZDktMWFiZi00YjgwLTg2MjgtYWM0M2NjYmEzMjRifTwvVW5pcXVlSWRlbnRpZmllcj4KICAgICA8L0ZpbHRlcj4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1x3OXhwb3Blbi5jIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RpbXBvcnRtdWx0aXBsZS5jIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfc3NsLmJhdCBiL1BDYnVpbGQvYnVpbGRfc3NsLmJhdAppbmRleCAzNTdiMDhiLi44MDVkNzdhIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKKysrIGIvUENidWlsZC9idWlsZF9zc2wuYmF0CkBAIC0yLDEwICsyLDEwIEBACiBpZiBub3QgZGVmaW5lZCBIT1NUX1BZVEhPTiAoCiAgIGlmICUxIEVRVSBEZWJ1ZyAoCiAgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zM19kLmRsbCBleGl0IDEKKyAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzRfZC5kbGwgZXhpdCAxCiAgICkgRUxTRSAoCiAgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzMuZGxsIGV4aXQgMQorICAgIGlmIG5vdCBleGlzdCBweXRob24zNC5kbGwgZXhpdCAxCiAgICkKICkKICVIT1NUX1BZVEhPTiUgYnVpbGRfc3NsLnB5ICUxICUyICUzCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkgYi9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKaW5kZXggNDE5NmNmMy4uOWYwODYzMSAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF90a2ludGVyLnB5CisrKyBiL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQpAQCAtMTYsMTEgKzE2LDcgQEAKIFRJWCA9ICJ0aXgtOC40LjMueCIKIAogUk9PVCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oaGVyZSwgcGFyLCBwYXIpKQotIyBXaW5kb3dzIDIwMDAgY29tcGF0aWJpbGl0eTogV0lOVkVSIDB4MDUwMAotIyBodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzgzNzQ1LmFzcHgKLU5NQUtFID0gKCdubWFrZSAvbm9sb2dvIC9mICVzICcKLSAgICAnQ09NUElMRVJGTEFHUz1cIi1EV0lOVkVSPTB4MDUwMCAtRF9XSU4zMl9XSU5OVD0weDA1MDAgLUROVERESV9WRVJTSU9OPU5URERJX1dJTjJLU1A0XCIgJwotICAgICclcyAlcycpCitOTUFLRSA9ICgnbm1ha2UgL25vbG9nbyAvZiAlcyAlcyAlcycpCiAKIGRlZiBubWFrZShtYWtlZmlsZSwgY29tbWFuZD0iIiwgKiprdyk6CiAgICAgZGVmaW5lcyA9ICcgJy5qb2luKGsrJz0nK3N0cih2KSBmb3IgaywgdiBpbiBrdy5pdGVtcygpKQpkaWZmIC0tZ2l0IGEvUENidWlsZC9raWxsX3B5dGhvbi5jIGIvUENidWlsZC9raWxsX3B5dGhvbi5jCmluZGV4IGJiMzIzZDMuLjYwNDczMWYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQva2lsbF9weXRob24uYworKysgYi9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBYWFggVE9ETzogaWYgd2UgcmVhbGx5IHdhbnRlZCB0byBiZSBmYW5jeSwgd2UgY291bGQgY2hlY2sgdGhlIAogICAgICAgICAgKiBtb2R1bGVzIGZvciBhbGwgcHJvY2Vzc2VzIChub3QganVzdCB0aGUgcHl0aG9uW19kXS5leGUgb25lcykKLSAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zM1tfZF0uZGxsKSwKKyAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zNFtfZF0uZGxsKSwKICAgICAgICAgICogYXMgdGhhdCB3b3VsZCBhbHNvIGluaGliaXQgb3VyIGFiaWxpdHkgdG8gcmVidWlsZCB0aGUgc29sdXRpb24uCiAgICAgICAgICAqIE5vdCB3b3J0aCBsb29zaW5nIHNsZWVwIG92ZXIgdGhvdWdoOyBmb3Igbm93LCBhIHNpbXBsZSBjaGVjayAKICAgICAgICAgICogZm9yIGp1c3QgdGhlIHB5dGhvbiBleGVjdXRhYmxlIHNob3VsZCBiZSBzdWZmaWNpZW50LgpkaWZmIC0tZ2l0IGEvUENidWlsZC9wY2J1aWxkLnNsbiBiL1BDYnVpbGQvcGNidWlsZC5zbG4KaW5kZXggZDZhMDIyZi4uZmE4NmQ5YSAxMDA2NDQKLS0tIGEvUENidWlsZC9wY2J1aWxkLnNsbgorKysgYi9QQ2J1aWxkL3BjYnVpbGQuc2xuCkBAIC0xNCw4ICsxNCw2IEBACiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob253IiwgInB5dGhvbncudmN4cHJvaiIsICJ7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfSINCiBFbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3OXhwb3BlbiIsICJ3OXhwb3Blbi52Y3hwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLUVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjeHByb2oiLCAie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAid2luc291bmQiLCAid2luc291bmQudmN4cHJvaiIsICJ7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fSINCkBAIC0zOCw2ICszNiw4IEBACiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGNhcGkiLCAiX3Rlc3RjYXBpLnZjeHByb2oiLCAiezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RpbXBvcnRtdWx0aXBsZSIsICJfdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oiLCAiezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0iDQorRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3RraW50ZXIiLCAiX3RraW50ZXIudmN4cHJvaiIsICJ7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfYnoyIiwgIl9iejIudmN4cHJvaiIsICJ7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fSINCkBAIC03NCw2ICs3NCwxMCBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2ZyZWV6ZV9pbXBvcnRsaWIiLCAiX2ZyZWV6ZV9pbXBvcnRsaWIudmN4cHJvaiIsICJ7MTlDMEMxM0YtNDdDQS00NDMyLUFGRjMtNzk5QTI5NkE0RERDfSINCiBFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc2hhMyIsICJfc2hhMy52Y3hwcm9qIiwgInsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9Ig0KK0VuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9vdmVybGFwcGVkIiwgIl9vdmVybGFwcGVkLnZjeHByb2oiLCAie0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0iDQorRW5kUHJvamVjdA0KIEdsb2JhbA0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KIAkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KQEAgLTE1MCwyMiArMTU0LDYgQEAKIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KQEAgLTM0Miw2ICszMzAsMjIgQEAKIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCkBAIC02MTEsNiArNjE1LDM4IEBACiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7MTlDMEMxM0YtNDdDQS00NDMyLUFGRjMtNzk5QTI5NkE0RERDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJRW5kR2xvYmFsU2VjdGlvbg0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KIAkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXByb2plY3QucHJvcHMgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwppbmRleCA4MTU1MjMxLi42YmUwYmEyIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcworKysgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwpAQCAtMTMsNyArMTMsNyBAQAogICAgIDxJbnREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIj4KLSAgICA8UHlEbGxOYW1lPnB5dGhvbjMzJChQeURlYnVnRXh0KTwvUHlEbGxOYW1lPgorICAgIDxQeURsbE5hbWU+cHl0aG9uMzQkKFB5RGVidWdFeHQpPC9QeURsbE5hbWU+CiAgICAgPFB5dGhvbkV4ZT4kKE91dERpcilweXRob24kKFB5RGVidWdFeHQpLmV4ZTwvUHl0aG9uRXhlPgogICAgIDxLaWxsUHl0aG9uRXhlPiQoT3V0RGlyKWtpbGxfcHl0aG9uJChQeURlYnVnRXh0KS5leGU8L0tpbGxQeXRob25FeGU+CiAgICAgPGV4dGVybmFsc0Rpcj4uLlwuLjwvZXh0ZXJuYWxzRGlyPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob24udmN4cHJvaiBiL1BDYnVpbGQvcHl0aG9uLnZjeHByb2oKaW5kZXggZDBhOWRlMC4uYmQxMjYyNCAxMDA2NDQKLS0tIGEvUENidWlsZC9weXRob24udmN4cHJvagorKysgYi9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICA8TGluaz4KICAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXB5dGhvbl9kLmV4ZTwvT3V0cHV0RmlsZT4KICAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+MjEwMDAwMDwvU3RhY2tSZXNlcnZlU2l6ZT4KKyAgICAgIDxTdGFja1Jlc2VydmVTaXplPjQxOTQzMDQ8L1N0YWNrUmVzZXJ2ZVNpemU+CiAgICAgICA8QmFzZUFkZHJlc3M+MHgxZDAwMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CkBAIC0zNTcsMTIgKzM1Nyw4IEBACiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CiAgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgotICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Inc5eHBvcGVuLnZjeHByb2oiPgotICAgICAgPFByb2plY3Q+e2U5ZTBhMWY2LTAwMDktNGU4Yy1iOGY4LTFiOGY1ZDQ5YTA1OH08L1Byb2plY3Q+Ci0gICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ogYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvagppbmRleCAyOTQ5M2UzLi4xYjZlODY0IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvagorKysgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvagpAQCAtNDQ5LDYgKzQ0OSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHdlYWtyZWZvYmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX21hdGguaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmVfY29uc3RhbnRzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9saWIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x6bGliXGNyYzMyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5oIiAvPgpAQCAtNDc1LDYgKzQ3OCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxmYXN0c2VhcmNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxmaW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxwYXJ0aXRpb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHVuaWNvZGV0eXBlX2RiLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxQYXJzZXJccGFyc2VyLmgiIC8+CkBAIC01MDAsNiArNTA0LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3BpY2tsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcmUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3N0YXQuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3N0cnVjdC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfd2Vha3JlZi5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jIiAvPgpAQCAtNTE2LDcgKzUyMSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3BlcmF0b3IuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wZXJhdG9yLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xwb3NpeG1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYyIgLz4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDA5YjRiYjQuLmUxYTkzMDEgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzAwLDYgKzMwMCwxNSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9jb25zdGFudHMuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2xpYi5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXF9pbzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMzc4LDYgKzM4Nyw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxwYXJ0aXRpb24uaCI+CiAgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCI+CisgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiPgogICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC00OTgsNyArNTEwLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvcGVyYXRvci5jIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wZXJhdG9yLmMiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIj4KQEAgLTkxNiw2ICs5MjgsOSBAQAogICAgICAgPEZpbHRlcj5QQzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xuYW1lc3BhY2VvYmplY3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3N0YXQuYyI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9yZWFkbWUudHh0IGIvUENidWlsZC9yZWFkbWUudHh0CmluZGV4IGZjMjU5NTUuLjg4M2UzZDMgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcmVhZG1lLnR4dAorKysgYi9QQ2J1aWxkL3JlYWRtZS50eHQKQEAgLTEsMzIwICsxLDMyMCBAQAotQnVpbGRpbmcgUHl0aG9uIHVzaW5nIFZDKysgMTAuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQnVpbGRpbmcgUHl0aG9uIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgQysrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIGFuZCB4NjQgcGxhdGZvcm1zLCBlLmcuIAotV2luZG93cyAyMDAwLCBYUCwgVmlzdGEgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDguICBJbiBvcmRlciB0byBidWlsZCAzMi1iaXQKLWRlYnVnIGFuZCByZWxlYXNlIGV4ZWN1dGFibGVzLCBNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDEwIEV4cHJlc3MgRWRpdGlvbiBpcwotcmVxdWlyZWQgYXQgdGhlIHZlcnkgbGVhc3QuICBJbiBvcmRlciB0byBidWlsZCA2NC1iaXQgZGVidWcgYW5kIHJlbGVhc2UKLWV4ZWN1dGFibGVzLCBWaXN1YWwgU3R1ZGlvIDIwMTAgU3RhbmRhcmQgRWRpdGlvbiBpcyByZXF1aXJlZCBhdCB0aGUgdmVyeQotbGVhc3QuICBJbiBvcmRlciB0byBidWlsZCBhbGwgb2YgdGhlIGFib3ZlLCBhcyB3ZWxsIGFzIGdlbmVyYXRlIHJlbGVhc2UgYnVpbGRzCi10aGF0IG1ha2UgdXNlIG9mIFByb2ZpbGUgR3VpZGVkIE9wdGltaXNhdGlvbiAoUEcwKSwgVmlzdWFsIFN0dWRpbyAyMDEwCi1Qcm9mZXNzaW9uYWwgRWRpdGlvbiBpcyByZXF1aXJlZCBhdCB0aGUgdmVyeSBsZWFzdC4gIFRoZSBvZmZpY2lhbCBQeXRob24KLXJlbGVhc2VzIGFyZSBidWlsdCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaXN1YWwgU3R1ZGlvLgorVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBDUHl0aG9uIGZvciBNaWNyb3NvZnQgV2luZG93cyBOVCB2ZXJzaW9uCis1LjEgb3IgaGlnaGVyIChXaW5kb3dzIFhQLCBXaW5kb3dzIFNlcnZlciAyMDAzLCBvciBsYXRlcikgb24gMzIgYW5kIDY0CitiaXQgcGxhdGZvcm1zLiAgVXNpbmcgdGhpcyBkaXJlY3RvcnkgcmVxdWlyZXMgYW4gaW5zdGFsbGF0aW9uIG9mCitNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDEwIChNU1ZDIDEwLjApIG9mIGFueSBlZGl0aW9uLiAgVGhlIHNwZWNpZmljCityZXF1aXJlbWVudHMgYXJlIGFzIGZvbGxvd3M6CitWaXN1YWwgQysrIDIwMTAgRXhwcmVzcyBFZGl0aW9uCisgICAgUmVxdWlyZWQgZm9yIGJ1aWxkaW5nIDMyLWJpdCBEZWJ1ZyBhbmQgUmVsZWFzZSBjb25maWd1cmF0aW9uIGJ1aWxkcy4KKyAgICBUaGlzIGVkaXRpb24gZG9lcyBub3Qgc3VwcG9ydCAic29sdXRpb24gZm9sZGVycyIsIHdoaWNoIHBjYnVpbGQuc2xuCisgICAgdXNlczsgdGhpcyB3aWxsIG5vdCBwcmV2ZW50IGJ1aWxkaW5nLgorVmlzdWFsIFN0dWRpbyAyMDEwIFN0YW5kYXJkIEVkaXRpb24KKyAgICBSZXF1aXJlZCBmb3IgYnVpbGRpbmcgNjQtYml0IERlYnVnIGFuZCBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gYnVpbGRzCitWaXN1YWwgU3R1ZGlvIDIwMTAgUHJvZmVzc2lvbmFsIEVkaXRpb24KKyAgICBSZXF1aXJlZCBmb3IgYnVpbGRpbmcgUmVsZWFzZSBjb25maWd1cmF0aW9uIGJ1aWxkcyB0aGF0IG1ha2UgdXNlIG9mCisgICAgUHJvZmlsZSBHdWlkZWQgT3B0aW1pemF0aW9uIChQR08pLCBvbiBlaXRoZXIgcGxhdGZvcm0uICBUaGUgb2ZmaWNpYWwKKyAgICBQeXRob24gcmVsZWFzZXMgYXJlIGJ1aWx0IHdpdGggUHJvZmVzc2lvbmFsIEVkaXRpb24gdXNpbmcgUEdPLgogCi1Gb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL1BDL3JlYWRtZS50eHQuCitBbGwgeW91IG5lZWQgdG8gZG8gdG8gYnVpbGQgaXMgb3BlbiB0aGUgc29sdXRpb24gInBjYnVpbGQuc2xuIiBpbiBWaXN1YWwKK1N0dWRpbywgc2VsZWN0IHRoZSBkZXNpcmVkIGNvbWJpbmF0aW9uIG9mIGNvbmZpZ3VyYXRpb24gYW5kIHBsYXRmb3JtLAordGhlbiBidWlsZCB3aXRoICJCdWlsZCBTb2x1dGlvbiIgb3IgdGhlIEY3IGtleWJvYXJkIHNob3J0Y3V0LiAgWW91IGNhbgorYWxzbyBidWlsZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgdXNpbmcgdGhlICJidWlsZC5iYXQiIHNjcmlwdCBpbiB0aGlzCitkaXJlY3RvcnkuICBUaGUgc29sdXRpb24gaXMgY29uZmlndXJlZCB0byBidWlsZCB0aGUgcHJvamVjdHMgaW4gdGhlCitjb3JyZWN0IG9yZGVyLgogCi1BbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLnNsbiIgaW4gVmlzdWFsIFN0dWRpbywKLXNlbGVjdCB0aGUgZGVzaXJlZCBjb21iaW5hdGlvbiBvZiBjb25maWd1cmF0aW9uIGFuZCBwbGF0Zm9ybSBhbmQgZXZlbnR1YWxseQotYnVpbGQgdGhlIHNvbHV0aW9uLiBVbmxlc3MgeW91IGFyZSBnb2luZyB0byBkZWJ1ZyBhIHByb2JsZW0gaW4gdGhlIGNvcmUgb3IKLXlvdSBhcmUgZ29pbmcgdG8gY3JlYXRlIGFuIG9wdGltaXplZCBidWlsZCB5b3Ugd2FudCB0byBzZWxlY3QgIlJlbGVhc2UiIGFzCi1jb25maWd1cmF0aW9uLgorVGhlIHNvbHV0aW9uIGN1cnJlbnRseSBzdXBwb3J0cyB0d28gcGxhdGZvcm1zLiAgVGhlIFdpbjMyIHBsYXRmb3JtIGlzCit1c2VkIHRvIGJ1aWxkIHN0YW5kYXJkIHg4Ni1jb21wYXRpYmxlIDMyLWJpdCBiaW5hcmllcywgb3V0cHV0IGludG8gdGhpcworZGlyZWN0b3J5LiAgVGhlIHg2NCBwbGF0Zm9ybSBpcyB1c2VkIGZvciBidWlsZGluZyA2NC1iaXQgQU1ENjQgKGFrYQoreDg2XzY0IG9yIEVNNjRUKSBiaW5hcmllcywgb3V0cHV0IGludG8gdGhlIGFtZDY0IHN1Yi1kaXJlY3Rvcnkgd2hpY2gKK3dpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuICBUaGUgSXRhbml1bSAoSUEtNjQpCitwbGF0Zm9ybSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgU2VlIHRoZSAiQnVpbGRpbmcgZm9yIEFNRDY0IiBzZWN0aW9uCitiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCA2NC1iaXQgYnVpbGRzLgogCi1UaGUgUENidWlsZCBkaXJlY3RvcnkgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGZyb20KLVZTIEMrKyBFeHByZXNzIEVkaXRpb24gb3ZlciB0aGUgc3RhbmRhcmQgZWRpdGlvbiB1cCB0byB0aGUgcHJvZmVzc2lvbmFsCi1lZGl0aW9uLiBIb3dldmVyIHRoZSBleHByZXNzIGVkaXRpb24gZG9lcyBub3Qgc3VwcG9ydCBmZWF0dXJlcyBsaWtlIHNvbHV0aW9uCi1mb2xkZXJzIG9yIHByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbiAoUEdPKS4gVGhlIG1pc3NpbmcgYml0cyBhbmQgcGllY2VzCi13b24ndCBzdG9wIHlvdSBmcm9tIGJ1aWxkaW5nIFB5dGhvbi4KK0ZvdXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHNvbHV0aW9uOgorRGVidWcKKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiB3aXRoIGV4dHJhIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMsIGVxdWl2YWxlbnQKKyAgICB0byB1c2luZyAuL2NvbmZpZ3VyZSAtLXdpdGgtcHlkZWJ1ZyBvbiBVTklYLiAgQWxsIGJpbmFyaWVzIGJ1aWx0CisgICAgdXNpbmcgdGhpcyBjb25maWd1cmF0aW9uIGhhdmUgIl9kIiBhZGRlZCB0byB0aGVpciBuYW1lOgorICAgIHB5dGhvbjM0X2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLiAgQm90aCB0aGUKKyAgICBidWlsZCBhbmQgcnQgKHJ1biB0ZXN0KSBiYXRjaCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhY2NlcHQgYSAtZAorICAgIG9wdGlvbiBmb3IgZGVidWcgYnVpbGRzLiAgSWYgeW91IGFyZSBidWlsZGluZyBQeXRob24gdG8gaGVscCB3aXRoCisgICAgZGV2ZWxvcG1lbnQgb2YgQ1B5dGhvbiwgeW91IHdpbGwgbW9zdCBsaWtlbHkgdXNlIHRoaXMgY29uZmlndXJhdGlvbi4KK1BHSW5zdHJ1bWVudCwgUEdVcGRhdGUKKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiBpbiBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gdXNpbmcgUEdPLCB3aGljaAorICAgIHJlcXVpcmVzIFByb2Zlc3Npb25hbCBFZGl0aW9uIG9mIFZpc3VhbCBTdHVkaW8uICBTZWUgdGhlICJQcm9maWxlCisgICAgR3VpZGVkIE9wdGltaXphdGlvbiIgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIEJ1aWxkCisgICAgb3V0cHV0IGZyb20gZWFjaCBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBsYW5kcyBpbiBpdHMgb3duCisgICAgc3ViLWRpcmVjdG9yeSBvZiB0aGlzIGRpcmVjdG9yeS4gIFRoZSBvZmZpY2lhbCBQeXRob24gcmVsZWFzZXMgYXJlCisgICAgYnVpbHQgdXNpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMuCitSZWxlYXNlCisgICAgVXNlZCB0byBidWlsZCBQeXRob24gYXMgaXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBpbiBwcm9kdWN0aW9uCisgICAgc2V0dGluZ3MsIHRob3VnaCB3aXRob3V0IFBHTy4KIAotVGhlIHNvbHV0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgdGhlIHByb2plY3RzIGluIHRoZSBjb3JyZWN0IG9yZGVyLiAiQnVpbGQKLVNvbHV0aW9uIiBvciBGNyB0YWtlcyBjYXJlIG9mIGRlcGVuZGVuY2llcyBleGNlcHQgZm9yIHg2NCBidWlsZHMuIFRvIG1ha2UKLWNyb3NzIGNvbXBpbGluZyB4NjQgYnVpbGRzIG9uIGEgMzJiaXQgT1MgcG9zc2libGUgdGhlIHg2NCBidWlsZHMgcmVxdWlyZSBhIAotMzJiaXQgdmVyc2lvbiBvZiBQeXRob24uCi0KLU5PVEU6Ci0gICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBidWlsZCBtb3N0IG9mIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgdW5sZXNzCi0gICB5b3UncmUgYnVpbGRpbmcgYW4gZW50aXJlIFB5dGhvbiBkaXN0cmlidXRpb24gZnJvbSBzY3JhdGNoLCBvcgotICAgc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50LCBvciBhcmUKLSAgIHJ1bm5pbmcgYSBQeXRob24gY29yZSBidWlsZGJvdCB0ZXN0IHNsYXZlOyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCi0KLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uIEJvdGgKLXRoZSBidWlsZCBhbmQgcnQgYmF0Y2ggZmlsZXMgYWNjZXB0IGEgLWQgb3B0aW9uIGZvciBkZWJ1ZyBidWlsZHMuCi0KLVRoZSAzMmJpdCBidWlsZHMgZW5kIHVwIGluIHRoZSBzb2x1dGlvbiBmb2xkZXIgUENidWlsZCB3aGlsZSB0aGUgeDY0IGJ1aWxkcwotbGFuZCBpbiB0aGUgYW1kNjQgc3ViZm9sZGVyLiBUaGUgUEdJIGFuZCBQR08gYnVpbGRzIGZvciBwcm9maWxlIGd1aWRlZAotb3B0aW1pemF0aW9uIGVuZCB1cCBpbiB0aGVpciBvd24gZm9sZGVycywgdG9vLgogCiBMZWdhY3kgc3VwcG9ydAogLS0tLS0tLS0tLS0tLS0KIAotWW91IGNhbiBmaW5kIGJ1aWxkIGRpcmVjdG9yaWVzIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGFuZCAKLVZpc3VhbCBDKysgaW4gdGhlIFBDIGRpcmVjdG9yeS4gVGhlIGxlZ2FjeSBidWlsZCBkaXJlY3RvcmllcyBhcmUgbm8gbG9uZ2VyCi1hY3RpdmVseSBtYWludGFpbmVkIGFuZCBtYXkgbm90IHdvcmsgb3V0IG9mIHRoZSBib3guCitZb3UgY2FuIGZpbmQgYnVpbGQgZGlyZWN0b3JpZXMgZm9yIG9sZGVyIHZlcnNpb25zIG9mIFZpc3VhbCBTdHVkaW8gYW5kCitWaXN1YWwgQysrIGluIHRoZSBQQyBkaXJlY3RvcnkuIFRoZSBsZWdhY3kgYnVpbGQgZGlyZWN0b3JpZXMgYXJlIG5vCitsb25nZXIgYWN0aXZlbHkgbWFpbnRhaW5lZCBhbmQgbWF5IG5vdCB3b3JrIG91dCBvZiB0aGUgYm94LgogCi1QQy9WQzYvCi0gICAgVmlzdWFsIEMrKyA2LjAKLVBDL1ZTNy4xLwotICAgIFZpc3VhbCBTdHVkaW8gMjAwMyAoNy4xKQotUEMvVlM4LjAvCi0gICAgVmlzdWFsIFN0dWRpbyAyMDA1ICg4LjApCi1QQy9WUzkuMC8KLSAgICBWaXN1YWwgU3R1ZGlvIDIwMDggKDkuMCkKK0N1cnJlbnRseSwgdGhlIG9ubHkgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yeSBpcyBQQ1xWUzkuMCwgZm9yIFZpc3VhbAorU3R1ZGlvIDIwMDggKDkuMCkuCiAKIAotQyBSVU5USU1FCitDIFJ1bnRpbWUKIC0tLS0tLS0tLQogCi1WaXN1YWwgU3R1ZGlvIDIwMTAgdXNlcyB2ZXJzaW9uIDEwIG9mIHRoZSBDIHJ1bnRpbWUgKE1TVkNSVDkpLiAgVGhlIGV4ZWN1dGFibGVzCi1ubyBsb25nZXIgdXNlIHRoZSAiU2lkZSBieSBTaWRlIiBhc3NlbWJsaWVzIHVzZWQgaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlCi1jb21waWxlci4gIFRoaXMgc2ltcGxpZmllcyBkaXN0cmlidXRpb24gb2YgYXBwbGljYXRpb25zLgotVGhlIHJ1biB0aW1lIGxpYnJhcmllcyBhcmUgYXZhbGlibGUgdW5kZXIgdGhlIFZDL1JlZGlzdCBmb2xkZXIgb2YgeW91ciB2aXN1YWwgc3R1ZGlvCi1kaXN0cmlidXRpb24uIEZvciBtb3JlIGluZm8sIHNlZSB0aGUgUmVhZG1lIGluIHRoZSBWQy9SZWRpc3QgZm9sZGVyLgorVmlzdWFsIFN0dWRpbyAyMDEwIHVzZXMgdmVyc2lvbiAxMCBvZiB0aGUgQyBydW50aW1lIChNU1ZDUlQxMCkuICBUaGUKK2V4ZWN1dGFibGVzIG5vIGxvbmdlciB1c2UgdGhlICJTaWRlIGJ5IFNpZGUiIGFzc2VtYmxpZXMgdXNlZCBpbiBwcmV2aW91cwordmVyc2lvbnMgb2YgdGhlIGNvbXBpbGVyLiAgVGhpcyBzaW1wbGlmaWVzIGRpc3RyaWJ1dGlvbiBvZiBhcHBsaWNhdGlvbnMuCiAKLVNVQlBST0pFQ1RTCi0tLS0tLS0tLS0tLQotVGhlc2Ugc3VicHJvamVjdHMgc2hvdWxkIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgU3VicHJvamVjdHMgb3RoZXIgdGhhbiB0aGUKLW1haW4gb25lcyAocHl0aG9uY29yZSwgcHl0aG9uLCBweXRob253KSBnZW5lcmFsbHkgYnVpbGQgYSBETEwgKHJlbmFtZWQgdG8KLS5weWQpIGZyb20gYSBzcGVjaWZpYyBtb2R1bGUgc28gdGhhdCB1c2VycyBkb24ndCBoYXZlIHRvIGxvYWQgdGhlIGNvZGUKLXN1cHBvcnRpbmcgdGhhdCBtb2R1bGUgdW5sZXNzIHRoZXkgaW1wb3J0IHRoZSBtb2R1bGUuCitUaGUgcnVuIHRpbWUgbGlicmFyaWVzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFZDL1JlZGlzdCBmb2xkZXIgb2YgeW91cgorVmlzdWFsIFN0dWRpbyBkaXN0cmlidXRpb24uIEZvciBtb3JlIGluZm8sIHNlZSB0aGUgUmVhZG1lIGluIHRoZQorVkMvUmVkaXN0IGZvbGRlci4KIAorCitTdWItUHJvamVjdHMKKy0tLS0tLS0tLS0tLQorCitUaGUgQ1B5dGhvbiBwcm9qZWN0IGlzIHNwbGl0IHVwIGludG8gc2V2ZXJhbCBzbWFsbGVyIHN1Yi1wcm9qZWN0cyB3aGljaAorYXJlIG1hbmFnZWQgYnkgdGhlIHBjYnVpbGQuc2xuIHNvbHV0aW9uIGZpbGUuICBFYWNoIHN1Yi1wcm9qZWN0IGlzCityZXByZXNlbnRlZCBieSBhIC52Y3hwcm9qIGFuZCBhIC52Y3hwcm9qLmZpbHRlcnMgZmlsZSBzdGFydGluZyB3aXRoIHRoZQorbmFtZSBvZiB0aGUgc3ViLXByb2plY3QuICBUaGVzZSBzdWItcHJvamVjdHMgZmFsbCBpbnRvIGEgZmV3IGdlbmVyYWwKK2NhdGVnb3JpZXM6CisKK1RoZSBmb2xsb3dpbmcgc3ViLXByb2plY3RzIHJlcHJlc2VudCB0aGUgYmFyZSBtaW5pbXVtIHJlcXVpcmVkIHRvIGJ1aWxkCithIGZ1bmN0aW9uaW5nIENQeXRob24gaW50ZXJwcmV0ZXIuICBJZiBub3RoaW5nIGVsc2UgYnVpbGRzIGJ1dCB0aGVzZSwKK3lvdSdsbCBoYXZlIGEgdmVyeSBsaW1pdGVkIGJ1dCB1c2FibGUgcHl0aG9uLmV4ZToKIHB5dGhvbmNvcmUKICAgICAuZGxsIGFuZCAubGliCiBweXRob24KICAgICAuZXhlCitraWxsX3B5dGhvbgorICAgIGtpbGxfcHl0aG9uLmV4ZSwgYSBzbWFsbCBwcm9ncmFtIGRlc2lnbmVkIHRvIGtpbGwgYW55IGluc3RhbmNlcyBvZgorICAgIHB5dGhvbihfZCkuZXhlIHRoYXQgYXJlIHJ1bm5pbmcgYW5kIGxpdmUgaW4gdGhlIGJ1aWxkIG91dHB1dAorICAgIGRpcmVjdG9yeTsgdGhpcyBpcyBtZWFudCB0byBhdm9pZCBidWlsZCBpc3N1ZXMgZHVlIHRvIGxvY2tlZCBmaWxlcworbWFrZV9idWlsZGluZm8sIG1ha2VfdmVyc2lvbmluZm8KKyAgICBoZWxwZXJzIHRvIHByb3ZpZGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHRoZSBidWlsZCBwcm9jZXNzCisKK1RoZXNlIHN1Yi1wcm9qZWN0cyBwcm92aWRlIGV4dHJhIGV4ZWN1dGFibGVzIHRoYXQgYXJlIHVzZWZ1bCBmb3IgcnVubmluZworQ1B5dGhvbiBpbiBkaWZmZXJlbnQgd2F5czoKIHB5dGhvbncKLSAgICBweXRob253LmV4ZSwgYSB2YXJpYW50IG9mIHB5dGhvbi5leGUgdGhhdCBkb2Vzbid0IHBvcCB1cCBhIERPUyBib3gKKyAgICBweXRob253LmV4ZSwgYSB2YXJpYW50IG9mIHB5dGhvbi5leGUgdGhhdCBkb2Vzbid0IG9wZW4gYSBDb21tYW5kCisgICAgUHJvbXB0IHdpbmRvdworcHlsYXVuY2hlcgorICAgIHB5LmV4ZSwgdGhlIFB5dGhvbiBMYXVuY2hlciBmb3IgV2luZG93cywgc2VlCisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy93aW5kb3dzLmh0bWwjbGF1bmNoZXIKK3B5d2xhdW5jaGVyCisgICAgcHl3LmV4ZSwgYSB2YXJpYW50IG9mIHB5LmV4ZSB0aGF0IGRvZXNuJ3Qgb3BlbiBhIENvbW1hbmQgUHJvbXB0CisgICAgd2luZG93CisKK1RoZXNlIGFyZSBtaXNjZWxsYW5lb3VzIHN1Yi1wcm9qZWN0cyB0aGF0IGRvbid0IHJlYWxseSBmaXQgdGhlIG90aGVyCitjYXRlZ29yaWVzLiAgQnkgZGVmYXVsdCwgdGhlc2UgcHJvamVjdHMgZG8gbm90IGJ1aWxkIGluIERlYnVnCitjb25maWd1cmF0aW9uOgorX2ZyZWV6ZV9pbXBvcnRsaWIKKyAgICBfZnJlZXplX2ltcG9ydGxpYi5leGUsIHVzZWQgdG8gcmVnZW5lcmF0ZSBQeXRob25caW1wb3J0bGliLmggYWZ0ZXIKKyAgICBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIExpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weQorYmRpc3Rfd2luaW5zdAorICAgIC4uXExpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTEwLjBbLWFtZDY0XS5leGUsIHRoZSBiYXNlCisgICAgZXhlY3V0YWJsZSB1c2VkIGJ5IHRoZSBkaXN0dXRpbHMgYmRpc3Rfd2luaW5zdCBjb21tYW5kCitweXRob24zZGxsCisgICAgcHl0aG9uMy5kbGwsIHRoZSBQRVAgMzg0IFN0YWJsZSBBQkkgZGxsCit4eGxpbWl0ZWQKKyAgICBidWlsZHMgYW4gZXhhbXBsZSBtb2R1bGUgdGhhdCBtYWtlcyB1c2Ugb2YgdGhlIFBFUCAzODQgU3RhYmxlIEFCSSwKKyAgICBzZWUgTW9kdWxlc1x4eGxpbWl0ZWQuYworCitUaGUgZm9sbG93aW5nIHN1Yi1wcm9qZWN0cyBhcmUgZm9yIGluZGl2aWR1YWwgbW9kdWxlcyBvZiB0aGUgc3RhbmRhcmQKK2xpYnJhcnkgd2hpY2ggYXJlIGltcGxlbWVudGVkIGluIEM7IGVhY2ggb25lIGJ1aWxkcyBhIERMTCAocmVuYW1lZCB0bworLnB5ZCkgb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcHJvamVjdDoKK19jdHlwZXMKK19jdHlwZXNfdGVzdAorX2RlY2ltYWwKK19lbGVtZW50dHJlZQorX2hhc2hsaWIKK19tc2kKK19tdWx0aXByb2Nlc3NpbmcKK19vdmVybGFwcGVkCitfc2hhMwogX3NvY2tldAotICAgIHNvY2tldG1vZHVsZS5jCiBfdGVzdGNhcGkKLSAgICB0ZXN0cyBvZiB0aGUgUHl0aG9uIEMgQVBJLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKIF90ZXN0YnVmZmVyCi0gICAgYnVmZmVyIHByb3RvY29sIHRlc3RzLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCitfdGVzdGltcG9ydG11bHRpcGxlCiBweWV4cGF0Ci0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIGFjY2VsZXJhdGVkIFhNTCBwYXJzaW5nLCB3aGljaCBpbmNvcnBvcmF0ZXMgc3RhYmxlCi0gICAgY29kZSBmcm9tIHRoZSBFeHBhdCBwcm9qZWN0OiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBhdC8KIHNlbGVjdAotICAgIHNlbGVjdG1vZHVsZS5jCiB1bmljb2RlZGF0YQotICAgIGxhcmdlIHRhYmxlcyBvZiBVbmljb2RlIGRhdGEKIHdpbnNvdW5kCi0gICAgcGxheSBzb3VuZHMgKHR5cGljYWxseSAud2F2IGZpbGVzKSB1bmRlciBXaW5kb3dzCiAKLVB5dGhvbi1jb250cm9sbGVkIHN1YnByb2plY3RzIHRoYXQgd3JhcCBleHRlcm5hbCBwcm9qZWN0czoKLV9zcWxpdGUzCi0gICAgV3JhcHMgU1FMaXRlIDMuNy40LCB3aGljaCBpcyBjdXJyZW50bHkgYnVpbHQgYnkgc3FsaXRlMy52Y3Byb2ogKHNlZSBiZWxvdykuCi1fdGtpbnRlcgotICAgIFdyYXBzIHRoZSBUayB3aW5kb3dpbmcgc3lzdGVtLiAgVW5saWtlIF9zcWxpdGUzLCB0aGVyZSdzIG5vCi0gICAgY29ycmVzcG9uZGluZyB0Y2x0ay52Y3Byb2otdHlwZSBwcm9qZWN0IHRoYXQgYnVpbGRzIFRjbC9UayBmcm9tIHZjcHJvaidzCi0gICAgd2l0aGluIG91ciBwY2J1aWxkLnNsbiwgd2hpY2ggbWVhbnMgdGhpcyBtb2R1bGUgZXhwZWN0cyB0byBmaW5kIGEKLSAgICBwcmUtYnVpbHQgVGNsL1RrIGluIGVpdGhlciAuLlwuLlx0Y2x0ayBmb3IgMzItYml0IG9yIC4uXC4uXHRjbHRrNjQgZm9yCi0gICAgNjQtYml0IChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuICBTZWUgYmVsb3cgZm9yIGluc3RydWN0aW9ucyB0byBidWlsZAotICAgIFRjbC9Uay4gCitUaGUgZm9sbG93aW5nIFB5dGhvbi1jb250cm9sbGVkIHN1Yi1wcm9qZWN0cyB3cmFwIGV4dGVybmFsIHByb2plY3RzLgorTm90ZSB0aGF0IHRoZXNlIGV4dGVybmFsIGxpYnJhcmllcyBhcmUgbm90IG5lY2Vzc2FyeSBmb3IgYSB3b3JraW5nCitpbnRlcnByZXRlciwgYnV0IHRoZXkgZG8gaW1wbGVtZW50IHNldmVyYWwgbWFqb3IgZmVhdHVyZXMuICBTZWUgdGhlCisiR2V0dGluZyBFeHRlcm5hbCBTb3VyY2VzIiBzZWN0aW9uIGJlbG93IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCithYm91dCBnZXR0aW5nIHRoZSBzb3VyY2UgZm9yIGJ1aWxkaW5nIHRoZXNlIGxpYnJhcmllcy4gIFRoZSBzdWItcHJvamVjdHMKK2FyZToKIF9iejIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIGxpYmJ6aXAyIGNvbXByZXNzaW9uIGxpYnJhcnkuICBIb21lcGFnZQorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB2ZXJzaW9uIDEuMC42IG9mIHRoZSBsaWJiemlwMiBjb21wcmVzc2lvbiBsaWJyYXJ5CisgICAgSG9tZXBhZ2U6CiAgICAgICAgIGh0dHA6Ly93d3cuYnppcC5vcmcvCi0gICAgRG93bmxvYWQgdGhlIHNvdXJjZSBmcm9tIHRoZSBweXRob24ub3JnIGNvcHkgaW50byB0aGUgZGlzdAotICAgIGRpcmVjdG9yeToKLQotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2J6aXAyLTEuMC42Ci0KLSAgICAqKiBOT1RFOiBpZiB5b3UgdXNlIHRoZSBUb29sc1xidWlsZGJvdFxleHRlcm5hbCgtYW1kNjQpLmJhdCBhcHByb2FjaCBmb3IKLSAgICBvYnRhaW5pbmcgZXh0ZXJuYWwgc291cmNlcyB0aGVuIHlvdSBkb24ndCBuZWVkIHRvIG1hbnVhbGx5IGdldCB0aGUgc291cmNlCi0gICAgYWJvdmUgdmlhIHN1YnZlcnNpb24uICoqCi0KLSAgICBBIGN1c3RvbSBwcmUtbGluayBzdGVwIGluIHRoZSBiejIgcHJvamVjdCBzZXR0aW5ncyBzaG91bGQgbWFuYWdlIHRvCi0gICAgYnVpbGQgYnppcDItMS4wLjZcbGliYnoyLmxpYiBieSBtYWdpYyBiZWZvcmUgYnoyLnB5ZCAob3IgYnoyX2QucHlkKSBpcwotICAgIGxpbmtlZCBpbiBQQ2J1aWxkXC4KLSAgICBIb3dldmVyLCB0aGUgYnoyIHByb2plY3QgaXMgbm90IHNtYXJ0IGVub3VnaCB0byByZW1vdmUgYW55dGhpbmcgdW5kZXIKLSAgICBiemlwMi0xLjAuNlwgd2hlbiB5b3UgZG8gYSBjbGVhbiwgc28gaWYgeW91IHdhbnQgdG8gcmVidWlsZCBiemlwMi5saWIKLSAgICB5b3UgbmVlZCB0byBjbGVhbiB1cCBiemlwMi0xLjAuNlwgYnkgaGFuZC4KLQotICAgIEFsbCBvZiB0aGlzIG1hbmFnZWQgdG8gYnVpbGQgbGliYnoyLmxpYiBpbiAKLSAgICBiemlwMi0xLjAuNlwkcGxhdGZvcm0tJGNvbmZpZ3VyYXRpb25cLCB3aGljaCB0aGUgUHl0aG9uIHByb2plY3QgbGlua3MgaW4uCiBfbHptYQotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGlibHptYSBjb21wcmVzc2lvbiBsaWJyYXJ5LgotCi0gICAgRG93bmxvYWQgdGhlIHByZS1idWlsdCBXaW5kb3dzIGJpbmFyaWVzIGZyb20gaHR0cDovL3R1a2Fhbmkub3JnL3h6LywgYW5kCi0gICAgZXh0cmFjdCB0byAuLlx4ei01LjAuMy4gSWYgeW91IGFyZSB1c2luZyBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgbGlibHptYSwKLSAgICBpdCB3aWxsIGJlIG5lY2Vzc2FyeSB0byByZW5hbWUgdGhlIGRpcmVjdG9yeSBmcm9tIHh6LTxWRVJTSU9OPiB0byB4ei01LjAuMy4KLQorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGlibHptYSBjb21wcmVzc2lvbiBsaWJyYXJ5LCB1c2luZyBwcmUtYnVpbHQKKyAgICBiaW5hcmllcyBvZiBYWiBVdGlscyB2ZXJzaW9uIDUuMC4zCisgICAgSG9tZXBhZ2U6CisgICAgICAgIGh0dHA6Ly90dWthYW5pLm9yZy94ei8KIF9zc2wKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIHNlY3VyZSBzb2NrZXRzIGxpYnJhcnkuCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHZlcnNpb24gMS4wLjFlIG9mIHRoZSBPcGVuU1NMIHNlY3VyZSBzb2NrZXRzCisgICAgbGlicmFyeSwgd2hpY2ggaXMgYnVpbHQgYnkgc3NsLnZjeHByb2oKKyAgICBIb21lcGFnZToKKyAgICAgICAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8KIAotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAorICAgIEJ1aWxkaW5nIE9wZW5TU0wgcmVxdWlyZXMgbmFzbS5leGUgKHRoZSBOZXR3aWRlIEFzc2VtYmxlciksIHZlcnNpb24KKyAgICAyLjEwIG9yIG5ld2VyIGZyb20KKyAgICAgICAgaHR0cDovL3d3dy5uYXNtLnVzLworICAgIHRvIGJlIHNvbWV3aGVyZSBvbiB5b3VyIFBBVEguICBNb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiBPcGVuU1NMIG1heQorICAgIG5lZWQgYSBsYXRlciB2ZXJzaW9uIG9mIE5BU00uIElmIE9wZW5TU0wncyBzZWxmIHRlc3RzIGRvbid0IHBhc3MsCisgICAgeW91IHNob3VsZCBmaXJzdCB0cnkgdG8gdXBkYXRlIE5BU00gYW5kIGRvIGEgZnVsbCByZWJ1aWxkIG9mCisgICAgT3BlblNTTC4KIAotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL29wZW5zc2wtMS4wLjFlCi0KLSAgICAqKiBOT1RFOiBpZiB5b3UgdXNlIHRoZSBUb29sc1xidWlsZGJvdFxleHRlcm5hbCgtYW1kNjQpLmJhdCBhcHByb2FjaCBmb3IKLSAgICBvYnRhaW5pbmcgZXh0ZXJuYWwgc291cmNlcyB0aGVuIHlvdSBkb24ndCBuZWVkIHRvIG1hbnVhbGx5IGdldCB0aGUgc291cmNlCi0gICAgYWJvdmUgdmlhIHN1YnZlcnNpb24uICoqCi0KLSAgICBBbHRlcm5hdGl2ZWx5LCBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gaHR0cDovL3d3dy5vcGVuc3NsLm9yZy4KLSAgICBZb3UgY2FuICh0aGVvcmV0aWNhbGx5KSB1c2UgYW55IHZlcnNpb24gb2YgT3BlblNTTCB5b3UgbGlrZSAtIHRoZQotICAgIGJ1aWxkIHByb2Nlc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgbGF0ZXN0IHZlcnNpb24uCi0KLSAgICBZb3UgbXVzdCBpbnN0YWxsIHRoZSBOQVNNIGFzc2VtYmxlciAyLjEwIG9yIG5ld2VyIGZyb20KLSAgICAgICAgaHR0cDovL25hc20uc2YubmV0Ci0gICAgZm9yIHg4NiBidWlsZHMuICBQdXQgbmFzbXcuZXhlIGFueXdoZXJlIGluIHlvdXIgUEFUSC4gTW9yZSByZWNlbnQKLSAgICB2ZXJzaW9ucyBvZiBPcGVuU1NMIG1heSBuZWVkIGEgbGF0ZXIgdmVyc2lvbiBvZiBOQVNNLiBJZiBPcGVuU1NMJ3Mgc2VsZgotICAgIHRlc3RzIGRvbid0IHBhc3MsIHlvdSBzaG91bGQgZmlyc3QgdHJ5IHRvIHVwZGF0ZSBOQVNNIGFuZCBkbyBhIGZ1bGwKLSAgICByZWJ1aWxkIG9mIE9wZW5TU0wuCi0gICAgTm90ZTogcmVjZW50IHJlbGVhc2VzIG9mIG5hc20gb25seSBoYXZlIG5hc20uZXhlLiBKdXN0IHJlbmFtZSBpdCB0byAKLSAgICBuYXNtdy5leGUuCi0KLSAgICBZb3UgY2FuIGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KKyAgICBJZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbQorICAgIHB5dGhvbi5vcmcncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnksIFBlcmwgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlCisgICAgbmVjZXNzYXJ5IG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuICBBY3RpdmVQZXJsIGlzIGF2YWlsYWJsZQorICAgIGZyb20KICAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8KLSAgICBpZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbSAKLSAgICBweXRob24ncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuIFRoZSBzdm4gdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbGQKLSAgICBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgorICAgIFRoZSBzdm4ucHl0aG9uLm9yZyB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsdCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5CisgICAgZmlsZXMuCiAKLSAgICBUaGUgYnVpbGQgcHJvY2VzcyBtYWtlcyBzdXJlIHRoYXQgbm8gcGF0ZW50ZWQgYWxnb3JpdGhtcyBhcmUgaW5jbHVkZWQuCi0gICAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiBZb3UgbWF5IGhhdmUgCi0gICAgdG8gbWFudWFsbHkgcmVtb3ZlICQoT0JKX0QpXGlfKi5vYmogZnJvbSBtc1xudC5tYWsgaWYgdGhlIGJ1aWxkIHByb2Nlc3MKLSAgICBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBmaWxlcyBvciBmb3JiaWRkZW4gSURFQS4gQWdhaW4gdGhlIGZpbGVzIHByb3ZpZGVkCi0gICAgaW4gdGhlIHN1YnZlcnNpb24gcmVwb3NpdG9yeSBhcmUgYWxyZWFkeSBmaXhlZC4KKyAgICBUaGUgYnVpbGQgcHJvY2VzcyBtYWtlcyBzdXJlIHRoYXQgbm8gcGF0ZW50ZWQgYWxnb3JpdGhtcyBhcmUKKyAgICBpbmNsdWRlZC4gIEZvciBub3cgUkM1LCBNREMyIGFuZCBJREVBIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4KKyAgICBZb3UgbWF5IGhhdmUgdG8gbWFudWFsbHkgcmVtb3ZlICQoT0JKX0QpXGlfKi5vYmogZnJvbSBtc1xudC5tYWsgaWYKKyAgICB1c2luZyBvZmZpY2lhbCBzb3VyY2VzOyB0aGUgc3ZuLnB5dGhvbi5vcmctaG9zdGVkIHZlcnNpb24gaXMgYWxyZWFkeQorICAgIGZpeGVkLgogCi0gICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQ0J1aWxkL2J1aWxkX3NzbC5weSB0byBwZXJmb3JtCi0gICAgdGhlIGJ1aWxkLiAgVGhpcyBQeXRob24gc2NyaXB0IGxvY2F0ZXMgYW5kIGJ1aWxkcyB5b3VyIE9wZW5TU0wKLSAgICBpbnN0YWxsYXRpb24sIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBtYWtlZmlsZSB0byBidWlsZCB0aGUgZmluYWwgLnB5ZC4KKyAgICBUaGUgc3NsLnZjeHByb2ogc3ViLXByb2plY3Qgc2ltcGx5IGludm9rZXMgUENidWlsZC9idWlsZF9zc2wucHksCisgICAgd2hpY2ggbG9jYXRlcyBhbmQgYnVpbGRzIE9wZW5TU0wuCiAKICAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QKICAgICBiZWluZyBhYmxlIHRvIGZpbmQgT3BlblNTTCBzb3VyY2VzLCBvciBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgUGVybAotICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4KLSAgICBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkKLSAgICAoZWcsIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZQotICAgIGEgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKKyAgICB0aGF0IHdvcmtzIHdpdGggT3BlblNTTCkgYW5kIGdpdmUgYSByZWFzb25hYmxlIGVycm9yIG1lc3NhZ2UuICBJZgorICAgIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseSAoZS5nLiwKKyAgICB5b3Uga25vdyB5b3UgaGF2ZSBBY3RpdmVQZXJsIGJ1dCB3ZSBjYW4ndCBmaW5kIGl0KSwgcGxlYXNlIHRha2UgYQorICAgIHBlZWsgYXQgYnVpbGRfc3NsLnB5IGFuZCBzdWdnZXN0IHBhdGNoZXMuICBOb3RlIHRoYXQgYnVpbGRfc3NsLnB5CiAgICAgc2hvdWxkIGJlIGFibGUgdG8gYmUgcnVuIGRpcmVjdGx5IGZyb20gdGhlIGNvbW1hbmQtbGluZS4KIAotICAgIGJ1aWxkX3NzbC5weS9NU1ZDIGlzbid0IGNsZXZlciBlbm91Z2ggdG8gY2xlYW4gT3BlblNTTCAtIHlvdSBtdXN0IGRvCi0gICAgdGhpcyBieSBoYW5kLgorICAgIFRoZSBzc2wgc3ViLXByb2plY3QgZG9lcyBub3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBjbGVhbiB0aGUgT3BlblNTTAorICAgIGJ1aWxkOyBpZiB5b3UgbmVlZCB0byByZWJ1aWxkLCB5b3UnbGwgaGF2ZSB0byBjbGVhbiBpdCBieSBoYW5kLgorX3NxbGl0ZTMKKyAgICBXcmFwcyBTUUxpdGUgMy43LjEyLCB3aGljaCBpcyBpdHNlbGYgYnVpbHQgYnkgc3FsaXRlMy52Y3hwcm9qCisgICAgSG9tZXBhZ2U6CisgICAgICAgIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy8KK190a2ludGVyCisgICAgV3JhcHMgdmVyc2lvbiA4LjUuMTEgb2YgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uCisgICAgSG9tZXBhZ2U6CisgICAgICAgIGh0dHA6Ly93d3cudGNsLnRrLwogCi1UaGUgc3VicHJvamVjdHMgYWJvdmUgd3JhcCBleHRlcm5hbCBwcm9qZWN0cyBQeXRob24gZG9lc24ndCBjb250cm9sLCBhbmQgYXMKLXN1Y2gsIGEgbGl0dGxlIG1vcmUgd29yayBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBkb3dubG9hZCB0aGUgcmVsZXZhbnQgc291cmNlIAotZmlsZXMgZm9yIGVhY2ggcHJvamVjdCBiZWZvcmUgdGhleSBjYW4gYmUgYnVpbHQuICBUaGUgYnVpbGRib3RzIGRvIHRoaXMgZWFjaAotdGltZSB0aGV5J3JlIGJ1aWx0LCBzbyB0aGUgZWFzaWVzdCBhcHByb2FjaCBpcyB0byBydW4gZWl0aGVyIGV4dGVybmFsLmJhdCBvciAKLWV4dGVybmFsLWFtZDY0LmJhdCBpbiB0aGUgLi5cVG9vbHNcYnVpbGRib3QgZGlyZWN0b3J5IGZyb20gLi5cLCBpLmUuOgorICAgIFVubGlrZSB0aGUgb3RoZXIgZXh0ZXJuYWwgbGlicmFyaWVzIGxpc3RlZCBhYm92ZSwgVGsgbXVzdCBiZSBidWlsdAorICAgIHNlcGFyYXRlbHkgYmVmb3JlIHRoZSBfdGtpbnRlciBtb2R1bGUgY2FuIGJlIGJ1aWx0LiBUaGlzIG1lYW5zIHRoYXQKKyAgICBhIHByZS1idWlsdCBUY2wvVGsgaW5zdGFsbGF0aW9uIGlzIGV4cGVjdGVkIGluIC4uXC4uXHRjbHRrICh0Y2x0azY0CisgICAgZm9yIDY0LWJpdCkgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkuICBTZWUgIkdldHRpbmcgRXh0ZXJuYWwKKyAgICBTb3VyY2VzIiBiZWxvdyBmb3IgdGhlIGVhc2llc3QgbWV0aG9kIHRvIGVuc3VyZSBUY2wvVGsgaXMgYnVpbHQuCiAKLSAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cdHJ1bmtcUENidWlsZD5jZCAuLgotICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblx0cnVuaz5Ub29sc1xidWlsZGJvdFxleHRlcm5hbC5iYXQKIAotVGhpcyBleHRyYWN0cyBhbGwgdGhlIGV4dGVybmFsIHN1YnByb2plY3RzIGZyb20gaHR0cDovL3N2bi5weXRob24ub3JnL2V4dGVybmFsCi12aWEgU3VidmVyc2lvbiAoc28geW91J2xsIG5lZWQgYW4gc3ZuLmV4ZSBvbiB5b3VyIFBBVEgpIGFuZCBwbGFjZXMgdGhlbSBpbiAKLS4uXC4uIChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuICBUaGUgZXh0ZXJuYWwoLWFtZDY0KS5iYXQgc2NyaXB0cyB3aWxsCi1hbHNvIGJ1aWxkIGEgZGVidWcgYnVpbGQgb2YgVGNsL1RrOyB0aGVyZSBhcmVuJ3QgYW55IGVxdWl2YWxlbnQgYmF0Y2ggZmlsZXMKLWZvciBidWlsZGluZyByZWxlYXNlIHZlcnNpb25zIG9mIFRjbC9UayBseWluZyBhcm91bmQgaW4gdGhlIFRvb2xzXGJ1aWxkYm90Ci1kaXJlY3RvcnkuICBJZiB5b3UgbmVlZCB0byBidWlsZCBhIHJlbGVhc2UgdmVyc2lvbiBvZiBUY2wvVGsgaXQgaXNuJ3QgaGFyZAotdGhvdWdoLCB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgZXh0ZXJuYWwoLWFtZDY0KS5iYXQgZmlsZSBhbmQgZmluZCB0aGUKLXR3byBubWFrZSBsaW5lcywgdGhlbiBjYWxsIGVhY2ggb25lIHdpdGhvdXQgdGhlICdERUJVRz0xJyBwYXJhbWV0ZXIsIGkuZS46CitHZXR0aW5nIEV4dGVybmFsIFNvdXJjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCBjYXRlZ29yeSBvZiBzdWItcHJvamVjdHMgbGlzdGVkIGFib3ZlIHdyYXAgZXh0ZXJuYWwgcHJvamVjdHMKK1B5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCBhcyBzdWNoIGEgbGl0dGxlIG1vcmUgd29yayBpcyByZXF1aXJlZCBpbgorb3JkZXIgdG8gZG93bmxvYWQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBmb3IgZWFjaCBwcm9qZWN0IGJlZm9yZSB0aGV5CitjYW4gYmUgYnVpbHQuICBUaGUgYnVpbGRib3RzIG11c3QgZW5zdXJlIHRoYXQgYWxsIGxpYnJhcmllcyBhcmUgcHJlc2VudAorYmVmb3JlIGJ1aWxkaW5nLCBzbyB0aGUgZWFzaWVzdCBhcHByb2FjaCBpcyB0byBydW4gZWl0aGVyIGV4dGVybmFsLmJhdAorb3IgZXh0ZXJuYWwtYW1kNjQuYmF0IChkZXBlbmRpbmcgb24gcGxhdGZvcm0pIGluIHRoZSAuLlxUb29sc1xidWlsZGJvdAorZGlyZWN0b3J5IGZyb20gLi5cLCBpLmUuOgorCisgICAgQzpccHl0aG9uXGNweXRob25cUENidWlsZD5jZCAuLgorICAgIEM6XHB5dGhvblxjcHl0aG9uPlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdAorCitUaGlzIGV4dHJhY3RzIGFsbCB0aGUgZXh0ZXJuYWwgc3ViLXByb2plY3RzIGZyb20KKyAgICBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwKK3ZpYSBTdWJ2ZXJzaW9uIChzbyB5b3UnbGwgbmVlZCBhbiBzdm4uZXhlIG9uIHlvdXIgUEFUSCkgYW5kIHBsYWNlcyB0aGVtCitpbiAuLlwuLiAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpLgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRvd25sb2FkIHNvdXJjZXMgZnJvbSBlYWNoIHByb2plY3QncyBob21lcGFnZSwKK3Rob3VnaCB5b3UgbWF5IGhhdmUgdG8gY2hhbmdlIHRoZSBuYW1lcyBvZiBzb21lIGZvbGRlcnMgaW4gb3JkZXIgdG8gbWFrZQordGhpbmdzIHdvcmsuICBGb3IgaW5zdGFuY2UsIGlmIHlvdSB3ZXJlIHRvIGRvd25sb2FkIGEgdmVyc2lvbiA1LjAuNSBvZgorWFogVXRpbHMsIHlvdSB3b3VsZCBuZWVkIHRvIGV4dHJhY3QgdGhlIGFyY2hpdmUgaW50byAuLlwuLlx4ei01LjAuMworYW55d2F5LCBzaW5jZSB0aGF0IGlzIHdoZXJlIHRoZSBzb2x1dGlvbiBpcyBzZXQgdG8gbG9vayBmb3IgeHouICBUaGUKK3NhbWUgaXMgdHJ1ZSBmb3IgYWxsIG90aGVyIGV4dGVybmFsIHByb2plY3RzLgorCitUaGUgZXh0ZXJuYWwoLWFtZDY0KS5iYXQgc2NyaXB0cyB3aWxsIGFsc28gYnVpbGQgYSBkZWJ1ZyBidWlsZCBvZgorVGNsL1RrLCBidXQgdGhlcmUgYXJlbid0IGFueSBlcXVpdmFsZW50IGJhdGNoIGZpbGVzIGZvciBidWlsZGluZyByZWxlYXNlCit2ZXJzaW9ucyBvZiBUY2wvVGsgY3VycmVudGx5IGF2YWlsYWJsZS4gIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGEgcmVsZWFzZQordmVyc2lvbiBvZiBUY2wvVGssIGp1c3QgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGV4dGVybmFsKC1hbWQ2NCkuYmF0CitmaWxlIGFuZCBmaW5kIHRoZSB0d28gbm1ha2UgbGluZXMsIHRoZW4gY2FsbCBlYWNoIG9uZSB3aXRob3V0IHRoZQorJ0RFQlVHPTEnIHBhcmFtZXRlciwgaS5lLjoKIAogVGhlIGV4dGVybmFsLWFtZDY0LmJhdCBmaWxlIGNvbnRhaW5zIHRoaXMgZm9yIHRjbDoKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbCBpbnN0YWxsCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBjbGVhbiBhbGwgaW5zdGFsbAogCiBTbyBmb3IgYSByZWxlYXNlIGJ1aWxkLCB5b3UnZCBjYWxsIGl0IGFzOgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbCBpbnN0YWxsCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsIGluc3RhbGwKIAotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLSAgICBYWFggT3VyIGluc3RhbGxlciBjb3BpZXMgYSBsb3Qgb2Ygc3R1ZmYgb3V0IG9mIHRoZSBUY2wvVGsgaW5zdGFsbAotICAgIFhYWCBkaXJlY3RvcnkuICBJcyBhbGwgb2YgdGhhdCByZWFsbHkgbmVlZGVkIGZvciBQeXRob24gdXNlIG9mIFRjbC9Uaz8KK05vdGUgdGhhdCB0aGUgYWJvdmUgY29tbWFuZCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gLi5cLi5cdGNsLTguNS4xMS4wXHdpbgorKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KTsgZG9uJ3QgZm9yZ2V0IHRvIGJ1aWxkIFRrIGFzIHdlbGwgYXMgVGNsIQogCi1UaGlzIHdpbGwgYmUgY2xlYW5lZCB1cCBpbiB0aGUgZnV0dXJlOyBpZGVhbGx5IFRjbC9UayB3aWxsIGJlIGJyb3VnaHQgaW50byBvdXIKLXBjYnVpbGQuc2xuIGFzIGN1c3RvbSAudmNwcm9qIGZpbGVzLCBqdXN0IGFzIHdlJ3ZlIHJlY2VudGx5IGRvbmUgd2l0aCB0aGUKLXNxbGl0ZTMudmNwcm9qIGZpbGUsIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBuZWVkIGZvciBUY2wvVGsgdG8gYmUgYnVpbHQKLXNlcGFyYXRlbHkgdmlhIGEgYmF0Y2ggZmlsZS4KK1RoaXMgd2lsbCBiZSBjbGVhbmVkIHVwIGluIHRoZSBmdXR1cmU7IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTk2OAordHJhY2tzIGFkZGluZyBhIG5ldyB0Y2x0ay52Y3hwcm9qIGZpbGUgdGhhdCB3aWxsIGJ1aWxkIFRjbC9UayBhbmQgVGl4Cit0aGUgc2FtZSB3YXkgdGhlIG90aGVyIGV4dGVybmFsIHByb2plY3RzIGxpc3RlZCBhYm92ZSBhcmUgYnVpbHQuCiAKLVhYWCB0cmVudC5uZWxzb24gMDItQXByLTA4OgotICAgIEhhdmluZyB0aGUgZXh0ZXJuYWwgc3VicHJvamVjdHMgaW4gLi5cLi4gcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkgaXMgYQotICAgIGJpdCBvZiBhIG51aXNhbmNlIHdoZW4geW91J3JlIHdvcmtpbmcgb24gcHkzayBhbmQgdHJ1bmsgaW4gcGFyYWxsZWwgYW5kCi0gICAgeW91ciBkaXJlY3RvcnkgbGF5b3V0IG1pbWljcyB0aGF0IG9mIFB5dGhvbidzIHN1YnZlcnNpb24gbGF5b3V0LCBlLmcuOgotCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblx0cnVuawotICAgICAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cYnJhbmNoZXNccHkzawotICAgICAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cYnJhbmNoZXNccmVsZWFzZTI1LW1haW50Ci0KLSAgICBJJ2QgbGlrZSB0byBjaGFuZ2UgdGhpbmdzIHNvIHRoYXQgZXh0ZXJuYWwgc3VicHJvamVjdHMgYXJlIGZldGNoZWQgZnJvbQotICAgIC4uXGV4dGVybmFsIGluc3RlYWQgb2YgLi5cLi4sIHRoZW4gcHJvdmlkZSBzb21lIGhlbHBlciBzY3JpcHRzIG9yIGJhdGNoCi0gICAgZmlsZXMgdGhhdCB3b3VsZCBzZXQgdXAgYSBuZXcgLi5cZXh0ZXJuYWwgZGlyZWN0b3J5IHdpdGggc3ZuIGNoZWNrb3V0cyBvZgotICAgIHRoZSByZWxldmFudCBicmFuY2hlcyBpbiBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvLCBvcgotICAgIGFsdGVybmF0aXZlbHksIHVzZSBqdW5jdGlvbnMgdG8gbGluayAuLlxleHRlcm5hbCB3aXRoIGEgcHJlLWV4aXN0aW5nCi0gICAgZXh0ZXJuYWxzIGRpcmVjdG9yeSBiZWluZyB1c2VkIGJ5IGFub3RoZXIgYnJhbmNoLiAgaS5lLiBpZiBJJ20gdXN1YWxseQotICAgIHdvcmtpbmcgb24gdHJ1bmsgKGFuZCBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCB0cnVua1xleHRlcm5hbCB2aWEgdGhlCi0gICAgcHJvdmlkZWQgYmF0Y2ggZmlsZSksIGFuZCB3YW50IHRvIGRvIHNvbWUgd29yayBvbiBweTNrLCBJJ2Qgc2V0IHVwIGEKLSAgICBqdW5jdGlvbiBhcyBmb2xsb3dzICh1c2luZyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBhYm92ZSBhcyBhbiBleGFtcGxlKToKLQotICAgICAgICBDOlwuLlxweXRob25cdHJ1bmtcZXh0ZXJuYWwgPC0gYWxyZWFkeSBleGlzdHMgYW5kIGhhcyBidWlsdCB2ZXJzaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGV4dGVybmFsIHN1YnByb2plY3RzIAotCi0gICAgICAgIEM6XC4uXHB5dGhvblxicmFuY2hlc1xweTNrPmxpbmtkLmV4ZSBleHRlcm5hbCAuLlwuLlx0cnVua1xleHRlcm5hbAotICAgICAgICBMaW5rIGNyZWF0ZWQgYXQ6IGV4dGVybmFsCi0KLSAgICBPbmx5IGEgc2xpZ2h0IHR3ZWFrIHdvdWxkIGJlIG5lZWRlZCB0byB0aGUgYnVpbGRib3RzIHN1Y2ggdGhhdCBib3RzCi0gICAgYnVpbGRpbmcgdHJ1bmsgYW5kIHB5M2sgY291bGQgbWFrZSB1c2Ugb2YgdGhlIHNhbWUgZmFjaWxpdHkuICAoMi41LngKLSAgICBidWlsZHMgbmVlZCB0byBiZSBrZXB0IHNlcGFyYXRlIGFzIHRoZXkncmUgdXNpbmcgVmlzdWFsIFN0dWRpbyA3LjEuKQotL1hYWCB0cmVudC5uZWxzb24gMDItQXByLTA4Ci0KLUJ1aWxkaW5nIGZvciBJdGFuaXVtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1OT1RFOgotT2ZmaWNpYWwgc3VwcG9ydCBmb3IgSXRhbml1bSBidWlsZHMgaGF2ZSBiZWVuIGRyb3BwZWQgZnJvbSB0aGUgYnVpbGQuIFBsZWFzZQotY29udGFjdCB1cyBhbmQgcHJvdmlkZSBwYXRjaGVzIGlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBJdGFuaXVtIGJ1aWxkcy4KLQotVGhlIHByb2plY3QgZmlsZXMgc3VwcG9ydCBhIFJlbGVhc2VJdGFuaXVtIGNvbmZpZ3VyYXRpb24gd2hpY2ggY3JlYXRlcwotV2luNjQvSXRhbml1bSBiaW5hcmllcy4gRm9yIHRoaXMgdG8gd29yaywgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgUGxhdGZvcm0KLVNESywgaW4gcGFydGljdWxhciB0aGUgNjQtYml0IHN1cHBvcnQuIFRoaXMgaW5jbHVkZXMgYW4gSXRhbml1bSBjb21waWxlcgotKGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgU0RLIGxpa2VseSBpbmNsdWRlIGFuIEFNRDY0IGNvbXBpbGVyIGFzIHdlbGwpLgotSW4gYWRkaXRpb24sIHlvdSBuZWVkIHRoZSBWaXN1YWwgU3R1ZGlvIHBsdWdpbiBmb3IgZXh0ZXJuYWwgQyBjb21waWxlcnMsCi1mcm9tIGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvdnNleHRjb21wLiBUaGUgcGx1Z2luIHdpbGwgd3JhcCBjbC5leGUsIHRvCi1sb2NhdGUgdGhlIHByb3BlciB0YXJnZXQgY29tcGlsZXIsIGFuZCBjb252ZXJ0IGNvbXBpbGVyIG9wdGlvbnMKLWFjY29yZGluZ2x5LiBUaGUgcHJvamVjdCBmaWxlcyByZXF1aXJlIGF0IGxlYXN0IHZlcnNpb24gMC45LgogCiBCdWlsZGluZyBmb3IgQU1ENjQKIC0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgYnVpbGQgcHJvY2VzcyBmb3IgQU1ENjQgLyB4NjQgaXMgdmVyeSBzaW1pbGFyIHRvIHN0YW5kYXJkIGJ1aWxkcy4gWW91IGp1c3QKLWhhdmUgdG8gc2V0IHg2NCBhcyBwbGF0Zm9ybS4gSW4gYWRkaXRpb24sIHRoZSBIT1NUX1BZVEhPTiBlbnZpcm9ubWVudCB2YXJpYWJsZQotbXVzdCBwb2ludCB0byBhIFB5dGhvbiBpbnRlcnByZXRlciAoYXQgbGVhc3QgMi40KSwgdG8gc3VwcG9ydCBjcm9zcy1jb21waWxhdGlvbi4KK1RoZSBidWlsZCBwcm9jZXNzIGZvciBBTUQ2NCAvIHg2NCBpcyB2ZXJ5IHNpbWlsYXIgdG8gc3RhbmRhcmQgYnVpbGRzLAoreW91IGp1c3QgaGF2ZSB0byBzZXQgeDY0IGFzIHBsYXRmb3JtLiBJbiBhZGRpdGlvbiwgdGhlIEhPU1RfUFlUSE9OCitlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IHBvaW50IHRvIGEgUHl0aG9uIGludGVycHJldGVyIChhdCBsZWFzdCAyLjQpLAordG8gc3VwcG9ydCBjcm9zcy1jb21waWxhdGlvbiBmcm9tIFdpbjMyLiAgTm90ZSB0aGF0IFZpc3VhbCBTdHVkaW8KK3JlcXVpcmVzIGVpdGhlciBTdGFuZGFyZCBFZGl0aW9uIG9yIGJldHRlciwgb3IgRXhwcmVzcyBFZGl0aW9uIHdpdGggdGhlCitXaW5kb3dzIFNESyA2NC1iaXQgY29tcGlsZXJzIHRvIGJlIGF2YWlsYWJsZSBpbiBvcmRlciB0byBidWlsZCA2NC1iaXQKK2JpbmFyaWVzLgogCi1CdWlsZGluZyBQeXRob24gVXNpbmcgdGhlIGZyZWUgTVMgVG9vbGtpdCBDb21waWxlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWljcm9zb2Z0IGhhcyB3aXRoZHJhd24gdGhlIGZyZWUgTVMgVG9vbGtpdCBDb21waWxlciwgc28gdGhpcyBjYW4gbm8gbG9uZ2VyCi1iZSBjb25zaWRlcmVkIGEgc3VwcG9ydGVkIG9wdGlvbi4gSW5zdGVhZCB5b3UgY2FuIHVzZSB0aGUgZnJlZSBWUyBDKysgRXhwcmVzcwotRWRpdGlvbi4KIAogUHJvZmlsZSBHdWlkZWQgT3B0aW1pemF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIHNvbHV0aW9uIGhhcyB0d28gY29uZmlndXJhdGlvbnMgZm9yIFBHTy4gVGhlIFBHSW5zdHJ1bWVudAotY29uZmlndXJhdGlvbiBtdXN0IGJlIGJ1aWxkIGZpcnN0LiBUaGUgUEdJbnN0cnVtZW50IGJpbmFyaWVzIGFyZQotbG5pa2VkIGFnYWluc3QgYSBwcm9maWxpbmcgbGlicmFyeSBhbmQgY29udGFpbiBleHRyYSBkZWJ1ZwotaW5mb3JtYXRpb24uIFRoZSBQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHRha2VzIHRoZSBwcm9maWxpbmcgZGF0YSBhbmQKLWdlbmVyYXRlcyBvcHRpbWl6ZWQgYmluYXJpZXMuCitjb25maWd1cmF0aW9uIG11c3QgYmUgYnVpbHQgZmlyc3QuIFRoZSBQR0luc3RydW1lbnQgYmluYXJpZXMgYXJlIGxpbmtlZAorYWdhaW5zdCBhIHByb2ZpbGluZyBsaWJyYXJ5IGFuZCBjb250YWluIGV4dHJhIGRlYnVnIGluZm9ybWF0aW9uLiBUaGUKK1BHVXBkYXRlIGNvbmZpZ3VyYXRpb24gdGFrZXMgdGhlIHByb2ZpbGluZyBkYXRhIGFuZCBnZW5lcmF0ZXMgb3B0aW1pemVkCitiaW5hcmllcy4KIAotVGhlIGJ1aWxkX3Bnby5iYXQgc2NyaXB0IGF1dG9tYXRlcyB0aGUgY3JlYXRpb24gb2Ygb3B0aW1pemVkIGJpbmFyaWVzLiBJdAotY3JlYXRlcyB0aGUgUEdJIGZpbGVzLCBydW5zIHRoZSB1bml0IHRlc3Qgc3VpdGUgb3IgUHlCZW5jaCB3aXRoIHRoZSBQR0kKLXB5dGhvbiBhbmQgZmluYWxseSBjcmVhdGVzIHRoZSBvcHRpbWl6ZWQgZmlsZXMuCitUaGUgYnVpbGRfcGdvLmJhdCBzY3JpcHQgYXV0b21hdGVzIHRoZSBjcmVhdGlvbiBvZiBvcHRpbWl6ZWQgYmluYXJpZXMuCitJdCBjcmVhdGVzIHRoZSBQR0kgZmlsZXMsIHJ1bnMgdGhlIHVuaXQgdGVzdCBzdWl0ZSBvciBQeUJlbmNoIHdpdGggdGhlCitQR0kgcHl0aG9uLCBhbmQgZmluYWxseSBjcmVhdGVzIHRoZSBvcHRpbWl6ZWQgZmlsZXMuCiAKLWh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZTdrMzJmNGsoVlMuOTApLmFzcHgKK1NlZQorICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9lN2szMmY0ayhWUy4xMDApLmFzcHgKK2ZvciBtb3JlIG9uIHRoaXMgdG9waWMuCisKIAogU3RhdGljIGxpYnJhcnkKIC0tLS0tLS0tLS0tLS0tCiAKLVRoZSBzb2x1dGlvbiBoYXMgbm8gY29uZmlndXJhdGlvbiBmb3Igc3RhdGljIGxpYnJhcmllcy4gSG93ZXZlciBpdCBpcyBlYXN5Ci1pdCBidWlsZCBhIHN0YXRpYyBsaWJyYXJ5IGluc3RlYWQgb2YgYSBETEwuIFlvdSBzaW1wbHkgaGF2ZSB0byBzZXQgdGhlIAotIkNvbmZpZ3VyYXRpb24gVHlwZSIgdG8gIlN0YXRpYyBMaWJyYXJ5ICgubGliKSIgYW5kIGFsdGVyIHRoZSBwcmVwcm9jZXNzb3IKLW1hY3JvICJQeV9FTkFCTEVfU0hBUkVEIiB0byAiUHlfTk9fRU5BQkxFX1NIQVJFRCIuIFlvdSBtYXkgYWxzbyBoYXZlIHRvCi1jaGFuZ2UgdGhlICJSdW50aW1lIExpYnJhcnkiIGZyb20gIk11bHRpLXRocmVhZGVkIERMTCAoL01EKSIgdG8gCi0iTXVsdGktdGhyZWFkZWQgKC9NVCkiLgorVGhlIHNvbHV0aW9uIGhhcyBubyBjb25maWd1cmF0aW9uIGZvciBzdGF0aWMgbGlicmFyaWVzLiBIb3dldmVyIGl0IGlzCitlYXN5IHRvIGJ1aWxkIGEgc3RhdGljIGxpYnJhcnkgaW5zdGVhZCBvZiBhIERMTC4gWW91IHNpbXBseSBoYXZlIHRvIHNldAordGhlICJDb25maWd1cmF0aW9uIFR5cGUiIHRvICJTdGF0aWMgTGlicmFyeSAoLmxpYikiIGFuZCBhbHRlciB0aGUKK3ByZXByb2Nlc3NvciBtYWNybyAiUHlfRU5BQkxFX1NIQVJFRCIgdG8gIlB5X05PX0VOQUJMRV9TSEFSRUQiLiBZb3UgbWF5CithbHNvIGhhdmUgdG8gY2hhbmdlIHRoZSAiUnVudGltZSBMaWJyYXJ5IiBmcm9tICJNdWx0aS10aHJlYWRlZCBETEwKKygvTUQpIiB0byAiTXVsdGktdGhyZWFkZWQgKC9NVCkiLgorCiAKIFZpc3VhbCBTdHVkaW8gcHJvcGVydGllcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBQQ2J1aWxkIHNvbHV0aW9uIG1ha2VzIGhlYXZ5IHVzZSBvZiBWaXN1YWwgU3R1ZGlvIHByb3BlcnR5IGZpbGVzIAotKCoudnNwcm9wcykuIFRoZSBwcm9wZXJ0aWVzIGNhbiBiZSB2aWV3ZWQgYW5kIGFsdGVyZWQgaW4gdGhlIFByb3BlcnR5CitUaGUgUENidWlsZCBzb2x1dGlvbiBtYWtlcyBoZWF2eSB1c2Ugb2YgVmlzdWFsIFN0dWRpbyBwcm9wZXJ0eSBmaWxlcworKCoucHJvcHMpLiBUaGUgcHJvcGVydGllcyBjYW4gYmUgdmlld2VkIGFuZCBhbHRlcmVkIGluIHRoZSBQcm9wZXJ0eQogTWFuYWdlciAoVmlldyAtPiBPdGhlciBXaW5kb3dzIC0+IFByb3BlcnR5IE1hbmFnZXIpLgogCitUaGUgcHJvcGVydHkgZmlsZXMgdXNlZCBhcmUgKCstLSA9ICJhbHNvIGltcG9ydHMiKToKICAqIGRlYnVnIChkZWJ1ZyBtYWNybzogX0RFQlVHKQogICogcGdpbnN0cnVtZW50IChQR08pCiAgKiBwZ3VwZGF0ZSAoUEdPKQpAQCAtMzI3LDE1ICszMjcsMTggQEAKICAgICArLS0gcHlwcm9qZWN0CiAgKiBweXByb2plY3QgKGJhc2Ugc2V0dGluZ3MgZm9yIGFsbCBwcm9qZWN0cywgdXNlciBtYWNyb3MgbGlrZSBQeURsbE5hbWUpCiAgKiByZWxlYXNlIChyZWxlYXNlIG1hY3JvOiBOREVCVUcpCisgKiBzcWxpdGUzICh1c2VkIG9ubHkgYnkgc3FsaXRlMy52Y3hwcm9qKQogICogeDY0IChBTUQ2NCAvIHg2NCBwbGF0Zm9ybSBzcGVjaWZpYyBzZXR0aW5ncykKIAotVGhlIHB5cHJvamVjdCBwcm9wZXJ0eWZpbGUgZGVmaW5lcyBfV0lOMzIgYW5kIHg2NCBkZWZpbmVzIF9XSU42NCBhbmQgX01fWDY0Ci1hbHRob3VnaCB0aGUgbWFjcm9zIGFyZSBzZXQgYnkgdGhlIGNvbXBpbGVyLCB0b28uIFRoZSBHVUkgZG9lc24ndCBhbHdheXMga25vdwotYWJvdXQgdGhlIG1hY3JvcyBhbmQgY29uZnVzZSB0aGUgdXNlciB3aXRoIGZhbHNlIGluZm9ybWF0aW9uLgorVGhlIHB5cHJvamVjdCBwcm9wZXJ0eSBmaWxlIGRlZmluZXMgX1dJTjMyIGFuZCB4NjQgZGVmaW5lcyBfV0lONjQgYW5kCitfTV9YNjQgYWx0aG91Z2ggdGhlIG1hY3JvcyBhcmUgc2V0IGJ5IHRoZSBjb21waWxlciwgdG9vLiBUaGUgR1VJIGRvZXNuJ3QKK2Fsd2F5cyBrbm93IGFib3V0IHRoZSBtYWNyb3MgYW5kIGNvbmZ1c2UgdGhlIHVzZXIgd2l0aCBmYWxzZQoraW5mb3JtYXRpb24uCiAKLVlPVVIgT1dOIEVYVEVOU0lPTiBETExzCisKK1lvdXIgT3duIEV4dGVuc2lvbiBETExzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwsIHRoZXJlJ3MgYW4gZXhhbXBsZQotd2l0aCBlYXN5LXRvLWZvbGxvdyBpbnN0cnVjdGlvbnMgaW4gLi4vUEMvZXhhbXBsZS87IHJlYWQgdGhlIGZpbGUKLXJlYWRtZS50eHQgdGhlcmUgZmlyc3QuCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwgKC5weWQpLCB0aGVyZSdzIGFuCitleGFtcGxlIHdpdGggZWFzeS10by1mb2xsb3cgaW5zdHJ1Y3Rpb25zIGluIC4uXFBDXGV4YW1wbGVcOyByZWFkIHRoZQorZmlsZSByZWFkbWUudHh0IHRoZXJlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvUENidWlsZC9zc2wudmN4cHJvaiBiL1BDYnVpbGQvc3NsLnZjeHByb2oKaW5kZXggNDFmZDc4MC4uZDVlYWM5YSAxMDA2NDQKLS0tIGEvUENidWlsZC9zc2wudmN4cHJvagorKysgYi9QQ2J1aWxkL3NzbC52Y3hwcm9qCkBAIC0xMjIsNyArMTIyLDcgQEAKICIkKFB5dGhvbkV4ZSkiIGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm0pIC1hCiA8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KICAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPE5NYWtlQ2xlYW5Db21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KKyAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5lY2hvIE9wZW5TU0wgbXVzdCBiZSBjbGVhbmVkIG1hbnVhbGx5IGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgaXQuPC9OTWFrZUNsZWFuQ29tbWFuZExpbmU+CiAgICAgPE5NYWtlT3V0cHV0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxOTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKE5NYWtlSW5jbHVkZVNlYXJjaFBhdGgpPC9OTWFrZUluY2x1ZGVTZWFyY2hQYXRoPgpAQCAtMTMzLDcgKzEzMyw3IEBACiAiJChQeXRob25FeGUpIiBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtKSAtYQogPC9OTWFrZUJ1aWxkQ29tbWFuZExpbmU+CiAgICAgPE5NYWtlUmVCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KKyAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZWNobyBPcGVuU1NMIG11c3QgYmUgY2xlYW5lZCBtYW51YWxseSBpZiB5b3Ugd2FudCB0byByZWJ1aWxkIGl0LjwvTk1ha2VDbGVhbkNvbW1hbmRMaW5lPgogICAgIDxOTWFrZU91dHB1dCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+CiAgICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChOTWFrZUluY2x1ZGVTZWFyY2hQYXRoKTwvTk1ha2VJbmNsdWRlU2VhcmNoUGF0aD4KQEAgLTE0NCw3ICsxNDQsNyBAQAogIiQoUHl0aG9uRXhlKSIgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybSkgLWEKIDwvTk1ha2VCdWlsZENvbW1hbmRMaW5lPgogICAgIDxOTWFrZVJlQnVpbGRDb21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KKyAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmVjaG8gT3BlblNTTCBtdXN0IGJlIGNsZWFuZWQgbWFudWFsbHkgaWYgeW91IHdhbnQgdG8gcmVidWlsZCBpdC48L05NYWtlQ2xlYW5Db21tYW5kTGluZT4KICAgICA8Tk1ha2VPdXRwdXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KICAgICA8Tk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoTk1ha2VJbmNsdWRlU2VhcmNoUGF0aCk8L05NYWtlSW5jbHVkZVNlYXJjaFBhdGg+CkBAIC0xNTUsNyArMTU1LDcgQEAKICIkKFB5dGhvbkV4ZSkiIGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm0pIC1hCiA8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KICAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPE5NYWtlQ2xlYW5Db21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KKyAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5lY2hvIE9wZW5TU0wgbXVzdCBiZSBjbGVhbmVkIG1hbnVhbGx5IGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgaXQuPC9OTWFrZUNsZWFuQ29tbWFuZExpbmU+CiAgICAgPE5NYWtlT3V0cHV0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICAgIDxOTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKE5NYWtlSW5jbHVkZVNlYXJjaFBhdGgpPC9OTWFrZUluY2x1ZGVTZWFyY2hQYXRoPgpAQCAtMTY2LDcgKzE2Niw3IEBACiAiJChQeXRob25FeGUpIiBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtKSAtYQogPC9OTWFrZUJ1aWxkQ29tbWFuZExpbmU+CiAgICAgPE5NYWtlUmVCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KKyAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+ZWNobyBPcGVuU1NMIG11c3QgYmUgY2xlYW5lZCBtYW51YWxseSBpZiB5b3Ugd2FudCB0byByZWJ1aWxkIGl0LjwvTk1ha2VDbGVhbkNvbW1hbmRMaW5lPgogICAgIDxOTWFrZU91dHB1dCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+CiAgICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+JChOTWFrZUluY2x1ZGVTZWFyY2hQYXRoKTwvTk1ha2VJbmNsdWRlU2VhcmNoUGF0aD4KQEAgLTE3Nyw3ICsxNzcsNyBAQAogIiQoUHl0aG9uRXhlKSIgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybSkgLWEKIDwvTk1ha2VCdWlsZENvbW1hbmRMaW5lPgogICAgIDxOTWFrZVJlQnVpbGRDb21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KKyAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPmVjaG8gT3BlblNTTCBtdXN0IGJlIGNsZWFuZWQgbWFudWFsbHkgaWYgeW91IHdhbnQgdG8gcmVidWlsZCBpdC48L05NYWtlQ2xlYW5Db21tYW5kTGluZT4KICAgICA8Tk1ha2VPdXRwdXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KICAgICA8Tk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPiQoTk1ha2VJbmNsdWRlU2VhcmNoUGF0aCk8L05NYWtlSW5jbHVkZVNlYXJjaFBhdGg+CkBAIC0xODgsNyArMTg4LDcgQEAKICIkKFB5dGhvbkV4ZSkiIGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm0pIC1hCiA8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KICAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPE5NYWtlQ2xlYW5Db21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KKyAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5lY2hvIE9wZW5TU0wgbXVzdCBiZSBjbGVhbmVkIG1hbnVhbGx5IGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgaXQuPC9OTWFrZUNsZWFuQ29tbWFuZExpbmU+CiAgICAgPE5NYWtlT3V0cHV0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgogICAgIDxOTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4kKE5NYWtlSW5jbHVkZVNlYXJjaFBhdGgpPC9OTWFrZUluY2x1ZGVTZWFyY2hQYXRoPgpAQCAtMTk5LDcgKzE5OSw3IEBACiAiJChQeXRob25FeGUpIiBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtKSAtYQogPC9OTWFrZUJ1aWxkQ29tbWFuZExpbmU+CiAgICAgPE5NYWtlUmVCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KKyAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+ZWNobyBPcGVuU1NMIG11c3QgYmUgY2xlYW5lZCBtYW51YWxseSBpZiB5b3Ugd2FudCB0byByZWJ1aWxkIGl0LjwvTk1ha2VDbGVhbkNvbW1hbmRMaW5lPgogICAgIDxOTWFrZU91dHB1dCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+CiAgICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+JChOTWFrZUluY2x1ZGVTZWFyY2hQYXRoKTwvTk1ha2VJbmNsdWRlU2VhcmNoUGF0aD4KZGlmZiAtLWdpdCBhL1BhcnNlci9QeXRob24uYXNkbCBiL1BhcnNlci9QeXRob24uYXNkbAppbmRleCBjMjRkODQwLi5kZWJkODllIDEwMDY0NAotLS0gYS9QYXJzZXIvUHl0aG9uLmFzZGwKKysrIGIvUGFyc2VyL1B5dGhvbi5hc2RsCkBAIC0xLDQgKzEsNCBAQAotLS0gQVNETCdzIGZpdmUgYnVpbHRpbiB0eXBlcyBhcmUgaWRlbnRpZmllciwgaW50LCBzdHJpbmcsIGJ5dGVzLCBvYmplY3QKKy0tIEFTREwncyBzaXggYnVpbHRpbiB0eXBlcyBhcmUgaWRlbnRpZmllciwgaW50LCBzdHJpbmcsIGJ5dGVzLCBvYmplY3QsIHNpbmdsZXRvbgogCiBtb2R1bGUgUHl0aG9uCiB7CkBAIC02OSw4ICs2OSw4IEBACiAgICAgICAgICB8IE51bShvYmplY3QgbikgLS0gYSBudW1iZXIgYXMgYSBQeU9iamVjdC4KICAgICAgICAgIHwgU3RyKHN0cmluZyBzKSAtLSBuZWVkIHRvIHNwZWNpZnkgcmF3LCB1bmljb2RlLCBldGM/CiAgICAgICAgICB8IEJ5dGVzKGJ5dGVzIHMpCisgICAgICAgICB8IE5hbWVDb25zdGFudChzaW5nbGV0b24gdmFsdWUpCiAgICAgICAgICB8IEVsbGlwc2lzCi0gICAgICAgICAtLSBvdGhlciBsaXRlcmFscz8gYm9vbHM/CiAKICAgICAgICAgIC0tIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbiBjYW4gYXBwZWFyIGluIGFzc2lnbm1lbnQgY29udGV4dAogICAgICAgICAgfCBBdHRyaWJ1dGUoZXhwciB2YWx1ZSwgaWRlbnRpZmllciBhdHRyLCBleHByX2NvbnRleHQgY3R4KQpAQCAtMTAzLDExICsxMDMsMTEgQEAKICAgICBleGNlcHRoYW5kbGVyID0gRXhjZXB0SGFuZGxlcihleHByPyB0eXBlLCBpZGVudGlmaWVyPyBuYW1lLCBzdG10KiBib2R5KQogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIChpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIAotICAgIGFyZ3VtZW50cyA9IChhcmcqIGFyZ3MsIGlkZW50aWZpZXI/IHZhcmFyZywgZXhwcj8gdmFyYXJnYW5ub3RhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgIGFyZyoga3dvbmx5YXJncywgaWRlbnRpZmllcj8ga3dhcmcsCi0gICAgICAgICAgICAgICAgICAgICBleHByPyBrd2FyZ2Fubm90YXRpb24sIGV4cHIqIGRlZmF1bHRzLAotICAgICAgICAgICAgICAgICAgICAgZXhwcioga3dfZGVmYXVsdHMpCisgICAgYXJndW1lbnRzID0gKGFyZyogYXJncywgYXJnPyB2YXJhcmcsIGFyZyoga3dvbmx5YXJncywgZXhwcioga3dfZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgIGFyZz8ga3dhcmcsIGV4cHIqIGRlZmF1bHRzKQorCiAgICAgYXJnID0gKGlkZW50aWZpZXIgYXJnLCBleHByPyBhbm5vdGF0aW9uKQorICAgICAgICAgICBhdHRyaWJ1dGVzIChpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIAogICAgIC0tIGtleXdvcmQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIGNhbGwKICAgICBrZXl3b3JkID0gKGlkZW50aWZpZXIgYXJnLCBleHByIHZhbHVlKQpkaWZmIC0tZ2l0IGEvUGFyc2VyL2FzZGwucHkgYi9QYXJzZXIvYXNkbC5weQppbmRleCAwOGFhMDViLi5mYzFiMTZjIDEwMDY0NAotLS0gYS9QYXJzZXIvYXNkbC5weQorKysgYi9QYXJzZXIvYXNkbC5weQpAQCAtMTYsOCArMTYsOSBAQAogCiBpbXBvcnQgc3BhcmsKIAotZGVmIG91dHB1dChzdHJpbmcpOgotICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyaW5nICsgIlxuIikKK2RlZiBvdXRwdXQoKnN0cmluZ3MpOgorICAgIGZvciBzIGluIHN0cmluZ3M6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyKHMpICsgIlxuIikKIAogCiBjbGFzcyBUb2tlbihvYmplY3QpOgpAQCAtMTU4LDExICsxNTksMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGF0dHJpYnV0ZXMsIGZvdW5kICVzIiAlIGlkKQogICAgICAgICByZXR1cm4gU3VtKHN1bSwgYXR0cmlidXRlcykKIAotICAgIGRlZiBwX3Byb2R1Y3Qoc2VsZiwgaW5mbyk6CisgICAgZGVmIHBfcHJvZHVjdF8wKHNlbGYsIGluZm8pOgogICAgICAgICAiIHByb2R1Y3QgOjo9ICggZmllbGRzICkgIgogICAgICAgICBfMCwgZmllbGRzLCBfMSA9IGluZm8KICAgICAgICAgcmV0dXJuIFByb2R1Y3QoZmllbGRzKQogCisgICAgZGVmIHBfcHJvZHVjdF8xKHNlbGYsIGluZm8pOgorICAgICAgICAiIHByb2R1Y3QgOjo9ICggZmllbGRzICkgSWQgKCBmaWVsZHMgKSAiCisgICAgICAgIF8wLCBmaWVsZHMsIF8xLCBpZCwgXzIsIGF0dHJpYnV0ZXMsIF8zID0gaW5mbworICAgICAgICBpZiBpZC52YWx1ZSAhPSAiYXR0cmlidXRlcyI6CisgICAgICAgICAgICByYWlzZSBBU0RMU3ludGF4RXJyb3IoaWQubGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iZXhwZWN0ZWQgYXR0cmlidXRlcywgZm91bmQgJXMiICUgaWQpCisgICAgICAgIHJldHVybiBQcm9kdWN0KGZpZWxkcywgYXR0cmlidXRlcykKKwogICAgIGRlZiBwX3N1bV8wKHNlbGYsIGNvbnN0cnVjdG9yKToKICAgICAgICAgIiBzdW0gOjo9IGNvbnN0cnVjdG9yICIKICAgICAgICAgcmV0dXJuIFtjb25zdHJ1Y3RvclswXV0KQEAgLTIyMiw3ICsyMzEsNyBAQAogICAgICAgICAiIGZpZWxkIDo6PSBJZCA/ICIKICAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGVbMF0sIG9wdD1UcnVlKQogCi1idWlsdGluX3R5cGVzID0gKCJpZGVudGlmaWVyIiwgInN0cmluZyIsICJieXRlcyIsICJpbnQiLCAib2JqZWN0IikKK2J1aWx0aW5fdHlwZXMgPSAoImlkZW50aWZpZXIiLCAic3RyaW5nIiwgImJ5dGVzIiwgImludCIsICJvYmplY3QiLCAic2luZ2xldG9uIikKIAogIyBiZWxvdyBpcyBhIGNvbGxlY3Rpb24gb2YgY2xhc3NlcyB0byBjYXB0dXJlIHRoZSBBU1Qgb2YgYW4gQVNUIDotKQogIyBub3Qgc3VyZSBpZiBhbnkgb2YgdGhlIG1ldGhvZHMgYXJlIHVzZWZ1bCB5ZXQsIGJ1dCBJJ20gYWRkaW5nIHRoZW0KQEAgLTI4OSwxMSArMjk4LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gIlN1bSglcywgJXMpIiAlIChzZWxmLnR5cGVzLCBzZWxmLmF0dHJpYnV0ZXMpCiAKIGNsYXNzIFByb2R1Y3QoQVNUKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmllbGRzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmllbGRzLCBhdHRyaWJ1dGVzPU5vbmUpOgogICAgICAgICBzZWxmLmZpZWxkcyA9IGZpZWxkcworICAgICAgICBzZWxmLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIG9yIFtdCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiUHJvZHVjdCglcykiICUgc2VsZi5maWVsZHMKKyAgICAgICAgaWYgc2VsZi5hdHRyaWJ1dGVzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gIlByb2R1Y3QoJXMpIiAlIHNlbGYuZmllbGRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlByb2R1Y3QoJXMsICVzKSIgJSAoc2VsZi5maWVsZHMsIHNlbGYuYXR0cmlidXRlcykKIAogY2xhc3MgVmlzaXRvckJhc2Uob2JqZWN0KToKIApAQCAtMzg1LDcgKzM5OCwxMSBAQAogICAgIHNjYW5uZXIgPSBBU0RMU2Nhbm5lcigpCiAgICAgcGFyc2VyID0gQVNETFBhcnNlcigpCiAKLSAgICBidWYgPSBvcGVuKGZpbGUpLnJlYWQoKQorICAgIGYgPSBvcGVuKGZpbGUpCisgICAgdHJ5OgorICAgICAgICBidWYgPSBmLnJlYWQoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGYuY2xvc2UoKQogICAgIHRva2VucyA9IHNjYW5uZXIudG9rZW5pemUoYnVmKQogICAgIHRyeToKICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZSh0b2tlbnMpCkBAIC00MTYsNCArNDMzLDQgQEAKICAgICAgICAgICAgIG91dHB1dCgiQ2hlY2sgZmFpbGVkIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZvciBkZm4gaW4gbW9kLmRmbnM6Ci0gICAgICAgICAgICAgICAgb3V0cHV0KGRmbi50eXBlKQorICAgICAgICAgICAgICAgIG91dHB1dChkZm4ubmFtZSwgZGZuLnZhbHVlKQpkaWZmIC0tZ2l0IGEvUGFyc2VyL2FzZGxfYy5weSBiL1BhcnNlci9hc2RsX2MucHkKaW5kZXggMGI2Yzg4Yy4uODBlNDMyYSAxMDA3NTUKLS0tIGEvUGFyc2VyL2FzZGxfYy5weQorKysgYi9QYXJzZXIvYXNkbF9jLnB5CkBAIC0yMDksNiArMjA5LDExIEBACiAgICAgICAgIHNlbGYuZW1pdCgic3RydWN0IF8lKG5hbWUpcyB7IiAlIGxvY2FscygpLCBkZXB0aCkKICAgICAgICAgZm9yIGYgaW4gcHJvZHVjdC5maWVsZHM6CiAgICAgICAgICAgICBzZWxmLnZpc2l0KGYsIGRlcHRoICsgMSkKKyAgICAgICAgZm9yIGZpZWxkIGluIHByb2R1Y3QuYXR0cmlidXRlczoKKyAgICAgICAgICAgICMgcnVkaW1lbnRhcnkgYXR0cmlidXRlIGhhbmRsaW5nCisgICAgICAgICAgICB0eXBlID0gc3RyKGZpZWxkLnR5cGUpCisgICAgICAgICAgICBhc3NlcnQgdHlwZSBpbiBhc2RsLmJ1aWx0aW5fdHlwZXMsIHR5cGUKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgJXM7IiAlICh0eXBlLCBmaWVsZC5uYW1lKSwgZGVwdGggKyAxKTsKICAgICAgICAgc2VsZi5lbWl0KCJ9OyIsIGRlcHRoKQogICAgICAgICBzZWxmLmVtaXQoIiIsIGRlcHRoKQogCkBAIC00OTMsNyArNDk4LDExIEBACiAKICAgICBkZWYgdmlzaXRGaWVsZChzZWxmLCBmaWVsZCwgbmFtZSwgc3VtPU5vbmUsIHByb2Q9Tm9uZSwgZGVwdGg9MCk6CiAgICAgICAgIGN0eXBlID0gZ2V0X2NfdHlwZShmaWVsZC50eXBlKQotICAgICAgICBzZWxmLmVtaXQoImlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfJXMpKSB7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKQorICAgICAgICBpZiBmaWVsZC5vcHQ6CisgICAgICAgICAgICBjaGVjayA9ICJleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF8lcykiICUgKGZpZWxkLm5hbWUsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hlY2sgPSAiX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkXyVzKSIgJSAoZmllbGQubmFtZSwpCisgICAgICAgIHNlbGYuZW1pdCgiaWYgKCVzKSB7IiAlIChjaGVjaywpLCBkZXB0aCwgcmVmbG93PUZhbHNlKQogICAgICAgICBzZWxmLmVtaXQoImludCByZXM7IiwgZGVwdGgrMSkKICAgICAgICAgaWYgZmllbGQuc2VxOgogICAgICAgICAgICAgc2VsZi5lbWl0KCJQeV9zc2l6ZV90IGxlbjsiLCBkZXB0aCsxKQpAQCAtNTEwLDkgKzUxOSw5IEBACiAgICAgICAgICAgICBzZWxmLmVtaXQoIn0iLCBkZXB0aCsxKQogICAgICAgICAgICAgc2VsZi5lbWl0KCJsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsiLCBkZXB0aCsxKQogICAgICAgICAgICAgaWYgc2VsZi5pc1NpbXBsZVR5cGUoZmllbGQpOgotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBhc2RsX2ludF9zZXFfbmV3KGxlbiwgYXJlbmEpOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBfUHlfYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCVzID09IE5VTEwpIGdvdG8gZmFpbGVkOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQogICAgICAgICAgICAgc2VsZi5lbWl0KCJmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsiLCBkZXB0aCsxKQogICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyB2YWx1ZTsiICUgY3R5cGUsIGRlcHRoKzIpCkBAIC01NTgsNiArNTY3LDEzIEBACiAgICAgZGVmIHZpc2l0UHJvZHVjdChzZWxmLCBwcm9kLCBuYW1lKToKICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgUHlUeXBlT2JqZWN0IColc190eXBlOyIgJSBuYW1lLCAwKQogICAgICAgICBzZWxmLmVtaXQoInN0YXRpYyBQeU9iamVjdCogYXN0Mm9ial8lcyh2b2lkKik7IiAlIG5hbWUsIDApCisgICAgICAgIGlmIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgIGZvciBhIGluIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXRfaWRlbnRpZmllcihhLm5hbWUpCisgICAgICAgICAgICBzZWxmLmVtaXQoInN0YXRpYyBjaGFyIColc19hdHRyaWJ1dGVzW10gPSB7IiAlIG5hbWUsIDApCisgICAgICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCciJXMiLCcgJSBhLm5hbWUsIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoIn07IiwgMCkKICAgICAgICAgaWYgcHJvZC5maWVsZHM6CiAgICAgICAgICAgICBmb3IgZiBpbiBwcm9kLmZpZWxkczoKICAgICAgICAgICAgICAgICBzZWxmLmVtaXRfaWRlbnRpZmllcihmLm5hbWUpCkBAIC04MTksNiArODM1LDcgQEAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KilvKTsKICAgICByZXR1cm4gKFB5T2JqZWN0KilvOwogfQorI2RlZmluZSBhc3Qyb2JqX3NpbmdsZXRvbiBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2lkZW50aWZpZXIgYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9zdHJpbmcgYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9ieXRlcyBhc3Qyb2JqX29iamVjdApAQCAtODMwLDYgKzg0NywxNyBAQAogCiAvKiBDb252ZXJzaW9uIFB5dGhvbiAtPiBBU1QgKi8KIAorc3RhdGljIGludCBvYmoyYXN0X3NpbmdsZXRvbihQeU9iamVjdCAqb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCit7CisgICAgaWYgKG9iaiAhPSBQeV9Ob25lICYmIG9iaiAhPSBQeV9UcnVlICYmIG9iaiAhPSBQeV9GYWxzZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBU1Qgc2luZ2xldG9uIG11c3QgYmUgVHJ1ZSwgRmFsc2UsIG9yIE5vbmUiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgICpvdXQgPSBvYmo7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgb2JqMmFzdF9vYmplY3QoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQogewogICAgIGlmIChvYmogPT0gUHlfTm9uZSkKQEAgLTkwNCw2ICs5MzIsMTkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBleGlzdHNfbm90X25vbmUoUHlPYmplY3QgKm9iaiwgX1B5X0lkZW50aWZpZXIgKmlkKQoreworICAgIGludCBpc25vbmU7CisgICAgUHlPYmplY3QgKmF0dHIgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgaWQpOworICAgIGlmICghYXR0cikgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaXNub25lID0gYXR0ciA9PSBQeV9Ob25lOworICAgIFB5X0RFQ1JFRihhdHRyKTsKKyAgICByZXR1cm4gIWlzbm9uZTsKK30KKwogIiIiLCAwLCByZWZsb3c9RmFsc2UpCiAKICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgaW50IGluaXRfdHlwZXModm9pZCkiLDApCkBAIC05MjUsNiArOTY2LDExIEBACiAgICAgICAgIHNlbGYuZW1pdCgnJXNfdHlwZSA9IG1ha2VfdHlwZSgiJXMiLCAmQVNUX3R5cGUsICVzLCAlZCk7JyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgbmFtZSwgZmllbGRzLCBsZW4ocHJvZC5maWVsZHMpKSwgMSkKICAgICAgICAgc2VsZi5lbWl0KCJpZiAoISVzX3R5cGUpIHJldHVybiAwOyIgJSBuYW1lLCAxKQorICAgICAgICBpZiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBzZWxmLmVtaXQoImlmICghYWRkX2F0dHJpYnV0ZXMoJXNfdHlwZSwgJXNfYXR0cmlidXRlcywgJWQpKSByZXR1cm4gMDsiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgbmFtZSwgbGVuKHByb2QuYXR0cmlidXRlcykpLCAxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIWFkZF9hdHRyaWJ1dGVzKCVzX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsiICUgbmFtZSwgMSkKIAogICAgIGRlZiB2aXNpdFN1bShzZWxmLCBzdW0sIG5hbWUpOgogICAgICAgICBzZWxmLmVtaXQoJyVzX3R5cGUgPSBtYWtlX3R5cGUoIiVzIiwgJkFTVF90eXBlLCBOVUxMLCAwKTsnICUKQEAgLTk2OCw3ICsxMDE0LDcgQEAKICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIW0pIHJldHVybiBOVUxMOyIsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgiZCA9IFB5TW9kdWxlX0dldERpY3QobSk7IiwgMSkKICAgICAgICAgc2VsZi5lbWl0KCdpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkFTVCIsIChQeU9iamVjdCopJkFTVF90eXBlKSA8IDApIHJldHVybiBOVUxMOycsIDEpCi0gICAgICAgIHNlbGYuZW1pdCgnaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUNGX09OTFlfQVNUIiwgUHlDRl9PTkxZX0FTVCkgPCAwKScsIDEpCisgICAgICAgIHNlbGYuZW1pdCgnaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5Q0ZfT05MWV9BU1QpIDwgMCknLCAxKQogICAgICAgICBzZWxmLmVtaXQoInJldHVybiBOVUxMOyIsIDIpCiAgICAgICAgIGZvciBkZm4gaW4gbW9kLmRmbnM6CiAgICAgICAgICAgICBzZWxmLnZpc2l0KGRmbikKQEAgLTEwODAsNiArMTEyNiwxMiBAQAogICAgICAgICBzZWxmLmVtaXQoImlmICghcmVzdWx0KSByZXR1cm4gTlVMTDsiLCAxKQogICAgICAgICBmb3IgZmllbGQgaW4gcHJvZC5maWVsZHM6CiAgICAgICAgICAgICBzZWxmLnZpc2l0RmllbGQoZmllbGQsIG5hbWUsIDEsIFRydWUpCisgICAgICAgIGZvciBhIGluIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgIHNlbGYuZW1pdCgidmFsdWUgPSBhc3Qyb2JqXyVzKG8tPiVzKTsiICUgKGEudHlwZSwgYS5uYW1lKSwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7IiwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF8lcywgdmFsdWUpIDwgMCknICUgYS5uYW1lLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCdnb3RvIGZhaWxlZDsnLCAyKQorICAgICAgICAgICAgc2VsZi5lbWl0KCdQeV9ERUNSRUYodmFsdWUpOycsIDEpCiAgICAgICAgIHNlbGYuZnVuY19lbmQoKQogCiAgICAgZGVmIHZpc2l0Q29uc3RydWN0b3Ioc2VsZiwgY29ucywgZW51bSwgbmFtZSk6CkBAIC0xMTQyLDcgKzExOTQsOCBAQAogICAgIENPREUgPSAiIiIKIFB5T2JqZWN0KiBQeUFTVF9tb2Qyb2JqKG1vZF90eSB0KQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIGFzdDJvYmpfbW9kKHQpOwogfQogCkBAIC0xMTU2LDcgKzEyMDksOCBAQAogICAgIGludCBpc2luc3RhbmNlOwogICAgIGFzc2VydCgwIDw9IG1vZGUgJiYgbW9kZSA8PSAyKTsKIAotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShhc3QsIHJlcV90eXBlW21vZGVdKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkKQEAgLTExNzQsNyArMTIyOCw4IEBACiAKIGludCBQeUFTVF9DaGVjayhQeU9iamVjdCogb2JqKQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpOwogfQogIiIiCmRpZmYgLS1naXQgYS9QYXJzZXIvZ3JhbW1hci5jIGIvUGFyc2VyL2dyYW1tYXIuYwppbmRleCBmMmEyNWNhLi5kNDI3MGRlIDEwMDY0NAotLS0gYS9QYXJzZXIvZ3JhbW1hci5jCisrKyBiL1BhcnNlci9ncmFtbWFyLmMKQEAgLTI5LDcgKzI5LDcgQEAKIH0KIAogZGZhICoKLWFkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY2hhciAqbmFtZSkKK2FkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBkZmEgKmQ7CiAKQEAgLTg1LDcgKzg1LDcgQEAKIH0KIAogaW50Ci1hZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBpbnQgaTsKICAgICBsYWJlbCAqbGI7CkBAIC0xMTEsNyArMTExLDcgQEAKIC8qIFNhbWUsIGJ1dCByYXRoZXIgZGllcyB0aGFuIGFkZHMgKi8KIAogaW50Ci1maW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cikKK2ZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKQogewogICAgIGludCBpOwogCmRpZmYgLS1naXQgYS9QYXJzZXIvZ3JhbW1hcjEuYyBiL1BhcnNlci9ncmFtbWFyMS5jCmluZGV4IDQ0MGJhNDQuLjMwYTZmMDcgMTAwNjQ0Ci0tLSBhL1BhcnNlci9ncmFtbWFyMS5jCisrKyBiL1BhcnNlci9ncmFtbWFyMS5jCkBAIC05LDkgKzksOSBAQAogLyogUmV0dXJuIHRoZSBERkEgZm9yIHRoZSBnaXZlbiB0eXBlICovCiAKIGRmYSAqCi1QeUdyYW1tYXJfRmluZERGQShncmFtbWFyICpnLCByZWdpc3RlciBpbnQgdHlwZSkKK1B5R3JhbW1hcl9GaW5kREZBKGdyYW1tYXIgKmcsIGludCB0eXBlKQogewotICAgIHJlZ2lzdGVyIGRmYSAqZDsKKyAgICBkZmEgKmQ7CiAjaWYgMQogICAgIC8qIE1hc3NpdmUgc3BlZWQtdXAgKi8KICAgICBkID0gJmctPmdfZGZhW3R5cGUgLSBOVF9PRkZTRVRdOwpAQCAtMTksNyArMTksNyBAQAogICAgIHJldHVybiBkOwogI2Vsc2UKICAgICAvKiBPbGQsIHNsb3cgdmVyc2lvbiAqLwotICAgIHJlZ2lzdGVyIGludCBpOworICAgIGludCBpOwogCiAgICAgZm9yIChpID0gZy0+Z19uZGZhcywgZCA9IGctPmdfZGZhOyAtLWkgPj0gMDsgZCsrKSB7CiAgICAgICAgIGlmIChkLT5kX3R5cGUgPT0gdHlwZSkKQEAgLTMwLDcgKzMwLDcgQEAKICNlbmRpZgogfQogCi1jaGFyICoKK2NvbnN0IGNoYXIgKgogUHlHcmFtbWFyX0xhYmVsUmVwcihsYWJlbCAqbGIpCiB7CiAgICAgc3RhdGljIGNoYXIgYnVmWzEwMF07CmRpZmYgLS1naXQgYS9QYXJzZXIvbXlyZWFkbGluZS5jIGIvUGFyc2VyL215cmVhZGxpbmUuYwppbmRleCA5ZjFmYzFlLi5hMWM0YjVjIDEwMDY0NAotLS0gYS9QYXJzZXIvbXlyZWFkbGluZS5jCisrKyBiL1BhcnNlci9teXJlYWRsaW5lLmMKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgKi8KICAgICAgICAgaWYgKEdldExhc3RFcnJvcigpPT1FUlJPUl9PUEVSQVRJT05fQUJPUlRFRCkgewogICAgICAgICAgICAgaEludGVycnVwdEV2ZW50ID0gX1B5T1NfU2lnaW50RXZlbnQoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdChoSW50ZXJydXB0RXZlbnQsIDEwKSkgeworICAgICAgICAgICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCAxMCwgRkFMU0UpKSB7CiAgICAgICAgICAgICBjYXNlIFdBSVRfT0JKRUNUXzA6CiAgICAgICAgICAgICAgICAgUmVzZXRFdmVudChoSW50ZXJydXB0RXZlbnQpOwogICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiBJbnRlcnJ1cHQgKi8KQEAgLTEwOSwyMiArMTA5LDI2IEBACiAvKiBSZWFkbGluZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBmZ2V0cygpICovCiAKIGNoYXIgKgotUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewogICAgIHNpemVfdCBuOwogICAgIGNoYXIgKnAsICpwcjsKKwogICAgIG4gPSAxMDA7Ci0gICAgaWYgKChwID0gKGNoYXIgKilQeU1lbV9NQUxMT0MobikpID09IE5VTEwpCisgICAgcCA9IChjaGFyICopUHlNZW1fUmF3TWFsbG9jKG4pOworICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgZmZsdXNoKHN5c19zdGRvdXQpOwogICAgIGlmIChwcm9tcHQpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBwcm9tcHQpOwogICAgIGZmbHVzaChzdGRlcnIpOworCiAgICAgc3dpdGNoIChteV9mZ2V0cyhwLCAoaW50KW4sIHN5c19zdGRpbikpIHsKICAgICBjYXNlIDA6IC8qIE5vcm1hbCBjYXNlICovCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMTogLyogSW50ZXJydXB0ICovCi0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGNhc2UgLTE6IC8qIEVPRiAqLwogICAgIGNhc2UgLTI6IC8qIEVycm9yICovCkBAIC0xMzYsMTMgKzE0MCwxMyBAQAogICAgIHdoaWxlIChuID4gMCAmJiBwW24tMV0gIT0gJ1xuJykgewogICAgICAgICBzaXplX3QgaW5jciA9IG4rMjsKICAgICAgICAgaWYgKGluY3IgPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAiaW5wdXQgbGluZSB0b28gbG9uZyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbiArIGluY3IpOworICAgICAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuICsgaW5jcik7CiAgICAgICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTUxLDkgKzE1NSw5IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbiArPSBzdHJsZW4ocCtuKTsKICAgICB9Ci0gICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbisxKTsKKyAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuKzEpOwogICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE2NiwxNSArMTcwLDE2IEBACiAKICAgIE5vdGU6IFB5dGhvbiBleHBlY3RzIGluIHJldHVybiBhIGJ1ZmZlciBhbGxvY2F0ZWQgd2l0aCBQeU1lbV9NYWxsb2MuICovCiAKLWNoYXIgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitjaGFyICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogCiAKIC8qIEludGVyZmFjZSB1c2VkIGJ5IHRva2VuaXplci5jIGFuZCBibHRpbm1vZHVsZS5jICovCiAKIGNoYXIgKgotUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7Ci0gICAgY2hhciAqcnY7CisgICAgY2hhciAqcnYsICpyZXM7CisgICAgc2l6ZV90IGxlbjsKIAogICAgIGlmIChfUHlPU19SZWFkbGluZVRTdGF0ZSA9PSBQeVRocmVhZFN0YXRlX0dFVCgpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC0yMjEsNSArMjI2LDE0IEBACiAKICAgICBfUHlPU19SZWFkbGluZVRTdGF0ZSA9IE5VTEw7CiAKLSAgICByZXR1cm4gcnY7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbGVuID0gc3RybGVuKHJ2KSArIDE7CisgICAgcmVzID0gUHlNZW1fTWFsbG9jKGxlbik7CisgICAgaWYgKHJlcyAhPSBOVUxMKQorICAgICAgICBtZW1jcHkocmVzLCBydiwgbGVuKTsKKyAgICBQeU1lbV9SYXdGcmVlKHJ2KTsKKworICAgIHJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9QYXJzZXIvbm9kZS5jIGIvUGFyc2VyL25vZGUuYwppbmRleCAxZTRmMGRhLi5iMjZjZTYxIDEwMDY0NAotLS0gYS9QYXJzZXIvbm9kZS5jCisrKyBiL1BhcnNlci9ub2RlLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCiBpbnQKLVB5Tm9kZV9BZGRDaGlsZChyZWdpc3RlciBub2RlICpuMSwgaW50IHR5cGUsIGNoYXIgKnN0ciwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitQeU5vZGVfQWRkQ2hpbGQobm9kZSAqbjEsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIGNvbnN0IGludCBuY2ggPSBuMS0+bl9uY2hpbGRyZW47CiAgICAgaW50IGN1cnJlbnRfY2FwYWNpdHk7CmRpZmYgLS1naXQgYS9QYXJzZXIvcGFyc2VyLmMgYi9QYXJzZXIvcGFyc2VyLmMKaW5kZXggYjUwNWZlMC4uNTZlYzUxNCAxMDA2NDQKLS0tIGEvUGFyc2VyL3BhcnNlci5jCisrKyBiL1BhcnNlci9wYXJzZXIuYwpAQCAtMzUsOSArMzUsOSBAQAogI2RlZmluZSBzX2VtcHR5KHMpICgocyktPnNfdG9wID09ICYocyktPnNfYmFzZVtNQVhTVEFDS10pCiAKIHN0YXRpYyBpbnQKLXNfcHVzaChyZWdpc3RlciBzdGFjayAqcywgZGZhICpkLCBub2RlICpwYXJlbnQpCitzX3B1c2goc3RhY2sgKnMsIGRmYSAqZCwgbm9kZSAqcGFyZW50KQogewotICAgIHJlZ2lzdGVyIHN0YWNrZW50cnkgKnRvcDsKKyAgICBzdGFja2VudHJ5ICp0b3A7CiAgICAgaWYgKHMtPnNfdG9wID09IHMtPnNfYmFzZSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNfcHVzaDogcGFyc2VyIHN0YWNrIG92ZXJmbG93XG4iKTsKICAgICAgICAgcmV0dXJuIEVfTk9NRU07CkBAIC01Miw3ICs1Miw3IEBACiAjaWZkZWYgUHlfREVCVUcKIAogc3RhdGljIHZvaWQKLXNfcG9wKHJlZ2lzdGVyIHN0YWNrICpzKQorc19wb3Aoc3RhY2sgKnMpCiB7CiAgICAgaWYgKHNfZW1wdHkocykpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInNfcG9wOiBwYXJzZXIgc3RhY2sgdW5kZXJmbG93IC0tIEZBVEFMIik7CkBAIC0xMDUsNyArMTA1LDcgQEAKIC8qIFBBUlNFUiBTVEFDSyBPUEVSQVRJT05TICovCiAKIHN0YXRpYyBpbnQKLXNoaWZ0KHJlZ2lzdGVyIHN0YWNrICpzLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorc2hpZnQoc3RhY2sgKnMsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKIH0KIAogc3RhdGljIGludAotcHVzaChyZWdpc3RlciBzdGFjayAqcywgaW50IHR5cGUsIGRmYSAqZCwgaW50IG5ld3N0YXRlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK3B1c2goc3RhY2sgKnMsIGludCB0eXBlLCBkZmEgKmQsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKLSAgICByZWdpc3RlciBub2RlICpuOworICAgIG5vZGUgKm47CiAgICAgbiA9IHMtPnNfdG9wLT5zX3BhcmVudDsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwogICAgIGVyciA9IFB5Tm9kZV9BZGRDaGlsZChuLCB0eXBlLCAoY2hhciAqKU5VTEwsIGxpbmVubywgY29sX29mZnNldCk7CkBAIC0xMzQsMTUgKzEzNCwxNSBAQAogLyogUEFSU0VSIFBST1BFUiAqLwogCiBzdGF0aWMgaW50Ci1jbGFzc2lmeShwYXJzZXJfc3RhdGUgKnBzLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorY2xhc3NpZnkocGFyc2VyX3N0YXRlICpwcywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBncmFtbWFyICpnID0gcHMtPnBfZ3JhbW1hcjsKLSAgICByZWdpc3RlciBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKKyAgICBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKIAogICAgIGlmICh0eXBlID09IE5BTUUpIHsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciAqcyA9IHN0cjsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgY29uc3QgY2hhciAqcyA9IHN0cjsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSAhPSBOQU1FIHx8IGwtPmxiX3N0ciA9PSBOVUxMIHx8CiAgICAgICAgICAgICAgICAgbC0+bGJfc3RyWzBdICE9IHNbMF0gfHwKQEAgLTE2NSw4ICsxNjUsOCBAQAogICAgIH0KIAogICAgIHsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSA9PSB0eXBlICYmIGwtPmxiX3N0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgRChwcmludGYoIkl0J3MgYSB0b2tlbiB3ZSBrbm93XG4iKSk7CkBAIC0yMjUsMTAgKzIyNSwxMCBAQAogI2VuZGlmIC8qIGZ1dHVyZSBrZXl3b3JkICovCiAKIGludAotUHlQYXJzZXJfQWRkVG9rZW4ocmVnaXN0ZXIgcGFyc2VyX3N0YXRlICpwcywgcmVnaXN0ZXIgaW50IHR5cGUsIGNoYXIgKnN0ciwKK1B5UGFyc2VyX0FkZFRva2VuKHBhcnNlcl9zdGF0ZSAqcHMsIGludCB0eXBlLCBjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgaW50ICpleHBlY3RlZF9yZXQpCiB7Ci0gICAgcmVnaXN0ZXIgaW50IGlsYWJlbDsKKyAgICBpbnQgaWxhYmVsOwogICAgIGludCBlcnI7CiAKICAgICBEKHByaW50ZigiVG9rZW4gJXMvJyVzJyAuLi4gIiwgX1B5UGFyc2VyX1Rva2VuTmFtZXNbdHlwZV0sIHN0cikpOwpAQCAtMjQxLDE1ICsyNDEsMTUgQEAKICAgICAvKiBMb29wIHVudGlsIHRoZSB0b2tlbiBpcyBzaGlmdGVkIG9yIGFuIGVycm9yIG9jY3VycmVkICovCiAgICAgZm9yICg7OykgewogICAgICAgICAvKiBGZXRjaCB0aGUgY3VycmVudCBkZmEgYW5kIHN0YXRlICovCi0gICAgICAgIHJlZ2lzdGVyIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKLSAgICAgICAgcmVnaXN0ZXIgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CisgICAgICAgIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKKyAgICAgICAgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CiAKICAgICAgICAgRChwcmludGYoIiBERkEgJyVzJywgc3RhdGUgJWQ6IiwKICAgICAgICAgICAgIGQtPmRfbmFtZSwgcHMtPnBfc3RhY2suc190b3AtPnNfc3RhdGUpKTsKIAogICAgICAgICAvKiBDaGVjayBhY2NlbGVyYXRvciAqLwogICAgICAgICBpZiAocy0+c19sb3dlciA8PSBpbGFiZWwgJiYgaWxhYmVsIDwgcy0+c191cHBlcikgewotICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOworICAgICAgICAgICAgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOwogICAgICAgICAgICAgaWYgKHggIT0gLTEpIHsKICAgICAgICAgICAgICAgICBpZiAoeCAmICgxPDw3KSkgewogICAgICAgICAgICAgICAgICAgICAvKiBQdXNoIG5vbi10ZXJtaW5hbCAqLwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BhcnNldG9rLmMgYi9QYXJzZXIvcGFyc2V0b2suYwppbmRleCA3YmViNzM1Li5iNDk1N2I4IDEwMDY0NAotLS0gYS9QYXJzZXIvcGFyc2V0b2suYworKysgYi9QYXJzZXIvcGFyc2V0b2suYwpAQCAtMTMsNyArMTMsNyBAQAogCiAvKiBGb3J3YXJkICovCiBzdGF0aWMgbm9kZSAqcGFyc2V0b2soc3RydWN0IHRva19zdGF0ZSAqLCBncmFtbWFyICosIGludCwgcGVycmRldGFpbCAqLCBpbnQgKik7Ci1zdGF0aWMgaW50IGluaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgY29uc3QgY2hhciogZmlsZW5hbWUpOworc3RhdGljIGludCBpbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIFB5T2JqZWN0ICogZmlsZW5hbWUpOwogCiAvKiBQYXJzZSBpbnB1dCBjb21pbmcgZnJvbSBhIHN0cmluZy4gIFJldHVybiBlcnJvciBjb2RlLCBwcmludCBzb21lIGVycm9ycy4gKi8KIG5vZGUgKgpAQCAtNDEsOSArNDEsOSBAQAogfQogCiBub2RlICoKLVB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCitQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzLCBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvazsKICAgICBpbnQgZXhlY19pbnB1dCA9IHN0YXJ0ID09IGZpbGVfaW5wdXQ7CkBAIC02NywxMSArNjcsMzUgQEAKICAgICByZXR1cm4gcGFyc2V0b2sodG9rLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOwogfQogCitub2RlICoKK1B5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTDsKKyNpZm5kZWYgUEdFTgorICAgIGlmIChmaWxlbmFtZV9zdHIgIT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbjsKK30KKwogLyogUGFyc2UgaW5wdXQgY29taW5nIGZyb20gYSBmaWxlLiAgUmV0dXJuIGVycm9yIGNvZGUsIHByaW50IHNvbWUgZXJyb3JzLiAqLwogCiBub2RlICoKIFB5UGFyc2VyX1BhcnNlRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0KQogewogICAgIHJldHVybiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhmcCwgZmlsZW5hbWUsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcsIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgMCk7CkBAIC04MCw3ICsxMDQsOCBAQAogbm9kZSAqCiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmVuYywKICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMSwgY2hhciAqcHMyLCBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCBmbGFncykKIHsKICAgICBpbnQgaWZsYWdzID0gZmxhZ3M7CiAgICAgcmV0dXJuIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoZnAsIGZpbGVuYW1lLCBlbmMsIGcsIHN0YXJ0LCBwczEsCkBAIC04OCwxNiArMTEzLDE3IEBACiB9CiAKIG5vZGUgKgotUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK1B5UGFyc2VyX1BhcnNlRmlsZU9iamVjdChGSUxFICpmcCwgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rOwogCiAgICAgaWYgKGluaXRlcnIoZXJyX3JldCwgZmlsZW5hbWUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoKHRvayA9IFB5VG9rZW5pemVyX0Zyb21GaWxlKGZwLCAoY2hhciAqKWVuYywgcHMxLCBwczIpKSA9PSBOVUxMKSB7CisgICAgaWYgKCh0b2sgPSBQeVRva2VuaXplcl9Gcm9tRmlsZShmcCwgZW5jLCBwczEsIHBzMikpID09IE5VTEwpIHsKICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX05PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMDgsNiArMTM0LDMxIEBACiAgICAgcmV0dXJuIHBhcnNldG9rKHRvaywgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKIH0KIAorbm9kZSAqCitQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVvYmogPSBOVUxMOworI2lmbmRlZiBQR0VOCisgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW9iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgICAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIG4gPSBQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoZnAsIGZpbGVvYmosIGVuYywgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlb2JqKTsKKyNlbmRpZgorICAgIHJldHVybiBuOworfQorCiAjaWZkZWYgUFlfUEFSU0VSX1JFUVVJUkVTX0ZVVFVSRV9LRVlXT1JECiAjaWYgMAogc3RhdGljIGNoYXIgd2l0aF9tc2dbXSA9CkBAIC0xMzgsNyArMTg5LDYgQEAKICAgICBpbnQgc3RhcnRlZCA9IDA7CiAKICAgICBpZiAoKHBzID0gUHlQYXJzZXJfTmV3KGcsIHN0YXJ0KSkgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIG1lbSBmb3IgbmV3IHBhcnNlclxuIik7CiAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZSh0b2spOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3OCw3ICsyMjgsNiBAQAogICAgICAgICBsZW4gPSBiIC0gYTsgLyogWFhYIHRoaXMgbWF5IGNvbXB1dGUgTlVMTCAtIE5VTEwgKi8KICAgICAgICAgc3RyID0gKGNoYXIgKikgUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwogICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gbWVtIGZvciBuZXh0IHRva2VuXG4iKTsKICAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zMDgsNyArMzU3LDcgQEAKIH0KIAogc3RhdGljIGludAotaW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2luaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIGVycl9yZXQtPmVycm9yID0gRV9PSzsKICAgICBlcnJfcmV0LT5saW5lbm8gPSAwOwpAQCAtMzE3LDEzICszNjYsMTYgQEAKICAgICBlcnJfcmV0LT50b2tlbiA9IC0xOwogICAgIGVycl9yZXQtPmV4cGVjdGVkID0gLTE7CiAjaWZuZGVmIFBHRU4KLSAgICBpZiAoZmlsZW5hbWUpCi0gICAgICAgIGVycl9yZXQtPmZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7Ci0gICAgZWxzZQorICAgIGlmIChmaWxlbmFtZSkgeworICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOworICAgICAgICBlcnJfcmV0LT5maWxlbmFtZSA9IGZpbGVuYW1lOworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgZXJyX3JldC0+ZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHN0cmluZz4iKTsKLSAgICBpZiAoZXJyX3JldC0+ZmlsZW5hbWUgPT0gTlVMTCkgewotICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGVycl9yZXQtPmZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BnZW5tYWluLmMgYi9QYXJzZXIvcGdlbm1haW4uYwppbmRleCA1MmI4MzgwLi4wMTdhNGY5IDEwMDY0NAotLS0gYS9QYXJzZXIvcGdlbm1haW4uYworKysgYi9QYXJzZXIvcGdlbm1haW4uYwpAQCAtMTEzLDYgKzExMyw3IEBACiAgICAgICAgIFB5X0V4aXQoMSk7CiAgICAgfQogICAgIGcgPSBwZ2VuKG4pOworICAgIFB5Tm9kZV9GcmVlKG4pOwogICAgIGlmIChnID09IE5VTEwpIHsKICAgICAgICAgcHJpbnRmKCJCYWQgZ3JhbW1hci5cbiIpOwogICAgICAgICBQeV9FeGl0KDEpOwpAQCAtMTM3LDcgKzEzOCw3IEBACiAvKiBOby1ub25zZW5zZSBteV9yZWFkbGluZSgpIGZvciB0b2tlbml6ZXIuYyAqLwogCiBjaGFyICoKLVB5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpCitQeU9TX1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewogICAgIHNpemVfdCBuID0gMTAwMDsKICAgICBjaGFyICpwID0gKGNoYXIgKilQeU1lbV9NQUxMT0Mobik7CmRpZmYgLS1naXQgYS9QYXJzZXIvdG9rZW5pemVyLmMgYi9QYXJzZXIvdG9rZW5pemVyLmMKaW5kZXggNWMwYmQ2ZS4uNWJmN2U4NCAxMDA2NDQKLS0tIGEvUGFyc2VyL3Rva2VuaXplci5jCisrKyBiL1BhcnNlci90b2tlbml6ZXIuYwpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICAgICAgICAgfHwgYyA9PSAnXydcCiAgICAgICAgICAgICAgICB8fCAoYyA+PSAxMjgpKQogCi1leHRlcm4gY2hhciAqUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK2V4dGVybiBjaGFyICpQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogLyogUmV0dXJuIG1hbGxvYydlZCBzdHJpbmcgaW5jbHVkaW5nIHRyYWlsaW5nIFxuOwogICAgZW1wdHkgbWFsbG9jJ2VkIHN0cmluZyBmb3IgRU9GOwogICAgTlVMTCBpZiBpbnRlcnJ1cHRlZCAqLwpAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBUb2tlbiBuYW1lcyAqLwogCi1jaGFyICpfUHlQYXJzZXJfVG9rZW5OYW1lc1tdID0geworY29uc3QgY2hhciAqX1B5UGFyc2VyX1Rva2VuTmFtZXNbXSA9IHsKICAgICAiRU5ETUFSS0VSIiwKICAgICAiTkFNRSIsCiAgICAgIk5VTUJFUiIsCkBAIC02NzEsNyArNjcxLDggQEAKIAogc3RhdGljIGNoYXIgKgogdHJhbnNsYXRlX25ld2xpbmVzKGNvbnN0IGNoYXIgKnMsIGludCBleGVjX2lucHV0LCBzdHJ1Y3QgdG9rX3N0YXRlICp0b2spIHsKLSAgICBpbnQgc2tpcF9uZXh0X2xmID0gMCwgbmVlZGVkX2xlbmd0aCA9IHN0cmxlbihzKSArIDIsIGZpbmFsX2xlbmd0aDsKKyAgICBpbnQgc2tpcF9uZXh0X2xmID0gMDsKKyAgICBzaXplX3QgbmVlZGVkX2xlbmd0aCA9IHN0cmxlbihzKSArIDIsIGZpbmFsX2xlbmd0aDsKICAgICBjaGFyICpidWYsICpjdXJyZW50OwogICAgIGNoYXIgYyA9ICdcMCc7CiAgICAgYnVmID0gUHlNZW1fTUFMTE9DKG5lZWRlZF9sZW5ndGgpOwpAQCAtNzc5LDcgKzc4MCw3IEBACiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rID0gdG9rX25ldygpOwogICAgIGlmICh0b2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc3RyID0gKGNoYXIgKilkZWNvZGVfc3RyKHN0ciwgZXhlY19pbnB1dCwgdG9rKTsKKyAgICBzdHIgPSBkZWNvZGVfc3RyKHN0ciwgZXhlY19pbnB1dCwgdG9rKTsKICAgICBpZiAoc3RyID09IE5VTEwpIHsKICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZSh0b2spOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTgyMiw3ICs4MjMsOCBAQAogLyogU2V0IHVwIHRva2VuaXplciBmb3IgZmlsZSAqLwogCiBzdHJ1Y3QgdG9rX3N0YXRlICoKLVB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKmZwLCBjaGFyKiBlbmMsIGNoYXIgKnBzMSwgY2hhciAqcHMyKQorUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIqIGVuYywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvayA9IHRva19uZXcoKTsKICAgICBpZiAodG9rID09IE5VTEwpCkBAIC04NzMsNyArODc1LDcgQEAKIC8qIEdldCBuZXh0IGNoYXIsIHVwZGF0aW5nIHN0YXRlOyBlcnJvciBjb2RlIGdvZXMgaW50byB0b2stPmRvbmUgKi8KIAogc3RhdGljIGludAotdG9rX25leHRjKHJlZ2lzdGVyIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKK3Rva19uZXh0YyhzdHJ1Y3QgdG9rX3N0YXRlICp0b2spCiB7CiAgICAgZm9yICg7OykgewogICAgICAgICBpZiAodG9rLT5jdXIgIT0gdG9rLT5pbnApIHsKQEAgLTEwNzAsNyArMTA3Miw3IEBACiAvKiBCYWNrLXVwIG9uZSBjaGFyYWN0ZXIgKi8KIAogc3RhdGljIHZvaWQKLXRva19iYWNrdXAocmVnaXN0ZXIgc3RydWN0IHRva19zdGF0ZSAqdG9rLCByZWdpc3RlciBpbnQgYykKK3Rva19iYWNrdXAoc3RydWN0IHRva19zdGF0ZSAqdG9rLCBpbnQgYykKIHsKICAgICBpZiAoYyAhPSBFT0YpIHsKICAgICAgICAgaWYgKC0tdG9rLT5jdXIgPCB0b2stPmJ1ZikKQEAgLTEzMDAsOSArMTMwMiw5IEBACiAvKiBHZXQgbmV4dCB0b2tlbiwgYWZ0ZXIgc3BhY2Ugc3RyaXBwaW5nIGV0Yy4gKi8KIAogc3RhdGljIGludAotdG9rX2dldChyZWdpc3RlciBzdHJ1Y3QgdG9rX3N0YXRlICp0b2ssIGNoYXIgKipwX3N0YXJ0LCBjaGFyICoqcF9lbmQpCit0b2tfZ2V0KHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgY2hhciAqKnBfc3RhcnQsIGNoYXIgKipwX2VuZCkKIHsKLSAgICByZWdpc3RlciBpbnQgYzsKKyAgICBpbnQgYzsKICAgICBpbnQgYmxhbmtsaW5lLCBub25hc2NpaTsKIAogICAgICpwX3N0YXJ0ID0gKnBfZW5kID0gTlVMTDsKQEAgLTEzMTIsOCArMTMxNCw4IEBACiAKICAgICAvKiBHZXQgaW5kZW50YXRpb24gbGV2ZWwgKi8KICAgICBpZiAodG9rLT5hdGJvbCkgewotICAgICAgICByZWdpc3RlciBpbnQgY29sID0gMDsKLSAgICAgICAgcmVnaXN0ZXIgaW50IGFsdGNvbCA9IDA7CisgICAgICAgIGludCBjb2wgPSAwOworICAgICAgICBpbnQgYWx0Y29sID0gMDsKICAgICAgICAgdG9rLT5hdGJvbCA9IDA7CiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIGMgPSB0b2tfbmV4dGModG9rKTsKQEAgLTE3MjksMTAgKzE3MzEsMTUgQEAKICAgICBGSUxFICpmcDsKICAgICBjaGFyICpwX3N0YXJ0ID1OVUxMICwgKnBfZW5kID1OVUxMICwgKmVuY29kaW5nID0gTlVMTDsKIAorI2lmbmRlZiBQR0VOCisgICAgZmQgPSBfUHlfZHVwKGZkKTsKKyNlbHNlCiAgICAgZmQgPSBkdXAoZmQpOworI2VuZGlmCiAgICAgaWYgKGZkIDwgMCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKICAgICBmcCA9IGZkb3BlbihmZCwgInIiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuaCBiL1BhcnNlci90b2tlbml6ZXIuaAppbmRleCBlZDFmM2FhLi4xY2U2ZWViIDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmgKKysrIGIvUGFyc2VyL3Rva2VuaXplci5oCkBAIC0zNSw3ICszNSw3IEBACiAgICAgaW50IGluZHN0YWNrW01BWElOREVOVF07ICAgICAgICAgICAgLyogU3RhY2sgb2YgaW5kZW50cyAqLwogICAgIGludCBhdGJvbDsgICAgICAgICAgLyogTm9uemVybyBpZiBhdCBiZWdpbiBvZiBuZXcgbGluZSAqLwogICAgIGludCBwZW5kaW47ICAgICAgICAgLyogUGVuZGluZyBpbmRlbnRzIChpZiA+IDApIG9yIGRlZGVudHMgKGlmIDwgMCkgKi8KLSAgICBjaGFyICpwcm9tcHQsICpuZXh0cHJvbXB0OyAgICAgICAgICAvKiBGb3IgaW50ZXJhY3RpdmUgcHJvbXB0aW5nICovCisgICAgY29uc3QgY2hhciAqcHJvbXB0LCAqbmV4dHByb21wdDsgICAgICAgICAgLyogRm9yIGludGVyYWN0aXZlIHByb21wdGluZyAqLwogICAgIGludCBsaW5lbm87ICAgICAgICAgLyogQ3VycmVudCBsaW5lIG51bWJlciAqLwogICAgIGludCBsZXZlbDsgICAgICAgICAgLyogKCkgW10ge30gUGFyZW50aGVzZXMgbmVzdGluZyBsZXZlbCAqLwogICAgICAgICAgICAgLyogVXNlZCB0byBhbGxvdyBmcmVlIGNvbnRpbnVhdGlvbnMgaW5zaWRlIHRoZW0gKi8KQEAgLTY5LDggKzY5LDggQEAKIAogZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqLCBpbnQpOwogZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21VVEY4KGNvbnN0IGNoYXIgKiwgaW50KTsKLWV4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tRmlsZShGSUxFICosIGNoYXIqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKTsKK2V4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tRmlsZShGSUxFICosIGNvbnN0IGNoYXIqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIGV4dGVybiB2b2lkIFB5VG9rZW5pemVyX0ZyZWUoc3RydWN0IHRva19zdGF0ZSAqKTsKIGV4dGVybiBpbnQgUHlUb2tlbml6ZXJfR2V0KHN0cnVjdCB0b2tfc3RhdGUgKiwgY2hhciAqKiwgY2hhciAqKik7CiBleHRlcm4gY2hhciAqIFB5VG9rZW5pemVyX1Jlc3RvcmVFbmNvZGluZyhzdHJ1Y3QgdG9rX3N0YXRlKiB0b2ssCmRpZmYgLS1naXQgYS9QeXRob24vUHl0aG9uLWFzdC5jIGIvUHl0aG9uL1B5dGhvbi1hc3QuYwppbmRleCA3YmYyYzUwLi5lMDdhOTNmIDEwMDY0NAotLS0gYS9QeXRob24vUHl0aG9uLWFzdC5jCisrKyBiL1B5dGhvbi9QeXRob24tYXN0LmMKQEAgLTI3MSw2ICsyNzEsMTAgQEAKIHN0YXRpYyBjaGFyICpCeXRlc19maWVsZHNbXT17CiAgICAgInMiLAogfTsKK3N0YXRpYyBQeVR5cGVPYmplY3QgKk5hbWVDb25zdGFudF90eXBlOworc3RhdGljIGNoYXIgKk5hbWVDb25zdGFudF9maWVsZHNbXT17CisgICAgInZhbHVlIiwKK307CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpFbGxpcHNpc190eXBlOwogc3RhdGljIFB5VHlwZU9iamVjdCAqQXR0cmlidXRlX3R5cGU7CiBfUHlfSURFTlRJRklFUihhdHRyKTsKQEAgLTQwOCwyNCArNDEyLDI0IEBACiBzdGF0aWMgUHlUeXBlT2JqZWN0ICphcmd1bWVudHNfdHlwZTsKIHN0YXRpYyBQeU9iamVjdCogYXN0Mm9ial9hcmd1bWVudHModm9pZCopOwogX1B5X0lERU5USUZJRVIodmFyYXJnKTsKLV9QeV9JREVOVElGSUVSKHZhcmFyZ2Fubm90YXRpb24pOwogX1B5X0lERU5USUZJRVIoa3dvbmx5YXJncyk7Ci1fUHlfSURFTlRJRklFUihrd2FyZyk7Ci1fUHlfSURFTlRJRklFUihrd2FyZ2Fubm90YXRpb24pOwotX1B5X0lERU5USUZJRVIoZGVmYXVsdHMpOwogX1B5X0lERU5USUZJRVIoa3dfZGVmYXVsdHMpOworX1B5X0lERU5USUZJRVIoa3dhcmcpOworX1B5X0lERU5USUZJRVIoZGVmYXVsdHMpOwogc3RhdGljIGNoYXIgKmFyZ3VtZW50c19maWVsZHNbXT17CiAgICAgImFyZ3MiLAogICAgICJ2YXJhcmciLAotICAgICJ2YXJhcmdhbm5vdGF0aW9uIiwKICAgICAia3dvbmx5YXJncyIsCi0gICAgImt3YXJnIiwKLSAgICAia3dhcmdhbm5vdGF0aW9uIiwKLSAgICAiZGVmYXVsdHMiLAogICAgICJrd19kZWZhdWx0cyIsCisgICAgImt3YXJnIiwKKyAgICAiZGVmYXVsdHMiLAogfTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKmFyZ190eXBlOwogc3RhdGljIFB5T2JqZWN0KiBhc3Qyb2JqX2FyZyh2b2lkKik7CitzdGF0aWMgY2hhciAqYXJnX2F0dHJpYnV0ZXNbXSA9IHsKKyAgICAibGluZW5vIiwKKyAgICAiY29sX29mZnNldCIsCit9OwogX1B5X0lERU5USUZJRVIoYXJnKTsKIF9QeV9JREVOVElGSUVSKGFubm90YXRpb24pOwogc3RhdGljIGNoYXIgKmFyZ19maWVsZHNbXT17CkBAIC02NzMsNiArNjc3LDcgQEAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KilvKTsKICAgICByZXR1cm4gKFB5T2JqZWN0KilvOwogfQorI2RlZmluZSBhc3Qyb2JqX3NpbmdsZXRvbiBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2lkZW50aWZpZXIgYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9zdHJpbmcgYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9ieXRlcyBhc3Qyb2JqX29iamVjdApAQCAtNjg0LDYgKzY4OSwxNyBAQAogCiAvKiBDb252ZXJzaW9uIFB5dGhvbiAtPiBBU1QgKi8KIAorc3RhdGljIGludCBvYmoyYXN0X3NpbmdsZXRvbihQeU9iamVjdCAqb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCit7CisgICAgaWYgKG9iaiAhPSBQeV9Ob25lICYmIG9iaiAhPSBQeV9UcnVlICYmIG9iaiAhPSBQeV9GYWxzZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBU1Qgc2luZ2xldG9uIG11c3QgYmUgVHJ1ZSwgRmFsc2UsIG9yIE5vbmUiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgICpvdXQgPSBvYmo7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgb2JqMmFzdF9vYmplY3QoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQogewogICAgIGlmIChvYmogPT0gUHlfTm9uZSkKQEAgLTc1OCw2ICs3NzQsMTkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBleGlzdHNfbm90X25vbmUoUHlPYmplY3QgKm9iaiwgX1B5X0lkZW50aWZpZXIgKmlkKQoreworICAgIGludCBpc25vbmU7CisgICAgUHlPYmplY3QgKmF0dHIgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgaWQpOworICAgIGlmICghYXR0cikgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaXNub25lID0gYXR0ciA9PSBQeV9Ob25lOworICAgIFB5X0RFQ1JFRihhdHRyKTsKKyAgICByZXR1cm4gIWlzbm9uZTsKK30KKwogCiBzdGF0aWMgaW50IGluaXRfdHlwZXModm9pZCkKIHsKQEAgLTg2Miw2ICs4OTEsOSBAQAogICAgIGlmICghU3RyX3R5cGUpIHJldHVybiAwOwogICAgIEJ5dGVzX3R5cGUgPSBtYWtlX3R5cGUoIkJ5dGVzIiwgZXhwcl90eXBlLCBCeXRlc19maWVsZHMsIDEpOwogICAgIGlmICghQnl0ZXNfdHlwZSkgcmV0dXJuIDA7CisgICAgTmFtZUNvbnN0YW50X3R5cGUgPSBtYWtlX3R5cGUoIk5hbWVDb25zdGFudCIsIGV4cHJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lQ29uc3RhbnRfZmllbGRzLCAxKTsKKyAgICBpZiAoIU5hbWVDb25zdGFudF90eXBlKSByZXR1cm4gMDsKICAgICBFbGxpcHNpc190eXBlID0gbWFrZV90eXBlKCJFbGxpcHNpcyIsIGV4cHJfdHlwZSwgTlVMTCwgMCk7CiAgICAgaWYgKCFFbGxpcHNpc190eXBlKSByZXR1cm4gMDsKICAgICBBdHRyaWJ1dGVfdHlwZSA9IG1ha2VfdHlwZSgiQXR0cmlidXRlIiwgZXhwcl90eXBlLCBBdHRyaWJ1dGVfZmllbGRzLCAzKTsKQEAgLTEwMzksNiArMTA3MSw3IEBACiAgICAgY29tcHJlaGVuc2lvbl90eXBlID0gbWFrZV90eXBlKCJjb21wcmVoZW5zaW9uIiwgJkFTVF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX2ZpZWxkcywgMyk7CiAgICAgaWYgKCFjb21wcmVoZW5zaW9uX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoY29tcHJlaGVuc2lvbl90eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgZXhjZXB0aGFuZGxlcl90eXBlID0gbWFrZV90eXBlKCJleGNlcHRoYW5kbGVyIiwgJkFTVF90eXBlLCBOVUxMLCAwKTsKICAgICBpZiAoIWV4Y2VwdGhhbmRsZXJfdHlwZSkgcmV0dXJuIDA7CiAgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhleGNlcHRoYW5kbGVyX3R5cGUsIGV4Y2VwdGhhbmRsZXJfYXR0cmlidXRlcywgMikpCkBAIC0xMDQ2LDE2ICsxMDc5LDIxIEBACiAgICAgRXhjZXB0SGFuZGxlcl90eXBlID0gbWFrZV90eXBlKCJFeGNlcHRIYW5kbGVyIiwgZXhjZXB0aGFuZGxlcl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRIYW5kbGVyX2ZpZWxkcywgMyk7CiAgICAgaWYgKCFFeGNlcHRIYW5kbGVyX3R5cGUpIHJldHVybiAwOwotICAgIGFyZ3VtZW50c190eXBlID0gbWFrZV90eXBlKCJhcmd1bWVudHMiLCAmQVNUX3R5cGUsIGFyZ3VtZW50c19maWVsZHMsIDgpOworICAgIGFyZ3VtZW50c190eXBlID0gbWFrZV90eXBlKCJhcmd1bWVudHMiLCAmQVNUX3R5cGUsIGFyZ3VtZW50c19maWVsZHMsIDYpOwogICAgIGlmICghYXJndW1lbnRzX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoYXJndW1lbnRzX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBhcmdfdHlwZSA9IG1ha2VfdHlwZSgiYXJnIiwgJkFTVF90eXBlLCBhcmdfZmllbGRzLCAyKTsKICAgICBpZiAoIWFyZ190eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGFyZ190eXBlLCBhcmdfYXR0cmlidXRlcywgMikpIHJldHVybiAwOwogICAgIGtleXdvcmRfdHlwZSA9IG1ha2VfdHlwZSgia2V5d29yZCIsICZBU1RfdHlwZSwga2V5d29yZF9maWVsZHMsIDIpOwogICAgIGlmICgha2V5d29yZF90eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGtleXdvcmRfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGFsaWFzX3R5cGUgPSBtYWtlX3R5cGUoImFsaWFzIiwgJkFTVF90eXBlLCBhbGlhc19maWVsZHMsIDIpOwogICAgIGlmICghYWxpYXNfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhhbGlhc190eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgd2l0aGl0ZW1fdHlwZSA9IG1ha2VfdHlwZSgid2l0aGl0ZW0iLCAmQVNUX3R5cGUsIHdpdGhpdGVtX2ZpZWxkcywgMik7CiAgICAgaWYgKCF3aXRoaXRlbV90eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKHdpdGhpdGVtX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBpbml0aWFsaXplZCA9IDE7CiAgICAgcmV0dXJuIDE7CiB9CkBAIC0xOTIzLDYgKzE5NjEsMjUgQEAKIH0KIAogZXhwcl90eQorTmFtZUNvbnN0YW50KHNpbmdsZXRvbiB2YWx1ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQoreworICAgIGV4cHJfdHkgcDsKKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBOYW1lQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHAgPSAoZXhwcl90eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBwLT5raW5kID0gTmFtZUNvbnN0YW50X2tpbmQ7CisgICAgcC0+di5OYW1lQ29uc3RhbnQudmFsdWUgPSB2YWx1ZTsKKyAgICBwLT5saW5lbm8gPSBsaW5lbm87CisgICAgcC0+Y29sX29mZnNldCA9IGNvbF9vZmZzZXQ7CisgICAgcmV0dXJuIHA7Cit9CisKK2V4cHJfdHkKIEVsbGlwc2lzKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBleHByX3R5IHA7CkBAIC0yMTc3LDkgKzIyMzQsOCBAQAogfQogCiBhcmd1bWVudHNfdHkKLWFyZ3VtZW50cyhhc2RsX3NlcSAqIGFyZ3MsIGlkZW50aWZpZXIgdmFyYXJnLCBleHByX3R5IHZhcmFyZ2Fubm90YXRpb24sCi0gICAgICAgICAgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBpZGVudGlmaWVyIGt3YXJnLCBleHByX3R5IGt3YXJnYW5ub3RhdGlvbiwKLSAgICAgICAgICBhc2RsX3NlcSAqIGRlZmF1bHRzLCBhc2RsX3NlcSAqIGt3X2RlZmF1bHRzLCBQeUFyZW5hICphcmVuYSkKK2FyZ3VtZW50cyhhc2RsX3NlcSAqIGFyZ3MsIGFyZ190eSB2YXJhcmcsIGFzZGxfc2VxICoga3dvbmx5YXJncywgYXNkbF9zZXEgKgorICAgICAgICAgIGt3X2RlZmF1bHRzLCBhcmdfdHkga3dhcmcsIGFzZGxfc2VxICogZGVmYXVsdHMsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFyZ3VtZW50c190eSBwOwogICAgIHAgPSAoYXJndW1lbnRzX3R5KVB5QXJlbmFfTWFsbG9jKGFyZW5hLCBzaXplb2YoKnApKTsKQEAgLTIxODcsMTIgKzIyNDMsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcC0+YXJncyA9IGFyZ3M7CiAgICAgcC0+dmFyYXJnID0gdmFyYXJnOwotICAgIHAtPnZhcmFyZ2Fubm90YXRpb24gPSB2YXJhcmdhbm5vdGF0aW9uOwogICAgIHAtPmt3b25seWFyZ3MgPSBrd29ubHlhcmdzOwotICAgIHAtPmt3YXJnID0ga3dhcmc7Ci0gICAgcC0+a3dhcmdhbm5vdGF0aW9uID0ga3dhcmdhbm5vdGF0aW9uOwotICAgIHAtPmRlZmF1bHRzID0gZGVmYXVsdHM7CiAgICAgcC0+a3dfZGVmYXVsdHMgPSBrd19kZWZhdWx0czsKKyAgICBwLT5rd2FyZyA9IGt3YXJnOworICAgIHAtPmRlZmF1bHRzID0gZGVmYXVsdHM7CiAgICAgcmV0dXJuIHA7CiB9CiAKQEAgLTI5NDMsNiArMjk5NywxNSBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CisgICAgICAgIHJlc3VsdCA9IFB5VHlwZV9HZW5lcmljTmV3KE5hbWVDb25zdGFudF90eXBlLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOworICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfc2luZ2xldG9uKG8tPnYuTmFtZUNvbnN0YW50LnZhbHVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfdmFsdWUsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICBicmVhazsKICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CiAgICAgICAgIHJlc3VsdCA9IFB5VHlwZV9HZW5lcmljTmV3KEVsbGlwc2lzX3R5cGUsIE5VTEwsIE5VTEwpOwogICAgICAgICBpZiAoIXJlc3VsdCkgZ290byBmYWlsZWQ7CkBAIC0zMzYxLDI5ICszNDI0LDI0IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9hcmdzLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2lkZW50aWZpZXIoby0+dmFyYXJnKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfYXJnKG8tPnZhcmFyZyk7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF92YXJhcmcsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT52YXJhcmdhbm5vdGF0aW9uKTsKLSAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3ZhcmFyZ2Fubm90YXRpb24sIHZhbHVlKSA9PSAtMSkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT5rd29ubHlhcmdzLCBhc3Qyb2JqX2FyZyk7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd29ubHlhcmdzLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2lkZW50aWZpZXIoby0+a3dhcmcpOworICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3X2RlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dhcmcsIHZhbHVlKSA9PSAtMSkKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3X2RlZmF1bHRzLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+a3dhcmdhbm5vdGF0aW9uKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfYXJnKG8tPmt3YXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3YXJnYW5ub3RhdGlvbiwgdmFsdWUpID09IC0xKQorICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dhcmcsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT5kZWZhdWx0cywgYXN0Mm9ial9leHByKTsKQEAgLTMzOTEsMTEgKzM0NDksNiBAQAogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT5rd19kZWZhdWx0cywgYXN0Mm9ial9leHByKTsKLSAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3X2RlZmF1bHRzLCB2YWx1ZSkgPT0gLTEpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIGZhaWxlZDoKICAgICBQeV9YREVDUkVGKHZhbHVlKTsKQEAgLTM0MjUsNiArMzQ3OCwxNiBAQAogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfYW5ub3RhdGlvbiwgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIHZhbHVlID0gYXN0Mm9ial9pbnQoby0+bGluZW5vKTsKKyAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2xpbmVubywgdmFsdWUpIDwgMCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfaW50KG8tPmNvbF9vZmZzZXQpOworICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfY29sX29mZnNldCwgdmFsdWUpIDwgMCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogZmFpbGVkOgogICAgIFB5X1hERUNSRUYodmFsdWUpOwpAQCAtMzU0OSw3ICszNjEyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzU4NCw3ICszNjQ3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzY0MSw3ICszNzA0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzc0NCw3ICszODA3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzc2OCw3ICszODMxLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZGVjb3JhdG9yX2xpc3QgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZGVjb3JhdG9yX2xpc3QgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtMzc4MSw3ICszODQ0LDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlY29yYXRvcl9saXN0XCIgbWlzc2luZyBmcm9tIEZ1bmN0aW9uRGVmIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3JldHVybnMpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9yZXR1cm5zKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9yZXR1cm5zKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zODMxLDcgKzM4OTQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBiYXNlcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJhc2VzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChiYXNlcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zODU1LDcgKzM5MTgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBrZXl3b3JkcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGtleXdvcmRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChrZXl3b3JkcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGtleXdvcmRfdHkgdmFsdWU7CkBAIC0zODY4LDcgKzM5MzEsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia2V5d29yZHNcIiBtaXNzaW5nIGZyb20gQ2xhc3NEZWYiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfc3RhcmFyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM4NzgsNyArMzk0MSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGFyYXJncyA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9rd2FyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzg5OSw3ICszOTYyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtMzkyMyw3ICszOTg2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZGVjb3JhdG9yX2xpc3QgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZGVjb3JhdG9yX2xpc3QgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtMzk0OCw3ICs0MDExLDcgQEAKICAgICBpZiAoaXNpbnN0YW5jZSkgewogICAgICAgICBleHByX3R5IHZhbHVlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF92YWx1ZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM5ODAsNyArNDA0Myw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIHRhcmdldHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICB0YXJnZXRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh0YXJnZXRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTQwMTYsNyArNDA3OSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIHRhcmdldHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICB0YXJnZXRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh0YXJnZXRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTQxMzMsNyArNDE5Niw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQxNTcsNyArNDIyMCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQyMDUsNyArNDI2OCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQyMjksNyArNDI5Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQyNzcsNyArNDM0MCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQzMDEsNyArNDM2NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQzMzcsNyArNDQwMCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGl0ZW1zID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgaXRlbXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgd2l0aGl0ZW1fdHkgdmFsdWU7CkBAIC00MzYxLDcgKzQ0MjQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00Mzg2LDcgKzQ0NDksNyBAQAogICAgICAgICBleHByX3R5IGV4YzsKICAgICAgICAgZXhwcl90eSBjYXVzZTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2V4YykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2V4YykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfZXhjKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00Mzk2LDcgKzQ0NTksNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZXhjID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2NhdXNlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfY2F1c2UpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2NhdXNlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00NDMxLDcgKzQ0OTQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00NDU1LDcgKzQ1MTgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBoYW5kbGVycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGhhbmRsZXJzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChoYW5kbGVycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4Y2VwdGhhbmRsZXJfdHkgdmFsdWU7CkBAIC00NDc5LDcgKzQ1NDIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9yZWxzZSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00NTAzLDcgKzQ1NjYsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBmaW5hbGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBmaW5hbGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGZpbmFsYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00NTQwLDcgKzQ2MDMsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwidGVzdFwiIG1pc3NpbmcgZnJvbSBBc3NlcnQiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbXNnKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbXNnKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9tc2cpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ1NzIsNyArNDYzNSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgYWxpYXNfdHkgdmFsdWU7CkBAIC00NTk4LDcgKzQ2NjEsNyBAQAogICAgICAgICBhc2RsX3NlcSogbmFtZXM7CiAgICAgICAgIGludCBsZXZlbDsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX21vZHVsZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX21vZHVsZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbW9kdWxlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00NjE5LDcgKzQ2ODIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBuYW1lcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG5hbWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGFsaWFzX3R5IHZhbHVlOwpAQCAtNDYzMiw3ICs0Njk1LDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcIm5hbWVzXCIgbWlzc2luZyBmcm9tIEltcG9ydEZyb20iKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbGV2ZWwpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9sZXZlbCkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbGV2ZWwpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ2NjQsNyArNDcyNyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllciB2YWx1ZTsKQEAgLTQ2OTksNyArNDc2Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllciB2YWx1ZTsKQEAgLTQ4NDAsNyArNDkwMyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIHZhbHVlcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHZhbHVlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAodmFsdWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTUwMzYsNyArNTA5OSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBrZXlzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChrZXlzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTUwNjAsNyArNTEyMyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIHZhbHVlcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHZhbHVlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAodmFsdWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTUwOTUsNyArNTE1OCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChlbHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTUxNDIsNyArNTIwNSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBnZW5lcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKQEAgLTUxODksNyArNTI1Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBnZW5lcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKQEAgLTUyNDgsNyArNTMxMSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBnZW5lcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKQEAgLTUyOTUsNyArNTM1OCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBnZW5lcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl90eSB2YWx1ZTsKQEAgLTUzMTksNyArNTM4Miw3IEBACiAgICAgaWYgKGlzaW5zdGFuY2UpIHsKICAgICAgICAgZXhwcl90eSB2YWx1ZTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhbHVlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdmFsdWUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhbHVlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01Mzg2LDcgKzU0NDksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcHMgPSBhc2RsX2ludF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3BzID0gX1B5X2FzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3BzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgY21wb3BfdHkgdmFsdWU7CkBAIC01NDEwLDcgKzU0NzMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBjb21wYXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGNvbXBhcmF0b3JzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChjb21wYXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01NDYwLDcgKzU1MjMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBhcmdzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01NDg0LDcgKzU1NDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBrZXl3b3JkcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGtleXdvcmRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChrZXl3b3JkcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGtleXdvcmRfdHkgdmFsdWU7CkBAIC01NDk3LDcgKzU1NjAsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia2V5d29yZHNcIiBtaXNzaW5nIGZyb20gQ2FsbCIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0YXJhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTUwNyw3ICs1NTcwLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXJhcmdzID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2t3YXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01NTg4LDYgKzU2NTEsMjggQEAKICAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopTmFtZUNvbnN0YW50X3R5cGUpOworICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoaXNpbnN0YW5jZSkgeworICAgICAgICBzaW5nbGV0b24gdmFsdWU7CisKKyAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YWx1ZSkpIHsKKyAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIHJlcyA9IG9iajJhc3Rfc2luZ2xldG9uKHRtcCwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcInZhbHVlXCIgbWlzc2luZyBmcm9tIE5hbWVDb25zdGFudCIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgKm91dCA9IE5hbWVDb25zdGFudCh2YWx1ZSwgbGluZW5vLCBjb2xfb2Zmc2V0LCBhcmVuYSk7CisgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKUVsbGlwc2lzX3R5cGUpOwogICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CiAgICAgICAgIHJldHVybiAxOwpAQCAtNTc3Nyw3ICs1ODYyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTgyNCw3ICs1OTA5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTkzNyw3ICs2MDIyLDcgQEAKICAgICAgICAgZXhwcl90eSB1cHBlcjsKICAgICAgICAgZXhwcl90eSBzdGVwOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbG93ZXIpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9sb3dlcikpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbG93ZXIpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU5NDcsNyArNjAzMiw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBsb3dlciA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF91cHBlcikpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3VwcGVyKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF91cHBlcik7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTk1Nyw3ICs2MDQyLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHVwcGVyID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3N0ZXApKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9zdGVwKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9zdGVwKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01OTg5LDcgKzYwNzQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkaW1zID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZGltcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZGltcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHNsaWNlX3R5IHZhbHVlOwpAQCAtNjM0MCw3ICs2NDI1LDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBpZnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGlmcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChpZnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTY0MDQsNyArNjQ4OSw3IEBACiAgICAgICAgIGlkZW50aWZpZXIgbmFtZTsKICAgICAgICAgYXNkbF9zZXEqIGJvZHk7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF90eXBlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdHlwZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdHlwZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjQxNCw3ICs2NDk5LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHR5cGUgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbmFtZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX25hbWUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX25hbWUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY0MzUsNyArNjUyMCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTY0NjQsMTMgKzY1NDksMTEgQEAKIHsKICAgICBQeU9iamVjdCogdG1wID0gTlVMTDsKICAgICBhc2RsX3NlcSogYXJnczsKLSAgICBpZGVudGlmaWVyIHZhcmFyZzsKLSAgICBleHByX3R5IHZhcmFyZ2Fubm90YXRpb247CisgICAgYXJnX3R5IHZhcmFyZzsKICAgICBhc2RsX3NlcSoga3dvbmx5YXJnczsKLSAgICBpZGVudGlmaWVyIGt3YXJnOwotICAgIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uOwotICAgIGFzZGxfc2VxKiBkZWZhdWx0czsKICAgICBhc2RsX3NlcSoga3dfZGVmYXVsdHM7CisgICAgYXJnX3R5IGt3YXJnOworICAgIGFzZGxfc2VxKiBkZWZhdWx0czsKIAogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYXJncykpIHsKICAgICAgICAgaW50IHJlczsKQEAgLTY0ODMsNyArNjU2Niw3IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgYXJncyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgYXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIGFyZ190eSB2YWx1ZTsKQEAgLTY0OTYsMjYgKzY1NzksMTYgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiYXJnc1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF92YXJhcmcpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YXJhcmcpOwogICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2lkZW50aWZpZXIodG1wLCAmdmFyYXJnLCBhcmVuYSk7CisgICAgICAgIHJlcyA9IG9iajJhc3RfYXJnKHRtcCwgJnZhcmFyZywgYXJlbmEpOwogICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwogICAgICAgICBQeV9DTEVBUih0bXApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZhcmFyZyA9IE5VTEw7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbikpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhcmFyZ2Fubm90YXRpb24pOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAmdmFyYXJnYW5ub3RhdGlvbiwgYXJlbmEpOwotICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhcmFyZ2Fubm90YXRpb24gPSBOVUxMOwotICAgIH0KICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3b25seWFyZ3MpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIFB5X3NzaXplX3QgbGVuOwpAQCAtNjUyNyw3ICs2NjAwLDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBrd29ubHlhcmdzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBrd29ubHlhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGt3b25seWFyZ3MgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgYXJnX3R5IHZhbHVlOwpAQCAtNjU0MCw1MCArNjYxMyw2IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImt3b25seWFyZ3NcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJnKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmcpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2lkZW50aWZpZXIodG1wLCAma3dhcmcsIGFyZW5hKTsKLSAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgUHlfQ0xFQVIodG1wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBrd2FyZyA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmdhbm5vdGF0aW9uKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmdhbm5vdGF0aW9uKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKHRtcCwgJmt3YXJnYW5ub3RhdGlvbiwgYXJlbmEpOwotICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGt3YXJnYW5ub3RhdGlvbiA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIFB5X3NzaXplX3QgbGVuOwotICAgICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cyk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIGlmICghUHlMaXN0X0NoZWNrKHRtcCkpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudHMgZmllbGQgXCJkZWZhdWx0c1wiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOwotICAgICAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGRlZmF1bHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwotICAgICAgICBpZiAoZGVmYXVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKLSAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcihQeUxpc3RfR0VUX0lURU0odG1wLCBpKSwgJnZhbHVlLCBhcmVuYSk7Ci0gICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGRlZmF1bHRzLCBpLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfQ0xFQVIodG1wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJkZWZhdWx0c1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dfZGVmYXVsdHMpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIFB5X3NzaXplX3QgbGVuOwpAQCAtNjU5NSw3ICs2NjI0LDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBrd19kZWZhdWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAga3dfZGVmYXVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoa3dfZGVmYXVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTY2MDgsOCArNjYzNyw0MiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrd19kZWZhdWx0c1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgICpvdXQgPSBhcmd1bWVudHMoYXJncywgdmFyYXJnLCB2YXJhcmdhbm5vdGF0aW9uLCBrd29ubHlhcmdzLCBrd2FyZywKLSAgICAgICAgICAgICAgICAgICAgIGt3YXJnYW5ub3RhdGlvbiwgZGVmYXVsdHMsIGt3X2RlZmF1bHRzLCBhcmVuYSk7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2t3YXJnKSkgeworICAgICAgICBpbnQgcmVzOworICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmcpOworICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICByZXMgPSBvYmoyYXN0X2FyZyh0bXAsICZrd2FyZywgYXJlbmEpOworICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICBQeV9DTEVBUih0bXApOworICAgIH0gZWxzZSB7CisgICAgICAgIGt3YXJnID0gTlVMTDsKKyAgICB9CisgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cykpIHsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAgUHlfc3NpemVfdCBsZW47CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50cyBmaWVsZCBcImRlZmF1bHRzXCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKKyAgICAgICAgZGVmYXVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBpZiAoZGVmYXVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKKyAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcihQeUxpc3RfR0VUX0lURU0odG1wLCBpKSwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGRlZmF1bHRzLCBpLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJkZWZhdWx0c1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgICpvdXQgPSBhcmd1bWVudHMoYXJncywgdmFyYXJnLCBrd29ubHlhcmdzLCBrd19kZWZhdWx0cywga3dhcmcsIGRlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgYXJlbmEpOwogICAgIHJldHVybiAwOwogZmFpbGVkOgogICAgIFB5X1hERUNSRUYodG1wKTsKQEAgLTY2MzQsNyArNjY5Nyw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImFyZ1wiIG1pc3NpbmcgZnJvbSBhcmciKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYW5ub3RhdGlvbikpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfYW5ub3RhdGlvbikpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2Fubm90YXRpb24pOwogICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjcwNSw3ICs2NzY4LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwibmFtZVwiIG1pc3NpbmcgZnJvbSBhbGlhcyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hc25hbWUpKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2FzbmFtZSkpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2FzbmFtZSk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzQwLDcgKzY4MDMsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJjb250ZXh0X2V4cHJcIiBtaXNzaW5nIGZyb20gd2l0aGl0ZW0iKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfb3B0aW9uYWxfdmFycykpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfb3B0aW9uYWxfdmFycykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX29wdGlvbmFsX3ZhcnMpOwogICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjc3MCw3ICs2ODMzLDcgQEAKICAgICBpZiAoIW0pIHJldHVybiBOVUxMOwogICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQVNUIiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUNGX09OTFlfQVNUIiwgUHlDRl9PTkxZX0FTVCkgPCAwKQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUNGX09OTFlfQVNUKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAibW9kIiwgKFB5T2JqZWN0Kiltb2RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIk1vZHVsZSIsIChQeU9iamVjdCopTW9kdWxlX3R5cGUpIDwgMCkgcmV0dXJuCkBAIC02ODUwLDYgKzY5MTMsOCBAQAogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiU3RyIiwgKFB5T2JqZWN0KilTdHJfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkJ5dGVzIiwgKFB5T2JqZWN0KilCeXRlc190eXBlKSA8IDApIHJldHVybgogICAgICAgICBOVUxMOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTmFtZUNvbnN0YW50IiwgKFB5T2JqZWN0KilOYW1lQ29uc3RhbnRfdHlwZSkgPAorICAgICAgICAwKSByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkVsbGlwc2lzIiwgKFB5T2JqZWN0KilFbGxpcHNpc190eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQXR0cmlidXRlIiwgKFB5T2JqZWN0KilBdHRyaWJ1dGVfdHlwZSkgPCAwKQpAQCAtNjk0OSw3ICs3MDE0LDggQEAKIAogUHlPYmplY3QqIFB5QVNUX21vZDJvYmoobW9kX3R5IHQpCiB7Ci0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gYXN0Mm9ial9tb2QodCk7CiB9CiAKQEAgLTY5NjMsNyArNzAyOSw4IEBACiAgICAgaW50IGlzaW5zdGFuY2U7CiAgICAgYXNzZXJ0KDAgPD0gbW9kZSAmJiBtb2RlIDw9IDIpOwogCi0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKGFzdCwgcmVxX3R5cGVbbW9kZV0pOwogICAgIGlmIChpc2luc3RhbmNlID09IC0xKQpAQCAtNjk4MSw3ICs3MDQ4LDggQEAKIAogaW50IFB5QVNUX0NoZWNrKFB5T2JqZWN0KiBvYmopCiB7Ci0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKSZBU1RfdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9fd2FybmluZ3MuYyBiL1B5dGhvbi9fd2FybmluZ3MuYwppbmRleCBmMzNlNDc3Li5lODhmNjQ2IDEwMDY0NAotLS0gYS9QeXRob24vX3dhcm5pbmdzLmMKKysrIGIvUHl0aG9uL193YXJuaW5ncy5jCkBAIC05OSw3ICs5OSw3IEBACiAKIAogLyogVGhlIGl0ZW0gaXMgYSBib3Jyb3dlZCByZWZlcmVuY2UuICovCi1zdGF0aWMgY29uc3QgY2hhciAqCitzdGF0aWMgUHlPYmplY3QqCiBnZXRfZmlsdGVyKFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlPYmplY3QgKnRleHQsIFB5X3NzaXplX3QgbGluZW5vLAogICAgICAgICAgICBQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqKml0ZW0pCiB7CkBAIC0xNDQsMjEgKzE0NCwyOCBAQAogICAgICAgICBsbl9vYmogPSBQeVR1cGxlX0dFVF9JVEVNKHRtcF9pdGVtLCA0KTsKIAogICAgICAgICBnb29kX21zZyA9IGNoZWNrX21hdGNoZWQobXNnLCB0ZXh0KTsKKyAgICAgICAgaWYgKGdvb2RfbXNnID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgZ29vZF9tb2QgPSBjaGVja19tYXRjaGVkKG1vZCwgbW9kdWxlKTsKKyAgICAgICAgaWYgKGdvb2RfbW9kID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgaXNfc3ViY2xhc3MgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGNhdGVnb3J5LCBjYXQpOworICAgICAgICBpZiAoaXNfc3ViY2xhc3MgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICBsbiA9IFB5TG9uZ19Bc1NzaXplX3QobG5fb2JqKTsKLSAgICAgICAgaWYgKGdvb2RfbXNnID09IC0xIHx8IGdvb2RfbW9kID09IC0xIHx8IGlzX3N1YmNsYXNzID09IC0xIHx8Ci0gICAgICAgICAgICAobG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkpCisgICAgICAgIGlmIChsbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgaWYgKGdvb2RfbXNnICYmIGlzX3N1YmNsYXNzICYmIGdvb2RfbW9kICYmIChsbiA9PSAwIHx8IGxpbmVubyA9PSBsbikpCi0gICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc1N0cmluZyhhY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKICAgICB9CiAKICAgICBhY3Rpb24gPSBnZXRfZGVmYXVsdF9hY3Rpb24oKTsKLSAgICBpZiAoYWN0aW9uICE9IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVfQXNTdHJpbmcoYWN0aW9uKTsKLSAgICB9CisgICAgaWYgKGFjdGlvbiAhPSBOVUxMKQorICAgICAgICByZXR1cm4gYWN0aW9uOwogCiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9OQU1FICIuZGVmYXVsdGFjdGlvbiBub3QgZm91bmQiKTsKQEAgLTE5MiwyMyArMTk5LDI2IEBACiBub3JtYWxpemVfbW9kdWxlKFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbW9kdWxlOwotICAgIGNvbnN0IGNoYXIgKm1vZF9zdHI7CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTsKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGludCByYyA9IFB5T2JqZWN0X0lzVHJ1ZShmaWxlbmFtZSk7Ci0gICAgaWYgKHJjID09IC0xKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbHNlIGlmIChyYyA9PSAwKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjx1bmtub3duPiIpOwotCi0gICAgbW9kX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZmlsZW5hbWUpOwotICAgIGlmIChtb2Rfc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGxlbiA9IFB5VW5pY29kZV9HZXRMZW5ndGgoZmlsZW5hbWUpOwogICAgIGlmIChsZW4gPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKKworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChmaWxlbmFtZSk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKGZpbGVuYW1lKTsKKworICAgIC8qIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCIucHkiKTogKi8KICAgICBpZiAobGVuID49IDMgJiYKLSAgICAgICAgc3RybmNtcChtb2Rfc3RyICsgKGxlbiAtIDMpLCAiLnB5IiwgMykgPT0gMCkgeworICAgICAgICBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMykgPT0gJy4nICYmCisgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGxlbi0yKSA9PSAncCcgJiYKKyAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTEpID09ICd5JykKKyAgICB7CiAgICAgICAgIG1vZHVsZSA9IFB5VW5pY29kZV9TdWJzdHJpbmcoZmlsZW5hbWUsIDAsIGxlbi0zKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yNTMsMzkgKzI2Myw2MyBAQAogCiAgICAgbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoY2F0ZWdvcnksICZQeUlkX19fbmFtZV9fKTsKICAgICBpZiAobmFtZSA9PSBOVUxMKSAgLyogWFhYIENhbiBhbiBvYmplY3QgbGFjayBhICdfX25hbWVfXycgYXR0cmlidXRlPyAqLwotICAgICAgICByZXR1cm47CisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBmX3N0ZGVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CiAgICAgaWYgKGZfc3RkZXJyID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb3N0IHN5cy5zdGRlcnJcbiIpOwotICAgICAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICAvKiBQcmludCAiZmlsZW5hbWU6bGluZW5vOiBjYXRlZ29yeTogdGV4dFxuIiAqLwotICAgIFB5RmlsZV9Xcml0ZU9iamVjdChmaWxlbmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKGxpbmVub19zdHIsIGZfc3RkZXJyKTsKLSAgICBQeUZpbGVfV3JpdGVPYmplY3QobmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGZfc3RkZXJyKTsKLSAgICBQeUZpbGVfV3JpdGVPYmplY3QodGV4dCwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKTsKLSAgICBQeV9YREVDUkVGKG5hbWUpOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QoZmlsZW5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKGxpbmVub19zdHIsIGZfc3RkZXJyKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmX3N0ZGVycikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QodGV4dCwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBQeV9DTEVBUihuYW1lKTsKIAogICAgIC8qIFByaW50ICIgIHNvdXJjZV9saW5lXG4iICovCiAgICAgaWYgKHNvdXJjZWxpbmUpIHsKLSAgICAgICAgY2hhciAqc291cmNlX2xpbmVfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzb3VyY2VsaW5lKTsKLSAgICAgICAgaWYgKHNvdXJjZV9saW5lX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgd2hpbGUgKCpzb3VyY2VfbGluZV9zdHIgPT0gJyAnIHx8ICpzb3VyY2VfbGluZV9zdHIgPT0gJ1x0JyB8fAotICAgICAgICAgICAgICAgICpzb3VyY2VfbGluZV9zdHIgPT0gJ1wwMTQnKQotICAgICAgICAgICAgc291cmNlX2xpbmVfc3RyKys7CisgICAgICAgIGludCBraW5kOworICAgICAgICB2b2lkICpkYXRhOworICAgICAgICBQeV9zc2l6ZV90IGksIGxlbjsKKyAgICAgICAgUHlfVUNTNCBjaDsKKyAgICAgICAgUHlPYmplY3QgKnRydW5jYXRlZDsKIAotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoc291cmNlX2xpbmVfc3RyLCBmX3N0ZGVycik7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc291cmNlbGluZSkgPCAxKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc291cmNlbGluZSk7CisgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzb3VyY2VsaW5lKTsKKyAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc291cmNlbGluZSk7CisgICAgICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisgICAgICAgICAgICBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOworICAgICAgICAgICAgaWYgKGNoICE9ICcgJyAmJiBjaCAhPSAnXHQnICYmIGNoICE9ICdcMDE0JykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHRydW5jYXRlZCA9IFB5VW5pY29kZV9TdWJzdHJpbmcoc291cmNlbGluZSwgaSwgbGVuKTsKKyAgICAgICAgaWYgKHRydW5jYXRlZCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3Qoc291cmNlbGluZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7CisgICAgICAgIFB5X0RFQ1JFRih0cnVuY2F0ZWQpOwogICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpOwogICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGlmIChfUHlfRGlzcGxheVNvdXJjZUxpbmUoZl9zdGRlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIDIpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgZWxzZSB7CisgICAgICAgIF9QeV9EaXNwbGF5U291cmNlTGluZShmX3N0ZGVyciwgZmlsZW5hbWUsIGxpbmVubywgMik7CisgICAgfQorCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKQEAgLTI5Niw5ICszMzAsMTYgQEAKIHsKICAgICBQeU9iamVjdCAqa2V5ID0gTlVMTCwgKnRleHQgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTCwgKmxpbmVub19vYmogPSBOVUxMOwogICAgIFB5T2JqZWN0ICppdGVtID0gUHlfTm9uZTsKLSAgICBjb25zdCBjaGFyICphY3Rpb247CisgICAgUHlPYmplY3QgKmFjdGlvbjsKICAgICBpbnQgcmM7CiAKKyAgICAvKiBtb2R1bGUgY2FuIGJlIE5vbmUgaWYgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgbGF0ZSBkdXJpbmcgUHl0aG9uIHNodXRkb3duLgorICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIFB5dGhvbiB3YXJuaW5ncyBtb2R1bGUgd2FzIHByb2JhYmx5IHVubG9hZGVkLCBmaWx0ZXJzCisgICAgICAgYXJlIG5vIG1vcmUgYXZhaWxhYmxlIHRvIGNob29zZSBhcyBhY3Rpb24uIEl0IGlzIHNhZmVyIHRvIGlnbm9yZSB0aGUKKyAgICAgICB3YXJuaW5nIGFuZCBkbyBub3RoaW5nLiAqLworICAgIGlmIChtb2R1bGUgPT0gUHlfTm9uZSkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKICAgICBpZiAocmVnaXN0cnkgJiYgIVB5RGljdF9DaGVjayhyZWdpc3RyeSkgJiYgKHJlZ2lzdHJ5ICE9IFB5X05vbmUpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICIncmVnaXN0cnknIG11c3QgYmUgYSBkaWN0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzU0LDcgKzM5NSw3IEBACiAgICAgaWYgKGFjdGlvbiA9PSBOVUxMKQogICAgICAgICBnb3RvIGNsZWFudXA7CiAKLSAgICBpZiAoc3RyY21wKGFjdGlvbiwgImVycm9yIikgPT0gMCkgeworICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJlcnJvciIpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KGNhdGVnb3J5LCBtZXNzYWdlKTsKICAgICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KQEAgLTM2MiwxMyArNDAzLDEzIEBACiAgICAgLyogU3RvcmUgaW4gdGhlIHJlZ2lzdHJ5IHRoYXQgd2UndmUgYmVlbiBoZXJlLCAqZXhjZXB0KiB3aGVuIHRoZSBhY3Rpb24KICAgICAgICBpcyAiYWx3YXlzIi4gKi8KICAgICByYyA9IDA7Ci0gICAgaWYgKHN0cmNtcChhY3Rpb24sICJhbHdheXMiKSAhPSAwKSB7CisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImFsd2F5cyIpICE9IDApIHsKICAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSAmJgogICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHJlZ2lzdHJ5LCBrZXksIFB5X1RydWUpIDwgMCkKICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImlnbm9yZSIpID09IDApCisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImlnbm9yZSIpID09IDApCiAgICAgICAgICAgICBnb3RvIHJldHVybl9ub25lOwotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAib25jZSIpID09IDApIHsKKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAib25jZSIpID09IDApIHsKICAgICAgICAgICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMIHx8IHJlZ2lzdHJ5ID09IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICByZWdpc3RyeSA9IGdldF9vbmNlX3JlZ2lzdHJ5KCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ID09IE5VTEwpCkBAIC0zNzcsMjQgKzQxOCwxNSBAQAogICAgICAgICAgICAgLyogX29uY2VfcmVnaXN0cnlbKHRleHQsIGNhdGVnb3J5KV0gPSAxICovCiAgICAgICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJtb2R1bGUiKSA9PSAwKSB7CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgIm1vZHVsZSIpID09IDApIHsKICAgICAgICAgICAgIC8qIHJlZ2lzdHJ5Wyh0ZXh0LCBjYXRlZ29yeSwgMCldID0gMSAqLwogICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgewotICAgICAgICAgICAgUHlPYmplY3QgKnRvX3N0ciA9IFB5T2JqZWN0X1N0cihpdGVtKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycl9zdHIgPSAiPz8/IjsKLQotICAgICAgICAgICAgaWYgKHRvX3N0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZXJyX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodG9fc3RyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbnJlY29nbml6ZWQgYWN0aW9uICglcykgaW4gd2FybmluZ3MuZmlsdGVyczpcbiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGVycl9zdHIpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih0b19zdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgIlVucmVjb2duaXplZCBhY3Rpb24gKCVSKSBpbiB3YXJuaW5ncy5maWx0ZXJzOlxuICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgaXRlbSk7CiAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgICAgIH0KICAgICB9CkBAIC01MjgsMTMgKzU2MCwxMiBAQAogICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBjb25zdCBjaGFyICptb2R1bGVfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZygqbW9kdWxlKTsKICAgICAgICAgKmZpbGVuYW1lID0gTlVMTDsKLSAgICAgICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKLSAgICAgICAgaWYgKHN0cmNtcChtb2R1bGVfc3RyLCAiX19tYWluX18iKSA9PSAwKSB7CisgICAgICAgIGlmICgqbW9kdWxlICE9IFB5X05vbmUgJiYgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoKm1vZHVsZSwgIl9fbWFpbl9fIikgPT0gMCkgewogICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3YgPSBQeVN5c19HZXRPYmplY3QoImFyZ3YiKTsKLSAgICAgICAgICAgIGlmIChhcmd2ICE9IE5VTEwgJiYgUHlMaXN0X1NpemUoYXJndikgPiAwKSB7CisgICAgICAgICAgICAvKiBQeUxpc3RfQ2hlY2soKSBpcyBuZWVkZWQgYmVjYXVzZSBzeXMuYXJndiBpcyBzZXQgdG8gTm9uZSBkdXJpbmcKKyAgICAgICAgICAgICAgIFB5dGhvbiBmaW5hbGl6YXRpb24gKi8KKyAgICAgICAgICAgIGlmIChhcmd2ICE9IE5VTEwgJiYgUHlMaXN0X0NoZWNrKGFyZ3YpICYmIFB5TGlzdF9TaXplKGFyZ3YpID4gMCkgewogICAgICAgICAgICAgICAgIGludCBpc190cnVlOwogICAgICAgICAgICAgICAgICpmaWxlbmFtZSA9IFB5TGlzdF9HZXRJdGVtKGFyZ3YsIDApOwogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOwpAQCAtNTU0LDggKzU4NSw4IEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBlbWJlZGRlZCBpbnRlcnByZXRlcnMgZG9uJ3QgaGF2ZSBzeXMuYXJndiwgc2VlIGJ1ZyAjODM5MTUxICovCiAgICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIl9fbWFpbl9fIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgICAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKSB7CkBAIC02NDksNyArNjgwLDcgQEAKICAgICBQeU9iamVjdCAqcmVnaXN0cnkgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGVfZ2xvYmFscyA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT09PaXxPT086d2Fybl9leHBsaWNpdCIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PVWl8T09POndhcm5fZXhwbGljaXQiLAogICAgICAgICAgICAgICAgIGt3ZF9saXN0LCAmbWVzc2FnZSwgJmNhdGVnb3J5LCAmZmlsZW5hbWUsICZsaW5lbm8sICZtb2R1bGUsCiAgICAgICAgICAgICAgICAgJnJlZ2lzdHJ5LCAmbW9kdWxlX2dsb2JhbHMpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTcwNywxNCArNzM4LDE0IEBACiAKICAgICAgICAgLyogSGFuZGxlIHRoZSB3YXJuaW5nLiAqLwogICAgICAgICByZXR1cm5lZCA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgc291cmNlX2xpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIHNvdXJjZV9saW5lKTsKICAgICAgICAgUHlfREVDUkVGKHNvdXJjZV9saXN0KTsKICAgICAgICAgcmV0dXJuIHJldHVybmVkOwogICAgIH0KIAogIHN0YW5kYXJkX2NhbGw6CiAgICAgcmV0dXJuIHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBOVUxMKTsKIH0KIAogCkBAIC03ODYsMTEgKzgxNywyNiBAQAogCiAvKiBXYXJuaW5nIHdpdGggZXhwbGljaXQgb3JpZ2luICovCiBpbnQKK1B5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBpZiAoY2F0ZWdvcnkgPT0gTlVMTCkKKyAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKKyAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAogUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqdGV4dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciwgUHlPYmplY3QgKnJlZ2lzdHJ5KQogewotICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh0ZXh0KTsKICAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CiAgICAgUHlPYmplY3QgKm1vZHVsZSA9IE5VTEw7CkBAIC04MDAsMTggKzg0NiwxMiBAQAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgaWYgKG1vZHVsZV9zdHIgIT0gTlVMTCkgewogICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2R1bGVfc3RyKTsKLSAgICAgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKLSAgICBpZiAoY2F0ZWdvcnkgPT0gTlVMTCkKLSAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKLSAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsIHJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgcmV0ID0gMDsKKyAgICByZXQgPSBQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgcmVnaXN0cnkpOwogCiAgZXhpdDoKICAgICBQeV9YREVDUkVGKG1lc3NhZ2UpOwpAQCAtODIwLDYgKzg2MCw0OSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKK2ludAorUHlFcnJfV2FybkV4cGxpY2l0Rm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciwgUHlPYmplY3QgKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIFB5T2JqZWN0ICptZXNzYWdlOworICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpbnQgcmV0ID0gLTE7CisgICAgdmFfbGlzdCB2YXJnczsKKworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKG1vZHVsZV9zdHIgIT0gTlVMTCkgeworICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2R1bGVfc3RyKTsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmZGVmIEhBVkVfU1REQVJHX1BST1RPVFlQRVMKKyAgICB2YV9zdGFydCh2YXJncywgZm9ybWF0KTsKKyNlbHNlCisgICAgdmFfc3RhcnQodmFyZ3MpOworI2VuZGlmCisgICAgbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhcmdzKTsKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgIHJlcyA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgdmFfZW5kKHZhcmdzKTsKK2V4aXQ6CisgICAgUHlfWERFQ1JFRihtb2R1bGUpOworICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiByZXQ7Cit9CisKIAogUHlEb2NfU1RSVkFSKHdhcm5fZG9jLAogIklzc3VlIGEgd2FybmluZywgb3IgbWF5YmUgaWdub3JlIGl0IG9yIHJhaXNlIGFuIGV4Y2VwdGlvbi4iKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9hc2RsLmMgYi9QeXRob24vYXNkbC5jCmluZGV4IGU3ZTMyODAuLjc0ZmE5NDEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9hc2RsLmMKKysrIGIvUHl0aG9uL2FzZGwuYwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlICJhc2RsLmgiCiAKIGFzZGxfc2VxICoKLWFzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQorX1B5X2FzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFzZGxfc2VxICpzZXEgPSBOVUxMOwogICAgIHNpemVfdCBuID0gKHNpemUgPyAoc2l6ZW9mKHZvaWQgKikgKiAoc2l6ZSAtIDEpKSA6IDApOwpAQCAtMzMsNyArMzMsNyBAQAogfQogCiBhc2RsX2ludF9zZXEgKgotYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQorX1B5X2FzZGxfaW50X3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBhc2RsX2ludF9zZXEgKnNlcSA9IE5VTEw7CiAgICAgc2l6ZV90IG4gPSAoc2l6ZSA/IChzaXplb2Yodm9pZCAqKSAqIChzaXplIC0gMSkpIDogMCk7CmRpZmYgLS1naXQgYS9QeXRob24vYXN0LmMgYi9QeXRob24vYXN0LmMKaW5kZXggOWEwYjA2NC4uM2JkMjRmZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzdC5jCisrKyBiL1B5dGhvbi9hc3QuYwpAQCAtMTA5LDIyICsxMDksMTQgQEAKIHsKICAgICBpZiAoIXZhbGlkYXRlX2FyZ3MoYXJncy0+YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhcmdzLT52YXJhcmdhbm5vdGF0aW9uKSB7Ci0gICAgICAgIGlmICghYXJncy0+dmFyYXJnKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInZhcmFyZ2Fubm90YXRpb24gYnV0IG5vIHZhcmFyZyBvbiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdmFsaWRhdGVfZXhwcihhcmdzLT52YXJhcmdhbm5vdGF0aW9uLCBMb2FkKSkKKyAgICBpZiAoYXJncy0+dmFyYXJnICYmIGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbgorICAgICAgICAmJiAhdmFsaWRhdGVfZXhwcihhcmdzLT52YXJhcmctPmFubm90YXRpb24sIExvYWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCF2YWxpZGF0ZV9hcmdzKGFyZ3MtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYXJncy0+a3dhcmdhbm5vdGF0aW9uKSB7Ci0gICAgICAgIGlmICghYXJncy0+a3dhcmcpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAia3dhcmdhbm5vdGF0aW9uIGJ1dCBubyBrd2FyZyBvbiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdmFsaWRhdGVfZXhwcihhcmdzLT5rd2FyZ2Fubm90YXRpb24sIExvYWQpKQorICAgIGlmIChhcmdzLT5rd2FyZyAmJiBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiAKKyAgICAgICAgJiYgIXZhbGlkYXRlX2V4cHIoYXJncy0+a3dhcmctPmFubm90YXRpb24sIExvYWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKGFzZGxfc2VxX0xFTihhcmdzLT5kZWZhdWx0cykgPiBhc2RsX3NlcV9MRU4oYXJncy0+YXJncykpIHsKQEAgLTI4Miw2ICsyNzQsNyBAQAogICAgICAgICByZXR1cm4gdmFsaWRhdGVfZXhwcnMoZXhwLT52LlR1cGxlLmVsdHMsIGN0eCwgMCk7CiAgICAgLyogVGhlc2UgbGFzdCBjYXNlcyBkb24ndCBoYXZlIGFueSBjaGVja2luZy4gKi8KICAgICBjYXNlIE5hbWVfa2luZDoKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgcmV0dXJuIDE7CiAgICAgZGVmYXVsdDoKQEAgLTQ5OCw3ICs0OTEsNyBAQAogc3RydWN0IGNvbXBpbGluZyB7CiAgICAgY2hhciAqY19lbmNvZGluZzsgLyogc291cmNlIGVuY29kaW5nICovCiAgICAgUHlBcmVuYSAqY19hcmVuYTsgLyogYXJlbmEgZm9yIGFsbG9jYXRpbmcgbWVtZW9yeSAqLwotICAgIGNvbnN0IGNoYXIgKmNfZmlsZW5hbWU7IC8qIGZpbGVuYW1lICovCisgICAgUHlPYmplY3QgKmNfZmlsZW5hbWU7IC8qIGZpbGVuYW1lICovCiAgICAgUHlPYmplY3QgKmNfbm9ybWFsaXplOyAvKiBOb3JtYWxpemF0aW9uIGZ1bmN0aW9uIGZyb20gdW5pY29kZWRhdGEuICovCiAgICAgUHlPYmplY3QgKmNfbm9ybWFsaXplX2FyZ3M7IC8qIE5vcm1hbGl6YXRpb24gYXJndW1lbnQgdHVwbGUuICovCiB9OwpAQCAtNTY3LDcgKzU2MCwxMCBAQAogICAgICAgICBpZCA9IGlkMjsKICAgICB9CiAgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJmlkKTsKLSAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIGlkKTsKKyAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBpZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gaWQ7CiB9CiAKQEAgLTU3NywyNCArNTczLDEzIEBACiBhc3RfZXJyb3Ioc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgY29uc3QgY2hhciAqZXJybXNnKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZSwgKmVycnN0ciwgKmxvYywgKnRtcDsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWVfb2JqOwogCi0gICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHQoYy0+Y19maWxlbmFtZSwgTElORU5PKG4pKTsKKyAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obikpOwogICAgIGlmICghbG9jKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgbG9jID0gUHlfTm9uZTsKICAgICB9Ci0gICAgaWYgKGMtPmNfZmlsZW5hbWUpIHsKLSAgICAgICAgZmlsZW5hbWVfb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChjLT5jX2ZpbGVuYW1lKTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZV9vYmopIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihsb2MpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIGZpbGVuYW1lX29iaiA9IFB5X05vbmU7Ci0gICAgfQotICAgIHRtcCA9IFB5X0J1aWxkVmFsdWUoIihOaWlOKSIsIGZpbGVuYW1lX29iaiwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGxvYyk7CisgICAgdG1wID0gUHlfQnVpbGRWYWx1ZSgiKE9paU4pIiwgYy0+Y19maWxlbmFtZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGxvYyk7CiAgICAgaWYgKCF0bXApCiAgICAgICAgIHJldHVybiAwOwogICAgIGVycnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGVycm1zZyk7CkBAIC02NzcsOCArNjYyLDggQEAKICovCiAKIG1vZF90eQotUHlBU1RfRnJvbU5vZGUoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK1B5QVNUX0Zyb21Ob2RlT2JqZWN0KGNvbnN0IG5vZGUgKm4sIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZmlsZW5hbWUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGludCBpLCBqLCBrLCBudW07CiAgICAgYXNkbF9zZXEgKnN0bXRzID0gTlVMTDsKQEAgLTY4OCw2ICs2NzMsNyBAQAogICAgIG1vZF90eSByZXMgPSBOVUxMOwogCiAgICAgYy5jX2FyZW5hID0gYXJlbmE7CisgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCiAgICAgYy5jX2ZpbGVuYW1lID0gZmlsZW5hbWU7CiAgICAgYy5jX25vcm1hbGl6ZSA9IGMuY19ub3JtYWxpemVfYXJncyA9IE5VTEw7CiAgICAgaWYgKGZsYWdzICYmIGZsYWdzLT5jZl9mbGFncyAmIFB5Q0ZfU09VUkNFX0lTX1VURjgpIHsKQEAgLTcxMCw3ICs2OTYsNyBAQAogICAgIGsgPSAwOwogICAgIHN3aXRjaCAoVFlQRShuKSkgewogICAgICAgICBjYXNlIGZpbGVfaW5wdXQ6Ci0gICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldyhudW1fc3RtdHMobiksIGFyZW5hKTsKKyAgICAgICAgICAgIHN0bXRzID0gX1B5X2FzZGxfc2VxX25ldyhudW1fc3RtdHMobiksIGFyZW5hKTsKICAgICAgICAgICAgIGlmICghc3RtdHMpCiAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pIC0gMTsgaSsrKSB7CkBAIC03NTAsNyArNzM2LDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXNlIHNpbmdsZV9pbnB1dDoKICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBORVdMSU5FKSB7Ci0gICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcoMSwgYXJlbmEpOworICAgICAgICAgICAgICAgIHN0bXRzID0gX1B5X2FzZGxfc2VxX25ldygxLCBhcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKHN0bXRzLCAwLCBQYXNzKG4tPm5fbGluZW5vLCBuLT5uX2NvbF9vZmZzZXQsCkBAIC03NjIsNyArNzQ4LDcgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgICAgICBudW0gPSBudW1fc3RtdHMobik7Ci0gICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcobnVtLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KG51bSwgYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghc3RtdHMpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgICAgIGlmIChudW0gPT0gMSkgewpAQCAtODAxLDYgKzc4NywyMSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKK21vZF90eQorUHlBU1RfRnJvbU5vZGUoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLAorICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgbW9kX3R5IG1vZDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIG1vZDsKKworfQorCiAvKiBSZXR1cm4gdGhlIEFTVCByZXByLiBvZiB0aGUgb3BlcmF0b3IgcmVwcmVzZW50ZWQgYXMgc3ludGF4ICh8LCBeLCBldGMuKQogKi8KIApAQCAtOTAzLDcgKzkwNCw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOYW1lX2tpbmQ6CiAgICAgICAgICAgICBpZiAoY3R4ID09IFN0b3JlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGUtPnYuTmFtZS5pZCwgbiwgMSkpCisgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGUtPnYuTmFtZS5pZCwgbiwgMCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAvKiBmb3JiaWRkZW5fbmFtZSgpIGNhbGxzIGFzdF9lcnJvcigpICovCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlLT52Lk5hbWUuY3R4ID0gY3R4OwpAQCAtOTU1LDYgKzk1Niw5IEBACiAgICAgICAgIGNhc2UgQnl0ZXNfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJsaXRlcmFsIjsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICAgICAgZXhwcl9uYW1lID0gImtleXdvcmQiOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJFbGxpcHNpcyI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwOTUsNyArMTA5OSw3IEBACiAgICAgaW50IGk7CiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGVzdGxpc3QgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9zdGFyX2V4cHIgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9jb21wKTsKIAotICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTExOSw2ICsxMTIzLDcgQEAKICAgICBpZGVudGlmaWVyIG5hbWU7CiAgICAgZXhwcl90eSBhbm5vdGF0aW9uID0gTlVMTDsKICAgICBub2RlICpjaDsKKyAgICBhcmdfdHkgdG1wOwogCiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGZwZGVmIHx8IFRZUEUobikgPT0gdmZwZGVmKTsKICAgICBjaCA9IENISUxEKG4sIDApOwpAQCAtMTEzNCw3ICsxMTM5LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gYXJnKG5hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOworICAgIHRtcCA9IGFyZyhuYW1lLCBhbm5vdGF0aW9uLCBjLT5jX2FyZW5hKTsKKyAgICBpZiAoIXRtcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0bXAtPmxpbmVubyA9IExJTkVOTyhuKTsKKyAgICB0bXAtPmNvbF9vZmZzZXQgPSBuLT5uX2NvbF9vZmZzZXQ7CisgICAgcmV0dXJuIHRtcDsKIH0KIAogLyogcmV0dXJucyAtMSBpZiBmYWlsZWQgdG8gaGFuZGxlIGtleXdvcmQgb25seSBhcmd1bWVudHMKQEAgLTEyMzAsMTUgKzEyNDEsMTMgQEAKICAgICBpbnQgaSwgaiwgaywgbnBvc2FyZ3MgPSAwLCBua3dvbmx5YXJncyA9IDA7CiAgICAgaW50IG5wb3NkZWZhdWx0cyA9IDAsIGZvdW5kX2RlZmF1bHQgPSAwOwogICAgIGFzZGxfc2VxICpwb3NhcmdzLCAqcG9zZGVmYXVsdHMsICprd29ubHlhcmdzLCAqa3dkZWZhdWx0czsKLSAgICBpZGVudGlmaWVyIHZhcmFyZyA9IE5VTEwsIGt3YXJnID0gTlVMTDsKKyAgICBhcmdfdHkgdmFyYXJnID0gTlVMTCwga3dhcmcgPSBOVUxMOwogICAgIGFyZ190eSBhcmc7Ci0gICAgZXhwcl90eSB2YXJhcmdhbm5vdGF0aW9uID0gTlVMTCwga3dhcmdhbm5vdGF0aW9uID0gTlVMTDsKICAgICBub2RlICpjaDsKIAogICAgIGlmIChUWVBFKG4pID09IHBhcmFtZXRlcnMpIHsKICAgICAgICAgaWYgKE5DSChuKSA9PSAyKSAvKiAoKSBhcyBhcmd1bWVudCBsaXN0ICovCi0gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgbiA9IENISUxEKG4sIDEpOwogICAgIH0KICAgICBhc3NlcnQoVFlQRShuKSA9PSB0eXBlZGFyZ3NsaXN0IHx8IFRZUEUobikgPT0gdmFyYXJnc2xpc3QpOwpAQCAtMTI3MCwyMiArMTI3OSwyMiBAQAogICAgICAgICBpZiAoVFlQRShjaCkgPT0gRE9VQkxFU1RBUikgYnJlYWs7CiAgICAgICAgIGlmIChUWVBFKGNoKSA9PSB0ZnBkZWYgfHwgVFlQRShjaCkgPT0gdmZwZGVmKSBua3dvbmx5YXJncysrOwogICAgIH0KLSAgICBwb3NhcmdzID0gKG5wb3NhcmdzID8gYXNkbF9zZXFfbmV3KG5wb3NhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgIHBvc2FyZ3MgPSAobnBvc2FyZ3MgPyBfUHlfYXNkbF9zZXFfbmV3KG5wb3NhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICghcG9zYXJncyAmJiBucG9zYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAga3dvbmx5YXJncyA9IChua3dvbmx5YXJncyA/Ci0gICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgICAgICAgICAgICAgICAgIF9QeV9hc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFrd29ubHlhcmdzICYmIG5rd29ubHlhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwb3NkZWZhdWx0cyA9IChucG9zZGVmYXVsdHMgPwotICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9uZXcobnBvc2RlZmF1bHRzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgICAgICAgICAgICAgICAgICBfUHlfYXNkbF9zZXFfbmV3KG5wb3NkZWZhdWx0cywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIXBvc2RlZmF1bHRzICYmIG5wb3NkZWZhdWx0cykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogVGhlIGxlbmd0aCBvZiBrd29ubHlhcmdzIGFuZCBrd2RlZmF1bHRzIGFyZSBzYW1lCiAgICAgICAgc2luY2Ugd2Ugc2V0IE5VTEwgYXMgZGVmYXVsdCBmb3Iga2V5d29yZCBvbmx5IGFyZ3VtZW50IHcvbyBkZWZhdWx0CiAgICAgICAgLSB3ZSBoYXZlIHNlcXVlbmNlIGRhdGEgc3RydWN0dXJlLCBidXQgbm8gZGljdGlvbmFyeSAqLwogICAgIGt3ZGVmYXVsdHMgPSAobmt3b25seWFyZ3MgPwotICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICBfUHlfYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICgha3dkZWZhdWx0cyAmJiBua3dvbmx5YXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTEzNDQsMTcgKzEzNTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgaSA9IHJlczsgLyogcmVzIGhhcyBuZXcgcG9zaXRpb24gdG8gcHJvY2VzcyAqLwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyYXJnID0gTkVXX0lERU5USUZJRVIoQ0hJTEQoY2gsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyYXJnID0gYXN0X2Zvcl9hcmcoYywgY2gpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmFyZykKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgdmFyYXJnLCBDSElMRChjaCwgMCksIDApKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlcmUgaXMgYW4gYW5ub3RhdGlvbiBvbiB0aGUgdmFyYXJnICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJhcmdhbm5vdGF0aW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmFyZ2Fubm90YXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgTkNIKG4pICYmIChUWVBFKENISUxEKG4sIGkpKSA9PSB0ZnBkZWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IFRZUEUoQ0hJTEQobiwgaSkpID09IHZmcGRlZikpIHsKQEAgLTEzNjksMTcgKzEzNzEsOSBAQAogICAgICAgICAgICAgY2FzZSBET1VCTEVTVEFSOgogICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQobiwgaSsxKTsgIC8qIHRmcGRlZiAqLwogICAgICAgICAgICAgICAgIGFzc2VydChUWVBFKGNoKSA9PSB0ZnBkZWYgfHwgVFlQRShjaCkgPT0gdmZwZGVmKTsKLSAgICAgICAgICAgICAgICBrd2FyZyA9IE5FV19JREVOVElGSUVSKENISUxEKGNoLCAwKSk7CisgICAgICAgICAgICAgICAga3dhcmcgPSBhc3RfZm9yX2FyZyhjLCBjaCk7CiAgICAgICAgICAgICAgICAgaWYgKCFrd2FyZykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgaWYgKE5DSChjaCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIGFuIGFubm90YXRpb24gb24gdGhlIGt3YXJnICovCi0gICAgICAgICAgICAgICAgICAgIGt3YXJnYW5ub3RhdGlvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMikpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWt3YXJnYW5ub3RhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywga3dhcmcsIENISUxEKGNoLCAwKSwgMCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGkgKz0gMzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzg5LDggKzEzODMsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBhcmd1bWVudHMocG9zYXJncywgdmFyYXJnLCB2YXJhcmdhbm5vdGF0aW9uLCBrd29ubHlhcmdzLCBrd2FyZywKLSAgICAgICAgICAgICAgICAgICAga3dhcmdhbm5vdGF0aW9uLCBwb3NkZWZhdWx0cywga3dkZWZhdWx0cywgYy0+Y19hcmVuYSk7CisgICAgcmV0dXJuIGFyZ3VtZW50cyhwb3NhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGt3YXJnLCBwb3NkZWZhdWx0cywgYy0+Y19hcmVuYSk7CiB9CiAKIHN0YXRpYyBleHByX3R5CkBAIC0xNDY5LDcgKzE0NjIsNyBAQAogICAgIGludCBpOwogCiAgICAgUkVRKG4sIGRlY29yYXRvcnMpOwotICAgIGRlY29yYXRvcl9zZXEgPSBhc2RsX3NlcV9uZXcoTkNIKG4pLCBjLT5jX2FyZW5hKTsKKyAgICBkZWNvcmF0b3Jfc2VxID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobiksIGMtPmNfYXJlbmEpOwogICAgIGlmICghZGVjb3JhdG9yX3NlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE1NTUsOCArMTU0OCw3IEBACiAgICAgZXhwcl90eSBleHByZXNzaW9uOwogCiAgICAgaWYgKE5DSChuKSA9PSAzKSB7Ci0gICAgICAgIGFyZ3MgPSBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgYXJncyA9IGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhcmdzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMikpOwpAQCAtMTY2Niw3ICsxNjU4LDcgQEAKICAgICBpZiAobl9mb3JzID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGNvbXBzID0gYXNkbF9zZXFfbmV3KG5fZm9ycywgYy0+Y19hcmVuYSk7CisgICAgY29tcHMgPSBfUHlfYXNkbF9zZXFfbmV3KG5fZm9ycywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFjb21wcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE3MDcsNyArMTY5OSw3IEBACiAgICAgICAgICAgICBpZiAobl9pZnMgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGlmcyA9IGFzZGxfc2VxX25ldyhuX2lmcywgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZnMgPSBfUHlfYXNkbF9zZXFfbmV3KG5faWZzLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghaWZzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xODE5LDExICsxODExLDIxIEBACiAKICAgICBzd2l0Y2ggKFRZUEUoY2gpKSB7CiAgICAgY2FzZSBOQU1FOiB7Ci0gICAgICAgIC8qIEFsbCBuYW1lcyBzdGFydCBpbiBMb2FkIGNvbnRleHQsIGJ1dCBtYXkgbGF0ZXIgYmUKLSAgICAgICAgICAgY2hhbmdlZC4gKi8KLSAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBORVdfSURFTlRJRklFUihjaCk7CisgICAgICAgIFB5T2JqZWN0ICpuYW1lOworICAgICAgICBjb25zdCBjaGFyICpzID0gU1RSKGNoKTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzKTsKKyAgICAgICAgaWYgKGxlbiA+PSA0ICYmIGxlbiA8PSA1KSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChzLCAiTm9uZSIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYW1lQ29uc3RhbnQoUHlfTm9uZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFzdHJjbXAocywgIlRydWUiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnN0YW50KFB5X1RydWUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHMsICJGYWxzZSIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYW1lQ29uc3RhbnQoUHlfRmFsc2UsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgfQorICAgICAgICBuYW1lID0gbmV3X2lkZW50aWZpZXIocywgYyk7CiAgICAgICAgIGlmICghbmFtZSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAvKiBBbGwgbmFtZXMgc3RhcnQgaW4gTG9hZCBjb250ZXh0LCBidXQgbWF5IGxhdGVyIGJlIGNoYW5nZWQuICovCiAgICAgICAgIHJldHVybiBOYW1lKG5hbWUsIExvYWQsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgY2FzZSBTVFJJTkc6IHsKQEAgLTE4NDgsMTIgKzE4NTAsMTUgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKGMsIG4sIGJ1Zik7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR5cGUpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0YmFjayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGlmIChieXRlc21vZGUpCiAgICAgICAgICAgICByZXR1cm4gQnl0ZXMoc3RyLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGVsc2UKQEAgLTE4NjQsNyArMTg2OSwxMCBAQAogICAgICAgICBpZiAoIXB5bnVtKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBweW51bSk7CisgICAgICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHB5bnVtKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihweW51bSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gTnVtKHB5bnVtLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGNhc2UgRUxMSVBTSVM6IC8qIEVsbGlwc2lzICovCkBAIC0xOTEzLDcgKzE5MjEsNyBAQAogICAgICAgICAgICAgLyogaXQncyBhIHNpbXBsZSBzZXQgKi8KICAgICAgICAgICAgIGFzZGxfc2VxICplbHRzOwogICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyAyOyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCi0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWVsdHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKGNoKTsgaSArPSAyKSB7CkBAIC0xOTMyLDExICsxOTQwLDExIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBpdCdzIGEgZGljdCAqLwogICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyA0OyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCi0gICAgICAgICAgICBrZXlzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAga2V5cyA9IF9QeV9hc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWtleXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHZhbHVlcyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHZhbHVlcyA9IF9QeV9hc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjA5MywxNSArMjEwMSwyMiBAQAogICAgICAgICBpZiAoTkNIKG4pID09IDIpCiAgICAgICAgICAgICByZXR1cm4gQ2FsbChsZWZ0X2V4cHIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIExJTkVOTyhuKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2NhbGwoYywgQ0hJTEQobiwgMSksIGxlZnRfZXhwcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZXhwcl90eSB0bXAgPSBhc3RfZm9yX2NhbGwoYywgQ0hJTEQobiwgMSksIGxlZnRfZXhwcik7CisgICAgICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgdG1wLT5saW5lbm8gPSBMSU5FTk8obik7CisgICAgICAgICAgICB0bXAtPmNvbF9vZmZzZXQgPSBuLT5uX2NvbF9vZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gdG1wOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IERPVCApIHsKICAgICAgICAgUHlPYmplY3QgKmF0dHJfaWQgPSBORVdfSURFTlRJRklFUihDSElMRChuLCAxKSk7CiAgICAgICAgIGlmICghYXR0cl9pZCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXR1cm4gQXR0cmlidXRlKGxlZnRfZXhwciwgYXR0cl9pZCwgTG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKENISUxEKG4sIDEpKSwgQ0hJTEQobiwgMSktPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBSRVEoQ0hJTEQobiwgMCksIExTUUIpOwpAQCAtMjEyNCw3ICsyMTM5LDcgQEAKICAgICAgICAgICAgIGV4cHJfdHkgZTsKICAgICAgICAgICAgIGludCBzaW1wbGUgPSAxOwogICAgICAgICAgICAgYXNkbF9zZXEgKnNsaWNlcywgKmVsdHM7Ci0gICAgICAgICAgICBzbGljZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBzbGljZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzbGljZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTkNIKG4pOyBqICs9IDIpIHsKQEAgLTIxNDAsNyArMjE1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBleHRyYWN0IEluZGV4IHZhbHVlcyBhbmQgcHV0IHRoZW0gaW4gYSBUdXBsZSAqLwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhhc2RsX3NlcV9MRU4oc2xpY2VzKSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhhc2RsX3NlcV9MRU4oc2xpY2VzKSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWVsdHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXNkbF9zZXFfTEVOKHNsaWNlcyk7ICsraikgewpAQCAtMjIwMiw4ICsyMjE3LDYgQEAKICAgICAgICAgdG1wID0gYXN0X2Zvcl90cmFpbGVyKGMsIGNoLCBlKTsKICAgICAgICAgaWYgKCF0bXApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdG1wLT5saW5lbm8gPSBlLT5saW5lbm87Ci0gICAgICAgIHRtcC0+Y29sX29mZnNldCA9IGUtPmNvbF9vZmZzZXQ7CiAgICAgICAgIGUgPSB0bXA7CiAgICAgfQogICAgIGlmIChUWVBFKENISUxEKG4sIE5DSChuKSAtIDEpKSA9PSBmYWN0b3IpIHsKQEAgLTIyNzUsNyArMjI4OCw3IEBACiAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgICAgICAgICAgICAgIGdvdG8gbG9vcDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHNlcSA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXNlcSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMjMxMSwxMCArMjMyNCwxMCBAQAogICAgICAgICAgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICBhc2RsX2ludF9zZXEgKm9wczsKICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqY21wczsKLSAgICAgICAgICAgICAgICBvcHMgPSBhc2RsX2ludF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIG9wcyA9IF9QeV9hc2RsX2ludF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghb3BzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBjbXBzID0gYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIGNtcHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghY21wcykgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CkBAIC0yNDQwLDEwICsyNDUzLDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobmFyZ3MgKyBuZ2VucywgYy0+Y19hcmVuYSk7CisgICAgYXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobmFyZ3MgKyBuZ2VucywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBrZXl3b3JkcyA9IGFzZGxfc2VxX25ldyhua2V5d29yZHMsIGMtPmNfYXJlbmEpOworICAgIGtleXdvcmRzID0gX1B5X2FzZGxfc2VxX25ldyhua2V5d29yZHMsIGMtPmNfYXJlbmEpOwogICAgIGlmICgha2V5d29yZHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5hcmdzID0gMDsKQEAgLTI2MjAsNyArMjYzMyw3IEBACiAKICAgICAgICAgLyogYSBub3JtYWwgYXNzaWdubWVudCAqLwogICAgICAgICBSRVEoQ0hJTEQobiwgMSksIEVRVUFMKTsKLSAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgdGFyZ2V0cyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghdGFyZ2V0cykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pIC0gMjsgaSArPSAyKSB7CkBAIC0yNjYxLDcgKzI2NzQsNyBAQAogCiAgICAgUkVRKG4sIGV4cHJsaXN0KTsKIAotICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTI4NDYsMTMgKzI4NTksMTkgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgc3RyID0gdW5pOwogICAgICAgICAgICAgICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZzdHIpOwotICAgICAgICAgICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBhbGlhcyhzdHIsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU1RBUjoKICAgICAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCIqIik7Ci0gICAgICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFsaWFzKHN0ciwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC0yODg1LDcgKzI5MDQsNyBAQAogICAgIGlmIChUWVBFKG4pID09IGltcG9ydF9uYW1lKSB7CiAgICAgICAgIG4gPSBDSElMRChuLCAxKTsKICAgICAgICAgUkVRKG4sIGRvdHRlZF9hc19uYW1lcyk7Ci0gICAgICAgIGFsaWFzZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFsaWFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIWFsaWFzZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMjk0Nyw3ICsyOTY2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAgICAgYWxpYXNlcyA9IGFzZGxfc2VxX25ldygobl9jaGlsZHJlbiArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFsaWFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChuX2NoaWxkcmVuICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhbGlhc2VzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI5ODYsNyArMzAwNSw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgZ2xvYmFsX3N0bXQpOwotICAgIHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgcyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTMwMDcsNyArMzAyNiw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgbm9ubG9jYWxfc3RtdCk7Ci0gICAgcyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDE7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMzA2MCw3ICszMDc5LDcgQEAKICAgICBSRVEobiwgc3VpdGUpOwogCiAgICAgdG90YWwgPSBudW1fc3RtdHMobik7Ci0gICAgc2VxID0gYXNkbF9zZXFfbmV3KHRvdGFsLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KHRvdGFsLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXNlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IHNpbXBsZV9zdG10KSB7CkBAIC0zMTc5LDcgKzMxOTgsNyBAQAogICAgICAgICBpZiAoaGFzX2Vsc2UpIHsKICAgICAgICAgICAgIGFzZGxfc2VxICpzdWl0ZV9zZXEyOwogCi0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFvcmVsc2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIE5DSChuKSAtIDYpKTsKQEAgLTMyMDMsNyArMzIyMiw3IEBACiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5fZWxpZjsgaSsrKSB7CiAgICAgICAgICAgICBpbnQgb2ZmID0gNSArIChuX2VsaWYgLSBpIC0gMSkgKiA0OwotICAgICAgICAgICAgYXNkbF9zZXEgKm5ld29iaiA9IGFzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGFzZGxfc2VxICpuZXdvYmogPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFuZXdvYmopCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIG9mZikpOwpAQCAtMzQxNSw3ICszNDM0LDcgQEAKICAgICBpZiAobl9leGNlcHQgPiAwKSB7CiAgICAgICAgIGludCBpOwogICAgICAgICAvKiBwcm9jZXNzIGV4Y2VwdCBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBhIHRyeSAuLi4gZXhjZXB0ICovCi0gICAgICAgIGhhbmRsZXJzID0gYXNkbF9zZXFfbmV3KG5fZXhjZXB0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgaGFuZGxlcnMgPSBfUHlfYXNkbF9zZXFfbmV3KG5fZXhjZXB0LCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKGhhbmRsZXJzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzQ2Niw3ICszNDg1LDcgQEAKICAgICBSRVEobiwgd2l0aF9zdG10KTsKIAogICAgIG5faXRlbXMgPSAoTkNIKG4pIC0gMikgLyAyOwotICAgIGl0ZW1zID0gYXNkbF9zZXFfbmV3KG5faXRlbXMsIGMtPmNfYXJlbmEpOworICAgIGl0ZW1zID0gX1B5X2FzZGxfc2VxX25ldyhuX2l0ZW1zLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWl0ZW1zKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pIC0gMjsgaSArPSAyKSB7CkBAIC0zNjMyLDE4ICszNjUxLDE2IEBACiAgICAgZW5kID0gcyArIHN0cmxlbihzKSAtIDE7CiAgICAgaW1mbGFnID0gKmVuZCA9PSAnaicgfHwgKmVuZCA9PSAnSic7CiAgICAgaWYgKHNbMF0gPT0gJzAnKSB7Ci0gICAgICAgIHggPSAobG9uZykgUHlPU19zdHJ0b3VsKChjaGFyICopcywgKGNoYXIgKiopJmVuZCwgMCk7CisgICAgICAgIHggPSAobG9uZykgUHlPU19zdHJ0b3VsKHMsIChjaGFyICoqKSZlbmQsIDApOwogICAgICAgICBpZiAoeCA8IDAgJiYgZXJybm8gPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKHMsIChjaGFyICoqKTAsIDApOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgeCA9IFB5T1Nfc3RydG9sKChjaGFyICopcywgKGNoYXIgKiopJmVuZCwgMCk7CisgICAgICAgIHggPSBQeU9TX3N0cnRvbChzLCAoY2hhciAqKikmZW5kLCAwKTsKICAgICBpZiAoKmVuZCA9PSAnXDAnKSB7CiAgICAgICAgIGlmIChlcnJubyAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywgKGNoYXIgKiopMCwgMCk7CisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21TdHJpbmcocywgKGNoYXIgKiopMCwgMCk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoeCk7CiAgICAgfQogICAgIC8qIFhYWCBIdWdlIGZsb2F0cyBtYXkgc2lsZW50bHkgZmFpbCAqLwpAQCAtMzY2Niw4ICszNjgzLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZWNvZGVfdXRmOChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBjaGFyICoqc1B0ciwgY29uc3QgY2hhciAqZW5kKQogewotICAgIGNoYXIgKnMsICp0OwotICAgIHQgPSBzID0gKGNoYXIgKikqc1B0cjsKKyAgICBjb25zdCBjaGFyICpzLCAqdDsKKyAgICB0ID0gcyA9ICpzUHRyOwogICAgIC8qIHdoaWxlIChzIDwgZW5kICYmICpzICE9ICdcXCcpIHMrKzsgKi8gLyogaW5lZmZpY2llbnQgZm9yIHUiLi4iICovCiAgICAgd2hpbGUgKHMgPCBlbmQgJiYgKCpzICYgMHg4MCkpIHMrKzsKICAgICAqc1B0ciA9IHM7CmRpZmYgLS1naXQgYS9QeXRob24vYmx0aW5tb2R1bGUuYyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCmluZGV4IGRmZmRmNDYuLmIwYmU2NzEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jCisrKyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCkBAIC01Nyw2ICs1NywxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZnVuYyA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCk7IC8qIEJldHRlciBiZSBjYWxsYWJsZSAqLworICAgIGlmICghUHlGdW5jdGlvbl9DaGVjayhmdW5jKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIl9fYnVpbGRfX2NsYXNzX186IGZ1bmMgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAxKTsKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhuYW1lKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtMTU1LDcgKzE2MCw5IEBACiAgICAgICAgIFB5X0RFQ1JFRihiYXNlcyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBjZWxsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmdW5jLCBucywgTlVMTCk7CisgICAgY2VsbCA9IFB5RXZhbF9FdmFsQ29kZUV4KFB5RnVuY3Rpb25fR0VUX0NPREUoZnVuYyksIFB5RnVuY3Rpb25fR0VUX0dMT0JBTFMoZnVuYyksIG5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dFVF9DTE9TVVJFKGZ1bmMpKTsKICAgICBpZiAoY2VsbCAhPSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0ICptYXJnczsKICAgICAgICAgbWFyZ3MgPSBQeVR1cGxlX1BhY2soMywgbmFtZSwgYmFzZXMsIG5zKTsKQEAgLTU3Miw4ICs1NzksNyBAQAogYnVpbHRpbl9jb21waWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgY2hhciAqc3RyOwotICAgIFB5T2JqZWN0ICpmaWxlbmFtZV9vYmo7Ci0gICAgY2hhciAqZmlsZW5hbWU7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOwogICAgIGNoYXIgKnN0YXJ0c3RyOwogICAgIGludCBtb2RlID0gLTE7CiAgICAgaW50IGRvbnRfaW5oZXJpdCA9IDA7CkBAIC01ODksMTIgKzU5NSwxMSBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJnN8aWlpOmNvbXBpbGUiLCAga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmZmlsZW5hbWVfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzdHIsICZzdXBwbGllZF9mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9udF9pbmhlcml0LCAmb3B0aW1pemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGZpbGVuYW1lID0gUHlCeXRlc19BU19TVFJJTkcoZmlsZW5hbWVfb2JqKTsKICAgICBjZi5jZl9mbGFncyA9IHN1cHBsaWVkX2ZsYWdzIHwgUHlDRl9TT1VSQ0VfSVNfVVRGODsKIAogICAgIGlmIChzdXBwbGllZF9mbGFncyAmCkBAIC02NTIsMjQgKzY1NywyNCBAQAogICAgICAgICAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdCA9IChQeU9iamVjdCopUHlBU1RfQ29tcGlsZUV4KG1vZCwgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2YsIG9wdGltaXplLCBhcmVuYSk7CisgICAgICAgICAgICByZXN1bHQgPSAoUHlPYmplY3QqKVB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2YsIG9wdGltaXplLCBhcmVuYSk7CiAgICAgICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICB9CiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICB9CiAKLSAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKGNtZCwgImNvbXBpbGUiLCAic3RyaW5nLCBieXRlcywgQVNUIG9yIGNvZGUiLCAmY2YpOworICAgIHN0ciA9IHNvdXJjZV9hc19zdHJpbmcoY21kLCAiY29tcGlsZSIsICJzdHJpbmcsIGJ5dGVzIG9yIEFTVCIsICZjZik7CiAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgcmVzdWx0ID0gUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3Moc3RyLCBmaWxlbmFtZSwgc3RhcnRbbW9kZV0sICZjZiwgb3B0aW1pemUpOworICAgIHJlc3VsdCA9IFB5X0NvbXBpbGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnRbbW9kZV0sICZjZiwgb3B0aW1pemUpOwogICAgIGdvdG8gZmluYWxseTsKIAogZXJyb3I6CiAgICAgcmVzdWx0ID0gTlVMTDsKIGZpbmFsbHk6Ci0gICAgUHlfREVDUkVGKGZpbGVuYW1lX29iaik7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03NTAsOCArNzU1LDExIEBACiAgICAgfQogICAgIGlmIChnbG9iYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgZ2xvYmFscyA9IFB5RXZhbF9HZXRHbG9iYWxzKCk7Ci0gICAgICAgIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkKKyAgICAgICAgaWYgKGxvY2FscyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAobG9jYWxzID09IFB5X05vbmUpCiAgICAgICAgIGxvY2FscyA9IGdsb2JhbHM7CkBAIC04MTUsNiArODIzLDggQEAKICAgICAgICAgZ2xvYmFscyA9IFB5RXZhbF9HZXRHbG9iYWxzKCk7CiAgICAgICAgIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2xvYmFscyB8fCAhbG9jYWxzKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC0xMzIyLDI2ICsxMzMyLDM1IEBACiBtaW5fbWF4KFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcywgaW50IG9wKQogewogICAgIFB5T2JqZWN0ICp2LCAqaXQsICppdGVtLCAqdmFsLCAqbWF4aXRlbSwgKm1heHZhbCwgKmtleWZ1bmM9TlVMTDsKKyAgICBQeU9iamVjdCAqZW1wdHl0dXBsZSwgKmRlZmF1bHR2YWwgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2V5IiwgImRlZmF1bHQiLCBOVUxMfTsKICAgICBjb25zdCBjaGFyICpuYW1lID0gb3AgPT0gUHlfTFQgPyAibWluIiA6ICJtYXgiOworICAgIGNvbnN0IGludCBwb3NpdGlvbmFsID0gUHlUdXBsZV9TaXplKGFyZ3MpID4gMTsKKyAgICBpbnQgcmV0OwogCi0gICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSA+IDEpCisgICAgaWYgKHBvc2l0aW9uYWwpCiAgICAgICAgIHYgPSBhcmdzOwotICAgIGVsc2UgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAoY2hhciAqKW5hbWUsIDEsIDEsICZ2KSkKKyAgICBlbHNlIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgbmFtZSwgMSwgMSwgJnYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChrd2RzICE9IE5VTEwgJiYgUHlEaWN0X0NoZWNrKGt3ZHMpICYmIFB5RGljdF9TaXplKGt3ZHMpKSB7Ci0gICAgICAgIGtleWZ1bmMgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhrd2RzLCAia2V5Iik7Ci0gICAgICAgIGlmIChQeURpY3RfU2l6ZShrd2RzKSE9MSAgfHwgIGtleWZ1bmMgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50IiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoa2V5ZnVuYyk7CisgICAgZW1wdHl0dXBsZSA9IFB5VHVwbGVfTmV3KDApOworICAgIGlmIChlbXB0eXR1cGxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldCA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhlbXB0eXR1cGxlLCBrd2RzLCAifCRPTyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleWZ1bmMsICZkZWZhdWx0dmFsKTsKKyAgICBQeV9ERUNSRUYoZW1wdHl0dXBsZSk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHBvc2l0aW9uYWwgJiYgZGVmYXVsdHZhbCAhPSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgYSBkZWZhdWx0IGZvciAlcygpIHdpdGggbXVsdGlwbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uYWwgYXJndW1lbnRzIiwgbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKICAgICBpZiAoaXQgPT0gTlVMTCkgewotICAgICAgICBQeV9YREVDUkVGKGtleWZ1bmMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEzODUsMTQgKzE0MDQsMTggQEAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgZ290byBGYWlsX2l0OwogICAgIGlmIChtYXh2YWwgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICIlcygpIGFyZyBpcyBhbiBlbXB0eSBzZXF1ZW5jZSIsIG5hbWUpOwogICAgICAgICBhc3NlcnQobWF4aXRlbSA9PSBOVUxMKTsKKyAgICAgICAgaWYgKGRlZmF1bHR2YWwgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmF1bHR2YWwpOworICAgICAgICAgICAgbWF4aXRlbSA9IGRlZmF1bHR2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoKSBhcmcgaXMgYW4gZW1wdHkgc2VxdWVuY2UiLCBuYW1lKTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgICAgIFB5X0RFQ1JFRihtYXh2YWwpOwogICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICByZXR1cm4gbWF4aXRlbTsKIAogRmFpbF9pdF9pdGVtX2FuZF92YWw6CkBAIC0xNDAzLDcgKzE0MjYsNiBAQAogICAgIFB5X1hERUNSRUYobWF4dmFsKTsKICAgICBQeV9YREVDUkVGKG1heGl0ZW0pOwogICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTUzMSw2ICsxNTUzLDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChmaWxlID09IE5VTEwgfHwgZmlsZSA9PSBQeV9Ob25lKSB7CiAgICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOworICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAibG9zdCBzeXMuc3Rkb3V0Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCiAgICAgICAgIC8qIHN5cy5zdGRvdXQgbWF5IGJlIE5vbmUgd2hlbiBGSUxFKiBzdGRvdXQgaXNuJ3QgY29ubmVjdGVkICovCiAgICAgICAgIGlmIChmaWxlID09IFB5X05vbmUpCiAgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTE4MTAsMTAgKzE4MzcsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX3JvdW5kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpyb3VuZF9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuZGlnaXRzID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im51bWJlciIsICJuZGlnaXRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm51bWJlciwgKnJvdW5kOworICAgIFB5T2JqZWN0ICpudW1iZXIsICpyb3VuZCwgKnJlc3VsdDsKKyAgICBfUHlfSURFTlRJRklFUihfX3JvdW5kX18pOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98Tzpyb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbnVtYmVyLCAmbmRpZ2l0cykpCkBAIC0xODI0LDI0ICsxODUxLDIxIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAocm91bmRfc3RyID09IE5VTEwpIHsKLSAgICAgICAgcm91bmRfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcm91bmRfXyIpOwotICAgICAgICBpZiAocm91bmRfc3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByb3VuZCA9IF9QeVR5cGVfTG9va3VwKFB5X1RZUEUobnVtYmVyKSwgcm91bmRfc3RyKTsKKyAgICByb3VuZCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG51bWJlciwgJlB5SWRfX19yb3VuZF9fKTsKICAgICBpZiAocm91bmQgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fcm91bmRfXyBtZXRob2QiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShudW1iZXIpLT50cF9uYW1lKTsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19yb3VuZF9fIG1ldGhvZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShudW1iZXIpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKG5kaWdpdHMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyb3VuZCwgIk8iLCBudW1iZXIpOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHJvdW5kLCBOVUxMKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocm91bmQsICJPTyIsIG51bWJlciwgbmRpZ2l0cyk7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocm91bmQsIG5kaWdpdHMsIE5VTEwpOworICAgIFB5X0RFQ1JFRihyb3VuZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHlEb2NfU1RSVkFSKHJvdW5kX2RvYywKQEAgLTE5MDcsMTMgKzE5MzEsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIGQgPSBQeUV2YWxfR2V0TG9jYWxzKCk7Ci0gICAgICAgIGlmIChkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXJzKCk6IG5vIGxvY2FscyE/Iik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlfSU5DUkVGKGQpOworICAgICAgICBpZiAoZCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5X0lOQ1JFRihkKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKQEAgLTI0MTMsNiArMjQzMywxMiBAQAogX1B5QnVpbHRpbl9Jbml0KHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm1vZCwgKmRpY3QsICpkZWJ1ZzsKKworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RmlsdGVyX1R5cGUpIDwgMCB8fAorICAgICAgICBQeVR5cGVfUmVhZHkoJlB5TWFwX1R5cGUpIDwgMCB8fAorICAgICAgICBQeVR5cGVfUmVhZHkoJlB5WmlwX1R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBtb2QgPSBQeU1vZHVsZV9DcmVhdGUoJmJ1aWx0aW5zbW9kdWxlKTsKICAgICBpZiAobW9kID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NldmFsLmMgYi9QeXRob24vY2V2YWwuYwppbmRleCA3MzkyNWRjLi5kNGQ4NDY2IDEwMDY0NAotLS0gYS9QeXRob24vY2V2YWwuYworKysgYi9QeXRob24vY2V2YWwuYwpAQCAtMzcsNyArMzcsNyBAQAogc3RhdGljIHZvaWQKIHBwY19nZXRjb3VudGVyKHVpbnQ2NCAqdikKIHsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIHRidSwgdGIsIHRidTI7CisgICAgdW5zaWduZWQgbG9uZyB0YnUsIHRiLCB0YnUyOwogCiAgIGxvb3A6CiAgICAgYXNtIHZvbGF0aWxlICgibWZ0YnUgJTAiIDogIj1yIiAodGJ1KSApOwpAQCAtMTQyLDggKzE0Miw2IEBACiAKICNkZWZpbmUgTkFNRV9FUlJPUl9NU0cgXAogICAgICJuYW1lICclLjIwMHMnIGlzIG5vdCBkZWZpbmVkIgotI2RlZmluZSBHTE9CQUxfTkFNRV9FUlJPUl9NU0cgXAotICAgICJnbG9iYWwgbmFtZSAnJS4yMDBzJyBpcyBub3QgZGVmaW5lZCIKICNkZWZpbmUgVU5CT1VORExPQ0FMX0VSUk9SX01TRyBcCiAgICAgImxvY2FsIHZhcmlhYmxlICclLjIwMHMnIHJlZmVyZW5jZWQgYmVmb3JlIGFzc2lnbm1lbnQiCiAjZGVmaW5lIFVOQk9VTkRGUkVFX0VSUk9SX01TRyBcCkBAIC0zNjQsMjkgKzM2MiwyOCBAQAogICAgIGRyb3BfZ2lsKHRzdGF0ZSk7CiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gUHlPU19BZnRlckZvcmsgdG8gZW5zdXJlIHRoYXQgbmV3bHkKLSAgIGNyZWF0ZWQgY2hpbGQgcHJvY2Vzc2VzIGRvbid0IGhvbGQgbG9ja3MgcmVmZXJyaW5nIHRvIHRocmVhZHMgd2hpY2gKLSAgIGFyZSBub3QgcnVubmluZyBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4gIChUaGlzIGNvdWxkIGFsc28gYmUgZG9uZSB1c2luZwotICAgcHRocmVhZF9hdGZvcmsgbWVjaGFuaXNtLCBhdCBsZWFzdCBmb3IgdGhlIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uLikgKi8KKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gUHlPU19BZnRlckZvcmsgdG8gZGVzdHJveSBhbGwgdGhyZWFkcyB3aGljaCBhcmUKKyAqIG5vdCBydW5uaW5nIGluIHRoZSBjaGlsZCBwcm9jZXNzLCBhbmQgY2xlYXIgaW50ZXJuYWwgbG9ja3Mgd2hpY2ggbWlnaHQgYmUKKyAqIGhlbGQgYnkgdGhvc2UgdGhyZWFkcy4gKFRoaXMgY291bGQgYWxzbyBiZSBkb25lIHVzaW5nIHB0aHJlYWRfYXRmb3JrCisgKiBtZWNoYW5pc20sIGF0IGxlYXN0IGZvciB0aGUgcHRocmVhZHMgaW1wbGVtZW50YXRpb24uKSAqLwogCiB2b2lkCiBQeUV2YWxfUmVJbml0VGhyZWFkcyh2b2lkKQogewogICAgIF9QeV9JREVOVElGSUVSKF9hZnRlcl9mb3JrKTsKICAgICBQeU9iamVjdCAqdGhyZWFkaW5nLCAqcmVzdWx0OwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgUHlUaHJlYWRTdGF0ZSAqY3VycmVudF90c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogCiAgICAgaWYgKCFnaWxfY3JlYXRlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgcmVjcmVhdGVfZ2lsKCk7CiAgICAgcGVuZGluZ19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwotICAgIHRha2VfZ2lsKHRzdGF0ZSk7CisgICAgdGFrZV9naWwoY3VycmVudF90c3RhdGUpOwogICAgIG1haW5fdGhyZWFkID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwogCiAgICAgLyogVXBkYXRlIHRoZSB0aHJlYWRpbmcgbW9kdWxlIHdpdGggdGhlIG5ldyBzdGF0ZS4KICAgICAgKi8KLSAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwotICAgIHRocmVhZGluZyA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHRzdGF0ZS0+aW50ZXJwLT5tb2R1bGVzLAorICAgIHRocmVhZGluZyA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKGN1cnJlbnRfdHN0YXRlLT5pbnRlcnAtPm1vZHVsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRocmVhZGluZyIpOwogICAgIGlmICh0aHJlYWRpbmcgPT0gTlVMTCkgewogICAgICAgICAvKiB0aHJlYWRpbmcgbm90IGltcG9ydGVkICovCkBAIC0zOTksNiArMzk2LDkgQEAKICAgICBlbHNlCiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgIFB5X0RFQ1JFRih0aHJlYWRpbmcpOworCisgICAgLyogRGVzdHJveSBhbGwgdGhyZWFkcyBleGNlcHQgdGhlIGN1cnJlbnQgb25lICovCisgICAgX1B5VGhyZWFkU3RhdGVfRGVsZXRlRXhjZXB0KGN1cnJlbnRfdHN0YXRlKTsKIH0KIAogI2Vsc2UKQEAgLTc0Miw3ICs3NDIsNiBAQAogZW51bSB3aHlfY29kZSB7CiAgICAgICAgIFdIWV9OT1QgPSAgICAgICAweDAwMDEsIC8qIE5vIGVycm9yICovCiAgICAgICAgIFdIWV9FWENFUFRJT04gPSAweDAwMDIsIC8qIEV4Y2VwdGlvbiBvY2N1cnJlZCAqLwotICAgICAgICBXSFlfUkVSQUlTRSA9ICAgMHgwMDA0LCAvKiBFeGNlcHRpb24gcmUtcmFpc2VkIGJ5ICdmaW5hbGx5JyAqLwogICAgICAgICBXSFlfUkVUVVJOID0gICAgMHgwMDA4LCAvKiAncmV0dXJuJyBzdGF0ZW1lbnQgKi8KICAgICAgICAgV0hZX0JSRUFLID0gICAgIDB4MDAxMCwgLyogJ2JyZWFrJyBzdGF0ZW1lbnQgKi8KICAgICAgICAgV0hZX0NPTlRJTlVFID0gIDB4MDAyMCwgLyogJ2NvbnRpbnVlJyBzdGF0ZW1lbnQgKi8KQEAgLTc1Myw3ICs3NTIsNyBAQAogc3RhdGljIHZvaWQgc2F2ZV9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwogc3RhdGljIHZvaWQgc3dhcF9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwogc3RhdGljIHZvaWQgcmVzdG9yZV9hbmRfY2xlYXJfZXhjX3N0YXRlKFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqKTsKLXN0YXRpYyBlbnVtIHdoeV9jb2RlIGRvX3JhaXNlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworc3RhdGljIGludCBkb19yYWlzZShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIHN0YXRpYyBpbnQgdW5wYWNrX2l0ZXJhYmxlKFB5T2JqZWN0ICosIGludCwgaW50LCBQeU9iamVjdCAqKik7CiAKIC8qIFJlY29yZHMgd2hldGhlciB0cmFjaW5nIGlzIG9uIGZvciBhbnkgdGhyZWFkLiAgQ291bnRzIHRoZSBudW1iZXIgb2YKQEAgLTc5MywxOCArNzkyLDEyIEBACiAjaWZkZWYgRFhQQUlSUwogICAgIGludCBsYXN0b3Bjb2RlID0gMDsKICNlbmRpZgotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqc3RhY2tfcG9pbnRlcjsgIC8qIE5leHQgZnJlZSBzbG90IGluIHZhbHVlIHN0YWNrICovCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqbmV4dF9pbnN0cjsKLSAgICByZWdpc3RlciBpbnQgb3Bjb2RlOyAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgKi8KLSAgICByZWdpc3RlciBpbnQgb3Bhcmc7ICAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgYXJndW1lbnQsIGlmIGFueSAqLwotICAgIHJlZ2lzdGVyIGVudW0gd2h5X2NvZGUgd2h5OyAvKiBSZWFzb24gZm9yIGJsb2NrIHN0YWNrIHVud2luZCAqLwotICAgIHJlZ2lzdGVyIGludCBlcnI7ICAgICAgICAgICAvKiBFcnJvciBzdGF0dXMgLS0gbm9uemVybyBpZiBlcnJvciAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp4OyAgICAgICAvKiBSZXN1bHQgb2JqZWN0IC0tIE5VTEwgaWYgZXJyb3IgKi8KLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsgICAgICAgLyogVGVtcG9yYXJ5IG9iamVjdHMgcG9wcGVkIG9mZiBzdGFjayAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp3OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp1OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp0OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKKyAgICBQeU9iamVjdCAqKnN0YWNrX3BvaW50ZXI7ICAvKiBOZXh0IGZyZWUgc2xvdCBpbiB2YWx1ZSBzdGFjayAqLworICAgIHVuc2lnbmVkIGNoYXIgKm5leHRfaW5zdHI7CisgICAgaW50IG9wY29kZTsgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlICovCisgICAgaW50IG9wYXJnOyAgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlIGFyZ3VtZW50LCBpZiBhbnkgKi8KKyAgICBlbnVtIHdoeV9jb2RlIHdoeTsgLyogUmVhc29uIGZvciBibG9jayBzdGFjayB1bndpbmQgKi8KKyAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CiAgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7ICAgICAgICAgICAgLyogUmV0dXJuIHZhbHVlICovCiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBQeUNvZGVPYmplY3QgKmNvOwpAQCAtMTE4OSw2ICsxMTgyLDcgQEAKICAgICBzdGFja19wb2ludGVyID0gZi0+Zl9zdGFja3RvcDsKICAgICBhc3NlcnQoc3RhY2tfcG9pbnRlciAhPSBOVUxMKTsKICAgICBmLT5mX3N0YWNrdG9wID0gTlVMTDsgICAgICAgLyogcmVtYWlucyBOVUxMIHVubGVzcyB5aWVsZCBzdXNwZW5kcyBmcmFtZSAqLworICAgIGYtPmZfZXhlY3V0aW5nID0gMTsKIAogICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IgJiYgIXRocm93ZmxhZykgewogICAgICAgICBpZiAoZi0+Zl9leGNfdHlwZSAhPSBOVUxMICYmIGYtPmZfZXhjX3R5cGUgIT0gUHlfTm9uZSkgewpAQCAtMTIwNiwxNCArMTIwMCwxNiBAQAogI2VuZGlmCiAKICAgICB3aHkgPSBXSFlfTk9UOwotICAgIGVyciA9IDA7Ci0gICAgeCA9IFB5X05vbmU7ICAgICAgICAvKiBOb3QgYSByZWZlcmVuY2UsIGp1c3QgYW55dGhpbmcgbm9uLU5VTEwgKi8KLSAgICB3ID0gTlVMTDsKIAotICAgIGlmICh0aHJvd2ZsYWcpIHsgLyogc3VwcG9ydCBmb3IgZ2VuZXJhdG9yLnRocm93KCkgKi8KLSAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICB9CisgICAgaWYgKHRocm93ZmxhZykgLyogc3VwcG9ydCBmb3IgZ2VuZXJhdG9yLnRocm93KCkgKi8KKyAgICAgICAgZ290byBlcnJvcjsKKworI2lmZGVmIFB5X0RFQlVHCisgICAgLyogUHlFdmFsX0V2YWxGcmFtZUV4KCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKIAogICAgIGZvciAoOzspIHsKICNpZmRlZiBXSVRIX1RTQwpAQCAtMTIzNSw2ICsxMjMxLDcgQEAKICNlbmRpZgogICAgICAgICBhc3NlcnQoc3RhY2tfcG9pbnRlciA+PSBmLT5mX3ZhbHVlc3RhY2spOyAvKiBlbHNlIHVuZGVyZmxvdyAqLwogICAgICAgICBhc3NlcnQoU1RBQ0tfTEVWRUwoKSA8PSBjby0+Y29fc3RhY2tzaXplKTsgIC8qIGVsc2Ugb3ZlcmZsb3cgKi8KKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKIAogICAgICAgICAvKiBEbyBwZXJpb2RpYyB0aGluZ3MuICBEb2luZyB0aGlzIGV2ZXJ5IHRpbWUgdGhyb3VnaAogICAgICAgICAgICB0aGUgbG9vcCB3b3VsZCBhZGQgdG9vIG11Y2ggb3ZlcmhlYWQsIHNvIHdlIGRvIGl0CkBAIC0xMjUwLDE1ICsxMjQ3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgYSB0cnk6IGZpbmFsbHk6IGJsb2NrIHVuaW50ZXJydXB0aWJsZS4gKi8KICAgICAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0c3RhdGUtPnRpY2tfY291bnRlcisrOwogI2lmZGVmIFdJVEhfVFNDCiAgICAgICAgICAgICB0aWNrZWQgPSAxOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJnBlbmRpbmdjYWxsc190b19kbykpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlfTWFrZVBlbmRpbmdDYWxscygpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoUHlfTWFrZVBlbmRpbmdDYWxscygpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICAgICAgaWYgKF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZnaWxfZHJvcF9yZXF1ZXN0KSkgewpAQCAtMTI3NiwxMyArMTI3MCwxMiBAQAogI2VuZGlmCiAgICAgICAgICAgICAvKiBDaGVjayBmb3IgYXN5bmNocm9ub3VzIGV4Y2VwdGlvbnMuICovCiAgICAgICAgICAgICBpZiAodHN0YXRlLT5hc3luY19leGMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHggPSB0c3RhdGUtPmFzeW5jX2V4YzsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXhjID0gdHN0YXRlLT5hc3luY19leGM7CiAgICAgICAgICAgICAgICAgdHN0YXRlLT5hc3luY19leGMgPSBOVUxMOwogICAgICAgICAgICAgICAgIFVOU0lHTkFMX0FTWU5DX0VYQygpOwotICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoeCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXROb25lKGV4Yyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGV4Yyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMjkzLDYgKzEyODYsNyBAQAogCiAgICAgICAgIGlmIChfUHlfVHJhY2luZ1Bvc3NpYmxlICYmCiAgICAgICAgICAgICB0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwgJiYgIXRzdGF0ZS0+dHJhY2luZykgeworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIC8qIHNlZSBtYXliZV9jYWxsX2xpbmVfdHJhY2UKICAgICAgICAgICAgICAgIGZvciBleHBvc2l0b3J5IGNvbW1lbnRzICovCiAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gc3RhY2tfcG9pbnRlcjsKQEAgLTEzMDcsMTAgKzEzMDEsOSBAQAogICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgPSBmLT5mX3N0YWNrdG9wOwogICAgICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgaWYgKGVycikKICAgICAgICAgICAgICAgICAvKiB0cmFjZSBmdW5jdGlvbiByYWlzZWQgYW4gZXhjZXB0aW9uICovCi0gICAgICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKICAgICAgICAgLyogRXh0cmFjdCBvcGNvZGUgYW5kIGFyZ3VtZW50ICovCkBAIC0xMzU3LDg3ICsxMzUwLDk5IEBACiAgICAgICAgIFRBUkdFVChOT1ApCiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAKLSAgICAgICAgVEFSR0VUKExPQURfRkFTVCkKLSAgICAgICAgICAgIHggPSBHRVRMT0NBTChvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICBUQVJHRVQoTE9BRF9GQVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBHRVRMT0NBTChvcGFyZyk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX1VuYm91bmRMb2NhbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtKGNvLT5jb192YXJuYW1lcywgb3BhcmcpKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IsCi0gICAgICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKLSAgICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0oY28tPmNvX3Zhcm5hbWVzLCBvcGFyZykpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExPQURfQ09OU1QpCi0gICAgICAgICAgICB4ID0gR0VUSVRFTShjb25zdHMsIG9wYXJnKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTE9BRF9DT05TVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gR0VUSVRFTShjb25zdHMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKKyAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhTVE9SRV9GQVNUKTsKLSAgICAgICAgVEFSR0VUKFNUT1JFX0ZBU1QpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBTRVRMT0NBTChvcGFyZywgdik7CisgICAgICAgIFRBUkdFVChTVE9SRV9GQVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgIFNFVExPQ0FMKG9wYXJnLCB2YWx1ZSk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUE9QX1RPUCkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgVEFSR0VUKFBPUF9UT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChST1RfVFdPKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgdyA9IFNFQ09ORCgpOwotICAgICAgICAgICAgU0VUX1RPUCh3KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQodik7CisgICAgICAgIFRBUkdFVChST1RfVFdPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2Vjb25kID0gU0VDT05EKCk7CisgICAgICAgICAgICBTRVRfVE9QKHNlY29uZCk7CisgICAgICAgICAgICBTRVRfU0VDT05EKHRvcCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUk9UX1RIUkVFKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgdyA9IFNFQ09ORCgpOwotICAgICAgICAgICAgeCA9IFRISVJEKCk7Ci0gICAgICAgICAgICBTRVRfVE9QKHcpOwotICAgICAgICAgICAgU0VUX1NFQ09ORCh4KTsKLSAgICAgICAgICAgIFNFVF9USElSRCh2KTsKKyAgICAgICAgVEFSR0VUKFJPVF9USFJFRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlY29uZCA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnRoaXJkID0gVEhJUkQoKTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc2Vjb25kKTsKKyAgICAgICAgICAgIFNFVF9TRUNPTkQodGhpcmQpOworICAgICAgICAgICAgU0VUX1RISVJEKHRvcCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoRFVQX1RPUCkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKLSAgICAgICAgICAgIFBVU0godik7CisgICAgICAgIFRBUkdFVChEVVBfVE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeV9JTkNSRUYodG9wKTsKKyAgICAgICAgICAgIFBVU0godG9wKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChEVVBfVE9QX1RXTykKLSAgICAgICAgICAgIHggPSBUT1AoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIHcgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKERVUF9UT1BfVFdPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2Vjb25kID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeV9JTkNSRUYodG9wKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzZWNvbmQpOwogICAgICAgICAgICAgU1RBQ0tBREooMik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgU0VUX1NFQ09ORCh3KTsKKyAgICAgICAgICAgIFNFVF9UT1AodG9wKTsKKyAgICAgICAgICAgIFNFVF9TRUNPTkQoc2Vjb25kKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9QT1NJVElWRSkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Qb3NpdGl2ZSh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChVTkFSWV9QT1NJVElWRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfUG9zaXRpdmUodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9ORUdBVElWRSkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9OZWdhdGl2ZSh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChVTkFSWV9ORUdBVElWRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfTmVnYXRpdmUodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9OT1QpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIFRBUkdFVChVTkFSWV9OT1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOwogICAgICAgICAgICAgICAgIFNFVF9UT1AoUHlfVHJ1ZSk7CkBAIC0xNDUwLDQxNiArMTQ1NSw0NjAgQEAKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOQVJZX0lOVkVSVCkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JbnZlcnQodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoVU5BUllfSU5WRVJUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JbnZlcnQodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfUE9XRVIpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfUG93ZXIodiwgdywgUHlfTm9uZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX1BPV0VSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhwID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1Bvd2VyKGJhc2UsIGV4cCwgUHlfTm9uZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXhwKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfTVVMVElQTFkpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfTXVsdGlwbHkodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX01VTFRJUExZKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfTXVsdGlwbHkobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfVFJVRV9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfVFJVRV9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX1RydWVEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0ZMT09SX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9GbG9vckRpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfRkxPT1JfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9GbG9vckRpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfTU9EVUxPKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpKQotICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfRm9ybWF0KHYsIHcpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHggPSBQeU51bWJlcl9SZW1haW5kZXIodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX01PRFVMTykgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5VW5pY29kZV9DaGVja0V4YWN0KGRpdmlkZW5kKSA/CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zvcm1hdChkaXZpZGVuZCwgZGl2aXNvcikgOgorICAgICAgICAgICAgICAgIFB5TnVtYmVyX1JlbWFpbmRlcihkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9BREQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9DaGVja0V4YWN0KHcpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IHVuaWNvZGVfY29uY2F0ZW5hdGUodiwgdywgZiwgbmV4dF9pbnN0cik7CisgICAgICAgIFRBUkdFVChCSU5BUllfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc3VtOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGxlZnQpICYmCisgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdChyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzdW0gPSB1bmljb2RlX2NvbmNhdGVuYXRlKGxlZnQsIHJpZ2h0LCBmLCBuZXh0X2luc3RyKTsKICAgICAgICAgICAgICAgICAvKiB1bmljb2RlX2NvbmNhdGVuYXRlIGNvbnN1bWVkIHRoZSByZWYgdG8gdiAqLwotICAgICAgICAgICAgICAgIGdvdG8gc2tpcF9kZWNyZWZfdng7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlOdW1iZXJfQWRkKHYsIHcpOworICAgICAgICAgICAgICAgIHN1bSA9IFB5TnVtYmVyX0FkZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc3VtKTsKKyAgICAgICAgICAgIGlmIChzdW0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfU1VCVFJBQ1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaWZmID0gUHlOdW1iZXJfU3VidHJhY3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFNFVF9UT1AoZGlmZik7CisgICAgICAgICAgICBpZiAoZGlmZiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJTQ1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdWIgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9HZXRJdGVtKGNvbnRhaW5lciwgc3ViKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX0xTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0xzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9SU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Sc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfQU5EKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfQW5kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1hPUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1hvcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9PUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX09yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTElTVF9BUFBFTkQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCA9IFBFRUsob3BhcmcpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5TGlzdF9BcHBlbmQobGlzdCwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgc2tpcF9kZWNyZWZfdng6Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfU1VCVFJBQ1QpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfU3VidHJhY3Qodiwgdyk7CisgICAgICAgIFRBUkdFVChTRVRfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNldCA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoc2V0LCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJTQ1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1BPV0VSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhwID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VQb3dlcihiYXNlLCBleHAsIFB5X05vbmUpOworICAgICAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICAgICAgUHlfREVDUkVGKGV4cCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0xTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Mc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9NVUxUSVBMWSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9SU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfUnNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfVFJVRV9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9BTkQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfQW5kKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfRkxPT1JfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1hPUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Yb3Iodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9NT0RVTE8pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptb2QgPSBQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKG1vZCk7CisgICAgICAgICAgICBpZiAobW9kID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX09SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX09yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTElTVF9BUFBFTkQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gUEVFSyhvcGFyZyk7Ci0gICAgICAgICAgICBlcnIgPSBQeUxpc3RfQXBwZW5kKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKFNFVF9BREQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOwotICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfUE9XRVIpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVBvd2VyKHYsIHcsIFB5X05vbmUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9NVUxUSVBMWSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1RSVUVfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9GTE9PUl9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9NT0RVTE8pCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfQUREKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh3KSkgewotICAgICAgICAgICAgICAgIHggPSB1bmljb2RlX2NvbmNhdGVuYXRlKHYsIHcsIGYsIG5leHRfaW5zdHIpOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9BREQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdW07CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobGVmdCkgJiYgUHlVbmljb2RlX0NoZWNrRXhhY3QocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc3VtID0gdW5pY29kZV9jb25jYXRlbmF0ZShsZWZ0LCByaWdodCwgZiwgbmV4dF9pbnN0cik7CiAgICAgICAgICAgICAgICAgLyogdW5pY29kZV9jb25jYXRlbmF0ZSBjb25zdW1lZCB0aGUgcmVmIHRvIHYgKi8KLSAgICAgICAgICAgICAgICBnb3RvIHNraXBfZGVjcmVmX3Y7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUFkZCh2LCB3KTsKKyAgICAgICAgICAgICAgICBzdW0gPSBQeU51bWJlcl9JblBsYWNlQWRkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgc2tpcF9kZWNyZWZfdjoKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChzdW0pOworICAgICAgICAgICAgaWYgKHN1bSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfU1VCVFJBQ1QpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfU1VCVFJBQ1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaWZmID0gUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKGRpZmYpOworICAgICAgICAgICAgaWYgKGRpZmYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0xTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlTHNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfTFNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZUxzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfUlNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VSc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9SU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlUnNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9BTkQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUFuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0FORCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VBbmQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1hPUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlWG9yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfWE9SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZVhvcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZU9yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlT3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9TVUJTQ1IpCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICB2ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICB1ID0gVEhJUkQoKTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX1NVQlNDUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnN1YiA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBUSElSRCgpOworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIFNUQUNLQURKKC0zKTsKICAgICAgICAgICAgIC8qIHZbd10gPSB1ICovCi0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKHYsIHcsIHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbShjb250YWluZXIsIHN1Yiwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX1NVQlNDUikKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIHYgPSBTRUNPTkQoKTsKKyAgICAgICAgVEFSR0VUKERFTEVURV9TVUJTQ1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdWIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMik7CiAgICAgICAgICAgICAvKiBkZWwgdlt3XSAqLwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfRGVsSXRlbSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfRGVsSXRlbShjb250YWluZXIsIHN1Yik7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBSSU5UX0VYUFIpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICB3ID0gUHlTeXNfR2V0T2JqZWN0KCJkaXNwbGF5aG9vayIpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgeworICAgICAgICBUQVJHRVQoUFJJTlRfRVhQUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqaG9vayA9IFB5U3lzX0dldE9iamVjdCgiZGlzcGxheWhvb2siKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgICAgICBpZiAoaG9vayA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvc3Qgc3lzLmRpc3BsYXlob29rIik7Ci0gICAgICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5VHVwbGVfUGFjaygxLCB2KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIHcgPSBQeUV2YWxfQ2FsbE9iamVjdCh3LCB4KTsKLSAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHcpOwotICAgICAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih4KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhob29rLCB2YWx1ZSwgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogI2lmZGVmIENBU0VfVE9PX0JJRwogICAgICAgICBkZWZhdWx0OiBzd2l0Y2ggKG9wY29kZSkgewogI2VuZGlmCi0gICAgICAgIFRBUkdFVChSQUlTRV9WQVJBUkdTKQotICAgICAgICAgICAgdiA9IHcgPSBOVUxMOworICAgICAgICBUQVJHRVQoUkFJU0VfVkFSQVJHUykgeworICAgICAgICAgICAgUHlPYmplY3QgKmNhdXNlID0gTlVMTCwgKmV4YyA9IE5VTEw7CiAgICAgICAgICAgICBzd2l0Y2ggKG9wYXJnKSB7CiAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgdiA9IFBPUCgpOyAvKiBjYXVzZSAqLworICAgICAgICAgICAgICAgIGNhdXNlID0gUE9QKCk7IC8qIGNhdXNlICovCiAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOyAvKiBleGMgKi8KKyAgICAgICAgICAgICAgICBleGMgPSBQT1AoKTsgLyogZXhjICovCiAgICAgICAgICAgICBjYXNlIDA6IC8qIEZhbGx0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgd2h5ID0gZG9fcmFpc2Uodywgdik7CisgICAgICAgICAgICAgICAgaWYgKGRvX3JhaXNlKGV4YywgY2F1c2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIFJBSVNFX1ZBUkFSR1Mgb3BhcmciKTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX0xPQ0FMUykKLSAgICAgICAgICAgIHggPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBmLT5mX2xvY2FsczsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodik7Ci0gICAgICAgICAgICBmLT5mX2xvY2FscyA9IHg7Ci0gICAgICAgICAgICBESVNQQVRDSCgpOwotCi0gICAgICAgIFRBUkdFVChSRVRVUk5fVkFMVUUpCisgICAgICAgIFRBUkdFVChSRVRVUk5fVkFMVUUpIHsKICAgICAgICAgICAgIHJldHZhbCA9IFBPUCgpOwogICAgICAgICAgICAgd2h5ID0gV0hZX1JFVFVSTjsKICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoWUlFTERfRlJPTSkKLSAgICAgICAgICAgIHUgPSBQT1AoKTsKLSAgICAgICAgICAgIHggPSBUT1AoKTsKLSAgICAgICAgICAgIC8qIHNlbmQgdSB0byB4ICovCi0gICAgICAgICAgICBpZiAoUHlHZW5fQ2hlY2tFeGFjdCh4KSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeUdlbl9TZW5kKChQeUdlbk9iamVjdCAqKXgsIHUpOworICAgICAgICBUQVJHRVQoWUlFTERfRlJPTSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZWNpZXZlciA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KHJlY2lldmVyKSkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeUdlbl9TZW5kKChQeUdlbk9iamVjdCAqKXJlY2lldmVyLCB2KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoc2VuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHUgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUHlfVFlQRSh4KS0+dHBfaXRlcm5leHQoeCk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUHlfVFlQRShyZWNpZXZlciktPnRwX2l0ZXJuZXh0KHJlY2lldmVyKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoeCwgJlB5SWRfc2VuZCwgIk8iLCB1KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChyZWNpZXZlciwgJlB5SWRfc2VuZCwgIk8iLCB2KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBpZiAocmV0dmFsID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsOwotICAgICAgICAgICAgICAgIHggPSBQT1AoKTsgLyogUmVtb3ZlIGl0ZXIgZnJvbSBzdGFjayAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKICAgICAgICAgICAgICAgICBlcnIgPSBfUHlHZW5fRmV0Y2hTdG9wSXRlcmF0aW9uVmFsdWUoJnZhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB4ID0gdmFsOwotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlY2lldmVyKTsKKyAgICAgICAgICAgICAgICBTRVRfVE9QKHZhbCk7CisgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIHggcmVtYWlucyBvbiBzdGFjaywgcmV0dmFsIGlzIHZhbHVlIHRvIGJlIHlpZWxkZWQgKi8KICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBzdGFja19wb2ludGVyOwpAQCAtMTg2NywzOSArMTkxNiwzOCBAQAogICAgICAgICAgICAgLyogYW5kIHJlcGVhdC4uLiAqLwogICAgICAgICAgICAgZi0+Zl9sYXN0aS0tOwogICAgICAgICAgICAgZ290byBmYXN0X3lpZWxkOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFlJRUxEX1ZBTFVFKQorICAgICAgICBUQVJHRVQoWUlFTERfVkFMVUUpIHsKICAgICAgICAgICAgIHJldHZhbCA9IFBPUCgpOwogICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IHN0YWNrX3BvaW50ZXI7CiAgICAgICAgICAgICB3aHkgPSBXSFlfWUlFTEQ7CiAgICAgICAgICAgICBnb3RvIGZhc3RfeWllbGQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUE9QX0VYQ0VQVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKLSAgICAgICAgICAgICAgICBpZiAoYi0+Yl90eXBlICE9IEVYQ0VQVF9IQU5ETEVSKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJwb3BwZWQgYmxvY2sgaXMgbm90IGFuIGV4Y2VwdCBoYW5kbGVyIik7Ci0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBVTldJTkRfRVhDRVBUX0hBTkRMRVIoYik7CisgICAgICAgIFRBUkdFVChQT1BfRVhDRVBUKSB7CisgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKKyAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgIT0gRVhDRVBUX0hBTkRMRVIpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3BwZWQgYmxvY2sgaXMgbm90IGFuIGV4Y2VwdCBoYW5kbGVyIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUE9QX0JMT0NLKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOwotICAgICAgICAgICAgICAgIFVOV0lORF9CTE9DSyhiKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgVEFSR0VUKFBPUF9CTE9DSykgeworICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7CisgICAgICAgICAgICBVTldJTkRfQkxPQ0soYik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEKEVORF9GSU5BTExZKTsKLSAgICAgICAgVEFSR0VUKEVORF9GSU5BTExZKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIHdoeSA9IChlbnVtIHdoeV9jb2RlKSBQeUxvbmdfQVNfTE9ORyh2KTsKLSAgICAgICAgICAgICAgICBhc3NlcnQod2h5ICE9IFdIWV9ZSUVMRCk7CisgICAgICAgIFRBUkdFVChFTkRfRklOQUxMWSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnN0YXR1cyA9IFBPUCgpOworICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgd2h5ID0gKGVudW0gd2h5X2NvZGUpIFB5TG9uZ19BU19MT05HKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfWUlFTEQgJiYgd2h5ICE9IFdIWV9FWENFUFRJT04pOwogICAgICAgICAgICAgICAgIGlmICh3aHkgPT0gV0hZX1JFVFVSTiB8fAogICAgICAgICAgICAgICAgICAgICB3aHkgPT0gV0hZX0NPTlRJTlVFKQogICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBQT1AoKTsKQEAgLTE5MTIsMjQ4ICsxOTYwLDI4MCBAQAogICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYi0+Yl90eXBlID09IEVYQ0VQVF9IQU5ETEVSKTsKICAgICAgICAgICAgICAgICAgICAgVU5XSU5EX0VYQ0VQVF9IQU5ETEVSKGIpOwogICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfTk9UOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgdSA9IFBPUCgpOwotICAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUodiwgdywgdSk7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX1JFUkFJU0U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbHNlIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXhjID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRiID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShzdGF0dXMsIGV4YywgdGIpOworICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHYgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICInZmluYWxseScgcG9wcyBiYWQgZXhjZXB0aW9uIik7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdHVzKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoTE9BRF9CVUlMRF9DTEFTUykKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoTE9BRF9CVUlMRF9DTEFTUykgewogICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19idWlsZF9jbGFzc19fKTsKIAorICAgICAgICAgICAgUHlPYmplY3QgKmJjOwogICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGYtPmZfYnVpbHRpbnMpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19fYnVpbGRfY2xhc3NfXyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJjID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19idWlsZF9jbGFzc19fKTsKKyAgICAgICAgICAgICAgICBpZiAoYmMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTmFtZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fYnVpbGRfY2xhc3NfXyBub3QgZm91bmQiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoYmMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmJ1aWxkX2NsYXNzX3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fYnVpbGRfY2xhc3NfXyk7CiAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkX2NsYXNzX3N0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBidWlsZF9jbGFzc19zdHIpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBiYyA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgYnVpbGRfY2xhc3Nfc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoYmMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTmFtZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2J1aWxkX2NsYXNzX18gbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0goYmMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9OQU1FKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmICgoeCA9IGYtPmZfbG9jYWxzKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KHgpKQotICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbSh4LCB3LCB2KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0oeCwgdywgdik7CisgICAgICAgIFRBUkdFVChTVE9SRV9OQU1FKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbnMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAobnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyBmb3VuZCB3aGVuIHN0b3JpbmcgJVIiLCBuYW1lKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyBmb3VuZCB3aGVuIHN0b3JpbmcgJVIiLCB3KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KG5zKSkKKyAgICAgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShucywgbmFtZSwgdik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbShucywgbmFtZSwgdik7CisgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX05BTUUpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgaWYgKCh4ID0gZi0+Zl9sb2NhbHMpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0oeCwgdykpICE9IDApCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoREVMRVRFX05BTUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm5zID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKG5zID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBkZWxldGluZyAlUiIsIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyB3aGVuIGRlbGV0aW5nICVSIiwgdyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0obnMsIG5hbWUpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfTmFtZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFVOUEFDS19TRVFVRU5DRSk7Ci0gICAgICAgIFRBUkdFVChVTlBBQ0tfU0VRVUVOQ0UpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfU0laRSh2KSA9PSBvcGFyZykgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqaXRlbXMgPSBcCi0gICAgICAgICAgICAgICAgICAgICgoUHlUdXBsZU9iamVjdCAqKXYpLT5vYl9pdGVtOworICAgICAgICBUQVJHRVQoVU5QQUNLX1NFUVVFTkNFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc2VxID0gUE9QKCksICppdGVtLCAqKml0ZW1zOworICAgICAgICAgICAgaWYgKFB5VHVwbGVfQ2hlY2tFeGFjdChzZXEpICYmCisgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShzZXEpID09IG9wYXJnKSB7CisgICAgICAgICAgICAgICAgaXRlbXMgPSAoKFB5VHVwbGVPYmplY3QgKilzZXEpLT5vYl9pdGVtOwogICAgICAgICAgICAgICAgIHdoaWxlIChvcGFyZy0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBpdGVtc1tvcGFyZ107Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih3KTsKLSAgICAgICAgICAgICAgICAgICAgUFVTSCh3KTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW29wYXJnXTsKKyAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgICAgICAgICBQVVNIKGl0ZW0pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoUHlMaXN0X0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9TSVpFKHYpID09IG9wYXJnKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKippdGVtcyA9IFwKLSAgICAgICAgICAgICAgICAgICAgKChQeUxpc3RPYmplY3QgKil2KS0+b2JfaXRlbTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoUHlMaXN0X0NoZWNrRXhhY3Qoc2VxKSAmJgorICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUoc2VxKSA9PSBvcGFyZykgeworICAgICAgICAgICAgICAgIGl0ZW1zID0gKChQeUxpc3RPYmplY3QgKilzZXEpLT5vYl9pdGVtOwogICAgICAgICAgICAgICAgIHdoaWxlIChvcGFyZy0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBpdGVtc1tvcGFyZ107Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih3KTsKLSAgICAgICAgICAgICAgICAgICAgUFVTSCh3KTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW29wYXJnXTsKKyAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgICAgICAgICBQVVNIKGl0ZW0pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodW5wYWNrX2l0ZXJhYmxlKHYsIG9wYXJnLCAtMSwKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodW5wYWNrX2l0ZXJhYmxlKHNlcSwgb3BhcmcsIC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciArIG9wYXJnKSkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKG9wYXJnKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogdW5wYWNrX2l0ZXJhYmxlKCkgcmFpc2VkIGFuIGV4Y2VwdGlvbiAqLwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOUEFDS19FWCkKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoVU5QQUNLX0VYKSB7CiAgICAgICAgICAgICBpbnQgdG90YWxhcmdzID0gMSArIChvcGFyZyAmIDB4RkYpICsgKG9wYXJnID4+IDgpOwotICAgICAgICAgICAgdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlcSA9IFBPUCgpOwogCi0gICAgICAgICAgICBpZiAodW5wYWNrX2l0ZXJhYmxlKHYsIG9wYXJnICYgMHhGRiwgb3BhcmcgPj4gOCwKKyAgICAgICAgICAgIGlmICh1bnBhY2tfaXRlcmFibGUoc2VxLCBvcGFyZyAmIDB4RkYsIG9wYXJnID4+IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKyB0b3RhbGFyZ3MpKSB7CiAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciArPSB0b3RhbGFyZ3M7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX0FUVFIpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgdSA9IFNFQ09ORCgpOworICAgICAgICBUQVJHRVQoU1RPUkVfQVRUUikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3duZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gU0VDT05EKCk7CisgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgU1RBQ0tBREooLTIpOwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0QXR0cih2LCB3LCB1KTsgLyogdi53ID0gdSAqLworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0QXR0cihvd25lciwgbmFtZSwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvd25lcik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX0FUVFIpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0QXR0cih2LCB3LCAoUHlPYmplY3QgKilOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVsIHYudyAqLworICAgICAgICBUQVJHRVQoREVMRVRFX0FUVFIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm93bmVyID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0QXR0cihvd25lciwgbmFtZSwgKFB5T2JqZWN0ICopTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3duZXIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKFNUT1JFX0dMT0JBTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9HTE9CQUwpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oZi0+Zl9nbG9iYWxzLCB3LCB2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChERUxFVEVfR0xPQkFMKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIGlmICgoZXJyID0gUHlEaWN0X0RlbEl0ZW0oZi0+Zl9nbG9iYWxzLCB3KSkgIT0gMCkKKyAgICAgICAgVEFSR0VUKERFTEVURV9HTE9CQUwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9EZWxJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKLSAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLCBHTE9CQUxfTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExPQURfTkFNRSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoKHYgPSBmLT5mX2xvY2FscykgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyB3aGVuIGxvYWRpbmcgJVIiLCB3KTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KHYpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5RGljdF9HZXRJdGVtKHYsIHcpOwotICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYoeCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExPQURfTkFNRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqbG9jYWxzID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBQeU9iamVjdCAqdjsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyB3aGVuIGxvYWRpbmcgJVIiLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGxvY2FscykpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X0dldEl0ZW0obG9jYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCAmJiBfUHlFcnJfT0NDVVJSRUQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19LZXlFcnJvcikpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwgJiYgX1B5RXJyX09DQ1VSUkVEKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHggPSBQeURpY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIHcpOwotICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYodik7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9idWlsdGlucykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeURpY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUFVTSCh2KTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoTE9BRF9HTE9CQUwpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICBUQVJHRVQoTE9BRF9HTE9CQUwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKnY7CiAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9nbG9iYWxzKQogICAgICAgICAgICAgICAgICYmIFB5RGljdF9DaGVja0V4YWN0KGYtPmZfYnVpbHRpbnMpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IF9QeURpY3RfTG9hZEdsb2JhbCgoUHlEaWN0T2JqZWN0ICopZi0+Zl9nbG9iYWxzLAorICAgICAgICAgICAgICAgIHYgPSBfUHlEaWN0X0xvYWRHbG9iYWwoKFB5RGljdE9iamVjdCAqKWYtPmZfZ2xvYmFscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeURpY3RPYmplY3QgKilmLT5mX2J1aWx0aW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIV9QeUVycl9PQ0NVUlJFRCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xPQkFMX05BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBTbG93LXBhdGggaWYgZ2xvYmFscyBvciBidWlsdGlucyBpcyBub3QgYSBkaWN0ICovCi0gICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCB3KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIHcpOwotICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMT0JBTF9OQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFBVU0godik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9GQVNUKQotICAgICAgICAgICAgeCA9IEdFVExPQ0FMKG9wYXJnKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKKyAgICAgICAgVEFSR0VUKERFTEVURV9GQVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IEdFVExPQ0FMKG9wYXJnKTsKKyAgICAgICAgICAgIGlmICh2ICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBTRVRMT0NBTChvcGFyZywgTlVMTCk7CiAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KQEAgLTIxNjIsMjUyICsyMjQyLDMxMiBAQAogICAgICAgICAgICAgICAgIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0csCiAgICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtKGNvLT5jb192YXJuYW1lcywgb3BhcmcpCiAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfREVSRUYpCi0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgaWYgKFB5Q2VsbF9HRVQoeCkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5Q2VsbF9TZXQoeCwgTlVMTCk7CisgICAgICAgIFRBUkdFVChERUxFVEVfREVSRUYpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgaWYgKFB5Q2VsbF9HRVQoY2VsbCkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5Q2VsbF9TZXQoY2VsbCwgTlVMTCk7CiAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IC0xOwogICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoTE9BRF9DTE9TVVJFKQotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExPQURfREVSRUYpCi0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgdyA9IFB5Q2VsbF9HZXQoeCk7Ci0gICAgICAgICAgICBpZiAodyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUFVTSCh3KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChTVE9SRV9ERVJFRikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICBQeUNlbGxfU2V0KHgsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICBUQVJHRVQoTE9BRF9DTE9TVVJFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihjZWxsKTsKKyAgICAgICAgICAgIFBVU0goY2VsbCk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJVSUxEX1RVUExFKQotICAgICAgICAgICAgeCA9IFB5VHVwbGVfTmV3KG9wYXJnKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgLS1vcGFyZyA+PSAwOykgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oeCwgb3BhcmcsIHcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIFRBUkdFVChMT0FEX0NMQVNTREVSRUYpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWUsICpsb2NhbHMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaWR4OworICAgICAgICAgICAgYXNzZXJ0KGxvY2Fscyk7CisgICAgICAgICAgICBhc3NlcnQob3BhcmcgPj0gUHlUdXBsZV9HRVRfU0laRShjby0+Y29fY2VsbHZhcnMpKTsKKyAgICAgICAgICAgIGlkeCA9IG9wYXJnIC0gUHlUdXBsZV9HRVRfU0laRShjby0+Y29fY2VsbHZhcnMpOworICAgICAgICAgICAgYXNzZXJ0KGlkeCA+PSAwICYmIGlkeCA8IFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2ZyZWV2YXJzKSk7CisgICAgICAgICAgICBuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShjby0+Y29fZnJlZXZhcnMsIGlkeCk7CisgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QobG9jYWxzKSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW0obG9jYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChCVUlMRF9MSVNUKQotICAgICAgICAgICAgeCA9ICBQeUxpc3RfTmV3KG9wYXJnKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgLS1vcGFyZyA+PSAwOykgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTSh4LCBvcGFyZywgdyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5T2JqZWN0X0dldEl0ZW0obG9jYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoQlVJTERfU0VUKQotICAgICAgICAgICAgeCA9IFB5U2V0X05ldyhOVUxMKTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKDsgLS1vcGFyZyA+PSAwOykgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZCh4LCB3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlDZWxsX0dFVChjZWxsKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlVJTERfTUFQKQotICAgICAgICAgICAgeCA9IF9QeURpY3RfTmV3UHJlc2l6ZWQoKFB5X3NzaXplX3Qpb3BhcmcpOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoU1RPUkVfTUFQKQotICAgICAgICAgICAgdyA9IFRPUCgpOyAgICAgLyoga2V5ICovCi0gICAgICAgICAgICB1ID0gU0VDT05EKCk7ICAvKiB2YWx1ZSAqLwotICAgICAgICAgICAgdiA9IFRISVJEKCk7ICAgLyogZGljdCAqLwotICAgICAgICAgICAgU1RBQ0tBREooLTIpOwotICAgICAgICAgICAgYXNzZXJ0IChQeURpY3RfQ2hlY2tFeGFjdCh2KSk7Ci0gICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbSh2LCB3LCB1KTsgIC8qIHZbd10gPSB1ICovCi0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTUFQX0FERCkKLSAgICAgICAgICAgIHcgPSBUT1AoKTsgICAgIC8qIGtleSAqLwotICAgICAgICAgICAgdSA9IFNFQ09ORCgpOyAgLyogdmFsdWUgKi8KLSAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKLSAgICAgICAgICAgIHYgPSBzdGFja19wb2ludGVyWy1vcGFyZ107ICAvKiBkaWN0ICovCi0gICAgICAgICAgICBhc3NlcnQgKFB5RGljdF9DaGVja0V4YWN0KHYpKTsKLSAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKHYsIHcsIHUpOyAgLyogdlt3XSA9IHUgKi8KLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgVEFSR0VUKExPQURfREVSRUYpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlDZWxsX0dFVChjZWxsKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0FUVFIpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEF0dHIodiwgdyk7CisgICAgICAgIFRBUkdFVChTVE9SRV9ERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgUHlDZWxsX1NldChjZWxsLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKENPTVBBUkVfT1ApCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gY21wX291dGNvbWUob3BhcmcsIHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIGJyZWFrOworICAgICAgICBUQVJHRVQoQlVJTERfVFVQTEUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXAgPSBQeVR1cGxlX05ldyhvcGFyZyk7CisgICAgICAgICAgICBpZiAodHVwID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHdoaWxlICgtLW9wYXJnID49IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCBvcGFyZywgaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKHR1cCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJVSUxEX0xJU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0ID0gIFB5TGlzdF9OZXcob3BhcmcpOworICAgICAgICAgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgd2hpbGUgKC0tb3BhcmcgPj0gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIG9wYXJnLCBpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0gobGlzdCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJVSUxEX1NFVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnNldCA9IFB5U2V0X05ldyhOVUxMKTsKKyAgICAgICAgICAgIGludCBlcnIgPSAwOworICAgICAgICAgICAgaWYgKHNldCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoLS1vcGFyZyA+PSAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyID09IDApCisgICAgICAgICAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZChzZXQsIGl0ZW0pOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXQpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKHNldCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJVSUxEX01BUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm1hcCA9IF9QeURpY3RfTmV3UHJlc2l6ZWQoKFB5X3NzaXplX3Qpb3BhcmcpOworICAgICAgICAgICAgaWYgKG1hcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQVVNIKG1hcCk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKFNUT1JFX01BUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbWFwID0gVEhJUkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBTVEFDS0FESigtMik7CisgICAgICAgICAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QobWFwKSk7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShtYXAsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKE1BUF9BREQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm1hcDsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBTVEFDS0FESigtMik7CisgICAgICAgICAgICBtYXAgPSBzdGFja19wb2ludGVyWy1vcGFyZ107ICAvKiBkaWN0ICovCisgICAgICAgICAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QobWFwKSk7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShtYXAsIGtleSwgdmFsdWUpOyAgLyogdlt3XSA9IHUgKi8KKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTE9BRF9BVFRSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvd25lciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X0dldEF0dHIob3duZXIsIG5hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKG93bmVyKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChDT01QQVJFX09QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gY21wX291dGNvbWUob3BhcmcsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIFBSRURJQ1QoUE9QX0pVTVBfSUZfRkFMU0UpOwogICAgICAgICAgICAgUFJFRElDVChQT1BfSlVNUF9JRl9UUlVFKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0KLSAgICAgICAgVEFSR0VUKElNUE9SVF9OQU1FKQotICAgICAgICB7Ci0gICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2ltcG9ydF9fKTsKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB4ID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19pbXBvcnRfXyk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19pbXBvcnRfXyBub3QgZm91bmQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIHUgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeUxvbmdfQXNMb25nKHUpICE9IC0xIHx8IFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgdyA9IFB5VHVwbGVfUGFjayg1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHcgPSBQeVR1cGxlX1BhY2soNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAodyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdSA9IFBPUCgpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIHYgPSB4OwotICAgICAgICAgICAgeCA9IFB5RXZhbF9DYWxsT2JqZWN0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTVBPUlRfU1RBUikKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGYpOwotICAgICAgICAgICAgaWYgKCh4ID0gZi0+Zl9sb2NhbHMpID09IE5VTEwpIHsKKyAgICAgICAgVEFSR0VUKElNUE9SVF9OQU1FKSB7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2ltcG9ydF9fKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2ltcG9ydF9fKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmcm9tLCAqbGV2ZWwsICphcmdzLCAqcmVzOworICAgICAgICAgICAgaWYgKGZ1bmMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9faW1wb3J0X18gbm90IGZvdW5kIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0lOQ1JFRihmdW5jKTsKKyAgICAgICAgICAgIGZyb20gPSBQT1AoKTsKKyAgICAgICAgICAgIGxldmVsID0gVE9QKCk7CisgICAgICAgICAgICBpZiAoUHlMb25nX0FzTG9uZyhsZXZlbCkgIT0gLTEgfHwgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBsZV9QYWNrKDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGV2ZWwpOworICAgICAgICAgICAgUHlfREVDUkVGKGZyb20pOworICAgICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKKyAgICAgICAgICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIGFyZ3MpOworICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOworICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKElNUE9SVF9TVEFSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZnJvbSA9IFBPUCgpLCAqbG9jYWxzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgZm91bmQgZHVyaW5nICdpbXBvcnQgKiciKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgZXJyID0gaW1wb3J0X2FsbF9mcm9tKHgsIHYpOworICAgICAgICAgICAgZXJyID0gaW1wb3J0X2FsbF9mcm9tKGxvY2FscywgZnJvbSk7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7CiAgICAgICAgICAgICBQeUZyYW1lX0xvY2Fsc1RvRmFzdChmLCAwKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKGZyb20pOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElNUE9SVF9GUk9NKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKKyAgICAgICAgVEFSR0VUKElNUE9SVF9GUk9NKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmcm9tID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgeCA9IGltcG9ydF9mcm9tKHYsIHcpOworICAgICAgICAgICAgcmVzID0gaW1wb3J0X2Zyb20oZnJvbSwgbmFtZSk7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEpVTVBfRk9SV0FSRCkKKyAgICAgICAgVEFSR0VUKEpVTVBfRk9SV0FSRCkgewogICAgICAgICAgICAgSlVNUEJZKG9wYXJnKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhQT1BfSlVNUF9JRl9GQUxTRSk7Ci0gICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9GQUxTRSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9GQUxTRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhQT1BfSlVNUF9JRl9UUlVFKTsKLSAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX1RSVUUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX1RSVUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKQEAgLTI0MTUsNTggKzI1NTUsNjMgQEAKICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQogICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChKVU1QX0lGX0ZBTFNFX09SX1BPUCkKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKKyAgICAgICAgVEFSR0VUKEpVTVBfSUZfRkFMU0VfT1JfUE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgeworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfRmFsc2UpIHsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSlVNUF9JRl9UUlVFX09SX1BPUCkKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7CisgICAgICAgIFRBUkdFVChKVU1QX0lGX1RSVUVfT1JfUE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgewogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKEpVTVBfQUJTT0xVVEUpOwotICAgICAgICBUQVJHRVQoSlVNUF9BQlNPTFVURSkKKyAgICAgICAgVEFSR0VUKEpVTVBfQUJTT0xVVEUpIHsKICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAjaWYgRkFTVF9MT09QUwogICAgICAgICAgICAgLyogRW5hYmxpbmcgdGhpcyBwYXRoIHNwZWVkcy11cCBhbGwgd2hpbGUgYW5kIGZvci1sb29wcyBieSBieXBhc3NpbmcKQEAgLTI0ODAsNjAgKzI2MjUsNjAgQEAKICNlbHNlCiAgICAgICAgICAgICBESVNQQVRDSCgpOwogI2VuZGlmCisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoR0VUX0lURVIpCisgICAgICAgIFRBUkdFVChHRVRfSVRFUikgewogICAgICAgICAgICAgLyogYmVmb3JlOiBbb2JqXTsgYWZ0ZXIgW2dldGl0ZXIob2JqKV0gKi8KLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVyKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChGT1JfSVRFUik7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXJhYmxlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGUpOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXJhYmxlKTsKKyAgICAgICAgICAgIFNFVF9UT1AoaXRlcik7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEZPUl9JVEVSKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoRk9SX0lURVIpOwotICAgICAgICBUQVJHRVQoRk9SX0lURVIpCisgICAgICAgIFRBUkdFVChGT1JfSVRFUikgewogICAgICAgICAgICAgLyogYmVmb3JlOiBbaXRlcl07IGFmdGVyOiBbaXRlciwgaXRlcigpXSAqb3IqIFtdICovCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gKCp2LT5vYl90eXBlLT50cF9pdGVybmV4dCkodik7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbmV4dCA9ICgqaXRlci0+b2JfdHlwZS0+dHBfaXRlcm5leHQpKGl0ZXIpOworICAgICAgICAgICAgaWYgKG5leHQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFBVU0gobmV4dCk7CiAgICAgICAgICAgICAgICAgUFJFRElDVChTVE9SRV9GQVNUKTsKICAgICAgICAgICAgICAgICBQUkVESUNUKFVOUEFDS19TRVFVRU5DRSk7CiAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19TdG9wSXRlcmF0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N0b3BJdGVyYXRpb24pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBpdGVyYXRvciBlbmRlZCBub3JtYWxseSAqLwotICAgICAgICAgICAgeCA9IHYgPSBQT1AoKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKICAgICAgICAgICAgIEpVTVBCWShvcGFyZyk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJSRUFLX0xPT1ApCisgICAgICAgIFRBUkdFVChCUkVBS19MT09QKSB7CiAgICAgICAgICAgICB3aHkgPSBXSFlfQlJFQUs7CiAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKENPTlRJTlVFX0xPT1ApCisgICAgICAgIFRBUkdFVChDT05USU5VRV9MT09QKSB7CiAgICAgICAgICAgICByZXR2YWwgPSBQeUxvbmdfRnJvbUxvbmcob3BhcmcpOwotICAgICAgICAgICAgaWYgKCFyZXR2YWwpIHsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgd2h5ID0gV0hZX0NPTlRJTlVFOwogICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgfQogCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoU0VUVVBfTE9PUCwgX3NldHVwX2ZpbmFsbHkpCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoU0VUVVBfRVhDRVBULCBfc2V0dXBfZmluYWxseSkKICAgICAgICAgVEFSR0VUKFNFVFVQX0ZJTkFMTFkpCi0gICAgICAgIF9zZXR1cF9maW5hbGx5OgorICAgICAgICBfc2V0dXBfZmluYWxseTogewogICAgICAgICAgICAgLyogTk9URTogSWYgeW91IGFkZCBhbnkgbmV3IGJsb2NrLXNldHVwIG9wY29kZXMgdGhhdAogICAgICAgICAgICAgICAgYXJlIG5vdCB0cnkvZXhjZXB0L2ZpbmFsbHkgaGFuZGxlcnMsIHlvdSBtYXkgbmVlZAogICAgICAgICAgICAgICAgdG8gdXBkYXRlIHRoZSBQeUdlbl9OZWVkc0ZpbmFsaXppbmcoKSBmdW5jdGlvbi4KQEAgLTI1NDIsMzcgKzI2ODcsMzUgQEAKICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cChmLCBvcGNvZGUsIElOU1RSX09GRlNFVCgpICsgb3BhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfTEVWRUwoKSk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNFVFVQX1dJVEgpCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKFNFVFVQX1dJVEgpIHsKICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZXhpdF9fKTsKICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZW50ZXJfXyk7Ci0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gc3BlY2lhbF9sb29rdXAodywgJlB5SWRfX19leGl0X18pOwotICAgICAgICAgICAgaWYgKCF4KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIHUgPSBzcGVjaWFsX2xvb2t1cCh3LCAmUHlJZF9fX2VudGVyX18pOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKCF1KSB7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyh1LCBOVUxMKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmICgheCkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptZ3IgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGl0ID0gc3BlY2lhbF9sb29rdXAobWdyLCAmUHlJZF9fX2V4aXRfXyksICplbnRlcjsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgICAgICBpZiAoZXhpdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBTRVRfVE9QKGV4aXQpOworICAgICAgICAgICAgZW50ZXIgPSBzcGVjaWFsX2xvb2t1cChtZ3IsICZQeUlkX19fZW50ZXJfXyk7CisgICAgICAgICAgICBQeV9ERUNSRUYobWdyKTsKKyAgICAgICAgICAgIGlmIChlbnRlciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGVudGVyLCBOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRlcik7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIC8qIFNldHVwIHRoZSBmaW5hbGx5IGJsb2NrIGJlZm9yZSBwdXNoaW5nIHRoZSByZXN1bHQKICAgICAgICAgICAgICAgIG9mIF9fZW50ZXJfXyBvbiB0aGUgc3RhY2suICovCiAgICAgICAgICAgICBQeUZyYW1lX0Jsb2NrU2V0dXAoZiwgU0VUVVBfRklOQUxMWSwgSU5TVFJfT0ZGU0VUKCkgKyBvcGFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFDS19MRVZFTCgpKTsKIAotICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoV0lUSF9DTEVBTlVQKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChXSVRIX0NMRUFOVVApIHsKICAgICAgICAgICAgIC8qIEF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGFyZSAxLTYgdmFsdWVzIGluZGljYXRpbmcKICAgICAgICAgICAgICAgIGhvdy93aHkgd2UgZW50ZXJlZCB0aGUgZmluYWxseSBjbGF1c2U6CiAgICAgICAgICAgICAgICAtIFRPUCA9IE5vbmUKQEAgLTI1OTksNDIgKzI3NDIsNDIgQEAKICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIFB5T2JqZWN0ICpleGl0X2Z1bmM7Ci0gICAgICAgICAgICB1ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAodSA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhjID0gVE9QKCksICp2YWwgPSBQeV9Ob25lLCAqdGIgPSBQeV9Ob25lLCAqcmVzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChleGMgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgICh2b2lkKVBPUCgpOwogICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFRPUCgpOwotICAgICAgICAgICAgICAgIFNFVF9UT1AodSk7Ci0gICAgICAgICAgICAgICAgdiA9IHcgPSBQeV9Ob25lOworICAgICAgICAgICAgICAgIFNFVF9UT1AoZXhjKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayh1KSkgewotICAgICAgICAgICAgICAgICh2b2lkKVBPUCgpOwotICAgICAgICAgICAgICAgIHN3aXRjaChQeUxvbmdfQXNMb25nKHUpKSB7CisgICAgICAgICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2soZXhjKSkgeworICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKFB5TG9uZ19Bc0xvbmcoZXhjKSkgewogICAgICAgICAgICAgICAgIGNhc2UgV0hZX1JFVFVSTjoKICAgICAgICAgICAgICAgICBjYXNlIFdIWV9DT05USU5VRToKICAgICAgICAgICAgICAgICAgICAgLyogUmV0dmFsIGluIFRPUC4gKi8KICAgICAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gU0VDT05EKCk7CiAgICAgICAgICAgICAgICAgICAgIFNFVF9TRUNPTkQoVE9QKCkpOwotICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKHUpOworICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKGV4Yyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFRPUCgpOwotICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKHUpOworICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKGV4Yyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB1ID0gdiA9IHcgPSBQeV9Ob25lOworICAgICAgICAgICAgICAgIGV4YyA9IFB5X05vbmU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqdHAsICpleGMsICp0YjsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqdHAyLCAqZXhjMiwgKnRiMjsKICAgICAgICAgICAgICAgICBQeVRyeUJsb2NrICpibG9jazsKLSAgICAgICAgICAgICAgICB2ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICAgICAgdyA9IFRISVJEKCk7Ci0gICAgICAgICAgICAgICAgdHAgPSBGT1VSVEgoKTsKLSAgICAgICAgICAgICAgICBleGMgPSBQRUVLKDUpOwotICAgICAgICAgICAgICAgIHRiID0gUEVFSyg2KTsKKyAgICAgICAgICAgICAgICB2YWwgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgICAgICB0YiA9IFRISVJEKCk7CisgICAgICAgICAgICAgICAgdHAyID0gRk9VUlRIKCk7CisgICAgICAgICAgICAgICAgZXhjMiA9IFBFRUsoNSk7CisgICAgICAgICAgICAgICAgdGIyID0gUEVFSyg2KTsKICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBQRUVLKDcpOwotICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg3LCB0Yik7Ci0gICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDYsIGV4Yyk7Ci0gICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDUsIHRwKTsKKyAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNywgdGIyKTsKKyAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNiwgZXhjMik7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDUsIHRwMik7CiAgICAgICAgICAgICAgICAgLyogVU5XSU5EX0VYQ0VQVF9IQU5ETEVSIHdpbGwgcG9wIHRoaXMgb2ZmLiAqLwogICAgICAgICAgICAgICAgIFNFVF9GT1VSVEgoTlVMTCk7CiAgICAgICAgICAgICAgICAgLyogV2UganVzdCBzaGlmdGVkIHRoZSBzdGFjayBkb3duLCBzbyB3ZSBoYXZlCkBAIC0yNjQ1LDU2ICsyNzg4LDUzIEBACiAgICAgICAgICAgICAgICAgYmxvY2stPmJfbGV2ZWwtLTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIFhYWCBOb3QgdGhlIGZhc3Rlc3Qgd2F5IHRvIGNhbGwgaXQuLi4gKi8KLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGV4aXRfZnVuYywgdSwgdiwgdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhleGl0X2Z1bmMsIGV4YywgdmFsLCB0YiwgTlVMTCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZXhpdF9mdW5jKTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7IC8qIEdvIHRvIGVycm9yIGV4aXQgKi8KKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgICAgICBpZiAodSAhPSBQeV9Ob25lKQotICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh4KTsKKyAgICAgICAgICAgIGlmIChleGMgIT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICAgICAgUHlfREVDUkVGKHgpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAKICAgICAgICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBHbyB0byBlcnJvciBleGl0ICovCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgICAgIC8qIFRoZXJlIHdhcyBhbiBleGNlcHRpb24gYW5kIGEgVHJ1ZSByZXR1cm4gKi8KICAgICAgICAgICAgICAgICBQVVNIKFB5TG9uZ19Gcm9tTG9uZygobG9uZykgV0hZX1NJTEVOQ0VEKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQUkVESUNUKEVORF9GSU5BTExZKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChDQUxMX0ZVTkNUSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqKnNwOworICAgICAgICBUQVJHRVQoQ0FMTF9GVU5DVElPTikgeworICAgICAgICAgICAgUHlPYmplY3QgKipzcCwgKnJlczsKICAgICAgICAgICAgIFBDQUxMKFBDQUxMX0FMTCk7CiAgICAgICAgICAgICBzcCA9IHN0YWNrX3BvaW50ZXI7CiAjaWZkZWYgV0lUSF9UU0MKLSAgICAgICAgICAgIHggPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcsICZpbnRyMCwgJmludHIxKTsKKyAgICAgICAgICAgIHJlcyA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZywgJmludHIwLCAmaW50cjEpOwogI2Vsc2UKLSAgICAgICAgICAgIHggPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcpOworICAgICAgICAgICAgcmVzID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnKTsKICNlbmRpZgogICAgICAgICAgICAgc3RhY2tfcG9pbnRlciA9IHNwOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChDQUxMX0ZVTkNUSU9OX1ZBUiwgX2NhbGxfZnVuY3Rpb25fdmFyX2t3KQogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKENBTExfRlVOQ1RJT05fS1csIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdykKICAgICAgICAgVEFSR0VUKENBTExfRlVOQ1RJT05fVkFSX0tXKQotICAgICAgICBfY2FsbF9mdW5jdGlvbl92YXJfa3c6Ci0gICAgICAgIHsKKyAgICAgICAgX2NhbGxfZnVuY3Rpb25fdmFyX2t3OiB7CiAgICAgICAgICAgICBpbnQgbmEgPSBvcGFyZyAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQgbmsgPSAob3Bhcmc+PjgpICYgMHhmZjsKICAgICAgICAgICAgIGludCBmbGFncyA9IChvcGNvZGUgLSBDQUxMX0ZVTkNUSU9OKSAmIDM7CiAgICAgICAgICAgICBpbnQgbiA9IG5hICsgMiAqIG5rOwotICAgICAgICAgICAgUHlPYmplY3QgKipwZnVuYywgKmZ1bmMsICoqc3A7CisgICAgICAgICAgICBQeU9iamVjdCAqKnBmdW5jLCAqZnVuYywgKipzcCwgKnJlczsKICAgICAgICAgICAgIFBDQUxMKFBDQUxMX0FMTCk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBDQUxMX0ZMQUdfVkFSKQogICAgICAgICAgICAgICAgIG4rKzsKQEAgLTI3MTcsMTM3ICsyODU3LDE1NiBAQAogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihmdW5jKTsKICAgICAgICAgICAgIHNwID0gc3RhY2tfcG9pbnRlcjsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIHggPSBleHRfZG9fY2FsbChmdW5jLCAmc3AsIGZsYWdzLCBuYSwgbmspOworICAgICAgICAgICAgcmVzID0gZXh0X2RvX2NhbGwoZnVuYywgJnNwLCBmbGFncywgbmEsIG5rKTsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgPSBzcDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKIAogICAgICAgICAgICAgd2hpbGUgKHN0YWNrX3BvaW50ZXIgPiBwZnVuYykgewotICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm8gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKE1BS0VfQ0xPU1VSRSwgX21ha2VfZnVuY3Rpb24pCiAgICAgICAgIFRBUkdFVChNQUtFX0ZVTkNUSU9OKQotICAgICAgICBfbWFrZV9mdW5jdGlvbjoKLSAgICAgICAgeworICAgICAgICBfbWFrZV9mdW5jdGlvbjogewogICAgICAgICAgICAgaW50IHBvc2RlZmF1bHRzID0gb3BhcmcgJiAweGZmOwogICAgICAgICAgICAgaW50IGt3ZGVmYXVsdHMgPSAob3Bhcmc+PjgpICYgMHhmZjsKICAgICAgICAgICAgIGludCBudW1fYW5ub3RhdGlvbnMgPSAob3BhcmcgPj4gMTYpICYgMHg3ZmZmOwogCi0gICAgICAgICAgICB3ID0gUE9QKCk7IC8qIHF1YWxuYW1lICovCi0gICAgICAgICAgICB2ID0gUE9QKCk7IC8qIGNvZGUgb2JqZWN0ICovCi0gICAgICAgICAgICB4ID0gUHlGdW5jdGlvbl9OZXdXaXRoUXVhbE5hbWUodiwgZi0+Zl9nbG9iYWxzLCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdWFsbmFtZSA9IFBPUCgpOyAvKiBxdWFsbmFtZSAqLworICAgICAgICAgICAgUHlPYmplY3QgKmNvZGUgPSBQT1AoKTsgLyogY29kZSBvYmplY3QgKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gUHlGdW5jdGlvbl9OZXdXaXRoUXVhbE5hbWUoY29kZSwgZi0+Zl9nbG9iYWxzLCBxdWFsbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29kZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocXVhbG5hbWUpOwogCi0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIG9wY29kZSA9PSBNQUtFX0NMT1NVUkUpIHsKLSAgICAgICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0Q2xvc3VyZSh4LCB2KSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gTUFLRV9DTE9TVVJFKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNsb3N1cmUgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRDbG9zdXJlKGZ1bmMsIGNsb3N1cmUpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcyBieXRlY29kZSBpcyBjb3JydXB0LiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjbG9zdXJlKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjbG9zdXJlKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCAmJiBudW1fYW5ub3RhdGlvbnMgPiAwKSB7CisgICAgICAgICAgICBpZiAobnVtX2Fubm90YXRpb25zID4gMCkgewogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbmFtZV9peDsKLSAgICAgICAgICAgICAgICB1ID0gUE9QKCk7IC8qIG5hbWVzIG9mIGFyZ3Mgd2l0aCBhbm5vdGF0aW9ucyAqLwotICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZXMgPSBQT1AoKTsgLyogbmFtZXMgb2YgYXJncyB3aXRoIGFubm90YXRpb25zICovCisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFubnMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICAgICAgaWYgKGFubnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5hbWVfaXggPSBQeVR1cGxlX1NpemUodSk7CisgICAgICAgICAgICAgICAgbmFtZV9peCA9IFB5VHVwbGVfU2l6ZShuYW1lcyk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG51bV9hbm5vdGF0aW9ucyA9PSBuYW1lX2l4KzEpOwogICAgICAgICAgICAgICAgIHdoaWxlIChuYW1lX2l4ID4gMCkgeworICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlOworICAgICAgICAgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgICAgICAgICAtLW5hbWVfaXg7Ci0gICAgICAgICAgICAgICAgICAgIHQgPSBQeVR1cGxlX0dFVF9JVEVNKHUsIG5hbWVfaXgpOwotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFhYWChubm9yd2l0eik6IGNoZWNrIGZvciBlcnJvcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0odiwgdCwgdyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0obmFtZXMsIG5hbWVfaXgpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShhbm5zLCBuYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFubnMpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEFubm90YXRpb25zKHgsIHYpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9ucyhmdW5jLCBhbm5zKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKICAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9ucyBjaGFuZ2VzLiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYW5ucyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYW5ucyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5hbWVzKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogWFhYIE1heWJlIHRoaXMgc2hvdWxkIGJlIGEgc2VwYXJhdGUgb3Bjb2RlPyAqLwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCAmJiBwb3NkZWZhdWx0cyA+IDApIHsKLSAgICAgICAgICAgICAgICB2ID0gUHlUdXBsZV9OZXcocG9zZGVmYXVsdHMpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdoaWxlICgtLXBvc2RlZmF1bHRzID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHYsIHBvc2RlZmF1bHRzLCB3KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMoeCwgdikgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCi0gICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMgY2hhbmdlcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCAmJiBrd2RlZmF1bHRzID4gMCkgewotICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChrd2RlZmF1bHRzID4gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWZzID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgICAgIGlmIChkZWZzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB3aGlsZSAoLS1rd2RlZmF1bHRzID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOyAvKiBkZWZhdWx0IHZhbHVlICovCi0gICAgICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsgLyoga3cgb25seSBhcmcgbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAvKiBYWFgobm5vcndpdHopOiBjaGVjayBmb3IgZXJyb3JzICovCi0gICAgICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHYsIHUsIHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsgLyogZGVmYXVsdCB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gUE9QKCk7IC8qIGt3IG9ubHkgYXJnIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgaW50IGVyciA9IFB5RGljdF9TZXRJdGVtKGRlZnMsIGtleSwgdik7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRLd0RlZmF1bHRzKHgsIHYpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRLd0RlZmF1bHRzKGZ1bmMsIGRlZnMpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcwogICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldEt3RGVmYXVsdHMgY2hhbmdlcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAocG9zZGVmYXVsdHMgPiAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZnMgPSBQeVR1cGxlX05ldyhwb3NkZWZhdWx0cyk7CisgICAgICAgICAgICAgICAgaWYgKGRlZnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlICgtLXBvc2RlZmF1bHRzID49IDApCisgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oZGVmcywgcG9zZGVmYXVsdHMsIFBPUCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXREZWZhdWx0cyhmdW5jLCBkZWZzKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXREZWZhdWx0cyBjaGFuZ2VzLiAqLworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSChmdW5jKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlVJTERfU0xJQ0UpCisgICAgICAgIFRBUkdFVChCVUlMRF9TTElDRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnN0YXJ0LCAqc3RvcCwgKnN0ZXAsICpzbGljZTsKICAgICAgICAgICAgIGlmIChvcGFyZyA9PSAzKQotICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBzdGVwID0gUE9QKCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdyA9IE5VTEw7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICB1ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlTbGljZV9OZXcodSwgdiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBzdGVwID0gTlVMTDsKKyAgICAgICAgICAgIHN0b3AgPSBQT1AoKTsKKyAgICAgICAgICAgIHN0YXJ0ID0gVE9QKCk7CisgICAgICAgICAgICBzbGljZSA9IFB5U2xpY2VfTmV3KHN0YXJ0LCBzdG9wLCBzdGVwKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICBQeV9YREVDUkVGKHN0ZXApOworICAgICAgICAgICAgU0VUX1RPUChzbGljZSk7CisgICAgICAgICAgICBpZiAoc2xpY2UgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChFWFRFTkRFRF9BUkcpCisgICAgICAgIFRBUkdFVChFWFRFTkRFRF9BUkcpIHsKICAgICAgICAgICAgIG9wY29kZSA9IE5FWFRPUCgpOwogICAgICAgICAgICAgb3BhcmcgPSBvcGFyZzw8MTYgfCBORVhUQVJHKCk7CiAgICAgICAgICAgICBnb3RvIGRpc3BhdGNoX29wY29kZTsKKyAgICAgICAgfQogCiAjaWYgVVNFX0NPTVBVVEVEX0dPVE9TCiAgICAgICAgIF91bmtub3duX29wY29kZToKQEAgLTI4NTgsOCArMzAxNyw3IEBACiAgICAgICAgICAgICAgICAgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKGYpLAogICAgICAgICAgICAgICAgIG9wY29kZSk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJ1bmtub3duIG9wY29kZSIpOwotICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKIAogI2lmZGVmIENBU0VfVE9PX0JJRwogICAgICAgICB9CkBAIC0yODY3LDcxICszMDI1LDM1IEBACiAKICAgICAgICAgfSAvKiBzd2l0Y2ggKi8KIAotICAgICAgICBvbl9lcnJvcjoKKyAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZC4gRXZlcnkgb3Bjb2RlIHNob3VsZCBlbmQgd2l0aCBESVNQQVRDSCgpCisgICAgICAgICAgIG9yIGdvdG8gZXJyb3IuICovCisgICAgICAgIGFzc2VydCgwKTsKIAorZXJyb3I6CiAgICAgICAgIFJFQURfVElNRVNUQU1QKGluc3QxKTsKIAotICAgICAgICAvKiBRdWlja2x5IGNvbnRpbnVlIGlmIG5vIGVycm9yIG9jY3VycmVkICovCisgICAgICAgIGFzc2VydCh3aHkgPT0gV0hZX05PVCk7CisgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CiAKLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfTk9UKSB7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDAgJiYgeCAhPSBOVUxMKSB7Ci0jaWZkZWYgQ0hFQ0tFWEMKLSAgICAgICAgICAgICAgICAvKiBUaGlzIGNoZWNrIGlzIGV4cGVuc2l2ZSEgKi8KLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiWFhYIHVuZGV0ZWN0ZWQgZXJyb3JcbiIpOwotICAgICAgICAgICAgICAgIGVsc2UgewotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGxvb3AxKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIE5vcm1hbCwgZmFzdCBwYXRoICovCi0jaWZkZWYgQ0hFQ0tFWEMKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICB4ID0gUHlfTm9uZTsKLSAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBEb3VibGUtY2hlY2sgZXhjZXB0aW9uIHN0YXR1cyAqLwotCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX0VYQ0VQVElPTiB8fCB3aHkgPT0gV0hZX1JFUkFJU0UpIHsKLSAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImVycm9yIHJldHVybiB3aXRob3V0IGV4Y2VwdGlvbiBzZXQiKTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jaWZkZWYgQ0hFQ0tFWEMKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBUaGlzIGNoZWNrIGlzIGV4cGVuc2l2ZSEgKi8KLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBidWZbMTI4XTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIlN0YWNrIHVud2luZCB3aXRoIGV4Y2VwdGlvbiAiCi0gICAgICAgICAgICAgICAgICAgICJzZXQgYW5kIHdoeT0lZCIsIHdoeSk7Ci0gICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcihidWYpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIC8qIERvdWJsZS1jaGVjayBleGNlcHRpb24gc3RhdHVzLiAqLworI2lmZGVmIE5ERUJVRworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHJldHVybiB3aXRob3V0IGV4Y2VwdGlvbiBzZXQiKTsKKyNlbHNlCisgICAgICAgIGFzc2VydChQeUVycl9PY2N1cnJlZCgpKTsKICNlbmRpZgogCi0gICAgICAgIC8qIExvZyB0cmFjZWJhY2sgaW5mbyBpZiB0aGlzIGlzIGEgcmVhbCBleGNlcHRpb24gKi8KKyAgICAgICAgLyogTG9nIHRyYWNlYmFjayBpbmZvLiAqLworICAgICAgICBQeVRyYWNlQmFja19IZXJlKGYpOwogCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX0VYQ0VQVElPTikgewotICAgICAgICAgICAgUHlUcmFjZUJhY2tfSGVyZShmKTsKLQotICAgICAgICAgICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwgZik7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBGb3IgdGhlIHJlc3QsIHRyZWF0IFdIWV9SRVJBSVNFIGFzIFdIWV9FWENFUFRJT04gKi8KLQotICAgICAgICBpZiAod2h5ID09IFdIWV9SRVJBSVNFKQotICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLQotICAgICAgICAvKiBVbndpbmQgc3RhY2tzIGlmIGEgKHBzZXVkbykgZXhjZXB0aW9uIG9jY3VycmVkICovCisgICAgICAgIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwpCisgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosIGYpOwogCiBmYXN0X2Jsb2NrX2VuZDoKKyAgICAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfTk9UKTsKKworICAgICAgICAvKiBVbndpbmQgc3RhY2tzIGlmIGEgKHBzZXVkbykgZXhjZXB0aW9uIG9jY3VycmVkICovCiAgICAgICAgIHdoaWxlICh3aHkgIT0gV0hZX05PVCAmJiBmLT5mX2libG9jayA+IDApIHsKICAgICAgICAgICAgIC8qIFBlZWsgYXQgdGhlIGN1cnJlbnQgYmxvY2suICovCiAgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gJmYtPmZfYmxvY2tzdGFja1tmLT5mX2libG9jayAtIDFdOwpAQCAtMjk3OCw3ICszMTAwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgUHl0aG9uIG1haW4gbG9vcC4gKi8KICAgICAgICAgICAgICAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICZleGMsICZ2YWwsICZ0Yik7Ci0gICAgICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgdGIpOworICAgICAgICAgICAgICAgIGlmICh0YiAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCBQeV9Ob25lKTsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZXhjKTsKICAgICAgICAgICAgICAgICB0c3RhdGUtPmV4Y190eXBlID0gZXhjOwogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWwpOwpAQCAtMzAxMCwxOCArMzEzNSwyMyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIFJFQURfVElNRVNUQU1QKGxvb3AxKTsKIAorICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworCiAgICAgfSAvKiBtYWluIGxvb3AgKi8KIAogICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEKTsKICAgICAvKiBQb3AgcmVtYWluaW5nIHN0YWNrIGVudHJpZXMuICovCiAgICAgd2hpbGUgKCFFTVBUWSgpKSB7Ci0gICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgUHlfWERFQ1JFRih2KTsKKyAgICAgICAgUHlPYmplY3QgKm8gPSBQT1AoKTsKKyAgICAgICAgUHlfWERFQ1JFRihvKTsKICAgICB9CiAKICAgICBpZiAod2h5ICE9IFdIWV9SRVRVUk4pCiAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAKKyAgICBhc3NlcnQoKHJldHZhbCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgfHwgKHJldHZhbCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKKwogZmFzdF95aWVsZDoKICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SICYmICh3aHkgPT0gV0hZX1lJRUxEIHx8IHdoeSA9PSBXSFlfUkVUVVJOKSkgewogICAgICAgICAvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGJsb2NrIGlzIHRvIHB1dCBhc2lkZSB0aGUgZ2VuZXJhdG9yJ3MgZXhjZXB0aW9uCkBAIC0zMDc4LDYgKzMyMDgsNyBAQAogICAgIC8qIHBvcCBmcmFtZSAqLwogZXhpdF9ldmFsX2ZyYW1lOgogICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworICAgIGYtPmZfZXhlY3V0aW5nID0gMDsKICAgICB0c3RhdGUtPmZyYW1lID0gZi0+Zl9iYWNrOwogCiAgICAgcmV0dXJuIHJldHZhbDsKQEAgLTMyNDMsOSArMzM3NCw5IEBACiAgICAgICAgICAgIFB5T2JqZWN0ICoqZGVmcywgaW50IGRlZmNvdW50LCBQeU9iamVjdCAqa3dkZWZzLCBQeU9iamVjdCAqY2xvc3VyZSkKIHsKICAgICBQeUNvZGVPYmplY3QqIGNvID0gKFB5Q29kZU9iamVjdCopX2NvOwotICAgIHJlZ2lzdGVyIFB5RnJhbWVPYmplY3QgKmY7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOworICAgIFB5RnJhbWVPYmplY3QgKmY7CisgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7CisgICAgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAgICAgUHlPYmplY3QgKngsICp1OwogICAgIGludCB0b3RhbF9hcmdzID0gY28tPmNvX2FyZ2NvdW50ICsgY28tPmNvX2t3b25seWFyZ2NvdW50OwpAQCAtMzUyMiw3ICszNjUzLDcgQEAKIAogLyogTG9naWMgZm9yIHRoZSByYWlzZSBzdGF0ZW1lbnQgKHRvbyBjb21wbGljYXRlZCBmb3IgaW5saW5pbmcpLgogICAgVGhpcyAqY29uc3VtZXMqIGEgcmVmZXJlbmNlIGNvdW50IHRvIGVhY2ggb2YgaXRzIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyBlbnVtIHdoeV9jb2RlCitzdGF0aWMgaW50CiBkb19yYWlzZShQeU9iamVjdCAqZXhjLCBQeU9iamVjdCAqY2F1c2UpCiB7CiAgICAgUHlPYmplY3QgKnR5cGUgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOwpAQCAtMzUzNywxMyArMzY2OCwxMyBAQAogICAgICAgICBpZiAodHlwZSA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBhY3RpdmUgZXhjZXB0aW9uIHRvIHJlcmFpc2UiKTsKLSAgICAgICAgICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgUHlfWElOQ1JFRih0eXBlKTsKICAgICAgICAgUHlfWElOQ1JFRih2YWx1ZSk7CiAgICAgICAgIFB5X1hJTkNSRUYodGIpOwogICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0Yik7Ci0gICAgICAgIHJldHVybiBXSFlfUkVSQUlTRTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCiAgICAgLyogV2Ugc3VwcG9ydCB0aGUgZm9sbG93aW5nIGZvcm1zIG9mIHJhaXNlOgpAQCAtMzYwNiwxMyArMzczNywxMyBAQAogICAgIC8qIFB5RXJyX1NldE9iamVjdCBpbmNyZWYncyBpdHMgYXJndW1lbnRzICovCiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgUHlfWERFQ1JFRih0eXBlKTsKLSAgICByZXR1cm4gV0hZX0VYQ0VQVElPTjsKKyAgICByZXR1cm4gMDsKIAogcmFpc2VfZXJyb3I6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgUHlfWERFQ1JFRih0eXBlKTsKICAgICBQeV9YREVDUkVGKGNhdXNlKTsKLSAgICByZXR1cm4gV0hZX0VYQ0VQVElPTjsKKyAgICByZXR1cm4gMDsKIH0KIAogLyogSXRlcmF0ZSB2IGFyZ2NudCB0aW1lcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgb24gdGhlIHN0YWNrICh2aWEgZGVjcmVhc2luZwpAQCAtMzcxMSw3ICszODQyLDcgQEAKIHN0YXRpYyB2b2lkCiBjYWxsX2V4Y190cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKnNlbGYsIFB5RnJhbWVPYmplY3QgKmYpCiB7Ci0gICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNlYmFjaywgKmFyZzsKKyAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrLCAqb3JpZ190cmFjZWJhY2ssICphcmc7CiAgICAgaW50IGVycjsKICAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKICAgICBpZiAodmFsdWUgPT0gTlVMTCkgewpAQCAtMzcxOSw2ICszODUwLDExIEBACiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgfQogICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKKyAgICBvcmlnX3RyYWNlYmFjayA9IHRyYWNlYmFjazsKKyAgICBpZiAodHJhY2ViYWNrID09IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICB0cmFjZWJhY2sgPSBQeV9Ob25lOworICAgIH0KICAgICBhcmcgPSBQeVR1cGxlX1BhY2soMywgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CiAgICAgaWYgKGFyZyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CkBAIC0zNzI3LDExICszODYzLDExIEBACiAgICAgZXJyID0gY2FsbF90cmFjZShmdW5jLCBzZWxmLCBmLCBQeVRyYWNlX0VYQ0VQVElPTiwgYXJnKTsKICAgICBQeV9ERUNSRUYoYXJnKTsKICAgICBpZiAoZXJyID09IDApCi0gICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIG9yaWdfdHJhY2ViYWNrKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfWERFQ1JFRih0eXBlKTsKICAgICAgICAgUHlfWERFQ1JFRih2YWx1ZSk7Ci0gICAgICAgIFB5X1hERUNSRUYodHJhY2ViYWNrKTsKKyAgICAgICAgUHlfWERFQ1JFRihvcmlnX3RyYWNlYmFjayk7CiAgICAgfQogfQogCkBAIC0zNzYwLDcgKzM4OTYsNyBAQAogY2FsbF90cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCiAgICAgICAgICAgIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewotICAgIHJlZ2lzdGVyIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IGZyYW1lLT5mX3RzdGF0ZTsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgaW50IHJlc3VsdDsKICAgICBpZiAodHN0YXRlLT50cmFjaW5nKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM4NzEsOSArNDAwNywxNSBAQAogUHlFdmFsX0dldExvY2Fscyh2b2lkKQogewogICAgIFB5RnJhbWVPYmplY3QgKmN1cnJlbnRfZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKLSAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKQorICAgIGlmIChjdXJyZW50X2ZyYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiZnJhbWUgZG9lcyBub3QgZXhpc3QiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoY3VycmVudF9mcmFtZSk7CisgICAgfQorCisgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGN1cnJlbnRfZnJhbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhc3NlcnQoY3VycmVudF9mcmFtZS0+Zl9sb2NhbHMgIT0gTlVMTCk7CiAgICAgcmV0dXJuIGN1cnJlbnRfZnJhbWUtPmZfbG9jYWxzOwogfQogCkBAIC0zODgzLDggKzQwMjUsOSBAQAogICAgIFB5RnJhbWVPYmplY3QgKmN1cnJlbnRfZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKICAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2dsb2JhbHM7CisKKyAgICBhc3NlcnQoY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzICE9IE5VTEwpOworICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2dsb2JhbHM7CiB9CiAKIFB5RnJhbWVPYmplY3QgKgpAQCAtMzkyNiw2ICs0MDY5LDEzIEBACiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24KKyAgICAgICBzZXQsIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQorICAgICAgIGFuZCBzbyB0aGUgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgaWYgKGFyZyA9PSBOVUxMKSB7CiAgICAgICAgIGFyZyA9IFB5VHVwbGVfTmV3KDApOwogICAgICAgICBpZiAoYXJnID09IE5VTEwpCkBAIC0zOTQ4LDYgKzQwOTgsOSBAQAogCiAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBhcmcsIGt3KTsKICAgICBQeV9ERUNSRUYoYXJnKTsKKworICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDA2NSwxMCArNDIxOCwxNSBAQAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpjYWxsYXJnczsKICAgICAgICAgICAgIGNhbGxhcmdzID0gbG9hZF9hcmdzKHBwX3N0YWNrLCBuYSk7Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIwKTsKLSAgICAgICAgICAgIENfVFJBQ0UoeCwgUHlDRnVuY3Rpb25fQ2FsbChmdW5jLGNhbGxhcmdzLE5VTEwpKTsKLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOwotICAgICAgICAgICAgUHlfWERFQ1JFRihjYWxsYXJncyk7CisgICAgICAgICAgICBpZiAoY2FsbGFyZ3MgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjApOworICAgICAgICAgICAgICAgIENfVFJBQ0UoeCwgUHlDRnVuY3Rpb25fQ2FsbChmdW5jLGNhbGxhcmdzLE5VTEwpKTsKKyAgICAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIxKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGNhbGxhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHggPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFB5TWV0aG9kX0NoZWNrKGZ1bmMpICYmIFB5TWV0aG9kX0dFVF9TRUxGKGZ1bmMpICE9IE5VTEwpIHsKQEAgLTQwOTMsNiArNDI1MSw4IEBACiAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOwogICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAgICAgfQorICAgIGFzc2VydCgoeCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAoeCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKIAogICAgIC8qIENsZWFyIHRoZSBzdGFjayBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgQWxzbyByZW1vdmVzCiAgICAgICAgdGhlIGFyZ3VtZW50cyBpbiBjYXNlIHRoZXkgd2VyZW4ndCBjb25zdW1lZCBhbHJlYWR5CkBAIC00MTAzLDYgKzQyNjMsOSBAQAogICAgICAgICBQeV9ERUNSRUYodyk7CiAgICAgICAgIFBDQUxMKFBDQUxMX1BPUCk7CiAgICAgfQorCisgICAgYXNzZXJ0KCh4ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8ICh4ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogICAgIHJldHVybiB4OwogfQogCkBAIC00Mzg2LDYgKzQ1NDksOCBAQAogICAgIFB5X1hERUNSRUYoY2FsbGFyZ3MpOwogICAgIFB5X1hERUNSRUYoa3dkaWN0KTsKICAgICBQeV9YREVDUkVGKHN0YXJhcmcpOworICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDQyNCw3ICs0NTg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzZUV4Y2VwdGlvbiBpcyBub3QgYWxsb3dlZCIKIAogc3RhdGljIFB5T2JqZWN0ICoKLWNtcF9vdXRjb21lKGludCBvcCwgcmVnaXN0ZXIgUHlPYmplY3QgKnYsIHJlZ2lzdGVyIFB5T2JqZWN0ICp3KQorY21wX291dGNvbWUoaW50IG9wLCBQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgaW50IHJlcyA9IDA7CiAgICAgc3dpdGNoIChvcCkgewpAQCAtNDQ4Miw3ICs0NjQ3LDcgQEAKIAogICAgIHggPSBQeU9iamVjdF9HZXRBdHRyKHYsIG5hbWUpOwogICAgIGlmICh4ID09IE5VTEwgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiY2Fubm90IGltcG9ydCBuYW1lICVTIiwgbmFtZSk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwgImNhbm5vdCBpbXBvcnQgbmFtZSAlUiIsIG5hbWUpOwogICAgIH0KICAgICByZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9jb2RlY3MuYyBiL1B5dGhvbi9jb2RlY3MuYwppbmRleCBmZDY3ZDFiLi5jNTQxYmEwIDEwMDY0NAotLS0gYS9QeXRob24vY29kZWNzLmMKKysrIGIvUHl0aG9uL2NvZGVjcy5jCkBAIC01Myw3ICs1Myw3IEBACiBzdGF0aWMKIFB5T2JqZWN0ICpub3JtYWxpemVzdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOworICAgIHNpemVfdCBpOwogICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyaW5nKTsKICAgICBjaGFyICpwOwogICAgIFB5T2JqZWN0ICp2OwpAQCAtNjUsOSArNjUsOSBAQAogCiAgICAgcCA9IFB5TWVtX01hbGxvYyhsZW4gKyAxKTsKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgY2ggPSBzdHJpbmdbaV07CisgICAgICAgIGNoYXIgY2ggPSBzdHJpbmdbaV07CiAgICAgICAgIGlmIChjaCA9PSAnICcpCiAgICAgICAgICAgICBjaCA9ICctJzsKICAgICAgICAgZWxzZQpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopbmFtZSwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBlcnJvcik7CiB9CiAKIC8qIExvb2t1cCB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCiAgICAgaWYgKG5hbWU9PU5VTEwpCiAgICAgICAgIG5hbWUgPSAic3RyaWN0IjsKLSAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgKGNoYXIgKiluYW1lKTsKKyAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgbmFtZSk7CiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTG9va3VwRXJyb3IsICJ1bmtub3duIGVycm9yIGhhbmRsZXIgbmFtZSAnJS40MDBzJyIsIG5hbWUpOwogICAgIGVsc2UKQEAgLTc2MSw3ICs3NjEsNyBAQAogICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgICAgICAvKiBvYmplY3QgaXMgZ3VhcmFudGVlZCB0byBiZSAicmVhZHkiICovCiAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQURfQ0hBUihvYmplY3QsIGkpOwotICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwIHx8IGNoID4gMHhkZmZmKSB7CisgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgewogICAgICAgICAgICAgICAgIC8qIE5vdCBhIHN1cnJvZ2F0ZSwgZmFpbCB3aXRoIG9yaWdpbmFsIGV4Y2VwdGlvbiAqLwogICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y2VwdGlvbkluc3RhbmNlX0NsYXNzKGV4YyksIGV4Yyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CkBAIC03OTcsNyArNzk3LDcgQEAKICAgICAgICAgICAgIChwWzJdICYgMHhjMCkgPT0gMHg4MCkgewogICAgICAgICAgICAgLyogaXQncyBhIHRocmVlLWJ5dGUgY29kZSAqLwogICAgICAgICAgICAgY2ggPSAoKHBbMF0gJiAweDBmKSA8PCAxMikgKyAoKHBbMV0gJiAweDNmKSA8PCA2KSArIChwWzJdICYgMHgzZik7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDAgfHwgY2ggPiAweGRmZmYpCisgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkKICAgICAgICAgICAgICAgICAvKiBpdCdzIG5vdCBhIHN1cnJvZ2F0ZSAtIGZhaWwgKi8KICAgICAgICAgICAgICAgICBjaCA9IDA7CiAgICAgICAgIH0KQEAgLTEwMjYsNyArMTAyNiw3IEBACiAKICAgICBpZiAoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSkgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfQVJSQVlfTEVOR1RIKG1ldGhvZHMpOyArK2kpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gUHlDRnVuY3Rpb25fTmV3KCZtZXRob2RzW2ldLmRlZiwgTlVMTCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZtZXRob2RzW2ldLmRlZiwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgaWYgKCFmdW5jKQogICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGluaXRpYWxpemUgY29kZWMgZXJyb3IgcmVnaXN0cnkiKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9jb21waWxlLmMgYi9QeXRob24vY29tcGlsZS5jCmluZGV4IDZkNjYyNTUuLjMyNDY1ZjcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jb21waWxlLmMKKysrIGIvUHl0aG9uL2NvbXBpbGUuYwpAQCAtOTQsNiArOTQsNyBAQAogICAgIENPTVBJTEVSX1NDT1BFX01PRFVMRSwKICAgICBDT01QSUxFUl9TQ09QRV9DTEFTUywKICAgICBDT01QSUxFUl9TQ09QRV9GVU5DVElPTiwKKyAgICBDT01QSUxFUl9TQ09QRV9MQU1CREEsCiAgICAgQ09NUElMRVJfU0NPUEVfQ09NUFJFSEVOU0lPTiwKIH07CiAKQEAgLTE0OSw4ICsxNTAsNyBAQAogKi8KIAogc3RydWN0IGNvbXBpbGVyIHsKLSAgICBjb25zdCBjaGFyICpjX2ZpbGVuYW1lOwotICAgIFB5T2JqZWN0ICpjX2ZpbGVuYW1lX29iajsKKyAgICBQeU9iamVjdCAqY19maWxlbmFtZTsKICAgICBzdHJ1Y3Qgc3ltdGFibGUgKmNfc3Q7CiAgICAgUHlGdXR1cmVGZWF0dXJlcyAqY19mdXR1cmU7IC8qIHBvaW50ZXIgdG8gbW9kdWxlJ3MgX19mdXR1cmVfXyAqLwogICAgIFB5Q29tcGlsZXJGbGFncyAqY19mbGFnczsKQEAgLTIwMSw2ICsyMDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGt3YXJncyk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX3RyeV9leGNlcHQoc3RydWN0IGNvbXBpbGVyICosIHN0bXRfdHkpOworc3RhdGljIGludCBjb21waWxlcl9zZXRfcXVhbG5hbWUoc3RydWN0IGNvbXBpbGVyICopOwogCiBzdGF0aWMgUHlDb2RlT2JqZWN0ICphc3NlbWJsZShzdHJ1Y3QgY29tcGlsZXIgKiwgaW50IGFkZE5vbmUpOwogc3RhdGljIFB5T2JqZWN0ICpfX2RvY19fOwpAQCAtMjg4LDggKzI4OSw4IEBACiB9CiAKIFB5Q29kZU9iamVjdCAqCi1QeUFTVF9Db21waWxlRXgobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCi0gICAgICAgICAgICAgICAgaW50IG9wdGltaXplLCBQeUFyZW5hICphcmVuYSkKK1B5QVNUX0NvbXBpbGVPYmplY3QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgc3RydWN0IGNvbXBpbGVyIGM7CiAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IE5VTEw7CkBAIC0zMDQsMTIgKzMwNSwxMCBAQAogCiAgICAgaWYgKCFjb21waWxlcl9pbml0KCZjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKGZpbGVuYW1lKTsKICAgICBjLmNfZmlsZW5hbWUgPSBmaWxlbmFtZTsKLSAgICBjLmNfZmlsZW5hbWVfb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7Ci0gICAgaWYgKCFjLmNfZmlsZW5hbWVfb2JqKQotICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgYy5jX2FyZW5hID0gYXJlbmE7Ci0gICAgYy5jX2Z1dHVyZSA9IFB5RnV0dXJlX0Zyb21BU1QobW9kLCBmaWxlbmFtZSk7CisgICAgYy5jX2Z1dHVyZSA9IFB5RnV0dXJlX0Zyb21BU1RPYmplY3QobW9kLCBmaWxlbmFtZSk7CiAgICAgaWYgKGMuY19mdXR1cmUgPT0gTlVMTCkKICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIGlmICghZmxhZ3MpIHsKQEAgLTMyMyw3ICszMjIsNyBAQAogICAgIGMuY19vcHRpbWl6ZSA9IChvcHRpbWl6ZSA9PSAtMSkgPyBQeV9PcHRpbWl6ZUZsYWcgOiBvcHRpbWl6ZTsKICAgICBjLmNfbmVzdGxldmVsID0gMDsKIAotICAgIGMuY19zdCA9IFB5U3ltdGFibGVfQnVpbGQobW9kLCBmaWxlbmFtZSwgYy5jX2Z1dHVyZSk7CisgICAgYy5jX3N0ID0gUHlTeW10YWJsZV9CdWlsZE9iamVjdChtb2QsIGZpbGVuYW1lLCBjLmNfZnV0dXJlKTsKICAgICBpZiAoYy5jX3N0ID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAibm8gc3ltdGFibGUiKTsKQEAgLTMzOSw2ICszMzgsMjEgQEAKIH0KIAogUHlDb2RlT2JqZWN0ICoKK1B5QVNUX0NvbXBpbGVFeChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgICAgICAgICAgICAgaW50IG9wdGltaXplLCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgUHlDb2RlT2JqZWN0ICpjbzsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgY28gPSBQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBvcHRpbWl6ZSwgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGNvOworCit9CisKK1B5Q29kZU9iamVjdCAqCiBQeU5vZGVfQ29tcGlsZShzdHJ1Y3QgX25vZGUgKm4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAgIFB5Q29kZU9iamVjdCAqY28gPSBOVUxMOwpAQCAtMzYwLDggKzM3NCw3IEBACiAgICAgICAgIFB5U3ltdGFibGVfRnJlZShjLT5jX3N0KTsKICAgICBpZiAoYy0+Y19mdXR1cmUpCiAgICAgICAgIFB5T2JqZWN0X0ZyZWUoYy0+Y19mdXR1cmUpOwotICAgIGlmIChjLT5jX2ZpbGVuYW1lX29iaikKLSAgICAgICAgUHlfREVDUkVGKGMtPmNfZmlsZW5hbWVfb2JqKTsKKyAgICBQeV9YREVDUkVGKGMtPmNfZmlsZW5hbWUpOwogICAgIFB5X0RFQ1JFRihjLT5jX3N0YWNrKTsKIH0KIApAQCAtNTM1LDYgKzU0OCwzNyBAQAogICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAodS0+dV9zdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlKSB7CisgICAgICAgIC8qIENvb2sgdXAgYSBpbXBsaWNpdCBfX2NsYXNzX18gY2VsbC4gKi8KKyAgICAgICAgX1B5X0lERU5USUZJRVIoX19jbGFzc19fKTsKKyAgICAgICAgUHlPYmplY3QgKnR1cGxlLCAqbmFtZSwgKnplcm87CisgICAgICAgIGludCByZXM7CisgICAgICAgIGFzc2VydCh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MpOworICAgICAgICBhc3NlcnQoUHlEaWN0X1NpemUodS0+dV9jZWxsdmFycykgPT0gMCk7CisgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2NsYXNzX18pOworICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHR1cGxlID0gUHlUdXBsZV9QYWNrKDIsIG5hbWUsIFB5X1RZUEUobmFtZSkpOworICAgICAgICBpZiAoIXR1cGxlKSB7CisgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB6ZXJvID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbSh1LT51X2NlbGx2YXJzLCB0dXBsZSwgemVybyk7CisgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgIFB5X0RFQ1JFRih6ZXJvKTsKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQogCiAgICAgdS0+dV9mcmVldmFycyA9IGRpY3RieXR5cGUodS0+dV9zdGUtPnN0ZV9zeW1ib2xzLCBGUkVFLCBERUZfRlJFRV9DTEFTUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2l6ZSh1LT51X2NlbGx2YXJzKSk7CkBAIC01ODAsNiArNjI0LDExIEBACiAgICAgaWYgKGNvbXBpbGVyX3VzZV9uZXdfYmxvY2soYykgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAodS0+dV9zY29wZV90eXBlICE9IENPTVBJTEVSX1NDT1BFX01PRFVMRSkgeworICAgICAgICBpZiAoIWNvbXBpbGVyX3NldF9xdWFsbmFtZShjKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIHJldHVybiAxOwogfQogCkBAIC02MDcsNTcgKzY1Niw3NyBAQAogCiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1jb21waWxlcl9zY29wZV9xdWFsbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMpCitzdGF0aWMgaW50Citjb21waWxlcl9zZXRfcXVhbG5hbWUoc3RydWN0IGNvbXBpbGVyICpjKQogewotICAgIFB5X3NzaXplX3Qgc3RhY2tfc2l6ZSwgaTsKICAgICBfUHlfc3RhdGljX3N0cmluZyhkb3QsICIuIik7Ci0gICAgX1B5X3N0YXRpY19zdHJpbmcobG9jYWxzLCAiPGxvY2Fscz4iKTsKLSAgICBzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqdTsKLSAgICBQeU9iamVjdCAqY2Fwc3VsZSwgKm5hbWUsICpzZXEsICpkb3Rfc3RyLCAqbG9jYWxzX3N0cjsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhkb3RfbG9jYWxzLCAiLjxsb2NhbHM+Iik7CisgICAgUHlfc3NpemVfdCBzdGFja19zaXplOworICAgIHN0cnVjdCBjb21waWxlcl91bml0ICp1ID0gYy0+dTsKKyAgICBQeU9iamVjdCAqbmFtZSwgKmJhc2UsICpkb3Rfc3RyLCAqZG90X2xvY2Fsc19zdHI7CiAKLSAgICB1ID0gYy0+dTsKLSAgICBpZiAodS0+dV9xdWFsbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRih1LT51X3F1YWxuYW1lKTsKLSAgICAgICAgcmV0dXJuIHUtPnVfcXVhbG5hbWU7Ci0gICAgfQotCi0gICAgc2VxID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoc2VxID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCisgICAgYmFzZSA9IE5VTEw7CiAgICAgc3RhY2tfc2l6ZSA9IFB5TGlzdF9HRVRfU0laRShjLT5jX3N0YWNrKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc3RhY2tfc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGNhcHN1bGUgPSBQeUxpc3RfR0VUX0lURU0oYy0+Y19zdGFjaywgaSk7Ci0gICAgICAgIHUgPSAoc3RydWN0IGNvbXBpbGVyX3VuaXQgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCBDT01QSUxFUl9DQVBTVUxFX05BTUVfQ09NUElMRVJfVU5JVCk7Ci0gICAgICAgIGFzc2VydCh1KTsKLSAgICAgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9NT0RVTEUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VxLCB1LT51X25hbWUpKQotICAgICAgICAgICAgZ290byBfZXJyb3I7Ci0gICAgICAgIGlmICh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04pIHsKLSAgICAgICAgICAgIGxvY2Fsc19zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmbG9jYWxzKTsKLSAgICAgICAgICAgIGlmIChsb2NhbHNfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBfZXJyb3I7Ci0gICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIGxvY2Fsc19zdHIpKQotICAgICAgICAgICAgICAgIGdvdG8gX2Vycm9yOworICAgIGFzc2VydChzdGFja19zaXplID49IDEpOworICAgIGlmIChzdGFja19zaXplID4gMSkgeworICAgICAgICBpbnQgc2NvcGUsIGZvcmNlX2dsb2JhbCA9IDA7CisgICAgICAgIHN0cnVjdCBjb21waWxlcl91bml0ICpwYXJlbnQ7CisgICAgICAgIFB5T2JqZWN0ICptYW5nbGVkLCAqY2Fwc3VsZTsKKworICAgICAgICBjYXBzdWxlID0gUHlMaXN0X0dFVF9JVEVNKGMtPmNfc3RhY2ssIHN0YWNrX3NpemUgLSAxKTsKKyAgICAgICAgcGFyZW50ID0gKHN0cnVjdCBjb21waWxlcl91bml0ICopUHlDYXBzdWxlX0dldFBvaW50ZXIoY2Fwc3VsZSwgQ09NUElMRVJfQ0FQU1VMRV9OQU1FX0NPTVBJTEVSX1VOSVQpOworICAgICAgICBhc3NlcnQocGFyZW50KTsKKworICAgICAgICBpZiAodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OIHx8IHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9DTEFTUykgeworICAgICAgICAgICAgYXNzZXJ0KHUtPnVfbmFtZSk7CisgICAgICAgICAgICBtYW5nbGVkID0gX1B5X01hbmdsZShwYXJlbnQtPnVfcHJpdmF0ZSwgdS0+dV9uYW1lKTsKKyAgICAgICAgICAgIGlmICghbWFuZ2xlZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHNjb3BlID0gUHlTVF9HZXRTY29wZShwYXJlbnQtPnVfc3RlLCBtYW5nbGVkKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtYW5nbGVkKTsKKyAgICAgICAgICAgIGFzc2VydChzY29wZSAhPSBHTE9CQUxfSU1QTElDSVQpOworICAgICAgICAgICAgaWYgKHNjb3BlID09IEdMT0JBTF9FWFBMSUNJVCkKKyAgICAgICAgICAgICAgICBmb3JjZV9nbG9iYWwgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3JjZV9nbG9iYWwpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTgorICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0xBTUJEQSkgeworICAgICAgICAgICAgICAgIGRvdF9sb2NhbHNfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJmRvdF9sb2NhbHMpOworICAgICAgICAgICAgICAgIGlmIChkb3RfbG9jYWxzX3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBiYXNlID0gUHlVbmljb2RlX0NvbmNhdChwYXJlbnQtPnVfcXVhbG5hbWUsIGRvdF9sb2NhbHNfc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihwYXJlbnQtPnVfcXVhbG5hbWUpOworICAgICAgICAgICAgICAgIGJhc2UgPSBwYXJlbnQtPnVfcXVhbG5hbWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgdSA9IGMtPnU7Ci0gICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VxLCB1LT51X25hbWUpKQotICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICBkb3Rfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJmRvdCk7Ci0gICAgaWYgKGRvdF9zdHIgPT0gTlVMTCkKLSAgICAgICAgZ290byBfZXJyb3I7Ci0gICAgbmFtZSA9IFB5VW5pY29kZV9Kb2luKGRvdF9zdHIsIHNlcSk7Ci0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgdS0+dV9xdWFsbmFtZSA9IG5hbWU7Ci0gICAgUHlfWElOQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKIAotX2Vycm9yOgotICAgIFB5X1hERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoYmFzZSAhPSBOVUxMKSB7CisgICAgICAgIGRvdF9zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90KTsKKyAgICAgICAgaWYgKGRvdF9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgbmFtZSA9IFB5VW5pY29kZV9Db25jYXQoYmFzZSwgZG90X3N0cik7CisgICAgICAgIFB5X0RFQ1JFRihiYXNlKTsKKyAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBQeVVuaWNvZGVfQXBwZW5kKCZuYW1lLCB1LT51X25hbWUpOworICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9JTkNSRUYodS0+dV9uYW1lKTsKKyAgICAgICAgbmFtZSA9IHUtPnVfbmFtZTsKKyAgICB9CisgICAgdS0+dV9xdWFsbmFtZSA9IG5hbWU7CisKKyAgICByZXR1cm4gMTsKIH0KIAogLyogQWxsb2NhdGUgYSBuZXcgYmxvY2sgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuCkBAIC04NjIsOCArOTMxLDYgQEAKICAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICBjYXNlIFdJVEhfQ0xFQU5VUDoKICAgICAgICAgICAgIHJldHVybiAtMTsgLyogWFhYIFNvbWV0aW1lcyBtb3JlICovCi0gICAgICAgIGNhc2UgU1RPUkVfTE9DQUxTOgotICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIFJFVFVSTl9WQUxVRToKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBJTVBPUlRfU1RBUjoKQEAgLTk3MCw2ICsxMDM3LDcgQEAKICAgICAgICAgY2FzZSBMT0FEX0NMT1NVUkU6CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBMT0FEX0RFUkVGOgorICAgICAgICBjYXNlIExPQURfQ0xBU1NERVJFRjoKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIFNUT1JFX0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTMzMCwxNiArMTM5OCwxOSBAQAogc3RhdGljIGludAogZ2V0X3JlZl90eXBlKHN0cnVjdCBjb21waWxlciAqYywgUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgaW50IHNjb3BlID0gUHlTVF9HZXRTY29wZShjLT51LT51X3N0ZSwgbmFtZSk7CisgICAgaW50IHNjb3BlOworICAgIGlmIChjLT51LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MgJiYKKyAgICAgICAgIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJfX2NsYXNzX18iKSkKKyAgICAgICAgcmV0dXJuIENFTEw7CisgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKGMtPnUtPnVfc3RlLCBuYW1lKTsKICAgICBpZiAoc2NvcGUgPT0gMCkgewogICAgICAgICBjaGFyIGJ1ZlszNTBdOwogICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpIGluICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpXG4iCiAgICAgICAgICAgICAgICAgICAgICAgInN5bWJvbHM6ICVzXG5sb2NhbHM6ICVzXG5nbG9iYWxzOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcobmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYy0+dS0+dV9uYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGMtPnUtPnVfc3RlLT5zdGVfaWQpLAotICAgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X3N0ZS0+c3RlX3N5bWJvbHMpLAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV92YXJuYW1lcyksCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X25hbWVzKQpAQCAtMTUwMSwxNSArMTU3MiwxNSBAQAogCiAgICAgaWYgKGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb25zKGMsIGFyZ3MtPmFyZ3MsIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoYXJncy0+dmFyYXJnYW5ub3RhdGlvbiAmJgotICAgICAgICBjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIGFyZ3MtPnZhcmFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT52YXJhcmdhbm5vdGF0aW9uLCBuYW1lcykpCisgICAgaWYgKGFyZ3MtPnZhcmFyZyAmJiBhcmdzLT52YXJhcmctPmFubm90YXRpb24gJiYKKyAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT52YXJhcmctPmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT52YXJhcmctPmFubm90YXRpb24sIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbnMoYywgYXJncy0+a3dvbmx5YXJncywgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmIChhcmdzLT5rd2FyZ2Fubm90YXRpb24gJiYKLSAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT5rd2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd2FyZ2Fubm90YXRpb24sIG5hbWVzKSkKKyAgICBpZiAoYXJncy0+a3dhcmcgJiYgYXJncy0+a3dhcmctPmFubm90YXRpb24gJiYKKyAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT5rd2FyZy0+YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoIXJldHVybl9zdHIpIHsKQEAgLTE1NjgsNiArMTYzOSw4IEBACiAKICAgICBpZiAoIWNvbXBpbGVyX2RlY29yYXRvcnMoYywgZGVjb3MpKQogICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCisgICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7CiAgICAgaWYgKGFyZ3MtPmt3b25seWFyZ3MpIHsKICAgICAgICAgaW50IHJlcyA9IGNvbXBpbGVyX3Zpc2l0X2t3b25seWRlZmF1bHRzKGMsIGFyZ3MtPmt3b25seWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd19kZWZhdWx0cyk7CkBAIC0xNTc1LDggKzE2NDgsNiBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGt3X2RlZmF1bHRfY291bnQgPSByZXM7CiAgICAgfQotICAgIGlmIChhcmdzLT5kZWZhdWx0cykKLSAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKICAgICBudW1fYW5ub3RhdGlvbnMgPSBjb21waWxlcl92aXNpdF9hbm5vdGF0aW9ucyhjLCBhcmdzLCByZXR1cm5zKTsKICAgICBpZiAobnVtX2Fubm90YXRpb25zIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjA1LDkgKzE2NzYsMTAgQEAKICAgICAgICAgVklTSVRfSU5fU0NPUEUoYywgc3RtdCwgc3QpOwogICAgIH0KICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwotICAgIHF1YWxuYW1lID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7CisgICAgcXVhbG5hbWUgPSBjLT51LT51X3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCB8fCBjbyA9PSBOVUxMKSB7CisgICAgaWYgKGNvID09IE5VTEwpIHsKICAgICAgICAgUHlfWERFQ1JFRihxdWFsbmFtZSk7CiAgICAgICAgIFB5X1hERUNSRUYoY28pOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE2NjEsMTIgKzE3MzMsNiBAQAogICAgICAgICBQeV9JTkNSRUYocy0+di5DbGFzc0RlZi5uYW1lKTsKICAgICAgICAgUHlfWERFQ1JFRihjLT51LT51X3ByaXZhdGUpOwogICAgICAgICBjLT51LT51X3ByaXZhdGUgPSBzLT52LkNsYXNzRGVmLm5hbWU7Ci0gICAgICAgIC8qIGZvcmNlIGl0IHRvIGhhdmUgb25lIG1hbmRhdG9yeSBhcmd1bWVudCAqLwotICAgICAgICBjLT51LT51X2FyZ2NvdW50ID0gMTsKLSAgICAgICAgLyogbG9hZCB0aGUgZmlyc3QgYXJndW1lbnQgKF9fbG9jYWxzX18pIC4uLiAqLwotICAgICAgICBBRERPUF9JKGMsIExPQURfRkFTVCwgMCk7Ci0gICAgICAgIC8qIC4uLiBhbmQgc3RvcmUgaXQgaW50byBmX2xvY2FscyAqLwotICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBTVE9SRV9MT0NBTFMpOwogICAgICAgICAvKiBsb2FkIChnbG9iYWwpIF9fbmFtZV9fIC4uLiAqLwogICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKICAgICAgICAgaWYgKCFzdHIgfHwgIWNvbXBpbGVyX25hbWVvcChjLCBzdHIsIExvYWQpKSB7CkBAIC0xNjgzLDE0ICsxNzQ5LDggQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICAvKiBzdG9yZSB0aGUgX19xdWFsbmFtZV9fICovCi0gICAgICAgIHN0ciA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOwotICAgICAgICBpZiAoIXN0cikgewotICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgc3RyLCBjb25zdHMpOwotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgYXNzZXJ0KGMtPnUtPnVfcXVhbG5hbWUpOworICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIGMtPnUtPnVfcXVhbG5hbWUsIGNvbnN0cyk7CiAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3F1YWxuYW1lX18iKTsKICAgICAgICAgaWYgKCFzdHIgfHwgIWNvbXBpbGVyX25hbWVvcChjLCBzdHIsIFN0b3JlKSkgewogICAgICAgICAgICAgUHlfWERFQ1JFRihzdHIpOwpAQCAtMTcwMywyNCArMTc2MywyNCBAQAogICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIC8qIHJldHVybiB0aGUgKGVtcHR5KSBfX2NsYXNzX18gY2VsbCAqLwotICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19jbGFzc19fIik7Ci0gICAgICAgIGlmIChzdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGkgPSBjb21waWxlcl9sb29rdXBfYXJnKGMtPnUtPnVfY2VsbHZhcnMsIHN0cik7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICBpZiAoaSA9PSAtMSkgewotICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIHdoZW4gbm9ib2R5IHJlZmVyZW5jZXMgdGhlIGNlbGwgKi8KLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAvKiBSZXR1cm4gTm9uZSAqLwotICAgICAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9Ob25lLCBjb25zdHMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAoYy0+dS0+dV9zdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlKSB7CisgICAgICAgICAgICAvKiByZXR1cm4gdGhlIChlbXB0eSkgX19jbGFzc19fIGNlbGwgKi8KKyAgICAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2NsYXNzX18iKTsKKyAgICAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gY29tcGlsZXJfbG9va3VwX2FyZyhjLT51LT51X2NlbGx2YXJzLCBzdHIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICBhc3NlcnQoaSA9PSAwKTsKICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgY2VsbCB3aGVyZSB0byBzdG9yZSBfX2NsYXNzX18gKi8KICAgICAgICAgICAgIEFERE9QX0koYywgTE9BRF9DTE9TVVJFLCBpKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfU2l6ZShjLT51LT51X2NlbGx2YXJzKSA9PSAwKTsKKyAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyB3aGVuIG5vYm9keSByZWZlcmVuY2VzIHRoZSBjZWxsLiBSZXR1cm4gTm9uZS4gKi8KKyAgICAgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfTm9uZSwgY29uc3RzKTsKKyAgICAgICAgfQogICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBSRVRVUk5fVkFMVUUpOwogICAgICAgICAvKiBjcmVhdGUgdGhlIGNvZGUgb2JqZWN0ICovCiAgICAgICAgIGNvID0gYXNzZW1ibGUoYywgMSk7CkBAIC0xNzk3LDE1ICsxODU3LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCisgICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7CiAgICAgaWYgKGFyZ3MtPmt3b25seWFyZ3MpIHsKICAgICAgICAgaW50IHJlcyA9IGNvbXBpbGVyX3Zpc2l0X2t3b25seWRlZmF1bHRzKGMsIGFyZ3MtPmt3b25seWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd19kZWZhdWx0cyk7CiAgICAgICAgIGlmIChyZXMgPCAwKSByZXR1cm4gMDsKICAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlczsKICAgICB9Ci0gICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQotICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwotICAgIGlmICghY29tcGlsZXJfZW50ZXJfc2NvcGUoYywgbmFtZSwgQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04sCisgICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLCBDT01QSUxFUl9TQ09QRV9MQU1CREEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWUsIGUtPmxpbmVubykpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xODI0LDkgKzE4ODQsMTAgQEAKICAgICAgICAgQURET1BfSU5fU0NPUEUoYywgUkVUVVJOX1ZBTFVFKTsKICAgICB9CiAgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKLSAgICBxdWFsbmFtZSA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOworICAgIHF1YWxuYW1lID0gYy0+dS0+dV9xdWFsbmFtZTsKKyAgICBQeV9JTkNSRUYocXVhbG5hbWUpOwogICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgaWYgKHF1YWxuYW1lID09IE5VTEwgfHwgY28gPT0gTlVMTCkKKyAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBhcmdsZW5ndGggPSBhc2RsX3NlcV9MRU4oYXJncy0+ZGVmYXVsdHMpOwpAQCAtMjI4OCw4ICsyMzQ5LDExIEBACiAgICAgICAgICAgICBpZGVudGlmaWVyIHRtcCA9IGFsaWFzLT5uYW1lOwogICAgICAgICAgICAgUHlfc3NpemVfdCBkb3QgPSBQeVVuaWNvZGVfRmluZENoYXIoCiAgICAgICAgICAgICAgICAgYWxpYXMtPm5hbWUsICcuJywgMCwgUHlVbmljb2RlX0dFVF9MRU5HVEgoYWxpYXMtPm5hbWUpLCAxKTsKLSAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpCisgICAgICAgICAgICBpZiAoZG90ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgdG1wID0gUHlVbmljb2RlX1N1YnN0cmluZyhhbGlhcy0+bmFtZSwgMCwgZG90KTsKKyAgICAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgciA9IGNvbXBpbGVyX25hbWVvcChjLCB0bXAsIFN0b3JlKTsKICAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKQEAgLTIzODAsNiArMjQ0NCw3IEBACiB7CiAgICAgc3RhdGljIFB5T2JqZWN0ICphc3NlcnRpb25fZXJyb3IgPSBOVUxMOwogICAgIGJhc2ljYmxvY2sgKmVuZDsKKyAgICBQeU9iamVjdCogbXNnOwogCiAgICAgaWYgKGMtPmNfb3B0aW1pemUpCiAgICAgICAgIHJldHVybiAxOwpAQCAtMjM5MCwxMSArMjQ1NSwxNyBAQAogICAgIH0KICAgICBpZiAocy0+di5Bc3NlcnQudGVzdC0+a2luZCA9PSBUdXBsZV9raW5kICYmCiAgICAgICAgIGFzZGxfc2VxX0xFTihzLT52LkFzc2VydC50ZXN0LT52LlR1cGxlLmVsdHMpID4gMCkgewotICAgICAgICBjb25zdCBjaGFyKiBtc2cgPQotICAgICAgICAgICAgImFzc2VydGlvbiBpcyBhbHdheXMgdHJ1ZSwgcGVyaGFwcyByZW1vdmUgcGFyZW50aGVzZXM/IjsKLSAgICAgICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csIGMtPmNfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+dS0+dV9saW5lbm8sIE5VTEwsIE5VTEwpID09IC0xKQorICAgICAgICBtc2cgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiYXNzZXJ0aW9uIGlzIGFsd2F5cyB0cnVlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJoYXBzIHJlbW92ZSBwYXJlbnRoZXNlcz8iKTsKKyAgICAgICAgaWYgKG1zZyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoUHlFeGNfU3ludGF4V2FybmluZywgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYobXNnKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihtc2cpOwogICAgIH0KICAgICBWSVNJVChjLCBleHByLCBzLT52LkFzc2VydC50ZXN0KTsKICAgICBlbmQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CkBAIC0yNjM4LDYgKzI3MDksMTAgQEAKICAgICBpZiAoIW1hbmdsZWQpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgYXNzZXJ0KFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJOb25lIikgJiYKKyAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIlRydWUiKSAmJgorICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiRmFsc2UiKSk7CisKICAgICBvcCA9IDA7CiAgICAgb3B0eXBlID0gT1BfTkFNRTsKICAgICBzY29wZSA9IFB5U1RfR2V0U2NvcGUoYy0+dS0+dV9zdGUsIG1hbmdsZWQpOwpAQCAtMjY3Myw3ICsyNzQ4LDkgQEAKICAgICBzd2l0Y2ggKG9wdHlwZSkgewogICAgIGNhc2UgT1BfREVSRUY6CiAgICAgICAgIHN3aXRjaCAoY3R4KSB7Ci0gICAgICAgIGNhc2UgTG9hZDogb3AgPSBMT0FEX0RFUkVGOyBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgb3AgPSAoYy0+dS0+dV9zdGUtPnN0ZV90eXBlID09IENsYXNzQmxvY2spID8gTE9BRF9DTEFTU0RFUkVGIDogTE9BRF9ERVJFRjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlOiBvcCA9IFNUT1JFX0RFUkVGOyBicmVhazsKICAgICAgICAgY2FzZSBBdWdMb2FkOgogICAgICAgICBjYXNlIEF1Z1N0b3JlOgpAQCAtMzA4NSw5ICszMTYyLDEwIEBACiAgICAgfQogCiAgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKLSAgICBxdWFsbmFtZSA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOworICAgIHF1YWxuYW1lID0gYy0+dS0+dV9xdWFsbmFtZTsKKyAgICBQeV9JTkNSRUYocXVhbG5hbWUpOwogICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgaWYgKHF1YWxuYW1lID09IE5VTEwgfHwgY28gPT0gTlVMTCkKKyAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmICghY29tcGlsZXJfbWFrZV9jbG9zdXJlKGMsIGNvLCAwLCBxdWFsbmFtZSkpCkBAIC0zMTk3LDEyICszMjc1LDE4IEBACiAgICAgY2FzZSBOYW1lX2tpbmQ6CiAgICAgICAgIC8qIG9wdGltaXplIGF3YXkgbmFtZXMgdGhhdCBjYW4ndCBiZSByZWFzc2lnbmVkICovCiAgICAgICAgIGlkID0gUHlVbmljb2RlX0FzVVRGOChlLT52Lk5hbWUuaWQpOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiVHJ1ZSIpID09IDApIHJldHVybiAxOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiRmFsc2UiKSA9PSAwKSByZXR1cm4gMDsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIk5vbmUiKSA9PSAwKSByZXR1cm4gMDsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIl9fZGVidWdfXyIpID09IDApCi0gICAgICAgICAgICByZXR1cm4gISBjLT5jX29wdGltaXplOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgaWYgKGlkICYmIHN0cmNtcChpZCwgIl9fZGVidWdfXyIpID09IDApCisgICAgICAgICAgICByZXR1cm4gIWMtPmNfb3B0aW1pemU7CisgICAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOiB7CisgICAgICAgIFB5T2JqZWN0ICpvID0gZS0+di5OYW1lQ29uc3RhbnQudmFsdWU7CisgICAgICAgIGlmIChvID09IFB5X05vbmUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZSBpZiAobyA9PSBQeV9UcnVlKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UgaWYgKG8gPT0gUHlfRmFsc2UpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTMzNzgsNiArMzQ2Miw5IEBACiAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X0VsbGlwc2lzLCBjb25zdHMpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIGUtPnYuTmFtZUNvbnN0YW50LnZhbHVlLCBjb25zdHMpOworICAgICAgICBicmVhazsKICAgICAvKiBUaGUgZm9sbG93aW5nIGV4cHJzIGNhbiBiZSBhc3NpZ25tZW50IHRhcmdldHMuICovCiAgICAgY2FzZSBBdHRyaWJ1dGVfa2luZDoKICAgICAgICAgaWYgKGUtPnYuQXR0cmlidXRlLmN0eCAhPSBBdWdTdG9yZSkKQEAgLTM1NDcsMTIgKzM2MzQsMTIgQEAKICAgICBQeU9iamVjdCAqbG9jOwogICAgIFB5T2JqZWN0ICp1ID0gTlVMTCwgKnYgPSBOVUxMOwogCi0gICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHQoYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8pOworICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vKTsKICAgICBpZiAoIWxvYykgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIGxvYyA9IFB5X05vbmU7CiAgICAgfQotICAgIHUgPSBQeV9CdWlsZFZhbHVlKCIoT2lpTykiLCBjLT5jX2ZpbGVuYW1lX29iaiwgYy0+dS0+dV9saW5lbm8sCisgICAgdSA9IFB5X0J1aWxkVmFsdWUoIihPaWlPKSIsIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgIGMtPnUtPnVfY29sX29mZnNldCwgbG9jKTsKICAgICBpZiAoIXUpCiAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTQwNjAsOSArNDE0Nyw4IEBACiB7CiAgICAgUHlTVEVudHJ5T2JqZWN0ICpzdGUgPSBjLT51LT51X3N0ZTsKICAgICBpbnQgZmxhZ3MgPSAwLCBuOwotICAgIGlmIChzdGUtPnN0ZV90eXBlICE9IE1vZHVsZUJsb2NrKQotICAgICAgICBmbGFncyB8PSBDT19ORVdMT0NBTFM7CiAgICAgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gRnVuY3Rpb25CbG9jaykgeworICAgICAgICBmbGFncyB8PSBDT19ORVdMT0NBTFM7CiAgICAgICAgIGlmICghc3RlLT5zdGVfdW5vcHRpbWl6ZWQpCiAgICAgICAgICAgICBmbGFncyB8PSBDT19PUFRJTUlaRUQ7CiAgICAgICAgIGlmIChzdGUtPnN0ZV9uZXN0ZWQpCkBAIC00MTQzLDcgKzQyMjksNyBAQAogICAgICAgICAgICAgICAgICAgICBubG9jYWxzLCBzdGFja2RlcHRoKGMpLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGUsIGNvbnN0cywgbmFtZXMsIHZhcm5hbWVzLAogICAgICAgICAgICAgICAgICAgICBmcmVldmFycywgY2VsbHZhcnMsCi0gICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWVfb2JqLCBjLT51LT51X25hbWUsCisgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgYy0+dS0+dV9maXJzdGxpbmVubywKICAgICAgICAgICAgICAgICAgICAgYS0+YV9sbm90YWIpOwogIGVycm9yOgpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbmR2YXIuaCBiL1B5dGhvbi9jb25kdmFyLmgKaW5kZXggYmJiNDBiYS4uZTAyMmRjNyAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbmR2YXIuaAorKysgYi9QeXRob24vY29uZHZhci5oCkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgKiBidXQgd2UgYXJlIHNhZmUgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgYSBzZW1hcGhvcmUgd2ljaCBoYXMgYW4gaW50ZXJuYWwKICAgICAgKiBjb3VudC4KICAgICAgKi8KLSAgICB3YWl0ID0gV2FpdEZvclNpbmdsZU9iamVjdChjdi0+c2VtLCBtcyk7CisgICAgd2FpdCA9IFdhaXRGb3JTaW5nbGVPYmplY3RFeChjdi0+c2VtLCBtcywgRkFMU0UpOwogICAgIFB5TVVURVhfTE9DSyhjcyk7CiAgICAgaWYgKHdhaXQgIT0gV0FJVF9PQkpFQ1RfMCkKICAgICAgICAgLS1jdi0+d2FpdGluZzsKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX2FpeC5jIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKaW5kZXggZjQwYTBiZS4uNWFjMzBlZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2R5bmxvYWRfYWl4LmMKKysrIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKQEAgLTMwLDExICszMCwxMSBAQAogc3RhdGljIGludAogYWl4X2dldG9sZG1vZHVsZXModm9pZCAqKm1vZGxpc3RwdHIpCiB7Ci0gICAgcmVnaXN0ZXIgTW9kdWxlUHRyICAgICAgIG1vZHB0ciwgcHJldm1vZHB0cjsKLSAgICByZWdpc3RlciBzdHJ1Y3QgbGRfaW5mbyAgKmxkaXB0cjsKLSAgICByZWdpc3RlciBjaGFyICAgICAgICAgICAgKmxkaWJ1ZjsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICAgZXJyZmxhZywgYnVmc2l6ZSA9IDEwMjQ7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50ICAgIG9mZnNldDsKKyAgICBNb2R1bGVQdHIgICAgICAgbW9kcHRyLCBwcmV2bW9kcHRyOworICAgIHN0cnVjdCBsZF9pbmZvICAqbGRpcHRyOworICAgIGNoYXIgICAgICAgICAgICAqbGRpYnVmOworICAgIGludCAgICAgICAgICAgICBlcnJmbGFnLCBidWZzaXplID0gMTAyNDsKKyAgICB1bnNpZ25lZCBpbnQgICAgb2Zmc2V0OwogICAgIGNoYXIgKnByb2duYW1lID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKIAogICAgIC8qCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICBjaGFyICptZXNzYWdlWzEwMjRdLCBlcnJidWZbMTAyNF07CiAgICAgUHlPYmplY3QgKnBhdGhuYW1lX29iID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXJyYnVmX29iID0gTlVMTDsKLSAgICByZWdpc3RlciBpbnQgaSxqOworICAgIGludCBpLGo7CiAKICAgICBzdHJ1Y3QgZXJydGFiIHsKICAgICAgICAgaW50IGVyck5vOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R5bmxvYWRfb3MyLmMgYi9QeXRob24vZHlubG9hZF9vczIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUxYjkwNy4uMDAwMDAwMAotLS0gYS9QeXRob24vZHlubG9hZF9vczIuYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLQotLyogU3VwcG9ydCBmb3IgZHluYW1pYyBsb2FkaW5nIG9mIGV4dGVuc2lvbiBtb2R1bGVzICovCi0KLSNkZWZpbmUgIElOQ0xfRE9TRVJST1JTCi0jZGVmaW5lICBJTkNMX0RPU01PRFVMRU1HUgotI2luY2x1ZGUgPG9zMi5oPgotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAiaW1wb3J0ZGwuaCIKLQotCi1jb25zdCBjaGFyICpfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWJbXSA9IHsiLnB5ZCIsICIuZGxsIiwgTlVMTH07Ci0KLWRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jKGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKLXsKLSAgICBkbF9mdW5jcHRyIHA7Ci0gICAgQVBJUkVUICByYzsKLSAgICBITU9EVUxFIGhETEw7Ci0gICAgY2hhciBmYWlscmVhc29uWzI1Nl07Ci0gICAgY2hhciBmdW5jbmFtZVsyNThdOwotCi0gICAgcmMgPSBEb3NMb2FkTW9kdWxlKGZhaWxyZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmYWlscmVhc29uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICZoRExMKTsKLQotICAgIGlmIChyYyAhPSBOT19FUlJPUikgewotICAgICAgICBjaGFyIGVyckJ1ZlsyNTZdOwotICAgICAgICBQeU9TX3NucHJpbnRmKGVyckJ1Ziwgc2l6ZW9mKGVyckJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgIkRMTCBsb2FkIGZhaWxlZCwgcmMgPSAlZDogJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICByYywgZmFpbHJlYXNvbik7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwgZXJyQnVmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgUHlPU19zbnByaW50ZihmdW5jbmFtZSwgc2l6ZW9mKGZ1bmNuYW1lKSwgIlB5SW5pdF8lLjIwMHMiLCBzaG9ydG5hbWUpOwotICAgIHJjID0gRG9zUXVlcnlQcm9jQWRkcihoRExMLCAwTCwgZnVuY25hbWUsICZwKTsKLSAgICBpZiAocmMgIT0gTk9fRVJST1IpCi0gICAgICAgIHAgPSBOVUxMOyAvKiBTaWduaWZ5IEZhaWx1cmUgdG8gQWNxdWlyZSBFbnRyeXBvaW50ICovCi0gICAgcmV0dXJuIHA7Ci19CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9zaGxpYi5jIGIvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYwppbmRleCA3NTU0NGVkLi44ODhmYmZjIDEwMDY0NAotLS0gYS9QeXRob24vZHlubG9hZF9zaGxpYi5jCisrKyBiL1B5dGhvbi9keW5sb2FkX3NobGliLmMKQEAgLTE4LDEwICsxOCw2IEBACiAKICNpZmRlZiBIQVZFX0RMRkNOX0gKICNpbmNsdWRlIDxkbGZjbi5oPgotI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgImRsZmNuLmgiCi0jZW5kaWYKICNlbmRpZgogCiAjaWYgKGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykpICYmICFkZWZpbmVkKF9fRUxGX18pCkBAIC00MCwxMCArMzYsNiBAQAogI2lmZGVmIF9fQ1lHV0lOX18KICAgICAiLmRsbCIsCiAjZWxzZSAgLyogIV9fQ1lHV0lOX18gKi8KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgICIucHlkIiwKLSAgICAiLmRsbCIsCi0jZWxzZSAgLyogIShkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSkgKi8KICNpZmRlZiBfX1ZNUwogICAgICIuZXhlIiwKICAgICAiLkVYRSIsCkBAIC01Miw3ICs0NCw2IEBACiAgICAgIi5hYmkiIFBZVEhPTl9BQklfU1RSSU5HICIuc28iLAogICAgICIuc28iLAogI2VuZGlmICAvKiBfX1ZNUyAqLwotI2VuZGlmICAvKiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSAqLwogI2VuZGlmICAvKiBfX0NZR1dJTl9fICovCiAgICAgTlVMTCwKIH07CkBAIC0xMTQsOSArMTA1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotI2lmICEoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykpCiAgICAgZGxvcGVuZmxhZ3MgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnAtPmRsb3BlbmZsYWdzOwotI2VuZGlmCiAKICNpZmRlZiBfX1ZNUwogICAgIC8qIFZNUyBjdXJyZW50bHkgZG9uJ3QgYWxsb3cgYSBwYXRobmFtZSwgdXNlIGEgbG9naWNhbCBuYW1lIGluc3RlYWQgKi8KQEAgLTEzMiwxOSArMTIxLDMwIEBACiAgICAgaGFuZGxlID0gZGxvcGVuKHBhdGhuYW1lLCBkbG9wZW5mbGFncyk7CiAKICAgICBpZiAoaGFuZGxlID09IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKm1vZF9uYW1lID0gTlVMTDsKLSAgICAgICAgUHlPYmplY3QgKnBhdGggPSBOVUxMOwotICAgICAgICBQeU9iamVjdCAqZXJyb3Jfb2IgPSBOVUxMOworICAgICAgICBQeU9iamVjdCAqbW9kX25hbWU7CisgICAgICAgIFB5T2JqZWN0ICpwYXRoOworICAgICAgICBQeU9iamVjdCAqZXJyb3Jfb2I7CiAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9yID0gZGxlcnJvcigpOwogICAgICAgICBpZiAoZXJyb3IgPT0gTlVMTCkKICAgICAgICAgICAgIGVycm9yID0gInVua25vd24gZGxvcGVuKCkgZXJyb3IiOwogICAgICAgICBlcnJvcl9vYiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGVycm9yKTsKLSAgICAgICAgcGF0aCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHBhdGhuYW1lKTsKKyAgICAgICAgaWYgKGVycm9yX29iID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgbW9kX25hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhzaG9ydG5hbWUpOworICAgICAgICBpZiAobW9kX25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVycm9yX29iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHBhdGggPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhwYXRobmFtZSk7CisgICAgICAgIGlmIChwYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlcnJvcl9vYik7CisgICAgICAgICAgICBQeV9ERUNSRUYobW9kX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgUHlFcnJfU2V0SW1wb3J0RXJyb3IoZXJyb3Jfb2IsIG1vZF9uYW1lLCBwYXRoKTsKLSAgICAgICAgUHlfWERFQ1JFRihlcnJvcl9vYik7Ci0gICAgICAgIFB5X1hERUNSRUYocGF0aCk7Ci0gICAgICAgIFB5X1hERUNSRUYobW9kX25hbWUpOworICAgICAgICBQeV9ERUNSRUYoZXJyb3Jfb2IpOworICAgICAgICBQeV9ERUNSRUYobW9kX25hbWUpOworICAgICAgICBQeV9ERUNSRUYocGF0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoZnAgIT0gTlVMTCAmJiBuaGFuZGxlcyA8IDEyOCkKZGlmZiAtLWdpdCBhL1B5dGhvbi9lcnJvcnMuYyBiL1B5dGhvbi9lcnJvcnMuYwppbmRleCA2MjZiMTZlLi4xODMyYjViIDEwMDY0NAotLS0gYS9QeXRob24vZXJyb3JzLmMKKysrIGIvUHl0aG9uL2Vycm9ycy5jCkBAIC03MSw2ICs3MSwxMSBAQAogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCB8fCAhUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgICAgIC8qIFdlIG11c3Qgbm9ybWFsaXplIHRoZSB2YWx1ZSByaWdodCBub3cgKi8KICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzLCAqZml4ZWRfdmFsdWU7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgICAgIC8qIGluIGRlYnVnIG1vZGUsIFB5RXZhbF9FdmFsRnJhbWVFeCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uCisgICAgICAgICAgICAgICBlcnJvciBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKICAgICAgICAgICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2sodmFsdWUpKSB7CkBAIC0xMTIsNiArMTE3LDIwIEBACiAgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CiB9CiAKKy8qIFNldCBhIGtleSBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnQsIHdyYXBwaW5nIGl0IGluIGEKKyAqIHR1cGxlIGF1dG9tYXRpY2FsbHkgc28gdGhhdCB0dXBsZSBrZXlzIGFyZSBub3QgdW5wYWNrZWQgYXMgdGhlCisgKiBleGNlcHRpb24gYXJndW1lbnRzLiAqLwordm9pZAorX1B5RXJyX1NldEtleUVycm9yKFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnR1cDsKKyAgICB0dXAgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKKyAgICBpZiAoIXR1cCkKKyAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgd2lsbCBleHBlY3QgZXJyb3IgdG8gYmUgc2V0IGFueXdheSAqLworICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgdHVwKTsKKyAgICBQeV9ERUNSRUYodHVwKTsKK30KKwogdm9pZAogUHlFcnJfU2V0Tm9uZShQeU9iamVjdCAqZXhjZXB0aW9uKQogewpAQCAtMjI3LDEyICsyNDYsMjEgQEAKICAgICAgICB2YWx1ZSB3aWxsIGJlIGFuIGluc3RhbmNlLgogICAgICovCiAgICAgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodHlwZSkpIHsKKyAgICAgICAgaW50IGlzX3N1YmNsYXNzOworICAgICAgICBpZiAoaW5jbGFzcykgeworICAgICAgICAgICAgaXNfc3ViY2xhc3MgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGluY2xhc3MsIHR5cGUpOworICAgICAgICAgICAgaWYgKGlzX3N1YmNsYXNzIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNfc3ViY2xhc3MgPSAwOworCiAgICAgICAgIC8qIGlmIHRoZSB2YWx1ZSB3YXMgbm90IGFuIGluc3RhbmNlLCBvciBpcyBub3QgYW4gaW5zdGFuY2UKICAgICAgICAgICAgd2hvc2UgY2xhc3MgaXMgKG9yIGlzIGRlcml2ZWQgZnJvbSkgdHlwZSwgdGhlbiB1c2UgdGhlCiAgICAgICAgICAgIHZhbHVlIGFzIGFuIGFyZ3VtZW50IHRvIGluc3RhbnRpYXRpb24gb2YgdGhlIHR5cGUKICAgICAgICAgICAgY2xhc3MuCiAgICAgICAgICovCi0gICAgICAgIGlmICghaW5jbGFzcyB8fCAhUHlPYmplY3RfSXNTdWJjbGFzcyhpbmNsYXNzLCB0eXBlKSkgeworICAgICAgICBpZiAoIWluY2xhc3MgfHwgIWlzX3N1YmNsYXNzKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgKnJlczsKIAogICAgICAgICAgICAgaWYgKHZhbHVlID09IFB5X05vbmUpCkBAIC0zNjYsNiArMzk0LDEyIEBACiBQeU9iamVjdCAqCiBQeUVycl9Ob01lbW9yeSh2b2lkKQogeworICAgIGlmIChQeV9UWVBFKFB5RXhjX01lbW9yeUVycm9yKSA9PSBOVUxMKSB7CisgICAgICAgIC8qIFB5RXJyX05vTWVtb3J5KCkgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSBQeUV4Y19NZW1vcnlFcnJvciBoYXMgYmVlbgorICAgICAgICAgICBpbml0aWFsaXplZCBieSBfUHlFeGNfSW5pdCgpICovCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIk91dCBvZiBtZW1vcnkgYW5kIFB5RXhjX01lbW9yeUVycm9yIGlzIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemVkIHlldCIpOworICAgIH0KICAgICBQeUVycl9TZXROb25lKFB5RXhjX01lbW9yeUVycm9yKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTU4OCw3ICs2MjIsNyBAQAogCiBQeU9iamVjdCAqUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoaW50IGllcnIpCiB7Ci0gICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgTlVMTCk7CiB9CiBQeU9iamVjdCAqUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoCkBAIC01OTcsNyArNjMxLDcgQEAKIHsKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSkgOiBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBuYW1lKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC02MTEsNyArNjQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZShmaWxlbmFtZSwgd2NzbGVuKGZpbGVuYW1lKSkgOgogICAgICAgICAgICAgIE5VTEw7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIG5hbWUpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTY0Niw4ICs2ODAsMTEgQEAKIAogICAgIFB5X0lOQ1JFRihtc2cpOwogICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgbXNnKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJuYW1lIiwgbmFtZSk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAicGF0aCIsIHBhdGgpOworCisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgIm5hbWUiLCBuYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJwYXRoIiwgcGF0aCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbChQeUV4Y19JbXBvcnRFcnJvciwgYXJncywga3dhcmdzKTsKICAgICBpZiAoZXJyb3IgIT0gTlVMTCkgewpAQCAtNjc1LDYgKzcxMiw3IEBACiB2b2lkCiBQeUVycl9CYWRJbnRlcm5hbENhbGwodm9pZCkKIHsKKyAgICBhc3NlcnQoMCAmJiAiYmFkIGFyZ3VtZW50IHRvIGludGVybmFsIGZ1bmN0aW9uIik7CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAiYmFkIGFyZ3VtZW50IHRvIGludGVybmFsIGZ1bmN0aW9uIik7CiB9CkBAIC02OTQsNiArNzMyLDEyIEBACiAgICAgdmFfc3RhcnQodmFyZ3MpOwogI2VuZGlmCiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIGluIGRlYnVnIG1vZGUsIFB5RXZhbF9FdmFsRnJhbWVFeCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yCisgICAgICAgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCB3aGVuIGl0IGlzIGNhbGxlZCAqLworICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKKwogICAgIHN0cmluZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhcmdzKTsKICAgICBQeUVycl9TZXRPYmplY3QoZXhjZXB0aW9uLCBzdHJpbmcpOwogICAgIFB5X1hERUNSRUYoc3RyaW5nKTsKQEAgLTc5NSw2MCArODM5LDg0IEBACiB7CiAgICAgX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CiAgICAgUHlPYmplY3QgKmYsICp0LCAqdiwgKnRiOwotICAgIFB5RXJyX0ZldGNoKCZ0LCAmdiwgJnRiKTsKLSAgICBmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKLSAgICBpZiAoZiAhPSBOVUxMICYmIGYgIT0gUHlfTm9uZSkgewotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIkV4Y2VwdGlvbiAiLCBmKTsKLSAgICAgICAgaWYgKHQpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0KiBtb2R1bGVOYW1lOwotICAgICAgICAgICAgY2hhciogY2xhc3NOYW1lOwotICAgICAgICAgICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodCkpOwotICAgICAgICAgICAgY2xhc3NOYW1lID0gUHlFeGNlcHRpb25DbGFzc19OYW1lKHQpOwotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqZG90ID0gc3RycmNocihjbGFzc05hbWUsICcuJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGRvdCAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBkb3QrMTsKLSAgICAgICAgICAgIH0KKyAgICBQeU9iamVjdCAqbW9kdWxlTmFtZSA9IE5VTEw7CisgICAgY2hhciogY2xhc3NOYW1lOwogCi0gICAgICAgICAgICBtb2R1bGVOYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZCh0LCAmUHlJZF9fX21vZHVsZV9fKTsKLSAgICAgICAgICAgIGlmIChtb2R1bGVOYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGNoYXIqIG1vZHN0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobW9kdWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1vZHN0ciAmJgotICAgICAgICAgICAgICAgICAgICBzdHJjbXAobW9kc3RyLCAiYnVpbHRpbnMiKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKG1vZHN0ciwgZik7Ci0gICAgICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiLiIsIGYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhjbGFzc05hbWUsIGYpOwotICAgICAgICAgICAgaWYgKHYgJiYgdiAhPSBQeV9Ob25lKSB7Ci0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGYpOwotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdCh2LCBmLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X1hERUNSRUYobW9kdWxlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgaW4gIiwgZik7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3Qob2JqLCBmLCAwKTsKLSAgICAgICAgfQotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiBpZ25vcmVkXG4iLCBmKTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogSnVzdCBpbiBjYXNlICovCisgICAgUHlFcnJfRmV0Y2goJnQsICZ2LCAmdGIpOworCisgICAgZiA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgaWYgKGYgPT0gTlVMTCB8fCBmID09IFB5X05vbmUpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGlmIChvYmopIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiRXhjZXB0aW9uIGlnbm9yZWQgaW46ICIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQorCisgICAgaWYgKFB5VHJhY2VCYWNrX1ByaW50KHRiLCBmKSA8IDApCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGlmICghdCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodCkpOworICAgIGNsYXNzTmFtZSA9IFB5RXhjZXB0aW9uQ2xhc3NfTmFtZSh0KTsKKyAgICBpZiAoY2xhc3NOYW1lICE9IE5VTEwpIHsKKyAgICAgICAgY2hhciAqZG90ID0gc3RycmNocihjbGFzc05hbWUsICcuJyk7CisgICAgICAgIGlmIChkb3QgIT0gTlVMTCkKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9IGRvdCsxOworICAgIH0KKworICAgIG1vZHVsZU5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHQsICZQeUlkX19fbW9kdWxlX18pOworICAgIGlmIChtb2R1bGVOYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG1vZHVsZU5hbWUsICJidWlsdGlucyIpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QobW9kdWxlTmFtZSwgZiwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiLiIsIGYpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNsYXNzTmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoY2xhc3NOYW1lLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgaWYgKHYgJiYgdiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KHYsIGYsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGYpIDwgMCkKKyAgICAgICAgZ290byBkb25lOworCitkb25lOgorICAgIFB5X1hERUNSRUYobW9kdWxlTmFtZSk7CiAgICAgUHlfWERFQ1JFRih0KTsKICAgICBQeV9YREVDUkVGKHYpOwogICAgIFB5X1hERUNSRUYodGIpOworICAgIFB5RXJyX0NsZWFyKCk7IC8qIEp1c3QgaW4gY2FzZSAqLwogfQogCiBleHRlcm4gUHlPYmplY3QgKlB5TW9kdWxlX0dldFdhcm5pbmdzTW9kdWxlKHZvaWQpOwogCiAKIHZvaWQKLVB5RXJyX1N5bnRheExvY2F0aW9uKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKSB7CitQeUVycl9TeW50YXhMb2NhdGlvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBsaW5lbm8sIC0xKTsKIH0KIApAQCAtODU4LDcgKzkyNiw3IEBACiAgICB0byBtYWtlIHByaW50aW5nIG9mIGV4Y2VwdGlvbnMgYmVsaWV2ZSBpdCBpcyBhIHN5bnRheCBlcnJvci4gKi8KIAogdm9pZAotUHlFcnJfU3ludGF4TG9jYXRpb25FeChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIFB5T2JqZWN0ICpleGMsICp2LCAqdGIsICp0bXA7CiAgICAgX1B5X0lERU5USUZJRVIoZmlsZW5hbWUpOwpAQCAtODkyLDE2ICs5NjAsMTAgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZmlsZW5hbWUgIT0gTlVMTCkgewotICAgICAgICB0bXAgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh2LCAmUHlJZF9maWxlbmFtZSwgZmlsZW5hbWUpKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh2LCAmUHlJZF9maWxlbmFtZSwgdG1wKSkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgICAgIH0KIAotICAgICAgICB0bXAgPSBQeUVycl9Qcm9ncmFtVGV4dChmaWxlbmFtZSwgbGluZW5vKTsKKyAgICAgICAgdG1wID0gUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoZmlsZW5hbWUsIGxpbmVubyk7CiAgICAgICAgIGlmICh0bXApIHsKICAgICAgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX3RleHQsIHRtcCkpCiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTkzMSwyMiArOTkzLDMzIEBACiAgICAgUHlFcnJfUmVzdG9yZShleGMsIHYsIHRiKTsKIH0KIAordm9pZAorUHlFcnJfU3ludGF4TG9jYXRpb25FeChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCit7CisgICAgUHlPYmplY3QgKmZpbGVvYmo7CisgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW9iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgICAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBmaWxlb2JqID0gTlVMTDsKKyAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlb2JqLCBsaW5lbm8sIGNvbF9vZmZzZXQpOworICAgIFB5X1hERUNSRUYoZmlsZW9iaik7Cit9CisKIC8qIEF0dGVtcHQgdG8gbG9hZCB0aGUgbGluZSBvZiB0ZXh0IHRoYXQgdGhlIGV4Y2VwdGlvbiByZWZlcnMgdG8uICBJZiBpdAogICAgZmFpbHMsIGl0IHdpbGwgcmV0dXJuIE5VTEwgYnV0IHdpbGwgbm90IHNldCBhbiBleGNlcHRpb24uCiAKICAgIFhYWCBUaGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHF1aXRlIHNpbWlsYXIgdG8gdGhlCiAgICBmdW5jdGlvbmFsaXR5IGluIHRiX2Rpc3BsYXlsaW5lKCkgaW4gdHJhY2ViYWNrLmMuICovCiAKLVB5T2JqZWN0ICoKLVB5RXJyX1Byb2dyYW1UZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQorc3RhdGljIFB5T2JqZWN0ICoKK2Vycl9wcm9ncmFtdGV4dChGSUxFICpmcCwgaW50IGxpbmVubykKIHsKLSAgICBGSUxFICpmcDsKICAgICBpbnQgaTsKICAgICBjaGFyIGxpbmVidWZbMTAwMF07CiAKLSAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCAqZmlsZW5hbWUgPT0gJ1wwJyB8fCBsaW5lbm8gPD0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOwogICAgIGlmIChmcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZW5vOyBpKyspIHsKQEAgLTk3Nyw2ICsxMDUwLDI2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK1B5T2JqZWN0ICoKK1B5RXJyX1Byb2dyYW1UZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQoreworICAgIEZJTEUgKmZwOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMIHx8ICpmaWxlbmFtZSA9PSAnXDAnIHx8IGxpbmVubyA8PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmcCA9IF9QeV9mb3BlbihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOworICAgIHJldHVybiBlcnJfcHJvZ3JhbXRleHQoZnAsIGxpbmVubyk7Cit9CisKK1B5T2JqZWN0ICoKK1B5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5lbm8gPD0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGZpbGVuYW1lLCAiciIgUFlfU1RESU9URVhUTU9ERSk7CisgICAgcmV0dXJuIGVycl9wcm9ncmFtdGV4dChmcCwgbGluZW5vKTsKK30KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi9maWxldXRpbHMuYyBiL1B5dGhvbi9maWxldXRpbHMuYwppbmRleCBiN2M0MmU4Li5lZWNiYjNiIDEwMDY0NAotLS0gYS9QeXRob24vZmlsZXV0aWxzLmMKKysrIGIvUHl0aG9uL2ZpbGV1dGlscy5jCkBAIC05LDIwICs5LDM5IEBACiAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KICNlbmRpZgogCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIEhBVkVfRkNOVExfSCAqLworCiAjaWZkZWYgX19BUFBMRV9fCiBleHRlcm4gd2NoYXJfdCogX1B5X0RlY29kZVVURjhfc3Vycm9nYXRlZXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSk7CiAjZW5kaWYKIAorI2lmZGVmIE9fQ0xPRVhFQworLyogRG9lcyBvcGVuKCkgc3VwcG9ydCB0aGUgT19DTE9FWEVDIGZsYWc/IFBvc3NpYmxlIHZhbHVlczoKKworICAgLTE6IHVua25vd24KKyAgICAwOiBvcGVuKCkgaWdub3JlcyBPX0NMT0VYRUMgZmxhZywgZXg6IExpbnV4IGtlcm5lbCBvbGRlciB0aGFuIDIuNi4yMworICAgIDE6IG9wZW4oKSBzdXBwb3J0cyBPX0NMT0VYRUMgZmxhZywgY2xvc2Utb24tZXhlYyBpcyBzZXQKKworICAgVGhlIGZsYWcgaXMgdXNlZCBieSBfUHlfb3BlbigpLCBpby5GaWxlSU8gYW5kIG9zLm9wZW4oKSAqLworaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3MgPSAtMTsKKyNlbmRpZgorCiBQeU9iamVjdCAqCiBfUHlfZGV2aWNlX2VuY29kaW5nKGludCBmZCkKIHsKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoTVNfV0lONjQpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIFVJTlQgY3A7CiAjZW5kaWYKICAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkgfHwgIWlzYXR0eShmZCkpIHsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChNU19XSU42NCkKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgaWYgKGZkID09IDApCiAgICAgICAgIGNwID0gR2V0Q29uc29sZUNQKCk7CiAgICAgZWxzZSBpZiAoZmQgPT0gMSB8fCBmZCA9PSAyKQpAQCAtNjAsNyArNzksNyBAQAogICAgd29ya2Fyb3VuZCBpcyBhbHNvIGVuYWJsZWQgb24gZXJyb3IsIGZvciBleGFtcGxlIGlmIGdldHRpbmcgdGhlIGxvY2FsZQogICAgZmFpbGVkLgogCi0gICBWYWx1ZXMgb2YgbG9jYWxlX2lzX2FzY2lpOgorICAgVmFsdWVzIG9mIGZvcmNlX2FzY2lpOgogCiAgICAgICAgMTogdGhlIHdvcmthcm91bmQgaXMgdXNlZDogX1B5X3djaGFyMmNoYXIoKSB1c2VzCiAgICAgICAgICAgZW5jb2RlX2FzY2lpX3N1cnJvZ2F0ZWVzY2FwZSgpIGFuZCBfUHlfY2hhcjJ3Y2hhcigpIHVzZXMKQEAgLTIwMSw3ICsyMjAsNyBAQAogICAgIHVuc2lnbmVkIGNoYXIgKmluOwogICAgIHdjaGFyX3QgKm91dDsKIAotICAgIHJlcyA9IFB5TWVtX01hbGxvYygoc3RybGVuKGFyZykrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICByZXMgPSBQeU1lbV9SYXdNYWxsb2MoKHN0cmxlbihhcmcpKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFyZXMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMjksNyArMjQ4LDcgQEAKICAgIFVzZSBfUHlfd2NoYXIyY2hhcigpIHRvIGVuY29kZSB0aGUgY2hhcmFjdGVyIHN0cmluZyBiYWNrIHRvIGEgYnl0ZSBzdHJpbmcuCiAKICAgIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nICh1c2UKLSAgIFB5TWVtX0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpIGFuZCB3cml0ZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gd2lkZQorICAgUHlNZW1fUmF3RnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSkgYW5kIHdyaXRlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiB3aWRlCiAgICBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0ZXIgaW50byAqc2l6ZSBpZiBzaXplIGlzIG5vdCBOVUxMLCBvcgogICAgTlVMTCBvbiBlcnJvciAoZGVjb2Rpbmcgb3IgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IpLiBJZiBzaXplIGlzIG5vdCBOVUxMLAogICAgKnNpemUgaXMgc2V0IHRvIChzaXplX3QpLTEgb24gbWVtb3J5IGVycm9yIGFuZCAoc2l6ZV90KS0yIG9uIGRlY29kaW5nCkBAIC0yNTQsOSArMjczLDkgQEAKICAgICB3Y2hhcl90ICpyZXM7CiAgICAgc2l6ZV90IGFyZ3NpemU7CiAgICAgc2l6ZV90IGNvdW50OworI2lmZGVmIEhBVkVfTUJSVE9XQwogICAgIHVuc2lnbmVkIGNoYXIgKmluOwogICAgIHdjaGFyX3QgKm91dDsKLSNpZmRlZiBIQVZFX01CUlRPV0MKICAgICBtYnN0YXRlX3QgbWJzOwogI2VuZGlmCiAKQEAgLTI4Myw3ICszMDIsNyBAQAogICAgIGFyZ3NpemUgPSBtYnN0b3djcyhOVUxMLCBhcmcsIDApOwogI2VuZGlmCiAgICAgaWYgKGFyZ3NpemUgIT0gKHNpemVfdCktMSkgewotICAgICAgICByZXMgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYygoYXJnc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgICAgICByZXMgPSAod2NoYXJfdCAqKVB5TWVtX1Jhd01hbGxvYygoYXJnc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAoIXJlcykKICAgICAgICAgICAgIGdvdG8gb29tOwogICAgICAgICBjb3VudCA9IG1ic3Rvd2NzKHJlcywgYXJnLCBhcmdzaXplKzEpOwpAQCAtMjkyLDcgKzMxMSw3IEBACiAgICAgICAgICAgICAvKiBPbmx5IHVzZSB0aGUgcmVzdWx0IGlmIGl0IGNvbnRhaW5zIG5vCiAgICAgICAgICAgICAgICBzdXJyb2dhdGUgY2hhcmFjdGVycy4gKi8KICAgICAgICAgICAgIGZvciAodG1wID0gcmVzOyAqdG1wICE9IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKnRtcCA8IDB4ZDgwMCB8fCAqdG1wID4gMHhkZmZmKTsgdG1wKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKCp0bXApOyB0bXArKykKICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICBpZiAoKnRtcCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNpemUgIT0gTlVMTCkKQEAgLTMwMCw3ICszMTksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgUHlNZW1fRnJlZShyZXMpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHJlcyk7CiAgICAgfQogICAgIC8qIENvbnZlcnNpb24gZmFpbGVkLiBGYWxsIGJhY2sgdG8gZXNjYXBpbmcgd2l0aCBzdXJyb2dhdGVlc2NhcGUuICovCiAjaWZkZWYgSEFWRV9NQlJUT1dDCkBAIC0zMDksNyArMzI4LDcgQEAKICAgICAvKiBPdmVyYWxsb2NhdGU7IGFzIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgaW4gdGhlIGFyZ3VtZW50LCB0aGUKICAgICAgICBhY3R1YWwgb3V0cHV0IGNvdWxkIHVzZSBsZXNzIG1lbW9yeS4gKi8KICAgICBhcmdzaXplID0gc3RybGVuKGFyZykgKyAxOwotICAgIHJlcyA9ICh3Y2hhcl90KilQeU1lbV9NYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOworICAgIHJlcyA9ICh3Y2hhcl90KilQeU1lbV9SYXdNYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghcmVzKQogICAgICAgICBnb3RvIG9vbTsKICAgICBpbiA9ICh1bnNpZ25lZCBjaGFyKilhcmc7CkBAIC0zMjUsNyArMzQ0LDcgQEAKICAgICAgICAgICAgICAgIHNpbmNlIHdlIHByb3ZpZGUgZXZlcnl0aGluZyB0aGF0IHdlIGhhdmUgLQogICAgICAgICAgICAgICAgdW5sZXNzIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBDIGxpYnJhcnksIG9yIEkKICAgICAgICAgICAgICAgIG1pc3VuZGVyc3Rvb2QgaG93IG1icnRvd2Mgd29ya3MuICovCi0gICAgICAgICAgICBQeU1lbV9GcmVlKHJlcyk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHJlcyk7CiAgICAgICAgICAgICBpZiAoc2l6ZSAhPSBOVUxMKQogICAgICAgICAgICAgICAgICpzaXplID0gKHNpemVfdCktMjsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzM4LDcgKzM1Nyw3IEBACiAgICAgICAgICAgICBtZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoKm91dCA+PSAweGQ4MDAgJiYgKm91dCA8PSAweGRmZmYpIHsKKyAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKCpvdXQpKSB7CiAgICAgICAgICAgICAvKiBTdXJyb2dhdGUgY2hhcmFjdGVyLiAgRXNjYXBlIHRoZSBvcmlnaW5hbAogICAgICAgICAgICAgICAgYnl0ZSBzZXF1ZW5jZSB3aXRoIHN1cnJvZ2F0ZWVzY2FwZS4gKi8KICAgICAgICAgICAgIGFyZ3NpemUgLT0gY29udmVydGVkOwpAQCAtNTQ3LDE0ICs1NjYsMjE1IEBACiAKICNlbmRpZgogCi0vKiBPcGVuIGEgZmlsZS4gVXNlIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGxvY2FsZQotICAgZW5jb2RpbmcgYW5kIHVzZSBmb3BlbigpIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbnQKK2dldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCByYWlzZSkKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKIAorICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBoYW5kbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFHZXRIYW5kbGVJbmZvcm1hdGlvbihoYW5kbGUsICZmbGFncykpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gKGZsYWdzICYgSEFORExFX0ZMQUdfSU5IRVJJVCk7CisjZWxzZQorICAgIGludCBmbGFnczsKKworICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQsIDApOworICAgIGlmIChmbGFncyA9PSAtMSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuICEoZmxhZ3MgJiBGRF9DTE9FWEVDKTsKKyNlbmRpZgorfQorCisvKiBHZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisgICBSZXR1cm4gMSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGNhbiBiZSBpbmhlcml0ZWQsIDAgaWYgaXQgY2Fubm90LAorICAgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitpbnQKK19QeV9nZXRfaW5oZXJpdGFibGUoaW50IGZkKQoreworICAgIHJldHVybiBnZXRfaW5oZXJpdGFibGUoZmQsIDEpOworfQorCitzdGF0aWMgaW50CitzZXRfaW5oZXJpdGFibGUoaW50IGZkLCBpbnQgaW5oZXJpdGFibGUsIGludCByYWlzZSwgaW50ICphdG9taWNfZmxhZ193b3JrcykKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9DTEVYKSAmJiBkZWZpbmVkKEZJT05DTEVYKQorICAgIGludCByZXF1ZXN0OworICAgIGludCBlcnI7CisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkKKyAgICBpbnQgZmxhZ3M7CisgICAgaW50IHJlczsKKyNlbmRpZgorCisgICAgLyogYXRvbWljX2ZsYWdfd29ya3MgY2FuIG9ubHkgYmUgdXNlZCB0byBtYWtlIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICBub24taW5oZXJpdGFibGUgKi8KKyAgICBhc3NlcnQoIShhdG9taWNfZmxhZ193b3JrcyAhPSBOVUxMICYmIGluaGVyaXRhYmxlKSk7CisKKyAgICBpZiAoYXRvbWljX2ZsYWdfd29ya3MgIT0gTlVMTCAmJiAhaW5oZXJpdGFibGUpIHsKKyAgICAgICAgaWYgKCphdG9taWNfZmxhZ193b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgaW50IGluaGVyaXRhYmxlID0gZ2V0X2luaGVyaXRhYmxlKGZkLCByYWlzZSk7CisgICAgICAgICAgICBpZiAoaW5oZXJpdGFibGUgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgKmF0b21pY19mbGFnX3dvcmtzID0gIWluaGVyaXRhYmxlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCphdG9taWNfZmxhZ193b3JrcykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgZmxhZ3MgPSBIQU5ETEVfRkxBR19JTkhFUklUOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgPSAwOworICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oaGFuZGxlLCBIQU5ETEVfRkxBR19JTkhFUklULCBmbGFncykpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9DTEVYKSAmJiBkZWZpbmVkKEZJT05DTEVYKQorICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgcmVxdWVzdCA9IEZJT05DTEVYOworICAgIGVsc2UKKyAgICAgICAgcmVxdWVzdCA9IEZJT0NMRVg7CisgICAgZXJyID0gaW9jdGwoZmQsIHJlcXVlc3QpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworCisjZWxzZQorICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOworICAgIGlmIChmbGFncyA8IDApIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyAmPSB+RkRfQ0xPRVhFQzsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzIHw9IEZEX0NMT0VYRUM7CisgICAgcmVzID0gZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyogTWFrZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG5vbi1pbmhlcml0YWJsZS4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAorbWFrZV9ub25faW5oZXJpdGFibGUoaW50IGZkKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIE5VTEwpOworfQorCisvKiBTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisgICBPbiBzdWNjZXNzOiByZXR1cm4gMCwgb24gZXJyb3I6IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiByYWlzZSBpcyBub256ZXJvCisgICBhbmQgcmV0dXJuIC0xLgorCisgICBJZiBhdG9taWNfZmxhZ193b3JrcyBpcyBub3QgTlVMTDoKKworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0tMSwgY2hlY2sgaWYgdGhlIGluaGVyaXRhYmxlIGlzIHNldCBvbiB0aGUgZmlsZQorICAgICAgZGVzY3JpcHRvcjogaWYgeWVzLCBzZXQgKmF0b21pY19mbGFnX3dvcmtzIHRvIDEsIG90aGVyd2lzZSBzZXQgdG8gMCBhbmQKKyAgICAgIHNldCB0aGUgaW5oZXJpdGFibGUgZmxhZworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0xOiBkbyBub3RoaW5nCisgICAgKiBpZiAqYXRvbWljX2ZsYWdfd29ya3M9PTA6IHNldCBpbmhlcml0YWJsZSBmbGFnIHRvIEZhbHNlCisKKyAgIFNldCBhdG9taWNfZmxhZ193b3JrcyB0byBOVUxMIGlmIG5vIGF0b21pYyBmbGFnIHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvci4KKworICAgYXRvbWljX2ZsYWdfd29ya3MgY2FuIG9ubHkgYmUgdXNlZCB0byBtYWtlIGEgZmlsZSBkZXNjcmlwdG9yCisgICBub24taW5oZXJpdGFibGU6IGF0b21pY19mbGFnX3dvcmtzIG11c3QgYmUgTlVMTCBpZiBpbmhlcml0YWJsZT0xLiAqLworaW50CitfUHlfc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLCBpbnQgKmF0b21pY19mbGFnX3dvcmtzKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCAxLCBhdG9taWNfZmxhZ193b3Jrcyk7Cit9CisKKy8qIE9wZW4gYSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBmbGFncyAod3JhcHBlciB0byBvcGVuKCkgZnVuY3Rpb24pLgorICAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZS4gKi8KK2ludAorX1B5X29wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncykKK3sKKyAgICBpbnQgZmQ7CisjaWZkZWYgTVNfV0lORE9XUworICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MgfCBPX05PSU5IRVJJVCk7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZkOworI2Vsc2UKKworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3M7CisjaWZkZWYgT19DTE9FWEVDCisgICAgYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZWxzZQorICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MpOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiBmZDsKKworICAgIGlmIChzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmICAgLyogIU1TX1dJTkRPV1MgKi8KKyAgICByZXR1cm4gZmQ7Cit9CisKKy8qIE9wZW4gYSBmaWxlLiBVc2UgX3dmb3BlbigpIG9uIFdpbmRvd3MsIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlCisgICBlbmNvZGluZyBhbmQgdXNlIGZvcGVuKCkgb3RoZXJ3aXNlLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQKKyAgIG5vbi1pbmhlcml0YWJsZS4gKi8KIEZJTEUgKgogX1B5X3dmb3Blbihjb25zdCB3Y2hhcl90ICpwYXRoLCBjb25zdCB3Y2hhcl90ICptb2RlKQogewotI2lmbmRlZiBNU19XSU5ET1dTCiAgICAgRklMRSAqZjsKKyNpZm5kZWYgTVNfV0lORE9XUwogICAgIGNoYXIgKmNwYXRoOwogICAgIGNoYXIgY21vZGVbMTBdOwogICAgIHNpemVfdCByOwpAQCAtNTY4LDIxICs3ODgsNDIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZiA9IGZvcGVuKGNwYXRoLCBjbW9kZSk7CiAgICAgUHlNZW1fRnJlZShjcGF0aCk7Ci0gICAgcmV0dXJuIGY7CiAjZWxzZQotICAgIHJldHVybiBfd2ZvcGVuKHBhdGgsIG1vZGUpOworICAgIGYgPSBfd2ZvcGVuKHBhdGgsIG1vZGUpOwogI2VuZGlmCisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKG1ha2Vfbm9uX2luaGVyaXRhYmxlKGZpbGVubyhmKSkgPCAwKSB7CisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBmOwogfQogCi0vKiBDYWxsIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBvciBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgYW5kCi0gICBjYWxsIGZvcGVuKCkgb3RoZXJ3aXNlLgorLyogV3JhcHBlciB0byBmb3BlbigpLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLiAqLworRklMRSoKK19QeV9mb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKyAgICBGSUxFICpmID0gZm9wZW4ocGF0aG5hbWUsIG1vZGUpOworICAgIGlmIChmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChtYWtlX25vbl9pbmhlcml0YWJsZShmaWxlbm8oZikpIDwgMCkgeworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZjsKK30KKworLyogT3BlbiBhIGZpbGUuIENhbGwgX3dmb3BlbigpIG9uIFdpbmRvd3MsIG9yIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgZmlsZXN5c3RlbQorICAgZW5jb2RpbmcgYW5kIGNhbGwgZm9wZW4oKSBvdGhlcndpc2UuIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZAorICAgbm9uLWluaGVyaXRhYmxlLgogCiAgICBSZXR1cm4gdGhlIG5ldyBmaWxlIG9iamVjdCBvbiBzdWNjZXNzLCBvciBOVUxMIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuIG9yCi0gICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvciAqLwotCisgICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvci4gKi8KIEZJTEUqCi1fUHlfZm9wZW4oUHlPYmplY3QgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCitfUHlfZm9wZW5fb2JqKFB5T2JqZWN0ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogeworICAgIEZJTEUgKmY7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHdjaGFyX3QgKndwYXRoOwogICAgIHdjaGFyX3Qgd21vZGVbMTBdOwpAQCAtNjAyLDE2ICs4NDMsMjEgQEAKICAgICBpZiAodXNpemUgPT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gX3dmb3Blbih3cGF0aCwgd21vZGUpOworICAgIGYgPSBfd2ZvcGVuKHdwYXRoLCB3bW9kZSk7CiAjZWxzZQotICAgIEZJTEUgKmY7CiAgICAgUHlPYmplY3QgKmJ5dGVzOwogICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKHBhdGgsICZieXRlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGYgPSBmb3BlbihQeUJ5dGVzX0FTX1NUUklORyhieXRlcyksIG1vZGUpOwogICAgIFB5X0RFQ1JFRihieXRlcyk7Ci0gICAgcmV0dXJuIGY7CiAjZW5kaWYKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobWFrZV9ub25faW5oZXJpdGFibGUoZmlsZW5vKGYpKSA8IDApIHsKKyAgICAgICAgZmNsb3NlKGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGY7CiB9CiAKICNpZmRlZiBIQVZFX1JFQURMSU5LCkBAIC02NDgsMTIgKzg5NCwxMiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChidWZzaXogPD0gcjEpIHsKLSAgICAgICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgd2NzbmNweShidWYsIHdidWYsIGJ1ZnNpeik7Ci0gICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgIHJldHVybiAoaW50KXIxOwogfQogI2VuZGlmCkBAIC02ODksMTIgKzkzNSwxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKHJlc29sdmVkX3BhdGhfc2l6ZSA8PSByKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdyZXNvbHZlZF9wYXRoKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICB3Y3NuY3B5KHJlc29sdmVkX3BhdGgsIHdyZXNvbHZlZF9wYXRoLCByZXNvbHZlZF9wYXRoX3NpemUpOwotICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgIFB5TWVtX1Jhd0ZyZWUod3Jlc29sdmVkX3BhdGgpOwogICAgIHJldHVybiByZXNvbHZlZF9wYXRoOwogfQogI2VuZGlmCkBAIC03MDcsNyArOTUzLDggQEAKIF9QeV93Z2V0Y3dkKHdjaGFyX3QgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgIHJldHVybiBfd2dldGN3ZChidWYsIHNpemUpOworICAgIGludCBpc2l6ZSA9IChpbnQpUHlfTUlOKHNpemUsIElOVF9NQVgpOworICAgIHJldHVybiBfd2dldGN3ZChidWYsIGlzaXplKTsKICNlbHNlCiAgICAgY2hhciBmbmFtZVtQQVRIX01BWF07CiAgICAgd2NoYXJfdCAqd25hbWU7CkBAIC03MTksMTIgKzk2Niw4MSBAQAogICAgIGlmICh3bmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2l6ZSA8PSBsZW4pIHsKLSAgICAgICAgUHlNZW1fRnJlZSh3bmFtZSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgd2NzbmNweShidWYsIHduYW1lLCBzaXplKTsKLSAgICBQeU1lbV9GcmVlKHduYW1lKTsKKyAgICBQeU1lbV9SYXdGcmVlKHduYW1lKTsKICAgICByZXR1cm4gYnVmOwogI2VuZGlmCiB9CiAKKy8qIER1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvci4gVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZCBhcworICAgbm9uLWluaGVyaXRhYmxlLiBSZXR1cm4gYSBuZXcgZmlsZSBkZXNjcmlwdG9yIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIE9TRXJyb3IKKyAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLgorCisgICBUaGUgR0lMIGlzIHJlbGVhc2VkIHRvIGNhbGwgZHVwKCkuIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBHSUwuICovCitpbnQKK19QeV9kdXAoaW50IGZkKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIGZ0eXBlOworI2VuZGlmCisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBnZXQgdGhlIGZpbGUgdHlwZSwgaWdub3JlIHRoZSBlcnJvciBpZiBpdCBmYWlsZWQgKi8KKyAgICBmdHlwZSA9IEdldEZpbGVUeXBlKGhhbmRsZSk7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZmQgPSBkdXAoZmQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBDaGFyYWN0ZXIgZmlsZXMgbGlrZSBjb25zb2xlIGNhbm5vdCBiZSBtYWtlIG5vbi1pbmhlcml0YWJsZSAqLworICAgIGlmIChmdHlwZSAhPSBGSUxFX1RZUEVfQ0hBUikgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgZGVmaW5lZChGX0RVUEZEX0NMT0VYRUMpCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGZkID0gZmNudGwoZmQsIEZfRFVQRkRfQ0xPRVhFQywgMCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2Vsc2UKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZmQgPSBkdXAoZmQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBmZDsKK30KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMgYi9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYwppbmRleCBhNjUxNmRjLi5lNjgwODdmIDEwMDY0NAotLS0gYS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYworKysgYi9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiAKIC8qIERvIHRoZSBwYWRkaW5nLCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgY2FsbGVyLXN1cHBsaWVkCiAgICBjb250ZW50IGdvZXMuICovCi1zdGF0aWMgUHlfc3NpemVfdAorc3RhdGljIGludAogZmlsbF9wYWRkaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5jaGFycywKICAgICAgICAgICAgICBQeV9VQ1M0IGZpbGxfY2hhciwgUHlfc3NpemVfdCBuX2xwYWRkaW5nLApAQCAtNTU2LDcgKzU1Niw3IEBACiB7CiAgICAgLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIGRpZ2l0cywgZGVjaW1hbCwgYW5kIHJlbWFpbmRlci4gKi8KICAgICBQeV9zc2l6ZV90IGRfcG9zID0gZF9zdGFydDsKLSAgICBjb25zdCBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQgPSB3cml0ZXItPmtpbmQ7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGtpbmQgPSB3cml0ZXItPmtpbmQ7CiAgICAgY29uc3Qgdm9pZCAqZGF0YSA9IHdyaXRlci0+ZGF0YTsKICAgICBQeV9zc2l6ZV90IHI7CiAKQEAgLTc1Nyw3ICs3NTcsOCBAQAogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCi0gICAgaWYgKGZvcm1hdC0+d2lkdGggPT0gLTEgJiYgZm9ybWF0LT5wcmVjaXNpb24gPT0gLTEpIHsKKyAgICBpZiAoKGZvcm1hdC0+d2lkdGggPT0gLTEgfHwgZm9ybWF0LT53aWR0aCA8PSBsZW4pCisgICAgICAgICYmIChmb3JtYXQtPnByZWNpc2lvbiA9PSAtMSB8fCBmb3JtYXQtPnByZWNpc2lvbiA+PSBsZW4pKSB7CiAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwogICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHZhbHVlKTsKICAgICB9CkBAIC03NzAsOSArNzcxLDEzIEBACiAKICAgICBjYWxjX3BhZGRpbmcobGVuLCBmb3JtYXQtPndpZHRoLCBmb3JtYXQtPmFsaWduLCAmbHBhZCwgJnJwYWQsICZ0b3RhbCk7CiAKLSAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih2YWx1ZSwgMCwgbGVuKTsKKyAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOwogICAgIGlmIChscGFkICE9IDAgfHwgcnBhZCAhPSAwKQogICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGZvcm1hdC0+ZmlsbF9jaGFyKTsKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHZhbHVlKSA+IG1heGNoYXIpIHsKKyAgICAgICAgUHlfVUNTNCB2YWxtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih2YWx1ZSwgMCwgbGVuKTsKKyAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCB2YWxtYXhjaGFyKTsKKyAgICB9CiAKICAgICAvKiBhbGxvY2F0ZSB0aGUgcmVzdWx0aW5nIHN0cmluZyAqLwogICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCB0b3RhbCwgbWF4Y2hhcikgPT0gLTEpCkBAIC05NzcsOCArOTgyLDcgQEAKICAgICBQeV9zc2l6ZV90IG5fdG90YWw7CiAgICAgaW50IGhhc19kZWNpbWFsOwogICAgIGRvdWJsZSB2YWw7Ci0gICAgUHlfc3NpemVfdCBwcmVjaXNpb247Ci0gICAgUHlfc3NpemVfdCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CisgICAgaW50IHByZWNpc2lvbiwgZGVmYXVsdF9wcmVjaXNpb24gPSA2OwogICAgIFB5X1VDUzQgdHlwZSA9IGZvcm1hdC0+dHlwZTsKICAgICBpbnQgYWRkX3BjdCA9IDA7CiAgICAgUHlfc3NpemVfdCBpbmRleDsKQEAgLTExMzMsOCArMTEzNyw3IEBACiAgICAgUHlfc3NpemVfdCBuX2ltX3RvdGFsOwogICAgIGludCByZV9oYXNfZGVjaW1hbDsKICAgICBpbnQgaW1faGFzX2RlY2ltYWw7Ci0gICAgaW50IHByZWNpc2lvbjsKLSAgICBQeV9zc2l6ZV90IGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKKyAgICBpbnQgcHJlY2lzaW9uLCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CiAgICAgUHlfVUNTNCB0eXBlID0gZm9ybWF0LT50eXBlOwogICAgIFB5X3NzaXplX3QgaV9yZTsKICAgICBQeV9zc2l6ZV90IGlfaW07CmRpZmYgLS1naXQgYS9QeXRob24vZnJvemVuLmMgYi9QeXRob24vZnJvemVuLmMKaW5kZXggMjVmZGMxNy4uOWJjNjYyYiAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zyb3plbi5jCisrKyBiL1B5dGhvbi9mcm96ZW4uYwpAQCAtMjgsNyArMjgsNyBAQAogCiAjZGVmaW5lIFNJWkUgKGludClzaXplb2YoTV9fX2hlbGxvX18pCiAKLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CiAgICAgLyogaW1wb3J0bGliICovCiAgICAgeyJfZnJvemVuX2ltcG9ydGxpYiIsIF9QeV9NX19pbXBvcnRsaWIsIChpbnQpc2l6ZW9mKF9QeV9NX19pbXBvcnRsaWIpfSwKICAgICAvKiBUZXN0IG1vZHVsZSAqLwpAQCAtNDIsNCArNDIsNCBAQAogLyogRW1iZWRkaW5nIGFwcHMgbWF5IGNoYW5nZSB0aGlzIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlaXIgZmF2b3JpdGUKICAgIGNvbGxlY3Rpb24gb2YgZnJvemVuIG1vZHVsZXM6ICovCiAKLXN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzID0gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXM7Citjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlcyA9IF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zyb3plbm1haW4uYyBiL1B5dGhvbi9mcm96ZW5tYWluLmMKaW5kZXggOGIxZjJkNC4uNTVkMDVmYyAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zyb3plbm1haW4uYworKysgYi9QeXRob24vZnJvemVubWFpbi5jCkBAIC0xNiwxOSArMTYsMTkgQEAKIFB5X0Zyb3plbk1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogICAgIGNoYXIgKnA7Ci0gICAgaW50IGksIG4sIHN0czsKKyAgICBpbnQgaSwgbiwgc3RzID0gMTsKICAgICBpbnQgaW5zcGVjdCA9IDA7CiAgICAgaW50IHVuYnVmZmVyZWQgPSAwOwotICAgIGNoYXIgKm9sZGxvYzsKLSAgICB3Y2hhcl90ICoqYXJndl9jb3B5OworICAgIGNoYXIgKm9sZGxvYyA9IE5VTEw7CisgICAgd2NoYXJfdCAqKmFyZ3ZfY29weSA9IE5VTEw7CiAgICAgLyogV2UgbmVlZCBhIHNlY29uZCBjb3BpZXMsIGFzIFB5dGhvbiBtaWdodCBtb2RpZnkgdGhlIGZpcnN0IG9uZS4gKi8KLSAgICB3Y2hhcl90ICoqYXJndl9jb3B5MjsKKyAgICB3Y2hhcl90ICoqYXJndl9jb3B5MiA9IE5VTEw7CiAKLSAgICBhcmd2X2NvcHkgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSphcmdjKTsKLSAgICBhcmd2X2NvcHkyID0gUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqYXJnYyk7CisgICAgYXJndl9jb3B5ID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiBhcmdjKTsKKyAgICBhcmd2X2NvcHkyID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiBhcmdjKTsKICAgICBpZiAoIWFyZ3ZfY29weSB8fCAhYXJndl9jb3B5MikgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICBQeV9Gcm96ZW5GbGFnID0gMTsgLyogU3VwcHJlc3MgZXJyb3JzIGZyb20gZ2V0cGF0aC5jICovCkBAIC00NCwzMiArNDQsMjYgQEAKICAgICAgICAgc2V0YnVmKHN0ZGVyciwgKGNoYXIgKilOVUxMKTsKICAgICB9CiAKLSAgICBvbGRsb2MgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICBpZiAoIW9sZGxvYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKwogICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0jaWZkZWYgSEFWRV9CUk9LRU5fTUJTVE9XQ1MKLSAgICAgICAgc2l6ZV90IGFyZ3NpemUgPSBzdHJsZW4oYXJndltpXSk7Ci0jZWxzZQotICAgICAgICBzaXplX3QgYXJnc2l6ZSA9IG1ic3Rvd2NzKE5VTEwsIGFyZ3ZbaV0sIDApOwotI2VuZGlmCi0gICAgICAgIHNpemVfdCBjb3VudDsKLSAgICAgICAgaWYgKGFyZ3NpemUgPT0gKHNpemVfdCktMSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAlZCB0byBzdHJpbmdcbiIsIGkpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgYXJndl9jb3B5W2ldID0gUHlNZW1fTWFsbG9jKChhcmdzaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGFyZ3ZfY29weVtpXSA9IF9QeV9jaGFyMndjaGFyKGFyZ3ZbaV0sIE5VTEwpOwogICAgICAgICBhcmd2X2NvcHkyW2ldID0gYXJndl9jb3B5W2ldOwogICAgICAgICBpZiAoIWFyZ3ZfY29weVtpXSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIGNvdW50ID0gbWJzdG93Y3MoYXJndl9jb3B5W2ldLCBhcmd2W2ldLCBhcmdzaXplKzEpOwotICAgICAgICBpZiAoY291bnQgPT0gKHNpemVfdCktMSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAlZCB0byBzdHJpbmdcbiIsIGkpOwotICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAjJWlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEpOworICAgICAgICAgICAgYXJnYyA9IGk7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgfQogICAgIHNldGxvY2FsZShMQ19BTEwsIG9sZGxvYyk7CisgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOworICAgIG9sZGxvYyA9IE5VTEw7CiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlJbml0RnJvemVuRXh0ZW5zaW9ucygpOwpAQCAtMTAzLDEwICs5NywxNCBAQAogICAgIFB5V2luRnJlZXplX0V4ZVRlcm0oKTsKICNlbmRpZgogICAgIFB5X0ZpbmFsaXplKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weTJbaV0pOworCitlcnJvcjoKKyAgICBQeU1lbV9SYXdGcmVlKGFyZ3ZfY29weSk7CisgICAgaWYgKGFyZ3ZfY29weTIpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5MltpXSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5Mik7CiAgICAgfQotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5KTsKLSAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weTIpOworICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICByZXR1cm4gc3RzOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Z1dHVyZS5jIGIvUHl0aG9uL2Z1dHVyZS5jCmluZGV4IGQyNGFlNDEuLjgxZWFiNTQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mdXR1cmUuYworKysgYi9QeXRob24vZnV0dXJlLmMKQEAgLTExLDcgKzExLDcgQEAKICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0cyBtdXN0IG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUiCiAKIHN0YXRpYyBpbnQKLWZ1dHVyZV9jaGVja19mZWF0dXJlcyhQeUZ1dHVyZUZlYXR1cmVzICpmZiwgc3RtdF90eSBzLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2Z1dHVyZV9jaGVja19mZWF0dXJlcyhQeUZ1dHVyZUZlYXR1cmVzICpmZiwgc3RtdF90eSBzLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgaW50IGk7CiAgICAgYXNkbF9zZXEgKm5hbWVzOwpAQCAtNDMsMTIgKzQzLDEyIEBACiAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGZlYXR1cmUsICJicmFjZXMiKSA9PSAwKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGNoYW5jZSIpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVU5ERUZJTkVEX0ZVVFVSRV9GRUFUVVJFLCBmZWF0dXJlKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNTYsMTMgKzU2LDE3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWZ1dHVyZV9wYXJzZShQeUZ1dHVyZUZlYXR1cmVzICpmZiwgbW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCitmdXR1cmVfcGFyc2UoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKLSAgICBpbnQgaSwgZm91bmRfZG9jc3RyaW5nID0gMCwgZG9uZSA9IDAsIHByZXZfbGluZSA9IDA7CisgICAgaW50IGksIGRvbmUgPSAwLCBwcmV2X2xpbmUgPSAwOworICAgIHN0bXRfdHkgZmlyc3Q7CiAKICAgICBpZiAoIShtb2QtPmtpbmQgPT0gTW9kdWxlX2tpbmQgfHwgbW9kLT5raW5kID09IEludGVyYWN0aXZlX2tpbmQpKQogICAgICAgICByZXR1cm4gMTsKIAorICAgIGlmIChhc2RsX3NlcV9MRU4obW9kLT52Lk1vZHVsZS5ib2R5KSA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKwogICAgIC8qIEEgc3Vic2VxdWVudCBwYXNzIHdpbGwgZGV0ZWN0IGZ1dHVyZSBpbXBvcnRzIHRoYXQgZG9uJ3QKICAgICAgICBhcHBlYXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZXJlJ3Mgb25lIGNhc2UsCiAgICAgICAgaG93ZXZlciwgdGhhdCBpcyBlYXNpZXIgdG8gaGFuZGxlIGhlcmU6IEEgc2VyaWVzIG9mIGltcG9ydHMKQEAgLTcxLDggKzc1LDEzIEBACiAgICAgICAgYnV0IGlzIHByZWNlZGVkIGJ5IGEgcmVndWxhciBpbXBvcnQuCiAgICAgKi8KIAorICAgIGkgPSAwOworICAgIGZpcnN0ID0gKHN0bXRfdHkpYXNkbF9zZXFfR0VUKG1vZC0+di5Nb2R1bGUuYm9keSwgaSk7CisgICAgaWYgKGZpcnN0LT5raW5kID09IEV4cHJfa2luZCAmJiBmaXJzdC0+di5FeHByLnZhbHVlLT5raW5kID09IFN0cl9raW5kKQorICAgICAgICBpKys7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXNkbF9zZXFfTEVOKG1vZC0+di5Nb2R1bGUuYm9keSk7IGkrKykgeworCisgICAgZm9yICg7IGkgPCBhc2RsX3NlcV9MRU4obW9kLT52Lk1vZHVsZS5ib2R5KTsgaSsrKSB7CiAgICAgICAgIHN0bXRfdHkgcyA9IChzdG10X3R5KWFzZGxfc2VxX0dFVChtb2QtPnYuTW9kdWxlLmJvZHksIGkpOwogCiAgICAgICAgIGlmIChkb25lICYmIHMtPmxpbmVubyA+IHByZXZfbGluZSkKQEAgLTkyLDMyICsxMDEsMjcgQEAKICAgICAgICAgICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJfTEFURV9GVVRVUkUpOwotICAgICAgICAgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghZnV0dXJlX2NoZWNrX2ZlYXR1cmVzKGZmLCBzLCBmaWxlbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIGZmLT5mZl9saW5lbm8gPSBzLT5saW5lbm87CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzLT5raW5kID09IEV4cHJfa2luZCAmJiAhZm91bmRfZG9jc3RyaW5nKSB7Ci0gICAgICAgICAgICBleHByX3R5IGUgPSBzLT52LkV4cHIudmFsdWU7Ci0gICAgICAgICAgICBpZiAoZS0+a2luZCAhPSBTdHJfa2luZCkKLSAgICAgICAgICAgICAgICBkb25lID0gMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmb3VuZF9kb2NzdHJpbmcgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMTsKIH0KIAogCiBQeUZ1dHVyZUZlYXR1cmVzICoKLVB5RnV0dXJlX0Zyb21BU1QobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCitQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KG1vZF90eSBtb2QsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBQeUZ1dHVyZUZlYXR1cmVzICpmZjsKIApAQCAtMTM1LDMgKzEzOSwxOCBAQAogICAgIH0KICAgICByZXR1cm4gZmY7CiB9CisKKworUHlGdXR1cmVGZWF0dXJlcyAqCitQeUZ1dHVyZV9Gcm9tQVNUKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0cikKK3sKKyAgICBQeUZ1dHVyZUZlYXR1cmVzICpmZjsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZmYgPSBQeUZ1dHVyZV9Gcm9tQVNUT2JqZWN0KG1vZCwgZmlsZW5hbWUpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGZmOworfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2dldGFyZ3MuYyBiL1B5dGhvbi9nZXRhcmdzLmMKaW5kZXggYWU5MzFiOS4uOWQ3Mjc1MiAxMDA2NDQKLS0tIGEvUHl0aG9uL2dldGFyZ3MuYworKysgYi9QeXRob24vZ2V0YXJncy5jCkBAIC00NiwxNCArNDYsMTYgQEAKIH0gZnJlZWxpc3RlbnRyeV90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIGludCBmaXJzdF9hdmFpbGFibGU7CiAgIGZyZWVsaXN0ZW50cnlfdCAqZW50cmllczsKKyAgaW50IGZpcnN0X2F2YWlsYWJsZTsKKyAgaW50IGVudHJpZXNfbWFsbG9jZWQ7CiB9IGZyZWVsaXN0X3Q7CiAKKyNkZWZpbmUgU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVMgOAogCiAvKiBGb3J3YXJkICovCiBzdGF0aWMgaW50IHZnZXRhcmdzMShQeU9iamVjdCAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QgKiwgaW50KTsKLXN0YXRpYyB2b2lkIHNldGVycm9yKGludCwgY29uc3QgY2hhciAqLCBpbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworc3RhdGljIHZvaWQgc2V0ZXJyb3IoUHlfc3NpemVfdCwgY29uc3QgY2hhciAqLCBpbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogc3RhdGljIGNoYXIgKmNvbnZlcnRpdGVtKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiosIHZhX2xpc3QgKiwgaW50LCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIHNpemVfdCwgZnJlZWxpc3RfdCAqKTsKIHN0YXRpYyBjaGFyICpjb252ZXJ0dHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKiwgdmFfbGlzdCAqLCBpbnQsCkBAIC0xODcsNyArMTg5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlbGlzdC0+ZW50cmllc1tpbmRleF0uaXRlbSk7CiAgICAgICB9CiAgICAgfQotICAgIFB5TWVtX0ZSRUUoZnJlZWxpc3QtPmVudHJpZXMpOworICAgIGlmIChmcmVlbGlzdC0+ZW50cmllc19tYWxsb2NlZCkKKyAgICAgICAgUHlNZW1fRlJFRShmcmVlbGlzdC0+ZW50cmllcyk7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTk3LDYgKzIwMCw4IEBACiB7CiAgICAgY2hhciBtc2didWZbMjU2XTsKICAgICBpbnQgbGV2ZWxzWzMyXTsKKyAgICBmcmVlbGlzdGVudHJ5X3Qgc3RhdGljX2VudHJpZXNbU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVNdOworICAgIGZyZWVsaXN0X3QgZnJlZWxpc3QgPSB7c3RhdGljX2VudHJpZXMsIDAsIDB9OwogICAgIGNvbnN0IGNoYXIgKmZuYW1lID0gTlVMTDsKICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gTlVMTDsKICAgICBpbnQgbWluID0gLTE7CkBAIC0yMDYsNyArMjExLDYgQEAKICAgICBjb25zdCBjaGFyICpmb3JtYXRzYXZlID0gZm9ybWF0OwogICAgIFB5X3NzaXplX3QgaSwgbGVuOwogICAgIGNoYXIgKm1zZzsKLSAgICBmcmVlbGlzdF90IGZyZWVsaXN0ID0gezAsIE5VTEx9OwogICAgIGludCBjb21wYXQgPSBmbGFncyAmIEZMQUdfQ09NUEFUOwogCiAgICAgYXNzZXJ0KGNvbXBhdCB8fCAoYXJncyAhPSAoUHlPYmplY3QqKU5VTEwpKTsKQEAgLTI0MCwxNSArMjQ0LDE1IEBACiAgICAgICAgICAgICBtZXNzYWdlID0gZm9ybWF0OwogICAgICAgICAgICAgZW5kZm10ID0gMTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAgIGlmIChsZXZlbCA9PSAwKQorICAgICAgICAgICAgICAgIG1pbiA9IG1heDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGxldmVsID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnTycpCi0gICAgICAgICAgICAgICAgICAgIG1heCsrOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKFB5X0lTQUxQSEEoUHlfQ0hBUk1BU0soYykpKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X0lTQUxQSEEoUHlfQ0hBUk1BU0soYykpKQogICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSAnZScpIC8qIHNraXAgZW5jb2RlZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgbWF4Kys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICd8JykKLSAgICAgICAgICAgICAgICAgICAgbWluID0gbWF4OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI2MiwxMCArMjY2LDEzIEBACiAKICAgICBmb3JtYXQgPSBmb3JtYXRzYXZlOwogCi0gICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIG1heCk7Ci0gICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobWF4ID4gU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVMpIHsKKyAgICAgICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIG1heCk7CisgICAgICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMTsKICAgICB9CiAKICAgICBpZiAoY29tcGF0KSB7CkBAIC0zNTAsNyArMzU3LDcgQEAKIAogCiBzdGF0aWMgdm9pZAotc2V0ZXJyb3IoaW50IGlhcmcsIGNvbnN0IGNoYXIgKm1zZywgaW50ICpsZXZlbHMsIGNvbnN0IGNoYXIgKmZuYW1lLAorc2V0ZXJyb3IoUHlfc3NpemVfdCBpYXJnLCBjb25zdCBjaGFyICptc2csIGludCAqbGV2ZWxzLCBjb25zdCBjaGFyICpmbmFtZSwKICAgICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAgY2hhciBidWZbNTEyXTsKQEAgLTM2NiwxMCArMzczLDEwIEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGlhcmcgIT0gMCkgewogICAgICAgICAgICAgUHlPU19zbnByaW50ZihwLCBzaXplb2YoYnVmKSAtIChwIC0gYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICVkIiwgaWFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwgaWFyZyk7CiAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgIHAgKz0gc3RybGVuKHApOwotICAgICAgICAgICAgd2hpbGUgKGxldmVsc1tpXSA+IDAgJiYgaSA8IDMyICYmIChpbnQpKHAtYnVmKSA8IDIyMCkgeworICAgICAgICAgICAgd2hpbGUgKGkgPCAzMiAmJiBsZXZlbHNbaV0gPiAwICYmIChpbnQpKHAtYnVmKSA8IDIyMCkgewogICAgICAgICAgICAgICAgIFB5T1Nfc25wcmludGYocCwgc2l6ZW9mKGJ1ZikgLSAocCAtIGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBpdGVtICVkIiwgbGV2ZWxzW2ldLTEpOwogICAgICAgICAgICAgICAgIHAgKz0gc3RybGVuKHApOwpAQCAtNTYzLDcgKzU3MCw3IEBACiAgICAgICAgICAgICAgICAgInNpemUgZG9lcyBub3QgZml0IGluIGFuIGludCIpOyBcCiAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOyBcCiAgICAgICAgIH0gXAotICAgICAgICAqcT1zOyBcCisgICAgICAgICpxID0gKGludClzOyBcCiAgICAgfQogI2RlZmluZSBCVUZGRVJfTEVOICAgICAgKChmbGFncyAmIEZMQUdfU0laRV9UKSA/ICpxMjoqcSkKICNkZWZpbmUgUkVUVVJOX0VSUl9PQ0NVUlJFRCByZXR1cm4gbXNnYnVmCkBAIC0xNDIxLDcgKzE0MjgsOCBAQAogICAgIGludCBtYXggPSBJTlRfTUFYOwogICAgIGludCBpLCBsZW4sIG5hcmdzLCBua2V5d29yZHM7CiAgICAgUHlPYmplY3QgKmN1cnJlbnRfYXJnOwotICAgIGZyZWVsaXN0X3QgZnJlZWxpc3QgPSB7MCwgTlVMTH07CisgICAgZnJlZWxpc3RlbnRyeV90IHN0YXRpY19lbnRyaWVzW1NUQVRJQ19GUkVFTElTVF9FTlRSSUVTXTsKKyAgICBmcmVlbGlzdF90IGZyZWVsaXN0ID0ge3N0YXRpY19lbnRyaWVzLCAwLCAwfTsKIAogICAgIGFzc2VydChhcmdzICE9IE5VTEwgJiYgUHlUdXBsZV9DaGVjayhhcmdzKSk7CiAgICAgYXNzZXJ0KGtleXdvcmRzID09IE5VTEwgfHwgUHlEaWN0X0NoZWNrKGtleXdvcmRzKSk7CkBAIC0xNDQ1LDEwICsxNDUzLDEzIEBACiAgICAgZm9yIChsZW49MDsga3dsaXN0W2xlbl07IGxlbisrKQogICAgICAgICBjb250aW51ZTsKIAotICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBsZW4pOwotICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbiA+IFNUQVRJQ19GUkVFTElTVF9FTlRSSUVTKSB7CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBsZW4pOworICAgICAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZnJlZWxpc3QuZW50cmllc19tYWxsb2NlZCA9IDE7CiAgICAgfQogCiAgICAgbmFyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOwpAQCAtMTU3NCwyMCArMTU4NSwxNiBAQAogICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CiAgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChrZXl3b3JkcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewogICAgICAgICAgICAgaW50IG1hdGNoID0gMDsKLSAgICAgICAgICAgIGNoYXIgKmtzOwogICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soa2V5KSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkcyBtdXN0IGJlIHN0cmluZ3MiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY2xlYW5yZXR1cm4oMCwgJmZyZWVsaXN0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIGNoZWNrIHRoYXQgX1B5VW5pY29kZV9Bc1N0cmluZygpIHJlc3VsdCBpcyBub3QgTlVMTCAqLwotICAgICAgICAgICAga3MgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGtleSk7Ci0gICAgICAgICAgICBpZiAoa3MgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChrcywga3dsaXN0W2ldKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCBrd2xpc3RbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFtYXRjaCkgewpkaWZmIC0tZ2l0IGEvUHl0aG9uL2dldGN3ZC5jIGIvUHl0aG9uL2dldGN3ZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmVkYmQxLi4wMDAwMDAwCi0tLSBhL1B5dGhvbi9nZXRjd2QuYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLQotLyogVHdvIFBEIGdldGN3ZCgpIGltcGxlbWVudGF0aW9ucy4KLSAgIEF1dGhvcjogR3VpZG8gdmFuIFJvc3N1bSwgQ1dJIEFtc3RlcmRhbSwgSmFuIDE5OTEsIDxndWlkb0Bjd2kubmw+LiAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWZkZWYgSEFWRV9HRVRXRAotCi0vKiBWZXJzaW9uIGZvciBCU0Qgc3lzdGVtcyAtLSB1c2UgZ2V0d2QoKSAqLwotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0KLSNpZm5kZWYgTUFYUEFUSExFTgotI2lmIGRlZmluZWQoUEFUSF9NQVgpICYmIFBBVEhfTUFYID4gMTAyNAotI2RlZmluZSBNQVhQQVRITEVOIFBBVEhfTUFYCi0jZWxzZQotI2RlZmluZSBNQVhQQVRITEVOIDEwMjQKLSNlbmRpZgotI2VuZGlmCi0KLWV4dGVybiBjaGFyICpnZXR3ZChjaGFyICopOwotCi1jaGFyICoKLWdldGN3ZChjaGFyICpidWYsIGludCBzaXplKQotewotICAgIGNoYXIgbG9jYWxidWZbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpyZXQ7Ci0KLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0ID0gZ2V0d2QobG9jYWxidWYpOwotICAgIGlmIChyZXQgIT0gTlVMTCAmJiBzdHJsZW4obG9jYWxidWYpID49IChzaXplX3Qpc2l6ZSkgewotICAgICAgICBlcnJubyA9IEVSQU5HRTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChyZXQgPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVBQ0NFUzsgLyogTW9zdCBsaWtlbHkgZXJyb3IgKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHN0cm5jcHkoYnVmLCBsb2NhbGJ1Ziwgc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZjsKLX0KLQotI2Vsc2UgLyogIUhBVkVfR0VUV0QgKi8KLQotLyogVmVyc2lvbiBmb3IgcmVhbGx5IG9sZCBVTklYIHN5c3RlbXMgLS0gdXNlIHBpcGUgZnJvbSBwd2QgKi8KLQotI2lmbmRlZiBQV0RfQ01ECi0jZGVmaW5lIFBXRF9DTUQgIi9iaW4vcHdkIgotI2VuZGlmCi0KLWNoYXIgKgotZ2V0Y3dkKGNoYXIgKmJ1ZiwgaW50IHNpemUpCi17Ci0gICAgRklMRSAqZnA7Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgc3RzOwotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoKGZwID0gcG9wZW4oUFdEX0NNRCwgInIiKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGZnZXRzKGJ1Ziwgc2l6ZSwgZnApID09IE5VTEwgfHwgKHN0cyA9IHBjbG9zZShmcCkpICE9IDApIHsKLSAgICAgICAgZXJybm8gPSBFQUNDRVM7IC8qIE1vc3QgbGlrZWx5IGVycm9yICovCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBmb3IgKHAgPSBidWY7ICpwICE9ICdcbic7IHArKykgewotICAgICAgICBpZiAoKnAgPT0gJ1wwJykgewotICAgICAgICAgICAgZXJybm8gPSBFUkFOR0U7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICAqcCA9ICdcMCc7Ci0gICAgcmV0dXJuIGJ1ZjsKLX0KLQotI2VuZGlmIC8qICFIQVZFX0dFVFdEICovCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0LmMgYi9QeXRob24vaW1wb3J0LmMKaW5kZXggZTkxY2VmOC4uYzk2MTA2ZiAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydC5jCisrKyBiL1B5dGhvbi9pbXBvcnQuYwpAQCAtMTksMjIgKzE5LDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWZkZWYgTVNfV0lORE9XUwotLyogZm9yIHN0YXQuc3RfbW9kZSAqLwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7Ci0vKiBmb3IgX21rZGlyICovCi0jaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0jZW5kaWYKLQotCiAjZGVmaW5lIENBQ0hFRElSICJfX3B5Y2FjaGVfXyIKIAogLyogU2VlIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdCgpIGJlbG93ICovCiBzdGF0aWMgUHlPYmplY3QgKmV4dGVuc2lvbnMgPSBOVUxMOwogCi0vKiBGdW5jdGlvbiBmcm9tIFBhcnNlci90b2tlbml6ZXIuYyAqLwotZXh0ZXJuIGNoYXIgKiBQeVRva2VuaXplcl9GaW5kRW5jb2RpbmdGaWxlbmFtZShpbnQsIFB5T2JqZWN0ICopOwotCiAvKiBUaGlzIHRhYmxlIGlzIGRlZmluZWQgaW4gY29uZmlnLmM6ICovCiBleHRlcm4gc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW107CiAKQEAgLTkzLDggKzgyLDEwIEBACiAgICAgaW50IGVyciA9IDA7CiAKICAgICBwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIik7Ci0gICAgaWYgKHBhdGhfaG9va3MgPT0gTlVMTCkKKyAgICBpZiAocGF0aF9ob29rcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5wYXRoX2hvb2tzIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQogICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBpbnN0YWxsaW5nIHppcGltcG9ydCBob29rXG4iKTsKQEAgLTIwNCw4ICsxOTUsMTEgQEAKICAgICBpZiAoaW1wb3J0X2xvY2tfbGV2ZWwgPiAxKSB7CiAgICAgICAgIC8qIEZvcmtlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIGltcG9ydCAqLwogICAgICAgICBsb25nIG1lID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwotICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soaW1wb3J0X2xvY2ssIDApOwotICAgICAgICAvKiBYWFg6IGNhbiB0aGUgcHJldmlvdXMgbGluZSBmYWlsPyAqLworICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGNvdWxkIGZhaWwgaWYgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBidXQgZm9ya2luZyBhcworICAgICAgICAgICBhIHNpZGUtZWZmZWN0IG9mIGFuIGltcG9ydCBpcyBhKSByYXJlLCBiKSBudXRzLCBhbmQgYykgZGlmZmljdWx0IHRvCisgICAgICAgICAgIGRvIHRoYW5rcyB0byB0aGUgbG9jayBvbmx5IGJlaW5nIGhlbGQgd2hlbiBkb2luZyBpbmRpdmlkdWFsIG1vZHVsZQorICAgICAgICAgICBsb2NrcyBwZXIgaW1wb3J0LiAqLworICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soaW1wb3J0X2xvY2ssIE5PV0FJVF9MT0NLKTsKICAgICAgICAgaW1wb3J0X2xvY2tfdGhyZWFkID0gbWU7CiAgICAgICAgIGltcG9ydF9sb2NrX2xldmVsLS07CiAgICAgfSBlbHNlIHsKQEAgLTI4MCw2ICsyNzQsNyBAQAogICAgICJwYXRoIiwgImFyZ3YiLCAicHMxIiwgInBzMiIsCiAgICAgImxhc3RfdHlwZSIsICJsYXN0X3ZhbHVlIiwgImxhc3RfdHJhY2ViYWNrIiwKICAgICAicGF0aF9ob29rcyIsICJwYXRoX2ltcG9ydGVyX2NhY2hlIiwgIm1ldGFfcGF0aCIsCisgICAgIl9faW50ZXJhY3RpdmVob29rX18iLAogICAgIC8qIG1pc2Mgc3R1ZmYgKi8KICAgICAiZmxhZ3MiLCAiZmxvYXRfaW5mbyIsCiAgICAgTlVMTApAQCAtMjkyLDE2ICsyODcsMTcgQEAKICAgICBOVUxMCiB9OwogCi0KIC8qIFVuLWluaXRpYWxpemUgdGhpbmdzLCBhcyBnb29kIGFzIHdlIGNhbiAqLwogCiB2b2lkCiBQeUltcG9ydF9DbGVhbnVwKHZvaWQpCiB7Ci0gICAgUHlfc3NpemVfdCBwb3MsIG5kb25lOworICAgIFB5X3NzaXplX3QgcG9zOwogICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZSwgKmRpY3Q7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBpbnRlcnAtPm1vZHVsZXM7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zID0gaW50ZXJwLT5idWlsdGluczsKKyAgICBQeU9iamVjdCAqd2Vha2xpc3QgPSBOVUxMOwogCiAgICAgaWYgKG1vZHVsZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOyAvKiBBbHJlYWR5IGRvbmUgKi8KQEAgLTMxMiw2ICszMDgsOCBAQAogICAgICAgIGRlbGV0ZWQgKmxhc3QqIG9mIGFsbCwgdGhleSB3b3VsZCBjb21lIHRvbyBsYXRlIGluIHRoZSBub3JtYWwKICAgICAgICBkZXN0cnVjdGlvbiBvcmRlci4gIFNpZ2guICovCiAKKyAgICAvKiBYWFggUGVyaGFwcyB0aGVzZSBwcmVjYXV0aW9ucyBhcmUgb2Jzb2xldGUuIFdobyBrbm93cz8gKi8KKwogICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7CiAgICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIGRpY3QgPSBQeU1vZHVsZV9HZXREaWN0KHZhbHVlKTsKQEAgLTMzOSw4NyArMzM3LDg3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBGaXJzdCwgZGVsZXRlIF9fbWFpbl9fICovCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiX19tYWluX18iKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBfX21haW5fX1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJfX21haW5fXyIsIFB5X05vbmUpOworICAgIC8qIFdlIHByZXBhcmUgYSBsaXN0IHdoaWNoIHdpbGwgcmVjZWl2ZSAobmFtZSwgd2Vha3JlZikgdHVwbGVzIG9mCisgICAgICAgbW9kdWxlcyB3aGVuIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcy4gIFRoZSBuYW1lIGlzIHVzZWQKKyAgICAgICBmb3IgZGlhZ25vc2lzIG1lc3NhZ2VzIChpbiB2ZXJib3NlIG1vZGUpLCB3aGlsZSB0aGUgd2Vha3JlZiBoZWxwcworICAgICAgIGRldGVjdCB0aG9zZSBtb2R1bGVzIHdoaWNoIGhhdmUgYmVlbiBoZWxkIGFsaXZlLiAqLworICAgIHdlYWtsaXN0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAod2Vha2xpc3QgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKworI2RlZmluZSBTVE9SRV9NT0RVTEVfV0VBS1JFRihuYW1lLCBtb2QpIFwKKyAgICBpZiAod2Vha2xpc3QgIT0gTlVMTCkgeyBcCisgICAgICAgIFB5T2JqZWN0ICp3ciA9IFB5V2Vha3JlZl9OZXdSZWYobW9kLCBOVUxMKTsgXAorICAgICAgICBpZiAobmFtZSAmJiB3cikgeyBcCisgICAgICAgICAgICBQeU9iamVjdCAqdHVwID0gUHlUdXBsZV9QYWNrKDIsIG5hbWUsIHdyKTsgXAorICAgICAgICAgICAgUHlMaXN0X0FwcGVuZCh3ZWFrbGlzdCwgdHVwKTsgXAorICAgICAgICAgICAgUHlfWERFQ1JFRih0dXApOyBcCisgICAgICAgIH0gXAorICAgICAgICBQeV9YREVDUkVGKHdyKTsgXAorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgXAorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsgXAogICAgIH0KIAotICAgIC8qIFRoZSBzcGVjaWFsIHRyZWF0bWVudCBvZiAiYnVpbHRpbnMiIGhlcmUgaXMgYmVjYXVzZSBldmVuCi0gICAgICAgd2hlbiBpdCdzIG5vdCByZWZlcmVuY2VkIGFzIGEgbW9kdWxlLCBpdHMgZGljdGlvbmFyeSBpcwotICAgICAgIHJlZmVyZW5jZWQgYnkgYWxtb3N0IGV2ZXJ5IG1vZHVsZSdzIF9fYnVpbHRpbnNfXy4gIFNpbmNlCi0gICAgICAgZGVsZXRpbmcgYSBtb2R1bGUgY2xlYXJzIGl0cyBkaWN0aW9uYXJ5IChldmVuIGlmIHRoZXJlIGFyZQotICAgICAgIHJlZmVyZW5jZXMgbGVmdCB0byBpdCksIHdlIG5lZWQgdG8gZGVsZXRlIHRoZSAiYnVpbHRpbnMiCi0gICAgICAgbW9kdWxlIGxhc3QuICBMaWtld2lzZSwgd2UgZG9uJ3QgZGVsZXRlIHN5cyB1bnRpbCB0aGUgdmVyeQotICAgICAgIGVuZCBiZWNhdXNlIGl0IGlzIGltcGxpY2l0bHkgcmVmZXJlbmNlZCAoZS5nLiBieSBwcmludCkuCi0KLSAgICAgICBBbHNvIG5vdGUgdGhhdCB3ZSAnZGVsZXRlJyBtb2R1bGVzIGJ5IHJlcGxhY2luZyB0aGVpciBlbnRyeQotICAgICAgIGluIHRoZSBtb2R1bGVzIGRpY3Qgd2l0aCBOb25lLCByYXRoZXIgdGhhbiByZWFsbHkgZGVsZXRpbmcKLSAgICAgICB0aGVtOyB0aGlzIGF2b2lkcyBhIHJlaGFzaCBvZiB0aGUgbW9kdWxlcyBkaWN0aW9uYXJ5IGFuZAotICAgICAgIGFsc28gbWFya3MgdGhlbSBhcyAibm9uIGV4aXN0ZW50IiBzbyB0aGV5IHdvbid0IGJlCi0gICAgICAgcmUtaW1wb3J0ZWQuICovCi0KLSAgICAvKiBOZXh0LCByZXBlYXRlZGx5IGRlbGV0ZSBtb2R1bGVzIHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YKLSAgICAgICBvbmUgKHNraXBwaW5nIGJ1aWx0aW5zIGFuZCBzeXMpIGFuZCBkZWxldGUgdGhlbSAqLwotICAgIGRvIHsKLSAgICAgICAgbmRvbmUgPSAwOwotICAgICAgICBwb3MgPSAwOwotICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQobW9kdWxlcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLT5vYl9yZWZjbnQgIT0gMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soa2V5KSAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAiYnVpbHRpbnMiKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAic3lzIikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoCi0gICAgICAgICAgICAgICAgICAgICAgICAiIyBjbGVhbnVwWzFdICVVXG4iLCBrZXkpOwotICAgICAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0obW9kdWxlcywga2V5LCBQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICBuZG9uZSsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSB3aGlsZSAobmRvbmUgPiAwKTsKLQotICAgIC8qIE5leHQsIGRlbGV0ZSBhbGwgbW9kdWxlcyAoc3RpbGwgc2tpcHBpbmcgYnVpbHRpbnMgYW5kIHN5cykgKi8KKyAgICAvKiBSZW1vdmUgYWxsIG1vZHVsZXMgZnJvbSBzeXMubW9kdWxlcywgaG9waW5nIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgY2FuIHJlY2xhaW0gbW9zdCBvZiB0aGVtLiAqLwogICAgIHBvcyA9IDA7CiAgICAgd2hpbGUgKFB5RGljdF9OZXh0KG1vZHVsZXMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgImJ1aWx0aW5zIikgPT0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJzeXMiKSA9PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzJdICVVXG4iLCBrZXkpOwotICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKKyAgICAgICAgaWYgKFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIFB5VW5pY29kZV9DaGVjayhrZXkpKQorICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzJdIHJlbW92aW5nICVVXG4iLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIFNUT1JFX01PRFVMRV9XRUFLUkVGKGtleSwgdmFsdWUpOwogICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0obW9kdWxlcywga2V5LCBQeV9Ob25lKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIE5leHQsIGRlbGV0ZSBzeXMgYW5kIGJ1aWx0aW5zIChpbiB0aGF0IG9yZGVyKSAqLwotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgInN5cyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhbnVwIHN5c1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJzeXMiLCBQeV9Ob25lKTsKLSAgICB9Ci0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBidWlsdGluc1xuIik7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIsIFB5X05vbmUpOworICAgIC8qIENsZWFyIHRoZSBtb2R1bGVzIGRpY3QuICovCisgICAgUHlEaWN0X0NsZWFyKG1vZHVsZXMpOworICAgIC8qIFJlcGxhY2UgdGhlIGludGVycHJldGVyJ3MgcmVmZXJlbmNlIHRvIGJ1aWx0aW5zIHdpdGggYW4gZW1wdHkgZGljdAorICAgICAgIChtb2R1bGUgZ2xvYmFscyBzdGlsbCBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBidWlsdGlucykuICovCisgICAgYnVpbHRpbnMgPSBpbnRlcnAtPmJ1aWx0aW5zOworICAgIGludGVycC0+YnVpbHRpbnMgPSBQeURpY3RfTmV3KCk7CisgICAgUHlfREVDUkVGKGJ1aWx0aW5zKTsKKyAgICAvKiBDbGVhciBtb2R1bGUgZGljdCBjb3BpZXMgc3RvcmVkIGluIHRoZSBpbnRlcnByZXRlciBzdGF0ZSAqLworICAgIF9QeVN0YXRlX0NsZWFyTW9kdWxlcygpOworICAgIC8qIENvbGxlY3QgcmVmZXJlbmNlcyAqLworICAgIF9QeUdDX0NvbGxlY3ROb0ZhaWwoKTsKKyAgICAvKiBEdW1wIEdDIHN0YXRzIGJlZm9yZSBpdCdzIHRvbyBsYXRlLCBzaW5jZSBpdCB1c2VzIHRoZSB3YXJuaW5ncworICAgICAgIG1hY2hpbmVyeS4gKi8KKyAgICBfUHlHQ19EdW1wU2h1dGRvd25TdGF0cygpOworCisgICAgLyogTm93LCBpZiB0aGVyZSBhcmUgYW55IG1vZHVsZXMgbGVmdCBhbGl2ZSwgY2xlYXIgdGhlaXIgZ2xvYmFscyB0bworICAgICAgIG1pbmltaXplIHBvdGVudGlhbCBsZWFrcy4gIEFsbCBDIGV4dGVuc2lvbiBtb2R1bGVzIGFjdHVhbGx5IGVuZAorICAgICAgIHVwIGhlcmUsIHNpbmNlIHRoZXkgYXJlIGtlcHQgYWxpdmUgaW4gdGhlIGludGVycHJldGVyIHN0YXRlLiAqLworICAgIGlmICh3ZWFrbGlzdCAhPSBOVUxMKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICAgICAgbiA9IFB5TGlzdF9HRVRfU0laRSh3ZWFrbGlzdCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXAgPSBQeUxpc3RfR0VUX0lURU0od2Vha2xpc3QsIGkpOworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKHR1cCwgMCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbW9kID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1QoUHlUdXBsZV9HRVRfSVRFTSh0dXAsIDEpKTsKKyAgICAgICAgICAgIGlmIChtb2QgPT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2QpOworICAgICAgICAgICAgYXNzZXJ0KFB5TW9kdWxlX0NoZWNrKG1vZCkpOworICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIFB5VW5pY29kZV9DaGVjayhuYW1lKSkKKyAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFszXSB3aXBpbmcgJVVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG1vZCk7CisgICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIobW9kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtb2QpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRih3ZWFrbGlzdCk7CiAgICAgfQogCi0gICAgLyogRmluYWxseSwgY2xlYXIgYW5kIGRlbGV0ZSB0aGUgbW9kdWxlcyBkaXJlY3RvcnkgKi8KLSAgICBQeURpY3RfQ2xlYXIobW9kdWxlcyk7CisgICAgLyogQ2xlYXIgYW5kIGRlbGV0ZSB0aGUgbW9kdWxlcyBkaXJlY3RvcnkuICBBY3R1YWwgbW9kdWxlcyB3aWxsCisgICAgICAgc3RpbGwgYmUgdGhlcmUgb25seSBpZiBpbXBvcnRlZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBzb21lCisgICAgICAgZGVzdHJ1Y3Rvci4gKi8KICAgICBpbnRlcnAtPm1vZHVsZXMgPSBOVUxMOwogICAgIFB5X0RFQ1JFRihtb2R1bGVzKTsKKworICAgIC8qIE9uY2UgbW9yZSAqLworICAgIF9QeUdDX0NvbGxlY3ROb0ZhaWwoKTsKKworI3VuZGVmIFNUT1JFX01PRFVMRV9XRUFLUkVGCiB9CiAKIApAQCAtNDUxLDEyICs0NDksMTIgQEAKIAogLyogTWFnaWMgZm9yIGV4dGVuc2lvbiBtb2R1bGVzIChidWlsdC1pbiBhcyB3ZWxsIGFzIGR5bmFtaWNhbGx5CiAgICBsb2FkZWQpLiAgVG8gcHJldmVudCBpbml0aWFsaXppbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSBtb3JlIHRoYW4KLSAgIG9uY2UsIHdlIGtlZXAgYSBzdGF0aWMgZGljdGlvbmFyeSAnZXh0ZW5zaW9ucycga2V5ZWQgYnkgbW9kdWxlIG5hbWUKLSAgIChmb3IgYnVpbHQtaW4gbW9kdWxlcykgb3IgYnkgZmlsZW5hbWUgKGZvciBkeW5hbWljYWxseSBsb2FkZWQKLSAgIG1vZHVsZXMpLCBjb250YWluaW5nIHRoZXNlIG1vZHVsZXMuICBBIGNvcHkgb2YgdGhlIG1vZHVsZSdzCi0gICBkaWN0aW9uYXJ5IGlzIHN0b3JlZCBieSBjYWxsaW5nIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdCgpCi0gICBpbW1lZGlhdGVseSBhZnRlciB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgQQotICAgY29weSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlcmUgYnkgY2FsbGluZworICAgb25jZSwgd2Uga2VlcCBhIHN0YXRpYyBkaWN0aW9uYXJ5ICdleHRlbnNpb25zJyBrZXllZCBieSB0aGUgdHVwbGUKKyAgIChtb2R1bGUgbmFtZSwgbW9kdWxlIG5hbWUpICAoZm9yIGJ1aWx0LWluIG1vZHVsZXMpIG9yIGJ5CisgICAoZmlsZW5hbWUsIG1vZHVsZSBuYW1lKSAoZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzKSwgY29udGFpbmluZyB0aGVzZQorICAgbW9kdWxlcy4gIEEgY29weSBvZiB0aGUgbW9kdWxlJ3MgZGljdGlvbmFyeSBpcyBzdG9yZWQgYnkgY2FsbGluZworICAgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KCkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbgorICAgZnVuY3Rpb24gc3VjY2VlZHMuICBBIGNvcHkgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZXJlIGJ5IGNhbGxpbmcKICAgIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KCkuCiAKICAgIE1vZHVsZXMgd2hpY2ggZG8gc3VwcG9ydCBtdWx0aXBsZSBpbml0aWFsaXphdGlvbiBzZXQgdGhlaXIgbV9zaXplCkBAIC00NjksOCArNDY3LDkgQEAKIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqbW9kLCBQeU9iamVjdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZmlsZW5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm1vZHVsZXMsICpkaWN0OworICAgIFB5T2JqZWN0ICptb2R1bGVzLCAqZGljdCwgKmtleTsKICAgICBzdHJ1Y3QgUHlNb2R1bGVEZWYgKmRlZjsKKyAgICBpbnQgcmVzOwogICAgIGlmIChleHRlbnNpb25zID09IE5VTEwpIHsKICAgICAgICAgZXh0ZW5zaW9ucyA9IFB5RGljdF9OZXcoKTsKICAgICAgICAgaWYgKGV4dGVuc2lvbnMgPT0gTlVMTCkKQEAgLTUwNywxMiArNTA2LDE4IEBACiAgICAgICAgIGlmIChkZWYtPm1fYmFzZS5tX2NvcHkgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgUHlEaWN0X1NldEl0ZW0oZXh0ZW5zaW9ucywgZmlsZW5hbWUsIChQeU9iamVjdCopZGVmKTsKKyAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgZmlsZW5hbWUsIG5hbWUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtKGV4dGVuc2lvbnMsIGtleSwgKFB5T2JqZWN0ICopZGVmKTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQogCiBpbnQKLV9QeUltcG9ydF9GaXh1cEJ1aWx0aW4oUHlPYmplY3QgKm1vZCwgY2hhciAqbmFtZSkKK19QeUltcG9ydF9GaXh1cEJ1aWx0aW4oUHlPYmplY3QgKm1vZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBpbnQgcmVzOwogICAgIFB5T2JqZWN0ICpuYW1lb2JqOwpAQCAtNTI3LDExICs1MzIsMTUgQEAKIFB5T2JqZWN0ICoKIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm1vZCwgKm1kaWN0OworICAgIFB5T2JqZWN0ICptb2QsICptZGljdCwgKmtleTsKICAgICBQeU1vZHVsZURlZiogZGVmOwogICAgIGlmIChleHRlbnNpb25zID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGRlZiA9IChQeU1vZHVsZURlZiopUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9ucywgZmlsZW5hbWUpOworICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBmaWxlbmFtZSwgbmFtZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkZWYgPSAoUHlNb2R1bGVEZWYgKilQeURpY3RfR2V0SXRlbShleHRlbnNpb25zLCBrZXkpOworICAgIFB5X0RFQ1JFRihrZXkpOwogICAgIGlmIChkZWYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGRlZi0+bV9zaXplID09IC0xKSB7CkBAIC02NDcsMjIgKzY1NiwyMyBAQAogICogaW50ZXJmYWNlLiAgVGhlIG90aGVyIHR3byBleGlzdCBwcmltYXJpbHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAgKi8KIFB5T2JqZWN0ICoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKIHsKICAgICByZXR1cm4gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAogICAgICAgICBuYW1lLCBjbywgKGNoYXIgKilOVUxMLCAoY2hhciAqKU5VTEwpOwogfQogCiBQeU9iamVjdCAqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUpCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUpCiB7CiAgICAgcmV0dXJuIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygKICAgICAgICAgbmFtZSwgY28sIHBhdGhuYW1lLCAoY2hhciAqKU5VTEwpOwogfQogCiBQeU9iamVjdCAqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjaGFyICpwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcGF0aG5hbWUpCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIHsKICAgICBQeU9iamVjdCAqbSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5hbWVvYmosICpwYXRob2JqID0gTlVMTCwgKmNwYXRob2JqID0gTlVMTDsKQEAgLTY5Myw3ICs3MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gaW50ZXJwcmV0ZXIhIik7CiAgICAgICAgIH0KIAotICAgICAgICBwYXRob2JqID0gX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgIHBhdGhvYmogPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19nZXRfc291cmNlZmlsZSwgY3BhdGhvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgaWYgKHBhdGhvYmogPT0gTlVMTCkKQEAgLTgzNSw3ICs4NDUsNyBAQAogCiAKIC8qIEZvcndhcmQgKi8KLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiAqIGZpbmRfZnJvemVuKFB5T2JqZWN0ICopOworc3RhdGljIGNvbnN0IHN0cnVjdCBfZnJvemVuICogZmluZF9mcm96ZW4oUHlPYmplY3QgKik7CiAKIAogLyogSGVscGVyIHRvIHRlc3QgZm9yIGJ1aWx0LWluIG1vZHVsZSAqLwpAQCAtOTE3LDExICs5MjcsMTEgQEAKIFB5SW1wb3J0X0dldEltcG9ydGVyKFB5T2JqZWN0ICpwYXRoKSB7CiAgICAgUHlPYmplY3QgKmltcG9ydGVyPU5VTEwsICpwYXRoX2ltcG9ydGVyX2NhY2hlPU5VTEwsICpwYXRoX2hvb2tzPU5VTEw7CiAKLSAgICBpZiAoKHBhdGhfaW1wb3J0ZXJfY2FjaGUgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaW1wb3J0ZXJfY2FjaGUiKSkpIHsKLSAgICAgICAgaWYgKChwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIikpKSB7Ci0gICAgICAgICAgICBpbXBvcnRlciA9IGdldF9wYXRoX2ltcG9ydGVyKHBhdGhfaW1wb3J0ZXJfY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3MsIHBhdGgpOwotICAgICAgICB9CisgICAgcGF0aF9pbXBvcnRlcl9jYWNoZSA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9pbXBvcnRlcl9jYWNoZSIpOworICAgIHBhdGhfaG9va3MgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaG9va3MiKTsKKyAgICBpZiAocGF0aF9pbXBvcnRlcl9jYWNoZSAhPSBOVUxMICYmIHBhdGhfaG9va3MgIT0gTlVMTCkgeworICAgICAgICBpbXBvcnRlciA9IGdldF9wYXRoX2ltcG9ydGVyKHBhdGhfaW1wb3J0ZXJfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9ob29rcywgcGF0aCk7CiAgICAgfQogICAgIFB5X1hJTkNSRUYoaW1wb3J0ZXIpOyAvKiBnZXRfcGF0aF9pbXBvcnRlciByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlICovCiAgICAgcmV0dXJuIGltcG9ydGVyOwpAQCAtOTcyLDEwICs5ODIsMTAgQEAKIAogLyogRnJvemVuIG1vZHVsZXMgKi8KIAotc3RhdGljIHN0cnVjdCBfZnJvemVuICoKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqCiBmaW5kX2Zyb3plbihQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcDsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKIAogICAgIGlmIChuYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTkyLDcgKzEwMDIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9mcm96ZW5fb2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKICAgICBpbnQgc2l6ZTsKIAogICAgIGlmIChwID09IE5VTEwpIHsKQEAgLTEwMTAsMTMgKzEwMjAsMTMgQEAKICAgICBzaXplID0gcC0+c2l6ZTsKICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgIHNpemUgPSAtc2l6ZTsKLSAgICByZXR1cm4gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjaGFyICopcC0+Y29kZSwgc2l6ZSk7CisgICAgcmV0dXJuIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY29uc3QgY2hhciAqKXAtPmNvZGUsIHNpemUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogaXNfZnJvemVuX3BhY2thZ2UoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOwogICAgIGludCBzaXplOwogCiAgICAgaWYgKHAgPT0gTlVMTCkgewpAQCAtMTA0Myw3ICsxMDUzLDcgQEAKIGludAogUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOwogICAgIFB5T2JqZWN0ICpjbywgKm0sICpwYXRoOwogICAgIGludCBpc3BhY2thZ2U7CiAgICAgaW50IHNpemU7CkBAIC0xMDYyLDcgKzEwNzIsNyBAQAogICAgIGlzcGFja2FnZSA9IChzaXplIDwgMCk7CiAgICAgaWYgKGlzcGFja2FnZSkKICAgICAgICAgc2l6ZSA9IC1zaXplOwotICAgIGNvID0gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjaGFyICopcC0+Y29kZSwgc2l6ZSk7CisgICAgY28gPSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNvbnN0IGNoYXIgKilwLT5jb2RlLCBzaXplKTsKICAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghUHlDb2RlX0NoZWNrKGNvKSkgewpAQCAtMTA3MiwxOSArMTA4MiwxNyBAQAogICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgfQogICAgIGlmIChpc3BhY2thZ2UpIHsKLSAgICAgICAgLyogU2V0IF9fcGF0aF9fIHRvIHRoZSBwYWNrYWdlIG5hbWUgKi8KKyAgICAgICAgLyogU2V0IF9fcGF0aF9fIHRvIHRoZSBlbXB0eSBsaXN0ICovCiAgICAgICAgIFB5T2JqZWN0ICpkLCAqbDsKICAgICAgICAgaW50IGVycjsKICAgICAgICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZU9iamVjdChuYW1lKTsKICAgICAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgICAgIGwgPSBQeUxpc3RfTmV3KDEpOworICAgICAgICBsID0gUHlMaXN0X05ldygwKTsKICAgICAgICAgaWYgKGwgPT0gTlVMTCkgewogICAgICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGwsIDAsIG5hbWUpOwogICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19wYXRoX18iLCBsKTsKICAgICAgICAgUHlfREVDUkVGKGwpOwogICAgICAgICBpZiAoZXJyICE9IDApCkBAIC0xMTA2LDcgKzExMTQsNyBAQAogfQogCiBpbnQKLVB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZShjaGFyICpuYW1lKQorUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWVvYmo7CiAgICAgaW50IHJldDsKQEAgLTE0MzAsNyArMTQzOCw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGluaXRpYWxpemluZyA+IDApIHsKICAgICAgICAgICAgIC8qIF9ib290c3RyYXAuX2xvY2tfdW5sb2NrX21vZHVsZSgpIHJlbGVhc2VzIHRoZSBpbXBvcnQgbG9jayAqLwotICAgICAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgICAgIHZhbHVlID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19sb2NrX3VubG9ja19tb2R1bGUsIGFic19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQpAQCAtMTQ0OCw3ICsxNDU2LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIF9ib290c3RyYXAuX2ZpbmRfYW5kX2xvYWQoKSByZWxlYXNlcyB0aGUgaW1wb3J0IGxvY2sgKi8KLSAgICAgICAgbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgIG1vZCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fZmluZF9hbmRfbG9hZCwgYWJzX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0aW5zX2ltcG9ydCwgTlVMTCk7CiAgICAgICAgIGlmIChtb2QgPT0gTlVMTCkgewpAQCAtMTUxNyw3ICsxNTI1LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZmluYWxfbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgIGZpbmFsX21vZCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9faGFuZGxlX2Zyb21saXN0LCBtb2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0LCBidWlsdGluc19pbXBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwpAQCAtMTc3MSw3ICsxNzc5LDcgQEAKIGltcF9pc19mcm96ZW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpuYW1lOwotICAgIHN0cnVjdCBfZnJvemVuICpwOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppc19mcm96ZW4iLCAmbmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHAgPSBmaW5kX2Zyb3plbihuYW1lKTsKQEAgLTE3OTAsNyArMTc5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmcGF0aG5hbWUsICZmb2IpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoZm9iICE9IE5VTEwpIHsKLSAgICAgICAgZnAgPSBfUHlfZm9wZW4ocGF0aG5hbWUsICJyIik7CisgICAgICAgIGZwID0gX1B5X2ZvcGVuX29iaihwYXRobmFtZSwgInIiKTsKICAgICAgICAgaWYgKGZwID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihwYXRobmFtZSk7CiAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0ZGwuYyBiL1B5dGhvbi9pbXBvcnRkbC5jCmluZGV4IDBlYTk1NGMuLmI2MGYxYzcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRkbC5jCisrKyBiL1B5dGhvbi9pbXBvcnRkbC5jCkBAIC03Nyw2ICs3Nyw4IEBACiAgICAgICAgIFB5T2JqZWN0ICptc2cgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiZHluYW1pYyBtb2R1bGUgZG9lcyBub3QgZGVmaW5lICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbml0IGZ1bmN0aW9uIChQeUluaXRfJXMpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0bmFtZSk7CisgICAgICAgIGlmIChtc2cgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIFB5RXJyX1NldEltcG9ydEVycm9yKG1zZywgbmFtZSwgcGF0aCk7CiAgICAgICAgIFB5X0RFQ1JFRihtc2cpOwogICAgICAgICBnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGRsLmggYi9QeXRob24vaW1wb3J0ZGwuaAppbmRleCA2YjljZjc1Li42YTUxYTkxIDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0ZGwuaAorKysgYi9QeXRob24vaW1wb3J0ZGwuaApAQCAtMTgsMTMgKzE4LDggQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiB0eXBlZGVmIEZBUlBST0MgZGxfZnVuY3B0cjsKICNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSA8b3MyZGVmLmg+Ci10eXBlZGVmIGludCAoKiBBUElFTlRSWSBkbF9mdW5jcHRyKSgpOwotI2Vsc2UKIHR5cGVkZWYgdm9pZCAoKmRsX2Z1bmNwdHIpKHZvaWQpOwogI2VuZGlmCi0jZW5kaWYKIAogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRsaWIuaCBiL1B5dGhvbi9pbXBvcnRsaWIuaAppbmRleCBjYjZhZmM1Li44NjBiNTUzIDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0bGliLmgKKysrIGIvUHl0aG9uL2ltcG9ydGxpYi5oCkBAIC0xLDM5NyArMSwzMjMgQEAKIC8qIEF1dG8tZ2VuZXJhdGVkIGJ5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyAqLwotdW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7Citjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHsKICAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwKLSAgICAwLDY0LDAsMCwwLDExNSwyMDYsMywwLDAsMTAwLDAsMCw5MCwwLDAsCi0gICAgMTAwLDEzMSwwLDkwLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCwKKyAgICAwLDY0LDAsMCwwLDExNSw4NCw0LDAsMCwxMDAsMCwwLDkwLDAsMCwKKyAgICAxMDAsMTQ3LDAsOTAsMSwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLAogICAgIDIsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCwzLDAsMTAwLDgsCiAgICAgMCwxMDAsOSwwLDEzMiwwLDAsOTAsNCwwLDEwMCwxMCwwLDEwMCwxMSwwLAogICAgIDEzMiwwLDAsOTAsNSwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsCiAgICAgNiwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxNiwKICAgICAwLDEwMCwxNywwLDEzMiwwLDAsOTAsOCwwLDEwMCwxOCwwLDEwMCwxOSwwLAotICAgIDEzMiwwLDAsOTAsOSwwLDEwMCwyMCwwLDEwMCwyMSwwLDEwMCwyMiwwLDEzMiwKLSAgICAxLDAsOTAsMTAsMCwxMDAsMjMsMCwxMDAsMjQsMCwxMzIsMCwwLDkwLDExLAotICAgIDAsMTAxLDEyLDAsMTAxLDExLDAsMTA2LDEzLDAsMTMxLDEsMCw5MCwxNCwwLAotICAgIDEwMCwyNSwwLDEwMCwyNiwwLDEzMiwwLDAsOTAsMTUsMCwxMDUsMCwwLDkwLAorICAgIDEzMiwwLDAsOTAsOSwwLDEwMCwyMCwwLDEwMCwyMSwwLDEzMiwwLDAsOTAsCisgICAgMTAsMCwxMDAsMjIsMCwxMDAsMjMsMCwxMDAsMjQsMCwxMzIsMSwwLDkwLDExLAorICAgIDAsMTAwLDI1LDAsMTAwLDI2LDAsMTMyLDAsMCw5MCwxMiwwLDEwMSwxMywwLAorICAgIDEwMSwxMiwwLDEwNiwxNCwwLDEzMSwxLDAsOTAsMTUsMCwxMDUsMCwwLDkwLAogICAgIDE2LDAsMTA1LDAsMCw5MCwxNywwLDcxLDEwMCwyNywwLDEwMCwyOCwwLDEzMiwKICAgICAwLDAsMTAwLDI4LDAsMTAxLDE4LDAsMTMxLDMsMCw5MCwxOSwwLDcxLDEwMCwKICAgICAyOSwwLDEwMCwzMCwwLDEzMiwwLDAsMTAwLDMwLDAsMTMxLDIsMCw5MCwyMCwKICAgICAwLDcxLDEwMCwzMSwwLDEwMCwzMiwwLDEzMiwwLDAsMTAwLDMyLDAsMTMxLDIsCiAgICAgMCw5MCwyMSwwLDEwMCwzMywwLDEwMCwzNCwwLDEzMiwwLDAsOTAsMjIsMCwKICAgICAxMDAsMzUsMCwxMDAsMzYsMCwxMzIsMCwwLDkwLDIzLDAsMTAwLDM3LDAsMTAwLAotICAgIDM4LDAsMTMyLDAsMCw5MCwyNCwwLDEwMCwzOSwwLDEwMSwyNSwwLDEwMCw0MCwKLSAgICAwLDEzMSwxLDAsMTAwLDQxLDAsNjIsNjYsMTAxLDI1LDAsMTAwLDQyLDAsMTMxLAotICAgIDEsMCwxMDAsNDMsMCw2Miw2Niw5MCwyNiwwLDEwMSwyNywwLDEwMCw0NCwwLAotICAgIDEwMCw0NSwwLDEzMiwwLDAsMTAxLDI4LDAsMTAwLDQ2LDAsMTAwLDQ3LDAsMTAwLAotICAgIDQ4LDAsMTMxLDMsMCw2OCwxMzEsMSwwLDEzMSwxLDAsOTAsMjksMCwxMDAsCi0gICAgNDksMCw5MCwzMCwwLDEwMCw1MCwwLDEwMywxLDAsOTAsMzEsMCwxMDAsNTEsCi0gICAgMCwxMDMsMSwwLDkwLDMyLDAsMTAwLDUyLDAsMTAzLDEsMCw5MCwzMywwLAotICAgIDEwMCwxMzAsMCwxMDAsNTMsMCwxMDAsNTQsMCwxMzIsMSwwLDkwLDM1LDAsMTAwLAotICAgIDU1LDAsMTAwLDU2LDAsMTMyLDAsMCw5MCwzNiwwLDEwMCw1NywwLDEwMCw1OCwKLSAgICAwLDEzMiwwLDAsOTAsMzcsMCwxMDAsNTksMCwxMDAsNjAsMCwxMDAsNjEsMCwKLSAgICAxMDAsNjIsMCwxMzIsMCwxLDkwLDM4LDAsMTAwLDYzLDAsMTAwLDY0LDAsMTMyLAotICAgIDAsMCw5MCwzOSwwLDEwMCw2NSwwLDEwMCw2NiwwLDEzMiwwLDAsOTAsNDAsCi0gICAgMCwxMDAsNjcsMCwxMDAsNjgsMCwxMzIsMCwwLDkwLDQxLDAsMTAwLDY5LDAsCi0gICAgMTAwLDcwLDAsMTMyLDAsMCw5MCw0MiwwLDEwMCw3MSwwLDEwMCw3MiwwLDEzMiwKLSAgICAwLDAsOTAsNDMsMCwxMDAsNzMsMCwxMDAsNzQsMCwxMzIsMCwwLDkwLDQ0LAotICAgIDAsMTAwLDc1LDAsMTAwLDc2LDAsMTMyLDAsMCw5MCw0NSwwLDcxLDEwMCw3NywKLSAgICAwLDEwMCw3OCwwLDEzMiwwLDAsMTAwLDc4LDAsMTMxLDIsMCw5MCw0NiwwLAotICAgIDcxLDEwMCw3OSwwLDEwMCw4MCwwLDEzMiwwLDAsMTAwLDgwLDAsMTMxLDIsMCwKLSAgICA5MCw0NywwLDcxLDEwMCw4MSwwLDEwMCw4MiwwLDEzMiwwLDAsMTAwLDgyLDAsCi0gICAgMTMxLDIsMCw5MCw0OCwwLDcxLDEwMCw4MywwLDEwMCw4NCwwLDEzMiwwLDAsCi0gICAgMTAwLDg0LDAsMTMxLDIsMCw5MCw0OSwwLDcxLDEwMCw4NSwwLDEwMCw4NiwwLAotICAgIDEzMiwwLDAsMTAwLDg2LDAsMTAxLDQ5LDAsMTMxLDMsMCw5MCw1MCwwLDcxLAotICAgIDEwMCw4NywwLDEwMCw4OCwwLDEzMiwwLDAsMTAwLDg4LDAsMTMxLDIsMCw5MCwKLSAgICA1MSwwLDcxLDEwMCw4OSwwLDEwMCw5MCwwLDEzMiwwLDAsMTAwLDkwLDAsMTAxLAotICAgIDUxLDAsMTAxLDUwLDAsMTMxLDQsMCw5MCw1MiwwLDcxLDEwMCw5MSwwLDEwMCwKLSAgICA5MiwwLDEzMiwwLDAsMTAwLDkyLDAsMTAxLDUxLDAsMTAxLDQ5LDAsMTMxLDQsCi0gICAgMCw5MCw1MywwLDEwMywwLDAsOTAsNTQsMCw3MSwxMDAsOTMsMCwxMDAsOTQsCi0gICAgMCwxMzIsMCwwLDEwMCw5NCwwLDEzMSwyLDAsOTAsNTUsMCw3MSwxMDAsOTUsCi0gICAgMCwxMDAsOTYsMCwxMzIsMCwwLDEwMCw5NiwwLDEzMSwyLDAsOTAsNTYsMCwKLSAgICA3MSwxMDAsOTcsMCwxMDAsOTgsMCwxMzIsMCwwLDEwMCw5OCwwLDEzMSwyLDAsCi0gICAgOTAsNTcsMCw3MSwxMDAsOTksMCwxMDAsMTAwLDAsMTMyLDAsMCwxMDAsMTAwLDAsCi0gICAgMTMxLDIsMCw5MCw1OCwwLDcxLDEwMCwxMDEsMCwxMDAsMTAyLDAsMTMyLDAsMCwKLSAgICAxMDAsMTAyLDAsMTMxLDIsMCw5MCw1OSwwLDcxLDEwMCwxMDMsMCwxMDAsMTA0LDAsCi0gICAgMTMyLDAsMCwxMDAsMTA0LDAsMTMxLDIsMCw5MCw2MCwwLDEwMCwxMDUsMCwxMDAsCi0gICAgMTA2LDAsMTMyLDAsMCw5MCw2MSwwLDEwMCwxMDcsMCwxMDAsMTA4LDAsMTMyLDAsCi0gICAgMCw5MCw2MiwwLDEwMCwxMDksMCwxMDAsMTEwLDAsMTMyLDAsMCw5MCw2MywwLAotICAgIDEwMCwxMTEsMCw5MCw2NCwwLDEwMCwxMTIsMCwxMDAsMTEzLDAsMTMyLDAsMCw5MCwKLSAgICA2NSwwLDEwMCwxMTQsMCwxMDAsMTE1LDAsMTMyLDAsMCw5MCw2NiwwLDEwMCwxMzAsCi0gICAgMCwxMDAsNDYsMCwxMDAsMTE2LDAsMTAwLDExNywwLDEzMiwyLDAsOTAsNjcsMCwKLSAgICAxMDAsMTE4LDAsMTAwLDExOSwwLDEzMiwwLDAsOTAsNjgsMCwxMDAsMTIwLDAsMTAwLAotICAgIDEyMSwwLDEzMiwwLDAsOTAsNjksMCwxMDAsMTIyLDAsMTAwLDEyMywwLDEzMiwwLAotICAgIDAsOTAsNzAsMCwxMDAsMTMwLDAsMTAwLDEzMCwwLDEwMiwwLDAsMTAwLDQ2LDAsCi0gICAgMTAwLDEyNCwwLDEwMCwxMjUsMCwxMzIsNCwwLDkwLDcxLDAsMTAwLDEyNiwwLDEwMCwKLSAgICAxMjcsMCwxMzIsMCwwLDkwLDcyLDAsMTAwLDEyOCwwLDEwMCwxMjksMCwxMzIsMCwKLSAgICAwLDkwLDczLDAsMTAwLDEzMCwwLDgzLDQwLDEzMiwwLDAsMCwxMTcsODMsMSwKLSAgICAwLDAsNjcsMTExLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsCi0gICAgMTAsMTAsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiw3OCw3OSw4NCwzMiwxMDksMTAxLDk3LDExMCwxMTYsMzIsMTE2LDExMSwzMiw5OCwxMDEsCi0gICAgMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMDAsMzMsMzIsNzMsMTE2LDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsMzIsCi0gICAgMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTUsMTE3LDk5LDEwNCwxMCwxMTYsMTA0LAotICAgIDk3LDExNiwzMiwxMDUsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDExMiwxMDEsMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiw4MCwKLSAgICAxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw0NiwzMiw2NSwxMTUsMTAsMTE1LDExNyw5OSwxMDQsMzIsMTA1LAotICAgIDExNiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwKLSAgICAxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTUsMTEyLDEwMSw5OSwKLSAgICAxMDUsMTAyLDEwNSw5OSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwKLSAgICAzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTExLAotICAgIDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDEwLDExOSwxMTEsMTE0LDEwNyw0NiwzMiw3OSwxMTAsCi0gICAgMTAxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNywxMTUsMTAxLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTcsCi0gICAgOTgsMTA4LDEwNSw5OSw0NSwxMDIsOTcsOTksMTA1LDExMCwxMDMsMzIsMTE4LDEwMSwxMTQsMTE1LAotICAgIDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDQ2LDEwLDEwLDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNyw2LDAsCi0gICAgMCwwLDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsMTE3LDYsMCwwLDAsMTAwLDk3LDExNCwKLSAgICAxMTksMTA1LDExMCw5OSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSw0OSwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTA2LDIsMCwxMTYsMywwLDEzMSwxLDAsMTE0LDMzLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzMiwwLDAsMTI1LDAsMCwxMTAsMTIsMCwxMDAsMywKLSAgICAwLDEwMCwyLDAsMTMyLDAsMCwxMjUsMCwwLDEyNCwwLDAsODMsNDAsNCwKLSAgICAwLDAsMCw3OCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDgzLDAsMCwwLDExNSwxMywwLDAsMCwxMDAsMSwKLSAgICAwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDUzLDAsMCwwLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk5LAotICAgIDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsCi0gICAgMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsMTE1LDEyLDAsMCwwLDgwLAotICAgIDg5LDg0LDcyLDc5LDc4LDY3LDY1LDgzLDY5LDc5LDc1LDQwLDIsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNywwLDAsMCwxMDEsMTEwLDExOCwKLSAgICAxMDUsMTE0LDExMSwxMTAsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsCi0gICAgOTUsOTksOTcsMTE1LDEwMSwzNCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsCi0gICAgMTE3LDM3LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCwKLSAgICA5NSw5OSw5NywxMTUsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwKLSAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDgzLDAsMCwwLDExNSwKLSAgICA0LDAsMCwwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNTMsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsOTksMTA0LDEwMSw5OSwKLSAgICAxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwxMTAsMTE1LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0Niw3MCw0MCwxLDAsMCwwLDExNyw1LDAsCi0gICAgMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMzgsMCwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwyLDQwLDQsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsCi0gICAgMTE3LDgsMCwwLDAsMTEyLDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDExNywxMCwwLAotICAgIDAsMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwxMTcsMjcsMCwwLAotICAgIDAsOTUsNjcsNjUsODMsNjksOTUsNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsCi0gICAgODYsNjksOTUsODAsNzYsNjUsODQsNzAsNzksODIsNzcsODMsNDAsMSwwLDAsCi0gICAgMCwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwKLSAgICAxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwKLSAgICAwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LAotICAgIDExNSwxMDEsMzIsMCwwLDAsMTE1LDgsMCwwLDAsMCwxLDE4LDEsMTUsCi0gICAgNCwxMiwzLDExNywxNiwwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLAotICAgIDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMDgsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDAsMCwxMDMsMCwKLSAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDEsMCwKLSAgICA2NCwxMzEsMSwwLDEsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDIsCi0gICAgMCw2MywxMDAsMSwwLDY0LDEzMSwxLDAsMSwxMjQsMSwwLDEwNiwxLDAsCi0gICAgMTI0LDAsMCwxMDAsMywwLDYzLDEwMCwxLDAsNjQsMTMxLDEsMCwxLDEyNCwKLSAgICAxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCw0LDAsNjMsMTAwLDEsMCw2NCwKLSAgICAxMzEsMSwwLDEsMTE2LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsNSwKLSAgICAwLDAsMCwxMTcsMTExLDAsMCwwLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLAotICAgIDk3LDMyLDUxLDUwLDQ1LDk4LDEwNSwxMTYsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LAotICAgIDMyLDExNiwxMTEsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LAotICAgIDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4OCw4OCw4OCwzMiw4NCwxMDEsMTA5LDExMiwKLSAgICAxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTE3LDExMCwxMTYsMTA1LDEwOCwzMiwxMDksOTcsMTE0LDExNSwKLSAgICAxMDQsOTcsMTA4LDM5LDExNSwzMiwxMDgsMTExLDExMCwxMDMsMzIsMTAyLDExNywxMTAsOTksMTE2LAotICAgIDEwNSwxMTEsMTEwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMjAsMTEyLDExMSwxMTUsMTAxLDEwMCwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMDUsMjU1LDAsMCwwLDEwNSw4LDAsMCwKLSAgICAwLDEwNSwxNiwwLDAsMCwxMDUsMjQsMCwwLDAsNDAsMywwLDAsMCwKLSAgICAxMTcsMywwLDAsMCwxMDUsMTEwLDExNiwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLAotICAgIDEwMSwxMTAsMTAwLDExNyw5LDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk3LDExNCwxMTQsOTcsCi0gICAgMTIxLDQwLDIsMCwwLDAsMTE3LDEsMCwwLDAsMTIwLDExNyw5LDAsMCwKLSAgICAwLDEwNSwxMTAsMTE2LDk1LDk4LDEyMSwxMTYsMTAxLDExNSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsMCwwLDk1LDExOSw5NSwxMDgsMTExLAotICAgIDExMCwxMDMsNDUsMCwwLDAsMTE1LDE0LDAsMCwwLDAsNiwxMiwxLDYsCi0gICAgMSwxNywxLDIxLDEsMjEsMSwyMSwxLDExNyw3LDAsMCwwLDk1LDExOSwKLSAgICA5NSwxMDgsMTExLDExMCwxMDMsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNjgsMCwwLDAsMTI0LAotICAgIDAsMCwxMDAsMSwwLDI1LDEyNSwxLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwKLSAgICAyLDAsMjUsMTAwLDMsMCw2Miw3OSwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsCi0gICAgMCwxMDAsNCwwLDI1LDEwMCw1LDAsNjIsNzksMTI1LDEsMCwxMjQsMSwwLAotICAgIDEyNCwwLDAsMTAwLDYsMCwyNSwxMDAsNywwLDYyLDc5LDEyNSwxLDAsMTI0LAotICAgIDEsMCw4Myw0MCw4LDAsMCwwLDExNywxMTUsMCwwLDAsNjcsMTExLDExMCwKLSAgICAxMTgsMTAxLDExNCwxMTYsMzIsNTIsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsCi0gICAgMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LDExMCwzMiwxMTYsMTExLAotICAgIDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNiwxMDEsMTAzLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsODgsODgsODgsMzIsODQsMTAxLDEwOSwxMTIsMTExLDExNCw5NywxMTQsMTIxLDMyLAotICAgIDExNywxMTAsMTE2LDEwNSwxMDgsMzIsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwzOSwxMTUsMzIsCi0gICAgMTA4LDExMSwxMTAsMTAzLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDEwMSwxMjAsMTEyLDExMSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAxMDUsMCwwLDAsMCwxMDUsMSwwLDAsMCwxMDUsOCwwLDAsMCwxMDUsCi0gICAgMiwwLDAsMCwxMDUsMTYsMCwwLDAsMTA1LDMsMCwwLDAsMTA1LDI0LAotICAgIDAsMCwwLDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsOSwwLAotICAgIDAsMCwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE3LDEsMCwwLDAsCi0gICAgMTIwLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDcsMCwKLSAgICAwLDAsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw2MSwwLDAsMCwxMTUsMTAsMCwKLSAgICAwLDAsMCw2LDEwLDEsMTgsMSwxOCwxLDE4LDEsMTE3LDcsMCwwLAotICAgIDAsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw5OSwwLDAsMCwwLDAsMCwwLAotICAgIDAsMywwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLDExNSwxMDMsMCwKLSAgICAwLDAsMTAzLDAsMCwxMjUsMSwwLDEyMCw3MSwwLDEyNCwwLDAsNjgsOTMsCi0gICAgNjMsMCwxMjUsMiwwLDEyNCwyLDAsMTE1LDMxLDAsMTEzLDEzLDAsMTEwLDAsCi0gICAgMCwxMjQsMSwwLDEwNiwwLDAsMTI0LDIsMCwxMzEsMSwwLDEsMTI0LDIsCi0gICAgMCwxMDAsNCwwLDI1LDExNiwxLDAsMTA3LDcsMCwxMTQsMTMsMCwxMjQsMSwKLSAgICAwLDEwNiwwLDAsMTE2LDIsMCwxMzEsMSwwLDEsMTEzLDEzLDAsMTEzLDEzLAotICAgIDAsODcsMTAwLDIsMCwxMDYsMywwLDEyNCwxLDAsMTAwLDMsMCwxMDAsNSwKLSAgICAwLDEzMywyLDAsMjUsMTMxLDEsMCw4Myw0MCw2LDAsMCwwLDExNywzMSwKLSAgICAwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwKLSAgICAxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA2LDExMSwxMDUsMTEwLDQwLAotICAgIDQxLDQ2LDEwNSwxLDAsMCwwLDExNywwLDAsMCwwLDc4LDEwNSwyNTUsMjU1LAotICAgIDI1NSwyNTUsMTA1LDI1NSwyNTUsMjU1LDI1NSw0MCw0LDAsMCwwLDExNyw2LDAsMCwKLSAgICAwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTE3LDE1LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDQsMCwwLDAsMTA2LDExMSwxMDUsCi0gICAgMTEwLDQwLDMsMCwwLDAsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LAotICAgIDExMiw5NywxMTQsMTE2LDExNSwxMTcsOSwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMTIsOTcsCi0gICAgMTE0LDExNiwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNCwxMTYsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDc0LDAsMCwwLDExNSwxNiwwLDAsMCwKLSAgICAwLDIsNiwxLDEzLDEsNiwxLDYsMSwxMywxLDE2LDEsMjAsMSwKLSAgICAxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDk5LAotICAgIDEsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDg1LDAsMCwwLDEyMCw0OCwwLDExNiwwLDAsMTI0LAotICAgIDAsMCwxMzEsMSwwLDY4LDkzLDI4LDAsMTI1LDEsMCwxMjQsMSwwLDExNiwKLSAgICAxLDAsMTA3LDYsMCwxMTQsMTMsMCwxMjQsMSwwLDEyNSwyLDAsODAsMTEzLAotICAgIDEzLDAsMTEzLDEzLDAsODcsMTE2LDIsMCwxMjUsMiwwLDEyNCwwLDAsMTA2LAotICAgIDMsMCwxMjQsMiwwLDEzMSwxLDAsOTIsMywwLDEyNSwzLDAsMTI1LDQsCi0gICAgMCwxMjUsNSwwLDEyNCwzLDAsMTI0LDUsMCwxMDIsMiwwLDgzLDQwLDEsCi0gICAgMCwwLDAsMTE3LDMyLDAsMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwKLSAgICAxMTUsMTEyLDEwOCwxMDUsMTE2LDQwLDQxLDQ2LDQwLDQsMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsMTE0LDEwMSwxMTgsMTAxLDExNCwxMTUsMTAxLDEwMCwxMTcsMTUsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwxMTcsMTAsMCwwLDAsCi0gICAgMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsNDAsNiwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMSwwLDAsMCwxMjAsMTE3LDMsCi0gICAgMCwwLDAsMTE1LDEwMSwxMTIsMTE3LDUsMCwwLDAsMTAyLDExNCwxMTEsMTEwLDExNiwKLSAgICAxMTcsMSwwLDAsMCw5NSwxMTcsNCwwLDAsMCwxMTYsOTcsMTA1LDEwOCw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDg2LDAsMCwwLDExNSwKLSAgICAxNCwwLDAsMCwwLDIsMTksMSwxMiwxLDYsMSw4LDIsNiwxLAotICAgIDI0LDEsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LAotICAgIDEwNSwxMTYsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDYxLDAsMCwwLDEyMSwxOSwwLDExNiwKLSAgICAwLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMTAsCi0gICAgMjIsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwxLDEsMTAwLAotICAgIDIsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTA2LDQsMCwxMDAsMSwKLSAgICAwLDY0LDEyNCwxLDAsMTA3LDIsMCw4Myw0MCwzLDAsMCwwLDExNyw0OSwKLSAgICAwLDAsMCw4NCwxMDEsMTE1LDExNiwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwxMTQsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTYsCi0gICAgMTIxLDExMiwxMDEsNDYsMTA1LDAsMjQwLDAsMCw3MCw0MCw1LDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsCi0gICAgMTE3LDcsMCwwLDAsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LDExNyw1LDAsMCwKLSAgICAwLDcwLDk3LDEwOCwxMTUsMTAxLDExNyw3LDAsMCwwLDExNSwxMTYsOTUsMTA5LDExMSwKLSAgICAxMDAsMTAxLDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgMTE3LDQsMCwwLDAsMTA5LDExMSwxMDAsMTAxLDExNyw5LDAsMCwwLDExNSwxMTYsCi0gICAgOTcsMTE2LDk1LDEwNSwxMTAsMTAyLDExMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxOCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LAotICAgIDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsOTgsMCwwLDAsMTE1LDEwLAotICAgIDAsMCwwLDAsMiwzLDEsMTksMSwxMywxLDksMSwxMTcsMTgsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsCi0gICAgMTE2LDEyMSwxMTIsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKKyAgICAzOCwwLDEzMiwwLDAsOTAsMjQsMCwxMDAsMzksMCwxMDYsMjUsMCwxMDAsNDAsCisgICAgMCwxMDAsNDEsMCwxMzEsMiwwLDEwMCw0MiwwLDIzLDkwLDI2LDAsMTAxLDI3LAorICAgIDAsMTA2LDI4LDAsMTAxLDI2LDAsMTAwLDQxLDAsMTMxLDIsMCw5MCwyOSwwLAorICAgIDEwMCw0MywwLDkwLDMwLDAsMTAwLDQ0LDAsMTAzLDEsMCw5MCwzMSwwLDEwMCwKKyAgICA0NSwwLDEwMywxLDAsOTAsMzIsMCwxMDAsNDYsMCwxMDMsMSwwLDkwLDMzLAorICAgIDAsMTAwLDQ3LDAsMTAwLDQ4LDAsMTAwLDQ5LDAsMTMyLDEsMCw5MCwzNCwwLAorICAgIDEwMCw1MCwwLDEwMCw1MSwwLDEzMiwwLDAsOTAsMzUsMCwxMDAsNTIsMCwxMDAsCisgICAgNTMsMCwxMzIsMCwwLDkwLDM2LDAsMTAwLDU0LDAsMTAwLDU1LDAsMTMyLDAsCisgICAgMCw5MCwzNywwLDEwMCw1NiwwLDEwMCw1NywwLDEwMCw1OCwwLDEwMCw1OSwwLAorICAgIDEzMiwwLDEsOTAsMzgsMCw3MSwxMDAsNjAsMCwxMDAsNjEsMCwxMzIsMCwwLAorICAgIDEwMCw2MSwwLDEzMSwyLDAsOTAsMzksMCw3MSwxMDAsNjIsMCwxMDAsNjMsMCwKKyAgICAxMzIsMCwwLDEwMCw2MywwLDEwMSwzOSwwLDEzMSwzLDAsOTAsNDAsMCwxMDAsCisgICAgNjQsMCwxMDAsNjUsMCwxMDAsNjYsMCwxMDAsNjcsMCwxMzIsMCwxLDkwLDQxLAorICAgIDAsMTAwLDY4LDAsMTAwLDY5LDAsMTMyLDAsMCw5MCw0MiwwLDEwMCw3MCwwLAorICAgIDEwMCw3MSwwLDEzMiwwLDAsOTAsNDMsMCwxMDAsNzIsMCwxMDAsNzMsMCwxMzIsCisgICAgMCwwLDkwLDQ0LDAsMTAwLDc0LDAsMTAwLDc1LDAsMTMyLDAsMCw5MCw0NSwKKyAgICAwLDEwMCw3NiwwLDEwMCw3NywwLDEzMiwwLDAsOTAsNDYsMCwxMDAsNzgsMCwKKyAgICAxMDAsNzksMCwxMzIsMCwwLDkwLDQ3LDAsMTAwLDgwLDAsMTAwLDgxLDAsMTMyLAorICAgIDAsMCw5MCw0OCwwLDEwMCw4MiwwLDEwMCw4MywwLDEzMiwwLDAsOTAsNDksCisgICAgMCwxMDAsNDcsMCwxMDAsNDcsMCwxMDAsNDcsMCwxMDAsODQsMCwxMDAsODUsMCwKKyAgICAxMzIsMywwLDkwLDUwLDAsMTAwLDQ3LDAsMTAwLDQ3LDAsMTAwLDQ3LDAsMTAwLAorICAgIDg2LDAsMTAwLDg3LDAsMTMyLDMsMCw5MCw1MSwwLDEwMCw4OCwwLDEwMCw4OCwKKyAgICAwLDEwMCw4OSwwLDEwMCw5MCwwLDEzMiwyLDAsOTAsNTIsMCwxMDAsOTEsMCwKKyAgICAxMDAsOTIsMCwxMzIsMCwwLDkwLDUzLDAsNzEsMTAwLDkzLDAsMTAwLDk0LDAsCisgICAgMTMyLDAsMCwxMDAsOTQsMCwxMzEsMiwwLDkwLDU0LDAsNzEsMTAwLDk1LDAsCisgICAgMTAwLDk2LDAsMTMyLDAsMCwxMDAsOTYsMCwxMzEsMiwwLDkwLDU1LDAsNzEsCisgICAgMTAwLDk3LDAsMTAwLDk4LDAsMTMyLDAsMCwxMDAsOTgsMCwxMzEsMiwwLDkwLAorICAgIDU2LDAsNzEsMTAwLDk5LDAsMTAwLDEwMCwwLDEzMiwwLDAsMTAwLDEwMCwwLDEzMSwKKyAgICAyLDAsOTAsNTcsMCw3MSwxMDAsMTAxLDAsMTAwLDEwMiwwLDEzMiwwLDAsMTAwLAorICAgIDEwMiwwLDEwMSw1NywwLDEzMSwzLDAsOTAsNTgsMCw3MSwxMDAsMTAzLDAsMTAwLAorICAgIDEwNCwwLDEzMiwwLDAsMTAwLDEwNCwwLDEzMSwyLDAsOTAsNTksMCw3MSwxMDAsCisgICAgMTA1LDAsMTAwLDEwNiwwLDEzMiwwLDAsMTAwLDEwNiwwLDEwMSw1OSwwLDEwMSw1OCwKKyAgICAwLDEzMSw0LDAsOTAsNjAsMCw3MSwxMDAsMTA3LDAsMTAwLDEwOCwwLDEzMiwwLAorICAgIDAsMTAwLDEwOCwwLDEwMSw1OSwwLDEwMSw1NywwLDEzMSw0LDAsOTAsNjEsMCwKKyAgICAxMDMsMCwwLDkwLDYyLDAsNzEsMTAwLDEwOSwwLDEwMCwxMTAsMCwxMzIsMCwwLAorICAgIDEwMCwxMTAsMCwxMzEsMiwwLDkwLDYzLDAsNzEsMTAwLDExMSwwLDEwMCwxMTIsMCwKKyAgICAxMzIsMCwwLDEwMCwxMTIsMCwxMzEsMiwwLDkwLDY0LDAsNzEsMTAwLDExMywwLAorICAgIDEwMCwxMTQsMCwxMzIsMCwwLDEwMCwxMTQsMCwxMzEsMiwwLDkwLDY1LDAsNzEsCisgICAgMTAwLDExNSwwLDEwMCwxMTYsMCwxMzIsMCwwLDEwMCwxMTYsMCwxMzEsMiwwLDkwLAorICAgIDY2LDAsNzEsMTAwLDExNywwLDEwMCwxMTgsMCwxMzIsMCwwLDEwMCwxMTgsMCwxMzEsCisgICAgMiwwLDkwLDY3LDAsNzEsMTAwLDExOSwwLDEwMCwxMjAsMCwxMzIsMCwwLDEwMCwKKyAgICAxMjAsMCwxMzEsMiwwLDkwLDY4LDAsMTAwLDEyMSwwLDEwMCwxMjIsMCwxMzIsMCwKKyAgICAwLDkwLDY5LDAsMTAwLDEyMywwLDEwMCwxMjQsMCwxMzIsMCwwLDkwLDcwLDAsCisgICAgMTAwLDEyNSwwLDEwMCwxMjYsMCwxMzIsMCwwLDkwLDcxLDAsMTAwLDEyNywwLDkwLAorICAgIDcyLDAsMTAxLDcyLDAsMTAwLDEyOCwwLDIzLDkwLDczLDAsMTAwLDEyOSwwLDEwMCwKKyAgICAxMzAsMCwxMzIsMCwwLDkwLDc0LDAsMTAwLDEzMSwwLDEwMCwxMzIsMCwxMzIsMCwKKyAgICAwLDkwLDc1LDAsMTAwLDQ3LDAsMTAwLDg4LDAsMTAwLDEzMywwLDEwMCwxMzQsMCwKKyAgICAxMzIsMiwwLDkwLDc2LDAsMTAwLDEzNSwwLDEwMCwxMzYsMCwxMzIsMCwwLDkwLAorICAgIDc3LDAsMTAwLDEzNywwLDEwMCwxMzgsMCwxMzIsMCwwLDkwLDc4LDAsMTAwLDEzOSwKKyAgICAwLDEwMCwxNDAsMCwxMzIsMCwwLDkwLDc5LDAsMTAwLDQ3LDAsMTAwLDQ3LDAsCisgICAgMTAyLDAsMCwxMDAsODgsMCwxMDAsMTQxLDAsMTAwLDE0MiwwLDEzMiw0LDAsOTAsCisgICAgODAsMCwxMDAsMTQzLDAsMTAwLDE0NCwwLDEzMiwwLDAsOTAsODEsMCwxMDAsMTQ1LAorICAgIDAsMTAwLDE0NiwwLDEzMiwwLDAsOTAsODIsMCwxMDAsNDcsMCw4Myw0MSwxNDgsCisgICAgOTcsODMsMSwwLDAsNjcsMTExLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCisgICAgMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsNDYsMTAsMTAsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTA1LDExNSwzMiw3OCw3OSw4NCwzMiwxMDksMTAxLDk3LDExMCwxMTYsMzIsMTE2LDExMSwKKyAgICAzMiw5OCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDEwMSwxMDAsMzMsMzIsNzMsMTE2LDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLAorICAgIDEwMSwxMTAsMzIsMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTUsMTE3LDk5LDEwNCwKKyAgICAxMCwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsCisgICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDExMiwxMDEsMTAwLDMyLDEwNSwxMTAsMTE2LAorICAgIDExMSwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLAorICAgIDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NiwzMiw2NSwxMTUsMTAsMTE1LDExNyw5OSwKKyAgICAxMDQsMzIsMTA1LDExNiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwNSwxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTUsCisgICAgMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSw5OSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsCisgICAgOTcsMTEwLDEwMCwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwNSwKKyAgICAxMTAsMzIsMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDEwLDExOSwxMTEsMTE0LDEwNyw0NiwKKyAgICAzMiw3OSwxMTAsMTAxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNywxMTUsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExMiwxMTcsOTgsMTA4LDEwNSw5OSw0NSwxMDIsOTcsOTksMTA1LDExMCwxMDMsMzIsMTE4LAorICAgIDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDIxOCwzLDExOSwxMDUsMTEwLDIxOCw2LDk5LAorICAgIDEyMSwxMDMsMTE5LDEwNSwxMTAsMjE4LDYsMTAwLDk3LDExNCwxMTksMTA1LDExMCw5OSwwLDAsCisgICAgMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSw0OSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwKKyAgICAxMTYsMywwLDEzMSwxLDAsMTE0LDMzLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwKKyAgICAwLDAsMTI1LDAsMCwxMTAsMTIsMCwxMDAsMywwLDEwMCwyLDAsMTMyLDAsCisgICAgMCwxMjUsMCwwLDEyNCwwLDAsODMsNDEsNCw3OCw5OSwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDgzLDAsMCwwLAorICAgIDExNSwxMywwLDAsMCwxMDAsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwKKyAgICAwLDgzLDQxLDIsMTIyLDUzLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLAorICAgIDk5LDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwKKyAgICAxMDEsMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsMTE1LDEyLDAsMCwwLAorICAgIDgwLDg5LDg0LDcyLDc5LDc4LDY3LDY1LDgzLDY5LDc5LDc1LDQxLDIsMjE4LDMsCisgICAgOTUsMTExLDExNSw5MCw3LDEwMSwxMTAsMTE4LDEwNSwxMTQsMTExLDExMCwxNjksMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwyNTAsMjksNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKKyAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAorICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMjE4LDExLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSwKKyAgICA5OSw5NywxMTUsMTAxLDMwLDAsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsCisgICAgMzcsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwKKyAgICAxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTA4LDk3LAorICAgIDEyMCw5NSw5OSw5NywxMTUsMTAxLDk5LDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDEsMCwwLDAsODMsMCwwLDAsMTE1LDQsMCwwLDAsCisgICAgMTAwLDEsMCw4Myw0MSwyLDEyMiw1Myw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LAorICAgIDEwMSwzMiw5OSwxMDQsMTAxLDk5LDEwNywxMDEsMTAwLDMyLDk5LDk3LDExNSwxMDEsNDUsMTA1LAorICAgIDExMCwxMTUsMTAxLDExMCwxMTUsMTA1LDExNiwxMDUsMTE4LDEwMSwxMDgsMTIxLDQ2LDcwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCw2LDAsMCwwLDM0LDAsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsMiw0MSw0LDIxOCwzLDExNSwxMjEsMTE1LDIxOCw4LAorICAgIDExMiwxMDgsOTcsMTE2LDEwMiwxMTEsMTE0LDEwOSwyMTgsMTAsMTE1LDExNiw5NywxMTQsMTE2LDExNSwKKyAgICAxMTksMTA1LDExNiwxMDQsMjE4LDI3LDk1LDY3LDY1LDgzLDY5LDk1LDczLDc4LDgzLDY5LAorICAgIDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LDgwLDc2LDY1LDg0LDcwLDc5LDgyLDc3LAorICAgIDgzLDQxLDEsMTE0LDYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDE2LDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwKKyAgICAxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDI4LDAsMCwwLDExNSw4LDAsCisgICAgMCwwLDAsMSwxOCwxLDE1LDQsMTIsMywxMTQsMTEsMCwwLDAsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMTAwLDEsMCw2NCwxMDYsMSwwLDEwMCwyLDAsMTAwLDMsMCwxMzEsCisgICAgMiwwLDgzLDQxLDQsMTIyLDQyLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLDk3LAorICAgIDMyLDUxLDUwLDQ1LDk4LDEwNSwxMTYsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LDMyLAorICAgIDExNiwxMTEsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LDExMCwKKyAgICA0NiwxMDgsMywwLDAsMCwyNTUsMTI3LDI1NSwxMjcsMywwLDIzMyw0LDAsMCwKKyAgICAwLDIxOCw2LDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQxLDIsMjE4LDMsMTA1LDExMCwxMTYsCisgICAgMjE4LDgsMTE2LDExMSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMSwyMTgsMSwxMjAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDcsCisgICAgOTUsMTE5LDk1LDEwOCwxMTEsMTEwLDEwMyw0MCwwLDAsMCwxMTUsMiwwLDAsMCwKKyAgICAwLDIsMTE0LDE3LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwKKyAgICAwLDExNiwwLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCwKKyAgICA4Myw0MSwyLDEyMiw0Nyw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiw1MiwzMiw5OCwKKyAgICAxMjEsMTE2LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMDgsMTA1LDExNiwxMTYsMTA4LDEwMSw0NSwxMDEsCisgICAgMTEwLDEwMCwxMDUsOTcsMTEwLDMyLDExNiwxMTEsMzIsOTcsMTEwLDMyLDEwNSwxMTAsMTE2LDEwMSwKKyAgICAxMDMsMTAxLDExNCw0NiwxMTQsMTMsMCwwLDAsNDEsMiwxMTQsMTQsMCwwLDAsCisgICAgMjE4LDEwLDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMSw5MCw5LAorICAgIDEwNSwxMTAsMTE2LDk1LDk4LDEyMSwxMTYsMTAxLDExNSwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsNyw5NSwxMTQsOTUsMTA4LDExMSwxMTAsCisgICAgMTAzLDQ1LDAsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTQsMTksMCwwLAorICAgIDAsOTksMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLAorICAgIDAsMCw3MSwwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LDAsMCwxMDYsMSwKKyAgICAwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNCwwLDAsNjgsMTMxLDEsCisgICAgMCwxMzEsMSwwLDgzLDQxLDMsMTIyLDMxLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwKKyAgICAxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwKKyAgICA0NiwxMDYsMTExLDEwNSwxMTAsNDAsNDEsNDYsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsNCwwLDAsMCw4MywwLDAsMCwxMTUsMzcsMCwKKyAgICAwLDAsMTAzLDAsMCwxMjQsMCwwLDkzLDI3LDAsMTI1LDEsMCwxMjQsMSwKKyAgICAwLDExNCw2LDAsMTI0LDEsMCwxMDYsMCwwLDExNiwxLDAsMTMxLDEsMCwKKyAgICAxNDUsMiwwLDExMyw2LDAsODMsMTE0LDQsMCwwLDAsNDEsMiwyMTgsNiwKKyAgICAxMTQsMTE1LDExNiwxMTQsMTA1LDExMiwyMTgsMTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsCisgICAgOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSw0MSwyLDIxOCwyLDQ2LDQ4LDIxOCw0LDExMiwKKyAgICA5NywxMTQsMTE2LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDI1MCwxMCw2MCwxMDgsMTA1LDExNSwxMTYsOTksMTExLDEwOSwxMTIsNjIsNTIsMCwKKyAgICAwLDAsMTE1LDIsMCwwLDAsOSwxLDEyMiwzMCw5NSwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMDYsMTExLDEwNSwxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLAorICAgIDEwOCwxMDUsMTE1LDExNiw5OSwxMTEsMTA5LDExMiw2Miw0MSwyLDIxOCw4LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDExNSwxMDEsMTEyLDIxOCw0LDEwNiwxMTEsMTA1LDExMCw0MSwxLDIxOCwxMCwxMTIsCisgICAgOTcsMTE2LDEwNCw5NSwxMTIsOTcsMTE0LDExNiwxMTUsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDk1LDExMiw5NywxMTYsMTA0LDk1LAorICAgIDEwNiwxMTEsMTA1LDExMCw1MCwwLDAsMCwxMTUsNCwwLDAsMCwwLDIsMTUsCisgICAgMSwxMTQsMjgsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDUsCisgICAgMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMTM0LDAsMCwwLAorICAgIDExNiwwLDAsMTE2LDEsMCwxMzEsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsCisgICAgNTIsMCwxMjQsMCwwLDEwNiwyLDAsMTE2LDMsMCwxMzEsMSwwLDkyLDMsCisgICAgMCwxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMSwwLDEyNCwzLDAsCisgICAgMTAyLDIsMCw4MywxMjAsNjksMCwxMTYsNCwwLDEyNCwwLDAsMTMxLDEsMCwKKyAgICA2OCw5Myw1NSwwLDEyNSw0LDAsMTI0LDQsMCwxMTYsMSwwLDEwNyw2LDAsCisgICAgMTE0LDY1LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCw0LDAsMTAwLDIsMCwxMDAsCisgICAgMSwwLDEzMSwxLDEsOTIsMiwwLDEyNSwxLDAsMTI1LDMsMCwxMjQsMSwKKyAgICAwLDEyNCwzLDAsMTAyLDIsMCw4MywxMTMsNjUsMCw4NywxMDAsMywwLDEyNCwKKyAgICAwLDAsMTAyLDIsMCw4Myw0MSw0LDEyMiwzMiw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwKKyAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwKKyAgICAxMDQsNDYsMTE1LDExMiwxMDgsMTA1LDExNiw0MCw0MSw0NiwyMzMsMSwwLDAsMCw5MCwKKyAgICA4LDEwOSw5NywxMjAsMTE1LDExMiwxMDgsMTA1LDExNiwyMTgsMCw0MSw2LDIxOCwzLDEwOCwKKyAgICAxMDEsMTEwLDExNCwyMSwwLDAsMCwyMTgsMTAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsCisgICAgMTA1LDExMSwxMTAsMTE0LDI1LDAsMCwwLDIxOCw4LDExNCwxMDEsMTE4LDEwMSwxMTQsMTE1LAorICAgIDEwMSwxMDAsMjE4LDYsMTE0LDExNSwxMTIsMTA4LDEwNSwxMTYsNDEsNSwyMTgsNCwxMTIsOTcsCisgICAgMTE2LDEwNCw5MCw1LDEwMiwxMTQsMTExLDExMCwxMTYsMjE4LDEsOTUsMjE4LDQsMTE2LDk3LAorICAgIDEwNSwxMDgsMTE0LDE2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCwxMSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLAorICAgIDEwOCwxMDUsMTE2LDU2LDAsMCwwLDExNSwxNiwwLDAsMCwwLDIsMTgsMSwKKyAgICAyNCwxLDEwLDEsMTksMSwxMiwxLDI3LDEsMTQsMSwxMTQsMzgsMCwwLAorICAgIDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwKKyAgICAwLDEyNCwwLDAsMTMxLDEsMCw4Myw0MSwxLDEyMiwxMjYsODMsMTE2LDk3LDExNiwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA3Nyw5NywxMDAsMTAxLDMyLDk3LDMyLDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTAxLDMyLAorICAgIDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDEwOSw5NywxMDcsMTAxLAorICAgIDMyLDEwNSwxMTYsMzIsMTAxLDk3LDExNSwxMDUsMTAxLDExNCwzMiwxMTYsMTExLDMyLDExMSwxMTgsCisgICAgMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExMCwzMiwxMDEsMTIwLDExMiwxMDEsMTE0LDEwNSwKKyAgICAxMDksMTAxLDExMCwxMTYsMTE1LDEwLDMyLDMyLDMyLDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsCisgICAgOTksOTcsOTksMTA0LDEwMSwzMiwxMTUsMTE2LDk3LDExNiwzMiwxMTQsMTAxLDExNSwxMTcsMTA4LAorICAgIDExNiwxMTUsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNDEsMiwxMTQsMywwLDAsCisgICAgMCw5MCw0LDExNSwxMTYsOTcsMTE2LDQxLDEsMTE0LDM1LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCw5NSwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiw2OCwwLDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDcsMTE0LDM5LDAsMCwwLDk5LDIsMCwwLDAsMCwwLAorICAgIDAsMCwzLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSw1OCwKKyAgICAwLDAsMCwxMjEsMTYsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsCisgICAgMiwwLDg3LDExMCwyMiwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsNDAsMCwKKyAgICAxLDEsMSwxMDAsMSwwLDgzLDg5LDExMCwxLDAsODgsMTI0LDIsMCwxMDYsCisgICAgMiwwLDEwMCwyLDAsNjQsMTI0LDEsMCwxMDcsMiwwLDgzLDQxLDMsMTIyLAorICAgIDQ5LDg0LDEwMSwxMTUsMTE2LDMyLDExOSwxMDQsMTAxLDExNiwxMDQsMTAxLDExNCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsCisgICAgMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTAxLDMyLDExNiwxMjEsMTEyLAorICAgIDEwMSw0Niw3MCwxMDUsMCwyNDAsMCwwLDQxLDMsMTE0LDM5LDAsMCwwLDIxOCwKKyAgICA3LDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwyMTgsNywxMTUsMTE2LDk1LDEwOSwxMTEsMTAwLAorICAgIDEwMSw0MSwzLDExNCwzNSwwLDAsMCwyMTgsNCwxMDksMTExLDEwMCwxMDEsOTAsOSwKKyAgICAxMTUsMTE2LDk3LDExNiw5NSwxMDUsMTEwLDEwMiwxMTEsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE4LDk1LDExMiw5NywxMTYsMTA0LDk1LAorICAgIDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSw3OCwwLDAsMCwKKyAgICAxMTUsMTAsMCwwLDAsMCwyLDMsMSwxNiwxLDEzLDEsOSwxLDExNCwKKyAgICA0MywwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCiAgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMTYsMCwKLSAgICAwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDMxLDAsMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMiwKLSAgICAxMDUsMTA4LDEwMSw0NiwxMDUsMCwxMjgsMCwwLDQwLDEsMCwwLDAsMTE3LDE4LAotICAgIDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLAotICAgIDk1LDExNiwxMjEsMTEyLDEwMSw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDEyLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLAotICAgIDEwOCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDEyLDAsMCwwLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDk5LDEsMCwwLAotICAgIDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDM0LDAsMCwwLDEyNCwwLDAsMTE1LDIxLDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEzMSwwLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLDAsMTI0LDAsCi0gICAgMCwxMDAsMSwwLDEzMSwyLDAsODMsNDAsMiwwLDAsMCwxMTcsMzAsMCwKLSAgICAwLDAsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAwLDEwNSwxMTQsNDYsCi0gICAgMTA1LDAsNjQsMCwwLDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsOTUsCi0gICAgMTExLDExNSwxMTcsNiwwLDAsMCwxMDMsMTAxLDExNiw5OSwxMTksMTAwLDExNywxOCwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwKLSAgICAxMTYsMTIxLDExMiwxMDEsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDExNCwwLAotICAgIDAsMCwxMTUsNiwwLDAsMCwwLDIsNiwxLDE1LDEsMTE3LDExLDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTA1LDE4MiwxLAotICAgIDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwxNywKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTkyLDAsMCwwLDEwMCwxLDAsMTA2LAotICAgIDAsMCwxMjQsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEzMSwyLAotICAgIDAsMTI1LDMsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwxMTYsMiwwLAotICAgIDEwNiw0LDAsMTE2LDIsMCwxMDYsNSwwLDY2LDExNiwyLDAsMTA2LDYsMCwKLSAgICA2NiwxMjQsMiwwLDEwMCwyLDAsNjQsMTMxLDMsMCwxMjUsNCwwLDEyMSw2MCwKLSAgICAwLDExNiw3LDAsMTA2LDgsMCwxMjQsNCwwLDEwMCwzLDAsMTMxLDIsMCwKLSAgICAxNDMsMjAsMCwxMjUsNSwwLDEyNCw1LDAsMTA2LDksMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMSw4NywxMDAsNCwwLDgxLDg4LDExNiwyLDAsMTA2LDEwLDAsMTI0LAotICAgIDMsMCwxMjQsMCwwLDEzMSwyLDAsMSw4NywxMTAsNTksMCw0LDExNiwxMSwKLSAgICAwLDEwNywxMCwwLDExNCwxODcsMCwxLDEsMSwxMjEsMTcsMCwxMTYsMiwwLAotICAgIDEwNiwxMiwwLDEyNCwzLDAsMTMxLDEsMCwxLDg3LDExMCwxOCwwLDQsMTE2LAotICAgIDExLDAsMTA3LDEwLDAsMTE0LDE3OSwwLDEsMSwxLDg5LDExMCwxLDAsODgsCi0gICAgMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCw0LDAsODMsNDAsNSwwLDAsCi0gICAgMCwxMTcsMTYyLDAsMCwwLDY2LDEwMSwxMTUsMTE2LDQ1LDEwMSwxMDIsMTAyLDExMSwxMTQsCi0gICAgMTE2LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDExOSwxMTQsCi0gICAgMTA1LDExNiwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk3LDMyLDExMiw5NywKLSAgICAxMTYsMTA0LDMyLDk3LDExNiwxMTEsMTA5LDEwNSw5OSw5NywxMDgsMTA4LDEyMSw0NiwxMCwzMiwKLSAgICAzMiwzMiwzMiw2NiwxMDEsMzIsMTEyLDExNCwxMDEsMTEyLDk3LDExNCwxMDEsMTAwLDMyLDExNiwKLSAgICAxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiw5NywzMiw3MCwxMDUsMTA4LDEwMSw2OSwKLSAgICAxMjAsMTA1LDExNSwxMTYsMTE1LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTAyLDMyLDk5LDExMSwKLSAgICAxMTAsOTksMTE3LDExNCwxMTQsMTAxLDExMCwxMTYsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLAotICAgIDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDEwMSwxMDksMTEyLAotICAgIDExMSwxMTQsOTcsMTE0LDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywxMTYsCi0gICAgMTE2LDEwMSwxMDksMTEyLDExNiwxMDEsMTAwLDQ2LDExNyw1LDAsMCwwLDEyMywxMjUsNDYsCi0gICAgMTIzLDEyNSwxMDUsMTgyLDEsMCwwLDExNywyLDAsMCwwLDExOSw5OCw3OCw0MCwKLSAgICAxMywwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywKLSAgICAyLDAsMCwwLDEwNSwxMDAsMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNCwKLSAgICAwLDAsMCwxMTEsMTEyLDEwMSwxMTAsMTE3LDYsMCwwLDAsNzksOTUsNjksODgsCi0gICAgNjcsNzYsMTE3LDcsMCwwLDAsNzksOTUsNjcsODIsNjksNjUsODQsMTE3LDgsCi0gICAgMCwwLDAsNzksOTUsODcsODIsNzksNzgsNzYsODksMTE3LDMsMCwwLDAsCi0gICAgOTUsMTA1LDExMSwxMTcsNiwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3Myw3OSwxMTcsNSwKLSAgICAwLDAsMCwxMTksMTE0LDEwNSwxMTYsMTAxLDExNyw3LDAsMCwwLDExNCwxMDEsMTEyLAotICAgIDEwOCw5Nyw5OSwxMDEsMTE3LDcsMCwwLDAsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDExNyw2LDAsMCwwLDExNywxMTAsMTA4LDEwNSwxMTAsMTA3LDQwLDYsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LAotICAgIDExNiw5NywxMTcsNCwwLDAsMCwxMDksMTExLDEwMCwxMDEsMTE3LDgsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTE2LDEwOSwxMTIsMTE3LDIsMCwwLDAsMTAyLDEwMCwxMTcsCi0gICAgNCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTMsMCwwLDAsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSwKLSAgICA5NywxMTYsMTExLDEwOSwxMDUsOTksMTIxLDAsMCwwLDExNSwyNiwwLDAsMCwwLAotICAgIDUsMjQsMSw5LDEsMzMsMSwzLDMsMjEsMSwxOSwxLDIwLDEsMTMsCi0gICAgMSwzLDEsMTcsMSwxMywxLDUsMSwxMTcsMTMsMCwwLDAsOTUsMTE5LAotICAgIDExNCwxMDUsMTE2LDEwMSw5NSw5NywxMTYsMTExLDEwOSwxMDUsOTksOTksMiwwLDAsMCwKLSAgICAwLDAsMCwwLDMsMCwwLDAsNywwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTUsMCwwLDAsMTIwLDY5LDAsMTAwLDEsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTAwLDQsMCwxMDMsNCwwLDY4LDkzLDQ5LDAsMTI1LDIsMCwxMTYsMCwKLSAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDExNCwxOSwwLDExNiwxLDAsCi0gICAgMTI0LDAsMCwxMjQsMiwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwKLSAgICAyLDAsMTMxLDMsMCwxLDExMywxOSwwLDExMywxOSwwLDg3LDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMSwwLDEsCi0gICAgMTAwLDUsMCw4Myw0MCw2LDAsMCwwLDExNyw0NywwLDAsMCw4MywxMDUsCi0gICAgMTA5LDExMiwxMDgsMTAxLDMyLDExNSwxMTcsOTgsMTE1LDExNiwxMDUsMTE2LDExNywxMTYsMTAxLDMyLAotICAgIDEwMiwxMTEsMTE0LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMTEsMTExLDEwOCwxMTUsNDYsMTE3LDExMiwKLSAgICAxMDAsOTcsMTE2LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0NiwxMTcsMTAsMCwKLSAgICAwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsNzgsNDAsNSwwLDAsMCwxMTcsNywwLDAsCi0gICAgMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNyw3LDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk3LDExNiwxMTYsMTE0LDExNyw3LDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwMCwxMDUsOTksMTE2LDk1LDk1LDExNyw2LDAsCi0gICAgMCwwLDExNywxMTIsMTAwLDk3LDExNiwxMDEsNDAsMywwLDAsMCwxMTcsMywwLAotICAgIDAsMCwxMTAsMTAxLDExOSwxMTcsMywwLDAsMCwxMTEsMTA4LDEwMCwxMTcsNywwLAotICAgIDAsMCwxMTQsMTAxLDExMiwxMDgsOTcsOTksMTAxLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywxMTIsMTQzLAotICAgIDAsMCwwLDExNSw4LDAsMCwwLDAsMiwyNSwxLDE1LDEsMzIsMSwKLSAgICAxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LDExMiw5OSwxLDAsMCwwLDAsCi0gICAgMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICAxNiwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTMxLDEsMCwxMjQsMCwwLAotICAgIDEzMSwxLDAsODMsNDAsMSwwLDAsMCwxMTcsNzUsMCwwLDAsNjcsMTE0LAotICAgIDEwMSw5NywxMTYsMTAxLDMyLDk3LDMyLDExMCwxMDEsMTE5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDEsMTEwLDExNiwxMDEsMTE0LDEwMSwKLSAgICAxMDAsMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw0MCwyLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNiwxMjEsMTEyLDEwMSwxMTcsMywwLDAsMCw5NSwxMDUsMTExLDQwLAotICAgIDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTEwLDEwMSwKLSAgICAxMTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTU0LDAsMCwwLDExNSwyLDAsMCwKLSAgICAwLDAsNiwxMTcsMTAsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMSwKLSAgICAwLDAsMCw2NiwwLDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsMCw2OSwKLSAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDgzLAotICAgIDQwLDIsMCwwLDAsMTE3LDE0LDAsMCwwLDk1LDY4LDEwMSw5NywxMDAsMTA4LAotICAgIDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDc4LDQwLDMsMCwwLDAsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSwKLSAgICA5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSw0MCwxLDAsMCwwLAotICAgIDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTQsMCwwLDAsCi0gICAgOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTcxLDAsCi0gICAgMCwwLDExNSwyLDAsMCwwLDE2LDEsMTE3LDE0LDAsMCwwLDk1LDY4LAotICAgIDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDk5LDEsMCwwLAotICAgIDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwwLAotICAgIDAsMTE1LDg2LDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsCi0gICAgMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsCi0gICAgMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwKLSAgICAwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsCi0gICAgMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwKLSAgICAxMSwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMiwwLDgzLDQwLDEzLDAsMCwKLSAgICAwLDExNywxMSwwLDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwKLSAgICAxMDcsMTE3LDE2OSwwLDAsMCw2NSwzMiwxMTQsMTAxLDk5LDExNywxMTQsMTE1LDEwNSwxMTgsCisgICAgMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MSwyLDEyMiwzMSw4MiwKKyAgICAxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwKKyAgICAxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsNDYsMTA1LDAsCisgICAgMTI4LDAsMCw0MSwxLDExNCw0MywwLDAsMCw0MSwxLDExNCwzNSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMTIsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsODgsMCwKKyAgICAwLDAsMTE1LDIsMCwwLDAsMCwyLDExNCw0NCwwLDAsMCw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwzNCwwLDAsMCwxMjQsMCwwLDExNSwyMSwwLDExNiwwLAorICAgIDAsMTA2LDEsMCwxMzEsMCwwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLAorICAgIDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQxLDIsMTIyLDMwLDgyLDEwMSwKKyAgICAxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSwKKyAgICA0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMCwxMDUsMTE0LDQ2LDEwNSwwLDY0LDAsCisgICAgMCw0MSwzLDExNCwzLDAsMCwwLDIxOCw2LDEwMywxMDEsMTE2LDk5LDExOSwxMDAsCisgICAgMTE0LDQzLDAsMCwwLDQxLDEsMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMSw5NSwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDk0LDAsMCwwLDExNSw2LDAsMCwKKyAgICAwLDAsMiw2LDEsMTUsMSwxMTQsNDYsMCwwLDAsMTA1LDE4MiwxLDAsCisgICAgMCw5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwxNywwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTkyLDAsMCwwLDEwMCwxLDAsMTA2LDAsCisgICAgMCwxMjQsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEzMSwyLDAsCisgICAgMTI1LDMsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwxMTYsMiwwLDEwNiwKKyAgICA0LDAsMTE2LDIsMCwxMDYsNSwwLDY2LDExNiwyLDAsMTA2LDYsMCw2NiwKKyAgICAxMjQsMiwwLDEwMCwyLDAsNjQsMTMxLDMsMCwxMjUsNCwwLDEyMSw2MCwwLAorICAgIDExNiw3LDAsMTA2LDgsMCwxMjQsNCwwLDEwMCwzLDAsMTMxLDIsMCwxNDMsCisgICAgMjAsMCwxMjUsNSwwLDEyNCw1LDAsMTA2LDksMCwxMjQsMSwwLDEzMSwxLAorICAgIDAsMSw4NywxMDAsNCwwLDgxLDg4LDExNiwyLDAsMTA2LDEwLDAsMTI0LDMsCisgICAgMCwxMjQsMCwwLDEzMSwyLDAsMSw4NywxMTAsNTksMCw0LDExNiwxMSwwLAorICAgIDEwNywxMCwwLDExNCwxODcsMCwxLDEsMSwxMjEsMTcsMCwxMTYsMiwwLDEwNiwKKyAgICAxMiwwLDEyNCwzLDAsMTMxLDEsMCwxLDg3LDExMCwxOCwwLDQsMTE2LDExLAorICAgIDAsMTA3LDEwLDAsMTE0LDE3OSwwLDEsMSwxLDg5LDExMCwxLDAsODgsMTMwLAorICAgIDAsMCw4OSwxMTAsMSwwLDg4LDEwMCw0LDAsODMsNDEsNSwxMjIsMTYyLDY2LAorICAgIDEwMSwxMTUsMTE2LDQ1LDEwMSwxMDIsMTAyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwKKyAgICAxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMzIsMTAwLDk3LDExNiwKKyAgICA5NywzMiwxMTYsMTExLDMyLDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDk3LDExNiwxMTEsMTA5LAorICAgIDEwNSw5OSw5NywxMDgsMTA4LDEyMSw0NiwxMCwzMiwzMiwzMiwzMiw2NiwxMDEsMzIsMTEyLAorICAgIDExNCwxMDEsMTEyLDk3LDExNCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LAorICAgIDEwMSwzMiw5NywzMiw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsMTE1LDY5LDExNCwKKyAgICAxMTQsMTExLDExNCwzMiwxMDUsMTAyLDMyLDk5LDExMSwxMTAsOTksMTE3LDExNCwxMTQsMTAxLDExMCwKKyAgICAxMTYsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsCisgICAgMTAsMzIsMzIsMzIsMzIsMTE2LDEwMSwxMDksMTEyLDExMSwxMTQsOTcsMTE0LDEyMSwzMiwxMDIsCisgICAgMTA1LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywxMTYsMTE2LDEwMSwxMDksMTEyLDExNiwxMDEsMTAwLAorICAgIDQ2LDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSwxMDUsMTgyLDEsMCwwLDkwLDIsMTE5LAorICAgIDk4LDc4LDQxLDEzLDIxOCw2LDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMjE4LDIsMTA1LDEwMCwKKyAgICAxMTQsMywwLDAsMCw5MCw0LDExMSwxMTIsMTAxLDExMCw5MCw2LDc5LDk1LDY5LAorICAgIDg4LDY3LDc2LDkwLDcsNzksOTUsNjcsODIsNjksNjUsODQsOTAsOCw3OSw5NSwKKyAgICA4Nyw4Miw3OSw3OCw3Niw4OSwyMTgsMyw5NSwxMDUsMTExLDIxOCw2LDcwLDEwNSwxMDgsCisgICAgMTAxLDczLDc5LDIxOCw1LDExOSwxMTQsMTA1LDExNiwxMDEsMjE4LDcsMTE0LDEwMSwxMTIsMTA4LAorICAgIDk3LDk5LDEwMSwxMTQsNDAsMCwwLDAsOTAsNiwxMTcsMTEwLDEwOCwxMDUsMTEwLDEwNywKKyAgICA0MSw2LDExNCwzNSwwLDAsMCwyMTgsNCwxMDAsOTcsMTE2LDk3LDExNCw0MiwwLAorICAgIDAsMCw5MCw4LDExMiw5NywxMTYsMTA0LDk1LDExNiwxMDksMTEyLDkwLDIsMTAyLDEwMCwKKyAgICAyMTgsNCwxMDIsMTA1LDEwOCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDEzLDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsOTcsMTE2LAorICAgIDExMSwxMDksMTA1LDk5LDEwMSwwLDAsMCwxMTUsMjYsMCwwLDAsMCw1LDI0LAorICAgIDEsOSwxLDMzLDEsMywzLDIxLDEsMTksMSwyMCwxLDEzLDEsMywKKyAgICAxLDE3LDEsMTMsMSw1LDEsMTE0LDU1LDAsMCwwLDk5LDIsMCwwLAorICAgIDAsMCwwLDAsMCwzLDAsMCwwLDcsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDk1LDAsMCwwLDEyMCw2OSwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsCisgICAgMywwLDEwMCw0LDAsMTAzLDQsMCw2OCw5Myw0OSwwLDEyNSwyLDAsMTE2LAorICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTQsMTksMCwxMTYsMSwKKyAgICAwLDEyNCwwLDAsMTI0LDIsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDIsMCwKKyAgICAxMzEsMiwwLDEzMSwzLDAsMSwxMTMsMTksMCwxMTMsMTksMCw4NywxMjQsMCwKKyAgICAwLDEwNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDEsMCwKKyAgICAxLDEwMCw1LDAsODMsNDEsNiwxMjIsNDcsODMsMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiwKKyAgICAxMTUsMTE3LDk4LDExNSwxMTYsMTA1LDExNiwxMTcsMTE2LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMDIsCisgICAgMTE3LDExMCw5OSwxMTYsMTExLDExMSwxMDgsMTE1LDQ2LDExNywxMTIsMTAwLDk3LDExNiwxMDEsOTUsCisgICAgMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDYsMjE4LDEwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk1LDk1LDIxOCw4LDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDIxOCwxMiwKKyAgICA5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwyMTgsNyw5NSw5NSwKKyAgICAxMDAsMTExLDk5LDk1LDk1LDc4LDQxLDUsMjE4LDcsMTA0LDk3LDExNSw5NywxMTYsMTE2LAorICAgIDExNCwyMTgsNywxMTUsMTAxLDExNiw5NywxMTYsMTE2LDExNCwyMTgsNywxMDMsMTAxLDExNiw5NywKKyAgICAxMTYsMTE2LDExNCwyMTgsOCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwyMTgsNiwxMTcsCisgICAgMTEyLDEwMCw5NywxMTYsMTAxLDQxLDMsOTAsMywxMTAsMTAxLDExOSw5MCwzLDExMSwxMDgsCisgICAgMTAwLDExNCw1MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsNSw5NSwxMTksMTE0LDk3LDExMiwxMjMsMCwwLDAsCisgICAgMTE1LDgsMCwwLDAsMCwyLDI1LDEsMTUsMSwzMiwxLDExNCw2NSwwLAorICAgIDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLAorICAgIDAsMCwwLDY0LDAsMCwwLDExNSwxNiwwLDAsMCwxMDEsMCwwLDkwLAorICAgIDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDgzLDQxLDIsMjE4LDE0LAorICAgIDk1LDY4LDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDc4LDQxLAorICAgIDMsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDY2LDAsMCwwLDE0MiwwLDAsMCwxMTUsMiwwLAorICAgIDAsMCwxMiwxLDExNCw2NiwwLDAsMCw5OSwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw4MiwKKyAgICAwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCisgICAgMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LAorICAgIDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsCisgICAgMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLAorICAgIDAsMCw5MCw3LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCw4LAorICAgIDAsMTAwLDEyLDAsODMsNDEsMTMsMjE4LDExLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNzYsMTExLDk5LDEwNywxMjIsMTY5LDY1LDMyLDExNCwxMDEsOTksMTE3LDExNCwxMTUsMTA1LDExOCwKICAgICAxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCiAgICAgOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk3LAogICAgIDk4LDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDMyLDEwMCwxMDEsCkBAIC00MDYsMTEyOCArMzMyLDExMTggQEAKICAgICA2NywwLDAsMCwxMTUsNzAsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwKICAgICAwLDAsMTI0LDAsMCw5NSwyLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLAogICAgIDAsMTI0LDAsMCw5NSwzLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDQsMCwKLSAgICAxMDAsMCwwLDEyNCwwLDAsOTUsNiwwLDEwMCwxLDAsMTI0LDAsMCw5NSwKLSAgICA3LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDgsMCwxMDAsMCwwLDgzLDQwLAotICAgIDIsMCwwLDAsNzgsMTA1LDAsMCwwLDAsNDAsOSwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNywxMywwLDAsMCwKLSAgICA5NywxMDgsMTA4LDExMSw5OSw5NywxMTYsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNyw0LDAsCi0gICAgMCwwLDEwOCwxMTEsOTksMTA3LDExNyw2LDAsMCwwLDExOSw5NywxMDcsMTAxLDExNywKLSAgICAxMTIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsNzgsCi0gICAgMTExLDExMCwxMDEsMTE3LDUsMCwwLDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsNSwwLAotICAgIDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsMTE3LDcsMCwwLDAsMTE5LDk3LDEwNSwxMTYsCi0gICAgMTAxLDExNCwxMTUsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwKLSAgICAxMTYsOTUsOTUsMTgxLDAsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwKLSAgICAxNSwxLDksMSw5LDEsOSwxLDExNywyMCwwLDAsMCw5NSw3NywxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LAotICAgIDk1LDk5LDEsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDg3LDAsMCwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDEyNSwyLDAsCi0gICAgMTIwLDU5LDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsCi0gICAgMywwLDEyNCwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCw1NSwwLDEwMCwxLAotICAgIDAsODMsMTI0LDMsMCwxMDYsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMjQsMSwKLSAgICAwLDEwNywyLDAsMTE0LDI0LDAsMTAwLDIsMCw4MywxMTMsMjQsMCwxMDAsMCwKLSAgICAwLDgzLDQwLDMsMCwwLDAsNzgsNzAsODQsNDAsOCwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNyw5LDAsMCwwLAotICAgIDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsMTAxLDExMCwxMTYsMTE3LDUsMCwwLDAsMTExLDExOSwKLSAgICAxMTAsMTAxLDExNCwxMTcsMTIsMCwwLDAsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwKLSAgICAxMDMsOTUsMTExLDExMCwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsCi0gICAgNCwwLDAsMCw4NCwxMTQsMTE3LDEwMSw0MCw0LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMiwwLDAsMCwxMDksMTAxLDExNywzLDAsCi0gICAgMCwwLDExNiwxMDUsMTAwLDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDEwNCwKLSAgICA5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMTg5LDAsMCwwLDExNSwKLSAgICAxOCwwLDAsMCwwLDIsMTIsMSw5LDEsMywxLDE1LDEsMTIsMSwKLSAgICA0LDEsOSwxLDEyLDEsMTE3LDI0LDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDE3LDAsMCwwLDY3LDAsMCwwLDExNSwyMTQsMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDExNiwyLDAsMTI0LAotICAgIDEsMCw2MCwxMjIsMTc3LDAsMTIwLDE3MCwwLDEyNCwwLDAsMTA2LDMsMCwxNDMsCi0gICAgMTMwLDAsMSwxMjQsMCwwLDEwNiw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNSwKLSAgICA2OCwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMSwwLDEwNywyLDAsMTE0LDk2LAotICAgIDAsMTI0LDEsMCwxMjQsMCwwLDk1LDUsMCwxMjQsMCwwLDQsMTA2LDQsCi0gICAgMCwxMDAsMiwwLDU1LDIsOTUsNCwwLDEwMCw1LDAsODMsMTI0LDAsMCwKLSAgICAxMDYsNywwLDEzMSwwLDAsMTE0LDEyNywwLDExNiw4LDAsMTAwLDMsMCwxMjQsCi0gICAgMCwwLDIyLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LAotICAgIDksMCwxMDYsMTAsMCwxMDAsNiwwLDEzMSwxLDAsMTE0LDE2MywwLDEyNCwwLAotICAgIDAsNCwxMDYsMTIsMCwxMDAsMiwwLDU1LDIsOTUsMTIsMCwxMTAsMCwwLAotICAgIDg3LDEwMCw0LDAsODEsODgsMTI0LDAsMCwxMDYsOSwwLDEwNiwxMCwwLDEzMSwKLSAgICAwLDAsMSwxMjQsMCwwLDEwNiw5LDAsMTA2LDEzLDAsMTMxLDAsMCwxLAotICAgIDExMywyOCwwLDg3LDEwMCw0LDAsMTE2LDIsMCwxMjQsMSwwLDYxLDg4LDEwMCwKLSAgICA0LDAsODMsNDAsNywwLDAsMCwxMTcsMTg1LDAsMCwwLDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsNDYsMzIsMzIsCi0gICAgNzMsMTAyLDMyLDk3LDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMzIsMTAwLAotICAgIDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNiwxMDEsOTksCi0gICAgMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMzIsOTUsCi0gICAgNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwKLSAgICAzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDc5LDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiw4NCwxMTQsMTE3LDEwMSwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsNDYsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDAsMCwwLDAsMTA1LDEsMCwwLDAsCi0gICAgMTE3LDIzLDAsMCwwLDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDMyLDEwMCwxMDEsCi0gICAgMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMzcsMTE0LDc4LDg0LDcwLDQwLAotICAgIDE0LDAsMCwwLDExNyw3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsCi0gICAgMTE3LDksMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTA1LDEwMCwxMDEsMTEwLDExNiwxMTcsMTIsCi0gICAgMCwwLDAsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwxMTcsCi0gICAgNCwwLDAsMCwxMDgsMTExLDk5LDEwNywxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LAotICAgIDExMCwxMTYsMTE3LDUsMCwwLDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSwxMTcsMTIsMCwwLDAsMTA0LDk3LDExNSw5NSwxMDAsMTAxLAotICAgIDk3LDEwMCwxMDgsMTExLDk5LDEwNywxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwKLSAgICAxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLDAsMTE5LDk3LAotICAgIDEwNywxMDEsMTE3LDExMiwxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNyw3LDAsMCwwLDExOSwKLSAgICA5NywxMDUsMTE2LDEwMSwxMTQsMTE1LDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywKLSAgICAxMTUsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLAotICAgIDExNywzLDAsMCwwLDExNiwxMDUsMTAwLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwKLSAgICAyMDEsMCwwLDAsMTE1LDMyLDAsMCwwLDAsNiwxMiwxLDEwLDEsMywKLSAgICAxLDMsMSwxMCwxLDMwLDEsOSwxLDE1LDEsNCwxLDEyLDEsMTksCi0gICAgMSwxOCwxLDI0LDIsMTMsMSwyMCwyLDExNywxOSwwLDAsMCw5NSw3NywKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMCwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTY1LDAsMCwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDE0MywxMzgsMCwKLSAgICAxLDEyNCwwLDAsMTA2LDMsMCwxMjQsMSwwLDEwNywzLDAsMTE0LDUyLDAsCi0gICAgMTE2LDQsMCwxMDAsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDUsMCwxMDAsMiwwLDEwNyw0LDAsMTE1LDczLDAsMTE2LDYsCi0gICAgMCwxMzAsMSwwLDEyNCwwLDAsNCwxMDYsNSwwLDEwMCwzLDAsNTYsMiwKLSAgICA5NSw1LDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsCi0gICAgMTU1LDAsMTAwLDAsMCwxMjQsMCwwLDk1LDMsMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTE0LDE1NSwwLDEyNCwwLDAsNCwxMDYsOCwwLDEwMCwzLDAsNTYsMiwKLSAgICA5NSw4LDAsMTI0LDAsMCwxMDYsOSwwLDEwNiwxMCwwLDEzMSwwLDAsMSwKLSAgICAxMTMsMTU1LDAsMTEwLDAsMCw4NywxMDAsMCwwLDgxLDg4LDEwMCwwLDAsODMsCi0gICAgNDAsNCwwLDAsMCw3OCwxMTcsMzEsMCwwLDAsOTksOTcsMTEwLDExMCwxMTEsCi0gICAgMTE2LDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNywxMTAsNDUsOTcsOTksMTEzLAotICAgIDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTA4LDExMSw5OSwxMDcsMTA1LDAsMCwwLDAsMTA1LAotICAgIDEsMCwwLDAsNDAsMTEsMCwwLDAsMTE3LDcsMCwwLDAsOTUsMTE2LAotICAgIDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsOSwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLAotICAgIDEwMSwxMTAsMTE2LDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDExNyw1LDAsMCwKLSAgICAwLDExMSwxMTksMTEwLDEwMSwxMTQsMTE3LDEyLDAsMCwwLDgyLDExNywxMTAsMTE2LDEwNSwKLSAgICAxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwKLSAgICAxMTYsMTE3LDE0LDAsMCwwLDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsCi0gICAgMCwwLDExOSw5NywxMDUsMTE2LDEwMSwxMTQsMTE1LDExNyw2LDAsMCwwLDExOSw5NywKLSAgICAxMDcsMTAxLDExNywxMTIsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsCi0gICAgNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDMsCi0gICAgMCwwLDAsMTE2LDEwNSwxMDAsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwyMjYsMCwKLSAgICAwLDAsMTE1LDIyLDAsMCwwLDAsMSwxMiwxLDEwLDEsMTUsMSwxNSwKLSAgICAxLDIxLDEsMTUsMSwxNSwxLDksMSw5LDEsMTUsMSwxMTcsMTksMCwKLSAgICAwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsCi0gICAgMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLDEwMCwKLSAgICAxLDAsMTI0LDAsMCwxMDYsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsMSwKLSAgICAwLDEwMiwyLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMjEsMCwwLAotICAgIDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLDM3LDExNCw0MSwKLSAgICAzMiw5NywxMTYsMzIsMzcsMTAwLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE3LDIsMCwwLDAsMTA1LDEwMCw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICA5NSw5NSwyMzksMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMCwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQwLDksMCwwLDAsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsCi0gICAgMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwKLSAgICAxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwKLSAgICA5NSw5NSwxMTcsMTIsMCwwLDAsMTA0LDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsCi0gICAgMTExLDk5LDEwNywxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNywKLSAgICA3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDE3NSwwLDAsMCwxMTUsMTIsMCwwLAotICAgIDAsMTYsNCw2LDIsMTIsOCwxMiwxMiwxMiwyNSwxMiwxMywxMTcsMTEsMCwKLSAgICAwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwKLSAgICAwLDAsMTE1LDc0LDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLAotICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwKLSAgICAxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsCi0gICAgMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LAotICAgIDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLAotICAgIDgzLDQwLDExLDAsMCwwLDExNywxNiwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwKLSAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDExNyw4NiwwLDAsMCwKLSAgICA2NSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDc2LDExMSw5OSwxMDcsMzIsMTAxLDExMywxMTcsMTA1LDExOCw5NywxMDgsMTAxLDExMCwxMTYsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsODAsMTIxLDExNiwxMDQsMTExLDExMCwzMiw5OCwxMTcsMTA1LDEwOCwxMDAsCi0gICAgMTE1LDMyLDExOSwxMDUsMTE2LDEwNCwxMTEsMTE3LDExNiwxMCwzMiwzMiwzMiwzMiwxMDksMTE3LAotICAgIDEwOCwxMTYsMTA1LDQ1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTE1LDExNywKLSAgICAxMTIsMTEyLDExMSwxMTQsMTE2LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLAotICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLAotICAgIDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDEsMCwxMjQsMCwwLDk1LAotICAgIDEsMCwxMDAsMCwwLDgzLDQwLDIsMCwwLDAsNzgsMTA1LDAsMCwwLAotICAgIDAsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsCi0gICAgNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMjQ3LDAsMCwwLDExNSw0LDAsCi0gICAgMCwwLDAsMSw5LDEsMTE3LDI1LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LAotICAgIDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTA1LDExMCwKLSAgICAxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwwLDEyNCwwLAotICAgIDAsNCwxMDYsMCwwLDEwMCwxLDAsNTUsMiw5NSwwLDAsMTAwLDIsMCwKLSAgICA4Myw0MCwzLDAsMCwwLDc4LDEwNSwxLDAsMCwwLDg0LDQwLDIsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsOTksMTExLDExNywxMTAsMTE2LDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwyNTEsMCwwLDAsMTE1LAotICAgIDQsMCwwLDAsMCwxLDE1LDEsMTE3LDI0LDAsMCwwLDk1LDY4LDExNywKLSAgICAxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksCi0gICAgMTEzLDExNywxMDUsMTE0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAotICAgIDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0OSwwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwzMCwwLDExNiwxLAotICAgIDAsMTAwLDIsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLAotICAgIDQsMTA2LDAsMCwxMDAsMywwLDU2LDIsOTUsMCwwLDEwMCwwLDAsODMsCi0gICAgNDAsNCwwLDAsMCw3OCwxMDUsMCwwLDAsMCwxMTcsMzEsMCwwLDAsCi0gICAgOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNywKLSAgICAxMTAsNDUsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTA4LDExMSw5OSwxMDcsMTA1LAotICAgIDEsMCwwLDAsNDAsMiwwLDAsMCwxMTcsNSwwLDAsMCw5OSwxMTEsCi0gICAgMTE3LDExMCwxMTYsMTE3LDEyLDAsMCwwLDgyLDExNywxMTAsMTE2LDEwNSwxMDksMTAxLDY5LAotICAgIDExNCwxMTQsMTExLDExNCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsCi0gICAgMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LAotICAgIDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDI1NSwwLDAsMCwxMTUsNiwKLSAgICAwLDAsMCwwLDEsMTUsMSwxNSwxLDExNywyNCwwLDAsMCw5NSw2OCwKLSAgICAxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwKLSAgICAxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLAotICAgIDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLAotICAgIDEwMCwxLDAsMTI0LDAsMCwxMDYsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsCi0gICAgMSwwLDEwMiwyLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMjYsMCwKLSAgICAwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAotICAgIDk5LDEwNyw0MCwzNywxMTQsNDEsMzIsOTcsMTE2LDMyLDM3LDEwMCw0MCwyLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywyLDAsMCwwLDEwNSwKLSAgICAxMDAsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwKLSAgICA5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsNCwxLDAsMCwxMTUsMiwwLDAsCi0gICAgMCwwLDEsMTE3LDI1LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LAotICAgIDk1LDc4LDQwLDgsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsNywwLAotICAgIDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNyw3LDAsMCwwLDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICA5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywyNDMsMCwwLDAsMTE1LDEwLDAsMCwwLAotICAgIDE2LDIsNiwyLDEyLDQsMTIsNCwxMiw1LDExNywxNiwwLDAsMCw5NSwKLSAgICA2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDk5LAotICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLDAsMCwwLAotICAgIDMsMCwwLDAsMTE1LDE0MiwwLDAsMCwxMDAsMywwLDEyNSwxLDAsMTIxLAotICAgIDE3LDAsMTE2LDEsMCwxMzYsMCwwLDI1LDEzMSwwLDAsMTI1LDEsMCw4NywKLSAgICAxMTAsMTgsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwxLDEsCi0gICAgODksMTEwLDEsMCw4OCwxMjQsMSwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsMTM4LAotICAgIDAsMTE2LDMsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LDQsMCwKLSAgICAxMzYsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMTAsMTIsMCwxMTYsNSwwLDEzNiwKLSAgICAwLDAsMTMxLDEsMCwxMjUsMSwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwKLSAgICAwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMiwwLDExNiw2LDAsMTA2LDcsMCwKLSAgICAxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTYsMSwwLDEzNiwwLDAsNjAsCi0gICAgMTEwLDAsMCwxMjQsMSwwLDgzLDQwLDQsMCwwLDAsMTE3LDEwOSwwLDAsCi0gICAgMCw3MSwxMDEsMTE2LDMyLDExMSwxMTQsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwKLSAgICAxMTEsMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODMsMTA0LDExMSwKLSAgICAxMTcsMTA4LDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsOTgsMTAxLDMyLDk5LDk3LDEwOCwxMDgsCi0gICAgMTAxLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE2LDk3LDEwNywxMDEsMTEwLDQ2LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsMTksCi0gICAgMCwwLDAsMTE1LDExLDAsMCwwLDExNiwwLDAsMTM2LDAsMCw2MSwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMSwwLDAsMCwxMTcsMTMsCi0gICAgMCwwLDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE1LAotICAgIDQwLDEsMCwwLDAsMTE3LDEsMCwwLDAsOTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMiwwLDAsMCw5OSw5OCwyNCwxLDAsMCwxMTUsMiwwLDAsMCwKLSAgICAwLDEsMTE3LDI4LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKLSAgICA0Niw5OSw5OCw3OCw0MCw4LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwKLSAgICAxMTAsMTAxLDExNywxMywwLDAsMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsCi0gICAgMTExLDk5LDEwNywxMTUsMTE3LDgsMCwwLDAsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwKLSAgICAxMTQsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsMTYsMCwKLSAgICAwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAotICAgIDk5LDEwNywxMTcsMTEsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTksMTA3LDExNyw4LDAsMCwwLDk1LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDExNywKLSAgICAzLDAsMCwwLDExNCwxMDEsMTAyLDQwLDMsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDIsCi0gICAgMCwwLDAsOTksOTgsNDAsMCwwLDAsMCw0MCwxLDAsMCwwLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsCi0gICAgMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTAsCi0gICAgMSwwLDAsMTE1LDI0LDAsMCwwLDAsNCw2LDEsMywxLDE3LDEsCi0gICAgMTMsMSw1LDEsMTIsMSwxMiwxLDE1LDIsMTIsMSwxOCwyLDI1LDEsCi0gICAgMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDEwOCwxMTEsOTksMTA3LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSw3MSwwLDAsMCwxMTYsCi0gICAgMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsMSwwLDExNiwxLDAsMTA2LDIsCi0gICAgMCwxMzEsMCwwLDEsMTIxLDE0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwwLAotICAgIDAsMSw4NywxMTAsMTgsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDU2LDAsCi0gICAgMSwxLDEsODksMTEwLDExLDAsODgsMTI0LDEsMCwxMDYsNSwwLDEzMSwwLAotICAgIDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDIxLDEsMCwwLAotICAgIDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDEwOCwxMTEsOTgsCi0gICAgOTcsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ0LDMyLAotICAgIDk3LDExMCwxMDAsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsCi0gICAgMTEwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLAotICAgIDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTEwLDExNSwxMTcsMTE0LAotICAgIDEwMSwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk5LDExMSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMTE2LDEwMSwxMDgsMTIxLDMyLDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LAotICAgIDEwNSwxMjIsMTAxLDEwMCw0NCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwMSwxMTgsMTAxLDExMCwxMTYsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLDk4LDEwMSwxMDUsCi0gICAgMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5NywKLSAgICAxMTAsMTExLDExNiwxMDQsMTAxLDExNCwzMiwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLAotICAgIDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNiwKLSAgICA5NywxMDcsMTAxLDExMCw0Niw3OCw0MCw2LDAsMCwwLDExNywxNiwwLDAsMCwKLSAgICA5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywKLSAgICAxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDcsMCwwLDAsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwKLSAgICAxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMDgsMTExLDk5LDEwNyw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOSwwLDAsMCw5NSwxMDgsMTExLAotICAgIDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDI5LDEsMCwwLDExNSwxNCwwLDAsMCwwLDcsMTIsMSwxMCwxLDMsCi0gICAgMSwxNCwxLDEzLDMsNSwyLDExNywxOSwwLDAsMCw5NSwxMDgsMTExLDk5LAotICAgIDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LAorICAgIDEwMCwwLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDEsMCwxMjQsMCwwLDk1LAorICAgIDYsMCwxMDAsMSwwLDEyNCwwLDAsOTUsNywwLDEwMCwwLDAsODMsNDEsCisgICAgMiw3OCwyMzMsMCwwLDAsMCw0MSw4LDIxOCw3LDk1LDExNiwxMDQsMTE0LDEwMSwKKyAgICA5NywxMDAsOTAsMTMsOTcsMTA4LDEwOCwxMTEsOTksOTcsMTE2LDEwMSw5NSwxMDgsMTExLDk5LAorICAgIDEwNywyMTgsNCwxMDgsMTExLDk5LDEwNywyMTgsNiwxMTksOTcsMTA3LDEwMSwxMTcsMTEyLDIxOCwKKyAgICA0LDExMCw5NywxMDksMTAxLDIxOCw1LDExMSwxMTksMTEwLDEwMSwxMTQsMjE4LDUsOTksMTExLAorICAgIDExNywxMTAsMTE2LDIxOCw3LDExOSw5NywxMDUsMTE2LDEwMSwxMTQsMTE1LDQxLDIsMjE4LDQsCisgICAgMTE1LDEwMSwxMDgsMTAyLDExNCw3MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsCisgICAgOTUsOTUsMTUyLDAsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwxNSwKKyAgICAxLDksMSw5LDEsOSwxLDEyMiwyMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwKKyAgICAwLDAsMCwwLDAsMCw0LDAsMCwwLDIsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDg3LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLAorICAgIDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDEyNSwyLDAsMTIwLDU5LDAsMTE2LAorICAgIDMsMCwxMDYsNCwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLDEyNCwzLAorICAgIDAsMTAwLDAsMCwxMDcsOCwwLDExNCw1NSwwLDEwMCwxLDAsODMsMTI0LDMsCisgICAgMCwxMDYsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMjQsMSwwLDEwNywyLDAsCisgICAgMTE0LDI0LDAsMTAwLDIsMCw4MywxMTMsMjQsMCwxMDAsMCwwLDgzLDQxLDMsCisgICAgNzgsNzAsODQsNDEsNSwxMTQsNjksMCwwLDAsMjE4LDksMTAzLDEwMSwxMTYsOTUsCisgICAgMTA1LDEwMCwxMDEsMTEwLDExNiwxMTQsNzMsMCwwLDAsMjE4LDEyLDk1LDk4LDEwOCwxMTEsCisgICAgOTksMTA3LDEwNSwxMTAsMTAzLDk1LDExMSwxMTAsMjE4LDMsMTAzLDEwMSwxMTYsNDEsNCwxMTQsCisgICAgNzYsMCwwLDAsMjE4LDIsMTA5LDEwMSwyMTgsMywxMTYsMTA1LDEwMCwxMTQsNzAsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDEyLDEwNCw5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMTYwLAorICAgIDAsMCwwLDExNSwxOCwwLDAsMCwwLDIsMTIsMSw5LDEsMywxLAorICAgIDE1LDEsMTIsMSw0LDEsOSwxLDEyLDEsMTIyLDI0LDk1LDc3LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLAorICAgIDEwOCwxMTEsOTksMTA3LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDE3LDAsMCwwLDY3LDAsMCwwLDExNSwyMTQsMCwwLDAsMTE2LDAsCisgICAgMCwxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDExNiwyLDAsCisgICAgMTI0LDEsMCw2MCwxMjIsMTc3LDAsMTIwLDE3MCwwLDEyNCwwLDAsMTA2LDMsMCwKKyAgICAxNDMsMTMwLDAsMSwxMjQsMCwwLDEwNiw0LDAsMTAwLDEsMCwxMDcsMiwwLAorICAgIDExNSw2OCwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMSwwLDEwNywyLDAsMTE0LAorICAgIDk2LDAsMTI0LDEsMCwxMjQsMCwwLDk1LDUsMCwxMjQsMCwwLDQsMTA2LAorICAgIDQsMCwxMDAsMiwwLDU1LDIsOTUsNCwwLDEwMCwzLDAsODMsMTI0LDAsCisgICAgMCwxMDYsNiwwLDEzMSwwLDAsMTE0LDEyNywwLDExNiw3LDAsMTAwLDQsMCwKKyAgICAxMjQsMCwwLDIyLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsCisgICAgMTA2LDgsMCwxMDYsOSwwLDEwMCw1LDAsMTMxLDEsMCwxMTQsMTYzLDAsMTI0LAorICAgIDAsMCw0LDEwNiwxMCwwLDEwMCwyLDAsNTUsMiw5NSwxMCwwLDExMCwwLAorICAgIDAsODcsMTAwLDYsMCw4MSw4OCwxMjQsMCwwLDEwNiw4LDAsMTA2LDksMCwKKyAgICAxMzEsMCwwLDEsMTI0LDAsMCwxMDYsOCwwLDEwNiwxMSwwLDEzMSwwLDAsCisgICAgMSwxMTMsMjgsMCw4NywxMDAsNiwwLDExNiwyLDAsMTI0LDEsMCw2MSw4OCwKKyAgICAxMDAsNiwwLDgzLDQxLDcsMTIyLDE4NSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw2NSw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDQ2LDMyLDMyLDczLDEwMiwzMiw5NywzMiwKKyAgICAxMTIsMTExLDExNiwxMDEsMTEwLDExNiwxMDUsOTcsMTA4LDMyLDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsCisgICAgOTksMTA3LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiwxMDEsMTAwLDQ0LDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk3LDMyLDk1LDY4LDEwMSw5NywxMDAsMTA4LAorICAgIDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsCisgICAgMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OSwxMTYsMTA0LDEwMSwKKyAgICAxMTQsMTE5LDEwNSwxMTUsMTAxLDQ0LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLAorICAgIDEwNSwxMTUsMzIsOTcsMTA4LDExOSw5NywxMjEsMTE1LDMyLDk3LDk5LDExMywxMTcsMTA1LDExNCwKKyAgICAxMDEsMTAwLDMyLDk3LDExMCwxMDAsMzIsODQsMTE0LDExNywxMDEsMzIsMTA1LDExNSwzMiwxMTQsCisgICAgMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDExNCw2OCwwLDAsMCwxMTQsMjksMCwwLDAsODQsMTIyLDIzLDEwMCwxMDEsCisgICAgOTcsMTAwLDEwOCwxMTEsOTksMTA3LDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCwzMiwKKyAgICA5OCwxMjEsMzIsMzcsMTE0LDcwLDc4LDQxLDEyLDExNCw2OSwwLDAsMCwxMTQsNzgsCisgICAgMCwwLDAsMTE0LDc5LDAsMCwwLDExNCw3MCwwLDAsMCwxMTQsNzQsMCwKKyAgICAwLDAsMTE0LDczLDAsMCwwLDExNCw4MywwLDAsMCwxMTQsNjYsMCwwLAorICAgIDAsMTE0LDcxLDAsMCwwLDIxOCw3LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE0LAorICAgIDc1LDAsMCwwLDIxOCw3LDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDQxLDIsMTE0LAorICAgIDc2LDAsMCwwLDExNCw4MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsODQsMCwwLDAsMTcyLDAsMCwKKyAgICAwLDExNSwzMiwwLDAsMCwwLDYsMTIsMSwxMCwxLDMsMSwzLDEsCisgICAgMTAsMSwzMCwxLDksMSwxNSwxLDQsMSwxMiwxLDE5LDEsMTgsMSwKKyAgICAyNCwyLDEzLDEsMjAsMiwxMjIsMTksOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwKKyAgICAxMTEsOTksMTA3LDQ2LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMTAsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDE2NSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwKKyAgICAwLDEyNCwwLDAsMTA2LDIsMCwxNDMsMTM4LDAsMSwxMjQsMCwwLDEwNiwzLAorICAgIDAsMTI0LDEsMCwxMDcsMywwLDExNCw1MiwwLDExNiw0LDAsMTAwLDEsMCwKKyAgICAxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiw1LDAsMTAwLAorICAgIDIsMCwxMDcsNCwwLDExNSw3MywwLDExNiw2LDAsMTMwLDEsMCwxMjQsMCwKKyAgICAwLDQsMTA2LDUsMCwxMDAsMywwLDU2LDIsOTUsNSwwLDEyNCwwLDAsCisgICAgMTA2LDUsMCwxMDAsMiwwLDEwNywyLDAsMTE0LDE1NSwwLDEwMCwwLDAsMTI0LAorICAgIDAsMCw5NSwzLDAsMTI0LDAsMCwxMDYsNywwLDExNCwxNTUsMCwxMjQsMCwKKyAgICAwLDQsMTA2LDcsMCwxMDAsMywwLDU2LDIsOTUsNywwLDEyNCwwLDAsCisgICAgMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsMSwxMTMsMTU1LDAsMTEwLDAsMCwKKyAgICA4NywxMDAsMCwwLDgxLDg4LDEwMCwwLDAsODMsNDEsNCw3OCwxMjIsMzEsOTksCisgICAgOTcsMTEwLDExMCwxMTEsMTE2LDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNywxMTAsCisgICAgNDUsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTA4LDExMSw5OSwxMDcsMTE0LDY4LAorICAgIDAsMCwwLDExNCwyOSwwLDAsMCw0MSwxMCwxMTQsNjksMCwwLDAsMTE0LAorICAgIDc4LDAsMCwwLDExNCw3MCwwLDAsMCwxMTQsNzMsMCwwLDAsMjE4LDEyLAorICAgIDgyLDExNywxMTAsMTE2LDEwNSwxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTQsNzQsMCwwLAorICAgIDAsMjE4LDE0LDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksMTE0LDExNCwxMTEsCisgICAgMTE0LDExNCw3NSwwLDAsMCwxMTQsNzEsMCwwLDAsMTE0LDg1LDAsMCwwLAorICAgIDQxLDIsMTE0LDc2LDAsMCwwLDExNCw4MiwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsODUsMCwwLDAsCisgICAgMTk3LDAsMCwwLDExNSwyMiwwLDAsMCwwLDEsMTIsMSwxMCwxLDE1LAorICAgIDEsMTUsMSwyMSwxLDE1LDEsMTUsMSw5LDEsOSwxLDE1LDEsMTIyLAorICAgIDE5LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsMTAxLDEwOCwKKyAgICAxMDEsOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCisgICAgMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyNSwwLDAsMCwxMDAsMSwKKyAgICAwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDExNiwyLDAsMTI0LDAsMCwKKyAgICAxMzEsMSwwLDEzMSwyLDAsODMsNDEsMiw3OCwxMjIsMjMsOTUsNzcsMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLDEyMywzMywxMTQsMTI1LDQxLDMyLDk3LDExNiwKKyAgICAzMiwxMjMsMTI1LDQxLDMsMTE0LDQ3LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsCisgICAgNDgsMCwwLDAsNDEsMSwxMTQsNzYsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTE0LDEwMSwKKyAgICAxMTIsMTE0LDk1LDk1LDIxMCwwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLAorICAgIDIwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMTQsCisgICAgMTAxLDExMiwxMTQsOTUsOTUsNzgsNDEsOSwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsCisgICAgMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDc3LDAsMCwKKyAgICAwLDExNCw4MywwLDAsMCwxMTQsODQsMCwwLDAsMTE0LDg1LDAsMCwwLAorICAgIDExNCw4OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNjcsMCwwLDAsMTQ2LDAsCisgICAgMCwwLDExNSwxMiwwLDAsMCwxMiw0LDYsMiwxMiw4LDEyLDEyLDEyLAorICAgIDI1LDEyLDEzLDExNCw2NywwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw3MCwwLAorICAgIDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwKKyAgICAwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsCisgICAgMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLAorICAgIDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsCisgICAgMCw5MCw3LDAsMTAwLDEwLDAsODMsNDEsMTEsMjE4LDE2LDk1LDY4LDExNywxMDksCisgICAgMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMTIyLDg2LDY1LDMyLAorICAgIDExNSwxMDUsMTA5LDExMiwxMDgsMTAxLDMyLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAorICAgIDk5LDEwNywzMiwxMDEsMTEzLDExNywxMDUsMTE4LDk3LDEwOCwxMDEsMTEwLDExNiwzMiwxMDIsMTExLAorICAgIDExNCwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk4LDExNywxMDUsMTA4LDEwMCwxMTUsMzIsCisgICAgMTE5LDEwNSwxMTYsMTA0LDExMSwxMTcsMTE2LDEwLDMyLDMyLDMyLDMyLDEwOSwxMTcsMTA4LDExNiwKKyAgICAxMDUsNDUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTUsMTE3LDExMiwxMTIsCisgICAgMTExLDExNCwxMTYsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTI0LDEsCisgICAgMCwxMjQsMCwwLDk1LDAsMCwxMDAsMSwwLDEyNCwwLDAsOTUsMSwwLAorICAgIDEwMCwwLDAsODMsNDEsMiw3OCwxMTQsNjgsMCwwLDAsNDEsMiwxMTQsNzIsCisgICAgMCwwLDAsMTE0LDc0LDAsMCwwLDQxLDIsMTE0LDc2LDAsMCwwLDExNCwKKyAgICA3MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsNzcsMCwwLDAsMjE4LDAsMCwwLDExNSw0LDAsMCwKKyAgICAwLDAsMSw5LDEsMTIyLDI1LDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwwLDEyNCwwLDAsNCwxMDYsMCwKKyAgICAwLDEwMCwxLDAsNTUsMiw5NSwwLDAsMTAwLDIsMCw4Myw0MSwzLDc4LAorICAgIDExNCwyOSwwLDAsMCw4NCw0MSwxLDExNCw3NCwwLDAsMCw0MSwxLDExNCwKKyAgICA3NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsODQsMCwwLDAsMjIyLDAsMCwwLDExNSw0LDAsMCwKKyAgICAwLDAsMSwxNSwxLDEyMiwyNCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsNDksMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwKKyAgICAxLDAsMTA3LDIsMCwxMTQsMzAsMCwxMTYsMSwwLDEwMCwyLDAsMTMxLDEsCisgICAgMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCw0LDEwNiwwLDAsMTAwLDMsCisgICAgMCw1NiwyLDk1LDAsMCwxMDAsMCwwLDgzLDQxLDQsNzgsMTE0LDY4LDAsCisgICAgMCwwLDEyMiwzMSw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LAorICAgIDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsCisgICAgMTExLDk5LDEwNywxMTQsMjksMCwwLDAsNDEsMiwxMTQsNzQsMCwwLDAsMTE0LAorICAgIDg2LDAsMCwwLDQxLDEsMTE0LDc2LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw4NSwwLDAsMCwyMjYsCisgICAgMCwwLDAsMTE1LDYsMCwwLDAsMCwxLDE1LDEsMTUsMSwxMjIsMjQsCisgICAgOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywKKyAgICA0NiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyNSwwLAorICAgIDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDExNiwyLAorICAgIDAsMTI0LDAsMCwxMzEsMSwwLDEzMSwyLDAsODMsNDEsMiw3OCwxMjIsMjgsCisgICAgOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywKKyAgICA0MCwxMjMsMzMsMTE0LDEyNSw0MSwzMiw5NywxMTYsMzIsMTIzLDEyNSw0MSwzLDExNCw0NywKKyAgICAwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDQ4LDAsMCwwLDQxLDEsMTE0LAorICAgIDc2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCw4OCwwLDAsMCwyMzEsMCwwLDAsMTE1LDIsMCwwLAorICAgIDAsMCwxLDEyMiwyNSw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSwKKyAgICA4LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLAorICAgIDExNCw1OSwwLDAsMCwxMTQsNzcsMCwwLDAsMTE0LDg0LDAsMCwwLDExNCwKKyAgICA4NSwwLDAsMCwxMTQsODgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDg5LDAsCisgICAgMCwwLDIxNCwwLDAsMCwxMTUsMTAsMCwwLDAsMTIsMiw2LDIsMTIsCisgICAgNCwxMiw0LDEyLDUsMTE0LDg5LDAsMCwwLDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwzLDAsMCwwLDExLDAsMCwwLDMsMCwwLDAsMTE1LAorICAgIDE0MiwwLDAsMCwxMDAsMSwwLDEyNSwxLDAsMTIxLDE3LDAsMTE2LDAsMCwKKyAgICAxMzYsMCwwLDI1LDEzMSwwLDAsMTI1LDEsMCw4NywxMTAsMTgsMCw0LDExNiwKKyAgICAxLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwxLDEsODksMTEwLDEsMCw4OCwKKyAgICAxMjQsMSwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMTM4LDAsMTE2LDIsMCwxMDAsCisgICAgMSwwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LDMsMCwxMzYsMCwwLDEzMSwxLAorICAgIDAsMTI1LDEsMCwxMTAsMTIsMCwxMTYsNCwwLDEzNiwwLDAsMTMxLDEsMCwKKyAgICAxMjUsMSwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTM0LAorICAgIDAsMCwxMjUsMiwwLDExNiw1LDAsMTA2LDYsMCwxMjQsMSwwLDEyNCwyLAorICAgIDAsMTMxLDIsMCwxMTYsMCwwLDEzNiwwLDAsNjAsMTEwLDAsMCwxMjQsMSwKKyAgICAwLDgzLDQxLDQsMTIyLDEwOSw3MSwxMDEsMTE2LDMyLDExMSwxMTQsMzIsOTksMTE0LDEwMSwKKyAgICA5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwKKyAgICAxMTEsOTksMTA3LDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsODMsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsOTgsMTAxLAorICAgIDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE2LDk3LDEwNywKKyAgICAxMDEsMTEwLDQ2LDc4LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKKyAgICAwLDIsMCwwLDAsMTksMCwwLDAsMTE1LDExLDAsMCwwLDExNiwwLAorICAgIDAsMTM2LDAsMCw2MSwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMSwyMTgsMTMsCisgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE1LDQxLDEsMTE0LAorICAgIDM2LDAsMCwwLDQxLDEsMTE0LDcyLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCwyLDk5LDk4LDI1MSwwLDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDEsMTIyLDI4LDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwKKyAgICA5OSw5OCw0MSw3LDExNCw5MCwwLDAsMCwyMTgsOCw3NSwxMDEsMTIxLDY5LDExNCwKKyAgICAxMTQsMTExLDExNCwxMTQsNjksMCwwLDAsMTE0LDg5LDAsMCwwLDExNCw2NywwLAorICAgIDAsMCwyMTgsOCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5MCwzLDExNCwxMDEsCisgICAgMTAyLDQxLDMsMTE0LDcyLDAsMCwwLDExNCw3MCwwLDAsMCwxMTQsOTEsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsNzIsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDE2LDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDk1LDEwOCwxMTEsOTksMTA3LDIzNywwLDAsMCwxMTUsMjQsMCwwLDAsMCw0LAorICAgIDYsMSwzLDEsMTcsMSwxMywxLDUsMSwxMiwxLDEyLDEsMTUsMiwKKyAgICAxMiwxLDE4LDIsMjUsMSwxMTQsOTQsMCwwLDAsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDcxLDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwxLAorICAgIDAsMTE2LDEsMCwxMDYsMiwwLDEzMSwwLDAsMSwxMjEsMTQsMCwxMjQsMSwKKyAgICAwLDEwNiwzLDAsMTMxLDAsMCwxLDg3LDExMCwxOCwwLDQsMTE2LDQsMCwKKyAgICAxMDcsMTAsMCwxMTQsNTYsMCwxLDEsMSw4OSwxMTAsMTEsMCw4OCwxMjQsMSwKKyAgICAwLDEwNiw1LDAsMTMxLDAsMCwxLDEwMCwxLDAsODMsNDEsMiw5NywyMSwKKyAgICAxLDAsMCw4MiwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwMywKKyAgICAxMDgsMTExLDk4LDk3LDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LAorICAgIDEwNyw0NCwzMiw5NywxMTAsMTAwLDMyLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLAorICAgIDExNiwxMDQsMTAxLDExMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywKKyAgICAzMiwxMDIsMTExLDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwKKyAgICAxMDUsMTE1LDMyLDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwKKyAgICAxMTUsMTE3LDExNCwxMDEsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwKKyAgICAzMiw5OSwxMTEsMTA5LDExMiwxMDgsMTAxLDExNiwxMDEsMTA4LDEyMSwzMiwxMDUsMTEwLDEwNSwxMTYsCisgICAgMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwxMDAsNDQsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwxMCwKKyAgICAzMiwzMiwzMiwzMiwxMDEsMTE4LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTYsMzIsMTA1LDExNSwzMiwKKyAgICA5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw5OCwKKyAgICAxMjEsMzIsOTcsMTEwLDExMSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw4MywxMDQsMTExLDExNywxMDgsMTAwLDMyLDExMSwxMTAsCisgICAgMTA4LDEyMSwzMiw5OCwxMDEsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LAorICAgIDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LAorICAgIDEwNywzMiwxMTYsOTcsMTA3LDEwMSwxMTAsNDYsNzgsNDEsNiwxMTQsOTQsMCwwLDAsCisgICAgMjE4LDQsOTUsMTA1LDEwOSwxMTIsMjE4LDEyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LAorICAgIDEwOCwxMTEsOTksMTA3LDExNCw4NCwwLDAsMCwxMTQsNjYsMCwwLDAsMTE0LDg1LAorICAgIDAsMCwwLDQxLDIsMTE0LDcyLDAsMCwwLDExNCw3MCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTksCisgICAgOTUsMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwwLDEsMCwwLDExNSwxNCwwLDAsMCwwLDcsMTIsMSwKKyAgICAxMCwxLDMsMSwxNCwxLDEzLDMsNSwyLDExNCw5NywwLDAsMCw5OSwKICAgICAxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLAogICAgIDc5LDAsMCwwLDExNSwxMywwLDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LAotICAgIDIsMCwxNDIsMCwwLDgzLDQwLDEsMCwwLDAsMTE3LDQ2LDEsMCwwLAotICAgIDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDQ2LDk5LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsOTksMTAxLDExNSwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsMzIsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDEsMTEwLAotICAgIDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCwzMiwxMTYsMTExLAotICAgIDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsCi0gICAgOTcsMTAwLDMyLDExMSwxMDIsMzIsOTcsMzIsMTEwLDExMSwxMTQsMTA5LDk3LDEwOCwzMiw5OSwKLSAgICA5NywxMDgsMTA4LDMyLDEwNSwxMTAsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMTE1LDMyLDExOSwxMDQsCi0gICAgMTAxLDExNCwxMDEsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDEwLDMyLDMyLDMyLDMyLAotICAgIDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwxMTYsMTE0LDExMSwxMDAsMTE3LDk5LDEwMSwKLSAgICAxMTUsMzIsMTE3LDExMCwxMTksOTcsMTEwLDExNiwxMDEsMTAwLDMyLDExMCwxMTEsMTA1LDExNSwxMDEsCi0gICAgMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDExNiwxMTQsOTcsOTksMTAxLDk4LAotICAgIDk3LDk5LDEwNywzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDEsCi0gICAgMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTAsMTAzLDEwLDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQxLDEwLDMyLDMyLDMyLDMyLDQwLDAsCi0gICAgMCwwLDAsNDAsMywwLDAsMCwxMTcsMSwwLDAsMCwxMDIsMTE3LDQsCi0gICAgMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LDQsMCwwLDAsMTA3LDExOSwxMDAsMTE1LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LAotICAgIDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDQ5LDEsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsOCwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwKLSAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCi0gICAgMTE4LDEwMSwxMDAsMTA1LDE1OCwxMiwwLDAsMTE3LDEsMCwwLDAsMTMsMTA1LDE2LAotICAgIDAsMCwwLDExNywxLDAsMCwwLDEwLDEwNSwyNCwwLDAsMCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDk5LAotICAgIDAsMCwwLDExNSwyOSwwLDAsMCwxMjQsMCwwLDkzLDE5LDAsMTI1LDEsCi0gICAgMCwxMTYsMCwwLDEyNCwxLDAsNjMsMTAwLDAsMCw2NCw4NiwxLDExMywzLAotICAgIDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDEwNSwyNTUsMCwwLDAsNzgsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTcsMCwwLDAsOTUsODIsNjUsODcsOTUsNzcsCi0gICAgNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsNDAsMiwwLDAsMCwKLSAgICAxMTcsMiwwLDAsMCw0Niw0OCwxMTcsMSwwLDAsMCwxMTAsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsCi0gICAgMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTUwLDEsMCwwLDExNSwyLDAsMCwwLAotICAgIDYsMCwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsCi0gICAgMTA1LDAsMCwwLDAsMTA1LDI1LDAsMCwwLDEwNSw4LDAsMCwwLDExNywKLSAgICAxMSwwLDAsMCw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTUsOTUsMTE3LAotICAgIDMsMCwwLDAsNDYsMTEyLDEyMSwxMTcsNCwwLDAsMCw0NiwxMTIsMTIxLDk5LAotICAgIDExNyw0LDAsMCwwLDQ2LDExMiwxMjEsMTExLDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwxMSwwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxODAsCi0gICAgMCwwLDAsMTI0LDEsMCwxMDAsNSwwLDEwNyw4LDAsMTE0LDI1LDAsMTE2LAotICAgIDEsMCwxMDYsMiwwLDEwNiwzLDAsMTIsMTEwLDMsMCwxMjQsMSwwLDEyNSwKLSAgICAyLDAsMTI0LDIsMCwxMTQsNDYsMCwxMTYsNCwwLDEyNSwzLDAsMTEwLDYsCi0gICAgMCwxMTYsNSwwLDEyNSwzLDAsMTE2LDYsMCwxMjQsMCwwLDEzMSwxLDAsCi0gICAgOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw3LDAsMTAwLAotICAgIDEsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNiwwLDEyNSw3LDAsMTI1LDgsCi0gICAgMCwxMTYsMSwwLDEwNiw4LDAsMTA2LDksMCwxMjUsOSwwLDEyNCw5LDAsCi0gICAgMTAwLDUsMCwxMDcsOCwwLDExNCwxMzMsMCwxMTYsMTAsMCwxMDAsMiwwLDEzMSwKLSAgICAxLDAsMTMwLDEsMCwxMTAsMCwwLDEwMCwzLDAsMTA2LDExLDAsMTI0LDYsCi0gICAgMCwxMjQsNywwLDEyNCw5LDAsMTI0LDMsMCwxMDAsNCwwLDI1LDEwMyw0LAotICAgIDAsMTMxLDEsMCwxMjUsMTAsMCwxMTYsMTIsMCwxMjQsNCwwLDExNiwxMywwLAotICAgIDEyNCwxMCwwLDEzMSwzLDAsODMsNDAsNiwwLDAsMCwxMTcsMjQ0LDEsMCwKLSAgICAwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICAxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwKLSAgICAxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwKLSAgICAxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTEwLDExMSwxMTYsCi0gICAgMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiw1OSwzMiwKLSAgICAxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsMzIsMTE0LDEwMSwxMTYsMTE3LAotICAgIDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsCi0gICAgMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLAotICAgIDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwKLSAgICAxMDAsMzIsOTcsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTE5LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMDAsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCwxMCwzMiwzMiwzMiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDQ2LAotICAgIDExMiwxMjEsOTksMzIsMTE3LDExMCwxMDgsMTAxLDExNSwxMTUsMzIsMTE1LDEyMSwxMTUsNDYsMTAyLAotICAgIDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiwxMTAsMTExLDExMCw0NSwxMjIsMTAxLDExNCwxMTEsNDQsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLAotICAgIDEwNSwxMTYsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiw0NiwxMTIsMTIxLDExMSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTAwLDEwMSw5OCwxMTcsMTAzLDk1LDExMSwKLSAgICAxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw3OCwKLSAgICAxMTEsMTEwLDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTA1LDExNiwzMiwxMDksMTE3LDExNSwKLSAgICAxMTYsMzIsOTgsMTAxLDMyLDk3LDMyLDk4LDExMSwxMTEsMTA4LDEwMSw5NywxMTAsMzIsOTcsCi0gICAgMTEwLDEwMCwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDExMiwxMDgsOTcsOTksMTAxLDMyLDExMSwxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTAyLAotICAgIDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LAotICAgIDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsCi0gICAgMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTcsMSwwLDAsMCw0NiwxMTcsMzYsMCwwLDAsCi0gICAgMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywwLDAsMCwwLDEwNSwwLDAsMCwwLDc4LDQwLAotICAgIDE0LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsCi0gICAgMCwwLDExNSwxMjEsMTE1LDExNyw1LDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsCi0gICAgOCwwLDAsMCwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDExNywyMywwLDAsCi0gICAgMCw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSwKLSAgICA4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMjcsMCwwLDAsNzksODAsODQsCi0gICAgNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsCi0gICAgODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDExLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDksMCwwLDAsMTEyLDk3LDExNCwKLSAgICAxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMTQsMCwwLDAsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDExNyw5LDAsMCwwLDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywKLSAgICA0LDAsMCwwLDEwNiwxMTEsMTA1LDExMCwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDExNyw4LDAsMCwwLDk1LDgwLDg5LDY3LAotICAgIDY1LDY3LDcyLDY5LDQwLDExLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNywxNCwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsCi0gICAgMTE0LDExNCwxMDUsMTAwLDEwMSwxMTcsNSwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsMTE3LAotICAgIDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsNCwwLDAsCi0gICAgMCwxMDQsMTAxLDk3LDEwMCwxMTcsNCwwLDAsMCwxMTYsOTcsMTA1LDEwOCwxMTcsMTMsCi0gICAgMCwwLDAsOTgsOTcsMTE1LDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsMTE3LDEsMCwwLDAsOTUsMTE3LDMsCi0gICAgMCwwLDAsMTE2LDk3LDEwMywxMTcsOCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxNTksMSwwLDAsMTE1LDIyLDAsMCwwLDAsMTMsCi0gICAgMzEsMSw2LDEsOSwyLDYsMSwxOCwxLDI0LDEsMTIsMSwxMiwxLAotICAgIDE1LDEsMzEsMSwxMTcsMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwxLDAsMCwwLDAsCi0gICAgMCwwLDAsNSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICAxOTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTAwLDcsMCwKLSAgICAxMDcsOCwwLDExNCwzMywwLDExNiw0LDAsMTAwLDEsMCwxMzEsMSwwLDEzMCwKLSAgICAxLDAsMTEwLDAsMCwxMTYsNSwwLDEyNCwwLDAsMTMxLDEsMCw5MiwyLAotICAgIDAsMTI1LDEsMCwxMjUsMiwwLDExNiw1LDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsMTI0LDMsMCwxMTYsNiwwLDEwNywKLSAgICAzLDAsMTE0LDEwOCwwLDExNiw3LDAsMTAwLDIsMCwxMDYsOCwwLDExNiw2LAotICAgIDAsMTI0LDAsMCwxMzEsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEyNCwyLDAsMTA2LDksMCwxMDAsMywwLDEzMSwxLDAsMTAwLDQsMCwxMDcsCi0gICAgMywwLDExNCwxNTMsMCwxMTYsNywwLDEwMCw1LDAsMTA2LDgsMCwxMjQsMiwKLSAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDIsMCwKLSAgICAxMDYsMTAsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDYsMCwyNSwxMjUsNCwwLAotICAgIDExNiwxMSwwLDEyNCwxLDAsMTI0LDQsMCwxMTYsMTIsMCwxMDAsNiwwLDI1LAotICAgIDIzLDEzMSwyLDAsODMsNDAsOCwwLDAsMCwxMTcsMTIxLDEsMCwwLDcxLAotICAgIDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLAotICAgIDMyLDk3LDMyLDQ2LDExMiwxMjEsOTksNDYsNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiwKLSAgICA5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSwzMiwxMDIsCi0gICAgMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwxMTIsCi0gICAgMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwKLSAgICAxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwKLSAgICAxMDUsMTE1LDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwKLSAgICAzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxMDAsCi0gICAgMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LDExMiwxMTEsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDQ2LDMyLDMyLDczLDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDAsCi0gICAgMTExLDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwxMTYsMzIsOTksMTExLDExMCwxMDIsCi0gICAgMTExLDExNCwxMDksMzIsMTE2LDExMSwzMiw4MCw2OSw4MCwzMiw1MSw0OSw1Miw1NSwzMiwKLSAgICAxMDIsMTExLDExNCwxMDksOTcsMTE2LDQ0LDMyLDg2LDk3LDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsNDYsMzIsNzMsMTAyLDEwLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwKLSAgICAxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLAotICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTcsMzYsMCwwLDAsMTE1LDEyMSwxMTUsCisgICAgMiwwLDE0MiwwLDAsODMsNDEsMSw5Nyw0NiwxLDAsMCwxMTQsMTAxLDEwOSwKKyAgICAxMTEsMTE4LDEwMSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDk1LDEwMiwxMTQsCisgICAgOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0Niw5OSwKKyAgICAzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTcsMTA4LDExOSw5NywxMjEsMTE1LDMyLDExNCwxMDEsMTA5LAorICAgIDExMSwxMTgsMTAxLDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLDk5LDEwMSwxMTUsMTAsMzIsMzIsCisgICAgMzIsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDEwMiwKKyAgICAxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTAxLDExMCwxMDAsMzIsMTE5LAorICAgIDEwNSwxMTYsMTA0LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsMzIsMTE2LDExMSwzMiwxMTYsMTA0LAorICAgIDEwNSwxMTUsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDg1LDExNSwxMDEsMzIsMTA1LDExNiwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCwzMiwKKyAgICAxMTEsMTAyLDMyLDk3LDMyLDExMCwxMTEsMTE0LDEwOSw5NywxMDgsMzIsOTksOTcsMTA4LDEwOCwKKyAgICAzMiwxMDUsMTEwLDMyLDExMiwxMDgsOTcsOTksMTAxLDExNSwzMiwxMTksMTA0LDEwMSwxMTQsMTAxLAorICAgIDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwxMCwzMiwzMiwzMiwzMiwxMDIsMTE0LDk3LAorICAgIDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMTE2LDExNCwxMTEsMTAwLDExNyw5OSwxMDEsMTE1LDMyLDExNywKKyAgICAxMTAsMTE5LDk3LDExMCwxMTYsMTAxLDEwMCwzMiwxMTAsMTExLDEwNSwxMTUsMTAxLDMyLDEwNSwxMTAsCisgICAgMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsMTE0LDk3LDk5LDEwMSw5OCw5Nyw5OSwxMDcsCisgICAgMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTAxLDEyMCwxMDEsOTksCisgICAgMTE3LDExNiwxMDUsMTEwLDEwMywxMCwzMiwzMiwzMiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAzMiw5OSwxMTEsMTAwLDEwMSw0MSwxMCwzMiwzMiwzMiwzMiwxMTQsNCwwLDAsMCwKKyAgICA0MSwzLDIxOCwxLDEwMiwyMTgsNCw5NywxMTQsMTAzLDExNSw5MCw0LDEwNywxMTksMTAwLAorICAgIDExNSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMjUsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywKKyAgICAxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMjAsMSwwLDAsMTE1LAorICAgIDIsMCwwLDAsMCw4LDExNCwxMDAsMCwwLDAsMTA1LDIyOCwxMiwwLDAsCisgICAgMjMzLDIsMCwwLDAsMTE0LDEzLDAsMCwwLDExNSwyLDAsMCwwLDEzLAorICAgIDEwLDkwLDExLDk1LDk1LDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSw5NSw5NSwxMjIsMywKKyAgICA0NiwxMTIsMTIxLDEyMiw0LDQ2LDExMiwxMjEsOTksMTIyLDQsNDYsMTEyLDEyMSwxMTEsNzgsCisgICAgOTksMiwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDYsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDE4MCwwLDAsMCwxMjQsMSwwLDEwMCwxLDAsCisgICAgMTA3LDgsMCwxMTQsMjUsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMiwKKyAgICAxMTAsMywwLDEyNCwxLDAsMTI1LDIsMCwxMjQsMiwwLDExNCw0NiwwLDExNiwKKyAgICAzLDAsMTI1LDMsMCwxMTAsNiwwLDExNiw0LDAsMTI1LDMsMCwxMTYsNSwKKyAgICAwLDEyNCwwLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLAorICAgIDEyNCw1LDAsMTA2LDYsMCwxMDAsMiwwLDEzMSwxLDAsOTIsMywwLDEyNSwKKyAgICA2LDAsMTI1LDcsMCwxMjUsOCwwLDExNiwwLDAsMTA2LDcsMCwxMDYsOCwKKyAgICAwLDEyNSw5LDAsMTI0LDksMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDEzMywwLAorICAgIDExNiw5LDAsMTAwLDMsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMDAsCisgICAgNCwwLDEwNiwxMCwwLDEyNCw2LDAsMTI0LDcsMCwxMjQsOSwwLDEyNCwzLAorICAgIDAsMTAwLDUsMCwyNSwxMDMsNCwwLDEzMSwxLDAsMTI1LDEwLDAsMTE2LDExLAorICAgIDAsMTI0LDQsMCwxMTYsMTIsMCwxMjQsMTAsMCwxMzEsMywwLDgzLDQxLDYsCisgICAgOTcsMjQ0LDEsMCwwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsCisgICAgMTAxLDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywKKyAgICAxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwKKyAgICAxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsCisgICAgMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwxMTUsCisgICAgMzIsMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDUsCisgICAgMTE1LDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsMzIsCisgICAgMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LAorICAgIDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsNDYsMTEyLDEyMSw5OSwKKyAgICA0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywKKyAgICAxMDgsOTcsMTE2LDEwMSwxMDAsMzIsOTcsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE5LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDEsMTIwLDExNiwKKyAgICAxMDEsMTEwLDExNSwxMDUsMTExLDExMCwxMCwzMiwzMiwzMiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsCisgICAgOTgsMTAxLDMyLDQ2LDExMiwxMjEsOTksMzIsMTE3LDExMCwxMDgsMTAxLDExNSwxMTUsMzIsMTE1LAorICAgIDEyMSwxMTUsNDYsMTAyLDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwKKyAgICAxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExMCw0NSwxMjIsMTAxLDExNCwxMTEsNDQsMzIsMTE2LAorICAgIDEwNCwxMDEsMTEwLDMyLDEwNSwxMTYsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiw0NiwKKyAgICAxMTIsMTIxLDExMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTAwLDEwMSw5OCwKKyAgICAxMTcsMTAzLDk1LDExMSwxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsCisgICAgMTExLDExNiwzMiw3OCwxMTEsMTEwLDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTA1LDExNiwKKyAgICAzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk3LDMyLDk4LDExMSwxMTEsMTA4LDEwMSwKKyAgICA5NywxMTAsMzIsOTcsMTEwLDEwMCwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDUsCisgICAgMTEwLDEwLDMyLDMyLDMyLDMyLDExMiwxMDgsOTcsOTksMTAxLDMyLDExMSwxMDIsMzIsMTE1LAorICAgIDEyMSwxMTUsNDYsMTAyLDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwKKyAgICAxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwKKyAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwKKyAgICAxMTYsMTA0LDEwMSwxMTAsMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsCisgICAgMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsCisgICAgMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwyMTgsMSw0NiwxMjIsMzYsMTE1LAorICAgIDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsCisgICAgMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LAorICAgIDExMSwxMTAsMTAxLDExNCwzMCwwLDAsMCwxMTQsNjgsMCwwLDAsNDEsMTMsMTE0LAorICAgIDcsMCwwLDAsMjE4LDUsMTAyLDEwOCw5NywxMDMsMTE1LDIxOCw4LDExMSwxMTIsMTE2LAorICAgIDEwNSwxMDksMTA1LDEyMiwxMDEsMjE4LDIzLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg5LDg0LAorICAgIDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDIxOCwyNywKKyAgICA3OSw4MCw4NCw3Myw3Nyw3Myw5MCw2OSw2OCw5NSw2Niw4OSw4NCw2OSw2Nyw3OSwKKyAgICA2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTQsMzgsMCwwLDAsCisgICAgMjE4LDksMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwyMTgsMTQsMTA1LDEwOSwxMTIsCisgICAgMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDIxOCw5LDk5LDk3LDk5LAorICAgIDEwNCwxMDEsOTUsMTE2LDk3LDEwMywyMTgsMTksNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsCisgICAgMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNCwyNiwwLDAsMCwKKyAgICAxMTQsMjgsMCwwLDAsMjE4LDgsOTUsODAsODksNjcsNjUsNjcsNzIsNjksNDEsCisgICAgMTEsMTE0LDM1LDAsMCwwLDkwLDE0LDEwMCwxMDEsOTgsMTE3LDEwMyw5NSwxMTEsMTE4LAorICAgIDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDIxOCw1LDEwMCwxMDEsOTgsMTE3LDEwMywyMTgsOCwxMTUsCisgICAgMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDIxOCw0LDEwNCwxMDEsOTcsMTAwLDExNCwzNywwLAorICAgIDAsMCwyMTgsMTMsOTgsOTcsMTE1LDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwKKyAgICAxMDEsMjE4LDMsMTE1LDEwMSwxMTIsMTE0LDM2LDAsMCwwLDkwLDMsMTE2LDk3LDEwMywKKyAgICAyMTgsOCwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk5LDk3LDk5LDEwNCwxMDEsCisgICAgOTUsMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTQzLDEsMCwwLAorICAgIDExNSwyMiwwLDAsMCwwLDEzLDMxLDEsNiwxLDksMiw2LDEsMTgsCisgICAgMSwyNCwxLDEyLDEsMTIsMSwxNSwxLDMxLDEsMTE0LDExOCwwLDAsMCwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwxOTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLAorICAgIDEwNiwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzMywwLDExNiwzLDAsMTAwLAorICAgIDIsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMTYsNCwwLDEyNCwwLAorICAgIDAsMTMxLDEsMCw5MiwyLDAsMTI1LDEsMCwxMjUsMiwwLDExNiw0LDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsMTI0LAorICAgIDMsMCwxMTYsNSwwLDEwNywzLDAsMTE0LDEwOCwwLDExNiw2LDAsMTAwLDMsCisgICAgMCwxMDYsNywwLDExNiw1LDAsMTI0LDAsMCwxMzEsMiwwLDEzMSwxLDAsCisgICAgMTMwLDEsMCwxMTAsMCwwLDEyNCwyLDAsMTA2LDgsMCwxMDAsNCwwLDEzMSwKKyAgICAxLDAsMTAwLDUsMCwxMDcsMywwLDExNCwxNTMsMCwxMTYsNiwwLDEwMCw2LAorICAgIDAsMTA2LDcsMCwxMjQsMiwwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwwLAorICAgIDExMCwwLDAsMTI0LDIsMCwxMDYsOSwwLDEwMCw0LDAsMTMxLDEsMCwxMDAsCisgICAgNywwLDI1LDEyNSw0LDAsMTE2LDEwLDAsMTI0LDEsMCwxMjQsNCwwLDExNiwKKyAgICAxMSwwLDEwMCw3LDAsMjUsMjMsMTMxLDIsMCw4Myw0MSw4LDk3LDEyMSwxLAorICAgIDAsMCw3MSwxMDUsMTE4LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsCisgICAgMzIsMTE2LDExMSwzMiw5NywzMiw0NiwxMTIsMTIxLDk5LDQ2LDQ3LDQ2LDExMiwxMjEsMTExLAorICAgIDMyLDEwMiwxMDUsMTA4LDEwMSw0NCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwKKyAgICAxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsCisgICAgMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsCisgICAgMTAwLDExMSwxMDEsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLAorICAgIDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsNTksMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDExNSwxMDUsMTA5LAorICAgIDExMiwxMDgsMTIxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LAorICAgIDExNiwxMDEsMTAwLDMyLDExNiwxMTEsMzIsOTksMTExLDExNCwxMTQsMTAxLDExNSwxMTIsMTExLDExMCwKKyAgICAxMDAsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwKKyAgICAxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwzMiwzMiw3MywxMDIsMzIsMTEyLDk3LDExNiwKKyAgICAxMDQsMzIsMTAwLDExMSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsMTE2LDMyLDk5LAorICAgIDExMSwxMTAsMTAyLDExMSwxMTQsMTA5LDMyLDExNiwxMTEsMzIsODAsNjksODAsMzIsNTEsNDksCisgICAgNTIsNTUsMzIsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0NCwzMiw4Niw5NywxMDgsMTE3LDEwMSwKKyAgICA2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiwxMTQsOTcsCisgICAgMTA1LDExNSwxMDEsMTAwLDQ2LDMyLDczLDEwMiwxMCwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSwKICAgICA0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsCiAgICAgOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwKLSAgICAxMDEsMTE3LDM3LDAsMCwwLDEyMywxMjUsMzIsMTEwLDExMSwxMTYsMzIsOTgsMTExLDExNiwKLSAgICAxMTYsMTExLDEwOSw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsCi0gICAgMTExLDExNCwxMjEsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMTcsMSwwLDAsMCwKLSAgICA0NiwxMDUsMiwwLDAsMCwxMTcsMjgsMCwwLDAsMTAxLDEyMCwxMTIsMTAxLDk5LAotICAgIDExNiwxMDEsMTAwLDMyLDExMSwxMTAsMTA4LDEyMSwzMiw1MCwzMiwxMDAsMTExLDExNiwxMTUsMzIsCi0gICAgMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMDUsMCwwLDAsMCw3OCw0MCwxMywwLAotICAgIDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsMTQsMCwwLDAsMTA1LAotICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDExNyw5LDAsCi0gICAgMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywxMTcsNCwwLDAsMCwKLSAgICA3OCwxMTEsMTEwLDEwMSwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwKLSAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNyw4LDAsMCwKLSAgICAwLDk1LDgwLDg5LDY3LDY1LDY3LDcyLDY5LDExNywxMCwwLDAsMCw4Niw5NywKLSAgICAxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsCi0gICAgMTA5LDk3LDExNiwxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsMTE3LDksMCwKLSAgICAwLDAsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMTAsMCwwLDAsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDExNywxNSwwLDAsMCw4MywKLSAgICA3OSw4NSw4Miw2Nyw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MCw1LAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwKLSAgICAwLDEwNCwxMDEsOTcsMTAwLDExNywxNiwwLDAsMCwxMTIsMTIxLDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDExMiwKLSAgICAxMjEsOTksOTcsOTksMTA0LDEwMSwxMTcsMTMsMCwwLDAsOTgsOTcsMTE1LDEwMSw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTcsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwKLSAgICAxMDIsMTE0LDExMSwxMDksOTUsOTksOTcsOTksMTA0LDEwMSwxODYsMSwwLDAsMTE1LDI0LAotICAgIDAsMCwwLDAsOSwxOCwxLDE1LDEsMTgsMSwxOCwxLDEyLDEsOSwKLSAgICAxLDE4LDEsMjEsMSw5LDEsMTUsMSwxOSwxLDExNywxNywwLDAsMCwKLSAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDEzLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNjQsMCwwLDAsMTE2LDAsMCwxMjQsMCwKLSAgICAwLDEzMSwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyMiwwLDEwMCw2LDAsCi0gICAgODMsMTI0LDAsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsMCw5MiwzLDAsCi0gICAgMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDEsMCwxMiwxMTUsODEsMCwKLSAgICAxMjQsMywwLDEwNiwzLDAsMTMxLDAsMCwxMDAsNywwLDEwMCw4LDAsMTMzLAotICAgIDIsMCwyNSwxMDAsNSwwLDEwNywzLDAsMTE0LDg1LDAsMTI0LDAsMCw4MywKLSAgICAxMjEsMTYsMCwxMTYsNCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNCwwLDg3LAotICAgIDExMCw0MCwwLDQsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLDAsMTA3LDEwLDAsCi0gICAgMTE0LDE0MywwLDEsMSwxLDEyNCwwLDAsMTAwLDYsMCwxMDAsOSwwLDEzMywKLSAgICAyLDAsMjUsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDExNiw3LDAsMTI0LDQsCi0gICAgMCwxMzEsMSwwLDExNCwxNjAsMCwxMjQsNCwwLDgzLDEyNCwwLDAsODMsNDAsCi0gICAgMTAsMCwwLDAsMTE3LDE4OCwwLDAsMCw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwKLSAgICAzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsCi0gICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiw5NywzMiwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDEwNSwxMDIsMzIsMTEyLDExMSwxMTUsMTE1LDEwNSwKLSAgICA5OCwxMDgsMTAxLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLAotICAgIDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDExNSwzMiwKLSAgICAxMTIsMTE3LDExNCwxMDEsMTA4LDEyMSwzMiwxMDIsMTExLDExNCwzMiw5OCw5Nyw5OSwxMDcsMTE5LAotICAgIDk3LDExNCwxMDAsMTE1LDQ1LDk5LDExMSwxMDksMTEyLDk3LDExNiwxMDUsOTgsMTA1LDEwOCwxMDUsCi0gICAgMTE2LDEyMSwzMiwxMDIsMTExLDExNCwxMCwzMiwzMiwzMiwzMiw4MCwxMjEsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiw5NSw2OSwxMjAsMTAxLDk5LDY3LDExMSwxMDAsMTAxLDc3LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsODcsMTA1LDExNiwxMDQsNzAsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDQwLAotICAgIDQxLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsNjcsMzIsNjUsODAsNzMsNDYsMTAsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTA1LDAsMCwwLDAsMTE3LDEsMCwwLDAsNDYsCi0gICAgMTA1LDMsMCwwLDAsMTA1LDEsMCwwLDAsMTE3LDIsMCwwLDAsMTEyLAotICAgIDEyMSw3OCwxMDUsMjUzLDI1NSwyNTUsMjU1LDEwNSwyNTUsMjU1LDI1NSwyNTUsMTA1LDI1NSwyNTUsMjU1LAotICAgIDI1NSw0MCw4LDAsMCwwLDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNyw0LAotICAgIDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwKLSAgICAxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsNSwwLDAsMCwxMDgsMTExLDExOSwxMDEsMTE0LAotICAgIDExNywxNywwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwKLSAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEwLAotICAgIDAsMCwwLDg2LDk3LDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTIsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsNDAsNSwKLSAgICAwLDAsMCwxMTcsMTMsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTE0LDEwMSwxMTUsMTE2LDExNywxLAotICAgIDAsMCwwLDk1LDExNyw5LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDExNywxMSwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE1LAotICAgIDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDIwOSwxLDAsMCwxMTUsMjAsMCwwLDAsMCw3LDE4LDEsNCwKLSAgICAxLDI0LDEsMzUsMSw0LDEsMywxLDE2LDEsMTksMSwyMSwxLDExNywKLSAgICAxNSwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwKLSAgICAxMDUsMTA4LDEwMSwxMTcsOSwwLDAsMCwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwNSwxMTYsCi0gICAgMTIxLDEwNSwxLDAsMCwwLDk5LDEsMCwwLDAsMSwwLDAsMCwzLAotICAgIDAsMCwwLDQsMCwwLDAsNzEsMCwwLDAsMTE1LDgxLDAsMCwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTA3LDUsMCwxMTQsCi0gICAgNzcsMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDYsMCwxMzEsMSwwLDExNSw0NiwKLSAgICAwLDEwMCwzLDAsMTI0LDAsMCwyMywxMjUsMCwwLDExMCwwLDAsMTE2LDQsCi0gICAgMCwxMjQsMCwwLDEwNiw1LDAsMTI0LDIsMCwxNDAsMCwwLDEwMCw0LDAsCi0gICAgMTE2LDAsMCwxMDYsNiwwLDEzMSwxLDEsMSwxMTAsMCwwLDEwMCw1LDAsCi0gICAgODMsNDAsNywwLDAsMCwxMTcsNjEsMCwwLDAsODAsMTE0LDEwNSwxMTAsMTE2LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDMyLDExNiwxMTEsMzIsCi0gICAgMTE1LDExNiwxMDAsMTAxLDExNCwxMTQsMzIsMTA1LDEwMiwzMiw0NSwxMTgsNDcsODAsODksODQsCi0gICAgNzIsNzksNzgsODYsNjksODIsNjYsNzksODMsNjksMzIsMTA1LDExNSwzMiwxMTYsMTE3LAotICAgIDExNCwxMTAsMTAxLDEwMCwzMiwxMTEsMTEwLDQ2LDExNywxLDAsMCwwLDM1LDExNyw3LAotICAgIDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDExNywyLDAsMCwwLDM1LAotICAgIDMyLDExNyw0LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw3OCw0MCwyLDAsMCwwLAotICAgIDExNywxLDAsMCwwLDM1LDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDMyLDQwLDcsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LAotICAgIDUsMCwwLDAsMTAyLDEwOCw5NywxMDMsMTE1LDExNyw3LDAsMCwwLDExOCwxMDEsCi0gICAgMTE0LDk4LDExMSwxMTUsMTAxLDExNywxMCwwLDAsMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LAotICAgIDExOSwxMDUsMTE2LDEwNCwxMTcsNSwwLDAsMCwxMTIsMTE0LDEwNSwxMTAsMTE2LDExNyw2LAotICAgIDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDYsMCwwLDAsMTE1LDExNiwKLSAgICAxMDAsMTAxLDExNCwxMTQsNDAsMywwLDAsMCwxMTcsNywwLDAsMCwxMDksMTAxLAotICAgIDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsOSwwLDAsMCwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LAotICAgIDEwNSwxMTYsMTIxLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsCi0gICAgMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDIyOCwxLDAsCi0gICAgMCwxMTUsOCwwLDAsMCwwLDIsMTgsMSwxNSwxLDEzLDEsMTE3LDE2LAotICAgIDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSwKLSAgICA5NywxMDMsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDMsMCwwLDAsMywwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwKLSAgICAxMDIsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LAorICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LAorICAgIDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LAorICAgIDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwxMjIsMzYsMTE1LDEyMSwKKyAgICAxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwKKyAgICAxMTAsMTAxLDEyMiwzNywxMjMsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDk4LDExMSwxMTYsMTE2LDExMSwKKyAgICAxMDksNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsCisgICAgMTIxLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE0LDEwMiwwLDAsMCwxMTQsMTAxLAorICAgIDAsMCwwLDEyMiwyOCwxMDEsMTIwLDExMiwxMDEsOTksMTE2LDEwMSwxMDAsMzIsMTExLDExMCwKKyAgICAxMDgsMTIxLDMyLDUwLDMyLDEwMCwxMTEsMTE2LDExNSwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsCisgICAgMTI1LDExNCw2OCwwLDAsMCw0MSwxMiwxMTQsNywwLDAsMCwxMTQsMTA4LDAsCisgICAgMCwwLDExNCwxMDksMCwwLDAsMTE0LDExMCwwLDAsMCwxMTQsMzgsMCwwLAorICAgIDAsMTE0LDExMSwwLDAsMCwyMTgsMTAsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwKKyAgICAxMTEsMTE0LDExNCw0NywwLDAsMCwxMTQsNzQsMCwwLDAsMTE0LDEwNywwLDAsCisgICAgMCwxMTQsMjgsMCwwLDAsMjE4LDE1LDgzLDc5LDg1LDgyLDY3LDY5LDk1LDgzLAorICAgIDg1LDcwLDcwLDczLDg4LDY5LDgzLDQxLDUsMTE0LDM1LDAsMCwwLDExNCwxMTQsCisgICAgMCwwLDAsOTAsMTYsMTEyLDEyMSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMDUsMTA4LAorICAgIDEwMSwxMTAsOTcsMTA5LDEwMSw5MCw3LDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSwxMTQsMTE1LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxNywxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwKKyAgICA5OSw5Nyw5OSwxMDQsMTAxLDE3MCwxLDAsMCwxMTUsMjQsMCwwLDAsMCw5LAorICAgIDE4LDEsMTUsMSwxOCwxLDE4LDEsMTIsMSwzLDEsMjQsMSwyMSwxLAorICAgIDMsMSwyMSwxLDE5LDEsMTE0LDEyMSwwLDAsMCw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsNSwwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTY0LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEwMCwxLAorICAgIDAsMTA3LDIsMCwxMTQsMjIsMCwxMDAsMiwwLDgzLDEyNCwwLDAsMTA2LDEsCisgICAgMCwxMDAsMywwLDEzMSwxLDAsOTIsMywwLDEyNSwxLDAsMTI1LDIsMCwKKyAgICAxMjUsMywwLDEyNCwxLDAsMTIsMTE1LDgxLDAsMTI0LDMsMCwxMDYsMiwwLAorICAgIDEzMSwwLDAsMTAwLDcsMCwxMDAsOCwwLDEzMywyLDAsMjUsMTAwLDYsMCwKKyAgICAxMDcsMywwLDExNCw4NSwwLDEyNCwwLDAsODMsMTIxLDE2LDAsMTE2LDMsMCwKKyAgICAxMjQsMCwwLDEzMSwxLDAsMTI1LDQsMCw4NywxMTAsNDAsMCw0LDExNiw0LAorICAgIDAsMTE2LDUsMCwxMDIsMiwwLDEwNywxMCwwLDExNCwxNDMsMCwxLDEsMSwKKyAgICAxMjQsMCwwLDEwMCwyLDAsMTAwLDksMCwxMzMsMiwwLDI1LDEyNSw0LDAsCisgICAgODksMTEwLDEsMCw4OCwxMTYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxMTQsMTYwLAorICAgIDAsMTI0LDQsMCw4MywxMjQsMCwwLDgzLDQxLDEwLDEyMiwxODgsNjcsMTExLDExMCwKKyAgICAxMTgsMTAxLDExNCwxMTYsMzIsOTcsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LAorICAgIDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCwxMDUsMTAyLDMyLDExMiwKKyAgICAxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwKKyAgICAxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAxLDEyMCwxMDUsCisgICAgMTE1LDExNiwxMTUsMzIsMTEyLDExNywxMTQsMTAxLDEwOCwxMjEsMzIsMTAyLDExMSwxMTQsMzIsOTgsCisgICAgOTcsOTksMTA3LDExOSw5NywxMTQsMTAwLDExNSw0NSw5OSwxMTEsMTA5LDExMiw5NywxMTYsMTA1LAorICAgIDk4LDEwNSwxMDgsMTA1LDExNiwxMjEsMzIsMTAyLDExMSwxMTQsMTAsMzIsMzIsMzIsMzIsODAsCisgICAgMTIxLDczLDEwOSwxMTIsMTExLDExNCwxMTYsOTUsNjksMTIwLDEwMSw5OSw2NywxMTEsMTAwLDEwMSwKKyAgICA3NywxMTEsMTAwLDExNywxMDgsMTAxLDg3LDEwNSwxMTYsMTA0LDcwLDEwNSwxMDgsMTAxLDExMCw5NywKKyAgICAxMDksMTAxLDExNSw0MCw0MSwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDY3LDMyLDY1LAorICAgIDgwLDczLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCw2OCwwLDAsMCw3OCwxMTQsCisgICAgMTAyLDAsMCwwLDIzMywzLDAsMCwwLDExNCwyOSwwLDAsMCw5MCwyLAorICAgIDExMiwxMjEsMjMzLDI1MywyNTUsMjU1LDI1NSwyMzMsMjU1LDI1NSwyNTUsMjU1LDExNCwxMjQsMCwwLAorICAgIDAsNDEsNywxMTQsMzEsMCwwLDAsMTE0LDMyLDAsMCwwLDIxOCw1LDEwOCwKKyAgICAxMTEsMTE5LDEwMSwxMTQsMTE0LDEyMSwwLDAsMCwxMTQsMTEwLDAsMCwwLDExNCwxMTksCisgICAgMCwwLDAsMTE0LDQ0LDAsMCwwLDQxLDUsMjE4LDEzLDk4LDEyMSwxMTYsMTAxLAorICAgIDk5LDExMSwxMDAsMTAxLDk1LDExMiw5NywxMTYsMTA0LDkwLDQsMTE0LDEwMSwxMTUsMTE2LDExNCwKKyAgICAzNiwwLDAsMCw5MCw5LDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDIxOCwKKyAgICAxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNSw5NSwxMDMsMTAxLAorICAgIDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsMTA4LDEwMSwxOTMsMSwwLDAsCisgICAgMTE1LDIwLDAsMCwwLDAsNywxOCwxLDQsMSwyNCwxLDM1LDEsNCwKKyAgICAxLDMsMSwxNiwxLDE5LDEsMjEsMSwxMTQsMTI4LDAsMCwwLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw2MCwwLDAsMCwxMjEsMTksMCwxMTYsMCwwLDEyNCwwLAorICAgIDAsMTMxLDEsMCwxMDYsMSwwLDEyNSwxLDAsODcsMTEwLDI0LDAsNCwxMTYsCisgICAgMiwwLDEwNywxMCwwLDExNCw0NSwwLDEsMSwxLDEwMCwxLDAsMTI1LDEsCisgICAgMCw4OSwxMTAsMSwwLDg4LDEyNCwxLDAsMTAwLDIsMCw3OSwxMjUsMSwwLAorICAgIDEyNCwxLDAsODMsNDEsMywxMjIsNTEsNjcsOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LAorICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMDEsMzIsMTEyLDEwMSwxMTQsMTA5LDEwNSwKKyAgICAxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwzMiwxMDIsMTExLDExNCwzMiw5NywzMiw5OCwxMjEsMTE2LAorICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTA1LDE4MiwxLDAsMCwKKyAgICAyMzMsMTI4LDAsMCwwLDQxLDMsMTE0LDM5LDAsMCwwLDExNCw0MSwwLDAsCisgICAgMCwxMTQsNDAsMCwwLDAsNDEsMiwxMTQsMzUsMCwwLDAsMTE0LDQyLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCwxMCw5NSw5OSw5NywxMDgsOTksOTUsMTA5LDExMSwxMDAsMTAxLDIxMiwxLDAsCisgICAgMCwxMTUsMTIsMCwwLDAsMCwyLDMsMSwxOSwxLDEzLDEsMTEsMywKKyAgICAxMCwxLDExNCwxMzAsMCwwLDAsMjE4LDksMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDUsCisgICAgMTE2LDEyMSwxMTQsMjksMCwwLDAsOTksMSwwLDAsMCwxLDAsMCwwLAorICAgIDMsMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsODEsMCwwLAorICAgIDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMDcsNSwwLAorICAgIDExNCw3NywwLDEyNCwwLDAsMTA2LDMsMCwxMDAsNiwwLDEzMSwxLDAsMTE1LAorICAgIDQ2LDAsMTAwLDMsMCwxMjQsMCwwLDIzLDEyNSwwLDAsMTEwLDAsMCwxMTYsCisgICAgNCwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMiwwLDE0MCwwLDAsMTAwLDQsCisgICAgMCwxMTYsMCwwLDEwNiw2LDAsMTMxLDEsMSwxLDExMCwwLDAsMTAwLDUsCisgICAgMCw4Myw0MSw3LDEyMiw2MSw4MCwxMTQsMTA1LDExMCwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMzIsMTE2LDExMSwzMiwxMTUsMTE2LDEwMCwxMDEsMTE0LAorICAgIDExNCwzMiwxMDUsMTAyLDMyLDQ1LDExOCw0Nyw4MCw4OSw4NCw3Miw3OSw3OCw4Niw2OSwKKyAgICA4Miw2Niw3OSw4Myw2OSwzMiwxMDUsMTE1LDMyLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLAorICAgIDExMSwxMTAsNDYsMjUwLDEsMzUsMjUwLDcsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTIyLAorICAgIDIsMzUsMzIsMTE0LDU0LDAsMCwwLDc4LDQxLDIsMTE0LDEzMiwwLDAsMCwKKyAgICAxMTQsMTMzLDAsMCwwLDQxLDcsMTE0LDcsMCwwLDAsMTE0LDEwMywwLDAsCisgICAgMCwyMTgsNywxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSwxMTQsOSwwLDAsMCwyMTgsCisgICAgNSwxMTIsMTE0LDEwNSwxMTAsMTE2LDExNCw0NywwLDAsMCwyMTgsNiwxMTUsMTE2LDEwMCwKKyAgICAxMDEsMTE0LDExNCw0MSwzLDIxOCw3LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNCwxMzEsCisgICAgMCwwLDAsMTE0LDk5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LAorICAgIDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwyMjQsMSwwLDAsMTE1LDgsMCwKKyAgICAwLDAsMCwyLDE4LDEsMTUsMSwxMywxLDExNCwxMzgsMCwwLDAsOTksCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICA2NCwwLDAsMCwxMTUsNTIsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLAorICAgIDAsMCw5MCwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywKKyAgICAwLDEwMCwzLDAsMTAwLDQsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLAorICAgIDEwMCw2LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDcsMCw4Myw0MSw4LDIxOCwKKyAgICAxMyw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywxMDAsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMTMsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsCisgICAgMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMSwyMTgsNSw5NSwxMTAsOTcsMTA5LAorICAgIDEwMSw0MSwyLDExNCw3NiwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc3LDAsMCwKKyAgICAwLDIzNCwxLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIyLDk1LDc3LAorICAgIDk3LDExMCw5NywxMDMsMTAxLDgyLDEwMSwxMDgsMTExLDk3LDEwMCw0Niw5NSw5NSwxMDUsMTEwLAorICAgIDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAorICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjUsMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDExNiwxLDAsMTA2LDIsMCwxMDcsNiwwLDEyNCwwLDAsCisgICAgOTUsMywwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSw0LDExNCwxNDAsMCwwLAorICAgIDAsMTE0LDcsMCwwLDAsMjE4LDcsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDIxOCwKKyAgICAxMCw5NSwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsNDEsMSwxMTQsNzYsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDksOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwyMzcsMSwwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwxLDEyMiwyMyw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSwKKyAgICA4MiwxMDEsMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMiwwLDAsCisgICAgMCw3MSwwLDAsMCwxMTUsODAsMCwwLDAsMTE2LDAsMCwxMDAsMSwwLAorICAgIDEwMCwyLDAsMTMyLDAsMCwxMjQsMSwwLDY4LDEzMSwxLDAsMTMxLDEsMCwKKyAgICAxMTQsNzYsMCwxMjQsMCwwLDEwNiwxLDAsMTIsMTE0LDc2LDAsMTIxLDE3LDAsCisgICAgMTE2LDIsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCw2MSw4NywxMTMsNzYsCisgICAgMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDcyLDAsMSwxLDEsODksMTEzLAorICAgIDc2LDAsODgsMTEwLDAsMCwxMDAsMCwwLDgzLDQxLDMsNzgsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwxMTUsMCwKKyAgICAwLDAsMTE1LDI3LDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwxMjUsMSwwLAorICAgIDEyNCwxLDAsMTAwLDAsMCwxMDcsOSwwLDg2LDEsMTEzLDMsMCwxMDAsMCwKKyAgICAwLDgzLDQxLDEsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLAorICAgIDAsOTAsMyw5NywxMTQsMTAzLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDI1MCw5LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwKKyAgICAyNDEsMSwwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiw0MSw5NSw3Nyw5NywKKyAgICAxMTAsOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTAxLDEyMCwxMDUsCisgICAgMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLAorICAgIDExMCwxMDEsMTIwLDExMiwxMTQsNjIsNDEsNiwyMTgsMyw5NywxMTAsMTIxLDExNCwxNDIsMCwKKyAgICAwLDAsMTE0LDcsMCwwLDAsMTE0LDE0MSwwLDAsMCwxMTQsMTQwLDAsMCwKKyAgICAwLDExNCw5MiwwLDAsMCw0MSwyLDExNCw3NiwwLDAsMCwxMTQsOTksMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDgsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDI0MCwxLDAsMCwxMTUsCisgICAgMTAsMCwwLDAsMCwxLDM1LDEsMywxLDE3LDEsMTMsMSwxMjIsMjIsCisgICAgOTUsNzcsOTcsMTEwLDk3LDEwMywxMDEsODIsMTAxLDEwOCwxMTEsOTcsMTAwLDQ2LDk1LDk1LAorICAgIDEwMSwxMjAsMTA1LDExNiw5NSw5NSw3OCw0MSw2LDExNCw1NywwLDAsMCwxMTQsNTYsCisgICAgMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw3NywwLDAsMCwxMTQsMTQzLDAsCisgICAgMCwwLDExNCwxNDYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEzOSwwLDAsMCwKKyAgICAyMzIsMSwwLDAsMTE1LDYsMCwwLDAsMTIsMiwxMiwzLDEyLDMsMTE0LAorICAgIDEzOSwwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCw1LDAsMCwwLDAsMCwwLDAsMTE1LDgyLDAsMCwwLDEwMSwwLAorICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLAorICAgIDEwMCwyLDAsMTAwLDMsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDQsMCwxMDAsCisgICAgNSwwLDEzNCwwLDEsOTAsNCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsNiwKKyAgICAwLDEwMCw3LDAsMTM0LDAsMCw5MCw1LDAsMTM1LDAsMCwxMDIsMSwwLAorICAgIDEwMCw4LDAsMTAwLDksMCwxMzQsMCwwLDkwLDYsMCwxMzUsMCwwLDgzLAorICAgIDQxLDEwLDIxOCwxNCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc3LDk3LDExMCw5NywxMDMsCisgICAgMTAxLDExNCwxMjIsMTIyLDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDMyLDEwOSw5NywxMTAsOTcsCisgICAgMTAzLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTYsMTExLDMyLAorICAgIDk4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDY4LDExMSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTQsMTExLDExMiwxMDEsMTE0LDMyLAorICAgIDExNywxMTAsMTA4LDExMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNSwKKyAgICAxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMTcsMTEyLDExMSwxMTAsMzIsCisgICAgMTAyLDk3LDEwNSwxMDgsMTE3LDExNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMjE4LDEwLAorICAgIDExNCwxMDEsMTE1LDEwMSwxMTYsOTUsMTEwLDk3LDEwOSwxMDEsODQsOTksMiwwLDAsMCwKKyAgICAxLDAsMCwwLDMsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLAorICAgIDExNSwyOSwwLDAsMCwxMTYsMCwwLDEzMSwwLDAsMTA2LDEsMCwxMjQsMSwKKyAgICAwLDEzMSwxLDAsMSwxMjQsMiwwLDEyNCwwLDAsOTUsMiwwLDEwMCwxLAorICAgIDAsODMsNDEsMiwxMjIsMTgzLDgwLDExNCwxMDEsMTEyLDk3LDExNCwxMDEsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsOTksMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMzIsMTA5LDk3LDExMCw5NywxMDMsMTAxLAorICAgIDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLAorICAgIDExNCwxMDEsMTE1LDEwMSwxMTYsOTUsMTEwLDk3LDEwOSwxMDEsMzIsOTcsMTE0LDEwMywxMTcsMTA5LAorICAgIDEwMSwxMTAsMTE2LDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMTUsMzIsMTE5LDEwNCwKKyAgICAxMDEsMTE2LDEwNCwxMDEsMTE0LDMyLDExNiwxMTEsMzIsMTE3LDExMCw5OSwxMTEsMTEwLDEwMCwxMDUsCisgICAgMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwxMDgsMTIxLDMyLDExNCwxMDEsMTE1LDEwMSwxMTYsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsOTUsOTUsMTEwLDk3LDEwOSwKKyAgICAxMDEsOTUsOTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDMyLDEwNSwxMDIsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMDIsCisgICAgMTExLDExNywxMTAsMTAwLDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLDk3LDMyLDExNCwxMDEsMTA4LAorICAgIDExMSw5NywxMDAsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMywKKyAgICAyMTgsNSwxMTUsMTE3LDExMiwxMDEsMTE0LDExNCw3NywwLDAsMCwyMTgsMTEsOTUsMTE0LAorICAgIDEwMSwxMTUsMTAxLDExNiw5NSwxMTAsOTcsMTA5LDEwMSw0MSwzLDExNCw3NiwwLDAsMCwKKyAgICAxMTQsNzIsMCwwLDAsMTE0LDE0OCwwLDAsMCw0MSwxLDIxOCw5LDk1LDk1LAorICAgIDk5LDEwOCw5NywxMTUsMTE1LDk1LDk1LDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw3NywwLDAsMCwxLDIsMCwwLDExNSw0LDAsMCwwLDAsCisgICAgNiwxNiwxLDEyMiwyMyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc3LDk3LDExMCw5NywKKyAgICAxMDMsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDEsMCwwLDAsMTEsMCwwLDAsMywwLDAsCisgICAgMCwxMTUsMTYzLDAsMCwwLDExNiwwLDAsMTMxLDAsMCwxMDYsMSwwLDEzMSwKKyAgICAwLDAsMSwxMTYsMiwwLDEwNiwzLDAsMTA2LDQsMCwxMjQsMCwwLDEwNiwKKyAgICA1LDAsMTMxLDEsMCwxMjQsMCwwLDk1LDYsMCwxMjQsMCwwLDEwNiw3LAorICAgIDAsMTE1LDEwNCwwLDExNiw4LDAsMTE2LDksMCwxMzEsMSwwLDEyNCwwLDAsCisgICAgMTA2LDUsMCwxMzEsMSwwLDEyNCwwLDAsOTUsNiwwLDEwMCwxLDAsMTI0LAorICAgIDAsMCwxMDYsNiwwLDk1LDEwLDAsMTI0LDAsMCwxMDYsNiwwLDExNiwyLAorICAgIDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw1LDAsNjAsMTEwLDUyLDAsMTI0LDAsCisgICAgMCwxMDYsMTEsMCwxMTQsMTU2LDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsNSwwLAorICAgIDEyNCwwLDAsMTA2LDYsMCw5NSwxMiwwLDg3LDExMywxNTYsMCw0LDExNiwxMywKKyAgICAwLDEwNywxMCwwLDExNCwxNTIsMCwxLDEsMSw4OSwxMTMsMTU2LDAsODgsMTEwLAorICAgIDAsMCwxMjQsMCwwLDEwNiw2LDAsODMsNDEsMiw3OCw4NCw0MSwxNCwxMTQsCisgICAgMTQ5LDAsMCwwLDExNCwxNDMsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDE0MSwKKyAgICAwLDAsMCwxMTQsODAsMCwwLDAsMTE0LDE0MCwwLDAsMCwyMTgsNyw5NSwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsMTQyLDAsMCwwLDIxOCw0LDExNiwxMjEsMTEyLAorICAgIDEwMSwxMTQsNDksMCwwLDAsMjE4LDE2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsCisgICAgMTA4LDEwNSwxMjIsMTA1LDExMCwxMDMsOTUsOTUsMTE0LDE1MCwwLDAsMCwxMTQsNTcsMCwKKyAgICAwLDAsMjE4LDE0LDY1LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw2OSwxMTQsMTE0LAorICAgIDExMSwxMTQsNDEsMSwxMTQsNzYsMCwwLDAsNDEsMSwxMTQsMTUxLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNDMsMCwwLDAsMTAsCisgICAgMiwwLDAsMTE1LDI0LDAsMCwwLDAsMSwxMywxLDI0LDEsOSw0LAorICAgIDI0LDMsMTIsMSwyMiwxLDksMSwzLDEsMTksMSwxMywxLDgsMSwKKyAgICAxMjIsMjQsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3Nyw5NywxMTAsOTcsMTAzLDEwMSwxMTQsCisgICAgNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDcsMCwwLDAsMTE1LAorICAgIDM4LDAsMCwwLDEwMCwxLDAsMTI0LDAsMCwxMDYsMCwwLDk1LDEsMCwKKyAgICAxMjQsMCwwLDk2LDAsMCwxMTYsMiwwLDEzMSwwLDAsMTA2LDMsMCwxMjQsCisgICAgMSwwLDE0MCwwLDAsMSwxMDAsMCwwLDgzLDQxLDIsNzgsNzAsNDEsNCwKKyAgICAxMTQsMTUyLDAsMCwwLDExNCwxNTQsMCwwLDAsMTE0LDE0OSwwLDAsMCwxMTQsCisgICAgMTQ2LDAsMCwwLDQxLDIsMTE0LDc2LDAsMCwwLDExNCw5OSwwLDAsMCwKKyAgICA0MSwxLDExNCwxNTEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDE0NiwwLDAsMCwyOSwyLDAsMCwxMTUsNiwwLDAsMCwwLAorICAgIDEsMTIsMSw2LDEsMTIyLDIzLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzcsOTcsCisgICAgMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw0MSw3LAorICAgIDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwKKyAgICA1OSwwLDAsMCwxMTQsNzcsMCwwLDAsMTE0LDE0MywwLDAsMCwxMTQsMTQ2LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LAorICAgIDE1MSwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTQ3LDAsMCwwLDI0OSwxLAorICAgIDAsMCwxMTUsOCwwLDAsMCwxMiw2LDYsMiwyNCw5LDE4LDE5LDExNCwKKyAgICAxNDcsMCwwLDAsMTE0LDE0OCwwLDAsMCw4NCw5OSwxLDAsMCwwLDEsCisgICAgMCwwLDAsMiwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAxNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTAwLDEsMCwxMjQsMSwwLAorICAgIDEzMSwxLDEsODMsNDEsMiwxMjIsMTM4LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsCisgICAgMzIsOTksMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMzIsMTA5LDk3LDExMCw5NywxMDMsMTAxLDExNCwKKyAgICAzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTEyLDExNCwxMTEsMTE4LDEwNSwxMDAsMTAxLDExNSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwKKyAgICAxMTYsMzIsMTE2LDExMSwzMiwxMDgsMTExLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA3MywxMDIsMzIsMTE0LDEwMSwxMTUsMTAxLDExNiw5NSwxMTAsOTcsMTA5LDEwMSwzMiwxMDUsMTE1LAorICAgIDMyLDExNiwxMTQsMTE3LDEwMSw0NCwzMiwxMTQsMTAxLDExNSwxMDEsMTE2LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiw5NSw5NSwxMTAsOTcsMTA5LDEwMSwKKyAgICA5NSw5NSwzMiwxMTYsMTExLDMyLDM5LDExMCw5NywxMDksMTAxLDM5LDQ2LDEwLDMyLDMyLAorICAgIDMyLDMyLDExNCwxNDgsMCwwLDAsNDEsMSwxMTQsMTQ3LDAsMCwwLDQxLDIsCisgICAgMTE0LDcyLDAsMCwwLDExNCwxNDgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE0LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDk1LDExNiwxMTEsOTUsMTA4LDExMSw5NywxMDAsMzUsMiwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCw2LDExNCwxNTYsMCwwLDAsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDQsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDEwMiwKKyAgICAwLDAsMCwxMjQsMSwwLDEwNiwwLDAsMTI1LDIsMCwxMjEsMTksMCwxMjQsCisgICAgMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsODcsMTEwLAorICAgIDE4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0OCwwLDEsMSwxLDg5LAorICAgIDExMCw1MCwwLDg4LDEyNCwzLDAsMTE0LDc2LDAsMTI0LDIsMCwxMjQsMSwwLAorICAgIDk1LDMsMCwxMDMsMCwwLDEyNCwxLDAsOTUsNCwwLDExMCwyMiwwLDEyNCwKKyAgICAyLDAsMTA2LDUsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjQsCisgICAgMSwwLDk1LDMsMCwxMDAsMywwLDgzLDQxLDQsMTIyLDY4LDgzLDEwMSwxMTYsCisgICAgMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDk3LDExMCwxMDAsCisgICAgMzIsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMzIsOTgsOTcsMTE1LDEwMSwxMDAsMzIsCisgICAgMTExLDExMCwzMiwxMTksMTA0LDk3LDExNiwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwKKyAgICAxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDQxLDMyLDExNSw5NywxMjEsMTE1LAorICAgIDQ2LDExNCwxMDIsMCwwLDAsMTE0LDY4LDAsMCwwLDc4LDQxLDYsMTE0LDU3LAorICAgIDAsMCwwLDIxOCwxMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwyMTgsCisgICAgMTEsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMjE4LDExLDk1LDk1LAorICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwyMTgsOCw5NSw5NSwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSw5NSwxMTQsMzIsMCwwLDAsNDEsNCwyMTgsNiwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDIxOCw2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCw3MiwwLDAsMCwxMTQsCisgICAgMTU3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxOSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywKKyAgICAxMDMsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSw0NCwyLDAsMCwxMTUsMTgsMCwwLAorICAgIDAsMCwyLDksMSwzLDEsMTksMSwxMywxLDUsMiw2LDEsOSwKKyAgICAxLDEyLDIsMTE0LDE2MywwLDAsMCw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsMTAwLDAsCisgICAgMCwwLDEyMSwyNSwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwxLAorICAgIDAsMTMxLDEsMCwxMjQsMSwwLDk1LDIsMCw4NywxMTAsMTgsMCw0LDExNiwKKyAgICAzLDAsMTA3LDEwLDAsMTE0LDQ1LDAsMSwxLDEsODksMTEwLDUxLDAsODgsCisgICAgMTI0LDEsMCwxMDYsMSwwLDEyNCwxLDAsMTA2LDQsMCwxMDcsMiwwLDExNCwKKyAgICA5NiwwLDEyNCwxLDAsMTA2LDUsMCwxMDYsNiwwLDExNiw3LDAsMTI0LDEsCisgICAgMCwxMDYsMiwwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMzEsMSwwLDEsMTEwLAorICAgIDAsMCwxMDAsMiwwLDgzLDQxLDMsMTIyLDU3LDgzLDEwMSwxMTYsMzIsOTUsOTUsCisgICAgMTAyLDEwNSwxMDgsMTAxLDk1LDk1LDMyLDk3LDExMCwxMDAsMzIsOTUsOTUsMTEyLDk3LDExNiwKKyAgICAxMDQsOTUsOTUsMzIsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMDgsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwKKyAgICA0MCw0MSw0NiwxMTQsNjgsMCwwLDAsNzgsNDEsOCwyMTgsMTIsMTAzLDEwMSwxMTYsCisgICAgOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNCw1NywwLDAsMCwyMTgsOCwKKyAgICA5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTUsMTE0LDE1OCwwLDAsMCwxMTQsMTU5LDAsCisgICAgMCwwLDExNCwxNjAsMCwwLDAsMjE4LDYsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxMTQsCisgICAgMzgsMCwwLDAsNDEsMiwxMTQsMTYxLDAsMCwwLDExNCwxNjIsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDE2LDk1LDEwNSwxMTAsMTA1LDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTcsMTE2LDExNiwxMTQsCisgICAgMTE1LDU5LDIsMCwwLDExNSwxMiwwLDAsMCwwLDIsMywxLDI1LDEsCisgICAgMTMsMSw1LDIsMTgsMSwxMTQsMTY3LDAsMCwwLDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwKKyAgICAxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsMTAwLDIsCisgICAgMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwwLDAsCisgICAgMTMxLDIsMCwxLDEyNCwxLDAsODMsNDEsMywxMjIsMzksODMsMTAxLDExNiwzMiwKKyAgICA5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTExLDExMCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDQ2LDk5LDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAorICAgIDQsMCwwLDAsMzEsMCwwLDAsMTE1LDEwMSwwLDAsMCwxMzYsMCwwLAorICAgIDEyNCwwLDAsMTI0LDEsMCwxNDIsMCwwLDEyNSwyLDAsMTE2LDAsMCwxMjQsCisgICAgMiwwLDEwMCwxLDAsMTAwLDAsMCwxMzEsMywwLDEwMCwwLDAsMTA3LDgsCisgICAgMCwxMTQsOTcsMCwxMjQsMiwwLDEwNiwxLDAsMTI0LDIsMCw5NSwyLDAsCisgICAgMTE2LDMsMCwxMjQsMiwwLDEwMCwyLDAsMTMxLDIsMCwxMTUsOTcsMCwxMjQsCisgICAgMiwwLDEwNiwyLDAsMTA2LDQsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDQsCisgICAgMCwyNSwxMjQsMiwwLDk1LDIsMCwxMTMsOTcsMCwxMTAsMCwwLDEyNCwyLAorICAgIDAsODMsNDEsNSw3OCwxMTQsMTU5LDAsMCwwLDExNCwxNjAsMCwwLDAsMTE0LAorICAgIDEwMiwwLDAsMCwxMTQsNjgsMCwwLDAsNDEsNSwxMTQsNjIsMCwwLDAsCisgICAgMTE0LDU3LDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDYwLDAsMCwwLDExNCwKKyAgICAzMiwwLDAsMCw0MSwzLDExNCw5OSwwLDAsMCwyMTgsNiwxMDcsMTE5LDk3LAorICAgIDExNCwxMDMsMTE1LDExNCwxNjIsMCwwLDAsNDEsMSwyMTgsMywxMDIsMTIwLDExMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTksMTE1LDEwMSwxMTYsOTUsMTEyLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDcyLDIsCisgICAgMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwyNCwxLDEyLDEsMTUsCisgICAgMSwzMSwxLDEyMiw0MCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCisgICAgNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExNSwxMDEsMTE2LDk1LDExMiw5NywKKyAgICA5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MSwxLDExNCwKKyAgICA2NSwwLDAsMCw0MSwyLDExNCwxNjksMCwwLDAsMTE0LDE3MCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCw0MSwxLDExNCwxNjksMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDExLDExNSwxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw3MCwyLAorICAgIDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNywxMywxLDExNCwxNzEsMCwKKyAgICAwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywKKyAgICAwLDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLDEwMiwKKyAgICAxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsMCwKKyAgICAwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MSwKKyAgICAzLDEyMiwzOCw4MywxMDEsMTE2LDMyLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsCisgICAgOTUsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsCisgICAgMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk5LDEsMCwwLDAsMCwwLAorICAgIDAsMCw0LDAsMCwwLDQsMCwwLDAsMzEsMCwwLDAsMTE1LDU4LAorICAgIDAsMCwwLDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTQyLAorICAgIDEsMCwxMjUsMywwLDExNiwwLDAsMTI0LDMsMCwxMDAsMSwwLDEwMCwwLAorICAgIDAsMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDU0LDAsMTI0LDAsMCwKKyAgICAxMjQsMywwLDk1LDEsMCwxMTAsMCwwLDEyNCwzLDAsODMsNDEsMiw3OCwKKyAgICAyMTgsMTAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSw0MSwyLDExNCw2MiwKKyAgICAwLDAsMCwxMTQsMTcyLDAsMCwwLDQxLDQsMTE0LDc2LDAsMCwwLDExNCwKKyAgICA5OSwwLDAsMCwxMTQsMTY4LDAsMCwwLDExNCwxNjIsMCwwLDAsNDEsMSwKKyAgICAxMTQsMTY5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICAxOCwxMTUsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLAorICAgIDExMiwxMDEsMTE0LDg1LDIsMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLAorICAgIDI0LDEsMTIsMSwxMjIsMzgsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MSwxLDExNCw2NSwKKyAgICAwLDAsMCw0MSwyLDExNCwxNjksMCwwLDAsMTE0LDE3MywwLDAsMCwxMTQsCisgICAgNCwwLDAsMCw0MSwxLDExNCwxNjksMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDEwLDExNSwxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsODMsMiwwLDAsCisgICAgMTE1LDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwxMTQsMTc0LDAsMCwwLAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLAorICAgIDAsMywwLDAsMCwxMTUsMzgsMCwwLDAsMTAwLDEsMCwxMzUsMCwwLAorICAgIDEwMiwxLDAsMTAwLDIsMCwxMDAsMywwLDEzNCwxLDAsMTI1LDEsMCwxMTYsCiAgICAgMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywzOSwwLDAsMCw4MywxMDEsMTE2LDMyLDk1LDk1LAotICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNDYsOTksMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNCwwLAotICAgIDAsMCwzMSwwLDAsMCwxMTUsMTAxLDAsMCwwLDEzNiwwLDAsMTI0LDAsCi0gICAgMCwxMjQsMSwwLDE0MiwwLDAsMTI1LDIsMCwxMTYsMCwwLDEyNCwyLDAsCi0gICAgMTAwLDEsMCwxMDAsMCwwLDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwKLSAgICA5NywwLDEyNCwyLDAsMTA2LDIsMCwxMjQsMiwwLDk1LDMsMCwxMTYsNCwKLSAgICAwLDEyNCwyLDAsMTAwLDIsMCwxMzEsMiwwLDExNSw5NywwLDEyNCwyLDAsCi0gICAgMTA2LDMsMCwxMDYsNSwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsNCwwLDI1LAotICAgIDEyNCwyLDAsOTUsMywwLDExMyw5NywwLDExMCwwLDAsMTI0LDIsMCw4MywKLSAgICA0MCw1LDAsMCwwLDc4LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsOTUsMTE3LDEsMCwwLDAsNDYsMTA1LDAsMCwwLDAsNDAsNiwKLSAgICAwLDAsMCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNywKLSAgICA5NywxMDMsMTAxLDk1LDk1LDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwKLSAgICAxMTQsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLAotICAgIDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LDYsCi0gICAgMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSwxMTcsNiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsCi0gICAgMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsCi0gICAgMjM4LDEsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwyNCwxLDEyLAotICAgIDEsMTUsMSwzMSwxLDExNyw0MCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExNSwKLSAgICAxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsCi0gICAgMTAxLDExNCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDE5LAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksCi0gICAgMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMTUsCi0gICAgMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMjM2LDEsMCwwLDExNSw2LAotICAgIDAsMCwwLDAsMiwxOCw3LDEzLDEsMTE3LDExLDAsMCwwLDExNSwxMDEsCi0gICAgMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwxLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LAotICAgIDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LAotICAgIDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLAotICAgIDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsMTE3LDM4LDAsMCwwLAotICAgIDgzLDEwMSwxMTYsMzIsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwzMiwxMTEsCi0gICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTksMSwwLDAsMCwwLDAsMCwwLDQsCi0gICAgMCwwLDAsNCwwLDAsMCwzMSwwLDAsMCwxMTUsNDksMCwwLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxNDIsMSwwLDEyNSwKLSAgICAzLDAsMTE2LDAsMCwxMjQsMywwLDEwMCwxLDAsMTMxLDIsMCwxMTUsNDUsCi0gICAgMCwxMjQsMCwwLDEyNCwzLDAsOTUsMSwwLDExMCwwLDAsMTI0LDMsMCwKLSAgICA4Myw0MCwyLDAsMCwwLDc4LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDcsMCwwLDAsCi0gICAgMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSw5NSw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLAotICAgIDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNiwwLAotICAgIDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMjUxLDEsCi0gICAgMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLDE1LDEsMTIsMSwxMTcsCi0gICAgMzgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0Niw2MCwKLSAgICAxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwxLDAsMCwwLDExNywKLSAgICA1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDMsCi0gICAgMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLAotICAgIDAsMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICAyNDksMSwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwxMTcsCi0gICAgMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsCi0gICAgMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwKLSAgICAwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwKLSAgICAxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsCi0gICAgMTE3LDQyLDMsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwKLSAgICAxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwxMTUsMTAxLDEwOCwxMDEsOTksMTE2LDEwNSwKLSAgICAxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTQsMTExLDExMiwxMDEsMTE0LDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LAotICAgIDk3LDExNiwxMDEsMTAwLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDUsMTE1LAotICAgIDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LAotICAgIDEwMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDExMCw5NywxMDksMTAxLDQ2LDMyLDg0LDEwNCwxMDEsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwKLSAgICAxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwKLSAgICAxMTUsMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNSwxMjEsCi0gICAgMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDUsMTAyLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwNSwxMTYsMzIsOTcsMTA4LDExNCwxMDEsOTcsMTAwLDEyMSwzMiwxMDEsMTIwLDEwNSwxMTUsCi0gICAgMTE2LDExNSwzMiwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwxMTksNDQsMzIsMTE2LDEwNCwxMDEsCi0gICAgMTEwLDMyLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDEwLDMyLDMyLDMyLDMyLDEwNSwKLSAgICAxMTUsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsMTE1LDExNiwzMiwKLSAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDksMTAxLDExNiwxMDQsMTExLDEwMCw0NCwzMiw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDk1LDk1LDMyLDEwNSwxMTUsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDEwOCwKLSAgICAxMDIsNDQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwxMTUsMTAxLDExNiwzMiw5Nyw5OSwKLSAgICA5OSwxMTEsMTE0LDEwMCwxMDUsMTEwLDEwMywxMDgsMTIxLDMyLDQwLDEwNSwxMDIsMzIsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDQxLDMyLAotICAgIDEwNSwxMTUsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDQxLDMyLDExOSwxMDUsMTA4LDEwOCwKLSAgICAzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwMiwxMTEsCi0gICAgMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTUsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwKLSAgICAxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywxMTYsMTAxLDEwMCwKLSAgICAzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsNDAsMTA1LDEwMiwzMiwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDAsNDEsMzIsCi0gICAgMTAwLDExMSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsMTE2LDMyLDExOSwxMTEsMTE0LAotICAgIDEwNywzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMDUsMTE2LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMzIsCi0gICAgMTEyLDExMSwxMTUsMTE2LDQ1LDEwOCwxMTEsOTcsMTAwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDczLDEwMiwzMiw5NywxMTAsMzIsMTAxLDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsOTksMTE0LDEwMSwKLSAgICA5NywxMTYsMTAxLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwKLSAgICAxMDUsMTE2LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMTE1LDExNyw5OCwxMTUsMTAxLDExMywKLSAgICAxMTcsMTAxLDExMCwxMTYsMTA4LDEyMSwzMiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMzIsMTAyLAotICAgIDExNCwxMTEsMTA5LDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywKLSAgICAxMTYsMTExLDExNCwzMiw5NywxMTUsMTE1LDExNywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDEwMSwxMDAsMzIsMTAyLAotICAgIDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiw5NywxMDcsMTAxLDExNSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiw5NywxMTUsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSw5OSwxMTEsMTEwLDEwMCwzMiwKLSAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMjUsMCwwLDAsCi0gICAgMzEsMCwwLDAsMTE1LDI1NCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LAotICAgIDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDQsMCwxMjQsNCwwLDEwMCwwLAotICAgIDAsMTA3LDksMCwxMjUsNSwwLDEyNCw1LDAsMTE1LDE2OCwwLDExNiw0LDAsCi0gICAgMTI0LDEsMCwxMzEsMSwwLDEyNSw0LDAsMTAwLDMsMCwxMjQsNCwwLDk1LAotICAgIDYsMCwxMjQsNCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDYwLDEyNCwKLSAgICAwLDAsMTI0LDQsMCw5NSw3LDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsOCwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsNiwwLDg3LDExMCwyNCwwLDQsMTE2LAotICAgIDksMCwxMTYsMTAsMCwxMDIsMiwwLDEwNywxMCwwLDExNCwxMjQsMCwxLDEsCi0gICAgMSw4OSwxMTMsMTc3LDAsODgsMTI0LDYsMCwxMTQsMTQzLDAsMTI0LDEsMCwxMjQsCi0gICAgNCwwLDk1LDExLDAsMTEzLDE3NywwLDEyNCwxLDAsMTA2LDEyLDAsMTAwLDEsCi0gICAgMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI0LDQsMCw5NSwxMSwwLDExMCw5LAotICAgIDAsMTAwLDMsMCwxMjQsNCwwLDk1LDYsMCwxMjIsNjAsMCwxMjEsMjMsMCwKLSAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDQsMCwxMjQsMiwwLDEyNCwzLDAsMTQyLAotICAgIDIsMCw4Myw4NywxMTAsMzAsMCwxLDEsMSwxMjQsNSwwLDExNSwyMjgsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCw2MSwxMTAsMCwwLDEzMCwwLDAsCi0gICAgODksMTEwLDEsMCw4OCw4NywxMDAsMCwwLDEwMCw0LDAsMTI0LDQsMCw5NSwKLSAgICA2LDAsODgsMTAwLDAsMCw4Myw0MCw1LDAsMCwwLDc4LDExNywxLDAsCi0gICAgMCwwLDQ2LDEwNSwwLDAsMCwwLDg0LDcwLDQwLDE0LDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLDAsMCwKLSAgICA3OCwxMTEsMTEwLDEwMSwxMTcsMTAsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTA1LDExMCwxMDMsOTUsCi0gICAgOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywKLSAgICAxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsCi0gICAgMTQsMCwwLDAsNjUsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDk1LDk1LDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLAotICAgIDExMCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSw0MCw3LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LAotICAgIDYsMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSwxMTcsNiwwLDAsMCwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOSwwLDAsMCwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LAotICAgIDExMSw5NywxMDAsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsMTEyLDEwMSwxMTQsMjIsMiwwLDAsMTE1LDQ0LDAsMCwwLDAsMSwxOCwKLSAgICAxLDEyLDEsNiw0LDEyLDMsOSwxLDEzLDEsOSwxLDMsMSwxOSwKLSAgICAxLDE5LDEsNSwyLDYsMSwxMiwyLDI1LDIsOSwxLDYsMiwyMywKLSAgICAxLDMsMSw2LDEsMTMsMSwxMiwyLDExNyw1MiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAotICAgIDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwKLSAgICAxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjUsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwKLSAgICAwLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwKLSAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQsMiwwLDAsMTE1LDYsMCwwLDAsMCwKLSAgICAxOCwxOCwzMywxMywxLDExNywxNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwyLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwKLSAgICAxMTUsMzgsMCwwLDAsMTAwLDMsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEzNCwxLDAsMTI1LDEsMCwxMTYsMSwwLDEyNCwxLDAsCi0gICAgMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCw0LDAsMCwwLAotICAgIDExNywyNTIsMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LAotICAgIDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTE0LAotICAgIDEwMSwxMTMsMTE3LDEwMSwxMTUsMTE2LDEwMSwxMDAsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDk3LDExMCwzMiwxMDQsOTcsMTEwLDEwMCwKLSAgICAxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsCi0gICAgMTE1LDExNiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsNDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDQxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwzMiw5NSwKLSAgICAxMTAsOTcsMTA5LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAotICAgIDEwMSw5OSwxMTEsMTEwLDEwMCwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LAotICAgIDExNSwxMCwzMiwzMiwzMiwzMiw5OSwxMTEsMTA5LDExMiw5NywxMTQsMTAxLDEwMCwzMiw5NywKLSAgICAxMDMsOTcsMTA1LDExMCwxMTUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKLSAgICAxMTEsMTA5LDExMiw5NywxMTQsMTA1LDExNSwxMTEsMTEwLDMyLDEwMiw5NywxMDUsMTA4LDExNSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMTAsMzIsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDUsMCwKKyAgICA0MSw0LDEyMiwyNTIsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwKKyAgICAzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTE0LDEwMSwKKyAgICAxMTMsMTE3LDEwMSwxMTUsMTE2LDEwMSwxMDAsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDk3LDExMCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsCisgICAgMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsMTE1LAorICAgIDExNiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsNDAsMTE1LDEwMSwxMDgsMTAyLAorICAgIDQxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwzMiw5NSwxMTAsCisgICAgOTcsMTA5LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSwKKyAgICA5OSwxMTEsMTEwLDEwMCwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwKKyAgICAxMCwzMiwzMiwzMiwzMiw5OSwxMTEsMTA5LDExMiw5NywxMTQsMTAxLDEwMCwzMiw5NywxMDMsCisgICAgOTcsMTA1LDExMCwxMTUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMTEsCisgICAgMTA5LDExMiw5NywxMTQsMTA1LDExNSwxMTEsMTEwLDMyLDEwMiw5NywxMDUsMTA4LDExNSwzMiwxMTYsCisgICAgMTA0LDEwMSwxMTAsMzIsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMzIsCisgICAgMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDc4LDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDUsMCwKICAgICAwLDAsMzEsMCwwLDAsMTE1LDgzLDAsMCwwLDEyNCwxLDAsMTAwLDAsCi0gICAgMCwxMDcsOCwwLDExNCwyNCwwLDEyNCwwLDAsMTA2LDEsMCwxMjUsMSwwLAotICAgIDExMCw0MCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwNywzLDAsMTE0LAotICAgIDY0LDAsMTE2LDIsMCwxMDAsMSwwLDEyNCwxLDAsMjIsMTAwLDIsMCwxMjQsCisgICAgMCwxMDcsOCwwLDExNCwyNCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwwLAorICAgIDExMCw0MCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNywzLDAsMTE0LAorICAgIDY0LDAsMTE2LDEsMCwxMDAsMSwwLDEyNCwxLDAsMjIsMTAwLDIsMCwxMjQsCiAgICAgMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsCi0gICAgMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxNDIsMiwwLDgzLDQwLDMsCi0gICAgMCwwLDAsNzgsMTE3LDIzLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCi0gICAgOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMzcsMTE1LAotICAgIDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDMsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LAotICAgIDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LAotICAgIDExNyw2LDAsMCwwLDEwNywxMTksOTcsMTE0LDEwMywxMTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsNiwwLDAsMCwxMDksMTAxLDExNiwxMDQsMTExLDEwMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTksMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNjcsMiwwLDAsMTE1LDEwLAotICAgIDAsMCwwLDAsMSwxMiwxLDEyLDEsMTUsMSwyNSwxLDExNyw0MCwwLAotICAgIDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSw0Niw2MCwxMDgsCi0gICAgMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNzgsNDAsMiwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLDAsMCw5NSwxMTksCi0gICAgMTE0LDk3LDExMiw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwOSwxMDEsMTE2LAotICAgIDEwNCwxMTEsMTAwLDExNywxOSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwwLAotICAgIDQwLDEsMCwwLDAsMTE3LDYsMCwwLDAsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw1OSwyLDAsMCwxMTUsNiwwLDAsMCwwLDgsMjEsNiwxMywKLSAgICAxLDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsCi0gICAgMCwwLDMsMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsCi0gICAgMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsCi0gICAgMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsCi0gICAgMCwwLDAsMTE3LDQ5LDAsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsCi0gICAgOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDIsMCwwLDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsNTgsCi0gICAgMCwwLDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDcsMCwxMTQsCi0gICAgNDUsMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLAotICAgIDAsMTAwLDIsMCwxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDAsMywwLAotICAgIDAsMCw3OCwxMTcsMjcsMCwwLDAsMTIzLDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsCi0gICAgMTE2LDMyLDk3LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDQsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDIwLDAsMCwwLDk4LDExNywKLSAgICAxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExMCw5NywxMDksCi0gICAgMTAxLDExNSwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0MCwyLDAsCi0gICAgMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMSwwLDAsMCwxMTcsMywwLAotICAgIDAsMCwxMDIsMTIwLDExMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjUsMCwwLAotICAgIDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsCi0gICAgMTA1LDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw3OSwyLDAsMCwxMTUsOCwKLSAgICAwLDAsMCwwLDEsMTUsMSwxOCwxLDEyLDEsMTE3LDUyLDAsMCwwLAotICAgIDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKLSAgICAxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywKLSAgICAxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsMTEyLDEwMSwxMTQsNDAsMSwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTksCi0gICAgMTE0LDk3LDExMiw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLAotICAgIDExNywyNSwwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsCi0gICAgMCwwLDAsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsCi0gICAgOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzcsMiwwLDAsMTE1LDYsMCwwLAotICAgIDAsMCwyLDE4LDUsMTMsMSwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5OSwxLDAsCisgICAgMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxNDIsMiwwLDgzLDQxLDMsCisgICAgNzgsMTIyLDIzLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LAorICAgIDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMzcsMTE1LDExNCw3MiwwLDAsMCw0MSwKKyAgICAyLDExNCw3MiwwLDAsMCwxMTQsMTU4LDAsMCwwLDQxLDQsMTE0LDc2LDAsCisgICAgMCwwLDExNCw3MiwwLDAsMCwxMTQsOTksMCwwLDAsMTE0LDE2OCwwLDAsCisgICAgMCw0MSwxLDIxOCw2LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCwxOSw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCisgICAgMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwxMDIsMiwwLDAsMTE1LDEwLAorICAgIDAsMCwwLDAsMSwxMiwxLDEyLDEsMTUsMSwyNSwxLDEyMiw0MCw5NSwKKyAgICA5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LAorICAgIDEwOCwxMTUsNjIsNDYsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsCisgICAgMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsMSwxMTQsNjUsMCwwLDAsNDEsMiwKKyAgICAxMTQsMTc1LDAsMCwwLDExNCwxNzYsMCwwLDAsMTE0LDQsMCwwLDAsNDEsCisgICAgMSwxMTQsMTc1LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMSw5NSw5OSwxMDQsCisgICAgMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSw5NCwyLDAsMCwxMTUsNiwwLDAsCisgICAgMCwwLDgsMjEsNiwxMywxLDExNCwxNzcsMCwwLDAsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwzLDAsMCwKKyAgICAwLDExNSwzNSwwLDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwxMDAsCisgICAgMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTM2LDAsCisgICAgMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MSwzLDEyMiw0OSw2OCwxMDEsOTksCisgICAgMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMDUsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQ2LDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLDAsMTksCisgICAgMCwwLDAsMTE1LDU4LDAsMCwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwKKyAgICAwLDEwNyw3LDAsMTE0LDQ1LDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDEwMCwyLDAsMTI0LDEsMCwxMzEsMSwxLDEzMCwKKyAgICAxLDAsMTEwLDAsMCwxMzYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwKKyAgICAwLDgzLDQxLDMsNzgsMTIyLDI3LDEyMywxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwKKyAgICAzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxMTQsNzIsMCwwLDAsNDEsNCwxMTQsNywwLDAsMCwyMTgsMjAsCisgICAgOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLAorICAgIDk3LDEwOSwxMDEsMTE1LDExNCwxNTgsMCwwLDAsMTE0LDQ3LDAsMCwwLDQxLDIsCisgICAgMTE0LDc2LDAsMCwwLDIxOCw4LDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MSwKKyAgICAxLDExNCwxNjksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDI1LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMTE0LDIsMCwwLDExNSwKKyAgICA4LDAsMCwwLDAsMSwxNSwxLDE4LDEsMTIsMSwxMjIsNTIsOTUsMTE0LAorICAgIDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw0NiwKKyAgICA2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCisgICAgMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsCisgICAgMTAxLDExNCw0MSwxLDExNCw2NSwwLDAsMCw0MSwyLDExNCwxNjksMCwwLDAsCisgICAgMTE0LDE4MCwwLDAsMCwxMTQsNCwwLDAsMCw0MSwxLDExNCwxNjksMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwKKyAgICAxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTEyLDIsMCwwLDExNSw2LDAsCisgICAgMCwwLDAsMiwxOCw1LDEzLDEsMTE0LDE4MSwwLDAsMCw5OSwxLDAsCiAgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwKICAgICAwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLAogICAgIDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsCi0gICAgMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsMTE3LAotICAgIDQ3LDAsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwxMTEsCi0gICAgMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgNCwwLDAsMCwxOSwwLDAsMCwxMTUsNTgsMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTUsNDUsMCwxMTYsMiwwLDEwMCwKLSAgICAxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDIsMCwxMjQsMSwKLSAgICAwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsMCwKLSAgICAxMjQsMSwwLDEzMSwyLDAsODMsNDAsMywwLDAsMCw3OCwxMTcsMjUsMCwKLSAgICAwLDAsMTIzLDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsOTUsMTA1LAotICAgIDEwOSwxMTIsMTE3LDksMCwwLDAsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0MCwyLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICAxMDIsMTIwLDExMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjQsMCwwLDAsOTUsCisgICAgMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQxLDMsMTIyLDQ3LDY4LDEwMSwKKyAgICA5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwKKyAgICAxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLDAsMCwxOSwwLAorICAgIDAsMCwxMTUsNTgsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsCisgICAgMTMxLDEsMCwxMTUsNDUsMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMjQsCisgICAgMSwwLDEzMSwxLDAsMTAwLDIsMCwxMjQsMSwwLDEzMSwxLDEsMTMwLDEsCisgICAgMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsCisgICAgODMsNDEsMyw3OCwxMjIsMjUsMTIzLDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLAorICAgIDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCwKKyAgICA3MiwwLDAsMCw0MSw0LDExNCw5NSwwLDAsMCwyMTgsOSwxMDUsMTE1LDk1LAorICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNCwxNTgsMCwwLDAsMTE0LDQ3LDAsMCwwLAorICAgIDQxLDIsMTE0LDc2LDAsMCwwLDExNCwxNzksMCwwLDAsNDEsMSwxMTQsMTY5LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyNCw5NSwKICAgICAxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LAotICAgIDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDkwLDIsMCwwLDExNSw4LDAsMCwwLAotICAgIDAsMSwxNSwxLDE4LDEsMTIsMSwxMTcsNTAsMCwwLDAsOTUsMTE0LDEwMSwKLSAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0Niw2MCwxMDgsCi0gICAgMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwKLSAgICA5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwKLSAgICAxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDQwLDIsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI0LDAsMCwwLAotICAgIDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwxLDAsCi0gICAgMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLAotICAgIDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw4OCwyLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywxLAotICAgIDExNywxNiwwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDk5LDIsMCwwLDAsMCwwLDAsMCw1LDAsCi0gICAgMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDg3LDAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSwyLAotICAgIDAsMTI1LDMsMCwxMjQsMiwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsODMsMCwKLSAgICAxMTYsMiwwLDEyNCwzLDAsMTMxLDEsMCwxMTQsODMsMCwxMDAsMSwwLDEyNSwKLSAgICA0LDAsMTE2LDMsMCwxMDYsNCwwLDEyNCw0LDAsMTA2LDUsMCwxMjQsMywKLSAgICAwLDEwMCwyLDAsMjUsMTMxLDEsMCwxMTYsNiwwLDEzMSwyLDAsMSwxMTAsCi0gICAgMCwwLDEyNCwyLDAsODMsNDAsNCwwLDAsMCwxMTcsODYsMCwwLDAsCi0gICAgODQsMTE0LDEyMSwzMiwxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLAotICAgIDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsMTIxLAotICAgIDMyLDEwMCwxMDEsMTA4LDEwMSwxMDMsOTcsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMTEsMTAsMzIsCi0gICAgMzIsMzIsMzIsMTE1LDEwMSwxMDgsMTAyLDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQwLDQxLDQ2LDExNyw0NCwwLDAsMCw3OCwxMTEsMTE2LDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLAotICAgIDExNCwxMjEsMzIsMTIzLDEyNSw1OCwzMiwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDEwNSwwLDAsMCwwLDc4LDQwLDcsMCwKLSAgICAwLDAsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsMCwwLAotICAgIDEwOCwxMDEsMTEwLDExNyw5LDAsMCwwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLAotICAgIDExNSwxMTcsNCwwLDAsMCwxMTksOTcsMTE0LDExMCwxMTcsNiwwLDAsMCwxMDIsCi0gICAgMTExLDExNCwxMDksOTcsMTE2LDExNywxMywwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDg3LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsNDAsNSwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSwxMTcsMywwLDAsMCwxMDksCi0gICAgMTE1LDEwMyw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNywKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE1LDEwNCwxMDUsMTA5LDk5LDIsMCwwLDExNSwxMCwwLDAsMCwwLDYsMjEsCi0gICAgMSwyNCwxLDYsMSwzMiwxLDExNywxNywwLDAsMCw5NSwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDYsMCwwLDAsNjYsMCwKLSAgICAwLDAsMTE1LDE3MywwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwKLSAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsCi0gICAgMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLAotICAgIDQsMCwxMDAsMTQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDEsMCwxMzEsMSwKLSAgICAwLDkwLDcsMCwxMDEsNCwwLDEwMSw4LDAsMTAxLDksMCwxMDEsMTAsMCwKLSAgICAxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDExLDAsMTAxLDQsMCwxMDEsMTAsMCwxMDAsOCwKLSAgICAwLDEwMCw5LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTIsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDEzLDAsMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTIsCi0gICAgMCwxMDAsMTMsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxNCwwLAotICAgIDEwMCwxNCwwLDgzLDQwLDE1LDAsMCwwLDExNywxNSwwLDAsMCw2NiwxMTcsCi0gICAgMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDE0NCwwLAotICAgIDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw2NSwxMDgsCi0gICAgMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMDUsCi0gICAgMTE2LDEwNCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMTQsMzIsMTE1LDExNiwKLSAgICA5NywxMTYsMTA1LDk5LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiwxMTYsMTExLDMyLAotICAgIDk3LDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LAotICAgIDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDExNiwxMDUsOTcsMTE2LAotICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwKLSAgICAwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDAsMiwwLDAsCi0gICAgMCw3OCwxMTcsMjQsMCwwLDAsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMzksCi0gICAgMTIzLDEyNSwzOSwzMiw0MCw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0MSw2Miw0MCwKLSAgICAyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LAotICAgIDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsNDAsMiwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICAxMjUsMiwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywyNywwLDAsMCwKLSAgICA2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LDMsMCwwLDAsCi0gICAgMCwwLDAsMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDM5LDAsMCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxNiwKLSAgICAwLDEwMCwxLDAsODMsMTE2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCwxMTQsMzUsMCwxMjQsMCwwLDgzLDEwMCwxLDAsODMsNDAsMiwwLDAsCi0gICAgMCwxMTcsMTEzLDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk4LAotICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwzOSwxMTIsOTcsMTE2LAotICAgIDEwNCwzOSwzMiwxMDUsMTE1LDMyLDEwMSwxMTgsMTAxLDExNCwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsCi0gICAgMTAyLDEwNSwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLAotICAgIDk3LDExNCw5OSwxMDQsMzIsMTA1LDExNSwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsCi0gICAgMTAxLDEwMCwzMiw5NywzMiwxMDIsOTcsMTA1LDEwOCwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MCwzLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxMCwwLDAsMCwxMDUsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDQwLDMsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwKLSAgICAwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEyOSwyLDAsCi0gICAgMCwxMTUsNiwwLDAsMCwwLDcsMTIsMSw0LDEsMTE3LDI3LDAsMCwKLSAgICAwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKLSAgICA0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDMsMCwwLDAsOSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsODgsMCwwLDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LAotICAgIDYsMCwxMjUsMiwwLDEyMSwyMCwwLDExNiwyLDAsMTE2LDMsMCwxMDYsNCwKLSAgICAwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMTAsNDYsMCwxLDEsMSwxMjQsCi0gICAgMiwwLDEyLDExNCw3NiwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNywKLSAgICA2LDAsMTE0LDc2LDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsNjEsMTEwLAotICAgIDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDEsMCw4Myw0MCwyLAotICAgIDAsMCwwLDExNywyMywwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDk4LAotICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LAotICAgIDQwLDUsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwwLDAsMCw5NSw5OSwKLSAgICA5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LAotICAgIDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwKLSAgICAxMTcsMTIsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsCi0gICAgMTEwLDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDksMCwwLDAsCi0gICAgMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwxMTEsOTcsMTAwLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDE0MCwyLDAsMCwxMTUsMTQsMCwwLDAsMCw2LAotICAgIDE1LDEsMywxLDIwLDEsMywxLDIyLDEsMTMsMSwxMTcsMjcsMCwwLAotICAgIDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAorICAgIDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDEyNSwyLDAsMCwxMTUsOCwwLDAsMCwKKyAgICAwLDEsMTUsMSwxOCwxLDEyLDEsMTIyLDUwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsCisgICAgMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywKKyAgICAxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwKKyAgICAxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsMSwxMTQsNjUsCisgICAgMCwwLDAsNDEsMiwxMTQsMTY5LDAsMCwwLDExNCwxODMsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsNDEsMSwxMTQsMTY5LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCwxNiw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwKKyAgICAxMDEsMTEwLDEyMywyLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywKKyAgICAxLDExNCwxODQsMCwwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDUsCisgICAgMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsODcsMCwwLDAsCisgICAgMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LAorICAgIDIsMCwxMjUsMywwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCw4MywKKyAgICAwLDExNiwxLDAsMTI0LDMsMCwxMzEsMSwwLDExNCw4MywwLDEwMCwyLDAsCisgICAgMTI1LDQsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDQsMCwxMDYsNCwwLDEyNCwKKyAgICAzLDAsMTAwLDMsMCwyNSwxMzEsMSwwLDExNiw1LDAsMTMxLDIsMCwxLAorICAgIDExMCwwLDAsMTI0LDIsMCw4Myw0MSw0LDEyMiw4Niw4NCwxMTQsMTIxLDMyLDExNiwKKyAgICAxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCisgICAgMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLAorICAgIDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMjEsMzIsMTAwLDEwMSwxMDgsMTAxLAorICAgIDEwMyw5NywxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLAorICAgIDEwOCwxMDIsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNDEsCisgICAgNDYsNzgsMTIyLDQ0LDc4LDExMSwxMTYsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwKKyAgICAxMDMsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMjMsMTI1LDU4LDMyLAorICAgIDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywzMiw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsCisgICAgMTE0LDY4LDAsMCwwLDQxLDYsMjE4LDExLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDExNCwzMSwwLDAsMCwyMTgsOSw5NSwxMTksOTcsMTE0LDExMCwKKyAgICAxMDUsMTEwLDEwMywxMTUsMjE4LDQsMTE5LDk3LDExNCwxMTAsMTE0LDQ3LDAsMCwwLDIxOCwKKyAgICAxMyw3MywxMDksMTEyLDExMSwxMTQsMTE2LDg3LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsNDEsNSwKKyAgICAxMTQsNzYsMCwwLDAsMTE0LDE3OSwwLDAsMCwxMTQsMTYxLDAsMCwwLDIxOCwKKyAgICA4LDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsMjE4LDMsMTA5LDExNSwxMDMsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LAorICAgIDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksCisgICAgMTM0LDIsMCwwLDExNSwxMCwwLDAsMCwwLDYsMjEsMSwyNCwxLDYsCisgICAgMSwzMiwxLDExNCwxOTEsMCwwLDAsOTksNCwwLDAsMCwwLDAsMCwKKyAgICAwLDExLDAsMCwwLDE5LDAsMCwwLDY3LDAsMCwwLDExNSwyNDMsMSwKKyAgICAwLDAsMTA1LDAsMCwxMjUsNCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOSwKKyAgICAwLDExNCwzMSwwLDEyNCwyLDAsMTI0LDQsMCwxMDAsMiwwLDYwLDExMCw2LAorICAgIDAsMTAwLDMsMCwxMjUsMiwwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwwLAorICAgIDExNCw2MiwwLDEyNCwzLDAsMTI0LDQsMCwxMDAsNCwwLDYwLDExMCwwLDAsCisgICAgMTI0LDAsMCwxMDAsMSwwLDEwMCw1LDAsMTMzLDIsMCwyNSwxMjUsNSwwLAorICAgIDEyNCwwLDAsMTAwLDUsMCwxMDAsNiwwLDEzMywyLDAsMjUsMTI1LDYsMCwKKyAgICAxMjQsMCwwLDEwMCw2LDAsMTAwLDcsMCwxMzMsMiwwLDI1LDEyNSw3LDAsCisgICAgMTI0LDUsMCwxMTYsMCwwLDEwNywzLDAsMTE0LDE2OCwwLDEwMCw4LDAsMTA2LAorICAgIDEsMCwxMjQsMiwwLDEyNCw1LDAsMTMxLDIsMCwxMjUsOCwwLDExNiwyLAorICAgIDAsMTI0LDgsMCwxMzEsMSwwLDEsMTE2LDMsMCwxMjQsOCwwLDEyNCw0LAorICAgIDAsMTQxLDEsMCwxMzAsMSwwLDExMCwxMTYsMCwxMTYsNCwwLDEyNCw2LDAsCisgICAgMTMxLDEsMCwxMDAsNSwwLDEwNywzLDAsMTE0LDIyNiwwLDEwMCw5LDAsMTA2LAorICAgIDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDgsMCwxMTYsMiwwLDEyNCw4LAorICAgIDAsMTMxLDEsMCwxLDExNiw1LDAsMTI0LDgsMCwxMzEsMSwwLDEzMCwxLAorICAgIDAsMTEwLDU4LDAsMTE2LDQsMCwxMjQsNywwLDEzMSwxLDAsMTAwLDUsMCwKKyAgICAxMDcsMywwLDExNCwyOCwxLDEwMCwxMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsCisgICAgMSwwLDEyNSw4LDAsMTE2LDIsMCwxMjQsOCwwLDEzMSwxLDAsMSwxMTYsCisgICAgNSwwLDEyNCw4LDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDEsCisgICAgMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDIyOSwxLDEyMSwyMCwwLDExNiw2LDAsCisgICAgMTI0LDEsMCwxMDAsMTEsMCwyNSwxMzEsMSwwLDEyNSw5LDAsODcsMTEwLDE4LAorICAgIDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCw4MCwxLDEsMSwxLDg5LDExMCwKKyAgICA2MiwwLDg4LDExNiw4LDAsMTI0LDYsMCwxMzEsMSwwLDEyNCw5LDAsMTA3LAorICAgIDMsMCwxMTQsMTQyLDEsMTAwLDEyLDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLAorICAgIDAsMTI1LDgsMCwxMTYsMiwwLDEyNCw4LDAsMTMxLDEsMCwxLDExNiwzLAorICAgIDAsMTI0LDgsMCwxMjQsNCwwLDE0MSwxLDAsMTMwLDEsMCwxMTAsMCwwLAorICAgIDEyMSwxOCwwLDEyNCwxLDAsMTAwLDEzLDAsMjUsMTAwLDE0LDAsNjQsMTI1LDEwLAorICAgIDAsODcsMTEwLDE4LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxODAsMSwxLAorICAgIDEsMSw4OSwxMTMsMjI5LDEsODgsMTE2LDgsMCwxMjQsNywwLDEzMSwxLDAsCisgICAgMTI0LDEwLDAsMTA3LDMsMCwxMTQsMjI5LDEsMTE2LDMsMCwxMDAsMTIsMCwxMDYsCisgICAgMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjQsNCwwLDE0MSwxLDAsMTMwLDEsCisgICAgMCwxMTMsMjI5LDEsMTEwLDAsMCwxMjQsMCwwLDEwMCw3LDAsMTAwLDEsMCwKKyAgICAxMzMsMiwwLDI1LDgzLDQxLDE1LDk3LDEyMiwxLDAsMCw4Niw5NywxMDgsMTA1LAorICAgIDEwMCw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNCwxMDEsOTcsMTAwLDEwMSwxMTQsMzIsCisgICAgMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE1LDExNSwxMDEsMTAwLDQ1LDEwNSwxMTAsCisgICAgMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsOTcsMTAzLDk3LDEwNSwxMTAsMTE1LAorICAgIDExNiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMTYsOTcsMTE2LDExNSwzMiw0MCwKKyAgICAxMDUsMTAyLDEwLDMyLDMyLDMyLDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsNDEsMzIsOTcsMTEwLAorICAgIDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICA5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTYsMTA0LDk3LDExNiwzMiw5OSw5NywKKyAgICAxMTAsMzIsOTgsMTAxLDMyLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDEwMCwzMiw5OCwxMjEsCisgICAgMzIsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsNDAsNDEsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsNjUsMTA4LDEwOCwzMiwxMTEsMTE2LDEwNCwxMDEsMTE0LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwKKyAgICAxMDEsMTEwLDExNiwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwKKyAgICAzMiwxMDEsMTEwLDEwNCw5NywxMTAsOTksMTAxLDMyLDEwMSwxMTQsMTE0LDExMSwxMTQsMzIsMTE0LAorICAgIDEwMSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwxMDMsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsCisgICAgMTA1LDExNSwxMDEsMTAwLDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksOTcsCisgICAgMTAzLDEwNSw5OSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsMTA1LDExMCwKKyAgICA5OSwxMTEsMTE0LDExNCwxMDEsOTksMTE2LDMyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsOTgsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiwxMDIsCisgICAgMTExLDExNywxMTAsMTAwLDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLDExNSwxMTYsOTcsMTA4LDEwMSwKKyAgICA0NiwzMiw2OSw3OSw3MCw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsCisgICAgMTA1LDExNSwxMDEsMTAwLDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsOTcsCisgICAgMTE2LDk3LDMyLDEwNSwxMTUsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiwxMTYsMTExLDMyLDk4LAorICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTE0LDExNywxMTAsOTksOTcsMTE2LDEwMSwxMDAsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsNzgsMTE0LDcyLDAsMCwwLDEyMiwxMCw2MCw5OCwKKyAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw2MiwxMTQsMzUsMCwwLDAsMTE0LDEyLDAsCisgICAgMCwwLDIzMyw4LDAsMCwwLDIzMywxMiwwLDAsMCwxMjIsMzAsOTgsOTcsCisgICAgMTAwLDMyLDEwOSw5NywxMDMsMTA1LDk5LDMyLDExMCwxMTcsMTA5LDk4LDEwMSwxMTQsMzIsMTA1LAorICAgIDExMCwzMiwxMjMsMzMsMTE0LDEyNSw1OCwzMiwxMjMsMzMsMTE0LDEyNSwxMjIsNDMsMTE0LDEwMSwKKyAgICA5Nyw5OSwxMDQsMTAxLDEwMCwzMiw2OSw3OSw3MCwzMiwxMTksMTA0LDEwNSwxMDgsMTAxLDMyLAorICAgIDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwKKyAgICAxMTIsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMjIsNDgsMTE0LDEwMSw5Nyw5OSwxMDQsCisgICAgMTAxLDEwMCwzMiw2OSw3OSw3MCwzMiwxMTksMTA0LDEwNSwxMDgsMTAxLDMyLDExNCwxMDEsOTcsCisgICAgMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwxMDUsMTIyLDEwMSwzMiwxMTEsMTAyLDMyLDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwyMTgsNSwxMDksMTE2LDEwNSwKKyAgICAxMDksMTAxLDEyMiwyNiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLAorICAgIDExNSwxMTYsOTcsMTA4LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMzMsMTE0LDEyNSwyMTgsNCwKKyAgICAxMTUsMTA1LDEyMiwxMDEsMTA4LDMsMCwwLDAsMjU1LDEyNywyNTUsMTI3LDMsMCw0MSwKKyAgICA5LDIxOCwxMiw3Nyw2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwxMTQsCisgICAgNDcsMCwwLDAsMTE0LDEzOCwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwzMSwKKyAgICAwLDAsMCwyMTgsOCw2OSw3OSw3MCw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDE0LDAsCisgICAgMCwwLDExNCw5MiwwLDAsMCwxMTQsMTksMCwwLDAsNDEsMTEsMTE0LDUzLAorICAgIDAsMCwwLDIxOCwxMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMTYsOTcsMTE2LAorICAgIDExNSwxMTQsNzIsMCwwLDAsMTE0LDM1LDAsMCwwLDkwLDExLDEwMSwxMjAsOTksCisgICAgOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsOTAsNSwxMDksOTcsMTAzLDEwNSw5OSw5MCwKKyAgICAxMywxMTQsOTcsMTE5LDk1LDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsOTAsOCwKKyAgICAxMTQsOTcsMTE5LDk1LDExNSwxMDUsMTIyLDEwMSwxMTQsMTM3LDAsMCwwLDIxOCwxMiwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMjE4LDExLDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsOTUsMTE1LDEwNSwxMjIsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwyNSw5NSwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsCisgICAgMTE2LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMDQsMTAxLDk3LDEwMCwKKyAgICAxMDEsMTE0LDE0NywyLDAsMCwxMTUsNzYsMCwwLDAsMCwxMSw2LDEsMTIsCisgICAgMSwxMywzLDYsMSwxMiwxLDEzLDEsMTYsMSwxNiwxLDE2LDEsMTIsCisgICAgMSwxOCwxLDEwLDEsMTgsMSwxOCwxLDE1LDEsMTAsMSwxNSwxLDE4LAorICAgIDEsMTUsMSwxMCwxLDE1LDEsMTIsMSwzLDEsMjAsMSwxMywxLDUsCisgICAgMiwxOCwxLDE1LDEsMTAsMSwxOCwxLDMsMSwxOCwxLDEzLDEsNSwKKyAgICAyLDE4LDEsMTUsMSwxNSwxLDExNCwyMDEsMCwwLDAsOTksNCwwLDAsCisgICAgMCwwLDAsMCwwLDUsMCwwLDAsNiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTE1LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMTI1LDQsMCwxMTYsMiwwLDEyNCw0LDAsMTE2LDMsMCwxMzEsMiwKKyAgICAwLDExNCw3OCwwLDExNiw0LDAsMTAwLDEsMCwxMjQsMiwwLDEzMSwyLDAsCisgICAgMSwxMjQsMywwLDEwMCwyLDAsMTA3LDksMCwxMTQsNzQsMCwxMTYsNSwwLAorICAgIDEwNiw2LDAsMTI0LDQsMCwxMjQsMywwLDEzMSwyLDAsMSwxMTAsMCwwLAorICAgIDEyNCw0LDAsODMsMTE2LDcsMCwxMDAsMywwLDEwNiw4LDAsMTI0LDIsMCwKKyAgICAxMzEsMSwwLDEwMCw0LDAsMTI0LDEsMCwxMDAsNSwwLDEyNCwyLDAsMTMxLAorICAgIDEsMiwxMzAsMSwwLDEwMCwyLDAsODMsNDEsNiwxMjIsNjAsNjcsMTExLDEwOSwKKyAgICAxMTIsMTA1LDEwOCwxMDEsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsOTcsMTE1LAorICAgIDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk1LDExOCw5NywKKyAgICAxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LAorICAgIDEwNCwxMDEsOTcsMTAwLDEwMSwxMTQsNDAsNDEsNDYsMTIyLDIxLDk5LDExMSwxMDAsMTAxLDMyLAorICAgIDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsCisgICAgNzgsMTIyLDIzLDc4LDExMSwxMTAsNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsCisgICAgOTksMTE2LDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE0LDcyLDAsMCwwLDExNCwKKyAgICAzNSwwLDAsMCw0MSw5LDIxOCw3LDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsOTAsCisgICAgNSwxMDgsMTExLDk3LDEwMCwxMTUsMjE4LDEwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwKKyAgICA5OSwxMDEsMjE4LDEwLDk1LDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTQsMTM4LAorICAgIDAsMCwwLDExNCw5NSwwLDAsMCw5MCwxNiw5NSwxMDIsMTA1LDEyMCw5NSw5OSwKKyAgICAxMTEsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNCwxNTgsMCwwLDAsMTE0LAorICAgIDQ3LDAsMCwwLDQxLDUsMTE0LDUzLDAsMCwwLDExNCw3MiwwLDAsMCwKKyAgICAxMTQsMTI2LDAsMCwwLDExNCwxMjcsMCwwLDAsMjE4LDQsOTksMTExLDEwMCwxMDEsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDE3LDk1LDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwKKyAgICAxMDAsMTAxLDIwMiwyLDAsMCwxMTUsMTYsMCwwLDAsMCwyLDE1LDEsMTUsCisgICAgMSwxMywxLDEyLDEsMTksMSw0LDIsMTgsMSwxMTQsMjA2LDAsMCwwLAorICAgIDExNCw2OCwwLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNCwwLAorICAgIDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw3NiwwLDAsMCwxMTYsCisgICAgMCwwLDExNiwxLDAsMTMxLDEsMCwxMjUsMywwLDEyNCwzLDAsMTA2LDIsCisgICAgMCwxMTYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDMsCisgICAgMCwxMDYsMiwwLDExNiwzLDAsMTI0LDIsMCwxMzEsMSwwLDEzMSwxLDAsCisgICAgMSwxMjQsMywwLDEwNiwyLDAsMTE2LDQsMCwxMDYsNSwwLDEyNCwwLDAsCisgICAgMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDMsMCw4Myw0MSwxLDEyMiw4MCw2NywKKyAgICAxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwzMiw5NywzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsCisgICAgMTA2LDEwMSw5OSwxMTYsMzIsMTA1LDExMCwxMTYsMTExLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwKKyAgICAxMDAsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwxMTEsCisgICAgMTE3LDExNiwzMiwxMTYsMTExLDMyLDk3LDMyLDk4LDEyMSwxMTYsMTAxLDQ1LDk5LDExMSwxMDksCisgICAgMTEyLDEwNSwxMDgsMTAxLDEwMCwxMCwzMiwzMiwzMiwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsNDEsCisgICAgNiwyMTgsOSw5OCwxMjEsMTE2LDEwMSw5NywxMTQsMTE0LDk3LDEyMSwxMTQsMTk2LDAsMCwKKyAgICAwLDIxOCw2LDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNCwxNywwLDAsMCwxMTQsMjAyLAorICAgIDAsMCwwLDkwLDUsMTAwLDExNywxMDksMTEyLDExNSw0MSw0LDExNCwyMDUsMCwwLAorICAgIDAsMTE0LDE5NCwwLDAsMCwxMTQsMjAwLDAsMCwwLDExNCw1MywwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMTcsOTUsOTksMTExLDEwMCwxMDEsOTUsMTE2LDExMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsCisgICAgMTAwLDEwMSwyMTQsMiwwLDAsMTE1LDEwLDAsMCwwLDAsMywxMiwxLDE5LAorICAgIDEsMTksMSwyMiwxLDExNCwyMDksMCwwLDAsOTksMSwwLDAsMCwwLAorICAgIDAsMCwwLDUsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgODksMCwwLDAsMTAwLDEsMCwxMDAsMiwwLDEwOCwwLDAsMTI1LDEsMCwKKyAgICAxMTYsMSwwLDEwNiwyLDAsMTI0LDAsMCwxMzEsMSwwLDEwNiwzLDAsMTI1LAorICAgIDIsMCwxMjQsMSwwLDEwNiw0LDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLAorICAgIDAsMTE2LDEsMCwxMDYsNSwwLDEwMCwyLDAsMTAwLDMsMCwxMzEsMiwwLAorICAgIDEyNSw0LDAsMTI0LDQsMCwxMDYsNiwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsCisgICAgMywwLDEwMCwxLDAsMjUsMTMxLDEsMCwxMzEsMSwwLDgzLDQxLDQsMTIyLAorICAgIDEyMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDExNCwxMDEsCisgICAgMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNSwxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsMzIsOTksMTExLDEwMCwxMDEsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LAorICAgIDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTE2LDExNCwxMDUsMTEwLDEwMyw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw4NSwxMTAsMTA1LDExOCwxMDEsMTE0LDExNSw5NywxMDgsMzIsMTEwLDEwMSwxMTksCisgICAgMTA4LDEwNSwxMTAsMTAxLDMyLDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwzMiwxMDUsMTE1LDMyLAorICAgIDExNywxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLAorICAgIDEwMCwxMDUsMTEwLDEwMyw0NiwxMCwzMiwzMiwzMiwzMiwxMTQsNjgsMCwwLDAsNzgsCisgICAgODQsNDEsNywyMTgsOCwxMTYsMTExLDEwNywxMDEsMTEwLDEwNSwxMjIsMTAxLDExNCw0OSwwLAorICAgIDAsMCw5MCw3LDY2LDEyMSwxMTYsMTAxLDExNSw3Myw3OSw5MCw4LDExNCwxMDEsOTcsCisgICAgMTAwLDEwOCwxMDUsMTEwLDEwMSw5MCwxNSwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDk1LDEwMSwxMTAsCisgICAgOTksMTExLDEwMCwxMDUsMTEwLDEwMyw5MCwyNSw3MywxMTAsOTksMTE0LDEwMSwxMDksMTAxLDExMCwKKyAgICAxMTYsOTcsMTA4LDc4LDEwMSwxMTksMTA4LDEwNSwxMTAsMTAxLDY4LDEwMSw5OSwxMTEsMTAwLDEwMSwKKyAgICAxMTQsMjE4LDYsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSw0MSw1LDIxOCwxMiwxMTUsMTExLDExNywKKyAgICAxMTQsOTksMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDExNSwxMTQsMjEwLDAsMCwwLDkwLDIxLAorICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDExNCwxMDEsOTcsCisgICAgMTAwLDEwOCwxMDUsMTEwLDEwMSwyMTgsOCwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsOTAsCisgICAgMTUsMTEwLDEwMSwxMTksMTA4LDEwNSwxMTAsMTAxLDk1LDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICAxMywxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMjI0LDIsCisgICAgMCwwLDExNSwxMCwwLDAsMCwwLDUsMTIsMSwxOCwxLDE1LDEsMTgsCisgICAgMSwxMTQsMjE0LDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDYsMCwwLDAsNjQsMCwwLDAsMTE1LDE2OSwwLDAsMCwKKyAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAorICAgIDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwxLAorICAgIDAsOTAsNSwwLDEwMSw0LDAsMTAwLDQsMCwxMDAsNSwwLDEwMCw2LDAsCisgICAgMTMyLDEsMCwxMzEsMSwwLDkwLDYsMCwxMDEsNCwwLDEwMSw3LDAsMTAxLAorICAgIDgsMCwxMDEsOSwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLDEzMSwxLAorICAgIDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsNCwwLAorICAgIDEwMSw5LDAsMTAwLDksMCwxMDAsMTAsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLAorICAgIDEsMCw5MCwxMSwwLDEwMSw0LDAsMTAxLDksMCwxMDAsMTEsMCwxMDAsMTIsCisgICAgMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMiwwLDEwMSw0LDAsCisgICAgMTAxLDksMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLAorICAgIDEsMCw5MCwxMywwLDEwMCw0LDAsODMsNDEsMTUsMjE4LDE1LDY2LDExNywxMDUsCisgICAgMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMjIsMTQ0LDc3LDEwMSwKKyAgICAxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTA5LDEwMSwKKyAgICAxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsCisgICAgMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTExLDExNCwzMiwxMTUsMTE2LDk3LDExNiwxMDUsOTksCisgICAgMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwxMTEsMzIsOTcsMTE4LDExMSwxMDUsCisgICAgMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDEwLDMyLDMyLAorICAgIDMyLDMyLDEwNSwxMTAsMTE1LDExNiw5NywxMTAsMTE2LDEwNSw5NywxMTYsMTAxLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMSwKKyAgICAwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDc4LDEyMiwyNCw2MCwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCw5OCwxMTcsMTA1LDEwOCwxMTYsCisgICAgNDUsMTA1LDExMCw0MSw2Miw0MSwyLDExNCw0NywwLDAsMCwxMTQsNTcsMCwwLAorICAgIDAsNDEsMiwyMTgsMyw5OSwxMDgsMTE1LDExNCwxNjIsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwyNDcsMiwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCwyLDEyMiwyNyw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsCisgICAgMTE0LDc4LDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDIsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDM5LDAsMCwwLDEyNCwyLDAsMTAwLAorICAgIDEsMCwxMDcsOSwwLDExNCwxNiwwLDEwMCwxLDAsODMsMTE2LDAsMCwxMDYsCisgICAgMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTQsMzUsMCwxMjQsMCwwLDgzLDEwMCwKKyAgICAxLDAsODMsNDEsMiwxMjIsMTEzLDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwzOSwxMTIsOTcsCisgICAgMTE2LDEwNCwzOSwzMiwxMDUsMTE1LDMyLDEwMSwxMTgsMTAxLDExNCwzMiwxMTUsMTEyLDEwMSw5OSwKKyAgICAxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsCisgICAgMTAxLDk3LDExNCw5OSwxMDQsMzIsMTA1LDExNSwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwKKyAgICAxMTQsMTAxLDEwMCwzMiw5NywzMiwxMDIsOTcsMTA1LDEwOCwxMTcsMTE0LDEwMSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwyLDExNCw5NSwwLDAsMCwKKyAgICA5MCwxMCwxMDUsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDQxLDMsMTE0LDIxNiwKKyAgICAwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDI1MSwyLDAsMCwxMTUsNiwwLAorICAgIDAsMCwwLDcsMTIsMSw0LDEsMTIyLDI3LDY2LDExNywxMDUsMTA4LDExNiwxMDUsCisgICAgMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMTAsMCwwLDAsNjcsMCwwLDAsMTE1LDM5LDAsMCwwLDExNiwKKyAgICAwLDAsMTI0LDEsMCwxMzEsMSwwLDE0MywyMSwwLDEsMTE2LDEsMCwxMTYsCisgICAgMiwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDEwMCwxLDAsCisgICAgODEsODgsMTAwLDEsMCw4Myw0MSwyLDEyMiwyMyw3NiwxMTEsOTcsMTAwLDMyLDk3LAorICAgIDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQ2LDc4LDQxLDQsMTE0LDEzOSwwLDAsMCwxMTQsMTAwLDAsMCwwLDExNCw5NSwKKyAgICAwLDAsMCw5MCwxMiwxMDUsMTEwLDEwNSwxMTYsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKKyAgICAxMTAsNDEsMiwxMTQsMjE2LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDEwOCwxMTEsCisgICAgOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDYsMywwLDAsMTE1LDQsMCwKKyAgICAwLDAsMCw2LDEzLDEsMTIyLDI3LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICAxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsCisgICAgODMsNDEsMiwxMjIsNTcsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwKKyAgICAzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsCisgICAgMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNSw0Niw3OCwxMTQsCisgICAgNCwwLDAsMCw0MSwyLDExNCwyMTYsMCwwLDAsMTE0LDE3OSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgOCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxNSwzLDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDQsMTIyLDI0LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTYsCisgICAgODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTgsCisgICAgMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLAorICAgIDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCwxMTQsNCwwLDAsMCw0MSwyLAorICAgIDExNCwyMTYsMCwwLDAsMTE0LDE3OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsMTAzLDEwMSwxMTYsOTUsMTE1LAorICAgIDExMSwxMTcsMTE0LDk5LDEwMSwyMSwzLDAsMCwxMTUsMiwwLDAsMCwwLDQsCisgICAgMTIyLDI2LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAorICAgIDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLAogICAgIDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1NywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAotICAgIDk3LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwKLSAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE1LDQ2LDc4LDQwLDEsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDE1NCwKLSAgICAyLDAsMCwxMTUsMiwwLDAsMCwwLDQsMTE3LDI0LDAsMCwwLDY2LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwKLSAgICAwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNTYsMCwwLDAsODIsCi0gICAgMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LAotICAgIDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwKLSAgICAxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCw0MCwxLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsCi0gICAgOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLAotICAgIDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxNjAsMiwwLDAsMTE1LAotICAgIDIsMCwwLDAsMCw0LDExNywyNiwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsCi0gICAgMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLAotICAgIDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwKLSAgICAxLDAsODMsNDAsMiwwLDAsMCwxMTcsNTIsMCwwLDAsODIsMTAxLDExNiwKLSAgICAxMTcsMTE0LDExMCwzMiw3MCw5NywxMDgsMTE1LDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExNCwKLSAgICAxMDEsMzIsMTEwLDEwMSwxMTgsMTAxLDExNCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LAotICAgIDQ2LDcwLDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwKLSAgICAxMDEsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxNjYsMiwwLDAsMTE1LDIsMCwwLDAsMCwKLSAgICA0LDExNywyNiwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgNzgsNDAsMTUsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LAotICAgIDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNywKLSAgICAxMSwwLDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsCi0gICAgMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTcsMTEsMCwKLSAgICAwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwKLSAgICAwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDEwLDAsMCwwLDEwNSwxMTUsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LAotICAgIDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE2LDIsMCwwLAotICAgIDExNSwyOCwwLDAsMCwxNiw3LDYsMiwxOCw0LDMsMSwxOCwxMCwzLAotICAgIDEsMywxLDMsMSwyNywxMSwzLDEsMjEsNSwzLDEsMjEsNSwzLAotICAgIDEsMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAotICAgIDAsMCw2LDAsMCwwLDY2LDAsMCwwLDExNSwxNzMsMCwwLDAsMTI0LAotICAgIDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCi0gICAgMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwKLSAgICAwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDE0LDAsMTAwLDQsMCwKLSAgICAxMDAsNSwwLDEzMiwxLDAsMTMxLDEsMCw5MCw3LDAsMTAxLDQsMCwxMDEsCi0gICAgOCwwLDEwMSw5LDAsMTAxLDEwLDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLAotICAgIDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMSwwLAotICAgIDEwMSw0LDAsMTAxLDEwLDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDEyLDAsMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTAsCi0gICAgMCwxMDAsMTEsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMywwLAotICAgIDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsOTAsMTQsMCwxMDAsMTQsMCw4Myw0MCwxNSwwLDAsCi0gICAgMCwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwMSwxMTQsMTE3LDE0MiwwLDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywKKyAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTIsODIsMTAxLAorICAgIDExNiwxMTcsMTE0LDExMCwzMiw3MCw5NywxMDgsMTE1LDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LAorICAgIDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LAorICAgIDExNCwxMDEsMzIsMTEwLDEwMSwxMTgsMTAxLDExNCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCisgICAgMTE1LDQ2LDcwLDExNCw0LDAsMCwwLDQxLDIsMTE0LDIxNiwwLDAsMCwxMTQsCisgICAgMTc5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCwxNTcsMCwwLDAsMjcsMywwLDAsMTE1LDIsMCwwLAorICAgIDAsMCw0LDEyMiwyNiw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDEsCisgICAgMTQsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsCisgICAgMTE0LDU5LDAsMCwwLDIxOCwxMSw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsCisgICAgMTExLDEwMCwxMTQsMjE3LDAsMCwwLDExNCwyMTgsMCwwLDAsMTE0LDE3MSwwLDAsCisgICAgMCwxMTQsMTc0LDAsMCwwLDExNCwxODEsMCwwLDAsMTE0LDIxOSwwLDAsMCwKKyAgICAxMTQsMjIwLDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDE1NywwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMjE1LDAsMCwwLDIzOCwyLDAsMCwxMTUsMjgsMCwwLAorICAgIDAsMTIsNyw2LDIsMTgsNCwzLDEsMTgsMTAsMywxLDMsMSwzLAorICAgIDEsMjcsNiwzLDEsMjEsNSwzLDEsMjEsNSwzLDEsMTE0LDIxNSwwLAorICAgIDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LAorICAgIDAsMCwwLDY0LDAsMCwwLDExNSwxNjksMCwwLDAsMTAxLDAsMCw5MCwKKyAgICAxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsCisgICAgMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwKKyAgICAxMDEsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwxLDAsMTMxLAorICAgIDEsMCw5MCw2LDAsMTAxLDQsMCwxMDEsNywwLDEwMSw4LDAsMTAxLDksCisgICAgMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsCisgICAgMTMxLDEsMCwxMzEsMSwwLDkwLDEwLDAsMTAxLDQsMCwxMDEsOSwwLDEwMCwKKyAgICA5LDAsMTAwLDEwLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTEsCisgICAgMCwxMDEsNCwwLDEwMSw5LDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDAsMCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsOTAsMTIsMCwxMDEsNCwwLDEwMSw5LDAsMTAwLAorICAgIDEzLDAsMTAwLDE0LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTMsCisgICAgMCwxMDAsNCwwLDgzLDQxLDE1LDIxOCwxNCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMjIsMTQyLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LAogICAgIDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTAyLDExNCwKICAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLAogICAgIDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDk3LApAQCAtMTUzOSw5NTQgKzE0NTUsNjAwIEBACiAgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLAogICAgIDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLAogICAgIDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLAotICAgIDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIyLDAsMCwwLDYwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDM5LDEyMywxMjUsMzksMzIsNDAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgNDEsNjIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksCi0gICAgOTcsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLAotICAgIDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsMSwwLDAsCi0gICAgMCwxMDksNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDE4MiwyLAotICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI2LDAsMCwwLDcwLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwzLDAsMCwwLDAsMCwwLAotICAgIDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLAotICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxOSwKLSAgICAwLDEyNCwwLDAsODMsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwKLSAgICAwLDAsMCw3MCwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCw0MCwzLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNyw5LDAsMCwwLDEwNSwxMTUsOTUsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMywKLSAgICAwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLAotICAgIDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTg2LDIsMCwKLSAgICAwLDExNSwyLDAsMCwwLDAsMywxMTcsMjYsMCwwLDAsNzAsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKLSAgICA0LDAsMCwwLDksMCwwLDAsNjcsMCwwLDAsMTE1LDEwMCwwLDAsCi0gICAgMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDEyNSwyLDAsCi0gICAgMTIxLDMyLDAsMTE2LDIsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMzEsCi0gICAgMiwwLDEyNSwzLDAsMTI0LDMsMCw5Niw1LDAsMTI0LDMsMCw4Myw4NywKLSAgICAxMTAsNDYsMCwxLDEsMSwxMjQsMiwwLDEyLDExNCw4OCwwLDEyNCwxLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTE0LDg4LDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEyNCwxLDAsNjEsMTEwLDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsCi0gICAgODgsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwwLDAsMCw3NiwKLSAgICAxMTEsOTcsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQ2LDc4LDQwLDYsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsCi0gICAgMCw5NSwxMDUsMTA5LDExMiwxMTcsMTEsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDExNyw4LDAsMCwwLDk1LDk1LDEwMiwxMDUsMTA4LDEwMSwKLSAgICA5NSw5NSw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LAotICAgIDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw5LDAsMCwKLSAgICAwLDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTcsMSwwLDAsMCwxMDksCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTkxLDIsMCwwLAotICAgIDExNSwxOCwwLDAsMCwwLDYsMTUsMSwzLDEsMTgsMiw2LDEsOCwKLSAgICAxLDMsMSwyMiwxLDEzLDEsMTE3LDI2LDAsMCwwLDcwLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLAotICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsMSwwLAotICAgIDAsMCwxMTcsNDUsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNDYsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTcsMTcsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsOTUsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQwLDIsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwKLSAgICAwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwyMDgsMiwwLDAsMTE1LAotICAgIDIsMCwwLDAsMCw0LDExNywyMywwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCi0gICAgMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsCi0gICAgNDAsMiwwLDAsMCwxMTcsNTQsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LAotICAgIDk3LDExOCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwKLSAgICA3OCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLAotICAgIDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsCi0gICAgMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwyMTQsMiwwLDAsMTE1LDIsMCwwLDAsMCw0LDExNywKLSAgICAyNSwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwKKyAgICA4Myw0MSwyLDc4LDEyMiwyMiw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsCisgICAgMTE0LDEyNSwzMiw0MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0MSw2Miw0MSwyLDExNCw0NywKKyAgICAwLDAsMCwxMTQsNTcsMCwwLDAsNDEsMiwxMTQsMjE2LDAsMCwwLDIxOCwKKyAgICAxLDEwOSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMjE3LDAsMCwwLDQzLDMsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgMiwxMjIsMjYsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwKKyAgICAxMTQsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDc4LDk5LDMsCisgICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDIsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDIzLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwKKyAgICAwLDEzMSwxLDAsMTE0LDE5LDAsMTI0LDAsMCw4MywxMDAsMSwwLDgzLDQxLAorICAgIDIsMTIyLDIxLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LDQxLDIsMTE0LDk1LDAsMCwwLAorICAgIDExNCwxODIsMCwwLDAsNDEsMywxMTQsMjE2LDAsMCwwLDExNCwxNzksMCwwLAorICAgIDAsMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwyMTgsMCwwLDAsNDcsMywwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwzLDEyMiwyNiw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTAsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDUxLDAsMCwwLDExNiwwLDAsMTI0LDEsCisgICAgMCwxMzEsMSwwLDE0MywzMywwLDEsMTE2LDEsMCwxMTYsMiwwLDEwNiwzLAorICAgIDAsMTI0LDEsMCwxMzEsMiwwLDEyNSwyLDAsMTI0LDIsMCw5Niw0LDAsCisgICAgMTI0LDIsMCw4Myw4NywxMDAsMSwwLDgxLDg4LDEwMCwxLDAsODMsNDEsMiwKKyAgICAxMjIsMjEsNzYsMTExLDk3LDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCw0MSw1LDExNCwxMzksMCwwLDAsMTE0LAorICAgIDEwMCwwLDAsMCwxMTQsOTUsMCwwLDAsOTAsMTEsMTA1LDExMCwxMDUsMTE2LDk1LAorICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNCwxNjUsMCwwLDAsNDEsMywxMTQsMjE2LDAsCisgICAgMCwwLDExNCwxNzksMCwwLDAsMTE0LDIyNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjE5LDAsMCwwLAorICAgIDUyLDMsMCwwLDExNSw4LDAsMCwwLDAsNiwxMywxLDE4LDIsNiwKKyAgICAxLDEyMiwyNiw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAorICAgIDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsCiAgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsCiAgICAgMCwwLDExNSwxMywwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwKLSAgICAxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDQ2LDAsMCwwLDgyLDEwMSwKLSAgICAxMTYsMTE3LDExNCwxMTAsMzIsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsCi0gICAgMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0Niw0MCwyLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxNywwLDAsMCwxMDUsCi0gICAgMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDIyMCwyLDAsMCwxMTUsMiwwLDAsMCwwLDQsCi0gICAgMTE3LDI1LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDc4LDQwLAotICAgIDE1LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LAotICAgIDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwKLSAgICAxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsCi0gICAgOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsMTEsMCwKLSAgICAwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDExLDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE2LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsCi0gICAgMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDExLDAsMCwwLDEwOCwKLSAgICAxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTczLDIsMCwwLDExNSwyOCwwLDAsCi0gICAgMCwxNiw3LDYsMiwxOCw0LDMsMSwxOCw0LDMsMSwzLDEsMywKLSAgICAxLDI3LDE0LDMsMSwyMSw1LDMsMSwyMSw1LDMsMSwxMTcsMTQsMCwKLSAgICAwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsNCwwLDAsCi0gICAgMCw2NiwwLDAsMCwxMTUsMTAxLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsCi0gICAgMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsCi0gICAgMTAwLDIsMCw5MCw0LDAsMTAwLDMsMCw5MCw1LDAsMTAwLDExLDAsOTAsCi0gICAgNywwLDEwMSw4LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsMTMxLDEsCi0gICAgMCw5MCw5LDAsMTAxLDgsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwKLSAgICAxMzEsMSwwLDkwLDEwLDAsMTAxLDgsMCwxMDAsMTAsMCwxMDAsOCwwLDEwMCwKLSAgICA5LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDEyLDAsMTAwLDEwLDAsODMsNDAsCi0gICAgMTIsMCwwLDAsMTE3LDIxLDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LAotICAgIDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw2NywKLSAgICAwLDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwKLSAgICAxMDAsMTAxLDk5LDEwOCw5NywxMTQsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDMyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsCi0gICAgNDYsMTAsMzIsMzIsMzIsMzIsMTE3LDU5LDAsMCwwLDgzLDExMSwxMDIsMTE2LDExOSwKLSAgICA5NywxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLAotICAgIDExMCw2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDEyNSwxMTcsNjUsMCwwLDAsODMsMTExLDEwMiwxMTYsMTE5LAotICAgIDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsCi0gICAgMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsMTE3LDEwOCwKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDkyLDY4LDEwMSw5OCwxMTcsMTAzLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw2NywwLDAsMCwxMjEsMjMsMCwxMTYsMCwwLDEwNiwxLDAsMTE2LAotICAgIDAsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMTAsMzcsMCwKLSAgICA0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDYyLDAsMSwxLDEsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDExNiwwLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwyLDAsODMsCi0gICAgODksMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsCi0gICAgNSwwLDAsMCwxMTcsNywwLDAsMCw5NSwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywKLSAgICAxMTcsNywwLDAsMCw3OSwxMTIsMTAxLDExMCw3NSwxMDEsMTIxLDExNywxNywwLDAsCi0gICAgMCw3Miw3NSw2OSw4OSw5NSw2Nyw4NSw4Miw4Miw2OSw3OCw4NCw5NSw4NSw4MywKLSAgICA2OSw4MiwxMTcsMTIsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDExNywxOCwwLDAsMCw3Miw3NSw2OSw4OSw5NSw3Niw3OSw2NywKLSAgICA2NSw3Niw5NSw3Nyw2NSw2Nyw3Miw3Myw3OCw2OSw0MCwyLDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDMsMCwwLDAsMTA3LDEwMSwxMjEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTQsMCwwLDAsCi0gICAgOTUsMTExLDExMiwxMDEsMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMjQwLDIsCi0gICAgMCwwLDExNSw4LDAsMCwwLDAsMiwzLDEsMjMsMSwxMywxLDExNywKLSAgICAzNiwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsCi0gICAgMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsCi0gICAgMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5OSwyLDAsMCwwLDAsMCwwLAotICAgIDAsNiwwLDAsMCwxNiwwLDAsMCw2NywwLDAsMCwxMTUsMTQyLDAsCi0gICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMTQsMjEsMCwxMjQsMCwwLDEwNiwxLAotICAgIDAsMTI1LDIsMCwxMTAsOSwwLDEyNCwwLDAsMTA2LDIsMCwxMjUsMiwwLAotICAgIDEyNCwyLDAsMTA2LDMsMCwxMDAsMSwwLDEyNCwxLDAsMTAwLDIsMCwxMTYsCi0gICAgNCwwLDEwNiw1LDAsMTAwLDAsMCwxMDAsMywwLDEzMywyLDAsMjUsMTMxLAotICAgIDAsMiwxMjUsMywwLDEyMSw0NiwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywKLSAgICAwLDEzMSwxLDAsMTQzLDI1LDAsMTI1LDQsMCwxMTYsNywwLDEwNiw4LDAsCi0gICAgMTI0LDQsMCwxMDAsNCwwLDEzMSwyLDAsMTI1LDUsMCw4NywxMDAsMCwwLAotICAgIDgxLDg4LDg3LDExMCwyMiwwLDQsMTE2LDksMCwxMDcsMTAsMCwxMTQsMTM3LDAsCi0gICAgMSwxLDEsMTAwLDAsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCw1LDAsODMsCi0gICAgNDAsNSwwLDAsMCw3OCwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDExLDAsMCwwLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwKLSAgICAxMDUsMTExLDExMCwxMDUsMywwLDAsMCwxMTcsMCwwLDAsMCw0MCwxMSwwLAotICAgIDAsMCwxMTcsMTEsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsNjYsODUsNzMsCi0gICAgNzYsNjgsMTE3LDE4LDAsMCwwLDgyLDY5LDcxLDczLDgzLDg0LDgyLDg5LDk1LAotICAgIDc1LDY5LDg5LDk1LDY4LDY5LDY2LDg1LDcxLDExNywxMiwwLDAsMCw4Miw2OSwKLSAgICA3MSw3Myw4Myw4NCw4Miw4OSw5NSw3NSw2OSw4OSwxMTcsNiwwLDAsMCwxMDIsCi0gICAgMTExLDExNCwxMDksOTcsMTE2LDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsCi0gICAgMCwwLDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTcsMTQsMCwwLDAsOTUsMTExLAotICAgIDExMiwxMDEsMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LDcsMCwwLAotICAgIDAsOTUsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsMTE3LDEwLDAsMCwwLDgxLDExNywxMDEsCi0gICAgMTE0LDEyMSw4Niw5NywxMDgsMTE3LDEwMSwxMTcsMTIsMCwwLDAsODcsMTA1LDExMCwxMDAsCi0gICAgMTExLDExOSwxMTUsNjksMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsCi0gICAgMTAxLDQwLDYsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDEyLDAsMCwwLAotICAgIDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTUsMTA3LDEwMSwxMjEsMTE3LDMsMCwwLAotICAgIDAsMTA3LDEwMSwxMjEsMTE3LDQsMCwwLDAsMTA0LDEwNywxMDEsMTIxLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsMCw5NSwxMTUsMTAxLDk3LDExNCwKLSAgICA5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwyNDcsMiwwLDAsMTE1LAotICAgIDIyLDAsMCwwLDAsMiw5LDEsMTIsMiw5LDEsMTUsMSwyMiwxLAotICAgIDMsMSwxOCwxLDI4LDEsMTMsMSw5LDEsMTE3LDM4LDAsMCwwLDg3LAotICAgIDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywKLSAgICAxMDUsMTE1LDExNiwxMTQsMTIxLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsCi0gICAgMCwwLDEyLDAsMCwwLDY3LDAsMCwwLDExNSwxMzcsMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMywwLDEyNCwzLAotICAgIDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzMSwwLDEwMCwxLDAsODMsMTIxLDE3LAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMTMxLDEsMCwxLDg3LDExMCwKLSAgICAyMiwwLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsNzIsMCwxLDEsMSwxMDAsCi0gICAgMSwwLDgzLDg5LDExMCwxLDAsODgsMTIwLDU3LDAsMTE2LDUsMCwxMzEsMCwKLSAgICAwLDY4LDkzLDQ2LDAsOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsMywKLSAgICAwLDEwNiw2LDAsMTE2LDcsMCwxMjQsNSwwLDEzMSwxLDAsMTMxLDEsMCwKLSAgICAxMTQsODMsMCwxMjQsNCwwLDEyNCwxLDAsMTI0LDMsMCwxMzEsMiwwLDgzLAotICAgIDExMyw4MywwLDg3LDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMzQsMCwKLSAgICAwLDAsNzAsMTA1LDExMCwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LAotICAgIDEwOSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwKLSAgICAxMTYsMTE0LDEyMSw0Niw3OCw0MCw4LDAsMCwwLDExNywxNiwwLDAsMCw5NSwKLSAgICAxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCw5NSwxMTEsMTE1LAotICAgIDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LDExNyw3LDAsMCwwLDc5LDgzLAotICAgIDY5LDExNCwxMTQsMTExLDExNCwxMTcsMjcsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw4LDAsMCwwLDEwMSwxMTAsMTAwLDExNSwxMTksMTA1LAotICAgIDExNiwxMDQsMTE3LDUsMCwwLDAsMTE2LDExNywxMTIsMTA4LDEwMSw0MCw2LDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywKLSAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywKLSAgICA4LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw4LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwKLSAgICAxMDUsMTIwLDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDYsMywwLDAsMTE1LDIwLDAsMCwwLDAsMywxNSwxLDEyLDEsNCwKLSAgICAxLDMsMSwxNywxLDEzLDEsOSwxLDIyLDEsMjEsMSwxMTcsMzMsMCwKLSAgICAwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsCi0gICAgMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDc4LDcwLDQwLDEzLDAsMCwwLDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSwKLSAgICA5OSw5NSw5NSwxMTcsMTIsMCwwLDAsODIsNjksNzEsNzMsODMsODQsODIsODksCi0gICAgOTUsNzUsNjksODksMTE3LDE4LDAsMCwwLDgyLDY5LDcxLDczLDgzLDg0LDgyLAotICAgIDg5LDk1LDc1LDY5LDg5LDk1LDY4LDY5LDY2LDg1LDcxLDExNyw1LDAsMCwwLAotICAgIDcwLDk3LDEwOCwxMTUsMTAxLDExNywxMSwwLDAsMCw2OCw2OSw2Niw4NSw3MSw5NSwKLSAgICA2Niw4NSw3Myw3Niw2OCwxMTcsMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LAotICAgIDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDE0LDAsMCwwLDk1LDExMSwxMTIsMTAxLDExMCw5NSwKLSAgICAxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNywxNiwwLDAsMCw5NSwxMTUsMTAxLAotICAgIDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMSwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsCi0gICAgMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICAyMjcsMiwwLDAsMTE1LDE2LDAsMCwwLDE2LDMsNiwzLDYsMyw2LAotICAgIDIsNiwyLDE4LDcsMTgsMTUsMywxLDExNywyMSwwLDAsMCw4NywxMDUsCisgICAgMTMxLDEsMCw4Myw0MSwxLDEyMiw0NSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsCisgICAgMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw0Niw0MSwyLDExNCw5NSwwLDAsMCw5MCwxNywxMDMsMTAxLAorICAgIDExNiw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsNDEsCisgICAgMiwxMTQsMjE2LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIyMCwwLDAsMCw2NCwKKyAgICAzLDAsMCwxMTUsMiwwLDAsMCwwLDQsMTIyLDIzLDcwLDExNCwxMTEsMTIyLAorICAgIDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LAorICAgIDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCwKKyAgICA4Myw0MSwyLDEyMiw1NCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLAorICAgIDMyLDk3LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDExNCw0LDAsMCwKKyAgICAwLDQxLDIsMTE0LDIxNiwwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMjEsMCwwLAorICAgIDAsNzAsMywwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyNSw3MCwxMTQsCisgICAgMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiwKKyAgICA5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwKKyAgICAwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDEsMSwKKyAgICAxMjIsNDYsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LAorICAgIDQxLDIsMTE0LDk1LDAsMCwwLDkwLDE3LDEwNSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLAorICAgIDEwMSwxMTAsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQxLDIsMTE0LDIxNiwwLDAsCisgICAgMCwxMTQsMTc5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwxNTcsMCwwLDAsNzYsMywwLDAsMTE1LDIsCisgICAgMCwwLDAsMCw0LDEyMiwyNSw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKKyAgICA0MSwxNCwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsCisgICAgMCwxMTQsNTksMCwwLDAsMTE0LDIyMiwwLDAsMCwxMTQsMjE3LDAsMCwwLAorICAgIDExNCwyMTgsMCwwLDAsMTE0LDE3MSwwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCwKKyAgICAxODQsMCwwLDAsMTE0LDIxOSwwLDAsMCwxMTQsMjIwLDAsMCwwLDExNCwyMjEsCisgICAgMCwwLDAsMTE0LDE1NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIzLDAsMCwKKyAgICAwLDM0LDMsMCwwLDExNSwyOCwwLDAsMCwxMiw3LDYsMiwxOCw0LAorICAgIDMsMSwxOCw0LDMsMSwzLDEsMywxLDI3LDksMywxLDIxLDUsCisgICAgMywxLDIxLDUsMywxLDExNCwyMjMsMCwwLDAsOTksMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCw2NCwwLDAsMCwKKyAgICAxMTUsOTcsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCw5MCw0LDAsMTAwLDMsMCwKKyAgICA5MCw1LDAsMTAwLDQsMCw5MCw2LDAsMTAxLDcsMCwxMDAsNSwwLDEwMCwKKyAgICA2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNywwLDEwMCw3LAorICAgIDAsMTAwLDgsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOSwwLDEwMSw3LDAsCisgICAgMTAwLDksMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMSwwLDEzMSwxLDAsOTAsCisgICAgMTAsMCwxMDAsOSwwLDgzLDQxLDEyLDIxOCwyMSw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LAorICAgIDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMjIsCisgICAgNjcsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLAorICAgIDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDEwMSwKKyAgICA5OSwxMDgsOTcsMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw4NywxMDUsCisgICAgMTEwLDEwMCwxMTEsMTE5LDExNSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDQ2LDEwLAorICAgIDMyLDMyLDMyLDMyLDEyMiw1OSw4MywxMTEsMTAyLDExNiwxMTksOTcsMTE0LDEwMSw5Miw4MCwKKyAgICAxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsNjcsMTExLDExNCwxMDEsCisgICAgOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMjUsOTIsNzcsCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKKyAgICAxMjUsMTIyLDY1LDgzLDExMSwxMDIsMTE2LDExOSw5NywxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LAorICAgIDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LAorICAgIDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDEyNSw5Miw2OCwKKyAgICAxMDEsOTgsMTE3LDEwMyw3MCw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLAorICAgIDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsNjcsMCwwLDAsMTIxLAorICAgIDIzLDAsMTE2LDAsMCwxMDYsMSwwLDExNiwwLDAsMTA2LDIsMCwxMjQsMSwKKyAgICAwLDEzMSwyLDAsODMsODcsMTEwLDM3LDAsNCwxMTYsMywwLDEwNywxMCwwLAorICAgIDExNCw2MiwwLDEsMSwxLDExNiwwLDAsMTA2LDEsMCwxMTYsMCwwLDEwNiwKKyAgICA0LDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg5LDExMCwxLDAsODgsMTAwLDAsCisgICAgMCw4Myw0MSwxLDc4LDQxLDUsMjE4LDcsOTUsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsCisgICAgOTAsNyw3OSwxMTIsMTAxLDExMCw3NSwxMDEsMTIxLDkwLDE3LDcyLDc1LDY5LDg5LDk1LAorICAgIDY3LDg1LDgyLDgyLDY5LDc4LDg0LDk1LDg1LDgzLDY5LDgyLDExNCw0MCwwLDAsCisgICAgMCw5MCwxOCw3Miw3NSw2OSw4OSw5NSw3Niw3OSw2Nyw2NSw3Niw5NSw3Nyw2NSwKKyAgICA2Nyw3Miw3Myw3OCw2OSw0MSwyLDExNCwyMTYsMCwwLDAsMjE4LDMsMTA3LDEwMSwKKyAgICAxMjEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDE0LDk1LDExMSwxMTIsMTAxLDExMCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLAorICAgIDk2LDMsMCwwLDExNSw4LDAsMCwwLDAsMiwzLDEsMjMsMSwxMywKKyAgICAxLDEyMiwzNiw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LAorICAgIDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsMTE0LAorICAgIDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5OSwyLDAsMCwwLDAsMCwwLDAsCisgICAgNiwwLDAsMCwxNiwwLDAsMCw2NywwLDAsMCwxMTUsMTQyLDAsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMTQsMjEsMCwxMjQsMCwwLDEwNiwxLDAsCisgICAgMTI1LDIsMCwxMTAsOSwwLDEyNCwwLDAsMTA2LDIsMCwxMjUsMiwwLDEyNCwKKyAgICAyLDAsMTA2LDMsMCwxMDAsMSwwLDEyNCwxLDAsMTAwLDIsMCwxMTYsNCwKKyAgICAwLDEwNiw1LDAsMTAwLDAsMCwxMDAsMywwLDEzMywyLDAsMjUsMTMxLDAsCisgICAgMiwxMjUsMywwLDEyMSw0NiwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywwLAorICAgIDEzMSwxLDAsMTQzLDI1LDAsMTI1LDQsMCwxMTYsNywwLDEwNiw4LDAsMTI0LAorICAgIDQsMCwxMDAsNCwwLDEzMSwyLDAsMTI1LDUsMCw4NywxMDAsMCwwLDgxLAorICAgIDg4LDg3LDExMCwyMiwwLDQsMTE2LDksMCwxMDcsMTAsMCwxMTQsMTM3LDAsMSwKKyAgICAxLDEsMTAwLDAsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCw1LDAsODMsNDEsCisgICAgNSw3OCwxMTQsMTc5LDAsMCwwLDkwLDExLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LAorICAgIDExNSwxMDUsMTExLDExMCwxMTQsMTIyLDAsMCwwLDExNCwzMCwwLDAsMCw0MSwxMCwKKyAgICAyMTgsMTEsNjgsNjksNjYsODUsNzEsOTUsNjYsODUsNzMsNzYsNjgsMjE4LDE4LDgyLAorICAgIDY5LDcxLDczLDgzLDg0LDgyLDg5LDk1LDc1LDY5LDg5LDk1LDY4LDY5LDY2LDg1LAorICAgIDcxLDIxOCwxMiw4Miw2OSw3MSw3Myw4Myw4NCw4Miw4OSw5NSw3NSw2OSw4OSwxMTQsCisgICAgNDcsMCwwLDAsMTE0LDcsMCwwLDAsMjE4LDcsMTE4LDEwMSwxMTQsMTE1LDEwNSwKKyAgICAxMTEsMTEwLDExNCwyMjgsMCwwLDAsMTE0LDIyNiwwLDAsMCw5MCwxMCw4MSwxMTcsCisgICAgMTAxLDExNCwxMjEsODYsOTcsMTA4LDExNywxMDEsMTE0LDQwLDAsMCwwLDQxLDYsMTE0LAorICAgIDIxNiwwLDAsMCwxMTQsMTc5LDAsMCwwLDkwLDEyLDExNCwxMDEsMTAzLDEwNSwxMTUsCisgICAgMTE2LDExNCwxMjEsOTUsMTA3LDEwMSwxMjEsMTE0LDIyNywwLDAsMCw5MCw0LDEwNCwxMDcsCisgICAgMTAxLDEyMSwyMTgsOCwxMDIsMTA1LDEwOCwxMDEsMTEyLDk3LDExNiwxMDQsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE2LDk1LDExNSwxMDEsCisgICAgOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDEwMywzLDAsCisgICAgMCwxMTUsMjIsMCwwLDAsMCwyLDksMSwxMiwyLDksMSwxNSwxLAorICAgIDIyLDEsMywxLDE4LDEsMjgsMSwxMywxLDksMSwxMjIsMzgsODcsMTA1LAogICAgIDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCi0gICAgNSwwLDAsMCw2NiwwLDAsMCwxMTUsNzQsMCwwLDAsMTI0LDAsMCwKLSAgICA2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLAotICAgIDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLAotICAgIDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LDAsMTAwLDYsCi0gICAgMCwxMDAsMTAsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMSwxMzEsMSwwLAotICAgIDkwLDgsMCwxMDAsOSwwLDgzLDQwLDExLDAsMCwwLDExNywxMywwLDAsCi0gICAgMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsMTE3LDgzLAotICAgIDAsMCwwLDY2LDk3LDExNSwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTExLDEwMiwKLSAgICAzMiw5OSwxMTEsMTA5LDEwOSwxMTEsMTEwLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMCwxMDEsMTAxLAotICAgIDEwMCwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5OCwxMTEsMTE2LDEwNCwzMiw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMTAsMzIsMzIsMzIsCi0gICAgMzIsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDUsCi0gICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsODgsMCwwLDAsCi0gICAgMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTAwLDEsMCwyNSwxMjUsMiwwLDEyNCwyLDAsMTA2LDIsMCwxMDAsCi0gICAgMiwwLDEwMCwxLDAsMTMxLDIsMCwxMDAsMywwLDI1LDEyNSwzLDAsMTI0LAotICAgIDEsMCwxMDYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMDAsNCwwLDI1LDEyNSwKLSAgICA0LDAsMTI0LDMsMCwxMDAsNSwwLDEwNywyLDAsMTExLDg3LDAsMTI0LDQsCi0gICAgMCwxMDAsNSwwLDEwNywzLDAsODMsNDAsNiwwLDAsMCwxMTcsMTQxLDAsCi0gICAgMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsCi0gICAgMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDMyLDk4LDEyMSwzMiw5OSwxMDQsMTAxLDk5LDEwNywxMDUsMTEwLAotICAgIDEwMywzMiwxMDUsMTAyLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsOTgsCi0gICAgMTIxLDMyLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMDQsCi0gICAgOTcsMTE1LDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLAotICAgIDMyLDM5LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw0NiwxMTIsMTIxLDM5LDQ2LDEwNSwKLSAgICAxLDAsMCwwLDExNywxLDAsMCwwLDQ2LDEwNSwwLDAsMCwwLDEwNSwKLSAgICAyLDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSwKLSAgICA5NSw0MCw0LDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDYsMCwwLDAsMTE0LDExNSwxMTIsMTA4LAotICAgIDEwNSwxMTYsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsCi0gICAgMTEwLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsCi0gICAgMCwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDEzLDAsMCwwLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5NSw5OCw5NywxMTUsMTAxLDExNyw5LDAsMCwwLAotICAgIDExNiw5NywxMDUsMTA4LDk1LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDI2LDMsMCwwLDExNSw4LDAsMCwwLDAsMywyNSwKLSAgICAxLDIyLDEsMTksMSwxMTcsMjQsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk5LDUsMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwyMiwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsMjA4LDEsMCwwLDEyNCwyLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzMywyLDAsMjUsMTI1LDUsMCwxMjQsMiwwLDEwMCwKLSAgICAyLDAsMTAwLDMsMCwxMzMsMiwwLDI1LDEyNSw2LDAsMTI0LDIsMCwxMDAsCi0gICAgMywwLDEwMCw0LDAsMTMzLDIsMCwyNSwxMjUsNywwLDEyNCw1LDAsMTE2LAotICAgIDAsMCwxMDcsMywwLDExNCwxMTUsMCwxMDAsNSwwLDEwNiwxLDAsMTI0LDEsCi0gICAgMCwxMjQsNSwwLDEzMSwyLDAsMTI1LDgsMCwxMTYsMiwwLDEyNCw4LDAsCi0gICAgMTMxLDEsMCwxLDExNiwzLDAsMTI0LDgsMCwxMDAsNiwwLDEyNCwxLDAsCi0gICAgMTAwLDcsMCwxMjQsMywwLDEzMSwxLDIsMTMwLDEsMCwxMTAsMTE2LDAsMTE2LAotICAgIDQsMCwxMjQsNiwwLDEzMSwxLDAsMTAwLDIsMCwxMDcsMywwLDExNCwxNzMsCi0gICAgMCwxMDAsOCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw5LDAsCi0gICAgMTE2LDIsMCwxMjQsOSwwLDEzMSwxLDAsMSwxMTYsNSwwLDEyNCw5LDAsCi0gICAgMTMxLDEsMCwxMzAsMSwwLDExMCw1OCwwLDExNiw0LDAsMTI0LDcsMCwxMzEsCi0gICAgMSwwLDEwMCwyLDAsMTA3LDMsMCwxMTQsMjMxLDAsMTAwLDksMCwxMDYsMSwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsOSwwLDExNiwyLDAsMTI0LDksMCwKLSAgICAxMzEsMSwwLDEsMTE2LDUsMCwxMjQsOSwwLDEzMSwxLDAsMTMwLDEsMCwKLSAgICAxMTAsMCwwLDEyNCw0LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxOTQsMSwxMjEsCi0gICAgMjAsMCwxMTYsNywwLDEyNCw0LDAsMTAwLDEwLDAsMjUsMTMxLDEsMCwxMjUsCi0gICAgMTAsMCw4NywxMTAsMTgsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDI3LDEsCi0gICAgMSwxLDEsODksMTEwLDcxLDAsODgsMTE2LDksMCwxMjQsNiwwLDEzMSwxLAotICAgIDAsMTI0LDEwLDAsMTA3LDMsMCwxMTQsOTgsMSwxMDAsMTEsMCwxMDYsMSwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCwxMjUsOSwwLDExNiwyLDAsMTI0LDksMCwxMzEsCi0gICAgMSwwLDEsMTE2LDMsMCwxMjQsOSwwLDEwMCw2LDAsMTI0LDEsMCwxMDAsCi0gICAgNywwLDEyNCwzLDAsMTMxLDEsMiwxMzAsMSwwLDExMCwwLDAsMTIxLDE4LAotICAgIDAsMTI0LDQsMCwxMDAsMTIsMCwyNSwxMDAsMTMsMCw2NCwxMjUsMTEsMCw4NywKLSAgICAxMTAsMTgsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDEzNiwxLDEsMSwxLAotICAgIDg5LDExMywxOTQsMSw4OCwxMTYsOSwwLDEyNCw3LDAsMTMxLDEsMCwxMjQsMTEsCi0gICAgMCwxMDcsMywwLDExNCwxOTQsMSwxMTYsMywwLDEwMCwxMSwwLDEwNiwxLDAsCi0gICAgMTI0LDEsMCwxMzEsMSwwLDEwMCw2LDAsMTI0LDEsMCwxMDAsNywwLDEyNCwKLSAgICAzLDAsMTMxLDEsMiwxMzAsMSwwLDExMywxOTQsMSwxMTAsMCwwLDEyNCwyLAotICAgIDAsMTAwLDQsMCwxMDAsMSwwLDEzMywyLDAsMjUsODMsNDAsMTQsMCwwLAotICAgIDAsMTE3LDE5MywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMTA4LDEwMSwxMDAsMzIsOTgsMTIxLDExNiwxMDEsCi0gICAgMTE1LDMyLDEwMiwxMTQsMTExLDEwOSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0NCwKLSAgICAzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDksCi0gICAgOTcsMTAzLDEwNSw5OSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTAsMTE3LDEwOSwKLSAgICA5OCwxMDEsMTE0LDQ0LDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsOTcsCi0gICAgMTEwLDEwMCwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExNSwxMDUsMTIyLDEwMSwzMiw5NywKLSAgICAxMDgsMTExLDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDk3LDEyMSw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICA5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsMTE1LDEwNywxMDUsMTEyLDMyLDExNiwxMDQsMTAxLDMyLDExNiwxMDUsMTA5LAotICAgIDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsOTksMTA0LDEwMSw5OSwxMDcsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsMTA1LDQsMCwwLDAsMTA1LDgsMCwKLSAgICAwLDAsMTA1LDEyLDAsMCwwLDExNywzMCwwLDAsMCw5OCw5NywxMDAsMzIsCi0gICAgMTA5LDk3LDEwMywxMDUsOTksMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMDUsMTEwLDMyLAotICAgIDEyMywzMywxMTQsMTI1LDU4LDMyLDEyMywzMywxMTQsMTI1LDExNyw0LDAsMCwwLDExMCwKLSAgICA5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywxOSwwLDAsCi0gICAgMCw5OCw5NywxMDAsMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwzMiwxMDUsCi0gICAgMTEwLDMyLDEyMywxMjUsMTE3LDE0LDAsMCwwLDk4LDk3LDEwMCwzMiwxMTUsMTA1LDEyMiwKLSAgICAxMDEsMzIsMTA1LDExMCwzMiwxMjMsMTI1LDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE3LDI0LDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwKLSAgICAxMTUsMzIsMTE1LDExNiw5NywxMDgsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEyMywxMjUsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwNSwxMjIsMTAxLDEwOCwzLDAsMCwwLDI1NSwxMjcsMjU1LDEyNywKLSAgICAzLDAsNDAsMTAsMCwwLDAsMTE3LDEyLDAsMCwwLDk1LDc3LDY1LDcxLAotICAgIDczLDY3LDk1LDY2LDg5LDg0LDY5LDgzLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LAotICAgIDEwOSw5NywxMTYsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLAotICAgIDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMSwwLDAsMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwKLSAgICAxMTcsOCwwLDAsMCw2OSw3OSw3MCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsMTA1LDExMCwxMTYsMTE3LDgsCi0gICAgMCwwLDAsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLDAsCi0gICAgOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw0MCwxMiwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsMTE3LDEzLDAsMCwwLAotICAgIDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLAotICAgIDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsNSwKLSAgICAwLDAsMCwxMDksOTcsMTAzLDEwNSw5OSwxMTcsMTMsMCwwLDAsMTE0LDk3LDExOSwKLSAgICA5NSwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDExNyw4LDAsMCwwLDExNCwKLSAgICA5NywxMTksOTUsMTE1LDEwNSwxMjIsMTAxLDExNywzLDAsMCwwLDEwOSwxMTUsMTAzLDExNywKLSAgICA3LDAsMCwwLDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMiwwLDAsMCwKLSAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDExLDAsMCwKLSAgICAwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDEwNSwxMjIsMTAxLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIwLDAsMCwwLDk1LDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwKLSAgICAxMDEsMzQsMywwLDAsMTE1LDY4LDAsMCwwLDAsNywxNiwxLDE2LDEsCi0gICAgMTYsMSwxMiwxLDE4LDEsMTAsMSwyNywxLDE4LDEsMTUsMSwxMCwxLAotICAgIDE1LDEsMTgsMSwxNSwxLDEwLDEsMTUsMSwxMiwxLDMsMSwyMCwxLAotICAgIDEzLDEsNSwyLDE4LDEsMTUsMSwxMCwxLDE1LDEsMTIsMSwzLDEsCi0gICAgMTgsMSwxMywxLDUsMiwxOCwxLDMsMSwxNSwxLDIxLDMsMTE3LDM0LAotICAgIDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSwKLSAgICA0Niw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsCi0gICAgMTAxLDk5LDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLAotICAgIDEwOCwxMDEsMTE1LDExNSw5OSwyLDAsMCwwLDEsMCwwLDAsNSwwLDAsCi0gICAgMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsMjI3LDAsMCwwLDEyNCwxLAotICAgIDAsMTA2LDAsMCwxMjUsMywwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMywwLAotICAgIDEzMSwxLDAsMTI1LDQsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDMsMCwxMzEsCi0gICAgMSwwLDEyNCwxLDAsOTUsMywwLDEyNCwyLDAsMTE1LDEwNiwwLDEyMSwyMiwKLSAgICAwLDExNiw0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwxLDAsMTI0LDEsMCwKLSAgICA5NSw1LDAsODcsMTEzLDExOCwwLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMTAyLAotICAgIDAsMSwxLDEsMTI0LDEsMCwxMDYsMywwLDEyNCwxLDAsOTUsNSwwLAotICAgIDg5LDExMywxMTgsMCw4OCwxMTAsMTIsMCwxMjQsMSwwLDEwNiwzLDAsMTI0LDEsCi0gICAgMCw5NSw1LDAsMTI0LDMsMCwxMjQsMSwwLDk1LDcsMCwxMjQsMCwwLAotICAgIDEwNiw4LDAsMTI0LDMsMCwxMzEsMSwwLDExNCwxNzAsMCwxMTYsOSwwLDEyNCwKLSAgICAxLDAsMTA2LDMsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTAzLDEsMCwxMjQsCi0gICAgMSwwLDk1LDEwLDAsMTEwLDI1LDAsMTI0LDEsMCwxMDYsNywwLDEwNiwxMSwKLSAgICAwLDEwMCwyLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEyNCwxLDAsOTUsNywKLSAgICAwLDEyNCwwLDAsMTI0LDEsMCw5NSwxMiwwLDExNiwxMywwLDExNiwxNCwwLAotICAgIDEyNCw0LDAsMTI0LDEsMCwxMDYsMTUsMCwxMzEsMywwLDEsMTI0LDEsMCwKLSAgICA4Myw0MCwzLDAsMCwwLDExNyw4MiwwLDAsMCw3MiwxMDEsMTA4LDExMiwxMDEsCi0gICAgMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDk3LDk4LDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLAotICAgIDMyLDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTExLAotICAgIDExNCwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMyw0NiwxMDUsMCwwLAotICAgIDAsMCwxMTcsMSwwLDAsMCw0Niw0MCwxNiwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsOCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwwLDk1LDk1LDEwMiwKLSAgICAxMDUsMTA4LDEwMSw5NSw5NSwxMTcsMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwKLSAgICAxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMTE3LDE5LDAsMCwwLDc4LAotICAgIDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDk1LDk1LDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LAotICAgIDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTcsMTAsCi0gICAgMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LAotICAgIDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNyw0LDAsMCwwLDEwMSwKLSAgICAxMjAsMTAxLDk5LDExNyw4LDAsMCwwLDk1LDk1LDEwMCwxMDUsOTksMTE2LDk1LDk1LAotICAgIDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw2LAotICAgIDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMCwwLDAsMCwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsMTEsMCwwLDAsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwxMDEsOTksCi0gICAgMTE2LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDgwLDMsCi0gICAgMCwwLDExNSwzMiwwLDAsMCwwLDQsOSwxLDE1LDEsMTgsMSw2LAotICAgIDEsMywxLDIyLDEsMTMsMSwyMCwyLDEyLDEsOSwxLDE1LDEsMjgsCi0gICAgMiwyNSwxLDksMSwxOSwxLDExNywyNiwwLDAsMCw5NSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsOTUsMTA4LDExMSw5NywxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNzAsNDAsOSwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDExNywyMCwwLDAsMCw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsCi0gICAgOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNywxNywKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNywxMiwKLSAgICAwLDAsMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksCi0gICAgMTE1LDIxLDMsMCwwLDExNSwxMCwwLDAsMCwxNiwzLDYsMiwxMiw4LAotICAgIDEyLDQ2LDYsMSwxMTcsMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDY2LDk3LDExNSwxMDUsOTksMTE1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLAotICAgIDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsMTE1LDEwNCwwLDAsMCwKLSAgICAxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLAotICAgIDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDkwLDMsMCwxMDAsMywwLDEwMCwKLSAgICA0LDAsMTMyLDAsMCw5MCw0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLAotICAgIDAsOTAsNSwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLDkwLDYsMCwKLSAgICAxMDAsOSwwLDEwMCwxMCwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMSwwLDEwMCwKLSAgICAxMiwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMywwLDEwMCwxNCwwLDEzMiwwLAotICAgIDAsOTAsOSwwLDEwMCwxNSwwLDgzLDQwLDE2LDAsMCwwLDExNywxMiwwLAotICAgIDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDEwLDAsMCwwLDExNiwwLDAsMTMwLDEsMCwxMDAsMSwKLSAgICAwLDgzLDQwLDIsMCwwLDAsMTE3LDEyMSwwLDAsMCw3OSwxMTIsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTYsMTA0LDk3LDExNiwKLSAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCi0gICAgMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMDUsMTA5LDEwMSwzMiw0MCwKLSAgICA5NywxMTAsMzIsMTA1LDExMCwxMTYsNDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMTAsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLAotICAgIDEwMCwzMiwxMTIsOTcsMTE2LDEwNCw0NCwzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDExMiw5NywKLSAgICAxMTYsMTA0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE1LDExNiwxMTQsNDYsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNzgsNDAsMSwwLDAsMCwxMTcsMTksMCwwLDAsCi0gICAgNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LAotICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMTA2LDMsMCwwLDExNSwyLDAsMCwwLDAsNCwKLSAgICAxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAorICAgIDEwMCwxMDEsMTE0LDQ2LDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsCisgICAgMTE1LDExNiwxMTQsMTIxLDc4LDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsCisgICAgMCwwLDEyLDAsMCwwLDY3LDAsMCwwLDExNSwxMzQsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMywwLDEyNCwzLAorICAgIDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzMSwwLDEwMCwxLDAsODMsMTIxLDE0LAorICAgIDAsMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsMjIsMCw0LAorICAgIDExNiwyLDAsMTA3LDEwLDAsMTE0LDY5LDAsMSwxLDEsMTAwLDEsMCw4MywKKyAgICA4OSwxMTAsMSwwLDg4LDEyMCw1NywwLDExNiwzLDAsMTMxLDAsMCw2OCw5MywKKyAgICA0NiwwLDkyLDIsMCwxMjUsNCwwLDEyNSw1LDAsMTI0LDMsMCwxMDYsNCwKKyAgICAwLDExNiw1LDAsMTI0LDUsMCwxMzEsMSwwLDEzMSwxLDAsMTE0LDgwLDAsCisgICAgMTI0LDQsMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCw4MywxMTMsODAsMCwKKyAgICA4NywxMDAsMSwwLDgzLDQxLDIsMTIyLDM0LDcwLDEwNSwxMTAsMTAwLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNDYsNzgsNDEsNiwxMTQsMjM0LAorICAgIDAsMCwwLDExNCwzOSwwLDAsMCwxMTQsNDAsMCwwLDAsMjE4LDI3LDk1LAorICAgIDEwMywxMDEsMTE2LDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsCisgICAgMTA4LDEwMSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwyMTgsOCwxMDEsMTEwLDEwMCwxMTUsCisgICAgMTE5LDEwNSwxMTYsMTA0LDIxOCw1LDExNiwxMTcsMTEyLDEwOCwxMDEsNDEsNiwxMTQsMjE2LDAsCisgICAgMCwwLDExNCwxNzksMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwyMzMsMCwwLAorICAgIDAsMTE0LDE2MSwwLDAsMCwxMTQsMTEzLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMTgsMCwwLDAsMTE4LAorICAgIDMsMCwwLDExNSwyMCwwLDAsMCwwLDMsMTUsMSwxMiwxLDQsMSwKKyAgICAzLDEsMTQsMSwxMywxLDksMSwyMiwxLDIxLDEsMTIyLDMzLDg3LDEwNSwKKyAgICAxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MSwKKyAgICAxMSwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwKKyAgICAxMTQsNTksMCwwLDAsMTE0LDIzMSwwLDAsMCwxMTQsMjMwLDAsMCwwLDExNCwKKyAgICAyMjksMCwwLDAsMTE0LDIyMiwwLDAsMCwxMTQsMjI4LDAsMCwwLDExNCwyMzQsCisgICAgMCwwLDAsMTE0LDIxOCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjI1LDAsMCwKKyAgICAwLDgzLDMsMCwwLDExNSwxNiwwLDAsMCwxMiwzLDYsMyw2LDMsCisgICAgNiwyLDYsMiwxOCw3LDE4LDE1LDMsMSwxMTQsMjI1LDAsMCwwLDk5LAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgNjQsMCwwLDAsMTE1LDU4LDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwKKyAgICAwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsCisgICAgMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwKKyAgICA5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMCwKKyAgICA4LDAsODMsNDEsOSwyMTgsMTMsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LAorICAgIDExNSwxMDUsOTksMTE1LDEyMiw4Myw2Niw5NywxMTUsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LAorICAgIDMyLDExMSwxMDIsMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiw5OSwxMTEsMTAwLDEwMSwzMiwKKyAgICAxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTgsMTExLDExNiwxMDQsMzIsODMsCisgICAgMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDEwLAorICAgIDMyLDMyLDMyLDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAorICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk5LDIsMCwwLDAsMCwwLAorICAgIDAsMCw1LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDg4LAorICAgIDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTI1LDIsMCwxMjQsMiwwLDEwNiwKKyAgICAyLDAsMTAwLDIsMCwxMDAsMSwwLDEzMSwyLDAsMTAwLDMsMCwyNSwxMjUsCisgICAgMywwLDEyNCwxLDAsMTA2LDMsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDQsCisgICAgMCwyNSwxMjUsNCwwLDEyNCwzLDAsMTAwLDUsMCwxMDcsMiwwLDExMSw4NywKKyAgICAwLDEyNCw0LDAsMTAwLDUsMCwxMDcsMywwLDgzLDQxLDYsMTIyLDE0MSw2NywKKyAgICAxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLAorICAgIDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LDExMiwxMDEsOTksCisgICAgMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSwzMiw5OCwxMjEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTA1LDExMCwxMDMsMzIsMTA1LAorICAgIDEwMiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMDMsCisgICAgMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTA0LDk3LDExNSwzMiwKKyAgICA5NywzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwzOSw5NSwKKyAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsMTEyLDEyMSwzOSw0NiwxMTQsMjksMCwwLAorICAgIDAsMTE0LDEwMiwwLDAsMCwxMTQsNjgsMCwwLDAsMTE0LDEwMSwwLDAsMCwKKyAgICAxMTQsNzcsMCwwLDAsNDEsNCwxMTQsMzgsMCwwLDAsMTE0LDE2NCwwLDAsCisgICAgMCwxMTQsMzQsMCwwLDAsMTE0LDMyLDAsMCwwLDQxLDUsMTE0LDc2LDAsCisgICAgMCwwLDExNCwxNzksMCwwLDAsMTE0LDExNywwLDAsMCw5MCwxMywxMDIsMTA1LAorICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTUsOTgsOTcsMTE1LDEwMSw5MCw5LDExNiw5NywxMDUsCisgICAgMTA4LDk1LDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwxNTcsMCwwLDAsMTM4LDMsMCwwLDExNSw4LAorICAgIDAsMCwwLDAsMywyNSwxLDIyLDEsMTksMSwxMjIsMjQsOTUsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LAorICAgIDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSwxMDAsMCwwLDAsMTI0LAorICAgIDAsMCwxMjQsMSwwLDk1LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTI0LDEsCisgICAgMCwxMzEsMiwwLDEsMTE2LDIsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsCisgICAgMCwxLDExNiwzLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDk2LAorICAgIDAsMTIxLDIyLDAsMTE2LDQsMCwxMjQsMSwwLDEwNiw1LDAsMTMxLDEsMCwKKyAgICAxMjQsMSwwLDk1LDYsMCw4NywxMTMsOTYsMCw0LDExNiw3LDAsMTA3LDEwLAorICAgIDAsMTE0LDkyLDAsMSwxLDEsODksMTEzLDk2LDAsODgsMTEwLDAsMCwxMDAsCisgICAgMiwwLDgzLDQxLDMsOTcsMiwxLDAsMCw4MywxMDEsMTE2LDMyLDExOCw5NywKKyAgICAxMTQsMTA1LDExMSwxMTcsMTE1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsCisgICAgMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw2OSwxMjAsMTAxLDk5LDExNywxMTYsMTA1LAorICAgIDExMSwxMTAsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTA1LDExNiw5NSwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5NSw5NywxMTYsMTE2LDExNCwxMTUsNDAsNDEsMzIsMTA1LDExNSwzMiwKKyAgICAxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDExNiwzMiw5NSw5NSwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQ0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSw0NCwzMiw5NSw5NSwxMDIsCisgICAgMTA1LDEwOCwxMDEsOTUsOTUsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMTEsMTEyLDExNiwxMDUsMTExLAorICAgIDExMCw5NywxMDgsMTA4LDEyMSwzMiw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0NiwzMiwKKyAgICA4NCwxMDQsMTAxLDMyLDk1LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk1LDk1LDMyLDk3LAorICAgIDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwxMDUsMTE1LDMyLDExNSwxMDEsMTE2LDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwKKyAgICAxMTIsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw0MCw0MSwzMiw5NywxMTAsMTAwLDMyLDk1LDk1LDEwMiwxMDUsMTA4LDEwMSwKKyAgICA5NSw5NSw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMTY1LDAsMCwKKyAgICAwLDc4LDQxLDgsMTE0LDE3MiwwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwxNjcsCisgICAgMCwwLDAsMTE0LDYwLDAsMCwwLDExNCwxMTgsMCwwLDAsMTE0LDE2NSwwLAorICAgIDAsMCwyMTgsMTAsOTUsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMTE0LDExMCwKKyAgICAwLDAsMCw0MSwyLDExNCw3NiwwLDAsMCwxMTQsMTYyLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNywKKyAgICAxMDUsMTEwLDEwNSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTcsMTE2LDExNiwxMTQsCisgICAgMTE1LDE0NiwzLDAsMCwxMTUsMTYsMCwwLDAsMCw3LDksMSwxMywxLAorICAgIDEzLDEsMTUsMSwzLDEsMjIsMSwxMywxLDEyMiwzMSw5NSw3NiwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsMTA1LDExMCwxMDUsMTE2LDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsNCwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTEyLDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDE0Myw5NCwKKyAgICAwLDEyNSwyLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwKKyAgICAxLDEyNCwwLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwKKyAgICAxMjQsMywwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNzksMCwxMTYsMywwLDEwMCwKKyAgICAyLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwKKyAgICAwLDExMCwwLDAsMTE2LDUsMCwxMTYsNiwwLDEyNCwzLDAsMTI0LDIsMCwKKyAgICAxMDYsNywwLDEzMSwzLDAsMSwxMjQsMiwwLDgzLDg3LDEwMCwxLDAsODEsCisgICAgODgsMTAwLDEsMCw4Myw0MSwzLDEyMiw1Nyw3NiwxMTEsOTcsMTAwLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDEwNSwKKyAgICAxMTYsNDYsNzgsMTIyLDUyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMTksMTA0LDEwMSwKKyAgICAxMTAsMzIsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsNDAsNDEsMzIsMTE0LDEwMSwxMTYsCisgICAgMTE3LDExNCwxMTAsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDQxLDgsMTE0LDE1NiwwLDAsMCwKKyAgICAxMTQsMjQwLDAsMCwwLDExNCwyMjAsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsCisgICAgNDcsMCwwLDAsMTE0LDEwMCwwLDAsMCwyMTgsNCwxMDEsMTIwLDEwMSw5OSwxMTQsCisgICAgNjMsMCwwLDAsNDEsNCwxMTQsNzYsMCwwLDAsMTE0LDE3OSwwLDAsMCwKKyAgICAxMTQsMTYyLDAsMCwwLDExNCwyMDUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIxOSwwLDAsMCwxNjIsMywKKyAgICAwLDAsMTE1LDE2LDAsMCwwLDAsMiwxNSwxLDEzLDEsMTUsMSwxMiwKKyAgICAxLDMsMSwyMSwxLDE5LDEsMTIyLDI1LDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw3OCw0MSw3LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LAorICAgIDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsMTU3LDAsMCwwLDExNCwyNDAsCisgICAgMCwwLDAsMTE0LDIxOSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjM4LDAsMCwKKyAgICAwLDEzMywzLDAsMCwxMTUsOCwwLDAsMCwxMiwzLDYsMiwxMiw4LAorICAgIDEyLDE2LDExNCwyMzgsMCwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsNCwwLDAsMCw2NCwwLDAsMCwxMTUsMTA2LDAsMCwKKyAgICAwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCisgICAgMTAwLDIsMCwxMzIsMCwwLDkwLDMsMCwxMDAsMywwLDEwMCw0LDAsMTMyLAorICAgIDAsMCw5MCw0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNSwKKyAgICAwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOSwwLAorICAgIDEwMCwxMCwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMSwwLDEwMCwxOCwwLDEwMCwKKyAgICAxMywwLDEwMCwxNCwwLDEzMiwwLDEsOTAsOCwwLDEwMCwxNSwwLDEwMCwxNiwKKyAgICAwLDEzMiwwLDAsOTAsOSwwLDEwMCwxNywwLDgzLDQxLDE5LDIxOCwxMiw4MywKKyAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDEwLDAsMCwwLDExNiwwLDAsMTMwLDEsMCwxMDAsMSwwLDgzLDQxLAorICAgIDIsMTIyLDE3OCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsCisgICAgMTExLDEwMCwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDMyLDExNiwxMDUsMTA5LDEwMSwzMiw0MCw5NywxMTAsMzIsMTA1LDExMCwxMTYsNDEsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LAorICAgIDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMTIsOTcsMTE2LDEwNCw0NCwzMiwxMTksCisgICAgMTA0LDEwMSwxMTQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE1LAorICAgIDExNiwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsOTcsMTA1LAorICAgIDExNSwxMDEsMTE1LDMyLDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA0LDEwMSwxMTAsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LAorICAgIDMyLDk4LDEwMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiw3OCw0MSwxLDIxOCw3LDczLDc5LDY5LDExNCwxMTQsMTExLAorICAgIDExNCw0MSwyLDExNCw3NiwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTc2LDMsMCwwLDExNSwyLDAsMCwKKyAgICAwLDAsNiwxMjIsMjMsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAogICAgIDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDk5LDIsMCwwLAogICAgIDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAogICAgIDAsMTE1LDIwLDAsMCwwLDEwNSwxLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMCwxMDAsMSwwLDU0LDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDExNCwxLDAsMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDUsMTEwLDEwMywzMiw5NywzMiwKLSAgICAxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMCwxMDUsOTksMTE2LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsCi0gICAgMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwKLSAgICA5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsMTE1LDExNiwxMTQsCi0gICAgNDEsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODAsMTExLDExNSwxMTUsMTA1LAotICAgIDk4LDEwOCwxMDEsMzIsMTA3LDEwMSwxMjEsMTE1LDU4LDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDQ1LDMyLDM5LDEwOSwxMTYsMTA1LDEwOSwxMDEsMzksMzIsNDAsMTA5LDk3LDExMCwKLSAgICAxMDAsOTcsMTE2LDExMSwxMTQsMTIxLDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLAotICAgIDExNywxMDksMTAxLDExNCwxMDUsOTksMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwKLSAgICAzMiwxMTEsMTAyLDMyLDEwOCw5NywxMTUsMTE2LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTExLDEwMCwxMDEsMzIsMTA5LAotICAgIDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDU5LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDQ1LDMyLDM5LDExNSwxMDUsMTIyLDEwMSwzOSwzMiw0MCwxMTEsCi0gICAgMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsNDEsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTUsMTA1LDEyMiwxMDEsMzIsMTA1LDExMCwzMiw5OCwxMjEsMTE2LDEwMSwxMTUsMzIsMTExLDEwMiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLAorICAgIDEsMCwxMzEsMSwwLDEwMCwxLDAsNTQsODMsNDEsMiw5NywxNzAsMSwwLAorICAgIDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCisgICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsOTcsMzIsMTA5LDEwMSwxMTYsCisgICAgOTcsMTAwLDk3LDExNiw5NywzMiwxMDAsMTA1LDk5LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDExMiw5NywxMTYsCisgICAgMTA0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsOTgsMTIxLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDExNSwxMTYsMTE0LDQxLDQ2LDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDgwLDExMSwxMTUsMTE1LDEwNSw5OCwxMDgsMTAxLAorICAgIDMyLDEwNywxMDEsMTIxLDExNSw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw0NSwKKyAgICAzMiwzOSwxMDksMTE2LDEwNSwxMDksMTAxLDM5LDMyLDQwLDEwOSw5NywxMTAsMTAwLDk3LDExNiwKKyAgICAxMTEsMTE0LDEyMSw0MSwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMCwxMTcsMTA5LDEwMSwKKyAgICAxMTQsMTA1LDk5LDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsMTExLDEwMiwKKyAgICAzMiwxMDgsOTcsMTE1LDExNiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDExMSwxMDAsMTAxLDMyLDEwOSwxMTEsMTAwLDEwNSwKKyAgICAxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCw1OSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw0NSwzMiwzOSwxMTUsMTA1LDEyMiwxMDEsMzksMzIsNDAsMTExLDExMiwxMTYsMTA1LAorICAgIDExMSwxMTAsOTcsMTA4LDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwNSwxMjIsCisgICAgMTAxLDMyLDEwNSwxMTAsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDExMSwxMDIsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsCisgICAgMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAzMiw5NywxMDgsMTA4LDExMSwxMTksMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsMzIsMTE2LDExMSwzMiwxMTQsMTAxLDk3LDEwMCwzMiw5OCwxMjEsMTE2LDEwMSw5OSwKKyAgICAxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDgyLDk3LDEwNSwxMTUsMTAxLDExNSwzMiw3Myw3OSw2OSwxMTQsMTE0LDExMSwKKyAgICAxMTQsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAorICAgIDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OCwxMDEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwKKyAgICAxMDAsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDE5NCwwLDAsMCwKKyAgICA0MSwxLDExNCwyNDQsMCwwLDAsNDEsMiwxMTQsNzYsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTg0LDMsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMTEsMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywKKyAgICAxMTYsMTE1LDk5LDQsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDMsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLDIsMCw4Myw0MSwxLDEyMiwyMjgsCisgICAgNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsCisgICAgMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsCisgICAgOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLAorICAgIDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLAogICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwKICAgICAxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LAotICAgIDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDExNCwxMDEsOTcsMTAwLDMyLDk4LDEyMSwKLSAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTUsNDYsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMTE3LDUsMCwwLDAsMTA5LDExNiwxMDUsMTA5LDEwMSwKLSAgICA0MCwxLDAsMCwwLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDksCi0gICAgMTE2LDEwNSwxMDksMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTIsMywwLDAsMTE1LDIsMCwwLDAsMCwKLSAgICAxMCwxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksNCwwLAotICAgIDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTYsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwyLDAsCi0gICAgMTI0LDMsMCwxMzEsMiwwLDgzLDQwLDEsMCwwLDAsMTE3LDIyOCwwLDAsCi0gICAgMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LAotICAgIDExNiw5NywzMiw0MCw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMzIsMTE2LDExMSwzMiw5NywzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsOTcsMzIsMTE1LDExNiwxMTQsCi0gICAgNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwKLSAgICAxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMDIsMTExLDExNCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsCi0gICAgMTAwLDMyLDEwNSwxMTAsMzIsMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDk5LDExMSwKLSAgICAxMTQsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMTYsMTE0LDk3LDExMCwxMTUsMTAyLDEwMSwxMTQsCi0gICAgMzIsMTEyLDEwMSwxMTQsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw0MCwxLDAsMCwwLDExNyw4LDAsMCwwLDExNSwKLSAgICAxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDAsNCwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEwLDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5Nyw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwwLDAsMCw5NSw5OSwKLSAgICA5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDEyNCwzLDAsCi0gICAgMCwxMTUsMiwwLDAsMCwwLDgsMTE3LDI4LDAsMCwwLDgzLDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTksOTcsOTksMTA0LDEwMSwKLSAgICA5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5OSwzLDAsMCwwLDAsMCwKLSAgICAwLDAsMywwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwxMTYsMCwwLDEzMCwxLDAsMTAwLDEsMCw4Myw0MCwyLDAsCi0gICAgMCwwLDExNywxNTEsMCwwLDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LAotICAgIDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLAotICAgIDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAotICAgIDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LAotICAgIDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwKLSAgICAxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsCi0gICAgMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MCwKLSAgICAxLDAsMCwwLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsNDAsMywwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5Nyw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwMCw5NywxMTYsOTcsMTM0LDMsMCwwLDExNSwyLDAsMCwwLDAsNiwKLSAgICAxMTcsMjEsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDk5LDIsMCwwLDAsMCwKLSAgICAwLDAsMCw5LDAsMCwwLDQ0LDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICA2MiwxLDAsMCwxMDAsMSwwLDEwMCwyLDAsMTA4LDAsMCwxMjUsMiwwLAotICAgIDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjEsCi0gICAgMTksMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDMsMCwxMzEsMSwwLDEyNSw0LAotICAgIDAsODcsMTEwLDU4LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCwxMDYsMCwxLAotICAgIDEyNSw1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCwzLDAsMTAwLDQsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LDEwMCwyLAotICAgIDAsMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCw4OCwxMTYsCi0gICAgNSwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEwNiw3LDAsMTI1LDYsCi0gICAgMCwxMjEsMTksMCwxMjQsMiwwLDEwNiw4LDAsMTI0LDYsMCwxMzEsMSwwLAotICAgIDEyNSw3LDAsODcsMTEwLDU4LDAsNCwxMTYsOSwwLDEwNywxMCwwLDExNCwyMDQsCi0gICAgMCwxLDEyNSw1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCw1LDAsMTAwLAotICAgIDQsMCwxMjQsMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LAotICAgIDEwMCwyLDAsMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCwKLSAgICA4OCwxMTYsNSwwLDEwNiwxMCwwLDEwMCwyLDAsMTAwLDcsMCwxMzEsMiwwLAotICAgIDEyNSw4LDAsMTIxLDMwLDAsMTI0LDgsMCwxMDYsMTMsMCwxMjQsNCwwLDEwNiwKLSAgICAxMywwLDEyNCw3LDAsMTAwLDEsMCwyNSwxMzEsMSwwLDEzMSwxLDAsODMsCi0gICAgODcsMTEwLDU4LDAsNCwxMTYsMTQsMCwxMDcsMTAsMCwxMTQsNTcsMSwxLDEyNSwKLSAgICA1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCw2LDAsMTAwLDQsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LDEwMCwyLDAsCi0gICAgMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCw4OCwxMDAsMiwKLSAgICAwLDgzLDQwLDgsMCwwLDAsMTE3LDUyLDAsMCwwLDY3LDExMSwxMTAsOTksCi0gICAgMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwKLSAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDYsCi0gICAgMTA1LDAsMCwwLDAsNzgsMTE3LDM5LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwzMiwKLSAgICAxMTYsMTA0LDExNCwxMTEsMTE3LDEwMywxMDQsMzIsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICA0MCw0MSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMjUsMCwwLDAsCi0gICAgNzAsOTcsMTA1LDEwOCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiwKLSAgICAzMiwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsMTE3LDI4LDAsMCwwLDcwLDk3LAotICAgIDEwNSwxMDgsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsODQsNDAsMTUsMCwwLDAsCi0gICAgMTE3LDgsMCwwLDAsMTE2LDExMSwxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTcsMTIsMCwKLSAgICAwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LDcsMCwwLDAsCi0gICAgNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLDExNywKLSAgICA3LDAsMCwwLDY2LDEyMSwxMTYsMTAxLDExNSw3Myw3OSwxMTcsOCwwLDAsMCwKLSAgICAxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsMTE3LDE1LDAsMCwwLDEwMCwxMDEsMTE2LAotICAgIDEwMSw5OSwxMTYsOTUsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDExNywxMSwwLDAsCi0gICAgMCw4MywxMjEsMTEwLDExNiw5NywxMjAsNjksMTE0LDExNCwxMTEsMTE0LDExNywyNSwwLDAsCi0gICAgMCw3MywxMTAsOTksMTE0LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTA4LDc4LDEwMSwxMTksMTA4LAotICAgIDEwNSwxMTAsMTAxLDY4LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsCi0gICAgMTExLDExMCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDYsMCwwLAotICAgIDAsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTgsMCwwLDAsODUsMTEwLDEwNSw5OSwKLSAgICAxMTEsMTAwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDQwLDksCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwKLSAgICAwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsMCwxMTYsMTExLAotICAgIDEwNywxMDEsMTEwLDEwNSwxMjIsMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywKLSAgICAxMiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDExNSwKLSAgICAxMTcsMywwLDAsMCwxMDEsMTIwLDk5LDExNywxMCwwLDAsMCwxMTQsMTAxLDk3LAotICAgIDEwMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNyw4LDAsMCwwLDEwMSwxMTAsOTksMTExLAotICAgIDEwMCwxMDUsMTEwLDEwMywxMTcsMTUsMCwwLDAsMTEwLDEwMSwxMTksMTA4LDEwNSwxMTAsMTAxLAotICAgIDk1LDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMTQzLDMsMCwwLDExNSwzOCwwLDAsMCwwLDIsMTIsMSwKLSAgICAxNSwxLDMsMSwxOSwxLDE4LDEsOSwxLDMxLDEsMTgsMSwzLDEsCi0gICAgMTksMSwxOCwxLDksMSwzMSwxLDE4LDEsMywxLDMwLDEsMTgsMSwKLSAgICA5LDEsMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsNDUsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDUyLDIsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwKLSAgICAwLDEzMSwxLDAsMTI1LDIsMCwxMDAsMTAsMCwxMjUsMywwLDEyMSwxNiwwLAotICAgIDExNiwyLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw0LDAsODcsMTEwLDI0LDAsCi0gICAgNCwxMTYsMywwLDEwNywxMCwwLDExNCw2MywwLDEsMSwxLDEwMCwxMCwwLAotICAgIDEyNSw0LDAsODksMTEwLDE0LDEsODgsMTIxLDE5LDAsMTI0LDAsMCwxMDYsNCwKLSAgICAwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNSwwLDg3LDExMCwxOCwwLDQsMTE2LAotICAgIDMsMCwxMDcsMTAsMCwxMTQsMTAzLDAsMSwxLDEsODksMTEwLDIzMCwwLDg4LAotICAgIDExNiw1LDAsMTI0LDUsMCwxMDAsMSwwLDI1LDEzMSwxLDAsMTI1LDMsMCwKLSAgICAxMjEsMTksMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEyNSwKLSAgICA2LDAsODcsMTEwLDE4LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTksMCwKLSAgICAxLDEsMSw4OSwxMTAsMTc0LDAsODgsMTIxLDI4LDAsMTI0LDAsMCwxMDYsOCwKLSAgICAwLDEyNCwxLDAsMTI0LDYsMCwxMjQsNCwwLDEyNCw1LDAsMTMxLDQsMCwKLSAgICAxMjUsNywwLDg3LDExMCwyNCwwLDQsMTE2LDksMCwxMTYsMTAsMCwxMDIsMiwKLSAgICAwLDEwNywxMCwwLDExNCwyMTQsMCwxLDEsMSw4OSwxMTAsMTE5LDAsODgsMTE2LAotICAgIDExLDAsMTAwLDIsMCwxMjQsNCwwLDEyNCwyLDAsMTMxLDMsMCwxLDExNiwKLSAgICAxMiwwLDEwNiwxMywwLDEyNCw3LDAsMTMxLDEsMCwxMjUsOCwwLDExNiwxNCwKLSAgICAwLDEyNCw4LDAsMTE2LDE1LDAsMTMxLDIsMCwxMTQsMzgsMSwxMTYsMTYsMCwKLSAgICAxMDYsMTcsMCwxMjQsOCwwLDEyNCwyLDAsMTMxLDIsMCwxLDExNiwxMSwwLAotICAgIDEwMCwzLDAsMTI0LDQsMCwxMzEsMiwwLDEsMTI0LDgsMCw4MywxMDAsNCwKLSAgICAwLDEyNSw5LDAsMTE2LDksMCwxMjQsOSwwLDEwNiwxOCwwLDEyNCw0LDAsCi0gICAgMTMxLDEsMCwxMDAsNSwwLDEyNCwxLDAsMTAwLDYsMCwxMjQsNCwwLDEzMSwKLSAgICAxLDIsMTMwLDEsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDIsMCwxMzEsMSwKLSAgICAwLDEyNSwxMCwwLDExNiwxOSwwLDExNiwyMCwwLDEyNCwxMCwwLDEyNCwyLDAsCi0gICAgMTAwLDcsMCwxMDAsOCwwLDEwMCwxMSwwLDEzMSw0LDEsMTI1LDExLDAsMTE2LAotICAgIDExLDAsMTAwLDMsMCwxMjQsMiwwLDEzMSwyLDAsMSwxMTYsMjIsMCwxMDYsCi0gICAgMjMsMCwxMiwxMTQsNDgsMiwxMjQsNCwwLDEwMCwxMCwwLDEwNyw5LDAsMTE0LAotICAgIDQ4LDIsMTI0LDMsMCwxMDAsMTAsMCwxMDcsOSwwLDExNCw0OCwyLDExNiwyNCwKLSAgICAwLDExNiwyNSwwLDEzMSwxLDAsMTI1LDYsMCwxMjQsNiwwLDEwNiwyNiwwLAotICAgIDExNiwyNywwLDEyNCwzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDYsMCwKLSAgICAxMDYsMjYsMCwxMTYsMjcsMCwxMTYsMjgsMCwxMjQsMTAsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCwxLDEyNCw2LDAsMTA2LDI2LDAsMTE2LDEyLDAsMTA2LAotICAgIDI5LDAsMTI0LDExLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTIxLDM2LDAsMTI0LAotICAgIDAsMCwxMDYsMzAsMCwxMjQsMiwwLDEyNCw0LDAsMTI0LDYsMCwxMzEsMywKLSAgICAwLDEsMTE2LDExLDAsMTAwLDksMCwxMjQsNCwwLDEzMSwyLDAsMSw4NywKLSAgICAxMTMsNDgsMiw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDQ0LDIsMSwxLDEsCi0gICAgODksMTEzLDQ4LDIsODgsMTEwLDAsMCwxMjQsMTEsMCw4Myw0MCwxMiwwLDAsCi0gICAgMCwxMTcsMTkwLDAsMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLAotICAgIDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDgyLDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwKLSAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDMyLDg0LDExMSwzMiwKLSAgICAxMTksMTE0LDEwNSwxMTYsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk4LDEyMSwKLSAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ0LDMyLDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgMzIsMTA5LDExNywxMTUsMTE2LDMyLDk3LDEwOCwxMTUsMTExLDMyLDk4LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDEzLAotICAgIDAsMCwwLDEyMywxMjUsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwzMiwxMjMsMTI1LAotICAgIDExNywxOSwwLDAsMCw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsCi0gICAgMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywxMjUsMTE3LDIxLDAsMCwwLDc4LDExMSwxMTAsCi0gICAgNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsCi0gICAgMTIzLDEyNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDEsMTIwLDEwMSw5OSwxMTcsMTIsMCwKLSAgICAwLDAsMTAwLDExMSwxMTAsMTE2LDk1LDEwNSwxMTAsMTA0LDEwMSwxMTQsMTA1LDExNiwxMTcsMTAsCi0gICAgMCwwLDAsMTE5LDExNCwxMTEsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw3OCw4NCw0MCwKLSAgICAzMSwwLDAsMCwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywKLSAgICAwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEwLDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsMywwLDAsMCwKLSAgICAxMDUsMTEwLDExNiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDExNyw3LDAsMCwwLDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMjAsMCwwLAotICAgIDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDgsMCwwLDAsNjksNzksNzAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwKLSAgICAxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwKLSAgICAxMDQsOTcsMTA4LDExNyw1LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDExNSwxMTcsMTAsMCwKLSAgICAwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTcsMTAsMCwwLAotICAgIDAsOTUsOTksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNyw0LDAsMCwwLAotICAgIDk1LDEwNSwxMDksMTEyLDExNywxNiwwLDAsMCw5NSwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsCi0gICAgOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwwLDEwMiwxMTEsCi0gICAgMTE0LDEwOSw5NywxMTYsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LAotICAgIDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwKLSAgICAxMDEsMTAwLDExNyw3LDAsMCwwLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDExNyw0LAotICAgIDAsMCwwLDg0LDExNCwxMTcsMTAxLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywKLSAgICAxOSwwLDAsMCwxMDAsMTExLDExMCwxMTYsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsOSwwLDAsMCw5OCwxMjEsMTE2LDEwMSwKLSAgICA5NywxMTQsMTE0LDk3LDEyMSwxMTcsMTIsMCwwLDAsOTUsNzcsNjUsNzEsNzMsNjcsCi0gICAgOTUsNjYsODksODQsNjksODMsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMDAsMTE3LDcsMCwwLDAsOTUsMTE5LDk1LDEwOCwxMTEsMTEwLDEwMywxMTcsMywwLAotICAgIDAsMCwxMDgsMTAxLDExMCwxMTcsNSwwLDAsMCwxMDAsMTE3LDEwOSwxMTIsMTE1LDExNywKLSAgICAxNSwwLDAsMCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LAotICAgIDExMSwxMDAsMTAxLDQwLDEyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDExLAotICAgIDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLAotICAgIDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsCi0gICAgMTMsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDIsMCwwLDAsMTE1LDExNiwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LAotICAgIDk3LDExNywxMCwwLDAsMCw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAwLDk3LDExNiw5NywKLSAgICAxMTcsNSwwLDAsMCwxMDIsMTExLDExNywxMTAsMTAwLDExNywzLDAsMCwwLDEwOSwKLSAgICAxMTUsMTAzLDExNywxMiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSwxMTcsMTEsMCwwLDAsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwKLSAgICAxMDEsOTksMTE2LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTY1LDMsMCwwLAotICAgIDExNSw5OCwwLDAsMCwwLDcsMTUsMSw2LDEsMywxLDE2LDEsMTMsCisgICAgMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsCisgICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLAorICAgIDMyLDEwNSwxMTAsMzIsMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDk5LDExMSwxMTQsCisgICAgMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMTYsMTE0LDk3LDExMCwxMTUsMTAyLDEwMSwxMTQsMzIsCisgICAgMTEyLDEwMSwxMTQsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiw0MSwxLDIxOCw4LDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCisgICAgNDEsNCwxMTQsNzYsMCwwLDAsMTE0LDEyNywwLDAsMCw5MCwxMCw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNCw1MywwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTUsOTUsOTksCisgICAgOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxOTcsMywwLAorICAgIDAsMTE1LDIsMCwwLDAsMCw4LDEyMiwyOCw4MywxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLAorICAgIDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTksMywwLDAsMCwwLDAsMCwwLDMsCisgICAgMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwKKyAgICAxMDAsMSwwLDgzLDQxLDIsMTIyLDE1MCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwKKyAgICAzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDExNCwKKyAgICAxMDUsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LDExNiw5NywzMiw0MCw5OCwxMjEsMTE2LDEwMSwxMTUsCisgICAgNDEsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsCisgICAgMzIsNDAsOTcsMzIsMTE1LDExNiwxMTQsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwKKyAgICAxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsCisgICAgMTE5LDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LAorICAgIDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsCisgICAgMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDExNCwKKyAgICA0LDAsMCwwLDQxLDMsMTE0LDc2LDAsMCwwLDExNCwzNSwwLDAsMCwKKyAgICAxMTQsNTMsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDI0NiwwLDAsMCwyMDcsMywwLDAsMTE1LDAsMCwKKyAgICAwLDAsMTIyLDIxLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsNSwwLDAsMCwxNiwwLDAsMCw2NywwLDAsMCwxMTUsMTA1LAorICAgIDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LAorICAgIDIsMCwxMjEsMTksMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwKKyAgICAwLDEyNSwzLDAsODcsMTEwLDU4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCwKKyAgICA5NCwwLDEsMTI1LDQsMCwxLDEyMiwyNiwwLDExNiwzLDAsMTAwLDEsMCwKKyAgICAxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMjQsNCwwLDEzMCwyLDAsODcsCisgICAgODksMTAwLDMsMCwxMDAsMywwLDEyNSw0LDAsMTI2LDQsMCw4OCwxMTAsMSwKKyAgICAwLDg4LDExNiw0LDAsMTI0LDMsMCwxMzEsMSwwLDgzLDQxLDQsMTIyLDUyLAorICAgIDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwKKyAgICAxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSwKKyAgICA5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsNDYsMTIyLDM5LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEwLDExMSwxMTYsCisgICAgMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwzMiwxMTYsMTA0LDExNCwxMTEsMTE3LAorICAgIDEwMywxMDQsMzIsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MCw0MSwxMTQsNzIsMCwKKyAgICAwLDAsNzgsNDEsNSwxMTQsMTY0LDAsMCwwLDIxOCw4LDEwMywxMDEsMTE2LDk1LAorICAgIDEwMCw5NywxMTYsOTcsMTE0LDQwLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDIxNCwKKyAgICAwLDAsMCw0MSw1LDExNCw3NiwwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCwKKyAgICAzNSwwLDAsMCwxMTQsMjEyLDAsMCwwLDIxOCwzLDEwMSwxMjAsOTksMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIyMSwwLAorICAgIDAsMCwyMTQsMywwLDAsMTE1LDE0LDAsMCwwLDAsMiwxNSwxLDMsCisgICAgMSwxOSwxLDE4LDEsOSwxLDMxLDEsMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSwyMTgsOSw5NSwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDExNCwyOSwwLAorICAgIDAsMCw5OSwzLDAsMCwwLDEsMCwwLDAsNCwwLDAsMCw5LAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwzMSwwLDAsMCwxMTYsMCwwLDExNiwKKyAgICAxLDAsMTI0LDEsMCwxMjQsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsMywKKyAgICAwLDEwMCw0LDAsMTI0LDMsMCwxMzEsNCwyLDgzLDQxLDUsMTIyLDEzMCw4MiwKKyAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSwKKyAgICA5OCwxMDYsMTAxLDk5LDExNiwzMiw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsMzIsMTAyLAorICAgIDExNCwxMTEsMTA5LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDAsOTcsMTE2LDk3LDM5LDMyLAorICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiw5OSw5NywxMTAsMzIsOTgsMTAxLDMyLAorICAgIDk3LDExMCwxMjEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDExNiwxMjEsMTEyLDEwMSwzMiwKKyAgICAxMTYsMTA0LDk3LDExNiwzMiw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSw0MCw0MSwzMiwxMTUsCisgICAgMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTE1LDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDExNCwyNDEsMCwwLDAsMjE4LDEyLDEwMCwxMTEsMTEwLDExNiw5NSwxMDUsMTEwLDEwNCwKKyAgICAxMDEsMTE0LDEwNSwxMTYsODQsMTE0LDEwNCwwLDAsMCw0MSwyLDExNCwxMDAsMCwwLAorICAgIDAsMjE4LDcsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsNDEsNCwxMTQsNzYsMCwwLAorICAgIDAsMTE0LDUzLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMjUwLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICAxNCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNiwxMTEsOTUsOTksMTExLDEwMCwxMDEsMjI0LAorICAgIDMsMCwwLDExNSw0LDAsMCwwLDAsNSwxOCwxLDEyMiwyNyw4MywxMTEsCisgICAgMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExNSwxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsOTUsMTE2LDExMSw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMTAsMCwwLDAsNDUsMCwwLDAsNjcsMCwwLDAsMTE1LDE3NywKKyAgICAxLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwKKyAgICAyLDAsMTAwLDEsMCwxMjUsMywwLDEyMSwxNiwwLDExNiwxLDAsMTI0LDIsCisgICAgMCwxMzEsMSwwLDEyNSw0LDAsODcsMTEwLDI0LDAsNCwxMTYsMiwwLDEwNywKKyAgICAxMCwwLDExNCw2MywwLDEsMSwxLDEwMCwxLDAsMTI1LDQsMCw4OSwxMTAsCisgICAgMjAyLDAsODgsMTIxLDE5LDAsMTI0LDAsMCwxMDYsMywwLDEyNCwyLDAsMTMxLAorICAgIDEsMCwxMjUsNSwwLDg3LDExMCwxOCwwLDQsMTE2LDQsMCwxMDcsMTAsMCwKKyAgICAxMTQsMTAzLDAsMSwxLDEsODksMTEwLDE2MiwwLDg4LDExNiw1LDAsMTI0LDUsCisgICAgMCwxMDAsMiwwLDI1LDEzMSwxLDAsMTI1LDMsMCwxMjEsMTksMCwxMjQsMCwKKyAgICAwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEyNSw2LDAsODcsMTEwLDE4LAorICAgIDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTksMCwxLDEsMSw4OSwxMTAsCisgICAgMTA2LDAsODgsMTIxLDM0LDAsMTE2LDgsMCwxMjQsNiwwLDEwMCwzLDAsMTI0LAorICAgIDUsMCwxMDAsNCwwLDEyNCwxLDAsMTAwLDUsMCwxMjQsNCwwLDEzMSwxLAorICAgIDMsMTI1LDcsMCw4NywxMTAsMjQsMCw0LDExNiw5LDAsMTE2LDEwLDAsMTAyLAorICAgIDIsMCwxMDcsMTAsMCwxMTQsMjIwLDAsMSwxLDEsODksMTEwLDQ1LDAsODgsCisgICAgMTE2LDExLDAsMTAwLDYsMCwxMjQsNCwwLDEyNCwyLDAsMTMxLDMsMCwxLAorICAgIDExNiwxMiwwLDEyNCw3LDAsMTAwLDQsMCwxMjQsMSwwLDEwMCw3LDAsMTI0LAorICAgIDQsMCwxMDAsOCwwLDEyNCwyLDAsMTMxLDEsMyw4MywxMjQsMCwwLDEwNiwKKyAgICA2LDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw4LDAsMTI0LDAsMCwxMDYsMTMsCisgICAgMCwxMjQsOCwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsOSwwLDExNiwxMSwwLAorICAgIDEwMCw5LDAsMTI0LDIsMCwxMzEsMiwwLDEsMTE2LDE0LDAsMTA2LDE1LDAsCisgICAgMTIsMTE0LDE3MywxLDEyNCw0LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxNzMsMSwKKyAgICAxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTczLDEsMTE2LDE2LDAsMTI0LAorICAgIDksMCwxMjQsMywwLDExNiwxNywwLDEyNCw4LDAsMTMxLDEsMCwxMzEsMywKKyAgICAwLDEyNSw2LDAsMTIxLDM2LDAsMTI0LDAsMCwxMDYsMTgsMCwxMjQsMiwwLAorICAgIDEyNCw0LDAsMTI0LDYsMCwxMzEsMywwLDEsMTE2LDExLDAsMTAwLDEwLDAsCisgICAgMTI0LDQsMCwxMzEsMiwwLDEsODcsMTEzLDE3MywxLDQsMTE2LDIsMCwxMDcsCisgICAgMTAsMCwxMTQsMTY5LDEsMSwxLDEsODksMTEzLDE3MywxLDg4LDExMCwwLDAsCisgICAgMTI0LDksMCw4Myw0MSwxMSwxMjIsMTkwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLAorICAgIDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwKKyAgICAxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDgyLDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwKKyAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LAorICAgIDMyLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwzMiwxMTYsMTExLDMyLDk4LAorICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDMyLDg0LAorICAgIDExMSwzMiwxMTksMTE0LDEwNSwxMTYsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ0LDMyLDExNSwxMDEsMTE2LDk1LDEwMCw5NywKKyAgICAxMTYsOTcsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk3LDEwOCwxMTUsMTExLDMyLDk4LDEwMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDc4LDExNCwxOTQsMCwwLDAsMTE0LDE5OCwwLDAsCisgICAgMCwxMTQsNzIsMCwwLDAsMTE0LDM1LDAsMCwwLDEyMiwxMywxMjMsMTI1LDMyLAorICAgIDEwOSw5NywxMTYsOTksMTA0LDEwMSwxMTUsMzIsMTIzLDEyNSwxMTQsMTI2LDAsMCwwLDExNCwKKyAgICAxMjcsMCwwLDAsMTIyLDE5LDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LAorICAgIDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDEyNSwxMjIsMTAsMTE5LDExNCwxMTEsMTE2LDEwMSwKKyAgICAzMiwxMjMsMzMsMTE0LDEyNSw0MSwxOSwxMTQsMTY0LDAsMCwwLDExNCwxMTgsMCwwLAorICAgIDAsMTE0LDExMCwwLDAsMCwxMTQsMjQ1LDAsMCwwLDExNCwyNDMsMCwwLDAsCisgICAgMTE0LDE0LDAsMCwwLDExNCwyNDgsMCwwLDAsMTE0LDQwLDAsMCwwLDExNCwKKyAgICAyMDEsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMTk3LDAsMCwwLDExNCwxMzgsCisgICAgMCwwLDAsMTE0LDIwNiwwLDAsMCwxMTQsMjUzLDAsMCwwLDExNCw3LDAsCisgICAgMCwwLDIxOCwxOSwxMDAsMTExLDExMCwxMTYsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSw5OCwKKyAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMjA5LDAsMCwwLDExNCwzMSwwLDAsCisgICAgMCwxMTQsMjQ3LDAsMCwwLDQxLDEwLDExNCw3NiwwLDAsMCwxMTQsMTc5LDAsCisgICAgMCwwLDExNCwxMjcsMCwwLDAsMTE0LDE5OSwwLDAsMCwxMTQsMTI2LDAsMCwKKyAgICAwLDIxOCwyLDExNSwxMTYsMTE0LDUzLDAsMCwwLDIxOCwxMCw5OCwxMjEsMTE2LDEwMSwKKyAgICAxMTUsOTUsMTAwLDk3LDExNiw5NywxMTQsMjEyLDAsMCwwLDkwLDExLDk5LDExMSwxMDAsCisgICAgMTAxLDk1LDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIwLDAsMCwwLDIzMiwzLDAsMCwKKyAgICAxMTUsNzgsMCwwLDAsMCw3LDE1LDEsNiwxLDMsMSwxNiwxLDEzLAogICAgIDEsMTEsMiwzLDEsMTksMSwxMywxLDUsMiwxNiwxLDMsMSwxOSwKLSAgICAxLDEzLDEsNSwyLDMsMSwxMiwxLDMsMSwxMywxLDE5LDEsNSwKLSAgICAyLDksMSw3LDEsMTUsMSwxNSwxLDE2LDEsNiwxLDcsMSw0LAotICAgIDIsNiwxLDE4LDEsMTUsMSwxNSwxLDYsMSwxMiwxLDksMSwxMywKLSAgICAxLDIyLDEsMTIsMSwxMiwxLDE5LDEsMjUsMSwyMiwxLDMsMSwxOSwKLSAgICAxLDE3LDEsMTMsMSw4LDEsMTE3LDIxLDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwKLSAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTI0LDAsMCwxMDYsMCwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDExNywwLDEsCi0gICAgMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MiwxMDEsMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSwxMTUsMzIsNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTEsMTEwLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsCi0gICAgOTcsMTEwLDEwMCwzMiw4MiwxMDEsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk4LAotICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKLSAgICAxMDEsMTEwLDExNiwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA4LDExMSw5NywxMDAsMzIsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwzMiw4NSwxMTUsMTAxLDMyLDExMSwKLSAgICAxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMDAsMTA1LAotICAgIDk5LDExNiw5NywxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwxMDEsCi0gICAgMTE0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwMywxMDEsMTE2LDk1LDk5LDExMSwKLSAgICAxMDAsMTAxLDMyLDExNywxMTUsMTAxLDExNSw0NywxMTksMTE0LDEwNSwxMTYsMTAxLDExNSwzMiw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw0MCwxLDAsMCwwLDExNywxMiwwLDAsMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjI3LAotICAgIDMsMCwwLDExNSwyLDAsMCwwLDAsOCwxMTcsMjQsMCwwLDAsODMsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCwxMCwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDExNywxMCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LDE1LDAsMCwwLDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDgsMCwwLAotICAgIDAsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywxMTcsMTAsMCwwLDAsMTAzLDEwMSwKLSAgICAxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiwKLSAgICA5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTA0LDMsMCwwLDExNSwxNCwwLDAsMCwxNiwKLSAgICAyLDEyLDYsMTIsMTIsMTIsMTAsMTIsOSwxMiwyMiwxMiw2MiwxMTcsMTIsMCwKLSAgICAwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwwLDIsCi0gICAgMCwwLDAsMTE1LDkyLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwKLSAgICAxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsCi0gICAgMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMSw1LDAsMTM1LDAsMCwKLSAgICAxMDIsMSwwLDEwMCw0LDAsMTAwLDUsMCwxMzQsMCwwLDEzMSwxLDAsOTAsCi0gICAgNiwwLDEwMSw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsCi0gICAgMCw5MCw3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsOCwwLAotICAgIDEzNSwwLDAsODMsNDAsMTAsMCwwLDAsMTE3LDEwLDAsMCwwLDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTAzLDAsMCwwLDY2LDk3LDExNSwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksMTA4LAotICAgIDk3LDExNSwxMTUsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLAotICAgIDExMiwxMTQsMTExLDExNiwxMTEsOTksMTExLDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsCi0gICAgMzIsMTE2LDEwNCw5NywxMTYsMTAsMzIsMzIsMzIsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiwxMTcsMTE1LAotICAgIDk3LDEwMywxMDEsNDYsOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLAotICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTI0LDEsCi0gICAgMCwxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLAotICAgIDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNzUsMCwwLDAsNjcsOTcsCi0gICAgOTksMTA0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsCi0gICAgOTcsMTA5LDEwMSwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LAotICAgIDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMiwxMTEsMTE3LAotICAgIDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDc4LDQwLDIsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsNDAsMywwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDI0MywzLAotICAgIDAsMCwxMTUsNCwwLDAsMCwwLDMsOSwxLDExNywxOSwwLDAsMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsCi0gICAgMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDMsMCwwLDAsMywwLDAsMCwxMTUsMjIsMCwwLDAsMTE2LDAsMCwKLSAgICAxMTYsMSwwLDEyNCwwLDAsMTMxLDIsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLAotICAgIDEsMCw4Myw0MCwxLDAsMCwwLDExNywyNiwwLDAsMCw3NiwxMTEsOTcsCi0gICAgMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICA5NywzMiwxMDIsMTA1LDEwOCwxMDEsNDYsNDAsMywwLDAsMCwxMTcsNSwwLDAsCi0gICAgMCwxMTUsMTE3LDExMiwxMDEsMTE0LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwxLDAsMCwwLDExNyw5LDAsMCwwLDk1LDk1LDk5LDEwOCw5NywxMTUsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDgsCi0gICAgMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyNDksMywwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCw1LDExNywyMiwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsNywwLDAsMCwxMjQsMCwwLDEwNiwwLDAsCi0gICAgODMsNDAsMSwwLDAsMCwxMTcsNTgsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LAotICAgIDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk3LDExNSwKLSAgICAzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0Niw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLAotICAgIDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMCw0LDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDMsMTE3LDIzLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsOCwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsNDEsMCwwLDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDE0MywxNywwLDEyNSwyLAotICAgIDAsMTI0LDIsMCwxMDYsMiwwLDEzMSwwLDAsODMsODcsMTAwLDIsMCw4MSwKLSAgICA4OCwxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDM5LDAsMCwwLDgyLAotICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDIsCi0gICAgMTE0LDExMSwxMDksMzIsMTEyLDk3LDExNiwxMDQsMzIsOTcsMTE1LDMyLDExNCw5NywxMTksMzIsCi0gICAgOTgsMTIxLDExNiwxMDEsMTE1LDQ2LDExNywxLDAsMCwwLDExNCw3OCw0MCwzLDAsCi0gICAgMCwwLDExNywzLDAsMCwwLDk1LDEwNSwxMTEsMTE3LDYsMCwwLDAsNzAsCi0gICAgMTA1LDEwOCwxMDEsNzMsNzksMTE3LDQsMCwwLDAsMTE0LDEwMSw5NywxMDAsNDAsMywKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw1LDQsMCwwLDExNSw0LDAsMCwwLAotICAgIDAsMiwyMSwxLDExNywxOSwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MCw5LDAsMCwKLSAgICAwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwKLSAgICAwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsCi0gICAgMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsCi0gICAgOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LAotICAgIDk1LDEwMCw5NywxMTYsOTcsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMSwKLSAgICAwLDAsMCwxMTcsOSwwLDAsMCw5NSw5NSw5OSwxMDgsOTcsMTE1LDExNSw5NSwKLSAgICA5NSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwyMzgsMywwLDAsMTE1LDEwLDAsMCwwLDE2LDMsNiwyLDEyLAotICAgIDYsMjQsNywxOCw1LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAotICAgIDAsNCwwLDAsMCw2NiwwLDAsMCwxMTUsNjgsMCwwLDAsMTI0LDAsCi0gICAgMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwKLSAgICAwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsCi0gICAgMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLAotICAgIDcsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMSw5MCw2LDAsMTAwLDEwLAotICAgIDAsODMsNDAsMTEsMCwwLDAsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDYyLDAsMCwKLSAgICAwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE3LDExNSwxMDUsMTEwLDEwMywzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksNDYsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMzksMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMCwxMjUsMiwwLDEwNSwyLDAsMTI0LDIsMCwxMDYsMiwKLSAgICAwLDEwMCwxLDAsNTQsMTI0LDIsMCwxMDYsMywwLDEwMCwyLDAsNTQsODMsCi0gICAgNDAsMywwLDAsMCwxMTcsMzMsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDQ2LDExNyw1LDAsMCwwLAotICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTE1LDEwNSwxMjIsMTAxLDQwLDQsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNCwwLDAsMCwKLSAgICAxMTUsMTE2LDk3LDExNiwxMTcsOCwwLDAsMCwxMTUsMTE2LDk1LDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTE1LDExNiw5NSwxMTUsMTA1LDEyMiwxMDEsNDAsMywwLAotICAgIDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsMTE3LDIsMCwwLDAsMTE1LDExNiw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTUsNCwwLDAsMTE1LDQsMCwwLDAsMCwKLSAgICAyLDE1LDEsMTE3LDI3LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiwKLSAgICA5NywxMTYsMTE1LDk5LDQsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAotICAgIDEzLDAsMCwwLDY3LDAsMCwwLDExNSw4MSwwLDAsMCwxMjEsMjIsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEwNiwyLDAsMTI1LAotICAgIDQsMCw4NywxMTAsMjQsMCw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDQ4LDAsCi0gICAgMSwxLDEsMTAwLDEsMCwxMjUsNCwwLDg5LDExMCwxLDAsODgsMTI0LDQsCi0gICAgMCwxMDAsMiwwLDc5LDEyNSw0LDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwyLAotICAgIDAsMTI0LDMsMCwxMDAsMywwLDEyNCw0LDAsMTMxLDIsMSw4Myw0MCw0LAotICAgIDAsMCwwLDc4LDEwNSwxODIsMSwwLDAsMTA1LDEyOCwwLDAsMCwxMTcsNSwKLSAgICAwLDAsMCw5NSwxMDksMTExLDEwMCwxMDEsNDAsNSwwLDAsMCwxMTcsMywwLAotICAgIDAsMCw5NSwxMTEsMTE1LDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LDExNyw3LAotICAgIDAsMCwwLDExNSwxMTYsOTUsMTA5LDExMSwxMDAsMTAxLDExNyw3LDAsMCwwLDc5LAotICAgIDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDAsCi0gICAgOTcsMTE2LDk3LDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNywxMSwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDExNywxMywwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDExNyw0LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LAotICAgIDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLAotICAgIDYyLDExNywxNSwwLDAsMCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsCi0gICAgMTAxLDk5LDExMSwxMDAsMTAxLDIwLDQsMCwwLDExNSwxMiwwLDAsMCwwLDIsCi0gICAgMywxLDIyLDEsMTMsMSwxMSwzLDEwLDEsMTE3LDMyLDAsMCwwLDgzLAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsCi0gICAgNSwwLDAsMCw5NSwxMDksMTExLDEwMCwxMDEsMTA1LDE4MiwxLDAsMCw5OSwzLAorICAgIDEsMTMsMSw1LDIsMywxLDksMSwxMiwxLDEzLDEsMTksMSw1LAorICAgIDIsOSwxLDcsMSwxNSwxLDYsMSw3LDEsMTUsMSwxOCwxLDEzLAorICAgIDEsMjIsMSwxMiwxLDksMSwxNSwxLDMsMSwxOSwxLDE3LDEsMTMsCisgICAgMSw4LDEsMTIyLDIxLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsNzgsMTE0LDEyNCwwLDAsMCwKKyAgICA0MSwxMCwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsCisgICAgMCwxMTQsMjQ0LDAsMCwwLDExNCwyNDUsMCwwLDAsMTE0LDI0NywwLDAsMCwKKyAgICAxMTQsMjQ2LDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDI1MywwLDAsMCwxMTQsCisgICAgMjIwLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCwyNDIsMCwwLDAsMTc0LDMsMCwKKyAgICAwLDExNSwxNCwwLDAsMCwxMiwyLDEyLDgsMTIsMTMsMTIsMTAsMTIsNywKKyAgICAxMiwxMCwxOCw4LDExNCwyNDIsMCwwLDAsOTksMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDExNSw4OCwKKyAgICAwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCisgICAgMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LAorICAgIDAsMTAxLDUsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDQsMCwxMDAsNSwwLAorICAgIDEzNCwwLDAsMTMxLDEsMCw5MCw2LDAsMTAxLDUsMCwxMDAsNiwwLDEwMCwKKyAgICA3LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDAsOCwwLDEwMCw5LAorICAgIDAsMTMyLDAsMCw5MCw4LDAsMTM1LDAsMCw4Myw0MSwxMCwyMTgsMTAsNzAsCisgICAgMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEyMiwxMDMsNjYsOTcsMTE1LDEwMSwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LAorICAgIDExNSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwKKyAgICAxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTEyLDExNCwKKyAgICAxMTEsMTE2LDExMSw5OSwxMTEsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiwxMTYsCisgICAgMTA0LDk3LDExNiwxMCwzMiwzMiwzMiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDMyLDExNywxMTUsOTcsMTAzLAorICAgIDEwMSw0Niw5OSwzLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwyLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwwLDEyNCwKKyAgICAwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDEsCisgICAgMCw4Myw0MSwyLDEyMiw3NSw2Nyw5Nyw5OSwxMDQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDk3LDExMCwxMDAsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwKKyAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDYsNzgsNDEsMiwxMTQsNzIsMCwwLDAsMTE0LDM1LDAsMCwwLDQxLDMsCisgICAgMTE0LDc2LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NywKKyAgICAwLDAsMCwzMyw0LDAsMCwxMTUsNCwwLDAsMCwwLDMsOSwxLAorICAgIDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LAorICAgIDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDMsMCwwLDAsMywwLDAsMCwxMTUsMjIsMCwwLDAsMTE2LAorICAgIDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLDIsMCwxMDYsMiwwLDEyNCwxLAorICAgIDAsMTMxLDEsMCw4Myw0MSwxLDEyMiwyNiw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSwzMiw5NywzMiwxMDIsMTA1LAorICAgIDEwOCwxMDEsNDYsNDEsMywxMTQsMTQ5LDAsMCwwLDExNCwxLDEsMCwwLDExNCwKKyAgICAyMTksMCwwLDAsNDEsMiwxMTQsNzYsMCwwLDAsMTE0LDE3OSwwLDAsMCwKKyAgICA0MSwxLDExNCwxNTEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDIxOSwwLDAsMCwzOSw0LDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDUsMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLAorICAgIDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw3LAorICAgIDAsMCwwLDEyNCwwLDAsMTA2LDAsMCw4Myw0MSwxLDEyMiw1OCw4MiwxMDEsCisgICAgMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsCisgICAgMzIsOTcsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDQxLDEsMTE0LDM1LDAsMCwwLDQxLAorICAgIDIsMTE0LDc2LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE2NCwwLDAsMCw0NiwKKyAgICA0LDAsMCwxMTUsMiwwLDAsMCwwLDMsMTIyLDIzLDcwLDEwNSwxMDgsMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLAorICAgIDk3LDEwOSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCisgICAgOCwwLDAsMCw2NywwLDAsMCwxMTUsNDEsMCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsMSwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDE0MywxNywwLDEyNSwKKyAgICAyLDAsMTI0LDIsMCwxMDYsMiwwLDEzMSwwLDAsODMsODcsMTAwLDIsMCwKKyAgICA4MSw4OCwxMDAsMiwwLDgzLDQxLDMsMTIyLDM5LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDIsMTE0LDExMSwxMDksMzIsMTEyLAorICAgIDk3LDExNiwxMDQsMzIsOTcsMTE1LDMyLDExNCw5NywxMTksMzIsOTgsMTIxLDExNiwxMDEsMTE1LAorICAgIDQ2LDIxOCwxLDExNCw3OCw0MSwzLDExNCw0OSwwLDAsMCwxMTQsNTAsMCwwLAorICAgIDAsOTAsNCwxMTQsMTAxLDk3LDEwMCw0MSwzLDExNCw3NiwwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsMTE0LDU0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwyNDgsMCwwLDAsNTEsNCwwLDAsCisgICAgMTE1LDQsMCwwLDAsMCwyLDIxLDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQxLDksCisgICAgMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LAorICAgIDU5LDAsMCwwLDExNCw3NywwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCwyMTksCisgICAgMCwwLDAsMTE0LDE2NCwwLDAsMCwxMTQsMjQ4LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDE1MSwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMSwxLDAsMCwyOCw0LDAsMCwxMTUsMTAsMCwwLAorICAgIDAsMTIsMyw2LDIsMTIsNiwyNCw3LDE4LDUsMTE0LDEsMSwwLDAsCisgICAgOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsCisgICAgMCw2NCwwLDAsMCwxMTUsNjQsMCwwLDAsMTAxLDAsMCw5MCwxLDAsCisgICAgMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsCisgICAgMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwKKyAgICAwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTAwLDgsMCwxMDAsOSwwLAorICAgIDEzMiwwLDEsOTAsNiwwLDEwMCwxMCwwLDgzLDQxLDExLDIxOCwxNiw4MywxMTEsCisgICAgMTE3LDExNCw5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEyMiw2MiwKKyAgICA2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsCisgICAgMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw4MywxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDQ2LDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDM2LDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwKKyAgICAwLDEyNSwyLDAsMTA1LDIsMCwxMjQsMiwwLDEwNiwxLDAsMTAwLDEsMCwKKyAgICA1NCwxMjQsMiwwLDEwNiwyLDAsMTAwLDIsMCw1NCw4Myw0MSwzLDEyMiwzMywKKyAgICA4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDk3LDEwMCwKKyAgICA5NywxMTYsOTcsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsCisgICAgNDYsMTE0LDE5NCwwLDAsMCwxMTQsMTk1LDAsMCwwLDQxLDMsMTE0LDM5LDAsCisgICAgMCwwLDIxOCw4LDExNSwxMTYsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSw5MCw3LDExNSwxMTYsCisgICAgOTUsMTE1LDEwNSwxMjIsMTAxLDQxLDMsMTE0LDc2LDAsMCwwLDExNCwzNSwwLDAsCisgICAgMCwxMTQsMjU1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwyNDUsMCwwLDAsNjEsNCwwLDAsMTE1LDQsCisgICAgMCwwLDAsMCwyLDEyLDEsMTIyLDI3LDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwKKyAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LAorICAgIDExNiw5NywxMTYsMTE1LDk5LDQsMCwwLDAsMCwwLDAsMCw1LDAsMCwKKyAgICAwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDM0LDAsMCwwLDExNiwwLAorICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw0LDAsMTI0LDAsMCwxMDYsMSwwLAorICAgIDEyNCwyLDAsMTI0LDMsMCwxMDAsMSwwLDEyNCw0LDAsMTMxLDIsMSw4MywKKyAgICA0MSwyLDc4LDIxOCw1LDk1LDEwOSwxMTEsMTAwLDEwMSw0MSwyLDExNCwxMzAsMCwwLAorICAgIDAsMTE0LDI0NiwwLDAsMCw0MSw1LDExNCw3NiwwLDAsMCwxMTQsMTI3LDAsCisgICAgMCwwLDExNCwxMjYsMCwwLDAsMTE0LDUzLDAsMCwwLDExNCw0MiwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMjQ3LDAsMCwwLDY2LDQsMCwwLDExNSw0LDAsMCwwLDAsMiwKKyAgICAxMiwxLDEyMiwzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsCisgICAgOTksMTExLDEwMCwxMDEsMTE0LDUsMSwwLDAsMTA1LDE4MiwxLDAsMCw5OSwzLAogICAgIDAsMCwwLDEsMCwwLDAsOSwwLDAsMCwxOCwwLDAsMCw2NywKICAgICAwLDAsMCwxMTUsNTMsMSwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLAogICAgIDAsOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMDMsMCwwLDEyNSw2LDAsCkBAIC0yNTA3LDE1NCArMjA2OSw5MiBAQAogICAgIDg3LDExMCw1MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsNDgsMSwxLDEyNSwKICAgICA4LDAsMSwxMjIsMjEsMCwxMTYsOSwwLDEwMCwxLDAsMTI0LDEsMCwxMjQsCiAgICAgOCwwLDEzMSwzLDAsMSw4Nyw4OSwxMDAsMiwwLDEwMCwyLDAsMTI1LDgsCi0gICAgMCwxMjYsOCwwLDg4LDExMCwxLDAsODgsMTAwLDIsMCw4Myw0MCw0LDAsCi0gICAgMCwwLDExNywyNywwLDAsMCw4NywxMTQsMTA1LDExNiwxMDEsMzIsOTgsMTIxLDExNiwKLSAgICAxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwKLSAgICAxMDEsNDYsMTE3LDI3LDAsMCwwLDk5LDExMSwxMTcsMTA4LDEwMCwzMiwxMTAsMTExLDExNiwKLSAgICAzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLAotICAgIDExNCwxMjUsNzgsMTE3LDEyLDAsMCwwLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwxMDAsMzIsCi0gICAgMTIzLDMzLDExNCwxMjUsNDAsMTEsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE3LDYsMCwwLDAsOTcsMTEyLAotICAgIDExMiwxMDEsMTEwLDEwMCwxMTcsOCwwLDAsMCwxMTQsMTAxLDExOCwxMDEsMTE0LDExNSwxMDEsCi0gICAgMTAwLDExNywxMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsCi0gICAgMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNSwwLDAsMCwxMDksMTA3LDEwMCwKLSAgICAxMDUsMTE0LDExNywxNSwwLDAsMCw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsCi0gICAgMTE1LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsMCw3OSw4Myw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LAotICAgIDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMywwLDAsMCw5NSwxMTksMTE0LDEwNSwKLSAgICAxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSw0MCw5LDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICAxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDExNyw1LDAsMCwwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDEwMSwxMTcsNiwwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTEyLDk3LDExNCwxMTYsMTE1LDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTQsMTE2LDExNywzLDAsMCwwLDEwMSwxMjAsOTksNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwKLSAgICAxMDAsOTcsMTE2LDk3LDMxLDQsMCwwLDExNSwzOCwwLDAsMCwwLDIsMTgsCi0gICAgMSw2LDIsMjIsMSwxOCwxLDE3LDIsMTksMSwxNSwxLDMsMSwxNywKLSAgICAxLDEzLDIsNywxLDE4LDMsMTYsMSwyNywxLDMsMSwxNiwxLDE3LAotICAgIDEsMTgsMiwxMTcsMjUsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LAotICAgIDk3LDc4LDQwLDcsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LAotICAgIDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LAotICAgIDE1LDAsMCwwLDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksCi0gICAgMTExLDEwMCwxMDEsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICA0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LAotICAgIDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMSw0LDAsMCwxMTUsOCwwLDAsMCwxNiwyLAotICAgIDYsMiwxMiw1LDEyLDExLDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsCi0gICAgMTE1LDYyLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLAotICAgIDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLAotICAgIDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLAotICAgIDgsMCw4Myw0MCw5LDAsMCwwLDExNywyMCwwLDAsMCw4MywxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsNDUsMCwwLDAsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExOSwxMDQsMTA1LAotICAgIDk5LDEwNCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDExNSwzMiwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDEwOCwxMDEsMTE1LDExNSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTE1LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwwLDEyNCwwLDAsCi0gICAgMTA2LDAsMCwxMjQsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzEsMSwxLDgzLAotICAgIDQwLDMsMCwwLDAsNzgsMTE3LDEwLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMTA4LDEwMSwxMTUsMTE1LDg0LDQwLDIsMCwwLDAsMTE3LDEyLDAsMCwwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw2NCw0LDAsMCwKLSAgICAxMTUsMiwwLDAsMCwwLDEsMTE3LDMyLDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCw2LDAsMCwwLDYsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDEzOCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEyNSwyLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsCi0gICAgMCwxMjUsMywwLDEyNCwwLDAsMTA2LDIsMCwxMjQsMSwwLDEyNCwzLDAsCi0gICAgMTI0LDIsMCwxMDAsMCwwLDEzMSw0LDAsMTI1LDQsMCwxMTYsNCwwLDEwNiwKLSAgICA1LDAsMTI0LDQsMCwxMzEsMSwwLDEyNSw1LDAsMTE2LDYsMCwxMjQsNSwKLSAgICAwLDExNiw3LDAsMTMxLDIsMCwxMTQsMTAxLDAsMTE2LDgsMCwxMDAsMSwwLAotICAgIDEyNCwyLDAsMTMxLDIsMCwxLDEyNCw1LDAsODMsMTE2LDksMCwxMDAsMiwKLSAgICAwLDEwNiwxMCwwLDEyNCwyLDAsMTMxLDEsMCwxMDAsMywwLDEyNCwxLDAsCi0gICAgMTAwLDQsMCwxMjQsMiwwLDEzMSwxLDIsMTMwLDEsMCwxMDAsMCwwLDgzLAotICAgIDQwLDUsMCwwLDAsNzgsMTE3LDIxLDAsMCwwLDk5LDExMSwxMDAsMTAxLDMyLAotICAgIDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsCi0gICAgMTE3LDIxLDAsMCwwLDc4LDExMSwxMTAsNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LAotICAgIDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsMTIzLDEyNSwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwxMSwwLDAsCi0gICAgMCwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKLSAgICAxMDksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LAotICAgIDIwLDAsMCwwLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsCi0gICAgOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwxMTcsNSwwLAotICAgIDAsMCwxMDgsMTExLDk3LDEwMCwxMTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsMTA1LDExMCwKLSAgICAxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE3LDEwLDAsMCwwLDk1LDk5LDExMSwxMDAsMTAxLAotICAgIDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLAotICAgIDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDExLDAsMCwwLDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSw5NywxMTYsNDAsNiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywKLSAgICAxMTYsOTcsMTE3LDEwLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsMTE2LAotICAgIDk3LDExNyw1LDAsMCwwLDEwMiwxMTEsMTE3LDExMCwxMDAsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICA5OSwxMTEsMTAwLDEwMSw2Nyw0LDAsMCwxMTUsMTgsMCwwLDAsMCwxLDE1LAotICAgIDEsMTUsMSwyNCwxLDE1LDEsMTUsMSwxMywxLDQsMiwxOCwxLDExNywKLSAgICAyOSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAotICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDAsCi0gICAgMiwwLDAsMCwxMTcsMzksMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKLSAgICA3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE1LAotICAgIDMyLDExMCwxMTEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwKLSAgICA3OCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLAotICAgIDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDc5LDQsMCwwLDExNSwyLDAsMCwwLDAsMiwKLSAgICAxMTcsMzEsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwKLSAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSw3OCw0MCw3LDAsMCwwLDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSwKLSAgICA5OSw5NSw5NSwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDIwLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDYwLDQsMCwwLDExNSw4LDAsMCwKLSAgICAwLDE2LDIsNiwyLDEyLDMsMTIsMTIsMTE3LDIwLDAsMCwwLDgzLDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDUsCi0gICAgMCwwLDAsNjYsMCwwLDAsMTE1LDEwNCwwLDAsMCwxMjQsMCwwLDY5LAotICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsCi0gICAgMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDEsNSwKLSAgICAwLDEwMSw2LDAsMTAxLDcsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwKLSAgICAxMzEsMSwwLDEzMSwxLDAsMTMxLDEsMCw5MCw4LDAsMTAwLDYsMCwxMDAsCi0gICAgNywwLDEzMiwwLDAsOTAsOSwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwKLSAgICAwLDkwLDEwLDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCwxMSwwLAotICAgIDEwMCwxMiwwLDgzLDQwLDEzLDAsMCwwLDExNywxOSwwLDAsMCw2OSwxMjAsCi0gICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsOTMsMCwwLDAsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LAorICAgIDAsMTI2LDgsMCw4OCwxMTAsMSwwLDg4LDEwMCwyLDAsODMsNDEsNCwxMjIsCisgICAgMjcsODcsMTE0LDEwNSwxMTYsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMDAsOTcsMTE2LAorICAgIDk3LDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDEyMiwyNyw5OSwxMTEsCisgICAgMTE3LDEwOCwxMDAsMzIsMTEwLDExMSwxMTYsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDEyMywKKyAgICAzMywxMTQsMTI1LDU4LDMyLDEyMywzMywxMTQsMTI1LDc4LDEyMiwxMiw5OSwxMTQsMTAxLDk3LAorICAgIDExNiwxMDEsMTAwLDMyLDEyMywzMywxMTQsMTI1LDQxLDExLDExNCwzOCwwLDAsMCwxMTQsCisgICAgNDYsMCwwLDAsMTE0LDE2NiwwLDAsMCwxMTQsMzMsMCwwLDAsMTE0LDI4LAorICAgIDAsMCwwLDExNCwzLDAsMCwwLDkwLDUsMTA5LDEwNywxMDAsMTA1LDExNCwyMTgsCisgICAgMTUsNzAsMTA1LDEwOCwxMDEsNjksMTIwLDEwNSwxMTUsMTE2LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsCisgICAgMTE0LDQwLDAsMCwwLDExNCwxMzgsMCwwLDAsMTE0LDU1LDAsMCwwLDQxLAorICAgIDksMTE0LDc2LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNTMsMCwwLDAsCisgICAgMTE0LDUsMSwwLDAsMjE4LDYsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwxMTQsMTE3LDAsCisgICAgMCwwLDExNCwyNywwLDAsMCwxMTQsMjMsMCwwLDAsMTE0LDI0OSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMjQ2LDAsMCwwLDcxLDQsMCwwLDExNSwzOCwwLDAsMCwwLDIsCisgICAgMTgsMSw2LDIsMjIsMSwxOCwxLDE3LDIsMTksMSwxNSwxLDMsMSwKKyAgICAxNywxLDEzLDIsNywxLDE4LDMsMTYsMSwyNywxLDMsMSwxNiwxLAorICAgIDE3LDEsMTgsMiwxMjIsMjUsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDc4LAorICAgIDQxLDcsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLAorICAgIDAsMTE0LDU5LDAsMCwwLDExNCwyNDUsMCwwLDAsMTE0LDI0NywwLDAsMCwKKyAgICAxMTQsMjQ2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzLDEsMCwwLDU3LDQsCisgICAgMCwwLDExNSw4LDAsMCwwLDEyLDIsNiwyLDEyLDUsMTIsNSwxMTQsCisgICAgMywxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwzLDAsMCwwLDAsMCwwLDAsMTE1LDY0LDAsMCwwLDEwMSwwLAorICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLAorICAgIDEzNSwwLDAsMTAyLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTM0LDAsMCw5MCwKKyAgICA0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LAorICAgIDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMzUsMCwwLDgzLDQxLDgsCisgICAgMjE4LDIwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEyMiw0NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE5LAorICAgIDEwNCwxMDUsOTksMTA0LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTE1LDMyLDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwxMTUsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwzMiwwLDAsMCwxMTYsCisgICAgMCwwLDEzMSwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMSwxMjQsCisgICAgMSwwLDEwNiwyLDAsMTI0LDEsMCw5NSwzLDAsMTAwLDAsMCw4Myw0MSwKKyAgICAxLDc4LDQxLDQsMTE0LDE0OSwwLDAsMCwxMTQsMjQwLDAsMCwwLDExNCwxNjUsCisgICAgMCwwLDAsMTE0LDIzOSwwLDAsMCw0MSwyLDExNCw3NiwwLDAsMCwxMTQsCisgICAgMTYyLDAsMCwwLDQxLDEsMTE0LDE1MSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMjQwLDAsMCwwLDEwNCw0LDAsMCwxMTUsNCwKKyAgICAwLDAsMCwwLDEsMTYsMSwxMjIsMzgsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwKKyAgICAxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwKKyAgICAxMDUsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw2LDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw3NiwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwyLAorICAgIDAsMTMxLDEsMCwxMjUsMywwLDExNiwyLDAsMTI0LDMsMCwxMDAsMSwwLAorICAgIDEyNCwxLDAsMTAwLDIsMCwxMjQsMiwwLDEzMSwxLDIsMTI1LDQsMCwxMTYsCisgICAgMywwLDEyNCw0LDAsMTAwLDEsMCwxMjQsMSwwLDEwMCwzLDAsMTI0LDIsCisgICAgMCwxMzEsMSwyLDgzLDQxLDQsNzgsMTE0LDcyLDAsMCwwLDExNCwzNSwwLAorICAgIDAsMCwxMTQsMTI2LDAsMCwwLDQxLDQsMTE0LDE2NCwwLDAsMCwxMTQsMjQ4LAorICAgIDAsMCwwLDExNCwyMDEsMCwwLDAsMTE0LDIwNiwwLDAsMCw0MSw1LDExNCwKKyAgICA3NiwwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNTMsCisgICAgMCwwLDAsMTE0LDAsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDIyMCwwLDAsMCwxMDgsNCwwLDAsCisgICAgMTE1LDgsMCwwLDAsMCwxLDE1LDEsMTUsMSwyNCwxLDEyMiwyOSw4MywKKyAgICAxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsMzksODIsMTAxLAorICAgIDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsCisgICAgMTE0LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwKKyAgICA5OSwxMTEsMTAwLDEwMSw0Niw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3NiwwLAorICAgIDAsMCwxMTQsMTc5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDQsMCwwLDExNSwKKyAgICAyLDAsMCwwLDAsMiwxMjIsMzEsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsCisgICAgMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsCisgICAgOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0MSw3LDExNCw1NywwLDAsMCwxMTQsNTYsCisgICAgMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsMjQwLDAsCisgICAgMCwwLDExNCwyMjAsMCwwLDAsMTE0LDIyMSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCw0MSwxLDExNCwxNTEsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDgsMSwwLDAsMTAwLDQsMCwwLDExNSw4LDAsMCwwLAorICAgIDEyLDIsNiwyLDE4LDQsMTIsNiwxMTQsOCwxLDAsMCw5OSwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LDAsCisgICAgMCwwLDExNSwxMTgsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCwKKyAgICA5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwKKyAgICAwLDAsOTAsNCwwLDEwMSw1LDAsMTAxLDYsMCwxMDEsNywwLDEwMCw0LAorICAgIDAsMTAwLDUsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLAorICAgIDkwLDgsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw5LDAsMTAwLAorICAgIDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsMTAsMCwxMDAsMTEsCisgICAgMCwxMzIsMCwwLDkwLDExLDAsMTAxLDUsMCwxMDAsMTIsMCwxMDAsMTMsMCwKKyAgICAxMzIsMCwwLDEzMSwxLDAsOTAsMTIsMCwxMDAsMTQsMCw4Myw0MSwxNSwyMTgsCisgICAgMTksNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsMTIyLDkzLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwKICAgICAzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAogICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw5OSwxMTEsMTEwLAogICAgIDExNSwxMTYsMTE0LDExNyw5OSwxMTYsMTExLDExNCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwKQEAgLTI2NjMsNTI5ICsyMTYzLDQyMSBAQAogICAgIDMyLDMyLDMyLDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAogICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLDAsCiAgICAgMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5Niw0LDAsMCwxMTUsNCwwLAotICAgIDAsMCwwLDEsOSwxLDExNywyOCwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsCi0gICAgMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsMTAsMCwwLDAsNjcsMCwwLDAsMTE1LDE3NSwwLDAsCi0gICAgMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDEyNSwyLDAsCi0gICAgMTIxLDEwNywwLDExNiwyLDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTI0LAotICAgIDAsMCwxMDYsNSwwLDEzMSwzLDAsMTI1LDMsMCwxMTYsNiwwLDEwMCwxLAotICAgIDAsMTI0LDAsMCwxMDYsNSwwLDEzMSwyLDAsMSwxMjQsMCwwLDEwNiw3LAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxMTcsMCwxMTYsOCwwLDEyNCwzLDAsCi0gICAgMTAwLDIsMCwxMzEsMiwwLDEyLDExNCwxMTcsMCwxMTYsOSwwLDEyNCwwLDAsCi0gICAgMTA2LDUsMCwxMzEsMSwwLDEwMCwzLDAsMjUsMTAzLDEsMCwxMjQsMywwLAotICAgIDk1LDEwLDAsMTEwLDAsMCwxMjQsMywwLDgzLDg3LDExMCw0NiwwLDEsMSwKLSAgICAxLDEyNCwyLDAsMTIsMTE0LDE2MywwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEwNyw2LDAsMTE0LDE2MywwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLAotICAgIDYxLDExMCwwLDAsMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCw0LDAsODMsCi0gICAgNDAsNSwwLDAsMCwxMTcsMjUsMCwwLDAsNzYsMTExLDk3LDEwMCwzMiw5NywKLSAgICAxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsNDYsMTE3LDMzLDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsCi0gICAgMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDExNyw4LDAsMCwwLDk1LDk1LAotICAgIDExMiw5NywxMTYsMTA0LDk1LDk1LDEwNSwwLDAsMCwwLDc4LDQwLDExLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwKLSAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCi0gICAgMTE4LDEwMSwxMDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwMCwxMjEsMTEwLDk3LDEwOSwxMDUsOTksMTE3LDQsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LAotICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwKLSAgICAxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMDQsCi0gICAgOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDk1LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOSwKLSAgICAwLDAsMCwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsMTE3LDYsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwKLSAgICAwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTAwLDQsMCwwLDExNSwyNCwwLDAsMCwwLDUsMTUsMSwKLSAgICAzLDEsOSwxLDE1LDEsMTYsMSwzMSwxLDI4LDEsOCwxLDMsMSwKLSAgICAyMiwxLDEzLDEsMTE3LDMxLDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LAotICAgIDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwxMTUsNDgsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMDAsMSwKLSAgICAwLDI1LDEzNywwLDAsMTE2LDIsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDIsCi0gICAgMCwxMDAsMywwLDEzNCwwLDAsMTE2LDMsMCw2OCwxMzEsMSwwLDEzMSwxLAotICAgIDAsODMsNDAsNCwwLDAsMCwxMTcsNDksMCwwLDAsODIsMTAxLDExNiwxMTcsCi0gICAgMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwMSwKLSAgICAxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDEwNSwxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDEwNSwxLDAsCi0gICAgMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsCi0gICAgMCwwLDAsNTEsMCwwLDAsMTE1LDMxLDAsMCwwLDEyNCwwLDAsOTMsCi0gICAgMjEsMCwxMjUsMSwwLDEzNiwwLDAsMTAwLDAsMCwxMjQsMSwwLDIzLDEwNywKLSAgICAyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNzgsNDAsMCwKLSAgICAwLDAsMCw0MCwyLDAsMCwwLDExNywyLDAsMCwwLDQ2LDQ4LDExNywKLSAgICA2LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDQwLDEsMCwwLDAsMTE3LAotICAgIDksMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDk1LDExMCw5NywxMDksMTAxLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLAotICAgIDExNCw2MiwxMjEsNCwwLDAsMTE1LDIsMCwwLDAsNiwxLDExNyw0OSwwLAotICAgIDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwKLSAgICAxMTIsMTE0LDYyLDQwLDQsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDMsMCwwLDAsOTcsMTEwLDEyMSwxMTcsMTgsMCwwLDAsNjksODgsCi0gICAgODQsNjksNzgsODMsNzMsNzksNzgsOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsCi0gICAgNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsCi0gICAgNDAsMSwwLDAsMCwxMTcsOSwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSwxMTgsNCwwLDAsMTE1LDYsMCwwLDAsMCwyLDE5LAotICAgIDEsMTgsMSwxMTcsMzAsMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsCi0gICAgMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwKLSAgICAxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDYzLDAsMCwwLDgyLDEwMSwKLSAgICAxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk3LDExMCwzMiwKLSAgICAxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDk3LAotICAgIDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiw0Niw3OCw0MCwxLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwKLSAgICAxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLAotICAgIDEyNCw0LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI4LDAsMCwwLAorICAgIDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDcyLDAsMCwwLDExNCwzNSwwLAorICAgIDAsMCw0MSwzLDExNCw3NiwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw3NywwLDAsMCwxMzEsNCwwLDAsMTE1LDQsMCwwLDAsCisgICAgMCwxLDksMSwxMjIsMjgsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwKKyAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAorICAgIDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxMjYsMCwwLDAsMTE2LDAsMCwxMjQsCisgICAgMSwwLDEzMSwxLDAsMTQzLDEwOCwwLDEsMTE2LDEsMCwxMTYsMiwwLDEwNiwKKyAgICAzLDAsMTI0LDEsMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDMsMCwxMjUsMiwKKyAgICAwLDExNiw1LDAsMTAwLDEsMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDIsMCwKKyAgICAxLDEyNCwwLDAsMTA2LDYsMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDExMiwwLAorICAgIDExNiw3LDAsMTI0LDIsMCwxMDAsMiwwLDEzMSwyLDAsMTIsMTE0LDExMiwwLAorICAgIDExNiw4LDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsMTAwLDMsMCwyNSwKKyAgICAxMDMsMSwwLDEyNCwyLDAsOTUsOSwwLDExMCwwLDAsMTI0LDIsMCw4MywKKyAgICA4NywxMDAsNCwwLDgxLDg4LDEwMCw0LDAsODMsNDEsNSwxMjIsMjUsNzYsMTExLAorICAgIDk3LDEwMCwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTIyLDMzLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKKyAgICAxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsCisgICAgMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDExNCwxNjAsMCwwLDAsMTE0LAorICAgIDY4LDAsMCwwLDc4LDQxLDEwLDExNCwxMzksMCwwLDAsMTE0LDEwMCwwLDAsCisgICAgMCwxMTQsOTUsMCwwLDAsOTAsMTIsMTA4LDExMSw5NywxMDAsOTUsMTAwLDEyMSwxMTAsCisgICAgOTcsMTA5LDEwNSw5OSwxMTQsMzUsMCwwLDAsMTE0LDEzOCwwLDAsMCwxMTQsMTU3LAorICAgIDAsMCwwLDExNCw2MCwwLDAsMCwxMTQsMzgsMCwwLDAsMTE0LDE2MCwwLAorICAgIDAsMCw0MSwzLDExNCw3NiwwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCwxNjIsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDIxOSwwLDAsMCwxMzUsNCwwLDAsMTE1LDE0LDAsMCwwLAorICAgIDAsNSwxMywxLDksMSwxNSwxLDE2LDEsMzEsMSwyOCwxLDEyMiwzMSwKICAgICA2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsCi0gICAgNTMsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiwKLSAgICA5NywxMTUsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE1LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExMCwxMTEsMzIsMTE1LDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCw0MCwxLDAsMCwwLDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsCi0gICAgOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEyOCw0LAotICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDMwLDAsMCwwLDY5LDEyMCwKLSAgICAxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNzgsNDAsMTIsMCwKLSAgICAwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LAotICAgIDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwKLSAgICAwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LAotICAgIDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDExLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LAotICAgIDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxOSwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLAotICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw4OCw0LDAsMCwxMTUsMTYsCi0gICAgMCwwLDAsMTYsNiw2LDIsMTIsNCwzLDEsMywxLDI0LDE2LDEyLAotICAgIDYsMTIsNCwxMTcsMTksMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwKLSAgICAwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NiwwLDAsMCwKLSAgICAxMTUsMTM0LDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLAotICAgIDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLAotICAgIDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLAotICAgIDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwxMSwKLSAgICAwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsCi0gICAgOTAsOSwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsCi0gICAgMTYsMCwxMDAsMTcsMCwxMzIsMCwwLDkwLDExLDAsMTAwLDE4LDAsMTAwLDE5LAotICAgIDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwyMCwwLDgzLDQwLDIxLDAsMCwwLAotICAgIDExNywxNCwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLAotICAgIDk3LDExNiwxMDQsMTE3LDM4LDEsMCwwLDgyLDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLDExMCwKLSAgICAxMTYsMTE1LDMyLDk3LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzOSwxMTUsMzIsMTEyLDk3LDExNiwxMDQsNDYsMzIsMzIsCi0gICAgNzMsMTE2LDMyLDExNywxMTUsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDEwMiwKLSAgICAxMDUsMTEwLDEwMCwzMiwxMDUsMTE2LDExNSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDk3LDExMCwxMDAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDExNiwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExNiwzMiwxMDgsMTExLDExMSwxMDcsMTE1LDMyLDExNywKLSAgICAxMTIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzOSwxMTUsMTAsMzIsCi0gICAgMzIsMzIsMzIsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsNDYsMzIsMzIsODcsMTA0LAotICAgIDEwMSwxMTAsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDk5LDEwNCw5NywxMTAsMTAzLDEwMSwxMTUsNDQsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMSwxMTksCi0gICAgMTEwLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSw5OSwxMTEsMTA5LDExMiwKLSAgICAxMTcsMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMTE3LDExNSwxMDUsMTEwLDEwMywzMiwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwzMiwzMiw3MCwxMTEsCi0gICAgMTE0LDMyLDExNiwxMTEsMTEyLDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMiw5NywxMTYsMTA0LDEwLDMyLDMyLAotICAgIDMyLDMyLDEwNSwxMTUsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsOTksNCwKLSAgICAwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMiwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsNTIsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsCi0gICAgMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLDExNiwyLDAsMTI0LDAsMCwKLSAgICAxMDYsMywwLDEzMSwwLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDQsMCwxMjQsCi0gICAgMywwLDEyNCwwLDAsOTUsNSwwLDEwMCwwLDAsODMsNDAsMSwwLDAsCi0gICAgMCw3OCw0MCw2LDAsMCwwLDExNyw1LDAsMCwwLDk1LDExMCw5NywxMDksCi0gICAgMTAxLDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDExNyw1LDAsMCwwLAotICAgIDExNiwxMTcsMTEyLDEwOCwxMDEsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExMiwKLSAgICA5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDE3LDAsMCwwLDk1LAotICAgIDEwOCw5NywxMTUsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgMTE3LDEyLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsCi0gICAgMTE0LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDExNywxMSwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLAotICAgIDExNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxNDAsNCwwLDAsMTE1LDgsCi0gICAgMCwwLDAsMCwxLDksMSw5LDEsMjEsMSwxMTcsMjMsMCwwLDAsCisgICAgMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLDAsMCwKKyAgICAzLDAsMCwwLDExNSw0OCwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LAorICAgIDEsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTM3LDAsMCwxMTYsMiwwLDEzNSwKKyAgICAwLDAsMTAyLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTM0LDAsMCwxMTYsMywKKyAgICAwLDY4LDEzMSwxLDAsMTMxLDEsMCw4Myw0MSw0LDEyMiw0OSw4MiwxMDEsMTE2LAorICAgIDExNywxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTA1LDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsMTE0LDI5LAorICAgIDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDQsMCwwLDAsNTEsMCwwLDAsMTE1LDMxLDAsMCwwLDEyNCwwLDAsCisgICAgOTMsMjEsMCwxMjUsMSwwLDEzNiwwLDAsMTAwLDAsMCwxMjQsMSwwLDIzLAorICAgIDEwNywyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDEsMiwxMTQsNzcsCisgICAgMCwwLDAsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLDAsCisgICAgMjE4LDYsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDEsMSwyMTgsOSwxMDIsMTA1LDEwOCwxMDEsCisgICAgOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDE0NCwwLDAsMCwxNTEsNCwwLDAsMTE1LDIsMCwwLDAsNiwxLDEyMiwKKyAgICA0OSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NiwKKyAgICA2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsCisgICAgMTE0LDYyLDQxLDQsMTE0LDM4LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTQ1LAorICAgIDAsMCwwLDIxOCwxOCw2OSw4OCw4NCw2OSw3OCw4Myw3Myw3OSw3OCw5NSw4MywKKyAgICA4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MSwyLDExNCw3NiwwLDAsMCwxMTQsMTc5LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDExLDEsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCwxNTcsMCwwLDAsMTQ4LDQsMCwwLDExNSw2LDAsCisgICAgMCwwLDAsMiwxOSwxLDE4LDEsMTIyLDMwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsCisgICAgMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsCisgICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwKKyAgICAwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw2Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLAorICAgIDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTksOTcsMTEwLAorICAgIDExMCwxMTEsMTE2LDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiw5NywzMiw5OSwxMTEsMTAwLAorICAgIDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsNDYsNzgsMTE0LDQsMCwwLDAsNDEsCisgICAgMiwxMTQsNzYsMCwwLDAsMTE0LDE3OSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIwLDAsMCwwLDE1NCwKKyAgICA0LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDI4LDY5LDEyMCwxMTYsMTAxLAorICAgIDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAorICAgIDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwKKyAgICAwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw1Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCisgICAgMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTA0LDk3LDExOCwxMDEsMzIsCisgICAgMTEwLDExMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LAorICAgIDExNCw0LDAsMCwwLDQxLDIsMTE0LDc2LDAsMCwwLDExNCwxNzksMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDIyMSwwLDAsMCwxNTgsNCwwLDAsMTE1LDIsMCwwLDAsMCwyLAorICAgIDEyMiwzMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDgzLDQxLDEsMTIyLDU4LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsCisgICAgOTksMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5NywxMTUsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwKKyAgICAzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsNDEsCisgICAgMSwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsNzYsMCwwLDAsMTE0LDE3OSwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMTY0LDAsMCwwLDE2Miw0LDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDMsMTIyLDMyLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsCisgICAgOTcsMTA5LDEwMSw3OCw0MSwxMywxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLAorICAgIDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDc3LDAsMCwwLDExNCwKKyAgICAxNzcsMCwwLDAsMTE0LDE3MSwwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCwyMTksCisgICAgMCwwLDAsMTE0LDE1NywwLDAsMCwxMTQsMjIwLDAsMCwwLDExNCwyMjEsMCwKKyAgICAwLDAsMTE0LDE2NCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOSwxLDAsMCwKKyAgICAxMjMsNCwwLDAsMTE1LDE4LDAsMCwwLDEyLDYsNiwyLDEyLDQsMywKKyAgICAxLDMsMSwyNCwxMSwxMiw2LDEyLDQsMTIsNCwxMTQsOSwxLDAsMCwKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSwxMzAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsCisgICAgMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsCisgICAgMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwKKyAgICAwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsCisgICAgMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwKKyAgICAxMSwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLAorICAgIDAsOTAsOSwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTAsMCwKKyAgICAxMDAsMTYsMCwxMDAsMTcsMCwxMzIsMCwwLDkwLDExLDAsMTAwLDE4LDAsMTAwLAorICAgIDE5LDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwyMCwwLDgzLDQxLDIxLDIxOCwxNCwKKyAgICA5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsOTcsMzgsCisgICAgMSwwLDAsODIsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsOTcsMzIsCisgICAgMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsCisgICAgMTAxLDM5LDExNSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwzMiwzMiw3MywxMTYsMzIsMTE3LDExNSwKKyAgICAxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywKKyAgICAxMDksMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDEwNSwKKyAgICAxMTYsMTE1LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNDQsMzIsOTcsMTEwLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwKKyAgICAzMiwxMDUsMTE2LDMyLDEwOCwxMTEsMTExLDEwNywxMTUsMzIsMTE3LDExMiwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDM5LDExNSwxMCwzMiwzMiwzMiwzMiw5NSw5NSwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSw5NSw0NiwzMiwzMiw4NywxMDQsMTAxLDExMCwzMiwxMTYsMTA0LAorICAgIDEwNSwxMTUsMzIsOTksMTA0LDk3LDExMCwxMDMsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTExLDExOSwxMTAsMzIsMTEyLDk3LDExNiwKKyAgICAxMDQsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDk5LDExMSwxMDksMTEyLDExNywxMTYsMTAxLDEwMCw0NCwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExMiw5NywxMTYsMTA0LDk1LAorICAgIDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDMyLDMyLDcwLDExMSwxMTQsMzIsMTE2LDExMSwxMTIsCisgICAgNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzOSwxMTUsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwKKyAgICAxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0Niw5OSw0LDAsMCwwLDAsMCwKKyAgICAwLDAsNCwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw1MiwKKyAgICAwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LAorICAgIDAsMCw5NSwxLDAsMTE2LDIsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDAsCisgICAgMCwxMzEsMSwwLDEyNCwwLDAsOTUsNCwwLDEyNCwzLDAsMTI0LDAsMCwKKyAgICA5NSw1LDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDYsMTE0LDE0MCwwLDAsCisgICAgMCwyMTgsNSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMjM3LDAsMCwwLDIxOCwxNiw5NSwKKyAgICAxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDIxOCwKKyAgICAxNyw5NSwxMDgsOTcsMTE1LDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywKKyAgICAxMTYsMTA0LDIxOCwxMiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICA0MSw0LDExNCw3NiwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDIxOCwxMSwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzcsMCwKKyAgICAwLDAsMTc1LDQsMCwwLDExNSw4LDAsMCwwLDAsMSw5LDEsOSwKKyAgICAxLDIxLDEsMTIyLDIzLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsCisgICAgOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsNTMsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTAwLAorICAgIDEsMCwxMzEsMSwwLDkyLDMsMCwxMjUsMSwwLDEyNSwyLDAsMTI1LDMsCisgICAgMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsNDMsMCwxMDAsNiwwLAorICAgIDgzLDEyNCwxLDAsMTAwLDUsMCwxMDIsMiwwLDgzLDQxLDcsMTIyLDYyLDgyLAorICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsMzIsMTExLAorICAgIDEwMiwzMiw0MCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQ1LDExMCw5NywxMDksMTAxLDQ0LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDUsMTEyLDk3LAorICAgIDExNiwxMDQsNDUsOTcsMTE2LDExNiwxMTQsNDUsMTEwLDk3LDEwOSwxMDEsNDEsMTE0LDEwMiwwLAorICAgIDAsMCwxMTQsMzAsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDExNCwxNjAsMCwwLDAsNDEsMiwxMjIsMywxMTUsMTIxLDExNSwxMjIsNCwxMTIsCisgICAgOTcsMTE2LDEwNCw0MSwyLDExNCwxNDAsMCwwLDAsMTE0LDMyLDAsMCwwLDQxLAorICAgIDQsMTE0LDc2LDAsMCwwLDExNCw3LDEsMCwwLDIxOCwzLDEwMCwxMTEsMTE2LAorICAgIDExNCw4MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsMjMsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLAorICAgIDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDE4MSw0LDAsCisgICAgMCwxMTUsOCwwLDAsMCwwLDIsMjcsMSwxMiwyLDQsMywxMjIsMzgsCiAgICAgOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsCi0gICAgNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw1MywwLDAsCi0gICAgMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLDAsCi0gICAgOTIsMywwLDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwyLDAsMTAwLAotICAgIDIsMCwxMDcsMiwwLDExNCw0MywwLDEwMCw2LDAsODMsMTI0LDEsMCwxMDAsCi0gICAgNSwwLDEwMiwyLDAsODMsNDAsNywwLDAsMCwxMTcsNjIsMCwwLDAsCi0gICAgODIsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiwKLSAgICAxMTEsMTAyLDMyLDQwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNDUsMTEwLDk3LDEwOSwxMDEsNDQsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw0NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw0NSw5NywxMTYsMTE2LDExNCw0NSwxMTAsOTcsMTA5LDEwMSw0MSwxMTcsMSwKLSAgICAwLDAsMCw0NiwxMTcsMCwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLAotICAgIDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0MCwyLDAsMCwwLDExNywzLDAsMCwKLSAgICAwLDExNSwxMjEsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDIsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDEwLDAsMCwKLSAgICAwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDQwLDQsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw2LDAsMCwwLDExMiw5NywKLSAgICAxMTQsMTAxLDExMCwxMTYsMTE3LDMsMCwwLDAsMTAwLDExMSwxMTYsMTE3LDIsMCwwLAotICAgIDAsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAyMywwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTQ2LDQsMCwwLDExNSwKLSAgICA4LDAsMCwwLDAsMiwyNywxLDEyLDIsNCwzLDExNywzOCwwLDAsCi0gICAgMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDk5LDEsMCwwLDAsMCwwLDAsMCwKLSAgICAzLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDM4LDAsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMCwwLDkyLDIsMCwxMjUsMSwwLAotICAgIDEyNSwyLDAsMTE2LDEsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDEsMCwyNSwKLSAgICAxMjQsMiwwLDEzMSwyLDAsODMsNDAsMSwwLDAsMCw3OCw0MCw0LDAsCi0gICAgMCwwLDExNywyMywwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwKLSAgICAxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTE3LDcsCi0gICAgMCwwLDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQwLDMsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywxOCwwLDAsCi0gICAgMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExMCwKLSAgICA5NywxMDksMTAxLDExNywxNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSw5NywxMTYsMTE2LAotICAgIDExNCw5NSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwKLSAgICAxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDE1Niw0LDAsMCwxMTUsNCwwLDAsMCwKLSAgICAwLDEsMTgsMSwxMTcsMzEsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAotICAgIDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsCi0gICAgMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTAzLDAsCi0gICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsCi0gICAgMCwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsMCwxMDYsMiwwLDEwNywzLDAsCi0gICAgMTE0LDk2LDAsMTI0LDAsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMjQsCi0gICAgMSwwLDEzMSwyLDAsOTIsMiwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMiwKLSAgICAwLDEwMCwwLDAsMTA3LDgsMCwxMTQsODQsMCwxMjQsMywwLDEyNCwwLDAsCi0gICAgOTUsNiwwLDExMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDIsMCwxMTAsCi0gICAgMCwwLDEyNCwwLDAsMTA2LDYsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLAotICAgIDcsMCwwLDAsMTE3LDUsMCwwLDAsMTE2LDExNywxMTIsMTA4LDEwMSwxMTcsMTYsCi0gICAgMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCwxMTcsMTcsMCwwLDAsOTUsMTA4LDk3LDExNSwxMTYsOTUsMTEyLDk3LAotICAgIDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTIsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDUsMCwwLDAsOTUsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDUsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsNDAsNCwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDExLDAsMCwwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICAxMTcsOCwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTYwLDQsMCwwLDExNSwxNCwKLSAgICAwLDAsMCwwLDIsMTgsMSwxNSwxLDI3LDMsMTIsMSwxMiwxLDEyLAotICAgIDEsMTE3LDI3LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCi0gICAgODAsOTcsMTE2LDEwNCw0Niw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwKLSAgICAxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LDAsMCwxMjQsMCwKLSAgICAwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwwLDgzLDQwLDEsMCwwLDAsCi0gICAgNzgsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMDUsMTE2LDEwMSwxMTQsMTE3LAotICAgIDEyLDAsMCwwLDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwKLSAgICA0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLAotICAgIDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSwxNzIsNCwwLDAsMTE1LDIsMCwwLDAsCi0gICAgMCwxLDExNywyMywwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksCi0gICAgMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDIsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDEyLDAsMCwwLAotICAgIDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSw0MCwxLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsMCwwLDk1LDk1LDEwOCwxMDEsMTEwLAotICAgIDk1LDk1LDE3NSw0LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDIyLDAsCi0gICAgMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwKLSAgICA0Niw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLAotICAgIDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLAotICAgIDAsODMsNDAsMiwwLDAsMCw3OCwxMTcsMjAsMCwwLDAsOTUsNzgsOTcsCi0gICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQwLDEyMywzMywxMTQsMTI1LAotICAgIDQxLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LAotICAgIDExNiwxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICA5NSw5NSwxNzgsNCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMywwLAotICAgIDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsCi0gICAgNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LAotICAgIDAsMCwwLDEyNCwxLDAsMTI0LDAsMCwxMDYsMCwwLDEzMSwwLDAsMTA3LAotICAgIDYsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDEsMCwwLDAsMTE3LDEyLAotICAgIDAsMCwwLDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSw0MCwKLSAgICAyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLAotICAgIDAsMCwxMDUsMTE2LDEwMSwxMDksNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTIsMCwwLDAsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwKLSAgICAxMTUsOTUsOTUsMTgxLDQsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjcsCi0gICAgMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsCi0gICAgMTA0LDQ2LDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTE1LDk1LDk1LDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDIwLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxLDEwMCwwLDAsODMsNDAsMSwwLDAsCi0gICAgMCw3OCw0MCwyLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDExNyw2LDAsMCwwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTA1LAotICAgIDExNiwxMDEsMTA5LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxODQsNCwwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCwxLDExNywyMSwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwKLSAgICAxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCw3OCwKLSAgICA0MCwxMywwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSwKLSAgICA5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywyMywwLDAsMCwKLSAgICA5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LAotICAgIDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLDAsMCwKLSAgICAwLDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDEwMSwxMTAsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsCi0gICAgMTE0LDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsCi0gICAgMTEwLDExNSw5NSw5NSwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDQwLAotICAgIDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxNCwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LAotICAgIDExNiwxMDQsMTMzLDQsMCwwLDExNSwyMCwwLDAsMCwxNiw1LDYsMiwxMiwKLSAgICA2LDEyLDEwLDEyLDQsMTIsMTIsMTIsMywxMiwzLDEyLDMsMTIsMywxMTcsCi0gICAgMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywKLSAgICAxMTYsMTA0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsCi0gICAgMCwwLDAsNjYsMCwwLDAsMTE1LDY4LDAsMCwwLDEyNCwwLDAsNjksCi0gICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwxMDAsCi0gICAgMiwwLDEzMiwwLDAsOTAsMywwLDEwMSw0LDAsMTAwLDMsMCwxMDAsNCwKLSAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNSwwLAotICAgIDEwMCw2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDAsNywwLDgzLAotICAgIDQwLDgsMCwwLDAsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDQsMCwwLDAsMCwwLAotICAgIDAsMCw0LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDI1LAotICAgIDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLAotICAgIDMsMCwxMjQsMCwwLDk1LDEsMCwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsMiwwLDAsMCwxMTcsMTQsMCwwLDAsOTUsNzgsOTcsMTA5LAotICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDExNyw1LDAsMCwwLDk1LAotICAgIDExMiw5NywxMTYsMTA0LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDExNywxMSwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxODksNCwwLAotICAgIDAsMTE1LDIsMCwwLDAsMCwxLDExNywyNCwwLDAsMCw3OCw5NywxMDksCi0gICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsCi0gICAgMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLAotICAgIDEsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQwLAotICAgIDIsMCwwLDAsNzgsMTE3LDI1LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDM5LDEyMywxMjUsMzksMzIsNDAsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwKLSAgICAxMDEsNDEsNjIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwKLSAgICAxMDksOTcsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LAotICAgIDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsNiwwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMTQsMTAxLDExMiwxMTQsMTkyLDQsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsCi0gICAgMjcsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDMyLDAsMCwwLDExNiwwLDAsMTAwLDEsMCwxMjQsCi0gICAgMCwwLDEwNiwxLDAsMTMxLDIsMCwxLDEyNCwwLDAsMTA2LDEsMCwxMjQsCi0gICAgMSwwLDk1LDIsMCwxMjQsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDI0LAotICAgIDAsMCwwLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTE3LDM4LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDEyMywzMywxMTQsMTI1LDQwLDMsMCwwLDAsMTE3LDE2LDAsMCwwLAotICAgIDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLAotICAgIDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE5Niw0LDAsMCwKLSAgICAxMTUsNiwwLDAsMCwwLDMsMTYsMSwxMiwxLDExNywyNywwLDAsMCwKLSAgICA3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKLSAgICAxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCw4LDAsMCwKLSAgICAwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwKLSAgICAwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywxMSwwLDAsMCwKLSAgICA5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsMTEsMCwwLDAsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDExNywxNywwLDAsMCwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LAotICAgIDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTg4LDQsMCwwLDExNSw2LDAsMCwwLDE2LDEsCi0gICAgMTIsMywxOCw0LDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMSwwLDAsMCw0LDAsMCwwLDY2LDAsMCwwLDExNSwxMTksMCwKLSAgICAwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLAotICAgIDIsMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsCi0gICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDQsMCwKLSAgICAxMDAsNSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw2LDAsMTAxLDQsMCwxMDAsCi0gICAgNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNCwKLSAgICAwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLAotICAgIDEwMSw0LDAsMTAwLDEyLDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDEsMCwxMzEsCi0gICAgMSwwLDkwLDEwLDAsMTAwLDEyLDAsODMsNDAsMTMsMCwwLDAsMTE3LDEwLAotICAgIDAsMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNjIsMCwKLSAgICAwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5NSw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSw5NSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDQ2LAotICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLAotICAgIDAsNjcsMCwwLDAsMTE1LDU4LDAsMCwwLDEyMCw1MSwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMDYsMiwwLDEzMSwwLDAsNjgsOTMsMzQsMCwxMjUsMSwwLAotICAgIDExNiwzLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDE2LDAsMTI0LAotICAgIDEsMCwxMDYsNCwwLDEzMSwwLDAsMSwxMTMsMTYsMCwxMTMsMTYsMCw4NywKLSAgICAxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDEyNSwwLDAsMCw2Nyw5NywKLSAgICAxMDgsMTA4LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwKLSAgICAxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNDAsNDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwKLSAgICAxMDAsMzIsMTExLDExMCwzMiw5NywxMDgsMTA4LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsCi0gICAgMTE2LDExNCwxMjEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDExNSwxMTYsMTExLDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwKLSAgICAxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSwKLSAgICA5OSw5Nyw5OSwxMDQsMTAxLDExNSwzMiw0MCwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDEsNDYsMTE3LDE3LDAsMCwwLAotICAgIDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwKLSAgICAxMTUsNzgsNDAsNSwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsCi0gICAgMTksMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAotICAgIDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw2LDAsMCwwLDExOCw5NywxMDgsMTE3LAotICAgIDEwMSwxMTUsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTcsCi0gICAgMCwwLDAsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDExNSw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwKLSAgICAxMTUsMTE3LDYsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTcsMCwwLDAsMTA1LDExMCwxMTgsCi0gICAgOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSwyMTAsNCwKLSAgICAwLDAsMTE1LDYsMCwwLDAsMCw0LDIyLDEsMTUsMSwxMTcsMjgsMCwKLSAgICAwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LAotICAgIDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDk0LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMTUsMjgsCi0gICAgMCwxMTYsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwyLDAsCi0gICAgMSwxMTAsMCwwLDEyMCw1OSwwLDExNiwwLDAsMTA2LDEsMCw2OCw5Myw0NCwKLSAgICAwLDEyNSwyLDAsMTIxLDE0LDAsMTI0LDIsMCwxMjQsMSwwLDEzMSwxLDAsCi0gICAgODMsODcsMTEzLDM4LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCw4MSwwLDEsCi0gICAgMSwxLDExOSwzOCwwLDg5LDExMywzOCwwLDg4LDExMywzOCwwLDg3LDEwMCwyLAotICAgIDAsODMsMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywxMTMsMCwwLDAsCi0gICAgODMsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsOTksMTAxLDMyLAotICAgIDExMSwxMDIsMzIsMTA0LDExMSwxMTEsMTA3LDExNSwzMiwxMDIsMTExLDExNCwzMiw5NywzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwzOSwxMTIsOTcsMTE2LDEwNCwzOSwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMzksMTA0LAotICAgIDExMSwxMTEsMTA3LDExNSwzOSwzMiwxMDUsMTE1LDMyLDEwMiw5NywxMDgsMTE1LDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsMTE3LDExNSwxMDEsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwxMTcsMjMsMCwwLDAsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LAotICAgIDExMSwxMTEsMTA3LDExNSwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsNDAsNywKLSAgICAwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsMTAsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwxMTcsOSwwLDAsMCw5NSwKLSAgICAxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsMTE3LDQsMCwwLDAsMTE5LDk3LDExNCwKLSAgICAxMTAsMTE3LDEzLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsODcsOTcsMTE0LDExMCwKLSAgICAxMDUsMTEwLDEwMywxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsCi0gICAgMTE0LDExMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMywwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNyw0LDAsMCwwLDEwNCwxMTEsMTExLDEwNyw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDIxOCw0LDAsMCwxMTUsMTYsMCwwLDAsCi0gICAgMCw3LDksMSwxOSwxLDE2LDEsMywxLDE0LDEsMTMsMSwxMiwyLAotICAgIDExNywyMiwwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSw5OSwyLDAsMCwwLAotICAgIDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTEsMCwwLDAsMTI0LDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDIxLAotICAgIDAsMTAwLDIsMCwxMjUsMSwwLDExMCwwLDAsMTIxLDE3LDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEyNCwxLDAsMjUsMTI1LDIsMCw4NywxMTAsNDYsMCw0LDExNiwKLSAgICAyLDAsMTA3LDEwLDAsMTE0LDg2LDAsMSwxLDEsMTI0LDAsMCwxMDYsMywKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwyLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEyNCwxLDAsNjAsODksMTEwLDEsMCw4OCwxMjQsMiwwLDgzLAotICAgIDQwLDMsMCwwLDAsMTE3LDIxMCwwLDAsMCw3MSwxMDEsMTE2LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsMTAyLDExNCwxMTEsMTA5LAotICAgIDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLAotICAgIDExMCwxMTYsMTE0LDEyMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDEwNSwxMTAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsOTksOTcsOTksMTA0LDEwMSw0NCwzMiwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsOTcsMTEyLDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMTEwLAotICAgIDEwMCwzMiw5OSw5Nyw5OSwxMDQsMTAxLDMyLDEwNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExMCwKLSAgICAxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywxMTgsOTcsMTA1LAotICAgIDEwOCw5Nyw5OCwxMDgsMTAxLDQ0LDMyLDExNSwxMTYsMTExLDExNCwxMDEsMzIsNzgsMTExLDExMCwKLSAgICAxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE3LDAsMCwwLAotICAgIDAsMTE3LDEsMCwwLDAsNDYsNDAsNCwwLDAsMCwxMTcsMywwLDAsCi0gICAgMCwxMTUsMTIxLDExNSwxMTcsMTksMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw4LDAsMCwKLSAgICAwLDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDQwLDMsMCwwLDAsMTE3LDMsCi0gICAgMCwwLDAsOTksMTA4LDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgNiwwLDAsMCwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjM1LAotICAgIDQsMCwwLDExNSwxNiwwLDAsMCwwLDgsMTIsMSw5LDEsMywxLAotICAgIDE3LDEsMTMsMSwxNSwxLDE4LDEsMTE3LDMxLDAsMCwwLDgwLDk3LDExNiwKKyAgICAxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMTAsOTcsMTA5LDEwMSwxMTUsOTksMSwwLDAsMCwwLDAsMCwwLDMsCisgICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMzgsMCwwLDAsCisgICAgMTI0LDAsMCwxMDYsMCwwLDEzMSwwLDAsOTIsMiwwLDEyNSwxLDAsMTI1LAorICAgIDIsMCwxMTYsMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDI1LDEyNCwKKyAgICAyLDAsMTMxLDIsMCw4Myw0MSwxLDc4LDQxLDQsMTE0LDIwLDEsMCwwLAorICAgIDExNCw2MiwwLDAsMCwxMTQsNywwLDAsMCwxMTQsMTQxLDAsMCwwLDQxLAorICAgIDMsMTE0LDc2LDAsMCwwLDkwLDE4LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsOTAsMTQsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsOTcsMTE2LDExNiwxMTQsOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE1LDEsMCwwLDE5MSw0LAorICAgIDAsMCwxMTUsNCwwLDAsMCwwLDEsMTgsMSwxMjIsMzEsOTUsNzgsOTcsCisgICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDEwMywxMDEsMTE2LAorICAgIDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTAzLDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwKKyAgICAwLDAsMTMxLDEsMCwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsMCwxMDYsMiwKKyAgICAwLDEwNywzLDAsMTE0LDk2LDAsMTI0LDAsMCwxMDYsMywwLDEyNCwwLDAsCisgICAgMTA2LDQsMCwxMjQsMSwwLDEzMSwyLDAsOTIsMiwwLDEyNSwyLDAsMTI1LAorICAgIDMsMCwxMjQsMiwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsODQsMCwxMjQsMywKKyAgICAwLDEyNCwwLDAsOTUsNSwwLDExMCwwLDAsMTI0LDEsMCwxMjQsMCwwLAorICAgIDk1LDIsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LDUsMCw4Myw0MSwxLDc4LAorICAgIDQxLDYsMTE0LDIzNywwLDAsMCwxMTQsMTUsMSwwLDAsMTE0LDE2LDEsMCwKKyAgICAwLDExNCwxNywxLDAsMCwxMTQsMTQwLDAsMCwwLDExNCwxNCwxLDAsMCwKKyAgICA0MSw0LDExNCw3NiwwLDAsMCw5MCwxMSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LAorICAgIDExMiw5NywxMTYsMTA0LDExNCwxNjEsMCwwLDAsOTAsOCwxMTAsMTAxLDExOSw5NSwxMTIsCisgICAgOTcsMTE2LDEwNCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMTIsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAorICAgIDE5NSw0LDAsMCwxMTUsMTQsMCwwLDAsMCwyLDE4LDEsMTUsMSwyNywKKyAgICAzLDEyLDEsMTIsMSwxMiwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LAorICAgIDEwOCw5NywxMTYsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKKyAgICAwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCw4Myw0MSwxLAorICAgIDc4LDQxLDIsMjE4LDQsMTA1LDExNiwxMDEsMTE0LDExNCwyMSwxLDAsMCw0MSwxLAorICAgIDExNCw3NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsOCw5NSw5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsMjA3LDQsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjMsOTUsNzgsOTcsMTA5LDEwMSwKKyAgICAxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwNSwxMTYsMTAxLDExNCwKKyAgICA5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsODMsNDEsMSw3OCw0MSwKKyAgICAyLDExNCwzMSwwLDAsMCwxMTQsMjEsMSwwLDAsNDEsMSwxMTQsNzYsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDcsOTUsOTUsMTA4LDEwMSwxMTAsOTUsOTUsMjEwLDQsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMSwxMjIsMjIsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAorICAgIDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDk5LDEsMCwKKyAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLAorICAgIDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDc4LDEyMiwyMCw5NSw3OCw5NywxMDksCisgICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDAsMTIzLDMzLDExNCwxMjUsNDEsCisgICAgNDEsMiwxMTQsNDcsMCwwLDAsMTE0LDE0LDEsMCwwLDQxLDEsMTE0LDc2LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw4OCwwLDAsMCwyMTMsNCwwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwxLDEyMiwyMyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LAorICAgIDExNiwxMDQsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDE2LDAsMCwwLDEyNCwxLDAsMTI0LDAsMCwxMDYsMCwwLDEzMSwwLAorICAgIDAsMTA3LDYsMCw4Myw0MSwxLDc4LDQxLDEsMTE0LDIxLDEsMCwwLDQxLAorICAgIDIsMTE0LDc2LDAsMCwwLDIxOCw0LDEwNSwxMTYsMTAxLDEwOSwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTIsOTUsOTUsOTksCisgICAgMTExLDExMCwxMTYsOTcsMTA1LDExMCwxMTUsOTUsOTUsMjE2LDQsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICA4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTE1LDk1LAorICAgIDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDIwLDAsMCwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxLDEwMCwwLDAsODMsNDEsCisgICAgMSw3OCw0MSwyLDExNCwxNCwxLDAsMCwxMTQsMTY2LDAsMCwwLDQxLDIsCisgICAgMTE0LDc2LDAsMCwwLDExNCwyNSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTY2LDAsMCwwLDIxOSw0LAorICAgIDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIxLDk1LDc4LDk3LDEwOSwxMDEsCisgICAgMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLAorICAgIDc4LDQxLDEzLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsCisgICAgMCwwLDExNCw1OSwwLDAsMCwxMTQsNzcsMCwwLDAsMTE0LDIwLDEsMCwKKyAgICAwLDExNCwxNSwxLDAsMCwxMTQsMjEsMSwwLDAsMTE0LDIzLDEsMCwwLAorICAgIDExNCwyNCwxLDAsMCwxMTQsODgsMCwwLDAsMTE0LDI2LDEsMCwwLDExNCwKKyAgICAxNjYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEzLDEsMCwwLDE2OCw0LDAsCisgICAgMCwxMTUsMjAsMCwwLDAsMTIsNSw2LDIsMTIsNiwxMiwxMCwxMiw0LAorICAgIDEyLDEyLDEyLDMsMTIsMywxMiwzLDEyLDMsMTE0LDEzLDEsMCwwLDk5LAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCisgICAgNjQsMCwwLDAsMTE1LDEwNiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsCisgICAgMCwwLDkwLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCw5MCwzLAorICAgIDAsMTAxLDQsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCwxMzEsMSwwLAorICAgIDkwLDUsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCw5MCw2LDAsMTAwLAorICAgIDcsMCwxMDAsOCwwLDEzMiwwLDAsOTAsNywwLDEwMCw5LDAsMTAwLDEwLAorICAgIDAsMTMyLDAsMCw5MCw4LDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDAsMCwKKyAgICA5MCw5LDAsMTAwLDEzLDAsMTAwLDE0LDAsMTMyLDAsMCw5MCwxMCwwLDEwMCwKKyAgICAxNSwwLDgzLDQxLDE2LDIxOCwxNSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSw0LDAsMCwwLDAsMCwwLDAsNCwKKyAgICAwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyNSwwLDAsMCwKKyAgICAxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwzLDAsMTI0LAorICAgIDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDEzLAorICAgIDEsMCwwLDExNCwxNCwxLDAsMCw0MSw0LDExNCw3NiwwLDAsMCwxMTQsCisgICAgNzIsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwxOCwxLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzcsMCwKKyAgICAwLDAsMjI0LDQsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjQsNzgsCisgICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsCisgICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwKKyAgICAwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCwKKyAgICA4Myw0MSwyLDc4LDEyMiwyNSw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsCisgICAgMTE0LDEyNSwzMiw0MCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0MSw2Miw0MSwKKyAgICAyLDExNCw0NywwLDAsMCwxMTQsNTcsMCwwLDAsNDEsMiwxMTQsMjE2LDAsCisgICAgMCwwLDExNCwxNjIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDIxNywwLDAsMCwyMjcsNCwwLDAsMTE1LAorICAgIDIsMCwwLDAsMCwyLDEyMiwyNyw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksCisgICAgMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsCisgICAgMTAxLDExMiwxMTQsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLAorICAgIDgzLDQxLDIsNzgsODQsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzYsMCwwLAorICAgIDAsMTE0LDE3OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMTU3LDAsMCwwLDIzMSw0LDAsMCwxMTUsMiwKKyAgICAwLDAsMCwwLDEsMTIyLDI2LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCisgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwKKyAgICAyLDc4LDExNCwzMCwwLDAsMCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3NiwKKyAgICAwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwyMjEsMCwwLDAsMjM0LDQsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsMSwxMjIsMjYsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAorICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICA2LDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMTYsMCwwLAorICAgIDEwMCwxLDAsMTAwLDIsMCwxMDAsMywwLDEwMCw0LDAsMTAwLDUsMCwxMzEsCisgICAgMywxLDgzLDQxLDYsNzgsMTE0LDMwLDAsMCwwLDEyMiw4LDYwLDExNSwxMTYsCisgICAgMTE0LDEwNSwxMTAsMTAzLDYyLDExNCwyNDEsMCwwLDAsMTE0LDI1MSwwLDAsMCw4NCwKKyAgICA0MSwxLDExNCwyNTIsMCwwLDAsNDEsMiwxMTQsNzYsMCwwLDAsMTE0LDE3OSwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMjIwLDAsMCwwLDIzNyw0LDAsMCwxMTUsMiwwLDAsMCwKKyAgICAwLDEsMTIyLDI0LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLAorICAgIDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDI1LDAsMCwwLDEyNCwwLDAsMTI0LDEsMCw5NSwwLDAsMTI0LAorICAgIDEsMCwxMDYsMSwwLDEyNCwxLDAsOTUsMiwwLDEwMCwwLDAsODMsNDEsCisgICAgMSw3OCw0MSwzLDExNCwxNzIsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwxNTksCisgICAgMCwwLDAsNDEsMiwxMTQsNzYsMCwwLDAsMTE0LDE2MiwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjQwLAorICAgIDAsMCwwLDI0MCw0LDAsMCwxMTUsNCwwLDAsMCwwLDEsOSwxLAorICAgIDEyMiwzMyw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAorICAgIDExNCw0NiwxMDUsMTEwLDEwNSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTcsMTE2LAorICAgIDExNiwxMTQsMTE1LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAorICAgIDksMCwwLDAsNjcsMCwwLDAsMTE1LDcwLDAsMCwwLDExNiwwLDAsCisgICAgMTAwLDEsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDIsMCwxLDExNiwyLDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDE0MywzNiwwLDEyNSwyLDAsMTI0LDAsMCwxMDYsCisgICAgMywwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwwLDAsMTA2LDEsMCwxMjQsCisgICAgMiwwLDk1LDQsMCwxMjQsMiwwLDgzLDg3LDEwMCwyLDAsODEsODgsMTAwLAorICAgIDIsMCw4Myw0MSwzLDEyMiwyNCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDExMCw5NywKKyAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEyMiwKKyAgICAzOCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiwxMjMsMzMsMTE0LDEyNSw3OCw0MSw1LDExNCwxMzgsMCwwLDAsMTE0LAorICAgIDE0LDEsMCwwLDExNCwxNTYsMCwwLDAsMTE0LDI0MCwwLDAsMCwxMTQsMTYwLAorICAgIDAsMCwwLDQxLDMsMTE0LDc2LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LAorICAgIDE2MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMjE5LDAsMCwwLDI0NCw0LDAsMCwxMTUsMTAsMCwwLAorICAgIDAsMCwyLDE2LDEsMTUsMSwxMywxLDEyLDEsMTIyLDI3LDc4LDk3LDEwOSwKKyAgICAxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsCisgICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQxLDExLDExNCw1NywwLDAsMCwKKyAgICAxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw3NywwLDAsMCwxMTQsCisgICAgMjIyLDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LDE1NywwLDAsMCwxMTQsMjIxLAorICAgIDAsMCwwLDExNCwyMjAsMCwwLDAsMTE0LDI0MCwwLDAsMCwxMTQsMjE5LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCwyNywxLDAsMCwyMjMsNCwwLDAsMTE1LAorICAgIDE0LDAsMCwwLDEyLDEsMTIsMywxOCw0LDEyLDMsMTIsMywxMiwzLAorICAgIDEyLDQsMTE0LDI3LDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDQsMCwwLDAsNjQsMCwwLDAsMTE1LDExNSwwLDAsCisgICAgMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLAorICAgIDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwKKyAgICAxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAorICAgIDAsMTMxLDEsMCw5MCw2LDAsMTAxLDQsMCwxMDAsNiwwLDEwMCw3LDAsCisgICAgMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNCwwLDEwMCw4LDAsMTAwLAorICAgIDksMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLDEwMSw0LDAsMTAwLDEwLAorICAgIDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDEsMCwxMzEsMSwwLDkwLDksMCwKKyAgICAxMDAsMTAsMCw4Myw0MSwxMywyMTgsMTAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwKKyAgICAxMDEsMTE0LDEyMiw2Miw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsCisgICAgMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsCisgICAgMTA0LDMyLDk3LDExMCwxMDAsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDk1LDk1LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDk1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwKKyAgICAxMTUsNDYsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsNTgsMCwwLDAsMTIwLDUxLDAsMTE2LAorICAgIDAsMCwxMDYsMSwwLDEwNiwyLDAsMTMxLDAsMCw2OCw5MywzNCwwLDEyNSwKKyAgICAxLDAsMTE2LDMsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMTYsCisgICAgMCwxMjQsMSwwLDEwNiw0LDAsMTMxLDAsMCwxLDExMywxNiwwLDExMywxNiwKKyAgICAwLDg3LDEwMCwyLDAsODMsNDEsMywxMjIsMTI1LDY3LDk3LDEwOCwxMDgsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDExNSw0MCw0MSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTEsMTEwLAorICAgIDMyLDk3LDEwOCwxMDgsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwzMiwKKyAgICAxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMTE1LDExNiwxMTEsMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsMTE1LDMyLDQwLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCisgICAgMTAxLDExMCwxMTYsMTAxLDEwMCw0MSw0NiwyMTgsMTcsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsCisgICAgOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw3OCw0MSw1LDExNCw3LDAsCisgICAgMCwwLDIxOCwxOSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsCisgICAgMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjE4LDYsMTE4LDk3LDEwOCwxMTcsMTAxLDExNSwxMTQsCisgICAgNjAsMCwwLDAsMTE0LDI5LDEsMCwwLDQxLDIsMTE0LDIxNiwwLDAsMCwKKyAgICAyMTgsNiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMjksMSwwLDAsMyw1LDAsMCwKKyAgICAxMTUsNiwwLDAsMCwwLDQsMjIsMSwxNSwxLDEyMiwyOCw4MCw5NywxMTYsCisgICAgMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsCisgICAgMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMywwLDAsMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsOTQsCisgICAgMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDExNSwyOCwwLDExNiwyLDAsMTA2LAorICAgIDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLDIsMCwxLDExMCwwLDAsMTIwLAorICAgIDU5LDAsMTE2LDAsMCwxMDYsMSwwLDY4LDkzLDQ0LDAsMTI1LDIsMCwxMjEsCisgICAgMTQsMCwxMjQsMiwwLDEyNCwxLDAsMTMxLDEsMCw4Myw4NywxMTMsMzgsMCwKKyAgICA0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDgxLDAsMSwxLDEsMTE5LDM4LDAsCisgICAgODksMTEzLDM4LDAsODgsMTEzLDM4LDAsODcsMTAwLDIsMCw4MywxMDAsMiwwLAorICAgIDgzLDQxLDMsMTIyLDExMyw4MywxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMTUsMTAxLDExMywxMTcsCisgICAgMTAxLDExMCw5OSwxMDEsMzIsMTExLDEwMiwzMiwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwMiwxMTEsCisgICAgMTE0LDMyLDk3LDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDM5LAorICAgIDExMiw5NywxMTYsMTA0LDM5LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDczLDEwMiwzMiwzOSwxMDQsMTExLDExMSwxMDcsMTE1LDM5LDMyLDEwNSwxMTUsMzIsMTAyLDk3LAorICAgIDEwOCwxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTcsMTE1LDEwMSwzMiwxMTUsMTIxLDExNSwKKyAgICA0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDEyMiwyMywxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSw3OCwKKyAgICA0MSw2LDExNCw3LDAsMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLAorICAgIDExMSwxMDcsMTE1LDExNCwxODYsMCwwLDAsMTE0LDE4NywwLDAsMCwxMTQsMTg4LDAsCisgICAgMCwwLDExNCwxNTgsMCwwLDAsNDEsMywxMTQsMjE2LDAsMCwwLDExNCwzNSwKKyAgICAwLDAsMCw5MCw0LDEwNCwxMTEsMTExLDEwNywxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA0LDExMSwxMTEsMTA3LDExNSwxMSw1LDAsMCwxMTUsMTYsMCwwLDAsMCw3LAorICAgIDksMSwxOSwxLDE2LDEsMywxLDE0LDEsMTMsMSwxMiwyLDEyMiwyMiwKKyAgICA4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSw5OSwyLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsOTcsMCwwLDAsCisgICAgMTI0LDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDI3LDAsMTE2LDAsMCwxMDYsCisgICAgMSwwLDEzMSwwLDAsMTI1LDEsMCwxMTAsMCwwLDEyMSwxNywwLDExNiwyLAorICAgIDAsMTA2LDMsMCwxMjQsMSwwLDI1LDEyNSwyLDAsODcsMTEwLDQ2LDAsNCwKKyAgICAxMTYsNCwwLDEwNywxMCwwLDExNCw5MiwwLDEsMSwxLDEyNCwwLDAsMTA2LAorICAgIDUsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsMiwwLDExNiwyLAorICAgIDAsMTA2LDMsMCwxMjQsMSwwLDYwLDg5LDExMCwxLDAsODgsMTI0LDIsMCwKKyAgICA4Myw0MSwyLDEyMiwyMTAsNzEsMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwKKyAgICAxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwKKyAgICAzMiwxMDEsMTEwLDExNiwxMTQsMTIxLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTUsMTIxLDExNSw0NiwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LAorICAgIDk5LDEwNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsCisgICAgMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LAorICAgIDk5LDEwNCwxMDEsNDQsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk3LDExMiwKKyAgICAxMTIsMTE0LDExMSwxMTIsMTE0LDEwNSw5NywxMTYsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LAorICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk3LDExMCwxMDAsMzIsOTksOTcsOTksCisgICAgMTA0LDEwMSwzMiwxMDUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTAsMTExLDMyLDEwMiwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwKKyAgICA0NCwzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDMyLDc4LDExMSwxMTAsMTAxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCwzMCwwLDAsMCw0MSw2LDExNCwzLAorICAgIDAsMCwwLDExNCw0NSwwLDAsMCwxMTQsNywwLDAsMCwxMTQsMzAsMSwKKyAgICAwLDAsMTE0LDkyLDAsMCwwLDExNCwzNCwxLDAsMCw0MSwzLDExNCwyMTYsCisgICAgMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwzMiwxLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjAsOTUsMTEyLAorICAgIDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDI4LDUsMCwwLDExNSwxNiwwLDAsMCwwLDgsMTIsMSwxNSwKKyAgICAxLDMsMSwxNywxLDEzLDEsMTUsMSwxOCwxLDEyMiwzMSw4MCw5NywxMTYsCiAgICAgMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwKICAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk5LDMsMCwwLAogICAgIDAsMCwwLDAsMCw4LDAsMCwwLDUsMCwwLDAsNjcsMCwwLApAQCAtMzE5Myw4MTQgKzI1ODUsNjA0IEBACiAgICAgMiwwLDY4LDkzLDE1OCwwLDEyNSw0LDAsMTE2LDAsMCwxMjQsNCwwLDExNiwKICAgICAxLDAsMTE2LDIsMCwxMDIsMiwwLDEzMSwyLDAsMTE1LDQ2LDAsMTEzLDEzLAogICAgIDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDQsMCwxMzEsMSwwLAotICAgIDEyNSw1LDAsMTI0LDUsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LDEzLDAsMTE2LAotICAgIDUsMCwxMjQsNSwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMTEyLDAsMTI0LDUsCi0gICAgMCwxMDYsNiwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDYsMCwKLSAgICAxMjUsNywwLDExMCwyMSwwLDEyNCw1LDAsMTA2LDcsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTI1LDYsMCwxMDMsMCwwLDEyNSw3LDAsMTI0LDYsMCwxMDAsMiwKKyAgICAxMjUsNSwwLDEyNCw1LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxMywwLDExNiwKKyAgICA0LDAsMTI0LDUsMCwxMDAsMiwwLDEzMSwyLDAsMTE0LDExMiwwLDEyNCw1LAorICAgIDAsMTA2LDUsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSw2LDAsCisgICAgMTI1LDcsMCwxMTAsMjEsMCwxMjQsNSwwLDEwNiw2LDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDEyNSw2LDAsMTAzLDAsMCwxMjUsNywwLDEyNCw2LDAsMTAwLDEsCiAgICAgMCwxMDcsOSwwLDExNCwxNTUsMCwxMjQsNiwwLDEyNCwzLDAsMTAyLDIsMCwKLSAgICA4MywxMjQsMywwLDEwNiw4LDAsMTI0LDcsMCwxMzEsMSwwLDEsMTEzLDEzLAotICAgIDAsMTEzLDEzLDAsODcsMTAwLDIsMCwxMjQsMywwLDEwMiwyLDAsODMsMTAwLAotICAgIDIsMCw4Myw0MCwzLDAsMCwwLDExNyw2MywwLDAsMCw3MCwxMDUsMTEwLAotICAgIDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwxMTQsMzIsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMzIsMTAyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ3LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMTcsMTEsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNzgsNDAsOSwwLAotICAgIDAsMCwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LAotICAgIDEwMSwxMTcsMywwLDAsMCwxMTUsMTE2LDExNCwxMTcsNSwwLDAsMCw5OCwxMjEsCi0gICAgMTE2LDEwMSwxMTUsMTE3LDIwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDQwLDgsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDE0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDExNyw1LDAsMCwwLDEwMSwxMTAsMTE2LDExNCwxMjEsMTE3LDYsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsOCwwLDAsMCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLAotICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjUyLDQsMCwwLDExNSwKKyAgICA4MywxMjQsMywwLDEwNiw3LDAsMTI0LDcsMCwxMzEsMSwwLDEsMTEzLDEzLAorICAgIDAsMTEzLDEzLDAsODcsMTAwLDEsMCwxMjQsMywwLDEwMiwyLDAsODMsMTAwLAorICAgIDEsMCw4Myw0MSwzLDEyMiw2Myw3MCwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwxMTQsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiwKKyAgICA5Nyw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsCisgICAgMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ3LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKKyAgICAzMiwxMTAsOTcsMTA5LDEwMSw0Niw3OCwxMTQsMTg1LDAsMCwwLDQxLDgsMTE0LDIwMywKKyAgICAwLDAsMCwyMTgsMywxMTUsMTE2LDExNCwyMTgsNSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE0LAorICAgIDM1LDEsMCwwLDExNCw2MCwwLDAsMCwxMTQsMTg1LDAsMCwwLDExNCwyMTgsCisgICAgMCwwLDAsMTE0LDIwOCwwLDAsMCw0MSw4LDExNCwyMTYsMCwwLDAsMTE0LAorICAgIDE3OSwwLDAsMCwxMTQsMzUsMCwwLDAsMjE4LDE0LDExMCw5NywxMDksMTAxLDExNSwKKyAgICAxMTIsOTcsOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDkwLDUsMTAxLDExMCwxMTYsMTE0LDEyMSwKKyAgICAxMTQsMzIsMSwwLDAsMTE0LDE2MSwwLDAsMCwxMTQsMTg5LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMSwKKyAgICA5NSwxMDMsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ1LDUsMCwwLDExNSwKICAgICAyOCwwLDAsMCwwLDUsNiwxLDEzLDEsMjEsMSw2LDEsMTUsMSwKICAgICAxMiwxLDE1LDEsMjQsMiwxNSwxLDYsMSwxMiwyLDEwLDUsMjAsMiwKLSAgICAxMTcsMjIsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMywwLDAsMCwKLSAgICAwLDAsMCwwLDUsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTcsMCwwLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDI0LAotICAgIDAsMTE2LDEsMCwxMDYsMiwwLDEyNSwyLDAsMTEwLDAsMCwxMjQsMCwwLAotICAgIDEwNiwzLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsOTIsMiwwLDEyNSwKLSAgICAzLDAsMTI1LDQsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsNjQsCi0gICAgMCwxMjQsMywwLDgzLDEyNCw0LDAsMTE0LDg5LDAsMTE2LDQsMCwxMjQsMSwKLSAgICAwLDEyNCw0LDAsMTI0LDAsMCwxMDYsMywwLDEzMSwzLDAsODMsMTAwLDEsCi0gICAgMCw4MywxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDk4LDAsMCwwLAotICAgIDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsMTExLDExNCwzMiwzOSwKLSAgICAxMTIsOTcsMTE2LDEwNCwzOSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNSwKLSAgICAxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsOTcsMTEwLAotICAgIDEwMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsNDYsNzgsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCwxMTcsMTEsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKLSAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNSwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICA5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNywxNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAotICAgIDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMjMsNSwwLDAsMTE1LDE2LDAsMCwwLDAsNCwxMiwxLAotICAgIDEyLDEsMjQsMSwxMiwxLDQsMiw2LDMsMTksMiwxMTcsMjIsMCwwLAotICAgIDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCwxMSwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDExLDAsMCwwLDk5LDEwOCw5NywxMTUsMTE1LAotICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsCi0gICAgMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDExNywxMSwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDExNywyMCwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwxLAotICAgIDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsCi0gICAgOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsCi0gICAgMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDIwNiw0LDAsCi0gICAgMCwxMTUsMTQsMCwwLDAsMTYsMiw2LDIsMTgsOCwxOCwxNywxOCwxNywKLSAgICAxOCwyNywzLDEsMTE3LDEwLDAsMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICAzLDAsMCwwLDY2LDAsMCwwLDExNSwxMTAsMCwwLDAsMTI0LDAsMCwKLSAgICA2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLAotICAgIDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLAotICAgIDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LDAsOTAsNywKLSAgICAwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDgsMCwxMDAsOCwwLAotICAgIDEwMCw5LDAsMTMyLDAsMCw5MCw5LDAsMTAxLDEwLDAsMTAwLDEwLDAsMTAwLAotICAgIDExLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDEyLDAsMTAwLDEzLAotICAgIDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwxNCwwLDgzLDQwLDE1LDAsMCwwLAotICAgIDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywKLSAgICAxNzIsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTEwLDExNiwxMDEsCi0gICAgMTE0LDk3LDk5LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExMiwxMDEsMTE0LAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTAsOTksMTAxLDQ0LDMyLDk4LDEwMSwxMDUsMTEwLDEwMywxMCwKLSAgICAzMiwzMiwzMiwzMiwxMTQsMTAxLDEwMiwxMTQsMTAxLDExNSwxMDQsMTAxLDEwMCwzMiwxMTksMTA0LAotICAgIDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNCwKLSAgICA5NywxMTAsMTAwLDEwOCwxMDUsMTEwLDEwMywzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLAotICAgIDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsMTA1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNSwwLDAsCi0gICAgMCw3LDAsMCwwLDExNSwxMjIsMCwwLDAsMTAzLDAsMCwxMjUsMywwLAotICAgIDEyMCw1MiwwLDEyNCwyLDAsNjgsOTMsNDQsMCw5MiwyLDAsMTM3LDAsMCwKLSAgICAxMjUsNCwwLDEyNCwzLDAsMTA2LDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI0LDQsMCw2OCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMSwxMTMsMTMsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMSwwLAotICAgIDEyNCwxLDAsMTEyLDc5LDAsMTAwLDMsMCwxMjQsMCwwLDk1LDIsMCwxMDAsCi0gICAgNiwwLDEyNCwwLDAsOTUsMywwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwKLSAgICAwLDk1LDUsMCwxMTYsNCwwLDEzMSwwLDAsMTI0LDAsMCw5NSw2LDAsCi0gICAgMTAwLDUsMCw4Myw0MCw3LDAsMCwwLDExNywxNTQsMCwwLDAsNzMsMTEwLAotICAgIDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsCi0gICAgMzIsMTExLDExMCwzMiw5NywxMTAsMTAwLDMyLDk3LDMyLDExOCw5NywxMTQsMTA1LDk3LDk4LAotICAgIDEwOCwxMDEsMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMTEsMTAyLDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDUwLDQ1LDExNiwxMTcsMTEyLDEwOCwxMDEsMTE1LDMyLDk5LDExMSwKLSAgICAxMTAsMTE2LDk3LDEwNSwxMTAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKLSAgICAzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDEwMSw5OSwKLSAgICAxMTEsMTAzLDExMCwxMDUsMTIyLDEwMSwxMTUsNDYsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsMywwLDAsMCw1MSwwLDAsMCwxMTUsMjcsMCwKLSAgICAwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LDEsMCwxMzYsMCwKLSAgICAwLDEwMiwyLDAsODYsMSwxMTMsMywwLDEwMCwwLDAsODMsNDAsMSwwLAotICAgIDAsMCw3OCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDIsMCwKLSAgICAwLDAsNDYsNDgsMTE3LDYsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDAsCi0gICAgMSwwLDAsMCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwKLSAgICAxMjAsMTEyLDExNCw2Miw1Niw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsMTE3LAotICAgIDM4LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKLSAgICA0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE3LDEsMCwwLDAsNDYsCi0gICAgMTA1LDEsMCwwLDAsNzgsMTA1LDI1NSwyNTUsMjU1LDI1NSw0MCw3LDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNyw4LDAsMCwwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMDEsMTE2LDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxOSwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDExNyw3LDAsMCwwLAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw4LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwKLSAgICAxMDUsMTIwLDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwxLDAsMCwwLDExNyw2LAotICAgIDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw1MCw1LDAsMCwxMTUsMTYsMCwwLAorICAgIDEyMiwyMiw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAzLDEwMSwKKyAgICAxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw3OCw5OSwzLDAsMCwwLDAsMCwKKyAgICAwLDAsNSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw5NywKKyAgICAwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQsMCwxMTYsCisgICAgMCwwLDEwNiwxLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LDIsCisgICAgMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCw5MiwyLDAsMTI1LDMsMCwKKyAgICAxMjUsNCwwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwwLDExNCw2NCwwLDEyNCwKKyAgICAzLDAsODMsMTI0LDQsMCwxMTQsODksMCwxMTYsMywwLDEyNCwxLDAsMTI0LAorICAgIDQsMCwxMjQsMCwwLDEwNiwyLDAsMTMxLDMsMCw4MywxMDAsMSwwLDgzLAorICAgIDEwMCwxLDAsODMsNDEsMiwxMjIsOTgsNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LAorICAgIDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0Niw3OCw0MSw0LDExNCw3LDAsCisgICAgMCwwLDExNCwzNSwwLDAsMCwxMTQsMzksMSwwLDAsMTE0LDI3LDEsMCwKKyAgICAwLDQxLDUsMTE0LDIxNiwwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCwzNSwwLAorICAgIDAsMCwxMTQsMTYxLDAsMCwwLDExNCwzOCwxLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjE4LDAsMCwwLAorICAgIDcyLDUsMCwwLDExNSwxNiwwLDAsMCwwLDQsMTIsMSwxMiwxLDI0LAorICAgIDEsMTIsMSw0LDIsNiwzLDE5LDIsMTIyLDIyLDgwLDk3LDExNiwxMDQsNzAsCisgICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsNDEsMTAsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwKKyAgICAwLDAsMTE0LDU5LDAsMCwwLDExNCwyMjIsMCwwLDAsMTE0LDI5LDEsMCwKKyAgICAwLDExNCwzNCwxLDAsMCwxMTQsMzUsMSwwLDAsMTE0LDM5LDEsMCwwLAorICAgIDExNCwyMTgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDI4LDEsMCwwLDI1NSw0LAorICAgIDAsMCwxMTUsMTQsMCwwLDAsMTIsMiw2LDIsMTgsOCwxOCwxNywxOCwKKyAgICAxNywxOCwyNywzLDEsMTE0LDI4LDEsMCwwLDk5LDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNjQsMCwwLDAsMTE1LAorICAgIDEwNiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKKyAgICAxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCwKKyAgICA0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LAorICAgIDAsOTAsNywwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDgsMCwKKyAgICAxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw5LDAsMTAxLDEwLDAsMTAwLAorICAgIDEwLDAsMTAwLDExLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDEyLAorICAgIDAsMTAwLDEzLDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwxNCwwLDgzLDQxLDE1LAorICAgIDIxOCwxMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDEyMiwxNzIsNzAsMTA1LAorICAgIDEwOCwxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTEwLDExNiwxMDEsMTE0LDk3LDk5LDExNiwxMDUsMTExLAorICAgIDExMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKKyAgICAzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiw5NywxMTQsMTAxLDMyLDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExMiwxMDEsMTE0LDEwMiwxMTEsMTE0LDEwOSw5NywxMTAsCisgICAgOTksMTAxLDQ0LDMyLDk4LDEwMSwxMDUsMTEwLDEwMywxMCwzMiwzMiwzMiwzMiwxMTQsMTAxLAorICAgIDEwMiwxMTQsMTAxLDExNSwxMDQsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsCisgICAgMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDUsMTEwLAorICAgIDEwMywzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsCisgICAgMTA1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDUsMCwwLDAsNSwwLDAsMCw3LDAsMCwwLDExNSwKKyAgICAxMjIsMCwwLDAsMTAzLDAsMCwxMjUsMywwLDEyMCw1MiwwLDEyNCwyLDAsCisgICAgNjgsOTMsNDQsMCw5MiwyLDAsMTM3LDAsMCwxMjUsNCwwLDEyNCwzLDAsCisgICAgMTA2LDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwKKyAgICAwLDAsMTI0LDQsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMSwxMTMsMTMsMCwKKyAgICA4NywxMjQsMywwLDEyNCwwLDAsOTUsMSwwLDEyNCwxLDAsMTEyLDc5LDAsCisgICAgMTAwLDMsMCwxMjQsMCwwLDk1LDIsMCwxMDAsNiwwLDEyNCwwLDAsOTUsCisgICAgMywwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwwLDk1LDUsMCwxMTYsNCwKKyAgICAwLDEzMSwwLDAsMTI0LDAsMCw5NSw2LDAsMTAwLDUsMCw4Myw0MSw3LAorICAgIDEyMiwxNTQsNzMsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwzMiwxMTksMTA1LDExNiwKKyAgICAxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTUsMTAxLAorICAgIDk3LDExNCw5OSwxMDQsMzIsMTExLDExMCwzMiw5NywxMTAsMTAwLDMyLDk3LDMyLDExOCw5NywKKyAgICAxMTQsMTA1LDk3LDk4LDEwOCwxMDEsMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMTEsMTAyLAorICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDUwLDQ1LDExNiwxMTcsMTEyLDEwOCwxMDEsCisgICAgMTE1LDMyLDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMTE0LDEwMSw5OSwxMTEsMTAzLDExMCwxMDUsMTIyLDEwMSwxMTUsNDYsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCw1MSwwLDAsCisgICAgMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LAorICAgIDEsMCwxMzYsMCwwLDEwMiwyLDAsODYsMSwxMTMsMywwLDEwMCwwLDAsCisgICAgODMsNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwKKyAgICAxMTQsMTAsMSwwLDAsNDEsMSwxMTQsMTYxLDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCwxNDQsMCwwLDAsMTA1LDUsMCwwLDExNSwKKyAgICAyLDAsMCwwLDYsMCwxMjIsMzgsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCisgICAgMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsNjAsMTA4LDExMSw5OSwKKyAgICA5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTQsMTAyLAorICAgIDAsMCwwLDExNCwyOSwwLDAsMCw3OCwxMTQsMTI0LDAsMCwwLDQxLDcsCisgICAgMTE0LDIwOCwwLDAsMCwyMTgsOCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTQsCisgICAgMzUsMCwwLDAsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwKKyAgICAxMDEsMjE4LDMsMTE1LDEwMSwxMTYsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LAorICAgIDk5LDEwNCwxMDEsMjE4LDE5LDk1LDExNCwxMDEsMTA4LDk3LDEyMCwxMDEsMTAwLDk1LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDEsNSwxMTQsNzYsMCwwLDAsMTE0LAorICAgIDM1LDAsMCwwLDIxOCwxNCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LAorICAgIDk3LDEwNSwxMDgsMTE1LDkwLDcsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDExMywwLAorICAgIDAsMCwxMTQsNCwwLDAsMCw0MSwxLDExNCwxNjEsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDc3LDAsMCwwLDk5LDUsMCwwLDExNSwxNiwwLDAsCiAgICAgMCwwLDQsNiwxLDE5LDEsMzYsMSw5LDIsMTUsMSw5LDEsMTIsCi0gICAgMSwxMTcsMTksMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICA0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsCi0gICAgMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsCi0gICAgMCwwLDAsMTAwLDMsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMiwwLDgzLAotICAgIDQwLDQsMCwwLDAsMTE3LDMxLDAsMCwwLDczLDExMCwxMTgsOTcsMTA4LDEwNSwKLSAgICAxMDAsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKLSAgICAxMTQsMTIxLDMyLDEwOSwxMTYsMTA1LDEwOSwxMDEsNDYsMTA1LDEsMCwwLDAsNzgsMTA1LAotICAgIDI1NSwyNTUsMjU1LDI1NSw0MCwxLDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LAotICAgIDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNjQsNSwwLDAsMTE1LDIsMCwKLSAgICAwLDAsMCwyLDExNywyOCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksCi0gICAgOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsMCwwLDEyLDAsCi0gICAgMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwyMTYsMSwwLDAsMTAwLAotICAgIDgsMCwxMjUsMiwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLAotICAgIDAsMTAwLDIsMCwyNSwxMjUsMywwLDEyMSwyNSwwLDExNiwyLDAsMTA2LDMsCi0gICAgMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDEsMCwxMDYsNSwwLDEyNSw0LDAsCi0gICAgODcsMTEwLDI0LDAsNCwxMTYsNiwwLDEwNywxMCwwLDExNCw3NiwwLDEsMSwKLSAgICAxLDEwMCw5LDAsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDEyNCw0LDAsMTI0LAotICAgIDAsMCwxMDYsNywwLDEwNywzLDAsMTE0LDExNCwwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMzEsMCwwLDEsMTI0LDQsMCwxMjQsMCwwLDk1LDcsMCwxMTAsMCwKLSAgICAwLDExNiw5LDAsMTMxLDAsMCwxMTQsMTQ3LDAsMTI0LDAsMCwxMDYsMTAsMCwKLSAgICAxMjUsNSwwLDEyNCwzLDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNiwwLDExMCwKLSAgICAxNSwwLDEyNCwwLDAsMTA2LDEyLDAsMTI1LDUsMCwxMjQsMywwLDEyNSw2LAotICAgIDAsMTI0LDYsMCwxMjQsNSwwLDEwNyw2LDAsMTE0LDQ1LDEsMTE2LDEzLDAsCi0gICAgMTI0LDAsMCwxMDYsNCwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNywwLDExNiwKLSAgICAxNCwwLDEyNCw3LDAsMTMxLDEsMCwxMTQsNDUsMSwxMjAsOTEsMCwxMjQsMCwKLSAgICAwLDEwNiwxNSwwLDY4LDkzLDcxLDAsOTIsMiwwLDEyNSw4LDAsMTI1LDksCi0gICAgMCwxMDAsNCwwLDEyNCw4LDAsMjMsMTI1LDEwLDAsMTE2LDEzLDAsMTI0LDcsCi0gICAgMCwxMjQsMTAsMCwxMzEsMiwwLDEyNSwxMSwwLDExNiwxNiwwLDEyNCwxMSwwLAotICAgIDEzMSwxLDAsMTE0LDIxNCwwLDEyNCw5LDAsMTI0LDEsMCwxMjQsMTEsMCwxMzEsCi0gICAgMiwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDExMywyMTQsMCw4NywKLSAgICAxMDAsMTAsMCwxMjUsMiwwLDExMyw0NSwxLDExMCwwLDAsMTIwLDEyMCwwLDEyNCwKLSAgICAwLDAsMTA2LDE1LDAsNjgsOTMsMTA5LDAsOTIsMiwwLDEyNSw4LDAsMTI1LAotICAgIDksMCwxMTYsMTMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDMsMCwxMjQsOCwKLSAgICAwLDIzLDEzMSwyLDAsMTI1LDExLDAsMTE2LDE4LDAsMTAwLDUsMCwxMDYsMTksCi0gICAgMCwxMjQsMTEsMCwxMzEsMSwwLDEwMCw2LDAsMTAwLDIsMCwxMzEsMSwxLAotICAgIDEsMTI0LDYsMCwxMjQsOCwwLDIzLDEyNCw1LDAsMTA3LDYsMCwxMTQsNTUsCi0gICAgMSwxMTYsMTYsMCwxMjQsMTEsMCwxMzEsMSwwLDExNCwxNjQsMSwxMjQsOSwwLAotICAgIDEyNCwxLDAsMTI0LDExLDAsMTMxLDIsMCwxMDMsMCwwLDEwMiwyLDAsODMsCi0gICAgMTEzLDU1LDEsMTEzLDU1LDEsODcsMTI0LDIsMCwxMTQsMjA2LDEsMTE2LDE4LDAsCi0gICAgMTAwLDcsMCwxMDYsMTksMCwxMjQsNywwLDEzMSwxLDAsMTMxLDEsMCwxLAotICAgIDEwMCwxMSwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDEwMCwxMSwwLAotICAgIDEwMywwLDAsMTAyLDIsMCw4Myw0MCwxMiwwLDAsMCwxMTcsMTI1LDAsMCwKLSAgICAwLDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAotICAgIDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCi0gICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDMyLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLDExNiwxMTcsMTE0LAotICAgIDExMCwxMTUsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsMTA1LDExNSwxMTYsCi0gICAgNDUsMTExLDEwMiw0NSwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLDQ2LDExNywxLAotICAgIDAsMCwwLDQ2LDEwNSwyLDAsMCwwLDEwNSwxLDAsMCwwLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsOSwwLDAsMCwKLSAgICAxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNyw5LDAsMCwwLDExOCwxMDEsCi0gICAgMTE0LDk4LDExMSwxMTUsMTA1LDExNiwxMjEsMTE3LDI1LDAsMCwwLDExMiwxMTEsMTE1LDExNSwKLSAgICAxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMjMsMTI1LDcwLDEwNSwyNTUsMjU1LDI1NSwyNTUsODQsNzgsNDAsMjEsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDEwLDAsMCwKLSAgICAwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywzLDAsMCwwLAotICAgIDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwKLSAgICAxMDksMTAxLDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNywxOSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw1LDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsCi0gICAgMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwxMTcsCi0gICAgMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsCi0gICAgOCwwLDAsMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMTIsMCwwLAotICAgIDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsMTE3LDQsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LAotICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw2LDAsMCwwLAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMTIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTIsMCwwLDAsMTA1LAotICAgIDExNSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwxMTcsMTEsMCwwLDAsCi0gICAgMTE2LDk3LDEwNSwxMDgsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDUsMCwwLDAsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsNSwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDExNywKLSAgICAxMiwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDExNyw5LDAsMCwwLDk4LDk3LDExNSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsCi0gICAgMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTE3LDYsMCwwLDAsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsMTMsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOSwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNzAsNSwwLDAsMTE1LDY2LDAsMCwwLDAsMyw2LDEsMTksMSwzLAotICAgIDEsMjUsMSwxMywxLDExLDEsMTUsMSwxMCwxLDEyLDIsOSwxLDksCi0gICAgMSwxNSwyLDksMSw2LDIsMTIsMSwxOCwxLDEyLDEsMjIsMSwxMCwKLSAgICAxLDE1LDEsMTIsMSwyNiw0LDEyLDIsMjIsMSwyMiwxLDI1LDEsMTYsCi0gICAgMSwxMiwxLDI2LDEsNiwxLDE5LDEsMTMsMSwxMTcsMjIsMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsOSwKLSAgICAwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsOCwxLDAsMCwKLSAgICAxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjEsMTksMCwxMTYsMSwwLDEwNiwKLSAgICAyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDMzLDAsNCwKLSAgICAxMTYsMywwLDExNiw0LDAsMTE2LDUsMCwxMDIsMywwLDEwNywxMCwwLDExNCwKLSAgICA2MywwLDEsMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsMSwwLDg4LAotICAgIDExNiw2LDAsMTA2LDcsMCwxMDYsOCwwLDEwMCwxLDAsMTMxLDEsMCwxMTUsCi0gICAgMTAwLDAsMTE2LDksMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxMCwKLSAgICAwLDExMCwxMTEsMCwxMTYsOSwwLDEzMSwwLDAsMTI1LDMsMCwxMjAsOTAsMCwKLSAgICAxMjQsMiwwLDY4LDkzLDgyLDAsMTI1LDQsMCwxMjQsNCwwLDEwNiwxMSwwLAotICAgIDEwMCwyLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDUsMCwxMjUsNiwwLDEyNSwKLSAgICA3LDAsMTI0LDYsMCwxMTQsMTc5LDAsMTAwLDMsMCwxMDYsMTIsMCwxMjQsNSwKLSAgICAwLDEyNCw3LDAsMTA2LDEzLDAsMTMxLDAsMCwxMzEsMiwwLDEyNSw4LDAsCi0gICAgMTEwLDYsMCwxMjQsNSwwLDEyNSw4LDAsMTI0LDMsMCwxMDYsMTQsMCwxMjQsCi0gICAgOCwwLDEzMSwxLDAsMSwxMTMsMTE2LDAsODcsMTI0LDMsMCwxMjQsMCwwLAotICAgIDk1LDEwLDAsMTE2LDYsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDE1LDAsMTMxLAotICAgIDEsMCwxMTQsNCwxLDExNiw5LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAotICAgIDAsMTI0LDIsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxNiwKLSAgICAwLDExMCwwLDAsMTAwLDYsMCw4Myw0MCw3LDAsMCwwLDExNyw2OCwwLAotICAgIDAsMCw3MCwxMDUsMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDMyLDExMSwxMDIsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDAsMTA1LDExNCwxMDEsCi0gICAgOTksMTE2LDExMSwxMTQsMTIxLDQ2LDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNywxLAotICAgIDAsMCwwLDQ2LDExNyw1LDAsMCwwLDEyMywxMjUsNDYsMTIzLDEyNSw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDExNSwKLSAgICAwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLAotICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEzMSwwLDAsODYsMSwxMTMsMywwLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNyw1LAotICAgIDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsNDAsMiwwLDAsMCwxMTcsMiwwLAotICAgIDAsMCw0Niw0OCwxMTcsMiwwLDAsMCwxMDIsMTEwLDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsCi0gICAgMTAxLDEyMCwxMTIsMTE0LDYyLDE0Myw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsCi0gICAgMTE3LDQxLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsNjAsMTA4LDExMSw5OSwKLSAgICA5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2Miw3OCw0MCwKLSAgICAxNywwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMywwLAotICAgIDAsMCw5NSwxMTEsMTE1LDExNyw3LDAsMCwwLDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LAotICAgIDExNCwxMTcsMTcsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzgsMTExLDExNiw3MCwxMTEsMTE3LAotICAgIDExMCwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxNSwwLDAsMCw4MCwxMDEsMTE0LDEwOSwKLSAgICAxMDUsMTE1LDExNSwxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDE4LDAsMCwwLAotICAgIDc4LDExMSwxMTYsNjUsNjgsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsOCwwLDAsMCwxMTIsCi0gICAgMTA4LDk3LDExNiwxMDIsMTExLDExNCwxMDksMTE3LDEwLDAsMCwwLDExNSwxMTYsOTcsMTE0LAotICAgIDExNiwxMTUsMTE5LDEwNSwxMTYsMTA0LDExNywzLDAsMCwwLDExNSwxMDEsMTE2LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw5LAotICAgIDAsMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDYsMCwwLAotICAgIDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNSwwLDAsMCwxMDgsMTExLDExOSwxMDEsCi0gICAgMTE0LDExNywzLDAsMCwwLDk3LDEwMCwxMDAsMTE3LDI3LDAsMCwwLDk1LDY3LAotICAgIDY1LDgzLDY5LDk1LDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LAotICAgIDgwLDc2LDY1LDg0LDcwLDc5LDgyLDc3LDgzLDExNywxOSwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDQwLDksMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk5LDExMSwxMTAsCi0gICAgMTE2LDEwMSwxMTAsMTE2LDExNSwxMTcsMjEsMCwwLDAsMTA4LDExMSwxMTksMTAxLDExNCw5NSwKLSAgICAxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsMTE3LAotICAgIDQsMCwwLDAsMTA1LDExNiwxMDEsMTA5LDExNyw0LDAsMCwwLDExMCw5NywxMDksCi0gICAgMTAxLDExNywzLDAsMCwwLDEwMCwxMTEsMTE2LDExNyw2LDAsMCwwLDExNSwxMTcsCi0gICAgMTAyLDEwMiwxMDUsMTIwLDExNyw4LDAsMCwwLDExMCwxMDEsMTE5LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsCi0gICAgMCwwLDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNCw1LDAsCi0gICAgMCwxMTUsMzQsMCwwLDAsMCwyLDksMSwzLDEsMTksMSwyMiwzLAotICAgIDExLDMsMTgsMSwxOCw3LDksMSwxMywxLDI0LDEsNiwxLDI3LDIsCi0gICAgNiwxLDE3LDEsOSwxLDE4LDEsMTE3LDIyLDAsMCwwLDcwLDEwNSwxMDgsCi0gICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCi0gICAgMywwLDAsMCw3LDAsMCwwLDExNSwyNSwwLDAsMCwxMzUsMCwwLAotICAgIDEzNSwxLDAsMTAyLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsCi0gICAgMiwwLDEyNCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMjAsMSwwLDAsCi0gICAgNjUsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LAotICAgIDEwNCwxMDUsOTksMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywzMiw5OSwKLSAgICAxMDgsMTExLDExNSwxMTcsMTE0LDEwMSwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDExMSwxMTAsCi0gICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTA1LDEwOCwKLSAgICAxMDgsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMTEwLDMyLDEwNSwxMTAsMTE1LDExNiwKLSAgICA5NywxMTAsOTksMTAxLDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAotICAgIDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwKLSAgICAzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDk5LDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICA5OSwxMDgsMTExLDExNSwxMTcsMTE0LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LAotICAgIDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNDQsMzIsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDQ2LDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMzEsMSwwLDExNSwzMywwLDExNiwxLDAsMTAwLDEsMCwKLSAgICAxMDAsMiwwLDEyNCwwLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LAotICAgIDAsMCwxMjQsMCwwLDEzNiwxLDAsMTQwLDEsMCw4Myw0MCwzLDAsMCwKLSAgICAwLDExNyw0NSwwLDAsMCw4MCw5NywxMTYsMTA0LDMyLDEwNCwxMTEsMTExLDEwNywzMiwKLSAgICAxMDIsMTExLDExNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDEwOSw5NywKLSAgICA5OSwxMDQsMTA1LDExMCwxMDEsMTE0LDEyMSw0Niw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDQ2LDExNywzMCwwLDAsMCwxMTEsMTEwLDEwOCwxMjEsMzIsMTAwLDEwNSwxMTQsCi0gICAgMTAxLDk5LDExNiwxMTEsMTE0LDEwNSwxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE1LDExNywxMTIsCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsCi0gICAgMiwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LAotICAgIDExNSwxMDAsMTA1LDExNCwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LAotICAgIDE0LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LAotICAgIDEwOCwxMTUsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI0LDAsMCwwLDExMiw5NywKKyAgICAxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LAorICAgIDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwKKyAgICAxMDAsMywwLDEyNCwwLDAsOTUsMCwwLDEwMCwyLDAsODMsNDEsNCwxMjIsCisgICAgMzEsNzMsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTA5LDExNiwxMDUsMTA5LDEwMSw0NiwKKyAgICAxMTQsMjksMCwwLDAsNzgsMTE0LDEyNCwwLDAsMCw0MSwxLDExNCw0MiwxLAorICAgIDAsMCw0MSwxLDExNCw3NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjksMSwwLDAsMTEzLDUsMCwKKyAgICAwLDExNSwyLDAsMCwwLDAsMiwxMjIsMjgsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCw0NiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LAorICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE1LDk5LDIsMCwwLDAsMCwwLDAsMCwxMiwKKyAgICAwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMjE2LDEsMCwwLAorICAgIDEwMCwxLDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwwLDAsMTAwLDIsMCwxMzEsCisgICAgMSwwLDEwMCwzLDAsMjUsMTI1LDMsMCwxMjEsMzQsMCwxMTYsMSwwLDEyNCwKKyAgICAwLDAsMTA2LDIsMCwxMTIsNDksMCwxMTYsMywwLDEwNiw0LDAsMTMxLDAsCisgICAgMCwxMzEsMSwwLDEwNiw1LDAsMTI1LDQsMCw4NywxMTAsMjQsMCw0LDExNiwKKyAgICA2LDAsMTA3LDEwLDAsMTE0LDg1LDAsMSwxLDEsMTAwLDEwLDAsMTI1LDQsCisgICAgMCw4OSwxMTAsMSwwLDg4LDEyNCw0LDAsMTI0LDAsMCwxMDYsNywwLDEwNywKKyAgICAzLDAsMTE0LDEyMywwLDEyNCwwLDAsMTA2LDgsMCwxMzEsMCwwLDEsMTI0LAorICAgIDQsMCwxMjQsMCwwLDk1LDcsMCwxMTAsMCwwLDExNiw5LDAsMTMxLDAsCisgICAgMCwxMTQsMTU2LDAsMTI0LDAsMCwxMDYsMTAsMCwxMjUsNSwwLDEyNCwzLDAsCisgICAgMTA2LDExLDAsMTMxLDAsMCwxMjUsNiwwLDExMCwxNSwwLDEyNCwwLDAsMTA2LAorICAgIDEyLDAsMTI1LDUsMCwxMjQsMywwLDEyNSw2LDAsMTI0LDYsMCwxMjQsNSwKKyAgICAwLDEwNyw2LDAsMTE0LDQ1LDEsMTE2LDEzLDAsMTI0LDAsMCwxMDYsMiwwLAorICAgIDEyNCwzLDAsMTMxLDIsMCwxMjUsNywwLDEyMCw5NywwLDEyNCwwLDAsMTA2LAorICAgIDE0LDAsNjgsOTMsNzEsMCw5MiwyLDAsMTI1LDgsMCwxMjUsOSwwLDEwMCwKKyAgICA1LDAsMTI0LDgsMCwyMywxMjUsMTAsMCwxMTYsMTMsMCwxMjQsNywwLDEyNCwKKyAgICAxMCwwLDEzMSwyLDAsMTI1LDExLDAsMTE2LDE1LDAsMTI0LDExLDAsMTMxLDEsCisgICAgMCwxMTQsMjExLDAsMTI0LDksMCwxMjQsMSwwLDEyNCwxMSwwLDEzMSwyLDAsCisgICAgMTI0LDcsMCwxMDMsMSwwLDEwMiwyLDAsODMsMTEzLDIxMSwwLDg3LDExNiwxNiwKKyAgICAwLDEyNCw3LDAsMTMxLDEsMCwxMjUsMiwwLDExMCwwLDAsMTIwLDEyMCwwLAorICAgIDEyNCwwLDAsMTA2LDE0LDAsNjgsOTMsMTA5LDAsOTIsMiwwLDEyNSw4LDAsCisgICAgMTI1LDksMCwxMTYsMTMsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDMsMCwxMjQsCisgICAgOCwwLDIzLDEzMSwyLDAsMTI1LDExLDAsMTE2LDE3LDAsMTAwLDYsMCwxMDYsCisgICAgMTgsMCwxMjQsMTEsMCwxMzEsMSwwLDEwMCw3LDAsMTAwLDMsMCwxMzEsMSwKKyAgICAxLDEsMTI0LDYsMCwxMjQsOCwwLDIzLDEyNCw1LDAsMTA3LDYsMCwxMTQsCisgICAgNTUsMSwxMTYsMTUsMCwxMjQsMTEsMCwxMzEsMSwwLDExNCwxNjQsMSwxMjQsOSwKKyAgICAwLDEyNCwxLDAsMTI0LDExLDAsMTMxLDIsMCwxMDMsMCwwLDEwMiwyLDAsCisgICAgODMsMTEzLDU1LDEsMTEzLDU1LDEsODcsMTI0LDIsMCwxMTQsMjA2LDEsMTE2LDE3LAorICAgIDAsMTAwLDgsMCwxMDYsMTgsMCwxMjQsNywwLDEzMSwxLDAsMTMxLDEsMCwKKyAgICAxLDEwMCw5LDAsMTI0LDcsMCwxMDMsMSwwLDEwMiwyLDAsODMsMTAwLDksCisgICAgMCwxMDMsMCwwLDEwMiwyLDAsODMsNDEsMTEsMTIyLDEyNSw4NCwxMTQsMTIxLDMyLAorICAgIDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsCisgICAgMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTEsMTE0LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTIsMTExLDExNCwxMTYsCisgICAgMTA1LDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDQwLDEwOCwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwxMTUsMTE2LDQ1LDExMSwxMDIsNDUsMTEyLAorICAgIDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0Niw3MCwxMTQsMTAyLDAsMCwwLDExNCwKKyAgICAxMDEsMCwwLDAsMTE0LDI5LDAsMCwwLDExNCw3NywwLDAsMCwxMjIsOSwKKyAgICAxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNCwxMzEsMCwwLDAsMTIyLDI1LAorICAgIDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAorICAgIDk5LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMTI1LDc4LDExNCwxMjQsMCwwLDAsNDEsCisgICAgMTksMTE0LDMyLDAsMCwwLDExNCwzOSwwLDAsMCwxMTQsMzUsMCwwLDAsCisgICAgMTE0LDMsMCwwLDAsMTE0LDQ1LDAsMCwwLDExNCw0LDEsMCwwLDExNCwKKyAgICA0MCwwLDAsMCwxMTQsNDIsMSwwLDAsMjE4LDExLDk1LDEwMiwxMDUsMTA4LDEwOCwKKyAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNCw2LDAsMCwwLDExNCw0NSwxLDAsMCwKKyAgICAxMTQsMTI1LDAsMCwwLDExNCw0NCwxLDAsMCwxMTQsMjgsMCwwLDAsMTE0LAorICAgIDQxLDEsMCwwLDExNCw0NCwwLDAsMCwxMTQsNDYsMCwwLDAsMTE0LDEzOCwKKyAgICAwLDAsMCwxMTQsNDcsMCwwLDAsNDEsMTIsMTE0LDc2LDAsMCwwLDExNCwKKyAgICAxNzksMCwwLDAsOTAsMTIsMTA1LDExNSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAorICAgIDk5LDEwMSw5MCwxMSwxMTYsOTcsMTA1LDEwOCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsCisgICAgMTk0LDAsMCwwLDkwLDUsOTksOTcsOTksMTA0LDEwMSw5MCwxMiw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDkwLDksOTgsOTcsMTE1LDEwMSw5NSwKKyAgICAxMTIsOTcsMTE2LDEwNCwxMTQsMTAsMSwwLDAsMTE0LDE2MSwwLDAsMCw5MCwxMywKKyAgICAxMDUsMTEwLDEwNSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDkwLDksMTAyLAorICAgIDExNywxMDgsMTA4LDk1LDExMiw5NywxMTYsMTA0LDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwxODUsMCwwLDAsMTE5LDUsMCwwLAorICAgIDExNSw2NCwwLDAsMCwwLDMsNiwxLDE5LDEsMywxLDM0LDEsMTMsCisgICAgMSwxMSwxLDE1LDEsMTAsMSwxMiwyLDksMSw5LDEsMTUsMiw5LAorICAgIDEsNiwyLDEyLDEsMTgsMSwyMiwxLDEwLDEsMTUsMSwxMiwxLDI2LAorICAgIDQsMTUsMiwyMiwxLDIyLDEsMjUsMSwxNiwxLDEyLDEsMjYsMSw2LAorICAgIDEsMTksMSwxMywxLDEyMiwyMiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwKKyAgICAwLDAsMCwwLDAsMCw5LDAsMCwwLDEzLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwxNCwxLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwKKyAgICAxMjEsMzEsMCwxMTYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMTIsMzMsMCwxMTYsCisgICAgMSwwLDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLAorICAgIDMzLDAsNCwxMTYsNCwwLDExNiw1LDAsMTE2LDYsMCwxMDIsMywwLDEwNywKKyAgICAxMCwwLDExNCw3NSwwLDEsMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsCisgICAgMSwwLDg4LDExNiw3LDAsMTA2LDgsMCwxMDYsOSwwLDEwMCwxLDAsMTMxLAorICAgIDEsMCwxMTUsMTEyLDAsMTE2LDEwLDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwwLAorICAgIDAsOTUsMTEsMCwxMTAsMTExLDAsMTE2LDEwLDAsMTMxLDAsMCwxMjUsMywwLAorICAgIDEyMCw5MCwwLDEyNCwyLDAsNjgsOTMsODIsMCwxMjUsNCwwLDEyNCw0LDAsCisgICAgMTA2LDEyLDAsMTAwLDIsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNSwwLDEyNSwKKyAgICA2LDAsMTI1LDcsMCwxMjQsNiwwLDExNCwxOTEsMCwxMDAsMywwLDEwNiwxMywKKyAgICAwLDEyNCw1LDAsMTI0LDcsMCwxMDYsMTQsMCwxMzEsMCwwLDEzMSwyLDAsCisgICAgMTI1LDgsMCwxMTAsNiwwLDEyNCw1LDAsMTI1LDgsMCwxMjQsMywwLDEwNiwKKyAgICAxNSwwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywxMjgsMCw4NywxMjQsMywwLAorICAgIDEyNCwwLDAsOTUsMTEsMCwxMTYsNywwLDEwNiw4LDAsMTA2LDksMCwxMTYsCisgICAgMTYsMCwxMzEsMSwwLDExNCwxMCwxLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwKKyAgICAwLDEyNCwyLDAsNjgsMTMxLDEsMCwxMjQsMCwwLDk1LDE3LDAsMTEwLDAsCisgICAgMCwxMDAsNiwwLDgzLDQxLDcsMTIyLDY4LDcwLDEwNSwxMDgsMTA4LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsMzIsMTExLDEwMiwzMiwxMTIsMTExLDExNiwxMDEsMTEwLAorICAgIDExNiwxMDUsOTcsMTA4LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLAorICAgIDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwKKyAgICAxMDUsMTE1LDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNDYsMTE0LDAsMCwKKyAgICAwLDAsMTE0LDEwMiwwLDAsMCwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCw4MywKKyAgICAwLDAsMCwxMTUsMjgsMCwwLDAsMTA0LDAsMCwxMjQsMCwwLDkzLDE4LAorICAgIDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwwLDAsMTMxLDAsMCwxNDYsMiwwLAorICAgIDExMyw2LDAsODMsMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTI1LDAsMCwwLAorICAgIDQxLDIsMTE0LDIyLDAsMCwwLDkwLDIsMTAyLDExMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyNTAsOSw2MCwxMTUsMTAxLDExNiwKKyAgICA5OSwxMTEsMTA5LDExMiw2MiwxOTEsNSwwLDAsMTE1LDIsMCwwLDAsOSwwLAorICAgIDEyMiw0MSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMiwxMDUsCisgICAgMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSwKKyAgICA2Miw0Niw2MCwxMTUsMTAxLDExNiw5OSwxMTEsMTA5LDExMiw2Miw3OCw0MSwxOCwxMTQsMzUsCisgICAgMCwwLDAsMTE0LDMsMCwwLDAsOTAsNywxMDgsMTA1LDExNSwxMTYsMTAwLDEwNSwKKyAgICAxMTQsMTE0LDQ1LDAsMCwwLDIxOCwxNyw3MCwxMDUsMTA4LDEwMSw3OCwxMTEsMTE2LDcwLAorICAgIDExMSwxMTcsMTEwLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMjE4LDE1LDgwLDEwMSwxMTQsMTA5LDEwNSwKKyAgICAxMTUsMTE1LDEwNSwxMTEsMTEwLDY5LDExNCwxMTQsMTExLDExNCwyMTgsMTgsNzgsMTExLDExNiw2NSwKKyAgICA2OCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw3LAorICAgIDAsMCwwLDExNCw4LDAsMCwwLDExNCw5LDAsMCwwLDExNCw0MywxLAorICAgIDAsMCwxMTQsNDQsMSwwLDAsMTE0LDEwNywwLDAsMCwxMTQsNDcsMCwwLAorICAgIDAsMTE0LDEyNSwwLDAsMCwyMTgsMyw5NywxMDAsMTAwLDExNCwxMCwwLDAsMCwKKyAgICAxMTQsNDUsMSwwLDAsNDEsOSwxMTQsNzYsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDkwLDgsOTksMTExLDExMCwxMTYsMTAxLDExMCwxMTYsMTE1LDkwLDIxLDEwOCwxMTEsMTE5LAorICAgIDEwMSwxMTQsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsOTUsOTksMTExLDExMCwxMTYsMTAxLDExMCwKKyAgICAxMTYsMTE1LDExNCwyNSwxLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDE5LDEsMCwKKyAgICAwLDExNCwxMCwxLDAsMCw5MCw4LDExMCwxMDEsMTE5LDk1LDExMCw5NywxMDksMTAxLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICA0NywxLDAsMCwxNjIsNSwwLDAsMTE1LDM0LDAsMCwwLDAsMiw5LAorICAgIDEsMywxLDMxLDEsMjIsMywxMSwzLDE4LDEsMTgsNyw5LDEsMTMsCisgICAgMSwyNCwxLDYsMSwyNywyLDYsMSwxNywxLDksMSwxOCwxLDEyMiwKKyAgICAyMiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMiwxMDUsMTA4LAorICAgIDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAzLDAsMCwwLDMsMCwwLDAsNywwLDAsMCwxMTUsMjUsMCwwLAorICAgIDAsMTM1LDAsMCwxMzUsMSwwLDEwMiwyLDAsMTAwLDEsMCwxMDAsMiwwLAorICAgIDEzNCwwLDAsMTI1LDIsMCwxMjQsMiwwLDgzLDQxLDMsOTcsMjAsMSwwLAorICAgIDAsNjUsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsCisgICAgMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywzMiwKKyAgICA5OSwxMDgsMTExLDExNSwxMTcsMTE0LDEwMSwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDExMSwKKyAgICAxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTA1LAorICAgIDEwOCwxMDgsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMTEwLDMyLDEwNSwxMTAsMTE1LAorICAgIDExNiw5NywxMTAsOTksMTAxLDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDExNSwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTEsMTEwLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDk5LDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiw5OSwxMDgsMTExLDExNSwxMTcsMTE0LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLAorICAgIDk3LDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNDQsMzIsNzMsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsCisgICAgMCwwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDQ2LDAsMCwwLDExNiwKKyAgICAwLDAsMTI0LDAsMCwxMzEsMSwwLDExNSwzMywwLDExNiwxLDAsMTAwLDEsCisgICAgMCwxMDAsMiwwLDEyNCwwLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsCisgICAgMTM2LDAsMCwxMjQsMCwwLDEzNiwxLDAsMTQwLDEsMCw4Myw0MSwzLDEyMiwKKyAgICA0NSw4MCw5NywxMTYsMTA0LDMyLDEwNCwxMTEsMTExLDEwNywzMiwxMDIsMTExLDExNCwzMiwxMDUsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDEwOSw5Nyw5OSwxMDQsMTA1LDExMCwxMDEsCisgICAgMTE0LDEyMSw0Niw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEyMiwzMCwKKyAgICAxMTEsMTEwLDEwOCwxMjEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEwNSwxMDEsMTE1LAorICAgIDMyLDk3LDExNCwxMDEsMzIsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMTE0LDM1LAorICAgIDAsMCwwLDQxLDIsMTE0LDQ2LDAsMCwwLDExNCwxNTgsMCwwLDAsNDEsCisgICAgMSwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsMjE2LDAsMCwwLDExNCw0NiwxLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjQsMTEyLDk3LAogICAgIDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLAotICAgIDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTU1LDUsMCwwLDExNSw2LDAsMCwwLDAsCi0gICAgMiwxMiwxLDIxLDEsMTE3LDU0LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDQ2LDYwLAotICAgIDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwKLSAgICAxMDcsOTUsMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICA0MCwwLDAsMCwwLDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsOTksCi0gICAgMTA4LDExNSwxMTcsMTQsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMDAsMTAxLAotICAgIDExNiw5NywxMDUsMTA4LDExNSwxMTcsMjQsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LAotICAgIDExMSwxMTEsMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLAotICAgIDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwyLDAsMCwwLDExNywzLDAsMCwKLSAgICAwLDk5LDEwOCwxMTUsMTE3LDE0LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsCi0gICAgMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxNDUsNSwwLDAsMTE1LDQsMCwwLDAsCi0gICAgMCwxMCwyMSw2LDExNywyMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5OSwxLDAsCi0gICAgMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsCi0gICAgMCwwLDExNSwxNCwwLDAsMCwxMDAsMSwwLDEyNCwwLDAsMTA2LDAsMCwKLSAgICAxMDIsMSwwLDIyLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDE0LDAsMCwwLAotICAgIDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsMzcsMTE0LDQxLDQwLDEsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsMSwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwKLSAgICAxMTQsOTUsOTUsMTYzLDUsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMTksCi0gICAgMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSw5NSwKLSAgICAxMTQsMTAxLDExMiwxMTQsOTUsOTUsNzgsNDAsMTMsMCwwLDAsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsCi0gICAgMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwKLSAgICAxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwKLSAgICA5NSw5NSwxMTcsMTcsMCwwLDAsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LAotICAgIDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSwxMTcsMTcsMCwwLDAsOTUsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDQsMTA1LDEwOSwxMTcsMTEsCi0gICAgMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwKLSAgICAwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNyw5LAotICAgIDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsCi0gICAgMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDcwLDEwNSwKLSAgICAxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDEsNSwwLDAsMTE1LDE2LDAsMCwKLSAgICAwLDE2LDcsNiwyLDEyLDE0LDEyLDQsNiwyLDEyLDQ0LDEyLDMxLDE4LAotICAgIDE4LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLAotICAgIDAsNjYsMCwwLDAsMTE1LDUwLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsCi0gICAgMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsCi0gICAgMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLAotICAgIDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDgzLDQwLDcsMCwwLAotICAgIDAsMTE3LDE4LDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LAotICAgIDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwxMTcsMzYsMCwwLDAsNjcsMTExLDExMCwKLSAgICAxMTYsMTAxLDEyMCwxMTYsMzIsMTA5LDk3LDExMCw5NywxMDMsMTAxLDExNCwzMiwxMDIsMTExLDExNCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywKLSAgICA0Niw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNCwwLDAsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTMxLDAsMCwxLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMjQsCi0gICAgMCwwLDAsNjUsOTksMTEzLDExNywxMDUsMTE0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0Niw3OCw0MCwyLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxMiwwLDAsMCw5NywKLSAgICA5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQwLDEsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsOTUsOTUsMTAxLDExMCwxMTYsMTAxLAotICAgIDExNCw5NSw5NSwxNzMsNSwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywyOCwKLSAgICAwLDAsMCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLAotICAgIDExMCwxMTYsMTAxLDEyMCwxMTYsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwKLSAgICA0LDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwxLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwxNCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLAotICAgIDAsMCwxLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNjAsMCwwLAotICAgIDAsODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTQsMTAxLDEwMyw5NywxMTQsMTAwLDEwOCwKLSAgICAxMDEsMTE1LDExNSwzMiwxMTEsMTAyLDMyLDk3LDExMCwxMjEsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLAotICAgIDEwMCwzMiwxMDEsMTIwLDk5LDEwMSwxMTIsMTE2LDEwNSwxMTEsMTEwLDExNSw0Niw3OCw0MCwyLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxMiwwLDAsCi0gICAgMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LDEwNyw0MCw0LDAsCi0gICAgMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwKLSAgICAxMDEsMTIwLDk5LDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsOSwwLDAsMCwxMDEsMTIwLDk5LAotICAgIDk1LDExOCw5NywxMDgsMTE3LDEwMSwxMTcsMTMsMCwwLDAsMTAxLDEyMCw5OSw5NSwxMTYsCi0gICAgMTE0LDk3LDk5LDEwMSw5OCw5Nyw5OSwxMDcsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsCi0gICAgOTUsMTc3LDUsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjcsMCwwLAotICAgIDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LAotICAgIDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw3OCw0MCw2LDAsCi0gICAgMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsCi0gICAgMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LAotICAgIDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsOSwwLDAsMCwKLSAgICA5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LAotICAgIDEwMSwxMjAsMTA1LDExNiw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTgsMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDE2OSw1LDAsCi0gICAgMCwxMTUsNiwwLDAsMCwxNiwyLDYsMiwxMiw0LDExNywxOCwwLDAsCi0gICAgMCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsCi0gICAgMTAxLDEyMCwxMTYsOTksMywwLDAsMCwwLDAsMCwwLDUsMCwwLDAsCi0gICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsOTEsMCwwLDAsMTI0LDEsMCwKLSAgICAxMDYsMCwwLDEwMCwxLDAsMTI0LDIsMCwxMDAsMiwwLDI0LDEzMSwyLDAsCi0gICAgMTI1LDMsMCwxMTYsMSwwLDEyNCwzLDAsMTMxLDEsMCwxMjQsMiwwLDEwNywKLSAgICAwLDAsMTE0LDU1LDAsMTE2LDIsMCwxMDAsMywwLDEzMSwxLDAsMTMwLDEsCi0gICAgMCwxMTAsMCwwLDEyNCwzLDAsMTAwLDQsMCwyNSwxMjUsNCwwLDEyNCwwLAotICAgIDAsMTE0LDg3LDAsMTAwLDUsMCwxMDYsMywwLDEyNCw0LDAsMTI0LDAsMCwKLSAgICAxMzEsMiwwLDgzLDEyNCw0LDAsODMsNDAsNiwwLDAsMCwxMTcsNTAsMCwKLSAgICAwLDAsODIsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsMzIsOTcsMzIsMTE0LDEwMSwxMDgsOTcsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLAotICAgIDMyLDExNiwxMTEsMzIsOTcsMTEwLDMyLDk3LDk4LDExNSwxMTEsMTA4LDExNywxMTYsMTAxLDMyLAotICAgIDExMSwxMTAsMTAxLDQ2LDExNywxLDAsMCwwLDQ2LDEwNSwxLDAsMCwwLDExNywKLSAgICA1MCwwLDAsMCw5NywxMTYsMTE2LDEwMSwxMDksMTEyLDExNiwxMDEsMTAwLDMyLDExNCwxMDEsCi0gICAgMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw5OCwxMDEsCi0gICAgMTIxLDExMSwxMTAsMTAwLDMyLDExNiwxMTEsMTEyLDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDEwNSwwLDAsMCwwLDExNyw1LDAsMCwwLAotICAgIDEyMywxMjUsNDYsMTIzLDEyNSw0MCw0LDAsMCwwLDExNyw2LDAsMCwwLDExNCwKLSAgICAxMTUsMTEyLDEwOCwxMDUsMTE2LDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNywxMCwwLAotICAgIDAsMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLAotICAgIDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0MCw1LDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwxMTcsNSwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNyw0LDAsMCwwLAotICAgIDk4LDEwNSwxMTYsMTE1LDExNyw0LDAsMCwwLDk4LDk3LDExNSwxMDEsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTMsMCwwLDAsOTUsMTE0LAotICAgIDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDk1LDExMCw5NywxMDksMTAxLDE4Miw1LDAsMCwxMTUsCi0gICAgMTAsMCwwLDAsMCwyLDIyLDEsMTgsMSwxNSwxLDEwLDEsMTE3LDEzLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwxMSwwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsMTM4LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwKLSAgICAxMTUsMjgsMCwxMTYsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwKLSAgICAyLDAsMSwxMTAsMCwwLDEyMCwxMDMsMCwxMTYsMCwwLDEwNiwxLDAsNjgsCi0gICAgOTMsODgsMCwxMjUsMiwwLDExNiw1LDAsMTMxLDAsMCwxNDMsMjMsMCwxLAotICAgIDEyNCwyLDAsMTA2LDYsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwxMjUsCi0gICAgMywwLDg3LDEwMCwyLDAsODEsODgsMTI0LDMsMCwxMDAsMiwwLDEwNyw5LAotICAgIDAsMTE0LDM4LDAsMTI0LDAsMCwxMTYsMCwwLDEwNiw4LDAsMTA3LDcsMCwKLSAgICAxMTQsMTA5LDAsMTI0LDMsMCw4MywxMTYsMCwwLDEwNiw4LDAsMTI0LDAsMCwKLSAgICAyNSwxMDYsOSwwLDgzLDExMywzOCwwLDExMywzOCwwLDg3LDEwMCwyLDAsODMsCi0gICAgMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywyMywwLDAsMCw3MCwxMDUsCi0gICAgMTEwLDEwMCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw0NiwxMTcsMjIsMCwwLDAsMTE1LDEyMSwxMTUsNDYsMTA5LDEwMSwKLSAgICAxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMDEsMTA5LDExMiwxMTYsMTIxLAotICAgIDc4LDQwLDEwLDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw5LAotICAgIDAsMCwwLDEwOSwxMDEsMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDExNyw5LDAsMCwKLSAgICAwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsNCwwLDAsMCwxMTksCi0gICAgOTcsMTE0LDExMCwxMTcsMTMsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywKLSAgICAxMTQsMTEwLDEwNSwxMTAsMTAzLDExNywxOCwwLDAsMCw5NSw3MywxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTE3LDExLDAsMCwKLSAgICAwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDIsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDEwMiwKLSAgICAxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTEsNSwwLDAsMTE1LDIwLAotICAgIDAsMCwwLDAsMiw5LDEsMTksMSwxNiwxLDEwLDEsMjQsMSwxMiwKLSAgICAyLDE1LDEsNCwyLDIxLDIsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsMTEwLAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwzLDAsMCwwLDAsMCwwLAotICAgIDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwxOTQsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDExNiwxLDAsMTMxLDIsMCwxMTUsNDUsCi0gICAgMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMTYsNCwwLDEyNCwwLDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwKLSAgICAyLDAsMTAwLDIsMCwxMDcsMCwwLDExNCw3MiwwLDExNiw1LDAsMTAwLDMsCi0gICAgMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMSwwLDExNCwxNTYsMCwKLSAgICAxMTYsMCwwLDEyNCwxLDAsMTE2LDEsMCwxMzEsMiwwLDExNSwxMDgsMCwxMTYsCi0gICAgMiwwLDEwMCw0LDAsMTMxLDEsMCwxMzAsMSwwLDExMywxNTYsMCwxMjQsMSwKLSAgICAwLDExNiw2LDAsMTA2LDcsMCwxMDcsNywwLDExNCwxNTYsMCwxMDAsNSwwLAotICAgIDEyNSwzLDAsMTE2LDgsMCwxMjQsMywwLDEwNiwzLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTEwLDAsMCwxMjQsMCwKLSAgICAwLDEyLDExNCwxOTAsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsMTkwLAotICAgIDAsMTE2LDUsMCwxMDAsNiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEwMCw3LDAsODMsNDAsOCwwLDAsMCwxMTcsMjgsMCwwLDAsODYsMTAxLAotICAgIDExNCwxMDUsMTAyLDEyMSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLDk3LAotICAgIDExNCwxMDEsMzIsMzQsMTE1LDk3LDExMCwxMDEsMzQsNDYsMTE3LDMxLDAsMCwwLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwKLSAgICA5OCwxMDEsMzIsMTE1LDExNiwxMTQsNDQsMzIsMTEwLDExMSwxMTYsMzIsMTIzLDEyNSwxMDUsMCwKLSAgICAwLDAsMCwxMTcsMTgsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDksMTE3LAotICAgIDExNSwxMTYsMzIsOTgsMTAxLDMyLDYyLDYxLDMyLDQ4LDExNywzMSwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTEwLDExMSwxMTYsMzIsMTE1LAotICAgIDEwMSwxMTYsMzIsMTE2LDExMSwzMiw5NywzMiwxMTUsMTE2LDExNCwxMDUsMTEwLDEwMywxMTcsNjEsCi0gICAgMCwwLDAsODAsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDEyMywzMywxMTQsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsCi0gICAgNDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDExMiwxMDEsMTE0LDEwMiwxMTEsMTE0LDEwOSwKLSAgICAzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTE3LDE3LDAsMCwwLDY5LDEwOSwxMTIsMTE2LDEyMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw3OCw0MCw5LDAsMCwwLDExNywxMCwwLDAsCi0gICAgMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksMTAxLDExNywzLDAsMCwwLAotICAgIDExNSwxMTYsMTE0LDExNyw5LDAsMCwwLDg0LDEyMSwxMTIsMTAxLDY5LDExNCwxMTQsMTExLAotICAgIDExNCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNyw0LDAsMCwKLSAgICAwLDExNiwxMjEsMTEyLDEwMSwxMTcsMTAsMCwwLDAsODYsOTcsMTA4LDExNywxMDEsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMTEsMCwwLDAsODMsMTIxLDExNSwKLSAgICAxMTYsMTAxLDEwOSw2OSwxMTQsMTE0LDExMSwxMTQsNDAsNCwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsMTE3LDUsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwxMTcsMywwLDAsCi0gICAgMCwxMDksMTE1LDEwMyw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMywwLDAsMCw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LDk5LDEwNCwxMDEsCi0gICAgOTksMTA3LDIwOCw1LDAsMCwxMTUsMjQsMCwwLDAsMCwyLDE1LDEsMzAsCi0gICAgMSwxMiwxLDE1LDEsNiwxLDE1LDEsMTUsMSwxNSwxLDYsMiwyNywKLSAgICAxLDE5LDEsMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsCi0gICAgOTksMTA0LDEwMSw5OSwxMDcsMTE3LDIwLDAsMCwwLDc4LDExMSwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTIzLDMzLDExNCwxMjUsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDksMCwwLDAsMjcsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDEyLDIsMCwwLDEwMCwwLDAsMTI1LDIsMCwxMjQsMCwKLSAgICAwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI1LDMsCi0gICAgMCwxMjQsMywwLDExNCwxNzgsMCwxMjQsMywwLDExNiwyLDAsMTA2LDMsMCwKLSAgICAxMDcsNywwLDExNCw2MiwwLDExNiw0LDAsMTI0LDEsMCwxMjQsMywwLDEzMSwKLSAgICAyLDAsMSwxMTAsMCwwLDEyNCwwLDAsMTE2LDIsMCwxMDYsMywwLDEwNywKLSAgICA2LDAsMTE0LDg4LDAsMTE2LDIsMCwxMDYsMywwLDEyNCwwLDAsMjUsODMsCi0gICAgMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMjUsMTI1LDQsMCwxMjEsMTMsMCwKLSAgICAxMjQsNCwwLDEwNiw1LDAsMTI1LDIsMCw4NywxMTMsMTc4LDAsNCwxMTYsNiwKLSAgICAwLDEwNywxMCwwLDExNCwxNzQsMCwxLDEsMSwxMTYsNywwLDEwMCwzLDAsCi0gICAgMjMsMTA2LDgsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNSwwLAotICAgIDExNiw5LDAsMTI0LDUsMCwxMDAsNCwwLDEyNCwwLDAsMTMxLDEsMSwxMzAsCi0gICAgMSwwLDg5LDExMywxNzgsMCw4OCwxMTAsMCwwLDExNiwxMCwwLDEyNCwwLDAsCi0gICAgMTI0LDIsMCwxMzEsMiwwLDEyNSw2LDAsMTI0LDYsMCwxMDAsMCwwLDEwNywKLSAgICA4LDAsMTE0LDI1MCwwLDExNiw5LDAsMTE2LDcsMCwxMDYsOCwwLDEyNCwwLAotICAgIDAsMTMxLDEsMCwxMDAsNCwwLDEyNCwwLDAsMTMxLDEsMSwxMjUsNywwLAotICAgIDEwMCwxMCwwLDEyNCw3LDAsOTUsMTIsMCwxMjQsNywwLDEzMCwxLDAsMTEwLAotICAgIDQ3LDAsMTI0LDAsMCwxMTYsMiwwLDEwNiwzLDAsMTA3LDcsMCwxMTQsNDEsCi0gICAgMSwxMjQsNiwwLDEwNiwxMywwLDEyNCwwLDAsMTMxLDEsMCwxLDExNiwxNCwKKyAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDIwMyw1LDAsMCwxMTUsNiwwLDAsMCwwLAorICAgIDIsMTIsMSwyMSwxLDEyMiw1NCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw0Niw2MCwxMDgsMTExLDk5LAorICAgIDk3LDEwOCwxMTUsNjIsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk1LDEwMiwKKyAgICAxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwKKyAgICAwLDAsNDEsMywxMTQsMjE2LDAsMCwwLDExNCw0NiwxLDAsMCwxMTQsNTMsCisgICAgMSwwLDAsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjE2LDAsMCwwLDExNCwKKyAgICA0NiwxLDAsMCwxMTQsNSwwLDAsMCwyMTgsOSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDQsMTExLDExMSwxMDcsMTkzLDUsMCwwLDExNSw0LDAsMCwwLDAsMTAsMjEsCisgICAgNiwxMjIsMjAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLAorICAgIDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLAorICAgIDgzLDQxLDIsNzgsMTIyLDE2LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDAsMTIzLDMzLDExNCwxMjUsNDEsNDEsMiwxMTQsNDcsMCwwLDAsMTE0LDM1LDAsCisgICAgMCwwLDQxLDEsMTE0LDc2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCw4OCwwLDAsMCwyMTEsNSwwLAorICAgIDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsCisgICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSwxMywKKyAgICAxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsCisgICAgNTksMCwwLDAsMTE0LDc3LDAsMCwwLDExNCwyOSwxLDAsMCwxMTQsMTkxLAorICAgIDAsMCwwLDExNCwyMTgsMCwwLDAsMTE0LDE4NSwwLDAsMCwxMTQsNDcsMSwKKyAgICAwLDAsMTE0LDIyMiwwLDAsMCwxMTQsNTQsMSwwLDAsMTE0LDg4LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw0MCwxLDAsMCw5MCw1LDAsMCwxMTUsMTYsCisgICAgMCwwLDAsMTIsNyw2LDIsMTIsMTQsMTIsNCw2LDIsMTIsNDMsMTIsCisgICAgMzEsMTgsMTgsMTE0LDQwLDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDQ2LDAsCisgICAgMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLAorICAgIDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwKKyAgICAxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCw4MywKKyAgICA0MSw3LDIxOCwxOCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsCisgICAgMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTIyLDM2LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDMyLAorICAgIDEwOSw5NywxMTAsOTcsMTAzLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMSwKKyAgICAxMDAsMSwwLDgzLDQxLDIsMTIyLDI0LDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsCisgICAgNzgsNDEsMiwxMTQsOTUsMCwwLDAsMjE4LDEyLDk3LDk5LDExMywxMTcsMTA1LDExNCwKKyAgICAxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDEsMSwxMTQsNzYsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE0MywwLDAsCisgICAgMCwyMjEsNSwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwyOCw5NSw3MywKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsCisgICAgNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSw0LDAsMCwwLDAsCisgICAgMCwwLDAsNCwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAxNCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDEwMCwxLAorICAgIDAsODMsNDEsMiwxMjIsNjAsODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTQsMTAxLAorICAgIDEwMyw5NywxMTQsMTAwLDEwOCwxMDEsMTE1LDExNSwzMiwxMTEsMTAyLDMyLDk3LDExMCwxMjEsMzIsCisgICAgMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwxMDEsMTIwLDk5LDEwMSwxMTIsMTE2LDEwNSwxMTEsMTEwLAorICAgIDExNSw0Niw3OCw0MSwyLDExNCw5NSwwLDAsMCwxMTQsOTYsMCwwLDAsNDEsCisgICAgNCwxMTQsNzYsMCwwLDAsOTAsOCwxMDEsMTIwLDk5LDk1LDExNiwxMjEsMTEyLDEwMSwKKyAgICA5MCw5LDEwMSwxMjAsOTksOTUsMTE4LDk3LDEwOCwxMTcsMTAxLDkwLDEzLDEwMSwxMjAsOTksCisgICAgOTUsMTE2LDExNCw5Nyw5OSwxMDEsOTgsOTcsOTksMTA3LDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNDYsMCwwLDAsMjI1LDUsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMjcsOTUsNzMsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDQ2LDk1LDk1LAorICAgIDEwMSwxMjAsMTA1LDExNiw5NSw5NSw3OCw0MSw2LDExNCw1NywwLDAsMCwxMTQsNTYsCisgICAgMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsMTQzLDAsCisgICAgMCwwLDExNCwxNDYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDU1LDEsMCwwLAorICAgIDIxNyw1LDAsMCwxMTUsNiwwLDAsMCwxMiwyLDYsMiwxMiw0LDExNCwKKyAgICA1NSwxLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNSwwLDAsCisgICAgMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw5MSwwLDAsMCwxMjQsMSwKKyAgICAwLDEwNiwwLDAsMTAwLDEsMCwxMjQsMiwwLDEwMCwyLDAsMjQsMTMxLDIsCisgICAgMCwxMjUsMywwLDExNiwxLDAsMTI0LDMsMCwxMzEsMSwwLDEyNCwyLDAsCisgICAgMTA3LDAsMCwxMTQsNTUsMCwxMTYsMiwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsCisgICAgMSwwLDExMCwwLDAsMTI0LDMsMCwxMDAsNCwwLDI1LDEyNSw0LDAsMTI0LAorICAgIDAsMCwxMTQsODcsMCwxMDAsNSwwLDEwNiwzLDAsMTI0LDQsMCwxMjQsMCwKKyAgICAwLDEzMSwyLDAsODMsMTI0LDQsMCw4Myw0MSw2LDEyMiw1MCw4MiwxMDEsMTE1LAorICAgIDExMSwxMDgsMTE4LDEwMSwzMiw5NywzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTE2LDExMSwzMiw5NywKKyAgICAxMTAsMzIsOTcsOTgsMTE1LDExMSwxMDgsMTE3LDExNiwxMDEsMzIsMTExLDExMCwxMDEsNDYsMTE0LAorICAgIDEwMiwwLDAsMCwxMTQsMjksMCwwLDAsMTIyLDUwLDk3LDExNiwxMTYsMTAxLDEwOSwKKyAgICAxMTIsMTE2LDEwMSwxMDAsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDMyLDk4LDEwMSwxMjEsMTExLDExMCwxMDAsMzIsMTE2LDExMSwxMTIsNDUsCisgICAgMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE0LDY4LDAsCisgICAgMCwwLDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSw0MSw0LDExNCwzNCwwLDAsMCwKKyAgICAxMTQsMzEsMCwwLDAsMTE0LDExOSwwLDAsMCwxMTQsNDcsMCwwLDAsNDEsCisgICAgNSwxMTQsNzIsMCwwLDAsMjE4LDcsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDIxOCwKKyAgICA1LDEwOCwxMDEsMTE4LDEwMSwxMDgsOTAsNCw5OCwxMDUsMTE2LDExNSw5MCw0LDk4LDk3LAorICAgIDExNSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDEzLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwKKyAgICAyMzAsNSwwLDAsMTE1LDEwLDAsMCwwLDAsMiwyMiwxLDE4LDEsMTUsCisgICAgMSwxMCwxLDExNCw1OSwxLDAsMCw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsNSwwLDAsMCwxOSwwLDAsMCw2NywwLDAsMCwxMTUsMTg4LDAsCisgICAgMCwwLDExNiwwLDAsMTA2LDEsMCwxMTUsMjgsMCwxMTYsMiwwLDEwNiwzLAorICAgIDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwyLDAsMSwxMTAsMCwwLDEyNCwwLAorICAgIDAsMTE2LDAsMCwxMDYsNSwwLDEwNyw2LDAsMTI1LDIsMCwxMjAsMTM4LDAsCisgICAgMTE2LDAsMCwxMDYsMSwwLDY4LDkzLDEyMywwLDEyNSwzLDAsMTE2LDYsMCwKKyAgICAxMzEsMCwwLDE0MywyMywwLDEsMTI0LDMsMCwxMDYsNywwLDEyNCwwLDAsCisgICAgMTI0LDEsMCwxMzEsMiwwLDEyNSw0LDAsODcsMTAwLDIsMCw4MSw4OCwxMjQsCisgICAgNCwwLDEwMCwyLDAsMTA3LDksMCwxMTQsNTMsMCwxMjQsMiwwLDExNSwxMjYsCisgICAgMCwxMjQsMCwwLDExNiwwLDAsMTA2LDUsMCwxMDcsNywwLDExNCwxMzAsMCwKKyAgICAxMjQsNCwwLDgzLDEyMSwxOCwwLDExNiwwLDAsMTA2LDUsMCwxMjQsMCwwLAorICAgIDI1LDEwNiw4LDAsODMsODcsMTEzLDE3NiwwLDQsMTE2LDksMCwxMDcsMTAsMCwKKyAgICAxMTQsMTcyLDAsMSwxLDEsMTI0LDQsMCw4Myw4OSwxMTMsMTc2LDAsODgsMTEzLAorICAgIDUzLDAsMTEzLDUzLDAsODcsMTAwLDIsMCw4MywxMDAsMiwwLDgzLDQxLDMsCisgICAgMTIyLDIzLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LAorICAgIDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEyMiwyMiwxMTUsMTIxLDExNSw0NiwxMDksCisgICAgMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwKKyAgICAxMjEsNzgsNDEsMTAsMTE0LDcsMCwwLDAsMjE4LDksMTA5LDEwMSwxMTYsOTcsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsMTE0LDE4NiwwLDAsMCwxMTQsMTg3LDAsMCwwLDExNCwxODgsCisgICAgMCwwLDAsMTE0LDE0MSwwLDAsMCwxMTQsNTUsMSwwLDAsMTE0LDIxOCwwLAorICAgIDAsMCwxMTQsMTcyLDAsMCwwLDExNCwxNTUsMCwwLDAsNDEsNSwxMTQsNzIsCisgICAgMCwwLDAsMTE0LDM1LDAsMCwwLDkwLDksMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwKKyAgICAxMTEsOTcsMTAwLDExNCwzMiwxLDAsMCwxMTQsMTYxLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMiw5NSwxMDIsCisgICAgMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjM5LDUsMCwwLDExNSwyOCwKKyAgICAwLDAsMCwwLDIsOSwxLDE5LDEsMTUsMSwxNiwxLDEwLDEsMjQsCisgICAgMSwxMiwyLDIxLDEsNCwyLDMsMSwxOCwxLDEzLDEsMTYsMiwxMTQsCisgICAgNjEsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDQsMCwwLAorICAgIDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTk0LDAsMCwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMTYsMSwwLDEzMSwyLDAsMTE1LDQ1LDAsMTE2LDIsMCwKKyAgICAxMDAsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLAorICAgIDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLDEwMCwyLAorICAgIDAsMTA3LDAsMCwxMTQsNzIsMCwxMTYsNSwwLDEwMCwzLDAsMTMxLDEsMCwKKyAgICAxMzAsMSwwLDExMCwwLDAsMTI0LDEsMCwxMTQsMTU2LDAsMTE2LDAsMCwxMjQsCisgICAgMSwwLDExNiwxLDAsMTMxLDIsMCwxMTUsMTA4LDAsMTE2LDIsMCwxMDAsNCwKKyAgICAwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTI0LDEsMCwxMTYsNiwwLAorICAgIDEwNiw3LDAsMTA3LDcsMCwxMTQsMTU2LDAsMTAwLDUsMCwxMjUsMywwLDExNiwKKyAgICA4LDAsMTI0LDMsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMzEsMSwKKyAgICAwLDEzMCwxLDAsMTEzLDE1NiwwLDExMCwwLDAsMTI0LDAsMCwxMiwxMTQsMTkwLAorICAgIDAsMTI0LDIsMCwxMDAsMiwwLDEwNywyLDAsMTE0LDE5MCwwLDExNiw1LDAsCisgICAgMTAwLDYsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMDAsNywwLDgzLAorICAgIDQxLDgsMTIyLDI4LDg2LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsOTcsMTE0LDEwMywxMTcsMTA5LAorICAgIDEwMSwxMTAsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDM0LDExNSw5NywxMTAsMTAxLDM0LDQ2LAorICAgIDEyMiwzMSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMDksMTE3LAorICAgIDExNSwxMTYsMzIsOTgsMTAxLDMyLDExNSwxMTYsMTE0LDQ0LDMyLDExMCwxMTEsMTE2LDMyLDEyMywKKyAgICAxMjUsMTE0LDY4LDAsMCwwLDEyMiwxOCwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTcsCisgICAgMTE1LDExNiwzMiw5OCwxMDEsMzIsNjIsNjEsMzIsNDgsMTIyLDMxLDk1LDk1LDExMiw5NywKKyAgICA5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTAsMTExLDExNiwzMiwxMTUsMTAxLDExNiwzMiwKKyAgICAxMTYsMTExLDMyLDk3LDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDEyMiw2MSw4MCw5NywxMTQsCisgICAgMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsCisgICAgMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCw0NCwzMiw5OSw5NywxMTAsMTEwLAorICAgIDExMSwxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LDMyLDExNCwxMDEsMTA4LDk3LDExNiwKKyAgICAxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMjIsMTcsNjksMTA5LDExMiwxMTYsCisgICAgMTIxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDc4LDQxLDksCisgICAgMTE0LDIwMywwLDAsMCwxMTQsMzYsMSwwLDAsMjE4LDksODQsMTIxLDExMiwxMDEsCisgICAgNjksMTE0LDExNCwxMTEsMTE0LDExNCw0NywwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwKKyAgICAxMTksMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDE0MSwwLDAsMCwyMTgsMTEsCisgICAgODMsMTIxLDExNSwxMTYsMTAxLDEwOSw2OSwxMTQsMTE0LDExMSwxMTQsNDEsNCwxMTQsNzIsMCwKKyAgICAwLDAsMTE0LDU3LDEsMCwwLDExNCw1OCwxLDAsMCwxMTQsMTkwLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCwxMyw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LDk5LDEwNCwxMDEsOTksMTA3LDQsCisgICAgNiwwLDAsMTE1LDI0LDAsMCwwLDAsMiwxNSwxLDMwLDEsMTIsMSwKKyAgICAxNSwxLDYsMSwxNSwxLDE1LDEsMTUsMSw2LDIsMjcsMSwxOSwxLAorICAgIDExNCw2NCwxLDAsMCwxMjIsMTYsNzgsMTExLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMjIsNCwxMjMsMzMsMTE0LDEyNSw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsOCwwLDAsMCwyNywwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsNiwyLDAsMCwxMDAsMCwwLDEyNSwyLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwxMDAsMiwwLDI1LDEyNSwzLDAsCisgICAgMTI0LDMsMCwxMTQsMTc4LDAsMTI0LDMsMCwxMTYsMSwwLDEwNiwyLDAsMTA3LAorICAgIDcsMCwxMTQsNjIsMCwxMTYsMywwLDEyNCwxLDAsMTI0LDMsMCwxMzEsMiwKKyAgICAwLDEsMTEwLDAsMCwxMjQsMCwwLDExNiwxLDAsMTA2LDIsMCwxMDcsNiwKKyAgICAwLDExNCw4OCwwLDExNiwxLDAsMTA2LDIsMCwxMjQsMCwwLDI1LDgzLDExNiwKKyAgICAxLDAsMTA2LDIsMCwxMjQsMywwLDI1LDEyNSw0LDAsMTIxLDEzLDAsMTI0LAorICAgIDQsMCwxMDYsNCwwLDEyNSwyLDAsODcsMTEzLDE3OCwwLDQsMTE2LDUsMCwKKyAgICAxMDcsMTAsMCwxMTQsMTc0LDAsMSwxLDEsMTE2LDYsMCwxMDAsMywwLDIzLAorICAgIDEwNiw3LDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDUsMCwxMTYsCisgICAgOCwwLDEyNCw1LDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLDEsMTMwLDEsCisgICAgMCw4OSwxMTMsMTc4LDAsODgsMTEwLDAsMCwxMTYsOSwwLDEyNCwwLDAsMTI0LAorICAgIDIsMCwxMzEsMiwwLDEyNSw2LDAsMTI0LDYsMCwxMDAsMCwwLDEwNyw4LAorICAgIDAsMTE0LDIzNSwwLDExNiw4LDAsMTE2LDYsMCwxMDYsNywwLDEyNCwwLDAsCisgICAgMTMxLDEsMCwxMDAsNCwwLDEyNCwwLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwKKyAgICA0NywwLDEyNCwwLDAsMTE2LDEsMCwxMDYsMiwwLDEwNyw3LDAsMTE0LDI2LAorICAgIDEsMTI0LDYsMCwxMDYsMTAsMCwxMjQsMCwwLDEzMSwxLDAsMSwxMTYsMTEsCiAgICAgMCwxMDAsNSwwLDEyNCwwLDAsMTI0LDYsMCwxMzEsMywwLDEsMTEwLDAsCi0gICAgMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDAsMCwyNSwxMjUsOCwwLDEyNCwzLAotICAgIDAsMTE0LDEwNSwxLDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDI1LDEyNSw0LAotICAgIDAsMTE2LDE1LDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwxLDAsMTAwLDEsMCwKLSAgICAxMzEsMSwwLDEwMCw2LDAsMjUsMTI0LDgsMCwxMzEsMywwLDEsMTEwLDAsCi0gICAgMCwxMTYsMTYsMCwxMjQsOCwwLDEwMCw3LDAsMTAwLDAsMCwxMzEsMywwLAotICAgIDEwMCwwLDAsMTA3LDgsMCwxMTQsMjEyLDEsMTIxLDU5LDAsMTI0LDgsMCwxMDYsCi0gICAgMTcsMCwxMjQsOCwwLDk1LDE4LDAsMTE2LDE5LDAsMTI0LDgsMCwxMDAsOCwKLSAgICAwLDEzMSwyLDAsMTE1LDE4NywxLDEyNCw4LDAsMTA2LDE4LDAsMTA2LDEsMCwKLSAgICAxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjQsOCwwLDk1LDE4LDAsCi0gICAgMTEwLDAsMCw4NywxMTMsMjEyLDEsNCwxMTYsNiwwLDEwNywxMCwwLDExNCwyMDgsCi0gICAgMSwxLDEsMSw4OSwxMTMsMjEyLDEsODgsMTEwLDAsMCwxMTYsMTksMCwxMjQsCi0gICAgOCwwLDEwMCw5LDAsMTMxLDIsMCwxMTUsOCwyLDEyMSwxMywwLDEyNCw2LAotICAgIDAsMTI0LDgsMCw5NSwyMCwwLDg3LDExMyw4LDIsNCwxMTYsNiwwLDEwNywKLSAgICAxMCwwLDExNCw0LDIsMSwxLDEsODksMTEzLDgsMiw4OCwxMTAsMCwwLAotICAgIDEyNCw4LDAsODMsNDAsMTEsMCwwLDAsNzgsMTE3LDEsMCwwLDAsNDYsCi0gICAgMTA1LDAsMCwwLDAsMTE3LDIxLDAsMCwwLDU5LDMyLDEyMywxMjUsMzIsMTA1LAotICAgIDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDE4LDAsMCwwLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDMyLDEyMywzMywxMTQsMTI1LDMyLDM1LDMyLDEyMywzMywxMTQsMTI1LDEwNSwKLSAgICAyLDAsMCwwLDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgODQsNDAsMjEsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LAotICAgIDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywzLAotICAgIDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNSwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwKLSAgICAxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE3LDE0LDAsCi0gICAgMCwwLDY1LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDgsMCwwLDAsOTUsNjksODIsODIsOTUsNzcsODMsNzEsMTE3LDYsMCwKLSAgICAwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCw4NCwxMTQsCi0gICAgMTE3LDEwMSwxMTcsMTAsMCwwLDAsOTUsMTEwLDExMSwxMTYsOTUsMTAyLDExMSwxMTcsMTEwLAotICAgIDEwMCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwKLSAgICAxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw3LDAsMCwwLDExNSwxMDEsMTE2LDk3LDExNiwKLSAgICAxMTYsMTE0LDExNyw3LDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMSwwLDAsMCwKLSAgICA5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDcsMCwwLDAsCi0gICAgMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSw5NSw0MCw5LDAsMCwwLDExNyw0LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDExMiw5NywKLSAgICAxMTQsMTAxLDExMCwxMTYsMTE3LDEzLDAsMCwwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDMsMCwwLDAsMTA5LDExNSwxMDMsMTE3LDYsCi0gICAgMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMywwLDAsMCwxMDEsMTIwLAotICAgIDk5LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIzLDAsMCwwLDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSwKLSAgICA5OSwxMDcsMTAxLDEwMCwyMjcsNSwwLDAsMTE1LDc2LDAsMCwwLDAsMSw2LAotICAgIDEsMTksMSw2LDEsMTUsMSwxNiwyLDE1LDEsMTEsMiwxMywxLDMsCi0gICAgMSwxMywxLDEzLDEsMjIsMSwyNiwxLDE1LDEsMTIsMSwyNywzLDksCi0gICAgMSw5LDEsMTUsMiwxMywxLDE5LDIsMTMsMSw2LDIsMTMsMSwzMiwKLSAgICAyLDI0LDEsMywxLDEyLDEsMTUsMSwzMiwxLDEzLDEsOCwyLDE1LAotICAgIDEsMywxLDEzLDEsMTMsMSw4LDEsMTE3LDIzLDAsMCwwLDk1LDEwMiwKLSAgICAxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LAotICAgIDExMSw5OSwxMDcsMTAxLDEwMCw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLAorICAgIDAsMTE2LDEsMCwxMDYsMiwwLDEyNCwwLDAsMjUsMTI1LDcsMCwxMjQsMywKKyAgICAwLDExNCw5MCwxLDExNiwxLDAsMTA2LDIsMCwxMjQsMywwLDI1LDEyNSw0LAorICAgIDAsMTE2LDEyLDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwKKyAgICAxMzEsMSwwLDEwMCw2LDAsMjUsMTI0LDcsMCwxMzEsMywwLDEsMTEwLDAsCisgICAgMCwxMTYsMTMsMCwxMjQsNywwLDEwMCw3LDAsMTAwLDAsMCwxMzEsMywwLAorICAgIDEwMCwwLDAsMTA3LDgsMCwxMTQsMTk3LDEsMTIxLDU5LDAsMTI0LDcsMCwxMDYsCisgICAgMTQsMCwxMjQsNywwLDk1LDE1LDAsMTE2LDE2LDAsMTI0LDcsMCwxMDAsOCwKKyAgICAwLDEzMSwyLDAsMTE1LDE3MiwxLDEyNCw3LDAsMTA2LDE1LDAsMTA2LDAsMCwKKyAgICAxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjQsNywwLDk1LDE1LDAsCisgICAgMTEwLDAsMCw4NywxMTMsMTk3LDEsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwxOTMsCisgICAgMSwxLDEsMSw4OSwxMTMsMTk3LDEsODgsMTEwLDAsMCwxMTYsMTMsMCwxMjQsCisgICAgNywwLDEwMCw5LDAsMTAwLDAsMCwxMzEsMywwLDEwMCwwLDAsMTA3LDgsCisgICAgMCwxMTQsMiwyLDEyMSwxMywwLDEyNCw2LDAsMTI0LDcsMCw5NSwxNywwLAorICAgIDg3LDExMywyLDIsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwyNTQsMSwxLDEsCisgICAgMSw4OSwxMTMsMiwyLDg4LDExMCwwLDAsMTI0LDcsMCw4Myw0MSwxMCw3OCwKKyAgICAxMTQsMTAyLDAsMCwwLDExNCw2OCwwLDAsMCwxMjIsMjEsNTksMzIsMTIzLDEyNSwKKyAgICAzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLAorICAgIDEwMSwxMTQsNzIsMCwwLDAsMTIyLDE4LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEyMywKKyAgICAzMywxMTQsMTI1LDMyLDM1LDMyLDEyMywzMywxMTQsMTI1LDExNCwxMDEsMCwwLDAsMTE0LAorICAgIDE1OSwwLDAsMCwxMTQsMTYwLDAsMCwwLDExNCwxNzIsMCwwLDAsNDEsMTgsCisgICAgMTE0LDMyLDAsMCwwLDExNCw3LDAsMCwwLDExNCwxNDEsMCwwLDAsMTE0LAorICAgIDEwMCwwLDAsMCwxMTQsMTYwLDAsMCwwLDExNCwxNTUsMCwwLDAsMjE4LDgsCisgICAgOTUsNjksODIsODIsOTUsNzcsODMsNzEsMTE0LDQ3LDAsMCwwLDExNCwxNTgsMCwKKyAgICAwLDAsMTE0LDYxLDEsMCwwLDExNCwyMTksMCwwLDAsMTE0LDEzOCwwLDAsCisgICAgMCwxMTQsNjEsMCwwLDAsMTE0LDYyLDAsMCwwLDExNCw1NywwLDAsMCwKKyAgICAxMTQsMTU5LDAsMCwwLDExNCw2MCwwLDAsMCwxMTQsMTcyLDAsMCwwLDQxLAorICAgIDgsMTE0LDcyLDAsMCwwLDIxOCw3LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDExNCwKKyAgICAzNSwwLDAsMCwxMTQsNywxLDAsMCw5MCwxMywxMTIsOTcsMTE0LDEwMSwxMTAsCisgICAgMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCwxOTAsMCwwLDAsMTE0LDE2MSwwLAorICAgIDAsMCwxMTQsMTYyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCwyMyw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLAorICAgIDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsMjQsCisgICAgNiwwLDAsMTE1LDcyLDAsMCwwLDAsMSw2LDEsMTksMSw2LDEsCisgICAgMTUsMSwxNiwyLDE1LDEsMTEsMiwxMywxLDMsMSwxMywxLDEzLDEsCisgICAgMjIsMSwyNiwxLDE1LDEsMTIsMSwzMCwxLDE1LDIsMTMsMSwxOSwyLAorICAgIDEzLDEsNiwyLDEzLDEsMzIsMiwyNCwxLDMsMSwxMiwxLDE1LDEsCisgICAgMzIsMSwxMywxLDgsMiwyNCwxLDMsMSwxMywxLDEzLDEsOCwxLAorICAgIDExNCw2NywxLDAsMCw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLAogICAgIDAsMCwxOCwwLDAsMCw2NywwLDAsMCwxMTUsNzUsMCwwLDAsMTIyLAogICAgIDE2LDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMDAsCiAgICAgMSwwLDExNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDEsODgsMTI0LDIsMCwKICAgICAxMDYsMywwLDEzMSwwLDAsMSwxMjIsMTcsMCwxMTYsNCwwLDEyNCwwLDAsCiAgICAgMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDEwMCwxLDAsMTI0LDIsMCwxMDYsNSwKLSAgICAwLDEzMSwwLDAsMSw4OCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDU0LDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDExMCwxMDAsMzIsMTA4LDExMSw5NywKLSAgICAxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLAotICAgIDEwMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0Niw3OCw0MCw2LDAsMCwwLAotICAgIDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDgsMTExLDk5LDEwNywxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsCi0gICAgMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LAotICAgIDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsMjMsMCwwLDAsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LAotICAgIDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSwKLSAgICA5NywxMTUsMTAxLDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTE3LDQsMCwKLSAgICAwLDAsMTA4LDExMSw5OSwxMDcsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTQsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMjEsNiwwLDAsMTE1LDE0LDAsMCwwLDAsMiwKLSAgICAzLDEsMTYsMiwxMSwxLDEwLDEsMywxLDE3LDIsMTE3LDE0LDAsMCwKLSAgICAwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk5LAotICAgIDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDQsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LAotICAgIDEsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMjQsMiwwLDEwMCwxLDAsMTA3LAotICAgIDQsMCwxMTQsNDksMCwxMTYsMSwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwKLSAgICAwLDEzMSwzLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLDAsMTA2LDMsMCwKLSAgICAxMzEsMCwwLDEsMTI0LDAsMCwxMTYsNCwwLDEwNiw1LDAsMTA3LDcsMCwKLSAgICAxMTQsODcsMCwxMTYsNiwwLDEyNCwwLDAsMTE2LDcsMCwxMzEsMiwwLDgzLAotICAgIDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDI1LDEyNSwzLDAsMTI0LDMsMCwKLSAgICAxMDAsNCwwLDEwNyw4LDAsMTE0LDE1OCwwLDExNiwyLDAsMTA2LDksMCwxMzEsCi0gICAgMCwwLDEsMTAwLDIsMCwxMDYsMTAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LAotICAgIDQsMCwxMTYsMTEsMCwxMjQsNCwwLDEwMCwzLDAsMTI0LDAsMCwxMzEsMSwKLSAgICAxLDEzMCwxLDAsMTEwLDAsMCwxMTYsMTIsMCwxMjQsMCwwLDEzMSwxLDAsCi0gICAgMSwxMjQsMywwLDgzLDQwLDUsMCwwLDAsMTE3LDUwLDEsMCwwLDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCw5NywxMTUsMTAxLAotICAgIDEwMCwzMiwxMTEsMTEwLDMyLDEwNSwxMTYsMTE1LDMyLDExMCw5NywxMDksMTAxLDQ0LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKLSAgICA5NywxMDgsMTA4LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLAotICAgIDMyLDEwOSw5NywxMDAsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSw0NCwzMiw5NywxMTAsMTAwLDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsOTcsMTAwLDEwNiwxMTcsMTE1LDExNiwKLSAgICAxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwKLSAgICAxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTE0LDEwMSw5NywxMTYsMTAxLDExNSwxMTYsCi0gICAgMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiwxMDAsMTAxLDExMCwxMTEsMTA5LDEwNSwxMTAsOTcsCi0gICAgMTE2LDExMSwxMTQsMzIsMTExLDEwMiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsOTcsCi0gICAgMTA4LDEwNSwxMTYsMTIxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMTYsMTE5LDEwMSwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LAotICAgIDExMCwxMDAsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsNDYsMzIsODQsCi0gICAgMTA0LDEwNSwxMTUsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDEsMTE1LDMyLDExNSwxMDEsMTE2LAotICAgIDExNiwxMDUsMTEwLDEwMywzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsCi0gICAgMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDMyLDEwMCwxMDUsMTAwLDMyLDExMCwxMTEsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwNSwwLDAsMCwwLDExNyw0MCwwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMTEsMTAyLDMyLDEyMywxMjUsMzIsMTA0LDk3LDEwOCwxMTYsMTAxLDEwMCw1OSwzMiwKLSAgICA3OCwxMTEsMTEwLDEwMSwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw3OCw0MCwxMywwLAotICAgIDAsMCwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSw5OSwKLSAgICAxMDQsMTAxLDk5LDEwNywxMTcsMTMsMCwwLDAsOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsCi0gICAgMTAxLDk1LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxMiwwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk1LDEwOCwxMTEsOTksMTA3LAotICAgIDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNSwxMTcsMTQsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LAotICAgIDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTE3LDExLDAsMCwwLDk1LDEwMyw5OSwxMDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsCi0gICAgMTE3LDEyLDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksCi0gICAgMTA3LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDExLDAsMCwKLSAgICAwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywxOSwwLDAsCi0gICAgMCw5NSwxMDgsMTExLDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNyw1LAotICAgIDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDcsMCwwLDAsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzNCw2LDAsMCwxMTUsCi0gICAgMjgsMCwwLDAsMCw5LDE2LDEsMTIsMSwyMSwxLDEwLDEsMTUsMSwKLSAgICAxMywxLDEzLDEsMTIsMSwxMCwxLDYsMSw5LDEsMjEsMSwxMCwxLAotICAgIDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSwyNTQsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLAotICAgIDEwMCwxLDAsMTMxLDIsMCwxMTQsMjUwLDAsMTAwLDIsMCwxMjQsMSwwLDEwNywKLSAgICA2LDAsMTE0LDg5LDAsMTE2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDEsCi0gICAgMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwwLDEsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEwMCwzLDAsMTMxLDIsMCwxMTQsODksMCwxMjQsMSwwLAotICAgIDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsMSwxMTMsODksMCwKLSAgICAxMTAsMCwwLDEyMCwxNTgsMCwxMjQsMSwwLDY4LDkzLDE0NywwLDEyNSwzLDAsCi0gICAgMTE2LDAsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLDIsMCwxMTUsOTYsMCwxMDAsCi0gICAgNCwwLDEwNiw1LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwzLDAsMTMxLDIsCi0gICAgMCwxMjUsNCwwLDEyMSwxNywwLDExNiw3LDAsMTI0LDIsMCwxMjQsNCwwLAotICAgIDEzMSwyLDAsMSw4NywxMTMsMjQzLDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwKLSAgICAyMzksMCwxLDEyNSw1LDAsMSwxMjIsNTAsMCwxMTYsOSwwLDEyNCw1LDAsCi0gICAgMTAwLDUsMCwxMDAsNywwLDEzMSwzLDAsMTE0LDIxOCwwLDEyNCw1LDAsMTA2LAotICAgIDExLDAsMTI0LDQsMCwxMDcsMiwwLDExNCwyMTgsMCwxMTksOTYsMCwxMTMsMjE4LAotICAgIDAsMTEwLDAsMCwxMzAsMCwwLDg3LDg5LDEwMCw2LDAsMTAwLDYsMCwxMjUsCi0gICAgNSwwLDEyNiw1LDAsODgsMTEzLDI0MywwLDg4LDExMyw5NiwwLDExMyw5NiwwLAotICAgIDg3LDExMCwwLDAsMTI0LDAsMCw4Myw0MCw4LDAsMCwwLDExNywyMzgsMCwKLSAgICAwLDAsNzAsMTA1LDEwMywxMTcsMTE0LDEwMSwzMiwxMTEsMTE3LDExNiwzMiwxMTksMTA0LDk3LAotICAgIDExNiwzMiw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwzMiwxMTUsMTA0LDExMSwKLSAgICAxMTcsMTA4LDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw4NCwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDMyLDExMiw5NywxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTYsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsCi0gICAgOTcsOTgsMTA4LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDk3LDEwNywxMDEsMTE1LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw0NiwzMiw3MywxMTYsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSw5OSwxMTEsMTE3LDExMiwxMDgsMTAxLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgOTcsMTE1LDExNSwxMTcsMTA5LDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsMzksMTE1LDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLAotICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMDUsCi0gICAgMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwxMTQsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTcsMSwwLAotICAgIDAsMCw0MiwxMTcsNywwLDAsMCw5NSw5NSw5NywxMDgsMTA4LDk1LDk1LDExNywKLSAgICA1LDAsMCwwLDEyMywxMjUsNDYsMTIzLDEyNSwxMTcsMTAsMCwwLDAsOTUsMTEwLAotICAgIDExMSwxMTYsOTUsMTAyLDExMSwxMTcsMTEwLDEwMCw3OCw3MCw0MCwxMiwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNyw0LDAsMCwwLAotICAgIDEwOCwxMDUsMTE1LDExNiwxMTcsNiwwLDAsMCwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMTcsCi0gICAgNiwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSw5NywxMDgsMTA4LDk1LDk1LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywKLSAgICAxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDI1LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNywxMSwwLDAsCi0gICAgMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsCi0gICAgMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsCi0gICAgMTE1LDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCw2LDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsOTUsMTE3LDEsMCwwLDAsMTIwLDExNyw5LDAsMCwwLDEwMiwKLSAgICAxMTQsMTExLDEwOSw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMywwLDAsMCwxMDEsMTIwLDk5LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LAotICAgIDExNiw1OCw2LDAsMCwxMTUsMzQsMCwwLDAsMCwxMCwxNSwxLDEyLDEsCi0gICAgMTIsMSwxMywxLDE1LDEsMjIsMSwxMywxLDE1LDEsMjEsMSwzLDEsCi0gICAgMTcsMSwxOCw2LDE4LDEsMTUsMSw5LDEsMzIsMSwxMTcsMTYsMCwwLAotICAgIDAsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCi0gICAgMTE2LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDc4LDAsMCwwLDEyNCwwLDAsMTA2LDAsCi0gICAgMCwxMDAsMSwwLDEzMSwxLDAsMTI1LDEsMCwxMjQsMSwwLDEwMCw2LDAsCi0gICAgMTA3LDgsMCwxMTQsNzQsMCwxMjQsMCwwLDEwMCwyLDAsMjUsMTI1LDEsMCwKLSAgICAxMDAsMywwLDEyNCwwLDAsMTA3LDcsMCwxMTQsNzQsMCwxMjQsMSwwLDEwNiwKLSAgICAyLDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw1LDAsMjUsMTI1LDEsMCwxMTMsCi0gICAgNzQsMCwxMTAsMCwwLDEyNCwxLDAsODMsNDAsNywwLDAsMCwxMTcsMTY3LAotICAgIDAsMCwwLDY3LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMzIsMTE5LDEwNCw5NywKKyAgICAwLDEzMSwwLDAsMSw4OCwxMDAsMSwwLDgzLDQxLDIsMTIyLDU0LDcwLDEwNSwKKyAgICAxMTAsMTAwLDMyLDk3LDExMCwxMDAsMzIsMTA4LDExMSw5NywxMDAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDEwOCwxMDEsCisgICAgOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsCisgICAgMTExLDk5LDEwNyw0Niw3OCw0MSw2LDExNCw5NCwwLDAsMCwxMTQsOTUsMCwwLAorICAgIDAsMTE0LDk2LDAsMCwwLDExNCw4NCwwLDAsMCwxMTQsNjcsMSwwLDAsCisgICAgMTE0LDg1LDAsMCwwLDQxLDMsMTE0LDcyLDAsMCwwLDExNCw2NiwxLDAsCisgICAgMCwxMTQsNzAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDE0LDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLAorICAgIDk1LDEwOCwxMTEsOTcsMTAwLDcwLDYsMCwwLDExNSwxNCwwLDAsMCwwLDIsCisgICAgMywxLDE2LDIsMTEsMSwxMCwxLDMsMSwxNywyLDExNCw2OCwxLDAsCisgICAgMCw5OSwzLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw0LDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwxNzIsMCwwLDAsMTE2LDAsMCwxMjQsMCwKKyAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMywwLDEsMTI0LDIsMCwxMDAsMSwKKyAgICAwLDEwNyw0LDAsMTE0LDQ5LDAsMTE2LDEsMCwxMjQsMCwwLDEyNCwxLDAsCisgICAgMTI0LDIsMCwxMzEsMywwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLDEwNiwKKyAgICAzLDAsMTMxLDAsMCwxLDEyNCwwLDAsMTE2LDQsMCwxMDYsNSwwLDEwNywKKyAgICA3LDAsMTE0LDg3LDAsMTE2LDYsMCwxMjQsMCwwLDExNiw3LDAsMTMxLDIsCisgICAgMCw4MywxMTYsNCwwLDEwNiw1LDAsMTI0LDAsMCwyNSwxMjUsMywwLDEyNCwKKyAgICAzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxNTgsMCwxMTYsMiwwLDEwNiw4LAorICAgIDAsMTMxLDAsMCwxLDEwMCwzLDAsMTA2LDksMCwxMjQsMCwwLDEzMSwxLAorICAgIDAsMTI1LDQsMCwxMTYsMTAsMCwxMjQsNCwwLDEwMCw0LDAsMTI0LDAsMCwKKyAgICAxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMTYsMTEsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMSwxMjQsMywwLDgzLDQxLDUsOTcsNTAsMSwwLDAsNzMsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiwzMiw5NywxMTAsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDk3LDExNSwxMDEsMTAwLAorICAgIDMyLDExMSwxMTAsMzIsMTA1LDExNiwxMTUsMzIsMTEwLDk3LDEwOSwxMDEsNDQsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LAorICAgIDEwOCwxMDgsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsCisgICAgMTA5LDk3LDEwMCwxMDEsMzIsMTAyLDExNCwxMTEsMTA5LDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiw5NywxMDAsMTA2LDExNywxMTUsMTE2LDEwOSwKKyAgICAxMDEsMTEwLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDIsCisgICAgMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLDExMCwKKyAgICAxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMTQsMTAxLDk3LDExNiwxMDEsMTE1LDExNiwzMiwKKyAgICA5OSwxMTEsMTA5LDEwOSwxMTEsMTEwLDMyLDEwMCwxMDEsMTEwLDExMSwxMDksMTA1LDExMCw5NywxMTYsCisgICAgMTExLDExNCwzMiwxMTEsMTAyLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCw5NywxMDgsCisgICAgMTA1LDExNiwxMjEsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDExNiwxMTksMTAxLDEwMSwxMTAsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTcsMTEwLAorICAgIDEwMCwzMiw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSw0NiwzMiw4NCwxMDQsCisgICAgMTA1LDExNSwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLDEwMSwxMTUsMzIsMTE1LDEwMSwxMTYsMTE2LAorICAgIDEwNSwxMTAsMTAzLDMyLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwKKyAgICAxMDUsMTAyLDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsMzIsMTAwLDEwNSwxMDAsMzIsMTEwLDExMSwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgMTE0LDY4LDAsMCwwLDc4LDEyMiw0MCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMTEsCisgICAgMTAyLDMyLDEyMywxMjUsMzIsMTA0LDk3LDEwOCwxMTYsMTAxLDEwMCw1OSwzMiw3OCwxMTEsMTEwLAorICAgIDEwMSwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwKKyAgICAxMTQsNzIsMCwwLDAsNDEsMTIsMTE0LDY0LDEsMCwwLDExNCw1OSwxLDAsCisgICAgMCwxMTQsOTUsMCwwLDAsMTE0LDU2LDEsMCwwLDExNCw3LDAsMCwwLAorICAgIDExNCwxNDEsMCwwLDAsMTE0LDY4LDEsMCwwLDIxOCwxMSw5NSwxMDMsOTksMTAwLAorICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNCw5NiwwLDAsMCwxMTQsNDcsMCwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsOTcsMCwwLDAsNDEsNSwxMTQsNzIsMCwKKyAgICAwLDAsMTE0LDU3LDEsMCwwLDExNCw1OCwxLDAsMCwxMTQsMTYyLDAsMCwKKyAgICAwLDExNCwxMzcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDY5LDEsMCwwLDgzLDYsMCwwLDExNSwyNiwKKyAgICAwLDAsMCwwLDksMTYsMSwxMiwxLDIxLDEsMTAsMSwxNSwxLDEzLAorICAgIDEsMTMsMSwxMiwxLDEwLDIsMTUsMSwyMSwxLDEwLDEsMTE0LDY5LDEsCisgICAgMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxLDEsMCwwLDExNiwwLDAsMTI0LAorICAgIDAsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDI1MywwLDEwMCwyLDAsMTI0LDEsCisgICAgMCwxMDcsNiwwLDExNCw4OSwwLDExNiwxLDAsMTI0LDEsMCwxMzEsMSwwLAorICAgIDEyNSwxLDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsMCwxLAorICAgIDExNiwwLDAsMTI0LDAsMCwxMDAsMywwLDEzMSwyLDAsMTE0LDg5LDAsMTI0LAorICAgIDEsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwwLDEsMTEzLAorICAgIDg5LDAsMTEwLDAsMCwxMjAsMTYxLDAsMTI0LDEsMCw2OCw5MywxNTAsMCwxMjUsCisgICAgMywwLDExNiwwLDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsMTE1LDk2LAorICAgIDAsMTAwLDQsMCwxMDYsNSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywwLAorICAgIDEzMSwyLDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNywwLDEyNCwyLDAsMTI0LAorICAgIDQsMCwxMzEsMiwwLDEsODcsMTEzLDI0NiwwLDQsMTE2LDgsMCwxMDcsMTAsCisgICAgMCwxMTQsMjQyLDAsMSwxMjUsNSwwLDEsMTIyLDUzLDAsMTE2LDksMCwxMjQsCisgICAgNSwwLDEzMSwxLDAsMTA2LDEwLDAsMTE2LDExLDAsMTMxLDEsMCwxMTQsMjIxLAorICAgIDAsMTI0LDUsMCwxMDYsMTIsMCwxMjQsNCwwLDEwNywyLDAsMTE0LDIyMSwwLAorICAgIDExOSw5NiwwLDExMywyMjEsMCwxMTAsMCwwLDEzMCwwLDAsODcsODksMTAwLDUsCisgICAgMCwxMDAsNSwwLDEyNSw1LDAsMTI2LDUsMCw4OCwxMTMsMjQ2LDAsODgsMTEzLAorICAgIDk2LDAsMTEzLDk2LDAsODcsMTEwLDAsMCwxMjQsMCwwLDgzLDQxLDYsMTIyLAorICAgIDIzOCw3MCwxMDUsMTAzLDExNywxMTQsMTAxLDMyLDExMSwxMTcsMTE2LDMyLDExOSwxMDQsOTcsMTE2LAorICAgIDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDMyLDExNSwxMDQsMTExLDExNywKKyAgICAxMDgsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDg0LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMzIsMTEyLDk3LDExNCw5NywKKyAgICAxMDksMTAxLDExNiwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCw5NywKKyAgICA5OCwxMDgsMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsOTcsMTA3LDEwMSwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDQ2LDMyLDczLDExNiwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsCisgICAgMzIsMTE2LDExMSwzMiwxMDAsMTAxLDk5LDExMSwxMTcsMTEyLDEwOCwxMDEsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiw5NywKKyAgICAxMTUsMTE1LDExNywxMDksMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKKyAgICA5OCwzOSwxMTUsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA1LAorICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwxMTUsCisgICAgMzIsMTAwLDEwMSwxMTUsMTA1LDExNCwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCwKKyAgICAxNjAsMCwwLDAsMjUwLDEsNDIsMjE4LDcsOTUsOTUsOTcsMTA4LDEwOCw5NSw5NSwKKyAgICAxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsNzgsNDEsMTMsMTE0LDYwLDAsMCwwLDIxOCwKKyAgICA0LDEwOCwxMDUsMTE1LDExNiwyMTgsNiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMTQsMjA4LDAsCisgICAgMCwwLDExNCw3MSwxLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDU3LDAsMCwKKyAgICAwLDExNCwxMDAsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzYsMSwwLDAsCisgICAgMTE0LDksMCwwLDAsMjE4LDE1LDk1LDY5LDgyLDgyLDk1LDc3LDgzLDcxLDk1LAorICAgIDgwLDgyLDY5LDcwLDczLDg4LDExNCw3MiwwLDAsMCw0MSw2LDExNCwxNjIsMCwKKyAgICAwLDAsMjE4LDgsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwxMTQsNjYsMSwwLAorICAgIDAsMTE0LDE2LDAsMCwwLDkwLDksMTAyLDExNCwxMTEsMTA5LDk1LDExMCw5NywxMDksCisgICAgMTAxLDExNCwyNDksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDE2LDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLAorICAgIDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwxMDcsNiwwLDAsMTE1LDM0LDAsMCwwLAorICAgIDAsMTAsMTUsMSwxMiwxLDEyLDEsMTMsMSwxNSwxLDIyLDEsMTMsMSwKKyAgICAxNSwxLDIxLDEsMywxLDE3LDEsMTgsNCwyMSwxLDE1LDEsOSwxLAorICAgIDMyLDEsMTE0LDc2LDEsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDc4LDAsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLDAsMTI1LDEsMCwKKyAgICAxMjQsMSwwLDEwMCwyLDAsMTA3LDgsMCwxMTQsNzQsMCwxMjQsMCwwLDEwMCwKKyAgICAzLDAsMjUsMTI1LDEsMCwxMDAsNCwwLDEyNCwwLDAsMTA3LDcsMCwxMTQsCisgICAgNzQsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLDUsMCwxMzEsMSwwLDEwMCw2LAorICAgIDAsMjUsMTI1LDEsMCwxMTMsNzQsMCwxMTAsMCwwLDEyNCwxLDAsODMsNDEsCisgICAgNywxMjIsMTY3LDY3LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMzIsMTE5LDEwNCw5NywKICAgICAxMTYsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExNSwxMDQsCiAgICAgMTExLDExNywxMDgsMTAwLDMyLDk4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NSw5NSwKICAgICAxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwKQEAgLTQwMTAsNDIxICszMTkyLDI2OSBAQAogICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwKICAgICAxMTAsMTE2LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTYsMTE1LDMyLDExMiwxMTQsMTExLDExMiwKICAgICAxMDEsMTE0LDMyLDExOCw5NywxMDgsMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNywxMTAsMTA3LDExMCwKLSAgICAxMTEsMTE5LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTcsMTEsMCwwLDAsOTUsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDk1LDExNywxLDAsMCwwLDQ2LDEwNSwwLDAsMCwwLDc4LAotICAgIDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsMTAzLDEwMSwxMTYsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwKLSAgICAxMDUsMTE2LDEwNSwxMTEsMTEwLDQwLDIsMCwwLDAsMTE3LDcsMCwwLDAsMTAzLAotICAgIDEwOCwxMTEsOTgsOTcsMTA4LDExNSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTcsCi0gICAgMCwwLDAsOTUsOTksOTcsMTA4LDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5NSw5NSw5Miw2LDAsMCwxMTUsMTIsMCwwLDAsMCw3LDE1LAotICAgIDEsMTIsMSwxMCwxLDEyLDEsMjUsMSwxMTcsMTcsMCwwLDAsOTUsOTksCi0gICAgOTcsMTA4LDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSw5OSwKLSAgICAwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw1NSwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTA2LAotICAgIDIsMCwxMzEsMCwwLDEwMiwyLDAsMTI1LDAsMCwxMTYsMywwLDExNiw0LAotICAgIDAsMTAyLDIsMCwxMjUsMSwwLDExNiw1LDAsMTE2LDYsMCwxMDIsMiwwLAotICAgIDEyNSwyLDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTAzLDMsMCw4MywKLSAgICA0MCwxLDAsMCwwLDExNyw5NSwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDExNSwzMiw5NywzMiwxMDgsMTA1LDExNSwxMTYsMzIsMTExLDEwMiwzMiwxMDIsMTA1LDEwOCwxMDEsCi0gICAgNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjksOTcsOTksMTA0LAotICAgIDMyLDEwNSwxMTYsMTAxLDEwOSwzMiwxMDUsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsCi0gICAgMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwKLSAgICAxMDEsMTE1LDQxLDQ2LDEwLDMyLDMyLDMyLDMyLDQwLDcsMCwwLDAsMTE3LDE5LAotICAgIDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsCi0gICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxOCwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw5NSwxMTUsMTE3LAotICAgIDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNSwwLDAsMCwKLSAgICA4Myw3OSw4NSw4Miw2Nyw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsCi0gICAgMjAsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE3LDAsMCwwLDY2LDg5LDg0LAotICAgIDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQwLDMsCi0gICAgMCwwLDAsMTE3LDEwLDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDExNSwxMTcsNiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNyw4LDAsCi0gICAgMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI3LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LAotICAgIDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsMTA4LDEwMSw5NSwxMDgsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMDcsNiwwLDAsMTE1LDgsMCwwLDAsMCwKLSAgICA1LDE4LDEsMTIsMSwxMiwxLDExNywyNywwLDAsMCw5NSwxMDMsMTAxLDExNiwKLSAgICA5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsOTksNSwwLDAsMCwwLDAsMCwwLAotICAgIDksMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMjI3LDAsMCwKLSAgICAwLDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyNywwLDExNiwwLDAsCi0gICAgMTI0LDAsMCwxMzEsMSwwLDEyNSw1LDAsMTEwLDU0LDAsMTI0LDEsMCwxMDAsCi0gICAgMywwLDEwNyw5LDAsMTE0LDQ1LDAsMTI0LDEsMCwxMTAsMywwLDEwNSwwLAotICAgIDAsMTI1LDYsMCwxMTYsMiwwLDEyNCw2LDAsMTMxLDEsMCwxMjUsNywwLAotICAgIDExNiwwLDAsMTI0LDAsMCwxMjQsNywwLDEyNCw0LDAsMTMxLDMsMCwxMjUsCi0gICAgNSwwLDEyNCwzLDAsMTE1LDIwNywwLDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwKLSAgICAwLDExNCwxMjIsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMiwwLAotICAgIDEzMSwxLDAsMTAwLDEsMCwyNSwxMzEsMSwwLDgzLDEyNCwwLDAsMTE1LDEzMiwKLSAgICAwLDEyNCw1LDAsODMsMTE2LDQsMCwxMjQsMCwwLDEzMSwxLDAsMTE2LDQsCi0gICAgMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwxLDAsCi0gICAgMjUsMTMxLDEsMCwyNCwxMjUsOCwwLDExNiw1LDAsMTA2LDYsMCwxMjQsNSwKLSAgICAwLDEwNiw3LDAsMTAwLDMsMCwxMTYsNCwwLDEyNCw1LDAsMTA2LDcsMCwKLSAgICAxMzEsMSwwLDEyNCw4LDAsMjQsMTMzLDIsMCwyNSwyNSw4MywxMTAsMTYsMCwKLSAgICAxMTYsOCwwLDEyNCw1LDAsMTI0LDMsMCwxMTYsMCwwLDEzMSwzLDAsODMsCi0gICAgMTAwLDMsMCw4Myw0MCw0LDAsMCwwLDExNywyMTQsMSwwLDAsNzMsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsCi0gICAgMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTE3LDExNSwKLSAgICAxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA1LDExMCwxMDIsMTAxLDExNCwzMiwxMTksMTA0LDEwMSwxMTQsCi0gICAgMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwNSwxMTUsMzIsCi0gICAgMTExLDk5LDk5LDExNywxMTQsMTA1LDExMCwxMDMsMzIsMTAyLDExNCwxMTEsMTA5LDEwLDMyLDMyLAotICAgIDMyLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwxMTQsMTAxLDEwOCw5NywKLSAgICAxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE1LDQ2LDMyLDg0LDEwNCwKLSAgICAxMDEsMzIsMzksMTA4LDExMSw5OSw5NywxMDgsMTE1LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwKLSAgICAxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLDEwNSwxMDMsMTEwLDExMSwxMTQsMTAxLDEwMCw0NiwzMiwKLSAgICA4NCwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDM5LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwKLSAgICAxMTYsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDExNSwxMTIsMTAxLDk5LAotICAgIDEwNSwxMDIsMTA1LDEwMSwxMTUsMzIsMTE5LDEwNCw5NywxMTYsMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwKLSAgICAxMDAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwzMiw5NywxMTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LAotICAgIDk4LDExNywxMTYsMTAxLDExNSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsOTYsOTYsMTAyLAotICAgIDExNCwxMTEsMTA5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDMyLDYwLDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsNjIsOTYsOTYsNDEsNDYsCi0gICAgMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDgsMTAxLDExOCwxMDEsMTA4LDM5LDEwLDMyLDMyLAotICAgIDMyLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLAotICAgIDExNSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEwNSwxMTAsMzIsOTcsMzIsMTE0LAotICAgIDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsOTYsOTYsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDQ2LDQ2LDExMiwxMDcsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSwxMTEsMTAwLAotICAgIDk2LDk2LDMyLDExOSwxMTEsMTE3LDEwOCwxMDAsMzIsMTA0LDk3LDExOCwxMDEsMzIsOTcsMzIsCi0gICAgMzksMTA4LDEwMSwxMTgsMTAxLDEwOCwzOSwzMiwxMTEsMTAyLDMyLDUwLDQxLDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDEwNSwwLDAsMCwwLDExNywxLDAsMCwwLDQ2LDc4LAotICAgIDQwLDksMCwwLDAsMTE3LDExLDAsMCwwLDk1LDEwMyw5OSwxMDAsOTUsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDE3LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTUsOTUsMTE3LDksMCwwLDAsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsCi0gICAgMTExLDExMCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDE2LDAsMCwwLAotICAgIDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwKLSAgICA0MCw5LDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw3LAotICAgIDAsMCwwLDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsMTE3LDYsMCwwLDAsMTA4LAotICAgIDExMSw5OSw5NywxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LAotICAgIDExNSwxMTYsMTE3LDUsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTA4LDExMSw5OCwKLSAgICA5NywxMDgsMTE1LDk1LDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICAxMTcsNywwLDAsMCw5OSwxMTcsMTE2LDk1LDExMSwxMDIsMTAyLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDk1LDk1LDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDExOCw2LDAsMCwxMTUsMjYsMCwwLDAsCi0gICAgMCwxMSwxMiwxLDE1LDIsMjQsMSwxMiwxLDE4LDEsNiwzLDEyLDEsCi0gICAgMjMsMSw2LDEsNCw0LDM1LDMsNDAsMiwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDE2LDAsMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwyNCwKLSAgICAzLDAsMCwxMjQsMSwwLDk3LDAsMCwxMjQsMCwwLDk3LDEsMCwxMTYsCisgICAgMTExLDExOSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDE1OSwwLDAsMCw3OCwKKyAgICAxMTQsNTcsMCwwLDAsMTE0LDE2MCwwLDAsMCwxMTQsMTAyLDAsMCwwLDExNCwKKyAgICA2OCwwLDAsMCw0MSwyLDExNCw4MCwwLDAsMCwxMTQsMzIsMCwwLDAsCisgICAgNDEsMiwyMTgsNywxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LDExNCw1NywxLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMTcsOTUsOTksOTcsMTA4LDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKKyAgICA5NSw5NSwxMzksNiwwLDAsMTE1LDEyLDAsMCwwLDAsNywxNSwxLDEyLAorICAgIDEsMTAsMSwxMiwxLDI1LDEsMTE0LDc4LDEsMCwwLDk5LDAsMCwwLAorICAgIDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDU1LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMDYsMiwwLDEzMSwKKyAgICAwLDAsMTAyLDIsMCwxMjUsMCwwLDExNiwzLDAsMTE2LDQsMCwxMDIsMiwKKyAgICAwLDEyNSwxLDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLDAsMTI1LDIsMCwKKyAgICAxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMDMsMywwLDgzLDQxLDEsMTIyLAorICAgIDk1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDEwOCwxMDUsMTE1LDExNiwzMiwKKyAgICAxMTEsMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw2OSw5Nyw5OSwxMDQsMzIsMTA1LDExNiwxMDEsMTA5LDMyLDEwNSwxMTUsMzIsCisgICAgOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiw0MCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ0LAorICAgIDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsNDEsNDYsMTAsMzIsMzIsMzIsMzIsCisgICAgNDEsNywxMTQsOSwxLDAsMCwxMTQsOTUsMCwwLDAsMjE4LDE4LDEwMSwxMjAsCisgICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDk1LDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsCisgICAgMTE0LDMsMSwwLDAsMTE0LDEyMCwwLDAsMCwxMTQsOCwxLDAsMCwyMTgsCisgICAgMTcsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsCisgICAgNjksODMsNDEsMyw5MCwxMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwxMTUsCisgICAgOTAsNiwxMTUsMTExLDExNywxMTQsOTksMTAxLDkwLDgsOTgsMTIxLDExNiwxMDEsOTksMTExLAorICAgIDEwMCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDIzNSwwLDAsMCwxNTQsNiwwLDAsMTE1LDgsMCwwLDAsMCwKKyAgICA1LDE4LDEsMTIsMSwxMiwxLDExNCwyMzUsMCwwLDAsOTksNSwwLDAsCisgICAgMCwwLDAsMCwwLDksMCwwLDAsNSwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMjI3LDAsMCwwLDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNCwKKyAgICAyNywwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw1LDAsMTEwLDU0LAorICAgIDAsMTI0LDEsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LDQ1LDAsMTI0LDEsMCwKKyAgICAxMTAsMywwLDEwNSwwLDAsMTI1LDYsMCwxMTYsMSwwLDEyNCw2LDAsMTMxLAorICAgIDEsMCwxMjUsNywwLDExNiwwLDAsMTI0LDAsMCwxMjQsNywwLDEyNCw0LAorICAgIDAsMTMxLDMsMCwxMjUsNSwwLDEyNCwzLDAsMTE1LDIwNywwLDEyNCw0LDAsCisgICAgMTAwLDEsMCwxMDcsMiwwLDExNCwxMjIsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LAorICAgIDIsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMzEsMSwwLDgzLAorICAgIDEyNCwwLDAsMTE1LDEzMiwwLDEyNCw1LDAsODMsMTE2LDMsMCwxMjQsMCwwLAorICAgIDEzMSwxLDAsMTE2LDMsMCwxMjQsMCwwLDEwNiwyLDAsMTAwLDMsMCwxMzEsCisgICAgMSwwLDEwMCwxLDAsMjUsMTMxLDEsMCwyNCwxMjUsOCwwLDExNiw0LDAsCisgICAgMTA2LDUsMCwxMjQsNSwwLDEwNiw2LDAsMTAwLDIsMCwxMTYsMywwLDEyNCwKKyAgICA1LDAsMTA2LDYsMCwxMzEsMSwwLDEyNCw4LDAsMjQsMTMzLDIsMCwyNSwKKyAgICAyNSw4MywxMTAsMTYsMCwxMTYsNywwLDEyNCw1LDAsMTI0LDMsMCwxMTYsMCwKKyAgICAwLDEzMSwzLDAsODMsMTAwLDIsMCw4Myw0MSw0LDk3LDIxNCwxLDAsMCwKKyAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTAzLDEwOCwxMTEsOTgsOTcsCisgICAgMTA4LDExNSwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwKKyAgICAxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDUsMTEwLDEwMiwxMDEsMTE0LDMyLDExOSwxMDQsCisgICAgMTAxLDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA1LAorICAgIDExNSwzMiwxMTEsOTksOTksMTE3LDExNCwxMDUsMTEwLDEwMywzMiwxMDIsMTE0LDExMSwxMDksMTAsCisgICAgMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDExNCwxMDEsCisgICAgMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTUsNDYsMzIsCisgICAgODQsMTA0LDEwMSwzMiwzOSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsMzksMzIsOTcsMTE0LDEwMywKKyAgICAxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTA1LDEwMywxMTAsMTExLDExNCwxMDEsMTAwLAorICAgIDQ2LDMyLDg0LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzksMTAyLDExNCwxMTEsMTA5LDEwOCwKKyAgICAxMDUsMTE1LDExNiwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE1LDExMiwKKyAgICAxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDExNSwzMiwxMTksMTA0LDk3LDExNiwzMiwxMTUsMTA0LDExMSwKKyAgICAxMTcsMTA4LDEwMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDMyLDk3LDExNSwzMiw5NywxMTYsMTE2LAorICAgIDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiw5NiwKKyAgICA5NiwxMDIsMTE0LDExMSwxMDksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMzIsNjAsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiw2Miw5Niw5NiwKKyAgICA0MSw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMTAsCisgICAgMzIsMzIsMzIsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDExNCwxMDEsMTEyLAorICAgIDExNCwxMDEsMTE1LDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LAorICAgIDk3LDEwMywxMDEsMzIsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTA1LDExMCwzMiw5NywKKyAgICAzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiw5Niw5NiwxMDIsMTE0LDExMSwKKyAgICAxMDksMzIsNDYsNDYsMTEyLDEwNywxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA5LAorICAgIDExMSwxMDAsOTYsOTYsMzIsMTE5LDExMSwxMTcsMTA4LDEwMCwzMiwxMDQsOTcsMTE4LDEwMSwzMiwKKyAgICA5NywzMiwzOSwxMDgsMTAxLDExOCwxMDEsMTA4LDM5LDMyLDExMSwxMDIsMzIsNTAsNDEsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDY4LDAsMCwwLDc4LDExNCwxMDIsMCwwLAorICAgIDAsNDEsOCwxMTQsNjksMSwwLDAsMTE0LDc4LDEsMCwwLDExNCwxMDcsMCwKKyAgICAwLDAsMTE0LDMxLDAsMCwwLDExNCw3LDAsMCwwLDExNCwxNDEsMCwwLAorICAgIDAsMTE0LDU3LDAsMCwwLDExNCw3NiwxLDAsMCw0MSw5LDExNCw3MiwwLAorICAgIDAsMCwxMTQsNzcsMSwwLDAsMjE4LDYsMTA4LDExMSw5OSw5NywxMDgsMTE1LDExNCwKKyAgICA3NSwxLDAsMCwxMTQsNTgsMSwwLDAsMTE0LDE2MiwwLDAsMCw5MCw4LAorICAgIDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsOTUsMTE0LDU3LDEsMCwwLDkwLDcsOTksCisgICAgMTE3LDExNiw5NSwxMTEsMTAyLDEwMiwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsMTAsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsCisgICAgOTUsMTY1LDYsMCwwLDExNSwyNiwwLDAsMCwwLDExLDEyLDEsMTUsMiwKKyAgICAyNCwxLDEyLDEsMTgsMSw2LDMsMTIsMSwyMywxLDYsMSw0LDQsCisgICAgMzUsMyw0MCwyLDExNCw4MiwxLDAsMCw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMTYsMCwwLDAsMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDIzNywKKyAgICAyLDAsMCwxMjQsMSwwLDk3LDAsMCwxMjQsMCwwLDk3LDEsMCwxMTYsCiAgICAgMSwwLDEwNiwyLDAsMTA2LDMsMCwxMTQsMzMsMCwxMTYsNCwwLDk3LDUsCiAgICAgMCwxMTAsNiwwLDExNiw2LDAsOTcsNSwwLDExNiw3LDAsMTE2LDEsMCwKLSAgICAxMzEsMSwwLDEyNSwyLDAsMTIwLDExOSwwLDExNiwxLDAsMTA2LDgsMCwxMDYsCi0gICAgOSwwLDEzMSwwLDAsNjgsOTMsMTAyLDAsOTIsMiwwLDEyNSwzLDAsMTI1LAorICAgIDEzMSwxLDAsMTI1LDIsMCwxMjAsMTI4LDAsMTE2LDEsMCwxMDYsOCwwLDEwNiwKKyAgICA5LDAsMTMxLDAsMCw2OCw5MywxMTEsMCw5MiwyLDAsMTI1LDMsMCwxMjUsCiAgICAgNCwwLDExNiwxMCwwLDEyNCw0LDAsMTI0LDIsMCwxMzEsMiwwLDExNCw2NywKLSAgICAwLDExNiwxMSwwLDEyNCw0LDAsMTAwLDEsMCwxMzEsMiwwLDExNSwxNjksMCwKLSAgICAxMjQsMywwLDExNiwxLDAsMTA2LDEyLDAsMTA3LDYsMCwxMTQsMTM2LDAsMTE2LAotICAgIDEzLDAsMTI0LDQsMCw5NSwxNCwwLDExMywxNjYsMCwxMTYsMCwwLDEwNiwxNSwKLSAgICAwLDEyNCwzLDAsMTMxLDEsMCwxMTQsMTY2LDAsMTE2LDE2LDAsMTI0LDQsMCwKLSAgICA5NSwxNCwwLDExMywxNjYsMCwxMTMsMTY5LDAsMTEzLDY3LDAsMTEzLDY3LDAsODcsCi0gICAgMTE2LDEsMCwxMDYsOCwwLDExNiwxNywwLDI1LDEyNSw1LDAsMTIwLDc2LDAsCi0gICAgMTAwLDI4LDAsNjgsOTMsNjgsMCwxMjUsNiwwLDEyNCw2LDAsMTE2LDEsMCwKLSAgICAxMDYsOCwwLDEwNyw3LDAsMTE0LDIzMiwwLDExNiwxMywwLDEwNiwxOCwwLDEyNCwKLSAgICA2LDAsMTMxLDEsMCwxMjUsNywwLDExMCwxMywwLDExNiwxLDAsMTA2LDgsCi0gICAgMCwxMjQsNiwwLDI1LDEyNSw3LDAsMTE2LDE5LDAsMTI0LDUsMCwxMjQsNiwKLSAgICAwLDEyNCw3LDAsMTMxLDMsMCwxLDExMywxOTMsMCw4NywxMDAsNiwwLDEwMCwKLSAgICA3LDAsMTAzLDEsMCwxMDIsMiwwLDEwMCw4LDAsMTAwLDksMCwxMDAsNywKLSAgICAwLDEwMywyLDAsMTAyLDIsMCwxMDAsMTAsMCwxMDAsOSwwLDEwMCw3LDAsCi0gICAgMTAzLDIsMCwxMDIsMiwwLDEwMiwzLDAsMTI1LDgsMCwxMjAsMTg5LDAsMTI0LAotICAgIDgsMCw2OCw5MywxNjksMCw5MiwyLDAsMTI1LDksMCwxMjUsMTAsMCwxMTYsCi0gICAgMjAsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMCwwLDEyNCwxMCwwLDY4LDEzMSwKLSAgICAxLDAsMTMxLDEsMCwxMTUsMTA3LDEsMTE2LDIxLDAsMTMwLDEsMCwxMjQsMTAsCi0gICAgMCwxMDAsMTMsMCwyNSwxMjUsMTEsMCwxMjQsOSwwLDExNiwxLDAsMTA2LDgsCi0gICAgMCwxMDcsNiwwLDExNCwxNDksMSwxMTYsMSwwLDEwNiw4LDAsMTI0LDksMCwKLSAgICAyNSwxMjUsMTIsMCw4MCwxMTMsNjQsMSwxMjEsNjAsMCwxMTYsMTMsMCwxMDYsMTgsCi0gICAgMCwxMjQsOSwwLDEzMSwxLDAsMTI1LDEyLDAsMTI0LDksMCwxMDAsMTAsMCwKLSAgICAxMDcsMiwwLDExNCwyMDcsMSwxMDAsMTQsMCwxMTYsMSwwLDEwNiwyMiwwLDEwNywKLSAgICA2LDAsMTE0LDIwNywxLDEyNCwxMCwwLDEwMCwxNSwwLDI1LDEyNSwxMSwwLDExMCwKLSAgICAwLDAsODAsODcsMTEzLDY0LDEsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMjMyLAotICAgIDEsMSwxLDEsMTE5LDY0LDEsODksMTEzLDY0LDEsODgsMTEzLDY0LDEsODcsCi0gICAgMTE2LDIzLDAsMTAwLDE2LDAsMTMxLDEsMCwxMzAsMSwwLDEyMSwxOSwwLDExNiwKLSAgICAxMywwLDEwNiwxOCwwLDEwMCwxNywwLDEzMSwxLDAsMTI1LDEzLDAsODcsMTEwLAotICAgIDI0LDAsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMzgsMiwxLDEsMSwxMDAsCi0gICAgMjcsMCwxMjUsMTMsMCw4OSwxMTAsMSwwLDg4LDExNiwxMywwLDEwNiwxOCwwLAotICAgIDEwMCwxOCwwLDEzMSwxLDAsMTI1LDE0LDAsMTI0LDksMCwxMDAsOCwwLDEwNywKLSAgICAyLDAsMTE0LDEwMCwyLDExNiwxMywwLDEwNiwxOCwwLDEwMCwxOSwwLDEzMSwxLAotICAgIDAsMTI1LDE1LDAsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMjAsMCwxMjQsMTUsMCwKLSAgICAxMzEsMywwLDEsMTEwLDAsMCwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMSwwLAotICAgIDEyNCwxMiwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwxNywwLAotICAgIDEyNCwxMywwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwxOCwwLAotICAgIDEyNCwxNCwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMiwwLAotICAgIDEyNCwxMSwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMywwLAotICAgIDExNiwyNSwwLDEyNCwxMCwwLDEzMSwxLDAsMTMxLDMsMCwxLDExNiwxOSwwLAotICAgIDEyNCw1LDAsMTAwLDI0LDAsMTE2LDI2LDAsMTMxLDAsMCwxMzEsMywwLDEsCi0gICAgMTE2LDI3LDAsMTA2LDI4LDAsMTE2LDAsMCwxMDYsMjksMCwxMzEsMCwwLDEzMSwKLSAgICAxLDAsMSwxMjQsOSwwLDEwMCw4LDAsMTA3LDIsMCwxMTQsMjAsMywxMTYsCi0gICAgMzAsMCwxMDYsMzEsMCwxMDAsMjUsMCwxMzEsMSwwLDEsMTAwLDI2LDAsMTE2LAotICAgIDI3LDAsMTA3LDYsMCwxMTQsMjAsMywxMDAsMjksMCwxMTYsMzMsMCw5NSwzNCwKLSAgICAwLDExMywyMCwzLDExMCwwLDAsMTAwLDI3LDAsODMsNDAsMzAsMCwwLDAsCi0gICAgMTE3LDI1MCwwLDAsMCw4MywxMDEsMTE2LDExNywxMTIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCwzMiw5OCwxMjEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwKLSAgICAxMDMsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwKLSAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTA1LDExMCwKLSAgICAxMDYsMTAxLDk5LDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwxMDksMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMDgsMTExLDk4LDk3LDEwOCwKLSAgICAzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw2NSwxMTUsMzIsMTE1LDEyMSwxMTUsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLAotICAgIDEwMCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMTUsMzIsOTcsOTksOTksMTAxLDExNSwxMTUsMzIsOTcsMTEwLDEwMCwzMiw5NSwxMDUsMTA5LAotICAgIDExMiwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTExLDExNSwxMDEsMzIsCi0gICAgMTE2LDExOSwxMTEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwKLSAgICAzMiw5OCwxMDEsMzIsMTAxLDEyMCwxMTIsMTA4LDEwNSw5OSwxMDUsMTE2LDEwOCwxMjEsMzIsMTEyLAotICAgIDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDExNywzLAotICAgIDAsMCwwLDk1LDEwNSwxMTEsMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsCi0gICAgMTA1LDExMCwxMDMsMTE1LDExNyw4LDAsMCwwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAotICAgIDExNSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDExNyw1LDAsCi0gICAgMCwwLDExMiwxMTEsMTE1LDEwNSwxMjAsMTE3LDEsMCwwLDAsNDcsMTE3LDIsMCwKLSAgICAwLDAsMTEwLDExNiwxMTcsMSwwLDAsMCw5MiwxMTcsMywwLDAsMCwxMTEsCi0gICAgMTE1LDUwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCi0gICAgMCwwLDAsMTE1LDAsMCwwLDExNSwzMywwLDAsMCwxMjQsMCwwLDkzLAotICAgIDIzLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMCwKLSAgICAwLDEwNywyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDAsMiwwLAotICAgIDAsMCwxMDUsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDEwOCwxMDEsMTEwLDQwLDIsMCwwLDAsMTE3LDIsMCwwLDAsNDYsCi0gICAgNDgsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAotICAgIDExMiwxMTQsNjIsMTkxLDYsMCwwLDExNSwyLDAsMCwwLDYsMCwxMTcsMjUsCi0gICAgMCwwLDAsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDEwNSwwLDAsMCwKLSAgICAwLDExNyw3LDAsMCwwLDY5LDc3LDg4LDMyLDcxLDY3LDY3LDEwNSwxLDAsCi0gICAgMCwwLDExNywzMCwwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LDEyMCwzMiwKLSAgICAxMTEsMTE0LDMyLDExMCwxMTYsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LAotICAgIDEwMCwxMTcsOCwwLDAsMCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiwxMTcsNiwKLSAgICAwLDAsMCwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsNywwLDAsMCw5NSwxMTksCi0gICAgMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw4LDAsCi0gICAgMCwwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDExNywxNSwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsNCwKLSAgICAwLDAsMCw0NiwxMTIsMTIxLDExOSwxMTcsNiwwLDAsMCw5NSwxMDAsNDYsMTEyLAotICAgIDEyMSwxMDAsNzgsNDAsNCwwLDAsMCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLAotICAgIDExNyw5LDAsMCwwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsOCwKLSAgICAwLDAsMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTUsMTE3LDcsMCwwLDAsCi0gICAgMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCw4NCw0MCwzNSwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNSwKLSAgICAwLDAsMCwxMDIsMTA4LDk3LDEwMywxMTUsMTE3LDgsMCwwLDAsMTExLDExMiwxMTYsCi0gICAgMTA1LDEwOSwxMDUsMTIyLDEwMSwxMTcsMjcsMCwwLDAsNzksODAsODQsNzMsNzcsNzMsCi0gICAgOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsCi0gICAgNzAsNzMsODgsNjksODMsMTE3LDE3LDAsMCwwLDY2LDg5LDg0LDY5LDY3LDc5LAotICAgIDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywyMywwLDAsMCwKLSAgICA2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4MywKLSAgICA4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNCwwLDAsMCwxMTYsMTIxLDExMiwxMDEsCi0gICAgMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNyw1LDAsMCwKLSAgICAwLDEwNSwxMTYsMTAxLDEwOSwxMTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsMTA1LDExMCwxMTUsCi0gICAgMTE2LDk3LDExMCw5OSwxMDEsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LAotICAgIDExNCwxMTcsMjAsMCwwLDAsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNywxNSwwLDAsMCw2NiwKLSAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDksMCwKLSAgICAwLDAsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsMTQsMCwwLDAsCi0gICAgNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDExLDAsMCwwLAotICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw3LDAsMCwwLAotICAgIDExNSwxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywzLDAsMCwwLDk3LDEwOCwxMDgsMTE3LAotICAgIDE0LDAsMCwwLDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNyw3LDAsMCwwLDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTcsMTEsCi0gICAgMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LAotICAgIDE2LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSwKLSAgICA5OSw5NywxMTUsMTAxLDExNywxOCwwLDAsMCw2OSw4OCw4NCw2OSw3OCw4Myw3MywKLSAgICA3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNiwwLDAsMCwKLSAgICAxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsMTgsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsMTUsMCwKLSAgICAwLDAsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksCi0gICAgODMsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSwxMTcsMjEsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwKLSAgICAxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LAotICAgIDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg1LDczLDc2LDY4LDQwLAotICAgIDE2LDAsMCwwLDExNywxMCwwLDAsMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTA1LDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNiwKLSAgICAxMjEsMTEyLDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMiwwLDAsMCw5OCwxMTcsMTA1LDEwOCwKLSAgICAxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTQsMCwwLDAsOTgsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDExMSwxMTUsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDEwLDAsMCwwLDk4LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExMSwxMTUsMTE3LDE1LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDksMCwwLDAsMTExLAotICAgIDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsMTE2LDEwNCwxMTQsCi0gICAgMTAxLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTQsMCwwLDAsMTE5LAotICAgIDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEzLDAsCi0gICAgMCwwLDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDYsMCwwLDAsCi0gICAgOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwxNTQsNiwwLDAsMTE1LDEwNiwwLDAsMCwwLAotICAgIDksNiwxLDYsMiwxMiwxLDksMiw2LDIsMTIsMSwyOCwxLDE1LAotICAgIDEsMTUsMSwxNSwxLDEyLDEsMTUsMSwyMiwyLDEzLDEsMTMsMSwxNSwKLSAgICAxLDE4LDIsMTMsMSwyMCwyLDQ4LDEsMTksMiwzMSwxLDEwLDEsMTUsCi0gICAgMSwxMywxLDQsMiwzLDEsMTUsMiwyNywxLDEzLDEsNSwxLDEzLAorICAgIDAsMTE2LDExLDAsMTI0LDQsMCwxMDAsMSwwLDEwMCwyLDAsMTMxLDMsMCwKKyAgICAxMDAsMiwwLDEwNyw4LDAsMTE0LDE3OCwwLDEyNCwzLDAsMTE2LDEsMCwxMDYsCisgICAgMTIsMCwxMDcsNiwwLDExNCwxNDUsMCwxMTYsMTMsMCwxMjQsNCwwLDk1LDE0LAorICAgIDAsMTEzLDE3NSwwLDExNiwwLDAsMTA2LDE1LDAsMTI0LDMsMCwxMzEsMSwwLAorICAgIDExNCwxNzUsMCwxMTYsMTYsMCwxMjQsNCwwLDk1LDE0LDAsMTEzLDE3NSwwLDExMywKKyAgICAxNzgsMCwxMTMsNjcsMCwxMTMsNjcsMCw4NywxMTYsMSwwLDEwNiw4LDAsMTE2LAorICAgIDE3LDAsMjUsMTI1LDUsMCwxMjAsNzYsMCwxMDAsMjcsMCw2OCw5Myw2OCwwLAorICAgIDEyNSw2LDAsMTI0LDYsMCwxMTYsMSwwLDEwNiw4LDAsMTA3LDcsMCwxMTQsCisgICAgMjQxLDAsMTE2LDEzLDAsMTA2LDE4LDAsMTI0LDYsMCwxMzEsMSwwLDEyNSw3LAorICAgIDAsMTEwLDEzLDAsMTE2LDEsMCwxMDYsOCwwLDEyNCw2LDAsMjUsMTI1LDcsCisgICAgMCwxMTYsMTksMCwxMjQsNSwwLDEyNCw2LDAsMTI0LDcsMCwxMzEsMywwLAorICAgIDEsMTEzLDIwMiwwLDg3LDEwMCw3LDAsMTAwLDgsMCwxMDMsMSwwLDEwMiwyLAorICAgIDAsMTAwLDksMCwxMDAsMTAsMCwxMDAsOCwwLDEwMywyLDAsMTAyLDIsMCwKKyAgICAxMDIsMiwwLDEyNSw4LDAsMTIwLDE0OSwwLDEyNCw4LDAsNjgsOTMsMTI5LDAsCisgICAgOTIsMiwwLDEyNSw5LDAsMTI1LDEwLDAsMTE2LDIwLDAsMTAwLDExLDAsMTAwLAorICAgIDEyLDAsMTMyLDAsMCwxMjQsMTAsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMTE1LAorICAgIDEwMSwxLDExNiwyMSwwLDEzMCwxLDAsMTI0LDEwLDAsMTAwLDEzLDAsMjUsMTI1LAorICAgIDExLDAsMTI0LDksMCwxMTYsMSwwLDEwNiw4LDAsMTA3LDYsMCwxMTQsMTQzLAorICAgIDEsMTE2LDEsMCwxMDYsOCwwLDEyNCw5LDAsMjUsMTI1LDEyLDAsODAsMTEzLAorICAgIDU4LDEsMTIxLDIwLDAsMTE2LDEzLDAsMTA2LDE4LDAsMTI0LDksMCwxMzEsMSwKKyAgICAwLDEyNSwxMiwwLDgwLDg3LDExMyw1OCwxLDQsMTE2LDIyLDAsMTA3LDEwLDAsCisgICAgMTE0LDE4NiwxLDEsMSwxLDExOSw1OCwxLDg5LDExMyw1OCwxLDg4LDExMyw1OCwKKyAgICAxLDg3LDExNiwyMiwwLDEwMCwxNCwwLDEzMSwxLDAsMTMwLDEsMCwxMjEsMTksCisgICAgMCwxMTYsMTMsMCwxMDYsMTgsMCwxMDAsMTUsMCwxMzEsMSwwLDEyNSwxMywwLAorICAgIDg3LDExMCwyNCwwLDQsMTE2LDIyLDAsMTA3LDEwLDAsMTE0LDI0OCwxLDEsMSwKKyAgICAxLDEwMCwyLDAsMTI1LDEzLDAsODksMTEwLDEsMCw4OCwxMTYsMTMsMCwxMDYsCisgICAgMTgsMCwxMDAsMTYsMCwxMzEsMSwwLDEyNSwxNCwwLDEyNCw5LDAsMTAwLDksCisgICAgMCwxMDcsMiwwLDExNCw1NCwyLDExNiwxMywwLDEwNiwxOCwwLDEwMCwxNywwLAorICAgIDEzMSwxLDAsMTI1LDE1LDAsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMTgsMCwxMjQsCisgICAgMTUsMCwxMzEsMywwLDEsMTEwLDAsMCwxMTYsMTksMCwxMjQsNSwwLDEwMCwKKyAgICAxOSwwLDEyNCwxMiwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwKKyAgICAxNSwwLDEyNCwxMywwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwKKyAgICAxNiwwLDEyNCwxNCwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwKKyAgICAyMCwwLDEyNCwxMSwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwKKyAgICAyMSwwLDEwMCwyMiwwLDEwNiwyMywwLDEyNCwxMCwwLDEzMSwxLDAsMTMxLDMsCisgICAgMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIzLDAsMTE2LDI0LDAsMTMxLDAsCisgICAgMCwxMzEsMywwLDEsMTE2LDI1LDAsMTA2LDI2LDAsMTE2LDAsMCwxMDYsMjcsCisgICAgMCwxMzEsMCwwLDEzMSwxLDAsMSwxMjQsOSwwLDEwMCw5LDAsMTA3LDIsCisgICAgMCwxMTQsMjMzLDIsMTE2LDI4LDAsMTA2LDI5LDAsMTAwLDI0LDAsMTMxLDEsMCwKKyAgICAxLDEwMCwyNSwwLDExNiwyNSwwLDEwNyw2LDAsMTE0LDIzMywyLDEwMCwyNiwwLAorICAgIDExNiwzMCwwLDk1LDMxLDAsMTEzLDIzMywyLDExMCwwLDAsMTAwLDIsMCw4MywKKyAgICA0MSwyOCwxMjIsMjUwLDgzLDEwMSwxMTYsMTE3LDExMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMDgsMTA1LDk4LDMyLDk4LDEyMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMDUsMTEwLDEwNiwKKyAgICAxMDEsOTksMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDEwOSwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMDUsMTEwLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDMyLAorICAgIDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDY1LDExNSwzMiwxMTUsMTIxLDExNSwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLAorICAgIDMyLDEwMiwxMTEsMTE0LDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwKKyAgICAzMiw5Nyw5OSw5OSwxMDEsMTE1LDExNSwzMiw5NywxMTAsMTAwLDMyLDk1LDEwNSwxMDksMTEyLAorICAgIDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDgsMTExLAorICAgIDk3LDEwMCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMTEsMTE1LDEwMSwzMiwxMTYsCisgICAgMTE5LDExMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LDMyLAorICAgIDk4LDEwMSwzMiwxMDEsMTIwLDExMiwxMDgsMTA1LDk5LDEwNSwxMTYsMTA4LDEyMSwzMiwxMTIsOTcsCisgICAgMTE1LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDE3MiwKKyAgICAwLDAsMCw3OCwxMTQsNDksMCwwLDAsMTE0LDE4NiwwLDAsMCwyMTgsOCwKKyAgICA5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTUsMTE0LDIwMiwwLDAsMCw5MCw1LDExMiwKKyAgICAxMTEsMTE1LDEwNSwxMjAsMjUwLDEsNDcsMjE4LDIsMTEwLDExNiwyNTAsMSw5Miw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwKKyAgICAwLDAsMCwxMTUsMzMsMCwwLDAsMTI0LDAsMCw5MywyMywwLDEyNSwxLAorICAgIDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDAsMCwxMDcsMiwwLAorICAgIDg2LDEsMTEzLDMsMCwxMDAsMSwwLDgzLDQxLDIsMTE0LDI5LDAsMCwwLAorICAgIDc4LDQxLDEsMTE0LDMxLDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDExNCwKKyAgICAxMTYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDE0NCwwLDAsMCwyMzgsNiwwLDAsMTE1LDIsMCwwLAorICAgIDAsNiwwLDEyMiwyNSw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDQ2LDYwLDEwOCwxMTEsOTksCisgICAgOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE0LDY4LAorICAgIDAsMCwwLDEyMiwzMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDExNCwKKyAgICAxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LDEyMCwzMiwxMTEsMTE0LAorICAgIDMyLDExMCwxMTYsMTE0LDY5LDAsMCwwLDExNCw5MywwLDAsMCw5MCw2LDExOSwKKyAgICAxMDUsMTEwLDExNCwxMDEsMTAzLDExNCwyMjYsMCwwLDAsMTE0LDMsMCwwLDAsMTE0LAorICAgIDI1LDAsMCwwLDExNCwyMSwwLDAsMCwxMTQsMzAsMCwwLDAsMTE0LDYsCisgICAgMCwwLDAsMTIyLDQsNDYsMTEyLDEyMSwxMTksMTIyLDYsOTUsMTAwLDQ2LDExMiwxMjEsCisgICAgMTAwLDg0LDQxLDQsMTIyLDMsOTUsMTA1LDExMSwxMjIsOSw5NSwxMTksOTcsMTE0LDExMCwKKyAgICAxMDUsMTEwLDEwMywxMTUsMTIyLDgsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE1LDEyMiw3LAorICAgIDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsNDEsMzIsMTE0LDk1LDAsMCwwLDExNCw3LAorICAgIDAsMCwwLDExNCwxMDMsMCwwLDAsMTE0LDEwNCwwLDAsMCwxMTQsMTA2LDAsCisgICAgMCwwLDExNCw4MCwxLDAsMCwxMTQsMTA1LDAsMCwwLDExNCwxNTMsMCwwLAorICAgIDAsMTE0LDE0MSwwLDAsMCwyMTgsNSwxMDUsMTE2LDEwMSwxMDksMTE1LDExNCwyMDMsMCwKKyAgICAwLDAsMTE0LDYyLDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDIxNSwwLDAsCisgICAgMCwxMTQsMTcyLDAsMCwwLDExNCwxODIsMCwwLDAsMTE0LDIyMywwLDAsMCwKKyAgICAxMTQsNTcsMCwwLDAsMTE0LDIxOSwwLDAsMCwxMTQsNjEsMCwwLDAsMjE4LAorICAgIDMsOTcsMTA4LDEwOCwxMTQsODcsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMjYsCisgICAgMCwwLDAsMTE0LDExLDAsMCwwLDExNCwxMiwxLDAsMCwxMTQsMjA4LDAsCisgICAgMCwwLDExNCw3OSwxLDAsMCwxMTQsMTIwLDAsMCwwLDExNCwxNjYsMCwwLAorICAgIDAsMTE0LDIyNSwwLDAsMCwxMTQsMjI5LDAsMCwwLDQxLDE2LDIxOCwxMCwxMTUsCisgICAgMTIxLDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyMTgsMTEsOTUsMTA1LDEwOSwxMTIsOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTEsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE2LAorICAgIDEyMSwxMTIsMTAxLDExNCw3MiwwLDAsMCwxMTQsMTYyLDAsMCwwLDkwLDExLDExNSwKKyAgICAxMDEsMTA4LDEwMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMiw5OCwxMTcsMTA1LDEwOCwKKyAgICAxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LDEwMSw5MCwxNCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LAorICAgIDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMCwxMTEsMTE1LDk1LDEwMCwxMDEsMTE2LAorICAgIDk3LDEwNSwxMDgsMTE1LDkwLDEwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExMSwxMTUsCisgICAgMTE0LDIxLDAsMCwwLDExNCwyNSwwLDAsMCw5MCw5LDExMSwxMTUsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTMsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCw5NSwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5MCwxNCwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5NSwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5MCwxMywxMTksMTA1LDExMCwxMTQsMTAxLDEwMyw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsNiw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDIwMSw2LDAsMCwxMTUsMTAyLAorICAgIDAsMCwwLDAsOSw2LDEsNiwyLDEyLDEsOSwyLDYsMiwxMiwKKyAgICAxLDI4LDEsMTUsMSwyNCwxLDE1LDEsMTIsMSwxNSwxLDIyLDIsMTMsCisgICAgMSwxMywxLDE1LDEsMTgsMiwxMywxLDIwLDIsMzMsMSwxOSwyLDMxLAorICAgIDEsMTAsMSwxNSwxLDEzLDEsNCwyLDMsMSwxNSwxLDUsMSwxMywKICAgICAxLDEyLDIsMTIsMiwzLDEsMTksMSwxMywyLDExLDEsMTUsMiwxMiwKLSAgICAxLDE1LDEsMTksMiwxNiwxLDE2LDEsMTYsMSwxNiwxLDIyLDIsMTksCi0gICAgMSwxOSwxLDEyLDEsMTMsMSwxMiwxLDExNyw2LDAsMCwwLDk1LDExNSwKLSAgICAxMDEsMTE2LDExNywxMTIsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLAotICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTM2LDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMSwxMTYsMSwwLDEzMSwwLAotICAgIDAsMTI1LDIsMCwxMTYsMiwwLDEwNiwzLDAsMTA2LDQsMCwxMTYsNSwwLAotICAgIDEwNiw2LDAsMTI0LDIsMCwxNDAsMCwwLDEwMywxLDAsMTMxLDEsMCwxLAotICAgIDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiw5LDAsMTMxLDEsMCwxLAotICAgIDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxMCwwLDEzMSwxLDAsMSwKLSAgICAxMTYsMTEsMCwxMDYsMTIsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDExNiwwLDExNiwKLSAgICAyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxMywwLDEzMSwxLDAsMSwxMTAsCi0gICAgMCwwLDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxNCwwLDEzMSwxLAotICAgIDAsMSwxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDUwLDAsMCwwLAotICAgIDczLDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLAotICAgIDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsMTE3LDIsMCwwLDAsMTEwLDExNiw3OCw0MCwxNSwwLDAsMCwxMTcsCi0gICAgNiwwLDAsMCw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDExNywyNywwLDAsMCw5NSwKLSAgICAxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LAotICAgIDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywKLSAgICAxMTUsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDEwLDAsMCwKLSAgICAwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDksMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNyw5LDAsMCwwLDEwOSwxMDEsCi0gICAgMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDk3LDExMiwxMTIsMTAxLAotICAgIDExMCwxMDAsMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDMsMCwwLDAsOTUsMTExLAotICAgIDExNSwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMjEsCi0gICAgMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwKLSAgICAxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDgwLDk3LDExNiwKLSAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwzLDAsMCwwLDExNywxMCwwLDAsCi0gICAgMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDE3LDAsMCwwLAotICAgIDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgMTE1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwKLSAgICAwLDAsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMjMzLDYsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwwLDIsMTMsMSw5LDEsMjgsMSwxNiwxLDE2LDEsMTUsCi0gICAgMSwxOSwxLDExNyw4LDAsMCwwLDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LAotICAgIDc4LDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsMTE5LDEwNSwxMTAsMTE3LDYsCi0gICAgMCwwLDAsOTksMTIxLDEwMywxMTksMTA1LDExMCwxMTcsNiwwLDAsMCwxMDAsOTcsCi0gICAgMTE0LDExOSwxMDUsMTEwLDQwLDc0LDAsMCwwLDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDI3LDAsMCwwLDk1LDY3LDY1LDgzLDY5LDk1LAotICAgIDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LDgwLDc2LDY1LDg0LAotICAgIDcwLDc5LDgyLDc3LDgzLDExNywxNiwwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwKLSAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsNywwLDAsMCw5NSwKLSAgICAxMTksOTUsMTA4LDExMSwxMTAsMTAzLDExNyw3LDAsMCwwLDk1LDExNCw5NSwxMDgsMTExLAotICAgIDExMCwxMDMsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LAotICAgIDExMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LAotICAgIDExNiwxMTcsMTgsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksCi0gICAgMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNywxMiwwLDAsMCw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsMTMsMCwwLDAsOTUsMTE5LAotICAgIDExNCwxMDUsMTE2LDEwMSw5NSw5NywxMTYsMTExLDEwOSwxMDUsOTksMTE3LDUsMCwwLDAsCi0gICAgOTUsMTE5LDExNCw5NywxMTIsMTE3LDQsMCwwLDAsMTE2LDEyMSwxMTIsMTAxLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDk5LDExMSwxMDAsMTAxLDk1LDk1LDExNywxMCwwLDAsMCwKLSAgICA5NSw5OSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDEwLDAsMCwwLDExMCwKLSAgICAxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMywwLDAsMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTUsMTE3LDEyLDAsMCwwLAotICAgIDk1LDk4LDEwOCwxMTEsOTksMTA3LDEwNSwxMTAsMTAzLDk1LDExMSwxMTAsMTE3LDEyLDAsMCwKLSAgICAwLDgyLDExNywxMTAsMTE2LDEwNSwxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTQsMCwKLSAgICAwLDAsOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDExLDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywKLSAgICAxMTcsMTYsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNzYsMTExLDk5LDEwNywxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDE5LDAsMCwwLDk1LAotICAgIDEwOCwxMTEsOTksMTA3LDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLAotICAgIDExNywzLDAsMCwwLDExMSwxMTQsMTAwLDExNywxNywwLDAsMCw5NSw4Miw2NSwKLSAgICA4Nyw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwxMTcsNSwKLSAgICAwLDAsMCw5OCwxMjEsMTE2LDEwMSwxMTUsMTE3LDUsMCwwLDAsMTE0LDk3LDExMCwKLSAgICAxMDMsMTAxLDExNywxMiwwLDAsMCw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw2Niw4OSwKLSAgICA4NCw2OSw4MywxMTcsOCwwLDAsMCw5NSw4MCw4OSw2Nyw2NSw2Nyw3Miw2OSwKLSAgICAxMTcsMTUsMCwwLDAsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsCi0gICAgNzMsODgsNjksODMsMTE3LDIzLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LAotICAgIDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLAotICAgIDExNywyNywwLDAsMCw3OSw4MCw4NCw3Myw3Nyw3Myw5MCw2OSw2OCw5NSw2NiwKLSAgICA4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICAxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTcsMCwwLDAsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsCi0gICAgMTcsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTcsMTUsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsMTA1LDEwOCwxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwKLSAgICAxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMSwKLSAgICAwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE3LDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNywxNiwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxNywKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE1LDEwNCwxMDUsMTA5LDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwKLSAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywyMSwwLDAsMCwKLSAgICA4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDExNywxMiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LAotICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDIwLDAsMCwKLSAgICAwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNywxOCwwLDAsMCw2OSw4OCw4NCw2OSw3OCw4MywKLSAgICA3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMTksMCwwLAotICAgIDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwKLSAgICAxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLAotICAgIDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsNzAsCi0gICAgMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTgsMCwwLDAsOTUsNzMsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LAotICAgIDExNywxMywwLDAsMCw5NSwxMTQsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSwKLSAgICA5OSwxMDQsMTAxLDk5LDEwNywxMTcsOCwwLDAsMCw5NSw2OSw4Miw4Miw5NSw3NywKLSAgICA4Myw3MSwxMTcsMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDExNywxNCwKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCwxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMTcsMTYsMCwwLDAsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LAotICAgIDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNywxNywwLDAsMCw5NSw5OSw5NywxMDgsOTksCi0gICAgOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNywyNywwLDAsCi0gICAgMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDEwLDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDExNyw2LDAsMCwwLAotICAgIDk1LDExNSwxMDEsMTE2LDExNywxMTIsMTE3LDgsMCwwLDAsOTUsMTA1LDExMCwxMTUsMTE2LAotICAgIDk3LDEwOCwxMDgsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDYyLDgsMCwwLDAsMTE1LDEzMiwwLDAsMCw2LDIxLDYsMywxMiwxMywKLSAgICAxMiwxNiwxMiwxMywxMiwxMiwxMiwxMiwxMiwxMCwxMiw2LDEyLDcsMTUsMjIsCi0gICAgMTIsOCwxNSwzLDEyLDEyLDYsMiw2LDMsMjIsNCwxOSw2OCwxOSwyMywKLSAgICAxMiwxOSwxMiwyMCwxMiwxMDAsMzQsMSwzNywyLDYsMiw5LDIsOSwxLAotICAgIDksMiwxNSwyNywxMiwyMywxMiwxOSwxOCw4LDEyLDEzLDEyLDExLDEyLDU1LAotICAgIDEyLDE4LDEyLDExLDEyLDExLDEyLDE3LDE5LDU3LDE5LDU0LDE5LDUwLDE5LDgzLAotICAgIDIyLDEzNCwxOSwyOSwyNSw0OSwyNSwyNSw2LDMsMTksNDUsMTksNTUsMTksMTgsCi0gICAgMTksOTEsMTksMTI4LDE5LDEzLDEyLDksMTIsMTcsMTIsMTcsNiwyLDEyLDUwLAotICAgIDEyLDEzLDE4LDI0LDEyLDM0LDEyLDE1LDEyLDExLDI0LDM2LDEyLDc5LAorICAgIDEsMTUsMSwxOSwyLDE2LDEsMTYsMSwxNiwxLDE2LDEsMjUsMiwxOSwKKyAgICAxLDE5LDEsMTIsMSwxMywxLDEyLDEsMTE0LDkxLDEsMCwwLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDEzNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LDEsCisgICAgMCwxMzEsMiwwLDEsMTE2LDEsMCwxMzEsMCwwLDEyNSwyLDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEwNiw0LDAsMTE2LDUsMCwxMDYsNiwwLDEyNCwyLDAsCisgICAgMTQwLDAsMCwxMDMsMSwwLDEzMSwxLDAsMSwxMTYsMiwwLDEwNiw3LDAsCisgICAgMTA2LDgsMCwxMTYsOSwwLDEzMSwxLDAsMSwxMTYsMiwwLDEwNiw3LDAsCisgICAgMTA2LDgsMCwxMTYsMTAsMCwxMzEsMSwwLDEsMTE2LDExLDAsMTA2LDEyLDAsCisgICAgMTAwLDEsMCwxMDcsMiwwLDExNCwxMTYsMCwxMTYsMiwwLDEwNiw3LDAsMTA2LAorICAgIDgsMCwxMTYsMTMsMCwxMzEsMSwwLDEsMTEwLDAsMCwxMTYsMiwwLDEwNiwKKyAgICA3LDAsMTA2LDgsMCwxMTYsMTQsMCwxMzEsMSwwLDEsMTAwLDIsMCw4MywKKyAgICA0MSwzLDEyMiw1MCw3MywxMTAsMTE1LDExNiw5NywxMDgsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLAorICAgIDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDExNCw4NSwxLDAsMCw3OCw0MSwxNSwxMTQsOTEsCisgICAgMSwwLDAsMTE0LDIzNSwwLDAsMCwxMTQsNywwLDAsMCwxMTQsMzMsMSwKKyAgICAwLDAsMTE0LDIwOCwwLDAsMCwxMTQsNDAsMSwwLDAsMTE0LDU0LDEsMCwKKyAgICAwLDExNCw2MCwxLDAsMCwxMTQsMTY2LDAsMCwwLDExNCwyMTUsMCwwLDAsCisgICAgMTE0LDIyMywwLDAsMCwxMTQsMywwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LAorICAgIDIyNSwwLDAsMCwxMTQsMjgsMSwwLDAsNDEsMywxMTQsODksMSwwLDAsCisgICAgMTE0LDkwLDEsMCwwLDkwLDE3LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLAorICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCw4LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsCisgICAgMTA4LDIxLDcsMCwwLDExNSwxNiwwLDAsMCwwLDIsMTMsMSw5LDEsCisgICAgMjgsMSwxNiwxLDE2LDEsMTUsMSwxOSwxLDExNCw5MiwxLDAsMCw0MSwKKyAgICAzLDEyMiwzLDExOSwxMDUsMTEwLDExNCwxLDAsMCwwLDExNCwyLDAsMCwwLAorICAgIDQxLDgzLDExNCw1OSwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwKKyAgICAwLDExNCwxNywwLDAsMCwxMTQsMTksMCwwLDAsMTE0LDI4LDAsMCwwLAorICAgIDExNCwzOCwwLDAsMCwxMTQsMzksMCwwLDAsMTE0LDQzLDAsMCwwLDExNCwKKyAgICA0NCwwLDAsMCwxMTQsNDYsMCwwLDAsMTE0LDU1LDAsMCwwLDExNCw2NSwKKyAgICAwLDAsMCwxMTQsMTUzLDAsMCwwLDIxOCw4LDk1LDk1LDk5LDExMSwxMDAsMTAxLAorICAgIDk1LDk1LDExNCwyMDQsMCwwLDAsMTE0LDkwLDAsMCwwLDExNCw3OSwwLDAsCisgICAgMCwxMTQsODYsMCwwLDAsMTE0LDY2LDAsMCwwLDExNCw2NywwLDAsMCwKKyAgICAxMTQsODksMCwwLDAsMTE0LDk0LDAsMCwwLDExNCw5NywwLDAsMCwxMTQsCisgICAgMTAwLDAsMCwwLDExNCwxNSwwLDAsMCwxMTQsMTk2LDAsMCwwLDExNCwxNCwKKyAgICAwLDAsMCwxMTQsMTgsMCwwLDAsOTAsMTcsOTUsODIsNjUsODcsOTUsNzcsCisgICAgNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsMTE0LDExMSwwLDAsMCwKKyAgICAxMTQsMTIwLDAsMCwwLDExNCwxMDUsMCwwLDAsMTE0LDEwNiwwLDAsMCwxMTQsCisgICAgMTE4LDAsMCwwLDExNCwxMjEsMCwwLDAsMTE0LDEyOCwwLDAsMCwxMTQsMTMwLAorICAgIDAsMCwwLDExNCwxMzgsMCwwLDAsMTE0LDEzOSwwLDAsMCwxMTQsMTQ3LDAsCisgICAgMCwwLDExNCwxNTYsMCwwLDAsMTE0LDE2MywwLDAsMCwxMTQsMTY3LDAsMCwKKyAgICAwLDExNCwxNzEsMCwwLDAsMTE0LDE3NCwwLDAsMCwxMTQsMTc3LDAsMCwwLAorICAgIDExNCwxODEsMCwwLDAsMTE0LDE4NCwwLDAsMCwxMTQsMTkxLDAsMCwwLDExNCwKKyAgICAyMDEsMCwwLDAsMTE0LDIwNiwwLDAsMCwxMTQsMjA5LDAsMCwwLDExNCwyMTQsCisgICAgMCwwLDAsMTE0LDIxNSwwLDAsMCwxMTQsMjIzLDAsMCwwLDExNCwyMjUsMCwKKyAgICAwLDAsMTE0LDIzOCwwLDAsMCwxMTQsMjQyLDAsMCwwLDExNCwxLDEsMCwKKyAgICAwLDExNCwzLDEsMCwwLDExNCw4LDEsMCwwLDExNCwxMiwxLDAsMCwKKyAgICAxMTQsOSwxLDAsMCwxMTQsMTMsMSwwLDAsMTE0LDI3LDEsMCwwLDExNCwKKyAgICAyOCwxLDAsMCwxMTQsNDAsMSwwLDAsMTE0LDU1LDEsMCwwLDExNCw1OSwKKyAgICAxLDAsMCwxMTQsNjEsMSwwLDAsMTE0LDY0LDEsMCwwLDExNCw3NCwxLAorICAgIDAsMCwxMTQsNjUsMSwwLDAsMTE0LDY3LDEsMCwwLDExNCw2OCwxLDAsCisgICAgMCwxMTQsNjksMSwwLDAsMTE0LDc2LDEsMCwwLDExNCw3OCwxLDAsMCwKKyAgICAxMTQsMjM1LDAsMCwwLDExNCw4MiwxLDAsMCwxMTQsOTEsMSwwLDAsMTE0LAorICAgIDkyLDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCw4LDYwLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDYyLDgsMCwwLDAsMTE1LDE1MiwwLDAsMCw2LDE3LDYsMywxMiwKKyAgICAxMiwxMiw1LDEyLDUsMTIsNiwxMiwxMiwxMiwxMCwxMiwxMCwxMiw2LDEyLAorICAgIDcsMTUsMjIsMTIsOCwxNSw2LDYsMiw2LDMsMjIsNCwxOSw2OCwxOSwKKyAgICAyMywxMiwxOSwxMiwyMCwxMiwxMTMsMjIsMSwxOCwyLDYsMiw5LDIsOSwKKyAgICAxLDksMiwxNSwyNywxMiwyMywxMiwxOSwxMiwxMiwxOCw4LDE5LDE3LDIyLAorICAgIDQyLDE4LDksMTIsMTUsMTIsMTEsMTIsMTMsMTIsMTEsMTIsMTgsMTIsMTEsMTIsCisgICAgMTEsMTIsMTMsMjEsNTUsMjEsMTIsMTgsMTAsMTIsMTQsMTksNTIsMTksNDksMTksCisgICAgNTAsMTksNDEsMjIsMTEwLDE5LDI5LDI1LDQzLDI1LDIwLDYsMywxOSw0NSwxOSwKKyAgICA1NSwxOSwzMiwxOSw5MSwxOSwxMjcsMTksMTMsMTIsOSwxMiwyMSwxMiwxNyw2LAorICAgIDEsMTAsMiwxMiw0NiwxMiwxMywxOCwyNCwxMiwzMiwxMiwxNSwxMiwxMSwyNCwKKyAgICAzNiwxMiw3NiwKIH07CmRpZmYgLS1naXQgYS9QeXRob24vbWFyc2hhbC5jIGIvUHl0aG9uL21hcnNoYWwuYwppbmRleCBjYzE3MzI5Li5lMjExYTBmIDEwMDY0NAotLS0gYS9QeXRob24vbWFyc2hhbC5jCisrKyBiL1B5dGhvbi9tYXJzaGFsLmMKQEAgLTEsOCArMSwxMCBAQAogCiAvKiBXcml0ZSBQeXRob24gb2JqZWN0cyB0byBmaWxlcyBhbmQgcmVhZCB0aGVtIGJhY2suCi0gICBUaGlzIGlzIGludGVuZGVkIGZvciB3cml0aW5nIGFuZCByZWFkaW5nIGNvbXBpbGVkIFB5dGhvbiBjb2RlIG9ubHk7Ci0gICBhIHRydWUgcGVyc2lzdGVudCBzdG9yYWdlIGZhY2lsaXR5IHdvdWxkIGJlIG11Y2ggaGFyZGVyLCBzaW5jZQotICAgaXQgd291bGQgaGF2ZSB0byB0YWtlIGNpcmN1bGFyIGxpbmtzIGFuZCBzaGFyaW5nIGludG8gYWNjb3VudC4gKi8KKyAgIFRoaXMgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB3cml0aW5nIGFuZCByZWFkaW5nIGNvbXBpbGVkIFB5dGhvbiBjb2RlLAorICAgZXZlbiB0aG91Z2ggZGljdHMsIGxpc3RzLCBzZXRzIGFuZCBmcm96ZW5zZXRzLCBub3QgY29tbW9ubHkgc2VlbiBpbgorICAgY29kZSBvYmplY3RzLCBhcmUgc3VwcG9ydGVkLgorICAgVmVyc2lvbiAzIG9mIHRoaXMgcHJvdG9jb2wgcHJvcGVybHkgc3VwcG9ydHMgY2lyY3VsYXIgbGlua3MKKyAgIGFuZCBzaGFyaW5nLiAqLwogCiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KIApAQCAtMzEsMTYgKzMzLDE0IEBACiAjZGVmaW5lIFRZUEVfU1RPUElURVIgICAgICAgICAgICdTJwogI2RlZmluZSBUWVBFX0VMTElQU0lTICAgICAgICAgICAnLicKICNkZWZpbmUgVFlQRV9JTlQgICAgICAgICAgICAgICAgJ2knCi0vKiBUWVBFX0lOVDY0IGlzIGRlcHJlY2F0ZWQuIEl0IGlzIG5vdAotICAgZ2VuZXJhdGVkIGFueW1vcmUsIGFuZCBzdXBwb3J0IGZvciByZWFkaW5nIGl0Ci0gICB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNC4gKi8KLSNkZWZpbmUgVFlQRV9JTlQ2NCAgICAgICAgICAgICAgJ0knCiAjZGVmaW5lIFRZUEVfRkxPQVQgICAgICAgICAgICAgICdmJwogI2RlZmluZSBUWVBFX0JJTkFSWV9GTE9BVCAgICAgICAnZycKICNkZWZpbmUgVFlQRV9DT01QTEVYICAgICAgICAgICAgJ3gnCiAjZGVmaW5lIFRZUEVfQklOQVJZX0NPTVBMRVggICAgICd5JwogI2RlZmluZSBUWVBFX0xPTkcgICAgICAgICAgICAgICAnbCcKICNkZWZpbmUgVFlQRV9TVFJJTkcgICAgICAgICAgICAgJ3MnCisjZGVmaW5lIFRZUEVfSU5URVJORUQgICAgICAgICAgICd0JworI2RlZmluZSBUWVBFX1JFRiAgICAgICAgICAgICAgICAncicKICNkZWZpbmUgVFlQRV9UVVBMRSAgICAgICAgICAgICAgJygnCiAjZGVmaW5lIFRZUEVfTElTVCAgICAgICAgICAgICAgICdbJwogI2RlZmluZSBUWVBFX0RJQ1QgICAgICAgICAgICAgICAneycKQEAgLTQ5LDYgKzQ5LDEzIEBACiAjZGVmaW5lIFRZUEVfVU5LTk9XTiAgICAgICAgICAgICc/JwogI2RlZmluZSBUWVBFX1NFVCAgICAgICAgICAgICAgICAnPCcKICNkZWZpbmUgVFlQRV9GUk9aRU5TRVQgICAgICAgICAgJz4nCisjZGVmaW5lIEZMQUdfUkVGICAgICAgICAgICAgICAgICdceDgwJyAvKiB3aXRoIGEgdHlwZSwgYWRkIG9iaiB0byBpbmRleCAqLworCisjZGVmaW5lIFRZUEVfQVNDSUkgICAgICAgICAgICAgICdhJworI2RlZmluZSBUWVBFX0FTQ0lJX0lOVEVSTkVEICAgICAnQScKKyNkZWZpbmUgVFlQRV9TTUFMTF9UVVBMRSAgICAgICAgJyknCisjZGVmaW5lIFRZUEVfU0hPUlRfQVNDSUkgICAgICAgICd6JworI2RlZmluZSBUWVBFX1NIT1JUX0FTQ0lJX0lOVEVSTkVEICdaJwogCiAjZGVmaW5lIFdGRVJSX09LIDAKICNkZWZpbmUgV0ZFUlJfVU5NQVJTSEFMTEFCTEUgMQpAQCAtNjUsNiArNzIsOSBAQAogICAgIFB5T2JqZWN0ICpjdXJyZW50X2ZpbGVuYW1lOwogICAgIGNoYXIgKnB0cjsKICAgICBjaGFyICplbmQ7CisgICAgY2hhciAqYnVmOworICAgIFB5X3NzaXplX3QgYnVmX3NpemU7CisgICAgUHlPYmplY3QgKnJlZnM7IC8qIGRpY3Qgb24gbWFyc2hhbCwgbGlzdCBvbiB1bm1hcnNoYWwgKi8KICAgICBpbnQgdmVyc2lvbjsKIH0gV0ZJTEU7CiAKQEAgLTczLDcgKzgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd19tb3JlKGMsIHApCiAKIHN0YXRpYyB2b2lkCi13X21vcmUoaW50IGMsIFdGSUxFICpwKQord19tb3JlKGNoYXIgYywgV0ZJTEUgKnApCiB7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuZXdzaXplOwogICAgIGlmIChwLT5zdHIgPT0gTlVMTCkKQEAgLTkwLDcgKzEwMCw3IEBACiAgICAgICAgIHAtPnB0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopcC0+c3RyKSArIHNpemU7CiAgICAgICAgIHAtPmVuZCA9CiAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORygoUHlCeXRlc09iamVjdCAqKXAtPnN0cikgKyBuZXdzaXplOwotICAgICAgICAqcC0+cHRyKysgPSBQeV9TQUZFX0RPV05DQVNUKGMsIGludCwgY2hhcik7CisgICAgICAgICpwLT5wdHIrKyA9IGM7CiAgICAgfQogfQogCkBAIC0xNDYsNiArMTU2LDEzIEBACiAgICAgICAgIHdfc3RyaW5nKHMsIG4sIHApOwogfQogCitzdGF0aWMgdm9pZAord19zaG9ydF9wc3RyaW5nKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbiwgV0ZJTEUgKnApCit7CisgICAgd19ieXRlKFB5X1NBRkVfRE9XTkNBU1QobiwgUHlfc3NpemVfdCwgdW5zaWduZWQgY2hhciksIHApOworICAgIHdfc3RyaW5nKHMsIG4sIHApOworfQorCiAvKiBXZSBhc3N1bWUgdGhhdCBQeXRob24gaW50cyBhcmUgc3RvcmVkIGludGVybmFsbHkgaW4gYmFzZSBzb21lIHBvd2VyIG9mCiAgICAyKioxNTsgZm9yIHRoZSBzYWtlIG9mIHBvcnRhYmlsaXR5IHdlJ2xsIGFsd2F5cyByZWFkIGFuZCB3cml0ZSB0aGVtIGluIGJhc2UKICAgIGV4YWN0bHkgMioqMTUuICovCkBAIC0xNTgsMTMgKzE3NSwxNyBAQAogI2VuZGlmCiAjZGVmaW5lIFB5TG9uZ19NQVJTSEFMX1JBVElPIChQeUxvbmdfU0hJRlQgLyBQeUxvbmdfTUFSU0hBTF9TSElGVCkKIAorI2RlZmluZSBXX1RZUEUodCwgcCkgZG8geyBcCisgICAgd19ieXRlKCh0KSB8IGZsYWcsIChwKSk7IFwKK30gd2hpbGUoMCkKKwogc3RhdGljIHZvaWQKLXdfUHlMb25nKGNvbnN0IFB5TG9uZ09iamVjdCAqb2IsIFdGSUxFICpwKQord19QeUxvbmcoY29uc3QgUHlMb25nT2JqZWN0ICpvYiwgY2hhciBmbGFnLCBXRklMRSAqcCkKIHsKICAgICBQeV9zc2l6ZV90IGksIGosIG4sIGw7CiAgICAgZGlnaXQgZDsKIAotICAgIHdfYnl0ZShUWVBFX0xPTkcsIHApOworICAgIFdfVFlQRShUWVBFX0xPTkcsIHApOwogICAgIGlmIChQeV9TSVpFKG9iKSA9PSAwKSB7CiAgICAgICAgIHdfbG9uZygobG9uZykwLCBwKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjAxLDEwICsyMjIsNjQgQEAKICAgICB9IHdoaWxlIChkICE9IDApOwogfQogCitzdGF0aWMgaW50Cit3X3JlZihQeU9iamVjdCAqdiwgY2hhciAqZmxhZywgV0ZJTEUgKnApCit7CisgICAgUHlPYmplY3QgKmlkOworICAgIFB5T2JqZWN0ICppZHg7CisKKyAgICBpZiAocC0+dmVyc2lvbiA8IDMgfHwgcC0+cmVmcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsgLyogbm90IHdyaXRpbmcgb2JqZWN0IHJlZmVyZW5jZXMgKi8KKworICAgIC8qIGlmIGl0IGhhcyBvbmx5IG9uZSByZWZlcmVuY2UsIGl0IGRlZmluaXRlbHkgaXNuJ3Qgc2hhcmVkICovCisgICAgaWYgKFB5X1JFRkNOVCh2KSA9PSAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlkID0gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkKil2KTsKKyAgICBpZiAoaWQgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnI7CisgICAgaWR4ID0gUHlEaWN0X0dldEl0ZW0ocC0+cmVmcywgaWQpOworICAgIGlmIChpZHggIT0gTlVMTCkgeworICAgICAgICAvKiB3cml0ZSB0aGUgcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBzdHJlYW0gKi8KKyAgICAgICAgbG9uZyB3ID0gUHlMb25nX0FzTG9uZyhpZHgpOworICAgICAgICBQeV9ERUNSRUYoaWQpOworICAgICAgICBpZiAodyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgfQorICAgICAgICAvKiB3ZSBkb24ndCBzdG9yZSAibG9uZyIgaW5kaWNlcyBpbiB0aGUgZGljdCAqLworICAgICAgICBhc3NlcnQoMCA8PSB3ICYmIHcgPD0gMHg3ZmZmZmZmZik7CisgICAgICAgIHdfYnl0ZShUWVBFX1JFRiwgcCk7CisgICAgICAgIHdfbG9uZyh3LCBwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG9rOworICAgICAgICBQeV9zc2l6ZV90IHMgPSBQeURpY3RfU2l6ZShwLT5yZWZzKTsKKyAgICAgICAgLyogd2UgZG9uJ3Qgc3VwcG9ydCBsb25nIGluZGljZXMgKi8KKyAgICAgICAgaWYgKHMgPj0gMHg3ZmZmZmZmZikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0b28gbWFueSBvYmplY3RzIik7CisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgfQorICAgICAgICBpZHggPSBQeUxvbmdfRnJvbVNzaXplX3Qocyk7CisgICAgICAgIG9rID0gaWR4ICYmIFB5RGljdF9TZXRJdGVtKHAtPnJlZnMsIGlkLCBpZHgpID09IDA7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIFB5X1hERUNSRUYoaWR4KTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAqZmxhZyB8PSBGTEFHX1JFRjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorZXJyOgorICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit3X2NvbXBsZXhfb2JqZWN0KFB5T2JqZWN0ICp2LCBjaGFyIGZsYWcsIFdGSUxFICpwKTsKKwogc3RhdGljIHZvaWQKIHdfb2JqZWN0KFB5T2JqZWN0ICp2LCBXRklMRSAqcCkKIHsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgY2hhciBmbGFnID0gJ1wwJzsKIAogICAgIHAtPmRlcHRoKys7CiAKQEAgLTIyOSwyNCArMzA0LDM1IEBACiAgICAgZWxzZSBpZiAodiA9PSBQeV9UcnVlKSB7CiAgICAgICAgIHdfYnl0ZShUWVBFX1RSVUUsIHApOwogICAgIH0KLSAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSkgeworICAgIGVsc2UgaWYgKCF3X3JlZih2LCAmZmxhZywgcCkpCisgICAgICAgIHdfY29tcGxleF9vYmplY3QodiwgZmxhZywgcCk7CisKKyAgICBwLT5kZXB0aC0tOworfQorCitzdGF0aWMgdm9pZAord19jb21wbGV4X29iamVjdChQeU9iamVjdCAqdiwgY2hhciBmbGFnLCBXRklMRSAqcCkKK3sKKyAgICBQeV9zc2l6ZV90IGksIG47CisKKyAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikpIHsKICAgICAgICAgbG9uZyB4ID0gUHlMb25nX0FzTG9uZyh2KTsKICAgICAgICAgaWYgKCh4ID09IC0xKSAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgUHlMb25nT2JqZWN0ICpvYiA9IChQeUxvbmdPYmplY3QgKil2OwogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIHdfUHlMb25nKG9iLCBwKTsKKyAgICAgICAgICAgIHdfUHlMb25nKG9iLCBmbGFnLCBwKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICNpZiBTSVpFT0ZfTE9ORyA+IDQKICAgICAgICAgICAgIGxvbmcgeSA9IFB5X0FSSVRITUVUSUNfUklHSFRfU0hJRlQobG9uZywgeCwgMzEpOwogICAgICAgICAgICAgaWYgKHkgJiYgeSAhPSAtMSkgewogICAgICAgICAgICAgICAgIC8qIFRvbyBsYXJnZSBmb3IgVFlQRV9JTlQgKi8KLSAgICAgICAgICAgICAgICB3X1B5TG9uZygoUHlMb25nT2JqZWN0Kil2LCBwKTsKKyAgICAgICAgICAgICAgICB3X1B5TG9uZygoUHlMb25nT2JqZWN0Kil2LCBmbGFnLCBwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdfYnl0ZShUWVBFX0lOVCwgcCk7CisgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfSU5ULCBwKTsKICAgICAgICAgICAgICAgICB3X2xvbmcoeCwgcCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI1OSw3ICszNDUsNyBAQAogICAgICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgd19ieXRlKFRZUEVfQklOQVJZX0ZMT0FULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0JJTkFSWV9GTE9BVCwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZygoY2hhciopYnVmLCA4LCBwKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTI3MCw3ICszNTYsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4gPSBzdHJsZW4oYnVmKTsKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX0ZMT0FULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0ZMT0FULCBwKTsKICAgICAgICAgICAgIHdfYnl0ZSgoaW50KW4sIHApOwogICAgICAgICAgICAgd19zdHJpbmcoYnVmLCBuLCBwKTsKICAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKQEAgLTI4NCw3ICszNzAsNyBAQAogICAgICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgd19ieXRlKFRZUEVfQklOQVJZX0NPTVBMRVgsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfQklOQVJZX0NPTVBMRVgsIHApOwogICAgICAgICAgICAgd19zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCk7CiAgICAgICAgICAgICBpZiAoX1B5RmxvYXRfUGFjazgoUHlDb21wbGV4X0ltYWdBc0RvdWJsZSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDEpIDwgMCkgewpAQCAtMjk1LDcgKzM4MSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFyICpidWY7Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9DT01QTEVYLCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0NPTVBMRVgsIHApOwogICAgICAgICAgICAgYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKFB5Q29tcGxleF9SZWFsQXNEb3VibGUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2cnLCAxNywgMCwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoIWJ1ZikgewpAQCAtMzE5LDMxICs0MDUsNjEgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgd19ieXRlKFRZUEVfU1RSSU5HLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfU1RSSU5HLCBwKTsKICAgICAgICAgd19wc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHYpLCBQeUJ5dGVzX0dFVF9TSVpFKHYpLCBwKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgUHlPYmplY3QgKnV0Zjg7Ci0gICAgICAgIHV0ZjggPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHYsICJ1dGY4IiwgInN1cnJvZ2F0ZXBhc3MiKTsKLSAgICAgICAgaWYgKHV0ZjggPT0gTlVMTCkgewotICAgICAgICAgICAgcC0+ZGVwdGgtLTsKLSAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChwLT52ZXJzaW9uID49IDQgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHYpKSB7CisgICAgICAgICAgICBpbnQgaXNfc2hvcnQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSA8IDI1NjsKKyAgICAgICAgICAgIGlmIChpc19zaG9ydCkgeworICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodikpCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX1NIT1JUX0FTQ0lJX0lOVEVSTkVELCBwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX1NIT1JUX0FTQ0lJLCBwKTsKKyAgICAgICAgICAgICAgICB3X3Nob3J0X3BzdHJpbmcoKGNoYXIgKikgUHlVbmljb2RlXzFCWVRFX0RBVEEodiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpLCBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodikpCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX0FTQ0lJX0lOVEVSTkVELCBwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX0FTQ0lJLCBwKTsKKyAgICAgICAgICAgICAgICB3X3BzdHJpbmcoKGNoYXIgKikgUHlVbmljb2RlXzFCWVRFX0RBVEEodiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpLCBwKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB3X2J5dGUoVFlQRV9VTklDT0RFLCBwKTsKLSAgICAgICAgd19wc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHV0ZjgpLCBQeUJ5dGVzX0dFVF9TSVpFKHV0ZjgpLCBwKTsKLSAgICAgICAgUHlfREVDUkVGKHV0ZjgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp1dGY4OworICAgICAgICAgICAgdXRmOCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodiwgInV0ZjgiLCAic3Vycm9nYXRlcGFzcyIpOworICAgICAgICAgICAgaWYgKHV0ZjggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHAtPmRlcHRoLS07CisgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocC0+dmVyc2lvbiA+PSAzICYmICBQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodikpCisgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfSU5URVJORUQsIHApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX1VOSUNPREUsIHApOworICAgICAgICAgICAgd19wc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHV0ZjgpLCBQeUJ5dGVzX0dFVF9TSVpFKHV0ZjgpLCBwKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1dGY4KTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgd19ieXRlKFRZUEVfVFVQTEUsIHApOwogICAgICAgICBuID0gUHlUdXBsZV9TaXplKHYpOwotICAgICAgICBXX1NJWkUobiwgcCk7CisgICAgICAgIGlmIChwLT52ZXJzaW9uID49IDQgJiYgbiA8IDI1NikgeworICAgICAgICAgICAgV19UWVBFKFRZUEVfU01BTExfVFVQTEUsIHApOworICAgICAgICAgICAgd19ieXRlKG4sIHApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgV19UWVBFKFRZUEVfVFVQTEUsIHApOworICAgICAgICAgICAgV19TSVpFKG4sIHApOworICAgICAgICB9CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIHdfb2JqZWN0KFB5VHVwbGVfR0VUX0lURU0odiwgaSksIHApOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHYpKSB7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0xJU1QsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9MSVNULCBwKTsKICAgICAgICAgbiA9IFB5TGlzdF9HRVRfU0laRSh2KTsKICAgICAgICAgV19TSVpFKG4sIHApOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0zNTMsNyArNDY5LDcgQEAKICAgICBlbHNlIGlmIChQeURpY3RfQ2hlY2tFeGFjdCh2KSkgewogICAgICAgICBQeV9zc2l6ZV90IHBvczsKICAgICAgICAgUHlPYmplY3QgKmtleSwgKnZhbHVlOwotICAgICAgICB3X2J5dGUoVFlQRV9ESUNULCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfRElDVCwgcCk7CiAgICAgICAgIC8qIFRoaXMgb25lIGlzIE5VTEwgb2JqZWN0IHRlcm1pbmF0ZWQhICovCiAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dCh2LCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7CkBAIC0zNjYsOSArNDgyLDkgQEAKICAgICAgICAgUHlPYmplY3QgKnZhbHVlLCAqaXQ7CiAKICAgICAgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlTZXRfVHlwZSkpCi0gICAgICAgICAgICB3X2J5dGUoVFlQRV9TRVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfU0VULCBwKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgd19ieXRlKFRZUEVfRlJPWkVOU0VULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0ZST1pFTlNFVCwgcCk7CiAgICAgICAgIG4gPSBQeU9iamVjdF9TaXplKHYpOwogICAgICAgICBpZiAobiA9PSAtMSkgewogICAgICAgICAgICAgcC0+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+PSAzKSB7CisgICAgICAgIGlmICgod2YucmVmcyA9IFB5RGljdF9OZXcoKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZQorICAgICAgICB3Zi5yZWZzID0gTlVMTDsKICAgICB3X29iamVjdCh4LCAmd2YpOworICAgIFB5X1hERUNSRUYod2YucmVmcyk7CiAgICAgaWYgKHdmLnN0ciAhPSBOVUxMKSB7CiAgICAgICAgIGNoYXIgKmJhc2UgPSBQeUJ5dGVzX0FTX1NUUklORygoUHlCeXRlc09iamVjdCAqKXdmLnN0cik7CiAgICAgICAgIGlmICh3Zi5wdHIgLSBiYXNlID4gUFlfU1NJWkVfVF9NQVgpIHsKQEAgLTEzMjAsNiArMTU5OSw4IEBACiAgICAgICogTWFrZSBhIGNhbGwgdG8gdGhlIHJlYWQgbWV0aG9kLCBidXQgcmVhZCB6ZXJvIGJ5dGVzLgogICAgICAqIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIG9iamVjdCBwYXNzZWQgaW4gYXQgbGVhc3QKICAgICAgKiBoYXMgYSByZWFkIG1ldGhvZCB3aGljaCByZXR1cm5zIGJ5dGVzLgorICAgICAqIFRoaXMgY2FuIGJlIHJlbW92ZWQgaWYgd2UgZ3VhcmFudGVlIGdvb2QgZXJyb3IgaGFuZGxpbmcKKyAgICAgKiBmb3Igcl9zdHJpbmcoKQogICAgICAqLwogICAgIGRhdGEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGYsICZQeUlkX3JlYWQsICJpIiwgMCk7CiAgICAgaWYgKGRhdGEgPT0gTlVMTCkKQEAgLTEzMzUsNyArMTYxNiwxNSBAQAogICAgICAgICByZi5mcCA9IE5VTEw7CiAgICAgICAgIHJmLnJlYWRhYmxlID0gZjsKICAgICAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7Ci0gICAgICAgIHJlc3VsdCA9IHJlYWRfb2JqZWN0KCZyZik7CisgICAgICAgIHJmLnB0ciA9IHJmLmVuZCA9IE5VTEw7CisgICAgICAgIHJmLmJ1ZiA9IE5VTEw7CisgICAgICAgIGlmICgocmYucmVmcyA9IFB5TGlzdF9OZXcoMCkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRfb2JqZWN0KCZyZik7CisgICAgICAgICAgICBQeV9ERUNSRUYocmYucmVmcyk7CisgICAgICAgICAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgICAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7CiAgICAgfQogICAgIFB5X0RFQ1JFRihkYXRhKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTM5Miw4ICsxNjgxLDExIEBACiAgICAgcmYucHRyID0gczsKICAgICByZi5lbmQgPSBzICsgbjsKICAgICByZi5kZXB0aCA9IDA7CisgICAgaWYgKChyZi5yZWZzID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwKTsKKyAgICBQeV9ERUNSRUYocmYucmVmcyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTQzMyw2ICsxNzI1LDcgQEAKIHZlcnNpb24gLS0gaW5kaWNhdGVzIHRoZSBmb3JtYXQgdGhhdCB0aGUgbW9kdWxlIHVzZXMuIFZlcnNpb24gMCBpcyB0aGVcblwKICAgICBoaXN0b3JpY2FsIGZvcm1hdCwgdmVyc2lvbiAxIHNoYXJlcyBpbnRlcm5lZCBzdHJpbmdzIGFuZCB2ZXJzaW9uIDJcblwKICAgICB1c2VzIGEgYmluYXJ5IGZvcm1hdCBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy5cblwKKyAgICBWZXJzaW9uIDMgc2hhcmVzIGNvbW1vbiBvYmplY3QgcmVmZXJlbmNlcyAoTmV3IGluIHZlcnNpb24gMy40KS5cblwKIFxuXAogRnVuY3Rpb25zOlxuXAogXG5cCmRpZmYgLS1naXQgYS9QeXRob24vbXlzdHJ0b3VsLmMgYi9QeXRob24vbXlzdHJ0b3VsLmMKaW5kZXggOGE1NGNiZi4uOTg0MjlkNCAxMDA2NDQKLS0tIGEvUHl0aG9uL215c3RydG91bC5jCisrKyBiL1B5dGhvbi9teXN0cnRvdWwuYwpAQCAtOTIsMTEgKzkyLDExIEBACiAqKiAgICAgICAgICAgICAgZXhjZXB0aW9ucyAtIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtLgogKi8KIHVuc2lnbmVkIGxvbmcKLVB5T1Nfc3RydG91bChyZWdpc3RlciBjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQorUHlPU19zdHJ0b3VsKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCiB7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOyAvKiByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uICovCi0gICAgcmVnaXN0ZXIgaW50IGM7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCi0gICAgcmVnaXN0ZXIgaW50IG92bGltaXQ7ICAgICAgIC8qIHJlcXVpcmVkIGRpZ2l0cyB0byBvdmVyZmxvdyAqLworICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsgLyogcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiAqLworICAgIGludCBjOyAgICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLworICAgIGludCBvdmxpbWl0OyAgICAgICAvKiByZXF1aXJlZCBkaWdpdHMgdG8gb3ZlcmZsb3cgKi8KIAogICAgIC8qIHNraXAgbGVhZGluZyB3aGl0ZSBzcGFjZSAqLwogICAgIHdoaWxlICgqc3RyICYmIFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKnN0cikpKQpAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMHggKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwbyAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gOCkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMGIgKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDIpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICAgICAgICAgIHdoaWxlIChQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpzdHIpKSkKICAgICAgICAgICAgICAgICAgICAgKytzdHI7CiAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAweCAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBvICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSA4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwYiAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgLyogY2F0Y2ggc2lsbHkgYmFzZXMgKi8KICAgICBpZiAoYmFzZSA8IDIgfHwgYmFzZSA+IDM2KSB7CiAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgICAgICBpZiAob3ZsaW1pdCA+IDApIC8qIG5vIG92ZXJmbG93IGNoZWNrIHJlcXVpcmVkICovCiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgYzsKICAgICAgICAgZWxzZSB7IC8qIHJlcXVpcmVzIG92ZXJmbG93IGNoZWNrICovCi0gICAgICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIHRlbXBfcmVzdWx0OworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0ZW1wX3Jlc3VsdDsKIAogICAgICAgICAgICAgaWYgKG92bGltaXQgPCAwKSAvKiBndWFyYW50ZWVkIG92ZXJmbG93ICovCiAgICAgICAgICAgICAgICAgZ290byBvdmVyZmxvd2VkOwpAQCAtMjM5LDcgKzIzOSw3IEBACiAKICAgICAvKiBzZXQgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgc2Nhbm5lZCAqLwogICAgIGlmIChwdHIpCi0gICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKIAogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgICAgICAvKiBzcG9vbCB0aHJvdWdoIHJlbWFpbmluZyBkaWdpdCBjaGFyYWN0ZXJzICovCiAgICAgICAgIHdoaWxlIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soKnN0cildIDwgYmFzZSkKICAgICAgICAgICAgICsrc3RyOwotICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgfQogICAgIGVycm5vID0gRVJBTkdFOwogICAgIHJldHVybiAodW5zaWduZWQgbG9uZyktMTsKQEAgLTI2MCw3ICsyNjAsNyBAQAogI2RlZmluZSBQWV9BQlNfTE9OR19NSU4gICAgICAgICAoMC0odW5zaWduZWQgbG9uZylMT05HX01JTikKIAogbG9uZwotUHlPU19zdHJ0b2woY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKK1B5T1Nfc3RydG9sKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCiB7CiAgICAgbG9uZyByZXN1bHQ7CiAgICAgdW5zaWduZWQgbG9uZyB1cmVzdWx0OwpkaWZmIC0tZ2l0IGEvUHl0aG9uL29wY29kZV90YXJnZXRzLmggYi9QeXRob24vb3Bjb2RlX3RhcmdldHMuaAppbmRleCAyZDZiY2RhLi5mOTBhMTdhIDEwMDY0NAotLS0gYS9QeXRob24vb3Bjb2RlX3RhcmdldHMuaAorKysgYi9QeXRob24vb3Bjb2RlX3RhcmdldHMuaApAQCAtNjgsNyArNjgsNyBAQAogICAgICYmVEFSR0VUX0JJTkFSWV9PUiwKICAgICAmJlRBUkdFVF9JTlBMQUNFX1BPV0VSLAogICAgICYmVEFSR0VUX0dFVF9JVEVSLAotICAgICYmVEFSR0VUX1NUT1JFX0xPQ0FMUywKKyAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJlRBUkdFVF9QUklOVF9FWFBSLAogICAgICYmVEFSR0VUX0xPQURfQlVJTERfQ0xBU1MsCiAgICAgJiZUQVJHRVRfWUlFTERfRlJPTSwKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICYmVEFSR0VUX0xJU1RfQVBQRU5ELAogICAgICYmVEFSR0VUX1NFVF9BREQsCiAgICAgJiZUQVJHRVRfTUFQX0FERCwKLSAgICAmJl91bmtub3duX29wY29kZSwKKyAgICAmJlRBUkdFVF9MT0FEX0NMQVNTREVSRUYsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCmRpZmYgLS1naXQgYS9QeXRob24vcGVlcGhvbGUuYyBiL1B5dGhvbi9wZWVwaG9sZS5jCmluZGV4IDVkNTM2NzcuLmE0OTc5MGEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9wZWVwaG9sZS5jCisrKyBiL1B5dGhvbi9wZWVwaG9sZS5jCkBAIC0zMjcsMzcgKzMyNyw2IEBACiAgICAgcmV0dXJuIGJsb2NrczsKIH0KIAotLyogSGVscGVyIHRvIHJlcGxhY2UgTE9BRF9OQU1FIE5vbmUvVHJ1ZS9GYWxzZSB3aXRoIExPQURfQ09OU1QKLSAgIFJldHVybnM6IDAgaWYgbm8gY2hhbmdlLCAxIGlmIGNoYW5nZSwgLTEgaWYgZXJyb3IgKi8KLXN0YXRpYyBpbnQKLWxvYWRfZ2xvYmFsKHVuc2lnbmVkIGNoYXIgKmNvZGVzdHIsIFB5X3NzaXplX3QgaSwgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvbnN0cykKLXsKLSAgICBQeV9zc2l6ZV90IGo7Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBpZiAobmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoc3RyY21wKG5hbWUsICJOb25lIikgPT0gMCkKLSAgICAgICAgb2JqID0gUHlfTm9uZTsKLSAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgIlRydWUiKSA9PSAwKQotICAgICAgICBvYmogPSBQeV9UcnVlOwotICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiRmFsc2UiKSA9PSAwKQotICAgICAgICBvYmogPSBQeV9GYWxzZTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotICAgIGZvciAoaiA9IDA7IGogPCBQeUxpc3RfR0VUX1NJWkUoY29uc3RzKTsgaisrKSB7Ci0gICAgICAgIGlmIChQeUxpc3RfR0VUX0lURU0oY29uc3RzLCBqKSA9PSBvYmopCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGogPT0gUHlMaXN0X0dFVF9TSVpFKGNvbnN0cykpIHsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY29uc3RzLCBvYmopIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgYXNzZXJ0KFB5TGlzdF9HRVRfSVRFTShjb25zdHMsIGopID09IG9iaik7Ci0gICAgY29kZXN0cltpXSA9IExPQURfQ09OU1Q7Ci0gICAgU0VUQVJHKGNvZGVzdHIsIGksIGopOwotICAgIHJldHVybiAxOwotfQotCiAvKiBQZXJmb3JtIGJhc2ljIHBlZXBob2xlIG9wdGltaXphdGlvbnMgdG8gY29tcG9uZW50cyBvZiBhIGNvZGUgb2JqZWN0LgogICAgVGhlIGNvbnN0cyBvYmplY3Qgc2hvdWxkIHN0aWxsIGJlIGluIGxpc3QgZm9ybSB0byBhbGxvdyBuZXcgY29uc3RhbnRzCiAgICB0byBiZSBhcHBlbmRlZC4KQEAgLTM5Miw3ICszNjEsNiBAQAogICAgIFB5X3NzaXplX3QgY29uc3Rfc3RhY2tfc2l6ZSA9IDA7CiAgICAgaW50IGluX2NvbnN0cyA9IDA7ICAvKiB3aGV0aGVyIHdlIGFyZSBpbiBhIExPQURfQ09OU1Qgc2VxdWVuY2UgKi8KICAgICB1bnNpZ25lZCBpbnQgKmJsb2NrcyA9IE5VTEw7Ci0gICAgY2hhciAqbmFtZTsKIAogICAgIC8qIEJhaWwgb3V0IGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgKi8KICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTQxMyw4ICszODEsMTAgQEAKIAogICAgIC8qIE1ha2UgYSBtb2RpZmlhYmxlIGNvcHkgb2YgdGhlIGNvZGUgc3RyaW5nICovCiAgICAgY29kZXN0ciA9ICh1bnNpZ25lZCBjaGFyICopUHlNZW1fTWFsbG9jKGNvZGVsZW4pOwotICAgIGlmIChjb2Rlc3RyID09IE5VTEwpCisgICAgaWYgKGNvZGVzdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGV4aXRFcnJvcjsKKyAgICB9CiAgICAgY29kZXN0ciA9ICh1bnNpZ25lZCBjaGFyICopbWVtY3B5KGNvZGVzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGNvZGUpLCBjb2RlbGVuKTsKIApAQCAtNDI4LDggKzM5OCwxMCBAQAogCiAgICAgLyogTWFwcGluZyB0byBuZXcganVtcCB0YXJnZXRzIGFmdGVyIE5PUHMgYXJlIHJlbW92ZWQgKi8KICAgICBhZGRybWFwID0gKGludCAqKVB5TWVtX01hbGxvYyhjb2RlbGVuICogc2l6ZW9mKGludCkpOwotICAgIGlmIChhZGRybWFwID09IE5VTEwpCisgICAgaWYgKGFkZHJtYXAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGV4aXRFcnJvcjsKKyAgICB9CiAKICAgICBibG9ja3MgPSBtYXJrYmxvY2tzKGNvZGVzdHIsIGNvZGVsZW4pOwogICAgIGlmIChibG9ja3MgPT0gTlVMTCkKQEAgLTQ3NSwyMCArNDQ3LDYgQEAKICAgICAgICAgICAgICAgICBjb2Rlc3RyW2krM10gPSBOT1A7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAvKiBSZXBsYWNlIExPQURfR0xPQkFML0xPQURfTkFNRSBOb25lL1RydWUvRmFsc2UKLSAgICAgICAgICAgICAgICAgICB3aXRoIExPQURfQ09OU1QgTm9uZS9UcnVlL0ZhbHNlICovCi0gICAgICAgICAgICBjYXNlIExPQURfTkFNRToKLSAgICAgICAgICAgIGNhc2UgTE9BRF9HTE9CQUw6Ci0gICAgICAgICAgICAgICAgaiA9IEdFVEFSRyhjb2Rlc3RyLCBpKTsKLSAgICAgICAgICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhQeVR1cGxlX0dFVF9JVEVNKG5hbWVzLCBqKSk7Ci0gICAgICAgICAgICAgICAgaCA9IGxvYWRfZ2xvYmFsKGNvZGVzdHIsIGksIG5hbWUsIGNvbnN0cyk7Ci0gICAgICAgICAgICAgICAgaWYgKGggPCAwKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXRFcnJvcjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChoID09IDApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIENPTlNUX1NUQUNLX1BVU0hfT1AoaSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgTE9BRF9DT05TVCB0cnVlY29uc3QKICAgICAgICAgICAgICAgICAgICBQT1BfSlVNUF9JRl9GQUxTRSB4eC4gVGhpcyBpbXByb3ZlcwogICAgICAgICAgICAgICAgICAgICJ3aGlsZSAxIiBwZXJmb3JtYW5jZS4gKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi9weWFyZW5hLmMgYi9QeXRob24vcHlhcmVuYS5jCmluZGV4IDAyYTMxZDguLjEwMzYwM2YgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weWFyZW5hLmMKKysrIGIvUHl0aG9uL3B5YXJlbmEuYwpAQCAtNzcsNyArNzcsNyBAQAogewogICAgIC8qIEFsbG9jYXRlIGhlYWRlciBhbmQgYmxvY2sgYXMgb25lIHVuaXQuCiAgICAgICAgYWJfbWVtIHBvaW50cyBqdXN0IHBhc3QgaGVhZGVyLiAqLwotICAgIGJsb2NrICpiID0gKGJsb2NrICopbWFsbG9jKHNpemVvZihibG9jaykgKyBzaXplKTsKKyAgICBibG9jayAqYiA9IChibG9jayAqKVB5TWVtX01hbGxvYyhzaXplb2YoYmxvY2spICsgc2l6ZSk7CiAgICAgaWYgKCFiKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBiLT5hYl9zaXplID0gc2l6ZTsKQEAgLTkyLDcgKzkyLDcgQEAKIGJsb2NrX2ZyZWUoYmxvY2sgKmIpIHsKICAgICB3aGlsZSAoYikgewogICAgICAgICBibG9jayAqbmV4dCA9IGItPmFiX25leHQ7Ci0gICAgICAgIGZyZWUoYik7CisgICAgICAgIFB5TWVtX0ZyZWUoYik7CiAgICAgICAgIGIgPSBuZXh0OwogICAgIH0KIH0KQEAgLTEyNywyMCArMTI3LDIwIEBACiBQeUFyZW5hICoKIFB5QXJlbmFfTmV3KCkKIHsKLSAgICBQeUFyZW5hKiBhcmVuYSA9IChQeUFyZW5hICopbWFsbG9jKHNpemVvZihQeUFyZW5hKSk7CisgICAgUHlBcmVuYSogYXJlbmEgPSAoUHlBcmVuYSAqKVB5TWVtX01hbGxvYyhzaXplb2YoUHlBcmVuYSkpOwogICAgIGlmICghYXJlbmEpCiAgICAgICAgIHJldHVybiAoUHlBcmVuYSopUHlFcnJfTm9NZW1vcnkoKTsKIAogICAgIGFyZW5hLT5hX2hlYWQgPSBibG9ja19uZXcoREVGQVVMVF9CTE9DS19TSVpFKTsKICAgICBhcmVuYS0+YV9jdXIgPSBhcmVuYS0+YV9oZWFkOwogICAgIGlmICghYXJlbmEtPmFfaGVhZCkgewotICAgICAgICBmcmVlKCh2b2lkICopYXJlbmEpOworICAgICAgICBQeU1lbV9GcmVlKCh2b2lkICopYXJlbmEpOwogICAgICAgICByZXR1cm4gKFB5QXJlbmEqKVB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQogICAgIGFyZW5hLT5hX29iamVjdHMgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmICghYXJlbmEtPmFfb2JqZWN0cykgewogICAgICAgICBibG9ja19mcmVlKGFyZW5hLT5hX2hlYWQpOwotICAgICAgICBmcmVlKCh2b2lkICopYXJlbmEpOworICAgICAgICBQeU1lbV9GcmVlKCh2b2lkICopYXJlbmEpOwogICAgICAgICByZXR1cm4gKFB5QXJlbmEqKVB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQogI2lmIGRlZmluZWQoUHlfREVCVUcpCkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAqLwogCiAgICAgUHlfREVDUkVGKGFyZW5hLT5hX29iamVjdHMpOwotICAgIGZyZWUoYXJlbmEpOworICAgIFB5TWVtX0ZyZWUoYXJlbmEpOwogfQogCiB2b2lkICoKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXN0YXRlLmMgYi9QeXRob24vcHlzdGF0ZS5jCmluZGV4IDc3MmFhNTMuLjZiZTcxZGUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXN0YXRlLmMKKysrIGIvUHl0aG9uL3B5c3RhdGUuYwpAQCAtNiwxMSArNiwxMSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENBVVRJT04KIAotQWx3YXlzIHVzZSBtYWxsb2MoKSBhbmQgZnJlZSgpIGRpcmVjdGx5IGluIHRoaXMgZmlsZS4gIEEgbnVtYmVyIG9mIHRoZXNlCi1mdW5jdGlvbnMgYXJlIGFkdmVydGlzZWQgYXMgc2FmZSB0byBjYWxsIHdoZW4gdGhlIEdJTCBpc24ndCBoZWxkLCBhbmQgaW4KLWEgZGVidWcgYnVpbGQgUHl0aG9uIHJlZGlyZWN0cyAoZS5nLikgUHlNZW1fTkVXIChldGMpIHRvIFB5dGhvbidzIGRlYnVnZ2luZwotb2JtYWxsb2MgZnVuY3Rpb25zLiAgVGhvc2UgYXJlbid0IHRocmVhZC1zYWZlICh0aGV5IHJlbHkgb24gdGhlIEdJTCB0byBhdm9pZAotdGhlIGV4cGVuc2Ugb2YgZG9pbmcgdGhlaXIgb3duIGxvY2tpbmcpLgorQWx3YXlzIHVzZSBQeU1lbV9SYXdNYWxsb2MoKSBhbmQgUHlNZW1fUmF3RnJlZSgpIGRpcmVjdGx5IGluIHRoaXMgZmlsZS4gIEEKK251bWJlciBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFkdmVydGlzZWQgYXMgc2FmZSB0byBjYWxsIHdoZW4gdGhlIEdJTCBpc24ndAoraGVsZCwgYW5kIGluIGEgZGVidWcgYnVpbGQgUHl0aG9uIHJlZGlyZWN0cyAoZS5nLikgUHlNZW1fTkVXIChldGMpIHRvIFB5dGhvbidzCitkZWJ1Z2dpbmcgb2JtYWxsb2MgZnVuY3Rpb25zLiAgVGhvc2UgYXJlbid0IHRocmVhZC1zYWZlICh0aGV5IHJlbHkgb24gdGhlIEdJTAordG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgZG9pbmcgdGhlaXIgb3duIGxvY2tpbmcpLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2lmZGVmIEhBVkVfRExPUEVOCkBAIC02MCw3ICs2MCw3IEBACiBQeUludGVycHJldGVyU3RhdGVfTmV3KHZvaWQpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSAoUHlJbnRlcnByZXRlclN0YXRlICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKFB5SW50ZXJwcmV0ZXJTdGF0ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNZW1fUmF3TWFsbG9jKHNpemVvZihQeUludGVycHJldGVyU3RhdGUpKTsKIAogICAgIGlmIChpbnRlcnAgIT0gTlVMTCkgewogICAgICAgICBIRUFEX0lOSVQoKTsKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeUludGVycHJldGVyU3RhdGVfRGVsZXRlOiByZW1haW5pbmcgdGhyZWFkcyIpOwogICAgICpwID0gaW50ZXJwLT5uZXh0OwogICAgIEhFQURfVU5MT0NLKCk7Ci0gICAgZnJlZShpbnRlcnApOworICAgIFB5TWVtX1Jhd0ZyZWUoaW50ZXJwKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChpbnRlcnBfaGVhZCA9PSBOVUxMICYmIGhlYWRfbXV0ZXggIT0gTlVMTCkgewogICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soaGVhZF9tdXRleCk7CkBAIC0xNjgsNyArMTY4LDcgQEAKIHN0YXRpYyBQeVRocmVhZFN0YXRlICoKIG5ld190aHJlYWRzdGF0ZShQeUludGVycHJldGVyU3RhdGUgKmludGVycCwgaW50IGluaXQpCiB7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUgKiltYWxsb2Moc2l6ZW9mKFB5VGhyZWFkU3RhdGUpKTsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSAoUHlUaHJlYWRTdGF0ZSAqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2YoUHlUaHJlYWRTdGF0ZSkpOwogCiAgICAgaWYgKF9QeVRocmVhZFN0YXRlX0dldEZyYW1lID09IE5VTEwpCiAgICAgICAgIF9QeVRocmVhZFN0YXRlX0dldEZyYW1lID0gdGhyZWFkc3RhdGVfZ2V0ZnJhbWU7CkBAIC0xODIsNyArMTgyLDYgQEAKICAgICAgICAgdHN0YXRlLT5yZWN1cnNpb25fY3JpdGljYWwgPSAwOwogICAgICAgICB0c3RhdGUtPnRyYWNpbmcgPSAwOwogICAgICAgICB0c3RhdGUtPnVzZV90cmFjaW5nID0gMDsKLSAgICAgICAgdHN0YXRlLT50aWNrX2NvdW50ZXIgPSAwOwogICAgICAgICB0c3RhdGUtPmdpbHN0YXRlX2NvdW50ZXIgPSAwOwogICAgICAgICB0c3RhdGUtPmFzeW5jX2V4YyA9IE5VTEw7CiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTIwOCwxMiArMjA3LDE3IEBACiAKICAgICAgICAgdHN0YXRlLT50cmFzaF9kZWxldGVfbmVzdGluZyA9IDA7CiAgICAgICAgIHRzdGF0ZS0+dHJhc2hfZGVsZXRlX2xhdGVyID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGUgPSBOVUxMOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhID0gTlVMTDsKIAogICAgICAgICBpZiAoaW5pdCkKICAgICAgICAgICAgIF9QeVRocmVhZFN0YXRlX0luaXQodHN0YXRlKTsKIAogICAgICAgICBIRUFEX0xPQ0soKTsKKyAgICAgICAgdHN0YXRlLT5wcmV2ID0gTlVMTDsKICAgICAgICAgdHN0YXRlLT5uZXh0ID0gaW50ZXJwLT50c3RhdGVfaGVhZDsKKyAgICAgICAgaWYgKHRzdGF0ZS0+bmV4dCkKKyAgICAgICAgICAgIHRzdGF0ZS0+bmV4dC0+cHJldiA9IHRzdGF0ZTsKICAgICAgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IHRzdGF0ZTsKICAgICAgICAgSEVBRF9VTkxPQ0soKTsKICAgICB9CkBAIC0zMTcsNiArMzIxLDMxIEBACiAgICAgcmV0dXJuIFB5TGlzdF9TZXRJdGVtKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4LCBpbmRleCwgUHlfTm9uZSk7CiB9CiAKKy8qIHVzZWQgYnkgaW1wb3J0LmM6UHlJbXBvcnRfQ2xlYW51cCAqLwordm9pZAorX1B5U3RhdGVfQ2xlYXJNb2R1bGVzKHZvaWQpCit7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICpzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKKyAgICBpZiAoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlMaXN0X0dFVF9TSVpFKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KTsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbSA9IFB5TGlzdF9HRVRfSVRFTShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCwgaSk7CisgICAgICAgICAgICBpZiAoUHlNb2R1bGVfQ2hlY2sobSkpIHsKKyAgICAgICAgICAgICAgICAvKiBjbGVhbnVwIHRoZSBzYXZlZCBjb3B5IG9mIG1vZHVsZSBkaWN0cyAqLworICAgICAgICAgICAgICAgIFB5TW9kdWxlRGVmICptZCA9IFB5TW9kdWxlX0dldERlZihtKTsKKyAgICAgICAgICAgICAgICBpZiAobWQpCisgICAgICAgICAgICAgICAgICAgIFB5X0NMRUFSKG1kLT5tX2Jhc2UubV9jb3B5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBTZXR0aW5nIG1vZHVsZXNfYnlfaW5kZXggdG8gTlVMTCBjb3VsZCBiZSBkYW5nZXJvdXMsIHNvIHdlCisgICAgICAgICAgIGNsZWFyIHRoZSBsaXN0IGluc3RlYWQuICovCisgICAgICAgIGlmIChQeUxpc3RfU2V0U2xpY2Uoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgUHlMaXN0X0dFVF9TSVpFKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCk7CisgICAgfQorfQorCiB2b2lkCiBQeVRocmVhZFN0YXRlX0NsZWFyKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIHsKQEAgLTM0OSwzNyArMzc4LDIzIEBACiB0c3RhdGVfZGVsZXRlX2NvbW1vbihQeVRocmVhZFN0YXRlICp0c3RhdGUpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqKnA7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqcHJldl9wID0gTlVMTDsKICAgICBpZiAodHN0YXRlID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBOVUxMIHRzdGF0ZSIpOwogICAgIGludGVycCA9IHRzdGF0ZS0+aW50ZXJwOwogICAgIGlmIChpbnRlcnAgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IE5VTEwgaW50ZXJwIik7CiAgICAgSEVBRF9MT0NLKCk7Ci0gICAgZm9yIChwID0gJmludGVycC0+dHN0YXRlX2hlYWQ7IDsgcCA9ICYoKnApLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqcCA9PSBOVUxMKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IGludmFsaWQgdHN0YXRlIik7Ci0gICAgICAgIGlmICgqcCA9PSB0c3RhdGUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLyogU2FuaXR5IGNoZWNrLiAgVGhlc2Ugc3RhdGVzIHNob3VsZCBuZXZlciBoYXBwZW4gYnV0IGlmCi0gICAgICAgICAqIHRoZXkgZG8gd2UgbXVzdCBhYm9ydC4gIE90aGVyd2lzZSB3ZSdsbCBlbmQgdXAgc3Bpbm5pbmcgaW4KLSAgICAgICAgICogaW4gYSB0aWdodCBsb29wIHdpdGggdGhlIGxvY2sgaGVsZC4gIEEgc2ltaWxhciBjaGVjayBpcyBkb25lCi0gICAgICAgICAqIGluIHRocmVhZC5jIGZpbmRfa2V5KCkuICAqLwotICAgICAgICBpZiAoKnAgPT0gcHJldl9wKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IHNtYWxsIGNpcmN1bGFyIGxpc3QoISkiCi0gICAgICAgICAgICAgICAgIiBhbmQgdHN0YXRlIG5vdCBmb3VuZC4iKTsKLSAgICAgICAgcHJldl9wID0gKnA7Ci0gICAgICAgIGlmICgoKnApLT5uZXh0ID09IGludGVycC0+dHN0YXRlX2hlYWQpCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKAotICAgICAgICAgICAgICAgICJQeVRocmVhZFN0YXRlX0RlbGV0ZTogY2lyY3VsYXIgbGlzdCghKSBhbmQiCi0gICAgICAgICAgICAgICAgIiB0c3RhdGUgbm90IGZvdW5kLiIpOwotICAgIH0KLSAgICAqcCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5wcmV2KQorICAgICAgICB0c3RhdGUtPnByZXYtPm5leHQgPSB0c3RhdGUtPm5leHQ7CisgICAgZWxzZQorICAgICAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPm5leHQpCisgICAgICAgIHRzdGF0ZS0+bmV4dC0+cHJldiA9IHRzdGF0ZS0+cHJldjsKICAgICBIRUFEX1VOTE9DSygpOwotICAgIGZyZWUodHN0YXRlKTsKKyAgICBpZiAodHN0YXRlLT5vbl9kZWxldGUgIT0gTlVMTCkgeworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZSh0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhKTsKKyAgICB9CisgICAgUHlNZW1fUmF3RnJlZSh0c3RhdGUpOwogfQogCiAKQEAgLTQxNCw2ICs0MjksNDMgQEAKICNlbmRpZiAvKiBXSVRIX1RIUkVBRCAqLwogCiAKKy8qCisgKiBEZWxldGUgYWxsIHRocmVhZCBzdGF0ZXMgZXhjZXB0IHRoZSBvbmUgcGFzc2VkIGFzIGFyZ3VtZW50LgorICogTm90ZSB0aGF0LCBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdGhyZWFkIHN0YXRlLCBpdCAqbXVzdCogYmUgdGhlIG9uZQorICogcGFzc2VkIGFzIGFyZ3VtZW50LiAgQWxzbywgdGhpcyB3b24ndCB0b3VjaCBhbnkgb3RoZXIgaW50ZXJwcmV0ZXJzCisgKiB0aGFuIHRoZSBjdXJyZW50IG9uZSwgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGljaCB0aHJlYWQgc3RhdGUgc2hvdWxkCisgKiBiZSBrZXB0IGluIHRob3NlIG90aGVyIGludGVycHJldGVyZXMuCisgKi8KK3ZvaWQKK19QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdChQeVRocmVhZFN0YXRlICp0c3RhdGUpCit7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSB0c3RhdGUtPmludGVycDsKKyAgICBQeVRocmVhZFN0YXRlICpwLCAqbmV4dCwgKmdhcmJhZ2U7CisgICAgSEVBRF9MT0NLKCk7CisgICAgLyogUmVtb3ZlIGFsbCB0aHJlYWQgc3RhdGVzLCBleGNlcHQgdHN0YXRlLCBmcm9tIHRoZSBsaW5rZWQgbGlzdCBvZgorICAgICAgIHRocmVhZCBzdGF0ZXMuICBUaGlzIHdpbGwgYWxsb3cgY2FsbGluZyBQeVRocmVhZFN0YXRlX0NsZWFyKCkKKyAgICAgICB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suICovCisgICAgZ2FyYmFnZSA9IGludGVycC0+dHN0YXRlX2hlYWQ7CisgICAgaWYgKGdhcmJhZ2UgPT0gdHN0YXRlKQorICAgICAgICBnYXJiYWdlID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPnByZXYpCisgICAgICAgIHRzdGF0ZS0+cHJldi0+bmV4dCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5uZXh0KQorICAgICAgICB0c3RhdGUtPm5leHQtPnByZXYgPSB0c3RhdGUtPnByZXY7CisgICAgdHN0YXRlLT5wcmV2ID0gdHN0YXRlLT5uZXh0ID0gTlVMTDsKKyAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gdHN0YXRlOworICAgIEhFQURfVU5MT0NLKCk7CisgICAgLyogQ2xlYXIgYW5kIGRlYWxsb2NhdGUgYWxsIHN0YWxlIHRocmVhZCBzdGF0ZXMuICBFdmVuIGlmIHRoaXMKKyAgICAgICBleGVjdXRlcyBQeXRob24gY29kZSwgd2Ugc2hvdWxkIGJlIHNhZmUgc2luY2UgaXQgZXhlY3V0ZXMKKyAgICAgICBpbiB0aGUgY3VycmVudCB0aHJlYWQsIG5vdCBvbmUgb2YgdGhlIHN0YWxlIHRocmVhZHMuICovCisgICAgZm9yIChwID0gZ2FyYmFnZTsgcDsgcCA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHAtPm5leHQ7CisgICAgICAgIFB5VGhyZWFkU3RhdGVfQ2xlYXIocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CisgICAgfQorfQorCisKIFB5VGhyZWFkU3RhdGUgKgogUHlUaHJlYWRTdGF0ZV9HZXQodm9pZCkKIHsKQEAgLTY5Nyw2ICs3NDksMTUgQEAKICAgICByZXR1cm4gKFB5VGhyZWFkU3RhdGUgKilQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpOwogfQogCitpbnQKK1B5R0lMU3RhdGVfQ2hlY2sodm9pZCkKK3sKKyAgICAvKiBjYW4ndCB1c2UgUHlUaHJlYWRTdGF0ZV9HZXQoKSBzaW5jZSBpdCB3aWxsIGFzc2VydCB0aGF0IGl0IGhhcyB0aGUgR0lMICovCisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAorICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CisgICAgcmV0dXJuIHRzdGF0ZSAmJiAodHN0YXRlID09IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCkpOworfQorCiBQeUdJTFN0YXRlX1NUQVRFCiBQeUdJTFN0YXRlX0Vuc3VyZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5c3RydG9kLmMgYi9QeXRob24vcHlzdHJ0b2QuYwppbmRleCA0YWI4ZjA4Li5iOGRkOTE5IDEwMDY0NAotLS0gYS9QeXRob24vcHlzdHJ0b2QuYworKysgYi9QeXRob24vcHlzdHJ0b2QuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiBfUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKIHsKICAgICBjaGFyICpmYWlsX3BvczsKLSAgICBkb3VibGUgdmFsID0gLTEuMDsKKyAgICBkb3VibGUgdmFsOwogICAgIHN0cnVjdCBsY29udiAqbG9jYWxlX2RhdGE7CiAgICAgY29uc3QgY2hhciAqZGVjaW1hbF9wb2ludDsKICAgICBzaXplX3QgZGVjaW1hbF9wb2ludF9sZW47CkBAIC05MjMsNyArOTIzLDcgQEAKIAogc3RhdGljIGNoYXIgKgogZm9ybWF0X2Zsb2F0X3Nob3J0KGRvdWJsZSBkLCBjaGFyIGZvcm1hdF9jb2RlLAotICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBQeV9zc2l6ZV90IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgaW50IHByZWNpc2lvbiwKICAgICAgICAgICAgICAgICAgICBpbnQgYWx3YXlzX2FkZF9zaWduLCBpbnQgYWRkX2RvdF8wX2lmX2ludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgaW50IHVzZV9hbHRfZm9ybWF0dGluZywgY2hhciAqKmZsb2F0X3N0cmluZ3MsIGludCAqdHlwZSkKIHsKQEAgLTEwNTksNyArMTA1OSw3IEBACiAgICAgLyogaWYgdXNpbmcgYW4gZXhwb25lbnQsIHJlc2V0IGRlY2ltYWwgcG9pbnQgcG9zaXRpb24gdG8gMSBhbmQgYWRqdXN0CiAgICAgICAgZXhwb25lbnQgYWNjb3JkaW5nbHkuKi8KICAgICBpZiAodXNlX2V4cCkgewotICAgICAgICBleHAgPSBkZWNwdCAtIDE7CisgICAgICAgIGV4cCA9IChpbnQpZGVjcHQgLSAxOwogICAgICAgICBkZWNwdCA9IDE7CiAgICAgfQogICAgIC8qIGVuc3VyZSB2ZGlnaXRzX3N0YXJ0IDwgZGVjcHQgPD0gdmRpZ2l0c19lbmQsIG9yIHZkaWdpdHNfc3RhcnQgPApkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5dGhvbnJ1bi5jIGIvUHl0aG9uL3B5dGhvbnJ1bi5jCmluZGV4IDgzMmRmNTMuLjE1YTQ4ZjkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXRob25ydW4uYworKysgYi9QeXRob24vcHl0aG9ucnVuLmMKQEAgLTM1LDEyICszNSwzMCBAQAogI2RlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCiAjZW5kaWYKIAorI2lmZGVmIFB5X1JFRl9ERUJVRworc3RhdGljCit2b2lkIF9wcmludF90b3RhbF9yZWZzKHZvaWQpIHsKKyAgICBQeU9iamVjdCAqeG9wdGlvbnMsICprZXksICp2YWx1ZTsKKyAgICB4b3B0aW9ucyA9IFB5U3lzX0dldFhPcHRpb25zKCk7CisgICAgaWYgKHhvcHRpb25zID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKyAgICBrZXkgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygic2hvd3JlZmNvdW50Iik7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbSh4b3B0aW9ucywga2V5KTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICBpZiAodmFsdWUgPT0gUHlfVHJ1ZSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIlslIiBQWV9GT1JNQVRfU0laRV9UICJkIHJlZnMsICIKKyAgICAgICAgICAgICAgICAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBibG9ja3NdXG4iLAorICAgICAgICAgICAgICAgIF9QeV9HZXRSZWZUb3RhbCgpLCBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKCkpOworfQorI2VuZGlmCisKICNpZm5kZWYgUHlfUkVGX0RFQlVHCiAjZGVmaW5lIFBSSU5UX1RPVEFMX1JFRlMoKQogI2Vsc2UgLyogUHlfUkVGX0RFQlVHICovCi0jZGVmaW5lIFBSSU5UX1RPVEFMX1JFRlMoKSBmcHJpbnRmKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIlslIiBQWV9GT1JNQVRfU0laRV9UICJkIHJlZnNdXG4iLCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgX1B5X0dldFJlZlRvdGFsKCkpCisjZGVmaW5lIFBSSU5UX1RPVEFMX1JFRlMoKSBfcHJpbnRfdG90YWxfcmVmcygpCiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC02OCw2ICs4Niw3IEBACiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl90aHJlYWRfc2h1dGRvd24odm9pZCk7CiBzdGF0aWMgdm9pZCBjYWxsX2xsX2V4aXRmdW5jcyh2b2lkKTsKIGV4dGVybiBpbnQgX1B5VW5pY29kZV9Jbml0KHZvaWQpOworZXh0ZXJuIGludCBfUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX1B5VW5pY29kZV9GaW5pKHZvaWQpOwogZXh0ZXJuIGludCBfUHlMb25nX0luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBQeUxvbmdfRmluaSh2b2lkKTsKQEAgLTkzLDYgKzExMiw3IEBACiBpbnQgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSA9IDA7IC8qIGZvciAtcyBhbmQgc2l0ZS5weSAqLwogaW50IFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWcgPSAwOyAvKiBVbmJ1ZmZlcmVkIGJpbmFyeSBzdGR7aW4sb3V0LGVycn0gKi8KIGludCBQeV9IYXNoUmFuZG9taXphdGlvbkZsYWcgPSAwOyAvKiBmb3IgLVIgYW5kIFBZVEhPTkhBU0hTRUVEICovCitpbnQgUHlfSXNvbGF0ZWRGbGFnID0gMDsgLyogZm9yIC1JLCBpc29sYXRlIGZyb20gdXNlcidzIGVudiAqLwogCiBQeVRocmVhZFN0YXRlICpfUHlfRmluYWxpemluZyA9IE5VTEw7CiAKQEAgLTExOCw2ICsxMzgsNDUgQEAKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7CiB9CiAKKy8qIEhlbHBlciB0byBhbGxvdyBhbiBlbWJlZGRpbmcgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlIG5vcm1hbAorICogbWVjaGFuaXNtIHRoYXQgYXR0ZW1wdHMgdG8gZmlndXJlIG91dCBhbiBhcHByb3ByaWF0ZSBJTyBlbmNvZGluZworICovCisKK3N0YXRpYyBjaGFyICpfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzID0gTlVMTDsKKworaW50CitQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgaWYgKFB5X0lzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICAvKiBUaGlzIGlzIHRvbyBsYXRlIHRvIGhhdmUgYW55IGVmZmVjdCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIENhbid0IGNhbGwgUHlFcnJfTm9NZW1vcnkoKSBvbiBlcnJvcnMsIGFzIFB5dGhvbiBoYXNuJ3QgYmVlbgorICAgICAqIGluaXRpYWxpc2VkIHlldC4KKyAgICAgKgorICAgICAqIEhvd2V2ZXIsIHRoZSByYXcgbWVtb3J5IGFsbG9jYXRvcnMgYXJlIGluaXRpYWxpc2VkIGFwcHJvcHJpYXRlbHkKKyAgICAgKiBhcyBDIHN0YXRpYyB2YXJpYWJsZXMsIHNvIF9QeU1lbV9SYXdTdHJkdXAgaXMgT0sgZXZlbiB0aG91Z2gKKyAgICAgKiBQeV9Jbml0aWFsaXplIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuCisgICAgICovCisgICAgaWYgKGVuY29kaW5nKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nID0gX1B5TWVtX1Jhd1N0cmR1cChlbmNvZGluZyk7CisgICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IF9QeU1lbV9SYXdTdHJkdXAoZXJyb3JzKTsKKyAgICAgICAgaWYgKCFfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZykgeworICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCiAvKiBHbG9iYWwgaW5pdGlhbGl6YXRpb25zLiAgQ2FuIGJlIHVuZG9uZSBieSBQeV9GaW5hbGl6ZSgpLiAgRG9uJ3QKICAgIGNhbGwgdGhpcyB0d2ljZSB3aXRob3V0IGFuIGludGVydmVuaW5nIFB5X0ZpbmFsaXplKCkgY2FsbC4gIFdoZW4KICAgIGluaXRpYWxpemF0aW9ucyBmYWlsLCBhIGZhdGFsIGVycm9yIGlzIGlzc3VlZCBhbmQgdGhlIGZ1bmN0aW9uIGRvZXMKQEAgLTE2MCw3ICsyMTksNyBAQAogICAgIG5hbWVfdXRmOCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobmFtZSk7CiAgICAgaWYgKG5hbWVfdXRmOCA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIG5hbWVfc3RyID0gc3RyZHVwKG5hbWVfdXRmOCk7CisgICAgbmFtZV9zdHIgPSBfUHlNZW1fUmF3U3RyZHVwKG5hbWVfdXRmOCk7CiAgICAgUHlfREVDUkVGKG5hbWUpOwogICAgIGlmIChuYW1lX3N0ciA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0zMTMsNyArMzcyLDggQEAKICAgICBpZiAoIVB5Qnl0ZUFycmF5X0luaXQoKSkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdCBieXRlYXJyYXkiKTsKIAotICAgIF9QeUZsb2F0X0luaXQoKTsKKyAgICBpZiAoIV9QeUZsb2F0X0luaXQoKSkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdCBmbG9hdCIpOwogCiAgICAgaW50ZXJwLT5tb2R1bGVzID0gUHlEaWN0X05ldygpOwogICAgIGlmIChpbnRlcnAtPm1vZHVsZXMgPT0gTlVMTCkKQEAgLTMyMiw2ICszODIsOCBAQAogICAgIC8qIEluaXQgVW5pY29kZSBpbXBsZW1lbnRhdGlvbjsgcmVsaWVzIG9uIHRoZSBjb2RlYyByZWdpc3RyeSAqLwogICAgIGlmIChfUHlVbmljb2RlX0luaXQoKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgdW5pY29kZSIpOworICAgIGlmIChfUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0KCkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHN0cnVjdHNlcSIpOwogCiAgICAgYmltb2QgPSBfUHlCdWlsdGluX0luaXQoKTsKICAgICBpZiAoYmltb2QgPT0gTlVMTCkKQEAgLTUzMCwxMCArNTkyLDYgQEAKICAgICB3aGlsZSAoUHlHQ19Db2xsZWN0KCkgPiAwKQogICAgICAgICAvKiBub3RoaW5nICovOwogI2VuZGlmCi0gICAgLyogV2UgcnVuIHRoaXMgd2hpbGUgbW9zdCBpbnRlcnByZXRlciBzdGF0ZSBpcyBzdGlsbCBhbGl2ZSwgc28gdGhhdAotICAgICAgIGRlYnVnIGluZm9ybWF0aW9uIGNhbiBiZSBwcmludGVkIG91dCAqLwotICAgIF9QeUdDX0ZpbmkoKTsKLQogICAgIC8qIERlc3Ryb3kgYWxsIG1vZHVsZXMgKi8KICAgICBQeUltcG9ydF9DbGVhbnVwKCk7CiAKQEAgLTU5NiwxMSArNjU0LDYgQEAKIAogICAgIF9QeUV4Y19GaW5pKCk7CiAKLSAgICAvKiBDbGVhbnVwIGF1dG8tdGhyZWFkLXN0YXRlICovCi0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICBfUHlHSUxTdGF0ZV9GaW5pKCk7Ci0jZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KLQogICAgIC8qIFN1bmRyeSBmaW5hbGl6ZXJzICovCiAgICAgUHlNZXRob2RfRmluaSgpOwogICAgIFB5RnJhbWVfRmluaSgpOwpAQCAtNjE0LDE3ICs2NjcsMTUgQEAKICAgICBQeUZsb2F0X0ZpbmkoKTsKICAgICBQeURpY3RfRmluaSgpOwogICAgIFB5U2xpY2VfRmluaSgpOworICAgIF9QeUdDX0ZpbmkoKTsKKyAgICBfUHlSYW5kb21fRmluaSgpOwogCiAgICAgLyogQ2xlYW51cCBVbmljb2RlIGltcGxlbWVudGF0aW9uICovCiAgICAgX1B5VW5pY29kZV9GaW5pKCk7CiAKLSAgICAvKiBEZWxldGUgY3VycmVudCB0aHJlYWQuIEFmdGVyIHRoaXMsIG1hbnkgQyBBUEkgY2FsbHMgYmVjb21lIGNyYXNoeS4gKi8KLSAgICBQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCk7Ci0gICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOwotCiAgICAgLyogcmVzZXQgZmlsZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZyAqLwogICAgIGlmICghUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyAmJiBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKSB7Ci0gICAgICAgIGZyZWUoKGNoYXIqKVB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpOworICAgICAgICBQeU1lbV9SYXdGcmVlKChjaGFyKilQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKTsKICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9IE5VTEw7CiAgICAgfQogCkBAIC02MzYsNiArNjg3LDE1IEBACiAKICAgICBQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzKCZfUHlQYXJzZXJfR3JhbW1hcik7CiAKKyAgICAvKiBDbGVhbnVwIGF1dG8tdGhyZWFkLXN0YXRlICovCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBfUHlHSUxTdGF0ZV9GaW5pKCk7CisjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KKworICAgIC8qIERlbGV0ZSBjdXJyZW50IHRocmVhZC4gQWZ0ZXIgdGhpcywgbWFueSBDIEFQSSBjYWxscyBiZWNvbWUgY3Jhc2h5LiAqLworICAgIFB5VGhyZWFkU3RhdGVfU3dhcChOVUxMKTsKKyAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlKGludGVycCk7CisKICNpZmRlZiBQeV9UUkFDRV9SRUZTCiAgICAgLyogRGlzcGxheSBhZGRyZXNzZXMgKCYgcmVmY250cykgb2YgYWxsIG9iamVjdHMgc3RpbGwgYWxpdmUuCiAgICAgICogQW4gYWRkcmVzcyBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSByZXByIG9mIHRoZSBvYmplY3QsIHByaW50ZWQKQEAgLTc3Myw2ICs4MzMsOSBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogdGhyZWFkIGlzIG5vdCBjdXJyZW50Iik7CiAgICAgaWYgKHRzdGF0ZS0+ZnJhbWUgIT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IHRocmVhZCBzdGlsbCBoYXMgYSBmcmFtZSIpOworCisgICAgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKCk7CisKICAgICBpZiAodHN0YXRlICE9IGludGVycC0+dHN0YXRlX2hlYWQgfHwgdHN0YXRlLT5uZXh0ICE9IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiBub3QgdGhlIGxhc3QgdGhyZWFkIik7CiAKQEAgLTgwMiw3ICs4NjUsNyBAQAogfQogCiBzdGF0aWMgd2NoYXJfdCAqZGVmYXVsdF9ob21lID0gTlVMTDsKLXN0YXRpYyB3Y2hhcl90IGVudl9ob21lW1BBVEhfTUFYKzFdOworc3RhdGljIHdjaGFyX3QgZW52X2hvbWVbTUFYUEFUSExFTisxXTsKIAogdm9pZAogUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtODMxLDcgKzg5NCw3IEBACiBzdGF0aWMgdm9pZAogaW5pdG1haW4oUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOworICAgIFB5T2JqZWN0ICptLCAqZCwgKmxvYWRlcjsKICAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGNyZWF0ZSBfX21haW5fXyBtb2R1bGUiKTsKQEAgLTg1Miw3ICs5MTUsOCBAQAogICAgICAqIGJlIHNldCBpZiBfX21haW5fXyBnZXRzIGZ1cnRoZXIgaW5pdGlhbGl6ZWQgbGF0ZXIgaW4gdGhlIHN0YXJ0dXAKICAgICAgKiBwcm9jZXNzLgogICAgICAqLwotICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpID09IE5VTEwpIHsKKyAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpOworICAgIGlmIChsb2FkZXIgPT0gTlVMTCB8fCBsb2FkZXIgPT0gUHlfTm9uZSkgewogICAgICAgICBQeU9iamVjdCAqbG9hZGVyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1aWx0aW5JbXBvcnRlciIpOwogICAgICAgICBpZiAobG9hZGVyID09IE5VTEwpIHsKQEAgLTkwMiw2ICs5NjYsNyBAQAogICAgIFB5T2JqZWN0ICptOwogICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInNpdGUiKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGltcG9ydCB0aGUgc2l0ZSBtb2R1bGVcbiIpOwogICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9GaW5hbGl6ZSgpOwogICAgICAgICBleGl0KDEpOwpAQCAtMTAzNCw3ICsxMDk5LDcgQEAKICAgICBQeU9iamVjdCAqc3RkID0gTlVMTDsKICAgICBpbnQgc3RhdHVzID0gMCwgZmQ7CiAgICAgUHlPYmplY3QgKiBlbmNvZGluZ19hdHRyOwotICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTCwgKmVycm9yczsKKyAgICBjaGFyICpweXRob25pb2VuY29kaW5nID0gTlVMTCwgKmVuY29kaW5nLCAqZXJyb3JzOwogCiAgICAgLyogSGFjayB0byBhdm9pZCBhIG5hc3R5IHJlY3Vyc2lvbiBpc3N1ZSB3aGVuIFB5dGhvbiBpcyBpbnZva2VkCiAgICAgICAgaW4gdmVyYm9zZSBtb2RlOiBwcmUtaW1wb3J0IHRoZSBMYXRpbi0xIGFuZCBVVEYtOCBjb2RlY3MgKi8KQEAgLTEwNjYsMTQgKzExMzEsMjggQEAKICAgICB9CiAgICAgUHlfREVDUkVGKHdyYXBwZXIpOwogCi0gICAgZW5jb2RpbmcgPSBQeV9HRVRFTlYoIlBZVEhPTklPRU5DT0RJTkciKTsKLSAgICBlcnJvcnMgPSBOVUxMOwotICAgIGlmIChlbmNvZGluZykgewotICAgICAgICBlbmNvZGluZyA9IHN0cmR1cChlbmNvZGluZyk7Ci0gICAgICAgIGVycm9ycyA9IHN0cmNocihlbmNvZGluZywgJzonKTsKLSAgICAgICAgaWYgKGVycm9ycykgewotICAgICAgICAgICAgKmVycm9ycyA9ICdcMCc7Ci0gICAgICAgICAgICBlcnJvcnMrKzsKKyAgICBlbmNvZGluZyA9IF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nOworICAgIGVycm9ycyA9IF9QeV9TdGFuZGFyZFN0cmVhbUVycm9yczsKKyAgICBpZiAoIWVuY29kaW5nIHx8ICFlcnJvcnMpIHsKKyAgICAgICAgcHl0aG9uaW9lbmNvZGluZyA9IFB5X0dFVEVOVigiUFlUSE9OSU9FTkNPRElORyIpOworICAgICAgICBpZiAocHl0aG9uaW9lbmNvZGluZykgeworICAgICAgICAgICAgY2hhciAqZXJyOworICAgICAgICAgICAgcHl0aG9uaW9lbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAocHl0aG9uaW9lbmNvZGluZyk7CisgICAgICAgICAgICBpZiAocHl0aG9uaW9lbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJyID0gc3RyY2hyKHB5dGhvbmlvZW5jb2RpbmcsICc6Jyk7CisgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgKmVyciA9ICdcMCc7CisgICAgICAgICAgICAgICAgZXJyKys7CisgICAgICAgICAgICAgICAgaWYgKCplcnIgJiYgIWVycm9ycykgeworICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCpweXRob25pb2VuY29kaW5nICYmICFlbmNvZGluZykgeworICAgICAgICAgICAgICAgIGVuY29kaW5nID0gcHl0aG9uaW9lbmNvZGluZzsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMTEyOCwxOCArMTIwNywyNCBAQAogICAgICAgIHdoZW4gaW1wb3J0LmMgdHJpZXMgdG8gd3JpdGUgdG8gc3RkZXJyIGluIHZlcmJvc2UgbW9kZS4gKi8KICAgICBlbmNvZGluZ19hdHRyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzdGQsICJlbmNvZGluZyIpOwogICAgIGlmIChlbmNvZGluZ19hdHRyICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgY2hhciAqIGVuY29kaW5nOwotICAgICAgICBlbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7Ci0gICAgICAgIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cChlbmNvZGluZyk7CisgICAgICAgIGNvbnN0IGNoYXIgKiBzdGRfZW5jb2Rpbmc7CisgICAgICAgIHN0ZF9lbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7CisgICAgICAgIGlmIChzdGRfZW5jb2RpbmcgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvZGVjX2luZm8gPSBfUHlDb2RlY19Mb29rdXAoc3RkX2VuY29kaW5nKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYoY29kZWNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nX2F0dHIpOwogICAgIH0KICAgICBQeUVycl9DbGVhcigpOyAgLyogTm90IGEgZmF0YWwgZXJyb3IgaWYgY29kZWMgaXNuJ3QgYXZhaWxhYmxlICovCiAKLSAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkZXJyIiwgc3RkKTsKKyAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGVycl9fIiwgc3RkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHN0ZCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChQeVN5c19TZXRPYmplY3QoInN0ZGVyciIsIHN0ZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdGQpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KICAgICBQeV9ERUNSRUYoc3RkKTsKICNlbmRpZgogCkBAIC0xMTQ4LDggKzEyMzMsMTYgQEAKICAgICAgICAgc3RhdHVzID0gLTE7CiAgICAgfQogCi0gICAgaWYgKGVuY29kaW5nKQotICAgICAgICBmcmVlKGVuY29kaW5nKTsKKyAgICAvKiBXZSB3b24ndCBuZWVkIHRoZW0gYW55bW9yZS4gKi8KKyAgICBpZiAoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyk7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nID0gTlVMTDsKKyAgICB9CisgICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycykgeworICAgICAgICBQeU1lbV9SYXdGcmVlKF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyk7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IE5VTEw7CisgICAgfQorICAgIFB5TWVtX0ZyZWUocHl0aG9uaW9lbmNvZGluZyk7CiAgICAgUHlfWERFQ1JFRihiaW1vZCk7CiAgICAgUHlfWERFQ1JFRihpb21vZCk7CiAgICAgcmV0dXJuIHN0YXR1czsKQEAgLTEzNTYsOCArMTQ0OSw4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLWludAotc3RhdGljIHNldF9tYWluX2xvYWRlcihQeU9iamVjdCAqZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmxvYWRlcl9uYW1lKQorc3RhdGljIGludAorc2V0X21haW5fbG9hZGVyKFB5T2JqZWN0ICpkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbG9hZGVyX25hbWUpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOwpAQCAtMTQyNCw3ICsxNTE3LDcgQEAKICAgICAgICAgLyogVHJ5IHRvIHJ1biBhIHB5YyBmaWxlLiBGaXJzdCwgcmUtb3BlbiBpbiBiaW5hcnkgKi8KICAgICAgICAgaWYgKGNsb3NlaXQpCiAgICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICBpZiAoKHB5Y19mcCA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKSkgPT0gTlVMTCkgeworICAgICAgICBpZiAoKHB5Y19mcCA9IF9QeV9mb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpIHsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicHl0aG9uOiBDYW4ndCByZW9wZW4gLnB5YyBmaWxlXG4iKTsKICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQpAQCAtMjAzMSw4ICsyMTI0LDggQEAKIH0KIAogUHlPYmplY3QgKgotUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQorUHlfQ29tcGlsZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzdHIsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCiB7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBtb2RfdHkgbW9kOwpAQCAtMjA0MCw3ICsyMTMzLDcgQEAKICAgICBpZiAoYXJlbmEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjA1MCwxMSArMjE0MywyNCBAQAogICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBjbyA9IFB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLCBmbGFncywgb3B0aW1pemUsIGFyZW5hKTsKKyAgICBjbyA9IFB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIG9wdGltaXplLCBhcmVuYSk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopY287CiB9CiAKK1B5T2JqZWN0ICoKK1B5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lLCAqY287CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGNvID0gUHlfQ29tcGlsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIG9wdGltaXplKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBjbzsKK30KKwogLyogRm9yIHVzZSBpbiBQeV9MSU1JVEVEX0FQSSAqLwogI3VuZGVmIFB5X0NvbXBpbGVTdHJpbmcKIFB5T2JqZWN0ICoKQEAgLTIwNjQsNDYgKzIxNzAsNjIgQEAKIH0KIAogc3RydWN0IHN5bXRhYmxlICoKLVB5X1N5bXRhYmxlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCkKK1B5X1N5bXRhYmxlU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIgKnN0ciwgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQpCiB7CiAgICAgc3RydWN0IHN5bXRhYmxlICpzdDsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5Q29tcGlsZXJGbGFncyBmbGFnczsKLSAgICBQeUFyZW5hICphcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgUHlBcmVuYSAqYXJlbmE7CisKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CiAgICAgaWYgKGFyZW5hID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZmxhZ3MuY2ZfZmxhZ3MgPSAwOwotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmcoc3RyLCBmaWxlbmFtZSwgc3RhcnQsICZmbGFncywgYXJlbmEpOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsICZmbGFncywgYXJlbmEpOwogICAgIGlmIChtb2QgPT0gTlVMTCkgewogICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc3QgPSBQeVN5bXRhYmxlX0J1aWxkKG1vZCwgZmlsZW5hbWUsIDApOworICAgIHN0ID0gUHlTeW10YWJsZV9CdWlsZE9iamVjdChtb2QsIGZpbGVuYW1lLCAwKTsKICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiBzdDsKIH0KIAorc3RydWN0IHN5bXRhYmxlICoKK1B5X1N5bXRhYmxlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIHN0cnVjdCBzeW10YWJsZSAqc3Q7CisKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3QgPSBQeV9TeW10YWJsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gc3Q7Cit9CisKIC8qIFByZWZlcnJlZCBhY2Nlc3MgdG8gcGFyc2VyIGlzIHRocm91Z2ggQVNULiAqLwogbW9kX3R5Ci1QeVBhcnNlcl9BU1RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQorUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUNvbXBpbGVyRmxhZ3MgbG9jYWxmbGFnczsKICAgICBwZXJyZGV0YWlsIGVycjsKICAgICBpbnQgaWZsYWdzID0gUEFSU0VSX0ZMQUdTKGZsYWdzKTsKIAotICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeChzLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwgc3RhcnQsICZlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZsYWdzKTsKKyAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QocywgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwgc3RhcnQsICZlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZmxhZ3MpOwogICAgIGlmIChmbGFncyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FsZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgICAgICBmbGFncyA9ICZsb2NhbGZsYWdzOwogICAgIH0KICAgICBpZiAobikgewogICAgICAgICBmbGFncy0+Y2ZfZmxhZ3MgfD0gaWZsYWdzICYgUHlDRl9NQVNLOwotICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZShuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3QobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CiAgICAgICAgIFB5Tm9kZV9GcmVlKG4pOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTIxMTUsMjYgKzIyMzcsNDAgQEAKIH0KIAogbW9kX3R5Ci1QeVBhcnNlcl9BU1RGcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGVuYywKLSAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgY2hhciAqcHMxLAotICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgKmVycmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK1B5UGFyc2VyX0FTVEZyb21TdHJpbmcoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBtb2RfdHkgbW9kOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBtb2Q7Cit9CisKK21vZF90eQorUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoRklMRSAqZnAsIFB5T2JqZWN0ICpmaWxlbmFtZSwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBjaGFyICpwczEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCAqZXJyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQogewogICAgIG1vZF90eSBtb2Q7CiAgICAgUHlDb21waWxlckZsYWdzIGxvY2FsZmxhZ3M7CiAgICAgcGVycmRldGFpbCBlcnI7CiAgICAgaW50IGlmbGFncyA9IFBBUlNFUl9GTEFHUyhmbGFncyk7CiAKLSAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChmcCwgZmlsZW5hbWUsIGVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9QeVBhcnNlcl9HcmFtbWFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgJmVyciwgJmlmbGFncyk7CisgICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgJmVyciwgJmlmbGFncyk7CiAgICAgaWYgKGZsYWdzID09IE5VTEwpIHsKICAgICAgICAgbG9jYWxmbGFncy5jZl9mbGFncyA9IDA7CiAgICAgICAgIGZsYWdzID0gJmxvY2FsZmxhZ3M7CiAgICAgfQogICAgIGlmIChuKSB7CiAgICAgICAgIGZsYWdzLT5jZl9mbGFncyB8PSBpZmxhZ3MgJiBQeUNGX01BU0s7Ci0gICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlKG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOworICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZU9iamVjdChuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKICAgICAgICAgUHlOb2RlX0ZyZWUobik7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjE0Nyw2ICsyMjgzLDIzIEBACiAgICAgcmV0dXJuIG1vZDsKIH0KIAorbW9kX3R5CitQeVBhcnNlcl9BU1RGcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBjb25zdCBjaGFyKiBlbmMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGNoYXIgKnBzMSwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMiwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50ICplcnJjb2RlLAorICAgICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgbW9kX3R5IG1vZDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KGZwLCBmaWxlbmFtZSwgZW5jLCBzdGFydCwgcHMxLCBwczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIGVycmNvZGUsIGFyZW5hKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBtb2Q7Cit9CisKIC8qIFNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIHBhcnNlZmlsZSAtLSByZXR1cm4gbm9kZSBvciBzZXQgZXhjZXB0aW9uICovCiAKIG5vZGUgKgpAQCAtMjQ3Myw2ICsyNjI2LDkgQEAKICAgICBQeU9TX3NldHNpZyhTSUdYRlNaLCBTSUdfSUdOKTsKICNlbmRpZgogICAgIFB5T1NfSW5pdEludGVycnVwdHMoKTsgLyogTWF5IGltcGx5IGluaXRzaWduYWwoKSAqLworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGltcG9ydCBzaWduYWwiKTsKKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvUHl0aG9uL3JhbmRvbS5jIGIvUHl0aG9uL3JhbmRvbS5jCmluZGV4IDMzN2JlODYuLjljOTM3MGMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9yYW5kb20uYworKysgYi9QeXRob24vcmFuZG9tLmMKQEAgLTEyLDEzICsxMiw2IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLXR5cGVkZWYgQk9PTCAoV0lOQVBJICpDUllQVEFDUVVJUkVDT05URVhUQSkoSENSWVBUUFJPViAqcGhQcm92LFwKLSAgICAgICAgICAgICAgTFBDU1RSIHBzekNvbnRhaW5lciwgTFBDU1RSIHBzelByb3ZpZGVyLCBEV09SRCBkd1Byb3ZUeXBlLFwKLSAgICAgICAgICAgICAgRFdPUkQgZHdGbGFncyApOwotdHlwZWRlZiBCT09MIChXSU5BUEkgKkNSWVBUR0VOUkFORE9NKShIQ1JZUFRQUk9WIGhQcm92LCBEV09SRCBkd0xlbixcCi0gICAgICAgICAgICAgIEJZVEUgKnBiQnVmZmVyICk7Ci0KLXN0YXRpYyBDUllQVEdFTlJBTkRPTSBwQ3J5cHRHZW5SYW5kb20gPSBOVUxMOwogLyogVGhpcyBoYW5kbGUgaXMgbmV2ZXIgZXhwbGljaXRseSByZWxlYXNlZC4gSW5zdGVhZCwgdGhlIG9wZXJhdGluZwogICAgc3lzdGVtIHdpbGwgcmVsZWFzZSBpdCB3aGVuIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuICovCiBzdGF0aWMgSENSWVBUUFJPViBoQ3J5cHRQcm92ID0gMDsKQEAgLTI2LDI5ICsxOSw5IEBACiBzdGF0aWMgaW50CiB3aW4zMl91cmFuZG9tX2luaXQoaW50IHJhaXNlKQogewotICAgIEhJTlNUQU5DRSBoQWR2QVBJMzIgPSBOVUxMOwotICAgIENSWVBUQUNRVUlSRUNPTlRFWFRBIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gTlVMTDsKLQotICAgIC8qIE9idGFpbiBoYW5kbGUgdG8gdGhlIERMTCBjb250YWluaW5nIENyeXB0b0FQSS4gVGhpcyBzaG91bGQgbm90IGZhaWwuICovCi0gICAgaEFkdkFQSTMyID0gR2V0TW9kdWxlSGFuZGxlKCJhZHZhcGkzMi5kbGwiKTsKLSAgICBpZihoQWR2QVBJMzIgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgIC8qIE9idGFpbiBwb2ludGVycyB0byB0aGUgQ3J5cHRvQVBJIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGZhaWwgb24gc29tZSBlYXJseQotICAgICAgIHZlcnNpb25zIG9mIFdpbjk1LiAqLwotICAgIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gKENSWVBUQUNRVUlSRUNPTlRFWFRBKUdldFByb2NBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhBZHZBUEkzMiwgIkNyeXB0QWNxdWlyZUNvbnRleHRBIik7Ci0gICAgaWYgKHBDcnlwdEFjcXVpcmVDb250ZXh0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICBwQ3J5cHRHZW5SYW5kb20gPSAoQ1JZUFRHRU5SQU5ET00pR2V0UHJvY0FkZHJlc3MoaEFkdkFQSTMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3J5cHRHZW5SYW5kb20iKTsKLSAgICBpZiAocENyeXB0R2VuUmFuZG9tID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAvKiBBY3F1aXJlIGNvbnRleHQgKi8KLSAgICBpZiAoISBwQ3J5cHRBY3F1aXJlQ29udGV4dCgmaENyeXB0UHJvdiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkKKyAgICBpZiAoIUNyeXB0QWNxdWlyZUNvbnRleHQoJmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1ZfUlNBX0ZVTEwsIENSWVBUX1ZFUklGWUNPTlRFWFQpKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgcmV0dXJuIDA7CkBAIC03Nyw3ICs1MCw3IEBACiAgICAgd2hpbGUgKHNpemUgPiAwKQogICAgIHsKICAgICAgICAgY2h1bmsgPSBzaXplID4gSU5UX01BWCA/IElOVF9NQVggOiBzaXplOwotICAgICAgICBpZiAoIXBDcnlwdEdlblJhbmRvbShoQ3J5cHRQcm92LCBjaHVuaywgYnVmZmVyKSkKKyAgICAgICAgaWYgKCFDcnlwdEdlblJhbmRvbShoQ3J5cHRQcm92LCBjaHVuaywgYnVmZmVyKSkKICAgICAgICAgewogICAgICAgICAgICAgLyogQ3J5cHRHZW5SYW5kb20oKSBmYWlsZWQgKi8KICAgICAgICAgICAgIGlmIChyYWlzZSkKQEAgLTExNyw2ICs5MCw3IEBACiAKIAogI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKQorc3RhdGljIGludCB1cmFuZG9tX2ZkID0gLTE7CiAKIC8qIFJlYWQgc2l6ZSBieXRlcyBmcm9tIC9kZXYvdXJhbmRvbSBpbnRvIGJ1ZmZlci4KICAgIENhbGwgUHlfRmF0YWxFcnJvcigpIG9uIGVycm9yLiAqLwpAQCAtMTI4LDcgKzEwMiw3IEBACiAKICAgICBhc3NlcnQgKDAgPCBzaXplKTsKIAotICAgIGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOworICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJGYWlsZWQgdG8gb3BlbiAvZGV2L3VyYW5kb20iKTsKIApAQCAtMTYwLDE4ICsxMzQsMzAgQEAKICAgICBpZiAoc2l6ZSA8PSAwKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChmZCA8IDApCi0gICAgewotICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOWElPIHx8Ci0gICAgICAgICAgICBlcnJubyA9PSBFTk9ERVYgfHwgZXJybm8gPT0gRUFDQ0VTKQotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9kZXYvdXJhbmRvbSAob3IgZXF1aXZhbGVudCkgbm90IGZvdW5kIik7CisgICAgaWYgKHVyYW5kb21fZmQgPj0gMCkKKyAgICAgICAgZmQgPSB1cmFuZG9tX2ZkOworICAgIGVsc2UgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTlhJTyB8fAorICAgICAgICAgICAgICAgIGVycm5vID09IEVOT0RFViB8fCBlcnJubyA9PSBFQUNDRVMpCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZGV2L3VyYW5kb20gKG9yIGVxdWl2YWxlbnQpIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXJhbmRvbV9mZCA+PSAwKSB7CisgICAgICAgICAgICAvKiB1cmFuZG9tX2ZkIHdhcyBpbml0aWFsaXplZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB3ZSB3ZXJlCisgICAgICAgICAgICAgICBub3QgaG9sZGluZyB0aGUgR0lMLCBrZWVwIGl0LiAqLworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgZmQgPSB1cmFuZG9tX2ZkOworICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgdXJhbmRvbV9mZCA9IGZkOwogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTE5NSwxMiArMTgxLDIwIEBACiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVhZCAlemkgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpOwotICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgY2xvc2UoZmQpOwogICAgIHJldHVybiAwOwogfQorCitzdGF0aWMgdm9pZAorZGV2X3VyYW5kb21fY2xvc2Uodm9pZCkKK3sKKyAgICBpZiAodXJhbmRvbV9mZCA+PSAwKSB7CisgICAgICAgIGNsb3NlKHVyYW5kb21fZmQpOworICAgICAgICB1cmFuZG9tX2ZkID0gLTE7CisgICAgfQorfQorCiAjZW5kaWYgLyogIWRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoX19WTVMpICovCiAKIC8qIEZpbGwgYnVmZmVyIHdpdGggcHNldWRvLXJhbmRvbSBieXRlcyBnZW5lcmF0ZWQgYnkgYSBsaW5lYXIgY29uZ3J1ZW50CkBAIC0yOTksMyArMjkzLDExIEBACiAjZW5kaWYKICAgICB9CiB9CisKK3ZvaWQKK19QeVJhbmRvbV9GaW5pKHZvaWQpCit7CisjaWYgIWRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoX19WTVMpCisgICAgZGV2X3VyYW5kb21fY2xvc2UoKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N0cmR1cC5jIGIvUHl0aG9uL3N0cmR1cC5jCmluZGV4IDIwMTg3ZTAuLjc2OWQzZGIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zdHJkdXAuYworKysgYi9QeXRob24vc3RyZHVwLmMKQEAgLTYsNyArNiw3IEBACiBzdHJkdXAoY29uc3QgY2hhciAqc3RyKQogewogCWlmIChzdHIgIT0gTlVMTCkgewotCQlyZWdpc3RlciBjaGFyICpjb3B5ID0gbWFsbG9jKHN0cmxlbihzdHIpICsgMSk7CisJCWNoYXIgKmNvcHkgPSBtYWxsb2Moc3RybGVuKHN0cikgKyAxKTsKIAkJaWYgKGNvcHkgIT0gTlVMTCkKIAkJCXJldHVybiBzdHJjcHkoY29weSwgc3RyKTsKIAl9CmRpZmYgLS1naXQgYS9QeXRob24vc3ltdGFibGUuYyBiL1B5dGhvbi9zeW10YWJsZS5jCmluZGV4IDFlMTNiNzkwLi5kYTE2NGFhIDEwMDY0NAotLS0gYS9QeXRob24vc3ltdGFibGUuYworKysgYi9QeXRob24vc3ltdGFibGUuYwpAQCAtMzcsMjQgKzM3LDE0IEBACiAgICAgc3RlLT5zdGVfdGFibGUgPSBzdDsKICAgICBzdGUtPnN0ZV9pZCA9IGs7IC8qIHN0ZSBvd25zIHJlZmVyZW5jZSB0byBrICovCiAKLSAgICBzdGUtPnN0ZV9uYW1lID0gbmFtZTsKICAgICBQeV9JTkNSRUYobmFtZSk7CisgICAgc3RlLT5zdGVfbmFtZSA9IG5hbWU7CiAKICAgICBzdGUtPnN0ZV9zeW1ib2xzID0gTlVMTDsKICAgICBzdGUtPnN0ZV92YXJuYW1lcyA9IE5VTEw7CiAgICAgc3RlLT5zdGVfY2hpbGRyZW4gPSBOVUxMOwogCi0gICAgc3RlLT5zdGVfc3ltYm9scyA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoc3RlLT5zdGVfc3ltYm9scyA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBzdGUtPnN0ZV92YXJuYW1lcyA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHN0ZS0+c3RlX3Zhcm5hbWVzID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIHN0ZS0+c3RlX2NoaWxkcmVuID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoc3RlLT5zdGVfY2hpbGRyZW4gPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOworICAgIHN0ZS0+c3RlX2RpcmVjdGl2ZXMgPSBOVUxMOwogCiAgICAgc3RlLT5zdGVfdHlwZSA9IGJsb2NrOwogICAgIHN0ZS0+c3RlX3Vub3B0aW1pemVkID0gMDsKQEAgLTc1LDYgKzY1LDE1IEBACiAgICAgc3RlLT5zdGVfY2hpbGRfZnJlZSA9IDA7CiAgICAgc3RlLT5zdGVfZ2VuZXJhdG9yID0gMDsKICAgICBzdGUtPnN0ZV9yZXR1cm5zX3ZhbHVlID0gMDsKKyAgICBzdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlID0gMDsKKworICAgIHN0ZS0+c3RlX3N5bWJvbHMgPSBQeURpY3RfTmV3KCk7CisgICAgc3RlLT5zdGVfdmFybmFtZXMgPSBQeUxpc3RfTmV3KDApOworICAgIHN0ZS0+c3RlX2NoaWxkcmVuID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoc3RlLT5zdGVfc3ltYm9scyA9PSBOVUxMCisgICAgICAgIHx8IHN0ZS0+c3RlX3Zhcm5hbWVzID09IE5VTEwKKyAgICAgICAgfHwgc3RlLT5zdGVfY2hpbGRyZW4gPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOwogCiAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHN0LT5zdF9ibG9ja3MsIHN0ZS0+c3RlX2lkLCAoUHlPYmplY3QgKilzdGUpIDwgMCkKICAgICAgICAgZ290byBmYWlsOwpAQCAtMTAyLDYgKzEwMSw3IEBACiAgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV9zeW1ib2xzKTsKICAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX3Zhcm5hbWVzKTsKICAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX2NoaWxkcmVuKTsKKyAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX2RpcmVjdGl2ZXMpOwogICAgIFB5T2JqZWN0X0RlbChzdGUpOwogfQogCkBAIC0xODgsNyArMTg4LDcgQEAKIAogc3RhdGljIGlkZW50aWZpZXIgdG9wID0gTlVMTCwgbGFtYmRhID0gTlVMTCwgZ2VuZXhwciA9IE5VTEwsCiAgICAgbGlzdGNvbXAgPSBOVUxMLCBzZXRjb21wID0gTlVMTCwgZGljdGNvbXAgPSBOVUxMLAotICAgIF9fY2xhc3NfXyA9IE5VTEwsIF9fbG9jYWxzX18gPSBOVUxMOworICAgIF9fY2xhc3NfXyA9IE5VTEw7CiAKICNkZWZpbmUgR0VUX0lERU5USUZJRVIoVkFSKSBcCiAgICAgKChWQVIpID8gKFZBUikgOiAoKFZBUikgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygjIFZBUikpKQpAQCAtMjMzLDcgKzIzMyw3IEBACiAjZGVmaW5lIENPTVBJTEVSX1NUQUNLX0ZSQU1FX1NDQUxFIDMKIAogc3RydWN0IHN5bXRhYmxlICoKLVB5U3ltdGFibGVfQnVpbGQobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSkKK1B5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpCiB7CiAgICAgc3RydWN0IHN5bXRhYmxlICpzdCA9IHN5bXRhYmxlX25ldygpOwogICAgIGFzZGxfc2VxICpzZXE7CkBAIC0yNDIsNyArMjQyLDEyIEBACiAgICAgaW50IHJlY3Vyc2lvbl9saW1pdCA9IFB5X0dldFJlY3Vyc2lvbkxpbWl0KCk7CiAKICAgICBpZiAoc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHN0OworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICBQeVN5bXRhYmxlX0ZyZWUoc3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKGZpbGVuYW1lKTsKICAgICBzdC0+c3RfZmlsZW5hbWUgPSBmaWxlbmFtZTsKICAgICBzdC0+c3RfZnV0dXJlID0gZnV0dXJlOwogCkBAIC0zMDYsOSArMzExLDIzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0cnVjdCBzeW10YWJsZSAqCitQeVN5bXRhYmxlX0J1aWxkKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBzdHJ1Y3Qgc3ltdGFibGUgKnN0OworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdCA9IFB5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kLCBmaWxlbmFtZSwgZnV0dXJlKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBzdDsKK30KKwogdm9pZAogUHlTeW10YWJsZV9GcmVlKHN0cnVjdCBzeW10YWJsZSAqc3QpCiB7CisgICAgUHlfWERFQ1JFRihzdC0+c3RfZmlsZW5hbWUpOwogICAgIFB5X1hERUNSRUYoc3QtPnN0X2Jsb2Nrcyk7CiAgICAgUHlfWERFQ1JFRihzdC0+c3Rfc3RhY2spOwogICAgIFB5TWVtX0ZyZWUoKHZvaWQgKilzdCk7CkBAIC0zNDYsNiArMzY1LDI0IEBACiAgICAgcmV0dXJuIChQeUxvbmdfQVNfTE9ORyh2KSA+PiBTQ09QRV9PRkZTRVQpICYgU0NPUEVfTUFTSzsKIH0KIAorc3RhdGljIGludAorZXJyb3JfYXRfZGlyZWN0aXZlKFB5U1RFbnRyeU9iamVjdCAqc3RlLCBQeU9iamVjdCAqbmFtZSkKK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlPYmplY3QgKmRhdGE7CisgICAgYXNzZXJ0KHN0ZS0+c3RlX2RpcmVjdGl2ZXMpOworICAgIGZvciAoaSA9IDA7IDsgaSsrKSB7CisgICAgICAgIGRhdGEgPSBQeUxpc3RfR0VUX0lURU0oc3RlLT5zdGVfZGlyZWN0aXZlcywgaSk7CisgICAgICAgIGFzc2VydChQeVR1cGxlX0NoZWNrRXhhY3QoZGF0YSkpOworICAgICAgICBpZiAoUHlUdXBsZV9HRVRfSVRFTShkYXRhLCAwKSA9PSBuYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcoUHlUdXBsZV9HRVRfSVRFTShkYXRhLCAyKSkpOworICAgIHJldHVybiAwOworfQorCiAKIC8qIEFuYWx5emUgcmF3IHN5bWJvbCBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgc2NvcGUgb2YgZWFjaCBuYW1lLgogCkBAIC00MjAsMTYgKzQ1NywxMyBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBwYXJhbWV0ZXIgYW5kIGdsb2JhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3RlLT5zdGVfdGFibGUtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGUtPnN0ZV9saW5lbm8sIHN0ZS0+c3RlX2NvbF9vZmZzZXQpOwotCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZmxhZ3MgJiBERUZfTk9OTE9DQUwpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSAnJVUnIGlzIG5vbmxvY2FsIGFuZCBnbG9iYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgU0VUX1NDT1BFKHNjb3BlcywgbmFtZSwgR0xPQkFMX0VYUExJQ0lUKTsKICAgICAgICAgaWYgKFB5U2V0X0FkZChnbG9iYWwsIG5hbWUpIDwgMCkKQEAgLTQ0MywxOSArNDc3LDE5IEBACiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBwYXJhbWV0ZXIgYW5kIG5vbmxvY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGlmICghYm91bmQpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibm9ubG9jYWwgZGVjbGFyYXRpb24gbm90IGFsbG93ZWQgYXQgbW9kdWxlIGxldmVsIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIVB5U2V0X0NvbnRhaW5zKGJvdW5kLCBuYW1lKSkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJubyBiaW5kaW5nIGZvciBub25sb2NhbCAnJVUnIGZvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgU0VUX1NDT1BFKHNjb3BlcywgbmFtZSwgRlJFRSk7CiAgICAgICAgIHN0ZS0+c3RlX2ZyZWUgPSAxOwpAQCAtNTAwLDEzICs1MzQsMTAgQEAKIAogICAgTm90ZSB0aGF0IHRoZSBjdXJyZW50IGJsb2NrJ3MgZnJlZSB2YXJpYWJsZXMgYXJlIGluY2x1ZGVkIGluIGZyZWUuCiAgICBUaGF0J3Mgc2FmZSBiZWNhdXNlIG5vIG5hbWUgY2FuIGJlIGZyZWUgYW5kIGxvY2FsIGluIHRoZSBzYW1lIHNjb3BlLgotCi0gICBUaGUgJ3Jlc3RyaWN0ZWQnIGFyZ3VtZW50IG1heSBiZSBzZXQgdG8gYSBzdHJpbmcgdG8gcmVzdHJpY3QgdGhlIGFuYWx5c2lzCi0gICB0byB0aGUgb25lIHZhcmlhYmxlIHdob3NlIG5hbWUgZXF1YWxzIHRoYXQgc3RyaW5nIChlLmcuICJfX2NsYXNzX18iKS4KICovCiAKIHN0YXRpYyBpbnQKLWFuYWx5emVfY2VsbHMoUHlPYmplY3QgKnNjb3BlcywgUHlPYmplY3QgKmZyZWUsIGNvbnN0IGNoYXIgKnJlc3RyaWN0ZWQpCithbmFseXplX2NlbGxzKFB5T2JqZWN0ICpzY29wZXMsIFB5T2JqZWN0ICpmcmVlKQogewogICAgIFB5T2JqZWN0ICpuYW1lLCAqdiwgKnZfY2VsbDsKICAgICBpbnQgc3VjY2VzcyA9IDA7CkBAIC01MjMsOSArNTU0LDYgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIVB5U2V0X0NvbnRhaW5zKGZyZWUsIG5hbWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChyZXN0cmljdGVkICE9IE5VTEwgJiYKLSAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsIHJlc3RyaWN0ZWQpKQotICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIC8qIFJlcGxhY2UgTE9DQUwgd2l0aCBDRUxMIGZvciB0aGlzIG5hbWUsIGFuZCByZW1vdmUKICAgICAgICAgICAgZnJvbSBmcmVlLiBJdCBpcyBzYWZlIHRvIHJlcGxhY2UgdGhlIHZhbHVlIG9mIG5hbWUKICAgICAgICAgICAgaW4gdGhlIGRpY3QsIGJlY2F1c2UgaXQgd2lsbCBub3QgY2F1c2UgYSByZXNpemUuCkBAIC01NDEsNiArNTY5LDIwIEBACiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKK3N0YXRpYyBpbnQKK2Ryb3BfY2xhc3NfZnJlZShQeVNURW50cnlPYmplY3QgKnN0ZSwgUHlPYmplY3QgKmZyZWUpCit7CisgICAgaW50IHJlczsKKyAgICBpZiAoIUdFVF9JREVOVElGSUVSKF9fY2xhc3NfXykpCisgICAgICAgIHJldHVybiAwOworICAgIHJlcyA9IFB5U2V0X0Rpc2NhcmQoZnJlZSwgX19jbGFzc19fKTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHJlcykKKyAgICAgICAgc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA9IDE7CisgICAgcmV0dXJuIDE7Cit9CisKIC8qIENoZWNrIGZvciBpbGxlZ2FsIHN0YXRlbWVudHMgaW4gdW5vcHRpbWl6ZWQgbmFtZXNwYWNlcyAqLwogc3RhdGljIGludAogY2hlY2tfdW5vcHRpbWl6ZWQoY29uc3QgUHlTVEVudHJ5T2JqZWN0KiBzdGUpIHsKQEAgLTU2NCw4ICs2MDYsOSBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwgc3RlLT5zdGVfb3B0X2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX29wdF9jb2xfb2Zmc2V0KTsKKyAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfb3B0X2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGUtPnN0ZV9vcHRfY29sX29mZnNldCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTc3MSw3ICs4MTQsNiBAQAogICAgICAgICAvKiBTcGVjaWFsLWNhc2UgX19jbGFzc19fICovCiAgICAgICAgIGlmICghR0VUX0lERU5USUZJRVIoX19jbGFzc19fKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGFzc2VydChQeVNldF9Db250YWlucyhsb2NhbCwgX19jbGFzc19fKSA9PSAxKTsKICAgICAgICAgaWYgKFB5U2V0X0FkZChuZXdib3VuZCwgX19jbGFzc19fKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTgwNCwxMSArODQ2LDkgQEAKICAgICBQeV9ERUNSRUYodGVtcCk7CiAKICAgICAvKiBDaGVjayBpZiBhbnkgbG9jYWwgdmFyaWFibGVzIG11c3QgYmUgY29udmVydGVkIHRvIGNlbGwgdmFyaWFibGVzICovCi0gICAgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gRnVuY3Rpb25CbG9jayAmJiAhYW5hbHl6ZV9jZWxscyhzY29wZXMsIG5ld2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICBpZiAoc3RlLT5zdGVfdHlwZSA9PSBGdW5jdGlvbkJsb2NrICYmICFhbmFseXplX2NlbGxzKHNjb3BlcywgbmV3ZnJlZSkpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZWxzZSBpZiAoc3RlLT5zdGVfdHlwZSA9PSBDbGFzc0Jsb2NrICYmICFhbmFseXplX2NlbGxzKHNjb3BlcywgbmV3ZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fY2xhc3NfXyIpKQorICAgIGVsc2UgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jayAmJiAhZHJvcF9jbGFzc19mcmVlKHN0ZSwgbmV3ZnJlZSkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgLyogUmVjb3JkcyB0aGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMgaW4gdGhlIHN5bWJvbCB0YWJsZSBlbnRyeSAqLwogICAgIGlmICghdXBkYXRlX3N5bWJvbHMoc3RlLT5zdGVfc3ltYm9scywgc2NvcGVzLCBib3VuZCwgbmV3ZnJlZSwKQEAgLTg5OSwxNSArOTM5LDIwIEBACiBzdGF0aWMgaW50CiBzeW10YWJsZV93YXJuKHN0cnVjdCBzeW10YWJsZSAqc3QsIGNoYXIgKm1zZywgaW50IGxpbmVubykKIHsKLSAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1zZywgc3QtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBOVUxMLCBOVUxMKSA8IDApICAgICB7CisgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtc2cpOworICAgIGlmIChtZXNzYWdlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoUHlFeGNfU3ludGF4V2FybmluZywgbWVzc2FnZSwgc3QtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBOVUxMLCBOVUxMKSA8IDApICAgICB7CisgICAgICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3ludGF4V2FybmluZykpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwgbXNnKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdC0+c3RfZmlsZW5hbWUsIHN0LT5zdF9jdXItPnN0ZV9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtOTkwLDkgKzEwMzUsOSBAQAogICAgICAgICBpZiAoKGZsYWcgJiBERUZfUEFSQU0pICYmICh2YWwgJiBERUZfUEFSQU0pKSB7CiAgICAgICAgICAgICAvKiBJcyBpdCBiZXR0ZXIgdG8gdXNlICdtYW5nbGVkJyBvciAnbmFtZScgaGVyZT8gKi8KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwgRFVQTElDQVRFX0FSR1VNRU5ULCBuYW1lKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdC0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICB2YWwgfD0gZmxhZzsKQEAgLTExMDIsNiArMTE0NywyNSBAQAogCiAKIHN0YXRpYyBpbnQKK3N5bXRhYmxlX3JlY29yZF9kaXJlY3RpdmUoc3RydWN0IHN5bXRhYmxlICpzdCwgaWRlbnRpZmllciBuYW1lLCBzdG10X3R5IHMpCit7CisgICAgUHlPYmplY3QgKmRhdGE7CisgICAgaW50IHJlczsKKyAgICBpZiAoIXN0LT5zdF9jdXItPnN0ZV9kaXJlY3RpdmVzKSB7CisgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9kaXJlY3RpdmVzID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgaWYgKCFzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBkYXRhID0gUHlfQnVpbGRWYWx1ZSgiKE9paSkiLCBuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmVzID0gUHlMaXN0X0FwcGVuZChzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcywgZGF0YSk7CisgICAgUHlfREVDUkVGKGRhdGEpOworICAgIHJldHVybiByZXMgPT0gMDsKK30KKworCitzdGF0aWMgaW50CiBzeW10YWJsZV92aXNpdF9zdG10KHN0cnVjdCBzeW10YWJsZSAqc3QsIHN0bXRfdHkgcykKIHsKICAgICBpZiAoKytzdC0+cmVjdXJzaW9uX2RlcHRoID4gc3QtPnJlY3Vyc2lvbl9saW1pdCkgewpAQCAtMTE0NiwxMyArMTIxMCw2IEBACiAgICAgICAgIGlmICghc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIHMtPnYuQ2xhc3NEZWYubmFtZSwgQ2xhc3NCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXMsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCkpCiAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKLSAgICAgICAgaWYgKCFHRVRfSURFTlRJRklFUihfX2NsYXNzX18pIHx8Ci0gICAgICAgICAgICAhc3ltdGFibGVfYWRkX2RlZihzdCwgX19jbGFzc19fLCBERUZfTE9DQUwpIHx8Ci0gICAgICAgICAgICAhR0VUX0lERU5USUZJRVIoX19sb2NhbHNfXykgfHwKLSAgICAgICAgICAgICFzeW10YWJsZV9hZGRfZGVmKHN0LCBfX2xvY2Fsc19fLCBERUZfUEFSQU0pKSB7Ci0gICAgICAgICAgICBzeW10YWJsZV9leGl0X2Jsb2NrKHN0LCBzKTsKLSAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOwotICAgICAgICB9CiAgICAgICAgIHRtcCA9IHN0LT5zdF9wcml2YXRlOwogICAgICAgICBzdC0+c3RfcHJpdmF0ZSA9IHMtPnYuQ2xhc3NEZWYubmFtZTsKICAgICAgICAgVklTSVRfU0VRKHN0LCBzdG10LCBzLT52LkNsYXNzRGVmLmJvZHkpOwpAQCAtMTI0MCwxNCArMTI5Nyw3IEBACiAgICAgICAgIGFzZGxfc2VxICpzZXEgPSBzLT52Lkdsb2JhbC5uYW1lczsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFzZGxfc2VxX0xFTihzZXEpOyBpKyspIHsKICAgICAgICAgICAgIGlkZW50aWZpZXIgbmFtZSA9IChpZGVudGlmaWVyKWFzZGxfc2VxX0dFVChzZXEsIGkpOwotICAgICAgICAgICAgbG9uZyBjdXI7Ci0gICAgICAgICAgICBpZiAoc3QtPnN0X2N1ci0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jayAmJgotICAgICAgICAgICAgICAgICFQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiX19jbGFzc19fIikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsICJjYW5ub3QgbWFrZSBfX2NsYXNzX18gZ2xvYmFsIik7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdC0+c3RfZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXIgPSBzeW10YWJsZV9sb29rdXAoc3QsIG5hbWUpOworICAgICAgICAgICAgbG9uZyBjdXIgPSBzeW10YWJsZV9sb29rdXAoc3QsIG5hbWUpOwogICAgICAgICAgICAgaWYgKGN1ciA8IDApCiAgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgICAgICBpZiAoY3VyICYgKERFRl9MT0NBTCB8IFVTRSkpIHsKQEAgLTEyNjgsNiArMTMxOCw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIG5hbWUsIERFRl9HTE9CQUwpKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOworICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0LCBuYW1lLCBzKSkKKyAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjk3LDYgKzEzNDksOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBuYW1lLCBERUZfTk9OTE9DQUwpKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOworICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0LCBuYW1lLCBzKSkKKyAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNDA3LDYgKzE0NjEsNyBAQAogICAgIGNhc2UgU3RyX2tpbmQ6CiAgICAgY2FzZSBCeXRlc19raW5kOgogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgogICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovCiAgICAgICAgIGJyZWFrOwogICAgIC8qIFRoZSBmb2xsb3dpbmcgZXhwcnMgY2FuIGJlIGFzc2lnbm1lbnQgdGFyZ2V0cy4gKi8KQEAgLTE0OTksMTAgKzE1NTQsMTAgQEAKIAogICAgIGlmIChhLT5hcmdzICYmICFzeW10YWJsZV92aXNpdF9hcmdhbm5vdGF0aW9ucyhzdCwgYS0+YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhLT52YXJhcmdhbm5vdGF0aW9uKQotICAgICAgICBWSVNJVChzdCwgZXhwciwgYS0+dmFyYXJnYW5ub3RhdGlvbik7Ci0gICAgaWYgKGEtPmt3YXJnYW5ub3RhdGlvbikKLSAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPmt3YXJnYW5ub3RhdGlvbik7CisgICAgaWYgKGEtPnZhcmFyZyAmJiBhLT52YXJhcmctPmFubm90YXRpb24pCisgICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT52YXJhcmctPmFubm90YXRpb24pOworICAgIGlmIChhLT5rd2FyZyAmJiBhLT5rd2FyZy0+YW5ub3RhdGlvbikKKyAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPmt3YXJnLT5hbm5vdGF0aW9uKTsKICAgICBpZiAoYS0+a3dvbmx5YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfYXJnYW5ub3RhdGlvbnMoc3QsIGEtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocy0+di5GdW5jdGlvbkRlZi5yZXR1cm5zKQpAQCAtMTUyMSwxMiArMTU3NiwxMiBAQAogICAgIGlmIChhLT5rd29ubHlhcmdzICYmICFzeW10YWJsZV92aXNpdF9wYXJhbXMoc3QsIGEtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoYS0+dmFyYXJnKSB7Ci0gICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgYS0+dmFyYXJnLCBERUZfUEFSQU0pKQorICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPnZhcmFyZy0+YXJnLCBERUZfUEFSQU0pKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV92YXJhcmdzID0gMTsKICAgICB9CiAgICAgaWYgKGEtPmt3YXJnKSB7Ci0gICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgYS0+a3dhcmcsIERFRl9QQVJBTSkpCisgICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgYS0+a3dhcmctPmFyZywgREVGX1BBUkFNKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdC0+c3RfY3VyLT5zdGVfdmFya2V5d29yZHMgPSAxOwogICAgIH0KQEAgLTE1ODcsNyArMTY0Miw3IEBACiAgICAgICAgICAgICBpbnQgbGluZW5vID0gc3QtPnN0X2N1ci0+c3RlX2xpbmVubzsKICAgICAgICAgICAgIGludCBjb2xfb2Zmc2V0ID0gc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQ7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsIElNUE9SVF9TVEFSX1dBUk5JTkcpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdC0+c3RfZmlsZW5hbWUsIGxpbmVubywgY29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdC0+c3RfZmlsZW5hbWUsIGxpbmVubywgY29sX29mZnNldCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcmVfbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N5c21vZHVsZS5jIGIvUHl0aG9uL3N5c21vZHVsZS5jCmluZGV4IDFhNDFkMmYuLjk3Y2UwNTkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zeXNtb2R1bGUuYworKysgYi9QeXRob24vc3lzbW9kdWxlLmMKQEAgLTMzMiwxMiArMzMyLDE2IEBACiBjYWxsX3RyYW1wb2xpbmUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCogY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqZnJhbWUsIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewotICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9OZXcoMyk7CisgICAgUHlPYmplY3QgKmFyZ3M7CiAgICAgUHlPYmplY3QgKndoYXRzdHI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAorICAgIGFyZ3MgPSBQeVR1cGxlX05ldygzKTsKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZnJhbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQeV9JTkNSRUYoZnJhbWUpOwogICAgIHdoYXRzdHIgPSB3aGF0c3RyaW5nc1t3aGF0XTsKICAgICBQeV9JTkNSRUYod2hhdHN0cik7CkBAIC0zNDksNyArMzUzLDYgQEAKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDIsIGFyZyk7CiAKICAgICAvKiBjYWxsIHRoZSBQeXRob24tbGV2ZWwgZnVuY3Rpb24gKi8KLSAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmcmFtZSk7CiAgICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoY2FsbGJhY2ssIGFyZ3MpOwogICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0KGZyYW1lLCAxKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCkBAIC03NzQsNyArNzc3LDcgQEAKIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlXG5cCiBhIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhc1xuXAogc3lzLnNldGRsb3BlbmZsYWdzKDApLiAgVG8gc2hhcmUgc3ltYm9scyBhY3Jvc3MgZXh0ZW5zaW9uIG1vZHVsZXMsIGNhbGwgYXNcblwKLXN5cy5zZXRkbG9wZW5mbGFncyhjdHlwZXMuUlRMRF9HTE9CQUwpLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXNcblwKK3N5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTCkuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgbW9kdWxlc1xuXAogY2FuIGJlIGZvdW5kIGluIHRoZSBvcyBtb2R1bGUgKFJUTERfeHh4IGNvbnN0YW50cywgZS5nLiBvcy5SVExEX0xBWlkpLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzkwLDcgKzc5Myw3IEBACiAiZ2V0ZGxvcGVuZmxhZ3MoKSAtPiBpbnRcblwKIFxuXAogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciBkbG9wZW4gY2FsbHMuXG5cCi1UaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIGN0eXBlcyBhbmQgRExGQ04gbW9kdWxlcy4iKTsKK1RoZSBmbGFnIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgb3MgbW9kdWxlLiIpOwogCiAjZW5kaWYgIC8qIEhBVkVfRExPUEVOICovCiAKQEAgLTg5NCw2ICs4OTcsMTkgQEAKIHJlZmVyZW5jZSBhcyBhbiBhcmd1bWVudCB0byBnZXRyZWZjb3VudCgpLiIKICk7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitzeXNfZ2V0YWxsb2NhdGVkYmxvY2tzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpKTsKK30KKworUHlEb2NfU1RSVkFSKGdldGFsbG9jYXRlZGJsb2Nrc19kb2MsCisiZ2V0YWxsb2NhdGVkYmxvY2tzKCkgLT4gaW50ZWdlclxuXAorXG5cCitSZXR1cm4gdGhlIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGN1cnJlbnRseSBhbGxvY2F0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlaXJcblwKK3NpemUuIgorKTsKKwogI2lmZGVmIENPVU5UX0FMTE9DUwogc3RhdGljIFB5T2JqZWN0ICoKIHN5c19nZXRjb3VudHMoUHlPYmplY3QgKnNlbGYpCkBAIC0xMDYyLDYgKzEwNzgsOCBAQAogICAgIHsiZ2V0ZGxvcGVuZmxhZ3MiLCAoUHlDRnVuY3Rpb24pc3lzX2dldGRsb3BlbmZsYWdzLCBNRVRIX05PQVJHUywKICAgICAgZ2V0ZGxvcGVuZmxhZ3NfZG9jfSwKICNlbmRpZgorICAgIHsiZ2V0YWxsb2NhdGVkYmxvY2tzIiwgKFB5Q0Z1bmN0aW9uKXN5c19nZXRhbGxvY2F0ZWRibG9ja3MsIE1FVEhfTk9BUkdTLAorICAgICAgZ2V0YWxsb2NhdGVkYmxvY2tzX2RvY30sCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgeyJnZXRjb3VudHMiLCAgICAgICAoUHlDRnVuY3Rpb24pc3lzX2dldGNvdW50cywgTUVUSF9OT0FSR1N9LAogI2VuZGlmCkBAIC0xMzQ5LDE0ICsxMzY3LDEyIEBACiAgICAgeyJub19zaXRlIiwgICAgICAgICAgICAgICAgICItUyJ9LAogICAgIHsiaWdub3JlX2Vudmlyb25tZW50IiwgICAgICAiLUUifSwKICAgICB7InZlcmJvc2UiLCAgICAgICAgICAgICAgICAgIi12In0sCi0jaWZkZWYgUklTQ09TCi0gICAgeyJyaXNjb3Nfd2ltcCIsICAgICAgICAgICAgICI/Pz8ifSwKLSNlbmRpZgogICAgIC8qIHsidW5idWZmZXJlZCIsICAgICAgICAgICAgICAgICAgICItdSJ9LCAqLwogICAgIC8qIHsic2tpcF9maXJzdCIsICAgICAgICAgICAgICAgICAgICIteCJ9LCAqLwogICAgIHsiYnl0ZXNfd2FybmluZyIsICAgICAgICAgICAiLWIifSwKICAgICB7InF1aWV0IiwgICAgICAgICAgICAgICAgICAgIi1xIn0sCiAgICAgeyJoYXNoX3JhbmRvbWl6YXRpb24iLCAgICAgICItUiJ9LAorICAgIHsiaXNvbGF0ZWQiLCAgICAgICAgICAgICAgICAiLUkifSwKICAgICB7MH0KIH07CiAKQEAgLTEzNjQsMTEgKzEzODAsNyBAQAogICAgICJzeXMuZmxhZ3MiLCAgICAgICAgLyogbmFtZSAqLwogICAgIGZsYWdzX19kb2NfXywgICAgICAgLyogZG9jICovCiAgICAgZmxhZ3NfZmllbGRzLCAgICAgICAvKiBmaWVsZHMgKi8KLSNpZmRlZiBSSVNDT1MKICAgICAxMwotI2Vsc2UKLSAgICAxMgotI2VuZGlmCiB9OwogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0xMzkzLDE0ICsxNDA1LDEyIEBACiAgICAgU2V0RmxhZyhQeV9Ob1NpdGVGbGFnKTsKICAgICBTZXRGbGFnKFB5X0lnbm9yZUVudmlyb25tZW50RmxhZyk7CiAgICAgU2V0RmxhZyhQeV9WZXJib3NlRmxhZyk7Ci0jaWZkZWYgUklTQ09TCi0gICAgU2V0RmxhZyhQeV9SSVNDT1NXaW1wRmxhZyk7Ci0jZW5kaWYKICAgICAvKiBTZXRGbGFnKHNhd191bmJ1ZmZlcmVkX2ZsYWcpOyAqLwogICAgIC8qIFNldEZsYWcoc2tpcGZpcnN0bGluZSk7ICovCiAgICAgU2V0RmxhZyhQeV9CeXRlc1dhcm5pbmdGbGFnKTsKICAgICBTZXRGbGFnKFB5X1F1aWV0RmxhZyk7CiAgICAgU2V0RmxhZyhQeV9IYXNoUmFuZG9taXphdGlvbkZsYWcpOworICAgIFNldEZsYWcoUHlfSXNvbGF0ZWRGbGFnKTsKICN1bmRlZiBTZXRGbGFnCiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewpAQCAtMTU2MCwxOCArMTU3MCwzNSBAQAogUHlPYmplY3QgKgogX1B5U3lzX0luaXQodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKnYsICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOwotICAgIGNoYXIgKnM7CisgICAgUHlPYmplY3QgKm0sICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOwogCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3lzbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzeXNkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklORyhrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgXAotICAgIHYgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHYgIT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgICAgXAotICAgIFB5X1hERUNSRUYodikKKyNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coa2V5LCB2YWx1ZSkgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKnYgPSAodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgXAorICAgICAgICBpZiAocmVzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFNFVF9TWVNfRlJPTV9TVFJJTkcoa2V5LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgcmVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICp2ID0gKHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsIGtleSwgdik7ICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocmVzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKICAgICAvKiBDaGVjayB0aGF0IHN0ZGluIGlzIG5vdCBhIGRpcmVjdG9yeQogICAgIFVzaW5nIHNoZWxsIHJlZGlyZWN0aW9uLCB5b3UgY2FuIHJlZGlyZWN0IHN0ZGluIHRvIGEgZGlyZWN0b3J5LApAQCAtMTU5MywxMCArMTYyMCwxMCBAQAogCiAgICAgLyogc3RkaW4vc3Rkb3V0L3N0ZGVyciBhcmUgbm93IHNldCBieSBweXRob25ydW4uYyAqLwogCi0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIl9fZGlzcGxheWhvb2tfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImRpc3BsYXlob29rIikpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJfX2V4Y2VwdGhvb2tfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImV4Y2VwdGhvb2siKSk7CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl9fZGlzcGxheWhvb2tfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImRpc3BsYXlob29rIikpOworICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJfX2V4Y2VwdGhvb2tfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImV4Y2VwdGhvb2siKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygidmVyc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0VmVyc2lvbigpKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaGV4dmVyc2lvbiIsCkBAIC0xNjMwLDI4ICsxNjU3LDI0IEBACiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaW50X2luZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0dldEluZm8oKSk7CiAgICAgLyogaW5pdGlhbGl6ZSBoYXNoX2luZm8gKi8KLSAgICBpZiAoSGFzaF9JbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkhhc2hfSW5mb1R5cGUsICZoYXNoX2luZm9fZGVzYyk7CisgICAgaWYgKEhhc2hfSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmSGFzaF9JbmZvVHlwZSwgJmhhc2hfaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaGFzaF9pbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9oYXNoX2luZm8oKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygibWF4dW5pY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoMHgxMEZGRkYpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJidWlsdGluX21vZHVsZV9uYW1lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2J1aWx0aW5fbW9kdWxlX25hbWVzKCkpOwotICAgIHsKLSAgICAgICAgLyogQXNzdW1lcyB0aGF0IGxvbmdzIGFyZSBhdCBsZWFzdCAyIGJ5dGVzIGxvbmcuCi0gICAgICAgICAgIFNob3VsZCBiZSBzYWZlISAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIG51bWJlciA9IDE7Ci0gICAgICAgIGNoYXIgKnZhbHVlOworI2lmIFBZX0JJR19FTkRJQU4KKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJieXRlb3JkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoImJpZyIpKTsKKyNlbHNlCisgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnl0ZW9yZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJsaXR0bGUiKSk7CisjZW5kaWYKIAotICAgICAgICBzID0gKGNoYXIgKikgJm51bWJlcjsKLSAgICAgICAgaWYgKHNbMF0gPT0gMCkKLSAgICAgICAgICAgIHZhbHVlID0gImJpZyI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gImxpdHRsZSI7Ci0gICAgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ5dGVvcmRlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcodmFsdWUpKTsKLSAgICB9CiAjaWZkZWYgTVNfQ09SRURMTAogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImRsbGhhbmRsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbVZvaWRQdHIoUHlXaW5fRExMaE1vZHVsZSkpOwpAQCAtMTY2NCwyMiArMTY4NywyMiBAQAogI2VuZGlmCiAgICAgaWYgKHdhcm5vcHRpb25zID09IE5VTEwpIHsKICAgICAgICAgd2Fybm9wdGlvbnMgPSBQeUxpc3RfTmV3KDApOworICAgICAgICBpZiAod2Fybm9wdGlvbnMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfSU5DUkVGKHdhcm5vcHRpb25zKTsKICAgICB9Ci0gICAgaWYgKHdhcm5vcHRpb25zICE9IE5VTEwpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIndhcm5vcHRpb25zIiwgd2Fybm9wdGlvbnMpOwotICAgIH0KKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygid2Fybm9wdGlvbnMiLCB3YXJub3B0aW9ucyk7CiAKLSAgICB2ID0gZ2V0X3hvcHRpb25zKCk7Ci0gICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiX3hvcHRpb25zIiwgdik7Ci0gICAgfQorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJfeG9wdGlvbnMiLCBnZXRfeG9wdGlvbnMoKSk7CiAKICAgICAvKiB2ZXJzaW9uX2luZm8gKi8KLSAgICBpZiAoVmVyc2lvbkluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVmVyc2lvbkluZm9UeXBlLCAmdmVyc2lvbl9pbmZvX2Rlc2MpOworICAgIGlmIChWZXJzaW9uSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVmVyc2lvbkluZm9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZlcnNpb25faW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgdmVyc2lvbl9pbmZvID0gbWFrZV92ZXJzaW9uX2luZm8oKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJ2ZXJzaW9uX2luZm8iLCB2ZXJzaW9uX2luZm8pOwogICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KQEAgLTE2OTAsOCArMTcxMywxMCBAQAogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImltcGxlbWVudGF0aW9uIiwgbWFrZV9pbXBsX2luZm8odmVyc2lvbl9pbmZvKSk7CiAKICAgICAvKiBmbGFncyAqLwotICAgIGlmIChGbGFnc1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZGbGFnc1R5cGUsICZmbGFnc19kZXNjKTsKKyAgICBpZiAoRmxhZ3NUeXBlLnRwX25hbWUgPT0gMCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJkZsYWdzVHlwZSwgJmZsYWdzX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJmbGFncyIsIG1ha2VfZmxhZ3MoKSk7CiAgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLwogICAgIEZsYWdzVHlwZS50cF9pbml0ID0gTlVMTDsKQEAgLTE3MDEsNyArMTcyNiw5IEBACiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIC8qIGdldHdpbmRvd3N2ZXJzaW9uICovCiAgICAgaWYgKFdpbmRvd3NWZXJzaW9uVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJldpbmRvd3NWZXJzaW9uVHlwZSwgJndpbmRvd3NfdmVyc2lvbl9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZXaW5kb3dzVmVyc2lvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd2luZG93c192ZXJzaW9uX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KICAgICBXaW5kb3dzVmVyc2lvblR5cGUudHBfaW5pdCA9IE5VTEw7CiAgICAgV2luZG93c1ZlcnNpb25UeXBlLnRwX25ldyA9IE5VTEw7CkBAIC0xOTMzLDcgKzE5NjAsNyBAQAogdm9pZAogUHlTeXNfU2V0QXJndihpbnQgYXJnYywgd2NoYXJfdCAqKmFyZ3YpCiB7Ci0gICAgUHlTeXNfU2V0QXJndkV4KGFyZ2MsIGFyZ3YsIDEpOworICAgIFB5U3lzX1NldEFyZ3ZFeChhcmdjLCBhcmd2LCBQeV9Jc29sYXRlZEZsYWcgPT0gMCk7CiB9CiAKIC8qIFJlaW1wbGVtZW50YXRpb24gb2YgUHlGaWxlX1dyaXRlU3RyaW5nKCkgbm8gY2FsbGluZyBpbmRpcmVjdGx5CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkLmMgYi9QeXRob24vdGhyZWFkLmMKaW5kZXggZTU1ZDM0Mi4uODU0MDk0MiAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZC5jCisrKyBiL1B5dGhvbi90aHJlYWQuYwpAQCAtOTEsMTAgKzkxLDYgQEAKICNpbmNsdWRlICJ0aHJlYWRfbnQuaCIKICNlbmRpZgogCi0jaWZkZWYgT1MyX1RIUkVBRFMKLSNkZWZpbmUgUFlUSFJFQURfTkFNRSAib3MyIgotI2luY2x1ZGUgInRocmVhZF9vczIuaCIKLSNlbmRpZgogCiAvKgogI2lmZGVmIEZPT0JBUl9USFJFQURTCkBAIC0yMzUsNyArMjMxLDcgQEAKICAgICAgICAgYXNzZXJ0KHAgPT0gTlVMTCk7CiAgICAgICAgIGdvdG8gRG9uZTsKICAgICB9Ci0gICAgcCA9IChzdHJ1Y3Qga2V5ICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5KSk7CisgICAgcCA9IChzdHJ1Y3Qga2V5ICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5KSk7CiAgICAgaWYgKHAgIT0gTlVMTCkgewogICAgICAgICBwLT5pZCA9IGlkOwogICAgICAgICBwLT5rZXkgPSBrZXk7CkBAIC0yNzQsNyArMjcwLDcgQEAKICAgICB3aGlsZSAoKHAgPSAqcSkgIT0gTlVMTCkgewogICAgICAgICBpZiAocC0+a2V5ID09IGtleSkgewogICAgICAgICAgICAgKnEgPSBwLT5uZXh0OwotICAgICAgICAgICAgZnJlZSgodm9pZCAqKXApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXApOwogICAgICAgICAgICAgLyogTkIgVGhpcyBkb2VzICpub3QqIGZyZWUgcC0+dmFsdWUhICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzI4LDcgKzMyNCw3IEBACiAgICAgd2hpbGUgKChwID0gKnEpICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHAtPmtleSA9PSBrZXkgJiYgcC0+aWQgPT0gaWQpIHsKICAgICAgICAgICAgICpxID0gcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilwKTsKICAgICAgICAgICAgIC8qIE5CIFRoaXMgZG9lcyAqbm90KiBmcmVlIHAtPnZhbHVlISAqLwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM2MSw3ICszNTcsNyBAQAogICAgIHdoaWxlICgocCA9ICpxKSAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChwLT5pZCAhPSBpZCkgewogICAgICAgICAgICAgKnEgPSBwLT5uZXh0OwotICAgICAgICAgICAgZnJlZSgodm9pZCAqKXApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXApOwogICAgICAgICAgICAgLyogTkIgVGhpcyBkb2VzICpub3QqIGZyZWUgcC0+dmFsdWUhICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDAzLDggKzM5OSwxMCBAQAogICAgIGludCBsZW47CiAjZW5kaWYKIAotICAgIGlmIChUaHJlYWRJbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlRocmVhZEluZm9UeXBlLCAmdGhyZWFkaW5mb19kZXNjKTsKKyAgICBpZiAoVGhyZWFkSW5mb1R5cGUudHBfbmFtZSA9PSAwKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVGhyZWFkSW5mb1R5cGUsICZ0aHJlYWRpbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHRocmVhZGluZm8gPSBQeVN0cnVjdFNlcXVlbmNlX05ldygmVGhyZWFkSW5mb1R5cGUpOwogICAgIGlmICh0aHJlYWRpbmZvID09IE5VTEwpCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX250LmggYi9QeXRob24vdGhyZWFkX250LmgKaW5kZXggOTM4YmYxZS4uYWI1YTA4MSAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9udC5oCisrKyBiL1B5dGhvbi90aHJlYWRfbnQuaApAQCAtMzQsNyArMzQsNyBAQAogUE5STVVURVgKIEFsbG9jTm9uUmVjdXJzaXZlTXV0ZXgoKQogewotICAgIFBOUk1VVEVYIG0gPSAoUE5STVVURVgpbWFsbG9jKHNpemVvZihOUk1VVEVYKSk7CisgICAgUE5STVVURVggbSA9IChQTlJNVVRFWClQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKE5STVVURVgpKTsKICAgICBpZiAoIW0pCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeUNPTkRfSU5JVCgmbS0+Y3YpKQpAQCAtNDYsNyArNDYsNyBAQAogICAgIG0tPmxvY2tlZCA9IDA7CiAgICAgcmV0dXJuIG07CiBmYWlsOgotICAgIGZyZWUobSk7CisgICAgUHlNZW1fUmF3RnJlZShtKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNTYsNyArNTYsNyBAQAogICAgIGlmIChtdXRleCkgewogICAgICAgICBQeUNPTkRfRklOSSgmbXV0ZXgtPmN2KTsKICAgICAgICAgUHlNVVRFWF9GSU5JKCZtdXRleC0+Y3MpOwotICAgICAgICBmcmVlKG11dGV4KTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShtdXRleCk7CiAgICAgfQogfQogCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICByZXN1bHQgPSBQeUNPTkRfU0lHTkFMKCZtdXRleC0+Y3YpOwogICAgIHJlc3VsdCAmPSBQeU1VVEVYX1VOTE9DSygmbXV0ZXgtPmNzKTsKICAgICByZXR1cm4gcmVzdWx0OwotfSAgICAKK30KIAogI2Vsc2UgLyogaWYgISBfUFlfVVNFX0NWX0xPQ0tTICovCiAKQEAgLTEzMCw3ICsxMzAsNyBAQAogRFdPUkQKIEVudGVyTm9uUmVjdXJzaXZlTXV0ZXgoUE5STVVURVggbXV0ZXgsIERXT1JEIG1pbGxpc2Vjb25kcykKIHsKLSAgICByZXR1cm4gV2FpdEZvclNpbmdsZU9iamVjdChtdXRleCwgbWlsbGlzZWNvbmRzKTsKKyAgICByZXR1cm4gV2FpdEZvclNpbmdsZU9iamVjdEV4KG11dGV4LCBtaWxsaXNlY29uZHMsIEZBTFNFKTsKIH0KIAogQk9PTApkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9vczIuaCBiL1B5dGhvbi90aHJlYWRfb3MyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMjY0YjUuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL3RocmVhZF9vczIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKiBUaGlzIGNvZGUgaW1wbGVtZW50ZWQgYnkgY3ZhbGVAbmV0Y29tLmNvbSAqLwotCi0jZGVmaW5lIElOQ0xfRE9TUFJPQ0VTUwotI2RlZmluZSBJTkNMX0RPU1NFTUFQSE9SRVMKLSNpbmNsdWRlICJvczIuaCIKLSNpbmNsdWRlICJsaW1pdHMuaCIKLQotI2luY2x1ZGUgInByb2Nlc3MuaCIKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSA8c3lzL2J1aWx0aW4uaD4KLSNpbmNsdWRlIDxzeXMvZm11dGV4Lmg+Ci0jZWxzZQotbG9uZyBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpOwotI2VuZGlmCi0KLS8qIGRlZmF1bHQgdGhyZWFkIHN0YWNrIHNpemUgb2YgNjRrQiAqLwotI2lmICFkZWZpbmVkKFRIUkVBRF9TVEFDS19TSVpFKQotI2RlZmluZSBUSFJFQURfU1RBQ0tfU0laRSAgICAgICAweDEwMDAwCi0jZW5kaWYKLQotI2RlZmluZSBPUzJfU1RBQ0tTSVpFKHgpICAgICAgICAoeCA/IHggOiBUSFJFQURfU1RBQ0tfU0laRSkKLQotLyoKLSAqIEluaXRpYWxpemF0aW9uIG9mIHRoZSBDIHBhY2thZ2UsIHNob3VsZCBub3QgYmUgbmVlZGVkLgotICovCi1zdGF0aWMgdm9pZAotUHlUaHJlYWRfX2luaXRfdGhyZWFkKHZvaWQpCi17Ci19Ci0KLS8qCi0gKiBUaHJlYWQgc3VwcG9ydC4KLSAqLwotbG9uZwotUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQotewotICAgIGludCB0aHJlYWRfaWQ7Ci0KLSAgICB0aHJlYWRfaWQgPSBfYmVnaW50aHJlYWQoZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9TMl9TVEFDS1NJWkUoX3B5dGhyZWFkX3N0YWNrc2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnKTsKLQotICAgIGlmICh0aHJlYWRfaWQgPT0gLTEpIHsKLSAgICAgICAgZHByaW50ZigoIl9iZWdpbnRocmVhZCBmYWlsZWQuIHJldHVybiAlbGRcbiIsIGVycm5vKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRocmVhZF9pZDsKLX0KLQotbG9uZwotUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCh2b2lkKQotewotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFBQSUIgcGliOwotICAgIFBUSUIgdGliOwotI2VuZGlmCi0KLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXR1cm4gX2dldHRpZCgpOwotI2Vsc2UKLSAgICBEb3NHZXRJbmZvQmxvY2tzKCZ0aWIsICZwaWIpOwotICAgIHJldHVybiB0aWItPnRpYl9wdGliMi0+dGliMl91bHRpZDsKLSNlbmRpZgotfQotCi12b2lkCi1QeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBleGl0KDApOwotICAgIF9lbmR0aHJlYWQoKTsKLX0KLQotLyoKLSAqIExvY2sgc3VwcG9ydC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aCBhbiBldmVudCBzZW1hcGhvcmUgYW5kIGNyaXRpY2FsCi0gKiBzZWN0aW9ucyB0byBtYWtlIGl0IGJlaGF2ZSBtb3JlIGxpa2UgYSBwb3NpeCBtdXRleCB0aGFuIGl0cyBPUy8yCi0gKiBjb3VudGVycGFydHMuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgb3MyX2xvY2tfdCB7Ci0gICAgaW50IGlzX3NldDsKLSAgICBIRVYgY2hhbmdlZDsKLX0gKnR5cGVfb3MyX2xvY2s7Ci0KLVB5VGhyZWFkX3R5cGVfbG9jawotUHlUaHJlYWRfYWxsb2NhdGVfbG9jayh2b2lkKQotewotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgX2ZtdXRleCAqc2VtID0gbWFsbG9jKHNpemVvZihfZm11dGV4KSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgLT4gJWx4XG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICAobG9uZylzZW0pKTsKLSAgICBpZiAoX2ZtdXRleF9jcmVhdGUoc2VtLCAwKSkgewotICAgICAgICBmcmVlKHNlbSk7Ci0gICAgICAgIHNlbSA9IE5VTEw7Ci0gICAgfQotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKXNlbTsKLSNlbHNlCi0gICAgQVBJUkVUIHJjOwotICAgIHR5cGVfb3MyX2xvY2sgbG9jayA9ICh0eXBlX29zMl9sb2NrKW1hbGxvYyhzaXplb2Yoc3RydWN0IG9zMl9sb2NrX3QpKTsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICBsb2NrLT5pc19zZXQgPSAwOwotCi0gICAgRG9zQ3JlYXRlRXZlbnRTZW0oTlVMTCwgJmxvY2stPmNoYW5nZWQsIDAsIDApOwotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpIC0+ICVwXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICBsb2NrLT5jaGFuZ2VkKSk7Ci0KLSAgICByZXR1cm4gKFB5VGhyZWFkX3R5cGVfbG9jaylsb2NrOwotI2VuZGlmCi19Ci0KLXZvaWQKLVB5VGhyZWFkX2ZyZWVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2spCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2ZyZWVfbG9jayglcCkgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSxhTG9jaykpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoYUxvY2spIHsKLSAgICAgICAgX2ZtdXRleF9jbG9zZSgoX2ZtdXRleCAqKWFMb2NrKTsKLSAgICAgICAgZnJlZSgoX2ZtdXRleCAqKWFMb2NrKTsKLSAgICB9Ci0jZWxzZQotICAgIERvc0Nsb3NlRXZlbnRTZW0obG9jay0+Y2hhbmdlZCk7Ci0gICAgZnJlZShhTG9jayk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFJldHVybiAxIG9uIHN1Y2Nlc3MgaWYgdGhlIGxvY2sgd2FzIGFjcXVpcmVkCi0gKgotICogYW5kIDAgaWYgdGhlIGxvY2sgd2FzIG5vdCBhY3F1aXJlZC4KLSAqLwotaW50Ci1QeVRocmVhZF9hY3F1aXJlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGFMb2NrLCBpbnQgd2FpdGZsYWcpCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaW50ICAgZG9uZSA9IDA7Ci0gICAgVUxPTkcgY291bnQ7Ci0gICAgUElEICAgcGlkID0gMDsKLSAgICBUSUQgICB0aWQgPSAwOwotICAgIHR5cGVfb3MyX2xvY2sgbG9jayA9ICh0eXBlX29zMl9sb2NrKWFMb2NrOwotI2VuZGlmCi0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIGFMb2NrLAotICAgICAgICAgICAgIHdhaXRmbGFnKSk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIC8qIGFsd2F5cyBzdWNjZXNzZnVsIGlmIHRoZSBsb2NrIGRvZXNuJ3QgZXhpc3QgKi8KLSAgICBpZiAoYUxvY2sgJiYKLSAgICAgICAgX2ZtdXRleF9yZXF1ZXN0KChfZm11dGV4ICopYUxvY2ssIHdhaXRmbGFnID8gMCA6IF9GTVJfTk9XQUlUKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZWxzZQotICAgIHdoaWxlICghZG9uZSkgewotICAgICAgICAvKiBpZiB0aGUgbG9jayBpcyBjdXJyZW50bHkgc2V0LCB3ZSBoYXZlIHRvIHdhaXQgZm9yCi0gICAgICAgICAqIHRoZSBzdGF0ZSB0byBjaGFuZ2UKLSAgICAgICAgICovCi0gICAgICAgIGlmIChsb2NrLT5pc19zZXQpIHsKLSAgICAgICAgICAgIGlmICghd2FpdGZsYWcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBEb3NXYWl0RXZlbnRTZW0obG9jay0+Y2hhbmdlZCwgU0VNX0lOREVGSU5JVEVfV0FJVCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBlbnRlciBhIGNyaXRpY2FsIHNlY3Rpb24gYW5kIHRyeSB0byBnZXQgdGhlIHNlbWFwaG9yZS4gIElmCi0gICAgICAgICAqIGl0IGlzIHN0aWxsIGxvY2tlZCwgd2Ugd2lsbCB0cnkgYWdhaW4uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoRG9zRW50ZXJDcml0U2VjKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAoIWxvY2stPmlzX3NldCkgewotICAgICAgICAgICAgbG9jay0+aXNfc2V0ID0gMTsKLSAgICAgICAgICAgIERvc1Jlc2V0RXZlbnRTZW0obG9jay0+Y2hhbmdlZCwgJmNvdW50KTsKLSAgICAgICAgICAgIGRvbmUgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgRG9zRXhpdENyaXRTZWMoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiAxOwotfQotCi12b2lkCi1QeVRocmVhZF9yZWxlYXNlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGFMb2NrKQotewotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHR5cGVfb3MyX2xvY2sgbG9jayA9ICh0eXBlX29zMl9sb2NrKWFMb2NrOwotI2VuZGlmCi0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgYUxvY2spKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKGFMb2NrKQotICAgICAgICBfZm11dGV4X3JlbGVhc2UoKF9mbXV0ZXggKilhTG9jayk7Ci0jZWxzZQotICAgIGlmICghbG9jay0+aXNfc2V0KSB7Ci0gICAgICAgIGRwcmludGYoKCIlbGQ6IENvdWxkIG5vdCBQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGVycm9yOiAlbFxuIiwKLSAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgICAgICBhTG9jaywKLSAgICAgICAgICAgICAgICAgR2V0TGFzdEVycm9yKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChEb3NFbnRlckNyaXRTZWMoKSkgewotICAgICAgICBkcHJpbnRmKCgiJWxkOiBDb3VsZCBub3QgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKCVwKSBlcnJvcjogJWxcbiIsCi0gICAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICAgICAgYUxvY2ssCi0gICAgICAgICAgICAgICAgIEdldExhc3RFcnJvcigpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2NrLT5pc19zZXQgPSAwOwotICAgIERvc1Bvc3RFdmVudFNlbShsb2NrLT5jaGFuZ2VkKTsKLQotICAgIERvc0V4aXRDcml0U2VjKCk7Ci0jZW5kaWYKLX0KLQotLyogbWluaW11bS9tYXhpbXVtIHRocmVhZCBzdGFjayBzaXplcyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgVEhSRUFEX01JTl9TVEFDS1NJWkUgICAgMHg4MDAwICAgICAgICAgIC8qIDMya0IgKi8KLSNkZWZpbmUgVEhSRUFEX01BWF9TVEFDS1NJWkUgICAgMHgyMDAwMDAwICAgICAgIC8qIDMyTUIgKi8KLQotLyogc2V0IHRoZSB0aHJlYWQgc3RhY2sgc2l6ZS4KLSAqIFJldHVybiAwIGlmIHNpemUgaXMgdmFsaWQsIC0xIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludAotX3B5dGhyZWFkX29zMl9zZXRfc3RhY2tzaXplKHNpemVfdCBzaXplKQotewotICAgIC8qIHNldCB0byBkZWZhdWx0ICovCi0gICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgICBfcHl0aHJlYWRfc3RhY2tzaXplID0gMDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyogdmFsaWQgcmFuZ2U/ICovCi0gICAgaWYgKHNpemUgPj0gVEhSRUFEX01JTl9TVEFDS1NJWkUgJiYgc2l6ZSA8IFRIUkVBRF9NQVhfU1RBQ0tTSVpFKSB7Ci0gICAgICAgIF9weXRocmVhZF9zdGFja3NpemUgPSBzaXplOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLSNkZWZpbmUgVEhSRUFEX1NFVF9TVEFDS1NJWkUoeCkgX3B5dGhyZWFkX29zMl9zZXRfc3RhY2tzaXplKHgpCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3B0aC5oIGIvUHl0aG9uL3RocmVhZF9wdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcwNDI2Ni4uMDAwMDAwMAotLS0gYS9QeXRob24vdGhyZWFkX3B0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLQotLyogR05VIHB0aCB0aHJlYWRzIGludGVyZmFjZQotICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3B0aAotICAgMjAwMC0wNS0wMyBBbmR5IER1c3RtYW4gPGFuZHlAZHVzdG1hbi5uZXQ+Ci0KLSAgIEFkYXB0ZWQgZnJvbSBQb3NpeCB0aHJlYWRzIGludGVyZmFjZQotICAgMTIgTWF5IDE5OTcgLS0gZGF2aWQgYXJub2xkIDxkYXZpZGFAcG9ib3guY29tPgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxwdGguaD4KLQotLyogQSBwdGggbXV0ZXggaXNuJ3Qgc3VmZmljaWVudCB0byBtb2RlbCB0aGUgUHl0aG9uIGxvY2sgdHlwZQotICogYmVjYXVzZSBwdGggbXV0ZXhlcyBjYW4gYmUgYWNxdWlyZWQgbXVsdGlwbGUgdGltZXMgYnkgdGhlCi0gKiBzYW1lIHRocmVhZC4KLSAqCi0gKiBUaGUgcHRoX2xvY2sgc3RydWN0IGltcGxlbWVudHMgYSBQeXRob24gbG9jayBhcyBhICJsb2NrZWQ/IiBiaXQKLSAqIGFuZCBhIDxjb25kaXRpb24sIG11dGV4PiBwYWlyLiAgSW4gZ2VuZXJhbCwgaWYgdGhlIGJpdCBjYW4gYmUgYWNxdWlyZWQKLSAqIGluc3RhbnRseSwgaXQgaXMsIGVsc2UgdGhlIHBhaXIgaXMgdXNlZCB0byBibG9jayB0aGUgdGhyZWFkIHVudGlsIHRoZQotICogYml0IGlzIGNsZWFyZWQuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNoYXIgICAgICAgICAgICAgbG9ja2VkOyAvKiAwPXVubG9ja2VkLCAxPWxvY2tlZCAqLwotICAgIC8qIGEgPGNvbmQsIG11dGV4PiBwYWlyIHRvIGhhbmRsZSBhbiBhY3F1aXJlIG9mIGEgbG9ja2VkIGxvY2sgKi8KLSAgICBwdGhfY29uZF90ICAgbG9ja19yZWxlYXNlZDsKLSAgICBwdGhfbXV0ZXhfdCAgbXV0OwotfSBwdGhfbG9jazsKLQotI2RlZmluZSBDSEVDS19TVEFUVVMobmFtZSkgIGlmIChzdGF0dXMgPT0gLTEpIHsgcHJpbnRmKCIlZCAiLCBzdGF0dXMpOyBwZXJyb3IobmFtZSk7IGVycm9yID0gMTsgfQotCi1wdGhfYXR0cl90IFB5VGhyZWFkX2F0dHI7Ci0KLS8qCi0gKiBJbml0aWFsaXphdGlvbi4KLSAqLwotCi1zdGF0aWMgdm9pZCBQeVRocmVhZF9faW5pdF90aHJlYWQodm9pZCkKLXsKLSAgICBwdGhfaW5pdCgpOwotICAgIFB5VGhyZWFkX2F0dHIgPSBwdGhfYXR0cl9uZXcoKTsKLSAgICBwdGhfYXR0cl9zZXQoUHlUaHJlYWRfYXR0ciwgUFRIX0FUVFJfU1RBQ0tfU0laRSwgMTw8MTgpOwotICAgIHB0aF9hdHRyX3NldChQeVRocmVhZF9hdHRyLCBQVEhfQVRUUl9KT0lOQUJMRSwgRkFMU0UpOwotfQotCi0vKgotICogVGhyZWFkIHN1cHBvcnQuCi0gKi8KLQotCi1sb25nIFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZykKLXsKLSAgICBwdGhfdCB0aDsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotCi0gICAgdGggPSBwdGhfc3Bhd24oUHlUaHJlYWRfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqICgqKSh2b2lkICopKWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICByZXR1cm4gdGg7Ci19Ci0KLWxvbmcgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCh2b2lkKQotewotICAgIHZvbGF0aWxlIHB0aF90IHRocmVhZGlkOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0gICAgdGhyZWFkaWQgPSBwdGhfc2VsZigpOwotICAgIHJldHVybiAobG9uZykgdGhyZWFkaWQ7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBleGl0KDApOwotICAgIH0KLX0KLQotLyoKLSAqIExvY2sgc3VwcG9ydC4KLSAqLwotUHlUaHJlYWRfdHlwZV9sb2NrIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2sodm9pZCkKLXsKLSAgICBwdGhfbG9jayAqbG9jazsKLSAgICBpbnQgc3RhdHVzLCBlcnJvciA9IDA7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWxsb2NhdGVfbG9jayBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotCi0gICAgbG9jayA9IChwdGhfbG9jayAqKSBtYWxsb2Moc2l6ZW9mKHB0aF9sb2NrKSk7Ci0gICAgbWVtc2V0KCh2b2lkICopbG9jaywgJ1wwJywgc2l6ZW9mKHB0aF9sb2NrKSk7Ci0gICAgaWYgKGxvY2spIHsKLSAgICAgICAgbG9jay0+bG9ja2VkID0gMDsKLSAgICAgICAgc3RhdHVzID0gcHRoX211dGV4X2luaXQoJmxvY2stPm11dCk7Ci0gICAgICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X2luaXQiKTsKLSAgICAgICAgc3RhdHVzID0gcHRoX2NvbmRfaW5pdCgmbG9jay0+bG9ja19yZWxlYXNlZCk7Ci0gICAgICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfaW5pdCIpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKLSAgICAgICAgICAgIGxvY2sgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgLT4gJXBcbiIsIGxvY2spKTsKLSAgICByZXR1cm4gKFB5VGhyZWFkX3R5cGVfbG9jaykgbG9jazsKLX0KLQotdm9pZCBQeVRocmVhZF9mcmVlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2spCi17Ci0gICAgcHRoX2xvY2sgKnRoZWxvY2sgPSAocHRoX2xvY2sgKilsb2NrOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2ZyZWVfbG9jayglcCkgY2FsbGVkXG4iLCBsb2NrKSk7Ci0KLSAgICBmcmVlKCh2b2lkICopdGhlbG9jayk7Ci19Ci0KLWludCBQeVRocmVhZF9hY3F1aXJlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2ssIGludCB3YWl0ZmxhZykKLXsKLSAgICBpbnQgc3VjY2VzczsKLSAgICBwdGhfbG9jayAqdGhlbG9jayA9IChwdGhfbG9jayAqKWxvY2s7Ci0gICAgaW50IHN0YXR1cywgZXJyb3IgPSAwOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FjcXVpcmVfbG9jayglcCwgJWQpIGNhbGxlZFxuIiwgbG9jaywgd2FpdGZsYWcpKTsKLQotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9hY3F1aXJlKCZ0aGVsb2NrLT5tdXQsICF3YWl0ZmxhZywgTlVMTCk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfYWNxdWlyZVsxXSIpOwotICAgIHN1Y2Nlc3MgPSB0aGVsb2NrLT5sb2NrZWQgPT0gMDsKLSAgICBpZiAoc3VjY2VzcykgdGhlbG9jay0+bG9ja2VkID0gMTsKLSAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfcmVsZWFzZSggJnRoZWxvY2stPm11dCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X3JlbGVhc2VbMV0iKTsKLQotICAgIGlmICggIXN1Y2Nlc3MgJiYgd2FpdGZsYWcgKSB7Ci0gICAgICAgIC8qIGNvbnRpbnVlIHRyeWluZyB1bnRpbCB3ZSBnZXQgdGhlIGxvY2sgKi8KLQotICAgICAgICAvKiBtdXQgbXVzdCBiZSBsb2NrZWQgYnkgbWUgLS0gcGFydCBvZiB0aGUgY29uZGl0aW9uCi0gICAgICAgICAqIHByb3RvY29sICovCi0gICAgICAgIHN0YXR1cyA9IHB0aF9tdXRleF9hY3F1aXJlKCAmdGhlbG9jay0+bXV0LCAhd2FpdGZsYWcsIE5VTEwgKTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfYWNxdWlyZVsyXSIpOwotICAgICAgICB3aGlsZSAoIHRoZWxvY2stPmxvY2tlZCApIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHB0aF9jb25kX2F3YWl0KCZ0aGVsb2NrLT5sb2NrX3JlbGVhc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRoZWxvY2stPm11dCwgTlVMTCk7Ci0gICAgICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9jb25kX2F3YWl0Iik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhlbG9jay0+bG9ja2VkID0gMTsKLSAgICAgICAgc3RhdHVzID0gcHRoX211dGV4X3JlbGVhc2UoICZ0aGVsb2NrLT5tdXQgKTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfcmVsZWFzZVsyXSIpOwotICAgICAgICBzdWNjZXNzID0gMTsKLSAgICB9Ci0gICAgaWYgKGVycm9yKSBzdWNjZXNzID0gMDsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgLT4gJWRcbiIsIGxvY2ssIHdhaXRmbGFnLCBzdWNjZXNzKSk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrKQotewotICAgIHB0aF9sb2NrICp0aGVsb2NrID0gKHB0aF9sb2NrICopbG9jazsKLSAgICBpbnQgc3RhdHVzLCBlcnJvciA9IDA7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfcmVsZWFzZV9sb2NrKCVwKSBjYWxsZWRcbiIsIGxvY2spKTsKLQotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9hY3F1aXJlKCAmdGhlbG9jay0+bXV0LCAwLCBOVUxMICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfYWNxdWlyZVszXSIpOwotCi0gICAgdGhlbG9jay0+bG9ja2VkID0gMDsKLQotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9yZWxlYXNlKCAmdGhlbG9jay0+bXV0ICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfcmVsZWFzZVszXSIpOwotCi0gICAgLyogd2FrZSB1cCBzb21lb25lIChhbnlvbmUsIGlmIGFueSkgd2FpdGluZyBvbiB0aGUgbG9jayAqLwotICAgIHN0YXR1cyA9IHB0aF9jb25kX25vdGlmeSggJnRoZWxvY2stPmxvY2tfcmVsZWFzZWQsIDAgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9jb25kX25vdGlmeSIpOwotfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmggYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAppbmRleCBlOTBhZTdlLi4yMGY4NTM1IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAorKysgYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaApAQCAtMjgyLDE0ICsyODIsMTQgQEAKICAgICBpZiAoIWluaXRpYWxpemVkKQogICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwogCi0gICAgbG9jayA9IChzZW1fdCAqKW1hbGxvYyhzaXplb2Yoc2VtX3QpKTsKKyAgICBsb2NrID0gKHNlbV90ICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZihzZW1fdCkpOwogCiAgICAgaWYgKGxvY2spIHsKICAgICAgICAgc3RhdHVzID0gc2VtX2luaXQobG9jaywwLDEpOwogICAgICAgICBDSEVDS19TVEFUVVMoInNlbV9pbml0Iik7CiAKICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopbG9jayk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopbG9jayk7CiAgICAgICAgICAgICBsb2NrID0gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMyw3ICszMTMsNyBAQAogICAgIHN0YXR1cyA9IHNlbV9kZXN0cm95KHRoZWxvY2spOwogICAgIENIRUNLX1NUQVRVUygic2VtX2Rlc3Ryb3kiKTsKIAotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKKyAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopdGhlbG9jayk7CiB9CiAKIC8qCkBAIC00MTAsNyArNDEwLDcgQEAKICAgICBpZiAoIWluaXRpYWxpemVkKQogICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwogCi0gICAgbG9jayA9IChwdGhyZWFkX2xvY2sgKikgbWFsbG9jKHNpemVvZihwdGhyZWFkX2xvY2spKTsKKyAgICBsb2NrID0gKHB0aHJlYWRfbG9jayAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHB0aHJlYWRfbG9jaykpOwogICAgIGlmIChsb2NrKSB7CiAgICAgICAgIG1lbXNldCgodm9pZCAqKWxvY2ssICdcMCcsIHNpemVvZihwdGhyZWFkX2xvY2spKTsKICAgICAgICAgbG9jay0+bG9ja2VkID0gMDsKQEAgLTQzMCw3ICs0MzAsNyBAQAogICAgICAgICBDSEVDS19TVEFUVVMoInB0aHJlYWRfY29uZF9pbml0Iik7CiAKICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopbG9jayk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopbG9jayk7CiAgICAgICAgICAgICBsb2NrID0gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTQ1Nyw3ICs0NTcsNyBAQAogICAgIHN0YXR1cyA9IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSggJnRoZWxvY2stPm11dCApOwogICAgIENIRUNLX1NUQVRVUygicHRocmVhZF9tdXRleF9kZXN0cm95Iik7CiAKLSAgICBmcmVlKCh2b2lkICopdGhlbG9jayk7CisgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXRoZWxvY2spOwogfQogCiBQeUxvY2tTdGF0dXMKZGlmZiAtLWdpdCBhL1B5dGhvbi90cmFjZWJhY2suYyBiL1B5dGhvbi90cmFjZWJhY2suYwppbmRleCA3NDA3NWM5Li4wMWU5NDczIDEwMDY0NAotLS0gYS9QeXRob24vdHJhY2ViYWNrLmMKKysrIGIvUHl0aG9uL3RyYWNlYmFjay5jCkBAIC0xMyw3ICsxMyw3IEBACiAKICNkZWZpbmUgT0ZGKHgpIG9mZnNldG9mKFB5VHJhY2ViYWNrT2JqZWN0LCB4KQogCi0jZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpCisjZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgKGludClzdHJsZW4oc3RyKSkKICNkZWZpbmUgTUFYX1NUUklOR19MRU5HVEggNTAwCiAjZGVmaW5lIE1BWF9GUkFNRV9ERVBUSCAxMDAKICNkZWZpbmUgTUFYX05USFJFQURTIDEwMApAQCAtMjQ2LDEwICsyNDYsMTIgQEAKICAgICBiaW5hcnkgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGlvLCAmUHlJZF9vcGVuLCAiT3MiLCBmaWxlbmFtZSwgInJiIik7CiAKICAgICBpZiAoYmluYXJ5ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKwogICAgICAgICBiaW5hcnkgPSBfUHlfRmluZFNvdXJjZUZpbGUoZmlsZW5hbWUsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGlvKTsKICAgICAgICAgaWYgKGJpbmFyeSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaW8pOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ2OSwxMyArNDcxLDEzIEBACiAgICAgd3JpdGUoZmQsIGJ1ZmZlciwgbGVuKTsKIH0KIAotLyogRm9ybWF0IGFuIGludGVnZXIgaW4gcmFuZ2UgWzA7IDB4ZmZmZmZmZmZdIHRvIGhleGRlY2ltYWwgb2YgJ3dpZHRoJyBkaWdpdHMsCisvKiBGb3JtYXQgYW4gaW50ZWdlciBpbiByYW5nZSBbMDsgMHhmZmZmZmZmZl0gdG8gaGV4YWRlY2ltYWwgb2YgJ3dpZHRoJyBkaWdpdHMsCiAgICBhbmQgd3JpdGUgaXQgaW50byB0aGUgZmlsZSBmZC4KIAogICAgVGhpcyBmdW5jdGlvbiBpcyBzaWduYWwgc2FmZS4gKi8KIAogc3RhdGljIHZvaWQKLWR1bXBfaGV4YWRlY2ltYWwoaW50IHdpZHRoLCB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgZmQpCitkdW1wX2hleGFkZWNpbWFsKGludCBmZCwgdW5zaWduZWQgbG9uZyB2YWx1ZSwgaW50IHdpZHRoKQogewogICAgIGludCBsZW47CiAgICAgY2hhciBidWZmZXJbc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogMiArIDFdOwpAQCAtNTQyLDE1ICs1NDQsMTUgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZmYpIHsKICAgICAgICAgICAgIFBVVFMoZmQsICJcXHgiKTsKLSAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoMiwgY2gsIGZkKTsKKyAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoZmQsIGNoLCAyKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZmZmZikgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxcdSIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCg0LCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxcVSIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCg4LCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICh0cnVuY2F0ZWQpCkBAIC02MDEsNyArNjAzLDcgQEAKICAgICB1bnNpZ25lZCBpbnQgZGVwdGg7CiAKICAgICBpZiAod3JpdGVfaGVhZGVyKQotICAgICAgICBQVVRTKGZkLCAiVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTpcbiIpOworICAgICAgICBQVVRTKGZkLCAiU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CiAKICAgICBmcmFtZSA9IF9QeVRocmVhZFN0YXRlX0dldEZyYW1lKHRzdGF0ZSk7CiAgICAgaWYgKGZyYW1lID09IE5VTEwpCkBAIC02MzksOCArNjQxLDggQEAKICAgICAgICAgUFVUUyhmZCwgIkN1cnJlbnQgdGhyZWFkIDB4Iik7CiAgICAgZWxzZQogICAgICAgICBQVVRTKGZkLCAiVGhyZWFkIDB4Iik7Ci0gICAgZHVtcF9oZXhhZGVjaW1hbChzaXplb2YobG9uZykqMiwgKHVuc2lnbmVkIGxvbmcpdHN0YXRlLT50aHJlYWRfaWQsIGZkKTsKLSAgICBQVVRTKGZkLCAiOlxuIik7CisgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgKHVuc2lnbmVkIGxvbmcpdHN0YXRlLT50aHJlYWRfaWQsIHNpemVvZihsb25nKSoyKTsKKyAgICBQVVRTKGZkLCAiIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTpcbiIpOwogfQogCiBjb25zdCBjaGFyKgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDEyNTQ4YjcuLjAwMjY1NmUgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNSArMSw1IEBACi1UaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDMuMy4zIHJlbGVhc2UgY2FuZGlkYXRlIDEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBpcyBQeXRob24gdmVyc2lvbiAzLjQuMCBhbHBoYSA0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLAogMjAxMiwgMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC01Miw5ICs1Miw5IEBACiAtLS0tLS0tLS0tCiAKIFdlIHRyeSB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgIldoYXQncyBOZXcgaW4KLVB5dGhvbiAzLjMiIGRvY3VtZW50LCBmb3VuZCBhdAorUHl0aG9uIDMuNCIgZG9jdW1lbnQsIGZvdW5kIGF0CiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy93aGF0c25ldy8zLjMuaHRtbAorICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L3doYXRzbmV3LzMuNC5odG1sCiAKIEZvciBhIG1vcmUgZGV0YWlsZWQgY2hhbmdlIGxvZywgcmVhZCBNaXNjL05FV1MgKHRob3VnaCB0aGlzIGZpbGUsIHRvbywgaXMKIGluY29tcGxldGUsIGFuZCBhbHNvIGRvZXNuJ3QgbGlzdCBhbnl0aGluZyBtZXJnZWQgaW4gZnJvbSB0aGUgMi43IHJlbGVhc2UgdW5kZXIKQEAgLTY3LDkgKzY3LDkgQEAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAotRG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDMuMyBpcyBvbmxpbmUsIHVwZGF0ZWQgZGFpbHk6CitEb2N1bWVudGF0aW9uIGZvciBQeXRob24gMy40IGlzIG9ubGluZSwgdXBkYXRlZCBkYWlseToKIAotICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zLworICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40LwogCiBJdCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIGluIG1hbnkgZm9ybWF0cyBmb3IgZmFzdGVyIGFjY2Vzcy4gIFRoZSBkb2N1bWVudGF0aW9uCiBpcyBkb3dubG9hZGFibGUgaW4gSFRNTCwgUERGLCBhbmQgcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXRzOyB0aGUgbGF0dGVyIHZlcnNpb24KQEAgLTk0LDcgKzk0LDcgQEAKIEEgc291cmNlLXRvLXNvdXJjZSB0cmFuc2xhdGlvbiB0b29sLCAiMnRvMyIsIGNhbiB0YWtlIGNhcmUgb2YgdGhlIG11bmRhbmUgdGFzawogb2YgY29udmVydGluZyBsYXJnZSBhbW91bnRzIG9mIHNvdXJjZSBjb2RlLiAgSXQgaXMgbm90IGEgY29tcGxldGUgc29sdXRpb24gYnV0CiBpcyBjb21wbGVtZW50ZWQgYnkgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGluIDIuNi4gIFNlZQotaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjMvbGlicmFyeS8ydG8zLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC9saWJyYXJ5LzJ0bzMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCiBUZXN0aW5nCkBAIC0xMzIsNyArMTMyLDcgQEAKIEluc3RhbGwgdGhhdCB2ZXJzaW9uIHVzaW5nICJtYWtlIGluc3RhbGwiLiAgSW5zdGFsbCBhbGwgb3RoZXIgdmVyc2lvbnMgdXNpbmcKICJtYWtlIGFsdGluc3RhbGwiLgogCi1Gb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBQeXRob24gMi42LCAyLjcgYW5kIDMuMyB3aXRoIDIuNyBiZWluZyB0aGUKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIFB5dGhvbiAyLjYsIDIuNyBhbmQgMy40IHdpdGggMi43IGJlaW5nIHRoZQogcHJpbWFyeSB2ZXJzaW9uLCB5b3Ugd291bGQgZXhlY3V0ZSAibWFrZSBpbnN0YWxsIiBpbiB5b3VyIDIuNyBidWlsZCBkaXJlY3RvcnkKIGFuZCAibWFrZSBhbHRpbnN0YWxsIiBpbiB0aGUgb3RoZXJzLgogCkBAIC0xNjgsNyArMTY4LDcgQEAKIFJlbGVhc2UgU2NoZWR1bGUKIC0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIFBFUCAzOTggZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMzk4LworU2VlIFBFUCA0MjkgZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDI5LwogCiAKIENvcHlyaWdodCBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0CmluZGV4IGQyZmYyNTUuLmE0NGM2NjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQKQEAgLTYsMTYgKzYsMTYgQEAKIAogaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRjbDg1Zy5kbGwgKAogICAgIGNkIHRjbC04LjUuMTEuMFx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgaW5zdGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKIAogaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRrODVnLmRsbCAoCiAgICAgY2QgdGstOC41LjExLjBcd2luICAgIAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgaW5zdGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgaW5zdGFsbAogICAgIGNkIC4uXC4uCiApCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdCBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdAppbmRleCBlZDVjMTBlLi44M2IzODYxIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0CkBAIC03LDE1ICs3LDE1IEBACiBpZiBub3QgZXhpc3QgdGNsdGtcYmluXHRjbDg1Zy5kbGwgKAogICAgIEByZW0gYWxsIGFuZCBpbnN0YWxsIG5lZWQgdG8gYmUgc2VwYXJhdGUgaW52b2NhdGlvbnMsIG90aGVyd2lzZSBubWFrZWhscCBpcyBub3QgZm91bmQgb24gaW5zdGFsbAogICAgIGNkIHRjbC04LjUuMTEuMFx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgY2xlYW4gYWxsIAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBjbGVhbiBhbGwgCiAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKICAgICBjZCAuLlwuLgogKQogCiBpZiBub3QgZXhpc3QgdGNsdGtcYmluXHRrODVnLmRsbCAoCiAgICAgY2QgdGstOC41LjExLjBcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGNsZWFuCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBpbnN0YWxsCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGNsZWFuCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuMTEuMCBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKZGlmZiAtLWdpdCBhL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkgYi9Ub29scy9jbGluaWMvY2xpbmljLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNiNGQ2YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9jbGluaWMvY2xpbmljLnB5CkBAIC0wLDAgKzEsMjQ5MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIworIyBBcmd1bWVudCBDbGluaWMKKyMgQ29weXJpZ2h0IDIwMTItMjAxMyBieSBMYXJyeSBIYXN0aW5ncy4KKyMgTGljZW5zZWQgdG8gdGhlIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KKyMKKworaW1wb3J0IGFiYworaW1wb3J0IGFzdAoraW1wb3J0IGF0ZXhpdAoraW1wb3J0IGNsaW5pYworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRleHR3cmFwCisKKworIyBUT0RPOgorIyBjb252ZXJ0ZXJzIGZvcgorIworIyAgICAgICBlcworIyAgICAgICBlcyMKKyMgICAgICAgZXQKKyMgICAgICAgZXQjCisjICAgICAgIHMjCisjICAgICAgIHUjCisjICAgICAgIHkjCisjICAgICAgIHojCisjICAgICAgIFojCisjCisjIHNvb246CisjCisjICogYWxsb3cgbWl4aW5nIGFueSB0d28gb2Yge3Bvc2l0aW9uYWwtb25seSwgcG9zaXRpb25hbC1vci1rZXl3b3JkLAorIyAgIGtleXdvcmQtb25seX0KKyMgICAgICAgKiBkaWN0IGNvbnN0cnVjdG9yIHVzZXMgcG9zaXRpb25hbC1vbmx5IGFuZCBrZXl3b3JkLW9ubHkKKyMgICAgICAgKiBtYXggYW5kIG1pbiB1c2UgcG9zaXRpb25hbCBvbmx5IHdpdGggYW4gb3B0aW9uYWwgZ3JvdXAKKyMgICAgICAgICBhbmQga2V5d29yZC1vbmx5CisjCisjICogR2VuZXJhdGUgZm9yd2FyZCBzbGFzaCBmb3IgZG9jc3RyaW5nIGZpcnN0IGxpbmUKKyMgICAoaWYgSSBnZXQgcG9zaXRpb25hbC1vbmx5IHN5bnRheCBwZXAgYWNjZXB0ZWQpCisjCisjICogQWRkICJ2ZXJzaW9uIiBkaXJlY3RpdmUsIHNvIHdlIGNhbiBjb21wbGFpbiBpZiB0aGUgZmlsZQorIyAgIGlzIHRvbyBuZXcgZm9yIHVzLgorIworCitfZW1wdHkgPSBpbnNwZWN0Ll9lbXB0eQorX3ZvaWQgPSBpbnNwZWN0Ll92b2lkCisKKworY2xhc3MgVW5zcGVjaWZpZWQ6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxVbnNwZWNpZmllZD4nCisKK3Vuc3BlY2lmaWVkID0gVW5zcGVjaWZpZWQoKQorCisKK2NsYXNzIE51bGw6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxOdWxsPicKKworTlVMTCA9IE51bGwoKQorCisKK2RlZiBfdGV4dF9hY2N1bXVsYXRvcigpOgorICAgIHRleHQgPSBbXQorICAgIGRlZiBvdXRwdXQoKToKKyAgICAgICAgcyA9ICcnLmpvaW4odGV4dCkKKyAgICAgICAgdGV4dC5jbGVhcigpCisgICAgICAgIHJldHVybiBzCisgICAgcmV0dXJuIHRleHQsIHRleHQuYXBwZW5kLCBvdXRwdXQKKworCitkZWYgdGV4dF9hY2N1bXVsYXRvcigpOgorICAgICIiIgorICAgIENyZWF0ZXMgYSBzaW1wbGUgdGV4dCBhY2N1bXVsYXRvciAvIGpvaW5lci4KKworICAgIFJldHVybnMgYSBwYWlyIG9mIGNhbGxhYmxlczoKKyAgICAgICAgYXBwZW5kLCBvdXRwdXQKKyAgICAiYXBwZW5kIiBhcHBlbmRzIGEgc3RyaW5nIHRvIHRoZSBhY2N1bXVsYXRvci4KKyAgICAib3V0cHV0IiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgYWNjdW11bGF0b3IKKyAgICAgICBqb2luZWQgdG9nZXRoZXIgKCcnLmpvaW4oYWNjdW11bGF0b3IpKSBhbmQKKyAgICAgICBlbXB0aWVzIHRoZSBhY2N1bXVsYXRvci4KKyAgICAiIiIKKyAgICB0ZXh0LCBhcHBlbmQsIG91dHB1dCA9IF90ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICByZXR1cm4gYXBwZW5kLCBvdXRwdXQKKworCitkZWYgZmFpbCgqYXJncywgZmlsZW5hbWU9Tm9uZSwgbGluZV9udW1iZXI9Tm9uZSk6CisgICAgam9pbmVkID0gIiAiLmpvaW4oW3N0cihhKSBmb3IgYSBpbiBhcmdzXSkKKyAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgIGFkZCgiRXJyb3IiKQorICAgIGlmIGNsaW5pYzoKKyAgICAgICAgaWYgZmlsZW5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gY2xpbmljLmZpbGVuYW1lCisgICAgICAgIGlmIGNsaW5pYy5ibG9ja19wYXJzZXIgYW5kIChsaW5lX251bWJlciBpcyBOb25lKToKKyAgICAgICAgICAgIGxpbmVfbnVtYmVyID0gY2xpbmljLmJsb2NrX3BhcnNlci5saW5lX251bWJlcgorICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBhZGQoJyBpbiBmaWxlICInICsgZmlsZW5hbWUgKyAnIicpCisgICAgaWYgbGluZV9udW1iZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGFkZCgiIG9uIGxpbmUgIiArIHN0cihsaW5lX251bWJlcikpCisgICAgYWRkKCc6XG4nKQorICAgIGFkZChqb2luZWQpCisgICAgcHJpbnQob3V0cHV0KCkpCisgICAgc3lzLmV4aXQoLTEpCisKKworCitkZWYgcXVvdGVkX2Zvcl9jX3N0cmluZyhzKToKKyAgICBmb3Igb2xkLCBuZXcgaW4gKAorICAgICAgICAoJyInLCAnXFwiJyksCisgICAgICAgICgiJyIsICJcXCciKSwKKyAgICAgICAgKToKKyAgICAgICAgcyA9IHMucmVwbGFjZShvbGQsIG5ldykKKyAgICByZXR1cm4gcworCitpc19sZWdhbF9jX2lkZW50aWZpZXIgPSByZS5jb21waWxlKCdeW0EtWmEtel9dW0EtWmEtejAtOV9dKiQnKS5tYXRjaAorCitkZWYgaXNfbGVnYWxfcHlfaWRlbnRpZmllcihzKToKKyAgICByZXR1cm4gYWxsKGlzX2xlZ2FsX2NfaWRlbnRpZmllcihmaWVsZCkgZm9yIGZpZWxkIGluIHMuc3BsaXQoJy4nKSkKKworIyBhZGRlZCAic2VsZiIsICJjbHMiLCBhbmQgIm51bGwiIGp1c3QgdG8gYmUgc2FmZQorIyAoY2xpbmljIHdpbGwgZ2VuZXJhdGUgdmFyaWFibGVzIHdpdGggdGhlc2UgbmFtZXMpCitjX2tleXdvcmRzID0gc2V0KCIiIgorYXNtIGF1dG8gYnJlYWsgY2FzZSBjaGFyIGNscyBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRvIGRvdWJsZQorZWxzZSBlbnVtIGV4dGVybiBmbG9hdCBmb3IgZ290byBpZiBpbmxpbmUgaW50IGxvbmcgbnVsbCByZWdpc3RlcgorcmV0dXJuIHNlbGYgc2hvcnQgc2lnbmVkIHNpemVvZiBzdGF0aWMgc3RydWN0IHN3aXRjaCB0eXBlZGVmCit0eXBlb2YgdW5pb24gdW5zaWduZWQgdm9pZCB2b2xhdGlsZSB3aGlsZQorIiIiLnN0cmlwKCkuc3BsaXQoKSkKKworZGVmIGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIocyk6CisgICAgIyBmb3Igbm93LCBqdXN0IGNvbXBsYWluIGlmIHdoYXQgd2UncmUgZ2l2ZW4gaXNuJ3QgbGVnYWwKKyAgICBpZiBub3QgaXNfbGVnYWxfY19pZGVudGlmaWVyKHMpOgorICAgICAgICBmYWlsKCJJbGxlZ2FsIEMgaWRlbnRpZmllcjoge30iLmZvcm1hdChzKSkKKyAgICAjIGJ1dCBpZiB3ZSBwaWNrZWQgYSBDIGtleXdvcmQsIHBpY2sgc29tZXRoaW5nIGVsc2UKKyAgICBpZiBzIGluIGNfa2V5d29yZHM6CisgICAgICAgIHJldHVybiBzICsgIl92YWx1ZSIKKyAgICByZXR1cm4gcworCitkZWYgcnN0cmlwX2xpbmVzKHMpOgorICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgIGZvciBsaW5lIGluIHMuc3BsaXQoJ1xuJyk6CisgICAgICAgIGFkZChsaW5lLnJzdHJpcCgpKQorICAgICAgICBhZGQoJ1xuJykKKyAgICB0ZXh0LnBvcCgpCisgICAgcmV0dXJuIG91dHB1dCgpCisKK2RlZiBsaW5lYXJfZm9ybWF0KHMsICoqa3dhcmdzKToKKyAgICAiIiIKKyAgICBQZXJmb3JtIHN0ci5mb3JtYXQtbGlrZSBzdWJzdGl0dXRpb24sIGV4Y2VwdDoKKyAgICAgICogVGhlIHN0cmluZ3Mgc3Vic3RpdHV0ZWQgbXVzdCBiZSBvbiBsaW5lcyBieQorICAgICAgICB0aGVtc2VsdmVzLiAgKFRoaXMgbGluZSBpcyB0aGUgInNvdXJjZSBsaW5lIi4pCisgICAgICAqIElmIHRoZSBzdWJzdGl0dXRpb24gdGV4dCBpcyBlbXB0eSwgdGhlIHNvdXJjZSBsaW5lCisgICAgICAgIGlzIHJlbW92ZWQgaW4gdGhlIG91dHB1dC4KKyAgICAgICogSWYgdGhlIHN1YnN0aXR1dGlvbiB0ZXh0IGlzIG5vdCBlbXB0eToKKyAgICAgICAgICAqIEVhY2ggbGluZSBvZiB0aGUgc3Vic3RpdHV0ZWQgdGV4dCBpcyBpbmRlbnRlZAorICAgICAgICAgICAgYnkgdGhlIGluZGVudCBvZiB0aGUgc291cmNlIGxpbmUuCisgICAgICAgICAgKiBBIG5ld2xpbmUgd2lsbCBiZSBhZGRlZCB0byB0aGUgZW5kLgorICAgICIiIgorCisgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICBmb3IgbGluZSBpbiBzLnNwbGl0KCdcbicpOgorICAgICAgICBpbmRlbnQsIGN1cmx5LCB0cmFpbGluZyA9IGxpbmUucGFydGl0aW9uKCd7JykKKyAgICAgICAgaWYgbm90IGN1cmx5OgorICAgICAgICAgICAgYWRkKGxpbmUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbmFtZSwgY3VybCwgdHJhaWxpbmcgPSB0cmFpbGluZy5wYXJ0aXRpb24oJ30nKQorICAgICAgICBpZiBub3QgY3VybHkgb3IgbmFtZSBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgYWRkKGxpbmUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgdHJhaWxpbmc6CisgICAgICAgICAgICBmYWlsKCJUZXh0IGZvdW5kIGFmdGVyIHsiICsgbmFtZSArICJ9IGJsb2NrIG1hcmtlciEgIEl0IG11c3QgYmUgb24gYSBsaW5lIGJ5IGl0c2VsZi4iKQorICAgICAgICBpZiBpbmRlbnQuc3RyaXAoKToKKyAgICAgICAgICAgIGZhaWwoIk5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgZm91bmQgYmVmb3JlIHsiICsgbmFtZSArICJ9IGJsb2NrIG1hcmtlciEgIEl0IG11c3QgYmUgb24gYSBsaW5lIGJ5IGl0c2VsZi4iKQorCisgICAgICAgIHZhbHVlID0ga3dhcmdzW25hbWVdCisgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdmFsdWUgPSB0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHZhbHVlKSwgaW5kZW50KQorICAgICAgICBhZGQodmFsdWUpCisgICAgICAgIGFkZCgnXG4nKQorCisgICAgcmV0dXJuIG91dHB1dCgpWzotMV0KKworCitjbGFzcyBDUmVuZGVyRGF0YToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisKKyAgICAgICAgIyBUaGUgQyBzdGF0ZW1lbnRzIHRvIGRlY2xhcmUgdmFyaWFibGVzLgorICAgICAgICAjIFNob3VsZCBiZSBmdWxsIGxpbmVzIHdpdGggXG4gZW9sIGNoYXJhY3RlcnMuCisgICAgICAgIHNlbGYuZGVjbGFyYXRpb25zID0gW10KKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGVzIGJlZm9yZSB0aGUgcGFyc2UgY2FsbC4KKyAgICAgICAgIyBTaG91bGQgYmUgZnVsbCBsaW5lcyB3aXRoIFxuIGVvbCBjaGFyYWN0ZXJzLgorICAgICAgICBzZWxmLmluaXRpYWxpemVycyA9IFtdCisKKyAgICAgICAgIyBUaGUgZW50cmllcyBmb3IgdGhlICJrZXl3b3JkcyIgYXJyYXkgZm9yIFB5QXJnX1BhcnNlVHVwbGUuCisgICAgICAgICMgU2hvdWxkIGJlIGluZGl2aWR1YWwgc3RyaW5ncyByZXByZXNlbnRpbmcgdGhlIG5hbWVzLgorICAgICAgICBzZWxmLmtleXdvcmRzID0gW10KKworICAgICAgICAjIFRoZSAiZm9ybWF0IHVuaXRzIiBmb3IgUHlBcmdfUGFyc2VUdXBsZS4KKyAgICAgICAgIyBTaG91bGQgYmUgaW5kaXZpZHVhbCBzdHJpbmdzIHRoYXQgd2lsbCBnZXQKKyAgICAgICAgc2VsZi5mb3JtYXRfdW5pdHMgPSBbXQorCisgICAgICAgICMgVGhlIHZhcmFyZ3MgYXJndW1lbnRzIGZvciBQeUFyZ19QYXJzZVR1cGxlLgorICAgICAgICBzZWxmLnBhcnNlX2FyZ3VtZW50cyA9IFtdCisKKyAgICAgICAgIyBUaGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGltcGwgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuaW1wbF9wYXJhbWV0ZXJzID0gW10KKworICAgICAgICAjIFRoZSBhcmd1bWVudHMgdG8gdGhlIGltcGwgZnVuY3Rpb24gYXQgdGhlIHRpbWUgaXQncyBjYWxsZWQuCisgICAgICAgIHNlbGYuaW1wbF9hcmd1bWVudHMgPSBbXQorCisgICAgICAgICMgRm9yIHJldHVybiBjb252ZXJ0ZXJzOiB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdGhhdAorICAgICAgICAjIHNob3VsZCByZWNlaXZlIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgaW1wbC4KKyAgICAgICAgc2VsZi5yZXR1cm5fdmFsdWUgPSAicmV0dXJuX3ZhbHVlIgorCisgICAgICAgICMgRm9yIHJldHVybiBjb252ZXJ0ZXJzOiB0aGUgY29kZSB0byBjb252ZXJ0IHRoZSByZXR1cm4KKyAgICAgICAgIyB2YWx1ZSBmcm9tIHRoZSBwYXJzZSBmdW5jdGlvbi4gIFRoaXMgaXMgYWxzbyB3aGVyZQorICAgICAgICAjIHlvdSBzaG91bGQgY2hlY2sgdGhlIF9yZXR1cm5fdmFsdWUgZm9yIGVycm9ycywgYW5kCisgICAgICAgICMgImdvdG8gZXhpdCIgaWYgdGhlcmUgYXJlIGFueS4KKyAgICAgICAgc2VsZi5yZXR1cm5fY29udmVyc2lvbiA9IFtdCisKKyAgICAgICAgIyBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIGNsZWFuIHVwIGFmdGVyIHRoZSBpbXBsIGNhbGwuCisgICAgICAgIHNlbGYuY2xlYW51cCA9IFtdCisKKworY2xhc3MgTGFuZ3VhZ2UobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKKworICAgIHN0YXJ0X2xpbmUgPSAiIgorICAgIGJvZHlfcHJlZml4ID0gIiIKKyAgICBzdG9wX2xpbmUgPSAiIgorICAgIGNoZWNrc3VtX2xpbmUgPSAiIgorCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiByZW5kZXIoc2VsZiwgYmxvY2spOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgIGRlZiBhc3NlcnRfb25seV9vbmUoZmllbGQsIHRva2VuPSdkc2xfbmFtZScpOgorICAgICAgICAgICAgbGluZSA9IGdldGF0dHIoc2VsZiwgZmllbGQpCisgICAgICAgICAgICB0b2tlbiA9ICd7JyArIHRva2VuICsgJ30nCisgICAgICAgICAgICBpZiBsZW4obGluZS5zcGxpdCh0b2tlbikpICE9IDI6CisgICAgICAgICAgICAgICAgZmFpbChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICIgIiArIGZpZWxkICsgIiBtdXN0IGNvbnRhaW4gIiArIHRva2VuICsgIiBleGFjdGx5IG9uY2UhIikKKyAgICAgICAgYXNzZXJ0X29ubHlfb25lKCdzdGFydF9saW5lJykKKyAgICAgICAgYXNzZXJ0X29ubHlfb25lKCdzdG9wX2xpbmUnKQorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ2NoZWNrc3VtX2xpbmUnKQorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ2NoZWNrc3VtX2xpbmUnLCAnY2hlY2tzdW0nKQorCisgICAgICAgIGlmIGxlbihzZWxmLmJvZHlfcHJlZml4LnNwbGl0KCd7ZHNsX25hbWV9JykpID49IDM6CisgICAgICAgICAgICBmYWlsKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgIiBib2R5X3ByZWZpeCBtYXkgY29udGFpbiAiICsgdG9rZW4gKyAiIG9uY2UgYXQgbW9zdCEiKQorCisKKworY2xhc3MgUHl0aG9uTGFuZ3VhZ2UoTGFuZ3VhZ2UpOgorCisgICAgbGFuZ3VhZ2UgICAgICA9ICdQeXRob24nCisgICAgc3RhcnRfbGluZSAgICA9ICIjLypbe2RzbF9uYW1lfV0iCisgICAgYm9keV9wcmVmaXggICA9ICIjIgorICAgIHN0b3BfbGluZSAgICAgPSAiI1t7ZHNsX25hbWV9XSovIgorICAgIGNoZWNrc3VtX2xpbmUgPSAiIy8qW3tkc2xfbmFtZX0gY2hlY2tzdW06IHtjaGVja3N1bX1dKi8iCisKKworZGVmIHBlcm11dGVfbGVmdF9vcHRpb25fZ3JvdXBzKGwpOgorICAgICIiIgorICAgIEdpdmVuIFsxLCAyLCAzXSwgc2hvdWxkIHlpZWxkOgorICAgICAgICgpCisgICAgICAgKDMsKQorICAgICAgICgyLCAzKQorICAgICAgICgxLCAyLCAzKQorICAgICIiIgorICAgIHlpZWxkIHR1cGxlKCkKKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgZm9yIGdyb3VwIGluIHJldmVyc2VkKGwpOgorICAgICAgICBhY2N1bXVsYXRvciA9IGxpc3QoZ3JvdXApICsgYWNjdW11bGF0b3IKKyAgICAgICAgeWllbGQgdHVwbGUoYWNjdW11bGF0b3IpCisKKworZGVmIHBlcm11dGVfcmlnaHRfb3B0aW9uX2dyb3VwcyhsKToKKyAgICAiIiIKKyAgICBHaXZlbiBbMSwgMiwgM10sIHNob3VsZCB5aWVsZDoKKyAgICAgICgpCisgICAgICAoMSwpCisgICAgICAoMSwgMikKKyAgICAgICgxLCAyLCAzKQorICAgICIiIgorICAgIHlpZWxkIHR1cGxlKCkKKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgZm9yIGdyb3VwIGluIGw6CisgICAgICAgIGFjY3VtdWxhdG9yLmV4dGVuZChncm91cCkKKyAgICAgICAgeWllbGQgdHVwbGUoYWNjdW11bGF0b3IpCisKKworZGVmIHBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKGxlZnQsIHJlcXVpcmVkLCByaWdodCk6CisgICAgIiIiCisgICAgR2VuZXJhdG9yIGZ1bmN0aW9uIHRoYXQgY29tcHV0ZXMgdGhlIHNldCBvZiBhY2NlcHRhYmxlCisgICAgYXJndW1lbnQgbGlzdHMgZm9yIHRoZSBwcm92aWRlZCBpdGVyYWJsZXMgb2YKKyAgICBhcmd1bWVudCBncm91cHMuICAoQWN0dWFsbHkgaXQgZ2VuZXJhdGVzIGEgdHVwbGUgb2YgdHVwbGVzLikKKworICAgIEFsZ29yaXRobTogcHJlZmVyIGxlZnQgb3B0aW9ucyBvdmVyIHJpZ2h0IG9wdGlvbnMuCisKKyAgICBJZiByZXF1aXJlZCBpcyBlbXB0eSwgbGVmdCBtdXN0IGFsc28gYmUgZW1wdHkuCisgICAgIiIiCisgICAgcmVxdWlyZWQgPSB0dXBsZShyZXF1aXJlZCkKKyAgICByZXN1bHQgPSBbXQorCisgICAgaWYgbm90IHJlcXVpcmVkOgorICAgICAgICBhc3NlcnQgbm90IGxlZnQKKworICAgIGFjY3VtdWxhdG9yID0gW10KKyAgICBjb3VudHMgPSBzZXQoKQorICAgIGZvciByIGluIHBlcm11dGVfcmlnaHRfb3B0aW9uX2dyb3VwcyhyaWdodCk6CisgICAgICAgIGZvciBsIGluIHBlcm11dGVfbGVmdF9vcHRpb25fZ3JvdXBzKGxlZnQpOgorICAgICAgICAgICAgdCA9IGwgKyByZXF1aXJlZCArIHIKKyAgICAgICAgICAgIGlmIGxlbih0KSBpbiBjb3VudHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvdW50cy5hZGQobGVuKHQpKQorICAgICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kKHQpCisKKyAgICBhY2N1bXVsYXRvci5zb3J0KGtleT1sZW4pCisgICAgcmV0dXJuIHR1cGxlKGFjY3VtdWxhdG9yKQorCisKK2NsYXNzIENMYW5ndWFnZShMYW5ndWFnZSk6CisKKyAgICBsYW5ndWFnZSAgICAgID0gJ0MnCisgICAgc3RhcnRfbGluZSAgICA9ICIvKlt7ZHNsX25hbWV9XSIKKyAgICBib2R5X3ByZWZpeCAgID0gIiIKKyAgICBzdG9wX2xpbmUgICAgID0gIlt7ZHNsX25hbWV9XSovIgorICAgIGNoZWNrc3VtX2xpbmUgPSAiLypbe2RzbF9uYW1lfSBjaGVja3N1bToge2NoZWNrc3VtfV0qLyIKKworICAgIGRlZiByZW5kZXIoc2VsZiwgc2lnbmF0dXJlcyk6CisgICAgICAgIGZ1bmN0aW9uID0gTm9uZQorICAgICAgICBmb3IgbyBpbiBzaWduYXR1cmVzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvLCBGdW5jdGlvbik6CisgICAgICAgICAgICAgICAgaWYgZnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIllvdSBtYXkgc3BlY2lmeSBhdCBtb3N0IG9uZSBmdW5jdGlvbiBwZXIgYmxvY2suXG5Gb3VuZCBhIGJsb2NrIGNvbnRhaW5pbmcgYXQgbGVhc3QgdHdvOlxuXHQiICsgcmVwcihmdW5jdGlvbikgKyAiIGFuZCAiICsgcmVwcihvKSkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IG8KKyAgICAgICAgcmV0dXJuIHNlbGYucmVuZGVyX2Z1bmN0aW9uKGZ1bmN0aW9uKQorCisgICAgZGVmIGRvY3N0cmluZ19mb3JfY19zdHJpbmcoc2VsZiwgZik6CisgICAgICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgICAgICAjIHR1cm4gZG9jc3RyaW5nIGludG8gYSBwcm9wZXJseSBxdW90ZWQgQyBzdHJpbmcKKyAgICAgICAgZm9yIGxpbmUgaW4gZi5kb2NzdHJpbmcuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBhZGQoJyInKQorICAgICAgICAgICAgYWRkKHF1b3RlZF9mb3JfY19zdHJpbmcobGluZSkpCisgICAgICAgICAgICBhZGQoJ1xcbiJcbicpCisKKyAgICAgICAgdGV4dC5wb3AoKQorICAgICAgICBhZGQoJyInKQorICAgICAgICByZXR1cm4gJycuam9pbih0ZXh0KQorCisgICAgaW1wbF9wcm90b3R5cGVfdGVtcGxhdGUgPSAie2NfYmFzZW5hbWV9X2ltcGwoe2ltcGxfcGFyYW1ldGVyc30pIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0ZW1wbGF0ZV9iYXNlKCphcmdzKToKKyAgICAgICAgZmxhZ3MgPSAnfCcuam9pbihmIGZvciBmIGluIGFyZ3MgaWYgZikKKyAgICAgICAgcmV0dXJuICIiIgorUHlEb2NfU1RSVkFSKHtjX2Jhc2VuYW1lfV9fZG9jX18sCit7ZG9jc3RyaW5nfSk7CisKKyNkZWZpbmUge21ldGhvZGRlZl9uYW1lfSAgICBcXAorICAgIHt7IntuYW1lfSIsIChQeUNGdW5jdGlvbil7Y19iYXNlbmFtZX0sIHttZXRoX2ZsYWdzfSwge2NfYmFzZW5hbWV9X19kb2NfX319LAorIiIiLnJlcGxhY2UoJ3ttZXRoX2ZsYWdzfScsIGZsYWdzKQorCisgICAgZGVmIG1ldGhfbm9hcmdzX3B5b2JqZWN0X3RlbXBsYXRlKHNlbGYsIG1ldGhfZmxhZ3M9IiIpOgorICAgICAgICByZXR1cm4gc2VsZi50ZW1wbGF0ZV9iYXNlKCJNRVRIX05PQVJHUyIsIG1ldGhfZmxhZ3MpICsgIiIiCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KFB5T2JqZWN0ICp7c2VsZl9uYW1lfSkKKyIiIgorCisgICAgZGVmIG1ldGhfbm9hcmdzX3RlbXBsYXRlKHNlbGYsIG1ldGhfZmxhZ3M9IiIpOgorICAgICAgICByZXR1cm4gc2VsZi50ZW1wbGF0ZV9iYXNlKCJNRVRIX05PQVJHUyIsIG1ldGhfZmxhZ3MpICsgIiIiCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9OworCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KFB5T2JqZWN0ICp7c2VsZl9uYW1lfSkKK3t7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAge2RlY2xhcmF0aW9uc30KKyAgICB7aW5pdGlhbGl6ZXJzfQorCisgICAge3JldHVybl92YWx1ZX0gPSB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICB7cmV0dXJuX2NvbnZlcnNpb259CisKK3tleGl0X2xhYmVsfQorICAgIHtjbGVhbnVwfQorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9fQorCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9CisiIiIKKworICAgIGRlZiBtZXRoX29fdGVtcGxhdGUoc2VsZiwgbWV0aF9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfTyIsIG1ldGhfZmxhZ3MpICsgIiIiCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtpbXBsX3BhcmFtZXRlcnN9KQorIiIiCisKKyAgICBkZWYgbWV0aF9vX3JldHVybl9jb252ZXJ0ZXJfdGVtcGxhdGUoc2VsZiwgbWV0aF9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfTyIsIG1ldGhfZmxhZ3MpICsgIiIiCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9OworCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtpbXBsX3BhcmFtZXRlcnN9KQore3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICB7ZGVjbGFyYXRpb25zfQorICAgIHtpbml0aWFsaXplcnN9CisgICAgX3JldHVybl92YWx1ZSA9IHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgIHtyZXR1cm5fY29udmVyc2lvbn0KKwore2V4aXRfbGFiZWx9CisgICAge2NsZWFudXB9CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK319CisKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX0KKyIiIgorCisgICAgZGVmIG9wdGlvbl9ncm91cF90ZW1wbGF0ZShzZWxmLCBtZXRoX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9WQVJBUkdTIiwgbWV0aF9mbGFncykgKyAiIiIKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX07CisKK3N0YXRpYyBQeU9iamVjdCAqCit7Y19iYXNlbmFtZX0oUHlPYmplY3QgKntzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncykKK3t7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAge2RlY2xhcmF0aW9uc30KKyAgICB7aW5pdGlhbGl6ZXJzfQorCisgICAge29wdGlvbl9ncm91cF9wYXJzaW5nfQorICAgIHtyZXR1cm5fdmFsdWV9ID0ge2NfYmFzZW5hbWV9X2ltcGwoe2ltcGxfYXJndW1lbnRzfSk7CisgICAge3JldHVybl9jb252ZXJzaW9ufQorCit7ZXhpdF9sYWJlbH0KKyAgICB7Y2xlYW51cH0KKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfX0KKworc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfQorIiIiCisKKyAgICBkZWYga2V5d29yZHNfdGVtcGxhdGUoc2VsZiwgbWV0aF9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTIiwgbWV0aF9mbGFncykgKyAiIiIKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX07CisKK3N0YXRpYyBQeU9iamVjdCAqCit7Y19iYXNlbmFtZX0oUHlPYmplY3QgKntzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3t7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0ge3t7a2V5d29yZHN9LCBOVUxMfX07CisgICAge2RlY2xhcmF0aW9uc30KKyAgICB7aW5pdGlhbGl6ZXJzfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAie2Zvcm1hdF91bml0c306e25hbWV9IiwgX2tleXdvcmRzLAorICAgICAgICB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB7cmV0dXJuX3ZhbHVlfSA9IHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgIHtyZXR1cm5fY29udmVyc2lvbn0KKwore2V4aXRfbGFiZWx9CisgICAge2NsZWFudXB9CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK319CisKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX0KKyIiIgorCisgICAgZGVmIHBvc2l0aW9uYWxfb25seV90ZW1wbGF0ZShzZWxmLCBtZXRoX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9WQVJBUkdTIiwgbWV0aF9mbGFncykgKyAiIiIKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX07CisKK3N0YXRpYyBQeU9iamVjdCAqCit7Y19iYXNlbmFtZX0oUHlPYmplY3QgKntzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncykKK3t7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAge2RlY2xhcmF0aW9uc30KKyAgICB7aW5pdGlhbGl6ZXJzfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLAorICAgICAgICB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB7cmV0dXJuX3ZhbHVlfSA9IHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgIHtyZXR1cm5fY29udmVyc2lvbn0KKwore2V4aXRfbGFiZWx9CisgICAge2NsZWFudXB9CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK319CisKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX0KKyIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBncm91cF90b192YXJpYWJsZV9uYW1lKGdyb3VwKToKKyAgICAgICAgYWRqZWN0aXZlID0gImxlZnRfIiBpZiBncm91cCA8IDAgZWxzZSAicmlnaHRfIgorICAgICAgICByZXR1cm4gImdyb3VwXyIgKyBhZGplY3RpdmUgKyBzdHIoYWJzKGdyb3VwKSkKKworICAgIGRlZiByZW5kZXJfb3B0aW9uX2dyb3VwX3BhcnNpbmcoc2VsZiwgZiwgdGVtcGxhdGVfZGljdCk6CisgICAgICAgICMgcG9zaXRpb25hbCBvbmx5LCBncm91cGVkLCBvcHRpb25hbCBhcmd1bWVudHMhCisgICAgICAgICMgY2FuIGJlIG9wdGlvbmFsIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0LgorICAgICAgICAjIGhlcmUncyBhbiBleGFtcGxlOgorICAgICAgICAjCisgICAgICAgICMgWyBbIFsgQTEgQTIgXSBCMSBCMiBCMyBdIEMxIEMyIF0gRDEgRDIgRDMgWyBFMSBFMiBFMyBbIEYxIEYyIEYzIF0gXQorICAgICAgICAjCisgICAgICAgICMgSGVyZSBncm91cCBEIGFyZSByZXF1aXJlZCwgYW5kIGFsbCBvdGhlciBncm91cHMgYXJlIG9wdGlvbmFsLgorICAgICAgICAjIChHcm91cCBEJ3MgImdyb3VwIiBpcyBhY3R1YWxseSBOb25lLikKKyAgICAgICAgIyBXZSBjYW4gZmlndXJlIG91dCB3aGljaCBzZXRzIG9mIGFyZ3VtZW50cyB3ZSBoYXZlIGJhc2VkIG9uCisgICAgICAgICMgaG93IG1hbnkgYXJndW1lbnRzIGFyZSBpbiB0aGUgdHVwbGUuCisgICAgICAgICMKKyAgICAgICAgIyBOb3RlIHRoYXQgeW91IG5lZWQgdG8gY291bnQgdXAgb24gYm90aCBzaWRlcy4gIEZvciBleGFtcGxlLAorICAgICAgICAjIHlvdSBjb3VsZCBoYXZlIGdyb3VwcyBDK0QsIG9yIEMrRCtFLCBvciBDK0QrRStGLgorICAgICAgICAjCisgICAgICAgICMgV2hhdCBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWFkcyB1cyB0byBhbiBhbWJpZ3VvdXMgcmVzdWx0PworICAgICAgICAjIENsaW5pYyBwcmVmZXJzIGdyb3VwcyBvbiB0aGUgbGVmdC4gIFNvIGluIHRoZSBhYm92ZSBleGFtcGxlLAorICAgICAgICAjIGZpdmUgYXJndW1lbnRzIHdvdWxkIG1hcCB0byBCK0MsIG5vdCBDK0QuCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgcGFyYW1ldGVycyA9IGxpc3QoZi5wYXJhbWV0ZXJzLnZhbHVlcygpKQorCisgICAgICAgIGdyb3VwcyA9IFtdCisgICAgICAgIGdyb3VwID0gTm9uZQorICAgICAgICBsZWZ0ID0gW10KKyAgICAgICAgcmlnaHQgPSBbXQorICAgICAgICByZXF1aXJlZCA9IFtdCisgICAgICAgIGxhc3QgPSB1bnNwZWNpZmllZAorCisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBncm91cF9pZCA9IHAuZ3JvdXAKKyAgICAgICAgICAgIGlmIGdyb3VwX2lkICE9IGxhc3Q6CisgICAgICAgICAgICAgICAgbGFzdCA9IGdyb3VwX2lkCisgICAgICAgICAgICAgICAgZ3JvdXAgPSBbXQorICAgICAgICAgICAgICAgIGlmIGdyb3VwX2lkIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgbGVmdC5hcHBlbmQoZ3JvdXApCisgICAgICAgICAgICAgICAgZWxpZiBncm91cF9pZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBncm91cCA9IHJlcXVpcmVkCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQuYXBwZW5kKGdyb3VwKQorICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKHApCisKKyAgICAgICAgY291bnRfbWluID0gc3lzLm1heHNpemUKKyAgICAgICAgY291bnRfbWF4ID0gLTEKKworICAgICAgICBhZGQoInN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7e1xuIikKKyAgICAgICAgZm9yIHN1YnNldCBpbiBwZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhsZWZ0LCByZXF1aXJlZCwgcmlnaHQpOgorICAgICAgICAgICAgY291bnQgPSBsZW4oc3Vic2V0KQorICAgICAgICAgICAgY291bnRfbWluID0gbWluKGNvdW50X21pbiwgY291bnQpCisgICAgICAgICAgICBjb3VudF9tYXggPSBtYXgoY291bnRfbWF4LCBjb3VudCkKKworICAgICAgICAgICAgZ3JvdXBfaWRzID0ge3AuZ3JvdXAgZm9yIHAgaW4gc3Vic2V0fSAgIyBlbGltaW5hdGUgZHVwbGljYXRlcworICAgICAgICAgICAgZCA9IHt9CisgICAgICAgICAgICBkWydjb3VudCddID0gY291bnQKKyAgICAgICAgICAgIGRbJ25hbWUnXSA9IGYubmFtZQorICAgICAgICAgICAgZFsnZ3JvdXBzJ10gPSBzb3J0ZWQoZ3JvdXBfaWRzKQorICAgICAgICAgICAgZFsnZm9ybWF0X3VuaXRzJ10gPSAiIi5qb2luKHAuY29udmVydGVyLmZvcm1hdF91bml0IGZvciBwIGluIHN1YnNldCkKKworICAgICAgICAgICAgcGFyc2VfYXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIHN1YnNldDoKKyAgICAgICAgICAgICAgICBwLmNvbnZlcnRlci5wYXJzZV9hcmd1bWVudChwYXJzZV9hcmd1bWVudHMpCisgICAgICAgICAgICBkWydwYXJzZV9hcmd1bWVudHMnXSA9ICIsICIuam9pbihwYXJzZV9hcmd1bWVudHMpCisKKyAgICAgICAgICAgIGdyb3VwX2lkcy5kaXNjYXJkKDApCisgICAgICAgICAgICBsaW5lcyA9IFtzZWxmLmdyb3VwX3RvX3ZhcmlhYmxlX25hbWUoZykgKyAiID0gMTsiIGZvciBnIGluIGdyb3VwX2lkc10KKyAgICAgICAgICAgIGxpbmVzID0gIlxuIi5qb2luKGxpbmVzKQorCisgICAgICAgICAgICBzID0gIiIiCisgICAgY2FzZSB7Y291bnR9OgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIHtwYXJzZV9hcmd1bWVudHN9KSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB7Z3JvdXBfYm9vbGVhbnN9CisgICAgICAgIGJyZWFrOworIiIiWzE6XQorICAgICAgICAgICAgcyA9IGxpbmVhcl9mb3JtYXQocywgZ3JvdXBfYm9vbGVhbnM9bGluZXMpCisgICAgICAgICAgICBzID0gcy5mb3JtYXRfbWFwKGQpCisgICAgICAgICAgICBhZGQocykKKworICAgICAgICBhZGQoIiAgICBkZWZhdWx0OlxuIikKKyAgICAgICAgcyA9ICcgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ7fSByZXF1aXJlcyB7fSB0byB7fSBhcmd1bWVudHMiKTtcbicKKyAgICAgICAgYWRkKHMuZm9ybWF0KGYuZnVsbF9uYW1lLCBjb3VudF9taW4sIGNvdW50X21heCkpCisgICAgICAgIGFkZCgnICAgICAgICByZXR1cm4gTlVMTDtcbicpCisgICAgICAgIGFkZCgifX0iKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydvcHRpb25fZ3JvdXBfcGFyc2luZyddID0gb3V0cHV0KCkKKworICAgIGRlZiByZW5kZXJfZnVuY3Rpb24oc2VsZiwgZik6CisgICAgICAgIGlmIG5vdCBmOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgZGF0YSA9IENSZW5kZXJEYXRhKCkKKworICAgICAgICBpZiBmLmtpbmQgPT0gU1RBVElDX01FVEhPRDoKKyAgICAgICAgICAgIG1ldGhfZmxhZ3MgPSAnTUVUSF9TVEFUSUMnCisgICAgICAgICAgICBzZWxmX25hbWUgPSAibnVsbCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGYua2luZCA9PSBDQUxMQUJMRToKKyAgICAgICAgICAgICAgICBtZXRoX2ZsYWdzID0gJycKKyAgICAgICAgICAgICAgICBzZWxmX25hbWUgPSAic2VsZiIKKyAgICAgICAgICAgIGVsaWYgZi5raW5kID09IENMQVNTX01FVEhPRDoKKyAgICAgICAgICAgICAgICBtZXRoX2ZsYWdzID0gJ01FVEhfQ0xBU1MnCisgICAgICAgICAgICAgICAgc2VsZl9uYW1lID0gImNscyIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgiVW5yZWNvZ25pemVkICdraW5kJyAiICsgcmVwcihmLmtpbmQpICsgIiBmb3IgZnVuY3Rpb24gIiArIGYubmFtZSkKKworICAgICAgICAgICAgZGF0YS5pbXBsX3BhcmFtZXRlcnMuYXBwZW5kKCJQeU9iamVjdCAqIiArIHNlbGZfbmFtZSkKKyAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuYXBwZW5kKHNlbGZfbmFtZSkKKworICAgICAgICBpZiBmLmNvZXhpc3Q6CisgICAgICAgICAgICBpZiBtZXRoX2ZsYWdzOgorICAgICAgICAgICAgICAgIG1ldGhfZmxhZ3MgKz0gJ3wnCisgICAgICAgICAgICBtZXRoX2ZsYWdzICs9ICdNRVRIX0NPRVhJU1QnCisKKyAgICAgICAgcGFyYW1ldGVycyA9IGxpc3QoZi5wYXJhbWV0ZXJzLnZhbHVlcygpKQorICAgICAgICBjb252ZXJ0ZXJzID0gW3AuY29udmVydGVyIGZvciBwIGluIHBhcmFtZXRlcnNdCisKKyAgICAgICAgdGVtcGxhdGVfZGljdCA9IHt9CisKKyAgICAgICAgZnVsbF9uYW1lID0gZi5mdWxsX25hbWUKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZnVsbF9uYW1lJ10gPSBmdWxsX25hbWUKKworICAgICAgICBuYW1lID0gZnVsbF9uYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WyduYW1lJ10gPSBuYW1lCisKKyAgICAgICAgY19iYXNlbmFtZSA9IGYuY19iYXNlbmFtZSBvciBmdWxsX25hbWUucmVwbGFjZSgiLiIsICJfIikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnY19iYXNlbmFtZSddID0gY19iYXNlbmFtZQorCisgICAgICAgIG1ldGhvZGRlZl9uYW1lID0gInt9X01FVEhPRERFRiIuZm9ybWF0KGNfYmFzZW5hbWUudXBwZXIoKSkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnbWV0aG9kZGVmX25hbWUnXSA9IG1ldGhvZGRlZl9uYW1lCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZG9jc3RyaW5nJ10gPSBzZWxmLmRvY3N0cmluZ19mb3JfY19zdHJpbmcoZikKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0WydzZWxmX25hbWUnXSA9IHNlbGZfbmFtZQorCisgICAgICAgIHBvc2l0aW9uYWwgPSBoYXNfb3B0aW9uX2dyb3VwcyA9ICBGYWxzZQorCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBsYXN0X2dyb3VwID0gMAorCisgICAgICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGMgPSBwLmNvbnZlcnRlcgorCisgICAgICAgICAgICAgICAgIyBpbnNlcnQgZ3JvdXAgdmFyaWFibGUKKyAgICAgICAgICAgICAgICBncm91cCA9IHAuZ3JvdXAKKyAgICAgICAgICAgICAgICBpZiBsYXN0X2dyb3VwICE9IGdyb3VwOgorICAgICAgICAgICAgICAgICAgICBsYXN0X2dyb3VwID0gZ3JvdXAKKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXA6CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cF9uYW1lID0gc2VsZi5ncm91cF90b192YXJpYWJsZV9uYW1lKGdyb3VwKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50cy5hcHBlbmQoZ3JvdXBfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZGVjbGFyYXRpb25zLmFwcGVuZCgiaW50ICIgKyBncm91cF9uYW1lICsgIiA9IDA7IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaW1wbF9wYXJhbWV0ZXJzLmFwcGVuZCgiaW50ICIgKyBncm91cF9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzX29wdGlvbl9ncm91cHMgPSBUcnVlCisgICAgICAgICAgICAgICAgYy5yZW5kZXIocCwgZGF0YSkKKworICAgICAgICAgICAgcG9zaXRpb25hbCA9IHBhcmFtZXRlcnNbLTFdLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgICAgICAgICBpZiBoYXNfb3B0aW9uX2dyb3VwczoKKyAgICAgICAgICAgICAgICBhc3NlcnQgcG9zaXRpb25hbAorCisgICAgICAgIGYucmV0dXJuX2NvbnZlcnRlci5yZW5kZXIoZiwgZGF0YSkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW1wbF9yZXR1cm5fdHlwZSddID0gZi5yZXR1cm5fY29udmVydGVyLnR5cGUKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0WydkZWNsYXJhdGlvbnMnXSA9ICJcbiIuam9pbihkYXRhLmRlY2xhcmF0aW9ucykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW5pdGlhbGl6ZXJzJ10gPSAiXG5cbiIuam9pbihkYXRhLmluaXRpYWxpemVycykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsna2V5d29yZHMnXSA9ICciJyArICciLCAiJy5qb2luKGRhdGEua2V5d29yZHMpICsgJyInCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2Zvcm1hdF91bml0cyddID0gJycuam9pbihkYXRhLmZvcm1hdF91bml0cykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsncGFyc2VfYXJndW1lbnRzJ10gPSAnLCAnLmpvaW4oZGF0YS5wYXJzZV9hcmd1bWVudHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcGFyYW1ldGVycyddID0gIiwgIi5qb2luKGRhdGEuaW1wbF9wYXJhbWV0ZXJzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX2FyZ3VtZW50cyddID0gIiwgIi5qb2luKGRhdGEuaW1wbF9hcmd1bWVudHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3JldHVybl9jb252ZXJzaW9uJ10gPSAiIi5qb2luKGRhdGEucmV0dXJuX2NvbnZlcnNpb24pLnJzdHJpcCgpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2NsZWFudXAnXSA9ICIiLmpvaW4oZGF0YS5jbGVhbnVwKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydyZXR1cm5fdmFsdWUnXSA9IGRhdGEucmV0dXJuX3ZhbHVlCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW1wbF9wcm90b3R5cGUnXSA9IHNlbGYuaW1wbF9wcm90b3R5cGVfdGVtcGxhdGUuZm9ybWF0X21hcCh0ZW1wbGF0ZV9kaWN0KQorCisgICAgICAgIGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlciA9IChub3QgZi5yZXR1cm5fY29udmVydGVyIG9yCisgICAgICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIudHlwZSA9PSAnUHlPYmplY3QgKicpCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnM6CisgICAgICAgICAgICBpZiBkZWZhdWx0X3JldHVybl9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm1ldGhfbm9hcmdzX3B5b2JqZWN0X3RlbXBsYXRlKG1ldGhfZmxhZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5tZXRoX25vYXJnc190ZW1wbGF0ZShtZXRoX2ZsYWdzKQorICAgICAgICBlbGlmIChsZW4ocGFyYW1ldGVycykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgcGFyYW1ldGVyc1swXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSBhbmQKKyAgICAgICAgICAgICAgbm90IGNvbnZlcnRlcnNbMF0uaXNfb3B0aW9uYWwoKSBhbmQKKyAgICAgICAgICAgICAgaXNpbnN0YW5jZShjb252ZXJ0ZXJzWzBdLCBvYmplY3RfY29udmVydGVyKSBhbmQKKyAgICAgICAgICAgICAgY29udmVydGVyc1swXS5mb3JtYXRfdW5pdCA9PSAnTycpOgorICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5tZXRoX29fdGVtcGxhdGUobWV0aF9mbGFncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBIQUNLCisgICAgICAgICAgICAgICAgIyB3ZSdyZSB1c2luZyAiaW1wbF9wYXJhbWV0ZXJzIiBmb3IgdGhlCisgICAgICAgICAgICAgICAgIyBub24taW1wbCBmdW5jdGlvbiwgYmVjYXVzZSB0aGF0IHdvcmtzCisgICAgICAgICAgICAgICAgIyBiZXR0ZXIgZm9yIE1FVEhfTy4gIGJ1dCB0aGF0IG1lYW5zIHdlCisgICAgICAgICAgICAgICAgIyBtdXN0IHN1cnByZXNzIGFjdHVhbGx5IGRlY2xhcmluZyB0aGUKKyAgICAgICAgICAgICAgICAjIGltcGwncyBwYXJhbWV0ZXJzIGFzIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAjIG5vbi1pbXBsLiAgYnV0IHNpbmNlIGl0J3MgTUVUSF9PLCB3ZQorICAgICAgICAgICAgICAgICMgb25seSBoYXZlIG9uZSBhbnl3YXksIGFuZCBpdCdzIHRoZSBmaXJzdCBvbmUuCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zX2NvcHkgPSBsaXN0KGRhdGEuZGVjbGFyYXRpb25zKQorICAgICAgICAgICAgICAgIGJlZm9yZSwgcHlvYmplY3QsIGFmdGVyID0gZGVjbGFyYXRpb25zX2NvcHlbMF0ucGFydGl0aW9uKCdQeU9iamVjdCAqJykKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IGJlZm9yZSwgImhhY2sgZmFpbGVkLCBzZWUgY29tbWVudCIKKyAgICAgICAgICAgICAgICBhc3NlcnQgcHlvYmplY3QsICJoYWNrIGZhaWxlZCwgc2VlIGNvbW1lbnQiCisgICAgICAgICAgICAgICAgYXNzZXJ0IGFmdGVyIGFuZCBhZnRlclswXS5pc2FscGhhKCksICJoYWNrIGZhaWxlZCwgc2VlIGNvbW1lbnQiCisgICAgICAgICAgICAgICAgZGVsIGRlY2xhcmF0aW9uc19jb3B5WzBdCisgICAgICAgICAgICAgICAgdGVtcGxhdGVfZGljdFsnZGVjbGFyYXRpb25zJ10gPSAiXG4iLmpvaW4oZGVjbGFyYXRpb25zX2NvcHkpCisgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm1ldGhfb19yZXR1cm5fY29udmVydGVyX3RlbXBsYXRlKG1ldGhfZmxhZ3MpCisgICAgICAgIGVsaWYgaGFzX29wdGlvbl9ncm91cHM6CisgICAgICAgICAgICBzZWxmLnJlbmRlcl9vcHRpb25fZ3JvdXBfcGFyc2luZyhmLCB0ZW1wbGF0ZV9kaWN0KQorICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm9wdGlvbl9ncm91cF90ZW1wbGF0ZShtZXRoX2ZsYWdzKQorICAgICAgICAgICAgdGVtcGxhdGUgPSBsaW5lYXJfZm9ybWF0KHRlbXBsYXRlLAorICAgICAgICAgICAgICAgIG9wdGlvbl9ncm91cF9wYXJzaW5nPXRlbXBsYXRlX2RpY3RbJ29wdGlvbl9ncm91cF9wYXJzaW5nJ10pCisgICAgICAgIGVsaWYgcG9zaXRpb25hbDoKKyAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5wb3NpdGlvbmFsX29ubHlfdGVtcGxhdGUobWV0aF9mbGFncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5rZXl3b3Jkc190ZW1wbGF0ZShtZXRoX2ZsYWdzKQorCisgICAgICAgIHRlbXBsYXRlID0gbGluZWFyX2Zvcm1hdCh0ZW1wbGF0ZSwKKyAgICAgICAgICAgIGRlY2xhcmF0aW9ucz10ZW1wbGF0ZV9kaWN0WydkZWNsYXJhdGlvbnMnXSwKKyAgICAgICAgICAgIHJldHVybl9jb252ZXJzaW9uPXRlbXBsYXRlX2RpY3RbJ3JldHVybl9jb252ZXJzaW9uJ10sCisgICAgICAgICAgICBpbml0aWFsaXplcnM9dGVtcGxhdGVfZGljdFsnaW5pdGlhbGl6ZXJzJ10sCisgICAgICAgICAgICBjbGVhbnVwPXRlbXBsYXRlX2RpY3RbJ2NsZWFudXAnXSwKKyAgICAgICAgICAgICkKKworICAgICAgICAjIE9ubHkgZ2VuZXJhdGUgdGhlICJleGl0OiIgbGFiZWwKKyAgICAgICAgIyBpZiB3ZSBoYXZlIGFueSBnb3RvcworICAgICAgICBuZWVkX2V4aXRfbGFiZWwgPSAiZ290byBleGl0OyIgaW4gdGVtcGxhdGUKKyAgICAgICAgdGVtcGxhdGUgPSBsaW5lYXJfZm9ybWF0KHRlbXBsYXRlLAorICAgICAgICAgICAgZXhpdF9sYWJlbD0iZXhpdDoiIGlmIG5lZWRfZXhpdF9sYWJlbCBlbHNlICcnCisgICAgICAgICAgICApCisKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlLmZvcm1hdF9tYXAodGVtcGxhdGVfZGljdCkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIE92ZXJyaWRlU3RkaW9XaXRoKHN0ZG91dCk6CisgICAgc2F2ZWRfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKKyAgICB0cnk6CisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgYXNzZXJ0IHN5cy5zdGRvdXQgaXMgc3Rkb3V0CisgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlZF9zdGRvdXQKKworCitkZWYgY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIpOgorICAgICIiIkNyZWF0ZSBhbiByZSBvYmplY3QgZm9yIG1hdGNoaW5nIG1hcmtlciBsaW5lcy4iIiIKKyAgICBwYXR0ZXJuID0gcidee30oXHcrKXt9JCcKKyAgICByZXR1cm4gcmUuY29tcGlsZShwYXR0ZXJuLmZvcm1hdChyZS5lc2NhcGUoYmVmb3JlKSwgcmUuZXNjYXBlKGFmdGVyKSkpCisKKworY2xhc3MgQmxvY2s6CisgICAgciIiIgorICAgIFJlcHJlc2VudHMgYSBzaW5nbGUgYmxvY2sgb2YgdGV4dCBlbWJlZGRlZCBpbgorICAgIGFub3RoZXIgZmlsZS4gIElmIGRzbF9uYW1lIGlzIE5vbmUsIHRoZSBibG9jayByZXByZXNlbnRzCisgICAgdmVyYmF0aW0gdGV4dCwgcmF3IG9yaWdpbmFsIHRleHQgZnJvbSB0aGUgZmlsZSwgaW4KKyAgICB3aGljaCBjYXNlICJpbnB1dCIgd2lsbCBiZSB0aGUgb25seSBub24tZmFsc2UgbWVtYmVyLgorICAgIElmIGRzbF9uYW1lIGlzIG5vdCBOb25lLCB0aGUgYmxvY2sgcmVwcmVzZW50cyBhIENsaW5pYworICAgIGJsb2NrLgorCisgICAgaW5wdXQgaXMgYWx3YXlzIHN0ciwgd2l0aCBlbWJlZGRlZCBcbiBjaGFyYWN0ZXJzLgorICAgIGlucHV0IHJlcHJlc2VudHMgdGhlIG9yaWdpbmFsIHRleHQgZnJvbSB0aGUgZmlsZTsKKyAgICBpZiBpdCdzIGEgQ2xpbmljIGJsb2NrLCBpdCBpcyB0aGUgb3JpZ2luYWwgdGV4dCB3aXRoCisgICAgdGhlIGJvZHlfcHJlZml4IGFuZCByZWR1bmRhbnQgbGVhZGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQuCisKKyAgICBkc2xfbmFtZSBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJZiBzdHIsIGl0J3MgdGhlIHRleHQKKyAgICBmb3VuZCBvbiB0aGUgc3RhcnQgbGluZSBvZiB0aGUgYmxvY2sgYmV0d2VlbiB0aGUgc3F1YXJlCisgICAgYnJhY2tldHMuCisKKyAgICBzaWduYXR1cmVzIGlzIGVpdGhlciBsaXN0IG9yIE5vbmUuICBJZiBpdCdzIGEgbGlzdCwKKyAgICBpdCBtYXkgb25seSBjb250YWluIGNsaW5pYy5Nb2R1bGUsIGNsaW5pYy5DbGFzcywgYW5kCisgICAgY2xpbmljLkZ1bmN0aW9uIG9iamVjdHMuICBBdCB0aGUgbW9tZW50IGl0IHNob3VsZAorICAgIGNvbnRhaW4gYXQgbW9zdCBvbmUgb2YgZWFjaC4KKworICAgIG91dHB1dCBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJZiBzdHIsIGl0J3MgdGhlIG91dHB1dAorICAgIGZyb20gdGhpcyBibG9jaywgd2l0aCBlbWJlZGRlZCAnXG4nIGNoYXJhY3RlcnMuCisKKyAgICBpbmRlbnQgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSXQncyB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlCisgICAgdGhhdCB3YXMgZm91bmQgb24gZXZlcnkgbGluZSBvZiBpbnB1dC4gIChJZiBib2R5X3ByZWZpeCBpcworICAgIG5vdCBlbXB0eSwgdGhpcyBpcyB0aGUgaW5kZW50ICphZnRlciogcmVtb3ZpbmcgdGhlCisgICAgYm9keV9wcmVmaXguKQorCisgICAgcHJlaW5kZW50IGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIEl0J3MgdGhlIHdoaXRlc3BhY2UgdGhhdAorICAgIHdhcyBmb3VuZCBpbiBmcm9udCBvZiBldmVyeSBsaW5lIG9mIGlucHV0ICpiZWZvcmUqIHRoZQorICAgICJib2R5X3ByZWZpeCIgKHNlZSB0aGUgTGFuZ3VhZ2Ugb2JqZWN0KS4gIElmIGJvZHlfcHJlZml4CisgICAgaXMgZW1wdHksIHByZWluZGVudCBtdXN0IGFsd2F5cyBiZSBlbXB0eSB0b28uCisKKyAgICBUbyBpbGx1c3RyYXRlIGluZGVudCBhbmQgcHJlaW5kZW50OiBBc3N1bWUgdGhhdCAnXycKKyAgICByZXByZXNlbnRzIHdoaXRlc3BhY2UuICBJZiB0aGUgYmxvY2sgcHJvY2Vzc2VkIHdhcyBpbiBhCisgICAgUHl0aG9uIGZpbGUsIGFuZCBsb29rZWQgbGlrZSB0aGlzOgorICAgICAgX19fXyMvKltweXRob25dCisgICAgICBfX19fI19fZm9yIGEgaW4gcmFuZ2UoMjApOgorICAgICAgX19fXyNfX19fcHJpbnQoYSkKKyAgICAgIF9fX18jW3B5dGhvbl0qLworICAgICJwcmVpbmRlbnQiIHdvdWxkIGJlICJfX19fIiBhbmQgImluZGVudCIgd291bGQgYmUgIl9fIi4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dCwgZHNsX25hbWU9Tm9uZSwgc2lnbmF0dXJlcz1Ob25lLCBvdXRwdXQ9Tm9uZSwgaW5kZW50PScnLCBwcmVpbmRlbnQ9JycpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpbnB1dCwgc3RyKQorICAgICAgICBzZWxmLmlucHV0ID0gaW5wdXQKKyAgICAgICAgc2VsZi5kc2xfbmFtZSA9IGRzbF9uYW1lCisgICAgICAgIHNlbGYuc2lnbmF0dXJlcyA9IHNpZ25hdHVyZXMgb3IgW10KKyAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKKyAgICAgICAgc2VsZi5wcmVpbmRlbnQgPSBwcmVpbmRlbnQKKworCitjbGFzcyBCbG9ja1BhcnNlcjoKKyAgICAiIiIKKyAgICBCbG9jay1vcmllbnRlZCBwYXJzZXIgZm9yIEFyZ3VtZW50IENsaW5pYy4KKyAgICBJdGVyYXRvciwgeWllbGRzIEJsb2NrIG9iamVjdHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5wdXQsIGxhbmd1YWdlLCAqLCB2ZXJpZnk9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICAiaW5wdXQiIHNob3VsZCBiZSBhIHN0ciBvYmplY3QKKyAgICAgICAgd2l0aCBlbWJlZGRlZCBcbiBjaGFyYWN0ZXJzLgorCisgICAgICAgICJsYW5ndWFnZSIgc2hvdWxkIGJlIGEgTGFuZ3VhZ2Ugb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgbGFuZ3VhZ2UudmFsaWRhdGUoKQorCisgICAgICAgIHNlbGYuaW5wdXQgPSBjb2xsZWN0aW9ucy5kZXF1ZShyZXZlcnNlZChpbnB1dC5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKSkKKyAgICAgICAgc2VsZi5ibG9ja19zdGFydF9saW5lX251bWJlciA9IHNlbGYubGluZV9udW1iZXIgPSAwCisKKyAgICAgICAgc2VsZi5sYW5ndWFnZSA9IGxhbmd1YWdlCisgICAgICAgIGJlZm9yZSwgXywgYWZ0ZXIgPSBsYW5ndWFnZS5zdGFydF9saW5lLnBhcnRpdGlvbigne2RzbF9uYW1lfScpCisgICAgICAgIGFzc2VydCBfID09ICd7ZHNsX25hbWV9JworICAgICAgICBzZWxmLnN0YXJ0X3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIpCisgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CisgICAgICAgIHNlbGYubGFzdF9jaGVja3N1bV9yZSA9IE5vbmUKKyAgICAgICAgc2VsZi5sYXN0X2RzbF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLmRzbF9uYW1lID0gTm9uZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgICAgICBpZiBzZWxmLmRzbF9uYW1lOgorICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gc2VsZi5wYXJzZV9jbGluaWNfYmxvY2soc2VsZi5kc2xfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuZHNsX25hbWUgPSBOb25lCisgICAgICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCisgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX3ZlcmJhdGltX2Jsb2NrKCkKKworICAgIGRlZiBpc19zdGFydF9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBtYXRjaCA9IHNlbGYuc3RhcnRfcmUubWF0Y2gobGluZS5sc3RyaXAoKSkKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorCisgICAgZGVmIF9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAgcmV0dXJuIHNlbGYuaW5wdXQucG9wKCkKKworICAgIGRlZiBwYXJzZV92ZXJiYXRpbV9ibG9jayhzZWxmKToKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgc2VsZi5ibG9ja19zdGFydF9saW5lX251bWJlciA9IHNlbGYubGluZV9udW1iZXIKKworICAgICAgICB3aGlsZSBzZWxmLmlucHV0OgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUoKQorICAgICAgICAgICAgZHNsX25hbWUgPSBzZWxmLmlzX3N0YXJ0X2xpbmUobGluZSkKKyAgICAgICAgICAgIGlmIGRzbF9uYW1lOgorICAgICAgICAgICAgICAgIHNlbGYuZHNsX25hbWUgPSBkc2xfbmFtZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBhZGQobGluZSkKKworICAgICAgICByZXR1cm4gQmxvY2sob3V0cHV0KCkpCisKKyAgICBkZWYgcGFyc2VfY2xpbmljX2Jsb2NrKHNlbGYsIGRzbF9uYW1lKToKKyAgICAgICAgaW5wdXRfYWRkLCBpbnB1dF9vdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgc2VsZi5ibG9ja19zdGFydF9saW5lX251bWJlciA9IHNlbGYubGluZV9udW1iZXIgKyAxCisgICAgICAgIHN0b3BfbGluZSA9IHNlbGYubGFuZ3VhZ2Uuc3RvcF9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSkgKyAnXG4nCisgICAgICAgIGJvZHlfcHJlZml4ID0gc2VsZi5sYW5ndWFnZS5ib2R5X3ByZWZpeC5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpCisKKyAgICAgICAgIyBjb25zdW1lIGJvZHkgb2YgcHJvZ3JhbQorICAgICAgICB3aGlsZSBzZWxmLmlucHV0OgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUoKQorICAgICAgICAgICAgaWYgbGluZSA9PSBzdG9wX2xpbmUgb3Igc2VsZi5pc19zdGFydF9saW5lKGxpbmUpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBib2R5X3ByZWZpeDoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoKQorICAgICAgICAgICAgICAgIGFzc2VydCBsaW5lLnN0YXJ0c3dpdGgoYm9keV9wcmVmaXgpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbbGVuKGJvZHlfcHJlZml4KTpdCisgICAgICAgICAgICBpbnB1dF9hZGQobGluZSkKKworICAgICAgICAjIGNvbnN1bWUgb3V0cHV0IGFuZCBjaGVja3N1bSBsaW5lLCBpZiBwcmVzZW50LgorICAgICAgICBpZiBzZWxmLmxhc3RfZHNsX25hbWUgPT0gZHNsX25hbWU6CisgICAgICAgICAgICBjaGVja3N1bV9yZSA9IHNlbGYubGFzdF9jaGVja3N1bV9yZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmVmb3JlLCBfLCBhZnRlciA9IHNlbGYubGFuZ3VhZ2UuY2hlY2tzdW1fbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUsIGNoZWNrc3VtPSd7Y2hlY2tzdW19JykucGFydGl0aW9uKCd7Y2hlY2tzdW19JykKKyAgICAgICAgICAgIGFzc2VydCBfID09ICd7Y2hlY2tzdW19JworICAgICAgICAgICAgY2hlY2tzdW1fcmUgPSBjcmVhdGVfcmVnZXgoYmVmb3JlLCBhZnRlcikKKyAgICAgICAgICAgIHNlbGYubGFzdF9kc2xfbmFtZSA9IGRzbF9uYW1lCisgICAgICAgICAgICBzZWxmLmxhc3RfY2hlY2tzdW1fcmUgPSBjaGVja3N1bV9yZQorCisgICAgICAgICMgc2NhbiBmb3J3YXJkIGZvciBjaGVja3N1bSBsaW5lCisgICAgICAgIG91dHB1dF9hZGQsIG91dHB1dF9vdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgY2hlY2tzdW0gPSBOb25lCisgICAgICAgIHdoaWxlIHNlbGYuaW5wdXQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fbGluZSgpCisgICAgICAgICAgICBtYXRjaCA9IGNoZWNrc3VtX3JlLm1hdGNoKGxpbmUubHN0cmlwKCkpCisgICAgICAgICAgICBjaGVja3N1bSA9IG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorICAgICAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG91dHB1dF9hZGQobGluZSkKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfc3RhcnRfbGluZShsaW5lKToKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIG91dHB1dCA9IG91dHB1dF9vdXRwdXQoKQorICAgICAgICBpZiBjaGVja3N1bToKKyAgICAgICAgICAgIGlmIHNlbGYudmVyaWZ5OgorICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gY29tcHV0ZV9jaGVja3N1bShvdXRwdXQpCisgICAgICAgICAgICAgICAgaWYgY2hlY2tzdW0gIT0gY29tcHV0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkNoZWNrc3VtIG1pc21hdGNoIVxuRXhwZWN0ZWQ6IHt9XG5Db21wdXRlZDoge30iLmZvcm1hdChjaGVja3N1bSwgY29tcHV0ZWQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBwdXQgYmFjayBvdXRwdXQKKyAgICAgICAgICAgIHNlbGYuaW5wdXQuZXh0ZW5kKHJldmVyc2VkKG91dHB1dC5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKSkKKyAgICAgICAgICAgIHNlbGYubGluZV9udW1iZXIgLT0gbGVuKG91dHB1dCkKKyAgICAgICAgICAgIG91dHB1dCA9IE5vbmUKKworICAgICAgICByZXR1cm4gQmxvY2soaW5wdXRfb3V0cHV0KCksIGRzbF9uYW1lLCBvdXRwdXQ9b3V0cHV0KQorCisKK2NsYXNzIEJsb2NrUHJpbnRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYW5ndWFnZSwgZj1Ob25lKToKKyAgICAgICAgc2VsZi5sYW5ndWFnZSA9IGxhbmd1YWdlCisgICAgICAgIHNlbGYuZiA9IGYgb3IgaW8uU3RyaW5nSU8oKQorCisgICAgZGVmIHByaW50X2Jsb2NrKHNlbGYsIGJsb2NrKToKKyAgICAgICAgaW5wdXQgPSBibG9jay5pbnB1dAorICAgICAgICBvdXRwdXQgPSBibG9jay5vdXRwdXQKKyAgICAgICAgZHNsX25hbWUgPSBibG9jay5kc2xfbmFtZQorICAgICAgICB3cml0ZSA9IHNlbGYuZi53cml0ZQorCisgICAgICAgIGFzc2VydCAobm90IGlucHV0KSBvciAoaW5wdXQuZW5kc3dpdGgoJ1xuJykpCisgICAgICAgIGFzc2VydCBub3QgKChkc2xfbmFtZSA9PSBOb25lKSBeIChvdXRwdXQgPT0gTm9uZSkpLCAieW91IG11c3Qgc3BlY2lmeSBkc2xfbmFtZSBhbmQgb3V0cHV0IHRvZ2V0aGVyLCBkc2xfbmFtZSAiICsgcmVwcihkc2xfbmFtZSkKKworICAgICAgICBpZiBub3QgZHNsX25hbWU6CisgICAgICAgICAgICB3cml0ZShpbnB1dCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyaXRlKHNlbGYubGFuZ3VhZ2Uuc3RhcnRfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgICAgIGJvZHlfcHJlZml4ID0gc2VsZi5sYW5ndWFnZS5ib2R5X3ByZWZpeC5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpCisgICAgICAgIGlmIG5vdCBib2R5X3ByZWZpeDoKKyAgICAgICAgICAgIHdyaXRlKGlucHV0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5wdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgd3JpdGUoYm9keV9wcmVmaXgpCisgICAgICAgICAgICAgICAgd3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgICAgIHdyaXRlKHNlbGYubGFuZ3VhZ2Uuc3RvcF9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSkpCisgICAgICAgIHdyaXRlKCJcbiIpCisKKyAgICAgICAgb3V0cHV0ID0gYmxvY2sub3V0cHV0CisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIHdyaXRlKG91dHB1dCkKKyAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgd3JpdGUoJ1xuJykKKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLmNoZWNrc3VtX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lLCBjaGVja3N1bT1jb21wdXRlX2NoZWNrc3VtKG91dHB1dCkpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIExhbmd1YWdlIG9iamVjdHMuCisjICJsYW5ndWFnZXMiIG1hcHMgdGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlICgiQyIsICJQeXRob24iKS4KKyMgImV4dGVuc2lvbnMiIG1hcHMgdGhlIGZpbGUgZXh0ZW5zaW9uICgiYyIsICJweSIpLgorbGFuZ3VhZ2VzID0geyAnQyc6IENMYW5ndWFnZSwgJ1B5dGhvbic6IFB5dGhvbkxhbmd1YWdlIH0KK2V4dGVuc2lvbnMgPSB7ICdjJzogQ0xhbmd1YWdlLCAnaCc6IENMYW5ndWFnZSwgJ3B5JzogUHl0aG9uTGFuZ3VhZ2UgfQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlc2UgY2FsbGFibGVzIG11c3QgYmUgb2YgdGhlIGZvcm06CisjICAgZGVmIGZvbyhuYW1lLCBkZWZhdWx0LCAqLCAuLi4pCisjIFRoZSBjYWxsYWJsZSBtYXkgaGF2ZSBhbnkgbnVtYmVyIG9mIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorIyBUaGUgY2FsbGFibGUgbXVzdCByZXR1cm4gYSBDQ29udmVydGVyIG9iamVjdC4KKyMgVGhlIGNhbGxhYmxlIHNob3VsZCBub3QgY2FsbCBidWlsdGlucy5wcmludC4KK2NvbnZlcnRlcnMgPSB7fQorCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBmb2xsb3cgdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgZm9yICJjb252ZXJ0ZXJzIiBhYm92ZS4KKyMgbm90ZSBob3dldmVyIHRoYXQgdGhleSB3aWxsIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorbGVnYWN5X2NvbnZlcnRlcnMgPSB7fQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlc2UgY2FsbGFibGVzIG11c3QgYmUgb2YgdGhlIGZvcm06CisjICAgZGVmIGZvbygqLCAuLi4pCisjIFRoZSBjYWxsYWJsZSBtYXkgaGF2ZSBhbnkgbnVtYmVyIG9mIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorIyBUaGUgY2FsbGFibGUgbXVzdCByZXR1cm4gYSBDQ29udmVydGVyIG9iamVjdC4KKyMgVGhlIGNhbGxhYmxlIHNob3VsZCBub3QgY2FsbCBidWlsdGlucy5wcmludC4KK3JldHVybl9jb252ZXJ0ZXJzID0ge30KKworY2xhc3MgQ2xpbmljOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYW5ndWFnZSwgcHJpbnRlcj1Ob25lLCAqLCB2ZXJpZnk9VHJ1ZSwgZmlsZW5hbWU9Tm9uZSk6CisgICAgICAgICMgbWFwcyBzdHJpbmdzIHRvIFBhcnNlciBvYmplY3RzLgorICAgICAgICAjIChpbnN0YW50aWF0ZWQgZnJvbSB0aGUgInBhcnNlcnMiIGdsb2JhbC4pCisgICAgICAgIHNlbGYucGFyc2VycyA9IHt9CisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBzZWxmLnByaW50ZXIgPSBwcmludGVyIG9yIEJsb2NrUHJpbnRlcihsYW5ndWFnZSkKKyAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYubW9kdWxlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKworICAgICAgICBnbG9iYWwgY2xpbmljCisgICAgICAgIGNsaW5pYyA9IHNlbGYKKworICAgIGRlZiBwYXJzZShzZWxmLCBpbnB1dCk6CisgICAgICAgIHByaW50ZXIgPSBzZWxmLnByaW50ZXIKKyAgICAgICAgc2VsZi5ibG9ja19wYXJzZXIgPSBCbG9ja1BhcnNlcihpbnB1dCwgc2VsZi5sYW5ndWFnZSwgdmVyaWZ5PXNlbGYudmVyaWZ5KQorICAgICAgICBmb3IgYmxvY2sgaW4gc2VsZi5ibG9ja19wYXJzZXI6CisgICAgICAgICAgICBkc2xfbmFtZSA9IGJsb2NrLmRzbF9uYW1lCisgICAgICAgICAgICBpZiBkc2xfbmFtZToKKyAgICAgICAgICAgICAgICBpZiBkc2xfbmFtZSBub3QgaW4gc2VsZi5wYXJzZXJzOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZHNsX25hbWUgaW4gcGFyc2VycywgIk5vIHBhcnNlciB0byBoYW5kbGUgeyFyfSBibG9jay4iLmZvcm1hdChkc2xfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXJzW2RzbF9uYW1lXSA9IHBhcnNlcnNbZHNsX25hbWVdKHNlbGYpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5wYXJzZXJzW2RzbF9uYW1lXQorICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgICAgIHByaW50ZXIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgIHJldHVybiBwcmludGVyLmYuZ2V0dmFsdWUoKQorCisgICAgZGVmIF9tb2R1bGVfYW5kX2NsYXNzKHNlbGYsIGZpZWxkcyk6CisgICAgICAgICIiIgorICAgICAgICBmaWVsZHMgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIGZpZWxkIG5hbWVzLgorICAgICAgICByZXR1cm5zIGEgdHVwbGUgb2YgKG1vZHVsZSwgY2xhc3MpLgorICAgICAgICB0aGUgbW9kdWxlIG9iamVjdCBjb3VsZCBhY3R1YWxseSBiZSBzZWxmIChhIGNsaW5pYyBvYmplY3QpLgorICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXZlciB1c2VkIHRvIGZpbmQgdGhlIHBhcmVudCBvZiB3aGVyZQorICAgICAgICBhIG5ldyBjbGFzcy9tb2R1bGUgc2hvdWxkIGdvLgorICAgICAgICAiIiIKKyAgICAgICAgaW5fY2xhc3NlcyA9IEZhbHNlCisgICAgICAgIHBhcmVudCA9IG1vZHVsZSA9IHNlbGYKKyAgICAgICAgY2xzID0gTm9uZQorICAgICAgICBzb19mYXIgPSBbXQorCisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBzb19mYXIuYXBwZW5kKGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGluX2NsYXNzZXM6CisgICAgICAgICAgICAgICAgY2hpbGQgPSBwYXJlbnQubW9kdWxlcy5nZXQoZmllbGQpCisgICAgICAgICAgICAgICAgaWYgY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IGNoaWxkCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaW5fY2xhc3NlcyA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHBhcmVudCwgJ2NsYXNzZXMnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLCBjbHMKKyAgICAgICAgICAgIGNoaWxkID0gcGFyZW50LmNsYXNzZXMuZ2V0KGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGNoaWxkOgorICAgICAgICAgICAgICAgIGZhaWwoJ1BhcmVudCBjbGFzcyBvciBtb2R1bGUgJyArICcuJy5qb2luKHNvX2ZhcikgKyAiIGRvZXMgbm90IGV4aXN0LiIpCisgICAgICAgICAgICBjbHMgPSBwYXJlbnQgPSBjaGlsZAorCisgICAgICAgIHJldHVybiBtb2R1bGUsIGNscworCisKK2RlZiBwYXJzZV9maWxlKGZpbGVuYW1lLCAqLCB2ZXJpZnk9VHJ1ZSwgb3V0cHV0PU5vbmUsIGVuY29kaW5nPSd1dGYtOCcpOgorICAgIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdWzE6XQorICAgIGlmIG5vdCBleHRlbnNpb246CisgICAgICAgIGZhaWwoIkNhbid0IGV4dHJhY3QgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIHRyeToKKyAgICAgICAgbGFuZ3VhZ2UgPSBleHRlbnNpb25zW2V4dGVuc2lvbl0oKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZmFpbCgiQ2FuJ3QgaWRlbnRpZnkgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIGNsaW5pYyA9IENsaW5pYyhsYW5ndWFnZSwgdmVyaWZ5PXZlcmlmeSwgZmlsZW5hbWU9ZmlsZW5hbWUpCisKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJywgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CisgICAgICAgIHRleHQgPSBjbGluaWMucGFyc2UoZi5yZWFkKCkpCisKKyAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpIG9yICcuJworCisgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkocHJlZml4PSJjbGluaWMiLCBkaXI9ZGlyZWN0b3J5KSBhcyB0bXBkaXI6CisgICAgICAgIGJ5dGVzID0gdGV4dC5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgIHRtcGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIHdpdGggb3Blbih0bXBmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYnl0ZXMpCisgICAgICAgIG9zLnJlcGxhY2UodG1wZmlsZW5hbWUsIG91dHB1dCBvciBmaWxlbmFtZSkKKworCitkZWYgY29tcHV0ZV9jaGVja3N1bShpbnB1dCk6CisgICAgaW5wdXQgPSBpbnB1dCBvciAnJworICAgIHJldHVybiBoYXNobGliLnNoYTEoaW5wdXQuZW5jb2RlKCd1dGYtOCcpKS5oZXhkaWdlc3QoKQorCisKKworCitjbGFzcyBQeXRob25QYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIHMgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggT3ZlcnJpZGVTdGRpb1dpdGgocyk6CisgICAgICAgICAgICBleGVjKGJsb2NrLmlucHV0KQorICAgICAgICBibG9jay5vdXRwdXQgPSBzLmdldHZhbHVlKCkKKworCitjbGFzcyBNb2R1bGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIG1vZHVsZT1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IHNlbGYucGFyZW50ID0gbW9kdWxlCisKKyAgICAgICAgc2VsZi5tb2R1bGVzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuZnVuY3Rpb25zID0gW10KKworY2xhc3MgQ2xhc3M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIG1vZHVsZT1Ob25lLCBjbHM9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgc2VsZi5jbHMgPSBjbHMKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBjbHMgb3IgbW9kdWxlCisKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmZ1bmN0aW9ucyA9IFtdCisKK0RBVEEsIENBTExBQkxFLCBNRVRIT0QsIFNUQVRJQ19NRVRIT0QsIENMQVNTX01FVEhPRCA9IHJhbmdlKDUpCisKK2NsYXNzIEZ1bmN0aW9uOgorICAgICIiIgorICAgIE11dGFibGUgZHVjayB0eXBlIGZvciBpbnNwZWN0LkZ1bmN0aW9uLgorCisgICAgZG9jc3RyaW5nIC0gYSBzdHIgY29udGFpbmluZworICAgICAgICAqIGVtYmVkZGVkIGxpbmUgYnJlYWtzCisgICAgICAgICogdGV4dCBvdXRkZW50ZWQgdG8gdGhlIGxlZnQgbWFyZ2luCisgICAgICAgICogbm8gdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgSXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSB0aGF0CisgICAgICAgICAgICAobm90IGRvY3N0cmluZykgb3IgKChub3QgZG9jc3RyaW5nWzBdLmlzc3BhY2UoKSkgYW5kIChkb2NzdHJpbmcucnN0cmlwKCkgPT0gZG9jc3RyaW5nKSkKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbWV0ZXJzPU5vbmUsICosIG5hbWUsCisgICAgICAgICAgICAgICAgIG1vZHVsZSwgY2xzPU5vbmUsIGNfYmFzZW5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZnVsbF9uYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIsIHJldHVybl9hbm5vdGF0aW9uPV9lbXB0eSwKKyAgICAgICAgICAgICAgICAgZG9jc3RyaW5nPU5vbmUsIGtpbmQ9Q0FMTEFCTEUsIGNvZXhpc3Q9RmFsc2UpOgorICAgICAgICBzZWxmLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIG9yIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5yZXR1cm5fYW5ub3RhdGlvbiA9IHJldHVybl9hbm5vdGF0aW9uCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5mdWxsX25hbWUgPSBmdWxsX25hbWUKKyAgICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgc2VsZi5jbHMgPSBjbHMKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBjbHMgb3IgbW9kdWxlCisgICAgICAgIHNlbGYuY19iYXNlbmFtZSA9IGNfYmFzZW5hbWUKKyAgICAgICAgc2VsZi5yZXR1cm5fY29udmVydGVyID0gcmV0dXJuX2NvbnZlcnRlcgorICAgICAgICBzZWxmLmRvY3N0cmluZyA9IGRvY3N0cmluZyBvciAnJworICAgICAgICBzZWxmLmtpbmQgPSBraW5kCisgICAgICAgIHNlbGYuY29leGlzdCA9IGNvZXhpc3QKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8Y2xpbmljLkZ1bmN0aW9uICcgKyBzZWxmLm5hbWUgKyAnPicKKworCitjbGFzcyBQYXJhbWV0ZXI6CisgICAgIiIiCisgICAgTXV0YWJsZSBkdWNrIHR5cGUgb2YgaW5zcGVjdC5QYXJhbWV0ZXIuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwga2luZCwgKiwgZGVmYXVsdD1fZW1wdHksCisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBjb252ZXJ0ZXIsIGFubm90YXRpb249X2VtcHR5LAorICAgICAgICAgICAgICAgICBkb2NzdHJpbmc9Tm9uZSwgZ3JvdXA9MCk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5raW5kID0ga2luZAorICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLmNvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICBzZWxmLmFubm90YXRpb24gPSBhbm5vdGF0aW9uCisgICAgICAgIHNlbGYuZG9jc3RyaW5nID0gZG9jc3RyaW5nIG9yICcnCisgICAgICAgIHNlbGYuZ3JvdXAgPSBncm91cAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxjbGluaWMuUGFyYW1ldGVyICcgKyBzZWxmLm5hbWUgKyAnPicKKworICAgIGRlZiBpc19rZXl3b3JkX29ubHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZCisKK3B5X3NwZWNpYWxfdmFsdWVzID0geworICAgIE5VTEw6ICJOb25lIiwKK30KKworZGVmIHB5X3JlcHIobyk6CisgICAgc3BlY2lhbCA9IHB5X3NwZWNpYWxfdmFsdWVzLmdldChvKQorICAgIGlmIHNwZWNpYWw6CisgICAgICAgIHJldHVybiBzcGVjaWFsCisgICAgcmV0dXJuIHJlcHIobykKKworCitjX3NwZWNpYWxfdmFsdWVzID0geworICAgIE5VTEw6ICJOVUxMIiwKKyAgICBOb25lOiAiUHlfTm9uZSIsCit9CisKK2RlZiBjX3JlcHIobyk6CisgICAgc3BlY2lhbCA9IGNfc3BlY2lhbF92YWx1ZXMuZ2V0KG8pCisgICAgaWYgc3BlY2lhbDoKKyAgICAgICAgcmV0dXJuIHNwZWNpYWwKKyAgICBpZiBpc2luc3RhbmNlKG8sIHN0cik6CisgICAgICAgIHJldHVybiAnIicgKyBxdW90ZWRfZm9yX2Nfc3RyaW5nKG8pICsgJyInCisgICAgcmV0dXJuIHJlcHIobykKKworZGVmIGFkZF9jX2NvbnZlcnRlcihmLCBuYW1lPU5vbmUpOgorICAgIGlmIG5vdCBuYW1lOgorICAgICAgICBuYW1lID0gZi5fX25hbWVfXworICAgICAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgnX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19jb252ZXJ0ZXInKV0KKyAgICBjb252ZXJ0ZXJzW25hbWVdID0gZgorICAgIHJldHVybiBmCisKK2RlZiBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIoY2xzKToKKyAgICAjIGF1dG9tYXRpY2FsbHkgYWRkIGNvbnZlcnRlciBmb3IgZGVmYXVsdCBmb3JtYXQgdW5pdAorICAgICMgKGJ1dCB3aXRob3V0IHN0b21waW5nIG9uIHRoZSBleGlzdGluZyBvbmUgaWYgaXQncyBhbHJlYWR5CisgICAgIyBzZXQsIGluIGNhc2UgeW91IHN1YmNsYXNzKQorICAgIGlmICgoY2xzLmZvcm1hdF91bml0ICE9ICdPJicpIGFuZAorICAgICAgICAoY2xzLmZvcm1hdF91bml0IG5vdCBpbiBsZWdhY3lfY29udmVydGVycykpOgorICAgICAgICBsZWdhY3lfY29udmVydGVyc1tjbHMuZm9ybWF0X3VuaXRdID0gY2xzCisgICAgcmV0dXJuIGNscworCitkZWYgYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcihmb3JtYXRfdW5pdCwgKiprd2FyZ3MpOgorICAgICIiIgorICAgIEFkZHMgYSBsZWdhY3kgY29udmVydGVyLgorICAgICIiIgorICAgIGRlZiBjbG9zdXJlKGYpOgorICAgICAgICBpZiBub3Qga3dhcmdzOgorICAgICAgICAgICAgYWRkZWRfZiA9IGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZGVkX2YgPSBmdW5jdG9vbHMucGFydGlhbChmLCAqKmt3YXJncykKKyAgICAgICAgbGVnYWN5X2NvbnZlcnRlcnNbZm9ybWF0X3VuaXRdID0gYWRkZWRfZgorICAgICAgICByZXR1cm4gZgorICAgIHJldHVybiBjbG9zdXJlCisKK2NsYXNzIENDb252ZXJ0ZXJBdXRvUmVnaXN0ZXIodHlwZSk6CisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgIGFkZF9jX2NvbnZlcnRlcihjbHMpCisgICAgICAgIGFkZF9kZWZhdWx0X2xlZ2FjeV9jX2NvbnZlcnRlcihjbHMpCisKK2NsYXNzIENDb252ZXJ0ZXIobWV0YWNsYXNzPUNDb252ZXJ0ZXJBdXRvUmVnaXN0ZXIpOgorICAgICIiIgorICAgIEZvciB0aGUgaW5pdCBmdW5jdGlvbiwgc2VsZiwgbmFtZSwgZnVuY3Rpb24sIGFuZCBkZWZhdWx0CisgICAgbXVzdCBiZSBrZXl3b3JkLW9yLXBvc2l0aW9uYWwgcGFyYW1ldGVycy4gIEFsbCBvdGhlcgorICAgIHBhcmFtZXRlcnMgKGluY2x1ZGluZyAicmVxdWlyZWQiIGFuZCAiZG9jX2RlZmF1bHQiKQorICAgIG11c3QgYmUga2V5d29yZC1vbmx5LgorICAgICIiIgorCisgICAgdHlwZSA9IE5vbmUKKyAgICBmb3JtYXRfdW5pdCA9ICdPJicKKworICAgICMgVGhlIFB5dGhvbiBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciwgYXMgYSBQeXRob24gdmFsdWUuCisgICAgIyBPciAidW5zcGVjaWZpZWQiIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgZGVmYXVsdCA9IHVuc3BlY2lmaWVkCisKKyAgICAjICJkZWZhdWx0IiBjb252ZXJ0ZWQgaW50byBhIHN0ciBmb3IgcmVuZGVyaW5nIGludG8gUHl0aG9uIGNvZGUuCisgICAgcHlfZGVmYXVsdCA9IE5vbmUKKworICAgICMgImRlZmF1bHQiIGFzIGl0IHNob3VsZCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24sIGFzIGEgc3RyaW5nLgorICAgICMgT3IgTm9uZSBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorICAgIGRvY19kZWZhdWx0ID0gTm9uZQorCisgICAgIyAiZGVmYXVsdCIgY29udmVydGVkIGludG8gYSBDIHZhbHVlLCBhcyBhIHN0cmluZy4KKyAgICAjIE9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBjX2RlZmF1bHQgPSBOb25lCisKKyAgICAjIFRoZSBDIGNvbnZlcnRlciAqZnVuY3Rpb24qIHRvIGJlIHVzZWQsIGlmIGFueS4KKyAgICAjIChJZiB0aGlzIGlzIG5vdCBOb25lLCBmb3JtYXRfdW5pdCBtdXN0IGJlICdPJicuKQorICAgIGNvbnZlcnRlciA9IE5vbmUKKyAgICBlbmNvZGluZyA9IE5vbmUKKyAgICBpbXBsX2J5X3JlZmVyZW5jZSA9IEZhbHNlCisgICAgcGFyc2VfYnlfcmVmZXJlbmNlID0gVHJ1ZQorICAgIGxlbmd0aCA9IEZhbHNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZnVuY3Rpb24sIGRlZmF1bHQ9dW5zcGVjaWZpZWQsICosIGRvY19kZWZhdWx0PU5vbmUsIHJlcXVpcmVkPUZhbHNlLCBhbm5vdGF0aW9uPXVuc3BlY2lmaWVkLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgICAgICBzZWxmLnB5X2RlZmF1bHQgPSBweV9yZXByKGRlZmF1bHQpCisgICAgICAgICAgICBzZWxmLmRvY19kZWZhdWx0ID0gZG9jX2RlZmF1bHQgaWYgZG9jX2RlZmF1bHQgaXMgbm90IE5vbmUgZWxzZSBzZWxmLnB5X2RlZmF1bHQKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gY19yZXByKGRlZmF1bHQpCisgICAgICAgIGVsaWYgZG9jX2RlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmYWlsKGZ1bmN0aW9uLmZ1bGxuYW1lICsgIiBhcmd1bWVudCAiICsgbmFtZSArICIgc3BlY2lmaWVkIGEgJ2RvY19kZWZhdWx0JyB3aXRob3V0IGhhdmluZyBhICdkZWZhdWx0JyIpCisgICAgICAgIGlmIGFubm90YXRpb24gIT0gdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBmYWlsKCJUaGUgJ2Fubm90YXRpb24nIHBhcmFtZXRlciBpcyBub3QgY3VycmVudGx5IHBlcm1pdHRlZC4iKQorICAgICAgICBzZWxmLnJlcXVpcmVkID0gcmVxdWlyZWQKKyAgICAgICAgc2VsZi5jb252ZXJ0ZXJfaW5pdCgqKmt3YXJncykKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGlzX29wdGlvbmFsKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQpIGFuZCAobm90IHNlbGYucmVxdWlyZWQpCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIHBhcmFtZXRlciwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBwYXJhbWV0ZXIgaXMgYSBjbGluaWMuUGFyYW1ldGVyIGluc3RhbmNlLgorICAgICAgICBkYXRhIGlzIGEgQ1JlbmRlckRhdGEgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisKKyAgICAgICAgIyBkZWNsYXJhdGlvbnMKKyAgICAgICAgZCA9IHNlbGYuZGVjbGFyYXRpb24oKQorICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoZCkKKworICAgICAgICAjIGluaXRpYWxpemVycworICAgICAgICBpbml0aWFsaXplcnMgPSBzZWxmLmluaXRpYWxpemUoKQorICAgICAgICBpZiBpbml0aWFsaXplcnM6CisgICAgICAgICAgICBkYXRhLmluaXRpYWxpemVycy5hcHBlbmQoJy8qIGluaXRpYWxpemVycyBmb3IgJyArIG5hbWUgKyAnICovXG4nICsgaW5pdGlhbGl6ZXJzLnJzdHJpcCgpKQorCisgICAgICAgICMgaW1wbF9hcmd1bWVudHMKKyAgICAgICAgcyA9ICgiJiIgaWYgc2VsZi5pbXBsX2J5X3JlZmVyZW5jZSBlbHNlICIiKSArIG5hbWUKKyAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50cy5hcHBlbmQocykKKworICAgICAgICAjIGtleXdvcmRzCisgICAgICAgIGRhdGEua2V5d29yZHMuYXBwZW5kKG5hbWUpCisKKyAgICAgICAgIyBmb3JtYXRfdW5pdHMKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpb25hbCgpIGFuZCAnfCcgbm90IGluIGRhdGEuZm9ybWF0X3VuaXRzOgorICAgICAgICAgICAgZGF0YS5mb3JtYXRfdW5pdHMuYXBwZW5kKCd8JykKKyAgICAgICAgaWYgcGFyYW1ldGVyLmlzX2tleXdvcmRfb25seSgpIGFuZCAnJCcgbm90IGluIGRhdGEuZm9ybWF0X3VuaXRzOgorICAgICAgICAgICAgZGF0YS5mb3JtYXRfdW5pdHMuYXBwZW5kKCckJykKKyAgICAgICAgZGF0YS5mb3JtYXRfdW5pdHMuYXBwZW5kKHNlbGYuZm9ybWF0X3VuaXQpCisKKyAgICAgICAgIyBwYXJzZV9hcmd1bWVudHMKKyAgICAgICAgc2VsZi5wYXJzZV9hcmd1bWVudChkYXRhLnBhcnNlX2FyZ3VtZW50cykKKworICAgICAgICAjIGltcGxfcGFyYW1ldGVycworICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoc2VsZi5zaW1wbGVfZGVjbGFyYXRpb24oYnlfcmVmZXJlbmNlPXNlbGYuaW1wbF9ieV9yZWZlcmVuY2UpKQorCisgICAgICAgICMgY2xlYW51cAorICAgICAgICBjbGVhbnVwID0gc2VsZi5jbGVhbnVwKCkKKyAgICAgICAgaWYgY2xlYW51cDoKKyAgICAgICAgICAgIGRhdGEuY2xlYW51cC5hcHBlbmQoJy8qIENsZWFudXAgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIGNsZWFudXAucnN0cmlwKCkgKyAiXG4iKQorCisgICAgIyBXaHkgaXMgdGhpcyBvbmUgYnJva2VuIG91dCBzZXBhcmF0ZWx5PworICAgICMgRm9yICJwb3NpdGlvbmFsLW9ubHkiIGZ1bmN0aW9uIHBhcnNpbmcsCisgICAgIyB3aGljaCBnZW5lcmF0ZXMgYSBidW5jaCBvZiBQeUFyZ19QYXJzZVR1cGxlIGNhbGxzLgorICAgIGRlZiBwYXJzZV9hcmd1bWVudChzZWxmLCBsaXN0KToKKyAgICAgICAgYXNzZXJ0IG5vdCAoc2VsZi5jb252ZXJ0ZXIgYW5kIHNlbGYuZW5jb2RpbmcpCisgICAgICAgIGlmIHNlbGYuZm9ybWF0X3VuaXQgPT0gJ08mJzoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvbnZlcnRlcgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZi5jb252ZXJ0ZXIpCisKKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHNlbGYuZW5jb2RpbmcpCisKKyAgICAgICAgcyA9ICgiJiIgaWYgc2VsZi5wYXJzZV9ieV9yZWZlcmVuY2UgZWxzZSAiIikgKyBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKyAgICAgICAgbGlzdC5hcHBlbmQocykKKworICAgICMKKyAgICAjIEFsbCB0aGUgZnVuY3Rpb25zIGFmdGVyIGhlcmUgYXJlIGludGVuZGVkIGFzIGV4dGVuc2lvbiBwb2ludHMuCisgICAgIworCisgICAgZGVmIHNpbXBsZV9kZWNsYXJhdGlvbihzZWxmLCBieV9yZWZlcmVuY2U9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tcHV0ZXMgdGhlIGJhc2ljIGRlY2xhcmF0aW9uIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgVXNlZCBpbiBjb21wdXRpbmcgdGhlIHByb3RvdHlwZSBkZWNsYXJhdGlvbiBhbmQgdGhlCisgICAgICAgIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcHJvdG90eXBlID0gW3NlbGYudHlwZV0KKyAgICAgICAgaWYgYnlfcmVmZXJlbmNlIG9yIG5vdCBzZWxmLnR5cGUuZW5kc3dpdGgoJyonKToKKyAgICAgICAgICAgIHByb3RvdHlwZS5hcHBlbmQoIiAiKQorICAgICAgICBpZiBieV9yZWZlcmVuY2U6CisgICAgICAgICAgICBwcm90b3R5cGUuYXBwZW5kKCcqJykKKyAgICAgICAgcHJvdG90eXBlLmFwcGVuZChlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkpCisgICAgICAgIHJldHVybiAiIi5qb2luKHByb3RvdHlwZSkKKworICAgIGRlZiBkZWNsYXJhdGlvbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudCB0byBkZWNsYXJlIHRoaXMgdmFyaWFibGUuCisgICAgICAgICIiIgorICAgICAgICBkZWNsYXJhdGlvbiA9IFtzZWxmLnNpbXBsZV9kZWNsYXJhdGlvbigpXQorICAgICAgICBpZiBzZWxmLmNfZGVmYXVsdDoKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZCgiID0gIikKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZChzZWxmLmNfZGVmYXVsdCkKKyAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCI7IikKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oZGVjbGFyYXRpb24pCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gc2V0IHVwIHRoaXMgdmFyaWFibGUgYmVmb3JlIHBhcnNpbmcuCisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGlzIGNvZGUgaW5kZW50ZWQgYXQgY29sdW1uIDAuCisgICAgICAgIElmIG5vIGluaXRpYWxpemF0aW9uIGlzIG5lY2Vzc2FyeSwgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBjbGVhbiB1cCBhZnRlciB0aGlzIHZhcmlhYmxlLgorICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhpcyBjb2RlIGluZGVudGVkIGF0IGNvbHVtbiAwLgorICAgICAgICBJZiBubyBjbGVhbnVwIGlzIG5lY2Vzc2FyeSwgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gIiIKKworCitjbGFzcyBib29sX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBmb3JtYXRfdW5pdCA9ICdwJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmRlZmF1bHQgPSBib29sKHNlbGYuZGVmYXVsdCkKKyAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSBzdHIoaW50KHNlbGYuZGVmYXVsdCkpCisKK2NsYXNzIGNoYXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnY2hhcicKKyAgICBmb3JtYXRfdW5pdCA9ICdjJworCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignQicsIGJpdHdpc2U9VHJ1ZSkKK2NsYXNzIGJ5dGVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnYnl0ZScKKyAgICBmb3JtYXRfdW5pdCA9ICdiJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBiaXR3aXNlOgorICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAnQicKKworY2xhc3Mgc2hvcnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnc2hvcnQnCisgICAgZm9ybWF0X3VuaXQgPSAnaCcKKworY2xhc3MgdW5zaWduZWRfc2hvcnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgc2hvcnQnCisgICAgZm9ybWF0X3VuaXQgPSAnSCcKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBzaG9ydHMgbXVzdCBiZSBiaXR3aXNlIChmb3Igbm93KS4iKQorCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignQycsIGZyb21fc3RyPVRydWUpCitjbGFzcyBpbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnaW50JworICAgIGZvcm1hdF91bml0ID0gJ2knCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgZnJvbV9zdHI9RmFsc2UpOgorICAgICAgICBpZiBmcm9tX3N0cjoKKyAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ0MnCisKK2NsYXNzIHVuc2lnbmVkX2ludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBpbnQnCisgICAgZm9ybWF0X3VuaXQgPSAnSScKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBpbnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsb25nJworICAgIGZvcm1hdF91bml0ID0gJ2wnCisKK2NsYXNzIHVuc2lnbmVkX2xvbmdfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgbG9uZycKKyAgICBmb3JtYXRfdW5pdCA9ICdrJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBub3QgYml0d2lzZToKKyAgICAgICAgICAgIGZhaWwoIlVuc2lnbmVkIGxvbmdzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgUFlfTE9OR19MT05HX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1BZX0xPTkdfTE9ORycKKyAgICBmb3JtYXRfdW5pdCA9ICdMJworCitjbGFzcyB1bnNpZ25lZF9QWV9MT05HX0xPTkdfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgUFlfTE9OR19MT05HJworICAgIGZvcm1hdF91bml0ID0gJ0snCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYml0d2lzZT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBiaXR3aXNlOgorICAgICAgICAgICAgZmFpbCgiVW5zaWduZWQgUFlfTE9OR19MT05HcyBtdXN0IGJlIGJpdHdpc2UgKGZvciBub3cpLiIpCisKK2NsYXNzIFB5X3NzaXplX3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfc3NpemVfdCcKKyAgICBmb3JtYXRfdW5pdCA9ICduJworCisKK2NsYXNzIGZsb2F0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2Zsb2F0JworICAgIGZvcm1hdF91bml0ID0gJ2YnCisKK2NsYXNzIGRvdWJsZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdkb3VibGUnCisgICAgZm9ybWF0X3VuaXQgPSAnZCcKKworCitjbGFzcyBQeV9jb21wbGV4X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2NvbXBsZXgnCisgICAgZm9ybWF0X3VuaXQgPSAnRCcKKworCitjbGFzcyBvYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlPYmplY3QgKicKKyAgICBmb3JtYXRfdW5pdCA9ICdPJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGU9Tm9uZSk6CisgICAgICAgIGlmIHR5cGU6CisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0eXBlLCBzdHIpCisgICAgICAgICAgICBhc3NlcnQgdHlwZS5pc2lkZW50aWZpZXIoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHR5cGUgPSBldmFsKHR5cGUpCisgICAgICAgICAgICAgICAgIyBuZWVkIG1vcmUgb2YgdGhlc2UhCisgICAgICAgICAgICAgICAgdHlwZSA9IHsKKyAgICAgICAgICAgICAgICAgICAgc3RyOiAnJlB5VW5pY29kZV9UeXBlJywKKyAgICAgICAgICAgICAgICAgICAgfVt0eXBlXQorICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgICAgICB0eXBlID0gdHlwZQorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICdPIScKKyAgICAgICAgICAgIHNlbGYuZW5jb2RpbmcgPSB0eXBlCisKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3knLCBmcm9tX2J5dGVzPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneicsIG51bGxhYmxlPVRydWUpCitjbGFzcyBzdHJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnY29uc3QgY2hhciAqJworICAgIGZvcm1hdF91bml0ID0gJ3MnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgbnVsbGFibGU9RmFsc2UsIGZyb21fYnl0ZXM9RmFsc2UpOgorICAgICAgICBpZiBmcm9tX2J5dGVzOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBudWxsYWJsZQorICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneScKKyAgICAgICAgaWYgbnVsbGFibGU6CisgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd6JworCisKK2NsYXNzIFB5Qnl0ZXNPYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlCeXRlc09iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ1MnCisKK2NsYXNzIFB5Qnl0ZUFycmF5T2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5Qnl0ZUFycmF5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnWScKKworY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ1UnCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCdaJywgbnVsbGFibGU9VHJ1ZSkKK2NsYXNzIFB5X1VOSUNPREVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfVU5JQ09ERSAqJworICAgIGZvcm1hdF91bml0ID0gJ3UnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgbnVsbGFibGU9RmFsc2UpOgorICAgICAgICBpZiBudWxsYWJsZToKKyAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ1onCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCdzKicsIHplcm9lcz1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3cqJywgcmVhZF93cml0ZT1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3oqJywgemVyb2VzPVRydWUsIG51bGxhYmxlPVRydWUpCitjbGFzcyBQeV9idWZmZXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfYnVmZmVyJworICAgIGZvcm1hdF91bml0ID0gJ3kqJworICAgIGltcGxfYnlfcmVmZXJlbmNlID0gVHJ1ZQorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHN0cj1GYWxzZSwgemVyb2VzPUZhbHNlLCBudWxsYWJsZT1GYWxzZSwgcmVhZF93cml0ZT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBzdHI6CisgICAgICAgICAgICBhc3NlcnQgbm90ICh6ZXJvZXMgb3IgbnVsbGFibGUgb3IgcmVhZF93cml0ZSkKKyAgICAgICAgZWxpZiByZWFkX3dyaXRlOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCAoemVyb2VzIG9yIG51bGxhYmxlKQorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICd3KicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCB6ZXJvZXMKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSAneionIGlmIG51bGxhYmxlIGVsc2UgJ3MqJworCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHJldHVybiAiUHlCdWZmZXJfUmVsZWFzZSgmIiArIGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKSArICIpO1xuIgorCisKK2RlZiBhZGRfY19yZXR1cm5fY29udmVydGVyKGYsIG5hbWU9Tm9uZSk6CisgICAgaWYgbm90IG5hbWU6CisgICAgICAgIG5hbWUgPSBmLl9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCdfcmV0dXJuX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19yZXR1cm5fY29udmVydGVyJyldCisgICAgcmV0dXJuX2NvbnZlcnRlcnNbbmFtZV0gPSBmCisgICAgcmV0dXJuIGYKKworCitjbGFzcyBDUmV0dXJuQ29udmVydGVyQXV0b1JlZ2lzdGVyKHR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICBhZGRfY19yZXR1cm5fY29udmVydGVyKGNscykKKworY2xhc3MgQ1JldHVybkNvbnZlcnRlcihtZXRhY2xhc3M9Q1JldHVybkNvbnZlcnRlckF1dG9SZWdpc3Rlcik6CisKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgZGVmYXVsdCA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBkb2NfZGVmYXVsdD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZG9jX2RlZmF1bHQgPSBkb2NfZGVmYXVsdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJldHVybl9jb252ZXJ0ZXJfaW5pdCgqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgcyA9ICcsICcuam9pbihuYW1lICsgJz0nICsgcmVwcih2YWx1ZSkgZm9yIG5hbWUsIHZhbHVlIGluIGt3YXJncy5pdGVtcygpKQorICAgICAgICAgICAgc3lzLmV4aXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnKCcgKyBzICsgJylcbicgKyBzdHIoZSkpCisKKyAgICBkZWYgcmV0dXJuX2NvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZGVjbGFyZShzZWxmLCBkYXRhLCBuYW1lPSJfcmV0dXJuX3ZhbHVlIik6CisgICAgICAgIGxpbmUgPSBbXQorICAgICAgICBhZGQgPSBsaW5lLmFwcGVuZAorICAgICAgICBhZGQoc2VsZi50eXBlKQorICAgICAgICBpZiBub3Qgc2VsZi50eXBlLmVuZHN3aXRoKCcqJyk6CisgICAgICAgICAgICBhZGQoJyAnKQorICAgICAgICBhZGQobmFtZSArICc7JykKKyAgICAgICAgZGF0YS5kZWNsYXJhdGlvbnMuYXBwZW5kKCcnLmpvaW4obGluZSkpCisgICAgICAgIGRhdGEucmV0dXJuX3ZhbHVlID0gbmFtZQorCisgICAgZGVmIGVycl9vY2N1cnJlZF9pZihzZWxmLCBleHByLCBkYXRhKToKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoJ2lmICgoe30pICYmIFB5RXJyX09jY3VycmVkKCkpXG4gICAgZ290byBleGl0O1xuJy5mb3JtYXQoZXhwcikpCisKKyAgICBkZWYgZXJyX29jY3VycmVkX2lmX251bGxfcG9pbnRlcihzZWxmLCB2YXJpYWJsZSwgZGF0YSk6CisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKCdpZiAoe30gPT0gTlVMTClcbiAgICBnb3RvIGV4aXQ7XG4nLmZvcm1hdCh2YXJpYWJsZSkpCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIGZ1bmN0aW9uIGlzIGEgY2xpbmljLkZ1bmN0aW9uIGluc3RhbmNlLgorICAgICAgICBkYXRhIGlzIGEgQ1JlbmRlckRhdGEgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKK2FkZF9jX3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlciwgJ29iamVjdCcpCisKK2NsYXNzIGludF9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnaW50JworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSAtMSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTtcbicpCisKKworY2xhc3MgbG9uZ19yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnbG9uZycKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgKKyAgICAgICAgICAgICdyZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoX3JldHVybl92YWx1ZSk7XG4nKQorCisKK2NsYXNzIFB5X3NzaXplX3RfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X3NzaXplX3QnCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmKCJfcmV0dXJuX3ZhbHVlID09IC0xIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KF9yZXR1cm5fdmFsdWUpO1xuJykKKworCitjbGFzcyBEZWNvZGVGU0RlZmF1bHRfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2NoYXIgKicKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWZfbnVsbF9wb2ludGVyKCJfcmV0dXJuX3ZhbHVlIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChfcmV0dXJuX3ZhbHVlKTtcbicpCisKKworY2xhc3MgSW5kZW50U3RhY2s6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmluZGVudHMgPSBbXQorICAgICAgICBzZWxmLm1hcmdpbiA9IE5vbmUKKworICAgIGRlZiBfZW5zdXJlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnRzOgorICAgICAgICAgICAgZmFpbCgnSW5kZW50U3RhY2sgZXhwZWN0ZWQgaW5kZW50cywgYnV0IG5vbmUgYXJlIGRlZmluZWQuJykKKworICAgIGRlZiBtZWFzdXJlKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBsaW5lJ3MgbWFyZ2luLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgJ1x0JyBpbiBsaW5lOgorICAgICAgICAgICAgZmFpbCgnVGFiIGNoYXJhY3RlcnMgYXJlIGlsbGVnYWwgaW4gdGhlIENsaW5pYyBEU0wuJykKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLmxzdHJpcCgpCisgICAgICAgIGlmIG5vdCBsZW4oc3RyaXBwZWQpOgorICAgICAgICAgICAgIyB3ZSBjYW4ndCB0ZWxsIGFueXRoaW5nIGZyb20gYW4gZW1wdHkgbGluZQorICAgICAgICAgICAgIyBzbyBqdXN0IHByZXRlbmQgaXQncyBpbmRlbnRlZCBsaWtlIG91ciBjdXJyZW50IGluZGVudAorICAgICAgICAgICAgc2VsZi5fZW5zdXJlKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmluZGVudHNbLTFdCisgICAgICAgIHJldHVybiBsZW4obGluZSkgLSBsZW4oc3RyaXBwZWQpCisKKyAgICBkZWYgaW5mZXIoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBJbmZlciB3aGF0IGlzIG5vdyB0aGUgY3VycmVudCBtYXJnaW4gYmFzZWQgb24gdGhpcyBsaW5lLgorICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgMSBpZiB3ZSBoYXZlIGluZGVudGVkIChvciB0aGlzIGlzIHRoZSBmaXJzdCBtYXJnaW4pCisgICAgICAgICAgICAwIGlmIHRoZSBtYXJnaW4gaGFzIG5vdCBjaGFuZ2VkCisgICAgICAgICAgIC1OIGlmIHdlIGhhdmUgZGVkZW50ZWQgTiB0aW1lcworICAgICAgICAiIiIKKyAgICAgICAgaW5kZW50ID0gc2VsZi5tZWFzdXJlKGxpbmUpCisgICAgICAgIG1hcmdpbiA9ICcgJyAqIGluZGVudAorICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnRzOgorICAgICAgICAgICAgc2VsZi5pbmRlbnRzLmFwcGVuZChpbmRlbnQpCisgICAgICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgY3VycmVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgaWYgaW5kZW50ID09IGN1cnJlbnQ6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBpbmRlbnQgPiBjdXJyZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnRzLmFwcGVuZChpbmRlbnQpCisgICAgICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgIyBpbmRlbnQgPCBjdXJyZW50CisgICAgICAgIGlmIGluZGVudCBub3QgaW4gc2VsZi5pbmRlbnRzOgorICAgICAgICAgICAgZmFpbCgiSWxsZWdhbCBvdXRkZW50LiIpCisgICAgICAgIG91dGRlbnRfY291bnQgPSAwCisgICAgICAgIHdoaWxlIGluZGVudCAhPSBjdXJyZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnRzLnBvcCgpCisgICAgICAgICAgICBjdXJyZW50ID0gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICAgICAgb3V0ZGVudF9jb3VudCAtPSAxCisgICAgICAgIHNlbGYubWFyZ2luID0gbWFyZ2luCisgICAgICAgIHJldHVybiBvdXRkZW50X2NvdW50CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVwdGgoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm5zIGhvdyBtYW55IG1hcmdpbnMgYXJlIGN1cnJlbnRseSBkZWZpbmVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmluZGVudHMpCisKKyAgICBkZWYgaW5kZW50KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5kZW50cyBhIGxpbmUgYnkgdGhlIGN1cnJlbnRseSBkZWZpbmVkIG1hcmdpbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLm1hcmdpbiArIGxpbmUKKworICAgIGRlZiBkZWRlbnQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBEZWRlbnRzIGEgbGluZSBieSB0aGUgY3VycmVudGx5IGRlZmluZWQgbWFyZ2luLgorICAgICAgICAoVGhlIGludmVyc2Ugb2YgJ2luZGVudCcuKQorICAgICAgICAiIiIKKyAgICAgICAgbWFyZ2luID0gc2VsZi5tYXJnaW4KKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKG1hcmdpbik6CisgICAgICAgICAgICBmYWlsKCdDYW5ub3QgZGVkZW50LCBsaW5lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHByZXZpb3VzIG1hcmdpbjonKQorICAgICAgICByZXR1cm4gbGluZVtpbmRlbnQ6XQorCisKK2NsYXNzIERTTFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgc2VsZi5jbGluaWMgPSBjbGluaWMKKworICAgICAgICBzZWxmLmRpcmVjdGl2ZXMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIoc2VsZik6CisgICAgICAgICAgICAjIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGggZGlyZWN0aXZlXyBhcmUgYWRkZWQgdG8gZGlyZWN0aXZlcworICAgICAgICAgICAgXywgcywga2V5ID0gbmFtZS5wYXJ0aXRpb24oImRpcmVjdGl2ZV8iKQorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGl2ZXNba2V5XSA9IGdldGF0dHIoc2VsZiwgbmFtZSkKKworICAgICAgICAgICAgIyBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGF0XyBhcmUgdG9vLCB3aXRoIGFuIEAgaW4gZnJvbnQKKyAgICAgICAgICAgIF8sIHMsIGtleSA9IG5hbWUucGFydGl0aW9uKCJhdF8iKQorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGl2ZXNbJ0AnICsga2V5XSA9IGdldGF0dHIoc2VsZiwgbmFtZSkKKworICAgICAgICBzZWxmLnJlc2V0KCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHNlbGYuc3RhdGVfZHNsX3N0YXJ0CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2luZGVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXl3b3JkX29ubHkgPSBGYWxzZQorICAgICAgICBzZWxmLmdyb3VwID0gMAorICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfc3RhcnQKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBJbmRlbnRTdGFjaygpCisgICAgICAgIHNlbGYua2luZCA9IENBTExBQkxFCisgICAgICAgIHNlbGYuY29leGlzdCA9IEZhbHNlCisKKyAgICBkZWYgZGlyZWN0aXZlX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgZmllbGRzID0gbmFtZS5zcGxpdCgnLicpCisgICAgICAgIG5ldyA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKyAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgbmVzdCBhIG1vZHVsZSBpbnNpZGUgYSBjbGFzcyEiKQorICAgICAgICBtID0gTW9kdWxlKG5hbWUsIG1vZHVsZSkKKyAgICAgICAgbW9kdWxlLm1vZHVsZXNbbmFtZV0gPSBtCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQobSkKKworICAgIGRlZiBkaXJlY3RpdmVfY2xhc3Moc2VsZiwgbmFtZSk6CisgICAgICAgIGZpZWxkcyA9IG5hbWUuc3BsaXQoJy4nKQorICAgICAgICBpbl9jbGFzc2VzID0gRmFsc2UKKyAgICAgICAgcGFyZW50ID0gc2VsZgorICAgICAgICBuYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgIHNvX2ZhciA9IFtdCisgICAgICAgIG1vZHVsZSwgY2xzID0gc2VsZi5jbGluaWMuX21vZHVsZV9hbmRfY2xhc3MoZmllbGRzKQorCisgICAgICAgIGlmIG5vdCBtb2R1bGU6CisgICAgICAgICAgICBmYWlsKCJZb3UgbXVzdCBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIG1vZHVsZSBmb3IgdGhlIGNsYXNzLiIpCisKKyAgICAgICAgYyA9IENsYXNzKG5hbWUsIG1vZHVsZSwgY2xzKQorICAgICAgICBtb2R1bGUuY2xhc3Nlc1tuYW1lXSA9IGMKKyAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgY2xzLmNsYXNzZXNbbmFtZV0gPSBjCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoYykKKworICAgIGRlZiBhdF9jbGFzc21ldGhvZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYua2luZCBpcyBDQUxMQUJMRQorICAgICAgICBzZWxmLmtpbmQgPSBDTEFTU19NRVRIT0QKKworICAgIGRlZiBhdF9zdGF0aWNtZXRob2Qoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmtpbmQgaXMgQ0FMTEFCTEUKKyAgICAgICAgc2VsZi5raW5kID0gU1RBVElDX01FVEhPRAorCisgICAgZGVmIGF0X2NvZXhpc3Qoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmNvZXhpc3QgPT0gRmFsc2UKKyAgICAgICAgc2VsZi5jb2V4aXN0ID0gVHJ1ZQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgc2VsZi5yZXNldCgpCisgICAgICAgIHNlbGYuYmxvY2sgPSBibG9jaworICAgICAgICBibG9ja19zdGFydCA9IHNlbGYuY2xpbmljLmJsb2NrX3BhcnNlci5saW5lX251bWJlcgorICAgICAgICBsaW5lcyA9IGJsb2NrLmlucHV0LnNwbGl0KCdcbicpCisgICAgICAgIGZvciBsaW5lX251bWJlciwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMsIHNlbGYuY2xpbmljLmJsb2NrX3BhcnNlci5ibG9ja19zdGFydF9saW5lX251bWJlcik6CisgICAgICAgICAgICBpZiAnXHQnIGluIGxpbmU6CisgICAgICAgICAgICAgICAgZmFpbCgnVGFiIGNoYXJhY3RlcnMgYXJlIGlsbGVnYWwgaW4gdGhlIENsaW5pYyBEU0wuXG5cdCcgKyByZXByKGxpbmUpLCBsaW5lX251bWJlcj1ibG9ja19zdGFydCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGUobGluZSkKKworICAgICAgICBzZWxmLm5leHQoc2VsZi5zdGF0ZV90ZXJtaW5hbCkKKyAgICAgICAgc2VsZi5zdGF0ZShOb25lKQorCisgICAgICAgIGJsb2NrLm91dHB1dCA9IHNlbGYuY2xpbmljLmxhbmd1YWdlLnJlbmRlcihibG9jay5zaWduYXR1cmVzKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgIyBpZ25vcmUgY29tbWVudC1vbmx5IGxpbmVzCisgICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIElnbm9yZSBlbXB0eSBsaW5lcyB0b28KKyAgICAgICAgIyAoYnV0IG5vdCBpbiBkb2NzdHJpbmcgc2VjdGlvbnMhKQorICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2FsY3VsYXRlX2luZGVudChsaW5lKToKKyAgICAgICAgcmV0dXJuIGxlbihsaW5lKSAtIGxlbihsaW5lLnN0cmlwKCkpCisKKyAgICBkZWYgbmV4dChzZWxmLCBzdGF0ZSwgbGluZT1Ob25lKToKKyAgICAgICAgIyByZWFsX3ByaW50KHNlbGYuc3RhdGUuX19uYW1lX18sICItPiIsIHN0YXRlLl9fbmFtZV9fLCAiLCBsaW5lPSIsIGxpbmUpCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZQorICAgICAgICBpZiBsaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGF0ZShsaW5lKQorCisgICAgZGVmIHN0YXRlX2RzbF9zdGFydChzZWxmLCBsaW5lKToKKyAgICAgICAgIyBzZWxmLmJsb2NrID0gc2VsZi5DbGluaWNPdXRwdXRCbG9jayhzZWxmKQorICAgICAgICBpZiBzZWxmLmlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX21vZHVsZW5hbWVfbmFtZSwgbGluZSkKKworICAgIGRlZiBzdGF0ZV9tb2R1bGVuYW1lX25hbWUoc2VsZiwgbGluZSk6CisgICAgICAgICMgbG9va2luZyBmb3IgZGVjbGFyYXRpb24sIHdoaWNoIGVzdGFibGlzaGVzIHRoZSBsZWZ0bW9zdCBjb2x1bW4KKyAgICAgICAgIyBsaW5lIHNob3VsZCBiZQorICAgICAgICAjICAgICBtb2R1bGVuYW1lLmZubmFtZSBbYXMgY19iYXNlbmFtZV0gWy0+IHJldHVybiBhbm5vdGF0aW9uXQorICAgICAgICAjIHNxdWFyZSBicmFja2V0cyBkZW5vdGUgb3B0aW9uYWwgc3ludGF4LgorICAgICAgICAjCisgICAgICAgICMgKGJ1dCB3ZSBtaWdodCBmaW5kIGEgZGlyZWN0aXZlIGZpcnN0ISkKKyAgICAgICAgIworICAgICAgICAjIHRoaXMgbGluZSBpcyBwZXJtaXR0ZWQgdG8gc3RhcnQgd2l0aCB3aGl0ZXNwYWNlLgorICAgICAgICAjIHdlJ2xsIGNhbGwgdGhpcyBudW1iZXIgb2Ygc3BhY2VzIEYgKGZvciAiZnVuY3Rpb24iKS4KKworICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5pbmRlbnQuaW5mZXIobGluZSkKKworICAgICAgICAjIGlzIGl0IGEgZGlyZWN0aXZlPworICAgICAgICBmaWVsZHMgPSBzaGxleC5zcGxpdChsaW5lKQorICAgICAgICBkaXJlY3RpdmVfbmFtZSA9IGZpZWxkc1swXQorICAgICAgICBkaXJlY3RpdmUgPSBzZWxmLmRpcmVjdGl2ZXMuZ2V0KGRpcmVjdGl2ZV9uYW1lLCBOb25lKQorICAgICAgICBpZiBkaXJlY3RpdmU6CisgICAgICAgICAgICBkaXJlY3RpdmUoKmZpZWxkc1sxOl0pCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsaW5lLCBfLCByZXR1cm5zID0gbGluZS5wYXJ0aXRpb24oJy0+JykKKworICAgICAgICBmdWxsX25hbWUsIF8sIGNfYmFzZW5hbWUgPSBsaW5lLnBhcnRpdGlvbignIGFzICcpCisgICAgICAgIGZ1bGxfbmFtZSA9IGZ1bGxfbmFtZS5zdHJpcCgpCisgICAgICAgIGNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lLnN0cmlwKCkgb3IgTm9uZQorCisgICAgICAgIGlmIG5vdCBpc19sZWdhbF9weV9pZGVudGlmaWVyKGZ1bGxfbmFtZSk6CisgICAgICAgICAgICBmYWlsKCJJbGxlZ2FsIGZ1bmN0aW9uIG5hbWU6IHt9Ii5mb3JtYXQoZnVsbF9uYW1lKSkKKyAgICAgICAgaWYgY19iYXNlbmFtZSBhbmQgbm90IGlzX2xlZ2FsX2NfaWRlbnRpZmllcihjX2Jhc2VuYW1lKToKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgQyBiYXNlbmFtZToge30iLmZvcm1hdChjX2Jhc2VuYW1lKSkKKworICAgICAgICBpZiBub3QgcmV0dXJuczoKKyAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSBDUmV0dXJuQ29udmVydGVyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzdF9pbnB1dCA9ICJkZWYgeCgpIC0+IHt9OiBwYXNzIi5mb3JtYXQocmV0dXJucykKKyAgICAgICAgICAgIG1vZHVsZSA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UoYXN0X2lucHV0KQorICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIG5vdCBtb2R1bGU6CisgICAgICAgICAgICAgICAgZmFpbCgiQmFkbHktZm9ybWVkIGFubm90YXRpb24gZm9yICIgKyBmdWxsX25hbWUgKyAiOiAiICsgcmV0dXJucykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYW1lLCBsZWdhY3ksIGt3YXJncyA9IHNlbGYucGFyc2VfY29udmVydGVyKG1vZHVsZS5ib2R5WzBdLnJldHVybnMpCisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBsZWdhY3kKKyAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiByZXR1cm5fY29udmVydGVyczoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiRXJyb3I6IE5vIGF2YWlsYWJsZSByZXR1cm4gY29udmVydGVyIGNhbGxlZCAiICsgcmVwcihuYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm5fY29udmVydGVyID0gcmV0dXJuX2NvbnZlcnRlcnNbbmFtZV0oKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBmYWlsKCJCYWRseS1mb3JtZWQgYW5ub3RhdGlvbiBmb3IgIiArIGZ1bGxfbmFtZSArICI6ICIgKyByZXR1cm5zKQorCisgICAgICAgIGZpZWxkcyA9IFt4LnN0cmlwKCkgZm9yIHggaW4gZnVsbF9uYW1lLnNwbGl0KCcuJyldCisgICAgICAgIGZ1bmN0aW9uX25hbWUgPSBmaWVsZHMucG9wKCkKKyAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisKKyAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgIGZhaWwoIlVuZGVmaW5lZCBtb2R1bGUgdXNlZCBpbiBkZWNsYXJhdGlvbiBvZiAiICsgcmVwcihmdWxsX25hbWUuc3RyaXAoKSkgKyAiLiIpCisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBGdW5jdGlvbihuYW1lPWZ1bmN0aW9uX25hbWUsIGZ1bGxfbmFtZT1mdWxsX25hbWUsIG1vZHVsZT1tb2R1bGUsIGNscz1jbHMsIGNfYmFzZW5hbWU9Y19iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXI9cmV0dXJuX2NvbnZlcnRlciwga2luZD1zZWxmLmtpbmQsIGNvZXhpc3Q9c2VsZi5jb2V4aXN0KQorICAgICAgICBzZWxmLmJsb2NrLnNpZ25hdHVyZXMuYXBwZW5kKHNlbGYuZnVuY3Rpb24pCisgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlcnNfc3RhcnQpCisKKyAgICAjIE5vdyBlbnRlcmluZyB0aGUgcGFyYW1ldGVycyBzZWN0aW9uLiAgVGhlIHJ1bGVzLCBmb3JtYWxseSBzdGF0ZWQ6CisgICAgIworICAgICMgICAqIEFsbCBsaW5lcyBtdXN0IGJlIGluZGVudGVkIHdpdGggc3BhY2VzIG9ubHkuCisgICAgIyAgICogVGhlIGZpcnN0IGxpbmUgbXVzdCBiZSBhIHBhcmFtZXRlciBkZWNsYXJhdGlvbi4KKyAgICAjICAgKiBUaGUgZmlyc3QgbGluZSBtdXN0IGJlIGluZGVudGVkLgorICAgICMgICAgICAgKiBUaGlzIGZpcnN0IGxpbmUgZXN0YWJsaXNoZXMgdGhlIGluZGVudCBmb3IgcGFyYW1ldGVycy4KKyAgICAjICAgICAgICogV2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgUCAoZm9yICJwYXJhbWV0ZXIiKS4KKyAgICAjICAgKiBUaGVuY2Vmb3J0aDoKKyAgICAjICAgICAgICogTGluZXMgaW5kZW50ZWQgd2l0aCBQIHNwYWNlcyBzcGVjaWZ5IGEgcGFyYW1ldGVyLgorICAgICMgICAgICAgKiBMaW5lcyBpbmRlbnRlZCB3aXRoID4gUCBzcGFjZXMgYXJlIGRvY3N0cmluZ3MgZm9yIHRoZSBwcmV2aW91cworICAgICMgICAgICAgICBwYXJhbWV0ZXIuCisgICAgIyAgICAgICAgICAgKiBXZSdsbCBjYWxsIHRoaXMgbnVtYmVyIG9mIHNwYWNlcyBEIChmb3IgImRvY3N0cmluZyIpLgorICAgICMgICAgICAgICAgICogQWxsIHN1YnNlcXVlbnQgbGluZXMgaW5kZW50ZWQgd2l0aCA+PSBEIHNwYWNlcyBhcmUgc3RvcmVkIGFzCisgICAgIyAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBwZXItcGFyYW1ldGVyIGRvY3N0cmluZy4KKyAgICAjICAgICAgICAgICAqIEFsbCBsaW5lcyB3aWxsIGhhdmUgdGhlIGZpcnN0IEQgc3BhY2VzIG9mIHRoZSBpbmRlbnQgc3RyaXBwZWQKKyAgICAjICAgICAgICAgICAgIGJlZm9yZSB0aGV5IGFyZSBzdG9yZWQuCisgICAgIyAgICAgICAgICAgKiBJdCdzIGlsbGVnYWwgdG8gaGF2ZSBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhIG51bWJlciBvZiBzcGFjZXMgWAorICAgICMgICAgICAgICAgICAgc3VjaCB0aGF0IFAgPCBYIDwgRC4KKyAgICAjICAgICAgICogQSBsaW5lIHdpdGggPCBQIHNwYWNlcyBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZnVuY3Rpb24KKyAgICAjICAgICAgICAgZG9jc3RyaW5nLCB3aGljaCBlbmRzIHByb2Nlc3NpbmcgZm9yIHBhcmFtZXRlcnMgYW5kIHBlci1wYXJhbWV0ZXIKKyAgICAjICAgICAgICAgZG9jc3RyaW5ncy4KKyAgICAjICAgICAgICAgICAqIFRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmdW5jdGlvbiBkb2NzdHJpbmcgbXVzdCBiZSBhdCB0aGUgc2FtZQorICAgICMgICAgICAgICAgICAgaW5kZW50IGFzIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgICAjICAgICAgICogSXQncyBpbGxlZ2FsIHRvIGhhdmUgYW55IGxpbmUgaW4gdGhlIHBhcmFtZXRlcnMgc2VjdGlvbiBzdGFydGluZworICAgICMgICAgICAgICB3aXRoIFggc3BhY2VzIHN1Y2ggdGhhdCBGIDwgWCA8IFAuICAoQXMgYmVmb3JlLCBGIGlzIHRoZSBpbmRlbnQKKyAgICAjICAgICAgICAgb2YgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLikKKyAgICAjCisgICAgIyMjIyMjIyMjIyMjIyMKKyAgICAjCisgICAgIyBBbHNvLCBjdXJyZW50bHkgQXJndW1lbnQgQ2xpbmljIHBsYWNlcyB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBvbiBncm91cHM6CisgICAgIyAgICogRWFjaCBncm91cCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhcmFtZXRlci4KKyAgICAjICAgKiBFYWNoIGdyb3VwIG1heSBjb250YWluIGF0IG1vc3Qgb25lIGdyb3VwLCB3aGljaCBtdXN0IGJlIHRoZSBmdXJ0aGVzdAorICAgICMgICAgIHRoaW5nIGluIHRoZSBncm91cCBmcm9tIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLiAgKFRoZSBuZXN0ZWQgZ3JvdXAKKyAgICAjICAgICBtdXN0IGJlIHRoZSBmaXJzdCBpbiB0aGUgZ3JvdXAgd2hlbiBpdCdzIGJlZm9yZSB0aGUgcmVxdWlyZWQKKyAgICAjICAgICBwYXJhbWV0ZXJzLCBhbmQgdGhlIGxhc3QgdGhpbmcgaW4gdGhlIGdyb3VwIHdoZW4gYWZ0ZXIgdGhlIHJlcXVpcmVkCisgICAgIyAgICAgcGFyYW1ldGVycy4pCisgICAgIyAgICogVGhlcmUgbWF5IGJlIGF0IG1vc3Qgb25lICh0b3AtbGV2ZWwpIGdyb3VwIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IG9mCisgICAgIyAgICAgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyAgICogWW91IG11c3Qgc3BlY2lmeSBhIHNsYXNoLCBhbmQgaXQgbXVzdCBiZSBhZnRlciBhbGwgcGFyYW1ldGVycy4KKyAgICAjICAgICAoSW4gb3RoZXIgd29yZHM6IGVpdGhlciBhbGwgcGFyYW1ldGVycyBhcmUgcG9zaXRpb25hbC1vbmx5LAorICAgICMgICAgICBvciBub25lIGFyZS4pCisgICAgIworICAgICMgIFNhaWQgYW5vdGhlciB3YXk6CisgICAgIyAgICogRWFjaCBncm91cCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhcmFtZXRlci4KKyAgICAjICAgKiBBbGwgbGVmdCBzcXVhcmUgYnJhY2tldHMgYmVmb3JlIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIG11c3QgYmUKKyAgICAjICAgICBjb25zZWN1dGl2ZS4gIChZb3UgY2FuJ3QgaGF2ZSBhIGxlZnQgc3F1YXJlIGJyYWNrZXQgZm9sbG93ZWQKKyAgICAjICAgICBieSBhIHBhcmFtZXRlciwgdGhlbiBhbm90aGVyIGxlZnQgc3F1YXJlIGJyYWNrZXQuICBZb3UgY2FuJ3QKKyAgICAjICAgICBoYXZlIGEgbGVmdCBzcXVhcmUgYnJhY2tldCwgYSBwYXJhbWV0ZXIsIGEgcmlnaHQgc3F1YXJlIGJyYWNrZXQsCisgICAgIyAgICAgYW5kIHRoZW4gYSBsZWZ0IHNxdWFyZSBicmFja2V0LikKKyAgICAjICAgKiBBbGwgcmlnaHQgc3F1YXJlIGJyYWNrZXRzIGFmdGVyIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIG11c3QgYmUKKyAgICAjICAgICBjb25zZWN1dGl2ZS4KKyAgICAjCisgICAgIyBUaGVzZSBydWxlcyBhcmUgZW5mb3JjZWQgd2l0aCBhIHNpbmdsZSBzdGF0ZSB2YXJpYWJsZToKKyAgICAjICJwYXJhbWV0ZXJfc3RhdGUiLiAgKFByZXZpb3VzbHkgdGhlIGNvZGUgd2FzIGEgbWlhc21hIG9mIGlmcyBhbmQKKyAgICAjIHNlcGFyYXRlIGJvb2xlYW4gc3RhdGUgdmFyaWFibGVzLikgIFRoZSBzdGF0ZXMgYXJlOgorICAgICMKKyAgICAjICBbIFsgYSwgYiwgXSBjLCBdIGQsIGUsIGYsIFsgZywgaCwgWyBpIF0gXSAvICAgPC0gbGluZQorICAgICMgMDEgICAyICAgICAgICAgIDMgICAgICAgICAgNCAgICAgICAgICAgNSAgIDYgICA8LSBzdGF0ZSB0cmFuc2l0aW9ucworICAgICMKKyAgICAjIDA6IHBzX3N0YXJ0LiAgYmVmb3JlIHdlJ3ZlIHNlZW4gYW55dGhpbmcuICBsZWdhbCB0cmFuc2l0aW9ucyBhcmUgdG8gMSBvciAzLgorICAgICMgMTogcHNfbGVmdF9zcXVhcmVfYmVmb3JlLiAgbGVmdCBzcXVhcmUgYnJhY2tldHMgYmVmb3JlIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyAyOiBwc19ncm91cF9iZWZvcmUuICBpbiBhIGdyb3VwLCBiZWZvcmUgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDM6IHBzX3JlcXVpcmVkLiAgcmVxdWlyZWQgcGFyYW1ldGVycy4gIChyZW51bWJlciBsZWZ0IGdyb3VwcyEpCisgICAgIyA0OiBwc19ncm91cF9hZnRlci4gIGluIGEgZ3JvdXAsIGFmdGVyIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyA1OiBwc19yaWdodF9zcXVhcmVfYWZ0ZXIuICByaWdodCBzcXVhcmUgYnJhY2tldHMgYWZ0ZXIgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDY6IHBzX3NlZW5fc2xhc2guICBzZWVuIHNsYXNoLgorICAgIHBzX3N0YXJ0LCBwc19sZWZ0X3NxdWFyZV9iZWZvcmUsIHBzX2dyb3VwX2JlZm9yZSwgcHNfcmVxdWlyZWQsIFwKKyAgICBwc19ncm91cF9hZnRlciwgcHNfcmlnaHRfc3F1YXJlX2FmdGVyLCBwc19zZWVuX3NsYXNoID0gcmFuZ2UoNykKKworICAgIGRlZiBzdGF0ZV9wYXJhbWV0ZXJzX3N0YXJ0KHNlbGYsIGxpbmUpOgorICAgICAgICBpZiBzZWxmLmlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBpZiB0aGlzIGxpbmUgaXMgbm90IGluZGVudGVkLCB3ZSBoYXZlIG5vIHBhcmFtZXRlcnMKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50LmluZmVyKGxpbmUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZywgbGluZSkKKworICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyLCBsaW5lKQorCisKKyAgICBkZWYgdG9fcmVxdWlyZWQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUcmFuc2l0aW9uIHRvIHRoZSAicmVxdWlyZWQiIHBhcmFtZXRlciBzdGF0ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlICE9IHNlbGYucHNfcmVxdWlyZWQ6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfcmVxdWlyZWQKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBwLmdyb3VwID0gLXAuZ3JvdXAKKworICAgIGRlZiBzdGF0ZV9wYXJhbWV0ZXIoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIHNlbGYuaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnQuZGVwdGggPT0gMgorICAgICAgICBpbmRlbnQgPSBzZWxmLmluZGVudC5pbmZlcihsaW5lKQorICAgICAgICBpZiBpbmRlbnQgPT0gLTE6CisgICAgICAgICAgICAjIHdlIG91dGRlbnRlZCwgbXVzdCBiZSB0byBkZWZpbml0aW9uIGNvbHVtbgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZywgbGluZSkKKworICAgICAgICBpZiBpbmRlbnQgPT0gMToKKyAgICAgICAgICAgICMgd2UgaW5kZW50ZWQsIG11c3QgYmUgdG8gbmV3IHBhcmFtZXRlciBkb2NzdHJpbmcgY29sdW1uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZ19zdGFydCwgbGluZSkKKworICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoKQorCisgICAgICAgIGlmIGxpbmUgaW4gKCcqJywgJy8nLCAnWycsICddJyk6CisgICAgICAgICAgICBzZWxmLnBhcnNlX3NwZWNpYWxfc3ltYm9sKGxpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19zdGFydCwgc2VsZi5wc19yZXF1aXJlZCk6CisgICAgICAgICAgICBzZWxmLnRvX3JlcXVpcmVkKCkKKyAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9PSBzZWxmLnBzX2xlZnRfc3F1YXJlX2JlZm9yZToKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19ncm91cF9iZWZvcmUKKyAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9PSBzZWxmLnBzX2dyb3VwX2JlZm9yZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIHNlbGYudG9fcmVxdWlyZWQoKQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfZ3JvdXBfYWZ0ZXI6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgIiArIHN0cihzZWxmLnBhcmFtZXRlcl9zdGF0ZSkgKyAiKSIpCisKKyAgICAgICAgYXN0X2lucHV0ID0gImRlZiB4KHt9KTogcGFzcyIuZm9ybWF0KGxpbmUpCisgICAgICAgIG1vZHVsZSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlID0gYXN0LnBhcnNlKGFzdF9pbnB1dCkKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3QgbW9kdWxlOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIGludmFsaWQgcGFyYW1ldGVyIGRlY2xhcmF0aW9uOlxuXHQiICsgbGluZSkKKworICAgICAgICBmdW5jdGlvbl9hcmdzID0gbW9kdWxlLmJvZHlbMF0uYXJncworICAgICAgICBwYXJhbWV0ZXIgPSBmdW5jdGlvbl9hcmdzLmFyZ3NbMF0KKworICAgICAgICBpZiBmdW5jdGlvbl9hcmdzLmRlZmF1bHRzOgorICAgICAgICAgICAgZXhwciA9IGZ1bmN0aW9uX2FyZ3MuZGVmYXVsdHNbMF0KKyAgICAgICAgICAgICMgbWlsZCBoYWNrOiBleHBsaWNpdGx5IHN1cHBvcnQgTlVMTCBhcyBhIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwciwgYXN0Lk5hbWUpIGFuZCBleHByLmlkID09ICdOVUxMJzoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IE5VTEwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3QubGl0ZXJhbF9ldmFsKGV4cHIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWx1ZSA9IHVuc3BlY2lmaWVkCisKKyAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIuYXJnCisgICAgICAgIG5hbWUsIGxlZ2FjeSwga3dhcmdzID0gc2VsZi5wYXJzZV9jb252ZXJ0ZXIocGFyYW1ldGVyLmFubm90YXRpb24pCisgICAgICAgIGRpY3QgPSBsZWdhY3lfY29udmVydGVycyBpZiBsZWdhY3kgZWxzZSBjb252ZXJ0ZXJzCisgICAgICAgIGxlZ2FjeV9zdHIgPSAibGVnYWN5ICIgaWYgbGVnYWN5IGVsc2UgIiIKKyAgICAgICAgaWYgbmFtZSBub3QgaW4gZGljdDoKKyAgICAgICAgICAgIGZhaWwoJ3t9IGlzIG5vdCBhIHZhbGlkIHt9Y29udmVydGVyJy5mb3JtYXQobmFtZSwgbGVnYWN5X3N0cikpCisgICAgICAgIGNvbnZlcnRlciA9IGRpY3RbbmFtZV0ocGFyYW1ldGVyX25hbWUsIHNlbGYuZnVuY3Rpb24sIHZhbHVlLCAqKmt3YXJncykKKworICAgICAgICBraW5kID0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZIGlmIHNlbGYua2V5d29yZF9vbmx5IGVsc2UgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JECisgICAgICAgIHAgPSBQYXJhbWV0ZXIocGFyYW1ldGVyX25hbWUsIGtpbmQsIGZ1bmN0aW9uPXNlbGYuZnVuY3Rpb24sIGNvbnZlcnRlcj1jb252ZXJ0ZXIsIGRlZmF1bHQ9dmFsdWUsIGdyb3VwPXNlbGYuZ3JvdXApCisgICAgICAgIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVyc1twYXJhbWV0ZXJfbmFtZV0gPSBwCisKKyAgICBkZWYgcGFyc2VfY29udmVydGVyKHNlbGYsIGFubm90YXRpb24pOgorICAgICAgICBpZiBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5TdHIpOgorICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb24ucywgVHJ1ZSwge30KKworICAgICAgICBpZiBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5OYW1lKToKKyAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uLmlkLCBGYWxzZSwge30KKworICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhbm5vdGF0aW9uLCBhc3QuQ2FsbCkKKworICAgICAgICBuYW1lID0gYW5ub3RhdGlvbi5mdW5jLmlkCisgICAgICAgIGt3YXJncyA9IHtub2RlLmFyZzogYXN0LmxpdGVyYWxfZXZhbChub2RlLnZhbHVlKSBmb3Igbm9kZSBpbiBhbm5vdGF0aW9uLmtleXdvcmRzfQorICAgICAgICByZXR1cm4gbmFtZSwgRmFsc2UsIGt3YXJncworCisgICAgZGVmIHBhcnNlX3NwZWNpYWxfc3ltYm9sKHNlbGYsIHN5bWJvbCk6CisgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfc2Vlbl9zbGFzaDoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIHNwZWNpZmllcyAiICsgc3ltYm9sICsgIiBhZnRlciAvLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorCisgICAgICAgIGlmIHN5bWJvbCA9PSAnKic6CisgICAgICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiB1c2VzICcqJyBtb3JlIHRoYW4gb25jZS4iKQorICAgICAgICAgICAgc2VsZi5rZXl3b3JkX29ubHkgPSBUcnVlCisgICAgICAgIGVsaWYgc3ltYm9sID09ICdbJzoKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3N0YXJ0LCBzZWxmLnBzX2xlZnRfc3F1YXJlX2JlZm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2xlZnRfc3F1YXJlX2JlZm9yZQorICAgICAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19yZXF1aXJlZCwgc2VsZi5wc19ncm91cF9hZnRlcik6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2FmdGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIpIikKKyAgICAgICAgICAgIHNlbGYuZ3JvdXAgKz0gMQorICAgICAgICBlbGlmIHN5bWJvbCA9PSAnXSc6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ncm91cDoKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYSBdIHdpdGhvdXQgYSBtYXRjaGluZyBbLiIpCisgICAgICAgICAgICBpZiBub3QgYW55KHAuZ3JvdXAgPT0gc2VsZi5ncm91cCBmb3IgcCBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMudmFsdWVzKCkpOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBlbXB0eSBncm91cC5cbkFsbCBncm91cHMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuIikKKyAgICAgICAgICAgIHNlbGYuZ3JvdXAgLT0gMQorICAgICAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlLCBzZWxmLnBzX2dyb3VwX2JlZm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2JlZm9yZQorICAgICAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19ncm91cF9hZnRlciwgc2VsZi5wc19yaWdodF9zcXVhcmVfYWZ0ZXIpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19yaWdodF9zcXVhcmVfYWZ0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIikiKQorICAgICAgICBlbGlmIHN5bWJvbCA9PSAnLyc6CisgICAgICAgICAgICAjIHBzX3JlcXVpcmVkIGlzIGFsbG93ZWQgaGVyZSwgdGhhdCBhbGxvd3MgcG9zaXRpb25hbC1vbmx5IHdpdGhvdXQgb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyB0byB3b3JrIChhbmQgaGF2ZSBkZWZhdWx0IHZhbHVlcyEpCisgICAgICAgICAgICBpZiAoc2VsZi5wYXJhbWV0ZXJfc3RhdGUgbm90IGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlciwgc2VsZi5wc19ncm91cF9iZWZvcmUpKSBvciBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIpIikKKyAgICAgICAgICAgIGlmIHNlbGYua2V5d29yZF9vbmx5OgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIG1peGVzIGtleXdvcmQtb25seSBhbmQgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMsIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIpCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfc2Vlbl9zbGFzaAorICAgICAgICAgICAgIyBmaXh1cCBwcmVjZWVkaW5nIHBhcmFtZXRlcnMKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBpZiBwLmtpbmQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JEOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBtaXhlcyBrZXl3b3JkLW9ubHkgYW5kIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorICAgICAgICAgICAgICAgIHAua2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmdfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2RvY3N0cmluZ19pbmRlbnQgPSBsZW4oc2VsZi5pbmRlbnQubWFyZ2luKQorICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnQuZGVwdGggPT0gMworICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZywgbGluZSkKKworICAgICMgZXZlcnkgbGluZSBvZiB0aGUgZG9jc3RyaW5nIG11c3Qgc3RhcnQgd2l0aCBhdCBsZWFzdCBGIHNwYWNlcywKKyAgICAjIHdoZXJlIEYgPiBQLgorICAgICMgdGhlc2UgRiBzcGFjZXMgd2lsbCBiZSBzdHJpcHBlZC4KKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnQubWVhc3VyZShsaW5lKQorICAgICAgICBpZiBpbmRlbnQgPCBzZWxmLnBhcmFtZXRlcl9kb2NzdHJpbmdfaW5kZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnQuaW5mZXIobGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA8IDMKKyAgICAgICAgICAgIGlmIHNlbGYuaW5kZW50LmRlcHRoID09IDI6CisgICAgICAgICAgICAgICAgIyBiYWNrIHRvIGEgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlciwgbGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGFzc2VydCBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMKKyAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3Qoc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpKSkpCisKKyAgICAgICAgbmV3X2RvY3N0cmluZyA9IGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZworCisgICAgICAgIGlmIG5ld19kb2NzdHJpbmc6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9ICdcbicKKyAgICAgICAgaWYgc3RyaXBwZWQ6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9IHNlbGYuaW5kZW50LmRlZGVudChsaW5lKQorCisgICAgICAgIGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZyA9IG5ld19kb2NzdHJpbmcKKworICAgICMgdGhlIGZpbmFsIHN0YW56YSBvZiB0aGUgRFNMIGlzIHRoZSBkb2NzdHJpbmcuCisgICAgZGVmIHN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5ncm91cDoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhIF0gd2l0aG91dCBhIG1hdGNoaW5nIFsuIikKKworICAgICAgICBzdHJpcHBlZCA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzdHJpcHBlZC5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBuZXdfZG9jc3RyaW5nID0gc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcKKyAgICAgICAgaWYgbmV3X2RvY3N0cmluZzoKKyAgICAgICAgICAgIG5ld19kb2NzdHJpbmcgKz0gIlxuIgorICAgICAgICBpZiBzdHJpcHBlZDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLmluZGVudC5kZWRlbnQobGluZSkucnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmUgPSAnJworICAgICAgICBuZXdfZG9jc3RyaW5nICs9IGxpbmUKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBuZXdfZG9jc3RyaW5nCisKKyAgICBkZWYgZm9ybWF0X2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZnVuY3Rpb24KKworICAgICAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBwYXJhbWV0ZXJzID0gbGlzdChmLnBhcmFtZXRlcnMudmFsdWVzKCkpCisKKyAgICAgICAgIyMKKyAgICAgICAgIyMgZG9jc3RyaW5nIGZpcnN0IGxpbmUKKyAgICAgICAgIyMKKworICAgICAgICBhZGQoZi5mdWxsX25hbWUpCisgICAgICAgIGFkZCgnKCcpCisKKyAgICAgICAgIyBwb3B1bGF0ZSAicmlnaHRfYnJhY2tldF9jb3VudCIgZmllbGQgZm9yIGV2ZXJ5IHBhcmFtZXRlcgorICAgICAgICBpZiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgIyBmb3Igbm93LCB0aGUgb25seSB3YXkgQ2xpbmljIHN1cHBvcnRzIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzCisgICAgICAgICAgICAjIGlzIGlmIGFsbCBvZiB0aGVtIGFyZSBwb3NpdGlvbmFsLW9ubHkuCisgICAgICAgICAgICBwb3NpdGlvbmFsX29ubHlfcGFyYW1ldGVycyA9IFtwLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZIGZvciBwIGluIHBhcmFtZXRlcnNdCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXJzWzBdLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZOgorICAgICAgICAgICAgICAgIGFzc2VydCBhbGwocG9zaXRpb25hbF9vbmx5X3BhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICAgICAgcC5yaWdodF9icmFja2V0X2NvdW50ID0gYWJzKHAuZ3JvdXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZG9uJ3QgcHV0IGFueSByaWdodCBicmFja2V0cyBhcm91bmQgbm9uLXBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCBldmVyLgorICAgICAgICAgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgIHAucmlnaHRfYnJhY2tldF9jb3VudCA9IDAKKworICAgICAgICByaWdodF9icmFja2V0X2NvdW50ID0gMAorCisgICAgICAgIGRlZiBmaXhfcmlnaHRfYnJhY2tldF9jb3VudChkZXNpcmVkKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHJpZ2h0X2JyYWNrZXRfY291bnQKKyAgICAgICAgICAgIHMgPSAnJworICAgICAgICAgICAgd2hpbGUgcmlnaHRfYnJhY2tldF9jb3VudCA8IGRlc2lyZWQ6CisgICAgICAgICAgICAgICAgcyArPSAnWycKKyAgICAgICAgICAgICAgICByaWdodF9icmFja2V0X2NvdW50ICs9IDEKKyAgICAgICAgICAgIHdoaWxlIHJpZ2h0X2JyYWNrZXRfY291bnQgPiBkZXNpcmVkOgorICAgICAgICAgICAgICAgIHMgKz0gJ10nCisgICAgICAgICAgICAgICAgcmlnaHRfYnJhY2tldF9jb3VudCAtPSAxCisgICAgICAgICAgICByZXR1cm4gcworCisgICAgICAgIGFkZGVkX3N0YXIgPSBGYWxzZQorICAgICAgICBhZGRfY29tbWEgPSBGYWxzZQorCisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBhc3NlcnQgcC5uYW1lCisKKyAgICAgICAgICAgIGlmIHAuaXNfa2V5d29yZF9vbmx5KCkgYW5kIG5vdCBhZGRlZF9zdGFyOgorICAgICAgICAgICAgICAgIGFkZGVkX3N0YXIgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgYWRkX2NvbW1hOgorICAgICAgICAgICAgICAgICAgICBhZGQoJywgJykKKyAgICAgICAgICAgICAgICBhZGQoJyonKQorCisgICAgICAgICAgICBhID0gW3AubmFtZV0KKyAgICAgICAgICAgIGlmIHAuY29udmVydGVyLmlzX29wdGlvbmFsKCk6CisgICAgICAgICAgICAgICAgYS5hcHBlbmQoJz0nKQorICAgICAgICAgICAgICAgIHZhbHVlID0gcC5jb252ZXJ0ZXIuZGVmYXVsdAorICAgICAgICAgICAgICAgIGEuYXBwZW5kKHAuY29udmVydGVyLmRvY19kZWZhdWx0KQorICAgICAgICAgICAgcyA9IGZpeF9yaWdodF9icmFja2V0X2NvdW50KHAucmlnaHRfYnJhY2tldF9jb3VudCkKKyAgICAgICAgICAgIHMgKz0gIiIuam9pbihhKQorICAgICAgICAgICAgaWYgYWRkX2NvbW1hOgorICAgICAgICAgICAgICAgIGFkZCgnLCAnKQorICAgICAgICAgICAgYWRkKHMpCisgICAgICAgICAgICBhZGRfY29tbWEgPSBUcnVlCisKKyAgICAgICAgYWRkKGZpeF9yaWdodF9icmFja2V0X2NvdW50KDApKQorICAgICAgICBhZGQoJyknKQorCisgICAgICAgIGlmIGYucmV0dXJuX2NvbnZlcnRlci5kb2NfZGVmYXVsdDoKKyAgICAgICAgICAgIGFkZCgnIC0+ICcpCisgICAgICAgICAgICBhZGQoZi5yZXR1cm5fY29udmVydGVyLmRvY19kZWZhdWx0KQorCisgICAgICAgIGRvY3N0cmluZ19maXJzdF9saW5lID0gb3V0cHV0KCkKKworICAgICAgICAjIG5vdyBmaXggdXAgdGhlIHBsYWNlcyB3aGVyZSB0aGUgYnJhY2tldHMgbG9vayB3cm9uZworICAgICAgICBkb2NzdHJpbmdfZmlyc3RfbGluZSA9IGRvY3N0cmluZ19maXJzdF9saW5lLnJlcGxhY2UoJywgXScsICcsXSAnKQorCisgICAgICAgICMgb2theS4gIG5vdyB3ZSdyZSBvZmZpY2lhbGx5IGJ1aWxkaW5nIHRoZQorICAgICAgICAjICJwcm90b3R5cGUiIHNlY3Rpb24uCisgICAgICAgIGFkZChkb2NzdHJpbmdfZmlyc3RfbGluZSkKKworICAgICAgICAjIGNyZWF0ZSBzdWJzdGl0dXRpb24gdGV4dCBmb3Ige3BhcmFtZXRlcnN9CisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBpZiBub3QgcC5kb2NzdHJpbmcuc3RyaXAoKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICBhZGQoIiAgIikKKyAgICAgICAgICAgIGFkZChwLm5hbWUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGFkZCh0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHAuZG9jc3RyaW5nLnJzdHJpcCgpKSwgIiAgICAiKSkKKyAgICAgICAgcHJvdG90eXBlID0gb3V0cHV0KCkKKworICAgICAgICAjIworICAgICAgICAjIyBkb2NzdHJpbmcgYm9keQorICAgICAgICAjIworCisgICAgICAgIGRvY3N0cmluZyA9IGYuZG9jc3RyaW5nLnJzdHJpcCgpCisgICAgICAgIGxpbmVzID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gZG9jc3RyaW5nLnNwbGl0KCdcbicpXQorCisgICAgICAgICMgRW5mb3JjZSB0aGUgc3VtbWFyeSBsaW5lIQorICAgICAgICAjIFRoZSBmaXJzdCBsaW5lIG9mIGEgZG9jc3RyaW5nIHNob3VsZCBiZSBhIHN1bW1hcnkgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAjIEl0IHNob3VsZCBmaXQgb24gb25lIGxpbmUgKDgwIGNvbHVtbnM/IDc5IG1heWJlPykgYW5kIGJlIGEgcGFyYWdyYXBoCisgICAgICAgICMgYnkgaXRzZWxmLgorICAgICAgICAjCisgICAgICAgICMgQXJndW1lbnQgQ2xpbmljIGVuZm9yY2VzIHRoZSBmb2xsb3dpbmcgcnVsZToKKyAgICAgICAgIyAgKiBlaXRoZXIgdGhlIGRvY3N0cmluZyBpcyBlbXB0eSwKKyAgICAgICAgIyAgKiBvciBpdCBtdXN0IGhhdmUgYSBzdW1tYXJ5IGxpbmUuCisgICAgICAgICMKKyAgICAgICAgIyBHdWlkbyBzYWlkIENsaW5pYyBzaG91bGQgZW5mb3JjZSB0aGlzOgorICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMy1KdW5lLzEyNzExMC5odG1sCisKKyAgICAgICAgaWYgbGVuKGxpbmVzKSA+PSAyOgorICAgICAgICAgICAgaWYgbGluZXNbMV06CisgICAgICAgICAgICAgICAgZmFpbCgiRG9jc3RyaW5nIGZvciAiICsgZi5mdWxsX25hbWUgKyAiIGRvZXMgbm90IGhhdmUgYSBzdW1tYXJ5IGxpbmUhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIkV2ZXJ5IG5vbi1ibGFuayBmdW5jdGlvbiBkb2NzdHJpbmcgbXVzdCBzdGFydCB3aXRoXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGxpbmUgc3VtbWFyeSBmb2xsb3dlZCBieSBhbiBlbXB0eSBsaW5lLiIpCisgICAgICAgIGVsaWYgbGVuKGxpbmVzKSA9PSAxOgorICAgICAgICAgICAgIyB0aGUgZG9jc3RyaW5nIGlzIG9ubHkgb25lIGxpbmUgcmlnaHQgbm93LS10aGUgc3VtbWFyeSBsaW5lLgorICAgICAgICAgICAgIyBhZGQgYW4gZW1wdHkgbGluZSBhZnRlciB0aGUgc3VtbWFyeSBsaW5lIHNvIHdlIGhhdmUgc3BhY2UKKyAgICAgICAgICAgICMgYmV0d2VlbiBpdCBhbmQgdGhlIHtwcm90b3R5cGV9IHdlJ3JlIGFib3V0IHRvIGFkZC4KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAgICBwcm90b3R5cGVfbWFya2VyX2NvdW50ID0gbGVuKGRvY3N0cmluZy5zcGxpdCgne3Byb3RvdHlwZX0nKSkgLSAxCisgICAgICAgIGlmIHByb3RvdHlwZV9tYXJrZXJfY291bnQ6CisgICAgICAgICAgICBmYWlsKCdZb3UgbWF5IG5vdCBzcGVjaWZ5IHtwcm90b3R5cGV9IGluIGEgZG9jc3RyaW5nIScpCisgICAgICAgICMgaW5zZXJ0ICphZnRlciogdGhlIHN1bW1hcnkgbGluZQorICAgICAgICBsaW5lcy5pbnNlcnQoMiwgJ3twcm90b3R5cGV9XG4nKQorCisgICAgICAgIGRvY3N0cmluZyA9ICJcbiIuam9pbihsaW5lcykKKworICAgICAgICBhZGQoZG9jc3RyaW5nKQorICAgICAgICBkb2NzdHJpbmcgPSBvdXRwdXQoKQorCisgICAgICAgIGRvY3N0cmluZyA9IGxpbmVhcl9mb3JtYXQoZG9jc3RyaW5nLCBwcm90b3R5cGU9cHJvdG90eXBlKQorICAgICAgICBkb2NzdHJpbmcgPSBkb2NzdHJpbmcucnN0cmlwKCkKKworICAgICAgICByZXR1cm4gZG9jc3RyaW5nCisKKyAgICBkZWYgc3RhdGVfdGVybWluYWwoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBibG9jayBpcyBkb25lLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IG5vdCBsaW5lCisKKyAgICAgICAgaWYgbm90IHNlbGYuZnVuY3Rpb246CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgIHZhbHVlcyA9IHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKQorICAgICAgICAgICAgaWYgbm90IHZhbHVlczoKKyAgICAgICAgICAgICAgICBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhciA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3QodmFsdWVzKSkpCisgICAgICAgICAgICAgICAgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXIgPSBsYXN0X3BhcmFtZXRlci5raW5kICE9IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWQorICAgICAgICAgICAgaWYgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXI6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICcqJyB3aXRob3V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyd2FyZHMuIikKKworICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHBhcmFtZXRlciBkb2NzdHJpbmdzCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUuZG9jc3RyaW5nID0gdmFsdWUuZG9jc3RyaW5nLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBzZWxmLmZvcm1hdF9kb2NzdHJpbmcoKQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlIGNhbGxhYmxlIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0CisjIHRoYXQgaW1wbGVtZW50cyB0aGUgY2xpbmljIHBhcnNlcgorIyBpbnRlcmZhY2UgKF9faW5pdF9fIGFuZCBwYXJzZSkuCisjCisjIGV4YW1wbGUgcGFyc2VyczoKKyMgICAiY2xpbmljIiwgaGFuZGxlcyB0aGUgQ2xpbmljIERTTAorIyAgICJweXRob24iLCBoYW5kbGVzIHJ1bm5pbmcgUHl0aG9uIGNvZGUKKyMKK3BhcnNlcnMgPSB7J2NsaW5pYycgOiBEU0xQYXJzZXIsICdweXRob24nOiBQeXRob25QYXJzZXJ9CisKKworY2xpbmljID0gTm9uZQorCisKK2RlZiBtYWluKGFyZ3YpOgorICAgIGltcG9ydCBzeXMKKworICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPCAzIG9yIHN5cy52ZXJzaW9uX2luZm8ubWlub3IgPCAzOgorICAgICAgICBzeXMuZXhpdCgiRXJyb3I6IGNsaW5pYy5weSByZXF1aXJlcyBQeXRob24gMy4zIG9yIGdyZWF0ZXIuIikKKworICAgIGltcG9ydCBhcmdwYXJzZQorICAgIGNtZGxpbmUgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgY21kbGluZS5hZGRfYXJndW1lbnQoIi1mIiwgIi0tZm9yY2UiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItbyIsICItLW91dHB1dCIsIHR5cGU9c3RyKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItLWNvbnZlcnRlcnMiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCJmaWxlbmFtZSIsIHR5cGU9c3RyLCBuYXJncz0iKiIpCisgICAgbnMgPSBjbWRsaW5lLnBhcnNlX2FyZ3MoYXJndikKKworICAgIGlmIG5zLmNvbnZlcnRlcnM6CisgICAgICAgIGlmIG5zLmZpbGVuYW1lOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlIGVycm9yOiBjYW4ndCBzcGVjaWZ5IC0tY29udmVydGVycyBhbmQgYSBmaWxlbmFtZSBhdCB0aGUgc2FtZSB0aW1lLiIpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KC0xKQorICAgICAgICBjb252ZXJ0ZXJzID0gW10KKyAgICAgICAgcmV0dXJuX2NvbnZlcnRlcnMgPSBbXQorICAgICAgICBpZ25vcmVkID0gc2V0KCIiIgorICAgICAgICAgICAgYWRkX2NfY29udmVydGVyCisgICAgICAgICAgICBhZGRfY19yZXR1cm5fY29udmVydGVyCisgICAgICAgICAgICBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIKKyAgICAgICAgICAgIGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIKKyAgICAgICAgICAgICIiIi5zdHJpcCgpLnNwbGl0KCkpCisgICAgICAgIG1vZHVsZSA9IGdsb2JhbHMoKQorICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGU6CisgICAgICAgICAgICBmb3Igc3VmZml4LCBpZHMgaW4gKAorICAgICAgICAgICAgICAgICgiX3JldHVybl9jb252ZXJ0ZXIiLCByZXR1cm5fY29udmVydGVycyksCisgICAgICAgICAgICAgICAgKCJfY29udmVydGVyIiwgY29udmVydGVycyksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gaWdub3JlZDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAgIGlkcy5hcHBlbmQoKG5hbWUsIG5hbWVbOi1sZW4oc3VmZml4KV0pKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBwcmludCgpCisKKyAgICAgICAgcHJpbnQoIkxlZ2FjeSBjb252ZXJ0ZXJzOiIpCisgICAgICAgIGxlZ2FjeSA9IHNvcnRlZChsZWdhY3lfY29udmVydGVycykKKyAgICAgICAgcHJpbnQoJyAgICAnICsgJyAnLmpvaW4oYyBmb3IgYyBpbiBsZWdhY3kgaWYgY1swXS5pc3VwcGVyKCkpKQorICAgICAgICBwcmludCgnICAgICcgKyAnICcuam9pbihjIGZvciBjIGluIGxlZ2FjeSBpZiBjWzBdLmlzbG93ZXIoKSkpCisgICAgICAgIHByaW50KCkKKworICAgICAgICBmb3IgdGl0bGUsIGF0dHJpYnV0ZSwgaWRzIGluICgKKyAgICAgICAgICAgICgiQ29udmVydGVycyIsICdjb252ZXJ0ZXJfaW5pdCcsIGNvbnZlcnRlcnMpLAorICAgICAgICAgICAgKCJSZXR1cm4gY29udmVydGVycyIsICdyZXR1cm5fY29udmVydGVyX2luaXQnLCByZXR1cm5fY29udmVydGVycyksCisgICAgICAgICk6CisgICAgICAgICAgICBwcmludCh0aXRsZSArICI6IikKKyAgICAgICAgICAgIGxvbmdlc3QgPSAtMQorICAgICAgICAgICAgZm9yIG5hbWUsIHNob3J0X25hbWUgaW4gaWRzOgorICAgICAgICAgICAgICAgIGxvbmdlc3QgPSBtYXgobG9uZ2VzdCwgbGVuKHNob3J0X25hbWUpKQorICAgICAgICAgICAgZm9yIG5hbWUsIHNob3J0X25hbWUgaW4gc29ydGVkKGlkcywga2V5PWxhbWJkYSB4OiB4WzFdLmxvd2VyKCkpOgorICAgICAgICAgICAgICAgIGNscyA9IG1vZHVsZVtuYW1lXQorICAgICAgICAgICAgICAgIGNhbGxhYmxlID0gZ2V0YXR0cihjbHMsIGF0dHJpYnV0ZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgY2FsbGFibGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUoY2FsbGFibGUpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIgaW4gc2lnbmF0dXJlLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmRlZmF1bHQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuZW1wdHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9ICd7fT17IXJ9Jy5mb3JtYXQocGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlci5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgcHJpbnQoJyAgICB7fSh7fSknLmZvcm1hdChzaG9ydF9uYW1lLCAnLCAnLmpvaW4ocGFyYW1ldGVycykpKQorICAgICAgICAgICAgICAgICMgYWRkX2NvbW1hID0gRmFsc2UKKyAgICAgICAgICAgICAgICAjIGZvciBwYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyIGluIHNpZ25hdHVyZS5wYXJhbWV0ZXJzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgIyAgICAgaWYgcGFyYW1ldGVyLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZOgorICAgICAgICAgICAgICAgICMgICAgICAgICBpZiBhZGRfY29tbWE6CisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnLCAnKQorICAgICAgICAgICAgICAgICMgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgYWRkX2NvbW1hID0gVHJ1ZQorICAgICAgICAgICAgICAgICMgICAgICAgICBzID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICAjICAgICAgICAgaWYgcGFyYW1ldGVyLmRlZmF1bHQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuZW1wdHk6CisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICBzICs9ICc9JyArIHJlcHIocGFyYW1ldGVyLmRlZmF1bHQpCisgICAgICAgICAgICAgICAgIyAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXJzLmFwcGVuZCgnKScpCisKKyAgICAgICAgICAgICAgICAjIHByaW50KCIgICAiLCBzaG9ydF9uYW1lICsgIiIuam9pbihwYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoIkFsbCBjb252ZXJ0ZXJzIGFsc28gYWNjZXB0IChkb2NfZGVmYXVsdD1Ob25lLCByZXF1aXJlZD1GYWxzZSkuIikKKyAgICAgICAgcHJpbnQoIkFsbCByZXR1cm4gY29udmVydGVycyBhbHNvIGFjY2VwdCAoZG9jX2RlZmF1bHQ9Tm9uZSkuIikKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGlmIG5vdCBucy5maWxlbmFtZToKKyAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgIHN5cy5leGl0KC0xKQorCisgICAgaWYgbnMub3V0cHV0IGFuZCBsZW4obnMuZmlsZW5hbWUpID4gMToKKyAgICAgICAgcHJpbnQoIlVzYWdlIGVycm9yOiBjYW4ndCB1c2UgLW8gd2l0aCBtdWx0aXBsZSBmaWxlbmFtZXMuIikKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKKyAgICBmb3IgZmlsZW5hbWUgaW4gbnMuZmlsZW5hbWU6CisgICAgICAgIHBhcnNlX2ZpbGUoZmlsZW5hbWUsIG91dHB1dD1ucy5vdXRwdXQsIHZlcmlmeT1ub3QgbnMuZm9yY2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9Ub29scy9jbGluaWMvY2xpbmljX3Rlc3QucHkgYi9Ub29scy9jbGluaWMvY2xpbmljX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhZjM4MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weQpAQCAtMCwwICsxLDcxMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIworIyBBcmd1bWVudCBDbGluaWMKKyMgQ29weXJpZ2h0IDIwMTItMjAxMyBieSBMYXJyeSBIYXN0aW5ncy4KKyMgTGljZW5zZWQgdG8gdGhlIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KKyMKKworaW1wb3J0IGJ1aWx0aW5zCitpbXBvcnQgY2xpbmljCitmcm9tIGNsaW5pYyBpbXBvcnQgRFNMUGFyc2VyCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBpbnNwZWN0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKKworY2xhc3MgRmFrZUNvbnZlcnRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYXJncyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncworCisKK2NsYXNzIEZha2VDb252ZXJ0ZXJGYWN0b3J5OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG5hbWUsIGRlZmF1bHQsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIEZha2VDb252ZXJ0ZXIoc2VsZi5uYW1lLCBrd2FyZ3MpCisKKworY2xhc3MgRmFrZUNvbnZlcnRlcnNEaWN0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi51c2VkX2NvbnZlcnRlcnMgPSB7fQorCisgICAgZGVmIGdldChzZWxmLCBuYW1lLCBkZWZhdWx0KToKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlZF9jb252ZXJ0ZXJzLnNldGRlZmF1bHQobmFtZSwgRmFrZUNvbnZlcnRlckZhY3RvcnkobmFtZSkpCisKK2NsYXNzIEZha2VDbGluaWM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNvbnZlcnRlcnMgPSBGYWtlQ29udmVydGVyc0RpY3QoKQorICAgICAgICBzZWxmLmxlZ2FjeV9jb252ZXJ0ZXJzID0gRmFrZUNvbnZlcnRlcnNEaWN0KCkKKyAgICAgICAgc2VsZi5sYW5ndWFnZSA9IGNsaW5pYy5DTGFuZ3VhZ2UoKQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gTm9uZQorICAgICAgICBzZWxmLmJsb2NrX3BhcnNlciA9IGNsaW5pYy5CbG9ja1BhcnNlcignJywgc2VsZi5sYW5ndWFnZSkKKyAgICAgICAgc2VsZi5tb2R1bGVzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBjbGluaWMuY2xpbmljID0gc2VsZgorICAgICAgICBzZWxmLm5hbWUgPSAiRmFrZUNsaW5pYyIKKworICAgIGRlZiBpc19kaXJlY3RpdmUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lID09ICJtb2R1bGUiCisKKyAgICBkZWYgZGlyZWN0aXZlKHNlbGYsIG5hbWUsIGFyZ3MpOgorICAgICAgICBzZWxmLmNhbGxlZF9kaXJlY3RpdmVzW25hbWVdID0gYXJncworCisgICAgX21vZHVsZV9hbmRfY2xhc3MgPSBjbGluaWMuQ2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzCisKKworCitjbGFzcyBDbGluaWNHcm91cFBlcm11dGVyVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIGwsIG0sIHIsIG91dHB1dCk6CisgICAgICAgIGNvbXB1dGVkID0gY2xpbmljLnBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKGwsIG0sIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBjb21wdXRlZCkKKworICAgIGRlZiB0ZXN0X3JhbmdlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtbJ3N0YXJ0J11dLCBbJ3N0b3AnXSwgW1snc3RlcCddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgICAoJ3N0b3AnLCksCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3N0b3AnLCksCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3N0b3AnLCAnc3RlcCcsKSwKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfYWRkX3dpbmRvdyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChbWyd4JywgJ3knXV0sIFsnY2gnXSwgW1snYXR0ciddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgICAoJ2NoJywpLAorICAgICAgICAgICAgKCdjaCcsICdhdHRyJyksCisgICAgICAgICAgICAoJ3gnLCAneScsICdjaCcsKSwKKyAgICAgICAgICAgICgneCcsICd5JywgJ2NoJywgJ2F0dHInKSwKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfbHVkaWNyb3VzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtbJ2ExJywgJ2EyJywgJ2EzJ10sIFsnYjEnLCAnYjInXV0sIFsnYzEnXSwgW1snZDEnLCAnZDInXSwgWydlMScsICdlMicsICdlMyddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgKCdjMScsKSwKKyAgICAgICAgICAoJ2IxJywgJ2IyJywgJ2MxJyksCisgICAgICAgICAgKCdiMScsICdiMicsICdjMScsICdkMScsICdkMicpLAorICAgICAgICAgICgnYTEnLCAnYTInLCAnYTMnLCAnYjEnLCAnYjInLCAnYzEnKSwKKyAgICAgICAgICAoJ2ExJywgJ2EyJywgJ2EzJywgJ2IxJywgJ2IyJywgJ2MxJywgJ2QxJywgJ2QyJyksCisgICAgICAgICAgKCdhMScsICdhMicsICdhMycsICdiMScsICdiMicsICdjMScsICdkMScsICdkMicsICdlMScsICdlMicsICdlMycpLAorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9yaWdodF9vbmx5KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtdLCBbXSwgW1snYSddLFsnYiddLFsnYyddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgKCksCisgICAgICAgICAgKCdhJywpLAorICAgICAgICAgICgnYScsICdiJyksCisgICAgICAgICAgKCdhJywgJ2InLCAnYycpCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X2hhdmVfbGVmdF9vcHRpb25zX2J1dF9yZXF1aXJlZF9pc19lbXB0eShzZWxmKToKKyAgICAgICAgZGVmIGZuKCk6CisgICAgICAgICAgICBjbGluaWMucGVybXV0ZV9vcHRpb25hbF9ncm91cHMoWydhJ10sIFtdLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIGZuKQorCisKK2NsYXNzIENsaW5pY0xpbmVhckZvcm1hdFRlc3QoVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCBpbnB1dCwgb3V0cHV0LCAqKmt3YXJncyk6CisgICAgICAgIGNvbXB1dGVkID0gY2xpbmljLmxpbmVhcl9mb3JtYXQoaW5wdXQsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgY29tcHV0ZWQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmdzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCcnLCAnJykKKworICAgIGRlZiB0ZXN0X3NvbG9fbmV3bGluZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgnXG4nLCAnXG4nKQorCisgICAgZGVmIHRlc3Rfbm9fc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIHtuYW1lfQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCBuYW1lPScnKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2xpbmVfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIHtuYW1lfQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgR0FSR0xFCisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCBuYW1lPSdHQVJHTEUnKQorCisgICAgZGVmIHRlc3RfbXVsdGlsaW5lX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICB7bmFtZX0KKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsICIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIGJpbmdsZQorICAgICAgICAgIGJ1bmdsZQorCisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCBuYW1lPSdiaW5nbGVcbmJ1bmdsZVxuJykKKworY2xhc3MgSW5lcnRQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIHBhc3MKKworY2xhc3MgQ29weVBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gYmxvY2suaW5wdXQKKworCitjbGFzcyBDbGluaWNCbG9ja1BhcnNlclRlc3QoVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCBpbnB1dCwgb3V0cHV0KToKKyAgICAgICAgbGFuZ3VhZ2UgPSBjbGluaWMuQ0xhbmd1YWdlKCkKKworICAgICAgICBibG9ja3MgPSBsaXN0KGNsaW5pYy5CbG9ja1BhcnNlcihpbnB1dCwgbGFuZ3VhZ2UpKQorICAgICAgICB3cml0ZXIgPSBjbGluaWMuQmxvY2tQcmludGVyKGxhbmd1YWdlKQorICAgICAgICBmb3IgYmxvY2sgaW4gYmxvY2tzOgorICAgICAgICAgICAgd3JpdGVyLnByaW50X2Jsb2NrKGJsb2NrKQorICAgICAgICBvdXRwdXQgPSB3cml0ZXIuZi5nZXR2YWx1ZSgpCisgICAgICAgIGFzc2VydCBvdXRwdXQgPT0gaW5wdXQsICJvdXRwdXQgIT0gaW5wdXQhXG5cbm91dHB1dCAiICsgcmVwcihvdXRwdXQpICsgIlxuXG4gaW5wdXQgIiArIHJlcHIoaW5wdXQpCisKKyAgICBkZWYgcm91bmRfdHJpcChzZWxmLCBpbnB1dCk6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0KGlucHV0LCBpbnB1dCkKKworICAgIGRlZiB0ZXN0X3JvdW5kX3RyaXBfMShzZWxmKToKKyAgICAgICAgc2VsZi5yb3VuZF90cmlwKCIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisiIiIpCisgICAgZGVmIHRlc3Rfcm91bmRfdHJpcF8yKHNlbGYpOgorICAgICAgICBzZWxmLnJvdW5kX3RyaXAoIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKy8qW2luZXJ0XQorYWJjCitbaW5lcnRdKi8KK2RlZgorLypbaW5lcnQgY2hlY2tzdW06IDdiMThkMDE3Zjg5ZjYxY2YxN2Q0N2Y5Mjc0OWVhNjkzMGEzZjFkZWJdKi8KK3h5egorIiIiKQorCisgICAgZGVmIF90ZXN0X2NsaW5pYyhzZWxmLCBpbnB1dCwgb3V0cHV0KToKKyAgICAgICAgbGFuZ3VhZ2UgPSBjbGluaWMuQ0xhbmd1YWdlKCkKKyAgICAgICAgYyA9IGNsaW5pYy5DbGluaWMobGFuZ3VhZ2UpCisgICAgICAgIGMucGFyc2Vyc1snaW5lcnQnXSA9IEluZXJ0UGFyc2VyKGMpCisgICAgICAgIGMucGFyc2Vyc1snY29weSddID0gQ29weVBhcnNlcihjKQorICAgICAgICBjb21wdXRlZCA9IGMucGFyc2UoaW5wdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBjb21wdXRlZCkKKworICAgIGRlZiB0ZXN0X2NsaW5pY18xKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2NsaW5pYygiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorLypbY29weV0KK2RlZgorW2NvcHldKi8KK2FiYworLypbY29weSBjaGVja3N1bTogMDNjZmQ3NDM2NjFmMDc5NzVmYTJmMTIyMGM1MTk0Y2JhZmY0ODQ1MV0qLworeHl6CisiIiIsICIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltjb3B5XQorZGVmCitbY29weV0qLworZGVmCisvKltjb3B5IGNoZWNrc3VtOiA3YjE4ZDAxN2Y4OWY2MWNmMTdkNDdmOTI3NDllYTY5MzBhM2YxZGViXSovCit4eXoKKyIiIikKKworCitjbGFzcyBDbGluaWNQYXJzZXJUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90cml2aWFsKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBEU0xQYXJzZXIoRmFrZUNsaW5pYygpKQorICAgICAgICBibG9jayA9IGNsaW5pYy5CbG9jaygibW9kdWxlIG9zXG5vcy5hY2Nlc3MiKQorICAgICAgICBwYXJzZXIucGFyc2UoYmxvY2spCisgICAgICAgIG1vZHVsZSwgZnVuY3Rpb24gPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFjY2VzcyIsIGZ1bmN0aW9uLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9zIiwgbW9kdWxlLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfbGluZShzZWxmKToKKyAgICAgICAgYmxvY2sgPSBzZWxmLnBhcnNlKCIjXG5tb2R1bGUgb3Ncbm9zLmFjY2VzcyIpCisgICAgICAgIG1vZHVsZSwgZnVuY3Rpb24gPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFjY2VzcyIsIGZ1bmN0aW9uLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9zIiwgbW9kdWxlLm5hbWUpCisKKyAgICBkZWYgdGVzdF9wYXJhbShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgcGF0aDogaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYWNjZXNzIiwgZnVuY3Rpb24ubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydwYXRoJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgncGF0aCcsIHAubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHAuY29udmVydGVyLCBjbGluaWMuaW50X2NvbnZlcnRlcikKKworICAgIGRlZiB0ZXN0X3BhcmFtX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcC5kZWZhdWx0KQorCisgICAgZGVmIHRlc3RfcGFyYW1fbm9fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLmFjY2VzcworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICBzb21ldGhpbmdfZWxzZTogc3RyIiIiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmdW5jdGlvbi5wYXJhbWV0ZXJzWydzb21ldGhpbmdfZWxzZSddLmNvbnZlcnRlciwgY2xpbmljLnN0cl9jb252ZXJ0ZXIpCisKKyAgICBkZWYgZGlzYWJsZWRfdGVzdF9jb252ZXJ0ZXJfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgcGF0aDogcGF0aF90KGFsbG93X2ZkPTEpIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3BhdGgnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHAuY29udmVydGVyLmFyZ3NbJ2FsbG93X2ZkJ10pCisKKyAgICBkZWYgdGVzdF9wYXJhbV9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3Muc3RhdCBhcyBvc19zdGF0X2ZuIC0+IG9iamVjdChkb2NfZGVmYXVsdD0nc3RhdF9yZXN1bHQnKQorCisgICBwYXRoOiBzdHIKKyAgICAgICBQYXRoIHRvIGJlIGV4YW1pbmVkIiIiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBhdGggdG8gYmUgZXhhbWluZWQiLCBwLmRvY3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jdGlvbi5yZXR1cm5fY29udmVydGVyLmRvY19kZWZhdWx0LCAnc3RhdF9yZXN1bHQnKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLnN0YXQgYXMgb3Nfc3RhdF9mbgorCisgICBwYXRoOiBzdHIKKyAgICAgICBQYXRoIHRvIGJlIGV4YW1pbmVkCisKK1BlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiIKK1BlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgorCitvcy5zdGF0KHBhdGgpCisgIHBhdGgKKyAgICBQYXRoIHRvIGJlIGV4YW1pbmVkCisiIiIuc3RyaXAoKSwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfcGFyYW1ldGVyc19pbl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgeDogaW50CisgICAgIERvY3VtZW50YXRpb24gZm9yIHguCisgIHk6IGludAorCitUaGlzIGlzIHRoZSBkb2N1bWVudGF0aW9uIGZvciBmb28uCisKK09rYXksIHdlJ3JlIGRvbmUgaGVyZS4KKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiIKK1RoaXMgaXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIGZvby4KKworZm9vLmJhcih4LCB5KQorICB4CisgICAgRG9jdW1lbnRhdGlvbiBmb3IgeC4KKworT2theSwgd2UncmUgZG9uZSBoZXJlLgorIiIiLnN0cmlwKCksIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9yZWdyZXNzaW9uX3NwZWNpYWxfY2hhcmFjdGVyX2luX3BhcmFtZXRlcl9jb2x1bW5fb2ZfZG9jc3RyaW5nX2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3Muc3RhdAorICAgIHBhdGg6IHN0cgorVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3Muc3RhdChwYXRoKVxuXG5UaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljISIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X2NfbmFtZShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLnN0YXQgYXMgb3Nfc3RhdF9mbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9zX3N0YXRfZm4iLCBmdW5jdGlvbi5jX2Jhc2VuYW1lKQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2NvbnZlcnRlcihzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLnN0YXQgLT4gaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1bmN0aW9uLnJldHVybl9jb252ZXJ0ZXIsIGNsaW5pYy5pbnRfcmV0dXJuX2NvbnZlcnRlcikKKworICAgIGRlZiB0ZXN0X3N0YXIoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICAqXG4gICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSwgcC5raW5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHAuZ3JvdXApCisKKyAgICBkZWYgdGVzdF9ncm91cChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgd2luZG93XG53aW5kb3cuYm9yZGVyXG4gW1xuIGxzIDogaW50XG4gXVxuIC9cbiIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydscyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcC5ncm91cCkKKworICAgIGRlZiB0ZXN0X2xlZnRfZ3JvdXAoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBjdXJzZXMKK2N1cnNlcy53aW5kb3cuYWRkY2gKKyAgIFsKKyAgIHk6IGludAorICAgICBZLWNvb3JkaW5hdGUuCisgICB4OiBpbnQKKyAgICAgWC1jb29yZGluYXRlLgorICAgXQorICAgY2g6IGNoYXIKKyAgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKyAgIFsKKyAgIGF0dHI6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIF0KKyAgIC8KKyIiIikKKyAgICAgICAgZm9yIG5hbWUsIGdyb3VwIGluICgKKyAgICAgICAgICAgICgneScsIC0xKSwgKCd4JywgLTEpLAorICAgICAgICAgICAgKCdjaCcsIDApLAorICAgICAgICAgICAgKCdhdHRyJywgMSksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbbmFtZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5ncm91cCwgZ3JvdXApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2luZCwgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmN0aW9uLmRvY3N0cmluZy5zdHJpcCgpLCAiIiIKK2N1cnNlcy53aW5kb3cuYWRkY2goW3ksIHgsXSBjaCwgW2F0dHJdKQorICB5CisgICAgWS1jb29yZGluYXRlLgorICB4CisgICAgWC1jb29yZGluYXRlLgorICBjaAorICAgIENoYXJhY3RlciB0byBhZGQuCisgIGF0dHIKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgICAgICAgICAgIiIiLnN0cmlwKCkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfZ3JvdXBzKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgY3Vyc2VzCitjdXJzZXMud2luZG93LmltYWdpbmFyeQorICAgWworICAgWworICAgeTE6IGludAorICAgICBZLWNvb3JkaW5hdGUuCisgICB5MjogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIF0KKyAgIHgxOiBpbnQKKyAgICAgWC1jb29yZGluYXRlLgorICAgeDI6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICBdCisgICBjaDogY2hhcgorICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICAgWworICAgYXR0cjE6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHIyOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyMzogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgWworICAgYXR0cjQ6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHI1OiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyNjogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgXQorICAgXQorICAgLworIiIiKQorICAgICAgICBmb3IgbmFtZSwgZ3JvdXAgaW4gKAorICAgICAgICAgICAgKCd5MScsIC0yKSwgKCd5MicsIC0yKSwKKyAgICAgICAgICAgICgneDEnLCAtMSksICgneDInLCAtMSksCisgICAgICAgICAgICAoJ2NoJywgMCksCisgICAgICAgICAgICAoJ2F0dHIxJywgMSksICgnYXR0cjInLCAxKSwgKCdhdHRyMycsIDEpLAorICAgICAgICAgICAgKCdhdHRyNCcsIDIpLCAoJ2F0dHI1JywgMiksICgnYXR0cjYnLCAyKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdyb3VwLCBncm91cCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5raW5kLCBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jdGlvbi5kb2NzdHJpbmcuc3RyaXAoKSwgIiIiCitjdXJzZXMud2luZG93LmltYWdpbmFyeShbW3kxLCB5MixdIHgxLCB4MixdIGNoLCBbYXR0cjEsIGF0dHIyLCBhdHRyMywgW2F0dHI0LCBhdHRyNSwgYXR0cjZdXSkKKyAgeTEKKyAgICBZLWNvb3JkaW5hdGUuCisgIHkyCisgICAgWS1jb29yZGluYXRlLgorICB4MQorICAgIFgtY29vcmRpbmF0ZS4KKyAgeDIKKyAgICBYLWNvb3JkaW5hdGUuCisgIGNoCisgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKyAgYXR0cjEKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyMgorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHIzCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjQKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyNQorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHI2CisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICAiIiIuc3RyaXAoKSkKKworICAgIGRlZiBwYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbChzZWxmLCBzKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbihzKQorICAgICAgICByZXR1cm4gc3Rkb3V0LmdldHZhbHVlKCkKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX3R3b190b3BfZ3JvdXBzX29uX2xlZnQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLnR3b190b3BfZ3JvdXBzX29uX2xlZnQKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIFsKKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgcGFyYW06IGludAorICAgICAgICAgICAgIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsCisgICAgICAgICAgICAoJ0Vycm9yIG9uIGxpbmUgMDpcbicKKyAgICAgICAgICAgICdGdW5jdGlvbiB0d29fdG9wX2dyb3Vwc19vbl9sZWZ0IGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAyKVxuJykpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX190d29fdG9wX2dyb3Vwc19vbl9yaWdodChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby50d29fdG9wX2dyb3Vwc19vbl9yaWdodAorICAgIHBhcmFtOiBpbnQKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIFsKKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19wYXJhbWV0ZXJfYWZ0ZXJfZ3JvdXBfb25fcmlnaHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28ucGFyYW1ldGVyX2FmdGVyX2dyb3VwX29uX3JpZ2h0CisgICAgcGFyYW06IGludAorICAgIFsKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX2dyb3VwX2FmdGVyX3BhcmFtZXRlcl9vbl9sZWZ0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmdyb3VwX2FmdGVyX3BhcmFtZXRlcl9vbl9sZWZ0CisgICAgWworICAgIGdyb3VwMiA6IGludAorICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgXQorICAgIHBhcmFtOiBpbnQKKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX2VtcHR5X2dyb3VwX29uX2xlZnQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uZW1wdHlfZ3JvdXAKKyAgICBbCisgICAgWworICAgIF0KKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgcGFyYW06IGludAorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fZW1wdHlfZ3JvdXBfb25fcmlnaHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uZW1wdHlfZ3JvdXAKKyAgICBwYXJhbTogaW50CisgICAgWworICAgIFsKKyAgICBdCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3Rfbm9fcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorCitEb2NzdHJpbmcKKworIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJEb2NzdHJpbmdcblxuZm9vLmJhcigpIiwgZnVuY3Rpb24uZG9jc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSkKKworICAgIGRlZiB0ZXN0X2lsbGVnYWxfbW9kdWxlX2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyID0+IGludAorICAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X2lsbGVnYWxfY19iYXNlbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIgYXMgOTM1CisgICAgLworIiIiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3N0YXIoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgKgorICAgICoKKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRob3V0X2luaXRpYWxfcGFyYW1ldGVyc19vcl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgKgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhvdXRfaW5pdGlhbF9wYXJhbWV0ZXJzX3dpdGhfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgICoKK0RvY3N0cmluZyBoZXJlLgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhfaW5pdGlhbF9wYXJhbWV0ZXJzX3dpdGhvdXRfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIHRoaXM6IGludAorICAgICoKKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRoX2luaXRpYWxfcGFyYW1ldGVyc19hbmRfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIHRoaXM6IGludAorICAgICoKK0RvY3N0cmluZy4KKyIiIikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9zbGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAvCisgICAgLworIiIiKQorCisgICAgZGVmIHRlc3RfbWl4X3N0YXJfYW5kX3NsYXNoKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgeDogaW50CisgICB5OiBpbnQKKyAgICoKKyAgIHo6IGludAorICAgLworIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19ub3RfcGVybWl0dGVkX2FmdGVyX3NsYXNoX2Zvcl9ub3coc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgLworICAgIHg6IGludAorIiIiKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fbm90X2F0X2NvbHVtbl8wKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCisgIG1vZHVsZSBmb28KKyAgZm9vLmJhcgorICAgIHg6IGludAorICAgICAgTmVzdGVkIGRvY3N0cmluZyBoZXJlLCBnb2V0aC4KKyAgICAqCisgICAgeTogc3RyCisgIE5vdCBhdCBjb2x1bW4gMCEKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiIKK05vdCBhdCBjb2x1bW4gMCEKKworZm9vLmJhcih4LCAqLCB5KQorICB4CisgICAgTmVzdGVkIGRvY3N0cmluZyBoZXJlLCBnb2V0aC4KKyIiIi5zdHJpcCgpLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfcmVncmVzc2lvbl9zcGVjaWFsX2NoYXJhY3Rlcl9pbl9wYXJhbWV0ZXJfY29sdW1uX29mX2RvY3N0cmluZ19maXJzdF9saW5lKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLnN0YXQKKyAgICBwYXRoOiBzdHIKK1RoaXMvdXNlZCB0byBicmVhayBDbGluaWMhCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlRoaXMvdXNlZCB0byBicmVhayBDbGluaWMhXG5cbm9zLnN0YXQocGF0aCkiLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RpdmUoc2VsZik6CisgICAgICAgIGMgPSBGYWtlQ2xpbmljKCkKKyAgICAgICAgcGFyc2VyID0gRFNMUGFyc2VyKGMpCisgICAgICAgIHBhcnNlci5mbGFnID0gRmFsc2UKKyAgICAgICAgcGFyc2VyLmRpcmVjdGl2ZXNbJ3NldGZsYWcnXSA9IGxhbWJkYSA6IHNldGF0dHIocGFyc2VyLCAnZmxhZycsIFRydWUpCisgICAgICAgIGJsb2NrID0gY2xpbmljLkJsb2NrKCJzZXRmbGFnIikKKyAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFyc2VyLmZsYWcpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfY29udmVydGVycyhzZWxmKToKKyAgICAgICAgYmxvY2sgPSBzZWxmLnBhcnNlKCdtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgcGF0aDogInMiJykKKyAgICAgICAgbW9kdWxlLCBmdW5jdGlvbiA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKChmdW5jdGlvbi5wYXJhbWV0ZXJzWydwYXRoJ10pLmNvbnZlcnRlciwgY2xpbmljLnN0cl9jb252ZXJ0ZXIpCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgdGV4dCk6CisgICAgICAgIGMgPSBGYWtlQ2xpbmljKCkKKyAgICAgICAgcGFyc2VyID0gRFNMUGFyc2VyKGMpCisgICAgICAgIGJsb2NrID0gY2xpbmljLkJsb2NrKHRleHQpCisgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgcmV0dXJuIGJsb2NrCisKKyAgICBkZWYgcGFyc2VfZnVuY3Rpb24oc2VsZiwgdGV4dCk6CisgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZSh0ZXh0KQorICAgICAgICBzID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBhc3NlcnQgbGVuKHMpID09IDIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc1swXSwgY2xpbmljLk1vZHVsZSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc1sxXSwgY2xpbmljLkZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gc1sxXQorCisgICAgZGVmIHRlc3Rfc2NhZmZvbGRpbmcoc2VsZik6CisgICAgICAgICMgdGVzdCByZXByIG9uIHNwZWNpYWwgdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjbGluaWMudW5zcGVjaWZpZWQpLCAnPFVuc3BlY2lmaWVkPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjbGluaWMuTlVMTCksICc8TnVsbD4nKQorCisgICAgICAgICMgdGVzdCB0aGF0IGZhaWwgZmFpbHMKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgY2xpbmljLmZhaWwoJ1RoZSBpZ2xvb3MgYXJlIG1lbHRpbmchJywgZmlsZW5hbWU9J2Nsb3duLnR4dCcsIGxpbmVfbnVtYmVyPTY5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnRXJyb3IgaW4gZmlsZSAiY2xvd24udHh0IiBvbiBsaW5lIDY5OlxuVGhlIGlnbG9vcyBhcmUgbWVsdGluZyFcbicpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkgYi9Ub29scy9mcmVlemUvYmtmaWxlLnB5CmluZGV4IDBlODk1ZjIuLjU4MjQ2ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkKKysrIGIvVG9vbHMvZnJlZXplL2JrZmlsZS5weQpAQCAtNywxMSArNywxMSBAQAogICAgICAgICBzZWxmLl9fYmFja3VwID0gZmlsZSArICd+JwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fX2JhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKGZpbGUsIHNlbGYuX19iYWNrdXApCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLl9fYmFja3VwID0gTm9uZQogICAgICAgICBzZWxmLl9fZmlsZSA9IF9vcmlnX29wZW4oZmlsZSwgbW9kZSwgYnVmc2l6ZSkKICAgICAgICAgc2VsZi5jbG9zZWQgPSBzZWxmLl9fZmlsZS5jbG9zZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkgYi9Ub29scy9mcmVlemUvZnJlZXplLnB5CmluZGV4IGE0MTI2N2EuLjQ3OWNhM2MgMTAwNzU1Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKKysrIGIvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgIyBkZWZhdWx0IHRoZSBleGNsdWRlIGxpc3QgZm9yIGVhY2ggcGxhdGZvcm0KICAgICBpZiB3aW46IGV4Y2x1ZGUgPSBleGNsdWRlICsgWwogICAgICAgICAnZG9zJywgJ2Rvc3BhdGgnLCAnbWFjJywgJ21hY3BhdGgnLCAnbWFjZnMnLCAnTUFDRlMnLCAncG9zaXgnLAotICAgICAgICAnb3MyJywgJ2NlJywKKyAgICAgICAgJ2NlJywKICAgICAgICAgXQogCiAgICAgZmFpbF9pbXBvcnQgPSBleGNsdWRlWzpdCkBAIC0zMTEsNyArMzExLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIob2RpcikKICAgICAgICAgICAgIHByaW50KCJDcmVhdGVkIG91dHB1dCBkaXJlY3RvcnkiLCBvZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICB1c2FnZSgnJXM6IG1rZGlyIGZhaWxlZCAoJXMpJyAlIChvZGlyLCBzdHIobXNnKSkpCiAgICAgYmFzZSA9ICcnCiAgICAgaWYgb2RpcjoKZGlmZiAtLWdpdCBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkgYi9Ub29scy9nZGIvbGlicHl0aG9uLnB5CmluZGV4IGE4NWY1MDUuLmVlOTBjMmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkKKysrIGIvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQpAQCAtOTIyLDIxICs5MjIsMjYgQEAKIGNsYXNzIFB5U2V0T2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKICAgICBfdHlwZW5hbWUgPSAnUHlTZXRPYmplY3QnCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2R1bW15X2tleShzZWxmKToKKyAgICAgICAgcmV0dXJuIGdkYi5sb29rdXBfZ2xvYmFsX3N5bWJvbCgnX1B5U2V0X0R1bW15JykudmFsdWUoKQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBkdW1teV9wdHIgPSBzZWxmLl9kdW1teV9rZXkoKQorICAgICAgICB0YWJsZSA9IHNlbGYuZmllbGQoJ3RhYmxlJykKKyAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYXNrJykgKyAxKToKKyAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KKyAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQorICAgICAgICAgICAgaWYga2V5ICE9IDAgYW5kIGtleSAhPSBkdW1teV9wdHI6CisgICAgICAgICAgICAgICAgeWllbGQgUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KQorCiAgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgogICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CiAgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gUHJveHlBbHJlYWR5VmlzaXRlZCgnJXMoLi4uKScgJSBzZWxmLnNhZmVfdHBfbmFtZSgpKQogICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKIAotICAgICAgICBtZW1iZXJzID0gW10KLSAgICAgICAgdGFibGUgPSBzZWxmLmZpZWxkKCd0YWJsZScpCi0gICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFzaycpKzEpOgotICAgICAgICAgICAgc2V0ZW50cnkgPSB0YWJsZVtpXQotICAgICAgICAgICAga2V5ID0gc2V0ZW50cnlbJ2tleSddCi0gICAgICAgICAgICBpZiBrZXkgIT0gMDoKLSAgICAgICAgICAgICAgICBrZXlfcHJveHkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpLnByb3h5dmFsKHZpc2l0ZWQpCi0gICAgICAgICAgICAgICAgaWYga2V5X3Byb3h5ICE9ICc8ZHVtbXkga2V5Pic6Ci0gICAgICAgICAgICAgICAgICAgIG1lbWJlcnMuYXBwZW5kKGtleV9wcm94eSkKKyAgICAgICAgbWVtYmVycyA9IChrZXkucHJveHl2YWwodmlzaXRlZCkgZm9yIGtleSBpbiBzZWxmKQogICAgICAgICBpZiBzZWxmLnNhZmVfdHBfbmFtZSgpID09ICdmcm96ZW5zZXQnOgogICAgICAgICAgICAgcmV0dXJuIGZyb3plbnNldChtZW1iZXJzKQogICAgICAgICBlbHNlOgpAQCAtOTY1LDE4ICs5NzAsMTEgQEAKIAogICAgICAgICBvdXQud3JpdGUoJ3snKQogICAgICAgICBmaXJzdCA9IFRydWUKLSAgICAgICAgdGFibGUgPSBzZWxmLmZpZWxkKCd0YWJsZScpCi0gICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFzaycpKzEpOgotICAgICAgICAgICAgc2V0ZW50cnkgPSB0YWJsZVtpXQotICAgICAgICAgICAga2V5ID0gc2V0ZW50cnlbJ2tleSddCi0gICAgICAgICAgICBpZiBrZXkgIT0gMDoKLSAgICAgICAgICAgICAgICBweW9wX2tleSA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGtleSkKLSAgICAgICAgICAgICAgICBrZXlfcHJveHkgPSBweW9wX2tleS5wcm94eXZhbCh2aXNpdGVkKSAjIEZJWE1FIQotICAgICAgICAgICAgICAgIGlmIGtleV9wcm94eSAhPSAnPGR1bW15IGtleT4nOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlyc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKLSAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBweW9wX2tleS53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmOgorICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAga2V5LndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQogICAgICAgICBvdXQud3JpdGUoJ30nKQogCiAgICAgICAgIGlmIHRwX25hbWUgIT0gJ3NldCc6CkBAIC0xMTYwLDcgKzExNTgsOSBAQAogICAgICAgICAjIENvbnZlcnQgdGhlIGludCBjb2RlIHBvaW50cyB0byB1bmljb2RlIGNoYXJhY3RlcnMsIGFuZCBnZW5lcmF0ZSBhCiAgICAgICAgICMgbG9jYWwgdW5pY29kZSBpbnN0YW5jZS4KICAgICAgICAgIyBUaGlzIHNwbGl0cyBzdXJyb2dhdGUgcGFpcnMgaWYgc2l6ZW9mKFB5X1VOSUNPREUpIGlzIDIgaGVyZSAoaW4gZ2RiKS4KLSAgICAgICAgcmVzdWx0ID0gdScnLmpvaW4oW191bmljaHIodWNzKSBmb3IgdWNzIGluIFB5X1VOSUNPREVzXSkKKyAgICAgICAgcmVzdWx0ID0gdScnLmpvaW4oWworICAgICAgICAgICAgKF91bmljaHIodWNzKSBpZiB1Y3MgPD0gMHgxMGZmZmYgZWxzZSAnXHVmZmZkJykKKyAgICAgICAgICAgIGZvciB1Y3MgaW4gUHlfVU5JQ09ERXNdKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvaTE4bi9tc2dmbXQucHkgYi9Ub29scy9pMThuL21zZ2ZtdC5weQppbmRleCBjZDkwNjkxLi5iMDc1MWExIDEwMDc1NQotLS0gYS9Ub29scy9pMThuL21zZ2ZtdC5weQorKysgYi9Ub29scy9pMThuL21zZ2ZtdC5weQpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICAgIGlmIG9wdCBpbiAoJy1oJywgJy0taGVscCcpOgogICAgICAgICAgICAgdXNhZ2UoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctVicsICctLXZlcnNpb24nKToKLSAgICAgICAgICAgIHByaW50KCJtc2dmbXQucHkiLCBfX3ZlcnNpb25fXywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgcHJpbnQoIm1zZ2ZtdC5weSIsIF9fdmVyc2lvbl9fKQogICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctbycsICctLW91dHB1dC1maWxlJyk6CiAgICAgICAgICAgICBvdXRmaWxlID0gYXJnCmRpZmYgLS1naXQgYS9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weSBiL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5CmluZGV4IDcxNGMwZTQuLjYzNWRkNTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5CisrKyBiL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5CkBAIC00Niw4ICs0Niw3IEBACiAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gJycKICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKQogCiAKIGRlZiBidWlsdGluX21vZChzZWNvbmRzLCByZXBlYXQpOgpAQCAtNTYsOSArNTUsOCBAQAogICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQogICAgICMgUmVseWluZyBvbiBidWlsdC1pbiBpbXBvcnRlciBiZWluZyBpbXBsaWNpdC4KLSAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgeWllbGQgcmVzdWx0CisgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKIAogCiBkZWYgc291cmNlX3dvX2J5dGVjb2RlKHNlY29uZHMsIHJlcGVhdCk6CkBAIC03Myw5ICs3MSw4IEBACiAgICAgICAgICAgICBsb2FkZXIgPSAoaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTLCBUcnVlKQogICAgICAgICAgICAgc3lzLnBhdGhfaG9va3MuYXBwZW5kKGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2sobG9hZGVyKSkKLSAgICAgICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAgICAgZmluYWxseToKICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQogCkBAIC04OSw5ICs4Niw4IEBACiAgICAgICAgICAgICBvcy51bmxpbmsoYnl0ZWNvZGVfcGF0aCkKICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCiAKQEAgLTEyNyw4ICsxMjMsNyBAQAogICAgICAgICBkZWYgY2xlYW51cCgpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXMucG9wKG5hbWUpCiAgICAgICAgICAgICBvcy51bmxpbmsoaW1wLmNhY2hlX2Zyb21fc291cmNlKG1vZHVsZS5fX2ZpbGVfXykpCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgY2xlYW51cCwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGNsZWFudXAsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcykKIAogICAgIHdyaXRpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18gPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18uZm9ybWF0KG5hbWUpKQpAQCAtMTQ4LDkgKzE0Myw4IEBACiAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmFwcGVuZChpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKGxvYWRlcikpCiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nW25hbWVdKQogICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pKQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAKIAogZGVmIF91c2luZ19ieXRlY29kZShtb2R1bGUpOgpAQCAtMTU4LDkgKzE1Miw4IEBACiAgICAgZGVmIHVzaW5nX2J5dGVjb2RlX2JlbmNobWFyayhzZWNvbmRzLCByZXBlYXQpOgogICAgICAgICAiIiJTb3VyY2Ugdy8gYnl0ZWNvZGU6IHt9IiIiCiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtb2R1bGUuX19maWxlX18pCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKIAogICAgIHVzaW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXy5mb3JtYXQobmFtZSkpCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbXNpLnB5IGIvVG9vbHMvbXNpL21zaS5weQppbmRleCA1ZWQwMjVkLi43M2YxYzgzIDEwMDY0NAotLS0gYS9Ub29scy9tc2kvbXNpLnB5CisrKyBiL1Rvb2xzL21zaS9tc2kucHkKQEAgLTk5LDcgKzk5LDkgQEAKICAgICAnX211bHRpcHJvY2Vzc2luZy5weWQnLAogICAgICdfbHptYS5weWQnLAogICAgICdfZGVjaW1hbC5weWQnLAotICAgICdfdGVzdGJ1ZmZlci5weWQnCisgICAgJ190ZXN0YnVmZmVyLnB5ZCcsCisgICAgJ19zaGEzLnB5ZCcsCisgICAgJ190ZXN0aW1wb3J0bXVsdGlwbGUucHlkJywKIF0KIAogIyBXZWxsLWtub3duIGNvbXBvbmVudCBVVUlEcwpAQCAtMTE5LDYgKzEyMSw3IEBACiAgICAgIjMxIjoiezRhZmNiYTBiLTEzZTQtNDdjMy1iZWJlLTQ3NzQyOGI0NjkxM30iLAogICAgICIzMiI6InszZmY5NTMxNS0xMDk2LTRkMzEtYmQ4Ni02MDFkNTQzOGFkNWV9IiwKICAgICAiMzMiOiJ7Zjc1ODFjYTQtZDM2OC00ZWVhLThmODItZDQ4YzY0YzRmMDQ3fSIsCisgICAgIjM0IjoiezdBMEM1ODEyLTI1ODMtNDBEOS1CQ0JCLUNENzQ4NUYxMTM3N30iLAogICAgIH0gW21ham9yK21pbm9yXQogCiAjIENvbXB1dGUgdGhlIG5hbWUgdGhhdCBTcGhpbnggZ2l2ZXMgdG8gdGhlIGRvY2ZpbGUKQEAgLTk1NCw4ICs5NTcsNiBAQAogICAgICMgQWRkIGFsbCBleGVjdXRhYmxlcywgaWNvbnMsIHRleHQgZmlsZXMgaW50byB0aGUgVEFSR0VURElSIGNvbXBvbmVudAogICAgIHJvb3QgPSBQeURpcmVjdG9yeShkYiwgY2FiLCBOb25lLCBzcmNkaXIsICJUQVJHRVRESVIiLCAiU291cmNlRGlyIikKICAgICBkZWZhdWx0X2ZlYXR1cmUuc2V0X2N1cnJlbnQoKQotICAgIGlmIG5vdCBtc2lsaWIuV2luNjQ6Ci0gICAgICAgIHJvb3QuYWRkX2ZpbGUoIiVzL3c5eHBvcGVuLmV4ZSIgJSBQQ0JVSUxEKQogICAgIHJvb3QuYWRkX2ZpbGUoIlJFQURNRS50eHQiLCBzcmM9IlJFQURNRSIpCiAgICAgcm9vdC5hZGRfZmlsZSgiTkVXUy50eHQiLCBzcmM9Ik1pc2MvTkVXUyIpCiAgICAgZ2VuZXJhdGVfbGljZW5zZSgpCkBAIC0xMjY5LDYgKzEyNzAsMTAgQEAKICAgICAgICAgICAgICAgIns2MDI1NENBNS05NTNCLTExQ0YtOEM5Ni0wMEFBMDBCODcwOEN9IiwgIlJFR0lTVFJZLmRlZiIpLAogICAgICAgICAgICAgXSkKIAorICAgICMgUEFUSEVYVAorICAgIGFkZF9kYXRhKGRiLCAiRW52aXJvbm1lbnQiLAorICAgICAgICAgICAgIFsoIlBhdGhFeHRBZGRpdGlvbiIsICI9LSpQYXRoRXh0IiwgIlt+XTsuUFkiLCAiUkVHSVNUUlkuZGVmIildKQorCiAgICAgIyBSZWdpc3RyeSBrZXlzCiAgICAgcHJlZml4ID0gciJTb2Z0d2FyZVwlc1B5dGhvblxQeXRob25Db3JlXCVzIiAlICh0ZXN0cHJlZml4LCBzaG9ydF92ZXJzaW9uKQogICAgIGFkZF9kYXRhKGRiLCAiUmVnaXN0cnkiLApkaWZmIC0tZ2l0IGEvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkgYi9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQppbmRleCBiNTVlMmM2Li44MzdjZDgxIDEwMDY0NAotLS0gYS9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQorKysgYi9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQpAQCAtMzA3LDYgKzMwNyw5IEBACiAgICAgZGVmIF9OYW1lKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKHQuaWQpCiAKKyAgICBkZWYgX05hbWVDb25zdGFudChzZWxmLCB0KToKKyAgICAgICAgc2VsZi53cml0ZShyZXByKHQudmFsdWUpKQorCiAgICAgZGVmIF9OdW0oc2VsZiwgdCk6CiAgICAgICAgICMgU3Vic3RpdHV0ZSBvdmVyZmxvd2luZyBkZWNpbWFsIGxpdGVyYWwgZm9yIEFTVCBpbmZpbml0aWVzLgogICAgICAgICBzZWxmLndyaXRlKHJlcHIodC5uKS5yZXBsYWNlKCJpbmYiLCBJTkZTVFIpKQpAQCAtNTE1LDEwICs1MTgsMTAgQEAKICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKICAgICAgICAgICAgIHNlbGYud3JpdGUoIioiKQogICAgICAgICAgICAgaWYgdC52YXJhcmc6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZSh0LnZhcmFyZykKLSAgICAgICAgICAgICAgICBpZiB0LnZhcmFyZ2Fubm90YXRpb246CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSh0LnZhcmFyZy5hcmcpCisgICAgICAgICAgICAgICAgaWYgdC52YXJhcmcuYW5ub3RhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFyYXJnYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhcmFyZy5hbm5vdGF0aW9uKQogCiAgICAgICAgICMga2V5d29yZC1vbmx5IGFyZ3VtZW50cwogICAgICAgICBpZiB0Lmt3b25seWFyZ3M6CkBAIC01MzQsMTAgKzUzNywxMCBAQAogICAgICAgICBpZiB0Lmt3YXJnOgogICAgICAgICAgICAgaWYgZmlyc3Q6Zmlyc3QgPSBGYWxzZQogICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKioiK3Qua3dhcmcpCi0gICAgICAgICAgICBpZiB0Lmt3YXJnYW5ub3RhdGlvbjoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIioqIit0Lmt3YXJnLmFyZykKKyAgICAgICAgICAgIGlmIHQua3dhcmcuYW5ub3RhdGlvbjoKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCI6ICIpCi0gICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lmt3YXJnYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQua3dhcmcuYW5ub3RhdGlvbikKIAogICAgIGRlZiBfa2V5d29yZChzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSh0LmFyZykKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvUkVBRE1FIGIvVG9vbHMvc2NyaXB0cy9SRUFETUUKaW5kZXggZDY1ZDFmZC4uYzZiMjI4MiAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy9SRUFETUUKKysrIGIvVG9vbHMvc2NyaXB0cy9SRUFETUUKQEAgLTIsNjQgKzIsNjggQEAKIHVzZWZ1bCB3aGlsZSBidWlsZGluZywgZXh0ZW5kaW5nIG9yIG1hbmFnaW5nIFB5dGhvbi4gIFNvbWUgKGUuZy4sIGR1dHJlZSBvciBsbGwpCiBhcmUgYWxzbyBnZW5lcmFsbHkgdXNlZnVsIFVOSVggdG9vbHMuCiAKLTJ0bzMgICAgICAgICAgICAgICAgICAgIE1haW4gc2NyaXB0IGZvciBydW5uaW5nIHRoZSAydG8zIGNvbnZlcnNpb24gdG9vbAotYW5hbHl6ZV9keHAucHkgICAgICAgICAgQW5hbHl6ZXMgdGhlIHJlc3VsdCBvZiBzeXMuZ2V0ZHhwKCkKLWJ5ZXh0LnB5ICAgICAgICAgICAgICAgIFByaW50IGxpbmVzL3dvcmRzL2NoYXJzIHN0YXRzIG9mIGZpbGVzIGJ5IGV4dGVuc2lvbgotYnl0ZXllYXJzLnB5ICAgICAgICAgICAgUHJpbnQgcHJvZHVjdCBvZiBhIGZpbGUncyBzaXplIGFuZCBhZ2UKLWNoZWNrcHljLnB5ICAgICAgICAgICAgIENoZWNrIHByZXNlbmNlIGFuZCB2YWxpZGl0eSBvZiAiLnB5YyIgZmlsZXMKLWNsZWFuZnV0dXJlLnB5ICAgICAgICAgIEZpeCByZWR1bmRhbnQgUHl0aG9uIF9fZnV0dXJlX18gc3RhdGVtZW50cwotY29tYmluZXJlZnMucHkgICAgICAgICAgQSBoZWxwZXIgZm9yIGFuYWx5emluZyBQWVRIT05EVU1QUkVGUyBvdXRwdXQKLWNvcHl0aW1lLnB5ICAgICAgICAgICAgIENvcHkgb25lIGZpbGUncyBhdGltZSBhbmQgbXRpbWUgdG8gYW5vdGhlcgotY3JsZi5weSAgICAgICAgICAgICAgICAgQ2hhbmdlIENSTEYgbGluZSBlbmRpbmdzIHRvIExGIChXaW5kb3dzIHRvIFVuaXgpCi1kYjJwaWNrbGUucHkgICAgICAgICAgICBEdW1wIGEgZGF0YWJhc2UgZmlsZSB0byBhIHBpY2tsZQotZGlmZi5weSAgICAgICAgICAgICAgICAgUHJpbnQgZmlsZSBkaWZmcyBpbiBjb250ZXh0LCB1bmlmaWVkLCBvciBuZGlmZiBmb3JtYXRzCi1kdXRyZWUucHkgICAgICAgICAgICAgICBGb3JtYXQgZHUoMSkgb3V0cHV0IGFzIGEgdHJlZSBzb3J0ZWQgYnkgc2l6ZQotZXB0YWdzLnB5ICAgICAgICAgICAgICAgQ3JlYXRlIEVtYWNzIFRBR1MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKLWZpbmRfcmVjdXJzaW9ubGltaXQucHkgIEZpbmQgdGhlIG1heGltdW0gcmVjdXJzaW9uIGxpbWl0IG9uIHRoaXMgbWFjaGluZQotZmluZGRpdi5weSAgICAgICAgICAgICAgQSBncmVwLWxpa2UgdG9vbCB0aGF0IGxvb2tzIGZvciBkaXZpc2lvbiBvcGVyYXRvcnMKLWZpbmRsaW5rc3RvLnB5ICAgICAgICAgIFJlY3Vyc2l2ZWx5IGZpbmQgc3ltYm9saWMgbGlua3MgdG8gYSBnaXZlbiBwYXRoIHByZWZpeAotZmluZG5vY29kaW5nLnB5ICAgICAgICAgRmluZCBzb3VyY2UgZmlsZXMgd2hpY2ggbmVlZCBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbgotZml4Y2lkLnB5ICAgICAgICAgICAgICAgTWFzc2l2ZSBpZGVudGlmaWVyIHN1YnN0aXR1dGlvbiBvbiBDIHNvdXJjZSBmaWxlcwotZml4ZGl2LnB5ICAgICAgICAgICAgICAgVG9vbCB0byBmaXggZGl2aXNpb24gb3BlcmF0b3JzLgotZml4aGVhZGVyLnB5ICAgICAgICAgICAgQWRkIHNvbWUgY3BwIG1hZ2ljIHRvIGEgQyBpbmNsdWRlIGZpbGUKLWZpeG5vdGljZS5weSAgICAgICAgICAgIEZpeCB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiBzb3VyY2UgZmlsZXMKLWZpeHBzLnB5ICAgICAgICAgICAgICAgIEZpeCBQeXRob24gc2NyaXB0cycgZmlyc3QgbGluZSAoaWYgIyEpCi1mdHBtaXJyb3IucHkgICAgICAgICAgICBGVFAgbWlycm9yIHNjcmlwdAotZ29vZ2xlLnB5ICAgICAgICAgICAgICAgT3BlbiBhIHdlYmJyb3dzZXIgd2l0aCBHb29nbGUKLWdwcm9mMmh0bWwucHkgICAgICAgICAgIFRyYW5zZm9ybSBncHJvZigxKSBvdXRwdXQgaW50byB1c2VmdWwgSFRNTAotaDJweS5weSAgICAgICAgICAgICAgICAgVHJhbnNsYXRlICNkZWZpbmUncyBpbnRvIFB5dGhvbiBhc3NpZ25tZW50cwotaGlnaGxpZ2h0LnB5ICAgICAgICAgICAgUHl0aG9uIHN5bnRheCBoaWdobGlnaHRpbmcgd2l0aCBIVE1MIG91dHB1dAotaWRsZTMgICAgICAgICAgICAgICAgICAgTWFpbiBwcm9ncmFtIHRvIHN0YXJ0IElETEUKLWlmZGVmLnB5ICAgICAgICAgICAgICAgIFJlbW92ZSAjaWYobilkZWYgZ3JvdXBzIGZyb20gQyBzb3VyY2VzCi1sZmNyLnB5ICAgICAgICAgICAgICAgICBDaGFuZ2UgTEYgbGluZSBlbmRpbmdzIHRvIENSTEYgKFVuaXggdG8gV2luZG93cykKLWxpbmt0cmVlLnB5ICAgICAgICAgICAgIE1ha2UgYSBjb3B5IG9mIGEgdHJlZSB3aXRoIGxpbmtzIHRvIG9yaWdpbmFsIGZpbGVzCi1sbGwucHkgICAgICAgICAgICAgICAgICBGaW5kIGFuZCBsaXN0IHN5bWJvbGljIGxpbmtzIGluIGN1cnJlbnQgZGlyZWN0b3J5Ci1tYWlsZXJkYWVtb24ucHkgICAgICAgICBQYXJzZSBlcnJvciBtZXNzYWdlcyBmcm9tIG1haWxlciBkYWVtb25zIChTam9lcmQmSmFjaykKLW1ha2VfY3R5cGUucHkgICAgICAgICAgIEdlbmVyYXRlIGN0eXBlLmggcmVwbGFjZW1lbnQgaW4gc3RyaW5nb2JqZWN0LmMKLW1kNXN1bS5weSAgICAgICAgICAgICAgIFByaW50IE1ENSBjaGVja3N1bXMgb2YgYXJndW1lbnQgZmlsZXMKLW1rcmVhbC5weSAgICAgICAgICAgICAgIFR1cm4gYSBzeW1ib2xpYyBsaW5rIGludG8gYSByZWFsIGZpbGUgb3IgZGlyZWN0b3J5Ci1uZGlmZi5weSAgICAgICAgICAgICAgICBJbnRlbGxpZ2VudCBkaWZmIGJldHdlZW4gdGV4dCBmaWxlcyAoVGltIFBldGVycykKLW5tMmRlZi5weSAgICAgICAgICAgICAgIENyZWF0ZSBhIHRlbXBsYXRlIGZvciBQQy9weXRob25fbnQuZGVmIChNYXJjIExlbWJ1cmcpCi1vYmpncmFwaC5weSAgICAgICAgICAgICBQcmludCBvYmplY3QgZ3JhcGggZnJvbSBubSBvdXRwdXQgb24gYSBsaWJyYXJ5Ci1wYXJzZWVudGl0aWVzLnB5ICAgICAgICBVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUwgZW50aXR5IGRlZmluaXRpb25zCi1wYXRjaGNoZWNrLnB5ICAgICAgICAgICBQZXJmb3JtIGNvbW1vbiBjaGVja3MgYW5kIGNsZWFudXAgYmVmb3JlIGNvbW1pdHRpbmcKLXBhdGhmaXgucHkgICAgICAgICAgICAgIENoYW5nZSAjIS91c3IvbG9jYWwvYmluL3B5dGhvbiBpbnRvIHNvbWV0aGluZyBlbHNlCi1wZGVwcy5weSAgICAgICAgICAgICAgICBQcmludCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBQeXRob24gbW9kdWxlcwotcGlja2xlMmRiLnB5ICAgICAgICAgICAgTG9hZCBhIHBpY2tsZSBnZW5lcmF0ZWQgYnkgZGIycGlja2xlLnB5IHRvIGEgZGF0YWJhc2UKLXBpbmRlbnQucHkgICAgICAgICAgICAgIEluZGVudCBQeXRob24gY29kZSwgZ2l2aW5nIGJsb2NrLWNsb3NpbmcgY29tbWVudHMKLXB0YWdzLnB5ICAgICAgICAgICAgICAgIENyZWF0ZSB2aSB0YWdzIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCi1weWRvYzMgICAgICAgICAgICAgICAgICBQeXRob24gZG9jdW1lbnRhdGlvbiBicm93c2VyCi1weXNvdXJjZS5weSAgICAgICAgICAgICBGaW5kIFB5dGhvbiBzb3VyY2UgZmlsZXMKLXJlZGVtby5weSAgICAgICAgICAgICAgIEJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBkZW1vbnN0cmF0aW9uIGZhY2lsaXR5Ci1yZWluZGVudC5weSAgICAgICAgICAgICBDaGFuZ2UgLnB5IGZpbGVzIHRvIHVzZSA0LXNwYWNlIGluZGVudHMKLXJlaW5kZW50LXJzdC5weSAgICAgICAgIEZpeC11cCByZVN0cnVjdHVyZWRUZXh0IGZpbGUgd2hpdGVzcGFjZQotcmdyZXAucHkgICAgICAgICAgICAgICAgUmV2ZXJzZSBncmVwIHRocm91Z2ggYSBmaWxlICh1c2VmdWwgZm9yIGJpZyBsb2dmaWxlcykKLXJ1bl90ZXN0cy5weSAgICAgICAgICAgIFJ1biB0aGUgdGVzdCBzdWl0ZSB3aXRoIG1vcmUgc2Vuc2libGUgZGVmYXVsdCBvcHRpb25zCi1zZXJ2ZS5weSAgICAgICAgICAgICAgICBTbWFsbCB3c2dpcmVmLWJhc2VkIHdlYiBzZXJ2ZXIsIHVzZWQgaW4gbWFrZSBzZXJ2ZSBpbiBEb2MKLXN1ZmYucHkgICAgICAgICAgICAgICAgIFNvcnQgYSBsaXN0IG9mIGZpbGVzIGJ5IHN1ZmZpeAotc3ZuZW9sLnB5ICAgICAgICAgICAgICAgU2V0IHN2bjplb2wtc3R5bGUgb24gYWxsIGZpbGVzIGluIGRpcmVjdG9yeQotdGV4aTJodG1sLnB5ICAgICAgICAgICAgQ29udmVydCBHTlUgdGV4aW5mbyBmaWxlcyBpbnRvIEhUTUwKLXRyZWVzeW5jLnB5ICAgICAgICAgICAgIFN5bmNocm9uaXplIHNvdXJjZSB0cmVlcyAodmVyeSBpZGlvc3luY3JhdGljKQotdW50YWJpZnkucHkgICAgICAgICAgICAgUmVwbGFjZSB0YWJzIHdpdGggc3BhY2VzIGluIGFyZ3VtZW50IGZpbGVzCi13aW5fYWRkMnBhdGgucHkgICAgICAgICBBZGQgUHl0aG9uIHRvIHRoZSBzZWFyY2ggcGF0aCBvbiBXaW5kb3dzCi13aGljaC5weSAgICAgICAgICAgICAgICBGaW5kIGEgcHJvZ3JhbSBpbiAkUEFUSAorMnRvMyAgICAgICAgICAgICAgICAgICAgICBNYWluIHNjcmlwdCBmb3IgcnVubmluZyB0aGUgMnRvMyBjb252ZXJzaW9uIHRvb2wKK2FiaXR5cGUucHkgICAgICAgICAgICAgICAgQ29udmVydHMgYSBDIGZpbGUgdG8gdXNlIHRoZSBQRVAgMzg0IHR5cGUgZGVmaW5pdGlvbiBBUEkKK2FuYWx5emVfZHhwLnB5ICAgICAgICAgICAgQW5hbHl6ZXMgdGhlIHJlc3VsdCBvZiBzeXMuZ2V0ZHhwKCkKK2J5ZXh0LnB5ICAgICAgICAgICAgICAgICAgUHJpbnQgbGluZXMvd29yZHMvY2hhcnMgc3RhdHMgb2YgZmlsZXMgYnkgZXh0ZW5zaW9uCitieXRleWVhcnMucHkgICAgICAgICAgICAgIFByaW50IHByb2R1Y3Qgb2YgYSBmaWxlJ3Mgc2l6ZSBhbmQgYWdlCitjaGVja3B5Yy5weSAgICAgICAgICAgICAgIENoZWNrIHByZXNlbmNlIGFuZCB2YWxpZGl0eSBvZiAiLnB5YyIgZmlsZXMKK2NsZWFuZnV0dXJlLnB5ICAgICAgICAgICAgRml4IHJlZHVuZGFudCBQeXRob24gX19mdXR1cmVfXyBzdGF0ZW1lbnRzCitjb21iaW5lcmVmcy5weSAgICAgICAgICAgIEEgaGVscGVyIGZvciBhbmFseXppbmcgUFlUSE9ORFVNUFJFRlMgb3V0cHV0Citjb3B5dGltZS5weSAgICAgICAgICAgICAgIENvcHkgb25lIGZpbGUncyBhdGltZSBhbmQgbXRpbWUgdG8gYW5vdGhlcgorY3JsZi5weSAgICAgICAgICAgICAgICAgICBDaGFuZ2UgQ1JMRiBsaW5lIGVuZGluZ3MgdG8gTEYgKFdpbmRvd3MgdG8gVW5peCkKK2RiMnBpY2tsZS5weSAgICAgICAgICAgICAgRHVtcCBhIGRhdGFiYXNlIGZpbGUgdG8gYSBwaWNrbGUKK2RpZmYucHkgICAgICAgICAgICAgICAgICAgUHJpbnQgZmlsZSBkaWZmcyBpbiBjb250ZXh0LCB1bmlmaWVkLCBvciBuZGlmZiBmb3JtYXRzCitkdXRyZWUucHkgICAgICAgICAgICAgICAgIEZvcm1hdCBkdSgxKSBvdXRwdXQgYXMgYSB0cmVlIHNvcnRlZCBieSBzaXplCitlcHRhZ3MucHkgICAgICAgICAgICAgICAgIENyZWF0ZSBFbWFjcyBUQUdTIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCitmaW5kZGl2LnB5ICAgICAgICAgICAgICAgIEEgZ3JlcC1saWtlIHRvb2wgdGhhdCBsb29rcyBmb3IgZGl2aXNpb24gb3BlcmF0b3JzCitmaW5kbGlua3N0by5weSAgICAgICAgICAgIFJlY3Vyc2l2ZWx5IGZpbmQgc3ltYm9saWMgbGlua3MgdG8gYSBnaXZlbiBwYXRoIHByZWZpeAorZmluZG5vY29kaW5nLnB5ICAgICAgICAgICBGaW5kIHNvdXJjZSBmaWxlcyB3aGljaCBuZWVkIGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uCitmaW5kX3JlY3Vyc2lvbmxpbWl0LnB5ICAgIEZpbmQgdGhlIG1heGltdW0gcmVjdXJzaW9uIGxpbWl0IG9uIHRoaXMgbWFjaGluZQorZmluZC11bmFtZS5weSAgICAgICAgICAgICBMb29rIGZvciB0aGUgZ2l2ZW4gYXJndW1lbnRzIGluIHRoZSBzZXRzIG9mIGFsbCBVbmljb2RlIG5hbWVzCitmaXhjaWQucHkgICAgICAgICAgICAgICAgIE1hc3NpdmUgaWRlbnRpZmllciBzdWJzdGl0dXRpb24gb24gQyBzb3VyY2UgZmlsZXMKK2ZpeGRpdi5weSAgICAgICAgICAgICAgICAgVG9vbCB0byBmaXggZGl2aXNpb24gb3BlcmF0b3JzLgorZml4aGVhZGVyLnB5ICAgICAgICAgICAgICBBZGQgc29tZSBjcHAgbWFnaWMgdG8gYSBDIGluY2x1ZGUgZmlsZQorZml4bm90aWNlLnB5ICAgICAgICAgICAgICBGaXggdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gc291cmNlIGZpbGVzCitmaXhwcy5weSAgICAgICAgICAgICAgICAgIEZpeCBQeXRob24gc2NyaXB0cycgZmlyc3QgbGluZSAoaWYgIyEpCitmdHBtaXJyb3IucHkgICAgICAgICAgICAgIEZUUCBtaXJyb3Igc2NyaXB0CitnZXQtcmVtb3RlLWNlcnRpZmljYXRlLnB5IEZldGNoIHRoZSBjZXJ0aWZpY2F0ZSB0aGF0IHRoZSBzZXJ2ZXIocykgYXJlIHByb3ZpZGluZyBpbiBQRU0gZm9ybQorZ29vZ2xlLnB5ICAgICAgICAgICAgICAgICBPcGVuIGEgd2ViYnJvd3NlciB3aXRoIEdvb2dsZQorZ3Byb2YyaHRtbC5weSAgICAgICAgICAgICBUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwKK2gycHkucHkgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlICNkZWZpbmUncyBpbnRvIFB5dGhvbiBhc3NpZ25tZW50cworaGlnaGxpZ2h0LnB5ICAgICAgICAgICAgICBQeXRob24gc3ludGF4IGhpZ2hsaWdodGluZyB3aXRoIEhUTUwgb3V0cHV0CitpZGxlMyAgICAgICAgICAgICAgICAgICAgIE1haW4gcHJvZ3JhbSB0byBzdGFydCBJRExFCitpZmRlZi5weSAgICAgICAgICAgICAgICAgIFJlbW92ZSAjaWYobilkZWYgZ3JvdXBzIGZyb20gQyBzb3VyY2VzCitpbXBvcnRfZGlhZ25vc3RpY3MucHkgICAgIE1pc2NlbGxhbmVvdXMgZGlhZ25vc3RpY3MgZm9yIHRoZSBpbXBvcnQgc3lzdGVtCitsZmNyLnB5ICAgICAgICAgICAgICAgICAgIENoYW5nZSBMRiBsaW5lIGVuZGluZ3MgdG8gQ1JMRiAoVW5peCB0byBXaW5kb3dzKQorbGlua3RyZWUucHkgICAgICAgICAgICAgICBNYWtlIGEgY29weSBvZiBhIHRyZWUgd2l0aCBsaW5rcyB0byBvcmlnaW5hbCBmaWxlcworbGxsLnB5ICAgICAgICAgICAgICAgICAgICBGaW5kIGFuZCBsaXN0IHN5bWJvbGljIGxpbmtzIGluIGN1cnJlbnQgZGlyZWN0b3J5CittYWlsZXJkYWVtb24ucHkgICAgICAgICAgIFBhcnNlIGVycm9yIG1lc3NhZ2VzIGZyb20gbWFpbGVyIGRhZW1vbnMgKFNqb2VyZCZKYWNrKQorbWFrZV9jdHlwZS5weSAgICAgICAgICAgICBHZW5lcmF0ZSBjdHlwZS5oIHJlcGxhY2VtZW50IGluIHN0cmluZ29iamVjdC5jCittZDVzdW0ucHkgICAgICAgICAgICAgICAgIFByaW50IE1ENSBjaGVja3N1bXMgb2YgYXJndW1lbnQgZmlsZXMKK21rcmVhbC5weSAgICAgICAgICAgICAgICAgVHVybiBhIHN5bWJvbGljIGxpbmsgaW50byBhIHJlYWwgZmlsZSBvciBkaXJlY3RvcnkKK25kaWZmLnB5ICAgICAgICAgICAgICAgICAgSW50ZWxsaWdlbnQgZGlmZiBiZXR3ZWVuIHRleHQgZmlsZXMgKFRpbSBQZXRlcnMpCitubTJkZWYucHkgICAgICAgICAgICAgICAgIENyZWF0ZSBhIHRlbXBsYXRlIGZvciBQQy9weXRob25fbnQuZGVmIChNYXJjIExlbWJ1cmcpCitvYmpncmFwaC5weSAgICAgICAgICAgICAgIFByaW50IG9iamVjdCBncmFwaCBmcm9tIG5tIG91dHB1dCBvbiBhIGxpYnJhcnkKK3BhcnNlZW50aXRpZXMucHkgICAgICAgICAgVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MIGVudGl0eSBkZWZpbml0aW9ucworcGFyc2VfaHRtbDVfZW50aXRpZXMucHkgICBVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUw1IGVudGl0eSBkZWZpbml0aW9ucworcGF0Y2hjaGVjay5weSAgICAgICAgICAgICBQZXJmb3JtIGNvbW1vbiBjaGVja3MgYW5kIGNsZWFudXAgYmVmb3JlIGNvbW1pdHRpbmcKK3BhdGhmaXgucHkgICAgICAgICAgICAgICAgQ2hhbmdlICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uIGludG8gc29tZXRoaW5nIGVsc2UKK3BkZXBzLnB5ICAgICAgICAgICAgICAgICAgUHJpbnQgZGVwZW5kZW5jaWVzIGJldHdlZW4gUHl0aG9uIG1vZHVsZXMKK3BpY2tsZTJkYi5weSAgICAgICAgICAgICAgTG9hZCBhIHBpY2tsZSBnZW5lcmF0ZWQgYnkgZGIycGlja2xlLnB5IHRvIGEgZGF0YWJhc2UKK3BpbmRlbnQucHkgICAgICAgICAgICAgICAgSW5kZW50IFB5dGhvbiBjb2RlLCBnaXZpbmcgYmxvY2stY2xvc2luZyBjb21tZW50cworcHRhZ3MucHkgICAgICAgICAgICAgICAgICBDcmVhdGUgdmkgdGFncyBmaWxlIGZvciBQeXRob24gbW9kdWxlcworcHlkb2MzICAgICAgICAgICAgICAgICAgICBQeXRob24gZG9jdW1lbnRhdGlvbiBicm93c2VyCitweXNvdXJjZS5weSAgICAgICAgICAgICAgIEZpbmQgUHl0aG9uIHNvdXJjZSBmaWxlcworcmVpbmRlbnQucHkgICAgICAgICAgICAgICBDaGFuZ2UgLnB5IGZpbGVzIHRvIHVzZSA0LXNwYWNlIGluZGVudHMKK3JlaW5kZW50LXJzdC5weSAgICAgICAgICAgRml4LXVwIHJlU3RydWN0dXJlZFRleHQgZmlsZSB3aGl0ZXNwYWNlCityZ3JlcC5weSAgICAgICAgICAgICAgICAgIFJldmVyc2UgZ3JlcCB0aHJvdWdoIGEgZmlsZSAodXNlZnVsIGZvciBiaWcgbG9nZmlsZXMpCitydW5fdGVzdHMucHkgICAgICAgICAgICAgIFJ1biB0aGUgdGVzdCBzdWl0ZSB3aXRoIG1vcmUgc2Vuc2libGUgZGVmYXVsdCBvcHRpb25zCitzZXJ2ZS5weSAgICAgICAgICAgICAgICAgIFNtYWxsIHdzZ2lyZWYtYmFzZWQgd2ViIHNlcnZlciwgdXNlZCBpbiBtYWtlIHNlcnZlIGluIERvYworc3VmZi5weSAgICAgICAgICAgICAgICAgICBTb3J0IGEgbGlzdCBvZiBmaWxlcyBieSBzdWZmaXgKK3N2bmVvbC5weSAgICAgICAgICAgICAgICAgU2V0IHN2bjplb2wtc3R5bGUgb24gYWxsIGZpbGVzIGluIGRpcmVjdG9yeQordGV4aTJodG1sLnB5ICAgICAgICAgICAgICBDb252ZXJ0IEdOVSB0ZXhpbmZvIGZpbGVzIGludG8gSFRNTAordHJlZXN5bmMucHkgICAgICAgICAgICAgICBTeW5jaHJvbml6ZSBzb3VyY2UgdHJlZXMgKHZlcnkgaWRpb3N5bmNyYXRpYykKK3VudGFiaWZ5LnB5ICAgICAgICAgICAgICAgUmVwbGFjZSB0YWJzIHdpdGggc3BhY2VzIGluIGFyZ3VtZW50IGZpbGVzCit3aGljaC5weSAgICAgICAgICAgICAgICAgIEZpbmQgYSBwcm9ncmFtIGluICRQQVRICit3aW5fYWRkMnBhdGgucHkgICAgICAgICAgIEFkZCBQeXRob24gdG8gdGhlIHNlYXJjaCBwYXRoIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvYW5hbHl6ZV9keHAucHkgYi9Ub29scy9zY3JpcHRzL2FuYWx5emVfZHhwLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkgYi9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CmluZGV4IGI3OWZmMzcuLjczNmE0NDEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQpAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICBzZWxmLmFkZHN0YXRzKCI8ZGlyPiIsICJkaXJzIiwgMSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3QgbGlzdCAlczogJXNcbiIgJSAoZGlyLCBlcnIpKQogICAgICAgICAgICAgc2VsZi5hZGRzdGF0cygiPGRpcj4iLCAidW5saXN0YWJsZSIsIDEpCiAgICAgICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvYnl0ZXllYXJzLnB5IGIvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkKaW5kZXggNDkwYjM3Zi4uZjU4YzM0NiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBmb3IgZmlsZW5hbWUgaW4gc3lzLmFyZ3ZbMTpdOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdCA9IHN0YXRmdW5jKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJjYW4ndCBzdGF0ICVyOiAlclxuIiAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgICAgIHN0YXR1cyA9IDEKICAgICAgICAgICAgIHN0ID0gKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkgYi9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5CmluZGV4IGQ0ZmRjZTIuLmJiYWEzZDEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weQpAQCAtNSwxMSArNSwxMSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBmcm9tIHN0YXQgaW1wb3J0IFNUX01USU1FCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIAogIyBQRVAgMzE0NyBjb21wYXRpYmlsaXR5IChQWUMgUmVwb3NpdG9yeSBEaXJlY3RvcmllcykKLWNhY2hlX2Zyb21fc291cmNlID0gKGltcC5jYWNoZV9mcm9tX3NvdXJjZSBpZiBoYXNhdHRyKGltcCwgJ2dldF90YWcnKSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgcGF0aDogcGF0aCArICdjJykKK2NhY2hlX2Zyb21fc291cmNlID0gKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlIGlmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UgbGFtYmRhIHBhdGg6IHBhdGggKyAnYycpCiAKIAogZGVmIG1haW4oKToKQEAgLTE4LDEzICsxOCwxMyBAQAogICAgICAgICBzaWxlbnQgPSAoc3lzLmFyZ3ZbMV0gPT0gJy1zJykKICAgICBlbHNlOgogICAgICAgICB2ZXJib3NlID0gc2lsZW50ID0gRmFsc2UKLSAgICBNQUdJQyA9IGltcC5nZXRfbWFnaWMoKQorICAgIE1BR0lDID0gaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSCiAgICAgaWYgbm90IHNpbGVudDoKICAgICAgICAgcHJpbnQoJ1VzaW5nIE1BR0lDIHdvcmQnLCByZXByKE1BR0lDKSkKICAgICBmb3IgZGlybmFtZSBpbiBzeXMucGF0aDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwcmludCgnQ2Fubm90IGxpc3QgZGlyZWN0b3J5JywgcmVwcihkaXJuYW1lKSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIG5vdCBzaWxlbnQ6CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBuYW1lKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwcmludCgnQ2Fubm90IHN0YXQnLCByZXByKG5hbWUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5IGIvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weQppbmRleCBlMDIyMGI1Li43MTU2ODNmIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkKQEAgLTEzLDEyICsxMywxMiBAQAogICAgIGZpbGUxLCBmaWxlMiA9IHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXQogICAgIHRyeToKICAgICAgICAgc3RhdDEgPSBvcy5zdGF0KGZpbGUxKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShmaWxlMSArICc6IGNhbm5vdCBzdGF0XG4nKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIHRyeToKICAgICAgICAgb3MudXRpbWUoZmlsZTIsIChzdGF0MVtTVF9BVElNRV0sIHN0YXQxW1NUX01USU1FXSkpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGZpbGUyICsgJzogY2Fubm90IGNoYW5nZSB0aW1lXG4nKQogICAgICAgICBzeXMuZXhpdCgyKQogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKaW5kZXggZjI0YTcwMi4uYTcwNWY1NiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQpAQCAtNzAsNyArNzAsNyBAQAogZGVmIHByb2Nlc3NkaXIoZGlyLCBsaXN0bmFtZXMpOgogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3QgbGlzdCBkaXJlY3Rvcnk6ICVzXG4iICUgZGlyKQogICAgICAgICByZXR1cm4gMQogICAgIGZpbGVzID0gW10KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CmluZGV4IGI0YzA5ZWYuLmI5MjRmMjcgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgbGlua3RvID0gb3MucmVhZGxpbmsobmFtZSkKICAgICAgICAgICAgIGlmIHByb2cuc2VhcmNoKGxpbmt0bykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcHJpbnQobmFtZSwgJy0+JywgbGlua3RvKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkgYi9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQppbmRleCA4N2UyYTA5Li4xZTRjNDI4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQpAQCAtOTcsNyArOTcsNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZGlybmFtZSArICc6IGNhbm5vdCBsaXN0IGRpcmVjdG9yeTogJyArIHN0cihtc2cpICsgJ1xuJykKICAgICAgICAgcmV0dXJuIDEKICAgICBuYW1lcy5zb3J0KCkKQEAgLTE3NSwxNyArMTc1LDE3IEBACiAgICAgdHJ5OgogICAgICAgICBzdGF0YnVmID0gb3Muc3RhdChmaWxlbmFtZSkKICAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwbzc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycih0ZW1wbmFtZSArICc6IHdhcm5pbmc6IGNobW9kIGZhaWxlZCAoJyArIHN0cihtc2cpICsgJylcbicpCiAgICAgIyBUaGVuIG1ha2UgYSBiYWNrdXAgb2YgdGhlIG9yaWdpbmFsIGZpbGUgYXMgZmlsZW5hbWV+CiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJ34nKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZmlsZW5hbWUgKyAnOiB3YXJuaW5nOiBiYWNrdXAgZmFpbGVkICgnICsgc3RyKG1zZykgKyAnKVxuJykKICAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihmaWxlbmFtZSArICc6IHJlbmFtZSBmYWlsZWQgKCcgKyBzdHIobXNnKSArICcpXG4nKQogICAgICAgICByZXR1cm4gMQogICAgICMgUmV0dXJuIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZnRwbWlycm9yLnB5IGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKaW5kZXggOWU4YmUxZC4uYTFiNjgzYSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgnQ3JlYXRpbmcgbG9jYWwgZGlyZWN0b3J5JywgcmVwcihsb2NhbGRpcikpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1ha2VkaXIobG9jYWxkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgdG8gZXN0YWJsaXNoIGxvY2FsIGRpcmVjdG9yeSIsIHJlcHIobG9jYWxkaXIpKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgaW5mb2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGxvY2FsZGlyLCAnLm1pcnJvcmluZm8nKQpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHRlbXBuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBtb2RlWzBdID09ICdsJzoKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CkBAIC0yMTgsMTEgKzIxOCwxMSBAQAogICAgICAgICAgICAgICAgIGZwMS5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAjIElnbm9yZSB0aGUgZXJyb3IKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IHJlbmFtZSAlciB0byAlcjogJXMiICUgKHRlbXBuYW1lLCBmdWxsbmFtZSwgbXNnKSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGluZm9bZmlsZW5hbWVdID0gaW5mb3N0dWZmCkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGlmIG5vdCBsb2NhbGRpcjogbmFtZXMgPSBvcy5saXN0ZGlyKG9zLmN1cmRpcikKICAgICAgICAgZWxzZTogbmFtZXMgPSBvcy5saXN0ZGlyKGxvY2FsZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgbmFtZXMgPSBbXQogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICBpZiBuYW1lWzBdID09ICcuJyBvciBuYW1lIGluIGluZm8gb3IgbmFtZSBpbiBzdWJkaXJzOgpAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgaWYgb3MucGF0aC5pc2RpcihmdWxsbmFtZSkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhmdWxsbmFtZSk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG5hbWVzID0gW10KICAgICAgICAgb2sgPSAxCiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpAQCAtMzIyLDEzICszMjIsMTMgQEAKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJtZGlyKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3QgcmVtb3ZlIGxvY2FsIGRpcmVjdG9yeSAlcjogJXMiICUgKGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICBlbHNlOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgbG9jYWwgZmlsZSAlcjogJXMiICUgKGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICByZXR1cm4gMQpAQCAtMzg2LDcgKzM4Niw3IEBACiAgICAgYmFja3VwID0gb3MucGF0aC5qb2luKGRpciwgZm5hbWUgKyAnficpCiAgICAgdHJ5OgogICAgICAgICBvcy51bmxpbmsoYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIGZwID0gb3Blbih0ZW1wbmFtZSwgJ3cnKQogICAgIGZwLndyaXRlKCd7XG4nKQpAQCAtMzk2LDcgKzM5Niw3IEBACiAgICAgZnAuY2xvc2UoKQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weSBiL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKaW5kZXggOTgyZjQ4MC4uZTgzZjE5OCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CkBAIC0zMiwxMyArMzIsMTMgQEAKICAgICAgICAgcmV0dXJuIDEKICAgICB0cnk6CiAgICAgICAgIG9zLm1rZGlyKG5ld3RyZWUsIDBvNzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludChuZXd0cmVlICsgJzogY2Fubm90IG1rZGlyOicsIG1zZykKICAgICAgICAgcmV0dXJuIDEKICAgICBsaW5rbmFtZSA9IG9zLnBhdGguam9pbihuZXd0cmVlLCBsaW5rKQogICAgIHRyeToKICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4ob3MucGFyZGlyLCBvbGR0cmVlKSwgbGlua25hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGlmIG5vdCBsaW5rX21heV9mYWlsOgogICAgICAgICAgICAgcHJpbnQobGlua25hbWUgKyAnOiBjYW5ub3Qgc3ltbGluazonLCBtc2cpCiAgICAgICAgICAgICByZXR1cm4gMQpAQCAtNTEsNyArNTEsNyBAQAogICAgIGlmIGRlYnVnOiBwcmludCgnbGlua25hbWVzJywgKG9sZCwgbmV3LCBsaW5rKSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihvbGQpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50KG9sZCArICc6IHdhcm5pbmc6IGNhbm5vdCBsaXN0ZGlyOicsIG1zZykKICAgICAgICAgcmV0dXJuCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5IGIvVG9vbHMvc2NyaXB0cy9wYXJzZV9odG1sNV9lbnRpdGllcy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMDExMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvc2NyaXB0cy9wYXJzZV9odG1sNV9lbnRpdGllcy5weQpAQCAtMCwwICsxLDEwNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIiIiCitVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUw1IGVudGl0eSBkZWZpbml0aW9ucyBhdmFpbGFibGUgZnJvbToKKworICAgIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvZW50aXRpZXMuanNvbgorCitXcml0dGVuIGJ5IEV6aW8gTWVsb3R0aSBhbmQgSXVsaWlhIFByb3NrdXJuaWEuCisKKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBqc29uCitmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCitmcm9tIGh0bWwuZW50aXRpZXMgaW1wb3J0IGh0bWw1CisKK2VudGl0aWVzX3VybCA9ICdodHRwOi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL2VudGl0aWVzLmpzb24nCisKK2RlZiBnZXRfanNvbih1cmwpOgorICAgICIiIkRvd25sb2FkIHRoZSBqc29uIGZpbGUgZnJvbSB0aGUgdXJsIGFuZCByZXR1cm5zIGEgZGVjb2RlZCBvYmplY3QuIiIiCisgICAgd2l0aCB1cmxvcGVuKHVybCkgYXMgZjoKKyAgICAgICAgZGF0YSA9IGYucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgIHJldHVybiBqc29uLmxvYWRzKGRhdGEpCisKK2RlZiBjcmVhdGVfZGljdChlbnRpdGllcyk6CisgICAgIiIiQ3JlYXRlIHRoZSBodG1sNSBkaWN0IGZyb20gdGhlIGRlY29kZWQganNvbiBvYmplY3QuIiIiCisgICAgbmV3X2h0bWw1ID0ge30KKyAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZW50aXRpZXMuaXRlbXMoKToKKyAgICAgICAgbmV3X2h0bWw1W25hbWUubHN0cmlwKCcmJyldID0gdmFsdWVbJ2NoYXJhY3RlcnMnXQorICAgIHJldHVybiBuZXdfaHRtbDUKKworZGVmIGNvbXBhcmVfZGljdHMob2xkLCBuZXcpOgorICAgICIiIkNvbXBhcmUgdGhlIG9sZCBhbmQgbmV3IGRpY3RzIGFuZCBwcmludCB0aGUgZGlmZmVyZW5jZXMuIiIiCisgICAgYWRkZWQgPSBuZXcua2V5cygpIC0gb2xkLmtleXMoKQorICAgIGlmIGFkZGVkOgorICAgICAgICBwcmludCgne30gZW50aXRpZShzKSBoYXZlIGJlZW4gYWRkZWQ6Jy5mb3JtYXQobGVuKGFkZGVkKSkpCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChhZGRlZCk6CisgICAgICAgICAgICBwcmludCgnICB7IXJ9OiB7IXJ9Jy5mb3JtYXQobmFtZSwgbmV3W25hbWVdKSkKKyAgICByZW1vdmVkID0gb2xkLmtleXMoKSAtIG5ldy5rZXlzKCkKKyAgICBpZiByZW1vdmVkOgorICAgICAgICBwcmludCgne30gZW50aXRpZShzKSBoYXZlIGJlZW4gcmVtb3ZlZDonLmZvcm1hdChsZW4ocmVtb3ZlZCkpKQorICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQocmVtb3ZlZCk6CisgICAgICAgICAgICBwcmludCgnICB7IXJ9OiB7IXJ9Jy5mb3JtYXQobmFtZSwgb2xkW25hbWVdKSkKKyAgICBjaGFuZ2VkID0gc2V0KCkKKyAgICBmb3IgbmFtZSBpbiAob2xkLmtleXMoKSAmIG5ldy5rZXlzKCkpOgorICAgICAgICBpZiBvbGRbbmFtZV0gIT0gbmV3W25hbWVdOgorICAgICAgICAgICAgY2hhbmdlZC5hZGQoKG5hbWUsIG9sZFtuYW1lXSwgbmV3W25hbWVdKSkKKyAgICBpZiBjaGFuZ2VkOgorICAgICAgICBwcmludCgne30gZW50aXRpZShzKSBoYXZlIGJlZW4gbW9kaWZpZWQ6Jy5mb3JtYXQobGVuKGNoYW5nZWQpKSkKKyAgICAgICAgZm9yIGl0ZW0gaW4gc29ydGVkKGNoYW5nZWQpOgorICAgICAgICAgICAgcHJpbnQoJyAgeyFyfTogeyFyfSAtPiB7IXJ9Jy5mb3JtYXQoKml0ZW0pKQorCitkZWYgd3JpdGVfaXRlbXMoZW50aXRpZXMsIGZpbGU9c3lzLnN0ZG91dCk6CisgICAgIiIiV3JpdGUgdGhlIGl0ZW1zIG9mIHRoZSBkaWN0aW9uYXJ5IGluIHRoZSBzcGVjaWZpZWQgZmlsZS4iIiIKKyAgICAjIFRoZSBrZXlzIGluIHRoZSBnZW5lcmF0ZWQgZGljdGlvbmFyeSBzaG91bGQgYmUgc29ydGVkCisgICAgIyBpbiBhIGNhc2UtaW5zZW5zaXRpdmUgd2F5LCBob3dldmVyLCB3aGVuIHR3byBrZXlzIGFyZSBlcXVhbCwKKyAgICAjIHRoZSB1cHBlcmNhc2UgdmVyc2lvbiBzaG91bGQgY29tZSBmaXJzdCBzbyB0aGF0IHRoZSByZXN1bHQKKyAgICAjIGxvb2tzIGxpa2U6IFsnQWFjdXRlJywgJ2FhY3V0ZScsICdBYWN1dGU7JywgJ2FhY3V0ZTsnLCAuLi5dCisgICAgIyBUbyBkbyB0aGlzIHdlIGZpcnN0IHNvcnQgaW4gYSBjYXNlLXNlbnNpdGl2ZSB3YXkgKHNvIGFsbCB0aGUKKyAgICAjIHVwcGVyY2FzZSBjaGFycyBjb21lIGZpcnN0KSBhbmQgdGhlbiBzb3J0IHdpdGgga2V5PXN0ci5sb3dlci4KKyAgICAjIFNpbmNlIHRoZSBzb3J0aW5nIGlzIHN0YWJsZSB0aGUgdXBwZXJjYXNlIGtleXMgd2lsbCBldmVudHVhbGx5CisgICAgIyBiZSBiZWZvcmUgdGhlaXIgZXF1aXZhbGVudCBsb3dlcmNhc2UgdmVyc2lvbi4KKyAgICBrZXlzID0gc29ydGVkKGVudGl0aWVzLmtleXMoKSkKKyAgICBrZXlzID0gc29ydGVkKGtleXMsIGtleT1zdHIubG93ZXIpCisgICAgcHJpbnQoJ2h0bWw1ID0geycsIGZpbGU9ZmlsZSkKKyAgICBmb3IgbmFtZSBpbiBrZXlzOgorICAgICAgICBwcmludCgnICAgIHshcn06IHshYX0sJy5mb3JtYXQobmFtZSwgZW50aXRpZXNbbmFtZV0pLCBmaWxlPWZpbGUpCisgICAgcHJpbnQoJ30nLCBmaWxlPWZpbGUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAjIHdpdGhvdXQgYXJncyBwcmludCBhIGRpZmYgYmV0d2VlbiBodG1sLmVudGl0aWVzLmh0bWw1IGFuZCBuZXdfaHRtbDUKKyAgICAjIHdpdGggLS1jcmVhdGUgcHJpbnQgdGhlIG5ldyBodG1sNSBkaWN0CisgICAgIyB3aXRoIC0tcGF0Y2ggcGF0Y2ggdGhlIExpYi9odG1sL2VudGl0aWVzLnB5IGZpbGUKKyAgICBuZXdfaHRtbDUgPSBjcmVhdGVfZGljdChnZXRfanNvbihlbnRpdGllc191cmwpKQorICAgIGlmICctLWNyZWF0ZScgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHByaW50KCcjIG1hcCB0aGUgSFRNTDUgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgdG8gdGhlICcKKyAgICAgICAgICAgICAgJ2VxdWl2YWxlbnQgVW5pY29kZSBjaGFyYWN0ZXIocyknKQorICAgICAgICBwcmludCgnIyBHZW5lcmF0ZWQgYnkge30uICBEbyBub3QgZWRpdCBtYW51YWxseS4nLmZvcm1hdChfX2ZpbGVfXykpCisgICAgICAgIHdyaXRlX2l0ZW1zKG5ld19odG1sNSkKKyAgICBlbGlmICctLXBhdGNoJyBpbiBzeXMuYXJndjoKKyAgICAgICAgZm5hbWUgPSAnTGliL2h0bWwvZW50aXRpZXMucHknCisgICAgICAgIHRlbXBfZm5hbWUgPSBmbmFtZSArICcudGVtcCcKKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lKSBhcyBmMSwgb3Blbih0ZW1wX2ZuYW1lLCAndycpIGFzIGYyOgorICAgICAgICAgICAgc2tpcCA9IEZhbHNlCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmMToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ2h0bWw1ID0geycpOgorICAgICAgICAgICAgICAgICAgICB3cml0ZV9pdGVtcyhuZXdfaHRtbDUsIGZpbGU9ZjIpCisgICAgICAgICAgICAgICAgICAgIHNraXAgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgc2tpcDoKKyAgICAgICAgICAgICAgICAgICAgIyBza2lwIHRoZSBvbGQgaXRlbXMgdW50aWwgdGhlIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd9Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBza2lwID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmMi53cml0ZShsaW5lKQorICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCisgICAgICAgIG9zLnJlbmFtZSh0ZW1wX2ZuYW1lLCBmbmFtZSkKKyAgICBlbHNlOgorICAgICAgICBpZiBodG1sNSA9PSBuZXdfaHRtbDU6CisgICAgICAgICAgICBwcmludCgnVGhlIGN1cnJlbnQgZGljdGlvbmFyeSBpcyB1cGRhdGVkLicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21wYXJlX2RpY3RzKGh0bWw1LCBuZXdfaHRtbDUpCisgICAgICAgICAgICBwcmludCgnUnVuICIuL3B5dGhvbiB7MH0gLS1wYXRjaCIgdG8gdXBkYXRlIExpYi9odG1sL2VudGl0aWVzLmh0bWwgJworICAgICAgICAgICAgICAgICAgJ29yICIuL3B5dGhvbiB7MH0gLS1jcmVhdGUiIHRvIHNlZSB0aGUgZ2VuZXJhdGVkICcgJ2RpY3Rpb25hcnkuJy5mb3JtYXQoX19maWxlX18pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5IGIvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CmluZGV4IDEzY2E4NjYuLjIyNDMyZDEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQorKysgYi9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKQEAgLTczLDcgKzczLDcgQEAKICAgICBiYWQgPSAwCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogY2Fubm90IGxpc3QgZGlyZWN0b3J5OiAlclxuJyAlIChkaXJuYW1lLCBtc2cpKQogICAgICAgICByZXR1cm4gMQogICAgIG5hbWVzLnNvcnQoKQpAQCAtMTMxLDI0ICsxMzEsMjQgQEAKICAgICAgICAgbXRpbWUgPSBzdGF0YnVmLnN0X210aW1lCiAgICAgICAgIGF0aW1lID0gc3RhdGJ1Zi5zdF9hdGltZQogICAgICAgICBvcy5jaG1vZCh0ZW1wbmFtZSwgc3RhdGJ1ZltTVF9NT0RFXSAmIDBvNzc3NykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKCclczogd2FybmluZzogY2htb2QgZmFpbGVkICglcilcbicgJSAodGVtcG5hbWUsIG1zZykpCiAgICAgIyBUaGVuIG1ha2UgYSBiYWNrdXAgb2YgdGhlIG9yaWdpbmFsIGZpbGUgYXMgZmlsZW5hbWV+CiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJ34nKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBiYWNrdXAgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgIyBOb3cgbW92ZSB0aGUgdGVtcCBmaWxlIHRvIHRoZSBvcmlnaW5hbCBmaWxlCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZpbGVuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiByZW5hbWUgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgaWYgcHJlc2VydmVfdGltZXN0YW1wczoKICAgICAgICAgaWYgYXRpbWUgYW5kIG10aW1lOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnV0aW1lKGZpbGVuYW1lLCAoYXRpbWUsIG10aW1lKSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgZXJyKCclczogcmVzZXQgb2YgdGltZXN0YW1wIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICAgICAgICAgIHJldHVybiAxCiAgICAgIyBSZXR1cm4gc3VjY2VzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5IGIvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CmluZGV4IDI4NzJkYzAuLjMzMzM0MjAgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQorKysgYi9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKQEAgLTM3NiwxMyArMzc2LDEzIEBACiAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGJhY2t1cCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJlbW92ZShiYWNrdXApCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3QgcmVtb3ZlIGJhY2t1cCAlciIgJSAoYmFja3VwLCksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgIyBlbmQgdHJ5CiAgICAgIyBlbmQgaWYKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcHJpbnQoIkNhbid0IHJlbmFtZSAlciB0byAlciIgJSAoZmlsZW5hbWUsIGJhY2t1cCksIGZpbGU9c3lzLnN0ZGVycikKICAgICAjIGVuZCB0cnkKICMgZW5kIGRlZiBtYWtlX2JhY2t1cApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9weWRvY2d1aS5weXcgYi9Ub29scy9zY3JpcHRzL3B5ZG9jZ3VpLnB5dwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5IGIvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQppbmRleCA0YTkxNmVhLi4xODQyNGRlIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKQEAgLTUyLDggKzUyLDggQEAKIHJlY3Vyc2UgPSBGYWxzZQogZHJ5cnVuID0gRmFsc2UKIG1ha2ViYWNrdXAgPSBUcnVlCisjIEEgc3BlY2lmaWVkIG5ld2xpbmUgdG8gYmUgdXNlZCBpbiB0aGUgb3V0cHV0IChzZXQgYnkgLS1uZXdsaW5lIG9wdGlvbikKIHNwZWNfbmV3bGluZSA9IE5vbmUKLSIiIkEgc3BlY2lmaWVkIG5ld2xpbmUgdG8gYmUgdXNlZCBpbiB0aGUgb3V0cHV0IChzZXQgYnkgLS1uZXdsaW5lIG9wdGlvbikiIiIKIAogCiBkZWYgdXNhZ2UobXNnPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weSBiL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKaW5kZXggYjI2NDljNC4uNjUyZDM5NCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQorKysgYi9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIHByaW50KCJjcmVhdGluZyBzbGF2ZSBkaXJlY3RvcnkiLCBzbGF2ZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIoc2xhdmUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJjYW4ndCBtYWtlIHNsYXZlIGRpcmVjdG9yeSIsIHNsYXZlLCAiOiIsIG1zZykKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weSBiL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKaW5kZXggNGI2N2MxNS4uODYxYzgzYyAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQorKysgYi9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CkBAIC0zOSwxMSArMzksMTEgQEAKICAgICBiYWNrdXAgPSBmaWxlbmFtZSArICJ+IgogICAgIHRyeToKICAgICAgICAgb3MudW5saW5rKGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKICAgICAgICAgZi53cml0ZShuZXd0ZXh0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy93aGljaC5weSBiL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkKaW5kZXggNGZjMzdhMC4uZGY1NGNlMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy93aGljaC5weQorKysgYi9Ub29scy9zY3JpcHRzL3doaWNoLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkaXIsIHByb2cpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGVuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIG5vdCBTX0lTUkVHKHN0W1NUX01PREVdKToKICAgICAgICAgICAgICAgICBtc2coZmlsZW5hbWUgKyAnOiBub3QgYSBkaXNrIGZpbGUnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkgYi9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDkyNTliNDQuLmM4NWJlYTUKLS0tIGEvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkKKysrIGIvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkKQEAgLTMwLDcgKzMwLDcgQEAKICAgICB3aXRoIHdpbnJlZy5DcmVhdGVLZXkoSEtDVSwgRU5WKSBhcyBrZXk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVudnBhdGggPSB3aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwgUEFUSClbMF0KLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBlbnZwYXRoID0gREVGQVVMVAogCiAgICAgICAgIHBhdGhzID0gW2VudnBhdGhdCmRpZmYgLS1naXQgYS9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weSBiL1Rvb2xzL3N0cmluZ2JlbmNoL3N0cmluZ2JlbmNoLnB5CmluZGV4IDE0MmIzY2EuLjVhYmMyNWEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3N0cmluZ2JlbmNoL3N0cmluZ2JlbmNoLnB5CisrKyBiL1Rvb2xzL3N0cmluZ2JlbmNoL3N0cmluZ2JlbmNoLnB5CkBAIC04MDgsNyArODA4LDcgQEAKIHByb2dyYW1tZXJzIHJlcG9ydCBzdWJzdGFudGlhbCBwcm9kdWN0aXZpdHkgZ2FpbnMgYW5kIGZlZWwgdGhlIGxhbmd1YWdlCiBlbmNvdXJhZ2VzIHRoZSBkZXZlbG9wbWVudCBvZiBoaWdoZXIgcXVhbGl0eSwgbW9yZSBtYWludGFpbmFibGUgY29kZS4KIAotUHl0aG9uIHJ1bnMgb24gV2luZG93cywgTGludXgvVW5peCwgTWFjIE9TIFgsIE9TLzIsIEFtaWdhLCBQYWxtCitQeXRob24gcnVucyBvbiBXaW5kb3dzLCBMaW51eC9Vbml4LCBNYWMgT1MgWCwgQW1pZ2EsIFBhbG0KIEhhbmRoZWxkcywgYW5kIE5va2lhIG1vYmlsZSBwaG9uZXMuIFB5dGhvbiBoYXMgYWxzbyBiZWVuIHBvcnRlZCB0byB0aGUKIEphdmEgYW5kIC5ORVQgdmlydHVhbCBtYWNoaW5lcy4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQppbmRleCBiYzNkMGNiLi4wOTQyNTA4IDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQorKysgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQpAQCAtMzcsNyArMzcsNyBAQAogVkVSU0lPTiA9ICIzLjIiCiAKICMgVGhlIFVuaWNvZGUgRGF0YWJhc2UKLVVOSURBVEFfVkVSU0lPTiA9ICI2LjEuMCIKK1VOSURBVEFfVkVSU0lPTiA9ICI2LjMuMCIKIFVOSUNPREVfREFUQSA9ICJVbmljb2RlRGF0YSVzLnR4dCIKIENPTVBPU0lUSU9OX0VYQ0xVU0lPTlMgPSAiQ29tcG9zaXRpb25FeGNsdXNpb25zJXMudHh0IgogRUFTVEFTSUFOX1dJRFRIID0gIkVhc3RBc2lhbldpZHRoJXMudHh0IgpAQCAtNjgsNyArNjgsNyBAQAogCiBCSURJUkVDVElPTkFMX05BTUVTID0gWyAiIiwgIkwiLCAiTFJFIiwgIkxSTyIsICJSIiwgIkFMIiwgIlJMRSIsICJSTE8iLAogICAgICJQREYiLCAiRU4iLCAiRVMiLCAiRVQiLCAiQU4iLCAiQ1MiLCAiTlNNIiwgIkJOIiwgIkIiLCAiUyIsICJXUyIsCi0gICAgIk9OIiBdCisgICAgIk9OIiwgIkxSSSIsICJSTEkiLCAiRlNJIiwgIlBESSIgXQogCiBFQVNUQVNJQU5XSURUSF9OQU1FUyA9IFsgIkYiLCAiSCIsICJXIiwgIk5hIiwgIkEiLCAiTiIgXQogCkBAIC01NTIsNyArNTUyLDcgQEAKICAgICBwcmludCgiLyogUmV0dXJucyAxIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBiaWRpcmVjdGlvbmFsIiwgZmlsZT1mcCkKICAgICBwcmludCgiICogdHlwZSAnV1MnLCAnQicgb3IgJ1MnIG9yIHRoZSBjYXRlZ29yeSAnWnMnLCAwIG90aGVyd2lzZS4iLCBmaWxlPWZwKQogICAgIHByaW50KCIgKi8iLCBmaWxlPWZwKQotICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQorICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UoY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQogICAgIHByaW50KCd7JywgZmlsZT1mcCkKICAgICBwcmludCgnICAgIHN3aXRjaCAoY2gpIHsnLCBmaWxlPWZwKQogCkBAIC01NzAsNyArNTcwLDcgQEAKICAgICBwcmludCgiICogcHJvcGVydHkgJ0JLJywgJ0NSJywgJ0xGJyBvciAnTkwnIG9yIGhhdmluZyBiaWRpcmVjdGlvbmFsIiwgZmlsZT1mcCkKICAgICBwcmludCgiICogdHlwZSAnQicsIDAgb3RoZXJ3aXNlLiIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqLyIsIGZpbGU9ZnApCi0gICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKHJlZ2lzdGVyIGNvbnN0IFB5X1VDUzQgY2gpJywgZmlsZT1mcCkKKyAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsoY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQogICAgIHByaW50KCd7JywgZmlsZT1mcCkKICAgICBwcmludCgnICAgIHN3aXRjaCAoY2gpIHsnLCBmaWxlPWZwKQogICAgIGZvciBjb2RlcG9pbnQgaW4gc29ydGVkKGxpbmVicmVha3MpOgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGNiMDNiNDkuLmZiMTQwNGYgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsNiArMSw2IEBACiAjISAvYmluL3NoCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgcHl0aG9uIDMuMy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBweXRob24gMy40LgogIwogIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy8+LgogIwpAQCAtNTgwLDggKzU4MCw4IEBACiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0ncHl0aG9uJwogUEFDS0FHRV9UQVJOQU1FPSdweXRob24nCi1QQUNLQUdFX1ZFUlNJT049JzMuMycKLVBBQ0tBR0VfU1RSSU5HPSdweXRob24gMy4zJworUEFDS0FHRV9WRVJTSU9OPSczLjQnCitQQUNLQUdFX1NUUklORz0ncHl0aG9uIDMuNCcKIFBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVncy5weXRob24ub3JnLycKIFBBQ0tBR0VfVVJMPScnCiAKQEAgLTYyNSw2ICs2MjUsOCBAQAogYWNfc3Vic3RfdmFycz0nTFRMSUJPQkpTCiBTUkNESVJTCiBUSFJFQURIRUFERVJTCitMSUJQTAorUFlfRU5BQkxFX1NIQVJFRAogRVhUX1NVRkZJWAogU09BQkkKIExJQkMKQEAgLTEzNjIsNyArMTM2NCw3IEBACiAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgogICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCiAgIGNhdCA8PF9BQ0VPRgotXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDMuMyB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBweXRob24gMy40IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTE0MjcsNyArMTQyOSw3IEBACiAKIGlmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCiAgIGNhc2UgJGFjX2luaXRfaGVscCBpbgotICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgcHl0aG9uIDMuMzoiOzsKKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAzLjQ6Ijs7CiAgICBlc2FjCiAgIGNhdCA8PFxfQUNFT0YKIApAQCAtMTQ1Myw3ICsxNDU1LDcgQEAKICAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQogICAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzPUFSQ0gKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGFyY2hpdGVjdHVyZXMgZm9yIHVuaXZlcnNhbCBidWlsZCAoIjMyLWJpdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICI2NC1iaXQiLCAiMy13YXkiLCAiaW50ZWwiIG9yICJhbGwiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiwgImludGVsLTMyIiwgb3IgImFsbCIpCiAgIC0td2l0aC1mcmFtZXdvcmstbmFtZT1GUkFNRVdPUksKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBhbiBhbHRlcm5hdGUgbmFtZSBvZiB0aGUgZnJhbWV3b3JrIGJ1aWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggLS1lbmFibGUtZnJhbWV3b3JrCkBAIC0xNTcwLDcgKzE1NzIsNyBAQAogdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLXB5dGhvbiBjb25maWd1cmUgMy4zCitweXRob24gY29uZmlndXJlIDMuNAogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5CiAKIENvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KQEAgLTI0MDksNyArMjQxMSw3IEBACiBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KIAotSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAzLjMsIHdoaWNoIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAzLjQsIHdoaWNoIHdhcwogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQApAQCAtMjk3OSw3ICsyOTgxLDcgQEAKIG12IGNvbmZkZWZzLmgubmV3IGNvbmZkZWZzLmgKIAogCi1WRVJTSU9OPTMuMworVkVSU0lPTj0zLjQKIAogIyBWZXJzaW9uIG51bWJlciBvZiBQeXRob24ncyBvd24gc2hhcmVkIGxpYnJhcnkgZmlsZS4KIApAQCAtMzAzNSw3ICszMDM3LDcgQEAKIAkJIyBMb2NhdGUgdGhlIGJlc3QgdXNhYmxlIFNESywgc2VlIE1hYy9SRUFETUUudHh0IGZvciBtb3JlCiAJCSMgaW5mb3JtYXRpb24KIAkJZW5hYmxldmFsPSJgL3Vzci9iaW4veGNvZGVidWlsZCAtdmVyc2lvbiAtc2RrIG1hY29zeCBQYXRoIDI+L2Rldi9udWxsYCIKLQkJaWYgdGVzdCAteiAiJHtlbmFibGV2YWx9IgorCQlpZiAhICggZWNobyAkZW5hYmxldmFsIHwgZ3JlcCAtRSAnXC5zZGsnIDE+L2Rldi9udWxsICkKIAkJdGhlbgogCQkJZW5hYmxldmFsPS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsKIAkJCWlmIHRlc3QgISAtZCAiJHtlbmFibGV2YWx9IgpAQCAtMzA3OCw2ICszMDgwLDcgQEAKIAogCiAKK0FSQ0hfUlVOXzMyQklUPSIiCiAKICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3ZSBwcmVmZXIgdG8gc2VsZWN0ICczMi1iaXQnIGlmIGF2YWlsYWJsZSwKICMgb3RoZXJ3aXNlIHVzZSAnaW50ZWwnCkBAIC0zMDg2LDcgKzMwODksNyBAQAogdGhlbgogCWlmIHRlc3QgLW4gIiR7VU5JVkVSU0FMU0RLfSIKIAl0aGVuCi0JCWlmIHRlc3QgLXogImAvdXNyL2Jpbi9maWxlICIke1VOSVZFUlNBTFNES30vdXNyL2xpYi9saWJTeXN0ZW0uZHlsaWIiIHwgZ3JlcCBwcGNgIgorCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAtTCAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKIAkJdGhlbgogCQkJVU5JVkVSU0FMX0FSQ0hTPSJpbnRlbCIKIAkJZmkKQEAgLTMxMDAsMTkgKzMxMDMsMTggQEAKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIHdhcyBnaXZlbi4KIGlmIHRlc3QgIiR7d2l0aF91bml2ZXJzYWxfYXJjaHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICB3aXRodmFsPSR3aXRoX3VuaXZlcnNhbF9hcmNoczsKLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGh2YWwiID4mNQotJGFzX2VjaG8gIiR3aXRodmFsIiA+JjY7IH0KIAlVTklWRVJTQUxfQVJDSFM9IiR3aXRodmFsIgogCi1lbHNlCi0KLSAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY1Ci0kYXNfZWNobyAiJHtVTklWRVJTQUxfQVJDSFN9IiA+JjY7IH0KLQogZmkKIAotCi0KK2lmIHRlc3QgLW4gIiR7VU5JVkVSU0FMU0RLfSIKK3RoZW4KKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtVTklWRVJTQUxfQVJDSFN9IiA+JjUKKyRhc19lY2hvICIke1VOSVZFUlNBTF9BUkNIU30iID4mNjsgfQorZWxzZQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKIAogCiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWZyYW1ld29yay1uYW1lIHdhcyBnaXZlbi4KQEAgLTU1ODQsNiArNTU4Niw3IEBACiAKICMgT3RoZXIgcGxhdGZvcm1zIGZvbGxvdwogaWYgdGVzdCAkZW5hYmxlX3NoYXJlZCA9ICJ5ZXMiOyB0aGVuCisgIFBZX0VOQUJMRV9TSEFSRUQ9MQogCiAkYXNfZWNobyAiI2RlZmluZSBQeV9FTkFCTEVfU0hBUkVEIDEiID4+Y29uZmRlZnMuaAogCkBAIC01NjQxLDYgKzU2NDQsNyBAQAogCiAgIGVzYWMKIGVsc2UgIyBzaGFyZWQgaXMgZGlzYWJsZWQKKyAgUFlfRU5BQkxFX1NIQVJFRD0wCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQogICAgICAgICAgIEJMRExJQlJBUlk9JyQoTElCUkFSWSknCkBAIC02MzgxLDYgKzYzODUsNDkgQEAKICAgICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1Xbm8tdW51c2VkLXJlc3VsdCIKICAgICBmaQogCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50Li4uICIgPiY2OyB9CisgICAgIGFjX3NhdmVfY2M9IiRDQyIKKyAgICAgQ0M9IiRDQyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIGlmICR7YWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9eWVzCisKK2Vsc2UKKworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz1ubworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICBDQz0iJGFjX3NhdmVfY2MiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nIiA+JjY7IH0KKworICAgIGlmIHRlc3QgJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nID0geWVzCisgICAgdGhlbgorICAgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgZmkKKwogICAgICMgaWYgdXNpbmcgZ2NjIG9uIGFscGhhLCB1c2UgLW1pZWVlIHRvIGdldCAobmVhcikgZnVsbCBJRUVFIDc1NAogICAgICMgc3VwcG9ydC4gIFdpdGhvdXQgdGhpcywgdHJlYXRtZW50IG9mIHN1Ym5vcm1hbHMgZG9lc24ndCBmb2xsb3cKICAgICAjIHRoZSBzdGFuZGFyZC4KQEAgLTYzOTQsMTEzICs2NDQxLDEyNCBAQAogCVNDT19TViopCiAJICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1tNDg2IC1EU0NPNSIKIAkgICAgOzsKLQkjIGlzIHRoZXJlIGFueSBvdGhlciBjb21waWxlciBvbiBEYXJ3aW4gYmVzaWRlcyBnY2M/Ci0JRGFyd2luKikKLQkgICAgIyAtV25vLWxvbmctZG91YmxlLCAtbm8tY3BwLXByZWNvbXAsIGFuZCAtbW5vLWZ1c2VkLW1hZGQKLQkgICAgIyB1c2VkIHRvIGJlIGhlcmUsIGJ1dCBub24tQXBwbGUgZ2NjIGRvZXNuJ3QgYWNjZXB0IHRoZW0uCi0gICAgICAgICAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKLQkgICAgdGhlbgotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkIiA+JjUKKworICAgICMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KKyAgICBEYXJ3aW4qKQorICAgICAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAorICAgICAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KKyAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQuLi4gIiA+JjY7IH0KLQkJY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgotCQkqL01hY09TWDEwLjR1LnNkaykKLQkJCSMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQotCQkJIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5Ci0JCQkjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42Ci0JCQlDQz1nY2MtNC4wCi0JCQlDUFA9Y3BwLTQuMAotCQkJOzsKLQkJZXNhYwotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyAgICAgICAgICAgIGNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KKyAgICAgICAgICAgICovTWFjT1NYMTAuNHUuc2RrKQorICAgICAgICAgICAgICAgICMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQorICAgICAgICAgICAgICAgICMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKKyAgICAgICAgICAgICAgICBDQz1nY2MtNC4wCisgICAgICAgICAgICAgICAgQ1BQPWNwcC00LjAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiAkYXNfZWNobyAiJENDIiA+JjY7IH0KLQkgICAgZmkKKyAgICAgICAgZmkKIAorICAgICAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjYXNlICIkVU5JVkVSU0FMX0FSQ0hTIiBpbgorICAgICAgICAgICAgMzItYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICA2NC1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgYWxsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgaW50ZWwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgaW50ZWwtMzIpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgMy13YXkpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXkiICIkTElORU5PIiA1CisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYwogCi0JICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCi0JICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgICAgICBDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgorICAgICAgICAgICAgTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgorICAgICAgICAgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImFsbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgIyBDYWxjdWxhdGUgYW4gYXBwcm9wcmlhdGUgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQ6CisgICAgICAgICMgVGhlIGRlcGxveW1lbnQgdGFyZ2V0IHZhbHVlIGlzIHVzZWQgZXhwbGljaXRseSB0byBlbmFibGUgY2VydGFpbgorICAgICAgICAjIGZlYXR1cmVzIGFyZSBlbmFibGVkIChzdWNoIGFzIGJ1aWx0aW4gbGliZWRpdCBzdXBwb3J0IGZvciByZWFkbGluZSkKKyAgICAgICAgIyB0aHJvdWdoIHRoZSB1c2Ugb2YgQXBwbGUncyBBdmFpbGFiaWxpeSBNYWNyb3MgYW5kIGlzIHVzZWQgYXMgYQorICAgICAgICAjIGNvbXBvbmVudCBvZiB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IGRpc3R1dGlscy5nZXRfcGxhdGZvcm0oKS4KKyAgICAgICAgIworICAgICAgICAjIFVzZSB0aGUgdmFsdWUgZnJvbToKKyAgICAgICAgIyAxLiB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNwZWNpZmllZAorICAgICAgICAjIDIuIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24gb2YgdGhlIGJ1aWxkIG1hY2hpbmUgaWYgPj0gMTAuNgorICAgICAgICAjIDMuIElmIHJ1bm5pbmcgb24gT1MgWCAxMC4zIHRocm91Z2ggMTAuNSwgdXNlIHRoZSBsZWdhY3kgdGVzdHMKKyAgICAgICAgIyAgICAgICBiZWxvdyB0byBwaWNrIGVpdGhlciAxMC4zLCAxMC40LCBvciAxMC41IGFzIHRoZSB0YXJnZXQuCisgICAgICAgICMgNC4gSWYgd2UgYXJlIHJ1bm5pbmcgb24gT1MgWCAxMC4yIG9yIGVhcmxpZXIsIGdvb2QgbHVjayEKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCB0byB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHRvIHVzZS4uLiAiID4mNjsgfQorICAgICAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bMC05XSpcKS4qL1wxLydgCisgICAgICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjdXJfdGFyZ2V0PTEwLjMKKyAgICAgICAgICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAgICAgYWxsfDMtd2F5fGludGVsfDY0LWJpdCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBjb25maWd1cmF0aW9ucyB3ZXJlIGZpcnN0IHN1cHBvcnRlZCBpbiAxMC41CisgICAgICAgICAgICAgICAgICAgIGN1cl90YXJnZXQ9JzEwLjUnCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAjIDEwLjQgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRvIHN1cHBvcnQgSW50ZWwgYXJjaHMKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0iMTAuNCIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0ke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0ke2N1cl90YXJnZXR9fQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaXMgc2V0IGluIHRoZQorICAgICAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCisgICAgICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgorICAgICAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCisgICAgICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCisgICAgICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKKyAgICAgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIgPiY1CiskYXNfZWNobyAiJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIgPiY2OyB9CiAKLQkJIGVsc2UKLQkgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5IiAiJExJTkVOTyIgNQotCi0JCSBmaQotCi0KLQkJQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKLQkJdGhlbgotCQkJQ0ZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCUNQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgotCQlmaQotCSAgICBmaQotCi0JICAgICMgQ2FsY3VsYXRlIHRoZSByaWdodCBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZC4KLQkgICAgIwotCSAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bMC05XSpcKS4qL1wxLydgCi0JICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCi0JICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgotCSAgICB0aGVuCi0JCSAgICBjdXJfdGFyZ2V0PTEwLjMKLQkJICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfTsgdGhlbgotCQkJICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiYWxsIjsgdGhlbgotCQkJCSAgICAjIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBsYXRmb3JtIGZvciBhCi0JCQkJICAgICMgNC13YXkgdW5pdmVyc2FsIGJ1aWxkIGlzIE9TWCAxMC41LAotCQkJCSAgICAjIHRoYXQncyB0aGUgZmlyc3QgT1MgcmVsZWFzZSB3aGVyZQotCQkJCSAgICAjIDQtd2F5IGJ1aWxkcyBtYWtlIHNlbnNlLgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjMtd2F5IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gImludGVsIjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjY0LWJpdCI7IHRoZW4KLQkJCQkgICAgY3VyX3RhcmdldD0nMTAuNScKLQkJCSAgICBmaQotCQkgICAgZWxzZQotCQkJICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiOyB0aGVuCi0JCQkJICAgICMgT24gSW50ZWwgbWFjcyBkZWZhdWx0IHRvIGEgZGVwbG95bWVudAotCQkJCSAgICAjIHRhcmdldCBvZiAxMC40LCB0aGF0J3MgdGhlIGZpcnN0IE9TWAotCQkJCSAgICAjIHJlbGVhc2Ugd2l0aCBJbnRlbCBzdXBwb3J0LgotCQkJCSAgICBjdXJfdGFyZ2V0PSIxMC40IgotCQkJICAgIGZpCi0JCSAgICBmaQotCSAgICBmaQotCSAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19Ci0KLQkgICAgIyBNYWtlIHN1cmUgdGhhdCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaXMgc2V0IGluIHRoZQotCSAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCi0JICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgotCSAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCi0JICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCi0JICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLQkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwotCi0JICAgIDs7CisgICAgICAgICMgZW5kIG9mIERhcndpbiogdGVzdHMKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIApAQCAtNjUyNyw0NCArNjU4NSw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZ2NjIHN1cHBvcnRzIFBhcnNlVHVwbGUgX19mb3JtYXRfXy4uLiAiID4mNjsgfQotICBzYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XZm9ybWF0IgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSAgICB2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTsKLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFIDEiID4+Y29uZmRlZnMuaAotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotZWxzZQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSRzYXZlX0NGTEFHUwotZmkKLQogIyBPbiBzb21lIGNvbXBpbGVycywgcHRocmVhZHMgYXJlIGF2YWlsYWJsZSB3aXRob3V0IGZ1cnRoZXIgb3B0aW9ucwogIyAoZS5nLiBNYWNPUyBYKS4gT24gc29tZSBvZiB0aGVzZSBzeXN0ZW1zLCB0aGUgY29tcGlsZXIgd2lsbCBub3QKICMgY29tcGxhaW4gaWYgdW5hY2NlcHRlZCBvcHRpb25zIGFyZSBwYXNzZWQgKGUuZy4gZ2NjIG9uIE1hYyBPUyBYKS4KQEAgLTcyMjksNyArNzI0OSw3IEBACiAKIAogIyBPbiBMaW51eCwgY2FuLmggYW5kIGNhbi9yYXcuaCByZXF1aXJlIHN5cy9zb2NrZXQuaAotZm9yIGFjX2hlYWRlciBpbiBsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmgKK2ZvciBhY19oZWFkZXIgaW4gbGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oIGxpbnV4L2Nhbi9iY20uaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKQEAgLTgyNzYsNyArODI5Niw2IEBACiBlc2FjCiAKIAotQVJDSF9SVU5fMzJCSVQ9IiIKIAogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KICAgRGFyd2luL1swMTU2N11cLi4qKQpAQCAtODM0OCwxNCArODM2NywxMiBAQAogICAgIAkJOzsKICAgICAJZXNhYwogCi0JI0FSQ0hfUlVOXzMyQklUPSJ0cnVlIgogICAgIGZpCiAKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUIiAtbFN5c3RlbSAtbFN5c3RlbVN0dWJzIC1hcmNoX29ubHkgJHtNQUNPU1hfREVGQVVMVF9BUkNIfSIKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtaW5zdGFsbF9uYW1lICQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCcgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkKFZFUlNJT04pIC1jdXJyZW50X3ZlcnNpb24gJChWRVJTSU9OKSc7OwogZXNhYwotCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLWVuYWJsZS1mcmFtZXdvcmsiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0tZW5hYmxlLWZyYW1ld29yay4uLiAiID4mNjsgfQogaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCkBAIC04NDgzLDkgKzg1MDAsNiBAQAogCiAJCWlmIHRlc3QgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9ICc+JyAxMC4yCiAJCXRoZW4KLQkJCWlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCQkJTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJZmkKIAkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCiAJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEIgpAQCAtODYxMyw2ICs4NjI3LDEyIEBACiAJIyAtdSBsaWJzeXNfcyBwdWxscyBpbiBhbGwgc3ltYm9scyBpbiBsaWJzeXMKIAlEYXJ3aW4vKikKIAkJTElOS0ZPUlNIQVJFRD0iJGV4dHJhX3VuZGVmcyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorCisJCSMgSXNzdWUgIzE4MDc1OiB0aGUgZGVmYXVsdCBtYXhpbXVtIHN0YWNrIHNpemUgKDhNQnl0ZXMpIGlzIHRvbworCQkjIHNtYWxsIGZvciB0aGUgZGVmYXVsdCByZWN1cnNpb24gbGltaXQuIEluY3JlYXNlIHRoZSBzdGFjayBzaXplCisJCSMgdG8gZW5zdXJlIHRoYXQgdGVzdHMgZG9uJ3QgY3Jhc2gKKwkJTElOS0ZPUlNIQVJFRD0iLVdsLC1zdGFja19zaXplLDEwMDAwMDAgJExJTktGT1JTSEFSRUQiCisKIAkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCiAJCXRoZW4KIAkJCUxJTktGT1JTSEFSRUQ9IiRMSU5LRk9SU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwpAQCAtMTAzMDgsNyArMTAzMjgsNyBAQAogCiAjIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKIGZvciBhY19mdW5jIGluIGFsYXJtIGFjY2VwdDQgc2V0aXRpbWVyIGdldGl0aW1lciBiaW5kX3RleHRkb21haW5fY29kZXNldCBjaG93biBcCi0gY2xvY2sgY29uZnN0ciBjdGVybWlkIGV4ZWN2IGZhY2Nlc3NhdCBmY2htb2QgZmNobW9kYXQgZmNob3duIGZjaG93bmF0IFwKKyBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZHVwMyBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCiAgZmV4ZWN2ZSBmZG9wZW5kaXIgZm9yayBmcGF0aGNvbmYgZnN0YXRhdCBmdGltZSBmdHJ1bmNhdGUgZnV0aW1lc2F0IFwKICBmdXRpbWVucyBmdXRpbWVzIGdhaV9zdHJlcnJvciBcCiAgZ2V0Z3JvdXBsaXN0IGdldGdyb3VwcyBnZXRsb2dpbiBnZXRsb2FkYXZnIGdldHBlZXJuYW1lIGdldHBnaWQgZ2V0cGlkIFwKQEAgLTEwMzI4LDcgKzEwMzQ4LDcgQEAKICBzaWd0aW1lZHdhaXQgc2lnd2FpdCBzaWd3YWl0aW5mbyBzbnByaW50ZiBzdHJmdGltZSBzdHJsY3B5IHN5bWxpbmthdCBzeW5jIFwKICBzeXNjb25mIHRjZ2V0cGdycCB0Y3NldHBncnAgdGVtcG5hbSB0aW1lZ20gdGltZXMgdG1wZmlsZSB0bXBuYW0gdG1wbmFtX3IgXAogIHRydW5jYXRlIHVuYW1lIHVubGlua2F0IHVuc2V0ZW52IHV0aW1lbnNhdCB1dGltZXMgd2FpdGlkIHdhaXRwaWQgd2FpdDMgd2FpdDQgXAotIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3cml0ZXYgX2dldHB0eQorIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3bWVtY21wIHdyaXRldiBfZ2V0cHR5CiBkbyA6CiAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgpAQCAtMTA1ODEsNiArMTA2MDEsMzUgQEAKIAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHJsaW1pdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHJsaW1pdC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKworaW50CittYWluICgpCit7Cit2b2lkICp4PXBybGltaXQKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BSTElNSVQgMSIgPj5jb25mZGVmcy5oCisKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKICMgT24gc29tZSBzeXN0ZW1zIChlZy4gRnJlZUJTRCA1KSwgd2Ugd291bGQgZmluZCBhIGRlZmluaXRpb24gb2YgdGhlCiAjIGZ1bmN0aW9ucyBjdGVybWlkX3IsIHNldGdyb3VwcyBpbiB0aGUgbGlicmFyeSwgYnV0IG5vIHByb3RvdHlwZQogIyAoZS5nLiBiZWNhdXNlIHdlIHVzZSBfWE9QRU5fU09VUkNFKS4gU2VlIHdoZXRoZXIgd2UgY2FuIHRha2UgdGhlaXIKQEAgLTExNDEyLDE5ICsxMTQ2MSw2IEBACiAKIGZpCiAKLWFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGN3ZCIgImFjX2N2X2Z1bmNfZ2V0Y3dkIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGN3ZCIgPSB4eWVzOyB0aGVuIDoKLSAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRDV0QgMSIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgZ2V0Y3dkLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBnZXRjd2QuJGFjX29iamV4dCIKLSA7OwotZXNhYwotCi1maQotCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJkdXAiICJhY19jdl9mdW5jX3N0cmR1cCIKIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJkdXAiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSRFVQIDEiID4+Y29uZmRlZnMuaApAQCAtMTM3NzgsNiArMTM4MTQsMTAgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTERWRVJTSU9OIiA+JjUKICRhc19lY2hvICIkTERWRVJTSU9OIiA+JjY7IH0KIAorCitMSUJQTD0iJHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCisKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJpZ2h0IHNoaWZ0IGV4dGVuZHMgdGhlIHNpZ24gYml0IiA+JjUKQEAgLTE1MTg2LDcgKzE1MjI2LDcgQEAKIGZpCiAKICMgZ2VuZXJhdGUgb3V0cHV0IGZpbGVzCi1hY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZyBNaXNjL3B5dGhvbi5wYyBNaXNjL3B5dGhvbi1jb25maWcuc2giCiAKIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNb2R1bGVzL2xkX3NvX2FpeCIKIApAQCAtMTU2OTcsNyArMTU3MzcsNyBAQAogIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCiAjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgogYWNfbG9nPSIKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgcHl0aG9uICRhc19tZSAzLjMsIHdoaWNoIHdhcworVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDMuNCwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCkBAIC0xNTc1OSw3ICsxNTc5OSw3IEBACiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGFjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCiBhY19jc192ZXJzaW9uPSJcXAotcHl0aG9uIGNvbmZpZy5zdGF0dXMgMy4zCitweXRob24gY29uZmlnLnN0YXR1cyAzLjQKIGNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSwKICAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCiAKQEAgLTE1ODkwLDYgKzE1OTMwLDcgQEAKICAgICAiTWFrZWZpbGUucHJlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlLnByZSIgOzsKICAgICAiTW9kdWxlcy9TZXR1cC5jb25maWciKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTW9kdWxlcy9TZXR1cC5jb25maWciIDs7CiAgICAgIk1pc2MvcHl0aG9uLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1pc2MvcHl0aG9uLnBjIiA7OworICAgICJNaXNjL3B5dGhvbi1jb25maWcuc2giKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWlzYy9weXRob24tY29uZmlnLnNoIiA7OwogICAgICJNb2R1bGVzL2xkX3NvX2FpeCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNb2R1bGVzL2xkX3NvX2FpeCIgOzsKIAogICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCAzMDIzZGM2Li5kODE0NTgxIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0zLDcgKzMsNyBAQAogZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICMgU2V0IFZFUlNJT04gc28gd2Ugb25seSBuZWVkIHRvIGVkaXQgaW4gb25lIHBsYWNlIChpLmUuLCBoZXJlKQotbTRfZGVmaW5lKFBZVEhPTl9WRVJTSU9OLCAzLjMpCittNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDMuNCkKIAogQUNfUFJFUkVRKDIuNjUpCiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQkjIExvY2F0ZSB0aGUgYmVzdCB1c2FibGUgU0RLLCBzZWUgTWFjL1JFQURNRS50eHQgZm9yIG1vcmUKIAkJIyBpbmZvcm1hdGlvbgogCQllbmFibGV2YWw9ImAvdXNyL2Jpbi94Y29kZWJ1aWxkIC12ZXJzaW9uIC1zZGsgbWFjb3N4IFBhdGggMj4vZGV2L251bGxgIgotCQlpZiB0ZXN0IC16ICIke2VuYWJsZXZhbH0iCisJCWlmICEgKCBlY2hvICRlbmFibGV2YWwgfCBncmVwIC1FICdcLnNkaycgMT4vZGV2L251bGwgKQogCQl0aGVuCiAJCQllbmFibGV2YWw9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkawogCQkJaWYgdGVzdCAhIC1kICIke2VuYWJsZXZhbH0iCkBAIC0xODksNiArMTg5LDcgQEAKIEFDX1NVQlNUKFVOSVZFUlNBTFNESykKIAogQUNfU1VCU1QoQVJDSF9SVU5fMzJCSVQpCitBUkNIX1JVTl8zMkJJVD0iIgogCiAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2UgcHJlZmVyIHRvIHNlbGVjdCAnMzItYml0JyBpZiBhdmFpbGFibGUsCiAjIG90aGVyd2lzZSB1c2UgJ2ludGVsJwpAQCAtMTk3LDcgKzE5OCw3IEBACiB0aGVuCiAJaWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgogCXRoZW4KLQkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCisJCWlmIHRlc3QgLXogImAvdXNyL2Jpbi9maWxlIC1MICIke1VOSVZFUlNBTFNES30vdXNyL2xpYi9saWJTeXN0ZW0uZHlsaWIiIHwgZ3JlcCBwcGNgIgogCQl0aGVuCiAJCQlVTklWRVJTQUxfQVJDSFM9ImludGVsIgogCQlmaQpAQCAtMjA3LDE2ICsyMDgsMTcgQEAKIEFDX1NVQlNUKExJUE9fMzJCSVRfRkxBR1MpCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC11bml2ZXJzYWwtYXJjaHMpCiBBQ19BUkdfV0lUSCh1bml2ZXJzYWwtYXJjaHMsCi0gICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC11bml2ZXJzYWwtYXJjaHM9QVJDSF0sIFtzZWxlY3QgYXJjaGl0ZWN0dXJlcyBmb3IgdW5pdmVyc2FsIGJ1aWxkICgiMzItYml0IiwgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIgb3IgImFsbCIpXSksCisgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC11bml2ZXJzYWwtYXJjaHM9QVJDSF0sIFtzZWxlY3QgYXJjaGl0ZWN0dXJlcyBmb3IgdW5pdmVyc2FsIGJ1aWxkICgiMzItYml0IiwgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIsICJpbnRlbC0zMiIsIG9yICJhbGwiKV0pLAogWwotCUFDX01TR19SRVNVTFQoJHdpdGh2YWwpCiAJVU5JVkVSU0FMX0FSQ0hTPSIkd2l0aHZhbCIKIF0sCi1bCi0gCUFDX01TR19SRVNVTFQoJHtVTklWRVJTQUxfQVJDSFN9KQotXSkKLQotCitbXSkKK2lmIHRlc3QgLW4gIiR7VU5JVkVSU0FMU0RLfSIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKCR7VU5JVkVSU0FMX0FSQ0hTfSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKG5vKQorZmkKIAogQUNfQVJHX1dJVEgoZnJhbWV3b3JrLW5hbWUsCiAgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLXSwKQEAgLTkxNyw2ICs5MTksNyBAQAogCiAjIE90aGVyIHBsYXRmb3JtcyBmb2xsb3cKIGlmIHRlc3QgJGVuYWJsZV9zaGFyZWQgPSAieWVzIjsgdGhlbgorICBQWV9FTkFCTEVfU0hBUkVEPTEKICAgQUNfREVGSU5FKFB5X0VOQUJMRV9TSEFSRUQsIDEsIFtEZWZpbmVkIGlmIFB5dGhvbiBpcyBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5Ll0pCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQpAQCAtOTcyLDYgKzk3NSw3IEBACiAKICAgZXNhYwogZWxzZSAjIHNoYXJlZCBpcyBkaXNhYmxlZAorICBQWV9FTkFCTEVfU0hBUkVEPTAKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCiAgICAgICAgICAgQkxETElCUkFSWT0nJChMSUJSQVJZKScKQEAgLTExODIsNiArMTE4NiwyOCBAQAogICAgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLVduby11bnVzZWQtcmVzdWx0IgogICAgIGZpCiAKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50KQorICAgICBhY19zYXZlX2NjPSIkQ0MiCisgICAgIENDPSIkQ0MgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcsCisgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICBbCisJICAgQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbXV0pCisJIF0sWworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz15ZXMKKwkgXSxbCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPW5vCisJIF0pKQorICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgQ0M9IiRhY19zYXZlX2NjIgorICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nKQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcgPSB5ZXMKKyAgICB0aGVuCisgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICBmaQorCiAgICAgIyBpZiB1c2luZyBnY2Mgb24gYWxwaGEsIHVzZSAtbWllZWUgdG8gZ2V0IChuZWFyKSBmdWxsIElFRUUgNzU0CiAgICAgIyBzdXBwb3J0LiAgV2l0aG91dCB0aGlzLCB0cmVhdG1lbnQgb2Ygc3Vibm9ybWFscyBkb2Vzbid0IGZvbGxvdwogICAgICMgdGhlIHN0YW5kYXJkLgpAQCAtMTE5NSwxMTEgKzEyMjEsMTIwIEBACiAJU0NPX1NWKikKIAkgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLW00ODYgLURTQ081IgogCSAgICA7OwotCSMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KLQlEYXJ3aW4qKQotCSAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAotCSAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KLSAgICAgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYwotCSAgICB0aGVuCi0JCUFDX01TR19DSEVDS0lORyh3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCkKLQkJY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgotCQkqL01hY09TWDEwLjR1LnNkaykKLQkJCSMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZSAKLQkJCSMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQotCQkJIyBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiBidWlsZGluZyBvbiBPU1ggMTAuNgotCQkJQ0M9Z2NjLTQuMAotCQkJQ1BQPWNwcC00LjAKLQkJCTs7Ci0JCWVzYWMKLQkJQUNfTVNHX1JFU1VMVCgkQ0MpCi0JICAgIGZpCiAKKyAgICAjIGlzIHRoZXJlIGFueSBvdGhlciBjb21waWxlciBvbiBEYXJ3aW4gYmVzaWRlcyBnY2M/CisgICAgRGFyd2luKikKKyAgICAgICAgIyAtV25vLWxvbmctZG91YmxlLCAtbm8tY3BwLXByZWNvbXAsIGFuZCAtbW5vLWZ1c2VkLW1hZGQKKyAgICAgICAgIyB1c2VkIHRvIGJlIGhlcmUsIGJ1dCBub24tQXBwbGUgZ2NjIGRvZXNuJ3QgYWNjZXB0IHRoZW0uCisgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYworICAgICAgICB0aGVuCisgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQpCisgICAgICAgICAgICBjYXNlICIke1VOSVZFUlNBTFNES30iIGluCisgICAgICAgICAgICAqL01hY09TWDEwLjR1LnNkaykKKyAgICAgICAgICAgICAgICAjIEJ1aWxkIHVzaW5nIDEwLjQgU0RLLCBmb3JjZSB1c2FnZSBvZiBnY2Mgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAjIGNvbXBpbGVyIGlzIGdjYywgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZ2V0IHZlcnkKKyAgICAgICAgICAgICAgICAjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42CisgICAgICAgICAgICAgICAgQ0M9Z2NjLTQuMAorICAgICAgICAgICAgICAgIENQUD1jcHAtNC4wCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoJENDKQorICAgICAgICBmaQogCi0JICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCi0JICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAzMi1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDY0LWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBhbGwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbC0zMikKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAzLXdheSkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXldKQorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKKyAgICAgICAgICAgIExERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKKyAgICAgICAgICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCisgICAgICAgICAgICBmaQorICAgICAgICBmaQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJpbnRlbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgICMgQ2FsY3VsYXRlIGFuIGFwcHJvcHJpYXRlIGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkOgorICAgICAgICAjIFRoZSBkZXBsb3ltZW50IHRhcmdldCB2YWx1ZSBpcyB1c2VkIGV4cGxpY2l0bHkgdG8gZW5hYmxlIGNlcnRhaW4KKyAgICAgICAgIyBmZWF0dXJlcyBhcmUgZW5hYmxlZCAoc3VjaCBhcyBidWlsdGluIGxpYmVkaXQgc3VwcG9ydCBmb3IgcmVhZGxpbmUpCisgICAgICAgICMgdGhyb3VnaCB0aGUgdXNlIG9mIEFwcGxlJ3MgQXZhaWxhYmlsaXkgTWFjcm9zIGFuZCBpcyB1c2VkIGFzIGEKKyAgICAgICAgIyBjb21wb25lbnQgb2YgdGhlIHN0cmluZyByZXR1cm5lZCBieSBkaXN0dXRpbHMuZ2V0X3BsYXRmb3JtKCkuCisgICAgICAgICMKKyAgICAgICAgIyBVc2UgdGhlIHZhbHVlIGZyb206CisgICAgICAgICMgMS4gdGhlIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzcGVjaWZpZWQKKyAgICAgICAgIyAyLiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBtYWNoaW5lIGlmID49IDEwLjYKKyAgICAgICAgIyAzLiBJZiBydW5uaW5nIG9uIE9TIFggMTAuMyB0aHJvdWdoIDEwLjUsIHVzZSB0aGUgbGVnYWN5IHRlc3RzCisgICAgICAgICMgICAgICAgYmVsb3cgdG8gcGljayBlaXRoZXIgMTAuMywgMTAuNCwgb3IgMTAuNSBhcyB0aGUgdGFyZ2V0LgorICAgICAgICAjIDQuIElmIHdlIGFyZSBydW5uaW5nIG9uIE9TIFggMTAuMiBvciBlYXJsaWVyLCBnb29kIGx1Y2shCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHRvIHVzZSkKKyAgICAgICAgY3VyX3RhcmdldD1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBzZWQgJ3MvXCgxMFwuW1swLTldXSpcKS4qL1wxLydgCisgICAgICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjdXJfdGFyZ2V0PTEwLjMKKyAgICAgICAgICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAgICAgYWxsfDMtd2F5fGludGVsfDY0LWJpdCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBjb25maWd1cmF0aW9ucyB3ZXJlIGZpcnN0IHN1cHBvcnRlZCBpbiAxMC41CisgICAgICAgICAgICAgICAgICAgIGN1cl90YXJnZXQ9JzEwLjUnCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAjIDEwLjQgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRvIHN1cHBvcnQgSW50ZWwgYXJjaHMKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0iMTAuNCIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0ke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0ke2N1cl90YXJnZXR9fQogCi0JCSBlbHNlCi0JICAgICAgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXldKQorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCisgICAgICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKKyAgICAgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCisgICAgICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKKyAgICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCisgICAgICAgIEFDX01TR19SRVNVTFQoJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCkKIAotCQkgZmkKLQotCi0JCUNGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCWlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCi0JCXRoZW4KLQkJCUNGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCQlMREZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKLQkJZmkKLQkgICAgZmkKLQotCSAgICAjIENhbGN1bGF0ZSB0aGUgcmlnaHQgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQuCi0JICAgICMKLQkgICAgY3VyX3RhcmdldD1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBzZWQgJ3MvXCgxMFwuW1swLTldXSpcKS4qL1wxLydgCi0JICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCi0JICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgotCSAgICB0aGVuCi0JCSAgICBjdXJfdGFyZ2V0PTEwLjMKLQkJICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfTsgdGhlbgotCQkJICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiYWxsIjsgdGhlbgotCQkJCSAgICAjIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBsYXRmb3JtIGZvciBhIAotCQkJCSAgICAjIDQtd2F5IHVuaXZlcnNhbCBidWlsZCBpcyBPU1ggMTAuNSwgCi0JCQkJICAgICMgdGhhdCdzIHRoZSBmaXJzdCBPUyByZWxlYXNlIHdoZXJlIAotCQkJCSAgICAjIDQtd2F5IGJ1aWxkcyBtYWtlIHNlbnNlLgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjMtd2F5IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gImludGVsIjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjY0LWJpdCI7IHRoZW4KLQkJCQkgICAgY3VyX3RhcmdldD0nMTAuNScKLQkJCSAgICBmaQotCQkgICAgZWxzZQotCQkJICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiOyB0aGVuCi0JCQkJICAgICMgT24gSW50ZWwgbWFjcyBkZWZhdWx0IHRvIGEgZGVwbG95bWVudAotCQkJCSAgICAjIHRhcmdldCBvZiAxMC40LCB0aGF0J3MgdGhlIGZpcnN0IE9TWAotCQkJCSAgICAjIHJlbGVhc2Ugd2l0aCBJbnRlbCBzdXBwb3J0LgotCQkJCSAgICBjdXJfdGFyZ2V0PSIxMC40IgotCQkJICAgIGZpCi0JCSAgICBmaQotCSAgICBmaQotCSAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19Ci0JICAgIAotCSAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlIAotCSAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCi0JICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgotCSAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCi0JICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCi0JICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLQkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwotCi0JICAgIDs7CisgICAgICAgICMgZW5kIG9mIERhcndpbiogdGVzdHMKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIApAQCAtMTMyNiwyNCArMTM2MSw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi10aGVuCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18pCi0gIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQiCi0gIEFDX0NPTVBJTEVfSUZFTFNFKFsKLSAgICBBQ19MQU5HX1BST0dSQU0oW1t2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTtdXSwgW1tdXSkKLSAgXSxbCi0gICAgQUNfREVGSU5FKEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFLCAxLAotICAgICAgW0RlZmluZSBpZiBHQ0Mgc3VwcG9ydHMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpKSldKQotICAgIEFDX01TR19SRVNVTFQoeWVzKQotICBdLFsKLSAgICBBQ19NU0dfUkVTVUxUKG5vKQotICBdKQotICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCi1maQotCiAjIE9uIHNvbWUgY29tcGlsZXJzLCBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgZnVydGhlciBvcHRpb25zCiAjIChlLmcuIE1hY09TIFgpLiBPbiBzb21lIG9mIHRoZXNlIHN5c3RlbXMsIHRoZSBjb21waWxlciB3aWxsIG5vdAogIyBjb21wbGFpbiBpZiB1bmFjY2VwdGVkIG9wdGlvbnMgYXJlIHBhc3NlZCAoZS5nLiBnY2Mgb24gTWFjIE9TIFgpLgpAQCAtMTU2Niw3ICsxNTgzLDcgQEAKIF0pCiAKICMgT24gTGludXgsIGNhbi5oIGFuZCBjYW4vcmF3LmggcmVxdWlyZSBzeXMvc29ja2V0LmgKLUFDX0NIRUNLX0hFQURFUlMobGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oLCwsWworQUNfQ0hFQ0tfSEVBREVSUyhsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmggbGludXgvY2FuL2JjbS5oLCwsWwogI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC0xNzk4LDcgKzE4MTUsNiBAQAogZXNhYwogCiAKLUFSQ0hfUlVOXzMyQklUPSIiCiBBQ19TVUJTVChMSUJUT09MX0NSVUZUKQogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KICAgRGFyd2luL0A8OkAwMTU2N0A6PkBcLi4qKSAKQEAgLTE4NTUsMTQgKzE4NzEsMTIgQEAKICAgICAJCTs7CiAgICAgCWVzYWMKIAotCSNBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKICAgICBmaQogCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCIgLWxTeXN0ZW0gLWxTeXN0ZW1TdHVicyAtYXJjaF9vbmx5ICR7TUFDT1NYX0RFRkFVTFRfQVJDSH0iCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCcgLWluc3RhbGxfbmFtZSAkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQnIC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJChWRVJTSU9OKSAtY3VycmVudF92ZXJzaW9uICQoVkVSU0lPTiknOzsKIGVzYWMKLQogQUNfTVNHX0NIRUNLSU5HKGZvciAtLWVuYWJsZS1mcmFtZXdvcmspCiBpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKIHRoZW4KQEAgLTE5ODIsOSArMTk5Niw2IEBACiAKIAkJaWYgdGVzdCAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gJz4nIDEwLjIKIAkJdGhlbgotCQkJaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJCQlMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlmaQogCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKIAkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCkBAIC0yMTA4LDYgKzIxMTksMTIgQEAKIAkjIC11IGxpYnN5c19zIHB1bGxzIGluIGFsbCBzeW1ib2xzIGluIGxpYnN5cwogCURhcndpbi8qKSAKIAkJTElOS0ZPUlNIQVJFRD0iJGV4dHJhX3VuZGVmcyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorCisJCSMgSXNzdWUgIzE4MDc1OiB0aGUgZGVmYXVsdCBtYXhpbXVtIHN0YWNrIHNpemUgKDhNQnl0ZXMpIGlzIHRvbworCQkjIHNtYWxsIGZvciB0aGUgZGVmYXVsdCByZWN1cnNpb24gbGltaXQuIEluY3JlYXNlIHRoZSBzdGFjayBzaXplCisJCSMgdG8gZW5zdXJlIHRoYXQgdGVzdHMgZG9uJ3QgY3Jhc2gKKwkJTElOS0ZPUlNIQVJFRD0iLVdsLC1zdGFja19zaXplLDEwMDAwMDAgJExJTktGT1JTSEFSRUQiCisKIAkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCiAJCXRoZW4KIAkJCUxJTktGT1JTSEFSRUQ9IiRMSU5LRk9SU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwpAQCAtMjgyMyw3ICsyODQwLDcgQEAKIAogIyBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBBQ19DSEVDS19GVU5DUyhhbGFybSBhY2NlcHQ0IHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAotIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCisgY2xvY2sgY29uZnN0ciBjdGVybWlkIGR1cDMgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAogIGZleGVjdmUgZmRvcGVuZGlyIGZvcmsgZnBhdGhjb25mIGZzdGF0YXQgZnRpbWUgZnRydW5jYXRlIGZ1dGltZXNhdCBcCiAgZnV0aW1lbnMgZnV0aW1lcyBnYWlfc3RyZXJyb3IgXAogIGdldGdyb3VwbGlzdCBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCkBAIC0yODQzLDcgKzI4NjAsNyBAQAogIHNpZ3RpbWVkd2FpdCBzaWd3YWl0IHNpZ3dhaXRpbmZvIHNucHJpbnRmIHN0cmZ0aW1lIHN0cmxjcHkgc3ltbGlua2F0IHN5bmMgXAogIHN5c2NvbmYgdGNnZXRwZ3JwIHRjc2V0cGdycCB0ZW1wbmFtIHRpbWVnbSB0aW1lcyB0bXBmaWxlIHRtcG5hbSB0bXBuYW1fciBcCiAgdHJ1bmNhdGUgdW5hbWUgdW5saW5rYXQgdW5zZXRlbnYgdXRpbWVuc2F0IHV0aW1lcyB3YWl0aWQgd2FpdHBpZCB3YWl0MyB3YWl0NCBcCi0gd2NzY29sbCB3Y3NmdGltZSB3Y3N4ZnJtIHdyaXRldiBfZ2V0cHR5KQorIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3bWVtY21wIHdyaXRldiBfZ2V0cHR5KQogCiBBQ19DSEVDS19ERUNMKGRpcmZkLAogICAgIEFDX0RFRklORShIQVZFX0RJUkZELCAxLApAQCAtMjkxMCw2ICsyOTI3LDE2IEBACiAgICBBQ19NU0dfUkVTVUxUKHllcyldLAogICBbQUNfTVNHX1JFU1VMVChubykKIF0pCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHBybGltaXQpCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyAgICBdXSwgW1t2b2lkICp4PXBybGltaXRdXSldLAorICBbQUNfREVGSU5FKEhBVkVfUFJMSU1JVCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJsaW1pdCcgZnVuY3Rpb25zLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKKwogIyBPbiBzb21lIHN5c3RlbXMgKGVnLiBGcmVlQlNEIDUpLCB3ZSB3b3VsZCBmaW5kIGEgZGVmaW5pdGlvbiBvZiB0aGUKICMgZnVuY3Rpb25zIGN0ZXJtaWRfciwgc2V0Z3JvdXBzIGluIHRoZSBsaWJyYXJ5LCBidXQgbm8gcHJvdG90eXBlCiAjIChlLmcuIGJlY2F1c2Ugd2UgdXNlIF9YT1BFTl9TT1VSQ0UpLiBTZWUgd2hldGhlciB3ZSBjYW4gdGFrZSB0aGVpcgpAQCAtMzExMCw3ICszMTM3LDcgQEAKICMgY2hlY2sgZm9yIGxvbmcgZmlsZSBzdXBwb3J0IGZ1bmN0aW9ucwogQUNfQ0hFQ0tfRlVOQ1MoZnNlZWs2NCBmc2Vla28gZnN0YXR2ZnMgZnRlbGw2NCBmdGVsbG8gc3RhdHZmcykKIAotQUNfUkVQTEFDRV9GVU5DUyhkdXAyIGdldGN3ZCBzdHJkdXApCitBQ19SRVBMQUNFX0ZVTkNTKGR1cDIgc3RyZHVwKQogQUNfQ0hFQ0tfRlVOQ1MoZ2V0cGdycCwgCiAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbZ2V0cGdycCgwKTtdXSldLAogICAgIFtBQ19ERUZJTkUoR0VUUEdSUF9IQVZFX0FSRywgMSwgW0RlZmluZSBpZiBnZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgZ2V0cGdycCgwKS5dKV0sCkBAIC0zOTgzLDYgKzQwMTAsMTEgQEAKIExEVkVSU0lPTj0nJChWRVJTSU9OKSQoQUJJRkxBR1MpJwogQUNfTVNHX1JFU1VMVCgkTERWRVJTSU9OKQogCitkbmwgZGVmaW5lIExJQlBMIGFmdGVyIEFCSUZMQUdTIGFuZCBMRFZFUlNJT04gaXMgZGVmaW5lZC4KK0FDX1NVQlNUKFBZX0VOQUJMRV9TSEFSRUQpCitMSUJQTD0iJHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCitBQ19TVUJTVChMSUJQTCkKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgcmlnaHQgc2hpZnQgZXh0ZW5kcyB0aGUgc2lnbiBiaXQpCkBAIC00NjYyLDcgKzQ2OTQsNyBAQAogZmkKIAogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLUFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMpCitBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCkKIEFDX0NPTkZJR19GSUxFUyhbTW9kdWxlcy9sZF9zb19haXhdLCBbY2htb2QgK3ggTW9kdWxlcy9sZF9zb19haXhdKQogQUNfT1VUUFVUCiAKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IDAwMjAzMDAuLjEzOTc5ZmMgMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtNjQsOSArNjQsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGFuaCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BVEFOSAogCi0vKiBEZWZpbmUgaWYgR0NDIHN1cHBvcnRzIF9fYXR0cmlidXRlX18oKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKSkpICovCi0jdW5kZWYgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiaW5kX3RleHRkb21haW5fY29kZXNldCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVAogCkBAIC0xOTYsNiArMTkzLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZHVwMicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9EVVAyCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZHVwMycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9EVVAzCisKIC8qIERlZmluZWQgd2hlbiBhbnkgZHluYW1pYyBtb2R1bGUgbG9hZGluZyBpcyBlbmFibGVkLiAqLwogI3VuZGVmIEhBVkVfRFlOQU1JQ19MT0FESU5HCiAKQEAgLTMyMCw5ICszMjAsNiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVEFERFJJTkZPCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Y3dkJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVENXRAotCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBmbG9ja2ZpbGUoKSwgZ2V0Y191bmxvY2tlZCgpLCBhbmQgZnVubG9ja2ZpbGUoKSAqLwogI3VuZGVmIEhBVkVfR0VUQ19VTkxPQ0tFRAogCkBAIC01MDQsNiArNTAxLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlua2F0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0xJTktBVAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi9iY20uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSU5VWF9DQU5fQkNNX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9jYW4uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9MSU5VWF9DQU5fSAogCkBAIC02MjcsNiArNjI3LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHJlYWQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUFJFQUQKIAorLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJsaW1pdCcgZnVuY3Rpb25zLiAqLworI3VuZGVmIEhBVkVfUFJMSU1JVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9QUk9DRVNTX0gKIApAQCAtMTEyMSw2ICsxMTI0LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2NzeGZybScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9XQ1NYRlJNCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd21lbWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9XTUVNQ01QCisKIC8qIERlZmluZSBpZiB0enNldCgpIGFjdHVhbGx5IHN3aXRjaGVzIHRoZSBsb2NhbCB0aW1lem9uZSBpbiBhIG1lYW5pbmdmdWwgd2F5LgogICAgKi8KICN1bmRlZiBIQVZFX1dPUktJTkdfVFpTRVQKZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKaW5kZXggMTlhN2IyOS4uYzZhZTFiMiAxMDA2NDQKLS0tIGEvc2V0dXAucHkKKysrIGIvc2V0dXAucHkKQEAgLTEsNyArMSw3IEBACiAjIEF1dG9kZXRlY3Rpbmcgc2V0dXAucHkgc2NyaXB0IGZvciBidWlsZGluZyB0aGUgUHl0aG9uIGV4dGVuc2lvbnMKICMKIAotaW1wb3J0IHN5cywgb3MsIGltcCwgcmUsIG9wdHBhcnNlCitpbXBvcnQgc3lzLCBvcywgaW1wb3J0bGliLm1hY2hpbmVyeSwgcmUsIG9wdHBhcnNlCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKIGltcG9ydCBzeXNjb25maWcKIApAQCAtMjU5LDggKzI1OSw5IEBACiAKICAgICAgICAgaWYgbWlzc2luZzoKICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgIHByaW50KCJQeXRob24gYnVpbGQgZmluaXNoZWQsIGJ1dCB0aGUgbmVjZXNzYXJ5IGJpdHMgdG8gYnVpbGQgIgotICAgICAgICAgICAgICAgICAgICJ0aGVzZSBtb2R1bGVzIHdlcmUgbm90IGZvdW5kOiIpCisgICAgICAgICAgICBwcmludCgiUHl0aG9uIGJ1aWxkIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSEiKQorICAgICAgICAgICAgcHJpbnQoIlRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCB0aGVzZSBvcHRpb25hbCBtb2R1bGVzIHdlcmUgbm90ICIKKyAgICAgICAgICAgICAgICAgICJmb3VuZDoiKQogICAgICAgICAgICAgcHJpbnRfdGhyZWVfY29sdW1uKG1pc3NpbmcpCiAgICAgICAgICAgICBwcmludCgiVG8gZmluZCB0aGUgbmVjZXNzYXJ5IGJpdHMsIGxvb2sgaW4gc2V0dXAucHkgaW4iCiAgICAgICAgICAgICAgICAgICAiIGRldGVjdF9tb2R1bGVzKCkgZm9yIHRoZSBtb2R1bGUncyBuYW1lLiIpCkBAIC0zMjUsOCArMzI2LDkgQEAKICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dC5uYW1lLCBleHRfZmlsZW5hbWUpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcC5sb2FkX2R5bmFtaWMoZXh0Lm5hbWUsIGV4dF9maWxlbmFtZSkKKyAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCiAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCcqKiogV0FSTklORzogcmVuYW1pbmcgIiVzIiBzaW5jZSBpbXBvcnRpbmcgaXQnCkBAIC01ODgsNiArNTkwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsndGVzdGNhcGlfbG9uZy5oJ10pICkKICAgICAgICAgIyBQeXRob24gUEVQLTMxMTggKGJ1ZmZlciBwcm90b2NvbCkgdGVzdCBtb2R1bGUKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3Rlc3RidWZmZXInLCBbJ190ZXN0YnVmZmVyLmMnXSkgKQorICAgICAgICAjIFRlc3QgbG9hZGluZyBtdWx0aXBsZSBtb2R1bGVzIGZyb20gb25lIGNvbXBpbGVkIGZpbGUgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNjQyMSkKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3Rlc3RpbXBvcnRtdWx0aXBsZScsIFsnX3Rlc3RpbXBvcnRtdWx0aXBsZS5jJ10pICkKICAgICAgICAgIyBwcm9maWxlciAoX2xzcHJvZiBpcyBmb3IgY1Byb2ZpbGUucHkpCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19sc3Byb2YnLCBbJ19sc3Byb2YuYycsICdyb3RhdGluZ3RyZWUuYyddKSApCiAgICAgICAgICMgc3RhdGljIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlCkBAIC03ODQsMTAgKzc4OCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBpbmNmaWxlOgogICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG9wZW5zc2xfdmVyX3JlLm1hdGNoKGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyID0gZXZhbChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyID0gaW50KG0uZ3JvdXAoMSksIDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcHJpbnQoIklPRXJyb3Igd2hpbGUgcmVhZGluZyBvcGVuc3Nodi5oOiIsIG1zZykKLSAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgI3ByaW50KCdvcGVuc3NsX3ZlciA9IDB4JTA4eCcgJSBvcGVuc3NsX3ZlcikKICAgICAgICAgbWluX29wZW5zc2xfdmVyID0gMHgwMDkwNzAwMApAQCAtODIxLDYgKzgyNSwxNSBAQAogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfc2hhMScsIFsnc2hhMW1vZHVsZS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcz1bJ2hhc2hsaWIuaCddKSApCiAKKyAgICAgICAgIyBTSEEtMyAoS2VjY2FrKSBtb2R1bGUKKyAgICAgICAgc2hhM19kZXBlbmRzID0gWydoYXNobGliLmgnXQorICAgICAgICBrZWNjYWsgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHNyY2RpciwgJ01vZHVsZXMnLCAnX3NoYTMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tlY2NhaycpCisgICAgICAgIGZvciBwYXR0ZXJuIGluICgnKi5jJywgJyouaCcsICcqLm1hY3JvcycpOgorICAgICAgICAgICAgc2hhM19kZXBlbmRzLmV4dGVuZChnbG9iKG9zLnBhdGguam9pbihrZWNjYWssIHBhdHRlcm4pKSkKKyAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCJfc2hhMyIsIFsiX3NoYTMvc2hhM21vZHVsZS5jIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPXNoYTNfZGVwZW5kcykpCisKICAgICAgICAgIyBNb2R1bGVzIHRoYXQgcHJvdmlkZSBwZXJzaXN0ZW50IGRpY3Rpb25hcnktbGlrZSBzZW1hbnRpY3MuICBZb3Ugd2lsbAogICAgICAgICAjIHByb2JhYmx5IHdhbnQgdG8gYXJyYW5nZSBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZW0gdG8gYmUgYXZhaWxhYmxlIG9uCiAgICAgICAgICMgeW91ciBtYWNoaW5lLCB0aG91Z2ggbm9uZSBhcmUgZGVmaW5lZCBieSBkZWZhdWx0IGJlY2F1c2Ugb2YgbGlicmFyeQpAQCAtMTUwOSwxMCArMTUyMiw2IEBACiAKICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19nZXN0YWx0JywgWydfZ2VzdGFsdC5jJ10sCi0gICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bJy1mcmFtZXdvcmsnLCAnQ2FyYm9uJ10pCi0gICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19zY3Byb3h5JywgWydfc2Nwcm94eS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZyYW1ld29yaycsICdTeXN0ZW1Db25maWd1cmF0aW9uJywKQEAgLTIxNTYsNyArMjE2NSw3IEBACiBwcm9ncmFtbWFibGUgaW50ZXJmYWNlLgogCiBUaGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGlzIHBvcnRhYmxlOiBpdCBydW5zIG9uIG1hbnkgYnJhbmRzIG9mIFVOSVgsCi1vbiBXaW5kb3dzLCBET1MsIE9TLzIsIE1hYywgQW1pZ2EuLi4gSWYgeW91ciBmYXZvcml0ZSBzeXN0ZW0gaXNuJ3QKK29uIFdpbmRvd3MsIERPUywgTWFjLCBBbWlnYS4uLiBJZiB5b3VyIGZhdm9yaXRlIHN5c3RlbSBpc24ndAogbGlzdGVkIGhlcmUsIGl0IG1heSBzdGlsbCBiZSBzdXBwb3J0ZWQsIGlmIHRoZXJlJ3MgYSBDIGNvbXBpbGVyIGZvcgogaXQuIEFzayBhcm91bmQgb24gY29tcC5sYW5nLnB5dGhvbiAtLSBvciBqdXN0IHRyeSBjb21waWxpbmcgUHl0aG9uCiB5b3Vyc2VsZi4K